Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
z1013:software:sprungverteiler [2011/09/15 14:55] volkerpz1013:software:sprungverteiler [2012/01/28 08:27] (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, aber auch Tastatur- und
 +Spielhebelabfragen) von Anwenderprogrammen (z.B.KC-BASIC+, Microword
 +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, in denen die Sprünge zu Adressen umgeleitet werden, die zu den aufgerufenen Standard-Routinen gehören. Ein Beispiel: Im KC-BASIC+ wird der Sprung zum HEADERSAVE auf den Adressen 149H (LORUFund 157H (SARUF) eingetragen. Mein HEADERSAVE steht im Monitor, der eines anderen Rechner ab E000HSteht nun im KC-BASIC+ im LORUF die Adresse FFF1H, und auf dieser die Adresse des jeweiligen LORUF vom HEADERSAVE, findet der KC-BASIC+ diese Routine ohne jede Änderung+Voraussetzung für die Nutzung des 
 +Sprungverteilers ist natürlich ein bestückter Speicher (RAM oder ROM) im og. 
 +Bereich.
  
-Der Sprungverteiler kann auch mit 'M' (modifydirekt eingetragen werden (RAM-Speicher muß aber dort vorhanden sein), wobei immer zuerst ein C3H (JMP), dann der niederwertige Teil der Adresse (letzten zwei Zchn.und danach der höherwertige Teil (ersten zwei Zchn.) eingetragen wird. Wenn auf FFB7H ein C9H eingetragen wird, kann man die Sprünge zu Routinen, die nicht vorhanden sind, durch Eintrag dieser Adresse kurzschließen. (es geht dazu jedes C9H, was irgendwo im Monitor steht.+Ein Anwendungsbeispiel soll die Einbindung des Sprungverteilers illustrieren: Es 
 +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"-Monitor steht hier ein JMP 
 +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.
  
-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 brennenNicht 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**: Wer keine Möglichkeit hat, sich diesen SV einzutragen (z.B. 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, dann 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.  
  
 +**DIREKTANSPRÜNGE**: Wer keine Möglichkeit hat, sich diesen SV einzutragen (z.B. 
 +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, dann 
 +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, FUNKAMATEUR 37 (1988), H.10, S.484
 +
 +===== Beschreibung =====
  
  
 ******************************************************************* *******************************************************************
-             Sprungverteiler fuer Z 1013-Erweiterungen+             Sprungverteiler für Z 1013-Erweiterungen
 ******************************************************************* *******************************************************************
  
  
-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 festgelegt:+Interessengemeinschaft Heimcomputer des IZ an der TU Dresden folgendermaßen  
 +festgelegt:
  
 Beginnt auf Adresse  Beginnt auf Adresse 
 +
 FFFFH FFFFH
- abwaertsfuehrend: 
  
 +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 
-                    'letztes Zeichen war 0' ((Zelle 4)=0) um eine 
-                    evtl. nachfolgenden INKEY-Routine nicht zu  
-                    sperren 
  
 +**FFF7H - JMP STAT**
 +    übergibt Tastaturstatus im Akku
 +     A=0   - keine Taste gedrückt
 +     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
 +    'letztes Zeichen war 0' ((Zelle 4)=0) um eine
 +    evtl. nachfolgenden INKEY-Routine nicht zu 
 +    sperren
  
-FFF4 - JMP SARUF+ 
 +**FFF4H - JMP SARUF**
     ruft die SAVE-Routine des Headersave     ruft die SAVE-Routine des Headersave
-                    zerstoert 1. Registersatz + AF' +    zerstört 1. Registersatz + AF' 
-                    Parameteruebergabe+    Parameterübergabe
-                    Zellen 1BH - anfadr. +    Zellen 1BH - anfadr. 
-                           1DH - endadr. +           1DH - endadr. 
-                           23H - strtadr. +           23H - strtadr. 
-                    Akku   3AH - Wiederholen der SAVE-Funktion mit +    Akku   3AH - Wiederholen der SAVE-Funktion mit 
-                                 gleichem Kopf +                 gleichem Kopf 
-                    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 +    ruft LOAD-Routine des Headersave 
-                    zerstoert 1. Registersatz + AF' +    zerstört 1. Registersatz + AF' 
-                    Parameteruebergabe+    Parameterübergabe
-                    Zellen 1BH - neue Anfangsadresse des Files +    Zellen 1BH - neue Anfangsadresse des Files 
-                                 sonst 0 +                 sonst 0 
-                    Akku     - ohne signifikante Kontrolle +    Akku     - ohne signifikante Kontrolle 
-                           4EH - mit signifikanter Kopfkontrolle +           4EH - mit signifikanter Kopfkontrolle 
-                                 (Typ) + Namenabfrage +                 (Typ) + Namenabfrage 
-                    H(IY)  0   - Typ wird abgefragt  +    H(IY)  0   - Typ wird abgefragt  
-                           Typkennzeichen (in ASCII), keine Typabfr.  +           Typkennzeichen (in ASCII), keine Typabfr.  
-                    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 
-   Initialisierung der Z-Monitorrufe auf B0H 
  
 +**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 
-   uebergibt den Akkuinhalt an den logischen  
-                    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
-                    rufende Programm zurueck+    rufende Programm zurück
  
  
-FFE2H - JMP HARDC +**FFE2H - JMP HARDC** 
-   uebergibt den Akkuinhalt an logischen Drucker- +    übergibt den Akkuinhalt an logischen Drucker- 
-                    treiber wenn ein Flag im Rechner gesetzt ist; +    treiber wenn ein Flag im Rechner gesetzt ist; 
-                    wandelt CR (0DH) in NL (1EH/0DH-0AH) +    wandelt CR (0DH) in NL (1EH/0DH-0AH) 
-                    ! 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 uebergeben  +    wie DRAKK, nur das der Inhalt von 1BH übergeben  
-                    wird (vorgesehen, um im BASIC mit POKE zu drucken)+    wird (vorgesehen, um im BASIC mit POKE zu drucken)
  
  
-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+    Eingabe eines ASCII-Zeichens vom LBL in den Akku
  
  
-FFD0H - JMP BIN +**FFD0H - JMP BIN** 
-     Eingabe eines Bytes vom LBL in den Akku+    Eingabe eines Bytes vom LBL in den Akku
  
  
-FFCDH - JMP DRINI +**FFCDH - JMP DRINI** 
-   Initialisierung des logischen Druckertreibers+    Initialisierung des logischen Druckertreibers
  
  
-FFCAH - JMP ZEIDR +**FFCAH - JMP ZEIDR** 
-   uebergibt ein Zeichen im Akku an physischen +    übergibt ein Zeichen im Akku an physischen 
-                    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. +     Zellen 25H/26H * Kopfinhalt des zu lesenden Bl. 
-                    HL             * Ladeadresse des Blocks +     HL             * Ladeadresse des Blocks 
-                   Return: +    Return: 
-                    Zellen 25H/26H * Kopfinhalt + 20H +     Zellen 25H/26H * Kopfinhalt + 20H 
-                    HL             * HL:=HL+20H +     HL             * HL:=HL+20H 
-                   Abbruch des Lesens bei Kopfinhalt=0FFFFH  +    Abbruch des Lesens bei Kopfinhalt=0FFFFH  
-                   oder DMA > Endadr in ARG2 (1DH)+    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 +     HL  * Quelladresse Block 
-                    IX  * Kopfinhalt +     IX  * Kopfinhalt 
-                    DE  * Anzahl der Sync.-Bits +     DE  * Anzahl der Sync.-Bits 
-                   Return: +    Return: 
-                    HL  * HL:=HL+20H+     HL  * HL:=HL+20H
  
  
-FFC1H - JMP SUCHK +**FFC1H - JMP SUCHK** 
-   Suchen eines Kopfblocks und Uebergabe des Inhalts +    Suchen eines Kopfblocks und Übergabe des Inhalts 
-                    im Kopfpuffer (E0-FF), keine Auswertung+    im Kopfpuffer (E0-FF), keine Auswertung
  
  
-FFBEH - JMP AKP +**FFBEH - JMP AKP** 
-     Aufbereitung Kopfpuffer mit Namenabfrage +    Aufbereitung Kopfpuffer mit Namenabfrage 
-                    Parameteruebergabe wie bei SARUF+    Parameterübergabe wie bei SARUF
  
  
-FFBBH - JMP GETST +**FFBBH - JMP GETST** 
-   Abfrage der Joysticks und Uebergabe des Er- +    Abfrage der Joysticks und Übergabe des Er- 
-                    gebnisses in BC (B-links,C-rechts) mit folgen- +    gebnisses in BC (B-links,C-rechts) mit folgen- 
-                    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 
-                     Z-Flag=1, wenn keine Betaetigung vorliegt +       Z-Flag=1, wenn keine Betätigung vorliegt 
-                    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- +    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) 
-                    Uebergabe der Periodendauer in C mit  +    Übergabe der Periodendauer in C mit  
-                    T=n*33mks+20mks (2MHz)+    T=n*33mks+20mks (2MHz) 
 + 
 + 
 +===== Anmerkungen ===== 
 + 
 +**DRZEL** - eigentlich, um aus BASIC heraus zu drucken; wird m.E. nicht genutzt  
 + 
 +**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:literatur:practic-90-1-5|]] wurde eine Erweiterung des Sprungverteilers für BASICODE-Save und -Load vorgeschlagen. Das hat aber keinerlei praktische Anwendung mehr erfahren. Es gab auch keine Hinweise zu Aufrufparametern und auch keine Referenzimplementierung. 
 + 
 +**FFB5H - JMP BSAVE:** 
 +   Saven im BASIC-Code-Format 
  
 +**FFB2H - JMP BLOAD:**
 +   Laden im BASIC-Code-Format 
  
 +(vp)
  • z1013/software/sprungverteiler.1316098505.txt.gz
  • Zuletzt geändert: 2011/09/15 14:55
  • von volkerp