From 282eedc7f552bc4e1b1f2902f3d98c76620e1c9a Mon Sep 17 00:00:00 2001 From: Ivan Vangelista Date: Thu, 2 Feb 2023 18:20:03 +0100 Subject: nichibutsu/hyhoo.cpp, nichibutsu/pastleg.cpp: consolidated drivers in single files --- src/mame/nichibutsu/hyhoo.cpp | 352 ++++++++++++++++++++++++++-- src/mame/nichibutsu/hyhoo.h | 51 ---- src/mame/nichibutsu/hyhoo_v.cpp | 245 ------------------- src/mame/nichibutsu/nb1413m3.cpp | 9 +- src/mame/nichibutsu/nb1413m3.h | 214 ++++++++--------- src/mame/nichibutsu/nbmj8688.cpp | 76 +++--- src/mame/nichibutsu/nbmj8688_v.cpp | 12 +- src/mame/nichibutsu/nbmj8891.cpp | 53 ++--- src/mame/nichibutsu/nbmj8891_v.cpp | 4 +- src/mame/nichibutsu/nbmj8900.cpp | 5 +- src/mame/nichibutsu/nbmj8900_v.cpp | 2 +- src/mame/nichibutsu/nbmj8991.cpp | 38 +-- src/mame/nichibutsu/pastelg.cpp | 467 ++++++++++++++++++++++++++++++++++--- src/mame/nichibutsu/pastelg.h | 114 --------- src/mame/nichibutsu/pastelg_v.cpp | 298 ----------------------- 15 files changed, 981 insertions(+), 959 deletions(-) delete mode 100644 src/mame/nichibutsu/hyhoo.h delete mode 100644 src/mame/nichibutsu/hyhoo_v.cpp delete mode 100644 src/mame/nichibutsu/pastelg.h delete mode 100644 src/mame/nichibutsu/pastelg_v.cpp diff --git a/src/mame/nichibutsu/hyhoo.cpp b/src/mame/nichibutsu/hyhoo.cpp index 8546f6c34b0..4a1e8d8e576 100644 --- a/src/mame/nichibutsu/hyhoo.cpp +++ b/src/mame/nichibutsu/hyhoo.cpp @@ -1,5 +1,6 @@ // license:BSD-3-Clause // copyright-holders:Takahiro Nogi + /****************************************************************************** Game Driver for Nichibutsu Mahjong series. @@ -17,29 +18,329 @@ Memo: - Some games display "GFXROM BANK OVER!!" or "GFXROM ADDRESS OVER!!" - in Debug build. + if logging is enabled. - Screen flip is not perfect. ******************************************************************************/ #include "emu.h" -#include "hyhoo.h" + +#include "nb1413m3.h" #include "cpu/z80/z80.h" #include "machine/nvram.h" #include "sound/ay8910.h" #include "sound/dac.h" + +#include "screen.h" #include "speaker.h" -void hyhoo_state::hyhoo_map(address_map &map) +// configurable logging +#define LOG_ROMSEL (1U << 1) +#define LOG_GFXROMBANK (1U << 2) +#define LOG_GFXROMADDR (1U << 3) + +//#define VERBOSE (LOG_GENERAL | LOG_ROMSEL | GFXROMBANK | GFXROMADDR) + +#include "logmacro.h" + +#define LOGROMSEL(...) LOGMASKED(LOG_ROMSEL, __VA_ARGS__) +#define LOGGFXROMBANK(...) LOGMASKED(LOG_GFXROMBANK, __VA_ARGS__) +#define LOGGFXROMADDR(...) LOGMASKED(LOG_GFXROMADDR, __VA_ARGS__) + + +namespace { + +class hyhoo_state : public driver_device +{ +public: + hyhoo_state(const machine_config &mconfig, device_type type, const char *tag) + : driver_device(mconfig, type, tag), + m_maincpu(*this, "maincpu"), + m_nb1413m3(*this, "nb1413m3"), + m_screen(*this, "screen"), + m_blitter_rom(*this, "blitter"), + m_clut(*this, "clut") { } + + void hyhoo(machine_config &config); + void hyhoo2(machine_config &config); + +protected: + virtual void video_start() override; + +private: + required_device m_maincpu; + required_device m_nb1413m3; + required_device m_screen; + required_region_ptr m_blitter_rom; + required_shared_ptr m_clut; + + uint8_t m_blitter_destx = 0; + uint8_t m_blitter_desty = 0; + uint8_t m_blitter_sizex = 0; + uint8_t m_blitter_sizey = 0; + uint16_t m_blitter_src_addr = 0; + uint8_t m_blitter_direction_x = 0; + uint8_t m_blitter_direction_y = 0; + uint8_t m_gfxrom = 0; + uint8_t m_dispflag = 0; + uint8_t m_highcolorflag = 0; + uint8_t m_flipscreen = 0; + bitmap_rgb32 m_tmpbitmap{}; + emu_timer *m_blitter_timer = nullptr; + + void blitter_w(offs_t offset, uint8_t data); + void romsel_w(uint8_t data); + + uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); + void gfxdraw(); + + void io_map(address_map &map); + void program_map(address_map &map); + + TIMER_CALLBACK_MEMBER(clear_busy_flag); +}; + + +// video + +void hyhoo_state::blitter_w(offs_t offset, uint8_t data) +{ + switch (offset) + { + case 0x00: m_blitter_src_addr = (m_blitter_src_addr & 0xff00) | data; + m_nb1413m3->gfxradr_l_w(data); break; + case 0x01: m_blitter_src_addr = (m_blitter_src_addr & 0x00ff) | (data << 8); + m_nb1413m3->gfxradr_h_w(data); break; + case 0x02: m_blitter_destx = data; break; + case 0x03: m_blitter_desty = data; break; + case 0x04: m_blitter_sizex = data; break; + case 0x05: m_blitter_sizey = data; + // writing here also starts the blit + gfxdraw(); + break; + case 0x06: m_blitter_direction_x = (data >> 0) & 0x01; + m_blitter_direction_y = (data >> 1) & 0x01; + m_flipscreen = (~data >> 2) & 0x01; + m_dispflag = (~data >> 3) & 0x01; + break; + case 0x07: break; + } +} + + +void hyhoo_state::romsel_w(uint8_t data) +{ + m_gfxrom = (((data & 0xc0) >> 4) + (data & 0x03)); + m_highcolorflag = data; + m_nb1413m3->gfxrombank_w(data); + + if ((0x20000 * m_gfxrom) >= m_blitter_rom.length()) + { + LOGGFXROMBANK("GFXROM BANK OVER!!"); + + m_gfxrom &= (m_blitter_rom.length() / 0x20000 - 1); + } +} + +TIMER_CALLBACK_MEMBER(hyhoo_state::clear_busy_flag) +{ + m_nb1413m3->busyflag_w(1); +} + +void hyhoo_state::gfxdraw() +{ + int sizex, sizey; + int skipx, skipy; + + m_nb1413m3->m_busyctr = 0; + + m_gfxrom |= ((m_nb1413m3->m_sndrombank1 & 0x02) << 3); + + int const startx = m_blitter_destx + m_blitter_sizex; + int const starty = m_blitter_desty + m_blitter_sizey; + + if (m_blitter_direction_x) + { + sizex = m_blitter_sizex ^ 0xff; + skipx = 1; + } + else + { + sizex = m_blitter_sizex; + skipx = -1; + } + + if (m_blitter_direction_y) + { + sizey = m_blitter_sizey ^ 0xff; + skipy = 1; + } + else + { + sizey = m_blitter_sizey; + skipy = -1; + } + + int gfxaddr = (m_gfxrom << 17) + (m_blitter_src_addr << 1); + + for (int y = starty, ctry = sizey; ctry >= 0; y += skipy, ctry--) + { + for (int x = startx, ctrx = sizex; ctrx >= 0; x += skipx, ctrx--) + { + if (gfxaddr >= m_blitter_rom.length()) + { + LOGGFXROMADDR("GFXROM ADDRESS OVER!!"); + + gfxaddr = 0; + } + + uint8_t const color = m_blitter_rom[gfxaddr++]; + + int const dx1 = (2 * x + 0) & 0x1ff; + int const dx2 = (2 * x + 1) & 0x1ff; + int const dy = y & 0xff; + + if (m_highcolorflag & 0x04) + { + // direct mode + + if (color != 0xff) + { + if (m_highcolorflag & 0x20) + { + // least significant bits + + // src xxxxxxxx_bbbggrrr + // dst xxbbbxxx_ggxxxrrr + + int const r = ((color & 0x07) >> 0) & 0x07; + int const g = ((color & 0x18) >> 3) & 0x03; + int const b = ((color & 0xe0) >> 5) & 0x07; + + pen_t const pen = rgb_t(pal6bit(r), pal5bit(g), pal5bit(b)); + + m_tmpbitmap.pix(dy, dx1) |= pen; + m_tmpbitmap.pix(dy, dx2) |= pen; + } + else + { + // most significant bits + + // src xxxxxxxx_bbgggrrr + // dst bbxxxggg_xxrrrxxx + + int const r = ((color & 0x07) >> 0) & 0x07; + int const g = ((color & 0x38) >> 3) & 0x07; + int const b = ((color & 0xc0) >> 6) & 0x03; + + pen_t const pen = rgb_t(pal6bit(r << 3), pal5bit(g << 2), pal5bit(b << 3)); + + m_tmpbitmap.pix(dy, dx1) = pen; + m_tmpbitmap.pix(dy, dx2) = pen; + } + } + } + else + { + // lookup table mode + uint8_t color1, color2; + + if (m_blitter_direction_x) + { + // flip + color1 = (color & 0x0f) >> 0; + color2 = (color & 0xf0) >> 4; + } + else + { + // normal + color1 = (color & 0xf0) >> 4; + color2 = (color & 0x0f) >> 0; + } + + if (m_clut[color1]) + { + // src xxxxxxxx_bbgggrrr + // dst bbxxxggg_xxrrrxxx + + int const r = ((~m_clut[color1] & 0x07) >> 0) & 0x07; + int const g = ((~m_clut[color1] & 0x38) >> 3) & 0x07; + int const b = ((~m_clut[color1] & 0xc0) >> 6) & 0x03; + + pen_t const pen = rgb_t(pal6bit(r << 3), pal5bit(g << 2), pal5bit(b << 3)); + + m_tmpbitmap.pix(dy, dx1) = pen; + } + + if (m_clut[color2]) + { + // src xxxxxxxx_bbgggrrr + // dst bbxxxggg_xxrrrxxx + + int const r = ((~m_clut[color2] & 0x07) >> 0) & 0x07; + int const g = ((~m_clut[color2] & 0x38) >> 3) & 0x07; + int const b = ((~m_clut[color2] & 0xc0) >> 6) & 0x03; + + pen_t const pen = rgb_t(pal6bit(r << 3), pal5bit(g << 2), pal5bit(b << 3)); + + m_tmpbitmap.pix(dy, dx2) = pen; + } + } + + m_nb1413m3->m_busyctr++; + } + } + + m_nb1413m3->busyflag_w(0); + m_blitter_timer->adjust(attotime::from_hz(400000) * m_nb1413m3->m_busyctr); +} + + +void hyhoo_state::video_start() +{ + m_blitter_timer = timer_alloc(FUNC(hyhoo_state::clear_busy_flag), this); + + m_screen->register_screen_bitmap(m_tmpbitmap); + save_item(NAME(m_blitter_destx)); + save_item(NAME(m_blitter_desty)); + save_item(NAME(m_blitter_sizex)); + save_item(NAME(m_blitter_sizey)); + save_item(NAME(m_blitter_src_addr)); + save_item(NAME(m_blitter_direction_x)); + save_item(NAME(m_blitter_direction_y)); + save_item(NAME(m_gfxrom)); + save_item(NAME(m_dispflag)); + save_item(NAME(m_highcolorflag)); + save_item(NAME(m_flipscreen)); + save_item(NAME(m_tmpbitmap)); + + m_blitter_src_addr = 0; +} + + +uint32_t hyhoo_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) +{ + if (m_dispflag) + copybitmap(bitmap, m_tmpbitmap, m_flipscreen, m_flipscreen, 0, 0, cliprect); + else + bitmap.fill(rgb_t::black(), cliprect); + + return 0; +} + + +// machine + +void hyhoo_state::program_map(address_map &map) { map(0x0000, 0xefff).rom(); map(0xf000, 0xffff).ram().share("nvram"); } -void hyhoo_state::hyhoo_io_map(address_map &map) +void hyhoo_state::io_map(address_map &map) { map.global_mask(0xff); // map(0x00, 0x00).w(m_nb1413m3, FUNC(nb1413m3_device::nmi_clock_w)); @@ -47,12 +348,12 @@ void hyhoo_state::hyhoo_io_map(address_map &map) map(0x81, 0x81).r("aysnd", FUNC(ay8910_device::data_r)); map(0x82, 0x83).w("aysnd", FUNC(ay8910_device::data_address_w)); map(0x90, 0x90).portr("SYSTEM"); - map(0x90, 0x97).w(FUNC(hyhoo_state::hyhoo_blitter_w)); + map(0x90, 0x97).w(FUNC(hyhoo_state::blitter_w)); map(0xa0, 0xa0).rw(m_nb1413m3, FUNC(nb1413m3_device::inputport1_r), FUNC(nb1413m3_device::inputportsel_w)); map(0xb0, 0xb0).rw(m_nb1413m3, FUNC(nb1413m3_device::inputport2_r), FUNC(nb1413m3_device::sndrombank1_w)); - map(0xc0, 0xcf).writeonly().share("clut"); + map(0xc0, 0xcf).writeonly().share(m_clut); map(0xd0, 0xd0).nopr().w("dac", FUNC(dac_byte_interface::data_w)); // unknown read - map(0xe0, 0xe0).w(FUNC(hyhoo_state::hyhoo_romsel_w)); + map(0xe0, 0xe0).w(FUNC(hyhoo_state::romsel_w)); map(0xe0, 0xe1).r(m_nb1413m3, FUNC(nb1413m3_device::gfxrom_r)); map(0xf0, 0xf0).r(m_nb1413m3, FUNC(nb1413m3_device::dipsw1_r)); // map(0xf0, 0xf0).nopw(); @@ -222,28 +523,29 @@ INPUT_PORTS_END void hyhoo_state::hyhoo(machine_config &config) { - /* basic machine hardware */ - Z80(config, m_maincpu, 5000000); /* 5.00 MHz ?? */ - m_maincpu->set_addrmap(AS_PROGRAM, &hyhoo_state::hyhoo_map); - m_maincpu->set_addrmap(AS_IO, &hyhoo_state::hyhoo_io_map); + // basic machine hardware + Z80(config, m_maincpu, 5'000'000); // 5.00 MHz ?? + m_maincpu->set_addrmap(AS_PROGRAM, &hyhoo_state::program_map); + m_maincpu->set_addrmap(AS_IO, &hyhoo_state::io_map); m_maincpu->set_vblank_int("screen", FUNC(hyhoo_state::irq0_line_hold)); NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); - /* video hardware */ + // video hardware SCREEN(config, m_screen, SCREEN_TYPE_RASTER); m_screen->set_refresh_hz(60); m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(0)); m_screen->set_size(512, 256); m_screen->set_visarea(0, 512-1, 16, 240-1); - m_screen->set_screen_update(FUNC(hyhoo_state::screen_update_hyhoo)); + m_screen->set_screen_update(FUNC(hyhoo_state::screen_update)); - NB1413M3(config, m_nb1413m3, 0, NB1413M3_HYHOO); + NB1413M3(config, m_nb1413m3, 0, nb1413m3_device::NB1413M3_HYHOO); + m_nb1413m3->set_blitter_rom_tag("blitter"); - /* sound hardware */ + // sound hardware SPEAKER(config, "speaker").front_center(); - ay8910_device &aysnd(AY8910(config, "aysnd", 1250000)); + ay8910_device &aysnd(AY8910(config, "aysnd", 1'250'000)); aysnd.port_a_read_callback().set_ioport("DSWA"); aysnd.port_b_read_callback().set_ioport("DSWB"); aysnd.add_route(ALL_OUTPUTS, "speaker", 0.35); @@ -255,18 +557,18 @@ void hyhoo_state::hyhoo(machine_config &config) void hyhoo_state::hyhoo2(machine_config &config) { hyhoo(config); - m_nb1413m3->set_type(NB1413M3_HYHOO2); + m_nb1413m3->set_type(nb1413m3_device::NB1413M3_HYHOO2); } ROM_START( hyhoo ) - ROM_REGION( 0x10000, "maincpu", 0 ) /* program */ + ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "hyhoo.1", 0x00000, 0x08000, CRC(c2852861) SHA1(ad23d8f5b196f15f863862010c8fb0dc4c072172) ) - ROM_REGION( 0x10000, "voice", 0 ) /* voice */ + ROM_REGION( 0x10000, "voice", 0 ) ROM_LOAD( "hyhoo.2", 0x00000, 0x10000, CRC(1fffcc84) SHA1(b95b5f143f5314c7ef09a60051b6ad5b5779de4c) ) - ROM_REGION( 0x380000, "gfx1", 0 ) /* gfx */ + ROM_REGION( 0x380000, "blitter", 0 ) ROM_LOAD( "hy1506-1.1i", 0x000000, 0x80000, CRC(42c9fa34) SHA1(dec70c7b52cdd08f0719436ab4ad143253fb9f55) ) ROM_LOAD( "hy1506-1.2i", 0x080000, 0x80000, CRC(4c14972f) SHA1(fcfb5a961f855476ac3c9009388cb6af5e93a3a7) ) ROM_LOAD( "hy1506-1.3i", 0x100000, 0x80000, CRC(4a18c783) SHA1(34844a95a893d5026331c67584a04f68db7d8b50) ) @@ -275,14 +577,14 @@ ROM_START( hyhoo ) ROM_END ROM_START( hyhoo2 ) - ROM_REGION( 0x10000, "maincpu", 0 ) /* program */ + ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "hyhoo2.2", 0x00000, 0x08000, CRC(d8733cdc) SHA1(e683e3a799ed06fb5d4149e1ba76ebd6828b6369) ) ROM_LOAD( "hyhoo2.1", 0x08000, 0x08000, CRC(4a1d9493) SHA1(ee9288e9cb1f681216a98fb31539cb75b4548935) ) - ROM_REGION( 0x10000, "voice", 0 ) /* voice */ + ROM_REGION( 0x10000, "voice", 0 ) ROM_LOAD( "hyhoo2.3", 0x00000, 0x10000, CRC(d7e82b23) SHA1(41b9fa943ec1fc80b5f31aad62b5975485fa1742) ) - ROM_REGION( 0x380000, "gfx1", 0 ) /* gfx */ + ROM_REGION( 0x380000, "blitter", 0 ) ROM_LOAD( "hy1506-1.1i", 0x000000, 0x80000, CRC(42c9fa34) SHA1(dec70c7b52cdd08f0719436ab4ad143253fb9f55) ) ROM_LOAD( "hy1506-1.2i", 0x080000, 0x80000, CRC(4c14972f) SHA1(fcfb5a961f855476ac3c9009388cb6af5e93a3a7) ) ROM_LOAD( "hy1506-1.3i", 0x100000, 0x80000, CRC(4a18c783) SHA1(34844a95a893d5026331c67584a04f68db7d8b50) ) @@ -301,6 +603,8 @@ ROM_START( hyhoo2 ) ROM_LOAD( "hyhoo2.s12", 0x2b0000, 0x10000, CRC(92a07b8a) SHA1(0528e809159d1b3f18fe3c75e5fbc789eb985cbf) ) ROM_END +} // anonymous namespace + -GAME( 1987, hyhoo, 0, hyhoo, hyhoo, hyhoo_state, empty_init, ROT90, "Nichibutsu", "Hayaoshi Taisen Quiz Hyhoo (Japan)", MACHINE_SUPPORTS_SAVE ) +GAME( 1987, hyhoo, 0, hyhoo, hyhoo, hyhoo_state, empty_init, ROT90, "Nichibutsu", "Hayaoshi Taisen Quiz Hyhoo (Japan)", MACHINE_SUPPORTS_SAVE ) GAME( 1987, hyhoo2, 0, hyhoo2, hyhoo2, hyhoo_state, empty_init, ROT90, "Nichibutsu", "Hayaoshi Taisen Quiz Hyhoo 2 (Japan)", MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/nichibutsu/hyhoo.h b/src/mame/nichibutsu/hyhoo.h deleted file mode 100644 index 8e65e0361b6..00000000000 --- a/src/mame/nichibutsu/hyhoo.h +++ /dev/null @@ -1,51 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Takahiro Nogi -#include "nb1413m3.h" -#include "screen.h" - -class hyhoo_state : public driver_device -{ -public: - hyhoo_state(const machine_config &mconfig, device_type type, const char *tag) - : driver_device(mconfig, type, tag), - m_maincpu(*this, "maincpu"), - m_nb1413m3(*this, "nb1413m3"), - m_screen(*this, "screen"), - m_clut(*this, "clut") { } - - void hyhoo(machine_config &config); - void hyhoo2(machine_config &config); - -private: - required_device m_maincpu; - required_device m_nb1413m3; - required_device m_screen; - required_shared_ptr m_clut; - - int m_blitter_destx = 0; - int m_blitter_desty = 0; - int m_blitter_sizex = 0; - int m_blitter_sizey = 0; - int m_blitter_src_addr = 0; - int m_blitter_direction_x = 0; - int m_blitter_direction_y = 0; - int m_gfxrom = 0; - int m_dispflag = 0; - int m_highcolorflag = 0; - int m_flipscreen = 0; - bitmap_rgb32 m_tmpbitmap{}; - emu_timer *m_blitter_timer = nullptr; - - void hyhoo_blitter_w(offs_t offset, uint8_t data); - void hyhoo_romsel_w(uint8_t data); - - virtual void video_start() override; - - uint32_t screen_update_hyhoo(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); - void hyhoo_gfxdraw(); - - void hyhoo_io_map(address_map &map); - void hyhoo_map(address_map &map); - - TIMER_CALLBACK_MEMBER(clear_busy_flag); -}; diff --git a/src/mame/nichibutsu/hyhoo_v.cpp b/src/mame/nichibutsu/hyhoo_v.cpp deleted file mode 100644 index f0ef6c09050..00000000000 --- a/src/mame/nichibutsu/hyhoo_v.cpp +++ /dev/null @@ -1,245 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Takahiro Nogi -/****************************************************************************** - - Video Hardware for Nichibutsu Mahjong series. - - Driver by Takahiro Nogi 2000/01/28 - - -******************************************************************************/ - -#include "emu.h" -#include "hyhoo.h" - - -void hyhoo_state::hyhoo_blitter_w(offs_t offset, uint8_t data) -{ - switch (offset) - { - case 0x00: m_blitter_src_addr = (m_blitter_src_addr & 0xff00) | data; - m_nb1413m3->gfxradr_l_w(data); break; - case 0x01: m_blitter_src_addr = (m_blitter_src_addr & 0x00ff) | (data << 8); - m_nb1413m3->gfxradr_h_w(data); break; - case 0x02: m_blitter_destx = data; break; - case 0x03: m_blitter_desty = data; break; - case 0x04: m_blitter_sizex = data; break; - case 0x05: m_blitter_sizey = data; - /* writing here also starts the blit */ - hyhoo_gfxdraw(); - break; - case 0x06: m_blitter_direction_x = (data >> 0) & 0x01; - m_blitter_direction_y = (data >> 1) & 0x01; - m_flipscreen = (~data >> 2) & 0x01; - m_dispflag = (~data >> 3) & 0x01; - break; - case 0x07: break; - } -} - - -void hyhoo_state::hyhoo_romsel_w(uint8_t data) -{ - int gfxlen = memregion("gfx1")->bytes(); - m_gfxrom = (((data & 0xc0) >> 4) + (data & 0x03)); - m_highcolorflag = data; - m_nb1413m3->gfxrombank_w(data); - - if ((0x20000 * m_gfxrom) > (gfxlen - 1)) - { -#ifdef MAME_DEBUG - popmessage("GFXROM BANK OVER!!"); -#endif - m_gfxrom &= (gfxlen / 0x20000 - 1); - } -} - -TIMER_CALLBACK_MEMBER(hyhoo_state::clear_busy_flag) -{ - m_nb1413m3->busyflag_w(1); -} - -void hyhoo_state::hyhoo_gfxdraw() -{ - uint8_t const *const GFX = memregion("gfx1")->base(); - - int startx, starty; - int sizex, sizey; - int skipx, skipy; - - m_nb1413m3->m_busyctr = 0; - - m_gfxrom |= ((m_nb1413m3->m_sndrombank1 & 0x02) << 3); - - startx = m_blitter_destx + m_blitter_sizex; - starty = m_blitter_desty + m_blitter_sizey; - - if (m_blitter_direction_x) - { - sizex = m_blitter_sizex ^ 0xff; - skipx = 1; - } - else - { - sizex = m_blitter_sizex; - skipx = -1; - } - - if (m_blitter_direction_y) - { - sizey = m_blitter_sizey ^ 0xff; - skipy = 1; - } - else - { - sizey = m_blitter_sizey; - skipy = -1; - } - - int const gfxlen = memregion("gfx1")->bytes(); - int gfxaddr = (m_gfxrom << 17) + (m_blitter_src_addr << 1); - - for (int y = starty, ctry = sizey; ctry >= 0; y += skipy, ctry--) - { - for (int x = startx, ctrx = sizex; ctrx >= 0; x += skipx, ctrx--) - { - if ((gfxaddr > (gfxlen - 1))) - { -#ifdef MAME_DEBUG - popmessage("GFXROM ADDRESS OVER!!"); -#endif - gfxaddr = 0; - } - - uint8_t color = GFX[gfxaddr++]; - - int dx1 = (2 * x + 0) & 0x1ff; - int dx2 = (2 * x + 1) & 0x1ff; - int dy = y & 0xff; - - if (m_highcolorflag & 0x04) - { - // direct mode - - if (color != 0xff) - { - if (m_highcolorflag & 0x20) - { - /* least significant bits */ - - // src xxxxxxxx_bbbggrrr - // dst xxbbbxxx_ggxxxrrr - - int r = ((color & 0x07) >> 0) & 0x07; - int g = ((color & 0x18) >> 3) & 0x03; - int b = ((color & 0xe0) >> 5) & 0x07; - - pen_t pen = rgb_t(pal6bit(r), pal5bit(g), pal5bit(b)); - - m_tmpbitmap.pix(dy, dx1) |= pen; - m_tmpbitmap.pix(dy, dx2) |= pen; - } - else - { - /* most significant bits */ - - // src xxxxxxxx_bbgggrrr - // dst bbxxxggg_xxrrrxxx - - int r = ((color & 0x07) >> 0) & 0x07; - int g = ((color & 0x38) >> 3) & 0x07; - int b = ((color & 0xc0) >> 6) & 0x03; - - pen_t pen = rgb_t(pal6bit(r << 3), pal5bit(g << 2), pal5bit(b << 3)); - - m_tmpbitmap.pix(dy, dx1) = pen; - m_tmpbitmap.pix(dy, dx2) = pen; - } - } - } - else - { - // lookup table mode - uint8_t color1, color2; - - if (m_blitter_direction_x) - { - // flip - color1 = (color & 0x0f) >> 0; - color2 = (color & 0xf0) >> 4; - } - else - { - // normal - color1 = (color & 0xf0) >> 4; - color2 = (color & 0x0f) >> 0; - } - - if (m_clut[color1]) - { - // src xxxxxxxx_bbgggrrr - // dst bbxxxggg_xxrrrxxx - - int r = ((~m_clut[color1] & 0x07) >> 0) & 0x07; - int g = ((~m_clut[color1] & 0x38) >> 3) & 0x07; - int b = ((~m_clut[color1] & 0xc0) >> 6) & 0x03; - - pen_t pen = rgb_t(pal6bit(r << 3), pal5bit(g << 2), pal5bit(b << 3)); - - m_tmpbitmap.pix(dy, dx1) = pen; - } - - if (m_clut[color2]) - { - // src xxxxxxxx_bbgggrrr - // dst bbxxxggg_xxrrrxxx - - int r = ((~m_clut[color2] & 0x07) >> 0) & 0x07; - int g = ((~m_clut[color2] & 0x38) >> 3) & 0x07; - int b = ((~m_clut[color2] & 0xc0) >> 6) & 0x03; - - pen_t pen = rgb_t(pal6bit(r << 3), pal5bit(g << 2), pal5bit(b << 3)); - - m_tmpbitmap.pix(dy, dx2) = pen; - } - } - - m_nb1413m3->m_busyctr++; - } - } - - m_nb1413m3->busyflag_w(0); - m_blitter_timer->adjust(attotime::from_hz(400000) * m_nb1413m3->m_busyctr); -} - - -void hyhoo_state::video_start() -{ - m_blitter_timer = timer_alloc(FUNC(hyhoo_state::clear_busy_flag), this); - - m_screen->register_screen_bitmap(m_tmpbitmap); - save_item(NAME(m_blitter_destx)); - save_item(NAME(m_blitter_desty)); - save_item(NAME(m_blitter_sizex)); - save_item(NAME(m_blitter_sizey)); - save_item(NAME(m_blitter_src_addr)); - save_item(NAME(m_blitter_direction_x)); - save_item(NAME(m_blitter_direction_y)); - save_item(NAME(m_gfxrom)); - save_item(NAME(m_dispflag)); - save_item(NAME(m_highcolorflag)); - save_item(NAME(m_flipscreen)); - save_item(NAME(m_tmpbitmap)); - - m_blitter_src_addr = 0; -} - - -uint32_t hyhoo_state::screen_update_hyhoo(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) -{ - if (m_dispflag) - copybitmap(bitmap, m_tmpbitmap, m_flipscreen, m_flipscreen, 0, 0, cliprect); - else - bitmap.fill(rgb_t::black(), cliprect); - - return 0; -} diff --git a/src/mame/nichibutsu/nb1413m3.cpp b/src/mame/nichibutsu/nb1413m3.cpp index 9b7b3503982..9ec5a549bdb 100644 --- a/src/mame/nichibutsu/nb1413m3.cpp +++ b/src/mame/nichibutsu/nb1413m3.cpp @@ -33,6 +33,8 @@ nb1413m3_device::nb1413m3_device(const machine_config &mconfig, const char *tag, m_busyctr(0), m_outcoin_flag(1), m_inputport(0xff), + m_blitter_rom(*this, finder_base::DUMMY_TAG), + m_led(*this, "led0"), m_busyflag(1), m_74ls193_counter(0), m_nmi_count(0), @@ -42,8 +44,7 @@ nb1413m3_device::nb1413m3_device(const machine_config &mconfig, const char *tag, m_gfxradr_l(0), m_gfxradr_h(0), m_gfxrombank(0), - m_outcoin_enable(0), - m_led(*this, "led0") + m_outcoin_enable(0) { } @@ -325,9 +326,7 @@ void nb1413m3_device::sndrombank2_w(uint8_t data) uint8_t nb1413m3_device::gfxrom_r(offs_t offset) { - uint8_t *GFXROM = machine().root_device().memregion("gfx1")->base(); - - return GFXROM[(0x20000 * (m_gfxrombank | ((m_sndrombank1 & 0x02) << 3))) + ((0x0200 * m_gfxradr_h) + (0x0002 * m_gfxradr_l)) + (offset & 0x01)]; + return m_blitter_rom[(0x20000 * (m_gfxrombank | ((m_sndrombank1 & 0x02) << 3))) + ((0x0200 * m_gfxradr_h) + (0x0002 * m_gfxradr_l)) + (offset & 0x01)]; } void nb1413m3_device::gfxrombank_w(uint8_t data) diff --git a/src/mame/nichibutsu/nb1413m3.h b/src/mame/nichibutsu/nb1413m3.h index 7603ad9a188..1ed8c5c7480 100644 --- a/src/mame/nichibutsu/nb1413m3.h +++ b/src/mame/nichibutsu/nb1413m3.h @@ -12,6 +12,7 @@ #pragma once +/* #define NB1413M3_VCR_NOP 0x00 #define NB1413M3_VCR_POWER 0x01 #define NB1413M3_VCR_STOP 0x02 @@ -19,110 +20,7 @@ #define NB1413M3_VCR_PLAY 0x08 #define NB1413M3_VCR_FFORWARD 0x10 #define NB1413M3_VCR_PAUSE 0x20 - -enum { - NB1413M3_NONE = 0, - // unknown - NB1413M3_JOKERMJN, - NB1413M3_JANGOU, - NB1413M3_JNGOLADY, - NB1413M3_JNGNIGHT, - NB1413M3_MJKING, - NB1413M3_NIGHTGAL, - NB1413M3_NGALSUMR, - NB1413M3_ROYALNGT, - NB1413M3_RYLQUEEN, - NB1413M3_SWEETGAL, - NB1413M3_SEXYGAL, - // NB1411M1 - NB1413M3_PASTELG, - NB1413M3_THREEDS, - // NB1413M3 - NB1413M3_CRYSTALG, - NB1413M3_CRYSTAL2, - NB1413M3_NIGHTLOV, - NB1413M3_CITYLOVE, - NB1413M3_MCITYLOV, - NB1413M3_SECOLOVE, - NB1413M3_BARLINE, - NB1413M3_HOUSEMNQ, - NB1413M3_HOUSEMN2, - NB1413M3_LIVEGAL, - NB1413M3_BIJOKKOY, - NB1413M3_IEMOTO, - NB1413M3_IEMOTOM, - NB1413M3_RYUUHA, - NB1413M3_SEIHA, - NB1413M3_SEIHAM, - NB1413M3_HYHOO, - NB1413M3_HYHOO2, - NB1413M3_SWINGGAL, - NB1413M3_BIJOKKOG, - NB1413M3_OJOUSAN, - NB1413M3_OJOUSANM, - NB1413M3_KORINAI, - NB1413M3_KORINAIM, - NB1413M3_MJCAMERA, - NB1413M3_MJCAMERB, - NB1413M3_MMCAMERA, - NB1413M3_TAIWANMJ, - NB1413M3_TAIWANMB, - NB1413M3_OTONANO, - NB1413M3_ABUNAI, - NB1413M3_MJSIKAKU, - NB1413M3_MMSIKAKU, - NB1413M3_MSJIKEN, - NB1413M3_HANAMOMO, - NB1413M3_TELMAHJN, - NB1413M3_GIONBANA, - NB1413M3_MGION, - NB1413M3_OMOTESND, - NB1413M3_SCANDAL, - NB1413M3_SCANDALM, - NB1413M3_MGMEN89, - NB1413M3_OHPAIPEE, - NB1413M3_TOGENKYO, - NB1413M3_MJFOCUS, - NB1413M3_MJFOCUSM, - NB1413M3_GALKOKU, - NB1413M3_MJNANPAS, - NB1413M3_BANANADR, - NB1413M3_GALKAIKA, - NB1413M3_MCONTEST, - NB1413M3_UCHUUAI, - NB1413M3_TOKIMBSJ, - NB1413M3_TOKYOGAL, - NB1413M3_TRIPLEW1, - NB1413M3_NTOPSTAR, - NB1413M3_MLADYHTR, - NB1413M3_PSTADIUM, - NB1413M3_TRIPLEW2, - NB1413M3_CLUB90S, - NB1413M3_LOVEHOUS, - NB1413M3_CHINMOKU, - NB1413M3_VANILLA, - NB1413M3_MJLSTORY, - NB1413M3_QMHAYAKU, - NB1413M3_MJGOTTUB, - NB1413M3_MAIKO, - NB1413M3_MMAIKO, - NB1413M3_HANAOJI, - NB1413M3_KAGUYA, - NB1413M3_KAGUYA2, - NB1413M3_APPAREL, - NB1413M3_AV2MJ1BB, - NB1413M3_AV2MJ2RG, - NB1413M3_FINALBNY, - NB1413M3_HYOUBAN, - NB1413M3_ORANGEC, - NB1413M3_ORANGECI, - NB1413M3_VIPCLUB, - NB1413M3_IDHIMITU, - NB1413M3_KANATUEN, - NB1413M3_KYUHITO, - NB1413M3_PAIRSNB, - NB1413M3_PAIRSTEN -}; +*/ class nb1413m3_device : public device_t { @@ -138,6 +36,7 @@ public: // configuration helpers void set_type(int type) { m_nb1413m3_type = type; } + template void set_blitter_rom_tag(T &&tag) { m_blitter_rom.set_tag(std::forward(tag)); } void nmi_clock_w(uint8_t data); uint8_t sndrom_r(address_space &space, offs_t offset); @@ -171,12 +70,118 @@ public: int m_inputport; int m_nb1413m3_type = 0; + enum { + NB1413M3_NONE = 0, + // unknown + NB1413M3_JOKERMJN, + NB1413M3_JANGOU, + NB1413M3_JNGOLADY, + NB1413M3_JNGNIGHT, + NB1413M3_MJKING, + NB1413M3_NIGHTGAL, + NB1413M3_NGALSUMR, + NB1413M3_ROYALNGT, + NB1413M3_RYLQUEEN, + NB1413M3_SWEETGAL, + NB1413M3_SEXYGAL, + // NB1411M1 + NB1413M3_PASTELG, + NB1413M3_THREEDS, + // NB1413M3 + NB1413M3_CRYSTALG, + NB1413M3_CRYSTAL2, + NB1413M3_NIGHTLOV, + NB1413M3_CITYLOVE, + NB1413M3_MCITYLOV, + NB1413M3_SECOLOVE, + NB1413M3_BARLINE, + NB1413M3_HOUSEMNQ, + NB1413M3_HOUSEMN2, + NB1413M3_LIVEGAL, + NB1413M3_BIJOKKOY, + NB1413M3_IEMOTO, + NB1413M3_IEMOTOM, + NB1413M3_RYUUHA, + NB1413M3_SEIHA, + NB1413M3_SEIHAM, + NB1413M3_HYHOO, + NB1413M3_HYHOO2, + NB1413M3_SWINGGAL, + NB1413M3_BIJOKKOG, + NB1413M3_OJOUSAN, + NB1413M3_OJOUSANM, + NB1413M3_KORINAI, + NB1413M3_KORINAIM, + NB1413M3_MJCAMERA, + NB1413M3_MJCAMERB, + NB1413M3_MMCAMERA, + NB1413M3_TAIWANMJ, + NB1413M3_TAIWANMB, + NB1413M3_OTONANO, + NB1413M3_ABUNAI, + NB1413M3_MJSIKAKU, + NB1413M3_MMSIKAKU, + NB1413M3_MSJIKEN, + NB1413M3_HANAMOMO, + NB1413M3_TELMAHJN, + NB1413M3_GIONBANA, + NB1413M3_MGION, + NB1413M3_OMOTESND, + NB1413M3_SCANDAL, + NB1413M3_SCANDALM, + NB1413M3_MGMEN89, + NB1413M3_OHPAIPEE, + NB1413M3_TOGENKYO, + NB1413M3_MJFOCUS, + NB1413M3_MJFOCUSM, + NB1413M3_GALKOKU, + NB1413M3_MJNANPAS, + NB1413M3_BANANADR, + NB1413M3_GALKAIKA, + NB1413M3_MCONTEST, + NB1413M3_UCHUUAI, + NB1413M3_TOKIMBSJ, + NB1413M3_TOKYOGAL, + NB1413M3_TRIPLEW1, + NB1413M3_NTOPSTAR, + NB1413M3_MLADYHTR, + NB1413M3_PSTADIUM, + NB1413M3_TRIPLEW2, + NB1413M3_CLUB90S, + NB1413M3_LOVEHOUS, + NB1413M3_CHINMOKU, + NB1413M3_VANILLA, + NB1413M3_MJLSTORY, + NB1413M3_QMHAYAKU, + NB1413M3_MJGOTTUB, + NB1413M3_MAIKO, + NB1413M3_MMAIKO, + NB1413M3_HANAOJI, + NB1413M3_KAGUYA, + NB1413M3_KAGUYA2, + NB1413M3_APPAREL, + NB1413M3_AV2MJ1BB, + NB1413M3_AV2MJ2RG, + NB1413M3_FINALBNY, + NB1413M3_HYOUBAN, + NB1413M3_ORANGEC, + NB1413M3_ORANGECI, + NB1413M3_VIPCLUB, + NB1413M3_IDHIMITU, + NB1413M3_KANATUEN, + NB1413M3_KYUHITO, + NB1413M3_PAIRSNB, + NB1413M3_PAIRSTEN + }; + protected: // device-level overrides virtual void device_start() override; virtual void device_reset() override; private: + required_region_ptr m_blitter_rom; + output_finder<> m_led; int m_busyflag; int m_74ls193_counter; @@ -189,7 +194,6 @@ private: int m_gfxrombank; int m_outcoin_enable; emu_timer *m_timer_cb = nullptr; - output_finder<> m_led; TIMER_CALLBACK_MEMBER( timer_callback ); }; diff --git a/src/mame/nichibutsu/nbmj8688.cpp b/src/mame/nichibutsu/nbmj8688.cpp index 68e1ec76eb0..1f0a623e3e4 100644 --- a/src/mame/nichibutsu/nbmj8688.cpp +++ b/src/mame/nichibutsu/nbmj8688.cpp @@ -2553,6 +2553,8 @@ void nbmj8688_state::NBMJDRV_4096(machine_config &config) m_maincpu->set_vblank_int("screen", FUNC(nbmj8688_state::irq0_line_hold)); NB1413M3(config, m_nb1413m3, 0); + m_nb1413m3->set_blitter_rom_tag("gfx1"); + NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); /* video hardware */ @@ -2613,21 +2615,21 @@ void nbmj8688_state::crystalg(machine_config &config) m_maincpu->set_addrmap(AS_PROGRAM, &nbmj8688_state::secolove_map); m_maincpu->set_addrmap(AS_IO, &nbmj8688_state::crystalg_io_map); - m_nb1413m3->set_type(NB1413M3_CRYSTALG); + m_nb1413m3->set_type(nb1413m3_device::NB1413M3_CRYSTALG); } void nbmj8688_state::crystal2(machine_config &config) { crystalg(config); - m_nb1413m3->set_type(NB1413M3_CRYSTAL2); + m_nb1413m3->set_type(nb1413m3_device::NB1413M3_CRYSTAL2); } void nbmj8688_state::nightlov(machine_config &config) { crystalg(config); - m_nb1413m3->set_type(NB1413M3_NIGHTLOV); + m_nb1413m3->set_type(nb1413m3_device::NB1413M3_NIGHTLOV); } void nbmj8688_state::apparel(machine_config &config) @@ -2638,7 +2640,7 @@ void nbmj8688_state::apparel(machine_config &config) m_maincpu->set_addrmap(AS_PROGRAM, &nbmj8688_state::secolove_map); m_maincpu->set_addrmap(AS_IO, &nbmj8688_state::secolove_io_map); - m_nb1413m3->set_type(NB1413M3_APPAREL); + m_nb1413m3->set_type(nb1413m3_device::NB1413M3_APPAREL); } void nbmj8688_state::mbmj_h12bit(machine_config &config) @@ -2657,21 +2659,21 @@ void nbmj8688_state::citylove(machine_config &config) { mbmj_h12bit(config); - m_nb1413m3->set_type(NB1413M3_CITYLOVE); + m_nb1413m3->set_type(nb1413m3_device::NB1413M3_CITYLOVE); } void nbmj8688_state::mcitylov(machine_config &config) { mbmj_h12bit(config); - m_nb1413m3->set_type(NB1413M3_MCITYLOV); + m_nb1413m3->set_type(nb1413m3_device::NB1413M3_MCITYLOV); } void nbmj8688_state::secolove(machine_config &config) { mbmj_h12bit(config); - m_nb1413m3->set_type(NB1413M3_SECOLOVE); + m_nb1413m3->set_type(nb1413m3_device::NB1413M3_SECOLOVE); } /*Same as h12bit HW with different sound HW + NMI enable bit*/ @@ -2682,7 +2684,7 @@ void nbmj8688_state::barline(machine_config &config) /* basic machine hardware */ m_maincpu->set_addrmap(AS_IO, &nbmj8688_state::barline_io_map); - m_nb1413m3->set_type(NB1413M3_BARLINE); + m_nb1413m3->set_type(nb1413m3_device::NB1413M3_BARLINE); YM3812(config.replace(), "psg", 20000000/8).add_route(ALL_OUTPUTS, "speaker", 0.35); @@ -2710,6 +2712,8 @@ void nbmj8688_state::mbmj_p16bit_LCD(machine_config &config) m_maincpu->set_addrmap(AS_IO, &nbmj8688_state::p16bit_LCD_io_map); NB1413M3(config, m_nb1413m3, 0); + m_nb1413m3->set_blitter_rom_tag("gfx1"); + NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); /* video hardware */ @@ -2767,56 +2771,56 @@ void nbmj8688_state::bijokkoy(machine_config &config) { mbmj_p16bit_LCD(config); - m_nb1413m3->set_type(NB1413M3_BIJOKKOY); + m_nb1413m3->set_type(nb1413m3_device::NB1413M3_BIJOKKOY); } void nbmj8688_state::bijokkog(machine_config &config) { mbmj_p16bit_LCD(config); - m_nb1413m3->set_type(NB1413M3_BIJOKKOG); + m_nb1413m3->set_type(nb1413m3_device::NB1413M3_BIJOKKOG); } void nbmj8688_state::housemnq(machine_config &config) { mbmj_p16bit_LCD(config); - m_nb1413m3->set_type(NB1413M3_HOUSEMNQ); + m_nb1413m3->set_type(nb1413m3_device::NB1413M3_HOUSEMNQ); } void nbmj8688_state::housemn2(machine_config &config) { mbmj_p16bit_LCD(config); - m_nb1413m3->set_type(NB1413M3_HOUSEMN2); + m_nb1413m3->set_type(nb1413m3_device::NB1413M3_HOUSEMN2); } void nbmj8688_state::livegal(machine_config &config) { mbmj_p16bit_LCD(config); - m_nb1413m3->set_type(NB1413M3_LIVEGAL); + m_nb1413m3->set_type(nb1413m3_device::NB1413M3_LIVEGAL); } void nbmj8688_state::orangec(machine_config &config) { mbmj_p16bit(config); - m_nb1413m3->set_type(NB1413M3_ORANGEC); + m_nb1413m3->set_type(nb1413m3_device::NB1413M3_ORANGEC); } void nbmj8688_state::orangeci(machine_config &config) { mbmj_p16bit(config); - m_nb1413m3->set_type(NB1413M3_ORANGECI); + m_nb1413m3->set_type(nb1413m3_device::NB1413M3_ORANGECI); } void nbmj8688_state::vipclub(machine_config &config) { mbmj_p16bit(config); - m_nb1413m3->set_type(NB1413M3_VIPCLUB); + m_nb1413m3->set_type(nb1413m3_device::NB1413M3_VIPCLUB); } void nbmj8688_state::seiha(machine_config &config) @@ -2827,14 +2831,14 @@ void nbmj8688_state::seiha(machine_config &config) m_maincpu->set_addrmap(AS_PROGRAM, &nbmj8688_state::secolove_map); m_maincpu->set_addrmap(AS_IO, &nbmj8688_state::seiha_io_map); - m_nb1413m3->set_type(NB1413M3_SEIHA); + m_nb1413m3->set_type(nb1413m3_device::NB1413M3_SEIHA); } void nbmj8688_state::seiham(machine_config &config) { seiha(config); - m_nb1413m3->set_type(NB1413M3_SEIHAM); + m_nb1413m3->set_type(nb1413m3_device::NB1413M3_SEIHAM); } void nbmj8688_state::mjgaiden(machine_config &config) @@ -2846,7 +2850,7 @@ void nbmj8688_state::mjgaiden(machine_config &config) m_maincpu->set_addrmap(AS_PROGRAM, &nbmj8688_state::ojousan_map); m_maincpu->set_addrmap(AS_IO, &nbmj8688_state::mjgaiden_io_map); - m_nb1413m3->set_type(NB1413M3_OJOUSAN); + m_nb1413m3->set_type(nb1413m3_device::NB1413M3_OJOUSAN); } void nbmj8688_state::iemoto(machine_config &config) @@ -2857,7 +2861,7 @@ void nbmj8688_state::iemoto(machine_config &config) m_maincpu->set_addrmap(AS_PROGRAM, &nbmj8688_state::secolove_map); m_maincpu->set_addrmap(AS_IO, &nbmj8688_state::iemoto_io_map); - m_nb1413m3->set_type(NB1413M3_IEMOTO); + m_nb1413m3->set_type(nb1413m3_device::NB1413M3_IEMOTO); } void nbmj8688_state::ojousan(machine_config &config) @@ -2868,14 +2872,14 @@ void nbmj8688_state::ojousan(machine_config &config) m_maincpu->set_addrmap(AS_PROGRAM, &nbmj8688_state::ojousan_map); m_maincpu->set_addrmap(AS_IO, &nbmj8688_state::iemoto_io_map); - m_nb1413m3->set_type(NB1413M3_OJOUSAN); + m_nb1413m3->set_type(nb1413m3_device::NB1413M3_OJOUSAN); } void nbmj8688_state::ojousanm(machine_config &config) { ojousan(config); - m_nb1413m3->set_type(NB1413M3_OJOUSANM); + m_nb1413m3->set_type(nb1413m3_device::NB1413M3_OJOUSANM); } void nbmj8688_state::bikkuri(machine_config &config) @@ -2886,7 +2890,7 @@ void nbmj8688_state::bikkuri(machine_config &config) m_maincpu->set_addrmap(AS_PROGRAM, &nbmj8688_state::bikkuri_map); m_maincpu->set_addrmap(AS_IO, &nbmj8688_state::bikkuri_io_map); - // m_nb1413m3->set_type(NB1413M3_TAIWANMB); // what's the correct type here? + // m_nb1413m3->set_type(nb1413m3_device::NB1413M3_TAIWANMB); // what's the correct type here? } void nbmj8688_state::swinggal(machine_config &config) @@ -2901,28 +2905,28 @@ void nbmj8688_state::iemotom(machine_config &config) { ojousan(config); - m_nb1413m3->set_type(NB1413M3_IEMOTOM); + m_nb1413m3->set_type(nb1413m3_device::NB1413M3_IEMOTOM); } void nbmj8688_state::ryuuha(machine_config &config) { ojousan(config); - m_nb1413m3->set_type(NB1413M3_RYUUHA); + m_nb1413m3->set_type(nb1413m3_device::NB1413M3_RYUUHA); } void nbmj8688_state::korinai(machine_config &config) { ojousan(config); - m_nb1413m3->set_type(NB1413M3_KORINAI); + m_nb1413m3->set_type(nb1413m3_device::NB1413M3_KORINAI); } void nbmj8688_state::korinaim(machine_config &config) { ojousan(config); - m_nb1413m3->set_type(NB1413M3_KORINAIM); + m_nb1413m3->set_type(nb1413m3_device::NB1413M3_KORINAIM); } void nbmj8688_state::mbmj_p12bit(machine_config &config) @@ -2938,35 +2942,35 @@ void nbmj8688_state::kaguya(machine_config &config) { mbmj_p12bit(config); - m_nb1413m3->set_type(NB1413M3_KAGUYA); + m_nb1413m3->set_type(nb1413m3_device::NB1413M3_KAGUYA); } void nbmj8688_state::kaguya2(machine_config &config) { mbmj_p12bit(config); - m_nb1413m3->set_type(NB1413M3_KAGUYA2); + m_nb1413m3->set_type(nb1413m3_device::NB1413M3_KAGUYA2); } void nbmj8688_state::kanatuen(machine_config &config) { mbmj_p12bit(config); - m_nb1413m3->set_type(NB1413M3_KANATUEN); + m_nb1413m3->set_type(nb1413m3_device::NB1413M3_KANATUEN); } void nbmj8688_state::kyuhito(machine_config &config) { mbmj_p12bit(config); - m_nb1413m3->set_type(NB1413M3_KYUHITO); + m_nb1413m3->set_type(nb1413m3_device::NB1413M3_KYUHITO); } void nbmj8688_state::idhimitu(machine_config &config) { mbmj_p12bit(config); - m_nb1413m3->set_type(NB1413M3_IDHIMITU); + m_nb1413m3->set_type(nb1413m3_device::NB1413M3_IDHIMITU); } void nbmj8688_state::mjsikaku(machine_config &config) @@ -2977,7 +2981,7 @@ void nbmj8688_state::mjsikaku(machine_config &config) m_maincpu->set_addrmap(AS_PROGRAM, &nbmj8688_state::mjsikaku_map); m_maincpu->set_addrmap(AS_IO, &nbmj8688_state::mjsikaku_io_map); - m_nb1413m3->set_type(NB1413M3_MJSIKAKU); + m_nb1413m3->set_type(nb1413m3_device::NB1413M3_MJSIKAKU); /* sound hardware */ YM3812(config.replace(), "psg", 20000000/8).add_route(ALL_OUTPUTS, "speaker", 0.7); @@ -2991,7 +2995,7 @@ void nbmj8688_state::mmsikaku(machine_config &config) m_maincpu->set_addrmap(AS_PROGRAM, &nbmj8688_state::secolove_map); m_maincpu->set_addrmap(AS_IO, &nbmj8688_state::mmsikaku_io_map); - m_nb1413m3->set_type(NB1413M3_MMSIKAKU); + m_nb1413m3->set_type(nb1413m3_device::NB1413M3_MMSIKAKU); } void nbmj8688_state::otonano(machine_config &config) @@ -3001,14 +3005,14 @@ void nbmj8688_state::otonano(machine_config &config) /* basic machine hardware */ m_maincpu->set_addrmap(AS_IO, &nbmj8688_state::otonano_io_map); - m_nb1413m3->set_type(NB1413M3_OTONANO); + m_nb1413m3->set_type(nb1413m3_device::NB1413M3_OTONANO); } void nbmj8688_state::mjcamera(machine_config &config) { otonano(config); - m_nb1413m3->set_type(NB1413M3_MJCAMERA); + m_nb1413m3->set_type(nb1413m3_device::NB1413M3_MJCAMERA); } ROM_START( crystalg ) diff --git a/src/mame/nichibutsu/nbmj8688_v.cpp b/src/mame/nichibutsu/nbmj8688_v.cpp index 726c916c69f..96df83bf65b 100644 --- a/src/mame/nichibutsu/nbmj8688_v.cpp +++ b/src/mame/nichibutsu/nbmj8688_v.cpp @@ -134,14 +134,14 @@ void nbmj8688_state::mjsikaku_gfxflag2_w(uint8_t data) { m_gfxflag2 = data; - if (m_nb1413m3->m_nb1413m3_type == NB1413M3_SEIHAM - || m_nb1413m3->m_nb1413m3_type == NB1413M3_KORINAI - || m_nb1413m3->m_nb1413m3_type == NB1413M3_KORINAIM - || m_nb1413m3->m_nb1413m3_type == NB1413M3_LIVEGAL) + if (m_nb1413m3->m_nb1413m3_type == nb1413m3_device::NB1413M3_SEIHAM + || m_nb1413m3->m_nb1413m3_type == nb1413m3_device::NB1413M3_KORINAI + || m_nb1413m3->m_nb1413m3_type == nb1413m3_device::NB1413M3_KORINAIM + || m_nb1413m3->m_nb1413m3_type == nb1413m3_device::NB1413M3_LIVEGAL) m_gfxflag2 ^= 0x20; - if (m_nb1413m3->m_nb1413m3_type == NB1413M3_OJOUSANM - || m_nb1413m3->m_nb1413m3_type == NB1413M3_RYUUHA) + if (m_nb1413m3->m_nb1413m3_type == nb1413m3_device::NB1413M3_OJOUSANM + || m_nb1413m3->m_nb1413m3_type == nb1413m3_device::NB1413M3_RYUUHA) m_gfxflag2 |= 0x20; } diff --git a/src/mame/nichibutsu/nbmj8891.cpp b/src/mame/nichibutsu/nbmj8891.cpp index 44cf8cd01c7..d14d41e8a4a 100644 --- a/src/mame/nichibutsu/nbmj8891.cpp +++ b/src/mame/nichibutsu/nbmj8891.cpp @@ -2191,7 +2191,8 @@ void nbmj8891_state::gionbana(machine_config &config) m_maincpu->set_addrmap(AS_IO, &nbmj8891_state::gionbana_io_map); m_maincpu->set_vblank_int("screen", FUNC(nbmj8891_state::irq0_line_hold)); - NB1413M3(config, m_nb1413m3, 0, NB1413M3_GIONBANA); + NB1413M3(config, m_nb1413m3, 0, nb1413m3_device::NB1413M3_GIONBANA); + m_nb1413m3->set_blitter_rom_tag("gfx1"); /* video hardware */ SCREEN(config, m_screen, SCREEN_TYPE_RASTER); @@ -2221,7 +2222,7 @@ void nbmj8891_state::mgion(machine_config &config) m_maincpu->set_addrmap(AS_PROGRAM, &nbmj8891_state::mgion_map); m_maincpu->set_addrmap(AS_IO, &nbmj8891_state::mgion_io_map); - m_nb1413m3->set_type(NB1413M3_MGION); + m_nb1413m3->set_type(nb1413m3_device::NB1413M3_MGION); NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); } @@ -2234,7 +2235,7 @@ void nbmj8891_state::omotesnd(machine_config &config) m_maincpu->set_addrmap(AS_PROGRAM, &nbmj8891_state::omotesnd_map); m_maincpu->set_addrmap(AS_IO, &nbmj8891_state::omotesnd_io_map); - m_nb1413m3->set_type(NB1413M3_OMOTESND); + m_nb1413m3->set_type(nb1413m3_device::NB1413M3_OMOTESND); NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); @@ -2249,7 +2250,7 @@ void nbmj8891_state::abunai(machine_config &config) { gionbana(config); - m_nb1413m3->set_type(NB1413M3_ABUNAI); + m_nb1413m3->set_type(nb1413m3_device::NB1413M3_ABUNAI); } /* NBMJDRV2 */ @@ -2260,7 +2261,7 @@ void nbmj8891_state::mjcamerb(machine_config &config) /* basic machine hardware */ m_maincpu->set_addrmap(AS_IO, &nbmj8891_state::hanamomo_io_map); - m_nb1413m3->set_type(NB1413M3_MJCAMERB); + m_nb1413m3->set_type(nb1413m3_device::NB1413M3_MJCAMERB); NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); @@ -2276,7 +2277,7 @@ void nbmj8891_state::mmcamera(machine_config &config) /* basic machine hardware */ m_maincpu->set_addrmap(AS_IO, &nbmj8891_state::hanamomo_io_map); - m_nb1413m3->set_type(NB1413M3_MMCAMERA); + m_nb1413m3->set_type(nb1413m3_device::NB1413M3_MMCAMERA); NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); @@ -2293,7 +2294,7 @@ void nbmj8891_state::hanamomo(machine_config &config) m_maincpu->set_addrmap(AS_PROGRAM, &nbmj8891_state::hanamomo_map); m_maincpu->set_addrmap(AS_IO, &nbmj8891_state::hanamomo_io_map); - m_nb1413m3->set_type(NB1413M3_HANAMOMO); + m_nb1413m3->set_type(nb1413m3_device::NB1413M3_HANAMOMO); /* video hardware */ m_screen->set_visarea(0, 512-1, 16, 240-1); @@ -2308,7 +2309,7 @@ void nbmj8891_state::msjiken(machine_config &config) m_maincpu->set_addrmap(AS_PROGRAM, &nbmj8891_state::gionbana_map); m_maincpu->set_addrmap(AS_IO, &nbmj8891_state::msjiken_io_map); - m_nb1413m3->set_type(NB1413M3_MSJIKEN); + m_nb1413m3->set_type(nb1413m3_device::NB1413M3_MSJIKEN); } /* NBMJDRV3 */ @@ -2316,7 +2317,7 @@ void nbmj8891_state::telmahjn(machine_config &config) { gionbana(config); - m_nb1413m3->set_type(NB1413M3_TELMAHJN); + m_nb1413m3->set_type(nb1413m3_device::NB1413M3_TELMAHJN); /* video hardware */ MCFG_VIDEO_START_OVERRIDE(nbmj8891_state,_1layer) @@ -2326,7 +2327,7 @@ void nbmj8891_state::mgmen89(machine_config &config) { telmahjn(config); - m_nb1413m3->set_type(NB1413M3_MGMEN89); + m_nb1413m3->set_type(nb1413m3_device::NB1413M3_MGMEN89); } /* NBMJDRV4 */ @@ -2336,7 +2337,7 @@ void nbmj8891_state::mjfocus(machine_config &config) /* basic machine hardware */ - m_nb1413m3->set_type(NB1413M3_MJFOCUS); + m_nb1413m3->set_type(nb1413m3_device::NB1413M3_MJFOCUS); /* video hardware */ MCFG_VIDEO_START_OVERRIDE(nbmj8891_state,_1layer) @@ -2346,14 +2347,14 @@ void nbmj8891_state::pairsnb(machine_config &config) { gionbana(config); - m_nb1413m3->set_type(NB1413M3_PAIRSNB); + m_nb1413m3->set_type(nb1413m3_device::NB1413M3_PAIRSNB); } void nbmj8891_state::pairsten(machine_config &config) { gionbana(config); - m_nb1413m3->set_type(NB1413M3_PAIRSTEN); + m_nb1413m3->set_type(nb1413m3_device::NB1413M3_PAIRSTEN); } /* NBMJDRV5 */ @@ -2364,7 +2365,7 @@ void nbmj8891_state::mjnanpas(machine_config &config) /* basic machine hardware */ m_maincpu->set_addrmap(AS_PROGRAM, &nbmj8891_state::club90s_map); - m_nb1413m3->set_type(NB1413M3_MJNANPAS); + m_nb1413m3->set_type(nb1413m3_device::NB1413M3_MJNANPAS); } void nbmj8891_state::maiko(machine_config &config) @@ -2375,7 +2376,7 @@ void nbmj8891_state::maiko(machine_config &config) m_maincpu->set_addrmap(AS_PROGRAM, &nbmj8891_state::maiko_map); m_maincpu->set_addrmap(AS_IO, &nbmj8891_state::maiko_io_map); - m_nb1413m3->set_type(NB1413M3_MAIKO); + m_nb1413m3->set_type(nb1413m3_device::NB1413M3_MAIKO); } void nbmj8891_state::mmaiko(machine_config &config) @@ -2385,7 +2386,7 @@ void nbmj8891_state::mmaiko(machine_config &config) /* basic machine hardware */ m_maincpu->set_addrmap(AS_PROGRAM, &nbmj8891_state::mmaiko_map); - m_nb1413m3->set_type(NB1413M3_MMAIKO); + m_nb1413m3->set_type(nb1413m3_device::NB1413M3_MMAIKO); NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); } @@ -2398,7 +2399,7 @@ void nbmj8891_state::lovehous(machine_config &config) m_maincpu->set_addrmap(AS_PROGRAM, &nbmj8891_state::lovehous_map); m_maincpu->set_addrmap(AS_IO, &nbmj8891_state::lovehous_io_map); - m_nb1413m3->set_type(NB1413M3_LOVEHOUS); + m_nb1413m3->set_type(nb1413m3_device::NB1413M3_LOVEHOUS); NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); } @@ -2410,7 +2411,7 @@ void nbmj8891_state::hanaoji(machine_config &config) /* basic machine hardware */ m_maincpu->set_addrmap(AS_PROGRAM, &nbmj8891_state::hanaoji_map); - m_nb1413m3->set_type(NB1413M3_HANAOJI); + m_nb1413m3->set_type(nb1413m3_device::NB1413M3_HANAOJI); NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); } @@ -2441,7 +2442,7 @@ void nbmj8891_state::scandal(machine_config &config) m_maincpu->set_addrmap(AS_PROGRAM, &nbmj8891_state::scandalm_map); m_maincpu->set_addrmap(AS_IO, &nbmj8891_state::scandal_io_map); - m_nb1413m3->set_type(NB1413M3_SCANDAL); + m_nb1413m3->set_type(nb1413m3_device::NB1413M3_SCANDAL); } void nbmj8891_state::bananadr(machine_config &config) @@ -2452,7 +2453,7 @@ void nbmj8891_state::bananadr(machine_config &config) m_maincpu->set_addrmap(AS_PROGRAM, &nbmj8891_state::scandalm_map); m_maincpu->set_addrmap(AS_IO, &nbmj8891_state::bananadr_io_map); - m_nb1413m3->set_type(NB1413M3_BANANADR); + m_nb1413m3->set_type(nb1413m3_device::NB1413M3_BANANADR); NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); } @@ -2461,21 +2462,21 @@ void nbmj8891_state::club90s(machine_config &config) { mjnanpas(config); - m_nb1413m3->set_type(NB1413M3_CLUB90S); + m_nb1413m3->set_type(nb1413m3_device::NB1413M3_CLUB90S); } void nbmj8891_state::mladyhtr(machine_config &config) { mjnanpas(config); - m_nb1413m3->set_type(NB1413M3_MLADYHTR); + m_nb1413m3->set_type(nb1413m3_device::NB1413M3_MLADYHTR); } void nbmj8891_state::chinmoku(machine_config &config) { mjnanpas(config); - m_nb1413m3->set_type(NB1413M3_CHINMOKU); + m_nb1413m3->set_type(nb1413m3_device::NB1413M3_CHINMOKU); } /* NBMJDRV6 */ @@ -2487,7 +2488,7 @@ void nbmj8891_state::mjfocusm(machine_config &config) m_maincpu->set_addrmap(AS_PROGRAM, &nbmj8891_state::scandalm_map); m_maincpu->set_addrmap(AS_IO, &nbmj8891_state::scandalm_io_map); - m_nb1413m3->set_type(NB1413M3_MJFOCUSM); + m_nb1413m3->set_type(nb1413m3_device::NB1413M3_MJFOCUSM); NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); @@ -2506,7 +2507,7 @@ void nbmj8891_state::scandalm(machine_config &config) { mjfocusm(config); - m_nb1413m3->set_type(NB1413M3_SCANDALM); + m_nb1413m3->set_type(nb1413m3_device::NB1413M3_SCANDALM); } void nbmj8891_state::taiwanmb(machine_config &config) @@ -2518,7 +2519,7 @@ void nbmj8891_state::taiwanmb(machine_config &config) m_maincpu->set_addrmap(AS_IO, &nbmj8891_state::taiwanmb_io_map); // m_maincpu->set_vblank_int("screen", FUNC(nbmj8891_state::irq0_line_hold)); - m_nb1413m3->set_type(NB1413M3_TAIWANMB); + m_nb1413m3->set_type(nb1413m3_device::NB1413M3_TAIWANMB); NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); diff --git a/src/mame/nichibutsu/nbmj8891_v.cpp b/src/mame/nichibutsu/nbmj8891_v.cpp index 585e49ab2f4..148a0bab345 100644 --- a/src/mame/nichibutsu/nbmj8891_v.cpp +++ b/src/mame/nichibutsu/nbmj8891_v.cpp @@ -369,7 +369,7 @@ void nbmj8891_state::gfxdraw() color = GFX[gfxaddr++]; // for hanamomo font type - if (m_nb1413m3->m_nb1413m3_type == NB1413M3_HANAMOMO) + if (m_nb1413m3->m_nb1413m3_type == nb1413m3_device::NB1413M3_HANAMOMO) { if ((ioport("FONTTYPE")->read()) == 0x00) { @@ -489,7 +489,7 @@ VIDEO_START_MEMBER( nbmj8891_state, _1layer ) m_blitter_src_addr = 0; m_gfxrom = 0; - if (m_nb1413m3->m_nb1413m3_type == NB1413M3_TAIWANMB) + if (m_nb1413m3->m_nb1413m3_type == nb1413m3_device::NB1413M3_TAIWANMB) { if (m_clut_ptr) { diff --git a/src/mame/nichibutsu/nbmj8900.cpp b/src/mame/nichibutsu/nbmj8900.cpp index 9af4e718c97..7474e11057a 100644 --- a/src/mame/nichibutsu/nbmj8900.cpp +++ b/src/mame/nichibutsu/nbmj8900.cpp @@ -311,7 +311,8 @@ void nbmj8900_state::ohpaipee(machine_config &config) m_maincpu->set_addrmap(AS_IO, &nbmj8900_state::ohpaipee_io_map); m_maincpu->set_vblank_int("screen", FUNC(nbmj8900_state::irq0_line_hold)); - NB1413M3(config, m_nb1413m3, 0, NB1413M3_OHPAIPEE); + NB1413M3(config, m_nb1413m3, 0, nb1413m3_device::NB1413M3_OHPAIPEE); + m_nb1413m3->set_blitter_rom_tag("gfx"); /* video hardware */ SCREEN(config, m_screen, SCREEN_TYPE_RASTER); @@ -340,7 +341,7 @@ void nbmj8900_state::togenkyo(machine_config &config) /* basic machine hardware */ m_maincpu->set_addrmap(AS_PROGRAM, &nbmj8900_state::togenkyo_map); - m_nb1413m3->set_type(NB1413M3_TOGENKYO); + m_nb1413m3->set_type(nb1413m3_device::NB1413M3_TOGENKYO); } diff --git a/src/mame/nichibutsu/nbmj8900_v.cpp b/src/mame/nichibutsu/nbmj8900_v.cpp index 385bad261fa..e162aeecfb6 100644 --- a/src/mame/nichibutsu/nbmj8900_v.cpp +++ b/src/mame/nichibutsu/nbmj8900_v.cpp @@ -256,7 +256,7 @@ void nbmj8900_state::gfxdraw() color = GFX[gfxaddr++]; // for hanamomo - if ((m_nb1413m3->m_nb1413m3_type == NB1413M3_HANAMOMO) && ((gfxaddr >= 0x20000) && (gfxaddr < 0x28000))) + if ((m_nb1413m3->m_nb1413m3_type == nb1413m3_device::NB1413M3_HANAMOMO) && ((gfxaddr >= 0x20000) && (gfxaddr < 0x28000))) { color |= ((color & 0x0f) << 4); } diff --git a/src/mame/nichibutsu/nbmj8991.cpp b/src/mame/nichibutsu/nbmj8991.cpp index 1a0134f9c89..42034a318d0 100644 --- a/src/mame/nichibutsu/nbmj8991.cpp +++ b/src/mame/nichibutsu/nbmj8991.cpp @@ -1326,6 +1326,7 @@ void nbmj8991_state::nbmjdrv1(machine_config &config) // galkoku m_maincpu->set_vblank_int("screen", FUNC(nbmj8991_state::irq0_line_hold)); NB1413M3(config, m_nb1413m3, 0); + m_nb1413m3->set_blitter_rom_tag("gfx1"); /* video hardware */ SCREEN(config, m_screen, SCREEN_TYPE_RASTER); @@ -1355,6 +1356,7 @@ void nbmj8991_state::nbmjdrv2(machine_config &config) // pstadium m_maincpu->set_vblank_int("screen", FUNC(nbmj8991_state::irq0_line_hold)); NB1413M3(config, m_nb1413m3, 0); + m_nb1413m3->set_blitter_rom_tag("gfx1"); Z80(config, m_audiocpu, 4000000); /* 4.00 MHz */ m_audiocpu->set_addrmap(AS_PROGRAM, &nbmj8991_state::nbmj8991_sound_map); @@ -1402,7 +1404,7 @@ void nbmj8991_state::galkoku(machine_config &config) { nbmjdrv1(config); - m_nb1413m3->set_type(NB1413M3_GALKOKU); + m_nb1413m3->set_type(nb1413m3_device::NB1413M3_GALKOKU); } @@ -1413,7 +1415,7 @@ void nbmj8991_state::galkaika(machine_config &config) /* basic machine hardware */ m_maincpu->set_addrmap(AS_PROGRAM, &nbmj8991_state::galkaika_map); - m_nb1413m3->set_type(NB1413M3_GALKAIKA); + m_nb1413m3->set_type(nb1413m3_device::NB1413M3_GALKAIKA); } @@ -1424,7 +1426,7 @@ void nbmj8991_state::tokyogal(machine_config &config) /* basic machine hardware */ m_maincpu->set_addrmap(AS_PROGRAM, &nbmj8991_state::tokyogal_map); - m_nb1413m3->set_type(NB1413M3_TOKYOGAL); + m_nb1413m3->set_type(nb1413m3_device::NB1413M3_TOKYOGAL); } @@ -1435,7 +1437,7 @@ void nbmj8991_state::tokimbsj(machine_config &config) /* basic machine hardware */ m_maincpu->set_addrmap(AS_PROGRAM, &nbmj8991_state::galkaika_map); - m_nb1413m3->set_type(NB1413M3_TOKIMBSJ); + m_nb1413m3->set_type(nb1413m3_device::NB1413M3_TOKIMBSJ); NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); } @@ -1445,7 +1447,7 @@ void nbmj8991_state::mcontest(machine_config &config) { nbmjdrv1(config); - m_nb1413m3->set_type(NB1413M3_MCONTEST); + m_nb1413m3->set_type(nb1413m3_device::NB1413M3_MCONTEST); } @@ -1453,7 +1455,7 @@ void nbmj8991_state::uchuuai(machine_config &config) { nbmjdrv1(config); - m_nb1413m3->set_type(NB1413M3_UCHUUAI); + m_nb1413m3->set_type(nb1413m3_device::NB1413M3_UCHUUAI); } @@ -1464,7 +1466,7 @@ void nbmj8991_state::hyouban(machine_config &config) /* basic machine hardware */ m_maincpu->set_addrmap(AS_IO, &nbmj8991_state::hyouban_io_map); - m_nb1413m3->set_type(NB1413M3_HYOUBAN); + m_nb1413m3->set_type(nb1413m3_device::NB1413M3_HYOUBAN); NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); } @@ -1474,7 +1476,7 @@ void nbmj8991_state::pstadium(machine_config &config) { nbmjdrv2(config); - m_nb1413m3->set_type(NB1413M3_PSTADIUM); + m_nb1413m3->set_type(nb1413m3_device::NB1413M3_PSTADIUM); } @@ -1485,7 +1487,7 @@ void nbmj8991_state::triplew1(machine_config &config) /* basic machine hardware */ m_maincpu->set_addrmap(AS_PROGRAM, &nbmj8991_state::triplew1_map); - m_nb1413m3->set_type(NB1413M3_TRIPLEW1); + m_nb1413m3->set_type(nb1413m3_device::NB1413M3_TRIPLEW1); } @@ -1496,7 +1498,7 @@ void nbmj8991_state::triplew2(machine_config &config) /* basic machine hardware */ m_maincpu->set_addrmap(AS_PROGRAM, &nbmj8991_state::triplew2_map); - m_nb1413m3->set_type(NB1413M3_TRIPLEW2); + m_nb1413m3->set_type(nb1413m3_device::NB1413M3_TRIPLEW2); } @@ -1504,7 +1506,7 @@ void nbmj8991_state::ntopstar(machine_config &config) { nbmjdrv2(config); - m_nb1413m3->set_type(NB1413M3_NTOPSTAR); + m_nb1413m3->set_type(nb1413m3_device::NB1413M3_NTOPSTAR); } @@ -1515,7 +1517,7 @@ void nbmj8991_state::mjlstory(machine_config &config) /* basic machine hardware */ m_maincpu->set_addrmap(AS_PROGRAM, &nbmj8991_state::mjlstory_map); - m_nb1413m3->set_type(NB1413M3_MJLSTORY); + m_nb1413m3->set_type(nb1413m3_device::NB1413M3_MJLSTORY); } @@ -1523,7 +1525,7 @@ void nbmj8991_state::vanilla(machine_config &config) { nbmjdrv2(config); - m_nb1413m3->set_type(NB1413M3_VANILLA); + m_nb1413m3->set_type(nb1413m3_device::NB1413M3_VANILLA); } @@ -1532,7 +1534,7 @@ void nbmj8991_state::finalbny(machine_config &config) nbmjdrv2(config); /* basic machine hardware */ - m_nb1413m3->set_type(NB1413M3_FINALBNY); + m_nb1413m3->set_type(nb1413m3_device::NB1413M3_FINALBNY); NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); } @@ -1542,7 +1544,7 @@ void nbmj8991_state::qmhayaku(machine_config &config) { nbmjdrv2(config); - m_nb1413m3->set_type(NB1413M3_QMHAYAKU); + m_nb1413m3->set_type(nb1413m3_device::NB1413M3_QMHAYAKU); } @@ -1553,7 +1555,7 @@ void nbmj8991_state::mjgottub(machine_config &config) /* basic machine hardware */ m_maincpu->set_addrmap(AS_PROGRAM, &nbmj8991_state::triplew1_map); - m_nb1413m3->set_type(NB1413M3_MJGOTTUB); + m_nb1413m3->set_type(nb1413m3_device::NB1413M3_MJGOTTUB); NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); } @@ -1567,7 +1569,7 @@ void nbmj8991_state::av2mj1bb(machine_config &config) m_maincpu->set_addrmap(AS_PROGRAM, &nbmj8991_state::av2mj1bb_map); m_maincpu->set_addrmap(AS_IO, &nbmj8991_state::av2mj1bb_io_map); - m_nb1413m3->set_type(NB1413M3_AV2MJ1BB); + m_nb1413m3->set_type(nb1413m3_device::NB1413M3_AV2MJ1BB); } @@ -1579,7 +1581,7 @@ void nbmj8991_state::av2mj2rg(machine_config &config) m_maincpu->set_addrmap(AS_PROGRAM, &nbmj8991_state::av2mj2rg_map); m_maincpu->set_addrmap(AS_IO, &nbmj8991_state::av2mj1bb_io_map); - m_nb1413m3->set_type(NB1413M3_AV2MJ2RG); + m_nb1413m3->set_type(nb1413m3_device::NB1413M3_AV2MJ2RG); } diff --git a/src/mame/nichibutsu/pastelg.cpp b/src/mame/nichibutsu/pastelg.cpp index 76669926424..b62eb6d0f6e 100644 --- a/src/mame/nichibutsu/pastelg.cpp +++ b/src/mame/nichibutsu/pastelg.cpp @@ -1,5 +1,6 @@ // license:BSD-3-Clause // copyright-holders:Takahiro Nogi + /****************************************************************************** Game Driver for Nichibutsu Mahjong series. @@ -16,22 +17,432 @@ Memo: - Custom chip used by pastelg PCB is 1411M1. - Some games display "GFXROM BANK OVER!!" or "GFXROM ADDRESS OVER!!" - in Debug build. + if logging is enabled. - Screen flip is not perfect. ******************************************************************************/ #include "emu.h" -#include "pastelg.h" + +#include "nb1413m3.h" #include "cpu/z80/z80.h" #include "machine/nvram.h" #include "sound/ay8910.h" #include "sound/dac.h" + +#include "emupal.h" +#include "screen.h" #include "speaker.h" +// configurable logging +#define LOG_ROMSEL (1U << 1) +#define LOG_GFXROMBANK (1U << 2) +#define LOG_GFXROMADDR (1U << 3) + +//#define VERBOSE (LOG_GENERAL | LOG_ROMSEL | GFXROMBANK | GFXROMADDR) + +#include "logmacro.h" + +#define LOGROMSEL(...) LOGMASKED(LOG_ROMSEL, __VA_ARGS__) +#define LOGGFXROMBANK(...) LOGMASKED(LOG_GFXROMBANK, __VA_ARGS__) +#define LOGGFXROMADDR(...) LOGMASKED(LOG_GFXROMADDR, __VA_ARGS__) + + +namespace { + +class pastelg_common_state : public driver_device +{ +public: + pastelg_common_state(const machine_config &mconfig, device_type type, const char *tag) : + driver_device(mconfig, type, tag), + m_maincpu(*this, "maincpu"), + m_nb1413m3(*this, "nb1413m3"), + m_screen(*this, "screen"), + m_blitter_rom(*this, "blitter"), + m_clut(*this, "clut") + { } + +protected: + virtual void video_start() override; + + required_device m_maincpu; + required_device m_nb1413m3; + required_device m_screen; + required_region_ptr m_blitter_rom; + required_shared_ptr m_clut; + + uint8_t m_gfxbank = 0; + uint8_t m_palbank = 0; + uint16_t m_blitter_src_addr = 0; + + uint8_t irq_ack_r(); + void blitter_w(offs_t offset, uint8_t data); + void palette(palette_device &palette) const; + uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + + void prg_map(address_map &map); + +private: + uint8_t m_blitter_destx = 0; + uint8_t m_blitter_desty = 0; + uint8_t m_blitter_sizex = 0; + uint8_t m_blitter_sizey = 0; + bool m_dispflag = false; + bool m_flipscreen = false; + bool m_blitter_direction_x = false; + bool m_blitter_direction_y = false; + std::unique_ptr m_videoram; + bool m_flipscreen_old = false; + emu_timer *m_blitter_timer = nullptr; + + void blitter_timer_callback(s32 param); + + void vramflip(); + void gfxdraw(); +}; + +class pastelg_state : public pastelg_common_state +{ +public: + pastelg_state(const machine_config &mconfig, device_type type, const char *tag) : + pastelg_common_state(mconfig, type, tag), + m_voice_rom(*this, "voice") + { } + + void pastelg(machine_config &config); + +private: + required_region_ptr m_voice_rom; + + uint8_t sndrom_r(); + void romsel_w(uint8_t data); + uint16_t blitter_src_addr_r(); + + void io_map(address_map &map); +}; + +class threeds_state : public pastelg_common_state +{ +public: + threeds_state(const machine_config &mconfig, device_type type, const char *tag) : + pastelg_common_state(mconfig, type, tag), + m_p1_keys(*this, "PL1_KEY%u", 0U), + m_p2_keys(*this, "PL2_KEY%u", 0U) + { } + + void threeds(machine_config &config); + +protected: + virtual void machine_start() override; + +private: + required_ioport_array<5> m_p1_keys; + required_ioport_array<5> m_p2_keys; + + uint8_t m_mux_data = 0; + + uint8_t inputport1_r(); + uint8_t inputport2_r(); + void inputportsel_w(uint8_t data); + void romsel_w(uint8_t data); + void output_w(uint8_t data); + uint8_t rom_readback_r(); + + void io_map(address_map &map); +}; + + +// video + +// pastelg specific methods + +uint16_t pastelg_state::blitter_src_addr_r() +{ + return m_blitter_src_addr; +} + +void pastelg_state::romsel_w(uint8_t data) +{ + m_gfxbank = ((data & 0xc0) >> 6); + m_palbank = ((data & 0x10) >> 4); + m_nb1413m3->sndrombank1_w(data); + + if ((m_gfxbank << 16) >= m_blitter_rom.length()) + { + LOGGFXROMBANK("GFXROM BANK OVER!!"); + + // FIXME: this isn't a power-of-two size, subtracting 1 doesn't generate a valid mask + m_gfxbank &= (m_blitter_rom.length() / 0x20000 - 1); + } +} + +// threeds specific methods + +void threeds_state::romsel_w(uint8_t data) +{ + if (data & 0xfc) LOGROMSEL("%02x\n", data); + m_gfxbank = (data & 0x3); +} + +void threeds_state::output_w(uint8_t data) +{ + m_palbank = ((data & 0x10) >> 4); + +} + +uint8_t threeds_state::rom_readback_r() +{ + return m_blitter_rom[(m_blitter_src_addr | (m_gfxbank << 16)) & 0x3ffff]; +} + +// common methods + +void pastelg_common_state::palette(palette_device &palette) const +{ + const uint8_t *color_prom = memregion("proms")->base(); + + for (int i = 0; i < palette.entries(); i++) + { + int bit0, bit1, bit2, bit3; + + bit0 = BIT(color_prom[0], 0); + bit1 = BIT(color_prom[0], 1); + bit2 = BIT(color_prom[0], 2); + bit3 = BIT(color_prom[0], 3); + int const r = 0x0e * bit0 + 0x1f * bit1 + 0x43 * bit2 + 0x8f * bit3; + bit0 = BIT(color_prom[0], 4); + bit1 = BIT(color_prom[0], 5); + bit2 = BIT(color_prom[0], 6); + bit3 = BIT(color_prom[0], 7); + int const g = 0x0e * bit0 + 0x1f * bit1 + 0x43 * bit2 + 0x8f * bit3; + bit0 = BIT(color_prom[palette.entries()], 0); + bit1 = BIT(color_prom[palette.entries()], 1); + bit2 = BIT(color_prom[palette.entries()], 2); + bit3 = BIT(color_prom[palette.entries()], 3); + int const b = 0x0e * bit0 + 0x1f * bit1 + 0x43 * bit2 + 0x8f * bit3; + + palette.set_pen_color(i, rgb_t(r, g, b)); + color_prom++; + } +} + +void pastelg_common_state::blitter_w(offs_t offset, uint8_t data) +{ + switch (offset) + { + case 0: m_blitter_src_addr = (m_blitter_src_addr & 0xff00) | data; break; + case 1: m_blitter_src_addr = (m_blitter_src_addr & 0x00ff) | (data << 8); break; + case 2: m_blitter_destx = data; break; + case 3: m_blitter_desty = data; break; + case 4: m_blitter_sizex = data; break; + case 5: m_blitter_sizey = data; + // writing here also starts the blit + gfxdraw(); + break; + case 6: m_blitter_direction_x = (data & 0x01) ? 1 : 0; + m_blitter_direction_y = (data & 0x02) ? 1 : 0; + m_flipscreen = (data & 0x04) ? 0 : 1; + m_dispflag = (data & 0x08) ? 0 : 1; + vramflip(); + break; + } +} + +void pastelg_common_state::vramflip() +{ + int const width = m_screen->width(); + int const height = m_screen->height(); + + if (m_flipscreen == m_flipscreen_old) return; + + for (int y = 0; y < height; y++) + { + for (int x = 0; x < width; x++) + { + uint8_t const color1 = m_videoram[(y * width) + x]; + uint8_t const color2 = m_videoram[((y ^ 0xff) * width) + (x ^ 0xff)]; + m_videoram[(y * width) + x] = color2; + m_videoram[((y ^ 0xff) * width) + (x ^ 0xff)] = color1; + } + } + + m_flipscreen_old = m_flipscreen; +} + +void pastelg_common_state::blitter_timer_callback(s32 param) +{ + m_nb1413m3->busyflag_w(1); +} + + +void pastelg_common_state::gfxdraw() +{ + int const width = m_screen->width(); + + int sizex, sizey; + int incx, incy; + + m_nb1413m3->m_busyctr = 0; + + int const startx = m_blitter_destx + m_blitter_sizex; + int const starty = m_blitter_desty + m_blitter_sizey; + + + if (m_blitter_direction_x) + { + if (m_blitter_sizex & 0x80) sizex = 0xff - m_blitter_sizex; + else sizex = m_blitter_sizex; + incx = 1; + } + else + { + sizex = m_blitter_sizex; + incx = -1; + } + + if (m_blitter_direction_y) + { + if (m_blitter_sizey & 0x80) sizey = 0xff - m_blitter_sizey; + else sizey = m_blitter_sizey; + incy = 1; + } + else + { + sizey = m_blitter_sizey; + incy = -1; + } + + int gfxaddr = (m_gfxbank << 16) + m_blitter_src_addr; + + int readflag = 0; + + int count = 0; + int y = starty; + + for (int ctry = sizey; ctry >= 0; ctry--) + { + int x = startx; + + for (int ctrx = sizex; ctrx >= 0; ctrx--) + { + gfxaddr = (m_gfxbank << 16) + ((m_blitter_src_addr + count)); + + if (gfxaddr >= m_blitter_rom.length()) + { + LOGGFXROMADDR("GFXROM ADDRESS OVER!!"); + + gfxaddr = 0; + } + + uint8_t color = m_blitter_rom[gfxaddr]; + + int dx = x & 0xff; + int dy = y & 0xff; + + if (m_flipscreen) + { + dx ^= 0xff; + dy ^= 0xff; + } + + if (!readflag) + { + // 1st, 3rd, 5th, ... read + color = (color & 0x0f); + } + else + { + // 2nd, 4th, 6th, ... read + color = (color & 0xf0) >> 4; + count++; + } + + readflag ^= 1; + + if (m_clut[color] & 0xf0) + { + if (color) + { + color = ((m_palbank * 0x10) + color); + m_videoram[(dy * width) + dx] = color; + } + } + else + { + if(m_clut[color] != 0) + { + color = ((m_palbank * 0x10) + m_clut[color]); + m_videoram[(dy * width) + dx] = color; + } + } + + m_nb1413m3->m_busyctr++; + x += incx; + } + + y += incy; + } + + m_nb1413m3->busyflag_w(0); + m_blitter_timer->adjust(attotime::from_hz(400000) * m_nb1413m3->m_busyctr); +} + +/****************************************************************************** + + +******************************************************************************/ +void pastelg_common_state::video_start() +{ + int width = m_screen->width(); + int height = m_screen->height(); + + m_videoram = make_unique_clear(width * height); + + m_blitter_timer = timer_alloc(FUNC(pastelg_state::blitter_timer_callback), this); + + save_item(NAME(m_blitter_desty)); + save_item(NAME(m_blitter_sizex)); + save_item(NAME(m_blitter_sizey)); + save_item(NAME(m_blitter_src_addr)); + save_item(NAME(m_gfxbank)); + save_item(NAME(m_dispflag)); + save_item(NAME(m_flipscreen)); + save_item(NAME(m_blitter_direction_x)); + save_item(NAME(m_blitter_direction_y)); + save_item(NAME(m_palbank)); + save_pointer(NAME(m_videoram), width*height); + save_item(NAME(m_flipscreen_old)); + + m_palbank = 0; +} + +/****************************************************************************** + + +******************************************************************************/ +uint32_t pastelg_common_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +{ + if (m_dispflag) + { + int const width = screen.width(); + int const height = screen.height(); + + for (int y = 0; y < height; y++) + for (int x = 0; x < width; x++) + bitmap.pix(y, x) = m_videoram[(y * width) + x]; + } + else + bitmap.fill(0, cliprect); + + return 0; +} + + +// machine + void threeds_state::machine_start() { save_item(NAME(m_mux_data)); @@ -66,7 +477,7 @@ void pastelg_state::io_map(address_map &map) map(0xa0, 0xa0).rw(m_nb1413m3, FUNC(nb1413m3_device::inputport1_r), FUNC(nb1413m3_device::inputportsel_w)); map(0xb0, 0xb0).r(m_nb1413m3, FUNC(nb1413m3_device::inputport2_r)).w(FUNC(pastelg_state::romsel_w)); map(0xc0, 0xc0).r(FUNC(pastelg_state::sndrom_r)); - map(0xc0, 0xcf).writeonly().share("clut"); + map(0xc0, 0xcf).writeonly().share(m_clut); map(0xd0, 0xd0).r(FUNC(pastelg_state::irq_ack_r)).w("dac", FUNC(dac_byte_interface::data_w)); map(0xe0, 0xe0).portr("DSWC"); } @@ -74,7 +485,7 @@ void pastelg_state::io_map(address_map &map) uint8_t threeds_state::inputport1_r() { - switch(m_mux_data) + switch (m_mux_data) { case 0x01: return m_p1_keys[0]->read(); case 0x02: return m_p1_keys[1]->read(); @@ -88,7 +499,7 @@ uint8_t threeds_state::inputport1_r() uint8_t threeds_state::inputport2_r() { - switch(m_mux_data) + switch (m_mux_data) { case 0x01: return m_p2_keys[0]->read(); case 0x02: return m_p2_keys[1]->read(); @@ -114,7 +525,7 @@ void threeds_state::io_map(address_map &map) map(0xf0, 0xf6).w(FUNC(threeds_state::blitter_w)); map(0xa0, 0xa0).rw(FUNC(threeds_state::inputport1_r), FUNC(threeds_state::inputportsel_w)); map(0xb0, 0xb0).r(FUNC(threeds_state::inputport2_r)).w(FUNC(threeds_state::output_w)); //writes: bit 3 is coin lockout, bit 1 is coin counter - map(0xc0, 0xcf).writeonly().share("clut"); + map(0xc0, 0xcf).writeonly().share(m_clut); map(0xc0, 0xc0).r(FUNC(threeds_state::rom_readback_r)); map(0xd0, 0xd0).r(FUNC(threeds_state::irq_ack_r)).w("dac", FUNC(dac_byte_interface::data_w)); } @@ -261,7 +672,7 @@ static INPUT_PORTS_START( threeds ) PORT_BIT( 0x03, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_START1 ) PORT_NAME("1P Start / Deal") PORT_BIT( 0x38, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_DIPNAME( 0x40, 0x40, "1P-Side Character Test Mode" ) //only combined with the service mode + PORT_DIPNAME( 0x40, 0x40, "1P-Side Character Test Mode" ) // only combined with the service mode PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) @@ -297,7 +708,7 @@ static INPUT_PORTS_START( threeds ) PORT_BIT( 0x03, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_START2 ) PORT_NAME("2P Start / Deal") PORT_BIT( 0x38, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_DIPNAME( 0x40, 0x40, "2P-Side Character Test Mode" ) //only combined with the service mode + PORT_DIPNAME( 0x40, 0x40, "2P-Side Character Test Mode" ) // only combined with the service mode PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) @@ -358,17 +769,18 @@ INPUT_PORTS_END void pastelg_state::pastelg(machine_config &config) { - /* basic machine hardware */ - Z80(config, m_maincpu, 19968000/4); // unknown divider, galds definitely relies on this for correct voice pitch + // basic machine hardware + Z80(config, m_maincpu, 19.968_MHz_XTAL / 4); // unknown divider, galds definitely relies on this for correct voice pitch m_maincpu->set_addrmap(AS_PROGRAM, &pastelg_state::prg_map); m_maincpu->set_addrmap(AS_IO, &pastelg_state::io_map); m_maincpu->set_vblank_int("screen", FUNC(pastelg_state::irq0_line_assert)); // nmiclock not written, chip is 1411M1 instead of 1413M3 - NB1413M3(config, m_nb1413m3, 0, NB1413M3_PASTELG); + NB1413M3(config, m_nb1413m3, 0, nb1413m3_device::NB1413M3_PASTELG); + m_nb1413m3->set_blitter_rom_tag("blitter"); NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); - /* video hardware */ + // video hardware SCREEN(config, m_screen, SCREEN_TYPE_RASTER); m_screen->set_refresh_hz(60); m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(0)); @@ -379,10 +791,10 @@ void pastelg_state::pastelg(machine_config &config) PALETTE(config, "palette", FUNC(pastelg_state::palette), 32); - /* sound hardware */ + // sound hardware SPEAKER(config, "speaker").front_center(); - ay8910_device &aysnd(AY8910(config, "aysnd", 1250000)); + ay8910_device &aysnd(AY8910(config, "aysnd", 1'250'000)); // TODO: this clock doesn't seem to be derivable from the only XTAL on PCB (19.968_MHz_XTAL / 16 is pretty close, though) aysnd.port_a_read_callback().set_ioport("DSWA"); aysnd.port_b_read_callback().set_ioport("DSWB"); aysnd.add_route(ALL_OUTPUTS, "speaker", 0.35); @@ -415,16 +827,18 @@ Note void threeds_state::threeds(machine_config &config) { - /* basic machine hardware */ - Z80(config, m_maincpu, 19968000/4); // unknown divider, galds definitely relies on this for correct voice pitch + // basic machine hardware + Z80(config, m_maincpu, 19.968_MHz_XTAL / 4); // unknown divider, galds definitely relies on this for correct voice pitch m_maincpu->set_addrmap(AS_PROGRAM, &threeds_state::prg_map); m_maincpu->set_addrmap(AS_IO, &threeds_state::io_map); m_maincpu->set_vblank_int("screen", FUNC(threeds_state::irq0_line_assert)); NB1413M3(config, m_nb1413m3, 0); + m_nb1413m3->set_blitter_rom_tag("blitter"); + NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); - /* video hardware */ + // video hardware SCREEN(config, m_screen, SCREEN_TYPE_RASTER); m_screen->set_refresh_hz(60); m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(0)); @@ -438,7 +852,7 @@ void threeds_state::threeds(machine_config &config) /* sound hardware */ SPEAKER(config, "speaker").front_center(); - ay8910_device &aysnd(AY8910(config, "aysnd", 1250000)); + ay8910_device &aysnd(AY8910(config, "aysnd", 1'250'000)); // TODO: this clock doesn't seem to be derivable from the only XTAL on PCB (19.968_MHz_XTAL / 16 is pretty close, though) aysnd.port_a_read_callback().set_ioport("DSWB"); aysnd.port_b_read_callback().set_ioport("DSWA"); aysnd.add_route(ALL_OUTPUTS, "speaker", 0.35); @@ -448,7 +862,7 @@ void threeds_state::threeds(machine_config &config) ROM_START( pastelg ) - ROM_REGION( 0x10000, "maincpu", 0 ) + ROM_REGION( 0x0c000, "maincpu", 0 ) ROM_LOAD( "pgal_09.bin", 0x00000, 0x04000, CRC(1e494af3) SHA1(1597a7da22ecfbb1df83cf9d0acc7a8be461bc2c) ) ROM_LOAD( "pgal_10.bin", 0x04000, 0x04000, CRC(677cccea) SHA1(a294bf4e3c5e74291160a0858371961868afc1d1) ) ROM_LOAD( "pgal_11.bin", 0x08000, 0x04000, CRC(c2ccea38) SHA1(0374e8aa0e7961426e417ffe6e1a0d8dc7fd9ecf) ) @@ -471,13 +885,13 @@ ROM_START( pastelg ) ROM_END ROM_START( threeds ) - ROM_REGION( 0x10000, "maincpu", 0 ) + ROM_REGION( 0x0c000, "maincpu", 0 ) ROM_LOAD( "ft9.9a", 0x00000, 0x04000, CRC(bc0e7cfd) SHA1(4e84f573fb2c1228757d34b8bc69649b145d9707) ) // labeled FT9 (red label) ROM_LOAD( "ft10.10a", 0x04000, 0x04000, CRC(e185d9f5) SHA1(98d4a824ed6a89e42543fb87daed33ef606bcced) ) // labeled FT10 (red label) ROM_LOAD( "ft11.11a", 0x08000, 0x04000, CRC(d1fb728b) SHA1(46e8e6ccdc1b78da29c969cd9290158c96bac4c4) ) // labeled FT11 (red label) ROM_REGION( 0x38000, "blitter", 0 ) - ROM_LOAD( "1.1a", 0x00000, 0x08000, CRC(5734ca7d) SHA1(d22b9e604cc4e2c0bb4eb32ded06bb5fa519965f) ) // roms 1 through 7 where labeled simply "1" through "7" in black labels + ROM_LOAD( "1.1a", 0x00000, 0x08000, CRC(5734ca7d) SHA1(d22b9e604cc4e2c0bb4eb32ded06bb5fa519965f) ) // ROMs 1 through 7 where labeled simply "1" through "7" in black labels ROM_LOAD( "2.2a", 0x08000, 0x08000, CRC(c7f21718) SHA1(4b2956d499e4db63e7f2329420e3d0313e6360ed) ) ROM_LOAD( "3.3a", 0x10000, 0x08000, CRC(87bd0a9e) SHA1(a0443017ef4c19f0135c4f764a96457f02cda743) ) ROM_LOAD( "4.4a", 0x18000, 0x08000, CRC(b75ecf2b) SHA1(50b8f27988dd24ff475a500d361db3c7a7051f40) ) @@ -491,7 +905,7 @@ ROM_START( threeds ) ROM_END ROM_START( threedsa ) // Dumped from an original Nichibutsu PCB: TD1412a - ROM_REGION( 0x10000, "maincpu", 0 ) + ROM_REGION( 0x0c000, "maincpu", 0 ) ROM_LOAD( "bo9.9a", 0x00000, 0x04000, CRC(352577cf) SHA1(26cea6ee0f303b1a2c2ba3325351656da89d588b) ) ROM_LOAD( "bo10.10a", 0x04000, 0x04000, CRC(d191fb4b) SHA1(42882cfc1c0ed82f320a1a95ecbedfaa91d5dd94) ) ROM_LOAD( "bo11.11a", 0x08000, 0x04000, CRC(17318e4b) SHA1(6814141cb643c997b2fafcdc5da2c49e19647d85) ) @@ -512,7 +926,7 @@ ROM_END // might be a bootleg (or licensed) board? had a sub-board (containing only logic) marked "Sky Dragon" and there were no Nichibutsu markings on any of the PCBs or chips ROM_START( galds ) - ROM_REGION( 0x10000, "maincpu", 0 ) + ROM_REGION( 0x0c000, "maincpu", 0 ) ROM_LOAD( "dg8.ic3", 0x00000, 0x04000, CRC(06c6a98f) SHA1(828deef4e725cafef5088fc2dfab63b62ae0feb0) ) ROM_LOAD( "dg9.ic2", 0x04000, 0x04000, CRC(a53eca09) SHA1(001ebb04378e6d7dd5ad15b272e1346655b91eee)) ROM_LOAD( "dg10.ic1", 0x08000, 0x04000, CRC(6c380c64) SHA1(3f6b037a8a40fd5c4bc3b469ee3c9f1e1bd302a0) ) @@ -531,9 +945,10 @@ ROM_START( galds ) ROM_LOAD( "mb7112e.7j", 0x0020, 0x0020, CRC(181f2a88) SHA1(a75ea981127fc667bb6b9f2ae2766aa2147ff04a) ) ROM_END +} // anonymous namespace -GAME( 1985, pastelg, 0, pastelg, pastelg, pastelg_state, empty_init, ROT0, "Nichibutsu", "Pastel Gal (Japan 851224)", MACHINE_SUPPORTS_SAVE ) -GAME( 1985, threeds, 0, threeds, threeds, threeds_state, empty_init, ROT0, "Nichibutsu", "Three Ds - Three Dealers Casino House (set 1)", MACHINE_SUPPORTS_SAVE ) -GAME( 1985, threedsa, threeds, threeds, threeds, threeds_state, empty_init, ROT0, "Nichibutsu", "Three Ds - Three Dealers Casino House (set 2)", MACHINE_SUPPORTS_SAVE ) +GAME( 1985, pastelg, 0, pastelg, pastelg, pastelg_state, empty_init, ROT0, "Nichibutsu", "Pastel Gal (Japan 851224)", MACHINE_SUPPORTS_SAVE ) +GAME( 1985, threeds, 0, threeds, threeds, threeds_state, empty_init, ROT0, "Nichibutsu", "Three Ds - Three Dealers Casino House (set 1)", MACHINE_SUPPORTS_SAVE ) +GAME( 1985, threedsa, threeds, threeds, threeds, threeds_state, empty_init, ROT0, "Nichibutsu", "Three Ds - Three Dealers Casino House (set 2)", MACHINE_SUPPORTS_SAVE ) GAME( 1985, galds, threeds, threeds, galds, threeds_state, empty_init, ROT0, "Nihon System Corp.", "Gals Ds - Three Dealers Casino House (bootleg?)", MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/nichibutsu/pastelg.h b/src/mame/nichibutsu/pastelg.h deleted file mode 100644 index 11570eca6f1..00000000000 --- a/src/mame/nichibutsu/pastelg.h +++ /dev/null @@ -1,114 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Takahiro Nogi -#ifndef MAME_NICHIBUTSU_PASTELG_H -#define MAME_NICHIBUTSU_PASTELG_H - -#pragma once - -#include "nb1413m3.h" -#include "emupal.h" -#include "screen.h" - -class pastelg_common_state : public driver_device -{ -public: - pastelg_common_state(const machine_config &mconfig, device_type type, const char *tag) : - driver_device(mconfig, type, tag), - m_maincpu(*this, "maincpu"), - m_nb1413m3(*this, "nb1413m3"), - m_screen(*this, "screen"), - m_blitter_rom(*this, "blitter"), - m_clut(*this, "clut") - { } - -protected: - virtual void video_start() override; - - required_device m_maincpu; - required_device m_nb1413m3; - required_device m_screen; - required_region_ptr m_blitter_rom; - - uint8_t m_gfxbank = 0; - uint8_t m_palbank = 0; - uint16_t m_blitter_src_addr = 0; - - uint8_t irq_ack_r(); - void blitter_w(offs_t offset, uint8_t data); - void palette(palette_device &palette) const; - uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - - void prg_map(address_map &map); - -private: - required_shared_ptr m_clut; - - uint8_t m_blitter_destx = 0; - uint8_t m_blitter_desty = 0; - uint8_t m_blitter_sizex = 0; - uint8_t m_blitter_sizey = 0; - bool m_dispflag = false; - bool m_flipscreen = false; - bool m_blitter_direction_x = false; - bool m_blitter_direction_y = false; - std::unique_ptr m_videoram; - bool m_flipscreen_old = false; - emu_timer *m_blitter_timer = nullptr; - - void blitter_timer_callback(s32 param); - - void vramflip(); - void gfxdraw(); -}; - -class pastelg_state : public pastelg_common_state -{ -public: - pastelg_state(const machine_config &mconfig, device_type type, const char *tag) : - pastelg_common_state(mconfig, type, tag), - m_voice_rom(*this, "voice") - { } - - void pastelg(machine_config &config); - -private: - required_region_ptr m_voice_rom; - - uint8_t sndrom_r(); - void romsel_w(uint8_t data); - uint16_t blitter_src_addr_r(); - - void io_map(address_map &map); -}; - -class threeds_state : public pastelg_common_state -{ -public: - threeds_state(const machine_config &mconfig, device_type type, const char *tag) : - pastelg_common_state(mconfig, type, tag), - m_p1_keys(*this, "PL1_KEY%u", 0U), - m_p2_keys(*this, "PL2_KEY%u", 0U) - { } - - void threeds(machine_config &config); - -protected: - virtual void machine_start() override; - -private: - required_ioport_array<5> m_p1_keys; - required_ioport_array<5> m_p2_keys; - - uint8_t m_mux_data = 0; - - uint8_t inputport1_r(); - uint8_t inputport2_r(); - void inputportsel_w(uint8_t data); - void romsel_w(uint8_t data); - void output_w(uint8_t data); - uint8_t rom_readback_r(); - - void io_map(address_map &map); -}; - -#endif // MAME_NICHIBUTSU_PASTELG_H diff --git a/src/mame/nichibutsu/pastelg_v.cpp b/src/mame/nichibutsu/pastelg_v.cpp deleted file mode 100644 index 3fb8aa59c05..00000000000 --- a/src/mame/nichibutsu/pastelg_v.cpp +++ /dev/null @@ -1,298 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Takahiro Nogi -/****************************************************************************** - - Video Hardware for Nichibutsu Mahjong series. - - Driver by Takahiro Nogi 2000/06/07 - - -******************************************************************************/ - -#include "emu.h" -#include "pastelg.h" - - -// pastelg specific methods - -uint16_t pastelg_state::blitter_src_addr_r() -{ - return m_blitter_src_addr; -} - -void pastelg_state::romsel_w(uint8_t data) -{ - m_gfxbank = ((data & 0xc0) >> 6); - m_palbank = ((data & 0x10) >> 4); - m_nb1413m3->sndrombank1_w(data); - - if ((m_gfxbank << 16) >= m_blitter_rom.length()) - { -#ifdef MAME_DEBUG - popmessage("GFXROM BANK OVER!!"); -#endif - // FIXME: this isn't a power-of-two size, subtracting 1 doesn't generate a valid mask - m_gfxbank &= (m_blitter_rom.length() / 0x20000 - 1); - } -} - -// threeds specific methods - -void threeds_state::romsel_w(uint8_t data) -{ - if (data & 0xfc) printf("%02x\n", data); - m_gfxbank = (data & 0x3); -} - -void threeds_state::output_w(uint8_t data) -{ - m_palbank = ((data & 0x10) >> 4); - -} - -uint8_t threeds_state::rom_readback_r() -{ - return m_blitter_rom[(m_blitter_src_addr | (m_gfxbank << 16)) & 0x3ffff]; -} - -// common methods - -void pastelg_common_state::palette(palette_device &palette) const -{ - const uint8_t *color_prom = memregion("proms")->base(); - - for (int i = 0; i < palette.entries(); i++) - { - int bit0, bit1, bit2, bit3; - - bit0 = BIT(color_prom[0], 0); - bit1 = BIT(color_prom[0], 1); - bit2 = BIT(color_prom[0], 2); - bit3 = BIT(color_prom[0], 3); - int const r = 0x0e * bit0 + 0x1f * bit1 + 0x43 * bit2 + 0x8f * bit3; - bit0 = BIT(color_prom[0], 4); - bit1 = BIT(color_prom[0], 5); - bit2 = BIT(color_prom[0], 6); - bit3 = BIT(color_prom[0], 7); - int const g = 0x0e * bit0 + 0x1f * bit1 + 0x43 * bit2 + 0x8f * bit3; - bit0 = BIT(color_prom[palette.entries()], 0); - bit1 = BIT(color_prom[palette.entries()], 1); - bit2 = BIT(color_prom[palette.entries()], 2); - bit3 = BIT(color_prom[palette.entries()], 3); - int const b = 0x0e * bit0 + 0x1f * bit1 + 0x43 * bit2 + 0x8f * bit3; - - palette.set_pen_color(i, rgb_t(r, g, b)); - color_prom++; - } -} - -void pastelg_common_state::blitter_w(offs_t offset, uint8_t data) -{ - switch (offset) - { - case 0: m_blitter_src_addr = (m_blitter_src_addr & 0xff00) | data; break; - case 1: m_blitter_src_addr = (m_blitter_src_addr & 0x00ff) | (data << 8); break; - case 2: m_blitter_destx = data; break; - case 3: m_blitter_desty = data; break; - case 4: m_blitter_sizex = data; break; - case 5: m_blitter_sizey = data; - // writing here also starts the blit - gfxdraw(); - break; - case 6: m_blitter_direction_x = (data & 0x01) ? 1 : 0; - m_blitter_direction_y = (data & 0x02) ? 1 : 0; - m_flipscreen = (data & 0x04) ? 0 : 1; - m_dispflag = (data & 0x08) ? 0 : 1; - vramflip(); - break; - } -} - -void pastelg_common_state::vramflip() -{ - int width = m_screen->width(); - int height = m_screen->height(); - - if (m_flipscreen == m_flipscreen_old) return; - - for (int y = 0; y < height; y++) - { - for (int x = 0; x < width; x++) - { - uint8_t color1 = m_videoram[(y * width) + x]; - uint8_t color2 = m_videoram[((y ^ 0xff) * width) + (x ^ 0xff)]; - m_videoram[(y * width) + x] = color2; - m_videoram[((y ^ 0xff) * width) + (x ^ 0xff)] = color1; - } - } - - m_flipscreen_old = m_flipscreen; -} - -void pastelg_common_state::blitter_timer_callback(s32 param) -{ - m_nb1413m3->busyflag_w(1); -} - - -void pastelg_common_state::gfxdraw() -{ - int width = m_screen->width(); - - int sizex, sizey; - int incx, incy; - - m_nb1413m3->m_busyctr = 0; - - int startx = m_blitter_destx + m_blitter_sizex; - int starty = m_blitter_desty + m_blitter_sizey; - - - if (m_blitter_direction_x) - { - if (m_blitter_sizex & 0x80) sizex = 0xff - m_blitter_sizex; - else sizex = m_blitter_sizex; - incx = 1; - } - else - { - sizex = m_blitter_sizex; - incx = -1; - } - - if (m_blitter_direction_y) - { - if (m_blitter_sizey & 0x80) sizey = 0xff - m_blitter_sizey; - else sizey = m_blitter_sizey; - incy = 1; - } - else - { - sizey = m_blitter_sizey; - incy = -1; - } - - int gfxaddr = (m_gfxbank << 16) + m_blitter_src_addr; - - int readflag = 0; - - int count = 0; - int y = starty; - - for (int ctry = sizey; ctry >= 0; ctry--) - { - int x = startx; - - for (int ctrx = sizex; ctrx >= 0; ctrx--) - { - gfxaddr = (m_gfxbank << 16) + ((m_blitter_src_addr + count)); - - if (gfxaddr >= m_blitter_rom.length()) - { -#ifdef MAME_DEBUG - popmessage("GFXROM ADDRESS OVER!!"); -#endif - gfxaddr = 0; - } - - uint8_t color = m_blitter_rom[gfxaddr]; - - int dx = x & 0xff; - int dy = y & 0xff; - - if (m_flipscreen) - { - dx ^= 0xff; - dy ^= 0xff; - } - - if (!readflag) - { - // 1st, 3rd, 5th, ... read - color = (color & 0x0f); - } - else - { - // 2nd, 4th, 6th, ... read - color = (color & 0xf0) >> 4; - count++; - } - - readflag ^= 1; - - if (m_clut[color] & 0xf0) - { - if (color) - { - color = ((m_palbank * 0x10) + color); - m_videoram[(dy * width) + dx] = color; - } - } - else - { - if(m_clut[color] != 0) - { - color = ((m_palbank * 0x10) + m_clut[color]); - m_videoram[(dy * width) + dx] = color; - } - } - - m_nb1413m3->m_busyctr++; - x += incx; - } - - y += incy; - } - - m_nb1413m3->busyflag_w(0); - m_blitter_timer->adjust(attotime::from_hz(400000) * m_nb1413m3->m_busyctr); -} - -/****************************************************************************** - - -******************************************************************************/ -void pastelg_common_state::video_start() -{ - int width = m_screen->width(); - int height = m_screen->height(); - - m_videoram = make_unique_clear(width * height); - - m_blitter_timer = timer_alloc(FUNC(pastelg_state::blitter_timer_callback), this); - - save_item(NAME(m_blitter_desty)); - save_item(NAME(m_blitter_sizex)); - save_item(NAME(m_blitter_sizey)); - save_item(NAME(m_blitter_src_addr)); - save_item(NAME(m_gfxbank)); - save_item(NAME(m_dispflag)); - save_item(NAME(m_flipscreen)); - save_item(NAME(m_blitter_direction_x)); - save_item(NAME(m_blitter_direction_y)); - save_item(NAME(m_palbank)); - save_pointer(NAME(m_videoram), width*height); - save_item(NAME(m_flipscreen_old)); - - m_palbank = 0; -} - -/****************************************************************************** - - -******************************************************************************/ -uint32_t pastelg_common_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) -{ - if (m_dispflag) - { - int width = screen.width(); - int height = screen.height(); - - for (int y = 0; y < height; y++) - for (int x = 0; x < width; x++) - bitmap.pix(y, x) = m_videoram[(y * width) + x]; - } - else - bitmap.fill(0, cliprect); - - return 0; -} -- cgit v1.2.3