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:
parent
5cf71b0dea
commit
805982dc8a
8 changed files with 283 additions and 161 deletions
|
@ -1,3 +1,8 @@
|
|||
.depend
|
||||
ca65
|
||||
.kdbgrc.ca65
|
||||
cbm.inc
|
||||
cpu.inc
|
||||
generic.inc
|
||||
longbranch.inc
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
|
22
src/ca65/macpack/cbm.mac
Normal file
22
src/ca65/macpack/cbm.mac
Normal 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
19
src/ca65/macpack/cpu.mac
Normal 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
75
src/ca65/macpack/cvt-mac.pl
Executable 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;
|
||||
|
||||
|
||||
|
||||
|
21
src/ca65/macpack/generic.mac
Normal file
21
src/ca65/macpack/generic.mac
Normal 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
|
||||
|
88
src/ca65/macpack/longbranch.mac
Normal file
88
src/ca65/macpack/longbranch.mac
Normal 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
|
|
@ -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
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue