Small megasys1 update.

This commit is contained in:
iq_132 2015-02-18 03:00:43 +00:00
parent 4154bef1dc
commit 7662c543db
1 changed files with 240 additions and 98 deletions

View File

@ -1839,6 +1839,11 @@ static void __fastcall megasys1B_main_write_byte(UINT32 address, UINT8 data)
input_select = data; input_select = data;
SekSetIRQLine(2, CPU_IRQSTATUS_AUTO); SekSetIRQLine(2, CPU_IRQSTATUS_AUTO);
return; return;
case 0x0e000e: // edf bootleg..
case 0x0e000f:
MSM6295Command(0, data);
return;
} }
} }
@ -1862,8 +1867,9 @@ static void __fastcall megasys1B_main_write_word(UINT32 address, UINT16 data)
SekSetIRQLine(2, CPU_IRQSTATUS_AUTO); SekSetIRQLine(2, CPU_IRQSTATUS_AUTO);
return; return;
case 0x0e000e: // edf bootleg... case 0x0e000e: // edf bootleg..
// MSM6295Command(0, data); case 0x0e000f:
MSM6295Command(0, data);
return; return;
} }
} }
@ -2642,77 +2648,6 @@ static INT32 DrvLoadRoms()
return 0; return 0;
} }
static INT32 System1ZInit(void (*pRomLoadCallback)())
{
system_select = 0;
AllMem = NULL;
MemIndex();
INT32 nLen = MemEnd - (UINT8 *)0;
if ((AllMem = (UINT8 *)BurnMalloc(nLen)) == NULL) return 1;
memset(AllMem, 0, nLen);
MemIndex();
{
if (DrvLoadRoms()) return 1;
if (pRomLoadCallback) {
pRomLoadCallback();
}
DrvGfxDecode(0, 0x080000, 0);
DrvGfxDecode(1, 0x080000, 0);
DrvGfxDecode(2, 0x080000, 0);
DrvGfxDecode(3, 0x100000, 1);
}
SekInit(0, 0x68000);
SekOpen(0);
SekMapMemory(Drv68KROM0, 0x000000, 0x05ffff, MAP_ROM);
SekMapMemory(DrvVidRegs, 0x084000, 0x0843ff, MAP_ROM /*MAP_WRITE*/);
SekMapMemory(DrvPalRAM, 0x088000, 0x0887ff, MAP_ROM /*MAP_WRITE*/);
SekMapMemory(DrvObjRAM, 0x08e000, 0x08ffff, MAP_RAM);
SekMapMemory(DrvScrRAM[0], 0x090000, 0x093fff, MAP_RAM);
SekMapMemory(DrvScrRAM[1], 0x094000, 0x097fff, MAP_RAM);
SekMapMemory(DrvScrRAM[2], 0x098000, 0x09bfff, MAP_RAM);
SekMapMemory(Drv68KRAM0, 0x0f0000, 0x0fffff, MAP_RAM);
SekSetReadWordHandler(0, megasys1A_main_read_word);
SekSetReadByteHandler(0, megasys1A_main_read_byte);
SekSetWriteWordHandler(0, megasys1A_main_write_word);
SekSetWriteByteHandler(0, megasys1A_main_write_byte);
SekMapHandler(1, 0x088000, 0x0887ff, MAP_WRITE);
SekSetWriteWordHandler(1, megasys_palette_write_word);
SekSetWriteByteHandler(1, megasys_palette_write_byte);
SekClose();
ZetInit(0);
ZetOpen(0);
ZetMapMemory(DrvZ80ROM, 0x0000, 0x3fff, MAP_ROM);
ZetMapMemory(DrvZ80RAM, 0xc000, 0xc7ff, MAP_RAM);
ZetSetWriteHandler(megasys1z_sound_write);
ZetSetReadHandler(megasys1z_sound_read);
ZetSetOutHandler(megasys1z_sound_write_port);
ZetSetInHandler(megasys1z_sound_read_port);
ZetClose();
BurnYM2203Init(2, 1500000, &DrvYM2203IRQHandler, DrvSynchroniseStream, DrvGetTime, 0);
BurnTimerAttachZet(3000000);
BurnYM2203SetAllRoutes(0, 0.50, BURN_SND_ROUTE_BOTH);
BurnYM2203SetAllRoutes(1, 0.50, BURN_SND_ROUTE_BOTH);
layer_color_config[0] = 0;
layer_color_config[1] = 0x200;
layer_color_config[2] = 0; // layer doesn't exist
layer_color_config[3] = 0x100; // sprites
GenericTilesInit();
DrvDoReset();
return 0;
}
static INT32 SystemInit(INT32 nSystem, void (*pRomLoadCallback)()) static INT32 SystemInit(INT32 nSystem, void (*pRomLoadCallback)())
{ {
AllMem = NULL; AllMem = NULL;
@ -2729,6 +2664,10 @@ static INT32 SystemInit(INT32 nSystem, void (*pRomLoadCallback)())
pRomLoadCallback(); pRomLoadCallback();
} }
FILE *fa = fopen("z68krom","wb");
fwrite (Drv68KROM0,0x80000,1,fa);
fclose (fa);
DrvGfxDecode(0, 0x080000, 0); DrvGfxDecode(0, 0x080000, 0);
DrvGfxDecode(1, 0x080000, 0); DrvGfxDecode(1, 0x080000, 0);
DrvGfxDecode(2, 0x080000, 0); DrvGfxDecode(2, 0x080000, 0);
@ -2739,6 +2678,30 @@ static INT32 SystemInit(INT32 nSystem, void (*pRomLoadCallback)())
switch (system_select) switch (system_select)
{ {
case 0x0: // system Z
{
SekInit(0, 0x68000);
SekOpen(0);
SekMapMemory(Drv68KROM0, 0x000000, 0x05ffff, MAP_ROM);
SekMapMemory(DrvVidRegs, 0x084000, 0x0843ff, MAP_ROM /*MAP_WRITE*/);
SekMapMemory(DrvPalRAM, 0x088000, 0x0887ff, MAP_ROM /*MAP_WRITE*/);
SekMapMemory(DrvObjRAM, 0x08e000, 0x08ffff, MAP_RAM);
SekMapMemory(DrvScrRAM[0], 0x090000, 0x093fff, MAP_RAM);
SekMapMemory(DrvScrRAM[1], 0x094000, 0x097fff, MAP_RAM);
SekMapMemory(DrvScrRAM[2], 0x098000, 0x09bfff, MAP_RAM);
SekMapMemory(Drv68KRAM0, 0x0f0000, 0x0fffff, MAP_RAM);
SekSetReadWordHandler(0, megasys1A_main_read_word);
SekSetReadByteHandler(0, megasys1A_main_read_byte);
SekSetWriteWordHandler(0, megasys1A_main_write_word);
SekSetWriteByteHandler(0, megasys1A_main_write_byte);
SekMapHandler(1, 0x088000, 0x0887ff, MAP_WRITE);
SekSetWriteWordHandler(1, megasys_palette_write_word);
SekSetWriteByteHandler(1, megasys_palette_write_byte);
SekClose();
}
break;
case 0xA: // system A case 0xA: // system A
{ {
SekInit(0, 0x68000); SekInit(0, 0x68000);
@ -2844,29 +2807,54 @@ static INT32 SystemInit(INT32 nSystem, void (*pRomLoadCallback)())
break; break;
} }
// not in system D if (system_select == 0) // system Z
SekInit(1, 0x68000); {
SekOpen(1); ZetInit(0);
SekMapMemory(Drv68KROM1, 0x000000, 0x01ffff, MAP_ROM); ZetOpen(0);
SekMapMemory(Drv68KRAM1, 0x0e0000, 0x0fffff, MAP_RAM); ZetMapMemory(DrvZ80ROM, 0x0000, 0x3fff, MAP_ROM);
SekSetReadWordHandler(0, megasys_sound_read_word); ZetMapMemory(DrvZ80RAM, 0xc000, 0xc7ff, MAP_RAM);
SekSetReadByteHandler(0, megasys_sound_read_byte); ZetSetWriteHandler(megasys1z_sound_write);
SekSetWriteWordHandler(0, megasys_sound_write_word); ZetSetReadHandler(megasys1z_sound_read);
SekSetWriteByteHandler(0, megasys_sound_write_byte); ZetSetOutHandler(megasys1z_sound_write_port);
SekClose(); ZetSetInHandler(megasys1z_sound_read_port);
ZetClose();
// not in system D BurnYM2203Init(2, 1500000, &DrvYM2203IRQHandler, DrvSynchroniseStream, DrvGetTime, 0);
BurnYM2151Init(3500000); BurnTimerAttachZet(3000000);
BurnYM2151SetIrqHandler(&DrvYM2151IrqHandler); BurnYM2203SetAllRoutes(0, 0.50, BURN_SND_ROUTE_BOTH);
BurnYM2151SetRoute(BURN_SND_YM2151_YM2151_ROUTE_1, 0.80, BURN_SND_ROUTE_LEFT); BurnYM2203SetAllRoutes(1, 0.50, BURN_SND_ROUTE_BOTH);
BurnYM2151SetRoute(BURN_SND_YM2151_YM2151_ROUTE_2, 0.80, BURN_SND_ROUTE_RIGHT);
MSM6295Init(0, ((system_select == 0xD) ? 2000000 : 4000000) / 132, 1); layer_color_config[0] = 0;
MSM6295SetRoute(0, 0.30, BURN_SND_ROUTE_BOTH); layer_color_config[1] = 0x200;
layer_color_config[2] = 0; // layer doesn't exist
layer_color_config[3] = 0x100; // sprites
}
else
{
// not in system D
SekInit(1, 0x68000);
SekOpen(1);
SekMapMemory(Drv68KROM1, 0x000000, 0x01ffff, MAP_ROM);
SekMapMemory(Drv68KRAM1, 0x0e0000, 0x0fffff, MAP_RAM);
SekSetReadWordHandler(0, megasys_sound_read_word);
SekSetReadByteHandler(0, megasys_sound_read_byte);
SekSetWriteWordHandler(0, megasys_sound_write_word);
SekSetWriteByteHandler(0, megasys_sound_write_byte);
SekClose();
// not in system D // not in system D
MSM6295Init(1, 4000000 / 132, 1); BurnYM2151Init(3500000);
MSM6295SetRoute(1, 0.30, BURN_SND_ROUTE_BOTH); BurnYM2151SetIrqHandler(&DrvYM2151IrqHandler);
BurnYM2151SetRoute(BURN_SND_YM2151_YM2151_ROUTE_1, 0.80, BURN_SND_ROUTE_LEFT);
BurnYM2151SetRoute(BURN_SND_YM2151_YM2151_ROUTE_2, 0.80, BURN_SND_ROUTE_RIGHT);
MSM6295Init(0, ((system_select == 0xD) ? 2000000 : 4000000) / 132, 1);
MSM6295SetRoute(0, 0.30, BURN_SND_ROUTE_BOTH);
// not in system D
MSM6295Init(1, 4000000 / 132, 1);
MSM6295SetRoute(1, 0.30, BURN_SND_ROUTE_BOTH);
}
GenericTilesInit(); GenericTilesInit();
@ -4847,18 +4835,100 @@ static struct BurnRomInfo monkelfRomDesc[] = {
STD_ROM_PICK(monkelf) STD_ROM_PICK(monkelf)
STD_ROM_FN(monkelf) STD_ROM_FN(monkelf)
static UINT16 __fastcall monkelf_read_word(UINT32 address)
{
switch (address)
{
case 0xe0002:
return DrvInputs[1];
case 0xe0004:
return DrvInputs[2];
case 0xe0006:
return DrvDips[0];
case 0xe0008:
return DrvDips[1];
case 0xe000a:
return DrvInputs[0];
}
return 0xffff;
}
static UINT8 __fastcall monkelf_read_byte(UINT32 address)
{
switch (address)
{
case 0xe0002:
return DrvInputs[1] >> 8;
case 0xe0003:
return DrvInputs[1];
case 0xe0004:
return DrvInputs[2] >> 8;
case 0xe0005:
return DrvInputs[2];
case 0xe0006:
case 0xe0007:
return DrvDips[0];
case 0xe0008:
case 0xe0009:
return DrvDips[1];
case 0xe000a:
return DrvInputs[0] >> 8;
case 0xe000b:
return DrvInputs[0];
}
return 0xff;
}
static void monkelfCallback() static void monkelfCallback()
{ {
*((UINT16*)(Drv68KROM0 + 0x744)) = 0x4e71; // hack *((UINT16*)(Drv68KROM0 + 0x0744)) = 0x4e71; // bypass trap (why?)
*((UINT16*)(Drv68KROM0 + 0x2d74)) = 0x30ea; // use standard scrolling
*((UINT16*)(Drv68KROM0 + 0x2d76)) = 0x0004;
*((UINT16*)(Drv68KROM0 + 0x2d78)) = 0x0280;
*((UINT16*)(Drv68KROM0 + 0x2db8)) = 0x30c1; // more scroll fixes
*((UINT16*)(Drv68KROM0 + 0x2dba)) = 0xc3c0;
*((UINT16*)(Drv68KROM0 + 0x2dbc)) = 0xe841;
*((UINT16*)(Drv68KROM0 + 0x2dbe)) = 0x32c2;
// convert bootleg priority prom to standard format
for (INT32 i = 0x1fe; i >= 0; i -= 2) {
DrvPrioPROM[i+0] = DrvPrioPROM[i+1] = (DrvPrioPROM[i/2] >> 4) & 0x03;
}
DrvPriorityDecode(); // re-decode
} }
static INT32 monkelfInit() static INT32 monkelfInit()
{ {
input_select_values[0] = 0x37;
input_select_values[1] = 0x35;
input_select_values[2] = 0x36;
input_select_values[3] = 0x33;
input_select_values[4] = 0x34;
INT32 nRet = SystemInit(0xB, monkelfCallback); INT32 nRet = SystemInit(0xB, monkelfCallback);
if (nRet == 0) { if (nRet == 0) {
SekOpen(0); SekOpen(0);
SekMapMemory(Drv68KRAM0, 0x70000, 0x7ffff, MAP_RAM); // only 64k SekMapMemory(Drv68KRAM0, 0x70000, 0x7ffff, MAP_RAM); // only 64k
SekMapHandler(2, 0x0e0000, 0x0e000f, MAP_READ);
SekSetReadWordHandler(2, monkelf_read_word);
SekSetReadByteHandler(2, monkelf_read_byte);
SekClose(); SekClose();
} }
@ -4867,7 +4937,7 @@ static INT32 monkelfInit()
struct BurnDriver BurnDrvMonkelf = { struct BurnDriver BurnDrvMonkelf = {
"monkelf", "avspirit", NULL, NULL, "1990", "monkelf", "avspirit", NULL, NULL, "1990",
"Monky Elf (Korean bootleg of Avenging Spirit)\0", NULL, "bootleg", "Mega System 1", "Monky Elf (Korean bootleg of Avenging Spirit)\0", "imperfect graphics", "bootleg", "Mega System 1",
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
BDF_CLONE | BDF_BOOTLEG, 2, HARDWARE_MISC_POST90S, GBF_SCRFIGHT, 0, BDF_CLONE | BDF_BOOTLEG, 2, HARDWARE_MISC_POST90S, GBF_SCRFIGHT, 0,
NULL, monkelfRomInfo, monkelfRomName, NULL, NULL, CommonInputInfo, AvspiritDIPInfo, NULL, monkelfRomInfo, monkelfRomName, NULL, NULL, CommonInputInfo, AvspiritDIPInfo,
@ -4996,13 +5066,85 @@ static struct BurnRomInfo edfblRomDesc[] = {
STD_ROM_PICK(edfbl) STD_ROM_PICK(edfbl)
STD_ROM_FN(edfbl) STD_ROM_FN(edfbl)
static UINT16 __fastcall edfbl_read_word(UINT32 address)
{
switch (address)
{
case 0xe0002:
return DrvInputs[0];
case 0xe0004:
return DrvInputs[1];
case 0xe0006:
return DrvInputs[2];
case 0xe0008:
return DrvDips[0];
case 0xe000a:
return DrvDips[1];
}
return 0;
}
static UINT8 __fastcall edfbl_read_byte(UINT32 address)
{
switch (address)
{
case 0xe0002:
return DrvInputs[0] >> 8;
case 0xe0003:
return DrvInputs[0];
case 0xe0004:
return DrvInputs[1] >> 8;
case 0xe0005:
return DrvInputs[1];
case 0xe0006:
return DrvInputs[2] >> 8;
case 0xe0007:
return DrvInputs[2];
case 0xe0008:
case 0xe0009:
return DrvDips[0];
case 0xe000a:
case 0xe000b:
return DrvDips[1];
}
return 0;
}
static INT32 edfblInit()
{
INT32 nRet = SystemInit(0xB, NULL);
if (nRet == 0) {
SekOpen(0);
SekMapHandler(2, 0x0e0000, 0x0e000f, MAP_READ);
SekSetReadWordHandler(2, edfbl_read_word);
SekSetReadByteHandler(2, edfbl_read_byte);
SekClose();
}
return nRet;
}
struct BurnDriver BurnDrvEdfbl = { struct BurnDriver BurnDrvEdfbl = {
"edfbl", "edf", NULL, NULL, "1991", "edfbl", "edf", NULL, NULL, "1991",
"E.D.F. : Earth Defense Force (bootleg)\0", NULL, "bootleg", "Mega System 1", "E.D.F. : Earth Defense Force (bootleg)\0", "no sound", "bootleg", "Mega System 1",
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
BDF_GAME_WORKING | BDF_CLONE | BDF_BOOTLEG, 2, HARDWARE_MISC_POST90S, GBF_HORSHOOT, 0, BDF_GAME_WORKING | BDF_CLONE | BDF_BOOTLEG, 2, HARDWARE_MISC_POST90S, GBF_HORSHOOT, 0,
NULL, edfblRomInfo, edfblRomName, NULL, NULL, CommonInputInfo, EdfDIPInfo, NULL, edfblRomInfo, edfblRomName, NULL, NULL, CommonInputInfo, EdfDIPInfo,
edfInit, DrvExit, System1BFrame, DrvDraw, DrvScan, &DrvRecalc, 0x400, edfblInit, DrvExit, System1BFrame, DrvDraw, DrvScan, &DrvRecalc, 0x400,
256, 224, 4, 3 256, 224, 4, 3
}; };
@ -5350,7 +5492,7 @@ STD_ROM_FN(lomakai)
static INT32 lomakaiInit() static INT32 lomakaiInit()
{ {
return System1ZInit(NULL); return SystemInit(0x0/*Z*/, NULL);
} }
struct BurnDriver BurnDrvLomakai = { struct BurnDriver BurnDrvLomakai = {