Terminalprogramm für den C 64
Dieses Programm ermöglicht es Ihnen, über eine RS232-Schnittstelle und Akustikkoppler oder Modem mit anderen Computern in Verbindung zu treten. Der Austausch von Daten, Nachrichten und ganzen Programmen ist möglich - ebenso die Abfrage von Datenbanken. Wir haben dieses Programm mit der Software-Expreß-Schnittstelle und dem Epson CX-21-Akustikkoppler getestet und waren von Anfang an begeistert.
Das Terminalprogramm bietet folgende Möglichkeiten:
- Die mit der Tastatur eingegebenen Zeichen werden über die RS232-Schnittstelle zur Gegenstelle gesandt.
- Die von der Gegenstelle empfangenen Daten werden auf dem Bildschirm angezeigt.
- Die von der Gegenstelle empfangenen Daten können zur weiteren Bearbeitung in den »Terminal-Speicher« geschrieben werden.
- Diese gespeicherten Daten können dann wieder ausgesandt, auf den Bildschirm oder Drucker ausgegeben, beziehungsweise auf Diskette gespeichert werden.
- Dateien können von der Diskette, zur weiteren Bearbeitung, in den »Terminal-Speicher« geladen werden.
- Empfangene und im »Terminal-Speicher« befindliche Programme (als ASCII-Datei gespeichert) können über eine »Wandler«-Software aufbereitet werden. Hierbei besteht eine Kontroll- und Editiermöglichkeit der einzelnen Programmzeilen.
- Die Übertragungsparameter sind dem Standard entsprechend eingestellt. Durch Änderung der beiden CHR$-Befehle in den »OPEN«-Anweisungen können andere Parameter eingestellt werden. Die entsprechenden »OPEN«-Anweisungen befinden sich in Basic-Zeilennummer 10 + 50. Die Werte für das Kontroll- und Befehlsregister (1. und 2. CHR$ Befehl) sind im Commodore Programmier-Handbuch aufgeführt.
Der »Terminal-Speicher« belegt den Adressenbereich Hex 5000-9FFF.
Der Basic-Speicher endet bei Hex 3FFF.
Das Terminalprogramm wird mit Load »terminal«, 8 geladen und anschließend mit Run gestartet. Nach einer kurzen Wartezeit, während der Maschinenspracheteil angelegt wird, erscheint das Menü auf dem Bildschirm.
Über das Menü und mit Hilfe der Funktionstasten werden alle Programmabläufe gesteuert.
Menüpunkt 1 erklärt die Bedeutung der Funktionstasten Fl bis F8, der ←Taste und der RUN/Stop Taste.
Funktionstaste F1:
Durch Betätigung werden empfangene Daten als ASCll-Datei in den »Terminal-Speicher« geschrieben. Ein empfangenes Hex 02-Zeichen (Start of Text) bewirkt ebenfalls ein Abspeichern. Zur Erinnerung ändert sich die Rahmenfarbe des Bildschirmes in Braun.
Funktionstaste F3:
Die Betätigung beziehungsweise ein empfangenes Hex 03-Zeichen (End of Text) beendet das Abspeichern. Die Bildschirm-Rahmenfarbe wird wieder grün.
Funktionstaste F5:
Mit dieser Taste wird an den Anfang des »Terminal-Speichers« zurückgesetzt und die erste Zeile (bis zum Return-Zeichen) auf den Bildschirm übertragen.
Funktionstaste F7:
Ein wiederholtes Drücken dieser Taste führt schrittweise bis ans Ende des Textes. Das Textende ist durch + + + gekennzeichnet. Ein Speicherplatzende wird ebenfalls durch + + + angezeigt.
Funktionstaste F2:
Mit dieser Taste wird ein Vorschreiben in den »Terminal-Speicher« eingeleitet. Die Zeichen werden gleichzeitig auf dem Bildschirm angezeigt. Hierbei sind die Cursor-Tasten außer Funktion. Falsch eingegebene Zeichen können mit der Del-Taste gelöscht werden.
Funktionstaste F4:
Diese Taste beendet das Vorschreiben.
Funktionstaste F6:
Durch Betätigung dieser Taste wird wieder an den Anfang des »Terminal-Speichers« zurückgesetzt. Bis zum ersten Return-Zeichen werden die Daten über die RS232-Schnittstelle ausgegeben und gleichzeitig auf dem Bildschirm angezeigt.
Funktionstaste F8:
Ein wiederholtes Drücken dieser Taste setzt den Sendebetrieb schrittweise bis zum Dateiende fort. Das Ende wird wieder durch + + + angezeigt.
Die ← Taste
Mit dieser Taste wird der Rücksprung in das Menü eingeleitet.
Die Run/Stop Taste
Das Terminalprogramm kann mit Run/Stop unterbrochen werden.
Menüpunkt 2 startet das eigentliche Terminalprogramm. Zum Datenaustausch ist hinzuzufügen, daß einige Steuerzeichen ausgefiltert werden, um ein einwandfreies Arbeiten mit anderen Datenbanken zu ermöglichen. Weiterhin wird eine Code-Wandlung zwischen CPM und ASCII durchgeführt. Beim Betätigen der Del-Taste wird ein Backspace (ein Zeichen zurück) zur Gegenstelle gesandt. Da die Cursor-Steuertasten ihre Funktion verloren haben, wurde auf die Anzeige des Cursors verzichtet.
Menüpunkt 3 bewirkt die Ausgabe der im »Terminal-Speicher« befindlichen Daten auf einen angeschlossenen Drucker
Menüpunkt 4 verläßt das Programm und lädt das »Wandler-Programm«. Mit diesem »Wandler« ist es möglich, ein empfangenes und im »Terminal-Speicher« abgelegtes Programm (als ASCII-Datei) in ein lauffähiges Programm zu wandeln und in den Basic-Speicher zu schreiben. Es kann dann benutzt oder auf Diskette gespeichert werden. Das »Wandler-Programm« startet selbstätig und auf dem Bildschirm erscheint: ready. »......Erste Programmzeile.......«run 60020. Der Cursor blinkt in der ersten Programmzeile. Sind in dieser Zeile keine Fehler vorhanden, so kann diese durch Betätigen der Return-Taste in den Basic-Arbeitsspeicher übernommen werden. Jetzt steht der Cursor in der Zeile »run 60020«. Ein nochmaliges Drücken der Return-Taste bringt die nächste Programmzeile auf den Bildschirm. In gleicher Weise kann bis zum Programmende fortgefahren werden. Ist die Änderung einer Programmzeile erforderlich, so kann dieses mit den üblichen Editiermöglichkeiten geschehen. Soll eine Zeile nicht übernommen werden, so wird der Cursor manuell in die Zeile »run 60020« gesteuert und mit )Return( weitergearbeitet. Zu beachten ist, daß die Programmzeile nicht länger als 80 Zeichen ist. Der Menüpunkt 4 bietet zusätzlich eine Auswahlmöglichkeit zwischen »automatischer Wandlung« und »manueller Wandlung«. Die »manuelle Wandlung« wurde beschrieben. Bei der »automatischen Wandlung« läuft das Programm selbstätig ab. Wird aber eine fehlerhafte Zeile erkannt, so bricht das Programm ab. Nach der Editierung kann mit »run 60020« weitergearbeitet werden.
Menüpunkt 5 speichert alle im »Terminalspeicher« befindlichen Daten als sequentielle Datei auf eine Diskette. Vor dem Abspeichern muß der Datei-Name eingegeben werden.
Menüpunkt 6 lädt eine sequentielle Datei von der Diskette in den »Terminal-Speicher«.
Soll ein Basic-Programm zur Gegenstelle gesandt werden, so sind einige Besonderheiten zu beachten.
- Das Programm sollte nur »reine ASCII-Daten« erhalten. Bildschirm-Steuerzeichen sowie Grafikzeichen werden nicht übertragen.
- Das Programm muß als sequentielle Datei vorliegen und nicht wie sonst üblich als Programm-Datei.
Die Wandlung einer Programm-Datei in eine sequentielle Datei wird folgendermaßen durchgeführt.
- Das Programm wird wie üblich mit LOAD »NAME«, 8 in den Basic-Speicher des C 64 geladen.
- Im Direktmodus wird folgende Zeile eingegeben: OPEN 1,8,2,»Name,S,W«:CMD1:LIST
Jetzt wird das Programm als sequentielle Datei auf die Diskette geschrieben und kann später vom Terminalprogramm aufgerufen werden. Anschließend wird mit CLOSE 1 das eröffnete File geschlossen.
(Manfred Wyrwas)In der nächsten Ausgabe das entsprechende Treiber-Programm für den VC 20.
10 print"{clr} einen moment bitte " 20 forx=16384to16995:ready:ds=ds+y:pokex,y:next 30 ifds<>68997thenprint"fehler in datas: soll=68997 ist="ds:stop 40 poke51,0:poke52,64:poke55,0:poke56,64:clr:f=0:goto130 50 poke53280,5:poke53281,5 :print"{blk}" 60 open2,2,0,chr$(6+32 )+chr$(32+64+128):get#2,a$ 70 printchr$(14):print"{clr}":print" datenbankdialog mit dem c64" 80 sys16394 90 close2: poke53280,5:poke53281,5:print"{blk}":f=1: goto130 100 open2,2,0,chr$(6+32 )+chr$(32+64+128):get#2,a$:print"{clr}":print" neustart !" 110 sys16416 120 goto90 130 printchr$(14):print"{clr}{down}{down}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}menue" 140 print"{down}{down}{rght}{rght}{rght}{rght}1 = bedeutung der funktionstasten" 150 iff=0then170 160 print"{down}{rght}{rght}{rght}{rght}2 = zurueck ins terminalprogramm":goto180 170 print"{down}{rght}{rght}{rght}{rght}2 = terminal programm starten":goto180 180 print"{down}{rght}{rght}{rght}{rght}3 = empfangene und gespeicherte daten drucken 190 print"{down}{rght}{rght}{rght}{rght}4 = empfangene und gespeicherte programme aufbere"; 200 print"iten" 210 print"{down}{rght}{rght}{rght}{rght}5 = empfangene und gespeicherte daten auf disk. "; 220 print"speichern" 230 print"{down}{rght}{rght}{rght}{rght}6 = daten von disk. in den speicher schreiben " 240 print"{down}{rght}{rght}{rght} bitte waehlen 1-6 " 250 geta$:ifa$=""then250 260 ifa$="1"then340 270 ifa$="2"andf=1then100 280 ifa$="2"thenf=1:goto50 290 ifa$="3"then520 300 ifa$="4"then570 310 ifa$="5"then650 320 ifa$="6"then730 330 goto250 340 print"{clr}{rght}{rght} {rght}{rght}{down}bedeutung der funktionstasten" 350 print"{down}{down}{rght}{rght}{rght}{rght}f1 = empfangene date speichern" 360 print"{down}{rght}{rght}{rght}{rght}f3 = abspeichern beenden" 370 print"{down}{rght}{rght}{rght}{rght}f5 = gespeicherte daten ansehen ( anfang )" 380 print"{down}{rght}{rght}{rght}{rght}f7 = gespeicherte daten ansehen ( weiter )" 390 print"{down}{rght}{rght}{rght}{rght}f2 = text vorschreiben " 400 print"{down}{rght}{rght}{rght}{rght}f4 = vorschreiben beenden " 410 print"{down}{rght}{rght}{rght}{rght}f6 = gespeicherte daten aussenden ( anfang )" 420 print"{down}{rght}{rght}{rght}{rght}f8 = gespeicherte daten aussenden ( weiter )" 430 print"{down}{rght}{rght}{rght}{rght}weiter mit return" 440 geta$:ifa$=""then440 450 print"{clr}":print" die _ taste bewirkt einen rueck- sprung ins menue" 460 print: 470 print" mit run/stop kann das programm abgebrochen werden":print 480 print" beim vorschreiben kann mit der del-taste geloescht werden, 490 print"{down}{down}{down} weiter mit return" 500 geta$:ifa$=""then500 510 goto130 520 open1,4,7:rem drucker vc1526 530 e=peek(16387)+peek(16388)*256 540 fori=20480toe-1 550 print#1,chr$(peek(i));:next 560 close1:goto130 570 print"{clr}{rght}{rght}{rght}{rght}{down}{down}automatisches wandeln oder manuelles wandeln ?" 580 print"{rght}{rght}{rght}{rght}{down}{down}bitte waehlen ( a oder m )" 590 print"{rght}{rght}{rght}{rght}{down}{down}mit return kommen sie zurueck in das menue" 600 geta$:ifa$=""then600 610 ifa$="a"thenload"wandler 2",8:run 620 ifa$="m"thenload"wandler",8:run 630 ifa$=chr$(13)then130 640 goto600 650 print"{clr}":input"{rght}{rght}{rght}{rght}{down}{down}dateiname";d$:print"{clr}" 660 print"{rght}{rght}{rght}{rght}{down}{down}datei: ";d$;" wird auf diskette gespeichert" 670 close2:open1,8,2,d$+",s,w" 680 e=peek(16387)+peek(16388)*256 690 fori=20480toe-1 700 print#1,chr$(peek(i));:next 710 print"{clr}":print"{rght}{rght}{rght}{rght}{down}{down}daten sind auf diskette gespeichert":fori=1to2000:next 720 close1:goto130 730 print"{clr}":input"{rght}{rght}{rght}{rght}{down}{down}dateiname";d$:print"{clr}" 740 open1,8,2,d$+",s,r":i=20480 750 print"{rght}{rght}{rght}{rght}{down}{down}datei: ";d$;" wird von diskette geladen" 760 get#1,a$ 770 pokei,(asc(a$)):i=i+1 780 ifst=64thenclose1:goto810 790 ifst<>0thenclose1:print"{clr}{rght}{rght}{down}{down}diskstatus ";st;"!":for i=1to5000:next:goto130 800 goto760 810 poke16387,(i-int(i/256)*256):poke16388,(i/256):goto130 820 data0,0,0,0,0,0,0,0,0,0,169,0,141,1,64,141,3,64,141,4,64,133,251,169 830 data80,133,252,169,194,141,5,64,32,228,255,201,0,240,85,201,20,240,3 840 data76,49,64,169,8,234,201,3,240,126,201,133,240,125,201,134,240,124 850 data201,135,240,123,201,136,240,122,201,137,240,121,201,138,240,120,201 860 data139,240,119,201,140,240,118,201,95,240,117,201,65,144,23,176,0,201 870 data96,176,3,76,109,64,201,192,176,8,76,116,64,105,32,76,116,64,233,128 880 data32,90,66,234,234,234,234,234,32,134,240,201,0,240,157,201,13,240 890 data17,201,2,240,43,201,3,240,42,201,32,144,233,201,128,176,229,234,201 900 data65,144,16,176,1,234,201,96,176,7,24,105,128,76,172,64,234,233,32 910 data72,32,210,255,76,220,64,76,88,66,76,212,64,76,54,65,76,190,65,76 920 data196,65,76,65,65,76,54,65,76,2,66,76,11,66,76,51,65,0,0,0,169,1,141 930 data1,64,76,32,64,169,1,205,1,64,240,12,104,24,72,169,245,141,32,208 940 data104,76,32,64,104,72,169,249,141,32,208,104,32,0,65,76,32,64,0,0,0 950 data160,0,145,251,230,251,208,2,230,252,24,165,251,141,3,64,201,255,240 960 data7,165,252,141,4,64,24,96,165,252,141,4,64,201,159,240,2,24,96,169 970 data42,32,210,255,32,210,255,32,210,255,198,251,96,0,0,169,0,141,1,64 980 data76,32,64,0,0,0,169,1,141,1,64,32,228,255,201,0,240,249,201,13,240 990 data24,201,20,240,20,201,32,144,237,201,145,240,233,201,157,240,229,201 1000 data147,240,225,201,138,240,28,32,210,255,201,20,240,3,76,127,65,198 1010 data251,208,2,198,252,24,76,70,65,0,0,32,0,65,76,70,65,76,54,65,0,0,0 1020 data0,0,169,0,133,251,169,80,133,252,165,252,205,4,64,240,3,76,174,65 1030 data165,251,205,3,64,240,3,76,174,65,24,76,215,65,0,160,0,177,251,230 1040 data251,208,2,230,252,24,234,234,234,234,96,32,141,65,32,210,255,32,149 1050 data65,32,210,255,201,13,240,3,76,196,65,76,32,64,0,0,0,32,38,65,169 1060 data13,96,0,0,0,201,65,144,23,176,0,201,96,176,3,76,244,65,201,192,176 1070 data8,76,251,65,105,32,76,251,65,233,128,32,90,66,96,0,0,0,32,141,65 1080 data32,210,255,32,224,65,32,149,65,32,210,255,32,224,65,201,13,240,185 1090 data76,11,66,76,32,64,0,201,65,144,23,176,0,201,96,176,3,76,51,66,201 1100 data192,176,8,76,58,66,105,32,76,62,66,233,128,32,210,255,96,233,31,76 1110 data58,66,0,32,141,65,32,31,66,32,149,65,32,31,66,201,13,240,3,76,74 1120 data66,96,96,0,133,158,32,8,242,96,96,0,0,0