summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Angelo Salese <angelosa@users.noreply.github.com>2021-07-23 21:54:28 +0200
committer GitHub <noreply@github.com>2021-07-23 21:54:28 +0200
commitdd31a2f3e655230ac0083f023a1fe1737ff79aec (patch)
tree7e0faea48a79ff4387b7302a09345ec0063b111e
parentb8974ddcba6c266a878c6bfe83d3a2391cc91a42 (diff)
alpha68k.cpp: Demote Sky Soldiers with MACHINE_UNEMULATED_PROTECTION flag since MCU actually controls bosses time out behaviour.
-rw-r--r--src/mame/drivers/alpha68k.cpp28
1 files changed, 20 insertions, 8 deletions
diff --git a/src/mame/drivers/alpha68k.cpp b/src/mame/drivers/alpha68k.cpp
index 4497d2b9865..7b29c799e0c 100644
--- a/src/mame/drivers/alpha68k.cpp
+++ b/src/mame/drivers/alpha68k.cpp
@@ -23,21 +23,23 @@
The Next Space A8004-1 PIC SNK 1989
TODO:
-- Super Champion Baseball "ball speed pitch" protection;
- II & V board: bit 15 of palette RAM isn't hooked up, according to Sky Adventure
service mode enables "bright", it is actually same as NeoGeo device;
-- II & V board: Fix sound CPU crashes properly (nested NMIs)
-- Sky Soldiers: BGM Fade out before boss battle isn't implemented
+- II & V board: Fix sound CPU crashes properly (nested NMIs);
+- Sky Soldiers: According to various references bosses should really time out after some time (reportedly ~80 secs.).
+ This is actually handled by the MCU, not unlike Gold Medalist;
+- Sky Soldiers: BGM Fade out before boss battle isn't implemented;
- Sky Adventure, probably others: on a real PCB reference BGM stutters when using
- 30 Hz autofire (not enough sound resources?)
+ 30 Hz autofire (not enough sound resources?);
- Sky Adventure, probably others: sprite drawing is off-sync, cfr. notes in video file;
- Gold Medalist: attract mode has missing finger on button 1, may be btanb;
- Gold Medalist: incorrect blank effect on shooting pistol for dash events (cfr. alpha68k_palette_device);
- Gold Medalist: dash events timers relies on MCU irq timings.
Previous emulation of 180 Hz was making it way too hard, and the timer was updating at 0.03 secs (-> 30 Hz refresh rate).
Using a timer of 100 Hz seems a better approximation compared to a stopwatch, of course fine tuning
- this approximation needs HW probing and/or a MCU decap.
+ this approximation needs HW probing and/or a MCU decap;
- Gold Medalist: MCU irq routine has an event driven path that is never taken into account, what is it for?
+- Super Champion Baseball: "ball speed pitch" protection;
- Super Champion Baseball: enables opacity bit on fix layer, those are transparent on SNK Arcade Classics 0
but actually opaque on a reference shot, sounds like a btanb;
- Fix layer tilemap should be a common device between this, snk68.cpp and other Alpha/SNK-based games;
@@ -338,7 +340,18 @@ u16 alpha68k_II_state::alpha_II_trigger_r(offs_t offset)
m_microcontroller_data = 0x21;
}
else
+ {
+ // TODO: Sky Soldiers uses this thread dispatch as well for boss timing out and who knows what else
+ // cfr. PC=0x1d52, possible threads at ROM address $1e7e-$1e89 (in bytes)
+ // 0x34 should be the step counter handling while 0x37 is what actually times out (or even destroys) the boss on expiration.
+ // Notice that there are additional shared RAM checks (i.e. 0x1e6a, 0x1e32, 0x1e3a), which causes the game to soft lock if not satisfied.
+ // Apparently bosses should time out in ~80 seconds.
m_microcontroller_data = 0x00;
+
+ // Notice that a similar system is also used by Time Soldiers but most threads are actually NOP-ed out.
+ // (basically anything that is >0x24)
+ // Most likely left-overs that eventually were completed with aforementioned Sky Soldiers.
+ }
m_shared_ram[0x29] = (source & 0xff00) | m_microcontroller_data;
}
@@ -2148,9 +2161,8 @@ GAME( 1987, timesold1, timesold, alpha68k_II, timesold, alpha68k_II_state, i
GAME( 1987, btlfield, timesold, alpha68k_II, btlfield, alpha68k_II_state, init_btlfield, ROT90, "Alpha Denshi Co. (SNK license)", "Battle Field (Japan)", MACHINE_SUPPORTS_SAVE )
GAME( 1987, btlfieldb, timesold, btlfieldb, btlfieldb, alpha68k_II_state, init_btlfieldb, ROT90, "bootleg", "Battle Field (bootleg)", MACHINE_SUPPORTS_SAVE )
-GAME( 1988, skysoldr, 0, alpha68k_II, skysoldr, alpha68k_II_state, init_skysoldr, ROT90, "Alpha Denshi Co. (SNK of America/Romstar license)", "Sky Soldiers (US)", MACHINE_SUPPORTS_SAVE )
-GAME( 1988, skysoldrbl,skysoldr, alpha68k_II, skysoldr, alpha68k_II_state, init_skysoldr, ROT90, "bootleg", "Sky Soldiers (bootleg)", MACHINE_SUPPORTS_SAVE )
-
+GAME( 1988, skysoldr, 0, alpha68k_II, skysoldr, alpha68k_II_state, init_skysoldr, ROT90, "Alpha Denshi Co. (SNK of America/Romstar license)", "Sky Soldiers (US)", MACHINE_SUPPORTS_SAVE | MACHINE_UNEMULATED_PROTECTION ) // unemulated boss time out behaviour
+GAME( 1988, skysoldrbl,skysoldr, alpha68k_II, skysoldr, alpha68k_II_state, init_skysoldr, ROT90, "bootleg", "Sky Soldiers (bootleg)", MACHINE_SUPPORTS_SAVE | MACHINE_UNEMULATED_PROTECTION ) // unknown if/how bootleggers handled boss time out, seems likely
GAME( 1988, goldmedl, 0, goldmedal, goldmedl, goldmedal_II_state, init_goldmedl, ROT0, "SNK", "Gold Medalist (set 1, Alpha68k II PCB)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_TIMING )