From 303cb30f37e7fef74b4fe404719e3e92842c7a12 Mon Sep 17 00:00:00 2001
From: Mike Naberezny <mike@naberezny.com>
Date: Wed, 22 Jan 2014 14:40:18 -0800
Subject: [PATCH] Add tests for page wrapping

---
 py65/tests/devices/test_mpu6502.py | 47 +++++++++++++++++++++++++-----
 1 file changed, 40 insertions(+), 7 deletions(-)

diff --git a/py65/tests/devices/test_mpu6502.py b/py65/tests/devices/test_mpu6502.py
index 1f77227..740fa00 100644
--- a/py65/tests/devices/test_mpu6502.py
+++ b/py65/tests/devices/test_mpu6502.py
@@ -2769,7 +2769,7 @@ class Common6502Tests:
         self.assertEqual(mpu.NEGATIVE, mpu.p & mpu.NEGATIVE)
         self.assertEqual(0, mpu.p & mpu.ZERO)
 
-    def test_lda_abs_x_indexed_loads_x_sets_z_flag(self):
+    def test_lda_abs_x_indexed_loads_a_sets_z_flag(self):
         mpu = self._make_mpu()
         mpu.a = 0xFF
         mpu.x = 0x03
@@ -2782,6 +2782,17 @@ class Common6502Tests:
         self.assertEqual(mpu.ZERO, mpu.p & mpu.ZERO)
         self.assertEqual(0, mpu.p & mpu.NEGATIVE)
 
+    def test_lda_abs_x_indexed_does_not_page_wrap(self):
+        mpu = self._make_mpu()
+        mpu.a = 0
+        mpu.x = 0xFF
+        # $0000 LDA $0080,X
+        self._write(mpu.memory, 0x0000, (0xBD, 0x80, 0x00))
+        mpu.memory[0x0080 + mpu.x] = 0x42
+        mpu.step()
+        self.assertEqual(0x0003, mpu.pc)
+        self.assertEqual(0x42, mpu.a)
+
     # LDA Absolute, Y-Indexed
 
     def test_lda_abs_y_indexed_loads_a_sets_n_flag(self):
@@ -2810,6 +2821,17 @@ class Common6502Tests:
         self.assertEqual(mpu.ZERO, mpu.p & mpu.ZERO)
         self.assertEqual(0, mpu.p & mpu.NEGATIVE)
 
+    def test_lda_abs_y_indexed_does_not_page_wrap(self):
+        mpu = self._make_mpu()
+        mpu.a = 0
+        mpu.y = 0xFF
+        # $0000 LDA $0080,X
+        self._write(mpu.memory, 0x0000, (0xB9, 0x80, 0x00))
+        mpu.memory[0x0080 + mpu.y] = 0x42
+        mpu.step()
+        self.assertEqual(0x0003, mpu.pc)
+        self.assertEqual(0x42, mpu.a)
+
     # LDA Indirect, Indexed (X)
 
     def test_lda_ind_indexed_x_loads_a_sets_n_flag(self):
@@ -2876,11 +2898,11 @@ class Common6502Tests:
 
     # LDA Zero Page, X-Indexed
 
-    def test_lda_zp_x_indexed_loads_x_sets_n_flag(self):
+    def test_lda_zp_x_indexed_loads_a_sets_n_flag(self):
         mpu = self._make_mpu()
         mpu.a = 0x00
         mpu.x = 0x03
-        # $0000 LDA $0010,X
+        # $0000 LDA $10,X
         self._write(mpu.memory, 0x0000, (0xB5, 0x10))
         mpu.memory[0x0010 + mpu.x] = 0x80
         mpu.step()
@@ -2889,11 +2911,11 @@ class Common6502Tests:
         self.assertEqual(mpu.NEGATIVE, mpu.p & mpu.NEGATIVE)
         self.assertEqual(0, mpu.p & mpu.ZERO)
 
-    def test_lda_zp_x_indexed_loads_x_sets_z_flag(self):
+    def test_lda_zp_x_indexed_loads_a_sets_z_flag(self):
         mpu = self._make_mpu()
         mpu.a = 0xFF
         mpu.x = 0x03
-        # $0000 LDA $0010,X
+        # $0000 LDA $10,X
         self._write(mpu.memory, 0x0000, (0xB5, 0x10))
         mpu.memory[0x0010 + mpu.x] = 0x00
         mpu.step()
@@ -2902,6 +2924,17 @@ class Common6502Tests:
         self.assertEqual(mpu.ZERO, mpu.p & mpu.ZERO)
         self.assertEqual(0, mpu.p & mpu.NEGATIVE)
 
+    def test_lda_zp_x_indexed_page_wraps(self):
+        mpu = self._make_mpu()
+        mpu.a = 0x00
+        mpu.x = 0xFF
+        # $0000 LDA $80,X
+        self._write(mpu.memory, 0x0000, (0xB5, 0x80))
+        mpu.memory[0x007F] = 0x42
+        mpu.step()
+        self.assertEqual(0x0002, mpu.pc)
+        self.assertEqual(0x42, mpu.a)
+
     # LDX Absolute
 
     def test_ldx_absolute_loads_x_sets_n_flag(self):
@@ -5619,7 +5652,7 @@ class Common6502Tests:
         mpu.step()
         self.assertEqual(0x31, mpu.a)
 
-    def test_zeropage_ind_indexed_indexwrap(self):
+    def test_zeropage_ind_indexed_index_wrap(self):
         mpu = self._make_mpu()
         mpu.x = 0xff
         mpu.memory[0xa100] = 0x31
@@ -5633,7 +5666,7 @@ class Common6502Tests:
         mpu = self._make_mpu()
         mpu.x = 0xff
         mpu.memory[0x00ff] = 0
-        # $0000  LDA ($00,X)
+        # $0000 LDA ($00,X)
         self._write(mpu.memory, 0, (0x6c, 0xff, 0x00))
         mpu.step()
         self.assertEqual(0x6c00, mpu.pc)