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;
+ int feedback = m_sh_output;
signal >>= 1;
- bool noise_enabled = bool(m_vdc.s.sound & 0x10);
- int feedback = m_sh_output;
-
/* 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");
}