                              Stand: 29. Januar, im Jahre des CPC 2025

Datei: 'API-C-DE.DOK' (63 Seiten)

Datei zur Dokumentation aller  Future  Operating System Funktionen des
aktuellen OS  System  .8  Die  fôr  den  Anwender  oder  Programmierer
wichtigen OS Funktionen aus ROM C werden erklðrt und lokalisiert.


       Alle OS Funktionen werden in folgender Form beschrieben:


1. Kurzbeschreibung: In  einem  Satz  wird  kurz  die  Funktion der OS
Funktion beschrieben.

2. Label: Mit  diesem  Label  wird  die  OS  Funktion  im  Source Code
bezeichnet. In der mitgelieferten  Label-Bibliothek (siehe Datei #EQU-
API.DEU) mit den  jehweils  aktuellen  ROM  Adressen  findet ebenfalls
dieses Label Verwendung. Aus Grônden  der Kompatibilitðt sollte man in
eigenen Programmen alle OS- / System-Funktionen (und System-Variablen)
stets mit diesen Labels ansprechen.

3. ROM-Nummer: Hier ist die  logische  ROM  - Nummer des FutureOS ROMs
angegeben, in dem die entsprechende OS Funktion zu finden ist.
Manche OS Funktionen kommen, wegen ihrer  Kôrze, in mehreren ROMs vor,
dann sind hier auch mehrere ROM Nummern angegeben.
Da die ROM Nummer logisch zu  verstehen  ist, sollte man sie nicht mit
dem physikalischen ROM Select gleichsetzen.  Wie man die physikalische
ROM Nummer eines der FutureOS ROMs ermittelt wird im Handbuch erklðrt.

4. Startadresse: Gibt  die Einsprung-Adresse der OS Funktion an. Falls
diese in mehreren ROMs  vorkommt,  wird  hier  auch eine entsprechende
Anzahl von Adressen angegeben.

5. Einsprungbedingungen:  Die  Einsprungbedingungen  der  OS  Funktion
werden beschrieben und es wird sowohl auf Registerinhalte als auch auf
RAM-Variablen eingegangen.

6.  Aussprungbedingungen:  Die  Aussprungbedingungen  der  OS-Funktion
werden beschrieben und es wird sowohl auf Registerinhalte als auch auf
RAM-Variablen eingegangen.

7. Manipuliert: Es werden alle  manipulierten oder zerstórten Register
und RAM-Variablen  wiedergegeben.  Manchmal  werden  auch manipulierte
Pheripheriebausteine wiedergegeben.

8. Beschreibung: Es folgt  eine  vollstðndige  Erklðrung der Anwendung
und Wirkungsweise der beschriebenen OS Funktion.

9. Bitte Beachten: Es  werden  einige  wichtige  Details kurz erklðrt.
Dies ist besonders wichtig,  da  alle  OS  Funktionen kompromiºlos auf
Hóchstgeschwindigkeit  getrimmt worden  sind.  Bei falscher Handhabung
kann es zu Problemen mit der Systemstabilitðt kommen.

Das ROM C stellt diverse OS Funktionen zur Verfôgung, z.B. zum Bewegen
von Daten, fôr die  DIRectory  /  InHaltsVerzeichnis (IHV) Verwaltung,
Laden und Speichern usw.
Viele High-Level OS Funktionen befinden sich in diesem ROM.


Die aktuelle Version dieser Datei finden Sie auch im Internet unter:

http://www.FutureOS.de

        EXTREM SCHNELLES FÔLLEN EINES SPEICHERBEREICHS
        ==============================================

Kurzbeschreibung: Diese OS  Funktion  stellt  die  schnellste  Art dar
einen gróºeren Speicherbereich mit  einem  Byte  oder  einem zwei Byte
Wort zu fôllen.

Label: F_FILL8 (Speicher mit einem Byte fôllen, 8 Bit) oder
       F_FILL6 (Speicher mit einem zwei Byte Wort fôllen, 16 Bit)

ROM-Nummer: C

Startadresse: &C01E (F_FILL8) oder &C01F (F_FILL6)

Einsprungbedingungen: BC = Lðnge des zu fôllenden Speicherbereichs

D  = Wert mit dem gefôllt werden soll, bei der 8 Bit Version F_FILL8.
..... bzw. .....
DE = Wert mit dem gefôllt werden soll, bei der 16 Bit Version F_FILL6.
HL = Startadresse des zu fôllenden Speicherbereichs.

Aussprungbedingungen: Der Speicherbereich ist gefôllt.

Manipuliert: AF, B, HL, HL' und bei F_FILL8 zusðtzlich E

Beschreibung:  Diese  OS  Funktion   fôllt  einen  Speicherbereich  in
kôrzester Zeit. Um  so  gróºer  der  zu  fôllende Speicherbereich ist,
desto schneller wird die OS Funktion. Pro Byte vergehen min. 1.5 us.
Man verwendet die OS Funktion z.B. um die 16 K des Bildschirmspeichers
mit &00 zu fôllen, sprich den Bildschirm zu lóchen.
Vor Aufruf der OS Funktion lðd  man  HL  mit der Adresse des ersten zu
fôllenden Bytes, BC erhðlt die Anzahl  der  zu fôllenden Bytes. Die OS
Funktion fôllt den Speicher  aufsteigend.  Es  wird  also der Speicher
zwischen HL und HL + BC  gefôllt.  Dies geschieht entweder mit einem 8
Bit Wert, hierzu verwendet man das  Label  F_FILL8, oder man fôllt den
Speicher mit einem 16 Bit Wert, dies geschieht dann mit F_FILL6. Dabei
wird das Low- immer vor dem High-Byte in den Speicher geschrieben.
Will man mit 8 Bit fôllen so lðd  man vor Aufruf der OS Funktion das D
Register mit dem entsprechendem 8 -  Bit Wert. Bei Verwendung eines 16
Bit Wertes lðd man diesen in das DE Register. Beispiele:

TEST_FILL_8     LD      BC,&4000 ;&4000 Bytes werden
                LD      D,&88    ;mit dem Byte &88 gefôllt.
                LD      HL,&2000 ;Fôllen ab Adresse &2000
                CALL    F_FILL8

TEST_FILL_16    LD      BC,&4000 ;&4000 Bytes werden
                LD      DE,&1234 ;mit dem Doppel-Byte &1234 gefôllt.
                LD      HL,&2000 ;Fôllen ab Adresse &2000
                CALL    F_FILL6

Falls ROM C vor Aufruf der OS Funktion nicht eingeblendet ist, so sind
folgende Befehle als erste Zeile einzufôgen:

        LD   BC,(&FF0D) ;physikalische Nummer von ROM C holen
        OUT  (C),C      ;und ROM C einblenden!

Bitte Beachten: Diese OS  Funktion  ôberschreibt jeden ihr angegebenen
Speicherbereich.  Wenn  man   also   ein   Register   vor  dem  Aufruf
versehentlich mit einer  falschen  Adresse  lðd,  dann  kann  dies die
Stabilitðt des Systems gefðhrden.
Beim 16-Bit fôllen wird zuerst das Low-Bytes (Register E) und dann das
High-Byte (Register D) geschrieben.

        KOPIEREN EINES SPEICHERBEREICHES GRÓºER 256 BYTES
        =================================================

Kurzbeschreibung: Diese  OS  Funktion  ermóglicht  es  einen Speicher-
bereich von mindestens 256 Bytes extrem schnell zu kopieren.

Label: F_MOVE

ROM-Nummer: C

Startadresse: &C0C8

Einsprungbedingungen: BC =  Lðnge  des  zu kopierenden Speicherblocks.
Diese Lðnge muº mindestens &100  betragen.  Das  B Register darf nicht
gleich Null sein.

DE = Zieladresse des zu kopierenden Blocks.

HL = Quelladresse des zu kopierenden Blocks.

Aussprungbedingungen: Der Block wurde kopiert.

Manipuliert: AF, BC, DE und HL

Beschreibung: Ein Speicherbereich  der  mindestens  256  Bytes enthðlt
wird mit Hóchstgeschwindigkeit kopiert. Dabei kann im Speicher auf und
abwðrts  kopiert  werdn.  Quell-  und   Zielblock  kónnen  sich  dabei
ôberschneiden. Vor Aufruf der OS  Funktion  muº  HL auf des erste Byte
des Quellblocks zeigen, DE  muº  auf  das  erste  Bytes des Zielblocks
zeigen. Das Register BC enthðlt die Anzahl der zu kopierenden Bytes es
muº aber mit mindestens 256 = &100 gefôllt sein. Kleinere Blócke bitte
mit LDDR oder mit LDIR kopieren.

Beispiel:

HOLE_BILD       LD   DE,&C000   ;Zieladresse (zu kopierender Block)

        LD   HL,&4000   ;Quelladresse (zu kopierender Block)

        LD   B,H                ;Lðnge des zu kopierenden Blocks
        LD   C,L                ;entspricht zufðllig HL, beide &4000

        CALL F_MOVE


Bitte Beachten: Ist bei Aufruf  der  OS  Funktion  das Register BC mit
einem Wert kleiner als 256 = &100 geladen, so werden knapp 64K kopiert
und das System wird wohl abschmieren.
















          BLOCK SCHNELL SPEICHERAUFWÐRTS KOPIEREN
          =======================================

Kurzbeschreibung: Diese OS Funktion ist ein Teil von F_MOVE, sie dient
dazu Blócke  von  mindestens  256  Bytes  im  Speicher  nach  oben  zu
kopieren.

Label: LDD_256

ROM-Nummer: C

Startadresse: &C2E8

Einsprungbedingungen:
BC = Blocklðnge in Bytes, mindestens 256 = &100.
DE > HL
DE = oberes Ende des Zielblocks.
HL = oberes Ende des Quellblocks.

Aussprungbedingungen: Der Block ist kopiert worden.

Manipuliert: AF, BC, DE und HL

Beschreibung: Dieser  OS  Funktion  dient  dazu  einen  Block  mit der
Mindestlðnge von  256  =  &100  Bytes  zu  ôbertragen.  Dabei  môº der
Zeilblock oberhalb  des  Quellblocks  liegen.  Wenn  der  Block  nicht
teilweise auf sich selbst kopiert  wird,  dann  kann der Quellblock an
eine beliebige  Adresse  kopierte  werden,  nur  eben  nicht  auf sich
selber. Will man den Block  also  teilweise  auf sich selber kopieren,
dann immer nur speicheraufwðrts.

Bitte Beachten: Dei Blocklðnge  BC  muº  mindestens  256  = &100 Bytes
sein, da  daº  System  sonst  mit  hoher  Warscheinlichkeit abstôrtzen
wôrde.






























           BLOCK SCHNELL SPEICHERABWÐRTS KOPIEREN
           ======================================

Kurzbeschreibung: Diese OS Funktion ist ein Teil von F_MOVE, sie dient
dazu um Speicherbereiche von minimal  256 = &100 Bytes speicherabwðrts
zu kopieren.

Label: LDI_256

ROM-Nummer: C

Startadresse: &C0D0

Einsprungbedingungen:
BC = Blocklðnge in Bytes, mindestens 256 = &100.
DE < HL
DE = unters Ende des Zielblocks.
HL = unters Ende des Quellblocks.

Aussprungbedingungen: Der Block ist kopiert worden.

Manipuliert: AF, BC, DE und HL

Beschreibung: Dieser  OS  Funktion  dient  dazu  einen  Block  mit der
Mindestlðnge von  256  =  &100  Bytes  zu  ôbertragen.  Dabei  môº der
Zeilblock unterhalb  des  Quellblocks  liegen.  Wenn  der  Block nicht
teilweise auf sich selbst kopiert  wird,  dann  kann der Quellblock an
eine beliebige  Adresse  kopierte  werden,  nur  eben  nicht  auf sich
selber. Will man den Block  also  teilweise  auf sich selber kopieren,
dann immer nur speicherabwðrts.

Bitte Beachten: Die Blocklðnge in BC  muº  mindestens 256 = &100 Bytes
lang sein,  ist  dies  nicht  der  Fall  so  wird  das  System  mit an
Sicherheit grenzender Warscheinlichkeit abstôrtzen.






























            ZEICHENSATZ VOM ROM INS RAM KOPIEREN
            ====================================

Kurzbeschreibung: OS Funktion kopiert den ROM-Zeichensatz ins RAM.

Label: INRZ

ROM-Nummer: C

Startadresse: &C9AD

Einsprungbedingungen: RAMCHAR bestimmt den Bildschirm-Modus.

Aussprungbedingungen: Zeichensatz von ROM ins RAM kopiert.

Manipuliert: AF, BC, DE, HL, RAM &3800-&3FFF, unteres RAM aktiv

Beschreibung: Diese OS Funktion kopiert  den ROM Zeichensatz (alle 256
Zeichen) von &3800 bis &3FFF  an  die  selben Adressen ins untere RAM.
Nach der Rôckkehr ist das untere RAM eingeblendet. INRZ kann also auch
vom unterem RAM aus aufgerufen werden.
Der Video-Modus wird entsprechend der OS Variable RAMCHAR gesetzt.

Bitte Beachten: Der RAM Speicherbereich zwischen &3800 und &3FFF wurde
ôberschrieben.







































         TASTATUR-TABELLEN VOM ROM INS RAM KOPIEREN
         ==========================================

Kurzbeschreibung: OS Funktion kopiert  die  vier Tastatur-Tabellen vom
ROM ins RAM.

Label: INS_KMX

ROM-Nummer: C

Startadresse: &FCD5

Einsprungbedingungen: -

Aussprungbedingungen: Ab TAST_N,  TAST_S,  TAST_C  und  TAST_SC wurden
jeweils 80 Bytes Tasten-Daten aus ROM C ins System-RAM kopiert.

Manipuliert: AF, BC, DE, HL  und  jeweils  80 Bytes ab TAST_N, TAST_S,
TAST_C und TAST_SC

Beschreibung: Diese OS Funktion kopiert  die  Belegung aller 80 Tasten
vom ROM C ins System-RAM. Dabei  werden  fr die Ebenen Normal, Shift,
Control und Shift+Control jeweils 80  Bytes  kopiert. Und zwar jeweils
nach TAST_N  (&B980),  TAST_S  (&BA00),  TAST_C  (&BA80)  und  TAST_SC
(&BB00).
Die Quell-Daten dieser Tastatur-Tabellen  befinden  sich  in  ROM C ab
XAST_N (&FDAA). Hier kann  man  auch  dauerhafte  Änderungen ins ROM C
einbringen.

Bitte Beachten: Die bisherige Tastatur-Belegung wurde berschrieben.


































        SORTIEREN EINES ZUVOR EINGELESENEN DIRECTORYS
        =============================================

Kurzbeschreibung:  Ein  zuvor  eingelesenes  Inhaltsverzeichnis  einer
Diskette wird sortiert.

Label: TS_D_IN

ROM-Nummer: C

Startadresse: &FDA7

Einsprungbedingungen: D = aufgerundetes Highbyte  des oberen Endes des
Speicherbereichs in dem  sich  das  zu  sortierende Inhaltsverzeichnis
befindet.

REG16_1 = Lðnge des Inhaltsverzeichnisses  in  Bytes. z.B. &800 = 2048
Bytes beim Data Format oder &1000 =  4096 Bytes fôr das Vortex Format.
Es spielt keine Rolle zu  wieviel  Prozent  das Directory gefôllt ist,
die absolute Lðnge ist entscheident.

REG16_2 = Zeiger  auf  den   Anfang    des  zu   sortierenden Inhalts-
verzeichnisses. Es ist das erste, unterste Byte gemeint.

REG16_3 = REG16_2. Beide Variablen môºen den gleichen Wert enthalten.

REG16_5 = Zeiger  auf  den  Anfang  eines  Pufferspeicherbereichs, der
genau so groº ist wie das zu sortierende Inhaltsverzeichnis.

REG16_6 = REG16_5. Beide Variablen môºen den gleichen Wert enthalten.

REG16_7 = Zeiger auf das  Ende  des durch REG16_5 adressierten Puffer-
bereichs. Der Programmierer kann  diesen  Wert  durch die Addition von
REG16_5 + REG16_1 erhalten, muº ihn  aber  selber  in diese 16 Bit RAM
Variable laden.

Aussprungbedingungen: Das Inhaltsverzeichnis ist sortiert.

Manipuliert: AF, BC, DE, HL, REG16_0, REG16_3, REG16_4 und REG16_6

Beschreibung: Diese OS Funktion fôhrt der Reihe nach folgende Aktionen
aus. Zuerst werden  alle  leeren Inhaltsverzeichnis-Eintrðge ausgefil-
tert, dann werden die  gôltigen  Eintrðge numeroalphabetisch sortiert.
Zuletzt wird der restliche  Platz  im  Inhaltsverzeichnis mit dem Wert
&E5 aufgefôllt.
Am Beispiel des Directorys einer  Data-formatierten Disk wird hier die
Wirkungsweise besprochen. Angenommen das  Inhaltsverzeichnis wurde von
&6000 bis &6800  eingelesen.  Es  ist  also  &800  Bytes lang. Deshalb
schreiben wir in REG16_1 (Lðnge) den Wert &800. In REG16_2 und REG16_3
wird der Wert &6000 geladen, das  ist  der Start des DIRs. Desweiteren
benótigt die OS  Funktion  zum  sortieren  einen  Pufferbereich in der
selben Lðnge des Directoryblocks. Das das DIR also &800 Bytes lang ist
brauchen wir einen &800 Bytes  lange Pufferbereich, wir verwenden z.B.
den Bereich von &7000 bis &7800. In REG16_5 und REG16_6 laden wir also
den Wert &7000 (Start Pufferbereich). Und in REG16_7 laden wir nun den
Wert &7800. Nun  môssen  wir  noch  das  Prozessor-Register  D mit dem
Highbyte des  unsortierten  Inhaltsverzeichnisses  laden.  Dieser Wert
erhalten wir wenn wir die  Startadr.  des  DIR und die Lðnge addieren,
und anschlieºend durch 256 = &100  teilen.  Also &6000 + &800 = &6800.
Und &6800/&100 = &68. Register  D  wird  mit  &68  geladen. So und nun
kónnen wir diese SortierOS Funktion auch schon aufrufen.
Nðchste Seite gehts weiter. ...


Nachdem diese OS Funktion  das  Inhaltsverzeichnis  sortiert hat steht
das neue, sortierte Inhaltsverzeichnis dort wo auch das alte stand.
Bitte Beachten: Es muº  ein  Pufferbereich  zur  Verfôgung stehen, der
genauso groº ist,  wie  das  zu  sortierende  Inhaltsverzeichnis. Alle
Adressen sind so zu wðhlen,  daº  sie  durch  256 zu teilen sind, also
z.B. &100, &200, &300, ..., &8600, &8700, 8800.

Diese OS Funktion wird von der Benutzeroberflðche TURBO DESK verwendet.
























































        UMWANDLUNG ALLER 32 BYTE IN 16 BYTE EINTRÐGE
        ============================================

Kurzbeschreibung: Diese OS Funktion wird  von der TURBO DESK Benutzer-
oberflðche benutzt.

Label: DIRWA

ROM-Nummer: C

Startadresse: &FD9E

Einsprungbedingungen: TURBO_X muº einen gôltigen Wert enthalten.
Bei TURBO_A bis TURBO_M môssen von  den  8 Bytes jehweils die ersten 4
Bytes mit gôltigen Werten belegt sein. Bei inaktiven Laufwerken reicht
es aus deren Inaktivitðt im Tagging Byte festzuschreiben.
Es muº mindestens halb so viel freier Erweiter- ungsspeicher vorhanden
sein,  wie  die  Speichermenge,   die   alle  eingelesenen  Directorys
verbrauchen.

