C 64
Tips und Tricks

Tips & Tricks für Einsteiger

Unter dieser neuen Überschrift wollen wir den »Newcomern« unter den Computer-Fans helfen, durch kleine Tricks und Kniffe zu echten Profis zu werden.

Bevor Sie sich jedoch in unsere kleinen Tips und Listings stürzen, eine Bitte an Sie: Bestimmt haben auch Sie noch Schwierigkeiten mit dem C 64, die Sie aus Mangel an Erfahrung selber nicht beseitigen können. Schreiben Sie uns! Aber auch, wenn Sie die Probleme bereits gelöst haben und vielleicht jetzt darüber lachen. Schicken Sie die Lösung. Denken Sie daran, daß es anderen ebenso gehen könnte.

Simons Basic-Modul abschalten

Wer häufig, aber eben nicht immer mit Simons Basic programmiert, kann das Modul mit »SYS 64760« abschalten. Allerdings stehen dann statt 38911 nur 30719 Byte für Basic zur Verfügung. Man erspart sich aber das dauernde Rausziehen und Reinstecken des Moduls. Eingeschaltet wird Simons Basic wieder mit »SYS 64738«, durch einen Reset-Taster oder durch Aus- und Einschalten des C 64.

(Jürgen Ehnes/tr)

Der bunte Cursor

Durch »POKE 53265,80« wird der Cursor rot, die Schrift bleibt allerdings hellblau. Farbige und reverse PRINT-Anweisungen werden zerstört. Läßt sich gut vor INPUT einsetzen. »Ge-SHIFTete« Zeichen erscheinen hellblau mit weißem Hintergrund.

(Volker Hilt/tr)

Berechnung von PI

Im Mathematikunterricht habe ich die näherungsweise Berechnung der Kreiszahl PI kennengelernt. Das Näherungsverfahren beruht auf der Umfangsberechnung regulärer Tangenten- und Sehnenvielecke eines Kreises. Dieses Verfahren, das ich in einem Einzeiler realisiert habe, entwickelte der englische Mathematiker Gregory im 17. Jahrhundert. Das Programm (Listing 1) berechnet eine Intervallschachtelung.

Programmerklärung: Die FOR-NEXT-Schleife bricht die Berechnungen nach dem 13. Durchgang (FOR I=0TO12) ab, da PI vom Basic-Interpreter nicht mehr genauer berechnet werden kann. An der Variablen W erkennt der C 64, ob U=0 ist. Im ersten Durchlauf ist U=0, da nach einem »RUN« automatisch alle Variablen gelöscht werden. Das bedeutet, daß der Term »U=0« wahr ist (-1). In den folgenden Durchläufen ist U≠0 (ungleich Null). Das bedeutet, daß der Term »U≠0« nicht wahr, beziehungsweise falsch ist (siehe Bild 1 und 2).

READY.
? 1=5
 0

READY.
? 7=7
-1

READY.
Q = (1=5) : ? Q
 0

READY.
Q = (7=7) : ? Q
-1

READY.
Bild 1. Beispiel für »wahre« und »falsche« Aussagen. Das »?« ist die Abkürzung für »PRINT«
 0 : falsch
-1 : wahr
Bild 2. Das mathematische »Ergebnis« »wahrer« und »falscher« Aussagen

Indem ich vor den Term »U=0« ein Minuszeichen setze, erreiche ich folgende Belegung der Variablen W:

W=1: 1. Durchlauf (U=0)
W=0: x-ter Durchlauf (U≠0)

Dadurch wird bewirkt, daß die Variablen nur einmal initialisiert werden. Zu dem Produkt aus W und der Initialisierungszahl addiere ich die Variable selbst, damit die Variablenwerte in den nachfolgenden Durchläufen nicht verlorengehen (siehe Bild 3). Dann folgt die eigentliche Berechnung:

\[ \mathrm{{O={2 \cdot O \cdot U} \over {O+U}} ; U=\sqrt{U \cdot O}} \]

Bevor ein neuer Programmdurchlauf gestartet wird, werden N, U und O auf dem Bildschirm ausgegeben. Das n-Eck (Vieleck) hat zuerst sechs Ecken, dann 12, 24, 48 und so weiter, wird also an einem Kreis angenähert. Das bedeutet, daß N nach jeder Berechnung mit 2 multipliziert wird (n:=2n). Durch die Formel 6*2↑I berechne ich N für den I+1-ten Durchgang (siehe Bild 4).

(Gerhard Muth/tr)
U = W * 3 + U = U;
       0, da W=0

O = W * 2 * SQR(3) + O = O;
       0, da W=0
