Backport r173 - UNIF-DRAGONFIGHTER - new board for a new dump

This commit is contained in:
Oggom
2015-06-28 03:39:57 +02:00
parent 254ebe5436
commit 204f62767c
5 changed files with 270 additions and 188 deletions

View File

@@ -1,7 +1,7 @@
[Project]
FileName=Fceuwin.dev
Name=Fceu
UnitCount=297
UnitCount=298
Type=0
Ver=1
ObjFiles=
@@ -2297,18 +2297,8 @@ Priority=1000
OverrideBuildCmd=0
BuildCmd=
[Unit260]
FileName=src\boards\addrlatch.c
CompileCpp=0
Folder=boards
Compile=1
Link=1
Priority=1000
OverrideBuildCmd=0
BuildCmd=
[Unit266]
FileName=src\boards\246.c
FileName=src\boards\32.c
CompileCpp=0
Folder=boards
Compile=1
@@ -2318,9 +2308,9 @@ OverrideBuildCmd=0
BuildCmd=
[Unit270]
FileName=src\boards\40.c
FileName=src\boards\41.c
CompileCpp=0
Folder=boards/fds conversions
Folder=boards/multigame boards
Compile=1
Link=1
Priority=1000
@@ -2328,16 +2318,6 @@ OverrideBuildCmd=0
BuildCmd=
[Unit272]
FileName=src\boards\42.c
CompileCpp=0
Folder=boards/fds conversions
Compile=1
Link=1
Priority=1000
OverrideBuildCmd=0
BuildCmd=
[Unit273]
FileName=src\boards\46.c
CompileCpp=0
Folder=boards/multigame boards
@@ -2347,107 +2327,7 @@ Priority=1000
OverrideBuildCmd=0
BuildCmd=
[Unit275]
FileName=src\boards\51.c
CompileCpp=0
Folder=boards/multigame boards
Compile=1
Link=1
Priority=1000
OverrideBuildCmd=0
BuildCmd=
[Unit276]
FileName=src\boards\62.c
CompileCpp=0
Folder=boards/multigame boards
Compile=1
Link=1
Priority=1000
OverrideBuildCmd=0
BuildCmd=
[Unit277]
FileName=src\boards\80.c
CompileCpp=0
Folder=boards
Compile=1
Link=1
Priority=1000
OverrideBuildCmd=0
BuildCmd=
[Unit278]
FileName=src\boards\79.c
CompileCpp=0
Folder=boards
Compile=1
Link=1
Priority=1000
OverrideBuildCmd=0
BuildCmd=
[Unit279]
FileName=src\boards\77.c
CompileCpp=0
Folder=boards
Compile=1
Link=1
Priority=1000
OverrideBuildCmd=0
BuildCmd=
[Unit280]
FileName=src\boards\vrc1.c
CompileCpp=0
Folder=boards/vrc based
Compile=1
Link=1
Priority=1000
OverrideBuildCmd=0
BuildCmd=
[Unit281]
FileName=src\boards\vrc3.c
CompileCpp=0
Folder=boards/vrc based
Compile=1
Link=1
Priority=1000
OverrideBuildCmd=0
BuildCmd=
[Unit282]
FileName=src\boards\72.c
CompileCpp=0
Folder=boards
Compile=1
Link=1
Priority=1000
OverrideBuildCmd=0
BuildCmd=
[Unit284]
FileName=src\boards\36.c
CompileCpp=0
Folder=boards
Compile=1
Link=1
Priority=1000
OverrideBuildCmd=0
BuildCmd=
[Unit285]
FileName=src\boards\65.c
CompileCpp=0
Folder=boards
Compile=1
Link=1
Priority=1000
OverrideBuildCmd=0
BuildCmd=
[Unit274]
[Unit273]
FileName=src\boards\50.c
CompileCpp=0
Folder=boards/fds conversions
@@ -2457,7 +2337,77 @@ Priority=1000
OverrideBuildCmd=0
BuildCmd=
[Unit283]
[Unit275]
FileName=src\boards\62.c
CompileCpp=0
Folder=boards/multigame boards
Compile=1
Link=1
Priority=1000
OverrideBuildCmd=0
BuildCmd=
[Unit276]
FileName=src\boards\80.c
CompileCpp=0
Folder=boards
Compile=1
Link=1
Priority=1000
OverrideBuildCmd=0
BuildCmd=
[Unit277]
FileName=src\boards\79.c
CompileCpp=0
Folder=boards
Compile=1
Link=1
Priority=1000
OverrideBuildCmd=0
BuildCmd=
[Unit278]
FileName=src\boards\77.c
CompileCpp=0
Folder=boards
Compile=1
Link=1
Priority=1000
OverrideBuildCmd=0
BuildCmd=
[Unit279]
FileName=src\boards\vrc1.c
CompileCpp=0
Folder=boards/vrc based
Compile=1
Link=1
Priority=1000
OverrideBuildCmd=0
BuildCmd=
[Unit280]
FileName=src\boards\vrc3.c
CompileCpp=0
Folder=boards/vrc based
Compile=1
Link=1
Priority=1000
OverrideBuildCmd=0
BuildCmd=
[Unit281]
FileName=src\boards\72.c
CompileCpp=0
Folder=boards
Compile=1
Link=1
Priority=1000
OverrideBuildCmd=0
BuildCmd=
[Unit282]
FileName=src\boards\71.c
CompileCpp=0
Folder=boards
@@ -2467,6 +2417,46 @@ Priority=1000
OverrideBuildCmd=0
BuildCmd=
[Unit284]
FileName=src\boards\65.c
CompileCpp=0
Folder=boards
Compile=1
Link=1
Priority=1000
OverrideBuildCmd=0
BuildCmd=
[Unit285]
FileName=src\boards\67.c
CompileCpp=0
Folder=boards
Compile=1
Link=1
Priority=1000
OverrideBuildCmd=0
BuildCmd=
[Unit274]
FileName=src\boards\51.c
CompileCpp=0
Folder=boards/multigame boards
Compile=1
Link=1
Priority=1000
OverrideBuildCmd=0
BuildCmd=
[Unit283]
FileName=src\boards\36.c
CompileCpp=0
Folder=boards
Compile=1
Link=1
Priority=1000
OverrideBuildCmd=0
BuildCmd=
[Unit23]
FileName=src\video.c
CompileCpp=0
@@ -2488,16 +2478,6 @@ OverrideBuildCmd=0
BuildCmd=
[Unit261]
FileName=src\boards\228.c
CompileCpp=0
Folder=boards/multigame boards
Compile=1
Link=1
Priority=1000
OverrideBuildCmd=0
BuildCmd=
[Unit262]
FileName=src\boards\230.c
CompileCpp=0
Folder=boards/multigame boards
@@ -2507,8 +2487,8 @@ Priority=1000
OverrideBuildCmd=0
BuildCmd=
[Unit264]
FileName=src\boards\234.c
[Unit262]
FileName=src\boards\232.c
CompileCpp=0
Folder=boards/multigame boards
Compile=1
@@ -2517,7 +2497,7 @@ Priority=1000
OverrideBuildCmd=0
BuildCmd=
[Unit265]
[Unit264]
FileName=src\boards\244.c
CompileCpp=0
Folder=boards
@@ -2527,8 +2507,8 @@ Priority=1000
OverrideBuildCmd=0
BuildCmd=
[Unit267]
FileName=src\boards\32.c
[Unit265]
FileName=src\boards\246.c
CompileCpp=0
Folder=boards
Compile=1
@@ -2537,7 +2517,7 @@ Priority=1000
OverrideBuildCmd=0
BuildCmd=
[Unit268]
[Unit267]
FileName=src\boards\33.c
CompileCpp=0
Folder=boards
@@ -2547,7 +2527,7 @@ Priority=1000
OverrideBuildCmd=0
BuildCmd=
[Unit269]
[Unit268]
FileName=src\boards\252.c
CompileCpp=0
Folder=boards/vrc based
@@ -2557,10 +2537,20 @@ Priority=1000
OverrideBuildCmd=0
BuildCmd=
[Unit271]
FileName=src\boards\41.c
[Unit269]
FileName=src\boards\40.c
CompileCpp=0
Folder=boards/multigame boards
Folder=boards/fds conversions
Compile=1
Link=1
Priority=1000
OverrideBuildCmd=0
BuildCmd=
[Unit271]
FileName=src\boards\42.c
CompileCpp=0
Folder=boards/fds conversions
Compile=1
Link=1
Priority=1000
@@ -2568,7 +2558,7 @@ OverrideBuildCmd=0
BuildCmd=
[Unit263]
FileName=src\boards\232.c
FileName=src\boards\234.c
CompileCpp=0
Folder=boards/multigame boards
Compile=1
@@ -2588,16 +2578,6 @@ OverrideBuildCmd=0
BuildCmd=
[Unit287]
FileName=src\boards\vrc6.c
CompileCpp=0
Folder=boards/vrc based
Compile=1
Link=1
Priority=1000
OverrideBuildCmd=0
BuildCmd=
[Unit288]
FileName=src\boards\mmc2and4.c
CompileCpp=0
Folder=boards
@@ -2607,7 +2587,7 @@ Priority=1000
OverrideBuildCmd=0
BuildCmd=
[Unit289]
[Unit288]
FileName=src\boards\69.c
CompileCpp=0
Folder=boards
@@ -2617,7 +2597,7 @@ Priority=1000
OverrideBuildCmd=0
BuildCmd=
[Unit290]
[Unit289]
FileName=src\boards\vrc7.c
CompileCpp=0
Folder=boards/vrc based
@@ -2627,7 +2607,7 @@ Priority=1000
OverrideBuildCmd=0
BuildCmd=
[Unit291]
[Unit290]
FileName=src\boards\emu2413.c
CompileCpp=0
Folder=boards/vrc based
@@ -2637,7 +2617,7 @@ Priority=1000
OverrideBuildCmd=0
BuildCmd=
[Unit292]
[Unit291]
FileName=src\boards\mapinc.h
CompileCpp=0
Folder=_Headers
@@ -2647,8 +2627,18 @@ Priority=1000
OverrideBuildCmd=0
BuildCmd=
[Unit292]
FileName=src\boards\emu2413.h
CompileCpp=0
Folder=_Headers
Compile=1
Link=1
Priority=1000
OverrideBuildCmd=0
BuildCmd=
[Unit297]
FileName=src\boards\158B.c
FileName=src\boards\BMW8544.c
CompileCpp=0
Folder=boards/mmc3 based
Compile=1
@@ -2657,20 +2647,10 @@ Priority=1000
OverrideBuildCmd=0
BuildCmd=
[Unit298]
FileName=src\boards\addrlatch.c
CompileCpp=0
Folder=boards
Compile=1
Link=1
Priority=1000
OverrideBuildCmd=0
BuildCmd=
[Unit286]
FileName=src\boards\67.c
FileName=src\boards\vrc6.c
CompileCpp=0
Folder=boards
Folder=boards/vrc based
Compile=1
Link=1
Priority=1000
@@ -3088,9 +3068,9 @@ OverrideBuildCmd=0
BuildCmd=
[Unit293]
FileName=src\boards\emu2413.h
FileName=src\boards\178.c
CompileCpp=0
Folder=_Headers
Folder=boards/multigame boards
Compile=1
Link=1
Priority=1000
@@ -3098,9 +3078,9 @@ OverrideBuildCmd=0
BuildCmd=
[Unit294]
FileName=src\boards\178.c
FileName=src\boards\mihunche.c
CompileCpp=0
Folder=boards/multigame boards
Folder=boards
Compile=1
Link=1
Priority=1000
@@ -3158,16 +3138,6 @@ OverrideBuildCmd=0
BuildCmd=
[Unit295]
FileName=src\boards\mihunche.c
CompileCpp=0
Folder=boards
Compile=1
Link=1
Priority=1000
OverrideBuildCmd=0
BuildCmd=
[Unit296]
FileName=src\boards\coolboy.c
CompileCpp=0
Folder=boards/mmc3 based
@@ -3177,3 +3147,33 @@ Priority=1000
OverrideBuildCmd=0
BuildCmd=
[Unit296]
FileName=src\boards\158B.c
CompileCpp=0
Folder=boards/mmc3 based
Compile=1
Link=1
Priority=1000
OverrideBuildCmd=0
BuildCmd=
[Unit298]
FileName=src\boards\addrlatch.c
CompileCpp=0
Folder=boards
Compile=1
Link=1
Priority=1000
OverrideBuildCmd=0
BuildCmd=
[Unit260]
FileName=src\boards\228.c
CompileCpp=0
Folder=boards/multigame boards
Compile=1
Link=1
Priority=1000
OverrideBuildCmd=0
BuildCmd=

