Programowanie stacji LDW Super 2000 i CA-2001
From Atariki
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