261 lines
4 KiB
Go
261 lines
4 KiB
Go
package neon
|
|
|
|
func stepNOP(c *CPU, addr uint16) Interrupt {
|
|
return NoInterrupt
|
|
}
|
|
|
|
func stepLA_(c *CPU, addr uint16) Interrupt {
|
|
v := c.RAM[addr]
|
|
c.A = v
|
|
return NoInterrupt
|
|
}
|
|
|
|
func stepLAB(c *CPU, addr uint16) Interrupt {
|
|
c.A = c.B
|
|
return NoInterrupt
|
|
}
|
|
|
|
func stepLB_(c *CPU, addr uint16) Interrupt {
|
|
v := c.RAM[addr]
|
|
c.B = v
|
|
return NoInterrupt
|
|
}
|
|
|
|
func stepLBA(c *CPU, addr uint16) Interrupt {
|
|
c.B = c.A
|
|
return NoInterrupt
|
|
}
|
|
|
|
func stepSWP(c *CPU, addr uint16) Interrupt {
|
|
c.A, c.B = c.B, c.A
|
|
return NoInterrupt
|
|
}
|
|
|
|
func stepSTA(c *CPU, addr uint16) Interrupt {
|
|
c.RAM[addr] = c.A
|
|
return NoInterrupt
|
|
}
|
|
|
|
func stepSTB(c *CPU, addr uint16) Interrupt {
|
|
c.RAM[addr] = c.B
|
|
return NoInterrupt
|
|
}
|
|
|
|
func stepAD_(c *CPU, addr uint16) Interrupt {
|
|
v := c.RAM[addr]
|
|
c.A += v
|
|
c.C = c.A < v
|
|
return NoInterrupt
|
|
}
|
|
|
|
func stepADB(c *CPU, addr uint16) Interrupt {
|
|
c.A += c.B
|
|
c.C = c.A < c.B
|
|
return NoInterrupt
|
|
}
|
|
|
|
func stepAC_(c *CPU, addr uint16) Interrupt {
|
|
v := c.RAM[addr]
|
|
c.A += v
|
|
if c.C {
|
|
c.A++
|
|
}
|
|
c.C = c.A < v
|
|
return NoInterrupt
|
|
}
|
|
|
|
func stepACB(c *CPU, addr uint16) Interrupt {
|
|
c.A += c.B
|
|
if c.C {
|
|
c.A++
|
|
}
|
|
c.C = c.A < c.B
|
|
return NoInterrupt
|
|
}
|
|
|
|
func stepINA(c *CPU, addr uint16) Interrupt {
|
|
c.A++
|
|
c.C = c.A == 0
|
|
return NoInterrupt
|
|
}
|
|
|
|
func stepINB(c *CPU, addr uint16) Interrupt {
|
|
c.B++
|
|
c.C = c.B == 0
|
|
return NoInterrupt
|
|
}
|
|
|
|
func stepSB_(c *CPU, addr uint16) Interrupt {
|
|
v := c.RAM[addr]
|
|
c.A -= v
|
|
return NoInterrupt
|
|
}
|
|
|
|
func stepSBB(c *CPU, addr uint16) Interrupt {
|
|
c.A -= c.B
|
|
return NoInterrupt
|
|
}
|
|
|
|
func stepSC_(c *CPU, addr uint16) Interrupt {
|
|
v := c.RAM[addr]
|
|
c.A -= v
|
|
if c.C {
|
|
c.A--
|
|
}
|
|
c.C = c.A > v
|
|
return NoInterrupt
|
|
}
|
|
|
|
func stepSCB(c *CPU, addr uint16) Interrupt {
|
|
c.A -= c.B
|
|
if c.C {
|
|
c.A--
|
|
}
|
|
c.C = c.A > c.B
|
|
return NoInterrupt
|
|
}
|
|
|
|
func stepDEA(c *CPU, addr uint16) Interrupt {
|
|
c.C = c.A == 0
|
|
c.A--
|
|
return NoInterrupt
|
|
}
|
|
|
|
func stepDEB(c *CPU, addr uint16) Interrupt {
|
|
c.C = c.A == 0
|
|
c.B--
|
|
return NoInterrupt
|
|
}
|
|
|
|
func stepTE_(c *CPU, addr uint16) Interrupt {
|
|
v := c.RAM[addr]
|
|
c.T = c.A == v
|
|
return NoInterrupt
|
|
}
|
|
|
|
func stepTEB(c *CPU, addr uint16) Interrupt {
|
|
c.T = c.A == c.B
|
|
return NoInterrupt
|
|
}
|
|
|
|
func stepTG_(c *CPU, addr uint16) Interrupt {
|
|
v := c.RAM[addr]
|
|
c.T = c.A > v
|
|
return NoInterrupt
|
|
}
|
|
|
|
func stepTGB(c *CPU, addr uint16) Interrupt {
|
|
c.T = c.A > c.B
|
|
return NoInterrupt
|
|
}
|
|
|
|
func stepTL_(c *CPU, addr uint16) Interrupt {
|
|
v := c.RAM[addr]
|
|
c.T = c.A < v
|
|
return NoInterrupt
|
|
}
|
|
|
|
func stepTLB(c *CPU, addr uint16) Interrupt {
|
|
c.T = c.A < c.B
|
|
return NoInterrupt
|
|
}
|
|
|
|
func stepTFC(c *CPU, addr uint16) Interrupt {
|
|
c.T = c.C
|
|
return NoInterrupt
|
|
}
|
|
|
|
func stepTFI(c *CPU, addr uint16) Interrupt {
|
|
c.T = c.I
|
|
return NoInterrupt
|
|
}
|
|
|
|
func stepJMP(c *CPU, addr uint16) Interrupt {
|
|
if c.J {
|
|
return NoInterrupt
|
|
}
|
|
v := c.get16(addr)
|
|
c.PC = v
|
|
return NoInterrupt
|
|
}
|
|
|
|
func stepJRF(c *CPU, addr uint16) Interrupt {
|
|
if c.J {
|
|
return NoInterrupt
|
|
}
|
|
v := c.RAM[addr]
|
|
c.PC += uint16(v)
|
|
return NoInterrupt
|
|
}
|
|
|
|
func stepJRB(c *CPU, addr uint16) Interrupt {
|
|
if c.J {
|
|
return NoInterrupt
|
|
}
|
|
v := c.RAM[addr]
|
|
c.PC -= 2 + uint16(v)
|
|
return NoInterrupt
|
|
}
|
|
|
|
func stepJSR(c *CPU, addr uint16) Interrupt {
|
|
if c.J {
|
|
return NoInterrupt // TODO: Does this make sense???
|
|
}
|
|
panic("TODO")
|
|
}
|
|
|
|
func stepRET(c *CPU, addr uint16) Interrupt {
|
|
if c.J {
|
|
return NoInterrupt // TODO: Does this make sense???
|
|
}
|
|
panic("TODO")
|
|
}
|
|
|
|
func stepSET(c *CPU, addr uint16) Interrupt {
|
|
c.T = true
|
|
return NoInterrupt
|
|
}
|
|
|
|
func stepSEC(c *CPU, addr uint16) Interrupt {
|
|
c.C = true
|
|
return NoInterrupt
|
|
}
|
|
|
|
func stepSEI(c *CPU, addr uint16) Interrupt {
|
|
c.I = true
|
|
return NoInterrupt
|
|
}
|
|
|
|
func stepSEJ(c *CPU, addr uint16) Interrupt {
|
|
c.J = true
|
|
return NoInterrupt
|
|
}
|
|
|
|
func stepCLT(c *CPU, addr uint16) Interrupt {
|
|
c.T = false
|
|
return NoInterrupt
|
|
}
|
|
|
|
func stepCLC(c *CPU, addr uint16) Interrupt {
|
|
c.C = false
|
|
return NoInterrupt
|
|
}
|
|
|
|
func stepCLI(c *CPU, addr uint16) Interrupt {
|
|
c.I = false
|
|
return NoInterrupt
|
|
}
|
|
|
|
func stepCLJ(c *CPU, addr uint16) Interrupt {
|
|
c.J = false
|
|
return NoInterrupt
|
|
}
|
|
|
|
func stepINT(c *CPU, addr uint16) Interrupt {
|
|
if c.I {
|
|
return NoInterrupt
|
|
}
|
|
v := c.RAM[addr]
|
|
return Interrupt(v)
|
|
}
|