jaleco/ms1_gatearray.cpp: Cleaned up code. (#11663)

This commit is contained in:
mamehaze 2023-10-26 23:11:04 +01:00 committed by GitHub
parent de955af966
commit 7e572705cc
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 49 additions and 53 deletions

View File

@ -21,7 +21,6 @@ megasys1_gatearray_device::megasys1_gatearray_device(
, m_cpu(*this, finder_base::DUMMY_TAG)
, m_cpuregion(*this, finder_base::DUMMY_TAG)
{
m_has_decoded = false;
}
@ -30,7 +29,7 @@ void megasys1_gatearray_device::device_start()
save_item(NAME(m_gatearray_hs));
save_item(NAME(m_gatearray_hs_ram));
rom_decode();
install_gatearray_overlay();
install_overlay();
}
void megasys1_gatearray_device::device_reset()
@ -47,18 +46,18 @@ void megasys1_gatearray_d65006_device::rom_decode()
for (int i = 0 ; i < size/2 ; i++)
{
const u16 x = RAM[i];
auto const BITSWAP_0 = [x] () { return bitswap<16>(x,0xd,0xe,0xf,0x0,0x1,0x8,0x9,0xa,0xb,0xc,0x5,0x6,0x7,0x2,0x3,0x4); };
auto const BITSWAP_1 = [x] () { return bitswap<16>(x,0xf,0xd,0xb,0x9,0x7,0x5,0x3,0x1,0xe,0xc,0xa,0x8,0x6,0x4,0x2,0x0); };
auto const BITSWAP_2 = [x] () { return bitswap<16>(x,0x0,0x1,0x2,0x3,0x4,0x5,0x6,0x7,0xb,0xa,0x9,0x8,0xf,0xe,0xd,0xc); };
u16 y;
u16 x = RAM[i];
auto const BITSWAP_0 = [] (u16 x) { return bitswap<16>(x,0xd,0xe,0xf,0x0,0x1,0x8,0x9,0xa,0xb,0xc,0x5,0x6,0x7,0x2,0x3,0x4); };
auto const BITSWAP_1 = [] (u16 x) { return bitswap<16>(x,0xf,0xd,0xb,0x9,0x7,0x5,0x3,0x1,0xe,0xc,0xa,0x8,0x6,0x4,0x2,0x0); };
auto const BITSWAP_2 = [] (u16 x) { return bitswap<16>(x,0x0,0x1,0x2,0x3,0x4,0x5,0x6,0x7,0xb,0xa,0x9,0x8,0xf,0xe,0xd,0xc); };
if (i < 0x08000/2) { if ( (i | (0x248/2)) != i ) {y = BITSWAP_0(x);} else {y = BITSWAP_1(x);} }
else if (i < 0x10000/2) { y = BITSWAP_2(x); }
else if (i < 0x18000/2) { if ( (i | (0x248/2)) != i ) {y = BITSWAP_0(x);} else {y = BITSWAP_1(x);} }
else if (i < 0x20000/2) { y = BITSWAP_1(x); }
else { y = BITSWAP_2(x); }
if (i < 0x08000/2) { y = ( (i | (0x248/2)) != i ) ? BITSWAP_0() : BITSWAP_1(); }
else if (i < 0x10000/2) { y = BITSWAP_2(); }
else if (i < 0x18000/2) { y = ( (i | (0x248/2)) != i ) ? BITSWAP_0() : BITSWAP_1(); }
else if (i < 0x20000/2) { y = BITSWAP_1(); }
else { y = BITSWAP_2(); }
RAM[i] = y;
}
@ -73,18 +72,18 @@ void megasys1_gatearray_gs88000_device::rom_decode()
for (int i = 0 ; i < size/2 ; i++)
{
const u16 x = RAM[i];
auto const BITSWAP_0 = [x] () { return bitswap<16>(x,0xd,0xe,0xf,0x0,0xa,0x9,0x8,0x1,0x6,0x5,0xc,0xb,0x7,0x2,0x3,0x4); };
auto const BITSWAP_1 = [x] () { return bitswap<16>(x,0xf,0xd,0xb,0x9,0x7,0x5,0x3,0x1,0x8,0xa,0xc,0xe,0x0,0x2,0x4,0x6); };
auto const BITSWAP_2 = [x] () { return bitswap<16>(x,0x4,0x5,0x6,0x7,0x0,0x1,0x2,0x3,0xb,0xa,0x9,0x8,0xf,0xe,0xd,0xc); };
u16 y;
u16 x = RAM[i];
auto const BITSWAP_0 = [] (u16 x) { return bitswap<16>(x,0xd,0xe,0xf,0x0,0xa,0x9,0x8,0x1,0x6,0x5,0xc,0xb,0x7,0x2,0x3,0x4); };
auto const BITSWAP_1 = [] (u16 x) { return bitswap<16>(x,0xf,0xd,0xb,0x9,0x7,0x5,0x3,0x1,0x8,0xa,0xc,0xe,0x0,0x2,0x4,0x6); };
auto const BITSWAP_2 = [] (u16 x) { return bitswap<16>(x,0x4,0x5,0x6,0x7,0x0,0x1,0x2,0x3,0xb,0xa,0x9,0x8,0xf,0xe,0xd,0xc); };
if (i < 0x08000/2) { if ( (i | (0x248/2)) != i ) {y = BITSWAP_0(x);} else {y = BITSWAP_1(x);} }
else if (i < 0x10000/2) { y = BITSWAP_2(x); }
else if (i < 0x18000/2) { if ( (i | (0x248/2)) != i ) {y = BITSWAP_0(x);} else {y = BITSWAP_1(x);} }
else if (i < 0x20000/2) { y = BITSWAP_1(x); }
else { y = BITSWAP_2(x); }
if (i < 0x08000/2) { y = ( (i | (0x248/2)) != i ) ? BITSWAP_0() : BITSWAP_1(); }
else if (i < 0x10000/2) { y = BITSWAP_2(); }
else if (i < 0x18000/2) { y = ( (i | (0x248/2)) != i ) ? BITSWAP_0() : BITSWAP_1(); }
else if (i < 0x20000/2) { y = BITSWAP_1(); }
else { y = BITSWAP_2(); }
RAM[i] = y;
}
@ -98,19 +97,19 @@ void megasys1_gatearray_unkarray_device::rom_decode()
for (int i = 0 ; i < size/2 ; i++)
{
const u16 x = RAM[i];
auto const BITSWAP_0 = [x] () { return bitswap<16>(x,0xd,0x0,0xa,0x9,0x6,0xe,0xb,0xf,0x5,0xc,0x7,0x2,0x3,0x8,0x1,0x4); };
auto const BITSWAP_1 = [x] () { return bitswap<16>(x,0x4,0x5,0x6,0x7,0x0,0x1,0x2,0x3,0xb,0xa,0x9,0x8,0xf,0xe,0xd,0xc); };
auto const BITSWAP_2 = [x] () { return bitswap<16>(x,0xf,0xd,0xb,0x9,0xc,0xe,0x0,0x7,0x5,0x3,0x1,0x8,0xa,0x2,0x4,0x6); };
auto const BITSWAP_3 = [x] () { return bitswap<16>(x,0x4,0x5,0x1,0x2,0xe,0xd,0x3,0xb,0xa,0x9,0x6,0x7,0x0,0x8,0xf,0xc); };
u16 y;
u16 x = RAM[i];
auto const BITSWAP_0 = [] (u16 x) { return bitswap<16>(x,0xd,0x0,0xa,0x9,0x6,0xe,0xb,0xf,0x5,0xc,0x7,0x2,0x3,0x8,0x1,0x4); };
auto const BITSWAP_1 = [] (u16 x) { return bitswap<16>(x,0x4,0x5,0x6,0x7,0x0,0x1,0x2,0x3,0xb,0xa,0x9,0x8,0xf,0xe,0xd,0xc); };
auto const BITSWAP_2 = [] (u16 x) { return bitswap<16>(x,0xf,0xd,0xb,0x9,0xc,0xe,0x0,0x7,0x5,0x3,0x1,0x8,0xa,0x2,0x4,0x6); };
auto const BITSWAP_3 = [] (u16 x) { return bitswap<16>(x,0x4,0x5,0x1,0x2,0xe,0xd,0x3,0xb,0xa,0x9,0x6,0x7,0x0,0x8,0xf,0xc); };
if (i < 0x08000/2) { if ( (i | (0x248/2)) != i ) {y = BITSWAP_0(x);} else {y = BITSWAP_1(x);} }
else if (i < 0x10000/2) { if ( (i | (0x248/2)) != i ) {y = BITSWAP_2(x);} else {y = BITSWAP_3(x);} }
else if (i < 0x18000/2) { if ( (i | (0x248/2)) != i ) {y = BITSWAP_0(x);} else {y = BITSWAP_1(x);} }
else if (i < 0x20000/2) { y = BITSWAP_1(x); }
else { y = BITSWAP_3(x); }
if (i < 0x08000/2) { y = ( (i | (0x248/2)) != i ) ? BITSWAP_0() : BITSWAP_1(); }
else if (i < 0x10000/2) { y = ( (i | (0x248/2)) != i ) ? BITSWAP_2() : BITSWAP_3(); }
else if (i < 0x18000/2) { y = ( (i | (0x248/2)) != i ) ? BITSWAP_0() : BITSWAP_1(); }
else if (i < 0x20000/2) { y = BITSWAP_1(); }
else { y = BITSWAP_3(); }
RAM[i] = y;
}
@ -127,9 +126,14 @@ void megasys1_gatearray_unkarray_device::rom_decode()
bool megasys1_gatearray_device::gatearray_hs_seq(u16 g1,u16 g2,u16 g3,u16 g4)
inline bool megasys1_gatearray_device::hs_seq() const
{
return (m_gatearray_hs_ram[0/2] == g1 && m_gatearray_hs_ram[2/2] == g2 && m_gatearray_hs_ram[4/2] == g3 && m_gatearray_hs_ram[6/2] == g4);
return
m_gatearray_hs_ram[0/2] == m_gatearray_seq[0] &&
m_gatearray_hs_ram[2/2] == m_gatearray_seq[1] &&
m_gatearray_hs_ram[4/2] == m_gatearray_seq[2] &&
m_gatearray_hs_ram[6/2] == m_gatearray_seq[3];
}
@ -166,7 +170,7 @@ void megasys1_gatearray_device::gatearray_w(offs_t offset, u16 data, u16 mem_mas
COMBINE_DATA(&m_gatearray_hs_ram[offset]);
if (gatearray_hs_seq(m_gatearray_seq[0],m_gatearray_seq[1],m_gatearray_seq[2],m_gatearray_seq[3]) && offset == 0x8/2)
if (hs_seq() && offset == 0x8/2)
m_gatearray_hs = 1;
else
m_gatearray_hs = 0;
@ -174,7 +178,7 @@ void megasys1_gatearray_device::gatearray_w(offs_t offset, u16 data, u16 mem_mas
LOG("GATEARRAY HS W %04x (%04x) -> [%02x]\n",data,mem_mask,offset*2);
}
void megasys1_gatearray_device::install_gatearray_overlay()
void megasys1_gatearray_device::install_overlay()
{
m_cpu->space(AS_PROGRAM).install_read_handler(0x00000, 0x3ffff, read16s_delegate(*this, FUNC(megasys1_gatearray_device::gatearray_r)));
m_cpu->space(AS_PROGRAM).install_write_handler(0x20000, 0x2ffff, write16s_delegate(*this, FUNC(megasys1_gatearray_device::gatearray_w)));

View File

@ -23,21 +23,20 @@ protected:
virtual void device_start() override;
virtual void device_reset() override;
void install_gatearray_overlay();
void install_overlay();
u16 gatearray_r(offs_t offset, u16 mem_mask = ~0);
void gatearray_w(offs_t offset, u16 data, u16 mem_mask = ~0);
bool gatearray_hs_seq(u16 g1,u16 g2,u16 g3,u16 g4);
bool hs_seq() const;
virtual void rom_decode() = 0;
int m_gatearray_hs = 0;
u16 m_gatearray_hs_ram[0x8]{};
const u16* m_gatearray_seq = nullptr;
const u16 *m_gatearray_seq = nullptr;
required_device<cpu_device> m_cpu;
required_memory_region m_cpuregion;
bool m_has_decoded;
virtual void rom_decode() = 0;
};
@ -54,7 +53,6 @@ protected:
private:
// write sequence return value
static constexpr u16 jaleco_d65006_unlock_sequence[5] = { 0x0000,0x0055,0x00aa,0x00ff, 0x835d };
};
class megasys1_gatearray_gs88000_device : public megasys1_gatearray_device
@ -69,9 +67,6 @@ protected:
// write sequence return value
static constexpr u16 jaleco_gs88000_unlock_sequence[5] = { 0x00ff,0x0055,0x00aa,0x0000, 0x889e };
private:
};
class megasys1_gatearray_unkarray_device : public megasys1_gatearray_device
@ -83,9 +78,6 @@ protected:
megasys1_gatearray_unkarray_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock);
virtual void rom_decode() override;
private:
};
// device type definition