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 " | ||
+ | </ |