Merge pull request #776 from awjackson/mapper92
Reimplement mapper 92 correctly
This commit is contained in:
commit
2b8f6e7627
|
@ -16,6 +16,9 @@
|
||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program; if not, write to the Free Software
|
* along with this program; if not, write to the Free Software
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
*
|
||||||
|
* The Moero!! Pro Yakyuu series have an ADPCM chip with internal ROM,
|
||||||
|
* used for voice samples (not dumped, so emulation isn't possible)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "mapinc.h"
|
#include "mapinc.h"
|
||||||
|
|
|
@ -17,13 +17,14 @@
|
||||||
* along with this program; if not, write to the Free Software
|
* along with this program; if not, write to the Free Software
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
*
|
*
|
||||||
* Moero!! Pro Tennis have ADPCM codec on-board, PROM isn't dumped, emulation isn't
|
* Moero!! Pro Tennis and Moero!! Pro Yakyuu '88 Ketteiban have an ADPCM chip with
|
||||||
* possible just now.
|
* internal ROM, used for voice samples (not dumped, so emulation isn't possible)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "mapinc.h"
|
#include "mapinc.h"
|
||||||
|
|
||||||
static uint8 preg, creg;
|
static uint8 preg, creg;
|
||||||
|
static void (*Sync)(void);
|
||||||
|
|
||||||
static SFORMAT StateRegs[] =
|
static SFORMAT StateRegs[] =
|
||||||
{
|
{
|
||||||
|
@ -32,13 +33,19 @@ static SFORMAT StateRegs[] =
|
||||||
{ 0 }
|
{ 0 }
|
||||||
};
|
};
|
||||||
|
|
||||||
static void Sync(void) {
|
static void M72Sync(void) {
|
||||||
setprg16(0x8000, preg);
|
setprg16(0x8000, preg);
|
||||||
setprg16(0xC000, ~0);
|
setprg16(0xC000, ~0);
|
||||||
setchr8(creg);
|
setchr8(creg);
|
||||||
}
|
}
|
||||||
|
|
||||||
static DECLFW(M72Write) {
|
static void M92Sync(void) {
|
||||||
|
setprg16(0x8000, 0);
|
||||||
|
setprg16(0xC000, preg);
|
||||||
|
setchr8(creg);
|
||||||
|
}
|
||||||
|
|
||||||
|
static DECLFW(Write) {
|
||||||
if (V & 0x80)
|
if (V & 0x80)
|
||||||
preg = V & 0xF;
|
preg = V & 0xF;
|
||||||
if (V & 0x40)
|
if (V & 0x40)
|
||||||
|
@ -46,10 +53,10 @@ static DECLFW(M72Write) {
|
||||||
Sync();
|
Sync();
|
||||||
}
|
}
|
||||||
|
|
||||||
static void M72Power(void) {
|
static void Power(void) {
|
||||||
Sync();
|
Sync();
|
||||||
SetReadHandler(0x8000, 0xFFFF, CartBR);
|
SetReadHandler(0x8000, 0xFFFF, CartBR);
|
||||||
SetWriteHandler(0x6000, 0xFFFF, M72Write);
|
SetWriteHandler(0x8000, 0xFFFF, Write);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void StateRestore(int version) {
|
static void StateRestore(int version) {
|
||||||
|
@ -57,7 +64,16 @@ static void StateRestore(int version) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void Mapper72_Init(CartInfo *info) {
|
void Mapper72_Init(CartInfo *info) {
|
||||||
info->Power = M72Power;
|
Sync = M72Sync;
|
||||||
|
info->Power = Power;
|
||||||
|
GameStateRestore = StateRestore;
|
||||||
|
|
||||||
|
AddExState(&StateRegs, ~0, 0, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Mapper92_Init(CartInfo *info) {
|
||||||
|
Sync = M92Sync;
|
||||||
|
info->Power = Power;
|
||||||
GameStateRestore = StateRestore;
|
GameStateRestore = StateRestore;
|
||||||
|
|
||||||
AddExState(&StateRegs, ~0, 0, 0);
|
AddExState(&StateRegs, ~0, 0, 0);
|
||||||
|
|
|
@ -181,6 +181,7 @@ void Mapper59_Init(CartInfo *info) {
|
||||||
}
|
}
|
||||||
|
|
||||||
//------------------ Map 061 ---------------------------
|
//------------------ Map 061 ---------------------------
|
||||||
|
|
||||||
static void M61Sync(void) {
|
static void M61Sync(void) {
|
||||||
if (((latche & 0x10) << 1) ^ (latche & 0x20)) {
|
if (((latche & 0x10) << 1) ^ (latche & 0x20)) {
|
||||||
setprg16(0x8000, ((latche & 0xF) << 1) | (((latche & 0x20) >> 4)));
|
setprg16(0x8000, ((latche & 0xF) << 1) | (((latche & 0x20) >> 4)));
|
||||||
|
@ -195,32 +196,6 @@ void Mapper61_Init(CartInfo *info) {
|
||||||
Latch_Init(info, M61Sync, NULL, 0x0000, 0x8000, 0xFFFF, 0);
|
Latch_Init(info, M61Sync, NULL, 0x0000, 0x8000, 0xFFFF, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
//------------------ Map 092 ---------------------------
|
|
||||||
// Another two-in-one mapper, two Jaleco carts uses similar
|
|
||||||
// hardware, but with different wiring.
|
|
||||||
// Original code provided by LULU
|
|
||||||
// Additionally, PCB contains DSP extra sound chip, used for voice samples (unemulated)
|
|
||||||
|
|
||||||
static void M92Sync(void) {
|
|
||||||
uint8 reg = latche & 0xF0;
|
|
||||||
setprg16(0x8000, 0);
|
|
||||||
if (latche >= 0x9000) {
|
|
||||||
switch (reg) {
|
|
||||||
case 0xD0: setprg16(0xc000, latche & 15); break;
|
|
||||||
case 0xE0: setchr8(latche & 15); break;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
switch (reg) {
|
|
||||||
case 0xB0: setprg16(0xc000, latche & 15); break;
|
|
||||||
case 0x70: setchr8(latche & 15); break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void Mapper92_Init(CartInfo *info) {
|
|
||||||
Latch_Init(info, M92Sync, NULL, 0x80B0, 0x8000, 0xFFFF, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
//------------------ Map 174 ---------------------------
|
//------------------ Map 174 ---------------------------
|
||||||
|
|
||||||
static void M174Sync(void) {
|
static void M174Sync(void) {
|
||||||
|
|
|
@ -309,7 +309,8 @@ void Mapper78_Init(CartInfo *info) {
|
||||||
}
|
}
|
||||||
|
|
||||||
//------------------ Map 86 ---------------------------
|
//------------------ Map 86 ---------------------------
|
||||||
|
// Moero!! Pro Yakyuu has an ADPCM chip with internal ROM,
|
||||||
|
// used for voice samples (not dumped, so emulation isn't possible)
|
||||||
static void M86Sync(void) {
|
static void M86Sync(void) {
|
||||||
setprg32(0x8000, (latche >> 4) & 3);
|
setprg32(0x8000, (latche >> 4) & 3);
|
||||||
setchr8((latche & 3) | ((latche >> 4) & 4));
|
setchr8((latche & 3) | ((latche >> 4) & 4));
|
||||||
|
|
Loading…
Reference in New Issue