diff --git a/hash/saturn.xml b/hash/saturn.xml index 6c41de53d40..77926e22b0e 100644 --- a/hash/saturn.xml +++ b/hash/saturn.xml @@ -2605,7 +2605,7 @@ Olympic Soccer (Fra) T-7904H-09 - + Alone in the Dark 2 (Jpn) 1996 @@ -2653,7 +2653,7 @@ Olympic Soccer (Fra) T-7904H-09 - + Aquazone - Desktop Life (Jpn) 1996 @@ -2701,7 +2701,7 @@ Olympic Soccer (Fra) T-7904H-09 - + Arcade Gears Vol. 4 - Image Fight & X-Multiply (Jpn) 1998 @@ -2911,7 +2911,9 @@ Olympic Soccer (Fra) T-7904H-09 - + + + Bio Hazard (Jpn) 1997 @@ -2927,7 +2929,7 @@ Olympic Soccer (Fra) T-7904H-09 - + Black/Matrix (Jpn, Reprint) 1998 @@ -2991,8 +2993,7 @@ Olympic Soccer (Fra) T-7904H-09 - - + Capcom Generation - Dai-1-Shuu - Gekitsui Ou no Jidai (Jpn) 1998 Capcom @@ -3007,7 +3008,9 @@ Olympic Soccer (Fra) T-7904H-09 - + + + Capcom Generation - Dai-2-Shuu - Makai to Kishi (Jpn) 1998 @@ -3039,7 +3042,9 @@ Olympic Soccer (Fra) T-7904H-09 - + + + Capcom Generation - Dai-4-Shuu - Kokou no Eiyuu (Jpn) 1998 @@ -3055,8 +3060,7 @@ Olympic Soccer (Fra) T-7904H-09 - - + Capcom Generation - Dai-5-Shuu - Kakutou ke Tachi (Jpn) 1998 Capcom @@ -3087,7 +3091,9 @@ Olympic Soccer (Fra) T-7904H-09 - + + + Chibi Maruko-chan no Taisen Puzzledama (Jpn) 1995 @@ -3173,8 +3179,7 @@ Olympic Soccer (Fra) T-7904H-09 - - + Command & Conquer (Jpn) 1997 @@ -3245,7 +3250,7 @@ Olympic Soccer (Fra) T-7904H-09 - + Cyberbots - Fullmetal Madness (Jpn, 1M) 1997 @@ -3322,7 +3327,7 @@ Olympic Soccer (Fra) T-7904H-09 - + Darius Gaiden (Jpn, 3M) 1995 @@ -3402,7 +3407,10 @@ Olympic Soccer (Fra) T-7904H-09 - + + + + DecAthlete (Jpn, 1M) 1996 @@ -3669,7 +3677,10 @@ Olympic Soccer (Fra) T-7904H-09 - + + + + DoDonPachi (Jpn) 1997 @@ -3739,7 +3750,7 @@ Olympic Soccer (Fra) T-7904H-09 - + Doukyuusei If (Jpn, 1M, 2M) 1996 @@ -3836,7 +3847,9 @@ Olympic Soccer (Fra) T-7904H-09 - + + + Dungeon's & Dragons - Tower of Doom (Dungeons & Dragons Collection Disc 1) (Jpn) 1999 @@ -3853,6 +3866,7 @@ Olympic Soccer (Fra) T-7904H-09 + Dungeons & Dragons - Shadow over Mystara (Dungeons & Dragons Collection Disc 2) (Jpn) 1999 @@ -4063,7 +4077,8 @@ Olympic Soccer (Fra) T-7904H-09 - + + Falcom Classics (Jpn) 1997 @@ -4079,7 +4094,7 @@ Olympic Soccer (Fra) T-7904H-09 - + Falcom Classics II (Jpn) 1998 @@ -4111,8 +4126,11 @@ Olympic Soccer (Fra) T-7904H-09 - - + + + + + Fighter's History Dynamite (Jpn) 1997 Sega @@ -4120,6 +4138,7 @@ Olympic Soccer (Fra) T-7904H-09 + @@ -4179,11 +4198,11 @@ Olympic Soccer (Fra) T-7904H-09 Fighting Vipers (Kor) - 1996 + 1996? Samsung - + @@ -4223,7 +4242,7 @@ Olympic Soccer (Fra) T-7904H-09 - + Fishing Koushien (Jpn) 1996 @@ -4288,7 +4307,7 @@ Olympic Soccer (Fra) T-7904H-09 - + Gakkou no Kaidan (Jpn) 1995 @@ -4304,7 +4323,7 @@ Olympic Soccer (Fra) T-7904H-09 - + Galaxy Fight - Universal Warriors (Jpn) 1995 @@ -4320,7 +4339,7 @@ Olympic Soccer (Fra) T-7904H-09 - + Gale Racer (Jpn, 1A) 1994 @@ -4336,7 +4355,7 @@ Olympic Soccer (Fra) T-7904H-09 - + Gals Panic SS (Jpn) 1996 @@ -4352,8 +4371,7 @@ Olympic Soccer (Fra) T-7904H-09 - - + Game Basic for SegaSaturn (Jpn) 1998 @@ -4361,6 +4379,8 @@ Olympic Soccer (Fra) T-7904H-09 + + @@ -4390,7 +4410,8 @@ Olympic Soccer (Fra) T-7904H-09 - + + Game-Ware Vol. 3 (Jpn) 1996 @@ -4454,7 +4475,7 @@ Olympic Soccer (Fra) T-7904H-09 - + Gokujou Parodius Da! Deluxe Pack (Jpn, Rev. A) 1995 @@ -4470,7 +4491,7 @@ Olympic Soccer (Fra) T-7904H-09 - + Golden Axe - The Duel (Jpn, 2M) 1995 @@ -4534,10 +4555,7 @@ Olympic Soccer (Fra) T-7904H-09 - - - - + Grandia (Jpn, 1M) 1997 @@ -4568,7 +4586,7 @@ Olympic Soccer (Fra) T-7904H-09 - + Grandia - Digital Museum (Jpn, Rev. A) 1998 @@ -4600,7 +4618,9 @@ Olympic Soccer (Fra) T-7904H-09 - + + + Greatest Nine '96 (Jpn, 2M) 1996 @@ -4648,7 +4668,7 @@ Olympic Soccer (Fra) T-7904H-09 - + Gunbird (Jpn) 1995 @@ -4680,7 +4700,10 @@ Olympic Soccer (Fra) T-7904H-09 - + + + + Gussun Oyoyo S (Jpn) 1996 @@ -4760,7 +4783,8 @@ Olympic Soccer (Fra) T-7904H-09 - + + The House of the Dead (Jpn) 1998 @@ -4998,7 +5022,7 @@ Olympic Soccer (Fra) T-7904H-09 - + Jikkyou Oshaberi Parodius - Forever with Me (Jpn) 1996 @@ -5244,7 +5268,9 @@ Olympic Soccer (Fra) T-7904H-09 - + + + The King of Boxing (Jpn) 1995 @@ -5311,7 +5337,8 @@ Olympic Soccer (Fra) T-7904H-09 - + + Kisuishou Densetsu Astal (Jpn, 4M) 1995 @@ -6006,7 +6033,7 @@ Olympic Soccer (Fra) T-7904H-09 Wooyoung - + @@ -6493,7 +6520,7 @@ Olympic Soccer (Fra) T-7904H-09 - + Pro Yakyuu Greatest Nine '97 - Make Miracle (Jpn, Alt) 1997 Sega @@ -7230,7 +7257,8 @@ Olympic Soccer (Fra) T-7904H-09 - + + Sega Ages - Columns Arcade Collection (Jpn) 1997 @@ -7246,7 +7274,8 @@ Olympic Soccer (Fra) T-7904H-09 - + + Sega Ages - Fantasy Zone (Jpn) 1997 @@ -7326,7 +7355,9 @@ Olympic Soccer (Fra) T-7904H-09 - + + + Sega Ages - Phantasy Star Collection (Jpn) 1998 @@ -7397,7 +7428,7 @@ Olympic Soccer (Fra) T-7904H-09 Samsung - + @@ -7453,8 +7484,7 @@ Olympic Soccer (Fra) T-7904H-09 - - + Sengoku Blade - Sengoku Ace Episode II (Jpn) 1996 @@ -7475,8 +7505,7 @@ Olympic Soccer (Fra) T-7904H-09 - - + Senkutsu Katsuryu Taisen - Chaos Seed (Jpn, Rev A) 1998 @@ -7877,7 +7906,7 @@ Olympic Soccer (Fra) T-7904H-09 - + Sim City 2000 (Jpn, Rev A) 1995 @@ -9219,7 +9248,7 @@ Olympic Soccer (Fra) T-7904H-09 - + Whizz (Jpn) 1997 @@ -9395,14 +9424,15 @@ Olympic Soccer (Fra) T-7904H-09 - + + Worldwide Soccer - Sega International Victory Goal Edition (Kor) - 199? + 1995? Samsung - + @@ -9808,8 +9838,7 @@ Olympic Soccer (Fra) T-7904H-09 - - + Big Ichigeki! Pachi-slot Daikouryaku (Jpn, v1.000) 1996 ASK Kodansha @@ -9988,7 +10017,10 @@ Olympic Soccer (Fra) T-7904H-09 - + + + + Clockwork Knight - Pepperouchau no Daibouken Gekan (Jpn) 1995 @@ -10072,7 +10104,7 @@ Olympic Soccer (Fra) T-7904H-09 - + Daina Airan (Jpn) 1997 @@ -10136,7 +10168,7 @@ Olympic Soccer (Fra) T-7904H-09 - + Darkseed II (Jpn) 1997 @@ -10253,9 +10285,9 @@ Olympic Soccer (Fra) T-7904H-09 - + - Derby Analist (Jpn) + Derby Analyst (Jpn) 1997 Media Entertainment @@ -10407,7 +10439,7 @@ Olympic Soccer (Fra) T-7904H-09 - + Doukoku Soshite... (Jpn) 1998 @@ -10494,7 +10526,14 @@ Olympic Soccer (Fra) T-7904H-09 - + + + + + + + + Dragon's Dream (Jpn) 1997? @@ -10502,6 +10541,7 @@ Olympic Soccer (Fra) T-7904H-09 + @@ -10740,7 +10780,13 @@ Olympic Soccer (Fra) T-7904H-09 - + + + + + + + Fire Pro Gaiden Blazing Tornado (Jpn) 1995 @@ -10772,7 +10818,7 @@ Olympic Soccer (Fra) T-7904H-09 - + Flash Sega Saturn - Ochikadzuki-hen (Jpn) 1996 @@ -10856,7 +10902,7 @@ Olympic Soccer (Fra) T-7904H-09 - + Gakkou no Kowai Uwasa - Hanako-san ga Kita!! (Jpn) 1995 @@ -11027,7 +11073,8 @@ Olympic Soccer (Fra) T-7904H-09 - + + Goiken Muyou - Anarchy in the Nippon Taikenban (Jpn) 1997 @@ -11393,7 +11440,7 @@ Olympic Soccer (Fra) T-7904H-09 - + Virtua Fighter Kids (Jpn, Java Tea Original version) 1996 @@ -12894,8 +12941,7 @@ Olympic Soccer (Fra) T-7904H-09 - - + Sengoku Blade - Sengoku Ace Episode II (Jpn, Alt) 1996 @@ -12916,8 +12962,7 @@ Olympic Soccer (Fra) T-7904H-09 - - + Shichisei Toushin Guyferd - Crown Kaimetsu Sakusen (Jpn) 1998 Capcom @@ -13498,7 +13543,9 @@ Olympic Soccer (Fra) T-7904H-09 - + + + Tactics Ogre (Jpn) 1996 @@ -14334,7 +14381,7 @@ Olympic Soccer (Fra) T-7904H-09 - + Virtua Fighter Kids (Jpn) 1996 @@ -14886,7 +14933,7 @@ Olympic Soccer (Fra) T-7904H-09 - + Alone in the Dark 2 (Jpn, Alt) 1996 @@ -14902,7 +14949,7 @@ Olympic Soccer (Fra) T-7904H-09 - + Amagi Shien (Jpn) 1997 @@ -15290,7 +15337,7 @@ Olympic Soccer (Fra) T-7904H-09 - + Big Ichigeki! Pachi-Slot Daikouryaku (Jpn, Alt) 1996 @@ -15471,7 +15518,7 @@ Olympic Soccer (Fra) T-7904H-09 - + Brain Battle Q (Jpn) 1996 @@ -15653,7 +15700,9 @@ Olympic Soccer (Fra) T-7904H-09 - + + + Chibi Maruko-Chan no Taisen Puzzledama (Jpn, Alt) 1995 @@ -15841,7 +15890,8 @@ Olympic Soccer (Fra) T-7904H-09 - + + Croc - Pau-Pau Island (Jpn) 1998 @@ -15959,7 +16009,7 @@ Olympic Soccer (Fra) T-7904H-09 - + D-Xhird (Jpn) 1997 @@ -16356,7 +16406,7 @@ Olympic Soccer (Fra) T-7904H-09 - Derby Analist (Jpn, Alt) + Derby Analyst (Jpn, Alt) 1997 Media Entertainment @@ -16497,7 +16547,7 @@ Olympic Soccer (Fra) T-7904H-09 - + Digital Pinball - Last Gladiators Ver. 9.7 (Jpn) 1997 @@ -16653,7 +16703,7 @@ Olympic Soccer (Fra) T-7904H-09 - + Druid - Yami e no Tsuiseki Sha (Jpn) 1998 @@ -16933,7 +16983,7 @@ Olympic Soccer (Fra) T-7904H-09 - + FIFA Soccer 96 (Jpn) 1996 @@ -17057,7 +17107,7 @@ Olympic Soccer (Fra) T-7904H-09 - + Flash Sega Saturn - Ochikadzuki-hen (Jpn, Alt) 1996 @@ -17072,7 +17122,7 @@ Olympic Soccer (Fra) T-7904H-09 - + Flash Sega Saturn Vol. 4 (Jpn) 1996 @@ -17087,7 +17137,7 @@ Olympic Soccer (Fra) T-7904H-09 - + Flash Sega Saturn Vol. 7 (Jpn) 1996 @@ -17102,7 +17152,7 @@ Olympic Soccer (Fra) T-7904H-09 - + Flash Sega Saturn Vol. 8 (Jpn) 1996 @@ -17117,7 +17167,7 @@ Olympic Soccer (Fra) T-7904H-09 - + Flash Sega Saturn Vol. 10 (Jpn) 1996 @@ -17218,7 +17268,8 @@ Olympic Soccer (Fra) T-7904H-09 - + + Full Cowled Mini Yonku Super Factory (Jpn) 1997 @@ -17329,7 +17380,8 @@ Olympic Soccer (Fra) T-7904H-09 - + + Gakkou no Kaidan (Jpn, Alt) 1995 @@ -17390,7 +17442,7 @@ Olympic Soccer (Fra) T-7904H-09 = game basic for segasaturn (japan) (windows cd) sat_jp:gamebasi Game Basic for SegaSaturn (Japan) (Windows CD) --> - + Game de Seishun (Jpn) 1998 @@ -17438,7 +17490,7 @@ Olympic Soccer (Fra) T-7904H-09 - + Game no Tatsujin 2 (Jpn) 1996 @@ -17556,7 +17608,7 @@ Olympic Soccer (Fra) T-7904H-09 - + Gekitotsu Koushien (Jpn) 1997 @@ -17572,7 +17624,10 @@ Olympic Soccer (Fra) T-7904H-09 - + + + + Gekka no Kishi - Ouryuusen (Jpn) 1996 @@ -17700,7 +17755,8 @@ Olympic Soccer (Fra) T-7904H-09 - + + Goiken Muyou - Anarchy in the Nippon (Jpn) 1997 @@ -17812,7 +17868,8 @@ Olympic Soccer (Fra) T-7904H-09 - + + Groove on Fight - Gouketsuji Ichizoku 3 - Kakuchou Ram Cartridge-tsuki! (Jpn) 1997 @@ -17921,7 +17978,7 @@ Olympic Soccer (Fra) T-7904H-09 - + HatTrick Hero S (Jpn) 1995 @@ -18093,8 +18150,7 @@ Olympic Soccer (Fra) T-7904H-09 - - + Houma Hunter Lime Perfect Collection (Jpn) 1995 @@ -18115,7 +18171,7 @@ Olympic Soccer (Fra) T-7904H-09 - + Hyper 3D Pinball (Jpn) 1997 @@ -20969,7 +21025,9 @@ Olympic Soccer (Fra) T-7904H-09 - + + + The Hyper Golf - Devil's Course (Jpn) 1995 @@ -22485,7 +22543,7 @@ Olympic Soccer (Fra) T-7904H-09 - + Actua Golf (Jpn) 1997 @@ -22517,7 +22575,7 @@ Olympic Soccer (Fra) T-7904H-09 - + Assault Rigs (Jpn) 1997 @@ -22993,7 +23051,7 @@ Olympic Soccer (Fra) T-7904H-09 - + Pro Yakyuu Greatest Nine '97 (Jpn) 1997 @@ -23009,7 +23067,7 @@ Olympic Soccer (Fra) T-7904H-09 - + Pro Yakyuu Greatest Nine '97 - Make Miracle (Jpn) 1997 @@ -23041,7 +23099,8 @@ Olympic Soccer (Fra) T-7904H-09 - + + Kanzen Chuukei Pro Yakyuu Greatest Nine (Jpn) 1995 @@ -23057,7 +23116,7 @@ Olympic Soccer (Fra) T-7904H-09 - + Pro Yakyuu Greatest Nine '98 (Jpn) 1998 @@ -23121,7 +23180,9 @@ Olympic Soccer (Fra) T-7904H-09 - + + + Habitat II (Jpn) 1996 @@ -23217,7 +23278,9 @@ Olympic Soccer (Fra) T-7904H-09 - + + + Hissatsu Pachinko Collection (Jpn) 1996 @@ -23434,9 +23497,10 @@ Olympic Soccer (Fra) T-7904H-09 - + + - Idol Mahjong Final Romance R Audio Disc (Jpn) + Idol Mahjong Final Romance R Mini Drama CD (Jpn) 199? <unknown> @@ -23480,8 +23544,7 @@ Olympic Soccer (Fra) T-7904H-09 - - + Jantei Battle Cos-Player (Jpn) 1997 @@ -25581,7 +25644,7 @@ Olympic Soccer (Fra) T-7904H-09 - + Sega Saturn Internet Vol. 1 (Jpn) 1997 @@ -25992,7 +26055,7 @@ Olympic Soccer (Fra) T-7904H-09 - + Sugobencha - Dragon Master Silk Gaiden (Jpn) 1998 @@ -27509,7 +27572,8 @@ Olympic Soccer (Fra) T-7904H-09 - + + Sega Ages - Rouka ni Ichidant-R (Jpn) 1996 @@ -28211,7 +28275,7 @@ Olympic Soccer (Fra) T-7904H-09 - + Blast Wind (Jpn) 1997 @@ -28290,7 +28354,7 @@ Olympic Soccer (Fra) T-7904H-09 - + Chaos Control Remix (Jpn) @@ -28361,7 +28425,7 @@ Olympic Soccer (Fra) T-7904H-09 - + Courier Crisis (Jpn) 1998 @@ -28489,7 +28553,7 @@ Olympic Soccer (Fra) T-7904H-09 - + Defcon 5 (Jpn) 1996 @@ -28537,10 +28601,14 @@ Olympic Soccer (Fra) T-7904H-09 - + + + + + Doom (Jpn) 1997 @@ -28588,7 +28656,8 @@ Olympic Soccer (Fra) T-7904H-09 - + + Elevator Action² Returns (Jpn) 1997 @@ -28673,7 +28742,7 @@ Olympic Soccer (Fra) T-7904H-09 - + Final Fight Revenge (Jpn) 2000 @@ -28738,7 +28807,7 @@ Olympic Soccer (Fra) T-7904H-09 - + GunBlaze S (Jpn) 1998 @@ -28846,7 +28915,8 @@ Olympic Soccer (Fra) T-7904H-09 - + + Irem Arcade Classics 1996 @@ -29171,7 +29241,7 @@ Olympic Soccer (Fra) T-7904H-09 - + Oracle no Houseki (Jpn) 1996 @@ -29842,7 +29912,8 @@ Olympic Soccer (Fra) T-7904H-09 - + + Time Gal (Time Gal & Ninja Hayate Disc 1) (Jpn) 1997 @@ -29890,14 +29961,15 @@ Olympic Soccer (Fra) T-7904H-09 - + + Virtua Fighter Kids (Kor) - 199? + 1996? Samsung - + @@ -37818,7 +37890,9 @@ Olympic Soccer (Fra) T-7904H-09 - + + + Three Dirty Dwarves (USA) 1997 @@ -38742,7 +38816,7 @@ Olympic Soccer (Fra) T-7904H-09 Three Dirty Dwarves (Prototype 19960417) 1997 Sega - + diff --git a/src/devices/machine/smpc.cpp b/src/devices/machine/smpc.cpp index bff704cdcb3..2a0bb30c311 100644 --- a/src/devices/machine/smpc.cpp +++ b/src/devices/machine/smpc.cpp @@ -594,11 +594,17 @@ void smpc_hle_device::device_timer(emu_timer &timer, device_timer_id id, int par // ... m_command_in_progress = false; m_oreg[31] = m_comreg; - sf_ack(true); //clear hand-shake flag (TODO: diagnostic wants this to have bit 3 high) + // TODO: diagnostic also wants this to have bit 3 high + sf_ack(true); //set hand-shake flag return; -// case 0x0a: // NETLINKON -// case 0x0b: // NETLINKOFF + case 0x0a: // NETLINKON + // TODO: understand where NetLink actually lies and implement delegation accordingly + // (is it really an SH1 device like suggested by the space access or it overlays on CS2 bus?) + popmessage("%s: NetLink enabled", this->tag()); + [[fallthrough]]; + case 0x0b: // NETLINKOFF + break; case 0x0d: // SYSRES // send a 1 -> 0 to device reset lines @@ -614,10 +620,6 @@ void smpc_hle_device::device_timer(emu_timer &timer, device_timer_id id, int par case 0x0f: // CKCHG320 m_dotsel(m_comreg & 1); - // send a NMI to Master SH2 if enabled - if(m_NMI_reset == false) - master_sh2_nmi(); - // assert Slave SH2 line m_sshres(1); // clear PLL system halt @@ -625,6 +627,12 @@ void smpc_hle_device::device_timer(emu_timer &timer, device_timer_id id, int par // setup the new dot select m_cur_dotsel = (m_comreg & 1) ^ 1; + + // send a NMI to Master SH2 if enabled + // it is unconditionally requested: + // bigichig, capgen1, capgen4 and capgen5 triggers a SLEEP opcode from BIOS call and expects this to wake them up. + //if(m_NMI_reset == false) + master_sh2_nmi(); break; case 0x10: // INTBACK @@ -659,7 +667,7 @@ void smpc_hle_device::device_timer(emu_timer &timer, device_timer_id id, int par break; default: - logerror("%s unemulated %02x command\n",this->tag(),m_comreg); + logerror("%s: unemulated %02x command\n",this->tag(),m_comreg); return; } diff --git a/src/devices/machine/stvcd.cpp b/src/devices/machine/stvcd.cpp index 88af2d7e0cf..7b84c069a85 100644 --- a/src/devices/machine/stvcd.cpp +++ b/src/devices/machine/stvcd.cpp @@ -135,6 +135,10 @@ void stvcd_device::io_regs(address_map &map) map(0x9001c, 0x9001f).mirror(0x08000).rw(FUNC(stvcd_device::cr2_r), FUNC(stvcd_device::cr2_w)).umask32(0xffffffff); map(0x90020, 0x90023).mirror(0x08000).rw(FUNC(stvcd_device::cr3_r), FUNC(stvcd_device::cr3_w)).umask32(0xffffffff); map(0x90024, 0x90027).mirror(0x08000).rw(FUNC(stvcd_device::cr4_r), FUNC(stvcd_device::cr4_w)).umask32(0xffffffff); + + // NetLink access + // dragndrm expects this value, most likely for status + map(0x8502a, 0x8502a).lr8(NAME([] () -> u8 { return 0x11; })); } u32 stvcd_device::datatrns_r(offs_t offset, uint32_t mem_mask) @@ -221,14 +225,14 @@ inline u32 stvcd_device::dataxfer_long_r() transpart->size -= xferdnum; transpart->numblks -= xfersectnum; - /* TODO: is this correct? */ + // TODO: is this correct? xfertype32 = XFERTYPE32_INVALID; } } break; default: - osd_printf_error("CD: unhandled 32-bit transfer type\n"); + osd_printf_error("CD: unhandled 32-bit transfer type %d\n", (int)xfertype32); break; } @@ -269,7 +273,7 @@ inline void stvcd_device::dataxfer_long_w(u32 data) break; default: - printf("CD: unhandled 32-bit transfer type write\n"); + printf("CD: unhandled 32-bit transfer type write %d\n", (int)xfertype32); break; } } @@ -462,7 +466,9 @@ void stvcd_device::stvcd_w(offs_t offset, uint32_t data, uint32_t mem_mask) */ int stvcd_device::get_timing_command(void) { - /* TODO: calculate timings based off command params */ + // TODO: calculate timings based off command params + // given the CMOK returns it looks like SH2 expects way slower responses + // (loops for 0x7xx times at most, max number of iterations is 0x240000) return 16667; } @@ -769,7 +775,7 @@ void stvcd_device::cmd_play_disc() } else { - /* TODO: Waku Waku 7 sets up track 0, that basically doesn't make any sense. Just skip it for now. */ + // FIXME: Waku Waku 7 sets up track 0, that basically doesn't make any sense. Just skip it for now. popmessage("Warning: track mode == 0, contact MAMEdev"); cr_standard_return(cd_stat); hirqreg |= (CMOK); @@ -814,9 +820,12 @@ void stvcd_device::cmd_play_disc() else { /* resume from a pause state */ - /* TODO: Galaxy Fight calls 10ff ffff ffff ffff, but then it calls 0x04->0x02->0x06->0x11->0x04->0x02->0x06 command sequence - (and current implementation nukes start/end FAD addresses at 0x04). I'm sure that this doesn't work like this, but there could - be countless possible combinations ... */ + // FIXME: verify implementation with Galaxy Fight + // it calls 10ff ffff ffff ffff, but then it follows up with + // 0x04->0x02->0x06->0x11->0x04->0x02->0x06 command sequence + // (and current implementation nukes start/end FAD addresses at 0x04). + // I'm sure that this doesn't work like this, but there could + // be countless possible combinations ... if(fadstoplay == 0) { cd_curfad = cdrom_get_track_start(cdrom, cur_track-1); @@ -1130,7 +1139,8 @@ void stvcd_device::cmd_get_filter_mode() void stvcd_device::cmd_set_filter_connection() { // Set Filter Connection - /* TODO: maybe condition false is cr3 low? */ + // FIXME: verify usage of cr3 LSB + // (false condition?) uint8_t fnum = (cr3>>8)&0xff; LOG("%s:CD: Set Filter Connection %x => mode %x parm %04x\n", machine().describe_context(), fnum, cr1 & 0xf, cr2); @@ -1181,7 +1191,7 @@ void stvcd_device::cmd_reset_selector() } /* reset false filter output conditions */ - /* TODO: check these two. */ + /// TODO: verify default value for these two if(cr1 & 0x80) { for(i=0;i= MAX_FILTERS) { + // TODO: find actual SW that does this + // (may conceal a bigger issue) osd_printf_error("CD: invalid buffer number\n"); - /* TODO: why this is happening? */ cr_standard_return(CD_STAT_REJECT); hirqreg |= (CMOK|EHST); return; @@ -1439,14 +1450,15 @@ void stvcd_device::cmd_delete_sector_data() if (bufnum >= MAX_FILTERS) { + // TODO: mustn't happen osd_printf_error("CD: invalid buffer number\n"); - /* TODO: why this is happening? */ cr_standard_return(CD_STAT_REJECT); hirqreg |= (CMOK|EHST); return; } - /* TODO: Phantasy Star 2 throws this one. */ + // pstarcol PS2 does this + // TODO: verify if implementation is correct if (partitions[bufnum].numblks == 0) { osd_printf_error("CD: buffer is already empty\n"); @@ -1459,10 +1471,15 @@ void stvcd_device::cmd_delete_sector_data() for (i = sectofs; i < (sectofs + sectnum); i++) { - partitions[bufnum].size -= partitions[bufnum].blocks[i]->size; - cd_free_block(partitions[bufnum].blocks[i]); - partitions[bufnum].blocks[i] = (blockT *)nullptr; - partitions[bufnum].bnum[i] = 0xff; + // pstarcol PS2 tries to delete partial partitions, + // need to guard against it (otherwise it would crash after first attract cycle) + if (partitions[bufnum].size > 0) + { + partitions[bufnum].size -= partitions[bufnum].blocks[i]->size; + cd_free_block(partitions[bufnum].blocks[i]); + partitions[bufnum].blocks[i] = (blockT *)nullptr; + partitions[bufnum].bnum[i] = 0xff; + } } cd_defragblocks(&partitions[bufnum]); @@ -1492,14 +1509,15 @@ void stvcd_device::cmd_get_and_delete_sector_data() if (bufnum >= MAX_FILTERS) { + // TODO: mustn't happen osd_printf_error("CD: invalid buffer number\n"); - /* TODO: why this is happening? */ cr_standard_return(CD_STAT_REJECT); hirqreg |= (CMOK|EHST); return; } /* Yoshimoto Mahjong uses the REJECT status to verify when the data is ready. */ + // TODO: verify again if it's really REJECT or something else if (partitions[bufnum].numblks < sectnum) { osd_printf_error("CD: buffer is not full %08x %08x\n",partitions[bufnum].numblks,sectnum); @@ -1708,7 +1726,11 @@ void stvcd_device::cmd_get_target_file_info() cr3 = 0; cr4 = 0; - printf("%08x %08x\n",curdir[temp].firstfad,curdir[temp].length); + // TODO: chaossd and sengblad does this + // (iso9660 parsing doesn't read beyond the first sector) + if (curdir[temp].firstfad == 0 || curdir[temp].length == 0) + throw emu_fatalerror("File ID not found in XFERTYPE_FILEINFO_1"); +// printf("%08x %08x\n",curdir[temp].firstfad,curdir[temp].length); // first 4 bytes = FAD finfbuf[0] = (curdir[temp].firstfad>>24)&0xff; finfbuf[1] = (curdir[temp].firstfad>>16)&0xff; @@ -1724,6 +1746,7 @@ void stvcd_device::cmd_get_target_file_info() finfbuf[10] = temp; finfbuf[11] = curdir[temp].flags; + xfertype = XFERTYPE_FILEINFO_1; xfercount = 0; } @@ -1988,8 +2011,9 @@ TIMER_DEVICE_CALLBACK_MEMBER( stvcd_device::stv_sector_cb ) else m_sector_timer->adjust(attotime::from_hz(75*cd_speed)); // 75 / 150 sectors / second = 150 / 300kBytes/second - /* TODO: doesn't boot if a disk isn't in? */ - /* TODO: Check out when this really happens. (Daytona USA original version definitely wants it to be on).*/ + // TODO: Saturn refuses to boot with this if a disk isn't in and condition is applied!? + // TODO: Check out actual timing of SCDQ acquisition. + // (Daytona USA original version definitely wants it to be on). //if(((cd_stat & 0x0f00) != CD_STAT_NODISC) && ((cd_stat & 0x0f00) != CD_STAT_OPEN)) hirqreg |= SCDQ; diff --git a/src/mame/drivers/saturn.cpp b/src/mame/drivers/saturn.cpp index 94a6309610c..3605cc72880 100644 --- a/src/mame/drivers/saturn.cpp +++ b/src/mame/drivers/saturn.cpp @@ -463,26 +463,50 @@ public: void saturnjp(machine_config &config); void saturneu(machine_config &config); void saturnus(machine_config &config); + void saturnkr(machine_config &config); - void init_saturnus(); - void init_saturneu(); - void init_saturnjp(); + template void init_saturn(); DECLARE_INPUT_CHANGED_MEMBER(tray_open); DECLARE_INPUT_CHANGED_MEMBER(tray_close); private: - DECLARE_MACHINE_START(saturn); DECLARE_MACHINE_RESET(saturn); + // SMPC region codes, hardwired via jumper setting. + // - Given the scheme bit 3 should determine if the region is PAL or NTSC. + // - 0 and F are "prohibited", others are "Sega reserved". + // - Documentation states that 2 is "TAIWAN" and 6 is "KOREA", + // but games on latter definitely wants 2 rather than 6. + // We currently swap, former actual slot needs to be confirmed. + enum { + REGION_NTSC_0 = 0, + REGION_NTSC_JAPAN, +// REGION_NTSC_TAIWAN, + REGION_NTSC_KOREA, + REGION_NTSC_3, + REGION_NTSC_USA, // & Canada, Mexico + REGION_NTSC_BRAZIL, +// REGION_NTSC_KOREA, + REGION_NTSC_TAIWAN, // & Philippines + REGION_NTSC_7, + REGION_PAL_8, + REGION_PAL_9, + REGION_PAL_ASIA, // China, Middle East, East Asia not covered above + REGION_PAL_B, + REGION_PAL_EUROPE, // Australia, South Africa + REGION_PAL_AMERICA, // Non-NTSC Central/South America + REGION_PAL_E, + REGION_PAL_F + }; + uint8_t saturn_cart_type_r(); uint32_t abus_dummy_r(offs_t offset); uint32_t saturn_null_ram_r(); void saturn_null_ram_w(uint32_t data); - void saturn_init_driver(int rgn); uint8_t saturn_pdr1_direct_r(); uint8_t saturn_pdr2_direct_r(); void saturn_pdr1_direct_w(uint8_t data); @@ -548,7 +572,7 @@ void sat_console_state::saturn_mem(address_map &map) map(0x05f80000, 0x05fbffff).rw(FUNC(sat_console_state::saturn_vdp2_regs_r), FUNC(sat_console_state::saturn_vdp2_regs_w)); map(0x05fe0000, 0x05fe00cf).m(m_scu, FUNC(sega_scu_device::regs_map)); //rw(FUNC(sat_console_state::saturn_scu_r), FUNC(sat_console_state::saturn_scu_w)); map(0x06000000, 0x060fffff).ram().mirror(0x21f00000).share("workram_h"); - map(0x45000000, 0x46ffffff).nopw(); + map(0x40000000, 0x46ffffff).nopw(); // associative purge page map(0x60000000, 0x600003ff).nopw(); // cache address array map(0xc0000000, 0xc0000fff).ram(); // cache data array, Dragon Ball Z sprites relies on this } @@ -884,7 +908,7 @@ void sat_console_state::saturnus(machine_config &config) SATURN_CART_SLOT(config, "exp", saturn_cart, nullptr); SOFTWARE_LIST(config, "cart_list").set_original("sat_cart"); - m_smpc_hle->set_region_code(4); + m_smpc_hle->set_region_code(REGION_NTSC_USA); } void sat_console_state::saturneu(machine_config &config) @@ -897,7 +921,7 @@ void sat_console_state::saturneu(machine_config &config) SATURN_CART_SLOT(config, "exp", saturn_cart, nullptr); SOFTWARE_LIST(config, "cart_list").set_original("sat_cart"); - m_smpc_hle->set_region_code(12); + m_smpc_hle->set_region_code(REGION_PAL_EUROPE); } void sat_console_state::saturnjp(machine_config &config) @@ -910,13 +934,27 @@ void sat_console_state::saturnjp(machine_config &config) SATURN_CART_SLOT(config, "exp", saturn_cart, nullptr); SOFTWARE_LIST(config, "cart_list").set_original("sat_cart"); - m_smpc_hle->set_region_code(1); + m_smpc_hle->set_region_code(REGION_NTSC_JAPAN); +} + +void sat_console_state::saturnkr(machine_config &config) +{ + saturn(config); + SATURN_CDB(config, "saturn_cdb", 16000000); + + SOFTWARE_LIST(config, "cd_list").set_original("saturn").set_filter("NTSC-K"); + + SATURN_CART_SLOT(config, "exp", saturn_cart, nullptr); + SOFTWARE_LIST(config, "cart_list").set_original("sat_cart"); + + m_smpc_hle->set_region_code(REGION_NTSC_KOREA); } -void sat_console_state::saturn_init_driver(int rgn) +template void sat_console_state::init_saturn() { - m_vdp2.pal = (rgn == 12) ? 1 : 0; + // TODO: setter for (missing) VDP2 device + m_vdp2.pal = is_pal; // set compatible options m_maincpu->sh2drc_set_options(SH2DRC_STRICT_VERIFY|SH2DRC_STRICT_PCREL); @@ -939,25 +977,8 @@ void sat_console_state::saturn_init_driver(int rgn) m_backupram = make_unique_clear(0x8000); } -void sat_console_state::init_saturnus() -{ - saturn_init_driver(4); -} - -void sat_console_state::init_saturneu() -{ - saturn_init_driver(12); -} - -void sat_console_state::init_saturnjp() -{ - saturn_init_driver(1); -} - - -/* Japanese Saturn */ -ROM_START(saturnjp) - ROM_REGION32_BE( 0x80000, "bios", ROMREGION_ERASEFF ) /* SH2 code */ +ROM_START( saturnjp ) + ROM_REGION32_BE( 0x80000, "bios", ROMREGION_ERASEFF ) ROM_SYSTEM_BIOS(0, "101", "Japan v1.01 (941228)") ROMX_LOAD("sega_101.bin", 0x00000000, 0x00080000, CRC(224b752c) SHA1(df94c5b4d47eb3cc404d88b33a8fda237eaf4720), ROM_BIOS(0)) ROM_SYSTEM_BIOS(1, "1003", "Japan v1.003 (941012)") @@ -966,9 +987,8 @@ ROM_START(saturnjp) ROMX_LOAD("sega_100.bin", 0x00000000, 0x00080000, CRC(2aba43c2) SHA1(2b8cb4f87580683eb4d760e4ed210813d667f0a2), ROM_BIOS(2)) ROM_END -/* Overseas Saturn */ -ROM_START(saturn) - ROM_REGION32_BE( 0x80000, "bios", ROMREGION_ERASEFF ) /* SH2 code */ +ROM_START( saturn ) + ROM_REGION32_BE( 0x80000, "bios", ROMREGION_ERASEFF ) ROM_SYSTEM_BIOS(0, "101a", "Overseas v1.01a (941115)") /* Confirmed by ElBarto */ ROMX_LOAD("mpr-17933.bin", 0x00000000, 0x00080000, CRC(4afcf0fa) SHA1(faa8ea183a6d7bbe5d4e03bb1332519800d3fbc3), ROM_BIOS(0)) @@ -976,8 +996,8 @@ ROM_START(saturn) ROMX_LOAD("sega_100a.bin", 0x00000000, 0x00080000, CRC(f90f0089) SHA1(3bb41feb82838ab9a35601ac666de5aacfd17a58), ROM_BIOS(1)) ROM_END -ROM_START(saturneu) - ROM_REGION32_BE( 0x80000, "bios", ROMREGION_ERASEFF ) /* SH2 code */ +ROM_START( saturneu ) + ROM_REGION32_BE( 0x80000, "bios", ROMREGION_ERASEFF ) ROM_SYSTEM_BIOS(0, "101a", "Overseas v1.01a (941115)") /* Confirmed by ElBarto */ ROMX_LOAD("mpr-17933.bin", 0x00000000, 0x00080000, CRC(4afcf0fa) SHA1(faa8ea183a6d7bbe5d4e03bb1332519800d3fbc3), ROM_BIOS(0)) @@ -985,13 +1005,20 @@ ROM_START(saturneu) ROMX_LOAD("sega_100a.bin", 0x00000000, 0x00080000, CRC(f90f0089) SHA1(3bb41feb82838ab9a35601ac666de5aacfd17a58), ROM_BIOS(1)) ROM_END -ROM_START(vsaturn) - ROM_REGION32_BE( 0x80000, "bios", ROMREGION_ERASEFF ) /* SH2 code */ +ROM_START( saturnkr ) + ROM_REGION32_BE( 0x80000, "bios", ROMREGION_ERASEFF ) + // undumped, uses Japanese VA1 motherboard with v1.02a BIOS rev, + // with extra checks for region jumpers that disables Japanese language if setting matches '2' (no Korea option tho) + ROM_LOAD("sega_101.bin", 0x00000000, 0x00080000, BAD_DUMP CRC(224b752c) SHA1(df94c5b4d47eb3cc404d88b33a8fda237eaf4720) ) +ROM_END + +ROM_START( vsaturn ) + ROM_REGION32_BE( 0x80000, "bios", ROMREGION_ERASEFF ) ROM_LOAD("vsaturn.bin", 0x00000000, 0x00080000, CRC(e4d61811) SHA1(4154e11959f3d5639b11d7902b3a393a99fb5776)) ROM_END -ROM_START(hisaturn) - ROM_REGION32_BE( 0x80000, "bios", ROMREGION_ERASEFF ) /* SH2 code */ +ROM_START( hisaturn ) + ROM_REGION32_BE( 0x80000, "bios", ROMREGION_ERASEFF ) ROM_SYSTEM_BIOS(0, "102", "v1.02 (950519)") ROMX_LOAD("mpr-18100.bin", 0x000000, 0x080000, CRC(3408dbf4) SHA1(8a22710e09ce75f39625894366cafe503ed1942d), ROM_BIOS(0)) ROM_SYSTEM_BIOS(1, "101", "v1.01 (950130)") @@ -999,8 +1026,9 @@ ROM_START(hisaturn) ROM_END /* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */ -CONS( 1994, saturn, 0, 0, saturnus, saturn, sat_console_state, init_saturnus, "Sega", "Saturn (USA)", MACHINE_NOT_WORKING ) -CONS( 1994, saturnjp, saturn, 0, saturnjp, saturn, sat_console_state, init_saturnjp, "Sega", "Saturn (Japan)", MACHINE_NOT_WORKING ) -CONS( 1994, saturneu, saturn, 0, saturneu, saturn, sat_console_state, init_saturneu, "Sega", "Saturn (PAL)", MACHINE_NOT_WORKING ) -CONS( 1995, vsaturn, saturn, 0, saturnjp, saturn, sat_console_state, init_saturnjp, "JVC", "V-Saturn", MACHINE_NOT_WORKING ) -CONS( 1995, hisaturn, saturn, 0, saturnjp, saturn, sat_console_state, init_saturnjp, "Hitachi", "HiSaturn", MACHINE_NOT_WORKING ) +CONS( 1994, saturn, 0, 0, saturnus, saturn, sat_console_state, init_saturn, "Sega", "Saturn (USA)", MACHINE_NOT_WORKING ) +CONS( 1994, saturnjp, saturn, 0, saturnjp, saturn, sat_console_state, init_saturn, "Sega", "Saturn (Japan)", MACHINE_NOT_WORKING ) +CONS( 1994, saturneu, saturn, 0, saturneu, saturn, sat_console_state, init_saturn, "Sega", "Saturn (PAL)", MACHINE_NOT_WORKING ) +CONS( 1995, saturnkr, saturn, 0, saturnkr, saturn, sat_console_state, init_saturn, "Samsung", "Saturn (Korea)", MACHINE_NOT_WORKING ) +CONS( 1995, vsaturn, saturn, 0, saturnjp, saturn, sat_console_state, init_saturn, "JVC", "V-Saturn", MACHINE_NOT_WORKING ) +CONS( 1995, hisaturn, saturn, 0, saturnjp, saturn, sat_console_state, init_saturn, "Hitachi", "HiSaturn", MACHINE_NOT_WORKING ) diff --git a/src/mame/mame.lst b/src/mame/mame.lst index a3ebb528f54..6d1b6521470 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -36970,6 +36970,7 @@ hisaturn // Hitachi HiSaturn saturn // 1995 Sega Saturn (USA) saturneu // 1995 Sega Saturn (Europe) saturnjp // 1994 Sega Saturn (Japan) +saturnkr // 1995 Samsung Saturn (Korea) vsaturn // JVC V-Saturn @source:sauro.cpp