diff --git a/hash/adam_flop.xml b/hash/adam_flop.xml index 8eb456f0b3656..a65b3573ca32d 100644 --- a/hash/adam_flop.xml +++ b/hash/adam_flop.xml @@ -3,7 +3,7 @@ - + - + diff --git a/hash/brother_pn.xml b/hash/brother_pn.xml index 28b0c240f4d9c..f033b60e12a8a 100644 --- a/hash/brother_pn.xml +++ b/hash/brother_pn.xml @@ -17,7 +17,7 @@ and data storage disk --> - + diff --git a/hash/gba.xml b/hash/gba.xml index 42848097c48fe..3f94de56984ff 100644 --- a/hash/gba.xml +++ b/hash/gba.xml @@ -37028,7 +37028,7 @@ Hangs during cutscene after beating Maxim for best ending path (i.e. before real Ultimate Muscle - The Kinnikuman Legacy - The Path of the Superhero (USA, prototype, 20030429) 2003 Bandai - + diff --git a/hash/gbcolor.xml b/hash/gbcolor.xml index da5cfa14249ed..ce4da608a90a7 100644 --- a/hash/gbcolor.xml +++ b/hash/gbcolor.xml @@ -10021,7 +10021,7 @@ license:CC0-1.0 - + @@ -10038,7 +10038,7 @@ license:CC0-1.0 - + @@ -28277,7 +28277,7 @@ license:CC0-1.0 used here repeated twice. we need to redump the standalone cart to confirm the size but the 256KB version is definitely underdumped and misses sprite data --> - Super Mario 3 Special (China) + Super Mario 3 Special (China) 2000 Yong Yong diff --git a/hash/ibm5150.xml b/hash/ibm5150.xml index 933fc7a14afd7..93dc04c31a7fe 100644 --- a/hash/ibm5150.xml +++ b/hash/ibm5150.xml @@ -3851,7 +3851,7 @@ Fatal error: Incorrect layout on track 39 head 0, expected_size=100000, current_ - Olivetti Prodest PC1 coverdisk (Anno 1 - N. 1, Dicembre 1987-Gennaio '88) + Olivetti Prodest PC1 coverdisk (Anno 1 - N. 1, Dicembre 1987-Gennaio '88) 1987 Gruppo Editoriale JCE @@ -16652,7 +16652,7 @@ Gin King and Cribbage King: prints "packet file is corrupt" after selection in b - + diff --git a/hash/megadriv.xml b/hash/megadriv.xml index f33cdad7bab34..d542f9363d986 100644 --- a/hash/megadriv.xml +++ b/hash/megadriv.xml @@ -10079,7 +10079,7 @@ but dumps still have to be confirmed. --> - Shísān Zhāng Májiàng - 98 Měi Shàonǚ (Taiwan) + Shísān Zhāng Májiàng - 98 Měi Shàonǚ (Taiwan) 1998 BBD @@ -33868,7 +33868,7 @@ Black screen - + Beggar Prince (Europe, USA) 2005 Super Fighter Team diff --git a/hash/mindset_flop.xml b/hash/mindset_flop.xml index 0dbcbdb9eec78..3a1368257ca63 100644 --- a/hash/mindset_flop.xml +++ b/hash/mindset_flop.xml @@ -4,7 +4,7 @@ license:CC0-1.0 --> - + Vyper 1984 diff --git a/hash/msx1_cart.xml b/hash/msx1_cart.xml index e3cd67d6a24cb..5ded8f9d40285 100644 --- a/hash/msx1_cart.xml +++ b/hash/msx1_cart.xml @@ -26046,21 +26046,21 @@ legacy FM implementations cannot find it. - + - + - + @@ -26073,21 +26073,21 @@ legacy FM implementations cannot find it. - + - + - + @@ -27049,7 +27049,7 @@ legacy FM implementations cannot find it. - + @@ -27062,7 +27062,7 @@ legacy FM implementations cannot find it. - + @@ -27075,7 +27075,7 @@ legacy FM implementations cannot find it. - + @@ -27088,7 +27088,7 @@ legacy FM implementations cannot find it. - + @@ -27101,7 +27101,7 @@ legacy FM implementations cannot find it. - + @@ -27114,7 +27114,7 @@ legacy FM implementations cannot find it. - + @@ -27127,7 +27127,7 @@ legacy FM implementations cannot find it. - + @@ -27140,7 +27140,7 @@ legacy FM implementations cannot find it. - + diff --git a/hash/msx1_cass.xml b/hash/msx1_cass.xml index bf951869dbe0e..c43017f2411c1 100644 --- a/hash/msx1_cass.xml +++ b/hash/msx1_cass.xml @@ -18982,7 +18982,7 @@ Side B - + diff --git a/hash/msx2_cart.xml b/hash/msx2_cart.xml index 83380c4841131..7d4c787d4b757 100644 --- a/hash/msx2_cart.xml +++ b/hash/msx2_cart.xml @@ -3582,6 +3582,26 @@ LZ93A13 (32 pin) - 8KB banks + + Video Digitizer (Japan) + 1989 + Sony + Digitizer cartridge not emulated. + + + + + + + + + + + + + + + Japanese MSX-Write II (Japan) @@ -3827,6 +3847,74 @@ LZ93A13 (32 pin) - 8KB banks + + MEGA-SCSI (1024KB) + 1995 + ESE Artists' Factory + + + + + + + + + + + + + + + MEGA-SCSI (512KB) + 1995 + ESE Artists' Factory + + + + + + + + + + + + + + + MEGA-SCSI (256KB) + 1995 + ESE Artists' Factory + + + + + + + + + + + + + + + MEGA-SCSI (128KB) + 1995 + ESE Artists' Factory + + + + + + + + + + + + + @@ -3980,6 +4068,19 @@ LZ93A13 (32 pin) - 8KB banks + + DSKPRO (v11.6) + 2017 + Pirates do Caribe + + + + + + + + + Equivocal (v1.5) 2009 diff --git a/hash/msx2_flop.xml b/hash/msx2_flop.xml index a1441fa32a256..5040413f76d4f 100644 --- a/hash/msx2_flop.xml +++ b/hash/msx2_flop.xml @@ -19659,7 +19659,7 @@ HOMEBREW - Final Graphics (Germany, v2.0) + Final Graphics (Germany, v2.0) 1989 H.S.H. Computer diff --git a/hash/next_hdd.xml b/hash/next_hdd.xml index ca35cdd8a605c..50bb62bb378c0 100644 --- a/hash/next_hdd.xml +++ b/hash/next_hdd.xml @@ -3,7 +3,7 @@ - + Compton's Interactive Encyclopedia v2.00S (USA) - 1994 + 1994 Compton's NewMedia diff --git a/hash/snes.xml b/hash/snes.xml index 6601b68516e80..54a268a69bd70 100644 --- a/hash/snes.xml +++ b/hash/snes.xml @@ -47978,7 +47978,7 @@ List of unclassified roms - + diff --git a/hash/spectrum_cass.xml b/hash/spectrum_cass.xml index 8de2f7056c2ec..80016eb6278ec 100644 --- a/hash/spectrum_cass.xml +++ b/hash/spectrum_cass.xml @@ -467,6 +467,7 @@ license:CC0-1.0 Army Moves (Spanish, set 1, medium case) 1987 Dinamic Software + @@ -485,6 +486,7 @@ license:CC0-1.0 Army Moves (set 1, Imagine) 1987 Imagine Software + @@ -503,6 +505,7 @@ license:CC0-1.0 Army Moves (English, set 2, Summit) 1987 Summit Software + @@ -521,6 +524,7 @@ license:CC0-1.0 Army Moves (Spanish, set 2, small black case) 1987 Dinamic Software + @@ -539,6 +543,7 @@ license:CC0-1.0 Army Moves (Spanish, set 3, small orange case) 1988 Dinamic Software + @@ -557,6 +562,7 @@ license:CC0-1.0 Army Moves (Spanish, set 1) 1987 Imagine Software + @@ -1358,6 +1364,7 @@ license:CC0-1.0 Altair ZX (set 1, English) 2014 Inmensa Bola de Manteca + @@ -1369,6 +1376,7 @@ license:CC0-1.0 Altair ZX (set 2, Spanish) 2014 Inmensa Bola de Manteca + @@ -1380,6 +1388,7 @@ license:CC0-1.0 Altair (set 3, release 2, English) 2014 Inmensa Bola de Manteca + @@ -1391,6 +1400,7 @@ license:CC0-1.0 Altair (set 4, release 2, Spanish) 2014 Inmensa Bola de Manteca + @@ -1402,6 +1412,7 @@ license:CC0-1.0 Altair (set 5, English) 2014 Inmensa Bola de Manteca + @@ -1413,6 +1424,7 @@ license:CC0-1.0 Altair (set 6, Spanish) 2014 Inmensa Bola de Manteca + @@ -1422,9 +1434,9 @@ license:CC0-1.0 - The Arc of Yesod (128k release) + The Arc of Yesod (128K release) 1985 - Thor Computer + Thor Computer Software @@ -1433,9 +1445,9 @@ license:CC0-1.0 - The Arc of Yesod (48k release) + The Arc of Yesod (48K release) 1985 - <unknown> + Thor Computer Software @@ -1489,8 +1501,8 @@ license:CC0-1.0 Alien Highway (set 3) - 19?? - <unknown> + 1986 + Vortex @@ -1500,8 +1512,8 @@ license:CC0-1.0 Alien Highway (set 4, Americana) - 19?? - <unknown> + 1986 + Americana Software @@ -2035,7 +2047,7 @@ Run on TC 2048 or ZX Spectrum Adventure A: Planet of Death (set 2, Sinclair) 1982 - Artic Computing / Sinclair Research + Sinclair Research @@ -2046,7 +2058,7 @@ Run on TC 2048 or ZX Spectrum Adventure A: Planet of Death (set 3, Profisoft) 1982 - Artic Computing / Profisoft + Profisoft @@ -2079,7 +2091,7 @@ Run on TC 2048 or ZX Spectrum Adventure B: Inca Curse (set 3, Sinclair) 1982 - Artic Computing / Sinclair + Sinclair @@ -2101,7 +2113,7 @@ Run on TC 2048 or ZX Spectrum Adventure C: The Ship of Doom (set 2, Sinclair) 1982 - Artic Computing / Sinclair + Sinclair @@ -5007,7 +5019,7 @@ no loading screen, no custom loader - Bobby Carrot (set 1, v1.01, 128k) + Bobby Carrot (set 1, v1.01, 128K) 2018 Aleksey Golubtsov @@ -5018,7 +5030,7 @@ no loading screen, no custom loader - Bobby Carrot (set 2, v1.01, 128k) + Bobby Carrot (set 2, v1.01, 128K) 2018 Aleksey Golubtsov @@ -5029,7 +5041,7 @@ no loading screen, no custom loader - Bobby Carrot (set 3, v1.01, 48k) + Bobby Carrot (set 3, v1.01, 48K) 2018 Aleksey Golubtsov @@ -5040,7 +5052,7 @@ no loading screen, no custom loader - Bobby Carrot (set 4, v1.01, 48k) + Bobby Carrot (set 4, v1.01, 48K) 2018 Aleksey Golubtsov @@ -5140,7 +5152,7 @@ no loading screen, no custom loader - Bomberman(demo, v03) + Bomberman (demo, v03) 2016 Cristian Gonzalez @@ -5604,6 +5616,66 @@ no loading screen, no custom loader + + Cocoa and the Time Machine (128K, English) + 2020 + Minilop Retroware + + + + + + + + + + Cocoa and the Time Machine (128K, Spanish) + 2020 + Minilop Retroware + + + + + + + + + + Cocoa and the Time Machine (48K, English) + 2020 + Minilop Retroware + + + + + + + + + + Cocoa and the Time Machine (48K, Portuguese) + 2020 + Minilop Retroware + + + + + + + + + + Cocoa and the Time Machine (48K, Spanish) + 2020 + Minilop Retroware + + + + + + + + Con-Quest @@ -6572,7 +6644,7 @@ no loading screen, no custom loader - + Collywobbles 1987 Pirate Software Ltd @@ -6965,7 +7037,7 @@ no loading screen, no custom loader - Cheril The Goddess (TZX tape image) + Cheril The Goddess (TZX tape image) 2012 The Mojon Twins @@ -8018,10 +8090,11 @@ no loading screen, no custom loader - Dr Doom's Revenge! (Proein) (Spanish) + Dr Doom's Revenge! (Proein) 1989 Proein Soft Line + @@ -8052,7 +8125,7 @@ no loading screen, no custom loader - Dragon Slayer (Martin Freemantle, 128k) + Dragon Slayer (Martin Freemantle, 128K) 1992 Dream World Adventures / Martin Freemantle @@ -8063,7 +8136,7 @@ no loading screen, no custom loader - Dragon Slayer (Martin Freemantle, 48k, single sided) + Dragon Slayer (Martin Freemantle, 48K, single sided) 1992 Dream World Adventures / Martin Freemantle @@ -8074,7 +8147,7 @@ no loading screen, no custom loader - Dragon Slayer (Martin Freemantle, 48k, double sided) + Dragon Slayer (Martin Freemantle, 48K, double sided) 1992 Dream World Adventures / Martin Freemantle @@ -9329,7 +9402,7 @@ no loading screen, no custom loader - Double Bubble (set 1, 128k, Music Version) + Double Bubble (set 1, 128K, Music Version) 2016 Miguetelo @@ -9340,7 +9413,7 @@ no loading screen, no custom loader - Double Bubble (set 2, 128k, Music Version) + Double Bubble (set 2, 128K, Music Version) 2016 Miguetelo @@ -9351,7 +9424,7 @@ no loading screen, no custom loader - Double Bubble (set 3, 48k) + Double Bubble (set 3, 48K) 2016 Miguetelo @@ -9362,7 +9435,7 @@ no loading screen, no custom loader - Double Bubble (set 4, 48k) + Double Bubble (set 4, 48K) 2016 Miguetelo @@ -9373,7 +9446,7 @@ no loading screen, no custom loader - Dead Flesh Boy (set 1, v2) + Dead Flesh Boy (v2, TZX tape image) 2015 Vanbsoftware @@ -9384,7 +9457,7 @@ no loading screen, no custom loader - Dead Flesh Boy (set 2, v2) + Dead Flesh Boy (v2, TAP tape image) 2015 Vanbsoftware @@ -9395,7 +9468,7 @@ no loading screen, no custom loader - Dead Flesh Boy (set 3, v1) + Dead Flesh Boy (v1) 2015 Vanbsoftware @@ -9406,7 +9479,7 @@ no loading screen, no custom loader - Dead Flesh Boy (set 4, v1, no loading screen) + Dead Flesh Boy (v1, no loading screen) 2015 Vanbsoftware @@ -10158,7 +10231,7 @@ Expects you to press a key after the title screen appears, or it will miss the n - Fairlight (128k) + Fairlight (128K) 1985 The Edge @@ -10169,7 +10242,7 @@ Expects you to press a key after the title screen appears, or it will miss the n - Fairlight (48k, Release 1) + Fairlight (48K, release 1) 1985 The Edge @@ -10180,7 +10253,7 @@ Expects you to press a key after the title screen appears, or it will miss the n - Fairlight (48k, Release 2) + Fairlight (48K, release 2) 1985 The Edge @@ -10202,7 +10275,7 @@ Expects you to press a key after the title screen appears, or it will miss the n - Fairlight II (128k) + Fairlight II (128K) 1986 The Edge @@ -10213,7 +10286,7 @@ Expects you to press a key after the title screen appears, or it will miss the n - Fairlight II (48k) + Fairlight II (48K) 1986 The Edge @@ -11511,30 +11584,29 @@ Expects you to press a key after the title screen appears, or it will miss the n - - - Game Over (Imagine) - 1987 - Dinamic / Imagine + Game Over (Spanish, small orange case) + 1988 + Dinamic + - - + + - - + + Game Over (Summit) - 19?? - Dinamic / Summit + 1987 + Summit Software @@ -11551,8 +11623,9 @@ Expects you to press a key after the title screen appears, or it will miss the n Game Over (Spanish, black small cassette / black case) - 19?? + 1987 Dinamic + @@ -11568,19 +11641,19 @@ Expects you to press a key after the title screen appears, or it will miss the n - Game Over (Spanish, small orange case) - 19?? - Dinamic + Game Over (Imagine) + 1987 + Imagine - - + + - - + + @@ -11601,7 +11674,6 @@ Expects you to press a key after the title screen appears, or it will miss the n - Ghosts 'n Goblins (set 1) 1986 @@ -11664,7 +11736,7 @@ Expects you to press a key after the title screen appears, or it will miss the n - Ghostbusters (set 1, 128k) + Ghostbusters (set 1, 128K) 1984 Activision @@ -11675,7 +11747,7 @@ Expects you to press a key after the title screen appears, or it will miss the n - Ghostbusters (set 2, 128k) + Ghostbusters (set 2, 128K) 1984 Activision @@ -11686,7 +11758,7 @@ Expects you to press a key after the title screen appears, or it will miss the n - Ghostbusters (set 1, 48k) + Ghostbusters (set 1, 48K) 1984 Activision @@ -11697,7 +11769,7 @@ Expects you to press a key after the title screen appears, or it will miss the n - Ghostbusters (set 2, 48k) + Ghostbusters (set 2, 48K) 1984 Activision @@ -13339,9 +13411,9 @@ Expects you to press a key after the title screen appears, or it will miss the n - Hacker (set 5, 128k) - 19?? - <unknown> + Hacker (set 5, 128K) + 1985 + Activision @@ -13350,9 +13422,9 @@ Expects you to press a key after the title screen appears, or it will miss the n - Hacker (set 6, 48k) - 19?? - <unknown> + Hacker (set 6, 48K) + 1985 + Activision @@ -13371,8 +13443,6 @@ Expects you to press a key after the title screen appears, or it will miss the n - - Hacker 2 1987 @@ -13905,6 +13975,7 @@ Expects you to press a key after the title screen appears, or it will miss the n The Hobbit (Vah-ka's Cut) (English, TZX tape image) 2013 The Mojon Twins + @@ -13916,6 +13987,7 @@ Expects you to press a key after the title screen appears, or it will miss the n The Hobbit (Vah-ka's Cut) (English, TAP tape image) 2013 The Mojon Twins + @@ -13927,6 +13999,7 @@ Expects you to press a key after the title screen appears, or it will miss the n El Hobbit (Vah-ka's Cut) (Spanish, TZX tape image) 2013 The Mojon Twins + @@ -13938,6 +14011,7 @@ Expects you to press a key after the title screen appears, or it will miss the n El Hobbit (Vah-ka's Cut) (Spanish, TAP tape image) 2013 The Mojon Twins + @@ -14030,6 +14104,17 @@ Expects you to press a key after the title screen appears, or it will miss the n Inspector Gadget and the Circus of Fear 1987 + Melbourne House + + + + + + + + + Inspector Gadget and the Circus of Fear (Erbe) + 1987 Erbe Software @@ -16364,11 +16449,13 @@ Side B: Laser Shoot (original release) Unreleased original 1987 version of Cozumel by Samusoft, freebie for Spanish Retro Gamer subscribers. Later reissued by Matra in 2015 without the Retro Gamer branding. --> - La Diosa de Cozumel (Samusoft, Retro Gamer) + La Diosa de Cozumel (Retro Gamer edition) 2013 - Axel Springer / Matra + Axel Springer / Matra Computer Automations + - + + @@ -16376,6 +16463,21 @@ Side B: Laser Shoot (original release) + + La Diosa de Cozumel (Matra edition) + 2015 + Matra Computer Automations + + + + + + + + + + + Little Puff 1989 @@ -17470,7 +17572,7 @@ Side B: Laser Shoot (original release) - Microprose Soccer (Release 2 - 128k) + Microprose Soccer (release 2 - 128K) 1989 MicroProse Software @@ -17488,7 +17590,7 @@ Side B: Laser Shoot (original release) - Microprose Soccer (Release 2 - 48k) + Microprose Soccer (release 2 - 48K) 1989 MicroProse Software @@ -17506,7 +17608,7 @@ Side B: Laser Shoot (original release) - Microprose Soccer (Release 1) + Microprose Soccer (release 1) 1989 MicroProse Software @@ -17526,7 +17628,7 @@ Side B: Laser Shoot (original release) Microprose Soccer (Kixx) 1989 - MicroProse Software Ltd / Kixx + Kixx @@ -17628,7 +17730,7 @@ Side B: Laser Shoot (original release) - More Tea Vicar (128k version) + More Tea Vicar (128K version) 2012 Cronosoft @@ -17639,7 +17741,7 @@ Side B: Laser Shoot (original release) - More Tea Vicar (48k version) + More Tea Vicar (48K version) 2012 Cronosoft @@ -18848,6 +18950,7 @@ Side B: Laser Shoot (original release) Maritrini, Freelance Monster Slayer en: Las Increibles Vicisitudes de Despertarse Resacosa con Fred en la Cama y Tener que Llegar Mas o Menos Puntual a la Prueba de "Monstruos Vigorosos de Pechos Lustrosos" featuring Los Fratelli (English, set 1) 2012 The Mojon Twins + @@ -18859,6 +18962,7 @@ Side B: Laser Shoot (original release) Maritrini, Freelance Monster Slayer en: Las Increibles Vicisitudes de Despertarse Resacosa con Fred en la Cama y Tener que Llegar Mas o Menos Puntual a la Prueba de "Monstruos Vigorosos de Pechos Lustrosos" featuring Los Fratelli (English, set 2) 19?? <unknown> + @@ -18870,6 +18974,7 @@ Side B: Laser Shoot (original release) Maritrini, Freelance Monster Slayer en: Las Increibles Vicisitudes de Despertarse Resacosa con Fred en la Cama y Tener que Llegar Mas o Menos Puntual a la Prueba de "Monstruos Vigorosos de Pechos Lustrosos" featuring Los Fratelli (Spanish, set 1) 2012 The Mojon Twins + @@ -18881,6 +18986,7 @@ Side B: Laser Shoot (original release) Maritrini, Freelance Monster Slayer en: Las Increibles Vicisitudes de Despertarse Resacosa con Fred en la Cama y Tener que Llegar Mas o Menos Puntual a la Prueba de "Monstruos Vigorosos de Pechos Lustrosos" featuring Los Fratelli (Spanish, set 2) 2012 The Mojon Twins + @@ -19143,9 +19249,9 @@ Side B: Laser Shoot (original release) - Mysterious Dimensions - 19?? - <unknown> + Mysterious Dimensions (128K) + 2016 + Hooy-Program @@ -19153,8 +19259,19 @@ Side B: Laser Shoot (original release) + + Mysterious Dimensions (48K) + 2016 + Hooy-Program + + + + + + + - Mystery (set 1, 128k version) + Mystery (128K version) 2014 kas29 @@ -19165,7 +19282,7 @@ Side B: Laser Shoot (original release) - Mystery (set 2, 48k version) + Mystery (48K version) 2014 kas29 @@ -19211,6 +19328,7 @@ Side B: Laser Shoot (original release) Nonamed 1989 Mastertronic + @@ -19222,6 +19340,7 @@ Side B: Laser Shoot (original release) Nonamed (Spanish, medium case) 1987 Dinamic Software + @@ -19233,6 +19352,7 @@ Side B: Laser Shoot (original release) Nonamed (Spanish, medium case, alt) 1987 Dinamic Software + @@ -19244,6 +19364,7 @@ Side B: Laser Shoot (original release) Nonamed (Spanish, small orange case) 1988 Dinamic Software + @@ -19255,6 +19376,7 @@ Side B: Laser Shoot (original release) Nonamed (Spanish, small case - black spine) 1988 Dinamic Software + @@ -19610,7 +19732,7 @@ Side B: Laser Shoot (original release) - Nodes of Yesod (128k release) + Nodes of Yesod (128K release) 1985 Odin Computer Graphics Ltd @@ -19621,7 +19743,7 @@ Side B: Laser Shoot (original release) - Nodes of Yesod (48k release) + Nodes of Yesod (48K release) 1985 Odin Computer Graphics Ltd @@ -20454,7 +20576,7 @@ Side B: Laser Shoot (original release) - Outcast (set 1) + Outcast 1987 CRL Group @@ -20465,9 +20587,9 @@ Side B: Laser Shoot (original release) - Outcast (set 2) - 19?? - <unknown> + Outcast (alt) + 1987 + CRL Group @@ -20476,9 +20598,10 @@ Side B: Laser Shoot (original release) - Ole Toro (set 1, Spanish, medium case) + Ole, Toro (Spanish, medium case) 1986 Dinamic Software + @@ -20487,9 +20610,10 @@ Side B: Laser Shoot (original release) - Ole Toro (set 2, English, Americana) + Ole, Toro (English, Americana) 1986 - Dinamic Software / Americana + Americana + @@ -20498,9 +20622,10 @@ Side B: Laser Shoot (original release) - Ole Toro (set 3, English, Americana) + Ole, Toro (English, Americana, alt) 1986 - Dinamic Software / Americana + Americana + @@ -21055,9 +21180,9 @@ Side B: Laser Shoot (original release) - The Pyramid (GI Games) + The Pyramid (G.I. Games) 1986 - Walter Pooley (GI Games license) + Walter Pooley (G.I. Games license) @@ -21325,7 +21450,7 @@ Side B: Laser Shoot (original release) Pyracurse (Rack-It) 1986 - Hewson Consultants Ltd / Rack-It + Rack-It @@ -21957,7 +22082,7 @@ Side B: Laser Shoot (original release) - Pud Pud (set 1) + Pud Pud 1984 Ocean @@ -21967,10 +22092,10 @@ Side B: Laser Shoot (original release) - - Pud Pud (set 2, Americana) - 19?? - <unknown> + + Pud Pud (Americana) + 1986 + Americana Software @@ -21978,10 +22103,10 @@ Side B: Laser Shoot (original release) - - Pud Pud (set 3) - 19?? - <unknown> + + Pud Pud (alt) + 1984 + Ocean @@ -21989,8 +22114,8 @@ Side B: Laser Shoot (original release) - - Pud Pud (set 4, loading screen hack) + + Pud Pud (loading screen hack) 19?? hack @@ -22000,6 +22125,16 @@ Side B: Laser Shoot (original release) + + Pud Pud (Zafi Chip) + 1985 + hack + + + + + + The Prodigy (set 1) @@ -22184,7 +22319,7 @@ Side B: Laser Shoot (original release) - Phantomasa 2: In the Land of the Grunge Wizards (128k version, v2.0) + Phantomasa 2: In the Land of the Grunge Wizards (128K version, v2.0) 2006 Computer Emuzone @@ -22196,7 +22331,7 @@ Side B: Laser Shoot (original release) - Phantomasa 2: In the Land of the Grunge Wizards (48k version, v2.0) + Phantomasa 2: In the Land of the Grunge Wizards (48K version, v2.0) 2006 Computer Emuzone @@ -23286,6 +23421,28 @@ Side B: Laser Shoot (original release) + + Rival Gang + 2021 + Presh + + + + + + + + + Rival Gang EXT (demo) + 2022 + Presh + + + + + + + River Raid 1984 @@ -23300,7 +23457,7 @@ Side B: Laser Shoot (original release) River Raid (Firebird) 1984 - Activision Inc / Firebird + Firebird @@ -23322,7 +23479,7 @@ Side B: Laser Shoot (original release) Rescue On Fractalus (set 2, Mastertronic) 1986 - Activision Inc / Mastertronic + Mastertronic @@ -23332,8 +23489,8 @@ Side B: Laser Shoot (original release) Rescue On Fractalus (set 3) - 19?? - <unknown> + 1986 + Activision @@ -23341,7 +23498,6 @@ Side B: Laser Shoot (original release) - Rampage 1988 @@ -24138,9 +24294,10 @@ Side B: Laser Shoot (original release) - Ramiro, The Vampire (set 1, English) + Ramiro, The Vampire (English, TZX tape image) 2013 The Mojon Twins + @@ -24154,9 +24311,10 @@ Side B: Laser Shoot (original release) - Ramiro, The Vampire (set 2, English) + Ramiro, The Vampire (English, TAP tape image) 2013 The Mojon Twins + @@ -24170,9 +24328,10 @@ Side B: Laser Shoot (original release) - Ramire, El Vampire (set 1, Spanish) + Ramire, El Vampire (Spanish, TZX tape image) 2013 The Mojon Twins + @@ -24186,9 +24345,10 @@ Side B: Laser Shoot (original release) - Ramire, El Vampire (set 2, Spanish) + Ramire, El Vampire (Spanish, TAP tape image) 2013 The Mojon Twins + @@ -24205,6 +24365,7 @@ Side B: Laser Shoot (original release) Ramiro El Vampiro Revamp (English) 2016 The Mojon Twins + @@ -24226,6 +24387,7 @@ Side B: Laser Shoot (original release) Ramiro El Vampiro Revamp (Spanish) 2016 The Mojon Twins + @@ -24247,6 +24409,7 @@ Side B: Laser Shoot (original release) Ramiro El Vampiro Revamp (Spanish/English, double sided tape, TZX tape image) 2016 The Mojon Twins + @@ -24263,6 +24426,7 @@ Side B: Laser Shoot (original release) Ramiro El Vampiro Revamp (Spanish/English, double sided tape, WAV tape image) 2016 The Mojon Twins + @@ -24287,7 +24451,7 @@ Side B: Laser Shoot (original release) - Robots Rumble (set 1) + Robots Rumble (TZX tape image) 2018 Miguetelo @@ -24298,7 +24462,7 @@ Side B: Laser Shoot (original release) - Robots Rumble (set 2) + Robots Rumble (TAP tape image) 2018 Miguetelo @@ -24312,6 +24476,7 @@ Side B: Laser Shoot (original release) Rabbit in Nightmareland 2015 Javier Fopiani + @@ -24320,9 +24485,10 @@ Side B: Laser Shoot (original release) - Rabbit in Wonderland (128k, English/Spanish) + Rabbit in Wonderland (128K, English/Spanish) 2015 Javier Fopiani + @@ -24330,10 +24496,11 @@ Side B: Laser Shoot (original release) - - Rabbit in Wonderland (48k, Spanish) + + Rabbit in Wonderland (48K, Spanish) 2015 Javier Fopiani + @@ -24341,10 +24508,11 @@ Side B: Laser Shoot (original release) - - Rabbit in Wonderland (48k, English) + + Rabbit in Wonderland (48K, English) 2015 Javier Fopiani + @@ -24356,6 +24524,7 @@ Side B: Laser Shoot (original release) Red Planet (English) 2015 salvaKantero + @@ -24367,6 +24536,7 @@ Side B: Laser Shoot (original release) Red Planet (Spanish) 2015 salvaKantero + @@ -27252,30 +27422,30 @@ Side B: Laser Shoot (original release) - - Sgrizam (set 2, Americana) + + Sgrizam (medium case) 1986 - Americana + Dinamic Software - - + + - - Sgrizam (set 3, medium case) + + Sgrizam (Americana) 1986 - Dinamic Software + Americana - - + + - - Sgrizam (set 4, Americana) + + Sgrizam (Americana, alt) 1986 Americana @@ -27287,8 +27457,8 @@ Side B: Laser Shoot (original release) Samantha Fox Strip Poker (set 1, 128K, with 7 Card Stud) - 19?? - <unknown> + 1986 + Martech Games @@ -27357,8 +27527,8 @@ Side B: Laser Shoot (original release) Samantha Fox Strip Poker (set 6, 48K, with 7 Card Stud) - 19?? - <unknown> + 1986 + Martech Games @@ -27537,31 +27707,34 @@ Side B: Laser Shoot (original release) - Sgt. Helmet Training Day (set 1, English) + Sgt. Helmet Training Day (English, TZX tape image) 2013 The Mojon Twins + - - + + - Sgt. Helmet Training Day (set 2, English) + Sgt. Helmet Training Day (English, TAP tape image) 2013 The Mojon Twins + - - + + - Sgt. Helmet Training Day (set 3, Spanish) + Sgt. Helmet Training Day (Spanish, TAP tape image) 2013 The Mojon Twins + @@ -27570,9 +27743,10 @@ Side B: Laser Shoot (original release) - Sgt. Helmet Training Day (set 4, Spanish) + Sgt. Helmet Training Day (Spanish, TZX tape image) 2013 The Mojon Twins + @@ -27707,7 +27881,7 @@ Side B: Laser Shoot (original release) - Space Junk (set 1, 128k) + Space Junk (set 1, 128K) 2017 Miguetelo @@ -27718,7 +27892,7 @@ Side B: Laser Shoot (original release) - Space Junk (set 2, 128k) + Space Junk (set 2, 128K) 2017 Miguetelo @@ -27729,7 +27903,7 @@ Side B: Laser Shoot (original release) - Space Junk (set 3, 48k) + Space Junk (set 3, 48K) 2017 Miguetelo @@ -27740,7 +27914,7 @@ Side B: Laser Shoot (original release) - Space Junk (set 4, 48k) + Space Junk (set 4, 48K) 2017 Miguetelo @@ -27751,7 +27925,7 @@ Side B: Laser Shoot (original release) - Sewer Rage (set 1, 128k) + Sewer Rage (set 1, 128K) 2016 The Death Squad @@ -27762,7 +27936,7 @@ Side B: Laser Shoot (original release) - Sewer Rage (set 2, 48k) + Sewer Rage (set 2, 48K) 2016 The Death Squad @@ -27773,9 +27947,10 @@ Side B: Laser Shoot (original release) - Sir Froggy (set 1, English) + Sir Froggy (English) 2014 Lubiterum Studio + @@ -27784,9 +27959,10 @@ Side B: Laser Shoot (original release) - Sir Froggy (set 2, Spanish) + Sir Froggy (Spanish) 2014 Lubiterum Studio + @@ -28555,7 +28731,7 @@ Side B: Laser Shoot (original release) Terramex 1987 - Grandslam Entertainments Ltd + Grandslam Entertainments @@ -28566,7 +28742,7 @@ Side B: Laser Shoot (original release) Terramex (Bug-Byte Premier) 1987 - Grandslam Entertainments Ltd / Bug-Byte Premier + Bug-Byte Premier @@ -28577,7 +28753,7 @@ Side B: Laser Shoot (original release) Terramex (Quicksilva) 1987 - Grandslam Entertainments Ltd / Quicksilva + Quicksilva @@ -28585,6 +28761,17 @@ Side B: Laser Shoot (original release) + + Terrapins (demo) + 2017 + Allan Turvey + + + + + + + Tempest 1987 @@ -29002,7 +29189,7 @@ Side B: Laser Shoot (original release) Through The Trap Door (Alternative) 1987 - Piranha / Alternative + Alternative @@ -30656,8 +30843,8 @@ Side B: Laser Shoot (original release) Xarq (set 2) - 19?? - <unknown> + 1986 + Electric Dreams @@ -30665,11 +30852,11 @@ Side B: Laser Shoot (original release) - Xelda 1: Quest for the Golden Apple (set 1, English, ver 1.03) 2017 Andrew Dansby + @@ -30681,6 +30868,7 @@ Side B: Laser Shoot (original release) Xelda 1: Quest for the Golden Apple (set 2, English, ver 1.03a) 2017 Andrew Dansby + @@ -30692,6 +30880,7 @@ Side B: Laser Shoot (original release) Xelda 1: Quest for the Golden Apple (set 3, Russian, ver 1.03a) 2017 Andrew Dansby + @@ -30703,6 +30892,7 @@ Side B: Laser Shoot (original release) Xelda 1: Quest for the Golden Apple (set 4, Russian, ver 1.03a) 2017 Andrew Dansby + @@ -30714,6 +30904,7 @@ Side B: Laser Shoot (original release) Xelda 1: Quest for the Golden Apple (set 5, Spanish, ver 1.03a) 2017 Andrew Dansby + @@ -43028,10 +43219,8 @@ Side B: Once Upon a Lily Pad - - - ACE 2 (set 1, 128k + 48k release) + ACE 2 (set 1, 128K + 48K release) 1987 Cascade Games @@ -43047,7 +43236,7 @@ Side B: Once Upon a Lily Pad - ACE 2 (set 2, 128k + 48k release, Game Busters) + ACE 2 (set 2, 128K + 48K release, Game Busters) 1987 Gamebusters @@ -43427,24 +43616,102 @@ Side B: Once Upon a Lily Pad - - Ad Astra (Rebound) + + Ad Astra 1984 Gargoyle Games - + - - Ad Astra + + Ad Astra (Rebound) 1984 - Gargoyle Games + Rebound - + + + + + + + Ad Lunam (English) + 2021 + Zankle Soft + + + + + + + + + + + Ad Lunam (Italian) + 2021 + Zankle Soft + + + + + + + + + + + Ad Lunam (Spanish) + 2021 + Zankle Soft + + + + + + + + + + + Ad Lunam Plus (English) + 2021 + Zankle Soft + + + + + + + + + + + Ad Lunam Plus (Italian) + 2021 + Zankle Soft + + + + + + + + + + + Ad Lunam Plus (Spanish) + 2021 + Zankle Soft + + + + + @@ -44610,6 +44877,30 @@ Side B: Once Upon a Lily Pad + + Alien Girl (demo, English) + 2020 + Javier Fopiani + + + + + + + + + + Alien Girl (demo, Spanish) + 2020 + Javier Fopiani + + + + + + + + Alien Insects 1983 @@ -45754,7 +46045,8 @@ Side B: Once Upon a Lily Pad Another Brick on the Wall 2 (English version) 2005 - Compiler + Compiler Software + @@ -45764,8 +46056,9 @@ Side B: Once Upon a Lily Pad Another Brick On The Wall 2 (Spanish version) - 19?? - <unknown> + 2005 + Compiler Software + @@ -46124,10 +46417,139 @@ Side B: Once Upon a Lily Pad - - Apulija-13 v1.1 - English + + Apulija-13 (v2.1, English) + 2021 + Zankle Soft + + + + + + + + + + + + + + + + + Apulija-13 (v2.1, German) + 2021 + Zankle Soft + + + + + + + + + + + + + + + + + Apulija-13 (v2.1, French) + 2021 + Zankle Soft + + + + + + + + + + + + + + + + + Apulija-13 (v2.1, Italian) + 2021 + Zankle Soft + + + + + + + + + + + + + + + + + Apulija-13 (v2.1, Portuguese) + 2021 + Zankle Soft + + + + + + + + + + + + + + + + + Apulija-13 (v2.1, Spanish) + 2021 + Zankle Soft + + + + + + + + + + + + + + + + + Apulija-13 (v2.1, English, extra) + 2021 + Zankle Soft + To access to the extra part, you will need a secret code that will be revealed if you complete the game. + + + + + + + + + + + Apulija-13 (v1.1, English) 2013 Alessandro Grussu + @@ -46135,10 +46557,11 @@ Side B: Once Upon a Lily Pad - - Apulija-13 v1.1 - German - 19?? - <unknown> + + Apulija-13 (v1.1, German) + 2013 + Alessandro Grussu + @@ -46146,10 +46569,11 @@ Side B: Once Upon a Lily Pad - - Apulija-13 v1.1 - Italian - 19?? - <unknown> + + Apulija-13 (v1.1, Italian) + 2013 + Alessandro Grussu + @@ -46157,10 +46581,11 @@ Side B: Once Upon a Lily Pad - - Apulija-13 v1.1 - Spanish - 19?? - <unknown> + + Apulija-13 (v1.1, Spanish) + 2013 + Alessandro Grussu + @@ -46168,10 +46593,11 @@ Side B: Once Upon a Lily Pad - - Apulija-13 v1.2 - English - 19?? - <unknown> + + Apulija-13 (v1.2, English) + 2013 + Alessandro Grussu + @@ -49226,7 +49652,7 @@ Side B: Once Upon a Lily Pad - + Baron Rojo (Zafiro) 1983 Zafi Chip @@ -49428,6 +49854,7 @@ Side B: Once Upon a Lily Pad Bathyscaphe (set 1, English) 2015 Red Triangle + @@ -49439,6 +49866,7 @@ Side B: Once Upon a Lily Pad Bathyscaphe (set 2, Spanish) 2015 Red Triangle + @@ -53912,7 +54340,7 @@ Side B: Once Upon a Lily Pad - The Base (Adventure Workshop) - 128k + The Base (Adventure Workshop, 128K) 19?? <unknown> @@ -53923,7 +54351,7 @@ Side B: Once Upon a Lily Pad - The Base - 48k (set 2) + The Base (set 2, 48K) 1988 The Guild @@ -53934,7 +54362,7 @@ Side B: Once Upon a Lily Pad - The Base - 128k + The Base (128K) 1988 The Guild @@ -53945,7 +54373,7 @@ Side B: Once Upon a Lily Pad - The Base - 48k + The Base (48K) 19?? <unknown> @@ -57611,7 +58039,7 @@ Side B: Once Upon a Lily Pad - Chuck Yeager's Advanced Flight Trainer - 128k + Chuck Yeager's Advanced Flight Trainer (128K) 1989 Electronic Arts @@ -57622,7 +58050,7 @@ Side B: Once Upon a Lily Pad - Chuck Yeager's Advanced Flight Trainer - 48k + Chuck Yeager's Advanced Flight Trainer (48K) 19?? <unknown> @@ -57880,6 +58308,7 @@ Side B: Once Upon a Lily Pad City Lander (Spanish) 1983 Sinclair User + @@ -62563,25 +62992,26 @@ Side A doesn't work. - - Cybotron (Spanish) + Cybotron 1983 - Ventamatic + Micromania + - - + + - Cybotron - 19?? - <unknown> + Cybotron (Spanish) + 1983 + Ventamatic + - - + + @@ -65597,21 +66027,21 @@ Side A doesn't work. - - Demon's Revenge (MCM) + + Demon's Dream 1988 - MCM Software + Redefine Keys - - + + - + Demon's Revenge - 19?? - <unknown> + 1988 + Firebird Software @@ -65619,6 +66049,17 @@ Side A doesn't work. + + Demon's Revenge (MCM) + 1988 + MCM Software + + + + + + + Denis Through The Drinking Glass (set 3) 1983 @@ -65664,7 +66105,7 @@ Side A doesn't work. - Denizen (128k) + Denizen (128K) 1988 Players @@ -65675,7 +66116,7 @@ Side A doesn't work. - Denizen (48k) + Denizen (48K) 1988 Players @@ -65773,6 +66214,21 @@ Side A doesn't work. + + Desdobramentos de Totobola + 198? + Astor Software + + + + + + + + + + + Desensamblador (Investronica) 1982 @@ -67902,7 +68358,7 @@ Side A doesn't work. - Dr. Franky And The Monster + Dr. Franky and the Monster 1984 Virgin Games @@ -68526,7 +68982,7 @@ Side A doesn't work. - Dream Walker v1.0 - 128k - Simple Loader + Dream Walker (v1.0, 128K - simple loader) 19?? <unknown> @@ -68537,7 +68993,7 @@ Side A doesn't work. - Dream Walker v1.0 - 128k + Dream Walker (v1.0, 128K) 19?? <unknown> @@ -68548,7 +69004,7 @@ Side A doesn't work. - Dream Walker v1.0 - 48k + Dream Walker (v1.0, 48K) 19?? <unknown> @@ -68559,7 +69015,7 @@ Side A doesn't work. - Dream Walker v1.1 - 128k + Dream Walker (v1.1, 128K) 19?? <unknown> @@ -68570,7 +69026,7 @@ Side A doesn't work. - Dream Walker v1.1 - 48k + Dream Walker (v1.1, 48K) 19?? <unknown> @@ -69224,7 +69680,7 @@ Side A doesn't work. Dynamic Graphics 1983 - Procom + Procom Software @@ -69244,8 +69700,9 @@ Side A doesn't work. Dynamic Graphics (Spanish) - 19?? - <unknown> + 1983 + Procom Software + @@ -71525,7 +71982,7 @@ Side B - Game 1: The Dragonstar Trilogy Part III (Delta 4 Software) - Endzone - 48k + Endzone (48K) 1991 Sport-Sim @@ -73446,7 +73903,7 @@ Side B - Game 1: The Dragonstar Trilogy Part III (Delta 4 Software) - The Energem Enigma (GI Games) + The Energem Enigma (G.I. Games) 1990 G.I. Games @@ -73589,7 +74046,7 @@ Side B - Game 1: The Dragonstar Trilogy Part III (Delta 4 Software) - The Extricator (GI Games) + The Extricator (G.I. Games) 1991 G.I. Games @@ -73765,7 +74222,7 @@ Side B - Game 1: The Dragonstar Trilogy Part III (Delta 4 Software) - Faerie (GI Games) + Faerie (G.I. Games) 1985 G.I. Games @@ -75158,7 +75615,7 @@ Side B - Game 1: The Dragonstar Trilogy Part III (Delta 4 Software) Flappy Bird ZX 2014 - Rafal Miazga - Aleksandr Rostunov + Rafal Miazga / Aleksandr Rostunov @@ -75648,7 +76105,7 @@ Side B - Game 1: The Dragonstar Trilogy Part III (Delta 4 Software) - Football Director - 2 Player Super League (set 2, 128k) + Football Director - 2 Player Super League (set 2, 128K) 1986 D&H Games @@ -83477,6 +83934,28 @@ Tape 1 - Side B: + + Hakkenkast - The Demo Dungeon (128K) + 2022 + Minilop Retroware + + + + + + + + + Hakkenkast - The Demo Dungeon (48K) + 2022 + Minilop Retroware + + + + + + + Halley 1985 @@ -86347,7 +86826,7 @@ Tape 2: Hero Quest: Return of the Witch Lord - H.R.H. - Her Royal Highness (GI Games) + H.R.H. - Her Royal Highness (G.I. Games) 1986 G.I. Games @@ -86357,7 +86836,6 @@ Tape 2: Hero Quest: Return of the Witch Lord - HS-Compiler v1.1 (Aackosoft) 19?? @@ -87616,9 +88094,9 @@ Game 7: What's Your Name? Simulator (S.H. Eye-Tea Productions, 1994) - Implosion (set 1, 128k & 48k) + Implosion (set 1, 128K & 48K) 1987 - Cascade Games Ltd + Cascade Games @@ -87634,7 +88112,7 @@ Game 7: What's Your Name? Simulator (S.H. Eye-Tea Productions, 1994) Implosion (set 2, Alternative) 1987 - Cascade Games Ltd / Alternative + Alternative @@ -87645,7 +88123,7 @@ Game 7: What's Your Name? Simulator (S.H. Eye-Tea Productions, 1994) Implosion (set 3, System 4) 1987 - Cascade Games Ltd / System 4 + System 4 @@ -87686,6 +88164,17 @@ Game 7: What's Your Name? Simulator (S.H. Eye-Tea Productions, 1994) + + Impossabubble + 2018 + Dave Clarke + + + + + + + Impossamole 1990 @@ -88289,6 +88778,23 @@ Game 7: What's Your Name? Simulator (S.H. Eye-Tea Productions, 1994) + + Insert Coins II + 2009 + OCTOCOM + + + + + + + + + + + + + Inside Outing - Double Case (Dro Soft) 1988 @@ -89583,7 +90089,6 @@ Game 7: What's Your Name? Simulator (S.H. Eye-Tea Productions, 1994) - Itemiada 1985 @@ -89595,7 +90100,6 @@ Game 7: What's Your Name? Simulator (S.H. Eye-Tea Productions, 1994) - It's Only Rock 'n' Roll 1983 @@ -92668,7 +93172,7 @@ Created by Mark Jeffries The Jewels of Honour (set 2, Global) 1990 - Fantasy Leagues / Global Games + Global Games @@ -92684,7 +93188,7 @@ Created by Mark Jeffries The Jewels of Honour (set 3, Global) 1990 - Fantasy Leagues / Global Games + Global Games @@ -92697,8 +93201,6 @@ Created by Mark Jeffries - - The Journey 1985 @@ -94354,23 +94856,23 @@ Created by Mark Jeffries - The Key To Time (Sentient) + The Key To Time 1984 - Sentient + Lumpsoft - - + + - The Key To Time - 19?? - <unknown> + The Key To Time (Sentient) + 1984 + Sentient Software - - + + @@ -94388,8 +94890,8 @@ Created by Mark Jeffries The Khangrin Plans - 19?? - <unknown> + 1992 + Zenobi Software @@ -95230,7 +95732,7 @@ Created by Mark Jeffries - Laserwarp (release 2, alt 2) + Laserwarp (release 2, alt 2) 1983 Mikro-Gen @@ -97592,7 +98094,7 @@ Lacks game introduction, bad dump or alternate version? Los Amores de Brunilda (v1.4, English) 2014 - Retroworks + RetroWorks @@ -97605,7 +98107,7 @@ Lacks game introduction, bad dump or alternate version? Los Amores de Brunilda (v1.4, Spanish) 2014 - Retroworks + RetroWorks @@ -97615,11 +98117,11 @@ Lacks game introduction, bad dump or alternate version? - + Los Amores de Brunilda (v1.4, Galician) 2014 - Retroworks - + RetroWorks + @@ -97628,11 +98130,11 @@ Lacks game introduction, bad dump or alternate version? - + Los Amores de Brunilda (v1.4, Catalan) 2014 - Retroworks - + RetroWorks + @@ -97641,11 +98143,11 @@ Lacks game introduction, bad dump or alternate version? - + Los Amores de Brunilda (v1.4, Catalan, alt) 2014 - Retroworks - + RetroWorks + @@ -97654,11 +98156,11 @@ Lacks game introduction, bad dump or alternate version? - + Los Amores de Brunilda (v1.4, Basque) 2014 - Retroworks - + RetroWorks + @@ -97670,7 +98172,7 @@ Lacks game introduction, bad dump or alternate version? Los Amores de Brunilda (v1.4, Italian) 2014 - Retroworks + RetroWorks @@ -97683,7 +98185,7 @@ Lacks game introduction, bad dump or alternate version? Los Amores de Brunilda (v1.4, Russian) 2014 - Retroworks + RetroWorks @@ -97853,7 +98355,7 @@ Lacks game introduction, bad dump or alternate version? Los Tesoros Perdidos de Tulum (v1.1, Spanish) 2020 - Retroworks + RetroWorks @@ -97865,7 +98367,7 @@ Lacks game introduction, bad dump or alternate version? The Lost Treasures of Tulum (v1.0, English) 2020 - Retroworks + RetroWorks @@ -97877,7 +98379,7 @@ Lacks game introduction, bad dump or alternate version? Los Tesoros Perdidos de Tulum (v1.0, Spanish) 2020 - Retroworks + RetroWorks @@ -97887,7 +98389,7 @@ Lacks game introduction, bad dump or alternate version? - Lost In My Spectrum (set 1, v2.0, 128K, English, turbo loader) + Lost In My Spectrum (v2.0, 128K, English, turbo loader) 2012 Alessandro Grussu @@ -97899,7 +98401,7 @@ Lacks game introduction, bad dump or alternate version? - Lost In My Spectrum (set 2, v2.0, 128K, English) + Lost In My Spectrum (v2.0, 128K, English) 2012 Alessandro Grussu @@ -97911,7 +98413,7 @@ Lacks game introduction, bad dump or alternate version? - Lost In My Spectrum (set 3, v2.0, 128K, German, turbo loader) + Lost In My Spectrum (v2.0, 128K, German, turbo loader) 2012 Alessandro Grussu @@ -97923,7 +98425,7 @@ Lacks game introduction, bad dump or alternate version? - Lost In My Spectrum (set 4, v2.0, 128K, German) + Lost In My Spectrum (v2.0, 128K, German) 2012 Alessandro Grussu @@ -97935,7 +98437,7 @@ Lacks game introduction, bad dump or alternate version? - Lost In My Spectrum (set 5, v2.0, 128K, Spanish, turbo loader) + Lost In My Spectrum (v2.0, 128K, Spanish, turbo loader) 2012 Alessandro Grussu @@ -97947,7 +98449,7 @@ Lacks game introduction, bad dump or alternate version? - Lost In My Spectrum (set 6, v2.0, 128K, Spanish) + Lost In My Spectrum (v2.0, 128K, Spanish) 2012 Alessandro Grussu @@ -97959,7 +98461,7 @@ Lacks game introduction, bad dump or alternate version? - Lost In My Spectrum (set 7, v2.0, 128K, French, turbo loader) + Lost In My Spectrum (v2.0, 128K, French, turbo loader) 2012 Alessandro Grussu @@ -97971,7 +98473,7 @@ Lacks game introduction, bad dump or alternate version? - Lost In My Spectrum (set 8, v2.0, 128K, French) + Lost In My Spectrum (v2.0, 128K, French) 2012 Alessandro Grussu @@ -97983,7 +98485,7 @@ Lacks game introduction, bad dump or alternate version? - Lost In My Spectrum (set 9, v2.0, 128K, Italian, turbo loader) + Lost In My Spectrum (v2.0, 128K, Italian, turbo loader) 2012 Alessandro Grussu @@ -97995,7 +98497,7 @@ Lacks game introduction, bad dump or alternate version? - Lost In My Spectrum (set 10, v2.0, 128K, Italian) + Lost In My Spectrum (v2.0, 128K, Italian) 2012 Alessandro Grussu @@ -98007,7 +98509,7 @@ Lacks game introduction, bad dump or alternate version? - Lost In My Spectrum (set 11, v2.0, 128K, Portuguese, turbo loader) + Lost In My Spectrum (v2.0, 128K, Portuguese, turbo loader) 2012 Alessandro Grussu @@ -98019,7 +98521,7 @@ Lacks game introduction, bad dump or alternate version? - Lost In My Spectrum (set 12, v2.0, 128K, Portuguese) + Lost In My Spectrum (v2.0, 128K, Portuguese) 2012 Alessandro Grussu @@ -98031,7 +98533,7 @@ Lacks game introduction, bad dump or alternate version? - Lost In My Spectrum (set 13, v2.0, 48K, English) + Lost In My Spectrum (v2.0, 48K, English) 2012 Alessandro Grussu @@ -98043,7 +98545,7 @@ Lacks game introduction, bad dump or alternate version? - Lost In My Spectrum (set 14, v2.0, 48K, German) + Lost In My Spectrum (v2.0, 48K, German) 2012 Alessandro Grussu @@ -98055,7 +98557,7 @@ Lacks game introduction, bad dump or alternate version? - Lost In My Spectrum (set 15, v2.0, 48K, Spanish) + Lost In My Spectrum (v2.0, 48K, Spanish) 2012 Alessandro Grussu @@ -98067,7 +98569,7 @@ Lacks game introduction, bad dump or alternate version? - Lost In My Spectrum (set 16, v2.0, 48K, French) + Lost In My Spectrum (v2.0, 48K, French) 2012 Alessandro Grussu @@ -98079,7 +98581,7 @@ Lacks game introduction, bad dump or alternate version? - Lost In My Spectrum (set 17, v2.0, 48K, Italian) + Lost In My Spectrum (v2.0, 48K, Italian) 2012 Alessandro Grussu @@ -98091,7 +98593,7 @@ Lacks game introduction, bad dump or alternate version? - Lost In My Spectrum (set 18, v2.0, 48K, Portuguese) + Lost In My Spectrum (v2.0, 48K, Portuguese) 2012 Alessandro Grussu @@ -98103,7 +98605,7 @@ Lacks game introduction, bad dump or alternate version? - Lost In My Spectrum (set 19, v1.3, English) + Lost In My Spectrum (v1.3, English) 2012 Alessandro Grussu @@ -98115,7 +98617,7 @@ Lacks game introduction, bad dump or alternate version? - Lost In My Spectrum (set 20, v1.3, Italian) + Lost In My Spectrum (v1.3, Italian) 2012 Alessandro Grussu @@ -98127,7 +98629,7 @@ Lacks game introduction, bad dump or alternate version? - Lost In My Spectrum (set 21, v1.2, English) + Lost In My Spectrum (v1.2, English) 2012 Alessandro Grussu @@ -98139,7 +98641,7 @@ Lacks game introduction, bad dump or alternate version? - Lost In My Spectrum (set 22, v1.2, Italian) + Lost In My Spectrum (v1.2, Italian) 2012 Alessandro Grussu @@ -98153,7 +98655,7 @@ Lacks game introduction, bad dump or alternate version? - Lost In My Spectrum (set 23, v1.0, English, 48K) + Lost In My Spectrum (v1.0, English, 48K) 2012 Alessandro Grussu @@ -98165,7 +98667,7 @@ Lacks game introduction, bad dump or alternate version? - Lost In My Spectrum (set 24, v1.0, Italian, 48K) + Lost In My Spectrum (v1.0, Italian, 48K) 2012 Alessandro Grussu @@ -98177,7 +98679,7 @@ Lacks game introduction, bad dump or alternate version? - Lost In My Spectrum (set 25, v1.0, Italian, 128K) + Lost In My Spectrum (v1.0, Italian, 128K) 2012 Alessandro Grussu @@ -98407,7 +98909,7 @@ Lacks game introduction, bad dump or alternate version? L'Abbaye des Morts 2014 - Paolo Arus - Jerri + Paolo Arus / Jerri @@ -98489,7 +98991,7 @@ Lacks game introduction, bad dump or alternate version? The Labours of Hercules (set 3, Zenobi) 1987 - Terry Taylor / Zenobi + Zenobi Software @@ -99704,6 +100206,7 @@ Lacks game introduction, bad dump or alternate version? Magic Johnson's Basketball (Spanish) 1990 Dro Soft + @@ -100823,6 +101326,19 @@ Lacks game introduction, bad dump or alternate version? + + Máquina do Poker + 1985 + Astor Software + + + + + + + + + Marauder 1988 @@ -102545,6 +103061,19 @@ Nothing happens after loading the cassette + + Melotron + 1985 + Investronica + + + + + + + + + Meltdown (1984, Kerian) 1984 @@ -103406,8 +103935,8 @@ Nothing happens after loading the cassette Micro Olympics / Olympic Spectacular (System 4) - 19?? - <unknown> + 1987 + System 4 @@ -103416,9 +103945,9 @@ Nothing happens after loading the cassette - Micro Olympics / Olympic Spectacular - 19?? - <unknown> + Micro Olympics / Olympic Spectacular (Alternative) + 1987 + Alternative Software @@ -103426,10 +103955,77 @@ Nothing happens after loading the cassette - + + Micro Olympics / Olympic Spectacular (Profisoft) + 1987 + Profisoft + + + + + + + + + Micro Primer - Software Pack 1 + 1983 + Microelectronics Education Programme + + + + + + + + + + + + + + + + + + + + + + + + + + + + Micro Primer - Software Pack 2 + 1983 + Microelectronics Education Programme + + + + + + + + + + + + + + + + + + + + + + + Micro Primer - Software Pack 3 - 19?? - <unknown> + 1983 + Microelectronics Education Programme @@ -103452,10 +104048,10 @@ Nothing happens after loading the cassette - + Micro Primer - Software Pack 4 - 19?? - <unknown> + 1983 + Microelectronics Education Programme @@ -103534,23 +104130,23 @@ Nothing happens after loading the cassette - Microball (System 4) + Microball 1988 - System 4 + Alternative Software - - + + - Microball - 19?? - <unknown> + Microball (System 4) + 1988 + System 4 - - + + @@ -103735,25 +104331,25 @@ Nothing happens after loading the cassette - Microfair Madness (Zenobi) + Microfair Madness (128K, release 2) 1991 - Zenobi Software + Delbert the Hamster Software - - + + - - + + - Microfair Madness - 128k - Release 1 - 19?? - <unknown> + Microfair Madness (128K, release 1) + 1991 + Delbert the Hamster Software @@ -103767,25 +104363,36 @@ Nothing happens after loading the cassette - Microfair Madness - 128k - Release 2 - 19?? - <unknown> + Microfair Madness (Zenobi) + 1991 + Zenobi Software - - + + - - + + + + + + + + Microfair Madness (Zenobi, alt) + 1991 + Zenobi Software + + + - Microfair Madness - 48k - Release 1 - 19?? - <unknown> + Microfair Madness (48K, release 1) + 1991 + Delbert the Hamster Software @@ -103799,9 +104406,9 @@ Nothing happens after loading the cassette - Microfair Madness - 48k - Release 2 - 19?? - <unknown> + Microfair Madness (48K, release 2) + 1991 + Delbert the Hamster Software @@ -106867,7 +107474,7 @@ Nothing happens after loading the cassette - Music Box (128k version, with 48k version)k + Music Box (128K version, with 48K version) 1986 Melbourne House @@ -108169,8 +108776,19 @@ Nothing happens after loading the cassette - - Nato Assault (48k version) + + NATO Assault (128K version) + 1987 + Astros Productions + + + + + + + + + NATO Assault (48K version) 1987 Astros Productions @@ -115099,7 +115717,7 @@ Nothing happens after loading the cassette - Play What I Play - 128k + Play What I Play (128K) 1987 Ted Kirk @@ -115115,7 +115733,7 @@ Nothing happens after loading the cassette - Play What I Play - 48k + Play What I Play (48K) 19?? <unknown> @@ -115382,6 +116000,19 @@ Nothing happens after loading the cassette + + Poker Aberto + 1985 + Astor Software + + + + + + + + + Poker de Casino 1985 @@ -116446,20 +117077,25 @@ Nothing happens after loading the cassette - Pride of the Federation (set 3) + Pride of the Federation 1987 - Excalibur - - - + Excalibur Software + + + + + + + + Pride of the Federation (set 4) - 19?? - <unknown> + 1987 + Excalibur Software @@ -116469,8 +117105,8 @@ Nothing happens after loading the cassette Pride of the Federation (set 5) - 19?? - <unknown> + 1987 + Excalibur Software @@ -116480,8 +117116,8 @@ Nothing happens after loading the cassette Pride of the Federation (set 2) - 19?? - <unknown> + 1987 + Excalibur Software @@ -116490,17 +117126,12 @@ Nothing happens after loading the cassette - Pride of the Federation - 19?? - <unknown> - - - - - - - - + Pride of the Federation (set 3) + 1987 + Excalibur Software + + + @@ -116740,20 +117371,20 @@ Nothing happens after loading the cassette - Pro Tennis Tour (MCM) + Pro Tennis Tour 1990 - MCM Software + Ubi Soft - - + + Pro Tennis Tour (The Hit Squad) - 19?? - <unknown> + 1990 + The Hit Squad @@ -116762,12 +117393,12 @@ Nothing happens after loading the cassette - Pro Tennis Tour - 19?? - <unknown> + Pro Tennis Tour (MCM) + 1990 + MCM Software - - + + @@ -116784,7 +117415,7 @@ Nothing happens after loading the cassette - Proceeding Electronic System Printer Interface - 16k-48k Printer + Proceeding Electronic System Printer Interface - 16K-48K Printer 19?? <unknown> @@ -116795,7 +117426,7 @@ Nothing happens after loading the cassette - Proceeding Electronic System Printer Interface - 16k-48k Seikosha + Proceeding Electronic System Printer Interface - 16K-48K Seikosha 19?? <unknown> @@ -117067,6 +117698,17 @@ Nothing happens after loading the cassette + Project Future + 1985 + Micromania + + + + + + + + Project Future (Currys) 1985 Currys @@ -117077,54 +117719,53 @@ Nothing happens after loading the cassette - - Project Future - 19?? - <unknown> + + Project Future (bug fix) + 1985 + Micromania - - + + - Project Nova (Zenobi) + Project Nova 1987 - Zenobi Software + Nebula Designs Software - - + + - - + + - Project Nova - 19?? - <unknown> + Project Nova (Zenobi) + 1987 + Zenobi Software - - + + - - + + - Project Stealth Fighter (set 1) - 19?? - <unknown> + 1990 + MicroProse Software @@ -117147,10 +117788,10 @@ Nothing happens after loading the cassette - - Project Stealth Fighter (set 2, +2 Compatible) - 19?? - <unknown> + + Project Stealth Fighter (set 2, +2 compatible) + 1990 + MicroProse Software @@ -117173,10 +117814,10 @@ Nothing happens after loading the cassette - + Project Stealth Fighter (set 3, Kixx) 19?? - <unknown> + Kixx @@ -117199,6 +117840,31 @@ Nothing happens after loading the cassette + + F-19 Stealth Fighter (set 4, Erbe) + 1990 + Erbe Software + + + + + + + + + + + + + + + + + + + + + Projector 1 @@ -117213,8 +117879,8 @@ Nothing happens after loading the cassette Promer-SP (set 2) - 19?? - <unknown> + 1984 + Camel Products @@ -117224,8 +117890,8 @@ Nothing happens after loading the cassette Promer-SP - 19?? - <unknown> + 1984 + Camel Products @@ -117256,7 +117922,7 @@ Nothing happens after loading the cassette - Protect And Survive (set 1) + Protect and Survive (set 1) 1992 The Northern Underground @@ -117272,7 +117938,7 @@ Nothing happens after loading the cassette - Protect And Survive (set 2) + Protect and Survive (set 2) 19?? <unknown> @@ -117288,7 +117954,7 @@ Nothing happens after loading the cassette - Protect And Survive (set 3) + Protect and Survive (set 3) 1992 The Northern Underground @@ -117390,8 +118056,9 @@ Nothing happens after loading the cassette PRT 64 (release 1) - 19?? - <unknown> + 1985 + MHS Muller Hard & Software + @@ -117401,8 +118068,9 @@ Nothing happens after loading the cassette PRT 64 (release 2) - 19?? - <unknown> + 1985 + MHS Muller Hard & Software + @@ -117646,6 +118314,17 @@ Nothing happens after loading the cassette + Puffy's Saga + 1989 + Ubi Soft + + + + + + + + Puffy's Saga (The Hit Squad) 1989 The Hit Squad @@ -117656,13 +118335,13 @@ Nothing happens after loading the cassette - - Puffy's Saga - 19?? - <unknown> + + Puffy's Saga (MCM) + 1989 + MCM Software - - + + @@ -117728,7 +118407,7 @@ Nothing happens after loading the cassette Hunchy (1983, Mr. Micro) 1983 - Mr. Micro Ltd + Mr. Micro @@ -117737,7 +118416,7 @@ Nothing happens after loading the cassette - Puncman 1 And 2 + Puncman 1 and 2 1984 Chalksoft @@ -117748,9 +118427,9 @@ Nothing happens after loading the cassette - Puncman 3 And 4 - 19?? - <unknown> + Puncman 3 and 4 + 1984 + Chalksoft @@ -117795,8 +118474,8 @@ Nothing happens after loading the cassette Purchase Day Book - 19?? - <unknown> + 1982 + Transform @@ -118614,7 +119293,7 @@ Nothing happens after loading the cassette Quackers (set 2) 1983 - Rabbit + Rabbit Software @@ -118624,8 +119303,8 @@ Nothing happens after loading the cassette Quackers - 19?? - <unknown> + 1983 + Rabbit Software @@ -118633,6 +119312,17 @@ Nothing happens after loading the cassette + + Tiro al Blanco (Investronica) + 1983 + Investronica + + + + + + + Qualitas 1986 @@ -118802,9 +119492,10 @@ Nothing happens after loading the cassette - Que Es El Pert + Que Es El Pert? 19?? - <unknown> + Ingenieria Quimica + @@ -119202,7 +119893,7 @@ Nothing happens after loading the cassette Quiz of Europe 19?? - <unknown> + Tawny Software @@ -119523,7 +120214,7 @@ Nothing happens after loading the cassette Race Ace (set 2, Micro Gold) 1983 - Rainbird / Micro Gold + Micro Gold @@ -119610,7 +120301,7 @@ Nothing happens after loading the cassette Radio Teletype 19?? - <unknown> + Micronet 800 Telesoftware @@ -119796,7 +120487,7 @@ Nothing happens after loading the cassette Rail Traffic Control Birmingham 19?? - <unknown> + Dee-Kay Systems @@ -119828,8 +120519,8 @@ Nothing happens after loading the cassette Rail Traffic Control Crewe (set 2, Ashley Greenup) - 19?? - <unknown> + 1989 + Ashley Greenup @@ -119849,9 +120540,9 @@ Nothing happens after loading the cassette - Rail Traffic Control Doncaster (set 1, Dee-Kay Systems) + Rail Traffic Control Doncaster (set 1) 1989 - Dee-Kay Systems + Ashley Greenup @@ -119860,9 +120551,9 @@ Nothing happens after loading the cassette - Rail Traffic Control Doncaster (set 2, Ashley Greenup) + Rail Traffic Control Doncaster (set 2) 1989 - <unknown> + Ashley Greenup @@ -119917,7 +120608,7 @@ Nothing happens after loading the cassette Rail Traffic Control Lime Street 19?? - <unknown> + Dee-Kay Systems @@ -119961,7 +120652,7 @@ Nothing happens after loading the cassette Rail Traffic Control Reading 19?? - <unknown> + Dee-Kay Systems @@ -119982,8 +120673,8 @@ Nothing happens after loading the cassette Rainbow Copia - 19?? - <unknown> + 1984 + Wizard Software @@ -120568,23 +121259,23 @@ Nothing happens after loading the cassette - Ready Steady Go (System 4) + Ready Steady Go 1988 - System 4 + Alternative Software - - + + - Ready Steady Go - 19?? - <unknown> + Ready Steady Go (System 4) + 1988 + System 4 - - + + @@ -120617,6 +121308,17 @@ Nothing happens after loading the cassette + Realm of Darkness + 1986 + River Software + + + + + + + + Realm of Darkness (Zenobi) 1987 Zenobi Software @@ -120627,18 +121329,23 @@ Nothing happens after loading the cassette - - Realm of Darkness - 19?? - <unknown> - - - + + Realm of Impossibility + 1986 + Ariolasoft UK + + + + + + + + - + Realm of Impossibility (Dro Soft) 1985 Dro Soft @@ -120654,23 +121361,18 @@ Nothing happens after loading the cassette - - Realm of Impossibility - 19?? - <unknown> - - - - - - - - + + Realm of the Undead + 1984 + Express Programmes Company + + + - + Realm of the Undead (MC Lothlorien) 1984 MC Lothlorien @@ -120681,17 +121383,6 @@ Nothing happens after loading the cassette - - Realm of the Undead - 19?? - <unknown> - - - - - - - Reaper 1991 @@ -120705,8 +121396,8 @@ Nothing happens after loading the cassette Reasoning - 19?? - <unknown> + 1984 + Micro-De-Bug Consultancy @@ -120715,7 +121406,7 @@ Nothing happens after loading the cassette - Rebel (set 1) + Rebel 1987 Virgin Games @@ -120726,9 +121417,9 @@ Nothing happens after loading the cassette - Rebel (set 2, Ricochet) + Rebel (Ricochet) 1987 - Virgin Games Ltd / Ricochet + Ricochet @@ -120839,6 +121530,17 @@ Nothing happens after loading the cassette + Red Arrows + 1985 + Database Software + + + + + + + + Red Arrows (Alternative) 1987 Alternative Software @@ -120849,13 +121551,13 @@ Nothing happens after loading the cassette - - Red Arrows - 19?? - <unknown> + + Red Arrows (System 4) + 1987 + System 4 - - + + @@ -120883,23 +121585,23 @@ Nothing happens after loading the cassette - Red Baron (set 2) + Red Baron 1983 MC Lothlorien - - + + - Red Baron - 19?? - <unknown> + Red Baron (alt) + 1983 + MC Lothlorien - - + + @@ -120907,7 +121609,7 @@ Nothing happens after loading the cassette Red Dragon 19?? - <unknown> + Dee-Kay Systems @@ -121025,31 +121727,31 @@ Nothing happens after loading the cassette - Reflections (Forward Software) + Reflections 1983 - Forward + Artic Computing - - + + - Reflections - 19?? - <unknown> + Reflections (Forward Software) + 1983 + Forward Software - - + + Reichswald - 19?? - <unknown> + 1984 + Scorpio Gamesworld @@ -121069,23 +121771,23 @@ Nothing happens after loading the cassette - Rentakill Rita (Dro Soft) - 1988 - Dro Soft + Rentakill Rita + 1987 + Mastertronic - - + + - Rentakill Rita - 19?? - <unknown> + Rentakill Rita (Dro Soft) + 1988 + Dro Soft - - + + @@ -121494,7 +122196,7 @@ Nothing happens after loading the cassette - Reversi + Reversi (Sinclair Research) 1982 Sinclair Research @@ -122051,31 +122753,20 @@ Nothing happens after loading the cassette - Road Toad (DK'Tronics) + Road Toad 1983 - DK'Tronics - - - - - - - - - Road Toad (Monser) - 19?? - <unknown> + Elfin Software - - + + Road Toad (Prism) - 19?? - <unknown> + 1983 + PRISM Micro-informatique @@ -122085,8 +122776,8 @@ Nothing happens after loading the cassette Road Toad (Profisoft) - 19?? - <unknown> + 1983 + Profisoft @@ -122095,12 +122786,34 @@ Nothing happens after loading the cassette - Road Toad - 19?? - <unknown> + Road Toad (DK'Tronics) + 1983 + DK'Tronics - - + + + + + + + + Road Toad (bug fix) + 1983 + Elfin Software + + + + + + + + + Road Toad (Monser) + 198? + Monser + + + @@ -122858,9 +123571,10 @@ Nothing happens after loading the cassette - Rocman (set 1, Spanish) + Rocman (Spanish) 1986 Magic Team + @@ -122869,9 +123583,10 @@ Nothing happens after loading the cassette - Rocman (set 2, English, Rockman case, Alligata) + Rocman (English, Rockman case, Alligata) 1986 Alligata Software + @@ -123207,21 +123922,15 @@ Nothing happens after loading the cassette - Ronnie Goes To Hollywood (GI Games) + Ronnie Goes To Hollywood 1987 - G.I. Games - - - + 8th Day Software + + + - - - - Ronnie Goes To Hollywood - Help - 19?? - <unknown> - + @@ -123229,12 +123938,12 @@ Nothing happens after loading the cassette - Ronnie Goes To Hollywood - 19?? - <unknown> + Ronnie Goes To Hollywood (G.I. Games) + 1991 + G.I. Games - - + + @@ -123252,8 +123961,8 @@ Nothing happens after loading the cassette Rotatrix - 19?? - <unknown> + 2012 + Einar Saukas @@ -123273,20 +123982,20 @@ Nothing happens after loading the cassette - Rouge Midget (Adventure Workshop) - 19?? - <unknown> + Rouge Midget + 1991 + The Guild - - + + - Rouge Midget (set 2) - 19?? - <unknown> + Rouge Midget (alt) + 1991 + The Guild @@ -123295,12 +124004,12 @@ Nothing happens after loading the cassette - Rouge Midget - 19?? - <unknown> + Rouge Midget (Adventure Workshop) + 199? + The Adventure Workshop - - + + @@ -123349,10 +124058,22 @@ Nothing happens after loading the cassette + + Roust (demo) + 2018 + Allan Turvey + + + + + + + Rownania Chemiczne 19?? - <unknown> + Polmer + @@ -123409,10 +124130,10 @@ Nothing happens after loading the cassette - - Royal Birkdale - 19?? - <unknown> + + Royal Birkdale: Championship Golf + 1983 + Ocean @@ -127918,6 +128639,7 @@ Nothing happens after loading the cassette Sir Fred (Spanish) 1986 Made in Spain + @@ -132027,7 +132749,7 @@ Nothing happens after loading the cassette - Spectrum 48k Sample Cassette + Spectrum 48K Sample Cassette 1983 Sulis @@ -135789,6 +136511,17 @@ Nothing happens after loading the cassette + + Stripping Penelope + 2021 + Jaime Grilo + + + + + + + Strontium Dog - The Killing 1984 @@ -136300,20 +137033,20 @@ Nothing happens after loading the cassette - Super 48k Box - 47 Loader - 19?? - <unknown> + Super 48K Box (rev. 2, TAP tape image) + 2015 + Vanbsoftware - - + + - Super 48k Box - 19?? - <unknown> + Super 48K Box + 2015 + Vanbsoftware @@ -136321,6 +137054,17 @@ Nothing happens after loading the cassette + + Super 48K Box (47 loader) + 2015 + Vanbsoftware + + + + + + + Super Brat 1985 @@ -137606,6 +138350,72 @@ Nothing happens after loading the cassette + + The Swarm is Coming... (128K, update 2) + 2021 + Minilop Retroware + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + The Swarm is Coming... (48K, update 2) + 2021 + Minilop Retroware + + + + + + + + + + + + + + + + + + + + + + + + + + Swat! 1987 @@ -137756,7 +138566,7 @@ Nothing happens after loading the cassette The Sword of Ianna 2017 - Retroworks + RetroWorks @@ -140438,7 +141248,7 @@ Nothing happens after loading the cassette Teodoro no Sabe Volar (TZX tape image) 2010 - Retroworks + RetroWorks @@ -140457,7 +141267,7 @@ Nothing happens after loading the cassette Teodoro no Sabe Volar (English, TAP tape image) 2010 - Retroworks + RetroWorks @@ -140469,7 +141279,7 @@ Nothing happens after loading the cassette Teodoro no Sabe Volar (Russian, TAP tape image) 2010 - Retroworks + RetroWorks @@ -140481,7 +141291,7 @@ Nothing happens after loading the cassette Teodoro no Sabe Volar (Spanish, TAP tape image) 2010 - Retroworks + RetroWorks @@ -141624,7 +142434,7 @@ Nothing happens after loading the cassette - Theory of Music Questions and Exercises - 48k + Theory of Music Questions and Exercises (48K) 19?? <unknown> @@ -141640,7 +142450,7 @@ Nothing happens after loading the cassette - Theory of Music Questions and Exercises - 128k + Theory of Music Questions and Exercises (128K) 19?? <unknown> @@ -142066,7 +142876,7 @@ Nothing happens after loading the cassette - Throne of Fire (set 1) + Throne of Fire 1987 Melbourne House @@ -142076,8 +142886,19 @@ Nothing happens after loading the cassette - - Throne of Fire (set 2, Erbe) + + Throne of Fire (review copy) + 1987 + Melbourne House + + + + + + + + + Throne of Fire (Erbe) 1987 Erbe Software @@ -142087,13 +142908,24 @@ Nothing happens after loading the cassette - - Throne of Fire (set 3, review copy) + + Throne of Fire (IBSA) 1987 - Melbourne House + IBSA + + + + + + + + + Throne of Fire (PIM) + 198? + PIM Software - + @@ -142212,8 +143044,8 @@ Nothing happens after loading the cassette Thunderbirds (1989, Grandslam) (set 2, MCM) - 19?? - <unknown> + 1989 + MCM Software @@ -142352,7 +143184,7 @@ Nothing happens after loading the cassette - Tiles V2 - Saved On 48k + Tiles V2 - Saved On 48K 19?? <unknown> @@ -142502,8 +143334,8 @@ Nothing happens after loading the cassette Time Machine (MCM - Musical 1) - 19?? - <unknown> + 1990 + Musical 1 @@ -142512,9 +143344,9 @@ Nothing happens after loading the cassette - Time Machine - Small Cardboard Case (MCM) - 19?? - <unknown> + Time Machine (MCM, small cardboard case) + 1990 + MCM Software @@ -142665,20 +143497,20 @@ Nothing happens after loading the cassette - Time Trax (Bug-Byte) + Time Trax 1986 - Bug-Byte Software + Mind Games - - + + - Time Trax (MGE Software) - 19?? - <unknown> + Time Trax (Mind Games España) + 1986 + Mind Games España @@ -142687,12 +143519,12 @@ Nothing happens after loading the cassette - Time Trax - 19?? - <unknown> + Time Trax (Bug-Byte) + 1986 + Bug-Byte Software - - + + @@ -142773,7 +143605,7 @@ Nothing happens after loading the cassette - Time Watch (set 2) + Time Watch (alt) 1986 Matthew Wilson @@ -142785,8 +143617,8 @@ Nothing happens after loading the cassette Time Watch - 19?? - <unknown> + 1986 + Matthew Wilson @@ -142806,9 +143638,9 @@ Nothing happens after loading the cassette - Time Zone (R D Foord Software) + Time Zone (R.D. Foord) 1985 - R.D. Foord + R.D. Foord Software @@ -142816,10 +143648,10 @@ Nothing happens after loading the cassette - - Time Zone - 19?? - <unknown> + + Time Zone (Atlantis) + 1985 + Atlantis Software @@ -145462,6 +146294,7 @@ Nothing happens after loading the cassette Turbo Girl (Spanish) 1988 Dinamic Software + @@ -145671,6 +146504,60 @@ Nothing happens after loading the cassette + + Twenty Four Hour Parsley People (English) + 2020 + Minilop Retroware + + + + + + + + + + + + + + + + Twenty Four Hour Parsley People (Spanish) + 2020 + Minilop Retroware + + + + + + + + + + + + + + + + Twenty Four Hour Parsley People (Portuguese) + 2020 + Minilop Retroware + + + + + + + + + + + + + + Twice Shy (set 2) 1986 @@ -146602,9 +147489,9 @@ Nothing happens after loading the cassette - The Very Big Cave Adventure (GI Games) - 19?? - <unknown> + The Very Big Cave Adventure (G.I. Games) + 1991 + G.I. Games @@ -146619,8 +147506,8 @@ Nothing happens after loading the cassette The Very Big Cave Adventure (Zenobi) - 19?? - <unknown> + 1992 + Zenobi Software @@ -146635,8 +147522,8 @@ Nothing happens after loading the cassette The Very Big Cave Adventure - 19?? - <unknown> + 1986 + CRL Group @@ -146662,8 +147549,8 @@ Nothing happens after loading the cassette The Village Underworld - 19?? - <unknown> + 1985 + Orpheus @@ -147097,6 +147984,7 @@ Version without loading screen, maybe a pre-release 1989 Eclipse + @@ -147112,6 +148000,7 @@ Version without loading screen, maybe a pre-release 1989 Eclipse + @@ -147149,7 +148038,7 @@ Version without loading screen, maybe a pre-release --> Vega Solaris (Retro Gamer) 2013 - Axel Springer / Matra + Axel Springer / Matra Computer Automations @@ -147214,23 +148103,23 @@ Version without loading screen, maybe a pre-release - Vendetta (Kixx) + Vendetta 1990 - Kixx + System 3 Software - - + + - Vendetta - 19?? - <unknown> + Vendetta (Kixx) + 1990 + Kixx - - + + @@ -149501,7 +150390,7 @@ Version without loading screen, maybe a pre-release - Wegwijs Op Uw ZX Spectrum 48k + Wegwijs Op Uw ZX Spectrum 48K 1984 MCN @@ -149668,9 +150557,10 @@ Version without loading screen, maybe a pre-release - West Bank (Spanish) + West Bank 1985 Dinamic Software + @@ -149679,9 +150569,10 @@ Version without loading screen, maybe a pre-release - West Bank - 19?? - <unknown> + West Bank (Gremlin) + 1985 + Gremlin Graphics Software + @@ -149695,9 +150586,10 @@ Version without loading screen, maybe a pre-release - West Bank - Small Case - 19?? - <unknown> + West Bank (Dinamic, small case) + 1985 + Dinamic Software + @@ -149717,7 +150609,7 @@ Version without loading screen, maybe a pre-release - West Rail - Release 1 + West Rail (release 1) 1984 Dee-Kay Systems @@ -149728,9 +150620,9 @@ Version without loading screen, maybe a pre-release - West Rail - Release 2 - 19?? - <unknown> + West Rail (release 2) + 1984 + Dee-Kay Systems @@ -149760,34 +150652,34 @@ Version without loading screen, maybe a pre-release - - What's The Time (set 2) - 19?? - <unknown> + + What's The Time? + 1983 + Collins Soft - - + + - - + + - - What's The Time - 19?? - <unknown> + + What's The Time? (alt) + 1983 + Collins Soft - - + + - - + + @@ -149803,7 +150695,6 @@ Version without loading screen, maybe a pre-release - Wheeler Dealer 1983 @@ -151692,33 +152583,49 @@ Version without loading screen, maybe a pre-release - World Games (Kixx) - 1988 - Kixx + World Games + 1987 + U.S. Gold - - + + - + + + + + + + World Games (Erbe) + 1987 + Erbe Software + + + + + + + + - World Games - 19?? - <unknown> + World Games (Kixx) + 1988 + Kixx - - + + - + @@ -151786,31 +152693,31 @@ Version without loading screen, maybe a pre-release - World Soccer League (EDOS) - 19?? - <unknown> + World Soccer League + 1989 + E&J Software - - + + - World Soccer League - 19?? - <unknown> + World Soccer League (EDOS) + 1989 + EDOS - - + + - + World Soccer - 19?? - <unknown> + 1990 + Zeppelin Games @@ -151821,7 +152728,7 @@ Version without loading screen, maybe a pre-release World Team Championships 19?? - <unknown> + ET Computer Software @@ -152036,8 +152943,19 @@ Version without loading screen, maybe a pre-release + Wulfpack + 1989 + Blue Ribbon Software + + + + + + + + Wulfpack (EDOS) - 1988 + 1989 EDOS @@ -152046,13 +152964,13 @@ Version without loading screen, maybe a pre-release - - Wulfpack - 19?? - <unknown> + + Wunderwaffe + 2017 + Rafal Miazga - - + + @@ -152117,23 +153035,25 @@ Version without loading screen, maybe a pre-release - Wye Compiler (Spanish) + Wye Compiler (English) 1983 - Ventamatic + Wye Valley Software + - - + + - Wye Compiler - 19?? - <unknown> + Wye Compiler (Spanish) + 1983 + Ventamatic + - - + + @@ -152504,7 +153424,7 @@ Version without loading screen, maybe a pre-release Xen (set 2, Top Ten) 1987 - Super Sparklers / Top Ten + Top Ten Software @@ -152526,7 +153446,7 @@ Version without loading screen, maybe a pre-release Xeno (Bug-Byte) 1986 - A'n'F Software / Bug-Byte + Bug-Byte @@ -152537,7 +153457,7 @@ Version without loading screen, maybe a pre-release Xeno (Kidsplay) 1986 - A'n'F Software / Kidsplay + Kidsplay @@ -152548,7 +153468,7 @@ Version without loading screen, maybe a pre-release Xeno (Mind Games España) 1986 - A'n'F Software / Mind Games Espana + Mind Games España @@ -153323,7 +154243,7 @@ Version without loading screen, maybe a pre-release - z80 Disassembler - 48k + z80 Disassembler - 48K 1984 McGraw-Hill Book Company UK @@ -153692,6 +154612,7 @@ Version without loading screen, maybe a pre-release Zombi Terror (English) 2014 Kabuto Factory + @@ -153708,6 +154629,7 @@ Version without loading screen, maybe a pre-release Zombi Terror (Spanish) 2014 Kabuto Factory + @@ -154009,6 +154931,17 @@ Version without loading screen, maybe a pre-release + + ZX Larry + 2019 + Rafal Miazga + + + + + + + ZX Mines 2.0 - 1500 Baud 19?? @@ -157426,22 +158359,42 @@ Tape 1 - Side B - Game 3: Bullseye - + Adventure 4-Pack - 19?? - <unknown> + 1986 + Walter Pooley + + + + Adventure 4-Pack (alt) + 1986 + Walter Pooley + + + + + + + + + + + + + + Adventure Builder System 1987 @@ -160673,7 +161626,7 @@ Tape 2: Cell of the Ridges - Exploring Adventures On The Spectrum 48k + Exploring Adventures On The Spectrum 48K 1984 Duckworth Educational Computing @@ -163681,7 +164634,7 @@ Side B - Game 3: Capricornio 1 [Galaxians] (Artic Computing Ltd) - Lightgun Games (48k) + Lightgun Games (48K) 1989 Virgin Mastertronic @@ -165933,8 +166886,6 @@ Tape 3: Rainbow Islands (Ocean Software) - - Robin Candy's Playing Tips (set 1) 1986 @@ -165948,8 +166899,8 @@ Tape 3: Rainbow Islands (Ocean Software) Robin Candy's Playing Tips (set 2) - 19?? - <unknown> + 1986 + Crash @@ -165959,8 +166910,8 @@ Tape 3: Rainbow Islands (Ocean Software) Robin Candy's Playing Tips (set 3) - 19?? - <unknown> + 1986 + Crash @@ -168575,7 +169526,7 @@ Tape 2 - Side B - Game 2: Fernando Martin Basket Master (Dinamic Software) - Spectrum Games Pack 48k + Spectrum Games Pack 48K 1985 Paxman Promotions @@ -171685,8 +172636,8 @@ Tape 2 - Side B - Game 2: Yie Ar Kung-Fu (Imagine Software) Thrill Time Gold 1 - 19?? - <unknown> + 1990 + Elite Systems diff --git a/hash/vgmplay.xml b/hash/vgmplay.xml index f2060a662e25a..67a977c891be7 100644 --- a/hash/vgmplay.xml +++ b/hash/vgmplay.xml @@ -308709,9 +308709,9 @@ license:CC0-1.0 - + - + diff --git a/scripts/src/bus.lua b/scripts/src/bus.lua index 8d7079b3ba2fc..23aed10441e4a 100644 --- a/scripts/src/bus.lua +++ b/scripts/src/bus.lua @@ -512,6 +512,8 @@ if (BUSES["ATA"]~=null) then MAME_DIR .. "src/devices/bus/ata/hdd.h", MAME_DIR .. "src/devices/bus/ata/px320a.cpp", MAME_DIR .. "src/devices/bus/ata/px320a.h", + MAME_DIR .. "src/devices/bus/ata/xm3301.cpp", + MAME_DIR .. "src/devices/bus/ata/xm3301.h", MAME_DIR .. "src/devices/bus/ata/zip100.cpp", MAME_DIR .. "src/devices/bus/ata/zip100.h", } diff --git a/src/devices/bus/ata/atadev.cpp b/src/devices/bus/ata/atadev.cpp index 6d2098707fffc..2b1008eef3350 100644 --- a/src/devices/bus/ata/atadev.cpp +++ b/src/devices/bus/ata/atadev.cpp @@ -14,6 +14,7 @@ #include "cr589.h" #include "hdd.h" #include "px320a.h" +#include "xm3301.h" #include "zip100.h" //------------------------------------------------- @@ -78,5 +79,6 @@ void ata_devices(device_slot_interface &device) device.option_add("cp2024", CP2024); device.option_add("cr589", CR589); device.option_add("px320a", PX320A); + device.option_add("xm3301", XM3301); device.option_add("zip100", ZIP100_IDE); } diff --git a/src/devices/bus/ata/xm3301.cpp b/src/devices/bus/ata/xm3301.cpp new file mode 100644 index 0000000000000..fad92778dfd08 --- /dev/null +++ b/src/devices/bus/ata/xm3301.cpp @@ -0,0 +1,74 @@ +// license:BSD-3-Clause +// copyright-holders: Angelo Salese +/************************************************************************************************** + +Toshiba TAISATAP.SYS support + +TODO: +- XM-3301 on its own is a SCSI-2 drive, the ATAPI variants must be higher number(s)? + +**************************************************************************************************/ + +#include "emu.h" +#include "xm3301.h" + +DEFINE_DEVICE_TYPE(XM3301, toshiba_xm3301_device, "xm3301", "Toshiba XM-3301 CD-ROM Drive") + +toshiba_xm3301_device::toshiba_xm3301_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) + : atapi_cdrom_device(mconfig, XM3301, tag, owner, clock) +{ +} + +void toshiba_xm3301_device::device_start() +{ + atapi_cdrom_device::device_start(); + + memset(m_identify_buffer, 0, sizeof(m_identify_buffer)); + + // "E:XM" and "1.0" is where Master Model and Revision are printed + t10mmc::set_model("TOSHIBA CD-ROM DRVE:XM 1.0"); + + m_identify_buffer[0] = 0x8520; + + // TODO: everything below here is unconfirmed + m_identify_buffer[23] = ('1' << 8) | '.'; + m_identify_buffer[24] = ('0' << 8) | ' '; + m_identify_buffer[25] = (' ' << 8) | ' '; + m_identify_buffer[26] = (' ' << 8) | ' '; + + m_identify_buffer[27] = ('T' << 8) | 'O'; + m_identify_buffer[28] = ('S' << 8) | 'H'; + m_identify_buffer[29] = ('I' << 8) | 'B'; + m_identify_buffer[30] = ('A' << 8) | ' '; + m_identify_buffer[31] = ('X' << 8) | 'M'; + m_identify_buffer[32] = ('-' << 8) | '3'; + m_identify_buffer[33] = ('3' << 8) | '0'; + m_identify_buffer[34] = ('1' << 8) | ' '; + m_identify_buffer[35] = (' ' << 8) | ' '; + m_identify_buffer[36] = (' ' << 8) | ' '; + m_identify_buffer[37] = (' ' << 8) | ' '; + m_identify_buffer[38] = (' ' << 8) | ' '; + m_identify_buffer[39] = (' ' << 8) | ' '; + m_identify_buffer[40] = (' ' << 8) | ' '; + m_identify_buffer[41] = (' ' << 8) | ' '; + m_identify_buffer[42] = (' ' << 8) | ' '; + m_identify_buffer[43] = (' ' << 8) | ' '; + m_identify_buffer[44] = (' ' << 8) | ' '; + m_identify_buffer[45] = (' ' << 8) | ' '; + m_identify_buffer[46] = (' ' << 8) | ' '; + + m_identify_buffer[49] = 0x0400; // IORDY may be disabled +} + +void toshiba_xm3301_device::device_reset() +{ + atapi_cdrom_device::device_reset(); + +} + +void toshiba_xm3301_device::identify_packet_device() +{ + // gammagic CD_BALLY.SYS doesn't care about $a1 contents but wants these two to be high + // when command is issued. + m_status |= IDE_STATUS_DSC | IDE_STATUS_DRDY; +} diff --git a/src/devices/bus/ata/xm3301.h b/src/devices/bus/ata/xm3301.h new file mode 100644 index 0000000000000..2c497e6586055 --- /dev/null +++ b/src/devices/bus/ata/xm3301.h @@ -0,0 +1,31 @@ +// license:BSD-3-Clause +// copyright-holders:Angelo Salese + +#ifndef MAME_BUS_ATA_XM3301_H +#define MAME_BUS_ATA_XM3301_H + +#pragma once + +#include "atapicdr.h" + +class toshiba_xm3301_device : public atapi_cdrom_device +{ +public: + toshiba_xm3301_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + + static constexpr feature_type unemulated_features() { return feature::DISK; } + +protected: + // device-level overrides + virtual void device_start() override; + virtual void device_reset() override; + + virtual void identify_packet_device() override; +private: + +}; + +// device type definition +DECLARE_DEVICE_TYPE(XM3301, toshiba_xm3301_device) + +#endif // MAME_BUS_ATA_XM3301_H diff --git a/src/devices/bus/msx/cart/cartridge.cpp b/src/devices/bus/msx/cart/cartridge.cpp index 9a71eaa54a918..7fc7e863349a9 100644 --- a/src/devices/bus/msx/cart/cartridge.cpp +++ b/src/devices/bus/msx/cart/cartridge.cpp @@ -81,6 +81,7 @@ void msx_cart(device_slot_interface &device, bool is_in_subslot) device.option_add_internal(slotoptions::LOVEPLUS, MSX_CART_LOVEPLUS); device.option_add_internal(slotoptions::MAJUSTUSHI, MSX_CART_MAJUTSUSHI); device.option_add_internal(slotoptions::MATRA_COMP, MSX_CART_MATRA_COMP); + device.option_add_internal(slotoptions::MEGA_SCSI, MSX_CART_MEGA_SCSI); device.option_add_internal(slotoptions::MSXAUD_FSCA1, MSX_CART_MSX_AUDIO_FSCA1); device.option_add_internal(slotoptions::MSXAUD_HXMU900, MSX_CART_MSX_AUDIO_HXMU900); device.option_add_internal(slotoptions::MSXAUD_NMS1205, MSX_CART_MSX_AUDIO_NMS1205); diff --git a/src/devices/bus/msx/cart/scsi.cpp b/src/devices/bus/msx/cart/scsi.cpp index 4c29275a34477..02bb8d5bf3979 100644 --- a/src/devices/bus/msx/cart/scsi.cpp +++ b/src/devices/bus/msx/cart/scsi.cpp @@ -4,6 +4,7 @@ #include "scsi.h" #include "bus/nscsi/devices.h" +#include "machine/mb87030.h" #include "machine/nscsi_bus.h" #include "machine/wd33c9x.h" @@ -11,19 +12,22 @@ Implementation of SCSI interface as it appeared in: - MSX Computer Club Gouda MSX-SCSI Interface +- ESE MegaSCSI + - Came with SRAM on the cartridge (128/256/512/1024KB SRAM) Other known SCSI(-ish) interfaces: ASCII HD Interface (SASI Interface) B.E.R.T. -ESE MegaSCSI -- Came with SRAM on the cartridge (128/256/512/1024KB SRAM) HSH SCSI Interface MAK/Green/Sparrowsoft SCSI Interface MK SCSI Interface - Evolved into B.E.R.T. SCSI Interface. +TODO: +- Fix MegaSCSI mb89352 write operation at 8MHz. + */ namespace @@ -47,15 +51,9 @@ class msx_cart_gouda_scsi_device : public device_t, public msx_cart_interface private: required_device m_wd33c93a; - void wd33c93a(device_t *device); void reset_w(u8 data); }; -void msx_cart_gouda_scsi_device::wd33c93a(device_t *device) -{ - device->set_clock(10'000'000); -} - void msx_cart_gouda_scsi_device::device_add_mconfig(machine_config &config) { NSCSI_BUS(config, "scsi", 0); @@ -65,9 +63,7 @@ void msx_cart_gouda_scsi_device::device_add_mconfig(machine_config &config) NSCSI_CONNECTOR(config, "scsi:3", default_scsi_devices, nullptr, false); NSCSI_CONNECTOR(config, "scsi:4", default_scsi_devices, nullptr, false); NSCSI_CONNECTOR(config, "scsi:5", default_scsi_devices, nullptr, false); - NSCSI_CONNECTOR(config, "scsi:6").option_set("wd33c93a", WD33C93A) - .machine_config([this] (device_t *device) { wd33c93a(device); }); - + NSCSI_CONNECTOR(config, "scsi:6").option_set("wd33c93a", WD33C93A).clock(10_MHz_XTAL); } std::error_condition msx_cart_gouda_scsi_device::initialize_cartridge(std::string &message) @@ -98,6 +94,144 @@ void msx_cart_gouda_scsi_device::reset_w(u8 data) m_wd33c93a->reset_w(data); } + + +class msx_cart_mega_scsi_device : public device_t, public msx_cart_interface +{ +public: + msx_cart_mega_scsi_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) + : device_t(mconfig, MSX_CART_MEGA_SCSI, tag, owner, clock) + , msx_cart_interface(mconfig, *this) + , m_mb89352a(*this, "scsi:7:mb89352a") + , m_srambank(*this, "srambank%u", 0U) + , m_view0(*this, "view0") + , m_view2(*this, "view2") + , m_view3(*this, "view3") + , m_bank_mask(0) + { } + + virtual std::error_condition initialize_cartridge(std::string &message) override; + + static constexpr feature_type imperfect_features() { return feature::TIMING; } + +protected: + virtual void device_start() override { } + virtual void device_reset() override; + virtual void device_add_mconfig(machine_config &config) override; + +private: + static constexpr size_t BANK_SIZE = 0x2000; + + required_device m_mb89352a; + memory_bank_array_creator<4> m_srambank; + memory_view m_view0; + memory_view m_view2; + memory_view m_view3; + u8 m_bank_mask; + + template void bank_w(u8 data); +}; + +void msx_cart_mega_scsi_device::device_add_mconfig(machine_config &config) +{ + NSCSI_BUS(config, "scsi", 0); + NSCSI_CONNECTOR(config, "scsi:0", default_scsi_devices, "harddisk", false); + NSCSI_CONNECTOR(config, "scsi:1", default_scsi_devices, nullptr, false); + NSCSI_CONNECTOR(config, "scsi:2", default_scsi_devices, nullptr, false); + NSCSI_CONNECTOR(config, "scsi:3", default_scsi_devices, nullptr, false); + NSCSI_CONNECTOR(config, "scsi:4", default_scsi_devices, nullptr, false); + NSCSI_CONNECTOR(config, "scsi:5", default_scsi_devices, nullptr, false); + NSCSI_CONNECTOR(config, "scsi:6", default_scsi_devices, nullptr, false); + // Input clock is 8MHz according to the schematic. However, clocks below 11MHz cause writes to fail. Reads are fine at 8MHz. + //NSCSI_CONNECTOR(config, "scsi:7").option_set("mb89352a", MB89352).clock(16_MHz_XTAL/2); + NSCSI_CONNECTOR(config, "scsi:7").option_set("mb89352a", MB89352).clock(11'000'000); +} + +void msx_cart_mega_scsi_device::device_reset() +{ + for (int i = 0; i < 4; i++) + m_srambank[i]->set_entry(0); + m_view0.select(0); + m_view2.select(0); + m_view3.select(0); +} + +std::error_condition msx_cart_mega_scsi_device::initialize_cartridge(std::string &message) +{ + if (!cart_sram_region()) + { + message = "msx_cart_mega_scsi_device: Required region 'sram' was not found."; + return image_error::INTERNAL; + } + + const u32 sram_size = cart_sram_region()->bytes(); + + if (sram_size != 0x20000 && sram_size != 0x40000 && sram_size != 0x80000 && sram_size != 0x100000) + { + message = "msx_cart_mega_scsi_device: Region 'sram' has unsupported size."; + return image_error::INVALIDLENGTH; + } + + const u16 sram_banks = sram_size / BANK_SIZE; + m_bank_mask = sram_banks - 1; + + for (int i = 0; i < 4; i++) + m_srambank[i]->configure_entries(0, sram_banks, cart_sram_region()->base(), BANK_SIZE); + + page(1)->install_view(0x4000, 0x5fff, m_view0); + m_view0[0].install_read_bank(0x4000, 0x5fff, m_srambank[0]); + m_view0[1].install_readwrite_bank(0x4000, 0x5fff, m_srambank[0]); + m_view0[2].install_read_handler(0x4000, 0x4fff, emu::rw_delegate(*m_mb89352a, FUNC(mb89352_device::dma_r))); + m_view0[2].install_write_handler(0x4000, 0x4fff, emu::rw_delegate(*m_mb89352a, FUNC(mb89352_device::dma_w))); + // mb89352 is mirrored at 5000 - 5fff + for (int i = 0; i < 0x1000; i += 0x10) + m_view0[2].install_device(0x5000 + i, 0x500f + i, *m_mb89352a, &mb89352_device::map); + page(1)->install_read_bank(0x6000, 0x7fff, m_srambank[1]); + page(2)->install_view(0x8000, 0x9fff, m_view2); + m_view2[0].install_read_bank(0x8000, 0x9fff, m_srambank[2]); + m_view2[1].install_readwrite_bank(0x8000, 0x9fff, m_srambank[2]); + m_view2[2].install_read_handler(0x8000, 0x8fff, emu::rw_delegate(*m_mb89352a, FUNC(mb89352_device::dma_r))); + m_view2[2].install_write_handler(0x8000, 0x8fff, emu::rw_delegate(*m_mb89352a, FUNC(mb89352_device::dma_w))); + // mb89352 is mirrored at 9000 - 9fff + for (int i = 0; i < 0x1000; i += 0x10) + m_view2[2].install_device(0x9000 + i, 0x900f + i, *m_mb89352a, &mb89352_device::map); + page(2)->install_view(0xa000, 0xbfff, m_view3); + m_view3[0].install_read_bank(0xa000, 0xbfff, m_srambank[3]); + m_view3[1].install_readwrite_bank(0xa000, 0xbfff, m_srambank[3]); + m_view3[2].install_read_handler(0xa000, 0xafff, emu::rw_delegate(*m_mb89352a, FUNC(mb89352_device::dma_r))); + m_view3[2].install_write_handler(0xa000, 0xafff, emu::rw_delegate(*m_mb89352a, FUNC(mb89352_device::dma_w))); + // mb89352 is mirrored at b000 - bfff + for (int i = 0; i < 0x1000; i += 0x10) + m_view3[2].install_device(0xb000 + i, 0xb00f + i, *m_mb89352a, &mb89352_device::map); + + page(1)->install_write_handler(0x6000, 0x67ff, emu::rw_delegate(*this, FUNC(msx_cart_mega_scsi_device::bank_w<0>))); + page(1)->install_write_handler(0x6800, 0x6fff, emu::rw_delegate(*this, FUNC(msx_cart_mega_scsi_device::bank_w<1>))); + page(1)->install_write_handler(0x7000, 0x77ff, emu::rw_delegate(*this, FUNC(msx_cart_mega_scsi_device::bank_w<2>))); + page(1)->install_write_handler(0x7800, 0x7fff, emu::rw_delegate(*this, FUNC(msx_cart_mega_scsi_device::bank_w<3>))); + + return std::error_condition(); +} + +template +void msx_cart_mega_scsi_device::bank_w(u8 data) +{ + // Also writes of $00 and $10 to 7ffe are seen before banking; some kind of banking enable? + m_srambank[Bank]->set_entry(data & m_bank_mask); + if (Bank != 1) + { + int view_to_select = BIT(data, 7) ? 1 : (BIT(data, 6) ? 2 : 0); + + if (Bank == 0) + m_view0.select(view_to_select); + if (Bank == 2) + m_view2.select(view_to_select); + if (Bank == 3) + m_view3.select(view_to_select); + } +} + + } // anonymous namespace DEFINE_DEVICE_TYPE_PRIVATE(MSX_CART_GOUDA_SCSI, msx_cart_interface, msx_cart_gouda_scsi_device, "msx_cart_gouda_scsi", "MSX Computer Club Gouda MSX-SCSI Interface") +DEFINE_DEVICE_TYPE_PRIVATE(MSX_CART_MEGA_SCSI, msx_cart_interface, msx_cart_mega_scsi_device, "msx_cart_mega_scsi", "ESE MEGA-SCSI") diff --git a/src/devices/bus/msx/cart/scsi.h b/src/devices/bus/msx/cart/scsi.h index cd58c3cc76aac..5e371f436c630 100644 --- a/src/devices/bus/msx/cart/scsi.h +++ b/src/devices/bus/msx/cart/scsi.h @@ -8,5 +8,6 @@ #include "bus/msx/slot/cartridge.h" DECLARE_DEVICE_TYPE(MSX_CART_GOUDA_SCSI, msx_cart_interface) +DECLARE_DEVICE_TYPE(MSX_CART_MEGA_SCSI, msx_cart_interface) #endif // MAME_BUS_MSX_CART_SCSI_H diff --git a/src/devices/bus/msx/cart/slotoptions.cpp b/src/devices/bus/msx/cart/slotoptions.cpp index 966799b0f0d18..493f1d13ca328 100644 --- a/src/devices/bus/msx/cart/slotoptions.cpp +++ b/src/devices/bus/msx/cart/slotoptions.cpp @@ -31,8 +31,8 @@ char const *const DISK_NMS1200 = "disk_nms1200"; char const *const DISK_TADPF550 = "disk_tadpf550"; char const *const DISK_VY0010 = "disk_vy0010"; char const *const DOOLY = "dooly"; -char const *const EC701 = "ec701"; char const *const EASISPEECH = "easispeech"; +char const *const EC701 = "ec701"; char const *const FMPAC = "fmpac"; char const *const FS_SR021 = "fs_sr021"; char const *const FS_SR022 = "fs_sr022"; @@ -55,6 +55,7 @@ char const *const KOREAN_HYDLIDE2 = "korean_hydlide2"; char const *const LOVEPLUS = "loveplus"; char const *const MAJUSTUSHI = "majutsushi"; char const *const MATRA_COMP = "matra_comp"; +char const *const MEGA_SCSI = "mega_scsi"; char const *const MM256K = "mm256k"; char const *const MM512K = "mm512k"; char const *const MM768K = "mm768k"; diff --git a/src/devices/bus/msx/cart/slotoptions.h b/src/devices/bus/msx/cart/slotoptions.h index a676bded17497..c2f96a782d6c5 100644 --- a/src/devices/bus/msx/cart/slotoptions.h +++ b/src/devices/bus/msx/cart/slotoptions.h @@ -34,8 +34,8 @@ extern char const *const DISK_NMS1200; extern char const *const DISK_TADPF550; extern char const *const DISK_VY0010; extern char const *const DOOLY; -extern char const *const EC701; extern char const *const EASISPEECH; +extern char const *const EC701; extern char const *const FMPAC; extern char const *const FS_SR021; extern char const *const FS_SR022; @@ -58,6 +58,7 @@ extern char const *const KOREAN_HYDLIDE2; extern char const *const LOVEPLUS; extern char const *const MAJUSTUSHI; extern char const *const MATRA_COMP; +extern char const *const MEGA_SCSI; extern char const *const MM256K; extern char const *const MM512K; extern char const *const MM768K; diff --git a/src/devices/cpu/h8/h8.cpp b/src/devices/cpu/h8/h8.cpp index fccf29a3b582f..131f9aabf4c0a 100644 --- a/src/devices/cpu/h8/h8.cpp +++ b/src/devices/cpu/h8/h8.cpp @@ -525,6 +525,13 @@ bool h8_device::exr_in_stack() const return false; } +void h8_device::take_interrupt() +{ + m_inst_state = STATE_IRQ; + m_taken_irq_vector = m_irq_vector; + m_taken_irq_level = m_irq_level; +} + void h8_device::prefetch_done() { if(m_requested_state != -1) { @@ -534,11 +541,9 @@ void h8_device::prefetch_done() m_inst_state = STATE_DMA; else if(m_current_dtc) m_inst_state = STATE_DTC; - else if(m_irq_vector) { - m_inst_state = STATE_IRQ; - m_taken_irq_vector = m_irq_vector; - m_taken_irq_level = m_irq_level; - } else if(m_has_trace && (m_EXR & EXR_T) && exr_in_stack()) + else if(m_irq_vector) + take_interrupt(); + else if(m_has_trace && (m_EXR & EXR_T) && exr_in_stack()) m_inst_state = STATE_TRACE; else m_inst_state = m_IR[0] = m_PIR; @@ -566,15 +571,16 @@ void h8_device::prefetch_done_noirq_notrace() void h8_device::set_irq(int irq_vector, int irq_level, bool irq_nmi) { + m_irq_vector = irq_vector; + m_irq_level = irq_level; + m_irq_nmi = irq_nmi; + // wake up from software standby with an external interrupt - if(standby() && irq_level >= 0) { + if(standby() && m_irq_vector) { resume(SUSPEND_REASON_CLOCK); m_standby_cb(0); + take_interrupt(); } - - m_irq_vector = irq_vector; - m_irq_level = irq_level; - m_irq_nmi = irq_nmi; } void h8_device::internal(int cycles) diff --git a/src/devices/cpu/h8/h8.h b/src/devices/cpu/h8/h8.h index 885ca100c808b..9cce7631d9dc6 100644 --- a/src/devices/cpu/h8/h8.h +++ b/src/devices/cpu/h8/h8.h @@ -202,6 +202,7 @@ class h8_device : public cpu_device, public device_nvram_interface { void prefetch_done_noirq(); void prefetch_done_notrace(); void prefetch_done_noirq_notrace(); + void take_interrupt(); void illegal(); u16 adc_default(int adc); u8 port_default_r(int port); diff --git a/src/devices/cpu/h8/h8.lst b/src/devices/cpu/h8/h8.lst index c9625b369cb04..92a9e03cacab4 100644 --- a/src/devices/cpu/h8/h8.lst +++ b/src/devices/cpu/h8/h8.lst @@ -744,11 +744,12 @@ macro jsr32 %opc %spreg if(m_standby_pending) { suspend(SUSPEND_REASON_CLOCK, true); m_standby_cb(1); + } else { + while(!m_irq_vector) { + eat-all-cycles; + } + prefetch_done(); } - else while(!m_irq_vector) { - eat-all-cycles; - } - prefetch_done(); 01a0 ffff 0 clrmac - - s26 prefetch_start diff --git a/src/devices/cpu/h8/h83002.cpp b/src/devices/cpu/h8/h83002.cpp index 60e60fc2fed9f..d29b7e8ef5a40 100644 --- a/src/devices/cpu/h8/h83002.cpp +++ b/src/devices/cpu/h8/h83002.cpp @@ -26,9 +26,9 @@ h83002_device::h83002_device(const machine_config &mconfig, const char *tag, dev m_timer16_3(*this, "timer16:3"), m_timer16_4(*this, "timer16:4"), m_watchdog(*this, "watchdog"), - m_tend_cb(*this) + m_tend_cb(*this), + m_syscr(0) { - m_syscr = 0; } void h83002_device::map(address_map &map) @@ -237,12 +237,16 @@ void h83002_device::device_start() { h8h_device::device_start(); m_dma_device = m_dma; + + save_item(NAME(m_syscr)); + save_item(NAME(m_rtmcsr)); } void h83002_device::device_reset() { h8h_device::device_reset(); m_syscr = 0x09; + m_rtmcsr = 0x00; } u8 h83002_device::syscr_r() diff --git a/src/devices/cpu/h8/h83002.h b/src/devices/cpu/h8/h83002.h index eb03a757ce97f..c45fad837113a 100644 --- a/src/devices/cpu/h8/h83002.h +++ b/src/devices/cpu/h8/h83002.h @@ -76,11 +76,11 @@ class h83002_device : public h8h_device { required_device m_timer16_4; required_device m_watchdog; + devcb_write_line::array<2> m_tend_cb; + u8 m_syscr; u8 m_rtmcsr; - devcb_write_line::array<2> m_tend_cb; - virtual void update_irq_filter() override; virtual void interrupt_taken() override; virtual int trapa_setup() override; diff --git a/src/devices/cpu/h8/h83003.cpp b/src/devices/cpu/h8/h83003.cpp index f68692a4f53dd..ba9c8aabafa5d 100644 --- a/src/devices/cpu/h8/h83003.cpp +++ b/src/devices/cpu/h8/h83003.cpp @@ -30,9 +30,9 @@ h83003_device::h83003_device(const machine_config &mconfig, const char *tag, dev m_timer16_3(*this, "timer16:3"), m_timer16_4(*this, "timer16:4"), m_watchdog(*this, "watchdog"), - m_tend_cb(*this) + m_tend_cb(*this), + m_syscr(0) { - m_syscr = 0; } void h83003_device::map(address_map &map) @@ -264,12 +264,16 @@ void h83003_device::device_start() { h8h_device::device_start(); m_dma_device = m_dma; + + save_item(NAME(m_syscr)); + save_item(NAME(m_rtmcsr)); } void h83003_device::device_reset() { h8h_device::device_reset(); m_syscr = 0x09; + m_rtmcsr = 0x00; } u8 h83003_device::syscr_r() diff --git a/src/devices/cpu/h8/h83003.h b/src/devices/cpu/h8/h83003.h index 7bd52c3ceb51e..a10ec7e824132 100644 --- a/src/devices/cpu/h8/h83003.h +++ b/src/devices/cpu/h8/h83003.h @@ -86,11 +86,11 @@ class h83003_device : public h8h_device { required_device m_timer16_4; required_device m_watchdog; + devcb_write_line::array<4> m_tend_cb; + u8 m_syscr; u8 m_rtmcsr; - devcb_write_line::array<4> m_tend_cb; - virtual void update_irq_filter() override; virtual void interrupt_taken() override; virtual int trapa_setup() override; diff --git a/src/devices/cpu/h8/h83006.cpp b/src/devices/cpu/h8/h83006.cpp index a03b4ac763f1d..586b9d1f72055 100644 --- a/src/devices/cpu/h8/h83006.cpp +++ b/src/devices/cpu/h8/h83006.cpp @@ -230,6 +230,7 @@ void h83006_device::internal_update(u64 current_time) void h83006_device::device_start() { h8h_device::device_start(); + save_item(NAME(m_syscr)); } void h83006_device::device_reset() @@ -238,7 +239,6 @@ void h83006_device::device_reset() m_syscr = 0x09; } - u8 h83006_device::syscr_r() { return m_syscr; diff --git a/src/devices/cpu/h8/h83008.cpp b/src/devices/cpu/h8/h83008.cpp index 5535a31ac2a63..96aa5b9546e29 100644 --- a/src/devices/cpu/h8/h83008.cpp +++ b/src/devices/cpu/h8/h83008.cpp @@ -207,6 +207,7 @@ void h83008_device::internal_update(u64 current_time) void h83008_device::device_start() { h8h_device::device_start(); + save_item(NAME(m_syscr)); } void h83008_device::device_reset() @@ -215,7 +216,6 @@ void h83008_device::device_reset() m_syscr = 0x09; } - u8 h83008_device::syscr_r() { return m_syscr; diff --git a/src/devices/cpu/h8/h83032.cpp b/src/devices/cpu/h8/h83032.cpp index 16c6ab944808b..269158d4f87e1 100644 --- a/src/devices/cpu/h8/h83032.cpp +++ b/src/devices/cpu/h8/h83032.cpp @@ -231,6 +231,7 @@ void h83032_device::internal_update(u64 current_time) void h83032_device::device_start() { h8h_device::device_start(); + save_item(NAME(m_syscr)); } void h83032_device::device_reset() diff --git a/src/devices/cpu/h8/h83042.cpp b/src/devices/cpu/h8/h83042.cpp index 82465893ae387..f0f35a0ea7765 100644 --- a/src/devices/cpu/h8/h83042.cpp +++ b/src/devices/cpu/h8/h83042.cpp @@ -266,6 +266,7 @@ void h83042_device::internal_update(u64 current_time) void h83042_device::device_start() { h8h_device::device_start(); + save_item(NAME(m_syscr)); } void h83042_device::device_reset() diff --git a/src/devices/cpu/h8/h83048.cpp b/src/devices/cpu/h8/h83048.cpp index e32874ddee306..be0fdc0936cb5 100644 --- a/src/devices/cpu/h8/h83048.cpp +++ b/src/devices/cpu/h8/h83048.cpp @@ -271,6 +271,7 @@ void h83048_device::internal_update(u64 current_time) void h83048_device::device_start() { h8h_device::device_start(); + save_item(NAME(m_syscr)); } void h83048_device::device_reset() diff --git a/src/devices/cpu/h8/h8325.cpp b/src/devices/cpu/h8/h8325.cpp index 3ab8d349a9e32..194f9557a9ab0 100644 --- a/src/devices/cpu/h8/h8325.cpp +++ b/src/devices/cpu/h8/h8325.cpp @@ -1,5 +1,5 @@ // license:BSD-3-Clause -// copyright-holders:Olivier Galibert +// copyright-holders:Olivier Galibert, hap /*************************************************************************** h8325.cpp @@ -28,22 +28,13 @@ DEFINE_DEVICE_TYPE(H8322, h8322_device, "h8322", "Hitachi H8/322") h8325_device::h8325_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock, u32 start) : h8_device(mconfig, type, tag, owner, clock, address_map_constructor(FUNC(h8325_device::map), this)), m_intc(*this, "intc"), - m_port1(*this, "port1"), - m_port2(*this, "port2"), - m_port3(*this, "port3"), - m_port4(*this, "port4"), - m_port5(*this, "port5"), - m_port6(*this, "port6"), - m_port7(*this, "port7"), - m_timer8_0(*this, "timer8_0"), - m_timer8_1(*this, "timer8_1"), + m_port(*this, "port%u", 1), + m_timer8(*this, "timer8_%u", 0), m_timer16(*this, "timer16"), m_timer16_0(*this, "timer16:0"), - m_read_md(*this, 3), m_ram_view(*this, "ram_view"), - m_syscr(0), - m_mds(0), - m_ram_start(start) + m_ram_start(start), + m_md(3) { } @@ -89,34 +80,34 @@ void h8325_device::map(address_map &map) map(0xff96, 0xff97).rw(m_timer16_0, FUNC(h8325_timer16_channel_device::ocrb_r), FUNC(h8325_timer16_channel_device::ocrb_w)); map(0xff98, 0xff99).r(m_timer16_0, FUNC(h8325_timer16_channel_device::icr_r)); - map(0xffb0, 0xffb0).w(m_port1, FUNC(h8_port_device::ddr_w)); - map(0xffb1, 0xffb1).w(m_port2, FUNC(h8_port_device::ddr_w)); - map(0xffb2, 0xffb2).rw(m_port1, FUNC(h8_port_device::port_r), FUNC(h8_port_device::dr_w)); - map(0xffb3, 0xffb3).rw(m_port2, FUNC(h8_port_device::port_r), FUNC(h8_port_device::dr_w)); - map(0xffb4, 0xffb4).w(m_port3, FUNC(h8_port_device::ddr_w)); - map(0xffb5, 0xffb5).w(m_port4, FUNC(h8_port_device::ddr_w)); - map(0xffb6, 0xffb6).rw(m_port3, FUNC(h8_port_device::port_r), FUNC(h8_port_device::dr_w)); - map(0xffb7, 0xffb7).rw(m_port4, FUNC(h8_port_device::port_r), FUNC(h8_port_device::dr_w)); - map(0xffb8, 0xffb8).w(m_port5, FUNC(h8_port_device::ddr_w)); - map(0xffb9, 0xffb9).w(m_port6, FUNC(h8_port_device::ddr_w)); - map(0xffba, 0xffba).rw(m_port5, FUNC(h8_port_device::port_r), FUNC(h8_port_device::dr_w)); - map(0xffbb, 0xffbb).rw(m_port6, FUNC(h8_port_device::port_r), FUNC(h8_port_device::dr_w)); - map(0xffbc, 0xffbc).w(m_port7, FUNC(h8_port_device::ddr_w)); - map(0xffbe, 0xffbe).rw(m_port7, FUNC(h8_port_device::port_r), FUNC(h8_port_device::dr_w)); + map(0xffb0, 0xffb0).w(m_port[0], FUNC(h8_port_device::ddr_w)); + map(0xffb1, 0xffb1).w(m_port[1], FUNC(h8_port_device::ddr_w)); + map(0xffb2, 0xffb2).rw(m_port[0], FUNC(h8_port_device::port_r), FUNC(h8_port_device::dr_w)); + map(0xffb3, 0xffb3).rw(m_port[1], FUNC(h8_port_device::port_r), FUNC(h8_port_device::dr_w)); + map(0xffb4, 0xffb4).w(m_port[2], FUNC(h8_port_device::ddr_w)); + map(0xffb5, 0xffb5).w(m_port[3], FUNC(h8_port_device::ddr_w)); + map(0xffb6, 0xffb6).rw(m_port[2], FUNC(h8_port_device::port_r), FUNC(h8_port_device::dr_w)); + map(0xffb7, 0xffb7).rw(m_port[3], FUNC(h8_port_device::port_r), FUNC(h8_port_device::dr_w)); + map(0xffb8, 0xffb8).w(m_port[4], FUNC(h8_port_device::ddr_w)); + map(0xffb9, 0xffb9).w(m_port[5], FUNC(h8_port_device::ddr_w)); + map(0xffba, 0xffba).rw(m_port[4], FUNC(h8_port_device::port_r), FUNC(h8_port_device::dr_w)); + map(0xffbb, 0xffbb).rw(m_port[5], FUNC(h8_port_device::port_r), FUNC(h8_port_device::dr_w)); + map(0xffbc, 0xffbc).w(m_port[6], FUNC(h8_port_device::ddr_w)); + map(0xffbe, 0xffbe).rw(m_port[6], FUNC(h8_port_device::port_r), FUNC(h8_port_device::dr_w)); map(0xffc4, 0xffc4).rw(FUNC(h8325_device::syscr_r), FUNC(h8325_device::syscr_w)); map(0xffc5, 0xffc5).r(FUNC(h8325_device::mdcr_r)); map(0xffc6, 0xffc6).rw(m_intc, FUNC(h8325_intc_device::iscr_r), FUNC(h8325_intc_device::iscr_w)); map(0xffc7, 0xffc7).rw(m_intc, FUNC(h8325_intc_device::ier_r), FUNC(h8325_intc_device::ier_w)); - map(0xffc8, 0xffc8).rw(m_timer8_0, FUNC(h8_timer8_channel_device::tcr_r), FUNC(h8_timer8_channel_device::tcr_w)); - map(0xffc9, 0xffc9).rw(m_timer8_0, FUNC(h8_timer8_channel_device::tcsr_r), FUNC(h8_timer8_channel_device::tcsr_w)); - map(0xffca, 0xffcb).rw(m_timer8_0, FUNC(h8_timer8_channel_device::tcor_r), FUNC(h8_timer8_channel_device::tcor_w)); - map(0xffcc, 0xffcc).rw(m_timer8_0, FUNC(h8_timer8_channel_device::tcnt_r), FUNC(h8_timer8_channel_device::tcnt_w)); - map(0xffd0, 0xffd0).rw(m_timer8_1, FUNC(h8_timer8_channel_device::tcr_r), FUNC(h8_timer8_channel_device::tcr_w)); - map(0xffd1, 0xffd1).rw(m_timer8_1, FUNC(h8_timer8_channel_device::tcsr_r), FUNC(h8_timer8_channel_device::tcsr_w)); - map(0xffd2, 0xffd3).rw(m_timer8_1, FUNC(h8_timer8_channel_device::tcor_r), FUNC(h8_timer8_channel_device::tcor_w)); - map(0xffd4, 0xffd4).rw(m_timer8_1, FUNC(h8_timer8_channel_device::tcnt_r), FUNC(h8_timer8_channel_device::tcnt_w)); + map(0xffc8, 0xffc8).rw(m_timer8[0], FUNC(h8_timer8_channel_device::tcr_r), FUNC(h8_timer8_channel_device::tcr_w)); + map(0xffc9, 0xffc9).rw(m_timer8[0], FUNC(h8_timer8_channel_device::tcsr_r), FUNC(h8_timer8_channel_device::tcsr_w)); + map(0xffca, 0xffcb).rw(m_timer8[0], FUNC(h8_timer8_channel_device::tcor_r), FUNC(h8_timer8_channel_device::tcor_w)); + map(0xffcc, 0xffcc).rw(m_timer8[0], FUNC(h8_timer8_channel_device::tcnt_r), FUNC(h8_timer8_channel_device::tcnt_w)); + map(0xffd0, 0xffd0).rw(m_timer8[1], FUNC(h8_timer8_channel_device::tcr_r), FUNC(h8_timer8_channel_device::tcr_w)); + map(0xffd1, 0xffd1).rw(m_timer8[1], FUNC(h8_timer8_channel_device::tcsr_r), FUNC(h8_timer8_channel_device::tcsr_w)); + map(0xffd2, 0xffd3).rw(m_timer8[1], FUNC(h8_timer8_channel_device::tcor_r), FUNC(h8_timer8_channel_device::tcor_w)); + map(0xffd4, 0xffd4).rw(m_timer8[1], FUNC(h8_timer8_channel_device::tcnt_r), FUNC(h8_timer8_channel_device::tcnt_w)); map(0xffd8, 0xffd8).rw(m_sci[0], FUNC(h8_sci_device::smr_r), FUNC(h8_sci_device::smr_w)); map(0xffd9, 0xffd9).rw(m_sci[0], FUNC(h8_sci_device::brr_r), FUNC(h8_sci_device::brr_w)); @@ -135,15 +126,15 @@ void h8325_device::map(address_map &map) void h8325_device::device_add_mconfig(machine_config &config) { H8325_INTC(config, m_intc, *this); - H8_PORT(config, m_port1, *this, h8_device::PORT_1, 0x00, 0x00); - H8_PORT(config, m_port2, *this, h8_device::PORT_2, 0x00, 0x00); - H8_PORT(config, m_port3, *this, h8_device::PORT_3, 0x00, 0x00); - H8_PORT(config, m_port4, *this, h8_device::PORT_4, 0x00, 0x00); - H8_PORT(config, m_port5, *this, h8_device::PORT_5, 0x00, 0xc0); - H8_PORT(config, m_port6, *this, h8_device::PORT_6, 0x00, 0x80); - H8_PORT(config, m_port7, *this, h8_device::PORT_7, 0x00, 0x00); - H8_TIMER8_CHANNEL(config, m_timer8_0, *this, m_intc, 12, 13, 14, 8, 8, 64, 64, 1024, 1024); - H8_TIMER8_CHANNEL(config, m_timer8_1, *this, m_intc, 15, 16, 17, 8, 8, 64, 64, 1024, 1024); + H8_PORT(config, m_port[0], *this, h8_device::PORT_1, 0x00, 0x00); + H8_PORT(config, m_port[1], *this, h8_device::PORT_2, 0x00, 0x00); + H8_PORT(config, m_port[2], *this, h8_device::PORT_3, 0x00, 0x00); + H8_PORT(config, m_port[3], *this, h8_device::PORT_4, 0x00, 0x00); + H8_PORT(config, m_port[4], *this, h8_device::PORT_5, 0x00, 0xc0); + H8_PORT(config, m_port[5], *this, h8_device::PORT_6, 0x00, 0x80); + H8_PORT(config, m_port[6], *this, h8_device::PORT_7, 0x00, 0x00); + H8_TIMER8_CHANNEL(config, m_timer8[0], *this, m_intc, 12, 13, 14, 8, 8, 64, 64, 1024, 1024); + H8_TIMER8_CHANNEL(config, m_timer8[1], *this, m_intc, 15, 16, 17, 8, 8, 64, 64, 1024, 1024); H8_TIMER16(config, m_timer16, *this, 1, 0xff); H8325_TIMER16_CHANNEL(config, m_timer16_0, *this, m_intc, 8); H8_SCI(config, m_sci[0], 0, *this, m_intc, 18, 19, 20, 20); @@ -179,8 +170,8 @@ void h8325_device::internal_update(u64 current_time) add_event(event_time, m_sci[0]->internal_update(current_time)); add_event(event_time, m_sci[1]->internal_update(current_time)); - add_event(event_time, m_timer8_0->internal_update(current_time)); - add_event(event_time, m_timer8_1->internal_update(current_time)); + add_event(event_time, m_timer8[0]->internal_update(current_time)); + add_event(event_time, m_timer8[1]->internal_update(current_time)); add_event(event_time, m_timer16_0->internal_update(current_time)); recompute_bcount(event_time); @@ -190,8 +181,12 @@ void h8325_device::device_start() { h8_device::device_start(); - save_item(NAME(m_syscr)); + m_mds = 0; + m_syscr = 0; + + save_item(NAME(m_md)); save_item(NAME(m_mds)); + save_item(NAME(m_syscr)); } void h8325_device::device_reset() @@ -202,7 +197,7 @@ void h8325_device::device_reset() m_ram_view.select(0); // MD pins are latched at reset - m_mds = m_read_md() & 3; + m_mds = m_md & 3; } u8 h8325_device::syscr_r() diff --git a/src/devices/cpu/h8/h8325.h b/src/devices/cpu/h8/h8325.h index 6605b2b4d53ef..c6ba5b2672b31 100644 --- a/src/devices/cpu/h8/h8325.h +++ b/src/devices/cpu/h8/h8325.h @@ -1,5 +1,5 @@ // license:BSD-3-Clause -// copyright-holders:Olivier Galibert +// copyright-holders:Olivier Galibert, hap /*************************************************************************** h8325.h @@ -51,7 +51,7 @@ class h8325_device : public h8_device { auto write_port7() { return m_write_port[PORT_7].bind(); } // MD pins, default mode 3 (single chip) - auto read_md() { return m_read_md.bind(); } + void set_mode(u8 mode) { m_md = mode; } u8 syscr_r(); void syscr_w(u8 data); @@ -64,24 +64,17 @@ class h8325_device : public h8_device { virtual u64 execute_cycles_to_clocks(u64 cycles) const noexcept override { return (cycles * 2); } required_device m_intc; - required_device m_port1; - required_device m_port2; - required_device m_port3; - required_device m_port4; - required_device m_port5; - required_device m_port6; - required_device m_port7; - required_device m_timer8_0; - required_device m_timer8_1; + required_device_array m_port; + required_device_array m_timer8; required_device m_timer16; required_device m_timer16_0; - devcb_read8 m_read_md; memory_view m_ram_view; - u8 m_syscr; - u8 m_mds; u32 m_ram_start; + u8 m_md; + u8 m_mds; + u8 m_syscr; virtual void update_irq_filter() override; virtual void interrupt_taken() override; diff --git a/src/devices/cpu/h8/h8s2245.cpp b/src/devices/cpu/h8/h8s2245.cpp index 90059698b7b57..fe93cbca22630 100644 --- a/src/devices/cpu/h8/h8s2245.cpp +++ b/src/devices/cpu/h8/h8s2245.cpp @@ -304,6 +304,9 @@ void h8s2245_device::device_start() { h8s2000_device::device_start(); m_dtc_device = m_dtc; + + save_item(NAME(m_syscr)); + save_item(NAME(m_mstpcr)); } void h8s2245_device::device_reset() diff --git a/src/devices/cpu/h8/h8s2320.cpp b/src/devices/cpu/h8/h8s2320.cpp index c329c0950cb95..b853310a79ebf 100644 --- a/src/devices/cpu/h8/h8s2320.cpp +++ b/src/devices/cpu/h8/h8s2320.cpp @@ -440,6 +440,8 @@ void h8s2320_device::device_start() h8s2000_device::device_start(); m_dma_device = m_dma; m_dtc_device = m_dtc; + + save_item(NAME(m_syscr)); } void h8s2320_device::device_reset() diff --git a/src/devices/cpu/h8/h8s2357.cpp b/src/devices/cpu/h8/h8s2357.cpp index 8e8943dd8c0da..b8378575c8409 100644 --- a/src/devices/cpu/h8/h8s2357.cpp +++ b/src/devices/cpu/h8/h8s2357.cpp @@ -398,6 +398,7 @@ void h8s2357_device::internal_update(u64 current_time) void h8s2357_device::device_start() { h8s2000_device::device_start(); + save_item(NAME(m_syscr)); } void h8s2357_device::device_reset() diff --git a/src/devices/cpu/h8/h8s2655.cpp b/src/devices/cpu/h8/h8s2655.cpp index b04ab8f74b8d8..54a644ded0621 100644 --- a/src/devices/cpu/h8/h8s2655.cpp +++ b/src/devices/cpu/h8/h8s2655.cpp @@ -411,6 +411,7 @@ void h8s2655_device::internal_update(u64 current_time) void h8s2655_device::device_start() { h8s2600_device::device_start(); + save_item(NAME(m_syscr)); } void h8s2655_device::device_reset() diff --git a/src/devices/cpu/h8/swx00.cpp b/src/devices/cpu/h8/swx00.cpp index 634fc7bab8629..c65a10e301c20 100644 --- a/src/devices/cpu/h8/swx00.cpp +++ b/src/devices/cpu/h8/swx00.cpp @@ -417,6 +417,7 @@ void swx00_device::internal_update(u64 current_time) void swx00_device::device_start() { h8s2000_device::device_start(); + save_item(NAME(m_syscr)); } void swx00_device::device_reset() diff --git a/src/devices/cpu/pic16c5x/pic16c5x.cpp b/src/devices/cpu/pic16c5x/pic16c5x.cpp index 5b5ceb99376ad..1a4fc4dce00ca 100644 --- a/src/devices/cpu/pic16c5x/pic16c5x.cpp +++ b/src/devices/cpu/pic16c5x/pic16c5x.cpp @@ -398,7 +398,7 @@ void pic16c5x_device::push_stack(u16 data) u8 pic16c5x_device::get_regfile(u8 addr) // Read from internal memory { if (addr == 0) { // Indirect addressing - addr = m_FSR & m_data_mask; + addr = m_FSR; } else if (m_data_width != 5) { addr |= (m_FSR & 0x60); // FSR bits 6-5 are used for banking in direct mode } @@ -409,7 +409,7 @@ u8 pic16c5x_device::get_regfile(u8 addr) // Read from internal memory void pic16c5x_device::store_regfile(u8 addr, u8 data) // Write to internal memory { if (addr == 0) { // Indirect addressing - addr = m_FSR & m_data_mask; + addr = m_FSR; } else if (m_data_width != 5) { addr |= (m_FSR & 0x60); // FSR bits 6-5 are used for banking in direct mode } @@ -468,13 +468,13 @@ void pic16c5x_device::status_w(u8 data) u8 pic16c5x_device::fsr_r() { - return m_FSR; + // high bits are 1 + return m_FSR | u8(~m_data_mask); } void pic16c5x_device::fsr_w(u8 data) { - // high bits are 1 - m_FSR = data | u8(~m_data_mask); + m_FSR = data & m_data_mask; } u8 pic16c5x_device::porta_r() @@ -1048,7 +1048,7 @@ void pic16c5x_device::device_start() if (m_picmodel != 0x16C54 && m_picmodel != 0x16C56 && m_picmodel != 0x16C58) state_add( PIC16C5x_TRSC, "TRSC", m_port_tris[PORTC]).formatstr("%02X"); } - state_add( PIC16C5x_FSR, "FSR", m_debugger_temp).mask(0xff).callimport().callexport().formatstr("%02X"); + state_add( PIC16C5x_FSR, "FSR", m_debugger_temp).mask(m_data_mask).formatstr("%02X"); state_add( PIC16C5x_PSCL, "PSCL", m_debugger_temp).callimport().formatstr("%3s"); state_add( STATE_GENPC, "GENPC", m_PC).noshow(); @@ -1081,9 +1081,6 @@ void pic16c5x_device::state_import(const device_state_entry &entry) case PIC16C5x_PRTD: m_port_data[PORTD] = m_debugger_temp; break; - case PIC16C5x_FSR: - m_FSR = m_debugger_temp | u8(~m_data_mask); - break; case PIC16C5x_PSCL: m_prescaler = m_debugger_temp; break; @@ -1112,9 +1109,6 @@ void pic16c5x_device::state_export(const device_state_entry &entry) case PIC16C5x_PRTD: m_debugger_temp = m_port_data[PORTD]; break; - case PIC16C5x_FSR: - m_debugger_temp = m_FSR | u8(~m_data_mask); - break; } } @@ -1182,8 +1176,6 @@ void pic16c5x_device::device_reset() reset_regs(); CLR(m_STATUS, PA_REG); SET(m_STATUS, TO_FLAG | PD_FLAG); - store_regfile(3, m_STATUS); - store_regfile(4, m_FSR); } diff --git a/src/devices/machine/mb87030.h b/src/devices/machine/mb87030.h index 66d6f9dfb535d..2040ecf1cd271 100644 --- a/src/devices/machine/mb87030.h +++ b/src/devices/machine/mb87030.h @@ -74,9 +74,9 @@ class mb87030_device : public nscsi_device, public nscsi_slot_card_interface constexpr static uint8_t SCTL_RESET_AND_DISABLE = 0x80; constexpr static uint8_t SCMD_TERM_MODE = 0x01; - constexpr static uint8_t SCMD_PRG_XFER = 0x02; - constexpr static uint8_t SCMD_INTERCEPT_XFER = 0x04; - constexpr static uint8_t SCMD_RST_OUT = 0x08; + constexpr static uint8_t SCMD_PRG_XFER = 0x04; + constexpr static uint8_t SCMD_INTERCEPT_XFER = 0x08; + constexpr static uint8_t SCMD_RST_OUT = 0x10; constexpr static uint8_t SCMD_CMD_BUS_RELEASE = 0x00; constexpr static uint8_t SCMD_CMD_SELECT = 0x20; constexpr static uint8_t SCMD_CMD_RESET_ATN = 0x40; diff --git a/src/devices/machine/z80scc.cpp b/src/devices/machine/z80scc.cpp index 83fd4f8c3e5b8..30b658e354be6 100644 --- a/src/devices/machine/z80scc.cpp +++ b/src/devices/machine/z80scc.cpp @@ -2092,7 +2092,7 @@ void z80scc_channel::do_sccreg_wr11(uint8_t data) /RTxC pin.*/ switch (data & WR11_RCVCLK_SRC_MASK) { - case WR11_RCVCLK_SRC_RTXC: LOG("Receive clock source is RTxC - not implemented\n"); break; + case WR11_RCVCLK_SRC_RTXC: LOG("Receive clock source is RTxC\n"); break; case WR11_RCVCLK_SRC_TRXC: LOG("Receive clock source is TRxC - not implemented\n"); break; case WR11_RCVCLK_SRC_BR: LOG("Receive clock source is Baudrate Generator\n"); break; case WR11_RCVCLK_SRC_DPLL: LOG("Receive clock source is DPLL - not implemented\n"); break; @@ -2106,7 +2106,7 @@ void z80scc_channel::do_sccreg_wr11(uint8_t data) source of the transmit clocks.*/ switch (data & WR11_TRACLK_SRC_MASK) { - case WR11_TRACLK_SRC_RTXC: LOG("Transmit clock source is RTxC - not implemented\n"); break; + case WR11_TRACLK_SRC_RTXC: LOG("Transmit clock source is RTxC\n"); break; case WR11_TRACLK_SRC_TRXC: LOG("Transmit clock source is TRxC - not implemented\n"); break; case WR11_TRACLK_SRC_BR: LOG("Transmit clock source is Baudrate Generator\n"); break; case WR11_TRACLK_SRC_DPLL: LOG("Transmit clock source is DPLL - not implemented\n"); break; @@ -2136,6 +2136,8 @@ void z80scc_channel::do_sccreg_wr11(uint8_t data) } else LOG("TRxC pin is Input\n"); + + update_serial(); } /*WR12 contains the lower byte of the time constant for the baud rate generator. The time constant @@ -2795,18 +2797,30 @@ unsigned int z80scc_channel::get_brg_rate() if (m_wr14 & WR14_BRG_SOURCE) // Do we use the PCLK as baudrate source { rate = owner()->clock() / (brg_const == 0 ? 1 : brg_const); - LOG(" - Source bit rate (%d) = PCLK (%d) / (%d)\n", rate, owner()->clock(), brg_const); + LOG(" - BRG Source bit rate (%d) = PCLK (%d) / (%d)\n", rate, owner()->clock(), brg_const); } else // Else we use the RTxC as BRG source { unsigned int source = (m_index == z80scc_device::CHANNEL_A) ? m_uart->m_rxca : m_uart->m_rxcb; rate = source / (brg_const == 0 ? 1 : brg_const); - LOG(" - Source bit rate (%d) = RTxC (%d) / (%d)\n", rate, source, brg_const); + LOG(" - BRG Source bit rate (%d) = RTxC (%d) / (%d)\n", rate, source, brg_const); } return (rate / (2 * get_clock_mode())); } +//------------------------------------------------- +// get_rtxc_rate +//------------------------------------------------- +unsigned int z80scc_channel::get_rtxc_rate() +{ + unsigned int rate; + unsigned int source = (m_index == z80scc_device::CHANNEL_A) ? m_uart->m_rxca : m_uart->m_rxcb; + rate = source / get_clock_mode(); + LOG(" - RTxC Source bit rate (%d) = RTxC (%d) / (%d)\n", rate, source, get_clock_mode()); + return rate; +} + void z80scc_channel::update_baudtimer() { unsigned int rate; @@ -2893,9 +2907,20 @@ void z80scc_channel::update_serial() } else { - LOG("- BRG disabled\n"); - set_rcv_rate(0); - set_tra_rate(0); + if ((m_wr11 & WR11_RCVCLK_SRC_MASK) == WR11_RCVCLK_SRC_RTXC && + (m_wr11 & WR11_TRACLK_SRC_MASK) == WR11_TRACLK_SRC_RTXC) + { + m_brg_rate = get_rtxc_rate(); + LOG("- BRG disabled, clock source RTxC (rate %d, clock %d)\n", m_brg_rate, get_clock_mode()); + set_rcv_rate(m_brg_rate); + set_tra_rate(m_brg_rate); + } + else + { + LOG("- BRG disabled and RX/TX clock sources differ, unimplemented: stopping\n"); + set_rcv_rate(0); + set_tra_rate(0); + } } // TODO: Check registers for use of RTxC and TRxC, if used as direct Tx and/or Rx clocks set them to value as programmed // in m_uart->txca/txcb and rxca/rxcb respectivelly diff --git a/src/devices/machine/z80scc.h b/src/devices/machine/z80scc.h index 1468b4d0726b0..7b28c4f036d86 100644 --- a/src/devices/machine/z80scc.h +++ b/src/devices/machine/z80scc.h @@ -233,6 +233,7 @@ class z80scc_channel : public device_t, virtual void device_reset() override; unsigned int get_brg_rate(); + unsigned int get_rtxc_rate(); void update_baudtimer(); void scc_register_write(uint8_t reg, uint8_t data); diff --git a/src/devices/sound/i5000.h b/src/devices/sound/i5000.h index abd84f5ac43cc..cb3e45382e913 100644 --- a/src/devices/sound/i5000.h +++ b/src/devices/sound/i5000.h @@ -55,7 +55,6 @@ class i5000snd_device : public device_t, int vol_l; int output_r; int output_l; - }; channel_t m_channels[16]; diff --git a/src/devices/video/gf7600gs.cpp b/src/devices/video/gf7600gs.cpp index 075c95c5628ed..bbe409525e21b 100644 --- a/src/devices/video/gf7600gs.cpp +++ b/src/devices/video/gf7600gs.cpp @@ -19,9 +19,23 @@ void geforce_7600gs_device::map3(address_map &map) geforce_7600gs_device::geforce_7600gs_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : pci_device(mconfig, GEFORCE_7600GS, tag, owner, clock) + , m_vga(*this, "vga") { } +void geforce_7600gs_device::device_add_mconfig(machine_config &config) +{ + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_raw(XTAL(25'174'800), 900, 0, 640, 526, 0, 480); + screen.set_screen_update(m_vga, FUNC(nvidia_nv3_vga_device::screen_update)); + + // TODO: very late superset (G73) + NVIDIA_NV3_VGA(config, m_vga, 0); + m_vga->set_screen("screen"); + // FIXME: shared RAM + m_vga->set_vram_size(256*1024*1024); +} + void geforce_7600gs_device::device_start() { pci_device::device_start(); @@ -35,3 +49,38 @@ void geforce_7600gs_device::device_reset() { pci_device::device_reset(); } + +void geforce_7600gs_device::legacy_memory_map(address_map &map) +{ + map(0xa0000, 0xbffff).rw(FUNC(geforce_7600gs_device::vram_r), FUNC(geforce_7600gs_device::vram_w)); +} + +void geforce_7600gs_device::legacy_io_map(address_map &map) +{ + map(0, 0x02f).m(m_vga, FUNC(nvidia_nv3_vga_device::io_map)); +} + +uint8_t geforce_7600gs_device::vram_r(offs_t offset) +{ + return downcast(m_vga.target())->mem_r(offset); +} + +void geforce_7600gs_device::vram_w(offs_t offset, uint8_t data) +{ + downcast(m_vga.target())->mem_w(offset, data); +} + +void geforce_7600gs_device::map_extra(uint64_t memory_window_start, uint64_t memory_window_end, uint64_t memory_offset, address_space *memory_space, + uint64_t io_window_start, uint64_t io_window_end, uint64_t io_offset, address_space *io_space) +{ + if (BIT(command, 1)) + { + memory_space->install_readwrite_handler(0xa0000, 0xbffff, read8sm_delegate(*this, FUNC(geforce_7600gs_device::vram_r)), write8sm_delegate(*this, FUNC(geforce_7600gs_device::vram_w))); + } + + if (BIT(command, 0)) + { + io_space->install_device(0x03b0, 0x03df, *this, &geforce_7600gs_device::legacy_io_map); + //memory_space->install_rom(0xc0000, 0xcffff, (void *)expansion_rom); + } +} diff --git a/src/devices/video/gf7600gs.h b/src/devices/video/gf7600gs.h index db13718c6da3f..5a82f1ec437cc 100644 --- a/src/devices/video/gf7600gs.h +++ b/src/devices/video/gf7600gs.h @@ -6,7 +6,9 @@ #pragma once #include "machine/pci.h" +#include "video/pc_vga_nvidia.h" +// FIXME: PCIe x16 class geforce_7600gs_device : public pci_device { public: geforce_7600gs_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock, uint32_t subdevice_id) @@ -16,14 +18,26 @@ class geforce_7600gs_device : public pci_device { } geforce_7600gs_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + void legacy_memory_map(address_map &map); + void legacy_io_map(address_map &map); + protected: virtual void device_start() override; virtual void device_reset() override; + virtual void device_add_mconfig(machine_config &config) override; + + virtual void map_extra(uint64_t memory_window_start, uint64_t memory_window_end, uint64_t memory_offset, address_space *memory_space, + uint64_t io_window_start, uint64_t io_window_end, uint64_t io_offset, address_space *io_space) override; private: void map1(address_map &map); void map2(address_map &map); void map3(address_map &map); + + required_device m_vga; + + u8 vram_r(offs_t offset); + void vram_w(offs_t offset, uint8_t data); }; DECLARE_DEVICE_TYPE(GEFORCE_7600GS, geforce_7600gs_device) diff --git a/src/lib/util/bitstream.h b/src/lib/util/bitstream.h index 4f3817afe6fb6..2866d28c20d39 100644 --- a/src/lib/util/bitstream.h +++ b/src/lib/util/bitstream.h @@ -40,10 +40,11 @@ class bitstream_in private: // internal state uint32_t m_buffer; // current bit accumulator - int m_bits; // number of bits in the accumulator + int m_bits; // number of bits in the accumulator const uint8_t * m_read; // read pointer uint32_t m_doffset; // byte offset within the data uint32_t m_dlength; // length of the data + int m_dbitoffs; // bit offset within current read pointer }; @@ -64,7 +65,7 @@ class bitstream_out private: // internal state uint32_t m_buffer; // current bit accumulator - int m_bits; // number of bits in the accumulator + int m_bits; // number of bits in the accumulator uint8_t * m_write; // write pointer uint32_t m_doffset; // byte offset within the data uint32_t m_dlength; // length of the data @@ -85,7 +86,8 @@ inline bitstream_in::bitstream_in(const void *src, uint32_t srclength) m_bits(0), m_read(reinterpret_cast(src)), m_doffset(0), - m_dlength(srclength) + m_dlength(srclength), + m_dbitoffs(0) { } @@ -103,12 +105,31 @@ inline uint32_t bitstream_in::peek(int numbits) // fetch data if we need more if (numbits > m_bits) { - while (m_bits <= 24) + while (m_bits < 32) { + uint32_t newbits = 0; + if (m_doffset < m_dlength) - m_buffer |= m_read[m_doffset] << (24 - m_bits); - m_doffset++; - m_bits += 8; + { + // adjust current data to discard any previously read partial bits + newbits = (m_read[m_doffset] << m_dbitoffs) & 0xff; + } + + if (m_bits + 8 > 32) + { + // take only what can be used to fill out the rest of the buffer + m_dbitoffs = 32 - m_bits; + newbits >>= 8 - m_dbitoffs; + m_buffer |= newbits; + m_bits += m_dbitoffs; + } + else + { + m_buffer |= newbits << (24 - m_bits); + m_bits += 8 - m_dbitoffs; + m_dbitoffs = 0; + m_doffset++; + } } } @@ -196,8 +217,11 @@ inline bitstream_out::bitstream_out(void *dest, uint32_t destlength) inline void bitstream_out::write(uint32_t newbits, int numbits) { + newbits <<= 32 - numbits; + // flush the buffer if we're going to overflow it - if (m_bits + numbits > 32) + while (m_bits + numbits >= 32 && numbits > 0) + { while (m_bits >= 8) { if (m_doffset < m_dlength) @@ -207,11 +231,19 @@ inline void bitstream_out::write(uint32_t newbits, int numbits) m_bits -= 8; } - // shift the bits to the top - if (numbits == 0) - newbits = 0; - else - newbits <<= 32 - numbits; + // offload more bits if it'll still overflow the buffer + if (m_bits + numbits >= 32) + { + const int rem = std::min(32 - m_bits, numbits); + m_buffer |= newbits >> m_bits; + m_bits += rem; + newbits <<= rem; + numbits -= rem; + } + } + + if (numbits <= 0) + return; // now shift it down to account for the number of bits we already have and OR them in m_buffer |= newbits >> m_bits; diff --git a/src/mame/cxg/dominator.cpp b/src/mame/cxg/dominator.cpp index ffc7e5f503df4..dca2e66ddadd7 100644 --- a/src/mame/cxg/dominator.cpp +++ b/src/mame/cxg/dominator.cpp @@ -106,7 +106,7 @@ void dominator_state::lcd_s_w(offs_t offset, u64 data) m_out_lcd[offset][i] = BIT(data, i); // unscramble digit 7segs - static u8 seg2digit[4*7] = + static const u8 seg2digit[4*7] = { 0x03, 0x04, 0x00, 0x40, 0x41, 0x02, 0x42, 0x05, 0x06, 0x07, 0x48, 0x44, 0x45, 0x46, diff --git a/src/mame/funworld/funworld.cpp b/src/mame/funworld/funworld.cpp index ec8f6f1f4c5ce..c4b0cf7778f1b 100644 --- a/src/mame/funworld/funworld.cpp +++ b/src/mame/funworld/funworld.cpp @@ -5111,16 +5111,16 @@ ROM_START( pool10 ) ROM_LOAD( "2.u21", 0x0000, 0x8000, CRC(99c8c074) SHA1(f8082b08e895cbcd028a2b7cd961a7a2c8b2762c) ) ROM_LOAD( "1.u20", 0x8000, 0x8000, CRC(9abedd0c) SHA1(f184a82e8ec2387069d631bcb77e890acd44b3f5) ) - ROM_REGION( 0x0800, "nvram", 0 ) // pre-initialized BBRAM (hw uses SRAM + 3,6V battery) + ROM_REGION( 0x0800, "nvram", 0 ) // pre-initialized BBRAM (hw uses SRAM + 3,6V battery) ROM_LOAD( "pool10_nvram.bin", 0x0000, 0x0800, CRC(2f2fab43) SHA1(f815b70c171bad99fa6a60c256e4fdc85dd6b290) ) ROM_REGION( 0x0200, "proms", 0 ) ROM_LOAD( "n82s147an_p10.u25", 0x0000, 0x0200, CRC(1de03d14) SHA1(d8eda20865c1d885a428931f4380032e103b252c) ) ROM_REGION( 0x0600, "plds", 0 ) - ROM_LOAD( "palce16v8h_p10.u5", 0x0000, 0x0117, NO_DUMP ) // PLD is read protected - ROM_LOAD( "gal20v8b_p10.u22", 0x0200, 0x0157, NO_DUMP ) // PLD is read protected - ROM_LOAD( "gal20v8b_p10.u23", 0x0400, 0x0157, NO_DUMP ) // PLD is read protected + ROM_LOAD( "palce16v8h_p10.u5", 0x0000, 0x0117, NO_DUMP ) // PLD is read protected + ROM_LOAD( "gal20v8b_p10.u22", 0x0200, 0x0157, NO_DUMP ) // PLD is read protected + ROM_LOAD( "gal20v8b_p10.u23", 0x0400, 0x0157, NO_DUMP ) // PLD is read protected ROM_END @@ -5131,10 +5131,10 @@ ROM_END u20.bin 1ST AND 2ND HALF IDENTICAL u21.bin 1ST AND 2ND HALF IDENTICAL */ -ROM_START( pool10b ) // 1st set nominated for parent +ROM_START( pool10b ) // 1st set nominated for parent ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "u2.bin", 0x8000, 0x8000, CRC(64fee38e) SHA1(8a624a0b6eb4a3ba09e5b396dc5a01994dfdf294) ) - ROM_IGNORE( 0x8000 ) // Identical halves. Discarding 2nd half + ROM_IGNORE( 0x8000 ) // Identical halves. Discarding 2nd half // GFX ROMs are the same of pool10, but double sized with identical halves. ROM_REGION( 0x10000, "gfx1", 0 ) @@ -5143,16 +5143,16 @@ ROM_START( pool10b ) // 1st set nominated for parent ROM_LOAD( "u20.bin", 0x8000, 0x8000, CRC(3bdf1106) SHA1(fa21cbd49bb27ea4a784cf4e4b3fbd52650a285b) ) ROM_IGNORE( 0x8000 ) // Identical halves. Discarding 2nd half - ROM_REGION( 0x0800, "nvram", 0 ) // pre-initialized BBRAM (hw uses SRAM + 3,6V battery) + ROM_REGION( 0x0800, "nvram", 0 ) // pre-initialized BBRAM (hw uses SRAM + 3,6V battery) ROM_LOAD( "pool10b_nvram.bin", 0x0000, 0x0800, CRC(d9f35299) SHA1(2c3608bc9c322a9cc86f74d8fa2f660804a8cf3c) ) ROM_REGION( 0x0200, "proms", 0 ) ROM_LOAD( "n82s147an_p10.u25", 0x0000, 0x0200, CRC(1de03d14) SHA1(d8eda20865c1d885a428931f4380032e103b252c) ) ROM_REGION( 0x0600, "plds", 0 ) - ROM_LOAD( "palce16v8h_p10b.u5", 0x0000, 0x0117, NO_DUMP ) // PLD is read protected - ROM_LOAD( "palce20v8h_p10b.u22", 0x0200, 0x0157, NO_DUMP ) // PLD is read protected - ROM_LOAD( "palce20v8h_p10b.u23", 0x0400, 0x0157, NO_DUMP ) // PLD is read protected + ROM_LOAD( "palce16v8h_p10b.u5", 0x0000, 0x0117, NO_DUMP ) // PLD is read protected + ROM_LOAD( "palce20v8h_p10b.u22", 0x0200, 0x0157, NO_DUMP ) // PLD is read protected + ROM_LOAD( "palce20v8h_p10b.u23", 0x0400, 0x0157, NO_DUMP ) // PLD is read protected ROM_END @@ -5164,16 +5164,16 @@ ROM_START( pool10c ) ROM_LOAD( "b.u21", 0x0000, 0x8000, CRC(99c8c074) SHA1(f8082b08e895cbcd028a2b7cd961a7a2c8b2762c) ) ROM_LOAD( "c.u20", 0x8000, 0x8000, CRC(9abedd0c) SHA1(f184a82e8ec2387069d631bcb77e890acd44b3f5) ) - ROM_REGION( 0x0800, "nvram", 0 ) // pre-initialized BBRAM (hw uses SRAM + 3,6V battery) + ROM_REGION( 0x0800, "nvram", 0 ) // pre-initialized BBRAM (hw uses SRAM + 3,6V battery) ROM_LOAD( "pool10c_nvram.bin", 0x0000, 0x0800, CRC(396aefed) SHA1(066b87ff054dfb37f733a812ad0dc1b1bd2478e6) ) ROM_REGION( 0x0200, "proms", 0 ) ROM_LOAD( "n82s147an_p10.u25", 0x0000, 0x0200, CRC(1de03d14) SHA1(d8eda20865c1d885a428931f4380032e103b252c) ) ROM_REGION( 0x0600, "plds", 0 ) - ROM_LOAD( "palce16v8h_p10.u5", 0x0000, 0x0117, NO_DUMP ) // PLD is read protected - ROM_LOAD( "gal20v8b_p10.u22", 0x0200, 0x0157, NO_DUMP ) // PLD is read protected - ROM_LOAD( "gal20v8b_p10.u23", 0x0400, 0x0157, NO_DUMP ) // PLD is read protected + ROM_LOAD( "palce16v8h_p10.u5", 0x0000, 0x0117, NO_DUMP ) // PLD is read protected + ROM_LOAD( "gal20v8b_p10.u22", 0x0200, 0x0157, NO_DUMP ) // PLD is read protected + ROM_LOAD( "gal20v8b_p10.u23", 0x0400, 0x0157, NO_DUMP ) // PLD is read protected ROM_END @@ -5185,22 +5185,22 @@ ROM_END ROM_START( pool10d ) ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "3.50.u2", 0x8000, 0x8000, CRC(4c68e1f4) SHA1(bbab63a18e0c041ce519daa32e12dd1b6a672dce) ) - ROM_IGNORE( 0x8000 ) // Identical halves. Discarding 2nd half + ROM_IGNORE( 0x8000 ) // Identical halves. Discarding 2nd half ROM_REGION( 0x10000, "gfx1", 0 ) ROM_LOAD( "2.u21", 0x0000, 0x8000, CRC(99c8c074) SHA1(f8082b08e895cbcd028a2b7cd961a7a2c8b2762c) ) // sldh ROM_LOAD( "1.u20", 0x8000, 0x8000, CRC(9abedd0c) SHA1(f184a82e8ec2387069d631bcb77e890acd44b3f5) ) // sldh - ROM_REGION( 0x0800, "nvram", 0 ) // pre-initialized BBRAM (hw uses SRAM + 3,6V battery) + ROM_REGION( 0x0800, "nvram", 0 ) // pre-initialized BBRAM (hw uses SRAM + 3,6V battery) ROM_LOAD( "pool10d_nvram.bin", 0x0000, 0x0800, CRC(6b5984a0) SHA1(156a94e74e33b1a15222cffff9b62e65f6f5f2f5) ) ROM_REGION( 0x0200, "proms", 0 ) ROM_LOAD( "n82s147an_p10.u25", 0x0000, 0x0200, CRC(1de03d14) SHA1(d8eda20865c1d885a428931f4380032e103b252c) ) ROM_REGION( 0x0600, "plds", 0 ) - ROM_LOAD( "palce16v8h_p10.u5", 0x0000, 0x0117, NO_DUMP ) // PLD is read protected - ROM_LOAD( "gal20v8b_p10.u22", 0x0200, 0x0157, NO_DUMP ) // PLD is read protected - ROM_LOAD( "gal20v8b_p10.u23", 0x0400, 0x0157, NO_DUMP ) // PLD is read protected + ROM_LOAD( "palce16v8h_p10.u5", 0x0000, 0x0117, NO_DUMP ) // PLD is read protected + ROM_LOAD( "gal20v8b_p10.u22", 0x0200, 0x0157, NO_DUMP ) // PLD is read protected + ROM_LOAD( "gal20v8b_p10.u23", 0x0400, 0x0157, NO_DUMP ) // PLD is read protected ROM_END @@ -5288,16 +5288,16 @@ ROM_START( pool10e ) ROM_LOAD( "2.u21", 0x0000, 0x8000, CRC(a0d54044) SHA1(c7be1f12f72095daee32ae41c3554d8ab4f99245) ) // sldh ROM_LOAD( "1.u20", 0x8000, 0x8000, CRC(55c9fcc8) SHA1(224bdf63ed345b1def4852af3b33f07790fbf123) ) // sldh - ROM_REGION( 0x0800, "nvram", 0 ) // pre-initialized BBRAM (hw uses SRAM + 3,6V battery) + ROM_REGION( 0x0800, "nvram", 0 ) // pre-initialized BBRAM (hw uses SRAM + 3,6V battery) ROM_LOAD( "pool10e_nvram.bin", 0x0000, 0x0800, CRC(e20f9a14) SHA1(617ca53263a971c9f835a95737a66fac5b99780f) ) - ROM_REGION( 0x0200, "proms", 0 ) // Same as Pool 10, but the 1st half duplicated to cover any PLD addressing + ROM_REGION( 0x0200, "proms", 0 ) // Same as Pool 10, but the 1st half duplicated to cover any PLD addressing ROM_LOAD( "am27s29.u25", 0x0000, 0x0200, CRC(2c315cbf) SHA1(f3f91329f2b8388decf26a050f8fb7da38694218) ) - ROM_REGION( 0x3000, "plds", 0 ) - ROM_LOAD( "palce16v8h.u5", 0x0000, 0x0892, BAD_DUMP CRC(123d539a) SHA1(cccf0cbae3175b091a998eedf4aa44a55b679400) ) // read protected - ROM_LOAD( "palce20v8h.u22", 0x1000, 0x0a92, BAD_DUMP CRC(ba2a021f) SHA1(e9c5970f80c7446c91282d53cfe97c92353dce7d) ) // read protected - ROM_LOAD( "palce20v8h.u23", 0x2000, 0x0a92, BAD_DUMP CRC(ba2a021f) SHA1(e9c5970f80c7446c91282d53cfe97c92353dce7d) ) // read protected + ROM_REGION( 0x0600, "plds", 0 ) // all read protected + ROM_LOAD( "palce16v8h.u5", 0x0000, 0x0117, NO_DUMP ) + ROM_LOAD( "palce20v8h.u22", 0x0200, 0x0157, NO_DUMP ) + ROM_LOAD( "palce20v8h.u23", 0x0400, 0x0157, NO_DUMP ) ROM_END @@ -5309,20 +5309,20 @@ ROM_START( pool10f ) ROM_LOAD( "cmc-pool10-b.u21", 0x0000, 0x8000, CRC(99c8c074) SHA1(f8082b08e895cbcd028a2b7cd961a7a2c8b2762c) ) ROM_LOAD( "cmc-pool10-c.u20", 0x8000, 0x8000, CRC(9abedd0c) SHA1(f184a82e8ec2387069d631bcb77e890acd44b3f5) ) - ROM_REGION( 0x0800, "nvram", 0 ) // pre-initialized BBRAM (hw uses SRAM + 3,6V battery) + ROM_REGION( 0x0800, "nvram", 0 ) // pre-initialized BBRAM (hw uses SRAM + 3,6V battery) ROM_LOAD( "pool10f_nvram.bin", 0x0000, 0x0800, CRC(75dd3562) SHA1(a359cada144e7c90946649f5dd0998d0ee48f4d2) ) ROM_REGION( 0x0200, "proms", 0 ) ROM_LOAD( "27s29.u25", 0x0000, 0x0200, CRC(1de03d14) SHA1(d8eda20865c1d885a428931f4380032e103b252c) ) ROM_REGION( 0x0600, "plds", 0 ) - ROM_LOAD( "palce16v8h_p10.u5", 0x0000, 0x0117, NO_DUMP ) // PLD is read protected - ROM_LOAD( "gal20v8b_p10.u22", 0x0200, 0x0157, NO_DUMP ) // PLD is read protected - ROM_LOAD( "gal20v8b_p10.u23", 0x0400, 0x0157, NO_DUMP ) // PLD is read protected + ROM_LOAD( "palce16v8h_p10.u5", 0x0000, 0x0117, NO_DUMP ) // PLD is read protected + ROM_LOAD( "gal20v8b_p10.u22", 0x0200, 0x0157, NO_DUMP ) // PLD is read protected + ROM_LOAD( "gal20v8b_p10.u23", 0x0400, 0x0157, NO_DUMP ) // PLD is read protected ROM_END -ROM_START( pool10g ) // 2nd set nominated for parent +ROM_START( pool10g ) // 2nd set nominated for parent ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "3.u2", 0x8000, 0x8000, CRC(7b537ce6) SHA1(b221d08c53b9e14178335632420e78070b9cfb27) ) @@ -5330,8 +5330,8 @@ ROM_START( pool10g ) // 2nd set nominated for parent ROM_LOAD( "2.u21", 0x0000, 0x8000, CRC(99c8c074) SHA1(f8082b08e895cbcd028a2b7cd961a7a2c8b2762c) ) ROM_LOAD( "1.u20", 0x8000, 0x8000, CRC(9abedd0c) SHA1(f184a82e8ec2387069d631bcb77e890acd44b3f5) ) - ROM_REGION( 0x0800, "nvram", 0 ) // pre-initialized BBRAM (hw uses SRAM + 3,6V battery) - ROM_LOAD( "pool10h_nvram.bin", 0x0000, 0x0800, CRC(3ec39472) SHA1(aa2bb5abd16557560a19842929ad7dab852abbbf) ) + ROM_REGION( 0x0800, "nvram", 0 ) // pre-initialized BBRAM (hw uses SRAM + 3,6V battery) + ROM_LOAD( "pool10h_nvram.bin", 0x0000, 0x0800, CRC(3ec39472) SHA1(aa2bb5abd16557560a19842929ad7dab852abbbf) ) ROM_REGION( 0x0200, "proms", 0 ) ROM_LOAD( "82s147.u25", 0x0000, 0x0200, CRC(1de03d14) SHA1(d8eda20865c1d885a428931f4380032e103b252c) ) @@ -5346,8 +5346,8 @@ ROM_START( pool10h ) ROM_LOAD( "cmc-pool10+b+.u21", 0x0000, 0x8000, CRC(99c8c074) SHA1(f8082b08e895cbcd028a2b7cd961a7a2c8b2762c) ) ROM_LOAD( "cmc-pool10+c+.u20", 0x8000, 0x8000, CRC(9abedd0c) SHA1(f184a82e8ec2387069d631bcb77e890acd44b3f5) ) - ROM_REGION( 0x0800, "nvram", 0 ) // pre-initialized BBRAM (hw uses SRAM + 3,6V battery) - ROM_LOAD( "pool10i_nvram.bin", 0x0000, 0x0800, CRC(e93dee30) SHA1(195525e95a3bdc1b002b12fd27bc31c63d7a9276) ) + ROM_REGION( 0x0800, "nvram", 0 ) // pre-initialized BBRAM (hw uses SRAM + 3,6V battery) + ROM_LOAD( "pool10i_nvram.bin", 0x0000, 0x0800, CRC(e93dee30) SHA1(195525e95a3bdc1b002b12fd27bc31c63d7a9276) ) ROM_REGION( 0x0200, "proms", 0 ) ROM_LOAD( "n82s147an_p10.u25", 0x0000, 0x0200, CRC(1de03d14) SHA1(d8eda20865c1d885a428931f4380032e103b252c) ) @@ -5357,16 +5357,16 @@ ROM_END ROM_START( pool10i ) ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "a.u2", 0x8000, 0x8000, CRC(566bc05d) SHA1(eec88c8ba6cb664f38ebf8b71f99b4e7d04a9601) ) // sldh - ROM_IGNORE( 0x8000 ) // Identical halves. Discarding 2nd half + ROM_IGNORE( 0x8000 ) // Identical halves. Discarding 2nd half ROM_REGION( 0x10000, "gfx1", 0 ) ROM_LOAD( "b.u21", 0x0000, 0x8000, CRC(581c4878) SHA1(5ae61af090feea1745e22f46b33b2c01e6013fbe) ) // sldh - ROM_IGNORE( 0x8000 ) // Identical halves. Discarding 2nd half + ROM_IGNORE( 0x8000 ) // Identical halves. Discarding 2nd half ROM_LOAD( "c.u20", 0x8000, 0x8000, CRC(3bdf1106) SHA1(fa21cbd49bb27ea4a784cf4e4b3fbd52650a285b) ) // sldh - ROM_IGNORE( 0x8000 ) // Identical halves. Discarding 2nd half + ROM_IGNORE( 0x8000 ) // Identical halves. Discarding 2nd half - ROM_REGION( 0x0800, "nvram", 0 ) // pre-initialized BBRAM (hw uses SRAM + 3,6V battery) - ROM_LOAD( "pool10l_nvram.bin", 0x0000, 0x0800, CRC(89cbee4b) SHA1(ff8031a96ee40e1e62abbae7a0b3d9dc2122759f) ) + ROM_REGION( 0x0800, "nvram", 0 ) // pre-initialized BBRAM (hw uses SRAM + 3,6V battery) + ROM_LOAD( "pool10l_nvram.bin", 0x0000, 0x0800, CRC(89cbee4b) SHA1(ff8031a96ee40e1e62abbae7a0b3d9dc2122759f) ) ROM_REGION( 0x0200, "proms", 0 ) ROM_LOAD( "82s147.u25", 0x0000, 0x0200, CRC(1de03d14) SHA1(d8eda20865c1d885a428931f4380032e103b252c) ) @@ -5380,7 +5380,7 @@ ROM_START( pool10j ) ROM_LOAD( "cmcpool10.u21", 0x0000, 0x8000, CRC(99c8c074) SHA1(f8082b08e895cbcd028a2b7cd961a7a2c8b2762c) ) ROM_LOAD( "cmcpool10.u20", 0x8000, 0x8000, CRC(9abedd0c) SHA1(f184a82e8ec2387069d631bcb77e890acd44b3f5) ) - ROM_REGION( 0x0800, "nvram", 0 ) // pre-initialized BBRAM (hw uses SRAM + 3,6V battery) + ROM_REGION( 0x0800, "nvram", 0 ) // pre-initialized BBRAM (hw uses SRAM + 3,6V battery) ROM_LOAD( "pool10j_nvram.bin", 0x0000, 0x0800, CRC(48684b02) SHA1(6f2fbd0e2621e31b881edd8056ff93ee78f331ab) ) ROM_REGION( 0x0200, "proms", 0 ) @@ -5402,11 +5402,11 @@ ROM_START( pool10k ) // found on two PCBs ROM_REGION( 0x10000, "gfx1", 0 ) ROM_LOAD( "eagle2.u21", 0x0000, 0x8000, CRC(581c4878) SHA1(5ae61af090feea1745e22f46b33b2c01e6013fbe) ) - ROM_IGNORE( 0x8000 ) // Identical halves. Discarding 2nd half + ROM_IGNORE( 0x8000 ) // Identical halves. Discarding 2nd half ROM_LOAD( "eagle3.u20", 0x8000, 0x8000, CRC(3bdf1106) SHA1(fa21cbd49bb27ea4a784cf4e4b3fbd52650a285b) ) - ROM_IGNORE( 0x8000 ) // Identical halves. Discarding 2nd half + ROM_IGNORE( 0x8000 ) // Identical halves. Discarding 2nd half - ROM_REGION( 0x0800, "nvram", 0 ) // pre-initialized BBRAM (hw uses SRAM + 3,6V battery) + ROM_REGION( 0x0800, "nvram", 0 ) // pre-initialized BBRAM (hw uses SRAM + 3,6V battery) ROM_LOAD( "pool10k_nvram.bin", 0x0000, 0x0800, CRC(fb0e9e6a) SHA1(97fbcff4d615983321bf5d53884f7ed56f8a8998) ) ROM_REGION( 0x0200, "proms", 0 ) @@ -5426,7 +5426,7 @@ ROM_START( mag10 ) // same code as pool10g but for title and copyright changes, ROM_LOAD( "magic_b.u21", 0x0000, 0x8000, CRC(99c8c074) SHA1(f8082b08e895cbcd028a2b7cd961a7a2c8b2762c) ) ROM_LOAD( "magic_c.u20", 0x8000, 0x8000, CRC(b863dead) SHA1(8f0016c39ce64a1ecde66f61b7f0db9cdfb36873) ) - ROM_REGION( 0x0800, "nvram", 0 ) // pre-initialized BBRAM (hw uses SRAM + 3,6V battery) + ROM_REGION( 0x0800, "nvram", 0 ) // pre-initialized BBRAM (hw uses SRAM + 3,6V battery) ROM_LOAD( "mag10_nvram.bin", 0x0000, 0x0800, CRC(3ec39472) SHA1(aa2bb5abd16557560a19842929ad7dab852abbbf) ) ROM_REGION( 0x0200, "proms", 0 ) @@ -5480,8 +5480,8 @@ ROM_START( biliard ) ROM_LOAD( "cmcpool10-b.u21", 0x0000, 0x8000, CRC(99c8c074) SHA1(f8082b08e895cbcd028a2b7cd961a7a2c8b2762c) ) ROM_LOAD( "biliard-c.u20", 0x8000, 0x8000, CRC(b15d10ec) SHA1(9b0f32ff791063cfb2d8339a4e8041e034e73eb7) ) - ROM_REGION( 0x0800, "nvram", 0 ) // pre-initialized BBRAM (hw uses SRAM + 3,6V battery) - ROM_LOAD( "biliard_nvram.bin", 0x0000, 0x0800, CRC(2f2fab43) SHA1(f815b70c171bad99fa6a60c256e4fdc85dd6b290) ) + ROM_REGION( 0x0800, "nvram", 0 ) // pre-initialized BBRAM (hw uses SRAM + 3,6V battery) + ROM_LOAD( "biliard_nvram.bin", 0x0000, 0x0800, CRC(2f2fab43) SHA1(f815b70c171bad99fa6a60c256e4fdc85dd6b290) ) ROM_REGION( 0x0200, "proms", 0 ) ROM_LOAD( "am27s29pc.u25", 0x0000, 0x0200, CRC(1de03d14) SHA1(d8eda20865c1d885a428931f4380032e103b252c) ) @@ -5498,7 +5498,7 @@ ROM_END This one seems to run in royalcd1 hardware. */ -ROM_START( royal ) // brute hack of pool 10 +ROM_START( royal ) // brute hack of pool 10 ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD( "3.u2", 0x8000, 0x8000, CRC(d4f36273) SHA1(2049257ea9ee52fde9cabfe40e809e00526a960e) ) // sldh @@ -5509,11 +5509,11 @@ ROM_START( royal ) // brute hack of pool 10 ROM_LOAD( "1.u20", 0x8000, 0x8000, CRC(9b59e72d) SHA1(96217272ce5abb78ff45ff116a5d921c57717ed9) ) // sldh ROM_IGNORE( 0x8000 ) // Identical halves. Discarding 2nd half - ROM_REGION( 0x0800, "nvram", 0 ) // pre-initialized BBRAM (hw uses SRAM + 3,6V battery) - ROM_LOAD( "royal_nvram.bin", 0x0000, 0x0800, CRC(9df190d5) SHA1(4be0f5c6f89f822568e45e0e8457cf51ced2dcfe) ) + ROM_REGION( 0x0800, "nvram", 0 ) // pre-initialized BBRAM (hw uses SRAM + 3,6V battery) + ROM_LOAD( "royal_nvram.bin", 0x0000, 0x0800, CRC(9df190d5) SHA1(4be0f5c6f89f822568e45e0e8457cf51ced2dcfe) ) ROM_REGION( 0x0200, "proms", 0 ) - ROM_LOAD( "82s147.u25", 0x0000, 0x0200, CRC(d922d4e5) SHA1(d1541eabfd9cedd9eaa4fc48a3f64b078ea456be) ) // sldh + ROM_LOAD( "82s147.u25", 0x0000, 0x0200, CRC(d922d4e5) SHA1(d1541eabfd9cedd9eaa4fc48a3f64b078ea456be) ) // sldh ROM_END @@ -8383,7 +8383,6 @@ void funworld_state::init_saloon() // inversion for i2c clock generation in i2c_rx routine rom[0xbf23] = 0x60; // ex 70h rom[0xbf2a] = 0x70; // ex 60h - } @@ -8521,7 +8520,6 @@ static void decrypt_rcdino4(uint8_t *rom, int size, uint8_t *gfxrom, int sizeg, int a = bitswap<16>(i, 15, 13, 14, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0); rom[a] = buffer[i]; } - } /****************************** @@ -8548,7 +8546,6 @@ static void decrypt_rcdino4(uint8_t *rom, int size, uint8_t *gfxrom, int sizeg, src[x] = bitswap<8>(src[x], 7, 6, 4, 5, 3, 2, 1, 0); src[x] = src[x] ^ 0x81; } - } @@ -8796,7 +8793,6 @@ void intergames_state::init_novop_a() rom[0xb25e] = 0xfc; rom[0xadd0] = 0x40; - } void intergames_state::init_novop_b() @@ -8807,7 +8803,6 @@ void intergames_state::init_novop_b() rom[0xb2bf] = 0xfc; rom[0xae31] = 0x40; - } void intergames_state::init_intgms() @@ -8838,7 +8833,6 @@ void intergames_state::init_intgms() // rom[0xaf69] = 0xea; // rom[0xaf6a] = 0xea; // rom[0xaf6b] = 0xea; - } diff --git a/src/mame/layout/novag_mentor16.lay b/src/mame/layout/novag_mentor16.lay index ed38ea947d7fe..8ff15f4b77bdd 100644 --- a/src/mame/layout/novag_mentor16.lay +++ b/src/mame/layout/novag_mentor16.lay @@ -380,7 +380,7 @@ authors:hap - + @@ -440,11 +440,12 @@ authors:hap - - - - - + + + + + + diff --git a/src/mame/layout/novag_primo.lay b/src/mame/layout/novag_primo.lay new file mode 100644 index 0000000000000..bbcbde141fe05 --- /dev/null +++ b/src/mame/layout/novag_primo.lay @@ -0,0 +1,475 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/mame/layout/novag_supremo.lay b/src/mame/layout/novag_supremo.lay index fe0fed214d1cc..c0c39a2694389 100644 --- a/src/mame/layout/novag_supremo.lay +++ b/src/mame/layout/novag_supremo.lay @@ -345,7 +345,7 @@ authors:hap - + diff --git a/src/mame/mame.lst b/src/mame/mame.lst index 42cc84fbc797f..b881062fce269 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -34865,6 +34865,11 @@ nmicro @source:novag/micro2.cpp nmicro2 +@source:novag/primo.cpp +nprimo +nsnova +supremo + @source:novag/robotadv.cpp robotadv @@ -34887,11 +34892,7 @@ sforteb // sfortec // sfortec1 // -@source:novag/snova.cpp -nsnova -supremo - -@source:novag/svip.cpp +@source:novag/vip.cpp nsvip nsvipa nsvipb diff --git a/src/mame/miltonbradley/microvsn.cpp b/src/mame/miltonbradley/microvsn.cpp index 4a935bba7801a..94ae4ff2fc432 100644 --- a/src/mame/miltonbradley/microvsn.cpp +++ b/src/mame/miltonbradley/microvsn.cpp @@ -392,10 +392,7 @@ int microvision_state::i8021_t1_r() { // T1: paddle capacitor (active low) if (m_paddle_on) - { - bool active = (m_p2 & 0xc) || m_paddle_delay > machine().time(); - return active ? 1 : 0; - } + return (m_p2 & 0xc || m_paddle_delay > machine().time()) ? 1 : 0; else return 1; } diff --git a/src/mame/misc/gammagic.cpp b/src/mame/misc/gammagic.cpp index 7aa40f62c796c..b598ebac5efbc 100644 --- a/src/mame/misc/gammagic.cpp +++ b/src/mame/misc/gammagic.cpp @@ -1,5 +1,5 @@ // license:BSD-3-Clause -// copyright-holders:Grull Osgo +// copyright-holders:Grull Osgo, Angelo Salese /************************************************************************************************** Game Magic (c) 1997 Bally Gaming Co. @@ -7,12 +7,8 @@ Game Magic (c) 1997 Bally Gaming Co. Preliminary driver by Grull Osgo TODO: -- gammagic: throws a CONFIG.SYS error in CD_BALLY.SYS right away. - Checks the disc drive in bp 6b5b subroutine against a 0x0258 status after sending an - identify packet device command (ATAPI returns 0x0208) expecting a ready + device fault? - Drive should be a Toshiba XM-3301 CD/DVD drive according to RAM buffer. - -- gammagic: can't find D: if above is skipped after detecting ESS and Voodoo cards. +- gammagic: pings ESS Solo Adlib ports, prints "Voodoo two 50hz enabled" (dual screen?), + "ignoring write to swapbufferCMD when CMDFIFO is enabled", hangs there; - 99bottles: "not High Sierra or ISO9660", likely bad (disc-at-once with one track?) @@ -154,9 +150,8 @@ void gammagic_state::gammagic(machine_config &config) i82371sb_ide_device &ide(I82371SB_IDE(config, "pci:07.1", 0, "maincpu")); ide.irq_pri().set("pci:07.0", FUNC(i82371sb_isa_device::pc_irq14_w)); ide.irq_sec().set("pci:07.0", FUNC(i82371sb_isa_device::pc_mirq0_w)); - // FIXME: change to Toshiba CDROM - ide.subdevice("ide1")->slot(0).set_default_option("cdrom"); -// ide.subdevice("ide1")->slot(0).set_option_machine_config("cdrom", cdrom_config); + ide.subdevice("ide1")->slot(0).set_default_option("xm3301"); +// ide.subdevice("ide1")->slot(0).set_option_machine_config("xm3301", cdrom_config); ide.subdevice("ide2")->slot(0).set_default_option(nullptr); PCI_SLOT(config, "pci:1", pci_cards, 15, 0, 1, 2, 3, nullptr); @@ -207,7 +202,7 @@ ROM_START( gammagic ) // 68k code, unknown size/number of roms ROM_LOAD("v8000.bin", 0x0000, 0x20000, NO_DUMP) - DISK_REGION( "pci:07.1:ide1:0:cdrom" ) + DISK_REGION( "pci:07.1:ide1:0:xm3301" ) DISK_IMAGE_READONLY( "gammagic", 0, SHA1(947650b13f87eea6608a32a1bae7dca19d911f15) ) ROM_END @@ -222,7 +217,7 @@ ROM_START( 99bottles ) // 68k code, unknown size/number of roms ROM_LOAD("v8000.bin", 0x0000, 0x20000, NO_DUMP) - DISK_REGION( "pci:07.1:ide1:0:cdrom" ) + DISK_REGION( "pci:07.1:ide1:0:xm3301" ) DISK_IMAGE_READONLY( "99bottles", 0, BAD_DUMP SHA1(0b874178c8dd3cfc451deb53dc7936dc4ad5a04f)) ROM_END @@ -234,10 +229,7 @@ ROM_END Game driver(s) ***************************************************************************/ -/************************* -* Game Drivers * -*************************/ -// YEAR NAME PARENT MACHINE INPUT STATE INIT ROT COMPANY FULLNAME FLAGS -GAME( 1999, gammagic, 0, gammagic, gammagic, gammagic_state, empty_init, ROT0, "Bally Gaming Co.", "Game Magic", MACHINE_IS_SKELETON ) -GAME( 1999, 99bottles, gammagic, gammagic, gammagic, gammagic_state, empty_init, ROT0, "Bally Gaming Co.", "99 Bottles of Beer", MACHINE_IS_SKELETON ) + +GAME( 1999, gammagic, 0, gammagic, gammagic, gammagic_state, empty_init, ROT0, "Bally Gaming Co.", "Game Magic", MACHINE_NOT_WORKING | MACHINE_NO_SOUND | MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1999, 99bottles, gammagic, gammagic, gammagic, gammagic_state, empty_init, ROT0, "Bally Gaming Co.", "99 Bottles of Beer", MACHINE_NOT_WORKING | MACHINE_NO_SOUND | MACHINE_IMPERFECT_GRAPHICS ) diff --git a/src/mame/msx/sfkick.cpp b/src/mame/msx/sfkick.cpp index 74b25abdc50ff..1903008163fbe 100644 --- a/src/mame/msx/sfkick.cpp +++ b/src/mame/msx/sfkick.cpp @@ -153,12 +153,14 @@ DIPSW-2 */ #include "emu.h" + #include "cpu/z80/z80.h" -#include "video/v9938.h" #include "machine/bankdev.h" #include "machine/gen_latch.h" #include "machine/i8255.h" #include "sound/ymopn.h" +#include "video/v9938.h" + #include "screen.h" #include "speaker.h" @@ -168,8 +170,8 @@ namespace { class sfkick_state : public driver_device { public: - sfkick_state(const machine_config &mconfig, device_type type, const char *tag) - : driver_device(mconfig, type, tag), + sfkick_state(const machine_config &mconfig, device_type type, const char *tag) : + driver_device(mconfig, type, tag), m_maincpu(*this, "maincpu"), m_soundcpu(*this, "soundcpu"), m_page(*this, "page%u", 0U), @@ -201,8 +203,8 @@ class sfkick_state : public driver_device void sfkick_sound_map(address_map &map); void bank_mem(address_map &map); - uint8_t m_primary_slot_reg; - int m_input_mux; + uint8_t m_primary_slot_reg = 0; + uint8_t m_input_mux = 0; required_device m_maincpu; required_device m_soundcpu; @@ -328,7 +330,7 @@ static INPUT_PORTS_START( sfkick ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_START("DIAL") - PORT_BIT( 0xff, 0x00, IPT_DIAL ) PORT_SENSITIVITY(25) PORT_KEYDELTA(-20) + PORT_BIT( 0xff, 0x00, IPT_DIAL ) PORT_SENSITIVITY(25) PORT_KEYDELTA(20) PORT_REVERSE PORT_START("DSW1") // bitswapped at read! 76543210 -> 45673210 PORT_DIPNAME( 0x10, 0x10, DEF_STR( Cabinet ) ) PORT_DIPLOCATION("SW1:1") diff --git a/src/mame/novag/mentor16.cpp b/src/mame/novag/mentor16.cpp index dba252d431461..5e8db50f62872 100644 --- a/src/mame/novag/mentor16.cpp +++ b/src/mame/novag/mentor16.cpp @@ -11,10 +11,11 @@ properly. Hardware notes: - PCB label: 100103 - Hitachi HD6301Y0P @ 8MHz -- 2*4-digit LCD panels, +- 2*4-digit LCD panels - piezo, 16+4 LEDs, 8*8 chessboard buttons TODO: +- if/when MAME supports an exit callback, hook up power-off switch to that - is Novag Amigo the same ROM? MCU label is also "892A", but QFP, ROM serial M44 BTANB: @@ -27,7 +28,7 @@ Hardware notes: #include "cpu/m6800/m6801.h" #include "machine/sensorboard.h" -#include "sound/spkrdev.h" +#include "sound/dac.h" #include "video/pwm.h" #include "speaker.h" @@ -55,11 +56,11 @@ class mentor16_state : public driver_device void mentor16(machine_config &config); - DECLARE_INPUT_CHANGED_MEMBER(power_off); + DECLARE_INPUT_CHANGED_MEMBER(power_off) { if (newval) m_power = false; } protected: virtual void machine_start() override; - virtual void machine_reset() override; + virtual void machine_reset() override { m_power = true; } private: // devices/pointers @@ -67,7 +68,7 @@ class mentor16_state : public driver_device required_device m_board; required_device m_led_pwm; required_device m_lcd_pwm; - required_device m_dac; + required_device m_dac; required_ioport_array<2> m_inputs; output_finder<4, 16> m_out_lcd; output_finder<8> m_out_digit; @@ -76,6 +77,8 @@ class mentor16_state : public driver_device u8 m_inp_mux = 0; u16 m_lcd_segs = 0; u8 m_lcd_com = 0; + emu_timer *m_piezo_delay; + u8 m_piezo_data = 0; // I/O handlers void standby(int state); @@ -85,6 +88,7 @@ class mentor16_state : public driver_device template void lcd_segs_w(u8 data); void lcd_com_w(u8 data); + void update_piezo(s32 param); void p2_w(u8 data); u8 p5_r(); u8 p6_r(); @@ -93,6 +97,8 @@ class mentor16_state : public driver_device void mentor16_state::machine_start() { + m_piezo_delay = timer_alloc(FUNC(mentor16_state::update_piezo), this); + m_out_lcd.resolve(); m_out_digit.resolve(); @@ -101,6 +107,7 @@ void mentor16_state::machine_start() save_item(NAME(m_inp_mux)); save_item(NAME(m_lcd_segs)); save_item(NAME(m_lcd_com)); + save_item(NAME(m_piezo_data)); } @@ -109,30 +116,6 @@ void mentor16_state::machine_start() I/O *******************************************************************************/ -// power - -void mentor16_state::machine_reset() -{ - m_power = true; -} - -INPUT_CHANGED_MEMBER(mentor16_state::power_off) -{ - if (newval) - m_power = false; -} - -void mentor16_state::standby(int state) -{ - // clear display - if (state) - { - m_led_pwm->clear(); - m_lcd_pwm->clear(); - } -} - - // LCD void mentor16_state::lcd_pwm_w(offs_t offset, u8 data) @@ -177,6 +160,22 @@ void mentor16_state::lcd_com_w(u8 data) // misc +void mentor16_state::standby(int state) +{ + // clear display + if (state) + { + m_led_pwm->clear(); + m_lcd_pwm->clear(); + } +} + +void mentor16_state::update_piezo(s32 param) +{ + m_piezo_data = param & 3; + m_dac->write(m_piezo_data); +} + void mentor16_state::p2_w(u8 data) { // P20-P27: input mux, led data @@ -184,7 +183,6 @@ void mentor16_state::p2_w(u8 data) m_led_pwm->write_mx(m_inp_mux); } - u8 mentor16_state::p5_r() { // P50-P57: read chessboard @@ -207,15 +205,19 @@ u8 mentor16_state::p6_r() if (m_inp_mux & m_inputs[i]->read()) data |= 1 << i; + // P62,P63: piezo + data |= m_piezo_data << 2; + // P67: power state data |= (m_power) ? 0x80 : 0x00; - return ~data ^ 8; + return data ^ 0xf3; } void mentor16_state::p6_w(u8 data) { - // P62: speaker out (P63 too, but forced low) - m_dac->level_w(BIT(~data, 2)); + // P62,P63: piezo (relies on short delay at rising edge) + update_piezo(data >> 2 & m_piezo_data); + m_piezo_delay->adjust(attotime::from_usec(5), data >> 2 & 3); // P64-P66: led select m_led_pwm->write_my(~data >> 4 & 7); @@ -271,7 +273,7 @@ void mentor16_state::mentor16(machine_config &config) m_maincpu->out_p4_cb().set(FUNC(mentor16_state::lcd_segs_w<1>)); m_maincpu->in_p5_cb().set(FUNC(mentor16_state::p5_r)); m_maincpu->in_p6_cb().set(FUNC(mentor16_state::p6_r)); - m_maincpu->in_p6_override_mask(0x08); // P23 forced low, slow piezo otherwise + m_maincpu->in_p6_override_mask(0x0c); // reads back from live piezo m_maincpu->out_p6_cb().set(FUNC(mentor16_state::p6_w)); SENSORBOARD(config, m_board).set_type(sensorboard_device::BUTTONS); @@ -288,7 +290,7 @@ void mentor16_state::mentor16(machine_config &config) // sound hardware SPEAKER(config, "speaker").front_center(); - SPEAKER_SOUND(config, m_dac).add_route(ALL_OUTPUTS, "speaker", 0.25); + DAC_2BIT_ONES_COMPLEMENT(config, m_dac).add_route(ALL_OUTPUTS, "speaker", 0.125); } diff --git a/src/mame/novag/snova.cpp b/src/mame/novag/primo.cpp similarity index 69% rename from src/mame/novag/snova.cpp rename to src/mame/novag/primo.cpp index ba2141b5495a9..e4f14d60f0e17 100644 --- a/src/mame/novag/snova.cpp +++ b/src/mame/novag/primo.cpp @@ -3,18 +3,36 @@ // thanks-to:Berger, bataais /******************************************************************************* -Novag Super Nova & related chess computers. I believe the series started with -Primo. The chess engine is by David Kittinger. +Novag Primo & related chess computers. The chess engine is by David Kittinger. -NOTE: nsnova does an NMI at power-off (or power-failure). If this isn't done, -NVRAM won't work properly (supremo doesn't have NVRAM). +NOTE: Turn the power switch off before exiting MAME, otherwise NVRAM won't save +properly. TODO: -- if/when MAME supports an exit callback, hook up nsnova power-off switch to that -- unmapped reads from 0x33/0x34 (nsnova) or 0x3c/0x3d (supremo) +- if/when MAME supports an exit callback, hook up power-off switch to that +- unmapped reads from 0x3c/0x3d (primo/supremo) or 0x33/0x34 (nsnova) - supremo unmapped writes to 0x2000/0x6000, always 0? -- is "Aquamarine / Super Nova" the same rom as nsnova and just a redesign? - is the 1st version of supremo(black plastic) the same ROM? +- is "Aquamarine / Super Nova" the same ROM as nsnova and just a redesign? + +BTANB: +- primo has the same bug as nvip, where if the user presses Go right after + entering a move during the opening, the CPU opponent will answer by playing + a move with white + +================================================================================ + +Novag Primo (model 871) +----------------------- + +Hardware notes: +- PCB label: 100059/100060 +- Hitachi HD6301Y0P (mode 2) @ 8MHz +- 2KB RAM(M5M5118P) +- LCD with 4 digits and custom segments, no LCD chip +- buzzer, 16 LEDs, 8*8 chessboard buttons + +The LCD is the same as the one in VIP / Super VIP. ================================================================================ @@ -22,10 +40,10 @@ Novag Supremo (model 881) ------------------------- Hardware notes: -- Hitachi HD63A03YP MCU @ 8MHz (2MHz internal) +- PCB label: 100090 +- Hitachi HD63A03YP @ 8MHz - 32KB ROM(TC57256AD-12), 2KB RAM(TC5516APL) -- LCD with 4 digits and custom segments, no LCD chip -- buzzer, 16 LEDs, 8*8 chessboard buttons +- rest is same as Primo Supremo also had a "limited edition" rerelease in 1990, plastic is fake-wood instead of black and backpanel sticker is gold, otherwise it's the same game. @@ -37,7 +55,7 @@ Novag Super Nova (model 904) ---------------------------- Hardware notes: -- Hitachi HD63A03YP MCU @ 16MHz (4MHz internal) +- Hitachi HD63A03YP @ 16MHz - 32KB ROM(TC57256AD-12), 8KB RAM(CXK58648P-10L) - LCD with 4 digits and custom segments, no LCD chip - RJ-12 port for Novag Super System (like the one in nsvip/sexpertc) @@ -63,16 +81,17 @@ the Super VIP combined with the Novag Super System Touch Sensory board. #include "speaker.h" // internal artwork +#include "novag_primo.lh" #include "novag_snova.lh" #include "novag_supremo.lh" namespace { -class snova_state : public driver_device +class primo_state : public driver_device { public: - snova_state(const machine_config &mconfig, device_type type, const char *tag) : + primo_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag), m_maincpu(*this, "maincpu"), m_board(*this, "board"), @@ -84,17 +103,20 @@ class snova_state : public driver_device m_out_lcd(*this, "s%u.%u", 0U, 0U) { } + void primo(machine_config &config); void supremo(machine_config &config); void snova(machine_config &config); - DECLARE_INPUT_CHANGED_MEMBER(power_off); + DECLARE_INPUT_CHANGED_MEMBER(primo_power_off) { if (newval) m_power = false; } + DECLARE_INPUT_CHANGED_MEMBER(snova_power_off); protected: virtual void machine_start() override; + virtual void machine_reset() override { m_power = true; } private: // devices/pointers - required_device m_maincpu; + required_device m_maincpu; required_device m_board; required_device m_lcd_pwm; required_device m_led_pwm; @@ -103,14 +125,17 @@ class snova_state : public driver_device required_ioport_array<2> m_inputs; output_finder<4, 10> m_out_lcd; + bool m_power = false; bool m_lcd_strobe = false; u8 m_inp_mux = 0; u8 m_select = 0; u8 m_led_data = 0; - void snova_map(address_map &map); + void primo_map(address_map &map); void supremo_map(address_map &map); + void snova_map(address_map &map); + // I/O handlers void standby(int state); void lcd_pwm_w(offs_t offset, u8 data); void update_leds(); @@ -121,11 +146,12 @@ class snova_state : public driver_device void p6_w(u8 data); }; -void snova_state::machine_start() +void primo_state::machine_start() { m_out_lcd.resolve(); // register for savestates + save_item(NAME(m_power)); save_item(NAME(m_lcd_strobe)); save_item(NAME(m_inp_mux)); save_item(NAME(m_select)); @@ -140,7 +166,7 @@ void snova_state::machine_start() // power -void snova_state::standby(int state) +void primo_state::standby(int state) { // clear display if (state) @@ -150,9 +176,9 @@ void snova_state::standby(int state) } } -INPUT_CHANGED_MEMBER(snova_state::power_off) +INPUT_CHANGED_MEMBER(primo_state::snova_power_off) { - // NMI at power-off, which will trigger standby mode + // nsnova NMI at power-off, which will trigger standby mode if (newval && !m_maincpu->standby()) m_maincpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero); } @@ -160,12 +186,12 @@ INPUT_CHANGED_MEMBER(snova_state::power_off) // misc -void snova_state::lcd_pwm_w(offs_t offset, u8 data) +void primo_state::lcd_pwm_w(offs_t offset, u8 data) { m_out_lcd[offset & 0x3f][offset >> 6] = data; } -void snova_state::update_leds() +void primo_state::update_leds() { m_led_pwm->matrix(m_select >> 4 & 3, m_led_data); } @@ -173,7 +199,7 @@ void snova_state::update_leds() // MCU ports -u8 snova_state::p2_r() +u8 primo_state::p2_r() { // P20: 4051 Z u8 data = 0; @@ -188,6 +214,10 @@ u8 snova_state::p2_r() if (BIT(m_select, i + 6)) data |= BIT(m_inputs[i]->read(), m_inp_mux); + // P23 (nprimo, supremo): power switch + if (!m_power) + data |= 8; + // P23 (nsnova): serial rx if (m_rs232) data |= m_rs232->rxd_r() << 3; @@ -195,7 +225,7 @@ u8 snova_state::p2_r() return data ^ 1; } -void snova_state::p2_w(u8 data) +void primo_state::p2_w(u8 data) { // P21: 4066 in/out to LCD if (m_lcd_strobe && ~data & 2) @@ -217,7 +247,7 @@ void snova_state::p2_w(u8 data) m_inp_mux = data >> 5 & 7; } -void snova_state::p5_w(u8 data) +void primo_state::p5_w(u8 data) { // P50-P53: 4066 control to LCD // P54,P55: led select @@ -226,7 +256,7 @@ void snova_state::p5_w(u8 data) update_leds(); } -void snova_state::p6_w(u8 data) +void primo_state::p6_w(u8 data) { // P60-P67: led data, lcd data, chessboard mux m_led_data = ~data; @@ -239,13 +269,18 @@ void snova_state::p6_w(u8 data) Address Maps *******************************************************************************/ -void snova_state::supremo_map(address_map &map) +void primo_state::primo_map(address_map &map) { - map(0x4000, 0x47ff).ram(); + map(0x4000, 0x47ff).mirror(0x3800).ram().share("nvram"); +} + +void primo_state::supremo_map(address_map &map) +{ + map(0x4000, 0x47ff).mirror(0x1800).ram().share("nvram"); map(0x8000, 0xffff).rom(); } -void snova_state::snova_map(address_map &map) +void primo_state::snova_map(address_map &map) { map(0x4000, 0x5fff).ram().share("nvram"); map(0x8000, 0xffff).rom(); @@ -257,16 +292,16 @@ void snova_state::snova_map(address_map &map) Input Ports *******************************************************************************/ -static INPUT_PORTS_START( supremo ) +static INPUT_PORTS_START( primo ) PORT_START("IN.0") PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_1) PORT_NAME("Trace Back / Next Best") PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_2) PORT_NAME("Trace Forward / Auto Play") PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_3) PORT_NAME("Set Level / Pawn") PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_4) PORT_NAME("Info / Knight") - PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_5) PORT_NAME("Easy / Print Moves / Bishop") - PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_6) PORT_NAME("Solve Mate / Print Eval / Rook") - PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_7) PORT_NAME("Sound / Print List / Queen") - PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_8) PORT_NAME("Referee / Print Board / King") + PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_5) PORT_NAME("Easy / Bishop") + PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_6) PORT_NAME("Solve Mate / Rook") + PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_7) PORT_NAME("Sound / Queen") + PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_8) PORT_NAME("Referee / King") PORT_START("IN.1") PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_Q) PORT_NAME("Go") @@ -277,8 +312,22 @@ static INPUT_PORTS_START( supremo ) PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_Y) PORT_NAME("Verify / Set Up") PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_U) PORT_NAME("Random") PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_I) PORT_CODE(KEYCODE_N) PORT_NAME("New Game") + + PORT_START("POWER") // needs to be triggered for nvram to work + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CODE(KEYCODE_F1) PORT_CHANGED_MEMBER(DEVICE_SELF, primo_state, primo_power_off, 0) PORT_NAME("Power Off") +INPUT_PORTS_END + +static INPUT_PORTS_START( supremo ) + PORT_INCLUDE( primo ) + + PORT_MODIFY("IN.0") + PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_5) PORT_NAME("Easy / Print Moves / Bishop") + PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_6) PORT_NAME("Solve Mate / Print Eval / Rook") + PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_7) PORT_NAME("Sound / Print List / Queen") + PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_8) PORT_NAME("Referee / Print Board / King") INPUT_PORTS_END + static INPUT_PORTS_START( snova ) PORT_START("IN.0") PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_8) PORT_NAME("Trace Back / Next Best") @@ -301,7 +350,7 @@ static INPUT_PORTS_START( snova ) PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_Q) PORT_CODE(KEYCODE_N) PORT_NAME("New Game") PORT_START("POWER") // needs to be triggered for nvram to work - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CODE(KEYCODE_F1) PORT_CHANGED_MEMBER(DEVICE_SELF, snova_state, power_off, 0) PORT_NAME("Power Off") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CODE(KEYCODE_F1) PORT_CHANGED_MEMBER(DEVICE_SELF, primo_state, snova_power_off, 0) PORT_NAME("Power Off") INPUT_PORTS_END @@ -310,23 +359,29 @@ INPUT_PORTS_END Machine Configs *******************************************************************************/ -void snova_state::supremo(machine_config &config) +void primo_state::primo(machine_config &config) { // basic machine hardware - HD6303Y(config, m_maincpu, 8_MHz_XTAL); - m_maincpu->set_addrmap(AS_PROGRAM, &snova_state::supremo_map); - m_maincpu->in_p2_cb().set(FUNC(snova_state::p2_r)); - m_maincpu->out_p2_cb().set(FUNC(snova_state::p2_w)); - m_maincpu->out_p5_cb().set(FUNC(snova_state::p5_w)); - m_maincpu->out_p6_cb().set(FUNC(snova_state::p6_w)); + HD6301Y0(config, m_maincpu, 8_MHz_XTAL); + m_maincpu->set_addrmap(AS_PROGRAM, &primo_state::primo_map); + m_maincpu->nvram_enable_backup(true); + m_maincpu->standby_cb().set(m_maincpu, FUNC(hd6301y0_cpu_device::nvram_set_battery)); + m_maincpu->standby_cb().append(FUNC(primo_state::standby)); + m_maincpu->in_p2_cb().set(FUNC(primo_state::p2_r)); + m_maincpu->out_p2_cb().set(FUNC(primo_state::p2_w)); + m_maincpu->out_p5_cb().set(FUNC(primo_state::p5_w)); + m_maincpu->out_p6_cb().set(FUNC(primo_state::p6_w)); + + NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); SENSORBOARD(config, m_board).set_type(sensorboard_device::BUTTONS); m_board->init_cb().set(m_board, FUNC(sensorboard_device::preset_chess)); m_board->set_delay(attotime::from_msec(350)); + m_board->set_nvram_enable(true); // video hardware PWM_DISPLAY(config, m_lcd_pwm).set_size(4, 10); - m_lcd_pwm->output_x().set(FUNC(snova_state::lcd_pwm_w)); + m_lcd_pwm->output_x().set(FUNC(primo_state::lcd_pwm_w)); screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_SVG)); screen.set_refresh_hz(60); @@ -334,26 +389,38 @@ void snova_state::supremo(machine_config &config) screen.set_visarea_full(); PWM_DISPLAY(config, m_led_pwm).set_size(2, 8); - config.set_default_layout(layout_novag_supremo); + config.set_default_layout(layout_novag_primo); // sound hardware SPEAKER(config, "speaker").front_center(); DAC_1BIT(config, m_dac).add_route(ALL_OUTPUTS, "speaker", 0.25); } -void snova_state::snova(machine_config &config) +void primo_state::supremo(machine_config &config) { - supremo(config); + primo(config); // basic machine hardware - m_maincpu->set_clock(16_MHz_XTAL); - m_maincpu->set_addrmap(AS_PROGRAM, &snova_state::snova_map); + HD6303Y(config.replace(), m_maincpu, 8_MHz_XTAL); + m_maincpu->set_addrmap(AS_PROGRAM, &primo_state::supremo_map); m_maincpu->nvram_enable_backup(true); m_maincpu->standby_cb().set(m_maincpu, FUNC(hd6303y_cpu_device::nvram_set_battery)); - m_maincpu->standby_cb().append(FUNC(snova_state::standby)); + m_maincpu->standby_cb().append(FUNC(primo_state::standby)); + m_maincpu->in_p2_cb().set(FUNC(primo_state::p2_r)); + m_maincpu->out_p2_cb().set(FUNC(primo_state::p2_w)); + m_maincpu->out_p5_cb().set(FUNC(primo_state::p5_w)); + m_maincpu->out_p6_cb().set(FUNC(primo_state::p6_w)); - NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); - m_board->set_nvram_enable(true); + config.set_default_layout(layout_novag_supremo); +} + +void primo_state::snova(machine_config &config) +{ + supremo(config); + + // basic machine hardware + m_maincpu->set_clock(16_MHz_XTAL); + m_maincpu->set_addrmap(AS_PROGRAM, &primo_state::snova_map); config.set_default_layout(layout_novag_snova); @@ -367,6 +434,15 @@ void snova_state::snova(machine_config &config) ROM Definitions *******************************************************************************/ +ROM_START( nprimo ) + ROM_REGION( 0x4000, "maincpu", 0 ) + ROM_LOAD("novag_871_31y0c34p.u1", 0x0000, 0x4000, CRC(ad692d2e) SHA1(f41ae4e02a83ba6446a6df59a6ee2c2f87a1f4d8) ) + + ROM_REGION( 36256, "screen", 0 ) + ROM_LOAD("nvip.svg", 0, 36256, CRC(3373e0d5) SHA1(25bfbf0405017388c30f4529106baccb4723bc6b) ) +ROM_END + + ROM_START( supremo ) ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD("sp_a10.u5", 0x8000, 0x8000, CRC(1db63786) SHA1(4f24452ed8955b31ba88f68cc95c357660930aa4) ) @@ -375,6 +451,7 @@ ROM_START( supremo ) ROM_LOAD("nvip.svg", 0, 36256, CRC(3373e0d5) SHA1(25bfbf0405017388c30f4529106baccb4723bc6b) ) ROM_END + ROM_START( nsnova ) // ID = N1.05 ROM_REGION( 0x10000, "maincpu", 0 ) ROM_LOAD("n_530.u5", 0x8000, 0x8000, CRC(727a0ada) SHA1(129c1edc5c1d2e12ce97ebef81c6d5555464a11d) ) @@ -392,6 +469,8 @@ ROM_END *******************************************************************************/ // YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY, FULLNAME, FLAGS -SYST( 1988, supremo, 0, 0, supremo, supremo, snova_state, empty_init, "Novag", "Supremo", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) +SYST( 1987, nprimo, 0, 0, primo, primo, primo_state, empty_init, "Novag", "Primo (Novag)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) + +SYST( 1988, supremo, 0, 0, supremo, supremo, primo_state, empty_init, "Novag", "Supremo", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) -SYST( 1990, nsnova, 0, 0, snova, snova, snova_state, empty_init, "Novag", "Super Nova (Novag, v1.05)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) +SYST( 1990, nsnova, 0, 0, snova, snova, primo_state, empty_init, "Novag", "Super Nova (Novag, v1.05)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) diff --git a/src/mame/novag/svip.cpp b/src/mame/novag/vip.cpp similarity index 87% rename from src/mame/novag/svip.cpp rename to src/mame/novag/vip.cpp index f8dc111a05d2e..b7249fc24dfc4 100644 --- a/src/mame/novag/svip.cpp +++ b/src/mame/novag/vip.cpp @@ -18,8 +18,9 @@ of this portable design (Ruby, Sapphire, ..) are on H8. - unmapped reads from 0x3* range, same as snova driver BTANB: -- on nvip, if you press GO right after entering a move, it will reply by moving - one of your pieces, taken from the board layout before your move +- on nvip, if you press GO right after entering a move (during the opening book), + it will reply by moving one of your pieces, taken from the board layout before + your move - just for fun, I'll mention that on many (not all) batches of Super VIP, the white text label under the Knight button says "Into" instead of "Info" @@ -87,10 +88,10 @@ Known official Novag Super System (or compatible) peripherals: namespace { -class svip_state : public driver_device +class vip_state : public driver_device { public: - svip_state(const machine_config &mconfig, device_type type, const char *tag) : + vip_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag), m_maincpu(*this, "maincpu"), m_lcd_pwm(*this, "lcd_pwm"), @@ -127,6 +128,7 @@ class svip_state : public driver_device void vip_map(address_map &map); void svip_map(address_map &map); + // I/O handlers void lcd_pwm_w(offs_t offset, u8 data); u8 p2_r(); void p2_w(u8 data); @@ -134,7 +136,7 @@ class svip_state : public driver_device void p6_w(u8 data); }; -void svip_state::machine_start() +void vip_state::machine_start() { m_out_lcd.resolve(); @@ -151,12 +153,12 @@ void svip_state::machine_start() I/O *******************************************************************************/ -void svip_state::lcd_pwm_w(offs_t offset, u8 data) +void vip_state::lcd_pwm_w(offs_t offset, u8 data) { m_out_lcd[offset & 0x3f][offset >> 6] = data; } -u8 svip_state::p2_r() +u8 vip_state::p2_r() { u8 data = 0; @@ -176,7 +178,7 @@ u8 svip_state::p2_r() return ~data; } -void svip_state::p2_w(u8 data) +void vip_state::p2_w(u8 data) { // P21: 4066 in/out to LCD if (m_lcd_strobe && ~data & 2) @@ -191,7 +193,7 @@ void svip_state::p2_w(u8 data) m_rs232->write_txd(BIT(data, 4)); } -void svip_state::p5_w(u8 data) +void vip_state::p5_w(u8 data) { // P50-P53: 4066 control to LCD // P56,P57: lcd data @@ -201,7 +203,7 @@ void svip_state::p5_w(u8 data) m_dac->write(data >> 4 & 3); } -void svip_state::p6_w(u8 data) +void vip_state::p6_w(u8 data) { // P60-P67: input mux, lcd data m_inp_mux = ~data; @@ -213,12 +215,12 @@ void svip_state::p6_w(u8 data) Address Maps *******************************************************************************/ -void svip_state::vip_map(address_map &map) +void vip_state::vip_map(address_map &map) { map(0x4000, 0x47ff).mirror(0x3800).ram().share("nvram"); } -void svip_state::svip_map(address_map &map) +void vip_state::svip_map(address_map &map) { map(0x2000, 0x27ff).mirror(0x1800).ram().share("nvram"); map(0x4000, 0xbfff).rom().region("eprom", 0); @@ -265,10 +267,10 @@ static INPUT_PORTS_START( vip ) PORT_CONFNAME( 0x01, 0x00, "Keyboard Lock") PORT_CONFSETTING( 0x00, DEF_STR( Off ) ) PORT_CONFSETTING( 0x01, DEF_STR( On ) ) - PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_CUSTOM_MEMBER(svip_state, power_r) + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_CUSTOM_MEMBER(vip_state, power_r) PORT_START("POWER") // needs to be triggered for nvram to work - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CODE(KEYCODE_F1) PORT_CHANGED_MEMBER(DEVICE_SELF, svip_state, power_off, 0) PORT_NAME("Power Off") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_OTHER) PORT_CODE(KEYCODE_F1) PORT_CHANGED_MEMBER(DEVICE_SELF, vip_state, power_off, 0) PORT_NAME("Power Off") INPUT_PORTS_END static INPUT_PORTS_START( svip ) @@ -291,7 +293,7 @@ static INPUT_PORTS_START( svip ) PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_CODE(KEYCODE_U) PORT_NAME("King / Referee / Board") PORT_MODIFY("IN.3") - PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_CUSTOM_MEMBER(svip_state, power_r) + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_CUSTOM_MEMBER(vip_state, power_r) PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_UNUSED) INPUT_PORTS_END @@ -301,24 +303,24 @@ INPUT_PORTS_END Machine Configs *******************************************************************************/ -void svip_state::vip(machine_config &config) +void vip_state::vip(machine_config &config) { // basic machine hardware HD6301Y0(config, m_maincpu, 8_MHz_XTAL); - m_maincpu->set_addrmap(AS_PROGRAM, &svip_state::vip_map); + m_maincpu->set_addrmap(AS_PROGRAM, &vip_state::vip_map); m_maincpu->nvram_enable_backup(true); m_maincpu->standby_cb().set(m_maincpu, FUNC(hd6301y0_cpu_device::nvram_set_battery)); m_maincpu->standby_cb().append([this](int state) { if (state) m_lcd_pwm->clear(); }); - m_maincpu->in_p2_cb().set(FUNC(svip_state::p2_r)); - m_maincpu->out_p2_cb().set(FUNC(svip_state::p2_w)); - m_maincpu->out_p5_cb().set(FUNC(svip_state::p5_w)); - m_maincpu->out_p6_cb().set(FUNC(svip_state::p6_w)); + m_maincpu->in_p2_cb().set(FUNC(vip_state::p2_r)); + m_maincpu->out_p2_cb().set(FUNC(vip_state::p2_w)); + m_maincpu->out_p5_cb().set(FUNC(vip_state::p5_w)); + m_maincpu->out_p6_cb().set(FUNC(vip_state::p6_w)); NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); // video hardware PWM_DISPLAY(config, m_lcd_pwm).set_size(4, 10); - m_lcd_pwm->output_x().set(FUNC(svip_state::lcd_pwm_w)); + m_lcd_pwm->output_x().set(FUNC(vip_state::lcd_pwm_w)); screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_SVG)); screen.set_refresh_hz(60); @@ -332,13 +334,13 @@ void svip_state::vip(machine_config &config) DAC_2BIT_ONES_COMPLEMENT(config, m_dac).add_route(ALL_OUTPUTS, "speaker", 0.125); } -void svip_state::svip(machine_config &config) +void vip_state::svip(machine_config &config) { vip(config); // basic machine hardware m_maincpu->set_clock(9.8304_MHz_XTAL); - m_maincpu->set_addrmap(AS_PROGRAM, &svip_state::svip_map); + m_maincpu->set_addrmap(AS_PROGRAM, &vip_state::svip_map); config.set_default_layout(layout_novag_svip); @@ -417,10 +419,10 @@ ROM_END Drivers *******************************************************************************/ -// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY, FULLNAME, FLAGS -SYST( 1987, nvip, 0, 0, vip, vip, svip_state, empty_init, "Novag", "VIP (Novag)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) +// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY, FULLNAME, FLAGS +SYST( 1987, nvip, 0, 0, vip, vip, vip_state, empty_init, "Novag", "VIP (Novag)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) -SYST( 1989, nsvip, 0, 0, svip, svip, svip_state, empty_init, "Novag", "Super VIP (v3.7)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) -SYST( 1989, nsvipa, nsvip, 0, svip, svip, svip_state, empty_init, "Novag", "Super VIP (v3.6)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) -SYST( 1989, nsvipb, nsvip, 0, svip, svip, svip_state, empty_init, "Novag", "Super VIP (v1.03)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) -SYST( 1989, nsvipc, nsvip, 0, svip, svip, svip_state, empty_init, "Novag", "Super VIP (v1.01)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) +SYST( 1989, nsvip, 0, 0, svip, svip, vip_state, empty_init, "Novag", "Super VIP (v3.7)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) +SYST( 1989, nsvipa, nsvip, 0, svip, svip, vip_state, empty_init, "Novag", "Super VIP (v3.6)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) +SYST( 1989, nsvipb, nsvip, 0, svip, svip, vip_state, empty_init, "Novag", "Super VIP (v1.03)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) +SYST( 1989, nsvipc, nsvip, 0, svip, svip, vip_state, empty_init, "Novag", "Super VIP (v1.01)", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) diff --git a/src/mame/sega/lindbergh.cpp b/src/mame/sega/lindbergh.cpp index d83eb4195f5be..0850b1cdd274b 100644 --- a/src/mame/sega/lindbergh.cpp +++ b/src/mame/sega/lindbergh.cpp @@ -2,12 +2,23 @@ // copyright-holders:Olivier Galibert /*************************************************************************** - Sega Lindbergh skeleton driver - - TODO: - - tests area 0xd0000 - 0xd000f, wants an undumped ROM in there? - - Apparently there's no way to avoid a dead lock at 0xfd085, perhaps - tied to the aforementioned? +Sega Lindbergh + +TODO: +- tests area 0xd0000 - 0xd000f, wants an undumped ROM in there? +- Pinpoint root cause of all of the following debug breakpoints + https://github.com/mamedev/mame/files/8766682/lindbergh_megahack.txt +- bp fffffff0,1,{eip-=0x12 ;g} (spurious execution parse of below) +- bp f4f1c,1,{eip+=2;g} +- bp 78adb,1,{eip+=2;g} +- bp f6bb3,1,{eip+=2;g} +- bp 7518f,1,{eip+=2;g} +- bp e7a22,1,{eip+=3;g} +- bp e7abf,1,{eip+=3;g} +- bp 79068,1,{eip+=2;g} +- bp 78aed,1,{eip+=2;g} +- BIOS detects CPU as :), 5M of System RAM, throws errors 0270 (RTC), + CMOS bad (0251) and PCI resource conflict on SATA. *************************************************************************** diff --git a/src/mame/sfrj/idpartner.cpp b/src/mame/sfrj/idpartner.cpp index f562b7f87cd6d..10c875e20f875 100644 --- a/src/mame/sfrj/idpartner.cpp +++ b/src/mame/sfrj/idpartner.cpp @@ -180,7 +180,6 @@ class idpartner_state : public driver_device u8 floppy_motor_r() { return m_floppy_motor; } void update_floppy_motor(); void xx2_w(int state) { if (state) { m_floppy_motor = 0; update_floppy_motor(); } } - TIMER_DEVICE_CALLBACK_MEMBER(xx1_w) { m_ctc->trg0(param); } void write_speed1_clock(int state) { m_sio1->txca_w(state); m_sio1->rxca_w(state); } void write_speed2_clock(int state) { m_sio1->txcb_w(state); m_sio1->rxcb_w(state); } void write_speed3_clock(int state) { m_sio2->txca_w(state); m_sio2->rxca_w(state); } @@ -353,9 +352,7 @@ void idpartner_state::partner_base(machine_config &config) m_brg->out_f<1>().set(FUNC(idpartner_state::write_speed2_clock)); m_brg->out_f<1>().append(FUNC(idpartner_state::write_speed3_clock)); m_brg->out_f<1>().append(FUNC(idpartner_state::write_speed4_clock)); - // TODO: This should be from MC14411 but there are sync issues - //m_brg->out_f<13>().set(m_ctc, FUNC(z80ctc_device::trg0)); // signal XX1 - TIMER(config, "xx1").configure_periodic(FUNC(idpartner_state::xx1_w), attotime::from_hz(110*16)); + m_brg->out_f<13>().set(m_ctc, FUNC(z80ctc_device::trg0)); // signal XX1 RS232_PORT(config, m_serial[0], partner_rs232_devices, nullptr); m_serial[0]->rxd_handler().set(m_sio1, FUNC(z80sio_device::rxa_w)); @@ -440,6 +437,10 @@ void idpartner_state::partnerwfg(machine_config &config) partner_base(config); m_brg->out_f<9>().set(FUNC(idpartner_state::write_speed1_clock)); + // TODO: This should be 13 from MC14411 but there are timing issues when + // SIO is at lower speed ( < 1200 baud ) + m_brg->out_f<14>().set(m_ctc, FUNC(z80ctc_device::trg0)); // signal XX1 + m_brg->out_f<13>().set_nop(); m_serial[0]->set_default_option("keyboard"); m_serial[0]->set_option_device_input_defaults("keyboard", DEVICE_INPUT_DEFAULTS_NAME(keyboard));