From b43fd07688091d20ae43d730092cd4546ba17778 Mon Sep 17 00:00:00 2001 From: Andy McFadden Date: Mon, 8 Jun 2020 17:47:26 -0700 Subject: [PATCH] Split 2002x-operand-formats test My original goal was to add a sign-extended decimal format, but that turned out to be awkward. It works for data items and instructions with immediate operands (e.g. "LDA #-1"), but is either wrong or useless for address operands, since most assemblers treat integers as 32-bit values. (LDA -1 is not LDA $FFFF, it's LDA $FFFFFFFF, which is not useful unless your asm is doing an implicit mod.) There's also a bit of variability in how assemblers treat negative values, so I'm shelving the idea for now. I'm keeping the updated tests, which are now split into 6502 / 65816 parts. Also, updated the formatter to output all decimal values as unsigned. Most assemblers were fine with negative values, but 64tass .dword insists on positive. Rather than make the opcode conditional on the value's range, we now just always output unsigned decimal, which all current assemblers accept. --- Asm65/Formatter.cs | 4 +- CommonUtil/BitTwiddle.cs | 15 + SourceGen/SGTestData/20020-operand-formats | Bin 0 -> 165 bytes .../SGTestData/20020-operand-formats.dis65 | 487 ++++++++++++++++++ SourceGen/SGTestData/20022-operand-formats | Bin 143 -> 62 bytes .../SGTestData/20022-operand-formats.dis65 | 384 ++------------ .../Expected/20020-operand-formats_64tass.S | 90 ++++ .../Expected/20020-operand-formats_Merlin32.S | 85 +++ .../Expected/20020-operand-formats_acme.S | 86 ++++ .../Expected/20020-operand-formats_cc65.S | 87 ++++ .../Expected/20020-operand-formats_cc65.cfg | 11 + .../Expected/20022-operand-formats_64tass.S | 82 +-- .../Expected/20022-operand-formats_Merlin32.S | 82 +-- .../Expected/20022-operand-formats_acme.S | 82 +-- .../Expected/20022-operand-formats_cc65.S | 82 +-- .../Expected/20022-operand-formats_cc65.cfg | 2 +- .../SGTestData/Source/20020-operand-formats.S | 99 ++++ .../SGTestData/Source/20022-operand-formats.S | 107 +--- 18 files changed, 1086 insertions(+), 699 deletions(-) create mode 100644 SourceGen/SGTestData/20020-operand-formats create mode 100644 SourceGen/SGTestData/20020-operand-formats.dis65 create mode 100644 SourceGen/SGTestData/Expected/20020-operand-formats_64tass.S create mode 100644 SourceGen/SGTestData/Expected/20020-operand-formats_Merlin32.S create mode 100644 SourceGen/SGTestData/Expected/20020-operand-formats_acme.S create mode 100644 SourceGen/SGTestData/Expected/20020-operand-formats_cc65.S create mode 100644 SourceGen/SGTestData/Expected/20020-operand-formats_cc65.cfg create mode 100644 SourceGen/SGTestData/Source/20020-operand-formats.S diff --git a/Asm65/Formatter.cs b/Asm65/Formatter.cs index 022730a..5ef0ef4 100644 --- a/Asm65/Formatter.cs +++ b/Asm65/Formatter.cs @@ -535,12 +535,12 @@ namespace Asm65 { } /// - /// Formats a value as decimal. + /// Formats a 32-bit integer value as unsigned decimal. /// /// Value to convert. /// Formatted string. public string FormatDecimalValue(int value) { - return value.ToString(); + return ((uint)value).ToString(); } /// diff --git a/CommonUtil/BitTwiddle.cs b/CommonUtil/BitTwiddle.cs index f5b5fd4..ddfbaf8 100644 --- a/CommonUtil/BitTwiddle.cs +++ b/CommonUtil/BitTwiddle.cs @@ -90,5 +90,20 @@ namespace CommonUtil { // all the bits to the right of it, then just count the 1s. return CountOneBits(IsolateLeastSignificantOne(val) - 1); } + + /// + /// Sign-extends an integer value. + /// + /// Value to extend. + /// Number of significant bytes (1-4). + /// Sign-extended value, or original value if byteLen is invalid. + public static int SignExtend(int val, int byteLen) { + if (byteLen < 1 || byteLen >= 4) { + // invalid, or nothing to do + return val; + } + int shiftCount = (4 - byteLen) * 8; + return (val << shiftCount) >> shiftCount; + } } } diff --git a/SourceGen/SGTestData/20020-operand-formats b/SourceGen/SGTestData/20020-operand-formats new file mode 100644 index 0000000000000000000000000000000000000000..5543625fe8d46394c14f87178d23c6f5bedb8eb4 GIT binary patch literal 165 zcmaLJ!3}~y5Jushl>(*%2^TJuLI-3MkJE#oOC=cNhWv?Jk);STt__g)9bTgBDQPxM zht~%t^5joNb$n)Ox)&QHNfw7QYBXqZ!yOR|9(ZDf!ul6W6p4WYI}S7dbA{u1xQGLH+;$ literal 0 HcmV?d00001 diff --git a/SourceGen/SGTestData/20020-operand-formats.dis65 b/SourceGen/SGTestData/20020-operand-formats.dis65 new file mode 100644 index 0000000..d98206d --- /dev/null +++ b/SourceGen/SGTestData/20020-operand-formats.dis65 @@ -0,0 +1,487 @@ +### 6502bench SourceGen dis65 v1.0 ### +{ +"_ContentVersion":3, +"FileDataLength":165, +"FileDataCrc32":-689690654, +"ProjectProps":{ +"CpuName":"6502", +"IncludeUndocumentedInstr":false, +"TwoByteBrk":false, +"EntryFlags":32702671, +"AutoLabelStyle":"Simple", +"AnalysisParams":{ +"AnalyzeUncategorizedData":true, +"DefaultTextScanMode":"LowHighAscii", +"MinCharsForString":4, +"SeekNearbyTargets":true, +"SmartPlpHandling":true}, + +"PlatformSymbolFileIdentifiers":[], +"ExtensionScriptFileIdentifiers":[], +"ProjectSyms":{ +}}, + +"AddressMap":[{ +"Offset":0, +"Addr":4096}], +"TypeHints":[{ +"Low":0, +"High":0, +"Hint":"Code"}], +"StatusFlagOverrides":{ +}, + +"Comments":{ +}, + +"LongComments":{ +"-2147483647":{ +"Text":"Project file was edited to force ASCII formatting for some operands.", +"BoxMode":false, +"MaxWidth":80, +"BackgroundColor":0}}, + +"Notes":{ +}, + +"UserLabels":{ +"129":{ +"Label":"more_ascii", +"Value":4225, +"Source":"User", +"Type":"GlobalAddr", +"LabelAnno":"None"}, + +"93":{ +"Label":"skipdata", +"Value":4189, +"Source":"User", +"Type":"GlobalAddr", +"LabelAnno":"None"}}, + +"OperandFormats":{ +"10":{ +"Length":2, +"Format":"NumericLE", +"SubFormat":"Decimal", +"SymbolRef":null}, + +"12":{ +"Length":3, +"Format":"NumericLE", +"SubFormat":"Decimal", +"SymbolRef":null}, + +"15":{ +"Length":2, +"Format":"NumericLE", +"SubFormat":"Decimal", +"SymbolRef":null}, + +"17":{ +"Length":3, +"Format":"NumericLE", +"SubFormat":"Decimal", +"SymbolRef":null}, + +"20":{ +"Length":2, +"Format":"NumericLE", +"SubFormat":"Decimal", +"SymbolRef":null}, + +"22":{ +"Length":3, +"Format":"NumericLE", +"SubFormat":"Decimal", +"SymbolRef":null}, + +"25":{ +"Length":2, +"Format":"NumericLE", +"SubFormat":"Decimal", +"SymbolRef":null}, + +"27":{ +"Length":3, +"Format":"NumericLE", +"SubFormat":"Decimal", +"SymbolRef":null}, + +"30":{ +"Length":2, +"Format":"NumericLE", +"SubFormat":"Binary", +"SymbolRef":null}, + +"32":{ +"Length":3, +"Format":"NumericLE", +"SubFormat":"Binary", +"SymbolRef":null}, + +"35":{ +"Length":2, +"Format":"NumericLE", +"SubFormat":"Binary", +"SymbolRef":null}, + +"37":{ +"Length":3, +"Format":"NumericLE", +"SubFormat":"Binary", +"SymbolRef":null}, + +"43":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"Hex", +"SymbolRef":null}, + +"44":{ +"Length":2, +"Format":"NumericLE", +"SubFormat":"Hex", +"SymbolRef":null}, + +"46":{ +"Length":3, +"Format":"NumericLE", +"SubFormat":"Hex", +"SymbolRef":null}, + +"49":{ +"Length":4, +"Format":"NumericLE", +"SubFormat":"Hex", +"SymbolRef":null}, + +"53":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"Decimal", +"SymbolRef":null}, + +"54":{ +"Length":2, +"Format":"NumericLE", +"SubFormat":"Decimal", +"SymbolRef":null}, + +"56":{ +"Length":3, +"Format":"NumericLE", +"SubFormat":"Decimal", +"SymbolRef":null}, + +"59":{ +"Length":4, +"Format":"NumericLE", +"SubFormat":"Decimal", +"SymbolRef":null}, + +"63":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"Decimal", +"SymbolRef":null}, + +"64":{ +"Length":2, +"Format":"NumericLE", +"SubFormat":"Decimal", +"SymbolRef":null}, + +"66":{ +"Length":3, +"Format":"NumericLE", +"SubFormat":"Decimal", +"SymbolRef":null}, + +"69":{ +"Length":4, +"Format":"NumericLE", +"SubFormat":"Decimal", +"SymbolRef":null}, + +"73":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"Binary", +"SymbolRef":null}, + +"74":{ +"Length":2, +"Format":"NumericLE", +"SubFormat":"Binary", +"SymbolRef":null}, + +"76":{ +"Length":3, +"Format":"NumericLE", +"SubFormat":"Binary", +"SymbolRef":null}, + +"79":{ +"Length":4, +"Format":"NumericLE", +"SubFormat":"Binary", +"SymbolRef":null}, + +"83":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"Decimal", +"SymbolRef":null}, + +"84":{ +"Length":2, +"Format":"NumericLE", +"SubFormat":"Decimal", +"SymbolRef":null}, + +"86":{ +"Length":3, +"Format":"NumericLE", +"SubFormat":"Decimal", +"SymbolRef":null}, + +"89":{ +"Length":4, +"Format":"NumericLE", +"SubFormat":"Decimal", +"SymbolRef":null}, + +"93":{ +"Length":2, +"Format":"NumericLE", +"SubFormat":"Ascii", +"SymbolRef":null}, + +"95":{ +"Length":2, +"Format":"NumericLE", +"SubFormat":"Ascii", +"SymbolRef":null}, + +"97":{ +"Length":3, +"Format":"NumericLE", +"SubFormat":"Ascii", +"SymbolRef":null}, + +"100":{ +"Length":2, +"Format":"NumericLE", +"SubFormat":"Ascii", +"SymbolRef":null}, + +"102":{ +"Length":2, +"Format":"NumericLE", +"SubFormat":"Ascii", +"SymbolRef":null}, + +"104":{ +"Length":2, +"Format":"NumericLE", +"SubFormat":"Ascii", +"SymbolRef":null}, + +"106":{ +"Length":2, +"Format":"NumericLE", +"SubFormat":"Ascii", +"SymbolRef":null}, + +"108":{ +"Length":2, +"Format":"NumericLE", +"SubFormat":"Ascii", +"SymbolRef":null}, + +"110":{ +"Length":2, +"Format":"NumericLE", +"SubFormat":"Ascii", +"SymbolRef":null}, + +"112":{ +"Length":2, +"Format":"NumericLE", +"SubFormat":"Ascii", +"SymbolRef":null}, + +"114":{ +"Length":2, +"Format":"NumericLE", +"SubFormat":"Ascii", +"SymbolRef":null}, + +"116":{ +"Length":2, +"Format":"NumericLE", +"SubFormat":"HighAscii", +"SymbolRef":null}, + +"118":{ +"Length":2, +"Format":"NumericLE", +"SubFormat":"HighAscii", +"SymbolRef":null}, + +"120":{ +"Length":2, +"Format":"NumericLE", +"SubFormat":"HighAscii", +"SymbolRef":null}, + +"122":{ +"Length":2, +"Format":"NumericLE", +"SubFormat":"HighAscii", +"SymbolRef":null}, + +"124":{ +"Length":2, +"Format":"NumericLE", +"SubFormat":"HighAscii", +"SymbolRef":null}, + +"129":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"Ascii", +"SymbolRef":null}, + +"131":{ +"Length":2, +"Format":"NumericLE", +"SubFormat":"Hex", +"SymbolRef":null}, + +"134":{ +"Length":2, +"Format":"NumericLE", +"SubFormat":"Address", +"SymbolRef":null}, + +"136":{ +"Length":3, +"Format":"NumericLE", +"SubFormat":"Address", +"SymbolRef":null}, + +"139":{ +"Length":2, +"Format":"NumericBE", +"SubFormat":"Address", +"SymbolRef":null}, + +"141":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"Symbol", +"SymbolRef":{ +"Label":"more_ascii", +"Part":"Low"}}, + +"142":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"Symbol", +"SymbolRef":{ +"Label":"more_ascii", +"Part":"High"}}, + +"143":{ +"Length":2, +"Format":"NumericLE", +"SubFormat":"Address", +"SymbolRef":null}, + +"145":{ +"Length":3, +"Format":"NumericLE", +"SubFormat":"Address", +"SymbolRef":null}, + +"148":{ +"Length":4, +"Format":"NumericLE", +"SubFormat":"Address", +"SymbolRef":null}, + +"152":{ +"Length":2, +"Format":"NumericBE", +"SubFormat":"Address", +"SymbolRef":null}, + +"154":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"Ascii", +"SymbolRef":null}, + +"155":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"Ascii", +"SymbolRef":null}, + +"156":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"Ascii", +"SymbolRef":null}, + +"157":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"Ascii", +"SymbolRef":null}, + +"158":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"Ascii", +"SymbolRef":null}, + +"159":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"HighAscii", +"SymbolRef":null}, + +"160":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"HighAscii", +"SymbolRef":null}, + +"161":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"HighAscii", +"SymbolRef":null}, + +"162":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"HighAscii", +"SymbolRef":null}, + +"163":{ +"Length":1, +"Format":"NumericLE", +"SubFormat":"HighAscii", +"SymbolRef":null}}, + +"LvTables":{ +}, + +"Visualizations":[], +"VisualizationAnimations":[], +"VisualizationSets":{ +}} diff --git a/SourceGen/SGTestData/20022-operand-formats b/SourceGen/SGTestData/20022-operand-formats index 3dbfc61a2cd30d04a53ae59ce7175ea0c4da6241..e29863c66cd3810c0ad99e85cdcdbd257ecfb0a9 100644 GIT binary patch literal 62 tcmb36eaK*?i4X$)`@a%~*8lzY9~rOAU|4yAVP!_f`V0n!^(Pn@5&*Y8CFcMD literal 143 zcmb36{m5V`<60)h^~_9+n2ZKFMn)z^CT1XF!Nyvdu{2|C2E+Oc28NaLD-~8MtyEuG zx3Yd^!^-(97pz>ga{0=CEB_xdSee1F@&v=mjEsbghK!5`djWd^1_Ap50T5&mD2T4E Msnxmt`_JDs0C*EEasU7T diff --git a/SourceGen/SGTestData/20022-operand-formats.dis65 b/SourceGen/SGTestData/20022-operand-formats.dis65 index e23d6c5..bb1aacc 100644 --- a/SourceGen/SGTestData/20022-operand-formats.dis65 +++ b/SourceGen/SGTestData/20022-operand-formats.dis65 @@ -1,13 +1,13 @@ ### 6502bench SourceGen dis65 v1.0 ### { "_ContentVersion":3, -"FileDataLength":143, -"FileDataCrc32":-2044577818, +"FileDataLength":62, +"FileDataCrc32":946946401, "ProjectProps":{ "CpuName":"65816", "IncludeUndocumentedInstr":false, "TwoByteBrk":false, -"EntryFlags":33489103, +"EntryFlags":32702671, "AutoLabelStyle":"Simple", "AnalysisParams":{ "AnalyzeUncategorizedData":true, @@ -36,7 +36,7 @@ "LongComments":{ "-2147483647":{ -"Text":"Project file was edited for some ASCII operands.", +"Text":"Project file was edited to force ASCII formatting for some operands.", "BoxMode":false, "MaxWidth":80, "BackgroundColor":0}}, @@ -45,405 +45,89 @@ }, "UserLabels":{ -"63":{ -"Label":"skipdata", -"Value":4159, -"Source":"User", -"Type":"LocalOrGlobalAddr", -"LabelAnno":"None"}, - -"112":{ -"Label":"more_ascii", -"Value":4208, -"Source":"User", -"Type":"LocalOrGlobalAddr", -"LabelAnno":"None"}}, +}, "OperandFormats":{ -"4":{ -"Length":2, -"Format":"NumericLE", -"SubFormat":"Hex", -"SymbolRef":null}, - -"6":{ +"7":{ "Length":3, "Format":"NumericLE", -"SubFormat":"Hex", +"SubFormat":"Decimal", "SymbolRef":null}, -"9":{ -"Length":4, +"10":{ +"Length":3, "Format":"NumericLE", -"SubFormat":"Hex", +"SubFormat":"Decimal", "SymbolRef":null}, "13":{ -"Length":2, -"Format":"NumericLE", -"SubFormat":"Decimal", -"SymbolRef":null}, - -"15":{ "Length":3, "Format":"NumericLE", -"SubFormat":"Decimal", +"SubFormat":"Binary", "SymbolRef":null}, -"18":{ -"Length":4, +"19":{ +"Length":3, "Format":"NumericLE", "SubFormat":"Decimal", "SymbolRef":null}, "22":{ -"Length":2, +"Length":3, "Format":"NumericLE", -"SubFormat":"Binary", +"SubFormat":"Decimal", "SymbolRef":null}, -"24":{ +"25":{ "Length":3, "Format":"NumericLE", "SubFormat":"Binary", "SymbolRef":null}, -"27":{ +"32":{ "Length":4, "Format":"NumericLE", -"SubFormat":"Binary", -"SymbolRef":null}, - -"33":{ -"Length":1, -"Format":"NumericLE", -"SubFormat":"Hex", -"SymbolRef":null}, - -"34":{ -"Length":2, -"Format":"NumericLE", -"SubFormat":"Hex", +"SubFormat":"Decimal", "SymbolRef":null}, "36":{ -"Length":3, -"Format":"NumericLE", -"SubFormat":"Hex", -"SymbolRef":null}, - -"39":{ "Length":4, "Format":"NumericLE", -"SubFormat":"Hex", +"SubFormat":"Decimal", "SymbolRef":null}, -"43":{ -"Length":1, +"40":{ +"Length":4, "Format":"NumericLE", -"SubFormat":"Decimal", +"SubFormat":"Binary", "SymbolRef":null}, "44":{ -"Length":2, -"Format":"NumericLE", -"SubFormat":"Decimal", -"SymbolRef":null}, - -"46":{ "Length":3, "Format":"NumericLE", -"SubFormat":"Decimal", +"SubFormat":"Ascii", "SymbolRef":null}, -"49":{ -"Length":4, +"47":{ +"Length":3, "Format":"NumericLE", -"SubFormat":"Decimal", +"SubFormat":"HighAscii", +"SymbolRef":null}, + +"50":{ +"Length":3, +"Format":"NumericLE", +"SubFormat":"Ascii", "SymbolRef":null}, "53":{ -"Length":1, -"Format":"NumericLE", -"SubFormat":"Binary", -"SymbolRef":null}, - -"54":{ -"Length":2, -"Format":"NumericLE", -"SubFormat":"Binary", -"SymbolRef":null}, - -"56":{ -"Length":3, -"Format":"NumericLE", -"SubFormat":"Binary", -"SymbolRef":null}, - -"59":{ -"Length":4, -"Format":"NumericLE", -"SubFormat":"Binary", -"SymbolRef":null}, - -"63":{ -"Length":2, -"Format":"NumericLE", -"SubFormat":"Ascii", -"SymbolRef":null}, - -"65":{ -"Length":2, -"Format":"NumericLE", -"SubFormat":"Ascii", -"SymbolRef":null}, - -"67":{ -"Length":3, -"Format":"NumericLE", -"SubFormat":"Ascii", -"SymbolRef":null}, - -"70":{ "Length":4, "Format":"NumericLE", "SubFormat":"Ascii", "SymbolRef":null}, -"74":{ -"Length":2, -"Format":"NumericLE", -"SubFormat":"Ascii", -"SymbolRef":null}, - -"76":{ -"Length":2, -"Format":"NumericLE", -"SubFormat":"Ascii", -"SymbolRef":null}, - -"78":{ -"Length":2, -"Format":"NumericLE", -"SubFormat":"Ascii", -"SymbolRef":null}, - -"80":{ -"Length":2, -"Format":"NumericLE", -"SubFormat":"Ascii", -"SymbolRef":null}, - -"82":{ -"Length":2, -"Format":"NumericLE", -"SubFormat":"Ascii", -"SymbolRef":null}, - -"84":{ -"Length":2, -"Format":"NumericLE", -"SubFormat":"Ascii", -"SymbolRef":null}, - -"86":{ -"Length":2, -"Format":"NumericLE", -"SubFormat":"HighAscii", -"SymbolRef":null}, - -"88":{ -"Length":2, -"Format":"NumericLE", -"SubFormat":"HighAscii", -"SymbolRef":null}, - -"90":{ -"Length":2, -"Format":"NumericLE", -"SubFormat":"HighAscii", -"SymbolRef":null}, - -"92":{ -"Length":2, -"Format":"NumericLE", -"SubFormat":"HighAscii", -"SymbolRef":null}, - -"94":{ -"Length":2, -"Format":"NumericLE", -"SubFormat":"HighAscii", -"SymbolRef":null}, - -"96":{ -"Length":2, -"Format":"NumericLE", -"SubFormat":"HighAscii", -"SymbolRef":null}, - -"98":{ -"Length":2, -"Format":"NumericLE", -"SubFormat":"HighAscii", -"SymbolRef":null}, - -"100":{ -"Length":2, -"Format":"NumericLE", -"SubFormat":"Ascii", -"SymbolRef":null}, - -"102":{ -"Length":3, -"Format":"NumericLE", -"SubFormat":"Ascii", -"SymbolRef":null}, - -"105":{ -"Length":3, -"Format":"NumericLE", -"SubFormat":"HighAscii", -"SymbolRef":null}, - -"108":{ -"Length":3, -"Format":"NumericLE", -"SubFormat":"Ascii", -"SymbolRef":null}, - -"112":{ -"Length":1, -"Format":"NumericLE", -"SubFormat":"Ascii", -"SymbolRef":null}, - -"113":{ -"Length":1, -"Format":"NumericLE", -"SubFormat":"HighAscii", -"SymbolRef":null}, - -"114":{ -"Length":2, -"Format":"NumericLE", -"SubFormat":"Ascii", -"SymbolRef":null}, - -"117":{ -"Length":2, -"Format":"NumericLE", -"SubFormat":"Address", -"SymbolRef":null}, - -"119":{ -"Length":3, -"Format":"NumericLE", -"SubFormat":"Address", -"SymbolRef":null}, - -"122":{ -"Length":2, -"Format":"NumericBE", -"SubFormat":"Address", -"SymbolRef":null}, - -"124":{ -"Length":1, -"Format":"NumericLE", -"SubFormat":"Symbol", -"SymbolRef":{ -"Label":"more_ascii", -"Part":"Low"}}, - -"125":{ -"Length":1, -"Format":"NumericLE", -"SubFormat":"Symbol", -"SymbolRef":{ -"Label":"more_ascii", -"Part":"High"}}, - -"126":{ -"Length":2, -"Format":"NumericLE", -"SubFormat":"Symbol", -"SymbolRef":{ -"Label":"more_ascii", -"Part":"Low"}}, - -"128":{ -"Length":3, -"Format":"NumericLE", -"SubFormat":"Symbol", -"SymbolRef":{ -"Label":"more_ascii", -"Part":"Low"}}, - -"131":{ -"Length":2, -"Format":"NumericBE", -"SubFormat":"Symbol", -"SymbolRef":{ -"Label":"more_ascii", -"Part":"Low"}}, - -"133":{ -"Length":1, -"Format":"NumericLE", -"SubFormat":"Ascii", -"SymbolRef":null}, - -"134":{ -"Length":1, -"Format":"NumericLE", -"SubFormat":"Ascii", -"SymbolRef":null}, - -"135":{ -"Length":1, -"Format":"NumericLE", -"SubFormat":"Ascii", -"SymbolRef":null}, - -"136":{ -"Length":1, -"Format":"NumericLE", -"SubFormat":"Ascii", -"SymbolRef":null}, - -"137":{ -"Length":1, -"Format":"NumericLE", -"SubFormat":"Ascii", -"SymbolRef":null}, - -"138":{ -"Length":1, -"Format":"NumericLE", -"SubFormat":"HighAscii", -"SymbolRef":null}, - -"139":{ -"Length":1, -"Format":"NumericLE", -"SubFormat":"HighAscii", -"SymbolRef":null}, - -"140":{ -"Length":1, -"Format":"NumericLE", -"SubFormat":"HighAscii", -"SymbolRef":null}, - -"141":{ -"Length":1, -"Format":"NumericLE", -"SubFormat":"HighAscii", -"SymbolRef":null}, - -"142":{ -"Length":1, +"57":{ +"Length":4, "Format":"NumericLE", "SubFormat":"HighAscii", "SymbolRef":null}}, diff --git a/SourceGen/SGTestData/Expected/20020-operand-formats_64tass.S b/SourceGen/SGTestData/Expected/20020-operand-formats_64tass.S new file mode 100644 index 0000000..873384a --- /dev/null +++ b/SourceGen/SGTestData/Expected/20020-operand-formats_64tass.S @@ -0,0 +1,90 @@ +;Project file was edited to force ASCII formatting for some operands. + .cpu "6502" + .enc sg_hiascii + .cdef $20,$7e,$a0 + .enc sg_ascii + .cdef $20,$7e,$20 +* = $1000 + lda $01 + lda $0102 + lda $fe + lda $feff + lda 1 + lda 258 + lda 254 + lda 65279 + lda 1 + lda 258 + lda 254 + lda 65279 + lda %00000001 + lda %0000000100000010 + lda %11111110 + lda %1111111011111111 + jmp skipdata + + .byte $01 + .word $0201 + .long $030201 + .dword $04030201 + .byte 1 + .word 513 + .long 197121 + .dword 67305985 + .byte 1 + .word 513 + .long 197121 + .dword 67305985 + .byte %00000001 + .word %0000001000000001 + .long %000000110000001000000001 + .dword %00000100000000110000001000000001 + .byte 255 + .word 65279 + .long 16645887 + .dword 4244504319 + +skipdata lda #'h' + lda 'h' + lda @w'h' + lda #$1f + lda #' ' + lda #'"' + lda #$27 + lda #'~' + lda #$7f + lda #$80 + lda #$9f + lda #' ' | $80 + lda #'"' | $80 + lda #$a7 + lda #'~' | $80 + lda #$ff + jmp L10A4 + +more_ascii .byte 'h' + .byte $80 + .word $6868 + .byte $80 + .word skipdata + .long skipdata + .byte $10,$5d + .byte more_ascii + .word more_ascii + .long more_ascii + .dword more_ascii + .byte $10,$81 + .byte '[' + .byte '{' + .byte '|' + .byte '}' + .byte ',' + .byte '[' | $80 + .byte '{' | $80 + .byte '|' | $80 + .byte '}' | $80 + .byte ',' | $80 + +L10A4 rts + diff --git a/SourceGen/SGTestData/Expected/20020-operand-formats_Merlin32.S b/SourceGen/SGTestData/Expected/20020-operand-formats_Merlin32.S new file mode 100644 index 0000000..198ab54 --- /dev/null +++ b/SourceGen/SGTestData/Expected/20020-operand-formats_Merlin32.S @@ -0,0 +1,85 @@ +;Project file was edited to force ASCII formatting for some operands. + org $1000 + lda $01 + lda $0102 + lda $fe + lda $feff + lda 1 + lda 258 + lda 254 + lda 65279 + lda 1 + lda 258 + lda 254 + lda 65279 + lda %00000001 + lda %0000000100000010 + lda %11111110 + lda %1111111011111111 + jmp skipdata + + dfb $01 + dw $0201 + adr $030201 + adrl $04030201 + dfb 1 + dw 513 + adr 197121 + adrl 67305985 + dfb 1 + dw 513 + adr 197121 + adrl 67305985 + dfb %00000001 + dw %0000001000000001 + adr %000000110000001000000001 + adrl %00000100000000110000001000000001 + dfb 255 + dw 65279 + adr 16645887 + adrl 4244504319 + +skipdata lda #'h' + lda 'h' + lda: 'h' + lda #$1f + lda #' ' + lda #'"' + lda #$27 + lda #'~' + lda #$7f + lda #$80 + lda #$9f + lda #" " + lda #$a2 + lda #"'" + lda #"~" + lda #$ff + jmp L10A4 + +more_ascii dfb 'h' + dfb $80 + dw $6868 + dfb $80 + dw skipdata + adr skipdata + ddb skipdata + dfb more_ascii + dw more_ascii + adr more_ascii + adrl more_ascii + ddb more_ascii + dfb '[' + dfb $7b + dfb '|' + dfb $7d + dfb ',' + dfb "[" + dfb $fb + dfb "|" + dfb $fd + dfb "," + +L10A4 rts + diff --git a/SourceGen/SGTestData/Expected/20020-operand-formats_acme.S b/SourceGen/SGTestData/Expected/20020-operand-formats_acme.S new file mode 100644 index 0000000..68d2dc9 --- /dev/null +++ b/SourceGen/SGTestData/Expected/20020-operand-formats_acme.S @@ -0,0 +1,86 @@ +;Project file was edited to force ASCII formatting for some operands. + !cpu 6502 +* = $1000 + lda $01 + lda $0102 + lda $fe + lda $feff + lda 1 + lda 258 + lda 254 + lda 65279 + lda 1 + lda 258 + lda 254 + lda 65279 + lda %00000001 + lda %0000000100000010 + lda %11111110 + lda %1111111011111111 + jmp skipdata + + !byte $01 + !word $0201 + !24 $030201 + !32 $04030201 + !byte 1 + !word 513 + !24 197121 + !32 67305985 + !byte 1 + !word 513 + !24 197121 + !32 67305985 + !byte %00000001 + !word %0000001000000001 + !24 %000000110000001000000001 + !32 %00000100000000110000001000000001 + !byte 255 + !word 65279 + !24 16645887 + !32 4244504319 + +skipdata lda #'h' + lda 'h' + lda+2 'h' + lda #$1f + lda #' ' + lda #'"' + lda #$27 + lda #'~' + lda #$7f + lda #$80 + lda #$9f + lda #' ' | $80 + lda #'"' | $80 + lda #$a7 + lda #'~' | $80 + lda #$ff + jmp L10A4 + +more_ascii !byte 'h' + !byte $80 + !word $6868 + !byte $80 + !word skipdata + !24 skipdata + !byte $10,$5d + !byte more_ascii + !word more_ascii + !24 more_ascii + !32 more_ascii + !byte $10,$81 + !byte '[' + !byte '{' + !byte '|' + !byte '}' + !byte ',' + !byte '[' | $80 + !byte '{' | $80 + !byte '|' | $80 + !byte '}' | $80 + !byte ',' | $80 + +L10A4 rts + diff --git a/SourceGen/SGTestData/Expected/20020-operand-formats_cc65.S b/SourceGen/SGTestData/Expected/20020-operand-formats_cc65.S new file mode 100644 index 0000000..c967835 --- /dev/null +++ b/SourceGen/SGTestData/Expected/20020-operand-formats_cc65.S @@ -0,0 +1,87 @@ +;Project file was edited to force ASCII formatting for some operands. + .setcpu "6502" +; .segment "SEG000" + .org $1000 + lda $01 + lda $0102 + lda $fe + lda $feff + lda 1 + lda 258 + lda 254 + lda 65279 + lda 1 + lda 258 + lda 254 + lda 65279 + lda %00000001 + lda %0000000100000010 + lda %11111110 + lda %1111111011111111 + jmp skipdata + + .byte $01 + .word $0201 + .faraddr $030201 + .dword $04030201 + .byte 1 + .word 513 + .faraddr 197121 + .dword 67305985 + .byte 1 + .word 513 + .faraddr 197121 + .dword 67305985 + .byte %00000001 + .word %0000001000000001 + .faraddr %000000110000001000000001 + .dword %00000100000000110000001000000001 + .byte 255 + .word 65279 + .faraddr 16645887 + .dword 4244504319 + +skipdata: lda #'h' + lda 'h' + lda a:'h' + lda #$1f + lda #' ' + lda #'"' + lda #$27 + lda #'~' + lda #$7f + lda #$80 + lda #$9f + lda #' ' | $80 + lda #'"' | $80 + lda #$a7 + lda #'~' | $80 + lda #$ff + jmp L10A4 + +more_ascii: .byte 'h' + .byte $80 + .word $6868 + .byte $80 + .word skipdata + .faraddr skipdata + .dbyt skipdata + .byte more_ascii + .word more_ascii + .faraddr more_ascii + .dword more_ascii + .dbyt more_ascii + .byte '[' + .byte '{' + .byte '|' + .byte '}' + .byte ',' + .byte '[' | $80 + .byte '{' | $80 + .byte '|' | $80 + .byte '}' | $80 + .byte ',' | $80 + +L10A4: rts + diff --git a/SourceGen/SGTestData/Expected/20020-operand-formats_cc65.cfg b/SourceGen/SGTestData/Expected/20020-operand-formats_cc65.cfg new file mode 100644 index 0000000..b8edb7a --- /dev/null +++ b/SourceGen/SGTestData/Expected/20020-operand-formats_cc65.cfg @@ -0,0 +1,11 @@ +# 6502bench SourceGen generated linker script for 20020-operand-formats +MEMORY { + MAIN: file=%O, start=%S, size=65536; +# MEM000: file=%O, start=$1000, size=165; +} +SEGMENTS { + CODE: load=MAIN, type=rw; +# SEG000: load=MEM000, type=rw; +} +FEATURES {} +SYMBOLS {} diff --git a/SourceGen/SGTestData/Expected/20022-operand-formats_64tass.S b/SourceGen/SGTestData/Expected/20022-operand-formats_64tass.S index 59e464a..8186a23 100644 --- a/SourceGen/SGTestData/Expected/20022-operand-formats_64tass.S +++ b/SourceGen/SGTestData/Expected/20022-operand-formats_64tass.S @@ -1,4 +1,4 @@ -;Project file was edited for some ASCII operands. +;Project file was edited to force ASCII formatting for some operands. .cpu "65816" .enc sg_hiascii .cdef $20,$7e,$a0 @@ -9,75 +9,25 @@ .xs clc xce - sep #$30 - lda $01 - lda $0102 - lda $010203 - lda 1 - lda 258 - lda 66051 - lda %00000001 - lda %0000000100000010 - lda %000000010000001000000011 - bra skipdata - - .byte $01 - .word $0201 - .long $030201 - .dword $04030201 - .byte 1 - .word 513 - .long 197121 - .dword 67305985 - .byte %00000001 - .word %0000001000000001 - .long %000000110000001000000001 - .dword %00000100000000110000001000000001 - -skipdata lda #'h' - lda 'h' - lda @w'h' - lda @l'h' - lda #$1f - lda #' ' - lda #'"' - lda #$27 - lda #'~' - lda #$7f - lda #$80 - lda #$9f - lda #' ' | $80 - lda #'"' | $80 - lda #$a7 - lda #'~' | $80 - lda #$ff - rep #'0' + rep #$30 .al .xl + lda #$1234 + lda #4660 + lda #4660 + lda #%0001001000110100 + lda #$fffe + lda #65534 + lda #65534 + lda #%1111111111111110 + lda $fffefd + lda 16776957 + lda 16776957 + lda %111111111111111011111101 lda #'h' lda #'H' | $80 lda #$6868 + lda @l'h' + lda @l'H' | $80 rts -_more_ascii .byte 'h' - .byte $80 - .word $6868 - .byte $80 - .word skipdata - .long skipdata - .byte $10,$3f - .byte <_more_ascii - .byte >_more_ascii - .word _more_ascii - .long _more_ascii - .byte $10,$70 - .byte '[' - .byte '{' - .byte '|' - .byte '}' - .byte ',' - .byte '[' | $80 - .byte '{' | $80 - .byte '|' | $80 - .byte '}' | $80 - .byte ',' | $80 diff --git a/SourceGen/SGTestData/Expected/20022-operand-formats_Merlin32.S b/SourceGen/SGTestData/Expected/20022-operand-formats_Merlin32.S index 3727e6a..348136d 100644 --- a/SourceGen/SGTestData/Expected/20022-operand-formats_Merlin32.S +++ b/SourceGen/SGTestData/Expected/20022-operand-formats_Merlin32.S @@ -1,75 +1,25 @@ -;Project file was edited for some ASCII operands. +;Project file was edited to force ASCII formatting for some operands. org $1000 clc xce - sep #$30 - lda $01 - lda $0102 - ldal $010203 - lda 1 - lda 258 - ldal 66051 - lda %00000001 - lda %0000000100000010 - ldal %000000010000001000000011 - bra skipdata - - dfb $01 - dw $0201 - adr $030201 - adrl $04030201 - dfb 1 - dw 513 - adr 197121 - adrl 67305985 - dfb %00000001 - dw %0000001000000001 - adr %000000110000001000000001 - adrl %00000100000000110000001000000001 - -skipdata lda #'h' - lda 'h' - lda: 'h' - ldal 'h' - lda #$1f - lda #' ' - lda #'"' - lda #$27 - lda #'~' - lda #$7f - lda #$80 - lda #$9f - lda #" " - lda #$a2 - lda #"'" - lda #"~" - lda #$ff - rep #'0' + rep #$30 mx %00 + lda #$1234 + lda #4660 + lda #4660 + lda #%0001001000110100 + lda #$fffe + lda #65534 + lda #65534 + lda #%1111111111111110 + ldal $fffefd + ldal 16776957 + ldal 16776957 + ldal %111111111111111011111101 lda #'h' lda #"H" lda #$6868 + ldal 'h' + ldal "H" rts -:more_ascii dfb 'h' - dfb $80 - dw $6868 - dfb $80 - dw skipdata - adr skipdata - ddb skipdata - dfb <:more_ascii - dfb >:more_ascii - dw :more_ascii - adr :more_ascii - ddb :more_ascii - dfb '[' - dfb $7b - dfb '|' - dfb $7d - dfb ',' - dfb "[" - dfb $fb - dfb "|" - dfb $fd - dfb "," diff --git a/SourceGen/SGTestData/Expected/20022-operand-formats_acme.S b/SourceGen/SGTestData/Expected/20022-operand-formats_acme.S index 331a3db..4af5457 100644 --- a/SourceGen/SGTestData/Expected/20022-operand-formats_acme.S +++ b/SourceGen/SGTestData/Expected/20022-operand-formats_acme.S @@ -1,79 +1,29 @@ -;Project file was edited for some ASCII operands. +;Project file was edited to force ASCII formatting for some operands. !cpu 65816 * = $1000 !as !rs clc xce - sep #$30 - lda $01 - lda $0102 - lda+3 $010203 - lda 1 - lda 258 - lda+3 66051 - lda %00000001 - lda %0000000100000010 - lda+3 %000000010000001000000011 - bra skipdata - - !byte $01 - !word $0201 - !24 $030201 - !32 $04030201 - !byte 1 - !word 513 - !24 197121 - !32 67305985 - !byte %00000001 - !word %0000001000000001 - !24 %000000110000001000000001 - !32 %00000100000000110000001000000001 - -skipdata lda #'h' - lda 'h' - lda+2 'h' - lda+3 'h' - lda #$1f - lda #' ' - lda #'"' - lda #$27 - lda #'~' - lda #$7f - lda #$80 - lda #$9f - lda #' ' | $80 - lda #'"' | $80 - lda #$a7 - lda #'~' | $80 - lda #$ff - rep #'0' + rep #$30 !al !rl + lda #$1234 + lda #4660 + lda #4660 + lda #%0001001000110100 + lda #$fffe + lda #65534 + lda #65534 + lda #%1111111111111110 + lda+3 $fffefd + lda+3 16776957 + lda+3 16776957 + lda+3 %111111111111111011111101 lda #'h' lda #'H' | $80 lda #$6868 + lda+3 'h' + lda+3 'H' | $80 rts -@more_ascii !byte 'h' - !byte $80 - !word $6868 - !byte $80 - !word skipdata - !24 skipdata - !byte $10,$3f - !byte <@more_ascii - !byte >@more_ascii - !word @more_ascii - !24 @more_ascii - !byte $10,$70 - !byte '[' - !byte '{' - !byte '|' - !byte '}' - !byte ',' - !byte '[' | $80 - !byte '{' | $80 - !byte '|' | $80 - !byte '}' | $80 - !byte ',' | $80 diff --git a/SourceGen/SGTestData/Expected/20022-operand-formats_cc65.S b/SourceGen/SGTestData/Expected/20022-operand-formats_cc65.S index 8eef614..4899dd9 100644 --- a/SourceGen/SGTestData/Expected/20022-operand-formats_cc65.S +++ b/SourceGen/SGTestData/Expected/20022-operand-formats_cc65.S @@ -1,4 +1,4 @@ -;Project file was edited for some ASCII operands. +;Project file was edited to force ASCII formatting for some operands. .setcpu "65816" ; .segment "SEG000" .org $1000 @@ -6,75 +6,25 @@ .i8 clc xce - sep #$30 - lda $01 - lda $0102 - lda $010203 - lda 1 - lda 258 - lda 66051 - lda %00000001 - lda %0000000100000010 - lda %000000010000001000000011 - bra skipdata - - .byte $01 - .word $0201 - .faraddr $030201 - .dword $04030201 - .byte 1 - .word 513 - .faraddr 197121 - .dword 67305985 - .byte %00000001 - .word %0000001000000001 - .faraddr %000000110000001000000001 - .dword %00000100000000110000001000000001 - -skipdata: lda #'h' - lda 'h' - lda a:'h' - lda f:'h' - lda #$1f - lda #' ' - lda #'"' - lda #$27 - lda #'~' - lda #$7f - lda #$80 - lda #$9f - lda #' ' | $80 - lda #'"' | $80 - lda #$a7 - lda #'~' | $80 - lda #$ff - rep #'0' + rep #$30 .a16 .i16 + lda #$1234 + lda #4660 + lda #4660 + lda #%0001001000110100 + lda #$fffe + lda #65534 + lda #65534 + lda #%1111111111111110 + lda $fffefd + lda 16776957 + lda 16776957 + lda %111111111111111011111101 lda #'h' lda #'H' | $80 lda #$6868 + lda f:'h' + lda f:'H' | $80 rts -@more_ascii: .byte 'h' - .byte $80 - .word $6868 - .byte $80 - .word skipdata - .faraddr skipdata - .dbyt skipdata - .byte <@more_ascii - .byte >@more_ascii - .word @more_ascii - .faraddr @more_ascii - .dbyt @more_ascii - .byte '[' - .byte '{' - .byte '|' - .byte '}' - .byte ',' - .byte '[' | $80 - .byte '{' | $80 - .byte '|' | $80 - .byte '}' | $80 - .byte ',' | $80 diff --git a/SourceGen/SGTestData/Expected/20022-operand-formats_cc65.cfg b/SourceGen/SGTestData/Expected/20022-operand-formats_cc65.cfg index 676945d..408a655 100644 --- a/SourceGen/SGTestData/Expected/20022-operand-formats_cc65.cfg +++ b/SourceGen/SGTestData/Expected/20022-operand-formats_cc65.cfg @@ -1,7 +1,7 @@ # 6502bench SourceGen generated linker script for 20022-operand-formats MEMORY { MAIN: file=%O, start=%S, size=65536; -# MEM000: file=%O, start=$1000, size=143; +# MEM000: file=%O, start=$1000, size=62; } SEGMENTS { CODE: load=MAIN, type=rw; diff --git a/SourceGen/SGTestData/Source/20020-operand-formats.S b/SourceGen/SGTestData/Source/20020-operand-formats.S new file mode 100644 index 0000000..06c0b42 --- /dev/null +++ b/SourceGen/SGTestData/Source/20020-operand-formats.S @@ -0,0 +1,99 @@ +; Copyright 2018 faddenSoft. All Rights Reserved. +; See the LICENSE.txt file for distribution terms (Apache 2.0). +; +; Basic tests for 6502. +; +; Assembler: Merlin 32 + + org $1000 + +; Basic operand formats. Show first set as hex, second as decimal, +; third as sign-extended decimal, fourth as binary. + lda $01 + lda $0102 + lda $fe + lda $feff + + lda $01 + lda $0102 + lda $fe + lda $feff + + lda $01 + lda $0102 + lda $fe + lda $feff + + lda $01 + lda $0102 + lda $fe + lda $feff + + jmp :skipdata + +; Now hex/decimal/sdec/binary, each with .dd1/.dd2/.dd3/.dd4 + hex 01010201020301020304 + hex 01010201020301020304 + hex 01010201020301020304 + hex 01010201020301020304 + +; bonus round for sdec + hex fffffefffefdfffefdfc + +:skipdata + +; Convert these to ASCII; requires editing file. The code generator +; should display some of these as hex. + lda #$68 + lda $68 + lda: $0068 + + 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 + + jmp end + +; 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 + adrl :ascii + dfb >:ascii,:ascii ;format as big-endian symbol + +; Merlin 1.0 has trouble with "DFB '{'". Test it and the neighbors. + dfb '[' + dfb $7b + dfb $7c + dfb $7d + dfb ',' + dfb "[" + dfb $fb + dfb $fc + dfb $fd + dfb "," + +end rts diff --git a/SourceGen/SGTestData/Source/20022-operand-formats.S b/SourceGen/SGTestData/Source/20022-operand-formats.S index c8eba10..dede49a 100644 --- a/SourceGen/SGTestData/Source/20022-operand-formats.S +++ b/SourceGen/SGTestData/Source/20022-operand-formats.S @@ -1,97 +1,40 @@ ; Copyright 2018 faddenSoft. All Rights Reserved. ; See the LICENSE.txt file for distribution terms (Apache 2.0). ; +; Extended tests for 65816. +; ; Assembler: Merlin 32 org $1000 -; 65816 with short regs +; 65816 with long 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 +; hex/dec/sdec/bin + lda #$1234 + lda #$1234 + lda #$1234 + lda #$1234 + + lda #$fffe + lda #$fffe + lda #$fffe + lda #$fffe + + ldal $fffefd + ldal $fffefd + ldal $fffefd + ldal $fffefd + +; ASCII + lda #$0068 ;'h' + lda #$00c8 ;"h" lda #$6868 + ldal $000068 ;'h' + ldal $0000c8 ;"h" + 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 - -; Merlin 1.0 has trouble with "DFB '{'". - dfb '[' - dfb $7b - dfb $7c - dfb $7d - dfb ',' - dfb "[" - dfb $fb - dfb $fc - dfb $fd - dfb ","