From e5268aa7216bdb86c4b62c4e3975b48f41c158ad Mon Sep 17 00:00:00 2001 From: arbee Date: Wed, 12 Sep 2018 23:50:19 -0400 Subject: [PATCH] cgthree: allow system to program palette (nw) --- src/devices/bus/sbus/cgthree.cpp | 26 ++++++++++++++++++++++++-- src/devices/bus/sbus/cgthree.h | 1 + 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/src/devices/bus/sbus/cgthree.cpp b/src/devices/bus/sbus/cgthree.cpp index 5ce50cbd9a4..2dc0dbe5b6c 100644 --- a/src/devices/bus/sbus/cgthree.cpp +++ b/src/devices/bus/sbus/cgthree.cpp @@ -55,6 +55,7 @@ void sbus_cgthree_device::device_start() { m_vram = std::make_unique(0x100000/4); m_vram2 = std::make_unique(0x100000/4); + entry = r = g = b = step = 0; } void sbus_cgthree_device::install_device() @@ -98,7 +99,28 @@ READ32_MEMBER(sbus_cgthree_device::unknown_r) WRITE32_MEMBER(sbus_cgthree_device::unknown_w) { - logerror("%s: unknown_w: %08x = %08x & %08x\n", machine().describe_context(), offset << 2, data, mem_mask); + if (offset == 0x100000) + { + entry = data >> 24; + step = 0; + } + else if (offset == 0x100001) + { + switch (step) + { + case 0: r = data>>24; step++; break; + case 1: g = data>>24; step++; break; + case 2: + b = data>>24; + m_palette->set_pen_color(entry, rgb_t(r, g, b)); + step = 0; + break; + } + } + else + { + logerror("%s: unknown_w: %08x = %08x & %08x\n", machine().describe_context(), offset << 2, data, mem_mask); + } } READ8_MEMBER(sbus_cgthree_device::regs_r) @@ -135,4 +157,4 @@ READ32_MEMBER(sbus_cgthree_device::vram2_r) WRITE32_MEMBER(sbus_cgthree_device::vram2_w) { COMBINE_DATA(&m_vram2[offset]); -} \ No newline at end of file +} diff --git a/src/devices/bus/sbus/cgthree.h b/src/devices/bus/sbus/cgthree.h index 25fb48bb711..32b4eee6e8c 100644 --- a/src/devices/bus/sbus/cgthree.h +++ b/src/devices/bus/sbus/cgthree.h @@ -51,6 +51,7 @@ private: std::unique_ptr m_vram2; // ??? required_device m_screen; required_device m_palette; + int entry, r, g, b, step; }; // device type definition