Previous 199869 Revisions Next

r21011 Wednesday 13th February, 2013 at 02:19:31 UTC by Angelo Salese
Attempt to add proper H/V latch settings
[src/emu/video]stvvdp2.c
[src/mame/drivers]saturn.c
[src/mame/includes]stv.h

trunk/src/mame/drivers/saturn.c
r21010r21011
15321532
15331533   //popmessage("%08x %d T0 %d T1 %d %08x",m_scu.ism ^ 0xffffffff,max_y,m_scu_regs[36],m_scu_regs[37],m_scu_regs[38]);
15341534
1535   if(scanline == (0)*y_step)
1535   if(scanline == (vblank_line)*y_step)
15361536   {
15371537      video_update_vdp1();
15381538
trunk/src/mame/includes/stv.h
r21010r21011
374374
375375   UINT8 get_vblank( void );
376376   UINT8 get_hblank( void );
377   int get_hcounter( void );
378   int get_vcounter( void );
377379   int get_vblank_duration( void );
378380   int get_hblank_duration( void );
379381   int get_pixel_clock( void );
trunk/src/emu/video/stvvdp2.c
r21010r21011
59625962         /* latch h/v signals through HV latch*/
59635963         if(!STV_VDP2_EXLTEN)
59645964         {
5965            /* TODO: handle various h/v settings. */
59665965            if(!space.debugger_access())
59675966            {
5968               m_vdp2.h_count = space.machine().primary_screen->hpos() & 0x3ff;
5969               m_vdp2.v_count = space.machine().primary_screen->vpos() & (STV_VDP2_LSMD == 3 ? 0x7ff : 0x3ff);
5967               m_vdp2.h_count = get_hcounter();
5968               m_vdp2.v_count = get_vcounter();
59705969               /* latch flag */
59715970               m_vdp2.exltfg |= 1;
59725971            }
r21010r21011
62536252   return machine().primary_screen->frame_number() & 1;
62546253}
62556254
6255/* TODO: these needs to be checked via HW tests! */
6256int saturn_state::get_hcounter( void )
6257{
6258   int hcount;
6259
6260   hcount = machine().primary_screen->hpos();
6261
6262   switch(STV_VDP2_HRES & 6)
6263   {
6264      /* Normal */
6265      case 0:
6266         hcount &= 0x1ff;
6267         hcount <<= 1;
6268         break;
6269      /* Hi-Res */
6270      case 2:
6271         hcount &= 0x3ff;
6272         break;
6273      /* Exclusive Normal*/
6274      case 4:
6275         hcount &= 0x1ff;
6276         break;
6277      /* Exclusive Hi-Res */
6278      case 6:
6279         hcount >>= 1;
6280         hcount &= 0x1ff;
6281         break;
6282   }
6283
6284   return hcount;
6285}
6286
6287int saturn_state::get_vcounter( void )
6288{
6289   int vcount;
6290
6291   vcount = machine().primary_screen->vpos();
6292
6293   /* Exclusive Monitor */
6294   if(STV_VDP2_HRES & 4)
6295      return vcount & 0x3ff;
6296
6297   /* Double Density Interlace */
6298   if((STV_VDP2_LSMD & 3) == 3)
6299      return (vcount & ~1) | (machine().primary_screen->frame_number() & 1);
6300
6301   return (vcount << 1); // Non-interlace
6302}
6303
62566304void saturn_state::stv_vdp2_state_save_postload( void )
62576305{
62586306   UINT8 *gfxdata = m_vdp2.gfx_decode;

Previous 199869 Revisions Next


© 1997-2024 The MAME Team