From 805982dc8a2e1002c576eab40abee36a5b623f9b Mon Sep 17 00:00:00 2001 From: cuz Date: Mon, 22 Aug 2005 17:05:03 +0000 Subject: [PATCH] Move the macro package sources into own files git-svn-id: svn://svn.cc65.org/cc65/trunk@3583 b7a2c559-68d2-44c3-8de9-860c34a00d81 --- src/ca65/.cvsignore | 5 + src/ca65/macpack.c | 169 +++----------------------------- src/ca65/macpack/cbm.mac | 22 +++++ src/ca65/macpack/cpu.mac | 19 ++++ src/ca65/macpack/cvt-mac.pl | 75 ++++++++++++++ src/ca65/macpack/generic.mac | 21 ++++ src/ca65/macpack/longbranch.mac | 88 +++++++++++++++++ src/ca65/make/gcc.mak | 45 ++++++++- 8 files changed, 283 insertions(+), 161 deletions(-) create mode 100644 src/ca65/macpack/cbm.mac create mode 100644 src/ca65/macpack/cpu.mac create mode 100755 src/ca65/macpack/cvt-mac.pl create mode 100644 src/ca65/macpack/generic.mac create mode 100644 src/ca65/macpack/longbranch.mac diff --git a/src/ca65/.cvsignore b/src/ca65/.cvsignore index 6c020cad8..605aeec6f 100644 --- a/src/ca65/.cvsignore +++ b/src/ca65/.cvsignore @@ -1,3 +1,8 @@ .depend ca65 .kdbgrc.ca65 +cbm.inc +cpu.inc +generic.inc +longbranch.inc + diff --git a/src/ca65/macpack.c b/src/ca65/macpack.c index c721aa158..f9c77c612 100644 --- a/src/ca65/macpack.c +++ b/src/ca65/macpack.c @@ -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 */ @@ -49,158 +49,11 @@ -/* 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 index 000000000..6850c7b43 --- /dev/null +++ b/src/ca65/macpack/cbm.mac @@ -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 index 000000000..837b74071 --- /dev/null +++ b/src/ca65/macpack/cpu.mac @@ -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 index 000000000..0b56690fd --- /dev/null +++ b/src/ca65/macpack/cvt-mac.pl @@ -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 = ) { + + # 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 index 000000000..6f88c8159 --- /dev/null +++ b/src/ca65/macpack/generic.mac @@ -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 index 000000000..b053202ce --- /dev/null +++ b/src/ca65/macpack/longbranch.mac @@ -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 diff --git a/src/ca65/make/gcc.mak b/src/ca65/make/gcc.mak index 97de9ebda..3eeecb781 100644 --- a/src/ca65/make/gcc.mak +++ b/src/ca65/make/gcc.mak @@ -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 + + + + + + + + + -- 2.39.5