Bild 3. So werden die Variablen bei jedem Schleifendurchlauf neu definiert
I 6 * 2↑I N
0 6 * 1 = 6
1 6 * 2 = 12
2 6 * 4 = 24
3 6 * 8 = 48
... ... ... ...
Bild 4. Die Wertetabelle unseres kleinen Programms
I Schleifenzähler
W Kennvariable
O obere Grenze
U untere Grenze
N Anzahl der Ecken des Vielecks)
Bild 5. Die verwendeten Variablen und ihre Bedeutung
10 fori=0to12
20 w=-(u=0)
30 o=2*sqr(3)*w+o
40 u=3*w+u
50 o=2*o*u/(o+u)
60 u=sqr(o*u)
70 print6*2^i,u;o
80 next
Listing 1. Dieses Programm berechnet näherungsweise die Kreiszahl PI

Fehlersuche für Einsteiger

Vor allem Anfänger haben Schwierigkeiten, die manchmal nur schwer verständlichen englischen Fehlermeldungen des C 64 richtig zu deuten. Aber gerade während der ersten Schritte in Basic ist es wichtig zu wissen, was man denn eigentlich falsch gemacht hat. Dieses Programm (Listing 2) übersetzt für Sie die Meldungen des Basic-Interpreters und bringt die fehlerhafte Programmzeile gleich auf den Bildschirm. Nach der Eingabe mit dem MSE speichern Sie das Listing erst einmal auf Diskette oder Kassette. Laden Sie es dann absolut, also mit LOAD"FEHLER",8,1 für Diskette beziehungsweise mit LOAD"FEHLER",1,1 für Datasette. Danach müssen Sie NEW eingeben (RETURN-Taste nicht vergessen), damit Sie später keinen »OUT OF MEMORY ERROR« (auf Deutsch: Speicher voll) erhalten. Starten Sie dann das Programm mit SYS 49152. Wenn Sie die Erweiterung nicht mehr brauchen, geben Sie einfach SYS 49163 ein.

