Previous 199869 Revisions Next

r21051 Wednesday 13th February, 2013 at 23:12:19 UTC by Angelo Salese
Added a more sane ST-V SMPC Intback command emulation, based off Saturn version. Fixes inputs in Find Love [Angelo Salese]

New WORKING game
--------------------
Zenkoku Seifuku Bishoujo Grand Prix Find Love [Angelo Salese]
[src/emu/machine]smpc.c
[src/mame/drivers]stv.c
[src/mame/machine]stvprot.c

trunk/src/mame/drivers/stv.c
r21050r21051
27772777ROM_END
27782778
27792779
2780GAME( 1996, stvbios,   0,       stv_slot, stv, saturn_state,      stv,        ROT0,   "Sega",                         "ST-V Bios", GAME_IS_BIOS_ROOT )
2780GAME( 1996, stvbios,   0,       stv_slot, stv, saturn_state,      stv,           ROT0,   "Sega",                         "ST-V Bios", GAME_IS_BIOS_ROOT )
27812781
27822782//GAME YEAR, NAME,     PARENT,  MACH, INP, INIT,      MONITOR
27832783/* Playable */
2784GAME( 1998, astrass,   stvbios, stv,      stv6b, saturn_state,    astrass,  ROT0,   "Sunsoft",                      "Astra SuperStars (J 980514 V1.002)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
2784GAME( 1998, astrass,   stvbios, stv,      stv6b, saturn_state,     astrass,     ROT0,   "Sunsoft",                      "Astra SuperStars (J 980514 V1.002)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
27852785GAME( 1995, bakubaku,  stvbios, stv,      stv, saturn_state,        stv,        ROT0,   "Sega",                         "Baku Baku Animal (J 950407 V1.000)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS )
27862786GAME( 1996, batmanfr,  stvbios, stv,      stv, saturn_state,        batmanfr,   ROT0,   "Acclaim",                      "Batman Forever (JUE 960507 V1.000)", GAME_NO_SOUND | GAME_IMPERFECT_GRAPHICS )
27872787GAME( 1996, colmns97,  stvbios, stv,      stv, saturn_state,        colmns97,   ROT0,   "Sega",                         "Columns '97 (JET 961209 V1.000)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS )
27882788GAME( 1997, cotton2,   stvbios, stv,      stv, saturn_state,        cotton2,    ROT0,   "Success",                      "Cotton 2 (JUET 970902 V1.000)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS )
27892789GAME( 1998, cottonbm,  stvbios, stv,      stv, saturn_state,        cottonbm,   ROT0,   "Success",                      "Cotton Boomerang (JUET 980709 V1.000)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS )
27902790GAME( 1995, critcrsh,  stvbios, stv,      critcrsh, saturn_state,   critcrsh,   ROT0,   "Sega",                         "Critter Crusher (EA 951204 V1.000)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS )
2791GAME( 1999, danchih,   stvbios, stv,      stvmp, saturn_state,  danchih,    ROT0,   "Altron (Tecmo license)",       "Danchi de Hanafuda (J 990607 V1.400)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS )
2791GAME( 1999, danchih,   stvbios, stv,      stvmp, saturn_state,     danchih,    ROT0,   "Altron (Tecmo license)",       "Danchi de Hanafuda (J 990607 V1.400)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS )
27922792GAME( 2000, danchiq,   stvbios, stv,      stv, saturn_state,        danchiq,    ROT0,   "Altron",                       "Danchi de Quiz Okusan Yontaku Desuyo! (J 001128 V1.200)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS )
27932793GAME( 1996, diehard,   stvbios, stv,      stv, saturn_state,        diehard,    ROT0,   "Sega",                         "Die Hard Arcade (UET 960515 V1.000)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND  )
27942794GAME( 1996, dnmtdeka,  diehard, stv,      stv, saturn_state,        dnmtdeka,   ROT0,   "Sega",                         "Dynamite Deka (J 960515 V1.000)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND  )
27952795GAME( 1995, ejihon,    stvbios, stv,      stv, saturn_state,        stv,        ROT0,   "Sega",                         "Ejihon Tantei Jimusyo (J 950613 V1.000)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS )
27962796GAME( 1995, fhboxers,  stvbios, stv,      stv, saturn_state,        fhboxers,   ROT0,   "Sega",                         "Funky Head Boxers (JUETBKAL 951218 V1.000)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS )
2797GAME( 1994, gaxeduel,  stvbios, stv,      stv6b, saturn_state,  gaxeduel,   ROT0,   "Sega",                         "Golden Axe - The Duel (JUETL 950117 V1.000)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS)
2797GAME( 1997, findlove,  stvbios, stv,      stv, saturn_state,        stv,        ROT0,   "Daiki / FCF",                  "Zenkoku Seifuku Bishoujo Grand Prix Find Love (J 971212 V1.000)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS )
2798GAME( 1994, gaxeduel,  stvbios, stv,      stv6b, saturn_state,     gaxeduel,   ROT0,   "Sega",                         "Golden Axe - The Duel (JUETL 950117 V1.000)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS)
27982799GAME( 1998, grdforce,  stvbios, stv,      stv, saturn_state,        grdforce,   ROT0,   "Success",                      "Guardian Force (JUET 980318 V0.105)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS )
2799GAME( 1998, groovef,   stvbios, stv,      stv6b, saturn_state,  groovef,    ROT0,   "Atlus",                        "Groove on Fight - Gouketsuji Ichizoku 3 (J 970416 V1.001)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS )
2800GAME( 1998, groovef,   stvbios, stv,      stv6b, saturn_state,     groovef,    ROT0,   "Atlus",                        "Groove on Fight - Gouketsuji Ichizoku 3 (J 970416 V1.001)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS )
28002801GAME( 1997, hanagumi,  stvbios, stv,      stv, saturn_state,        hanagumi,   ROT0,   "Sega",                         "Hanagumi Taisen Columns - Sakura Wars (J 971007 V1.010)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
28012802GAME( 1996, introdon,  stvbios, stv,      stv, saturn_state,        stv,        ROT0,   "Sunsoft / Success",            "Karaoke Quiz Intro Don Don! (J 960213 V1.000)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS )
2802GAME( 1995, kiwames,   stvbios, stv,      stvmp, saturn_state,  stvmp,      ROT0,   "Athena",                       "Pro Mahjong Kiwame S (J 951020 V1.208)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS )
2803GAME( 1995, kiwames,   stvbios, stv,      stvmp, saturn_state,     stvmp,      ROT0,   "Athena",                       "Pro Mahjong Kiwame S (J 951020 V1.208)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS )
28032804GAME( 1997, maruchan,  stvbios, stv,      stv, saturn_state,        maruchan,   ROT0,   "Sega / Toyosuisan",            "Maru-Chan de Goo! (J 971216 V1.000)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS )
28042805GAME( 1996, mausuke,   stvbios, stv,      stv, saturn_state,        mausuke,    ROT0,   "Data East",                    "Mausuke no Ojama the World (J 960314 V1.000)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS )
28052806GAME( 1998, myfairld,  stvbios, stv,      myfairld, saturn_state,   stvmp,      ROT0,   "Micronet",                     "Virtual Mahjong 2 - My Fair Lady (J 980608 V1.000)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS )
r21050r21051
28202821GAME( 1995, smleague,  stvbios, stv,      stv, saturn_state,        smleague,   ROT0,   "Sega",                         "Super Major League (U 960108 V1.000)", GAME_NOT_WORKING | GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS )
28212822GAME( 1995, finlarch,  smleague,stv,      stv, saturn_state,        finlarch,   ROT0,   "Sega",                         "Final Arch (J 950714 V1.001)", GAME_NOT_WORKING | GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS )
28222823GAME( 1996, sokyugrt,  stvbios, stv,      stv, saturn_state,        sokyugrt,   ROT0,   "Raizing / Eighting",           "Soukyugurentai / Terra Diver (JUET 960821 V1.000)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS )
2823GAME( 1995, suikoenb,  stvbios, stv,      stv6b, saturn_state,  suikoenb,   ROT0,   "Data East",                    "Suikoenbu / Outlaws of the Lost Dynasty (JUETL 950314 V2.001)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS )
2824GAME( 1995, suikoenb,  stvbios, stv,      stv6b, saturn_state,     suikoenb,   ROT0,   "Data East",                    "Suikoenbu / Outlaws of the Lost Dynasty (JUETL 950314 V2.001)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS )
28242825GAME( 1996, vfkids,    stvbios, stv,      stv, saturn_state,        stv,        ROT0,   "Sega",                         "Virtua Fighter Kids (JUET 960319 V0.000)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS )
28252826GAME( 1997, vmahjong,  stvbios, stv,      myfairld, saturn_state,   stvmp,      ROT0,   "Micronet",                     "Virtual Mahjong (J 961214 V1.000)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS )
28262827GAME( 1997, winterht,  stvbios, stv,      stv, saturn_state,        winterht,   ROT0,   "Sega",                         "Winter Heat (JUET 971012 V1.000)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS )
r21050r21051
28282829
28292830/* Almost */
28302831GAME( 1998, twcup98,   stvbios, stv,      stv, saturn_state,        twcup98,    ROT0,   "Tecmo",                        "Tecmo World Cup '98 (JUET 980410 V1.000)", GAME_UNEMULATED_PROTECTION | GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS|GAME_NOT_WORKING ) // player movement
2831GAME( 1998, elandore,  stvbios, stv,      stv6b, saturn_state,  elandore,   ROT0,   "Sai-Mate",                     "Touryuu Densetsu Elan-Doree / Elan Doree - Legend of Dragoon (JUET 980922 V1.006)", GAME_NOT_WORKING | GAME_UNEMULATED_PROTECTION | GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS )
2832GAME( 1998, elandore,  stvbios, stv,      stv6b, saturn_state,     elandore,   ROT0,   "Sai-Mate",                     "Touryuu Densetsu Elan-Doree / Elan Doree - Legend of Dragoon (JUET 980922 V1.006)", GAME_NOT_WORKING | GAME_UNEMULATED_PROTECTION | GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS )
28322833
28332834/* Unemulated printer / camera devices */
28342835GAME( 1998, stress,    stvbios, stv,      stv, saturn_state,        stv,        ROT0,   "Sega",                         "Stress Busters (J 981020 V1.000)", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
28352836GAME( 1997, nclubv3,   stvbios, stv,      stv, saturn_state,        nameclv3,   ROT0,   "Sega",                         "Name Club Ver.3 (J 970723 V1.000)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS | GAME_NOT_WORKING )
28362837GAME( 1997, pclub2,    stvbios, stv,      stv, saturn_state,        stv,        ROT0,   "Atlus",                        "Print Club 2 (U 970921 V1.000)", GAME_NOT_WORKING )
2837GAME( 1999, pclub2fc,  pclub2,  stv,      stv, saturn_state,      stv,        ROT0,   "Atlus",                        "Print Club 2 Felix The Cat (Rev. A) (J 970415 V1.100)", GAME_NOT_WORKING )
2838GAME( 1997, pclb297w,  pclub2,  stv,      stv, saturn_state,      stv,        ROT0,   "Atlus",                        "Print Club 2 '97 Winter Ver (J 971017 V1.100)", GAME_NOT_WORKING )
2839GAME( 1997, pclub298,  pclub2,  stv,      stv, saturn_state,      stv,        ROT0,   "Atlus",                        "Print Club 2 '98 Spring Ver (J 971017 V1.100)", GAME_NOT_WORKING )
2840GAME( 1998, pclb298a,  pclub2,  stv,      stv, saturn_state,      stv,        ROT0,   "Atlus",                        "Print Club 2 '98 Autumn Ver (J 980827 V1.000)", GAME_NOT_WORKING )
2841GAME( 1999, pclubor,   stvbios, stv,      stv, saturn_state,      stv,        ROT0,   "Atlus",                        "Print Club Goukakenran (J 991104 V1.000)", GAME_NOT_WORKING )
2842GAME( 1999, pclubol,   stvbios, stv,      stv, saturn_state,      stv,        ROT0,   "Atlus",                        "Print Club Olive (J 980717 V1.000)", GAME_NOT_WORKING )
2843GAME( 1999, pclub2v3,  pclub2,  stv,      stv, saturn_state,        stv,        ROT0,   "Atlus",                        "Print Club 2 Vol. 3 (U 990310 V1.000)", GAME_NOT_WORKING )
2844GAME( 1999, pclubpok,  stvbios, stv,      stv, saturn_state,      stv,        ROT0,   "Atlus",                        "Print Club Pokemon B (U 991126 V1.000)", GAME_NOT_WORKING )
2845GAME( 1997, pclub2kc,  stvbios, stv,      stv, saturn_state,      stv,        ROT0,   "Atlus",                        "Print Club Kome Kome Club (J 970203 V1.000)", GAME_NOT_WORKING )
2846GAME( 1997, pclb2elk,  stvbios, stv,      stv, saturn_state,      stv,        ROT0,   "Atlus",                        "Print Club 2 Earth Limited Kobe (Print Club Custom) (J 970808 V1.000)", GAME_NOT_WORKING )
2838GAME( 1999, pclub2fc,  pclub2,  stv,      stv, saturn_state,       stv,        ROT0,   "Atlus",                        "Print Club 2 Felix The Cat (Rev. A) (J 970415 V1.100)", GAME_NOT_WORKING )
2839GAME( 1997, pclb297w,  pclub2,  stv,      stv, saturn_state,       stv,        ROT0,   "Atlus",                        "Print Club 2 '97 Winter Ver (J 971017 V1.100)", GAME_NOT_WORKING )
2840GAME( 1997, pclub298,  pclub2,  stv,      stv, saturn_state,       stv,        ROT0,   "Atlus",                        "Print Club 2 '98 Spring Ver (J 971017 V1.100)", GAME_NOT_WORKING )
2841GAME( 1998, pclb298a,  pclub2,  stv,      stv, saturn_state,       stv,        ROT0,   "Atlus",                        "Print Club 2 '98 Autumn Ver (J 980827 V1.000)", GAME_NOT_WORKING )
2842GAME( 1999, pclubor,   stvbios, stv,      stv, saturn_state,       stv,        ROT0,   "Atlus",                        "Print Club Goukakenran (J 991104 V1.000)", GAME_NOT_WORKING )
2843GAME( 1999, pclubol,   stvbios, stv,      stv, saturn_state,       stv,        ROT0,   "Atlus",                        "Print Club Olive (J 980717 V1.000)", GAME_NOT_WORKING )
2844GAME( 1999, pclub2v3,  pclub2,  stv,      stv, saturn_state,       stv,        ROT0,   "Atlus",                        "Print Club 2 Vol. 3 (U 990310 V1.000)", GAME_NOT_WORKING )
2845GAME( 1999, pclubpok,  stvbios, stv,      stv, saturn_state,       stv,        ROT0,   "Atlus",                        "Print Club Pokemon B (U 991126 V1.000)", GAME_NOT_WORKING )
2846GAME( 1997, pclub2kc,  stvbios, stv,      stv, saturn_state,       stv,        ROT0,   "Atlus",                        "Print Club Kome Kome Club (J 970203 V1.000)", GAME_NOT_WORKING )
2847GAME( 1997, pclb2elk,  stvbios, stv,      stv, saturn_state,       stv,        ROT0,   "Atlus",                        "Print Club 2 Earth Limited Kobe (Print Club Custom) (J 970808 V1.000)", GAME_NOT_WORKING )
28472848
28482849
28492850/* Doing something.. but not enough yet */
28502851GAME( 1995, vfremix,   stvbios, stv,      stv, saturn_state,        vfremix,    ROT0,   "Sega",                         "Virtua Fighter Remix (JUETBKAL 950428 V1.000)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS | GAME_NOT_WORKING )
2851GAME( 1997, findlove,  stvbios, stv,      stv, saturn_state,        stv,        ROT0,   "Daiki / FCF",                  "Find Love (J 971212 V1.000)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS | GAME_NOT_WORKING )
28522852GAME( 1996, decathlt,  stvbios, stv,      stv, saturn_state,        decathlt,   ROT0,   "Sega",                         "Decathlete (JUET 960709 V1.001)", GAME_NO_SOUND | GAME_NOT_WORKING | GAME_UNEMULATED_PROTECTION )
28532853GAME( 1996, decathlto, decathlt,stv,      stv, saturn_state,        decathlt,   ROT0,   "Sega",                         "Decathlete (JUET 960424 V1.000)", GAME_NO_SOUND | GAME_NOT_WORKING | GAME_UNEMULATED_PROTECTION )
28542854
trunk/src/mame/machine/stvprot.c
r21050r21051
100100
101101#include "emu.h"
102102#include "stvprot.h"
103#include "includes/stv.h"
103104
104105static UINT32 a_bus[4];
105106static UINT32 ctrl_index;
r21050r21051
141142               ctrl_index+=4;
142143               return res;
143144         }
145
144146      }
145147      return a_bus[offset];
146148   }
r21050r21051
155157{
156158   COMBINE_DATA(&a_bus[offset]);
157159   logerror("A-Bus control protection write at %06x: [%02x] <- %08x\n",space.device().safe_pc(),offset,data);
160
158161   if(offset == 3)
159162   {
160163      int a_bus_vector;
r21050r21051
177180            ctrl_index = a_bus_vector;
178181            break;
179182      }
183
180184   }
181185   //popmessage("%04x %04x",data,offset/4);
182186}
trunk/src/emu/machine/smpc.c
r21050r21051
285285   /* TODO: VDP1 / VDP2 / SCU / SCSP default power ON values? */
286286}
287287
288static TIMER_CALLBACK( stv_intback_peripheral )
289{
290   saturn_state *state = machine.driver_data<saturn_state>();
291
292   if (state->m_smpc.intback_stage == 2)
293   {
294      state->m_smpc.SR = (0x80 | state->m_smpc.pmode);    // pad 2, no more data, echo back pad mode set by intback
295      state->m_smpc.intback_stage = 0;
296   }
297   else
298   {
299      state->m_smpc.SR = (0xc0 | state->m_smpc.pmode);    // pad 1, more data, echo back pad mode set by intback
300      state->m_smpc.intback_stage ++;
301   }
302
303   if(!(state->m_scu.ism & IRQ_SMPC))
304      state->m_maincpu->set_input_line_and_vector(8, HOLD_LINE, 0x47);
305   else
306      state->m_scu.ist |= (IRQ_SMPC);
307
308   state->m_smpc.OREG[31] = 0x10; /* callback for last command issued */
309   state->m_smpc.SF = 0x00;    /* clear hand-shake flag */
310}
311
312
288313static TIMER_CALLBACK( stv_smpc_intback )
289314{
290315   saturn_state *state = machine.driver_data<saturn_state>();
291316   int i;
292317
293   state->m_smpc.OREG[0] = (0x80) | ((state->m_NMI_reset & 1) << 6);
318   if(state->m_smpc.intback_buf[0] != 0)
319   {
320      state->m_smpc.OREG[0] = (0x80) | ((state->m_NMI_reset & 1) << 6);
294321
295   for(i=0;i<7;i++)
296      state->m_smpc.OREG[1+i] = state->m_smpc.rtc_data[i];
322      for(i=0;i<7;i++)
323         state->m_smpc.OREG[1+i] = state->m_smpc.rtc_data[i];
297324
298   state->m_smpc.OREG[8]=0x00;  // CTG0 / CTG1?
325      state->m_smpc.OREG[8]=0x00;  // CTG0 / CTG1?
299326
300   state->m_smpc.OREG[9]=0x00;  // TODO: system region on Saturn
327      state->m_smpc.OREG[9]=0x00;  // TODO: system region on Saturn
301328
302   state->m_smpc.OREG[10]= 0 << 7 |
329      state->m_smpc.OREG[10]= 0 << 7 |
303330                        state->m_vdp2.dotsel << 6 |
304331                        1 << 5 |
305332                        1 << 4 |
r21050r21051
307334                        1 << 2 |
308335                        0 << 1 | //SYSRES
309336                        0 << 0;  //SOUNDRES
310   state->m_smpc.OREG[11]= 0 << 6; //CDRES
337      state->m_smpc.OREG[11]= 0 << 6; //CDRES
311338
312   for(i=0;i<4;i++)
313      state->m_smpc.OREG[12+i]=state->m_smpc.SMEM[i];
339      for(i=0;i<4;i++)
340         state->m_smpc.OREG[12+i]=state->m_smpc.SMEM[i];
314341
315   for(i=0;i<15;i++)
316      state->m_smpc.OREG[16+i]=0xff; // undefined
342      for(i=0;i<15;i++)
343         state->m_smpc.OREG[16+i]=0xff; // undefined
317344
318   //  /*This is for RTC,cartridge code and similar stuff...*/
319   //if(LOG_SMPC) printf ("Interrupt: System Manager (SMPC) at scanline %04x, Vector 0x47 Level 0x08\n",scanline);
320   if(!(state->m_scu.ism & IRQ_SMPC))
321      state->m_maincpu->set_input_line_and_vector(8, HOLD_LINE, 0x47);
322   else
323      state->m_scu.ist |= (IRQ_SMPC);
345      state->m_smpc.intback_stage = (state->m_smpc.intback_buf[1] & 8) >> 3; // first peripheral
346      state->m_smpc.SR = 0x40 | state->m_smpc.intback_stage << 5;
347      state->m_smpc.pmode = state->m_smpc.intback_buf[0]>>4;
324348
325   /* put issued command in OREG31 */
326   state->m_smpc.OREG[31] = 0x10; // TODO: doc says 0?
327   /* clear hand-shake flag */
328   state->m_smpc.SF = 0x00;
349      //  /*This is for RTC,cartridge code and similar stuff...*/
350      //if(LOG_SMPC) printf ("Interrupt: System Manager (SMPC) at scanline %04x, Vector 0x47 Level 0x08\n",scanline);
351      if(!(state->m_scu.ism & IRQ_SMPC))
352         state->m_maincpu->set_input_line_and_vector(8, HOLD_LINE, 0x47);
353      else
354         state->m_scu.ist |= (IRQ_SMPC);
355
356      /* put issued command in OREG31 */
357      state->m_smpc.OREG[31] = 0x10; // TODO: doc says 0?
358      /* clear hand-shake flag */
359      state->m_smpc.SF = 0x00;
360   }
361   else if(state->m_smpc.intback_buf[1] & 8)
362   {
363      state->m_smpc.intback_stage = (state->m_smpc.intback_buf[1] & 8) >> 3; // first peripheral
364      state->m_smpc.SR = 0x40;
365      state->m_smpc.OREG[31] = 0x10;
366      machine.scheduler().timer_set(attotime::from_usec(0), FUNC(stv_intback_peripheral),0);
367   }
329368}
330369
370
331371/*
332372    [0] port status:
333373        0x04 Sega-tap
r21050r21051
687727            printf ("SMPC: Status Acquire %02x %02x %02x %d\n",state->m_smpc.IREG[0],state->m_smpc.IREG[1],state->m_smpc.IREG[2],space.machine().primary_screen->vpos());
688728         }
689729
690         if(is_stv)
691            space.machine().scheduler().timer_set(attotime::from_usec(700), FUNC(stv_smpc_intback),0); //TODO: variable time
692         else
693         {
694            int timing;
730         int timing;
695731
696            timing = 100;
732         timing = 100;
697733
698            if(state->m_smpc.IREG[0] != 0) // non-peripheral data
699               timing += 100;
734         if(state->m_smpc.IREG[0] != 0) // non-peripheral data
735            timing += 100;
700736
701            if(state->m_smpc.IREG[1] & 8) // peripheral data
702               timing += 700;
737         if(state->m_smpc.IREG[1] & 8) // peripheral data
738            timing += 700;
703739
704            /* TODO: check if IREG[2] is setted to 0xf0 */
705            {
706               int i;
740         /* TODO: check if IREG[2] is setted to 0xf0 */
741         {
742            int i;
707743
708               for(i=0;i<3;i++)
709                  state->m_smpc.intback_buf[i] = state->m_smpc.IREG[i];
710            }
744            for(i=0;i<3;i++)
745               state->m_smpc.intback_buf[i] = state->m_smpc.IREG[i];
746         }
711747
748         if(is_stv)
749         {
750            space.machine().scheduler().timer_set(attotime::from_usec(timing), FUNC(stv_smpc_intback),0); //TODO: variable time
751         }
752         else
753         {
712754            if(LOG_PAD_CMD) printf("INTBACK %02x %02x %d %d\n",state->m_smpc.IREG[0],state->m_smpc.IREG[1],space.machine().primary_screen->vpos(),(int)space.machine().primary_screen->frame_number());
713755            space.machine().scheduler().timer_set(attotime::from_usec(timing), FUNC(saturn_smpc_intback),0); //TODO: is variable time correct?
714756         }
r21050r21051
755797      return_data = state->m_smpc.OREG[(offset-0x21) >> 1];
756798
757799   if (offset == 0x61) // TODO: SR
758      return_data = 0x20 ^ 0xff;
800      return_data = state->m_smpc.SR;
759801
760802   if (offset == 0x63)
761803      return_data = state->m_smpc.SF;
r21050r21051
781823   if(offset >= 1 && offset <= 0xd)
782824      state->m_smpc.IREG[offset >> 1] = data;
783825
826   if(offset == 1) //IREG0, check if a BREAK / CONTINUE request for INTBACK command
827   {
828      if(state->m_smpc.intback_stage)
829      {
830         if(data & 0x40)
831         {
832            if(LOG_PAD_CMD) printf("SMPC: BREAK request\n");
833            state->m_smpc.SR &= 0x0f;
834            state->m_smpc.intback_stage = 0;
835         }
836         else if(data & 0x80)
837         {
838            if(LOG_PAD_CMD) printf("SMPC: CONTINUE request\n");
839            space.machine().scheduler().timer_set(attotime::from_usec(700), FUNC(stv_intback_peripheral),0); /* TODO: is timing correct? */
840            state->m_smpc.OREG[31] = 0x10;
841            state->m_smpc.SF = 0x01; //TODO: set hand-shake flag?
842         }
843      }
844   }
845
784846   if (offset == 0x1f) // COMREG
785847   {
786848      smpc_comreg_exec(space,data,1);

Previous 199869 Revisions Next


© 1997-2024 The MAME Team