Strona główna » Ciekawe artykuły » Dyskietkowy POKE-r

Dyskietkowy POKE-r


Magnetofon Commodore 1531

Każdy posiadacz standardowego zestawu C64+1531, gdy chociaż raz zobaczy wieloczęściową grę dyskietkową, natychmiast zaczyna marzyć o kupnie stacji. I trudno się temu dziwić, gdyż specyficzny program użytkowy, jakim jest gra komputerowa w wersji specjalnie napisanej na dyskietkę, niemal z definicji zyskuje na jakości w stosunku do wersji taśmowej. Możliwość komunikowania się stacji dysków z komputerem w trakcie wykonywania programu owocuje grami wieloczęściowymi, często zajmującymi 2 do 4 dwustronnie nagranych dyskietek.

Stacja Commodore 1541

Przy powszechnym już używaniu przez programistów przerwań graficznych powstają prawdziwe cacka, wykorzystujące hardware do granic możliwości Kto widział w kolorach np. grę Last Ninja 2 — zgodzi się ze mną bez zastrzeżeń. Akurat tak się składa, że jej autorzy byli uprzejmi dać graczowi szansę grania w wersji „trainer”, co w praktyce oznacza nieograniczoną energię bohatera i czyni o wiele realniejszym pomyślne ukończenie gry.

Cartridge Final III

„Dyskietkowy POKE-r” przeznaczony jest dla graczy, którzy chcą mieć możliwość walki w grach, które bez wprowadzenia pewnych „ulepszeń” praktycznie rzecz biorąc są nie do ukończenia. Trzeba jednak sprawę postawić jasno, że jest to zabawa dla graczy znających podstawy asemblera, będących za pan brat z liczbami heksadecymalnymi oraz potrafiących robić użytek z monitora i asemblera, w które wyposażony jest cartridge typu FINAL, ale głównie i przede wszystkim z…własnej głowy. Czytelników chcących poznać te zagadnienia i pragnących stać się „włamywaczami” zapraszam do zapoznania się z cyklem moich artykułów, które są poświęcone tym problemom. Jego druk rozpoczął PMI „Komputer” w nr 5/90 i obejmuje metody i sposoby poszukiwania „nieśmiertelności”, nielimitowanej energii i amunicji, zatrzymywania upływu czasu itp. Druga część cyklu poświęcona jest dokonywaniu tych samych czynności dla gier dyskietkowych oraz, co najważniejsze, przedstawia program w asemblerze, napisany specjalnie do tego celu.

Wszystkim „włamywaczom” in spe radzę rozpoczynać od poszukiwań adresu startowego oraz „nieśmiertelności” dla gier taśmowych i stopniowo, w miarę nabywania doświadczenia, przechodzić do zagadnień trudniejszych Niezbędną do tego znajomość asemblera zdobędą przy tym mimochodem i bezboleśnie Ci zaś z Czytelników, którzy zanotowali już pewne sukcesy w odnajdowaniu adresów startowych oraz różnych „usprawnień” do gier taśmowych, mogą spróbować swoich sił przy pracy z grami dyskietkowymi. Samodzielne i pomyślne „rozpracowanie” gry dyskietkowej świadczyć będzie o przejściu „włamywacza” na wyższy stopień wtajemniczenia w sekrety C64 i VC1541.

W „Dyskietkowym POKE-rze” podawane będą informacje nie tylko co i dlaczego zmienić w programie, ale także omawiana i uzasadniana metoda postępowania, gdy nie była ona prezentowana we wspomnianym cyklu artykułów. Da to szansę wszystkim zainteresowanym zapoznania się z podejściem do problemu i sposobem myślenia przy tego typu przeróbkach.

Operować będziemy tylko mnemonikami, podłożenie pod nie odpowiednich wartości bajtów pozostawiając zainteresowanym Ta sama uwaga dotyczy obsługi monitora dyskowego, w który wyposażone są cartridge typu FINAL. Nie jest również celowe podawanie konkretnych wartości ścieżek i sektorów, których zawartość będzie modyfikowana, gdyż gry krążące po kraju występują często w kilku wersjach.

Odszukanie odpowiednich sektorów i ścieżek jest łatwe przy użyciu wspomnianego już programu, którego obsługa jest łatwa, a jedyny kłopot to konieczność „wklepania” sporej porcji linii z DATA, Na zakończenie jeszcze kilka słów przeznaczonych dla posiadaczy Atari.

