DracOS

From Atariki

(Różnice między wersjami)
Jump to: navigation, search
Wersja z dnia 17:07, 30 gru 2005
KMK (Dyskusja | wkład)

← Previous diff
Aktualna wersja
Mono (Dyskusja | wkład)
(Blok DCB - lit.)
Linia 1: Linia 1:
-{{OS}}Odmiana [[XL OS]] przygotowana dla komputerów [[XL]] i [[XE]] wyposażonych w procesor [[65C816]] oraz (opcjonalnie) dodatkową [[pamięć liniowa|pamięć liniową]]. Za podstawę służył kod źrodłowy [[XL OS]] wersji BB 01.02, wprowadzono także większość modyfikacji z wersji BB 02.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 handlera magnetofonu - usunięta jest nawet możliwość bootowania z magnetofonu, a klawisz START ma zmienioną funkcję - oraz SELF TEST-u. Ich miejsce zajęły procedury systemowe.+{{OS}}Odmiana [[XL OS]] przygotowana dla komputerów [[XL]] i [[XE]] wyposażonych w [[procesor]] [[65C816]] oraz (opcjonalnie) dodatkową [[pamięć liniowa|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]].+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]].
-Szczegółowe informacje znajdują się [http://drac030.krap.pl/ tutaj]. Zob. też [[SIO]].+== 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:
 + 
 +<table border=1 cellpadding=5>
 +<tr><td><b>Adres</b></td><td><b>Etykieta</b></td><td><b>Wielkość</b></td><td><b>Znaczenie</b></td></tr>
 + 
 +<tr><td>$0300</td><td>DDEVIC</td><td>Bajt</td><td>Identyfikator urządzenia (zob. niżej).</td></tr>
 + 
 +<tr><td>$0301</td><td>DUNIT</td><td>Bajt</td><td>Numer urządzenia; w przypadku stacji dysków numer napędu.</td></tr>
 + 
 +<tr><td>$0302</td><td>DCMND</td><td>Bajt</td><td>Komenda dla urządzenia.</td></tr>
 + 
 +<tr><td>$0303</td><td>DSTATS</td><td>Bajt</td><td>Przed wywołaniem SIO należy ustawić tu rodzaj operacji ($40 odczyt, $80 zapis). Po powrocie z systemu znajduje się tu status operacji ([[kody błędów|kod błędu]]).</td></tr>
 + 
 +<tr><td>$0304</td><td>DBUFA</td><td>Dwa bajty</td><td>Adres bufora.</td></tr>
 + 
 +<tr><td>$0306</td><td>DTIMLO</td><td>Bajt</td><td>Czas oczekiwania - w sekundach - na pozytywną odpowiedź urządzenia.</td></tr>
 + 
 +<tr><td>$0307</td><td>DUNUSE</td><td>Bajt</td><td>Bajt nieużywany, zarezerwowany do przyszłych zastosowań.</td></tr>
 + 
 +<tr><td>$0308</td><td>DBYT</td><td>Dwa bajty</td><td>Wielkość bufora; musi być zgodna z wielkością transmitowanego bloku danych.</td></tr>
 + 
 +<tr><td>$030A</td><td>DAUX1</td><td>Bajt</td><td>Pierwszy bajt pomocniczy. W operacjach dyskowych młodszy bajt numeru sektora.</td></tr>
 + 
 +<tr><td>$030B</td><td>DAUX2</td><td>Bajt</td><td>Drugi bajt pomocniczy. W operacjach dyskowych starszy bajt numeru sektora.</td></tr>
 + 
 +<tr><td>$030C</td><td>DAUXA</td><td>Bajt</td><td>Trzeci bajt pomocniczy. Młodszy bajt starszego słowa 32-bitowego numeru sektora.</td></tr>
 + 
 +<tr><td>$030D</td><td>DAUXB</td><td>Bajt</td><td>Czwarty bajt pomocniczy. Starszy bajt starszego słowa 32-bitowego numeru sektora.</td></tr>
 + 
 +<tr><td>$030E</td><td>DBFX1</td><td>Bajt</td><td>Najstarszy bajt adresu bufora.</td></tr>
 + 
 +<tr><td>$030F</td><td>DBFX2</td><td>Bajt</td><td>Bajt zarezerwowany.</td></tr>
 + 
 +</table>
 + 
 +===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ż==
 +* [http://drac030.krap.pl/ Szczegółowe informacje]
 +* [[SIO]]
[[Kategoria:Menu Główne]] [[Kategoria:Menu Główne]]
[[Kategoria:Oprogramowanie Atari 8-bit]] [[Kategoria:Oprogramowanie Atari 8-bit]]

Aktualna wersja

Odmiana XL OS przygotowana dla komputerów XL i XE wyposażonych w procesor 65C816 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.

Spis treści

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:

AdresEtykietaWielkośćZnaczenie
$0300DDEVICBajtIdentyfikator urządzenia (zob. niżej).
$0301DUNITBajtNumer urządzenia; w przypadku stacji dysków numer napędu.
$0302DCMNDBajtKomenda dla urządzenia.
$0303DSTATSBajtPrzed 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).
$0304DBUFADwa bajtyAdres bufora.
$0306DTIMLOBajtCzas oczekiwania - w sekundach - na pozytywną odpowiedź urządzenia.
$0307DUNUSEBajtBajt nieużywany, zarezerwowany do przyszłych zastosowań.
$0308DBYTDwa bajtyWielkość bufora; musi być zgodna z wielkością transmitowanego bloku danych.
$030ADAUX1BajtPierwszy bajt pomocniczy. W operacjach dyskowych młodszy bajt numeru sektora.
$030BDAUX2BajtDrugi bajt pomocniczy. W operacjach dyskowych starszy bajt numeru sektora.
$030CDAUXABajtTrzeci bajt pomocniczy. Młodszy bajt starszego słowa 32-bitowego numeru sektora.
$030DDAUXBBajtCzwarty bajt pomocniczy. Starszy bajt starszego słowa 32-bitowego numeru sektora.
$030EDBFX1BajtNajstarszy bajt adresu bufora.
$030FDBFX2BajtBajt 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ż

Personal tools