Miesięcznik Bajtek 1993 /5 KLAN ZX SPECTRUM



Krótka rozprawa z taśmą (cz. 3 - ostatnia) Jacek Trojański


Zgodnie z obietnicą, zajmiemy się teraz przystosowaniem gry do zapisywania plików na dyskietce.

Przeważnie zapisywany jest bieżący stan gry lub tabela najlepszych wyników.


Jako przykład niech nam posłuży TAUCETI II - gra stara ale dobrze napisana i często korzystająca z taśmy. Umożliwia ona zapamiętanie stanu gry oraz własnoręcznie zaprojektowanych pojazdów. Ładować z taśmy możemy właśnie stan gry projekty statków, a także kolejne poziomy (jest ich pięć)


Procedury obsługi znajdujemy dosyć szybko stosując opisane wcześniej metody.

Najprościej jest poszukać (za pomocą monitora) nazwy pliku nagrywanego, np."level...”


W ten sposób odnajdujemy tablicę


#89F0 : chr(3) 'Game File'

#8A01: chr(3) 'Ship Data'

#8A12. chr(3) 'level III '

#8A23: chr(3) 'Extra lev'


Pod adresem #8224 znajdujemy tablicę, służącą do dopisywania końcówek z numerem levelu:


#8224 : 'EXTR' #8228 : ' I '

#822C : ' II ' #8230 : ' III '

#8234 : ' IV ' #8238 : ' V '


Odpowiednia końcówka jest kopiowana pod adres #8A19, czyli po spacji za słowem "level“. Widać, że prócz wymiany procedur, będziemy musieli zmodyfikować tablicę z nazwami tak, by nie zawierały one wewnątrz spacji. Wpierw jednak zajmiemy się samymi procedurami. Po żmudnych poszukiwaniach odnajdujemy adresy' #89BE (LOAD) i #89B3 (SAVE).

Są to procedury niskiego poziomu, wspólne dla wszystkich operacji, jednak bardzo trudno je przystosować do współpracy z dyskiem. Szukamy więc wszystkich wywołań (rozkazów CALL 89BEh i CALL 89B3h. czyli ciągów #CD, #BE,. #89 i #CD, #B3, #89).

Następnie cofamy się, ustalając właściwy początek badanej procedury.

Ostatecznie otrzymujemy adresy #87C0 (LOAD) i #88FA (SAVE) Warto przeanalizować umieszczony tam kod w całości, jednak zostawiam to jako ćwiczenie dociekliwym czytelnikom.


Każda z tych procedur, poza ładowaniem lub nagrywaniem odpowiednich bloków, ma za zadanie rozróżnić. czy jest to level, projekt statku. czy stan gry. a następnie dobrać nazwę z omówionej wcześniej tabeli.

Ponadto wyświetlane są różne komunikaty. Porównajmy treść procedur z zamieszczonymi listingami. Dodatkowych wyjaśnień wymagają parametry wejściowe. Dla procedury LOAD:



level C=4, .B=4

ShipData C=2, B=2

GameFile C=9, B=0


Z tych wartości obliczany jest adres nazwy, W przypadku, gdy ładowany ma być poziom (level), akumulator zawiera jego numer.


Dla procedury SAVE występują tylko dwie wartości parametru: B = 2 dla ShipData

i B = O dla GameFile (poziomów przecież nie można zapisywać).


Najlepszym wyjściem będzie diasemblowanie bloku pamięci od #87C0 do #89B3 z zapisaniem na taśmę (lub dysk). Następnie zbędne linie zastępujemy tymi z listingów (obszary "wykropkowane" na wydrukach nie ulegają zmianie). Po kompilacji programu z listingu 1. nagrywamy go np. pod nazwą OVL1.BIN. Musimy jeszcze sprawdzić jaki adres otrzymała etykieta ROMON (przełączanie ROM-ów, wspólne dla obu procedur).

Adres ten przypisujemy etykiecie ROMON w listingu drugim (powinien on wynosić #88C1 o ile listing 1 nie byl modyfikowany).

Drugi utworzony blok kodu zapamiętujemy w pliku OVL2.BIN. Teraz trzeba załadować główny blok gry i "dograć" nasze pliki pod odpowiednie adresy (#87C0 i #88FA).

Jednak to nie wszystko.


Trzeba jeszcze zmodyfikować tablicę z nazwami. Powinna ona wyglądać następująco:


#89F0 DEFM chr(3), "GAMEFILE"

#8A01 DEFM chr(3), "SHIPDATA"

#8A12 DEFM chr(3), "LEVEL"

#8A23 DEFM chr(3), "EXTRALEV"


Drugą tablicę (z rzymskimi numerami leveli) pozostawiamy bez zmian; Zauważmy, że numery te będą przepisywane pod adres #8A18, czyli bezpośrednio po słowie "level".


Ostatnią czynnością będzie wyszukanie w pamięci słów "TAPE", "tape" i "Tape" i ich zamiana na "Disk".

W ten sposób w menu gry zamiast "Tape menu” będzie napis "Disk menu” itp.


Po zapamiętaniu głównego bloku gry, przystępujemy do kopiowania leveli.

Nadajemy im oczywiście nazwy "LEVELI", "LEVELII", aż do "LEVELV".


l to właściwie już wszystko. Tych, którym opisane czynności nie wydają się proste odsyłam do poprzednich części niniejszego artykułu.

Innym. w ramach rozgrzewki, polecam przeróbkę SIM CITY lub TETRIS (jest ona prostsza od opisanej). Tego typu gier jest całe mnóstwo; niektóre zajmują całą dyskietkę, lub jeszcze więcej.

Przystosowanie gier do współpracy z dyskiem daje satysfakcję, a przy okazji sama gra zyskuje na wartości i wzrasta przyjemność zabawy.


JACEK TROJAŃSKI