summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--src/mame/drivers/laserbas.cpp27
1 files changed, 12 insertions, 15 deletions
diff --git a/src/mame/drivers/laserbas.cpp b/src/mame/drivers/laserbas.cpp
index 50f10fb297a..184de0e11a0 100644
--- a/src/mame/drivers/laserbas.cpp
+++ b/src/mame/drivers/laserbas.cpp
@@ -93,7 +93,7 @@ public:
int m_bset;
int m_scl;
bool m_flipscreen;
- uint16_t m_z1data[4];
+ uint64_t m_z1data;
void write_pit_out(int num, int state);
DECLARE_READ8_MEMBER(vram_r);
DECLARE_WRITE8_MEMBER(vram_w);
@@ -210,23 +210,20 @@ WRITE8_MEMBER(laserbas_state::videoctrl_w)
READ8_MEMBER(laserbas_state::z1_r)
{
- m_z1data[0] = m_z1data[1];
- m_z1data[1] = m_z1data[2];
- m_z1data[2] = m_z1data[3];
- m_z1data[3] = offset;
+ m_z1data = (m_z1data >> 10) | (uint64_t(offset & 0x03ff) << 30);
- auto const x = [this] (unsigned i, unsigned b) { return BIT(m_z1data[i], b); };
- auto const nx = [this] (unsigned i, unsigned b) { return BIT(~m_z1data[i], b); };
+ auto const x = [this] (unsigned b) { return BIT(m_z1data, b); };
+ auto const nx = [this] (unsigned b) { return BIT(~m_z1data, b); };
auto const MUX2 = [] (bool s, uint16_t a, uint16_t b) { return s ? a : b; };
- uint8_t const bit7 = MUX2(x(3,6) & x(3,3), x(3,1) ^ x(3,5), (nx(3,3) & (nx(2,0) | nx(3,6))) | (nx(3,6) & x(2,4)));
- uint8_t const bit6 = MUX2(x(3,6), MUX2(x(3,3), x(2,9), nx(2,3) | x(3,0)), x(3,3) & x(1,5));
- uint8_t const bit5 = MUX2(x(3,6), nx(3,3) & x(2,7), x(3,2) | x(3,3));
- uint8_t const bit4 = MUX2(x(3,6), MUX2(x(3,3), nx(2,4), nx(3,5)), MUX2(nx(3,3), x(0,4), MUX2(nx(2,6), x(0,5) & x(2,3), MUX2(x(2,3), x(1,9), nx(1,3) | x(2,0)))));
- uint8_t const bit3 = MUX2(x(3,6), x(3,3) & x(1,1), MUX2(x(3,3), x(2,5) | nx(3,1), x(2,4)));
- uint8_t const bit2 = MUX2(x(3,3), MUX2(x(3,6), x(2,8), x(2,0)), MUX2(x(3,6), nx(1,1), nx(3,9)));
- uint8_t const bit1 = MUX2(x(3,6), MUX2(x(2,3), MUX2(x(2,6), nx(1,8), nx(1,0)) | x(3,3), MUX2(x(2,6), x(0,1), x(2,9)) & nx(3,3)), MUX2(x(3,3), x(0,7), x(1,7)));
- uint8_t const bit0 = MUX2(x(3,3), MUX2(x(3,6), x(2,2), nx(2,6)), MUX2(x(3,6), x(1,4), x(2,1)));
+ uint8_t const bit7 = MUX2(x(36) & x(33), x(31) ^ x(35), (nx(33) & (nx(20) | nx(36))) | (nx(36) & x(24)));
+ uint8_t const bit6 = MUX2(x(36), MUX2(x(33), x(29), nx(23) | x(30)), x(33) & x(15));
+ uint8_t const bit5 = MUX2(x(36), nx(33) & x(27), x(32) | x(33));
+ uint8_t const bit4 = MUX2(x(36), MUX2(x(33), nx(24), nx(35)), MUX2(nx(33), x(4), MUX2(nx(26), x(5) & x(23), MUX2(x(23), x(19), nx(13) | x(20)))));
+ uint8_t const bit3 = MUX2(x(36), x(33) & x(11), MUX2(x(33), x(25) | nx(31), x(24)));
+ uint8_t const bit2 = MUX2(x(33), MUX2(x(36), x(28), x(20)), MUX2(x(36), nx(11), nx(39)));
+ uint8_t const bit1 = MUX2(x(36), MUX2(x(23), MUX2(x(26), nx(18), nx(10)) | x(33), MUX2(x(26), x(1), x(29)) & nx(33)), MUX2(x(33), x(7), x(17)));
+ uint8_t const bit0 = MUX2(x(33), MUX2(x(36), x(22), nx(26)), MUX2(x(36), x(14), x(21)));
return (bit7 << 7) | (bit6 << 6) | (bit5 << 5) | (bit4 << 4) | (bit3 << 3) | (bit2 << 2) | (bit1 << 1) | (bit0 << 0);
}