diff --git a/src/ca65/condasm.c b/src/ca65/condasm.c index 61d93ba98..ed170b6d4 100644 --- a/src/ca65/condasm.c +++ b/src/ca65/condasm.c @@ -424,6 +424,16 @@ void DoConditionals (void) CalcOverallIfCond (); break; + case TOK_IFP6280: + D = AllocIf (".IFP6280", 1); + NextTok (); + if (IfCond) { + SetIfCond (D, GetCPU() == CPU_HUC6280); + } + ExpectSep (); + CalcOverallIfCond (); + break; + case TOK_IFP816: D = AllocIf (".IFP816", 1); NextTok (); @@ -444,6 +454,16 @@ void DoConditionals (void) CalcOverallIfCond (); break; + case TOK_IFPCE02: + D = AllocIf (".IFPCE02", 1); + NextTok (); + if (IfCond) { + SetIfCond (D, GetCPU() == CPU_65CE02); + } + ExpectSep (); + CalcOverallIfCond (); + break; + case TOK_IFPDTV: D = AllocIf (".IFPDTV", 1); NextTok (); @@ -484,16 +504,6 @@ void DoConditionals (void) 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 (); diff --git a/src/ca65/pseudo.c b/src/ca65/pseudo.c index 604eabb92..27207c84c 100644 --- a/src/ca65/pseudo.c +++ b/src/ca65/pseudo.c @@ -1594,14 +1594,6 @@ static void DoPCE02 (void) -static void DoP816 (void) -/* Switch to 65816 CPU */ -{ - SetCPU (CPU_65816); -} - - - static void DoP4510 (void) /* Switch to 4510 CPU */ { @@ -1618,6 +1610,22 @@ static void DoP45GS02 (void) +static void DoP6280 (void) +/* Switch to HuC6280 CPU */ +{ + SetCPU (CPU_HUC6280); +} + + + +static void DoP816 (void) +/* Switch to 65816 CPU */ +{ + SetCPU (CPU_65816); +} + + + static void DoPDTV (void) /* Switch to C64DTV CPU */ { @@ -2176,6 +2184,7 @@ static CtrlDesc CtrlCmdTab [] = { { ccKeepToken, DoConditionals }, /* .IFP02X */ { ccKeepToken, DoConditionals }, /* .IFP4510 */ { ccKeepToken, DoConditionals }, /* .IFP45GS02 */ + { ccKeepToken, DoConditionals }, /* .IFP6280 */ { ccKeepToken, DoConditionals }, /* .IFP816 */ { ccKeepToken, DoConditionals }, /* .IFPC02 */ { ccKeepToken, DoConditionals }, /* .IFPCE02 */ @@ -2214,6 +2223,7 @@ static CtrlDesc CtrlCmdTab [] = { { ccNone, DoP02X }, /* .P02X */ { ccNone, DoP4510 }, /* .P4510 */ { ccNone, DoP45GS02 }, /* .P45GS02 */ + { ccNone, DoP6280 }, /* .P6280 */ { ccNone, DoP816 }, /* .P816 */ { ccNone, DoPageLength }, /* .PAGELEN, .PAGELENGTH */ { ccNone, DoUnexpected }, /* .PARAMCOUNT */ diff --git a/src/ca65/scanner.c b/src/ca65/scanner.c index 1b3673150..68ff71cc7 100644 --- a/src/ca65/scanner.c +++ b/src/ca65/scanner.c @@ -224,6 +224,7 @@ struct DotKeyword { { ".IFP02X", TOK_IFP02X }, { ".IFP4510", TOK_IFP4510 }, { ".IFP45GS02", TOK_IFP45GS02 }, + { ".IFP6280", TOK_IFP6280 }, { ".IFP816", TOK_IFP816 }, { ".IFPC02", TOK_IFPC02 }, { ".IFPCE02", TOK_IFPCE02 }, @@ -267,6 +268,7 @@ struct DotKeyword { { ".P02X", TOK_P02X }, { ".P4510", TOK_P4510 }, { ".P45GS02", TOK_P45GS02 }, + { ".P6280", TOK_P6280 }, { ".P816", TOK_P816 }, { ".PAGELEN", TOK_PAGELENGTH }, { ".PAGELENGTH", TOK_PAGELENGTH }, diff --git a/src/ca65/token.h b/src/ca65/token.h index a87719794..de80fc910 100644 --- a/src/ca65/token.h +++ b/src/ca65/token.h @@ -197,6 +197,7 @@ typedef enum token_t { TOK_IFP02X, TOK_IFP4510, TOK_IFP45GS02, + TOK_IFP6280, TOK_IFP816, TOK_IFPC02, TOK_IFPCE02, @@ -235,6 +236,7 @@ typedef enum token_t { TOK_P02X, TOK_P4510, TOK_P45GS02, + TOK_P6280, TOK_P816, TOK_PAGELENGTH, TOK_PARAMCOUNT, diff --git a/test/asm/cpudetect/cpudetect.s b/test/asm/cpudetect/cpudetect.s index 9f62e3ded..86f31f7a3 100644 --- a/test/asm/cpudetect/cpudetect.s +++ b/test/asm/cpudetect/cpudetect.s @@ -45,6 +45,11 @@ sac #$00 .endif +.ifp6280 + sax + cla +.endif + .ifpm740 jsr $ff12 .endif @@ -123,8 +128,10 @@ .pc02 .pwc02 .pce02 -.p816 .p4510 .p45GS02 .pdtv +.p6280 .pm740 +.p816 +; FIXME: sweet16 diff --git a/test/asm/cpudetect/huc6280-cpudetect.ref b/test/asm/cpudetect/huc6280-cpudetect.ref index 646e0f48c..6ae287fdf 100644 Binary files a/test/asm/cpudetect/huc6280-cpudetect.ref and b/test/asm/cpudetect/huc6280-cpudetect.ref differ