X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;ds=sidebyside;f=src%2Fca65%2Fmacpack.c;h=e275693224c81da1964cfc7a978c5e4f707c5f82;hb=64c5165a5b2984d15035dd17d1e953502db25d36;hp=317cf390cc59a0e46f36ed189b2bb7ae578bc7d6;hpb=5ee8618510eacaca1f779612103bf709f59e9450;p=cc65 diff --git a/src/ca65/macpack.c b/src/ca65/macpack.c index 317cf390c..e27569322 100644 --- a/src/ca65/macpack.c +++ b/src/ca65/macpack.c @@ -6,10 +6,10 @@ /* */ /* */ /* */ -/* (C) 1998 Ullrich von Bassewitz */ -/* Wacholderweg 14 */ -/* D-70597 Stuttgart */ -/* EMail: uz@musoftware.de */ +/* (C) 1998-2003 Ullrich von Bassewitz */ +/* Römerstrasse 52 */ +/* D-70794 Filderstadt */ +/* EMail: uz@cc65.org */ /* */ /* */ /* This software is provided 'as-is', without any expressed or implied */ @@ -35,7 +35,7 @@ /* common */ #include "check.h" - + /* ca65 */ #include "error.h" #include "scanner.h" @@ -50,7 +50,9 @@ /* Predefined packages */ -static const char MacGeneric [] = /* Generic macros */ + +/* Generic macros */ +static char MacGeneric[] = ".macro add Arg1, Arg2\n" " clc\n" " .if .paramcount = 2\n" @@ -68,11 +70,13 @@ static const char MacGeneric [] = /* Generic macros */ " .endif\n" ".endmacro\n"; - - -static const char MacLongBranch [] = /* Long branch macros */ +/* Long branch macros */ +static char MacLongBranch[] = ".macro jeq Target\n" - " .if .def(Target) .and ((*+2)-(Target) <= 127)\n" + " .if .match(Target, 0)\n" + " bne *+5\n" + " jmp Target\n" + " .elseif .def(Target,local) .and ((*+2)-(Target) <= 127)\n" " beq Target\n" " .else\n" " bne *+5\n" @@ -80,7 +84,10 @@ static const char MacLongBranch [] = /* Long branch macros */ " .endif\n" ".endmacro\n" ".macro jne Target\n" - " .if .def(Target) .and ((*+2)-(Target) <= 127)\n" + " .if .match(Target, 0)\n" + " beq *+5\n" + " jmp Target\n" + " .elseif .def(Target,local) .and ((*+2)-(Target) <= 127)\n" " bne Target\n" " .else\n" " beq *+5\n" @@ -88,7 +95,10 @@ static const char MacLongBranch [] = /* Long branch macros */ " .endif\n" ".endmacro\n" ".macro jmi Target\n" - " .if .def(Target) .and ((*+2)-(Target) <= 127)\n" + " .if .match(Target, 0)\n" + " bpl *+5\n" + " jmp Target\n" + " .elseif .def(Target,local) .and ((*+2)-(Target) <= 127)\n" " bmi Target\n" " .else\n" " bpl *+5\n" @@ -96,7 +106,10 @@ static const char MacLongBranch [] = /* Long branch macros */ " .endif\n" ".endmacro\n" ".macro jpl Target\n" - " .if .def(Target) .and ((*+2)-(Target) <= 127)\n" + " .if .match(Target, 0)\n" + " bmi *+5\n" + " jmp Target\n" + " .elseif .def(Target,local) .and ((*+2)-(Target) <= 127)\n" " bpl Target\n" " .else\n" " bmi *+5\n" @@ -104,7 +117,10 @@ static const char MacLongBranch [] = /* Long branch macros */ " .endif\n" ".endmacro\n" ".macro jcs Target\n" - " .if .def(Target) .and ((*+2)-(Target) <= 127)\n" + " .if .match(Target, 0)\n" + " bcc *+5\n" + " jmp Target\n" + " .elseif .def(Target,local) .and ((*+2)-(Target) <= 127)\n" " bcs Target\n" " .else\n" " bcc *+5\n" @@ -112,7 +128,10 @@ static const char MacLongBranch [] = /* Long branch macros */ " .endif\n" ".endmacro\n" ".macro jcc Target\n" - " .if .def(Target) .and ((*+2)-(Target) <= 127)\n" + " .if .match(Target, 0)\n" + " bcs *+5\n" + " jmp Target\n" + " .elseif .def(Target,local) .and ((*+2)-(Target) <= 127)\n" " bcc Target\n" " .else\n" " bcs *+5\n" @@ -120,7 +139,10 @@ static const char MacLongBranch [] = /* Long branch macros */ " .endif\n" ".endmacro\n" ".macro jvs Target\n" - " .if .def(Target) .and ((*+2)-(Target) <= 127)\n" + " .if .match(Target, 0)\n" + " bvc *+5\n" + " jmp Target\n" + " .elseif .def(Target,local) .and ((*+2)-(Target) <= 127)\n" " bvs Target\n" " .else\n" " bvc *+5\n" @@ -128,7 +150,10 @@ static const char MacLongBranch [] = /* Long branch macros */ " .endif\n" ".endmacro\n" ".macro jvc Target\n" - " .if .def(Target) .and ((*+2)-(Target) <= 127)\n" + " .if .match(Target, 0)\n" + " bvs *+5\n" + " jmp Target\n" + " .elseif .def(Target,local) .and ((*+2)-(Target) <= 127)\n" " bvc Target\n" " .else\n" " bvs *+5\n" @@ -136,12 +161,49 @@ static const char MacLongBranch [] = /* Long branch macros */ " .endif\n" ".endmacro\n"; +/* Commodore specific macros */ +static char MacCBM[] = + ".macro scrcode str\n" + " .repeat .strlen(str), i\n" + " .if (.strat(str, i) >= '@' .and .strat(str, i) <= 'z')\n" + " .byte .strat(str, i) - '@'\n" + " .elseif (.strat(str, i) >= 'A' .and .strat(str, i) <= 'Z')\n" + " .byte .strat(str, i) - 'A' + 65\n" + " .elseif (.strat(str, i) = '[')\n" + " .byte 27\n" + " .elseif (.strat(str, i) = ']')\n" + " .byte 29\n" + " .elseif (.strat(str, i) = '^')\n" + " .byte 30\n" + " .elseif (.strat(str, i) = '_')\n" + " .byte 31\n" + " .else\n" + " .byte .strat(str, i)\n" + " .endif\n" + " .endrepeat\n" + ".endmacro\n"; + +/* CPU defines */ +static char MacCPU[] = + "CPU_ISET_6502 = $01\n" + "CPU_ISET_65SC02 = $02\n" + "CPU_ISET_65C02 = $04\n" + "CPU_ISET_65816 = $08\n" + "CPU_ISET_SUNPLUS = $10\n" + "CPU_6502 = $01\n" + "CPU_65SC02 = $03\n" + "CPU_65C02 = $07\n" + "CPU_65816 = $0F\n" + "CPU_SUNPLUS = $10\n"; + /* Table with pointers to the different packages */ -static const char* MacPackages [] = { +static char* MacPackages [] = { MacGeneric, MacLongBranch, + MacCBM, + MacCPU };