From 5a8b25b771202b4eeaeb0336aad39777fc634032 Mon Sep 17 00:00:00 2001 From: Greg Hewgill Date: Sun, 7 Aug 2011 18:17:09 +1200 Subject: [PATCH 1/5] only need to allocate 64k of memory --- applepy.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applepy.py b/applepy.py index 237abed..006cbf6 100644 --- a/applepy.py +++ b/applepy.py @@ -689,7 +689,7 @@ class CPU: if __name__ == "__main__": - mem = Memory(0x100000) + mem = Memory(0x10000) # available from http://www.easy68k.com/paulrsm/6502/index.html mem.load_file(0xD000, "A2ROM.BIN") From e961d7e00d562b959d8ef1ff5a13e78e9b050586 Mon Sep 17 00:00:00 2001 From: Greg Hewgill Date: Sun, 7 Aug 2011 18:33:42 +1200 Subject: [PATCH 2/5] simplify calculating signed values in adc and sbc --- applepy.py | 20 ++++++++------------ 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/applepy.py b/applepy.py index 006cbf6..14f49a0 100644 --- a/applepy.py +++ b/applepy.py @@ -602,12 +602,10 @@ class CPU: # @@@ doesn't handle BCD yet assert not self.decimal_mode_flag - a1 = a2 = self.accumulator - if a1 & 0x80: - a1 = (a1 & 0x7F) - 0x80 - m1 = m2 = self.memory.read_byte(operand_address) - if m1 & 0x80: - m1 = (m1 & 0x7F) - 0x80 + a2 = self.accumulator + a1 = signed(a2) + m2 = self.memory.read_byte(operand_address) + m1 = signed(m2) # twos complement addition result1 = a1 + m1 + self.carry_flag @@ -624,12 +622,10 @@ class CPU: # @@@ doesn't handle BCD yet assert not self.decimal_mode_flag - a1 = a2 = self.accumulator - if a1 & 0x80: - a1 = (a1 & 0x7F) - 0x80 - m1 = m2 = self.memory.read_byte(operand_address) - if m1 & 0x80: - m1 = (m1 & 0x7F) - 0x80 + a2 = self.accumulator + a1 = signed(a2) + m2 = self.memory.read_byte(operand_address) + m1 = signed(m2) # twos complement subtraction result1 = a1 - m1 - [1, 0][self.carry_flag] From dde4a83f85b72e1e32522c5ae5c8569f591bfaaf Mon Sep 17 00:00:00 2001 From: Greg Hewgill Date: Sun, 7 Aug 2011 19:10:30 +1200 Subject: [PATCH 3/5] fix typo in instruction table --- applepy.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applepy.py b/applepy.py index 14f49a0..872736c 100644 --- a/applepy.py +++ b/applepy.py @@ -133,7 +133,7 @@ class CPU: self.ops[0x3D] = lambda: self.AND(self.absolute_x_mode()) self.ops[0x3E] = lambda: self.ROL(self.absolute_x_mode()) self.ops[0x40] = lambda: self.RTI() - self.ops[0x41] = lambda: self.EOR(x.indirect_x_mode()) + self.ops[0x41] = lambda: self.EOR(self.indirect_x_mode()) self.ops[0x45] = lambda: self.EOR(self.zero_page_mode()) self.ops[0x46] = lambda: self.LSR(self.zero_page_mode()) self.ops[0x48] = lambda: self.PHA() From 1925846c3c59d82d107742ad62456f101058bb88 Mon Sep 17 00:00:00 2001 From: Greg Hewgill Date: Sun, 7 Aug 2011 19:32:39 +1200 Subject: [PATCH 4/5] fix dump() function so it works (when uncommented) --- applepy.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/applepy.py b/applepy.py index 872736c..66efdd2 100644 --- a/applepy.py +++ b/applepy.py @@ -251,7 +251,7 @@ class CPU: def reset(self): self.program_counter = self.memory.read_word(self.RESET_VECTOR) - def dump(self, win): + def dump(self, win, op): win.addstr(10, 50, "%04X got %02X" % (self.program_counter - 1, op)) win.addstr(14, 50, "BUFFER:" + " ".join("%02X" % self.memory.read_byte(m) for m in range(0x200, 0x210)) @@ -280,7 +280,7 @@ class CPU: win.nodelay(True) while True: op = self.read_pc_byte() - # self.dump(win) + # self.dump(win, op) func = self.ops[op] if func is None: curses.endwin() From c9dcee2f085c14effb04568120739dc76066f37c Mon Sep 17 00:00:00 2001 From: Greg Hewgill Date: Sun, 7 Aug 2011 20:30:44 +1200 Subject: [PATCH 5/5] fix typos for zero_page_y_mode in instruction dispatch table --- applepy.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/applepy.py b/applepy.py index 66efdd2..6f1efa1 100644 --- a/applepy.py +++ b/applepy.py @@ -181,7 +181,7 @@ class CPU: self.ops[0x91] = lambda: self.STA(self.indirect_y_mode()) self.ops[0x94] = lambda: self.STY(self.zero_page_x_mode()) self.ops[0x95] = lambda: self.STA(self.zero_page_x_mode()) - self.ops[0x96] = lambda: self.STX(self.zero_page_y()) + self.ops[0x96] = lambda: self.STX(self.zero_page_y_mode()) self.ops[0x98] = lambda: self.TYA() self.ops[0x99] = lambda: self.STA(self.absolute_y_mode()) self.ops[0x9A] = lambda: self.TXS() @@ -202,7 +202,7 @@ class CPU: self.ops[0xB1] = lambda: self.LDA(self.indirect_y_mode()) self.ops[0xB4] = lambda: self.LDY(self.zero_page_x_mode()) self.ops[0xB5] = lambda: self.LDA(self.zero_page_x_mode()) - self.ops[0xB6] = lambda: self.LDX(self.zero_page_y()) + self.ops[0xB6] = lambda: self.LDX(self.zero_page_y_mode()) self.ops[0xB8] = lambda: self.CLV() self.ops[0xB9] = lambda: self.LDA(self.absolute_y_mode()) self.ops[0xBA] = lambda: self.TSX()