mirror of
https://github.com/byteworksinc/Linker.git
synced 2024-12-17 16:29:27 +00:00
Allow 2-byte RELEXPR records to be used for branches of + or - 64KB.
Previously, the linker gave an error if the relative displacement was more than + or - 32 KB. But 2-byte RELEXPR records are typically used for the operand of the BRL instruction, and since its address calculation wraps around within the program bank, it can effectively address + or - 64KB (i.e. any location within the program bank). Similar reasoning applies to PER, the other instruction using long relative addressing. This would give an error in code like the following: bigbrl start brl later ds 33000 ; realistic examples would have actual code here later rtl end (This currently also gives an assembler error due to similar logic in ORCA/M, but the output file can be linked anyway.) This issue can affect very large functions compiled with ORCA/C or ORCA/Pascal, which may sometimes have branches that go more than 32 KB forward or back.
This commit is contained in:
parent
42734c7433
commit
76ba56a36b
@ -1385,7 +1385,7 @@ lb2 lda t1,X
|
|||||||
blt lb2
|
blt lb2
|
||||||
lda t1-1,Y
|
lda t1-1,Y
|
||||||
bpl lb6
|
bpl lb6
|
||||||
bra lb5
|
bra lb4a
|
||||||
lb3 lda #$FF
|
lb3 lda #$FF
|
||||||
lb4 cmp t1,X
|
lb4 cmp t1,X
|
||||||
bne lb5
|
bne lb5
|
||||||
@ -1394,6 +1394,9 @@ lb4 cmp t1,X
|
|||||||
blt lb4
|
blt lb4
|
||||||
lda t1-1,Y
|
lda t1-1,Y
|
||||||
bmi lb6
|
bmi lb6
|
||||||
|
lb4a lda expLength let BRL wrap around within program bank
|
||||||
|
cmp #2
|
||||||
|
bge lb6
|
||||||
lb5 long I,M
|
lb5 long I,M
|
||||||
ph4 #0
|
ph4 #0
|
||||||
ph2 #11
|
ph2 #11
|
||||||
|
Loading…
Reference in New Issue
Block a user