Move the macro package sources into own files

git-svn-id: svn://svn.cc65.org/cc65/trunk@3583 b7a2c559-68d2-44c3-8de9-860c34a00d81
This commit is contained in:
cuz 2005-08-22 17:05:03 +00:00
parent 5cf71b0dea
commit 805982dc8a
8 changed files with 283 additions and 161 deletions

View file

@ -1,3 +1,8 @@
.depend
ca65
.kdbgrc.ca65
cbm.inc
cpu.inc
generic.inc
longbranch.inc

View 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 */
@ -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 [] = {
@ -225,7 +78,7 @@ void InsertMacPack (unsigned Id)
CHECK (Id < sizeof (MacPackages) / sizeof (MacPackages [0]));
/* Insert the package */
NewInputData (MacPackages [Id], 0);
NewInputData (MacPackages[Id], 0);
}

22
src/ca65/macpack/cbm.mac Normal file
View file

@ -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

19
src/ca65/macpack/cpu.mac Normal file
View file

@ -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

75
src/ca65/macpack/cvt-mac.pl Executable file
View file

@ -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;

View file

@ -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

View file

@ -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

View 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