Diff for /np2/bios/bios1b.c between versions 1.5 and 1.7

version 1.5, 2003/11/29 00:36:00 version 1.7, 2003/12/12 01:04:39
Line 1 Line 1
 #include        "compiler.h"  #include        "compiler.h"
 #include        "i286.h"  #include        "cpucore.h"
 #include        "memory.h"  
 #include        "pccore.h"  #include        "pccore.h"
 #include        "iocore.h"  #include        "iocore.h"
 #include        "bios.h"  #include        "bios.h"
Line 37  static void init_fdd_equip(void) { Line 36  static void init_fdd_equip(void) {
   
 static void biosfd_setchrn(void) {  static void biosfd_setchrn(void) {
   
         fdc.C = I286_CL;          fdc.C = CPU_CL;
         fdc.H = I286_DH;          fdc.H = CPU_DH;
         fdc.R = I286_DL;          fdc.R = CPU_DL;
         fdc.N = I286_CH;          fdc.N = CPU_CH;
 }  }
   
 #if 0  #if 0
Line 102  static UINT16 fdfmt_biospara(BYTE fmt, B Line 101  static UINT16 fdfmt_biospara(BYTE fmt, B
         off += fdc.us * 2;          off += fdc.us * 2;
         off = i286_memword_read(seg, off);          off = i286_memword_read(seg, off);
         off += n * 8;          off += n * 8;
         if (!(I286_AH & 0x40)) {          if (!(CPU_AH & 0x40)) {
                 off += 4;                  off += 4;
         }          }
         if (fmt) {          if (fmt) {
Line 137  static void fdd_int(int result) { Line 136  static void fdd_int(int result) {
         if (result == FDCBIOS_NORESULT) {                                               // ver0.29          if (result == FDCBIOS_NORESULT) {                                               // ver0.29
                 return;                  return;
         }          }
         switch(I286_AH & 0x0f) {          switch(CPU_AH & 0x0f) {
                 case 0x00:                                                              // シーク                  case 0x00:                                                              // シーク
                 case 0x01:                                                              // ベリファイ                  case 0x01:                                                              // ベリファイ
                 case 0x02:                                                              // 診断の為の読み込み                  case 0x02:                                                              // 診断の為の読み込み
Line 197  static struct { Line 196  static struct {
   
 static void b0patch(void) {  static void b0patch(void) {
   
         if ((!b0p.flg) || (b0p.cx != I286_CX) || (b0p.dx != I286_DX)) {          if ((!b0p.flg) || (b0p.cx != CPU_CX) || (b0p.dx != CPU_DX)) {
                 b0p.flg = TRUE;                  b0p.flg = TRUE;
                 b0p.pos = 0;                  b0p.pos = 0;
                 b0p.cx = I286_CX;                  b0p.cx = CPU_CX;
                 b0p.dx = I286_DX;                  b0p.dx = CPU_DX;
         }          }
         else {          else {
                 if (!b0p.pos) {                  if (!b0p.pos) {
Line 211  static void b0patch(void) { Line 210  static void b0patch(void) {
                         REG8    c;                          REG8    c;
                         REG8    cl;                          REG8    cl;
                         REG8    last;                          REG8    last;
                         addr = ES_BASE + I286_BP;                          addr = ES_BASE + CPU_BP;
                         size = I286_BX;                          size = CPU_BX;
                         cnt = 0;                          cnt = 0;
                         last = 0;                          last = 0;
                         while(size--) {                          while(size--) {
Line 239  static void b0patch(void) { Line 238  static void b0patch(void) {
                                 }                                  }
                         }                          }
                 }                  }
                 if ((b0p.pos >> 3) < I286_BX) {                  if ((b0p.pos >> 3) < CPU_BX) {
                         UINT32 addr;                          UINT32 addr;
                         REG8 c;                          REG8 c;
                         addr = ES_BASE + I286_BP + (b0p.pos >> 3);                          addr = ES_BASE + CPU_BP + (b0p.pos >> 3);
                         c = i286_memoryread(addr);                          c = i286_memoryread(addr);
                         c ^= (1 << (b0p.pos & 7));                          c ^= (1 << (b0p.pos & 7));
                         b0p.pos++;                          b0p.pos++;
Line 277  static BYTE fdd_operate(BYTE type, BOOL  Line 276  static BYTE fdd_operate(BYTE type, BOOL 
         // とりあえずBIOSの時は無視する          // とりあえずBIOSの時は無視する
         fdc.mf = 0xff;                                          // ver0.29          fdc.mf = 0xff;                                          // ver0.29
   
 //      TRACE_("int 1Bh", I286_AH);  //      TRACE_("int 1Bh", CPU_AH);
   
         change_rpm(rpm);                                                                                                // ver0.31          change_rpm(rpm);                                                                                                // ver0.31
         if ((I286_AH & 0x0f) != 0x0a) {          if ((CPU_AH & 0x0f) != 0x0a) {
                 fdc.crcn = 0;                  fdc.crcn = 0;
         }          }
         if ((I286_AH & 0x0f) != 0x03) {          if ((CPU_AH & 0x0f) != 0x03) {
                 CTRL_FDMEDIA = type;                  CTRL_FDMEDIA = type;
                 switch(type) {                  switch(type) {
                         case DISKTYPE_2HD:                          case DISKTYPE_2HD:
Line 297  static BYTE fdd_operate(BYTE type, BOOL  Line 296  static BYTE fdd_operate(BYTE type, BOOL 
                                 }                                  }
                                 break;                                  break;
                 }                  }
                 if (fdc.us != (I286_AL & 0x03)) {                  if (fdc.us != (CPU_AL & 0x03)) {
                         fdc.us = I286_AL & 0x03;                          fdc.us = CPU_AL & 0x03;
                         fdc.crcn = 0;                          fdc.crcn = 0;
                 }                  }
                 hd = ((I286_DH) ^ (I286_AL >> 2)) & 1;                  hd = ((CPU_DH) ^ (CPU_AL >> 2)) & 1;
                 if (fdc.hd != hd) {                  if (fdc.hd != hd) {
                         fdc.hd = hd;                          fdc.hd = hd;
                         fdc.crcn = 0;                          fdc.crcn = 0;
                 }                  }
                 if (!fdd_diskready(fdc.us)) {                  if (!fdd_diskready(fdc.us)) {
                         fdd_int(FDCBIOS_NONREADY);                          fdd_int(FDCBIOS_NONREADY);
                         if (I286_AH == 0x84) {                                                          // ver0.28                          if (CPU_AH == 0x84) {                                                           // ver0.28
                                 return(0x68);                   // 新センスは 両用ドライブ情報も                                  return(0x68);                   // 新センスは 両用ドライブ情報も
                         }                          }
                         if (I286_AH == 0xc4) {                                                          // ver0.31                          if (CPU_AH == 0xc4) {                                                           // ver0.31
                                 if (np2cfg.usefd144) {                                  if (np2cfg.usefd144) {
                                         return(0x6c);                                          return(0x6c);
                                 }                                  }
Line 328  static BYTE fdd_operate(BYTE type, BOOL  Line 327  static BYTE fdd_operate(BYTE type, BOOL 
                 }                  }
         }          }
   
         switch(I286_AH & 0x0f) {          switch(CPU_AH & 0x0f) {
                 case 0x00:                                                              // シーク                  case 0x00:                                                              // シーク
                         if (I286_AH & 0x10) {                          if (CPU_AH & 0x10) {
                                 if (!biosfd_seek(I286_CL, ndensity)) {                                  if (!biosfd_seek(CPU_CL, ndensity)) {
                                         result = FDCBIOS_SEEKSUCCESS;                                          result = FDCBIOS_SEEKSUCCESS;
                                 }                                  }
                                 else {                                  else {
Line 342  static BYTE fdd_operate(BYTE type, BOOL  Line 341  static BYTE fdd_operate(BYTE type, BOOL 
                         break;                          break;
   
                 case 0x01:                                                              // ベリファイ                  case 0x01:                                                              // ベリファイ
                         if (I286_AH & 0x10) {                          if (CPU_AH & 0x10) {
                                 if (!biosfd_seek(I286_CL, ndensity)) {                                  if (!biosfd_seek(CPU_CL, ndensity)) {
                                         result = FDCBIOS_SEEKSUCCESS;                                          result = FDCBIOS_SEEKSUCCESS;
                                 }                                  }
                                 else {                                  else {
Line 364  static BYTE fdd_operate(BYTE type, BOOL  Line 363  static BYTE fdd_operate(BYTE type, BOOL 
                         else {                          else {
                                 secsize = 128 << 8;                                  secsize = 128 << 8;
                         }                          }
                         size = I286_BX;                          size = CPU_BX;
                         while(size) {                          while(size) {
                                 if (size > secsize) {                                  if (size > secsize) {
                                         accesssize = secsize;                                          accesssize = secsize;
Line 377  static BYTE fdd_operate(BYTE type, BOOL  Line 376  static BYTE fdd_operate(BYTE type, BOOL 
                                 }                                  }
                                 size -= accesssize;                                  size -= accesssize;
                                 mtr_r += accesssize;                                            // ver0.26                                  mtr_r += accesssize;                                            // ver0.26
                                 if ((fdc.R++ == (BYTE)para) && (I286_AH & 0x80) && (!fdc.hd)) {                                  if ((fdc.R++ == (BYTE)para) && (CPU_AH & 0x80) && (!fdc.hd)) {
                                         fdc.hd = 1;                                          fdc.hd = 1;
                                         fdc.H = 1;                                          fdc.H = 1;
                                         fdc.R = 1;                                          fdc.R = 1;
Line 409  static BYTE fdd_operate(BYTE type, BOOL  Line 408  static BYTE fdd_operate(BYTE type, BOOL 
                         else if (fdd_diskprotect(fdc.us)) {                          else if (fdd_diskprotect(fdc.us)) {
                                 ret_ah = 0x10;                                  ret_ah = 0x10;
                         }                          }
                         if (I286_AL & 0x80) {                           // 2HD                          if (CPU_AL & 0x80) {                            // 2HD
                                 ret_ah |= 0x01;                                  ret_ah |= 0x01;
                         }                          }
                         else {                                                          // 2DD                          else {                                                          // 2DD
Line 420  static BYTE fdd_operate(BYTE type, BOOL  Line 419  static BYTE fdd_operate(BYTE type, BOOL 
                                         ret_ah |= 0x04;                                          ret_ah |= 0x04;
                                 }                                  }
                         }                          }
                         if (I286_AH & 0x80) {                           // ver0.30                          if (CPU_AH & 0x80) {                            // ver0.30
                                 ret_ah |= 8;                                    // 1MB/640KB両用ドライブ                                  ret_ah |= 8;                                    // 1MB/640KB両用ドライブ
                                 if ((I286_AH & 0x40) &&                                  if ((CPU_AH & 0x40) &&
                                         (np2cfg.usefd144)) {            // ver0.31                                          (np2cfg.usefd144)) {            // ver0.31
                                         ret_ah |= 4;                            // 1.44対応ドライブ                                          ret_ah |= 4;                            // 1.44対応ドライブ
                                 }                                  }
Line 430  static BYTE fdd_operate(BYTE type, BOOL  Line 429  static BYTE fdd_operate(BYTE type, BOOL 
                         break;                          break;
   
                 case 0x05:                                                              // データの書き込み                  case 0x05:                                                              // データの書き込み
                         if (I286_AH & 0x10) {                          if (CPU_AH & 0x10) {
                                 if (!biosfd_seek(I286_CL, ndensity)) {                                  if (!biosfd_seek(CPU_CL, ndensity)) {
                                         result = FDCBIOS_SEEKSUCCESS;                                          result = FDCBIOS_SEEKSUCCESS;
                                 }                                  }
                                 else {                                  else {
Line 457  static BYTE fdd_operate(BYTE type, BOOL  Line 456  static BYTE fdd_operate(BYTE type, BOOL 
                         else {                          else {
                                 secsize = 128 << 8;                                  secsize = 128 << 8;
                         }                          }
                         size = I286_BX;                          size = CPU_BX;
                         addr = ES_BASE + I286_BP;                          addr = ES_BASE + CPU_BP;
                         while(size) {                          while(size) {
                                 if (size > secsize) {                                  if (size > secsize) {
                                         accesssize = secsize;                                          accesssize = secsize;
Line 473  static BYTE fdd_operate(BYTE type, BOOL  Line 472  static BYTE fdd_operate(BYTE type, BOOL 
                                 addr += accesssize;                                  addr += accesssize;
                                 size -= accesssize;                                  size -= accesssize;
                                 mtr_r += accesssize;                                            // ver0.26                                  mtr_r += accesssize;                                            // ver0.26
                                 if ((fdc.R++ == (BYTE)para) && (I286_AH & 0x80) && (!fdc.hd)) {                                  if ((fdc.R++ == (BYTE)para) && (CPU_AH & 0x80) && (!fdc.hd)) {
                                         fdc.hd = 1;                                          fdc.hd = 1;
                                         fdc.H = 1;                                          fdc.H = 1;
                                         fdc.R = 1;                                          fdc.R = 1;
Line 494  static BYTE fdd_operate(BYTE type, BOOL  Line 493  static BYTE fdd_operate(BYTE type, BOOL 
   
                 case 0x02:                                                              // 診断の為の読み込み                  case 0x02:                                                              // 診断の為の読み込み
                 case 0x06:                                                              // データの読み込み                  case 0x06:                                                              // データの読み込み
                         if (I286_AH & 0x10) {                          if (CPU_AH & 0x10) {
                                 if (!biosfd_seek(I286_CL, ndensity)) {                                  if (!biosfd_seek(CPU_CL, ndensity)) {
                                         result = FDCBIOS_SEEKSUCCESS;                                          result = FDCBIOS_SEEKSUCCESS;
                                 }                                  }
                                 else {                                  else {
Line 522  static BYTE fdd_operate(BYTE type, BOOL  Line 521  static BYTE fdd_operate(BYTE type, BOOL 
                         else {                          else {
                                 secsize = 128 << 8;                                  secsize = 128 << 8;
                         }                          }
                         size = I286_BX;                          size = CPU_BX;
                         addr = ES_BASE + I286_BP;                          addr = ES_BASE + CPU_BP;
                         while(size) {                          while(size) {
                                 if (size > secsize) {                                  if (size > secsize) {
                                         accesssize = secsize;                                          accesssize = secsize;
Line 539  static BYTE fdd_operate(BYTE type, BOOL  Line 538  static BYTE fdd_operate(BYTE type, BOOL 
                                 size -= accesssize;                                  size -= accesssize;
                                 mtr_r += accesssize;                                            // ver0.26                                  mtr_r += accesssize;                                            // ver0.26
                                 if (fdc.R++ == (BYTE)para) {                                  if (fdc.R++ == (BYTE)para) {
                                         if ((I286_AH & 0x80) && (!fdc.hd)) {                                          if ((CPU_AH & 0x80) && (!fdc.hd)) {
                                                 fdc.hd = 1;                                                  fdc.hd = 1;
                                                 fdc.H = 1;                                                  fdc.H = 1;
                                                 fdc.R = 1;                                                  fdc.R = 1;
Line 569  static BYTE fdd_operate(BYTE type, BOOL  Line 568  static BYTE fdd_operate(BYTE type, BOOL 
 #endif  #endif
                         }                          }
 #if 1  #if 1
                         else if ((I286_AH & 0x0f) == 0x02) {    // ARS対策…                          else if ((CPU_AH & 0x0f) == 0x02) {             // ARS対策…
                                 ret_ah = 0x00;                                  ret_ah = 0x00;
                                 result = FDCBIOS_READERROR;                                  result = FDCBIOS_READERROR;
                         }                          }
Line 587  static BYTE fdd_operate(BYTE type, BOOL  Line 586  static BYTE fdd_operate(BYTE type, BOOL 
                         break;                          break;
   
                 case 0x0a:                                              // READ ID                  case 0x0a:                                              // READ ID
                         fdc.mf = I286_AH & 0x40;                                                // ver0.29                          fdc.mf = CPU_AH & 0x40;                                                 // ver0.29
                         if (I286_AH & 0x10) {                                                   // ver0.28                          if (CPU_AH & 0x10) {                                                    // ver0.28
                                 if (!biosfd_seek(I286_CL, ndensity)) {                                  if (!biosfd_seek(CPU_CL, ndensity)) {
                                         result = FDCBIOS_SEEKSUCCESS;                                          result = FDCBIOS_SEEKSUCCESS;
                                 }                                  }
                                 else {                                  else {
Line 609  static BYTE fdd_operate(BYTE type, BOOL  Line 608  static BYTE fdd_operate(BYTE type, BOOL 
                                 mtr_r += 128 << 8;                                  mtr_r += 128 << 8;
                         }                          }
                         ret_ah = 0x00;                          ret_ah = 0x00;
                         I286_CL = fdc.C;                          CPU_CL = fdc.C;
                         I286_DH = fdc.H;                          CPU_DH = fdc.H;
                         I286_DL = fdc.R;                          CPU_DL = fdc.R;
                         I286_CH = fdc.N;                          CPU_CH = fdc.N;
                         result = FDCBIOS_SUCCESS;                          result = FDCBIOS_SUCCESS;
                         break;                          break;
   
                 case 0x0d:                                              // フォーマット                  case 0x0d:                                              // フォーマット
                         if (I286_AH & 0x10) {                          if (CPU_AH & 0x10) {
                                 biosfd_seek(I286_CL, ndensity);                                  biosfd_seek(CPU_CL, ndensity);
                         }                          }
                         if (fdd_diskprotect(fdc.us)) {                          if (fdd_diskprotect(fdc.us)) {
                                 ret_ah = 0x70;                                  ret_ah = 0x70;
                                 break;                                  break;
                         }                          }
                         fdc.d = I286_DL;                          fdc.d = CPU_DL;
                         fdc.N = I286_CH;                          fdc.N = CPU_CH;
                         para = fdfmt_biospara(1, rpm);                          para = fdfmt_biospara(1, rpm);
                         if (!para) {                          if (!para) {
                                 ret_ah = 0xd0;                                  ret_ah = 0xd0;
Line 633  static BYTE fdd_operate(BYTE type, BOOL  Line 632  static BYTE fdd_operate(BYTE type, BOOL 
                         }                          }
                         fdc.sc = (BYTE)para;                          fdc.sc = (BYTE)para;
                         fdd_formatinit();                          fdd_formatinit();
                         pos = I286_BP;                          pos = CPU_BP;
                         for (s=0; s<fdc.sc; s++) {                          for (s=0; s<fdc.sc; s++) {
                                 i286_memstr_read(I286_ES, pos, ID, 4);                                  i286_memstr_read(CPU_ES, pos, ID, 4);
                                 fdd_formating(ID);                                  fdd_formating(ID);
                                 pos += 4;                                  pos += 4;
                         }                          }
Line 644  static BYTE fdd_operate(BYTE type, BOOL  Line 643  static BYTE fdd_operate(BYTE type, BOOL 
         }          }
         fdd_int(result);          fdd_int(result);
         fddmtr_seek(fdc.us, mtr_c, mtr_r);          fddmtr_seek(fdc.us, mtr_c, mtr_r);
         I286_IP = BIOSOFST_WAIT;                                                                                // ver0.30          CPU_IP = BIOSOFST_WAIT;                                                                                 // ver0.30
         return(ret_ah);          return(ret_ah);
 }  }
   
Line 705  static BYTE sxsi_pos(long *pos) { Line 704  static BYTE sxsi_pos(long *pos) {
         int             np2drv;          int             np2drv;
   
         *pos = 0;          *pos = 0;
         np2drv = (I286_AL & 0x20) >> 4;          np2drv = (CPU_AL & 0x20) >> 4;
         if ((I286_AL & 0x0f) >= 2) {          if ((CPU_AL & 0x0f) >= 2) {
                 return(0x60);                  return(0x60);
         }          }
         np2drv |= (I286_AL & 1);          np2drv |= (CPU_AL & 1);
         sxsi = &sxsi_hd[np2drv];          sxsi = &sxsi_hd[np2drv];
         if (I286_AL & 0x80) {          if (CPU_AL & 0x80) {
                 if ((I286_DL >= sxsi->sectors) ||                  if ((CPU_DL >= sxsi->sectors) ||
                         (I286_DH >= sxsi->surfaces) ||                          (CPU_DH >= sxsi->surfaces) ||
                         (I286_CX >= sxsi->tracks)) {                          (CPU_CX >= sxsi->tracks)) {
                         return(0xd0);                          return(0xd0);
                 }                  }
                 (*pos) = ((I286_CX * sxsi->surfaces) + I286_DH) * sxsi->sectors                  (*pos) = ((CPU_CX * sxsi->surfaces) + CPU_DH) * sxsi->sectors
                                                                                                                         + I286_DL;                                                                                                                          + CPU_DL;
         }          }
         else {          else {
                 *pos = (I286_DL << 16) | I286_CX;                  *pos = (CPU_DL << 16) | CPU_CX;
                 if (!(I286_AL & 0x20)) {                  if (!(CPU_AL & 0x20)) {
                         (*pos) &= 0x1fffff;                          (*pos) &= 0x1fffff;
                 }                  }
                 if ((*pos) >= sxsi->totals) {                  if ((*pos) >= sxsi->totals) {
Line 740  static BYTE sxsi_operate(BYTE type) { Line 739  static BYTE sxsi_operate(BYTE type) {
         long    pos;          long    pos;
 //      int             i;  //      int             i;
   
         drv = (I286_AL & 0x20) >> 4;          drv = (CPU_AL & 0x20) >> 4;
         if ((I286_AL & 0x0f) >= 2) {          if ((CPU_AL & 0x0f) >= 2) {
                 return(0x60);                  return(0x60);
         }          }
         drv |= (I286_AL & 1);          drv |= (CPU_AL & 1);
   
         switch(I286_AH & 0x0f) {          switch(CPU_AH & 0x0f) {
                 case 0x01:                                              // ベリファイ                  case 0x01:                                              // ベリファイ
                 case 0x07:                                              // リトラクト                  case 0x07:                                              // リトラクト
                 case 0x0f:                                              // リトラクト                  case 0x0f:                                              // リトラクト
Line 763  static BYTE sxsi_operate(BYTE type) { Line 762  static BYTE sxsi_operate(BYTE type) {
   
                 case 0x04:                                              // センス                  case 0x04:                                              // センス
                         ret_ah = 0x00;                          ret_ah = 0x00;
                         if ((I286_AH == 0x04) && (type == HDDTYPE_SASI)) {                          if ((CPU_AH == 0x04) && (type == HDDTYPE_SASI)) {
                                 ret_ah = 0x04;                                  ret_ah = 0x04;
                         }                          }
                         else if ((I286_AH == 0x44) && (type == HDDTYPE_SCSI)) {                          else if ((CPU_AH == 0x44) && (type == HDDTYPE_SCSI)) {
                                 I286_BX = 1;                                  CPU_BX = 1;
                         }                          }
                         else if (I286_AH == 0x84) {                          else if (CPU_AH == 0x84) {
                                 I286_BX = sxsi_hd[drv].size;                                  CPU_BX = sxsi_hd[drv].size;
                                 I286_CX = sxsi_hd[drv].tracks;                                  CPU_CX = sxsi_hd[drv].tracks;
                                 I286_DH = sxsi_hd[drv].surfaces;                                  CPU_DH = sxsi_hd[drv].surfaces;
                                 I286_DL = sxsi_hd[drv].sectors;                                  CPU_DL = sxsi_hd[drv].sectors;
                         }                          }
                         break;                          break;
   
                 case 0x05:                                              // データの書き込み                  case 0x05:                                              // データの書き込み
                         i286_memx_read(ES_BASE + I286_BP, work, I286_BX);                          i286_memx_read(ES_BASE + CPU_BP, work, CPU_BX);
                         ret_ah = sxsi_pos(&pos);                          ret_ah = sxsi_pos(&pos);
                         if (!ret_ah) {                          if (!ret_ah) {
                                 ret_ah = sxsi_write(I286_AL, pos, work, I286_BX);                                  ret_ah = sxsi_write(CPU_AL, pos, work, CPU_BX);
                         }                          }
                         break;                          break;
   
                 case 0x06:                                              // データの読み込み                  case 0x06:                                              // データの読み込み
                         ret_ah = sxsi_pos(&pos);                          ret_ah = sxsi_pos(&pos);
                         if (!ret_ah) {                          if (!ret_ah) {
                                 ret_ah = sxsi_read(I286_AL, pos, work, I286_BX);                                  ret_ah = sxsi_read(CPU_AL, pos, work, CPU_BX);
                                 if (ret_ah < 0x20) {                                  if (ret_ah < 0x20) {
                                         i286_memx_write(ES_BASE + I286_BP, work, I286_BX);                                          i286_memx_write(ES_BASE + CPU_BP, work, CPU_BX);
                                 }                                  }
                         }                          }
                         break;                          break;
   
                 case 0x0d:                                              // フォーマット                  case 0x0d:                                              // フォーマット
                         if (I286_DL) {                          if (CPU_DL) {
                                 ret_ah = 0x30;                                  ret_ah = 0x30;
                                 break;                                  break;
                         }                          }
                         i286_memstr_read(I286_ES, I286_BP, work, I286_BX);                          i286_memstr_read(CPU_ES, CPU_BP, work, CPU_BX);
                         ret_ah = sxsi_pos(&pos);                          ret_ah = sxsi_pos(&pos);
                         if (!ret_ah) {                          if (!ret_ah) {
                                 ret_ah = sxsi_format(I286_AL, pos);                                  ret_ah = sxsi_format(CPU_AL, pos);
                         }                          }
                         break;                          break;
   
Line 996  void bios0x1b(void) { Line 995  void bios0x1b(void) {
         BYTE    ret_ah;          BYTE    ret_ah;
         REG8    flag;          REG8    flag;
   
         switch(I286_AL & 0xf0) {          switch(CPU_AL & 0xf0) {
                 case 0x90:                  case 0x90:
                         ret_ah = fdd_operate(DISKTYPE_2HD, 0, 0);                          ret_ah = fdd_operate(DISKTYPE_2HD, 0, 0);
                         break;                          break;
Line 1034  void bios0x1b(void) { Line 1033  void bios0x1b(void) {
 #if 0  #if 0
         {          {
                 static BYTE p = 0;                  static BYTE p = 0;
                 if ((I286_CL == 0x4d) && (ret_ah == 0xe0)) {                  if ((CPU_CL == 0x4d) && (ret_ah == 0xe0)) {
                         if (!p) {                          if (!p) {
                                 trace_sw = 1;                                  trace_sw = 1;
                                 p++;                                  p++;
Line 1047  void bios0x1b(void) { Line 1046  void bios0x1b(void) {
 #if 0  #if 0
         TRACEOUT(("%04x:%04x AX=%04x BX=%04x %02x:%02x:%02x:%02x\n"     \          TRACEOUT(("%04x:%04x AX=%04x BX=%04x %02x:%02x:%02x:%02x\n"     \
                                                 "ES=%04x BP=%04x \nret=%02x",                                                  "ES=%04x BP=%04x \nret=%02x",
                         i286_memword_read(I286_SS, I286_SP+2),                                                          i286_memword_read(CPU_SS, CPU_SP+2),
                         i286_memword_read(I286_SS, I286_SP),                                                          i286_memword_read(CPU_SS, CPU_SP),
                         I286_AX, I286_BX, I286_CL, I286_DH, I286_DL, I286_CH,                                                           CPU_AX, CPU_BX, CPU_CL, CPU_DH, CPU_DL, CPU_CH,
                         I286_ES, I286_BP, ret_ah));                                                          CPU_ES, CPU_BP, ret_ah));
 #endif  #endif
         I286_AH = ret_ah;          CPU_AH = ret_ah;
         flag = i286_membyte_read(I286_SS, I286_SP+4) & 0xfe;          flag = i286_membyte_read(CPU_SS, CPU_SP+4) & 0xfe;
         if (ret_ah >= 0x20) {          if (ret_ah >= 0x20) {
                 flag += 1;                  flag += 1;
         }          }
         i286_membyte_write(I286_SS, I286_SP+4, flag);          i286_membyte_write(CPU_SS, CPU_SP + 4, flag);
 }  }
   

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


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