mirror of
https://github.com/fadden/6502bench.git
synced 2024-08-14 18:28:57 +00:00
Generate a 6502 test from the 65816 version by substituting the 16-bit instructions with 8-bit no-ops. There's a lot of project edits and weird stuff in the test, so this was much easier than starting over. The 65816 variant is largely unchanged, though it could now be stripped down to the stack-offset instructions.
159 lines
4.2 KiB
ArmAsm
159 lines
4.2 KiB
ArmAsm
; Copyright 2019 faddenSoft. All Rights Reserved.
|
|
; See the LICENSE.txt file for distribution terms (Apache 2.0).
|
|
;
|
|
; Assembler: Merlin 32
|
|
; 65816 version
|
|
|
|
org $1000
|
|
|
|
; Define these as project symbols.
|
|
PROJ_ZERO equ $00
|
|
PROJ_ONE equ $01
|
|
CONST_ZERO equ $f0
|
|
CONST_ONE equ $f1
|
|
PTR_2 equ $f8 ;used to test uniqifier later on
|
|
|
|
ldy PROJ_ZERO
|
|
lda (PROJ_ONE),y
|
|
sta $03 ;undefined yet
|
|
ldx $04 ;undefined yet
|
|
lda CONST_ZERO,S ;explicitly set symbol
|
|
sta CONST_ONE,S ;leave as default (hex)
|
|
|
|
; TABLE - test redefinition of project symbol values
|
|
]VAR_ZERO equ $00 ;2b
|
|
]VAR_TWO equ $02 ;1b
|
|
]VAR_THREE equ $03 ;1b
|
|
]CONST_ZERO equ $f0 ;1b const
|
|
|
|
ldy PROJ_ZERO ;should become ]VAR_ZERO
|
|
lda (PROJ_ONE),y ;should become ]VAR_ZERO+1
|
|
sta $03 ;should become ]VAR_THREE
|
|
ldx $04 ;undefined yet
|
|
lda CONST_ZERO,S ;should become ]CONST_ZERO
|
|
sta CONST_ONE,S ;leave as default (hex)
|
|
|
|
eor $00 ;explicitly format as decimal
|
|
ora $f0,S ;explicitly format as decimal
|
|
|
|
; TABLE - test redefinition of symbol labels
|
|
]PROJ_ZERO equ $10 ;EDIT: rename to PROJ_ZERO
|
|
]DPCODE equ $80 ;EDIT: rename to DPCODE
|
|
|
|
lda $00
|
|
lda $01
|
|
lda $02
|
|
lda $03
|
|
lda $04
|
|
lda $10
|
|
lda $11
|
|
lda $80
|
|
|
|
; TABLE/CLEAR - empty table
|
|
ldx $00
|
|
ldx $01
|
|
ldx $02
|
|
|
|
; confirm that hidden tables are skipped over
|
|
dfb $2c
|
|
; TABLE (hidden)
|
|
]HIDDEN0 equ $00
|
|
]HIDDEN1 equ $01
|
|
lda #$ff
|
|
ldy $00
|
|
ldy $01
|
|
ldy $02
|
|
|
|
dfb $2c
|
|
; TABLE (not hidden)
|
|
]NH0 equ $00
|
|
]NH1 equ $01
|
|
:label lda #$fe
|
|
beq :label
|
|
ldy $00
|
|
ldy $01
|
|
ldy $02
|
|
|
|
nop
|
|
|
|
; TABLE
|
|
]PTR0 equ $10 ;2b
|
|
]CONST0 equ $10 ;4b
|
|
lda ]PTR0
|
|
ldx ]PTR0+1
|
|
ldy ]PTR0+2 ;should be hex
|
|
lda (]CONST0,S),y
|
|
sta (]CONST0+3,S),y
|
|
|
|
; test redefinition of name
|
|
|
|
; TABLE
|
|
]PTR equ $20 ;2b
|
|
ldx ]PTR
|
|
; TABLE
|
|
]PTR equ $22 ;2b
|
|
ldx ]PTR
|
|
; TABLE
|
|
]PTR equ $24 ;2b
|
|
ldx ]PTR
|
|
|
|
; define user label to try to trip up the uniqifier
|
|
PTR_1 nop
|
|
|
|
|
|
; test redefinition of value
|
|
; TABLE/CLEAR
|
|
]PTR_A equ $20 ;2b
|
|
ldy ]PTR_A ;PTR_A
|
|
]PTR_B equ $1f ;2b
|
|
ldy ]PTR_A ;PTR_B+1
|
|
]PTR_C equ $1d ;4b
|
|
ldy ]PTR_A ;PTR_C+3
|
|
]PTR_D equ $21 ;1b
|
|
ldy ]PTR_A ;should come up as hex
|
|
|
|
; TABLE
|
|
]VAL0 equ $30 ;1b
|
|
]VAL1 equ $31 ;1b
|
|
]VAL2 equ $32 ;1b
|
|
]VAL3 equ $33 ;1b
|
|
]VAL4 equ $34 ;1b
|
|
]VAL5 equ $35 ;1b
|
|
and ]VAL0
|
|
and ]VAL1
|
|
and ]VAL2
|
|
and ]VAL3
|
|
and ]VAL4
|
|
and ]VAL5
|
|
; TABLE
|
|
]VAL14 equ $31 ;4b
|
|
and ]VAL0
|
|
and ]VAL1 ;these four become ]VAL14
|
|
and ]VAL2
|
|
and ]VAL3
|
|
and ]VAL4
|
|
and ]VAL5
|
|
|
|
|
|
; TABLE - test direct page label vs. variable
|
|
]DPNOP equ $80
|
|
lda ]DPNOP
|
|
jsr DPCODE
|
|
rts
|
|
|
|
org $0080
|
|
DPCODE nop
|
|
lda DPCODE ;should be DPNOP
|
|
lda |DPCODE ;should be DPCODE
|
|
lda >DPCODE ;should be DPCODE
|
|
|
|
; Local label test. ca65 v2.18 erases cheap local label scope when it
|
|
; encounters a constant or .set.
|
|
LOCAL1 lda #$2c ;EDIT: format as ASCII
|
|
ldx $1234 ;put variable table here with one arbitrary entry
|
|
beq LOCAL1
|
|
LOCAL2 lda $2c ;EDIT: format as ASCII
|
|
ldx $5678 ;put empty variable table here
|
|
beq LOCAL2
|
|
rts
|