1
0
mirror of https://github.com/fadden/6502bench.git synced 2024-12-10 21:49:27 +00:00
6502bench/SourceGen/SGTestData/Expected/2009-branches-and-banks_64tass.S
Andy McFadden 32d1147eec Improve multi-encoding output in 64tass
Previously, we used the default character encoding from the project
properties to determine how strings and character constants in the
entire source file should be encoded.  Now we switch between
encodings as needed.  The default character encoding is no longer
relevant.

High ASCII is now an actual encoding, rather than acting like ASCII
that sometimes doesn't work.  Because we can do high ASCII character
operands with "| $80", we don't output a .enc to switch from ASCII
to high ASCII unless we need to generate a string.  (If we're
already in high ASCII mode, the "| $80" isn't required but won't
hurt anything.)

We now do a scan up front to see if ASCII or high ASCII is needed,
and only output the .cdefs for the encodings that are actually used.

The only gap in the matrix is high ASCII DCI strings -- the ".shift"
pseudo-op rejects text if the string doesn't start with the high
bit clear.
2019-08-21 13:46:05 -07:00

78 lines
1.4 KiB
ArmAsm

.cpu "65816"
longsym = $123456
* = $1000
.as
.xs
clc
xce
sep #$30
jmp L0000
.logical $0000
L0000 bit @wL0000
L0003 lda L0000
lda L0003
bne LFFC3
bmi $ffc3
per LFFC3
bcc L0016
brl L0080
lodat .byte $00
.byte $01
.byte $02
L0016 lda lodat+1
brl LFFC0
.here
.logical $0080
L0080 bit @wL0080
jml L440000
.here
.logical $ffc0
LFFC0 bit LFFC0
LFFC3 brl L0003
.here
.logical $440000
L440000 cmp L440000
L440004 lda L440000
lda @w0+(L440000 & $ffff)
lda L0000
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 L200E
jml [lodat]
L200E nop
jsr j2
j2 jsr j2+3
jsr j2-3
jsl longsym
rts
.here