Skip to content

Commit 745c9be

Browse files
committed
New release - merge with FP version.
1 parent 4290481 commit 745c9be

32 files changed

+2662
-982
lines changed

Makefile

Lines changed: 106 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,35 @@
11
CXX=g++
22
CXXFLAGS=-O2 -Wall
3+
SYNTFLAGS=
4+
SYNTFP=-DFASTBASIC_FP
5+
FPASM=--asm-define FASTBASIC_FP --asm-include-dir gen/fp
6+
INTASM=--asm-include-dir gen/int
7+
FPCXX=-DFASTBASIC_FP -Igen/fp
8+
INTCXX=-Igen/int
39

410
# Cross
5-
CL65OPTS=-g -tatari -Csrc/fastbasic.cfg --asm-include-dir gen
11+
CL65OPTS=-g -tatari -Csrc/fastbasic.cfg
612

713
ATR=fastbasic.atr
8-
PROG=bin/fastbasic.xex
9-
NATIVE=bin/fastbasic
14+
PROGS=bin/fb.xex bin/fbi.xex
15+
NATIVE_INT=bin/fastbasic-int
16+
NATIVE_FP=bin/fastbasic
17+
18+
NATIVES=$(NATIVE_INT) $(NATIVE_FP)
1019

1120
# Sample programs
12-
SAMPLE_BAS=\
13-
carrera3d.bas \
14-
draw.bas \
15-
pmtest.bas \
16-
sieve.bas \
21+
SAMPLE_FP_BAS=\
22+
fp/ahlbench.bas \
23+
fp/draw.bas \
24+
25+
SAMPLE_INT_BAS=\
26+
int/pi.bas \
27+
int/carrera3d.bas \
28+
int/pmtest.bas \
29+
int/sieve.bas \
30+
31+
SAMPLE_BAS=$(SAMPLE_INT_BAS) $(SAMPLE_FP_BAS)
32+
SAMPLE_X_BAS=$(SAMPLE_FP_BAS:fp/%=%) $(SAMPLE_INT_BAS:int/%=%)
1733

1834
# Test programs
1935
TEST_BAS=\
@@ -26,19 +42,21 @@ TEST_BAS=\
2642
# Output files inside the ATR
2743
FILES=\
2844
disk/fb.com \
45+
disk/fbi.com \
2946
disk/readme \
3047
disk/manual.txt \
3148
disk/startup.bat \
3249
disk/help.txt \
3350
$(TEST_BAS:%=disk/%) \
34-
$(SAMPLE_BAS:%=disk/%) \
35-
$(SAMPLE_BAS:%.bas=disk/%.com) \
51+
$(SAMPLE_X_BAS:%=disk/%) \
52+
$(SAMPLE_X_BAS:%.bas=disk/%.com) \
3653

3754
# BW-DOS files to copy inside the ATR
3855
DOSDIR=disk/dos/
3956
DOS=\
4057
xbw130.dos\
4158
copy.com\
59+
pause.com\
4260

4361
# ASM files used in the RUNTIME
4462
RT_AS_SRC=\
@@ -64,43 +82,50 @@ BAS_SRC=\
6482
src/editor.bas\
6583

6684
# Object files
67-
RT_OBJS=$(RT_AS_SRC:src/%.asm=obj/%.o)
68-
IDE_OBJS=$(IDE_AS_SRC:src/%.asm=obj/%.o)
69-
COMMON_OBJS=$(COMMON_AS_SRC:src/%.asm=obj/%.o)
70-
BAS_OBJS=$(BAS_SRC:src/%.bas=obj/%.o)
85+
RT_OBJS_FP=$(RT_AS_SRC:src/%.asm=obj/fp/%.o)
86+
IDE_OBJS_FP=$(IDE_AS_SRC:src/%.asm=obj/fp/%.o)
87+
COMMON_OBJS_FP=$(COMMON_AS_SRC:src/%.asm=obj/fp/%.o)
88+
BAS_OBJS_FP=$(BAS_SRC:src/%.bas=obj/fp/%.o)
89+
90+
RT_OBJS_INT=$(RT_AS_SRC:src/%.asm=obj/int/%.o)
91+
IDE_OBJS_INT=$(IDE_AS_SRC:src/%.asm=obj/int/%.o)
92+
COMMON_OBJS_INT=$(COMMON_AS_SRC:src/%.asm=obj/int/%.o)
93+
BAS_OBJS_INT=$(BAS_SRC:src/%.bas=obj/int/%.o)
7194
SAMP_OBJS=$(SAMPLE_BAS:%.bas=obj/%.o)
7295

