From a51876c942ff2d92f923d7139df8fbe03a288627 Mon Sep 17 00:00:00 2001 From: hap Date: Wed, 19 Aug 2020 18:47:32 +0200 Subject: New working software list additions ----------------------------------- odyssey2: Martian Threat (Euro, Prototype, Alt) [unknown] --- hash/odyssey2.xml | 13 +++++++++++++ src/devices/cpu/mcs48/mcs48.cpp | 3 ++- src/devices/video/i8244.cpp | 6 ++---- src/mame/drivers/odyssey2.cpp | 22 ++++++++++++++++------ 4 files changed, 33 insertions(+), 11 deletions(-) diff --git a/hash/odyssey2.xml b/hash/odyssey2.xml index cf7d5f68894..f9f3e4bacc4 100644 --- a/hash/odyssey2.xml +++ b/hash/odyssey2.xml @@ -1178,6 +1178,19 @@ The C7010 Chess Module had a NSC800 CMOS microprocessor, with 2K RAM and 8K ROM. + + Martian Threat (Euro, Prototype, Alt) + 198? + Philips + + + + + + + + + Missão Impossível/Viagem Programada (Bra) 198? diff --git a/src/devices/cpu/mcs48/mcs48.cpp b/src/devices/cpu/mcs48/mcs48.cpp index 3e10789f8a6..102bf533f0c 100644 --- a/src/devices/cpu/mcs48/mcs48.cpp +++ b/src/devices/cpu/mcs48/mcs48.cpp @@ -780,7 +780,7 @@ OPHANDLER( mov_a_xr0 ) { burn_cycles(1); m_a = ram_r(R0); } OPHANDLER( mov_a_xr1 ) { burn_cycles(1); m_a = ram_r(R1); } OPHANDLER( mov_a_t ) { burn_cycles(1); m_a = m_timer; } -OPHANDLER( mov_psw_a ) { burn_cycles(1); m_psw = m_a; update_regptr(); } +OPHANDLER( mov_psw_a ) { burn_cycles(1); m_psw = m_a & ~0x08; update_regptr(); } OPHANDLER( mov_sts_a ) { burn_cycles(1); m_sts = (m_sts & 0x0f) | (m_a & 0xf0); } OPHANDLER( mov_r0_a ) { burn_cycles(1); R0 = m_a; } OPHANDLER( mov_r1_a ) { burn_cycles(1); R1 = m_a; } @@ -1187,6 +1187,7 @@ void mcs48_cpu_device::device_reset() /* confirmed from reset description */ m_pc = 0; m_psw = m_psw & (C_FLAG | A_FLAG); + update_regptr(); m_a11 = 0x000; m_dbbo = 0xff; bus_w(0xff); diff --git a/src/devices/video/i8244.cpp b/src/devices/video/i8244.cpp index 3085508e7aa..985c18affba 100644 --- a/src/devices/video/i8244.cpp +++ b/src/devices/video/i8244.cpp @@ -797,13 +797,11 @@ void i8244_device::sound_update() u32 signal = m_vdc.s.shift3 | (m_vdc.s.shift2 << 8) | (m_vdc.s.shift1 << 16); m_sh_output = signal & 1; - signal >>= 1; - - bool noise_enabled = bool(m_vdc.s.sound & 0x10); int feedback = m_sh_output; + signal >>= 1; /* Noise tap is on bits 0 and 5 and fed back to bit 15 */ - if (noise_enabled) + if (m_vdc.s.sound & 0x10) { feedback ^= signal >> 4 & 1; // pre-shift bit 5 signal = (signal & ~0x8000) | (feedback << 15); diff --git a/src/mame/drivers/odyssey2.cpp b/src/mame/drivers/odyssey2.cpp index 6b12c8e2116..8c61830ae17 100644 --- a/src/mame/drivers/odyssey2.cpp +++ b/src/mame/drivers/odyssey2.cpp @@ -33,8 +33,8 @@ XTAL notes (differs per model): - G7400: 5.911MHz + 8.867MHz TODO: -- backgamm doesn't draw all the sprites, what causes it? It doesn't seem like - it's a 824x bug since it does properly write data in the partial screen updates +- backgamm doesn't draw all the chars/sprites, it does multiple screen updates + and writes to the ptr/color registers, but does not increment the Y regs - 824x screen resolution is not strictly defined, height(243) is correct, but horizontal overscan differs depending on monitor/tv? see syracuse for overscan - 824x on the real console, overlapping characters on eachother will cause @@ -52,6 +52,10 @@ TODO: - verify odyssey3 cpu/video clocks - odyssey3 keyboard layout is not the same as g7400, but there is no software to test the scancodes +- partial screen updates aren't shown when using MAME's debugger, this is caused + by a forced full screen update and a reset_partial_updates in emu/video.cpp. + For the same reason, collision detection also won't work properly when stepping + through the debugger BTANB: - a lot of PAL games have problems on NTSC (the other way around, not so much) @@ -679,8 +683,8 @@ void odyssey2_state::odyssey2(machine_config &config) /* cartridge */ O2_CART_SLOT(config, m_cart, o2_cart, nullptr); - SOFTWARE_LIST(config, "cart_list").set_original("odyssey2"); - SOFTWARE_LIST(config, "g7400_list").set_compatible("g7400"); + SOFTWARE_LIST(config, "cart_list").set_original("odyssey2").set_filter("O2"); + SOFTWARE_LIST(config, "g7400_list").set_compatible("g7400").set_filter("O2"); } void odyssey2_state::videopac(machine_config &config) @@ -695,6 +699,9 @@ void odyssey2_state::videopac(machine_config &config) m_i8244->add_route(ALL_OUTPUTS, "mono", 0.40); m_maincpu->set_clock(XTAL(17'734'476) / 3); + + subdevice("cart_list")->set_filter("VP"); + subdevice("g7400_list")->set_filter("VP"); } void odyssey2_state::videopacf(machine_config &config) @@ -752,8 +759,8 @@ void g7400_state::g7400(machine_config &config) /* cartridge */ O2_CART_SLOT(config, m_cart, o2_cart, nullptr); - SOFTWARE_LIST(config, "cart_list").set_original("g7400"); - SOFTWARE_LIST(config, "ody2_list").set_compatible("odyssey2"); + SOFTWARE_LIST(config, "cart_list").set_original("g7400").set_filter("VPP"); + SOFTWARE_LIST(config, "ody2_list").set_compatible("odyssey2").set_filter("VPP"); } void g7400_state::odyssey3(machine_config &config) @@ -774,6 +781,9 @@ void g7400_state::odyssey3(machine_config &config) // same color encoder as O2 (no RGB port) PALETTE(config.replace(), "palette", FUNC(odyssey2_state::odyssey2_palette), 16); + + subdevice("cart_list")->set_filter("O3"); + subdevice("ody2_list")->set_filter("O3"); } -- cgit v1.2.3