SIO

From Atariki

(Różnice między wersjami)
Jump to: navigation, search
Wersja z dnia 23:27, 8 gru 2004
KMK (Dyskusja | wkład)

← Previous diff
Wersja z dnia 23:39, 8 gru 2004
KMK (Dyskusja | wkład)

Next diff →
Linia 37: Linia 37:
<table border=1 cellpadding=5> <table border=1 cellpadding=5>
<tr><td>Kod</td><td>Nazwa</td><td>Urządzenie</td><td>R/W</td><td>Ilość danych</td><td>Opis</td></tr> <tr><td>Kod</td><td>Nazwa</td><td>Urządzenie</td><td>R/W</td><td>Ilość danych</td><td>Opis</td></tr>
-<tr><td>$21 (!)</td><td>FORMAT DISK</td><td>$31 (stacja dysków)</td><td>R</td><td>128 B</td><td>Formatuje dyskietkę w wybranej uprzednio (komendami PERCOM) gęstości, lub w [[Formaty dyskietek|pojedynczej gęstości]], jeśli stacja nie jest konfigurowalna. Zwraca listę zawierającą do 62 numerów wadliwych sektorów wykrytych w czasie formatowania, zakończoną wartością $FFFF.</td></tr>+<tr><td>$21 (!)</td><td>FORMAT DISK</td><td>$31 (stacja dysków)</td><td>R</td><td>128 B</td><td>Formatuje dyskietkę w wybranej uprzednio (komendami PERCOM) gęstości, lub w [[Formaty dyskietek|pojedynczej gęstości]], jeśli stacja nie jest konfigurowalna. Zwraca listę zawierającą do 62 numerów wadliwych sektorów wykrytych w czasie formatowania, zakończoną wartością $FFFF. Kontroler KMK/JŻ IDE nie rozpoznaje tej komendy dla bezpieczeństwa danych na dysku (do partycjonowania i "formatowania" dysku służy oddzielny program).</td></tr>
-<tr><td>$22 (")</td><td>FORMAT MEDIUM</td><td>$31 (stacja dysków)</td><td>R</td><td>128 B</td><td>Analogicznie do FORMAT DISK, z tym że formatowanie zawsze przeprowadzane jest w [[Formaty dyskietek|gęstości średniej]]. Komenda wprowadzona razem ze stacją [[1050]]</td></tr>+<tr><td>$22 (")</td><td>FORMAT MEDIUM</td><td>$31 (stacja dysków)</td><td>R</td><td>128 B</td><td>Analogicznie do FORMAT DISK, z tym że formatowanie zawsze przeprowadzane jest w [[Formaty dyskietek|gęstości średniej]]. Komenda wprowadzona razem ze stacją [[1050]]. Kontroler KMK/JŻ IDE nie rozpoznaje tej komendy dla bezpieczeństwa danych na dysku (do partycjonowania i "formatowania" dysku służy oddzielny program).</td></tr>
 +<tr><td>$4E (N)</td><td>READ PERCOM</td><td>$31 (stacja dysków)</td><td>R</td><td>12 bajtów</td><td>Odczytuje z urządzenia dwunastobajtowy blok danych opisujący jego bieżącą konfigurację, tj. przede wszystkim format znajdującej się w stacji dyskietki. Komenda ta nie jest rozpoznawana przez standardowe stacje Atari, ale jest zaimplementowana we wszystkich rozszerzeniach oraz stacjach innych producentów.</td></tr>
 +<tr><td>$4F (O)</td><td>WRITE PERCOM</td><td>$31 (stacja dysków)</td><td>W</td><td>12 bajtów</td><td>Zapisuje do urządzenia dwanaście bajtów opisujących żądaną konfigurację, tj. liczbę ścieżek, stron dyskietki, sektorów na ścieżkę, wielkość sektora, gęstość. Po pomyślnym wykonaniu tej operacji komenda FORMAT DISK ($21) sformatuje dykietkę zgodnie z zapisaną konfiguracją. Komenda ta nie jest rozpoznawana przez standardowe stacje Atari, ale jest zaimplementowana we wszystkich rozszerzeniach oraz stacjach innych producentów. Kontroler KMK/JŻ IDE nie rozpoznaje tej komendy dla bezpieczeństwa danych na dysku (do definiowania wielkości partycji służy oddzielny program).</td></tr>
<tr><td>$50 (P)</td><td>PUT SECTOR</td><td>Wszystkie</td><td>W</td><td>Zależna od urządzenia i trybu pracy.</td><td>Zapisuje do urządzenia blok danych wskazany przez DBUFA, a zawierający DBYT bajtów. W przypadku stacji dysków jest to zapis bez weryfikacji.</td></tr> <tr><td>$50 (P)</td><td>PUT SECTOR</td><td>Wszystkie</td><td>W</td><td>Zależna od urządzenia i trybu pracy.</td><td>Zapisuje do urządzenia blok danych wskazany przez DBUFA, a zawierający DBYT bajtów. W przypadku stacji dysków jest to zapis bez weryfikacji.</td></tr>
<tr><td>$52 (R)</td><td>READ SECTOR</td><td>Wszystkie oprócz drukarki</td><td>R</td><td>Zależna od urządzenia i trybu pracy.</td><td>Odczytuje z urządzenia blok danych o wielkości DBYT bajtów i zapisuje go w pamięci pod adresem wskazanym przez DBUFA.</td></tr> <tr><td>$52 (R)</td><td>READ SECTOR</td><td>Wszystkie oprócz drukarki</td><td>R</td><td>Zależna od urządzenia i trybu pracy.</td><td>Odczytuje z urządzenia blok danych o wielkości DBYT bajtów i zapisuje go w pamięci pod adresem wskazanym przez DBUFA.</td></tr>