(Florian Gudermann/tr)
PROGRAMM : FEHLER         C000 C2D8
-----------------------------------
C000 : A9 16 8D 00 03 A9 C0 8D   B3
C008 : 01 03 60 A9 8B 8D 00 03   03
C010 : A9 E3 8D 01 03 60 8A 10   AC
C018 : 03 4C 74 A4 0A AA BD 99   13
C020 : C2 85 FA BD 9A C2 85 FB   E9
C028 : 20 CC FF A9 00 85 13 20   9C
C030 : D7 AA A9 62 A0 C0 20 1E   E0
C038 : AB A5 FA A4 FB 20 1E AB   99
C040 : A4 3A C8 F0 03 20 C2 BD   09
C048 : A9 0D 20 16 E7 EA EA A5   0F
C050 : 39 85 14 A5 3A 85 15 20   6A
C058 : A7 A6 A9 80 20 90 FF 4C   EC
C060 : 80 A4 93 90 12 20 2A 2A   48
C068 : 2A 20 20 46 45 48 4C 45   C6
C070 : 52 20 3A 20 20 2A 2A 2A   B5
C078 : 92 0D 9A 00 00 00 5A 55   4C
C080 : 20 56 49 45 4C 45 20 46   C2
C088 : 49 4C 45 53 00 46 49 4C   A3
C090 : 45 20 4F 46 46 45 4E 00   4A
C098 : 46 49 4C 45 20 4E 49 43   5F
C0A0 : 48 54 20 4F 46 46 45 4E   4D
C0A8 : 00 46 49 4C 45 20 4E 49   C8
C0B0 : 43 48 54 20 47 45 46 55   93
C0B8 : 4E 44 45 4E 00 47 45 52   37
C0C0 : 45 41 54 20 4E 49 43 48   8C
C0C8 : 54 20 56 4F 52 48 41 4E   B5
C0D0 : 44 45 4E 00 4B 45 49 4E   EB
C0D8 : 20 45 49 4E 47 41 42 45   C9
C0E0 : 46 49 4C 45 00 4B 45 49   89
C0E8 : 4E 20 41 55 53 47 41 42   3A
C0F0 : 45 46 49 4C 45 00 46 49   34
C0F8 : 4C 45 4E 41 4D 45 46 45   45
C100 : 48 4C 54 00 55 4E 45 52   05
C108 : 4C 41 55 42 54 45 20 47   11
C110 : 45 52 41 45 54 4E 55 4D   1F
C118 : 4D 45 52 00 4E 45 58 54   B6
C120 : 20 4F 48 4E 45 20 46 4F   D1
C128 : 52 00 54 45 58 54 46 45   04
C130 : 48 4C 45 52 00 52 45 54   8A
C138 : 55 52 4E 20 4F 48 4E 45   49
C140 : 20 47 4F 53 55 42 00 46   36
C148 : 45 48 4C 45 4E 44 45 20   C9
C150 : 44 41 54 41 00 55 4E 45   E1
C158 : 52 4C 41 55 42 54 45 52   4C
C160 : 20 42 45 52 45 49 43 48   79
C168 : 00 45 52 47 45 42 4E 49   BB
C170 : 53 20 5A 55 20 47 52 4F   39
C178 : 53 53 00 53 50 45 49 43   BA
C180 : 48 45 52 20 56 4F 4C 4C   AD
C188 : 00 45 58 49 53 54 49 45   F2
C190 : 52 54 20 4E 49 43 48 54   57
C198 : 00 4E 49 43 48 54 44 49   45
C1A0 : 4D 45 4E 53 49 4F 4E 49   69
C1A8 : 45 52 54 00 5A 57 45 49   33
C1B0 : 4D 41 4C 20 44 49 4D 45   03
C1B8 : 4E 53 49 4F 4E 49 45 52   D5
C1C0 : 54 00 44 55 52 43 48 20   71
C1C8 : 4E 55 4C 4C 20 47 45 54   57
C1D0 : 45 49 4C 54 00 44 49 52   43
C1D8 : 45 4B 54 4D 4F 44 55 53   95
C1E0 : 20 4E 49 43 48 54 20 45   14
C1E8 : 52 4C 41 55 42 54 00 53   C9
C1F0 : 54 52 49 4E 47 20 3C 3D   6A
C1F8 : 3E 20 5A 41 48 4C 56 45   D0
C200 : 52 57 45 43 48 53 45 4C   84
C208 : 54 00 53 54 52 49 4E 47   F3
C210 : 20 5A 55 20 4C 41 4E 47   4D
C218 : 00 46 41 4C 53 43 48 45   10
C220 : 20 44 41 54 45 4E 20 45   0F
C228 : 49 4E 45 53 20 46 49 4C   46
C230 : 45 53 00 5A 55 20 4B 4F   8C
C238 : 4D 50 4C 49 5A 49 45 52   93
C240 : 54 45 52 20 41 55 53 44   64
C248 : 52 55 43 4B 00 4B 45 49   81
C250 : 4E 20 43 4F 4E 54 20 4D   0C
C258 : 4F 45 47 4C 49 43 48 00   75
C260 : 46 45 48 4C 45 4E 44 45   47
C268 : 20 44 45 46 20 41 4E 57   B8
C270 : 45 49 53 55 4E 47 00 56   A5
C278 : 45 52 49 46 59 20 50 52   7E
C280 : 47 2E 00 4C 4F 41 44 20   B8
C288 : 50 52 2E 00 21 55 4E 54   2C
C290 : 45 52 42 52 45 43 48 55   13
C298 : 4E 47 00 7E C0 8D C0 98   06
C2A0 : C0 A9 C0 BD C0 D4 C0 E5   9E
C2A8 : C0 F6 C0 04 C1 1C C1 2A   EC
C2B0 : C1 35 C1 47 C1 55 C1 69   06
C2B8 : C1 7B C1 89 C1 99 C1 4C   61
C2C0 : C1 C2 C1 D5 C1 EF C1 0A   C4
C2C8 : C2 19 C2 33 C2 4D C2 60   90
C2D0 : C2 77 C2 83 C2 8C C2 00   0A
Listing 2. »Deutsche Fehler«

Geniale Bildschirm-Hardcopy

Diese extrem kurze Programmroutine (Listing 3), die sich natürlich auch in eigene Programme einbauen läßt, bringt den Bildschirminhalt zu Papier. Angenommen, Sie möchten einen kleinen Text, oder einen Brief ausdrucken, so gibt es zwei Möglichkeiten:

  1. Sie laden ein Textverarbeitungsprogramm (falls Sie eines besitzen) und quälen sich durch zig Menüs, bis Sie auf dem Drucker endlich das gewünschte Resultat haben, oder
  2. Sie tippen dieses kurze Programm ein, schreiben Ihren Text einfach auf den Bildschirm und starten das Programm mit »RUN«.

Das Prinzip besteht darin, den Bildschirm als Eingabegerät zu definieren, und dann die einzelnen Zeichen direkt an den Drucker zu senden. Dabei gehen Sie so vor:

Das war’s auch schon!

(Peter Tiesat/tr)
10 open1,3
20 open4,4
30 print"{up}   {home}";
40 fori=1to25
50 forj=1to40
60 get#1,a$
70 b$=b$+a$
80 nextj
90 print#4,b$
100 b$=""
110 nexti
120 close4
130 close1
0 rem fuer drucker ohne auto-line-feed-schalter
1 rem zum beispiel mps801
10 open1,3
20 open4,4
30 print"{up}   {home}";
40 fori=1to25
50 forj=1to40
60 get#1,a$
70 b$=b$+a$
80 nextj
90 print#4,b$;
100 b$=""
110 nexti
120 close4
130 close1

»RUN« mit zwei Tastendrücken

Preisfrage: Wie erreiche ich einen Programmstart auf dem C 64 ohne RUN (Return) eintippen zu müssen?

