Diff for /np2/cbus/scsicmd.c between versions 1.1 and 1.7

version 1.1, 2004/01/22 01:10:03 version 1.7, 2005/03/05 06:02:28
Line 21  extern void iptrace_out(void); Line 21  extern void iptrace_out(void);
 #endif  #endif
   
   
 static const BYTE hdd_inquiry[0x20] = {  static const UINT8 hdd_inquiry[0x20] = {
                         0x00,0x00,0x02,0x02,0x1c,0x00,0x00,0x18,                          0x00,0x00,0x02,0x02,0x1c,0x00,0x00,0x18,
                         'N', 'E', 'C', 0x20,0x20,0x20,0x20,0x20,                          'N', 'E', 'C', 0x20,0x20,0x20,0x20,0x20,
                         'N', 'P', '2', '-', 'H', 'D', 'D', 0x20,                          'N', 'P', '2', '-', 'H', 'D', 'D', 0x20,
                         0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20};                          0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20};
   
   
 static UINT scsicmd_datain(SXSIDEV sxsi, BYTE *cdb) {  static UINT scsicmd_datain(SXSIDEV sxsi, UINT8 *cdb) {
   
         UINT    length;          UINT    length;
   
Line 47  static UINT scsicmd_datain(SXSIDEV sxsi, Line 47  static UINT scsicmd_datain(SXSIDEV sxsi,
                 default:                  default:
                         length = 0;                          length = 0;
         }          }
           (void)sxsi;
         return(length);          return(length);
 }  }
   