Wersja z dnia 23:39, 8 gru 2004

SIO - Serial Input/Output. W założeniach jest to rezydujący w ROM-ie podsystem niskopoziomowych procedur blokowego dostępu do urządzeń szeregowych.

W serii XL do podsystemu SIO dodano także niskopoziomową (blokową) obsługę urządzeń podłączanych do szyny równoległej (PBI), czyli tak zwanych nowych urządzeń.

Sposób użycia

Żądaną operację definiuje się ustawiwszy przedtem odpowiednie zmienne w bloku DCB (Device Control Block, $0300), a nastepnie wywołuje skokiem JSR pod JSIOINT $E459, co jest punktem wejściowym interfejsu szeregowo-równoległego. Przy powrocie rejestr Y zawiera wartość 1 w przypadku powodzenia, bądź ujemny kod błędu.

Struktura DCB:

AdresEtykietaWielkośćZnaczenie
$0300DDEVICBajtIdentyfikator urządzenia. W przypadku stacji dysków trzeba podać identyfikator zwiększony o 1!
$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 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.

Interfejs SIO znajdujący się w ROM-ie rozpoznaje cztery predefiniowane urządzenia:

  • $30: dyskową pamięć masową (stację dysków, twardy dysk)
  • $40: drukarkę
  • $50: interfejs RS-232
  • $60: magnetofon kasetowy

przy czym identyfikator urządzenia to górne 4 bity podanego kodu, dolne natomiast 4 bity stanowi indywidualny numer urządzenia (np. $31 - stacja dysków nr 1, $32 - stacja dysków nr 2 itd.).

Wykaz typowych komend:

KodNazwaUrządzenieR/WIlość danychOpis
$21 (!)FORMAT DISK$31 (stacja dysków)R128 BFormatuje dyskietkę w wybranej uprzednio (komendami PERCOM) gęstości, lub w pojedynczej gęstości, jeśli stacja nie jest konfigurowalna. Zwraca listę zawierającą do 62 numerów wadliwych sektorów wykrytych w czasie formatowania, zakończoną wartością $FFFF. Kontroler KMK/JŻ IDE nie rozpoznaje tej komendy dla bezpieczeństwa danych na dysku (do partycjonowania i "formatowania" dysku służy oddzielny program).
$22 (")FORMAT MEDIUM$31 (stacja dysków)R128 BAnalogicznie do FORMAT DISK, z tym że formatowanie zawsze przeprowadzane jest w gęstości średniej. Komenda wprowadzona razem ze stacją 1050. Kontroler KMK/JŻ IDE nie rozpoznaje tej komendy dla bezpieczeństwa danych na dysku (do partycjonowania i "formatowania" dysku służy oddzielny program).
$4E (N)READ PERCOM$31 (stacja dysków)R12 bajtówOdczytuje z urządzenia dwunastobajtowy blok danych opisujący jego bieżącą konfigurację, tj. przede wszystkim format znajdującej się w stacji dyskietki. Komenda ta nie jest rozpoznawana przez standardowe stacje Atari, ale jest zaimplementowana we wszystkich rozszerzeniach oraz stacjach innych producentów.
$4F (O)WRITE PERCOM$31 (stacja dysków)W12 bajtówZapisuje do urządzenia dwanaście bajtów opisujących żądaną konfigurację, tj. liczbę ścieżek, stron dyskietki, sektorów na ścieżkę, wielkość sektora, gęstość. Po pomyślnym wykonaniu tej operacji komenda FORMAT DISK ($21) sformatuje dykietkę zgodnie z zapisaną konfiguracją. Komenda ta nie jest rozpoznawana przez standardowe stacje Atari, ale jest zaimplementowana we wszystkich rozszerzeniach oraz stacjach innych producentów. Kontroler KMK/JŻ IDE nie rozpoznaje tej komendy dla bezpieczeństwa danych na dysku (do definiowania wielkości partycji służy oddzielny program).
$50 (P)PUT SECTORWszystkieWZależna od urządzenia i trybu pracy.Zapisuje do urządzenia blok danych wskazany przez DBUFA, a zawierający DBYT bajtów. W przypadku stacji dysków jest to zapis bez weryfikacji.
$52 (R)READ SECTORWszystkie oprócz drukarkiRZależna od urządzenia i trybu pracy.Odczytuje z urządzenia blok danych o wielkości DBYT bajtów i zapisuje go w pamięci pod adresem wskazanym przez DBUFA.
$53 (S)READ STATUSWszystkieR4 bajtyOdczytuje z urządzenia czterobajtowy blok statusu i zapisuje go pod adresem wskazanym przez DBUFA. Typowo komenda ta służy to stwierdzenia, czy urządzenie jest gotowe do pracy.
$57 (W)WRITE SECTORWszystkieWZależna od urządzenia i trybu pracy.To samo, co PUT SECTOR ($52). W przypadku stacji dysków zapis przeprowadzany jest z weryfikacją.
Personal tools