Powiększ

Action Replay – tajemnice cartridge’a cz. 2

Część 2 – Instrukcja Tak, ale nie dla wszystkich 🙂

Zaszokowani? Zapewne tak. To małe z wyglądu i niepozorne czarne pudełeczko – czyli nasz moduł – kryje w sobie tak ogromny potencjał 🙂 Pora zatem, aby „niecnie” wykorzystać te możliwości, i zaprzęgnąć te niewidoczne „konie mechaniczne” – do pracy…

Z poprzedniego odcinka, dowiedzieliście się, że możliwości modułu (praktycznie) nie zależą od jego wersji – mowa oczywiście o wykorzystaniu furtki pozostawionej nam przez konstruktorów Action’a. Która ukrywa się pod niepozorną nazwą Parameters… I wielu z Was zapewne spróbowało już dociec samemu, co też takiego robi ta opcja z menu frezerki.

PowiększNiestety instrukcja dołączana do polskich kopii, stwierdza lakonicznie – jedynie o możliwości kopiowania oryginałów taśmowych, zabezpieczonych (nagranych) systemem NOVALOAD – to takie zmyślne TURBO dla magnetofonu (nagłówek w normalu, a reszta już w specjalnym systemie TURBO).

Owszem dobra rzecz, ale przez te lata – spotkałem się tylko z paroma grami nagranymi w tym systemie (nawiasem mówiąc, przeszmuglowanymi z zachodu w latach 80-ych).

Po takim „wyczerpującym” omówieniu problemu, można się zniechęcić do dalszego czytania instrukcji – i słusznie… Bo jakość tłumaczenia przyprawia o ból głowy i przeróżne „kwiatki” tam zawarte świadczą jedynie o tłumaczeniu żywcem (bez stosownej wiedzy w tym temacie – konkretnie o C64). Pewnym ratunkiem może okazać się wówczas, załączony do archiwum z modułem (np. w przypadku Action Replay 6) plik tekstowy będący kopią oryginalnej instrukcji ar6pro.zip (rozmiar 22 kB).

Część 2 – Sterowanie modułem.

Nie będzie tego za wiele. To tylko kilka adresów, które po paru użyciach zapadną w pamięć…

Z grubsza możemy podzielić pamięć modułu na kilka banków. Same banki zaś to 4 obszary $8000-$9FFF z danymi (jakby patrzeć pod kątem C64). Które przechowują system operacyjny modułu, tzw. ROM – który z kolei dzieli się na pomniejsze procedury przekopiowywane potem w różne lokacje pamięci, gdyż część z nich wymaga stałej obecności w RAM-ie komputera. Oprócz banków TYLKO do odczytu (z ROM modułu) istnieje 1 bank RAM – którego zawartość modyfikuje sam moduł, poprzez swoje procedury np.: frezerkę czy TURBO dla dysku.

Banków mamy więc w sumie 5, przy czym ten ostatni to RAM. Każdy ma po 8kB pojemności i w przypadku pierwszych 4, zawierają wiele pomocnych procedur – które przy odrobinie wprawy możemy wykorzystywać do własnych potrzeb. Na początek, zajmijmy się zatem wykorzystaniem ostatniego banku. Gdyż poszczególne modele Action’a, różnią się trochę zawartością pamięci ROM i wywoływanie z nich funkcji, może nastręczyć nam początkowo sporo problemów.

Rzut oka do mapy pamięci C64 wystarcza, aby zorientować się, że komórką odpowiedzialną za przełączanie banków jest $DE00. Zakodujmy również sobie, iż jest ona umieszczona w obszarze I/O procesora, i jako taka może być tylko zapisana! Więc chcąc cokolwiek zmodyfikować z reguły będziemy wstawiali do komórki $01 (odpowiedzialnej za konfigurację pamięci C64) wartość $37.

Uff… tyle tytułem wstępu. Poniżej prezentuje wartości, które możemy wstawiać do $DE00, aby uzyskać zamierzony efekt. Wpisywanie innych może zaś doprowadzić do zawieszania się modułu lub komputera – więc raczej nie próbujcie tego robić, chyba że w celach edukacyjnych…

 

Wartość

Opis działania

$00

Włączenie banku 0, w obszar $8000 – $9FFF

$08

j/w ale banku 1

$10

j/w ale banku 2

$18

j/w ale banku 3

$20

Włączenie banku RAM, w obszar $8000 – $9FFF

$23

j/w ale bez zapisu do ram C64

$06

Wyłączenie modułu i obszaru I/O dla modułu

$0A

Wyłączenie modułu

Jeszcze garść wyjaśnień. Banki są podłączane ZAWSZE w obszar RAM $8000 – $9FFF komputera. Aby móc je odczytać/zapisać musimy wcześniej wpisać żądaną wartość do komórki $DE00 i po operacji na pamięci Action’a wstawić do niej KONIECZNIE $0A (czyli ustawić normalną konfigurację pamięci). Aby umożliwić dalszą poprawną pracę modułu. Dodatkowo ogranicza nas „dziwna” cecha tej pamięci.

Pamięć modułu, zachowuje się podobnie jak pamięć ROM tzn. zapis do niej powoduje zapisanie do leżącej pod spodem pamięci RAM. Nie ma jednak sytuacji bez wyjścia. Wpisując $23 otrzymujemy „czysty” ram Action’a – pod pewnymi warunkami:

– pamięć komodorka to teraz tylko RAM w adresach $0000-$0fff
– dostęp do obszaru I/O (czyli rejestry SID, CIA, VIC)
– ROM dla Basic’a i Kernal’a
– VIC nie widzi kopii generatora znaków w adresach $1000-$1FFF i $9000-$9FFF

a w zamian otrzymujemy zapis do ram’u Action’a, nie zapisujący nic do ram’u komputera.

Część 3 – Dobieramy się do pamięci

PowiększPrzerażające, nieprawdaż? Tylko na pierwszy rzut oka… Przyjrzyjcie się teraz stosownym przykładom, by okiełznać te pokręcone sposoby wykorzystywania pamięci Action Replay’a. Stosowne przykłady zebrane w jeden plik pamiec.zip.

 

 

Procedura READ

Kopiuje wskazany bank pamięci Action’a, do pamięci ram komputera w ten sam obszar.

Procedura WRITE

Kopiuje krótki program do pamięci modułu i tam go uruchamia (wciśnij spację), po czym wraca do pamięci komputera.

Powiększ

Na tym pragnę już zakończyć ten odcinek, gdyż w kolejnym zajmiemy się „poważniejszymi” sprawami. Szkoda, że nie zmieściłem się już z opisem, w jaki sposób pisać własne programy pod Action’a. Wynagrodzę to Wam jednak, już w przyszłym odcinku, a nawet pokażę COŚ co powinno Was zainteresować.

 


 

Podziękowania:
Po ukazaniu się pierwszego odcinka o programowaniu Action’a, otrzymałem ciekawy e-mail. Jego autorem był członek grupy Apidya ukrywający się pod pseudonimem Reiter. Otóż poinformował on mnie, że sam jest również autorem kilku „parametrów”. Po zapoznaniu się z nimi, postanowiłem podzielić się nimi również z Wami – Action parameter pack by Reiter.zip.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *