Zapewne już nie raz wyskoczył wam błąd, w którymś z wgrywanych patchy o niezgodności danych. Co się dzieje? Otóż są dwie mozliwości, które najlepiej sprawdzić otwierając soft w jakimś edytorze hex np. Xvi32.
Jeśli jest to miejsce w środku jakichś danych i zmieniamy tylko 2 lub nawet 1 bajt to niestety trzeba zrezygnować z wgrywania patcha bo pewnie już inny patch zamienił tą część i mogą one nie współpracować ze sobą.
Jednak jeśli odkryjemy, że w miejscu w którym występuje błąd jest umieszczony kod innego patcha, ale miejsce to jest otoczone innymi wolymi obszarami to znaczy to, że mozemy sobie przeadresować danego patcha i nie będą już występować błędy.
Posłużmy się przykładem patcha DCC:
;;*** DCC. Don't Close On Accepting Call v3 ***
;UNDO previous version
;v3:
; - sets mp3 on pause on incoming call and unpause it on call ending
; - call screen shows normally when you have something opened
;additionally contains fix for 'Address book skipping for sms view' patch,
;when number of incoming has taken from sim sometimes. It's no matter if
;you don't use it
;If you have something opened and accepted call:
; - after changing volume during call, press ok in volume dialog, otherwise it
; close all previously opened dialogs;
; - after going to menu by rightsoft during call, you must close all opened, if
; you want to go back to callscreen
***************
Zwróćmy uwagę na budowę patcha. Jest w nim kilka miejsc zmieniających już istniejące dane na skoki np.
3AFF4A: DAA0AC15 DAC780D6
ale także część nowa występująca po części pierwszej wpisująca zupełnie nową partię kodu zaczynając od adresu 27D680.
Jeśli błąd wystąpiłby w danych z pierwszej części patcha nie dałoby się przeadresować. Jednak załóżmy, że błąd występuje w danych z drugiej części w linii:
Ponieważ, w sofcie nie powinno być w tym miejscu innych danych znaczy, to że jakis innyc patch juz to miejsce wykorzystał. Trzeba w takim razie znaleźć wolne miejsce aby przesunąć nasze dane. W tym celu należy skorzystać z opisu szukania wolnego miejsca. Kiedy już wiemy gdzie jest miejsce na patcha otwieramy soft w edytorze hex i powiększamy lub zmniejszamy okno programu aby w linii było 16 kratek. Następnie wciskamy Adress->Go to i wpisujemy adres, który wybierzemy na nowe miejsce patcha i patrzymy czy jest tam wystarczająca liczba linijek - w naszym wypadku 9. Jeśli tak mozemy zacząć przepisywać adresy w patchu. Trzeba bardzo uważnie wpisać wszystkie adresy aby patch nie powodował wyłączania telefonu.
Załóżmy ze zaczniemy od adresu 27D700:
Następnym krokiem jest sprawdzenie ile skoków w kodzie patcha odnosi sie do nowych danych i ich zmiana na nowe.
W omawianym patchu są 3 skoki, które trzeba zmienić:
Trzeba bardzo uwąznie sprawdzić do jakich części patcha odnoszą się skoki. Pierwszy odnosi się do początku, jednak dwa następne już do danych w środku nowego bloku.
Po poprawnie wykonanych obliczeniach i zmianach WSZYSTKICH skoków odnoszących się do przeadresowywanego patcha powinniśmy uzyskać efekt podobny do poniższego:
*** DCC. Don't Close On Accepting Call v3 ***
;UNDO previous version
;v3:
; - sets mp3 on pause on incoming call and unpause it on call ending
; - call screen shows normally when you have something opened
;additionally contains fix for 'Address book skipping for sms view' patch,
;when number of incoming has taken from sim sometimes. It's no matter if
;you don't use it
;If you have something opened and accepted call:
; - after changing volume during call, press ok in volume dialog, otherwise it
; close all previously opened dialogs;
; - after going to menu by rightsoft during call, you must close all opened, if
; you want to go back to callscreen
***************