This commit is contained in:
marketideas 2019-11-13 15:51:19 -08:00
parent b649b7db0f
commit a306f6f3d2
35 changed files with 3011 additions and 0 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

11
testdata/1000-allops-value-65816.S vendored Normal file
View File

@ -0,0 +1,11 @@
; Copyright 2018 faddenSoft. All Rights Reserved.
; See the LICENSE.txt file for distribution terms (Apache 2.0).
;
; Assembler: Merlin 32
ZP EQU $FF
ABS EQU $FEFF
LONG EQU $FDFEFF
MV0 EQU ZP ;Merlin 32 bug -- must use 8-bit constant, or
MV1 EQU ZP-1 ; '^' modifier is implicitly applied
PUT allops-common-65816.S

12
testdata/1001-allops-zero-65816.S vendored Normal file
View File

@ -0,0 +1,12 @@
; Copyright 2018 faddenSoft. All Rights Reserved.
; See the LICENSE.txt file for distribution terms (Apache 2.0).
;
; Assembler: Merlin 32
ZP EQU $00
ABS EQU $0000
LONG EQU $000000
MV0 EQU $00
MV1 EQU $00
PUT allops-common-65816.S

110
testdata/1002-embedded-instructions.S vendored Normal file
View File

@ -0,0 +1,110 @@
; Copyright 2018 faddenSoft. All Rights Reserved.
; See the LICENSE.txt file for distribution terms (Apache 2.0).
;
; Assembler: Merlin 32
org $1000
; 65816 mode with short regs
clc
xce
sep #$30
mx %11
jsr test1
jsr test2
jsr test3
jsr test4
jsr test5
rts
; TEST #1: simple example
test1 lda #$00
dfb $2c ;BIT abs
:inner lda #$01
beq :inner
rts
; TEST #2: embedded with break path
;
; Example inspired by incorrect analysis...
;
; The code analyzer sees:
; beq {+03} ;jumps to the $8f
; lda #$00
; brk $8f
; and stops, then pursues the branch. If we try to walk from top
; to bottom, skipping forward by the full length of an instruction,
; we'll appear to find ourselves in the middle of an embedded
; instruction.
;
; This is different from the typical embedded instruction,
; where the inner is contained entirely within the outer.
test2 sep #$30 ;short regs
mx %00 ;pretend they're long
lda $00 ;load something to scramble flags
beq :store
lda #$0000
:store stal $012345
rts
; TEST #3: embedded with non-instruction byte
;
; The code analyzer sees two paths, involving the three bytes.
; The first is the three-byte JSR, the second is the one-byte
; RTS. The third NOP byte is never "executed" by the analyzer,
; but because of the way we display embedded instructions it
; gets put on its own line. Since it's not an instruction start
; or a data item, things get confused. (This is referred to as
; an "embedded orphan" in the code.)
test3 dfb $20 ;JSR
:mid dfb $60 ;RTS
dfb $ea ;NOP
bra :mid
; TEST #4: overlapping chain
;
; Each BIT instruction is three bytes, and each byte is a branch target,
; so we get a string of embedded instructions.
test4
:bits hex 2c2c2c2c2c2c2c2c2ceaea
asl
bcc :bits
asl
bcc :bits+1
asl
bcc :bits+2
asl
bcc :bits+3
asl
bcc :bits+4
asl
bcc :bits+5
asl
bcc :bits+6
asl
bcc :bits+7
asl
bcc :bits+8
asl
bcc :bits+9
rts
; TEST #5: another overlap
;
; Trying to be a little different.
test5 dfb $2c
:mid1 nop
hex ad
:mid2 lda $00
asl
bcc :mid1
asl
bcc :mid2
; TEST #6: "embedded" off the end of the file
dfb $af ;ldal

258
testdata/1003-flags-and-branches.S vendored Normal file
View File

@ -0,0 +1,258 @@
; Copyright 2018 faddenSoft. All Rights Reserved.
; See the LICENSE.txt file for distribution terms (Apache 2.0).
;
; Assembler: Merlin 32
org $1000
clc
xce
sep #$ff ;set all flags
mx %11
; clear individual flags with instructions
; (this has no effect on the assembled output, but you can see the
; effects on the "status" column in the display list)
clv
cld
cli
clc
lda #$80 ;clear Z
lda #$01 ;clear N
sed
sei
sec
lda #$ff ;set N
adc #$00 ;set V, Z (actually scrambles NVZC)
; clear individual flags with REP
sep #$ff
rep #$80
rep #$40
rep #$20
rep #$10
rep #$08
rep #$04
rep #$02
rep #$01
; exercise SEP/REP with #$00
sep #$00
sep #$ff
rep #$00
rep #$ff
; confirm emulation behavior
mx %00 ;long regs
lda #$feed ;check it
sec
xce ;emulation mode
lda #$ff ;check it
rep #$30 ;should have no effect...
mx %11 ;...but Merlin32 doesn't know that
lda #$ff
clc
xce ;back to native, should set M/X=1
lda #$ff ;check it
; try one long, one short
rep #$20 ;long a
sep #$10 ;short x/y
mx %01
lda #$0000
ldx #$01
ldy #$02
sep #$20 ;short a
rep #$10 ;long x/y
mx %10
lda #$01
ldx #$0000
ldy #$0000
; check branch instructions; NVMXDIZC
sep #$30
mx %11
lda #$00
pha
plp ;without a nearby PHP, flags will be scrambled
rep #$80
bpl ok_bpl
brk $00
ok_bpl sep #$80
bpl :bad ;branch never taken
bmi ok_bmi
:bad brk $00
ok_bmi rep #$40
bvc ok_bvc
brk $00
ok_bvc sep #$40
bvs ok_bvs
brk $00
ok_bvs rep #$01
bcc ok_bcc
brk $00
ok_bcc sep #$01
bcs ok_bcs
brk $00
ok_bcs rep #$02
bne ok_bne
brk $00
ok_bne sep #$02
beq ok_beq
brk $00
ok_beq
; check NZ flags set by immediate load
sep #$ff ;set all
mx %11
lda #$01
bne ok_nzero
brk $db
ok_nzero
lda #$00
beq ok_zero
brk $db
ok_zero
bpl ok_pos
brk $db
ok_pos
lda #$80
bmi ok_neg
brk $db
ok_neg
; check NZ flags set by immediate AND
lda #$ff
and #$00
beq ok_andZ1
brk $db
ok_andZ1
lda #$00
and #$ff
beq ok_andZ1A
brk $db
ok_andZ1A
lda #$ff
and #$7f
bne ok_andZ0
brk $db
ok_andZ0
bpl ok_andN0
brk $db
ok_andN0
lda #$ff
and #$80
bmi ok_andN1
brk $db
ok_andN1
; check NZ flags set by immediate ORA
lda #$00
ora #$00
beq ok_oraZ1
brk $db
ok_oraZ1
ora #$01
bne ok_oraZ0
brk $db
ok_oraZ0
lda #$00
ora #$7f
bpl ok_oraN0
brk $db
ok_oraN0
ora #$80
bmi ok_oraN1
brk $db
ok_oraN1
; check rol/ror
:foo lda :foo ;scramble N/V
sec
ror A ;rotates the carry into the hi bit (N)
bmi ok_ror1
brk $dc
ok_ror1
clc
ror A ;now try with carry clear
bpl ok_ror2
brk $dc
ok_ror2
lda #$00 ;set Z=1
sec
rol A ;set Z=0 (could also set C=0)
bne ok_rol1
brk $dc
ok_rol1
; simple php/plp pair test
clc
php
sec
plp ;should restore cleared carry
bcc ok_plp
brk $00
ok_plp
; regression test for bug in analyzer
sec ;here carry is clear
bcs flg2
flg1 clc
flg2 lda $33
beq flg1
bcs flg3 ;this should NOT be branch-always
lda $44
flg3 nop
; test tracking across subroutine calls
rep #$20 ;long a
sep #$10 ;short x/y
mx %01
jsr long_subr ;confirm flag propagation
rep #$30
mx %00
jsr ambig_subr
sep #$30
mx %11
jsr ambig_subr
rep #$20 ;long a
sep #$10 ;short x/y
mx %01
jsr long_subr ;call it again
; leave the main routine with short flags set
sep #$30
mx %11
rts
; only called with longm/shortx
mx %01
long_subr
lda #$1234
ldx #$ff
rts
; this is called with different values for M/X, so it defaults to short
mx %11
ambig_subr
lda #$ff
ldx #$ee
ldy #$dd
rts

49
testdata/1004-data-recognition.S vendored Normal file
View File

