Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
| forth:fgforth:kassette [2013/05/01 14:17] – [Anpassung] volkerp | forth:fgforth:kassette [2025/07/14 10:10] (aktuell) – [Get/Put Orig. Br.] volkerp | ||
|---|---|---|---|
| Zeile 1: | Zeile 1: | ||
| ====== Kassettenarbeit ====== | ====== Kassettenarbeit ====== | ||
| - | F83 nutzt einen Teil des Hauptspeichers als RAM-Disk, um hier Screens abzulegen. Die Adressen SOD und EOD definieren Anfang und Ende dieses Speicherbereichs. | + | FORTH83  | 
| ORIGIN + | ORIGIN + | ||
| Zeile 11: | Zeile 11: | ||
| Die Routinen zum Laden bzw. Abspeichern der RAM-Disk auf Kassette müssen für jeden Rechner speziell entwickelt werden. Selbstverständlich sollten dazu die Routinen benutzt werden, die das jeweilige Rechner-Betriebsprogramm dem Nutzer bietet. Aus Vereinheitlichungsgruenden werden dafür die Befehle PUT und GET empfohlen, die als nicht initialisierte Vektoren schon im Wörterbuch enthalten sind. Die entsprechenden Routinen sollten ins Vokabular I/O gelegt werden. | Die Routinen zum Laden bzw. Abspeichern der RAM-Disk auf Kassette müssen für jeden Rechner speziell entwickelt werden. Selbstverständlich sollten dazu die Routinen benutzt werden, die das jeweilige Rechner-Betriebsprogramm dem Nutzer bietet. Aus Vereinheitlichungsgruenden werden dafür die Befehle PUT und GET empfohlen, die als nicht initialisierte Vektoren schon im Wörterbuch enthalten sind. Die entsprechenden Routinen sollten ins Vokabular I/O gelegt werden. | ||
| + | Mit **1 GET** wird das Laden ab Screen 1 (Block 1) gestartet. Der Filename wird abgefragt. Am Ende des Ladens wird die Nummer n des letzten Screens angezeigt. Falls nicht mit --> programmiert wurde (der Normalfall), | ||
| ===== Glossar der Kassettenbedienworte ===== | ===== Glossar der Kassettenbedienworte ===== | ||
| Zeile 108: | Zeile 109: | ||
| 14 ' RAM-LOAD IS GET ( n --) | 14 ' RAM-LOAD IS GET ( n --) | ||
| 15 ' RAM-SAVE IS PUT ( von bis --) | 15 ' RAM-SAVE IS PUT ( von bis --) | ||
| + | </ | ||
| + | |||
| + | JUMP macht einen allg. [[z1013: | ||
| + | Es werden die Einsprungadressen aus dem [[z1013: | ||
| + | |||
| + | Mit JUAD wird das Wort JUMP modifiziert. NEW und OLD patchen das Wiederholungsflag; | ||
| + | |||
| + | < | ||
| + | JUMP is | ||
| + | 2A6A: PUSH AF | ||
| + | 2A6B: PUSH BC | ||
| + | 2A6C: PUSH DE | ||
| + | 2A6D: PUSH HL | ||
| + | 2A6E: PUSH IX | ||
| + | 2A70: PUSH IY | ||
| + | 2A72:    LD    IY, | ||
| + | 2A76:    LD    A,4E       ; offs 0Fh A=0 ohne, A=4EH mit Typ und Namensabfrage, | ||
| + | 2A78: CALL FFF4 ; offs 11h FFF1H - JMP LORUF, FFF4H - JMP SARUF | ||
| + | 2A7B: POP IY | ||
| + | 2A7D: POP IX | ||
| + | 2A7F: POP HL | ||
| + | 2A80: POP DE | ||
| + | 2A81: POP BC | ||
| + | 2A82: POP AF | ||
| + | 2A83: JP 0422 | ||
| + | 2A86: END | ||
| + | |||
| + | nb: Aus Forth-Sicht müsste man nicht alle Register retten; BC und IY reichen. | ||
| + | |||
| </ | </ | ||
| ==== Anpassung ==== | ==== Anpassung ==== | ||
| - | Kennbuchstabe  | + | Kennung  | 
| : NEW 4E 0F JUAD C! ; \ neudef | : NEW 4E 0F JUAD C! ; \ neudef | ||
| Zeile 118: | Zeile 148: | ||
| ===== Z9001 ===== | ===== Z9001 ===== | ||
| - | <code> | + | <file> | 
| Screen # 01 ----------------------- | Screen # 01 ----------------------- | ||
| Zeile 270: | Zeile 300: | ||
| 14 Anzeige der Filenamen von Kas | 14 Anzeige der Filenamen von Kas | ||
| 15    sette, Abbruch mit > | 15    sette, Abbruch mit > | ||
| + | </ | ||
| + | |||
| + | **MC Routinen dürfen BC (IP) und IY (RP) nicht verändern!** | ||
| + | |||
| + | < | ||
| + | CBOS: Aufruf Sprungverteiler, | ||
| + | 2A62  E1                | ||
| + | 2A63  C5                | ||
| + | 2A64  FD E5            PUSH    IY       | ||
| + | 2A66  4D                | ||
| + | 2A67  CD 05 00          | ||
| + | 2A6A  FD E1            POP      | ||
| + | 2A6C  C1                | ||
| + | 2A6D 26 00 LD H,00H | ||
| + | 2A6F  6F                | ||
| + | 2A70  E5                | ||
| + | 2A71  ED 62            SBC      | ||
| + | 2A73  E5                | ||
| + | 2A74  C3 22 04          | ||
| + | |||
| + | MAREK: Aufruf OS-Systemfunktion Lesen eines bel. Blocks von Kassette | ||
| + | 2A81  C5                | ||
| + | 2A82  FD E5            PUSH    IY       | ||
| + | 2A84  CD 59 FF          | ||
| + | 2A87  CD E3 FA          | ||
| + | 2A8A  FD E1            POP      | ||
| + | 2A8C  C1                | ||
| + | 2A8D  C3 22 04          | ||
| </ | </ | ||
| + | ===== Beispiel ===== | ||
| + | |||
| + | Screens zählen ab 1. Je nach Größe der RAM-Disk unterscheidet sich die Maximal-Zahl an Screens. Ein Screen umfasst 512 Byte ( 1/2 KByte). z.B. Z9001 RAM-Disk Speicher 6000h-BFFFh entspricht 48 Screens (1..48) | ||
| + | |||
| + | < | ||
| + | I/O | ||
| + | HEX SOD @ . 6000 ok | ||
| + | EOD @ U. BFFF ok | ||
| + | DECIMAL MAX# . 47 ok ( EOD = C000h würde hier 48 bringen) | ||
| + | </ | ||
| + | |||
| + | < | ||
| + | 1 EDIT | ||
| + | 	Screen editieren, Kommandos s. https:// | ||
| + | Ende mit CTR C - sichert Screen im RAM und verlaesst Editor | ||
| + | 1 LOAD | ||
| + | übersetzt Screen in Forth-Wörterbuch | ||
| + | |||
| + | 1 1 PUT TEST1 | ||
| + | 	sichert Screen 1 bis 1 auf Massenspeicher als Datei " | ||
| + | 1 GET TEST1 | ||
| + | 	lädt Datei " | ||
| + | </ | ||