summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author hap <happppp@users.noreply.github.com>2020-08-19 18:47:32 +0200
committer hap <happppp@users.noreply.github.com>2020-08-19 18:47:59 +0200
commita51876c942ff2d92f923d7139df8fbe03a288627 (patch)
treef6417e429419d79dbf39e7794d6a2816424d6e31
parent4fe914da69126b2bfbfc17879f68877e78373231 (diff)
New working software list additions
----------------------------------- odyssey2: Martian Threat (Euro, Prototype, Alt) [unknown]
-rw-r--r--hash/odyssey2.xml13
-rw-r--r--src/devices/cpu/mcs48/mcs48.cpp3
-rw-r--r--src/devices/video/i8244.cpp6
-rw-r--r--src/mame/drivers/odyssey2.cpp22
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.
</part>
</software>
+ <software name="martiana" cloneof="martian">
+ <description>Martian Threat (Euro, Prototype, Alt)</description>
+ <year>198?</year>
+ <publisher>Philips</publisher>
+ <info name="programmer" value="Jake Dowding?" />
+ <part name="cart" interface="odyssey_cart">
+ <feature name="slot" value="o2_rom" />
+ <dataarea name="rom" size="8192">
+ <rom name="martian threat (europe, proto, alt).bin" size="8192" crc="335481f1" sha1="d6a3f2def966b798099dbf3c754ab12f69bb4ee8" offset="0" />
+ </dataarea>
+ </part>
+ </software>
+
<software name="2missprg">
<description>Missão Impossível/Viagem Programada (Bra)</description><!-- limited release -->
<year>198?</year>
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<software_list_device>("cart_list")->set_filter("VP");
+ subdevice<software_list_device>("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<software_list_device>("cart_list")->set_filter("O3");
+ subdevice<software_list_device>("ody2_list")->set_filter("O3");
}