@ -0,0 +1,49 @@
; Copyright 2018 faddenSoft. All Rights Reserved.
; See the LICENSE.txt file for distribution terms (Apache 2.0).
;
; Assembler: Merlin 32
org $1000
lda zsplit
ora esplit
rts
asc3 asc '333' ;no match
dfb $80
asc4 asc '4444' ;run of 4, as ASCII
dfb $80
asc5 asc '55555' ;run of 5, as ASCII
dfb $80
ascM asc 'MMMMMMMMMM' ;run of 62, as ASCII
asc 'MMMMMMMMMM'
asc 'MMMMMMMMMM'
asc 'MMMMMMMMMM'
asc 'MMMMMMMMMM'
asc 'MMMMMMMMMM'
asc 'MM'
dfb $80
ascL asc 'LLLLLLLLLL' ;run of 63, as fill
asc 'LLLLLLLLLL'
asc 'LLLLLLLLLL'
asc 'LLLLLLLLLL'
asc 'LLLLLLLLLL'
asc 'LLLLLLLLLL'
asc 'LLL'
dfb $81
zero ds 3 ;no match
dfb $81
ds 4 ;no match
dfb $81
ds 5 ;fill of 5
dfb $81
; The auto-label should split these in half.
ds 8
zsplit ds 8
hex 8282828282828282
esplit hex 8282828282828282

9
testdata/2000-allops-value-6502.S vendored Normal file
View File

@ -0,0 +1,9 @@
; Copyright 2018 faddenSoft. All Rights Reserved.
; See the LICENSE.txt file for distribution terms (Apache 2.0).
;
; Assembler: Merlin 32
ZP EQU $FF
ABS EQU $FEFF
PUT allops-common-6502.S

9
testdata/2001-allops-zero-6502.S vendored Normal file
View File

@ -0,0 +1,9 @@
; Copyright 2018 faddenSoft. All Rights Reserved.
; See the LICENSE.txt file for distribution terms (Apache 2.0).
;
; Assembler: Merlin 32
ZP EQU $00
ABS EQU $0000
PUT allops-common-6502.S

9
testdata/2002-allops-value-65C02.S vendored Normal file
View File

@ -0,0 +1,9 @@
; Copyright 2018 faddenSoft. All Rights Reserved.
; See the LICENSE.txt file for distribution terms (Apache 2.0).
;
; Assembler: Merlin 32
ZP EQU $FF
ABS EQU $FEFF
PUT allops-common-65C02.S

9
testdata/2003-allops-zero-65C02.S vendored Normal file
View File

@ -0,0 +1,9 @@
; Copyright 2018 faddenSoft. All Rights Reserved.
; See the LICENSE.txt file for distribution terms (Apache 2.0).
;
; Assembler: Merlin 32
ZP EQU $00
ABS EQU $0000
PUT allops-common-65C02.S

52
testdata/2004-numeric-types.S vendored Normal file
View File

@ -0,0 +1,52 @@
; Copyright 2018 faddenSoft. All Rights Reserved.
; See the LICENSE.txt file for distribution terms (Apache 2.0).
;
; Assembler: Merlin 32
rts
dfb $11 ;.dd1
dw $1122 ;.dd2
adr $112233 ;.dd3
adrl $11223344 ;.dd4
dfb $11 ;.dbd1
ddb $1122 ;.dbd2
dfb $11,$22,$33 ;.dbd3
dfb $11,$22,$33,$44 ;.dbd4
ds 2 ;.fill
dfb $80
ds 3 ;.fill
dfb $80
ds 4 ;.fill
dfb $80
ds 5 ;.fill
dfb $80
ds 256 ;.fill
dfb $80
ds 257,$cc ;.fill
hex 11 ;.bulk
dfb $80
hex 11223344556677889900 ;.bulk
dfb $80
hex 00112233445566778899aabbccddeeff ;4 lines .bulk
hex 00112233445566778899aabbccddeeff ;add a comment
hex 00112233445566778899aabbccddeeff
hex ffeeddccbbaa99887766554433221100
dfb $80
; align to 256-byte boundary
ds \,$aa ;.junk, align 256
dfb $81
ds 63,$00 ;.junk, align 64
dfb $81
ds 31,$ab ;.junk, align 32
hex 0000000000000001 ;.junk (should become .dense)
dfb $81
hex 1000000000000000 ;.junk (should become .dense)
dfb $81
hex dddd ;EDIT FILE: give this a bogus alignment
ds \,$00 ;.junk, align 256

147
testdata/2005-string-types.S vendored Normal file
View File

@ -0,0 +1,147 @@
; Copyright 2018 faddenSoft. All Rights Reserved.
; See the LICENSE.txt file for distribution terms (Apache 2.0).
;
; Assembler: Merlin 32
rts
* simple strings
* High-ASCII quoted text uses embedded high-ascii double-quotes, mostly to
* test Merlin's behavior. Note that a mix of high- and low-ASCII won't be
* handled as a single string.
asc 'low ASCII str'
dfb $80
asc "high ASCII str"
dfb $80
asc 27,'low',27,'quoted',222727,'text'
dfb $80
asc A2,"high",A2,"quoted",A7A2A2,"text"
dfb $80
asc '01234567890123456789012345678901234567890123456789012345678901234567890123456789' ; 80 chars
dfb $80
* edge cases for 64-char operand, single-quote delimiter (primarily for Merlin 32)
asc '0123456789012345678901234567890123456789012345678901234567',272727
dfb $80
asc '01234567890123456789012345678901234567890123456789012345678',272727
dfb $80
asc '012345678901234567890123456789012345678901234567890123456789',272727
dfb $80
asc '0123456789012345678901234567890123456789012345678901234567890',272727
dfb $80
asc '01234567890123456789012345678901234567890123456789012345678901',272727
dfb $80
* edge cases for 64-char operand, double-quote delimiter (primarily for cc65)
asc '012345678901234567890123456789012345678901234567890167',222222
dfb $80
asc '0123456789012345678901234567890123456789012345678901678',222222
dfb $80
asc '01234567890123456789012345678901234567890123456789016789',222222
dfb $80
asc '012345678901234567890123456789012345678901234567890167890',222222
dfb $80
asc '0123456789012345678901234567890123456789012345678901678901',222222
dfb $81
* 62 high-ASCII underscores. Should be one line.
asc "********************************"
asc "******************************"
dfb $80
* 96 high-ASCII underscores. Might be converted to "fill".
asc "********************************"
asc "********************************"
asc "********************************"
dfb $81
* reverse strings; cannot intersperse hex
rev 'low ASCII rev'
dfb $80
rev "high ASCII rev"
dfb $80
rev 'No man is an island, entire of itself; every man is a piece of the continent, a part of the main. If a clod be washed away by the sea, Europe is the less. As well as if a promontory were. As well as if a manor of thy friends or of thine own were. Any mans death diminishes me, because I am involved in mankind, and therefore never send to know for whom the bell tolls; it tolls for thee.' ; 389 chars
dfb $81
* null-terminated strings
dfb $00 ;empty string, requires project edit
dfb $80
asc 'low ASCII strz',00
dfb $80
asc "high ASCII strz",00
dfb $80
asc 27,'low',27,'quoted',222727,'text',00
dfb $80
asc A2,"high",A2,"quoted",A7A2A2,"text",00
dfb $80
asc '012345678901234567890123456789012345678901234567890123456789',27272700
dfb $80
asc '01234567890123456789012345678901234567890123456789012345678901234567890123456789',00
dfb $81
* string with leading length byte
str '' ;requires project edit
dfb $80
str 'low ASCII str1'
dfb $80
str "high ASCII str1"
dfb $80
str 27,'low',27,'quoted',222727,'text'
dfb $80
str A2,"high",A2,"quoted",A7A2A2,"text"
dfb $80
str '012345678901234567890123456789012345678901234567890123456789',272727
dfb $80
str '01234567890123456789012345678901234567890123456789012345678901234567890123456789'
dfb $81
* string with leading length word
strl '' ;requires project edit
dfb $80
strl 'low ASCII str2'
dfb $80
strl "high ASCII str2"
dfb $80
strl 27,'low',27,'quoted',222727,'text'
dfb $80
strl A2,"high",A2,"quoted",A7A2A2,"text"
dfb $80
strl '012345678901234567890123456789012345678901234567890123456789',272727
dfb $80
strl '01234567890123456789012345678901234567890123456789012345678901234567890123456789'
dfb $80
strl 'No man is an island, entire of itself; every man is a piece of the continent, a part of the main. If a clod be washed away by the sea, Europe is the less. As well as if a promontory were. As well as if a manor of thy friends or of thine own were. Any mans death diminishes me, because I am involved in mankind, and therefore never send to know for whom the bell tolls; it tolls for thee.' ; 389 chars
dfb $81
* DCI (dextral character inverted)
dci 'low ASCII dci'
dfb $80
dci "high ASCII dci"
dfb $80
dci 27,'low',27,'quoted',222727,'text'
dfb $80
dci A2,"high",A2,"quoted",A7A2A2,"text"
dfb $80
dci '012345678901234567890123456789012345678901234567890123456789',272727
dfb $80
dci '01234567890123456789012345678901234567890123456789012345678901234567890123456789'
dfb $81
* reverse DCI (deprecated, requires project edit)
asc F2,'icd IICSA wol'
dfb $80
asc 72,"icd IICSA hgih"
dfb $80
asc B9,'8765432109876543210987654321098765432109876543210987654321098765432109876543210' ; 80 chars
dfb $80
asc AE,'eeht rof sllot ti ;sllot lleb eht mohw rof wonk ot dnes reven erofereht dna ,dniknam ni devlovni ma I esuaceb ,em sehsinimid htaed snam ynA .erew nwo eniht fo ro sdneirf yht fo ronam a fi sa llew sA .erew yrotnomorp a fi sa llew sA .ssel eht si eporuE ,aes eht yb yawa dehsaw eb dolc a fI .niam eht fo trap a ,tnenitnoc eht fo eceip a si nam yreve ;flesti fo eritne ,dnalsi na si nam oN'
dfb $81

