C 64
Tips & Tricks

Hypra-Basic wird strukturiert

Durch neue Befehle ist es möglich, mit Hypra-Basic strukturiert zu programmieren. Für Einsteiger erklären wir ausführlich, wie man Module einbaut!

Zunächst einmal ein dickes Lob an unsere Leser. Die eingesandten Module sind wirklich gut. Das soll aber nicht heißen, das die Möglichkeiten von Hypra-Basic, dem Listing des Monats aus Ausgabe 4/85 auch nur annähernd ausgeschöpft wären. In Richtung Grafik und Sound zeigten sich noch keine Aktivitäten — obwohl gerade hier die Stärken des C 64 liegen. Unsere Aufforderung an alle Leser: Programmiert Grafik- und Sound-Module, denn hier gibt es ein weites Betätigungsfeld.

Für alle diejenigen, die mit der Anleitung zu Hypra-Basic noch nicht zurechtkommen, zeigen wir Schritt für Schritt, wie man vom Äbtippen zur eigenen Erweiterung kommt (siehe Kasten).

(K. Visel/J. Haible/F. Gräf/S. Thiel/og)
PROGRAMM : 31ERW .ASS     C000 C017
-----------------------------------
C000 : 20 9E B7 8E 20 D0 60 20   79
C008 : 9E B7 8E 21 D0 60 20 9E   17
C010 : B7 8E 86 02 60 00 00      7B
Listing 1. Modulnummer: 31. Anzahl der Befehle: 3.
1) FRAME 48152-49158,0
Funktion: FRAME legt die Rahmenfarbe des Bildschirms fest.
Syntax: FRAME f
f ist die Farbnummer. (0 = schwarz, 1 = weiß ...) Erlaubt sind Werte für f von 0-255, wobei bei Werten größer als 15 nur das Low-Nibble zählt.
2) BACK 49159-49165,0
Funktion: Hintergrundfarbe festlegen
Syntax: BACK f
3) PEN 49166-49172,0
Funktion: Zeichenfarbe festlegen
Syntax: PEN f
PROGRAMM : 32ERW .ASS     C000 C01E
-----------------------------------
C000 : AD 11 D0 29 EF 8D 11 D0   E0
C008 : A9 01 8D 30 D0 60 A9 00   52
C010 : 8D 30 D0 AD 11 D0 09 10   7B
C018 : 8D 11 D0 60 00 C0         1D
Listing 2. Modulnummer: 32. Anzahl der Befehle: 2.
1) FAST 49152-48165,0
Funktion: FAST schaltet beim C 128 im C 64-Modus auf 2 MHz Taktfrequenz um und den Bildschirm ab. Dadurch wird der Computer doppelt so schnell. Beim C 64 ergeben sich durch das Abschalten des Bildschirms nur etwa 5 bis 6 Prozent Geschwindigkeitsgewinn.
Syntax: FAST
2) SLOW 49166-49179,0
Funktion: SLOW schaltet wieder auf 1 MHz zurück und schaltet den Bildschirm ein.
Syntax: SLOW
PROGRAMM : 33ERW .ASS     C000 C0B5
-----------------------------------
C000 : 20 79 00 C9 8B F0 2E C9   A3
C008 : 80 D0 03 4C F8 A8 20 6D   6B
C010 : C0 A9 00 8D B2 C0 20 7E   05
C018 : C0 C9 8B D0 06 EE B2 C0   DE
C020 : 4C 16 C0 C9 80 D0 EF AE   8C
C028 : B2 C0 F0 06 CE B2 C0 4C   55
C030 : 16 C0 4C F8 A8 20 73 00   32
C038 : 20 9E AD A5 61 F0 03 4C   0A
C040 : F8 A8 A9 00 8D B2 C0 20   A8
C048 : 7E C0 C9 8B D0 06 EE B2   68
C050 : C0 4C 47 C0 C9 80 F0 03   8B
C058 : 20 6D C0 AE B2 C0 D0 03   AF
C060 : 4C F8 A8 C9 80 D0 03 CE   C4
C068 : B2 C0 4C 47 C0 A2 03 DD   5F
C070 : AE C0 F0 03 4C 08 AF 20   1F
C078 : 73 00 CA 10 F2 60 20 3B   C9
C080 : A9 A0 02 B1 7A D0 03 4C   03
C088 : E3 A8 C8 C8 98 65 7A 85   B4
C090 : 7A 90 02 E6 7B 20 73 00   36
C098 : C9 3A F0 F9 A2 03 DD AA   09
C0A0 : C0 D0 DB 20 73 00 CA 10   46
C0A8 : F5 60 45 53 41 43 45 53   73
C0B0 : 4C 45 00 20 31            D7
Listing 3. Modulnummer: 33. Anzahl der Befehle: 1.
1) CASE 49152-49321,9
Syntax:
a) CASE IF Bedingung
b) CASE ELSE
c) CASE END
Funktion: Trifft der Interpreter auf »CASE IF«, so wird die folgende Bedingung geprüft und entsprechend verzweigt. Ist die Bedingung erfüllt, so wird das Programm mit den darauf folgenden Anweisungen fortgesetzt. Folgt ein »CASE ELSE« so wird der Programmteil zwischen »CASE ELSE« und »CASE END« übersprungen. Trifft die »CASE IF«-Bedingung dagegen nicht zu, so wird das Programm direkt hinter »CASE IF« beziehungsweise »CASE ELSE« (sofern vorhanden) fortgesetzt.
Es ergibt sich folgende Struktur:
CASE IF Bedingung
Programmteil, der ausgeführt wird, wenn die Bedingung erfüllt ist. (Dürfte zum Beispiel eine weitere »CASE«-Struktur enthalten)
CASE ELSE
Programmteil, der ausgeführt wird, wenn die Bedingung nicht erfüllt ist. (Kann entfallen)
CASE END
Die »CASE«-Anweisungen müssen am Zeilenanfang stehen, damit sie von der Routine gefunden werden. Sie dürfen jedoch mit Doppelpunkten und Leerzeichen eingerückt werden (siehe Listing 6).
PROGRAMM : 34ERW .ASS     C000 C11E
-----------------------------------
C000 : A9 02 20 FB A3 A5 7A 48   14
C008 : A5 7B 48 A9 BB 48 20 79   24
C010 : 00 F0 05 20 22 C0 F0 03   C0
C018 : 4C AE A7 20 B8 C0 20 59   6E
C020 : C0 00 A2 04 DD 38 C0 F0   8E
C028 : 03 4C 08 AF 20 73 00 CA   7D
C030 : 10 F2 20 9E AD A5 61 60   E3
C038 : 45 4C 49 48 57 20 79 00   5B
C040 : F0 21 A2 04 DD 81 C0 F0   B9
C048 : 03 4C 08 AF 20 73 00 CA   9D
C050 : 10 F2 20 9E AD A5 61 F0   25
C058 : 0A 20 9D C0 9A 68 68 68   51
C060 : 4C F8 A8 20 9D C0 BD 03   33
C068 : 01 85 7A BD 02 01 85 7B   B7
C070 : 20 79 00 F0 05 20 22 C0   C6
C078 : F0 01 60 20 B8 C0 4C 59   7A
C080 : C0 4C 49 54 4E 55 20 9D   8F
C088 : C0 20 79 00 C9 8B D0 03   F9
C090 : 20 73 00 20 9E AD A5 61   1F
C098 : D0 E1 4C F8 A8 BA E8 E8   61
C0A0 : E8 E8 BD 01 01 C9 BB D0   7B
C0A8 : 04 60 AD 05 C1 AD AB C0   A2
C0B0 : 85 22 AD AC C0 4C 45 A4   14
C0B8 : A9 00 8D 1D C1 20 3B A9   C6
C0C0 : A0 02 B1 7A D0 03 4C E3   3B
C0C8 : A8 C8 C8 98 65 7A 85 7A   4F
C0D0 : 90 02 E6 7B 20 73 00 C9   BC
C0D8 : 3A F0 F9 C9 44 D0 0D 20   81
C0E0 : 73 00 C9 4F D0 D7 EE 1D   71
C0E8 : C1 4C BD C0 A2 03 DD 19   43
C0F0 : C1 D0 CA 20 73 00 CA 10   52
C0F8 : F5 AD 1D C1 F0 06 CE 1D   F8
C100 : C1 4C BD C0 60 4C 4F 4F   B3
C108 : 50 2F 45 58 49 54 20 57   B3
C110 : 49 54 48 4F 55 54 20 44   80
C118 : CF 50 4F 4F 4C 00         A5
Listing 4. Modulnummer: 34. Anzahl der Befehle: 3.
1) DO 49152-49207,5
2) LOOP 49213-49280,5
3) EXIT 49286-49412,25
Syntax:
1 a) DO
b) DO WHILE Bedingung
2 a) LOOP
b) LOOP UNTIL Bedingung
3 a) EXIT Bedingung
b) EXIT IF Bedingung
Funktion: Der Programmteil zwischen den Befehlen »DO« und »LOOP« wird beliebig oft ausgeführt. Aussteigen aus dieser Endlosschleife kann man auf drei verschiedene Arten:
1) Zu Beginn der »DO«-Schleife kann mit »WHILE« eine Bedingung gesetzt werden. Die Schleife wird nur ausgeführt, solange die Bedingung zutrifft. Ist die Bedingung am Schleifenanfang nicht erfüllt, so wird das Programm hinter »LOOP« fortgesetzt. Dies entspricht einer »WHILE...ENDWHILE« (-Schleife)
2) An beliebiger Stelle innerhalb einer »DO«-Schleife kann man mit »EXIT IF« aussteigen. Trifft die nachfolgende Bedingung zu, so wird die Schleife verlassen.
3) Schließlich kann die Abbruchbedingung auch noch am Schleifenende stehen. Ist die Bedingung nach »UNTIL« erfüllt, so wird die Schleife verlassen, ansonsten fortgesetzt.
Zu beachten ist noch, daß bei einer »WHILE«-Bedingung die Schleife unter Umständen gar nicht durchlaufen wird. Bei der »UNTIL«-Bedingung jedoch mindestens einmal.
Die neuen Befehle müssen unbedingt zu Beginn einer neuen Zeile stehen, dürfen jedoch mit Doppelpunkten und Leerzeichen eingerückt werden (siehe Listing 7).
PROGRAMM : 35ERW .ASS     C000 C062
-----------------------------------
C000 : 20 8A AD 20 F7 B7 AA 98   EE
C008 : 18 69 A0 85 FB 8A 69 00   67
C010 : 85 FC A9 8D 20 D2 FF 20   08
C018 : 28 C0 20 28 C0 20 28 C0   DD
C020 : A9 20 20 D2 FF 4C 17 C0   7C
C028 : 20 59 C0 A0 00 B1 FB F0   98
C030 : 25 85 FD AA 20 59 C0 B1   20
C038 : FB 20 D2 FF CA D0 F5 A2   48
C040 : 05 20 59 C0 CA D0 FA A9   36
C048 : 0D 38 E5 FD A8 A9 20 20   43
C050 : D2 FF 88 D0 FA 60 68 68   83
C058 : 60 E6 FB D0 02 E6 FC 60   50
C060 : 20 31                     65
Listing 5. Modulnummer: 35. Anzahl der Befehle: 1.
HELP 49152-49247,0
Funktion: Auflisten aller Befehle der Basic-Erweiterung auf dem Bildschirm (oder Drucker) ohne Beeinflussung des im Speicher befindlichen Programmes.
Syntax: Help (Startadresse der Tabelle)
Zur Ausgabe auf den Drucker muß in diesem Beispiel vor Eingabe des Help-Befehles folgende Befehlssequenz eingegeben werden:
OPEN 4,4
CMD 4
Nach der Ausgabe wie üblich mit Print #4 und CLOSE 4 abschließen.
100 rem beispiel "mitternachtsformel"
110 print "loesung einer quadratischen gleichung"
120 input "koeffizienten a,b,c ";a,b,c : print
130 d=b*b-4*a*c
140 case if d>=0
150 :    case if d>0
160 :         print "zwei loesungen"
170 :         print "x1 =";(-b+sqr(d))/(2*a)
180 :         print "x2 =";(-b-sqr(d))/(2*a)
190 :    case else
200 :         print "eine loesung"
210 :         print "x =";-b/(2*a)
220 :    case end
230 case else
240 :    print "keine reelle loesung"
250 case end
260 end
Listing 6. Demo-Programm für Modul 33.
100 rem  text in dreieckform ausgeben
110 do
120 :  print "bitte text eingeben" : input x$ : print
130 :  n=1 : q=1
140 :  do while n>0
150 :     print left$(x$,n)
160 :     n=n+q
170 :     if n=len(x$) then q=-1
180 :  loop
190 :  print
200 :  do
210 :     input "nochmal (j/n) ";a$
220 :     exit if a$="j" or a$="n"
230 :     print "falsche eingabe"
240 :  loop
250 loop until a$="n"
260 end
Listing 7. Demo-Programm für Modul 34
PDF Diesen Artikel als PDF herunterladen
Mastodon Diesen Artikel auf Mastodon teilen
← Vorheriger ArtikelNächster Artikel →