79
src/boards/BMW8544.c Normal file
View File

@@ -0,0 +1,79 @@
/* FCE Ultra - NES/Famicom Emulator
*
* Copyright notice for this file:
* Copyright (C) 2015 CaH4e3
*
* 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
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
* "Dragon Fighter" protected MMC3 based custom mapper board
* mostly hacky implementation, I can't verify if this mapper can read a RAM of the
* console or watches the bus writes somehow.
*
*/
#include "mapinc.h"
#include "mmc3.h"
static void UNLBMW8544PW(uint32 A, uint8 V) {
if(A == 0x8000)
setprg8(A,EXPREGS[0] & 0x1F); // the real hardware has this bank overrided with it's own register,
else // but MMC3 prg swap still works and you can actually change bank C000 at the same time if use 0x46 cmd
setprg8(A,V);
}
static void UNLBMW8544CW(uint32 A, uint8 V) {
if(A == 0x0000)
setchr2(0x0000,(V >> 1) ^ EXPREGS[1]);
else if (A == 0x0800)
setchr2(0x0800,(V >> 1) | ((EXPREGS[2] & 0x40) << 1));
else if (A == 0x1000)
setchr4(0x1000, EXPREGS[2] & 0x3F);
}
static DECLFW(UNLBMW8544ProtWrite) {
if(!(A & 1)) {
EXPREGS[0] = V;
FixMMC3PRG(MMC3_cmd);
}
}
static DECLFR(UNLBMW8544ProtRead) {
if(!fceuindbg) {
if(!(A & 1)) {
if((EXPREGS[0] & 0xE0) == 0xC0) {
EXPREGS[1] = ARead[0x6a](0x6a); // program can latch some data from the BUS, but I can't say how exactly,
} else { // without more euipment and skills ;) probably here we can try to get any write
EXPREGS[2] = ARead[0xff](0xff); // before the read operation
}
FixMMC3CHR(MMC3_cmd & 0x7F); // there are more different behaviour of the board isn't used by game itself, so unimplemented here and
} // actually will break the current logic ;)
}
return 0;
}
static void UNLBMW8544Power(void) {
GenMMC3Power();
SetWriteHandler(0x6000, 0x6FFF, UNLBMW8544ProtWrite);
SetReadHandler(0x6000, 0x6FFF, UNLBMW8544ProtRead);
}
void UNLBMW8544_Init(CartInfo *info) {
GenMMC3_Init(info, 128, 256, 0, 0);
pwrap = UNLBMW8544PW;
cwrap = UNLBMW8544CW;
info->Power = UNLBMW8544Power;
AddExState(EXPREGS, 3, 0, "EXPR");
}

