1
0
mirror of https://github.com/mnaberez/py65.git synced 2024-06-29 09:29:36 +00:00

bugfix: long standing branch bug in assembler and disassembler

This commit is contained in:
BigEd 2011-08-20 22:35:03 +01:00
parent c264bd6707
commit 7e48fade90
3 changed files with 3 additions and 4 deletions

View File

@ -87,8 +87,7 @@ class Assembler:
# relative branch
absolute = int(''.join(operands), 16)
relative = (absolute - pc) - 2
if (relative < 1):
relative = (relative ^ self.byteMask) + 1
relative = relative & self.byteMask
operands = [ (self.byteFmt % relative) ]
elif len(operands) == 2:

View File

@ -80,7 +80,7 @@ class Disassembler:
elif addressing == 'rel':
opv = self._mpu.ByteAt(pc + 1)
targ = pc + 2
if opv & (1<<self.byteWidth):
if opv & (1<<(self.byteWidth-1)):
targ -= (opv ^ self.byteMask) + 1
else:
targ += opv

View File

@ -236,7 +236,7 @@ class Monitor(cmd.Cmd):
return
# assemble into memory
bytes = self._assembler.assemble(line)
bytes = self._assembler.assemble(line, pc=start)
if bytes is None:
self.stdout.write("\r$" + (self.addrFmt % start) + " ???\n")
continue