Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
| z9001:programmieren [2018/03/27 06:29] – [Programmerstellung am PC] volkerp | z9001:programmieren [2025/12/16 13:44] (aktuell) – [Der OS-Rahmen] volkerp | ||
|---|---|---|---|
| Zeile 66: | Zeile 66: | ||
| ==== Der OS-Rahmen ==== | ==== Der OS-Rahmen ==== | ||
| - | Damit eigene Programme vom OS aus gestartet werden können, wird ein spezieller Code benötigt, der sogenannte OS-Rahmen. Damit erscheinen Programme als transiente Kommandos im OS und können über den Programmnamen | + | Damit eigene Programme vom OS aus gestartet werden können, wird ein spezieller Code benötigt, der sogenannte OS-Rahmen. Damit erscheinen Programme als transiente Kommandos im OS und können über den Kommandoname |
| Ein OS-Rahmen muss auf einer integralen 100H-Grenze (300h ... 0BF00h) beginnen. Es können beliebig viele Kommandos in einem OS-Rahmen angegeben werden. | Ein OS-Rahmen muss auf einer integralen 100H-Grenze (300h ... 0BF00h) beginnen. Es können beliebig viele Kommandos in einem OS-Rahmen angegeben werden. | ||
| Zeile 77: | Zeile 77: | ||
| ;8 Zeichen, ggf. mit Leerzeichen auffüllen, Null-Byte | ;8 Zeichen, ggf. mit Leerzeichen auffüllen, Null-Byte | ||
| JP AUSF2 ;Sprung zur Kommandoausführung2 | JP AUSF2 ;Sprung zur Kommandoausführung2 | ||
| - | DB ' | + | DB ' |
| ... | ... | ||
| DB 0 ; | DB 0 ; | ||
| Zeile 86: | Zeile 86: | ||
| **Kommandozeile** | **Kommandozeile** | ||
| - | Die eingegebene Kommandozeile wird im Puffer CONBU abgelegt, am Ende wird ein Nullbyte angefügt. Mit GVAL werden die einzelnen Parameter nacheinander geholt, d.h. nach INTLN kopiert und in CONBU wird der Parameter durch Leerzeichen ersetzt. Nach Start des Programms ist der Programmname bereits nicht mehr in CONBU lesbar. | + | Die eingegebene Kommandozeile wird im Puffer CONBU abgelegt, am Ende wird ein Nullbyte angefügt. Mit GVAL werden die einzelnen Parameter nacheinander geholt, d.h. nach INTLN kopiert und in CONBU wird der Parameter durch Leerzeichen ersetzt. Nach Start des Programms ist der Programmname bereits nicht mehr in CONBU lesbar((steht aber noch in INTLN)). |
| **erneuter Aufruf** | **erneuter Aufruf** | ||
| Zeile 92: | Zeile 92: | ||
| Ein Warmstart kann erkannt werden, indem beim Einsprung HL auf den Einsprungswert verglichen wird (AUSF, AUSF2,..). Ist er gleich, wurde das Programm nicht von Kassette geladen (oder vom Megamodul), sondern ist bereits im Speicher abgelegt und wurde von dort gestartet (mittels Routine CPROM). | Ein Warmstart kann erkannt werden, indem beim Einsprung HL auf den Einsprungswert verglichen wird (AUSF, AUSF2,..). Ist er gleich, wurde das Programm nicht von Kassette geladen (oder vom Megamodul), sondern ist bereits im Speicher abgelegt und wurde von dort gestartet (mittels Routine CPROM). | ||
| + | **Programmende** | ||
| + | Bei Programmende wird im Fehlerfall ein gesetztes Carry-Bit und in Register A ein Fehlercode <> 0 erwartet. Das OS gibt dann eine entsprechende Fehlermeldung aus (s. Doku OS, 2.2.3. Fehlerbehandlung, | ||
| + | XOR A ; Cy=0, A=0 | ||
| + | RET | ||
| + | enden, wenn keine Fehlermeldung erfolgen soll. | ||
| + | |||
| + | Alternativen sind | ||
| + | JP 0 (WBOOT) | ||
| + | JP 0F000 (INIT) | ||
| + | LD C,0 & CALL 5 (INIT) | ||
| + | |||
| ==== Beispiele ==== | ==== Beispiele ==== | ||
| Zeile 321: | Zeile 332: | ||
| </ | </ | ||
| + | |||
| + | ==== KCC-Header ==== | ||
| + | |||
| + | Beispiel 4: KCC-Datei erstellen | ||
| + | |||
| + | Das KCC-Datei-Format (-> [[kassettenformate|]]) wird von Emulatoren und und auch beim [[.: | ||
| + | |||
| + | Man kann diesen Kopfblock mit Zusatzprogrammen wie bin2kcc.pl erzeugen oder man macht das gleich im Assembler mit und spart sich so den extra Programmaufruf. | ||
| + | |||
| + | <file z80> | ||
| + | ifdef kccheader ; | ||
| + | |||
| + | org anfang-80h | ||
| + | |||
| + | db ' | ||
| + | db ' | ||
| + | ds 5 | ||
| + | db 3 ; 3 Parameter (KC85/ | ||
| + | dw anfang ; Anfangsadresse im Speicher | ||
| + | dw ende ; Endadresse im Speicher | ||
| + | dw start ; Autostartadresse des Programms (oder 0FFFFh) | ||
| + | |||
| + | endif | ||
| + | |||
| + | org xxx | ||
| + | anfang: | ||
| + | ... | ||
| + | start: | ||
| + | ... | ||
| + | |||
| + | ende: | ||
| + | |||
| + | end start | ||
| + | </ | ||
| + | |||
| + | Die erzeugte Bin-Datei erhält die Endung .KCC und kann dann per Drag& | ||
| ===== Programmerstellung am PC ===== | ===== Programmerstellung am PC ===== | ||