Previous 199869 Revisions Next

r20470 Friday 25th January, 2013 at 19:34:47 UTC by Angelo Salese
Attempt #1 to improve PERIodic flag
[src/mame/machine]stvcd.c

trunk/src/mame/machine/stvcd.c
r20469r20470
225225
226226static void cr_standard_return(UINT16 cur_status)
227227{
228   cd_stat |= CD_STAT_PERI;
228229   cr1 = cur_status | (playtype << 7) | 0x00 | (cdda_repeat_count & 0xf); //options << 4 | repeat & 0xf
229230   cr2 = (cur_track == 0xff) ? 0xffff : (cdrom_get_adr_control(cdrom, cur_track)<<8 | cur_track); // TODO: fix current track
230231   cr3 = (get_track_index()<<8) | (cd_curfad>>16); //index & 0xff00
r20469r20470
281282         switch (cr1 & 0xff)
282283         {
283284            case 0: // get total session info / disc end
284               cr3 = 0x0100 | tocbuf[(101*4)+1];
285               cr4 = tocbuf[(101*4)+2]<<8 | tocbuf[(101*4)+3];
286285               cd_stat = CD_STAT_PAUSE;
287286               cr1 = cd_stat;
288287               cr2 = 0;
288               cr3 = 0x0100 | tocbuf[(101*4)+1];
289               cr4 = tocbuf[(101*4)+2]<<8 | tocbuf[(101*4)+3];
289290               break;
290291
291292            case 1: // get total session info / disc start
292               cr3 = 0x0100;   // sessions in high byte, session start in lower
293               cr4 = 0;
294293               cd_stat = CD_STAT_PAUSE;
295294               cr1 = cd_stat;
296295               cr2 = 0;
296               cr3 = 0x0100;   // sessions in high byte, session start in lower
297               cr4 = 0;
297298               break;
298299
299300            default:
r20469r20470
9991000
10001001      case 0x6000:    // set sector length
10011002         CDROM_LOG(("%s:CD: Set sector length\n",   machine.describe_context()))
1002         hirqreg |= (CMOK|ESEL);
10031003
10041004         switch (cr1 & 0xff)
10051005         {
r20469r20470
10321032               sectlenout = 2352;
10331033               break;
10341034         }
1035         hirqreg |= (CMOK|ESEL);
1036         cr_standard_return(cd_stat);
10351037         break;
10361038
10371039      case 0x6100:    // get sector data
r20469r20470
13541356         CDROM_LOG(("%s:CD: Verify copy protection\n",   machine.describe_context()))
13551357         if(((cd_stat & 0x0f00) != CD_STAT_NODISC) && ((cd_stat & 0x0f00) != CD_STAT_OPEN))
13561358            cd_stat = CD_STAT_PAUSE;
1357         cr1 = cd_stat;  // necessary to pass
1358         cr2 = 0x4;
1359//         cr1 = cd_stat;  // necessary to pass
1360//         cr2 = 0x4;
13591361//          hirqreg |= (CMOK|EFLS|CSCT);
13601362         sectorstore = 1;
13611363         hirqreg = 0xfc5;
1364         cr_standard_return(cd_stat);
13621365         break;
13631366
13641367      case 0xe100:    // get disc region
r20469r20470
13671370            cd_stat = CD_STAT_PAUSE;
13681371         cr1 = cd_stat;  // necessary to pass
13691372         cr2 = 0x4;      // (must return this value to pass bios checks)
1373         cr3 = 0;
1374         cr4 = 0;
13701375         hirqreg |= (CMOK);
1376//         cr_standard_return(cd_stat);
13711377         break;
13721378
13731379      default:
r20469r20470
13871393      return;
13881394   }
13891395
1390   cd_stat |= CD_STAT_PERI;
1396   if(cd_stat & CD_STAT_PERI)
1397   {
1398      /* TODO: doesn't boot if a disk isn't in? */
1399      //if(((cd_stat & 0x0f00) != CD_STAT_NODISC) && ((cd_stat & 0x0f00) != CD_STAT_OPEN))
1400         hirqreg |= SCDQ;
13911401
1392   /* TODO: doesn't boot if a disk isn't in? */
1393   //if(((cd_stat & 0x0f00) != CD_STAT_NODISC) && ((cd_stat & 0x0f00) != CD_STAT_OPEN))
1394      hirqreg |= SCDQ;
1395
1396   cr_standard_return(cd_stat);
1402      cr_standard_return(cd_stat);
1403   }
13971404}
13981405
13991406TIMER_DEVICE_CALLBACK( stv_sector_cb )
r20469r20470
14221429   cr3 = ('L'<<8) | 'O';
14231430   cr4 = ('C'<<8) | 'K';
14241431   cd_stat = CD_STAT_PAUSE;
1432   cd_stat |= CD_STAT_PERI;
14251433   cur_track = 0xff;
14261434
14271435   if (curdir != (direntryT *)NULL)
r20469r20470
16371645//          CDROM_LOG(("RW CR4: %04x\n", cr4))
16381646         //popmessage("%04x %04x %04x %04x",cr1,cr2,cr3,cr4);
16391647         cmd_pending = 0;
1648         cd_stat |= CD_STAT_PERI;
16401649         return cr4;
16411650
16421651      case 0x8000:

Previous 199869 Revisions Next


© 1997-2024 The MAME Team