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_64tass.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

114 lines
2.0 KiB
ArmAsm

.cpu "65816"
zero = $00
longsym = $123456
* = $1000
.as
.xs
clc
xce
sep #$30
jml L440000
lodat .byte $00
.byte $01
.byte $02
.logical $440000
L440000 cmp L440000
L440004 lda L440000
lda @w0+(L440000 & $ffff)
lda zero
bmi L440004
per high44
bne high44
brl L44FFC0
dat44 .word 0+(dat44 & $ffff)
.long dat44
.here
.logical $44ffc0
L44FFC0 cmp L44FFC0
high44 beq _L44FFCB
bmi L440004
brl L440004
_L44FFCB jml _L2000
.here
.logical $2000
_L2000 bit _L2000
pea 0+(dat44 & $ffff)
pea 0+(dat44 >> 16)
bne skip
jml [lodat]
skip nop
jsr j2
j2 jsr j2+3
jsr j2-3
jsl longsym
jml bank54
.here
.logical $543210
bank54 cmp bank54
bra L54321C
backchk nop
nop
L543218 rts
backval .long backchk
L54321C lda backchk
lda fwdchk
lda $543216
lda $54327d
lda 0+(backchk & $ffff)+1
lda 0+(backchk & $ffff)-1
lda 0+(fwdchk & $ffff)+1
lda 0+(fwdval & $ffff)+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 .long fwdchk
fwdchk nop
nop
L54327F rts
L543280 jsr skip+$540000
rtl
.here