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/04/02 15:40] – volkerp | forth:fgforth:kassette [2025/07/14 10:10] (aktuell) – [Get/Put Orig. Br.] volkerp | ||
|---|---|---|---|
| Zeile 1: | Zeile 1: | ||
| ====== Kassettenarbeit ====== | ====== Kassettenarbeit ====== | ||
| + | |||
| + | FORTH83 nutzt einen Teil des Hauptspeichers als RAM-Disk, um hier Screens abzulegen. Die Adressen SOD und EOD definieren Anfang und Ende dieses Speicherbereichs. | ||
| + | |||
| + | ORIGIN + | ||
| + | -------- | ||
| + | 17H DW TOP ;oberste vom FORTH nutzbare Adresse | ||
| + | 19H DW SOD ;erste Adresse, die die RAM-Disk belegen kann | ||
| + | 1BH DW EOD ;letzte Adresse, die die RAM-Disk belegen kann | ||
| + | |||
| + | 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 99: | Zeile 111: | ||
| </ | </ | ||
| - | ===== Anpassung  | + | 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  | ||
| + | |||
| + | Kennung ' | ||
| : NEW 4E 0F JUAD C! ; \ neudef | : NEW 4E 0F JUAD C! ; \ neudef | ||
| + | |||
| + | ===== Z9001 ===== | ||
| + | |||
| + | < | ||
| + | Screen # 01 ----------------------- | ||
| + | |||
| + | 00 \ 7 Kassettenroutinen VP-08JUL90 | ||
| + | 01 | ||
| + | 02 I/O DEFINITIONS HEX | ||
| + | 03 | ||
| + | 04 0300 CONSTANT PANF | ||
| + | 05 | ||
| + | 06 001B CONSTANT DMA | ||
| + | 07 005C CONSTANT FCB DECIMAL | ||
| + | 08 FCB 15 + CONSTANT BLNR | ||
| + | 09 FCB 17 + CONSTANT AADR | ||
| + | 10 FCB 19 + CONSTANT EADR | ||
| + | 11 FCB 21 + CONSTANT SADR | ||
| + | 12 FCB 23 + CONSTANT SBY | ||
| + | 13 | ||
| + | 14 | ||
| + | 15 | ||
| + | |||
| + | Screen # 02 ----------------------- | ||
| + | |||
| + | 00 \ Systemruf  | ||
| + | 01 | ||
| + | 02 HEX CODE CBOS ( nr -- RegA f) | ||
| + | 03 0E1 C, 0C5 C, 0E5FD , 4D C, | ||
| + | 04 0CD C, 5 , 0E1FD , 0C1 C, 26 C, | ||
| + | 05 0 C, 6F C, 0E5 C, 62ED , | ||
| + | 06 0E5 C, 0C3 C, >NEXT , | ||
| + | 07 END-CODE | ||
| + | 08 | ||
| + | 09 CODE MAREK | ||
| + | 10 0C5 C, 0E5FD , | ||
| + | 11 0CD C, 0FF59 , 0CD C, 0FAE3 , | ||
| + | 12 0E1FD , 0C1 C, 0C3 C, >NEXT , | ||
| + | 13 END-CODE DECIMAL | ||
| + | 14 | ||
| + | 15 | ||
| + | |||
| + | Screen # 03 ----------------------- | ||
| + | |||
| + | 00 \ Systemroutinen  | ||
| + | 01 | ||
| + | 02 : OPENW ( -) CR 15 CBOS 2DROP ; | ||
| + | 03 : CLOSW ( -) 16 CBOS 2DROP ; | ||
| + | 04 : WRITS ( -) 21 CBOS 2DROP ; | ||
| + | 05 : OPENR ( - f) CR 13 CBOS NIP ; | ||
| + | 06 : READS ( - f1 f2) 20 CBOS ; | ||
| + | 07 | ||
| + | 08 | ||
| + | 09 : FTYP ( adr # -- ) | ||
| + | 10 3 MIN FCB 8 + SWAP CMOVE ; | ||
| + | 11 | ||
| + | 12 : FNAME ( name ( -- ) | ||
| + | 13 FCB 8 ERASE | ||
| + | 14 BL WORD COUNT 8 MIN | ||
| + | 15 FCB SWAP CMOVE ; | ||
| + | |||
| + | Screen # 04 ----------------------- | ||
| + | |||
| + | 00 \ Abspeichern 1        | ||
| + | 01 | ||
| + | 02 \ saven von AADR bis EADR | ||
| + | 03 : FILESAVE  | ||
| + | 04 EADR @ 1+ | ||
| + | 05 AADR @ DUP DMA ! - | ||
| + | 06 128 /MOD DUP | ||
| + | 07 IF SWAP 0= IF 1- THEN | ||
| + | 08 0 ?DO WRITS SPACE LOOP | ||
| + | 09 ELSE 2DROP THEN | ||
| + | 10 CLOSW SPACE ; | ||
| + | 11 | ||
| + | 12 | ||
| + | 13 | ||
| + | 14 | ||
| + | 15 | ||
| + | |||
| + | Screen # 05 ----------------------- | ||
| + | |||
| + | 00 \ Laden                | ||
| + | 01 | ||
| + | 02 : STOPKEY  | ||
| + | 03 KEY 3 = IF QUIT THEN ; | ||
| + | 04 | ||
| + | 05 : BLOCKLOAD  | ||
| + | 06 BEGIN READS | ||
| + | 07 WHILE DROP STOPKEY REPEAT ; | ||
| + | 08 | ||
| + | 09 : CLOAD ( name ( von --) | ||
| + | 10 FLUSH 128 DMA ! FNAME | ||
| + | 11 " F83" FTYP BEGIN OPENR | ||
| + | 12 WHILE STOPKEY REPEAT | ||
| + | 13 'RAM DMA ! | ||
| + | 14 BEGIN BLOCKLOAD UNTIL | ||
| + | 15 CR ." scr# " SADR ? ; | ||
| + | |||
| + | Screen # 06 ----------------------- | ||
| + | |||
| + | 00 \ Speichern  | ||
| + | 01 | ||
| + | 02 : CSAVE ( name ( von bis --) | ||
| + | 03 1+ 2DUP SWAP - SADR ! | ||
| + | 04 'RAM 1- EADR ! 'RAM AADR ! | ||
| + | 05 0 SBY C! | ||
| + | 06 FNAME " F83" FTYP | ||
| + | 07 OPENW SPACE FILESAVE ; | ||
| + | 08 ALSO FORTH DEFINITIONS | ||
| + | 09 : .FILES \ Anz. Files von Kass. | ||
| + | 10 CR BEGIN 0 36 C! | ||
| + | 11 128 DMA ! MAREK BLNR C@ | ||
| + | 12 0= IF 128 8 TYPE ASCII . | ||
| + | 13 EMIT 136 3 TYPE CR THEN | ||
| + | 14 36 C@ IF STOPKEY THEN AGAIN ; | ||
| + | 15 | ||
| + | |||
| + | Screen # 07 ----------------------- | ||
| + | |||
| + | 00 \ Vektorinit.  | ||
| + | 01 | ||
| + | 02 | ||
| + | 03 : SAVE-SYSTEM ( name ( --) | ||
| + | 04 HERE EADR ! PANF DUP AADR ! | ||
| + | 05 SADR ! 0 SBY C! | ||
| + | 06 FNAME " COM" FTYP | ||
| + | 07 OPENW SPACE FILESAVE ; | ||
| + | 08 | ||
| + | 09 ' CSAVE IS PUT | ||
| + | 10 ' CLOAD IS GET | ||
| + | 11 | ||
| + | 12 ONLY FORTH ALSO DEFINITIONS | ||
| + | 13 | ||
| + | 14 8 LIST | ||
| + | 15 | ||
| + | |||
| + | Screen # 08 ----------------------- | ||
| + | |||
| + | 00 \S GLOSSAR | ||
| + | 01 n GET fname | ||
| + | 02 Lesen File fname.F83 in RAM- | ||
| + | 03 Disk ab Screen n | ||
| + | 04 | ||
| + | 05 n1 n2 PUT fname | ||
| + | 06 Abspeichern Screens n1 bis n2 | ||
| + | 07 auf Kassette mit Namen fname | ||
| + | 08 | ||
| + | 09 SAVE-SYSTEM fname | ||
| + | 10 Abspeichern FORTH als File | ||
| + | 11 fname.COM | ||
| + | 12 | ||
| + | 13 .FILES | ||
| + | 14 Anzeige der Filenamen von Kas | ||
| + | 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 " | ||
| + | </ | ||