trunk/src/mame/drivers/stv.c
| r21050 | r21051 | |
| 2777 | 2777 | ROM_END |
| 2778 | 2778 | |
| 2779 | 2779 | |
| 2780 | | GAME( 1996, stvbios, 0, stv_slot, stv, saturn_state, stv, ROT0, "Sega", "ST-V Bios", GAME_IS_BIOS_ROOT ) |
| 2780 | GAME( 1996, stvbios, 0, stv_slot, stv, saturn_state, stv, ROT0, "Sega", "ST-V Bios", GAME_IS_BIOS_ROOT ) |
| 2781 | 2781 | |
| 2782 | 2782 | //GAME YEAR, NAME, PARENT, MACH, INP, INIT, MONITOR |
| 2783 | 2783 | /* Playable */ |
| 2784 | | GAME( 1998, astrass, stvbios, stv, stv6b, saturn_state, astrass, ROT0, "Sunsoft", "Astra SuperStars (J 980514 V1.002)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND ) |
| 2784 | GAME( 1998, astrass, stvbios, stv, stv6b, saturn_state, astrass, ROT0, "Sunsoft", "Astra SuperStars (J 980514 V1.002)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND ) |
| 2785 | 2785 | GAME( 1995, bakubaku, stvbios, stv, stv, saturn_state, stv, ROT0, "Sega", "Baku Baku Animal (J 950407 V1.000)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS ) |
| 2786 | 2786 | GAME( 1996, batmanfr, stvbios, stv, stv, saturn_state, batmanfr, ROT0, "Acclaim", "Batman Forever (JUE 960507 V1.000)", GAME_NO_SOUND | GAME_IMPERFECT_GRAPHICS ) |
| 2787 | 2787 | GAME( 1996, colmns97, stvbios, stv, stv, saturn_state, colmns97, ROT0, "Sega", "Columns '97 (JET 961209 V1.000)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS ) |
| 2788 | 2788 | GAME( 1997, cotton2, stvbios, stv, stv, saturn_state, cotton2, ROT0, "Success", "Cotton 2 (JUET 970902 V1.000)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS ) |
| 2789 | 2789 | GAME( 1998, cottonbm, stvbios, stv, stv, saturn_state, cottonbm, ROT0, "Success", "Cotton Boomerang (JUET 980709 V1.000)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS ) |
| 2790 | 2790 | GAME( 1995, critcrsh, stvbios, stv, critcrsh, saturn_state, critcrsh, ROT0, "Sega", "Critter Crusher (EA 951204 V1.000)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS ) |
| 2791 | | GAME( 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 ) |
| 2791 | GAME( 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 ) |
| 2792 | 2792 | GAME( 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 ) |
| 2793 | 2793 | GAME( 1996, diehard, stvbios, stv, stv, saturn_state, diehard, ROT0, "Sega", "Die Hard Arcade (UET 960515 V1.000)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND ) |
| 2794 | 2794 | GAME( 1996, dnmtdeka, diehard, stv, stv, saturn_state, dnmtdeka, ROT0, "Sega", "Dynamite Deka (J 960515 V1.000)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND ) |
| 2795 | 2795 | GAME( 1995, ejihon, stvbios, stv, stv, saturn_state, stv, ROT0, "Sega", "Ejihon Tantei Jimusyo (J 950613 V1.000)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS ) |
| 2796 | 2796 | GAME( 1995, fhboxers, stvbios, stv, stv, saturn_state, fhboxers, ROT0, "Sega", "Funky Head Boxers (JUETBKAL 951218 V1.000)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS ) |
| 2797 | | GAME( 1994, gaxeduel, stvbios, stv, stv6b, saturn_state, gaxeduel, ROT0, "Sega", "Golden Axe - The Duel (JUETL 950117 V1.000)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS) |
| 2797 | GAME( 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 ) |
| 2798 | GAME( 1994, gaxeduel, stvbios, stv, stv6b, saturn_state, gaxeduel, ROT0, "Sega", "Golden Axe - The Duel (JUETL 950117 V1.000)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS) |
| 2798 | 2799 | GAME( 1998, grdforce, stvbios, stv, stv, saturn_state, grdforce, ROT0, "Success", "Guardian Force (JUET 980318 V0.105)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS ) |
| 2799 | | GAME( 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 ) |
| 2800 | GAME( 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 ) |
| 2800 | 2801 | GAME( 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 ) |
| 2801 | 2802 | GAME( 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 ) |
| 2802 | | GAME( 1995, kiwames, stvbios, stv, stvmp, saturn_state, stvmp, ROT0, "Athena", "Pro Mahjong Kiwame S (J 951020 V1.208)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS ) |
| 2803 | GAME( 1995, kiwames, stvbios, stv, stvmp, saturn_state, stvmp, ROT0, "Athena", "Pro Mahjong Kiwame S (J 951020 V1.208)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS ) |
| 2803 | 2804 | GAME( 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 ) |
| 2804 | 2805 | GAME( 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 ) |
| 2805 | 2806 | GAME( 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 ) |
| r21050 | r21051 | |
| 2820 | 2821 | GAME( 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 ) |
| 2821 | 2822 | GAME( 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 ) |
| 2822 | 2823 | GAME( 1996, sokyugrt, stvbios, stv, stv, saturn_state, sokyugrt, ROT0, "Raizing / Eighting", "Soukyugurentai / Terra Diver (JUET 960821 V1.000)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS ) |
| 2823 | | GAME( 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 ) |
| 2824 | GAME( 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 ) |
| 2824 | 2825 | GAME( 1996, vfkids, stvbios, stv, stv, saturn_state, stv, ROT0, "Sega", "Virtua Fighter Kids (JUET 960319 V0.000)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS ) |
| 2825 | 2826 | GAME( 1997, vmahjong, stvbios, stv, myfairld, saturn_state, stvmp, ROT0, "Micronet", "Virtual Mahjong (J 961214 V1.000)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS ) |
| 2826 | 2827 | GAME( 1997, winterht, stvbios, stv, stv, saturn_state, winterht, ROT0, "Sega", "Winter Heat (JUET 971012 V1.000)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS ) |
| r21050 | r21051 | |
| 2828 | 2829 | |
| 2829 | 2830 | /* Almost */ |
| 2830 | 2831 | GAME( 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 |
| 2831 | | GAME( 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 ) |
| 2832 | GAME( 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 ) |
| 2832 | 2833 | |
| 2833 | 2834 | /* Unemulated printer / camera devices */ |
| 2834 | 2835 | GAME( 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 ) |
| 2835 | 2836 | GAME( 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 ) |
| 2836 | 2837 | GAME( 1997, pclub2, stvbios, stv, stv, saturn_state, stv, ROT0, "Atlus", "Print Club 2 (U 970921 V1.000)", GAME_NOT_WORKING ) |
| 2837 | | GAME( 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 ) |
| 2838 | | GAME( 1997, pclb297w, pclub2, stv, stv, saturn_state, stv, ROT0, "Atlus", "Print Club 2 '97 Winter Ver (J 971017 V1.100)", GAME_NOT_WORKING ) |
| 2839 | | GAME( 1997, pclub298, pclub2, stv, stv, saturn_state, stv, ROT0, "Atlus", "Print Club 2 '98 Spring Ver (J 971017 V1.100)", GAME_NOT_WORKING ) |
| 2840 | | GAME( 1998, pclb298a, pclub2, stv, stv, saturn_state, stv, ROT0, "Atlus", "Print Club 2 '98 Autumn Ver (J 980827 V1.000)", GAME_NOT_WORKING ) |
| 2841 | | GAME( 1999, pclubor, stvbios, stv, stv, saturn_state, stv, ROT0, "Atlus", "Print Club Goukakenran (J 991104 V1.000)", GAME_NOT_WORKING ) |
| 2842 | | GAME( 1999, pclubol, stvbios, stv, stv, saturn_state, stv, ROT0, "Atlus", "Print Club Olive (J 980717 V1.000)", GAME_NOT_WORKING ) |
| 2843 | | GAME( 1999, pclub2v3, pclub2, stv, stv, saturn_state, stv, ROT0, "Atlus", "Print Club 2 Vol. 3 (U 990310 V1.000)", GAME_NOT_WORKING ) |
| 2844 | | GAME( 1999, pclubpok, stvbios, stv, stv, saturn_state, stv, ROT0, "Atlus", "Print Club Pokemon B (U 991126 V1.000)", GAME_NOT_WORKING ) |
| 2845 | | GAME( 1997, pclub2kc, stvbios, stv, stv, saturn_state, stv, ROT0, "Atlus", "Print Club Kome Kome Club (J 970203 V1.000)", GAME_NOT_WORKING ) |
| 2846 | | GAME( 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 ) |
| 2838 | GAME( 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 ) |
| 2839 | GAME( 1997, pclb297w, pclub2, stv, stv, saturn_state, stv, ROT0, "Atlus", "Print Club 2 '97 Winter Ver (J 971017 V1.100)", GAME_NOT_WORKING ) |
| 2840 | GAME( 1997, pclub298, pclub2, stv, stv, saturn_state, stv, ROT0, "Atlus", "Print Club 2 '98 Spring Ver (J 971017 V1.100)", GAME_NOT_WORKING ) |
| 2841 | GAME( 1998, pclb298a, pclub2, stv, stv, saturn_state, stv, ROT0, "Atlus", "Print Club 2 '98 Autumn Ver (J 980827 V1.000)", GAME_NOT_WORKING ) |
| 2842 | GAME( 1999, pclubor, stvbios, stv, stv, saturn_state, stv, ROT0, "Atlus", "Print Club Goukakenran (J 991104 V1.000)", GAME_NOT_WORKING ) |
| 2843 | GAME( 1999, pclubol, stvbios, stv, stv, saturn_state, stv, ROT0, "Atlus", "Print Club Olive (J 980717 V1.000)", GAME_NOT_WORKING ) |
| 2844 | GAME( 1999, pclub2v3, pclub2, stv, stv, saturn_state, stv, ROT0, "Atlus", "Print Club 2 Vol. 3 (U 990310 V1.000)", GAME_NOT_WORKING ) |
| 2845 | GAME( 1999, pclubpok, stvbios, stv, stv, saturn_state, stv, ROT0, "Atlus", "Print Club Pokemon B (U 991126 V1.000)", GAME_NOT_WORKING ) |
| 2846 | GAME( 1997, pclub2kc, stvbios, stv, stv, saturn_state, stv, ROT0, "Atlus", "Print Club Kome Kome Club (J 970203 V1.000)", GAME_NOT_WORKING ) |
| 2847 | GAME( 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 ) |
| 2847 | 2848 | |
| 2848 | 2849 | |
| 2849 | 2850 | /* Doing something.. but not enough yet */ |
| 2850 | 2851 | GAME( 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 ) |
| 2851 | | GAME( 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 ) |
| 2852 | 2852 | GAME( 1996, decathlt, stvbios, stv, stv, saturn_state, decathlt, ROT0, "Sega", "Decathlete (JUET 960709 V1.001)", GAME_NO_SOUND | GAME_NOT_WORKING | GAME_UNEMULATED_PROTECTION ) |
| 2853 | 2853 | GAME( 1996, decathlto, decathlt,stv, stv, saturn_state, decathlt, ROT0, "Sega", "Decathlete (JUET 960424 V1.000)", GAME_NO_SOUND | GAME_NOT_WORKING | GAME_UNEMULATED_PROTECTION ) |
| 2854 | 2854 | |
trunk/src/emu/machine/smpc.c
| r21050 | r21051 | |
| 285 | 285 | /* TODO: VDP1 / VDP2 / SCU / SCSP default power ON values? */ |
| 286 | 286 | } |
| 287 | 287 | |
| 288 | static 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 | |
| 288 | 313 | static TIMER_CALLBACK( stv_smpc_intback ) |
| 289 | 314 | { |
| 290 | 315 | saturn_state *state = machine.driver_data<saturn_state>(); |
| 291 | 316 | int i; |
| 292 | 317 | |
| 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); |
| 294 | 321 | |
| 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]; |
| 297 | 324 | |
| 298 | | state->m_smpc.OREG[8]=0x00; // CTG0 / CTG1? |
| 325 | state->m_smpc.OREG[8]=0x00; // CTG0 / CTG1? |
| 299 | 326 | |
| 300 | | state->m_smpc.OREG[9]=0x00; // TODO: system region on Saturn |
| 327 | state->m_smpc.OREG[9]=0x00; // TODO: system region on Saturn |
| 301 | 328 | |
| 302 | | state->m_smpc.OREG[10]= 0 << 7 | |
| 329 | state->m_smpc.OREG[10]= 0 << 7 | |
| 303 | 330 | state->m_vdp2.dotsel << 6 | |
| 304 | 331 | 1 << 5 | |
| 305 | 332 | 1 << 4 | |
| r21050 | r21051 | |
| 307 | 334 | 1 << 2 | |
| 308 | 335 | 0 << 1 | //SYSRES |
| 309 | 336 | 0 << 0; //SOUNDRES |
| 310 | | state->m_smpc.OREG[11]= 0 << 6; //CDRES |
| 337 | state->m_smpc.OREG[11]= 0 << 6; //CDRES |
| 311 | 338 | |
| 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]; |
| 314 | 341 | |
| 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 |
| 317 | 344 | |
| 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; |
| 324 | 348 | |
| 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 | } |
| 329 | 368 | } |
| 330 | 369 | |
| 370 | |
| 331 | 371 | /* |
| 332 | 372 | [0] port status: |
| 333 | 373 | 0x04 Sega-tap |
| r21050 | r21051 | |
| 687 | 727 | 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()); |
| 688 | 728 | } |
| 689 | 729 | |
| 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; |
| 695 | 731 | |
| 696 | | timing = 100; |
| 732 | timing = 100; |
| 697 | 733 | |
| 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; |
| 700 | 736 | |
| 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; |
| 703 | 739 | |
| 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; |
| 707 | 743 | |
| 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 | } |
| 711 | 747 | |
| 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 | { |
| 712 | 754 | 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()); |
| 713 | 755 | space.machine().scheduler().timer_set(attotime::from_usec(timing), FUNC(saturn_smpc_intback),0); //TODO: is variable time correct? |
| 714 | 756 | } |
| r21050 | r21051 | |
| 755 | 797 | return_data = state->m_smpc.OREG[(offset-0x21) >> 1]; |
| 756 | 798 | |
| 757 | 799 | if (offset == 0x61) // TODO: SR |
| 758 | | return_data = 0x20 ^ 0xff; |
| 800 | return_data = state->m_smpc.SR; |
| 759 | 801 | |
| 760 | 802 | if (offset == 0x63) |
| 761 | 803 | return_data = state->m_smpc.SF; |
| r21050 | r21051 | |
| 781 | 823 | if(offset >= 1 && offset <= 0xd) |
| 782 | 824 | state->m_smpc.IREG[offset >> 1] = data; |
| 783 | 825 | |
| 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 | |
| 784 | 846 | if (offset == 0x1f) // COMREG |
| 785 | 847 | { |
| 786 | 848 | smpc_comreg_exec(space,data,1); |