upgrade to cah4e3's latest mapper 163&164 code to fix a crash in a game
This commit is contained in:
parent
de9ab09061
commit
032ac9597b
|
@ -2,6 +2,7 @@
|
||||||
10-aug-2008 - punkrockguy318 - SDL: cleaned up the SConsruct
|
10-aug-2008 - punkrockguy318 - SDL: cleaned up the SConsruct
|
||||||
10-aug-2008 - punkrockguy318 - SDL: fixed issue where fceu would lock up when file dialogs were opened during fullscreen
|
10-aug-2008 - punkrockguy318 - SDL: fixed issue where fceu would lock up when file dialogs were opened during fullscreen
|
||||||
|
|
||||||
|
10-aug-2008 - zeromus - upgrade to cah4e3's latest mapper 163&164 code to fix a crash in a game
|
||||||
10-aug-2008 - zeromus - remove cnrom chr rom size limit for homebrew roms
|
10-aug-2008 - zeromus - remove cnrom chr rom size limit for homebrew roms
|
||||||
10-aug-2008 - punkrockguy318 - SDL: fixed bug where fceux would close when file dialogs were closed
|
10-aug-2008 - punkrockguy318 - SDL: fixed bug where fceux would close when file dialogs were closed
|
||||||
10-aug-2008 - punkrockguy318 - SDL: File open dialog is now used to movie playback
|
10-aug-2008 - punkrockguy318 - SDL: File open dialog is now used to movie playback
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/* FCE Ultra - NES/Famicom Emulator
|
/* FCE Ultra - NES/Famicom Emulator
|
||||||
*
|
*
|
||||||
* Copyright notice for this file:
|
* Copyright notice for this file:
|
||||||
* Copyright (C) 2002 Xodnizel
|
* Copyright (C) 2002 Xodnizel 2006 CaH4e3
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@ -19,13 +19,14 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "mapinc.h"
|
#include "mapinc.h"
|
||||||
#include <stdio.h>
|
|
||||||
#include <string.h>
|
static uint8 cmd, laststrobe, trigger;
|
||||||
static uint8 cmd;
|
|
||||||
static uint8 DRegs[8];
|
static uint8 DRegs[8];
|
||||||
static SFORMAT StateRegs[]=
|
static SFORMAT StateRegs[]=
|
||||||
{
|
{
|
||||||
{&cmd, 1, "CMD"},
|
{&cmd, 1, "CMD"},
|
||||||
|
{&laststrobe, 1, "STB"},
|
||||||
|
{&trigger, 1, "TRG"},
|
||||||
{DRegs, 8, "DREG"},
|
{DRegs, 8, "DREG"},
|
||||||
{0}
|
{0}
|
||||||
};
|
};
|
||||||
|
@ -33,7 +34,6 @@ static SFORMAT StateRegs[]=
|
||||||
static void Sync(void)
|
static void Sync(void)
|
||||||
{
|
{
|
||||||
setprg32(0x8000,(DRegs[0]<<4)|(DRegs[1]&0xF));
|
setprg32(0x8000,(DRegs[0]<<4)|(DRegs[1]&0xF));
|
||||||
setchr8(0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void StateRestore(int version)
|
static void StateRestore(int version)
|
||||||
|
@ -41,22 +41,46 @@ static void StateRestore(int version)
|
||||||
Sync();
|
Sync();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static DECLFR(ReadLow)
|
||||||
|
{
|
||||||
|
switch (A&0x7700)
|
||||||
|
{
|
||||||
|
case 0x5100: return DRegs[2]; break;
|
||||||
|
case 0x5500: if(trigger)
|
||||||
|
return DRegs[2];
|
||||||
|
else
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
return 4;
|
||||||
|
}
|
||||||
|
|
||||||
static DECLFW(Write)
|
static DECLFW(Write)
|
||||||
{
|
{
|
||||||
switch (A&0x7300)
|
switch (A&0x7300)
|
||||||
{
|
{
|
||||||
case 0x5100: DRegs[0]=V; Sync(); break;
|
case 0x5100: DRegs[0]=V; Sync(); break;
|
||||||
case 0x5000: DRegs[1]=V; Sync(); break;
|
case 0x5000: DRegs[1]=V; Sync(); break;
|
||||||
|
case 0x5300: DRegs[2]=V; break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static DECLFW(Write2)
|
static DECLFW(Write2)
|
||||||
{
|
{
|
||||||
// FCEU_printf("bs %04x %02x\n",A,V);
|
if(A==0x5101)
|
||||||
|
{
|
||||||
|
if(laststrobe&&!V)
|
||||||
|
{
|
||||||
|
trigger^=1;
|
||||||
|
}
|
||||||
|
laststrobe=V;
|
||||||
|
}else if(A==0x5100&&V==6) //damn thoose protected games
|
||||||
|
setprg32(0x8000,3);
|
||||||
|
else
|
||||||
switch (A&0x7300)
|
switch (A&0x7300)
|
||||||
{
|
{
|
||||||
case 0x5200: DRegs[0]=V; Sync(); break;
|
case 0x5200: DRegs[0]=V; Sync(); break;
|
||||||
case 0x5000: DRegs[1]=V; Sync(); break;
|
case 0x5000: DRegs[1]=V; Sync(); if(!(DRegs[1]&0x80)&&(scanline<128)) setchr8(0); break;
|
||||||
|
case 0x5300: DRegs[2]=V; break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -77,28 +101,42 @@ static void Power(void)
|
||||||
DRegs[1]=0xFF;
|
DRegs[1]=0xFF;
|
||||||
cmd=0;
|
cmd=0;
|
||||||
SetReadHandler(0x8000,0xFFFF,CartBR);
|
SetReadHandler(0x8000,0xFFFF,CartBR);
|
||||||
SetWriteHandler(0x4020,0xFFFF,Write);
|
SetWriteHandler(0x4020,0x5FFF,Write);
|
||||||
SetReadHandler(0x6000,0x7FFF,AWRAM);
|
SetReadHandler(0x6000,0x7FFF,AWRAM);
|
||||||
SetWriteHandler(0x6000,0x7FFF,BWRAM);
|
SetWriteHandler(0x6000,0x7FFF,BWRAM);
|
||||||
|
setchr8(0);
|
||||||
Sync();
|
Sync();
|
||||||
}
|
}
|
||||||
|
|
||||||
static void M163HB(void)
|
static void M163HB(void)
|
||||||
{
|
{
|
||||||
if(scanline==127&&DRegs[1]&0x80)
|
if(DRegs[1]&0x80)
|
||||||
setchr4(0x0000,1);
|
{
|
||||||
|
if(scanline==239)
|
||||||
|
{
|
||||||
|
setchr4(0x0000,0);
|
||||||
|
setchr4(0x1000,0);
|
||||||
|
}
|
||||||
|
else if(scanline==127)
|
||||||
|
{
|
||||||
|
setchr4(0x0000,1);
|
||||||
|
setchr4(0x1000,1);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void Power2(void)
|
static void Power2(void)
|
||||||
{
|
{
|
||||||
memset(DRegs,0,8);
|
memset(DRegs,0,8);
|
||||||
DRegs[1]=0xFF;
|
DRegs[1]=0xFF;
|
||||||
|
laststrobe=1;
|
||||||
cmd=0;
|
cmd=0;
|
||||||
SetReadHandler(0x8000,0xFFFF,CartBR);
|
SetReadHandler(0x8000,0xFFFF,CartBR);
|
||||||
SetWriteHandler(0x4020,0xFFFF,Write2);
|
SetWriteHandler(0x4020,0x5FFF,Write2);
|
||||||
SetReadHandler(0x6000,0x7FFF,AWRAM);
|
SetReadHandler(0x6000,0x7FFF,AWRAM);
|
||||||
SetWriteHandler(0x6000,0x7FFF,BWRAM);
|
SetWriteHandler(0x6000,0x7FFF,BWRAM);
|
||||||
|
SetReadHandler(0x5000,0x5FFF,ReadLow);
|
||||||
|
setchr8(0);
|
||||||
Sync();
|
Sync();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -115,4 +153,5 @@ void Mapper163_Init(CartInfo *info)
|
||||||
GameHBIRQHook=M163HB;
|
GameHBIRQHook=M163HB;
|
||||||
GameStateRestore=StateRestore;
|
GameStateRestore=StateRestore;
|
||||||
AddExState(&StateRegs, ~0, 0, 0);
|
AddExState(&StateRegs, ~0, 0, 0);
|
||||||
|
AddExState(WRAM, 8192, 0, "WRAM");
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue