Dies ist eine alte Version des Dokuments!
BASIC-Tipps
Was so alles an Tricks mit dem BASIC möglich war (entgegen der offiziellen Dokumentation), demonstriert vielleicht recht gut folgendes BASIC-Programm (in einer Z1013-Version):
Das Programm startet nach dem Einlesen mit CLOAD„TIPS“ automatisch, es wird ein Startbildschirm angezeigt, nach Druck auf ENTER wird das Programm aufgelistet. Der Startbildschirm erscheint nicht im Listing: Durch die Anweisung in Zeile 520 wird der erste Teil des Programms „unsichtbar“. Im zweiten Teil ist dadurch sogar eine Neunummerierung der Zeilen möglich! Dieser Platz vor dem eigentlichen Programm eignete sich auch wunderbar für Maschinencode, der auch Nullbytes enthalten durfte und nicht erst umständlich aus DATA-Zeilen mittels POKE erstellt werden musste.
Als Mini-Programme eingelagert sind Routinen zum Auflisten von Kassetteninhalten (CLIST) und ein Debug-Zusatz zum Auflisten aller Variablen.
Beim ROM-BASIC muss man 10240 von den Speicherzellen abziehen (ROM-BASIC-Systemvariablen 300h-400h, RAM-BASIC 2B00h-2C00h).
10 CLS:POKE8291,29
100 PRINT
110 PRINT
120 PRINT" .... ..... ..... . ..... "
130 PRINT" . . . . . . . "
140 PRINT" . . . . . . . "
150 PRINT" ..... ..... ..... . . "
160 PRINT" . . . . . . . "
170 PRINT" .. . .. . .. . .. .. "
180 PRINT" ..... .. . ..... .. ..... "
190 PRINT
200 PRINT
210 PRINT" .... ....... "
220 PRINT" . .... .. .. ... .. . . "
230 PRINT" ..... .. .. .......... "
240 PRINT" .. "
250 PRINT
260 PRINT
270 PRINT" II. Z1013-Tagung der DDR "
280 PRINT" DRESDEN Februar 1988 "
290 PRINT
295 PRINT" geaendert 23.06.1990 "
300 PRINT
310 PRINT
320 PRINT"................................";
330 PRINT". V.Pohlers .";
340 PRINT". . ..... . .... Lomonossow-.";
350 PRINT". . ..... .... Allee 41/81.";
360 PRINT". ..soft .... Greifswald .";
370 PRINT". 2200 .";
380 PRINT"................................";
390 PRINT
400 PRINT" ";
500 INPUT"";A$
510 BEEP:CLS:LINES1:WIDTH0:RESTORE520
520 DOKE11103,DEEK(DEEK(11229)+1):LIST:END
10 !HC-BASIC TIPS+KNIFFE
11 !
12 !V.Pohlers, Lomonossowallee 41/81, Greifswald, 2200
13 !fuer die zweite Z1013-Tagung Dresden Febr. 1988
14 !
15 !
16 !
17 !Programmname fuer CSAVE/CLOAD in Stringvariable
18 !
19 ! CSAVE""+A$
20 !
21 !INPUT AT(X,Y) -Funktion
22 !
23 ! DOKE 112,256*X+Y:INPUT" text".;T$
24 ! ^ Leerzeichen noetig, erscheint nicht im Text
25 !
26 !RANDOMIZE -Funktion
27 !
28 ! 10 PRINT "zum Start bel. Taste druecken!":I=0
29 ! 20 I=I-1:A=RND(I)
30 ! 30 IF INKEY$="" GOTO 20
31 !
32 !Runden einer Zahl
33 !
34 ! DEF FNRS(X)=INT(10^S*X+.5)/10^S auf S Nachkommastellen runden
35 !
36 !rechtsbuendige Ausgabe von Zahlen
37 !
38 ! DEF FNP(X)=8-LEN(STR$(INT(X)))
39 ! PRINT TAB(20+FNP(Z));Z Ausgabe Dezimalpunkt an Position 28
40 !
41 !Programmschutz fuer LIST/CSAVE/EDIT
42 !
43 ! POKE 11101,1:CSAVE"pgm" Abspeichern, bei erneutem Einlesen
44 ! Progamm geschuetzt
45 ! DOKE 11101,0 bzw. POKE 11102,0 Aufheben Schutz
46 !
47 ! LINES 0 LIST-Tod
48 !
49 !-Abfrage bei Bildschirmende innerhalb FOR...NEXT
50 !
51 ! IF PEEK(113)>31 THEN PRINT TAB(22) "" :INPUT"";ET$:CLS
52 !
53 !Cursorzeichen veraendern
54 !
55 ! POKE 10846,neuer Cursor bei HC-BASIC H 392
56 !
57 !BASIC-RAM-Ende bei Neustart bis max. 0EBFFH
58 !
59 ! DOKE 834,-5121
60 !
61 !selbststartende BASIC-Programme
62 !
63 ! * vor Programm schreiben
64 ! 0 RESTORE 10: DOKE 11103,DEEK(11229)+1: RUN
65 ! 10 hier beginnt das Programm
66 ! * POKE 8291,29: CSAVE"name"
67 ! * bei erneutem Einlesen mit CLOAD Selbststart
68 ! Zeile 0 erscheint nicht bei LIST usw. !
69 !
100 !CLIST fuer HC-Routinen-gespeicherte BASIC-Programme
101 !
102 PRINT"CLIST":PRINT:PRINT
103 DA=128
104 DOKE45,DA:POKE124,1
105 CALL*1FC
106 IF PEEK(123)<>1 THEN105
107 FOR I=DA+3 TO DA+10
108 PRINT CHR$(PEEK(I));:NEXT
109 I=PEEK(DA)-211
110 IF I=0 OR I=4 THEN PRINT " Progr. ";
111 IF I=1 OR I=5 THEN PRINT " Datei ";
112 IF I=2 OR I=6 THEN PRINT " ASCII ";
113 IF I>3 THEN PRINT " G"; :ELSE PRINT " ";
114 PRINT DEEK(DA+11)
115 GOTO104
116 !
117 ! "G" :Pgm/Daten mittels POKE 11101,1 gschuetzt
118 !
200 !LVAR fuer HC-BASIC
201 !
202 ! * eigenes Pgm einladen, danach LVAR (60000-60190) einladen
203 ! * im eigenen Pgm an die zu ueberprufenden Stellen GOSUB60000 schreiben
204 !
205 ! LVAR listet direkt den Variablenspeicher:
206 ! einf. Var. : Adresse Name akt. Wert
207 ! Strings : Adresse Name Stringadr. Stringlaenge String
208 ! Funktionsnamen haben vorm Namen ein "f"
209 !
210 ! Felder : Adresse Name (Dimensionen ...)
211 !
212 !
60000 VI=0:VJ=0:FORVI=DEEK(11223)TODEEK(11225)-1STEP6
60010 PRINTVI;TAB(7)CHR$(SGN(128ANDPEEK(VI+1))*102);
60020 PRINTTAB(8)CHR$(127ANDPEEK(VI+1));CHR$(127ANDPEEK(VI));
60030 PRINTCHR$(SGN(128ANDPEEK(VI))*36);
60040 IFPEEK(VI)<128THENPRINTTAB(12);:GOTO60060
60050 PRINTTAB(12)DEEK(VI+4);TAB(19)PEEK(VI+2);TAB(24);
60060 RESTORE60100:VJ=DEEK(11229)+6
60070 POKEVJ,PEEK(VI+1)AND127
60080 POKEVJ+1,PEEK(VI)AND127:IFPEEK(VJ+1)=0THENPOKEVJ+1,32
60090 IFPEEK(VI)>127THENPOKEVJ+2,36:ELSEPOKEVJ+2,32
60100 PRINTA $:!
60110 NEXT
60115 IFDEEK(11227)=DEEK(11225)THEN60190
60120 PRINT:FORVI=DEEK(11225)TODEEK(11227)-1
60130 PRINTVI;TAB(8)DEEK(VI+2)-1;TAB(15)CHR$(PEEK(VI+1));CHR$(127ANDPEEK(VI));
60140 PRINTCHR$(SGN(128ANDPEEK(VI))*36);
60150 PRINT"(";:FORVJ=PEEK(VI+4)-1TO0STEP-1
60160 PRINTDEEK(2*VJ+VI+5)-1;CHR$(8);",";:NEXTVJ
60170 PRINTCHR$(8);")"
60180 VI=VI+DEEK(VI+2)+3:NEXT
60190 PRINTVI:RETURN
60200 !
60210 !die Adressen sind dezimal und beziehen sich auf das
60220 !Riesa-10k-Basic bzw. auf das HC-BASIC m1,
60230 !beim HC-BASIC H u.a. stimmen sie nicht alle !!!!!!!!!!
60240 !
60250 !bitte TIPS nur mit CSAVE abspeichern, damit es sich
60260 !ordentlich abarbeitet.
60270 !
60280 !Volker Pohlers, Lomonossowallee 41/81, Greifswald, 2200