Rev 1509 | Details | Compare with Previous | Last modification | View Log
Rev | Author | Line No. | Line |
---|---|---|---|
68 | Alone | 1 | DEVICE ZXSPECTRUM128 |
8 | dimkam | 2 | include "../_sdk/sys_h.asm" |
3 | MAXCMDSZ=255 |
||
4 | txtscrhgt=25 |
||
5 | txtscrwid=80 |
||
6 | |||
344 | alone | 7 | STACK=0x8000 ; 0x0000, 㧨 १ 孥 ४ ࠭ ணࠬ ६ |
8 | dimkam | 8 | |
576 | alone | 9 | _COLOR=0x0007;7 |
10 | _ERRORCOLOR=0x0009;0x0007;0x42 |
||
11 | ;_CURSORCOLOR=0x0700;0x38 |
||
8 | dimkam | 12 | |
344 | alone | 13 | varmem=0x4000 ;ப (256 asciiz), (4 ), ࠬ 横 (4+4(step)+4(to)+4(goto) ), ᨢ (2 ⮢, 4 ) |
14 | progmem=0x8000 ; ப(,), ப(, ନ), ப(asciiz) |
||
8 | dimkam | 15 | szprogmem=0x8000 |
16 | |||
17 | RUNMODE_PROG=1 |
||
18 | RUNMODE_INTERACTIVE=0 |
||
19 | |||
20 | org PROGSTART |
||
107 | demige | 21 | |
8 | dimkam | 22 | cmd_begin |
576 | alone | 23 | ld sp,STACK |
24 | call initstdio |
||
8 | dimkam | 25 | OS_GETMAINPAGES |
344 | alone | 26 | ;dehl= ࠭ 0000,4000,8000,c000 |
8 | dimkam | 27 | ld a,h |
28 | ld (pg32klow),a |
||
29 | ld a,l |
||
30 | ld (pg32khigh),a |
||
512 | alone | 31 | ;OS_GETSCREENPAGES |
344 | alone | 32 | ;de=࠭ 0- ࠭ (d=), hl=࠭ 1- ࠭ (h=) |
512 | alone | 33 | ;ld a,e |
34 | ;ld (setpgs_scr_low),a |
||
35 | ;ld a,d |
||
36 | ;ld (setpgs_scr_high),a |
||
9 | dimkam | 37 | |
576 | alone | 38 | ;ld e,6 ;textmode |
39 | ;OS_SETGFX |
||
8 | dimkam | 40 | |
41 | ld hl,COMMANDLINE ;command line |
||
42 | call skipword |
||
43 | call skipspaces |
||
44 | ld a,(hl) |
||
45 | or a |
||
344 | alone | 46 | jr z,noautoload ; 祩 䠩 |
169 | demige | 47 | ;command line = "basic [-c] [-n] [-h] [-V] [file to load]" c - fast load as code file, n - no autorun, h - help, v - version |
107 | demige | 48 | call cmd_line_parse |
49 | ld a,(cmd_line_h) |
||
50 | or a |
||
51 | jr nz,show_usage_info |
||
52 | ld a,(cmd_line_v) |
||
53 | or a |
||
54 | jr nz,show_version |
||
55 | ld a,(cmd_line_c) |
||
56 | or a |
||
57 | call z,cmd_load_text |
||
58 | ld a,(cmd_line_c) |
||
59 | cp 1 |
||
60 | call z,cmd_load_hl |
||
61 | ld a,(cmd_line_n) |
||
62 | or a |
||
91 | demige | 63 | jp z,cmd_run |
8 | dimkam | 64 | noautoload |
65 | |||
66 | mainloop |
||
67 | ld sp,STACK |
||
576 | alone | 68 | ld a,6 ;textmode |
69 | curgfx=$+1 |
||
70 | cp 6 |
||
71 | jr z,mainloop_noresetgfx |
||
72 | ld (curgfx),a |
||
73 | ;ld e,6 ;textmode |
||
74 | ld e,-1 ;disable gfx (out: e=old gfxmode) |
||
8 | dimkam | 75 | OS_SETGFX |
576 | alone | 76 | mainloop_noresetgfx |
8 | dimkam | 77 | ;call restorebasicpages |
78 | |||
79 | ;ld (fail_sp),sp |
||
80 | call editcmd |
||
81 | call prcrlf |
||
82 | |||
83 | ld a,RUNMODE_INTERACTIVE |
||
84 | ld (runmode),a |
||
85 | call add_or_run_line |
||
86 | |||
87 | ld hl,cmdbuf |
||
91 | demige | 88 | ld (hl),0 |
8 | dimkam | 89 | jp mainloop |
90 | |||
107 | demige | 91 | |
92 | show_usage_info |
||
93 | ld hl,usage_info |
||
94 | call prtext |
||
95 | call prcrlf |
||
96 | jr cmd_quit |
||
97 | |||
98 | show_version |
||
99 | ld hl,VERSION |
||
100 | call prtext |
||
101 | jr cmd_quit |
||
102 | |||
8 | dimkam | 103 | restorebasicpages |
104 | pg32khigh=$+1 |
||
105 | ld a,0 |
||
106 | SETPG32KHIGH |
||
107 | pg32klow=$+1 |
||
108 | ld a,0 |
||
109 | SETPG32KLOW |
||
110 | ret |
||
111 | |||
112 | skipword |
||
113 | ;hl=string |
||
114 | ;out: hl=terminator/space addr |
||
115 | skipword0 |
||
116 | ld a,(hl) |
||
117 | or a |
||
118 | ret z |
||
119 | cp ' ' |
||
120 | ret z |
||
121 | inc hl |
||
122 | jr skipword0 |
||
123 | |||
124 | |||
91 | demige | 125 | cmd_quit |
8 | dimkam | 126 | QUIT |
127 | |||
128 | endofedit |
||
129 | ld hl,tendofprog |
||
130 | jr fail_or_ok |
||
131 | |||
132 | endofprog |
||
133 | ld hl,cmdbuf |
||
134 | ld (hl),0 |
||
135 | ld hl,tendofprog |
||
136 | jr fail_or_ok |
||
137 | |||
138 | endbreak |
||
139 | ld hl,tendbreak |
||
140 | jr fail_or_ok |
||
141 | |||
142 | fail |
||
143 | ld hl,terror |
||
144 | fail_or_ok |
||
145 | ;fail_sp=$+1 |
||
146 | ;ld sp,0 |
||
147 | call prtext |
||
148 | call prcrlf |
||
149 | jr mainloop |
||
107 | demige | 150 | |
91 | demige | 151 | fail_syntax |
576 | alone | 152 | ld de,_ERRORCOLOR |
153 | SETCOLOR_ |
||
91 | demige | 154 | ld hl,fsyntax |
155 | call prtext |
||
156 | ld hl,wordbuf |
||
157 | call prtext |
||
158 | call prcrlf |
||
159 | jp mainloop |
||
107 | demige | 160 | |
161 | fail_fo |
||
576 | alone | 162 | ld de,_ERRORCOLOR |
163 | SETCOLOR_ |
||
91 | demige | 164 | ld hl,fopenerror |
165 | call prtext |
||
166 | call prcrlf |
||
167 | jp mainloop |
||
8 | dimkam | 168 | |
107 | demige | 169 | |
170 | |||
171 | |||
169 | demige | 172 | VERSION db "Basic interpreter v0.11",0x0d,0x0a,"Nedopc group 2019",0x0d,0x0a,0 |
107 | demige | 173 | |
91 | demige | 174 | usage_info |
169 | demige | 175 | db "Use basic.com [-c] [-h] [-n] [-V] [inputfile]",0x0d,0x0a |
176 | db " -c : Input file in code format",0x0d,0x0a |
||
177 | db " -h : Show this help",0x0d,0x0a |
||
178 | db " -n : Do not autostart inputfile",0x0d,0x0a |
||
179 | db " -V : Show version info and quit",0x0d,0x0a,0 |
||
91 | demige | 180 | |
107 | demige | 181 | |
8 | dimkam | 182 | terror |
91 | demige | 183 | db "Unknown error",0 |
8 | dimkam | 184 | |
91 | demige | 185 | fopenerror |
186 | db "File input/output error",0 |
||
187 | fsyntax |
||
188 | db "Syntax error near ",0 |
||
8 | dimkam | 189 | tendofprog |
190 | db "O.K.",0 |
||
191 | |||
192 | tendbreak |
||
193 | db "Break",0 |
||
194 | |||
195 | findline |
||
344 | alone | 196 | ; ப |
8 | dimkam | 197 | ;de=linenum |
344 | alone | 198 | ;out: hl= ப (progend) |
8 | dimkam | 199 | ld hl,progmem |
200 | findline_lines0 |
||
201 | ld bc,(progend) |
||
202 | or a |
||
203 | sbc hl,bc |
||
204 | add hl,bc |
||
205 | ret z |
||
206 | ld a,(hl) |
||
207 | cp d |
||
208 | inc hl |
||
209 | jr z,findline_lines_HSBequal |
||
210 | jr c,findline_lines_less |
||
211 | findline_OK |
||
212 | dec hl |
||
213 | ret |
||
214 | findline_lines_HSBequal |
||
215 | ld a,(hl) |
||
216 | cp e |
||
217 | jr nc,findline_OK |
||
218 | findline_lines_less |
||
219 | inc hl |
||
220 | ld c,(hl) |
||
221 | inc hl |
||
344 | alone | 222 | ld b,(hl) ; ப ନ |
8 | dimkam | 223 | inc hl |
224 | add hl,bc |
||
344 | alone | 225 | inc hl ;ய᪠ ନ |
8 | dimkam | 226 | jr findline_lines0 |
227 | |||
1518 | alone | 228 | readnum_dehl_ |
229 | ;out: dehl=num, hl'=text, CY=error |
||
8 | dimkam | 230 | exx |
231 | ld a,(hl) |
||
232 | exx |
||
233 | sub '0' |
||
344 | alone | 234 | cp 10 ;NC = |
235 | ccf ;CY = |
||
8 | dimkam | 236 | ret c ;error |
1518 | alone | 237 | readnum_dehl |
238 | ;out: dehl=num, hl'=text, CY=error |
||
8 | dimkam | 239 | ld hl,0 |
344 | alone | 240 | ld de,0 ;⥫ |
8 | dimkam | 241 | readnum0 |
242 | exx |
||
243 | ld a,(hl) |
||
244 | exx |
||
245 | sub '0' |
||
344 | alone | 246 | cp 10 ;NC = |
8 | dimkam | 247 | jr nc,readnumq |
248 | exx |
||
249 | inc hl |
||
250 | exx |
||
1518 | alone | 251 | push de ;HSW |
252 | push hl ;LSW |
||
253 | add hl,hl |
||
254 | rl e |
||
255 | rl d ;*2 |
||
256 | add hl,hl |
||
257 | rl e |
||
258 | rl d ;*4 |
||
8 | dimkam | 259 | pop bc ;LSW |
260 | add hl,bc |
||
1518 | alone | 261 | pop bc ;HSW |
8 | dimkam | 262 | ex de,hl |
263 | adc hl,bc ;*5 |
||
1518 | alone | 264 | ex de,hl |
265 | add hl,hl |
||
266 | rl e |
||
267 | rl d ;*10 |
||
268 | add a,l |
||
269 | ld l,a |
||
270 | ld a,h |
||
8 | dimkam | 271 | adc a,0 |
1518 | alone | 272 | ld h,a |
8 | dimkam | 273 | jr nc,$+3 |
1518 | alone | 274 | inc de |
8 | dimkam | 275 | jr readnum0 |
276 | readnumq |
||
277 | call eatspaces |
||
278 | or a ;NC=OK |
||
279 | ret |
||
280 | |||
281 | skipspaces |
||
282 | ;hl=string |
||
283 | ;out: hl=after last space |
||
284 | ld a,(hl) |
||
285 | cp ' ' |
||
286 | ret nz |
||
287 | inc hl |
||
288 | jr skipspaces |
||
289 | |||
290 | eatspaces |
||
291 | exx |
||
292 | call skipspaces |
||
293 | exx |
||
294 | ret |
||
295 | |||
296 | add_or_run_line |
||
344 | alone | 297 | ; ணࠬ ப cmdbuf |
8 | dimkam | 298 | ld hl,cmdbuf |
299 | exx |
||
300 | call eatspaces |
||
1518 | alone | 301 | call readnum_dehl_ ;dehl=linenum, hl'=text, CY=error |
302 | ex de,hl ;de |
||
8 | dimkam | 303 | jp c,cmd_run0;runline |
304 | exx |
||
305 | ld a,(hl) |
||
306 | exx |
||
307 | or a |
||
308 | jr z,delline |
||
309 | exx |
||
310 | push hl |
||
311 | call strlen |
||
312 | ld (addline_linelen),hl |
||
313 | pop hl |
||
314 | exx |
||
315 | push de ;linenum |
||
344 | alone | 316 | call findline ;hl= ப (progend) |
317 | ; ⠢ ப । ⨬ ⮬ ( ப ⠬) |
||
8 | dimkam | 318 | ld bc,(progend) |
319 | or a |
||
320 | sbc hl,bc |
||
321 | add hl,bc |
||
322 | jr z,addline_nodel |
||
323 | ld a,(hl) |
||
324 | cp d |
||
325 | jr nz,addline_nodel |
||
326 | inc hl |
||
327 | ld a,(hl) |
||
328 | dec hl |
||
329 | cp e |
||
330 | jr nz,addline_nodel |
||
331 | push hl |
||
332 | call delline_hl |
||
333 | pop hl |
||
334 | addline_nodel |
||
335 | |||
344 | alone | 336 | push hl ;hl= ⠢ |
8 | dimkam | 337 | |
344 | alone | 338 | ex de,hl ;de= ⠢ |
8 | dimkam | 339 | ld hl,(progend) |
340 | or a |
||
344 | alone | 341 | sbc hl,de ;progend- ⠢ |
8 | dimkam | 342 | ld b,h |
344 | alone | 343 | ld c,l ;bc= ᬥ頥 ( ணࠬ) |
8 | dimkam | 344 | ld hl,(progend) |
345 | push hl |
||
346 | ld de,(addline_linelen) |
||
347 | add hl,de |
||
344 | alone | 348 | ld de,4+1 ;,,ନ |
8 | dimkam | 349 | add hl,de |
350 | ld (progend),hl |
||
351 | ex de,hl ;new progend |
||
352 | pop hl ;old progend |
||
353 | dec hl |
||
354 | dec de |
||
355 | call safelddr |
||
356 | |||
344 | alone | 357 | pop hl ;hl= ⠢ |
8 | dimkam | 358 | pop de ;de=linenum |
359 | |||
360 | ld (hl),d |
||
361 | inc hl |
||
344 | alone | 362 | ld (hl),e ; ப |
8 | dimkam | 363 | inc hl |
364 | |||
365 | addline_linelen=$+1 |
||
366 | ld de,0 |
||
367 | ld (hl),e |
||
368 | inc hl |
||
344 | alone | 369 | ld (hl),d ; ப |
8 | dimkam | 370 | inc hl |
344 | alone | 371 | push hl ; ⠢ |
372 | push de ; ப |
||
8 | dimkam | 373 | exx |
344 | alone | 374 | pop bc ; ப |
375 | inc bc ; ନ |
||
376 | pop de ; ⠢ |
||
8 | dimkam | 377 | call safeldir ;hl -> de (bc bytes) |
378 | |||
379 | ret |
||
380 | |||
381 | delline |
||
382 | ;de=linenum |
||
1518 | alone | 383 | call findline ;de ;hl= ப (progend) |
8 | dimkam | 384 | ld bc,(progend) |
385 | or a |
||
386 | sbc hl,bc |
||
387 | add hl,bc |
||
388 | ret z |
||
389 | ld a,(hl) |
||
390 | cp d |
||
391 | ret nz |
||
392 | inc hl |
||
393 | ld a,(hl) |
||
394 | dec hl |
||
395 | cp e |
||
396 | ret nz |
||
397 | delline_hl |
||
344 | alone | 398 | ;hl= ப, 㤠 |
399 | push hl ; ப, 㤠 |
||
8 | dimkam | 400 | |
401 | inc hl |
||
402 | inc hl |
||
403 | ld c,(hl) |
||
404 | inc hl |
||
344 | alone | 405 | ld b,(hl) ; ப ନ |
8 | dimkam | 406 | inc hl |
407 | add hl,bc |
||
344 | alone | 408 | inc hl ;ய᪠ ନ |
409 | push hl ;hl= 饩 ப |
||
8 | dimkam | 410 | |
344 | alone | 411 | ex de,hl ;de= ⠢ |
8 | dimkam | 412 | ld hl,(progend) |
413 | or a |
||
344 | alone | 414 | sbc hl,de ;progend- ⠢ |
8 | dimkam | 415 | ld b,h |
344 | alone | 416 | ld c,l ;bc= ᬥ頥 ( ணࠬ) |
417 | pop hl ;hl= 饩 ப |
||
418 | pop de ;de= ப, 㤠 |
||
8 | dimkam | 419 | |
420 | call safeldir |
||
421 | ld (progend),de |
||
422 | ret |
||
423 | |||
424 | getword |
||
425 | ;hl=string |
||
426 | ;de=wordbuf |
||
427 | ;out: hl=terminator/space addr |
||
428 | push bc |
||
429 | ld a,(hl) |
||
430 | cp ':' |
||
431 | jr z,getword_colon |
||
432 | getword0 |
||
433 | ld a,(hl) |
||
434 | or a |
||
435 | jr z,getwordq |
||
344 | alone | 436 | ;TODO 뢠 㪢 |
8 | dimkam | 437 | sub ' ' |
438 | jr z,getwordq0 |
||
439 | ldi |
||
440 | jp getword0 |
||
441 | getword_colon |
||
442 | ldi |
||
443 | getwordq |
||
444 | xor a |
||
445 | getwordq0 |
||
446 | ;xor a |
||
447 | ld (de),a |
||
448 | pop bc |
||
449 | ret |
||
450 | |||
451 | strcp |
||
452 | ;hl=s1 |
||
453 | ;de=s2 |
||
454 | ;out: Z (equal, hl=terminator of s1+1, de=terminator of s2+1), NZ (not equal, hl=erroraddr in s1, de=erroraddr in s2) |
||
455 | strcp0. |
||
456 | ld a,[de] ;s2 |
||
457 | cp [hl] ;s1 |
||
458 | ret nz |
||
459 | inc hl |
||
460 | inc de |
||
461 | or a |
||
462 | jp nz,strcp0. |
||
463 | ret ;z |
||
464 | |||
465 | include "bascmds.asm" |
||
576 | alone | 466 | include "../_sdk/stdio.asm" |
8 | dimkam | 467 | |
468 | tunknowncommand |
||
469 | db "Unknown command",0 |
||
470 | |||
471 | |||
472 | safeldir |
||
473 | ;hl -> de (bc bytes) |
||
474 | ld a,b |
||
475 | or c |
||
476 | ret z |
||
477 | ldir |
||
478 | ret |
||
479 | |||
480 | safelddr |
||
481 | ;hl -> de (bc bytes) |
||
482 | ld a,b |
||
483 | or c |
||
484 | ret z |
||
485 | lddr |
||
486 | ret |
||
487 | |||
488 | |||
489 | prcrlf |
||
490 | push hl |
||
491 | ld a,0x0d |
||
576 | alone | 492 | PRCHAR_ |
8 | dimkam | 493 | ld a,0x0a |
576 | alone | 494 | PRCHAR_ |
8 | dimkam | 495 | pop hl |
496 | ret |
||
497 | |||
498 | prtext |
||
499 | ;hl=text (asciiz) |
||
500 | ;out: hl after terminator |
||
501 | ld a,(hl) |
||
502 | inc hl |
||
503 | or a |
||
504 | ret z |
||
505 | push hl |
||
576 | alone | 506 | PRCHAR_ |
8 | dimkam | 507 | pop hl |
508 | jr prtext |
||
509 | |||
510 | editcmd |
||
511 | ld hl,cmdbuf |
||
512 | call strlen |
||
513 | ld a,l |
||
514 | ld (curcmdx),a |
||
515 | editcmd0 |
||
516 | call fixscroll_prcmd |
||
517 | call cmdcalccurxy |
||
1410 | alone | 518 | SETX_;SETXY_ |
576 | alone | 519 | ;ld e,CURSORCOLOR;#38 |
520 | ;OS_PRATTR ;ᮢ |
||
521 | call yieldgetkeyloop ;YIELDGETKEYLOOP |
||
522 | ;push af |
||
523 | ;call cmdcalccurxy |
||
524 | ;OS_SETXY |
||
525 | ;ld e,COLOR;7 |
||
526 | ;OS_PRATTR ; |
||
527 | ;pop af |
||
8 | dimkam | 528 | ld hl,cmdbuf |
116 | alone | 529 | cp key_enter |
8 | dimkam | 530 | ret z |
116 | alone | 531 | cp key_backspace |
8 | dimkam | 532 | jr z,editcmd_backspace |
116 | alone | 533 | cp key_left |
8 | dimkam | 534 | jr z,editcmd_left |
116 | alone | 535 | cp key_right |
8 | dimkam | 536 | jr z,editcmd_right |
664 | alone | 537 | cp key_home |
538 | jr z,editcmd_home |
||
539 | cp key_end |
||
540 | jr z,editcmd_end |
||
541 | cp key_del |
||
542 | jr z,editcmd_del |
||
116 | alone | 543 | ;cp key_up |
8 | dimkam | 544 | ;jr z,editcmd_up |
116 | alone | 545 | cp 0x20 |
344 | alone | 546 | jr c,editcmdok ;稥 ⥬ 㦭 |
8 | dimkam | 547 | ;type in |
548 | ld e,a |
||
549 | ld hl,cmdbuf |
||
550 | call strlen ;hl=length |
||
551 | ld bc,MAXCMDSZ |
||
552 | or a |
||
553 | sbc hl,bc |
||
344 | alone | 554 | jr nc,editcmdok ;㤠 |
8 | dimkam | 555 | call cmdcalctextaddr ;hl=addr, a=curcmdx |
556 | inc a |
||
557 | ld (curcmdx),a |
||
558 | call strinsch ;e=ch |
||
559 | editcmdok |
||
560 | jp editcmd0 |
||
561 | |||
562 | editcmd_backspace |
||
563 | call cmdcalctextaddr ;hl=addr, a=curcmdx |
||
564 | or a |
||
344 | alone | 565 | jr z,editcmdok ;祣 㤠 |
8 | dimkam | 566 | dec a |
567 | ld (curcmdx),a |
||
344 | alone | 568 | call strdelch ;㤠 ।騩 ᨬ |
8 | dimkam | 569 | jr editcmdok |
570 | |||
664 | alone | 571 | editcmd_del |
572 | call cmdcalctextaddr ;hl=addr, a=curcmdx |
||
573 | inc hl |
||
574 | call strdelch ;㤠 ।騩 ᨬ |
||
575 | jr editcmdok |
||
576 | |||
8 | dimkam | 577 | editcmd_left |
578 | ld a,(curcmdx) |
||
579 | or a |
||
344 | alone | 580 | jr z,editcmdok ;㤠 |
8 | dimkam | 581 | dec a |
582 | ld (curcmdx),a |
||
583 | jr editcmdok |
||
664 | alone | 584 | |
8 | dimkam | 585 | editcmd_right |
586 | call cmdcalctextaddr ;hl=addr, a=curcmdx |
||
587 | inc (hl) |
||
588 | dec (hl) |
||
344 | alone | 589 | jr z,editcmdok ;㤠 ࠢ, ⮨ ନ |
8 | dimkam | 590 | inc a |
664 | alone | 591 | editcmd_leftq |
8 | dimkam | 592 | ld (curcmdx),a |
593 | jr editcmdok |
||
594 | |||
664 | alone | 595 | editcmd_home |
596 | xor a |
||
597 | jr editcmd_leftq |
||
598 | editcmd_end |
||
599 | ld hl,cmdbuf |
||
600 | call strlen ;hl=length |
||
601 | ld a,l |
||
602 | jr editcmd_leftq |
||
603 | |||
8 | dimkam | 604 | ;editcmd_up |
605 | ; ld de,cmdbuf |
||
606 | ; ld hl,oldcmd |
||
607 | ; ld bc,MAXCMDSZ+1 |
||
608 | ; ldir |
||
609 | ; jp editcmd |
||
610 | |||
611 | strinsch |
||
612 | ;insert char E at (hl), shift string right |
||
613 | ;keeps ix |
||
614 | editcmd_ins0 |
||
615 | ld a,(hl) |
||
616 | ld (hl),e |
||
617 | ld e,a |
||
618 | inc hl |
||
619 | or a |
||
620 | jr nz,editcmd_ins0 |
||
621 | ld (hl),a |
||
622 | ret |
||
623 | |||
624 | strdelch |
||
625 | ;delete char at (hl-1), shift string left |
||
626 | ;keeps ix |
||
627 | editcmd_bs0 |
||
628 | ld a,(hl) |
||
629 | dec hl |
||
630 | ld (hl),a |
||
631 | inc hl |
||
632 | inc hl |
||
633 | or a |
||
634 | jr nz,editcmd_bs0 |
||
635 | ret |
||
636 | |||
637 | strlen |
||
638 | ;hl=str |
||
639 | ;out: hl=length |
||
344 | alone | 640 | ld bc,0 ;⮡ 筮 ନ |
8 | dimkam | 641 | xor a |
344 | alone | 642 | cpir ; 易⥫쭮, =0, bc=-1 .. |
8 | dimkam | 643 | ld hl,-1 |
644 | or a |
||
645 | sbc hl,bc |
||
646 | ret |
||
647 | |||
648 | cmdcalcpromptsz |
||
649 | ld a,1 |
||
650 | ret |
||
651 | |||
652 | cmdcalctextaddr |
||
653 | ;out: hl=addr, a=curcmdx |
||
654 | ;keeps ix |
||
655 | ld a,(curcmdx) |
||
656 | ld c,a |
||
657 | ld b,0 |
||
658 | ld hl,cmdbuf |
||
659 | add hl,bc |
||
660 | ret |
||
661 | |||
662 | cmdcalccurxy |
||
663 | ;out: de=yx |
||
664 | ;x=cmdpromptsz+curcmdx-curcmdscroll |
||
665 | call cmdcalcpromptsz ;a=promptsz |
||
344 | alone | 666 | ld hl,curcmdx ; ࠭, |
8 | dimkam | 667 | add a,(hl) |
344 | alone | 668 | ld hl,curcmdscroll ;ᤢ ⭮⥫쭮 ࠭ |
8 | dimkam | 669 | sub (hl) |
670 | ld e,a |
||
671 | ld d,txtscrhgt-1 |
||
672 | ret |
||
673 | |||
674 | fixscroll_prcmd |
||
344 | alone | 675 | ;横 ᪠ ⥪饣 |
8 | dimkam | 676 | editcmd_scroll0 |
677 | call cmdcalccurxy ;e=scrx |
||
678 | call cmdcalcpromptsz ;a=promptsz |
||
679 | ld hl,curcmdscroll |
||
680 | dec a |
||
681 | cp e ;scrx |
||
682 | jr c,editcmd_noscrollleft ;x>=promptsz (x>(promptsz-1)) |
||
344 | alone | 683 | ;x<promptsz - |
8 | dimkam | 684 | dec (hl) |
685 | jr editcmd_scroll0 |
||
686 | editcmd_noscrollleft |
||
687 | ld a,e ;scrx |
||
688 | cp txtscrwid |
||
689 | jr c,editcmd_noscrollright |
||
344 | alone | 690 | ;x>=txtscrwid - ࠢ |
8 | dimkam | 691 | inc (hl) |
692 | jr editcmd_scroll0 |
||
693 | editcmd_noscrollright |
||
694 | ;prcmd |
||
576 | alone | 695 | ld de,_COLOR |
696 | SETCOLOR_ |
||
8 | dimkam | 697 | ld de,+(txtscrhgt-1)*256+0 |
1410 | alone | 698 | SETX_;SETXY_ |
576 | alone | 699 | ;ld a,0x0d |
700 | ;PRCHAR_ |
||
8 | dimkam | 701 | ;ld hl,cmdprompt |
702 | ld c,0 |
||
703 | ;call cmdprtext |
||
704 | push bc |
||
705 | ld a,'>' |
||
576 | alone | 706 | PRCHAR_ |
8 | dimkam | 707 | pop bc |
708 | inc c |
||
709 | ld hl,(curcmdscroll) |
||
710 | ld h,0 |
||
711 | ld de,cmdbuf |
||
712 | add hl,de |
||
713 | call cmdprtext |
||
344 | alone | 714 | ; ⮪ ப |
8 | dimkam | 715 | prcmdspc0 |
716 | ld a,c |
||
344 | alone | 717 | cp txtscrwid-1 ;⠢ ࠢ |
8 | dimkam | 718 | ret z |
719 | push bc |
||
720 | ld a,' ' |
||
576 | alone | 721 | PRCHAR_ |
8 | dimkam | 722 | pop bc |
723 | inc c |
||
724 | jp prcmdspc0 |
||
725 | |||
726 | cmdprtext |
||
727 | cmdprtext0 |
||
728 | ld a,(hl) |
||
729 | or a |
||
730 | ret z |
||
731 | push bc |
||
732 | push hl |
||
576 | alone | 733 | PRCHAR_ |
8 | dimkam | 734 | pop hl |
735 | pop bc |
||
736 | inc c |
||
737 | inc hl |
||
738 | ld a,c |
||
344 | alone | 739 | cp txtscrwid-1 ;⠢ ࠢ |
8 | dimkam | 740 | jp nz,cmdprtext0 |
741 | ret |
||
742 | |||
743 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
||
744 | |||
745 | loginv |
||
746 | ld a,e |
||
747 | cpl |
||
748 | ld e,a |
||
749 | ld a,d |
||
750 | cpl |
||
751 | ld d,a |
||
752 | ld a,l |
||
753 | cpl |
||
754 | ld l,a |
||
755 | ld a,h |
||
756 | cpl |
||
757 | ld h,a |
||
758 | ret |
||
759 | |||
1518 | alone | 760 | negdebc |
8 | dimkam | 761 | xor a |
1518 | alone | 762 | sub c |
763 | ld c,a |
||
764 | ld a,0 |
||
765 | sbc a,b |
||
766 | ld b,a |
||
767 | ld a,0 |
||
768 | sbc a,e |
||
8 | dimkam | 769 | ld e,a |
770 | ld a,0 |
||
771 | sbc a,d |
||
772 | ld d,a |
||
1518 | alone | 773 | ret |
774 | negdehl |
||
775 | xor a |
||
776 | sub l |
||
8 | dimkam | 777 | ld l,a |
778 | ld a,0 |
||
779 | sbc a,h |
||
780 | ld h,a |
||
1518 | alone | 781 | ld a,0 |
782 | sbc a,e |
||
8 | dimkam | 783 | ld e,a |
784 | ld a,0 |
||
785 | sbc a,d |
||
786 | ld d,a |
||
787 | ret |
||
788 | |||
789 | prlinenum_tomem |
||
1518 | alone | 790 | ;de=num |
8 | dimkam | 791 | ld bc,prdword_digit_tomem |
792 | ld (prdword_digit_prchar_jp),bc |
||
793 | ld hl,0 |
||
1518 | alone | 794 | ex de,hl |
795 | jr _prdword_subr ;dehl=num |
||
8 | dimkam | 796 | |
797 | prword_de |
||
798 | ;de=num |
||
799 | ld hl,0 |
||
1518 | alone | 800 | ex de,hl |
801 | prdword_dehl |
||
802 | ;dehl=num |
||
8 | dimkam | 803 | ld bc,prdword_digit_toscr |
804 | ld (prdword_digit_prchar_jp),bc |
||
1518 | alone | 805 | bit 7,d |
806 | jr z,prdword_positive |
||
8 | dimkam | 807 | ld a,'-' |
808 | call prdword_digit_prchar |
||
1518 | alone | 809 | call negdehl |
810 | prdword_positive |
||
811 | _prdword_subr |
||
8 | dimkam | 812 | ld a,' ' |
813 | ld (prnumdwordcmd_zero),a |
||
814 | ld lx,0 |
||
815 | ld bc,1000000000/65536 |
||
816 | ld a,1000000000/256&#ff |
||
817 | call prdword_digit |
||
818 | ld bc,100000000/65536 |
||
819 | ld a,100000000/256&#ff |
||
820 | call prdword_digit |
||
1518 | alone | 821 | ld lx,d |
822 | ld d,e |
||
823 | ld e,h |
||
8 | dimkam | 824 | ld h,l |
825 | ld bc,10000000/256 |
||
826 | ld a,10000000&#ff ;0x989680 |
||
827 | call prdword_digit |
||
828 | ld bc,1000000/256 |
||
829 | ld a,1000000&#ff |
||
830 | call prdword_digit |
||
831 | ld bc,100000/256 |
||
832 | ld a,100000&#ff |
||
833 | call prdword_digit |
||
834 | ld bc,10000/256 |
||
835 | ld a,10000&#ff |
||
836 | call prdword_digit |
||
837 | ld bc,1000/256 |
||
838 | ld a,1000&#ff |
||
839 | call prdword_digit |
||
840 | ld bc,100/256 |
||
841 | ld a,100&#ff |
||
842 | call prdword_digit |
||
843 | ld bc,10/256 |
||
844 | ld a,10&#ff |
||
845 | call prdword_digit |
||
1518 | alone | 846 | ld a,h |
8 | dimkam | 847 | add a,'0' |
848 | prdword_digit_prchar |
||
849 | prdword_digit_prchar_jp=$+1 |
||
850 | jp prdword_digit_tomem |
||
851 | prdword_digit_toscr |
||
852 | push de |
||
853 | push hl |
||
854 | push ix |
||
576 | alone | 855 | PRCHAR_ |
8 | dimkam | 856 | pop ix |
857 | pop hl |
||
858 | pop de |
||
859 | ret |
||
860 | prdword_digit_tomem |
||
861 | exx |
||
862 | ld (hl),a |
||
863 | inc hl |
||
864 | exx |
||
865 | ret |
||
866 | prdword_digit |
||
1518 | alone | 867 | ;deh[l]=num |
8 | dimkam | 868 | ;bca0=divisor |
1518 | alone | 869 | push hl |
870 | ex de,hl |
||
8 | dimkam | 871 | ld e,a |
872 | ld a,d |
||
873 | ld d,'0'-1 |
||
874 | ;hla0=num |
||
875 | ;bce0=divisor |
||
876 | ;d=digit |
||
877 | prdword_digit0 |
||
878 | inc d |
||
879 | sub e |
||
880 | sbc hl,bc |
||
881 | jr nc,prdword_digit0 |
||
882 | dec lx |
||
883 | jp p,prdword_digit0 |
||
884 | add a,e |
||
885 | adc hl,bc |
||
886 | jr nc,$+4 |
||
887 | inc lx |
||
888 | ld c,d ;digit |
||
1518 | alone | 889 | ex de,hl |
890 | pop hl |
||
891 | ld h,a ;dehl=num |
||
8 | dimkam | 892 | ld a,c ;digit |
893 | cp '0' |
||
894 | jr nz,prnumdwordcmd_nozero |
||
895 | prnumdwordcmd_zero=$+1 |
||
896 | ld a,' ' |
||
897 | cp ' ' |
||
898 | ret z |
||
899 | jp prdword_digit_prchar |
||
900 | prnumdwordcmd_nozero |
||
901 | call prdword_digit_prchar |
||
902 | ld a,'0' |
||
903 | ld (prnumdwordcmd_zero),a |
||
904 | ret |
||
905 | |||
906 | prstr_withlen=prtext |
||
907 | ;hl=straddr |
||
908 | if 0 |
||
909 | ;hl=straddr (first byte = len (0..255)) |
||
910 | ld a,(hl) |
||
911 | inc hl |
||
912 | or a |
||
913 | ret z |
||
914 | ld b,a |
||
915 | prstr_withlen0 |
||
916 | push bc |
||
917 | push hl |
||
918 | ld a,(hl) |
||
576 | alone | 919 | PRCHAR_ |
8 | dimkam | 920 | pop hl |
921 | inc hl |
||
922 | pop bc |
||
923 | djnz prstr_withlen0 |
||
924 | ret |
||
925 | endif |
||
926 | |||
927 | ;getvar_int |
||
928 | ;a=name (char) |
||
1518 | alone | 929 | ;out: dehl |
8 | dimkam | 930 | ;call findvar_int ;hl=addr |
931 | getint |
||
932 | ld e,(hl) |
||
933 | inc hl |
||
934 | ld d,(hl) |
||
935 | inc hl |
||
936 | ld a,(hl) |
||
937 | inc hl |
||
938 | ld h,(hl) |
||
939 | ld l,a |
||
1518 | alone | 940 | ex de,hl |
8 | dimkam | 941 | ret |
942 | |||
943 | ;getvar_str |
||
944 | ;a=name (char) |
||
945 | ;out: hl=straddr (first byte = len (0..255)) |
||
946 | ;call findvar_str ;hl=addr |
||
947 | ;ret |
||
948 | |||
949 | setvar_int |
||
1518 | alone | 950 | ;a=name (char), dehl=value |
951 | ex de,hl |
||
8 | dimkam | 952 | push hl |
953 | call findvar_int ;hl=addr |
||
954 | ld (hl),e |
||
955 | inc hl |
||
956 | ld (hl),d |
||
957 | inc hl |
||
958 | pop de |
||
959 | ld (hl),e |
||
960 | inc hl |
||
961 | ld (hl),d |
||
962 | ret |
||
963 | |||
964 | setvar_str |
||
965 | ;a=name (char), hl=straddr |
||
966 | push hl |
||
967 | call findvar_str ;hl=addr |
||
968 | ex de,hl |
||
969 | pop hl |
||
970 | strcopy |
||
971 | ;hl -> de (first byte = len (0..255)) |
||
972 | ld bc,256 |
||
973 | ldir |
||
974 | ret |
||
975 | |||
976 | addvar_int |
||
977 | ;a=name (char) |
||
978 | push de |
||
979 | ld hl,(varend) |
||
980 | ld d,h |
||
981 | ld e,l |
||
982 | inc hl |
||
983 | inc hl |
||
984 | inc hl |
||
985 | inc hl |
||
986 | ld (varend),hl |
||
987 | ;de=addr |
||
988 | ld h,varindex_int/256 |
||
989 | ld l,a |
||
990 | ld (hl),e |
||
991 | inc h |
||
992 | ld (hl),d |
||
993 | pop de |
||
994 | ret |
||
995 | |||
996 | addvar_str |
||
997 | ;a=name (char) |
||
998 | push de |
||
999 | ld hl,(varend) |
||
1000 | ld d,h |
||
1001 | ld e,l |
||
1002 | inc h |
||
1003 | ld (varend),hl |
||
1004 | ;de=addr |
||
1005 | ld h,varindex_int/256 |
||
1006 | add a,128 |
||
1007 | ld l,a |
||
1008 | ld (hl),e |
||
1009 | inc h |
||
1010 | ld (hl),d |
||
1011 | pop de |
||
1012 | ret |
||
1013 | |||
1014 | findvar_index |
||
344 | alone | 1015 | ;TODO ઠ ⨯ ६ (int ࠧ蠥) |
8 | dimkam | 1016 | findvar_array |
344 | alone | 1017 | ;TODO ઠ ⨯ ६ |
8 | dimkam | 1018 | findvar_int |
344 | alone | 1019 | ;TODO ઠ ⨯ ६ (index ࠧ蠥, array ࠧ蠥) |
8 | dimkam | 1020 | ;a=name (char) |
1021 | ;out: hl=addr, z=error |
||
1022 | ld h,varindex_int/256 |
||
1023 | ld l,a |
||
1024 | ld a,(hl) |
||
1025 | inc h |
||
1026 | ld h,(hl) |
||
1027 | ld l,a |
||
1028 | or h |
||
1029 | ret |
||
1030 | |||
1031 | findvar_str |
||
1032 | ;a=name (char) |
||
1033 | ;out: hl=addr, z=error |
||
1034 | ld h,varindex_int/256 |
||
1035 | add a,128 |
||
1036 | ld l,a |
||
1037 | ld a,(hl) |
||
1038 | inc h |
||
1039 | ld h,(hl) |
||
1040 | ld l,a |
||
1041 | or h |
||
1042 | ret |
||
1043 | |||
1044 | |||
107 | demige | 1045 | |
1046 | cmd_line_parse |
||
1047 | ;hl= cmd line after basic.com and spaces |
||
1048 | cmd_line_parse_loop |
||
1049 | ld a,(hl) |
||
1050 | cp "-" |
||
344 | alone | 1051 | ret nz; , |
107 | demige | 1052 | inc hl |
1053 | ld a,(hl) |
||
1054 | cp "c" |
||
1055 | call z, case_key_c |
||
1056 | cp "n" |
||
1057 | call z, case_key_n |
||
1058 | cp "h" |
||
1059 | call z, case_key_h |
||
169 | demige | 1060 | cp "V" |
107 | demige | 1061 | call z, case_key_v |
1062 | inc hl |
||
1063 | call skipspaces |
||
1064 | jp cmd_line_parse_loop |
||
1065 | |||
1066 | case_key_c |
||
1067 | ld a,1 |
||
1068 | ld (cmd_line_c),a |
||
1069 | ret |
||
1070 | case_key_n |
||
1071 | ld a,1 |
||
1072 | ld (cmd_line_n),a |
||
1073 | ret |
||
1074 | case_key_h |
||
1075 | ld a,1 |
||
1076 | ld (cmd_line_h),a |
||
1077 | ret |
||
1078 | case_key_v |
||
1079 | ld a,1 |
||
1080 | ld (cmd_line_v),a |
||
1081 | ret |
||
1082 | |||
1083 | cmd_line_c db 0 |
||
1084 | cmd_line_n db 0 |
||
1085 | cmd_line_h db 0 |
||
1086 | cmd_line_v db 0 |
||
1087 | |||
8 | dimkam | 1088 | ;include "../_sdk/prdword.asm" |
1089 | |||
1090 | text |
||
1091 | db "Hello world!",0x0d,0x0a,0 |
||
1092 | |||
1093 | cmdbuf |
||
1094 | ds MAXCMDSZ+1 |
||
1095 | |||
1096 | syscmdbuf |
||
1097 | db "cmd " |
||
1098 | wordbuf |
||
1099 | ds MAXCMDSZ+1 |
||
1100 | |||
1101 | curdir |
||
55 | Alone | 1102 | ds MAXPATH_sz;MAXCMDSZ+1 |
8 | dimkam | 1103 | |
260 | alone | 1104 | ;oldtimer |
1105 | ; dw 0 |
||
8 | dimkam | 1106 | |
1107 | execcmd_pars |
||
1108 | dw 0 |
||
1109 | |||
344 | alone | 1110 | curcmdscroll ;ᤢ ⭮⥫쭮 ࠭ |
8 | dimkam | 1111 | db 0 |
344 | alone | 1112 | curcmdx ; ࠭, |
8 | dimkam | 1113 | db 0 |
1114 | |||
1115 | progend |
||
1116 | dw progmem |
||
1117 | varend |
||
1118 | dw varmem |
||
1119 | |||
1120 | |||
1121 | align 256 |
||
344 | alone | 1122 | varindex_int ;varindex_str +128 |
8 | dimkam | 1123 | ds 512 |
1124 | |||
1125 | ;varmem |
||
1126 | |||
1127 | cmd_end |
||
1128 | |||
289 | dimkam | 1129 | ;display "Size ",/d,cmd_end-cmd_begin," bytes" |
8 | dimkam | 1130 | |
1131 | savebin "basic.com",cmd_begin,cmd_end-cmd_begin |
||
1132 | |||
1509 | alone | 1133 | LABELSLIST "../../us/user.l",1 |