Line 60  static UINT scsicmd_datain(SXSIDEV sxsi, Line 61  static UINT scsicmd_datain(SXSIDEV sxsi,
 REG8 scsicmd_negate(REG8 id) {  REG8 scsicmd_negate(REG8 id) {
   
         scsiio.phase = 0;          scsiio.phase = 0;
           (void)id;
         return(0x85);                   // disconnect          return(0x85);                   // disconnect
 }  }
   
Line 73  REG8 scsicmd_select(REG8 id) { Line 75  REG8 scsicmd_select(REG8 id) {
                 return(0x42);                  return(0x42);
         }          }
         sxsi = sxsi_getptr((REG8)(0x20 + id));          sxsi = sxsi_getptr((REG8)(0x20 + id));
         if ((sxsi) && (sxsi->type)) {          if ((sxsi) && (sxsi->flag & SXSIFLAG_READY)) {
                 scsiio.phase = SCSIPH_COMMAND;                  scsiio.phase = SCSIPH_COMMAND;
                 return(0x8a);                   // Transfer CommandÍ×µá                  return(0x8a);                   // Transfer CommandÍ×µá
         }          }
         return(0x42);                           // Timeout          return(0x42);                           // Timeout
 }  }
   
 REG8 scsicmd_transfer(REG8 id, BYTE *cdb) {  REG8 scsicmd_transfer(REG8 id, UINT8 *cdb) {
   
         SXSIDEV sxsi;          SXSIDEV sxsi;
         UINT    leng;          UINT    leng;
Line 90  REG8 scsicmd_transfer(REG8 id, BYTE *cdb Line 92  REG8 scsicmd_transfer(REG8 id, BYTE *cdb
         }          }
   
         sxsi = sxsi_getptr((REG8)(0x20 + id));          sxsi = sxsi_getptr((REG8)(0x20 + id));
         if ((sxsi == NULL) || (sxsi->type == 0)) {          if ((sxsi == NULL) || (!(sxsi->flag & SXSIFLAG_READY))) {
                 return(0x42);                  return(0x42);
         }          }
   
Line 125  static REG8 scsicmd_cmd(REG8 id) { Line 127  static REG8 scsicmd_cmd(REG8 id) {
                 return(0x42);                  return(0x42);
         }          }
         sxsi = sxsi_getptr((REG8)(0x20 + id));          sxsi = sxsi_getptr((REG8)(0x20 + id));
         if ((sxsi == NULL) || (sxsi->type == 0)) {          if ((sxsi == NULL) || (!(sxsi->flag & SXSIFLAG_READY))) {
                 return(0x42);                  return(0x42);
         }          }
         switch(scsiio.cmd[0]) {          switch(scsiio.cmd[0]) {
Line 142  static REG8 scsicmd_cmd(REG8 id) { Line 144  static REG8 scsicmd_cmd(REG8 id) {
         return(0xff);          return(0xff);
 }  }
   
 BOOL scsicmd_send(void) {  BRESULT scsicmd_send(void) {
   
         switch(scsiio.phase) {          switch(scsiio.phase) {
                 case SCSIPH_COMMAND:                  case SCSIPH_COMMAND:
Line 163  static const UINT8 stat2ret[16] = { Line 165  static const UINT8 stat2ret[16] = {
   
 static REG8 bios1bc_seltrans(REG8 id) {  static REG8 bios1bc_seltrans(REG8 id) {
   
         BYTE    cdb[16];          UINT8   cdb[16];
         REG8    ret;          REG8    ret;
   
         i286_memstr_read(CPU_DS, CPU_DX, cdb, 16);          MEML_READSTR(CPU_DS, CPU_DX, cdb, 16);
         scsiio.reg[SCSICTR_TARGETLUN] = cdb[0];          scsiio.reg[SCSICTR_TARGETLUN] = cdb[0];
         if ((cdb[1] & 0x0c) == 0x08) {                  // OUT          if ((cdb[1] & 0x0c) == 0x08) {                  // OUT
                 i286_memstr_read(CPU_ES, CPU_BX, scsiio.data, CPU_CX);                  MEML_READSTR(CPU_ES, CPU_BX, scsiio.data, CPU_CX);
         }          }
         ret = scsicmd_transfer(id, cdb + 4);          ret = scsicmd_transfer(id, cdb + 4);
         if ((cdb[1] & 0x0c) == 0x04) {                  // IN          if ((cdb[1] & 0x0c) == 0x04) {                  // IN
                 i286_memstr_write(CPU_ES, CPU_BX, scsiio.data, CPU_CX);                  MEML_WRITESTR(CPU_ES, CPU_BX, scsiio.data, CPU_CX);
         }          }
         return(ret);          return(ret);
 }  }
Line 192  void scsicmd_bios(void) { Line 194  void scsicmd_bios(void) {
                 return;                  return;
         }          }
   
         flag = i286_membyte_read(CPU_SS, CPU_SP+4) & 0xbe;          flag = MEML_READ8(CPU_SS, CPU_SP+4) & 0xbe;
         ret = mem[0x0483];          ret = mem[0x0483];
         cmd = CPU_AH & 0x1f;          cmd = CPU_AH & 0x1f;
         dstid = CPU_AL & 7;          dstid = CPU_AL & 7;
Line 220  void scsicmd_bios(void) { Line 222  void scsicmd_bios(void) {
                         default:                          default:
                                 TRACEOUT(("cmd = %.2x", CPU_AH));                                  TRACEOUT(("cmd = %.2x", CPU_AH));
                                 SCSICMD_ERR                                  SCSICMD_ERR
                                   stat = 0x42;
                                 break;                                  break;
                 }                  }
                 ret = stat2ret[stat >> 4] + (stat & 0x0f);                  ret = stat2ret[stat >> 4] + (stat & 0x0f);
Line 233  void scsicmd_bios(void) { Line 236  void scsicmd_bios(void) {
                 else {                  else {
                         switch(cmd) {                          switch(cmd) {
                                 case 0x19:              // Data In                                  case 0x19:              // Data In
                                         i286_memstr_write(CPU_ES, CPU_BX, scsiio.data, CPU_CX);                                          MEML_WRITESTR(CPU_ES, CPU_BX, scsiio.data, CPU_CX);
                                         scsiio.phase = SCSIPH_STATUS;                                          scsiio.phase = SCSIPH_STATUS;
                                         stat = 0x8b;                                          stat = 0x8b;
                                         break;                                          break;
   
                                 case 0x1a:              // Transfer command                                  case 0x1a:              // Transfer command
                                         i286_memstr_read(CPU_ES, CPU_BX, scsiio.cmd, 12);                                          MEML_READSTR(CPU_ES, CPU_BX, scsiio.cmd, 12);
                                         stat = scsicmd_cmd(dstid);                                          stat = scsicmd_cmd(dstid);
                                         break;                                          break;
   
Line 256  void scsicmd_bios(void) { Line 259  void scsicmd_bios(void) {
                                 default:                                  default:
                                         TRACEOUT(("cmd = %.2x", CPU_AH));                                          TRACEOUT(("cmd = %.2x", CPU_AH));
                                         SCSICMD_ERR                                          SCSICMD_ERR
                                           stat = 0x42;
                                         break;                                          break;
                         }                          }
                         ret = stat2ret[stat >> 4] + (stat & 0x0f);                          ret = stat2ret[stat >> 4] + (stat & 0x0f);
Line 269  void scsicmd_bios(void) { Line 273  void scsicmd_bios(void) {
                 ret &= 0x7f;                  ret &= 0x7f;
         }          }
         CPU_AH = ret;          CPU_AH = ret;
         i286_membyte_write(CPU_SS, CPU_SP + 4, flag);          MEML_WRITE8(CPU_SS, CPU_SP + 4, flag);
 }  }
 #endif  #endif
   

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


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