Start | Super Packer | Atari Graphics Studio | Graph2Font | Mads | MadPascal | Atari Zines | YouTube http://madteam.atari8.info  
MEMBERS
PRODUCTIONS
S C E N E
G A M E S
T O O L S
V B X E
GRAPHICS
WORK IN PROGRESS
Bubble Shooter
HARDWARE
Snes2Joy / Pad4Aatari / TOM rev2
Sio2SD / Pajero
Sio2SD / Rocky
Stereo / Pajero
GTIA / Psychol
ANTIC + VBXE test
ARTICLES / MAGAZINES
DEMO EFFECTS
LINKS
   

Lizard
Własne procedury SIO pod SDX
Syzygy #8

Dzisiaj, zamiast kolejnych zachwytów nad Spartą, opiszę jak wykorzystać jedną z możliwości tegoż DOSu.

Wielu zastanawia się dlaczego stacje TOMS nie działają w szybkiej transmisji pod Spartą. Jest kilka programów, które w teorii miały ten stan zmienić, lecz tylko jeden z nich sprawdza się w praktyce. Nie przedstawię tu własnej procedury SIO, lecz opiszę jak podłączyć takową do systemu Sparty.

Rzecz jest bardzo prosta, należy znać tylko kilka adresów i pamiętać o paru rzeczach, a przede wszystkim wiedzieć jak SDX komunikuje się z pamięcią masową. Od tego właśnie zacznę.

Aby dokonać niskopoziomowego odwołania do stacji dysków przez SIO Sparty należy ustawić DCB dokładnie tak samo jak dla wywołania SIO systemu operacyjnego, a następnie wykonać skok do JLSIO ($070C). Przy ustawianiu DCB nie jest konieczne wpisanie identyfikatora stacji ($31)do DDEVIC ($0300). O ile procedura SIO z modułu Sparty nie zwraca uwagi na ten rejestr, to nigdy nie wiadomo, czy przypadkiem procedury doładowane przez użytkownika nie są czułe na zawartość DDEVIC. Dlatego też zaleca się ustawianie tego rejestru przed każdym odwołaniem do stacji dysków. Po powrocie z procedury, blok kontroli urządzeń ustawiony jest tak samo jak po powrocie z SIO systemu. Jak widać jedyną różnicą jest tylko adres wywołania. Ułatwia to pisanie programów, które dostosowywują się do obecnego w pamięci DOSu.

Własną procedurę SIO (jak i wszystkie pozostałe) najlepiej jest umieścić nad MEMLO ($02E7). Oprócz samego załadowania, należy jeszcze zarejestrować "ciało obce" w systemie. Dokona tego taki kawałek kodu:

SIOTBL = $0718

      LDX #$07      ; wyszukanie wolnego
FIND  LDA SIOTBL,X  ; miejsca w tablicy
      BEQ FOUND     ; wektorów procedur
      DEX           ; SIO Sparty
      DEX
      BPL FIND
      SEC           ; nie znaleziono
      RTS

FOUND LDA #>NEWSIO  ; dopisanie wektora
      STA SIOTBL,X  ; do tablicy
      LDA #<NEWSIO
      STA SIOTBL-1,X
      CLC
      RTS

SIOTBL to czteroelementowa tablica wektorów procedur SIO. Wolne wpisy zawierają zera. To tu procedura, m. in. obsługi ramdysku Sparty, umieszcza swój adres, dzięki czemu jest on widziany jako napęd fizyczny. Oczywiście nikt nie umieszcza podprogramów systemowych na stronie zerowej, tak więc dla skrócenia i przyspieszenia kodu można sprawdzać tylko starsze bajty adresów. Jak widać na powyższym przykładzie tablicę należy przeszukiwać od końca. Skok do JLSIO powoduje wyszukiwanie od początku, co powoduje, że procedura załadowana jako ostatnia wywołana będzie pierwsza. Jeśli podprogram stwierdzi, że wywołanie dotyczy właśnie jej, to informuje o tym system kasując na wyjściu znacznik C. Jeśli po powrocie C będzie ustawiony, to wywołana zostanie następna. Jeśli żadna z procedur nie podejmie się zadania, to następuje powrót do programu wywołującego ze statusem 138 (Timeout) w akumulatorze i ustawionym znacznikiem N. Ani DSTATS ($0303), ani rejestr Y nie są przy tym ustawiane!

