From 1acb9f27339ae510dcc8732c7bd00d989f30ac18 Mon Sep 17 00:00:00 2001 From: angelosa Date: Fri, 2 Feb 2018 09:06:07 +0100 Subject: [PATCH] namcona1.cpp: improved encapsulation [Angelo Salese] --- src/mame/drivers/namcona1.cpp | 59 ++++++++++++++++++----------------- src/mame/includes/namcona1.h | 44 ++++++++++++++++++++------ 2 files changed, 65 insertions(+), 38 deletions(-) diff --git a/src/mame/drivers/namcona1.cpp b/src/mame/drivers/namcona1.cpp index 363a2d84cfd..1150800b34d 100644 --- a/src/mame/drivers/namcona1.cpp +++ b/src/mame/drivers/namcona1.cpp @@ -27,15 +27,16 @@ To Do: area is uninitialized, the game software automatically writes these values there, but then hangs. *cgangpzl, cgangpzlj, exvania, exvaniaj, knckheadjp, quiztou - +- xday2: unemulated printer and RTC devices (check test mode game options), also battery always returns NG + - X-Day 2: Rom board M112 Rom board custom Key chip i.d. C394 Game uses a small cash-register type printer (connects to rom board) - Game also has a large L.E.D. type score board with several - displays for various scores. (connects to rom board) + Game also has a large L.E.D. type score board with several displays for various scores. (connects to rom board) Game uses coin-type battery on rom board. (not suicide) Game won't startup unless printer is connected and with paper. + The board has a 28c16 EEPROM @@ -229,7 +230,7 @@ READ16_MEMBER(namcona1_state::custom_key_r) if( offset==4 ) return m_count; break; - case NAMCO_EXBANIA: + case NAMCO_EXVANIA: if( offset==2 ) return 0x015e; break; @@ -347,7 +348,7 @@ int namcona1_state::transfer_dword( uint32_t dest, uint32_t source ) return 0; } /* transfer_dword */ -static void blit_setup( int format, int *bytes_per_row, int *pitch, int mode ) +void namcona1_state::blit_setup( int format, int *bytes_per_row, int *pitch, int mode ) { if( mode == 3 ) { /* TILE DATA */ @@ -999,20 +1000,22 @@ MACHINE_CONFIG_DERIVED(namcona1_state::namcona2w, namcona2) MCFG_SCREEN_VISIBLE_AREA(0, 38*8-1-0, 4*8, 32*8-1) MACHINE_CONFIG_END + /* NA-1 Hardware */ +DRIVER_INIT_MEMBER(namcona1_state,bkrtmaq) { m_gametype = NAMCO_BKRTMAQ; } +DRIVER_INIT_MEMBER(namcona1_state,cgangpzl) { m_gametype = NAMCO_CGANGPZL; } +DRIVER_INIT_MEMBER(namcona1_state,emeraldj) { m_gametype = NAMCO_EMERALDA; } +DRIVER_INIT_MEMBER(namcona1_state,exvania) { m_gametype = NAMCO_EXVANIA; } +DRIVER_INIT_MEMBER(namcona1_state,fa) { m_gametype = NAMCO_FA; } +DRIVER_INIT_MEMBER(namcona1_state,swcourt) { m_gametype = NAMCO_SWCOURT; } +DRIVER_INIT_MEMBER(namcona1_state,swcourtb) { m_gametype = NAMCO_SWCOURTB; } +DRIVER_INIT_MEMBER(namcona1_state,tinklpit) { m_gametype = NAMCO_TINKLPIT; save_item(NAME(m_keyval)); } -DRIVER_INIT_MEMBER(namcona1_state,bkrtmaq) { m_gametype = NAMCO_BKRTMAQ; } -DRIVER_INIT_MEMBER(namcona1_state,cgangpzl) { m_gametype = NAMCO_CGANGPZL; } -DRIVER_INIT_MEMBER(namcona1_state,emeralda) { m_gametype = NAMCO_EMERALDA; } /* NA-2 Hardware */ -DRIVER_INIT_MEMBER(namcona1_state,emeraldj) { m_gametype = NAMCO_EMERALDA; } /* NA-1 Hardware */ -DRIVER_INIT_MEMBER(namcona1_state,exbania) { m_gametype = NAMCO_EXBANIA; } -DRIVER_INIT_MEMBER(namcona1_state,fa) { m_gametype = NAMCO_FA; } -DRIVER_INIT_MEMBER(namcona1_state,knckhead) { m_gametype = NAMCO_KNCKHEAD; } -DRIVER_INIT_MEMBER(namcona1_state,numanath) { m_gametype = NAMCO_NUMANATH; } -DRIVER_INIT_MEMBER(namcona1_state,quiztou) { m_gametype = NAMCO_QUIZTOU; } -DRIVER_INIT_MEMBER(namcona1_state,swcourt) { m_gametype = NAMCO_SWCOURT; } -DRIVER_INIT_MEMBER(namcona1_state,swcourtb) { m_gametype = NAMCO_SWCOURTB; } -DRIVER_INIT_MEMBER(namcona1_state,tinklpit) { m_gametype = NAMCO_TINKLPIT; save_item(NAME(m_keyval)); } -DRIVER_INIT_MEMBER(namcona1_state,xday2) { m_gametype = NAMCO_XDAY2; } + /* NA-2 Hardware */ +DRIVER_INIT_MEMBER(namcona2_state,emeralda) { m_gametype = NAMCO_EMERALDA; } +DRIVER_INIT_MEMBER(namcona2_state,knckhead) { m_gametype = NAMCO_KNCKHEAD; } +DRIVER_INIT_MEMBER(namcona2_state,numanath) { m_gametype = NAMCO_NUMANATH; } +DRIVER_INIT_MEMBER(namcona2_state,quiztou) { m_gametype = NAMCO_QUIZTOU; } +DRIVER_INIT_MEMBER(xday2_namcona2_state,xday2) { m_gametype = NAMCO_XDAY2; } ROM_START( bkrtmaq ) ROM_REGION( 0x200000, "maincpu", 0 ) @@ -1358,8 +1361,8 @@ ROM_END GAME( 1992, bkrtmaq, 0, namcona1w, namcona1_quiz, namcona1_state, bkrtmaq, ROT0, "Namco", "Bakuretsu Quiz Ma-Q Dai Bouken (Japan)", MACHINE_SUPPORTS_SAVE ) GAME( 1992, cgangpzl, 0, namcona1w, namcona1_joy, namcona1_state, cgangpzl, ROT0, "Namco", "Cosmo Gang the Puzzle (US)", MACHINE_SUPPORTS_SAVE ) GAME( 1992, cgangpzlj, cgangpzl, namcona1w, namcona1_joy, namcona1_state, cgangpzl, ROT0, "Namco", "Cosmo Gang the Puzzle (Japan)", MACHINE_SUPPORTS_SAVE ) -GAME( 1992, exvania, 0, namcona1, namcona1_joy, namcona1_state, exbania, ROT0, "Namco", "Exvania (World)", MACHINE_SUPPORTS_SAVE ) -GAME( 1992, exvaniaj, exvania, namcona1, namcona1_joy, namcona1_state, exbania, ROT0, "Namco", "Exvania (Japan)", MACHINE_SUPPORTS_SAVE ) +GAME( 1992, exvania, 0, namcona1, namcona1_joy, namcona1_state, exvania, ROT0, "Namco", "Exvania (World)", MACHINE_SUPPORTS_SAVE ) +GAME( 1992, exvaniaj, exvania, namcona1, namcona1_joy, namcona1_state, exvania, ROT0, "Namco", "Exvania (Japan)", MACHINE_SUPPORTS_SAVE ) GAME( 1992, fghtatck, 0, namcona1, namcona1_joy, namcona1_state, fa, ROT90,"Namco", "Fighter & Attacker (US)", MACHINE_SUPPORTS_SAVE ) GAME( 1992, fa, fghtatck, namcona1, namcona1_joy, namcona1_state, fa, ROT90,"Namco", "F/A (Japan)", MACHINE_SUPPORTS_SAVE ) GAME( 1992, swcourt, 0, namcona1w, namcona1_joy, namcona1_state, swcourt, ROT0, "Namco", "Super World Court (World)", MACHINE_SUPPORTS_SAVE ) @@ -1370,11 +1373,11 @@ GAME( 1993, emeraldaja, emeralda, namcona1w, namcona1_joy, namcona1_state, emer GAME( 1993, tinklpit, 0, namcona1w, namcona1_joy, namcona1_state, tinklpit, ROT0, "Namco", "Tinkle Pit (Japan)", MACHINE_SUPPORTS_SAVE ) // NA-2 (C70 MCU) -GAME( 1992, knckhead, 0, namcona2, namcona1_joy, namcona1_state, knckhead, ROT0, "Namco", "Knuckle Heads (World)", MACHINE_SUPPORTS_SAVE ) -GAME( 1992, knckheadj, knckhead, namcona2, namcona1_joy, namcona1_state, knckhead, ROT0, "Namco", "Knuckle Heads (Japan)", MACHINE_SUPPORTS_SAVE ) -GAME( 1992, knckheadjp, knckhead, namcona2, namcona1_joy, namcona1_state, knckhead, ROT0, "Namco", "Knuckle Heads (Japan, Prototype?)", MACHINE_SUPPORTS_SAVE ) -GAME( 1993, emeralda, 0, namcona2w, namcona1_joy, namcona1_state, emeralda, ROT0, "Namco", "Emeraldia (World)", MACHINE_SUPPORTS_SAVE ) -GAME( 1993, numanath, 0, namcona2, namcona1_joy, namcona1_state, numanath, ROT0, "Namco", "Numan Athletics (World)", MACHINE_SUPPORTS_SAVE ) -GAME( 1993, numanathj, numanath, namcona2, namcona1_joy, namcona1_state, numanath, ROT0, "Namco", "Numan Athletics (Japan)", MACHINE_SUPPORTS_SAVE ) -GAME( 1993, quiztou, 0, namcona2, namcona1_quiz, namcona1_state, quiztou, ROT0, "Namco", "Nettou! Gekitou! Quiztou!! (Japan)", MACHINE_SUPPORTS_SAVE ) -GAME( 1995, xday2, 0, namcona2, namcona1_joy, namcona1_state, xday2, ROT0, "Namco", "X-Day 2 (Japan)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) +GAME( 1992, knckhead, 0, namcona2, namcona1_joy, namcona2_state, knckhead, ROT0, "Namco", "Knuckle Heads (World)", MACHINE_SUPPORTS_SAVE ) +GAME( 1992, knckheadj, knckhead, namcona2, namcona1_joy, namcona2_state, knckhead, ROT0, "Namco", "Knuckle Heads (Japan)", MACHINE_SUPPORTS_SAVE ) +GAME( 1992, knckheadjp, knckhead, namcona2, namcona1_joy, namcona2_state, knckhead, ROT0, "Namco", "Knuckle Heads (Japan, Prototype?)", MACHINE_SUPPORTS_SAVE ) +GAME( 1993, emeralda, 0, namcona2w, namcona1_joy, namcona2_state, emeralda, ROT0, "Namco", "Emeraldia (World)", MACHINE_SUPPORTS_SAVE ) +GAME( 1993, numanath, 0, namcona2, namcona1_joy, namcona2_state, numanath, ROT0, "Namco", "Numan Athletics (World)", MACHINE_SUPPORTS_SAVE ) +GAME( 1993, numanathj, numanath, namcona2, namcona1_joy, namcona2_state, numanath, ROT0, "Namco", "Numan Athletics (Japan)", MACHINE_SUPPORTS_SAVE ) +GAME( 1993, quiztou, 0, namcona2, namcona1_quiz, namcona2_state, quiztou, ROT0, "Namco", "Nettou! Gekitou! Quiztou!! (Japan)", MACHINE_SUPPORTS_SAVE ) +GAME( 1995, xday2, 0, namcona2, namcona1_joy, xday2_namcona2_state, xday2, ROT0, "Namco", "X-Day 2 (Japan)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL ) diff --git a/src/mame/includes/namcona1.h b/src/mame/includes/namcona1.h index 0c4c3fc477d..c1af25bc9d9 100644 --- a/src/mame/includes/namcona1.h +++ b/src/mame/includes/namcona1.h @@ -63,19 +63,14 @@ public: DECLARE_WRITE16_MEMBER(snd_w); DECLARE_DRIVER_INIT(bkrtmaq); - DECLARE_DRIVER_INIT(quiztou); - DECLARE_DRIVER_INIT(emeralda); - DECLARE_DRIVER_INIT(numanath); DECLARE_DRIVER_INIT(fa); DECLARE_DRIVER_INIT(cgangpzl); DECLARE_DRIVER_INIT(tinklpit); DECLARE_DRIVER_INIT(swcourt); - DECLARE_DRIVER_INIT(knckhead); - DECLARE_DRIVER_INIT(xday2); - DECLARE_DRIVER_INIT(exbania); + DECLARE_DRIVER_INIT(exvania); DECLARE_DRIVER_INIT(emeraldj); DECLARE_DRIVER_INIT(swcourtb); - + uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); TIMER_DEVICE_CALLBACK_MEMBER(interrupt); @@ -84,19 +79,19 @@ public: void namcona1w(machine_config &config); void namcona2w(machine_config &config); void namcona1(machine_config &config); + protected: virtual void machine_start() override; virtual void machine_reset() override; virtual void video_start() override; -private: enum { NAMCO_CGANGPZL, NAMCO_EMERALDA, NAMCO_KNCKHEAD, NAMCO_BKRTMAQ, - NAMCO_EXBANIA, + NAMCO_EXVANIA, NAMCO_QUIZTOU, NAMCO_SWCOURT, NAMCO_TINKLPIT, @@ -106,6 +101,10 @@ private: NAMCO_SWCOURTB }; + int m_gametype; + +private: + required_device m_maincpu; required_device m_mcu; required_device m_gfxdecode; @@ -131,7 +130,6 @@ private: std::vector m_shaperam; int m_mEnableInterrupts; - int m_gametype; uint16_t m_count; uint32_t m_keyval; uint16_t m_mcu_mailbox[8]; @@ -153,6 +151,7 @@ private: void draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); void draw_background(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int which, int primask ); void tilemap_get_info(tile_data &tileinfo, int tile_index, const uint16_t *tilemap_videoram, bool use_4bpp_gfx); + void blit_setup( int format, int *bytes_per_row, int *pitch, int mode ); TILE_GET_INFO_MEMBER(tilemap_get_info0); TILE_GET_INFO_MEMBER(tilemap_get_info1); TILE_GET_INFO_MEMBER(tilemap_get_info2); @@ -161,3 +160,28 @@ private: void postload(); }; + +class namcona2_state : public namcona1_state +{ +public: + namcona2_state(const machine_config &mconfig, device_type type, const char *tag) + : namcona1_state(mconfig, type, tag) + {} + + DECLARE_DRIVER_INIT(knckhead); + DECLARE_DRIVER_INIT(emeralda); + DECLARE_DRIVER_INIT(numanath); + DECLARE_DRIVER_INIT(quiztou); +}; + +class xday2_namcona2_state : public namcona2_state +{ +public: + xday2_namcona2_state(const machine_config &mconfig, device_type type, const char *tag) + : namcona2_state(mconfig, type, tag) + {} + + static constexpr feature_type unemulated_features() { return feature::PRINTER; } + + DECLARE_DRIVER_INIT(xday2); +};