








            Dokumentation zur








            S u p e r C h a r g e r   T o o l b o x





            Version 1.30, vom 1.3.1990

            by job & pky for

            BETA Systems Computer AG
            Staufenstrae 42
            6000 Frankfurt/Main 1



Inhalt:



1.  Wenn Sie die Toolbox verwenden wollen... . . . . . . .   3
2.  Allgemeine Vorstellung der SuperCharger-Toolbox. . . .   3
3.  Vorstellung der Kommunikation zwischen
    SuperCharger und Atari . . . . . . . . . . . . . . . .   4
4.  Gefahren bei der unsachgemen Verwendung des
    DMA-Busses . . . . . . . . . . . . . . . . . . . . . .   4
5.  Die Ebenen der Toolbox . . . . . . . . . . . . . . . .   5
6.  Die Funktionen der SuperCharger-TB fr TOS-Programme .   6
7.  Die Funktionen der SuperCharger-TB fr V30-Programme .  12
8.  Erweiterte Funktionen der Toolbox fr System-
    programmierer  . . . . . . . . . . . . . . . . . . . .  15
9.  Beispielapplikation: Resetfeste TOS-RAM-Disk mit
    der Toolbox  . . . . . . . . . . . . . . . . . . . . .  21


Anhang A: Quick Reference: Toolbox-Funktionen V30 . . . . . 23
Anhang B: Quick Reference: Toolbox-Funktionen 68000 . . . . 24
Anhang C: Speicherlayout des SuperChargers mit Toolbox  . . 25
Anhang D: Listing SCTB_INC.S
Anhang E: Listing SC_RAM.S
Anhang F: Listing RAMDISK.ASM


                                2

1. Wenn Sie die Toolbox verwenden wollen...
================================================================

Diese Toolbox bietet dem TOS-Programmierer in Verbindung mit dem
SuperCharger viele Mglichkeiten, seine Programme durch den pa-
rallelen Einsatz der beiden Prozessoren 68000 im Atari und V30 im
SuperCharger (oder auch von mehreren V30-Prozessoren in mehreren
gleichzeitig angeschlossenen SuperChargern) in bisher nicht
mglicher Weise zu beschleunigen. Auerdem knnen neue innovative
Programmierkonzepte wie beispielsweise Parallel-Processing
realisiert werden.


Es ist aber aus Grnden Ihrer Datensicherheit unabdingbar, da Sie
- wenn Sie diese Toolbox verwenden wollen - diese Anleitung
VOLLSTNDIG durchlesen. Die alleinige Benutzung der Quick-Refe-
rence-Tables im Anhang wird nicht die bentigte Information zum
sicheren Umgang mit den Funktionen der Toolbox gewhrleisten. Wir
mchten darauf hinweisen, da diese Toolbox von uns als eine
Mglichkeit fr Programmierer gedacht ist, eigene Programme mit
dem SuperCharger zu verbessern. Wir knnen aber trotzdem keine
Garantie fr eventuelle Fehler und deren Folgen bei der Benutzung
der Toolbox bernehmen. Die Toolbox ist im Gegensatz zum PC-
Emulator (Programm ABIO.TOS) keine in sich abgeschlossene und
damit weitgehend "sichere" Programmeinheit. Die unsachgeme
Verwendung der Toolbox kann zu empfindlichem Datenverlust fhren!
Dies liegt in der Verantwortung des einzelnen Benutzers.





2. Allgemeine Vorstellung der SuperCharger-Toolbox
================================================================

Die Grnde fr die Erstellung der Toolbox liegen in der Erkennt-
nis, da der SuperCharger eigentlich zu weit mehr in der Lage ist,
als "nur" PC's zu emulieren. Obwohl dies sicherlich der Hauptgrund
fr die Anschaffung des SuperChargers ist und auch fr uns die
Hauptmotivation zur Entwicklung des SuperChargers war, sind wir
der Meinung, da die Emulation eines PC's eigentlich nur ein
Spezialfall dafr ist, da auf dem SuperCharger parallel zum Atari
ein Programm luft und beide Programme miteinander kommunizieren.

Wir haben mit dem SuperCharger ein vollstndiges System mit CPU,
eigenem Speicher und einer Hardware unter anderem fr die Kommu-
nikation auf dem DMA-Bus zur Verfgung gestellt. Um dieses System
fr eigene Anwendungen zu nutzen, bentigt der Programmierer
Mittel, seine V30-Programme in den SuperCharger zu laden, sie zu
starten, ihnen Daten zur Verfgung zu stellen und Resultate
abzuholen. Neben diesen Mitteln sind Funktionen zur Steuerung des
Programmablaufs (Timer) sowie die Mglichkeit, eigene Interupts
fr den Mathematischen Koprozessor 8087 einzubinden, der Inhalt
der Toolbox.


                                3

3. Vorstellung der Kommunikation zwischen SuperCharger und Atari
================================================================

Bevor wir im Einzelnen auf die Funktionen der Toolbox eingehen,
mchten wir mit einigen Worte auf die Funktionsweise des DMA-Bus-
ses eingehen.