Antwort: Bitte drücken Sie

Auf dem Bildschirm erscheint: ALOAD ?SYNTAX ERROR READY. RUN (Ein eventuell vorhandenes Basic-Programm wird gestartet.)

Erklärung: Das Betriebssystem hält eine Routine bereit, die die Zeichenfolge LOAD⟨cr⟩ RUN ⟨cr⟩ in den Tastaturpuffer einliest (⟨cr⟩ bedeutet »carriage return« und heißt »Return-Taste ausführen«).

Diese Routine wird durch Drücken von SHIFT und RUN/STOP aktiviert. (Sie ist besonders für Datasettenbenutzer als »Autostart« interessant.) Um nur das »RUN⟨cr⟩« zu aktivieren, muß man das »LOAD⟨cr⟩« gewissermaßen außer Betrieb setzen. Dieses geschieht dadurch, daß man durch die vorherige Eingabe eines Buchstabens (zum Beispiel »A«) das Wort »ALOAD« erzeugt. Da das ⟨cr⟩ danach aus dem Tastaturpuffer geholt wird, versucht der Basic-Interpreter diesen »ALOAD«-Befehl auszuführen. Dieser ist aber nicht im Befehlssatz vorhanden — ein »Syntax Error« wird ausgegeben. Danach geht das Betriebssystem wieder dazu über, den Tastaturpuffer abzufragen. Dort steht immer noch »RUN⟨cr⟩«. Dieses wird nun in den Bildschirmspeicher geschrieben und ausgeführt — ein Basic-Programm wird gestartet.

(Bernd Kleine-Voßbeck/tr)

Der Piepser

Dieses Maschinenprogramm für den C 64 (Listing 4) bewirkt, daß immer dann, wenn eine Taste gedrückt wird, ein Ton erklingt (außer bei der »RESTORE«-Taste). Nützlich zum Beispiel bei schnellen Tipparbeiten auf ausgeleierter Tastatur als Bestätigung des »korrekten« Tastendrucks. Das Programm kopiert den Basic-Interpreter und das Kernel ins darunterliegende RAM und schaltet auf RAM um (auch mit POKE 1,53 möglich). Dann wird in die Tastaturabfrage des Betriebssystems ein JMP-Befehl zu der Routine ab $C000 (49152) eingefügt. Diese läßt einen Ton erklingen (sie wird nur bei gedrückter Taste angesprungen) und springt wieder in die Betriebssystem-Routinezurück. Das Programm steht ab $C000=49152, wird aber mit SYS 49184 gestartet. Ist das Programm einmal aktiviert, so kann der Bereich ab 49184 genutzt werden. Experimente mit Frequenz und ADSR-Hüllkurve sind natürlich möglich.

(Cadrio/tr)
C000     LDA   #$10          ;Wellenform, Gate-Bit off
         STA   $D404
         LDA   #$80          ;Attack, Decay
         STA   $D405
         LDA   #$00          ;Sustain, Release
         STA   $D406
         LDA   #$67          ;Frequenz Low-Byte
         STA   $D400
         LDA   #$11          ;Frequenz High-Byte
         STA   $D401
         LDA   #$11          ;Gate-Bit on
         STA   $D404
         LDA   #$FF          ;Lautstärke maximal
         STA   $D418
         LDA   #$81          ;2 Befehle aus Tasten-
         STA   $F5           ;abfrage
         JMP   $EA9F         ;zurück ins Betriebssystem
C02A     LDY   #$00          ;Kopieren des BASIC-ROM
         LDA   #$20
         STA   $03E8
         LDA   #$00
         STA   $BB
         LDA   #$A0
         STA   $BC
C039     LDA   ($BB), Y
         STA   ($BB), Y
         INC   $BB
         BEQ   M01
         JMP   C039
     M01 INC   $BC
         DEC   $03E8
         BEQ   M02
         JMP   C039
     M02 LDA   #$20          ;Kopieren des KERNEL
         STA   $03E8
         LDA   #$00
         STA   $BB
         LDA   #$E0
         STA   $BC
C05B     LDA   ($BB), Y
         STA   ($BB), Y
         INC   $BB
         BEQ   M03
         JMP   C05B
     M03 INC   $BC
         DEC   $03E8
         BEQ   M04
         JMP   C05B
     M04 LDA   #$35          ;Umschalten auf
         STA   $01           ;RAM
         LDA   #$4C          ;Code für JMP
         STA   $EA9B
         LDA   #$00          ;Low-Byte von C000
         STA   $EA9C
         LDA   #$C0          ;High-Byte von C000
         STA   $EA9D
         RTS

