From 8e4936d68d6bcf6ce3eca75681cd40e35214ff30 Mon Sep 17 00:00:00 2001 From: mrdudz Date: Sat, 28 Jun 2025 18:15:57 +0200 Subject: [PATCH] add related pseudos --- src/ca65/condasm.c | 22 ++++++++++++++++++++++ src/ca65/pseudo.c | 22 +++++++++++++++++++++- src/ca65/scanner.c | 4 ++++ src/ca65/token.h | 4 ++++ 4 files changed, 51 insertions(+), 1 deletion(-) diff --git a/src/ca65/condasm.c b/src/ca65/condasm.c index c63e54e3a..61d93ba98 100644 --- a/src/ca65/condasm.c +++ b/src/ca65/condasm.c @@ -474,6 +474,26 @@ void DoConditionals (void) CalcOverallIfCond (); break; + case TOK_IFPWC02: + D = AllocIf (".IFPWC02", 1); + NextTok (); + if (IfCond) { + SetIfCond (D, GetCPU() == CPU_W65C02); + } + ExpectSep (); + CalcOverallIfCond (); + break; + + case TOK_IFPCE02: + D = AllocIf (".IFPCE02", 1); + NextTok (); + if (IfCond) { + SetIfCond (D, GetCPU() == CPU_65CE02); + } + ExpectSep (); + CalcOverallIfCond (); + break; + case TOK_IFREF: D = AllocIf (".IFREF", 1); NextTok (); @@ -520,9 +540,11 @@ int CheckConditionals (void) case TOK_IFP45GS02: case TOK_IFP816: case TOK_IFPC02: + case TOK_IFPCE02: case TOK_IFPDTV: case TOK_IFPM740: case TOK_IFPSC02: + case TOK_IFPWC02: case TOK_IFREF: DoConditionals (); return 1; diff --git a/src/ca65/pseudo.c b/src/ca65/pseudo.c index 7e52ecb5e..604eabb92 100644 --- a/src/ca65/pseudo.c +++ b/src/ca65/pseudo.c @@ -1578,6 +1578,22 @@ static void DoPC02 (void) +static void DoPWC02 (void) +/* Switch to W65C02 CPU */ +{ + SetCPU (CPU_W65C02); +} + + + +static void DoPCE02 (void) +/* Switch to 65CE02 CPU */ +{ + SetCPU (CPU_65CE02); +} + + + static void DoP816 (void) /* Switch to 65816 CPU */ { @@ -2162,9 +2178,11 @@ static CtrlDesc CtrlCmdTab [] = { { ccKeepToken, DoConditionals }, /* .IFP45GS02 */ { ccKeepToken, DoConditionals }, /* .IFP816 */ { ccKeepToken, DoConditionals }, /* .IFPC02 */ + { ccKeepToken, DoConditionals }, /* .IFPCE02 */ { ccKeepToken, DoConditionals }, /* .IFPDTV */ { ccKeepToken, DoConditionals }, /* .IFPM740 */ { ccKeepToken, DoConditionals }, /* .IFPSC02 */ + { ccKeepToken, DoConditionals }, /* .IFPWC02 */ { ccKeepToken, DoConditionals }, /* .IFREF */ { ccNone, DoImport }, /* .IMPORT */ { ccNone, DoImportZP }, /* .IMPORTZP */ @@ -2199,7 +2217,8 @@ static CtrlDesc CtrlCmdTab [] = { { ccNone, DoP816 }, /* .P816 */ { ccNone, DoPageLength }, /* .PAGELEN, .PAGELENGTH */ { ccNone, DoUnexpected }, /* .PARAMCOUNT */ - { ccNone, DoPC02 }, /* .PSC02 */ + { ccNone, DoPC02 }, /* .PC02 */ + { ccNone, DoPCE02 }, /* .PCE02 */ { ccNone, DoPDTV }, /* .PDTV */ { ccNone, DoPM740 }, /* .PM740 */ { ccNone, DoPopCharmap }, /* .POPCHARMAP */ @@ -2210,6 +2229,7 @@ static CtrlDesc CtrlCmdTab [] = { { ccNone, DoPushCharmap }, /* .PUSHCHARMAP */ { ccNone, DoPushCPU }, /* .PUSHCPU */ { ccNone, DoPushSeg }, /* .PUSHSEG */ + { ccNone, DoPWC02 }, /* .PWC02 */ { ccNone, DoUnexpected }, /* .REF, .REFERENCED */ { ccNone, DoReferTo }, /* .REFTO, .REFERTO */ { ccNone, DoReloc }, /* .RELOC */ diff --git a/src/ca65/scanner.c b/src/ca65/scanner.c index dd0209856..143e83981 100644 --- a/src/ca65/scanner.c +++ b/src/ca65/scanner.c @@ -226,9 +226,11 @@ struct DotKeyword { { ".IFP45GS02", TOK_IFP45GS02 }, { ".IFP816", TOK_IFP816 }, { ".IFPC02", TOK_IFPC02 }, + { ".IFPCE02", TOK_IFPCE02 }, { ".IFPDTV", TOK_IFPDTV }, { ".IFPM740", TOK_IFPM740 }, { ".IFPSC02", TOK_IFPSC02 }, + { ".IFPWC02", TOK_IFPWC02 }, { ".IFREF", TOK_IFREF }, { ".IMPORT", TOK_IMPORT }, { ".IMPORTZP", TOK_IMPORTZP }, @@ -270,6 +272,7 @@ struct DotKeyword { { ".PAGELENGTH", TOK_PAGELENGTH }, { ".PARAMCOUNT", TOK_PARAMCOUNT }, { ".PC02", TOK_PC02 }, + { ".PCE02", TOK_PCE02 }, { ".PDTV", TOK_PDTV }, { ".PM740", TOK_PM740 }, { ".POPCHARMAP", TOK_POPCHARMAP }, @@ -280,6 +283,7 @@ struct DotKeyword { { ".PUSHCHARMAP", TOK_PUSHCHARMAP }, { ".PUSHCPU", TOK_PUSHCPU }, { ".PUSHSEG", TOK_PUSHSEG }, + { ".PWC02", TOK_PWC02 }, { ".REF", TOK_REFERENCED }, { ".REFERENCED", TOK_REFERENCED }, { ".REFERTO", TOK_REFERTO }, diff --git a/src/ca65/token.h b/src/ca65/token.h index 9ca7ea657..a87719794 100644 --- a/src/ca65/token.h +++ b/src/ca65/token.h @@ -199,9 +199,11 @@ typedef enum token_t { TOK_IFP45GS02, TOK_IFP816, TOK_IFPC02, + TOK_IFPCE02, TOK_IFPDTV, TOK_IFPM740, TOK_IFPSC02, + TOK_IFPWC02, TOK_IFREF, TOK_IMPORT, TOK_IMPORTZP, @@ -237,6 +239,7 @@ typedef enum token_t { TOK_PAGELENGTH, TOK_PARAMCOUNT, TOK_PC02, + TOK_PCE02, TOK_PDTV, TOK_PM740, TOK_POPCHARMAP, @@ -247,6 +250,7 @@ typedef enum token_t { TOK_PUSHCHARMAP, TOK_PUSHCPU, TOK_PUSHSEG, + TOK_PWC02, TOK_REFERENCED, TOK_REFERTO, TOK_RELOC,