Programowanie stacji LDW Super 2000 i CA-2001

From Atariki

(Różnice między wersjami)
Jump to: navigation, search
Wersja z dnia 22:15, 25 sty 2007
KMK (Dyskusja | wkład)
(SDP)
← Previous diff
Wersja z dnia 09:07, 26 sty 2007
KMK (Dyskusja | wkład)

Next diff →
Linia 1: Linia 1:
{{SDP}} {{SDP}}
-Używając komendy [[SIO]] "X" można przesyłać/wykonywać małe fragmenty własnych programów, pamiętając oczywiście, że w stacjach dysków [[LDW Super 2000]] znajduje się [[procesor]] z rodziny Z80, więc wszelkie programy muszą być zapisane w kodzie maszynowym tego właśnie procesora. Można przy tym skorzystać z wbudowanych w [[ROM]] funkcji. Nie ma oczywiście gwarancji niezmienności tej tabeli funkcji, ale jest duże tego prawdopodobieństwo.+Do stacji [[LDW Super 2000]] i [[CA-2001]] można przesyłać własne podprogramy i zlecać ich wykonanie, pamiętając oczywiście, że w tych stacjach dysków znajduje się [[procesor]] z rodziny Z80, więc wszelkie programy muszą być zapisane w kodzie maszynowym jego właśnie. Można przy tym skorzystać z wbudowanych w [[ROM]] funkcji. Nie ma oczywiście gwarancji niezmienności tej tabeli funkcji, ale jest duże tego prawdopodobieństwo.
 + 
 +== Od strony Atari ==
 +Do programowania stacji służy komenda [[SIO]] o kodzie $58 ("X"). Ma ona dwie postaci, pierwsza służy do przesłania programu, druga do uruchomienia go wraz z ewentualnym odebraniem wyników.
 + 
 +=== Przesyłanie programu ===
 +W pierwszym przypadku parametry [[DCB]] ustawia się tak, jak do każdego nadawania danych przez SIO:
 + 
 +* DDEVIC - wartość $31
 +* DUNIT - numer stacji
 +* DCMND - wartość $80 (zapis)
 +* DBUFA - adres, gdzie znajduje się kod do wysłania
 +* DTIMLO - timeout jak do zapisu sektora (8)
 +* DBYT - liczba bajtów do wysłania
 +* DAUX1 - wartość $00
 +* DAUX2 - wartość $01 (download)
 + 
 +Wywołanie JSIOINT ($E459) z takimi parametrami spowoduje wysłanie programu do stacji. W tej chwili na konsolce powinna zapalić się lampka BUSY.
 + 
 +=== Wykonywanie programu ===
 +Uruchomienie przesłanego kodu uzyskujemy tą samą komendą "X", tylko z nieco innymi parametrami.
 + 
 +* DSTATS powinien zawierać wartość $40, gdy uruchomiony kod prześle z powrotem do komputera jakieś wyniki, albo $00 gdy niczego nie przesyła.
 +* DBUFA to adres bufora na dane wynikowe,
 +* do DBYT trzeba wpisać ich spodziewaną ilość (w bajtach);
 +* wartość timeout (DTIMLO) też jest zależna od tego, co robi przesłany program i ile czasu mu to zajmuje - na ogół jednak timeout "8" (10,24 sek.) powinien wystarczyć dla większości zadań.
 +* DAUX1 - wartość $00
 +* DAUX2 - wartość $00 (execute)
 + 
 +Wywołanie JSIOINT spowoduje uruchomienie przez stację przesłanego kodu. Po zakończeniu procedury lampka BUSY na konsolce stacji powinna zgasnąć.
 + 
 +Ważny szczegół jest taki, że pomiędzy przesłaniem programu a jego wykonaniem nie można wysyłać do stacji żadnych innych rozkazów - gdy się to zrobi, stacja "zapomni" o kodzie załadowanym przez użytkownika i nie będzie można dokonać uruchomienia.
 + 
 +== Od strony stacji ==
Aby użyć danej funkcji nalezy jej numer załadować do rejestru C procesora, a następnie wywołać procedurę spod adresu $0004 (call). Rejestry, z których korzysta się przy wywołaniu/powrocie z funkcji znajdują się w nawiasach, z wyjątkiem funkcji 0C, która używa flagi przeniesienia (carry) procesora (CF). Aby użyć danej funkcji nalezy jej numer załadować do rejestru C procesora, a następnie wywołać procedurę spod adresu $0004 (call). Rejestry, z których korzysta się przy wywołaniu/powrocie z funkcji znajdują się w nawiasach, z wyjątkiem funkcji 0C, która używa flagi przeniesienia (carry) procesora (CF).