PROGRAMM : TASTENTON      C000 C084
-----------------------------------
C000 : A9 10 8D 04 D4 A9 70 8D   0D
C008 : 05 D4 A9 00 8D 06 D4 A9   91
C010 : CF 8D 00 D4 A9 22 8D 01   24
C018 : D4 A9 11 8D 04 D4 A9 FF   44
C020 : 8D 18 D4 A9 81 85 F5 4C   D8
C028 : 9F EA A0 00 A9 20 8D E8   08
C030 : 03 A9 00 85 BB A9 A0 85   4F
C038 : BC B1 BB 91 BB E6 BB F0   B2
C040 : 03 4C 39 C0 E6 BC CE E8   31
C048 : 03 F0 03 4C 39 C0 A9 20   8E
C050 : 8D E8 03 A9 00 85 BB A9   B6
C058 : E0 85 BC B1 BB 91 BB E6   65
C060 : BB F0 03 4C 5B C0 E6 BC   AF
C068 : CE E8 03 F0 03 4C 5B C0   0B
C070 : A9 35 85 01 A9 4C 8D 9B   A0
C078 : EA A9 00 8D 9C EA A9 C0   32
C080 : 8D 9D EA 60               3B
Listing 4. »Der Piepser«: akustische Rückmeldung Tastendrucks, Oben der Source-Code, darunter das MSE-Listing.

Zahlen rechtsbündig

Wer hat sich noch nicht geärgert, daß die Zahlenausgabe im normalen Commodore-Basic immer linksbündig erfolgt? (Zum besseren Verständnis gebe man einmal »PRINT 3:PRINT 12« ein!) Wer keine komplizierte Print-Using-Routine benutzen will, kann sich in vielen Fällen mit dem hier vorgestellten Trick behelfen:

Die Kennziffer des dekadischen Logarithmus gibt die Anzahl der Vorkommastellen -1 an. In Verbindung mit der »PRINT TAB«-Funktion bietet sich die Möglichkeit, Zahlen formatiert auszugeben: PRINT TAB (A-(INT(LOG(X)/LOG(10)))); INT (X*10↑B)/10↑B wobei

Natürlich ist zu beachten, daß für X-Werte kleiner gleich Null keine reellen Lösungen existieren. Auch bei Zahleneingaben die kleiner als 0,001 sind, wird die vorgestellte Print-Using-Hilfe nicht funktionieren.

(Heinrich Stender/tr)

Listschutz geknackt

Der Listschutz aus der 64’er, Ausgabe 11/85, läßt sich knacken, indem man nach dem Laden einen »POKE 2067,73« eingibt.

(Sascha Lengen/tr)

Sauberes Schriftbild auf dem MPS 801

Ein weit verbreiteter und derzeit sehr preisgünstiger Matrix-Drucker für den C 64 beziehungsweise VC 20 ist der MPS 801 beziehungsweise GP 100 VC, dessen Matrix mit der des älteren VC 1515 für den VC20 identisch ist. Diese Drucker haben ein sehr gut lesbares Schriftbild bei ausschließlicher Verwendung von Großbuchstaben (bei Listings meist ausreichend). Bei Verwendung von Groß- und Kleinschreibung fällt aber sehr störend das Fehlen von Unterlängen auf, wodurch die Zeichen p,q,j und so weiter hochgerutscht erscheinen. Und beim Schreiben deutscher Texte ist zwar durch eigene Zeichendefinition ein deutscher Zeichensatz mit Umlauten möglich und in vielen Textsystemen auch realisiert. Dabei fehlen dann jedoch die Oberlängen bei den großen Umlauten Ä, Ö, Ü. Bedingt ist dies durch die Zeichenmatrix, die zwar in der Breite von 6 Punkten sehr gut lesbar ist, in der Höhe von 7 Punkten aber für Unter- oder Oberlängen (Ä, Ö, Ü) nicht ausreicht. Die folgende Maschinensprache-Routine (Listing 5) versetzt die genannten Drucker dennoch in die Lage, mit Hilfe der Grafikcodes echte Ober- und Unterlängen zu drucken, außerdem auch die deutschen Sonderzeichen. Des weiteren werden statt inverser Zeichen unterstrichene gedruckt, wodurch in Basic-Listing (CMD-Modus) die Steuerzeichen besser lesbar werden. Ein besonderer »Leckerbissen« ist das Anführungszeichen, das abwechselnd unten und oben erscheint. Die Druckroutine funktioniert bei Normalschrift (CHR$(14)) und Breitschrift (CHR$(15)), wobei auch das Mischen von Schmal- und Breitschrift innerhalb einer Zeile unverändert möglich ist.

Das Programm nimmt Rücksicht auf den geringen Zeichenpuffer des Matrix-Druckers und ist so ausgelegt, daß der Drucker möglichst schnell arbeitet. Daher wird kein völlig eigener Zeichensatz verwendet, sondern nur der vorhandene entsprechend modifiziert.

