Browse code

(dos.tal) Started a mini DOS

neauoire authored on 23/01/2022 04:47:01
Showing 1 changed files
1 1
new file mode 100644
... ...
@@ -0,0 +1,543 @@
1
+( gui/terminal )
2
+
3
+%+  { ADD }  %-  { SUB }  %*  { MUL }  %/  { DIV }
4
+%<  { LTH }  %>  { GTH }  %=  { EQU }  %!  { NEQ }
5
+%++ { ADD2 } %-- { SUB2 } %** { MUL2 } %// { DIV2 }
6
+%<< { LTH2 } %>> { GTH2 } %== { EQU2 } %!! { NEQ2 }
7
+
8
+%HALT   { #010f DEO }
9
+%EMIT   { #18 DEO }
10
+%PRINT  { ;print-str JSR2 #0a EMIT }
11
+%DEBUG  { ;print-hex/byte JSR2 #0a EMIT }
12
+%DEBUG2 { ;print-hex JSR2 #0a EMIT }
13
+
14
+%2*  { #10 SFT } %2/  { #01 SFT } %2**  { #10 SFT2 } %2//  { #01 SFT2 }
15
+%4*  { #20 SFT } %4/  { #02 SFT } %4**  { #20 SFT2 } %4//  { #02 SFT2 }
16
+%8*  { #30 SFT } %8/  { #03 SFT } %8**  { #30 SFT2 } %8//  { #03 SFT2 }
17
+%10* { #40 SFT } %10/ { #04 SFT } %10** { #40 SFT2 } %10// { #04 SFT2 }
18
+%20* { #50 SFT } %20/ { #05 SFT } %20** { #50 SFT2 } %20// { #05 SFT2 }
19
+
20
+%2MOD  { #01 AND } %2MOD2  { #0001 AND2 }
21
+%4MOD  { #03 AND } %4MOD2  { #0003 AND2 }
22
+%8MOD  { #07 AND } %8MOD2  { #0007 AND2 }
23
+%10MOD { #0f AND } %10MOD2 { #000f AND2 }
24
+
25
+%AUTO-NONE   { #00 .Screen/auto DEO }
26
+%AUTO-X      { #01 .Screen/auto DEO }
27
+%AUTO-Y      { #02 .Screen/auto DEO }
28
+%AUTO-XY     { #03 .Screen/auto DEO }
29
+%AUTO-ADDR   { #04 .Screen/auto DEO }
30
+%AUTO-XADDR  { #05 .Screen/auto DEO }
31
+%AUTO-YADDR  { #06 .Screen/auto DEO }
32
+%AUTO-XYADDR { #07 .Screen/auto DEO }
33
+%RELEASE-MOUSE { #0096 DEO }
34
+
35
+%RTN { JMP2r }
36
+
37
+%WIDTH { #50 }
38
+%HEIGHT { #28 }
39
+%PAD { #0020 }
40
+
41
+( devices )
42
+
43
+|00 @System     &vector $2 &wst      $1 &rst    $1 &eaddr  $2 &ecode  $1 &pad     $1 &r       $2 &g      $2 &b     $2 &debug  $1 &halt $1
44
+|20 @Screen     &vector $2 &width   $2 &height $2 &auto  $1 &pad   $1 &x     $2 &y $2 &addr $2 &pixel $1 &sprite $1
45
+|80 @Controller &vector $2 &button $1 &key    $1
46
+|a0 @File       &vector $2 &success  $2 &stat   $2 &delete $1 &append $1 &name    $2 &length  $2 &read   $2 &write $2
47
+
48
+( variables )
49
+
50
+|0000
51
+
52
+@buffer $80
53
+@path $40
54
+
55
+( init )
56
+
57
+|0100 ( -> )
58
+
59
+	( theme ) 
60
+	#0f55 .System/r DEO2 
61
+	#0fc5 .System/g DEO2 
62
+	#0fa5 .System/b DEO2
63
+
64
+	( vectors ) 
65
+	;on-button .Controller/vector DEO2
66
+
67
+	( resize )
68
+	#00 WIDTH 8** PAD 2** ++ .Screen/width DEO2
69
+	#00 HEIGHT 8** PAD 2** ++ .Screen/height DEO2
70
+
71
+	#08 ;draw-input JSR2
72
+
73
+	LIT '. .path STZ
74
+
75
+	;clear JSR2
76
+
77
+BRK
78
+
79
+@on-button ( -> )
80
+
81
+	.Controller/key DEI
82
+	DUP #00 ! ,&no-null JCN
83
+		POP BRK
84
+		&no-null
85
+	DUP #0d ! ,&no-enter JCN
86
+		#00 ;draw-input JSR2
87
+		;validate JSR2
88
+		#01 ;draw-input JSR2
89
+		&no-enter
90
+	DUP #08 ! ,&no-backspace JCN
91
+		#00 ;draw-input JSR2
92
+		;buffer ;spop JSR2
93
+		#08 ;draw-input JSR2
94
+		&no-backspace
95
+	DUP STHk #1f > STHr #7b < #0101 !! ,&no-valid JCN
96
+	;buffer ;slen JSR2 #007f >> ,&no-valid JCN
97
+		STHk ;buffer STHr ;sput JSR2
98
+		#08 ;draw-input JSR2
99
+		&no-valid
100
+	POP
101
+
102
+BRK
103
+
104
+@clear ( -- )
105
+
106
+	PAD .Screen/x DEO2
107
+	PAD .Screen/y DEO2
108
+	;&blank-icn .Screen/addr DEO2
109
+	AUTO-X
110
+	HEIGHT #00
111
+	&ver
112
+		WIDTH #00
113
+		&hor
114
+			#03 .Screen/sprite DEO
115
+			INC GTHk ,&hor JCN
116
+		POP2
117
+		PAD .Screen/x DEO2
118
+		.Screen/y DEI2k #0008 ++ ROT DEO2
119
+		INC GTHk ,&ver JCN
120
+	POP2
121
+	AUTO-NONE
122
+
123
+RTN
124
+	&blank-icn 8000 0000 0000 0000
125
+
126
+@validate ( -- )
127
+	
128
+	;clear JSR2
129
+	;get-cmd JSR2 #0003 ++ JSR2
130
+	;buffer #0080 ;mclr JSR2
131
+
132
+JMP2r
133
+
134
+@get-cmd ( -- cmd* )
135
+
136
+	;commands/end ;commands
137
+	&loop
138
+		LDA2k ;buffer ;scmp-seg JSR2 #00 = ,&continue JCN
139
+			NIP2 LDA2 RTN
140
+			&continue
141
+		INC2 INC2 GTH2k ,&loop JCN
142
+	&end
143
+	POP2 LDA2
144
+
145
+RTN
146
+
147
+@cmd-ls 
148
+	&name "ls $1
149
+	&run
150
+	;path .File/name DEO2
151
+	#8000 .File/length DEO2
152
+	;view .File/read DEO2
153
+
154
+	PAD .Screen/x DEO2
155
+	PAD .Screen/y DEO2
156
+
157
+	;view #01 ;draw-tx JSR2
158
+
159
+RTN
160
+
161
+@cmd-cp 
162
+	&name "cp $1
163
+	&run
164
+
165
+RTN
166
+
167
+@cmd-mv 
168
+	&name "mv $1
169
+	&run
170
+
171
+RTN
172
+
173
+@cmd-rm 
174
+	&name "rm $1
175
+	&run
176
+
177
+RTN
178
+
179
+@cmd-tx
180
+	&name "tx $1 ( print file text )
181
+	&run
182
+
183
+	;buffer #0003 ++ .File/name DEO2
184
+	#8000 .File/length DEO2
185
+	;view .File/read DEO2
186
+
187
+	PAD .Screen/x DEO2
188
+	PAD .Screen/y DEO2
189
+
190
+	.File/success DEI2 #0000 >> ,&continue JCN
191
+		;&error-txt #02 ;draw-str JSR2
192
+		RTN
193
+		&continue
194
+
195
+	;view #01 ;draw-tx JSR2
196
+
197
+RTN
198
+	&error-txt "unknown_file $1
199
+
200
+@cmd-hx
201
+	&name "hx $1 ( print file hex )
202
+	&run
203
+
204
+	;buffer #0003 ++ .File/name DEO2
205
+	#8000 .File/length DEO2
206
+	;view .File/read DEO2
207
+
208
+	PAD .Screen/x DEO2
209
+	PAD .Screen/y DEO2
210
+
211
+	.File/success DEI2 #0000 >> ,&continue JCN
212
+		;&error-txt #02 ;draw-str JSR2
213
+		RTN
214
+		&continue
215
+
216
+	AUTO-YADDR
217
+	.Screen/x DEI2 ,&anchor STR2
218
+	;view #0014 ++ ;view
219
+	&loop
220
+		LDAk #01 ;draw-byte JSR2
221
+		LIT2 &anchor $2 .Screen/x DEO2
222
+		.Screen/y DEI2k #0010 ++ ROT DEO2
223
+		INC2 GTH2k ,&loop JCN
224
+	&end
225
+	POP2 POP2
226
+
227
+RTN
228
+	&error-txt "unknown_file $1
229
+
230
+@cmd-do
231
+	&name "do $1 ( print file hex )
232
+	&run
233
+
234
+	( release inputs )
235
+	#0000 .Controller/button DEO2
236
+
237
+	;buffer #0003 ++
238
+	DUP2 ;check-rom JSR2 ,&valid JCN
239
+		PAD .Screen/x DEO2
240
+		PAD .Screen/y DEO2
241
+		;&invalid-txt #02 ;draw-str JSR2
242
+		#01 ;draw-str JSR2
243
+		RTN
244
+		&valid
245
+	;load-rom JSR2 
246
+
247
+RTN
248
+	&invalid-txt "invalid_rom: $1
249
+
250
+@cmd-??
251
+	&name "-- $1
252
+	&run
253
+	PAD .Screen/x DEO2
254
+	PAD .Screen/y DEO2
255
+	;&help-txt #01 ;draw-tx JSR2
256
+	PAD #0020 ++ .Screen/y DEO2
257
+	;commands/end ;commands
258
+	&loop
259
+		PAD #0020 ++ .Screen/x DEO2
260
+		LDA2k #02 ;draw-str JSR2
261
+		.Screen/y DEI2k #0010 ++ ROT DEO2
262
+		INC2 INC2 GTH2k ,&loop JCN
263
+	&end
264
+	POP2 LDA2
265
+
266
+RTN
267
+	&help-txt "Available 20 "commands: $1
268
+
269
+@commands
270
+	:cmd-ls :cmd-cp :cmd-mv :cmd-rm 
271
+	:cmd-hx :cmd-tx :cmd-do
272
+	&end :cmd-??
273
+
274
+@draw-input ( color -- )
275
+
276
+	AUTO-YADDR
277
+	STH
278
+	PAD .Screen/x DEO2
279
+	.Screen/height DEI2 PAD -- .Screen/y DEO2
280
+
281
+	( marker ) LIT '> #01 ;draw-char JSR2
282
+
283
+	#20 #00 ;draw-char JSR2
284
+
285
+	;buffer STHr ;draw-str JSR2
286
+
287
+JMP2r
288
+
289
+@draw-byte ( byte color -- )
290
+
291
+	STH
292
+	DUP #04 SFT ,&parse JSR STHkr ;draw-char JSR2
293
+	#0f AND ,&parse JSR STHr ;draw-char JSR2
294
+	RTN
295
+	&parse ( value -- char )
296
+		DUP #09 > ,&above JCN
297
+			#30 + RTN
298
+		&above
299
+			#09 - #60 + RTN
300
+
301
+RTN
302
+
303
+@draw-tx ( str* color -- )
304
+
305
+	AUTO-YADDR
306
+	.Screen/x DEI2 ,&anchor STR2
307
+	STH
308
+	&while
309
+		( outside view )
310
+		.Screen/x DEI2 .Screen/width DEI2 PAD -- #0010 -- >> ,&lb JCN
311
+		( linebreak )
312
+		LDAk #0a ! ,&no-lb JCN
313
+			&lb
314
+			LIT2 &anchor $2 .Screen/x DEO2
315
+			.Screen/y DEI2k #0010 ++ STH2k ROT DEO2
316
+			STH2r .Screen/height DEI2 PAD -- #0010 -- >> ,&end JCN
317
+			,&skip JMP
318
+			&no-lb
319
+		LDAk STHkr ,draw-char JSR
320
+		&skip
321
+		INC2 LDAk ,&while JCN
322
+	&end
323
+	POP2
324
+	POPr
325
+
326
+RTN
327
+
328
+@draw-str ( str* color -- )
329
+
330
+	AUTO-YADDR
331
+	STH
332
+	&while
333
+		LDAk STHkr ,draw-char JSR
334
+		INC2 LDAk ,&while JCN
335
+	POP2
336
+	POPr
337
+
338
+RTN
339
+
340
+@draw-char ( char color -- )
341
+
342
+	SWP
343
+	[ #20 - #00 SWP #40 SFT2 ;font ++ ] .Screen/addr DEO2
344
+	.Screen/sprite DEOk DEO
345
+	.Screen/y DEI2 #0010 -- .Screen/y DEO2
346
+	.Screen/x DEI2 #0008 ++ .Screen/x DEO2
347
+
348
+RTN
349
+
350
+( utils )
351
+
352
+@slen ( str* -- len* )
353
+
354
+	DUP2 ,scap JSR SWP2 --
355
+
356
+RTN
357
+
358
+@scap ( str* -- str-end* )
359
+
360
+	( clamp ) LDAk #00 ! JMP RTN
361
+	&while INC2 LDAk ,&while JCN
362
+
363
+RTN
364
+
365
+@sput ( str* char -- )
366
+
367
+	ROT ROT ,scap JSR STA
368
+
369
+RTN
370
+
371
+@spop ( str* -- )
372
+
373
+	( clamp ) LDAk #00 ! JMP RTN
374
+	#00 ROT ROT ,scap JSR #0001 -- STA
375
+
376
+RTN
377
+
378
+@scmp ( a* b* -- flag )
379
+
380
+	STH2
381
+	&loop
382
+		LDAk LDAkr STHr = ,&not-diff JCN
383
+			POP2 POP2r #00 RTN
384
+			&not-diff
385
+		LDAk LDAkr STHr #0000 !! ,&not-end JCN
386
+			POP2 POP2r #01 RTN
387
+			&not-end
388
+		INC2 INC2r
389
+		,&loop JMP
390
+	POP2 POP2r #00
391
+
392
+RTN
393
+
394
+@scmp-seg ( a* b* -- flag )
395
+
396
+	STH2
397
+	&loop
398
+		LDAk LDAkr STHr = ,&not-diff JCN
399
+			POP2 POP2r #00 RTN
400
+			&not-diff
401
+		INC2k LDA #00 ! ,&continue JCN
402
+			POP2 POP2r #01 RTN
403
+			&continue
404
+		INC2 INC2r
405
+		,&loop JMP
406
+	POP2 POP2r #00
407
+
408
+RTN
409
+
410
+@mclr ( addr* len* -- )
411
+
412
+	OVR2 ++ SWP2
413
+	&loop
414
+		STH2k #00 STH2r STA
415
+		INC2 GTH2k ,&loop JCN
416
+	POP2 POP2
417
+
418
+JMP2r
419
+
420
+@print-hex ( value* -- )
421
+
422
+	SWP ,&byte JSR 
423
+	&byte ( byte -- )
424
+		STHk #04 SFT ,&parse JSR #18 DEO
425
+		STHr #0f AND ,&parse JSR #18 DEO
426
+	JMP2r
427
+	&parse ( byte -- char ) DUP #09 GTH ,&above JCN #30 ADD JMP2r 
428
+	&above #57 ADD JMP2r
429
+
430
+JMP2r
431
+
432
+@print-str ( string* -- )
433
+
434
+	#0001 SUB2 
435
+	&while
436
+		INC2 LDAk DUP #18 DEO ,&while JCN 
437
+	POP2
438
+
439
+JMP2r
440
+
441
+~projects/library/check-rom.tal
442
+~projects/library/load-rom.tal
443
+
444
+@strings
445
+	&you-said "You 20 "said 20 $1
446
+
447
+@font ( terminus01x02 )
448
+	0000 0000 0000 0000 0000 0000 0000 0000
449
+	0000 183c 3c3c 1818 1800 1818 0000 0000
450
+	0066 6666 2400 0000 0000 0000 0000 0000
451
+	0000 006c 6cfe 6c6c 6cfe 6c6c 0000 0000
452
+	1818 7cc6 c2c0 7c06 0686 c67c 1818 0000
453
+	0000 0000 c2c6 0c18 3060 c686 0000 0000
454
+	0000 386c 6c38 76dc cccc cc76 0000 0000
455
+	0030 3030 6000 0000 0000 0000 0000 0000
456
+	0000 0c18 3030 3030 3030 180c 0000 0000
457
+	0000 3018 0c0c 0c0c 0c0c 1830 0000 0000
458
+	0000 0000 0066 3cff 3c66 0000 0000 0000
459
+	0000 0000 0018 187e 1818 0000 0000 0000
460
+	0000 0000 0000 0000 0018 1818 3000 0000
461
+	0000 0000 0000 00fe 0000 0000 0000 0000
462
+	0000 0000 0000 0000 0000 1818 0000 0000
463
+	0000 0000 0206 0c18 3060 c080 0000 0000
464
+	0000 386c c6c6 d6d6 c6c6 6c38 0000 0000
465
+	0000 1838 7818 1818 1818 187e 0000 0000
466
+	0000 7cc6 060c 1830 60c0 c6fe 0000 0000
467
+	0000 7cc6 0606 3c06 0606 c67c 0000 0000
468
+	0000 0c1c 3c6c ccfe 0c0c 0c1e 0000 0000
469
+	0000 fec0 c0c0 fc06 0606 c67c 0000 0000
470
+	0000 3860 c0c0 fcc6 c6c6 c67c 0000 0000
471
+	0000 fec6 0606 0c18 3030 3030 0000 0000
472
+	0000 7cc6 c6c6 7cc6 c6c6 c67c 0000 0000
473
+	0000 7cc6 c6c6 7e06 0606 0c78 0000 0000
474
+	0000 0000 1818 0000 0018 1800 0000 0000
475
+	0000 0000 1818 0000 0018 1830 0000 0000
476
+	0000 0006 0c18 3060 3018 0c06 0000 0000
477
+	0000 0000 007e 0000 7e00 0000 0000 0000
478
+	0000 0060 3018 0c06 0c18 3060 0000 0000
479
+	0000 7cc6 c60c 1818 1800 1818 0000 0000
480
+	0000 007c c6c6 dede dedc c07c 0000 0000
481
+	0000 1038 6cc6 c6fe c6c6 c6c6 0000 0000
482
+	0000 fc66 6666 7c66 6666 66fc 0000 0000
483
+	0000 3c66 c2c0 c0c0 c0c2 663c 0000 0000
484
+	0000 f86c 6666 6666 6666 6cf8 0000 0000
485
+	0000 fe66 6268 7868 6062 66fe 0000 0000
486
+	0000 fe66 6268 7868 6060 60f0 0000 0000
487
+	0000 3c66 c2c0 c0de c6c6 663a 0000 0000
488
+	0000 c6c6 c6c6 fec6 c6c6 c6c6 0000 0000
489
+	0000 3c18 1818 1818 1818 183c 0000 0000
490
+	0000 1e0c 0c0c 0c0c cccc cc78 0000 0000
491
+	0000 e666 666c 7878 6c66 66e6 0000 0000
492
+	0000 f060 6060 6060 6062 66fe 0000 0000
493
+	0000 c6ee fefe d6c6 c6c6 c6c6 0000 0000
494
+	0000 c6e6 f6fe dece c6c6 c6c6 0000 0000
495
+	0000 7cc6 c6c6 c6c6 c6c6 c67c 0000 0000
496
+	0000 fc66 6666 7c60 6060 60f0 0000 0000
497
+	0000 7cc6 c6c6 c6c6 c6d6 de7c 0c0e 0000
498
+	0000 fc66 6666 7c6c 6666 66e6 0000 0000
499
+	0000 7cc6 c660 380c 06c6 c67c 0000 0000
500
+	0000 7e7e 5a18 1818 1818 183c 0000 0000
501
+	0000 c6c6 c6c6 c6c6 c6c6 c67c 0000 0000
502
+	0000 c6c6 c6c6 c6c6 c66c 3810 0000 0000
503
+	0000 c6c6 c6c6 d6d6 d6fe ee6c 0000 0000
504
+	0000 c6c6 6c7c 3838 7c6c c6c6 0000 0000
505
+	0000 6666 6666 3c18 1818 183c 0000 0000
506
+	0000 fec6 860c 1830 60c2 c6fe 0000 0000
507
+	0000 3c30 3030 3030 3030 303c 0000 0000
508
+	0000 0080 c0e0 7038 1c0e 0602 0000 0000
509
+	0000 3c0c 0c0c 0c0c 0c0c 0c3c 0000 0000
510
+	1038 6cc6 0000 0000 0000 0000 0000 0000
511
+	0000 0000 0000 0000 0000 0000 00ff 0000
512
+	3030 1800 0000 0000 0000 0000 0000 0000
513
+	0000 0000 0078 0c7c cccc cc76 0000 0000
514
+	0000 e060 6078 6c66 6666 667c 0000 0000
515
+	0000 0000 007c c6c0 c0c0 c67c 0000 0000
516
+	0000 1c0c 0c3c 6ccc cccc cc76 0000 0000
517
+	0000 0000 007c c6fe c0c0 c67c 0000 0000
518
+	0000 386c 6460 f060 6060 60f0 0000 0000
519
+	0000 0000 0076 cccc cccc cc7c 0ccc 7800
520
+	0000 e060 606c 7666 6666 66e6 0000 0000
521
+	0000 1818 0038 1818 1818 183c 0000 0000
522
+	0000 0606 000e 0606 0606 0606 6666 3c00
523
+	0000 e060 6066 6c78 786c 66e6 0000 0000
524
+	0000 3818 1818 1818 1818 183c 0000 0000
525
+	0000 0000 00ec fed6 d6d6 d6c6 0000 0000
526
+	0000 0000 00dc 6666 6666 6666 0000 0000
527
+	0000 0000 007c c6c6 c6c6 c67c 0000 0000
528
+	0000 0000 00dc 6666 6666 667c 6060 f000
529
+	0000 0000 0076 cccc cccc cc7c 0c0c 1e00
530
+	0000 0000 00dc 7666 6060 60f0 0000 0000
531
+	0000 0000 007c c660 380c c67c 0000 0000
532
+	0000 1030 30fc 3030 3030 361c 0000 0000
533
+	0000 0000 00cc cccc cccc cc76 0000 0000
534
+	0000 0000 0066 6666 6666 3c18 0000 0000
535
+	0000 0000 00c6 c6d6 d6d6 fe6c 0000 0000
536
+	0000 0000 00c6 6c38 3838 6cc6 0000 0000
537
+	0000 0000 00c6 c6c6 c6c6 c67e 060c f800
538
+	0000 0000 00fe cc18 3060 c6fe 0000 0000
539
+	0000 0e18 1818 7018 1818 180e 0000 0000
540
+	0000 1818 1818 0018 1818 1818 0000 0000
541
+	0000 7018 1818 0e18 1818 1870 0000 0000
542
+
543
+@view