1
0
mirror of https://github.com/mnaberez/py65.git synced 2025-08-08 13:25:01 +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 # relative branch
absolute = int(''.join(operands), 16) absolute = int(''.join(operands), 16)
relative = (absolute - pc) - 2 relative = (absolute - pc) - 2
if (relative < 1): relative = relative & self.byteMask
relative = (relative ^ self.byteMask) + 1
operands = [ (self.byteFmt % relative) ] operands = [ (self.byteFmt % relative) ]
elif len(operands) == 2: elif len(operands) == 2:

View File

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

View File

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