DracOS

Z Atariki mirror
Przejdź do nawigacjiPrzejdź do wyszukiwania

Systemy operacyjne:
8-bit:
Altirra OS
Atari OS
CP/M
DracOS
OS++
QMEG OS
Turbo-816 OS
XL OS

16/32-bit:
TOS
MultiTOS
FreeMiNT
MagiC
Minix

Odmiana XL OS przygotowana dla komputerów XL i XE wyposażonych w procesor65C816 oraz (opcjonalnie) dodatkową pamięć liniową. Za podstawę służył kod źródłowy XL OS wersji BB 1.02, wprowadzono także większość modyfikacji z wersji BB 2.03 (późniejszej), oraz sporo własnych rozszerzeń, m.in. obsługę przerwań trybu natywnego, inicjowanie i alokację pamięci w obszarze $010000-$FFFFFF, szybkie procedury SIO, bootmenu itp. Brak jest za to SELF TEST-u oraz handlera magnetofonu - usunięta jest nawet możliwość bootowania z magnetofonu, a klawisz START ma zmienioną funkcję. Ich miejsce zajęły procedury systemowe. Autorem tej wersji XL OS jest KMK. Istnieje - ciągle w dość wczesnym stadium rozwoju - dedykowany temu systemowi interpreter BASIC-a, nazywający się MultiBASIC.

Rozszerzenie SIO

System zawiera rozszerzenie SIO pozwalające na transfery danych bezpośrednio do i z dodatkowej pamięci adresowalnej liniowo (tj. znajdującej się pod adresami wyższymi niż $FFFF) oraz 32-bitowe adresowanie sektorów.

Blok DCB

Blok DCB w tej wersji systemu jest rozszerzony do 16 bajtów i wygląda następująco:

Adres Etykieta Wielkość Znaczenie
$0300 DDEVIC Bajt Identyfikator urządzenia (zob. niżej).
$0301 DUNIT Bajt Numer urządzenia; w przypadku stacji dysków numer napędu.
$0302 DCMND Bajt Komenda dla urządzenia.
$0303 DSTATS Bajt Przed wywołaniem SIO należy ustawić tu rodzaj operacji ($40 odczyt, $80 zapis). Po powrocie z systemu znajduje się tu status operacji (kod błędu).
$0304 DBUFA Dwa bajty Adres bufora.
$0306 DTIMLO Bajt Czas oczekiwania - w sekundach - na pozytywną odpowiedź urządzenia.
$0307 DUNUSE Bajt Bajt nieużywany, zarezerwowany do przyszłych zastosowań.
$0308 DBYT Dwa bajty Wielkość bufora; musi być zgodna z wielkością transmitowanego bloku danych.
$030A DAUX1 Bajt Pierwszy bajt pomocniczy. W operacjach dyskowych młodszy bajt numeru sektora.
$030B DAUX2 Bajt Drugi bajt pomocniczy. W operacjach dyskowych starszy bajt numeru sektora.
$030C DAUXA Bajt Trzeci bajt pomocniczy. Młodszy bajt starszego słowa 32-bitowego numeru sektora.
$030D DAUXB Bajt Czwarty bajt pomocniczy. Starszy bajt starszego słowa 32-bitowego numeru sektora.
$030E DBFX1 Bajt Najstarszy bajt adresu bufora.
$030F DBFX2 Bajt Bajt zarezerwowany.

Sposób użycia

Dla utrzymania zgodności z dotychczasowym oprogramowaniem, a już zwłaszcza z dotychczasowymi sterownikami urządzeń podłączanych do szyny równoległej, wpisanie pod $000304/5/E 24-bitowego adresu nie da pożądanego wyniku; jeśliby bowiem urządzenie brało pod uwagę tylko 16 najmłodszych bitów adresu ignorując najstarszy bajt wpisany pod $00030E, wtedy - przy odczycie - dane zostałyby umieszczone nie tam, gdzie trzeba. Musi więc istnieć mechanizm, który zapobiega tego typu nieporozumieniom.

W tym celu SIO definiuje trzy nowe urządzenia wirtualne, o kodach jak następuje:

  • $B1 (= $31 + $80) - stacja dysków
  • $C0 (= $40 + $80) - drukarka
  • $D0 (= $50 + $80) - RS-232C

Wywołanie urządzenia z takim kodem w DDEVIC powiadamia sterownik SIO, że adres bufora w DCB jest 24-bitowy i że najstarszy bajt adresu jest pod $00030E (w przeciwnym wypadku SIO zakłada, że najstarszy bajt adresu to 0); oraz że numer sektora jest 32-bitowy i jest umieszczony w DAUX1/DAUX2/DAUXA/DAUXB (UWAGA: w przypadku szeregowych stacji dysków, SIO2IDE, SIO2PC itp. dwa najstarsze bajty tego numeru są ignorowane, ale powinny być wyzerowane dla kompatybilności). Poza tym działanie urządzeń wirtualnych jest identyczne, jak tradycyjnych (odpowiednio $31, $40 i $50), a kod urządzenia jest przed wysłaniem na port szeregowy przekładany na kod rzeczywisty.

Przyjmując komendę do wykonania SIO w żaden sposób nie sprawdza, czy dodatkowa pamięć w ogóle istnieje - zakłada się, że program sam stwierdzi jej istnienie (choćby za pomocą funkcji alokacji pamięci) przed próbą odczytu do niej danych.

Zobacz też