mirror of
https://github.com/fadden/6502bench.git
synced 2024-08-14 03:29:00 +00:00
fdd2bcf847
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.
114 lines
2.0 KiB
ArmAsm
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
|