Programowanie stacji LDW Super 2000 i CA-2001: Różnice pomiędzy wersjami

Z Atariki
Przejdź do nawigacji Przejdź do wyszukiwania
SDP
Nie podano opisu zmian
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 26 sty 2007, 11:07

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).

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