Aussprungbedingungen: Zu jedem eingelesenen  Directorys eins Laufwerks
existiert mun  ein  ausgabereifes  Directory,  das  in  den  Variablen
TURBO_A bis TURBO_M  beschrieben  wird.  Auºerdem  wurde  die Variable
TURBO_X aktualisiert.

Manipuliert: AF, BC, DE, HL, DE', HL', IY und XH

Beschreibung: Wðhlt man bei der Benutzeroberflðche TURBO DESK z.B. die
Directoy Funktion an, dann  werden  zuerst alle Directokry eingelesen.
Diese    Inhaltsverzeichnisse    môºen     anschlieºend     fôr    die
Bildschrimausgabe  aufbereitet  werden,   dies   ôbernimmt   diese  OS
Funktion.  Es  wird  dabei  intensiver  Gebrauch  der  Systemvariablen
gemacht. Die Variablen  TURBO_A  bis  TURBO_M,  die  jeh  aus  8 Bytes
bestehen môssen bei aktivem  Laufwerk  in  den  ersten 4 Bytes gôltige
Daten enthalten. Es môssen jedoch  alle Tagging Bytes dieser Variablen
einen Wert enthalten, der  den  Laufwerksstatus  anzeigt. Die Variable
TURBO_X  muº  einen  gôltigen   Wert   enthalten,   so   daº  fôr  die
aufbereiteten Inhaltsverzeichniºe genug  Platz  ist.  Die  OS Funktion
blendet das  zugehórige  RAM  eines  jeden  markierten  d.h. getaggten
Laufwerks  ein,   konvertiert   das   Directory   in   das   fôr   die
Bildschirmausgabe   aufbereitete   Format,    und   speichert   diesen
aufbereiteten Datenblock im  Erweiterungspeicher  ab.  Die Information
darôber wird in den Variablen  TURBO_A bis TURBO_M gesichert. Auºerdem
wird die Systemvariable TURBO_X  aktualisiert,  sie  zeigt nun auf das
hóchste freie Byte im hóchstem freien 16K Erweiterungsblock.

Bitte Beachten: Diese OS  Funktion  sollte  nur dann aufgerufen werden
wenn genug RAM vorhanden ist, da  sie  bei einer zu geringen RAM Menge
abbricht.















                 LÓSCHEN DES BILDSCHIRMSPEICHERS
                 ===============================

Kurzbeschreibung: OS Funktion lóscht den 16K Bildschirmspeicher.

Label: LESC

ROM-Nummer: C

Startadresse: &C017

Einsprungbedingungen: V-RAM muº bei &C000 beginnen (ist normal).

Aussprungbedingungen: Der Speicherbereich von &C000  bis &FFFF ist mit
&00 Bytes beschrieben worden. A=&00 und BC=DE=HL=&0000

Manipuliert: AF, BC, DE, HL, HL' und &4000 Bytes Video-RAM

Beschreibung: Diese OS Funktion  entspricht  in  etwa dem Basic Befehl
CLS, denn sie lóscht  den  gesammten  Bildschirmspeicher von &C000 bis
&FFFF. Dieser Bereich wird mit &00 Bytes gefôllt.
Die Besonderheit dieser OS  Funktion  ist ihre enorme Geschwindigkeit,
pro Byte werden nur 1.5 ys  verbraucht.  Nach knapp 0.025 Sekunden ist
alles vorbei.

Bitte Beachten: Es existiert keine  Móglichkeit  den 16 KB Bildschirm-
Speicher des CPC schneller zu lóschen.


        LÓSCHEN DER UNTEREN BILDSCHIRMHÐLFTE AB ZEILE 15
        ================================================

Kurzbeschreibung: Beim 64 Zeichen auf 32 Zeilen Format wird die untere
Bildschirmhðlfte von der 15. Zeile bis zum Bildschirmende gelóscht.

Label: LEDA

ROM-Nummer: C

Startadresse: &C4F5

Einsprungbedingungen: V-RAM muº bei &C000 beginnen (ist normal).

Aussprungbedingungen: untere Bildschirmhðlfte gelóscht

Manipuliert: AF, BC, DE, HL, HL' und 18 Zeilen (15-32)

Beschreibung: Diese  OS  Funktion  dient  dazu  den  unteren  Teil des
Video- RAMs zu lóschen (auf &00 zu  setzen).  Es wird ab der 15. Zeile
bis zum Ende des Bildschirms gelóscht (18 Zeilen).
Diese OS Funktion sollte  nur  verwendet  werden  wenn das Bildschirm-
format auf 64 * 32 gesetzt wurde  (64  Zeichen pro Zeile und 32 Zeilen
pro Seite). Denn bei anderen  Formaten  wird nicht am Zeilenanfang mit
dem Lóschen begonnen.
Da LEDA die FutureOS FILL Funktion  verwendet, ist sie praktisch nicht
mehr zu beschleunigen.
Diese OS Funktion wird z. B. vom  Turbo Desk verwendet, um den Bereich
zu lóschen, in dem die Directorys dargestellt werden.

Bitte Beachten: Bilschirm muº  auf  64  Zeichen  bei 32 Zeilen gesetzt
sein.



  TABELLE GENERIEREN UM IBM, DATA ODER SYSTEM FORMAT DATEIEN ZU LADEN
  ===================================================================

Kurzbeschreibung: Eine Track, Sektor Tabelle  wird generiert. Fôr IBM,
Data oder System Format.

Label: LTAI (IBM Format) // LTAB (DATA Format) // LTAS (SYSTEM Format)

ROM-Nummer: C

Startadresse: &C664 (LTAI) // &C539 (LTAB) // &C710 (LTAS)

Einsprungbedingungen:
HL  = 1. Byte des 1. Extents der Datei, 32er DIR
HL' = 1. Byte der Track, Sekror Tabelle (Ziel)

Aussprungbedingungen: Ladetabelle wurde generiert.

Manipuliert: AF, BC, DE, HL, BC', DE' und HL'

Beschreibung: Um eine  Datei  zu  laden  muss  zuerst eine Ladetabelle
generiert werden. Dies ôbernimmt diese OS Funktion fôr IBM, System und
Data Format.
Dabei muss zuerst das 32er DIRectory eingeblendet werden, dann lðd man
HL mit der Adresse des Anfangs  des  ersten  Extents der Datei die man
spðter laden will. Auºerdem ist HL'  mit  der Zieladresse zu laden, ab
der die zu generierende Tabelle (ent)stehen soll.

Aufbau der Tabelle bei IBM, System oder Data Format:

Die Tabelle beginnt mit einer Tracknummer, dieser folgt die Anzahl der
Sektoren, die von diesem Track zu  laden sind. Der Sektoranzahl folgen
die einzelnen Sektornummern.
Dannach folgt die nðchste Tracknummer usw.
- Wenn die Sektoranzahl =  &FF  ist,  dann ist der entsprechende Track
komplett zu laden. In diesem  Fall  folgt  auf  die Traknummer nur das
Byte &FF, aber KEINE Sektornummern.  Nach  diesem &FF folgt direkt die
nðchste Tracknummer.
- Ist  die  Tracknummer  =  &FF,  dann  ist  die  Tabelle  zuende. Das
Tabellenende wird also durch eine Tracknummer von &FF signalisiert.

Bitte Beachten: HL sollte mit einem  korrektem Wert geladen sein, denn
ist  ab  HL  kein   Extent   eines   32er   DIRs,   so  kann  dies  zu
unvorhersehbaren Fehlfunktionen fôhren.




















         TABELLE GENERIEREN UM VORTEX FORMAT DATEIEN ZU LADEN
         ====================================================

Kurzbeschreibung: Eine  Track  -  Sektor  Tabelle  wird  generiert. Es
handelt sich um eine Datei auf VORTEX Format.

Label: LTAV

ROM-Nummer: C

Startadresse: &C7FB

Einsprungbedingungen:
HL  = 1. Byte des 1. Extents der Datei, 32er DIR
HL' = 1. Byte der Track, Sekror Tabelle (Ziel)

Aussprungbedingungen: Ladetabelle wurde generiert.

Manipuliert: AF, BC, DE, HL, BC', DE' und HL'
Die 2 Bytes vor HL'  werden  ebenfalls  manipuliert, da sie kurzzeitig
als Pseudotabelle verwendet werden.

Beschreibung: Um eine  Datei  zu  laden  muss  zuerst eine Ladetabelle
generiert werden. Diese OS Funktion  generiert eine Tabelle fôr VORTEX
Format, dessen Tabellenaufbau von dem der anderen Formate abweicht.
Dabei muss zuerst das 32er DIRectory eingeblendet werden, dann lðd man
HL mit der Adresse des Anfangs  des  ersten  Extents der Datei die man
spðter laden will.
Auºerdem ist  HL'  mit  der  Zieladresse  zu  laden,  ab  der  die  zu
generierende Tabelle (ent)stehen soll.

Aufbau der Tabelle bei Vortex Format:

Die Tabelle zu Vortex Format hat an sich den selben Aufbau wie Die zum
laden von System oder Data Format.
Der Unterschied liegt darin, daº beim Vortex Format zu jeder Spur auch
immer eine Kopfnummer angegeben werden muss.
Die Kopfnummer ist  im  Bit  0  des  jehweiligen Trackbytes enthalten.
Rechnerisch wird dazu die Tracknummer  (0  bis 80) mit 2 multipliziert
und das Kopfbit (0 =  oben,  1  =  unten)  addiert. Fôr die Ober- bzw.
Unter- Seite einer Spur sind also zwei Trackbytes enthalten.
Die physikalische Tracknummer kann  durch einfaches rechtsschieben mit
z.B. SRL A errechnet werden. Das Carry Bit hat dann die Kopfnummer.

Bitte Beachten: HL sollte mit einem  korrektem Wert geladen sein, denn
ist  ab  HL  kein   Extent   eines   32er   DIRs,   so  kann  dies  zu
unvorhersehbaren Fehlfunktionen fôhren.
ACHTUNG: Die zwei Bytes  vor  HL'  werden manipuliert, eventuell darin
abgelegte Daten sind verloren.















        VERGLEICHEN ZWEIER EXTENTS IN EINEM DIRECTORY
        =============================================

Kurzbeschreibung: Diese OS  Funktion  gibt  Aufschluº  darôber ob zwei
Extents der selben Datei angehóren. Es werden User, Name und Extension
verglichen.

Label: EXCP

ROM-Nummer: C

Startadresse: &C94D

Einsprungbedingungen: DE = &XXX0 = 1. Extent, der zu Vergleichen ist.
                        HL = &YYY0 = 2. Extent, der zu Vergleichen ist.
Beide Extent-Adressen môssen durch 16 teilbar sein, d.h. die unteren 4
Bit in E und L môssen auf Null gesetzt sein.

Aussprungbedingungen: Z-FLAG gesetzt  (Z):  beide  Extents gehóren zur
selben Datei.
Z-FLAG geleert  (NZ):  die  Extents  sind  ungleich,  gehóren  also zu
verschiedenen Dateien.
DE und HL (Zeiger auf Extents) bleiben erhalten.

Manipuliert: AF und BC

Beschreibung: Manchmal ist es nótig  zwei Extents zu vergleichen, z.B.
um zu sehen ob eine Datei  noch  einen Extent hat. Fôr solche Aufgaben
ist diese OS Funktion gedacht.
Beim Aufruf werden die Adressen  der  beiden zu vergleichenden Extents
in DE und HL ôbergeben. Aber  Achtung:  Beide Adressen môssen durch 16
teilbar sein, also der Form  &???0  entsprechen. Nun vergleicht die OS
Funktion die Usernummer, den Namen  und  die Extension der Datei. Alle
anderen Bytes werden nicht beachtet.  Von  den  32 Bytes eines Extents
werden also nur  die  ersten  12  verglichen.  Stimmen  diese 12 Bytes
ôberein, d.h. beide Extents gehóren  zur  selben Datei, dann kehrt die
OS Funktion mit  gesetzten  Zero-Flag  zurôck.  Sind  die Extents aber
unterschiedlich, so wird das Z-Flag gelóscht.
Die Adressen beider Extents werden  erhalten,  nur die Register AF und
BC werden verðndert.

Bitte Beachten: Die Adresse beider Extents muss durch 16 teilbar sein.
Sonst tritt  u.U  eine  Fehlfunktion  auf,  die  beim  Aussprung einen
falschen Status liefert.
Diese OS Funktion bezieht sich auf  ganz  normale 32 Byte Extents, wie
sie im Inhaltsverzeichnis stehen. Es  werden  jedoch nur die ersten 12
Bytes verglichen.

















      INHALTSVERZEICHNISSE NEU SORTIEREN UND WANDELN 32 ==> 16
      ========================================================

Kurzbeschreibung: Alle markierten & manipulierten Inhaltsverzeichnisse
werden neu  sortiert  und  anschlieºen  vom  32er  in  den  16er Modus
gewandelt.

Label: ISWS

ROM-Nummer: C

Startadresse: &FDA1

Einsprungbedingungen: RAM Variablen TURBO_A..M môssen korrekt sein.

Aussprungbedingungen: Alle  betroffenen  DIRs  sind  neu  sortiert und
gewandelt worden.
Das untere ROM ist ausgeblendet.

Manipuliert: Alle  Register  auºer  AF'  und  XL.  Die  RAM  Variablen
REG16_0..9 usw.
Achtung: Der RAM Bereich  von  &0000  bis  &3FFF ist verðndert worden.
Diese 16 KB haben Pufferfunktion.

Beschreibung: Wurde(n)  ein(ige)  Inhaltsverzeichnis(se)  manipuliert,
z.B. durch eine  Dateioperation  wie  ERA,  REN  oder  Ðhnliches, dann
befindet sich das  (befinden  sich  die)  Directory(s)  nicht  mehr in
sortiertem Zustand. Auch sind die 16er DIRs nicht mehr korrekt.
Diese OS Funktion prôft welche  Laufwerke  aktiv  sind, und welche LWs
zusðtzlich auch noch verðndert wurden (gesetztes Bit 3 in TURBO_A..M).
Bei  den  Laufwerken  die  tatsðchlich  aktiv  sind,  und  deren  DIRs
verðndert wurden, wird diese OS  Funktion  aktiv.  Zuerst wird DIR fôr
DIR erneut sortiert.  Danach  werden  neue  16er  DIRs  generiert. Nun
befinden sich die DIRs im selben Zustand, wie nach ihrem ersten Laden.
Es werden dabei jehweils die  alten  RAM  Blócke benutzt, so wird kein
Speicher verschwendet, eher gewonnen.
Was ist nun  ein  manipuliertes/verðndertes  LW/DIR?  Der Status eines
Laufwerks wird dann auf MANIPULIERT  gesetzt,  wenn in seinem DIR eine
Verðnderung durchgefôhrt wurde. Benennt  man  z.B.  eine Datei mit dem
REN Icon um, dann wird der  Status des LWs automatisch auf MANIPULIERT
gesetzt. So kann diese OS Funktion  erkennen,  dass es hier was zu tun
gibt.

Bitte Beachten: Nach   Aufruf  der  OS  Funktion  ist   das untere ROM
ausgeschalten.  Die  Zeichenausgabe  funktioniert  nur  wenn  ein  RAM
Zeichensatz  geladen  wird  oder  wenn   man  das  untere  ROM  wieder
einblendet.
Der Speicherbereich von &0000  bis  &3FFF  wurde als Puffer verwendet.
Diese 16KB sind also ôberschrieben worden.















        ERWEITERUNGSRAMS TESTEN UND VARIABLEN SETZEN
        ============================================

Kurzbeschreibung: Alle 16K Erweiterungs-RAMs  werden auf Vorhandensein
getestet und die Systemvariablen entsprechend gesetzt.

Label: RANI bzw. RAMI

ROM-Nummer: C

Startadresse: &C8EF (RANI) bzw. &FD35 (RAMI)

Einsprungbedingungen: keine

Aussprungbedingungen: Die  32  System-Variablen   XRAM_C4  ..  XRAM_FF
wurden gesetzt:
Bit 0 = 0 ==> 16 KB RAM Block existiert NICHT.
Bit 0 = 1 ==> 16 KB RAM Block ist vorhanden.

Manipuliert: AF, BC, DE, HL, AF', BC', DE', HL'
             Und der RAM-Status (&7FC0, Hauptspeicher, 1. 64 KB aktiv)

RANI: In allen 32 Erweiterungs-RAMs (a  16  KB)  ist das erste Byte an
      Adresse &4000 manipuliert

RAMI: Die E-RAMs sind zwar erhalten, aber &B7C0-&B7DF ist manipuliert

Beschreibung: Beim Hochfahren des OS ist  es nótig zu erfahren wieviel
Erweiterungs-RAM vorhanden ist, und wo die Blócke liegen.
Diese OS Funktion testet die 32  Blócke  (je  16 KB) der ersten 512 KB
des Erweiterungs-RAMs. Diese Blócke  kónnen  zwischen  &4000 und &7FFF
eingeblendet werden.  Im  System-RAM  existiert  fôr  jeden  dieser 32
Blócke ein Byte. Diese  OS  Variablen  werden  mit XRAM_?? bezeichnet,
wobei '??' die Zeichenfolge C4, C5, C6, C7, CC, CD, CE, CF, D4, .. ,FF
enthalten kann. Die OS Variable  XRAM_C4  liegt  an Adresse &B900, die
anderen folgen. Alle 32 OS Variablen werden gesetzt.
Dabei bedeutet ein gesetztes erstes Bit,  dass  dieser 16 KB RAM Block
auch wirklich existiert. Dagegen  signalisiert  das auf Null gesetztes
Bit Null daº der Block nicht vorhanden ist.
Das FutureOS spricht das gesammte  Erweiterung-RAM  in 16K Blócken an,
die zwischen &4000 und &7FFF eingeblendet werden.

Bitte Beachten: Die OS Funktion RANI manipuliert in jedem 16 KB  Block
des Erweiterungs-RAMs  das  erste  Byte  (an  Adresse  &4000).  Die OS
Funktion RAMI  konserviert  das  gesamte  E-RAM,  beschreibt  aber den
Speicher-Bereich von &B7C0-&B7DF.


















       FREIEN ERWEITERUNGSSPEICHER BERECHNEN, VARIABLEN SETZEN
       =======================================================

Kurzbeschreibung: Der  freie,  unbenutzte   Erweiterungsspeicher  wird
berechnet, die Systemvariablen werden entsprechend gesetzt.

Label: FESB

ROM-Nummer: C

Startadresse: &C998

Einsprungbedingungen: Die  32  System-Variablen   XRAM_C4  ..  XRAM_FF
môssen korrekt sein.

Aussprungbedingungen:
D  = Anzahl freier 16K Kurzzeitspeicher.
E  = &09
BC = &00F7
HL = &B9EF = Zeiger auf XRAM_FF

Manipuliert: AF, BC, DE, HL und u.U. XRAM_??

Beschreibung: Fôr  alle  32   16KB   ErweiterungsRAMs  existiert  eine
Systemvariable XRAM_??. Diese Variable  gibt  Aufschluº darôber ob das
entsprechende 16K RAM vorhanden ist, und wie es verwendet wird.
Die Aufgabe dieser OS Funktion ist  es  nun alle unbenutzten, oder als
Kurzzeitspeicher markierten, 16K RAMs zu zðhlen und die entsprechenden
Systemvariablen XRAM_?? zu markieren.  Die  OS  Funktion ôbergibt in D
Register die Anzahl der freien 16  K  Blócke. Welche Blócke dies sind,
kann man aus  den  Systemvariablen  XRAM_??  lesen.  Die  Sys-Vars der
freien RAMs werden als Kurzzeitspeicher mit &09 markiert.