86
testdata/2006-operand-formats.S vendored Normal file
View File

@ -0,0 +1,86 @@
; Copyright 2018 faddenSoft. All Rights Reserved.
; See the LICENSE.txt file for distribution terms (Apache 2.0).
;
; Assembler: Merlin 32
org $1000
; 65816 with short regs
clc
xce
sep #$30
mx %11
; Basic operand formats. Show first set as hex, second as decimal,
; third as binary.
lda $01
lda $0102
ldal $010203
lda $01
lda $0102
ldal $010203
lda $01
lda $0102
ldal $010203
bra :skipdata
; Now hex/decimal/binary, 1-2-3-4 bytes, in data area.
hex 01010201020301020304
hex 01010201020301020304
hex 01010201020301020304
:skipdata
; Convert these to ASCII; requires editing file. The code generator
; should display some of these as hex.
lda #$68
lda $68
lda: $0068
ldal $000068
lda #$1f
lda #$20
lda #$22
lda #$27
lda #$7e
lda #$7f
lda #$80
lda #$9f
lda #$a0
lda #$a2
lda #$a7
lda #$fe
lda #$ff
; Switch to long regs, continue with ASCII.
rep #$30
mx %00
lda #$0068
lda #$00c8
lda #$6868
rts
; Continuing with ASCII
:ascii
dfb $68
dfb $80
dw $6868
dfb $80
; Format first set as address, second set as symbol.
dw :skipdata
adr :skipdata
dfb >:skipdata,:skipdata ;format as big-endian address
dfb :ascii
dfb >:ascii
dw :ascii
adr :ascii
dfb >:ascii,:ascii ;format as big-endian symbol

232
testdata/2007-labels-and-symbols.S vendored Normal file
View File

@ -0,0 +1,232 @@
; Copyright 2018 faddenSoft. All Rights Reserved.
; See the LICENSE.txt file for distribution terms (Apache 2.0).
;
; Assembler: Merlin 32
absl equ $1029
absh equ $feed
zip equ $cd
biggie equ $123456
thirty2 equ $12345678
org $012345
start ;set this label
clc
xce
; load 8/16/24-bit symbols in different ways
sep #$30
mx %11
lda #zip
lda #zip+16
lda #zip+64
lda #<absh
lda #>absh
lda #<absh+64
lda #>absh+64
lda #<absl
lda #>absl
lda #<absl-64
lda #>absl-64
lda #<start
lda #>start
lda #^start
pea absh ;leave as default
pea start
pea ^start
pea biggie
pea ^biggie
pea absh ;convert to symbol
pea start
pea ^start
pea biggie
pea ^biggie
lda zip+1
lda: zip+1
ldal zip+1
lda absh-1
ldal absh-1
lda absh+1
ldal absh+1
lda start+1
ldal start+1
lda start-1
ldal start-1
lda biggie+1
ldal biggie+1
lda biggie-1
ldal biggie-1
rep #$30
mx %00
lda #zip
lda #zip+16
lda #zip+64
lda #<absl
lda #>absl
lda #<absl-$1000
lda #>absl-$1000
lda #^absl-$1000
lda #<absh
lda #>absh
lda #<absh+$1000
lda #>absh+$1000
lda #^absh+$1000
lda #<start
lda #>start
lda #^start
lda #<biggie ;note: constant, not a label
lda #>biggie
lda #^biggie
bra :skipdata
; reference 16/24-bit symbol in data statements
dfb zip
dfb <absh
dfb >absh
dfb <start
dfb >start
dfb ^start
dw zip
dw <absl
dw >absl
dw <absl-$1000
dw >absl-$1000
dw <absh
dw >absh
dw <absh+$1000
dw >absh+$1000
dw <start
dw >start
dw ^start
dw <start+1
dw >start+1
dw ^start+1
dfb >absh ;format as 16-bit big-endian
dfb <absh
adr zip
adr <absh
adr >absh
adr <start
adr >start
adr ^start
adrl zip
adrl <absh
adrl >absh
adrl <start-1
adrl >start-1
adrl ^start-1
:skipdata
lda #$11 ;format as biggie
mvn biggie,start ;format w/symbols
mvp start,biggie
mvn biggie,start ;format as decimal
mvp start,biggie ;format as binary
per :skipdata
brl :forward
:forward jml nextchunk
org $1000
nextchunk
nop ;leave this as auto-label
nop ;label this L1000
nop ;label this L1000_0
sep #$30
mx %11
plataddr equ $3000 ;address only in platform file
projover equ $3100 ;replaced by proj symbol w/same name, diff addr (no match)
projalso equ $3200 ;also in project, twice w/different name +/- alpha; low should win
nosym equ $3300 ;should not match anything
lda plataddr
lda projover
lda projalso
lda nosym
bra :next
target0 nop
target1 nop ;point everything here
target2 nop
t0 per target0
per target1
per target2
jsr target0
jsr target1
jsr target2
t1a bra target0
t1b bra target1
t1c bra target2
t2a brl target0
t2b brl target1
t2c brl target2
t3a jmp target0
t3b jmp target1
t3c jmp target2
t4a jml target0
t4b jml target1
t4c jml target2
:next
jsr t0
jsr t1a
jsr t1b
jsr t1c
jsr t2a
jsr t2b
jsr t2c
jsr t3a
jsr t3b
jsr t3c
jsr t4a
jsr t4b
jsr t4c
brl :skiphex
hex 808182838485868788898a8b8c8d8e8f ;add label and comment
hex 808182838485868788898a8b8c8d8e8f
hex 808182838485868788898a8b8c8d8e8f
hex 808182838485868788898a8b8c8d8e8f
hex 808182838485868788898a8b8c8d8e8f
hex 808182838485868788898a8b8c8d8e8f
hex 808182838485868788898a8b8c8d8e8f
asc 'This is a long string. Put a label and comment '
asc 'on it to confirm that the label and comment only '
asc 'appear on the first line. The quick brown fox '
asc 'jumps over the lazy dogs.'
:skiphex
; extract bytes from 32-bit value with short regs
lda #<thirty2 + 2
lda #>thirty2 + 768
lda #^thirty2
rep #$30
mx %00
lda #<thirty2 + 3
lda #>thirty2 + 1024
lda #^thirty2
rts

116
testdata/2008-address-changes.S vendored Normal file
View File

