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

  1. /* Lektion3
  2.  
  3. Sysaufrufe, Makros und Routinen
  4.  
  5. Wenn auch keine Ausgabebefehle zum Befehlssatz von CP gehoeren, sind dennoch Ausgaben moeglich. Hierfuer gibt es Systemaufrufe, die dem sys-Befehl in BASIC entsprechen. In CP ist zuerst die Adresse anzugeben, dann der Befehl sys:
  6.  
  7.  0xffd2 sys
  8.  
  9. Dieser Befehl wuerde ein Zeichen im Akku auf ein Ausgabegeraet senden. Fuer die Uebergabe von Werten an CPU-Register gibt es mit diesen korrespondierende Speicherstellen namens ac, xr und yr, ausserdem zwei Befehle, die das Carryflag beeinflussen, naemlich clc und sec.
  10.  
  11. Die Ausgabe des Zeichens 'a' koennte folgendermassen geschehen:
  12.  
  13.  'a' ac by = 0xffd2 sys
  14.  
  15.  
  16. Makros
  17.  
  18. Eine Menge Schreibarbeit, um einige Zeichen auszugeben, koennte man meinen. Doch gibt es einen Befehl, der Schreibarbeit spart:
  19.  
  20.  def .. ac by = 0xffd2 sys;
  21.  
  22. Das Wort def vereinbart eine Abkuerzung, ein Makro. Dem Befehl def folgen der Makroname, sodann die Befehle, fuer die das Makro stehen soll. Die Vereinbarung wird mit einem Strichpunkt, der ausnahmsweise unmittelbar dem letzten Befehl folgen darf, abgeschlossen. Ein Makro darf uebrigens keine Makronamen sonst mehr enthalten.
  23.  
  24. Wir koennten ein Zeichen so ausgeben:
  25.  
  26.   'a' ..
  27.  
  28. Dies sieht zwar kurz aus. Im uebersetzten Programm wird der Code aber so lang, als wenn wir die Befehlsfolge ausgeschrieben haetten.
  29.  
  30. Funktionen
  31.  
  32. Fuer einen kurzen Programmcode sorgen Unterprogramme, die in CP Funktionen heissen. Sie werden vereinbart durch die Befehle void, int oder char. Welchen Befehl Sie verwenden, bleibt voellig Ihnen ueberlassen. Normalerweise wuerde man int oder char fuer Funktionen verwenden, die Werte liefern, anderenfalls void:
  33.  
  34. void .( )
  35. begin
  36.  ac by = 0xffd2 sys
  37. bend
  38.  
  39. Ein Zeichen kann daraufhin von einer Funktion weiter hinten im Programmtext oder von main ausgegeben werden durch:
  40.  
  41.  'a' .
  42.  
  43. Hier wird dann vom Compiler nur der Funktionsaufruf uebersetzt. Funktionen duerfen Makronamen und die Namen anderer Funktionen enthalten, sofern diese bereits vorher definiert sind. Die Vereinbarung einer Funktion erinnert an die Vereinbarung von main(), nur dass dort der Vereinbarungsbefehl wegfaellt. Ausserdem ist zu beachten, dass zwischen den Klammern bei einer Funktionsvereinbarung mindestens ein Leerzeichen zu stehen hat, anders als bei main(). Funktionen koennen uebrigens mit dem Befehl return vorzeitig beendet werden. Der Befehl end fuehrt zum vorzeitigen Programmabbruch. Das Hauptprogramm main() darf nur mit end vorzeitig beendet werden.
  44.  
  45. Programmbeispiel
  46. */
  47.  
  48. def .. ac by = 0xffd2 sys;
  49.  
  50. void .( )
  51. begin
  52.   ..
  53. bend
  54.  
  55. main()
  56. begin
  57.   'H' .. 'a' .. 'l' .. 'l' .. 'o' ..
  58.  ' ' . 'U' . 's' . 'e' . 'r' .
  59. bend
  60.  
  61. /* Wie Sie sehen, braucht die Befehlsfolge in der Funktion nicht ausgeschrieben zu werden, da bereits hierfuer ein Makro existiert. Weiter mit lektion4 */
  62.