Bitte Beachten: Die Daten der  32  System-Variablen XRAM_C4 .. XRAM_FF
môssen korrekt sein.
Im Memory Map ist nachzulesen  welche  Bedeutung  die Bits der XRAM_??
Variablen haben.



























                   SUCHE ERSTE MARKIERTE DATEI
                   ===========================

Kurzbeschreibung: Alle Datei-Tagging-Bytes aller  Medien (A-O)  werden
nach der ersten markierten Datei durchsucht.

Label: FMD32

ROM-Nummer: C

Startadresse: &FD98

Einsprungbedingungen: Die OS  Variablen  TURBO_A  bis  TURBO_M und die
Datei-Tagging Bytes môssen korrekt sein.
A < &FF ===> normale Funktion
A = &FF ===> Dateistatus wird NICHT verðndert!

Aussprungbedingungen:
HL = &0000 ==> Es wurde keine markierte Datei gefunden.
          Das Zero Flag ist gesetzt!
HL > &0000 ==> Das Zero Flag ist geleert. Und HL zeigt auf die Adresse
des ersten Extents im 32er DIR  der  ersten markierten Datei (Medium A
bis M). Bei Medium N und O zeigt HL  auf den Namen der Datei im M4 SD-
Inhaltsverzeichnis-E-RAM.
REG08_1 = A = Medium auf dem sich die markierte Datei befindet.
         Die Werte 0 bis 14 entsprechen den Medien 'A' bis 'O'.
REG08_2 = physikalische E-RAM Nummer von  &C4  bis &FF in dem sich das
gepufferte  Inhaltsverzeichnis  (32er   DIR)   der   markierten  Datei
befindet. Dieses E-RAM ist bereits  von  &4000 bis &7FFF eingeblendet.
Bei Medium 'N' oder 'O' (M4  SD-Karte)  ist  es  das E-RAM fôr die M4-
Erweiterung.
REG16_6 bis REG32_1 = Enthalten den  16  Byte Dateinamen, so wie er im
16er DIR steht (im Format: 'A00:FileNameExt').
Bei den SD-Karten Medien  'N'  und  'O'  steht  hier eine konvertierte
Version des Dateinamens (in Format 'N--:FileNameExt').
FN_LR = &00 / &20, falls die Datei auf Medium 'N'/'O' gefunden wurde.
Die Laufwerksmotoren wurden eingeschalten.

Wenn A bei Aufruf ungleich &FF war:
Der Datei-Status wird  von  Tagged/Markiert  auf Used/Benutzt gesetzt,
eine soche Datei erscheint auf dem Bilschirm durchgestrichen. Ruft man
FMD32 nochmals auf, so wird die nðchste markierte Datei gesucht.

Manipuliert: Alle Register auºer IY.  RAM Status, Datei-Tagging Bytes,
Motor Status, REG08_1..2, REG16_6..REG32_1

Beschreibung: Dieses Unterprogramm  dient dazu in allen aktiven Medien
nach der ersten markierten Datei zu  suchen. Dabei wird von Laufwerk A
bis zu SD-Karte 'O' gesucht. Beim Einsprung môssen die Systemvariablen
in Ordnung sein.
Die OS Funktion ôbergibt  in  HL  die  Adresse  des ersten Extents der
ersten markierten Datei. Hat das  Register  HL  den Wert &0000 und das
Zero-Flag ist gesetzt, dann wurde keine markierte Datei gefunden.
Ansonsten wird im Akku und  in  REG08_1  das  Medium, auf dem sich die
markierte Datei befindet, ôbergeben.  Die  Werte  0 bis 14 entsprechen
den Laufwerken bzw. Medien 'A' bis 'O'.
Auºerdem wird in REG08_2 die  physikalische  E-RAM  Nummer von &C4 bis
&FF ôbergeben, in dem  sich  das  gepufferte Inhaltsverzeichnis (32er)
der markierten Datei  befindet.  Dieses  E-RAM  wurde bereits zwischen
&4000 und &7FFF eingeblendet.
FMD32 startet die LW-Motoren, wenn  ein Laufwerk markiert ist. Trozdem
ist die restliche Hochlaufzeit abzuwarten,  oder zumindest solange mit
dem Laden der Datei zu warten bis das LW bereit (Ready) ist.

Bitte Beachten: Systemvariablen  môssen   unbedingt  korrekt  sein, da
sonst korrupte Daten ôbergeben werden. Fehlfunktion.

Achtung: Hat Register A vor Aufruf  der  OS  Funktion den Wert &FF, so
wird der Status der gefundenen  Datei NICHT verðndert. Bei nochmaligem
Aufruf von FMD32 wôrde man die selbe Datei nochmals finden!


























































         SUCHE ERSTE MARKIERTE DATEI - Nur A bis M
         =========================================

Kurzbeschreibung: Die Datei-Tagging-Bytes der  Medien  A  bis M werden
nach der ersten markierten Datei durchsucht.

Label: FMD32AM

ROM-Nummer: C

Startadresse: &FD26

Einsprungbedingungen: Die OS  Variablen  TURBO_A  bis  TURBO_M und die
Datei-Tagging Bytes môssen korrekt sein.
A < &FF ===> normale Funktion
A = &FF ===> Dateistatus wird NICHT verðndert!

Aussprungbedingungen:
HL = &0000 ==> Es wurde keine markierte Datei gefunden.
          Das Zero Flag ist gesetzt!
HL > &0000 ==> Das Zero Flag ist geleert. Und HL zeigt auf die Adresse
des ersten Extents im 32er DIR  der  ersten markierten Datei (Medium A
bis M).
REG08_1 = A = Medium auf dem sich die markierte Datei befindet.
         Die Werte 0 bis 12 entsprechen den Medien 'A' bis 'M'.
REG08_2 = physikalische E-RAM Nummer von  &C4  bis &FF in dem sich das
gepufferte Inhaltsverzeichnis  (32  Byte  DIR)  der  markierten  Datei
befindet. Dieses E-RAM ist bereits von &4000 bis &7FFF eingeblendet.
REG16_6 bis REG32_1 = Enthalten den  16  Byte Dateinamen, so wie er im
16 Byte DIR steht (im Format: 'A00:FileNameExt').
Die Laufwerksmotoren wurden eingeschalten.

Wenn A bei Aufruf ungleich &FF war:
Der Datei-Status wird  von  Tagged/Markiert  auf Used/Benutzt gesetzt,
eine soche Datei erscheint auf dem Bilschirm durchgestrichen. Ruft man
FMD32AM nochmals auf, so wird die nðchste markierte Datei gesucht.

Manipuliert: Alle Register auºer IY.  RAM Status, Datei-Tagging Bytes,
Motor Status, REG08_1..2, REG16_6..REG32_1

Beschreibung: Dieses Unterprogramm  dient dazu in allen aktiven Medien
nach der ersten markierten Datei zu  suchen. Dabei wird von Laufwerk A
bis M gesucht. Beim  Einsprung  môssen  die Systemvariablen in Ordnung
sein.
Die OS Funktion ôbergibt  in  HL  die  Adresse  des ersten Extents der
ersten markierten Datei. Hat das  Register  HL  den Wert &0000 und das
Zero-Flag ist gesetzt, dann wurde keine markierte Datei gefunden.
Ansonsten wird im Akku und  in  REG08_1  das  Medium, auf dem sich die
markierte Datei befindet, ôbergeben.  Die  Werte  0 bis 12 entsprechen
den Laufwerken 'A' bis 'M'.
Auºerdem wird in REG08_2 die  physikalische  E-RAM  Nummer von &C4 bis
&FF ôbergeben, in dem  sich  das  gepufferte Inhaltsverzeichnis (32er)
der markierten Datei  befindet.  Dieses  E-RAM  wurde bereits zwischen
&4000 und &7FFF eingeblendet.
FMD32AM startet die LW-Motoren, wenn ein Laufwerk markiert ist. Jedoch
ist die restliche Hochlaufzeit abzuwarten,  oder zumindest solange mit
dem Laden der Datei zu warten bis das LW bereit (Ready) ist.

Bitte Beachten: Systemvariablen  môssen   unbedingt  korrekt  sein, da
sonst korrupte Daten ôbergeben werden. Fehlfunktion.
Achtung: Hat Register A vor Aufruf  der  OS  Funktion den Wert &FF, so
wird der Status der gefundenen  Datei NICHT verðndert. Bei nochmaligem
Aufruf von FMD32AM wôrde man die selbe Datei nochmals finden!

      BLOCK-BELEGUNGS-TABELLE DATA/IBM/SYSTEM/VORTEX GENERIEREN
      =========================================================

Kurzbeschreibung:  Die  Blockbelegungstabelle  eines   Laufwerks  wird
generiert, aber nur Data, IBM, System oder Vortex Format. Das DIR darf
unsortiert sein.

Label: BBTG (LW in XL), BBTH (LW in A)

ROM-Nummer: C

Startadresse: &FD95 (BBTG), &FD53 (BBTH)

Einsprungbedingungen: A bzw. XL = Laufwerksnummer von 0 bis 7.
Inhaltsverzeichnis des Laufwerks muº eingelesen sein, System Variablen
sollten korrekt sein.

Aussprungbedingungen: Blockbelegungstabelle wurde von  &B600 bis &B6FF
generiert. Block &00 (Adr. &B600) wird nie beachtet.
XL = Laufwerk, dessen Tabelle generiert wurde.
XH = Laufwerks-Tag-Byte des Laufwerks aus A bzw. XL.
RAM des 32er DIRs des LWs aus A bzw. XL ist eingeblendet.

Manipuliert: AF, BC, DE, HL, AF', (XL), XH und der RAM Status

Beschreibung: Wenn man eine Datei von Hand speichern will, dann sollte
man wissen welche Blócke auf Diskette noch frei sind.
Um herauszufinden welche Blócke auf  einer  Disk mit Data, IBM, System
oder Vortex Format noch frei sind benutzt man diese OS Funktion.
Im Akku (Einsprung BBTH) bzw. IX low (Einsprung BBTG) ôbergibt man die
Nummer des Laufwerks, auf das  die  Datei geschrieben werden soll. Die
OS   Funktion    generiert    zwischen    &B600    und    B6FF    eine
Blockbelegungstabelle. In Adresse &B601 ist  der Status des Blocks &01
angegeben, in &B602 der Status von  Block  &02,  ... und so weiter bis
zum letzten Block.  Enthðlt  ein  Byte  den  Wert  &00,  dann  ist der
entsprechende Block noch frei. Wenn dagegen in einem Byte der Wert &FF
steht, dann ist der  Block  bereits  von  einer  anderen Datei belegt.
Auºerdem ist beim Aussprung das  RAM  des 32er DIRs des entsprechenden
LWs eingeblendet.
Das Inhaltsverzeichniss, dessen BBT generiert wird, muº nicht sortiert
sein.
ACHTUNG: Die Blócke des DIRs werden nicht als benutzt markiert! s.u.
Die verschiedenen Formate eines Laufwerkes haben eine unterschiedliche
Blockanzahl, und das DIR  belegt  andere  Blócke.  Bei  Vortex hat ein
Block nicht 1 KB sondern 4 KB.
LW mit   Data Format hat 180 Blócke, DIR in Block 0,1.
LW mit    IBM Format hat 156 Blócke, DIR in Block 0,1.
LW mit System Format hat 171 Blócke, DIR in Block 0,1.
LW mit Vortex Format hat 177 4K-Blócke, DIR in Block 0.

Bitte Beachten: Man  kann  nur  Blockbelegungstabellen  fôr  Laufwerke
generieren, deren DIR ordnungsgemðº eingelesen wurde.
ACHTUNG: Die Blócke des DIRs  werden  nicht als benutzt markiert! Dies
ist einfach von Hand zu machen:
Bei Data, IBM und System Format  sind  die  Blócke &00 und &01 fôr das
DIR reserviert. Beim Vortex-Format belegt  das  DIR nur den Block &00.
Das Register XH enthðlt das  Laufwerks-Tag-Byte  des Laufwerks aus XL,
dies enthðlt auch die Format-Information fôr das LW.






           LADEN EINER DURCH IHREN NAMEN DEFINIERTEN DATEI
           ===============================================

Kurzbeschreibung: Eine Datei, deren Name  und  Medium bekannt ist wird
geladen.

Label: LADE_N

ROM-Nummer: C

Startadresse: &FD5C

Einsprungbedingungen:  Das  Inhaltsverzeichnis  in  dem  sich  die  zu
ladende Datei befindet muº eingelesen sein (Medium aktiviert, DIR-Icon
wurde benutzt).
 A = Medium (0..14) von dem die Datei geladen werden soll
     Ist das 8. Bit  gesetzt,  so  werden  Lade- und Start-Adresse des
     Headers ignoriert
DE = Zeiger auf User-Nummer (1 Byte),  Name (8 Bytes) und Extension (3
     Bytes) der Datei. Oder DE zeigt auf M4 Namen.
     Der Name muss sich innerhalb einer 256 Byte Page befinden.
Die OS Variable RAMCHAR  (&84-&86)  bestimmt  den Bildschirm-Modus 0-2
wðhrend des Ladens.

Falls die  zu  ladende  Datei  keinen  Header  hat,  oder  der  Header
ignoriert werden soll, sind auºerdem folgende Daten anzugeben:
REG08_4 = Ladeart (0,1,2,3) - siehe OS Funktion(en) 'LADEN'
Fôr die Ladearten 2 und 3 muss folgendes angegeben werden:
REG16_3 = Ladeadresse im RAM bzw. E-RAM, 16 Bit.
Fôr die Ladeart 3 muº folgendes angegeben werden:
AKT_RAM = physikalische E-RAM Nummer, &C4, &C5 .. &FF

Aussprungbedingungen:  Im  Akku  wird   ein  Infobyte  ôbergegen,  daº
Aufschluº ôber den Verlauf der Operation gibt.
A = &00 ==>  Momentan  ist  ôberhaupt  kein  Inhaltsverzeichnis einge-
    lesen, deshalb kann auch keine Datei geladen werden.
A = &01 ==> Das Medium von dem die Datei geladen werden soll ist nicht
    markiert/aktiv, die Datei kann nicht geladen werden.
A = &02 ==>  Die  Datei  existiert  nicht  im  Inhaltsverzeichnis  des
    angegebenen Mediums --> Die E-RAM Konfiguration ist unbekannt!
A = &FF ==> Die Datei  sollte  ordnungsgemðº geladen sein, es ist aber
    durchaus sinnvoll noch die  7  Resultbytes  ab  FDC_RES zu testen,
    falls man von einem Floppy Disk Laufwerk geladen hat.
(REG_PC+1) = Code von 0 bis  14  des  Mediums  (A bis O, LW, HD20, MM,
SD-Karte) von dem die Datei geladen wurde.
Bei Ladeart 0  und  2  wurde  der  128  Byte  Datei-Header  nach &BC00
verschoben.

Manipuliert: AF, BC, DE, HL, AF', BC',  DE',  HL', IX, IY und die RAM-
Variablen REG08_0-3,5,6, REG16_0,1, REG_PC  und  AKT_RAM. Auºerdem die
RAM Bereiche von &B000 bis &B7FF  und  von &BC00 bis &BC7F, der E-RAM-
Status, der FDC, der Bildschirm  MODE  und  der Status der Motoren der
Laufwerke, die Datei-Markierungs-Bytes.  Bei  einem  Fehler  ist nicht
bekannt welches E-RAM von &4000 bis &7FFF eingeblendet ist.

Beschreibung: Diese OS Funktion  dient  dazu  eine  beliebige Datei zu
laden. Die Datei wird  durch  ihr  Quell-Medium, ihre User-Nummer (nur
A-M), ihren Namen und  ihre  Extension  eingeutig identifiziert. Dabei
ist es egal ob die  Datei  markiert  ist  oder  nicht, ihr Status wird
nicht beeinflusst.




Das Medium wird in A angegeben,  ist  das  8. Bit gesetzt, so wird ein
eventueller Dateiheader ignoriert.  Ansonsten  entscheidet  der Header
wohin die Datei geladen wird.  Ohne Datei-Header (oder mit ignoriertem
Header) entscheiden  folgende  RAM-Variablen,  an  welche  Adresse, in
welchen RAM Block, und auf welche Art die Datei geladen wird.
REG08_4 = Ladeart: Die Ladeart &02 lðd die Datei in den Hauptspeicher,
          die Ladeart &03 lðd die Datei ins Erweiterungs-RAM
REG16_3 = Ladeadresse im RAM bzw. E-RAM, 16 Bit
AKT_RAM = physikalische E-RAM Nummer, &C4, &C5 .. &FF
Wurde die Datei korrekt geladen, so  kehrt  die OS Funktion mit &FF im
Akku zurôck, andernfalls ist  die  Fehlerursache im Akku verschlôsselt
(RAM Konfiguration undefiniert). Es  empfiehlt  sich  immer auch die 7
Result-Bytes des FDCs zu testen. Diese stehen ab FDC_RES im RAM.
(REG_PC+1) enthðlt die Nummer des  Mediums,  von der die Datei geladen
wurde. Dabei entsprechen die Nummern 0 bis 14 den Medien von A bis O.

Bitte Beachten: Wurde die Datei  korrekt  geladen, so kann man sicher-
heitshalber die 7 Resultbytes ab FDC_RES testen.














































      LADEN EINER MARKIERTEN DATEI IN DEN HAUPTSPEICHER AB &0000
      ==========================================================

Kurzbeschreibung: Eine  Datei  wird  ab  Adresse  &0000  in den Haupt-
speicher geladen. (Adresse &0000 ist Standart).

Label: LADEN

ROM-Nummer: C

Startadresse: &FD8F

Einsprungbedingungen: REG08_3 mit Wert &00 fôllen fôr diese Ladeart.
Systemvariablen môssen korrekt sein, ein DIR muss eingelesen sein, und
eine Datei muss in den Datei-Tagging-Bytes markiert sein.
A < &FF ===> normale Funktion
A = &FF ===> Dateistatus wird NICHT verðndert!
Die OS Variable RAMCHAR  (&84-&86)  bestimmt  den Bildschirm-Modus 0-2
wðhrend des Ladens.

Aussprungbedingungen:  Datei  wurde  ab  der  Adresse   &0000  in  den
Hauptspeicher geladen. Ihr 128 Byte Header steht ab &BC00 im RAM.
(REG_PC+1) = Medium (0..12) von dem die Datei geladen wurde.

Manipuliert: AF, BC, DE, HL, AF', BC',  DE',  HL', IX, IY und die RAM-
Variablen REG08_0,1,5, REG16_0, REG_PC. Auºerdem  die RAM Bereiche von
&B000 bis &B7FF und von &BC00 bis  &BC7F, der RAM-Status, der FDC, die
Datei-Tagging Bytes und der Motor Status.

Beschreibung:  Diese  OS  Funktion  dient   dazu  eine  Datei  in  den
Hauptspeicher zu laden.
Wurde durch die Benutzeroberflðche, oder von Hand, eine Datei markiert
(Datei-Tagging-Bytes), dann kann sie  durch  diese OS Funktion geladen
werden. Die  Datei  wird  automatisch  an  die  Standart-Adresse &0000
geladen. Man sollte darauf  achten,  daº  die  Datei 40K (maximal 44K)
nicht ôberschreitet, da  sonst  wichtige  Teile  des  OS ôberschrieben
werden. Siehe Memory-Map in  #EQU-API.DEU.  Der  Datei-Header liegt ab
&BC00 im RAM.
Bei einer Fehlfunktion z.B. keine Datei markiert, gibt die OS Funktion
eine Fehlermeldung aus und springt in die Benutzeroberflðche zurôck.

