mirror of
https://github.com/holub/mame
synced 2025-05-23 14:19:01 +03:00
Converted the NMK112 to be a device and updated drivers using it accordingly
This commit is contained in:
parent
f10aebf237
commit
60fd368f25
@ -506,7 +506,7 @@ static ADDRESS_MAP_START( donpachi_map, ADDRESS_SPACE_PROGRAM, 16 )
|
||||
/**/AM_RANGE(0xa08000, 0xa08fff) AM_RAM AM_BASE_GENERIC(paletteram) AM_SIZE(&cave_paletteram_size) // Palette
|
||||
AM_RANGE(0xb00000, 0xb00003) AM_DEVREADWRITE8("oki1", okim6295_r, okim6295_w, 0x00ff) // M6295
|
||||
AM_RANGE(0xb00010, 0xb00013) AM_DEVREADWRITE8("oki2", okim6295_r, okim6295_w, 0x00ff) //
|
||||
AM_RANGE(0xb00020, 0xb0002f) AM_WRITE(NMK112_okibank_lsb_w) //
|
||||
AM_RANGE(0xb00020, 0xb0002f) AM_DEVWRITE("nmk112", nmk112_okibank_lsb_w) //
|
||||
AM_RANGE(0xc00000, 0xc00001) AM_READ_PORT("IN0") // Inputs
|
||||
AM_RANGE(0xc00002, 0xc00003) AM_READ_PORT("IN1") // Inputs + EEPROM
|
||||
AM_RANGE(0xd00000, 0xd00001) AM_DEVWRITE("eeprom", cave_eeprom_msb_w) // EEPROM
|
||||
@ -1053,7 +1053,7 @@ static ADDRESS_MAP_START( pwrinst2_sound_portmap, ADDRESS_SPACE_IO, 8 )
|
||||
ADDRESS_MAP_GLOBAL_MASK(0xff)
|
||||
AM_RANGE(0x00, 0x00) AM_DEVREADWRITE("oki1", okim6295_r, okim6295_w) // M6295
|
||||
AM_RANGE(0x08, 0x08) AM_DEVREADWRITE("oki2", okim6295_r, okim6295_w) //
|
||||
AM_RANGE(0x10, 0x17) AM_WRITE(NMK112_okibank_w) // Samples bank
|
||||
AM_RANGE(0x10, 0x17) AM_DEVWRITE("nmk112", nmk112_okibank_w) // Samples bank
|
||||
AM_RANGE(0x40, 0x41) AM_DEVREADWRITE("ymsnd", ym2203_r, ym2203_w) //
|
||||
AM_RANGE(0x50, 0x50) AM_WRITE(soundlatch_ack_w) // To Main CPU
|
||||
// AM_RANGE(0x51, 0x51) AM_WRITENOP // ?? volume
|
||||
@ -1653,7 +1653,6 @@ static const ym2203_interface ym2203_config =
|
||||
irqhandler
|
||||
};
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
Dangun Feveron
|
||||
***************************************************************************/
|
||||
@ -1697,6 +1696,7 @@ MACHINE_DRIVER_END
|
||||
Dodonpachi
|
||||
***************************************************************************/
|
||||
|
||||
|
||||
static MACHINE_DRIVER_START( ddonpach )
|
||||
|
||||
/* basic machine hardware */
|
||||
@ -1736,6 +1736,11 @@ MACHINE_DRIVER_END
|
||||
Donpachi
|
||||
***************************************************************************/
|
||||
|
||||
static const nmk112_interface donpachi_nmk112_intf =
|
||||
{
|
||||
"oki1", "oki2", 1 << 0 // chip #0 (music) is not paged
|
||||
};
|
||||
|
||||
static MACHINE_DRIVER_START( donpachi )
|
||||
|
||||
/* basic machine hardware */
|
||||
@ -1773,6 +1778,8 @@ static MACHINE_DRIVER_START( donpachi )
|
||||
MDRV_SOUND_CONFIG(okim6295_interface_pin7high) // clock frequency & pin 7 not verified
|
||||
MDRV_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 1.0)
|
||||
MDRV_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 1.0)
|
||||
|
||||
MDRV_NMK112_ADD("nmk112", donpachi_nmk112_intf)
|
||||
MACHINE_DRIVER_END
|
||||
|
||||
|
||||
@ -2101,6 +2108,11 @@ MACHINE_DRIVER_END
|
||||
|
||||
/* X1 = 12 MHz, X2 = 28 MHz, X3 = 16 MHz. OKI: / 165 mode A ; / 132 mode B */
|
||||
|
||||
static const nmk112_interface pwrinst2_nmk112_intf =
|
||||
{
|
||||
"oki1", "oki2", 0
|
||||
};
|
||||
|
||||
static MACHINE_DRIVER_START( pwrinst2 )
|
||||
|
||||
/* basic machine hardware */
|
||||
@ -2153,6 +2165,8 @@ static MACHINE_DRIVER_START( pwrinst2 )
|
||||
MDRV_SOUND_CONFIG(okim6295_interface_pin7low)
|
||||
MDRV_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 1.00)
|
||||
MDRV_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 1.00)
|
||||
|
||||
MDRV_NMK112_ADD("nmk112", pwrinst2_nmk112_intf)
|
||||
MACHINE_DRIVER_END
|
||||
|
||||
|
||||
@ -3820,10 +3834,9 @@ static void init_cave(running_machine *machine)
|
||||
time_vblank_irq = 100;
|
||||
|
||||
irq_level = 1;
|
||||
|
||||
NMK112_init(0, "oki1", "oki2");
|
||||
}
|
||||
|
||||
|
||||
static DRIVER_INIT( agallet )
|
||||
{
|
||||
init_cave(machine);
|
||||
@ -3878,10 +3891,9 @@ static DRIVER_INIT( donpachi )
|
||||
ddonpach_unpack_sprites(machine);
|
||||
cave_spritetype = 1; // "different" sprites (no zooming?)
|
||||
time_vblank_irq = 90;
|
||||
|
||||
NMK112_init(1<<0, "oki1", "oki2"); // chip #0 (music) is not paged
|
||||
}
|
||||
|
||||
|
||||
static DRIVER_INIT( esprade )
|
||||
{
|
||||
init_cave(machine);
|
||||
|
@ -192,12 +192,6 @@ static WRITE16_HANDLER( nmk16_mainram_strange_w )
|
||||
}
|
||||
|
||||
|
||||
|
||||
static MACHINE_RESET( nmk16 )
|
||||
{
|
||||
NMK112_init(0, "oki1", "oki2");
|
||||
}
|
||||
|
||||
static MACHINE_RESET( NMK004 )
|
||||
{
|
||||
NMK004_init(machine);
|
||||
@ -1082,16 +1076,16 @@ static WRITE8_HANDLER( raphero_sound_rombank_w )
|
||||
}
|
||||
|
||||
static ADDRESS_MAP_START( raphero_sound_mem_map, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
AM_RANGE( 0x0000, 0x7fff ) AM_ROM
|
||||
AM_RANGE( 0x8000, 0xbfff ) AM_ROMBANK( "bank1" )
|
||||
AM_RANGE( 0xc000, 0xc001 ) AM_DEVREADWRITE("ymsnd", ym2203_r, ym2203_w )
|
||||
AM_RANGE( 0xc800, 0xc800 ) AM_DEVREADWRITE( "oki1", okim6295_r, okim6295_w )
|
||||
AM_RANGE( 0xc808, 0xc808 ) AM_DEVREADWRITE( "oki2", okim6295_r, okim6295_w )
|
||||
AM_RANGE( 0xc810, 0xc817 ) AM_WRITE( NMK112_okibank_w )
|
||||
// AM_RANGE( 0xc810, 0xc817 ) AM_WRITE( okibank_w )
|
||||
AM_RANGE( 0xd000, 0xd000 ) AM_WRITE( raphero_sound_rombank_w )
|
||||
AM_RANGE( 0xd800, 0xd800 ) AM_READWRITE( soundlatch_r, soundlatch2_w ) // main cpu
|
||||
AM_RANGE( 0xe000, 0xffff ) AM_RAM
|
||||
AM_RANGE(0x0000, 0x7fff) AM_ROM
|
||||
AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("bank1")
|
||||
AM_RANGE(0xc000, 0xc001) AM_DEVREADWRITE("ymsnd", ym2203_r, ym2203_w)
|
||||
AM_RANGE(0xc800, 0xc800) AM_DEVREADWRITE("oki1", okim6295_r, okim6295_w)
|
||||
AM_RANGE(0xc808, 0xc808) AM_DEVREADWRITE("oki2", okim6295_r, okim6295_w)
|
||||
AM_RANGE(0xc810, 0xc817) AM_DEVWRITE("nmk112", nmk112_okibank_w)
|
||||
// AM_RANGE(0xc810, 0xc817) AM_WRITE(okibank_w)
|
||||
AM_RANGE(0xd000, 0xd000) AM_WRITE(raphero_sound_rombank_w)
|
||||
AM_RANGE(0xd800, 0xd800) AM_READWRITE(soundlatch_r, soundlatch2_w) // main cpu
|
||||
AM_RANGE(0xe000, 0xffff) AM_RAM
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( macross2_sound_map, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
@ -1108,7 +1102,7 @@ static ADDRESS_MAP_START( macross2_sound_io_map, ADDRESS_SPACE_IO, 8 )
|
||||
AM_RANGE(0x00, 0x01) AM_DEVREADWRITE("ymsnd", ym2203_r, ym2203_w)
|
||||
AM_RANGE(0x80, 0x80) AM_DEVREADWRITE("oki1", okim6295_r, okim6295_w)
|
||||
AM_RANGE(0x88, 0x88) AM_DEVREADWRITE("oki2", okim6295_r, okim6295_w)
|
||||
AM_RANGE(0x90, 0x97) AM_WRITE(NMK112_okibank_w)
|
||||
AM_RANGE(0x90, 0x97) AM_DEVWRITE("nmk112", nmk112_okibank_w)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( bjtwin_map, ADDRESS_SPACE_PROGRAM, 16 )
|
||||
@ -1120,7 +1114,7 @@ static ADDRESS_MAP_START( bjtwin_map, ADDRESS_SPACE_PROGRAM, 16 )
|
||||
AM_RANGE(0x080014, 0x080015) AM_WRITE(nmk_flipscreen_w)
|
||||
AM_RANGE(0x084000, 0x084001) AM_DEVREADWRITE8("oki1", okim6295_r,okim6295_w, 0x00ff)
|
||||
AM_RANGE(0x084010, 0x084011) AM_DEVREADWRITE8("oki2", okim6295_r,okim6295_w, 0x00ff)
|
||||
AM_RANGE(0x084020, 0x08402f) AM_WRITE(NMK112_okibank_lsb_w)
|
||||
AM_RANGE(0x084020, 0x08402f) AM_DEVWRITE("nmk112", nmk112_okibank_lsb_w)
|
||||
AM_RANGE(0x088000, 0x0887ff) AM_RAM_WRITE(paletteram16_RRRRGGGGBBBBRGBx_word_w) AM_BASE_GENERIC(paletteram)
|
||||
AM_RANGE(0x094000, 0x094001) AM_WRITE(nmk_tilebank_w)
|
||||
AM_RANGE(0x094002, 0x094003) AM_WRITENOP /* IRQ enable? */
|
||||
@ -3529,6 +3523,10 @@ static INTERRUPT_GEN( nmk_interrupt )
|
||||
else cpu_set_input_line(device, 2, HOLD_LINE);
|
||||
}
|
||||
|
||||
static const nmk112_interface nmk16_nmk112_intf =
|
||||
{
|
||||
"oki1", "oki2", 0
|
||||
};
|
||||
|
||||
static MACHINE_DRIVER_START( tharrier )
|
||||
|
||||
@ -3544,7 +3542,6 @@ static MACHINE_DRIVER_START( tharrier )
|
||||
|
||||
MDRV_MACHINE_RESET(mustang_sound)
|
||||
|
||||
|
||||
/* video hardware */
|
||||
MDRV_SCREEN_ADD("screen", RASTER)
|
||||
MDRV_SCREEN_REFRESH_RATE(56)
|
||||
@ -3963,8 +3960,6 @@ static MACHINE_DRIVER_START( ssmissin )
|
||||
MDRV_CPU_ADD("audiocpu", Z80, 8000000/2) /* 4 Mhz */
|
||||
MDRV_CPU_PROGRAM_MAP(ssmissin_sound_map)
|
||||
|
||||
MDRV_MACHINE_RESET(nmk16)
|
||||
|
||||
/* video hardware */
|
||||
MDRV_SCREEN_ADD("screen", RASTER)
|
||||
MDRV_SCREEN_REFRESH_RATE(56)
|
||||
@ -3986,6 +3981,8 @@ static MACHINE_DRIVER_START( ssmissin )
|
||||
MDRV_SOUND_ADD("oki1", OKIM6295, 8000000/8) /* 1 Mhz, pin 7 high */
|
||||
MDRV_SOUND_CONFIG(okim6295_interface_pin7high)
|
||||
MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
|
||||
|
||||
MDRV_NMK112_ADD("nmk112", nmk16_nmk112_intf)
|
||||
MACHINE_DRIVER_END
|
||||
|
||||
static MACHINE_DRIVER_START( strahl )
|
||||
@ -4221,8 +4218,6 @@ static MACHINE_DRIVER_START( macross2 )
|
||||
MDRV_CPU_PROGRAM_MAP(macross2_sound_map)
|
||||
MDRV_CPU_IO_MAP(macross2_sound_io_map)
|
||||
|
||||
MDRV_MACHINE_RESET(nmk16)
|
||||
|
||||
/* video hardware */
|
||||
MDRV_SCREEN_ADD("screen", RASTER)
|
||||
MDRV_SCREEN_REFRESH_RATE(56)
|
||||
@ -4252,6 +4247,8 @@ static MACHINE_DRIVER_START( macross2 )
|
||||
MDRV_SOUND_ADD("oki2", OKIM6295, 16000000/4)
|
||||
MDRV_SOUND_CONFIG(okim6295_interface_pin7low)
|
||||
MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.20)
|
||||
|
||||
MDRV_NMK112_ADD("nmk112", nmk16_nmk112_intf)
|
||||
MACHINE_DRIVER_END
|
||||
|
||||
static MACHINE_DRIVER_START( tdragon2 )
|
||||
@ -4266,8 +4263,6 @@ static MACHINE_DRIVER_START( tdragon2 )
|
||||
MDRV_CPU_PROGRAM_MAP(macross2_sound_map)
|
||||
MDRV_CPU_IO_MAP(macross2_sound_io_map)
|
||||
|
||||
MDRV_MACHINE_RESET(nmk16)
|
||||
|
||||
/* video hardware */
|
||||
MDRV_SCREEN_ADD("screen", RASTER)
|
||||
MDRV_SCREEN_REFRESH_RATE(56)
|
||||
@ -4297,6 +4292,8 @@ static MACHINE_DRIVER_START( tdragon2 )
|
||||
MDRV_SOUND_ADD("oki2", OKIM6295, 16000000/4)
|
||||
MDRV_SOUND_CONFIG(okim6295_interface_pin7low)
|
||||
MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.08)
|
||||
|
||||
MDRV_NMK112_ADD("nmk112", nmk16_nmk112_intf)
|
||||
MACHINE_DRIVER_END
|
||||
|
||||
static MACHINE_DRIVER_START( raphero )
|
||||
@ -4310,8 +4307,6 @@ static MACHINE_DRIVER_START( raphero )
|
||||
MDRV_CPU_ADD("audiocpu",TMP90841, 8000000)
|
||||
MDRV_CPU_PROGRAM_MAP(raphero_sound_mem_map)
|
||||
|
||||
MDRV_MACHINE_RESET(nmk16)
|
||||
|
||||
/* video hardware */
|
||||
MDRV_SCREEN_ADD("screen", RASTER)
|
||||
MDRV_SCREEN_REFRESH_RATE(56) // measured
|
||||
@ -4341,6 +4336,8 @@ static MACHINE_DRIVER_START( raphero )
|
||||
MDRV_SOUND_ADD("oki2", OKIM6295, 16000000/4)
|
||||
MDRV_SOUND_CONFIG(okim6295_interface_pin7low)
|
||||
MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.20)
|
||||
|
||||
MDRV_NMK112_ADD("nmk112", nmk16_nmk112_intf)
|
||||
MACHINE_DRIVER_END
|
||||
|
||||
static MACHINE_DRIVER_START( bjtwin )
|
||||
@ -4351,8 +4348,6 @@ static MACHINE_DRIVER_START( bjtwin )
|
||||
MDRV_CPU_VBLANK_INT("screen", irq4_line_hold)
|
||||
MDRV_CPU_PERIODIC_INT(irq1_line_hold,112)/* ?? drives music */
|
||||
|
||||
MDRV_MACHINE_RESET(nmk16)
|
||||
|
||||
/* video hardware */
|
||||
MDRV_SCREEN_ADD("screen", RASTER)
|
||||
MDRV_SCREEN_REFRESH_RATE(56)
|
||||
@ -4378,6 +4373,8 @@ static MACHINE_DRIVER_START( bjtwin )
|
||||
MDRV_SOUND_ADD("oki2", OKIM6295, 16000000/4) /* verified on pcb */
|
||||
MDRV_SOUND_CONFIG(okim6295_interface_pin7low) /* verified on pcb */
|
||||
MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.20)
|
||||
|
||||
MDRV_NMK112_ADD("nmk112", nmk16_nmk112_intf)
|
||||
MACHINE_DRIVER_END
|
||||
|
||||
|
||||
|
@ -143,7 +143,7 @@ static ADDRESS_MAP_START( powerins_sound_io_map, ADDRESS_SPACE_IO, 8 )
|
||||
AM_RANGE(0x00, 0x01) AM_DEVREADWRITE("ym2203", ym2203_r, ym2203_w)
|
||||
AM_RANGE(0x80, 0x80) AM_DEVREADWRITE("oki1", okim6295_r, okim6295_w)
|
||||
AM_RANGE(0x88, 0x88) AM_DEVREADWRITE("oki2", okim6295_r, okim6295_w)
|
||||
AM_RANGE(0x90, 0x97) AM_WRITE(NMK112_okibank_w)
|
||||
AM_RANGE(0x90, 0x97) AM_DEVWRITE("nmk112", nmk112_okibank_w)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( powerinb_sound_io_map, ADDRESS_SPACE_IO, 8 )
|
||||
@ -152,7 +152,7 @@ static ADDRESS_MAP_START( powerinb_sound_io_map, ADDRESS_SPACE_IO, 8 )
|
||||
AM_RANGE(0x01, 0x01) AM_NOP
|
||||
AM_RANGE(0x80, 0x80) AM_DEVREADWRITE("oki1", okim6295_r, okim6295_w)
|
||||
AM_RANGE(0x88, 0x88) AM_DEVREADWRITE("oki2", okim6295_r, okim6295_w)
|
||||
AM_RANGE(0x90, 0x97) AM_WRITE(NMK112_okibank_w)
|
||||
AM_RANGE(0x90, 0x97) AM_DEVWRITE("nmk112", nmk112_okibank_w)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
|
||||
@ -334,10 +334,8 @@ GFXDECODE_END
|
||||
static MACHINE_RESET( powerins )
|
||||
{
|
||||
oki_bank = -1; // samples bank "unitialised"
|
||||
NMK112_init(0, "oki1", "oki2");
|
||||
}
|
||||
|
||||
|
||||
static void irqhandler(const device_config *device, int irq)
|
||||
{
|
||||
cputag_set_input_line(device->machine, "soundcpu", 0, irq ? ASSERT_LINE : CLEAR_LINE);
|
||||
@ -353,6 +351,12 @@ static const ym2203_interface ym2203_config =
|
||||
irqhandler
|
||||
};
|
||||
|
||||
static const nmk112_interface powerins_nmk112_intf =
|
||||
{
|
||||
"oki1", "oki2", 0
|
||||
};
|
||||
|
||||
|
||||
static MACHINE_DRIVER_START( powerins )
|
||||
|
||||
/* basic machine hardware */
|
||||
@ -394,6 +398,8 @@ static MACHINE_DRIVER_START( powerins )
|
||||
MDRV_SOUND_ADD("ym2203", YM2203, 12000000 / 8)
|
||||
MDRV_SOUND_CONFIG(ym2203_config)
|
||||
MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 2.0)
|
||||
|
||||
MDRV_NMK112_ADD("nmk112", powerins_nmk112_intf)
|
||||
MACHINE_DRIVER_END
|
||||
|
||||
static MACHINE_DRIVER_START( powerina )
|
||||
|
@ -57,7 +57,7 @@ static ADDRESS_MAP_START( quizpani_map, ADDRESS_SPACE_PROGRAM, 16 )
|
||||
AM_RANGE(0x100016, 0x100017) AM_WRITENOP /* IRQ enable? */
|
||||
AM_RANGE(0x100018, 0x100019) AM_WRITE(quizpani_tilesbank_w)
|
||||
AM_RANGE(0x104000, 0x104001) AM_DEVREADWRITE8("oki", okim6295_r,okim6295_w, 0x00ff)
|
||||
AM_RANGE(0x104020, 0x104027) AM_WRITE(NMK112_okibank_lsb_w)
|
||||
AM_RANGE(0x104020, 0x104027) AM_DEVWRITE("nmk112", nmk112_okibank_lsb_w)
|
||||
AM_RANGE(0x108000, 0x1083ff) AM_RAM_WRITE(paletteram16_RRRRGGGGBBBBRGBx_word_w) AM_BASE_GENERIC(paletteram)
|
||||
AM_RANGE(0x108400, 0x1085ff) AM_WRITENOP
|
||||
AM_RANGE(0x10c000, 0x10c007) AM_RAM AM_BASE(&quizpani_scrollreg)
|
||||
@ -234,10 +234,11 @@ static GFXDECODE_START( quizpani )
|
||||
GFXDECODE_END
|
||||
|
||||
|
||||
static MACHINE_RESET( quizpani )
|
||||
static const nmk112_interface quizpani_nmk112_intf =
|
||||
{
|
||||
NMK112_init(0, "oki", "oki");
|
||||
}
|
||||
"oki", "oki", 0
|
||||
};
|
||||
|
||||
|
||||
static MACHINE_DRIVER_START( quizpani )
|
||||
MDRV_CPU_ADD("maincpu", M68000, 10000000)
|
||||
@ -245,12 +246,9 @@ static MACHINE_DRIVER_START( quizpani )
|
||||
MDRV_CPU_VBLANK_INT("screen", irq4_line_hold)
|
||||
MDRV_CPU_PERIODIC_INT(irq1_line_hold,164) // music tempo
|
||||
|
||||
MDRV_MACHINE_RESET( quizpani )
|
||||
|
||||
MDRV_GFXDECODE(quizpani)
|
||||
MDRV_PALETTE_LENGTH(0x200)
|
||||
|
||||
|
||||
MDRV_SCREEN_ADD("screen", RASTER)
|
||||
MDRV_SCREEN_REFRESH_RATE(60)
|
||||
MDRV_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
|
||||
@ -266,6 +264,8 @@ static MACHINE_DRIVER_START( quizpani )
|
||||
MDRV_SOUND_ADD("oki", OKIM6295, 16000000/4)
|
||||
MDRV_SOUND_CONFIG(okim6295_interface_pin7low)
|
||||
MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
|
||||
|
||||
MDRV_NMK112_ADD("nmk112", quizpani_nmk112_intf)
|
||||
MACHINE_DRIVER_END
|
||||
|
||||
ROM_START( quizpani )
|
||||
|
@ -353,10 +353,6 @@ static MACHINE_RESET( bgaregga )
|
||||
memory_configure_bank(machine, "bank1", 0, 16, Z80, 0x4000);
|
||||
memory_set_bank(machine, "bank1", 4);
|
||||
|
||||
if (memory_region(machine, "oki1") != NULL)
|
||||
NMK112_init(0, "oki1", "oki2");
|
||||
else
|
||||
NMK112_init(0, "oki", "oki");
|
||||
MACHINE_RESET_CALL(toaplan2);
|
||||
}
|
||||
|
||||
@ -1091,26 +1087,34 @@ static WRITE8_HANDLER( bgaregga_bankswitch_w )
|
||||
|
||||
static WRITE8_HANDLER( raizing_okim6295_bankselect_0 )
|
||||
{
|
||||
NMK112_okibank_w(space, 0, data & 0x0f); // chip 0 bank 0
|
||||
NMK112_okibank_w(space, 1, (data >> 4) & 0x0f); // chip 0 bank 1
|
||||
const device_config *nmk112 = devtag_get_device(space->machine, "nmk112");
|
||||
|
||||
nmk112_okibank_w(nmk112, 0, data & 0x0f); // chip 0 bank 0
|
||||
nmk112_okibank_w(nmk112, 1, (data >> 4) & 0x0f); // chip 0 bank 1
|
||||
}
|
||||
|
||||
static WRITE8_HANDLER( raizing_okim6295_bankselect_1 )
|
||||
{
|
||||
NMK112_okibank_w(space, 2, data & 0x0f); // chip 0 bank 2
|
||||
NMK112_okibank_w(space, 3, (data >> 4) & 0x0f); // chip 0 bank 3
|
||||
const device_config *nmk112 = devtag_get_device(space->machine, "nmk112");
|
||||
|
||||
nmk112_okibank_w(nmk112, 2, data & 0x0f); // chip 0 bank 2
|
||||
nmk112_okibank_w(nmk112, 3, (data >> 4) & 0x0f); // chip 0 bank 3
|
||||
}
|
||||
|
||||
static WRITE8_HANDLER( raizing_okim6295_bankselect_2 )
|
||||
{
|
||||
NMK112_okibank_w(space, 4, data & 0x0f); // chip 1 bank 0
|
||||
NMK112_okibank_w(space, 5, (data >> 4) & 0x0f); // chip 1 bank 1
|
||||
const device_config *nmk112 = devtag_get_device(space->machine, "nmk112");
|
||||
|
||||
nmk112_okibank_w(nmk112, 4, data & 0x0f); // chip 1 bank 0
|
||||
nmk112_okibank_w(nmk112, 5, (data >> 4) & 0x0f); // chip 1 bank 1
|
||||
}
|
||||
|
||||
static WRITE8_HANDLER( raizing_okim6295_bankselect_3 )
|
||||
{
|
||||
NMK112_okibank_w(space, 6, data & 0x0f); // chip 1 bank 2
|
||||
NMK112_okibank_w(space, 7, (data >> 4) & 0x0f); // chip 1 bank 3
|
||||
const device_config *nmk112 = devtag_get_device(space->machine, "nmk112");
|
||||
|
||||
nmk112_okibank_w(nmk112, 6, data & 0x0f); // chip 1 bank 2
|
||||
nmk112_okibank_w(nmk112, 7, (data >> 4) & 0x0f); // chip 1 bank 3
|
||||
}
|
||||
|
||||
|
||||
@ -4043,6 +4047,17 @@ static const UINT8 ts007spy_decryption_table[256] = {
|
||||
|
||||
static const nec_config ts007spy_config ={ ts007spy_decryption_table, };
|
||||
|
||||
|
||||
static const nmk112_interface bgaregga_nmk112_intf =
|
||||
{
|
||||
"oki", "oki", 0
|
||||
};
|
||||
|
||||
static const nmk112_interface batrider_nmk112_intf =
|
||||
{
|
||||
"oki1", "oki2", 0
|
||||
};
|
||||
|
||||
static MACHINE_DRIVER_START( batsugun )
|
||||
|
||||
/* basic machine hardware */
|
||||
@ -4247,6 +4262,8 @@ static MACHINE_DRIVER_START( bgaregga )
|
||||
MDRV_SOUND_ADD("oki", OKIM6295, XTAL_32MHz/16)
|
||||
MDRV_SOUND_CONFIG(okim6295_interface_pin7high)
|
||||
MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
|
||||
|
||||
MDRV_NMK112_ADD("nmk112", bgaregga_nmk112_intf)
|
||||
MACHINE_DRIVER_END
|
||||
|
||||
|
||||
@ -4293,6 +4310,8 @@ static MACHINE_DRIVER_START( batrider )
|
||||
MDRV_SOUND_ADD("oki2", OKIM6295, XTAL_32MHz/10)
|
||||
MDRV_SOUND_CONFIG(okim6295_interface_pin7low)
|
||||
MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
|
||||
|
||||
MDRV_NMK112_ADD("nmk112", batrider_nmk112_intf)
|
||||
MACHINE_DRIVER_END
|
||||
|
||||
static MACHINE_DRIVER_START( bbakraid )
|
||||
|
@ -5,30 +5,30 @@
|
||||
|
||||
|
||||
|
||||
#define FM_CHANNELS 6
|
||||
#define PSG_CHANNELS 3
|
||||
#define EFFECTS_CHANNELS 8
|
||||
#define FM_CHANNELS 6
|
||||
#define PSG_CHANNELS 3
|
||||
#define EFFECTS_CHANNELS 8
|
||||
|
||||
#define FM_FLAG_NEED_INITIALIZATION (1<<0)
|
||||
#define FM_FLAG_UNKNOWN2 (1<<1)
|
||||
#define FM_FLAG_NOTE_IS_PAUSE (1<<2)
|
||||
#define FM_FLAG_UNKNOWN3 (1<<3)
|
||||
#define FM_FLAG_MODULATE_NOTE (1<<4)
|
||||
#define FM_FLAG_MUST_SEND_KEYON (1<<5)
|
||||
#define FM_FLAG_MUST_SEND_CONFIGURATION (1<<6)
|
||||
#define FM_FLAG_ACTIVE (1<<7)
|
||||
#define FM_FLAG_NEED_INITIALIZATION (1<<0)
|
||||
#define FM_FLAG_UNKNOWN2 (1<<1)
|
||||
#define FM_FLAG_NOTE_IS_PAUSE (1<<2)
|
||||
#define FM_FLAG_UNKNOWN3 (1<<3)
|
||||
#define FM_FLAG_MODULATE_NOTE (1<<4)
|
||||
#define FM_FLAG_MUST_SEND_KEYON (1<<5)
|
||||
#define FM_FLAG_MUST_SEND_CONFIGURATION (1<<6)
|
||||
#define FM_FLAG_ACTIVE (1<<7)
|
||||
|
||||
#define PSG_FLAG_ACTIVE (1<<0)
|
||||
#define PSG_FLAG_NOTE_IS_PAUSE (1<<1)
|
||||
#define PSG_FLAG_NEED_INITIALIZATION (1<<2)
|
||||
#define PSG_FLAG_INITIALIZE_VOLUME (1<<3)
|
||||
#define PSG_FLAG_NOTE_IS_NOISE (1<<5)
|
||||
#define PSG_FLAG_NOISE_NOT_ENABLED (1<<6)
|
||||
#define PSG_FLAG_ACTIVE (1<<0)
|
||||
#define PSG_FLAG_NOTE_IS_PAUSE (1<<1)
|
||||
#define PSG_FLAG_NEED_INITIALIZATION (1<<2)
|
||||
#define PSG_FLAG_INITIALIZE_VOLUME (1<<3)
|
||||
#define PSG_FLAG_NOTE_IS_NOISE (1<<5)
|
||||
#define PSG_FLAG_NOISE_NOT_ENABLED (1<<6)
|
||||
|
||||
#define EFFECTS_FLAG_NEED_INITIALIZATION (1<<0)
|
||||
#define EFFECTS_FLAG_ACTIVE (1<<7)
|
||||
#define EFFECTS_FLAG_NEED_INITIALIZATION (1<<0)
|
||||
#define EFFECTS_FLAG_ACTIVE (1<<7)
|
||||
|
||||
#define NOTE_PAUSE 0x0c
|
||||
#define NOTE_PAUSE 0x0c
|
||||
|
||||
struct psg_control
|
||||
{
|
||||
|
@ -10,40 +10,65 @@
|
||||
#include "driver.h"
|
||||
#include "nmk112.h"
|
||||
|
||||
#define MAXCHIPS 2
|
||||
#define TABLESIZE 0x100
|
||||
#define BANKSIZE 0x10000
|
||||
#define TABLESIZE 0x100
|
||||
#define BANKSIZE 0x10000
|
||||
|
||||
/* which chips have their sample address table divided into pages */
|
||||
static UINT8 page_mask;
|
||||
|
||||
static UINT8 current_bank[8];
|
||||
static const char *region[2];
|
||||
|
||||
void NMK112_init(UINT8 disable_page_mask, const char *rgn0, const char *rgn1)
|
||||
typedef struct _nmk112_state nmk112_state;
|
||||
struct _nmk112_state
|
||||
{
|
||||
region[0] = rgn0;
|
||||
region[1] = rgn1;
|
||||
memset(current_bank, ~0, sizeof(current_bank));
|
||||
page_mask = ~disable_page_mask;
|
||||
/* which chips have their sample address table divided into pages */
|
||||
UINT8 page_mask;
|
||||
|
||||
UINT8 current_bank[8];
|
||||
UINT8 last_bank[2];
|
||||
|
||||
UINT8 *rom0, *rom1;
|
||||
int size0, size1;
|
||||
};
|
||||
|
||||
/*****************************************************************************
|
||||
INLINE FUNCTIONS
|
||||
*****************************************************************************/
|
||||
|
||||
INLINE nmk112_state *get_safe_token( const device_config *device )
|
||||
{
|
||||
assert(device != NULL);
|
||||
assert(device->token != NULL);
|
||||
assert(device->type == NMK112);
|
||||
|
||||
return (nmk112_state *)device->token;
|
||||
}
|
||||
|
||||
WRITE8_HANDLER( NMK112_okibank_w )
|
||||
INLINE const nmk112_interface *get_interface( const device_config *device )
|
||||
{
|
||||
int chip = (offset & 4) >> 2;
|
||||
int banknum = offset & 3;
|
||||
int paged = (page_mask & (1 << chip));
|
||||
assert(device != NULL);
|
||||
assert((device->type == NMK112));
|
||||
return (const nmk112_interface *) device->static_config;
|
||||
}
|
||||
|
||||
UINT8 *rom = memory_region(space->machine, region[chip]);
|
||||
int size = memory_region_length(space->machine, region[chip]) - 0x40000;
|
||||
int bankaddr = (data * BANKSIZE) % size;
|
||||
/*****************************************************************************
|
||||
DEVICE HANDLERS
|
||||
*****************************************************************************/
|
||||
|
||||
if (current_bank[offset] == data) return;
|
||||
current_bank[offset] = data;
|
||||
WRITE8_DEVICE_HANDLER( nmk112_okibank_w )
|
||||
{
|
||||
nmk112_state *nmk112 = get_safe_token(device);
|
||||
int chip = (offset & 4) >> 2;
|
||||
int banknum = offset & 3;
|
||||
int paged = (nmk112->page_mask & (1 << chip));
|
||||
|
||||
UINT8 *rom = chip ? nmk112->rom1 : nmk112->rom0;
|
||||
int size = chip ? nmk112->size1 : nmk112->size0;
|
||||
int bankaddr = (data * BANKSIZE) % size;
|
||||
|
||||
if (nmk112->current_bank[offset] == data)
|
||||
return;
|
||||
|
||||
nmk112->current_bank[offset] = data;
|
||||
|
||||
/* copy the samples */
|
||||
if ((paged) && (banknum == 0))
|
||||
memcpy(rom + 0x400, rom + 0x40000 + bankaddr+0x400, BANKSIZE-0x400);
|
||||
memcpy(rom + 0x400, rom + 0x40000 + bankaddr + 0x400, BANKSIZE - 0x400);
|
||||
else
|
||||
memcpy(rom + banknum * BANKSIZE, rom + 0x40000 + bankaddr, BANKSIZE);
|
||||
|
||||
@ -53,12 +78,87 @@ WRITE8_HANDLER( NMK112_okibank_w )
|
||||
rom += banknum * TABLESIZE;
|
||||
memcpy(rom, rom + 0x40000 + bankaddr, TABLESIZE);
|
||||
}
|
||||
|
||||
nmk112->last_bank[chip] = offset & 3;
|
||||
}
|
||||
|
||||
WRITE16_HANDLER( NMK112_okibank_lsb_w )
|
||||
WRITE16_DEVICE_HANDLER( nmk112_okibank_lsb_w )
|
||||
{
|
||||
if (ACCESSING_BITS_0_7)
|
||||
{
|
||||
NMK112_okibank_w(space, offset, data & 0xff);
|
||||
nmk112_okibank_w(device, offset, data & 0xff);
|
||||
}
|
||||
}
|
||||
|
||||
static STATE_POSTLOAD( nmk112_postload_bankswitch )
|
||||
{
|
||||
nmk112_state *nmk112 = (nmk112_state *)param;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < 2; i++)
|
||||
{
|
||||
int banknum = nmk112->last_bank[i];
|
||||
int paged = (nmk112->page_mask & (1 << i));
|
||||
|
||||
UINT8 *rom = i ? nmk112->rom1 : nmk112->rom0;
|
||||
int size = i ? nmk112->size1 : nmk112->size0;
|
||||
int bankaddr = (nmk112->current_bank[nmk112->last_bank[i] + i * 4] * BANKSIZE) % size;
|
||||
|
||||
/* copy the samples */
|
||||
if ((paged) && (banknum == 0))
|
||||
memcpy(rom + 0x400, rom + 0x40000 + bankaddr + 0x400, BANKSIZE - 0x400);
|
||||
else
|
||||
memcpy(rom + banknum * BANKSIZE, rom + 0x40000 + bankaddr, BANKSIZE);
|
||||
|
||||
/* also copy the sample address table, if it is paged on this chip */
|
||||
if (paged)
|
||||
{
|
||||
rom += banknum * TABLESIZE;
|
||||
memcpy(rom, rom + 0x40000 + bankaddr, TABLESIZE);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*****************************************************************************
|
||||
DEVICE INTERFACE
|
||||
*****************************************************************************/
|
||||
|
||||
static DEVICE_START( nmk112 )
|
||||
{
|
||||
nmk112_state *nmk112 = get_safe_token(device);
|
||||
const nmk112_interface *intf = get_interface(device);
|
||||
|
||||
nmk112->rom0 = memory_region(device->machine, intf->rgn0);
|
||||
nmk112->size0 = memory_region_length(device->machine, intf->rgn0) - 0x40000;
|
||||
nmk112->rom1 = memory_region(device->machine, intf->rgn1);
|
||||
nmk112->size1 = memory_region_length(device->machine, intf->rgn1) - 0x40000;
|
||||
|
||||
nmk112->page_mask = ~intf->disable_page_mask;
|
||||
|
||||
state_save_register_device_item_array(device, 0, nmk112->current_bank);
|
||||
state_save_register_device_item_array(device, 0, nmk112->last_bank);
|
||||
state_save_register_postload(device->machine, nmk112_postload_bankswitch, nmk112);
|
||||
}
|
||||
|
||||
static DEVICE_RESET( nmk112 )
|
||||
{
|
||||
nmk112_state *nmk112 = get_safe_token(device);
|
||||
int i;
|
||||
|
||||
for (i = 0; i < 8; i++)
|
||||
nmk112->current_bank[i] = ~0;
|
||||
}
|
||||
|
||||
|
||||
/*****************************************************************************
|
||||
DEVICE DEFINITION
|
||||
*****************************************************************************/
|
||||
|
||||
static const char DEVTEMPLATE_SOURCE[] = __FILE__;
|
||||
|
||||
#define DEVTEMPLATE_ID(p,s) p##nmk112##s
|
||||
#define DEVTEMPLATE_FEATURES DT_HAS_START | DT_HAS_RESET
|
||||
#define DEVTEMPLATE_NAME "NMK 112"
|
||||
#define DEVTEMPLATE_FAMILY "NMK 112 Bankswitch IC"
|
||||
#include "devtempl.h"
|
||||
|
@ -1,9 +1,49 @@
|
||||
#ifndef NMK112_H
|
||||
#define NMK112_H
|
||||
/*************************************************************************
|
||||
|
||||
void NMK112_init(UINT8 disable_page_mask, const char *rgn0, const char *rgn1);
|
||||
nmk112.h
|
||||
|
||||
WRITE8_HANDLER( NMK112_okibank_w );
|
||||
WRITE16_HANDLER( NMK112_okibank_lsb_w );
|
||||
**************************************************************************/
|
||||
|
||||
#endif
|
||||
#ifndef __NMK112_H__
|
||||
#define __NMK112_H__
|
||||
|
||||
#include "devcb.h"
|
||||
|
||||
/***************************************************************************
|
||||
TYPE DEFINITIONS
|
||||
***************************************************************************/
|
||||
|
||||
typedef struct _nmk112_interface nmk112_interface;
|
||||
struct _nmk112_interface
|
||||
{
|
||||
const char *rgn0, *rgn1;
|
||||
UINT8 disable_page_mask;
|
||||
};
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
FUNCTION PROTOTYPES
|
||||
***************************************************************************/
|
||||
|
||||
DEVICE_GET_INFO( nmk112 );
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
DEVICE CONFIGURATION MACROS
|
||||
***************************************************************************/
|
||||
|
||||
#define NMK112 DEVICE_GET_INFO_NAME( nmk112 )
|
||||
|
||||
#define MDRV_NMK112_ADD(_tag, _interface) \
|
||||
MDRV_DEVICE_ADD(_tag, NMK112, 0) \
|
||||
MDRV_DEVICE_CONFIG(_interface)
|
||||
|
||||
/***************************************************************************
|
||||
DEVICE I/O FUNCTIONS
|
||||
***************************************************************************/
|
||||
|
||||
WRITE8_DEVICE_HANDLER( nmk112_okibank_w );
|
||||
WRITE16_DEVICE_HANDLER( nmk112_okibank_lsb_w );
|
||||
|
||||
|
||||
#endif /* __NMK112_H__ */
|
||||
|
Loading…
Reference in New Issue
Block a user