From 2f797626a08919de7e164af27a3ee8357aff0cb2 Mon Sep 17 00:00:00 2001 From: wilbertpol Date: Sat, 25 Dec 2021 00:07:02 +0000 Subject: [PATCH] gb.cpp: Use memory views for bios disable and to remove some cartslot trampolines. (#9033) --- src/mame/drivers/gb.cpp | 260 +++++++++++++++------------------------- src/mame/includes/gb.h | 23 ++-- src/mame/machine/gb.cpp | 25 ++-- 3 files changed, 114 insertions(+), 194 deletions(-) diff --git a/src/mame/drivers/gb.cpp b/src/mame/drivers/gb.cpp index ae92dce5300..5d5ed5dc3a7 100644 --- a/src/mame/drivers/gb.cpp +++ b/src/mame/drivers/gb.cpp @@ -286,195 +286,125 @@ space. This mapper uses 32KB sized banks. #define SGB_FRAMES_PER_SECOND 61.17 -uint8_t gb_state::gb_cart_r(offs_t offset) +uint8_t gb_state::gb_bios_r(offs_t offset) { - if (m_bios_disable && m_cartslot) - return m_cartslot->read_rom(offset); - else + uint8_t *ROM = m_region_maincpu->base(); + if (m_bios_hack->read()) { - if (offset < 0x100) - { - uint8_t *ROM = m_region_maincpu->base(); - if (m_bios_hack->read()) - { - // patch out logo and checksum checks - // (useful to run some pirate carts until we implement - // their complete functionalities + to test homebrew) - if (offset == 0xe9 || offset == 0xea) - return 0x00; - if (offset == 0xfa || offset == 0xfb) - return 0x00; - } - return ROM[offset]; - } - else if (m_cartslot) - { - return m_cartslot->read_rom(offset); - } - else - return 0xff; + // patch out logo and checksum checks + // (useful to run some pirate carts until we implement + // their complete functionalities + to test homebrew) + if (offset == 0xe9 || offset == 0xea) + return 0x00; + if (offset == 0xfa || offset == 0xfb) + return 0x00; } -} - -uint8_t gb_state::gbc_cart_r(offs_t offset) -{ - if (m_bios_disable && m_cartslot) - return m_cartslot->read_rom(offset); - else - { - if (offset < 0x100) - { - uint8_t *ROM = m_region_maincpu->base(); - if (m_bios_hack->read()) - { - // patch out logo and checksum checks - // (useful to run some pirate carts until we implement - // their complete functionalities + to test homebrew) - if (offset == 0xdb || offset == 0xdc) - return 0x00; - if (offset == 0xed || offset == 0xee) - return 0x00; - } - return ROM[offset]; - } - else if (offset >= 0x200 && offset < 0x900) - { - uint8_t *ROM = m_region_maincpu->base(); - return ROM[offset - 0x100]; - } - else if (m_cartslot) - { - return m_cartslot->read_rom(offset); - } - else - return 0xff; - } -} - -void gb_state::gb_bank_w(offs_t offset, uint8_t data) -{ - if (m_cartslot) - m_cartslot->write_bank(offset, data); -} - -uint8_t gb_state::gb_ram_r(offs_t offset) -{ - if (m_cartslot) - return m_cartslot->read_ram(offset); - else - return 0xff; -} - -void gb_state::gb_ram_w(offs_t offset, uint8_t data) -{ - if (m_cartslot) - m_cartslot->write_ram(offset, data); -} - -uint8_t gb_state::gb_echo_r(address_space &space, offs_t offset) -{ - return space.read_byte(0xc000 + offset); -} - -void gb_state::gb_echo_w(address_space &space, offs_t offset, uint8_t data) -{ - return space.write_byte(0xc000 + offset, data); -} - -uint8_t megaduck_state::cart_r(offs_t offset) -{ - if (m_cartslot) - return m_cartslot->read_rom(offset); - else - return 0xff; -} - -void megaduck_state::bank1_w(offs_t offset, uint8_t data) -{ - if (m_cartslot) - m_cartslot->write_bank(offset, data); -} - -void megaduck_state::bank2_w(offs_t offset, uint8_t data) -{ - if (m_cartslot) - m_cartslot->write_ram(offset, data); /* used for bankswitch, but we re-use GB name */ + return ROM[offset]; } void gb_state::gameboy_map(address_map &map) { map.unmap_value_high(); - map(0x0000, 0x7fff).rw(FUNC(gb_state::gb_cart_r), FUNC(gb_state::gb_bank_w)); - map(0x8000, 0x9fff).rw(m_ppu, FUNC(dmg_ppu_device::vram_r), FUNC(dmg_ppu_device::vram_w)); /* 8k VRAM */ - map(0xa000, 0xbfff).rw(FUNC(gb_state::gb_ram_r), FUNC(gb_state::gb_ram_w)); /* 8k switched RAM bank (cartridge) */ - map(0xc000, 0xdfff).ram(); /* 8k low RAM */ - map(0xe000, 0xfdff).rw(FUNC(gb_state::gb_echo_r), FUNC(gb_state::gb_echo_w)); - map(0xfe00, 0xfeff).rw(m_ppu, FUNC(dmg_ppu_device::oam_r), FUNC(dmg_ppu_device::oam_w)); /* OAM RAM */ - map(0xff00, 0xff0f).rw(FUNC(gb_state::gb_io_r), FUNC(gb_state::gb_io_w)); /* I/O */ - map(0xff10, 0xff26).rw(m_apu, FUNC(gameboy_sound_device::sound_r), FUNC(gameboy_sound_device::sound_w)); /* sound registers */ - map(0xff27, 0xff2f).noprw(); /* unused */ - map(0xff30, 0xff3f).rw(m_apu, FUNC(gameboy_sound_device::wave_r), FUNC(gameboy_sound_device::wave_w)); /* Wave ram */ - map(0xff40, 0xff7f).r(m_ppu, FUNC(dmg_ppu_device::video_r)).w(FUNC(gb_state::gb_io2_w)); /* Video controller & BIOS flip-flop */ - map(0xff80, 0xfffe).ram(); /* High RAM */ - map(0xffff, 0xffff).rw(FUNC(gb_state::gb_ie_r), FUNC(gb_state::gb_ie_w)); /* Interrupt enable register */ + map(0x0000, 0x7fff).view(m_cart_low); + m_cart_low[BIOS_ENABLED | NO_CART](0x0000, 0x7fff).noprw(); + m_cart_low[BIOS_ENABLED | NO_CART](0x0000, 0x00ff).r(FUNC(gb_state::gb_bios_r)); + m_cart_low[BIOS_ENABLED | CART_PRESENT](0x0000, 0x7fff).rw(m_cartslot, FUNC(gb_cart_slot_device::read_rom), FUNC(gb_cart_slot_device::write_bank)); + m_cart_low[BIOS_ENABLED | CART_PRESENT](0x0000, 0x00ff).r(FUNC(gb_state::gb_bios_r)); + m_cart_low[BIOS_DISABLED | NO_CART](0x0000, 0x7fff).noprw(); + m_cart_low[BIOS_DISABLED | CART_PRESENT](0x0000, 0x7fff).rw(m_cartslot, FUNC(gb_cart_slot_device::read_rom), FUNC(gb_cart_slot_device::write_bank)); + map(0x8000, 0x9fff).rw(m_ppu, FUNC(dmg_ppu_device::vram_r), FUNC(dmg_ppu_device::vram_w)); + map(0xa000, 0xbfff).view(m_cart_high); + m_cart_high[NO_CART](0xa000, 0xbfff).noprw(); + m_cart_high[CART_PRESENT](0xa000, 0xbfff).rw(m_cartslot, FUNC(gb_cart_slot_device::read_ram), FUNC(gb_cart_slot_device::write_ram)); + map(0xc000, 0xdfff).mirror(0x2000).ram(); + map(0xfe00, 0xfeff).rw(m_ppu, FUNC(dmg_ppu_device::oam_r), FUNC(dmg_ppu_device::oam_w)); + map(0xff00, 0xff0f).rw(FUNC(gb_state::gb_io_r), FUNC(gb_state::gb_io_w)); + map(0xff10, 0xff26).rw(m_apu, FUNC(gameboy_sound_device::sound_r), FUNC(gameboy_sound_device::sound_w)); + map(0xff27, 0xff2f).noprw(); + map(0xff30, 0xff3f).rw(m_apu, FUNC(gameboy_sound_device::wave_r), FUNC(gameboy_sound_device::wave_w)); + map(0xff40, 0xff7f).r(m_ppu, FUNC(dmg_ppu_device::video_r)).w(FUNC(gb_state::gb_io2_w)); + map(0xff80, 0xfffe).ram(); + map(0xffff, 0xffff).rw(FUNC(gb_state::gb_ie_r), FUNC(gb_state::gb_ie_w)); } void gb_state::sgb_map(address_map &map) { map.unmap_value_high(); - map(0x0000, 0x7fff).rw(FUNC(gb_state::gb_cart_r), FUNC(gb_state::gb_bank_w)); - map(0x8000, 0x9fff).rw(m_ppu, FUNC(sgb_ppu_device::vram_r), FUNC(sgb_ppu_device::vram_w)); /* 8k VRAM */ - map(0xa000, 0xbfff).rw(FUNC(gb_state::gb_ram_r), FUNC(gb_state::gb_ram_w)); /* 8k switched RAM bank (cartridge) */ - map(0xc000, 0xdfff).ram(); /* 8k low RAM */ - map(0xe000, 0xfdff).rw(FUNC(gb_state::gb_echo_r), FUNC(gb_state::gb_echo_w)); - map(0xfe00, 0xfeff).rw(m_ppu, FUNC(sgb_ppu_device::oam_r), FUNC(sgb_ppu_device::oam_w)); /* OAM RAM */ - map(0xff00, 0xff0f).rw(FUNC(gb_state::gb_io_r), FUNC(gb_state::sgb_io_w)); /* I/O */ - map(0xff10, 0xff26).rw(m_apu, FUNC(gameboy_sound_device::sound_r), FUNC(gameboy_sound_device::sound_w)); /* sound registers */ - map(0xff27, 0xff2f).noprw(); /* unused */ - map(0xff30, 0xff3f).rw(m_apu, FUNC(gameboy_sound_device::wave_r), FUNC(gameboy_sound_device::wave_w)); /* Wave RAM */ - map(0xff40, 0xff7f).r(m_ppu, FUNC(sgb_ppu_device::video_r)).w(FUNC(gb_state::gb_io2_w)); /* Video controller & BIOS flip-flop */ - map(0xff80, 0xfffe).ram(); /* High RAM */ - map(0xffff, 0xffff).rw(FUNC(gb_state::gb_ie_r), FUNC(gb_state::gb_ie_w)); /* Interrupt enable register */ + map(0x0000, 0x7fff).view(m_cart_low); + m_cart_low[BIOS_ENABLED | NO_CART](0x0000, 0x7fff).noprw(); + m_cart_low[BIOS_ENABLED | NO_CART](0x0000, 0x00ff).r(FUNC(gb_state::gb_bios_r)); + m_cart_low[BIOS_ENABLED | CART_PRESENT](0x0000, 0x7fff).rw(m_cartslot, FUNC(gb_cart_slot_device::read_rom), FUNC(gb_cart_slot_device::write_bank)); + m_cart_low[BIOS_ENABLED | CART_PRESENT](0x0000, 0x00ff).r(FUNC(gb_state::gb_bios_r)); + m_cart_low[BIOS_DISABLED | NO_CART](0x0000, 0x7fff).noprw(); + m_cart_low[BIOS_DISABLED | CART_PRESENT](0x0000, 0x7fff).rw(m_cartslot, FUNC(gb_cart_slot_device::read_rom), FUNC(gb_cart_slot_device::write_bank)); + map(0x8000, 0x9fff).rw(m_ppu, FUNC(sgb_ppu_device::vram_r), FUNC(sgb_ppu_device::vram_w)); + map(0xa000, 0xbfff).view(m_cart_high); + m_cart_high[NO_CART](0xa000, 0xbfff).noprw(); + m_cart_high[CART_PRESENT](0xa000, 0xbfff).rw(m_cartslot, FUNC(gb_cart_slot_device::read_ram), FUNC(gb_cart_slot_device::write_ram)); + map(0xc000, 0xdfff).mirror(0x2000).ram(); + map(0xfe00, 0xfeff).rw(m_ppu, FUNC(sgb_ppu_device::oam_r), FUNC(sgb_ppu_device::oam_w)); + map(0xff00, 0xff0f).rw(FUNC(gb_state::gb_io_r), FUNC(gb_state::sgb_io_w)); + map(0xff10, 0xff26).rw(m_apu, FUNC(gameboy_sound_device::sound_r), FUNC(gameboy_sound_device::sound_w)); + map(0xff27, 0xff2f).noprw(); + map(0xff30, 0xff3f).rw(m_apu, FUNC(gameboy_sound_device::wave_r), FUNC(gameboy_sound_device::wave_w)); + map(0xff40, 0xff7f).r(m_ppu, FUNC(sgb_ppu_device::video_r)).w(FUNC(gb_state::gb_io2_w)); + map(0xff80, 0xfffe).ram(); + map(0xffff, 0xffff).rw(FUNC(gb_state::gb_ie_r), FUNC(gb_state::gb_ie_w)); } void gb_state::gbc_map(address_map &map) { map.unmap_value_high(); - map(0x0000, 0x7fff).rw(FUNC(gb_state::gbc_cart_r), FUNC(gb_state::gb_bank_w)); - map(0x8000, 0x9fff).rw(m_ppu, FUNC(cgb_ppu_device::vram_r), FUNC(cgb_ppu_device::vram_w)); /* 8k banked VRAM */ - map(0xa000, 0xbfff).rw(FUNC(gb_state::gb_ram_r), FUNC(gb_state::gb_ram_w)); /* 8k switched RAM bank (cartridge) */ - map(0xc000, 0xcfff).ram(); /* 4k fixed RAM bank */ - map(0xd000, 0xdfff).bankrw("cgb_ram"); /* 4k switched RAM bank */ - map(0xe000, 0xfdff).rw(FUNC(gb_state::gb_echo_r), FUNC(gb_state::gb_echo_w)); - map(0xfe00, 0xfeff).rw(m_ppu, FUNC(cgb_ppu_device::oam_r), FUNC(cgb_ppu_device::oam_w)); /* OAM RAM */ - map(0xff00, 0xff0f).rw(FUNC(gb_state::gb_io_r), FUNC(gb_state::gbc_io_w)); /* I/O */ - map(0xff10, 0xff26).rw(m_apu, FUNC(gameboy_sound_device::sound_r), FUNC(gameboy_sound_device::sound_w)); /* sound controller */ - map(0xff27, 0xff2f).noprw(); /* unused */ - map(0xff30, 0xff3f).rw(m_apu, FUNC(gameboy_sound_device::wave_r), FUNC(gameboy_sound_device::wave_w)); /* Wave RAM */ - map(0xff40, 0xff7f).rw(FUNC(gb_state::gbc_io2_r), FUNC(gb_state::gbc_io2_w)); /* Other I/O and video controller */ - map(0xff80, 0xfffe).ram(); /* high RAM */ - map(0xffff, 0xffff).rw(FUNC(gb_state::gb_ie_r), FUNC(gb_state::gb_ie_w)); /* Interrupt enable register */ + map(0x0000, 0x7fff).view(m_cart_low); + m_cart_low[BIOS_ENABLED | NO_CART](0x0000, 0x7fff).noprw(); + m_cart_low[BIOS_ENABLED | NO_CART](0x0000, 0x00ff).r(FUNC(gb_state::gb_bios_r)); + m_cart_low[BIOS_ENABLED | NO_CART](0x0200, 0x08ff).rom().region("maincpu", 0x0100); + m_cart_low[BIOS_ENABLED | CART_PRESENT](0x0000, 0x7fff).rw(m_cartslot, FUNC(gb_cart_slot_device::read_rom), FUNC(gb_cart_slot_device::write_bank)); + m_cart_low[BIOS_ENABLED | CART_PRESENT](0x0000, 0x00ff).r(FUNC(gb_state::gb_bios_r)); + m_cart_low[BIOS_ENABLED | CART_PRESENT](0x0200, 0x08ff).rom().region("maincpu", 0x0100); + m_cart_low[BIOS_DISABLED | NO_CART](0x0000, 0x7fff).noprw(); + m_cart_low[BIOS_DISABLED | CART_PRESENT](0x0000, 0x7fff).rw(m_cartslot, FUNC(gb_cart_slot_device::read_rom), FUNC(gb_cart_slot_device::write_bank)); + map(0x8000, 0x9fff).rw(m_ppu, FUNC(cgb_ppu_device::vram_r), FUNC(cgb_ppu_device::vram_w)); + map(0xa000, 0xbfff).view(m_cart_high); + m_cart_high[NO_CART](0xa000, 0xbfff).noprw(); + m_cart_high[CART_PRESENT](0xa000, 0xbfff).rw(m_cartslot, FUNC(gb_cart_slot_device::read_ram), FUNC(gb_cart_slot_device::write_ram)); + map(0xc000, 0xcfff).mirror(0x2000).ram(); + map(0xd000, 0xdfff).mirror(0x2000).bankrw("cgb_ram"); + map(0xfe00, 0xfeff).rw(m_ppu, FUNC(cgb_ppu_device::oam_r), FUNC(cgb_ppu_device::oam_w)); + map(0xff00, 0xff0f).rw(FUNC(gb_state::gb_io_r), FUNC(gb_state::gbc_io_w)); + map(0xff10, 0xff26).rw(m_apu, FUNC(gameboy_sound_device::sound_r), FUNC(gameboy_sound_device::sound_w)); + map(0xff27, 0xff2f).noprw(); + map(0xff30, 0xff3f).rw(m_apu, FUNC(gameboy_sound_device::wave_r), FUNC(gameboy_sound_device::wave_w)); + map(0xff40, 0xff7f).rw(FUNC(gb_state::gbc_io2_r), FUNC(gb_state::gbc_io2_w)); + map(0xff80, 0xfffe).ram(); + map(0xffff, 0xffff).rw(FUNC(gb_state::gb_ie_r), FUNC(gb_state::gb_ie_w)); } void megaduck_state::megaduck_map(address_map &map) { map.unmap_value_high(); - map(0x0000, 0x7fff).rw(FUNC(megaduck_state::cart_r), FUNC(megaduck_state::bank1_w)); - map(0x8000, 0x9fff).rw(m_ppu, FUNC(dmg_ppu_device::vram_r), FUNC(dmg_ppu_device::vram_w)); /* 8k VRAM */ - map(0xa000, 0xafff).noprw(); /* unused? */ - map(0xb000, 0xb000).w(FUNC(megaduck_state::bank2_w)); - map(0xb001, 0xbfff).noprw(); /* unused? */ - map(0xc000, 0xfdff).ram(); /* 8k/16k? RAM */ - map(0xfe00, 0xfeff).rw(m_ppu, FUNC(dmg_ppu_device::oam_r), FUNC(dmg_ppu_device::oam_w)); /* OAM RAM */ - map(0xff00, 0xff0f).rw(FUNC(megaduck_state::gb_io_r), FUNC(megaduck_state::gb_io_w)); /* I/O */ - map(0xff10, 0xff1f).rw(FUNC(megaduck_state::megaduck_video_r), FUNC(megaduck_state::megaduck_video_w)); /* video controller */ - map(0xff20, 0xff2f).rw(FUNC(megaduck_state::megaduck_sound_r1), FUNC(megaduck_state::megaduck_sound_w1)); /* sound controller pt1 */ - map(0xff30, 0xff3f).rw(m_apu, FUNC(gameboy_sound_device::wave_r), FUNC(gameboy_sound_device::wave_w)); /* wave ram */ - map(0xff40, 0xff46).rw(FUNC(megaduck_state::megaduck_sound_r2), FUNC(megaduck_state::megaduck_sound_w2)); /* sound controller pt2 */ - map(0xff47, 0xff7f).noprw(); /* unused */ - map(0xff80, 0xfffe).ram(); /* high RAM */ - map(0xffff, 0xffff).rw(FUNC(megaduck_state::gb_ie_r), FUNC(megaduck_state::gb_ie_w)); /* interrupt enable register */ + map(0x0000, 0x7fff).view(m_cart_low); + m_cart_low[BIOS_ENABLED | NO_CART](0x0000, 0x7fff).noprw(); + m_cart_low[BIOS_ENABLED | CART_PRESENT](0x0000, 0x7fff).rw(m_cartslot, FUNC(gb_cart_slot_device::read_rom), FUNC(gb_cart_slot_device::write_bank)); + m_cart_low[BIOS_DISABLED | NO_CART](0x0000, 0x7fff).noprw(); + m_cart_low[BIOS_DISABLED | CART_PRESENT](0x0000, 0x7fff).rw(m_cartslot, FUNC(gb_cart_slot_device::read_rom), FUNC(gb_cart_slot_device::write_bank)); + map(0x8000, 0x9fff).rw(m_ppu, FUNC(dmg_ppu_device::vram_r), FUNC(dmg_ppu_device::vram_w)); + map(0xa000, 0xafff).noprw(); // unused? + map(0xb000, 0xb000).view(m_cart_high); + m_cart_high[NO_CART](0xb000, 0xb000).noprw(); + m_cart_high[CART_PRESENT](0xb000, 0xb000).w(m_cartslot, FUNC(gb_cart_slot_device::write_ram)); // used for bankswitch + map(0xb001, 0xbfff).noprw(); // unused? + map(0xc000, 0xfdff).ram(); // 8k or 16k? ram + map(0xfe00, 0xfeff).rw(m_ppu, FUNC(dmg_ppu_device::oam_r), FUNC(dmg_ppu_device::oam_w)); + map(0xff00, 0xff0f).rw(FUNC(megaduck_state::gb_io_r), FUNC(megaduck_state::gb_io_w)); + map(0xff10, 0xff1f).rw(FUNC(megaduck_state::megaduck_video_r), FUNC(megaduck_state::megaduck_video_w)); + map(0xff20, 0xff2f).rw(FUNC(megaduck_state::megaduck_sound_r1), FUNC(megaduck_state::megaduck_sound_w1)); + map(0xff30, 0xff3f).rw(m_apu, FUNC(gameboy_sound_device::wave_r), FUNC(gameboy_sound_device::wave_w)); + map(0xff40, 0xff46).rw(FUNC(megaduck_state::megaduck_sound_r2), FUNC(megaduck_state::megaduck_sound_w2)); + map(0xff47, 0xff7f).noprw(); + map(0xff80, 0xfffe).ram(); + map(0xffff, 0xffff).rw(FUNC(megaduck_state::gb_ie_r), FUNC(megaduck_state::gb_ie_w)); } diff --git a/src/mame/includes/gb.h b/src/mame/includes/gb.h index 6bde090e813..b90867d5c7f 100644 --- a/src/mame/includes/gb.h +++ b/src/mame/includes/gb.h @@ -32,7 +32,9 @@ public: m_bios_hack(*this, "SKIP_CHECK"), m_ram(*this, RAM_TAG), m_ppu(*this, "ppu"), - m_palette(*this, "palette") + m_palette(*this, "palette"), + m_cart_low(*this, "cartlow"), + m_cart_high(*this, "carthigh") { } uint8_t m_gb_io[0x10]; @@ -63,8 +65,6 @@ public: uint8_t *m_gbc_rammap[8]; /* (CGB) Addresses of internal RAM banks */ uint8_t m_gbc_rambank; /* (CGB) Current CGB RAM bank */ - bool m_bios_disable; - void gb_io_w(offs_t offset, uint8_t data); void gb_io2_w(offs_t offset, uint8_t data); void sgb_io_w(offs_t offset, uint8_t data); @@ -84,13 +84,7 @@ public: void gbc_palette(palette_device &palette) const; void gb_timer_callback(uint8_t data); - uint8_t gb_cart_r(offs_t offset); - uint8_t gbc_cart_r(offs_t offset); - void gb_bank_w(offs_t offset, uint8_t data); - uint8_t gb_ram_r(offs_t offset); - void gb_ram_w(offs_t offset, uint8_t data); - uint8_t gb_echo_r(address_space &space, offs_t offset); - void gb_echo_w(address_space &space, offs_t offset, uint8_t data); + uint8_t gb_bios_r(offs_t offset); optional_device m_cartslot; void supergb(machine_config &config); @@ -108,6 +102,10 @@ protected: SIO_FAST_CLOCK = 0x02, SIO_INTERNAL_CLOCK = 0x01 }; + static constexpr u8 NO_CART = 0x00; + static constexpr u8 BIOS_ENABLED = 0x00; + static constexpr u8 CART_PRESENT = 0x01; + static constexpr u8 BIOS_DISABLED = 0x02; required_device m_maincpu; required_device m_apu; @@ -118,6 +116,8 @@ protected: optional_device m_ram; required_device m_ppu; required_device m_palette; + memory_view m_cart_low; + memory_view m_cart_high; void gb_timer_increment(); void gb_timer_check_irq(); @@ -158,9 +158,6 @@ private: void megaduck_palette(palette_device &palette) const; void megaduck_map(address_map &map); - uint8_t cart_r(offs_t offset); - void bank1_w(offs_t offset, uint8_t data); - void bank2_w(offs_t offset, uint8_t data); required_device m_cartslot; }; diff --git a/src/mame/machine/gb.cpp b/src/mame/machine/gb.cpp index 4c742715d0c..c40618ff43d 100644 --- a/src/mame/machine/gb.cpp +++ b/src/mame/machine/gb.cpp @@ -114,7 +114,6 @@ void gb_state::save_gb_base() save_item(NAME(m_triggering_irq)); save_item(NAME(m_reloading)); save_item(NAME(m_sio_count)); - save_item(NAME(m_bios_disable)); if (m_cartslot) m_cartslot->save_ram(); } @@ -195,31 +194,25 @@ void gb_state::machine_reset() { gb_init(); - // Enable BIOS ROM - m_bios_disable = false; + m_cart_low.select(BIOS_ENABLED | (m_cartslot ? CART_PRESENT : NO_CART)); + m_cart_high.select(m_cartslot ? CART_PRESENT : NO_CART); } MACHINE_RESET_MEMBER(gb_state,gbc) { - gb_init(); + gb_state::machine_reset(); gb_init_regs(); - /* Enable BIOS rom */ - m_bios_disable = false; - for (auto & elem : m_gbc_rammap) memset(elem, 0, 0x1000); } MACHINE_RESET_MEMBER(gb_state,sgb) { - gb_init(); + gb_state::machine_reset(); gb_init_regs(); - - /* Enable BIOS rom */ - m_bios_disable = false; } @@ -310,7 +303,7 @@ void gb_state::gb_io2_w(offs_t offset, uint8_t data) if (offset == 0x10) { /* disable BIOS ROM */ - m_bios_disable = true; + m_cart_low.select(BIOS_DISABLED | (m_cartslot ? CART_PRESENT : NO_CART)); } else m_ppu->video_w(offset, data); @@ -625,7 +618,7 @@ void gb_state::gbc_io2_w(offs_t offset, uint8_t data) m_maincpu->set_speed(data); return; case 0x10: /* BFF - Bios disable */ - m_bios_disable = true; + m_cart_low.select(BIOS_DISABLED | (m_cartslot ? CART_PRESENT : NO_CART)); return; case 0x16: /* RP - Infrared port */ break; @@ -670,10 +663,10 @@ void megaduck_state::machine_start() void megaduck_state::machine_reset() { - // We may have to add some more stuff here, if not then it can be merged back into gb - gb_state::machine_reset(); + gb_init(); - m_bios_disable = true; + m_cart_low.select((m_cartslot ? CART_PRESENT : NO_CART)); + m_cart_high.select(m_cartslot ? CART_PRESENT : NO_CART); } /*