Die Kommunikation des Atari mit einem an den DMA-Bus angeschlos-
senen Gert erfolgt nach dem folgenden Schema:
Zunchst erfolgt die sogenannte Adressierung des gewnschten Ge-
rtes durch Angabe der gewnschten Gertenummer im Bereich von 0
bis 7. Durch diese Adressierung aktiviert der Atari das ange-
sprochene Gert. Gleichzeitig mit der Adressierung erhlt das
Gert ein Befehlswort, mit dem der Atari die gewnschte Operation
(z.B. Sektoren lesen, Festplatte formatieren, Seite auf
Laserdrucker ausgeben etc.) mitteilt. Sofern der Befehl weitere
Daten bentigt, erfolgt die dazu notwendige Kommunikation im di-
rekten Anschlu an die Adressierung. Whrend dieser Zeit ist der
DMA-Bus fr die Kommunikation zwischen Atari und dem selektierten
Gert reserviert, das bedeutet insbesondere, da kein anderes DMA-
Gert angesprochen oder adressiert werden darf, bis die Operation
abgeschlossen ist. Den Abschlu bildet die Deselektierung
(Freigabe) des DMA-Busses. Nach dieser Freigabe ist der DMA-Bus in
der Lage, den Atari mit einem anderen DMA-Gert kommunizieren zu
lassen.




4. Gefahren bei der unsachgemen Verwendung des DMA-Busses
================================================================

Festzuhalten ist, da immer nur ein Gert gleichzeitig ber den
DMA-Bus ansprechbar ist und die Kommunikation auf dem DMA-Bus
immer vom Atari initiiert wird. Die von der Toolbox fr die Kom-
munikation zur Verfgung gestellten Funktionen erledigen die
Adressierung und Freigabe des DMA-Busses automatisch vor und nach
jeder Kommunikation.
DIES GILT NICHT FR ALLE UNTER DEM KAPITEL "ERWEITERTE FUNKTIONEN
DER TOOLBOX FR SYSTEMPROGRAMMIERER" ANGESPROCHENEN FUNKTIONEN.
Bei falscher Verwendung dieser Funktionen, d.h. beispielsweise
einer unterlassenen Freigabe des DMA-Busses mit nachfolgendem
Festplattenzugriff, ist eine Zerstrung der Daten auf der Fest-
platte die wahrscheinliche Folge. Wir haben die Funktionen trotz-
dem aufgenommen, um zeitkritische Programmierung und extrem
schnelle Kommunikation zwischen SuperCharger und Atari zu
ermglichen.

Fr die genauere Funktionsweise des DMA-Busses verweisen wir auf
eine Vielzahl von Verffentlichungen in Fachzeitschriften und -
bchern.


                                4

5. Die Ebenen der Toolbox
================================================================

Der SuperCharger kann sich bei geladener Toolbox in zwei Zustnden
befinden. Nach dem Start der Toolbox ist noch kein Anwender-
programm im Speicher des SuperChargers aktiv. Dies bedeutet, da
einige Funktionen zur Verfgung gestellt werden mssen, die unter
vollstndiger Kontrolle des Atari ablaufen. Der SCHEDULER, ein
Bestandteil der Toolbox, stellt zu diesem Zeitpunkt die Funktionen
zum Atari-seitig gesteuerten Schreiben und Lesen von Daten in den
Speicher des SuperChargers sowie fr den Start eines Programmes an
einer vom Atari bergebenen Adresse zur Verfgung.
Der zweite Zustand ist die laufende Ausfhrung eines Anwender-
programms. Hierbei stehen dem Programm ber den bereits durch die
Toolbox initialisierten Interrupt 60h alle weiteren Funktionen zur
Verfgung.

Auf 68000-Seite existiert eine derartige Unterscheidung nicht, da
die Toolbox ausschlielich durch ein Anwenderprogramm gesteuert
werden kann. Trotzdem mu dem 68000-Programmierer jederzeit bewut
sein, in welchem Zustand sich der SuperCharger gerade befindet.
Luft beispielsweise im SuperCharger gerade der SCHEDULER, so darf
das 68000-Programm nur die vom Scheduler zur Verfgung gestellten
Funktionen zur Speichermanipulation und zum Ausfhren eines V30-
Programms verwenden. Hat dahingegen ein V30-Anwenderprogramm einen
Toolbox-Funktionsaufruf gemacht, so kann die 68000-Applikation nur
die dementsprechende Toolboxfunktion aufrufen.

Der normale Ablauf der Benutzung der Toolbox soll hier kurz von
Atari-Seite aus betrachtet skizziert werden; die nheren Einzel-
heiten finden Sie unter den Beschreibungen fr die entsprechenden
Funktionen:


Ausfhrung bei Start des Rechners durch den AUTO-Ordner oder vor
Start des Anwenderprogramms manuell:
----------------------------------------------------------------
- Toolbox-Trap durch Start von SCTB.PRG atariseitig
  installieren.
----------------------------------------------------------------


Ausfhrung durch das Anwenderprogramm:

- Toolbox durch Funktionsaufruf von SC_BOOT in einen
  SuperCharger laden
- SuperChargerseitiges (V30) Anwenderprogramm durch
  Funktionsaufruf von SC_SM in den SuperCharger laden
- SuperChargerseitiges (V30) Anwenderprogramm durch SC_EXEC
  zur Ausfhrung bringen
- allgemeine, Programmkontextgesteuerte Kommunikation ber
  Funktionen SC_SD, SC_GD, SC_SB, SC_GB


                               5

6. Die Funktionen der SuperCharger-TB fr TOS-Programme
================================================================

Alle Funktionen der Toolbox unter TOS werden durch einen para-
metrisierten Aufruf des Trap #4 angesprochen. Der Trap #4 wird vom
residenten Teil des Programms SCTB.PRG zur Verfgung gestellt,
welches in den AUTO-Ordner kopiert werden kann.


Allgemeines zur Registerbelegung
================================


Zur Schreibweise: Die Endungen .L, .W und .B beziehen sich auf die
Breite des angesprochenen Registers. Ist beispielsweise vom
Register D1.W die Rede, so gengt es, den Wert mit einem Befehl
der Art MOVE.W #...,D2 zu laden. Ist jedoch von D2.L die Rede, so
mu (!) der Wert als Langwort angegeben werden.


