Lista komend SIO według kodów operacyjnych

From Atariki

(Różnice między wersjami)
Jump to: navigation, search
Wersja z dnia 19:39, 5 gru 2013
KMK (Dyskusja | wkład)

← Previous diff
Wersja z dnia 16:14, 14 lip 2015
Trub (Dyskusja | wkład)
(komendy 850 jak w liście wg funkcji)
Next diff →
Linia 10: Linia 10:
<td><p>Komenda aktywująca tzw. ''small mode'' wewnętrznej stacji dysków komputera Atari [[1450XLD]]. W tym trybie stacja "widzi" dyskietkę dwustronną jako dwie oddzielne dyskietki liczące po 1040 sektorów po 128 bajtów (= 2x130k).</p></td></tr> <td><p>Komenda aktywująca tzw. ''small mode'' wewnętrznej stacji dysków komputera Atari [[1450XLD]]. W tym trybie stacja "widzi" dyskietkę dwustronną jako dwie oddzielne dyskietki liczące po 1040 sektorów po 128 bajtów (= 2x130k).</p></td></tr>
-<tr><td rowspan = 2>$20 (&nbsp;)</td><td>DOWNLOAD</td><td>???</td><td>W (?)</td><td>???</td><td>Komenda wymieniana przez niektóre źródła. Szczegóły nieznane.</td></tr>+<tr><td rowspan = 3>$20 (&nbsp;)</td><td>DOWNLOAD</td><td>???</td><td>W (?)</td><td>???</td><td>Komenda wymieniana przez niektóre źródła. Szczegóły nieznane.</td></tr>
<tr> <td>AUTOMATIC FORMATTING</td><td>$31</td><td>R</td><td>0 bajtów</td><td>[[Speedy 1050]] w odpowiedni na tę komendę formatuje dyskietkę w zadanej gęstości (DAUX1 = $00 pojedyncza, $20 podwójna, $80 średnia) i, o ile konfiguracja stacji tego nie zabrania, zapisuje bootsektory i [[VTOC]] zgodne z [[DOS 2.0]] lub (w średniej gęstości) [[DOS 2.5]].</td></tr> <tr> <td>AUTOMATIC FORMATTING</td><td>$31</td><td>R</td><td>0 bajtów</td><td>[[Speedy 1050]] w odpowiedni na tę komendę formatuje dyskietkę w zadanej gęstości (DAUX1 = $00 pojedyncza, $20 podwójna, $80 średnia) i, o ile konfiguracja stacji tego nie zabrania, zapisuje bootsektory i [[VTOC]] zgodne z [[DOS 2.0]] lub (w średniej gęstości) [[DOS 2.5]].</td></tr>
 +
 +<tr><td>LOAD AND EXECUTE TEST</td><td>$50</td><td>W</td><td>Równa wielkości przesyłanego kodu</td>
 +<td><p>Komenda niepublikowana w oficjalnej dokumentacji. Powoduje wczytanie z komputera kodu programu, a następnie uruchomienie go przez interfejs [[850|Atari 850]]. W DAUX1 podawany jest rozmiar przesyłanego kodu. Ze względu na specyfikę procedury odbioru danych, kod powinien być wysyłany od ostatniego do pierwszego bajtu.</p></td></tr>
