1
1
CXX =g++
2
2
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
3
9
4
10
# Cross
5
- CL65OPTS =-g -tatari -Csrc/fastbasic.cfg --asm-include-dir gen
11
+ CL65OPTS =-g -tatari -Csrc/fastbasic.cfg
6
12
7
13
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 )
10
19
11
20
# 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/%=% )
17
33
18
34
# Test programs
19
35
TEST_BAS =\
@@ -26,19 +42,21 @@ TEST_BAS=\
26
42
# Output files inside the ATR
27
43
FILES =\
28
44
disk/fb.com \
45
+ disk/fbi.com \
29
46
disk/readme \
30
47
disk/manual.txt \
31
48
disk/startup.bat \
32
49
disk/help.txt \
33
50
$(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 ) \
36
53
37
54
# BW-DOS files to copy inside the ATR
38
55
DOSDIR =disk/dos/
39
56
DOS =\
40
57
xbw130.dos\
41
58
copy.com\
59
+ pause.com\
42
60
43
61
# ASM files used in the RUNTIME
44
62
RT_AS_SRC =\
@@ -64,43 +82,50 @@ BAS_SRC=\
64
82
src/editor.bas\
65
83
66
84
# 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)
71
94
SAMP_OBJS=$(SAMPLE_BAS:%.bas =obj/%.o)
72
95
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
-
80
96
# 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)
83
101
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 )
86
104
SYNT =gen/synt
87
105
CSYNT =gen/csynt
88
106
89
- all : $(ATR ) $(NATIVE )
107
+ all : $(ATR ) $(NATIVES )
90
108
91
109
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 )
93
111
94
112
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
96
118
-rmdir bin gen obj
97
119
98
120
# Build an ATR disk image using "mkatr".
99
121
$(ATR ) : $(DOS:%=$(DOSDIR ) /% ) $(FILES )
100
122
mkatr $@ $(DOSDIR ) -b $^
101
123
102
124
# 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
104
129
tr ' \n' ' \233' < $< > $@
105
130
106
131
disk/% .bas : tests/% .bas
@@ -114,9 +139,6 @@ disk/%.txt: %.md
114
139
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";}' < $< > $@
115
140
116
141
# Copy ".XEX" as ".COM"
117
- disk/fb.com : $(PROG )
118
- cp $< $@
119
-
120
142
disk/% .com : bin/% .xex
121
143
cp $< $@
122
144
@@ -129,43 +151,73 @@ $(CSYNT): src/csynt.cc | gen
129
151
$(CXX ) $(CXXFLAGS ) -o $@ $<
130
152
131
153
# 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 $@
134
163
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 $@
138
167
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 $@
142
175
143
176
# 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
145
181
cl65 $(CL65OPTS ) -Ln $(@:.xex=.lbl ) -vm -m $(@:.xex=.map ) -o $@ $^
146
182
147
183
# 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
149
188
cl65 $(CL65OPTS ) -Ln $(@:.xex=.lbl ) -vm -m $(@:.xex=.map ) -o $@ $^
150
189
151
190
# 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 ) $< $@
154
193
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 ) $< $@
157
202
158
203
# 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 $@ $<
161
212
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 $@ $<
164
215
165
- gen obj bin :
216
+ gen obj obj/fp obj/int gen/fp gen/int bin :
166
217
mkdir -p $@
167
218
168
219
# 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
0 commit comments