Cześć.
Nie mamy działu ASM, więc pisże tutaj. Prośba aby wypowiedziały się osoby ogarniąjące pisanie w TASMie i temat oldskoolowych TSR'ów. Gdyż po raz kolejny męczę ten temat. Mamy taki kod jak poniżej. I działa on idealnie pod DOSBoxem z grą "Robbo". Myślę, że Pan Janusz Pelc się po latach nie obrazi, bo gra jest nie aktualniei tak do kupienia :) A Poniższy kod jest udoskonalonym TSR'em na bazie analizy połamania doxchecka w tej grze swego czasu przez kogoś, kto podpisal się "Mroova The Great". Moj TSR calkiem przeskakuje doxchecka w tej grze, tak jak został on pominięty w wersji anglojęzycznej gry, co można zobaczyć na letsplayach na YouTubie. I tutaj problemu nie ma, bo przechwytujemy przerwanie 10h
używane akurat w tej grze. Ale do rzeczy. Pytanie. Czy na bazie poniższego kodu da się zrobić TSR, który po sprawdzeniu odpowiedniej warotści w DS gry, pozwoli na reagowanie ba przerwanie najlepiej 16h
? Bo takie obsługuje docelowa gra, dla ktorej chcialbym napisać nowy TSR i podmienić jej dane w pamięci, wykrywając cały cxas wciskane znaki bez względu na to jakie one są. W tej chwili podmiana po ,35
z 10
na 16
lub 21
powoduje że pod Norton Commanderem TSR powoduje zwiechy lub "kaszanienie się grafiki". Natomiast wywołany poza NC, przed uruchomieniem docelowej gry ("Larry 2" w wersji angielskiej) powoduje zawieszanie się. I gra się w ogóle nie uruchamia, a prompt "wisi". Jak to rozwiązać? Prosił bym o przykład poprawienia poniższego kodu. Docelowo dane wpisane do pamięci jak i sprawdzane adresy będą oczywiście inne pod kątem gry Larry 2. Z góry dziękuję za wskazówki dla mnie maniaka grzebania w old Dosowych grach przy niemal niesety zerowej znajomości ASM'a pod DOS, bardzo cenne :)
.model tiny
.code
.386
org 100h
Start:
jmp RealStart
OldProc dd 0
TrainerProc:
push bp
mov bp,sp
pusha
push es
push ds
mov ax,word ptr ss:[bp+4]
sub ax,488h
mov ds,ax
mov si,039CAh
cmp dword ptr ds:[esi],0F804E80Eh
jne EndOfTrainer
mov byte ptr ds:[si],0EBh
mov byte ptr ds:[si+1],02h
EndOfTrainer:
pop ds
pop es
popa
pop bp
jmp dword ptr cs:[OldProc]
RealStart:
mov ax,3
int 10h
mov ah,9
mov dx,offset LogoText
int 21h
mov si,81h
mov ax,3510h
int 21h
cmp bx,offset TrainerProc
jne InstallNow
mov dx,word ptr es:[OldProc]
mov ax,word ptr es:[OldProc+2]
mov ds,ax
mov ax,2510h
int 21h
mov ah,49h
int 21h
mov ax,cs
mov ds,ax
mov ah,9
mov dx,offset UninstalledText
int 21h
mov ax,4c02h
int 21h
InstallNow:
mov ax,word ptr ds:[2ch]
mov es,ax
mov ah,49h
int 21h
mov ax,3510h
int 21h
mov word ptr cs:[OldProc],bx
mov word ptr cs:[OldProc+2],es
mov ax,2510h
mov dx,offset TrainerProc
int 21h
mov ah,9
mov dx,offset InstalledText
int 21h
mov dx,offset RealStart
int 27h
LogoText db 13,10,13,10
db ' ________ _________ ____ _________ __________ ____ ________'
db 13,10
db ' E _\ __/_/ \ \/ /_ _ /_\__ /_ \/ /_ / /_'
db 13,10
db ' H \ / / / / _/ ____/ _ _/ \ _/__ _/'
db 13,10
db ' T /________\______/___\/___\___/ /_________\___\____\/_______\spot'
db 13,10,13,10
db ' Robbo (C) xland/L.K. Avalon - 100% perfect crack by olesio'
db 13,10
db ' Adapted from source code of Gods trainer by beanus & CoxoC'
db 13,10,13,10,'$'
InstalledText db ' Crack has been installed in memory.',13,10,13,10,'$'
UninstalledText db ' Crack has been removed from memory.',13,10,13,10,'$'
end Start