<tr><td rowspan = 2>$21 (!)</td><td>FORMAT DISK</td><td>$31</td><td>R</td><td>Równa wielkości sektora danych na dysku</td><td><p>Formatuje dyskietkę w wybranej uprzednio (komendami PERCOM) gęstości, lub w [[Formaty dyskietek|pojedynczej gęstości]] (90k), jeśli stacja nie jest konfigurowalna. Zwraca listę zawierającą numery wadliwych sektorów (kolejno LSB/MSB) wykrytych w czasie formatowania, zakończoną wartością $FFFF. Niektóre stacje zwracają tu pustą listę ($FFFF, a dalej same zera), nawet jeśli na dyskietce są wadliwe sektory: po prostu dyskietki nie są już tak drogie, jak pod koniec lat siedemdziesiątych XX wieku...</p> <tr><td rowspan = 2>$21 (!)</td><td>FORMAT DISK</td><td>$31</td><td>R</td><td>Równa wielkości sektora danych na dysku</td><td><p>Formatuje dyskietkę w wybranej uprzednio (komendami PERCOM) gęstości, lub w [[Formaty dyskietek|pojedynczej gęstości]] (90k), jeśli stacja nie jest konfigurowalna. Zwraca listę zawierającą numery wadliwych sektorów (kolejno LSB/MSB) wykrytych w czasie formatowania, zakończoną wartością $FFFF. Niektóre stacje zwracają tu pustą listę ($FFFF, a dalej same zera), nawet jeśli na dyskietce są wadliwe sektory: po prostu dyskietki nie są już tak drogie, jak pod koniec lat siedemdziesiątych XX wieku...</p>
Linia 105: Linia 108:
<p>Odpytanie bus mastera na okoliczność dysponowania takowym handlerem odbywa się za pomocą komendy TYPE 4 POLL. W DAUX1 ma się znajdować identyfikator urządzenia CIO, dla którego to urządzenia potrzebujemy handlera (np. dla magnetofonu $43, czyli "C"), w DAUX2 natomiast przesyła się numer wywoływanego urządzenia (np. dla "C1:" będzie to $01).</p></td></tr> <p>Odpytanie bus mastera na okoliczność dysponowania takowym handlerem odbywa się za pomocą komendy TYPE 4 POLL. W DAUX1 ma się znajdować identyfikator urządzenia CIO, dla którego to urządzenia potrzebujemy handlera (np. dla magnetofonu $43, czyli "C"), w DAUX2 natomiast przesyła się numer wywoływanego urządzenia (np. dla "C1:" będzie to $01).</p></td></tr>
-<tr><td rowspan = 2>$41 (A)</td><td>???</td><td>$50 (RS-232)</td><td>-</td><td>0 bajtów</td>+<tr><td rowspan = 2>$41 (A)</td><td>CONTROL</td><td>$50 (RS-232)</td><td>-</td><td>0 bajtów</td>
<td><p>Komenda aktywująca linie DTR, RTS i XMT (TX) wskazanego portu RS-232 interfejsu [[850|Atari 850]]. Odpowiada komendzie [[CIO]] XIO 34,#i,x,y,"Rn:", przy czym parametry ''x'' i ''y'' wysyłane są odpowiednio jako DAUX1 i DAUX2. Wykonanie komendy nie pociąga za sobą transmisji danych.</p></td></tr> <td><p>Komenda aktywująca linie DTR, RTS i XMT (TX) wskazanego portu RS-232 interfejsu [[850|Atari 850]]. Odpowiada komendzie [[CIO]] XIO 34,#i,x,y,"Rn:", przy czym parametry ''x'' i ''y'' wysyłane są odpowiednio jako DAUX1 i DAUX2. Wykonanie komendy nie pociąga za sobą transmisji danych.</p></td></tr>
Linia 115: Linia 118:
</td></tr> </td></tr>
-<tr><td rowspan = 2>$42 (B)</td><td>???</td><td>$50 (RS-232)</td><td>-</td><td>0 bajtów</td>+<tr><td rowspan = 2>$42 (B)</td><td>CONFIGURE</td><td>$50 (RS-232)</td><td>-</td><td>0 bajtów</td>
<td><p>Komenda ustawiająca różne parametry pracy (m.in. szybkość transmisji) wskazanego portu RS-232 interfejsu [[850|Atari 850]]. Odpowiada komendzie [[CIO]] XIO 36,#i,x,y,"Rn:", przy czym parametry ''x'' i ''y'' wysyłane są odpowiednio jako DAUX1 i DAUX2. Wykonanie komendy nie pociąga za sobą transmisji danych.</p></td></tr> <td><p>Komenda ustawiająca różne parametry pracy (m.in. szybkość transmisji) wskazanego portu RS-232 interfejsu [[850|Atari 850]]. Odpowiada komendzie [[CIO]] XIO 36,#i,x,y,"Rn:", przy czym parametry ''x'' i ''y'' wysyłane są odpowiednio jako DAUX1 i DAUX2. Wykonanie komendy nie pociąga za sobą transmisji danych.</p></td></tr>
Linia 192: Linia 195:
<tr><td>Dla interfejsu [[850|Atari 850]] wielkość bufora wynosi 64 bajty.</td></tr> <tr><td>Dla interfejsu [[850|Atari 850]] wielkość bufora wynosi 64 bajty.</td></tr>
-<tr><td rowspan = 2>$58 (X)</td><td>???</td><td>$50 (RS-232)</td><td>R</td><td>9 bajtów</td>+<tr><td rowspan = 2>$58 (X)</td><td>STREAM</td><td>$50 (RS-232)</td><td>R</td><td>9 bajtów</td>
-<td><p>Interfejs [[850|Atari 850]] w odpowiedzi na tę komendę zwraca następującą sekwencję liczb: $A0, $A0, $0B, $A0, $A0, $A0, $0B, $A0, $78. Pierwsze cztery pary stanowią zapewne jakieś parametry czterech portów RS-232 modułu [[850]], ostatnia natomiast odnosi się do portu Centronics.</p></td></tr>+<td><p>Komenda uruchamiająca tryb równoległego wejścia/wyjścia (<i>concurrent I/O</i>). Interfejs [[850|Atari 850]] w odpowiedzi zwraca sekwencję liczb, według której handler urządzenia "R:" ustawia [[Rejestry_POKEY-a|rejestry układu POKEY]] (kolejno AUDF,AUDC 1-4 oraz AUDCTL). Przykładowa sekwencja dla szybkości transmisji 300bps jest następująca: $A0, $A0, $0B, $A0, $A0, $A0, $0B, $A0, $78. Komenda jest używana przez handler przy poleceniu [[CIO]] XIO 40,#i,0,0,"Rn:" (START CONCURRENT MODE I/O).</p></td></tr>
<tr> <td>DOWNLOAD/EXECUTE</td><td>$31</td><td>R/W</td><td>Różna</td><td>Komenda zaimplementowana w stacjach [[Indus GT]], [[LDW Super 2000]] i [[CA-2001]], pozwalająca na przesyłanie do stacji programów użytkownika i uruchamianie ich. Szczegóły: patrz [[Programowanie stacji LDW Super 2000 i CA-2001]].</td></tr> <tr> <td>DOWNLOAD/EXECUTE</td><td>$31</td><td>R/W</td><td>Różna</td><td>Komenda zaimplementowana w stacjach [[Indus GT]], [[LDW Super 2000]] i [[CA-2001]], pozwalająca na przesyłanie do stacji programów użytkownika i uruchamianie ich. Szczegóły: patrz [[Programowanie stacji LDW Super 2000 i CA-2001]].</td></tr>

