diff --git a/zsnes/src/cpu/memory.asm b/zsnes/src/cpu/memory.asm index 4c80245e..cd5d44ca 100644 --- a/zsnes/src/cpu/memory.asm +++ b/zsnes/src/cpu/memory.asm @@ -4230,6 +4230,8 @@ NEWSYM sramaccessbankw16s pop ecx ret +EXTSYM MMXSRAMHack + NEWSYM sramaccessbankr8b cmp dword[ramsize],0 je .noaccess @@ -4241,6 +4243,13 @@ NEWSYM sramaccessbankr8b xor ebx,ebx ret .noaccess + cmp byte[MMXSRAMHack],1 + je .mmxsramhack + xor al,al + xor ebx,ebx + ret + +.mmxsramhack mov al,0FFh xor ebx,ebx ret @@ -4259,6 +4268,13 @@ NEWSYM sramaccessbankr16b xor ebx,ebx ret .noaccess + cmp byte[MMXSRAMHack],1 + je .mmxsramhack + xor ax,ax + xor ebx,ebx + ret + +.mmxsramhack mov ax,0FFFFh xor ebx,ebx ret diff --git a/zsnes/src/init.asm b/zsnes/src/init.asm index dfe13f13..8001da48 100644 --- a/zsnes/src/init.asm +++ b/zsnes/src/init.asm @@ -1327,6 +1327,7 @@ NEWSYM HIRQSkip, db 0 NEWSYM ClearScreenSkip, db 0 NEWSYM hirqmode2, db 0 NEWSYM ENVDisable, db 0 +NEWSYM MMXSRAMHack, db 0 SECTION .text ; hacks : @@ -1444,11 +1445,13 @@ NEWSYM headerhack mov byte[disablehdma],0 mov byte[Offby1line],0 mov byte[CacheCheckSkip],0 + mov word[IRQHack],0 mov byte[HIRQSkip],0 mov dword[WindowDisables],0 mov byte[ClearScreenSkip],0 mov byte[hirqmode2],0 mov byte[ENVDisable],0 + mov byte[MMXSRAMHack],0 mov esi,[romdata] add esi,07FC0h @@ -1516,6 +1519,17 @@ NEWSYM headerhack .marvelous .notrend + mov esi,[romdata] + add esi,07FC0h + cmp dword[esi],'MEGA' + jne .notmmx + cmp dword[esi+4],'MAN ' + jne .notmmx + cmp dword[esi+8],'X ' + jne .notmmx + mov byte[MMXSRAMHack],1 +.notmmx + mov esi,[romdata] add esi,07FC0h cmp dword[esi],'STAR' @@ -1705,8 +1719,6 @@ NEWSYM headerhack mov byte[disablehdma],1 .noromhead7 - mov word[IRQHack],0 - ; Front Mission - -p 140 mov esi,[romdata] add esi,0FFC0h