Das Programm ist für den C 64 konzipiert und kann im Bereich $D000, also über dem I/O-Port arbeiten, so daß es weder Basic-Speicherplatz belegt noch den gleichzeitigen Betrieb von eigenen Betriebssystem-Erweiterungen, Toolkits oder 80-Zeichen-Karte beeinträchtigt! In diesem Falle steht jedoch der Kassettenpuffer für die Datasette nicht mehr zu Verfügung, da dort ein Ein- und Aussprungprogramm nach $D000 steht. Aufgrund des universellen Basic-Laders ist das Programm allerdings auch in anderen Speicherbereichen zu betreiben und somit auch im VC 20 ohne Änderung (mindestens 3 KByte-RAM-Erweiterung erforderlich). Bei allen Speicherbereichen außer $D000 kann auch weiterhin ein Kassettenrecorder betrieben werden.

Selbstverständlich kann die Drucker-Routine auch in Textverarbeitungsprogramme eingebaut werden, wozu es allerdings Maschinensprache-Kenntnisse bedarf.

Das Programm ist in Basic-DATAs geschrieben, um es universell und kompatibel zu halten. So kann jeder, der es einmal abgetippt hat, es an VC 20- und C 64-Besitzer ohne Anpassungsprobleme weitergeben.

Zur Bedienung des Programms: Nach dem Start mit »RUN« bietet es fünf Möglichkeiten für den Speicherbereich oder den verwendeten Computer an. Je nach gewähltem Bereich setzt es aufgrund der DATA-Zeilen die Maschinenroutine an die richtige Stelle. Die DATA-Prüfsummen werden vor Ansprung der Maschinensprache geprüft. Nach einer Wartezeit von 30 Sekunden wird dann noch angeboten, die Lage der deutschen Umlaute auf der Tastatur zu ändern, im Original ist ä=CHR$(60), Ä=CHR$(62), ö=CHR$(91), Ö=CHR$(93), ü=CHR$(64), Ü=CHR$(42), ß=CHR$(92). Um dies zu ändern, müssen neue ASCII-Codes eingegeben werden. Achtung: Es ist nicht zulässig, daß für verschiedene Umlaute der gleiche Code eingegeben wird (zum Beispiel alles Null). Die Routine hängt sich sonst auf. Werden keine deutschen Sonderzeichen gewünscht, so können für diese die Codes über 200 eingegeben werden, die in der Praxis kaum vorkommen. Wenn das Programm durchgelaufen ist, werden POKEs angeboten, mit denen die Drucker-Routine ein- und ausgeschaltet werden kann. Achtung: Beide POKEs müssen jeweils wie angezeigt in einer Befehlszeile mit Doppelpunkt getrennt eingegeben werden, keinesfalls einzeln! Nach Ausschalten muß mit »PRINT#4,CHR$(15);« (oder CHR$(14)) der Drucker zunächst wieder in den Normalzustand gebracht werden (steht sonst auf CHR$(8) = Grafik). Das Basic-Programm endet, indem es den Befehl »NEW« und die Abfrage »PRINT FRE(0)« vorschlägt, um zu dokumentierten, wieviel freier Speicherraum noch verfügbar ist. Auch nach »NEW« kann mit den genannten POKEs die Unterroutine beliebig an- und ausgeschaltet werden. Achtung: RUN/STOP-RESTORE schaltet die Druckerroutine ab.

Noch zwei Hinweise: Wird mit »OPEN4,4« ein Druckerfile erstmals eröffnet, so empfiehlt es sich, mit »PRINT #4« erst einmal eine Leerzeile zu drucken. Beim CMD-Modus entfällt dies. Am Ende eines Druckvorgangs ist die letzte Zeile stets ohne Unterlängen gedruckt, da der Computer noch auf die Oberlängen der nächsten Zeile wartet. Kommt keine nächste Zeile mehr, so sollte mit »PRINT#4« eine Leerzeile gedruckt werden. Nach Beendigung eines »CMD« muß daher manchmal nicht nur ein- sondern zweimal »PRINT # 4« eingegeben werden.