@ -0,0 +1,116 @@
; Copyright 2018 faddenSoft. All Rights Reserved.
; See the LICENSE.txt file for distribution terms (Apache 2.0).
;
; Assembler: Merlin 32
org $1000
clc
xce
sep #$ff ;set all flags
mx %11
jsr one
jsr three_p ;should land inside one
jmp nextthing
org $1100
one bit one
one_p lda #$11
ldx #$11
ldy #$11
per one_p
bra one_p
org $1100
two bit two
lda #$22
two_p ldx #$22
ldy #$22
per two_p
jmp two_p
org $1100
three bit three
lda #$33
ldx #$33
three_p ldy #$33
per three_p
bra three_p
org $2000
nextthing
bit nextthing
beq :fwd-8 ;should just appear as hex since it's outside
bra :fwd ;BRA across org segments
org $2020
:fwd bit :fwd
beq offend ;branch off the end of the address area into dead space
brl endcheck ; (which wouldn't be dead without the org)
nop
offend
org $2080
endcheck
bit endcheck
lda offend-1 ;touch bytes at the ends, and one byte before/after
jsr offend-1
lda offend
jsr offend
lda endcheck-1
jsr endcheck-1
lda endcheck
jsr endcheck
lda $00
beq :midinst
dfb $ad ;LDA abs
org $2100
:midinst dfb $ea,$ea
jmp pastdata
org $2800
dw *
ds 16 ;EDIT: put an org change in the middle
org $2820
ds 16
org $3000
pastdata
bit pastdata
lda #$44
ldx #$44
ldy #$44
brl :fwd
dfb $00 ;put user label here or next inst
:datend dfb $01
org $3100
dfb $02 ;data target should NOT get merged with previous user label
:fwd
bit :fwd
lda :datend-1
lda :datend
lda :datend+1
lda :datend+2
lda :fwd-1
beq :more
dfb $ea,$ea ;EDIT: mark as inline data
org $3180
dfb $00,$01
:more bit :more
; xref edge case test: make sure adjustment shown is based on address
lda label1
lda label2 ;EDIT: set operand to sym=label1
lda label3 ;EDIT: set operand to sym=label1
bra label3
label1 nop
label2 nop
org $3200
label3 bit label3
dfb $00,$01 ;EDIT: mark as inline data to test execution off end

81
testdata/2009-branches-and-banks.S vendored Normal file
View File

@ -0,0 +1,81 @@
; 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

8
testdata/2009-branches-and-banks.cfg vendored Normal file
View File

@ -0,0 +1,8 @@
MEMORY {
MAIN: file=%O, start=%S, size=65536;
}
SEGMENTS {
CODE: load=MAIN, type=rw;
}
FEATURES {}
SYMBOLS {}

105
testdata/2010-target-adjustment.S vendored Normal file
View File

@ -0,0 +1,105 @@
; Copyright 2018 faddenSoft. All Rights Reserved.
; See the LICENSE.txt file for distribution terms (Apache 2.0).
;
; Assembler: Merlin 32
org $1000
load11 lda #$11 ;EDIT: set label=load11
load22 ldx #$22
load33 ldy #$33 ;EDIT: set label=load33
load44 lda #$44
predat bra skipdat ;EDIT: set label=predat
dat0 dw $0123
dat1 dw $4567 ;EDIT: set label=dat1
dat2 dw $89ab
dat3 dw $cdef
dat4 dw $0011
dat5 dw $2233
dfb $80
asc 'The quick brown fox'
dfb $80
dw skipdat ;EDIT: format these as addresses
dw skipdat-1
dw skipdat+1
fill0 ds 4 ;EDIT: set label=fill0
fill1 ds 4
fill2 ds 4
fill3 ds 4
postfill dfb $80
skipdat ;EDIT: set label=skipdat
lda dat0 ;this should get mapped to predat+2
lda postfill
asl dat1 ;these should coalesce to dat1
rol dat2
ror dat3 ;these should be auto-labeled
and dat4
ora dat5
lda fill0 ;EDIT: set all labels to fill0
sta fill1 ; and confirm that auto-labels vanish
lda fill2 ; and we get a single 16-byte .fill
sta fill3
jsr load22 ;should get auto label
lda load44 ;should get auto label
; PEA/PER may want to push addr-1; make sure that works
caddr
pea caddr-1 ;should base off caddr
per caddr-1 ;should base off caddr
lda caddr+1 ;should base off caddr
lda caddr+2 ;should base off caddr
; self-referential, self-modifying code (edge case for xrefs)
lda #$ea
srop1 sta srop1
srop2 sta srop2+1
srop3 sta srop3+2 ;EDIT: set operand to non-existent symbol
brl skipdat1
dfb $80
dat81 dfb $81 ;EDIT: set label dat81
org $2000
dat82 dfb $82
dfb $83
skipdat1
bit skipdat1
lda dat81
lda dat82 ;this should NOT use dat81
;
; Test the precise extent to which we associate a label with nearby elements.
;
bra skipmore
dfb $7c
dfb $7d
dfb $7e
dfb $7f
nearby dfb $80 ;EDIT: label this
dfb $81
dfb $82
dfb $83
dfb $84
dfb $85
dfb $86
skipmore
lda nearby-4
lda nearby-3
lda nearby-2
lda nearby-1
lda nearby
lda nearby+1
lda nearby+2
lda nearby+3
lda nearby+4
lda nearby+5
lda nearby+6
rts

68
testdata/2011-hinting.S vendored Normal file
View File

@ -0,0 +1,68 @@
; Copyright 2018 faddenSoft. All Rights Reserved.
; See the LICENSE.txt file for distribution terms (Apache 2.0).
;
; Assembler: Merlin 32
; NOTE: set assembler to 6502, undocumented instructions disabled
; NOTE: add 2011-hinting.cs to extension scripts
; It may be necessary to review the analyzer output to verify certain things.
MAGIC equ $2456 ;recognized by extension script
org $1000
dfb $03 ;undocumented (SLO), will halt analyzer
dfb $02
entry bit entry ;EDIT: add code hint to first byte
bit $11a9 ;EDIT: add code hint to middle byte (a9); creates embedded instr
nop
embed dfb $2c
innerd ldx #$ff ;EDIT: add data hint to middle byte (a2); will be ignored
nop
jsr innerd ;analyzer should follow this path
nop
dfb $2c
inneri ldx #$ff ;EDIT: add inline data hint to middle byte (a2); will be ignored
nop
jsr inneri ;analyzer should follow this path
jsr MAGIC ;next 4 bytes are inline data tagged by the
magic11 lda #$11 ; extension script -- if they show up as
ldx #$22 ; LDA/LDX, the script isn't working
jsr magic11 ;analyzer should ignore this path
jsr magic33 ;analyzer will add this path, but the target will be inline
jsr MAGIC ; data before it gets to it
magic33 lda #$33
ldx #$44
; We want to call into part2 before part1 to establish that part2 is code before the
; extension script tries to change it to inline data. The code analyzer currently uses
; a stack, so we call part 1 first, which means it will be called last.
jsr part1
jsr part2
nop
lda MAGIC ;EDIT: hint as data, format as dense hex, remove hint
jsr dataolap
rts
part1 jsr MAGIC
part2 lda #$55
ldx #$66
rts
; Make sure that data descriptors that overlap with code are ignored.
hex 818283 ;EDIT: format as 4-byte int, so it overlaps with dataolap
dataolap lda #$99
rts

83
testdata/2012-label-localizer.S vendored Normal file
View File

@ -0,0 +1,83 @@
; Copyright 2018 faddenSoft. All Rights Reserved.
; See the LICENSE.txt file for distribution terms (Apache 2.0).
;
; Assembler: Merlin 32
; NOTE: select CPU=65C02
EXTSYM equ $8888 ;EDIT: give this a long label
org $1000
nop
start lda :local1
lda nextglob
lda pastglob
lda :local2
:local1 nop
:local2 nop
nextglob nop ;EDIT: mark label as global
pastglob nop
lda nlocal
nlocal lda #$11 ;EDIT: mark label as global
reach1G nop ;EDIT: mark label as global
:local lda :local ;EDIT: edit operand to symbol=reach1G
lda reach4 ;EDIT: set operand to symbol=reach2; should stay local
reach2 nop
reach3G nop ;EDIT: mark label as global
reach4 nop
lda reach2 ;EDIT: edit operand to symbol=reach4; should stay local
lda $00
beq :local ;should be local
jsr reach4 ;should be local
jsr start ;should be global
:local lda #$22
lda gtest2
gtest1 nop ;EDIT: mark label as global
lda gtest3
gtest2 nop ;...which forces this to be global
gtest3 nop ;...and then this is forced to be global
lda #$33
lda midlocal ;EDIT: reformat as hex
topglob nop ;EDIT: mark label as global
lda farlocal ;should be local label ref
midlocal nop ;auto-label here should vanish
nop
farlocal nop
lda #$44
globalnm jsr :local2 ;EDIT: mark label as global
:local1 nop
:local2 nop
:local3 nop
nglobal nop ;should get marked as global
globlat jsr nglobal ;EDIT: mark label as global
bra cont
cont nop ;EDIT: mark label as global
lda EXTSYM
; test localizer uniquification
; only relevant for 64tass, which uses a leading '_' to indicate local labels
_uname nop
X_uname11 nop
X_uname1 nop
X_uname nop
; test labels with opcode names (not really a localization thing)
; EDIT: set these names, mark as global to prevent localization
lda #$00
ANDl bne ANDl ;leave label local
JMPg bne JMPg ;make label global
jmpg bne jmpg ;lower case name
TSBg bne TSBg
XCEg bne XCEg ;should be allowed
rts

35
testdata/2013-notes-and-comments.S vendored Normal file
View File

@ -0,0 +1,35 @@
; Copyright 2018 faddenSoft. All Rights Reserved.
; See the LICENSE.txt file for distribution terms (Apache 2.0).
;
; Assembler: Merlin 32
; Everything of interest is in the notes and comments. We're just
; providing some anchor points.
plataddr equ $3000 ;defined in TestSyms
org $1000
lda #$01
lda #$02
lda #$03
lda #$04
lda #$05
lda #$06
lda #$07
lda #$08
lda #$09
lda #$0a
lda #$0b
lda #$0c
lda #$0d
lda #$0e
lda #$0f
bit plataddr
rts
hex 000102030405060708090a0b0c0d0e0f
hex 000102030405060708090a0b0c0d0e0f
hex 000102030405060708090a0b0c0d0e0f
hex 000102030405060708090a0b0c0d0e0f

19
testdata/2014-label-dp.S vendored Normal file
View File

@ -0,0 +1,19 @@
; Copyright 2018 faddenSoft. All Rights Reserved.
; See the LICENSE.txt file for distribution terms (Apache 2.0).
;
; Assembler: Merlin 32
ZP equ $80 ;must NOT be "$0080"
MV0 EQU $83
MV1 EQU $84
PUT allops-common-65816.S
org $0080
bit _ZP
_ZP bit _ZP
bit _ZP
ABS bit: ABS
LONG ldal LONG

153
testdata/2016-char-encoding.S vendored Normal file
View File

@ -0,0 +1,153 @@
; Copyright 2019 faddenSoft. All Rights Reserved.
; See the LICENSE.txt file for distribution terms (Apache 2.0).
;
; Assembler: ACME (for the PETSCII/screen code support)
!cpu 65816
* = $1000
clc
xce
sep #$30
!as
!rs
; Single-byte operand
lda #'A' ;format as low ASCII
lda #'A' | $80 ;format as high ASCII
lda #'A' | $80 ;format as PETSCII
lda #'A' ;format as screen code
ldx #'a' ;format as low ASCII
ldx #'a' | $80 ;format as high ASCII
ldx #'a' - $20 ;format as PETSCII
ldx #$01 ;format as screen code
lda #$7f ;EDIT: force to low ASCII
lda #$7f ;EDIT: force to high ASCII
lda #$7f ;EDIT: force to PETSCII
lda #$7f ;EDIT: force to screen code
lda #$0d ;verify the instruction operand editor only allows C64SC
; Single letter in a 16-bit immediate
rep #$30
!al
!rl
lda #'B'
lda #'B' | $80
lda #'B' | $80
lda #'B'
sep #$30
!as
!rs
rts
; Single-byte data items
!byte 'C'
!byte 'C' | $80
!byte 'C' | $80
!byte 'C'
; Double-byte data items
!byte 'd', 0
!byte 'd' | $80, 0
!byte 'd' - $20, 0
!byte $04, 0
; Double-byte big-endian data items
!byte 0, 'E'
!byte 0, 'E' | $80
!byte 0, 'E' | $80
!byte 0, 'E'
; Start with the basics
!byte $80
!text "low ASCII str"
; !byte $80 ; let them run together to test scan / dialog behavior
!xor $80 {
!text "high ASCII str"
}
!byte $80
!pet "PETSCII str"
!byte $80
!scr "Screen Code str"
; Get a bit fancy
!byte $82
!text $07,"Low ASCII CRLF",$0d,$0a
!byte $82
!xor $80 {
!text $07,"High ASCII CRLF",$0d,$0a
}
!byte $82
!pet $93,"PETSCII with ",$96,"control",$05," codes",$0d
; no control chars in screen code
; Test the ASCII $20-7e range.
!byte $83
!text " !",$22,"#$%&'()*+,-./0123456789:;<=>?"
!text "@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_"
!text "`abcdefghijklmnopqrstuvwxyz{|}~"
!byte $83
!xor $80 {
!text " !",$22,"#$%&'()*+,-./0123456789:;<=>?"
!text "@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_"
!text "`abcdefghijklmnopqrstuvwxyz{|}~"
}
!byte $83
!pet " !",$22,"#$%&'()*+,-./0123456789:;<=>?"
!pet "@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_"
!pet "`abcdefghijklmnopqrstuvwxyz{|}~"
!byte $83
!scr " !",$22,"#$%&'()*+,-./0123456789:;<=>?"
!scr "@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_"
!scr "`abcdefghijklmnopqrstuvwxyz{|}~"
; The 2005 test exercises low/high ASCII strings, so no need to do that here.
; Do a quick test with C64 characters. Note Screen Code can't be null-terminated
; by definition.
!byte $84
!pet "IICSTEP esrever" ;format as StringReverse
!byte $84
!pet "null term PETSCII",0 ;format as StringNullTerm
!byte $84
!pet "This null-terminated string is too long to fit on a single line, and will be split.",0
!byte $84
!pet 19,"PETSCII with length" ;format as StringL8
!byte $84
!pet 20,0,"PETSCII with length2" ;format as StringL16
!byte $84
!pet "pet dcI" ;format as StringDCI
!byte $84
!scr "edoC neercS esrever" ;format as StringReverse
!byte $84
!scr 23,"Screen Code with length" ;format as StringL8
!byte $84
!scr 24,0,"Screen Code with length2" ;format as StringL16
!byte $84
!scr "Screen Code DC",$c9 ;format as StringDCI
!byte $84
!byte $85
; All bytes, from 00-ff. Handy for seeing what the auto-scanner picks up.
allbytes
!hex 000102030405060708090a0b0c0d0e0f
!hex 101112131415161718191a1b1c1d1e1f
!hex 202122232425262728292a2b2c2d2e2f
!hex 303132333435363738393a3b3c3d3e3f
!hex 404142434445464748494a4b4c4d4e4f
!hex 505152535455565758595a5b5c5d5e5f
!hex 606162636465666768696a6b6c6d6e6f
!hex 707172737475767778797a7b7c7d7e7f
!hex 808182838485868788898a8b8c8d8e8f
!hex 909192939495969798999a9b9c9d9e9f
!hex a0a1a2a3a4a5a6a7a8a9aaabacadaeaf
!hex b0b1b2b3b4b5b6b7b8b9babbbcbdbebf
!hex c0c1c2c3c4c5c6c7c8c9cacbcccdcecf
!hex d0d1d2d3d4d5d6d7d8d9dadbdcdddedf
!hex e0e1e2e3e4e5e6e7e8e9eaebecedeeef
!hex f0f1f2f3f4f5f6f7f8f9fafbfcfdfeff

159
testdata/2019-local-variables.S vendored Normal file
View File

@ -0,0 +1,159 @@
; Copyright 2019 faddenSoft. All Rights Reserved.
; See the LICENSE.txt file for distribution terms (Apache 2.0).
;
; Assembler: Merlin 32
; EDIT: add __ENABLE_LABEL_LOCALIZATION to project symbols
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

80
testdata/2020-cycle-counts-65816.S vendored Normal file
View File

@ -0,0 +1,80 @@
; Copyright 2019 faddenSoft. All Rights Reserved.
; See the LICENSE.txt file for distribution terms (Apache 2.0).
;
; Assembler: Merlin 32
; Exercise cycle counting. We use 65816 to test the behavior with variable-
; width registers. This means we're not testing the 65C02 D-flag behavior
; or some other non-65816 quirks. If that becomes an issue we'll need to
; create additional tests.
;
; Very little editing required. Just set the initial ORG and add
; "__ENABLE_CYCLE_COUNTS" to the list of project symbols.
org $10f0
start sec
xce
mx %11
bra cont ;crosses page boundary
ds 20
cont bra near
near
lda #$00
beq next ;always (3 cycles)
brk $00
next bne next ;never (2 cycles)
lda $1234
beq maybe ;sometimes (2+ cycles)
brk $01 ;(7 cycles)
maybe lda $22,S
trb $02
asl $03,x
clc
xce
rep #$30
mx %00
lda #$11
ldy #$22
trb $04 ;should be +2 cycles
asl $05,x ;should be +2 cycles
ldx $1235
beq maybe2
brk $02 ;(8 cycles)
maybe2 lda $33,S
beq maybe3
bra start ;crosses page boundary, no + when E=0
maybe3
rep #$20
sep #$10
sta $10
stx $11
sty $12
rep #$10
sep #$20
sta $11
stx $12
sty $13
rep #$30
; On the 65816, the setting of the decimal flag should NOT have any effect.
lda $1234
adc #$66
adc $1235
sed
adc #$77
adc $1236
sec
xce
sbc #$88
sbc $1237
cld
sbc #$99
sbc $1238
rts

169
testdata/2021-external-symbols.S vendored Normal file
View File

@ -0,0 +1,169 @@
; Copyright 2019 faddenSoft. All Rights Reserved.
; See the LICENSE.txt file for distribution terms (Apache 2.0).
;
; Assembler: Merlin 32
; EDIT: the project must include the three platform symbol files.
org $1000
; make sure platform symbols don't get set for file data
; DO NOT set a user label here
Start lda Start-1 ;CodeWrap+255
ldx Start ;(auto)
ldy Start+1 ;(auto+1)
lda END ;(auto)
lda END+1 ;CodeWrap+X
lda END+8 ;CodeWrap+Y
nop
; test overlapping labels (multiple sym files)
lda $1ffe ;(no sym)
lda $1fff ;should be SameName1-1
lda $2000 ;should be SameName1
lda $200f ;(no sym)
lda $2010 ;should be SameName2-1
lda $2011 ;should be SameName2
lda $2012 ;(no sym)
lda $201f ;(no sym)
lda $2020 ;(no sym)
lda $2021 ;should be sym-1
lda $2022 ;should be SameName3
nop
; test overlapping values (multiple sym files)
lda $2100 ;should be SameValA_A
lda $2110 ;should be SameValB_A
lda $2120 ;should be SameValC_C
nop
; test overlap with project symbol
; EDIT: define project symbols ProjSym1 at $2202(4b) and ProjSim2 at $220a(1b)
lda $21fe ;(no sym)
lda $21ff ;SYM-1
lda $2200 ;ChkProj1
lda $2201 ;ChkProj1+1
lda $2202 ;ProjSym
lda $2203 ;ProjSym1+1
lda $2204 ;ProjSym1+2
lda $2205 ;ProjSym1+3
lda $2206 ;ChkProj2+2
lda $2207 ;ChkProj2+3
lda $2208 ;(no sym)
lda $2209 ;ProjSym2-1
lda $220a ;ProjSym2
lda $220b ;(no sym)
nop
; test overlapping regions, single file
lda $2ffe ;(no sym)
lda $2fff ;Over1-1
lda $3000 ;Over1
lda $3001 ;Over1+1
lda $3002 ;Over2
lda $3003 ;Over2+1
lda $3004 ;Over2+2
lda $3005 ;Over2+3
lda $3006 ;Over2a
lda $3007 ;Over3+1
lda $3008 ;Over3+2
lda $3009 ;Over3+3
lda $300a ;Over3+4
lda $300b ;Over3+5
lda $300c ;Over3+6
lda $300d ;Over1+13
lda $300e ;Over1+14
lda $300f ;Over1+15
lda $3010 ;(no sym)
nop
; test overlapping regions, multiple platform files
lda $30fe ;(no sym)
lda $30ff ;SepOver1-1
lda $3100 ;SepOver1
lda $3101 ;SepOver1+1
lda $3102 ;SepOver1+2
lda $3103 ;SepOver1+3
lda $3104 ;SepOver2+2
lda $3105 ;SepOver2+3
lda $3106 ;(no sym)
nop
; test overlap with local variable
; EDIT: create variable LocalVar at $41(2b)
ldx $3e ;(no sym)
ldx $3f ;should be OverVar-1
ldx $40 ;should be OverVar
ldx $41 ;should be LocalVar
ldx $42 ;should be LocalVar+1
ldx $43 ;should be OverVar+3
ldx $44 ;(no sym)
nop
lda $3fff ;EDIT: change to "FatConst"
lda $4000 ;(no sym)
lda $4001 ;(no sym)
; test bank wrap
lda $fff8 ;should be BankWrap+8
lda $08 ;should be BankWrap+24 or <BankWrap-232
nop
; test I/O direction
Dir equ $5000
lda Dir
lda Dir+1
ldx Dir+2
ldy Dir+3
sta Dir
sta Dir+1
stx Dir+2
sty Dir+3
nop
; test MULTI_MASK stuff
bit $c000 ;should all be AlsoMultiZero
bit $c010 ;<-- except this NonMultiOver
bit $c020
bit $c0f0
nop
bit $c001 ;should all be MultiOne
bit $c011
bit $c021
nop
bit $c002 ;should all be hex
bit $c012
bit $c022
nop
lda $c003
lda $c004 ;MultiRead
lda $c005 ;MultiRead+1
lda $c006 ;MultiRead+2
lda $c007
sta $c004
sta $c005 ;MultiWrite
sta $c006 ;MultiWrite+1
sta $c007 ;MultiWrite+2
sta $c008
nop
jsr $c005 ;MultiRead+1
nop
bit $c100 ;should all be MoreMultiZero
bit $c110 ;<-- except this AlsoMoreMultiZero
bit $c120
bit $c1f0
nop
END rts

111
testdata/2022-extension-scripts.S vendored Normal file
View File

@ -0,0 +1,111 @@
; Copyright 2019 faddenSoft. All Rights Reserved.
; See the LICENSE.txt file for distribution terms (Apache 2.0).
;
; Assembler: Merlin 32
; EDIT: the project must include the platform symbol file and extension script
PrintInlineL1String equ $011000
PrintInlineL2String equ $012000
PrintInlineDciString equ $013000 ;EDIT: add to project symbols
org $1000
clc
xce
sep #$30
mx %11
; check basics
jsr PrintInline8String
asc '01234567'
jsr PrintInlineRev8String
asc '76543210'
jsr PrintInlineNullString
asc 'null-term string',00
jsl PrintInlineL1String
str 'string with length/1'
jsl PrintInlineL2String
strl 'string with length/2'
jsl PrintInlineDciString
dci 'DCI string'
; check errors
jsr broken
jsr off_end
jsr too_long
; check block formatting
brk $01
dw data01
brk $02
dw data02
; Handle an edge case where the inline formatting gets thrown out.
; Two paths: BIT $A9 / BRK $85 / inline $FF/EA goes first, then
; LDA $00 / STA $FF / NOP goes. When we get to the STA we notice
; that it's marked as inline data, so we remove it from $85 $ff
; but not from $ea.
;
; If we try to walk through the file, advancing offset by the anattrib
; length, we will traverse the first path, which (with 2-byte BRKs)
; runs into the $FF, which is marked as an instruction but not an
; instruction start.
;
; Switching to 1-byte BRKs makes the $85 an inline data item rather
; than an instruction. When we come back through, we LDA $00 and
; then skip over the next 3 bytes. No conflict.
nop
jsr edge1 ;alt path, evaluated later
dfb $24 ;1: BIT dp
edge1 dfb $a9 ;2: LDA imm
brk ;1: BRK <op>
dfb $85 ;2: STA imm
dfb $ff ;1: address $eaff
nop ;2:
rts
PrintInline8String rts ;EDIT: set label
PrintInlineRev8String rts ;EDIT: set label
PrintInlineNullString rts ;EDIT: set label
data01 ;EDIT: set label
dw $1122 ;should be little-endian
dw $4433 ;should be big-endian
hex 55667788 ;32-bit
hex 99887766 ;32-bit big-endian
dfb 'f' ;ASCII
dfb "F" ;high ASCII
hex 40C142C344C546C7 ;bad DCI string
hex 002001 ;24-bit addr
dw data02 ;by symbol
dfb $80
data02 ;EDIT: set label, must be "data02"
dw data03
dfb $80
data03 ;EDIT: set label
asc "AllEight"
; check address split across string
broken jsr PrintInlineNullString
asc 'broken ',01
org $1100 ;EDIT: split address
asc 'string',00
rts
too_long jsl PrintInlineL2String
dw END-*+1 ;should be 1 byte over; want it to be rejected by
rts ; function in .cs (otherwise code overlap race)
; MUST be last
off_end jsr PrintInlineNullString
nonterm asc 'end'
END equ *

283
testdata/allops-common-6502.S vendored Normal file
View File

@ -0,0 +1,283 @@
; Copyright 2018 faddenSoft. All Rights Reserved.
; See the LICENSE.txt file for distribution terms (Apache 2.0).
;
; Assembler: Merlin 32
ORG $1000
JSR PostBRK
JSR PostH02
JSR PostH12
JSR PostH22
JSR PostH32
JSR PostRTI
JSR PostH42
JSR PostH52
JSR PostRTS
JSR PostH62
JSR PostJMPI
JSR PostH72
JSR PostH92
JSR PostHB2
JSR PostHD2
JSR PostHF2
NOP
NOP
NOP
BRK ZP ;$00
PostBRK ORA (ZP,X)
DFB $02
PostH02 DFB $03,ZP
DFB $04,ZP
ORA ZP
ASL ZP
DFB $07,ZP
PHP
ORA #ZP
ASL
DFB $0B,ZP
DFB $0C,#<ABS,#>ABS
ORA: ABS
ASL: ABS
DFB $0F,#<ABS,#>ABS
BPL PostBPL ;$10
PostBPL ORA (ZP),Y
DFB $12
PostH12 DFB $13,ZP
DFB $14,ZP
ORA ZP,X
ASL ZP,X
DFB $17,ZP
CLC
ORA: ABS,Y
DFB $1A
DFB $1B,#<ABS,#>ABS
DFB $1C,#<ABS,#>ABS
ORA: ABS,X
ASL: ABS,X
DFB $1F,#<ABS,#>ABS
JSR ABS ;$20
AND (ZP,X)
DFB $22
PostH22 DFB $23,ZP
BIT ZP
AND ZP
ROL ZP
DFB $27,ZP
PLP
AND #ZP
ROL
DFB $2B,ZP
BIT: ABS
AND: ABS
ROL: ABS
DFB $2F,#<ABS,#>ABS
BMI PostBMI ;$30
PostBMI AND (ZP),Y
DFB $32
PostH32 DFB $33,ZP
DFB $34,ZP
AND ZP,X
ROL ZP,X
DFB $37,ZP
SEC
AND: ABS,Y
DFB $3A
DFB $3B,#<ABS,#>ABS
BIT: ABS,X
AND: ABS,X
ROL: ABS,X
DFB $3F,#<ABS,#>ABS
RTI ;$40
PostRTI EOR (ZP,X)
DFB $42
PostH42 DFB $43,ZP
DFB $44,ZP
EOR ZP
LSR ZP
DFB $47,ZP
PHA
EOR #ZP
LSR
DFB $4B,ZP
JMP PostJMP
PostJMP EOR: ABS
LSR: ABS
DFB $4f,#<ABS,#>ABS
BVC PostBVC ;$50
PostBVC EOR (ZP),Y
DFB $52
PostH52 DFB $53,ZP
DFB $54,ZP
EOR ZP,X
LSR ZP,X
DFB $57,ZP
CLI
EOR: ABS,Y
DFB $5A
DFB $5B,#<ABS,#>ABS
DFB $5C,#<ABS,#>ABS
EOR: ABS,X
LSR: ABS,X
DFB $5F,#<ABS,#>ABS
RTS ;$60
PostRTS ADC (ZP,X)
DFB $62
PostH62 DFB $63,ZP
DFB $64,ZP
ADC ZP
ROR ZP
DFB $67,ZP
PLA
ADC #ZP
ROR
DFB $6B,ZP
JMP (ABS)
PostJMPI ADC: ABS
ROR: ABS
DFB $6F,#<ABS,#>ABS
BVS PostBVS ;$70
PostBVS ADC (ZP),Y
DFB $72
PostH72 DFB $73,ZP
DFB $74,ZP
ADC ZP,X
ROR ZP,X
DFB $77,ZP
SEI
ADC: ABS,Y
DFB $7A
DFB $7B,#<ABS,#>ABS
DFB $7C,#<ABS,#>ABS
ADC: ABS,X
ROR: ABS,X
DFB $7F,#<ABS,#>ABS
DFB $80,ZP ;$80
STA (ZP,X)
DFB $82,ZP
DFB $83,ZP
STY ZP
STA ZP
STX ZP
DFB $87,ZP
DEY
DFB $89,ZP
TXA
DFB $8B,ZP
STY: ABS
STA: ABS
STX: ABS
DFB $8F,#<ABS,#>ABS
BCC PostBCC ;$90
PostBCC STA (ZP),Y
DFB $92
PostH92 DFB $93,ZP
STY ZP,X
STA ZP,X
STX ZP,Y
DFB $97,ZP
TYA
STA: ABS,Y
TXS
DFB $9B,#<ABS,#>ABS
DFB $9C,#<ABS,#>ABS
STA: ABS,X
DFB $9E,#<ABS,#>ABS
DFB $9F,#<ABS,#>ABS
LDY #ZP ;$A0
LDA (ZP,X)
LDX #ZP
DFB $A3,ZP
LDY ZP
LDA ZP
LDX ZP
DFB $A7,ZP
TAY
LDA #ZP
TAX
DFB $AB,ZP
LDY: ABS
LDA: ABS
LDX: ABS
DFB $AF,#<ABS,#>ABS
BCS PostBCS ;$B0
PostBCS LDA (ZP),Y
DFB $B2
PostHB2 DFB $B3,ZP
LDY ZP,X
LDA ZP,X
LDX ZP,Y
DFB $B7,ZP
CLV
LDA: ABS,Y
TSX
DFB $BB,#<ABS,#>ABS
LDY: ABS,X
LDA: ABS,X
LDX: ABS,Y
DFB $BF,#<ABS,#>ABS
CPY #ZP ;$C0
CMP (ZP,X)
DFB $C2,ZP
DFB $C3,ZP
CPY ZP
CMP ZP
DEC ZP
DFB $C7,ZP
INY
CMP #ZP
DEX
DFB $CB,ZP
CPY: ABS
CMP: ABS
DEC: ABS
DFB $CF,#<ABS,#>ABS
BNE PostBNE ;$D0
PostBNE CMP (ZP),Y
DFB $D2
PostHD2 DFB $D3,ZP
DFB $D4,ZP
CMP ZP,X
DEC ZP,X
DFB $D7,ZP
CLD
CMP: ABS,Y
DFB $DA
DFB $DB,#<ABS,#>ABS
DFB $DC,#<ABS,#>ABS
L11FC CMP: ABS,X
DEC: ABS,X
DFB $DF,#<ABS,#>ABS
CPX #ZP ;$E0
SBC (ZP,X)
DFB $E2,ZP
DFB $E3,ZP
CPX ZP
SBC ZP
INC ZP
DFB $E7,ZP
INX
SBC #ZP
NOP
DFB $EB,ZP
CPX: ABS
SBC: ABS
INC: ABS
DFB $EF,#<ABS,#>ABS
BEQ PostBEQ ;$F0
PostBEQ SBC (ZP),Y
DFB $F2
PostHF2 DFB $F3,ZP
DFB $F4,ZP
SBC ZP,X
INC ZP,X
DFB $F7,ZP
SED
SBC: ABS,Y
DFB $FA
DFB $FB,#<ABS,#>ABS
DFB $FC,#<ABS,#>ABS
SBC: ABS,X
INC: ABS,X
DFB $FF,#<ABS,#>ABS

276
testdata/allops-common-65816.S vendored Normal file
View File

@ -0,0 +1,276 @@
; Copyright 2018 faddenSoft. All Rights Reserved.
; See the LICENSE.txt file for distribution terms (Apache 2.0).
;
; Assembler: Merlin 32
ORG $1000
SEC
XCE
JSR L101F
JSR L10AB
JSR L10F2
JSR L1106
JSR L1109
JSR L112C
JSR L11F9
JSR L11FC
NOP
NOP
NOP
BRK ZP
L101F ORA (ZP,X)
COP ZP
ORA ZP,S
TSB ZP
ORA ZP
ASL ZP
ORA [ZP]
PHP
ORA #ZP
ASL
PHD
TSB: ABS
ORA: ABS
ASL: ABS
ORAL LONG
BPL L1041
L1041 ORA (ZP),Y
ORA (ZP)
ORA (ZP,S),Y
TRB ZP
ORA ZP,X
ASL ZP,X
ORA [ZP],Y
CLC
ORA: ABS,Y
INC
TCS
TRB: ABS
ORA: ABS,X
ASL: ABS,X
ORAL LONG,X
JSR ABS
AND (ZP,X)
JSL LONG
AND ZP,S
BIT ZP
AND ZP
ROL ZP
AND [ZP]
PLP
AND #ZP
ROL
PLD
BIT: ABS
AND: ABS
ROL: ABS
ANDL LONG
BMI L1089
L1089 AND (ZP),Y
AND (ZP)
AND (ZP,S),Y
BIT ZP,X
AND ZP,X
ROL ZP,X
AND [ZP],Y
SEC
AND: ABS,Y
DEC
TSC
BIT: ABS,X
AND: ABS,X
ROL: ABS,X
ANDL LONG,X
RTI
L10AB EOR (ZP,X)
WDM ZP
EOR ZP,S
MVP MV1,MV0
EOR ZP
LSR ZP
EOR [ZP]
PHA
EOR #ZP
LSR
PHK
JMP L10C2
L10C2 EOR: ABS
LSR: ABS
EORL LONG
BVC L10CE
L10CE EOR (ZP),Y
EOR (ZP)
EOR (ZP,S),Y
MVN MV1,MV0
EOR ZP,X
LSR ZP,X
EOR [ZP],Y
CLI
EOR: ABS,Y
PHY
TCD
JML L10E7
L10E7 EOR: ABS,X
LSR: ABS,X
EORL LONG,X
RTS
L10F2 ADC (ZP,X)
PER $0FF6 ;TODO: change
ADC ZP,S
STZ ZP
ADC ZP
ROR ZP
ADC [ZP]
PLA
ADC #ZP
ROR
RTL
L1106 JMP (ABS)
L1109 ADC: ABS
ROR: ABS
ADCL LONG
BVS L1115
L1115 ADC (ZP),Y
ADC (ZP)
ADC (ZP,S),Y
STZ ZP,X
ADC ZP,X
ROR ZP,X
ADC [ZP],Y
SEI
ADC: ABS,Y
PLY
TDC
JMP (ABS,X)
L112C ADC: ABS,X
ROR: ABS,X
ADCL LONG,X
BRA L1138
L1138 STA (ZP,X)
BRL L113D
L113D STA ZP,S
STY ZP
STA ZP
STX ZP
STA [ZP]
DEY
BIT #ZP
TXA
PHB
STY: ABS
STA: ABS
STX: ABS
STAL LONG
BCC L115B
L115B STA (ZP),Y
STA (ZP)
STA (ZP,S),Y
STY ZP,X
STA ZP,X
STX ZP,Y
STA [ZP],Y
TYA
STA: ABS,Y
TXS
TXY
STZ: ABS
STA: ABS,X
STZ: ABS,X
STAL LONG,X
LDY #ZP
LDA (ZP,X)
LDX #ZP
LDA ZP,S
LDY ZP
LDA ZP
LDX ZP
LDA [ZP]
TAY
LDA #ZP
TAX
PLB
LDY: ABS
LDA: ABS
LDX: ABS
LDAL LONG
BCS L11A0
L11A0 LDA (ZP),Y
LDA (ZP)
LDA (ZP,S),Y
LDY ZP,X
LDA ZP,X
LDX ZP,Y
LDA [ZP],Y
CLV
LDA: ABS,Y
TSX
TYX
LDY: ABS,X
LDA: ABS,X
LDX: ABS,Y
LDAL LONG,X
CPY #ZP
CMP (ZP,X)
REP #$00
CMP ZP,S
CPY ZP
CMP ZP
DEC ZP
CMP [ZP]
INY
CMP #ZP
DEX
WAI
CPY: ABS
CMP: ABS
DEC: ABS
CMPL LONG
BNE L11E5
L11E5 CMP (ZP),Y
CMP (ZP)
CMP (ZP,S),Y
PEI ZP
CMP ZP,X
DEC ZP,X
CMP [ZP],Y
CLD
CMP: ABS,Y
PHX
STP
L11F9 JML [ABS]
L11FC CMP: ABS,X
DEC: ABS,X
CMPL LONG,X
CPX #ZP
SBC (ZP,X)
SEP #$00
SBC ZP,S
CPX ZP
SBC ZP
INC ZP
SBC [ZP]
INX
SBC #ZP
NOP
XBA
CPX: ABS
SBC: ABS
INC: ABS
SBCL LONG
BEQ L122A
L122A SBC (ZP),Y
SBC (ZP)
SBC (ZP,S),Y
PEA ABS
SBC ZP,X
INC ZP,X
SBC [ZP],Y
SED
SBC: ABS,Y
PLX
XCE
JSR (ABS,X)
SBC: ABS,X
INC: ABS,X
SBCL LONG,X

271
testdata/allops-common-65C02.S vendored Normal file
View File

@ -0,0 +1,271 @@
; Copyright 2018 faddenSoft. All Rights Reserved.
; See the LICENSE.txt file for distribution terms (Apache 2.0).
;
; Assembler: Merlin 32
ORG $1000
JSR PostBRK
JSR PostRTI
JSR PostRTS
JSR PostJMPI
JSR PostJMPX
NOP
NOP
NOP
BRK ZP ;$00
PostBRK ORA (ZP,X)
DFB $02,ZP
DFB $03
TSB ZP
ORA ZP
ASL ZP
DFB $07
PHP
ORA #ZP
ASL
DFB $0B
TSB: ABS
ORA: ABS
ASL: ABS
DFB $0F
BPL PostBPL ;$10
PostBPL ORA (ZP),Y
ORA (ZP)
DFB $13
TRB ZP
ORA ZP,X
ASL ZP,X
DFB $17
CLC
ORA: ABS,Y
INC
DFB $1B
TRB: ABS
ORA: ABS,X
ASL: ABS,X
DFB $1F
JSR ABS ;$20
AND (ZP,X)
DFB $22,ZP
DFB $23
BIT ZP
AND ZP
ROL ZP
DFB $27
PLP
AND #ZP
ROL
DFB $2B
BIT: ABS
AND: ABS
ROL: ABS
DFB $2F
BMI PostBMI ;$30
PostBMI AND (ZP),Y
AND (ZP)
DFB $33
BIT ZP,X
AND ZP,X
ROL ZP,X
DFB $37
SEC
AND: ABS,Y
DEC
DFB $3B
BIT: ABS,X
AND: ABS,X
ROL: ABS,X
DFB $3F
RTI ;$40
PostRTI EOR (ZP,X)
DFB $42,ZP
DFB $43
DFB $44,ZP
EOR ZP
LSR ZP
DFB $47
PHA
EOR #ZP
LSR
DFB $4B
JMP PostJMP
PostJMP EOR: ABS
LSR: ABS
DFB $4F
BVC PostBVC ;$50
PostBVC EOR (ZP),Y
EOR (ZP)
DFB $53
DFB $54,ZP
EOR ZP,X
LSR ZP,X
DFB $57
CLI
EOR: ABS,Y
PHY
DFB $5B
DFB $5C,<ABS,>ABS
EOR: ABS,X
LSR: ABS,X
DFB $5F
RTS ;$60
PostRTS ADC (ZP,X)
DFB $62,ZP
DFB $63
STZ ZP
ADC ZP
ROR ZP
DFB $67
PLA
ADC #ZP
ROR
DFB $6B
JMP (ABS)
PostJMPI ADC: ABS
ROR: ABS
DFB $6F
BVS PostBVS ;$70
PostBVS ADC (ZP),Y
ADC (ZP)
DFB $73
STZ ZP,X
ADC ZP,X
ROR ZP,X
DFB $77
SEI
ADC: ABS,Y
PLY
DFB $7B
JMP (ABS,X)
PostJMPX ADC: ABS,X
ROR: ABS,X
DFB $7F
BRA PostBRA ;$80
PostBRA STA (ZP,X)
DFB $82,ZP
DFB $83
STY ZP
STA ZP
STX ZP
DFB $87
DEY
BIT #ZP
TXA
DFB $8B
STY: ABS
STA: ABS
STX: ABS
DFB $8F
BCC PostBCC ;$90
PostBCC STA (ZP),Y
STA (ZP)
DFB $93
STY ZP,X
STA ZP,X
STX ZP,Y
DFB $97
TYA
STA: ABS,Y
TXS
DFB $9B
STZ: ABS
STA: ABS,X
STZ: ABS,X
DFB $9F
LDY #ZP ;$A0
LDA (ZP,X)
LDX #ZP
DFB $A3
LDY ZP
LDA ZP
LDX ZP
DFB $A7
TAY
LDA #ZP
TAX
DFB $AB
LDY: ABS
LDA: ABS
LDX: ABS
DFB $AF
BCS PostBCS ;$B0
PostBCS LDA (ZP),Y
LDA (ZP)
DFB $B3
LDY ZP,X
LDA ZP,X
LDX ZP,Y
DFB $B7
CLV
LDA: ABS,Y
TSX
DFB $BB
LDY: ABS,X
LDA: ABS,X
LDX: ABS,Y
DFB $BF
CPY #ZP ;$C0
CMP (ZP,X)
DFB $C2,ZP
DFB $C3
CPY ZP
CMP ZP
DEC ZP
DFB $C7
INY
CMP #ZP
DEX
DFB $CB
CPY: ABS
CMP: ABS
DEC: ABS
DFB $CF
BNE PostBNE ;$D0
PostBNE CMP (ZP),Y
CMP (ZP)
DFB $D3
DFB $D4,ZP
CMP ZP,X
DEC ZP,X
DFB $D7
CLD
CMP: ABS,Y
PHX
DFB $DB
DFB $DC,<ABS,>ABS
CMP: ABS,X
DEC: ABS,X
DFB $DF
CPX #ZP ;$E0
SBC (ZP,X)
DFB $E2,ZP
DFB $E3
CPX ZP
SBC ZP
INC ZP
DFB $E7
INX
SBC #ZP
NOP
DFB $EB
CPX: ABS
SBC: ABS
INC: ABS
DFB $EF
BEQ PostBEQ ;$F0
PostBEQ SBC (ZP),Y
SBC (ZP)
DFB $F3
DFB $F4,ZP
SBC ZP,X
INC ZP,X
DFB $F7
SED
SBC: ABS,Y
PLX
DFB $FB
DFB $FC,<ABS,>ABS
SBC: ABS,X
INC: ABS,X
DFB $FF

1
testdata/qasm vendored Symbolic link
View File

@ -0,0 +1 @@
../qasm