]> git.sur5r.net Git - cc65/blobdiff - src/ca65/macpack.c
Free expression trees when they're no longer needed
[cc65] / src / ca65 / macpack.c
index db5c7531f5fe16d317ff2d0066ded82aa53054fd..e275693224c81da1964cfc7a978c5e4f707c5f82 100644 (file)
@@ -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       */
@@ -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,14 +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     .match(Target, 0)\n"
     "        bne     *+5\n"
     "        jmp     Target\n"
-    "        .elseif .def(Target) .and ((*+2)-(Target) <= 127)\n"
+    "        .elseif .def(Target,local) .and ((*+2)-(Target) <= 127)\n"
     "        beq     Target\n"
     "        .else\n"
     "        bne     *+5\n"
@@ -86,7 +87,7 @@ static const char MacLongBranch [] =  /* Long branch macros */
     "        .if     .match(Target, 0)\n"
     "        beq     *+5\n"
     "        jmp     Target\n"
-    "        .elseif .def(Target) .and ((*+2)-(Target) <= 127)\n"
+    "        .elseif .def(Target,local) .and ((*+2)-(Target) <= 127)\n"
     "        bne     Target\n"
     "        .else\n"
     "        beq     *+5\n"
@@ -97,7 +98,7 @@ static const char MacLongBranch [] =  /* Long branch macros */
     "        .if     .match(Target, 0)\n"
     "        bpl     *+5\n"
     "        jmp     Target\n"
-    "        .elseif .def(Target) .and ((*+2)-(Target) <= 127)\n"
+    "        .elseif .def(Target,local) .and ((*+2)-(Target) <= 127)\n"
     "        bmi     Target\n"
     "        .else\n"
     "        bpl     *+5\n"
@@ -108,7 +109,7 @@ static const char MacLongBranch [] =        /* Long branch macros */
     "        .if     .match(Target, 0)\n"
     "        bmi     *+5\n"
     "        jmp     Target\n"
-    "        .elseif .def(Target) .and ((*+2)-(Target) <= 127)\n"
+    "        .elseif .def(Target,local) .and ((*+2)-(Target) <= 127)\n"
     "        bpl     Target\n"
     "        .else\n"
     "        bmi     *+5\n"
@@ -119,7 +120,7 @@ static const char MacLongBranch [] =        /* Long branch macros */
     "        .if     .match(Target, 0)\n"
     "        bcc     *+5\n"
     "        jmp     Target\n"
-    "        .elseif .def(Target) .and ((*+2)-(Target) <= 127)\n"
+    "        .elseif .def(Target,local) .and ((*+2)-(Target) <= 127)\n"
     "        bcs     Target\n"
     "        .else\n"
     "        bcc     *+5\n"
@@ -130,7 +131,7 @@ static const char MacLongBranch [] =        /* Long branch macros */
     "        .if     .match(Target, 0)\n"
     "        bcs     *+5\n"
     "        jmp     Target\n"
-    "        .elseif .def(Target) .and ((*+2)-(Target) <= 127)\n"
+    "        .elseif .def(Target,local) .and ((*+2)-(Target) <= 127)\n"
     "        bcc     Target\n"
     "        .else\n"
     "        bcs     *+5\n"
@@ -141,7 +142,7 @@ static const char MacLongBranch [] =        /* Long branch macros */
     "        .if     .match(Target, 0)\n"
     "        bvc     *+5\n"
     "        jmp     Target\n"
-    "        .elseif .def(Target) .and ((*+2)-(Target) <= 127)\n"
+    "        .elseif .def(Target,local) .and ((*+2)-(Target) <= 127)\n"
     "        bvs     Target\n"
     "        .else\n"
     "        bvc     *+5\n"
@@ -152,7 +153,7 @@ static const char MacLongBranch [] =        /* Long branch macros */
     "        .if     .match(Target, 0)\n"
     "        bvs     *+5\n"
     "        jmp     Target\n"
-    "        .elseif .def(Target) .and ((*+2)-(Target) <= 127)\n"
+    "        .elseif .def(Target,local) .and ((*+2)-(Target) <= 127)\n"
     "        bvc     Target\n"
     "        .else\n"
     "        bvs     *+5\n"
@@ -160,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
 };