Mini-GBasic für den VC 20
Dieses Programm für VC 20 mit mindestens 16 KByte-Speichererweiterung implementiert zehn neue Befehle, die sich auf die Bildschirmdarstellung und die Grafik des VC 20 beziehen.
Mini-GBasic ist eine Befehlserweiterung, die schnelle Grafik-Routinen in Maschinensprache beinhaltet. Mini-GBasic bietet 10 neue Befehle zum Beispiel zum Setzen oder Löschen eines Punktes oder zum Verbinden zweier beliebiger Punkte. Außerdem wird ein Scrollen des Bildschirmes in alle vier Richtungen ermöglicht, was bei Spielen sehr nützlich sein kann. Mini-GBasic zeichnet sich dadurch aus, daß die neuen Befehle voll implementiert sind, so daß auch nach einem IF…THEN-Statement kein Doppelpunkt gesetzt werden muß, wenn einer der neuen Befehle folgt (dies ist bei, mir aus anderen Computerzeitschriften bekannten, ähnlichen Programmen leider nicht der Fall).
Zu erwähnen ist noch, daß man bei Mini-GBasic für die Befehle DRAW beziehungsweise CDRAW und SET beziehungsweise RESET benötigte Parameter, wie bei Basic-Funktionen, in Klammern eingeschlossen übergibt (dabei wird zur Übernahme beliebiger Ausdrücke das ROM-Unterprogramm GET-BYTE ab Adresse $ D79B verwendet).
Zur Fehlerbehandlung
Das Programm gibt die im »normalen« Basic vorhandenen Fehlermeldungen »illegal quantity error in…« bei für die Grafik-Befehle nicht definierten Parametern und »syntax error in…« bei fehlenden Klammern und falsch eingegebenen Befehlsworten, die immer ausgeschrieben werden müssen, aus.
Zu den allgemeinen Möglichkeiten des Programmes ist noch zu sagen, daß es mit 29568 (x-Achse:0-167; y-Achse:0-175) im 16x8-Byte-Modus arbeitet.
Wichtig: Falls Sie das mit dem »Basic-Lader« geSAVEte Maschinenprogramm testen wollen, müssen Sie nach dem Ladevorgang erst einen System-Reset mit SYS 64802 durchführen und danach das eigentliche Maschinenprogramm mit SYS 9794 starten (das Programm setzt automatisch den Basic-Start herauf und führt den Befehl »New« aus).
Zur Eingabe des Programms
- Vor dem Eintippen des Basic-Laders wird der Basic-Start mit den Befehlen POKE 9823,0:POKE 43,96:POKE 44,38:NEW heraufgesetzt. Dies ist notwendig, da sich der Basic-Lader sonst selber überschreiben würde.
- Nach dem Start des Basic-Laders wird das Maschinenprogramm eingePOKEt und eine Prüfsumme erstellt. Bei fehlerhafter Eingabe der DATAs wird eine Fehlermeldung ausgegeben.
- Der Basic-Lader wartet mit Ausgabe der Frage »Bereit zum Absaven?« auf Eingabe der Taste »j«. Danach wird das Maschinenprogramm abgeSAVEt.
- Das nach der eben beschriebenen Vorgehensweise geSAVEte Maschinenprogramm kann nun einfach durch Eingabe von »LOAD« an die Stelle geladen werden, an der es vor dem AbSAVEn gestanden hat. Dies wird dadurch erreicht, daß es vorher mit dem Befehl »SAVE "MINI GBASIC", 1,1« ge-SAVEt wurde.
- Nach dem Einladen des Maschinenprogrammes muß ein System-Reset durchgeführt werden (SYS64802), wonach die Befehlserweiterung mit SYS 9794 gestartet werden kann. Dieser SYS-Befehl muß auch nach eventuell durchgeführten System-Resets eingegeben werden, da dabei alle Basic-Vektoren zurückgesetzt werden. Nachdem sich die Befehlserweiterung mit »READY« gemeldet hat, können die Befehle benutzt werden.
Vor allen Befehlen muß ein Ausrufezeichen, das Erkennungsmerkmal für den Computer, daß jetzt einer der neuen Befehle folgt, stehen, da sonst eine »Syntax error«-Meldung ausgegeben wird. Nach dem Ausrufezeichen folgt der neue Befehl voll ausgeschrieben.
Die Befehle im einzelnen
!GMODE: Umschalten in den Grafikmodus und Löschen des Zeichensatzes.
!TMODE: Umschalten in den Textmodus und Löschen des Bildschirmes.
!DSCROLL: Scrollt den Bildschirm (im Textmodus) um eine Zeichenposition nach unten.
!USCROLL: Scrollt den Bildschirm (im Textmodus) um eine Zeichenposition nach oben.
!LSCROLL: Scrollt den Bildschirm (im Textmodus) um eine Zeichenpostition nach links.
!RSCROLL: Scrollt den Bildschirm (im Textmodus) um eine Zeichenposition nach rechts.
!SET(x,y): Setzt einen Punkt (im Grafikmodus) auf die Koordinate (x,y).
!RESET (x,y): Löscht einen Punkt (im Grafikmodus) auf der Koordinate (x,y,).
!DRAW (x,y): Zieht eine Linie (im Grafikmodus) von der letzten durch !SET,!RESET,!DRAW oder !CDRAW gesetzten Koordinate zur Koordinate (x,y).
!CDRAW (x,y): Löscht eine Linie (im Grafikmodus) von der letzten durch !SET,!RESET,!DRAW oder !CDRAW gesetzten Koordinate zur Koordinate (x,y)
(x,y): x = beliebiger numerischer- oder String-Ausdruck mit dem Wert 0-167
y = beliebiger numerischer- oder String-Ausdruck mit dem Wert 0-175
!CLEAR: Löscht den Grafik-Bildschirm
Anmerkung zu !GMODE:
Die Farbe, in der die Punkte auf den Bildschirm gebracht werden, läßt sich verändern, indem man den Inhalt der Speicherzelle 8224 (dezimal) mit dem gewünschten Farbcode belegt, bevor der Befehl !GMODE, der dann den Farbcode in den Farbspeicher bringt, ausgeführt wird.
Vorsicht ist bei der Benutzung der Grafik im Direktmodus des Computers geboten. Da der neue Zeichensatz teilweise im Bildschirm-RAM-Bereich liegt (das ist notwendig um mit der hohen Auflösung von 168 x 176 Punkten arbeiten zu können), ist es möglich, mit dem Cursor in den ersten 32 neu definierten 16 x 8 Bit Zeichen »herumzufahren«.
Für diejenigen, die selber in Maschinensprache programmieren, ist hier noch eine Liste mit den Einsprungadressen der wichtigsten Routinen und der Lage der Befehlswort-DATAs abgedruckt (Tabellen 1 und 2). Zur Benutzung der Routinen SET/RESET und DRAW/CDRAW sei noch angemerkt, daß ein Einsprung in die jeweilige Routine mit gesetztem Carry-Flag das Setzen eines Punktes beziehungsweise das Zeichnen einer Linie und der Einsprung mit gelöschtem Carry-Flag das Löschen eines Punktes oder einer Linie bewirkt.
(Jürgen Skerhut / ev)SET+RESET: x1,y1 DRAW + CDRAW: x2,y2 |
||
Adresse | Variable | |
$033C | x1 | |
$033D | y1 | |
$0359 | x2 | |
$035A | y2 |
Adresse in HEX | |
$1100-2000 | Zeichenspeicher |
$2000 | GMODE |
$2028 | CLEAR |
$2050 | TMODE |
$20CA | SET+RESET |
$21C0 | DSCROLL |
$2250 | LSCROLL |
$22A0 | RSCROLL |
$22E5 | INITIAL |
$2300 | sucht Ausrufezeichen im Basic-Text |
$2312 | DECODE |
$2378 | neue IF-THEN Routine |
$23BA-23FF | DATA: Befehlswort |
$25BA-25BF | DATA: Adressen der Routinen |
0 rem mini gbasic 1 rem 2 rem juergen skerhut 3 rem donatusstr.5 4 rem 5210 troisdorf 5 rem 6 rem 7 rem 22 data 32,95,229,169 24 data 151,141,3,144 26 data 169,21,141 28 data 2,144,169,204 30 data 141,5,144,169 32 data 14,141,0,144 34 data 162,0,160,16 36 data 152,157,0,16 38 data 169,6,157,0 40 data 148,232,200 42 data 208,243,169 44 data 17,160,0,133 46 data 1,132,0,152 48 data 145,0,24,169 50 data 1,101,0,133 52 data 0,169,0,101 54 data 1,133,1,201 56 data 32,208,236 58 data 76,174,199 60 data 234,234,234 62 data 234,234,234 64 data 234,234,234 66 data 169,12,141 68 data 0,144,169,22 70 data 141,2,144,169 72 data 174,141,3,144 74 data 169,192,141 76 data 5,144,32,95 78 data 229,96,32,80 80 data 32,76,174,199 82 data 234,234,169 84 data 0,141,65,3 86 data 141,66,3,141 88 data 67,3,162,8 90 data 78,64,3,144 92 data 19,24,173,62 94 data 3,109,66,3 96 data 141,66,3,173 98 data 63,3,109,67 100 data 3,141,67,3 102 data 78,67,3,110 104 data 66,3,110,65 106 data 3,202,208 108 data 220,96,234 110 data 234,234,56 112 data 173,68,3,237 114 data 69,3,141,70 116 data 3,96,24,173 118 data 71,3,101,0 120 data 133,0,173 122 data 72,3,101,1 124 data 133,1,96,169 126 data 0,133,0,133 128 data 1,96,234,234 130 data 234,8,169 132 data 0,162,0,160 134 data 0,32,192,32 136 data 169,80,141 138 data 62,3,169,1 140 data 141,63,3,173 142 data 61,3,41,240 144 data 74,74,74,74 146 data 141,64,3,32 148 data 112,32,173 150 data 65,3,141,71 152 data 3,173,66,3 154 data 141,72,3,32 156 data 176,32,169 158 data 16,141,64 160 data 3,173,60,3 162 data 41,248,74 164 data 74,74,141 166 data 62,3,169,0 168 data 141,63,3,32 170 data 112,32,173 172 data 65,3,141,71 174 data 3,173,66,3 176 data 141,72,3,32 178 data 176,32,173 180 data 61,3,41,15 182 data 141,71,3,169 184 data 0,141,72,3 186 data 32,176,32 188 data 169,7,141 190 data 68,3,173,60 192 data 3,41,7,141 194 data 69,3,32,165 196 data 32,169,17 198 data 141,72,3,169 200 data 0,141,71,3 202 data 32,176,32 204 data 174,70,3,189 206 data 117,33,141 208 data 73,3,165,1 210 data 201,32,144 212 data 2,40,96,160 214 data 0,173,73,3 216 data 40,176,7,73 218 data 255,49,0,145 220 data 0,96,17,0 222 data 145,0,96,1 224 data 2,4,8,16,32 226 data 64,128,234 228 data 234,169,90 230 data 133,43,169 232 data 38,133,44 234 data 169,0,141 236 data 89,38,32,68 238 data 198,96,165 240 data 159,133,164 242 data 165,1,133 244 data 166,165,158 246 data 133,163,133 248 data 165,56,233 250 data 22,133,158 252 data 133,0,165 254 data 159,233,0 256 data 133,159,24 258 data 105,132,133 260 data 1,96,234,234 262 data 234,234,169 264 data 32,160,21 266 data 145,158,136 268 data 16,251,96 270 data 234,169,17 272 data 133,159,133 274 data 164,169,149 276 data 133,1,133 278 data 166,169,206 280 data 133,158,133 282 data 0,169,228 284 data 133,163,133 286 data 165,234,160 288 data 21,177,158 290 data 145,163,177 292 data 0,145,165 294 data 136,16,245 296 data 32,144,33 298 data 165,159,201 300 data 15,208,234 302 data 169,16,133 304 data 159,169,0 306 data 133,158,32 308 data 181,33,76 310 data 174,199,234 312 data 234,234,8 314 data 24,165,158 316 data 105,22,133 318 data 158,133,0 320 data 169,0,101 322 data 159,133,159 324 data 133,164,24 326 data 169,132,101 328 data 159,133,1 330 data 133,166,40 332 data 144,8,164 334 data 158,136,132 336 data 163,132,165 338 data 96,164,158 340 data 200,132,163 342 data 132,165,96 344 data 234,234,160 346 data 0,162,32,138 348 data 145,158,165 350 data 158,197,163 352 data 240,16,24 354 data 169,22,101 356 data 158,133,158 358 data 169,0,101 360 data 159,133,159 362 data 76,52,34,96 364 data 234,234,169 366 data 16,133,159 368 data 133,164,169 370 data 148,133,1 372 data 133,166,169 374 data 0,133,163 376 data 133,165,169 378 data 1,133,158 380 data 133,0,234 382 data 160,0,177 384 data 158,145,163 386 data 177,0,145 388 data 165,200,192 390 data 21,208,243 392 data 165,163,201 394 data 228,240,7 396 data 56,32,0,34 398 data 76,105,34 400 data 169,16,133 402 data 159,169,21 404 data 133,158,169 406 data 249,133,163 408 data 32,48,34,76 410 data 174,199,32 412 data 117,233,76 414 data 174,199,234 416 data 234,234,169 418 data 16,133,159 420 data 133,164,169 422 data 148,133,1 424 data 133,166,169 426 data 0,133,158 428 data 133,0,169 430 data 1,133,163 432 data 133,165,234 434 data 160,20,177 436 data 158,145,163 438 data 177,0,145 440 data 165,136,16 442 data 245,165,158 444 data 201,228,240 446 data 7,24,32,0 448 data 34,76,185 450 data 34,169,16 452 data 133,159,169 454 data 0,133,158 456 data 169,228,133 458 data 163,32,48 460 data 34,76,174 462 data 199,169,0 464 data 141,8,3,141 466 data 60,3,141,61 468 data 3,169,35,141 470 data 9,3,141,1 472 data 3,169,169 474 data 141,0,3,76 476 data 127,33,32 478 data 115,0,201 480 data 139,240,110 482 data 201,33,240 484 data 7,32,121,0 486 data 76,231,199 488 data 234,162,0 490 data 142,95,3,32 492 data 115,0,201 494 data 65,144,18 496 data 157,96,3,232 498 data 224,8,208 500 data 241,234,162 502 data 11,76,55,196 504 data 234,234,234 506 data 234,142,94 508 data 3,160,0,162 510 data 0,189,96,3 512 data 217,186,35 514 data 208,10,232 516 data 200,236,94 518 data 3,144,241 520 data 76,97,35,238 522 data 95,3,173,95 524 data 3,201,11,144 526 data 3,76,39,35 528 data 185,186,35 530 data 200,201,33 532 data 208,248,76 534 data 53,35,173 536 data 95,3,10,168 538 data 185,186,37 540 data 141,0,1,185 542 data 187,37,141 544 data 1,1,108,0 546 data 1,32,115,0 548 data 169,199,72 550 data 169,174,72 552 data 32,158,205 554 data 32,121,0,201 556 data 137,240,3 558 data 169,167,32 560 data 255,206,165 562 data 97,208,3,32 564 data 9,201,240 566 data 14,32,121 568 data 0,176,1,76 570 data 160,200,104 572 data 104,32,121 574 data 0,76,3,35 576 data 76,251,200 578 data 138,72,173 580 data 5,144,201 582 data 204,208,3 584 data 32,80,32,104 586 data 170,76,58 588 data 196,71,77 590 data 79,68,69,33 592 data 84,77,79,68 594 data 69,33,68,83 596 data 67,82,79,76 598 data 76,33,85,83 600 data 67,82,79,76 602 data 76,33,76,83 604 data 67,82,79,76 606 data 76,33,82,83 608 data 67,82,79,76 610 data 76,33,83,69 612 data 84,33,82,69 614 data 83,69,84,33 616 data 68,82,65,87 618 data 33,67,68,82 620 data 65,87,33,67 622 data 76,69,65,82 624 data 162,5,169 626 data 0,157,82,3 628 data 202,16,250 630 data 162,23,14 632 data 79,3,46,80 634 data 3,46,81,3 636 data 46,82,3,46 638 data 83,3,46,84 640 data 3,14,85,3 642 data 46,86,3,46 644 data 87,3,56,173 646 data 82,3,237,88 648 data 3,168,173 650 data 83,3,233,0 652 data 141,94,3,173 654 data 84,3,233,0 656 data 144,37,140 658 data 82,3,141,84 660 data 3,173,94,3 662 data 141,83,3,24 664 data 169,1,109 666 data 85,3,141,85 668 data 3,169,0,109 670 data 86,3,141,86 672 data 3,169,0,109 674 data 87,3,141,87 676 data 3,202,16,166 678 data 96,56,185 680 data 80,3,73,255 682 data 105,0,153 684 data 80,3,200,202 686 data 208,242,96 688 data 24,173,85 690 data 3,109,91,3 692 data 141,91,3,173 694 data 86,3,109,92 696 data 3,141,92,3 698 data 173,87,3,109 700 data 93,3,141,93 702 data 3,96,24,169 704 data 128,109,92 706 data 3,169,0,109 708 data 93,3,96,234 710 data 8,32,202,32 712 data 162,1,56,189 714 data 89,3,253,60 716 data 3,8,176,4 718 data 73,255,105 720 data 1,157,76,3 722 data 202,16,236 724 data 13,77,3,208 726 data 4,40,40,40 728 data 96,169,1,141 730 data 78,3,162,2 732 data 169,0,157 734 data 91,3,202,16 736 data 250,173,76 738 data 3,205,77,3 740 data 176,60,169 742 data 106,141,0 744 data 1,169,37,141 746 data 1,1,173,60 748 data 3,141,93,3 750 data 173,76,3,141 752 data 81,3,173,77 754 data 3,141,88,3 756 data 169,0,141 758 data 79,3,141,80 760 data 3,32,0,36 762 data 40,176,7,162 764 data 3,160,5,32 766 data 103,36,40 768 data 176,5,169 770 data 255,141,78 772 data 3,76,89,37 774 data 169,133,141 776 data 0,1,169,37 778 data 141,1,1,173 780 data 61,3,141,93 782 data 3,40,176,5 784 data 169,255,141 786 data 78,3,173,77 788 data 3,141,81,3 790 data 173,76,3,141 792 data 88,3,169,0 794 data 141,79,3,141 796 data 80,3,32,0 798 data 36,40,176 800 data 7,162,3,160 802 data 5,32,103,36 804 data 173,76,3,141 806 data 94,3,76,95 808 data 37,173,77 810 data 3,141,94,3 812 data 108,0,1,206 814 data 94,3,208,248 816 data 76,160,37 818 data 24,173,78 820 data 3,109,61,3 822 data 141,61,3,32 824 data 119,36,32 826 data 148,36,141 828 data 60,3,40,8 830 data 32,202,32 832 data 76,98,37,24 834 data 173,78,3,109 836 data 60,3,141,60 838 data 3,32,119,36 840 data 32,148,36 842 data 141,61,3,40 844 data 8,32,202,32 846 data 76,98,37,173 848 data 89,3,141,60 850 data 3,173,90,3 852 data 141,61,3,40 854 data 32,202,32 856 data 96,32,117 858 data 233,76,234 860 data 199,234,234 862 data 234,0,32,104 864 data 32,192,33 866 data 177,37,80 868 data 34,160,34 870 data 2,38,18,38 872 data 34,38,50,38 874 data 40,32,32,121 876 data 0,201,40,240 878 data 7,201,44,240 880 data 3,76,39,35 882 data 32,155,215 884 data 201,41,208 886 data 3,32,115,0 888 data 138,96,32 890 data 208,37,72 892 data 201,168,176 894 data 10,32,208 896 data 37,201,176 898 data 176,3,168 900 data 104,96,104 902 data 162,14,76 904 data 55,196,32 906 data 234,37,141 908 data 60,3,140,61 910 data 3,56,32,202 912 data 32,76,174 914 data 199,32,234 916 data 37,141,60 918 data 3,140,61,3 920 data 24,32,202 922 data 32,76,174 924 data 199,32,234 926 data 37,141,89 928 data 3,140,90,3 930 data 56,32,161 932 data 36,76,174 934 data 199,32,234 936 data 37,141,89 938 data 3,140,90,3 940 data 24,32,161 942 data 36,76,174 944 data 199,32,91 946 data 228,76,229 948 data 34,234,234 950 data 40,67,41,66 952 data 89,32,74,46 954 data 83,39,56,52 956 data 234,234,234 1000 fori=8192 to 9816:readdc:pokei,dc:s=s+dc:nexti 1010 ifs<>159413 then print"data fehler":end 1040 print"bereit zum absaven ?" 1045 get a$:if a$<>"j" then 1045 1050 poke43,255:poke44,31:poke45,90:poke46,38:save"mini gbasic",1,1