Rev 672 | Details | Compare with Previous | Last modification | View Log
| Rev | Author | Line No. | Line |
|---|---|---|---|
| 8 | dimkam | 1 | functionslist |
| 2 | dw func_rnd |
||
| 3 | db "$rnd",0 |
||
| 4 | |||
| 344 | alone | 5 | dw -1 ; ⠡ 㭪権 |
| 8 | dimkam | 6 | |
| 7 | getval_function |
||
| 8 | ;hl'=text |
||
| 9 | call eatword |
||
| 10 | ld hl,functionslist ;list of internal commands |
||
| 11 | getval_function0 |
||
| 12 | ld c,(hl) |
||
| 13 | inc hl |
||
| 344 | alone | 14 | ld b,(hl) ; 楤, ᮮ⢥饩 ⮩ |
| 8 | dimkam | 15 | inc hl |
| 16 | ld a,b |
||
| 17 | cp -1 |
||
| 91 | demige | 18 | jp z,fail_syntax ;ret z ;jr z,strcpexec_tryrun ;a!=0: no such internal command |
| 8 | dimkam | 19 | ld de,wordbuf |
| 20 | push hl |
||
| 21 | call strcp |
||
| 22 | pop hl |
||
| 23 | jr nz,getval_function_fail |
||
| 24 | ld h,b |
||
| 25 | ld l,c |
||
| 26 | jp (hl) ;run internal command |
||
| 27 | getval_function_fail |
||
| 344 | alone | 28 | ld b,-1 ;⮡ 筮 ନ |
| 8 | dimkam | 29 | xor a |
| 344 | alone | 30 | cpir ; 易⥫쭮 |
| 8 | dimkam | 31 | jr getval_function0 |
| 32 | |||
| 33 | commandslist |
||
| 34 | dw cmd_for |
||
| 35 | db "for",0 |
||
| 36 | dw cmd_next |
||
| 37 | db "next",0 |
||
| 38 | |||
| 39 | dw cmd_clear |
||
| 40 | db "clear",0 |
||
| 41 | dw cmd_new |
||
| 42 | db "new",0 |
||
| 43 | dw cmd_quit |
||
| 44 | db "quit",0 |
||
| 45 | dw cmd_run |
||
| 46 | db "run",0 |
||
| 47 | dw cmd_goto |
||
| 48 | db "goto",0 |
||
| 49 | dw cmd_edit |
||
| 50 | db "edit",0 |
||
| 51 | dw cmd_list |
||
| 52 | db "list",0 |
||
| 53 | dw cmd_save |
||
| 54 | db "save",0 |
||
| 107 | demige | 55 | dw cmd_savecode |
| 56 | db "savecode",0 |
||
| 8 | dimkam | 57 | dw cmd_load |
| 58 | db "load",0 |
||
| 107 | demige | 59 | dw cmd_loadcode |
| 60 | db "loadcode",0 |
||
| 8 | dimkam | 61 | dw cmd_system |
| 62 | db "system",0 |
||
| 63 | dw cmd_pause |
||
| 64 | db "pause",0 |
||
| 65 | |||
| 66 | dw cmd_let |
||
| 67 | db "let",0 |
||
| 68 | dw cmd_dim |
||
| 69 | db "dim",0 |
||
| 70 | dw cmd_print |
||
| 71 | db "print",0 |
||
| 72 | dw cmd_cls |
||
| 73 | db "cls",0 |
||
| 74 | dw cmd_gfx |
||
| 75 | db "gfx",0 |
||
| 76 | dw cmd_plot |
||
| 77 | db "plot",0 |
||
| 78 | dw cmd_line |
||
| 79 | db "line",0 |
||
| 80 | |||
| 81 | dw cmd_if |
||
| 82 | db "if",0 |
||
| 83 | dw cmd_then |
||
| 84 | db "then",0 |
||
| 85 | dw cmd_colon |
||
| 86 | db ":",0 |
||
| 87 | dw cmd_rem |
||
| 88 | db "rem",0 |
||
| 89 | |||
| 344 | alone | 90 | dw -1 ; ⠡ |
| 8 | dimkam | 91 | |
| 92 | docmd |
||
| 93 | ;hl'=text |
||
| 94 | exx |
||
| 95 | push hl |
||
| 576 | alone | 96 | ld a,(curgfx) |
| 97 | cp 6 ;textmode |
||
| 98 | jr z,docmd_nogfx |
||
| 99 | GET_KEY ;from BDOS |
||
| 100 | jr docmd_nogfxq |
||
| 101 | docmd_nogfx |
||
| 102 | GETKEY_ ;from stdin |
||
| 103 | docmd_nogfxq |
||
| 8 | dimkam | 104 | pop hl |
| 105 | exx |
||
| 116 | alone | 106 | cp key_esc |
| 8 | dimkam | 107 | jp z,endbreak |
| 108 | call eatword |
||
| 109 | ld hl,commandslist ;list of internal commands |
||
| 110 | strcpexec0 |
||
| 111 | ld c,(hl) |
||
| 112 | inc hl |
||
| 344 | alone | 113 | ld b,(hl) ; 楤, ᮮ⢥饩 ⮩ |
| 8 | dimkam | 114 | inc hl |
| 115 | ld a,b |
||
| 116 | cp -1 |
||
| 91 | demige | 117 | jp z,fail_syntax ;ret z ;jr z,strcpexec_tryrun ;a!=0: no such internal command |
| 8 | dimkam | 118 | ld de,wordbuf |
| 119 | push hl |
||
| 120 | call strcp |
||
| 121 | pop hl |
||
| 122 | jr nz,strcpexec_fail |
||
| 123 | ld h,b |
||
| 124 | ld l,c |
||
| 125 | jp (hl) ;run internal command |
||
| 126 | strcpexec_fail |
||
| 344 | alone | 127 | ld b,-1 ;⮡ 筮 ନ |
| 8 | dimkam | 128 | xor a |
| 344 | alone | 129 | cpir ; 易⥫쭮 |
| 8 | dimkam | 130 | jr strcpexec0 |
| 131 | |||
| 132 | eat |
||
| 344 | alone | 133 | ;hl'= |
| 8 | dimkam | 134 | exx |
| 135 | inc hl |
||
| 136 | call skipspaces |
||
| 137 | exx |
||
| 138 | ret |
||
| 139 | |||
| 140 | eatword |
||
| 141 | exx |
||
| 142 | ld de,wordbuf |
||
| 107 | demige | 143 | call getword |
| 344 | alone | 144 | ;६ (HL)-> wordbuf |
| 107 | demige | 145 | call skipspaces |
| 344 | alone | 146 | ; (HL) ய᪠ |
| 8 | dimkam | 147 | exx |
| 148 | ret |
||
| 149 | |||
| 150 | eatclosebracket |
||
| 151 | exx |
||
| 152 | ld a,(hl) |
||
| 153 | exx |
||
| 154 | cp ')' |
||
| 91 | demige | 155 | jp nz,fail_syntax |
| 8 | dimkam | 156 | jp eat |
| 157 | |||
| 158 | eateq |
||
| 159 | exx |
||
| 160 | ld a,(hl) |
||
| 161 | exx |
||
| 162 | cp '=' |
||
| 91 | demige | 163 | jp nz,fail_syntax |
| 8 | dimkam | 164 | jp eat |
| 165 | |||
| 166 | eatcomma |
||
| 167 | exx |
||
| 168 | ld a,(hl) |
||
| 169 | exx |
||
| 170 | cp ',' |
||
| 91 | demige | 171 | jp nz,fail_syntax |
| 8 | dimkam | 172 | jp eat |
| 107 | demige | 173 | |
| 8 | dimkam | 174 | cmd_pause |
| 175 | exx |
||
| 176 | push hl |
||
| 576 | alone | 177 | ld a,(curgfx) |
| 178 | cp 6 ;textmode |
||
| 179 | jr z,cmd_pause_nogfx |
||
| 180 | YIELDGETKEYLOOP ;from BDOS |
||
| 181 | jr cmd_pause_nogfxq |
||
| 182 | cmd_pause_nogfx |
||
| 183 | call yieldgetkeyloop ;from stdin |
||
| 184 | cmd_pause_nogfxq |
||
| 8 | dimkam | 185 | pop hl |
| 186 | exx |
||
| 187 | ret |
||
| 188 | |||
| 189 | cmd_gfx |
||
| 1518 | alone | 190 | call getexpr_dehl |
| 8 | dimkam | 191 | exx |
| 192 | push hl |
||
| 193 | exx |
||
| 1518 | alone | 194 | ld a,l |
| 8 | dimkam | 195 | and 7 |
| 576 | alone | 196 | ld e,a |
| 197 | ld (curgfx),a |
||
| 672 | alone | 198 | cp 6 |
| 199 | jr nz,$+4 |
||
| 200 | ld e,-1 ;disable gfx (out: e=old gfxmode) |
||
| 8 | dimkam | 201 | OS_SETGFX |
| 202 | pop hl |
||
| 203 | exx |
||
| 204 | ret |
||
| 205 | |||
| 206 | getexprcolor |
||
| 207 | ;out: a=color = %33210210 |
||
| 1518 | alone | 208 | call getexpr_dehl |
| 209 | ld a,l |
||
| 8 | dimkam | 210 | and 7 |
| 211 | ld d,a |
||
| 1518 | alone | 212 | ld a,l |
| 8 | dimkam | 213 | and 15 |
| 214 | add a,a |
||
| 215 | add a,a |
||
| 216 | add a,a |
||
| 217 | or d ;%.3210210 |
||
| 218 | rlca |
||
| 219 | rlca ;%210210.3, CY=3 |
||
| 220 | rra ;%3210210., CY=3 |
||
| 221 | rra ;%33210210 |
||
| 222 | ret |
||
| 223 | |||
| 224 | cmd_line |
||
| 344 | alone | 225 | ;hl'= |
| 8 | dimkam | 226 | ;line x2,y2,color |
| 1518 | alone | 227 | call getexpr_dehl |
| 228 | ld (cmd_line_x2),hl |
||
| 8 | dimkam | 229 | call eatcomma |
| 1518 | alone | 230 | call getexpr_dehl |
| 231 | ld (cmd_line_y2),hl |
||
| 8 | dimkam | 232 | call eatcomma |
| 233 | call getexprcolor ;a=color = %33210210 |
||
| 234 | |||
| 235 | push af ;color |
||
| 236 | call setpgs_scr |
||
| 237 | pop af ;color |
||
| 238 | ld bc,(cmd_plot_x) |
||
| 239 | ld de,(cmd_plot_y) |
||
| 240 | cmd_line_x2=$+2 |
||
| 241 | ld ix,0 |
||
| 242 | ld (cmd_plot_x),ix |
||
| 243 | cmd_line_y2=$+1 |
||
| 244 | ld hl,0 |
||
| 245 | ld (cmd_plot_y),hl |
||
| 344 | alone | 246 | ;bc=x ( ࠭, ⥫) |
| 247 | ;de=y ( ࠭, ⥫) |
||
| 8 | dimkam | 248 | ;ix=x2 |
| 249 | ;hl=y2 |
||
| 250 | ;a=color = %332103210 |
||
| 251 | exx |
||
| 252 | push hl |
||
| 253 | exx |
||
| 254 | call shapes_line |
||
| 255 | ;exx |
||
| 256 | pop hl |
||
| 257 | exx |
||
| 258 | jp restorebasicpages |
||
| 259 | |||
| 260 | cmd_plot |
||
| 344 | alone | 261 | ;hl'= |
| 8 | dimkam | 262 | ;plot x,y,color |
| 1518 | alone | 263 | call getexpr_dehl |
| 264 | ld (cmd_plot_x),hl |
||
| 8 | dimkam | 265 | call eatcomma |
| 1518 | alone | 266 | call getexpr_dehl |
| 267 | ld (cmd_plot_y),hl |
||
| 8 | dimkam | 268 | call eatcomma |
| 269 | call getexprcolor |
||
| 115 | alone | 270 | ;ld lx,a ;lx=color = %33210210 |
| 271 | ld (prpixel_color_l),a |
||
| 272 | ld (prpixel_color_r),a |
||
| 8 | dimkam | 273 | cmd_plot_x=$+1 |
| 274 | ld hl,0 |
||
| 275 | ld bc,320 |
||
| 276 | or a |
||
| 277 | sbc hl,bc |
||
| 278 | add hl,bc |
||
| 279 | ret nc |
||
| 280 | ex de,hl |
||
| 281 | |||
| 282 | cmd_plot_y=$+1 |
||
| 283 | ld hl,0 |
||
| 284 | ld bc,200 |
||
| 285 | or a |
||
| 286 | sbc hl,bc |
||
| 287 | add hl,bc |
||
| 288 | ret nc |
||
| 289 | ;l=y |
||
| 290 | call setpgs_scr |
||
| 115 | alone | 291 | ld b,d |
| 292 | ld c,e |
||
| 293 | ld e,l |
||
| 294 | ld d,0 |
||
| 295 | ;bc=x ;de |
||
| 296 | ;e=y ;c |
||
| 297 | ;[lx=color = %33210210] |
||
| 8 | dimkam | 298 | call prpixel |
| 299 | jp restorebasicpages |
||
| 300 | |||
| 301 | setpgs_scr |
||
| 512 | alone | 302 | ;setpgs_scr_low=$+1 |
| 555 | alone | 303 | ld a,(user_scr0_low) ;ok |
| 8 | dimkam | 304 | SETPG32KLOW |
| 512 | alone | 305 | ;setpgs_scr_high=$+1 |
| 555 | alone | 306 | ld a,(user_scr0_high) ;ok |
| 8 | dimkam | 307 | SETPG32KHIGH |
| 308 | ret |
||
| 309 | |||
| 310 | |||
| 311 | scrbase=0x8000 |
||
| 312 | shapes_line |
||
| 344 | alone | 313 | ;bc=x ( ࠭, ⥫) |
| 314 | ;de=y ( ࠭, ⥫) |
||
| 8 | dimkam | 315 | ;ix=x2 |
| 316 | ;hl=y2 |
||
| 317 | ;a=color = %332103210 |
||
| 115 | alone | 318 | ;ld (line_pixel_color),a |
| 319 | ld (prpixel_color_l),a |
||
| 320 | ld (prpixel_color_r),a |
||
| 8 | dimkam | 321 | or a |
| 322 | sbc hl,de |
||
| 323 | add hl,de |
||
| 324 | jp p,shapes_line_noswap |
||
| 325 | ex de,hl ;y <-> y2 |
||
| 326 | push ix |
||
| 327 | push bc |
||
| 328 | pop ix |
||
| 329 | pop bc ;x <-> x2 |
||
| 330 | shapes_line_noswap |
||
| 331 | or a |
||
| 332 | sbc hl,de ;dy >= 0 |
||
| 333 | push hl ;dy |
||
| 334 | push ix |
||
| 335 | pop hl |
||
| 336 | sbc hl,bc |
||
| 337 | push hl ;dx |
||
| 338 | exx |
||
| 339 | pop bc ;dx |
||
| 340 | ld a,#03 ;inc bc |
||
| 341 | jp p,shapes_line_nodec |
||
| 342 | xor a |
||
| 343 | sub c |
||
| 344 | ld c,a |
||
| 345 | sbc a,b |
||
| 346 | sub c |
||
| 347 | ld b,a ;dx >= 0 |
||
| 348 | ld a,#0b ;dec bc |
||
| 349 | shapes_line_nodec |
||
| 350 | pop de ;dy |
||
| 344 | alone | 351 | ;a= inc/dec bc |
| 352 | ;bc'=x ( ࠭, ⥫) |
||
| 353 | ;de'=y ( ࠭, ⥫) |
||
| 8 | dimkam | 354 | ;bc=dx |
| 355 | ;de=dy |
||
| 356 | ex de,hl |
||
| 357 | or a |
||
| 358 | sbc hl,bc |
||
| 359 | add hl,bc |
||
| 360 | ex de,hl |
||
| 361 | jr nc,shapes_linever ;dy>=dx |
||
| 362 | ld hy,b |
||
| 363 | ld ly,c ;counter=dx |
||
| 344 | alone | 364 | ;inc iy ;inc hy ;㥬, ᥫ (⥭ 横) |
| 8 | dimkam | 365 | ld h,b |
| 366 | ld l,c |
||
| 367 | sra h |
||
| 344 | alone | 368 | rr l ;ym=dx div 2 ;TODO dx<0? |
| 8 | dimkam | 369 | ;xor a |
| 370 | ;sub l |
||
| 371 | ;ld l,a |
||
| 372 | ;sbc a,h |
||
| 373 | ;sub l |
||
| 374 | ;ld h,a ;mym=256-(dx div 2) |
||
| 375 | exx |
||
| 376 | ld (shapes_lineincx),a |
||
| 377 | ;bc=x |
||
| 378 | ;de=y |
||
| 379 | ;hl'=xm |
||
| 380 | ;bc'=dx |
||
| 381 | ;de'=dy |
||
| 382 | shapes_linehor0 |
||
| 383 | call line_pixel |
||
| 384 | shapes_lineincx=$ |
||
| 385 | inc bc ;x+1 |
||
| 386 | exx |
||
| 387 | ;add hl,de ;mym+dy |
||
| 388 | or a |
||
| 389 | sbc hl,de ;ym-dy |
||
| 390 | exx |
||
| 391 | jr nc,shapes_linehor1 |
||
| 392 | inc de ;y+1 |
||
| 393 | exx |
||
| 394 | ;or a |
||
| 395 | ;sbc hl,bc ;mym-dx |
||
| 396 | add hl,bc ;ym+dx |
||
| 397 | exx |
||
| 398 | shapes_linehor1 |
||
| 399 | dec iy |
||
| 400 | ld a,hy |
||
| 401 | rla |
||
| 402 | jp nc,shapes_linehor0 |
||
| 403 | ret |
||
| 404 | shapes_linever |
||
| 405 | ld hy,d |
||
| 406 | ld ly,e ;counter=dy |
||
| 344 | alone | 407 | ;inc iy ;inc hy ;㥬, ᥫ (⥭ 横) |
| 8 | dimkam | 408 | ld h,d |
| 409 | ld l,e |
||
| 410 | sra h |
||
| 411 | rr l |
||
| 412 | ;xor a |
||
| 413 | ;sub l |
||
| 414 | ;ld l,a |
||
| 415 | ;sbc a,h |
||
| 416 | ;sub l |
||
| 417 | ;ld h,a ;mxm=256-(dy div 2) |
||
| 418 | exx |
||
| 419 | ld (shapes_lineincx2),a |
||
| 420 | ;bc=x |
||
| 421 | ;de=y |
||
| 422 | ;hl'=xm |
||
| 423 | ;bc'=dx |
||
| 424 | ;de'=dy |
||
| 425 | shapes_linever0 |
||
| 426 | call line_pixel |
||
| 427 | inc de ;y+1 |
||
| 428 | exx |
||
| 429 | ;add hl,bc ;mxm+dx |
||
| 430 | or a |
||
| 344 | alone | 431 | sbc hl,bc ;xm-dx ;TODO dx<0? |
| 8 | dimkam | 432 | exx |
| 433 | jr nc,shapes_linever1 |
||
| 434 | shapes_lineincx2=$ |
||
| 435 | inc bc ;x+1 |
||
| 436 | exx |
||
| 437 | ;or a |
||
| 438 | ;sbc hl,de ;mxm-dy |
||
| 439 | add hl,de ;xm+dy |
||
| 440 | exx |
||
| 441 | shapes_linever1 |
||
| 442 | dec iy |
||
| 443 | ld a,hy |
||
| 444 | rla |
||
| 445 | jp nc,shapes_linever0 |
||
| 446 | ret |
||
| 447 | |||
| 448 | line_pixel |
||
| 344 | alone | 449 | ;bc=x ( ⥫) |
| 450 | ;de=y ( ⥫) |
||
| 8 | dimkam | 451 | ld hl,199 |
| 452 | or a |
||
| 453 | sbc hl,de ;y |
||
| 454 | ret c ;y>199 |
||
| 455 | ld hl,319 |
||
| 456 | or a |
||
| 457 | sbc hl,bc ;x |
||
| 458 | ret c ;x>319 |
||
| 115 | alone | 459 | ;push bc |
| 460 | ;push de |
||
| 461 | ; push ix |
||
| 462 | ;ld a,e |
||
| 463 | ;ld d,b |
||
| 464 | ;ld e,c ;de=x |
||
| 465 | ;ld c,a ;c=y |
||
| 466 | ;line_pixel_color=$+2 |
||
| 467 | ; ld lx,0 |
||
| 344 | alone | 468 | ;de=x ( ) |
| 469 | ;c=y (bc ) |
||
| 8 | dimkam | 470 | ;lx=color = %33210210 |
| 115 | alone | 471 | ;call prpixel |
| 472 | ; pop ix |
||
| 473 | ;pop de |
||
| 474 | ;pop bc |
||
| 475 | ;ret |
||
| 476 | prpixel |
||
| 344 | alone | 477 | ;bc=x ( ) |
| 478 | ;e=y (de ) |
||
| 115 | alone | 479 | ;[lx=color = %33210210] |
| 480 | ;ld a,d |
||
| 481 | ld l,e |
||
| 482 | ;ld h,0 |
||
| 483 | ;ld d,scrbase/256/8 ;h |
||
| 484 | ld h,scrbase/256/32 |
||
| 485 | add hl,hl |
||
| 486 | add hl,hl |
||
| 487 | add hl,de |
||
| 488 | add hl,hl |
||
| 489 | add hl,hl |
||
| 490 | add hl,hl ;y*40 + scrbase |
||
| 491 | ;ld d,a |
||
| 492 | prpixel_cury |
||
| 344 | alone | 493 | ;bc=x ( ) |
| 115 | alone | 494 | ;hl=addr(y) |
| 495 | ;lx=color = %33210210 |
||
| 496 | ld a,b |
||
| 497 | rra |
||
| 498 | ld a,c |
||
| 499 | rra |
||
| 500 | jr c,prpixel_r |
||
| 501 | rra |
||
| 502 | jr nc,$+4 |
||
| 503 | set 6,h |
||
| 504 | rra |
||
| 505 | jr nc,$+4 |
||
| 506 | set 5,h |
||
| 1518 | alone | 507 | and 0b00111111 |
| 115 | alone | 508 | add a,l |
| 509 | ld l,a |
||
| 510 | adc a,h |
||
| 511 | sub l |
||
| 512 | ld h,a |
||
| 513 | prpixel_color_l=$+1 |
||
| 514 | ld a,0;lx |
||
| 515 | xor (hl) |
||
| 1518 | alone | 516 | and 0b01000111 ;keep left pixel |
| 115 | alone | 517 | xor (hl) ;right pixel from screen |
| 518 | ld (hl),a |
||
| 8 | dimkam | 519 | ret |
| 115 | alone | 520 | prpixel_r |
| 521 | rra |
||
| 522 | jr nc,$+4 |
||
| 523 | set 6,h |
||
| 524 | rra |
||
| 525 | jr nc,$+4 |
||
| 526 | set 5,h |
||
| 1518 | alone | 527 | and 0b00111111 |
| 115 | alone | 528 | add a,l |
| 529 | ld l,a |
||
| 530 | adc a,h |
||
| 531 | sub l |
||
| 532 | ld h,a |
||
| 533 | prpixel_color_r=$+1 |
||
| 534 | ld a,0;lx |
||
| 535 | xor (hl) |
||
| 1518 | alone | 536 | and 0b10111000 ;keep right pixel |
| 115 | alone | 537 | xor (hl) ;left pixel from screen |
| 538 | ld (hl),a |
||
| 539 | ret |
||
| 540 | |||
| 8 | dimkam | 541 | cmd_system |
| 344 | alone | 542 | ;hl'= |
| 8 | dimkam | 543 | ;system "command params" |
| 1518 | alone | 544 | call getexpr_dehl |
| 8 | dimkam | 545 | bit 7,c |
| 91 | demige | 546 | jp z,fail_syntax |
| 8 | dimkam | 547 | exx |
| 548 | push hl |
||
| 549 | exx |
||
| 550 | ;hl = wordbuf = string |
||
| 55 | Alone | 551 | ld de,curdir ;DE = Pointer to 64 byte (MAXPATH_sz!) buffer |
| 8 | dimkam | 552 | OS_GETPATH |
| 344 | alone | 553 | OS_SETSYSDRV ;TODO ⠫ cmd |
| 8 | dimkam | 554 | |
| 555 | ld de,tcmd |
||
| 556 | OS_OPENHANDLE |
||
| 557 | or a |
||
| 91 | demige | 558 | jp nz,fail_fo |
| 8 | dimkam | 559 | ld a,b |
| 560 | ld (cmd_system_handle),a |
||
| 561 | OS_NEWAPP |
||
| 562 | or a |
||
| 563 | jp nz,close_restoredir_fail |
||
| 344 | alone | 564 | ;dehl= ࠭ 0000,4000,8000,c000 ਫ, b=id, a=error |
| 8 | dimkam | 565 | push bc ;b=id |
| 566 | |||
| 567 | ld a,d |
||
| 1518 | alone | 568 | SETPGC000 |
| 8 | dimkam | 569 | push de |
| 570 | push hl |
||
| 571 | ld hl,syscmdbuf |
||
| 1518 | alone | 572 | ld de,0xc000+COMMANDLINE |
| 8 | dimkam | 573 | ld bc,COMMANDLINE_sz |
| 574 | ldir ;command line |
||
| 575 | xor a |
||
| 1518 | alone | 576 | ld (0xc000+COMMANDLINE+COMMANDLINE_sz-1),a ; 砩, "cmd "+wordbuf 128 |
| 8 | dimkam | 577 | pop hl |
| 578 | pop de |
||
| 579 | cmd_system_handle=$+1 |
||
| 580 | ld b,0 |
||
| 581 | call readfile_pages_dehl |
||
| 582 | call cmd_system_close_restoredir |
||
| 583 | |||
| 584 | pop af ;a=id |
||
| 585 | ld e,a |
||
| 586 | push de |
||
| 587 | OS_RUNAPP |
||
| 588 | pop de |
||
| 11 | dimkam | 589 | WAITPID |
| 8 | dimkam | 590 | pop hl |
| 591 | exx |
||
| 592 | ret |
||
| 593 | |||
| 594 | cmd_system_close_restoredir |
||
| 595 | ld a,(cmd_system_handle) |
||
| 596 | ld b,a |
||
| 597 | OS_CLOSEHANDLE |
||
| 598 | ld de,curdir |
||
| 599 | OS_CHDIR |
||
| 600 | jp restorebasicpages |
||
| 601 | |||
| 602 | close_restoredir_fail |
||
| 603 | call cmd_system_close_restoredir |
||
| 91 | demige | 604 | jp fail_fo |
| 8 | dimkam | 605 | |
| 606 | popret |
||
| 607 | pop af |
||
| 608 | ret |
||
| 609 | readfile_pages_dehl |
||
| 610 | ld a,d |
||
| 611 | push bc |
||
| 1518 | alone | 612 | SETPGC000 |
| 8 | dimkam | 613 | pop bc |
| 614 | ld a,e |
||
| 615 | push af |
||
| 616 | ld a,+(#c000+PROGSTART)/256 |
||
| 617 | call cmd_loadpage |
||
| 618 | jr nz,popret |
||
| 619 | pop af ;e |
||
| 620 | call cmd_setpgloadpage |
||
| 621 | ret nz |
||
| 622 | ld a,h |
||
| 623 | call cmd_setpgloadpage |
||
| 624 | ret nz |
||
| 625 | ld a,l |
||
| 626 | cmd_setpgloadpage |
||
| 627 | push bc |
||
| 1518 | alone | 628 | SETPGC000 |
| 8 | dimkam | 629 | pop bc |
| 1518 | alone | 630 | ld a,0xc000/256 |
| 8 | dimkam | 631 | cmd_loadpage |
| 632 | ;a=loadaddr/256 |
||
| 633 | ;b=handle |
||
| 634 | ;out: de=bytes read, NZ=end of file |
||
| 635 | ;keeps hl,bc |
||
| 636 | push bc |
||
| 637 | push hl |
||
| 638 | ld d,a |
||
| 639 | ld e,0 |
||
| 640 | ld hl,0 |
||
| 641 | or a |
||
| 642 | sbc hl,de |
||
| 643 | ;B = file handle, DE = Buffer address, HL = Number of bytes to read |
||
| 644 | push hl |
||
| 645 | OS_READHANDLE |
||
| 646 | ;HL = Number of bytes actually read, A=error(=0) |
||
| 647 | ex de,hl |
||
| 648 | pop hl |
||
| 649 | or a |
||
| 650 | sbc hl,de ;Number of bytes to read - Number of bytes actually read |
||
| 651 | pop hl |
||
| 652 | pop bc |
||
| 653 | ret |
||
| 654 | |||
| 655 | |||
| 656 | tcmd |
||
| 657 | db "cmd.com",0 |
||
| 658 | |||
| 659 | |||
| 107 | demige | 660 | cmd_loadcode |
| 344 | alone | 661 | ;hl'= |
| 8 | dimkam | 662 | ;load "name.bas" |
| 1518 | alone | 663 | call getexpr_dehl |
| 8 | dimkam | 664 | bit 7,c |
| 91 | demige | 665 | jp z,fail_syntax |
| 8 | dimkam | 666 | call cmd_load_hl |
| 344 | alone | 667 | ; 室 ret, ⮬ ணࠬ 㭨⮦ |
| 8 | dimkam | 668 | jp endofprog |
| 669 | |||
| 670 | cmd_load_hl |
||
| 671 | ;hl = wordbuf = filename |
||
| 672 | ;exx |
||
| 673 | ;ld a,(hl) |
||
| 674 | ;exx |
||
| 675 | ;cp '"' |
||
| 676 | ;jp nz,fail |
||
| 677 | ;call readstr |
||
| 678 | ;jp c,fail |
||
| 679 | ;wordbuf = filename |
||
| 680 | ;ld de,wordbuf ;de=drive/path/file |
||
| 681 | ex de,hl |
||
| 682 | OS_OPENHANDLE |
||
| 683 | ;b=new file handle |
||
| 684 | or a |
||
| 91 | demige | 685 | jp nz,fail_fo |
| 8 | dimkam | 686 | ld de,progmem |
| 687 | ld hl,szprogmem |
||
| 688 | ;B = file handle, DE = Buffer address, HL = Number of bytes to read |
||
| 689 | push bc |
||
| 690 | OS_READHANDLE |
||
| 691 | pop bc |
||
| 692 | ;HL = Number of bytes actually read, A=error |
||
| 693 | ld de,progmem |
||
| 694 | add hl,de |
||
| 695 | ld (progend),hl |
||
| 696 | OS_CLOSEHANDLE |
||
| 697 | call cmd_clear |
||
| 698 | ret |
||
| 699 | |||
| 107 | demige | 700 | cmd_load |
| 344 | alone | 701 | ;hl'= |
| 107 | demige | 702 | ;load "name.bas" |
| 1518 | alone | 703 | call getexpr_dehl |
| 107 | demige | 704 | bit 7,c |
| 705 | jp z,fail_syntax |
||
| 706 | call cmd_load_text |
||
| 344 | alone | 707 | ; 室 ret, ⮬ ணࠬ 㭨⮦ |
| 107 | demige | 708 | jp endofprog |
| 709 | |||
| 91 | demige | 710 | cmd_load_text |
| 711 | ;hl = wordbuf = filename |
||
| 712 | ;ld de,wordbuf ;de=drive/path/file |
||
| 713 | ex de,hl |
||
| 714 | OS_OPENHANDLE |
||
| 715 | ;b=new file handle |
||
| 716 | or a |
||
| 717 | jp nz,fail_fo |
||
| 718 | |||
| 719 | read_next_str |
||
| 720 | ld de,cmdbuf |
||
| 721 | ld hl,1 |
||
| 722 | read_fsmb |
||
| 723 | ;B = file handle, DE = Buffer address, HL = Number of bytes to read |
||
| 724 | push bc |
||
| 725 | push de |
||
| 726 | OS_READHANDLE |
||
| 727 | pop de |
||
| 728 | pop bc |
||
| 729 | ld a,l |
||
| 94 | alone | 730 | or a |
| 344 | alone | 731 | jp z,endfile ; ⠫ = 䠩 - 室 |
| 94 | alone | 732 | ld a,(de) |
| 91 | demige | 733 | cp 0x0A |
| 344 | alone | 734 | jp z,end_read ; ப । 0x0A |
| 91 | demige | 735 | ld a,(de) |
| 94 | alone | 736 | cp 0x0D |
| 344 | alone | 737 | jp z,read_fsmb ; ண뢠 ᨬ ⪨ |
| 91 | demige | 738 | inc de |
| 739 | jp read_fsmb |
||
| 740 | |||
| 741 | end_read |
||
| 742 | xor a |
||
| 344 | alone | 743 | ld (de),a ;⠢ ନ ப |
| 107 | demige | 744 | ld hl,cmdbuf |
| 745 | |||
| 94 | alone | 746 | ex de,hl |
| 747 | ;or a |
||
| 344 | alone | 748 | sbc hl,de ;塞 ப |
| 749 | jp z, read_next_str ; ப, ⠥ |
||
| 750 | ex de,hl ;頥 hl=cmdbuf |
||
| 751 | push bc ; 直 砩 ࠭塞 file handle, 祣... |
||
| 91 | demige | 752 | call add_or_run_line |
| 753 | pop bc |
||
| 754 | jp read_next_str |
||
| 755 | |||
| 756 | endfile |
||
| 757 | OS_CLOSEHANDLE |
||
| 344 | alone | 758 | ld hl,cmdbuf; ப 㦥 䠩 |
| 107 | demige | 759 | ld (hl),0 |
| 94 | alone | 760 | jp cmd_clear |
| 91 | demige | 761 | |
| 344 | alone | 762 | cmd_savecode ; ਣ쭠 楤 ன 㧪 ணࠬ 䠩 |
| 763 | ;hl'= |
||
| 8 | dimkam | 764 | ;save "name.bas" |
| 1518 | alone | 765 | call getexpr_dehl |
| 8 | dimkam | 766 | bit 7,c |
| 91 | demige | 767 | jp z,fail_syntax |
| 8 | dimkam | 768 | ;exx |
| 769 | ;ld a,(hl) |
||
| 770 | ;exx |
||
| 771 | ;cp '"' |
||
| 772 | ;jp nz,fail |
||
| 773 | ;call readstr |
||
| 774 | ;jp c,fail |
||
| 775 | ;wordbuf = filename |
||
| 776 | ;ld de,wordbuf ;de=drive/path/file |
||
| 777 | ex de,hl |
||
| 778 | OS_CREATEHANDLE |
||
| 779 | ;b=new file handle |
||
| 780 | or a |
||
| 91 | demige | 781 | jp nz,fail_fo |
| 8 | dimkam | 782 | ld hl,(progend) |
| 783 | ld de,progmem |
||
| 784 | ;or a |
||
| 785 | sbc hl,de |
||
| 786 | ;B = file handle, DE = Buffer address, HL = Number of bytes to write |
||
| 787 | push bc |
||
| 788 | OS_WRITEHANDLE |
||
| 107 | demige | 789 | pop bc |
| 790 | OS_CLOSEHANDLE |
||
| 344 | alone | 791 | ld hl,cmdbuf ; 砫 |
| 107 | demige | 792 | ld (hl),0 |
| 91 | demige | 793 | exx |
| 107 | demige | 794 | ret |
| 795 | |||
| 796 | cmd_save |
||
| 344 | alone | 797 | ;hl'= |
| 107 | demige | 798 | ;save "name.bas" |
| 1518 | alone | 799 | call getexpr_dehl |
| 107 | demige | 800 | bit 7,c |
| 801 | jp z,fail_syntax |
||
| 802 | ex de,hl |
||
| 803 | ;de=drive/path/file |
||
| 804 | OS_CREATEHANDLE |
||
| 805 | push bc ;filehandle |
||
| 289 | dimkam | 806 | ;display cmd_save, " cmd_save" |
| 807 | ;display cmdbuf, " cmdbuf" |
||
| 107 | demige | 808 | |
| 809 | ;b=new file handle |
||
| 810 | or a |
||
| 811 | jp nz,fail_fo |
||
| 344 | alone | 812 | ;ଠ ப: ப(,), ப(,), ப(asciiz) |
| 107 | demige | 813 | ld hl,progmem |
| 814 | save_lines0 |
||
| 815 | ld de,(progend) |
||
| 816 | or a |
||
| 817 | sbc hl,de |
||
| 818 | add hl,de |
||
| 819 | jr z,save_end |
||
| 820 | |||
| 344 | alone | 821 | push hl ;ઠ ⨥ ਪ |
| 576 | alone | 822 | GETKEY_ |
| 91 | demige | 823 | pop hl |
| 116 | alone | 824 | cp key_esc |
| 107 | demige | 825 | jp z,endbreak |
| 826 | |||
| 344 | alone | 827 | ld d, (hl) ; 㦠 DE ப |
| 107 | demige | 828 | inc hl |
| 829 | ld e, (hl) |
||
| 830 | inc hl |
||
| 831 | |||
| 344 | alone | 832 | push hl ; த ப |
| 833 | push de ; hex |
||
| 834 | ld hl,cmdbuf ; 㧨 hl' 㤠 㦥 ⥪⮢ ப |
||
| 835 | exx ; hl' ⥯ |
||
| 836 | pop de ; hex |
||
| 837 | call prlinenum_tomem ; hl' 㤠, de hex |
||
| 91 | demige | 838 | exx |
| 344 | alone | 839 | ex hl,de ; de த cmdbuf |
| 840 | pop hl; த ப |
||
| 107 | demige | 841 | |
| 344 | alone | 842 | ld a,' ' ; |
| 107 | demige | 843 | ld (de),a |
| 844 | inc de |
||
| 344 | alone | 845 | ld c,(hl) ; ப |
| 107 | demige | 846 | inc hl |
| 344 | alone | 847 | ld b,(hl) ; ப |
| 107 | demige | 848 | inc hl |
| 344 | alone | 849 | ldir ;㥬 ப de |
| 107 | demige | 850 | ld a,0x0D |
| 851 | ld (de),a |
||
| 852 | inc de |
||
| 853 | ld a,0x0A |
||
| 854 | ld (de),a |
||
| 855 | inc de |
||
| 344 | alone | 856 | inc hl; ய᪠ ନ |
| 107 | demige | 857 | |
| 344 | alone | 858 | pop bc ; ⠥ filehandle |
| 859 | push bc ;filehandle ਣ |
||
| 860 | push hl ;⠬ ப |
||
| 107 | demige | 861 | ld hl,cmdbuf |
| 862 | ex hl,de |
||
| 344 | alone | 863 | sbc hl,de ; hl 稢襩 ⥪⮢ ப |
| 864 | ld de,cmdbuf ; de ᠬ ப |
||
| 107 | demige | 865 | |
| 866 | ;B = file handle, DE = Buffer address, HL = Number of bytes to write |
||
| 867 | OS_WRITEHANDLE |
||
| 344 | alone | 868 | pop hl ; ப |
| 107 | demige | 869 | jr save_lines0 |
| 870 | save_end |
||
| 8 | dimkam | 871 | pop bc |
| 91 | demige | 872 | OS_CLOSEHANDLE |
| 107 | demige | 873 | ld hl,cmdbuf |
| 344 | alone | 874 | ld (hl),0 ; 頥 ப |
| 875 | exx ; hl' 砫 |
||
| 8 | dimkam | 876 | ret |
| 877 | |||
| 878 | cmd_new |
||
| 879 | ld hl,progmem |
||
| 880 | ld (progend),hl |
||
| 881 | call cmd_clear |
||
| 882 | jp endofprog |
||
| 883 | |||
| 884 | cmd_clear |
||
| 885 | ld hl,varmem |
||
| 886 | ld (varend),hl |
||
| 887 | ld hl,varindex_int |
||
| 888 | ld de,varindex_int+1 |
||
| 889 | ld bc,511 |
||
| 890 | ld (hl),l;0 |
||
| 891 | ldir |
||
| 892 | ret |
||
| 893 | |||
| 894 | cmd_rem |
||
| 895 | jp gotonextline |
||
| 896 | |||
| 897 | cmd_for |
||
| 344 | alone | 898 | ;hl'= |
| 8 | dimkam | 899 | ;for i=1 to 10 step 2 |
| 344 | alone | 900 | ;ࠬ 横 (4+4(step)+4(to)+4(goto) ) |
| 8 | dimkam | 901 | exx |
| 902 | ld a,(hl) |
||
| 903 | exx |
||
| 344 | alone | 904 | ld c,a ; |
| 8 | dimkam | 905 | call eat |
| 906 | |||
| 907 | ld a,c |
||
| 908 | call findvar_index |
||
| 909 | jr nz,cmd_for_nocreate |
||
| 910 | ld hl,(varend) |
||
| 911 | push hl |
||
| 912 | ld de,4*4 |
||
| 913 | add hl,de |
||
| 914 | ld (varend),hl |
||
| 915 | pop de |
||
| 916 | ;de=addr |
||
| 917 | ld h,varindex_int/256 |
||
| 918 | ld l,c |
||
| 919 | ld (hl),e |
||
| 920 | inc h |
||
| 921 | ld (hl),d |
||
| 922 | cmd_for_nocreate |
||
| 923 | |||
| 924 | call eateq |
||
| 925 | push bc |
||
| 1518 | alone | 926 | call getexpr_dehl |
| 8 | dimkam | 927 | pop bc |
| 928 | ld a,c |
||
| 929 | call setvar_int |
||
| 930 | |||
| 931 | call eatword ;to |
||
| 932 | |||
| 933 | push bc |
||
| 1518 | alone | 934 | call getexpr_dehl |
| 8 | dimkam | 935 | pop bc |
| 1518 | alone | 936 | push de ;HSW |
| 937 | push hl ;LSW |
||
| 8 | dimkam | 938 | ld a,c |
| 939 | call findvar_index |
||
| 940 | ld de,4+4 |
||
| 941 | add hl,de |
||
| 942 | pop de ;LSW |
||
| 943 | ld (hl),e |
||
| 944 | inc hl |
||
| 945 | ld (hl),d |
||
| 946 | inc hl |
||
| 947 | pop de ;HSW |
||
| 948 | ld (hl),e |
||
| 949 | inc hl |
||
| 950 | ld (hl),d |
||
| 951 | |||
| 952 | call eatword ;step |
||
| 953 | |||
| 954 | push bc |
||
| 1518 | alone | 955 | call getexpr_dehl ;dehl=step |
| 8 | dimkam | 956 | pop bc |
| 957 | |||
| 94 | alone | 958 | ld a,h |
| 8 | dimkam | 959 | or l |
| 960 | or d |
||
| 961 | or e |
||
| 91 | demige | 962 | jp z,fail_syntax |
| 8 | dimkam | 963 | |
| 1518 | alone | 964 | push de ;HSW |
| 965 | push hl ;LSW |
||
| 8 | dimkam | 966 | ld a,c |
| 967 | call findvar_index |
||
| 968 | ld de,4 |
||
| 969 | add hl,de |
||
| 970 | pop de ;LSW |
||
| 971 | ld (hl),e |
||
| 972 | inc hl |
||
| 973 | ld (hl),d |
||
| 974 | inc hl |
||
| 975 | pop de ;HSW |
||
| 976 | ld (hl),e |
||
| 977 | inc hl |
||
| 978 | ld (hl),d |
||
| 979 | |||
| 980 | ld a,c |
||
| 981 | call findvar_index |
||
| 982 | ld de,4+4+4 |
||
| 983 | add hl,de |
||
| 984 | ;currunline=$+1 |
||
| 985 | ;ld de,0 |
||
| 986 | ;inc de |
||
| 987 | exx |
||
| 988 | push hl |
||
| 989 | exx |
||
| 990 | pop de |
||
| 991 | ld (hl),e |
||
| 992 | inc hl |
||
| 993 | ld (hl),d |
||
| 994 | inc hl |
||
| 995 | ld (hl),0 |
||
| 996 | inc hl |
||
| 997 | ld (hl),0 |
||
| 998 | |||
| 999 | ret |
||
| 1000 | |||
| 1001 | cmd_next |
||
| 344 | alone | 1002 | ;hl'= |
| 8 | dimkam | 1003 | ;next i (i = i+step, if i<=to then goto...) |
| 1004 | exx |
||
| 1005 | ld a,(hl) |
||
| 1006 | exx |
||
| 344 | alone | 1007 | ld c,a ; |
| 8 | dimkam | 1008 | call eat |
| 1009 | |||
| 1010 | ld a,c |
||
| 1011 | call findvar_index |
||
| 91 | demige | 1012 | jp z,fail_syntax |
| 8 | dimkam | 1013 | |
| 1014 | push hl |
||
| 1518 | alone | 1015 | ld c,(hl) |
| 1016 | inc hl |
||
| 1017 | ld b,(hl) |
||
| 1018 | inc hl |
||
| 8 | dimkam | 1019 | ld e,(hl) |
| 1020 | inc hl |
||
| 1021 | ld d,(hl) |
||
| 1518 | alone | 1022 | inc hl ;debc = i |
| 8 | dimkam | 1023 | |
| 1024 | ld a,(hl) |
||
| 1518 | alone | 1025 | add a,c |
| 1026 | ld c,a |
||
| 8 | dimkam | 1027 | inc hl |
| 1028 | ld a,(hl) |
||
| 1518 | alone | 1029 | adc a,b |
| 1030 | ld b,a |
||
| 8 | dimkam | 1031 | inc hl |
| 1032 | ld a,(hl) |
||
| 1518 | alone | 1033 | adc a,e |
| 1034 | ld e,a |
||
| 8 | dimkam | 1035 | inc hl |
| 1036 | ld a,(hl) |
||
| 1518 | alone | 1037 | adc a,d |
| 1038 | ld d,a ;debc = i = i+step |
||
| 8 | dimkam | 1039 | |
| 1040 | ex (sp),hl |
||
| 1518 | alone | 1041 | ld (hl),c |
| 1042 | inc hl |
||
| 1043 | ld (hl),b |
||
| 1044 | inc hl |
||
| 8 | dimkam | 1045 | ld (hl),e |
| 1046 | inc hl |
||
| 1047 | ld (hl),d |
||
| 1048 | inc hl |
||
| 1049 | pop hl |
||
| 1050 | |||
| 1051 | bit 7,(hl) ;step>=0? |
||
| 1052 | push af |
||
| 1053 | inc hl |
||
| 1054 | |||
| 1055 | ;to>=i? |
||
| 1056 | ld a,(hl) |
||
| 1518 | alone | 1057 | sub c |
| 1058 | ld c,a |
||
| 8 | dimkam | 1059 | inc hl |
| 1060 | ld a,(hl) |
||
| 1518 | alone | 1061 | sbc a,b |
| 1062 | ld b,a |
||
| 8 | dimkam | 1063 | inc hl |
| 1064 | ld a,(hl) |
||
| 1518 | alone | 1065 | sbc a,e |
| 1066 | ld e,a |
||
| 8 | dimkam | 1067 | inc hl |
| 1068 | ld a,(hl) |
||
| 1518 | alone | 1069 | sbc a,d |
| 1070 | ld d,a |
||
| 8 | dimkam | 1071 | inc hl |
| 1518 | alone | 1072 | ;debc = to-i |
| 344 | alone | 1073 | ;TODO ९ |
| 8 | dimkam | 1074 | pop af ;NZ = step<0 |
| 1518 | alone | 1075 | call nz,negdebc |
| 8 | dimkam | 1076 | ;i<=to (to-i >= 0) - continue loop |
| 1518 | alone | 1077 | bit 7,d ;Z = to-i>=0 |
| 8 | dimkam | 1078 | ret nz ;end of loop |
| 1518 | alone | 1079 | call getint ;hl= for ;뫮 dehl= ப |
| 8 | dimkam | 1080 | exx |
| 1081 | ret |
||
| 1082 | ;jp cmd_goto_ok |
||
| 1083 | |||
| 1084 | cmd_dim |
||
| 344 | alone | 1085 | ;hl'= |
| 1086 | ;dim a(15) - 㬥 ⮢ |
||
| 8 | dimkam | 1087 | exx |
| 1088 | ld a,(hl) |
||
| 1089 | exx |
||
| 344 | alone | 1090 | ld c,a ; |
| 8 | dimkam | 1091 | call eat |
| 1092 | |||
| 1093 | ld a,c |
||
| 1094 | call findvar_array |
||
| 344 | alone | 1095 | jp nz,fail_syntax ;㦥 ⠪ ६ |
| 8 | dimkam | 1096 | |
| 1097 | exx |
||
| 1098 | ld a,(hl) |
||
| 1099 | exx |
||
| 1100 | cp '(' |
||
| 91 | demige | 1101 | jp nz,fail_syntax |
| 8 | dimkam | 1102 | call eat |
| 1103 | push bc |
||
| 1518 | alone | 1104 | call getexpr_dehl |
| 8 | dimkam | 1105 | pop bc |
| 1106 | call eatclosebracket |
||
| 1107 | |||
| 1518 | alone | 1108 | ex de,hl ;de=size |
| 8 | dimkam | 1109 | |
| 1110 | ;c=name (char) |
||
| 1111 | ld hl,(varend) |
||
| 1112 | push hl |
||
| 1113 | ld (hl),e |
||
| 1114 | inc hl |
||
| 1115 | ld (hl),d |
||
| 1116 | inc hl |
||
| 1117 | add hl,de |
||
| 1118 | add hl,de |
||
| 1119 | add hl,de |
||
| 1120 | add hl,de |
||
| 1121 | ld (varend),hl |
||
| 1122 | pop de |
||
| 1123 | ;de=addr |
||
| 1124 | ld h,varindex_int/256 |
||
| 1125 | ld l,c |
||
| 1126 | ld (hl),e |
||
| 1127 | inc h |
||
| 1128 | ld (hl),d |
||
| 1129 | ret |
||
| 1130 | |||
| 1131 | cmd_edit |
||
| 344 | alone | 1132 | ;hl'= |
| 1518 | alone | 1133 | call getexpr_dehl |
| 1134 | ex de,hl |
||
| 1135 | call findline ;de |
||
| 8 | dimkam | 1136 | ld a,(hl) |
| 1137 | cp d |
||
| 91 | demige | 1138 | jp nz,fail_syntax |
| 8 | dimkam | 1139 | inc hl |
| 1140 | ld a,(hl) |
||
| 1141 | cp e |
||
| 91 | demige | 1142 | jp nz,fail_syntax |
| 344 | alone | 1143 | ;hl= ப, + 1 |
| 8 | dimkam | 1144 | inc hl |
| 1145 | inc hl |
||
| 1146 | inc hl |
||
| 1147 | |||
| 1148 | push hl |
||
| 1149 | exx |
||
| 1150 | ld hl,cmdbuf |
||
| 1151 | exx |
||
| 1518 | alone | 1152 | call prlinenum_tomem ;de |
| 8 | dimkam | 1153 | exx |
| 1154 | ld (hl),' ' |
||
| 1155 | inc hl |
||
| 1156 | push hl |
||
| 1157 | exx |
||
| 344 | alone | 1158 | pop de ;cmdbuf+ |
| 1159 | pop hl ;hl= ப (⥪) |
||
| 8 | dimkam | 1160 | |
| 1161 | push hl |
||
| 1162 | call strlen |
||
| 1163 | ld b,h |
||
| 1164 | ld c,l |
||
| 344 | alone | 1165 | inc bc ; ନ |
| 8 | dimkam | 1166 | pop hl |
| 1167 | |||
| 1168 | ;ld de,cmdbuf |
||
| 1169 | ;ld bc,MAXCMDSZ+1 |
||
| 1170 | ldir |
||
| 1171 | jp endofedit |
||
| 1172 | |||
| 1173 | cmd_then |
||
| 1174 | cmd_colon |
||
| 1175 | ret |
||
| 1176 | |||
| 1177 | cmd_list |
||
| 344 | alone | 1178 | ; ப(,), ப(,), ப(asciiz) |
| 1179 | ld hl,progmem ; progmem ⠭ 砫 ணࠬ |
||
| 8 | dimkam | 1180 | list_lines0 |
| 344 | alone | 1181 | ld de,(progend) ; progend 室 ६ 㪠뢠 ணࠬ |
| 8 | dimkam | 1182 | or a |
| 1183 | sbc hl,de |
||
| 1184 | add hl,de |
||
| 1185 | ret z |
||
| 1186 | |||
| 344 | alone | 1187 | push hl ;ઠ ⨥ ਪ |
| 576 | alone | 1188 | GETKEY_ |
| 8 | dimkam | 1189 | pop hl |
| 116 | alone | 1190 | cp key_esc |
| 8 | dimkam | 1191 | jp z,endbreak |
| 1192 | |||
| 1193 | ld d,(hl) |
||
| 1194 | inc hl |
||
| 344 | alone | 1195 | ld e,(hl) ; ப |
| 8 | dimkam | 1196 | inc hl |
| 1197 | push hl |
||
| 344 | alone | 1198 | call prword_de ; ப |
| 8 | dimkam | 1199 | ld a,' ' |
| 576 | alone | 1200 | PRCHAR_ |
| 8 | dimkam | 1201 | pop hl |
| 107 | demige | 1202 | |
| 8 | dimkam | 1203 | ;ld e,(hl) |
| 1204 | inc hl |
||
| 344 | alone | 1205 | ;ld d,(hl) ; ப |
| 8 | dimkam | 1206 | inc hl |
| 1207 | call prtext ;hl after terminator |
||
| 1208 | call prcrlf |
||
| 107 | demige | 1209 | |
| 8 | dimkam | 1210 | jr list_lines0 |
| 1211 | |||
| 1212 | |||
| 1213 | macro STRPUSH |
||
| 1214 | ;hl=string addr |
||
| 1215 | xor a |
||
| 1216 | push af |
||
| 1217 | ld a,(hl) |
||
| 1218 | inc hl |
||
| 1219 | or a |
||
| 1220 | push af |
||
| 1221 | jr nz,$-4 |
||
| 1222 | pop af |
||
| 344 | alone | 1223 | ; ⥪ \0, ⥪ ( ନ) |
| 8 | dimkam | 1224 | endm |
| 1225 | |||
| 1226 | macro STRPOP |
||
| 1227 | ;hl=string addr |
||
| 1228 | ld d,h |
||
| 1229 | ld e,l |
||
| 1230 | pop af |
||
| 1231 | ld (hl),a |
||
| 1232 | inc hl |
||
| 1233 | or a |
||
| 1234 | jr nz,$-4 |
||
| 1235 | ex de,hl |
||
| 1236 | call strmirror |
||
| 1237 | endm |
||
| 1238 | |||
| 1239 | strmirror |
||
| 1240 | ;hl=string addr |
||
| 1241 | ld d,h |
||
| 1242 | ld e,l |
||
| 1243 | call strlen |
||
| 1244 | ld b,h |
||
| 1245 | ld c,l |
||
| 344 | alone | 1246 | ;de=砫, bc=hl= |
| 8 | dimkam | 1247 | ;ld h,b |
| 1248 | ;ld l,c |
||
| 344 | alone | 1249 | add hl,de ;hl=+1 |
| 8 | dimkam | 1250 | srl b |
| 1251 | rr c ;bc=wid/2 |
||
| 1252 | mirrorbytes0 |
||
| 1253 | dec hl |
||
| 1254 | ld a,(de) |
||
| 1255 | ldi |
||
| 1256 | dec hl |
||
| 1257 | ld (hl),a |
||
| 1258 | jp pe,mirrorbytes0 |
||
| 1259 | ret |
||
| 1260 | |||
| 1261 | |||
| 1262 | cmd_let |
||
| 344 | alone | 1263 | ;hl'= |
| 8 | dimkam | 1264 | exx ;ld hl,(execcmd_pars) |
| 1265 | ld a,(hl) |
||
| 1266 | exx |
||
| 1267 | ld c,a |
||
| 1268 | exx |
||
| 1269 | inc hl ;call eat |
||
| 1270 | ld a,(hl) |
||
| 1271 | exx |
||
| 1272 | cp '$' |
||
| 1273 | jr z,cmd_let_str |
||
| 1274 | cp '(' |
||
| 1275 | jr z,cmd_let_array |
||
| 344 | alone | 1276 | ;hl'= |
| 8 | dimkam | 1277 | call eatspaces |
| 1278 | call eateq |
||
| 1279 | ld a,c |
||
| 1280 | call findvar_int |
||
| 1281 | jr nz,cmd_let_createq |
||
| 1282 | ld a,c |
||
| 1283 | call addvar_int |
||
| 1284 | cmd_let_createq |
||
| 1285 | push bc |
||
| 1518 | alone | 1286 | call getexpr_dehl ;dehl=value |
| 344 | alone | 1287 | pop bc ; ࠦ c |
| 8 | dimkam | 1288 | ld a,c |
| 344 | alone | 1289 | call setvar_int ;TODO ᪠ ६ ன ࠧ |
| 8 | dimkam | 1290 | ret |
| 1291 | |||
| 1292 | cmd_let_array |
||
| 1293 | call eat ;skip '(' and spaces |
||
| 1294 | push bc |
||
| 1518 | alone | 1295 | call getexpr_dehl |
| 8 | dimkam | 1296 | pop bc |
| 1297 | call eatclosebracket |
||
| 1298 | ld a,c |
||
| 1299 | call findvar_int |
||
| 91 | demige | 1300 | jp z,fail_syntax |
| 8 | dimkam | 1301 | call indexarray |
| 344 | alone | 1302 | push hl ; |
| 8 | dimkam | 1303 | call eateq |
| 1518 | alone | 1304 | call getexpr_dehl |
| 8 | dimkam | 1305 | ld b,h |
| 1518 | alone | 1306 | ld c,l ;debc |
| 344 | alone | 1307 | pop hl ; |
| 1518 | alone | 1308 | ld (hl),c |
| 1309 | inc hl |
||
| 1310 | ld (hl),b |
||
| 1311 | inc hl |
||
| 8 | dimkam | 1312 | ld (hl),e |
| 1313 | inc hl |
||
| 1314 | ld (hl),d |
||
| 1315 | ret |
||
| 1316 | |||
| 1317 | cmd_let_str |
||
| 1318 | call eat ;skip '$' and spaces |
||
| 1319 | exx |
||
| 1320 | ld a,(hl) |
||
| 1321 | exx |
||
| 1322 | cp '(' |
||
| 1323 | jr z,cmd_let_strarray |
||
| 1324 | ld a,c |
||
| 1325 | call findvar_str |
||
| 1326 | jr nz,cmd_let_str_createq |
||
| 1327 | ld a,c |
||
| 1328 | call addvar_str |
||
| 1329 | cmd_let_str_createq |
||
| 344 | alone | 1330 | ;hl'= |
| 8 | dimkam | 1331 | call eateq |
| 1332 | exx |
||
| 1333 | ld a,(hl) |
||
| 1334 | exx |
||
| 1335 | cp '"' |
||
| 91 | demige | 1336 | jp nz,fail_syntax |
| 8 | dimkam | 1337 | |
| 1338 | call readstr ;hl=str, hl'=after num and spaces, CY=error |
||
| 91 | demige | 1339 | jp c,fail_syntax |
| 8 | dimkam | 1340 | |
| 1341 | ;ld hl,wordbuf |
||
| 1342 | ;STRPUSH |
||
| 1343 | |||
| 1344 | ;ld hl,wordbuf |
||
| 1345 | ld a,c |
||
| 1346 | call setvar_str |
||
| 1347 | |||
| 1348 | ;ld hl,wordbuf |
||
| 1349 | ;STRPOP |
||
| 1350 | |||
| 1351 | ret |
||
| 1352 | |||
| 1353 | cmd_let_strarray |
||
| 1354 | call eat ;skip '(' and spaces |
||
| 1355 | push bc |
||
| 1518 | alone | 1356 | call getexpr_dehl ;dehl=index |
| 8 | dimkam | 1357 | pop bc |
| 1358 | call eatclosebracket |
||
| 1359 | call eateq |
||
| 1518 | alone | 1360 | ex de,hl |
| 8 | dimkam | 1361 | ld a,c |
| 1518 | alone | 1362 | call findvar_str ;hl=str |
| 91 | demige | 1363 | jp z,fail_syntax |
| 1518 | alone | 1364 | ld a,d ;de=index |
| 8 | dimkam | 1365 | or a |
| 91 | demige | 1366 | jp nz,fail_syntax ;range check |
| 8 | dimkam | 1367 | add hl,de |
| 1368 | push hl ;addr in str |
||
| 1518 | alone | 1369 | call getexpr_dehl ;dehl=char |
| 1370 | ld a,l |
||
| 8 | dimkam | 1371 | pop hl ;addr in str |
| 1518 | alone | 1372 | ld (hl),a |
| 8 | dimkam | 1373 | ret |
| 1374 | |||
| 1375 | cmd_cls |
||
| 1376 | exx |
||
| 1377 | push hl |
||
| 1378 | ld e,0;COLOR |
||
| 1379 | OS_CLS |
||
| 1380 | pop hl |
||
| 1381 | exx |
||
| 1382 | ret |
||
| 1383 | |||
| 1384 | cmd_if |
||
| 344 | alone | 1385 | ;hl'= |
| 1518 | alone | 1386 | call getexpr_dehl |
| 8 | dimkam | 1387 | ld a,h |
| 1388 | or l |
||
| 1389 | or d |
||
| 1390 | or e |
||
| 1391 | ret nz ;true = continue this line |
||
| 1392 | gotonextline |
||
| 1393 | exx |
||
| 1394 | xor a |
||
| 1395 | ld bc,0 |
||
| 1396 | cpir |
||
| 344 | alone | 1397 | dec hl ; ନ |
| 8 | dimkam | 1398 | ld a,(runmode) |
| 1399 | cp RUNMODE_PROG |
||
| 1400 | jr nz,gotonextlineq |
||
| 344 | alone | 1401 | inc hl ; ப |
| 8 | dimkam | 1402 | call startline |
| 1403 | gotonextlineq |
||
| 1404 | exx |
||
| 1405 | ret |
||
| 1406 | |||
| 1407 | cmd_goto |
||
| 344 | alone | 1408 | ;hl'= |
| 1518 | alone | 1409 | call getexpr_dehl |
| 1410 | ex de,hl |
||
| 1411 | ;cmd_goto_ok |
||
| 1412 | ;de= ப |
||
| 1413 | call findline ;de |
||
| 8 | dimkam | 1414 | call startline |
| 1415 | exx |
||
| 1416 | ld a,RUNMODE_PROG |
||
| 1417 | ld (runmode),a |
||
| 1418 | ret |
||
| 1419 | |||
| 1420 | |||
| 1421 | cmd_run |
||
| 344 | alone | 1422 | ; 室 ret, ⮬ run 맢 ࠡ稪 ப |
| 8 | dimkam | 1423 | ld a,RUNMODE_PROG |
| 1424 | ld (runmode),a |
||
| 1425 | ld hl,progmem |
||
| 1426 | jr cmd_run_startline |
||
| 1427 | cmd_run0 |
||
| 344 | alone | 1428 | ;hl'= ப |
| 8 | dimkam | 1429 | exx |
| 1430 | ld a,(hl) |
||
| 1431 | or a |
||
| 1432 | jr nz,cmd_run_nonextline |
||
| 1433 | runmode=$+1 |
||
| 1434 | ld a,0 |
||
| 1435 | cp RUNMODE_INTERACTIVE |
||
| 1436 | jp z,endofprog ;ret z ;end of line in interactive mode |
||
| 1437 | inc hl |
||
| 1438 | cmd_run_startline |
||
| 1439 | call startline |
||
| 1440 | cmd_run_nonextline |
||
| 1441 | exx |
||
| 1442 | call docmd |
||
| 1443 | jr cmd_run0 |
||
| 1444 | |||
| 1445 | startline |
||
| 1446 | ld bc,(progend) |
||
| 1447 | or a |
||
| 1448 | sbc hl,bc |
||
| 1449 | add hl,bc |
||
| 1450 | jp nc,endofprog ;ret nc ;end of program |
||
| 1451 | ;ld d,(hl) |
||
| 1452 | inc hl |
||
| 1453 | ;ld e,(hl) |
||
| 1454 | inc hl |
||
| 1455 | ;ld (currunline),de |
||
| 1456 | ;ld e,(hl) |
||
| 1457 | inc hl |
||
| 1458 | ;ld d,(hl) ;line size |
||
| 1459 | inc hl |
||
| 1460 | ret |
||
| 1461 | |||
| 1462 | eatcolon |
||
| 1463 | ;out: z=end of command |
||
| 1464 | exx |
||
| 1465 | ld a,(hl) |
||
| 1466 | exx |
||
| 1467 | or a |
||
| 1468 | ret z |
||
| 1469 | cp ':' |
||
| 1470 | ret nz |
||
| 1471 | call eat |
||
| 1472 | xor a ;Z |
||
| 1473 | ret |
||
| 1474 | |||
| 1475 | cmd_print |
||
| 344 | alone | 1476 | ;hl'= |
| 8 | dimkam | 1477 | call eatcolon |
| 1478 | jp z,prcrlf |
||
| 9 | dimkam | 1479 | cmd_print0 |
| 8 | dimkam | 1480 | exx |
| 1481 | ld a,(hl) |
||
| 1482 | exx |
||
| 1483 | cp ';' |
||
| 1484 | jp z,cmd_print_semicolon |
||
| 1518 | alone | 1485 | call getexpr_dehl |
| 1486 | call prval_dehl |
||
| 8 | dimkam | 1487 | jr cmd_print |
| 1488 | cmd_print_semicolon |
||
| 1489 | call eat |
||
| 1490 | call eatcolon |
||
| 9 | dimkam | 1491 | jr nz,cmd_print ;TODO cmd_print0? |
| 8 | dimkam | 1492 | ret |
| 1493 | |||
| 1518 | alone | 1494 | getexpr_dehl |
| 1495 | ;out: dehl=value, c=type |
||
| 8 | dimkam | 1496 | call getaddexpr |
| 91 | demige | 1497 | getexpr0 |
| 8 | dimkam | 1498 | exx |
| 1499 | ld a,(hl) |
||
| 1500 | exx |
||
| 1501 | ;cp ',' |
||
| 1502 | ;ret z ;jp z,eat |
||
| 1503 | ;cp ')' |
||
| 1504 | ;ret z ;jp z,eat |
||
| 1505 | ;cp ':' ;call eatcolon |
||
| 1506 | ;ret z |
||
| 1507 | ;or a |
||
| 1508 | ;ret z |
||
| 1509 | cp '=' |
||
| 1510 | jr z,getexpr_eq |
||
| 1511 | cp '>' |
||
| 1512 | jr z,getexpr_more |
||
| 1513 | cp '<' |
||
| 1514 | jr z,getexpr_less |
||
| 1515 | ret |
||
| 1516 | |||
| 1517 | getexpr_eq |
||
| 1518 | call eat |
||
| 1519 | call getexpr_eq_subr |
||
| 1520 | jr getexpr0 |
||
| 1521 | |||
| 1522 | getexpr_more |
||
| 1523 | call eat |
||
| 1524 | exx |
||
| 1525 | ld a,(hl) |
||
| 1526 | exx |
||
| 1527 | cp '=' |
||
| 1528 | jr z,getexpr_moreeq |
||
| 1529 | call getexpr_more_subr |
||
| 1530 | jr getexpr0 |
||
| 1531 | |||
| 1532 | getexpr_less |
||
| 1533 | call eat |
||
| 1534 | exx |
||
| 1535 | ld a,(hl) |
||
| 1536 | exx |
||
| 1537 | cp '=' |
||
| 1538 | jr z,getexpr_lesseq |
||
| 1539 | cp '>' |
||
| 1540 | jr z,getexpr_noteq |
||
| 1541 | call getexpr_less_subr |
||
| 1542 | jr getexpr0 |
||
| 1543 | |||
| 1544 | getexpr_noteq |
||
| 1545 | call eat |
||
| 1546 | call getexpr_eq_subr |
||
| 1547 | call loginv |
||
| 1548 | jr getexpr0 |
||
| 1549 | |||
| 1550 | getexpr_moreeq |
||
| 1551 | call eat |
||
| 1552 | call getexpr_less_subr |
||
| 1553 | call loginv |
||
| 1554 | jr getexpr0 |
||
| 1555 | |||
| 1556 | getexpr_lesseq |
||
| 1557 | call eat |
||
| 1558 | call getexpr_more_subr |
||
| 1559 | call loginv |
||
| 1560 | jr getexpr0 |
||
| 1561 | |||
| 1562 | getexpr_more_subr |
||
| 1563 | ;old > new: new-old = CY |
||
| 1564 | push bc |
||
| 1518 | alone | 1565 | push de ;HSW |
| 1566 | push hl ;LSW |
||
| 8 | dimkam | 1567 | call getaddexpr |
| 1568 | pop bc ;LSW |
||
| 1569 | or a |
||
| 1570 | sbc hl,bc |
||
| 1518 | alone | 1571 | pop bc ;HSW |
| 8 | dimkam | 1572 | ex de,hl |
| 1573 | sbc hl,bc |
||
| 1518 | alone | 1574 | ex de,hl |
| 8 | dimkam | 1575 | pop bc |
| 1576 | ld hl,0 |
||
| 1577 | ld de,0 |
||
| 1578 | ret nc |
||
| 1579 | dec hl |
||
| 1580 | dec de ;old > new |
||
| 1581 | ret |
||
| 1582 | |||
| 1583 | getexpr_less_subr |
||
| 1584 | ;old < new: old-new = CY |
||
| 1585 | push bc |
||
| 1518 | alone | 1586 | push de ;old HSW |
| 1587 | push hl ;old LSW |
||
| 8 | dimkam | 1588 | call getaddexpr |
| 1589 | pop bc ;old LSW |
||
| 1590 | pop af ;old HSW |
||
| 1518 | alone | 1591 | push de ;new HSW |
| 1592 | push hl ;new LSW |
||
| 8 | dimkam | 1593 | push af ;old HSW |
| 1594 | push bc ;old LSW |
||
| 1518 | alone | 1595 | pop hl ;old LSW |
| 1596 | pop de ;old HSW |
||
| 8 | dimkam | 1597 | |
| 1598 | pop bc ;LSW |
||
| 1599 | or a |
||
| 1600 | sbc hl,bc |
||
| 1518 | alone | 1601 | pop bc ;HSW |
| 8 | dimkam | 1602 | ex de,hl |
| 1603 | sbc hl,bc |
||
| 1518 | alone | 1604 | ex de,hl |
| 8 | dimkam | 1605 | pop bc |
| 1606 | ld hl,0 |
||
| 1607 | ld de,0 |
||
| 1608 | ret nc |
||
| 1609 | dec hl |
||
| 1610 | dec de ;old < new |
||
| 1611 | ret |
||
| 1612 | |||
| 1613 | getexpr_eq_subr |
||
| 1614 | push bc |
||
| 1518 | alone | 1615 | push de ;HSW |
| 1616 | push hl ;LSW |
||
| 8 | dimkam | 1617 | call getaddexpr |
| 1618 | pop bc ;LSW |
||
| 1619 | or a |
||
| 1620 | sbc hl,bc |
||
| 1518 | alone | 1621 | pop bc ;HSW |
| 8 | dimkam | 1622 | ex de,hl |
| 1623 | sbc hl,bc |
||
| 1518 | alone | 1624 | ex de,hl |
| 8 | dimkam | 1625 | ld a,d |
| 1626 | or e |
||
| 1627 | or h |
||
| 1628 | or l |
||
| 1629 | pop bc |
||
| 1630 | ld hl,0 |
||
| 1631 | ld de,0 |
||
| 1632 | ret nz |
||
| 1633 | dec hl |
||
| 1634 | dec de ;old = new |
||
| 1635 | ret |
||
| 1636 | |||
| 1637 | getaddexpr |
||
| 1638 | call getmulexpr |
||
| 91 | demige | 1639 | getaddexpr0 |
| 8 | dimkam | 1640 | exx |
| 1641 | ld a,(hl) |
||
| 1642 | exx |
||
| 1643 | ;or a |
||
| 1644 | ;ret z |
||
| 1645 | ;cp ')' |
||
| 1646 | ;ret z ;jp z,eat |
||
| 1647 | ;cp ',' |
||
| 1648 | ;ret z ;jp z,eat |
||
| 1649 | ;cp ':' ;call eatcolon |
||
| 1650 | ;ret z |
||
| 1651 | cp '+' |
||
| 1652 | jr z,getaddexpr_plus |
||
| 1653 | cp '-' |
||
| 1654 | jr z,getaddexpr_minus |
||
| 1655 | ret |
||
| 1656 | |||
| 1657 | getaddexpr_plus |
||
| 1658 | call eat |
||
| 1659 | push bc |
||
| 1518 | alone | 1660 | push de ;HSW |
| 1661 | push hl ;LSW |
||
| 8 | dimkam | 1662 | call getmulexpr |
| 1663 | pop bc ;LSW |
||
| 1664 | add hl,bc |
||
| 1518 | alone | 1665 | pop bc ;HSW |
| 8 | dimkam | 1666 | ex de,hl |
| 1667 | adc hl,bc |
||
| 1518 | alone | 1668 | ex de,hl |
| 8 | dimkam | 1669 | pop bc |
| 1670 | jr getaddexpr0 |
||
| 1671 | |||
| 1672 | getaddexpr_minus |
||
| 1673 | call eat |
||
| 1674 | push bc |
||
| 1518 | alone | 1675 | push de ;HSW |
| 1676 | push hl ;LSW |
||
| 8 | dimkam | 1677 | call getmulexpr |
| 1678 | pop bc ;LSW |
||
| 1679 | or a |
||
| 1680 | sbc hl,bc |
||
| 1518 | alone | 1681 | pop bc ;HSW |
| 8 | dimkam | 1682 | ex de,hl |
| 1683 | sbc hl,bc |
||
| 1518 | alone | 1684 | ex de,hl |
| 1685 | call negdehl |
||
| 8 | dimkam | 1686 | pop bc |
| 1687 | jr getaddexpr0 |
||
| 1688 | |||
| 1689 | getmulexpr |
||
| 1518 | alone | 1690 | call getval_dehl_ |
| 91 | demige | 1691 | getmulexpr0 |
| 8 | dimkam | 1692 | exx |
| 1693 | ld a,(hl) |
||
| 1694 | exx |
||
| 1695 | ;or a |
||
| 1696 | ;ret z |
||
| 1697 | ;cp ')' |
||
| 1698 | ;ret z ;jp z,eat |
||
| 1699 | ;cp ',' |
||
| 1700 | ;ret z ;jp z,eat |
||
| 1701 | ;cp ':' ;call eatcolon |
||
| 1702 | ;ret z |
||
| 1703 | cp '*' |
||
| 1704 | jr z,getmulexpr_mul |
||
| 1705 | cp '/' |
||
| 1706 | jr z,getmulexpr_div |
||
| 1707 | ret |
||
| 1708 | |||
| 1709 | getmulexpr_div |
||
| 1710 | call eat |
||
| 1711 | push bc |
||
| 1518 | alone | 1712 | push de ;HSW old |
| 1713 | push hl ;LSW old |
||
| 1714 | call getval_dehl_ |
||
| 1715 | push de ;HSW new |
||
| 8 | dimkam | 1716 | push hl ;LSW new |
| 1717 | exx |
||
| 1718 | pop ix ;LSW new |
||
| 1719 | pop bc ;HSW new |
||
| 1720 | pop de ;LSW old |
||
| 1721 | ex (sp),hl ;pop hl ;HSW old |
||
| 1518 | alone | 1722 | call _DIVLONG. ;hl, de / bc, ix ;out: hl(high), de(low) |
| 1723 | ex de,hl ;dehl |
||
| 8 | dimkam | 1724 | exx |
| 344 | alone | 1725 | pop hl ; |
| 8 | dimkam | 1726 | exx |
| 1727 | pop bc |
||
| 1728 | jr getmulexpr0 |
||
| 1729 | |||
| 1730 | getmulexpr_mul |
||
| 1731 | call eat |
||
| 1732 | push bc |
||
| 1518 | alone | 1733 | push de ;HSW |
| 1734 | push hl ;LSW |
||
| 1735 | call getval_dehl_ |
||
| 8 | dimkam | 1736 | pop ix ;LSW |
| 1737 | pop bc ;HSW |
||
| 1518 | alone | 1738 | ex de,hl ;hl,de |
| 8 | dimkam | 1739 | call _MULLONG. |
| 1518 | alone | 1740 | ex de,hl ;dehl |
| 8 | dimkam | 1741 | pop bc |
| 1742 | jr getmulexpr0 |
||
| 1743 | |||
| 1744 | ;hl, de / bc, ix |
||
| 1745 | ;out: hl(high), de(low) |
||
| 1746 | _DIVLONG. |
||
| 1747 | ;EXPORT _DIVLONG. |
||
| 1748 | ld a,h |
||
| 1749 | xor b |
||
| 1750 | push af |
||
| 1751 | xor b |
||
| 1518 | alone | 1752 | call m,div_neghlde |
| 8 | dimkam | 1753 | ld a,b |
| 1754 | rla |
||
| 1755 | jr nc,divlongnonegbcix |
||
| 1756 | xor a |
||
| 1757 | sub lx |
||
| 1758 | ld lx,a |
||
| 1759 | ld a,0 |
||
| 1760 | sbc a,hx |
||
| 1761 | ld hx,a |
||
| 1762 | ld a,0 |
||
| 1763 | sbc a,c |
||
| 1764 | ld c,a |
||
| 1765 | ld a,0 |
||
| 1766 | sbc a,b |
||
| 1767 | ld b,a |
||
| 1768 | divlongnonegbcix |
||
| 1769 | ;unsigned!!! |
||
| 1770 | ;hl'hl,de'de <= hlde,bcix: |
||
| 1771 | push bc |
||
| 1772 | exx |
||
| 1773 | pop de ;de' = "bc_in" |
||
| 1774 | ld hl,0 |
||
| 1775 | exx |
||
| 1776 | ld a,e |
||
| 1518 | alone | 1777 | ex af,af' ;' ;e_in |
| 8 | dimkam | 1778 | push de ;d_in |
| 1779 | ld c,l ;l_in |
||
| 1780 | ld a,h ;h_in |
||
| 1781 | ld hl,0 |
||
| 1782 | push ix |
||
| 1783 | pop de ;de = "ix_in" |
||
| 1784 | ;a="h_in" |
||
| 1785 | ;hl'hla <= 0000h_in |
||
| 1786 | call _DIVLONGP. ;"h" |
||
| 1787 | ld b,c ;"l_in" |
||
| 1788 | ld c,a ;"h" |
||
| 1789 | ld a,b ;a="l_in" |
||
| 1790 | ;hl'hla <= 000hl_in |
||
| 1791 | call _DIVLONGP. ;"l" |
||
| 1792 | ld b,a ;"l" |
||
| 1793 | pop af ;a="d_in" |
||
| 1794 | push bc ;b="l" |
||
| 1795 | ;hl'hla <= 00hld_in |
||
| 1796 | call _DIVLONGP. ;"d" |
||
| 1797 | ex af,af' ;a="e_in", a'="d" |
||
| 1798 | ;a="e_in" |
||
| 1799 | ;hl'hla <= 0hlde_in |
||
| 1800 | call _DIVLONGP. ;"e" |
||
| 1801 | ld e,a ;"e" |
||
| 1518 | alone | 1802 | ex af,af' ;' ;"d" |
| 8 | dimkam | 1803 | ld d,a |
| 1804 | pop hl ;h="l" |
||
| 1805 | ld l,h |
||
| 1806 | ld h,c ;"h" |
||
| 1807 | |||
| 1808 | pop af |
||
| 1809 | ret p |
||
| 1518 | alone | 1810 | div_neghlde |
| 1811 | xor a |
||
| 1812 | sub e |
||
| 1813 | ld e,a |
||
| 1814 | ld a,0 |
||
| 1815 | sbc a,d |
||
| 1816 | ld d,a |
||
| 1817 | ld a,0 |
||
| 1818 | sbc a,l |
||
| 1819 | ld l,a |
||
| 1820 | ld a,0 |
||
| 1821 | sbc a,h |
||
| 1822 | ld h,a |
||
| 1823 | ret |
||
| 1824 | |||
| 8 | dimkam | 1825 | ;a = hl'hla/de'de |
| 1826 | ;c not used |
||
| 1827 | _DIVLONGP. |
||
| 1828 | ;do 8 bits |
||
| 1829 | ld b,8 |
||
| 1830 | _DIVLONG0. |
||
| 1831 | ;shift left hl'hla |
||
| 1832 | rla |
||
| 1833 | adc hl,hl |
||
| 1834 | exx |
||
| 1835 | adc hl,hl |
||
| 1836 | exx |
||
| 1837 | ;no carry |
||
| 1838 | ;try sub |
||
| 1839 | sbc hl,de |
||
| 1840 | exx |
||
| 1841 | sbc hl,de |
||
| 1842 | exx |
||
| 1843 | jr nc,$+2+1+1+2+1 |
||
| 1844 | add hl,de |
||
| 1845 | exx |
||
| 1846 | adc hl,de |
||
| 1847 | exx |
||
| 1848 | ;carry = inverted bit of result |
||
| 1849 | djnz _DIVLONG0. |
||
| 1850 | rla |
||
| 1851 | cpl |
||
| 1852 | ret |
||
| 1853 | |||
| 1854 | ;hl, de * bc, ix |
||
| 1855 | ;out: hl(high), de(low) |
||
| 1856 | _MULLONG. |
||
| 1857 | ;EXPORT _MULLONG. |
||
| 1858 | ;signed mul is equal to unsigned mul |
||
| 1859 | ;hlde*bcix = hlde*b000 + hlde*c00 + hlde*i0 + hlde*x |
||
| 1860 | ld a,lx |
||
| 1861 | push af ;lx |
||
| 1862 | push ix ;hx |
||
| 1863 | ld a,c |
||
| 1864 | push af ;c |
||
| 1865 | ld a,b |
||
| 1866 | ;bcde <= hlde: |
||
| 1867 | ld b,h |
||
| 1868 | ld c,l |
||
| 1869 | ;hlix <= 0 |
||
| 1870 | ld hl,0 |
||
| 1871 | ;ld ix,0 |
||
| 1872 | push hl |
||
| 1873 | pop ix |
||
| 1874 | call _MULLONGP. ;hlix = (hlix<<8) + "b*hlde" |
||
| 1875 | pop af ;c |
||
| 1876 | call _MULLONGP. ;hlix = (hlix<<8) + "c*hlde" |
||
| 1877 | pop af ;hx |
||
| 1878 | call _MULLONGP. ;hlix = (hlix<<8) + "hx*hlde" |
||
| 1879 | pop af ;lx |
||
| 1880 | call _MULLONGP. ;hlix = (hlix<<8) + "lx*hlde" |
||
| 1881 | push ix |
||
| 1882 | pop de |
||
| 1883 | ret |
||
| 1884 | ;hlix = (hlix<<8) + a*bcde |
||
| 1885 | _MULLONGP. |
||
| 1886 | exx |
||
| 1887 | ld b,8 |
||
| 1888 | _MULLONG0. |
||
| 1889 | exx |
||
| 1890 | add ix,ix |
||
| 1891 | adc hl,hl |
||
| 1892 | rla |
||
| 1893 | jr nc,$+2+2+2 |
||
| 1894 | add ix,de |
||
| 1895 | adc hl,bc |
||
| 1896 | exx |
||
| 344 | alone | 1897 | djnz _MULLONG0. ; a==0 ( 室 scf:rla, add a,a) |
| 8 | dimkam | 1898 | exx |
| 1899 | ret |
||
| 1900 | |||
| 1901 | |||
| 1902 | |||
| 1903 | getval_unaryminus |
||
| 1904 | call eat |
||
| 1518 | alone | 1905 | call getval_dehl_ |
| 1906 | jp negdehl |
||
| 8 | dimkam | 1907 | getval_bracket |
| 1908 | call eat |
||
| 1518 | alone | 1909 | call getexpr_dehl |
| 8 | dimkam | 1910 | jp eatclosebracket |
| 1911 | |||
| 1518 | alone | 1912 | getval_dehl_ |
| 344 | alone | 1913 | ;hl'= |
| 1518 | alone | 1914 | ;out: dehl=value, c=type |
| 8 | dimkam | 1915 | exx |
| 1916 | ld a,(hl) |
||
| 1917 | exx |
||
| 1918 | cp '$' |
||
| 1919 | jp z,getval_function |
||
| 1920 | cp '-' |
||
| 1921 | jr z,getval_unaryminus |
||
| 1922 | cp '(' |
||
| 1923 | jr z,getval_bracket |
||
| 1924 | cp '"' |
||
| 1518 | alone | 1925 | jp z,getval_str |
| 8 | dimkam | 1926 | sub '0' |
| 1927 | cp 10 |
||
| 1518 | alone | 1928 | jr c,getval_num_dehl |
| 8 | dimkam | 1929 | exx |
| 1930 | ld a,(hl) |
||
| 1931 | exx |
||
| 9 | dimkam | 1932 | ld c,a ;name |
| 8 | dimkam | 1933 | exx |
| 1934 | inc hl ;call eat |
||
| 1935 | ld a,(hl) |
||
| 1936 | exx |
||
| 1937 | cp '$' |
||
| 1938 | jr z,getval_varstr |
||
| 1939 | cp '(' |
||
| 1940 | jr z,getval_vararray |
||
| 1941 | call eatspaces |
||
| 1942 | ld a,c |
||
| 1943 | call findvar_int |
||
| 91 | demige | 1944 | jp z,fail_syntax |
| 8 | dimkam | 1945 | ;ld a,c |
| 1946 | ;call getvar_int |
||
| 1947 | call getint |
||
| 1948 | res 7,c ;ld c,0 ;int |
||
| 1949 | ret |
||
| 1950 | getval_varstr |
||
| 1951 | call eat ;skip '$' and spaces |
||
| 1952 | exx |
||
| 1953 | ld a,(hl) |
||
| 1954 | exx |
||
| 1955 | cp '(' |
||
| 1956 | jr z,getval_varchararray |
||
| 1957 | ld a,c |
||
| 1958 | call findvar_str |
||
| 91 | demige | 1959 | jp z,fail_syntax |
| 8 | dimkam | 1960 | ;ld a,c |
| 1961 | ;call getvar_str |
||
| 1962 | set 7,c ;ld c,128 ;str |
||
| 1963 | ret |
||
| 1964 | getval_varchararray |
||
| 1965 | call eat |
||
| 1966 | push bc |
||
| 1518 | alone | 1967 | call getexpr_dehl |
| 8 | dimkam | 1968 | pop bc |
| 1969 | call eatclosebracket |
||
| 1518 | alone | 1970 | ex de,hl ;de=index |
| 8 | dimkam | 1971 | ld a,c |
| 1972 | call findvar_str |
||
| 91 | demige | 1973 | jp z,fail_syntax |
| 1518 | alone | 1974 | ld a,d ;de=index |
| 8 | dimkam | 1975 | or a |
| 91 | demige | 1976 | jp nz,fail_syntax ;range check |
| 8 | dimkam | 1977 | add hl,de |
| 1518 | alone | 1978 | ld l,(hl) |
| 1979 | ld de,0 |
||
| 1980 | ld h,d ;dehl=char |
||
| 8 | dimkam | 1981 | res 7,c ;ld c,0 ;int |
| 1982 | ret |
||
| 1983 | getval_vararray |
||
| 1984 | call eat |
||
| 1985 | push bc |
||
| 1518 | alone | 1986 | call getexpr_dehl |
| 8 | dimkam | 1987 | pop bc |
| 1988 | call eatclosebracket |
||
| 1518 | alone | 1989 | ex de,hl ;de=index |
| 8 | dimkam | 1990 | ld a,c |
| 1991 | call findvar_array |
||
| 91 | demige | 1992 | jp z,fail_syntax |
| 8 | dimkam | 1993 | call indexarray |
| 1994 | call getint |
||
| 1995 | res 7,c ;ld c,0 ;int |
||
| 1996 | ret |
||
| 1518 | alone | 1997 | getval_num_dehl |
| 1998 | call readnum_dehl ;dehl=num, hl'=after num and spaces, CY=error |
||
| 91 | demige | 1999 | jp c,fail_syntax |
| 8 | dimkam | 2000 | res 7,c ;ld c,0 ;int |
| 2001 | ret |
||
| 2002 | getval_str |
||
| 2003 | call readstr ;hl=str, hl'=after str and spaces, CY=error |
||
| 91 | demige | 2004 | jp c,fail_syntax |
| 8 | dimkam | 2005 | set 7,c ;ld c,0 ;str |
| 2006 | ret |
||
| 2007 | |||
| 1518 | alone | 2008 | prval_dehl |
| 2009 | ;dehl=value, c=type |
||
| 8 | dimkam | 2010 | exx |
| 2011 | push hl |
||
| 2012 | exx |
||
| 2013 | bit 7,c |
||
| 2014 | jr nz,prval_str |
||
| 1518 | alone | 2015 | call prdword_dehl |
| 8 | dimkam | 2016 | pop hl |
| 2017 | exx |
||
| 2018 | ret |
||
| 2019 | prval_str |
||
| 2020 | call prstr_withlen |
||
| 2021 | pop hl |
||
| 2022 | exx |
||
| 2023 | ret |
||
| 2024 | |||
| 2025 | |||
| 2026 | readstr |
||
| 344 | alone | 2027 | ;hl'= (㪠뢠 뢠 ) |
| 8 | dimkam | 2028 | ;out: hl=str, hl'=after num and spaces, CY=error |
| 2029 | exx |
||
| 2030 | inc hl |
||
| 2031 | ld de,wordbuf |
||
| 344 | alone | 2032 | ;TODO ઠ |
| 8 | dimkam | 2033 | quote_getword0 |
| 2034 | ld a,(hl) |
||
| 2035 | or a |
||
| 2036 | ccf |
||
| 2037 | ret z ;CY=error |
||
| 2038 | ;jp z,fail ;jr z,quote_getwordq |
||
| 2039 | sub '"' |
||
| 2040 | jr z,quote_getwordq |
||
| 2041 | ldi |
||
| 2042 | jp quote_getword0 |
||
| 2043 | quote_getwordq |
||
| 2044 | xor a |
||
| 2045 | ld (de),a |
||
| 2046 | exx |
||
| 344 | alone | 2047 | call eat ;ꥤ 騥 |
| 8 | dimkam | 2048 | ld hl,wordbuf |
| 2049 | or a ;NC = OK |
||
| 2050 | ret ;NC |
||
| 2051 | |||
| 2052 | indexarray |
||
| 344 | alone | 2053 | ;hl= ᨢ |
| 2054 | ;de= |
||
| 2055 | ;c= ᨢ? |
||
| 2056 | ;out: hl= (fail, out of bounds) |
||
| 8 | dimkam | 2057 | push bc |
| 2058 | ld c,(hl) |
||
| 2059 | inc hl |
||
| 2060 | ld b,(hl) |
||
| 2061 | inc hl |
||
| 2062 | ex de,hl |
||
| 2063 | or a |
||
| 2064 | sbc hl,bc |
||
| 2065 | add hl,bc |
||
| 2066 | ex de,hl |
||
| 2067 | pop bc |
||
| 91 | demige | 2068 | jp nc,fail_syntax ;range check |
| 8 | dimkam | 2069 | add hl,de |
| 2070 | add hl,de |
||
| 2071 | add hl,de |
||
| 2072 | add hl,de |
||
| 2073 | ret |
||
| 2074 | |||
| 2075 | func_rnd |
||
| 2076 | ;Patrik Rak |
||
| 2077 | rndseed1=$+1 |
||
| 2078 | ld hl,0xA280 ; xz -> yw |
||
| 2079 | rndseed2=$+1 |
||
| 2080 | ld de,0xC0DE ; yw -> zt |
||
| 2081 | ld (rndseed1),de ; x = y, z = w |
||
| 2082 | ld a,e ; w = w ^ ( w << 3 ) |
||
| 2083 | add a,a |
||
| 2084 | add a,a |
||
| 2085 | add a,a |
||
| 2086 | xor e |
||
| 2087 | ld e,a |
||
| 2088 | ld a,h ; t = x ^ (x << 1) |
||
| 2089 | add a,a |
||
| 2090 | xor h |
||
| 2091 | ld d,a |
||
| 2092 | rra ; t = t ^ (t >> 1) ^ w |
||
| 2093 | xor d |
||
| 2094 | xor e |
||
| 2095 | ld h,l ; y = z |
||
| 2096 | ld l,a ; w = t |
||
| 2097 | ld (rndseed2),hl |
||
| 2098 | ex de,hl |
||
| 2099 | ld hl,0 |
||
| 2100 | res 7,c ;int |
||
| 2101 | ret |