1
0
mirror of https://github.com/fadden/6502bench.git synced 2024-12-11 13:50:13 +00:00
6502bench/SourceGen/SGTestData/Expected/20152-local-variables_cc65.S
Andy McFadden bc7a225080 Expand 20152-local-variables test
Added a compiled C implementation of strlen().  The most interesting
part about this is that it references a 16-bit value via direct-page
address $ff, which means you'd want a local variable with
address=$ff and width=2.  The current UI prevents this.
2021-07-20 11:28:26 -07:00

178 lines
3.9 KiB
ArmAsm

;Edited to have duplicate labels (PROJ_ZERO, DPCODE).
.setcpu "65816"
CONST_ZERO = $f0 ;project const
PROJ_ZERO = $00 ;project addr
PROJ_ONE = $01 ;project addr
; .segment "SEG000"
.org $1000
.a8
.i8
ldy PROJ_ZERO
lda (PROJ_ONE),y
sta $03 ;could be PROJ_ONE+2, but "nearby" is off
ldx $04
lda CONST_ZERO,S
sta $f1,S
VAR_ZERO .set $00
VAR_TWO .set $02
VAR_THREE .set $03
CONST_ZERO_VAR .set $f0
ldy VAR_ZERO
lda (VAR_ZERO+1),y
sta VAR_THREE
ldx $04
lda CONST_ZERO_VAR,S
sta $f1,S
eor 0
ora 240,S
PROJ_ZERO_DUP1 .set $10 ;clash with project symbol
DPCODE_DUP1 .set $80 ;clash with user label
lda VAR_ZERO
lda VAR_ZERO+1
lda VAR_TWO
lda VAR_THREE
lda $04
lda PROJ_ZERO_DUP1
lda $11
lda z:DPCODE
ldx PROJ_ZERO
ldx PROJ_ONE
ldx $02
bit $ffa9
ldy PROJ_ZERO
ldy PROJ_ONE
ldy $02
.byte $2c
NH0 .set $00 ;not hidden
NH1 .set $01 ;not hidden
L103C: lda #$fe
beq L103C
ldy NH0
ldy NH1
ldy $02
nop
PTR0 .set $10
CONST0 .set $10
lda PTR0
ldx PTR0+1
ldy $12
lda (CONST0,S),y
sta (CONST0+3,S),y
;Test name redefinition. This is mostly of interest for assemblers without
;redefinable variables, but also of interest to the cross-reference window.
PTR .set $20 ;#1
ldx PTR
PTR .set $22 ;#2
ldx PTR
PTR .set $24 ;#3
ldx PTR
PTR_1: nop
PTR_A .set $20
ldy PTR_A
PTR_B .set $1f
ldy PTR_B+1
PTR_C .set $1d
ldy PTR_C+3
PTR_D .set $21
ldy PTR_C+3
VAL0 .set $30
VAL1 .set $31
VAL2 .set $32
VAL3 .set $33
VAL4 .set $34
VAL5 .set $35
and VAL0
and VAL1
and VAL2
and VAL3
and VAL4
and VAL5
VAL14 .set $31
and VAL0
and VAL14
and VAL14+1
and VAL14+2
and VAL14+3
and VAL5
DPNOP .set $80 ;same as org
lda z:DPCODE
jsr DPCODE
rts
; .segment "SEG001"
.org $0080
DPCODE: nop
lda DPCODE
lda a:DPCODE
lda f:DPCODE
SPLIT1: lda #','
SPLITTER .set $80
ldx $1234
beq SPLIT1
@SPLIT2: lda ','
ldx $5678
beq @SPLIT2
nop
clc
xce
rep #$30
.a16
.i16
pea STRING >> 16
pea STRING
jsl STRLEN
sec
xce
.a8
.i8
jmp L00E6
STRING: .byte "testing"
.byte $00
LEN .set $f2
PTR .set $f4
ARG .set $fd
.a16
.i16
STRLEN: phd
tsc
sec
sbc #$00f7
tcd
adc #$00f0
tcs
stz LEN
@L00C1: ldx ARG+2
lda ARG
inc ARG
bne @L00CB
inc ARG+2
@L00CB: sta PTR
stx PTR+2
lda [PTR]
and #$00ff
beq @L00DA
inc LEN
bra @L00C1
@L00DA: lda LEN
tay
tdc
clc
adc #$00f7
tcs
tya
pld
rtl
.a8
.i8
L00E6: bit ARG+2
bit a:$00ff
bit $0100
rts