summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/gb.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/gb.cpp')
-rw-r--r--src/mame/drivers/gb.cpp181
1 files changed, 84 insertions, 97 deletions
diff --git a/src/mame/drivers/gb.cpp b/src/mame/drivers/gb.cpp
index a54bd86061a..2fe407b629a 100644
--- a/src/mame/drivers/gb.cpp
+++ b/src/mame/drivers/gb.cpp
@@ -576,26 +576,22 @@ PALETTE_INIT_MEMBER(gb_state, gbp)
PALETTE_INIT_MEMBER(gb_state, sgb)
{
- int r, g, b;
-
for (int i = 0; i < 32768; i++)
{
- r = (i & 0x1F) << 3;
- g = ((i >> 5) & 0x1F) << 3;
- b = ((i >> 10) & 0x1F) << 3;
+ int r = (i & 0x1F) << 3;
+ int g = ((i >> 5) & 0x1F) << 3;
+ int b = ((i >> 10) & 0x1F) << 3;
palette.set_pen_color(i, r, g, b);
}
}
PALETTE_INIT_MEMBER(gb_state, gbc)
{
- int r, g, b;
-
for (int i = 0; i < 32768; i++)
{
- r = (i & 0x1F) << 3;
- g = ((i >> 5) & 0x1F) << 3;
- b = ((i >> 10) & 0x1F) << 3;
+ int r = (i & 0x1F) << 3;
+ int g = ((i >> 5) & 0x1F) << 3;
+ int b = ((i >> 10) & 0x1F) << 3;
palette.set_pen_color(i, r, g, b);
}
}
@@ -607,51 +603,50 @@ PALETTE_INIT_MEMBER(megaduck_state, megaduck)
}
-MACHINE_CONFIG_START(gb_state::gameboy)
-
+void gb_state::gameboy(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", LR35902, XTAL(4'194'304))
- MCFG_DEVICE_PROGRAM_MAP(gameboy_map)
- MCFG_LR35902_TIMER_CB( WRITE8( *this, gb_state, gb_timer_callback ) )
- MCFG_LR35902_HALT_BUG
+ LR35902(config, m_maincpu, XTAL(4'194'304));
+ m_maincpu->set_addrmap(AS_PROGRAM, &gb_state::gameboy_map);
+ m_maincpu->timer_cb().set(FUNC(gb_state::gb_timer_callback));
+ m_maincpu->set_halt_bug(true);
/* video hardware */
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_LCD));
screen.set_refresh_hz(DMG_FRAMES_PER_SECOND);
screen.set_vblank_time(0);
screen.set_screen_update("ppu", FUNC(dmg_ppu_device::screen_update));
- screen.set_palette("palette");
+ screen.set_palette(m_palette);
// screen.set_size(20*8, 18*8);
screen.set_size(458, 154);
screen.set_visarea(0*8, 20*8-1, 0*8, 18*8-1);
- MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfxdecode_device::empty)
- MCFG_PALETTE_ADD("palette", 4)
- MCFG_PALETTE_INIT_OWNER(gb_state,gb)
+ GFXDECODE(config, "gfxdecode", m_palette, gfxdecode_device::empty);
+ PALETTE(config, m_palette, 4).set_init(FUNC(gb_state::palette_init_gb));
- MCFG_DEVICE_ADD("ppu", DMG_PPU, "maincpu")
+ DMG_PPU(config, m_ppu, m_maincpu);
/* sound hardware */
SPEAKER(config, "lspeaker").front_left();
SPEAKER(config, "rspeaker").front_right();
- MCFG_DEVICE_ADD("apu", DMG_APU, XTAL(4'194'304))
- MCFG_SOUND_ROUTE(0, "lspeaker", 0.50)
- MCFG_SOUND_ROUTE(1, "rspeaker", 0.50)
+ DMG_APU(config, m_apu, XTAL(4'194'304));
+ m_apu->add_route(0, "lspeaker", 0.50);
+ m_apu->add_route(1, "rspeaker", 0.50);
/* cartslot */
- MCFG_GB_CARTRIDGE_ADD("gbslot", gb_cart, nullptr)
-
- MCFG_SOFTWARE_LIST_ADD("cart_list","gameboy")
- MCFG_SOFTWARE_LIST_COMPATIBLE_ADD("gbc_list","gbcolor")
-MACHINE_CONFIG_END
+ GB_CART_SLOT(config, m_cartslot, gb_cart, nullptr);
+ SOFTWARE_LIST(config, "cart_list").set_original("gameboy");
+ SOFTWARE_LIST(config, "gbc_list").set_compatible("gbcolor");
+}
-MACHINE_CONFIG_START(gb_state::supergb)
+void gb_state::supergb(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", LR35902, 4295454) /* 4.295454 MHz, derived from SNES xtal */
- MCFG_DEVICE_PROGRAM_MAP(sgb_map)
- MCFG_LR35902_TIMER_CB( WRITE8(*this, gb_state, gb_timer_callback ) )
- MCFG_LR35902_HALT_BUG
+ LR35902(config, m_maincpu, 4295454); /* 4.295454 MHz, derived from SNES xtal */
+ m_maincpu->set_addrmap(AS_PROGRAM, &gb_state::sgb_map);
+ m_maincpu->timer_cb().set(FUNC(gb_state::gb_timer_callback));
+ m_maincpu->set_halt_bug(true);
MCFG_MACHINE_START_OVERRIDE(gb_state, sgb)
MCFG_MACHINE_RESET_OVERRIDE(gb_state, sgb)
@@ -662,36 +657,34 @@ MACHINE_CONFIG_START(gb_state::supergb)
screen.set_refresh_hz(SGB_FRAMES_PER_SECOND);
screen.set_vblank_time(0);
screen.set_screen_update("ppu", FUNC(dmg_ppu_device::screen_update));
- screen.set_palette("palette");
+ screen.set_palette(m_palette);
screen.set_size(32*8, 28*8);
screen.set_visarea(0*8, 32*8-1, 0*8, 28*8-1);
- MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfxdecode_device::empty)
- MCFG_PALETTE_ADD("palette", 32768)
- MCFG_PALETTE_INIT_OWNER(gb_state,sgb)
+ GFXDECODE(config, "gfxdecode", m_palette, gfxdecode_device::empty);
+ PALETTE(config, m_palette, 32768).set_init(FUNC(gb_state::palette_init_sgb));
- MCFG_DEVICE_ADD("ppu", SGB_PPU, "maincpu")
+ SGB_PPU(config, m_ppu, m_maincpu);
/* sound hardware */
SPEAKER(config, "lspeaker").front_left();
SPEAKER(config, "rspeaker").front_right();
- MCFG_DEVICE_ADD("apu", DMG_APU, 4295454)
- MCFG_SOUND_ROUTE(0, "lspeaker", 0.50)
- MCFG_SOUND_ROUTE(1, "rspeaker", 0.50)
+ DMG_APU(config, m_apu, 4295454);
+ m_apu->add_route(0, "lspeaker", 0.50);
+ m_apu->add_route(1, "rspeaker", 0.50);
/* cartslot */
- MCFG_GB_CARTRIDGE_ADD("gbslot", gb_cart, nullptr)
-
- MCFG_SOFTWARE_LIST_ADD("cart_list","gameboy")
- MCFG_SOFTWARE_LIST_COMPATIBLE_ADD("gbc_list","gbcolor")
-MACHINE_CONFIG_END
+ GB_CART_SLOT(config, m_cartslot, gb_cart, nullptr);
+ SOFTWARE_LIST(config, "cart_list").set_original("gameboy");
+ SOFTWARE_LIST(config, "gbc_list").set_compatible("gbcolor");
+}
-MACHINE_CONFIG_START(gb_state::supergb2)
+void gb_state::supergb2(machine_config &config)
+{
gameboy(config);
/* basic machine hardware */
- MCFG_DEVICE_MODIFY("maincpu")
- MCFG_DEVICE_PROGRAM_MAP(sgb_map)
+ m_maincpu->set_addrmap(AS_PROGRAM, &gb_state::sgb_map);
MCFG_MACHINE_START_OVERRIDE(gb_state, sgb)
MCFG_MACHINE_RESET_OVERRIDE(gb_state, sgb)
@@ -702,32 +695,28 @@ MACHINE_CONFIG_START(gb_state::supergb2)
screen.set_size(32*8, 28*8);
screen.set_visarea(0*8, 32*8-1, 0*8, 28*8-1);
- MCFG_PALETTE_MODIFY("palette")
- MCFG_PALETTE_ENTRIES(32768)
- MCFG_PALETTE_INIT_OWNER(gb_state,sgb)
-
- MCFG_DEVICE_REMOVE("ppu")
- MCFG_DEVICE_ADD("ppu", SGB_PPU, "maincpu")
-MACHINE_CONFIG_END
+ m_palette->set_entries(32768);
+ m_palette->set_init(FUNC(gb_state::palette_init_sgb));
+ SGB_PPU(config.replace(), m_ppu, m_maincpu);
+}
-MACHINE_CONFIG_START(gb_state::gbpocket)
+void gb_state::gbpocket(machine_config &config)
+{
gameboy(config);
/* video hardware */
- MCFG_PALETTE_MODIFY("palette")
- MCFG_PALETTE_INIT_OWNER(gb_state,gbp)
+ m_palette->set_init(FUNC(gb_state::palette_init_gbp));
- MCFG_DEVICE_REMOVE("ppu")
- MCFG_DEVICE_ADD("ppu", MGB_PPU, "maincpu")
-MACHINE_CONFIG_END
-
-MACHINE_CONFIG_START(gb_state::gbcolor)
+ MGB_PPU(config.replace(), m_ppu, m_maincpu);
+}
+void gb_state::gbcolor(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", LR35902, XTAL(4'194'304)) // todo XTAL(8'388'000)
- MCFG_DEVICE_PROGRAM_MAP(gbc_map)
- MCFG_LR35902_TIMER_CB( WRITE8(*this, gb_state, gb_timer_callback ) )
+ LR35902(config, m_maincpu, XTAL(4'194'304)); // todo XTAL(8'388'000)
+ m_maincpu->set_addrmap(AS_PROGRAM, &gb_state::gbc_map);
+ m_maincpu->timer_cb().set(FUNC(gb_state::gb_timer_callback));
MCFG_MACHINE_START_OVERRIDE(gb_state,gbc)
MCFG_MACHINE_RESET_OVERRIDE(gb_state,gbc)
@@ -737,73 +726,71 @@ MACHINE_CONFIG_START(gb_state::gbcolor)
screen.set_refresh_hz(DMG_FRAMES_PER_SECOND);
screen.set_vblank_time(0);
screen.set_screen_update("ppu", FUNC(dmg_ppu_device::screen_update));
- screen.set_palette("palette");
+ screen.set_palette(m_palette);
// screen.set_size(20*8, 18*8);
screen.set_size(458, 154);
screen.set_visarea(0*8, 20*8-1, 0*8, 18*8-1);
- MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfxdecode_device::empty)
+ GFXDECODE(config, "gfxdecode", m_palette, gfxdecode_device::empty);
- MCFG_PALETTE_ADD("palette", 32768)
- MCFG_PALETTE_INIT_OWNER(gb_state,gbc)
+ PALETTE(config, m_palette, 32768).set_init(FUNC(gb_state::palette_init_gbc));
- MCFG_DEVICE_ADD("ppu", CGB_PPU, "maincpu")
+ CGB_PPU(config, m_ppu, m_maincpu);
/* sound hardware */
SPEAKER(config, "lspeaker").front_left();
SPEAKER(config, "rspeaker").front_right();
- MCFG_DEVICE_ADD("apu", CGB04_APU, XTAL(4'194'304))
- MCFG_SOUND_ROUTE(0, "lspeaker", 0.50)
- MCFG_SOUND_ROUTE(1, "rspeaker", 0.50)
+ CGB04_APU(config, m_apu, XTAL(4'194'304));
+ m_apu->add_route(0, "lspeaker", 0.50);
+ m_apu->add_route(1, "rspeaker", 0.50);
/* internal ram */
RAM(config, RAM_TAG).set_default_size("48K"); /* 2 pages of 8KB VRAM, 8 pages of 4KB RAM */
/* cartslot */
- MCFG_GB_CARTRIDGE_ADD("gbslot", gb_cart, nullptr)
-
- MCFG_SOFTWARE_LIST_ADD("cart_list","gbcolor")
- MCFG_SOFTWARE_LIST_COMPATIBLE_ADD("gb_list","gameboy")
-MACHINE_CONFIG_END
+ GB_CART_SLOT(config, "gbslot", gb_cart, nullptr);
-MACHINE_CONFIG_START(megaduck_state::megaduck)
+ SOFTWARE_LIST(config, "cart_list").set_original("gbcolor");
+ SOFTWARE_LIST(config, "gb_list").set_compatible("gameboy");
+}
+void megaduck_state::megaduck(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", LR35902, XTAL(4'194'304)) /* 4.194304 MHz */
- MCFG_DEVICE_PROGRAM_MAP(megaduck_map)
- MCFG_LR35902_TIMER_CB( WRITE8(*this, gb_state, gb_timer_callback ) )
- MCFG_LR35902_HALT_BUG
+ LR35902(config, m_maincpu, XTAL(4'194'304)); /* 4.194304 MHz */
+ m_maincpu->set_addrmap(AS_PROGRAM, &megaduck_state::megaduck_map);
+ m_maincpu->timer_cb().set(FUNC(gb_state::gb_timer_callback));
+ m_maincpu->set_halt_bug(true);
/* video hardware */
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_LCD));
screen.set_refresh_hz(DMG_FRAMES_PER_SECOND);
screen.set_vblank_time(0);
screen.set_screen_update("ppu", FUNC(dmg_ppu_device::screen_update));
- screen.set_palette("palette");
+ screen.set_palette(m_palette);
screen.set_size(20*8, 18*8);
screen.set_visarea(0*8, 20*8-1, 0*8, 18*8-1);
MCFG_MACHINE_START_OVERRIDE(megaduck_state, megaduck)
MCFG_MACHINE_RESET_OVERRIDE(megaduck_state, megaduck)
- MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfxdecode_device::empty)
+ GFXDECODE(config, "gfxdecode", m_palette, gfxdecode_device::empty);
- MCFG_PALETTE_ADD("palette", 4)
- MCFG_PALETTE_INIT_OWNER(megaduck_state,megaduck)
+ PALETTE(config, m_palette, 4).set_init(FUNC(megaduck_state::palette_init_megaduck));
- MCFG_DEVICE_ADD("ppu", DMG_PPU, "maincpu")
+ DMG_PPU(config, m_ppu, m_maincpu);
/* sound hardware */
SPEAKER(config, "lspeaker").front_left();
SPEAKER(config, "rspeaker").front_right();
- MCFG_DEVICE_ADD("apu", DMG_APU, XTAL(4'194'304))
- MCFG_SOUND_ROUTE(0, "lspeaker", 0.50)
- MCFG_SOUND_ROUTE(1, "rspeaker", 0.50)
+ DMG_APU(config, m_apu, XTAL(4'194'304));
+ m_apu->add_route(0, "lspeaker", 0.50);
+ m_apu->add_route(1, "rspeaker", 0.50);
/* cartslot */
- MCFG_MEGADUCK_CARTRIDGE_ADD("duckslot", megaduck_cart, nullptr)
- MCFG_SOFTWARE_LIST_ADD("cart_list", "megaduck")
-MACHINE_CONFIG_END
+ MEGADUCK_CART_SLOT(config, m_cartslot, megaduck_cart, nullptr);
+ SOFTWARE_LIST(config, "cart_list").set_original("megaduck");
+}
/***************************************************************************