/
Export.spin
341 lines (294 loc) · 23.9 KB
/
Export.spin
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
con{{
---------------------------------------------------------------------------------------------------------
Hive-Computer-Projekt
Name : TRIOS-Basic
Chip : Regnatix-Code
Version : 2.108
Dateien :
Beschreibung : Exportmodul für Basic-Dateien ->exportiert ein, im Speicher befindliches Basic-Programm als Textdatei auf die SD-Karte
Notes:
01-05-2014 -erste funktionierende Version
-um die Sache optisch besser zu gestalten, wird noch ein Hinweisfenster mit dem System-Tile-Font erstellt
-6901 Longs frei
}}
obj
ios :"reg-ios-bas"
gc :"glob-con"
con
_CLKMODE = XTAL1 + PLL16X
_XINFREQ = 5_000_000
version = 2.108
fEof = $FF ' dateiende-kennung
linelen = 85 ' Maximum input line length
quote = 34 ' Double quote
caseBit = !32 ' Uppercase/Lowercase bit
point = 46 ' point
STR_LEN = 34 ' Stringlänge von Stringvariablen in Arrays
FIELD_LEN = 512 ' Array-Feldgröße (max Feldgröße 8x8x8 -> Dim a(7,7,7)
DIR_ENTRY = 546 ' max.Anzahl mit DIR-Befehl gefundener Einträge
STR_MAX = 41 ' maximale Stringlänge für Printausgaben und font
DPL_CNT = 1200 ' Map-und Bildschirm-Shadow-Speicher-Zähler (40Spalten*30Zeilen=1200-Tiles)
'*****************Speicherbereiche**********************************************
maxstack = 20 ' Maximum stack tiefe fuer gosub
userPtr = $1FFFF ' Ende Programmspeicher 128kb
TMP_RAM = $20000 '....$3FFFF ' Bearbeitungsspeicher 128kb (fuer die Zeileneditierung bzw.Einfuegung von Zeilen)
TILE_RAM = $40000 '....$667FF ' hier beginnt der Tile-Speicher fuer 14 Tiledateien
SYS_FONT = $66800 '....$693FF ' ab hier liegt der System-Font 11kb
MOUSE_RAM = $69400 '....$6943F ' User-Mouse-Pointer 64byte
DIR_RAM = $69440 '....$6AFFF ' Puffer fuer Dateinamen 7103Bytes fuer 546 Dateinamen
VAR_RAM = $6B000 '....$77FFF ' Variablen-Speicher fuer Array-Variablen a[0...511]-z[0...511] (13312 moegliche Variablen)
MAP_RAM = $78000 '....$79C27 ' Shadow-Display (Pseudo-Kopie des Bildschirmspeichers)
'FREI_RAM $79C28 .... $79FFF ' freier RAM-Bereich 984 Bytes auch für Shadow-Display
DATA_RAM = $7A000 '.... $7DFFF ' 16kB DATA-Speicher
BUTT_RAM = $7E000 '.... $7E4FF ' ca.1kB Button Puffer
WTILE_RAM= $7E500 '.... $7E5FF ' Win-Tile Puffer hier können die Tiles, aus denen die Fenster gebaut werden geändert werden
FUNC_RAM = $7E600 '.... $7EFFF ' Funktions-Speicher, hier werden die selbstdefinierten Funktionen gespeichert
ERROR_RAM = $7F000 '....$7FAFF ' ERROR-Texte
DIM_VAR = $7FB00 '....$7FBFF ' Variablen-Array-Dimensionstabelle
DIM_STR = $7FC00 '....$7FCFF ' String-Array-Dimensionstabelle
BACK_RAM = $7FD00 '....$7FDFF ' BACKUP RAM-Bereich 256 Bytes für Ladebalken
'Frei-Ram = $7FE00 ....$7FEFF ' noch freier Bereich 256 Bytes
PMARK_RAM = $7FFF0 ' Flag für Reclaim Wert= 161
BMARK_RAM = $7FFF1 ' Flag für Basic-Warm-Start Wert= 121
SMARK_RAM = $7FFF2 ' Flag für übergebenen Startparameter Wert = 222
STR_ARRAY = $80000 '....$EE7FF ' Stringarray-Speicher
USER_RAM = $EE800 '....$FFEFF ' Freier Ram-Bereich, für Anwender, Backup-Funktion usw.
ADM_SPEC = gc#A_FAT|gc#A_LDR|gc#A_SID|gc#A_LAN|gc#A_RTC|gc#A_PLX'%00000000_00000000_00000000_11110011
'***************** Button-Anzahl ************************************************
BUTTON_CNT = 32 'Anzahl der möglichen Button
'******************Farben ********************************************************
#$FC, Light_Grey, #$A8, Grey, #$54, Dark_Grey
#$C0, Light_Red, #$80, Red, #$40, Dark_Red
#$30, Light_Green, #$20, Green, #$10, Dark_Green
#$1F, Light_Blue, #$09, Blue, #$04, Dark_Blue
#$F0, Light_Orange, #$E6, Orange, #$92, Dark_Orange
#$CC, Light_Purple, #$88, Purple, #$44, Dark_Purple
#$3C, Light_Teal, #$28, Teal, #$14, Dark_Teal
#$FF, White, #$00, Black
'*****************Tastencodes*****************************************************
ENTF_KEY = 186
bspKey = $C8 ' PS/2 keyboard backspace key
breakKey = $CB ' PS/2 keyboard escape key
fReturn = 13
fLinefeed = 10
KEY_LEFT = 2
KEY_RIGHT = 3
KEY_UP = 4
KEY_DOWN = 5
MIN_EXP = -999999
MAX_EXP = 999999
var
long speicheranfang,speicherende 'Startadresse-und Endadresse des Basic-Programms
byte tline[20] 'Eingabezeilen-Puffer
dat
tok0 byte "IF",0 '128 getestet
tok1 byte "THEN",0 '129 getestet
tok110 byte "ELSE",0 '238 getestet
tok2 byte "INPUT",0 ' INPUT {"<prompt>";} <var> {,<var>} '130 getestet
tok3 byte "PRINT",0 ' PRINT '131 getestet
tok88 byte "ON",0 ' ON GOSUB GOTO 216 getestet
tok4 byte "GOTO",0 '132 getestet
tok5 byte "GOSUB", 0 '133 getestet
tok6 byte "RETURN", 0 '134 getestet
tok7 byte "REM", 0 '135 getestet
tok8 byte "NEW", 0 '136 getestet
tok9 byte "LIST", 0 'list <expr>,<expr> listet von bis zeilennummer 137 getestet NICHT AENDERN Funktionstaste!!
tok10 byte "RUN", 0 '138 getestet NICHT AENDERN Funktionstaste!!
tok26 byte "FOR", 0 ' FOR <var> = <expr> TO <expr> 154 getestet
tok27 byte "TO", 0 '155 getestet
tok28 byte "STEP", 0 ' optional STEP <expr> 156 getestet
tok29 byte "NEXT", 0 ' NEXT <var> 157 getestet
tok52 byte "END", 0 ' 180 getestet
tok53 byte "PAUSE", 0 ' PAUSE <time ms> {,<time us>} 181 getestet
tok58 byte "DUMP", 0 ' DUMP <startadress>,<anzahl zeilen>,<0..1> (0 Hram,1 Eram) 186 getestet
tok86 byte "BYE",0 ' Basic beenden 214 getestet NICHT AENDERN Funktionstaste!!
tok84 byte "INKEY",0 'Auf Tastendruck warten Rueckgabe ascii wert 212 getestet
tok85 byte "CLEAR",0 'alle Variablen loeschen 213 getestet
tok87 byte "PEEK",0 'Byte aus Speicher lesen momentan nur eram 215 getestet
tok80 byte "POKE",0 'Byte in Speicher schreiben momentan nur eram 208 getestet
tok89 byte "BEEP",0 'beep oder beep <expr> piepser in versch.Tonhoehen 217 getestet
tok92 byte "EDIT",0 'Zeile editieren 220 getestet
tok61 byte "RENUM",0 'Renumberfunktion 189 getestet
'************************** Dateioperationen **************************************************************
tok12 byte "OPEN", 0 ' OPEN " <file> ",<mode> 140 getestet
tok13 byte "FREAD", 0 ' FREAD <var> {,<var>} 141 getestet
tok14 byte "WRITE", 0 ' WRITE <"text"> : 142 getestet
tok15 byte "CLOSE", 0 ' CLOSE 143 getestet
tok16 byte "DEL", 0 ' DELETE " <file> " 144 getestet
tok17 byte "REN", 0 ' RENAME " <file> "," <file> " 145 getestet
tok102 byte "CHDIR",0 ' Verzeichnis wechseln 230 getestet kann nicht CD heissen, kollidiert sonst mit Hex-Zahlen-Auswertung in getanynumber
tok18 byte "DIR", 0 ' dir anzeige 146 getestet NICHT AENDERN Funktionstaste!!
tok19 byte "SAVE", 0 ' SAVE or SAVE [<expr>] or SAVE "<file>" 147 getestet NICHT AENDERN Funktionstaste!!
tok20 byte "LOAD", 0 ' LOAD or LOAD [<expr>] or LOAD "<file>" ,{<expr>} 148 getestet NICHT AENDERN Funktionstaste!!
tok54 byte "FILE", 0 ' FILE wert aus datei lesen oder in Datei schreiben 182 getestet
tok24 byte "GFILE",0 ' GETFILE rueckgabe der mit Dir gefundenen Dateien ,Dateinamen 152 getestet
tok78 byte "MKDIR",0 ' Verzeichnis erstellen 206 getestet
tok112 byte "GATTR",0 ' Dateiattribute auslesen 240 getestet
tok90 byte "BLOAD",0 'Bin Datei laden 218 getestet
tok57 byte "MKFILE", 0 'Datei erzeugen 185 getestet
'************************* logische Operatoren **********************************************************************
tok21 byte "NOT" ,0 ' NOT <logical> '139 getestet
tok22 byte "AND" ,0 ' <logical> AND <logical> '150 getestet
tok23 byte "OR", 0 ' <logical> OR <logical> '151 getestet
'************************* mathematische Funktionen *****************************************************************
tok11 byte "RND", 0 'Zufallszahl von x '139 getestet
tok46 byte "PI",0 'Kreiszahl PI '174 getestet
tok83 byte "FN",0 'mathematische Benutzerfunktionen 211 getestet
tok117 byte "ABS",0 ' 245 getestet
tok118 byte "SIN",0 '246 getestet
tok119 byte "COS",0 '247 getestet
tok120 byte "TAN",0 ' 248 getestet
tok121 byte "ATN",0 '249 getestet
tok122 byte "LN",0 ' 250 getestet
tok123 byte "SGN",0 ' 251 getestet
tok124 byte "SQR",0 ' 252 getestet
tok125 byte "EXP",0 ' 253 getestet
tok126 byte "INT",0 '254 getestet
'******************************** Mouse Befehle *********************************************************************
tok93 byte "MGET",0 'Mouse-xyz-position ' 221 getestet
tok97 byte "MB",0 'Mouse-Button ' 225 getestet
tok63 byte "MOUSE",0 'Mouse on off Mouse on,farbe ' 191 getestet
tok96 byte "MBOUND",0 'Mouse-Bereich definieren ' 224 getestet
'************************* Bildschirmbefehle ***********************************************************************
tok59 byte "COLOR",0 'Farbe setzen 1,2 Vordergrund,Hintergrund 187 getestet
tok60 byte "CLS",0 'Bildschirm loeschen cursor oberste Zeile Pos1 188 getestet
tok62 byte "POS",0 'Cursor an Pos x,y setzen -> Locate(x,y) 190 getestet
tok65 byte "GETX",0 'x-Cursorposition '193 getestet
tok66 byte "SCRDN",0 'n Zeilen runterscrollen -> Scrdown(n) 194 getestet
tok67 byte "SCRUP",0 'n Zeilen hochscrollen -> Scrup(n) 195 getestet
tok68 byte "CUR",0 'Cursor ein/ausschalten 196 getestet
tok45 byte "GETY",0 'y-Cursorposition '173 getestet
tok107 byte "HEX",0 'Ausgabe von Hexzahlen mit Print '235 getestet
tok73 byte "BIN",0 'Ausgabe von Binärzahlen mit Print '201 getestet
tok82 byte "LINE",0 'Linie zeichnen 210 getestet M0,M1,M2,M3
tok43 byte "RECT",0 'Rechteck 171 getestet M0,M1,M2,M3
tok64 byte "PSET",0 'Pixel setzen 192 getestet M0,M1,M2,M3
''************************* Modus0 ***********************************************************************
tok39 byte "WIN", 0 'Fenster C,T,S,R erstellen 167 * getestet M0,M1
tok74 byte "BUTTON",0 'Button erzeugen 202 getestet
tok103 byte "BOX",0 '2dbox zeichnen 231 getestet M0,M1
tok75 byte "RECOVER",0 'Bildschirmbereich wiederherstellen '203 getestet M0,M1
tok94 byte "BACKUP",0 'Bildschirmbereich sichern '222 getestet M0,M1
'************************* Modus1-3 ***********************************************************************
tok81 byte "CIRC",0 'Kreis zeichnen 209 getestet M1,M2,M3
tok44 byte "PTEST",0 'Pixeltest 172 getestet M1,M2,M3
'************************* Datum und Zeit funktionen ***************************************************************
tok70 byte "STIME",0 'Stunde:Minute:Sekunde setzen -> 198 getestet
tok71 byte "SDATE",0 'Datum setzen 199 getestet
tok76 byte "GTIME",0 'Zeit abfragen 204 getestet
tok77 byte "GDATE",0 'Datum abfragen 205 getestet
tok111 byte "TIMER",0 'Timer-Funktionen set,read,clear?,entry,delete 239 getestet
'**************************** STRINGFUNKTIONEN ********************************************************************
tok35 byte "LOWER$", 0 'String in Kleinbuchstaben zurückgeben 163 * getestet
tok104 byte "UPPER$",0 'String in Großbuchstaben zurückgeben '232 getestet
tok72 byte "LEFT$",0 'linken Teilstring zurückgeben '200 getestet
tok101 byte "MID$",0 'Teilstring ab Position n Zeichen zurückgeben '229 getestet
tok98 byte "RIGHT$",0 'rechten Teilstring zurückgeben '226 getestet
tok36 byte "COMP$", 0 'Stringvergleich 164 getestet
tok37 byte "LEN", 0 'Stringlänge zurueckgeben 165 getestet
tok48 byte "CHR$", 0 'CHR$(expr) 176 getestet
tok105 byte "ASC",0 'ASCII-Wert einer Stringvariablen zurueckgeben 233 getestet
tok56 byte "TAB", 0 'Tabulator setzen 184 getestet
tok113 byte "VAL",0 'String in FLOAT-Zahlenwert umwandeln 241 getestet
tok108 byte "STRING$",0 'Zeichenwiederholung 236 getestet
tok109 byte "DIM",0 'Stringarray dimensionieren 237 getestet
tok116 byte "INSTR",0 'Zeichenkette in einer anderen Zeichenkette suchen ' 244 getestet
'**************************** Grafik-Tile-Befehle NUR MODUS 0 ****************************************************
tok34 byte "TLOAD", 0 'Tileset in eram laden 162 getestet
tok51 byte "TILE", 0 'Tileblock aus aktuellem Tileset anzeigen 179 getestet
tok50 byte "STILE", 0 'tileset in bella laden 178 getestet
tok100 byte "TPIC",0 'komplettes Tileset als Bild anzeigen 228 getestet
tok25 byte "MAP", 0 'MAP-Befehle L=load,S=Save,D=Display,W=Write in Ram ' 153 * getestet
tok91 byte "PLAYER",0 'Spielerfigur-Parameter p,k,g(parameter,Keys,collision,get) 219 * getestet
tok114 byte "PLAYXY",0 'Spielerbewegung 242 getestet
tok95 byte "SPRITE",0 'Sprite-Parameter p, m, s(parameter, move,speed,usw) '223 * getestet
'**************************** Daten-Befehle *****************************************************************
tok38 byte "READ", 0 'Data Lesen '166 getestet
tok40 byte "DATA", 0 'Data-Anweisung '168 getestet
tok47 byte "RESTORE", 0 'Data-Zeiger zurücksetzen 175 getestet
'**************************** Funktionen der seriellen Schnittstelle **********************************************
tok115 byte "COM",0 '243 * getestet
'***********************SID-Synth-Befehle**************************************************************************
tok30 byte "SID", 0 'SID_Soundbefehle 158 getestet
tok31 byte "PLAY", 0 'SID DMP-Player '159 getestet
tok32 byte "GDMP", 0 'SID DMP-Player-Position '160 getestet
'************************ Port-Funktionen *************************************************************************
tok79 byte "PORT",0 'Port-Funktionen Port s,i,o,p 207 * getestet
tok55 byte "JOY",0 'Joystick abfragen für 2 Joysticks 183 getestet
tok106 byte "XBUS",0 'Zugriff auf System-Funktionen 234 getestet
'************************ ende Basic-Befehle **********************************************************************
'************************ Befehle in der Testphase ****************************************************************
tok33 byte "PUT", 0 'einzelnes Zeichen an x,y-Position ausgeben '161 gestestet - Verbleib noch offen
tok41 byte "RDEF",0 'Font umdefinieren '169
tok42 byte "SYS",0 'Systemfunktionen z.Bsp.anderer Grafikmodus '170
tok99 byte "BMP",0 'Bitmap laden, speichern, anzeigen (nur Mode4) '227
'******************************************************************************************************************
'******************************* freie Befehle für Erweiterungen **************************************************
tok49 byte "FREI1",0 'Frei 177
tok69 byte "FREI2",0 ' '197
' ---------------------------- Mehr Befehle sind nicht möglich --------------------------
'******************************************************************************************************************
toks word @tok0, @tok1, @tok2, @tok3, @tok4, @tok5, @tok6, @tok7
word @tok8, @tok9, @tok10, @tok11, @tok12, @tok13, @tok14, @tok15
word @tok16, @tok17, @tok18, @tok19, @tok20, @tok21, @tok22, @tok23
word @tok24, @tok25, @tok26, @tok27, @tok28, @tok29, @tok30, @tok31
word @tok32, @tok33, @tok34, @tok35, @tok36, @tok37, @tok38, @tok39
word @tok40, @tok41, @tok42, @tok43, @tok44, @tok45, @tok46, @tok47
word @tok48, @tok49, @tok50, @tok51, @tok52, @tok53, @tok54, @tok55
word @tok56, @tok57, @tok58, @tok59, @tok60, @tok61, @tok62, @tok63
word @tok64, @tok65, @tok66, @tok67, @tok68, @tok69, @tok70, @tok71
word @tok72, @tok73, @tok74, @tok75, @tok76, @tok77, @tok78, @tok79
word @tok80, @tok81, @tok82, @tok83, @tok84, @tok85, @tok86, @tok87
word @tok88, @tok89, @tok90, @tok91, @tok92, @tok93, @tok94, @tok95
word @tok96, @tok97, @tok98, @tok99, @tok100, @tok101, @tok102,@tok103
word @tok104, @tok105, @tok106, @tok107, @tok108, @tok109, @tok110
word @tok111, @tok112, @tok113, @tok114, @tok115, @tok116, @tok117
word @tok118, @tok119, @tok120, @tok121, @tok122, @tok123, @tok124
word @tok125, @tok126
tokx word
dat
BASIC byte "BASIC.BIN",0
pub main
ios.start
speicheranfang:=$0 'Programmspeicher beginnt ab adresse 0 im eRam
read_filename
ios.sdmount
ios.sdopen("W",@tline)
processsave
ios.sdclose
ios.sdopen("r",@basic)
ios.ldbin(@basic)
ios.sdclose
ios.stop
pri read_filename|i,adr
adr:=ios#PARAM
i:=0
repeat while tline[i++]:=ios.ram_rdbyte(adr++)
tline[i]:=0
speicherende:=ios.ram_rdlong(adr++)
PRI processSave | a, c, d,e, ntoks,n,stk,mtk',pr
ntoks :=(@tokx - @toks) / 2
a := speicheranfang
n:=speicherende
stk:=0 'SID_Befehlsmarker
mtk:=0 'Mathe-Funktions,arker
repeat while a+2 < n
d := ios.ram_rdword(a)
ios.sddec(d)
ios.sdputc(" ")
e := a + 2 'Speicherplatz
repeat while c := ios.ram_rdbyte(e++)
if c => 128
if (c -= 128) < ntoks
ios.sdputstr(@@toks[c]) 'Tokenname schreiben (@token)'
ios.sdputc(" ")
else
ios.sdputc(c)
ios.sdputc(fReturn)
ios.sdputc(fLinefeed)
a:=e 'ende Speicherplatz fuer naechste Zeile an a uebergeben
ios.printchar(46)
'percent(a-1,n) 'Speicheranzeige Fortschritts-Balken
'***************** noch eine leerzeile schreiben sonst fehlt die letzte zeile beim laden *****************
ios.sdputc(fReturn)
ios.sdputc(fLinefeed)