(Barnim König/tr)
100 print"{down}{down}druckroutine gp100 vc20/cbm64."
101 print"{down}barnim koenig 8/1985"
102 print"{down}{down}bereichswahl startadresse."
103 print"{down}1: cbm 64 $d000 (ohne cassette)"
104 print"2: cbm 64 $c000 (mit cassette)."
105 print"{down}3: vc 20 3k, wenn vorhanden ($0400)"
106 print"4: vc 20 rom-bereich $a000"
107 print"{down}5: 20 oder 64 am basic-ende.{down}"
108 inputsa:ifsa<1orsa>5then102
109 print"{down}{down}bitte 30 sec. warten."
110 :
111 poke828,0:ifsa=1thenpoke828,1:poke829,peek(55):poke830,peek(56):goto113
112 ifsa<5then115
113 sa=peek(56)-7:ifpeek(55)>0thensa=sa-1
114 poke56,sa:poke55,0:clr:sa=peek(56):goto118
115 ifsa=2thensa=192
116 ifsa=3thensa=4
117 ifsa=4thensa=160
118 sr=sa:ifpeek(828)thensr=208
119 sd=sa*256:p=0
120 readx:p=p+x:ifx=-1then127
121 ifx<300then126
122 ifx<600thenx=x-492+sr:goto126
123 ifpeek(828)=0thenx=peek(x):goto126
124 ifx=806thenx=89
125 ifx=807thenx=3
126 pokesd,x:sd=sd+1:goto120
127 ifp<>187301thenprint"{down}{down}data-fehler block 1{down}{down}":end
128 sd=sa*256+1024:forx=sdtosd+426:pokex,0:nextx
129 sd=sa*256+1535:p=0
130 readx:p=p+x:ifx=-1then133
131 pokesd,x:sd=sd+1:goto130
132 ifp<>26405thenprint"{down}{down}data-fehler block 2{down}{down}":end
133 :
134 input"{down}{down}zeichen aendern";in$:ifleft$(in$,1)<>"j"then144
135 printchr$(14)"{down}ascii-codes fuer sonderzeichen eingeben.":sd=sa*256
136 input"ae";a:pokesd+1655,a
137 input"Ae";a:pokesd+447,a:pokesd+761,a:pokesd+1616,a
138 input"oe";a:pokesd+1656,a
139 input"Oe";a:pokesd+443,a:pokesd+767,a
140 input"ue";a:pokesd+1657,a
141 input"Ue";a:pokesd+449,a:pokesd+773,a
142 input"ss";a:pokesd+1539,a:pokesd+1652,a
143 :
144 ifpeek(828)then149
145 print"{down}{down}an: poke806, 112 :poke807,";sa+3
146 print"{down}aus:poke806,";peek(806);":poke807,";peek(807);"."
147 poke806,112:poke807,sa+3:goto158
148 :
149 sd=832:p=0
150 readx:p=p+x:ifx=-1then152
151 pokesd,x:sd=sd+1:goto150
152 ifp<>10030thenprint"{down}{down}data-fehler block 3{down}{down}":end
153 sys887:poke55,peek(829):poke56,peek(830):clr
154 print"{down}{down}an : poke806, 64  :poke807, 3"
155 print"{down}aus: poke806,";peek(806);":poke807,";peek(807)
156 poke861,peek(806):poke862,peek(807)
157 poke806,64:poke807,3
158 print"{down}{down}druckroutine eingeschaltet."
159 print"{down}{down}new":print"{down}{down}?fre(0){up}{up}{up}{up}{up}{up}":end
160 :
161 data142,161,496,140,162,496,141,160,496,201,13,208,10,72,169,0,141,166
162 data496,104,76,210,492,201,10,240,242,72,173,165,496,208,36,104,201,14
163 data208,5,141,164,496,24,96,201,15,240,247,201,18,208,5,141,166,496,24
164 data96,201,146,208,10,72,169,0,141,166,496,104,24,96,104,24,201,32,144
165 data9,24,201,160,176,32,201,128,144,28,72,173,165,496,208,3,104,24,96,169
166 data18,141,166,496,104,9,64,32,139,492,169,0,141,166,496,76,199,492,201
167 data34,208,23,173,165,496,240,10,169,0,141,165,496,169,34,76,139,492,169
168 data162,234,234,234,141,165,496,72,173,164,496,201,14,208,17,72,173,163
169 data496,41,1,240,5,169,32,32,165,492,104,32,165,492,104,24,174,163,496
170 data224,80,144,12,72,32,210,492,104,234,172,162,496,174,163,496,157,0
171 data496,173,166,496,240,3,157,80,496,238,163,496,24,173,160,496,174,161
172 data496,172,162,496,96,169,0,141,167,496,141,168,496,141,170,496,169,0
173 data162,13,157,175,496,202,208,250,174,167,496,189,0,497,201,14,240,81
174 data162,9,221,254,497,240,6,202,208,248,76,21,493,138,10,10,10,141,8,493
175 data162,6,189,72,498,157,176,496,202,208,247,169,1,141,168,496,174,167
176 data496,189,1,497,162,9,221,254,497,240,6,202,208,248,76,118,493,138,10
177 data10,10,141,50,493,162,6,189,24,498,157,182,496,202,208,247,169,1,141
178 data168,496,76,118,493,189,1,497,162,9,221,254,497,240,6,202,208,248,76
179 data118,493,138,10,10,10,141,92,493,162,6,189,72,498,72,138,10,170,104
180 data157,175,496,157,176,496,72,138,74,170,104,202,208,234,169,1,141,168
181 data496,174,167,496,189,80,497,240,18,162,6,169,2,29,176,496,157,176,496
182 data202,208,245,169,1,141,168,496,174,167,496,189,81,497,240,18,162,6,169
183 data2,29,182,496,157,182,496,202,208,245,169,1,141,168,496,174,167,496
184 data189,0,496,201,14,240,113,32,186,493,76,197,493,201,93,208,2,169,62
185 data201,42,240,250,96,162,3,221,79,498,240,6,202,208,248,76,239,493,138
186 data10,10,10,24,105,80,141,223,493,162,6,189,88,498,29,176,496,157,176
187 data496,202,208,244,169,1,141,168,496,174,167,496,189,1,496,32,186,493
188 data162,3,221,79,498,240,6,202,208,248,76,103,494,138,10,10,10,24,105,80
189 data141,18,494,162,6,189,104,498,29,182,496,157,182,496,202,208,244,169
190 data1,141,168,496,76,103,494,189,1,496,32,186,493,162,3,221,79,498,240
191 data6,202,208,248,76,103,494,138,10,10,10,24,105,80,141,69,494,162,6,189
192 data104,498,72,138,10,170,104,72,29,175,496,157,175,496,104,29,176,496
193 data157,176,496,72,138,74,170,104,202,208,226,169,1,141,168,496,173,168
194 data496,208,27,238,170,496,238,167,496,238,167,496,173,167,496,201,80,176
195 data3,76,221,492,169,8,32,806,807,76,183,494,173,170,496,240,15,169,14
196 data32,806,807,169,32,32,806,807,206,170,496,208,248,169,8,32,806,807,162
197 data1,189,176,496,9,128,32,806,807,232,224,13,208,243,162,0,142,168,496
198 data76,111,494,169,0,141,167,496,169,13,32,806,807,173,169,496,32,806,807
199 data169,17,32,806,807,174,167,496,189,0,496,201,14,240,2,169,15,205,169
200 data496,240,6,141,169,496,32,806,807,201,14,208,4,238,167,496,232,189,0
201 data496,162,14,221,111,498,240,74,202,208,248,201,62,208,2,169,193,201
202 data93,208,2,169,207,201,42,208,2,169,213,32,806,807,238,167,496,24,173
203 data167,496,205,163,496,144,179,169,8,32,806,807,169,0,141,163,496,141
204 data167,496,162,160,189,255,495,157,255,496,169,0,157,255,495,202,208,242
205 data24,169,13,32,806,807,76,200,492,138,10,10,10,24,105,120,141,83,495
206 data169,8,32,806,807,162,1,138,72,189,232,498,32,806,807,174,169,496,224
207 data14,208,3,32,806,807,104,170,232,224,8,208,231,173,169,496,76,10,495
208 data0,72,165,154,201,4,240,4,104,76,806,807,104,76,0,492,-1
209 :
210 data71,74,80,81,92,44,59,162,89,0,128,132,132,132,131,128,0,0,128,130,132
211 data131,128,128,0,0,135,128,128,128,128,128,0,0,128,128,128,128,135,128
212 data0,0,135,128,128,128,128,128,0,0,128,130,129,128,128,128,0,0,128,130
213 data129,128,128,128,0,0,128,128,131,128,131,128,0,0,128,132,132,131,128
214 data128,0,62,39,34,0,0,0,0,0,0,128,160,128,160,128,128,0,0,128,128,192
215 data160,128,128,0,0,128,224,128,224,128,128,0,71,74,80,81,92,44,59,60,91
216 data64,39,162,34,89,0,0,0,184,196,196,168,252,128,0,0,128,128,128,253,128
217 data128,0,0,252,168,196,196,184,128,0,0,184,196,196,168,252,128,0,0,254
218 data201,201,182,128,128,0,0,128,128,192,128,128,128,0,0,128,128,208,128
219 data128,128,0,0,160,213,212,189,192,128,0,0,184,197,196,197,184,128,0,0
220 data189,192,192,189,192,128,0,0,128,129,128,128,128,128,0,0,128,128,192
221 data128,192,128,0,0,128,129,128,129,128,128,0,0,188,192,160,252,128,128
222 data0,66,65,82,78,73,77,32,32,75,79,69,78,73,71,56,53,-1
223 :
224 data72,165,154,201,4,240,8,104,108,93,3,234,234,234,234,104,32,98,3,32
225 data0,208,76,111,3,32,111,3,32,202,241,76,98,3,72,165,1,141,113,3,41,252
226 data120,133,1,104,96,72,169,55,133,1,104,88,96,32,98,3,165,56,234,141,132
227 data3,162,0,189,0,128,157,0,208,232,208,247,173,135,3,201,214,240,9,238,132
228 data3,238,135,3,76,130,3,76,111,3,-1
Listing 5. Sauberes Schriftbild auf dem MPS 801
PDF Diesen Artikel als PDF herunterladen
Mastodon Diesen Artikel auf Mastodon teilen
← Vorheriger ArtikelNächster Artikel →