namconb1.cpp: fixed MT06244 by disabling logerrors. Also added save state support (nw)

This commit is contained in:
Ivan Vangelista 2016-06-20 17:51:40 +02:00
parent 3e9dc68be0
commit e925c1a71c
6 changed files with 93 additions and 62 deletions

View File

@ -199,7 +199,7 @@ Games running on this hardware:
- The Outfoxies - The Outfoxies
- Mach Breakers - Mach Breakers
Changes from Namcon System NB1 include: Changes from Namco System NB1 include:
- different memory map - different memory map
- more complex sprite and tile banking - more complex sprite and tile banking
- 2 additional ROZ layers - 2 additional ROZ layers
@ -280,10 +280,21 @@ GFX: Custom 145 ( 80 pin PQFP)
#define MASTER_CLOCK XTAL_48_384MHz #define MASTER_CLOCK XTAL_48_384MHz
#define ENABLE_LOGGING (0)
void namconb1_state::machine_start()
{
save_item(NAME(m_vbl_irq_level));
save_item(NAME(m_pos_irq_level));
save_item(NAME(m_unk_irq_level));
save_item(NAME(m_count));
save_item(NAME(m_port6));
}
/****************************************************************************/ /****************************************************************************/
TIMER_DEVICE_CALLBACK_MEMBER(namconb1_state::namconb_scantimer) TIMER_DEVICE_CALLBACK_MEMBER(namconb1_state::scantimer)
{ {
int scanline = param; int scanline = param;
@ -399,7 +410,8 @@ WRITE8_MEMBER(namconb1_state::namconb1_cpureg_w)
break; break;
default: default:
logerror("Unhandled CPU reg write to [0x%.2x] with 0x%.2x (PC=0x%x)\n", offset, data, space.device().safe_pc()); if (ENABLE_LOGGING)
logerror("Unhandled CPU reg write to [0x%.2x] with 0x%.2x (PC=0x%x)\n", offset, data, space.device().safe_pc());
} }
} }
@ -486,7 +498,8 @@ WRITE8_MEMBER(namconb1_state::namconb2_cpureg_w)
break; break;
default: default:
logerror("Unhandled CPU reg write to [0x%.2x] with 0x%.2x (PC=0x%x)\n", offset, data, space.device().safe_pc()); if (ENABLE_LOGGING)
logerror("Unhandled CPU reg write to [0x%.2x] with 0x%.2x (PC=0x%x)\n", offset, data, space.device().safe_pc());
} }
} }
@ -494,8 +507,11 @@ WRITE8_MEMBER(namconb1_state::namconb2_cpureg_w)
READ8_MEMBER(namconb1_state::namconb1_cpureg_r) READ8_MEMBER(namconb1_state::namconb1_cpureg_r)
{ {
// 16: Watchdog // 16: Watchdog
if (offset != 0x16) if (ENABLE_LOGGING)
logerror("Unhandled CPU reg read from [0x%.2x] (PC=0x%x)\n", offset, space.device().safe_pc()); {
if (offset != 0x16)
logerror("Unhandled CPU reg read from [0x%.2x] (PC=0x%x)\n", offset, space.device().safe_pc());
}
return 0xff; return 0xff;
} }
@ -504,8 +520,11 @@ READ8_MEMBER(namconb1_state::namconb1_cpureg_r)
READ8_MEMBER(namconb1_state::namconb2_cpureg_r) READ8_MEMBER(namconb1_state::namconb2_cpureg_r)
{ {
// 14: Watchdog // 14: Watchdog
if (offset != 0x14) if (ENABLE_LOGGING)
logerror("Unhandled CPU reg read from [0x%.2x] (PC=0x%x)\n", offset, space.device().safe_pc()); {
if (offset != 0x14)
logerror("Unhandled CPU reg read from [0x%.2x] (PC=0x%x)\n", offset, space.device().safe_pc());
}
return 0xff; return 0xff;
} }
@ -606,8 +625,8 @@ READ32_MEMBER(namconb1_state::custom_key_r)
case NAMCONB2_MACH_BREAKERS: case NAMCONB2_MACH_BREAKERS:
break; /* no protection? */ break; /* no protection? */
} }
if (ENABLE_LOGGING)
logerror( "custom_key_r(%d); pc=%08x\n", offset, space.device().safe_pc() ); logerror( "custom_key_r(%d); pc=%08x\n", offset, space.device().safe_pc() );
return 0; return 0;
} /* custom_key_r */ } /* custom_key_r */
@ -641,12 +660,12 @@ WRITE32_MEMBER(namconb1_state::srand_w)
*/ */
} /* srand_w */ } /* srand_w */
READ32_MEMBER(namconb1_state::namconb_share_r) READ32_MEMBER(namconb1_state::share_r)
{ {
return (m_namconb_shareram[offset*2] << 16) | m_namconb_shareram[offset*2+1]; return (m_namconb_shareram[offset*2] << 16) | m_namconb_shareram[offset*2+1];
} }
WRITE32_MEMBER(namconb1_state::namconb_share_w) WRITE32_MEMBER(namconb1_state::share_w)
{ {
COMBINE_DATA(m_namconb_shareram+offset*2+1); COMBINE_DATA(m_namconb_shareram+offset*2+1);
data >>= 16; data >>= 16;
@ -659,7 +678,7 @@ static ADDRESS_MAP_START( namconb1_am, AS_PROGRAM, 32, namconb1_state )
AM_RANGE(0x100000, 0x10001f) AM_READ(gunbulet_gun_r) AM_RANGE(0x100000, 0x10001f) AM_READ(gunbulet_gun_r)
AM_RANGE(0x1c0000, 0x1cffff) AM_RAM AM_RANGE(0x1c0000, 0x1cffff) AM_RAM
AM_RANGE(0x1e4000, 0x1e4003) AM_READWRITE(randgen_r,srand_w) AM_RANGE(0x1e4000, 0x1e4003) AM_READWRITE(randgen_r,srand_w)
AM_RANGE(0x200000, 0x207fff) AM_READWRITE(namconb_share_r, namconb_share_w) AM_RANGE(0x200000, 0x207fff) AM_READWRITE(share_r, share_w)
AM_RANGE(0x208000, 0x2fffff) AM_RAM AM_RANGE(0x208000, 0x2fffff) AM_RAM
AM_RANGE(0x400000, 0x40001f) AM_READWRITE8(namconb1_cpureg_r, namconb1_cpureg_w, 0xffffffff) AM_RANGE(0x400000, 0x40001f) AM_READWRITE8(namconb1_cpureg_r, namconb1_cpureg_w, 0xffffffff)
AM_RANGE(0x580000, 0x5807ff) AM_DEVREADWRITE8("eeprom", eeprom_parallel_28xx_device, read, write, 0xffffffff) AM_RANGE(0x580000, 0x5807ff) AM_DEVREADWRITE8("eeprom", eeprom_parallel_28xx_device, read, write, 0xffffffff)
@ -676,7 +695,7 @@ static ADDRESS_MAP_START( namconb2_am, AS_PROGRAM, 32, namconb1_state )
AM_RANGE(0x000000, 0x0fffff) AM_ROM AM_RANGE(0x000000, 0x0fffff) AM_ROM
AM_RANGE(0x1c0000, 0x1cffff) AM_RAM AM_RANGE(0x1c0000, 0x1cffff) AM_RAM
AM_RANGE(0x1e4000, 0x1e4003) AM_READWRITE(randgen_r,srand_w) AM_RANGE(0x1e4000, 0x1e4003) AM_READWRITE(randgen_r,srand_w)
AM_RANGE(0x200000, 0x207fff) AM_READWRITE(namconb_share_r, namconb_share_w) AM_RANGE(0x200000, 0x207fff) AM_READWRITE(share_r, share_w)
AM_RANGE(0x208000, 0x2fffff) AM_RAM AM_RANGE(0x208000, 0x2fffff) AM_RAM
AM_RANGE(0x400000, 0x4fffff) AM_ROM AM_REGION("data", 0) AM_RANGE(0x400000, 0x4fffff) AM_ROM AM_REGION("data", 0)
AM_RANGE(0x600000, 0x61ffff) AM_READWRITE16(c355_obj_ram_r,c355_obj_ram_w,0xffffffff) AM_SHARE("objram") AM_RANGE(0x600000, 0x61ffff) AM_READWRITE16(c355_obj_ram_r,c355_obj_ram_w,0xffffffff) AM_SHARE("objram")
@ -695,7 +714,7 @@ static ADDRESS_MAP_START( namconb2_am, AS_PROGRAM, 32, namconb1_state )
AM_RANGE(0xf00000, 0xf0001f) AM_READWRITE8(namconb1_cpureg_r, namconb2_cpureg_w, 0xffffffff) AM_RANGE(0xf00000, 0xf0001f) AM_READWRITE8(namconb1_cpureg_r, namconb2_cpureg_w, 0xffffffff)
ADDRESS_MAP_END ADDRESS_MAP_END
WRITE16_MEMBER(namconb1_state::nbmcu_shared_w) WRITE16_MEMBER(namconb1_state::mcu_shared_w)
{ {
// HACK! Many games data ROM routines redirect the vector from the sound command read to an RTS. // HACK! Many games data ROM routines redirect the vector from the sound command read to an RTS.
// This needs more investigation. nebulray and vshoot do NOT do this. // This needs more investigation. nebulray and vshoot do NOT do this.
@ -718,24 +737,24 @@ WRITE16_MEMBER(namconb1_state::nbmcu_shared_w)
static ADDRESS_MAP_START( namcoc75_am, AS_PROGRAM, 16, namconb1_state ) static ADDRESS_MAP_START( namcoc75_am, AS_PROGRAM, 16, namconb1_state )
AM_RANGE(0x002000, 0x002fff) AM_DEVREADWRITE("c352", c352_device, read, write) AM_RANGE(0x002000, 0x002fff) AM_DEVREADWRITE("c352", c352_device, read, write)
AM_RANGE(0x004000, 0x00bfff) AM_RAM_WRITE(nbmcu_shared_w) AM_SHARE("namconb_share") AM_RANGE(0x004000, 0x00bfff) AM_RAM_WRITE(mcu_shared_w) AM_SHARE("namconb_share")
AM_RANGE(0x200000, 0x27ffff) AM_ROM AM_REGION("c75data", 0) AM_RANGE(0x200000, 0x27ffff) AM_ROM AM_REGION("c75data", 0)
ADDRESS_MAP_END ADDRESS_MAP_END
READ8_MEMBER(namconb1_state::port6_r) READ8_MEMBER(namconb1_state::port6_r)
{ {
return m_nbx_port6; return m_port6;
} }
WRITE8_MEMBER(namconb1_state::port6_w) WRITE8_MEMBER(namconb1_state::port6_w)
{ {
m_nbx_port6 = data; m_port6 = data;
} }
READ8_MEMBER(namconb1_state::port7_r) READ8_MEMBER(namconb1_state::port7_r)
{ {
switch (m_nbx_port6 & 0xf0) switch (m_port6 & 0xf0)
{ {
case 0x00: case 0x00:
return read_safe(ioport("P4"), 0xff); return read_safe(ioport("P4"), 0xff);
@ -1107,7 +1126,7 @@ static MACHINE_CONFIG_START( namconb1, namconb1_state )
MCFG_EEPROM_2816_ADD("eeprom") MCFG_EEPROM_2816_ADD("eeprom")
MCFG_MACHINE_RESET_OVERRIDE(namconb1_state, namconb) MCFG_MACHINE_RESET_OVERRIDE(namconb1_state, namconb)
MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", namconb1_state, namconb_scantimer, "screen", 0, 1) MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", namconb1_state, scantimer, "screen", 0, 1)
MCFG_SCREEN_ADD("screen", RASTER) MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_REFRESH_RATE(59.7) MCFG_SCREEN_REFRESH_RATE(59.7)
@ -1144,7 +1163,7 @@ static MACHINE_CONFIG_START( namconb2, namconb1_state )
MCFG_EEPROM_2816_ADD("eeprom") MCFG_EEPROM_2816_ADD("eeprom")
MCFG_MACHINE_RESET_OVERRIDE(namconb1_state, namconb) MCFG_MACHINE_RESET_OVERRIDE(namconb1_state, namconb)
MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", namconb1_state, namconb_scantimer, "screen", 0, 1) MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", namconb1_state, scantimer, "screen", 0, 1)
MCFG_SCREEN_ADD("screen", RASTER) MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_REFRESH_RATE(59.7) MCFG_SCREEN_REFRESH_RATE(59.7)
@ -1961,21 +1980,21 @@ ROM_END
/***************************************************************/ /***************************************************************/
GAME( 1994, nebulray, 0, namconb1, namconb1, namconb1_state, nebulray, ROT90, "Namco", "Nebulas Ray (World, NR2)", MACHINE_IMPERFECT_SOUND ) GAME( 1994, nebulray, 0, namconb1, namconb1, namconb1_state, nebulray, ROT90, "Namco", "Nebulas Ray (World, NR2)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
GAME( 1994, nebulrayj,nebulray, namconb1, namconb1, namconb1_state, nebulray, ROT90, "Namco", "Nebulas Ray (Japan, NR1)", MACHINE_IMPERFECT_SOUND ) GAME( 1994, nebulrayj,nebulray, namconb1, namconb1, namconb1_state, nebulray, ROT90, "Namco", "Nebulas Ray (Japan, NR1)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
GAME( 1994, ptblank, 0, namconb1, gunbulet, namconb1_state, gunbulet, ROT0, "Namco", "Point Blank (World, GN2 Rev B, set 1)", MACHINE_IMPERFECT_SOUND ) GAME( 1994, ptblank, 0, namconb1, gunbulet, namconb1_state, gunbulet, ROT0, "Namco", "Point Blank (World, GN2 Rev B, set 1)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
GAME( 1994, ptblanka, ptblank, namconb1, gunbulet, namconb1_state, gunbulet, ROT0, "Namco", "Point Blank (World, GN2 Rev B, set 2)", MACHINE_IMPERFECT_SOUND ) GAME( 1994, ptblanka, ptblank, namconb1, gunbulet, namconb1_state, gunbulet, ROT0, "Namco", "Point Blank (World, GN2 Rev B, set 2)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
GAME( 1994, gunbuletj,ptblank, namconb1, gunbulet, namconb1_state, gunbulet, ROT0, "Namco", "Gun Bullet (Japan, GN1)", MACHINE_IMPERFECT_SOUND ) GAME( 1994, gunbuletj,ptblank, namconb1, gunbulet, namconb1_state, gunbulet, ROT0, "Namco", "Gun Bullet (Japan, GN1)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
GAME( 1994, gunbuletw,ptblank, namconb1, gunbulet, namconb1_state, gunbulet, ROT0, "Namco", "Gun Bullet (World, GN3 Rev B)", MACHINE_IMPERFECT_SOUND ) GAME( 1994, gunbuletw,ptblank, namconb1, gunbulet, namconb1_state, gunbulet, ROT0, "Namco", "Gun Bullet (World, GN3 Rev B)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
GAME( 1993, gslugrsj, 0, namconb1, nbsports, namconb1_state, gslgr94u, ROT0, "Namco", "Great Sluggers (Japan)", MACHINE_IMPERFECT_SOUND ) GAME( 1993, gslugrsj, 0, namconb1, nbsports, namconb1_state, gslgr94u, ROT0, "Namco", "Great Sluggers (Japan)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
GAME( 1994, gslgr94u, 0, namconb1, nbsports, namconb1_state, gslgr94u, ROT0, "Namco", "Great Sluggers '94", MACHINE_IMPERFECT_SOUND ) GAME( 1994, gslgr94u, 0, namconb1, nbsports, namconb1_state, gslgr94u, ROT0, "Namco", "Great Sluggers '94", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
GAME( 1994, gslgr94j, gslgr94u, namconb1, nbsports, namconb1_state, gslgr94j, ROT0, "Namco", "Great Sluggers '94 (Japan)", MACHINE_IMPERFECT_SOUND ) GAME( 1994, gslgr94j, gslgr94u, namconb1, nbsports, namconb1_state, gslgr94j, ROT0, "Namco", "Great Sluggers '94 (Japan)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
GAME( 1995, sws95, 0, namconb1, nbsports, namconb1_state, sws95, ROT0, "Namco", "Super World Stadium '95 (Japan)", MACHINE_IMPERFECT_SOUND ) GAME( 1995, sws95, 0, namconb1, nbsports, namconb1_state, sws95, ROT0, "Namco", "Super World Stadium '95 (Japan)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
GAME( 1996, sws96, 0, namconb1, nbsports, namconb1_state, sws96, ROT0, "Namco", "Super World Stadium '96 (Japan)", MACHINE_IMPERFECT_SOUND ) GAME( 1996, sws96, 0, namconb1, nbsports, namconb1_state, sws96, ROT0, "Namco", "Super World Stadium '96 (Japan)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
GAME( 1997, sws97, 0, namconb1, nbsports, namconb1_state, sws97, ROT0, "Namco", "Super World Stadium '97 (Japan)", MACHINE_IMPERFECT_SOUND ) GAME( 1997, sws97, 0, namconb1, nbsports, namconb1_state, sws97, ROT0, "Namco", "Super World Stadium '97 (Japan)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
GAME( 1994, vshoot, 0, namconb1, namconb1, namconb1_state, vshoot, ROT0, "Namco", "J-League Soccer V-Shoot (Japan)", MACHINE_IMPERFECT_SOUND ) GAME( 1994, vshoot, 0, namconb1, namconb1, namconb1_state, vshoot, ROT0, "Namco", "J-League Soccer V-Shoot (Japan)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
/* YEAR, NAME, PARENT, MACHINE, INPUT, INIT, MNTR, COMPANY, FULLNAME, FLAGS */ /* YEAR, NAME, PARENT, MACHINE, INPUT, INIT, MNTR, COMPANY, FULLNAME, FLAGS */
GAME( 1994, outfxies, 0, namconb2, outfxies, namconb1_state, outfxies, ROT0, "Namco", "The Outfoxies (World, OU2)", MACHINE_IMPERFECT_SOUND ) GAME( 1994, outfxies, 0, namconb2, outfxies, namconb1_state, outfxies, ROT0, "Namco", "The Outfoxies (World, OU2)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
GAME( 1994, outfxiesj,outfxies, namconb2, outfxies, namconb1_state, outfxies, ROT0, "Namco", "The Outfoxies (Japan, OU1)", MACHINE_IMPERFECT_SOUND ) GAME( 1994, outfxiesj,outfxies, namconb2, outfxies, namconb1_state, outfxies, ROT0, "Namco", "The Outfoxies (Japan, OU1)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
GAME( 1995, machbrkr, 0, namconb2, namconb1, namconb1_state, machbrkr, ROT0, "Namco", "Mach Breakers - Numan Athletics 2 (Japan)", MACHINE_IMPERFECT_SOUND ) GAME( 1995, machbrkr, 0, namconb2, namconb1, namconb1_state, machbrkr, ROT0, "Namco", "Mach Breakers - Numan Athletics 2 (Japan)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )

View File

@ -48,7 +48,7 @@ Custom Chips: Final Lap Assault LuckyWld System21
General Support General Support
--------------- ---------------
C65 - This is the I/O Microcontroller, handles all input/output devices. 63705 uC, CPU4 in Namco System2. C65 - This is the I/O Microcontroller, handles all input/output devices. 63705 uC, CPU4 in Namco System2.
C137 - Takes System clock and generates all sub-system clocks, doesnt need emulation, not accessed via CPU C137 - Takes System clock and generates all sub-system clocks, doesn't need emulation, not accessed via CPU
C139 - Serial Interface Controller C139 - Serial Interface Controller
C148 - Does some Memory Decode, Interrupt Handling, 3 bit PIO port, Bus Controller C148 - Does some Memory Decode, Interrupt Handling, 3 bit PIO port, Bus Controller
C149 - Does decoding of mouse/trackball input streams for the I/O Controller. (Offset Square wave) C149 - Does decoding of mouse/trackball input streams for the I/O Controller. (Offset Square wave)
@ -69,7 +69,7 @@ These two devices take the pixel streams from the tilefield generator and the as
and combine them to form an RGB data stream that is fed to the monitor. and combine them to form an RGB data stream that is fed to the monitor.
C156 - Pixel stream combiner C156 - Pixel stream combiner
Takes tile field & graphics board streams and generates the priorisied pixel, then does the lookup to Takes tile field & graphics board streams and generates the prioritized pixel, then does the lookup to
go from palettised to 24bit RGB pixel. go from palettised to 24bit RGB pixel.
C116 - Screen Waveform Generator C116 - Screen Waveform Generator

View File

@ -50,7 +50,7 @@ public:
UINT8 m_pos_irq_level; UINT8 m_pos_irq_level;
UINT8 m_unk_irq_level; UINT8 m_unk_irq_level;
UINT16 m_count; UINT16 m_count;
UINT8 m_nbx_port6; UINT8 m_port6;
UINT32 m_tilemap_tile_bank[4]; UINT32 m_tilemap_tile_bank[4];
DECLARE_READ32_MEMBER(randgen_r); DECLARE_READ32_MEMBER(randgen_r);
@ -61,9 +61,9 @@ public:
DECLARE_READ8_MEMBER(namconb2_cpureg_r); DECLARE_READ8_MEMBER(namconb2_cpureg_r);
DECLARE_READ32_MEMBER(custom_key_r); DECLARE_READ32_MEMBER(custom_key_r);
DECLARE_READ32_MEMBER(gunbulet_gun_r); DECLARE_READ32_MEMBER(gunbulet_gun_r);
DECLARE_READ32_MEMBER(namconb_share_r); DECLARE_READ32_MEMBER(share_r);
DECLARE_WRITE32_MEMBER(namconb_share_w); DECLARE_WRITE32_MEMBER(share_w);
DECLARE_WRITE16_MEMBER(nbmcu_shared_w); DECLARE_WRITE16_MEMBER(mcu_shared_w);
DECLARE_READ8_MEMBER(port6_r); DECLARE_READ8_MEMBER(port6_r);
DECLARE_WRITE8_MEMBER(port6_w); DECLARE_WRITE8_MEMBER(port6_w);
DECLARE_READ8_MEMBER(port7_r); DECLARE_READ8_MEMBER(port7_r);
@ -76,6 +76,7 @@ public:
DECLARE_READ8_MEMBER(dac1_r); DECLARE_READ8_MEMBER(dac1_r);
DECLARE_READ8_MEMBER(dac0_r); DECLARE_READ8_MEMBER(dac0_r);
virtual void machine_start() override;
DECLARE_DRIVER_INIT(sws95); DECLARE_DRIVER_INIT(sws95);
DECLARE_DRIVER_INIT(machbrkr); DECLARE_DRIVER_INIT(machbrkr);
DECLARE_DRIVER_INIT(sws97); DECLARE_DRIVER_INIT(sws97);
@ -89,8 +90,12 @@ public:
DECLARE_MACHINE_RESET(namconb); DECLARE_MACHINE_RESET(namconb);
DECLARE_VIDEO_START(namconb1); DECLARE_VIDEO_START(namconb1);
DECLARE_VIDEO_START(namconb2); DECLARE_VIDEO_START(namconb2);
void video_update_common(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int bROZ);
UINT32 screen_update_namconb1(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); UINT32 screen_update_namconb1(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
UINT32 screen_update_namconb2(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); UINT32 screen_update_namconb2(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
TIMER_DEVICE_CALLBACK_MEMBER(namconb_scantimer); TIMER_DEVICE_CALLBACK_MEMBER(scantimer);
int NB1objcode2tile(int code);
int NB2objcode2tile(int code);
}; };

View File

@ -135,7 +135,7 @@ public:
UINT16 m_68k_gpu_C148[0x20]; UINT16 m_68k_gpu_C148[0x20];
// C123 Tilemap Emulation // C123 Tilemap Emulation
// TODO: merge with namcos1.c implementation and convert to device // TODO: merge with namcos1.cpp implementation and convert to device
public: public:
DECLARE_WRITE16_MEMBER( c123_tilemap_videoram_w ); DECLARE_WRITE16_MEMBER( c123_tilemap_videoram_w );
DECLARE_READ16_MEMBER( c123_tilemap_videoram_r ); DECLARE_READ16_MEMBER( c123_tilemap_videoram_r );

View File

@ -79,6 +79,9 @@ void namcos2_shared_state::namco_tilemap_init( int gfxbank, void *maskBaseAddr,
mTilemapInfo.tmap[i]->set_scrolldx( -dx, 288+dx ); mTilemapInfo.tmap[i]->set_scrolldx( -dx, 288+dx );
mTilemapInfo.tmap[i]->set_scrolldy( -24, 224+24 ); mTilemapInfo.tmap[i]->set_scrolldy( -24, 224+24 );
} }
save_item(NAME(mTilemapInfo.control));
save_pointer(NAME(mTilemapInfo.videoram.get()), 0x10000);
} /* namco_tilemap_init */ } /* namco_tilemap_init */
void void
@ -819,6 +822,10 @@ void namcos2_shared_state::c355_obj_init(int gfxbank, int pal_xor, c355_obj_code
memset(m_c355_obj_ram, 0, sizeof(m_c355_obj_ram)); // needed for Nebulas Ray memset(m_c355_obj_ram, 0, sizeof(m_c355_obj_ram)); // needed for Nebulas Ray
memset(m_c355_obj_position, 0, sizeof(m_c355_obj_position)); memset(m_c355_obj_position, 0, sizeof(m_c355_obj_position));
save_item(NAME(m_c355_obj_position));
save_item(NAME(m_c355_obj_ram));
save_item(NAME(m_player_mux));
} }
template<class _BitmapClass> template<class _BitmapClass>
@ -986,6 +993,8 @@ void namcos2_shared_state::c169_roz_init(int gfxbank, const char *maskregion)
16,16, 16,16,
256,256); 256,256);
save_item(NAME(m_c169_roz_bank));
save_item(NAME(m_c169_roz_control));
} }
void namcos2_shared_state::c169_roz_unpack_params(const UINT16 *source, roz_parameters &params) void namcos2_shared_state::c169_roz_unpack_params(const UINT16 *source, roz_parameters &params)

View File

@ -73,22 +73,20 @@ NB2TilemapCB(running_machine &machine, UINT16 code, int *tile, int *mask )
} }
} /* NB2TilemapCB */ } /* NB2TilemapCB */
static void void namconb1_state::video_update_common(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int bROZ )
video_update_common(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int bROZ )
{ {
namconb1_state *state = screen.machine().driver_data<namconb1_state>();
int pri; int pri;
if( bROZ ) if( bROZ )
{ {
for( pri=0; pri<16; pri++ ) for( pri=0; pri<16; pri++ )
{ {
state->c169_roz_draw(screen, bitmap, cliprect, pri); c169_roz_draw(screen, bitmap, cliprect, pri);
if( (pri&1)==0 ) if( (pri&1)==0 )
{ {
namco_tilemap_draw( screen, bitmap, cliprect, pri/2 ); namco_tilemap_draw( screen, bitmap, cliprect, pri/2 );
} }
state->c355_obj_draw(screen, bitmap, cliprect, pri ); c355_obj_draw(screen, bitmap, cliprect, pri );
} }
} }
else else
@ -96,7 +94,7 @@ video_update_common(screen_device &screen, bitmap_ind16 &bitmap, const rectangle
for( pri=0; pri<8; pri++ ) for( pri=0; pri<8; pri++ )
{ {
namco_tilemap_draw( screen, bitmap, cliprect, pri ); namco_tilemap_draw( screen, bitmap, cliprect, pri );
state->c355_obj_draw(screen, bitmap, cliprect, pri ); c355_obj_draw(screen, bitmap, cliprect, pri );
} }
} }
} /* video_update_common */ } /* video_update_common */
@ -122,18 +120,18 @@ UINT32 namconb1_state::screen_update_namconb1(screen_device &screen, bitmap_ind1
return 0; return 0;
} }
static int int namconb1_state::NB1objcode2tile( int code )
NB1objcode2tile( running_machine &machine, int code )
{ {
namconb1_state *state = machine.driver_data<namconb1_state>(); int bank = nth_word32( m_spritebank32, code>>11 );
int bank = nth_word32( state->m_spritebank32, code>>11 );
return (code&0x7ff) + bank*0x800; return (code&0x7ff) + bank*0x800;
} }
VIDEO_START_MEMBER(namconb1_state,namconb1) VIDEO_START_MEMBER(namconb1_state,namconb1)
{ {
namco_tilemap_init(NAMCONB1_TILEGFX, memregion(NAMCONB1_TILEMASKREGION)->base(), NB1TilemapCB ); namco_tilemap_init(NAMCONB1_TILEGFX, memregion(NAMCONB1_TILEMASKREGION)->base(), NB1TilemapCB );
c355_obj_init(NAMCONB1_SPRITEGFX,0x0,namcos2_shared_state::c355_obj_code2tile_delegate(FUNC(NB1objcode2tile), &machine())); c355_obj_init(NAMCONB1_SPRITEGFX,0x0,namcos2_shared_state::c355_obj_code2tile_delegate(FUNC(namconb1_state::NB1objcode2tile), this));
save_item(NAME(m_tilemap_tile_bank));
} /* namconb1 */ } /* namconb1 */
/****************************************************************************************************/ /****************************************************************************************************/
@ -161,13 +159,11 @@ UINT32 namconb1_state::screen_update_namconb2(screen_device &screen, bitmap_ind1
return 0; return 0;
} }
static int int namconb1_state::NB2objcode2tile( int code )
NB2objcode2tile( running_machine &machine, int code )
{ {
namconb1_state *state = machine.driver_data<namconb1_state>(); int bank = nth_byte32( m_spritebank32, (code>>11)&0xf );
int bank = nth_byte32( state->m_spritebank32, (code>>11)&0xf );
code &= 0x7ff; code &= 0x7ff;
if( state->m_gametype == NAMCONB2_MACH_BREAKERS ) if( m_gametype == NAMCONB2_MACH_BREAKERS )
{ {
if( bank&0x01 ) code |= 0x01*0x800; if( bank&0x01 ) code |= 0x01*0x800;
if( bank&0x02 ) code |= 0x02*0x800; if( bank&0x02 ) code |= 0x02*0x800;
@ -191,6 +187,8 @@ NB2objcode2tile( running_machine &machine, int code )
VIDEO_START_MEMBER(namconb1_state,namconb2) VIDEO_START_MEMBER(namconb1_state,namconb2)
{ {
namco_tilemap_init(NAMCONB1_TILEGFX, memregion(NAMCONB1_TILEMASKREGION)->base(), NB2TilemapCB ); namco_tilemap_init(NAMCONB1_TILEGFX, memregion(NAMCONB1_TILEMASKREGION)->base(), NB2TilemapCB );
c355_obj_init(NAMCONB1_SPRITEGFX,0x0,namcos2_shared_state::c355_obj_code2tile_delegate(FUNC(NB2objcode2tile), &machine())); c355_obj_init(NAMCONB1_SPRITEGFX,0x0,namcos2_shared_state::c355_obj_code2tile_delegate(FUNC(namconb1_state::NB2objcode2tile), this));
c169_roz_init(NAMCONB1_ROTGFX,NAMCONB1_ROTMASKREGION); c169_roz_init(NAMCONB1_ROTGFX,NAMCONB1_ROTMASKREGION);
save_item(NAME(m_tilemap_tile_bank));
} /* namconb2_vh_start */ } /* namconb2_vh_start */