Inhaltsverzeichnis
ABSCHNITT 3: Software
3.1 ALLGEMEINE BESCHREIBUNG
3.1.1 Übersicht
Die Software des Atari Portfolio ist in einem ROM enthalten und wird vorwiegend vom ROM aus ausgeführt, wodurch der RAM-Bedarf minimiert wird. Diese Software bietet so viel PC-Kompatibilität wie möglich, innerhalb der Hardware-Möglichkeiten. (siehe Abschnitt 3.2 und 3.4 für den Vergleich von BIOS und DOS).
Diese Software enthält auch einige erweiterte Funktionen die es dem Portfio ermöglichen effizienter im mobilen Bereich benutzt zu werden als ein standard-PC. Die meisten dieser Software-Funktionen werden durch den Aufruf des Int 61H, die Atari Portfolio-spezifischen Funktionen, zur Verfügung gestellt (siehe Abschnitt 3.10.1).
Als Hilfe zur Entwicklung von Anwender-Software für den Atari Portfolio, die diese spezifischen Funktionen verwendet, gibt es ein TSR (terminate and stay resident) Emulationsprogramm für den IBM PC. Diese Programm emuliert die meisten dieser Funktionen (siehe Abschnitt 3.11).
3.1.2 Portfolio Programmierung
Der Portfolio entspricht IBM´s eigenen Programmierrichtlinien für PC-Kompatibilität; dennoch, diese sind weit aus flexibler als die Definition des Industrie-standards für „Clone“-PCs.
Die meisten „wohlverhaltenden“ PC-Programme laufen problemlos auf dem Portfolio, vorausgesetzt diese gehen nicht unterhalb des BIOS-Bereichs um direkt auf die Hardware zuzugreifen. Für die Entwicklung sind die Bildschirm- und Speichergröße von größtem Belang. Die verschiedenen Punkte die bei der Entwicklung von Programmen für den Portfolio zu berücksichtigen sind, sind folgende:
BILDSCHIRM
(siehe Abschnitt 3.7)
Der Portfolio hat einen Text-Bildschirm mit 40 Spalten und 8 Zeilen, der den Videospeicher an der selben Adresse, und den gleichen Zeichensatz verwendet wie der Monochrome Bildschirmadapter (MDA) des PC. Allerdings unterstützt der LCD-Controller keine Text-Attribute wie fett, unterstrichen oder invertiert, oder unterschiedliche Zeichengrößen. Wenn sie Portfolios Grafik-Fähigkeiten nutzen wollen, so verwenden sie den standard BIOS-Interrupt für Pixel setzen/löschen.
Der Portfolio bietet auch begrenzte Fähigkeiten auf der Ebene des BIOS-Interrupts für Bildpunkt (DOT) setzten/löschen. Es werden im Grafik-Modus weder ein großer virtueller Bildschirm (PC-Größe), noch das Ausgeben von Text-Zeichen unterstützt.
SPEICHER
(siehe Abschnitt 2.2 und Anhang D)
Der Portfolio hat ein internes Speicherlaufwerk C dessen Größe in 8KB-Schritten konfiguriert werden kann -mindestens 8KB. Bei einem Portfolio mit 128 KB bleiben höchstens 116 Kilobytes Arbeitsspeicher von denen 10 Kilobytes für das Betriebssystem und das BIOS benötigt werden. Deshalb wird empfohlen, dass Programme nicht mehr als 100 Kilobytes Arbeitsspeicher beanspruchen. Wenn sie die eingebauten „pop-up“-Anwendungen in dem externen Programm verwenden wollen, dann ermöglichen sie etwas freien Arbeitsspeicher (mindestetns 17 Kilobytes).
SPEICHERKARTEN
(siehe Abschnitt 3.6)
Diese Speicherkarten (CCMs) erscheinen einem DOS Programm wie standard Floppy-Disketten. Der Portfolio hält DOS ständig resident und muss deshalb nicht von einer Diskette gebootet werden. Wenn sie automatisch in ein Programm hineinbooten wollen so erzeugen sie eine AUTOEXEC.BAT auf der Speicherkarte um C:\AUTOEXEC.BAT zu umgehen.
SERIELL/RS232
(siehe Abschnitt 4.1)
Die einzige kompatible Möglichkeit auf den seriellen Port zuzugreifen ist über das BIOS. Die meisten handelsüblichen seriellen IBM PC Programme greifen allerdings direkt auf die Hardware zu. Diese Programme werden auf dem Portfolio nicht laufen.
TASTATUR
(siehe Abschnitt 3.2.1)
Der ATARI® Portfolio™ gewährleistet volle IBM PC Scancode-Kompatibilität, solange über das BIOS zugegriffen wird. Mit anderen Worten, es ist möglich jeden Tastendruck oder Tastenkombination zu generieren, die der IBM PC generieren kann (SHIFT, STRG, ALT, NUM PAD). Es ist auch möglich andere nicht-PC Kombinationen zu generieren die für Funktionen wie Kontrasteinstellung und Ausschalten nötig sind.
STROMVERBRAUCH
(siehe Abschnitt 3.8)
Für eine optimale Stromersparnis sollten Programme so konzipiert sein, dass sie die Tastatur nicht ständig pollen. An dessen Stelle sollten die „Warte auf Tastendruck“ Systemaufrufe verwendet werden.
ERWEITERT
Es gibt außerdem erweiterte Funktionen die es Anwenderprogrammen ermöglichen den Portfolio weit aus anspruchsvollere Aufgaben erfüllen zu lassen; das Starten von Programmen direkt von Speicherkarten, Erweiterungen mit eingebauter Software auf ROM, Sprache, Information und Zugang zum eingebauten Wählton.
3.1.3 Fehlerhandhabung
Starten von wohlverhaltenden, handelsüblichen standard PC-Programmen:
- Stellen sie sicher, dass die Bildschirm-Einstellungen (siehe Benutzer Handbuch) für externe Programme auf PC statisch gestellt sind.
- Wenn das Programm direkt in den Videospeicher schreibt, stellen sie sicher, dass der Bildaufbau (Auffrischen) auf Tastatur oder reguliert (schnell) eingestellt ist, je nachdem was besser ist.
- Bestreben sie genügend Speicher zuzuordnen.
Obwohl viele beliebte Programme „wohlverhaltend“ sind, so gibt es andererseits viele Programme die direkt auf die Hardware zugreifen. Dies kann auf dem Portfolio zu Problemen führen, da die I/O Adressen und Interrupt-Strukturen anders sind. Die häufigsten dieser Inkompatibilitäten geschehen bei der Tastatur und Hardware Interrupts. Der Portfolio besitzt keinen Programmierbaren Interrupt Controller (PIC) oder speziellen Tastatur-Controller. Daher werden Programme die derartige Zugriffe machen, wie Basic oder XTALK, nicht richtig funktionieren. Der Portfolio verwendet auch einen anderen Timer-Tick als ein PC, was „unsaubere“ Programme wie SIDEKICK beinflusst. Ein weiterer Hardwarebereich der auf dem Portfolio anders ist, ist der Lautsprecher, welcher über das BIOS angesprochen werden sollte.
3.2 UNTERSCHIEDE ZWISCHEN PORTFOLIO BIOS UND IBM PC BIOS
Für den Zweck dieses Dokuments wird Portfolio BIOS als das Programm definiert, das zwischen DOS und der Hardware kommuniziert. (Siehe die in Abschnitt 1 empfohlenen Bücher für weitere Information über das standard PC BIOS.)
Es gibt einige wenige Unterschiede zwischen dem Portfolio BIOS und dem IBM PC BIOS. Diese sind hauptsächlich in Bereichen in denen die Hardwareunterschiede so groß sind, dass eine vollständige Kompatibilität nicht erreichbar ist. Zum Beispiel, bei den Videofunktionen (Int 10H) hat der Portfolio nur zwei Bildschirm-Modi: 80×25 Text und 240×64 Grafik.
3.2.1 Interrupt Unterschiede
Folgende Liste hebt die Hauptunterschiede zwischen dem Portfolio BIOS und dem IBM PC BIOS hervor:
Int 09H Tastatur: Die Portfolio-Tastatur liegt nicht an der selben I/O Adresse wie die des IBM PCs. Deshalb wird jedes Programm, das die Tastatur am I/O Port 60H braucht nicht richtig funktionieren. Int 9 wird ständig auf den ROM BIOS Int Handler umgeleitet weil jedes Programm, dass nicht speziell für den Portfolio geschrieben wurde und den Int 9 umleitet, fehlschlagen wird. Falls Int 9 umgeleitet werden muss, so sollte Int 61H Fn 20H aufgerufen werden (siehe Abschnitt 3.2).
Int 10H Videofunktionen: Funktion 00H, Modus 07 bis 0AH wird unterstützt, allerdings nur im Text oder Grafik-Modus. Funktion 01H; Cursor-Größe wird auf Block oder Unterstrich gesetzt (siehe Abschnitt 3.7)
Folgende Funktionen werden nicht unterstützt:
- Funktion 04H, Lightpen-Position lesen
- Funktion 0BH, Farb-Palette setzen
- Funktion 10H, Palettenregister setzen
- Funktion 11H, Zeichen generieren
- Funktion 12H, Alternate auswählen
Int 13H Diskette: Der Portfolio hat modifizierte CCM/Disketten Funktionen von 0 bis 05H und 83H (siehe Abschnitt 3.3.2).
Int 15H Erweitert: keine erweiterten Funktionen vorhanden.
Int 16H Tastatur: Nur Funktionen 0,1,2 und 4 werden unterstützt.
Int 18H BASIC: nicht unterstützt.
Int 1AH Uhr: Nur Funktionen 0 bis 07H vorhanden.
Int 1CH Zähler: Wird in größeren Zeitabständen aufgerufen als beim IBM PC.
3.2.2 Portfolios BOOT Prozedur
Bei einem Kaltstart (Batterien entfernt, Kaltstart-Knopf gedrückt und Batterien wieder eingesetzt) führt das BIOS einen eingeschränkten Einschalt-Selbsttest (POST) durch um die Systemintegrität zu prüfen. Dies zerstört die Daten im Systemspeicher (sowohl den flüchtigen Programmspeicher als auch das interne Laufwerk C). Das Portfolio System fürt dann die BIOS und DOS Initialisierung durch bevor zum Kommando-Prozessor gesprungen wird. Dies wird das Gerät immer zurücksetzen, es sei denn es liegt ein Hardware-Fehler vor.
Bei einem Hardware-Warmstart (Warmstartknopf gedrückt oder Batteriewechsel ohne die Kaltstarttaste zu drücken) führt der Portfolio die BIOS und DOS Initialisierung durch bevor zum Kommando-Prozessor gesprungen wird.
Bei einem Software-Warmstart (gleichzeitiges Drücken von Strg_Alt_Entf auf der Tastatur) ist die Reihenfolge des Ablaufs ähnlich wie bei einem Hardware-Warmstart. Der Unterschied zwischen den beiden ist, dass ein Hardware-Warmstart auch den ASIC und den Prozessor zurücksetzt. Dies kann erforderlich sein, wenn die Interrupts unterbunden wurden und der Prozessor daran gehindert wird Tastatureingaben des Benutzers zu erkennen.
3.3 SYSTEMSPEZIFISCHES BIOS
3.3.1 Int 61H - Erweiterte BIOS Funktionen
Funktion | Beschreibung | Funktion | Beschreibung |
---|---|---|---|
0H | Initialisierung | 1AH | Schnittstellen-ID lesen |
7H | Speicherkarte (CCM) formatieren | 1BH | Schnittstellen-ID setzen |
8H | Größe des internen Laufwerks ermitteln | 1CH | E/A Tabellen für Schnittsellen definieren |
9H | internes Laufwerk formatieren | 1EH | Taktgeschw. des Zählers lesen/setzen |
BH | Anwesenheit einer Speicherkarte feststellen | 1FH | Taktgeschw. der Bildschirmauffrischung |
DH | Bildschirmgröße ermitteln | 20H | Umleitung des Int 9 unterbinden |
EH | Bildschirm-Modus lesen/setzen | 22H | PSP einer Anwendung ermitteln |
FH | Cursor-Modus lesen/setzen | 23H | Bildschirm-Modus absolutes lesen/setzen |
10H | virtuelle Bildschirmposition lesen/setzen | 24H | Status des ROM-Bereichs lesen/setzen |
11H | virtuelle Bildschirmposition verschieben | 26H | Status der Spannungsversorgung |
12H | Bildschirm auffrischen | 28H | Spracheinstellung lesen/setzen |
15H | Klangerzeugung | 2CH | BIOS-Versionsnummer ermitteln |
16H | Melodie-Töne | 2DH | Gerät ausschalten |
17H | Nummer wählen | 2EH | Statuszeile ein/ausblenden |
18H | Stummschaltstatus | 2FH | ATARI-Taste abfragen |
19H | Parameter der seriellen Schnittstelle lesen | 30H | Dateiübertragung via Smart-Kabel |
Anmerkung: Es gibt weitere reservierte Int 61H Funktionen die intern vom Betriebssystem benutzt werden. Es wird empfohlen diese nicht in Anwenderprogrammen aufzurufen, da diese in zukünftigen Software-Versionen geändert oder gelöscht werden könnten.
Fn 00H Funktionen initialisieren (siehe Abschnitt 3.10)
Parameter: AH 00H Rückgabe: keine
Anmerkung: Diese Funktion sollte von Anwendersoftware die auf diese Funktion zugreifen will einmalig als Bestandteil der Initialisierung aufgerufen werden.
Fn 07H Speicherkarte formatieren (siehe Abschnitt 2.3, 3.6, 3.10.2)
Parameter: AH 07H AL Laufwerksnummer (0 oder 1) Rückgabe: CF gesetzt falls Fehler beim Formatieren AH Fehlernummer (siehe Int 13H)
Anmerkung: Laufwerksnummer 0 wählt das physikalische Laufwerk A, und Laufwerksnummer 1 wählt das physikalische Laufwerk B. Diese Funktion sollte nicht verwendet werden um das interne Laufwerk (Nummer 2) zu formatieren.
Fn 08H Größe des internen Laufwerks ermitteln (siehe Abschnitt 3.10.2)
Parameter: AH 08H Rückgabe: AX Segmentadresse des Laufwerks BX Größe des Laufwerks in Kilobytes
Fn 09H Internes Laufwerk formatieren (siehe Abschnitt 3.10.2)
Parameter: AH 09H BX Größe des Laufwerks in Kilobytes Rückgabe: Wenn CF=1 BX maximal mögliche Größe
Anmerkung: Das System wird bei Erfolg neu gestartet. Alle Dateien auf Laufwerk C gehen verloren.
Fn 0BH feststellen, ob Speicherkarte vorhanden und gültig (siehe Abschnitt 2.3, 3.10.2, 3.10.2)
Parameter: AH 0BH AL Laufwerksnummer (0 oder 1) Rückgabe: CF=0 Karte anwesend und gültig Wenn CF=1 AH Fehlernummer (siehe Int 13H)
Anmerkung: Dies kann verwendet werden um festzustellen ob sich eine gültige CCM im angegebenen Laufwerk befindet. Laufwerksnummer 0 wählt Laufwerk A und Laufwerksnummer 1 wählt das physikalische Laufwerk B.
Fn 0DH Bildschirmgröße ermitteln (siehe Abschnitt 2.8, 3.7, 2.1.4)
Parameter: AH 0DH Rückgabe: AX physikalische Bildschirmgröße DX logische Bildschirmgröße
Anmerkung: AH/DH Zeilennummer bei 0 beginnend AL/DL Spaltennummer bei 0 beginnend
Fn 0EH Bildschirm-Modus lesen/setzen (siehe Abschnitt 2.1.4, 2.8, 3.7)
Parameter: AH 0EH AL=0 Modus lesen AL=1 Modus setzen DL neuer Modus Rückgabe: Wenn AL=0 DL Modus Wenn AL=1 DL alter Modus
Anmerkung: Der Modus wird durch das setzen folgender Mode-Bits in DL verändert:
Alle null (00H) 80x25 Modus Bit 0 (01H) 40x8 Modus Bit 1 (02H) Dynamischer Modus Bit 7 (80H) Grafik Modus
Diese Bits sind gegenseitig ausschließend. Wenn beim wechseln auf den 40×8 Modus die Cursorposition oder der Ursprung des virtuellen Bildschirm außerhalb des aktuellen Bildschirmbereichs liegen, so wird der Ursprung des virtuellen Bildschirms auf (0,0) gesetzt, der Bildschirm gelöscht und die Cursorposition auf Anfang gesetzt.
Fn 0EH liest oder setzt den Bildschirm-Modus egal in welchen Zustand sich das Gerät befindet (intern oder extern) und dies nur innerhalb des Programms. Für eine dauerhaftere Beienflussung sollte Fn 23H verwendet werden.
Fn 0FH Cursor-Modus lesen/setzen (siehe Abschnitt 2.1.4, 2.8, 3.7)
Parameter: AH 0FH AL=0 Modus lesen AL=1 Modus setzen BL neuer Modus AL=2 Modus erzwingen Rückgabe: Wenn AL=0 BL Cursor-Modus Wenn AL>0 BL alter Modus
Anmerkung: Der Cursor-Modus ist wie folgt:
0 Cursor aus 1 Unterstrich 2 Block
Der erzwungene Modus setzt automatisch die Cursor-Größe des BIOS um den Zustand der numerischen Tastatur wiederzuspiegeln.
Fn 10H virtuelle Bildschirmposition lesen/setzen (siehe Abschnitt 2.1.4, 2.8, 3.7)
Parameter: AH 10H AL=0 Position lesen AL=1 Position setzen Wenn AL=1 DH Zeilennummer DL Spaltennummer Rückgabe: Wenn AL=0 DH Zeilennummer DL Spaltennummer
Anmerkung: Die virtuelle Bildschirmposition ist die obere linke Ecke des 40×8-Fensters auf dem logischen Bildschirm.
Fn 11H Position des virtuellen Bildschirms verschieben (siehe Abschnitt 2.1.4 und 3.7)
Parameter: AH 11H AL Anzahl der Zeilen um die der Cursor verschoben wird. DL Richtung der Verschiebung 1 aufwärts 2 abwärts 3 links 4 rechts Rückgabe: keine.
Anmerkung: Dies verschiebt den Ursprung des virtuellen Bildschirms innerhalb der Scroll-Ränder. Es funktioniert nur im statischen oder im dynamischen Bildschirm-Modus und hat eine ähnliche Wirkung wie das drücken der Alt_Cursor-Tasten.
Fn 12H Bildschirm auffrischen (siehe Abschnitt 2.1.4, 2.8 und 3.7)
Parameter: AH 12H Rückgabe: keine.
Anmerkung: Diese Funktion kopiert den Inhalt des Videospeichers in den LCD-Controller und ist etwas schneller als der Aufruf von Int 10H Funktion 0.
Fn 15H Klangerzeugung (siehe Abschnitt 2.1.5)
Parameter: AH 15H AL Unterfunktion 0 Tasten-Klick 1 Piepton 2 Wecker Rückgabe: keine.
Fn 16H Melodie Tongenerator (siehe Abschnitt 2.1.5)
Parameter: AH 16H CX Länge des Tons in Zehntel-Sekunden-Schritten DL Tone-Code (siehe unten) 30H D#5 622,3 Hz 31H E5 659,3 Hz 32H F5 698,5 Hz 33H F#5 740,0 Hz 34H G5 784,0 Hz 35H G#5 830,6 Hz 36H A5 880,0 Hz 37H A#5 932,3 Hz 38H B5 987,8 Hz 39H C6 1046,5 Hz 3AH C#6 1108,7 Hz 29H D6 1174,7 Hz 3BH D#6 1244,5 Hz 3CH E6 1318,5 Hz 3DH F6 1396,9 Hz 0EH F#6 1480,0 Hz 3EH G6 1568,0 Hz 2CH G#6 1661,2 Hz 3FH A6 1760,0 Hz 04H A#6 1864,7 Hz 05H B6 1975,5 Hz 25H C7 2093,0 Hz 2FH C#7 2217,5 Hz 06H D7 2349,3 Hz 07H D#7 2489,0 Hz Rückgabe: keine.
Fn 17H Nummer wählen (siehe Abschnitt 2.1.5)
Parameter: AH 17H DS:SI Zeiger auf Zeichenkette cx Länge der Zeichenkette Rückgabe: keine.
Anmerkung: Die Zeichenkette muss im ASCII-Format sein. Gültige Zeichen sind: 0 1 2 3 4 5 6 7 8 9 A B C D * #. Buchstaben müssen groß geschrieben sein.
Fn 18H Stummschaltstatus (siehe Abschnitt 2.1.5)
Parameter: AH 18H AL 00 Stummschaltstatus lesen 01 Stummschaltstatus setzen 02 Tastatur-Klick-Status lesen 03 Tastatur-Klick-Status setzen 04 Piepton Status lesen 05 Piepton Status setzen 06 Wecker Status lesen 07 Wecker Status setzen 08 DTMF-Länge lesen 09 DTMF-Länge setzen Wenn AL= 1,3,5,7 oder 9 DL 0 aus 1 ein Rückgabe: Wenn AL= 0,2,4,6 oder 8 DL 0 aus DL 1 ein
Die Beschreibung zum DTMF ist nicht ganz vollständig, deshalb hier ein kurzes Programmteil:
; Quelle: ATARI.RSC Vol. V, Issue 2 December 1992 ; DTMF duration testing under ; assembled under TASM ; 2710h(10000) = short duration, ; 72e3h(29411) = default duration .model small .stack 100h .data dtmf_dur dw 0 temp dw 0 numstr db '00001111',0 .code mov ax, @data mov ds, ax mov ah, 18h ; Mute States call mov al, 08h ; Get DTMF duration int 61h mov dtmf_dur, dx ; save old duration value ; from register mov ah, 18h ; Mute States call mov al, 09h ; Set DTMF duration mov dx, 2710h ; stuff new duration value int 61h ; into register mov ah, 17h ; dial number to check tone mov temp, @data ; duration mov ds, temp mov si, OFFSET numstr mov cx, 8h ; length of string = 8 characters int 61h mov dx, dtmf_dur ; stuff old duration value ; into register mov ah,18h ; Set DTMF duration mov al,09h int 61h mov ah, 17h ; dial number to recheck ; old tone duration mov temp, @data mov ds, temp mov si, OFFSET numstr mov cx, 8h int 61h ;;;;;;;;;;;;;;;;; ;terminate mov ah,4ch int 21h end
Fn19H Parameter der seriellen Schnittstelle lesen (siehe Abschnitt
2.7, 4.1 und 3.5)
Parameter: AH 19H DX Nummer des seriellen Ports Rückgabe: Wenn AH=0 Composite Parameter in AL Wenn AH<>0 Fehler
Anmerkung: Diese Funktion liefert Composite Parameter, so wie sie auch von Int 14H Funktion 0 (initialisieren) verwendet werden.
Fn 1AH ID-Byte einer Schnittstelle lesen (siehe 2.7 und 3.5)
Parameter: AH 1AH Rückgabe: AH ID-Byte der Schnittstelle AL 0 wenn keine Schnittstelle angeschlossen ist.
Anmerkung: Diese Funktion liefert den ID-Code der aktuellen terminierenden Schnittstelle (siehe Fn 1BH).
Fn 1BH ID-Byte einer Schnittstelle setzen (siehe 2.7 und 3.5)
Parameter: AH 1BH AL=0 serielles ID setzen AL=1 paralleles ID setzen DL aktuelles ID Rückgabe: keine.
Anmerkung: Es kann Schnittstellen geben, die Schaltungen enthalten die sich ähnlich verhalten wie die serielle oder parallele Schnittstelle. Damit diese Schnittstellen auf die entsprechenden BIOS-Funktionen zugreifen können, müssen sie sich als software-kompatibel zu erkennen geben. DL sollte das ID-Byte der Schnittstelle enthalten (siehe Fn 1AH).
Fn 1CH E/A Tabellen für Schnittsellen definieren (siehe Abschnitt 2.7, 3.5 und 4.1)
Parameter: AH 1CH AL=0 Daten schreiben AL=1 Daten lesen BH Eintragsnummer in der Tabelle Wenn AL=0 BL Datenbyte DX I/O Adresse Rückgabe: Wenn AL=1 BL Datenbyte DX I/O Adresse
Anmerkung: Diese Funktion wird verwendet um Daten Ein/Ausgabe-Tabellen für Schnittstellen voreinzustellen die ein Daten-Byte mit einer I/O Adresse verknüpfen. Funktion 0 wird die voreingestellten Daten an die entsprechenden I/O Adressen ausgeben. Beim Einschalten werden die Tabelleneinträge nach nicht-Null-Werten in I/O Adressen durchkämmt und die zugeordneten Daten werden übermittelt. Eine typische Anwendung hierfür ist das wiederherstellen von Interrupt-Nummern nach dem Einschalten. Die ersten vier von maximal 10 Tabelleneinträgen sind reserviert.
Fn 1EH Taktgeschwindigkeit des Zählers lesen/setzen (siehe Abschnitt
2.4 und 3.8)
Parameter: AH 1EH AL Unterfunktionen 0 Geschwindigkeit lesen 1 Geschwindigkeit setzen Wenn AL=1 BX Zähler Taktgeschwindigkeit 0 1 Tick alle 128 Sekunden 1 1 Tick pro Sekunde Rückgabe: Wenn AL=0 BX Zähler Taktgeschwindigkeit 0 1 Tick alle 128 Sekunden 1 1 Tick pro Sekunde
Anmerkung: 1 Tick pro Sekunde verbraucht erheblich mehr Strom.
Fn 1FH Taktgeschwindigkeit der Bildschirmauffrischung (siehe Abschnitt 2.8, 3.7 und 3.8)
Parameter: AH 1FH AL=0 Auffrisch-Status lesen AL=1 Auffrisch.Status setzen Wenn Al=1 DX neuer Status Rückgabe: Wenn AL=0 DX aktueller Status Wenn AL=1 DX vorheriger Status
Anmerkung:
DH Bei NMI auffrischen DL Bei Tastendruck auffrischen DH/DL=0 nein DH/DL=1 ja
Wenn Bit 7 gesetzt ist bleibt der Status unverändert. Ein Tick pro Sekunde verbraucht erheblich mehr Strom. Wenn der Portfolio beispielsweise so eingestellt ist, dass der Bildschirm im Zähler-Takt auffrischt, so wird der Prozessor im „Run-Mode“ sehr viel Zeit damit verbringen. Dieser Tick bestimmt auch wie oft der Portfolio aus dem ausgeschaltetem Zustand erwacht um die Uhrzeit zu aktualisieren und die Weckfunktion zu prüfen. Dies kann die Lebensdauer der Batterien eines ausgeschalteten Portfolios erheblich verkürzen.
Fn 20H Umleitung des Int 9 unterbinden (siehe Abschnitt 3.2)
Parameter: AH 20H AL=0 auf Umleitung prüfen AL=1 umleiten/aufheben Wenn AL=1 DL=0 Umleitung unterbinden DL=1 Umleitung erlauben Rückgabe: Wenn AL=0 DL=0 Umleitung unterbunden DL=1 Umleitung freigegeben
Anmerkung: Dies wird benutzt um den Int 9H automatisch auf das BIOS umzuleiten. Dies hindert Anwendungssoftware daran einen eigenen Int 9H aufzubauen. Beachten sie, dass die I/O Adresse der Tastatur beim Portfolio anders ist als die der IBM kompatiblen. Diese Funktion wird beim Neustart automatisch aufgerufen.
Fn 22H PSP einer Anwendung ermitteln
Parameter: AH 22H AL Unterfunktion 0 Modus lesen 1 Modus setzen Wenn AL=1 DS:00 Zeiger auf Struktur in DS:00 Rückgabe: Wenn AL=0 DS:00
Anmerkung: Dies kann verwendet werden um den PSP der internen Anwendungen zu ermitteln, was nötig ist um sie zu sperren (siehe Anhang D).
Fn 23H Bildschirm-Modus absolutes lesen/setzen
Parameter: AH 23H AL=0 Modus lesen AL=1 Modus setzen Rückgabe: DH interner Modus DL externer Modus Wenn AL=0 DX Modus Wenn AL=1 DX vorheriger Modus
Anmerkung: Fn 23H speichert eine Kopie des Modus um eine permanentere Änderung durchzuführen. Nach Fn 23H sollte Fn 0EH ausgeführt werden.
Fn 24H Status des ROM-Bereichs lesen/setzen (siehe 2.2.4)
Parameter: AH 24H AL=0 ROM-Status lesen AL=1 ROM-Status setzen Wenn AL=1 DL neuer ROM-Status DH neuer CCM-Status Rückgabe: Wenn AL=0 DL aktueller ROM-Status DH aktueller CCM-Status Wenn AL=0 DL vorheriger ROM-Status DH vorheriger CCM-Status
Anmerkung:
Der ROM-Status in DL ist wie folgt:
DL=0 normal, Anwendungs-ROM DL=1 CCM-Laufwerk A DL=2 CCM-Laufwerk B DL=3 Erweiterungs-ROM
Der CCM-Status in DH ist wie folgt:
DL=0 CCM-Laufwerke gesperrt DL=1 CCM-Laufwerk A permanent bereit DL=2 CCM-Laufwerk B permanent bereit CF=0 kein Fehler CF=1 ungültige Option oder Fehler.
Anmerkung: Diese Funktion sollte mit Vorsicht behandelt werden, da sie entweder eine Speicherkarte oder ein Erweiterungs-ROM in den Adress-Bereich zwischen C000:0 und DFFF:F einblenden kann. Dieser Bereich wird normalerweise von dem internen Anwendungs-ROM verwendet. Der Sinn dieser Funktion liegt darin erfahrenen Anwendern einen direkten Zugriff auf erweiterungs-ROMs und Speicherkarten zu ermöglichen.
Fn 26H Status der Spannungsversorgung lesen/setzen (siehe Abschnitt 2.1.10, 2.5 und 3.6)
Parameter: AH 26H AL=0 Status der Spannungsversorgung lesen AL=1 Status der Spannungsversorgung setzen Wenn AL=1 DL neuer Status Rückgabe: Wenn AL=0 DL aktueller Status Wenn AL=1 DL vorheriger Status
Anmerkung:
DL=0 normal, Warnung und Abschalten wenn Batterien leer. DL=1 verhindern, Warnung aber kein Abschalten. DL=2 Abschalten verhindern und keine Warnung.
Diese Funktion wird verwendet um zu verhindern, dass sich der Portfolio bei schwach werdenden Batterien automatisch abschaltet (siehe Abschnitt 3.8). Der Einsatz wird nicht empfohlen, es sei ein Abschalten wäre für die Anwendung oder eine Erweiterung kritisch.
Fn 28H Spracheinstellung lesen/setzen
Parameter: AH 28H AL=0 Sprache lesen AL=1 Sprache setzen AL=3 Zeiger auf Sprachentabelle Wenn AL=1 DX neue Sprachen Rückgabe: Wenn AL=0 DX aktuelle Sprache Wenn AL=1 DX vorherige Sprache wenn AL=3 ES:CX Zeiger auf Tatstaturteabelle ES:DX Zeiger auf Sprachentabelle
Anmerkung:
FürAL=0 und AL=1 DH = Textsprache DL = Tastatursprache
Diese Sprach-Codes dienen als Index in eine der Sprachen des entsprechenden ROMs. Aktuell gibt es folgende Sprachversionen:
Englisch/Französisch/Deutsch (EFG) Englisch/Italienisch/Spanisch (EIS) Englisch/Schwedisch/Dänisch (ESD) Englisch/Schweizer-Französisch/Shweizer-Deutsch (ESS)
Diese Funktionen gibt keine Auskunft über die vorhandene Sprachgruppe, sondern nur über den Index innerhalb dieser Gruppe. Für voll multilinguale Software, verwenden sie diese Indexe für die Tabellen die von Funktion 3 geliefert werden.
Für AL=1
Wenn bit 7 von DH oder DL wärend des Aufrufs gesetzt ist, so wird der ursprüngliche Wert des entsprechenden Parameters nicht verändert.
Für AL=3 ES:CX Zeiger auf Tastaturtabelle ES:DX Zeiger auf Sprachtabelle
Die Tabellen bestehen jeweils aus einem Count-Byte, gefolgt von einer Reihe von Codes für die residenten Sprachen:
Englisch 1 Schwedisch 6 Französisch 2 Dänisch 7 Deutsch 3 Schweizer Französisch 8 Spanisch 4 Schweizer Deutsch 9 Italienisch 5
Fn 2CH BIOS-Versionsnummer ermitteln
Parameter: AH 2CH Rückgabe: DS:DX Adresse der BIOS-Versionsnummer
Anmerkung: Die Versionsnummer besteht aus einer Haupt- und einer Nebennummer, mit einem „$“ terminiert. Ein typisches Beispiel ist „1.050$“. Verwenden sie Int 60H Fn 0H.
Das Technische Referenzhandbuch ist falsch. Es muss DX und nicht BX sein (Quelle: The Resource File Jun 1990, Seite 11.
Fn 2DH Gerät ausschalten (siehe Abschnitt 2.1.10, 2.5 und 3.8)
Parameter: AH 2DH Rückgabe: keine.
Anmerkung: Dies ist als wenn man OFF in die Kommandozeile schreibt.
Fn 2EH Statuszeile ein/ausblenden
Parameter: AH 2EH AL=0 Statuszeile ausblenden AL=1 Statuszeile einblenden DH Zeilennummer DL Spaltennumer Rückgabe: keine.
Anmerkung: Dies ist als wenn man die Feststelltaste drückt.
Fn 2FH Atari-Taste abfragen
Parameter: AH 2FH Rückgabe: AL 20H wenn Taste gedrückt wurde
Fn 30H Dateiübertragungsfunktion (siehe Abschnitt 4.2)
Parameter: AH 30H AL 0 Block übertragen AL 1 Block empfangen AL 2 Ports öffnen AL 3 Ports schließen AL 4 Warte 500 ms DS:DX Anfang des Datenpuffers Wenn AL=0 CX Anzahl der zu sendenden Bytes Wenn AL=1 CX Maximale Puffergröße Rückgabe: Wenn AL=1 CX Anzahl empfangener Bytes DL Fehlernummer 0 kein Fehler 1 Puffer zu klein 2 Time-Out bei Übertragung 3 Checksummenfehler 4 ungültige Unterfunktion 5 Schnittstelle nicht angeschlossen
Anmerkung: Diese Funktion wird von der eingebauten Dateiübertragungs-Software benutzt.
3.3.2 Disketten Funktionen
Portfolios CCM/Disk Funktionen werden auf dem BIOS-Level durch den Int 13H zur Verfügung gestellt.
Es gibt sechs standard Disk Unterfunktionen plus eine Sonderfunktion. Diese sind wie folgt:
0H CCM/Disk-System zurücksetzen 1H CCM/Disk-Status ermitteln 2H CCM/Disk-Sektoren lesen 3H CCM/Disk-Sektoren lesen 4H CCM/Disk-Sektoren prüfen 5H CCM/Disk-Spur formatieren 83H CCM/Disk Boot-Sektor schreiben
Funktionen 0 bis 4 sind den Funktionen des standard IBM PC BIOS sehr ähnlich. Sie können auf die drei intern unterstützten Laufwerke A, B und C (jeweils als Laufwerk 0, 1 und 2 bezeichnet) zugreifen.
Int 13H verwendet den BIOS Parameter Block (BPB) auf dem Boot-Sektor (erster Sektor) des Laufwerks um die Laufwerkseigenschaften zu ermitteln. Wärend der Formatierung ist es erforderlich den Format-BPB zu verwenden, er wird von der Funktion 83H bereitgestellt. Diese Funktion wird an Stelle der Funktion 5H verwendet um die erste Spur einer CCM/Disk zu formatieren.
Die Parameter für die Funktion 5H sind anders als die für einen normalen PC, wie unten beschrieben:
Int 13H Fn 5H Parameter: AH 5H DL Laufwerks-Nummer DH Seite/Kopf CH Spur-Nummer Rückgabe: CF=1 Fehlernummer in AH
Anmerkung: Schreibt ein definiertes Byte auf eine Spur des CCM. Das Byte wird in der Disk Basis Tabelle definiert.
Die Disk Basis Tabelle ist der eines IBM-PC sehr ähnlich. Auf die Tabelle für beide CCMs zeigt der Int 1EH, und auf die Tabelle für das interne Laufwerk zeigt Int 41H. Das Format beider Disk Basis Tabellen ist wie folgt:
Offset 03H Byte-pro-Sektor-Code (0=80H, 1=100H, 2=200H) Offset 0AH Format Daten-Bytes (normalerweise F6H)
Wärend der Formatierung mit dem Int 61H (siehe Abschnitt 3.10.1) wird die Sektorgröße dynamisch an die Disk-Größe angepasst:
Disk-Größe Sektorgröße 0 bis <=32 Kilobyte 80H/128 Bytes pro Sektor >32 bis <=64 Kilobyte 100H/256 Bytes pro Sektor >64 Kilobyte 200H/512 Bytes pro Sektor
Dies stellt sicher, dass eine geringe Disk-Größe eine vernünftige Anzahl an Sektoren enthält. Da das Portfolio-DOS jedem Daten-Cluster einen Sektor zuweist, elaubt dies, dass eine 32K-CCM die gleiche Anzahl an kleinen Dateien wie eine 128K-CCM hat.
Es gibt mehrere Int 61H-Funktionen die erweiterte Disk-Funktionen zur Verfügung stellen (siehe Abschnitt
3.10.1):
Int 61H Fn 7H eine CCM formatieren Int 61H Fn 8H Größe des internen Laufwerks ermitteln Int 61H Fn 9H internes Laufwerk formatieren Int 61H Fn 0BH feststellen, ob eine gültige CCM vorhanden ist
Anmerkung:* Eine CCM kann auch eine BIOS-Erweiterung enthalten, die die den Betrieb der CCM nicht beeinflusst, die aber das Betriebssystem oder die Ein- und Ausschalt-Sequenz verändert (siehe Abschnitt
3.5)
3.4 Unterschiede Zwischen Portfolio DOS und MS-DOS
Für den Zweck dieses Hanbuches, wird Portfolio als das Programm definiert, dass zwischen dem Befehlsprozessor oder der Benutzeranwendung und dem BIOS kommuniziert. Es beinhaltet den Befehlsprozessor NICHT. (siehe empfohlene Literatur in Abschnitt 1 für wietere Information über das Standard MS/PC-DOS).
Es gibt einige Unterschiede zwischen Portfolio-DOS und MS-DOS. Dabei geht es hauptsächlich um Verbesserungen des Portfolio-DOS 2.11um es kompatibler zu DOS 3.XX zu machen:
Int 21H Fn 37H Landeseinstellungen Lesen/Setzen. Portfolio-DOS ist DOS 3.XX-kompatibel.
Int 21H Fn 4BH Programm Ausführen. Neben den standardmäßigen EXEC-Diensten ist es auch möglich ein Programm direct auf einer CCM auszuführen (siehe RUN in Abschnitt 3.6.3.
Int 28H Tastatur besetzt. Wird nicht unterstützt. Diese Funktion würde normalerweise bei einem E/A-Polling der Konsole aufgerufen, das Portfolio-DOS pollt die Konsole aber nicht, es wartet dagegen auf einen Tastendruck unter Verwendung des Int 16H Fn 0H. (siehe Abschnitt 3.8. über Stromverbrauch.
Int 2AH Interne MS-DOS Funktionen. Werden nicht vollständig unterstützt.
3.5 Gerätetreiber und Peripheriesoftware
3.5.1 Gerätetreiber
Gerätetreiber werden von DOS benutzt um mit dem BIOS zu kommunizieren. Sie stellen eine standard Schnittstelle her, die das DOS vom Geräte-spezifischen BIOS isoliert. Der Portfolio hat folgende residente Gerätetreiber im ROM:
CON, CLOCK$, PRN, LPT1, AUX, COM1, Diskettentreiber
CON führt alle E/A-Zugriffe auf die Konsole aus.\\ PRN/LPT1 führt alle parallelen (Drucker) E/A-Zugriffe aus.\\ AUX/COM1 führt alle seriellen E/A-Zugriffe aus.\\ CLOCK$ spezieller Treiber der auf die BIOS-Uhr zugreift.\\
Durch ihren Namen erkannt, sind dies alles Zeichen-Treiber, die Zeichenketten Zeichen für Zeichen abarbeiten.
Der Disketten-Gerätetreiber ist ein Block-Treiber, der esverlangt, dass alle E/A-Zugriffe in Blöcken durchgeführt werden. Er adressiert alle normalen Portfolio-Laufwerke (A, B und C). Er hat keinen Namen.
Es ist möglich diese residenten Treiber durch die Verwendung installierbarer Treiber zu ersetzen (und neue hinzuzufügen). Diese können vom DOS durch die Verwendung des Befehls „DEVICE=“ in der CONFIG.SYS geladen werden. Wenn ein Zeichentreiber geladen wird, der den selben Namen besitzt wie einer der obigen, so wird dieser ersetzt. Dieser Mechanismus wird von Programmen wie ANSI.SYS verwendet, das eigentlich ein CONsolen-Gerätetreiber mit zusätzlichen Funktionen ist.
Wenn ein Block-Gerätetreiber hinzugeführt wird, so ergänzt er den vorhandenen. Ein Beispiel dafür ist der Treiber für virtuelle Laufwerke VDISK.SYS, welches ein Laufwerk D hinzufügen kann.
Die Struktur eines installierbaren Gerätetreibers ist mit jedem MS-DOS 2.11 Gerätetreibers kompatibel.
Multiple Gerätetreiber-Header werden nicht unterstützt.
3.5.2 Gestaltung von Erweiterungen
Wegen Portfolios Ausschaltautomatik zur Stromersparnis, muss bei der Entwicklung von Peripherie einiges beachtet werden. Die meisten Schnittstellen müssen bei jedem Einschalten reinitialisiert werden, nicht nur beim Booten (siehe Anhang C).
Es gibt zwei Methoden dies zu gewährleisten:
1) Int 61H Fn 1CH Diese Funktion speichert eine Liste von E/A-Adressen und darauf bezogene Datenwerte, die beim Einschalten ausgegeben werden. Wenn alle E/A-spezifischen Initialisierungswerte mit dieser Funktion geschrieben werden, dann werden sie bei jedem Einschalten wiederholt.
Eine typische Verwendung dieser Funktion wäre das wiederherstellen einer Interrupt-Nummer bei einer Interrupt-gesteuerten seriellen Schnittstelle.
2) Verwendung einer ROM-Erweiterung. Dies wäre im Allgemeinen nötig wenn die Abfolge der Reinitialisierung nicht mit der Funktion des Interrupts 61H möglich ist. Dies erfordert, dass die Schnittstelle eine ROM-Erweiterung enthält (siehe Abschnitt 3.5.3).
Es gibt zwei Ausnahmen zu obigen Möglichkeiten. Die Parameter der seriellen Schnittstelle werden beim Ausschalten gelesen und beim darauffolgenden Einschalten korrekt reprogrammiert. Die parallele Schnittstelle wird ebenfalls beim Einschalten initialisiert.
Jede Peripherie wird vom Portfolio durch den Peripheral ID (PID) Code identifiziert (siehe Abschnitt 2.7). Dies ist tatsächlich eine Hardware E/A Adresse auf der Schnittstelle die durch Verwendung des Int 61H Fn 1AH gelesen werden kann.
Bei der Entwicklung von Anwender-Peripherie ist eine weitere Software-Besonderheit zu beachten, was serielle und parallele Schnittstellen betrifft. Wenn die Anwender-Schnittstelle das existierende BIOS verwenden will, muss sie sich als Hardware-kompatibel identifizieren.
Int 61H Fn 1BH konfiguriert das BIOS um eine Schnittstelle als seriell oder parallel kompatibel zu erkennen.
3.5.3 ROM-Erweiterungen
ROM-Erweiterungen sind Code-Fragmente die zu verschiedenen Zeitpunkten, wärend des Bootens, des Einschaltens und des Ausschaltens ausgeführt werden können. Diese können sich auf einer CCM oder auf einem ROM in einer Schnittstelle befinden. Eine typische Anwendung ist die Veränderung des Betriebssystems oder die Initialisierung von Anwender-Schnittstellen.
Es gibt drei Grundarten von Erweiterungen: eine spezifische BIOS-Erweiterung, eine spezifische DOS-Erweiterung, und allgemeine Erweiterungen:
- Die BIOS-spezifische Erweiterung wird nach der BIOS-Initilaisierung aufgerufen.
- Die DOS-spezifische Erweiterung wird nach der DOS-Initilaisierung aufgerufen.
- Die allgemeinen Erweiterungen enthalten Komponenten die vor und nach der BIOS-Initilaisierung, vor und nach der DOS-Initilaisierung, vor der Initialisierung des Befehlsprozessors und wärend der Einschalt- und Ausschalt-Phasen aufgerufen werden.
ROM-Erweiterungen werden zuerst auf Laufwerk A gesucht, dann auf einer Erweiterung und zuletzt auf Laufwerk B. Wenn eine gültige ROM-Erweiterung gefunden und ausgeführt wird, endet die Suche nach dieser.
Das Format einer ROM/CCM Erweiterung ist wie folgt:
Offset Größe 00H dw ? ;Identifikations-Code 02H db ? ;Anzahl der 512 Byte Blöcke (wird nicht verwendet) 03H db 5 dup (?) ;BIOS/DOS-spezifische Erweiterung 40H db "ATARI ROM!!" ;OEM Benutzer-Text ;allgemeine Erweiterungs-Vektoren 50H db 5 dup (?) ;Pre-BIOS Sprung-Vektor 55H db 5 dup (?) ;Sprung-Vektor der BIOS-Erweiterung 5AH db 5 dup (?) ;Pre-DOS Sprung-Vektor 5FH db 5 dup (?) ;Sprung-Vektor der DOS-Erweiterung 64H db 5 dup (?) ;Post-DOS Sprung-Vektor 69H db 5 dup (?) ;Sprung-Vektor für das Ausschalten 6EH db 5 dup (?) ;Sprung-Vektor für das Einschalten
Die Vektoren der Erweiterung liegen innerhalb der ersten 128 Byte des CCM/ROM. Die Vektoren werden so positioniert, dass gültige BIOS-Parameterblöcke (BPB) auf einer CCM entstehen, somit können sie als normale oder CCM-Erweiterungen verwendet werden. Der Identifikations-Code bei Offset 0 bestimmt die Art Erweiterung wie folgt:
AA55H ;spezifische BIOS-Erweiterung 55AAH ;spezifische DOS-Erweiterung 5555H ;allgemeine Erweiterung
Demnach, wenn das Wort bei Offset 0 AA55H ist, wird nach der BIOS-Initialisierung ein Far Call zu Offset 3 getätigt. Die anschließenden 5 Byte nach diesem Offset erlauben einen Short/Normal/Far Sprung zu Erweiterungs-Code. Wenn das Wort bei Offset 0 55AAH ist, so wird der Aufruf nach der DOS-Initialisierung durchgeführt. Wenn das Wort 5555H ist, werden alle allgemeinen Erweiterungen zum entsprechenden Zeitpunkt aufgerufen.
Anmerkung: Alle Sprungvektoren müssen bei einer allgemeinen Erweiterung zu einem passenden Return gerichtet werden, auch wenn die anderen Vektoren nicht benötigt werden.
Alle ROM-Erweiterungen müssen die Prozessor-Register bewahren. Bei der Verwendung von Erweiterungen muss höchste Sorgfalt gehalten werden (besonders bei denen, die auf halber Strecke des Boot-Vorgangs aufgerufen werden), da diese die Funktionsweise des Portfolio negativ beeinträchtigen können. Die Pre-BIOS Erweiterung wird fast unmittelbar nach dem Sprung vom Reset-Vector aufgerufen, und hat somit keinen Stapel. Sie muss durch einen FAR Sprung zu 0FFF:0H zurückkehren. Alle anderen Erweiterungen müssen durch einen FAR RETURN zurückkehren. Es wird empfohlen, die Post-DOS Erweiterung den ihr vorangegangenen vorzuziehen.
Das OEM Benutzer-Textfeld bei Offset 40H soll ermöglichen, dass ein OEM das ROM erkennt. (siehe Beispiele der Anwendung einer ROM-Erweiterung in Anhang C).
3.6 Speicherkarten
3.6.1 Format
Jede CCM muss vor dem Gebrauch formatiert werden, das Programm erzeugt ein Format, analog zu dem standard Disketten-Format.
Alle formatierten Speicherkarten enthalten nur einen Sektor pro Cluster, im Gegenstatz zu den 2 oder mehr Sektoren wie sie in größeren Systemen zu finden sind.
Das BIOS des ATARI Portfolio wurde geschrieben um mit zukünftigen in Pages aufgebauten CCMs umgehen zu können. Das BIOS geht davon aus, dass das Page-Register ein Byte bei Offset 10 (0AH) im Bootsekor (ersten Sektor) der CCM ist. Aus diesem Grunde, verwenden sie nie diesen Speicherbereich bei ihren Programmen.
3.6.2 Autoboot Mechanismus
Der Portfolio hat die Fähikeit AUTOEXEC.BAT von anderen Laufwerken als C aufzurufen. Wenn sich eine Speicherkarte in Laufwerk A oder B befindet und eine AUTOXEC.BAT vorhanden ist, so wird diese vorrangig vor der auf Laufwerk C ausgeführt. Laufwerk B hat Vorrang vor Laufwerk A, falls sich auf beiden eine AUTOEXEC.BAT befindet.
Falls es notwendig ist, das die AUTOEXEC.BAT auf Laufwerk C immer ausgeführt wird, so beenden sie die Stapelverarbeitungsdatei mit dem Befehl:
C:\AUTOEXEC.BAT
Die CONFIG.SYS Datei wird immer von Laufwerk C geladen und kann nicht umgangen werden.
3.6.3 Run
Eine RUN Datei ist ein speziell geschriebenes Programm, dass direkt von einer CCM ausgeführt werden kann ohne in das TPA (Transient Programm Area) geladen werden zu müssen. Ein offensichtlicher Vorteil dieser Art der Ausführung ist die Minimierung des Gebrauchs des Hauptspeichers.
Eine RUN Datei kann vom Befehlsprozessor ausgeführt werden indem man RUN <Dateiname> tippt oder als normales Programm auf der DOS-Ebene durch Aufruf des Int 21H Fn 4BH, aber mit AL auf 80H und CL auf CCH gesetzt.
Es gibt mehere Bedingungen für Programme die den Befehl RUN verwenden:
- Das Programm muss speziell dafür geschrieben werden den RUN Befehl zu nutzen.
- Das Programm muss auf Laufwerk A oder B sein, und es muss auf aufeinander folgenden Clustern auf der Disk sein. Dies ist nicht gewährleistet wenn die Datei einfach auf das Laufwerk kopiert wird.
- Die Datei muss die Erweiterung .RUN haben.
Schreiben von .RUN Programmen
Fast alle standard Programme gehen davon aus, dass ihre Daten entweder im Hauptspeicher sind, oder im eigenen Code-Segment gespeichert sind. Obwohl eine .RUN Datei einer .COM Datei sehr ähnlich ist, sollte große Vorsicht im Umgang mit Daten gewahrt werden:
Der Initialisierungscode eines .RUN Programms sollte folgendes durchführen (siehe Anhang A:
- Den Gebrauch des Hauptspeichers sollte auf ein Minimum reduziert werden. Es müssen mindestens 10H Paragraphen vorhanden sein (z.B. die Größe des PSP).
- Weisen sie Daten und Stapel mit Hilfe von des DOS-Interrupts 21H Fn 48H zu, und setzen sie SS:PP so, dass es auf diesen Block zeigt.
- Kopieren alle initialisierten Variablendaten von der Speicherkarte auf den zugewiesenen Block im Hauptspeicher.
- Das Programm kann dann die meisten Funktion dei sie wünschen ausführen; einschließlich alle DOS-Calls. Das Programm MUSS mit DOS Int 21H Fn 4CH (Prozess beenden) beendet werden.
- Das Programm muss die unveränderlichen konstanten Daten vor dem Gebrauch nicht vom ROM in das RAM kopieren. Diese Daten können direkt von der Karte aus verwendet werden. Das heißt, dass Aufforderungen oder Text-Meldungen keinen RAM in Anspruch nehemen.
Die eingebauten Anwendungen können wie immer mit Hilfe der Hot-Keys aufgerufen werden wärend das RUN Program ausgeführt wird.
Wenn die CCM wärend der Ausführung eines RUN Programms aus dem Laufwerk entfernt wird, dann wird die nächste auszuführende Anweisung auf der Karte durch einen Error-Handler unterbrochen. Dies zeigt die Fehlermeldung: „Fehler, Kartenzugriff“ und bricht den Prozess ab. Eine RUN-Datei kann kein anderes Programm aus sich heraus ausführen (EXEC).
RUN Dateien größer als 64K
Um eine .RUN Datei herzustellen, die größer ist als 64K, ist es nötig mehr als ein Codesegment zu haben. Ein Weg dies zu erreichen ist es, die Datei mit Hilfe des Medium Memory Modells anzufertigen. Auf diese Weise ist der Code nur durch die Größe der CCM beschränkt.
Anders als eine .EXE Datei, dessen Festlegung zur Laufzeit durchgeführt wird, muss eine CCM festgelegt werden bevor sie auf ein ROM übertragen wird. Deshalb ist es notwendig die Festlegung in Bezug auf eine absolute Adresse für die Datei durchzuführen, und es muss vorher bekannt sein wo sich die Datei auf der Karte befinden wird. Wenn das Programm das erste auf eine Karte ist, dann wird die Position folgendermaßen ermittelt:
Festlegungsadresse (in Paragraphen)= C000H + (Bootsektoren + FAT-Sektoren + Stammverzeichnis-Sektoren) * (Sektorgröße in Paragraphen)
Die Anzahl der verwendeten Sektoren kann mit Hilfe eines Disk-Utility Programms (z.B. Norton Utilities) ermittelt werden.
Beispiel: Für eine 128K Karte mit 512 Bytes pro Sektor, 1 Sektor für den Boot-Record, 1 Sektor für die FAT und 8 Sektoren für das Stammverzeichnis, ist die Adresse (in Paragraphen) für die erste Datei auf der Karte C140H.
Dieser Wert sollte als Segment-Adresse der Festlegung verwendet werden, bevor die Datei auf die Karte kopiert wird.
Aufgrund des Mechanismus den das Betriebssystem anwendet um .RUN Dateien auszuführen, muss die Datei eine scheinbare Größe kleiner als 64K haben. Deshalb muss, nachdem die Datei kopiert wurde, der Dateigrößeneintrag im Stammverzeichnis auf einen Wert unter 64K geändert werden.
Da die Datenfestlegung zur Laufzeit erfolgen muss, ist es nicht möglich auf mehr als 64k initialisierter Daten zuzugreifen. Das heißt, dass das Huge Memory Modell nicht angewendet werden kann.
Anhang A zeigt ein Beispiel wie ein typisches RUN Programm programmiert wird.
3.7 Bildschirmsteuerung
Das BIOS des Portfolio unterstützt zwei Video-Modi: Text und Grafik. Der BIOS-Video-Interrupt 10H kann verwendet werden um den Video Modus zu setzen:
Modus Typ PC-Auflösung Portfolio Modus 7 Text (80,25) <80,25> Modus 8 Grafik (160,200) <240,64> Modus 9 Grafik (320,200) <240,64> Modus A Grafik (640,200) <240,64>
Wie man sieht, interpretiert der Portfolio diese Modi recht simpel.
Die Text-Modi werden als 40×8-Fenster gesehen. Es gibt 3 Unter-Modi: statisch PC, 40×8 und dynamisch.
Im statischen PC-Modus ist der Bildschirm ein 40×8-Fenster im gesmaten 80×25 Text-Bildschirm. Das Fenster kann mit den Cursor-Tasten, oder mit dem Int 60H Fn 11H bewegen.
Der vierzig mal acht Modus setzt die logische Bildschirmgröße auf 40 Splaten mal 8 Zeilen. Dieser Modus ist für Software gedacht, die speziell für den Portfolio geschrieben wurde, wie der Befehlsprozessor oder die eingebauten Anwendungen.
Der dynamische Modus ist dem statischen Modus ähnlich, außer dass das Fenster automatisch am Cursor platziert wird. Dieser Modus kann mit dem Int 61H Fn 0EH gesetzt werden.
Es gibt zwei Grafik-Seiten. Die Grafik-Seiten werden nicht erhalten wenn eine eingebaute Anwendung darüber geöffent wird. (Siehe Anhang D nach Möglichkeietn die eingebauten Anwendungen zu deaktivieren.)
Der Video-RAM für den Text-Bildschirm ist bei Segment B000H. Es ist möglich direkt in den Video-RAM zu schreiben; der Bildschirm muss von der Anwendung aufgefrischt werden (oder von der System-Software aufgrund eines Timerticks oder Tastendrucks, je nach Bildschirmkonfiguration.) Es gibt nur eine Text-Seite.
Es gibt weitere Int 61H Video-Funktionen
Int 61H Fn 0DH logische und physische Bildschirmgröße lesen Int 61H Fn 0FH Cursor-Größe setzen Int 61H Fn 10H Ursprung des virtuellen Bildschirmfensters auf dem 80x25 Bildschirm setzen Int 61H Fn 12H Bildschirmauffrischung erzwingen
Der ATARI Portfolio hat drei Cursor-Modi: Block, Unterstrich und Aus. Wenn die Cursor-Größe im BIOS gesetzt ist, wird entweder Block oder Unterstrich eingestellt.
Im Grafik-Modus hat der Bildschirm eine Auflösung von 240 x 64 Pixel und kann gelesen oder beschrieben werden, indem man den BIOS Pixel-Lese/schreib Int 10H Fn 0cH oder Fn 0DH verwendet.
3.8 Power Management
Der Portfolio wurde so entwickelt, dass der Stromverbrauch minimiert, und die Lebensdauer der Batterien maximiert wird. Dies spiegelt sich in der Hardware wieder und wird durch verschiedene Software-Funktionen unterstützt.
Die energieverschwenderischste Tätigkeit bei Computern ist das Warten auf eine Benutzereingabe an der Tastatur. Sobald Portfolios BIOS-Interrupt für die Tastaturabfrage (Int16H Fn 00H) eine Untätigkeit an der Tastatur feststellt, wird er anfangen einen Time-Out Zähler herunterzuzählen. Wird der Time-Out erreicht, so beginnt Portfolios Ausschalt-Prozedur. Einmal ausgeschaltet beginnen Hardware-Interrupts die vom ASIC ausgelöst werden, wie Zählerticks oder Tastatur-Interrupt, die Einschalt-Prozedur auszulösen.
Der Time-Out hängt davon ab ob das Gerät auf schnelle oder langsame Timerticks (Int 61H Fn 1FH) eingestellt ist, diese liegen aber immer zwischen 128 und 256 Sekunden.
Es ist wichtig, dass jegliche Tastatureingaben über das DOS oder die Tastaturfunktionen des BIOS durchgeführt werden. Ein ständiges Pollen der Tastatur wird die Batterien sehr schnell entleeren. Dies ist offensichtlich, da sich der Portfolio dann niemals ausschaltet (Off-Modus).
Eine weitere verschwenderische Tätigkeit ist das Auffrischen des LCD-Controllers mit dem Video-RAM. Wenn eine Anwendung direkt in den Video-RAM schreibt, muss der Bildschirm mit Hilfe des Int 61H Fn 12H in entsprechenden Abständen aufgefrischt werden. Mit dem Int 61H Fn 1FH ist es möglich ein Auffrischen bei einem Tastendruck oder einem Timer-Tick zu erzwingen. Viele Anwendungen die auf dem Portfolio laufen, aber für den IBM-PC geschrieben wurden, müssen durch jeden Tastendruck aufgefrischt werden, da sie ein automatisches Auffrischen erwarten. Das Auffrischen bei Timer-Ticks hängt von der Geschwindigkeit der Ticks ab. Dies kann mit dem Int 61H Fn 1EH eingestellt werden.
Anmerkung: Der Timer-Tick (Int 08H ind Int 1CH) ist dem des IBM-PCs nicht gleich, welcher 18,2 mal in der Sekunde geschieht. Er wird entweder alle 128 Sekunden, oder einmal pro Sekunde generiert.
Als Grundregel gilt, eine Anwendung sollte vermeiden den Bildschirm aufzufrischen, ausgenommen wenn es nötig ist. Wenn das Auffrischen auf beides, Tastendruck und Timertick eingestellt ist, und der Timertick auf schnell gestellt ist (z.B. einmal pro Sekunde), verbringt der Prozessor sehr viel Zeit damit, den Bildschirm aufzufrischen.
Die Tonausgabe der Klangerzeugung, des Melodie-Tongenerators oder der Telefonnummer-Wählfunktion (Int 61H Fn 15H, 16H oder 17H) kann eine Menge Strom aus den Batterien ziehen.
Der Wecker schaltet sich nach 15 Sekunden aus um eine Überlastung der Batterien zu vermeiden.
Jede Schnittstelle wird den Stromverbrauch erhöhen, es sei denn sie hat ihre eigene Stromversorgung. Es wird empfohlen bei dem Gebrauch von Schnittstellen wann immer möglich das Netzteil zu verwenden.
Bei jedem Disk-Zugriff, jeder Klangerzeugung, jedem Timertick und jedem Drücken der Eingabetaste prüft der Portfolio ob die Batterien leer werden. Wenn die Batterien schwach sind gibt der Portfolio eine Meldung aus und schaltet sich ab. Beim Einschalten bleibt die Meldung sichtbar, um dem Benutzer den Grund des Ausschaltens anzuzeigen.
Mit Hilfe des Int 61H Fn 26H ist es möglich den Portfolio am Abschalten zu hindern. Diese Funktion darf NUR wenn unbedingt nötig verwendet werden, denn dies könnte den Portfolio zwingen, außerhalb seiner elektrischen Spezifikationen zu arbeiten, was zu Hardwareschäden führen kann.
3.9 Besondere Dateiformate
3.9.1 Speicherungsformat des Zeitplaners
Der eingebaute Terminplaner speichert seine Daten im standard ASCII Datei-Format. Um verschiedene Datumsformate zu umgehen, speichert der Terminplaner sie im englischen Format.
Bestimmte Informationen, wie Wiederholungsdaten und Wecker-Informationen werden zusammen mit den Daten gespeichert.
Es folgt ein Beispiel einer Terminplaner-Datei:
6/07/89 14:14 Technische Referenz 20:20 Nach Hause
Wenn ein Eintrag ein sich wiederholendes Ereignis ist, so wird der Uhrzeit ein Code-Zeichen vorangesetzt, dass den Wiederholungszeitrum angibt:
d täglich w wöchentlich n Wochentage (Mon-Fre) m monatlich y jährlich
Wenn dem Eintrag eine Weckfunktion zugeordnet ist, so wird das Symbol„@“ in der Zeile der Uhrzeit vorangestellt.
Wenn ein Eintrag eine Weckfunktion hat und ein sich wiederholendes Ereignis ist, so geht der Wiederholungscode dem Weckzeichen voraus.
Zum Beispiel:
6/07/89 @ 20:20 Nach Hause 7/07/89 d 14:48 Hallo da! w@ zum Tennis
Der erste Eintrag ist ein sich nicht wiederholendes Ereignis mit Weckfunktion. Der zweite Eintrag wiederholt sich täglich und der dritte wöchentlich und löst Portfolios Weckfunktion aus.
Der Terminplaner sortiert die Einträge chronologisch wann immer er geladen wird.
3.9.2 Formate der Systemdateien
Es gibt drei System-Dateien die die Funktionsweise des BIOS und der internen Anwendungen steuern. Jede dieser Dateien hat ihr eigenes festgelegtes standard Datei-Format. Diese sind:
Klemmbrett (C:\SYSTEM\CLIPBORD.DAT) Wiederherstellen (C:\SYSTEM\UNDELETE.DAT) Permanente Daten (C:\SYSTEM\PERMDATA.DAT)
Alle drei Dateien werden in den Hauptspeicher geladen, wenn eine Anwendung aufgerufen wird. Wenn wärend der Bearbeitung Daten aus diesen Dateien geändert werden, so geschieht dies nur in der Kopie im Hauptspeicher. Alle drei Dateien werden neu geschrieben wenn die Anwendungen beendet werden (z.B.: druch Drücken der Esc-Taste oder durch Beenden im Hauptmenü).
3.9.2.1 CLIPBORD.DAT
Dies ist die Datei, die von den Anwendungen als Klemmbrett verwendet wird. Es ist ein Datenblock, der mit einer Null (00H) terminiert ist. Zeilenumbrüche werden al 0DH gespeichert, ohne den anschließenden Zeilenvorschub 0AH. Die maximale Größe des Klemmbretts ist 8K Zeichen. Dies muss einschließlich des Null-Terminators sein.
Wenn die Datei kein 00H Terminierungsbyte enthält, dann wird die Datei nicht ins Klemmbrett geladen. Ähnlich, wenn die Datei größer als die maximal erlaubte Anzahl an Bytes ist, wird sie nicht geladen. In beiden Fällen, wenn die Datei nicht geladen wird, sie wird beim Verlassen der Anwendung mit einer neuen Datei überschrieben.
Wenn das Klemmbrett das normale Text-Format (0DH, 0AH) hat, so wird es nur vom Text-Editor oder dem Termiplaner geladen.
3.9.2.2 UNDELETE.DAT
Die Wiederherstellungs-Datei wird verwendet, um alle Zeichen oder Blöcke, die in den Anwendungen gelöscht werden zu speichern. Sie besteht aus einer Anzahl von Datenblöcken. Jeder Block stellt eine Gruppe von Zeichen dar, die mit einem Befehl gelöscht wurden. Das Format eines Blocks ist wie folgt:
<DATA> <00H> <DIR>
<DATA> sind die Bytes die gelöscht wurden. Wenn ein Datenblock gelöscht wird, der Zeilenumbrüche beinhaltet, so werden diese als <0DH>, und nicht <0DH><0AH> gespeichert.
Das Byte 00H wird verwendet um die Länge des gelöschten Blocks zu ermitteln.
<DIR> ist ein Ein-Byte Code das angibt in welche Richtung gelöscht wurde. Wenn die Daten nach links gelöscht wurden (z.B. mit der Korrektur-Taste), dann enthält dieses Byte 00H. Wenn die Daten nach rechts gelöscht wurden (z.B. mit Entf), dann ist dieses Byte 01H.
Die höchste Anzahl an Bytes, die die Datei UNDELETE.DAT enthalten kann ist 2000. Wenn die Datei mehr Bytes als diese Anzahl entält so wird sie ignoriert und beim Verlassen der Anwendung durch eine neue ersetzt.
Wenn die Datei UNDELETE.DAT nicht das richtige Format hat sind die Folgen unvorhersehbar. Warscheinlich werden die Daten in der Datei unlesbar.
3.9.2.3 PERMDATA.DAT
Das Format der System-Daten Datei ist wie folgt:
Bytes (in HEX) Funktion: 0 Nicht Null: Wiederherstellungspuffer bereit 1 Nicht Null: Wiederherstellungspuffer bei beenden speichern 2 Nicht Null: Klemmbrett bereit 3 Nicht Null: Klemmbrett bei beenden speichern 4..6 reserviert Rechenblatt: 7 Nicht Null: Rahmen an 8..56 Pfad und Name der zuletzt verwendeten Datei 057 0: zuletzt verwendete Datei laden, 0FFH: nein 058..05B dreistelliges, null-terminiertes Währung-Symbol 05C anfängliches Dezimaltrennzeichen "." (2Eh) oder "," (2Dh)=”,” 05D Drucker: Standard-Papierbreite 05E..060 reserviert Terminplaner: 061 Nicht Null: Rahmen an 062..0B0 Pfad und Name der zuletzt verwendeten Datei 0B1..0B4 reserviert Text-Editor: 0B5 Nicht Null: Rahmen an 0B6..104 Pfad und Name der zuletzt verwendeten Datei 105..106 oberste Zeile von Bildschirm 0 ist erste Zeile in Datei 107..108 aktuelle Cursor-Zeile, 0 ist erste Zeile 109..10A Cursor-Spalte in aktueller Zeile 10B rechter Rand 10C Nicht Null: Zeilenumbruch an 10D..10E reserviert Adressbuch: 10F Nicht Null: Rahmen an 110..15E Pfad und Name der zuletzt verwendeten Datei 15F..168 Vorwahl in ASCII, null-terminiert 169..16F reserviert Taschenrechner: 170 Nicht Null: Rahmen an 171..1BF reserviert 1C0 M1 Vorzeichen: wenn negativ dann Bit 7 gesetzt 1C1..1C2 M1 Exponent, Wort mit Vorzeichen, 0:1.000<=mant<2.000 1C3..1CA M1 Mantisse 1CB..1D5 Memory 2 1D6..1E0 Memory 3 1E1..1EB Memory 4 1EC..1F6 Memory 5 1F7 Format: 0=allgemein, 1=dezimal, 2=wissenschaftlich, 3=technisch 1F8 Stellen hinter dem Komma 1F9 Trennzeichen: 0=keines, sonst Trennzeichen 1FA Dezimaltrennzeichen: 0=”.”, sonst “,” Einstellungen: 1FB reserviert 1FC..24A Pfad und Name der Druckzieldatei 24B..24E reserviert 24F Druckziel, 0: parallel, 1: seriell, 2: Datei 250 Zeilen pro Druckseite 251 Länge des Drucker Setup-Codes 252..2D1 Drucker Setup-Codes, ASCII-Zeichen, z.B. Esc=1BH 2D2 Drucker-Code für Zeilenende 0 <CR> 1 <CR-LF> 2 <CR-LF-LF> 2D3 Anzahl Zeilen für oberen Rand 2D4 Anzahl Zeilen für unteren Rand 2D5 Zeichen-Indentierung für linken Rand 2D6 Baudrate 0 110 1 150 2 300 3 600 4 1200 5 2400 6 4800 7 9600 2D7 Parität 0 keine 1 ungerade 3 gerade 2D8 Datenbits, 2 7 Bits 3 8 Bits 2D9 Stop-Bits 0 1 Stopp Bit 1 2 Stopp Bits
Die Datei PERMDATA.DAT enthält derzeit 730 Byte.
3.10 Funktionen der Anwendungsumgebung
3.10.1 Verfügbare Funktionen
Folgende Dienste stehen in allen ROM-Versionen zur Verfügung:
Dienst Funktion 00H Versionsnummer (der ROMs) lesen 01H Zeileneditor 02H aktuelle Anwendung ermitteln 03H reserviert für Sonderfunktionen . . 08H Bildschirm speichern/wiederherstellen 09H Rahmen zeichnen . . 0FH Menü-Steuerung 10H Rahmenfläche berechnen . . 12H eingerahmte Meldungen . 14H eingerahmte Fehlermeldungen
3.10.2 Dataillierte Beschreibung der Funktionen
Wo Koordinaten in 16-Bit Registern angegeben werden (z.B. obere linke Ecke, untere rechte Ecke), ist das höhere Byte die y-Koordinate, und das untere Byte die x-Koordinate.
Bei allen Routinen zum zeichnen von Rahmen (einschließlich Menüs und Hilfen), wenn der Rahmen größer als die tatsächliche Bildschirmgröße ist, so werden die Zeichen falsch dargestellt.
Fn 00H Versionsnummer (der ROMs) lesen
Parameter: AH 00H Rückgabe: DS:DX Versionsnummer (Null-terminierte Zeichenkette)
Fn 01H Zeileneditor
Parameter: DS:SI Zeiger auf Steuerungsstruktur Rückgabe: AX das Zeichen mit dem die Eingabe beendet wurde. Beschreibung: Bearbeitung einer Textzeile. Der Text kann eingerahmt sein (oder nicht), und der Text kann länger sein als die Bildschirmbreite. Scroll-Ränder stehen an jedem Ende der Zeile bereit. Die Steuerungsstruktur ist wie folgt: ep_targ dw ? ;FAR Zeiger auf die zu bearbeitende Zeichenkette. Das Ergebnis ist dw ? ;ebnfalls hier zu finden. Alle Zeichenketten Null-terminiert. ep_pos dw ? ;Anfangsposition des Cursors (bei Null beginnend). ep_max dw ? ;maximale Länge der zu bearbeitenden Zeichenkette. ep_xpos db ? ;Bildschirmposition Spalte (bei Null beginnend). ep_ypos db ? ;Bildschirmposition Zeile (bei Null beginnend). ep_mode db ? ;wenn auf 2 eingestellt, so wir die Zeichenkette zu Beginn nicht ;gelöscht (z.B. Datei laden); wenn auf 0FFH eingestellt, so wird die ;Zeichenkette zuerst gelöscht (z.B. Bearbeitung einer Zelle in der ;Tabellenkalkulation). ep_hit dw ? ;ursprünglicher Tastendruck der zu verarbeiten ist, bevor der Tastendruck ;des Anwenders verarbeitet wird. Meistens benutzt um Zeichen vorzubearbeiten. ep_tit dw ? ;Rahmenüberschrift und Eingabeaufforderung in der Form: dw ? ; DB "Titel",0,"Eingabe: ",0,0 ep_exit dw ? ;eine Reihe von Tatstencodes (siehe unten), die es erlauben den Zeileneditor dw ? ;zu verlassen. ep_fn dw ? ;Adresse der Routine für die Tastaturabrage. dw ? ;Diese sollte einen 16-Bit Wert in AX ablegen. ep_wid db ? ;maximale Rahmen- oder Bildschirmgröße. ep_wind db ? ;Steht auf 0FFH für keinen Rahmen, auf 0 für einen einfachen Rahmen und ;auf 1 für einen doppelten Rahmen. ep_res dW ? ;reserviert dw ? ep_udel dw ? ;Adresse für die Routine für die Wiederherstellung. dw ? ;Diese Routine wird jedes mal aufgerufen wenn ein Zeichen gelöscht wird. ;Wenn nicht benötigt, verwenden sie eine Dummy-Routine (ret far). ;DS:BX zeigt auf den gelöschten Text. AH ist 0 für links löschen, ;und 1 für rechts löschen. ;Vermeiden sie es Segmente zu wechseln.
Anmerkungen:
1. Der Zielpuffer sollte mindestens "max"+1 lang sein, um die Null-Terminaton zu beinhalten. 2. Falls sie einen Text vorgeben wollen, schreiben sie ihn in den Zielpuffer, null-terminiert. 3. Die Reihe von Beeindigungs-Codes besteht aus 16-Bit "Tasten". Das obere Nibbel ist bei den normalen 256 Zeichen gleich Null, aber für Steuerungstasten wie Start, Ende, u.s.w. ist es 1. 4. TASTENCODES: normale ASCII-Zeichen, dargestellt als AL=ASCII-Code, AH=0. Zum Beispiel "A" ist 0041H. Erweiterte Tastencodes werden als AL=Scancode, AH=1 (z.B. linke Cursortaste=0148H) dargestellt. Spezielle (DIP-spezifische) Tastencodes werden als AL=code, AH=2/3 dargestellt. Z.B. bevor sie wiederhergestellte Zeichen senden (immer eingefügt, kein ^ verarbeitet) senden sie 0201H, am Ende der Wiederhergestellten Zeichen senden sie 0202H. 5. Wenn sie einen Rahmen angeben, so werden beim Bearbeiten 2 Bytes von "wid" genommen. 6. Ähnlich, wenn sie eine Eingabeaufforderung angeben haben sie weniger Spielraum bei der Bearbeitung. 7. Doppelwort Zeiger und Adressen haben die niederwertige Adresse im höherwertigen Wort.
Fn 02H aktuelle Anwendung ermitteln
Parameter: DL Auf 0FFH eingestellt Rückgabe: aktuelle Anwendung wobei:
AL=0 keine Anwendung 1 Tabellenkalkulation 2 Terminplaner 3 Textverarbeitung 4 Adressbuch 5 Taschenrechner 6 Systemeinstellungen 7 Anwendungsmenü
Beschreibung: Ermittelt die aktuelle Anwendung. Dies wird meistens von einem Editor-Hook oder TSR-Programm benutzt.
Fn 03H reserviert für Sonderfunktionen
Es werden eine Reihe von „Hooks“ (Haken) in die Textverarbeitung bereit gestellt, dei es dem Anwender erlauben die Textverarbeitung von aussen zu steuern.
Es gibt 6 Editor-Hooks. Diese machen es möglich, dass eine Anwendung innerhalb der Textverarbeitung geladen werden kann, die zugang zu einer begrenzten Zahl von internen Funktionen hat, die den Text oder die Umgebung verändern können.
EDHO_GOTO Cursor bewegen EDHO_GET Cursor-Position ermitteln EDHO_REF Bildschirm auffrischen EDHO_LOC Position des Zeichens am Cursor ermitteln EDHO_INS Zeichenkette einfügen EDHO_DEL Zeichen löschen
EDHO_GOTO Cursor bewegen
Parameter: AL 00H CX Wiederholungszähler DX Art der Bewegung Rückgabe: AX Anzahl der bewegten Stellen
Anmerkung: Es gibt 6 Arten von Bewegung:
1 Zeichen 2 Wort 3 Zeile 4 Anfang/Ende Zeile 5 Anfang/Ende Absatz 6 Anfang/Ende Datei
Wenn der Wiederholungszähler negativ ist, so ist die Bewegung rückwärts.
EDHO_GET Cursor-Position ermitteln
Parameter: AL 01H Rückgabe: BX Spalte DX Zeile
Anmerkung: Gibt die aktuelle Cursor-Position an.
EDHO_REF Bildschirm auffrischen
Parameter: AL 02H BX Cursor Location Override DX Invalid Flag Override Rückgabe: keine.
Anmerkung: Cursor Override ist nur möglich, wenn sich der Cursor außerhalb des Scroll-Bereichs befindet, und erzwingt ein Auffrischen von der angebenen Stelle an:
0 Nichts tun 1 Auffrischen, unter Verwendung des oberen Scroll-Bereichs 2 Auffrischen, unter Verwendung der Mitte 3 Auffrischen, unter Verwendung des unteren Scroll-Bereichs
Invalid Flag Override besteht aus 5 Bits, die intern von der Textverarbeitung verwendet werden. Sie werden logisch „ODER“ mit allen Bits verknüpft, um festzulegen welche Art der Auffrischung durchgeführt wird:
0 Normalen Override 1 aktuelle Zeile auffrischen 2 aktuellen Absatz auffrischen 4 aktuellen Offset auffrischen 8 Prüfung innerhalb des Scroll-Bereichs 10H Rahmen/Rand auffrischen 20H Kompletter Neu-aufbau
EDHO_LOC Position des Zeichens am Cursor ermitteln
Parameter: AL 03H Rückgabe: ES:BX Adresse im Text
Anmerkung: Diese Funktion ermittelt die Adresse des Zeichens im Arbeitsspeicher.
EDHO_INS Zeichenkette einfügen
Parameter: AL 04H ES:BX Adresse der einzufügenden ASCIIZ-Zeichenkette. Rückgabe: AX 0 wenn erfolglos.
Anmerkung: Fügt Text an aktueller Cursor-Position ein, und setzt Cursor an Ende der Zeichenkette.
EDHO_DEL Zeichen löschen
Parameter: AL 05H CX Anzahl zu löschender Zeichen DX 0 verhindert, dass Zeichen in den Wiederherstellungspuffer geschrieben werden. Rückgabe: AX 0 wenn erfolglos
Anmerkung: Eine negative Zahl in CX simuliert die Korrekturtaste, eine positive die Löschtaste.
Fn 08H Bildschirm speichern/wiederherstellen
Parameter: AL Unterfunktionen (0-3) BH Bildschirmseite DS:SI Puffer zur speicherung des Bildschirms CX untere rechte Ecke des zu speichernden Bildschirmbereichs (inklusive) DX obere linke Ecke des zu speichernden Bildschirmbereichs (inklusive) Rückgabe: keine.
Beschreibung: Diese Funktion speichert oder stellt den durch CX und DX definierten Bildschirmbereich in dem durch DS:DI adressierten Puffer wieder her. (Der Portfolio verwendet auf seinem Bildschirm keine Attribut-Angaben). Die Unterfunktionen sind wie folgt:
00 Nur Zeichen speichern 01 Zeichen und Attribute speichern 02 Nur Zeichen Wiederherstellen 03 Zeichen und Attribute wiederherstellen
Fn 09H Rahmen zeichnen
Parameter: AL Art (0=einfach, 1=doppelt) BH Bildschirmseite CX untere rechte Ecke des Rahmens DX obere linke Ecke des Rahmens Rückgabe: keine.
Beschreibung: Diese Funktion zeichnet einen Rahmen an der angegeben Position des Bildschirms.
Fn 0FH Menüs
Parameter: AL Art ((0=einfach, 1=doppelt) BH Bildschirmseite CH zuletzt verwendete obere Zeile CL zuletzt gewählter Eintrag DX obere linke Ecke des Menüs DS:SI Menütext (doppelt null-terminiert) ES:DI Standardtexte ((doppelt null-terminiert) (Wenn DI FFFFH ist, dann gibt es keine Satndardtexte) Rückgabe: AX -1 wenn Esc gedrückt wurde oder AH obere Zeile AL gewählter Eintrag
Beschreibung: Zeichnet ein Menü an der durch DX angegebenen Position. CH definiert welcher Eintrag an oberste Stelle im Menü stehen soll, CL definiert in welcher Menüzeile der Cursor stehen soll (in Bezug auf den Menütext, die Überschrift nicht mitgezählt). Die erste Zeile im Menü ist die Überschrift und hat keinen entsprechenden Eintrag in den Standardtexten. Wenn keine Überschrift benötigt wird, kann sie auf 0 (Zeichen 0) gesetzt werden. Wenn Bits 3..7 von AL 0 sind, dann wird keine Tiefenprüfung durchgeführt. Wenn ein einfacher Rahmen gwählt wurde, zeichnet die Funktion einen leeren Rahmen (ohne Überschrift) und kehrt zurück. Andernfalls wird das Menü dargestellt, und wenn eine Auswahl erfolgt ist wird der Menürahmen einfach und die Steuerung wird dem Aufrufer wieder übergeben.
Fn 10H Berechnung der Rahmenfläche
Parameter: DX linke obere Ecke des Rahmens DS:SI Menütext (doppelt null-terminiert) ES:DI Standardtexte (doppelt null-terminiert) Rückgabe: AH Anzahl Einträge (inkl. Überschrift) AL Anzahl Einträge (inkl. Überschrift) BX Anzahl Bytes (Attribute ausgenommen) CX untere rechte Ecke des Rahmens
Beschreibung: Berechnet die Anzahl der benötigten Bytes um den Bildschirmbereich zu speichern. Beachten sie, dass davon ausgegangen wird, dass die maximale Breite die Menütextbreite + der längste Standardtext ist. Ferner wird DX bei diesem Aufruf vernichtet.
Fn 12H eingerahmte Meldungen
Parameter: BH Bildschirmseite DX obere linke Ecke des Rahmens CS:SI Meldungstext (doppelt null-terminiert) Rückgabe: keine.
Beschreibung: Zeigt den Text in CS:SI in einem doppelten Rahmen. Die erste Textzeile wird als Überschrift verwendet. Diese Funktion wird bei Informations-Meldungen wie laden, speichern u.s.w. verwendet.
Fn 14H eingerahmte Fehlermeldungen
Parameter: BH Bildschirmseite DX obere linke Ecke des Rahmens CX darf nicht Null sein CS:SI Fehlertext (doppelt null-terminiert) Rückgabe: keine.
Beschreibung: Zeigt den Text in CS:SI in einem doppelten Rahmen. Es gibt keine Überschrift. Es wird ein Piepton ausgegeben und auf einen Tastendruck gewartet. Der Bildschirm wird dann wiederhergestellt und die Steuerung an den Aufrufer zurückgegeben.
3.11 IBM PC ENTWICKLUNGSSYSTEM
Der Portfolio beinhaltet einige System-spezifische erweiterte BIOS Funktionen, auf die durch den Interrupt 61H zugegriffen wird, und eine Reihe von Funktionen für die Anwendungsumgebung auf die durch den Interrupt 60H zugegriffen wird. Wenn sie diese Funktionen, beim Entickweln auf einem standard IBM-PC, emulieren wollen, ist dies möglich indem sie die Programme I60.EXE und I61.EXE auf dem PC ausführen. Diese Programme bleiben als TSR installiert, was ihnen ermöglicht ganz einfach Benutzeranwendungen zu programmieren. Um eine Aufwärtskompatibilität zu gewährleisten (falls sie den Int 61H verwenden), stellen sie sicher, dass sie zuerst den Int 61H Fn 0H ausführen (siehe Abschnitt 3.10.1). Alle dokumentierten Int 60H Funktionen werden von der IBM-Version unterstützt.
Int 60H Funktionen die von der IBM-Version unterstützt werden:
Fn Nr Beschreibung unterstützt 0H Initialisierung ja 7H Kreditkartenspeicher formatieren nein 8H Größe des internen Laufwerks ermitteln ja 9H internes Laufwerk formatieren nein BH CCM-Anwesenheit prüfen nein DH Bildschirmgröße setzten/ermitteln ja EH Bildschirmtyp (txt, gfx) setzen/ermitteln ja FH Cursormodus setzen/ermitteln nein 10H Position des virtuellen Bildschirms setzen/ermitteln ja 11H virtuellen Bildschirm bewegen nein 12H Bildschirm auffrischen nein 15H Klangerzeugung ja 16H Melodietöne ja 17H Wählfunktion ja 18H Stummschaltung ja 19H Parameter der seriellen Schnittstelle ermitteln ja 1AH Peripheral ID lesen nein 1BH Peripheral ID setzen nein 1CH Peripheral I/O Daten festlegen nein 1EH Timertick-Geschwindigkeit setzen/ermitteln ja 1FH Bildschirmauffrischung durch Taste/Tick teilweise 20H Umleitung des Vektors von Interrupt 9H verhindern teilweise 24H Status des ROM-Bereichs lesen/setzen nein 26H Status der Spannungsversorgung lesen/setzen nein 28H Spracheinstellung lesen/setzen ja 2CH BIOS-Versionsnummer ermitteln ja 2DH Gerät ausschalten nein 2EH Statuszeile ein/ausblenden ja 30H Dateiübertragungsfunktion ja