mirror of
https://github.com/mnaberez/py65.git
synced 2025-04-08 19:40:03 +00:00
Fixed that ROL would not properly set the Z flag. Closes #2.
This commit is contained in:
parent
1724b54d05
commit
327459088c
@ -3,6 +3,8 @@ Next Release
|
||||
- Fixed signatures of getc/putc callbacks in monitor that were broken
|
||||
when the ObservableMemory interface changed in 0.3. Closes #1.
|
||||
|
||||
- Fixed that ROL would not properly set the Z flag. Closes #2.
|
||||
|
||||
0.4 (2009-06-06)
|
||||
|
||||
- Added ez_setup.py to bootstrap setuptools installation.
|
||||
|
@ -238,9 +238,10 @@ class MPU:
|
||||
else:
|
||||
if tbyte & 128:
|
||||
self.flags |= self.CARRY
|
||||
tbyte = tbyte << 1
|
||||
tbyte = tbyte << 1
|
||||
tbyte &= 0xFF
|
||||
self.FlagsNZ(tbyte)
|
||||
self.memory[addr] = tbyte & 0xFF
|
||||
self.memory[addr] = tbyte
|
||||
|
||||
def opEOR(self, x):
|
||||
self.a ^= self.ByteAt(x())
|
||||
@ -558,8 +559,8 @@ class MPU:
|
||||
if self.a & 128:
|
||||
self.flags |= self.CARRY
|
||||
self.a = self.a << 1
|
||||
self.a &= 0xFF
|
||||
self.FlagsNZ(self.a)
|
||||
self.a &= 255
|
||||
|
||||
@instruction(name="BIT", mode="abs", cycles=4)
|
||||
def inst_0x2c(self):
|
||||
|
@ -2955,6 +2955,18 @@ class Common6502Tests:
|
||||
self.assertEquals(mpu.ZERO, mpu.flags & mpu.ZERO)
|
||||
self.assertEquals(0, mpu.flags & mpu.NEGATIVE)
|
||||
|
||||
def test_rol_accumulator_80_and_carry_zero_sets_z_flag(self):
|
||||
mpu = self._make_mpu()
|
||||
mpu.a = 0x80
|
||||
mpu.flags &= ~(mpu.CARRY)
|
||||
mpu.flags &= ~(mpu.ZERO)
|
||||
mpu.memory[0x0000] = 0x2A #=> ROL A
|
||||
mpu.step()
|
||||
self.assertEquals(0x0001, mpu.pc)
|
||||
self.assertEquals(0x00, mpu.a)
|
||||
self.assertEquals(mpu.ZERO, mpu.flags & mpu.ZERO)
|
||||
self.assertEquals(0, mpu.flags & mpu.NEGATIVE)
|
||||
|
||||
def test_rol_accumulator_zero_and_carry_one_clears_z_flag(self):
|
||||
mpu = self._make_mpu()
|
||||
mpu.a = 0x00
|
||||
@ -3010,6 +3022,18 @@ class Common6502Tests:
|
||||
self.assertEquals(mpu.ZERO, mpu.flags & mpu.ZERO)
|
||||
self.assertEquals(0, mpu.flags & mpu.NEGATIVE)
|
||||
|
||||
def test_rol_absolute_80_and_carry_zero_sets_z_flag(self):
|
||||
mpu = self._make_mpu()
|
||||
mpu.flags &= ~(mpu.CARRY)
|
||||
mpu.flags &= ~(mpu.ZERO)
|
||||
self._write(mpu.memory, 0x0000, (0x2E, 0xCD, 0xAB)) #=> ROL $ABCD
|
||||
mpu.memory[0xABCD] = 0x80
|
||||
mpu.step()
|
||||
self.assertEquals(0x0003, mpu.pc)
|
||||
self.assertEquals(0x00, mpu.memory[0xABCD])
|
||||
self.assertEquals(mpu.ZERO, mpu.flags & mpu.ZERO)
|
||||
self.assertEquals(0, mpu.flags & mpu.NEGATIVE)
|
||||
|
||||
def test_rol_absolute_zero_and_carry_one_clears_z_flag(self):
|
||||
mpu = self._make_mpu()
|
||||
mpu.a = 0x00
|
||||
@ -3066,6 +3090,18 @@ class Common6502Tests:
|
||||
self.assertEquals(mpu.ZERO, mpu.flags & mpu.ZERO)
|
||||
self.assertEquals(0, mpu.flags & mpu.NEGATIVE)
|
||||
|
||||
def test_rol_zp_80_and_carry_zero_sets_z_flag(self):
|
||||
mpu = self._make_mpu()
|
||||
mpu.flags &= ~(mpu.CARRY)
|
||||
mpu.flags &= ~(mpu.ZERO)
|
||||
self._write(mpu.memory, 0x0000, (0x26, 0x10)) #=> ROL $0010
|
||||
mpu.memory[0x0010] = 0x80
|
||||
mpu.step()
|
||||
self.assertEquals(0x0002, mpu.pc)
|
||||
self.assertEquals(0x00, mpu.memory[0x0010])
|
||||
self.assertEquals(mpu.ZERO, mpu.flags & mpu.ZERO)
|
||||
self.assertEquals(0, mpu.flags & mpu.NEGATIVE)
|
||||
|
||||
def test_rol_zp_zero_and_carry_one_clears_z_flag(self):
|
||||
mpu = self._make_mpu()
|
||||
mpu.a = 0x00
|
||||
@ -3123,6 +3159,19 @@ class Common6502Tests:
|
||||
self.assertEquals(mpu.ZERO, mpu.flags & mpu.ZERO)
|
||||
self.assertEquals(0, mpu.flags & mpu.NEGATIVE)
|
||||
|
||||
def test_rol_absolute_x_indexed_80_and_carry_zero_sets_z_flag(self):
|
||||
mpu = self._make_mpu()
|
||||
mpu.flags &= ~(mpu.CARRY)
|
||||
mpu.flags &= ~(mpu.ZERO)
|
||||
mpu.x = 0x03
|
||||
self._write(mpu.memory, 0x0000, (0x3E, 0xCD, 0xAB)) #=> ROL $ABCD,X
|
||||
mpu.memory[0xABCD + mpu.x] = 0x80
|
||||
mpu.step()
|
||||
self.assertEquals(0x0003, mpu.pc)
|
||||
self.assertEquals(0x00, mpu.memory[0xABCD + mpu.x])
|
||||
self.assertEquals(mpu.ZERO, mpu.flags & mpu.ZERO)
|
||||
self.assertEquals(0, mpu.flags & mpu.NEGATIVE)
|
||||
|
||||
def test_rol_absolute_x_indexed_zero_and_carry_one_clears_z_flag(self):
|
||||
mpu = self._make_mpu()
|
||||
mpu.x = 0x03
|
||||
@ -3183,6 +3232,19 @@ class Common6502Tests:
|
||||
self.assertEquals(mpu.ZERO, mpu.flags & mpu.ZERO)
|
||||
self.assertEquals(0, mpu.flags & mpu.NEGATIVE)
|
||||
|
||||
def test_rol_zp_x_indexed_80_and_carry_zero_sets_z_flag(self):
|
||||
mpu = self._make_mpu()
|
||||
mpu.flags &= ~(mpu.CARRY)
|
||||
mpu.flags &= ~(mpu.ZERO)
|
||||
mpu.x = 0x03
|
||||
self._write(mpu.memory, 0x0000, (0x36, 0x10)) #=> ROL $0010,X
|
||||
mpu.memory[0x0010 + mpu.x] = 0x80
|
||||
mpu.step()
|
||||
self.assertEquals(0x0002, mpu.pc)
|
||||
self.assertEquals(0x00, mpu.memory[0x0010 + mpu.x])
|
||||
self.assertEquals(mpu.ZERO, mpu.flags & mpu.ZERO)
|
||||
self.assertEquals(0, mpu.flags & mpu.NEGATIVE)
|
||||
|
||||
def test_rol_zp_x_indexed_zero_and_carry_one_clears_z_flag(self):
|
||||
mpu = self._make_mpu()
|
||||
mpu.x = 0x03
|
||||
|
Loading…
x
Reference in New Issue
Block a user