Czy jest jakiś prosty sposób (dla laików) na podmianę komórek pamięci w plikach xex, atr itd? Chodzi np. o zmianę ilości żyć, koloru postaci itp. i zapisanie takiego zmienionego pliku. Kombinuję w Altirra (opcja cheat) i udało mi się np. zmienić brzydkie zielone kolory postaci w grze Incydent, ale nie ma opcji zapisania takiego xex'a.
to nie takie trywialne, bo xexy albo dane na atr'ach mogą się dekompresować, być przenoszone, itp. ale jak masz prosty plik bez żadnego kombinowania to możesz w hexedytorze jakimś odnaleźć odp. sekwencję i podmienić.
Tak jak napisał Pirx, to może być nietrywialne, ale dla standardowych przypadków może lepiej niż zwykłego hex editora użyć jakiegoś pecetowego narzędzia do kodu 6502 z wbudowanym edytorem heksadecymalnym, np. Omnivore: ->link<-
Chyba najprostszy sposób na podmiankę xex to doklejenie jeszcze jednego bloku z podmienianymi bajtami. Jeśli wiesz, że pod adresem $2345 musisz podmienić $3 na $30, to dolepiasz na końcu pliku xex bajty: 45,23,45,23,30
A robi się to pod linuxem/osx tak: echo 4523452330 | xxd -r -ps >>gra.xex
Wówczas RUN wykona się po wszystkim, inity tam, gdzie są, więc w skompresowanych xexach też powinno działać.
Druga metoda - jest na Win/OSX taki xex edytor OMNIVORE, który wczytuje oddzielnie poszczególne bloki i pozwala na ich edycję.
Z ATR jest gorzej/lepiej, trzeba w atr szukać sekwencji pamięci znalezionej w emulatorze i ją podmienić jakimś hexeditorem. Jeśli atr jest dosowy, do może się zdarzyć, że taka sekwencja wystąpi na granicy sektorów. Wówczas należy wyekstrachować pliki, znaleźć w nich sekwencję, zapisać i podmienić zmieniony plik na oryginalnym ATR. Z tym "lepiej" jest tak: atr-y nie są kompresowane.
Coś nie idzie mi z tym OMNIVORE. W altirze podmieniam w komórce $02C0-$02C3 wartości kolorów sprite i działa, ale już w pliku xex tej samej gry (w oknie deasemblacji) nie mogę znaleźć odwołań do tychże komórek. Jak to ew. odnaleźć? Sprawdzałem też obecność $D012-$D015, ale bez powodzenia.
Najlepiej by było jakąś pułapkę zastawić na zapis do tych komórek. Wtedy Altira do Ci cynk kto tam kombinuje. Bo sam zapis nie musi być robiony przez 'STA $02c0' (najłatwiejszy do znalezienia), może być zrobiony przez 'STA $02bf,x' - i tutaj będzie trochę trudniej. A może być też kod samomodyfikujący - i wtedy to już całkiem niebanalne, bo na etapie szukania takiego rozkazu faktycznie może go jeszcze nie być.
W oknie "history" (trzeba włączyć przy CPU "Record instruction history") wpisujesz w "search" adres szesnastkowo i altirra znajdzie ci odwołania do niego w kilku ostatnich ramkach. Można też dodać pułapkę:
ba w $2c0 L4
Powinno zadziałać przy próbie zapisu do komórek $2c0-$2c3