1
0
mirror of https://github.com/fadden/6502bench.git synced 2024-10-25 10:24:27 +00:00
6502bench/SourceGen/SGTestData/Expected/20052-branches-and-banks_64tass.S
Andy McFadden 478afa542e Fix 64tass code gen corner case
On the 65816, if you say "JSR foo" from bank $12, but "foo" is an
address in bank 0, most assemblers will conclude that you're forming
a 16-bit argument with a 16-bit address and assemble happily.  64tass
halts with an error.  Up until v1.55 or so, you could fake it out
by supplying a large offset.

This no longer works.  The preferred way to say "no really I mean to
do this" is to append ",k" to the operand.  We now do that as needed.

I didn't want to define a new ExpressionMode for 64tass just to
support an operand modifier that should probably never actually get
generated (you can't call across banks with JSR!), so this is
implemented with a quirk and an op flag.

64tass v1.56.2625 is now the default.

(issue #104)
2021-08-09 14:11:15 -07:00

152 lines
2.7 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 @wL440000 & $ffff
lda zero
bmi L440004
per high44
bne high44
brl L44FFC0
dat44 .word 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 dat44 & $ffff
pea 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
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 $543218
jsr fwdchk
jsr fwdchk+1
jsr $54327f
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 (lodat)
_L543271 jmp (lodat)
_L543274 jml [lodat]
_L543277 jml [lodat]
fwdval .long fwdchk
fwdchk nop
nop
rts
L543280 jsr skip,k
nop
rep #$30
.al
.xl
php
lda #$0000
sep #$30
.as
.xs
lda #$00
plp
lda #$ea
nop
sep #$30
php
lda #$00
rep #$30
.al
.xl
lda #$0000
plp
lda #$eaea
rep #$30
nop
lda skip
lda skip+20
jsr skip,k
jsr skip+20,k
jsr (skip,k,x)
bne _L5432B7
jmp (skip,k,x)
_L5432B7 jsr $54edcb
lda $edcb
bne _L5432C2
jmp ($54edcb,x)
_L5432C2 nop
rtl
.here