Bitte Beachten: Es sollte  ein  DIR  eingelesen & eine  Datei markiert
sein. Maximale Dateigróºe  40  (44)  KB,  dann  ist  das  RAM komplett
verbraucht.
Achtung: Hat Register A vor Aufruf  der  OS  Funktion den Wert &FF, so
wird der Status der  geladenen  Datei  NICHT  verðndert, beim nðchsten
Aufruf  einer  Dateifunktion  wird  dann   die  selbe  Datei  nochmals
behandelt!
















  LADEN EINER MARK. DATEI IN DEN HAUPTSPEICHER AB BELIEBIGER ADRESSE
  ==================================================================

Kurzbeschreibung: Eine Datei wird ab  beliebiger Adresse in den Haupt-
speicher geladen.

Label: LADEN

ROM-Nummer: C

Startadresse: &FD8F

Einsprungbedingungen: REG08_3 mit Wert &02 fôllen fôr diese Ladeart
REG16_1 = Zieladresse der Datei
Systemvariablen môssen korrekt sein, ein DIR muss eingelesen sein, und
eine Datei muss in den Datei-Tagging-Bytes markiert sein.
A < &FF ===> normale Funktion
A = &FF ===> Dateistatus wird NICHT verðndert!
Die OS Variable RAMCHAR  (&84-&86)  bestimmt  den Bildschirm-Modus 0-2
wðhrend des Ladens.

Aussprungbedingungen: Datei wurde ab  der  Adresse  aus REG16_1 in den
Hauptspeicher geladen. Ihr 128 Byte Header steht ab &BC00 im RAM.
(REG_PC+1) = Medium (0..12) von dem die Datei geladen wurde.

Manipuliert: AF, BC, DE, HL, AF', BC',  DE',  HL', IX, IY und die RAM-
Variablen REG08_0,1,5, REG16_0, REG_PC. Auºerdem  die RAM Bereiche von
&B000 bis &B7FF und von &BC00 bis  &BC7F, der RAM-Status, der FDC, die
Datei-Tagging Bytes und der Motor Status.

Beschreibung:  Diese  OS  Funktion  dient   dazu  eine  Datei  in  den
Hauptspeicher zu laden. Die  Zieladresse  ist  dabei frei wðhlbar, sie
wird in der Speicherstelle REG16_1 angegeben.
Wenn  man  eine  Datei  an  die   Adresse   &C000  lðd,  also  in  den
Bildschirmspeicher, dann kann die Datei  maximal  60 K groº sein. Denn
sobald beim  LADEN  die  Adresse  &FFFF  ôberschritten  wird,  wird ab
Adresse &0000 weitergeladen. Man  sollte  sich  im  klaren sein welche
Speicherbereiche das OS bzw.  die  Benutzeroberflðche  belegt. Der 128
Byte Datei-Header wird ab &BC00 ins RAM geschrieben.

Bitte Beachten: Es  sollte  auch  ein  DIR  eingelesen  &  eine  Datei
markiert sein.  Maximale  Dateigróºe  40(60)  KB,  dann  ist  das  RAM
komplett verbraucht.
Achtung: Hat Register A vor Aufruf  der  OS  Funktion den Wert &FF, so
wird der Status der  geladenen  Datei  NICHT  verðndert, beim nðchsten
Aufruf  einer  Dateifunktion  wird  dann   die  selbe  Datei  nochmals
behandelt!

















 LADEN EINER MARK.DATEI IN ERWEITERUNGSPEICHER AB BLOCK &C4,ADR.&4000
 ====================================================================

Kurzbeschreibung: Eine  Datei wird in  Block  &C4  ab Adresse &4000 in
den Erweiterungsspeicher geladen. (Standart).

Label: LADEN

ROM-Nummer: C

Startadresse: &FD8F

Einsprungbedingungen: REG08_3 mit Wert &01 fôllen fôr diese Ladeart.
Systemvariablen môssen korrekt sein, ein DIR muss eingelesen sein, und
eine Datei muss in den Datei-Tagging-Bytes markiert sein.
A < &FF ===> normale Funktion
A = &FF ===> Dateistatus wird NICHT verðndert!
Die OS Variable RAMCHAR  (&84-&86)  bestimmt  den Bildschirm-Modus 0-2
wðhrend des Ladens.

Aussprungbedingungen: Datei wurde ab  Block  &C4  und Adresse &4000 in
den Erweiterungsspeicher geladen.
(REG_PC+1) = Medium (0..12) von dem die Datei geladen wurde.

Manipuliert: AF, BC, DE, HL, AF', BC',  DE',  HL', IX, IY und die RAM-
Variablen REG08_0,1,5, REG16_0, REG_PC.  Auºerdem  der RAM Bereich von
&B000 bis &B7FF, der RAM-Status, der  FDC, die Datei-Tagging Bytes und
der Motor Status.

Beschreibung:  Diese  OS  Funktion  dient  dazu  eine  Datei  in   den
Erweiterungsspeicher zu laden. Die Datei wird dabei automatisch ab dem
ersten  16K  Erweiterungsblock  &C4  und  der  Adresse  &4000  in  den
Erweiterungsspeicher geladen. Falls ein  Dateiheader existiert, bleibt
er vor der eigentlichen Datei (ab der Zieladresse) erhalten.
Der User sollte sich im klaren sein ob das Erweiterungs-RAM, in das er
laden  will,  ôberhaupt   existiert   d.h.   eine  Speichererweiterung
vorhanden ist. Darôber geben  die  Speicherstellen  XRAM_C4 .. XRAM_FF
Auskunft.
Natôrlich muº vor Aufruf  der  OS  Funktion  auch  eine Datei markiert
sein, da sonst eine Fehlermeldung ausgegeben  wird und die OS Funktion
in die Benutzeroberflðche springt.

Bitte Beachten: Es  sollte  auch  ein  DIR  eingelesen  &  eine  Datei
markiert sein. Maximale Dateigróºe 512 KB, dann spðtestens ist das RAM
komplett verbraucht.
Achtung: Hat Register A vor Aufruf  der  OS  Funktion den Wert &FF, so
wird der Status der  geladenen  Datei  NICHT  verðndert, beim nðchsten
Aufruf  einer  Dateifunktion  wird  dann   die  selbe  Datei  nochmals
behandelt!















   LADEN EINER MARKIERTEN DATEI IRGENDWO IN DEN ERWEITERUNGSPEICHER
   ================================================================

Kurzbeschreibung: Eine Datei wird in den Erweiterungsspeicher geladen,
dabei ist der Startblock und die Startadresse frei wðhlbar.

Label: LADEN

ROM-Nummer: C

Startadresse: &FD8F

Einsprungbedingungen: REG08_3 mit Wert &03 fôllen fôr diese Ladeart.
REG16_1 = Zieladresse der Datei, durch  256 teilbar z.B. &2300, &7800,
&C000.
AKT_RAM = RAM-Block ab dem geladen wird.
Systemvariablen môssen korrekt sein, ein DIR muss eingelesen sein, und
eine Datei muss in den Datei-Tagging-Bytes markiert sein.
A < &FF ===> normale Funktion
A = &FF ===> Dateistatus wird NICHT verðndert!
Die OS Variable RAMCHAR  (&84-&86)  bestimmt  den Bildschirm-Modus 0-2
wðhrend des Ladens.

Aussprungbedingungen: Datei wurde ab Block aus AKT_RAM und Adresse aus
REG16_1 in den Erweiterungsspeicher geladen.
(REG_PC+1) = Medium (0..12) von dem die Datei geladen wurde.

Manipuliert: AF, BC, DE, HL, AF', BC',  DE',  HL', IX, IY und die RAM-
Variablen REG08_0,1,5, REG16_0, REG_PC.  Auºerdem  der RAM Bereich von
&B000 bis &B7FF, der RAM-Status, der  FDC, die Datei-Tagging Bytes und
der Motor Status.

Beschreibung:  Diese  OS  Funktion  dient  dazu  eine  Datei  in   den
Erweiterungsspeicher zu laden. Der Zielblock  und die Zieladresse sind
dabei frei wðhlbar. Falls ein Dateiheader existiert, bleibt er vor der
eigentlichen Datei (ab der Zieladresse) erhalten.
Siehe auch vorige OS  Funktionen,  obige  Restriktionen gelten auch in
diesem Fall.
Beim laden einer gróºeren Datei  (einige  100 KB) muº zweifelsfrei der
Erweiterungsspeicher (E-RAM) benutzt werden. Um  etwas in das E-RAM zu
laden gibt man in der  Speicherstelle AKT_RAM die physikalische E-RAM-
Nummer &C4,..&FF an, in REG16_1 gibt man die Zeiladresse von &0000 bis
&7F00 an. Adressen môssen durch 256 teilbar sein, da sonst Lade-Fehler
auftreten werden.
Wenn man als Startadresse einen Wert  zwischen &0000 und &3F00 angibt,
dann wird anfangs in ein Stôck des Hauptspeichers geladen.

Bitte Beachten: Es  sollte  auch  ein  DIR  eingelesen  &  eine  Datei
markiert sein. Maximale Dateigróºe 512 KB,  dann spðtestens ist das E-
RAM komplett verbraucht.
Achtung: Hat Register A vor Aufruf  der  OS  Funktion den Wert &FF, so
wird der Status der  geladenen  Datei  NICHT  verðndert, beim nðchsten
Aufruf  einer  Dateifunktion  wird  dann   die  selbe  Datei  nochmals
behandelt!










      SICHERN ALLER REGISTER & EINSPRUNG IN DEN FutureOS MONITOR
      ==========================================================

Kurzbeschreibung: Bei Aufruf dieser  OS  Funktion werden alle Register
des Z80 Prozessors gesichert. Es erfolgt KEIN Rôcksprung.

Label: CARET

ROM-Nummer: C

Startadresse: &FD62

Einsprungbedingungen: - KEINE -

Aussprungbedingungen: Es erfolgt KEIN Rôcksprung!

Manipuliert: RAM Variablen: REG_AF1,  REG_BC1  ..  REG_R, REG_I werden
mit Prozessor-Register-Inhalten geladen.

Beschreibung: Diese OS Funktion  ist  ein  Teil des FutureOS Monitors.
Wird sie angesprungen, dann wird  der Inhalt ALLER Register (abgesehen
von PC)  in  die  RAM  Variablen  REG_AF1,  REG_BC1  ...  REG_R, REG_I
geschrieben. Der Inhalt des R  Registers  wird so korregiert, dass ein
unterbrochenes Programm dies nicht feststellen kónnen sollte.
Diese OS Funktion kehrt nicht  zurôck,  sondern  springt direkt in den
FutureOS Monitor ein, von dort aus  kann  man das zu testende Programm
wieder anspringen.
Will man eine OS Funktion testen, so kann man vor dem Aufruf dieser OS
Funktion die Adresse von CARET auf  den  Stack legen, und sie durch JP
anspringen. Wenn die zu testende OS Funktion mit RET endet, dann kommt
man automatisch nach CARET und in den Monitor.

Bitte Beachten: Auch das R Register wird korrekt behandelt. Es erfolgt
KEIN Rôcksprung!






























        DATEI AUS DIR TILGEN, EINTRAG AUF &E5 SETZEN
        ============================================

Kurzbeschreibung: Bevor man eine Datei speichert, sollte man ihre alte
Version von  Diskette  tilgen.  Diese  Funktion  wird  von  dieser  OS
Funktion erfôllt.

Label: EWEG

ROM-Nummer: C

Startadresse: &FD7A

Einsprungbedingungen:
REG08_1 = LW, aus dessen DIR die Datei entfernt werden soll.
Ab der RAM-Variable REG16_8 stehen 12  Bytes,  die User (1 Byte), Name
(8 Bytes), Extension (3  Bytes)  der  Datei darstellen, die eliminiert
werden soll.

Aussprungbedingungen:
Datei wurde aus dem Inhaltsverzeichnis entfernt.
Das Inhaltsverzeichnis ist nun unsortiert!
TURBO_? des LWs wurde als MANIPULIERT (Bit 3) markiert.
Das 32er  DIR  des  LWs  wurde  eingeblendet,  aber  nicht  im AKT_RAM
vermerkt.

Manipuliert: AF, BC, DE, HL, XH und der RAM-Status.

Beschreibung: Will man  eine  Datei  auf  Diskette  speichern,  so ist
móglicherweise schon eine Datei mit  der selben Bezeichnung vorhanden.
Diese OS  Funktion  entfernt  eine  durch  User,  Name  und  Extension
definierte Datei aus dem DIR eines bestimmten Laufwerks.
Beim Aufruf  werden  Laufwerk  und  Dateibezeichnung  angegeben.  Nach
entfernen der Datei aus dem DIR  ist selbiges natôrlich unsortiert, es
sind einige mit &E5 markierte Eintrðge  vorhanden, dies war einmal die
Datei.

Bitte Beachten: Diese OS Funktion  markiert in TURBO_? des behandelten
LWs  das  Bit  3,   das   Inhaltsverzeichnis   hat  also  den  Status:
MANIPULIERT, und wird von ISWS erkannt und auf Diskette geschrieben.
























         TABELLE FREIER BLÓCKE GENERIEREN (fôr SAVE)
         ===========================================

Kurzbeschreibung: Will man eine Datei speichern, dann braucht man dazu
freie Blócke auf Disk. Diese  OS  Funktion  generiert eine Tabelle aus
freien Blócken, in die noch Daten gespeichert werden kónnen. Nur Disk!

Label: BBTT

ROM-Nummer: C

Startadresse: &FD86

Einsprungbedingungen: BBTG(!) Tabelle muº ab &B600 vorhanden sein!
B  = Anzahl gesuchter, leerer Blócke 1..255.
C' = maximale Anzahl  der  Blocks  pro  Disk  bezogen auf das aktuelle
     Format.
HL = Zieladresse,  ab  der  die  Blocktabelle  freier Blócke generiert
     wird.
HL sollte am Anfang einer Page liegen,  es môssen alle Blócke in diese
Page passen. &XX00 !!!

Aussprungbedingungen:
Carry-Flag auf 1 gesetzt ==> Datei ist zu GROSS.
Carry-Flag mit 0 geleert ==>  alles  in  Ordnung, die Datei passt noch
auf die Disk.  ====>
HL = Ende der Blocktabelle.
Tabellen-Ende ist durch &00 markiert.

Manipuliert: AF, B, L und HL'

Beschreibung: Will man eine Datei  auf  Diskette  sichern, so wird sie
auf verschiedene Blocks verteilt.  Diese  OS  Funktion dient dazu eine
bestimmte Anzahl freier  Blócke  zu  bestimmen,  und  in  eine Tabelle
zusammenzufassen.
Bevor  man  diese   OS   Funktion   benutzt   muº   man   eine  Block-
belegungstabelle  generieren,  in  der  vermerkt  ist,  welche  Blócke
ôberhaupt   noch    frei    sind.    Dazu    verwendet    man    BBTG,
BlockBelegungsTabelle muº ab &B600 generiert werden. Ist Block &01 ein
DIR Block, so ist er von Hand  als besetzt zu markieren (DATA, SYSTEM,
IBM). Block &00 wird NICHT beachtet.
Anschlieºend kann man diese OS Funktion  verwenden. Im Register B wird
die Anzahl gesuchter Blocks ôbergeben. Im  Data, System und IBM Format
ist jeder Block 1KB groº, aber im  Vortex Format hat ein Block bereits
4KB. Im Register C' (nicht C) ist die Gesammt-Anzahl freier Blócke des
aktuellen  Formates  anzugeben,  dies   ist   von   Format  zu  Format
verschieden, und hðngt auch von der  Anzahl benutzter Spuren ab. In HL
wird schlieºlich die Zieladresse angegeben,  ab der die Tabelle freier
Blocke generiert werden soll. Es ist  darauf zu achten, dass die ganze
Tabelle innerhalb einer Page Platz  findet,  HL  sollte also mit &XX00
geladen werden.
Nun wird die OS Funktion angesprungen, die Tabelle wird generiert, und
der Erfolg der Operation wird  im  Carry Flag angezeigt. Bei gesetztem
Carry passt die Datei NICHT  auf  die  Diskette. Ist das Carry dagegen
geleert, dann passt die Datei auf die  Disk, und HL zeigt auf das Ende
der Tabelle freier Blócke. Das  Tabellenende  wird  durch ein &00 Byte
markiert.

Bitte Beachten: Gibt man beim Einsprung  die Blockanzahl im Register B
mit &00 an, so bedeutet dies dass  256 Blócke gesucht werden. B sollte
also einen Wert gróºer Null haben.
Vor Aufruf dieser OS Funktion  ist unbedingt eine Gesammt-Blocktabelle
ab &B600 mittels BBTG zu generieren! Nur fôr Disk geeignet, nicht HD!

 ANZAHL FREIER EINTRÐGE EINES INHALTSVERZEICHMISSES ERMITTELN (DISK)
 ===================================================================

Kurzbeschreibung: Die Zahl freier 32  Byte DIR Eintrðge wird bestimmt,
dies ist wichtig um Dateien sichern zu kónnen. Nur fôr Disketten.

Label: EFED

ROM-Nummer: C

Startadresse: &FD83

Einsprungbedingungen:
REG08_1 = Laufwerk, von 0  bis  7,  dessen DIR untersucht werden soll.
Systemvariablen môssen korrekt sein.
DIR darf unsortiert sein.

Aussprungbedingungen:
BC = &0020
 E = Anzahl freier 32B Eintrðge des LWs.
HL = Start des 32er DIRs des LWs aus REG08_1.
32er DIR des LWs  ist  eingeblendet,  aber  die  Variable AKT_RAM wird
NICHT verðndert.

Manipuliert: AF, BC, DE, HL und der RAM Status.

Beschreibung: Will man eine Datei auf Diskette sichern, so muº auch im
Inhaltsverzeichnis ein entsprechender  Eintrag  gemacht  werden. Groºe
Dateien brauchen mehrere Eintrðge.
Diese OS Funktion ermittelt nun  wieviele freie/leere 32 Byte Eintrðge
in Inhaltsverzeichnis eines bestimmten Laufwerks noch frei sind.
In der RAM-Variable REG08_1 wird  das  LW  angegeben,  um dass es sich
handelt. Nun wird die OS Funktion aufgerufen.
Die OS Funktion ôbergibt  im  Register  E  die  Anzahl  freier 32 Byte
Eintrðge. Auºerdem zeigt HL auf den  Start  der 32er DIRs der LWs. Das
DIR RAM des LWs ist eingeblendet.

Bitte Beachten: Beim Aussprung  erhðlt  BC  den  Wert  &0020, dies ist
wichtig, wenn man im Anschluº an diese OS Funktion EGEN aufrufen will.
Spart immerhin 3ys.
Die RAM-Konfig wird nicht in AKT_RAM vermerkt.
ACHTUNG: EFED ist  nur  fôr  Disketten  zustðndig,  fôr HD-Partitionen
bitte die OS Funktion EFED_HD aus ROM A verwenden.





















INHALTSVERZEICHNIS-EINTRAG AUS TABELLE FREIER BLÓCKE GENERIEREN (SAVE)
======================================================================

Kurzbeschreibung: Aus  einer  Tabelle  freier  DIR-Blócke  werden DIR-
Eintrðge generiert, und sofort ins DIR eingetragen. NUR DISKETTE!

Label: EGEM bzw. EGEN (BC muss &0020 sein!)

ROM-Nummer: C

Startadresse: &FD80 (EGEM) bzw. &FD7D (EGEN)

