mirror of
https://github.com/mnaberez/py65.git
synced 2024-10-15 10:24:03 +00:00
- Fixed bug in relative branch calculations.
- General cleanup.
This commit is contained in:
parent
db55b300fe
commit
8c2c57ad82
29
mpu.py
29
mpu.py
@ -18,8 +18,6 @@ class MPU:
|
|||||||
def __init__(self):
|
def __init__(self):
|
||||||
# config
|
# config
|
||||||
self.debug = False
|
self.debug = False
|
||||||
self.externalLoop = True
|
|
||||||
self.stopOnIterrupt = True
|
|
||||||
|
|
||||||
# vm status
|
# vm status
|
||||||
self.breakFlag = False
|
self.breakFlag = False
|
||||||
@ -58,16 +56,15 @@ class MPU:
|
|||||||
self.processorCycles=0
|
self.processorCycles=0
|
||||||
|
|
||||||
def clearMemory(self, start=0x0000, end=0xFFFF):
|
def clearMemory(self, start=0x0000, end=0xFFFF):
|
||||||
self.memory = self.RAM = []
|
self.memory = []
|
||||||
for addr in range(start, end + 1):
|
for addr in range(start, end + 1):
|
||||||
self.memory.insert(addr, 0x00)
|
self.memory.insert(addr, 0x00)
|
||||||
|
|
||||||
|
|
||||||
def ByteAt(self, addr):
|
def ByteAt(self, addr):
|
||||||
return self.memory[addr]
|
return self.memory[addr]
|
||||||
|
|
||||||
def WordAt(self, addr):
|
def WordAt(self, addr):
|
||||||
return self.ByteAt(addr) + self.ByteAt(0xffff&(addr+1))*256
|
return self.ByteAt(addr) + (self.ByteAt(addr + 1) << 8)
|
||||||
|
|
||||||
def ImmediateByte(self):
|
def ImmediateByte(self):
|
||||||
return self.ByteAt(self.pc)
|
return self.ByteAt(self.pc)
|
||||||
@ -123,7 +120,7 @@ class MPU:
|
|||||||
self.pc += 1
|
self.pc += 1
|
||||||
|
|
||||||
if addr & 128:
|
if addr & 128:
|
||||||
addr = self.pc - (addr ^ 0xFF) + 1
|
addr = self.pc - (addr ^ 0xFF) - 1
|
||||||
else:
|
else:
|
||||||
addr = self.pc + addr
|
addr = self.pc + addr
|
||||||
|
|
||||||
@ -135,7 +132,7 @@ class MPU:
|
|||||||
# stack
|
# stack
|
||||||
|
|
||||||
def stPush(self,z):
|
def stPush(self,z):
|
||||||
self.RAM[self.sp+256] = z&255
|
self.memory[self.sp+256] = z&255
|
||||||
self.sp -= 1
|
self.sp -= 1
|
||||||
self.sp &= 255
|
self.sp &= 255
|
||||||
|
|
||||||
@ -180,7 +177,7 @@ class MPU:
|
|||||||
else:
|
else:
|
||||||
self.flags |= self.ZERO
|
self.flags |= self.ZERO
|
||||||
|
|
||||||
self.RAM[addr] = tbyte
|
self.memory[addr] = tbyte
|
||||||
|
|
||||||
def opLSR(self, x):
|
def opLSR(self, x):
|
||||||
addr = x()
|
addr = x()
|
||||||
@ -193,7 +190,7 @@ class MPU:
|
|||||||
pass # {}
|
pass # {}
|
||||||
else:
|
else:
|
||||||
self.flags |= self.ZERO
|
self.flags |= self.ZERO
|
||||||
self.RAM[addr]=tbyte
|
self.memory[addr]=tbyte
|
||||||
|
|
||||||
def opBCL(self, x):
|
def opBCL(self, x):
|
||||||
if self.flags & x:
|
if self.flags & x:
|
||||||
@ -238,7 +235,7 @@ class MPU:
|
|||||||
self.flags |= self.CARRY
|
self.flags |= self.CARRY
|
||||||
tbyte = tbyte << 1
|
tbyte = tbyte << 1
|
||||||
self.FlagsNZ(tbyte)
|
self.FlagsNZ(tbyte)
|
||||||
self.RAM[addr] = tbyte & 0xFF
|
self.memory[addr] = tbyte & 0xFF
|
||||||
|
|
||||||
def opEOR(self, x):
|
def opEOR(self, x):
|
||||||
self.a ^= self.ByteAt(x())
|
self.a ^= self.ByteAt(x())
|
||||||
@ -292,16 +289,16 @@ class MPU:
|
|||||||
self.flags |= self.CARRY
|
self.flags |= self.CARRY
|
||||||
tbyte=tbyte>>1
|
tbyte=tbyte>>1
|
||||||
self.FlagsNZ(tbyte)
|
self.FlagsNZ(tbyte)
|
||||||
self.RAM[addr]=tbyte
|
self.memory[addr]=tbyte
|
||||||
|
|
||||||
def opSTA(self, x):
|
def opSTA(self, x):
|
||||||
self.RAM[x()] = self.a
|
self.memory[x()] = self.a
|
||||||
|
|
||||||
def opSTY(self, x):
|
def opSTY(self, x):
|
||||||
self.RAM[x()] = self.y
|
self.memory[x()] = self.y
|
||||||
|
|
||||||
def opSTX(self, y):
|
def opSTX(self, y):
|
||||||
self.RAM[y()] = self.x
|
self.memory[y()] = self.x
|
||||||
|
|
||||||
def opCPY(self, x):
|
def opCPY(self, x):
|
||||||
tbyte=self.ByteAt(x())
|
tbyte=self.ByteAt(x())
|
||||||
@ -377,7 +374,7 @@ class MPU:
|
|||||||
self.flags |= tbyte & self.NEGATIVE
|
self.flags |= tbyte & self.NEGATIVE
|
||||||
else:
|
else:
|
||||||
self.flags |= self.ZERO
|
self.flags |= self.ZERO
|
||||||
self.RAM[addr] = tbyte
|
self.memory[addr] = tbyte
|
||||||
|
|
||||||
def opINCR(self, x):
|
def opINCR(self, x):
|
||||||
addr = x()
|
addr = x()
|
||||||
@ -388,7 +385,7 @@ class MPU:
|
|||||||
self.flags |= tbyte & self.NEGATIVE
|
self.flags |= tbyte & self.NEGATIVE
|
||||||
else:
|
else:
|
||||||
self.flags |= self.ZERO
|
self.flags |= self.ZERO
|
||||||
self.RAM[addr] = tbyte
|
self.memory[addr] = tbyte
|
||||||
|
|
||||||
def opLDA(self, x):
|
def opLDA(self, x):
|
||||||
self.a = self.ByteAt(x())
|
self.a = self.ByteAt(x())
|
||||||
|
Loading…
Reference in New Issue
Block a user