Diff for /np2/bios/bios.c between versions 1.63 and 1.69

version 1.63, 2004/05/21 08:40:27 version 1.69, 2004/07/22 11:31:32
Line 20 Line 20
   
 #define BIOS_SIMULATE  #define BIOS_SIMULATE
   
         BOOL    biosrom = FALSE;  
   
 static const char neccheck[] = "Copyright (C) 1983 by NEC Corporation";  static const char neccheck[] = "Copyright (C) 1983 by NEC Corporation";
   
 typedef struct {  typedef struct {
Line 149  static void bios_reinitbyswitch(void) { Line 147  static void bios_reinitbyswitch(void) {
                 fddbios_equip(0, TRUE);                  fddbios_equip(0, TRUE);
                 mem[MEMB_BIOS_FLAG0] &= ~0x02;                  mem[MEMB_BIOS_FLAG0] &= ~0x02;
         }          }
           mem[MEMB_F2HD_MODE] = 0xff;
         mem[MEMB_F2DD_MODE] = 0xff;          mem[MEMB_F2DD_MODE] = 0xff;
   
 #if defined(SUPPORT_CRT31KHZ)  #if defined(SUPPORT_CRT31KHZ)
Line 192  static void bios_screeninit(void) { Line 191  static void bios_screeninit(void) {
         bios0x18_0a(al);          bios0x18_0a(al);
 }  }
   
   static void setbiosseed(UINT8 *ptr, UINT size, UINT seedpos) {
   
           UINT8   x;
           UINT8   y;
           UINT    i;
   
           x = 0;
           y = 0;
           for (i=0; i<size; i+=2) {
                   x += ptr[i + 0];
                   y += ptr[i + 1];
           }
           ptr[seedpos + 0] -= x;
           ptr[seedpos + 1] -= y;
   }
   
 void bios_initialize(void) {  void bios_initialize(void) {
   
           BOOL    biosrom;
         char    path[MAX_PATH];          char    path[MAX_PATH];
         FILEH   fh;          FILEH   fh;
         UINT    i;          UINT    i;
Line 210  void bios_initialize(void) { Line 225  void bios_initialize(void) {
         }          }
         if (biosrom) {          if (biosrom) {
                 TRACEOUT(("load bios.rom"));                  TRACEOUT(("load bios.rom"));
                   pccore.rom |= PCROM_BIOS;
                 // PnP BIOSを潰す                  // PnP BIOSを潰す
                 for (i=0; i<0x10000; i+=0x10) {                  for (i=0; i<0x10000; i+=0x10) {
                         tmp = LOADINTELDWORD(mem + 0xf0000 + i);                          tmp = LOADINTELDWORD(mem + 0xf0000 + i);
                         if (tmp == 0x506e5024) {                          if (tmp == 0x506e5024) {
                                 TRACEOUT(("found PnP BIOS at %.5x", 0xf0000 + i));                                  TRACEOUT(("found PnP BIOS at %.5x", 0xf0000 + i));
                                 STOREINTELDWORD(mem + 0xf0000 + i, 0x32504e24);                                  mem[0xf0000 + i] = 0x6e;
                                   mem[0xf0002 + i] = 0x24;
                                   break;
                         }                          }
                 }                  }
         }          }
         else {          else {
                 CopyMemory(mem + 0x0e8000, nosyscode, sizeof(nosyscode));                  CopyMemory(mem + 0x0e8000, nosyscode, sizeof(nosyscode));
                   if ((!biosrom) && (!(pccore.model & PCMODEL_EPSON))) {
                           CopyMemory(mem + 0xe8dd8, neccheck, 0x25);
                           pos = LOADINTELWORD(itfrom + 2);
                           CopyMemory(mem + 0xf538e, itfrom + pos, 0x27);
                   }
                   setbiosseed(mem + 0x0e8000, 0x10000, 0xb1f0);
         }          }
   
 #if defined(SUPPORT_PC9821)  #if defined(SUPPORT_PC9821)
Line 256  void bios_initialize(void) { Line 280  void bios_initialize(void) {
         mem[0xffff0] = 0xea;          mem[0xffff0] = 0xea;
         STOREINTELDWORD(mem + 0xffff1, 0xfd800000);          STOREINTELDWORD(mem + 0xffff1, 0xfd800000);
   
         if ((!biosrom) && (!(pccore.model & PCMODEL_EPSON))) {  
                 CopyMemory(mem + 0xe8dd8, neccheck, 0x25);  
                 pos = LOADINTELWORD(itfrom + 2);  
                 CopyMemory(mem + 0xf538e, itfrom + pos, 0x27);  
         }  
   
         CopyMemory(mem + 0x0fd800 + 0x0e00, keytable[0], 0x300);          CopyMemory(mem + 0x0fd800 + 0x0e00, keytable[0], 0x300);
   
         CopyMemory(mem + ITF_ADRS, itfrom, sizeof(itfrom));          CopyMemory(mem + ITF_ADRS, itfrom, sizeof(itfrom));
Line 273  void bios_initialize(void) { Line 291  void bios_initialize(void) {
         else if ((pccore.model & PCMODELMASK) == PCMODEL_VM) {          else if ((pccore.model & PCMODELMASK) == PCMODEL_VM) {
                 mem[ITF_ADRS + 0x7ff1] = 0x08;                  mem[ITF_ADRS + 0x7ff1] = 0x08;
         }          }
           setbiosseed(mem + 0x0f8000, 0x08000, 0x7ffe);
 #else  #else
         fh = file_open_c("itf.rom");          fh = file_open_c("itf.rom");
         if (fh != FILEH_INVALID) {          if (fh != FILEH_INVALID) {
Line 300  static void bios_itfcall(void) { Line 319  static void bios_itfcall(void) {
   
         if (!np2cfg.ITF_WORK) {          if (!np2cfg.ITF_WORK) {
                 for (i=0; i<8; i++) {                  for (i=0; i<8; i++) {
                         mem[MEMB_MSW + (i*4)] = msw_default[i];                          mem[MEMX_MSW + (i*4)] = msw_default[i];
                 }                  }
                 CPU_FLAGL |= C_FLAG;                  CPU_FLAGL |= C_FLAG;
         }          }
Line 354  UINT MEMCALL biosfunc(UINT32 adrs) { Line 373  UINT MEMCALL biosfunc(UINT32 adrs) {
                         bios_memclear();                          bios_memclear();
 #endif  #endif
                         bios_vectorset();                          bios_vectorset();
   #if 1
                           bios0x09_init();
   #endif
                         bios_reinitbyswitch();                          bios_reinitbyswitch();
                         bios_vectorset();                          bios_vectorset();
                         bios_screeninit();                          bios_screeninit();
Line 397  UINT MEMCALL biosfunc(UINT32 adrs) { Line 419  UINT MEMCALL biosfunc(UINT32 adrs) {
                 case BIOS_BASE + BIOSOFST_CMT:                  case BIOS_BASE + BIOSOFST_CMT:
                         CPU_REMCLOCK -= 200;                          CPU_REMCLOCK -= 200;
                         bios0x1a_cmt();                          bios0x1a_cmt();
                         return(1);                          return(0);                                                                                      // return(1);
   
                 case BIOS_BASE + BIOSOFST_PRT:                  case BIOS_BASE + BIOSOFST_PRT:
                         CPU_REMCLOCK -= 200;                          CPU_REMCLOCK -= 200;
Line 422  UINT MEMCALL biosfunc(UINT32 adrs) { Line 444  UINT MEMCALL biosfunc(UINT32 adrs) {
   
                 case BIOS_BASE + BIOSOFST_WAIT:                  case BIOS_BASE + BIOSOFST_WAIT:
                         CPU_STI;                          CPU_STI;
   #if 1
                           return(bios0x1b_wait());                                                                // ver0.78
   #else
                         if (fddmtr.busy) {                          if (fddmtr.busy) {
                                 CPU_IP--;                                  CPU_IP--;
                                 CPU_REMCLOCK = -1;                                  CPU_REMCLOCK = -1;
                         }                          }
                         else {                          else {
                                 if (fdc.chgreg & 1) {                                  if (fdc.chgreg & 1) {
                                         if (!(mem[0x0055e] & (0x01 << fdc.us))) {                                          if (!(mem[MEMB_DISK_INTL] & (0x01 << fdc.us))) {
                                                 CPU_IP--;                                                  CPU_IP--;
                                                 CPU_REMCLOCK -= 1000;                                                  CPU_REMCLOCK -= 1000;
                                         }                                          }
                                 }                                  }
                                 else {                                  else {
                                         if (!(mem[0x0055f] & (0x10 << fdc.us))) {                                          if (!(mem[MEMB_DISK_INTH] & (0x10 << fdc.us))) {
                                                 CPU_IP--;                                                  CPU_IP--;
                                                 CPU_REMCLOCK -= 1000;                                                  CPU_REMCLOCK -= 1000;
                                         }                                          }
                                 }                                  }
                         }                          }
                         return(1);                          return(1);
   #endif
   
                 case 0xfffe8:                                   // ブートストラップロード                  case 0xfffe8:                                   // ブートストラップロード
                         CPU_REMCLOCK -= 2000;                          CPU_REMCLOCK -= 2000;
Line 459  UINT MEMCALL biosfunc(UINT32 adrs) { Line 485  UINT MEMCALL biosfunc(UINT32 adrs) {
                         return(0);                          return(0);
         }          }
   
         if ((adrs >= 0xf9a00) && (adrs < 0x0f9a44)) {          if ((adrs >= 0xf9950) && (adrs <= 0x0f9990) && (!(adrs & 3))) {
                 if (!(adrs & 3)) {                  CPU_REMCLOCK -= 500;
                         CPU_REMCLOCK -= 500;                  bios_lio((REG8)((adrs - 0xf9950) >> 2));
                         bios_lio((REG8)((adrs - 0xf9a00) >> 2));          }
                 }          else if (adrs == 0xf9994) {
                 else {                  if (nevent_iswork(NEVENT_GDCSLAVE)) {
                         if (nevent_iswork(NEVENT_GDCSLAVE)) {                          CPU_IP--;
                                 CPU_IP--;                          CPU_REMCLOCK = -1;
                                 CPU_REMCLOCK = -1;                          return(1);
                                 return(1);  
                         }  
                 }                  }
                 return(0);  
         }          }
         return(0);          return(0);
 }  }

Removed from v.1.63  
changed lines
  Added in v.1.69


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