Alle Toolbox-Funktionen werden aufgerufen, indem die Funktions-
nummer ins D0.W-Register geladen und der Befehl "TRAP #4" ausge-
fhrt wird (Die einzige Ausnahme von dieser Regel bildet die Funk-
tion SC_CHECK, deren genaue Beschreibung weiter unten gegeben
wird). Werden weitere Paremeter bentigt, so ist deren bergabe
weiter unten bei den jeweiligen Funktionen beschrieben. Jede Tool-
box-Funktion kann die Register D0, D1, D2, D3, A0 und A1 ver-
ndern.


Bei allen Funktionen, die den SuperCharger adressieren mssen,
steht im Register D1.W die DMA-Gerteadresse des SuperChargers.
Der zulssige Bereich ist 0-7, standardmig werden SuperCharger
derzeit mit Gerteadresse 3 ausgeliefert. Durch verndern dieser
Parameter wird der gleichzeitige Anschlu mehrerer SuperCharger an
einen Atari ermglicht!


Eine eventuell bentigte Lngenangabe in Bytes fr Speichertrans-
fers erfolgt im Register D2 als Langwort. Trotzdem ist die
maximale Lnge auf 64 Kilobytes begrenzt. Lngere Datenblcke
mssen in mehrereren Portionen bertragen werden.


Bentigt die Toolbox-Funktion eine V30-Speicheradresse, so wird
diese immer im Register D3 als Langwort bergeben. Dabei steht das
V30-Segment in den Bits 31-16 und der Offset in den Bits 15-0.
Somit entspricht beispielsweise der V30-Adresse 1230:0506 der
Registerwert D3.L = $12300506.

Falls im Atari eine Speicheradresse angegeben werden mu, so er-
folgt diese Angabe durch das Register A0.


                                6

Am Ende der Toolbox-Funktion steht im Register D0.L der sogenannte
Result-Code. Ein Wert von 0 gibt an, da die Funktion erfolgreich
verlaufen ist, negative Werte zeigen i.A. Fehler an. Die genauen
Bedeutungen sind wie folgt:


            Result-Codes
            ============

             0  Okay (Funktion erfolgreich)
            -1  Residente Toolbox nicht geladen
            -2  (reserviert)
            -3  SuperCharger nicht angeschlossen
            -4  Timeout
            -5  Protokollfehler
            -6  ABIO Hotkey erkannt
            -7  (reserviert)
            -8  Illegaler Befehlscode im D0 Register




1. Adminitsrative Funktionen der Toolbox

Neben den Funktionen zur direkten Kommunikation mit dem
SuperCharger sind auf Atari-Seite noch weitere Funktionen fr
bergeordnete Aufgaben verfgbar. Im einzelnen sind dies:



        SC_CHECK     Prfe Verfgbarkeit der Toolbox
        ========     ===============================

Entry:   -
Exit:    D0.L = Result-Code
         D1.L = Versionsnummer, falls D0=0.

Hinweis: SC_CHECK ist die einzige Toolbox-Funktion, die nicht
        ber TRAP #4, sondern JSR SC_CHECK aufgerufen wird. Sie
        ist im Includefile SCTB_INC.S zu finden und sollte direkt
        in Ihr Programm eingebunden werden.

SC_CHECK wird benutzt, um die Verfgbarkeit der Toolbox zu testen.
Da SC_CHECK somit nicht Bestandteil der Toolbox sein darf, ist es
die einzige Toolbox-Funktion, die im Sourcecode mit der Toolbox
ausgeliefert wird. Sie ist zusammen mit einigen allgemeinen
Definitionen (EQU-Anweisungen) in der Datei SCTB_INC.S zu finden.
SC_CHECK liefert als Result Code eine 0 (SC_OKAY), wenn die
Toolbox verfgbar ist, sonst eine -1. Ist die Toolbox verfgbar,
so wird in D1 die Versionsnummer als Ascii-Langwort
zurckgeliefert (z.B. $312E3330 fr Version 1.30).

                                7

        SC_STAT      Ermittle Toolbox-Status
        =======      =======================

Entry:   D0.W = $0002
         D1.W = DMA-Adresse (0-7)
Exit:    D0.L = Result-Code

SC_STAT prft, ob im SuperCharger bereits eine Toolbox oder ein
ABIO Hotkey aktiviert ist. Ist eine Toolbox installiert und bereit
zur Kommunikation, so liefert SC_STAT den Wert 0 (OKAY). Ist ein
ABIO Hotkey aktiv (d.h. es wurde eine MS-DOS Applikation mittels
Hotkey verlassen), so liefert SC_STAT den Wert -6 (SC_ABIO). Jede
andere Meldung bedeutet, da sich der SuperCharger noch in einem
undefinierten Zustand befindet und vor der Kommunikation mit
SC_BOOT die V30-seitige Toolbox gestartet werden mu. SC_STAT
arbeitet nicht mit den unter dem Kapitel "Erweiterte Funktionen
der Toolbox fr Systemprogrammierer" beschriebenen Kommunikations-
Funktionen zusammen, da diese Funktionen nicht ber ein Protokoll
mit ID-Prfung vor jeder Kommunikation verfgen.




        SC_BOOT      Installiere V30-seitige Toolbox
        =======      ===============================

Entry:   D0.W = $0003
         D1.W = DMA-Adresse (0-7)
Exit:    D0.L = Result-Code

Mit SC_BOOT wird der SuperCharger zurckgesetzt (RESET) und die
V30-seitige Toolbox wird geladen. Danach wird der SCHEDULER ge-
startet. Auf V30-Seite wird der Speicher teilweise gelscht. Diese
Funktion leitet normalerweise die Benutzung eines SuperChargers
durch die Toolbox ein, wenn noch keine Toolbox im SuperCharger
geladen ist.

                                8

