1
0
mirror of https://github.com/fadden/6502bench.git synced 2024-07-06 00:28:58 +00:00
6502bench/SourceGen/SGTestData/Expected/20052-branches-and-banks_Merlin32.S
Andy McFadden fdd2bcf847 Fix some 65816 code generation issues
Two basic problems:

(1) cc65, being a one-pass assembler, can't tell if a forward-referenced
label is 16-bit or 24-bit.  If the operand is potentially ambiguous,
such as "LDA label", we need to add an operand width disambiguator.
(The existing tests managed to only do backward references.)

(2) 64tass wants the labels on JMP/JSR absolute operands to have 24-bit
values that match the current program bank.  This is the opposite of
cc65, which requires 16-bit values.  We need to distinguish PBR vs.
DBR instructions (i.e. "LDA abs" vs. "JMP abs") and handle them
differently when formatting for "Common".

Merlin32 doesn't care, and ACME doesn't work at all, so neither of
those needed updating.

The 20052-branches-and-banks test was expanded to cover the problematic
cases.
2020-07-01 17:59:12 -07:00

107 lines
1.8 KiB
ArmAsm

zero equ $00
longsym equ $123456
org $1000
clc
xce
sep #$30
jml L440000
lodat dfb $00
dfb $01
dfb $02
org $440000
L440000 cmpl L440000
L440004 ldal L440000
lda: L440000
lda zero
bmi L440004
dfb $62,$b2,$ff
dfb $d0,$b0
dfb $82,$a9,$ff
dat44 dw dat44
adr dat44
org $44ffc0
L44FFC0 cmpl L44FFC0
high44 beq :L44FFCB
dfb $30,$3c
dfb $82,$39,$00
:L44FFCB jml :L2000
org $2000
:L2000 bit :L2000
pea dat44
pea ^dat44
bne skip
jml [lodat]
skip nop
jsr j2
j2 jsr j2+3
jsr j2-3
jsl longsym
jml bank54
org $543210
bank54 cmpl bank54
bra L54321C
backchk nop
nop
L543218 rts
backval adr backchk
L54321C ldal backchk
ldal fwdchk
ldal $543216
ldal $54327d
lda backchk+1
lda backchk-1
lda fwdchk+1
lda fwdval+2
nop
jsr backchk
jsr backchk+1
jsr L543218
jsr fwdchk
jsr fwdchk+1
jsr L54327F
nop
ldx #$00
jsr (backval,x)
jsr (fwdval,x)
jsr :L54326E
jsr :L543271
jsr :L543268
jsr :L54326B
jsr :L543274
jsr :L543277
bra L543280
:L543268 jmp (backval,x)
:L54326B jmp (fwdval,x)
:L54326E jmp ($1008)
:L543271 jmp ($1008)
:L543274 jml [$1008]
:L543277 jml [$1008]
fwdval adr $54327d
fwdchk nop
nop
L54327F rts
L543280 jsr skip
rtl