added .IFM740 and .PM470, and while at it also .IFP02X and .P02X. Updated regression test to use these
This commit is contained in:
@@ -394,6 +394,16 @@ void DoConditionals (void)
|
||||
CalcOverallIfCond ();
|
||||
break;
|
||||
|
||||
case TOK_IFP02X:
|
||||
D = AllocIf (".IFP02X", 1);
|
||||
NextTok ();
|
||||
if (IfCond) {
|
||||
SetIfCond (D, GetCPU() == CPU_6502X);
|
||||
}
|
||||
ExpectSep ();
|
||||
CalcOverallIfCond ();
|
||||
break;
|
||||
|
||||
case TOK_IFP4510:
|
||||
D = AllocIf (".IFP4510", 1);
|
||||
NextTok ();
|
||||
@@ -495,6 +505,7 @@ int CheckConditionals (void)
|
||||
case TOK_IFNDEF:
|
||||
case TOK_IFNREF:
|
||||
case TOK_IFP02:
|
||||
case TOK_IFP02X:
|
||||
case TOK_IFP4510:
|
||||
case TOK_IFP816:
|
||||
case TOK_IFPC02:
|
||||
|
||||
@@ -1562,6 +1562,14 @@ static void DoP02 (void)
|
||||
|
||||
|
||||
|
||||
static void DoP02X (void)
|
||||
/* Switch to 6502X CPU */
|
||||
{
|
||||
SetCPU (CPU_6502X);
|
||||
}
|
||||
|
||||
|
||||
|
||||
static void DoPC02 (void)
|
||||
/* Switch to 65C02 CPU */
|
||||
{
|
||||
@@ -1594,6 +1602,14 @@ static void DoPDTV (void)
|
||||
|
||||
|
||||
|
||||
static void DoPM740 (void)
|
||||
/* Switch to M740 CPU */
|
||||
{
|
||||
SetCPU (CPU_M740);
|
||||
}
|
||||
|
||||
|
||||
|
||||
static void DoPageLength (void)
|
||||
/* Set the page length for the listing */
|
||||
{
|
||||
@@ -2057,70 +2073,72 @@ struct CtrlDesc {
|
||||
void (*Handler) (void); /* Command handler */
|
||||
};
|
||||
|
||||
/* NOTE: .AND, .BITAND, .BITNOT, .BITOR, .BITXOR, .MOD, .NOT, .OR, .SHL, .SHR
|
||||
and .XOR do NOT go into this table */
|
||||
#define PSEUDO_COUNT (sizeof (CtrlCmdTab) / sizeof (CtrlCmdTab [0]))
|
||||
static CtrlDesc CtrlCmdTab [] = {
|
||||
{ ccNone, DoA16 },
|
||||
{ ccNone, DoA8 },
|
||||
{ ccNone, DoA16 }, /* .A16 */
|
||||
{ ccNone, DoA8 }, /* .A8 */
|
||||
{ ccNone, DoAddr }, /* .ADDR */
|
||||
{ ccNone, DoUnexpected }, /* .ADDRSIZE */
|
||||
{ ccNone, DoAlign },
|
||||
{ ccNone, DoASCIIZ },
|
||||
{ ccNone, DoAlign }, /* .ALIGN */
|
||||
{ ccNone, DoASCIIZ }, /* .ASCIIZ */
|
||||
{ ccNone, DoUnexpected }, /* .ASIZE */
|
||||
{ ccNone, DoAssert },
|
||||
{ ccNone, DoAutoImport },
|
||||
{ ccNone, DoAssert }, /* .ASSERT */
|
||||
{ ccNone, DoAutoImport }, /* .AUTOIMPORT */
|
||||
{ ccNone, DoUnexpected }, /* .BANK */
|
||||
{ ccNone, DoUnexpected }, /* .BANKBYTE */
|
||||
{ ccNone, DoBankBytes },
|
||||
{ ccNone, DoBankBytes }, /* .BANKBYTES */
|
||||
{ ccNone, DoUnexpected }, /* .BLANK */
|
||||
{ ccNone, DoBss },
|
||||
{ ccNone, DoByte },
|
||||
{ ccNone, DoCase },
|
||||
{ ccNone, DoCharMap },
|
||||
{ ccNone, DoCode },
|
||||
{ ccNone, DoBss }, /* .BSS */
|
||||
{ ccNone, DoByte }, /* .BYT, .BYTE */
|
||||
{ ccNone, DoCase }, /* .CASE */
|
||||
{ ccNone, DoCharMap }, /* .CHARMAP */
|
||||
{ ccNone, DoCode }, /* .CODE */
|
||||
{ ccNone, DoUnexpected, }, /* .CONCAT */
|
||||
{ ccNone, DoConDes },
|
||||
{ ccNone, DoConDes }, /* .CONDES */
|
||||
{ ccNone, DoUnexpected }, /* .CONST */
|
||||
{ ccNone, DoConstructor },
|
||||
{ ccNone, DoConstructor }, /* .CONSTRUCTOR */
|
||||
{ ccNone, DoUnexpected }, /* .CPU */
|
||||
{ ccNone, DoData },
|
||||
{ ccNone, DoDbg, },
|
||||
{ ccNone, DoDByt },
|
||||
{ ccNone, DoDebugInfo },
|
||||
{ ccKeepToken, DoDefine },
|
||||
{ ccNone, DoData }, /* .DATA */
|
||||
{ ccNone, DoDbg, }, /* .DBG */
|
||||
{ ccNone, DoDByt }, /* .DBYT */
|
||||
{ ccNone, DoDebugInfo }, /* .DEBUGINFO */
|
||||
{ ccKeepToken, DoDefine }, /* .DEF, .DEFINE */
|
||||
{ ccNone, DoUnexpected }, /* .DEFINED */
|
||||
{ ccNone, DoUnexpected }, /* .DEFINEDMACRO */
|
||||
{ ccNone, DoDelMac },
|
||||
{ ccNone, DoDestructor },
|
||||
{ ccNone, DoDWord },
|
||||
{ ccNone, DoDelMac }, /* .DELMAC, .DELMACRO */
|
||||
{ ccNone, DoDestructor }, /* .DESTRUCTOR */
|
||||
{ ccNone, DoDWord }, /* .DWORD */
|
||||
{ ccKeepToken, DoConditionals }, /* .ELSE */
|
||||
{ ccKeepToken, DoConditionals }, /* .ELSEIF */
|
||||
{ ccKeepToken, DoEnd },
|
||||
{ ccKeepToken, DoEnd }, /* .END */
|
||||
{ ccNone, DoUnexpected }, /* .ENDENUM */
|
||||
{ ccKeepToken, DoConditionals }, /* .ENDIF */
|
||||
{ ccNone, DoUnexpected }, /* .ENDMACRO */
|
||||
{ ccNone, DoEndProc },
|
||||
{ ccNone, DoUnexpected }, /* .ENDREPEAT */
|
||||
{ ccNone, DoEndScope },
|
||||
{ ccNone, DoUnexpected }, /* .ENDMAC, .ENDMACRO */
|
||||
{ ccNone, DoEndProc }, /* .ENDPROC */
|
||||
{ ccNone, DoUnexpected }, /* .ENDREP, .ENDREPEAT */
|
||||
{ ccNone, DoEndScope }, /* .ENDSCOPE */
|
||||
{ ccNone, DoUnexpected }, /* .ENDSTRUCT */
|
||||
{ ccNone, DoUnexpected }, /* .ENDUNION */
|
||||
{ ccNone, DoEnum },
|
||||
{ ccNone, DoError },
|
||||
{ ccNone, DoExitMacro },
|
||||
{ ccNone, DoExport },
|
||||
{ ccNone, DoExportZP },
|
||||
{ ccNone, DoFarAddr },
|
||||
{ ccNone, DoFatal },
|
||||
{ ccNone, DoFeature },
|
||||
{ ccNone, DoFileOpt },
|
||||
{ ccNone, DoForceImport },
|
||||
{ ccNone, DoEnum }, /* .ENUM */
|
||||
{ ccNone, DoError }, /* .ERROR */
|
||||
{ ccNone, DoExitMacro }, /* .EXITMAC, .EXITMACRO */
|
||||
{ ccNone, DoExport }, /* .EXPORT */
|
||||
{ ccNone, DoExportZP }, /* .EXPORTZP */
|
||||
{ ccNone, DoFarAddr }, /* .FARADDR */
|
||||
{ ccNone, DoFatal }, /* .FATAL */
|
||||
{ ccNone, DoFeature }, /* .FEATURE */
|
||||
{ ccNone, DoFileOpt }, /* .FOPT, .FILEOPT */
|
||||
{ ccNone, DoForceImport }, /* .FORCEIMPORT */
|
||||
{ ccNone, DoUnexpected }, /* .FORCEWORD */
|
||||
{ ccNone, DoGlobal },
|
||||
{ ccNone, DoGlobalZP },
|
||||
{ ccNone, DoGlobal }, /* .GLOBAL */
|
||||
{ ccNone, DoGlobalZP }, /* .GLOBALZP */
|
||||
{ ccNone, DoUnexpected }, /* .HIBYTE */
|
||||
{ ccNone, DoHiBytes },
|
||||
{ ccNone, DoHiBytes }, /* .HIBYTES */
|
||||
{ ccNone, DoUnexpected }, /* .HIWORD */
|
||||
{ ccNone, DoI16 },
|
||||
{ ccNone, DoI8 },
|
||||
{ ccNone, DoI16 }, /* .I16 */
|
||||
{ ccNone, DoI8 }, /* .I8 */
|
||||
{ ccNone, DoUnexpected }, /* .IDENT */
|
||||
{ ccKeepToken, DoConditionals }, /* .IF */
|
||||
{ ccKeepToken, DoConditionals }, /* .IFBLANK */
|
||||
@@ -2131,6 +2149,7 @@ static CtrlDesc CtrlCmdTab [] = {
|
||||
{ ccKeepToken, DoConditionals }, /* .IFNDEF */
|
||||
{ ccKeepToken, DoConditionals }, /* .IFNREF */
|
||||
{ ccKeepToken, DoConditionals }, /* .IFP02 */
|
||||
{ ccKeepToken, DoConditionals }, /* .IFP02X */
|
||||
{ ccKeepToken, DoConditionals }, /* .IFP4510 */
|
||||
{ ccKeepToken, DoConditionals }, /* .IFP816 */
|
||||
{ ccKeepToken, DoConditionals }, /* .IFPC02 */
|
||||
@@ -2138,75 +2157,77 @@ static CtrlDesc CtrlCmdTab [] = {
|
||||
{ ccKeepToken, DoConditionals }, /* .IFPM740 */
|
||||
{ ccKeepToken, DoConditionals }, /* .IFPSC02 */
|
||||
{ ccKeepToken, DoConditionals }, /* .IFREF */
|
||||
{ ccNone, DoImport },
|
||||
{ ccNone, DoImportZP },
|
||||
{ ccNone, DoIncBin },
|
||||
{ ccNone, DoInclude },
|
||||
{ ccNone, DoInterruptor },
|
||||
{ ccNone, DoImport }, /* .IMPORT */
|
||||
{ ccNone, DoImportZP }, /* .IMPORTZP */
|
||||
{ ccNone, DoIncBin }, /* .INCBIN */
|
||||
{ ccNone, DoInclude }, /* .INCLUDE */
|
||||
{ ccNone, DoInterruptor }, /* .INTERRUPTPOR */
|
||||
{ ccNone, DoUnexpected }, /* .ISIZE */
|
||||
{ ccNone, DoUnexpected }, /* .ISMNEMONIC */
|
||||
{ ccNone, DoInvalid }, /* .LEFT */
|
||||
{ ccNone, DoLineCont },
|
||||
{ ccNone, DoList },
|
||||
{ ccNone, DoListBytes },
|
||||
{ ccNone, DoLiteral },
|
||||
{ ccNone, DoLineCont }, /* .LINECONT */
|
||||
{ ccNone, DoList }, /* .LIST */
|
||||
{ ccNone, DoListBytes }, /* .LISTBYTES */
|
||||
{ ccNone, DoLiteral }, /* .LITERAL */
|
||||
{ ccNone, DoUnexpected }, /* .LOBYTE */
|
||||
{ ccNone, DoLoBytes },
|
||||
{ ccNone, DoLoBytes }, /* .LOBYTES */
|
||||
{ ccNone, DoUnexpected }, /* .LOCAL */
|
||||
{ ccNone, DoLocalChar },
|
||||
{ ccNone, DoLocalChar }, /* .LOCALCHAR */
|
||||
{ ccNone, DoUnexpected }, /* .LOWORD */
|
||||
{ ccNone, DoMacPack },
|
||||
{ ccNone, DoMacro },
|
||||
{ ccNone, DoMacPack }, /* .MACPACK */
|
||||
{ ccNone, DoMacro }, /* .MAC, .MACRO */
|
||||
{ ccNone, DoUnexpected }, /* .MATCH */
|
||||
{ ccNone, DoUnexpected }, /* .MAX */
|
||||
{ ccNone, DoInvalid }, /* .MID */
|
||||
{ ccNone, DoUnexpected }, /* .MIN */
|
||||
{ ccNone, DoNull },
|
||||
{ ccNone, DoOrg },
|
||||
{ ccNone, DoOut },
|
||||
{ ccNone, DoP02 },
|
||||
{ ccNone, DoP4510 },
|
||||
{ ccNone, DoP816 },
|
||||
{ ccNone, DoPageLength },
|
||||
{ ccNone, DoNull }, /* .NULL */
|
||||
{ ccNone, DoOrg }, /* .ORG */
|
||||
{ ccNone, DoOut }, /* .OUT */
|
||||
{ ccNone, DoP02 }, /* .P02 */
|
||||
{ ccNone, DoP02X }, /* .P02X */
|
||||
{ ccNone, DoP4510 }, /* .P4510 */
|
||||
{ ccNone, DoP816 }, /* .P816 */
|
||||
{ ccNone, DoPageLength }, /* .PAGELEN, .PAGELENGTH */
|
||||
{ ccNone, DoUnexpected }, /* .PARAMCOUNT */
|
||||
{ ccNone, DoPC02 },
|
||||
{ ccNone, DoPDTV },
|
||||
{ ccNone, DoPopCharmap },
|
||||
{ ccNone, DoPopCPU },
|
||||
{ ccNone, DoPopSeg },
|
||||
{ ccNone, DoProc },
|
||||
{ ccNone, DoPSC02 },
|
||||
{ ccNone, DoPushCharmap },
|
||||
{ ccNone, DoPushCPU },
|
||||
{ ccNone, DoPushSeg },
|
||||
{ ccNone, DoUnexpected }, /* .REFERENCED */
|
||||
{ ccNone, DoReferTo }, /* .REFERTO */
|
||||
{ ccNone, DoReloc },
|
||||
{ ccNone, DoRepeat },
|
||||
{ ccNone, DoRes },
|
||||
{ ccNone, DoPC02 }, /* .PSC02 */
|
||||
{ ccNone, DoPDTV }, /* .PDTV */
|
||||
{ ccNone, DoPM740 }, /* .PM740 */
|
||||
{ ccNone, DoPopCharmap }, /* .POPCHARMAP */
|
||||
{ ccNone, DoPopCPU }, /* .POPCPU */
|
||||
{ ccNone, DoPopSeg }, /* .POPSEG */
|
||||
{ ccNone, DoProc }, /* .PROC */
|
||||
{ ccNone, DoPSC02 }, /* .PSC02 */
|
||||
{ ccNone, DoPushCharmap }, /* .PUSHCHARMAP */
|
||||
{ ccNone, DoPushCPU }, /* .PUSHCPU */
|
||||
{ ccNone, DoPushSeg }, /* .PUSHSEG */
|
||||
{ ccNone, DoUnexpected }, /* .REF, .REFERENCED */
|
||||
{ ccNone, DoReferTo }, /* .REFTO, .REFERTO */
|
||||
{ ccNone, DoReloc }, /* .RELOC */
|
||||
{ ccNone, DoRepeat }, /* .REPEAT */
|
||||
{ ccNone, DoRes }, /* .RES */
|
||||
{ ccNone, DoInvalid }, /* .RIGHT */
|
||||
{ ccNone, DoROData },
|
||||
{ ccNone, DoScope },
|
||||
{ ccNone, DoSegment },
|
||||
{ ccNone, DoROData }, /* .RODATA */
|
||||
{ ccNone, DoScope }, /* .SCOPE */
|
||||
{ ccNone, DoSegment }, /* .SEGMENT */
|
||||
{ ccNone, DoUnexpected }, /* .SET */
|
||||
{ ccNone, DoSetCPU },
|
||||
{ ccNone, DoSetCPU }, /* .SETCPU */
|
||||
{ ccNone, DoUnexpected }, /* .SIZEOF */
|
||||
{ ccNone, DoSmart },
|
||||
{ ccNone, DoSmart }, /* .SMART */
|
||||
{ ccNone, DoUnexpected }, /* .SPRINTF */
|
||||
{ ccNone, DoUnexpected }, /* .STRAT */
|
||||
{ ccNone, DoUnexpected }, /* .STRING */
|
||||
{ ccNone, DoUnexpected }, /* .STRLEN */
|
||||
{ ccNone, DoStruct },
|
||||
{ ccNone, DoTag },
|
||||
{ ccNone, DoStruct }, /* .STRUCT */
|
||||
{ ccNone, DoTag }, /* .TAG */
|
||||
{ ccNone, DoUnexpected }, /* .TCOUNT */
|
||||
{ ccNone, DoUnexpected }, /* .TIME */
|
||||
{ ccKeepToken, DoUnDef },
|
||||
{ ccNone, DoUnion },
|
||||
{ ccKeepToken, DoUnDef }, /* .UNDEF, .UNDEFINE */
|
||||
{ ccNone, DoUnion }, /* .UNION */
|
||||
{ ccNone, DoUnexpected }, /* .VERSION */
|
||||
{ ccNone, DoWarning },
|
||||
{ ccNone, DoWord },
|
||||
{ ccNone, DoWarning }, /* .WARNING */
|
||||
{ ccNone, DoWord }, /* .WORD */
|
||||
{ ccNone, DoUnexpected }, /* .XMATCH */
|
||||
{ ccNone, DoZeropage },
|
||||
{ ccNone, DoZeropage }, /* .ZEROPAGE */
|
||||
};
|
||||
|
||||
|
||||
|
||||
@@ -221,6 +221,7 @@ struct DotKeyword {
|
||||
{ ".IFNDEF", TOK_IFNDEF },
|
||||
{ ".IFNREF", TOK_IFNREF },
|
||||
{ ".IFP02", TOK_IFP02 },
|
||||
{ ".IFP02X", TOK_IFP02X },
|
||||
{ ".IFP4510", TOK_IFP4510 },
|
||||
{ ".IFP816", TOK_IFP816 },
|
||||
{ ".IFPC02", TOK_IFPC02 },
|
||||
@@ -260,6 +261,7 @@ struct DotKeyword {
|
||||
{ ".ORG", TOK_ORG },
|
||||
{ ".OUT", TOK_OUT },
|
||||
{ ".P02", TOK_P02 },
|
||||
{ ".P02X", TOK_P02X },
|
||||
{ ".P4510", TOK_P4510 },
|
||||
{ ".P816", TOK_P816 },
|
||||
{ ".PAGELEN", TOK_PAGELENGTH },
|
||||
@@ -267,6 +269,7 @@ struct DotKeyword {
|
||||
{ ".PARAMCOUNT", TOK_PARAMCOUNT },
|
||||
{ ".PC02", TOK_PC02 },
|
||||
{ ".PDTV", TOK_PDTV },
|
||||
{ ".PM740", TOK_PM740 },
|
||||
{ ".POPCHARMAP", TOK_POPCHARMAP },
|
||||
{ ".POPCPU", TOK_POPCPU },
|
||||
{ ".POPSEG", TOK_POPSEG },
|
||||
|
||||
@@ -193,6 +193,7 @@ typedef enum token_t {
|
||||
TOK_IFNDEF,
|
||||
TOK_IFNREF,
|
||||
TOK_IFP02,
|
||||
TOK_IFP02X,
|
||||
TOK_IFP4510,
|
||||
TOK_IFP816,
|
||||
TOK_IFPC02,
|
||||
@@ -227,12 +228,14 @@ typedef enum token_t {
|
||||
TOK_ORG,
|
||||
TOK_OUT,
|
||||
TOK_P02,
|
||||
TOK_P02X,
|
||||
TOK_P4510,
|
||||
TOK_P816,
|
||||
TOK_PAGELENGTH,
|
||||
TOK_PARAMCOUNT,
|
||||
TOK_PC02,
|
||||
TOK_PDTV,
|
||||
TOK_PM740,
|
||||
TOK_POPCHARMAP,
|
||||
TOK_POPCPU,
|
||||
TOK_POPSEG,
|
||||
|
||||
Binary file not shown.
@@ -8,6 +8,10 @@
|
||||
lda #$ea
|
||||
.endif
|
||||
|
||||
.ifp02X
|
||||
lax #$ea
|
||||
.endif
|
||||
|
||||
.ifpsc02
|
||||
jmp ($1234,x)
|
||||
.endif
|
||||
@@ -80,3 +84,14 @@
|
||||
.byte 0,"CPU_ISET_M740"
|
||||
.endif
|
||||
|
||||
|
||||
; step 3: switch through all supported cpus to verify the pseudo-op is there
|
||||
|
||||
.p02
|
||||
.p02X
|
||||
.psc02
|
||||
.pc02
|
||||
.p816
|
||||
.p4510
|
||||
.pdtv
|
||||
.pm740
|
||||
|
||||
Reference in New Issue
Block a user