From a026c6f167bfedf810fc98f8b589d109fe591875 Mon Sep 17 00:00:00 2001 From: hap Date: Tue, 24 Nov 2020 18:40:56 +0100 Subject: odyssey2: make palette configurable --- src/mame/drivers/odyssey2.cpp | 54 ++++++++++++++++++++++++++++--------------- 1 file changed, 36 insertions(+), 18 deletions(-) diff --git a/src/mame/drivers/odyssey2.cpp b/src/mame/drivers/odyssey2.cpp index da3a27a003b..1790f3dcd26 100644 --- a/src/mame/drivers/odyssey2.cpp +++ b/src/mame/drivers/odyssey2.cpp @@ -122,11 +122,14 @@ public: m_maincpu(*this, "maincpu"), m_i8244(*this, "i8244"), m_screen(*this, "screen"), + m_palette(*this, "palette"), m_cart(*this, "cartslot"), m_keyboard(*this, "KEY.%u", 0), m_joysticks(*this, "JOY.%u", 0) { } + DECLARE_INPUT_CHANGED_MEMBER(palette_changed) { adjust_palette(); } + // Reset button is tied to 8048 RESET pin DECLARE_INPUT_CHANGED_MEMBER(reset_button) { m_maincpu->set_input_line(INPUT_LINE_RESET, newval ? ASSERT_LINE : CLEAR_LINE); } @@ -140,21 +143,15 @@ protected: required_device m_maincpu; required_device m_i8244; required_device m_screen; + required_device m_palette; required_device m_cart; - - u8 m_ram[0x80]; - u8 m_p1 = 0xff; - u8 m_p2 = 0xff; - - DECLARE_READ_LINE_MEMBER(t1_read); - - void odyssey2_io(address_map &map); - void odyssey2_mem(address_map &map); + required_ioport_array<8> m_keyboard; + required_ioport_array<2> m_joysticks; virtual void machine_start() override; + virtual void machine_reset() override; - required_ioport_array<8> m_keyboard; - required_ioport_array<2> m_joysticks; + void adjust_palette(); virtual u8 io_read(offs_t offset); virtual void io_write(offs_t offset, u8 data); @@ -162,6 +159,14 @@ protected: void p1_write(u8 data); u8 p2_read(); void p2_write(u8 data); + DECLARE_READ_LINE_MEMBER(t1_read); + + void odyssey2_io(address_map &map); + void odyssey2_mem(address_map &map); + + u8 m_ram[0x80]; + u8 m_p1 = 0xff; + u8 m_p2 = 0xff; private: u32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); @@ -214,6 +219,11 @@ void odyssey2_state::machine_start() save_item(NAME(m_p2)); } +void odyssey2_state::machine_reset() +{ + adjust_palette(); +} + void vpp_state::machine_start() { odyssey2_state::machine_start(); @@ -258,6 +268,13 @@ void odyssey2_state::odyssey2_palette(palette_device &palette) const palette.set_pen_colors(0, odyssey2_colors); } +void odyssey2_state::adjust_palette() +{ + if (ioport("CONF")->read() & 1) + m_i8244->i8244_palette(*m_palette); + else + odyssey2_palette(*m_palette); +} u32 odyssey2_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { @@ -321,6 +338,8 @@ u32 vpp_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const I/O ******************************************************************************/ +// 8048 ports + u8 odyssey2_state::io_read(offs_t offset) { u8 data = m_cart->io_read(offset); @@ -346,9 +365,6 @@ void odyssey2_state::io_write(offs_t offset, u8 data) m_i8244->write(offset, data); } - -// 8048 ports - void odyssey2_state::p1_write(u8 data) { // LUM changed @@ -587,6 +603,11 @@ static INPUT_PORTS_START( o2 ) PORT_START("RESET") PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Reset") PORT_CODE(KEYCODE_F1) PORT_CHANGED_MEMBER(DEVICE_SELF, odyssey2_state, reset_button, 0) + + PORT_START("CONF") + PORT_CONFNAME( 0x01, 0x00, "Color Output" ) PORT_CHANGED_MEMBER(DEVICE_SELF, odyssey2_state, palette_changed, 0) + PORT_CONFSETTING( 0x00, "Composite" ) + PORT_CONFSETTING( 0x01, "RGB" ) INPUT_PORTS_END static INPUT_PORTS_START( vpp ) @@ -786,7 +807,7 @@ void vpp_state::g7400(machine_config &config) m_screen->set_video_attributes(VIDEO_ALWAYS_UPDATE); m_screen->set_palette("palette"); - PALETTE(config, "palette", m_i8244, FUNC(i8244_device::i8244_palette), 16); + PALETTE(config, "palette", FUNC(odyssey2_state::odyssey2_palette), 16); I8243(config, m_i8243); m_i8243->p4_out_cb().set(FUNC(vpp_state::i8243_port_w<0>)); @@ -837,9 +858,6 @@ void vpp_state::odyssey3(machine_config &config) m_maincpu->set_clock((7.15909_MHz_XTAL * 3) / 4); - // same color encoder as O2 (no RGB port) - PALETTE(config.replace(), "palette", FUNC(odyssey2_state::odyssey2_palette), 16); - subdevice("cart_list")->set_filter("O3"); } -- cgit v1.2.3