Jeśli jednak znajdzie się podprogram "chętny" do wykonania żądanego zadania, to powinien on pobrać numer banku pamięci, którego dotyczy operacja z rejestru SYSCALL ($0787) i skoczyć do JEXT_ON w celu włączenia go. Włączenie właściwej pamięci jest konieczne, gdyż niektóre programy dla Sparty ładują się bezpośrednio do dodatkowej pamięci.

UWAGA: W SYSCALL umieszczony jest indeks tablicy masek bitowych służących do przełączania banków, a nie wartość PortB. Niech więc nikomu nie przyjdzie do głowy przepisywanie tego rejestru do PortB!

Następnie należy ustawić rzeczywisty napęd, na którym dokonana będzie operacja, traktując zawartość DUNIT ($0301) jako indeks w tablicy SIOIDX ($070F) zwiększony o jeden. Użycie i znaczenie SIOIDX jest dokładnie takie samo jak tablica pod tym samym adresem w DOSie II+/D, więc omówienie jej pozwolę sobie ominąć. Przykład powinien rozwiać wszelkie wątpliwości. Po odczynieniu wszystkich magicznych zaklęć, można już wykonać właściwą procedurę SIO.

Zanim wrócimy do programu głównego, należy dokonać jeszcze kilka operacji. Pierwszą rzeczą jest przywrócenie numeru urządzenia z jakim wywołane było SIO (ze względu na możliwość zmiany przypisania fizycznych napędów do dysków logicznych poleceniem SWAP Command Processora), drugą - przywrócenie banku pamięci sprzed wywołania (skok do JEXT_OFF - $07F4; procedury JEXT_ON i JEXT_OFF nie zmieniają rejestrów z rejestrem znaczników włącznie!), trzecią - wpisanie statusu do DSTATS i akumulatora (dla porządku dobrze jest też ustawić rejestr Y). Czwartą, i w końcu ostatnią, jest skasowanie znacznika C i powrót przez RTS.

Dla lepszego zrozumienia przedstawiam poniżej podpięcie systemowej procedury SIO pod Spartę. Można ją wykorzystać do np. uzyskania szybkiej transmisji w stacjach TOMS.

UWAGA: Jeśli zastosowaniem poniższego przykładu ma być właśnie turbo dla TOMSów, to należy załadować plik TURBO z romdysku stacji pod inny adres niż $0100, gdyż na stosie Sparta umieszcza procedurę inicjacji cartridge'y po resecie.

SIOIDX   = $070F
SYSCALL  = $0787
JEXT_ON  = $07F1
JEXT_OFF = $07F4

DUNIT    = $0301
JSIOINT  = $E459

      LDA SYSCALL    ; włączenie właści-
      JSR JEXT_ON    ; wego banku pam.
      LDA DUNIT      ; ustawienie rze-
      PHA            ; czywistej stacji
      TAX            ; dysków
      LDA SIOIDX-1,X
      STA DUNIT

      JSR JSIOINT    ; nasza procedura
                     ; zamiast JSIOINT można wstawić
                     ; dowolny adres

      PLA            ; przywrócenie
      STA DUNIT      ; numeru napędu

      JSR JEXT_OFF   ; wyłączenie pamięci
      TYA            ; status do A
      CLC            ; ok, zrobione
      RTS

Gotowy program instalujący szybką transmisję ze stacjami TOMS wraz ze źródłem znajdziecie na dysku. Ponieważ nakładka przeznaczona jest tylko i wyłącznie pod SpartaDOS X, to w związku z tym została napisana w składni Fast Assemblera autorstwa marka Goderskiego. Wersję demo tego asemblera wraz z dokładną instrukcją oraz programami przykładowymi znajdziecie na dysku. Fast Assembler działa tylko pod SDX, więc jeśli ktoś nie ma tego DOSu, to nic mu po nim. Po pełną wersję tego programu zgłaszajcie się do autora.

Lizard

 

madteam.atari8.info © MadTeam, hosted: www.atari8.info