Betriebssystem-Erweiterung für den VC 20
Hier sind einige Erweiterungen für das Betriebssystem des VC 20, die auf Tastendruck funktionieren, wie zum Beispiel Hardcopy, Find, Relocate, Append und Beep.
Diese nützlichen Routinen werden mit dem Basic-Lader (Listing) ab Adresse $6050 in den Speicher gebracht. Ein voll ausgebauter VC 20 (+24 KByte) ist daher Voraussetzung. Um das Programm in die Tastaturabfrage einzubinden, die alle 60stel Sekunde erfolgt, wird der Zeiger für die Tastaturdecodierung (655,656) abgeändert. Damit dort nicht nach jedem STOP/RESTORE wieder der alte Wert steht, wird auch noch der BRK-Vektor (790,791) abgeändert. Zu alledem dient der SYS-Befehl in Zeile 120. Im einzelnen stehen folgende Erweiterungen zur Verfügung (die Druckroutinen sind für den Epson RX-80 mit VC-Interface):
- CTRL G: Grafik auf Drucker (mit VIC 1211A)
- CTRL D: Bildschirm-Hardcopy mit Zwischenzeile
- CTRL H: Bildschirm-Hardcopy ohne Zwischenzeile (zum Beispiel für normale Blockgrafik)
Dabei ist zu beachten, daß das letzte Zeichen rechts unten nicht gedruckt wird, da sonst der Bildschirm gescrollt würde. Ein Bildschirm-Dump kann jederzeit erfolgen, auch während des Programmablaufs.
- CTRL F: FIND mit Eingabe des Suchstrings
- CTRL L: FIND weiter
FIND durchsucht ein Basic-Programm nach bestimmten Befehlen oder Zeichenfolgen und listet die Zeile, in der sich der gesuchte Begriff befindet. FIND weiter (CTRL L)bedeutet, daß das Programm weiter nach demselben Begriff durchsucht wird. Dabei ist eine Zeichenkette in Anführungszeichen einzugeben. Beispiel: Gesucht wird die Anweisung IF. Eingabe IF. Gesucht wird der String »REIF«. Eingabe »REIF«.
Im folgenden bedeutet »CTRL+Com«, daß die CTRL- und die Commodore-Taste gleichzeitig gedrückt werden.
CTRL+Com R:RELOCATE; rückgängig machen des NEW-Befehls. Diese Routine ist besonders nützlich, wenn ein Reset-Schalter existiert, da bei einem Reset ein Basic-Programm nicht zerstört wird, sondern wie bei NEW nur die ersten beiden Bytes auf Null gesetzt werden. Falls der Computer sich also mal beim Aufruf eines fehlerhaften Maschinenprogramms »aufhängt«, kann nach Reset, SYS 25600 und Drücken von CTRL+Com R ohne Verlust des Basic-Programms weitergemacht werden.
Auch nach einem »LOAD-ERROR« kann nach RELOCATE das falsch geladene Programm gelistet werden.
CTRL+Com S: Kopiert die Zeiger auf den Basic-Programmstart, die Variablen, Arrays und Strings und die ersten 65 Byte des Basic-Programms in den (hoffentlich) geschützten Bereich, in dem sich die Betriebssystemerweiterung befindet.
CTRL+Com+RETURN-Taste: Umkehrfunktion von CTRL+Com S
Falls ein Programm gelöscht und anschließend im Direktmodus mit Variablen gearbeitet wurde, dann ist der Anfang des gelöschten Programms zerstört. Das Programm kann nicht mit RELOCATE repariert werden. Wurde aber vorher zu irgendeinem Zeitpunkt, an dem das zerstörte Programm noch existierte, CTRL+Com S gedrückt, dann steht das Programm nach Betätigen von CTRL+COM+RETURN-Taste wieder mit allen Variablen, Arrays und Strings so zur Verfügung, wie zum Zeitpunkt des Kopierens.
- CTRL+Com —: BEEP aus
- CTRL+Com +: BEEP an
BEEP dient als akustische Rückmeldung der Tastatur, daß eine Taste gedrückt wurde. Ein momentan laufender Sound wird nicht beeinflußt.
CTRL+Com ↑: APPEND. Der Zeiger auf den Basic-Anfang wird auf das Ende des momentanen Programms gesetzt. So können mehrere Basic-Programme aneinandergehängt werden. Dabei wird die Größe des zur Verfügung stehenden Speicherplatzesausgegeben. Durch CTRL+Com -: werden das angehängte und das vorherige Programm verknüpft.
CTRL+Com W: WARTE. »Friert« den Computer ein, bis die RETURN-Taste gedrückt wird. Diese Routine ist vor allem bei LIST nützlich: Das Bildschirm-Scrollen wird verhindert.
Die Funktion der Zusatztasten wird dabei nicht beeinflußt, so daß während dieses Zustands zum Beispiel auch eine Hardcopy angefertigt werden kann.
Soll das Progamm mit der VC1211A-Supererweiterung zusammmenlaufen, dann müssen folgende Änderungen vorgenommen werden:
- Zeile 25: Die letzten drei DATA-Werte lauten 55,163,0.
- Zeile 43: Die ersten vier DATA-Werte lauten 0,32,13,164.
- Zeile 120: SYS 25453 (muß auch beim Aufruf der Relocate-Funktion angegeben werden.
Nachdem diese Änderungen durchgeführt sind, stimmen natürlich die Prüfsummenabfragen nicht mehr. Es empfiehlt sich daher, das Programm in jedem Falle zunächst einmal probeweise unverändert (und ohne VC 1211A) laufen zu lassen, um eventuelle Tippfehler in den DATA-Zeilen herauszufinden. Danach kann man die Prüfsummenabfragen in den Zeilen 10, 30, 40, 60, 70, 90, 100 und 110 einfach löschen.
(Manfred Weigt/ev)0 rem betriebssystem-erweiterung 1 rem fuer vc 20 +24 kbyte ram 2 poke55,255:poke56,95:f$="data fehler 9 rem***tasten*** 10 ps=0:fort=24656to24938:readd:poket,d:ps=ps+d:next:ifps<>34724thenprintf$:stop 11 data32,211, 96,165,203,197,3,240,54,133,3,173,141,2,201,4,208,48,165,197 12 data201,19,208,3,76,110, 98,201,18,208,7,169,1,133,191,76,212, 98,201,43 13 data208,7,169,0,133,191,76,212, 98,201,42,208,3,76,199, 97,201,21,208,3 14 data76, 79, 98,76,220,235,201,6,208,249,165,197,201,41,208,22,162,13,181 15 data43,157,000,096,202,16,248,160,65,177,43,153,14 ,96 ,136,16,248,48,221 16 data201,15,208,22,162,13,189,000,096,149,43,202,16,248,160,65,185,014,096 17 data145,43,136,16,248,48,195,201,10,208,46,76,107, 97,165,203,197,3,240 18 data36,173,12,144,72,173,14,144,72,169,247,141,12,144,169,10,141,14,144 19 data162,255,160,10,202,208,253,136,208,250,104,141,14,144,104,141,12 20 data144,96,201,61,208,7,169, 83,141,143,2,208,134,201,5,208,7,169,080,141 21 data143,2,208,243,201,54,208,38,172,224,2,165,43,153,225,2,200,165,44 22 data153,225,2,165,45,56,233,2,133,43,166,46,176,1,202,134,44,200,140 23 data224,2,32,18,228,76,116,196,201,8,208,23,172,224,2,240,15,136,185 24 data225,2,133,44,136,185,225,2,133,43,140,224,2,76,116,196,201,9,208 25 data10,32,159,255,32,228,255,201,13,208,246,76,220,235,0 29 rem***relocate*** 30 ps=0:fort=24939to25030:readd:poket,d:ps=ps+d:next:ifps<>12881thenprintf$:stop 31 data165,43,133,146,133,148,165,44,133,147,133,149,160,5,177,146,240,7 32 data200,208,249,230,147,208,245,200,152,24,101,146,133,146,144,2,230 33 data147,160,0,165,146,145,148,200,165,147,145,148,165,146,133,148,165 34 data147,133,149,160,0,177,146,208,207,200,177,146,208,202,200,152,208 35 data2,230,147,24,101,146,144,2,230,147,133,45,165,147,133,46,32,89,198 36 data76,116,196,0 39 rem***find*** 40 ps=0:fort=25031to25197:readd:poket,d:ps=ps+d:next:ifps<>22108thenprintf$:stop 41 data160,6,185,136,099,32,210,255,136,208,247,162,0,32,15,225,201,13,240 42 data13,157,0,2,232,224,89,144,241,162,23,76,55,196,32,202,202,162,0,160 43 data0,32,130,197,162,0,189,252,1,157,61,3,240,3,232,208,245,134,187,160 44 data1,177,43,153,176,0,136,16,248,165,43,133,182,165,44,133,183,160,1 45 data177,182,240,81,177,182,153,176,0,136,16,248,160,4,132,188,177,182 46 data240,38,162,0,169,64,221,61,3,240,14,169,34,221,61,3,240,7,177,182 47 data221,61,3,208,10,232,200,228,187,240,19,177,182,208,225,164,188,200 48 data208,212,165,176,133,182,165,177,133,183,208,186,160,3,177,182,133 49 data21,136,177,182,133,20,32,19,198,76,189,198,76,116,196,0 59 rem***grafik auf drucker*** 60 ps=0:fort=25198to25299:readd:poket,d:ps=ps+d:next:ifps<>14244thenprintf$:stop 61 data169,0,32,189,255,169,4,162,4,160,1,32,186,255,32,192,255,162,4,32 62 data201,255,160,3,185,143,099,32,210,255,136,208,247,136,132,178,169,15 63 data133,179,162,0,160,160,169,27,32,210,255,169,75,32,210,255,169,160 64 data32,210,255,169,0,32,210,255,177,178,32,210,255,136,208,248,169,13 65 data32,210,255,165,178,24,105,160,133,178,165,179,105,0,133,179,232,224 66 data20,208,203,169,4,32,195,255,96,0 69 rem***bildschirm auf drucker*** 70 ps=0:fort=25300to25452:readd:poket,d:ps=ps+d:next:ifps<>20321thenprintf$:stop 71 data8,72,138,72,152,72,186,134,166,56,32,240,255,134,167,132,168,169 72 data0,32,189,255,169,4,162,4,160,0,32,186,255,32,192,255,32,129,229,169 73 data0,32,189,255,169,3,162,3,160,0,32,186,255,32,192,255,162,4,32,201 74 data255,162,3,32,198,255,162,22,160,22,169,255,133,205,32,207,255,201 75 data13,240,3,32,210,255,136,208,239,165,191,208,5,169,8,32,210,255,169 76 data13,32,210,255,169,15,32,210,255,202,240,41,16,213,166,167,164,168 77 data24,32,240,255,169,13,32,210,255,169,3,133,154,32,195,255,169,4,32 78 data195,255,169,0,133,153,166,166,154,104,168,104,170,104,40,96,160,21 79 data208,172,0 89 rem***einbinden ins betriebssystem wenn vic1211a angeschlossen ist*** 90 ps=0:fort=25453to25479:readd:poket,d:ps=ps+d:next:ifps<>2498thenprintf$:stop 91 data32,056,162,169,080,160,096,141,143,2,140,144,2,169,109,160,099,141,22 92 data3,140,23,3,108,2,192,0 99 rem***einbinden ins betriebssystem ohne rom-zusatz*** 100 ps=0:fort=25600to25631:readd:poket,d:ps=ps+d:next:ifps<>3326thenprintf$:stop 101 data32,82,253,32,249,253,32,24,229,169,080,160,096,141,143,2,140,144,2 102 data169,000,160,100,141,22,3,140,23,3,108,2,192 109 rem***' ?dnif' und druckanweisungen*** 110 ps=0:fort=25480to25490:readd:poket,d:ps=ps+d:next:ifps<>994thenprintf$:stop 111 data255,32,63,68,78,73,70,255,8,65,27 120 sys25600