1
0
mirror of https://github.com/fadden/6502bench.git synced 2025-07-15 11:24:21 +00:00
Files
6502bench/SourceGen/SGTestData/Source/20200-ui-edge-cases.S
Andy McFadden eb6999b1b0 Add jump table formatting
When asked to tag an absolute JMP instruction ($4C) as code, we now
scan forward to see if it's the start of a series of JMPs.  If we
find more than one, we offer the opportunity to tag the entire set
all at once.

A series of unformatted JMPs has been added to 20200-ui-edge-cases
for manual testing.

(issue #22)
2025-07-10 16:16:22 -07:00

120 lines
3.8 KiB
ArmAsm

; Copyright 2020 faddenSoft. All Rights Reserved.
; See the LICENSE.txt file for distribution terms (Apache 2.0).
;
; These tests are for exercising UI edge cases. They're not necessarily
; meaningful for the generate/assemble regression test.
;
; Assembler: Merlin 32
; EDIT: disable "find nearby targets"
ORG $2000
jmp skip
asc 'hello, '
ORG $200a ;EDIT: add this no-op ORG statement
asc 'world' ;(string finder should split the string)
dfb $80
org $2100 ;EDIT: add this
skip
lda #$00
sta addr0 ;EDIT: set label to "addr1"
sta addr1
sta addr2 ;EDIT: set label to "addr1"
jmp next1
asc 'testing stuff'
addr0 asc '.'
addr1 asc '!' ;EDIT: set label "addr1"
addr2 asc '?'
asc '---'
; Exercise the various paths for "edit operand target label".
; EDIT: add a project symbol FOO, value $F000, width 16
; EDIT: add a project symbol FOO_5, value $F005 (overlaps w/FOO)
; EDIT: add a project symbol FOOZP, value $F0, width 8
; EDIT: add a project symbol OVERL, value $3000 (overlaps w/platform)
; and add TestData/TestSyms.sym65 from runtime
FOO equ $f000
FOO_5 equ $f005
FOOZP equ $f0
plataddr equ $3000
OVERL equ $3100
NOLAB equ $4000
; Define a slice of zero page inside the program.
org $f4 ;EDIT: add this
zf4 ds 4 ;EDIT: add label "zf4"
org $2200 ;EDIT: add this
; EDIT: format block as zero-terminated strings
line1 asc 'this is line1',00 ;EDIT: label "line1"
line2 asc 'this is line2',00 ;EDIT: label "line2"
line3 asc 'this is line3',00 ;do not label (should get auto-label)
line4 asc 'this is line4',00 ;do not label (should not get autoed)
dfb $80
next1
lda addr1 ;internal addr
sta FOO ;external addr
sta FOO_5 ;external addr (overlaps w/FOO)
sta FOO+8 ;external addr (range)
ldx plataddr ;external addr, platform only
ldx OVERL ;external addr, plat and proj
ldx NOLAB ;external addr, no symbol
ldx line1 ;internal addr
ldx line2+1 ;internal addr with offset
ldx line3 ;internal addr, auto label
ldx line3+1 ;internal addr, auto label, offset
ldx line4+7 ;EDIT: set operand symbol "line2"
; EDIT: add local variable entry "foo_f0", value $f0, width 2
; EDIT: add local variable entry "foo_f4", value $f4, width 2
ldy $00 ;no match
ldy FOOZP ;can be either LVT or project
ldy FOOZP+1 ;can be either LVT or project
ldy FOOZP+2 ;can only be project
ldy FOOZP+4 ;can be either LVT or internal
ldy FOOZP+6 ;can be project or internal
lda #$00
nop
bcc bitsy+1 ;EDIT: set symbol "bitsy"
bitsy bit $ffa9 ;EDIT: set label "bitsy" on BIT instruction
jmp next2
; EDIT: format as 16-bit addresses
dw FOO
dw FOO_5
dw FOO+9
dw plataddr
dw OVERL
dw NOLAB
dw line1
dw line2+5
dw line3
dw line4+5 ;EDIT: set operand symbol "line2"
dw zf4
dfb $80
next2 nop
; jump table
jmp next3
jmp next2
jmp next1
self jmp self
jmp plataddr
nop
jmp next1
jmp OVERL
jmp $4c4c
jmp $4c4c
next3 rts