home *** CD-ROM | disk | FTP | other *** search
/ Commodore Disc 53 / Commodore_Disc_53_19xx_-_de.d64 / lektion9 < prev    next >
Text File  |  2022-10-26  |  7KB  |  211 lines

  1. Lektion 9
  2.  
  3. Systemkonstanten und Routinen
  4.  
  5. Damit unterschiedliche Adressen beim C64 und C128 kein Problem darstellen, gibt es einen Befehl, der fuer Gemeinsamkeit sorgt. Eine Nummer, gefolgt vom Befehl syscon, liefert folgende Werte:
  6.  
  7. 0 syscon : 64 beim C64, 128 beim C128
  8. 1 syscon : Anfang des freien Speichers
  9. 2 syscon : Ende des freien Speichers
  10. 3 syscon : Adresse fuer Zeichenzahl im
  11.            Tastaturpuffer
  12. 4 syscon : Adresse des Tastaturpuffers
  13. 5 syscon : Adresse fuer Zeichenfarbe
  14.  
  15. Was der CP-Programmierer au{CBM-V}er den CP-Befehlen braucht, sind fertige Routinen f{CBM-X}r Stringbearbeitung und Ein- und Ausgaben. Die Routinensammlung cprout enth{CBM-F}lt sozusagen die Grundausstattung:
  16.  
  17.  
  18. Stringfunktionen
  19.  
  20. Strings sind eine durch ein Nullbyte abgeschlossene Zeichenkette. Zur Stringbearbeitung dienen vier grundlegende Funktionen len, $<, inchar und val.
  21.  
  22. len
  23. ---
  24. Die Funktion len liefert die Laenge eines String:
  25.  
  26.  "abc" len
  27.  
  28. Das Ergebnis waere hier drei.
  29.  
  30. $<
  31. --
  32.  
  33. Diese Funktion kopiert Strings. Sie faellt etwas aus dem Rahmen, da sie wie ein Operator mit zwei Parametern in den Registern NR und HR arbeitet:
  34.  
  35.  ziel quelle $<
  36.  
  37. Der Quellstring wird an die Zieladresse kopiert. Es heisst aufzupassen, dass dort ausreichend Platz ist. Die Funktion liefert das mit Null markierte Ende des neuen Strings als Ergebnis. Dieses kann sogleich benutzt werden um mehrere Strings zu einem einzigen zu vereinen:
  38.  
  39.  ziel string1 $< string2 $< string3 $<
  40.  
  41. Soll an einen bereits bestehenden String etwas angefuegt werden, geschieht dieses durch:
  42.  
  43.  ziel ( len ) + zusatz $<
  44.  
  45. inchar
  46. ------
  47. Hiermit laesst sich die Position eines Zeichens in einem String bestimmen:
  48.  
  49.   ( "String" , 'n' inchar )
  50.  
  51. Ist das Zeichen dort nicht vorhanden, so ist das Ergebnis Null. Anderenfalls erhaelt man die Position in der Zeichenkette. Hier waere das Ergebnis fuenf. Um diesen Wert zum Zugriff auf die Position im String zu verwenden, muss er um eins verringert und zur Stringadresse addiert werden:
  52.  
  53.   str ( , 'a' inchar ) nif nix + 1 -
  54.  
  55. val
  56. ---
  57. Es wird der Zahlenwert einer in Form von Ziffernzeichen vorliegenden Zeichenkette errechnet. Vorangestellte Leerzeichen sind erlaubt. Ein nachfolgendes Leerzeichen sowie ein Nullbyte signalisieren das Ende:
  58.  
  59.  " 12 Disketten " val
  60.  
  61. Das Ergebnis ist hier zwoelf. Benoetigt wird val besonders in Verbindung mit Zahleneingaben.
  62.  
  63.  
  64. scan
  65. ----
  66. Scan durchsucht einen Speicherbereich von an bis en nach einer Zeichenkette zk der L{CBM-F}nge zl. Das Ergebnis einer erfolglosen Suche ist Null, eine erfolgreiche Suche liefert die gefundene Adresse:
  67.  
  68.   ( an , en , zk , zl scan )
  69.  
  70.  
  71. Bildschirm, Cursor und Farbe
  72.  
  73. modswap
  74. -------
  75. Beim C64 ohne Wirkung, schaltet modswap beim C128 zwischen 40- und 80-Zeichenmodus um.
  76.  
  77. color
  78. -----
  79. Einstellen von Zeichen-, Hintergrund- und Rahmenfarbe fuer den 40-Zeichen-Bildschirm:
  80.  
  81.  ( zf , hf , rf color )
  82.  
  83. Es sind Werte von eins bis 16 moeglich.
  84. Die Angaben fuer hf und rf koennen entfallen. Also auch ( zf , hf color ) und ( zf color ).
  85.  
  86. at
  87. --
  88. Cursorpositionierung: ( y , x at )
  89.  
  90. Der Cursor wird in Zeile y und Spalte x positioniert.
  91.  
  92. posxy
  93. -----
  94. Der Befehl posxy liefert die Spaltenposition. Die Zeilenposition wird durch NR uebergeben und kann somit durch posxy swap erhalten werden.
  95.  
  96. tab
  97. ---
  98. Der Befehl x tab positioniert den Cursor in der Spalte x der aktuellen Zeile.
  99.  
  100. Ausgabefunktionen
  101.  
  102. putc
  103. ----
  104. Die Funktion putc gibt ein Zeichen auf das aktuelle Ausgabegeraet aus. Der Aufruf erfolgt in der Form:
  105.  
  106.  'a' putc
  107.  
  108. putl
  109. ----
  110. Ein ganzer String wird ausgegeben, etwa:
  111.  "Hallo" putl
  112.  
  113. putn
  114. ----
  115. Putn gibt eine Zahl in dezimaler Form aus:
  116.  
  117.   1000 putn
  118.   60 34 + putn
  119.  
  120. print
  121. -----
  122. Eine ganze Liste von Strings laesst sich ausgeben:
  123.  
  124.   ( str1 , str2 , str3 print )
  125.  
  126.  
  127. fprint
  128. ------
  129. Dezimale Zahlenwerte koennen mit Hilfe des Steuerzeichens % bequem in die Stringausgabe eingebunden werden:
  130.  
  131. ( "Summe % + % = %" , 5 , 3 , + fprint )
  132. Die Zahlenwerte oder rechnerischen Ausdruecke werden im Anschluss an den String einfach der Reihenfolge nach als Parameter uebergeben.
  133.  
  134.  
  135. Eingabefunktionen
  136.  
  137.  
  138. getc
  139. ----
  140. Die Funktion getc liest ein Zeichen vom aktuellen Eingabegeraet ein.
  141.  
  142. key
  143. ---
  144. Wie getc, nur wird auf ein Zeichen ungleich Null gewartet.
  145.  
  146. getl
  147. ----
  148. Getl nimmt eine ganze Eingabezeile an:
  149.  
  150.  ( ziel , limit getl)
  151.  
  152. Vergleichbar ist getl mit dem BASIC-Befehl input. Anzugeben ist ausser der Zieladresse die erlaubte Anzahl von Zeichen. Dass ausser den gelesenen Zeichen eine zusaetzliche abschliessende Stringendemarkierung geschrieben wird, gilt es zu beruecksichtigen. Wenn also Platz fuer acht Zeichen ist, darf als Limit hoechstens sieben gewaehlt werden. Als Ergebnis liefert getl die Stringendeadresse, sodass an die Eingabe gleich noch etwas angehaengt werden kann, etwa:
  153.  
  154.  ( file , 16 getl ) ",s,w" $<
  155.  
  156. Sollte die Eingabe laenger sein, als durch limit angegeben ist, wird dennoch bis zum abschliessenden Return weitergelesen, damit der naechste Datensatz fuer den naechsten Zugriff bereitsteht.
  157.  
  158. getn
  159. ----
  160. Zum Einlesen von Dezimalzahlen und Umwandeln in Zahlenwerte dient getn ohne weitere Parameter. Damit eruebrigt sich:
  161.  
  162.   string ( , 7 getl ) swap val
  163.  
  164.  
  165. Externe Geraete
  166.  
  167. open
  168. ----
  169. Damit wird eine logische Datei geoeffnet. Die Syntax ist:
  170.  
  171.  ( lfn , ga , sa , stringliste open )
  172.  
  173. Genau wie in BASIC kann alles uebrige ausser der logischen Filenummer und der Geraeteadresse entfallen, etwa:
  174.  
  175.  ( 4 , 4 open )
  176.  
  177. Es koennen mehrere Teilstrings durch Komma getrennt angegeben werden:
  178.  
  179.  ( 8 , 8 , 8 , filename , ",s,w" open )
  180.  
  181. close
  182. -----
  183. Der close-Befehl dient zum Schliessen einer logischen Datei:
  184.  
  185.   8 close
  186.  
  187. Das ist auch fuer den BASIC-Programmierer sicher nichts neues.
  188.  
  189. Kanalbefehle
  190. ------------
  191. In BASIC ist das Oeffnen und Schliessen der Kanaele bereits in den entsprechenten Befehlen (print#8,a$) enthalten. Dies ist auch mit ein Grund, weshalb etwa get#8,a$ so langsam ist. In CP oeffnen und schliessen dagegen Sie die Kanaele. Hierfuer dienen die Befehle #, #o und #i.
  192.  
  193. Der Befehl # schliesst die Kanaele und waehlt Bildschirm und Tastatur als Standardgeraete.
  194.  
  195. Der Befehl #o oeffnet einen Ausgabbekanal. Anzugeben ist vorher die Logische Filenummer, also etwa:
  196.  
  197.  4 #o
  198.  
  199. Alle Ausgaben werden im Anschluss auf die entsprechende Datei umgelenkt, bis die Datei geschlossen wird, oder andere Kanaele eingestellt werden.
  200.  
  201. Der Befehl #i oeffnet einen Eingabekanal, etwa:
  202.  
  203.  8 #i
  204.  
  205. Hier erfolgen im Anschluss alle Eingaben von der entsprechenden Datei.
  206.  
  207. Die Befehle close, #i und #o enthalten als erstes den Befehl #, sodass kein Datensalat auf dem seriellen Bus enstehen kann.
  208.  
  209. stat
  210. ----
  211. Liefert nach IO-Operationen den Inhalt der auch in BASIC bekannten Statusvariablen ST.