summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--src/mame/nichibutsu/hyhoo.cpp352
-rw-r--r--src/mame/nichibutsu/hyhoo.h51
-rw-r--r--src/mame/nichibutsu/hyhoo_v.cpp245
-rw-r--r--src/mame/nichibutsu/nb1413m3.cpp9
-rw-r--r--src/mame/nichibutsu/nb1413m3.h214
-rw-r--r--src/mame/nichibutsu/nbmj8688.cpp76
-rw-r--r--src/mame/nichibutsu/nbmj8688_v.cpp12
-rw-r--r--src/mame/nichibutsu/nbmj8891.cpp53
-rw-r--r--src/mame/nichibutsu/nbmj8891_v.cpp4
-rw-r--r--src/mame/nichibutsu/nbmj8900.cpp5
-rw-r--r--src/mame/nichibutsu/nbmj8900_v.cpp2
-rw-r--r--src/mame/nichibutsu/nbmj8991.cpp38
-rw-r--r--src/mame/nichibutsu/pastelg.cpp467
-rw-r--r--src/mame/nichibutsu/pastelg.h114
-rw-r--r--src/mame/nichibutsu/pastelg_v.cpp298
15 files changed, 981 insertions, 959 deletions
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<cpu_device> m_maincpu;
+ required_device<nb1413m3_device> m_nb1413m3;
+ required_device<screen_device> m_screen;
+ required_region_ptr<uint8_t> m_blitter_rom;
+ required_shared_ptr<uint8_t> 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<cpu_device> m_maincpu;
- required_device<nb1413m3_device> m_nb1413m3;
- required_device<screen_device> m_screen;
- required_shared_ptr<uint8_t> 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 <typename T> void set_blitter_rom_tag(T &&tag) { m_blitter_rom.set_tag(std::forward<T>(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<uint8_t> 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<cpu_device> m_maincpu;
+ required_device<nb1413m3_device> m_nb1413m3;
+ required_device<screen_device> m_screen;
+ required_region_ptr<uint8_t> m_blitter_rom;
+ required_shared_ptr<uint8_t> 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<uint8_t[]> 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<uint8_t> 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<uint8_t[]>(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<cpu_device> m_maincpu;
- required_device<nb1413m3_device> m_nb1413m3;
- required_device<screen_device> m_screen;
- required_region_ptr<uint8_t> 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<uint8_t> 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<uint8_t[]> 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<uint8_t> 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<uint8_t[]>(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;
-}