Partial C portage of initialization code
This commit is contained in:
@@ -112,7 +112,7 @@ EXTSYM sramaccessbankr8s,sramaccessbankw16,sramaccessbankw16s
|
||||
EXTSYM sramaccessbankw8,sramaccessbankw8s,GenerateBank0TableSA1
|
||||
EXTSYM ScrDispl,wramreadptr,wramwriteptr
|
||||
EXTSYM pl1Ltk,pl1Rtk,pl2Ltk,pl2Rtk,pl3Ltk,pl3Rtk,pl4Ltk,pl4Rtk,pl5Ltk,pl5Rtk
|
||||
EXTSYM loadstate2
|
||||
EXTSYM loadstate2, headerhack
|
||||
%ifdef __LINUX__
|
||||
EXTSYM LoadDir, popdir, pushdir
|
||||
%endif
|
||||
@@ -1468,566 +1468,6 @@ SECTION .text
|
||||
EXTSYM ewj2hack
|
||||
EXTSYM latchyr
|
||||
|
||||
NEWSYM headerhack
|
||||
mov byte[disablehdma],0
|
||||
mov byte[Offby1line],0
|
||||
mov byte[CacheCheckSkip],0
|
||||
mov word[IRQHack],0
|
||||
mov byte[HIRQSkip],0
|
||||
mov byte[hdmaearlstart],0
|
||||
mov dword[WindowDisables],0
|
||||
mov byte[ClearScreenSkip],0
|
||||
mov byte[ENVDisable],0
|
||||
|
||||
mov esi,[romdata]
|
||||
add esi,0FFC0h
|
||||
cmp dword[esi],'HORA'
|
||||
jne .nothoraigakuen
|
||||
cmp dword[esi+4],'I-GA'
|
||||
jne .nothoraigakuen
|
||||
cmp dword[esi+8],'KUEN'
|
||||
jne .nothoraigakuen
|
||||
cmp dword[esi+12],' '
|
||||
jne .nothoraigakuen
|
||||
mov al,0h
|
||||
mov edi,spcRam
|
||||
mov ecx,65472
|
||||
rep stosb
|
||||
ret
|
||||
.nothoraigakuen
|
||||
|
||||
mov esi,[romdata]
|
||||
add esi,07FC0h
|
||||
cmp dword[esi],0DFCAB0BDh
|
||||
jne .notfamista1
|
||||
cmp dword[esi+4],0D0A7CCB0h
|
||||
jne .notfamista1
|
||||
cmp dword[esi+8],02020C0BDh
|
||||
jne .notfamista1
|
||||
cmp dword[esi+12],20202020h
|
||||
jne .notfamista1
|
||||
mov esi,[romdata]
|
||||
add esi,2762Fh
|
||||
mov word [esi],0EAEAh ; Skip a check for value FF at 2140 when spc not
|
||||
; initialized yet?!?
|
||||
.notfamista1
|
||||
|
||||
mov esi,[romdata]
|
||||
add esi,07FC0h
|
||||
cmp dword[esi],0DFCAB0BDh
|
||||
jne .notfamista2
|
||||
cmp dword[esi+4],0D0A7CCB0h
|
||||
jne .notfamista2
|
||||
cmp dword[esi+8],03220C0BDh
|
||||
jne .notfamista2
|
||||
cmp dword[esi+12],20202020h
|
||||
jne .notfamista2
|
||||
mov esi,[romdata]
|
||||
add esi,6CEDh
|
||||
mov word [esi],0EAEAh ; Skip a check for value FF at 2140 when spc not
|
||||
; initialized yet?!?
|
||||
mov esi,[romdata]
|
||||
add esi,6CF9h
|
||||
mov word [esi],0EAEAh ; Skip a check for value FF at 2140 when spc not
|
||||
; initialized yet?!?
|
||||
.notfamista2
|
||||
|
||||
mov esi,[romdata]
|
||||
add esi,07FC0h
|
||||
cmp dword[esi],20434653h
|
||||
jne .notkamenrider
|
||||
cmp dword[esi+4],0D7DDD2B6h
|
||||
jne .notkamenrider
|
||||
cmp dword[esi+8],0B0DEC0B2h
|
||||
jne .notkamenrider
|
||||
cmp dword[esi+12],20202020h
|
||||
jne .notkamenrider
|
||||
mov byte[latchyr],2
|
||||
.notkamenrider
|
||||
|
||||
mov esi,[romdata]
|
||||
add esi,07FC0h
|
||||
cmp dword[esi],'EURO'
|
||||
jne .noteuropeanprimegoal
|
||||
cmp dword[esi+4],'PEAN'
|
||||
jne .noteuropeanprimegoal
|
||||
cmp dword[esi+8],' PRI'
|
||||
jne .noteuropeanprimegoal
|
||||
cmp dword[esi+12],'ME G'
|
||||
jne .noteuropeanprimegoal
|
||||
mov al,0h
|
||||
mov edi,spcRam
|
||||
mov ecx,65472
|
||||
rep stosb
|
||||
ret
|
||||
.noteuropeanprimegoal
|
||||
|
||||
mov esi,[romdata]
|
||||
add esi,07FC0h
|
||||
cmp dword[esi],'CYBE'
|
||||
jne .notcyberknight2
|
||||
cmp dword[esi+4],'R KN'
|
||||
jne .notcyberknight2
|
||||
cmp dword[esi+8],'IGHT'
|
||||
jne .notcyberknight2
|
||||
cmp dword[esi+12],' 2 '
|
||||
jne .notcyberknight2
|
||||
mov byte[cycpb268],75
|
||||
mov byte[cycpb358],77
|
||||
mov byte[cycpbl2],75
|
||||
mov byte[cycpblt2],75
|
||||
mov byte[cycpbl],75
|
||||
mov byte[cycpblt],75
|
||||
.notcyberknight2
|
||||
|
||||
mov esi,[romdata]
|
||||
add esi,07FC0h
|
||||
cmp dword[esi],0B4B1DEC3h
|
||||
jne .notdeasomething
|
||||
cmp dword[esi+4],0CFBBC9C4h
|
||||
jne .notdeasomething
|
||||
cmp dword[esi+8],0CAAFB120h
|
||||
jne .notdeasomething
|
||||
mov esi,[romdata]
|
||||
add esi,017837Ch
|
||||
mov word [esi],0EAEAh
|
||||
.notdeasomething
|
||||
|
||||
mov esi,[romdata]
|
||||
add esi,07FC0h
|
||||
cmp dword[esi],'HUMA'
|
||||
jne .nothumangrandprix3
|
||||
cmp dword[esi+4],'N GR'
|
||||
jne .nothumangrandprix3
|
||||
cmp dword[esi+8],'ANDP'
|
||||
jne .nothumangrandprix3
|
||||
mov byte[cycpb268],135
|
||||
mov byte[cycpb358],157
|
||||
mov byte[cycpbl2],125
|
||||
mov byte[cycpblt2],125
|
||||
mov byte[cycpbl],125
|
||||
mov byte[cycpblt],125
|
||||
.nothumangrandprix3
|
||||
|
||||
mov esi,[romdata]
|
||||
add esi,07FC0h
|
||||
cmp dword[esi],'ACCE'
|
||||
jne .notaccelebrid
|
||||
cmp dword[esi+4],'LEBR'
|
||||
jne .notaccelebrid
|
||||
cmp dword[esi+8],'ID '
|
||||
jne .notaccelebrid
|
||||
mov esi,[romdata]
|
||||
add esi,034DA2h
|
||||
mov byte[esi],000h
|
||||
mov esi,[romdata]
|
||||
add esi,034DA3h
|
||||
mov byte[esi],000h
|
||||
.notaccelebrid
|
||||
|
||||
mov esi,[romdata]
|
||||
add esi,07FC0h
|
||||
cmp dword[esi],'BATT'
|
||||
jne .notbattlegp
|
||||
cmp dword[esi+4],'LE G'
|
||||
jne .notbattlegp
|
||||
cmp dword[esi+8],'RAND'
|
||||
jne .notbattlegp
|
||||
mov esi,[romdata]
|
||||
add esi,018089h
|
||||
mov byte[esi],0FBh
|
||||
mov esi,[romdata]
|
||||
add esi,006C95h
|
||||
mov byte[esi],0FBh
|
||||
.notbattlegp
|
||||
|
||||
mov esi,[romdata]
|
||||
add esi,07FC0h
|
||||
cmp dword[esi],'Neug'
|
||||
jne .notneugiertrans
|
||||
cmp dword[esi+4],'ier '
|
||||
jne .notneugiertrans
|
||||
cmp dword[esi+8],'(tr.'
|
||||
jne .notneugiertrans
|
||||
|
||||
mov esi,[romdata]
|
||||
add esi,0D4150h
|
||||
mov byte[esi],0F9h
|
||||
.notneugiertrans
|
||||
|
||||
mov esi,[romdata]
|
||||
add esi,07FC0h
|
||||
cmp dword[esi],'NEUG'
|
||||
jne .notneugier
|
||||
cmp dword[esi+4],'IER '
|
||||
jne .notneugier
|
||||
cmp dword[esi+8],' '
|
||||
jne .notneugier
|
||||
|
||||
mov esi,[romdata]
|
||||
add esi,0D4150h
|
||||
mov byte[esi],0F9h
|
||||
.notneugier
|
||||
|
||||
mov esi,[romdata]
|
||||
add esi,07FC0h
|
||||
cmp dword[esi],'HOME'
|
||||
jne .nothomealone
|
||||
cmp dword[esi+4],' ALO'
|
||||
jne .nothomealone
|
||||
mov esi,[romdata]
|
||||
add esi,0666Bh
|
||||
mov byte[esi],0EEh ; RTS instead of jumping to a rts
|
||||
mov byte[esi+1],0BCh ; RTS instead of jumping to a rts
|
||||
.nothomealone
|
||||
|
||||
mov esi,[romdata]
|
||||
add esi,0FFC0h
|
||||
cmp dword[esi],'EMER'
|
||||
jne .notemeralddragon
|
||||
cmp dword[esi+4],'ALD '
|
||||
jne .notemeralddragon
|
||||
cmp dword[esi+8],'DRAG'
|
||||
jne .notemeralddragon
|
||||
mov byte[ENVDisable],1
|
||||
.notemeralddragon
|
||||
|
||||
mov esi,[romdata]
|
||||
add esi,07FC0h
|
||||
cmp dword[esi],'YOSH'
|
||||
jne .notyoshi
|
||||
cmp dword[esi+8],'ISLA'
|
||||
jne .notyoshi
|
||||
jmp .yoshi
|
||||
.notyoshi
|
||||
cmp dword[esi],'YOSS'
|
||||
jne .notyoshi2
|
||||
cmp dword[esi+8],'ISLA'
|
||||
jne .notyoshi2
|
||||
.yoshi
|
||||
mov byte[hdmaearlstart],2
|
||||
mov byte[opexec268],116
|
||||
mov byte[opexec358],126
|
||||
.notyoshi2
|
||||
|
||||
mov esi,[romdata]
|
||||
add esi,0FFC0h
|
||||
cmp dword[esi],'BUBS'
|
||||
jne .notbubsy2
|
||||
cmp dword[esi+4],'Y II'
|
||||
jne .notbubsy2
|
||||
mov byte[cycpb268],125
|
||||
mov byte[cycpb358],147
|
||||
mov byte[cycpbl2],125
|
||||
mov byte[cycpblt2],125
|
||||
mov byte[cycpbl],125
|
||||
mov byte[cycpblt],125
|
||||
.notbubsy2
|
||||
|
||||
mov esi,[romdata]
|
||||
add esi,7FC0h
|
||||
cmp dword[esi],0DEB3B0CFh
|
||||
je .marvelous
|
||||
cmp dword[esi],'REND'
|
||||
jne .notrend
|
||||
mov byte[cycpb268],157
|
||||
mov byte[cycpb358],157
|
||||
mov byte[cycpbl2],157
|
||||
mov byte[cycpblt2],157
|
||||
mov byte[cycpbl],157
|
||||
mov byte[cycpblt],157
|
||||
jmp .notrend
|
||||
.marvelous
|
||||
.notrend
|
||||
|
||||
mov esi,[romdata]
|
||||
add esi,07FC0h
|
||||
cmp dword[esi],'STAR'
|
||||
jne .notds9
|
||||
cmp dword[esi+4],' TRE'
|
||||
jne .notds9
|
||||
cmp dword[esi+8],'K: D'
|
||||
jne .notds9
|
||||
mov byte[opexec268],187
|
||||
mov byte[opexec358],187
|
||||
.notds9
|
||||
|
||||
mov esi,[romdata]
|
||||
add esi,0FFC0h
|
||||
cmp dword[esi],'CLAY'
|
||||
jne .notclayfighter
|
||||
cmp dword[esi+4],' FIG'
|
||||
jne .notclayfighter
|
||||
cmp dword[esi+8],'HTER'
|
||||
jne .notclayfighter
|
||||
cmp dword[esi+12],' '
|
||||
jne .notclayfighter
|
||||
mov esi,[romdata] ; In intro
|
||||
add esi,01A10B9h
|
||||
mov byte[esi],0DEh
|
||||
|
||||
mov esi,[romdata] ; In game
|
||||
add esi,01A1996h
|
||||
mov byte[esi],0DEh
|
||||
mov esi,[romdata]
|
||||
add esi,01AE563h
|
||||
mov byte[esi],0DEh
|
||||
mov esi,[romdata]
|
||||
add esi,01AE600h
|
||||
mov byte[esi],0DEh
|
||||
.notclayfighter
|
||||
|
||||
mov esi,[romdata]
|
||||
add esi,0FFC0h
|
||||
cmp dword[esi],'Baha'
|
||||
jne .notbahamutlagoon
|
||||
cmp dword[esi+4],'mut '
|
||||
jne .notbahamutlagoon
|
||||
cmp dword[esi+8],'Lago'
|
||||
jne .notbahamutlagoon
|
||||
mov esi,[romdata]
|
||||
add esi,010254h
|
||||
mov byte[esi],0EEh
|
||||
.notbahamutlagoon
|
||||
|
||||
mov esi,[romdata]
|
||||
add esi,07FC0h
|
||||
cmp dword[esi],'MORT'
|
||||
jne .notmk
|
||||
cmp dword[esi+4],'AL K'
|
||||
jne .notmk
|
||||
cmp dword[esi+8],'OMBA'
|
||||
jne .notmk
|
||||
cmp dword[esi+12],'T '
|
||||
jne .notmk
|
||||
mov byte[disablehdma],1
|
||||
.notmk
|
||||
|
||||
mov esi,[romdata]
|
||||
add esi,0FFC0h
|
||||
cmp dword[esi],'CLOC'
|
||||
jne .notclocktower
|
||||
cmp dword[esi+4],'K TO'
|
||||
jne .notclocktower
|
||||
cmp dword[esi+8],'WER '
|
||||
jne .notclocktower
|
||||
mov byte[opexec268],187
|
||||
mov byte[opexec358],182
|
||||
mov byte[opexec268cph],47
|
||||
mov byte[opexec358cph],47
|
||||
.notclocktower
|
||||
|
||||
mov esi,[romdata]
|
||||
add esi,07FC0h
|
||||
cmp dword[esi],'DRAG'
|
||||
jne .notdq5
|
||||
cmp dword[esi+4],'ONQU'
|
||||
jne .notdq5
|
||||
cmp dword[esi+8],'EST5'
|
||||
jne .notdq5
|
||||
mov byte[disablehdma],1
|
||||
.notdq5
|
||||
|
||||
; Lamborgini Challenge - -p 110
|
||||
mov esi,[romdata]
|
||||
add esi,07FC0h
|
||||
cmp dword[esi],'DIGI'
|
||||
jne .nodigitaldevil
|
||||
mov byte[opexec268],187
|
||||
mov byte[opexec358],187
|
||||
.nodigitaldevil
|
||||
|
||||
mov esi,[romdata]
|
||||
add esi,7FC0h
|
||||
cmp dword[esi],'SP F'
|
||||
jne .notfmatchtennis
|
||||
mov byte[cycpb268],145
|
||||
mov byte[cycpb358],147
|
||||
mov byte[cycpbl2],145
|
||||
mov byte[cycpblt2],145
|
||||
mov byte[cycpbl],145
|
||||
mov byte[cycpblt],145
|
||||
.notfmatchtennis
|
||||
|
||||
mov esi,[romdata]
|
||||
add esi,7FC0h
|
||||
cmp dword[esi],'DEAD'
|
||||
je .deaddance
|
||||
cmp dword[esi],'TUFF'
|
||||
jne .nottuffenuff
|
||||
.deaddance
|
||||
mov byte[cycpb268],75
|
||||
mov byte[cycpb358],77
|
||||
mov byte[cycpbl2],75
|
||||
mov byte[cycpblt2],75
|
||||
mov byte[cycpbl],75
|
||||
mov byte[cycpblt],75
|
||||
.nottuffenuff
|
||||
|
||||
cmp byte[DSP1Type],0
|
||||
je .notdis
|
||||
mov byte[disablehdma],1
|
||||
.notdis
|
||||
|
||||
; Here are the individual game hacks. Some of these probably can
|
||||
; be removed since many of them were created very early in ZSNES
|
||||
; development.
|
||||
|
||||
cmp dword[esi+0FFC0h],'FINA'
|
||||
jne .notff
|
||||
.notff
|
||||
mov esi,[romdata]
|
||||
add esi,9AB0h
|
||||
cmp dword[esi],0F00F2908h
|
||||
jne .notff3
|
||||
mov byte[opexec268],163
|
||||
mov byte[opexec358],157
|
||||
mov byte[opexec268cph],39
|
||||
mov byte[opexec358cph],39
|
||||
.notff3
|
||||
|
||||
; Earth Worm Jim 2 - IRQ hack (reduce sound static)
|
||||
mov esi,[romdata]
|
||||
add esi,0FFC0h
|
||||
mov edi,.ewj2head
|
||||
call Checkheadersame
|
||||
cmp al,0
|
||||
jne .noromhead2
|
||||
mov esi,[romdata]
|
||||
add esi,02A9C1Ah
|
||||
mov word [esi],0
|
||||
add esi, 5
|
||||
mov word [esi],0
|
||||
mov dword [ewj2hack],1
|
||||
.noromhead2
|
||||
|
||||
; Lamborgini Challenge - -p 110
|
||||
mov esi,[romdata]
|
||||
add esi,07FC0h
|
||||
mov edi,.lambhead
|
||||
call Checkheadersame
|
||||
cmp al,0
|
||||
jne .noromheadlamb
|
||||
mov byte[opexec268],187
|
||||
mov byte[opexec358],187
|
||||
.noromheadlamb
|
||||
|
||||
; Addams Family Values - -p 75
|
||||
mov esi,[romdata]
|
||||
add esi,07FC0h
|
||||
mov edi,.adm3head
|
||||
call Checkheadersame
|
||||
cmp al,0
|
||||
jne .noromheadadm3
|
||||
mov byte[opexec268],120
|
||||
mov byte[opexec358],100
|
||||
.noromheadadm3
|
||||
|
||||
; Bubsy -p 115
|
||||
mov esi,[romdata]
|
||||
add esi,07FC0h
|
||||
mov edi,.bubshead
|
||||
call Checkheadersame
|
||||
cmp al,0
|
||||
jne .noromhead3
|
||||
mov byte[opexec268],220
|
||||
mov byte[opexec358],220
|
||||
mov byte[opexec268cph],64
|
||||
mov byte[opexec358cph],64
|
||||
.noromhead3
|
||||
|
||||
; BToad vs DD - 197/192/47/47 -p 120
|
||||
mov esi,[romdata]
|
||||
; add esi,07FC0h
|
||||
cmp dword[esi+640h],0E2FA85F6h
|
||||
jne .noromhead4
|
||||
mov byte[opexec268],187
|
||||
mov byte[opexec358],187
|
||||
mov byte[opexec268cph],47
|
||||
mov byte[opexec358cph],47
|
||||
mov bl,[cycpb358]
|
||||
mov byte[cycpblt],bl
|
||||
mov al,[opexec358]
|
||||
mov byte[cycpl],al
|
||||
.noromhead4
|
||||
; Chrono Trigger - 187/182/47/47 -p 120 / res change clear screen disable
|
||||
mov esi,[romdata]
|
||||
; add esi,0FFC0h
|
||||
cmp dword[esi+8640h],0E243728Dh
|
||||
jne .noromhead6
|
||||
cmp byte[opexec358],182
|
||||
ja .noromhead6
|
||||
mov byte[ClearScreenSkip],1
|
||||
mov byte[opexec268],187
|
||||
mov byte[opexec358],182
|
||||
mov byte[opexec268cph],47
|
||||
mov byte[opexec358cph],47
|
||||
mov bl,[cycpb358]
|
||||
mov byte[cycpblt],bl
|
||||
mov al,[opexec358]
|
||||
mov byte[cycpl],al
|
||||
.noromhead6
|
||||
|
||||
; PunchOut - Disable HDMA start in middle of screen
|
||||
mov esi,[romdata]
|
||||
add esi,07FC0h
|
||||
mov edi,.pouthead
|
||||
call Checkheadersame
|
||||
cmp al,0
|
||||
jne .noromhead7
|
||||
mov byte[disablehdma],1
|
||||
.noromhead7
|
||||
|
||||
; Front Mission - -p 140
|
||||
mov esi,[romdata]
|
||||
add esi,0FFC0h
|
||||
cmp dword[esi],0C4DDDBCCh
|
||||
jne .noromheadfm
|
||||
cmp dword[esi+4],0AEBCAFD0h
|
||||
jne .noromheadfm
|
||||
mov byte[opexec268],226
|
||||
mov byte[opexec358],226
|
||||
mov byte[opexec268cph],80
|
||||
mov byte[opexec358cph],80
|
||||
.noromheadfm
|
||||
|
||||
; Front Mission - -p 140
|
||||
mov esi,[romdata]
|
||||
add esi,0FFC0h
|
||||
cmp dword[esi],'FRON'
|
||||
jne .noromheadfm2
|
||||
cmp dword[esi+4],'T MI'
|
||||
jne .noromheadfm2
|
||||
mov byte[opexec268],226
|
||||
mov byte[opexec358],226
|
||||
mov byte[opexec268cph],80
|
||||
mov byte[opexec358cph],80
|
||||
.noromheadfm2
|
||||
|
||||
; Clayfighter 2 - -p 120
|
||||
mov esi,[romdata]
|
||||
add esi,0FFC0h
|
||||
cmp dword[esi],'Clay'
|
||||
jne .noromheadcf2
|
||||
cmp byte[esi+12],'2'
|
||||
jne .noromheadcf2
|
||||
mov byte[opexec268],187
|
||||
mov byte[opexec358],182
|
||||
mov byte[opexec268cph],47
|
||||
mov byte[opexec358cph],47
|
||||
.noromheadcf2
|
||||
|
||||
mov esi,[romdata]
|
||||
add esi,0FFC0h
|
||||
cmp dword[esi],'Donk'
|
||||
jne .noromheaddk
|
||||
cmp word[ramsize],2048
|
||||
jne .noromheaddk
|
||||
mov word[ramsize],4096
|
||||
mov word[ramsizeand],4095
|
||||
.noromheaddk
|
||||
ret
|
||||
|
||||
SECTION .data
|
||||
|
||||
.ewj2head db 58,62,45,43,55,40,48,45,50,95,53,54,50,95,77,95,95,95,95,95
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user