Split 2018x-extension-scripts

Created the 20180-extension-scripts test by cutting out the handful
of 65816-specific items from 20182.  Removed some issue-specific stuff
from 20182 that didn't need to be duplicated.  Renamed some stale
references to test 2022.
This commit is contained in:
Andy McFadden committed 2025-11-30 14:20:38 -08:00
1 parent da7548a24a
commit 5a3d288707
18 files changed
+859 -264

No files matched your search

Binary file not shown.
@@ -6,8 +6,9 @@ using System.Collections.Generic;
using PluginCommon; using PluginCommon;
namespace RuntimeData.Test2022 { // JSR/JSL handler
public class Test2022A : MarshalByRefObject, IPlugin, IPlugin_SymbolList, namespace RuntimeData.Test20180 {
public class Test20180A : MarshalByRefObject, IPlugin, IPlugin_SymbolList,
IPlugin_InlineJsr, IPlugin_InlineJsl { IPlugin_InlineJsr, IPlugin_InlineJsl {
private IApplication mAppRef; private IApplication mAppRef;
private byte[] mFileData; private byte[] mFileData;
@@ -23,7 +24,7 @@ namespace RuntimeData.Test2022 {
public string Identifier { public string Identifier {
get { get {
return "Test 2022-extension-scripts A"; return "Test 20180-extension-scripts A";
} }
} }
@@ -31,7 +32,7 @@ namespace RuntimeData.Test2022 {
mAppRef = appRef; mAppRef = appRef;
mFileData = fileData; mFileData = fileData;
mAppRef.DebugLog("Test2022-A(id=" + AppDomain.CurrentDomain.Id + "): prepare()"); mAppRef.DebugLog("Test20180-A(id=" + AppDomain.CurrentDomain.Id + "): prepare()");
} }
public void Unprepare() { public void Unprepare() {
@@ -6,15 +6,16 @@ using System.Collections.Generic;
using PluginCommon; using PluginCommon;
namespace RuntimeData.Test2022 { // BRK handler
public class Test2022B : MarshalByRefObject, IPlugin, IPlugin_InlineBrk { namespace RuntimeData.Test20180 {
public class Test20180B : MarshalByRefObject, IPlugin, IPlugin_InlineBrk {
private IApplication mAppRef; private IApplication mAppRef;
private byte[] mFileData; private byte[] mFileData;
private AddressTranslate mAddrTrans; private AddressTranslate mAddrTrans;
public string Identifier { public string Identifier {
get { get {
return "Test 2022-extension-scripts B"; return "Test 20180-extension-scripts B";
} }
} }
@@ -23,7 +24,7 @@ namespace RuntimeData.Test2022 {
mFileData = fileData; mFileData = fileData;
mAddrTrans = addrTrans; mAddrTrans = addrTrans;
mAppRef.DebugLog("Test2022-B(id=" + AppDomain.CurrentDomain.Id + "): prepare()"); mAppRef.DebugLog("Test20180-B(id=" + AppDomain.CurrentDomain.Id + "): prepare()");
} }
public void Unprepare() { public void Unprepare() {
@@ -0,0 +1,149 @@
### 6502bench SourceGen dis65 v1.0 ###
{
"_ContentVersion":7,
"FileDataLength":543,
"FileDataCrc32":321667593,
"ProjectProps":{
"CpuName":"6502",
"IncludeUndocumentedInstr":true,
"TwoByteBrk":true,
"EntryFlags":32702671,
"AutoLabelStyle":"Simple",
"AnalysisParams":{
"AnalyzeUncategorizedData":true,
"DefaultTextScanMode":"LowHighAscii",
"MinCharsForString":4,
"SeekNearbyTargets":false,
"UseRelocData":false,
"SmartPlpHandling":false,
"SmartPlbHandling":true},
"PlatformSymbolFileIdentifiers":[],
"ExtensionScriptFileIdentifiers":["PROJ:20180-extension-scripts-a.cs",
"PROJ:20180-extension-scripts-b.cs"],
"ProjectSyms":{
}},
"AddressMap":[{
"Offset":0,
"Addr":4096,
"Length":512,
"PreLabel":"",
"DisallowInward":false,
"DisallowOutward":false,
"IsRelative":false},
{
"Offset":512,
"Addr":6144,
"Length":11,
"PreLabel":"",
"DisallowInward":false,
"DisallowOutward":false,
"IsRelative":false},
{
"Offset":523,
"Addr":6208,
"Length":20,
"PreLabel":"",
"DisallowInward":false,
"DisallowOutward":false,
"IsRelative":false}],
"TypeHints":[{
"Low":0,
"High":0,
"Hint":"Code"}],
"StatusFlagOverrides":{
},
"MiscFlags":{
},
"Comments":{
},
"LongComments":{
},
"Notes":{
},
"UserLabels":{
"72":{
"Label":"PrintInline8String",
"Value":4168,
"Source":"User",
"Type":"GlobalAddr",
"LabelAnno":"None"},
"73":{
"Label":"PrintInlineRev8String",
"Value":4169,
"Source":"User",
"Type":"GlobalAddr",
"LabelAnno":"None"},
"74":{
"Label":"PrintInlineNullString",
"Value":4170,
"Source":"User",
"Type":"GlobalAddr",
"LabelAnno":"None"},
"75":{
"Label":"data01",
"Value":4171,
"Source":"User",
"Type":"LocalOrGlobalAddr",
"LabelAnno":"None"},
"127":{
"Label":"Next1",
"Value":4223,
"Source":"User",
"Type":"GlobalAddr",
"LabelAnno":"None"},
"103":{
"Label":"data02",
"Value":4199,
"Source":"User",
"Type":"LocalOrGlobalAddr",
"LabelAnno":"None"},
"106":{
"Label":"data03",
"Value":4202,
"Source":"User",
"Type":"LocalOrGlobalAddr",
"LabelAnno":"None"},
"114":{
"Label":"NoCont",
"Value":4210,
"Source":"User",
"Type":"GlobalAddr",
"LabelAnno":"None"}},
"OperandFormats":{
"100":{
"Length":2,
"Format":"NumericLE",
"SubFormat":"Address",
"SymbolRef":null,
"Extra":null}},
"LvTables":{
},
"Visualizations":[],
"VisualizationAnimations":[],
"VisualizationSets":{
},
"RelocList":{
},
"DbrValues":{
}}
Binary file not shown.
@@ -1,8 +1,8 @@
### 6502bench SourceGen dis65 v1.0 ### ### 6502bench SourceGen dis65 v1.0 ###
{ {
"_ContentVersion":3, "_ContentVersion":7,
"FileDataLength":544, "FileDataLength":544,
"FileDataCrc32":787264196, "FileDataCrc32":1948144462,
"ProjectProps":{ "ProjectProps":{
"CpuName":"65816", "CpuName":"65816",
"IncludeUndocumentedInstr":false, "IncludeUndocumentedInstr":false,
@@ -13,10 +13,12 @@
"AnalyzeUncategorizedData":true, "AnalyzeUncategorizedData":true,
"DefaultTextScanMode":"LowHighAscii", "DefaultTextScanMode":"LowHighAscii",
"MinCharsForString":4, "MinCharsForString":4,
"SeekNearbyTargets":true, "SeekNearbyTargets":false,
"SmartPlpHandling":true}, "UseRelocData":false,
"SmartPlpHandling":false,
"SmartPlbHandling":true},
"PlatformSymbolFileIdentifiers":["PROJ:20180-extension-scripts.sym65"], "PlatformSymbolFileIdentifiers":["PROJ:20182-extension-scripts.sym65"],
"ExtensionScriptFileIdentifiers":["PROJ:20180-extension-scripts-a.cs", "ExtensionScriptFileIdentifiers":["PROJ:20180-extension-scripts-a.cs",
"PROJ:20180-extension-scripts-b.cs"], "PROJ:20180-extension-scripts-b.cs"],
"ProjectSyms":{ "ProjectSyms":{
@@ -25,7 +27,8 @@
"Length":1, "Length":1,
"Format":"NumericLE", "Format":"NumericLE",
"SubFormat":"Hex", "SubFormat":"Hex",
"SymbolRef":null}, "SymbolRef":null,
"Extra":null},
"Comment":"", "Comment":"",
"HasWidth":false, "HasWidth":false,
@@ -39,15 +42,30 @@
"AddressMap":[{ "AddressMap":[{
"Offset":0, "Offset":0,
"Addr":4096}, "Addr":4096,
"Length":512,
"PreLabel":"",
"DisallowInward":false,
"DisallowOutward":false,
"IsRelative":false},
{ {
"Offset":512, "Offset":512,
"Addr":6144}, "Addr":6144,
"Length":11,
"PreLabel":"",
"DisallowInward":false,
"DisallowOutward":false,
"IsRelative":false},
{ {
"Offset":523, "Offset":523,
"Addr":6208}], "Addr":6208,
"Length":21,
"PreLabel":"",
"DisallowInward":false,
"DisallowOutward":false,
"IsRelative":false}],
"TypeHints":[{ "TypeHints":[{
"Low":0, "Low":0,
"High":0, "High":0,
@@ -55,8 +73,11 @@
"StatusFlagOverrides":{ "StatusFlagOverrides":{
}, },
"MiscFlags":{
},
"Comments":{ "Comments":{
"183":"split across address change"}, },
"LongComments":{ "LongComments":{
}, },
@@ -65,58 +86,51 @@
}, },
"UserLabels":{ "UserLabels":{
"141":{ "131":{
"Label":"PrintInline8String", "Label":"PrintInline8String",
"Value":4237, "Value":4227,
"Source":"User",
"Type":"LocalOrGlobalAddr",
"LabelAnno":"None"},
"142":{
"Label":"PrintInlineRev8String",
"Value":4238,
"Source":"User",
"Type":"LocalOrGlobalAddr",
"LabelAnno":"None"},
"143":{
"Label":"PrintInlineNullString",
"Value":4239,
"Source":"User",
"Type":"LocalOrGlobalAddr",
"LabelAnno":"None"},
"172":{
"Label":"data02",
"Value":4268,
"Source":"User",
"Type":"LocalOrGlobalAddr",
"LabelAnno":"None"},
"175":{
"Label":"data03",
"Value":4271,
"Source":"User",
"Type":"LocalOrGlobalAddr",
"LabelAnno":"None"},
"144":{
"Label":"data01",
"Value":4240,
"Source":"User",
"Type":"LocalOrGlobalAddr",
"LabelAnno":"None"},
"196":{
"Label":"Next1",
"Value":4292,
"Source":"User", "Source":"User",
"Type":"GlobalAddr", "Type":"GlobalAddr",
"LabelAnno":"None"}, "LabelAnno":"None"},
"183":{ "132":{
"Label":"NoCont", "Label":"PrintInlineRev8String",
"Value":4279, "Value":4228,
"Source":"User",
"Type":"GlobalAddr",
"LabelAnno":"None"},
"133":{
"Label":"PrintInlineNullString",
"Value":4229,
"Source":"User",
"Type":"GlobalAddr",
"LabelAnno":"None"},
"134":{
"Label":"data01",
"Value":4230,
"Source":"User",
"Type":"LocalOrGlobalAddr",
"LabelAnno":"None"},
"162":{
"Label":"data02",
"Value":4258,
"Source":"User",
"Type":"LocalOrGlobalAddr",
"LabelAnno":"None"},
"165":{
"Label":"data03",
"Value":4261,
"Source":"User",
"Type":"LocalOrGlobalAddr",
"LabelAnno":"None"},
"173":{
"Label":"Next",
"Value":4269,
"Source":"User", "Source":"User",
"Type":"GlobalAddr", "Type":"GlobalAddr",
"LabelAnno":"None"}}, "LabelAnno":"None"}},
@@ -130,4 +144,10 @@
"Visualizations":[], "Visualizations":[],
"VisualizationAnimations":[], "VisualizationAnimations":[],
"VisualizationSets":{ "VisualizationSets":{
},
"RelocList":{
},
"DbrValues":{
}} }}
@@ -1,7 +1,7 @@
; Copyright 2019 faddenSoft. All Rights Reserved. ; Copyright 2019 faddenSoft. All Rights Reserved.
; See the LICENSE.txt file for distribution terms (Apache 2.0). ; See the LICENSE.txt file for distribution terms (Apache 2.0).
*SYNOPSIS Symbols test 2022-extension-scripts *SYNOPSIS Symbols test 20182-extension-scripts
PrintInlineL1String @ $011000 PrintInlineL1String @ $011000
PrintInlineL2String @ $012000 PrintInlineL2String @ $012000
@@ -0,0 +1,115 @@
.cpu "6502i"
.enc "sg_hiascii"
.cdef $20,$7e,$a0
.enc "sg_ascii"
.cdef $20,$7e,$20
bword .macro
.byte (\1)>>8,(\1)&$ff
.endmacro
* = $1000
jsr PrintInline8String
.text "01234567"
jsr PrintInlineRev8String
.text "76543210"
jsr PrintInlineNullString
.null "null-term string"
jsr L1800
jsr L184E
jsr L1848
brk #$01
.word data01
brk #$02
.word data02
nop
jsr L1040
.byte $24
L1040 .byte $a9
.byte $00
sta $ff
.byte $ea
jmp Next1
PrintInline8String rts
PrintInlineRev8String rts
PrintInlineNullString rts
data01 .word 4386
bword $3344
.dword $88776655
.byte $99,$88,$77,$66
.byte 'f'
.byte 'F' | $80
.byte $40
.byte $c1
.byte $42
.byte $c3
.byte $44
.byte $c5
.byte $46
.byte $c7
.long $012000
.word data02
.byte $80
data02 .word _data03
.byte $80
.enc "sg_hiascii"
_data03 .text "AllEight"
NoCont pla
pla
rts
L1075 jsr NoCont
.byte $00
.byte $80
L107A jsr NoCont
.byte $00
.byte $80
Next1 jsr L1075
jsr _L108A
clc
jsr L107A
rts
_L108A sec
jsr L107A
clc
brk #$02
.word data02
bcc _L1099
bcs _L1099
.byte $00
.byte $80
_L1099 rts
.fill 358,$00
.logical $1800
L1800 jsr PrintInlineNullString
.byte $62
.enc "sg_ascii"
.text "roken "
.byte $01
.here
.logical $1840
.text "string"
.byte $00
.byte $60
L1848 jsr PrintInlineNullString
.null $0a
rts
L184E jsr PrintInlineNullString
adc $6e
.byte $64
.here
@@ -0,0 +1,108 @@
!cpu 6510
* = $1000
jsr PrintInline8String
!text "01234567"
jsr PrintInlineRev8String
!text "76543210"
jsr PrintInlineNullString
!text "null-term string",$00
jsr L1800
jsr L184E
jsr L1848
!byte $00,$01
!word data01
!byte $00,$02
!word data02
nop
jsr L1040
!byte $24
L1040 !byte $a9
!byte $00
sta $ff
!byte $ea
jmp Next1
PrintInline8String rts
PrintInlineRev8String rts
PrintInlineNullString rts
data01 !word 4386
!byte $33,$44
!32 $88776655
!byte $99,$88,$77,$66
!byte 'f'
!byte 'F' | $80
!byte $40
!byte $c1
!byte $42
!byte $c3
!byte $44
!byte $c5
!byte $46
!byte $c7
!24 $012000
!word data02
!byte $80
data02 !word @data03
!byte $80
!xor $80 {
@data03 !text "AllEight"
}
NoCont pla
pla
rts
L1075 jsr NoCont
!byte $00
!byte $80
L107A jsr NoCont
!byte $00
!byte $80
Next1 jsr L1075
jsr @L108A
clc
jsr L107A
rts
@L108A sec
jsr L107A
clc
!byte $00,$02
!word data02
bcc @L1099
bcs @L1099
!byte $00
!byte $80
@L1099 rts
!fill 358,$00
!pseudopc $1800 {
L1800 jsr PrintInlineNullString
!byte $62
!text "roken "
!byte $01
}
!pseudopc $1840 {
!text "string"
!byte $00
!byte $60
L1848 jsr PrintInlineNullString
!text $0a,$00
rts
L184E jsr PrintInlineNullString
adc $6e
!byte $64
}
@@ -0,0 +1,109 @@
.setcpu "6502X"
.org $1000
jsr PrintInline8String
.byte "01234567"
jsr PrintInlineRev8String
.byte "76543210"
jsr PrintInlineNullString
.asciiz "null-term string"
jsr L1800
jsr L184E
jsr L1848
.byte $00,$01
.word data01
.byte $00,$02
.word data02
nop
jsr L1040
.byte $24
L1040: .byte $a9
.byte $00
sta $ff
.byte $ea
jmp Next1
PrintInline8String: rts
PrintInlineRev8String: rts
PrintInlineNullString: rts
data01: .word 4386
.dbyt $3344
.dword $88776655
.byte $99,$88,$77,$66
.byte 'f'
.byte 'F' | $80
.byte $40
.byte $c1
.byte $42
.byte $c3
.byte $44
.byte $c5
.byte $46
.byte $c7
.faraddr $012000
.word data02
.byte $80
data02: .word @data03
.byte $80
.macro HiAscii Arg
.repeat .strlen(Arg), I
.byte .strat(Arg, I) | $80
.endrep
.endmacro
@data03: HiAscii "AllEight"
NoCont: pla
pla
rts
L1075: jsr NoCont
.byte $00
.byte $80
L107A: jsr NoCont
.byte $00
.byte $80
Next1: jsr L1075
jsr @L108A
clc
jsr L107A
rts
@L108A: sec
jsr L107A
clc
.byte $00,$02
.word data02
bcc @L1099
bcs @L1099
.byte $00
.byte $80
@L1099: rts
.res 358,$00
.org $1800
L1800: jsr PrintInlineNullString
.byte $62
.byte "roken "
.byte $01
.org $1840
.byte "string"
.byte $00
.byte $60
L1848: jsr PrintInlineNullString
.byte $0a,$00
rts
L184E: jsr PrintInlineNullString
adc $6e
.byte $64
@@ -0,0 +1,9 @@
# 6502bench SourceGen generated linker script for 20180-extension-scripts
MEMORY {
MAIN: file=%O, start=%S, size=65536;
}
SEGMENTS {
CODE: load=MAIN, type=rw;
}
FEATURES {}
SYMBOLS {}
@@ -0,0 +1,103 @@
org $1000
jsr PrintInline8String
asc '01234567'
jsr PrintInlineRev8String
rev '01234567'
jsr PrintInlineNullString
asc 'null-term string',00
jsr L1800
jsr L184E
jsr L1848
brk $01
dw data01
brk $02
dw data02
nop
jsr L1040
dfb $24
L1040 dfb $a9
dfb $00
sta $ff
dfb $ea
jmp Next1
PrintInline8String rts
PrintInlineRev8String rts
PrintInlineNullString rts
data01 dw 4386
ddb $3344
adrl $88776655
dfb $99,$88,$77,$66
dfb 'f'
dfb "F"
dfb $40
dfb $c1
dfb $42
dfb $c3
dfb $44
dfb $c5
dfb $46
dfb $c7
adr $012000
dw data02
dfb $80
data02 dw :data03
dfb $80
:data03 asc "AllEight"
NoCont pla
pla
rts
L1075 jsr NoCont
dfb $00
dfb $80
L107A jsr NoCont
dfb $00
dfb $80
Next1 jsr L1075
jsr :L108A
clc
jsr L107A
rts
:L108A sec
jsr L107A
clc
brk $02
dw data02
bcc :L1099
bcs :L1099
dfb $00
dfb $80
:L1099 rts
ds 358
org $1800
L1800 jsr PrintInlineNullString
dfb $62
asc 'roken '
dfb $01
org $1840
asc 'string'
dfb $00
dfb $60
L1848 jsr PrintInlineNullString
asc 0a00
rts
L184E jsr PrintInlineNullString
adc $6e
dfb $64
@@ -35,14 +35,7 @@ PrintInlineDciString = $013000
.word data01 .word data01
brk #$02 brk #$02
.word data02 .word data02
nop jmp Next
jsr L1085
.byte $24
L1085 .byte $a9
.byte $00
sta $ff
.byte $ea
jmp Next1
PrintInline8String rts PrintInline8String rts
@@ -72,40 +65,18 @@ data02 .word _data03
.enc "sg_hiascii" .enc "sg_hiascii"
_data03 .text "AllEight" _data03 .text "AllEight"
NoCont pla ;split across address change Next clc
pla
rts
L10BA jsr NoCont
.byte $00
.byte $80
L10BF jsr NoCont
.byte $00
.byte $80
Next1 jsr L10BA
jsr _L10CF
clc
jsr L10BF
rts
_L10CF sec
jsr L10BF
clc
brk #$02 brk #$02
.word data02 .word data02
bcc _L10DE bcc _L10B8
bcs _L10DE bcs _L10B8
.byte $00 .byte $00
.byte $80 .byte $80
_L10DE rts _L10B8 rts
.fill 289,$00 .fill 327,$00
.logical $1800 .logical $1800
L1800 jsr PrintInlineNullString L1800 jsr PrintInlineNullString
@@ -28,14 +28,7 @@ PrintInlineDciString = $013000
!word data01 !word data01
!byte $00,$02 !byte $00,$02
!word data02 !word data02
nop jmp Next
jsr L1085
!byte $24
L1085 !byte $a9
!byte $00
sta $ff
!byte $ea
jmp Next1
PrintInline8String rts PrintInline8String rts
@@ -66,40 +59,18 @@ data02 !word @data03
@data03 !text "AllEight" @data03 !text "AllEight"
} }
NoCont pla ;split across address change Next clc
pla
rts
L10BA jsr NoCont
!byte $00
!byte $80
L10BF jsr NoCont
!byte $00
!byte $80
Next1 jsr L10BA
jsr @L10CF
clc
jsr L10BF
rts
@L10CF sec
jsr L10BF
clc
!byte $00,$02 !byte $00,$02
!word data02 !word data02
bcc @L10DE bcc @L10B8
bcs @L10DE bcs @L10B8
!byte $00 !byte $00
!byte $80 !byte $80
@L10DE rts @L10B8 rts
!fill 289,$00 !fill 327,$00
!pseudopc $1800 { !pseudopc $1800 {
L1800 jsr PrintInlineNullString L1800 jsr PrintInlineNullString
@@ -28,14 +28,7 @@ PrintInlineDciString = $013000
.word data01 .word data01
brk $02 brk $02
.word data02 .word data02
nop jmp Next
jsr L1085
.byte $24
L1085: .byte $a9
.byte $00
sta $ff
.byte $ea
jmp Next1
PrintInline8String: rts PrintInline8String: rts
@@ -69,40 +62,18 @@ data02: .word @data03
.endmacro .endmacro
@data03: HiAscii "AllEight" @data03: HiAscii "AllEight"
NoCont: pla ;split across address change Next: clc
pla
rts
L10BA: jsr NoCont
.byte $00
.byte $80
L10BF: jsr NoCont
.byte $00
.byte $80
Next1: jsr L10BA
jsr @L10CF
clc
jsr L10BF
rts
@L10CF: sec
jsr L10BF
clc
brk $02 brk $02
.word data02 .word data02
bcc @L10DE bcc @L10B8
bcs @L10DE bcs @L10B8
.byte $00 .byte $00
.byte $80 .byte $80
@L10DE: rts @L10B8: rts
.res 289,$00 .res 327,$00
.org $1800 .org $1800
L1800: jsr PrintInlineNullString L1800: jsr PrintInlineNullString
@@ -25,14 +25,7 @@ PrintInlineDciString equ $013000
dw data01 dw data01
brk $02 brk $02
dw data02 dw data02
nop jmp Next
jsr L1085
dfb $24
L1085 dfb $a9
dfb $00
sta $ff
dfb $ea
jmp Next1
PrintInline8String rts PrintInline8String rts
@@ -61,40 +54,18 @@ data02 dw :data03
dfb $80 dfb $80
:data03 asc "AllEight" :data03 asc "AllEight"
NoCont pla ;split across address change Next clc
pla
rts
L10BA jsr NoCont
dfb $00
dfb $80
L10BF jsr NoCont
dfb $00
dfb $80
Next1 jsr L10BA
jsr :L10CF
clc
jsr L10BF
rts
:L10CF sec
jsr L10BF
clc
brk $02 brk $02
dw data02 dw data02
bcc :L10DE bcc :L10B8
bcs :L10DE bcs :L10B8
dfb $00 dfb $00
dfb $80 dfb $80
:L10DE rts :L10B8 rts
ds 289 ds 327
org $1800 org $1800
L1800 jsr PrintInlineNullString L1800 jsr PrintInlineNullString
@@ -0,0 +1,148 @@
; 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 extension scripts
; EDIT: set "treat BRK as two-byte instruction"
org $1000
; check basics
jsr PrintInline8String
asc '01234567'
jsr PrintInlineRev8String
asc '76543210'
jsr PrintInlineNullString
asc 'null-term string',00
; 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:
jmp Next1
PrintInline8String rts ;EDIT: set label
PrintInlineRev8String rts ;EDIT: set label
PrintInlineNullString rts ;EDIT: set label
data01 ;EDIT: set label (unique local)
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" (unique local)
dw data03
dfb $80
data03 ;EDIT: set label (unique local)
asc "AllEight"
;
; The analyzer is trying to avoid calling the inline JSR check on code it
; has previously visited. There was a bug that caused us to lose the
; no-continue value if code was revisited.
;
; To ensure we revisit the function, we need to call it, then call
; something else that calls it, changing up the flags.
;
NoCont pla
pla
rts
TestNC1 jsr NoCont
dfb $00,$80
TestNC2 jsr NoCont
dfb $00,$80
Next1 jsr TestNC1
jsr PushThing
clc
jsr TestNC2
rts
PushThing
sec
jsr TestNC2
; Make sure flags get marked as indeterminate across inline BRK.
; Also exercises formatting the same block twice.
clc
brk $02
dw data02
bcc :BrkNext
bcs :BrkNext
brk $80
:BrkNext
rts
; Failed call tests. Some of these need to be at the end of the file.
; We use an align directive to ensure their offsets don't change as we
; update stuff earlier in the file.
ds \
ds 256
org $1800
; check address split across string
broken jsr PrintInlineNullString
asc 'broken ',01
org $1840 ;EDIT: split address
asc 'string',00
rts
too_long jsr PrintInlineNullString
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 *
@@ -3,7 +3,7 @@
; ;
; Assembler: Merlin 32 ; Assembler: Merlin 32
; EDIT: the project must include the platform symbol file and extension script ; EDIT: the project must include the platform symbol file and extension scripts
PrintInlineL1String equ $011000 PrintInlineL1String equ $011000
PrintInlineL2String equ $012000 PrintInlineL2String equ $012000
@@ -43,36 +43,13 @@ PrintInlineDciString equ $013000 ;EDIT: add to project symbols
brk $02 brk $02
dw data02 dw data02
; Handle an edge case where the inline formatting gets thrown out. jmp Next
; 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:
jmp Next1
PrintInline8String rts ;EDIT: set label PrintInline8String rts ;EDIT: set label
PrintInlineRev8String rts ;EDIT: set label PrintInlineRev8String rts ;EDIT: set label
PrintInlineNullString rts ;EDIT: set label PrintInlineNullString rts ;EDIT: set label
data01 ;EDIT: set label data01 ;EDIT: set label (unique local)
dw $1122 ;should be little-endian dw $1122 ;should be little-endian
dw $4433 ;should be big-endian dw $4433 ;should be big-endian
hex 55667788 ;32-bit hex 55667788 ;32-bit
@@ -85,43 +62,14 @@ data01 ;EDIT: set label
dfb $80 dfb $80
data02 ;EDIT: set label, must be "data02" data02 ;EDIT: set label, must be "data02" (unique local)
dw data03 dw data03
dfb $80 dfb $80
data03 ;EDIT: set label data03 ;EDIT: set label (unique local)
asc "AllEight" asc "AllEight"
Next
;
; The analyzer is trying to avoid calling the inline JSR check on code it
; has previously visited. There was a bug that caused us to lose the
; no-continue value if code was revisited.
;
; To ensure we revisit the function, we need to call it, then call
; something else that calls it, changing up the flags.
;
NoCont pla
pla
rts
TestNC1 jsr NoCont
dfb $00,$80
TestNC2 jsr NoCont
dfb $00,$80
Next1 jsr TestNC1
jsr PushThing
clc
jsr TestNC2
rts
PushThing
sec
jsr TestNC2
; Make sure flags get marked as indeterminate across inline BRK. ; Make sure flags get marked as indeterminate across inline BRK.
; Also exercises formatting the same block twice. ; Also exercises formatting the same block twice.