Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
| z1013:software:sprungverteiler [2011/09/15 14:55] – 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). | ||
| - | **SPRUNGVERTEILER SV**: Hier handelt es sich nicht um ein Programm, wie Newcomer oft annehmen, es sind nur Standard-Adressen, | + | Voraussetzung für die Nutzung des |
| + | Sprungverteilers ist natürlich | ||
| + | Bereich. | ||
| - | Der Sprungverteiler | + | 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 | ||
| + | „Brosig" | ||
| + | FAACH (C3 AC FA). Kommt das Headersave | ||
| + | 00 E0) einzutragen. Microword findet | ||
| + | LORUF in beiden Fällen ohne Änderung. | ||
| - | Diesen eingetragenen SV kann man ausladen und nach jedem Kaltstart wieder einladen. | + | 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**: | ||
| + | **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 | + | Der Zusatzsprungverteiler wurde entsprechend einer Einigung innerhalb der |
| - | folgendermassen | + | Interessengemeinschaft Heimcomputer des IZ an der TU Dresden |
| + | festgelegt: | ||
| Beginnt auf Adresse | Beginnt auf Adresse | ||
| + | |||
| FFFFH | FFFFH | ||
| - | | ||
| + | abwärtsführend: | ||
| - | FFFDH - JMP INKEY | ||
| - | holt ein Zeichen von Tastatur in den Akku; | ||
| - | kommt beim 2. Aufruf nur zurueck, wenn Taste | ||
| - | zwischendurch losgelassen wurde | ||
| + | **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 zurueck, egal | ||
| - | ob Taste losgelassen wurde oder nicht | ||
| + | **FFFAH - JMP POLL** | ||
| + | bringt immer ein Zeichen im Akku zurück, egal | ||
| + | ob Taste losgelassen wurde oder nicht | ||
| - | FFF7H - JMP STAT | ||
| - | uebergibt Tastaturstatus im Akku | ||
| - | A=0 - keine Taste gedrueckt | ||
| - | A=FFH - Taste gedrueckt | ||
| - | die Abfrage erfolgt ohne Ruecksicht, ob die | ||
| - | Taste schon vor dem Aufruf gedrueckt war und | ||
| - | hinterlaesst trotz gedrueckter Taste den Status | ||
| - | ' | ||
| - | evtl. nachfolgenden INKEY-Routine nicht zu | ||
| - | sperren | ||
| + | **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 | ||
| - | FFF4 - JMP SARUF | + | |
| + | **FFF4H | ||
| ruft die SAVE-Routine des Headersave | ruft die SAVE-Routine des Headersave | ||
| - | | + | |
| - | | + | |
| - | Zellen 1BH - anfadr. | + | Zellen 1BH - anfadr. |
| - | | + | |
| - | | + | |
| - | Akku 3AH - Wiederholen der SAVE-Funktion mit | + | Akku 3AH - Wiederholen der SAVE-Funktion mit |
| - | | + | |
| - | H(IY) Typvorgabe (in ASCII), sonst 0 | + | H(IY) Typvorgabe (in ASCII), sonst 0 |
| - | FFF1H - JMP LORUF | + | **FFF1H - JMP LORUF** |
| - | | + | ruft LOAD-Routine des Headersave |
| - | ! zerstoert | + | ! zerstört |
| - | | + | |
| - | Zellen 1BH - neue Anfangsadresse des Files | + | Zellen 1BH - neue Anfangsadresse des Files |
| - | | + | |
| - | Akku | + | Akku |
| - | | + | |
| - | | + | |
| - | H(IY) 0 - Typ wird abgefragt | + | H(IY) 0 - Typ wird abgefragt |
| - | | + | |
| - | L(IY) 20H - Freigabe Autostart bei COM-Files | + | L(IY) 20H - Freigabe Autostart bei COM-Files |
| + | | ||
| + | **FFEEH - JMP ZMINI** | ||
| + | Initialisierung der Z-Monitorrufe auf B0H | ||
| - | FFEEH - JMP ZMINI | ||
| - | | ||
| + | **FFEBH - JMP DRDEL** | ||
| + | setzt den logischen Druckertreiber zurück | ||
| - | FFEBH - JMP DRDEL | ||
| - | setzt den logischen Druckertreiber zurueck | ||
| + | **FFE8H - JMP DRAKK** | ||
| + | übergibt den Akkuinhalt an den logischen | ||
| + | Druckertreiber | ||
| - | FFE8H - JMP DRAKK | ||
| - | | ||
| - | Druckertreiber | ||
| - | + | **FFE5H - JMP BSDR** | |
| - | FFE5H - JMP BSDR | + | |
| druckt den Inhalt des BWS und kehrt in das | druckt den Inhalt des BWS und kehrt in das | ||
| - | | + | |
| - | FFE2H - JMP HARDC | + | **FFE2H - JMP HARDC** |
| - | uebergibt | + | |
| - | treiber wenn ein Flag im Rechner gesetzt ist; | + | treiber wenn ein Flag im Rechner gesetzt ist; |
| - | wandelt CR (0DH) in NL (1EH/ | + | wandelt CR (0DH) in NL (1EH/ |
| - | ! nur verwenden, wenn Programm eine eigene | + | ! nur verwenden, wenn Programm eine eigene |
| - | Bildschirmverwaltung hat | + | Bildschirmverwaltung hat |
| - | FFDFH - JMP DRZEL | + | **FFDFH - JMP DRZEL** |
| - | | + | wie DRAKK, nur das der Inhalt von 1BH übergeben |
| - | wird (vorgesehen, | + | wird (vorgesehen, |
| - | FFDCH - JMP BEEP | + | **FFDCH - JMP BEEP** |
| erzeugen eines kurzen Signals | erzeugen eines kurzen Signals | ||
| - | FFD9H - JMP ASTA | + | **FFD9H - JMP ASTA** |
| Ausgabe Akkuinhalt als ASCII-Zeichen an PUNCH | Ausgabe Akkuinhalt als ASCII-Zeichen an PUNCH | ||
| - | FFD6H - JMP BSTA | + | **FFD6H - JMP BSTA** |
| Ausgabe Akkuinhalt als Byte an PUNCH | Ausgabe Akkuinhalt als Byte an PUNCH | ||
| - | FFD3H - JMP AIN | + | **FFD3H - JMP AIN** |
| - | | + | Eingabe eines ASCII-Zeichens vom LBL in den Akku |
| - | FFD0H - JMP BIN | + | **FFD0H - JMP BIN** |
| - | | + | Eingabe eines Bytes vom LBL in den Akku |
| - | FFCDH - JMP DRINI | + | **FFCDH - JMP DRINI** |
| - | | + | Initialisierung des logischen Druckertreibers |
| - | FFCAH - JMP ZEIDR | + | **FFCAH - JMP ZEIDR** |
| - | uebergibt | + | |
| - | Druckertreiber | + | Druckertreiber |
| - | FFC7H - JMP BLMK | + | **FFC7H - JMP BLMK** |
| Lesen eines Blocks vom Headersave | Lesen eines Blocks vom Headersave | ||
| - | Parameteruebergabe: | + | Parameterübergabe: |
| - | Zellen 25H/26H * Kopfinhalt des zu lesenden Bl. | + | |
| - | HL * Ladeadresse des Blocks | + | |
| - | | + | Return: |
| - | Zellen 25H/26H * Kopfinhalt + 20H | + | |
| - | HL * HL: | + | |
| - | | + | Abbruch des Lesens bei Kopfinhalt=0FFFFH |
| - | | + | oder DMA > Endadr in ARG2 (1DH) |
| - | FFC4H - JMP BSMK | + | **FFC4H - JMP BSMK** |
| Schreiben eines Blocks im Headersave | Schreiben eines Blocks im Headersave | ||
| - | Parameteruebergabe: | + | Parameterübergabe: |
| - | HL * Quelladresse Block | + | |
| - | IX * Kopfinhalt | + | |
| - | DE * Anzahl der Sync.-Bits | + | |
| - | | + | Return: |
| - | HL * HL:=HL+20H | + | |
| - | FFC1H - JMP SUCHK | + | **FFC1H - JMP SUCHK** |
| - | | + | Suchen eines Kopfblocks und Übergabe |
| - | im Kopfpuffer (E0-FF), keine Auswertung | + | im Kopfpuffer (E0-FF), keine Auswertung |
| - | FFBEH - JMP AKP | + | **FFBEH - JMP AKP** |
| - | | + | Aufbereitung Kopfpuffer mit Namenabfrage |
| - | | + | |
| - | FFBBH - JMP GETST | + | **FFBBH - JMP GETST** |
| - | | + | Abfrage der Joysticks und Übergabe |
| - | gebnisses in BC (B-links, | + | gebnisses in BC (B-links, |
| - | den Bit-Bedeutungen (Belegung mit 1): | + | den Bit-Bedeutungen (Belegung mit 1): |
| - | Bit 0 - links | + | Bit 0 - links |
| - | 1 - rechts | + | 1 - rechts |
| - | 2 - runter | + | 2 - runter |
| - | 3 - hoch | + | 3 - hoch |
| - | 4 - Aktionstaste | + | 4 - Aktionstaste |
| - | | + | |
| - | CY-Flag=1, wenn Spielhebel nicht angeschlossen | + | CY-Flag=1, wenn Spielhebel nicht angeschlossen |
| - | FFB8H - JMP SOUND | + | **FFB8H - JMP SOUND** |
| - | | + | Ausgabe einer vollen Periode auf die Tonband- |
| - | buchse, sowie auf Bit 7 vom Systemport (User-P) | + | buchse, sowie auf Bit 7 vom Systemport (User-P) |
| - | | + | |
| - | T=n*33mks+20mks (2MHz) | + | 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) | ||