mirror of
https://github.com/holub/mame
synced 2025-05-24 06:30:04 +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(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(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(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(0xc00000, 0xc00001) AM_READ_PORT("IN0") // Inputs
|
||||||
AM_RANGE(0xc00002, 0xc00003) AM_READ_PORT("IN1") // Inputs + EEPROM
|
AM_RANGE(0xc00002, 0xc00003) AM_READ_PORT("IN1") // Inputs + EEPROM
|
||||||
AM_RANGE(0xd00000, 0xd00001) AM_DEVWRITE("eeprom", cave_eeprom_msb_w) // 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)
|
ADDRESS_MAP_GLOBAL_MASK(0xff)
|
||||||
AM_RANGE(0x00, 0x00) AM_DEVREADWRITE("oki1", okim6295_r, okim6295_w) // M6295
|
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(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(0x40, 0x41) AM_DEVREADWRITE("ymsnd", ym2203_r, ym2203_w) //
|
||||||
AM_RANGE(0x50, 0x50) AM_WRITE(soundlatch_ack_w) // To Main CPU
|
AM_RANGE(0x50, 0x50) AM_WRITE(soundlatch_ack_w) // To Main CPU
|
||||||
// AM_RANGE(0x51, 0x51) AM_WRITENOP // ?? volume
|
// AM_RANGE(0x51, 0x51) AM_WRITENOP // ?? volume
|
||||||
@ -1653,7 +1653,6 @@ static const ym2203_interface ym2203_config =
|
|||||||
irqhandler
|
irqhandler
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
/***************************************************************************
|
/***************************************************************************
|
||||||
Dangun Feveron
|
Dangun Feveron
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
@ -1697,6 +1696,7 @@ MACHINE_DRIVER_END
|
|||||||
Dodonpachi
|
Dodonpachi
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
|
|
||||||
|
|
||||||
static MACHINE_DRIVER_START( ddonpach )
|
static MACHINE_DRIVER_START( ddonpach )
|
||||||
|
|
||||||
/* basic machine hardware */
|
/* basic machine hardware */
|
||||||
@ -1736,6 +1736,11 @@ MACHINE_DRIVER_END
|
|||||||
Donpachi
|
Donpachi
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
|
|
||||||
|
static const nmk112_interface donpachi_nmk112_intf =
|
||||||
|
{
|
||||||
|
"oki1", "oki2", 1 << 0 // chip #0 (music) is not paged
|
||||||
|
};
|
||||||
|
|
||||||
static MACHINE_DRIVER_START( donpachi )
|
static MACHINE_DRIVER_START( donpachi )
|
||||||
|
|
||||||
/* basic machine hardware */
|
/* 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_CONFIG(okim6295_interface_pin7high) // clock frequency & pin 7 not verified
|
||||||
MDRV_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 1.0)
|
MDRV_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 1.0)
|
||||||
MDRV_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 1.0)
|
MDRV_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 1.0)
|
||||||
|
|
||||||
|
MDRV_NMK112_ADD("nmk112", donpachi_nmk112_intf)
|
||||||
MACHINE_DRIVER_END
|
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 */
|
/* 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 )
|
static MACHINE_DRIVER_START( pwrinst2 )
|
||||||
|
|
||||||
/* basic machine hardware */
|
/* basic machine hardware */
|
||||||
@ -2153,6 +2165,8 @@ static MACHINE_DRIVER_START( pwrinst2 )
|
|||||||
MDRV_SOUND_CONFIG(okim6295_interface_pin7low)
|
MDRV_SOUND_CONFIG(okim6295_interface_pin7low)
|
||||||
MDRV_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 1.00)
|
MDRV_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 1.00)
|
||||||
MDRV_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 1.00)
|
MDRV_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 1.00)
|
||||||
|
|
||||||
|
MDRV_NMK112_ADD("nmk112", pwrinst2_nmk112_intf)
|
||||||
MACHINE_DRIVER_END
|
MACHINE_DRIVER_END
|
||||||
|
|
||||||
|
|
||||||
@ -3820,10 +3834,9 @@ static void init_cave(running_machine *machine)
|
|||||||
time_vblank_irq = 100;
|
time_vblank_irq = 100;
|
||||||
|
|
||||||
irq_level = 1;
|
irq_level = 1;
|
||||||
|
|
||||||
NMK112_init(0, "oki1", "oki2");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static DRIVER_INIT( agallet )
|
static DRIVER_INIT( agallet )
|
||||||
{
|
{
|
||||||
init_cave(machine);
|
init_cave(machine);
|
||||||
@ -3878,10 +3891,9 @@ static DRIVER_INIT( donpachi )
|
|||||||
ddonpach_unpack_sprites(machine);
|
ddonpach_unpack_sprites(machine);
|
||||||
cave_spritetype = 1; // "different" sprites (no zooming?)
|
cave_spritetype = 1; // "different" sprites (no zooming?)
|
||||||
time_vblank_irq = 90;
|
time_vblank_irq = 90;
|
||||||
|
|
||||||
NMK112_init(1<<0, "oki1", "oki2"); // chip #0 (music) is not paged
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static DRIVER_INIT( esprade )
|
static DRIVER_INIT( esprade )
|
||||||
{
|
{
|
||||||
init_cave(machine);
|
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 )
|
static MACHINE_RESET( NMK004 )
|
||||||
{
|
{
|
||||||
NMK004_init(machine);
|
NMK004_init(machine);
|
||||||
@ -1087,7 +1081,7 @@ static ADDRESS_MAP_START( raphero_sound_mem_map, ADDRESS_SPACE_PROGRAM, 8 )
|
|||||||
AM_RANGE(0xc000, 0xc001) AM_DEVREADWRITE("ymsnd", ym2203_r, ym2203_w)
|
AM_RANGE(0xc000, 0xc001) AM_DEVREADWRITE("ymsnd", ym2203_r, ym2203_w)
|
||||||
AM_RANGE(0xc800, 0xc800) AM_DEVREADWRITE("oki1", okim6295_r, okim6295_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(0xc808, 0xc808) AM_DEVREADWRITE("oki2", okim6295_r, okim6295_w)
|
||||||
AM_RANGE( 0xc810, 0xc817 ) AM_WRITE( NMK112_okibank_w )
|
AM_RANGE(0xc810, 0xc817) AM_DEVWRITE("nmk112", nmk112_okibank_w)
|
||||||
// AM_RANGE(0xc810, 0xc817) AM_WRITE(okibank_w)
|
// AM_RANGE(0xc810, 0xc817) AM_WRITE(okibank_w)
|
||||||
AM_RANGE(0xd000, 0xd000) AM_WRITE(raphero_sound_rombank_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(0xd800, 0xd800) AM_READWRITE(soundlatch_r, soundlatch2_w) // main cpu
|
||||||
@ -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(0x00, 0x01) AM_DEVREADWRITE("ymsnd", ym2203_r, ym2203_w)
|
||||||
AM_RANGE(0x80, 0x80) AM_DEVREADWRITE("oki1", okim6295_r, okim6295_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(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
|
ADDRESS_MAP_END
|
||||||
|
|
||||||
static ADDRESS_MAP_START( bjtwin_map, ADDRESS_SPACE_PROGRAM, 16 )
|
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(0x080014, 0x080015) AM_WRITE(nmk_flipscreen_w)
|
||||||
AM_RANGE(0x084000, 0x084001) AM_DEVREADWRITE8("oki1", okim6295_r,okim6295_w, 0x00ff)
|
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(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(0x088000, 0x0887ff) AM_RAM_WRITE(paletteram16_RRRRGGGGBBBBRGBx_word_w) AM_BASE_GENERIC(paletteram)
|
||||||
AM_RANGE(0x094000, 0x094001) AM_WRITE(nmk_tilebank_w)
|
AM_RANGE(0x094000, 0x094001) AM_WRITE(nmk_tilebank_w)
|
||||||
AM_RANGE(0x094002, 0x094003) AM_WRITENOP /* IRQ enable? */
|
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);
|
else cpu_set_input_line(device, 2, HOLD_LINE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const nmk112_interface nmk16_nmk112_intf =
|
||||||
|
{
|
||||||
|
"oki1", "oki2", 0
|
||||||
|
};
|
||||||
|
|
||||||
static MACHINE_DRIVER_START( tharrier )
|
static MACHINE_DRIVER_START( tharrier )
|
||||||
|
|
||||||
@ -3544,7 +3542,6 @@ static MACHINE_DRIVER_START( tharrier )
|
|||||||
|
|
||||||
MDRV_MACHINE_RESET(mustang_sound)
|
MDRV_MACHINE_RESET(mustang_sound)
|
||||||
|
|
||||||
|
|
||||||
/* video hardware */
|
/* video hardware */
|
||||||
MDRV_SCREEN_ADD("screen", RASTER)
|
MDRV_SCREEN_ADD("screen", RASTER)
|
||||||
MDRV_SCREEN_REFRESH_RATE(56)
|
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_ADD("audiocpu", Z80, 8000000/2) /* 4 Mhz */
|
||||||
MDRV_CPU_PROGRAM_MAP(ssmissin_sound_map)
|
MDRV_CPU_PROGRAM_MAP(ssmissin_sound_map)
|
||||||
|
|
||||||
MDRV_MACHINE_RESET(nmk16)
|
|
||||||
|
|
||||||
/* video hardware */
|
/* video hardware */
|
||||||
MDRV_SCREEN_ADD("screen", RASTER)
|
MDRV_SCREEN_ADD("screen", RASTER)
|
||||||
MDRV_SCREEN_REFRESH_RATE(56)
|
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_ADD("oki1", OKIM6295, 8000000/8) /* 1 Mhz, pin 7 high */
|
||||||
MDRV_SOUND_CONFIG(okim6295_interface_pin7high)
|
MDRV_SOUND_CONFIG(okim6295_interface_pin7high)
|
||||||
MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
|
MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
|
||||||
|
|
||||||
|
MDRV_NMK112_ADD("nmk112", nmk16_nmk112_intf)
|
||||||
MACHINE_DRIVER_END
|
MACHINE_DRIVER_END
|
||||||
|
|
||||||
static MACHINE_DRIVER_START( strahl )
|
static MACHINE_DRIVER_START( strahl )
|
||||||
@ -4221,8 +4218,6 @@ static MACHINE_DRIVER_START( macross2 )
|
|||||||
MDRV_CPU_PROGRAM_MAP(macross2_sound_map)
|
MDRV_CPU_PROGRAM_MAP(macross2_sound_map)
|
||||||
MDRV_CPU_IO_MAP(macross2_sound_io_map)
|
MDRV_CPU_IO_MAP(macross2_sound_io_map)
|
||||||
|
|
||||||
MDRV_MACHINE_RESET(nmk16)
|
|
||||||
|
|
||||||
/* video hardware */
|
/* video hardware */
|
||||||
MDRV_SCREEN_ADD("screen", RASTER)
|
MDRV_SCREEN_ADD("screen", RASTER)
|
||||||
MDRV_SCREEN_REFRESH_RATE(56)
|
MDRV_SCREEN_REFRESH_RATE(56)
|
||||||
@ -4252,6 +4247,8 @@ static MACHINE_DRIVER_START( macross2 )
|
|||||||
MDRV_SOUND_ADD("oki2", OKIM6295, 16000000/4)
|
MDRV_SOUND_ADD("oki2", OKIM6295, 16000000/4)
|
||||||
MDRV_SOUND_CONFIG(okim6295_interface_pin7low)
|
MDRV_SOUND_CONFIG(okim6295_interface_pin7low)
|
||||||
MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.20)
|
MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.20)
|
||||||
|
|
||||||
|
MDRV_NMK112_ADD("nmk112", nmk16_nmk112_intf)
|
||||||
MACHINE_DRIVER_END
|
MACHINE_DRIVER_END
|
||||||
|
|
||||||
static MACHINE_DRIVER_START( tdragon2 )
|
static MACHINE_DRIVER_START( tdragon2 )
|
||||||
@ -4266,8 +4263,6 @@ static MACHINE_DRIVER_START( tdragon2 )
|
|||||||
MDRV_CPU_PROGRAM_MAP(macross2_sound_map)
|
MDRV_CPU_PROGRAM_MAP(macross2_sound_map)
|
||||||
MDRV_CPU_IO_MAP(macross2_sound_io_map)
|
MDRV_CPU_IO_MAP(macross2_sound_io_map)
|
||||||
|
|
||||||
MDRV_MACHINE_RESET(nmk16)
|
|
||||||
|
|
||||||
/* video hardware */
|
/* video hardware */
|
||||||
MDRV_SCREEN_ADD("screen", RASTER)
|
MDRV_SCREEN_ADD("screen", RASTER)
|
||||||
MDRV_SCREEN_REFRESH_RATE(56)
|
MDRV_SCREEN_REFRESH_RATE(56)
|
||||||
@ -4297,6 +4292,8 @@ static MACHINE_DRIVER_START( tdragon2 )
|
|||||||
MDRV_SOUND_ADD("oki2", OKIM6295, 16000000/4)
|
MDRV_SOUND_ADD("oki2", OKIM6295, 16000000/4)
|
||||||
MDRV_SOUND_CONFIG(okim6295_interface_pin7low)
|
MDRV_SOUND_CONFIG(okim6295_interface_pin7low)
|
||||||
MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.08)
|
MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.08)
|
||||||
|
|
||||||
|
MDRV_NMK112_ADD("nmk112", nmk16_nmk112_intf)
|
||||||
MACHINE_DRIVER_END
|
MACHINE_DRIVER_END
|
||||||
|
|
||||||
static MACHINE_DRIVER_START( raphero )
|
static MACHINE_DRIVER_START( raphero )
|
||||||
@ -4310,8 +4307,6 @@ static MACHINE_DRIVER_START( raphero )
|
|||||||
MDRV_CPU_ADD("audiocpu",TMP90841, 8000000)
|
MDRV_CPU_ADD("audiocpu",TMP90841, 8000000)
|
||||||
MDRV_CPU_PROGRAM_MAP(raphero_sound_mem_map)
|
MDRV_CPU_PROGRAM_MAP(raphero_sound_mem_map)
|
||||||
|
|
||||||
MDRV_MACHINE_RESET(nmk16)
|
|
||||||
|
|
||||||
/* video hardware */
|
/* video hardware */
|
||||||
MDRV_SCREEN_ADD("screen", RASTER)
|
MDRV_SCREEN_ADD("screen", RASTER)
|
||||||
MDRV_SCREEN_REFRESH_RATE(56) // measured
|
MDRV_SCREEN_REFRESH_RATE(56) // measured
|
||||||
@ -4341,6 +4336,8 @@ static MACHINE_DRIVER_START( raphero )
|
|||||||
MDRV_SOUND_ADD("oki2", OKIM6295, 16000000/4)
|
MDRV_SOUND_ADD("oki2", OKIM6295, 16000000/4)
|
||||||
MDRV_SOUND_CONFIG(okim6295_interface_pin7low)
|
MDRV_SOUND_CONFIG(okim6295_interface_pin7low)
|
||||||
MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.20)
|
MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.20)
|
||||||
|
|
||||||
|
MDRV_NMK112_ADD("nmk112", nmk16_nmk112_intf)
|
||||||
MACHINE_DRIVER_END
|
MACHINE_DRIVER_END
|
||||||
|
|
||||||
static MACHINE_DRIVER_START( bjtwin )
|
static MACHINE_DRIVER_START( bjtwin )
|
||||||
@ -4351,8 +4348,6 @@ static MACHINE_DRIVER_START( bjtwin )
|
|||||||
MDRV_CPU_VBLANK_INT("screen", irq4_line_hold)
|
MDRV_CPU_VBLANK_INT("screen", irq4_line_hold)
|
||||||
MDRV_CPU_PERIODIC_INT(irq1_line_hold,112)/* ?? drives music */
|
MDRV_CPU_PERIODIC_INT(irq1_line_hold,112)/* ?? drives music */
|
||||||
|
|
||||||
MDRV_MACHINE_RESET(nmk16)
|
|
||||||
|
|
||||||
/* video hardware */
|
/* video hardware */
|
||||||
MDRV_SCREEN_ADD("screen", RASTER)
|
MDRV_SCREEN_ADD("screen", RASTER)
|
||||||
MDRV_SCREEN_REFRESH_RATE(56)
|
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_ADD("oki2", OKIM6295, 16000000/4) /* verified on pcb */
|
||||||
MDRV_SOUND_CONFIG(okim6295_interface_pin7low) /* verified on pcb */
|
MDRV_SOUND_CONFIG(okim6295_interface_pin7low) /* verified on pcb */
|
||||||
MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.20)
|
MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.20)
|
||||||
|
|
||||||
|
MDRV_NMK112_ADD("nmk112", nmk16_nmk112_intf)
|
||||||
MACHINE_DRIVER_END
|
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(0x00, 0x01) AM_DEVREADWRITE("ym2203", ym2203_r, ym2203_w)
|
||||||
AM_RANGE(0x80, 0x80) AM_DEVREADWRITE("oki1", okim6295_r, okim6295_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(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
|
ADDRESS_MAP_END
|
||||||
|
|
||||||
static ADDRESS_MAP_START( powerinb_sound_io_map, ADDRESS_SPACE_IO, 8 )
|
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(0x01, 0x01) AM_NOP
|
||||||
AM_RANGE(0x80, 0x80) AM_DEVREADWRITE("oki1", okim6295_r, okim6295_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(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
|
ADDRESS_MAP_END
|
||||||
|
|
||||||
|
|
||||||
@ -334,10 +334,8 @@ GFXDECODE_END
|
|||||||
static MACHINE_RESET( powerins )
|
static MACHINE_RESET( powerins )
|
||||||
{
|
{
|
||||||
oki_bank = -1; // samples bank "unitialised"
|
oki_bank = -1; // samples bank "unitialised"
|
||||||
NMK112_init(0, "oki1", "oki2");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void irqhandler(const device_config *device, int irq)
|
static void irqhandler(const device_config *device, int irq)
|
||||||
{
|
{
|
||||||
cputag_set_input_line(device->machine, "soundcpu", 0, irq ? ASSERT_LINE : CLEAR_LINE);
|
cputag_set_input_line(device->machine, "soundcpu", 0, irq ? ASSERT_LINE : CLEAR_LINE);
|
||||||
@ -353,6 +351,12 @@ static const ym2203_interface ym2203_config =
|
|||||||
irqhandler
|
irqhandler
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static const nmk112_interface powerins_nmk112_intf =
|
||||||
|
{
|
||||||
|
"oki1", "oki2", 0
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
static MACHINE_DRIVER_START( powerins )
|
static MACHINE_DRIVER_START( powerins )
|
||||||
|
|
||||||
/* basic machine hardware */
|
/* basic machine hardware */
|
||||||
@ -394,6 +398,8 @@ static MACHINE_DRIVER_START( powerins )
|
|||||||
MDRV_SOUND_ADD("ym2203", YM2203, 12000000 / 8)
|
MDRV_SOUND_ADD("ym2203", YM2203, 12000000 / 8)
|
||||||
MDRV_SOUND_CONFIG(ym2203_config)
|
MDRV_SOUND_CONFIG(ym2203_config)
|
||||||
MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 2.0)
|
MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 2.0)
|
||||||
|
|
||||||
|
MDRV_NMK112_ADD("nmk112", powerins_nmk112_intf)
|
||||||
MACHINE_DRIVER_END
|
MACHINE_DRIVER_END
|
||||||
|
|
||||||
static MACHINE_DRIVER_START( powerina )
|
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(0x100016, 0x100017) AM_WRITENOP /* IRQ enable? */
|
||||||
AM_RANGE(0x100018, 0x100019) AM_WRITE(quizpani_tilesbank_w)
|
AM_RANGE(0x100018, 0x100019) AM_WRITE(quizpani_tilesbank_w)
|
||||||
AM_RANGE(0x104000, 0x104001) AM_DEVREADWRITE8("oki", okim6295_r,okim6295_w, 0x00ff)
|
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(0x108000, 0x1083ff) AM_RAM_WRITE(paletteram16_RRRRGGGGBBBBRGBx_word_w) AM_BASE_GENERIC(paletteram)
|
||||||
AM_RANGE(0x108400, 0x1085ff) AM_WRITENOP
|
AM_RANGE(0x108400, 0x1085ff) AM_WRITENOP
|
||||||
AM_RANGE(0x10c000, 0x10c007) AM_RAM AM_BASE(&quizpani_scrollreg)
|
AM_RANGE(0x10c000, 0x10c007) AM_RAM AM_BASE(&quizpani_scrollreg)
|
||||||
@ -234,10 +234,11 @@ static GFXDECODE_START( quizpani )
|
|||||||
GFXDECODE_END
|
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 )
|
static MACHINE_DRIVER_START( quizpani )
|
||||||
MDRV_CPU_ADD("maincpu", M68000, 10000000)
|
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_VBLANK_INT("screen", irq4_line_hold)
|
||||||
MDRV_CPU_PERIODIC_INT(irq1_line_hold,164) // music tempo
|
MDRV_CPU_PERIODIC_INT(irq1_line_hold,164) // music tempo
|
||||||
|
|
||||||
MDRV_MACHINE_RESET( quizpani )
|
|
||||||
|
|
||||||
MDRV_GFXDECODE(quizpani)
|
MDRV_GFXDECODE(quizpani)
|
||||||
MDRV_PALETTE_LENGTH(0x200)
|
MDRV_PALETTE_LENGTH(0x200)
|
||||||
|
|
||||||
|
|
||||||
MDRV_SCREEN_ADD("screen", RASTER)
|
MDRV_SCREEN_ADD("screen", RASTER)
|
||||||
MDRV_SCREEN_REFRESH_RATE(60)
|
MDRV_SCREEN_REFRESH_RATE(60)
|
||||||
MDRV_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
|
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_ADD("oki", OKIM6295, 16000000/4)
|
||||||
MDRV_SOUND_CONFIG(okim6295_interface_pin7low)
|
MDRV_SOUND_CONFIG(okim6295_interface_pin7low)
|
||||||
MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
|
MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
|
||||||
|
|
||||||
|
MDRV_NMK112_ADD("nmk112", quizpani_nmk112_intf)
|
||||||
MACHINE_DRIVER_END
|
MACHINE_DRIVER_END
|
||||||
|
|
||||||
ROM_START( quizpani )
|
ROM_START( quizpani )
|
||||||
|
@ -353,10 +353,6 @@ static MACHINE_RESET( bgaregga )
|
|||||||
memory_configure_bank(machine, "bank1", 0, 16, Z80, 0x4000);
|
memory_configure_bank(machine, "bank1", 0, 16, Z80, 0x4000);
|
||||||
memory_set_bank(machine, "bank1", 4);
|
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);
|
MACHINE_RESET_CALL(toaplan2);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1091,26 +1087,34 @@ static WRITE8_HANDLER( bgaregga_bankswitch_w )
|
|||||||
|
|
||||||
static WRITE8_HANDLER( raizing_okim6295_bankselect_0 )
|
static WRITE8_HANDLER( raizing_okim6295_bankselect_0 )
|
||||||
{
|
{
|
||||||
NMK112_okibank_w(space, 0, data & 0x0f); // chip 0 bank 0
|
const device_config *nmk112 = devtag_get_device(space->machine, "nmk112");
|
||||||
NMK112_okibank_w(space, 1, (data >> 4) & 0x0f); // chip 0 bank 1
|
|
||||||
|
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 )
|
static WRITE8_HANDLER( raizing_okim6295_bankselect_1 )
|
||||||
{
|
{
|
||||||
NMK112_okibank_w(space, 2, data & 0x0f); // chip 0 bank 2
|
const device_config *nmk112 = devtag_get_device(space->machine, "nmk112");
|
||||||
NMK112_okibank_w(space, 3, (data >> 4) & 0x0f); // chip 0 bank 3
|
|
||||||
|
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 )
|
static WRITE8_HANDLER( raizing_okim6295_bankselect_2 )
|
||||||
{
|
{
|
||||||
NMK112_okibank_w(space, 4, data & 0x0f); // chip 1 bank 0
|
const device_config *nmk112 = devtag_get_device(space->machine, "nmk112");
|
||||||
NMK112_okibank_w(space, 5, (data >> 4) & 0x0f); // chip 1 bank 1
|
|
||||||
|
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 )
|
static WRITE8_HANDLER( raizing_okim6295_bankselect_3 )
|
||||||
{
|
{
|
||||||
NMK112_okibank_w(space, 6, data & 0x0f); // chip 1 bank 2
|
const device_config *nmk112 = devtag_get_device(space->machine, "nmk112");
|
||||||
NMK112_okibank_w(space, 7, (data >> 4) & 0x0f); // chip 1 bank 3
|
|
||||||
|
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 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 )
|
static MACHINE_DRIVER_START( batsugun )
|
||||||
|
|
||||||
/* basic machine hardware */
|
/* basic machine hardware */
|
||||||
@ -4247,6 +4262,8 @@ static MACHINE_DRIVER_START( bgaregga )
|
|||||||
MDRV_SOUND_ADD("oki", OKIM6295, XTAL_32MHz/16)
|
MDRV_SOUND_ADD("oki", OKIM6295, XTAL_32MHz/16)
|
||||||
MDRV_SOUND_CONFIG(okim6295_interface_pin7high)
|
MDRV_SOUND_CONFIG(okim6295_interface_pin7high)
|
||||||
MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
|
MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
|
||||||
|
|
||||||
|
MDRV_NMK112_ADD("nmk112", bgaregga_nmk112_intf)
|
||||||
MACHINE_DRIVER_END
|
MACHINE_DRIVER_END
|
||||||
|
|
||||||
|
|
||||||
@ -4293,6 +4310,8 @@ static MACHINE_DRIVER_START( batrider )
|
|||||||
MDRV_SOUND_ADD("oki2", OKIM6295, XTAL_32MHz/10)
|
MDRV_SOUND_ADD("oki2", OKIM6295, XTAL_32MHz/10)
|
||||||
MDRV_SOUND_CONFIG(okim6295_interface_pin7low)
|
MDRV_SOUND_CONFIG(okim6295_interface_pin7low)
|
||||||
MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
|
MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
|
||||||
|
|
||||||
|
MDRV_NMK112_ADD("nmk112", batrider_nmk112_intf)
|
||||||
MACHINE_DRIVER_END
|
MACHINE_DRIVER_END
|
||||||
|
|
||||||
static MACHINE_DRIVER_START( bbakraid )
|
static MACHINE_DRIVER_START( bbakraid )
|
||||||
|
@ -10,36 +10,99 @@
|
|||||||
#include "driver.h"
|
#include "driver.h"
|
||||||
#include "nmk112.h"
|
#include "nmk112.h"
|
||||||
|
|
||||||
#define MAXCHIPS 2
|
|
||||||
#define TABLESIZE 0x100
|
#define TABLESIZE 0x100
|
||||||
#define BANKSIZE 0x10000
|
#define BANKSIZE 0x10000
|
||||||
|
|
||||||
/* which chips have their sample address table divided into pages */
|
typedef struct _nmk112_state nmk112_state;
|
||||||
static UINT8 page_mask;
|
struct _nmk112_state
|
||||||
|
|
||||||
static UINT8 current_bank[8];
|
|
||||||
static const char *region[2];
|
|
||||||
|
|
||||||
void NMK112_init(UINT8 disable_page_mask, const char *rgn0, const char *rgn1)
|
|
||||||
{
|
{
|
||||||
region[0] = rgn0;
|
/* which chips have their sample address table divided into pages */
|
||||||
region[1] = rgn1;
|
UINT8 page_mask;
|
||||||
memset(current_bank, ~0, sizeof(current_bank));
|
|
||||||
page_mask = ~disable_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 )
|
||||||
{
|
{
|
||||||
|
assert(device != NULL);
|
||||||
|
assert((device->type == NMK112));
|
||||||
|
return (const nmk112_interface *) device->static_config;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*****************************************************************************
|
||||||
|
DEVICE HANDLERS
|
||||||
|
*****************************************************************************/
|
||||||
|
|
||||||
|
WRITE8_DEVICE_HANDLER( nmk112_okibank_w )
|
||||||
|
{
|
||||||
|
nmk112_state *nmk112 = get_safe_token(device);
|
||||||
int chip = (offset & 4) >> 2;
|
int chip = (offset & 4) >> 2;
|
||||||
int banknum = offset & 3;
|
int banknum = offset & 3;
|
||||||
int paged = (page_mask & (1 << chip));
|
int paged = (nmk112->page_mask & (1 << chip));
|
||||||
|
|
||||||
UINT8 *rom = memory_region(space->machine, region[chip]);
|
UINT8 *rom = chip ? nmk112->rom1 : nmk112->rom0;
|
||||||
int size = memory_region_length(space->machine, region[chip]) - 0x40000;
|
int size = chip ? nmk112->size1 : nmk112->size0;
|
||||||
int bankaddr = (data * BANKSIZE) % size;
|
int bankaddr = (data * BANKSIZE) % size;
|
||||||
|
|
||||||
if (current_bank[offset] == data) return;
|
if (nmk112->current_bank[offset] == data)
|
||||||
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);
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
|
||||||
|
nmk112->last_bank[chip] = offset & 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
WRITE16_DEVICE_HANDLER( nmk112_okibank_lsb_w )
|
||||||
|
{
|
||||||
|
if (ACCESSING_BITS_0_7)
|
||||||
|
{
|
||||||
|
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 */
|
/* copy the samples */
|
||||||
if ((paged) && (banknum == 0))
|
if ((paged) && (banknum == 0))
|
||||||
@ -54,11 +117,48 @@ WRITE8_HANDLER( NMK112_okibank_w )
|
|||||||
memcpy(rom, rom + 0x40000 + bankaddr, TABLESIZE);
|
memcpy(rom, rom + 0x40000 + bankaddr, TABLESIZE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
WRITE16_HANDLER( NMK112_okibank_lsb_w )
|
|
||||||
|
/*****************************************************************************
|
||||||
|
DEVICE INTERFACE
|
||||||
|
*****************************************************************************/
|
||||||
|
|
||||||
|
static DEVICE_START( nmk112 )
|
||||||
{
|
{
|
||||||
if (ACCESSING_BITS_0_7)
|
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_okibank_w(space, offset, data & 0xff);
|
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