From 199db54ed8e7672bb04f7f0c1828d5332ca3f8a4 Mon Sep 17 00:00:00 2001 From: cam900 Date: Wed, 14 Mar 2018 04:42:33 +0900 Subject: [PATCH] mastboy.cpp : Minor cleanup, Move banked ram handler into address_map_bank_device, Fix RAMM err., Add notes, Replace gfx*/user* -> saner ROM areas (#3323) --- src/mame/drivers/mastboy.cpp | 166 +++++++++++++---------------------- 1 file changed, 59 insertions(+), 107 deletions(-) diff --git a/src/mame/drivers/mastboy.cpp b/src/mame/drivers/mastboy.cpp index 623fd4c0769..aa4abef1f30 100644 --- a/src/mame/drivers/mastboy.cpp +++ b/src/mame/drivers/mastboy.cpp @@ -441,25 +441,30 @@ #include "sound/saa1099.h" #include "sound/msm5205.h" #include "machine/74259.h" +#include "machine/bankdev.h" #include "machine/eeprompar.h" #include "screen.h" #include "speaker.h" +#include class mastboy_state : public driver_device { public: mastboy_state(const machine_config &mconfig, device_type type, const char *tag) - : driver_device(mconfig, type, tag), - m_maincpu(*this, "maincpu"), - m_msm(*this, "msm"), - m_outlatch(*this, "outlatch"), - m_gfxdecode(*this, "gfxdecode"), - m_palette(*this, "palette"), - m_earom(*this, "earom") , - m_workram(*this, "workram"), - m_tileram(*this, "tileram"), - m_colram(*this, "colram") { } + : driver_device(mconfig, type, tag) + , m_maincpu(*this, "maincpu") + , m_msm(*this, "msm") + , m_outlatch(*this, "outlatch") + , m_gfxdecode(*this, "gfxdecode") + , m_palette(*this, "palette") + , m_earom(*this, "earom") + , m_bank_c000(*this, "bank_c000") + , m_workram(*this, "workram") + , m_tileram(*this, "tileram") + , m_colram(*this, "colram") + , m_vram(*this, "vram") + { } required_device m_maincpu; required_device m_msm; @@ -467,19 +472,19 @@ public: required_device m_gfxdecode; required_device m_palette; required_device m_earom; + required_device m_bank_c000; required_shared_ptr m_workram; required_shared_ptr m_tileram; required_shared_ptr m_colram; + required_shared_ptr m_vram; - uint8_t* m_vram; - uint8_t m_bank; int m_irq0_ack; int m_m5205_next; int m_m5205_part; - DECLARE_READ8_MEMBER(banked_ram_r); - DECLARE_WRITE8_MEMBER(banked_ram_w); + DECLARE_READ8_MEMBER(vram_r); + DECLARE_WRITE8_MEMBER(vram_w); DECLARE_WRITE8_MEMBER(bank_w); DECLARE_WRITE8_MEMBER(msm5205_data_w); DECLARE_WRITE_LINE_MEMBER(irq0_ack_w); @@ -495,6 +500,7 @@ public: INTERRUPT_GEN_MEMBER(interrupt); void mastboy(machine_config &config); + void bank_c000_map(address_map &map); void mastboy_io_map(address_map &map); void mastboy_map(address_map &map); }; @@ -504,9 +510,6 @@ public: void mastboy_state::video_start() { - m_gfxdecode->gfx(0)->set_source(m_vram); - - save_pointer(NAME(m_vram), 0x10000); } uint32_t mastboy_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) @@ -555,74 +558,25 @@ uint32_t mastboy_state::screen_update(screen_device &screen, bitmap_ind16 &bitma /* Access to Banked RAM */ -READ8_MEMBER(mastboy_state::banked_ram_r) +READ8_MEMBER(mastboy_state::vram_r) { - if ((m_bank&0x80) == 0x00) - { - int bank; - bank = m_bank & 0x07; - //if (m_bank&0xf8) printf("invalid bank bits in vram/vrom read\n"); - - if (bank>0x3) // ROM access - { - uint8_t *src = memregion( "gfx1" )->base(); - bank &=0x3; - return src[offset+(bank*0x4000)]; - } - else - { - bank &=0x3; - /* we have to invert the data for the GFX decode */ - return m_vram[offset+(bank*0x4000)]^0xff; - } - } - else - { - uint8_t *src; - int bank; - bank = m_bank & 0x7f; - src = memregion ( "user1" )->base() + bank * 0x4000; - return src[offset]; - } + /* we have to invert the data for the GFX decode */ + return m_vram[offset]^0xff; } -WRITE8_MEMBER(mastboy_state::banked_ram_w) +WRITE8_MEMBER(mastboy_state::vram_w) { - if ((m_bank&0x80) == 0x00) - { - int bank; - bank = m_bank & 0x07; - //if (data&0xf8) printf("invalid bank bits in vram/vrom write\n"); + /* we have to invert the data for the GFX decode */ + m_vram[offset] = data^0xff; - if (bank>0x3) // ROM access - { - logerror("Attempting to WRITE to VROM\n"); - } - else - { - /* write to the RAM based tile data */ - int offs; - bank &=0x3; - - offs = offset+(bank*0x4000); - - /* we have to invert the data for the GFX decode */ - m_vram[offs] = data^0xff; - - /* Decode the new tile */ - m_gfxdecode->gfx(0)->mark_dirty(offs/32); - } - } - else - { - logerror("attempt to write %02x to banked area with BANKED ROM selected\n",data); - } + /* Decode the new tile */ + m_gfxdecode->gfx(0)->mark_dirty(offset/32); } WRITE8_MEMBER(mastboy_state::bank_w) { // controls access to banked ram / rom - m_bank = data; + m_bank_c000->set_bank(data); } /* MSM5205 Related */ @@ -670,7 +624,7 @@ ADDRESS_MAP_START(mastboy_state::mastboy_map) AM_RANGE(0x9000, 0x9fff) AM_RAM AM_SHARE("tileram")// tilemap ram AM_RANGE(0xa000, 0xa1ff) AM_RAM AM_SHARE("colram") AM_MIRROR(0x0e00) // colour ram - AM_RANGE(0xc000, 0xffff) AM_READWRITE(banked_ram_r,banked_ram_w) // mastboy bank area read / write + AM_RANGE(0xc000, 0xffff) AM_DEVICE("bank_c000", address_map_bank_device, amap8) AM_RANGE(0xff000, 0xff7ff) AM_DEVREADWRITE("earom", eeprom_parallel_28xx_device, read, write) @@ -687,6 +641,13 @@ ADDRESS_MAP_START(mastboy_state::mastboy_map) AM_RANGE(0xffc00, 0xfffff) AM_RAM // Internal RAM ADDRESS_MAP_END +// TODO : banked map is mirrored? +ADDRESS_MAP_START(mastboy_state::bank_c000_map) + AM_RANGE(0x000000, 0x00ffff) AM_MIRROR(0x1e0000) AM_READWRITE(vram_r, vram_w) AM_SHARE("vram") + AM_RANGE(0x010000, 0x01ffff) AM_MIRROR(0x1e0000) AM_ROM AM_REGION("vrom", 0) + AM_RANGE(0x200000, 0x3fffff) AM_ROM AM_REGION("bankedrom", 0) +ADDRESS_MAP_END + /* Ports */ READ8_MEMBER(mastboy_state::port_38_read) @@ -816,17 +777,14 @@ static const gfx_layout tiles8x8_layout_2 = static GFXDECODE_START( mastboy ) - GFXDECODE_ENTRY( "gfx1", 0, tiles8x8_layout, 0, 16 ) - GFXDECODE_ENTRY( "gfx2", 0, tiles8x8_layout_2, 0, 16 ) + GFXDECODE_RAM( "vram", 0, tiles8x8_layout, 0, 16 ) + GFXDECODE_ENTRY( "vrom", 0, tiles8x8_layout_2, 0, 16 ) GFXDECODE_END /* Machine Functions / Driver */ void mastboy_state::machine_start() { - m_vram = memregion( "gfx1" )->base(); // makes decoding the RAM based tiles easier this way - - save_item(NAME(m_bank)); save_item(NAME(m_irq0_ack)); save_item(NAME(m_m5205_next)); save_item(NAME(m_m5205_part)); @@ -835,10 +793,10 @@ void mastboy_state::machine_start() void mastboy_state::machine_reset() { /* clear some ram */ - memset( m_workram, 0x00, 0x01000); - memset( m_tileram, 0x00, 0x01000); - memset( m_colram, 0x00, 0x00200); - memset( m_vram, 0x00, 0x10000); + std::fill(&m_workram[0], &m_workram[m_workram.bytes()], 0); + std::fill(&m_tileram[0], &m_tileram[m_tileram.bytes()], 0); + std::fill(&m_colram[0], &m_colram[m_colram.bytes()], 0); + std::fill(&m_vram[0], &m_vram[m_vram.bytes()], 0); } @@ -858,6 +816,13 @@ MACHINE_CONFIG_START(mastboy_state::mastboy) MCFG_ADDRESSABLE_LATCH_Q3_OUT_CB(DEVWRITELINE("msm", msm5205_device, reset_w)) MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(DEVWRITELINE("earom", eeprom_parallel_28xx_device, oe_w)) + MCFG_DEVICE_ADD("bank_c000", ADDRESS_MAP_BANK, 0) + MCFG_DEVICE_PROGRAM_MAP(bank_c000_map) + MCFG_ADDRESS_MAP_BANK_ENDIANNESS(ENDIANNESS_LITTLE) + MCFG_ADDRESS_MAP_BANK_DATA_WIDTH(8) + MCFG_ADDRESS_MAP_BANK_ADDR_WIDTH(22) + MCFG_ADDRESS_MAP_BANK_STRIDE(0x4000) + /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) MCFG_SCREEN_REFRESH_RATE(6000000.0f / 384.0f / 282.0f) @@ -870,7 +835,6 @@ MACHINE_CONFIG_START(mastboy_state::mastboy) MCFG_GFXDECODE_ADD("gfxdecode", "palette", mastboy) MCFG_PALETTE_ADD("palette", 0x100) - // sound hardware MCFG_SPEAKER_STANDARD_MONO("mono") MCFG_SAA1099_ADD("saa", 6000000 ) @@ -892,13 +856,10 @@ ROM_START( mastboy ) ROM_CONTINUE( 0x04000, 0x4000 ) ROM_CONTINUE( 0x04000, 0x4000 ) // only the last 16kb matters - ROM_REGION( 0x10000, "gfx1", ROMREGION_ERASE00 ) /* RAM accessed by the video chip */ - /* 0x00000 - 0x0ffff = banked ram */ - - ROM_REGION( 0x10000, "gfx2", ROMREGION_INVERT ) /* ROM accessed by the video chip */ + ROM_REGION( 0x10000, "vrom", ROMREGION_INVERT ) /* ROM accessed by the video chip */ ROM_LOAD( "04.bin", 0x00000, 0x10000, CRC(565932f4) SHA1(4b184aa445b5671072031ad4a2ccb13868d6d3a4) ) - ROM_REGION( 0x200000, "user1", 0 ) /* banked data - 8 banks, 6 'question' slots */ + ROM_REGION( 0x200000, "bankedrom", 0 ) /* banked data - 8 banks, 6 'question' slots */ ROM_LOAD( "01.bin", 0x000000, 0x040000, CRC(36755831) SHA1(706fba5fc765502774643bfef8a3c9d2c01eb01b) ) // 99% gfx ROM_LOAD( "02.bin", 0x040000, 0x020000, CRC(69cf6b7c) SHA1(a7bdc62051d09636dcd54db102706a9b42465e63) ) // data ROM_RELOAD( 0x060000, 0x020000) // 128kb roms are mirrored @@ -932,13 +893,10 @@ ROM_START( mastboya ) ROM_CONTINUE( 0x04000, 0x4000 ) ROM_CONTINUE( 0x04000, 0x4000 ) // only the last 16kb matters - ROM_REGION( 0x10000, "gfx1", ROMREGION_ERASE00 ) /* RAM accessed by the video chip */ - /* 0x00000 - 0x0ffff = banked ram */ - - ROM_REGION( 0x10000, "gfx2", ROMREGION_INVERT ) /* ROM accessed by the video chip */ + ROM_REGION( 0x10000, "vrom", ROMREGION_INVERT ) /* ROM accessed by the video chip */ ROM_LOAD( "04.bin", 0x00000, 0x10000, CRC(565932f4) SHA1(4b184aa445b5671072031ad4a2ccb13868d6d3a4) ) - ROM_REGION( 0x200000, "user1", 0 ) /* banked data - 8 banks, 6 'question' slots */ + ROM_REGION( 0x200000, "bankedrom", 0 ) /* banked data - 8 banks, 6 'question' slots */ ROM_LOAD( "01.bin", 0x000000, 0x040000, CRC(36755831) SHA1(706fba5fc765502774643bfef8a3c9d2c01eb01b) ) // 99% gfx ROM_LOAD( "02.bin", 0x040000, 0x020000, CRC(69cf6b7c) SHA1(a7bdc62051d09636dcd54db102706a9b42465e63) ) // data ROM_RELOAD( 0x060000, 0x020000) // 128kb roms are mirrored @@ -972,13 +930,10 @@ ROM_START( mastboyi ) ROM_CONTINUE( 0x04000, 0x4000 ) ROM_CONTINUE( 0x04000, 0x4000 ) // only the last 16kb matters - ROM_REGION( 0x10000, "gfx1", ROMREGION_ERASE00 ) /* RAM accessed by the video chip */ - /* 0x00000 - 0x0ffff = banked ram */ - - ROM_REGION( 0x10000, "gfx2", ROMREGION_INVERT ) /* ROM accessed by the video chip */ + ROM_REGION( 0x10000, "vrom", ROMREGION_INVERT ) /* ROM accessed by the video chip */ ROM_LOAD( "4.ic91", 0x00000, 0x10000, CRC(858d7b27) SHA1(b0ddf49df5665003f3616d67f7fc27408433483b) ) - ROM_REGION( 0x200000, "user1", 0 ) /* question data - 6 sockets */ + ROM_REGION( 0x200000, "bankedrom", 0 ) /* question data - 6 sockets */ ROM_LOAD( "1-mem-c.ic75", 0x000000, 0x040000, CRC(7c7b1cc5) SHA1(73ad7bdb61d1f99ce09ef3a5a3ae0f1e72364eee) ) // 99% gfx ROM_LOAD( "2-mem-b.ic76", 0x040000, 0x020000, CRC(87015c18) SHA1(a16bf2707ce847da0923662796195b75719a6d77) ) // data ROM_RELOAD( 0x060000, 0x020000) // 128kb roms are mirrored @@ -1010,13 +965,10 @@ ROM_START( mastboyia ) ROM_CONTINUE( 0x04000, 0x4000 ) ROM_CONTINUE( 0x04000, 0x4000 ) // only the last 16kb matters - ROM_REGION( 0x10000, "gfx1", ROMREGION_ERASE00 ) /* RAM accessed by the video chip */ - /* 0x00000 - 0x0ffff = banked ram */ + ROM_REGION( 0x10000, "vrom", ROMREGION_INVERT ) /* ROM accessed by the video chip */ + ROM_LOAD( "4.ic91", 0x00000, 0x10000, BAD_DUMP CRC(858d7b27) SHA1(b0ddf49df5665003f3616d67f7fc27408433483b) ) // RAMM err. - ROM_REGION( 0x10000, "gfx2", ROMREGION_INVERT ) /* ROM accessed by the video chip */ - ROM_LOAD( "4.ic91", 0x00000, 0x10000, CRC(858d7b27) SHA1(b0ddf49df5665003f3616d67f7fc27408433483b) ) - - ROM_REGION( 0x200000, "user1", 0 ) /* question data - 6 sockets */ + ROM_REGION( 0x200000, "bankedrom", 0 ) /* question data - 6 sockets */ ROM_LOAD( "1-mem-c.ic75", 0x000000, 0x040000, CRC(7c7b1cc5) SHA1(73ad7bdb61d1f99ce09ef3a5a3ae0f1e72364eee) ) // 99% gfx ROM_LOAD( "2-mem-b.ic76", 0x040000, 0x020000, CRC(87015c18) SHA1(a16bf2707ce847da0923662796195b75719a6d77) ) // data ROM_RELOAD( 0x060000, 0x020000) // 128kb roms are mirrored