Wszystkie moje uwagi, metody i sposoby dotyczące gier taśmowych zachowują w pełni aktualność. Procesory 6502 Atari i 6510-C64 mają identyczną listę rozkazów i różnią się jedynie nieistotnymi z punktu widzenia asemblera szczegółami hardware’owymi. Zasadnicza, praktyczna różnica to sposób monitorowania pamięci komputera. Dla C64 problem ten rozwiązuje bez reszty umieszczenie w expansion port cartridge’a typu FINAL. Nie znam sprzętu Atari i nie wiem, czy istnieje podobny cartridge przeznaczony specjalnie dla niego, o możliwościach porównywalnych z FINAL. Zawsze jednak można korzystać z monitora wgrywanego do pamięci komputera, chociaż, jak pamiętam z własnej praktyki, przy ZX Spectrum jest to dość kłopotliwe. Natomiast program do przeszukiwania dyskietek, niestety, musi być napisany zupełnie od nowa przez kogoś, kto dobrze zna systemy operacyjne stacji dysków i komputera. Jak znam brać komputerową, to właśnie Atari niebawem będą taki program posiadać.

Zapraszam do wspólnej pracy nad grami Defender of the Crown i Airborne Ranger.

DEFENDER OF THE CROWN

Ta nie najnowsza już (1987 r.), lecz ciągle atrakcyjna gra opiera się na świetnym pomyśle i bardzo ładnej grafice. Podstawowa trudność, jaka stoi przed Tobą na drodze do zjednoczenia Anglii, to zbyt mała liczebność garnizonu, którym dysponujesz na początku gry, wynosząca jedynie 20 żołnierzy. Zwiększenie ich liczby do 200 praktycznie wystarcza do pomyślnego ukończenia gry. Aby tego dokonać, uruchamiamy program Disk Searcher i poszukujemy na str. 2 dyskietki sekwencji bajtów odpowiadających następującym po sobie rozkazom:
LDA#$14
STA $0218,Y
Po określeniu ścieżki i sektora dokonujemy zmiany programu przy użyciu monitora dyskowego FINAL, zastępując LDA#$14 przez LDA#$C8. Jeżeli pomimo dziesięciokrotnego wzrostu liczebności garnizonu nie potrafisz ukończyć gry, to może jesteś, Czytelniku, lepszym „włamywaczem” niż żołnierzem. Aby tego dowieść, musisz odszukać lokalizację rozkazów:
LDA#$00
STA $0251
i następnie wgrać znaleziony sektor do pamięci C64, używając monitora dyskowego FINAL. Deasemblacja jego zawartości od adresu $CFEO począwszy ukazuje nam fragment programu:

CFEO JMPS23D1                              CFEA ASL$2220,X
CFE3 BRK                                            CFED ???
CFE4 BRK                                            CFEE LDA#$00
CFE5 BRK                                            CFFO STA $0251
CFE6 BRK                                            CFF3 STA $0252
CFE7 CLC                                            CFF6 STA $0253
CFE8 ???                                             CFF9 STA $0254
CFE9 ???                                             CFFC JSR $267B

który musisz zmienić następująco:

CFEO JMP$23D1                             CFEE LDA#$64
CFE3 LDA#$00                                  CFFO STA $0252
CFE5 STA $0251                               CFF3 JMP $19B5
CFE8 JMP $19C8                               CFF6 STA $0253
CFEB NOP                                         CFF9 STA $0254
CFEC NOP                                         CFFC JSR $267B
CFED NOP

i wgrać z powrotem do odszukanego sektora.

Zmiana ta powoduje, że przy każdej próbie kupna armii otrzymujesz gratis 100 rycerzy, co pozwala roznieść w proch i pył wszystkich przeciwników bez problemu. God save the king… Dla porządku podam, że poprawki do gry odszukane zostały metodą „Commando”, omówioną w moich artykułach. Bardziej ambitnym i dociekliwym Czytelnikom pozostawiam sprawdzenie, jakie potencjalne możliwości kryją komórki $0251, $0253 i $0254.

AIRBORNE RANGER

