mirror of
https://github.com/fadden/6502bench.git
synced 2024-08-21 02:29:33 +00:00
In the assembler output, add a blank line between the constants and addresses in the long list of equates. The earlier change that corrected the BIT instruction caused test 2009-branches-and-banks to fail, because it was relying on the idea that BIT made the carry flag indeterminate. Changing a BCC to a BVS restored the desired behavior.
82 lines
2.3 KiB
ArmAsm
82 lines
2.3 KiB
ArmAsm
; Copyright 2018 faddenSoft. All Rights Reserved.
|
|
; See the LICENSE.txt file for distribution terms (Apache 2.0).
|
|
;
|
|
; Assembler: cc65
|
|
;
|
|
; Both cc65 (2.17) and Merlin32 (1.0) have problems computing branches that
|
|
; wrap around a bank (e.g. from $0010 to $ffd0). cc65 is slightly less
|
|
; egregious in that a workaround is possible: if you specify a label that
|
|
; is in range, and then an offset, it will generate code.
|
|
|
|
.setcpu "65816"
|
|
|
|
symlong = $123456
|
|
|
|
|
|
.org $1000
|
|
clc
|
|
xce
|
|
sep #$30
|
|
.a8
|
|
.i8
|
|
jmp zero
|
|
|
|
.org $0000
|
|
zero: bit a:zero
|
|
low: lda zero
|
|
lda low
|
|
bne low-$40 ;reference symbol
|
|
bmi low-$40 ;EDIT: format as hex
|
|
per low-$40
|
|
bvs more
|
|
brl more1
|
|
lodat: .byte $00,$01,$02 ;EDIT: set label
|
|
more: lda more-2
|
|
brl zero-$40 ;branch to high
|
|
|
|
.org $0080
|
|
more1: bit a:more1
|
|
jml bank44
|
|
|
|
.org $ffc0
|
|
high:
|
|
bit high
|
|
brl high+$43 ;branch to low
|
|
|
|
.org $440000
|
|
bank44: cmp f:bank44
|
|
low44: lda bank44
|
|
lda a:bank44 & $ffff
|
|
lda z:bank44 & $ffff ;DP ref, should resolve to "zero"
|
|
bmi low44
|
|
per low44-$40
|
|
bne low44-$40 ;branch to high44
|
|
brl bank44-$40 ;branch to late44
|
|
|
|
dat44: ;EDIT: set label
|
|
.addr dat44 ;EDIT: format as 16-bit Address
|
|
.faraddr dat44 ;EDIT: format as 24-bit Address
|
|
|
|
.org $44ffc0
|
|
late44: cmp f:late44
|
|
high44: beq cont44 ;EDIT: set label
|
|
bmi late44+$44 ;branch to low44
|
|
brl late44+$44 ;branch to low44
|
|
|
|
cont44: jml twok
|
|
|
|
.org $2000
|
|
twok: bit twok
|
|
pea dat44 & $ffff ;EDIT: set symbol=dat44
|
|
pea dat44 >> 16 ;EDIT: set symbol=dat44
|
|
bne skip
|
|
jmp [lodat]
|
|
|
|
skip: nop
|
|
j1: jsr j2 ;EDIT: set symbol=j2 for all, confirm auto-labels vanish
|
|
j2: jsr j3 ;EDIT: set label
|
|
j3: jsr j1
|
|
|
|
jsl symlong
|
|
rts
|