Merge branch 'finalburnneo-master'

This commit is contained in:
barbudreadmon 2020-06-25 16:59:39 +02:00
commit 716a5d0ffd
12 changed files with 358 additions and 19 deletions

View File

@ -20159,7 +20159,7 @@ struct BurnDriver BurnDrvMSX_deathwish3 = {
272, 228, 4, 3
};
// Martianoids
// Martianoids (Euro)
static struct BurnRomInfo MSX_martianoidsRomDesc[] = {
{ "martianoids.rom", 0x20000, 0xd796235c, BRF_PRG | BRF_ESS },
@ -20170,9 +20170,9 @@ STD_ROM_FN(MSX_martianoids)
struct BurnDriver BurnDrvMSX_martianoids = {
"msx_martianoids", NULL, "msx_msx", NULL, "1987",
"Martianoids\0", NULL, "Ultimate Play The Game", "MSX",
"Martianoids (Euro)\0", NULL, "Ultimate Play The Game", "MSX",
NULL, NULL, NULL, NULL,
BDF_GAME_WORKING, 2, HARDWARE_MSX, GBF_MISC, 0,
BDF_GAME_WORKING, 1, HARDWARE_MSX, GBF_MAZE, 0,
MSXGetZipName, MSX_martianoidsRomInfo, MSX_martianoidsRomName, NULL, NULL, NULL, NULL, MSXInputInfo, MSXDIPInfo,
DrvInit, DrvExit, DrvFrame, TMS9928ADraw, DrvScan, NULL, 0x10,
272, 228, 4, 3
@ -25379,3 +25379,284 @@ struct BurnDriver BurnDrvMSX_qbiqs = {
272, 228, 4, 3
};
// Avenger (Euro)
static struct BurnRomInfo MSX_avengerRomDesc[] = {
{ "avenger (1986)(gremlin graphics software)[bload'cas-',r].cas", 50675, 0x5bc59bf4, BRF_PRG | BRF_ESS },
};
STDROMPICKEXT(MSX_avenger, MSX_avenger, msx_msx)
STD_ROM_FN(MSX_avenger)
struct BurnDriver BurnDrvMSX_avenger = {
"msx_avenger", NULL, "msx_msx", NULL, "1986",
"Avenger (Euro)\0", NULL, "Gremlin Graphics Software", "MSX",
NULL, NULL, NULL, NULL,
BDF_GAME_WORKING, 1, HARDWARE_MSX, GBF_RUNGUN, 0,
MSXGetZipName, MSX_avengerRomInfo, MSX_avengerRomName, NULL, NULL, NULL, NULL, MSXInputInfo, MSXKeyClickDIPInfo,
CasBloadDrvInit, DrvExit, DrvFrame, TMS9928ADraw, DrvScan, NULL, 0x10,
272, 228, 4, 3
};
// Desperado (Spa)
static struct BurnRomInfo MSX_desperadoRomDesc[] = {
{ "desperado (1987)(topo soft)(es)(side a)[run'cas-'].cas", 42554, 0xfe84991c, BRF_PRG | BRF_ESS },
{ "desperado (1987)(topo soft)(es)(side b)[run'cas-'].cas", 120735, 0x9237dded, BRF_PRG | BRF_ESS },
};
STDROMPICKEXT(MSX_desperado, MSX_desperado, msx_msx)
STD_ROM_FN(MSX_desperado)
struct BurnDriver BurnDrvMSX_desperado = {
"msx_desperado", NULL, "msx_msx", NULL, "1987",
"Desperado (Spa)\0", NULL, "Topo Soft", "MSX",
NULL, NULL, NULL, NULL,
BDF_GAME_WORKING, 1, HARDWARE_MSX, GBF_RUNGUN, 0,
MSXGetZipName, MSX_desperadoRomInfo, MSX_desperadoRomName, NULL, NULL, NULL, NULL, MSXInputInfo, MSXEuropeJoyport2DIPInfo,
CasRunDrvInit, DrvExit, DrvFrame, TMS9928ADraw, DrvScan, NULL, 0x10,
272, 228, 4, 3
};
// Dodgin Raven (2009)(karoshi corp)(50hz) (HB)
static struct BurnRomInfo MSX_dgnravenRomDesc[] = {
{ "dodgin raven (2009)(karoshi corp)(50hz).rom", 24576, 0x8b5170df, BRF_PRG | BRF_ESS },
};
STDROMPICKEXT(MSX_dgnraven, MSX_dgnraven, msx_msx)
STD_ROM_FN(MSX_dgnraven)
struct BurnDriver BurnDrvMSX_dgnraven = {
"msx_dgnraven", NULL, "msx_msx", NULL, "2009",
"Dodgin Raven (HB)\0", NULL, "Karoshi Corp.", "MSX",
NULL, NULL, NULL, NULL,
BDF_GAME_WORKING | BDF_HOMEBREW, 1, HARDWARE_MSX, GBF_MISC, 0,
MSXGetZipName, MSX_dgnravenRomInfo, MSX_dgnravenRomName, NULL, NULL, NULL, NULL, MSXInputInfo, MSXEuropeDIPInfo,
DrvInit, DrvExit, DrvFrame, TMS9928ADraw, DrvScan, NULL, 0x10,
272, 228, 4, 3
};
// Drink It (2006)(crappysoft) (HB)
static struct BurnRomInfo MSX_drinkitRomDesc[] = {
{ "drink it (2006)(crappysoft).rom", 16384, 0x51163fcb, BRF_PRG | BRF_ESS },
};
STDROMPICKEXT(MSX_drinkit, MSX_drinkit, msx_msx)
STD_ROM_FN(MSX_drinkit)
struct BurnDriver BurnDrvMSX_drinkit = {
"msx_drinkit", NULL, "msx_msx", NULL, "2006",
"Drink It (HB)\0", NULL, "CrappySoft", "MSX",
NULL, NULL, NULL, NULL,
BDF_GAME_WORKING | BDF_HOMEBREW, 1, HARDWARE_MSX, GBF_ACTION, 0,
MSXGetZipName, MSX_drinkitRomInfo, MSX_drinkitRomName, NULL, NULL, NULL, NULL, MSXInputInfo, MSXDIPInfo,
DrvInit, DrvExit, DrvFrame, TMS9928ADraw, DrvScan, NULL, 0x10,
272, 228, 4, 3
};
// Elidon (Euro)
static struct BurnRomInfo MSX_elidonRomDesc[] = {
{ "elidon (1986)(aackosoft)[run'cas-'].cas", 31854, 0xb8b68e85, BRF_PRG | BRF_ESS },
};
STDROMPICKEXT(MSX_elidon, MSX_elidon, msx_msx)
STD_ROM_FN(MSX_elidon)
struct BurnDriver BurnDrvMSX_elidon = {
"msx_elidon", NULL, "msx_msx", NULL, "1986",
"Elidon (Euro)\0", NULL, "Aacksoft", "MSX",
NULL, NULL, NULL, NULL,
BDF_GAME_WORKING, 1, HARDWARE_MSX, GBF_MISC, 0,
MSXGetZipName, MSX_elidonRomInfo, MSX_elidonRomName, NULL, NULL, NULL, NULL, MSXInputInfo, MSXDIPInfo,
CasRunDrvInit, DrvExit, DrvFrame, TMS9928ADraw, DrvScan, NULL, 0x10,
272, 228, 4, 3
};
// Frog (Spa)
static struct BurnRomInfo MSX_frogRomDesc[] = {
{ "frog (1985)(advance)(es)[bload'cas-',r].cas", 5905, 0xe57e0f60, BRF_PRG | BRF_ESS },
};
STDROMPICKEXT(MSX_frog, MSX_frog, msx_msx)
STD_ROM_FN(MSX_frog)
struct BurnDriver BurnDrvMSX_frog = {
"msx_frog", NULL, "msx_msx", NULL, "1985",
"Frog (Spa)\0", NULL, "Advance", "MSX",
NULL, NULL, NULL, NULL,
BDF_GAME_WORKING, 1, HARDWARE_MSX, GBF_ACTION, 0,
MSXGetZipName, MSX_frogRomInfo, MSX_frogRomName, NULL, NULL, NULL, NULL, MSXInputInfo, MSXDIPInfo,
CasBloadDrvInit, DrvExit, DrvFrame, TMS9928ADraw, DrvScan, NULL, 0x10,
272, 228, 4, 3
};
// Isitar 7 (HB)
static struct BurnRomInfo MSX_isitar7RomDesc[] = {
{ "isitar 7 (2019)(n.i).rom", 32768, 0xd7795487, BRF_PRG | BRF_ESS },
};
STDROMPICKEXT(MSX_isitar7, MSX_isitar7, msx_msx)
STD_ROM_FN(MSX_isitar7)
struct BurnDriver BurnDrvMSX_isitar7 = {
"msx_isitar7", NULL, "msx_msx", NULL, "2019",
"Isitar 7 (HB)\0", NULL, "N.I", "MSX",
NULL, NULL, NULL, NULL,
BDF_GAME_WORKING | BDF_HOMEBREW, 1, HARDWARE_MSX, GBF_PUZZLE, 0,
MSXGetZipName, MSX_isitar7RomInfo, MSX_isitar7RomName, NULL, NULL, NULL, NULL, MSXInputInfo, MSXDIPInfo,
DrvInit, DrvExit, DrvFrame, TMS9928ADraw, DrvScan, NULL, 0x10,
272, 228, 4, 3
};
// Mars Lander (HB)
static struct BurnRomInfo MSX_marslandRomDesc[] = {
{ "mars lander (2006)(crappysoft).rom", 16384, 0xec316a71, BRF_PRG | BRF_ESS },
};
STDROMPICKEXT(MSX_marsland, MSX_marsland, msx_msx)
STD_ROM_FN(MSX_marsland)
struct BurnDriver BurnDrvMSX_marsland = {
"msx_marsland", NULL, "msx_msx", NULL, "2006",
"Mars Lander (HB)\0", NULL, "CrappySoft", "MSX",
NULL, NULL, NULL, NULL,
BDF_GAME_WORKING | BDF_HOMEBREW, 1, HARDWARE_MSX, GBF_ACTION, 0,
MSXGetZipName, MSX_marslandRomInfo, MSX_marslandRomName, NULL, NULL, NULL, NULL, MSXInputInfo, MSXDIPInfo,
DrvInit, DrvExit, DrvFrame, TMS9928ADraw, DrvScan, NULL, 0x10,
272, 228, 4, 3
};
// Merlin (Spa)
static struct BurnRomInfo MSX_merlinRomDesc[] = {
{ "merlin (1987)(mind games espana)(es)[bload'cas-',r].cas", 22039, 0x66826eaa, BRF_PRG | BRF_ESS },
};
STDROMPICKEXT(MSX_merlin, MSX_merlin, msx_msx)
STD_ROM_FN(MSX_merlin)
struct BurnDriver BurnDrvMSX_merlin = {
"msx_merlin", NULL, "msx_msx", NULL, "1987",
"Merlin (Spa)\0", NULL, "Mind Games Espana", "MSX",
NULL, NULL, NULL, NULL,
BDF_GAME_WORKING, 1, HARDWARE_MSX, GBF_PLATFORM, 0,
MSXGetZipName, MSX_merlinRomInfo, MSX_merlinRomName, NULL, NULL, NULL, NULL, MSXInputInfo, MSXDIPInfo,
CasBloadDrvInit, DrvExit, DrvFrame, TMS9928ADraw, DrvScan, NULL, 0x10,
272, 228, 4, 3
};
// Nogalious Demo (HB)
static struct BurnRomInfo MSX_nogalsdemoRomDesc[] = {
{ "nogalious demo (2018)(luegolu3go).rom", 524288, 0x8728e3e9, BRF_PRG | BRF_ESS },
};
STDROMPICKEXT(MSX_nogalsdemo, MSX_nogalsdemo, msx_msx)
STD_ROM_FN(MSX_nogalsdemo)
struct BurnDriver BurnDrvMSX_nogalsdemo = {
"msx_nogalsdemo", NULL, "msx_msx", NULL, "2018",
"Nogalious Demo (HB)\0", NULL, "LuegoLu3go", "MSX",
NULL, NULL, NULL, NULL,
BDF_GAME_WORKING | BDF_HOMEBREW, 1, HARDWARE_MSX, GBF_PLATFORM, 0,
MSXGetZipName, MSX_nogalsdemoRomInfo, MSX_nogalsdemoRomName, NULL, NULL, NULL, NULL, MSXInputInfo, MSXDIPInfo,
DrvInit, DrvExit, DrvFrame, TMS9928ADraw, DrvScan, NULL, 0x10,
272, 228, 4, 3
};
// Soukoban Pocket Edition (HB)
static struct BurnRomInfo MSX_sokobanpeRomDesc[] = {
{ "soukoban pocket edition (2004)(karoshi corp).rom", 8192, 0xd523be9f, BRF_PRG | BRF_ESS },
};
STDROMPICKEXT(MSX_sokobanpe, MSX_sokobanpe, msx_msx)
STD_ROM_FN(MSX_sokobanpe)
struct BurnDriver BurnDrvMSX_sokobanpe = {
"msx_sokobanpe", NULL, "msx_msx", NULL, "2004",
"Soukoban Pocket Edition (HB)\0", NULL, "Karoshi Corp.", "MSX",
NULL, NULL, NULL, NULL,
BDF_GAME_WORKING | BDF_HOMEBREW, 1, HARDWARE_MSX, GBF_PUZZLE, 0,
MSXGetZipName, MSX_sokobanpeRomInfo, MSX_sokobanpeRomName, NULL, NULL, NULL, NULL, MSXInputInfo, MSXDIPInfo,
DrvInit, DrvExit, DrvFrame, TMS9928ADraw, DrvScan, NULL, 0x10,
272, 228, 4, 3
};
// Speed King (Euro)
static struct BurnRomInfo MSX_speedkingRomDesc[] = {
{ "speed king (1986)(mastertronic)[run'cas-'].cas", 26629, 0xc0ea7c7d, BRF_PRG | BRF_ESS },
};
STDROMPICKEXT(MSX_speedking, MSX_speedking, msx_msx)
STD_ROM_FN(MSX_speedking)
struct BurnDriver BurnDrvMSX_speedking = {
"msx_speedking", NULL, "msx_msx", NULL, "1986",
"Speed King (Euro)\0", NULL, "Mastertronic", "MSX",
NULL, NULL, NULL, NULL,
BDF_GAME_WORKING, 1, HARDWARE_MSX, GBF_RACING, 0,
MSXGetZipName, MSX_speedkingRomInfo, MSX_speedkingRomName, NULL, NULL, NULL, NULL, MSXInputInfo, MSXDIPInfo,
CasRunDrvInit, DrvExit, DrvFrame, TMS9928ADraw, DrvScan, NULL, 0x10,
272, 228, 4, 3
};
// Thing Bounces Back (Euro)
static struct BurnRomInfo MSX_tbbackRomDesc[] = {
{ "thing bounces back (1987)(gremlin graphics software)[bload'cas-',r].cas", 67282, 0x3838a116, BRF_PRG | BRF_ESS },
};
STDROMPICKEXT(MSX_tbback, MSX_tbback, msx_msx)
STD_ROM_FN(MSX_tbback)
struct BurnDriver BurnDrvMSX_tbback = {
"msx_tbback", NULL, "msx_msx", NULL, "1987",
"Thing Bounces Back (Euro)\0", NULL, "Gremlin Graphics Software", "MSX",
NULL, NULL, NULL, NULL,
BDF_GAME_WORKING, 1, HARDWARE_MSX, GBF_PLATFORM, 0,
MSXGetZipName, MSX_tbbackRomInfo, MSX_tbbackRomName, NULL, NULL, NULL, NULL, MSXInputInfo, MSXDIPInfo,
CasBloadDrvInit, DrvExit, DrvFrame, TMS9928ADraw, DrvScan, NULL, 0x10,
272, 228, 4, 3
};
// Virus LQP-79 (HB, v1.1)
static struct BurnRomInfo MSX_viruslqpRomDesc[] = {
{ "virus lqp-79 (2018)(pentacour)(v1.10).rom", 49152, 0x60f82bf6, BRF_PRG | BRF_ESS },
};
STDROMPICKEXT(MSX_viruslqp, MSX_viruslqp, msx_msx)
STD_ROM_FN(MSX_viruslqp)
struct BurnDriver BurnDrvMSX_viruslqp = {
"msx_viruslqp", NULL, "msx_msx", NULL, "2018",
"Virus LQP-79 (HB, v1.1)\0", NULL, "Pentacour", "MSX",
NULL, NULL, NULL, NULL,
BDF_GAME_WORKING | BDF_HOMEBREW, 1, HARDWARE_MSX, GBF_RUNGUN, 0,
MSXGetZipName, MSX_viruslqpRomInfo, MSX_viruslqpRomName, NULL, NULL, NULL, NULL, MSXInputInfo, MSXDIPInfo,
DrvInit, DrvExit, DrvFrame, TMS9928ADraw, DrvScan, NULL, 0x10,
272, 228, 4, 3
};

View File

@ -10676,6 +10676,23 @@ struct BurnDriver BurnDrvnes_ruder = {
// Homebrew (hand-added)
static struct BurnRomInfo nes_pacmanceRomDesc[] = {
{ "pacman-ce (2020).nes", 262160, 0xb86c09af, BRF_ESS | BRF_PRG },
};
STD_ROM_PICK(nes_pacmance)
STD_ROM_FN(nes_pacmance)
struct BurnDriver BurnDrvnes_pacmance = {
"nes_pacmance", NULL, NULL, NULL, "2020",
"Pac-Man Championship Edition (HB)\0", NULL, "BNEI", "Miscellaneous",
NULL, NULL, NULL, NULL,
BDF_GAME_WORKING | BDF_HOMEBREW, 2, HARDWARE_NES, GBF_MAZE, 0,
NESGetZipName, nes_pacmanceRomInfo, nes_pacmanceRomName, NULL, NULL, NULL, NULL, NESInputInfo, NESDIPInfo,
NESInit, NESExit, NESFrame, NESDraw, NESScan, &NESRecalc, 0x40,
SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_WIDTH, SCREEN_HEIGHT
};
static struct BurnRomInfo nes_badappleRomDesc[] = {
{ "bad_apple (2015 v2.5)(Little Limit).nes", 786448, 0xf96a5a8b, BRF_ESS | BRF_PRG },
};

View File

@ -6536,7 +6536,7 @@ STD_ROM_FN(kovytzyce)
struct BurnDriver BurnDrvkovytzyce = {
"kovytzyce", "kovshp", "pgm", NULL, "2019",
"Knights of Valour Super Heroes / Yi Tong Zhong Yuan Qing Ban (2019-5, hack)\0", "Imperfect Protection Emulation", "Hack", "PolyGameMaster",
L"Knights of Valour Super Heroes / Yi Tong Zhong Yuan Qing Ban (2019-5, hack)\0\u4E09\u56FD\u6218\u7EAA - \u4E00\u7EDF\u4E2D\u539F\u0020\u9752\u7248 (2019-5, \u4FEE\u6539\u7248)\0", NULL, NULL, NULL,
L"Knights of Valour Super Heroes / Yi Tong Zhong Yuan Qing Ban (2019-5, hack)\0\u4E09\u56FD\u6218\u7EAA - \u4E00\u7EDF\u4E2D\u539F \u9752\u7248 (2019-5, \u4FEE\u6539\u7248)\0", NULL, NULL, NULL,
BDF_GAME_WORKING | BDF_CLONE | BDF_BOOTLEG | BDF_HACK, 4, HARDWARE_IGS_PGM | HARDWARE_IGS_USE_ARM_CPU, GBF_SCRFIGHT, 0,
NULL, kovytzyceRomInfo, kovytzyceRomName, NULL, NULL, NULL, NULL, pgmInputInfo, kovshxasDIPInfo,
kovshpInit, pgmExit, pgmFrame, pgmDraw, pgmScan, &nPgmPalRecalc, 0x900,
@ -6570,9 +6570,9 @@ STD_ROM_FN(kovytzyws)
struct BurnDriver BurnDrvkovytzyws = {
"kovytzyws", "kovshp", "pgm", NULL, "2018",
"Knights of Valour Super Heroes / Yi Tong Zhong Yuan Wu Shuang Ban (2019-0, hack)\0", "Imperfect Protection Emulation", "Hack", "PolyGameMaster",
L"Knights of Valour Super Heroes / Yi Tong Zhong Yuan Wu Shuang Ban (2019-0, hack)\0\u4E09\u56FD\u6218\u7EAA - \u4E00\u7EDF\u4E2D\u539F\u0020\u65E0\u53CC\u7248 (2019-0, \u4FEE\u6539\u7248)\0", NULL, NULL, NULL,
L"Knights of Valour Super Heroes / Yi Tong Zhong Yuan Wu Shuang Ban (2019-0, hack)\0\u4E09\u56FD\u6218\u7EAA - \u4E00\u7EDF\u4E2D\u539F \u65E0\u53CC\u7248 (2019-0, \u4FEE\u6539\u7248)\0", NULL, NULL, NULL,
BDF_GAME_WORKING | BDF_CLONE | BDF_BOOTLEG | BDF_HACK, 4, HARDWARE_IGS_PGM | HARDWARE_IGS_USE_ARM_CPU, GBF_SCRFIGHT, 0,
NULL, kovytzywsRomInfo, kovytzywsRomName, NULL, NULL, NULL, NULL, pgmInputInfo, kovshxasDIPInfo,
kovshpInit, pgmExit, pgmFrame, pgmDraw, pgmScan, &nPgmPalRecalc, 0x900,
448, 224, 4, 3
};
};

View File

@ -1794,7 +1794,7 @@ static INT32 DrvInit()
if (game_type == 10) // reactor
{
VezInit(0, V20_TYPE); // really i8088, but v20 is compatible
VezInit(0, i86_TYPE); // really i8088, but v20 is compatible
VezOpen(0);
VezMapMemory(DrvDummyROM, 0x0000, 0x1fff, MAP_RAM); // RAM (reactor)
VezMapMemory(DrvVideoRAM, 0x3000, 0x33ff, MAP_RAM);
@ -1809,7 +1809,7 @@ static INT32 DrvInit()
}
else // standard
{
VezInit(0, V20_TYPE); // really i8088, but v20 is compatible
VezInit(0, i86_TYPE); // really i8088, but v20 is compatible
VezOpen(0);
VezMapMemory(DrvNVRAM, 0x0000, 0x0fff, MAP_RAM);
VezMapMemory(DrvDummyROM + 0x0000, 0x1000, 0x1fff, DummyRegion[0]); // ROM for argus, krull, vidvince & 3stooges, RAM for all others

View File

@ -922,18 +922,18 @@ struct BurnDriver BurnDrvsms_alexkiddj = {
};
// Alex Kidd in Radaxian Rumble 1.02e
// Alex Kidd in Radaxian Rumble 1.5
static struct BurnRomInfo sms_alexkiddrrRomDesc[] = {
{ "akrr102e.sms", 0x80000, 0x368b64b0, BRF_PRG | BRF_ESS },
{ "Alex Kidd in Radaxian Rumble 1.5.sms", 0x80000, 0x02760e17, BRF_PRG | BRF_ESS },
};
STD_ROM_PICK(sms_alexkiddrr)
STD_ROM_FN(sms_alexkiddrr)
struct BurnDriver BurnDrvsms_alexkiddrr = {
"sms_akrr102e", "sms_alexkidd", NULL, NULL, "2015",
"Alex Kidd in Radaxian Rumble (ver. 1.02e)\0", NULL, "Sega", "Sega Master System",
"sms_alexkiddrr", "sms_alexkidd", NULL, NULL, "2015",
"Alex Kidd in Radaxian Rumble (ver. 1.5)\0", NULL, "Sega", "Sega Master System",
NULL, NULL, NULL, NULL,
BDF_GAME_WORKING | BDF_CLONE, 1, HARDWARE_SEGA_MASTER_SYSTEM, GBF_PLATFORM, 0,
SMSGetZipName, sms_alexkiddrrRomInfo, sms_alexkiddrrRomName, NULL, NULL, NULL, NULL, SMSInputInfo, SMSDIPInfo,

View File

@ -1035,7 +1035,7 @@ void nesapuInit(INT32 chip, INT32 clock, INT32 is_pal, UINT32 (*pSyncCallback)(I
info->samples_per_frame = ((info->real_rate * 100) / nBurnFPS) + 1;
info->nSampleSize = (UINT64)info->real_rate * (1 << 16) / nBurnSoundRate;
info->nSampleSize = (UINT64)info->real_rate * (1 << 16) / ((nBurnSoundRate == 0) ? 44100 : nBurnSoundRate);
info->nFractionalPosition = 0;

View File

@ -454,6 +454,12 @@ void necInit(int cpu, int type)
switch (type)
{
case i86_TYPE:
{
bprintf(0, _T("*** NEC v20 w/i86 NEG opcodes (f6 18, f7 18)\n"));
nec_state->i86_neg = 1;
// fallthrough to V20_TYPE
}
case V20_TYPE:
{
nec_state->fetch_xor = 0;

View File

@ -612,13 +612,27 @@ OP( 0xf3, i_repe ) { UINT32 next = fetchop(nec_state); UINT16 c = Wreg(CW);
}
OP( 0xf4, i_hlt ) { nec_state->halted=1; nec_state->icount=0; }
OP( 0xf5, i_cmc ) { nec_state->CarryVal = !CF; CLK(2); }
OP( 0xf6, i_f6pre ) { UINT32 tmp; UINT32 uresult,uresult2; INT32 result,result2;
GetModRM; tmp = GetRMByte(ModRM);
OP( 0xf6, i_f6pre ) { UINT32 tmp; UINT32 uresult,uresult2,dst,src; INT32 result,result2;
GetModRM; tmp = src = GetRMByte(ModRM);
switch (ModRM & 0x38) {
case 0x00: tmp &= FETCH(); nec_state->CarryVal = nec_state->OverVal = 0; SetSZPF_Byte(tmp); nec_state->icount-=(ModRM >=0xc0 )?4:11; break; /* TEST */
// case 0x08: logerror("%06x: Undefined opcode 0xf6 0x08\n",PC(nec_state)); break;
case 0x10: PutbackRMByte(ModRM,~tmp); nec_state->icount-=(ModRM >=0xc0 )?2:16; break; /* NOT */
case 0x18: nec_state->CarryVal=(tmp!=0); tmp=(~tmp)+1; SetSZPF_Byte(tmp); PutbackRMByte(ModRM,tmp&0xff); nec_state->icount-=(ModRM >=0xc0 )?2:16; break; /* NEG */
case 0x18:
if (nec_state->i86_neg == 0)
{
nec_state->CarryVal=(tmp!=0);
tmp=(~tmp)+1;
SetSZPF_Byte(tmp);
PutbackRMByte(ModRM,tmp&0xff);
nec_state->icount-=(ModRM >=0xc0 )?2:16;
} else {
dst = 0;
SUBB
PutbackRMByte(ModRM,dst&0xff);
nec_state->icount-=(ModRM >=0xc0 )?2:16;
}
break; /* NEG */
case 0x20: uresult = Breg(AL)*tmp; Wreg(AW)=(WORD)uresult; nec_state->CarryVal=nec_state->OverVal=(Breg(AH)!=0); nec_state->icount-=(ModRM >=0xc0 )?30:36; break; /* MULU */
case 0x28: result = (INT16)((INT8)Breg(AL))*(INT16)((INT8)tmp); Wreg(AW)=(WORD)result; nec_state->CarryVal=nec_state->OverVal=(Breg(AH)!=0); nec_state->icount-=(ModRM >=0xc0 )?30:36; break; /* MUL */
case 0x30: if (tmp) { DIVUB; } else nec_interrupt(nec_state, NEC_DIVIDE_VECTOR, BRK); nec_state->icount-=(ModRM >=0xc0 )?43:53; break;
@ -626,13 +640,28 @@ OP( 0xf6, i_f6pre ) { UINT32 tmp; UINT32 uresult,uresult2; INT32 result,result2;
}
}
OP( 0xf7, i_f7pre ) { UINT32 tmp,tmp2; UINT32 uresult,uresult2; INT32 result,result2;
GetModRM; tmp = GetRMWord(ModRM);
OP( 0xf7, i_f7pre ) { UINT32 tmp,tmp2; UINT32 uresult,uresult2,dst,src; INT32 result,result2;
GetModRM; tmp = src = GetRMWord(ModRM);
switch (ModRM & 0x38) {
case 0x00: tmp2 = FETCHWORD(); tmp &= tmp2; nec_state->CarryVal = nec_state->OverVal = 0; SetSZPF_Word(tmp); nec_state->icount-=(ModRM >=0xc0 )?4:11; break; /* TEST */
// case 0x08: logerror("%06x: Undefined opcode 0xf7 0x08\n",PC(nec_state)); break;
case 0x10: PutbackRMWord(ModRM,~tmp); nec_state->icount-=(ModRM >=0xc0 )?2:16; break; /* NOT */
case 0x18: nec_state->CarryVal=(tmp!=0); tmp=(~tmp)+1; SetSZPF_Word(tmp); PutbackRMWord(ModRM,tmp&0xffff); nec_state->icount-=(ModRM >=0xc0 )?2:16; break; /* NEG */
case 0x18:
if (nec_state->i86_neg == 0)
{
nec_state->CarryVal=(tmp!=0);
tmp=(~tmp)+1;
SetSZPF_Word(tmp);
PutbackRMWord(ModRM,tmp&0xffff);
nec_state->icount-=(ModRM >=0xc0 )?2:16;
} else {
dst = 0;
SUBW
PutbackRMWord(ModRM,dst&0xffff);
nec_state->icount-=(ModRM >=0xc0 )?2:16;
}
break; /* NEG */
case 0x20: uresult = Wreg(AW)*tmp; Wreg(AW)=uresult&0xffff; Wreg(DW)=((UINT32)uresult)>>16; nec_state->CarryVal=nec_state->OverVal=(Wreg(DW)!=0); nec_state->icount-=(ModRM >=0xc0 )?30:36; break; /* MULU */
case 0x28: result = (INT32)((INT16)Wreg(AW))*(INT32)((INT16)tmp); Wreg(AW)=result&0xffff; Wreg(DW)=result>>16; nec_state->CarryVal=nec_state->OverVal=(Wreg(DW)!=0); nec_state->icount-=(ModRM >=0xc0 )?30:36; break; /* MUL */
case 0x30: if (tmp) { DIVUW; } else nec_interrupt(nec_state, NEC_DIVIDE_VECTOR, BRK); nec_state->icount-=(ModRM >=0xc0 )?43:53; break;

View File

@ -2,6 +2,7 @@
#define V33_TYPE 0
#define V30_TYPE 8
#define V20_TYPE 16
#define i86_TYPE 32
#ifndef FALSE
#define FALSE 0
@ -66,6 +67,7 @@ struct _nec_state_t
INT8 prefetch_count;
UINT8 prefetch_reset;
UINT32 chip_type;
UINT32 i86_neg; // use x86-style NEG opcode (f6 18 & f7 18)
UINT32 prefix_base; /* base address of the latest prefix segment */
UINT8 seg_prefix; /* prefix segment indicator */

View File

@ -2,6 +2,7 @@
#define V33_TYPE 0
#define V30_TYPE 8
#define V20_TYPE 16
#define i86_TYPE 32
#ifndef FALSE
#define FALSE 0
@ -117,6 +118,7 @@ struct _v25_state_t
INT8 prefetch_count;
UINT8 prefetch_reset;
UINT32 chip_type;
UINT32 i86_neg; // use x86-style NEG opcode (f6 18 & f7 18)
UINT32 prefix_base; /* base address of the latest prefix segment */
UINT8 seg_prefix; /* prefix segment indicator */

View File

@ -348,6 +348,7 @@ INT32 VezInit(INT32 cpu, INT32 type, INT32 clock)
switch (type)
{
case i86_TYPE:
case V20_TYPE:
case V30_TYPE:
case V33_TYPE:

View File

@ -8,6 +8,7 @@
#define V33_TYPE 0
#define V30_TYPE 8
#define V20_TYPE 16
#define i86_TYPE 32
#define V25_TYPE (V20_TYPE|(1<<16))
#define V35_TYPE (V30_TYPE|(1<<16))