Ta wspaniała symulacja pola walki swoją atrakcyjnością wykracza daleko poza strzelaniny typu „Commando” i była już prezentowana na łamach Bajtka. O ile ukończenie pojedynczej misji na poziomie „easy” jest możliwe, to zaliczenie kampanii wojennej składającej się z 12 misji raczej wątpliwe, a ukończenie chociaż 1 misji na poziomie „hard” (najbardziej widowiskowym!) wręcz niemożliwe — przynajmniej dla przeciętnego gracza. Licznik błędów w grze symbolizują 3 kwadraty, usytuowane pionowo jeden nad drugim, w lewym górnym rogu ekranu. W miarę popełnianych błędów kolor kwadratów zmienia się na biały. Wypełnienie białym kolorem 3-go kwadratu kończy go. W tej sytuacji można założyć, ze musimy szukać licznika błędów liczącego do 3. Może to być licznik liczący „w górę” lub „w dół”, jednakże intuicyjnie bliższa jest pierwsza z możliwości. Tak więc w liczniku błędów powinna występować komórka pamięci, której zawartość wynosi #$00, a także prawdopodobnie obsługuje go rozkaz CMP#$03, zgodnie z najczęściej spotykanym rozwiązaniem „konstrukcyjnym” tego typu licznika błędów, np.:

LDA#$00             ; inicjalizacja licznika
STA $1123
INC $1123          ; wzrost zawartości komórki bazowej licznika
LDA $1123
CMP#$03            ; sprawdzenie czy osiągnęła ona 3
BEO $2455         ; jeżeli tak, to skok do procedury końca gry

W programie gry Airborne Ranger znajduje się kilkanaście rozkazów CMP#$03. Sprawdzając otoczenie każdego z nich szybko znajdujemy „podejrzaną” komórkę pamięci $2E27. Podejrzenia nasze opieramy na fakcie, że po przeszukaniu pamięci komputera na występowanie w niej sekwencji bajtów #$27, #$2E i deasemblacji programu od znalezionych adresów (pomniejszonych o 1) widać, że komórka $2E27 pracuje w kilku typowych konstrukcjach liczników. Sprawdzamy jej zawartość, trzykrotnie wgrywając i resetując grę przy zabielonych odpowiednio 0, 1 i 2 kwadratach. Szczęśliwie dla nas zawiera ona dla tych przypadków #$00, #$01 i #$02. Jesteśmy w domu! Teraz uruchamiamy program Disk Searcher i poszukujemy na 1 i 2 stronie dyskietki z roboczą kopią gry sekwencji bajtów #$27, #$2E skrzętnie notując znalezione ścieżki i sektory. Analiza programu oraz przeprowadzone próby pozwą łają ustalić, że uzyskujemy:

INC $2E27           ; odporność na broń palną po zmianie na LDA $2E27
LDA $2E27
CLC                        ; odporność na granaty po zmianie ADC#$01 na ADC#$00
ADC #$0
STA $2E27
LDA $2DFF, Y
CLC                        ; odporność na miny i miotacze płomieni po zmianie STA $2E27 na STA $2DFF.Y
STA $2E27
LDA #$04            ; odporność na wpadnięcie pod lód po zmianie STA $2E27 na JMP $80A8
STA $2E27
LDA #$05            ; odporność na utonięcie w jeziorze po zmianie STA $2E27 na JMP $2DOE

Wprowadzenie tych zmian umożliwia pomyślne zakończenie kampanii wojennej nawet na poziomie „hard”. Zaawansowani „włamywacze” zapewne bez trudu odnajdą „wieczną” amunicję, granaty i pociski przeciwpancerne, ale chyba bardziej dla własnej satysfakcji, niż z potrzeby. Czy ktoś z Czytelników widzi przyjemność w grze polegającej na włączeniu „auto-fire” i trzymaniu joysticka pochylone go do przodu?! Wątpię. Na zakończenie daję wszystkim „włamywaczom” pod rozwagę fakt, że inicjująca licznik rozkazów sekwencja rozkazów LDA#$00 STA $2E27 jest nie do odszukania w programie gry dostępnym po RESET pamięci komputera. Można ją jednak znaleźć na dyskietce, co znaczy, że wykonywana jest ona w trakcie ładowania gry, skutecznie utrudniając zastosowanie wprost metody „Commando”.

Andrzej [Uran] Urbankowski

Artykuł z pisma: Top Secret nr 3, 2-3/1991

źródła zdjęć:
TS nr 3, 02-03/1991
http://www.c64power.com
Wikipedia