?login_element?

Subversion Repositories NedoOS

Rev

Rev 1509 | Details | Compare with Previous | Last modification | View Log | RSS feed

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