]> git.sur5r.net Git - cc65/commitdiff
Move the macro package sources into own files
authorcuz <cuz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Mon, 22 Aug 2005 17:05:03 +0000 (17:05 +0000)
committercuz <cuz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Mon, 22 Aug 2005 17:05:03 +0000 (17:05 +0000)
git-svn-id: svn://svn.cc65.org/cc65/trunk@3583 b7a2c559-68d2-44c3-8de9-860c34a00d81

src/ca65/.cvsignore
src/ca65/macpack.c
src/ca65/macpack/cbm.mac [new file with mode: 0644]
src/ca65/macpack/cpu.mac [new file with mode: 0644]
src/ca65/macpack/cvt-mac.pl [new file with mode: 0755]
src/ca65/macpack/generic.mac [new file with mode: 0644]
src/ca65/macpack/longbranch.mac [new file with mode: 0644]
src/ca65/make/gcc.mak

index 6c020cad8bf9b5547cb523c43f51af01a1866e51..605aeec6f1962e219a444a389e65632be1a6618f 100644 (file)
@@ -1,3 +1,8 @@
 .depend
 ca65
 .kdbgrc.ca65
+cbm.inc
+cpu.inc
+generic.inc
+longbranch.inc
+
index c721aa158adac071932bdee56f0b53c82bda69d0..f9c77c612f640e8ae24dae443f19b9218bab9068 100644 (file)
@@ -6,10 +6,10 @@
 /*                                                                           */
 /*                                                                           */
 /*                                                                           */
-/* (C) 1998-2004 Ullrich von Bassewitz                                       */
-/*               Römerstrasse 52                                             */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
+/* (C) 1998-2005, Ullrich von Bassewitz                                      */
+/*                Römerstrasse 52                                            */
+/*                D-70794 Filderstadt                                        */
+/* EMail:         uz@cc65.org                                                */
 /*                                                                           */
 /*                                                                           */
 /* This software is provided 'as-is', without any expressed or implied       */
 
 
 