Wersja z dnia 16:14, 14 lip 2015

Główny artykuł: SIO

KodNazwaUrządzenieR/WIlość danychOpis
$01 (-)SET LARGE MODE$31-0 bajtów

Komenda aktywująca tzw. large mode wewnętrznej stacji dysków komputera Atari 1450XLD. W tym trybie stacja "widzi" dyskietkę dwustronną jako logiczną całość liczącą 2080 sektorów po 128 bajtów (260k).

$02 (-)SET SMALL MODE

Komenda aktywująca tzw. small mode wewnętrznej stacji dysków komputera Atari 1450XLD. W tym trybie stacja "widzi" dyskietkę dwustronną jako dwie oddzielne dyskietki liczące po 1040 sektorów po 128 bajtów (= 2x130k).

$20 ( )DOWNLOAD???W (?)???Komenda wymieniana przez niektóre źródła. Szczegóły nieznane.
AUTOMATIC FORMATTING$31R0 bajtówSpeedy 1050 w odpowiedni na tę komendę formatuje dyskietkę w zadanej gęstości (DAUX1 = $00 pojedyncza, $20 podwójna, $80 średnia) i, o ile konfiguracja stacji tego nie zabrania, zapisuje bootsektory i VTOC zgodne z DOS 2.0 lub (w średniej gęstości) DOS 2.5.
LOAD AND EXECUTE TEST$50WRówna wielkości przesyłanego kodu

Komenda niepublikowana w oficjalnej dokumentacji. Powoduje wczytanie z komputera kodu programu, a następnie uruchomienie go przez interfejs Atari 850. W DAUX1 podawany jest rozmiar przesyłanego kodu. Ze względu na specyfikę procedury odbioru danych, kod powinien być wysyłany od ostatniego do pierwszego bajtu.

$21 (!)FORMAT DISK$31RRówna wielkości sektora danych na dysku

Formatuje dyskietkę w wybranej uprzednio (komendami PERCOM) gęstości, lub w pojedynczej gęstości (90k), jeśli stacja nie jest konfigurowalna. Zwraca listę zawierającą numery wadliwych sektorów (kolejno LSB/MSB) wykrytych w czasie formatowania, zakończoną wartością $FFFF. Niektóre stacje zwracają tu pustą listę ($FFFF, a dalej same zera), nawet jeśli na dyskietce są wadliwe sektory: po prostu dyskietki nie są już tak drogie, jak pod koniec lat siedemdziesiątych XX wieku...

Kontroler KMK/JŻ IDE nie rozpoznaje tej komendy dla bezpieczeństwa danych na dysku (do partycjonowania i "formatowania" dysku służy oddzielny program).

SEND RELOCATOR $50 (RS-232)RWg odpowiedzi na komendę POLL ($3F)

Jest to komenda uzupełniająca do opisanego niżej POLL ($3F). Powoduje przesłanie przez urządzenie programu odpowiedzialnego za załadowanie (komendą SEND HANDLER) i relokację właściwego handlera. Wszystkie parametry transmisji dla SEND RELOCATOR przesyłane są na komendę POLL ($3F). Program relokatora - po jego załadowaniu - uruchamia się od adresu DBUFA + 6. Przejmuje on na siebie wykonanie reszty operacji, a w wypadku niepowodzenia sygnalizuje błąd przez ustawienie bitu Carry.

Komendę SEND RELOCATOR rozpoznaje moduł Atari 850, a może dotyczyć też innych urządzeń, oprócz stacji dysków (gdzie kod operacyjny $21 oznacza formatowanie dyskietki).