Einsprungbedingungen:
 A = Anzahl zu generierender 32 Bytes Eintrðge.
BC = &0020 (NUR bei Einsprung in EGEN),
DE = Start Tabelle freier Blócke (von BBTT).
HL = Start 32er DIR des Ziel-Laufwerks.
HL'= 12 Bytes: User(1),Name(8),Extension(3)  der  zu sichernden Datei,
     OHNE Page-Ôbertritt!
YL = &00 ===> 1K Blockgróºe (Data,  System, IBM) bzw.
YL > &00 ===> 4K  Blockgróºe  (Vortex  Format).  Das  32er DIR RAM muº
     bereits eingeblendet sein.
Im DIR môssen genôgend freie Eintrðge zur Verfôgung stehen (==> EFED).
Das DIR darf unsortiert sein, freie Eintrðge werden herausgepickt.

Aussprungbedingungen: Inhaltsverzeichnis-Eintrag wurde generiert.

Manipuliert: AF, BC, DE, HL, AF', BC', DE', HL' und DIR.

Beschreibung: Diese OS Funktion  erlaubt es, im RAM - gepufferten 32er
Directory Eintrðge zu  installieren,  es  handelt  sich  also um einen
Eintrags-Generator. Dies ist z.B. beim sichern einer Datei nótig.
Zum Aufruf der OS Funktion  môssen:  Anzahl  32 Byte-Eintrðge (A), der
Start  der  Tabelle  freier  Blócke   (DE),   der  Start  des  bereits
eingeblendeten 32er DIRs des  LWs  (HL), User,Name,Extension der Datei
(HL') und die Blockgróºe 0/&FF (YL) bekannt sein.
Nach verlassen der OS Funktion  ist  der  Eintrag  im DIR vermerkt. Es
darf keinesfalls mit korrupten Parametern Eingesprungen werden.
Das Inhaltsverzeichnis  des  LWs  ist  nun  bereit  um  es  nach einem
Sortiervorgang (ISWS) auf Diskette zu schreiben.

Bitte Beachten: Es stehen zwei Einsprônge zu Verfôgung: EGEM und EGEN,
dabei ist EGEN um 3 us schneller,  braucht aber bereits den Wert &0020
im Registerpaar BC. Beim Einsprung  in  EGEM  kann BC einen beliebigen
Wert haben.
ACHTUNG: EGEM bzw. EGEN  sind  nur  fôr  Disketten  zustðndig, fôr HD-
Partitionen bitte die OS Funktion EGEN_HD aus ROM A verwenden.

















        PROGRAMM VERLASSEN UND RÔCKKEHR INS DESKTOP
        ===========================================

Kurzbeschreibung: Dies ist  ein  Einsprung  /  Rôcksprung  ins  OS fôr
Programme, die die Icons intakt gehalten haben.

Label: FORA

ROM-Nummer: C

Startadresse: &FD77

Einsprungbedingungen: Die Icons des  Desktop  und das Bildschirmformat
(64 * 32) môssen noch erhalten sein.

Aussprungbedingungen: - KEINE -

Manipuliert: irrelevant

Beschreibung: Will ein kleineres Programm  wieder  ins Desktop bzw. OS
zurôckkehren, so kann es diesen Einsprung verwenden, wenn die Icons in
der oberen Bildschirmhðlfte noch intakt  sind,  und wenn das Bild noch
64 Zeichen auf 32 Zeilen enthðlt.
Folgende Aktionen / Restaurationen werden ausgefôhrt:
* Modus 2 schalten
* beide ROMs einblenden
* 1. Seite der aktuellen DIRs anzeigen, falls vorhanden.
* Sprung nach KLICK in ROM D und damit ins Desktop.

Bitte Beachten: Es erfolgt kein Rôcksprung, es sei denn man prðpariert
zuvor die Variablen des OK Icons und der User klickt irgendwann OK an.

































         (TEILWEISE) LADEN EINER DATEI IN KURZ-ZEIT-SPIECHER
         ===================================================

Kurzbeschreibung: Eine  Datei  wird,  wenn  móglich  komplett,  in die
freien 16K KZS geladen.

Label: TEILA (erstes Laden) // TEILB (Rest(e) nachladen)

ROM-Nummer: C

Startadresse: &FD74 (TEILA) // &FD71 (TEILB)

Einsprungbedingungen:
TEILA: XRAM_??, Disk und LW System-Variablen korrekt!
TEILB: REG08_2,4, (REG_PC+1), REG_IY, REG_SP unverðndert lassen!!!

Aussprungbedingungen: gilt fôr TEILA und TEILB:
A = &00 ==> Die Datei wurde komplett in KZS geladen.
A = &F0 ==> Die Datei  wurde  teilweise  in  die KZS geladen, alle KZS
            sind voll beladen, Rest mittels TEILB nachladen.
A = &FF ==> Keine markierte Datei gefunden
REG08_2  = 32er DIR E-RAM-Block der restlichen Datei
REG_IY   = Start Dateirest im 32er DIR, falls ein Rest zu laden ist.
REG_PC+1 = Medium 0-12 (Floppy, HD, MM) von dem geladen wurde.

Manipuliert: AF, BC, DE, HL, AF', BC',  DE', HL', IX, IY, auºerdem die
RAM-Variablen: REG08_0...5, REG16_0, 1, REG16_6...REG32_1 (nur TEILA),
AKT_RAM, REG_IY, REG_SP,  REG_PC  und  XRAM_C4..FF.  Auºerdem der RAM-
Status, der Motor-Status und die FTB(File Tagging Byte)s.

Beschreibung: Diese OS Funktion  ermóglicht  es,  eine beliebig lange,
markierte Datei in die Kurzzeit-Speicher E-RAM Blócke zu laden. Reicht
die Anzahl vohandener KZS (Kurzzeit-Speicher)  nicht  aus, so wird die
Datei nur  soweit  geladen  bis  alle  KZS  Blócke  beladen  sind. Der
Dateirest kann anschlieºend nachgeladen  werden,  notfalls in mehreren
Schritten.
Will man eine (lange) Datei z.B. auf dem Bildschirm anzeigen, so passt
sie unter Umstðnden nicht ganz in  den  Speicher, um dieses Problem zu
lósen wurde TEILA/TEILB entwickelt.
Zuerst markiert man die zu  ladende  Datei in den Datei-tagging-Bytes,
nun wird TEILA aufgerufen.  Alle  freien 16K Erweiterungsblocks werden
als KZS markiert, und die Datei  wird  Block fôr Block in den Speicher
geladen.
Passt die Datei ganz in  den  Speicher,  so  kehrt die OS Funktion mit
A=&00 zurôck. Es muº  also  kein  Dateirest  nachgeladen werden. Wurde
keine markierte Datei gefunden, so hat  A  den Wert &FF. War die Datei
zu groº um sie auf einmal zu laden,  so wurden alle KZS mit dem Anfang
der Datei beladen, und die OS Funktion kehrt mit A=&F0 zurôck. Nun ist
dafôr Sorge  zu  tragen,  daº  die  RAM-Variablen  REG08_2,4,  REG_IY,
REG_PC+1 und REG_SP unverðndert bleiben,  nur  dann kann der Dateirest
mit TEILB  nachgeladen  werden.  Die  Aussprungbedingungen  von  TEILB
entsprechen denen von TEILA.  Unter  Umstðnden  ist  noch ein weiterer
Dateirest zu laden, dies hðngt von der Gesammtlðnge der Datei ab.

Bitte Beachten: Um TEILB  korrekt  aufzurufen môssen die RAM-Variablen
REG08_2, _4, REG_IY, REG_SP und REG_PC+1 unverðndert bleiben!!








  (TEILWEISE) SICHERN EINER DATEI AUS DEM KURZ-ZEIT-SPIECHER (DISK)
  =================================================================

Kurzbeschreibung: Eine Datei wird (teilweise) aus dem KZS gesichert.

Label: TEISI (anfangs) und TEISK (bei Dateirest)

ROM-Nummer: C

Startadresse: &FD56 (TEISI), &FD59 (TEISK)

Einsprungbedingungen:
a.) TEISI:
A = Laufwerk, auf das gespeichert werden soll: 0..7 (keine HD, MM !!).
REG_BC1 = Blockanzahl der Datei insgesammt, formatabhðngig.
Ab REG16_8 stehen 12 Bytes, die  User(1), Name(8) und Extension(3) der
Datei darstellen.
Der Motor des Ziel-Laufwerks muss bei Aufruf eingeschalten sein.
b.) TEISK: Die RAM  Variablen  REG_AF1,  REG_DE1,  REG_HL1, REG_IX und
REG16_8 bis REG16_8+12 môssen seit TEISI erhalten worden sein.

Aussprungbedingungen: Der Akku liefert  Informationen  ôber den Erfolg
der Operation:
A = &FF ==> Die Datei wurde komplett auf Diskette geschrieben. Gut so!
A = &F0 ==> Die Datei wurde nur TEILWEISE auf Disk geschrieben, es muº
    nochmals nachgeladen werden, der Rest wird mit TEISK gesichert.
A = &00 ==> Es ist ôberhaupt kein DIR eingelesen.
A = &01 ==> Das gewðhlte LW ist nicht markiert.
A = &02 ==> Die Datei hat eine Lðnge von 0 KB. Also auch Abbruch.
A = &03 ==> Die Datei ist zu groº, auf Disk zu wenig Platz.
A = &04 ==> Im Ziel-DIR sind zu wenig Eintrðge frei.
A = &05 ==> Es sind keine KZS im E-RAM frei.
A = &06 ==> Bei schreiben meldet das LW "nicht bereit".

Bei TEISI & TEISK manipuliert: AF, BC, DE, HL, AF', BC', DE', HL', IX,
IY, RAM Variablen FDC_RES, REG08_0,1, REG_DE1(low), REG_PC(low)
Nur bei TEISI manipuliert: RAM-Variablen TURBO_A bis M, REG16_0 bis 9,
REG32_1,2, REG_AF1, REG_HL1, REG_IX, das RAM von &B000 bis &BFFF.
Auºerdem  wurden  die   RAM-Konfiguration,   die  Spurwechselzeit  der
Laufwerke und die Inhaltsverzeichnisse verðndert.

Beschreibung: Diese OS Funktion  ist  das  Gegenstôck zu TEILA. Wðrend
TEILA eine Datei teilweise lðd, dienen TEISI / TEISK dazu die geladene
Datei wieder abzuspeichern. Ganz oder in Stôckchen.
Zuerst springt  man  nach  TEISI.  TEISI  generiert  einen  Eintrag im
Inhaltsverzeichniss und  speichert  alle  KZS(Kurz-Zeit-Speicher)  auf
Diskette. Ein Fehler wird im Akku ôbergeben.
Kehrt TEISI mit dem Byte  &FF  im  Akku  zurôck,  dann wurde die Datei
komplett gesichert. Enthðlt der Akku  jedoch  den  Wert &F0, so wurden
zwar alle KZS gespeichert,  aber  die  Datei  ist  lðnger  als das zur
Verfôgung stehende RAM.  Einige  RAM-Variablen  sind  nun zu erhalten,
siehe oben!! Es muº  also  erst  der  Dateirest  mit TEILB nachgeladen
werden, dann kann dieser Rest  mit  TEISK auf Disk geschrieben werden.
Dieser Vorgang kann sich  mehrmals  wiederholen,  wenn  die Datei lang
oder das E-RAM gering ist.
Das Inhaltsverzeichnis wird  zwar  mit  den  korrekten neuen Eintrðgen
versorgt, jedoch wird es  nicht  auf  Disk  geschrieben. Dies hat z.B.
dann Sinn, wenn mehrere Dateien kopiert werden sollen.

Bitte Beachten: Bei Aufruf der OS Funktion muº der Motor des Laufwerks
an sein! Das  neue  DIR  muº  mach  Aufruf  von  TEISI/K mittels SIDIR
gesichert werden. Vor dem Aufruf kann es sinnvoll sein, einen weiteren
Block (unterhalb des DIR Puffers) als DIR Puffer zu vermerken. Da neue
Eintrðge generiert werden, steigt der RAM Verbrauch im DIR Puffer.
        EINE SEITE TEXT AUF DEM BILDSCHIRM DARSTELLEN
        =============================================

Kurzbeschreibung: Eine Seite Text wird auf dem Bildschirm dargestellt.

Label: TYSAZ (normal) // TYSZA (Anzahl RETURNs variabel)

ROM-Nummer: C

Startadresse: &FD6E (TYSAZ) // &FD6B (TYSZA)

Einsprungbedingungen: fôr alle Labels:
MAX_CRX = MODE 2 Spalten pro Zeile
MAX_CRY = Anzahl Zeilen pro Seite
REG08_6 = phys.RAM-Block (&C0,&C4,&C5,..,&FF), in  dem der Text steht,
          dieser Block muº  schon  eingeblendet  und  als KZS markiert
          sein.
REG16_0 = Start der auszugebenden Seite Text
REG16_1 = Textende in momentaner RAM-Konfiguration, also Byte oberhalb
          des akt. KZS bzw. Byte oberhalb des Pufferendes.
Fôr TYSZA gilt auºerdem:
XL = Anzahl  bereits   ausgegebener   RETURNs,   also  Anzahl  bereits
     verbrauchter Zeilen.

Aussprungbedingungen: gilt fôr alle Labels:
A = &00 ==> Seite konnte korrekt dargestellt werden.
A = &FE ==> Seite wurde ausgegeben, das Textende wurde erreicht!
A = &FF ==> Seite  wurde   teilweise  ausgegeben, bitte den restlichen
            Text NACHLADEN! Dann TYSZA aufrufen und Rest ausgeben

Manipuliert: AF, BC, DE, HL,  AF',  BC', DE', HL', REG08_6, REG16_0,1,
C_POS und der RAM-Status

Beschreibung: Diese OS Funktion  dient  dazu  eine  Seite Text auf dem
Bildschirm darzustellen. Der Text  kann  irgendwo  im  RAM oder in den
Kurzzeit-Speichern liegen. Als Einsprung benutzt  man das Label TYSAZ.
Liegt  der  Text  in  den  KZS,   dann   wird  am  Ende  eines  Blocks
selbststðndig der  nðchste  KZS  eingeblendet,  und  der  dortige Text
fertig ausgegeben.
Normalerweise wird die OS  Funktion  mit  A  =  &00 zurôckkehren. Dies
bedeutet, daº die aktuelle Seite Text dargestellt wurde, aber der Text
noch nicht zu  Ende  ist.  Denn  wenn  das  absolute Textende erreicht
wurde, wird mit A = &FE beendet.
Kehrt die OS Funktion mit A = &FF  zurôck, dann ist das Ende aller KZS
erreicht, das Dateiende aber noch  nicht.  Nun sind Daten z.B. mittels
TEILB (siehe auch vorige OS Funktionen) nachzuladen. Anschlieºend kann
der Rest der aktuellen Seite mittels TYSZA ausgegeben werden.
Beim Einsprung in TYSZA  muº  XL  mit  der Anzahl bereits ausgegebener
RETURNs geladen sein, dies erledigt normalerweise TYSAZ, also XL bitte
intakt lassen (oder sichern).

Bitte Beachten: Bitte  Ein-  &  Aus-Sprung-Bedingungen  BEACHTEN! Beim
Einsprung braucht TYSZA mehr Parameter als TYSAZ.











         MULTIPLIKATION VON 8 MAL 8 BIT, MIT 16 BIT ERGEBNIº
         ===================================================

Kurzbeschreibung: Zwei 8-Bit Werte werden miteinander multipliziert.

Label: MUL88

ROM-Nummer: C

Startadresse: &FD65

Einsprungbedingungen: Die Register H und  L  enthalten  je einen 8 Bit
Wert, diese sollen multipliziert werden.

Aussprungbedingungen: HL = 16 Bit Ergebniº der Multiplikation.

Manipuliert: DE, HL und die Flags

Beschreibung: Da der Z80  keine  Multiplikationsbefehle  hat, muº sich
der Programmierer softwaremðºig behelfen.
Diese OS Funktion bietet eine sehr  schnelle 8 * 8 Bit Multiplikation.
Dabei werden die beiden zu multiplizierenden  Werte in den Registern H
und L angegeben.
Die OS Funktion ôbergibt das  16  Bit  Ergebniss im Doppelregister HL.
Eventuelle Vorzeichen werden nicht beachtet.

Bitte  Beachten:  Nur  positive  Werte  im   Bereich  von  0  bis  255
multiplizierbar.




































                 SICHERN EINER DATEI AUF DISKETTE
                 ================================

Kurzbeschreibung: Ein definierter  Speicherinhalt  wird  als Datei auf
Diskette oder HD gesichert.

Label: SICHRE

ROM-Nummer: C

Startadresse: &FD8C

Einsprungbedingungen:
Der Laufwerksmotor ist einzuschalten  (OUT  &FA7E,&FF). Der SAVE-Modus
muº in REG08_3 eingetragen werden: (als ASCII-Zahl+1)
REG08_3 = "1"+1 = &32 ==> Vordergrund Programm sichern, Daten aus RAM.
REG08_3 = "2"+1 = &33 ==> Hintergrund Programm sichern, Daten aus RAM.
REG08_3 = "3"+1 = &34 ==> Hauptspeicher sichern.
REG08_3 = "4"+1 = &35 ==> Erweiterungs-RAM.
REG16_6+1 = Ziellaufwerk, auf das  gesichert  werden soll. Das Ziel-LW
            wird durch das  entsprechende  ASCII Zeichen symbolisiert,
            fôr Laufwerk A also z.B.: &41 (oder &61) ==> LW A (a) usw.

Bei SAVE-Modus 3 oder 4 sind weitere Daten anzugeben:
REG16_8 = 12 Bytes, geben die  User-Nr.  (1 Byte), Dateiname (8 Bytes)
          und Extension (3 Bytes) an.
REG_IX  = Quell-Adresse, ab der gespeichert werden soll. (16 Bit).
AKT_RAM = Quell-Block, aus dem/ab  dem gesichert werden soll. &C0-&FF.
REG_IY  = Datei-Lðnge in KB (16 Bit). (Datei sollte max.512K haben).

Aussprungbedingungen: Datei wurde auf Diskette / HD gespeichert und im
IHV (Inhaltsverzeichnis) vermerkt.

Manipuliert: AF, BC, DE, HL,  AF', BC', DE', HL',  IX, IY, und die RAM
Variablen REG08_0,1,4, REG16_0 bis  REG32_1,  AKT_RAM, REG_R, der RAM-
Bereich von &8000 bis &9FFF und &B000 bis &BFFF.
Auºerdem  wurden  die  E-RAM-Konfiguration,  die  Spurwechselzeit  der
Laufwerke und die Inhaltsverzeichnisse verðndert. Ein DIR Puffer E-RAM
ist eingeblendet,  es  sollte  durch:  LD  BC,&7FC0:OUT  (C),C  wieder
ausgeblendet werden.

Beschreibung:  Dieses  Unterprogramm   erlaubt   es  einen  beliebigen
Speicherbereich als Datei auf  Diskette  oder  HD  zu schreiben und im
Inhaltsverzeichniss zu vermerken.
Die Variable REG08_3  gibt  an  wie  gesichert  werden  soll,  es kann
entweder ein bereits eingelesenes Programm  gesichert werden, oder ein
beliebiger RAM Bereich.
In jedem Fall ist in  REG16_6+1  das  Laufwerk von A..L anzugeben, und
zwar als ASCII Wert von &41 .. &4D. Siehe Einsprungbed. !!!

