Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.


z9001:basic_tipps [2010/07/17 16:48] – Externe Bearbeitung 127.0.0.1
Zeile 1: Zeile 1:
-====== basic_tipps.htm ====== 
- 
-Was so alles an Tricks mit dem BASIC möglich war (entgegen der offiziellen Dokumentation), demonstriert vielleicht recht gut folgendes {{z9001/basictips.zip|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 mußte. 
- 
-Als Mini-Programme eingelagert sind Routinen zum Auflisten von Kassetteninhalten (CLIST) und ein Debug-Zusatz zum Auflisten aller Variablen. 
- 
-     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));          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,  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 
  
  • z9001/basic_tipps.txt
  • Zuletzt geändert: 2021/05/06 14:07
  • von volkerp