2. Funktionen wenn im SuperCharger der Scheduler luft
Der Scheduler im SuperCharger ist in der Lage, die folgenden
Befehle entgegenzunehmen:



        SC_SM        Sende Daten zum V30-Speicher
        =====        ===============================

Entry:   D0.W = $0006
         D1.W = DMA-Adresse ( Wert 0-7)
         D2.L = Lnge (maximal 64K)
         D3.L = V30 Segment (high-word) und Offset (low-word)
         A0.L = Adresse der Quelldaten im Atari-Speicher
Exit:    D0.L = Result-Code

Sendet einen Speicherblock vom Atari zum V30-Speicher. Die
Register A0 und D2 spezifizieren den zu sendenden Speicherbereich,
whrend D3 angibt, ab welcher Adresse die Daten im SuperCharger-
Speicher abgelegt werden. Diese Funktion erfllt die Hauptaufgabe,
ein V30-Programm in den SuperCharger-Speicher zu bringen, um es
danach mittels SC_EXEC zur Ausfhrung zu bringen. In Verbindung
mit der Funktion SC_GM ist es jedoch ebenfalls mglich, vom Atari
aus den gesamten Speicher des SuperChargers (abzglich der fr die
Toolbox reservierten Bereiche) verwalten zu knnen, ohne eine
einzige Zeile V30-Assembler schreiben zu mssen.



        SC_GM        Hole Daten vom V30-Speicher
        =====        ===========================

Entry:   D0.W = $0007
         D1.W = DMA-Adresse (0-7)
         D2.L = Lnge (maximal 64K)
         D3.L = V30 Segment (high-word) und Offset (low-word)
         A0.L = Zieladresse im Atari-Speicher
Exit:    D0.L = Result-Code

SC_GM fordert einen Speicherbereich vom SuperCharger an und legt
diesen im durch A0 angegebenen Atari-Speicher ab. Mit den Funk-
tionen SC_SM und SC_GM ist es beispielsweise mglich, den
SuperCharger-Speicher als Ramdisk fr TOS-Programme nutzbar zu
machen. Im unserer Beispielapplikation "SC_RAM.TTP" haben wir von
dieser Mglichkeit lediglich deshalb keinen Gebrauch gemacht, um
das gesamte Funktionsspektrum der Toolbox vorfhren zu knnen.


                                9

        SC_EXEC      Fhre V30-Programm aus
        ========     ======================

Entry:   D0.W = $0008
         D1.W = DMA-Adresse (0-7)
         D3.L = V30 CS-Register (high-word) und IP (low-word)
Exit:    D0.L = Result-Code

SC_EXEC startet ein im SuperCharger-Speicher befindliches V30-
Programm. Die Startadresse legt der Atari durch den Inhalt des
D3.L Registers fest. Das V30-Register CS (Code Segment) wird mit
dem in den Bits 31-16 des Registers D3.L angegebenen Wert geladen.
Der V30-Instruction-Pointer wird mit den Bits 15-0 des Registers
D3.L geladen. Die Rckkehr zum Scheduler kann durch einen
entsprechenden Software-Interupt auf V30-Seite erfolgen (s.u.).






3. Funktionen wenn im SuperCharger ein Anwenderprogramm luft

Luft ein V30-Anwenderprogramm im SuperCharger, so kann dieses
Programm mit Hilfe der Toolbox mit dem gleichzeitig im Atari
laufenden Programm kommunizieren. Zu diesem Zweck mssen beide
Programme jeweils paarweise zusammenpassende Funktionen aufrufen,
also beispielsweise der Atari eine Funktion "Send Byte" und der
V30 eine Funktion "Get Byte".

        SC_SD        Sende Daten zum SuperCharger
        =====        ============================

Entry:   D0.W = $0004
         D1.W = DMA-Adresse (0-7)
         D2.L = Lnge (maximal 64K)
         A0.L = Quelladresse im Atari-Speicher
Exit:    D0.L = Result-Code

