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 [2024/11/25 14:22] (aktuell) – [Anmerkungen] DRZEL aus MONER SU1.3,1 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 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. Ich denke, daß es 006EH, Bit 0 sein könnte. Das ist das Druckflag für den Original-10k-BASIC-Interpreter von Riesa, allerdings müßte dann das Zeichen im Register E übergeben werden, nicht in A !? | ||
+ | |||
+ | In [[z1013: | ||
+ | |||
+ | **FFB5H - JMP BSAVE:** | ||
+ | Saven im BASIC-Code-Format | ||
+ | **FFB2H - JMP BLOAD:** | ||
+ | Laden im BASIC-Code-Format | ||
+ | (vp) |