Source code for a fig Forth interpreter/compiler for the M6809.
M6809用の Forth 原語インタープリター・コンパイラーのソースコード。
Revision | 02ea0f0936f7d9c1a09884982449886c023c1297 (tree) |
---|---|
Zeit | 2019-02-09 00:47:33 |
Autor | Joel Matthew Rees <reiisi@user...> |
Commiter | Joel Matthew Rees |
Improved debug stack dump and NEXT version evaluates, does not compile.
@@ -3,12 +3,13 @@ imgtool dir coco_jvc_rsdos workfig.dsk | ||
3 | 3 | |
4 | 4 | imgtool del coco_jvc_rsdos workfig.dsk FIG.BIN |
5 | 5 | |
6 | -imgtool put coco_jvc_rsdos figauto6809opt.dsk figao09.bin FIGAO09.BIN | |
6 | +[imgtool put coco_jvc_rsdos figauto6809opt.dsk figao09.bin FIGAO09.BIN] | |
7 | 7 | imgtool put coco_jvc_rsdos workfig.dsk a.out FIG.BIN |
8 | 8 | |
9 | 9 | |
10 | 10 | ../../lwtools-4.14/lwasm/lwasm --list=fig-forth-auto6809opt.list fig-forth-auto6809opt.asm |
11 | -../lwtools-4.14/lwasm/lwasm --list=figao.list figao.asm | |
11 | +../../lwtools-4.14/lwasm/lwasm --list=fig-forth-auto6809.list fig-forth-auto6809.asm | |
12 | +[../lwtools-4.14/lwasm/lwasm --list=figao.list figao.asm] | |
12 | 13 | |
13 | 14 | for name in bif-6809lw/*.ASM ; do echo $name :\\n ; cat $name | tr '\r' '\n' | grep "BACK" ; done |
14 | 15 |
@@ -16,7 +17,9 @@ for name in bif-6809lw/*.ASM ; do echo $name :\\n ; cat $name | tr '\r' '\n' | | ||
16 | 17 | xroar-0.34.7/src/xroar -machine coco2bus -bas roms/Color\ Basic\ v1.3\ \(1982\)\(Tandy\).rom -extbas roms/Extended\ Colour\ Basic\ v1.0\ \(1981\)\(Tandy\)/coco.rom -cart rsdos -cart-rom roms/Color\ Computer\ Controller\ \(1982\)\ \(26-3022\).rom -keymap us -kbd-translate |
17 | 18 | |
18 | 19 | |
19 | -git push reiisi@git.osdn.net:/gitroot/fig-forth-6809/fig-forth-6809.git | |
20 | +LOADM "FIG.BIN" | |
21 | +LOADM"FIG | |
22 | +EXEC &H1200 | |
20 | 23 | |
21 | 24 | |
22 | 25 | hex |
@@ -427,7 +427,7 @@ DELINT FDB 4 initial carriage return delay | ||
427 | 427 | * STABX STA 0,X 16 cycles until 'NEXT' |
428 | 428 | * STB 1,X |
429 | 429 | * STABX STD 0,X ; ?? cycles until 'NEXT' |
430 | - BRA NEXT | |
430 | +* BRA NEXT | |
431 | 431 | * GETX LDA 0,X 18 cycles until 'NEXT' |
432 | 432 | * LDB 1,X |
433 | 433 | * GETX LDD 0,X ?? cycles until 'NEXT' |
@@ -466,8 +466,8 @@ NEXT ; IP is Y, push before using, pull before you come back here. | ||
466 | 466 | * |
467 | 467 | * NEXT2 LDX 0,X get W which points to CFA of word to be done |
468 | 468 | NEXT2 LDX ,Y++ get W which points to CFA of word to be done |
469 | -* BSR DBGNAM | |
470 | -* BSR DBGREG | |
469 | + BSR DBGNAM | |
470 | + BSR DBGREG | |
471 | 471 | * But NEXT2 is too much trouble to use with subroutine threading anyway. |
472 | 472 | * NEXT3 STX W |
473 | 473 | NEXT3 ; W is X until you use X for something else. (TOS points back here.) |
@@ -479,7 +479,7 @@ NEXT3 ; W is X until you use X for something else. (TOS points back here.) | ||
479 | 479 | * = |
480 | 480 | * JMP 0,X |
481 | 481 | |
482 | - JSR [,X] ; Saving the postinc cycles, | |
482 | + JMP [,X] ; Saving the postinc cycles, | |
483 | 483 | * ; but X must be bumped NATWID to the parameters. |
484 | 484 | * NOP |
485 | 485 | * JMP TRACE ( an alternate for the above ) |
@@ -607,7 +607,7 @@ DBGRkl JSR [$A000] | ||
607 | 607 | CMPA #$53 ; 'S' |
608 | 608 | BEQ DBGRdS |
609 | 609 | CMPA #$49 ; 'I' |
610 | - BNE DBGRrt | |
610 | + LBNE DBGRrt | |
611 | 611 | DBGRin LDD <XTIB |
612 | 612 | ADDD <XIN |
613 | 613 | TFR D,Y |
@@ -622,6 +622,34 @@ DBGRit DECA | ||
622 | 622 | BNE DBGRip |
623 | 623 | BRA DBGRrt |
624 | 624 | DBGRdS TFR S,Y |
625 | + LDD ,Y++ | |
626 | + LBSR OUThxA | |
627 | + LDA #$9F | |
628 | + STA ,X+ | |
629 | + LBSR OUThxB | |
630 | + LDD ,Y++ | |
631 | + LBSR OUThxA | |
632 | + LDA #$9F | |
633 | + STA ,X+ | |
634 | + LBSR OUThxB | |
635 | + LDA #$58 ; X | |
636 | + STA ,X+ | |
637 | + LDD ,Y++ | |
638 | + LBSR OUThxD | |
639 | + LDA #$59 ; Y | |
640 | + STA ,X+ | |
641 | + LDD ,Y++ | |
642 | + LBSR OUThxD | |
643 | + LDA #$55 ; U | |
644 | + STA ,X+ | |
645 | + LDD ,Y++ | |
646 | + LBSR OUThxD | |
647 | + LDA #$50 ; PC | |
648 | + STA ,X+ | |
649 | + LDD ,Y++ | |
650 | + LBSR OUThxD | |
651 | + LDA #$53 ; Stack | |
652 | + STA ,X+ | |
625 | 653 | BRA DBGRst |
626 | 654 | DBGRsp LDD ,Y++ |
627 | 655 | LBSR OUThxD |
@@ -641,6 +669,8 @@ DBGRup LDD ,Y++ | ||
641 | 669 | STB ,X+ |
642 | 670 | DBGRut CMPY <XSPZER |
643 | 671 | BLO DBGRup |
672 | + LDB #$FF | |
673 | + STB ,X+ | |
644 | 674 | DBGRrt PULS CC,A,B,DP,X,Y,U,PC |
645 | 675 | DBGRLB FCC 'DPCC PC S U Y X A B ' |
646 | 676 | FDB 0,0 |
@@ -1445,7 +1475,9 @@ QTERM FDB *+NATWID | ||
1445 | 1475 | FCB $D2 |
1446 | 1476 | FDB QTERM-12 |
1447 | 1477 | CR FDB *+NATWID |
1448 | - LBRA PCR ; Nothing really to do here. | |
1478 | +* LBSR DBGREG | |
1479 | + LBSR PCR ; Nothing really to do here. | |
1480 | + LBRA NEXT | |
1449 | 1481 | * JSR PCR |
1450 | 1482 | * JMP NEXT |
1451 | 1483 | * |
@@ -1848,6 +1880,7 @@ SPSTOR FDB *+NATWID | ||
1848 | 1880 | FDB SPSTOR-6 |
1849 | 1881 | RPSTOR FDB *+NATWID |
1850 | 1882 | LDS RINIT,PCR |
1883 | +* LBSR DBGREG | |
1851 | 1884 | LBRA NEXT |
1852 | 1885 | * LDX RINIT initialize from rom constant |
1853 | 1886 | * STX RP |
@@ -1863,6 +1896,7 @@ RPSTOR FDB *+NATWID | ||
1863 | 1896 | FCB $D3 |
1864 | 1897 | FDB RPSTOR-6 |
1865 | 1898 | SEMIS FDB *+NATWID |
1899 | +* LBSR DBGREG | |
1866 | 1900 | PULS Y ; saved IP in Y. |
1867 | 1901 | LBRA NEXT |
1868 | 1902 | * |
@@ -4276,8 +4310,8 @@ QUIT3 FDB BRAN | ||
4276 | 4310 | FCB $D4 |
4277 | 4311 | FDB QUIT-7 |
4278 | 4312 | ABORT FDB DOCOL,SPSTOR,DEC,QSTACK,DRZERO,CR,PDOTQ |
4279 | - FCB 10 | |
4280 | - FCC "Forth-6809" | |
4313 | + FCB 14 | |
4314 | + FCC "fig-Forth-6809" | |
4281 | 4315 | FDB FORTH,DEFIN |
4282 | 4316 | FDB QUIT |
4283 | 4317 | * FDB SEMIS never executed |
@@ -4293,11 +4327,15 @@ ABORT FDB DOCOL,SPSTOR,DEC,QSTACK,DRZERO,CR,PDOTQ | ||
4293 | 4327 | COLD FDB *+NATWID |
4294 | 4328 | * Ultimately, we want position indepence, |
4295 | 4329 | * so I'm using PCR where it seems reasonable. |
4296 | -CENT LDS SINIT,PCR ; Get a useable return stack, at least. | |
4330 | +CENT LDS RINIT,PCR ; Get a useable return stack, at least. | |
4331 | + LDU SINIT,PCR ; Get a useable parameter stack, too. | |
4297 | 4332 | LDA #IUPDP ; This is not relative to PC. |
4298 | 4333 | TFR A,DP ; And a useable direct page, too. |
4299 | 4334 | SETDP IUPDP ; (For good measure.) |
4300 | 4335 | * |
4336 | +* CLR TRACEM ; DBG | |
4337 | +* DEC TRACEM ; DBG | |
4338 | +* LBSR DBGREG | |
4301 | 4339 | * We'll keep this here for the time being. |
4302 | 4340 | * There are better ways to do this, of course. |
4303 | 4341 | * Re-architect, re-architect. |
@@ -4307,6 +4345,7 @@ CENT LDS SINIT,PCR ; Get a useable return stack, at least. | ||
4307 | 4345 | LEAX RAM,PCR ; bottom of stuff to move |
4308 | 4346 | COLD2 LDA ,X+ |
4309 | 4347 | STA ,Y+ ; move TASK & FORTH to ram |
4348 | +* LBSR DBGREG | |
4310 | 4349 | CMPX <XFENCE |
4311 | 4350 | BNE COLD2 |
4312 | 4351 | * Leaves USE and PREV uninitialized. |
@@ -4366,6 +4405,7 @@ WENT LDS SINIT,PCR ; Get a useable return stack, at least. | ||
4366 | 4405 | LEAX FENCIN,PCR ; top of stuff to move |
4367 | 4406 | WARM2 LDD ,--X ; All entries are 16 bit. |
4368 | 4407 | STD ,--Y |
4408 | +* LBSR DBGREG | |
4369 | 4409 | CMPX ,S |
4370 | 4410 | BNE WARM2 |
4371 | 4411 | LEAS 2,S ; But we'll reset the return stack shortly, anyway. |
@@ -608,7 +608,7 @@ DBGRkl JSR [$A000] | ||
608 | 608 | CMPA #$53 ; 'S' |
609 | 609 | BEQ DBGRdS |
610 | 610 | CMPA #$49 ; 'I' |
611 | - BNE DBGRrt | |
611 | + LBNE DBGRrt | |
612 | 612 | DBGRin LDD <XTIB |
613 | 613 | ADDD <XIN |
614 | 614 | TFR D,Y |
@@ -623,6 +623,34 @@ DBGRit DECA | ||
623 | 623 | BNE DBGRip |
624 | 624 | BRA DBGRrt |
625 | 625 | DBGRdS TFR S,Y |
626 | + LDD ,Y++ | |
627 | + LBSR OUThxA | |
628 | + LDA #$9F | |
629 | + STA ,X+ | |
630 | + LBSR OUThxB | |
631 | + LDD ,Y++ | |
632 | + LBSR OUThxA | |
633 | + LDA #$9F | |
634 | + STA ,X+ | |
635 | + LBSR OUThxB | |
636 | + LDA #$58 ; X | |
637 | + STA ,X+ | |
638 | + LDD ,Y++ | |
639 | + LBSR OUThxD | |
640 | + LDA #$59 ; Y | |
641 | + STA ,X+ | |
642 | + LDD ,Y++ | |
643 | + LBSR OUThxD | |
644 | + LDA #$55 ; U | |
645 | + STA ,X+ | |
646 | + LDD ,Y++ | |
647 | + LBSR OUThxD | |
648 | + LDA #$50 ; PC | |
649 | + STA ,X+ | |
650 | + LDD ,Y++ | |
651 | + LBSR OUThxD | |
652 | + LDA #$53 ; Stack | |
653 | + STA ,X+ | |
626 | 654 | BRA DBGRst |
627 | 655 | DBGRsp LDD ,Y++ |
628 | 656 | LBSR OUThxD |
@@ -642,6 +670,8 @@ DBGRup LDD ,Y++ | ||
642 | 670 | STB ,X+ |
643 | 671 | DBGRut CMPY <XSPZER |
644 | 672 | BLO DBGRup |
673 | + LDB #$FF | |
674 | + STB ,X+ | |
645 | 675 | DBGRrt PULS CC,A,B,DP,X,Y,U,PC |
646 | 676 | DBGRLB FCC 'DPCC PC S U Y X A B ' |
647 | 677 | FDB 0,0 |
@@ -4252,8 +4282,8 @@ QUIT3 FDB BRAN | ||
4252 | 4282 | FCB $D4 |
4253 | 4283 | FDB QUIT-7 |
4254 | 4284 | ABORT FDB DOCOL,SPSTOR,DEC,QSTACK,DRZERO,CR,PDOTQ |
4255 | - FCB 10 | |
4256 | - FCC "Forth-6809" | |
4285 | + FCB 19 | |
4286 | + FCC "fig-Forth-6809(RTS)" | |
4257 | 4287 | FDB FORTH,DEFIN |
4258 | 4288 | FDB QUIT |
4259 | 4289 | * FDB SEMIS never executed |