73-
# Listing files
74-
RT_LSTS=$(RT_AS_SRC:src/%.asm=obj/%.lst)
75-
IDE_LSTS=$(IDE_AS_SRC:src/%.asm=obj/%.lst)
76-
COMMON_LSTS=$(COMMON_AS_SRC:src/%.asm=obj/%.lst)
77-
BAS_LSTS=$(BAS_SRC:src/%.bas=obj/%.lst)
78-
SAMP_LSTS=$(SAMPLE_BAS:%.bas=obj/%.lst)
79-
8096
# All Output files
81-
OBJS=$(RT_OBJS) $(IDE_OBJS) $(COMMON_OBJS) $(BAS_OBJS) $(SAMP_OBJS)
82-
LSTS=$(RT_LSTS) $(IDE_LSTS) $(COMMON_LSTS) $(BAS_LSTS) $(SAMP_LSTS)
97+
OBJS=$(RT_OBJS_FP) $(IDE_OBJS_FP) $(COMMON_OBJS_FP) $(BAS_OBJS_FP) \
98+
$(RT_OBJS_INT) $(IDE_OBJS_INT) $(COMMON_OBJS_INT) $(BAS_OBJS_INT) \
99+
$(SAMP_OBJS)
100+
LSTS=$(OBJS:%.o=%.lst)
83101

84-
MAPS=$(PROG:.xex=.map) $(SAMPLE_BAS:%.bas=bin/%.map)
85-
LBLS=$(PROG:.xex=.lbl) $(SAMPLE_BAS:%.bas=bin/%.lbl)
102+
MAPS=$(PROGS:.xex=.map) $(SAMPLE_X_BAS:%.bas=bin/%.map)
103+
LBLS=$(PROGS:.xex=.lbl) $(SAMPLE_X_BAS:%.bas=bin/%.lbl)
86104
SYNT=gen/synt
87105
CSYNT=gen/csynt
88106

89-
all: $(ATR) $(NATIVE)
107+
all: $(ATR) $(NATIVES)
90108

91109
clean:
92-
rm -f $(OBJS) $(LSTS) $(FILES) $(ATR) $(PROG) $(MAPS) $(LBLS) $(SYNT) $(CSYNT) $(NATIVE)
110+
rm -f $(OBJS) $(LSTS) $(FILES) $(ATR) $(PROGS) $(MAPS) $(LBLS) $(SYNT) $(CSYNT) $(NATIVES)
93111

94112
distclean: clean
95-
rm -f gen/basic.asm gen/basic.cc $(BAS_SRC:src/%.bas=gen/%.asm) $(SAMPLE_BAS:%.bas=gen/%.asm)
113+
rm -f gen/int/basic.asm gen/fp/basic.asm gen/int/basic.cc gen/fp/basic.cc \
114+
$(BAS_SRC:src/%.bas=gen/fp/%.asm) \
115+
$(BAS_SRC:src/%.bas=gen/int/%.asm) \
116+
$(SAMPLE_BAS:%.bas=gen/%.asm)
117+
-rmdir gen/fp gen/int obj/fp obj/int
96118
-rmdir bin gen obj
97119

98120
# Build an ATR disk image using "mkatr".
99121
$(ATR): $(DOS:%=$(DOSDIR)/%) $(FILES)
100122
mkatr $@ $(DOSDIR) -b $^
101123

102124
# BAS sources also transformed to ATASCII (replace $0A with $9B)
103-
disk/%.bas: samples/%.bas
125+
disk/%.bas: samples/fp/%.bas
126+
tr '\n' '\233' < $< > $@
127+
128+
disk/%.bas: samples/int/%.bas
104129
tr '\n' '\233' < $< > $@
105130

