Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
| z1013:software:sprungverteiler [2011/09/15 14:52] – angelegt volkerp | z1013:software:sprungverteiler [2025/07/14 10:21] (aktuell) – [Anmerkungen] volkerp | ||
|---|---|---|---|
| Zeile 1: | Zeile 1: | ||
| ====== Sprungverteiler ====== | ====== Sprungverteiler ====== | ||
| + | Der Sprungverteiler ist kein Programm | ||
| + | im eigentliche Sinne. Er wird installiert, | ||
| + | um Standard-Routinen (z.B. Headersave, | ||
| + | Druckertreiber, | ||
| + | Spielhebelabfragen) von Anwenderprogrammen (z.B.KC-BASIC+, | ||
| + | u. a.) zu erreichen, gleich, wo die jeweilige Routine im Speicher steht. Der | ||
| + | Sprungverteiler ist im Speicherbereich | ||
| + | FFB7H bis FFFFH einzutragen. In | ||
| + | FFB7H steht nur ein Return (C9). | ||
| + | Voraussetzung für die Nutzung des | ||
| + | Sprungverteilers ist natürlich ein bestückter Speicher (RAM oder ROM) im o. g. | ||
| + | Bereich. | ||
| + | |||
| + | Ein Anwendungsbeispiel soll die Einbindung des Sprungverteilers illustrieren: | ||
| + | soll mit dem Microword ein Text von der | ||
| + | Kassette eingelesen werde. Mit „R" ruft | ||
| + | man LORUF des Headersave über den | ||
| + | Sprungverteiler auf (Adr.: FFF1H): Im | ||
| + | „Brosig" | ||
| + | FAACH (C3 AC FA). Kommt das Headersave auf E000 bis E3FFH zum Einsatz, ist auf FFF1H ein JMP E000H (C3 | ||
| + | 00 E0) einzutragen. Microword findet | ||
| + | LORUF in beiden Fällen ohne Änderung. | ||
| + | |||
| + | Wer den Sprungverteiler nutzen will, | ||
| + | muß sich diesen in den RAM eintragen | ||
| + | oder beim 4-KByte-Monitor in den | ||
| + | EPROM brennen. Nicht genutzte Routinen erhalten ein JMP FFB7H (C3 B7 | ||
| + | FF), also einen Rücksprung in das aufrufende Programm. Mit diesen Hinweisen | ||
| + | sollte es möglich sein, den in [1] ausführlich erläuterten Sprungverteiler praktisch | ||
| + | zu nutzen. (K.-J. Hofmann) | ||
| + | |||
| + | |||
| + | **DIREKTANSPRÜNGE**: | ||
| + | 16-K), kann sich auch die Aufruf-Adressen der Standard-Routinen (z.B. | ||
| + | LORUF/SARUF des HEADERSAVE) direkt eintragen. In allen Beschreibungen stehen die | ||
| + | jeweiligen Adressen, wo diese Sprünge eingetragen werden. Hierbei bleiben ein | ||
| + | eingetragenes CDH (CALL) oder C3H (JMP) stehen, es kommt der niederwertige, | ||
| + | der höherwertige Teil der Rufadressen. Die Rufadressen stehen ebenfalls immer in | ||
| + | den Beschreibungen zu diesen Standard-Programmen. Es ist deshalb immer sinnvoll, | ||
| + | sich alle Beschreibungen gründlich durch zu lesen. | ||
| + | |||
| + | |||
| + | s.a. [1] Lühne, V.: Sprungverteiler für Z 1013-Betriebssystemerweiterungen, | ||
| + | |||
| + | ===== Beschreibung ===== | ||
| + | |||
| + | |||
| + | ******************************************************************* | ||
| + | | ||
| + | ******************************************************************* | ||
| + | |||
| + | |||
| + | Der Zusatzsprungverteiler wurde entsprechend einer Einigung innerhalb der | ||
| + | Interessengemeinschaft Heimcomputer des IZ an der TU Dresden folgendermaßen | ||
| + | festgelegt: | ||
| + | |||
| + | Beginnt auf Adresse | ||
| + | |||
| + | FFFFH | ||
| + | |||
| + | abwärtsführend: | ||
| + | |||
| + | |||
| + | **FFFDH - JMP INKEY** | ||
| + | holt ein Zeichen von Tastatur in den Akku; | ||
| + | kommt beim 2. Aufruf nur zurück, wenn Taste | ||
| + | zwischendurch losgelassen wurde | ||
| + | |||
| + | |||
| + | **FFFAH - JMP POLL** | ||
| + | bringt immer ein Zeichen im Akku zurück, egal | ||
| + | ob Taste losgelassen wurde oder nicht | ||
| + | |||
| + | |||
| + | **FFF7H - JMP STAT** | ||
| + | übergibt Tastaturstatus im Akku | ||
| + | | ||
| + | A=FFH - Taste gedrückt | ||
| + | die Abfrage erfolgt ohne Rücksicht, ob die | ||
| + | Taste schon vor dem Aufruf gedrückt war und | ||
| + | hinterlässt trotz gedrückter Taste den Status | ||
| + | ' | ||
| + | evtl. nachfolgenden INKEY-Routine nicht zu | ||
| + | sperren | ||
| + | |||
| + | |||
| + | **FFF4H - JMP SARUF** | ||
| + | ruft die SAVE-Routine des Headersave | ||
| + | ! zerstört 1. Registersatz + AF' | ||
| + | Parameterübergabe: | ||
| + | Zellen 1BH - anfadr. | ||
| + | 1DH - endadr. | ||
| + | 23H - strtadr. | ||
| + | Akku 3AH - Wiederholen der SAVE-Funktion mit | ||
| + | | ||
| + | H(IY) Typvorgabe (in ASCII), sonst 0 | ||
| + | |||
| + | |||
| + | **FFF1H - JMP LORUF** | ||
| + | ruft LOAD-Routine des Headersave | ||
| + | ! zerstört 1. Registersatz + AF' | ||
| + | Parameterübergabe: | ||
| + | Zellen 1BH - neue Anfangsadresse des Files | ||
| + | sonst 0 | ||
| + | Akku | ||
| + | 4EH - mit signifikanter Kopfkontrolle | ||
| + | (Typ) + Namenabfrage | ||
| + | H(IY) 0 - Typ wird abgefragt | ||
| + | | ||
| + | L(IY) 20H - Freigabe Autostart bei COM-Files | ||
| + | | ||
| + | |||
| + | **FFEEH - JMP ZMINI** | ||
| + | Initialisierung der Z-Monitorrufe auf B0H | ||
| + | |||
| + | |||
| + | **FFEBH - JMP DRDEL** | ||
| + | setzt den logischen Druckertreiber zurück | ||
| + | |||
| + | |||
| + | **FFE8H - JMP DRAKK** | ||
| + | übergibt den Akkuinhalt an den logischen | ||
| + | Druckertreiber | ||
| + | |||
| + | |||
| + | **FFE5H - JMP BSDR** | ||
| + | druckt den Inhalt des BWS und kehrt in das | ||
| + | rufende Programm zurück | ||
| + | |||
| + | |||
| + | **FFE2H - JMP HARDC** | ||
| + | übergibt den Akkuinhalt an logischen Drucker- | ||
| + | treiber wenn ein Flag im Rechner gesetzt ist; | ||
| + | wandelt CR (0DH) in NL (1EH/ | ||
| + | ! nur verwenden, wenn Programm eine eigene | ||
| + | Bildschirmverwaltung hat | ||
| + | |||
| + | |||
| + | **FFDFH - JMP DRZEL** | ||
| + | wie DRAKK, nur das der Inhalt von 1BH übergeben | ||
| + | wird (vorgesehen, | ||
| + | |||
| + | |||
| + | **FFDCH - JMP BEEP** | ||
| + | erzeugen eines kurzen Signals | ||
| + | |||
| + | |||
| + | **FFD9H - JMP ASTA** | ||
| + | Ausgabe Akkuinhalt als ASCII-Zeichen an PUNCH | ||
| + | |||
| + | |||
| + | **FFD6H - JMP BSTA** | ||
| + | Ausgabe Akkuinhalt als Byte an PUNCH | ||
| + | |||
| + | |||
| + | **FFD3H - JMP AIN** | ||
| + | Eingabe eines ASCII-Zeichens vom LBL in den Akku | ||
| + | |||
| + | |||
| + | **FFD0H - JMP BIN** | ||
| + | Eingabe eines Bytes vom LBL in den Akku | ||
| + | |||
| + | |||
| + | **FFCDH - JMP DRINI** | ||
| + | Initialisierung des logischen Druckertreibers | ||
| + | |||
| + | |||
| + | **FFCAH - JMP ZEIDR** | ||
| + | übergibt ein Zeichen im Akku an physischen | ||
| + | Druckertreiber | ||
| + | |||
| + | |||
| + | **FFC7H - JMP BLMK** | ||
| + | Lesen eines Blocks vom Headersave | ||
| + | Parameterübergabe: | ||
| + | | ||
| + | | ||
| + | Return: | ||
| + | | ||
| + | | ||
| + | Abbruch des Lesens bei Kopfinhalt=0FFFFH | ||
| + | oder DMA > Endadr in ARG2 (1DH) | ||
| + | |||
| + | |||
| + | **FFC4H - JMP BSMK** | ||
| + | Schreiben eines Blocks im Headersave | ||
| + | Parameterübergabe: | ||
| + | | ||
| + | | ||
| + | | ||
| + | Return: | ||
| + | | ||
| + | |||
| + | |||
| + | **FFC1H - JMP SUCHK** | ||
| + | Suchen eines Kopfblocks und Übergabe des Inhalts | ||
| + | im Kopfpuffer (E0-FF), keine Auswertung | ||
| + | |||
| + | |||
| + | **FFBEH - JMP AKP** | ||
| + | Aufbereitung Kopfpuffer mit Namenabfrage | ||
| + | Parameterübergabe wie bei SARUF | ||
| + | |||
| + | |||
| + | **FFBBH - JMP GETST** | ||
| + | Abfrage der Joysticks und Übergabe des Er- | ||
| + | gebnisses in BC (B-links, | ||
| + | den Bit-Bedeutungen (Belegung mit 1): | ||
| + | Bit 0 - links | ||
| + | 1 - rechts | ||
| + | 2 - runter | ||
| + | 3 - hoch | ||
| + | 4 - Aktionstaste | ||
| + | | ||
| + | CY-Flag=1, wenn Spielhebel nicht angeschlossen | ||
| + | |||
| + | |||
| + | **FFB8H - JMP SOUND** | ||
| + | Ausgabe einer vollen Periode auf die Tonband- | ||
| + | buchse, sowie auf Bit 7 vom Systemport (User-P) | ||
| + | Übergabe der Periodendauer in C mit | ||
| + | T=n*33mks+20mks (2MHz) | ||
| + | |||
| + | |||
| + | ===== Anmerkungen ===== | ||
| + | |||
| + | **DRZEL** - eigentlich, um aus BASIC heraus zu drucken; wird m.E. nicht genutzt | ||
| + | |||
| + | Innerhalb des BASIC-Interpreters KC-BASIC+ kann man dann mit dem Unterprogramm | ||
| + | |||
| + | xxxx POKE 27, | ||
| + | xxxx = Zeilennummer | ||
| + | A$ = Stringvariable (ein Zeichen lang) | ||
| + | |||
| + | einzelne Zeichen an einen eingebundenen Druckertreiber übermitteln. | ||
| + | |||
| + | **BSDR** - Bildschirmkopie drucken. im BROSIG-Monitor ist bereits eine Routine enthalten, die allerdings den Bildschirm nur bis zum Cursor bzw. dem Graphikzeichen 0FFH druckt und außerdem die Verarbeitung von Graphikzeichen dem Drucker überläßt. | ||
| + | |||
| + | **HARDC** - soll A drucken, wenn Flag im Speicher gesetzt ist. welche Speicheradresse gemeint ist, wird leider nicht spezifiert. < | ||
| + | |||
| + | |||
| + | In [[z1013: | ||
| + | |||
| + | **FFB5H - JMP BSAVE:** | ||
| + | Saven im BASIC-Code-Format | ||
| + | |||
| + | **FFB2H - JMP BLOAD:** | ||
| + | Laden im BASIC-Code-Format | ||
| + | |||
| + | (vp) | ||