Bitte Beachten: Es kann  nur  auf  Laufwerke gespeichert werden, deren
Inhaltsverzeichnis bereits  eingelesen  und  in  den  Systemveariablen
vermerkt ist.
Man sollte dafôr sorgen daº sich auf das Laufwerk auch Daten schreiben
lassen.
Das LW wird in REG16_6+1 als ASCII Wert angegeben.








                ANZEIGE EINES FutureOS DATEIHEADERS
                ===================================

Kurzbeschreibung: Ein FutureOS Dateiheader wird angezeigt.

Label: DHED

ROM-Nummer: C

Startadresse: &FD5F

Einsprungbedingungen: Es sollte eine markierte Datei vorhanden sein.

Aussprungbedingungen: Header Informationen wurden angezeigt!
XL = &8C ==> Datei hatte gar keinen Header !!!
XL = &B3 ==> Datei hatte Header (wie angenommen).
Das System befindet sich in MODE  1.  Der  32 mal 32 Zeichen Modus ist
aktiv. Das untere ROM (Zeichensatz!) ist eingeblendet.
Der angezeigte Header liegt ab &B400 im RAM.
Die bearbeitete Datei bleibt markiert, d.h. FTB erhalten!

Manipuliert: AF, BC, DE, HL, AF', BC',  DE',  HL', IX, IY und die RAM-
Variablen REG08_0,1,5, REG16_0,  REG_PC  und  C_POS.  Auºerdem die RAM
Bereiche von &B000 bis &B7FF und  von &BC00 bis &BC7F, der RAM-Status,
der Modus (1), der FDC, die Datei-Tagging Bytes und der Motor Status.

Beschreibung: Der 128 Byte Header  einer  Datei enthðlt unter FutureOS
zusðtzliche Informationen. (Kopfzeile, Icon - bitte Nachschlagen).
Diese OS Funktion dient dazu  den  Header  der ersten markierten Datei
auf dem Bildschirm anzuzeigen, dies beinhaltet folgende Informationen:
- Kopfzeile bzw. Semigrafik- bzw. Grafik-Icon
- Ladeadresse & Ladeblock
- Dateilðnge
- Startadresse & Startblock
Zur Darstellung dieser Informationen  wird  MODE  1 benutzt, alle vier
Farben finden Verwendung, sie sollten sich also etwas unterscheiden.

Bitte Beachten: Hat die Datei keinen  Header bricht die OS Funktion ab
und kehrt mit einer Fehlermeldung ins OS zurôck.

























        LADEN DES DATEIHEADERS EINER MARKIERTEN DATEI
        =============================================

Kurzbeschreibung: Dateiheader der ersten markierten Datei laden.

Label: LADAH

ROM-Nummer: C

Startadresse: &FD92

Einsprungbedingungen: Es sollte eine markierte Datei vorhanden sein!

Aussprungbedingungen: 512 Bytes der ersten  markierten Datei stehen ab
&B400 im RAM. Der Header befindet sich also genau an dieser Adresse.
(REG_PC+1) = Code von 0 bis  14  des  Mediums (Laufwerk, HD20, MM, SD-
Karte) von dem die Datei geladen wurde

Manipuliert: siehe LADEN, dazu noch REG08_3, REG16_1

Beschreibung: Will man von einer Datei  ihren ersten Sektor oder ihren
Dateiheader laden, so kann man diese OS Funktion verwenden.
Es wird  die  erste  markierte  Datei  verwendet.  Sollte  keine Datei
markiert sein, dann bricht die OS Funktion mit einer Fehlermeldung ab,
und springt ins OS zurôck.
Nach Aufruf der OS Funktion steht der  erste Sektor der Datei ab &B400
im RAM. Auºerdem stehen User, Name  und  Extent  der Datei ab &B7E0 im
RAM.
Diese OS Funktion eignet  sich  besonders,  wenn  man den Header einer
Datei untersuchen will. Die FTBs (Dateistatus) bleiben erhalten.

Bitte Beachten: Irgendeine Datei sollte markiert sein.
































                  SICHERE L-RAM ALS LZS IM E-RAM
                  ==============================

Kurzbeschreibung: Das RAM von &0000 bis &3FFF wird im Erweiterungs-RAM
gesichert, dieses E-RAM  wird  als  Lang-Zeit-Speicher (LZS) markiert.
Siehe auch OS Funktion: RRB0.

Label: SSB0

ROM-Nummer: C

Startadresse: &FD4D

Einsprungbedingungen: Es sollte E-RAM vorhanden sein, davon sollte ein
16K Block als frei oder KZS markiert sein.

Aussprungbedingungen: Das Z-Flag gibt Aufschluº ôber den Erfolg.
Zero-Flag geleert ==> Kein E-RAM frei, Unteres RAM nicht gesichert!
Zero-Flag gesetzt ==> Unteres RAM wurde korrekt gesichert
Die RAM-Variable L_RAM  enthðlt  die  Nummer  des physikalischen E-RAM
Blocks von &C4 bis &FF. Dieses Erweiterungs-RAM wurde eingeblendet.
Falls kein freies E-RAM gefunden wurde  (Zero-Flag = 0) enthðlt die OS
Variable L_RAM den Wert &00.
Das untere RAM wurde zwischen &0000 und &3FFF eingeblendet
Der Bildschirm Modus wurde auf 2 gesetzt

Manipuliert: AF, BC, DE, HL und die Variable L_RAM und XRAM_??.

Beschreibung: Unter FutureOS  hat  der  unterste  RAM  Block, also das
Lower-RAM (&0000 bis &3FFF) oft Pufferfunktion. Er wird z.B. von DIRWA
und von TS_D_IN als Zwischenspeicher benutzt.
Die OS Funktion SSB0 sichert  den  Lower-RAM Block im Erweiterungs(E)-
RAM, vorrausgesetzt dort sind noch 16  KB  frei. Der freie E-RAM Block
wird  als  Lang-Zeit-Speicher  (LZS)   markiert,   auºerdem  wird  die
physikalische RAM-Konfiguration  des  E-RAMs  in  der  Variable  L_RAM
gesichert.

Bitte Beachten: Ist Z-Flag gelóscht,  so  wurde  das untere RAM (&0000
bis &3FFF) nicht gesichert.

























                HOLE ALTES L-RAM AUS LZS DES E-RAM
                ==================================

Kurzbeschreibung: Das RAM  von  &0000  bis  &3FFF  wird  aus dem E-RAM
restauriert. Siehe auch OS Funktion: SSB0. s.o.

Label: RRB0

ROM-Nummer: C

Startadresse: &FD4A

Einsprungbedingungen: SSB0 sollte das L-RAM zuvor gesichert haben

Aussprungbedingungen: Das Z-Flag gibt Aufschluº ôber den Erfolg.
Zero-Flag gesetzt ==> Fehler, L-RAM wurde nie gesichert!
Zero-Flag geleert ==> L-RAM wurde korrekt restauriert.
Der Zwischenspeicher-LZS des E-RAMs wurde wieder freigegeben.
Die Variable L_RAM wurde auf &00 gesetzt.

Manipuliert: AF, BC, DE, HL und die Variablen L_RAM und XRAM_??.

Beschreibung: Wurde das L-RAM (&0000  bis  &3FFF)  zuvor durch SSB0 im
E-RAM gesichert, dann  kann  man  es  durch  diese  OS Funktion (RRB0)
wieder restaurieren. Der  als  LZS  markierte  Block  des  E-RAMs wird
wieder freigegeben und als  KZS  markiert.  Auºerdem wird die Variable
L_RAM auf &00 gesetzt.
Ist beim Rôcksprung das Z-Flag gelóscht,  dann wurde das L-RAM korrekt
restauriert. Bei gesetztem Z-Flag wurde das L-RAM gar nicht gesichert.

Bitte Beachten: L-RAM sollte zuvor (--> SSB0) gesichert worden sein.

































        DATEN DER RAM-DISK SCHÔTZEN - XRAM_?? ÐNDERN
        ============================================

Kurzbeschreibung: Die durch  RAM-Disk-Dateien  belegten  Blócke des E-
RAMs werden geschôtzt.

Label: PRO_MD

ROM-Nummer: C

Startadresse: &FD50

Einsprungbedingungen: -

Aussprungbedingungen: Die von RAM-Disk-Dateien  belegten Blócke des E-
RAMs werden in den XRAM_?? Variblen als USER-RAM (&11) vermerkt.
Die RAM-Konfiguration &CC  (5.  16K  Block)  ist  eingeblendet, dieser
Block enthðlt das DIR der RAM-Disk.

Manipuliert: AF, BC, DE, HL, RAM-Status und die Variablen XRAM_CC..FF.

Beschreibung: Das FutureOS beinhaltet  eine dynamische RAM-Verwaltung.
Es benutzt also das gesammte freie  E-RAM. Unter Amsdos bzw. CP/M kann
das E-RAM als RAM-Disk  genutzt  werden. Das Inhaltsverzeichniss (DIR)
der RAM-Disk steht im Block  &7FCC  (5.  16K  Block) des E-RAMs ab der
Adresse &4000 im Speicher.
Diese OS  Funktion  schôtzt  die  Dateien  der  RAM-Disk.  Dafôr  wird
zunðchst die hóchste, von der RAM-Disk belegte, Blocknummer ermittelt.
Alle Blocks darunter  werden  in  den  XRAM_??  Variablen als USER-RAM
(&11) markiert. Von diesen  USER-RAMs  laºt  das  FutureOS die Finger,
somit werden alle Daten der RAM-Disk erhalten.
Ist die RAM-Disk komplett  gefôllt,  dann  sind alle Variablen XRAM_CC
bis XRAM_FF mit &11 markiert,  dem  FutureOS  stehen dann nur noch die
64KB der Blócke &C4, &C5, &C6 und &C7 zur Verfôgung.
Diese OS Funktion wird bei  jedem System-Start aufgerufen, die Dateien
der RAM-Disk werden also automatisch geschôtzt.
Hat man zuwenig RAM,  dann  kann  man  das  DIR  der RAM-Disk per Hand
lóschen, und das System neu starten. Das FutureOS wird sich nun wieder
richtig wohl fôhlen, aber man sollte  nicht vergessen zuvor ein Backup
der RAM-Disk anzufertigen.

Bitte Beachten: Auch Dateien die im  DIR der RAM-Disk gelóscht wurden,
also auf  User  &E5  stehen  werden  erhalten.  Will  man  den  "Môll"
loswerden, dann kann  man  die  Dateien  entweder  von Hand entfernen,
indem man alle Blocknummern auf &00 setzt. Oder man kann alle RAM-Disk
Dateien  auf  Disk  kopieren,  dann  das  DIR  der  RAM-Disk  mit  &E5
initialisieren und dann die Dateien zurôckkopieren.

















        ERMITTLE DIE BLOCK-ANZAHL DER ERSTEN MARKIERTEN DATEI
        =====================================================

Kurzbeschreibung: Die Blockanzahl  der  ersten  markierten  Datei wird
bestimmt.

Label: G_BLK

ROM-Nummer: C

Startadresse: &FD41

Einsprungbedingungen: Es sollte mindestens  eine  Datei markiert sein.
Die System-RAM-Variablen sollten korrekte Werte enthalten.

Aussprungbedingungen: Wenn eine markierte  Datei  gefunden wurde, dann
ist ihre Blockanzahl im Register BC gegeben. War keine Datei markiert,
dann enthðlt das Register HL den Wert &0000.
REG_BC1 = BC = Anzahl Blócke der ersten markierten Datei.
HL = &0000 ==> es war gar keine Datei markiert.

Manipuliert: siehe FMD32

Beschreibung: Will man die  Block-Anzahl  einer  Datei bestimmen, dann
kann man diese OS  Funktion  dazu  benutzen.  Es  wird  die Anzahl der
Blócke der ersten markierten Datei bestimmt.
Beim Einsprung ist darauf zu achten, daº das System-RAM korrekte Werte
enthðlt, besonders die Variablen TURBO_?.  Wenn sich der Programmierer
an die Konventionen hðlt, dann ist das kein Problem.
Diese OS  Funktion  funktioniert  fôr  Data,  System,  IBM  und Vortex
Format, auch Dateien auf HD20 werden unterstôtzt.
Nach dem Aufruf der OS Funktion gibt  diese  im Register BC und in der
RAM-Variable REG_BC1  die  Block-Anzahl  der  ersten  markierten Datei
zurôck.
Aber Achtung: Wenn  das  Register  HL  beim  Aussprung  den Wert &0000
enthðlt, dann wurde gar keine markierte Datei gefunden.
Man beachte: Eine  Datei  hat  bei  verschiedenen  Formaten  auch eine
verschieden groºe Block-Anzahl:
Nehmen wir an, die Datei 'MULTITAS.X16'  ist  7  KB groº, dann hat sie
unter Data, System und IBM  Format  auch  die Blockanzahl von 7. Aber,
unter Vortex-Format hat die  selbe  Datei  nur  zwei  Blócke und keine
sieben.

Bitte Beachten: RAM-Variablen môssen korrekte Werte enthalten.




















ERMITTLE DIE BLOCK-ANZAHL  EINER  DATEI  BEI  DATA,  SYSTEM,  IBM ODER
======================================================================
                            VORTEX FORMAT
                            =============

Kurzbeschreibung: Die Blockanzahl einer Datei wird bestimmt. Dabei muº
es sich aber um Data, System, IBM oder Vortex Format handeln.

Label: BLK_FD

ROM-Nummer: C

Startadresse: &FD47

Einsprungbedingungen: HL = Zeiger auf ersten Eintrag der Datei.
Die System-RAM-Variablen sollten korrekte Werte enthalten.

Aussprungbedingungen: BC = &00?? = Anzahl Blócke der Datei.

Manipuliert: AF, BC, DE, HL, IX und IY.

Beschreibung: Will man die  Block-Anzahl  einer Datei bestimmen, deren
erster Extent im 32er DIR bekannt ist, dann kann man diese OS Funktion
dazu benutzen. Die Datei muº sich aber auf einem Datentrðger mit Data,
System, IBM oder Vortex Format befinden.
Beim Einsprung ist darauf  zu  achten,  daº  das  Register  HL auf den
ersten Eintrag der zu untersuchenden Datei  zeigt. Damit ist der erste
Eintrag im 32er DIR gemeint.  Das  entsprechende  E-RAM, indem das DIR
der Datei gepuffert ist, muº natôrlich eingeblendet sein.
Nach dem Aufruf der OS Funktion  gibt  diese im Register BC die Block-
Anzahl der Datei zurôck.
Man beachte: Eine  Datei  hat  bei  verschiedenen  Formaten  auch eine
verschieden groºe Block-Anzahl:
Nehmen wir an, die Datei BEER-TST.ASC ist 14K groº, dann hat sie unter
Data, System und IBM Format auch  die  Blockanzahl von 14. Aber, unter
Vortex-Format hat die selbe Datei nur vier Blócke und keine 14.

Bitte Beachten: Die Datei  muº  sich  auf  einem Datentrðger mit Data,
System, IBM oder Vortex Format befinden.

























         ERMITTLE DIE BLOCK-ANZAHL EINER DATEI AUF FESTPLATTE
         ====================================================

Kurzbeschreibung: Die Blockanzahl einer Datei wird bestimmt. Dabei muº
es sich aber um eine Datei auf Festplatte handeln.

Label: BLK_HD

ROM-Nummer: C

Startadresse: &FD44

Einsprungbedingungen: HL = Zeiger auf ersten Eintrag der Datei.
Die System-RAM-Variablen sollten korrekte Werte enthalten.

Aussprungbedingungen: BC = &???? = Anzahl Blócke der Datei.

Manipuliert: AF, BC, DE, HL, IX und IY.

Beschreibung: Will man die  Block-Anzahl  einer Datei bestimmen, deren
erster Extent im 32er DIR bekannt ist, dann kann man diese OS Funktion
dazu benutzen. Die Datei muº sich aber auf der Dobbertin HD befinden.
Beim Einsprung ist darauf  zu  achten,  daº  das  Register  HL auf den
ersten Eintrag der zu untersuchenden Datei  zeigt. Damit ist der erste
Eintrag im 32er DIR gemeint.  Das  entsprechende  E-RAM, indem das DIR
der Datei gepuffert ist, muº natôrlich eingeblendet sein.
Nach dem Aufruf der OS Funktion  gibt  diese im Register BC die Block-
Anzahl der Datei zurôck.
Achtung: Wôrde sich die Datei  auf  Diskette befinden, dann kónnte sie
eine erheblich abweichende Block-Anzahl aufweisen.

Bitte Beachten: Die Datei muº sich auf HD befinden.
































        WARTEN AUF DEN DRUCK EINER BELIEBIGEN TASTE
        ===========================================

Kurzbeschreibung: OS Funktion wartet auf den Druck irgendeiner Taste.

Label: WATA

ROM-Nummer: C

Startadresse: &FD38

Einsprungbedingungen: -

Aussprungbedingungen: Vom Anwender wurde ein  Taste gedrôckt. Der Wert
dieser Taste + 1 wird in Register A ôbergeben (siehe H_ALLET).

Manipuliert: AF, BC, DE, HL, IX, PIO und PSG.

Beschreibung: Diese OS Funktion  dient  dazu  so  lange zu warten, bis
durch den Anwender eine beliebige Taste gedrôckt wird. Die OS Funktion
ôbergibt den ASCII - Wert  der  "gedrôckten  Taste  + 1" im Akku. Ohne
Tastendruck wartet die Funktion fôr ewig.
Um  die  Tastatur  abzufragen   sollte   allerdings  die  OS  Funktion
'H_XALLET' verwendet werden.

Bitte Beachten: OS Funktion  kehrt  erst  NACH  dem  Druck einer Taste
zurôck.





































          KONVERTIERE ZWEI ASCII-ZEICHEN IN EINEN 8 BIT WERT
          ==================================================

Kurzbeschreibung: Zwei  ASCII-Zeichen  werden  in  einen  8  Bit  Wert
konvertiert.

Label: CC2N

ROM-Nummer: C

Startadresse: &FD3B

Einsprungbedingungen: Ab HL liegen  zwei  ASCII-Zeichen  (0-9, A-F) im
RAM. Zuerst das hóherwertige,  anschlieºend das niederwertige Zeichen.
Ein Beispiel ist die Eingabe einer User-Nummer in einem Text-String.

Aussprungbedingungen: A  = 8 Bit Wert &00-&FF
                        HL = HL + &0001

Manipuliert: AF, B und HL

Beschreibung: Diese OS Funktion dient  dazu zwei ASCII-Zeichen, die im
Speicher abgelegt sind in einen 8 Bit Wert zu konvertieren. Bei Aufruf
der OS Funktion zeigt HL  auf  zwei  Zeichen im Speicher: (HL) enthðlt
das hóherwertige Zeichen und (HL+1)  enthðlt das niederwertig Zeichen.
Nach dem Rôcksprung der OS Funktion ist Register HL um Eins erhóht und
der Akku enthðlt einen 8 Bit Wert, der sich folgendermaºen errechnet:

A = (HL)*16 + (HL+1)

Beispiel:

Die Adresse &4000 enthðlt das Zeichen "7" und &4001 enthðlt "B".

        LD   HL,&4000
        CALL CC2N

Der Akku enthðlt nun &7B.

Diese OS Funktion eignet sich  lediglch  dazu  Zeichen von "0" bis "9"
und "A" bis "F" in einen 8 Bit Wert zu konvertieren.
Im FutureOS wird diese OS  Funktion  z.B.  dazu  benutzt, mit der Hand
eingegebene User-Nummern (2 Zeichen) in ein Byte umzurechnen.

Bitte Beachten: Die zu konvertierenden  Zeichen môssen zwischn "0" und
"9" bzw. "A" und "F" sein.


















 EIN BYTE WIRD IN FORM ZWEIER ZEICHEN AUF DEM BILDSCHIRM DARGESTELLT
 ===================================================================

