Diff for /np2/cbus/atapicmd.c between versions 1.6 and 1.7

version 1.6, 2005/04/04 11:50:59 version 1.7, 2005/04/05 13:48:09
Line 17 Line 17
 #include        "atapicmd.h"  #include        "atapicmd.h"
 #include        "sxsi.h"  #include        "sxsi.h"
   
 // #define      YUIDEBUG  #define YUIDEBUG
   
   
 // INQUIRY  // INQUIRY
Line 115  static void atapi_cmd_read_capacity(IDED Line 115  static void atapi_cmd_read_capacity(IDED
 static void atapi_cmd_read(IDEDRV drv, UINT32 lba, UINT32 leng);  static void atapi_cmd_read(IDEDRV drv, UINT32 lba, UINT32 leng);
 static void atapi_cmd_mode_select(IDEDRV drv);  static void atapi_cmd_mode_select(IDEDRV drv);
 static void atapi_cmd_mode_sense(IDEDRV drv);  static void atapi_cmd_mode_sense(IDEDRV drv);
   static void atapi_cmd_readsubch(IDEDRV drv);
 static void atapi_cmd_readtoc(IDEDRV drv);  static void atapi_cmd_readtoc(IDEDRV drv);
   
 void atapicmd_a0(IDEDRV drv) {  void atapicmd_a0(IDEDRV drv) {
Line 194  void atapicmd_a0(IDEDRV drv) { Line 195  void atapicmd_a0(IDEDRV drv) {
                 atapi_cmd_mode_sense(drv);                  atapi_cmd_mode_sense(drv);
                 break;                  break;
   
           case 0x42:
                   TRACEOUT(("atapicmd: read sub channel"));
                   atapi_cmd_readsubch(drv);
                   break;
   
         case 0x43:              // read TOC          case 0x43:              // read TOC
                 TRACEOUT(("atapicmd: read TOC"));                  TRACEOUT(("atapicmd: read TOC"));
                 atapi_cmd_readtoc(drv);                  atapi_cmd_readtoc(drv);
Line 502  length_exceeded: Line 508  length_exceeded:
         senddata(drv, cnt, leng);          senddata(drv, cnt, leng);
 }  }
   
   
   static void atapi_cmd_readsubch(IDEDRV drv) {
   
           SXSIDEV sxsi;
           UINT    leng;
   
           sxsi = sxsi_getptr(drv->sxsidrv);
           if ((sxsi == NULL) || (sxsi->devtype != SXSIDEV_CDROM) ||
                   (!(sxsi->flag & SXSIFLAG_READY))) {
                   senderror(drv);
                   return;
           }
           leng = (drv->buf[7] << 8) + drv->buf[8];
           switch(drv->buf[3]) {
                   case 0x01:                      // CD-ROM current pos
                           ZeroMemory(drv->buf, 16);
                           drv->buf[4] = 0x01;
                           senddata(drv, 16, leng);
                           break;
   
                   default:
                           senderror(drv);
                           break;
           }
   }
   
 static void atapi_cmd_readtoc(IDEDRV drv) {  static void atapi_cmd_readtoc(IDEDRV drv) {
   
           SXSIDEV sxsi;
         UINT    leng;          UINT    leng;
         UINT    format;          UINT    format;
           UINT    datasize;
   
           sxsi = sxsi_getptr(drv->sxsidrv);
           if ((sxsi == NULL) || (sxsi->devtype != SXSIDEV_CDROM) ||
                   (!(sxsi->flag & SXSIFLAG_READY))) {
                   senderror(drv);
                   return;
           }
   
         leng = (drv->buf[7] << 8) + drv->buf[8];          leng = (drv->buf[7] << 8) + drv->buf[8];
         format = (drv->buf[9] >> 6);          format = (drv->buf[9] >> 6);
         TRACEOUT(("atapi_cmd_readtoc fmt=%d leng=%d", format, leng));          TRACEOUT(("atapi_cmd_readtoc fmt=%d leng=%d", format, leng));
   
         switch (format) {          switch (format) {
 #ifdef YUIDEBUG  
         case 0: // track info          case 0: // track info
                 // これ、PN専用。                  datasize = sxsicd_gettocinfo(sxsi, drv->buf + 2);
                 // 後で ccd等からデータを作ろう                  drv->buf[0] = (UINT8)(datasize >> 8);
                 drv->buf[0x00] = 0x00;  drv->buf[0x01] = 0x3a;                  drv->buf[1] = (UINT8)(datasize >> 0);
                 drv->buf[0x02] = 0x01;                  senddata(drv, datasize + 2, leng);
                 drv->buf[0x03] = 0x06;  
   
                 drv->buf[0x04] = 0x00;  drv->buf[0x05] = 0x14;  
                 drv->buf[0x06] = 0x01;  
                 drv->buf[0x07] = 0x00;  
                 drv->buf[0x08] = 0x00;  
                 drv->buf[0x09] = 0x00;  
                 drv->buf[0x0a] = 0x02;  
                 drv->buf[0x0b] = 0x00;  
   
                 drv->buf[0x0c] = 0x00;  drv->buf[0x0d] = 0x10;  
                 drv->buf[0x0e] = 0x02;  
                 drv->buf[0x0f] = 0x00;  
                 drv->buf[0x10] = 0x00;  
                 drv->buf[0x11] = 0x29;  
                 drv->buf[0x12] = 0x1c;  
                 drv->buf[0x13] = 0x34;  
   
                 drv->buf[0x14] = 0x00;  drv->buf[0x15] = 0x10;  
                 drv->buf[0x16] = 0x03;  
                 drv->buf[0x17] = 0x00;  
                 drv->buf[0x18] = 0x00;  
                 drv->buf[0x19] = 0x29;  
                 drv->buf[0x1a] = 0x20;  
                 drv->buf[0x1b] = 0x43;  
   
                 drv->buf[0x1c] = 0x00;  drv->buf[0x1d] = 0x10;  
                 drv->buf[0x1e] = 0x04;  
                 drv->buf[0x1f] = 0x00;  
                 drv->buf[0x20] = 0x00;  
                 drv->buf[0x21] = 0x2b;  
                 drv->buf[0x22] = 0x07;  
                 drv->buf[0x23] = 0x19;  
   
                 drv->buf[0x24] = 0x00;  drv->buf[0x25] = 0x10;  
                 drv->buf[0x26] = 0x05;  
                 drv->buf[0x27] = 0x00;  
                 drv->buf[0x28] = 0x00;  
                 drv->buf[0x29] = 0x2e;  
                 drv->buf[0x2a] = 0x39;  
                 drv->buf[0x2b] = 0x1d;  
   
                 drv->buf[0x2c] = 0x00;  drv->buf[0x2d] = 0x10;  
                 drv->buf[0x2e] = 0x06;  
                 drv->buf[0x2f] = 0x00;  
                 drv->buf[0x30] = 0x00;  
                 drv->buf[0x31] = 0x34;  
                 drv->buf[0x32] = 0x0b;  
                 drv->buf[0x33] = 0x13;  
   
                 drv->buf[0x34] = 0x00;  drv->buf[0x35] = 0x10;  
                 drv->buf[0x36] = 0xaa;  
                 drv->buf[0x37] = 0x00;  
                 drv->buf[0x38] = 0x00;  
                 drv->buf[0x39] = 0x3b;  
                 drv->buf[0x3a] = 0x1e;  
                 drv->buf[0x3b] = 0x0b;  
                 senddata(drv, 0x3c, leng);  
                 break;                  break;
 #endif  
   
         case 1: // multi session          case 1: // multi session
                 ZeroMemory(drv->buf, 12);                  ZeroMemory(drv->buf, 12);

Removed from v.1.6  
changed lines
  Added in v.1.7


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