Bentigt auf SuperCharger-Seite die Funktion:
    receivedata (int 60h, fkt# 4)

VORSICHT: Wenn aufgrund eines fehlerhaften Protokolls des
Benutzer-Programms der SuperCharger mehr Daten erwartet, als der
Atari sendet, kann es zu einem DMA-Bus Konflikt kommen!

Die Funktion sendet einen Datenblock von maximal 64 KB Lnge zum
SuperCharger. Der Datentransfer geht besonders schnell, wenn der
Anwender darauf achtet, da A0 eine gerade Adresse angibt und die
Lnge des Datenblocks ein Vielfaches von 512 ist. Dies ist jedoch
keine Voraussetzung zur Verwendung von SC_SD.

                                10

        SC_RD        Empfange Daten vom SuperCharger
        =====        ===============================

Entry:   D0.W = $0005
         D1.W = DMA-Adresse (0-7)
         D2.L = Lnge (maximal 64K)
         A0.L = Zieladresse im Atari-Speicher
Exit:    D0.L = Result-Code

Bentigt auf SuperCharger-Seite die Funktion:
    senddat (int 60h, fkt# 5)

VORSICHT: Wenn aufgrund eines fehlerhaften Protokolls des
Benutzer-Programms der SuperCharger mehr Daten senden will, als
der Atari erwartet, kann es zu einem DMA-Bus Konflikt kommen!

Die Funktion empfngt einen Datenblock von maximal 64 KB Lnge vom
SuperCharger. Der Datentransfer geht besonders schnell, wenn der
Anwender darauf achtet, da A0 eine gerade Adresse angibt und die
Lnge ein Vielfaches von 512 ist. Dies ist jedoch keine
Voraussetzung zur Verwendung von SC_RD.


        SC_SB        Sende Byte zum SuperCharger
        =====        ===========================

Entry:   D0.W = $0009
         D1.W = DMA-Adresse (0-7)
         D2.B = Zu sendendes Byte
Exit:    D0.L = Result-Code

Bentigt auf SuperCharger-Seite die Funktion:
    getbyte (int 60h, fkt# 9)

Sendet ein einzelnes Byte zum SuperCharger. Diese Funktion kann
beispielsweise verwendet werden, um einem V30-Anwenderprogramm
eine Funktionsnummer zu bermitteln. Das Byte wird nicht im
Speicher des SuperChargers, sondern im AL-Register der V30-CPU
abgelegt.



        SC_RB        Empfange Byte vom SuperCharger
        =====        ==============================

Entry:   D0.W = $000A
         D1.W = DMA-Adresse (0-7)
Exit:    D0.L = Result Code
         D2.B = Empfangenes Byte

Bentigt auf SuperCharger-Seite die Funktion:
    sendbyte (int 60h, fkt# 10)

Empfngt ein Byte vom SuperCharger. Mit dieser Funktion kann dem
Atari beispielsweise mitgeteilt werden, ob eine Funktion korrekt
ausgefhrt werden konnte (bertragung eines Boolean-Wertes).


                                11

7. Die Funktionen der SuperCharger-TB fr V30-Programme
================================================================

Unter dem Scheduler stehen drei Funktionen zur Verfgung, die
ausschlielich durch den Atari gesteuert werden. Diese werden nur
der Vollstndigkeit halber noch einmal aufgefhrt. Die genaue
Erluterung ist oben zu entnehmen.



    1. Datenblock einladen:
        Der Atari bergibt die Anzahl der Daten in Bytes
        (max. 64K), das Zielsegment und den Zieloffset im
        SuperCharger-Speicher.



    2. Datenblock auslesen:
        Der Atari bergibt die Anzahl der Daten in Bytes
        (max. 64K), das Quellsegment, den Quelloffset.



    3. Programm zur Ausfhrung bringen:
        Der Atari bergibt einen Segment-Wert, der in das
        CS-Register geladen wird und einen Offset-Wert, der in
        den IP geladen wird. Dadurch wird der Scheduler
        verlassen, kann jedoch durch eine Funktion nach
        Programmende wieder aktiviert werden.
        Zu beachten ist, da sich beispielsweise die
        Speicheradressen 0000:3000 und 0300:0000 physikalisch
        nicht unterscheiden, aber der 8086-Assembler durch ein
        solches Verndern der Startadresse falsche Offset-Werte
        im Code erzeugen wrde.


                                12

Fr ein laufendes Programm sind die Toolboxfunktionen durch
einen Aufruf des Interrupts 60h erreichbar. Die eigentliche
Funktionsnummer wird im Register AH bergeben. Alle hier aufge-
fhrten Funktionen sind selbstsynchronisierend, das heit, da der
Rcksprung aus dem Interrupt erst nach erfolgter Beendigung des
Auftrags erfolgt.



Funktion 0: Terminate
    entry:   ah:0
    exit:    Keine Rckkehr vom Interrupt, Scheduler luft.

Diese Funktion dient dazu, das Programm abzubrechen und den
Scheduler zu starten, so da beispielsweise ein neues Programm
geladen und gestartet werden kann.



Funktion 1: Killtb
    entry:   ah:1
    exit:    Keine Rckkehr vom Interrupt, Idle-Loop luft

Durch diese Funktion wird die Toolbox gelscht, der DMA-Bus wird
freigegeben und der SuperCharger kann nur durch eine SC_BOOT
Funktion des Atari bzw. durch ABIO wieder aktiviert werden.



Funktion 2: Intserv ist nur fr Systemprogrammierer gedacht und im
entsprechenden Kapitel beschrieben.



Funktion 3: reserviert, als Fehlerbehandlung wird der Scheduler
angesprungen !!



Funktion 4: Receivedata
    entry:   ah:4
             es:di Zieladresse des Datenblocks
             cx:Anzahl der zu empfangenden Bytes
    exit:    keine Register werden verndert

Eine Anzahl Bytes werden durch das Programm gesteuert vom Atari
empfangen und in den SuperCharger-Speicher geschrieben.



Funktion 5: Senddat
    entry:   ah:5
             ds:si Quelladresse
             cx: Anzahl der zu transferierenden Bytes
    exit:    keine Register werden verndert

Eine Anzahl Bytes werden durch das Programm gesteuert aus dem
SuperCharger-Speicher an den Atari gesendet.


                                13

Funktionen 6-8: reserviert, als Fehlerbehandlung wird der
Scheduler angesprungen !!



Funktion 9: Getbyte
    entry:   ah: 9
    exit:    al: Datum, sonst keine Register gendert.

Ein Datum wird nach AL empfangen.



Funktion 10: Sendbyte
    entry:   ah: 0ah
             al: Zu sendendes Byte
    exit:    Keine Register werden verndert

Ein Datum wird von AL gesendet.


                                14

8. Erweiterte Funktionen der Toolbox fr Systemprogrammierer
================================================================


Die erweiterten Funktionen sind schneller, aber weniger abge-
sichert als die o.g. allgemeinen Funktionen. Das bedeutet, da der
Programmierer noch genauer ber den Status der beiden Maschinen zu
einem gegebenen Zeitpunkt informiert sein mu, aber dafr eine
ungleich schnellere Kommunikation zur Verfgung hat. Im folgenden
werden die erweiterten Funktionen in drei Gruppen beschrieben:

    1. Atari-seitige Kommunikations-Funktionen
    2. SuperCharger-seitige Kommunikations-Funktionen
    3. SuperCharger-seitige Interrupt-Services




    Atari-seitige Kommunikations-Funktionen
----------------------------------------------------------------
Die Interruptstruktur des Atari lt es leider nicht zu, da
whrend einer Kommunikation auf dem DMA-Bus alle Interrupts er-
laubt werden. Daher sollte der Programmierer dafr sorgen, da vor
der Adressierung die Interrupts ausgeschaltet und erst nach der
Freigabe des DMA-Busses wieder zugelassen werden. Andernfalls kann
es zu DMA-Bus-Konflikten kommen. Typische Symptome fr falsche
Interrupt-Handhabung sind Programme, die manchmal funktionieren
und dann wieder scheinbar grundlos "abstrzen".

Bei abgeschalteten Interrupts drfen keine Funktionen des Atari
Betriebssystems (GEMDOS, BIOS, XBIOS) verwendet werden.

Geeignete Befehlsfolgen zum An- und Abschalten der Interrupts auf
dem Atari sind die folgenden, wobei der Supervisor-Mode des 68000
erforderlich ist:

vblvec   equ     $00000070    * VBL Vektor
mfpenb   equ     $fffffa09    * MFP enable reg B

INT_OFF  move.l   vblvec,oldvbl * Alten Vektor sichern
         move.l   #myvbl,vblvec * eigenen VBL installieren
         move.w   sr,savsr     * Inhalt von SR retten
         or.w    #$0700,sr    * Interrupts aus
         bset    #7,mfpenb    * DMA Kommunikation ein
         rts

INT_ON   bclr    #7,mfpenb    * DMA Kommunikation aus
         move.l   oldvbl,vblvect* VBL restaurieren
         move.w   savsr,sr     * SR restaurieren
         rts

myvbl    rte                 * VBL tut garnichts!

oldvbl   ds.l    1           * Alter VBL-Vektor
savsr    ds.w    1           * Alter SR-Inhalt

                                15

Nach dem Aufruf von INT_OFF kann der SuperCharger adressiert
werden. Anders als bei den in vorherigen Kapiteln erklrten
Funktionen erfolgt jedoch KEINE AUTOMATISCHE FREIGABE des DMA-
Busses.

Grundstzlich gilt, da die DMA-Adressierung nur durch den 68000,
die DMA-Freigabe jedoch nur durch den V30 Prozessor ausgefhrt
werden kann. Es liegt in der Verantwortung des Programmierers,
dies zu beachten und den DMA-Bus am Ende der Kommunikation wieder
freizugeben!



        SC_LLCAD     Low Level: Adressiere SuperCharger
        ========     ==================================

Entry:   D0.W = $000B
        D1.W = DMA-Adresse des SuperChargers (Bereich 0-7)
Exit:    -

Vorsicht! Vor Aufruf von SC_LLCAD mssen die Interrupts des Atari
abgeschaltet werden! Die Funktion adressiert den SuperCharger auf
dem DMA-Bus. Nach erfolgter Adressierung sollte die Kommunikation
mglichst unverzglich folgen, um den DMA-Bus schnell wieder
freigeben zu knnen. Es kann zu Problemen mit dem
Tastaturprozessor des Atari kommen, wenn die Interrupts zu lange
abgeschaltet bleiben (Overruns).


        SC_LLCSB     Low Level: Sende 1 Byte zum SuperCharger
        ========     ========================================

Entry:   D0.W = $000C
        D2.B = Zu sendendes Byte
Exit:    -

Sendet ein Byte zu dem SuperCharger, der zuletzt adressiert worden
ist. Die Interrupts des Atari mssen abgeschaltet sein.


        SC_LLCGB     Low Level: Empfange 1 Byte
        ========     ==========================

Entry:   D0.W = $000D
Exit    D2.B = Empfangenes Byte

Empfngt ein Byte von dem SuperCharger, der zuletzt adressiert
worden ist. Die Interrupts des Atari mssen abgeschaltet sein.

                                16

        SC_LLCTO     Low Level: Tooltransout
        ========     =======================

Entry:   D0.W = $000E
        D2.L = Gre des zu sendenden Speicherbereichs
               (max. 64K)
        A0.L = Startadresse der zu bertragenden Daten
Exit:    -

Schickt einen Speicherbereich zu dem SuperCharger, der zuletzt
adressiert worden ist. Die Interrupts des Atari mssen abge-
schaltet sein.



        SC_LLCTI     Low Level: Tooltransin
        ========     ======================

Entry:   D0.W = $000F
         D2.L = Gre des zu empfangenden Speicherbereichs
                (max. 64K)
         A0.L = Startadresse ab der die Daten gespeichert werden
Exit:    -

Empfngt einen Datenblock von dem SuperCharger, der zuletzt
adressiert worden ist. Die Interrupts des Atari mssen abge-
schaltet sein.

                                17

SuperCharger-seitige Kommunikations-Funktionen
----------------------------------------------------------------


Diese Funktionen werden NICHT ber den Interrupt 60h, sondern ber
'call segment:offset' angesprochen und enden entsprechend mit
einem retf. Es folgt eine Auflistung der Funktionen mit Ein-
sprungadresse und evt. Parametern.

0000:1000 WAITSLAVE

SuperCharger wartet in dieser Routine auf eine Adressierung durch
den Atari. Diese Routine leitet meist (und am einfachsten) eine
Kommunikation ein. Eine andere Mglichkeit statt des hier
vorliegenden Pollings ist die Verwendung des unten beschriebenen
Interrupts. Keine Parameter werden bentigt.



0000:1004 QUITSLAVE

Der SuperCharger gibt den DMA-Bus frei. Diese Routine MUSS vor
einem DMA-Zugriff einer anderen Einheit (Festplatte, Diskette,
Laserprinter) aufgerufen werden.



0000:1008 SBYTE

Das Byte in AL wird an den Atari gesendet. Keine automatische
Freigabe des DMA Busses!



0000:100C GBYTE

Das empfangene Byte befindet sich nach Rckkehr in AL. Keine
automatische Freigabe des DMA Busses!



0000:1010 TOOLMOUT

Die Funktion sendet ohne automatische Adressierung bzw. Freigabe
des DMA-Busses CX Bytes von DS:SI an den Atari



0000:1014 TOOLMIN

Die Funktion empfngt ohne automatische Adressierung bzw. Freigabe
des DMA-Busses CX Bytes nach ES:DI.

                                18

SuperCharger-seitige Interrupt-Services
----------------------------------------------------------------


Die Toolbox stellt dem Programmierer zwei Timer, einen 8087-NMI
sowie einen Adressierungs-Interrupt zur Verfgung. Die Interrupts
sind bei erstmaligem Aufruf der Toolbox alle maskiert. Die mit 0
gekennzeichneten Biststellen mssen beim Aufruf auch 0 sein, da
sonst andere, nicht dokumentierte und nicht initialisierte
Interrupts auftreten knnten!

Die Freigabe bzw. das Sperren der Interrupts erfolgt ber einen
Aufruf des Interrupts 60h mit der Funktionsnummer 2.



    ACHTUNG!!!   ACHTUNG!!!   ACHTUNG!!!   ACHTUNG!!!


>>> Wenn irgendeiner dieser Interrupts freigegeben wird, werden
>>> die Adressen f000:0008 und f000:000a berschrieben und
>>> mssen freigehalten werden !!!!! Werden keine Interrupts
>>> verwendet, ist dies nicht der Fall.



Interrupt 60h, Funktion 2:
entry:   ah=02
         al=x00xxx00
            |  |||
            |  ||---->1: programmierbarer Timer Int. freigeben
            |  |----->1: 16,6 Hz Timer Tick-Int. freigeben
            |  ------>1: Adressierungs-Int. freigeben
            --------->1: 8087-NMI freigeben (vector 0000:0008)

        dl: (wenn der programmierbare Timer freigeschaltet ist)
            0:16666 Hz
            1: 8347 Hz
            2: 4166 Hz
            3: 2083 Hz
            4: 1042 Hz
            5:  521 Hz
            6:  259 Hz
            7:  130 Hz

exit:    alle Register unverndert.


                                19

Die folgende Tabelle gibt die Interrupts an, die vom Anwenderpro-
gramm bereitgestellt und initialisiert werden mssen, und die von
der Toolbox dann angesprochen werden:

NAME               Vektor#  Trigger
.......................................................
Adressierungsint   int 61h  SC wurde adressiert
Timer1             int 62h  16,6Hz-Timer Ticker
Timer2             int 63h  schrittweise programmierbarer Timer
NMI                int 2    8087

Beim Start der Toolbox sind alle Interrupts auf IRET initiali-
siert, mit der Ausnahme, da der Adressierungsinterrupt vorher den
DMA-Bus wieder freigibt.

                                20

9. Beispielapplikation: Resetfeste TOS-RAM-Disk mit der Toolbox
================================================================

Die auf der Utility Disk befindliche Datei SC_RAM.S enthlt den
Sourcecode zu einer Resetfesten Ramdisk, die den Speicher des
SuperChargers unter TOS zugnglich macht. Sie wurde fr die
Toolbox programmiert und ist ausfhrlich im Sourcecode
dokumentiert. Der Source-Code ist fr den DEVPAC2 Assembler
geschrieben. Eine bertragung fr andere Assembler drfte aber
keinerlei Probleme bereiten.

Das zugehrige V30-Programm heit RAMDISK.ASM.  Der Code wurde fr
TASM 1.0 von BORLAND geschrieben, drfte aber auch fr andere
Assembler verwendbar sein. Zu beachten ist, da die .286-Direktive
benutzt wurde, um V30-Befehle wie PUSHA etc. verwenden zu knnen.
Das fr den Atari bentigte .BIN-File wird durch folgende
Anweisungen erzeugt:

TASM RAMDISK.ASM;
TLINK RAMDISK;
EXE2BIN RAMDISK.EXE RAMDISK.BIN

Die lauffhige Ramdisk SC_RAM.TTP befindet sich ebenfalls auf der
Diskette. Die Ramdisk ist weder auf Geschwindigkeit noch auf
Kompaktheit optimiert. Sie dient vor allem dem Zweck, mglichst
viele Routinen der Toolbox sinnvoll einzusetzen, um dem
Programmierer eine universelle Beispielapplikation zur Verfgung
zu stellen. Eine Ramdisk, die den SuperCharger-Speicher
ausschlielich ber die Funktionen SC_SM (Send Memory) und SC_GM
(Get Memory) ansprechen wrde, kme ohne V30-Programmcode aus und
wre vermutlich auch schneller zu realisieren. Dies war jedoch
nicht unser Ziel!

Da die einzelnen Schritte der Initialisierung und des Betriebs von
SC_RAM im Sourcecode dokumentiert sind, soll an dieser Stelle die
allgemeine Vorgehensweise beschrieben werden:

Die Installation von SC_RAM vollzieht sich in zwei Schritten:
Zunchst wird die Kommunikation zum SuperCharger aufgebaut. Damit
nach einem Atari RESET kein Datenverlust auftritt, wird mittels
SC_STAT geprft, ob die Toolbox schon aktiv ist. Ist dies nicht
der Fall, wird sie mittels SC_BOOT aktiviert und danach mit SC_SM
und SC_EXEC das V30-seitige Ramdisk-Programm geladen und
gestartet.
Erst wenn diese Schritte erfolgreich verlaufen sind, installiert
sich SC_RAM im Atari Betriebssystem. Zu diesem Zweck werden die
Vektoren BPB, MEDIACHANGE und RWABS auf eigene Routinen
"umgebogen".
BPB liefert immer einen vorgefertigten Bios Parameter Block, an
dem lediglich der Eintrag "Free Clusters" je nach Speicherausbau
des SuperChargers modifiziert wird.
MEDIACHANGE liefert immer den Wert "Kein Wechsel".
Wird RWABS aufgerufen, so schickt SC_RAM fr jeden einzelnen
Sektor einen entsprechenden Befehlscode sowie die Sektornummer an
das V30-Programm. Danch werden die Daten empfangen bzw. gesendet.

                                21

Befehlssyntax der Ramdisk:
==========================

In der Befehlszeile der Ramdisk kann angegeben werden, welcher
SuperCharger als Ramdisk benutzt werden soll und welche
Laufwerkskennung gewnscht wird. Die genaue Syntax ist im File
SC_RAM.S erlutert. Wird keine Befehlszeile angegeben oder
SC_RAM.TTP nach SC_RAM.PRG umbenannt, wird Gerteadresse 3 als
Laufwerk I: eingebunden. Dies entspricht beispielsweise der
Befehlszeile "3I".


                                22

================================================================
Anhang A: Quick Reference Tables fr Toolbox-Funktionen V30

---------------------
Funktion 0: Terminate
    entry:   ah:0
    exit:    Keine Rckkehr vom Interrupt, Scheduler luft.


---------------------
Funktion 1: Killtb
    entry:   ah:1
    exit:    Keine Rckkehr vom Interrupt, Idle-Loop luft


---------------------
Funktion 4: Receivedata
    entry:   ah:4
             es:di Zieladresse des Datenblocks
             cx:Anzahl der zu empfangenden Bytes
    exit:    keine Register werden verndert


---------------------
Funktion 5: Senddat
    entry:   ah:5
             ds:si Quelladresse
             cx: Anzahl der zu transferierenden Bytes
    exit:    keine Register werden verndert


---------------------
Funktion 9: Getbyte
    entry:   ah: 9
    exit:    al: Datum, sonst keine Register gendert.


---------------------
Funktion 10: Sendbyte
    entry:   ah: 0ah
             al: Zu sendendes Byte
    exit:    Keine Register werden verndert



                                23

================================================================
Anhang B: Quick Reference Tables fr Toolbox-Funktionen 68000

Jede Funktion liefert im D0-Register den Result-Code

Funktion SC_STAT              Get Toolbox Status
    entry:   D0.W = $0002
             D1.W = Device

Funktion SC_BOOT              Boot Toolbox
    entry:   D0.W = $0003
             D1.W = Device

Funktion SC_SD                Send Data
    entry:   D0.W = $0004
             D1.W = Device
             D2.L = Size
             A0.L = Address

Funktion SC_GD                Get Data
    entry:   D0.W = $0005
             D1.W = Device
             D2.L = Size
             A0.L = Address

Funktion SC_SM                Send Memory (Scheduler)
    entry:   D0.W = $0006
             D1.W = Device
             D2.L = Size
             D3.L = Segment, Offset
             A0.L = Address

Funktion SC_GM                Get Memory (Scheduler)
    entry:   D0.W = $0007
             D1.W = Device
             D2.L = Size
             D3.L = Segment, Offset
             A0.L = Address

Funktion SC_EXEC
    entry:   D0.W = $0008      Execute Program (Scheduler)
             D1.W = Device
             D3.L = Segment, Offset

Funktion SC_SB                Send 1 Byte
    entry:   D0.W = $0009
             D1.W = Device
             D2.B = Byte to send

Funktion SC_GB                Get 1 Byte
    entry:   D0.W = $000A
             D1.W = Device
    exit:    D0.L = Result-Code
             D2.B = Received Byte



                                24

================================================================
Anhang C: Speicherlayout des SuperChargers unter der Toolbox

Das Speicherlayout eines SuperChargers mit 512K Ram ist in 3
zusammenhngende Bereiche aufgeteilt. Dies liegt an den Vorgaben,
die uns die PC-Emulation auferlegt (Video Speicher, BIOS-Area).
Daher geben wir die Speicheraufteilung getrennt fr 512KB und 1MB
SuperCharger an:

            SuperCharger mit 512 KB RAM
            ===========================

    0000:0000 - 0000:03FF Reserviert fr INT-Vektortabelle
    0000:0400 - 0000:2FFF Reserviert fr SuperCharger Toolbox
    0000:3000 - 6000:7FFF Freier RAM-Bereich
    B000:8000 - B000:FFFF Freier RAM-Bereich
    F000:0000 - F000:FFFF Freier RAM-Bereich (siehe *1)



            SuperCharger mit 1 MB RAM
            =========================

    0000:0000 - 0000:03FF Reserviert fr INT-Vektortabelle
    0000:0400 - 0000:2FFF Reserviert fr SuperCharger Toolbox
    0000:3000 - F000:FFFF Freier RAM-Bereich (siehe *1)


    *1) Falls spezielle Interrupts durch die im Kapitel
        "Erweiterte Funktionen der Toolbox fr Systemprogram
        mierer" angesprochenen Funkktionen freigegeben werden,
        gilt zustzlich:

    F000:0008 - F000:000B Reserviert fr SuperCharger Toolbox


                                25

ANHANG D: Siehe Datei SCTB_INC.S

ANHANG E: Siehe Datei SC_RAM.S

ANHANG F: Siehe Datei RAMDISK.ASM