Kurzbeschreibung: Ein Byte wird hexadezimal dargestellt.

Label: HAUT

ROM-Nummer: C

Startadresse: &FD3E

Einsprungbedingungen: A = Byte, das dargestellt werden soll.

Aussprungbedingungen:  Zwei  hexadezimale   Zeichen   wurden  auf  den
Bildschirm geschrieben.

Manipuliert: AF, BC, DE, HL, AF', IX, CUR_POS und REG08_0.

Beschreibung:  Diese  OS  Funktion  dient   dazu   einen  8  Bit  Wert
hexadezimal auf dem Bildschirm  darzustellen.  Das darzustellende Byte
wird im  Akku  ôbergeben.  Die  OS  Funktion  gibt  anschlieºend  zwei
hexadezimal Zeichen auf  dem  Bildschirm  aus.  Dabei  muss Bildschirm
Modus 1 aktiviert sein. Die beiden  Zeichen  werden mit PEN 1 (BB!) ab
der aktuellen CURsor-POSition dargestellt.

Bitte Beachten: OS Funktion ist fôr Mode 1 ausgelegt. Das Byte wird im
hexadezimalen Zahlensystem dargestellt.





































 TESTE OB 4 MB RAM ERWEITERUNG ANGESCHLOSSEN, SETZTE SYSTEM VARIABLEN
 ====================================================================

Kurzbeschreibung: Testet wie viel Erweiterungs - RAM (0,5 MB bis 4 MB)
am CPC angeschlossen ist. Die ersten 512 KB werden nicht beachtet.

Label: TXR4M

ROM-Nummer: C

Startadresse: &FD32

Einsprungbedingungen: -

Aussprungbedingungen: System-Variablen X4RXE,  X4RDC,  X4RBA und X4R98
wurden entsprechend des angeschlossenen Erweiterungs-RAMs gesetzt.
Das Register BC enthðlt &7FC0 und der Hauptspeicher ist eingeblendet.

Manipuliert: AF, BC, DE, HL, AF',  IX,  Adresse  &4000  in allen 16 KB
Erweiterungs-RAM Blócken ab der RAM  Konfiguration  &7EC4. Und die RAM
Konfiguration selbst: Hauptspeicher ist eingeblendet.
Die ersten 512 KB E-RAM wurden jedoch nicht manipuliert.

