bus/nes: Fixed bugs in Game Star type "A" boards. (#8425)

- Corrects certain games not loading or loading with corrupt graphics in different multicarts.
This commit is contained in:
0kmg 2021-08-11 12:53:07 -08:00 committed by GitHub
parent 1a01c98fa2
commit 2d412c74d2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 28 additions and 32 deletions

View File

@ -79799,7 +79799,7 @@ be better to redump them properly. -->
</part>
</software>
<software name="mc_6gs1" supported="partial">
<software name="mc_6gs1">
<description>6 in 1 (GK-L01A)</description>
<year>19??</year>
<publisher>Game Star</publisher>
@ -79821,7 +79821,7 @@ be better to redump them properly. -->
</part>
</software>
<software name="mc_6gs2" supported="partial">
<software name="mc_6gs2">
<description>6 in 1 (SuperGK-L02A)</description>
<year>19??</year>
<publisher>Game Star?</publisher>
@ -80013,13 +80013,13 @@ be better to redump them properly. -->
</part>
</software>
<!-- This has at least seven 16K NROM games. Perhaps there's a menu in the last 16K bank or it's meant to be reset based? -->
<software name="mc_68" supported="no">
<description>68 in 1</description>
<year>19??</year>
<publisher>&lt;unknown&gt;</publisher>
<part name="cart" interface="nes_cart">
<feature name="slot" value="bmc_gka" />
<feature name="pcb" value="BMC-GKA" /> <!-- Mapper 57? -->
<feature name="slot" value="bmc_gka" /> <!-- FIXME: wrong board! -->
<dataarea name="chr" size="65536">
<rom name="68-in-1 (1-f1 race meq &amp; 68-maross dli).chr" size="65536" crc="26c744ee" sha1="01af2b2fe5ba33b2de26e6b4fea6f40eddeda3fc" offset="00000" status="baddump" />
</dataarea>

View File

@ -182,8 +182,8 @@ nes_bmc_gb63_device::nes_bmc_gb63_device(const machine_config &mconfig, const ch
{
}
nes_bmc_gka_device::nes_bmc_gka_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: nes_nrom_device(mconfig, NES_BMC_GKA, tag, owner, clock), m_latch1(0), m_latch2(0)
nes_bmc_gka_device::nes_bmc_gka_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
: nes_nrom_device(mconfig, NES_BMC_GKA, tag, owner, clock)
{
}
@ -661,19 +661,16 @@ void nes_bmc_gb63_device::pcb_reset()
void nes_bmc_gka_device::device_start()
{
common_start();
save_item(NAME(m_latch1));
save_item(NAME(m_latch2));
save_item(NAME(m_reg));
}
void nes_bmc_gka_device::pcb_reset()
{
m_chr_source = m_vrom_chunks ? CHRROM : CHRRAM;
prg16_89ab(0);
prg16_cdef(0);
chr8(0, m_chr_source);
chr8(0, CHRROM);
m_latch1 = 0;
m_latch2 = 0;
m_reg[0] = m_reg[1] = 0;
}
void nes_bmc_gkb_device::device_start()
@ -1772,33 +1769,31 @@ uint8_t nes_bmc_gb63_device::read_h(offs_t offset)
iNES: mapper 57
In MESS: Supported.
In MAME: Supported.
-------------------------------------------------*/
void nes_bmc_gka_device::write_h(offs_t offset, uint8_t data)
u8 nes_bmc_gka_device::read_m(offs_t offset)
{
LOG_MMC(("bmc_gka read_m, offset: %04x\n", offset));
return 0; // TODO: menus differ by jumper/DIP settings readable at 0x6000.
}
void nes_bmc_gka_device::write_h(offs_t offset, u8 data)
{
LOG_MMC(("bmc_gka write_h, offset: %04x, data: %02x\n", offset, data));
if (offset & 0x0800)
m_latch2 = data;
else
m_latch1 = data;
m_reg[BIT(offset, 11)] = data;
if (m_latch2 & 0x80)
prg32(2 | (m_latch2 >> 6));
else
{
prg16_89ab((m_latch2 >> 5) & 0x03);
prg16_cdef((m_latch2 >> 5) & 0x03);
}
u8 bank = m_reg[1] >> 5;
u8 mode = BIT(m_reg[1], 4);
prg16_89ab(bank & ~mode);
prg16_cdef(bank | mode);
set_nt_mirroring((m_latch2 & 0x08) ? PPU_MIRROR_HORZ : PPU_MIRROR_VERT);
chr8((m_latch1 & 0x03) | (m_latch2 & 0x07) | ((m_latch2 & 0x10) >> 1), CHRROM);
chr8((m_reg[0] & 0x40) >> 3 | (m_reg[1] & 0x04) | (m_reg[BIT(m_reg[0], 7)] & 0x03), CHRROM);
set_nt_mirroring(BIT(m_reg[1], 3) ? PPU_MIRROR_HORZ : PPU_MIRROR_VERT);
}
/*-------------------------------------------------
Board BMC-GKB

View File

@ -396,9 +396,10 @@ class nes_bmc_gka_device : public nes_nrom_device
{
public:
// construction/destruction
nes_bmc_gka_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
nes_bmc_gka_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
virtual void write_h(offs_t offset, uint8_t data) override;
virtual u8 read_m(offs_t offset) override;
virtual void write_h(offs_t offset, u8 data) override;
virtual void pcb_reset() override;
@ -407,7 +408,7 @@ protected:
virtual void device_start() override;
private:
uint8_t m_latch1, m_latch2;
u8 m_reg[2];
};