Previous 199869 Revisions Next

r21326 Friday 22nd February, 2013 at 19:25:23 UTC by smf
split saturn and stv up a bit more so that stvprot.c is not linked into MESS [smf]
[src/mame/drivers]saturn.c stv.c
[src/mame/includes]stv.h
[src/mess]mess.mak

trunk/src/mame/includes/stv.h
r21325r21326
138138   legacy_cpu_device* m_audiocpu;
139139
140140   bitmap_rgb32 m_tmpbitmap;
141   DECLARE_READ8_MEMBER(stv_ioga_r);
142   DECLARE_WRITE8_MEMBER(stv_ioga_w);
143   DECLARE_READ8_MEMBER(critcrsh_ioga_r);
144   DECLARE_READ8_MEMBER(magzun_ioga_r);
145   DECLARE_WRITE8_MEMBER(magzun_ioga_w);
146   DECLARE_READ8_MEMBER(stvmp_ioga_r);
147   DECLARE_WRITE8_MEMBER(stvmp_ioga_w);
148   DECLARE_READ32_MEMBER(stv_ioga_r32);
149   DECLARE_WRITE32_MEMBER(stv_ioga_w32);
150   DECLARE_READ32_MEMBER(critcrsh_ioga_r32);
151   DECLARE_READ32_MEMBER(stvmp_ioga_r32);
152   DECLARE_WRITE32_MEMBER(stvmp_ioga_w32);
153   DECLARE_READ32_MEMBER(magzun_ioga_r32);
154   DECLARE_WRITE32_MEMBER(magzun_ioga_w32);
155   DECLARE_READ32_MEMBER(magzun_hef_hack_r);
156   DECLARE_READ32_MEMBER(magzun_rx_hack_r);
157141   DECLARE_INPUT_CHANGED_MEMBER(key_stroke);
158142   DECLARE_INPUT_CHANGED_MEMBER(nmi_reset);
159143   DECLARE_INPUT_CHANGED_MEMBER(tray_open);
160144   DECLARE_INPUT_CHANGED_MEMBER(tray_close);
161   DECLARE_DRIVER_INIT(astrass);
162   DECLARE_DRIVER_INIT(batmanfr);
163   DECLARE_DRIVER_INIT(finlarch);
164   DECLARE_DRIVER_INIT(decathlt);
165   DECLARE_DRIVER_INIT(sanjeon);
166   DECLARE_DRIVER_INIT(puyosun);
167   DECLARE_DRIVER_INIT(winterht);
168   DECLARE_DRIVER_INIT(gaxeduel);
169   DECLARE_DRIVER_INIT(rsgun);
170   DECLARE_DRIVER_INIT(groovef);
171   DECLARE_DRIVER_INIT(sandor);
172   DECLARE_DRIVER_INIT(cottonbm);
173   DECLARE_DRIVER_INIT(smleague);
174   DECLARE_DRIVER_INIT(nameclv3);
175   DECLARE_DRIVER_INIT(danchiq);
176   DECLARE_DRIVER_INIT(hanagumi);
177   DECLARE_DRIVER_INIT(cotton2);
178   DECLARE_DRIVER_INIT(seabass);
179   DECLARE_DRIVER_INIT(stv);
180   DECLARE_DRIVER_INIT(thunt);
181   DECLARE_DRIVER_INIT(critcrsh);
182   DECLARE_DRIVER_INIT(stvmp);
183   DECLARE_DRIVER_INIT(sasissu);
184   DECLARE_DRIVER_INIT(dnmtdeka);
185   DECLARE_DRIVER_INIT(ffreveng);
186   DECLARE_DRIVER_INIT(fhboxers);
187   DECLARE_DRIVER_INIT(pblbeach);
188   DECLARE_DRIVER_INIT(sss);
189   DECLARE_DRIVER_INIT(diehard);
190   DECLARE_DRIVER_INIT(danchih);
191   DECLARE_DRIVER_INIT(shienryu);
192   DECLARE_DRIVER_INIT(elandore);
193   DECLARE_DRIVER_INIT(prikura);
194   DECLARE_DRIVER_INIT(maruchan);
195   DECLARE_DRIVER_INIT(colmns97);
196   DECLARE_DRIVER_INIT(grdforce);
197   DECLARE_DRIVER_INIT(suikoenb);
198   DECLARE_DRIVER_INIT(magzun);
199   DECLARE_DRIVER_INIT(shanhigw);
200   DECLARE_DRIVER_INIT(sokyugrt);
201   DECLARE_DRIVER_INIT(vfremix);
202   DECLARE_DRIVER_INIT(twcup98);
203   DECLARE_DRIVER_INIT(znpwfv);
204   DECLARE_DRIVER_INIT(othellos);
205   DECLARE_DRIVER_INIT(mausuke);
206145
207146   DECLARE_DRIVER_INIT(saturnus);
208147   DECLARE_DRIVER_INIT(saturneu);
r21325r21326
210149   DECLARE_MACHINE_START(saturn);
211150   DECLARE_MACHINE_RESET(saturn);
212151   DECLARE_VIDEO_START(stv_vdp2);
213   DECLARE_MACHINE_START(stv);
214   DECLARE_MACHINE_RESET(stv);
215152   UINT32 screen_update_saturn(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
216153   UINT32 screen_update_stv_vdp2(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
217154   TIMER_DEVICE_CALLBACK_MEMBER(saturn_scanline);
r21325r21326
257194   DECLARE_WRITE8_MEMBER( saturn_SMPC_w );
258195
259196   DECLARE_DEVICE_IMAGE_LOAD_MEMBER( sat_cart );
260   DECLARE_DEVICE_IMAGE_LOAD_MEMBER( stv_cart );
261197
262198   DECLARE_READ16_MEMBER ( saturn_vdp1_regs_r );
263199   DECLARE_READ32_MEMBER ( saturn_vdp1_vram_r );
r21325r21326
705641   int numfiles;            // # of entries in current directory
706642   int firstfile;           // first non-directory file
707643
708   // ST-V specific
644   static void m68k_reset_callback(device_t *device);
645   int DectoBCD(int num);
646};
647
648class stv_state : public saturn_state
649{
650public:
651   DECLARE_DRIVER_INIT(astrass);
652   DECLARE_DRIVER_INIT(batmanfr);
653   DECLARE_DRIVER_INIT(finlarch);
654   DECLARE_DRIVER_INIT(decathlt);
655   DECLARE_DRIVER_INIT(sanjeon);
656   DECLARE_DRIVER_INIT(puyosun);
657   DECLARE_DRIVER_INIT(winterht);
658   DECLARE_DRIVER_INIT(gaxeduel);
659   DECLARE_DRIVER_INIT(rsgun);
660   DECLARE_DRIVER_INIT(groovef);
661   DECLARE_DRIVER_INIT(sandor);
662   DECLARE_DRIVER_INIT(cottonbm);
663   DECLARE_DRIVER_INIT(smleague);
664   DECLARE_DRIVER_INIT(nameclv3);
665   DECLARE_DRIVER_INIT(danchiq);
666   DECLARE_DRIVER_INIT(hanagumi);
667   DECLARE_DRIVER_INIT(cotton2);
668   DECLARE_DRIVER_INIT(seabass);
669   DECLARE_DRIVER_INIT(stv);
670   DECLARE_DRIVER_INIT(thunt);
671   DECLARE_DRIVER_INIT(critcrsh);
672   DECLARE_DRIVER_INIT(stvmp);
673   DECLARE_DRIVER_INIT(sasissu);
674   DECLARE_DRIVER_INIT(dnmtdeka);
675   DECLARE_DRIVER_INIT(ffreveng);
676   DECLARE_DRIVER_INIT(fhboxers);
677   DECLARE_DRIVER_INIT(pblbeach);
678   DECLARE_DRIVER_INIT(sss);
679   DECLARE_DRIVER_INIT(diehard);
680   DECLARE_DRIVER_INIT(danchih);
681   DECLARE_DRIVER_INIT(shienryu);
682   DECLARE_DRIVER_INIT(elandore);
683   DECLARE_DRIVER_INIT(prikura);
684   DECLARE_DRIVER_INIT(maruchan);
685   DECLARE_DRIVER_INIT(colmns97);
686   DECLARE_DRIVER_INIT(grdforce);
687   DECLARE_DRIVER_INIT(suikoenb);
688   DECLARE_DRIVER_INIT(magzun);
689   DECLARE_DRIVER_INIT(shanhigw);
690   DECLARE_DRIVER_INIT(sokyugrt);
691   DECLARE_DRIVER_INIT(vfremix);
692   DECLARE_DRIVER_INIT(twcup98);
693   DECLARE_DRIVER_INIT(znpwfv);
694   DECLARE_DRIVER_INIT(othellos);
695   DECLARE_DRIVER_INIT(mausuke);
696
697   DECLARE_READ8_MEMBER(stv_ioga_r);
698   DECLARE_WRITE8_MEMBER(stv_ioga_w);
699   DECLARE_READ8_MEMBER(critcrsh_ioga_r);
700   DECLARE_READ8_MEMBER(magzun_ioga_r);
701   DECLARE_WRITE8_MEMBER(magzun_ioga_w);
702   DECLARE_READ8_MEMBER(stvmp_ioga_r);
703   DECLARE_WRITE8_MEMBER(stvmp_ioga_w);
704   DECLARE_READ32_MEMBER(stv_ioga_r32);
705   DECLARE_WRITE32_MEMBER(stv_ioga_w32);
706   DECLARE_READ32_MEMBER(critcrsh_ioga_r32);
707   DECLARE_READ32_MEMBER(stvmp_ioga_r32);
708   DECLARE_WRITE32_MEMBER(stvmp_ioga_w32);
709   DECLARE_READ32_MEMBER(magzun_ioga_r32);
710   DECLARE_WRITE32_MEMBER(magzun_ioga_w32);
711   DECLARE_READ32_MEMBER(magzun_hef_hack_r);
712   DECLARE_READ32_MEMBER(magzun_rx_hack_r);
713
714   DECLARE_DEVICE_IMAGE_LOAD_MEMBER( stv_cart );
715
709716   void install_stvbios_speedups( void );
717
718   DECLARE_MACHINE_START(stv);
719   DECLARE_MACHINE_RESET(stv);
710720};
711721
712722#define MASTER_CLOCK_352 57272720
trunk/src/mame/drivers/stv.c
r21325r21326
6060    0x001f PORT-AD
6161*/
6262
63READ8_MEMBER(saturn_state::stv_ioga_r)
63READ8_MEMBER(stv_state::stv_ioga_r)
6464{
6565   UINT8 res;
6666
r21325r21326
8484   return res;
8585}
8686
87WRITE8_MEMBER(saturn_state::stv_ioga_w)
87WRITE8_MEMBER(stv_state::stv_ioga_w)
8888{
8989   offset &= 0x1f; // mirror?
9090
r21325r21326
104104   }
105105}
106106
107READ8_MEMBER(saturn_state::critcrsh_ioga_r)
107READ8_MEMBER(stv_state::critcrsh_ioga_r)
108108{
109109   UINT8 res;
110110   const char *const lgnames[] = { "LIGHTX", "LIGHTY" };
r21325r21326
125125   return res;
126126}
127127
128READ8_MEMBER(saturn_state::magzun_ioga_r)
128READ8_MEMBER(stv_state::magzun_ioga_r)
129129{
130130   UINT8 res;
131131
r21325r21326
150150   return res;
151151}
152152
153WRITE8_MEMBER(saturn_state::magzun_ioga_w)
153WRITE8_MEMBER(stv_state::magzun_ioga_w)
154154{
155155   switch(offset)
156156   {
r21325r21326
160160   }
161161}
162162
163READ8_MEMBER(saturn_state::stvmp_ioga_r)
163READ8_MEMBER(stv_state::stvmp_ioga_r)
164164{
165165   const char *const mpnames[2][5] = {
166166      {"P1_KEY0", "P1_KEY1", "P1_KEY2", "P1_KEY3", "P1_KEY4"},
r21325r21326
192192   return res;
193193}
194194
195WRITE8_MEMBER(saturn_state::stvmp_ioga_w)
195WRITE8_MEMBER(stv_state::stvmp_ioga_w)
196196{
197197   switch(offset)
198198   {
r21325r21326
203203}
204204
205205/* remaps with a 8-bit handler because MAME can't install r/w handlers with a different bus parallelism than the CPU native one, shrug ... */
206READ32_MEMBER(saturn_state::stv_ioga_r32)
206READ32_MEMBER(stv_state::stv_ioga_r32)
207207{
208208   UINT32 res;
209209
r21325r21326
219219   return res;
220220}
221221
222WRITE32_MEMBER(saturn_state::stv_ioga_w32)
222WRITE32_MEMBER(stv_state::stv_ioga_w32)
223223{
224224   if(ACCESSING_BITS_16_23)
225225      stv_ioga_w(space,offset*4+1,data >> 16);
r21325r21326
232232   return;
233233}
234234
235READ32_MEMBER(saturn_state::critcrsh_ioga_r32)
235READ32_MEMBER(stv_state::critcrsh_ioga_r32)
236236{
237237   UINT32 res;
238238
r21325r21326
249249   return res;
250250}
251251
252READ32_MEMBER(saturn_state::stvmp_ioga_r32)
252READ32_MEMBER(stv_state::stvmp_ioga_r32)
253253{
254254   UINT32 res;
255255
r21325r21326
266266   return res;
267267}
268268
269WRITE32_MEMBER(saturn_state::stvmp_ioga_w32)
269WRITE32_MEMBER(stv_state::stvmp_ioga_w32)
270270{
271271   if(ACCESSING_BITS_16_23)
272272      stvmp_ioga_w(space,offset*4+1,data >> 16);
r21325r21326
278278            printf("Warning: IOGA writes to odd offset %02x (%08x) -> %08x!",offset*4,mem_mask,data);
279279}
280280
281READ32_MEMBER(saturn_state::magzun_ioga_r32)
281READ32_MEMBER(stv_state::magzun_ioga_r32)
282282{
283283   UINT32 res;
284284
r21325r21326
295295   return res;
296296}
297297
298WRITE32_MEMBER(saturn_state::magzun_ioga_w32)
298WRITE32_MEMBER(stv_state::magzun_ioga_w32)
299299{
300300   if(ACCESSING_BITS_16_23)
301301      magzun_ioga_w(space,offset*4+1,data >> 16);
r21325r21326
327327
328328*/
329329
330void saturn_state::install_stvbios_speedups( void )
330void stv_state::install_stvbios_speedups( void )
331331{
332332   // flushes 0 & 1 on both CPUs are for the BIOS speedups
333333   sh2drc_add_pcflush(machine().device("maincpu"), 0x60154b2);
r21325r21326
337337   sh2drc_add_pcflush(machine().device("slave"), 0x6013aee);
338338}
339339
340DRIVER_INIT_MEMBER(saturn_state,stv)
340DRIVER_INIT_MEMBER(stv_state,stv)
341341{
342342   system_time systime;
343343
r21325r21326
361361   sh2drc_set_options(machine().device("maincpu"), SH2DRC_STRICT_VERIFY|SH2DRC_STRICT_PCREL);
362362   sh2drc_set_options(machine().device("slave"), SH2DRC_STRICT_VERIFY|SH2DRC_STRICT_PCREL);
363363
364   machine().device("maincpu")->memory().space(AS_PROGRAM).install_readwrite_handler(0x00400000, 0x0040003f, read32_delegate(FUNC(saturn_state::stv_ioga_r32),this), write32_delegate(FUNC(saturn_state::stv_ioga_w32),this));
365   machine().device("slave")->memory().space(AS_PROGRAM).install_readwrite_handler(0x00400000, 0x0040003f, read32_delegate(FUNC(saturn_state::stv_ioga_r32),this), write32_delegate(FUNC(saturn_state::stv_ioga_w32),this));
364   machine().device("maincpu")->memory().space(AS_PROGRAM).install_readwrite_handler(0x00400000, 0x0040003f, read32_delegate(FUNC(stv_state::stv_ioga_r32),this), write32_delegate(FUNC(stv_state::stv_ioga_w32),this));
365   machine().device("slave")->memory().space(AS_PROGRAM).install_readwrite_handler(0x00400000, 0x0040003f, read32_delegate(FUNC(stv_state::stv_ioga_r32),this), write32_delegate(FUNC(stv_state::stv_ioga_w32),this));
366366
367367   m_vdp2.pal = 0;
368368}
369369
370DRIVER_INIT_MEMBER(saturn_state,critcrsh)
370DRIVER_INIT_MEMBER(stv_state,critcrsh)
371371{
372372   DRIVER_INIT_CALL(stv);
373   machine().device("maincpu")->memory().space(AS_PROGRAM).install_readwrite_handler(0x00400000, 0x0040003f, read32_delegate(FUNC(saturn_state::critcrsh_ioga_r32),this), write32_delegate(FUNC(saturn_state::stv_ioga_w32),this));
374   machine().device("slave")->memory().space(AS_PROGRAM).install_readwrite_handler(0x00400000, 0x0040003f, read32_delegate(FUNC(saturn_state::critcrsh_ioga_r32),this), write32_delegate(FUNC(saturn_state::stv_ioga_w32),this));
373   machine().device("maincpu")->memory().space(AS_PROGRAM).install_readwrite_handler(0x00400000, 0x0040003f, read32_delegate(FUNC(stv_state::critcrsh_ioga_r32),this), write32_delegate(FUNC(stv_state::stv_ioga_w32),this));
374   machine().device("slave")->memory().space(AS_PROGRAM).install_readwrite_handler(0x00400000, 0x0040003f, read32_delegate(FUNC(stv_state::critcrsh_ioga_r32),this), write32_delegate(FUNC(stv_state::stv_ioga_w32),this));
375375}
376376
377377/*
r21325r21326
382382    TODO: game doesn't work if not in debugger?
383383*/
384384
385READ32_MEMBER(saturn_state::magzun_hef_hack_r)
385READ32_MEMBER(stv_state::magzun_hef_hack_r)
386386{
387387   if(space.device().safe_pc()==0x604bf20) return 0x00000001; //HWEF
388388
r21325r21326
391391   return m_workram_h[0x08e830/4];
392392}
393393
394READ32_MEMBER(saturn_state::magzun_rx_hack_r)
394READ32_MEMBER(stv_state::magzun_rx_hack_r)
395395{
396396   if(space.device().safe_pc()==0x604c006) return 0x40;
397397
398398   return m_workram_h[0x0ff3b4/4];
399399}
400400
401DRIVER_INIT_MEMBER(saturn_state,magzun)
401DRIVER_INIT_MEMBER(stv_state,magzun)
402402{
403403   sh2drc_add_pcflush(machine().device("maincpu"), 0x604bf20);
404404   sh2drc_add_pcflush(machine().device("maincpu"), 0x604bfbe);
r21325r21326
406406
407407   DRIVER_INIT_CALL(stv);
408408
409   machine().device("maincpu")->memory().space(AS_PROGRAM).install_readwrite_handler(0x00400000, 0x0040003f, read32_delegate(FUNC(saturn_state::magzun_ioga_r32),this), write32_delegate(FUNC(saturn_state::magzun_ioga_w32),this));
410   machine().device("slave")->memory().space(AS_PROGRAM).install_readwrite_handler(0x00400000, 0x0040003f, read32_delegate(FUNC(saturn_state::magzun_ioga_r32),this), write32_delegate(FUNC(saturn_state::magzun_ioga_w32),this));
409   machine().device("maincpu")->memory().space(AS_PROGRAM).install_readwrite_handler(0x00400000, 0x0040003f, read32_delegate(FUNC(stv_state::magzun_ioga_r32),this), write32_delegate(FUNC(stv_state::magzun_ioga_w32),this));
410   machine().device("slave")->memory().space(AS_PROGRAM).install_readwrite_handler(0x00400000, 0x0040003f, read32_delegate(FUNC(stv_state::magzun_ioga_r32),this), write32_delegate(FUNC(stv_state::magzun_ioga_w32),this));
411411
412   machine().device("maincpu")->memory().space(AS_PROGRAM).install_read_handler(0x608e830, 0x608e833, read32_delegate(FUNC(saturn_state::magzun_hef_hack_r),this));
413   machine().device("maincpu")->memory().space(AS_PROGRAM).install_read_handler(0x60ff3b4, 0x60ff3b7, read32_delegate(FUNC(saturn_state::magzun_rx_hack_r),this));
412   machine().device("maincpu")->memory().space(AS_PROGRAM).install_read_handler(0x608e830, 0x608e833, read32_delegate(FUNC(stv_state::magzun_hef_hack_r),this));
413   machine().device("maincpu")->memory().space(AS_PROGRAM).install_read_handler(0x60ff3b4, 0x60ff3b7, read32_delegate(FUNC(stv_state::magzun_rx_hack_r),this));
414414
415415   /* Program ROM patches, don't understand how to avoid these two checks ... */
416416   {
r21325r21326
423423}
424424
425425
426DRIVER_INIT_MEMBER(saturn_state,stvmp)
426DRIVER_INIT_MEMBER(stv_state,stvmp)
427427{
428428   DRIVER_INIT_CALL(stv);
429   machine().device("maincpu")->memory().space(AS_PROGRAM).install_readwrite_handler(0x00400000, 0x0040003f, read32_delegate(FUNC(saturn_state::stvmp_ioga_r32),this), write32_delegate(FUNC(saturn_state::stvmp_ioga_w32),this));
430   machine().device("slave")->memory().space(AS_PROGRAM).install_readwrite_handler(0x00400000, 0x0040003f, read32_delegate(FUNC(saturn_state::stvmp_ioga_r32),this), write32_delegate(FUNC(saturn_state::stvmp_ioga_w32),this));
429   machine().device("maincpu")->memory().space(AS_PROGRAM).install_readwrite_handler(0x00400000, 0x0040003f, read32_delegate(FUNC(stv_state::stvmp_ioga_r32),this), write32_delegate(FUNC(stv_state::stvmp_ioga_w32),this));
430   machine().device("slave")->memory().space(AS_PROGRAM).install_readwrite_handler(0x00400000, 0x0040003f, read32_delegate(FUNC(stv_state::stvmp_ioga_r32),this), write32_delegate(FUNC(stv_state::stvmp_ioga_w32),this));
431431}
432432
433433
434DRIVER_INIT_MEMBER(saturn_state,shienryu)
434DRIVER_INIT_MEMBER(stv_state,shienryu)
435435{
436436   // master
437437   sh2drc_add_pcflush(machine().device("maincpu"), 0x60041c6);
r21325r21326
441441   DRIVER_INIT_CALL(stv);
442442}
443443
444DRIVER_INIT_MEMBER(saturn_state,prikura)
444DRIVER_INIT_MEMBER(stv_state,prikura)
445445{
446446/*
447447 06018640: MOV.B   @R14,R0  // 60b9228
r21325r21326
462462   m_minit_boost_timeslice = m_sinit_boost_timeslice = attotime::from_usec(50);
463463}
464464
465DRIVER_INIT_MEMBER(saturn_state,hanagumi)
465DRIVER_INIT_MEMBER(stv_state,hanagumi)
466466{
467467/*
468468    06013E1E: NOP
r21325r21326
505505
506506*/
507507
508DRIVER_INIT_MEMBER(saturn_state,puyosun)
508DRIVER_INIT_MEMBER(stv_state,puyosun)
509509{
510510   sh2drc_add_pcflush(machine().device("maincpu"), 0x6021cf0);
511511
r21325r21326
527527
528528*/
529529
530DRIVER_INIT_MEMBER(saturn_state,mausuke)
530DRIVER_INIT_MEMBER(stv_state,mausuke)
531531{
532532   sh2drc_add_pcflush(machine().device("maincpu"), 0x60461A0);
533533
r21325r21326
537537   m_minit_boost_timeslice = m_sinit_boost_timeslice = attotime::from_usec(50);
538538}
539539
540DRIVER_INIT_MEMBER(saturn_state,cottonbm)
540DRIVER_INIT_MEMBER(stv_state,cottonbm)
541541{
542542//  sh2drc_add_pcflush(machine().device("maincpu"), 0x6030ee2);
543543//  sh2drc_add_pcflush(machine().device("slave"), 0x6032b52);
r21325r21326
547547   m_minit_boost_timeslice = m_sinit_boost_timeslice = attotime::from_usec(10);
548548}
549549
550DRIVER_INIT_MEMBER(saturn_state,cotton2)
550DRIVER_INIT_MEMBER(stv_state,cotton2)
551551{
552552   sh2drc_add_pcflush(machine().device("maincpu"), 0x6031c7a);
553553   sh2drc_add_pcflush(machine().device("slave"), 0x60338ea);
r21325r21326
557557   m_minit_boost_timeslice = m_sinit_boost_timeslice = attotime::from_usec(50);
558558}
559559
560DRIVER_INIT_MEMBER(saturn_state,dnmtdeka)
560DRIVER_INIT_MEMBER(stv_state,dnmtdeka)
561561{
562562   // install all 3 speedups on both master and slave
563563   sh2drc_add_pcflush(machine().device("maincpu"), 0x6027c90);
r21325r21326
571571   DRIVER_INIT_CALL(stv);
572572}
573573
574DRIVER_INIT_MEMBER(saturn_state,diehard)
574DRIVER_INIT_MEMBER(stv_state,diehard)
575575{
576576   // install all 3 speedups on both master and slave
577577   sh2drc_add_pcflush(machine().device("maincpu"), 0x6027c98);
r21325r21326
585585   DRIVER_INIT_CALL(stv);
586586}
587587
588DRIVER_INIT_MEMBER(saturn_state,fhboxers)
588DRIVER_INIT_MEMBER(stv_state,fhboxers)
589589{
590590   sh2drc_add_pcflush(machine().device("maincpu"), 0x60041c2);
591591   sh2drc_add_pcflush(machine().device("maincpu"), 0x600bb0a);
r21325r21326
596596//  m_instadma_hack = 1;
597597}
598598
599DRIVER_INIT_MEMBER(saturn_state,groovef)
599DRIVER_INIT_MEMBER(stv_state,groovef)
600600{
601601   sh2drc_add_pcflush(machine().device("maincpu"), 0x6005e7c);
602602   sh2drc_add_pcflush(machine().device("maincpu"), 0x6005e86);
r21325r21326
610610   m_minit_boost_timeslice = m_sinit_boost_timeslice = attotime::from_usec(50);
611611}
612612
613DRIVER_INIT_MEMBER(saturn_state,danchih)
613DRIVER_INIT_MEMBER(stv_state,danchih)
614614{
615615   sh2drc_add_pcflush(machine().device("maincpu"), 0x6028b28);
616616   sh2drc_add_pcflush(machine().device("maincpu"), 0x6028c8e);
r21325r21326
621621   m_minit_boost_timeslice = m_sinit_boost_timeslice = attotime::from_usec(5);
622622}
623623
624DRIVER_INIT_MEMBER(saturn_state,danchiq)
624DRIVER_INIT_MEMBER(stv_state,danchiq)
625625{
626626   sh2drc_add_pcflush(machine().device("maincpu"), 0x6028b28);
627627   sh2drc_add_pcflush(machine().device("maincpu"), 0x6028c8e);
r21325r21326
632632   m_minit_boost_timeslice = m_sinit_boost_timeslice = attotime::from_usec(5);
633633}
634634
635DRIVER_INIT_MEMBER(saturn_state,astrass)
635DRIVER_INIT_MEMBER(stv_state,astrass)
636636{
637637   sh2drc_add_pcflush(machine().device("maincpu"), 0x60011ba);
638638   sh2drc_add_pcflush(machine().device("maincpu"), 0x605b9da);
r21325r21326
642642   DRIVER_INIT_CALL(stv);
643643}
644644
645DRIVER_INIT_MEMBER(saturn_state,thunt)
645DRIVER_INIT_MEMBER(stv_state,thunt)
646646{
647647   sh2drc_add_pcflush(machine().device("maincpu"), 0x602A024);
648648   sh2drc_add_pcflush(machine().device("maincpu"), 0x6013EEA);
r21325r21326
653653   m_minit_boost_timeslice = m_sinit_boost_timeslice = attotime::from_usec(1);
654654}
655655
656DRIVER_INIT_MEMBER(saturn_state,sandor)
656DRIVER_INIT_MEMBER(stv_state,sandor)
657657{
658658   sh2drc_add_pcflush(machine().device("maincpu"), 0x602a0f8);
659659   sh2drc_add_pcflush(machine().device("maincpu"), 0x6013fbe);
r21325r21326
663663   m_minit_boost_timeslice = m_sinit_boost_timeslice = attotime::from_usec(1);
664664}
665665
666DRIVER_INIT_MEMBER(saturn_state,grdforce)
666DRIVER_INIT_MEMBER(stv_state,grdforce)
667667{
668668   sh2drc_add_pcflush(machine().device("maincpu"), 0x6041e32);
669669   sh2drc_add_pcflush(machine().device("slave"), 0x6043aa2);
r21325r21326
673673   m_minit_boost_timeslice = m_sinit_boost_timeslice = attotime::from_usec(50);
674674}
675675
676DRIVER_INIT_MEMBER(saturn_state,batmanfr)
676DRIVER_INIT_MEMBER(stv_state,batmanfr)
677677{
678678   sh2drc_add_pcflush(machine().device("maincpu"), 0x60121c0);
679679   sh2drc_add_pcflush(machine().device("slave"), 0x60125bc);
r21325r21326
684684   m_minit_boost_timeslice = m_sinit_boost_timeslice = attotime::from_usec(50);
685685}
686686
687DRIVER_INIT_MEMBER(saturn_state,colmns97)
687DRIVER_INIT_MEMBER(stv_state,colmns97)
688688{
689689   sh2drc_add_pcflush(machine().device("slave"), 0x60298a2);
690690
r21325r21326
693693   m_minit_boost = m_sinit_boost = 0;
694694}
695695
696DRIVER_INIT_MEMBER(saturn_state,winterht)
696DRIVER_INIT_MEMBER(stv_state,winterht)
697697{
698698   sh2drc_add_pcflush(machine().device("maincpu"), 0x6098aea);
699699   sh2drc_add_pcflush(machine().device("slave"), 0x609ae4e);
r21325r21326
703703   m_minit_boost_timeslice = m_sinit_boost_timeslice = attotime::from_usec(2);
704704}
705705
706DRIVER_INIT_MEMBER(saturn_state,seabass)
706DRIVER_INIT_MEMBER(stv_state,seabass)
707707{
708708   sh2drc_add_pcflush(machine().device("maincpu"), 0x602cbfa);
709709   sh2drc_add_pcflush(machine().device("slave"), 0x60321ee);
r21325r21326
713713   m_minit_boost_timeslice = m_sinit_boost_timeslice = attotime::from_usec(5);
714714}
715715
716DRIVER_INIT_MEMBER(saturn_state,vfremix)
716DRIVER_INIT_MEMBER(stv_state,vfremix)
717717{
718718   sh2drc_add_pcflush(machine().device("maincpu"), 0x602c30c);
719719   sh2drc_add_pcflush(machine().device("slave"), 0x604c332);
r21325r21326
723723   m_minit_boost_timeslice = m_sinit_boost_timeslice = attotime::from_usec(20);
724724}
725725
726DRIVER_INIT_MEMBER(saturn_state,sss)
726DRIVER_INIT_MEMBER(stv_state,sss)
727727{
728728   sh2drc_add_pcflush(machine().device("maincpu"), 0x6026398);
729729   sh2drc_add_pcflush(machine().device("slave"), 0x6028cd6);
r21325r21326
735735   m_minit_boost_timeslice = m_sinit_boost_timeslice = attotime::from_usec(50);
736736}
737737
738DRIVER_INIT_MEMBER(saturn_state,othellos)
738DRIVER_INIT_MEMBER(stv_state,othellos)
739739{
740740   sh2drc_add_pcflush(machine().device("maincpu"), 0x602bcbe);
741741   sh2drc_add_pcflush(machine().device("slave"), 0x602d92e);
r21325r21326
745745   m_minit_boost_timeslice = m_sinit_boost_timeslice = attotime::from_usec(50);
746746}
747747
748DRIVER_INIT_MEMBER(saturn_state,sasissu)
748DRIVER_INIT_MEMBER(stv_state,sasissu)
749749{
750750   sh2drc_add_pcflush(machine().device("slave"), 0x60710be);
751751
r21325r21326
754754   m_minit_boost_timeslice = m_sinit_boost_timeslice = attotime::from_usec(2);
755755}
756756
757DRIVER_INIT_MEMBER(saturn_state,gaxeduel)
757DRIVER_INIT_MEMBER(stv_state,gaxeduel)
758758{
759759//  sh2drc_add_pcflush(machine().device("maincpu"), 0x6012ee4);
760760
761761   DRIVER_INIT_CALL(stv);
762762}
763763
764DRIVER_INIT_MEMBER(saturn_state,suikoenb)
764DRIVER_INIT_MEMBER(stv_state,suikoenb)
765765{
766766   sh2drc_add_pcflush(machine().device("maincpu"), 0x6013f7a);
767767
r21325r21326
769769}
770770
771771
772DRIVER_INIT_MEMBER(saturn_state,sokyugrt)
772DRIVER_INIT_MEMBER(stv_state,sokyugrt)
773773{
774774   DRIVER_INIT_CALL(stv);
775775
776776   m_minit_boost_timeslice = m_sinit_boost_timeslice = attotime::from_usec(50);
777777}
778778
779DRIVER_INIT_MEMBER(saturn_state,znpwfv)
779DRIVER_INIT_MEMBER(stv_state,znpwfv)
780780{
781781   sh2drc_add_pcflush(machine().device("maincpu"), 0x6012ec2);
782782   sh2drc_add_pcflush(machine().device("slave"), 0x60175a6);
r21325r21326
785785   m_minit_boost_timeslice = m_sinit_boost_timeslice = attotime::from_nsec(500);
786786}
787787
788DRIVER_INIT_MEMBER(saturn_state,twcup98)
788DRIVER_INIT_MEMBER(stv_state,twcup98)
789789{
790790   sh2drc_add_pcflush(machine().device("maincpu"), 0x605edde);
791791   sh2drc_add_pcflush(machine().device("slave"), 0x6062bca);
r21325r21326
796796   m_minit_boost_timeslice = m_sinit_boost_timeslice = attotime::from_usec(5);
797797}
798798
799DRIVER_INIT_MEMBER(saturn_state,smleague)
799DRIVER_INIT_MEMBER(stv_state,smleague)
800800{
801801   sh2drc_add_pcflush(machine().device("maincpu"), 0x6063bf4);
802802   sh2drc_add_pcflush(machine().device("slave"), 0x6062bca);
r21325r21326
808808   m_minit_boost_timeslice = m_sinit_boost_timeslice = attotime::from_usec(5000);
809809}
810810
811DRIVER_INIT_MEMBER(saturn_state,finlarch)
811DRIVER_INIT_MEMBER(stv_state,finlarch)
812812{
813813   sh2drc_add_pcflush(machine().device("maincpu"), 0x6064d60);
814814
r21325r21326
819819   m_minit_boost_timeslice = m_sinit_boost_timeslice = attotime::from_usec(5000);
820820}
821821
822DRIVER_INIT_MEMBER(saturn_state,maruchan)
822DRIVER_INIT_MEMBER(stv_state,maruchan)
823823{
824824   sh2drc_add_pcflush(machine().device("maincpu"), 0x601ba46);
825825   sh2drc_add_pcflush(machine().device("slave"), 0x601ba46);
r21325r21326
829829   m_minit_boost_timeslice = m_sinit_boost_timeslice = attotime::from_usec(50);
830830}
831831
832DRIVER_INIT_MEMBER(saturn_state,pblbeach)
832DRIVER_INIT_MEMBER(stv_state,pblbeach)
833833{
834834   sh2drc_add_pcflush(machine().device("maincpu"), 0x605eb78);
835835
836836   DRIVER_INIT_CALL(stv);
837837}
838838
839DRIVER_INIT_MEMBER(saturn_state,shanhigw)
839DRIVER_INIT_MEMBER(stv_state,shanhigw)
840840{
841841   sh2drc_add_pcflush(machine().device("maincpu"), 0x6020c5c);
842842
843843   DRIVER_INIT_CALL(stv);
844844}
845845
846DRIVER_INIT_MEMBER(saturn_state,elandore)
846DRIVER_INIT_MEMBER(stv_state,elandore)
847847{
848848   sh2drc_add_pcflush(machine().device("maincpu"), 0x604eac0);
849849   sh2drc_add_pcflush(machine().device("slave"), 0x605340a);
r21325r21326
854854   m_minit_boost_timeslice = m_sinit_boost_timeslice = attotime::from_usec(0);
855855}
856856
857DRIVER_INIT_MEMBER(saturn_state,rsgun)
857DRIVER_INIT_MEMBER(stv_state,rsgun)
858858{
859859   sh2drc_add_pcflush(machine().device("maincpu"), 0x6034d04);
860860   sh2drc_add_pcflush(machine().device("slave"), 0x6036152);
r21325r21326
866866   m_minit_boost_timeslice = m_sinit_boost_timeslice = attotime::from_usec(20);
867867}
868868
869DRIVER_INIT_MEMBER(saturn_state,ffreveng)
869DRIVER_INIT_MEMBER(stv_state,ffreveng)
870870{
871871   install_ffreveng_protection(machine());
872872   DRIVER_INIT_CALL(stv);
873873}
874874
875DRIVER_INIT_MEMBER(saturn_state,decathlt)
875DRIVER_INIT_MEMBER(stv_state,decathlt)
876876{
877877   install_decathlt_protection(machine());
878878   DRIVER_INIT_CALL(stv);
879879}
880880
881DRIVER_INIT_MEMBER(saturn_state,nameclv3)
881DRIVER_INIT_MEMBER(stv_state,nameclv3)
882882{
883883   sh2drc_add_pcflush(machine().device("maincpu"), 0x601eb4c);
884884   sh2drc_add_pcflush(machine().device("slave"), 0x602b80e);
r21325r21326
897897   DEVCB_DRIVER_LINE_MEMBER(saturn_state, scsp_to_main_irq)
898898};
899899
900static ADDRESS_MAP_START( stv_mem, AS_PROGRAM, 32, saturn_state )
900static ADDRESS_MAP_START( stv_mem, AS_PROGRAM, 32, stv_state )
901901   AM_RANGE(0x00000000, 0x0007ffff) AM_ROM AM_SHARE("share6")  // bios
902902   AM_RANGE(0x00100000, 0x0010007f) AM_READWRITE8_LEGACY(stv_SMPC_r, stv_SMPC_w,0xffffffff)
903903   AM_RANGE(0x00180000, 0x0018ffff) AM_READWRITE8(saturn_backupram_r,saturn_backupram_w,0xffffffff) AM_SHARE("share1")
r21325r21326
924924   AM_RANGE(0xc0000000, 0xc00007ff) AM_RAM // cache RAM
925925ADDRESS_MAP_END
926926
927static ADDRESS_MAP_START( sound_mem, AS_PROGRAM, 16, saturn_state )
927static ADDRESS_MAP_START( sound_mem, AS_PROGRAM, 16, stv_state )
928928   AM_RANGE(0x000000, 0x0fffff) AM_RAM AM_SHARE("sound_ram")
929929   AM_RANGE(0x100000, 0x100fff) AM_DEVREADWRITE_LEGACY("scsp", scsp_r, scsp_w)
930930ADDRESS_MAP_END
r21325r21326
935935   MCFG_CPU_ADD("maincpu", SH2, MASTER_CLOCK_352/2) // 28.6364 MHz
936936   MCFG_CPU_PROGRAM_MAP(stv_mem)
937937   MCFG_CPU_CONFIG(sh2_conf_master)
938   MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", saturn_state, saturn_scanline, "screen", 0, 1)
938   MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", stv_state, saturn_scanline, "screen", 0, 1)
939939
940940   MCFG_CPU_ADD("slave", SH2, MASTER_CLOCK_352/2) // 28.6364 MHz
941941   MCFG_CPU_PROGRAM_MAP(stv_mem)
942942   MCFG_CPU_CONFIG(sh2_conf_slave)
943   MCFG_TIMER_DRIVER_ADD_SCANLINE("slave_scantimer", saturn_state, saturn_slave_scanline, "screen", 0, 1)
943   MCFG_TIMER_DRIVER_ADD_SCANLINE("slave_scantimer", stv_state, saturn_slave_scanline, "screen", 0, 1)
944944
945945   MCFG_CPU_ADD("audiocpu", M68000, 11289600) //11.2896 MHz
946946   MCFG_CPU_PROGRAM_MAP(sound_mem)
947947
948   MCFG_MACHINE_START_OVERRIDE(saturn_state,stv)
949   MCFG_MACHINE_RESET_OVERRIDE(saturn_state,stv)
948   MCFG_MACHINE_START_OVERRIDE(stv_state,stv)
949   MCFG_MACHINE_RESET_OVERRIDE(stv_state,stv)
950950
951951   MCFG_EEPROM_93C46_ADD("eeprom") /* Actually 93c45 */
952952
953   MCFG_TIMER_DRIVER_ADD("sector_timer", saturn_state, stv_sector_cb)
954   MCFG_TIMER_DRIVER_ADD("sh1_cmd", saturn_state, stv_sh1_sim)
953   MCFG_TIMER_DRIVER_ADD("sector_timer", stv_state, stv_sector_cb)
954   MCFG_TIMER_DRIVER_ADD("sh1_cmd", stv_state, stv_sh1_sim)
955955
956956   /* video hardware */
957957   MCFG_VIDEO_ATTRIBUTES(VIDEO_UPDATE_AFTER_VBLANK)
958958   MCFG_SCREEN_ADD("screen", RASTER)
959959   MCFG_SCREEN_RAW_PARAMS(MASTER_CLOCK_320/8, 427, 0, 320, 263, 0, 224)
960   MCFG_SCREEN_UPDATE_DRIVER(saturn_state, screen_update_stv_vdp2)
960   MCFG_SCREEN_UPDATE_DRIVER(stv_state, screen_update_stv_vdp2)
961961   MCFG_PALETTE_LENGTH(2048+(2048*2))//standard palette + extra memory for rgb brightness.
962962
963963   MCFG_GFXDECODE(stv)
964964
965   MCFG_VIDEO_START_OVERRIDE(saturn_state,stv_vdp2)
965   MCFG_VIDEO_START_OVERRIDE(stv_state,stv_vdp2)
966966
967967   MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
968968
r21325r21326
979979#define MCFG_STV_CARTSLOT_ADD(_tag) \
980980   MCFG_CARTSLOT_ADD(_tag) \
981981   MCFG_CARTSLOT_INTERFACE("stv_cart") \
982   MCFG_CARTSLOT_LOAD(saturn_state,stv_cart)
982   MCFG_CARTSLOT_LOAD(stv_state,stv_cart)
983983
984984MACHINE_CONFIG_FRAGMENT( stv_cartslot )
985985   MCFG_STV_CARTSLOT_ADD("cart1")
r21325r21326
10111011   { 0 }
10121012};
10131013
1014DEVICE_IMAGE_LOAD_MEMBER( saturn_state, stv_cart )
1014MACHINE_RESET_MEMBER(stv_state,stv)
10151015{
1016//  saturn_state *state = image.device().machine().driver_data<saturn_state>();
1016   m_scsp_last_line = 0;
1017
1018   // don't let the slave cpu and the 68k go anywhere
1019   machine().device("slave")->execute().set_input_line(INPUT_LINE_RESET, ASSERT_LINE);
1020   machine().device("audiocpu")->execute().set_input_line(INPUT_LINE_RESET, ASSERT_LINE);
1021
1022   m_en_68k = 0;
1023   m_NMI_reset = 0;
1024
1025   m_port_sel = m_mux_data = 0;
1026
1027   machine().device("maincpu")->set_unscaled_clock(MASTER_CLOCK_320/2);
1028   machine().device("slave")->set_unscaled_clock(MASTER_CLOCK_320/2);
1029
1030   stvcd_reset();
1031
1032   m_stv_rtc_timer->adjust(attotime::zero, 0, attotime::from_seconds(1));
1033   m_prev_bankswitch = 0xff;
1034
1035   scu_reset();
1036
1037   m_vdp2.old_crmd = -1;
1038   m_vdp2.old_tvmd = -1;
1039}
1040
1041DEVICE_IMAGE_LOAD_MEMBER( stv_state, stv_cart )
1042{
1043//  stv_state *state = image.device().machine().driver_data<stv_state>();
10171044   const struct stv_cart_region *stv_cart = &stv_cart_table[0], *this_cart;
10181045   //const char    *pcb_name;
10191046
r21325r21326
10621089
10631090
10641091
1092MACHINE_START_MEMBER(stv_state,stv)
1093{
1094   system_time systime;
1095   machine().base_datetime(systime);
1096
1097   m_maincpu = downcast<legacy_cpu_device*>( machine().device<cpu_device>("maincpu") );
1098   m_slave = downcast<legacy_cpu_device*>( machine().device("slave") );
1099   m_audiocpu = downcast<legacy_cpu_device*>( machine().device<cpu_device>("audiocpu") );
1100
1101   scsp_set_ram_base(machine().device("scsp"), m_sound_ram);
1102
1103   // save states
1104   state_save_register_global_pointer(machine(), m_scu_regs, 0x100/4);
1105   state_save_register_global_pointer(machine(), m_scsp_regs,  0x1000/2);
1106   state_save_register_global(machine(), m_NMI_reset);
1107   state_save_register_global(machine(), m_en_68k);
1108//  state_save_register_global(machine(), scanline);
1109   state_save_register_global(machine(), m_smpc.IOSEL1);
1110   state_save_register_global(machine(), m_smpc.IOSEL2);
1111   state_save_register_global(machine(), m_smpc.EXLE1);
1112   state_save_register_global(machine(), m_smpc.EXLE2);
1113   state_save_register_global(machine(), m_smpc.PDR1);
1114   state_save_register_global(machine(), m_smpc.PDR2);
1115   state_save_register_global(machine(), m_port_sel);
1116   state_save_register_global(machine(), m_mux_data);
1117   state_save_register_global(machine(), m_scsp_last_line);
1118
1119   stv_register_protection_savestates(machine()); // machine/stvprot.c
1120
1121   machine().add_notifier(MACHINE_NOTIFY_EXIT, machine_notify_delegate(FUNC(stv_state::stvcd_exit), this));
1122
1123   m_smpc.rtc_data[0] = DectoBCD(systime.local_time.year /100);
1124   m_smpc.rtc_data[1] = DectoBCD(systime.local_time.year %100);
1125   m_smpc.rtc_data[2] = (systime.local_time.weekday << 4) | (systime.local_time.month+1);
1126   m_smpc.rtc_data[3] = DectoBCD(systime.local_time.mday);
1127   m_smpc.rtc_data[4] = DectoBCD(systime.local_time.hour);
1128   m_smpc.rtc_data[5] = DectoBCD(systime.local_time.minute);
1129   m_smpc.rtc_data[6] = DectoBCD(systime.local_time.second);
1130
1131   m_stv_rtc_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(stv_state::stv_rtc_increment),this));
1132
1133   m68k_set_reset_callback(m_audiocpu, &saturn_state::m68k_reset_callback);
1134}
1135
1136
10651137#define STV_PLAYER_INPUTS(_n_, _b1_, _b2_, _b3_,_b4_)                       \
10661138   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_##_b1_ ) PORT_PLAYER(_n_)            \
10671139   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_##_b2_ ) PORT_PLAYER(_n_)            \
r21325r21326
15321604by Sega titles,and this is a Sunsoft game)It's likely to be a left-over...
15331605*/
15341606
1535DRIVER_INIT_MEMBER(saturn_state,sanjeon)
1607DRIVER_INIT_MEMBER(stv_state,sanjeon)
15361608{
15371609   UINT8 *src    = memregion       ( "game0" )->base();
15381610   int x;
r21325r21326
27462818ROM_END
27472819
27482820
2749GAME( 1996, stvbios,   0,       stv_slot, stv, saturn_state,      stv,           ROT0,   "Sega",                         "ST-V Bios", GAME_IS_BIOS_ROOT )
2821GAME( 1996, stvbios,   0,       stv_slot, stv, stv_state,      stv,           ROT0,   "Sega",                         "ST-V Bios", GAME_IS_BIOS_ROOT )
27502822
27512823//GAME YEAR, NAME,     PARENT,  MACH, INP, INIT,      MONITOR
27522824/* Playable */
2753GAME( 1998, astrass,   stvbios, stv,      stv6b, saturn_state,     astrass,     ROT0,   "Sunsoft",                      "Astra SuperStars (J 980514 V1.002)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
2754GAME( 1995, bakubaku,  stvbios, stv,      stv, saturn_state,        stv,        ROT0,   "Sega",                         "Baku Baku Animal (J 950407 V1.000)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS )
2755GAME( 1996, batmanfr,  stvbios, stv,      stv, saturn_state,        batmanfr,   ROT0,   "Acclaim",                      "Batman Forever (JUE 960507 V1.000)", GAME_NO_SOUND | GAME_IMPERFECT_GRAPHICS )
2756GAME( 1996, colmns97,  stvbios, stv,      stv, saturn_state,        colmns97,   ROT0,   "Sega",                         "Columns '97 (JET 961209 V1.000)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS )
2757GAME( 1997, cotton2,   stvbios, stv,      stv, saturn_state,        cotton2,    ROT0,   "Success",                      "Cotton 2 (JUET 970902 V1.000)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS )
2758GAME( 1998, cottonbm,  stvbios, stv,      stv, saturn_state,        cottonbm,   ROT0,   "Success",                      "Cotton Boomerang (JUET 980709 V1.000)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS )
2759GAME( 1995, critcrsh,  stvbios, stv,      critcrsh, saturn_state,   critcrsh,   ROT0,   "Sega",                         "Critter Crusher (EA 951204 V1.000)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS )
2760GAME( 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 )
2761GAME( 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 )
2762GAME( 1996, diehard,   stvbios, stv,      stv, saturn_state,        diehard,    ROT0,   "Sega",                         "Die Hard Arcade (UET 960515 V1.000)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND  )
2763GAME( 1996, dnmtdeka,  diehard, stv,      stv, saturn_state,        dnmtdeka,   ROT0,   "Sega",                         "Dynamite Deka (J 960515 V1.000)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND  )
2764GAME( 1995, ejihon,    stvbios, stv,      stv, saturn_state,        stv,        ROT0,   "Sega",                         "Ejihon Tantei Jimusyo (J 950613 V1.000)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS )
2765GAME( 1995, fhboxers,  stvbios, stv,      stv, saturn_state,        fhboxers,   ROT0,   "Sega",                         "Funky Head Boxers (JUETBKAL 951218 V1.000)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS )
2766GAME( 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 )
2767GAME( 1994, gaxeduel,  stvbios, stv,      stv6b, saturn_state,     gaxeduel,   ROT0,   "Sega",                         "Golden Axe - The Duel (JUETL 950117 V1.000)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS)
2768GAME( 1998, grdforce,  stvbios, stv,      stv, saturn_state,        grdforce,   ROT0,   "Success",                      "Guardian Force (JUET 980318 V0.105)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS )
2769GAME( 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 )
2770GAME( 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 )
2771GAME( 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 )
2772GAME( 1995, kiwames,   stvbios, stv,      stvmp, saturn_state,     stvmp,      ROT0,   "Athena",                       "Pro Mahjong Kiwame S (J 951020 V1.208)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS )
2773GAME( 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 )
2774GAME( 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 )
2775GAME( 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 )
2776GAME( 1998, othellos,  stvbios, stv,      stv, saturn_state,        othellos,   ROT0,   "Success",                      "Othello Shiyouyo (J 980423 V1.002)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS )
2777GAME( 1995, pblbeach,  stvbios, stv,      stv, saturn_state,        pblbeach,   ROT0,   "T&E Soft",                     "Pebble Beach - The Great Shot (JUE 950913 V0.990)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS )
2778GAME( 1996, prikura,   stvbios, stv,      stv, saturn_state,        prikura,    ROT0,   "Atlus",                        "Princess Clara Daisakusen (J 960910 V1.000)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS )
2779GAME( 1996, puyosun,   stvbios, stv,      stv, saturn_state,        puyosun,    ROT0,   "Compile",                      "Puyo Puyo Sun (J 961115 V0.001)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS )
2780GAME( 1998, rsgun,     stvbios, stv,      stv, saturn_state,        rsgun,      ROT0,   "Treasure",                     "Radiant Silvergun (JUET 980523 V1.000)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
2781GAME( 1998, sasissu,   stvbios, stv,      stv, saturn_state,        sasissu,    ROT0,   "Sega",                         "Taisen Tanto-R Sashissu!! (J 980216 V1.000)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS )
2782GAME( 1999, sanjeon,   sasissu, stv,      stv, saturn_state,        sanjeon,    ROT0,   "Sega / Deniam",                "DaeJeon! SanJeon SuJeon (AJTUE 990412 V1.000)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS )
2783GAME( 1997, seabass,   stvbios, stv,      stv, saturn_state,        seabass,    ROT0,   "A wave inc. (Able license)",   "Sea Bass Fishing (JUET 971110 V0.001)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS )
2784GAME( 1995, shanhigw,  stvbios, stv,      stv, saturn_state,        shanhigw,   ROT0,   "Sunsoft / Activision",         "Shanghai - The Great Wall / Shanghai Triple Threat (JUE 950623 V1.005)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS )
2785GAME( 1997, shienryu,  stvbios, stv,      stv, saturn_state,        shienryu,   ROT270, "Warashi",                      "Shienryu (JUET 961226 V1.000)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
2786GAME( 1998, sss,       stvbios, stv,      stv, saturn_state,        sss,        ROT0,   "Capcom / Cave / Victor",       "Steep Slope Sliders (JUET 981110 V1.000)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS )
2787GAME( 1995, sandor,    stvbios, stv,      stv, saturn_state,        sandor,     ROT0,   "Sega",                         "Puzzle & Action: Sando-R (J 951114 V1.000)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS )
2788GAME( 1997, thunt,     sandor,  stv,      stv, saturn_state,        thunt,      ROT0,   "Sega",                         "Puzzle & Action: Treasure Hunt (JUET 970901 V2.00E)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS )
2789GAME( 1997, thuntk,    sandor,  stv,      stv, saturn_state,        sandor,     ROT0,   "Sega / Deniam",                "Puzzle & Action: BoMulEul Chajara (JUET 970125 V2.00K)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS )
2790GAME( 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 )
2791GAME( 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 )
2792GAME( 1996, sokyugrt,  stvbios, stv,      stv, saturn_state,        sokyugrt,   ROT0,   "Raizing / Eighting",           "Soukyugurentai / Terra Diver (JUET 960821 V1.000)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS )
2793GAME( 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 )
2794GAME( 1996, vfkids,    stvbios, stv,      stv, saturn_state,        stv,        ROT0,   "Sega",                         "Virtua Fighter Kids (JUET 960319 V0.000)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS )
2795GAME( 1997, vmahjong,  stvbios, stv,      myfairld, saturn_state,   stvmp,      ROT0,   "Micronet",                     "Virtual Mahjong (J 961214 V1.000)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS )
2796GAME( 1997, winterht,  stvbios, stv,      stv, saturn_state,        winterht,   ROT0,   "Sega",                         "Winter Heat (JUET 971012 V1.000)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS )
2797GAME( 1997, znpwfv,    stvbios, stv,      stv, saturn_state,        znpwfv,     ROT0,   "Sega",                         "Zen Nippon Pro-Wrestling Featuring Virtua (J 971123 V1.000)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS )
2825GAME( 1998, astrass,   stvbios, stv,      stv6b, stv_state,     astrass,     ROT0,   "Sunsoft",                      "Astra SuperStars (J 980514 V1.002)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
2826GAME( 1995, bakubaku,  stvbios, stv,      stv, stv_state,        stv,        ROT0,   "Sega",                         "Baku Baku Animal (J 950407 V1.000)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS )
2827GAME( 1996, batmanfr,  stvbios, stv,      stv, stv_state,        batmanfr,   ROT0,   "Acclaim",                      "Batman Forever (JUE 960507 V1.000)", GAME_NO_SOUND | GAME_IMPERFECT_GRAPHICS )
2828GAME( 1996, colmns97,  stvbios, stv,      stv, stv_state,        colmns97,   ROT0,   "Sega",                         "Columns '97 (JET 961209 V1.000)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS )
2829GAME( 1997, cotton2,   stvbios, stv,      stv, stv_state,        cotton2,    ROT0,   "Success",                      "Cotton 2 (JUET 970902 V1.000)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS )
2830GAME( 1998, cottonbm,  stvbios, stv,      stv, stv_state,        cottonbm,   ROT0,   "Success",                      "Cotton Boomerang (JUET 980709 V1.000)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS )
2831GAME( 1995, critcrsh,  stvbios, stv,      critcrsh, stv_state,   critcrsh,   ROT0,   "Sega",                         "Critter Crusher (EA 951204 V1.000)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS )
2832GAME( 1999, danchih,   stvbios, stv,      stvmp, stv_state,     danchih,    ROT0,   "Altron (Tecmo license)",       "Danchi de Hanafuda (J 990607 V1.400)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS )
2833GAME( 2000, danchiq,   stvbios, stv,      stv, stv_state,        danchiq,    ROT0,   "Altron",                       "Danchi de Quiz Okusan Yontaku Desuyo! (J 001128 V1.200)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS )
2834GAME( 1996, diehard,   stvbios, stv,      stv, stv_state,        diehard,    ROT0,   "Sega",                         "Die Hard Arcade (UET 960515 V1.000)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND  )
2835GAME( 1996, dnmtdeka,  diehard, stv,      stv, stv_state,        dnmtdeka,   ROT0,   "Sega",                         "Dynamite Deka (J 960515 V1.000)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND  )
2836GAME( 1995, ejihon,    stvbios, stv,      stv, stv_state,        stv,        ROT0,   "Sega",                         "Ejihon Tantei Jimusyo (J 950613 V1.000)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS )
2837GAME( 1995, fhboxers,  stvbios, stv,      stv, stv_state,        fhboxers,   ROT0,   "Sega",                         "Funky Head Boxers (JUETBKAL 951218 V1.000)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS )
2838GAME( 1997, findlove,  stvbios, stv,      stv, stv_state,        stv,        ROT0,   "Daiki / FCF",                  "Zenkoku Seifuku Bishoujo Grand Prix Find Love (J 971212 V1.000)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS )
2839GAME( 1994, gaxeduel,  stvbios, stv,      stv6b, stv_state,     gaxeduel,   ROT0,   "Sega",                         "Golden Axe - The Duel (JUETL 950117 V1.000)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS)
2840GAME( 1998, grdforce,  stvbios, stv,      stv, stv_state,        grdforce,   ROT0,   "Success",                      "Guardian Force (JUET 980318 V0.105)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS )
2841GAME( 1998, groovef,   stvbios, stv,      stv6b, stv_state,     groovef,    ROT0,   "Atlus",                        "Groove on Fight - Gouketsuji Ichizoku 3 (J 970416 V1.001)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS )
2842GAME( 1997, hanagumi,  stvbios, stv,      stv, stv_state,        hanagumi,   ROT0,   "Sega",                         "Hanagumi Taisen Columns - Sakura Wars (J 971007 V1.010)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
2843GAME( 1996, introdon,  stvbios, stv,      stv, stv_state,        stv,        ROT0,   "Sunsoft / Success",            "Karaoke Quiz Intro Don Don! (J 960213 V1.000)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS )
2844GAME( 1995, kiwames,   stvbios, stv,      stvmp, stv_state,     stvmp,      ROT0,   "Athena",                       "Pro Mahjong Kiwame S (J 951020 V1.208)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS )
2845GAME( 1997, maruchan,  stvbios, stv,      stv, stv_state,        maruchan,   ROT0,   "Sega / Toyosuisan",            "Maru-Chan de Goo! (J 971216 V1.000)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS )
2846GAME( 1996, mausuke,   stvbios, stv,      stv, stv_state,        mausuke,    ROT0,   "Data East",                    "Mausuke no Ojama the World (J 960314 V1.000)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS )
2847GAME( 1998, myfairld,  stvbios, stv,      myfairld, stv_state,   stvmp,      ROT0,   "Micronet",                     "Virtual Mahjong 2 - My Fair Lady (J 980608 V1.000)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS )
2848GAME( 1998, othellos,  stvbios, stv,      stv, stv_state,        othellos,   ROT0,   "Success",                      "Othello Shiyouyo (J 980423 V1.002)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS )
2849GAME( 1995, pblbeach,  stvbios, stv,      stv, stv_state,        pblbeach,   ROT0,   "T&E Soft",                     "Pebble Beach - The Great Shot (JUE 950913 V0.990)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS )
2850GAME( 1996, prikura,   stvbios, stv,      stv, stv_state,        prikura,    ROT0,   "Atlus",                        "Princess Clara Daisakusen (J 960910 V1.000)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS )
2851GAME( 1996, puyosun,   stvbios, stv,      stv, stv_state,        puyosun,    ROT0,   "Compile",                      "Puyo Puyo Sun (J 961115 V0.001)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS )
2852GAME( 1998, rsgun,     stvbios, stv,      stv, stv_state,        rsgun,      ROT0,   "Treasure",                     "Radiant Silvergun (JUET 980523 V1.000)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
2853GAME( 1998, sasissu,   stvbios, stv,      stv, stv_state,        sasissu,    ROT0,   "Sega",                         "Taisen Tanto-R Sashissu!! (J 980216 V1.000)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS )
2854GAME( 1999, sanjeon,   sasissu, stv,      stv, stv_state,        sanjeon,    ROT0,   "Sega / Deniam",                "DaeJeon! SanJeon SuJeon (AJTUE 990412 V1.000)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS )
2855GAME( 1997, seabass,   stvbios, stv,      stv, stv_state,        seabass,    ROT0,   "A wave inc. (Able license)",   "Sea Bass Fishing (JUET 971110 V0.001)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS )
2856GAME( 1995, shanhigw,  stvbios, stv,      stv, stv_state,        shanhigw,   ROT0,   "Sunsoft / Activision",         "Shanghai - The Great Wall / Shanghai Triple Threat (JUE 950623 V1.005)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS )
2857GAME( 1997, shienryu,  stvbios, stv,      stv, stv_state,        shienryu,   ROT270, "Warashi",                      "Shienryu (JUET 961226 V1.000)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
2858GAME( 1998, sss,       stvbios, stv,      stv, stv_state,        sss,        ROT0,   "Capcom / Cave / Victor",       "Steep Slope Sliders (JUET 981110 V1.000)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS )
2859GAME( 1995, sandor,    stvbios, stv,      stv, stv_state,        sandor,     ROT0,   "Sega",                         "Puzzle & Action: Sando-R (J 951114 V1.000)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS )
2860GAME( 1997, thunt,     sandor,  stv,      stv, stv_state,        thunt,      ROT0,   "Sega",                         "Puzzle & Action: Treasure Hunt (JUET 970901 V2.00E)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS )
2861GAME( 1997, thuntk,    sandor,  stv,      stv, stv_state,        sandor,     ROT0,   "Sega / Deniam",                "Puzzle & Action: BoMulEul Chajara (JUET 970125 V2.00K)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS )
2862GAME( 1995, smleague,  stvbios, stv,      stv, stv_state,        smleague,   ROT0,   "Sega",                         "Super Major League (U 960108 V1.000)", GAME_NOT_WORKING | GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS )
2863GAME( 1995, finlarch,  smleague,stv,      stv, stv_state,        finlarch,   ROT0,   "Sega",                         "Final Arch (J 950714 V1.001)", GAME_NOT_WORKING | GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS )
2864GAME( 1996, sokyugrt,  stvbios, stv,      stv, stv_state,        sokyugrt,   ROT0,   "Raizing / Eighting",           "Soukyugurentai / Terra Diver (JUET 960821 V1.000)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS )
2865GAME( 1995, suikoenb,  stvbios, stv,      stv6b, stv_state,     suikoenb,   ROT0,   "Data East",                    "Suikoenbu / Outlaws of the Lost Dynasty (JUETL 950314 V2.001)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS )
2866GAME( 1996, vfkids,    stvbios, stv,      stv, stv_state,        stv,        ROT0,   "Sega",                         "Virtua Fighter Kids (JUET 960319 V0.000)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS )
2867GAME( 1997, vmahjong,  stvbios, stv,      myfairld, stv_state,   stvmp,      ROT0,   "Micronet",                     "Virtual Mahjong (J 961214 V1.000)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS )
2868GAME( 1997, winterht,  stvbios, stv,      stv, stv_state,        winterht,   ROT0,   "Sega",                         "Winter Heat (JUET 971012 V1.000)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS )
2869GAME( 1997, znpwfv,    stvbios, stv,      stv, stv_state,        znpwfv,     ROT0,   "Sega",                         "Zen Nippon Pro-Wrestling Featuring Virtua (J 971123 V1.000)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS )
27982870
27992871/* Almost */
2800GAME( 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 )
2801GAME( 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 )
2872GAME( 1998, twcup98,   stvbios, stv,      stv, stv_state,        twcup98,    ROT0,   "Tecmo",                        "Tecmo World Cup '98 (JUET 980410 V1.000)", GAME_UNEMULATED_PROTECTION | GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS )
2873GAME( 1998, elandore,  stvbios, stv,      stv6b, stv_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 )
28022874
28032875/* Unemulated printer / camera devices */
2804GAME( 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 )
2805GAME( 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 )
2806GAME( 1997, pclub2,    stvbios, stv,      stv, saturn_state,        stv,        ROT0,   "Atlus",                        "Print Club 2 (U 970921 V1.000)", GAME_NOT_WORKING )
2807GAME( 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 )
2808GAME( 1997, pclb297w,  pclub2,  stv,      stv, saturn_state,       stv,        ROT0,   "Atlus",                        "Print Club 2 '97 Winter Ver (J 971017 V1.100)", GAME_NOT_WORKING )
2809GAME( 1997, pclub298,  pclub2,  stv,      stv, saturn_state,       stv,        ROT0,   "Atlus",                        "Print Club 2 '98 Spring Ver (J 971017 V1.100)", GAME_NOT_WORKING )
2810GAME( 1998, pclb298a,  pclub2,  stv,      stv, saturn_state,       stv,        ROT0,   "Atlus",                        "Print Club 2 '98 Autumn Ver (J 980827 V1.000)", GAME_NOT_WORKING )
2811GAME( 1999, pclubor,   stvbios, stv,      stv, saturn_state,       stv,        ROT0,   "Atlus",                        "Print Club Goukakenran (J 991104 V1.000)", GAME_NOT_WORKING )
2812GAME( 1999, pclubol,   stvbios, stv,      stv, saturn_state,       stv,        ROT0,   "Atlus",                        "Print Club Olive (J 980717 V1.000)", GAME_NOT_WORKING )
2813GAME( 1999, pclub2v3,  pclub2,  stv,      stv, saturn_state,       stv,        ROT0,   "Atlus",                        "Print Club 2 Vol. 3 (U 990310 V1.000)", GAME_NOT_WORKING )
2814GAME( 1999, pclubpok,  stvbios, stv,      stv, saturn_state,       stv,        ROT0,   "Atlus",                        "Print Club Pokemon B (U 991126 V1.000)", GAME_NOT_WORKING )
2815GAME( 1997, pclub2kc,  stvbios, stv,      stv, saturn_state,       stv,        ROT0,   "Atlus",                        "Print Club Kome Kome Club (J 970203 V1.000)", GAME_NOT_WORKING )
2816GAME( 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 )
2876GAME( 1998, stress,    stvbios, stv,      stv, stv_state,        stv,        ROT0,   "Sega",                         "Stress Busters (J 981020 V1.000)", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
2877GAME( 1997, nclubv3,   stvbios, stv,      stv, stv_state,        nameclv3,   ROT0,   "Sega",                         "Name Club Ver.3 (J 970723 V1.000)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS | GAME_NOT_WORKING )
2878GAME( 1997, pclub2,    stvbios, stv,      stv, stv_state,        stv,        ROT0,   "Atlus",                        "Print Club 2 (U 970921 V1.000)", GAME_NOT_WORKING )
2879GAME( 1999, pclub2fc,  pclub2,  stv,      stv, stv_state,       stv,        ROT0,   "Atlus",                        "Print Club 2 Felix The Cat (Rev. A) (J 970415 V1.100)", GAME_NOT_WORKING )
2880GAME( 1997, pclb297w,  pclub2,  stv,      stv, stv_state,       stv,        ROT0,   "Atlus",                        "Print Club 2 '97 Winter Ver (J 971017 V1.100)", GAME_NOT_WORKING )
2881GAME( 1997, pclub298,  pclub2,  stv,      stv, stv_state,       stv,        ROT0,   "Atlus",                        "Print Club 2 '98 Spring Ver (J 971017 V1.100)", GAME_NOT_WORKING )
2882GAME( 1998, pclb298a,  pclub2,  stv,      stv, stv_state,       stv,        ROT0,   "Atlus",                        "Print Club 2 '98 Autumn Ver (J 980827 V1.000)", GAME_NOT_WORKING )
2883GAME( 1999, pclubor,   stvbios, stv,      stv, stv_state,       stv,        ROT0,   "Atlus",                        "Print Club Goukakenran (J 991104 V1.000)", GAME_NOT_WORKING )
2884GAME( 1999, pclubol,   stvbios, stv,      stv, stv_state,       stv,        ROT0,   "Atlus",                        "Print Club Olive (J 980717 V1.000)", GAME_NOT_WORKING )
2885GAME( 1999, pclub2v3,  pclub2,  stv,      stv, stv_state,       stv,        ROT0,   "Atlus",                        "Print Club 2 Vol. 3 (U 990310 V1.000)", GAME_NOT_WORKING )
2886GAME( 1999, pclubpok,  stvbios, stv,      stv, stv_state,       stv,        ROT0,   "Atlus",                        "Print Club Pokemon B (U 991126 V1.000)", GAME_NOT_WORKING )
2887GAME( 1997, pclub2kc,  stvbios, stv,      stv, stv_state,       stv,        ROT0,   "Atlus",                        "Print Club Kome Kome Club (J 970203 V1.000)", GAME_NOT_WORKING )
2888GAME( 1997, pclb2elk,  stvbios, stv,      stv, stv_state,       stv,        ROT0,   "Atlus",                        "Print Club 2 Earth Limited Kobe (Print Club Custom) (J 970808 V1.000)", GAME_NOT_WORKING )
28172889
28182890
28192891/* Doing something.. but not enough yet */
2820GAME( 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 )
2821GAME( 1996, decathlt,  stvbios, stv,      stv, saturn_state,        decathlt,   ROT0,   "Sega",                         "Decathlete (JUET 960709 V1.001)", GAME_NO_SOUND | GAME_NOT_WORKING | GAME_UNEMULATED_PROTECTION )
2822GAME( 1996, decathlto, decathlt,stv,      stv, saturn_state,        decathlt,   ROT0,   "Sega",                         "Decathlete (JUET 960424 V1.000)", GAME_NO_SOUND | GAME_NOT_WORKING | GAME_UNEMULATED_PROTECTION )
2892GAME( 1995, vfremix,   stvbios, stv,      stv, stv_state,        vfremix,    ROT0,   "Sega",                         "Virtua Fighter Remix (JUETBKAL 950428 V1.000)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS | GAME_NOT_WORKING )
2893GAME( 1996, decathlt,  stvbios, stv,      stv, stv_state,        decathlt,   ROT0,   "Sega",                         "Decathlete (JUET 960709 V1.001)", GAME_NO_SOUND | GAME_NOT_WORKING | GAME_UNEMULATED_PROTECTION )
2894GAME( 1996, decathlto, decathlt,stv,      stv, stv_state,        decathlt,   ROT0,   "Sega",                         "Decathlete (JUET 960424 V1.000)", GAME_NO_SOUND | GAME_NOT_WORKING | GAME_UNEMULATED_PROTECTION )
28232895
28242896/* Gives I/O errors */
2825GAME( 1996, magzun,    stvbios, stv,      stv, saturn_state,        magzun,     ROT0,   "Sega",                         "Magical Zunou Power (J 961031 V1.000)", GAME_NOT_WORKING )
2826GAME( 1997, techbowl,  stvbios, stv,      stv, saturn_state,        stv,        ROT0,   "Sega",                         "Technical Bowling (J 971212 V1.000)", GAME_NOT_WORKING )
2827GAME( 1999, micrombc,  stvbios, stv,      stv, saturn_state,        stv,        ROT0,   "Sega",                         "Microman Battle Charge (J 990326 V1.000)", GAME_NOT_WORKING )
2897GAME( 1996, magzun,    stvbios, stv,      stv, stv_state,        magzun,     ROT0,   "Sega",                         "Magical Zunou Power (J 961031 V1.000)", GAME_NOT_WORKING )
2898GAME( 1997, techbowl,  stvbios, stv,      stv, stv_state,        stv,        ROT0,   "Sega",                         "Technical Bowling (J 971212 V1.000)", GAME_NOT_WORKING )
2899GAME( 1999, micrombc,  stvbios, stv,      stv, stv_state,        stv,        ROT0,   "Sega",                         "Microman Battle Charge (J 990326 V1.000)", GAME_NOT_WORKING )
28282900
28292901/* Black screen */
2830GAME( 1999, ffreveng,  stvbios, stv,      stv, saturn_state,        ffreveng,   ROT0,   "Capcom",                       "Final Fight Revenge (JUET 990714 V1.000)", GAME_UNEMULATED_PROTECTION | GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS | GAME_NOT_WORKING )
2902GAME( 1999, ffreveng,  stvbios, stv,      stv, stv_state,        ffreveng,   ROT0,   "Capcom",                       "Final Fight Revenge (JUET 990714 V1.000)", GAME_UNEMULATED_PROTECTION | GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS | GAME_NOT_WORKING )
28312903
28322904/* CD games */
2833GAME( 1995, sfish2,    0,       stv,      stv, saturn_state,        stv,        ROT0,   "Sega",                         "Sport Fishing 2 (UET 951106 V1.10e)", GAME_NO_SOUND | GAME_NOT_WORKING )
2834GAME( 1995, sfish2j,   sfish2,  stv,      stv, saturn_state,        stv,        ROT0,   "Sega",                         "Sport Fishing 2 (J 951201 V1.100)", GAME_NO_SOUND | GAME_NOT_WORKING )
2905GAME( 1995, sfish2,    0,       stv,      stv, stv_state,        stv,        ROT0,   "Sega",                         "Sport Fishing 2 (UET 951106 V1.10e)", GAME_NO_SOUND | GAME_NOT_WORKING )
2906GAME( 1995, sfish2j,   sfish2,  stv,      stv, stv_state,        stv,        ROT0,   "Sega",                         "Sport Fishing 2 (J 951201 V1.100)", GAME_NO_SOUND | GAME_NOT_WORKING )
28352907
28362908/*
28372909This is the known list of undumped ST-V games:
trunk/src/mame/drivers/saturn.c
r21325r21326
6464#include "machine/scudsp.h"
6565#include "sound/scsp.h"
6666#include "sound/cdda.h"
67#include "machine/stvprot.h"
6867#include "machine/smpc.h"
6968#include "includes/stv.h"
7069#include "imagedev/chd_cd.h"
r21325r21326
7877#define LOG_IRQ  0
7978#define LOG_IOGA 0
8079
81static int DectoBCD(int num)
80int saturn_state::DectoBCD(int num)
8281{
8382   int i, cnt = 0, tmp, res = 0;
8483
r21325r21326
13911390/* Official documentation says that the "RESET/TAS opcodes aren't supported", but Out Run definitely contradicts with it.
13921391   Since that m68k can't reset itself via the RESET opcode I suppose that the SMPC actually do it by reading an i/o
13931392   connected to this opcode. */
1394static void m68k_reset_callback(device_t *device)
1393void saturn_state::m68k_reset_callback(device_t *device)
13951394{
13961395   saturn_state *state = device->machine().driver_data<saturn_state>();
13971396   device->machine().scheduler().timer_set(attotime::from_usec(100), timer_expired_delegate(FUNC(saturn_state::smpc_audio_reset_line_pulse), state));
r21325r21326
13991398   printf("m68k RESET opcode triggered\n");
14001399}
14011400
1402MACHINE_START_MEMBER(saturn_state,stv)
1403{
1404   system_time systime;
1405   machine().base_datetime(systime);
1406
1407   m_maincpu = downcast<legacy_cpu_device*>( machine().device<cpu_device>("maincpu") );
1408   m_slave = downcast<legacy_cpu_device*>( machine().device("slave") );
1409   m_audiocpu = downcast<legacy_cpu_device*>( machine().device<cpu_device>("audiocpu") );
1410
1411   scsp_set_ram_base(machine().device("scsp"), m_sound_ram);
1412
1413   // save states
1414   state_save_register_global_pointer(machine(), m_scu_regs, 0x100/4);
1415   state_save_register_global_pointer(machine(), m_scsp_regs,  0x1000/2);
1416   state_save_register_global(machine(), m_NMI_reset);
1417   state_save_register_global(machine(), m_en_68k);
1418//  state_save_register_global(machine(), scanline);
1419   state_save_register_global(machine(), m_smpc.IOSEL1);
1420   state_save_register_global(machine(), m_smpc.IOSEL2);
1421   state_save_register_global(machine(), m_smpc.EXLE1);
1422   state_save_register_global(machine(), m_smpc.EXLE2);
1423   state_save_register_global(machine(), m_smpc.PDR1);
1424   state_save_register_global(machine(), m_smpc.PDR2);
1425   state_save_register_global(machine(), m_port_sel);
1426   state_save_register_global(machine(), m_mux_data);
1427   state_save_register_global(machine(), m_scsp_last_line);
1428
1429   stv_register_protection_savestates(machine()); // machine/stvprot.c
1430
1431   machine().add_notifier(MACHINE_NOTIFY_EXIT, machine_notify_delegate(FUNC(saturn_state::stvcd_exit), this));
1432
1433   m_smpc.rtc_data[0] = DectoBCD(systime.local_time.year /100);
1434   m_smpc.rtc_data[1] = DectoBCD(systime.local_time.year %100);
1435   m_smpc.rtc_data[2] = (systime.local_time.weekday << 4) | (systime.local_time.month+1);
1436   m_smpc.rtc_data[3] = DectoBCD(systime.local_time.mday);
1437   m_smpc.rtc_data[4] = DectoBCD(systime.local_time.hour);
1438   m_smpc.rtc_data[5] = DectoBCD(systime.local_time.minute);
1439   m_smpc.rtc_data[6] = DectoBCD(systime.local_time.second);
1440
1441   m_stv_rtc_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(saturn_state::stv_rtc_increment),this));
1442
1443   m68k_set_reset_callback(m_audiocpu, m68k_reset_callback);
1444}
1445
1446
14471401MACHINE_START_MEMBER(saturn_state,saturn)
14481402{
14491403   system_time systime;
r21325r21326
14871441
14881442   m_stv_rtc_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(saturn_state::stv_rtc_increment),this));
14891443
1490   m68k_set_reset_callback(m_audiocpu, m68k_reset_callback);
1444   m68k_set_reset_callback(m_audiocpu, &saturn_state::m68k_reset_callback);
14911445}
14921446
14931447
r21325r21326
17521706}
17531707
17541708
1755MACHINE_RESET_MEMBER(saturn_state,stv)
1756{
1757   m_scsp_last_line = 0;
1758
1759   // don't let the slave cpu and the 68k go anywhere
1760   machine().device("slave")->execute().set_input_line(INPUT_LINE_RESET, ASSERT_LINE);
1761   machine().device("audiocpu")->execute().set_input_line(INPUT_LINE_RESET, ASSERT_LINE);
1762
1763   m_en_68k = 0;
1764   m_NMI_reset = 0;
1765
1766   m_port_sel = m_mux_data = 0;
1767
1768   machine().device("maincpu")->set_unscaled_clock(MASTER_CLOCK_320/2);
1769   machine().device("slave")->set_unscaled_clock(MASTER_CLOCK_320/2);
1770
1771   stvcd_reset();
1772
1773   m_stv_rtc_timer->adjust(attotime::zero, 0, attotime::from_seconds(1));
1774   m_prev_bankswitch = 0xff;
1775
1776   scu_reset();
1777
1778   m_vdp2.old_crmd = -1;
1779   m_vdp2.old_tvmd = -1;
1780}
1781
17821709struct cdrom_interface saturn_cdrom =
17831710{
17841711   "sat_cdrom",
trunk/src/mess/mess.mak
r21325r21326
16461646   $(MAME_DRIVERS)/saturn.o    \
16471647   $(MESS_MACHINE)/sms.o       \
16481648   $(MESS_DRIVERS)/sms.o       \
1649   $(MAME_MACHINE)/stvprot.o   \
16501649   $(MESS_DRIVERS)/svmu.o      \
16511650
16521651$(MESSOBJ)/sgi.a:               \

Previous 199869 Revisions Next


© 1997-2024 The MAME Team