mirror of
https://github.com/fadden/6502bench.git
synced 2026-04-27 03:17:45 +00:00
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:
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
-1
@@ -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.
|
||||||
|
|||||||
Reference in new issue
Block a user