diff options
author | Ivan Vangelista <mesgnet@yahoo.it> | 2021-02-11 13:55:54 +0100 |
---|---|---|
committer | Ivan Vangelista <mesgnet@yahoo.it> | 2021-02-11 13:55:54 +0100 |
commit | e0b0072ef0239ab4fa1d418d54fb4a0a5f0a7729 (patch) | |
tree | 6f10e7b0fc5adf1599fdb4525db0280080043b09 | |
parent | 307261ec8a1a7dfa9e80b8a547fb94dbbfeac1af (diff) |
juicebox, junofrst, koftball, maygayv1, nmk16, pacman, pastelg, segag80r: initialized some variables which were causing incorrect behaviours in drvnoclear debug builds
-rw-r--r-- | src/mame/drivers/juicebox.cpp | 32 | ||||
-rw-r--r-- | src/mame/drivers/junofrst.cpp | 55 | ||||
-rw-r--r-- | src/mame/drivers/koftball.cpp | 106 | ||||
-rw-r--r-- | src/mame/drivers/maygayv1.cpp | 79 | ||||
-rw-r--r-- | src/mame/drivers/pacman.cpp | 1 | ||||
-rw-r--r-- | src/mame/drivers/tutankhm.cpp | 6 | ||||
-rw-r--r-- | src/mame/includes/tutankhm.h | 2 | ||||
-rw-r--r-- | src/mame/video/nmk16.cpp | 1 | ||||
-rw-r--r-- | src/mame/video/pastelg.cpp | 2 | ||||
-rw-r--r-- | src/mame/video/segag80r.cpp | 2 |
10 files changed, 148 insertions, 138 deletions
diff --git a/src/mame/drivers/juicebox.cpp b/src/mame/drivers/juicebox.cpp index bd8cf9f9bdb..deed136b0bf 100644 --- a/src/mame/drivers/juicebox.cpp +++ b/src/mame/drivers/juicebox.cpp @@ -19,18 +19,13 @@ #include "speaker.h" +namespace { + //#define JUICEBOX_ENTER_DEBUG_MENU //#define JUICEBOX_DISPLAY_ROM_ID #define VERBOSE_LEVEL ( 0 ) -struct jb_smc_t -{ - int add_latch; - int cmd_latch; - int busy; -}; - class juicebox_state : public driver_device { public: @@ -39,6 +34,7 @@ public: , m_maincpu(*this, "maincpu") , m_s3c44b0(*this, "s3c44b0") , m_smartmedia(*this, "smartmedia") + , m_port_g(*this, "PORTG") { } void juicebox(machine_config &config); @@ -47,11 +43,25 @@ public: DECLARE_INPUT_CHANGED_MEMBER(port_changed); +protected: + virtual void machine_start() override; + virtual void machine_reset() override; + private: required_device<cpu_device> m_maincpu; required_device<s3c44b0_device> m_s3c44b0; required_device<smartmedia_image_device> m_smartmedia; + required_ioport m_port_g; + uint32_t port[9]; + + struct jb_smc_t + { + int add_latch; + int cmd_latch; + int busy; + }; + jb_smc_t smc; #if defined(JUICEBOX_ENTER_DEBUG_MENU) || defined(JUICEBOX_DISPLAY_ROM_ID) @@ -59,8 +69,6 @@ private: #endif uint32_t juicebox_nand_r(offs_t offset, uint32_t mem_mask = ~0); void juicebox_nand_w(offs_t offset, uint32_t data, uint32_t mem_mask = ~0); - virtual void machine_start() override; - virtual void machine_reset() override; inline void verboselog(int n_level, const char *s_fmt, ...) ATTR_PRINTF(3,4); void smc_reset(); void smc_init(); @@ -98,6 +106,7 @@ void juicebox_state::smc_reset( ) verboselog(5, "smc_reset\n"); smc.add_latch = 0; smc.cmd_latch = 0; + smc.busy = 0; } void juicebox_state::smc_init( ) @@ -191,7 +200,7 @@ uint32_t juicebox_state::s3c44b0_gpio_port_r(offs_t offset) case S3C44B0_GPIO_PORT_G : { data = 0x0000009F; - data = (data & ~0x1F) | (ioport( "PORTG")->read() & 0x1F); + data = (data & ~0x1F) | (m_port_g->read() & 0x1F); #if defined(JUICEBOX_ENTER_DEBUG_MENU) if (port_g_read_count++ < 1) { @@ -359,4 +368,7 @@ ROM_START( juicebox ) ROMX_LOAD( "image.rom", 0, 0x19E400, CRC(6c0308bf) SHA1(5fe21a38a4cd0d86bb60920eb100138b0e924d90), ROM_BIOS(2) ) ROM_END +} // Anonymous namespace + + COMP(2004, juicebox, 0, 0, juicebox, juicebox, juicebox_state, init_juicebox, "Mattel", "Juice Box", 0) diff --git a/src/mame/drivers/junofrst.cpp b/src/mame/drivers/junofrst.cpp index 2c77f0ef41a..68ef97650d6 100644 --- a/src/mame/drivers/junofrst.cpp +++ b/src/mame/drivers/junofrst.cpp @@ -6,7 +6,7 @@ Juno First : memory map same as tutankham with some address changes Chris Hardy (chrish@kcbbs.gen.nz) Thanks to Rob Jarret for the original Tutankham memory map on which both the -Juno First emu and the mame driver is based on. +Juno First emu and the MAME driver is based on. Juno First memory map by Chris Hardy @@ -97,6 +97,8 @@ Blitter source graphics #include "speaker.h" +namespace { + class junofrst_state : public tutankhm_state { public: @@ -107,13 +109,16 @@ public: , m_filter_0_0(*this, "filter.0.0") , m_filter_0_1(*this, "filter.0.1") , m_filter_0_2(*this, "filter.0.2") + , m_blitrom(*this, "blitrom") { } - void init_junofrst(); - void junofrst(machine_config &config); +protected: + virtual void machine_start() override; + virtual void machine_reset() override; + private: void blitter_w(offs_t offset, uint8_t data); void bankselect_w(uint8_t data); @@ -123,9 +128,6 @@ private: uint8_t portA_r(); void portB_w(uint8_t data); - virtual void machine_start() override; - virtual void machine_reset() override; - DECLARE_WRITE_LINE_MEMBER(_30hz_irq); void audio_map(address_map &map); void main_map(address_map &map); @@ -137,10 +139,11 @@ private: required_device<filter_rc_device> m_filter_0_0; required_device<filter_rc_device> m_filter_0_1; required_device<filter_rc_device> m_filter_0_2; + required_region_ptr<uint8_t> m_blitrom; uint8_t m_blitterdata[4]; - int m_i8039_status; - int m_last_irq; + uint8_t m_i8039_status; + uint8_t m_last_irq; }; @@ -169,27 +172,22 @@ void junofrst_state::blitter_w(offs_t offset, uint8_t data) /* blitter is triggered by $8073 */ if (offset == 3) { - int i; - uint8_t *gfx_rom = memregion("gfx1")->base(); - offs_t src = ((m_blitterdata[2] << 8) | m_blitterdata[3]) & 0xfffc; offs_t dest = (m_blitterdata[0] << 8) | m_blitterdata[1]; int copy = m_blitterdata[3] & 0x01; /* 16x16 graphics */ - for (i = 0; i < 16; i++) + for (int i = 0; i < 16; i++) { - int j; - - for (j = 0; j < 16; j++) + for (int j = 0; j < 16; j++) { uint8_t data; if (src & 1) - data = gfx_rom[src >> 1] & 0x0f; + data = m_blitrom[src >> 1] & 0x0f; else - data = gfx_rom[src >> 1] >> 4; + data = m_blitrom[src >> 1] >> 4; src += 1; @@ -217,7 +215,7 @@ void junofrst_state::blitter_w(offs_t offset, uint8_t data) void junofrst_state::bankselect_w(uint8_t data) { - membank("bank1")->set_entry(data & 0x0f); + m_mainbank->set_entry(data & 0x0f); } @@ -299,7 +297,7 @@ void junofrst_state::main_map(address_map &map) map(0x8060, 0x8060).w(FUNC(junofrst_state::bankselect_w)); map(0x8070, 0x8073).w(FUNC(junofrst_state::blitter_w)); map(0x8100, 0x8fff).ram(); - map(0x9000, 0x9fff).bankr("bank1"); + map(0x9000, 0x9fff).bankr(m_mainbank); map(0xa000, 0xffff).rom(); } @@ -371,6 +369,9 @@ INPUT_PORTS_END void junofrst_state::machine_start() { // note that base class version is not called + + m_mainbank->configure_entries(0, 16, memregion("maincpu")->base() + 0x10000, 0x1000); + save_item(NAME(m_i8039_status)); save_item(NAME(m_last_irq)); save_item(NAME(m_irq_toggle)); @@ -389,6 +390,7 @@ void junofrst_state::machine_reset() m_blitterdata[1] = 0; m_blitterdata[2] = 0; m_blitterdata[3] = 0; + m_irq_toggle = 0; } WRITE_LINE_MEMBER(junofrst_state::_30hz_irq) @@ -476,7 +478,7 @@ ROM_START( junofrst ) ROM_REGION( 0x1000, "mcu", 0 ) /* 8039 */ ROM_LOAD( "jfs2_p4.bin", 0x0000, 0x1000, CRC(d0fa5d5f) SHA1(9d0730d1d037bf96b0c933a32355602bf2d735dd) ) - ROM_REGION( 0x6000, "gfx1", 0 ) /* BLTROM, used at runtime */ + ROM_REGION( 0x6000, "blitrom", 0 ) /* BLTROM, used at runtime */ ROM_LOAD( "jfs3_c7.bin", 0x00000, 0x2000, CRC(aeacf6db) SHA1(f99ef9f9153d7a83e1881d9181faac99cb8c8a57) ) ROM_LOAD( "jfs4_d7.bin", 0x02000, 0x2000, CRC(206d954c) SHA1(65494766676f18d8b5ae9a54cee00790e7b1e67e) ) ROM_LOAD( "jfs5_e7.bin", 0x04000, 0x2000, CRC(1eb87a6e) SHA1(f5471b9f6f1fa6d6e5d76300d89f71da3129516a) ) @@ -501,19 +503,14 @@ ROM_START( junofrstg ) ROM_REGION( 0x1000, "mcu", 0 ) /* 8039 */ ROM_LOAD( "jfs2_p4.bin", 0x0000, 0x1000, CRC(d0fa5d5f) SHA1(9d0730d1d037bf96b0c933a32355602bf2d735dd) ) - ROM_REGION( 0x6000, "gfx1", 0 ) /* BLTROM, used at runtime */ + ROM_REGION( 0x6000, "blitrom", 0 ) /* BLTROM, used at runtime */ ROM_LOAD( "jfs3_c7.bin", 0x00000, 0x2000, CRC(aeacf6db) SHA1(f99ef9f9153d7a83e1881d9181faac99cb8c8a57) ) ROM_LOAD( "jfs4_d7.bin", 0x02000, 0x2000, CRC(206d954c) SHA1(65494766676f18d8b5ae9a54cee00790e7b1e67e) ) ROM_LOAD( "jfs5_e7.bin", 0x04000, 0x2000, CRC(1eb87a6e) SHA1(f5471b9f6f1fa6d6e5d76300d89f71da3129516a) ) ROM_END +} // Anonymous namespace -void junofrst_state::init_junofrst() -{ - membank("bank1")->configure_entries(0, 16, memregion("maincpu")->base() + 0x10000, 0x1000); -} - - -GAME( 1983, junofrst, 0, junofrst, junofrst, junofrst_state, init_junofrst, ROT90, "Konami", "Juno First", MACHINE_SUPPORTS_SAVE ) -GAME( 1983, junofrstg, junofrst, junofrst, junofrst, junofrst_state, init_junofrst, ROT90, "Konami (Gottlieb license)", "Juno First (Gottlieb)", MACHINE_SUPPORTS_SAVE ) +GAME( 1983, junofrst, 0, junofrst, junofrst, junofrst_state, empty_init, ROT90, "Konami", "Juno First", MACHINE_SUPPORTS_SAVE ) +GAME( 1983, junofrstg, junofrst, junofrst, junofrst, junofrst_state, empty_init, ROT90, "Konami (Gottlieb license)", "Juno First (Gottlieb)", MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/drivers/koftball.cpp b/src/mame/drivers/koftball.cpp index 3b20ab32360..734a75f5b81 100644 --- a/src/mame/drivers/koftball.cpp +++ b/src/mame/drivers/koftball.cpp @@ -13,7 +13,7 @@ BMC ADB40817(80 Pin PQFP - google hits, but no datasheet or description) RAMDAC TRC1710-80PCA (Monolithic 256-word by 18bit Look-up Table & Triple Video DAC with 6-bit DACs) File 89C67 (MCU?? Next to 3.57954MHz OSC) OSC: 21.47727MHz & 3.57954MHz -2 8-way dipswitchs +2 8-way dipswitches part # scratched 64 pin PLCC (soccer ball sticker over this chip ;-) ft5_v16_c5.u14 \ @@ -40,6 +40,9 @@ ft5_v6_c4.u58 / #include "tilemap.h" +namespace { + + #define NVRAM_HACK 1 class koftball_state : public driver_device @@ -49,8 +52,7 @@ public: driver_device(mconfig, type, tag), m_maincpu(*this,"maincpu"), m_main_ram(*this, "main_ram"), - m_bmc_1_videoram(*this, "bmc_1_videoram"), - m_bmc_2_videoram(*this, "bmc_2_videoram"), + m_videoram(*this, "videoram%u", 0U), m_gfxdecode(*this, "gfxdecode"), m_palette(*this, "palette") { } @@ -59,44 +61,34 @@ public: void init_koftball(); +protected: + virtual void video_start() override; + private: required_device<cpu_device> m_maincpu; required_shared_ptr<uint16_t> m_main_ram; - required_shared_ptr<uint16_t> m_bmc_1_videoram; - required_shared_ptr<uint16_t> m_bmc_2_videoram; + required_shared_ptr_array<uint16_t, 2> m_videoram; required_device<gfxdecode_device> m_gfxdecode; required_device<palette_device> m_palette; - tilemap_t *m_tilemap_1; - tilemap_t *m_tilemap_2; + tilemap_t *m_tilemap[2]; uint16_t m_prot_data; uint16_t random_number_r(); uint16_t prot_r(); void prot_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); - void bmc_1_videoram_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); - void bmc_2_videoram_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); - TILE_GET_INFO_MEMBER(get_t1_tile_info); - TILE_GET_INFO_MEMBER(get_t2_tile_info); - virtual void video_start() override; - uint32_t screen_update_koftball(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - TIMER_DEVICE_CALLBACK_MEMBER(bmc_interrupt); + template <uint8_t Which> void videoram_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); + template <uint8_t Which> TILE_GET_INFO_MEMBER(get_tile_info); + uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + TIMER_DEVICE_CALLBACK_MEMBER(interrupt); void koftball_mem(address_map &map); void ramdac_map(address_map &map); }; -TILE_GET_INFO_MEMBER(koftball_state::get_t1_tile_info) -{ - int data = m_bmc_1_videoram[tile_index]; - tileinfo.set(0, - data, - 0, - 0); -} - -TILE_GET_INFO_MEMBER(koftball_state::get_t2_tile_info) +template <uint8_t Which> +TILE_GET_INFO_MEMBER(koftball_state::get_tile_info) { - int data = m_bmc_2_videoram[tile_index]; + int data = m_videoram[Which][tile_index]; tileinfo.set(0, data, 0, @@ -105,16 +97,16 @@ TILE_GET_INFO_MEMBER(koftball_state::get_t2_tile_info) void koftball_state::video_start() { - m_tilemap_1 = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(koftball_state::get_t1_tile_info)), TILEMAP_SCAN_ROWS, 8,8,64,32); - m_tilemap_2 = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(koftball_state::get_t2_tile_info)), TILEMAP_SCAN_ROWS, 8,8,64,32); + m_tilemap[0] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(koftball_state::get_tile_info<0>)), TILEMAP_SCAN_ROWS, 8,8,64,32); + m_tilemap[1] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(koftball_state::get_tile_info<1>)), TILEMAP_SCAN_ROWS, 8,8,64,32); - m_tilemap_1->set_transparent_pen(0); + m_tilemap[0]->set_transparent_pen(0); } -uint32_t koftball_state::screen_update_koftball(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +uint32_t koftball_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { - m_tilemap_2->draw(screen, bitmap, cliprect, 0, 0); - m_tilemap_1->draw(screen, bitmap, cliprect, 0, 0); + m_tilemap[1]->draw(screen, bitmap, cliprect, 0, 0); + m_tilemap[0]->draw(screen, bitmap, cliprect, 0, 0); return 0; } @@ -143,28 +135,23 @@ void koftball_state::prot_w(offs_t offset, uint16_t data, uint16_t mem_mask) COMBINE_DATA(&m_prot_data); } -void koftball_state::bmc_1_videoram_w(offs_t offset, uint16_t data, uint16_t mem_mask) +template <uint8_t Which> +void koftball_state::videoram_w(offs_t offset, uint16_t data, uint16_t mem_mask) { - COMBINE_DATA(&m_bmc_1_videoram[offset]); - m_tilemap_1->mark_tile_dirty(offset); -} - -void koftball_state::bmc_2_videoram_w(offs_t offset, uint16_t data, uint16_t mem_mask) -{ - COMBINE_DATA(&m_bmc_2_videoram[offset]); - m_tilemap_2->mark_tile_dirty(offset); + COMBINE_DATA(&m_videoram[Which][offset]); + m_tilemap[Which]->mark_tile_dirty(offset); } void koftball_state::koftball_mem(address_map &map) { map(0x000000, 0x01ffff).rom(); - map(0x220000, 0x22ffff).ram().share("main_ram"); + map(0x220000, 0x22ffff).ram().share(m_main_ram); - map(0x260000, 0x260fff).w(FUNC(koftball_state::bmc_1_videoram_w)).share("bmc_1_videoram"); - map(0x261000, 0x261fff).w(FUNC(koftball_state::bmc_2_videoram_w)).share("bmc_2_videoram"); + map(0x260000, 0x260fff).w(FUNC(koftball_state::videoram_w<0>)).share(m_videoram[0]); + map(0x261000, 0x261fff).w(FUNC(koftball_state::videoram_w<1>)).share(m_videoram[1]); map(0x262000, 0x26ffff).ram(); - map(0x280000, 0x28ffff).ram(); /* unused ? */ + map(0x280000, 0x28ffff).ram(); // unused ? map(0x2a0000, 0x2a001f).nopw(); map(0x2a0000, 0x2a001f).r(FUNC(koftball_state::random_number_r)); map(0x2b0000, 0x2b0003).r(FUNC(koftball_state::random_number_r)); @@ -210,7 +197,7 @@ static INPUT_PORTS_START( koftball ) INPUT_PORTS_END -TIMER_DEVICE_CALLBACK_MEMBER(koftball_state::bmc_interrupt) +TIMER_DEVICE_CALLBACK_MEMBER(koftball_state::interrupt) { int scanline = param; @@ -236,7 +223,7 @@ static const gfx_layout tilelayout = }; static GFXDECODE_START( gfx_koftball ) - GFXDECODE_ENTRY( "gfx1", 0, tilelayout, 0, 1 ) + GFXDECODE_ENTRY( "tiles", 0, tilelayout, 0, 1 ) GFXDECODE_END @@ -244,12 +231,12 @@ void koftball_state::koftball(machine_config &config) { M68000(config, m_maincpu, XTAL(21'477'272) / 2); m_maincpu->set_addrmap(AS_PROGRAM, &koftball_state::koftball_mem); - TIMER(config, "scantimer").configure_scanline(FUNC(koftball_state::bmc_interrupt), "screen", 0, 1); + TIMER(config, "scantimer").configure_scanline(FUNC(koftball_state::interrupt), "screen", 0, 1); screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); screen.set_refresh_hz(60); - screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */); - screen.set_screen_update(FUNC(koftball_state::screen_update_koftball)); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); // not accurate + screen.set_screen_update(FUNC(koftball_state::screen_update)); screen.set_size(64*8, 32*8); screen.set_visarea(0*8, 64*8-1, 0*8, 30*8-1); screen.set_palette(m_palette); @@ -267,24 +254,24 @@ void koftball_state::koftball(machine_config &config) ymsnd.add_route(ALL_OUTPUTS, "lspeaker", 0.50); ymsnd.add_route(ALL_OUTPUTS, "rspeaker", 0.50); - okim6295_device &oki(OKIM6295(config, "oki", 1122000, okim6295_device::PIN7_LOW)); /* clock frequency & pin 7 not verified */ + okim6295_device &oki(OKIM6295(config, "oki", 1122000, okim6295_device::PIN7_LOW)); // clock frequency & pin 7 not verified oki.add_route(ALL_OUTPUTS, "lspeaker", 0.50); oki.add_route(ALL_OUTPUTS, "rspeaker", 0.50); } ROM_START( koftball ) - ROM_REGION( 0x200000, "maincpu", 0 ) /* 68000 Code */ + ROM_REGION( 0x200000, "maincpu", 0 ) // 68000 Code ROM_LOAD16_BYTE( "ft5_v16_c5.u14", 0x000001, 0x10000, CRC(45c856e3) SHA1(0a25cfc2b09f1bf996f9149ee2a7d0a7e51794b7) ) ROM_LOAD16_BYTE( "ft5_v16_c6.u15", 0x000000, 0x10000, CRC(5e1784a5) SHA1(5690d315500fb533b12b598cb0a51bd1eadd0505) ) - ROM_REGION( 0x80000, "gfx1", 0 ) /* tiles */ - ROM_LOAD16_BYTE( "ft5_v6_c3.u61", 0x00000, 0x20000, CRC(f3f747f3) SHA1(6e376d42099733e52779c089303391eeddf4fa87) ) - ROM_LOAD16_BYTE( "ft5_v6_c4.u58", 0x00001, 0x20000, CRC(8b774574) SHA1(a79c1cf90d7b5ef0aba17770700b2fe18846f7b7) ) - ROM_LOAD16_BYTE( "ft5_v6_c1.u59", 0x40000, 0x20000, CRC(b33a008f) SHA1(c4fd40883fa1c1cbc58f7b342fed753c52f0cf59) ) - ROM_LOAD16_BYTE( "ft5_v6_c2.u60", 0x40001, 0x20000, CRC(3dc22223) SHA1(dc74800c51de3b6a7fbf7214a1da1d2f3d2aea84) ) + ROM_REGION( 0x80000, "tiles", 0 ) + ROM_LOAD16_BYTE( "ft5_v6_c3.u61", 0x00000, 0x20000, CRC(f3f747f3) SHA1(6e376d42099733e52779c089303391eeddf4fa87) ) + ROM_LOAD16_BYTE( "ft5_v6_c4.u58", 0x00001, 0x20000, CRC(8b774574) SHA1(a79c1cf90d7b5ef0aba17770700b2fe18846f7b7) ) + ROM_LOAD16_BYTE( "ft5_v6_c1.u59", 0x40000, 0x20000, CRC(b33a008f) SHA1(c4fd40883fa1c1cbc58f7b342fed753c52f0cf59) ) + ROM_LOAD16_BYTE( "ft5_v6_c2.u60", 0x40001, 0x20000, CRC(3dc22223) SHA1(dc74800c51de3b6a7fbf7214a1da1d2f3d2aea84) ) - ROM_REGION( 0x040000, "oki", 0 ) /* Samples */ + ROM_REGION( 0x040000, "oki", 0 ) // Samples ROM_LOAD( "ft5_v6_c9.u21", 0x00000, 0x10000, CRC(f6216740) SHA1(3d1c795da2f8093e937107e3848cb96338536faf) ) ROM_END @@ -315,6 +302,8 @@ static const uint16_t nvram[]= #endif void koftball_state::init_koftball() { + m_prot_data = 0; + save_item(NAME(m_prot_data)); #if NVRAM_HACK @@ -329,4 +318,7 @@ void koftball_state::init_koftball() #endif } +} // Anonymous namespace + + GAME( 1995, koftball, 0, koftball, koftball, koftball_state, init_koftball, ROT0, "BMC", "King of Football", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/drivers/maygayv1.cpp b/src/mame/drivers/maygayv1.cpp index b0f686a348d..7dcf9975eee 100644 --- a/src/mame/drivers/maygayv1.cpp +++ b/src/mame/drivers/maygayv1.cpp @@ -143,6 +143,8 @@ Find lamps/reels after UPD changes. #include "speaker.h" +namespace { + /************************************* * * Defines @@ -161,7 +163,7 @@ Find lamps/reels after UPD changes. *************************************/ -#define VREG(a) i82716.r[a] +#define VREG(a) m_i82716.r[a] enum { @@ -201,14 +203,6 @@ static const uint32_t banks[4] = { 0, 0x40000/2, 0x20000/2, 0x60000/2 }; #define DRAM_BANK_SEL (banks[(VREG(DSBA) >> 7) & 3]) -struct i82716_t -{ - uint16_t r[16]; - std::unique_ptr<uint16_t[]> dram; - - std::unique_ptr<uint8_t[]> line_buf; // there's actually two -}; - class maygayv1_state : public driver_device { @@ -228,6 +222,11 @@ public: void init_screenpl(); +protected: + virtual void machine_start() override; + virtual void machine_reset() override; + virtual void video_start() override; + private: void i82716_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); uint16_t i82716_r(offs_t offset); @@ -253,10 +252,6 @@ private: void sound_prg(address_map &map); void cpu_space_map(address_map &map); - virtual void machine_start() override; - virtual void machine_reset() override; - virtual void video_start() override; - required_device<cpu_device> m_maincpu; required_device<i8052_device> m_soundcpu; required_device<upd7759_device> m_upd7759; @@ -264,6 +259,14 @@ private: required_device<palette_device> m_palette; required_ioport_array<8> m_kbd_ports; + struct i82716_t + { + uint16_t r[16]; + std::unique_ptr<uint16_t[]> dram; + + std::unique_ptr<uint8_t[]> line_buf; // there's actually two + }; + int m_lamp_strobe; int m_old_lamp_strobe; int m_vsync_latch_preset; @@ -279,12 +282,11 @@ private: void maygayv1_state::i82716_w(offs_t offset, uint16_t data, uint16_t mem_mask) { - i82716_t &i82716 = m_i82716; // Accessing register window? if ((VREG(RWBA) & 0xfff0) == (offset & 0xfff0)) { // Register segment is fixed at start of DRAM - COMBINE_DATA(&i82716.dram[offset & 0xf]); + COMBINE_DATA(&m_i82716.dram[offset & 0xf]); } // Accessing data window? @@ -292,17 +294,16 @@ void maygayv1_state::i82716_w(offs_t offset, uint16_t data, uint16_t mem_mask) if (offset >= (VREG(DWBA) & 0xf800)) { offset -= (VREG(DWBA) & 0xf800); - COMBINE_DATA(&i82716.dram[DRAM_BANK_SEL + (VREG(DSBA) & 0xf800) + offset]); + COMBINE_DATA(&m_i82716.dram[DRAM_BANK_SEL + (VREG(DSBA) & 0xf800) + offset]); } } uint16_t maygayv1_state::i82716_r(offs_t offset) { - i82716_t &i82716 = m_i82716; // Accessing register window? if ((VREG(RWBA) & ~0xf) == (offset & ~0xf)) { - return(i82716.r[offset & 0xf]); + return(m_i82716.r[offset & 0xf]); } // Accessing data window? TODO: mask? @@ -311,7 +312,7 @@ uint16_t maygayv1_state::i82716_r(offs_t offset) if (offset >= (VREG(DWBA) & 0xf800)) { offset -= (VREG(DWBA) & 0xf800); - return i82716.dram[DRAM_BANK_SEL +(VREG(DSBA) & 0xf800) + (offset)]; + return m_i82716.dram[DRAM_BANK_SEL +(VREG(DSBA) & 0xf800) + (offset)]; } } @@ -325,9 +326,8 @@ void maygayv1_state::video_start() uint32_t maygayv1_state::screen_update_maygayv1(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { - i82716_t &i82716 = m_i82716; - uint16_t *atable = &i82716.dram[VREG(ATBA)]; - uint16_t *otable = &i82716.dram[VREG(ODTBA) & 0xfc00]; // both must be bank 0 + uint16_t *atable = &m_i82716.dram[VREG(ATBA)]; + uint16_t *otable = &m_i82716.dram[VREG(ODTBA) & 0xfc00]; // both must be bank 0 int slmask = 0xffff; // TODO: Save if using scanline callbacks int xbound = (VREG(DWBA) & 0x3f8) | 7; @@ -354,7 +354,7 @@ uint32_t maygayv1_state::screen_update_maygayv1(screen_device &screen, bitmap_in /* Clear the frame buffer on each line to BG colour (palette entry 2) */ /* 4bpp only ! */ - memset(i82716.line_buf.get(), 0x22, 512); + memset(m_i82716.line_buf.get(), 0x22, 512); /* Parse the list of 16 objects */ for (int obj = 0; obj < 16; ++obj) @@ -411,7 +411,7 @@ uint32_t maygayv1_state::screen_update_maygayv1(screen_device &screen, bitmap_in /* Bitmap data pointer */ objbase = ((w0 & 0x00c0) << 10) | w2; - objptr = &i82716.dram[objbase + ((4 * width) * otable[offs + 3])]; + objptr = &m_i82716.dram[objbase + ((4 * width) * otable[offs + 3])]; // endian alert bmpptr = (uint8_t*)objptr; @@ -425,10 +425,10 @@ uint32_t maygayv1_state::screen_update_maygayv1(screen_device &screen, bitmap_in uint8_t p2 = *bmpptr >> 4; if (!trans || p1) - i82716.line_buf[x] = p1; + m_i82716.line_buf[x] = p1; if (!trans || p2) - i82716.line_buf[x] |= p2 << 4; + m_i82716.line_buf[x] |= p2 << 4; } bmpptr++; } @@ -441,7 +441,7 @@ uint32_t maygayv1_state::screen_update_maygayv1(screen_device &screen, bitmap_in // Write it out for (int sx = cliprect.min_x; sx < cliprect.max_x; sx += 2) { - uint8_t pix = i82716.line_buf[sx / 2]; + uint8_t pix = m_i82716.line_buf[sx / 2]; bmp_ptr[sx + 0] = pix & 0xf; bmp_ptr[sx + 1] = pix >> 4; @@ -456,25 +456,24 @@ WRITE_LINE_MEMBER(maygayv1_state::screen_vblank_maygayv1) // rising edge if (state) { - i82716_t &i82716 = m_i82716; // UCF if (VREG(VCR0) & VCR0_UCF) { int i; for (i = 0; i < 16; ++i) - VREG(i) = i82716.dram[i]; + VREG(i) = m_i82716.dram[i]; } else { - VREG(VCR0) = i82716.dram[VCR0]; - VREG(ATBA) = i82716.dram[ATBA]; + VREG(VCR0) = m_i82716.dram[VCR0]; + VREG(ATBA) = m_i82716.dram[ATBA]; } if (!(VREG(VCR0) & VCR0_DEI)) { int i; - uint16_t *palbase = &i82716.dram[VREG(CTBA)]; + uint16_t *palbase = &m_i82716.dram[VREG(CTBA)]; for (i = 0; i < 16; ++i) { @@ -864,19 +863,18 @@ void maygayv1_state::b_writ(uint8_t data) void maygayv1_state::machine_start() { m_lamp.resolve(); - i82716_t &i82716 = m_i82716; - i82716.dram = std::make_unique<uint16_t[]>(0x80000/2); // ??? - i82716.line_buf = std::make_unique<uint8_t[]>(512); + m_i82716.dram = std::make_unique<uint16_t[]>(0x80000/2); // ??? + m_i82716.line_buf = std::make_unique<uint8_t[]>(512); - save_pointer(NAME(i82716.dram), 0x40000); + save_pointer(NAME(m_i82716.dram), 0x40000); } void maygayv1_state::machine_reset() { - i82716_t &i82716 = m_i82716; // ? - memset(i82716.dram.get(), 0, 0x40000); - i82716.r[RWBA] = 0x0200; + memset(m_i82716.dram.get(), 0, 0x40000); + std::fill(std::begin(m_i82716.r), std::end(m_i82716.r), 0); + m_i82716.r[RWBA] = 0x0200; } @@ -1268,6 +1266,9 @@ void maygayv1_state::init_screenpl() m_p1 = m_p3 = 0xff; } +} // Anonymous namespace + + #define GAME_FLAGS MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_REQUIRES_ARTWORK GAME( 1991, screenpl, 0, maygayv1, screenpl, maygayv1_state, init_screenpl, ROT0, "Maygay", "Screen Play (Maygay, MV1 Video, ver. 4.0)", GAME_FLAGS ) diff --git a/src/mame/drivers/pacman.cpp b/src/mame/drivers/pacman.cpp index 15b214313c9..802df68ecac 100644 --- a/src/mame/drivers/pacman.cpp +++ b/src/mame/drivers/pacman.cpp @@ -7673,6 +7673,7 @@ void pacman_state::init_mspacman() void pacman_state::init_mschamp() { save_item(NAME(m_counter)); + m_counter = 0; } void pacman_state::init_woodpek() diff --git a/src/mame/drivers/tutankhm.cpp b/src/mame/drivers/tutankhm.cpp index 102af3cc4ae..4afaa8c551f 100644 --- a/src/mame/drivers/tutankhm.cpp +++ b/src/mame/drivers/tutankhm.cpp @@ -128,7 +128,7 @@ WRITE_LINE_MEMBER(tutankhm_state::irq_enable_w) void tutankhm_state::tutankhm_bankselect_w(uint8_t data) { - membank("bank1")->set_entry(data & 0x0f); + m_mainbank->set_entry(data & 0x0f); } @@ -188,7 +188,7 @@ void tutankhm_state::main_map(address_map &map) map(0x8700, 0x8700).mirror(0x00ff).w(m_timeplt_audio, FUNC(timeplt_audio_device::sound_data_w)); map(0x8800, 0x8fff).ram(); - map(0x9000, 0x9fff).bankr("bank1"); + map(0x9000, 0x9fff).bankr(m_mainbank); map(0xa000, 0xffff).rom(); } @@ -260,7 +260,7 @@ INPUT_PORTS_END void tutankhm_state::machine_start() { - membank("bank1")->configure_entries(0, 16, memregion("maincpu")->base() + 0x10000, 0x1000); + m_mainbank->configure_entries(0, 16, memregion("maincpu")->base() + 0x10000, 0x1000); m_star_mode = 0; diff --git a/src/mame/includes/tutankhm.h b/src/mame/includes/tutankhm.h index 8673678a2c8..61db8447a4d 100644 --- a/src/mame/includes/tutankhm.h +++ b/src/mame/includes/tutankhm.h @@ -31,6 +31,7 @@ public: driver_device(mconfig, type, tag), m_videoram(*this, "videoram"), m_scroll(*this, "scroll"), + m_mainbank(*this, "mainbank"), m_maincpu(*this, "maincpu"), m_palette(*this, "palette"), m_screen(*this, "screen"), @@ -63,6 +64,7 @@ protected: /* memory pointers */ required_shared_ptr<uint8_t> m_videoram; optional_shared_ptr<uint8_t> m_scroll; + required_memory_bank m_mainbank; /* video-related */ tilemap_t *m_bg_tilemap; diff --git a/src/mame/video/nmk16.cpp b/src/mame/video/nmk16.cpp index 86721b45392..f48b9207bdf 100644 --- a/src/mame/video/nmk16.cpp +++ b/src/mame/video/nmk16.cpp @@ -79,6 +79,7 @@ void nmk16_state::video_init() m_tilerambank = 0; m_bgbank = 0; + m_mustang_bg_xscroll = 0; m_dma_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(nmk16_state::dma_callback),this)); save_pointer(NAME(m_spriteram_old), 0x1000/2); diff --git a/src/mame/video/pastelg.cpp b/src/mame/video/pastelg.cpp index 22433ec6140..8753792ff16 100644 --- a/src/mame/video/pastelg.cpp +++ b/src/mame/video/pastelg.cpp @@ -272,6 +272,8 @@ void pastelg_common_state::video_start() save_item(NAME(m_palbank)); save_pointer(NAME(m_videoram), width*height); save_item(NAME(m_flipscreen_old)); + + m_palbank = 0; } /****************************************************************************** diff --git a/src/mame/video/segag80r.cpp b/src/mame/video/segag80r.cpp index 2fbed33e1ca..8840c83a099 100644 --- a/src/mame/video/segag80r.cpp +++ b/src/mame/video/segag80r.cpp @@ -235,6 +235,8 @@ void segag80r_state::video_start() break; } + m_bg_scrollx = 0; + /* register for save states */ save_item(NAME(m_video_control)); save_item(NAME(m_video_flip)); |