Wersja z dnia 09:07, 26 sty 2007

Do stacji LDW Super 2000 i CA-2001 można przesyłać własne podprogramy i zlecać ich wykonanie, pamiętając oczywiście, że w tych stacjach dysków znajduje się procesor z rodziny Z80, więc wszelkie programy muszą być zapisane w kodzie maszynowym jego właśnie. Można przy tym skorzystać z wbudowanych w ROM funkcji. Nie ma oczywiście gwarancji niezmienności tej tabeli funkcji, ale jest duże tego prawdopodobieństwo.

Spis treści

Od strony Atari

Do programowania stacji służy komenda SIO o kodzie $58 ("X"). Ma ona dwie postaci, pierwsza służy do przesłania programu, druga do uruchomienia go wraz z ewentualnym odebraniem wyników.

Przesyłanie programu

W pierwszym przypadku parametry DCB ustawia się tak, jak do każdego nadawania danych przez SIO:

  • DDEVIC - wartość $31
  • DUNIT - numer stacji
  • DCMND - wartość $80 (zapis)
  • DBUFA - adres, gdzie znajduje się kod do wysłania
  • DTIMLO - timeout jak do zapisu sektora (8)
  • DBYT - liczba bajtów do wysłania
  • DAUX1 - wartość $00
  • DAUX2 - wartość $01 (download)

Wywołanie JSIOINT ($E459) z takimi parametrami spowoduje wysłanie programu do stacji. W tej chwili na konsolce powinna zapalić się lampka BUSY.

Wykonywanie programu

Uruchomienie przesłanego kodu uzyskujemy tą samą komendą "X", tylko z nieco innymi parametrami.

  • DSTATS powinien zawierać wartość $40, gdy uruchomiony kod prześle z powrotem do komputera jakieś wyniki, albo $00 gdy niczego nie przesyła.
  • DBUFA to adres bufora na dane wynikowe,
  • do DBYT trzeba wpisać ich spodziewaną ilość (w bajtach);
  • wartość timeout (DTIMLO) też jest zależna od tego, co robi przesłany program i ile czasu mu to zajmuje - na ogół jednak timeout "8" (10,24 sek.) powinien wystarczyć dla większości zadań.
  • DAUX1 - wartość $00
  • DAUX2 - wartość $00 (execute)

Wywołanie JSIOINT spowoduje uruchomienie przez stację przesłanego kodu. Po zakończeniu procedury lampka BUSY na konsolce stacji powinna zgasnąć.

Ważny szczegół jest taki, że pomiędzy przesłaniem programu a jego wykonaniem nie można wysyłać do stacji żadnych innych rozkazów - gdy się to zrobi, stacja "zapomni" o kodzie załadowanym przez użytkownika i nie będzie można dokonać uruchomienia.

Od strony stacji

Aby użyć danej funkcji nalezy jej numer załadować do rejestru C procesora, a następnie wywołać procedurę spod adresu $0004 (call). Rejestry, z których korzysta się przy wywołaniu/powrocie z funkcji znajdują się w nawiasach, z wyjątkiem funkcji 0C, która używa flagi przeniesienia (carry) procesora (CF).

Poniżej lista funkcji (numery funkcji zapisane szesnastkowo):

00 - zwraca numer wersji ROM-u (DE)
01 - powrót głowicy
02 - ustawienie głowicy nad konkretną ścieżką (D); numer ścieżki musi być pomnożony przez dwa
03 - odczyt sektora (E) ze scieżki (D)
04 - zapis sektora (E) na scieżce (D)
05 - odbiór bajtu (transmisja szeregowa) (C)
06 - wysłanie bajtu (A)
07 - odbiór rekordu o długości (B) pod adres (DE)
08 - wysłanie rekordu o długości (B) spod adresu (DE)
09 - konwersja cyfry do formatu odpowiedniego dla wyswietlacza (A) do (A)
0A - konwersja dwucyfrowa decymalna (A) do (DE)
0B - konwersja dwucyfrowa heksadecymalna (A) do (DE)
0C - włączenie (CF=1) lub wyłączenie (CF=0) silnika
0D - aktualizacja statusu przełączników i zmiany dysku.
0E - zwraca adres bieżącego bufora (BC)
0F - zwraca adres flagi typu kontrolera (IX)
10 - wytworzenie dźwięku na linii audio
11 - aktualizacja wyświetlacza
12 - zwraca adresy rejestrów (odczyt/zapis) kontrolera (BC i DE)
13 - ustawienie gęstości zapisu w zależności od trybu
14 - zwraca adresy statusu i bieżącej ścieżki (DE i IX); numer ścieżki musi być pomnożony przez dwa

Personal tools