mirror of
https://github.com/mnaberez/py65.git
synced 2024-07-07 01:28:55 +00:00
Removed duplication in instructions using accumulator mode.
This commit is contained in:
parent
926e2c55b1
commit
3b40ede9bc
@ -172,24 +172,35 @@ class MPU:
|
|||||||
self.FlagsNZ(self.a)
|
self.FlagsNZ(self.a)
|
||||||
|
|
||||||
def opASL(self, x):
|
def opASL(self, x):
|
||||||
addr = x()
|
if x is None:
|
||||||
tbyte = self.ByteAt(addr)
|
tbyte = self.a
|
||||||
|
else:
|
||||||
|
addr = x()
|
||||||
|
tbyte = self.ByteAt(addr)
|
||||||
|
|
||||||
self.flags &= ~(self.CARRY + self.NEGATIVE + self.ZERO)
|
self.flags &= ~(self.CARRY + self.NEGATIVE + self.ZERO)
|
||||||
|
|
||||||
if tbyte & 128:
|
if tbyte & 128:
|
||||||
self.flags |= self.CARRY
|
self.flags |= self.CARRY
|
||||||
|
|
||||||
tbyte = (tbyte << 1) & 0xFF
|
tbyte = (tbyte << 1) & 0xFF
|
||||||
|
|
||||||
if tbyte:
|
if tbyte:
|
||||||
self.flags |= tbyte & 128
|
self.flags |= tbyte & 128
|
||||||
else:
|
else:
|
||||||
self.flags |= self.ZERO
|
self.flags |= self.ZERO
|
||||||
|
|
||||||
self.memory[addr] = tbyte
|
if x is None:
|
||||||
|
self.a = tbyte
|
||||||
|
else:
|
||||||
|
self.memory[addr] = tbyte
|
||||||
|
|
||||||
def opLSR(self, x):
|
def opLSR(self, x):
|
||||||
addr = x()
|
if x is None:
|
||||||
tbyte = self.ByteAt(addr)
|
tbyte = self.a
|
||||||
|
else:
|
||||||
|
addr = x()
|
||||||
|
tbyte = self.ByteAt(addr)
|
||||||
|
|
||||||
self.flags &=~(self.CARRY+self.NEGATIVE+self.ZERO)
|
self.flags &=~(self.CARRY+self.NEGATIVE+self.ZERO)
|
||||||
self.flags |=tbyte&1
|
self.flags |=tbyte&1
|
||||||
|
|
||||||
@ -198,7 +209,11 @@ class MPU:
|
|||||||
pass # {}
|
pass # {}
|
||||||
else:
|
else:
|
||||||
self.flags |= self.ZERO
|
self.flags |= self.ZERO
|
||||||
self.memory[addr]=tbyte
|
|
||||||
|
if x is None:
|
||||||
|
self.a = tbyte
|
||||||
|
else:
|
||||||
|
self.memory[addr]=tbyte
|
||||||
|
|
||||||
def opBCL(self, x):
|
def opBCL(self, x):
|
||||||
if self.flags & x:
|
if self.flags & x:
|
||||||
@ -230,8 +245,12 @@ class MPU:
|
|||||||
self.flags |= tbyte&(128+64)
|
self.flags |= tbyte&(128+64)
|
||||||
|
|
||||||
def opROL(self, x):
|
def opROL(self, x):
|
||||||
addr = x()
|
if x is None:
|
||||||
tbyte = self.ByteAt(addr)
|
tbyte = self.a
|
||||||
|
else:
|
||||||
|
addr = x()
|
||||||
|
tbyte = self.ByteAt(addr)
|
||||||
|
|
||||||
if self.flags & self.CARRY:
|
if self.flags & self.CARRY:
|
||||||
if tbyte & 128:
|
if tbyte & 128:
|
||||||
pass
|
pass
|
||||||
@ -244,7 +263,11 @@ class MPU:
|
|||||||
tbyte = tbyte << 1
|
tbyte = tbyte << 1
|
||||||
tbyte &= 0xFF
|
tbyte &= 0xFF
|
||||||
self.FlagsNZ(tbyte)
|
self.FlagsNZ(tbyte)
|
||||||
self.memory[addr] = tbyte
|
|
||||||
|
if x is None:
|
||||||
|
self.a = tbyte
|
||||||
|
else:
|
||||||
|
self.memory[addr] = tbyte
|
||||||
|
|
||||||
def opEOR(self, x):
|
def opEOR(self, x):
|
||||||
self.a ^= self.ByteAt(x())
|
self.a ^= self.ByteAt(x())
|
||||||
@ -286,8 +309,12 @@ class MPU:
|
|||||||
self.a = data
|
self.a = data
|
||||||
|
|
||||||
def opROR(self, x):
|
def opROR(self, x):
|
||||||
addr=x()
|
if x is None:
|
||||||
tbyte = self.ByteAt(addr)
|
tbyte = self.a
|
||||||
|
else:
|
||||||
|
addr=x()
|
||||||
|
tbyte = self.ByteAt(addr)
|
||||||
|
|
||||||
if self.flags & self.CARRY:
|
if self.flags & self.CARRY:
|
||||||
if tbyte & 1:
|
if tbyte & 1:
|
||||||
pass # {}
|
pass # {}
|
||||||
@ -299,7 +326,11 @@ class MPU:
|
|||||||
self.flags |= self.CARRY
|
self.flags |= self.CARRY
|
||||||
tbyte=tbyte>>1
|
tbyte=tbyte>>1
|
||||||
self.FlagsNZ(tbyte)
|
self.FlagsNZ(tbyte)
|
||||||
self.memory[addr]=tbyte
|
|
||||||
|
if x is None:
|
||||||
|
self.a = tbyte
|
||||||
|
else:
|
||||||
|
self.memory[addr] = tbyte
|
||||||
|
|
||||||
def opSTA(self, x):
|
def opSTA(self, x):
|
||||||
self.memory[x()] = self.a
|
self.memory[x()] = self.a
|
||||||
@ -377,26 +408,42 @@ class MPU:
|
|||||||
self.a = data & 0xFF
|
self.a = data & 0xFF
|
||||||
|
|
||||||
def opDECR(self, x):
|
def opDECR(self, x):
|
||||||
addr = x()
|
if x is None:
|
||||||
tbyte = self.ByteAt(addr)
|
tbyte = self.a
|
||||||
|
else:
|
||||||
|
addr = x()
|
||||||
|
tbyte = self.ByteAt(addr)
|
||||||
|
|
||||||
self.flags &= ~(self.ZERO + self.NEGATIVE)
|
self.flags &= ~(self.ZERO + self.NEGATIVE)
|
||||||
tbyte = (tbyte - 1) & 0xFF
|
tbyte = (tbyte - 1) & 0xFF
|
||||||
if tbyte:
|
if tbyte:
|
||||||
self.flags |= tbyte & self.NEGATIVE
|
self.flags |= tbyte & self.NEGATIVE
|
||||||
else:
|
else:
|
||||||
self.flags |= self.ZERO
|
self.flags |= self.ZERO
|
||||||
self.memory[addr] = tbyte
|
|
||||||
|
if x is None:
|
||||||
|
self.a = tbyte
|
||||||
|
else:
|
||||||
|
self.memory[addr] = tbyte
|
||||||
|
|
||||||
def opINCR(self, x):
|
def opINCR(self, x):
|
||||||
addr = x()
|
if x is None:
|
||||||
tbyte = self.ByteAt(addr)
|
tbyte = self.a
|
||||||
|
else:
|
||||||
|
addr = x()
|
||||||
|
tbyte = self.ByteAt(addr)
|
||||||
|
|
||||||
self.flags &= ~(self.ZERO + self.NEGATIVE)
|
self.flags &= ~(self.ZERO + self.NEGATIVE)
|
||||||
tbyte = (tbyte + 1) & 0xFF
|
tbyte = (tbyte + 1) & 0xFF
|
||||||
if tbyte:
|
if tbyte:
|
||||||
self.flags |= tbyte & self.NEGATIVE
|
self.flags |= tbyte & self.NEGATIVE
|
||||||
else:
|
else:
|
||||||
self.flags |= self.ZERO
|
self.flags |= self.ZERO
|
||||||
self.memory[addr] = tbyte
|
|
||||||
|
if x is None:
|
||||||
|
self.a = tbyte
|
||||||
|
else:
|
||||||
|
self.memory[addr] = tbyte
|
||||||
|
|
||||||
def opLDA(self, x):
|
def opLDA(self, x):
|
||||||
self.a = self.ByteAt(x())
|
self.a = self.ByteAt(x())
|
||||||
@ -462,13 +509,7 @@ class MPU:
|
|||||||
|
|
||||||
@instruction(name="ASL", mode="acc", cycles=2)
|
@instruction(name="ASL", mode="acc", cycles=2)
|
||||||
def inst_0x0a(self):
|
def inst_0x0a(self):
|
||||||
if self.a & 128:
|
self.opASL(None)
|
||||||
self.flags |= self.CARRY
|
|
||||||
else:
|
|
||||||
self.flags &= ~self.CARRY
|
|
||||||
self.a = self.a << 1
|
|
||||||
self.FlagsNZ(self.a)
|
|
||||||
self.a &= 255
|
|
||||||
|
|
||||||
@instruction(name="ORA", mode="abs", cycles=4)
|
@instruction(name="ORA", mode="abs", cycles=4)
|
||||||
def inst_0x0d(self):
|
def inst_0x0d(self):
|
||||||
@ -554,16 +595,7 @@ class MPU:
|
|||||||
|
|
||||||
@instruction(name="ROL", mode="acc", cycles=2)
|
@instruction(name="ROL", mode="acc", cycles=2)
|
||||||
def inst_0x2a(self):
|
def inst_0x2a(self):
|
||||||
if self.flags & self.CARRY:
|
self.opROL(None)
|
||||||
if (self.a & 128) == 0:
|
|
||||||
self.flags &=~self.CARRY
|
|
||||||
self.a = (self.a<<1) | 1
|
|
||||||
else:
|
|
||||||
if self.a & 128:
|
|
||||||
self.flags |= self.CARRY
|
|
||||||
self.a = self.a << 1
|
|
||||||
self.a &= 0xFF
|
|
||||||
self.FlagsNZ(self.a)
|
|
||||||
|
|
||||||
@instruction(name="BIT", mode="abs", cycles=4)
|
@instruction(name="BIT", mode="abs", cycles=4)
|
||||||
def inst_0x2c(self):
|
def inst_0x2c(self):
|
||||||
@ -649,16 +681,7 @@ class MPU:
|
|||||||
|
|
||||||
@instruction(name="LSR", mode="acc", cycles=2)
|
@instruction(name="LSR", mode="acc", cycles=2)
|
||||||
def inst_0x4a(self):
|
def inst_0x4a(self):
|
||||||
self.flags &= ~(self.CARRY+self.NEGATIVE+self.ZERO)
|
self.opLSR(None)
|
||||||
if self.a & 1:
|
|
||||||
self.flags |= self.CARRY
|
|
||||||
|
|
||||||
self.a = self.a >> 1
|
|
||||||
if self.a:
|
|
||||||
pass # {}
|
|
||||||
else:
|
|
||||||
self.flags |= self.ZERO
|
|
||||||
self.a &= 255
|
|
||||||
|
|
||||||
@instruction(name="JMP", mode="abs", cycles=3)
|
@instruction(name="JMP", mode="abs", cycles=3)
|
||||||
def inst_0x4c(self):
|
def inst_0x4c(self):
|
||||||
@ -744,16 +767,7 @@ class MPU:
|
|||||||
|
|
||||||
@instruction(name="ROR", mode="acc", cycles=2)
|
@instruction(name="ROR", mode="acc", cycles=2)
|
||||||
def inst_0x6a(self):
|
def inst_0x6a(self):
|
||||||
if self.flags & self.CARRY:
|
self.opROR(None)
|
||||||
if (self.a & 1) == 0:
|
|
||||||
self.flags &= ~self.CARRY
|
|
||||||
self.a = (self.a >> 1) | 128
|
|
||||||
else:
|
|
||||||
if self.a & 1:
|
|
||||||
self.flags |= self.CARRY
|
|
||||||
self.a = self.a >> 1
|
|
||||||
self.FlagsNZ(self.a)
|
|
||||||
self.a &= 255
|
|
||||||
|
|
||||||
@instruction(name="JMP", mode="ind", cycles=5)
|
@instruction(name="JMP", mode="ind", cycles=5)
|
||||||
def inst_0x6c(self):
|
def inst_0x6c(self):
|
||||||
|
@ -239,14 +239,7 @@ class MPU(mpu6502.MPU):
|
|||||||
|
|
||||||
@instruction(name="INC", mode="acc", cycles=2)
|
@instruction(name="INC", mode="acc", cycles=2)
|
||||||
def inst_0x1a(self):
|
def inst_0x1a(self):
|
||||||
tbyte = self.a
|
self.opINCR(None)
|
||||||
self.flags &= ~(self.ZERO + self.NEGATIVE)
|
|
||||||
tbyte = (tbyte + 1) & 0xFF
|
|
||||||
if tbyte:
|
|
||||||
self.flags |= tbyte & self.NEGATIVE
|
|
||||||
else:
|
|
||||||
self.flags |= self.ZERO
|
|
||||||
self.a = tbyte
|
|
||||||
|
|
||||||
@instruction(name="TRB", mode="abs", cycles=6)
|
@instruction(name="TRB", mode="abs", cycles=6)
|
||||||
def inst_0x1c(self):
|
def inst_0x1c(self):
|
||||||
@ -255,14 +248,7 @@ class MPU(mpu6502.MPU):
|
|||||||
|
|
||||||
@instruction(name="DEC", mode="acc", cycles=2)
|
@instruction(name="DEC", mode="acc", cycles=2)
|
||||||
def inst_0x3a(self):
|
def inst_0x3a(self):
|
||||||
tbyte = self.a
|
self.opDECR(None)
|
||||||
self.flags &= ~(self.ZERO + self.NEGATIVE)
|
|
||||||
tbyte = (tbyte - 1) & 0xFF
|
|
||||||
if tbyte:
|
|
||||||
self.flags |= tbyte & self.NEGATIVE
|
|
||||||
else:
|
|
||||||
self.flags |= self.ZERO
|
|
||||||
self.a = tbyte
|
|
||||||
|
|
||||||
@instruction(name="BRA", mode="rel", cycles=1, extracycles=1)
|
@instruction(name="BRA", mode="rel", cycles=1, extracycles=1)
|
||||||
def inst_0x80(self):
|
def inst_0x80(self):
|
||||||
|
Loading…
Reference in New Issue
Block a user