gb.cpp: Use memory views for bios disable and to remove some cartslot trampolines. (#9033)

This commit is contained in:
wilbertpol 2021-12-25 00:07:02 +00:00 committed by GitHub
parent 76152ba35e
commit 2f797626a0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 114 additions and 194 deletions

View File

@ -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));
}

View File

@ -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<gb_cart_slot_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<lr35902_cpu_device> m_maincpu;
required_device<gameboy_sound_device> m_apu;
@ -118,6 +116,8 @@ protected:
optional_device<ram_device> m_ram;
required_device<dmg_ppu_device> m_ppu;
required_device<palette_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<megaduck_cart_slot_device> m_cartslot;
};

View File

@ -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);
}
/*