Beschreibung: An den CPC kann  eine 4 MB RAM-Erweiterung angeschlossen
werden. Dieses Erweiterungs-RAM wird in  16  KB Blócken zwischen &7FC4
und &78FF angesprochen.
Diese OS Funktion testet welche einzelnen  512 KB Blócke der móglichen
4 MB RAM tatsðchlich angeschlossen /  ansprechbar sind. Die ersten 512
KB (Port &7Fxx) werden dabei nicht beachtet.
Fôr jeden angeschlossenen 512 KB  Block werden die entsprechenden Bits
in den System RAM  Variablen  X4RXE,  X4RDC,  X4RBA bzw. X4R98 gesetzt
(siehe Datei #OS-VAR.DEU). Diese 512  KB Blócke werden jeweils mittels
der I/O-Ports &7Exx,  &7Dxx,  &7Cxx,  &7Bxx,  &7Axx,  &79xx bzw. &78xx
angesprochen. Die ersten 512 KB (Port &7Fxx) werden nicht beachtet, da
diese ôber die XRAM_?? Variablen verwaltet werden.
Nach dem  Rôcksprung  der  OS  Funktion  TXR4M   sind  die  System RAM
Variablen zur Verwaltung von  4  MB  E-RAM  auf gôltige Werte gesetzt.
(Das FutureOS ruft TXR4M  beim  Start  des  OS  einmal auf). Weiterhin
wurde die Adresse &4000 eines jeden  16  KB Blocks oberhalb des ersten
512 KB Blocks  manipuliert,  dies  entspricht  den RAM Konfigurationen
&7Exx, &7Dxx, &7Cxx, &7Bxx, &7Axx, &79xx und &78xx.

Bitte Beachten: Die  ersten  512  KB  Erweiterungs-RAM  (&7Fxx) werden
nicht beachtet und nicht verðndert.
Das Erweiterungs-RAM, das ab  Port  &7Exx  bis Port &78xx angesprochen
wird, wurde in jedem 16 KB Block an Adresse &4000 manipuliert.


















  PHYSIKALISCHE E-RAM AUSWAHL IN ZEIGER AUF XRAM-VARIABLE UMRECHNEN
  =================================================================

Kurzbeschreibung: Konvertiert physikalische E-RAM  Auswahl (der ersten
512 KB  Erweiterungs-RAM)  in  einen  Zeiger  auf  eine  der Variablen
XRAM_C4..._FF.

Label: E2XRAM

ROM-Nummer: C

Startadresse: &C9D4

Einsprungbedingungen: A = physikalische E-RAM Auswahl &C4...&FF

Aussprungbedingungen:  HL  =  Zeiger  auf  eine  der  System-Variablen
                              XRAM_C4 bis XRAM_FF

Manipuliert: AF und HL

Beschreibung: An den CPC kónnen bis  zum 4 MB Erweiterungs RAM (E-RAM)
angeschlossen werden. Dabei kommen  den  ersten  512 KB eine besondere
Rolle zu. Sie werden ôber  den  Port  &7Fxx angesprochen. Um ein E-RAM
zwischen &4000 und &7FFF einzublenden wird  einer aus 32 Werten an den
Port &7Fxx gesendet (&C4, &C5,  &C6,  &C7,  &CC, &CD, ... &FF). Dieser
Wert wird als physikalische E-RAM Auswahl bezeichnet. Fôr jeden dieser
32 E-RAM Blócke steht im  FutureOS  eine  XRAM Variable zur Verfôgung,
die Aufschluss ôber die Verwendung  dieses  16 KB Blocks gibt. Details
dazu sind im Handbuch und in Datei '#OS-VAR.DEU' zu finden.
Um nun den Wert einer  solchen  physikalischen  E-RAM Auswahl in einen
Zeiger auf die entsprechende  XRAM  Variable  umzurechnen  kann die OS
Funktion E2XRAM verwendet werden.
Dabei wird die physikalische E-RAM  Auswahl  in  A ôbergeben. Nach der
Rôckkehr der OS Funktion zeigt HL auf die zugehórige XRAM Variable.

Bitte Beachten: Diese OS Funktion bedient  nur die ersten 512 KB E-RAM
(&7Fxx), denn nur fôr diese 32 Blócke  von  je 16 KB E-RAM stehen XRAM
Variablen zur Verfôgung.


























        XRAM-VARIABLE IN PHYSIKALISCHE E-RAM AUSWAHL UMRECHNEN
        ======================================================

Kurzbeschreibung: Ein Zeiger auf  eine  der  32 XRAM-Variablen wird in
die zugehórige physikalische Erweiterungs-RAM Auswahl umgerechnet.

Label: BJKG

ROM-Nummer: C

Startadresse: &C9F9

Einsprungbedingungen: HL = Zeiger auf OS Variable XRAM_C4...FF

Aussprungbedingungen: Der Akku A enthðlt  die physikalische Nummer des
zugehórigen 16 KB E-RAM Blocks,  also  die  Hardware E-RAM Auswahl von
&C4 bis &FF.
Und Register B wurde mit dem Wert  &7F geladen um einen 'OUT (C),A' zu
ermóglichen.

Manipuliert: AF und B

Beschreibung: Fôr die Verwaltung  der  ersten  512 KB Erweiterungs-RAM
(E-RAM) stellt das  FutureOS  die  XRAM-Variablen  zur  Verfôgung. Sie
tragen die Bezeichnungen XRAM_C4,  XRAM_C5  ...  XRAM_FF.  Jede der 32
Variablen gibt Aufschluº ôber  die  Verwendung  des  zugehórigen 16 KB
groºen E-RAM Blocks. Diese Blócke  werden physikalisch ôber Port &7Fxx
mittels der Bytes &C4, &C5 ... &FF ausgewðhlt. Ein Beispiel:

 LD  BC,&7FC4 ;Auswahl des ersten E-RAMs (&C4) ôber den Port &7Fxx
 OUT (C),C    ;Das E-RAM im Bereich von &4000 bis &7FFF einblenden

Die OS Funktion BJKG dient  nun  dazu  eine  der XRAM-Variablen in die
entsprechende Hardware E-RAM Auswahl  umzurechnen.  Dabei muss HL beim
Einsprung auf eine  der  XRAM-Variablen  zeigen.  Nach  dem Rôcksprung
enthðlt der Akku den Wert &C4...&FF fôr die Hardware E-RAM Auswahl.
Und Register B enthðlt den Wert &7F. Mit dem Kommando 'OUT (C),A' kann
man den berechneten E-RAM Block direkt einblenden.

Bitte Beachten: Nach dem Rôcksprung dieser  OS Funktion ist es móglich
das berechnete E-RAM direkt einzublenden:

 OUT (C),A ;E-RAM einblenden (zwischen &4000 und &7FFF)





















      FREIGEBEN EINES 16 KB E-RAM BLOCKS DER ERSTEN 512 KB E-RAM
      ==========================================================

Kurzbeschreibung: 16 KB Block des E-RAMs (erste 512 KB) freigeben.

Label: FER7F

ROM-Nummer: C

Startadresse: &C9CB

Einsprungbedingungen: A = physikalische E-RAM Auswahl &C4...&FF

Aussprungbedingungen: HL = Zeiger zugehórige Sys.-Variable XRAM_C4-FF

Manipuliert: AF, HL und die entsprechende XRAM_?? Variable

Beschreibung: Die OS Funktion  FER7F  dient  zur  Freigabe eines zuvor
belegten Blocks des Erweiterunngs-RAMs. Jeder  dieser Blócke ist 16 KB
groº und jeweils  512  KB  (also  32  Blócke)  werden  ôber einen Port
angesprochen.
OS Funktion FER7F bezieht sich auf die  ersten 512 KB (Port &7Fxx) der
maximal móglichen 4 MB E-RAM des CPC.
Im FutureOS kommen den  ersten  512  KB  eine  besondere Rolle zu, fôr
jeden 16 KB Block  existiert  eine  eigene  8  Bit System-Variable. Es
handelt sich dabei um XRAM_C4,  _C5,  bis  _FF.  Es gibt 32 von ihnen.
Diese XRAM Variablen  geben  ôber  Vorhandensein  und  die Nutzung des
entsprechenden E-RAMs Aufschluº. Physikalisch werden diese 16 KB E-RAM
Blócke ôber den Port &7Fxx  angesprochen.  Um ein E-RAM zwischen &4000
und &7FFF einzublenden wird  einer  aus  32  Werten  an den Port &7Fxx
gesendet (&C4, &C5, &C6, &C7, &CC, &CD, ... &FF). Dieser Wert wird als
physikalische E-RAM Auswahl bezeichnet. Details  dazu sind im Handbuch
und in Datei #OS-VAR.DEU zu finden.
Um nun ein  zuvor  benutztes  E-RAM  wieder  freizugeben  lðd  man die
physikalische E-RAM Auswahl in Register A und ruft anschlieºend die OS
Funktion FER7F auf. Sie gibt  den  E-RAM  Block durch Anpassung seiner
XRAM Variable frei. Nach der Rôckkehr der OS Funktion zeigt HL auf die
zugehórige XRAM Variable.

Bitte Beachten: Diese OS Funktion bedient  nur die ersten 512 KB E-RAM
(&7Fxx), denn nur fôr diese 32 Blócke  von  je 16 KB E-RAM stehen XRAM
Variablen zur Verfôgung.






















  SUCHE FREIES E-RAM IN XRAM VARIABLEN -> KONVERTIERE IN PHYS. E-RAM
  ==================================================================

Kurzbeschreibung: In den  32  XRAM_C4..FF  Variablen  wird  ein freies
bzw. als Kurzzeitspeicher (KZS) markiertes E-RAM gesucht. Anschlieºend
wird daraus der physikalische E-RAM Wert ermittelt (nur erste 512 KB).

Label: KZS2E

ROM-Nummer: C

Startadresse: &C9EA

Einsprungbedingungen: Die Variablen XRAMC4-FF enthalten korrekte Werte
                        und es ist mindestens ein 16 KB Block frei/KZS.

Aussprungbedingungen: A  = Physikalische E-RAM Nummer &C4...&FF
                        B  = &7F (ermóglicht direkten OUT (C),A Befehl)
                        HL = Zeiger auf zugehórige XRAMC4..FF Variable

Manipuliert: AF, B und HL

Beschreibung: OS Funktion KZS2E bedient die ersten 512 KB (Port &7Fxx)
der móglichen 4 MB E-RAM des CPC. Fôr jeden 16 KB Block der ersten 512
KB E-RAM existiert eine eigene 8  Bit System-Variable. Es handelt sich
dabei um die 32 Variablen XRAM_C4, C5, C6, C7, CC, CD...FF. Diese XRAM
Variablen geben ôber Vorhandensein und  die Nutzung des entsprechenden
E-RAMs Aufschluº. Physikalisch werden  diese  16  KB E-RAM Blócke ôber
den Port &7Fxx angesprochen.  Um  ein  E-RAM  zwischen &4000 und &7FFF
einzublenden wird einer aus 32 Werten an den Port &7Fxx gesendet (&C4,
&C5, &C6, &C7, &CC, &CD, ...  &FF). Dieser Wert wird als physikalische
E-RAM Auswahl bezeichnet. Details dazu  sind  im Handbuch und in Datei
#OS-VAR.DEU zu finden.
Diese OS  Funktion  sucht  einen  freien  bzw.  als  Kurzzeit-Speicher
markierten 16 KB E-RAM Block in  den XRAM Variablen. Nach der Rôckkehr
der OS Funktion zeigt HL  auf  die zugehórige XRAM Variable. Ausserdem
wird daraus die physikalische E-RAM Auswahl berechnet (Register A). Um
den Befehl 'OUT (C),A' zu ermólgichen wird Register B mit dem Wert &7F
geladen. Beispiel:

 CALL KZS2E ;E-RAM ermitteln
 OUT  (C),A ;und zwischen &4000 und &7FFF einblenden

Da diese OS Funktion  nicht  gesondert  prôft,  ob ôberhaupt ein E-RAM
frei ist sollte  sich  die  Applikation  zuvor  davon  ôberzeugt haben
(siehe OS Funktionsn zur E-RAM Verwaltung  im Handbuch). Denn ist kein
E-RAM frei / KZS so wird ein inkorrekter Wert ôbergeben.

Bitte Beachten: Es MUSS  zumindest  ein  freier  E-RAM Block vorhanden
sein, bzw. mindestens ein Block als KZS markiert sein.
Diese OS Funktion arbeitet mit den  ersten  512 KB E-RAM (&7Fxx), denn
nur fôr diese 32 Blócke von je  16  KB E-RAM stehen XRAM Variablen zur
Verfôgung.











Suche, Reserviere untersten freien 16 KB Extension-RAM Block ab &7EC4
=====================================================================

Kurzbeschreibung: In den bis zu  3,5 MB Extension-RAM / Vergróºerungs-
RAM wird der erste  /  unterste  freie  16  KB  Block  gesucht und bei
Vorhandensein als "Belegt" markiert.

Label: R_16U

ROM-Nummer: C

Startadresse: &FC0D

Einsprungbedingungen: -

Aussprungbedingungen:
Zero Flag gesetzt: Extension-RAM  NICHT  vorhanden  oder bereits ALLES
                 belegt!
Zero Flag gelóscht: Extension-RAM  existiert,  ist  frei und wurde nun
                  reserviert!
                  BC = Physikalische RAM Auswahl von &7EC4 bis &78FF

Manipuliert: AF, BC, DE, HL und ein Bit innerhalb der 28 X4RAM Bytes

Beschreibung: Die OS Funktion R_16U  reserviert den ersten (untersten)
freien 16 KB Block innerhalb des Extension-RAMs.
Das Extension-RAM wird auch als  Vergróºerungs-RAM bezeichnet. Es kann
bis zu 3,5  MB  groº  sein,  dabei  werden  jeweils  512  KB  ôber die
Portadressen &7Exx,  &7Dxx,  &7Cxx,  &7Bxx,  &7Axx,  &79xx  oder &78xx
adressiert. Die  Verwaltung  erfolgt  analog  zu  den  ersten  512  KB
Expansion RAM,  das  via  Portadresse  &7Fxx  angesprochen  wird.  Das
Expansion RAM wird auch als Ausbau-RAM bezeichnet.
Das Erweiterungs-RAM wird  unter  FutureOS  zwischen  &4000  und &7FFF
eingeblendet und deshalb in Blócken von 16 KB genutzt.

Nach der Rôckkehr von  R_16U  zeigt  das  Zero-Flag  an,  ob ein Block
gefunden wurde:
- Ist das Zero-Flag gesetzt (Z), dann wurde entweder kein freier E-RAM
  Block gefunden, oder es ist gar kein Extension-RAM angeschlossen.
- Ist das  Zero-Flag  auf  Null  gesetzt  (NZ),  so  wurde  ein  16 KB
  Extension-RAM  Block  gefunden  und   als   "Belegt"  markiert.  Die
  Portadresse des Blocks befindet sich in Register BC. Durch einen OUT
  (C),C kann dieser 16 KB E-RAM Block sofort eingeblendet werden.

Bitte Beachten: Kehrt diese OS  Funktion  mit  gesetztem Zero Flag (Z)
zurôck, so ist nicht klar ob  bereits das gesamte Ext.-RAM belegt ist,
oder ob kein Ext.-RAM (mehr) vorhanden ist.

















 Suche, Reserviere obersten freien 16 KB Extension-RAM Block ab &78FF
 ====================================================================

Kurzbeschreibung: In den bis zu  3,5 MB Extension-RAM / Vergróºerungs-
RAM wird der letzte  /  oberste  freie  16  KB  Block  gesucht und bei
Vorhandensein als "Belegt" markiert.

Label: R_16D

ROM-Nummer: C

Startadresse: &FC28

Einsprungbedingungen: -

Aussprungbedingungen:
Zero Flag gesetzt: Extension-RAM  NICHT  vorhanden  oder bereits ALLES
                 belegt!
Zero Flag gelóscht: Extension-RAM  existiert,  ist  frei und wurde nun
                  reserviert!
                  BC = Physikalische RAM Auswahl von &7EC4 bis &78FF

Manipuliert: AF, BC, DE, HL und ein Bit innerhalb der 28 X4RAM Bytes

Beschreibung: Die OS Funktion R_16D  reserviert den letzten (obersten)
freien 16 KB Block innerhalb des Extension-RAMs.
Das Extension-RAM wird auch als  Vergróºerungs-RAM bezeichnet. Es kann
bis zu 3,5  MB  groº  sein,  dabei  werden  jeweils  512  KB  ôber die
Portadressen &7Exx,  &7Dxx,  &7Cxx,  &7Bxx,  &7Axx,  &79xx  oder &78xx
adressiert. Die  Verwaltung  erfolgt  analog  zu  den  ersten  512  KB
Expansion RAM,  das  via  Portadresse  &7Fxx  angesprochen  wird.  Das
Expansion RAM wird auch als Ausbau-RAM bezeichnet.
Das Erweiterungs-RAM wird  unter  FutureOS  zwischen  &4000  und &7FFF
eingeblendet und deshalb in Blócken von 16 KB genutzt.

Nach der Rôckkehr von  R_16D  zeigt  das  Zero-Flag  an,  ob ein Block
gefunden wurde:
- Ist das Zero-Flag gesetzt (Z), dann wurde entweder kein freier E-RAM
  Block gefunden, oder es ist gar kein Extension-RAM angeschlossen.
- Ist das  Zero-Flag  auf  Null  gesetzt  (NZ),  so  wurde  ein  16 KB
  Extension-RAM  Block  gefunden  und   als   "Belegt"  markiert.  Die
  Portadresse des Blocks befindet sich in Register BC. Durch einen OUT
  (C),C kann dieser 16 KB E-RAM Block sofort eingeblendet werden.

Bitte Beachten: Kehrt diese OS  Funktion  mit  gesetztem Zero Flag (Z)
zurôck, so ist nicht klar ob  bereits das gesamte Ext.-RAM belegt ist,
oder ob kein Ext.-RAM (mehr) vorhanden ist.

















Belege / Reserviere definierten 16 KB Block des 3,5 MB Extension-RAMs
=====================================================================

Kurzbeschreibung: In den bis zu  3,5 MB Extension-RAM / Vergróºerungs-
RAM wird ein definierter 16 KB Block als "Belegt" markiert.

Label: R_EXT

ROM-Nummer: C

Startadresse: &FC71

Einsprungbedingungen: BC = 16 KB Extension-RAM Block &7EC4-&78FF

Aussprungbedingungen:
Zero Flag gesetzt: Extension-RAM  Block  NICHT  vorhanden oder bereits
                 belegt!
Zero Flag gelóscht: Extension-RAM Block  existiert, ist frei und wurde
                  nun reserviert!

Manipuliert: AF, DE, HL und ein Bit innerhalb der 28 X4RAM Bytes

Beschreibung: Die OS Funktion R_EXT reserviert einen durch Register BC
definieten 16 KB Block innerhalb des Extension-RAMs.
Das Extension-RAM wird auch als  Vergróºerungs-RAM bezeichnet. Es kann
bis zu 3,5  MB  groº  sein,  dabei  werden  jeweils  512  KB  ber die
Portadressen &7Exx,  &7Dxx,  &7Cxx,  &7Bxx,  &7Axx,  &79xx  oder &78xx
adressiert. Die  Verwaltung  erfolgt  analog  zu  den  ersten  512  KB
Expansion RAM,  das  via  Portadresse  &7Fxx  angesprochen  wird.  Das
Expansion RAM wird auch als Ausbau-RAM bezeichnet.
Das Erweiterungs-RAM wird  unter  FutureOS  zwischen  &4000  und &7FFF
eingeblendet und deshalb in Blócken von 16 KB genutzt.

Beim Aufruf dieser Funktion muss  Register  BC die physikalische E-RAM
I/O-Adresse, also die  E-RAM-Auswahl  (&7EC4...&78FF)  enthalten. Nach
der Rôckkehr von R_EXT zeigt das Zero-Flag an, ob der gewônschte E-RAM
Block reserviert werden konnte:
- Ist das Zero-Flag gesetzt  (Z),  dann  ist  der E-RAM Block entweder
  bereits als "Belegt" markiert,  oder  es  ist gar kein Extension-RAM
  angeschlossen.
- Ist das Zero-Flag auf Null gesetzt (NZ), so war der gewônschte 16 KB
  Extension-RAM Block frei. Nun ist er  als "Belegt" markiert und kann
  genutzt werden. Die Portadresse  des  Blocks befindet sich weiterhin
  in Register BC. Durch einen OUT (C),C  kann dieser 16 KB E-RAM Block
  sofort eingeblendet werden.

Bitte Beachten: Kehrt diese OS  Funktion  mit  gesetztem Zero Flag (Z)
zurôck, so ist nicht klar  ob  der  Ext.-RAM Block bereits belegt ist,
oder ob er gar nicht vorhanden ist.















        16 KB Block des 3,5 MB Extension-RAM freigeben
        ==============================================

Kurzbeschreibung: Ein definierter 16 KB E-RAM Block wird in den bis zu
3,5 MB Extension-RAM / Vergróºerungs-RAM freigegeben.

Label: F_EXT

ROM-Nummer: C

Startadresse: &FC5F

Einsprungbedingungen: BC = 16 KB Extension RAM Block &7EC4-&78FF

Aussprungbedingungen: Ext-RAM in X4RAM Byte 0...27 als 'frei' markiert
(? Bit geleert)

Manipuliert: AF, DE, HL und ein Bit innerhalb der 28 X4RAM Bytes

Beschreibung: Die OS Funktion F_EXT gibt  einen durch BC definieten 16
KB Block innerhalb des Extension-RAMs frei.
Das Extension-RAM wird auch als  Vergróºerungs-RAM bezeichnet. Es kann
bis zu 3,5  MB  groº  sein,  dabei  werden  jeweils  512  KB  ber die
Portadressen &7Exx,  &7Dxx,  &7Cxx,  &7Bxx,  &7Axx,  &79xx  oder &78xx
adressiert. Die  Verwaltung  erfolgt  analog  zu  den  ersten  512  KB
Expansion RAM,  das  via  Portadresse  &7Fxx  angesprochen  wird.  Das
Expansion RAM wird auch als Ausbau-RAM bezeichnet.
Das Erweiterungs-RAM wird  unter  FutureOS  zwischen  &4000  und &7FFF
eingeblendet und deshalb in Blócken von 16 KB genutzt.

Beim Aufruf dieser Funktion muss  Register  BC die physikalische E-RAM
I/O-Adresse, also die  E-RAM-Auswahl  (&7EC4...&78FF)  enthalten. Nach
der Rôckkehr von F_EXT wurde  der  gewnschte E-RAM Block freigegeben,
also in den X4RAM  Bits  als  "Frei"  markiert.  Dabei spielt es keine
Rolle ob der Block existiert  oder  nicht.  Dabei  wird der Inhalt des
Registers BC (= Portadresse des Blocks) erhalten.

Bitte Beachten: Es spielt keine Rolle  ob  der selektierte 16 KB E-RAM
Block existiert.

























Testen ob 16 KB Block des 3,5 MB Extension-RAM vorhanden und frei ist
=====================================================================

Kurzbeschreibung: Ein definierter 16 KB E-RAM Block wird in den bis zu
3,5 MB  Extension-RAM  /  Vergróºerungs-RAM  darauf  getestet,  ob  er
existiert und frei ist.

Label: G_EXT

ROM-Nummer: C

Startadresse: &FC66

Einsprungbedingungen: BC = 16 KB Extension RAM Block &7EC4-&78FF

Aussprungbedingungen:
Zero Flag gesetzt: Extension-RAM nicht vorhanden oder belegt!
Zero Flag gelóscht: Extension-RAM existiert und ist frei!

Manipuliert: AF, DE und HL

Beschreibung: Die OS Funktion G_EXT prft,  ob ein durch BC definieter
16 KB Block innerhalb des Extension-RAMs vorhanden und frei ist.
Das Extension-RAM wird auch als  Vergróºerungs-RAM bezeichnet. Es kann
bis zu 3,5  MB  groº  sein,  dabei  werden  jeweils  512  KB  ber die
Portadressen &7Exx,  &7Dxx,  &7Cxx,  &7Bxx,  &7Axx,  &79xx  oder &78xx
adressiert. Die  Verwaltung  erfolgt  analog  zu  den  ersten  512  KB
Expansion RAM,  das  via  Portadresse  &7Fxx  angesprochen  wird.  Das
Expansion RAM wird auch als Ausbau-RAM bezeichnet.
Das Erweiterungs-RAM wird  unter  FutureOS  zwischen  &4000  und &7FFF
eingeblendet und deshalb in Blócken von 16 KB genutzt.

Beim Aufruf dieser Funktion muss  Register  BC die physikalische E-RAM
I/O-Adresse, also die  E-RAM-Auswahl  (&7EC4...&78FF)  enthalten. Nach
der Rôckkehr von G_EXT wurde  der  Status  des gewônschten E-RAM Block
ermittelt. Dabei wird der Inhalt  des  Registers BC (= Portadresse des
Blocks) erhalten.
- Bei gesetztem  Zero-Flag  (Z)  ist  der  E-RAM  Block entweder nicht
  vorhanden, oder bereits als belegt.
- Ist das Zero-Flag auf  Null  gesetzt  (NZ),  so existiert der selek-
  tierte E-RAM Block und ist aktuell als "Frei" markiert. Er kann also
  von einer Applikation reserviert und benutzt werden.

Bitte Beachten: Kehrt diese OS  Funktion  mit  gesetztem Zero Flag (Z)
zurôck, so ist nicht klar  ob  der  Ext.-RAM Block ôberhaupt vorhanden
ist, oder ob er bereits belegt ist.


















 Teste ob definierter Extension-RAM Block (&7EC4-&78FF) vorhanden ist
 ====================================================================

Kurzbeschreibung: In den bis zu  3,5 MB Extension-RAM / Vergróºerungs-
RAM wird ein definierter 16 KB Block auf "Vorhandensein" getestet.

Label: T_EXT

ROM-Nummer: C

Startadresse: &FC80

Einsprungbedingungen: BC = 16 KB Extension RAM Block &7EC4-&78FF
OS Variablen X4RXE, X4RDC, X4RBA, X4R98 sind korrekt gesetzt

Aussprungbedingungen:
Zero Flag gesetzt: Extension-RAM NICHT vorhanden!
Zero Flag gelóscht: Extension-RAM existiert!

Manipuliert: AF, DE und HL

Beschreibung: OS Funktion T_EXT prôft,  ob  ein durch BC definieter 16
KB Block innerhalb des Extension-RAMs  vorhanden  ist. Dabei spielt es
keine Rolle, ober der Block frei oder belegt ist.
Das Extension-RAM wird auch als  Vergróºerungs-RAM bezeichnet. Es kann
bis zu 3,5  MB  groº  sein,  dabei  werden  jeweils  512  KB  ôber die
Portadressen &7Exx,  &7Dxx,  &7Cxx,  &7Bxx,  &7Axx,  &79xx  oder &78xx
adressiert. Die  Verwaltung  erfolgt  analog  zu  den  ersten  512  KB
Expansion RAM,  das  via  Portadresse  &7Fxx  angesprochen  wird.  Das
Expansion RAM wird auch als Ausbau-RAM bezeichnet.
Das Erweiterungs-RAM wird  unter  FutureOS  zwischen  &4000  und &7FFF
eingeblendet und deshalb in Blócken von 16 KB genutzt.

Beim Aufruf dieser Funktion muss  Register  BC die physikalische E-RAM
I/O-Adresse, also die  E-RAM-Auswahl  (&7EC4...&78FF)  enthalten. Nach
der Rôckkehr von T_EXT wurde ermittelt,  ob der gewônschte E-RAM Block
ôberhaupt  existiert.  Also  ob   er   physikalisch  an  den  Computer
angeschlossen ist. Dabei wird  der  Inhalt  des  Registers BC (= Port-
adresse des Blocks) erhalten.
- Bei gesetztem Zero-Flag (Z) ist  der E-RAM Block nicht vorhanden, da
  am Computer keine entsprechende RAM-Erweiterung angeschlossen wurde.
- Ist das Zero-Flag auf  Null  gesetzt  (NZ),  so existiert der selek-
  tierte  E-RAM   Block.   Eine   entsprechende   RAM-Erweiterung  ist
  vorhanden. Der E-RAM Block kann also benutzt werden.

Bitte Beachten: Diese OS  Funktion  gibt  keine Auskunft darôber, ober
der Block gegenwðrtig als "Frei" oder "Benutzt" markiert ist.

















         Berechne Zeiger auf X4RAM Byte (0-27) und Bit-Maske
         ===================================================

Kurzbeschreibung: Eine physikalische E-RAM  I/O  Auswahl wird in einen
Zeiger auf das zugehóriges Byte  (der  X4RAM  Bytes) und eine passende
Bit-Maske fôr das zugehórige Bit umgerechnet.

Label: C_EXT

ROM-Nummer: C

Startadresse: &FCB1

Einsprungbedingungen: BC = 16 KB Extension RAM Block &7EC4-&78FF

Aussprungbedingungen:
 A = Bit Maske = Zeiger auf 16 KB Block-Bit = &01, &02, &04, &08, &10,
     &20, &40 oder &80
HL = Zeiger auf Belegungsbyte = X4RAM + 0...27

Manipuliert: AF, DE und HL

Beschreibung:  Beim  Aufruf  dieser  Funktion  muss  Register  BC  die
physikalische E-RAM I/O-Adresse,  also  die  E-RAM-Auswahl  (&7EC4 bis
&78FF) enthalten. Die OS  Funktion  C_EXT  berechnet  einen Zeiger auf
eines der 28 X4RAM-Bytes (in Register  HL) und ôbergibt eine Bit-Maske
(in Register A) um ein  Bit  in  diesem Byte zu adressieren. Innerhalb
der Verwaltung des 3,5  MB  groºen  Extension-RAMs  ist  dieses Bit in
diesem Byte der  in  BC  ôbergebenen Extension-RAM-Auswahl zugeordnet.
Das Register BC bleibt dabei erhalten.
Das gesetzte Bit  der  Bit-Maske  kann  nun  verwendet  werden, um das
entsprechende Bit des durch HL  adressierten X4RAM-Bytes zu prôfen, zu
setzen oder zu lóschen. Man kann  also  den  Status dieses 16 KB E-RAM
Blocks ermitteln oder verðndern.  Dabei  enthðlt die Bit-Maske jeweils
nur ein gesetztes Bit: A = &01, &02, &04, &08, &10, &20, &40 oder &80.

Bitte Beachten: -



























    LADEN UND DARSTELLEN EINES BILDES (CPC 17 KB, OCP KOMPRIMIERT)
    ==============================================================

Kurzbeschreibung: Ein normales CPC  Bild  (17  KB)  oder  ein OCP Bild
werden geladen und dargestellt. Bildschirm-Format und MODE lassen sich
dynamisch einstellen (Joystick bzw. Cursor-Tasten).

Label: ZEIBI bzw. ZEIBJ

ROM-Nummer: C

Startadresse: &FD2F (ZEIBI) bzw. &FD2C (ZEIBJ)

Einsprungbedingungen: Fôr beide Einsprônge  gilt, dass eine Bild-Datei
in the File-Tagging-Bytes(FTB) markiert sein muss. Die erste markierte
Datei wird benutzt.
Bei ZEIBI muss der Datei-Header dieser Datei an &B400 geladen sein
Bei ZEIBJ enthðlt H das  High-Byte  (HH)  eines Zeigers auf den Header
einer Datei. Das low-Byte dieser Adresse ist immer &00: Adr. = &HH00

Aussprungbedingungen: Das Zero Flag  gibt  Aufschluss  ôber den Erfolg
der Aktion. Wenn  das  Zero-Flag  gesetzt  ist  (Z=1)  wurde  das Bild
erfolgreich dargestellt.
Sollte das Zero-Flag jedoch gelóscht sein  (Z  =  0), dann hat es sich
bei der Datei entweder nicht um  ein  Bild gehandelt, oder es trat ein
anderer Fehler auf.

Manipuliert: AF, BC, DE, HL, AF', BC',  DE',  HL', IX, IY und die RAM-
Variablen REG08_0,1,5, REG16_0,  REG_PC,  L_RAM  und XRAM_??. Auºerdem
die RAM Bereiche von &B000 bis &B7FF und von &BC00 bis &BC7F, der FDC,
die PIO, der PSG, die Datei-Tagging Bytes, das Video-RAM (&C000-&FFFF)
und der Motor Status.

Beschreibung: Die OS Funktion ZEIBI bzw. ZEIBJ dienen dazu ein Bild zu
landen und darzustellen. Dabei kann  man mittels Joystick bzw. Cursor-
Tasten den Bildschirm-Modus  (rechts  -  links)  bzw.  das Bildschirm-
Format (auf - ab) verðndern.
Vor dem Aufruf dieser OS Funktionen  muss entweder ein Datei-Header an
&B400 geladen werden (ZEIBI) oder das High-Byte eines Datei-Headers in
Register H geladen werden (ZEIBJ). Beim Laden des Datei-Headers sollte
A mit &FF geladen sein,  um  die  FTBs  zu erhalten (siehe OS Funktion
LADEN). Der Datei-Header muss dabei  an  den Anfang einer Page (&XX00)
geladen werden.  Die  vermutliche  Bild-Datei  muss  weiterhin  in den
File-Tagging-Bytes (FTB, siehe Handbuch) als erste markiert sein.
Beim Aufruf einer der beiden  OS  Funktionen wird zuerst ermittelt, ob
es sich tatsðchlich um ein Bild  handelt.  Wenn ja, dann wird das Bild
geladen, nótigenfalls dekomprimiert (OCP Advanced Art Studio Bild) und
anschlieºend dargestellt. Wðhrend er  Darstellung kann der Bildschirm-
MODE geðndert werden (rechts, links).  Und  es  kann  zwischen 80 x 25
bzw. 64 x 32 Zeichen  (MODE  2  Referenz) gewechselt werden (auf, ab).
Dabei kónnen sowohl Joystick  als  auch Curstor-Tasten benutzt werden.
der Druck auf Feuer 1 bzw. Copy beendet die Darstellung des Bildes.
Beide OS Funktionen setzen das Zero-Flag, wenn alles funktioniert hat.
Ist das Zero-Flag jedoch gelóscht  so  trat  ein  Fehler auf (z.B. die
Datei ist gar kein Bild).

Bitte Beachten: Es muss  sich  ein  Header  ab  &B400 befinden und die
zugehórige Datei muss markiert (getagged)  sein. Ansonsten kommt es zu
einer Fehlermeldung (Zero Flag gelóscht).





          GENERIERE TDxxx VARIABLEN FÔR SCRI etc.
          =======================================

Kurzbeschreibung: RAM-Variablen DIRIN, TDRAM,  TDHST, TDANZ, TDAKT und
TDLWK werden fôr OS Funktionen wie z.B. SCRI neu gesetzt.

Label: GEN_TDV

ROM-Nummer: C

Startadresse: &FD29

Einsprungbedingungen: RAM-Variablen TURBO_A...M korrekt gesetzt

Aussprungbedingungen: RAM-Variablen DIRIN, TDRAM,  TDHST, TDANZ, TDAKT
und TDLWK neu gesetzt

Manipuliert: AF, BC, DE, HL und die RAM-Variablen DIRIN, TDRAM, TDHST,
TDANZ, TDAKT und TDLWK

Beschreibung: OS Funktionen wie SCRI,  SC_AU  oder SC_AB benótigen die
aktuellen Werte in den  System-Variablen  DIRIN,  TDRAM, TDHST, TDANZ,
TDAKT und TDLWK.
Diese OS Funktion GEN_TDV setzt diese Variablen neu.
Dazu werden die Variablen TURBO_A, _B,  _C, _D bis TURBO_M ausgelesen,
diese môssen dementsprechend korrekte Werte enthalten.
Nach dem Lóschen mehrerer Dateien  bzw. dem Formatieren einer Diskette
sollte diese OS Funktion (GEN_TDV)  aufgerufen  werden. Das wird durch
das Desktop erledigt.
Fôr den Anwender bzw. eine  Applikation  ist  GEN_TDV nur zu benutzen,
wenn man direkt mit Inhaltsverzeichnissen  arbeitet. In solchen Fðllen
wird GEN_TDV nach dem Schreiben von Inhaltsverzeichnissen aufgerufen.

Bitte Beachten: Beim Einsprung  môssen  die  RAM-Variablen TURBO_A bis
TURBO_M korrekt gesetzt sein.
























Die jeweils aktuelle Version dieser  Datei  (API-C-DE.DOK) ist auch im
Internet erhðltlich:

http://www.FutureOS.de (siehe Downloads)
