summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author angelosa <salese_corp_ltd@email.it>2018-02-02 09:06:07 +0100
committer angelosa <salese_corp_ltd@email.it>2018-02-02 09:08:22 +0100
commit1acb9f27339ae510dcc8732c7bd00d989f30ac18 (patch)
treeb983e9350db5bbd45c55c9de68950fec4028bba0
parent9c5516bceb69ff4e753194c0d1b3733836eab4c4 (diff)
namcona1.cpp: improved encapsulation [Angelo Salese]
-rw-r--r--src/mame/drivers/namcona1.cpp61
-rw-r--r--src/mame/includes/namcona1.h44
2 files changed, 66 insertions, 39 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
-
-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-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)); }
+
+ /* 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<cpu_device> m_maincpu;
required_device<cpu_device> m_mcu;
required_device<gfxdecode_device> m_gfxdecode;
@@ -131,7 +130,6 @@ private:
std::vector<uint8_t> 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);
+};