106131
disk/%.bas: tests/%.bas
@@ -114,9 +139,6 @@ disk/%.txt: %.md
114139
LC_ALL=C awk 'BEGIN{for(n=0;n<127;n++)chg[sprintf("%c",n)]=128+n} {l=length($$0);for(i=1;i<=l;i++){c=substr($$0,i,1);if(c=="`"){x=1-x;if(x)c="\002";else c="\026";}else if(x)c=chg[c];printf "%c",c;}printf "\233";}' < $< > $@
115140

116141
# Copy ".XEX" as ".COM"
117-
disk/fb.com: $(PROG)
118-
cp $< $@
119-
120142
disk/%.com: bin/%.xex
121143
cp $< $@
122144

@@ -129,43 +151,73 @@ $(CSYNT): src/csynt.cc | gen
129151
$(CXX) $(CXXFLAGS) -o $@ $<
130152

131153
# Native compiler
132-
$(NATIVE): src/native.cc gen/basic.cc | bin
133-
$(CXX) $(CXXFLAGS) -Igen -o $@ $<
154+
$(NATIVE_INT): src/native.cc gen/int/basic.cc | bin
155+
$(CXX) $(CXXFLAGS) $(INTCXX) -o $@ $<
156+
157+
$(NATIVE_FP): src/native.cc gen/fp/basic.cc | bin
158+
$(CXX) $(CXXFLAGS) $(FPCXX) -o $@ $<
159+
160+
# Generator for syntax file - 6502 version - FLOAT
161+
gen/fp/%.asm: src/%.syn $(SYNT) | gen/fp
162+
$(SYNT) $(SYNTFLAGS) $(SYNTFP) $< -o $@
134163

135-
# Generator for syntax file - 6502 version
136-
gen/%.asm: src/%.syn $(SYNT) | gen
137-
$(SYNT) < $< > $@
164+
# Generator for syntax file - 6502 version - INTEGER
165+
gen/int/%.asm: src/%.syn $(SYNT) | gen/int
166+
$(SYNT) $(SYNTFLAGS) $< -o $@
138167

139-
# Generator for syntax file - C++ version
140-
gen/%.cc: src/%.syn $(CSYNT) | gen
141-
$(CSYNT) < $< > $@
168+
# Generator for syntax file - C++ version - FLOAT
169+
gen/fp/%.cc: src/%.syn $(CSYNT) | gen/fp
170+
$(CSYNT) $(SYNTFLAGS) $(SYNTFP) $< -o $@
171+
172+
# Generator for syntax file - C++ version - INTEGER
173+
gen/int/%.cc: src/%.syn $(CSYNT) | gen/int
174+
$(CSYNT) $(SYNTFLAGS) $< -o $@
142175

143176
# Main program file
144-
$(PROG): $(IDE_OBJS) $(COMMON_OBJS) $(BAS_OBJS) | bin
177+
bin/fb.xex: $(IDE_OBJS_FP) $(COMMON_OBJS_FP) $(BAS_OBJS_FP) | bin
178+
cl65 $(CL65OPTS) -Ln $(@:.xex=.lbl) -vm -m $(@:.xex=.map) -o $@ $^
179+
180+
bin/fbi.xex: $(IDE_OBJS_INT) $(COMMON_OBJS_INT) $(BAS_OBJS_INT) | bin
145181
cl65 $(CL65OPTS) -Ln $(@:.xex=.lbl) -vm -m $(@:.xex=.map) -o $@ $^
146182

147183
# Compiled program files
148-
bin/%.xex: obj/%.o $(RT_OBJS) $(COMMON_OBJS) | bin
184+
bin/%.xex: obj/fp/%.o $(RT_OBJS_FP) $(COMMON_OBJS_FP) | bin
185+
cl65 $(CL65OPTS) -Ln $(@:.xex=.lbl) -vm -m $(@:.xex=.map) -o $@ $^
186+
187+
bin/%.xex: obj/int/%.o $(RT_OBJS_INT) $(COMMON_OBJS_INT) | bin
149188
cl65 $(CL65OPTS) -Ln $(@:.xex=.lbl) -vm -m $(@:.xex=.map) -o $@ $^
150189