-/* Predefined packages */
-
-/* Generic macros */
-static char MacGeneric[] =
-    ".macro  add     Arg1, Arg2\n"
-    "        clc\n"
-    "        .if .paramcount = 2\n"
-    "        adc     Arg1, Arg2\n"
-    "        .else\n"
-    "        adc     Arg1\n"
-    "        .endif\n"
-    ".endmacro\n"
-    ".macro  sub     Arg1, Arg2\n"
-    "        sec\n"
-    "        .if .paramcount = 2\n"
-    "        sbc     Arg1, Arg2\n"
-    "        .else\n"
-    "        sbc     Arg1\n"
-    "        .endif\n"
-    ".endmacro\n";
-
-/* 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 .const(Target) .and ((*+2)-(Target) <= 127)\n"
-    "        beq     Target\n"
-    "        .else\n"
-    "        bne     *+5\n"
-    "        jmp     Target\n"
-    "        .endif\n"
-    ".endmacro\n"
-    ".macro  jne     Target\n"
-    "        .if     .match(Target, 0)\n"
-    "        beq     *+5\n"
-    "        jmp     Target\n"
-    "        .elseif .def(Target) .and .const(Target) .and ((*+2)-(Target) <= 127)\n"
-    "        bne     Target\n"
-    "        .else\n"
-    "        beq     *+5\n"
-    "        jmp     Target\n"
-    "        .endif\n"
-    ".endmacro\n"
-    ".macro  jmi     Target\n"
-    "        .if     .match(Target, 0)\n"
-    "        bpl     *+5\n"
-    "        jmp     Target\n"
-    "        .elseif .def(Target) .and .const(Target) .and ((*+2)-(Target) <= 127)\n"
-    "        bmi     Target\n"
-    "        .else\n"
-    "        bpl     *+5\n"
-    "        jmp     Target\n"
-    "        .endif\n"
-    ".endmacro\n"
-    ".macro  jpl     Target\n"
-    "        .if     .match(Target, 0)\n"
-    "        bmi     *+5\n"
-    "        jmp     Target\n"
-    "        .elseif .def(Target) .and .const(Target) .and ((*+2)-(Target) <= 127)\n"
-    "        bpl     Target\n"
-    "        .else\n"
-    "        bmi     *+5\n"
-    "        jmp     Target\n"
-    "        .endif\n"
-    ".endmacro\n"
-    ".macro  jcs     Target\n"
-    "        .if     .match(Target, 0)\n"
-    "        bcc     *+5\n"
-    "        jmp     Target\n"
-    "        .elseif .def(Target) .and .const(Target) .and ((*+2)-(Target) <= 127)\n"
-    "        bcs     Target\n"
-    "        .else\n"
-    "        bcc     *+5\n"
-    "        jmp     Target\n"
-    "        .endif\n"
-    ".endmacro\n"
-    ".macro  jcc     Target\n"
-    "        .if     .match(Target, 0)\n"
-    "        bcs     *+5\n"
-    "        jmp     Target\n"
-    "        .elseif .def(Target) .and .const(Target) .and ((*+2)-(Target) <= 127)\n"
-    "        bcc     Target\n"
-    "        .else\n"
-    "        bcs     *+5\n"
-    "        jmp     Target\n"
-    "        .endif\n"
-    ".endmacro\n"
-    ".macro  jvs     Target\n"
-    "        .if     .match(Target, 0)\n"
-    "        bvc     *+5\n"
-    "        jmp     Target\n"
-    "        .elseif .def(Target) .and .const(Target) .and ((*+2)-(Target) <= 127)\n"
-    "        bvs     Target\n"
-    "        .else\n"
-    "        bvc     *+5\n"
-    "        jmp     Target\n"
-    "        .endif\n"
-    ".endmacro\n"
-    ".macro  jvc     Target\n"
-    "        .if     .match(Target, 0)\n"
-    "        bvs     *+5\n"
-    "        jmp     Target\n"
-    "        .elseif .def(Target) .and .const(Target) .and ((*+2)-(Target) <= 127)\n"
-    "        bvc     Target\n"
-    "        .else\n"
-    "        bvs     *+5\n"
-    "        jmp     Target\n"
-    "        .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_6502X     = $02\n"
-    "CPU_ISET_65SC02    = $04\n"
-    "CPU_ISET_65C02     = $08\n"
-    "CPU_ISET_65816     = $10\n"
-    "CPU_ISET_SUNPLUS   = $20\n"
-    "CPU_ISET_SWEET16   = $40\n"
-    "CPU_6502           = CPU_ISET_6502\n"
-    "CPU_6502X          = CPU_ISET_6502|CPU_ISET_6502X\n"
-    "CPU_65SC02         = CPU_ISET_6502|CPU_ISET_65SC02\n"
-    "CPU_65C02          = CPU_ISET_6502|CPU_ISET_65SC02|CPU_ISET_65C02\n"
-    "CPU_65816          = CPU_ISET_6502|CPU_ISET_65SC02|CPU_ISET_65816\n"
-    "CPU_SUNPLUS        = CPU_ISET_SUNPLUS\n"
-    "CPU_SWEET16        = CPU_ISET_SWEET16\n";
-                                             
-
+/* Predefined macro packages converted into C strings by a perl script */
+#include "cbm.inc"
+#include "cpu.inc"
+#include "generic.inc"
+#include "longbranch.inc"
 
 /* Table with pointers to the different packages */
 static char* MacPackages [] = {
@@ -224,8 +77,8 @@ void InsertMacPack (unsigned Id)
     /* Check the parameter */
     CHECK (Id < sizeof (MacPackages) / sizeof (MacPackages [0]));
 
-    /* Insert the package */
-    NewInputData (MacPackages [Id], 0);
+    /* Insert the package */ 
+    NewInputData (MacPackages[Id], 0);
 }
 
 
