Diff for /np2/cbus/atapicmd.c between versions 1.9 and 1.10

version 1.9, 2005/04/06 16:46:07 version 1.10, 2005/04/06 17:44:09
Line 539  static void storemsf(UINT8 *ptr, UINT32  Line 539  static void storemsf(UINT8 *ptr, UINT32 
 }  }
   
   
 // 0x43: READ SUB CHANNEL  // 0x42: READ SUB CHANNEL
 static void atapi_cmd_readsubch(IDEDRV drv) {  static void atapi_cmd_readsubch(IDEDRV drv) {
   
         SXSIDEV sxsi;          SXSIDEV sxsi;
           UINT    subq;
           UINT    cmd;
         UINT    leng;          UINT    leng;
         CDTRK   trk;          CDTRK   trk;
         UINT    tracks;          UINT    tracks;
Line 557  static void atapi_cmd_readsubch(IDEDRV d Line 559  static void atapi_cmd_readsubch(IDEDRV d
         }          }
         trk = sxsicd_gettrk(sxsi, &tracks);          trk = sxsicd_gettrk(sxsi, &tracks);
         leng = (drv->buf[7] << 8) + drv->buf[8];          leng = (drv->buf[7] << 8) + drv->buf[8];
         switch(drv->buf[3]) {          subq = drv->buf[2] & 0x40;
           cmd = drv->buf[3];
   
           drv->buf[0] = 0;
           drv->buf[1] = (UINT8)drv->daflag;
           drv->buf[2] = 0;
           drv->buf[3] = 0;
           if (!subq) {
                   senddata(drv, 4, leng);
                   return;
           }
           switch(cmd) {
                 case 0x01:                      // CD-ROM current pos                  case 0x01:                      // CD-ROM current pos
                         ZeroMemory(drv->buf, 16);                          ZeroMemory(drv->buf + 4, 12);
                           drv->buf[3] = 0x12;
                         drv->buf[4] = 0x01;                          drv->buf[4] = 0x01;
                         pos = drv->dacurpos;                          if (drv->daflag != 0x15) {
                         if (drv->daflag & 2) {                                  pos = drv->dacurpos;
                                 pos += (rand() & 7);                                  if ((drv->daflag == 0x12) || (drv->daflag == 0x13)) {
                         }                                          pos += (rand() & 7);
                         r = tracks;                                  }
                         while(r) {                                  r = tracks;
                                 r--;                                  while(r) {
                                 if (trk[r].pos <= pos) {                                          r--;
                                         break;                                          if (trk[r].pos <= pos) {
                                                   break;
                                           }
                                 }                                  }
                                   drv->buf[5] = trk[r].type;
                                   drv->buf[6] = trk[r].track;
                                   drv->buf[7] = 1;
                                   storemsf(drv->buf + 8, pos + 150);
                                   storemsf(drv->buf + 12, pos - trk[r].pos);
                         }                          }
                         drv->buf[5] = trk[r].type;  
                         drv->buf[6] = trk[r].track;  
                         drv->buf[7] = 1;  
                         storemsf(drv->buf + 8, pos + 150);  
                         storemsf(drv->buf + 12, pos - trk[r].pos);  
                         senddata(drv, 16, leng);                          senddata(drv, 16, leng);
                         break;                          break;
   
Line 667  static void atapi_cmd_playaudiomsf(IDEDR Line 683  static void atapi_cmd_playaudiomsf(IDEDR
                 pos = 0;                  pos = 0;
         }          }
         ideio.daplaying |= 1 << (drv->sxsidrv & 3);          ideio.daplaying |= 1 << (drv->sxsidrv & 3);
         drv->daflag = 1;          drv->daflag = 0x11;
         drv->dacurpos = pos;          drv->dacurpos = pos;
         drv->dalength = leng;          drv->dalength = leng;
         drv->dabufrem = 0;          drv->dabufrem = 0;
Line 677  static void atapi_cmd_playaudiomsf(IDEDR Line 693  static void atapi_cmd_playaudiomsf(IDEDR
 // 0x4B: PAUSE RESUME  // 0x4B: PAUSE RESUME
 static void atapi_cmd_pauseresume(IDEDRV drv) {  static void atapi_cmd_pauseresume(IDEDRV drv) {
   
           if (drv->buf[8] & 1) {
                   // resume
                   if (drv->daflag == 0x12) {
                           ideio.daplaying |= 1 << (drv->sxsidrv & 3);
                           drv->daflag = 0x11;
                   }
           }
           else {
                   // pause
                   if (drv->daflag == 0x11) {
                           ideio.daplaying &= ~(1 << (drv->sxsidrv & 3));
                           drv->daflag = 0x12;
                   }
           }
         cmddone(drv);          cmddone(drv);
 }  }
   

Removed from v.1.9  
changed lines
  Added in v.1.10


RetroPC.NET-CVS <cvs@retropc.net>