From 0b74ae8c2d80fcba49ed5b0557da414363f0f9c0 Mon Sep 17 00:00:00 2001 From: mrdudz Date: Mon, 16 Jun 2025 21:59:38 +0200 Subject: [PATCH] add m740 to macpack cpu, add .ifpm740, add regression test for those --- asminc/cpu.mac | 3 ++- src/ca65/condasm.c | 11 +++++++++++ src/ca65/pseudo.c | 1 + src/ca65/scanner.c | 1 + src/ca65/token.h | 1 + test/asm/cpudetect/cpudetect.s | 8 ++++++++ test/asm/cpudetect/m740-cpudetect.ref | Bin 0 -> 30 bytes 7 files changed, 24 insertions(+), 1 deletion(-) create mode 100644 test/asm/cpudetect/m740-cpudetect.ref diff --git a/asminc/cpu.mac b/asminc/cpu.mac index 084a42119..1f5c0758e 100644 --- a/asminc/cpu.mac +++ b/asminc/cpu.mac @@ -8,7 +8,7 @@ CPU_ISET_65C02 = $0020 CPU_ISET_65816 = $0040 CPU_ISET_SWEET16 = $0080 CPU_ISET_HUC6280 = $0100 -;CPU_ISET_M740 = $0200 not actually implemented +CPU_ISET_M740 = $0200 CPU_ISET_4510 = $0400 ; CPU capabilities @@ -22,3 +22,4 @@ CPU_65816 = CPU_ISET_6502|CPU_ISET_65SC02|CPU_ISET_65816 CPU_SWEET16 = CPU_ISET_SWEET16 CPU_HUC6280 = CPU_ISET_6502|CPU_ISET_65SC02|CPU_ISET_65C02|CPU_ISET_HUC6280 CPU_4510 = CPU_ISET_6502|CPU_ISET_65SC02|CPU_ISET_65C02|CPU_ISET_4510 +CPU_M740 = CPU_ISET_6502|CPU_ISET_M740 diff --git a/src/ca65/condasm.c b/src/ca65/condasm.c index f872ec9ed..049367758 100644 --- a/src/ca65/condasm.c +++ b/src/ca65/condasm.c @@ -434,6 +434,16 @@ void DoConditionals (void) CalcOverallIfCond (); break; + case TOK_IFPM740: + D = AllocIf (".IFPM740", 1); + NextTok (); + if (IfCond) { + SetIfCond (D, GetCPU() == CPU_M740); + } + ExpectSep (); + CalcOverallIfCond (); + break; + case TOK_IFPSC02: D = AllocIf (".IFPSC02", 1); NextTok (); @@ -489,6 +499,7 @@ int CheckConditionals (void) case TOK_IFP816: case TOK_IFPC02: case TOK_IFPDTV: + case TOK_IFPM740: case TOK_IFPSC02: case TOK_IFREF: DoConditionals (); diff --git a/src/ca65/pseudo.c b/src/ca65/pseudo.c index 2ce1ae087..2a14295ab 100644 --- a/src/ca65/pseudo.c +++ b/src/ca65/pseudo.c @@ -2135,6 +2135,7 @@ static CtrlDesc CtrlCmdTab [] = { { ccKeepToken, DoConditionals }, /* .IFP816 */ { ccKeepToken, DoConditionals }, /* .IFPC02 */ { ccKeepToken, DoConditionals }, /* .IFPDTV */ + { ccKeepToken, DoConditionals }, /* .IFPM740 */ { ccKeepToken, DoConditionals }, /* .IFPSC02 */ { ccKeepToken, DoConditionals }, /* .IFREF */ { ccNone, DoImport }, diff --git a/src/ca65/scanner.c b/src/ca65/scanner.c index 94c84d897..f93ae977e 100644 --- a/src/ca65/scanner.c +++ b/src/ca65/scanner.c @@ -225,6 +225,7 @@ struct DotKeyword { { ".IFP816", TOK_IFP816 }, { ".IFPC02", TOK_IFPC02 }, { ".IFPDTV", TOK_IFPDTV }, + { ".IFPM740", TOK_IFPM740 }, { ".IFPSC02", TOK_IFPSC02 }, { ".IFREF", TOK_IFREF }, { ".IMPORT", TOK_IMPORT }, diff --git a/src/ca65/token.h b/src/ca65/token.h index 8f935f7a1..a29c6e5ab 100644 --- a/src/ca65/token.h +++ b/src/ca65/token.h @@ -197,6 +197,7 @@ typedef enum token_t { TOK_IFP816, TOK_IFPC02, TOK_IFPDTV, + TOK_IFPM740, TOK_IFPSC02, TOK_IFREF, TOK_IMPORT, diff --git a/test/asm/cpudetect/cpudetect.s b/test/asm/cpudetect/cpudetect.s index 7b2363b7f..d4d5b9f9f 100644 --- a/test/asm/cpudetect/cpudetect.s +++ b/test/asm/cpudetect/cpudetect.s @@ -28,6 +28,10 @@ sac #$00 .endif +.ifpm740 + jsr $ff12 +.endif + ; step 2: check for bitwise compatibility of instructions sets ; (made verbose for better reading with hexdump/hd(1)) @@ -72,3 +76,7 @@ .byte 0,"CPU_ISET_6502DTV" .endif +.if (.cpu .bitand CPU_ISET_M740) + .byte 0,"CPU_ISET_M740" +.endif + diff --git a/test/asm/cpudetect/m740-cpudetect.ref b/test/asm/cpudetect/m740-cpudetect.ref new file mode 100644 index 0000000000000000000000000000000000000000..7788f3ed95ee9e39843989436875ff8889986a60 GIT binary patch literal 30 ccmY!qVsH)!jrR<84T(21H84W(e9cV^0C1ECpa1{> literal 0 HcmV?d00001