diff --git a/src/ca65/macpack/cbm.mac b/src/ca65/macpack/cbm.mac
new file mode 100644 (file)
index 0000000..6850c7b
--- /dev/null
@@ -0,0 +1,22 @@
+; Convert characters to screen codes
+.macro scrcode str         
+        .repeat .strlen(str), i
+                .if (.strat(str, i) >= '@' .and .strat(str, i) <= 'z')
+                        .byte .strat(str, i) - '@'
+                .elseif (.strat(str, i) >= 'A' .and .strat(str, i) <= 'Z')
+                        .byte .strat(str, i) - 'A' + 65
+                .elseif (.strat(str, i) = '[')
+                        .byte 27
+                .elseif (.strat(str, i) = ']')
+                        .byte 29
+                .elseif (.strat(str, i) = '^')
+                        .byte 30
+                .elseif (.strat(str, i) = '_')
+                        .byte 31
+                .else
+                        .byte .strat(str, i)
+                .endif
+        .endrepeat
+.endmacro
+
+
diff --git a/src/ca65/macpack/cpu.mac b/src/ca65/macpack/cpu.mac
new file mode 100644 (file)
index 0000000..837b740
--- /dev/null
@@ -0,0 +1,19 @@
+
+/* CPU bitmask constants */
+CPU_ISET_6502      = $01
+CPU_ISET_6502X     = $02
+CPU_ISET_65SC02    = $04
+CPU_ISET_65C02     = $08
+CPU_ISET_65816     = $10
+CPU_ISET_SUNPLUS   = $20
+CPU_ISET_SWEET16   = $40
+
+/* CPU capabilities */
+CPU_6502           = CPU_ISET_6502
+CPU_6502X          = CPU_ISET_6502|CPU_ISET_6502X
+CPU_65SC02         = CPU_ISET_6502|CPU_ISET_65SC02
+CPU_65C02          = CPU_ISET_6502|CPU_ISET_65SC02|CPU_ISET_65C02
+CPU_65816          = CPU_ISET_6502|CPU_ISET_65SC02|CPU_ISET_65816
+CPU_SUNPLUS        = CPU_ISET_SUNPLUS
+CPU_SWEET16        = CPU_ISET_SWEET16
+
diff --git a/src/ca65/macpack/cvt-mac.pl b/src/ca65/macpack/cvt-mac.pl
new file mode 100755 (executable)
index 0000000..0b56690
--- /dev/null
@@ -0,0 +1,75 @@
+#!/usr/bin/perl
+
+# Check number of params
+die "Usage: cvt-cfg.pl input output varname\n" unless ($#ARGV == 2);
+
+# Get the parameters
+$InputName  = shift (@ARGV);
+$OutputName = shift (@ARGV);
+$VarName    = shift (@ARGV);
+
+# Open both files
+open (IN, "<$InputName") or die "Cannot open $InputName\n";
+open (OUT, ">$OutputName") or die "Cannot open $OutputName\n";
+
+# Print the header to the output file
+print OUT "static char $VarName" . "[] = \n";
+
+# Read from input, print to output
+while ($Line = <IN>) {
+
+    # Remove the newline
+    chomp $Line;
+
+    # Separate an existing comment. No need to be overly clever, just ignore
+    # semicolons in strings.
+    if ($Line =~ /(.*?)(\s*)(;\s*)(.*?)\s*$/) {
+       $Line         = $1;
+       $CommentSpace = $2;
+       $Comment      = $4;
+    } else {
+       $CommentSpace = "";
+       $Comment      = "";
+    }
+
+    # Remove leading and trailing spaces
+    $Line =~ s/^\s*|\s*$//g;
+
+    # Ignore empty lines
+    if ($Line eq "") {
+        if ($Comment ne "") {
+            print OUT "/* $Comment */\n";
+        }
+        next;
+    }
+
+    # Replace control chars
+    $Line =~ s/\\/\\\\/g;
+    $Line =~ s/\"/\\\"/g;
+    $Line =~ s/\'/\\\'/g;
+
+    # Print to output
+    print OUT "\"$Line\\n\"";
+
+    # Add a comment if we have one
+    if ($Comment ne "") {
+       print OUT "$CommentSpace/* $Comment */";
+    }
+
+    # Terminate the line
+    print OUT "\n";
+}
+
+# Terminate the variable declaration
+print OUT ";\n";
+
+# Close the files
+close IN;
+close OUT;
+
+# Done
+exit 0;
+
+
+
+
diff --git a/src/ca65/macpack/generic.mac b/src/ca65/macpack/generic.mac
new file mode 100644 (file)
index 0000000..6f88c81
--- /dev/null
@@ -0,0 +1,21 @@
+
+; add - Add without carry
+.macro  add     Arg1, Arg2
+        clc
+        .if .paramcount = 2
+                adc     Arg1, Arg2
+        .else
+                adc     Arg1
+        .endif
+.endmacro
+
+; sub - subtract without borrow
+.macro  sub     Arg1, Arg2
+        sec
+        .if .paramcount = 2
+                sbc     Arg1, Arg2
+        .else
+                sbc     Arg1
+        .endif
+.endmacro
+
diff --git a/src/ca65/macpack/longbranch.mac b/src/ca65/macpack/longbranch.mac
new file mode 100644 (file)
index 0000000..b053202
--- /dev/null
@@ -0,0 +1,88 @@
+.macro  jeq     Target
+        .if     .match(Target, 0)
+        bne     *+5
+        jmp     Target
+        .elseif .def(Target) .and .const(Target) .and ((*+2)-(Target) <= 127)
+                beq     Target
+        .else
+                bne     *+5
+                jmp     Target
+        .endif
+.endmacro
+.macro  jne     Target
+        .if     .match(Target, 0)
+                beq     *+5
+                jmp     Target
+        .elseif .def(Target) .and .const(Target) .and ((*+2)-(Target) <= 127)
+                bne     Target
+        .else
+                beq     *+5
+                jmp     Target
+        .endif
+.endmacro
+.macro  jmi     Target
+        .if     .match(Target, 0)
+                bpl     *+5
+                jmp     Target
+        .elseif .def(Target) .and .const(Target) .and ((*+2)-(Target) <= 127)
+                bmi     Target
+        .else
+                bpl     *+5
+                jmp     Target
+        .endif
+.endmacro
+.macro  jpl     Target
+        .if     .match(Target, 0)
+                bmi     *+5
+                jmp     Target
+        .elseif .def(Target) .and .const(Target) .and ((*+2)-(Target) <= 127)
+                bpl     Target
+        .else
+                bmi     *+5
+                jmp     Target
+        .endif
+.endmacro
+.macro  jcs     Target
+        .if     .match(Target, 0)
+                bcc     *+5
+                jmp     Target
+        .elseif .def(Target) .and .const(Target) .and ((*+2)-(Target) <= 127)
+                bcs     Target
+        .else
+                bcc     *+5
+                jmp     Target
+        .endif
+.endmacro
+.macro  jcc     Target
+        .if     .match(Target, 0)
+                bcs     *+5
+                jmp     Target
+        .elseif .def(Target) .and .const(Target) .and ((*+2)-(Target) <= 127)
+                bcc     Target
+        .else
+                bcs     *+5
+                jmp     Target
+        .endif
+.endmacro
+.macro  jvs     Target
+        .if     .match(Target, 0)
+                bvc     *+5
+                jmp     Target
+        .elseif .def(Target) .and .const(Target) .and ((*+2)-(Target) <= 127)
+                bvs     Target
+        .else
+                bvc     *+5
+                jmp     Target
+        .endif
+.endmacro
+.macro  jvc     Target
+        .if     .match(Target, 0)
+                bvs     *+5
+                jmp     Target
+        .elseif .def(Target) .and .const(Target) .and ((*+2)-(Target) <= 127)
+                bvc     Target
+        .else
+                bvs     *+5
+                jmp     Target
+        .endif
+.endmacro
index 97de9ebda191c521f5a1cd4e5843846f1ec813ef..3eeecb781b3b8a3e2facfc6439a3c423d8fb67f0 100644 (file)
@@ -10,6 +10,12 @@ CC   = gcc
 EBIND  = emxbind
 LDFLAGS        =
 
+# Perl script for macro file conversion
+CVT=macpack/cvt-mac.pl
+
+# -----------------------------------------------------------------------------
+# List of all object files
+
 OBJS =  anonname.o      \
         asserts.o       \
         condasm.o      \
@@ -50,6 +56,16 @@ OBJS =  anonname.o      \
                toklist.o       \
        ulabel.o
 
+# -----------------------------------------------------------------------------
+# List of all macro files
+
+INCS = cbm.inc         \
+       cpu.inc         \
+       generic.inc     \
+        longbranch.inc
+
+# -----------------------------------------------------------------------------
+
 LIBS = $(COMMON)/common.a
 
 EXECS = ca65
@@ -63,12 +79,12 @@ all:        depend
        @$(MAKE) -f make/gcc.mak all
 endif
 
-
-
-ca65:   $(OBJS) $(LIBS)
+ca65:   $(INCS) $(OBJS) $(LIBS)
        $(CC) $(CFLAGS) -o $@ $(OBJS) $(LIBS)
        @if [ $(OS2_SHELL) ] ;  then $(EBIND) $@ ; fi
 
+inc:   $(INCS)
+
 clean:
        rm -f *~ core *.lst
 
@@ -83,4 +99,27 @@ depend dep:  $(OBJS:.o=.c)
        @echo "Creating dependency information"
        $(CC) -I$(COMMON) -MM $^ > .depend
 
+# -----------------------------------------------------------------------------
+# Rules to make config includes
+
+cbm.inc:       macpack/cbm.mac
+       @$(CVT) $< $@ MacCBM
+
+cpu.inc:       macpack/cpu.mac
+       @$(CVT) $< $@ MacCPU
+
+generic.inc:           macpack/generic.mac
+       @$(CVT) $< $@ MacGeneric
+
+longbranch.inc:        macpack/longbranch.mac
+       @$(CVT) $< $@ MacLongBranch
+
+
+
+
+
+
+
+
+