151190
# Generates basic bytecode from source file
152-
gen/%.asm: src/%.bas $(NATIVE) | gen
153-
$(NATIVE) $< $@
191+
gen/fp/%.asm: src/%.bas $(NATIVE_FP) | gen/fp
192+
$(NATIVE_FP) $< $@
154193

155-
gen/%.asm: samples/%.bas $(NATIVE) | gen
156-
$(NATIVE) $< $@
194+
gen/int/%.asm: src/%.bas $(NATIVE_INT) | gen/int
195+
$(NATIVE_INT) $< $@
196+
197+
gen/fp/%.asm: samples/fp/%.bas $(NATIVE_FP) | gen/fp
198+
$(NATIVE_FP) $< $@
199+
200+
gen/int/%.asm: samples/int/%.bas $(NATIVE_INT) | gen/int
201+
$(NATIVE_INT) $< $@
157202

158203
# Object file rules
159-
obj/%.o: src/%.asm | obj
160-
cl65 $(CL65OPTS) -c -l $(@:.o=.lst) -o $@ $<
204+
obj/fp/%.o: src/%.asm | obj/fp
205+
cl65 $(CL65OPTS) $(FPASM) -c -l $(@:.o=.lst) -o $@ $<
206+
207+
obj/fp/%.o: gen/fp/%.asm | obj/fp
208+
cl65 $(CL65OPTS) $(FPASM) -c -l $(@:.o=.lst) -o $@ $<
209+
210+
obj/int/%.o: src/%.asm | obj/int
211+
cl65 $(CL65OPTS) $(INTASM) -c -l $(@:.o=.lst) -o $@ $<
161212

162-
obj/%.o: gen/%.asm | obj
163-
cl65 $(CL65OPTS) -c -l $(@:.o=.lst) -o $@ $<
213+
obj/int/%.o: gen/int/%.asm | obj/int
214+
cl65 $(CL65OPTS) $(INTASM) -c -l $(@:.o=.lst) -o $@ $<
164215

165-
gen obj bin:
216+
gen obj obj/fp obj/int gen/fp gen/int bin:
166217
mkdir -p $@
167218

168219
# Dependencies
169-
obj/parse.o: src/parse.asm gen/basic.asm
170-
$(CSYNT): src/csynt.cc src/synt-parse.h src/synt-wlist.h src/synt-sm.h src/synt-emit-cc.h
171-
$(SYNT): src/synt.cc src/synt-parse.h src/synt-wlist.h src/synt-sm.h src/synt-emit-asm.h
220+
obj/fp/parse.o: src/parse.asm gen/fp/basic.asm
221+
obj/int/parse.o: src/parse.asm gen/int/basic.asm
222+
$(CSYNT): src/csynt.cc src/synt-parse.h src/synt-wlist.h src/synt-sm.h src/synt-emit-cc.h src/synt-read.h
223+
$(SYNT): src/synt.cc src/synt-parse.h src/synt-wlist.h src/synt-sm.h src/synt-emit-asm.h src/synt-read.h

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ This is a fast interpreter for the BASIC language on the Atari 8-bit computers.
55

66
The current features are:
77
- Support for 16bit integer variables;
8-
- Small size (currently the IDE is less than 9k, and the runtime is less than 2k);
8+
- Small size (currently the IDE is less than 10k, and the runtime is less than 3k);
99
- Fast execution (currently, about 15% faster than compiled TurboBasicXL in the "sieve.bas" benchmark, 3.5 times faster than OSS Integer Basic);
1010
- Modern syntax (no line numbers, many control structures);
1111
- Feels "alike" TurboBasicXL, with many of the extended statements.

help.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
'
2-
' FastBasic - (c) 2017 dmsc
2+
' FastBasic - (c) 2017 dmsc
33
'
44
' Editor Help
55
' -----------

0 commit comments

Comments
 (0)