View File

@@ -451,6 +451,7 @@ static BMAPPING bmap[] = {
{ "YOKO", UNLYOKO_Init, 0 },
{ "COOLBOY", COOLBOY_Init, BMCFLAG_256KCHRR },
{ "158B", UNL158B_Init, 0 },
{ "DRAGONFIGHTER", UNLBMW8544_Init, 0},
#ifdef COPYFAMI
{ "COPYFAMI_MMC3", MapperCopyFamiMMC3_Init, 0 },

View File

@@ -451,6 +451,7 @@ static BMAPPING bmap[] = {
{ "YOKO", UNLYOKO_Init, 0 },
{ "COOLBOY", COOLBOY_Init, BMCFLAG_256KCHRR },
{ "158B", UNL158B_Init, 0 },
{ "DRAGONFIGHTER", UNLBMW8544_Init, 0},
#ifdef COPYFAMI
{ "COPYFAMI_MMC3", MapperCopyFamiMMC3_Init, 0 },

View File

@@ -147,6 +147,7 @@ void UNLYOKO_Init(CartInfo *info);
void UNROM_Init(CartInfo *info);
void COOLBOY_Init(CartInfo *info);
void UNL158B_Init(CartInfo *info);
void UNLBMW8544_Init(CartInfo *info);
#ifdef COPYFAMI
void MapperCopyFamiMMC3_Init(CartInfo *info);