$22 (")FORMAT MEDIUM$31R128 bajtówAnalogicznie do FORMAT DISK ($21), z tym że formatowanie zawsze przeprowadzane jest w gęstości średniej (130k). 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).

$23 (#)FORMAT DSDD$31R256 bajtówAnalogicznie do FORMAT DISK ($21), z tym że formatowanie zawsze przeprowadzane jest w gęstości podwójnej dwustronnej (360k). Komenda wprowadzona razem ze stacją Atari XF-551.

Kontroler KMK/JŻ IDE nie rozpoznaje tej komendy dla bezpieczeństwa danych na dysku (do partycjonowania i "formatowania" dysku służy oddzielny program).

FORMAT SKEWED$31RRówna wielkości sektora danych na dysku

Komenda formatowania z szybkim przeplotem w stacjach Indus GT, LDW Super 2000 oraz CA-2001 z załadowanym Synchromeshem.

Kod operacyjny jest taki sam, jak komendy formatowania w gęstości DSDD dla stacji XF551 oraz jednej z komend diagnostycznych w 1050.

DIAG1$31R/W128 bajtów

Komenda diagnostyczna stacji Atari 1050. Wymaga przesłania 128-bajtowego bloku danych, w którym dwa pierwsze bajty decydują o tym, co stacja będzie robić (DAUX1/2 są ignorowane):

  • $02 - test przejścia głowicy między ścieżkami
  • $03 - przesuw głowicy za pomocą silnika krokowego o jeden krok w przód lub w tył; o kierunku decyduje następny bajt, wartość dodatnia (np. $01) powoduje przesuw w przód - czyli w kierunku ścieżki 39 - a wartość ujemna (np. $FF) przesuw wstecz, czyli w kierunku ścieżki 0. "Krok" silnika krokowego w tym wypadku to połowa odległości między ścieżkami, żeby więc tą komendą przesunąć głowicę na sąsiednią ścieżkę, trzeba zrobić to dwa razy. Uwaga: możliwe jest cofnięcie głowicy wstecz od ścieżki 0 (na tzw. ścieżkę -1).
  • $04 - test zapisu i odczytu dyskietki; formatuje znajdującą się w stacji dyskietkę w średniej gęstości.
  • $05 - przesuw główicy do ścieżki o numerze podanym w następnym bajcie.

Jest to również komenda DRIVE DIAGNOSTIC IN wewnętrznej stacji Atari 1450XLD. Szczegóły działania nieznane, poza tym że ma zapisywać do stacji zawartość bufora o bliżej nieokreślonej zawartości.

UWAGA: kod operacyjny ($23) jest taki sam, jak kod komendy formatowania w stacji Atari XF-551 oraz LDW Super 2000 i CA-2001 z załadowanym Synchromeshem!

$24 ($)DIAG2$31R/W128 bajtów

Komenda diagnostyczna stacji 1050, służy do pomiaru prędkości obrotowej dyskietki. W zależności od wartości dwóch pierwszych bajtów przesłanego bloku danych ($00, $00 lub $00, $01) stacja przesyła czas jednego obrotu dyskietki lub wartość prędkości obrotowej w obrotach na minutę.

Jest to również komenda DRIVE DIAGNOSTIC OUT wewnętrznej stacji Atari 1450XLD. Szczegóły działania nieznane, poza tym że ma odczytywać ze stacji do 128-bajtowego bufora bliżej nieokreślone dane diagnostyczne.

$26 (&)SEND HANDLERWg parametrów ustawionych przez relokator przesłany przez SEND RELOCATOR ($21) lub wg odpowiedzi na komendę POLL BUS ($40)RWg parametrów ustawionych przez relokator (przesłany przez urządzenie lub rezydujący)

Komenda SEND HANDLER służy do załadowania z urządzenia kodu programu obsługi (handlera) tego urządzenia. Może ona działać różnie w zależności od tego, czy transmisja została zainicjowana przez komendę POLL ($3F) czy POLL BUS ($40).

Komenda POLL ($3F) oznacza starszy protokół transmisji, w którym format strumienia danych przesłanych przez SEND HANDLER zależny jest od programu relokatora załadowanego wcześniej komendą SEND RELOCATOR ($21) i uruchomionego przez komputer.

Komenda POLL BUS ($40) oznacza nowszy protokół transmisji. Format strumienia danych jest ustalony z góry, a relokator rezyduje w ROM-ie systemu operacyjnego komputera.

Po otrzymaniu pozytywnej odpowiedzi na POLL BUS ($40) komputer rozpoczyna ładowanie kolejnych, 128-bajtowych rekordów binarnych, w liczbie do 256 (czyli pojedynczy "handler" może mieć maximum 32k). Przesyłany strumień danych musi być w specjalnym formacie, który zapewnia relokowalność kodu, oraz zawiera podany explicite znacznik końca pliku - wystąpienie błędu przed napotkaniem tego znacznika powoduje przerwanie procedury z kodem błędu INCOMPLETE EXECUTION.

Ustawienia zmiennych DCB dla komendy SEND HANDLER wyglądają następująco:

  • DDEVIC - kod urządzenia przesłany przez urządzenie $4F na komendę POLL BUS.
  • DUNIT - zawsze $01
  • DCMND - $26 - SEND HANDLER
  • DSTATS - $40 - odczyt
  • DTIMLO - 30 sekund
  • DBYT - 128 bajtów
  • DAUX1 - numer kolejny rekordu danych
  • DAUX2 - zawsze 0
$3F (?)POLL$50 (RS-232)R12 bajtów

Komenda ta, zwana też TYPE 2 POLL, służy do zainicjowania transmisji mającej na celu automatyczne ściągnięcie z urządzenia i zainstalowanie odpowiedniego dlań programu obsługi (handlera). W odpowiedzi urządzenie przesyła 12 bajtów odpowiadających kolejnym wartościom, jakie należy ustawić w bloku DCB celem załadowania kodu wykonywalnego handlera. Jest to starszy protokół transmisji zaprojektowany dla komputerów serii 400 i 800.

W module Atari 850 odpowiedzią na komendę POLL są wartości, jakie trzeba wstawić do DCB celem wykonania komendy SEND RELOCATOR ($21).

W celu uniknięcia wielokrotnego załadowania tego samego programu obsługi urządzenie na komendę POLL ($3F) odpowiada tylko raz, potem wykonanie komendy jest zablokowane aż do wyłączenia zasilania.

SEND HIGH SPEED INDEX$31R1 bajtStacje kompatybilne z US Doubler w odpowiedzi na tę komendę przesyłają wartość rejestru POKEY-a służącą do ustawienia częstotliwości nośnej dla przyspieszonej transmisji.
$40 (@)POLL BUS$4F (bus master)R4 bajty

W komputerach serii XL oraz XE komendę tę system operacyjny przesyła do interfejsu szeregowo-równoległego przy każdym zimnym starcie; w pewnych warunkach - ale z nieco innymi parametrami - może też zostać wykonana po zainicjowaniu systemu. Jest to odpowiednik komendy POLL ($3F), jednak protokół transmisji handlera jest zunifikowany i nie wymaga od urządzenia przesyłania relokatora (uniwersalny relokator rezyduje w ROM-ie systemu operacyjnego). Analogicznie do POLL ($3F), komenda POLL BUS jest przeznaczona do zapoczątkowania transmisji mającej na celu automatyczne ściągnięcie z urządzenia i zainstalowanie odpowiedniego dlań programu obsługi (handlera). Zasadniczym adresatem jest tu moduł 1090 działający jako bus master.

Istnieje kilka odmian komendy POLL BUS różniących się parametrami przesyłanymi w DAUX1 i DAUX2:

  • TYPE 3 POLL: DAUX1 = 0 i DAUX2 = 0.
  • TYPE 4 POLL: zobacz niżej.
  • RESET POLL: DAUX1 = $4F i DAUX2 = $4F ("OO")
  • NULL POLL: DAUX1 = $4E i DAUX2 = $4E ("NN")

Przy zimnym starcie na początku system wysyła RESET POLL. Komenda ta powinna odblokować rozpoznawanie komendy TYPE 3 POLL we wszystkich podłączonych urządzeniach. Na RESET POLL urządzenia, oprócz potwierdzenia wykonania, nie przesyłają żadnej odpowiedzi, a komputer jej nie oczekuje.

Następnie system wysyła komendę TYPE 3 POLL. Pozytywna odpowiedź oznacza, że urządzenie nadesłało 4 bajty, z czego dwa pierwsze to ilość pamięci potrzebna do przeprowadzenia całości transmisji (musi to być parzysta wielkość). Jeśli jest to więcej niż dostępna ilość pamięci pomiędzy MEMLO a MEMTOP, system odpowiada przez NULL POLL (podobnie jak w wypadku RESET POLL, urządzenie przesyła tylko potwierdzenie wykonania), a następnie ponownie wysyła TYPE 3 POLL. W przypadku braku pamięci byłaby to pętla nieskończona, ale pojedyncze urządzenie na komendę TYPE 3 POLL może odpowiedzieć tylko raz - pętla jest więc przerywana błędem, który wystąpi po przetestowaniu wszystkich urządzeń zarządzanych przez bus mastera. Ponowna odpowiedź na TYPE 3 POLL jest możliwa dopiero po przesłaniu urządzeniu komendy RESET POLL, inaczej TYPE 3 POLL zostanie zignorowana.

Trzeci przysłany bajt to identyfikator urządzenia (dla DDEVIC), które odpowiedziało na komendę i z którym będzie prowadzona dalsza komunikacja.

Po stwierdzeniu poprawności odpowiedzi komputer dokonuje rezerwacji pamięci nad wartością MEMLO zaokrągloną w górę do najbliższej granicy słowa i próbuje dokonać odczytu z urządzenia, które się zgłosiło, 128 bajtów pod adres $03FD, przy użyciu innej "nietypowej" komendy, a mianowicie $26 - SEND HANDLER. Po załadowaniu i zainicjowaniu handlera pętla wraca do początku i wykonuje się cyklicznie aż do wystąpienia błędu - czyli do załadowania wszystkich handlerów będących w dyspozycji bus mastera.

Procedura ładowania handlera wywoływana jest po procedurze bootowania DOS-u, ale niezależnie od jej wyniku; z czego wniosek, że "handler" może spełniać funkcję zarówno dodatku do DOS-u, jak i zostać załadowany zamiast DOS-u.

Tą samą drogą można już po całkowitym uruchomieniu systemu, podczas pracy, załadować handler urządzenia konkretnie wskazanego. Robi to CIO przy każdorazowej próbie otwarcia pliku na urządzeniu, którego system nie zna (nie ma takiego wpisu w tablicy handlerów).

Odpytanie bus mastera na okoliczność dysponowania takowym handlerem odbywa się za pomocą komendy TYPE 4 POLL. W DAUX1 ma się znajdować identyfikator urządzenia CIO, dla którego to urządzenia potrzebujemy handlera (np. dla magnetofonu $43, czyli "C"), w DAUX2 natomiast przesyła się numer wywoływanego urządzenia (np. dla "C1:" będzie to $01).

$41 (A)CONTROL$50 (RS-232)-0 bajtów

Komenda aktywująca linie DTR, RTS i XMT (TX) wskazanego portu RS-232 interfejsu Atari 850. Odpowiada komendzie CIO XIO 34,#i,x,y,"Rn:", przy czym parametry x i y wysyłane są odpowiednio jako DAUX1 i DAUX2. Wykonanie komendy nie pociąga za sobą transmisji danych.

REGISTER COMMAND$31W3 bajtyW stacjach Speedy 1050 komenda powoduje zarejestrowanie komendy uzytkownika. Dane powinny zawierać kolejno:
  • kod komendy
  • młodszy bajt adresu w pamięci stacji, gdzie znajduje się podprogram obsługi
  • starszy bajt tego adresu

Jeśli dana komenda jest już jakoś przypisana, to przypisanie zostanie zmienione. Gdy adres ma wartość $0000, komenda zostanie wykasowana z pamięci stacji.

$42 (B)CONFIGURE$50 (RS-232)-0 bajtów

Komenda ustawiająca różne parametry pracy (m.in. szybkość transmisji) wskazanego portu RS-232 interfejsu Atari 850. Odpowiada komendzie CIO XIO 36,#i,x,y,"Rn:", przy czym parametry x i y wysyłane są odpowiednio jako DAUX1 i DAUX2. Wykonanie komendy nie pociąga za sobą transmisji danych.

GET COMMAND BUFFER$31R128 bajtów

W stacjach XFD601 i XFD602, zwraca historię ostatnich 32 wywołań na łączu szeregowym. Wszystkich wywołań - nie tylko do stacji. Każdy wpis zawiera 4 bajty - dokładnie te same, jakie są wysyłane do urządzenia zewnetrznego przez komputer, czyli: DDEVIC, DCMND, DAUX1, DAUX2.

$44 (D)CONFIGURE DISPLAY$31-0 bajtówKonfiguracja wyświetlacza stacji Speedy 1050. DAUX2 powinien być wyzerowany, bity DAUX1 mają znaczenie jak następuje (gdy = 1):
  • bit 7: wyświetlanie kodów błędów na wyświetlaczu stacji
  • bit 6: wyświetlanie numeru ścieżki w kodzie szesnastkowym
  • bit 5: formatowanie bez weryfikacji
  • bit 4: zablokowanie zapisu struktury logicznej dyskietki po komendzie $20
  • bit 3: niewyłączanie silnika po komendzie $51
  • bit 2: nieużywany
  • bit 1: nieużywany
  • bit 0: sygnał dźwiękowy w wypadku błędu
$47 (G)GO TO$5A (ATR 8000)-0 bajtówKomenda pozwala na wywoływanie funkcji zdefiniowanych w ROM-ie modułu ATR 8000 (q.v.).
$48 (H)HAPPY CONFIG$31-0 bajtówKonfiguracja stacji z rozszerzeniem Happy Warp. Szczegóły: patrz Happy Warp - Konfiguracja.
$49 (I)INDEX FORMATTING$31RZależnie od wybranej gęstościW stacjach TOMS Multi Drive komenda ta działa tak samo, jak zwykłe formatowanie ($21), z tym wyjątkiem, że do oznaczenia początku ścieżki stacja używa otworu indeksowego (normalnie w stacjach Atari ścieżka zaczyna się tam, gdzie akurat wypadnie). Służy to głównie do zabezpieczania programów przez tzw. synchroniczne ścieżki.
$4B (K)CONFIGURE DRIVE$31-0 bajtówKonfiguracja stacji Speedy 1050. DAUX2 powinien być wyzerowany, bity DAUX1 mają znaczenie jak następuje (gdy = 1):
  • bit 7: zapis i odczyt dyskietki bez buforowania (0 po zmianie dyskietki)
  • bit 6: zapis i odczyt ścieżki bez buforowania (0 po zmianie ścieżki)
  • bit 5: nieużywany
  • bit 4: nieużywany
  • bit 3: wyłączenie buforowania ścieżek
  • bit 2: wyłączenie weryfikacji dla komendy $57 (W)
  • bit 1: zapis sektora z pominięciem buforowania
  • bit 0: odczyt sektora z pominięciem buforowania
$4C (L)JUMP, NO ACKNOWLEDGE$31-0 bajtówW stacjach Speedy 1050 wywołanie wewnętrznej procedury ROM-u stacji spod adresu przekazanego w DAUX1/2 (młodszy/starszy). Potwierdzenie wykonania rozkazu musi przesłać wywoływany podprogram.
$4D (M)JUMP WITH ACKNOWLEDGE$31-0 bajtówW stacjach Speedy 1050 to samo, to $4C, ale potwierdzenie rozkazu jest przesyłane automatycznie.
MEDIA CAPACITY INFO$31R8 bajtówNowe wersje firmware Multi I/O (od v. 1.4 wzwyż) w odpowiedzi na tę komendę zwracają informację o pojemności wskazanego dysku SCSI w tym formacie.
$4E (N)READ PERCOM$31R12 bajtów (Blok PERCOM)Odczytuje z urządzenia dwunastobajtowy blok danych opisujący jego bieżącą konfigurację, tj. przede wszystkim format znajdującej się w stacji dyskietki.
$4F (O)WRITE PERCOM W

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ść. Przyjąwszy komendę stacja powinna natychmiast przestawić się na żądane ustawienia, o ile jest w stanie je zrealizować.

Jeśli zadanych ustawień nie da się zrealizować, stacja w teorii powinna odrzucić przesłany blok danych zgłaszając komputerowi błąd wykonania (co skutkuje kodem błędu nr 144). W praktyce wiele stacji stosuje uproszczoną procedurę przyjmując parametry najbliższe zdefiniowanym przez przesłany blok danych. Jednak to, że parametry są "najbliższe", nie oznacza, że muszą być w ogóle bliskie: np. zażądanie formatu 360 KB od stacji Top Drive 1050 spowoduje jej ustawienie się w DD (180k), bo to jest maximum, jakie stacja jest w stanie zrealizować. Komplikuje to zadanie programom formatującym, które w celu zapisania prawidłowego katalogu muszą sprawdzać, czy żądana od stacji pojemność dyskietki została rzeczywiście wybrana.

Po pomyślnym wykonaniu tej operacji komenda FORMAT DISK ($21) sformatuje dyskietkę zgodnie z zapisaną konfiguracją.

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 SECTOR$31 i $60WZależ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.
$51 (Q)READ SPIN$31R (?)? Komenda te występuje jako dyskowa na liście rozkazów SIO w dokumentacji sporządzonej przez Atari. Nie znam jednak stacji, która by na nie reagowała. Mogą to być komendy stacji 810, jakieś komendy diagnostyczne jej prototypu, albo komendy planowane, lecz nie zaimplementowane. Dostępna dokumentacja nie zawiera ich opisu.
$52 (R)READ SECTOR$31RZależ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 STATUSWszystkie oprócz magnetofonuRZależna od urządzeniaOdczytuje z urządzenia blok statusu i zapisuje go pod adresem wskazanym przez DBUFA. Blok statusu dla RS-232 ma wielkość 2 bajtów, dla drukarki i stacji dysków - 4. Typowo komenda ta służy to stwierdzenia, czy urządzenie jest gotowe do pracy. W przypadku magnetofonu obowiązuje założenie, że jest on zawsze podłączony i gotów, nie ma więc potrzeby sprawdzania jego statusu.
$54 (T)READ ADDRESS$31R (?)?

Komenda ta występuje jako dyskowa na liście rozkazów SIO w dokumentacji sporządzonej przez Atari. Może to być komenda stacji 810, jakaś komenda diagnostyczne jej prototypu, albo komenda planowane, lecz nigdy przez Atari nie zaimplementowane. Dostępna dokumentacja nie zawiera jej opisu.

Ze stacji innych producentów, komendę tę rozpoznają stacje XFD601 i XFD602. Po odebraniu tego rozkazu stacja zwraca tzw. adres pierwszego napotkanego sektora, w formie 6 bajtów: numer scieżki, numer strony, numer sektora, rozmiar sektora, 2 bajty CRC.

$55 (U)MOTOR ON$31-0 bajtów Komenda ta występuje jako dyskowa na liście rozkazów SIO w dokumentacji sporządzonej przez Atari. Nie znam jednak stacji, która by na nie reagowała. Mogą to być komendy stacji 810, jakieś komendy diagnostyczne jej prototypu, albo komendy planowane, lecz nie zaimplementowane. Dostępna dokumentacja nie zawiera ich opisu.
$56 (V)VERIFY SECTOR$31-0 bajtów

Stacja odczytuje sektor wskazany przez DAUX1/2 i zwraca komputerowi informację, czy da się on odczytać bez błędów. Dane zawarte w sektorze nie są transmitowane do komputera. Komenda ta występuje w dokumentacji SIO sporządzonej przez Atari, ale żadna ze stacji marki Atari jej nie rozpoznaje.

$57 (W)WRITE SECTORWszystkieWZależna od urządzenia i trybu pracy.To samo, co PUT SECTOR ($50). W przypadku stacji dysków zapis przeprowadzany jest z weryfikacją.
W przypadku drukarki długość bufora może wynosić 20, 29 albo 40 znaków (na ogół to ostatnie), a znaczenie DAUX2 jest jak następuje:
  • $4E (N) drukowanie normalne
  • $53 (S) druk obrócony o 90 stopni
  • $44 (D) druk normalny z podwójną szerokością znaków
Dla interfejsu Atari 850 wielkość bufora wynosi 64 bajty.
$58 (X)STREAM$50 (RS-232)R9 bajtów

Komenda uruchamiająca tryb równoległego wejścia/wyjścia (concurrent I/O). Interfejs Atari 850 w odpowiedzi zwraca sekwencję liczb, według której handler urządzenia "R:" ustawia rejestry układu POKEY (kolejno AUDF,AUDC 1-4 oraz AUDCTL). Przykładowa sekwencja dla szybkości transmisji 300bps jest następująca: $A0, $A0, $0B, $A0, $A0, $A0, $0B, $A0, $78. Komenda jest używana przez handler przy poleceniu CIO XIO 40,#i,0,0,"Rn:" (START CONCURRENT MODE I/O).

DOWNLOAD/EXECUTE$31R/WRóżnaKomenda zaimplementowana w stacjach Indus GT, LDW Super 2000 i CA-2001, pozwalająca na przesyłanie do stacji programów użytkownika i uruchamianie ich. Szczegóły: patrz Programowanie stacji LDW Super 2000 i CA-2001.
$60 (`)WRITE TRACK$31WLiczba sektorów na ścieżce razy liczba bajtów w sektorzeW stacjach Speedy 1050 zapis na dyskietkę całej ścieżki od numeru sektora wskazanego bajtami DAUX1/2.
$62 (b)READ TRACK$31RLiczba sektorów na ścieżce razy liczba bajtów w sektorzeW stacjach Speedy 1050 odczyt z dyskietki całej ścieżki od numeru sektora wskazanego bajtami DAUX1/2.
$66 (f)CUSTOM FORMAT$31W128 bajtówKomenda formatowania z zadanym przeplotem zaimplementowana w stacjach US Doubler. Wysyłane 128 bajtów określa:
  • w pierwszych 12 bajtach: zadaną gęstość, tak jak w komendzie WRITE PERCOM
  • następne 18 lub 26 bajtów to fizyczne numery sektorów na ścieżce w zadanej kolejności, licząc od 1.

Przykładowe przeploty podaje hasło Przeplot.

$68 (h)SIO LEN$31R2 bajtyW stacjach Speedy 1050 komenda powoduje przesłanie dwóch bajtów określających wielkość procedury SIO, którą mozna od stacji uzyskać komendą $69.
$69 (i)SEND SIO$31RWynik komendy $68W stacjach Speedy 1050 komenda powoduje przesłanie programu szybkiej transmisji SIO. Bajty DBYT powinny być ustawione na wartość zwróconą przez komendę $68. DAUX1/2 to adres w pamięci Atari, gdzie procedura ma zostać załadowana (stacja dokonuje relokacji kodu pod ten adres przed wysłaniem go do komputera).
$B0 (-)???$31??Wewnętrzna komenda sterownika wbudowanej stacji dysków komputera 1450XLD. Szczegóły nieznane.
$B1 (-)???$31??Wewnętrzna komenda sterownika wbudowanej stacji dysków komputera 1450XLD. Szczegóły nieznane.
$ECIDENTIFY DRIVE$31R512 bajtówW KMK/JŻ IDE komenda powoduje odczytanie bloku identyfikacyjnego napędu IDE, na którym założona jest wskazana partycja, i wpisanie go do bufora wskazanego przez DBUFA. Kolejność bajtów w tym bloku jest odwrotna od normalnej, tzn. wszystkie pary bajtów należy zamienić miejscami przed odczytaniem danych z tego bufora - dotyczy to również informacji tekstowej.
Personal tools