Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Vorhergehende Überarbeitung | |||
— | z9001:basic_tipps [2021/05/06 14:07] (aktuell) – [BASIC-Tipps] volkerp | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
+ | ====== BASIC-Tipps ====== | ||
+ | Was so alles an Tricks mit dem BASIC möglich war (entgegen der offiziellen Dokumentation), | ||
+ | |||
+ | Das Programm startet nach dem Einlesen mit CLOAD" | ||
+ | |||
+ | 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). | ||
+ | |||
+ | 11101 = 861+10240\\ | ||
+ | 11103 = 863+10240\\ | ||
+ | 11229 = 989+10240 usw. | ||
+ | |||
+ | |||
+ | 10 CLS: | ||
+ | 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" | ||
+ | 280 PRINT" | ||
+ | 290 PRINT | ||
+ | 295 PRINT" | ||
+ | 300 PRINT | ||
+ | 310 PRINT | ||
+ | 320 PRINT" | ||
+ | 330 PRINT" | ||
+ | 340 PRINT" | ||
+ | 350 PRINT" | ||
+ | 360 PRINT" | ||
+ | 370 PRINT" | ||
+ | 380 PRINT" | ||
+ | 390 PRINT | ||
+ | 400 PRINT" | ||
+ | 500 INPUT""; | ||
+ | 510 BEEP: | ||
+ | 520 DOKE11103, | ||
+ | 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"" | ||
+ | 20 ! | ||
+ | 21 !INPUT AT(X,Y) -Funktion | ||
+ | 22 ! | ||
+ | 23 ! DOKE 112, | ||
+ | 24 ! ^ Leerzeichen noetig, erscheint nicht im Text | ||
+ | 25 ! | ||
+ | 26 !RANDOMIZE -Funktion | ||
+ | 27 ! | ||
+ | 28 ! 10 PRINT "zum Start bel. Taste druecken!": | ||
+ | 29 ! 20 I=I-1: | ||
+ | 30 ! 30 IF INKEY$="" | ||
+ | 31 ! | ||
+ | 32 !Runden einer Zahl | ||
+ | 33 ! | ||
+ | 34 ! DEF FNRS(X)=INT(10^S*X+.5)/ | ||
+ | 35 ! | ||
+ | 36 !rechtsbuendige Ausgabe von Zahlen | ||
+ | 37 ! | ||
+ | 38 ! DEF FNP(X)=8-LEN(STR$(INT(X))) | ||
+ | 39 ! PRINT TAB(20+FNP(Z)); | ||
+ | 40 ! | ||
+ | 41 !Programmschutz fuer LIST/ | ||
+ | 42 ! | ||
+ | 43 ! POKE 11101, | ||
+ | 44 ! | ||
+ | 45 ! DOKE 11101,0 bzw. POKE 11102, | ||
+ | 46 ! | ||
+ | 47 ! LINES 0 LIST-Tod | ||
+ | 48 ! | ||
+ | 49 !-Abfrage bei Bildschirmende innerhalb FOR...NEXT | ||
+ | 50 ! | ||
+ | 51 ! IF PEEK(113)> | ||
+ | 52 ! | ||
+ | 53 !Cursorzeichen veraendern | ||
+ | 54 ! | ||
+ | 55 ! POKE 10846,neuer Cursor | ||
+ | 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, | ||
+ | 65 ! 10 hier beginnt das Programm | ||
+ | 66 ! * POKE 8291,29: CSAVE" | ||
+ | 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" | ||
+ | 103 DA=128 | ||
+ | 104 DOKE45, | ||
+ | 105 CALL*1FC | ||
+ | 106 IF PEEK(123)& | ||
+ | 107 FOR I=DA+3 TO DA+10 | ||
+ | 108 PRINT CHR$(PEEK(I));: | ||
+ | 109 I=PEEK(DA)-211 | ||
+ | 110 IF I=0 OR I=4 THEN PRINT " | ||
+ | 111 IF I=1 OR I=5 THEN PRINT " | ||
+ | 112 IF I=2 OR I=6 THEN PRINT " | ||
+ | 113 IF I>3 THEN PRINT " G"; :ELSE PRINT " | ||
+ | 114 PRINT DEEK(DA+11) | ||
+ | 115 GOTO104 | ||
+ | 116 ! | ||
+ | 117 ! " | ||
+ | 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. : | ||
+ | 207 ! Strings | ||
+ | 208 ! Funktionsnamen haben vorm Namen ein " | ||
+ | 209 ! | ||
+ | 210 ! Felder | ||
+ | 211 ! | ||
+ | 212 ! | ||
+ | 60000 VI=0: | ||
+ | 60010 PRINTVI; | ||
+ | 60020 PRINTTAB(8)CHR$(127ANDPEEK(VI+1)); | ||
+ | 60030 PRINTCHR$(SGN(128ANDPEEK(VI))*36); | ||
+ | 60040 IFPEEK(VI)& | ||
+ | 60050 PRINTTAB(12)DEEK(VI+4); | ||
+ | 60060 RESTORE60100: | ||
+ | 60070 POKEVJ, | ||
+ | 60080 POKEVJ+1, | ||
+ | 60090 IFPEEK(VI)> | ||
+ | 60100 PRINTA $:! | ||
+ | 60110 NEXT | ||
+ | 60115 IFDEEK(11227)=DEEK(11225)THEN60190 | ||
+ | 60120 PRINT: | ||
+ | 60130 PRINTVI; | ||
+ | 60140 PRINTCHR$(SGN(128ANDPEEK(VI))*36); | ||
+ | 60150 PRINT" | ||
+ | 60160 PRINTDEEK(2*VJ+VI+5)-1; | ||
+ | 60170 PRINTCHR$(8);" | ||
+ | 60180 VI=VI+DEEK(VI+2)+3: | ||
+ | 60190 PRINTVI: | ||
+ | 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, | ||
+ | 60260 !ordentlich abarbeitet. | ||
+ | 60270 ! | ||
+ | 60280 !Volker Pohlers, Lomonossowallee 41/81, Greifswald, 2200 | ||
+ | |||
+ | ====== Programme mit MC-Vorspann ====== | ||
+ | |||
+ | Mein Hinweis zu http:// | ||
+ | |||
+ | Wenn der Basic-Zeiger 863 manipuliert wurde, beginnt das BASIC-Programm nicht auf Adresse 401h, sondern irgendwo dahinter. Der Speicherplatz dazwischen steht dann für Maschinencode zur Verfügung. Beim Speichern mit CSAVE wird immer ab 401h abgespeichert. | ||
+ | |||
+ | Diesen Freiraum bekommt man wie folgt weg: | ||
+ | |||
+ | < | ||
+ | PRINT DEEK(863) --> wenn <> 1025, dann wurde ein MC-Teil davor aktiviert. | ||
+ | |||
+ | DOKE 1025, DEEK(863) Zeilenende 1. Zeile auf Ende des Bereichs setzen | ||
+ | DOKE 1027, | ||
+ | DOKE (863), 1025 Basic-Zeiger rücksetzen | ||
+ | 1 < | ||
+ | fertig! | ||
+ | </ | ||
+ | |||
+ | Achtung: Im JKCEMU geht das nur bei Nutzung der Kassettenrekorderemulation. Beim direkten Laden von TAP, SSS, ZBS werden nicht alle BASIC-Pointer korrekt gesetzt! | ||
+ | |||
+ | Achtung2: 1025 gilt nur im ROM-BASIC! |