Diff for /np2/bios/bios18.c between versions 1.33 and 1.42

version 1.33, 2004/03/14 23:45:43 version 1.42, 2005/03/23 08:07:48
Line 8 Line 8
 #include        "font.h"  #include        "font.h"
   
   
 static  int             sti_waiting = 0;  
   
 typedef struct {  typedef struct {
         BYTE    GBON_PTN;          UINT8   GBON_PTN;
         BYTE    GBBCC;          UINT8   GBBCC;
         BYTE    GBDOTU;          UINT8   GBDOTU;
         BYTE    GBDSP;          UINT8   GBDSP;
         BYTE    GBCPC[4];          UINT8   GBCPC[4];
         BYTE    GBSX1[2];          UINT8   GBSX1[2];
         BYTE    GBSY1[2];          UINT8   GBSY1[2];
         BYTE    GBLNG1[2];          UINT8   GBLNG1[2];
         BYTE    GBWDPA[2];          UINT8   GBWDPA[2];
         BYTE    GBRBUF[2][3];          UINT8   GBRBUF[2][3];
         BYTE    GBSX2[2];          UINT8   GBSX2[2];
         BYTE    GBSY2[2];          UINT8   GBSY2[2];
         BYTE    GBMDOT[2];          UINT8   GBMDOT[2];
         BYTE    GBCIR[2];          UINT8   GBCIR[2];
         BYTE    GBLNG2[2];          UINT8   GBLNG2[2];
         BYTE    GBMDOTI[8];          UINT8   GBMDOTI[8];
         BYTE    GBDTYP;          UINT8   GBDTYP;
         BYTE    GBFILL;          UINT8   GBFILL;
 } UCWTBL;  } UCWTBL;
   
 typedef struct {  typedef struct {
Line 145  void bios0x18_0c(void) { Line 143  void bios0x18_0c(void) {
   
 static void bios0x18_0f(UINT seg, UINT off, REG8 num, REG8 cnt) {  static void bios0x18_0f(UINT seg, UINT off, REG8 num, REG8 cnt) {
   
         BYTE    *p;          UINT8   *p;
         UINT    raster;          UINT    raster;
         UINT    t;          UINT    t;
   
Line 209  void bios0x18_10(REG8 curdel) { Line 207  void bios0x18_10(REG8 curdel) {
 REG16 bios0x18_14(REG16 seg, REG16 off, REG16 code) {  REG16 bios0x18_14(REG16 seg, REG16 off, REG16 code) {
   
         UINT16  size;          UINT16  size;
 const BYTE      *p;  const UINT8     *p;
         BYTE    buf[32];          UINT8   buf[32];
         UINT    i;          UINT    i;
   
         switch(code >> 8) {          switch(code >> 8) {
Line 221  const BYTE *p; Line 219  const BYTE *p;
                         MEML_WRITESTR(seg, off + 2, p, 8);                          MEML_WRITESTR(seg, off + 2, p, 8);
                         break;                          break;
   
                 case 0x28:                      // 8x16 KANJI  //              case 0x28:
                 case 0x29:                  case 0x29:                      // 8x16 KANJI
                 case 0x2a:                  case 0x2a:
                 case 0x2b:                  case 0x2b:
                         size = 0x0102;                          size = 0x0102;
Line 257  const BYTE *p; Line 255  const BYTE *p;
   
 static void bios0x18_1a(REG16 seg, REG16 off, REG16 code) {  static void bios0x18_1a(REG16 seg, REG16 off, REG16 code) {
   
         BYTE    *p;          UINT8   *p;
         BYTE    buf[32];          UINT8   buf[32];
         UINT    i;          UINT    i;
   
         if (((code >> 8) & 0x7e) == 0x76) {          if (((code >> 8) & 0x7e) == 0x76) {
Line 356  const CRTDATA *p; Line 354  const CRTDATA *p;
         }          }
   
         CopyMemory(gdc.m.para + GDC_SYNC, gdcmastersync[master], 8);          CopyMemory(gdc.m.para + GDC_SYNC, gdcmastersync[master], 8);
         ZeroMemory(gdc.m.para + GDC_SCROLL, 8);          ZeroMemory(gdc.m.para + GDC_SCROLL, 4);
         gdc.m.para[GDC_PITCH] = 80;          gdc.m.para[GDC_PITCH] = 80;
   
         p = crtdata + crt;          p = crtdata + crt;
Line 371  const CRTDATA *p; Line 369  const CRTDATA *p;
         crtc.reg.sdr = 0;          crtc.reg.sdr = 0;
   
         CopyMemory(gdc.s.para + GDC_SYNC, gdcslavesync[slave], 8);          CopyMemory(gdc.s.para + GDC_SYNC, gdcslavesync[slave], 8);
         ZeroMemory(gdc.s.para + GDC_SCROLL, 8);          ZeroMemory(gdc.s.para + GDC_SCROLL, 4);
         if (slave & 1) {          if (slave & 1) {
                 gdc.s.para[GDC_PITCH] = 80;                  gdc.s.para[GDC_PITCH] = 80;
                 gdc.clock |= 3;                  gdc.clock |= 3;
                 mem[MEMB_PRXDUPD] |= 0x04;                  mem[MEMB_PRXDUPD] |= 0x04;
                   gdc.s.para[GDC_SCROLL+3] = 0x40;
         }          }
         else {          else {
                 gdc.s.para[GDC_PITCH] = 40;                  gdc.s.para[GDC_PITCH] = 40;
Line 476  void bios0x18_42(REG8 mode) { Line 475  void bios0x18_42(REG8 mode) {
         scrn = bios0x18_31bh();          scrn = bios0x18_31bh();
         if ((mem[MEMB_CRT_BIOS] & 0x80) &&          if ((mem[MEMB_CRT_BIOS] & 0x80) &&
                 (((scrn & 0x30) == 0x30) || (crtmode == 3))) {                  (((scrn & 0x30) == 0x30) || (crtmode == 3))) {
                 bios0x18_30(rate, (crtmode << 4) + 1);                  bios0x18_30(rate, (REG8)((crtmode << 4) + 1));
         }          }
         else {          else {
 #endif  #endif
                 ZeroMemory(gdc.s.para + GDC_SCROLL, 8);                  ZeroMemory(gdc.s.para + GDC_SCROLL, 4);
                 if (crtmode == 2) {                                                     // ALL                  if (crtmode == 2) {                                                     // ALL
                         crtmode = 2;                          crtmode = 2;
                         if ((mem[MEMB_PRXDUPD] & 0x24) == 0x20) {                          if ((mem[MEMB_PRXDUPD] & 0x24) == 0x20) {
Line 511  void bios0x18_42(REG8 mode) { Line 510  void bios0x18_42(REG8 mode) {
                                 gdc.s.para[GDC_SCROLL+1] = (200*40) >> 8;                                  gdc.s.para[GDC_SCROLL+1] = (200*40) >> 8;
                         }                          }
                 }                  }
                   if (mem[MEMB_PRXDUPD] & 4) {
                           gdc.s.para[GDC_SCROLL+3] = 0x40;
                   }
                 if ((crtmode == 2) || (!(mem[MEMB_PRXCRT] & 0x40))) {                  if ((crtmode == 2) || (!(mem[MEMB_PRXCRT] & 0x40))) {
                         gdc.mode1 &= ~(0x10);                          gdc.mode1 &= ~(0x10);
                         gdc.s.para[GDC_CSRFORM] = 0;                          gdc.s.para[GDC_CSRFORM] = 0;
Line 528  void bios0x18_42(REG8 mode) { Line 530  void bios0x18_42(REG8 mode) {
                 gdcs.disp = (mode >> 4) & 1;                  gdcs.disp = (mode >> 4) & 1;
         }          }
         if (!(mode & 0x20)) {          if (!(mode & 0x20)) {
                 gdc.mode1 &= ~0x04;                  gdc.mode2 &= ~0x04;
         }          }
         else {          else {
                 gdc.mode2 |= 0x04;                  gdc.mode2 |= 0x04;
         }          }
           gdcs.mode2 = gdc.mode2;
         gdcs.grphdisp |= GDCSCRN_ALLDRAW2;          gdcs.grphdisp |= GDCSCRN_ALLDRAW2;
         screenupdate |= 2;          screenupdate |= 2;
 }  }
   
 static void setbiosgdc(UINT32 csrw, const GDCVECT *vect, UINT8 ope) {  static void setbiosgdc(UINT32 csrw, const GDCVECT *vect, UINT8 ope) {
   
         gdc.s.para[GDC_CSRW + 0] = (BYTE)csrw;          gdc.s.para[GDC_CSRW + 0] = (UINT8)csrw;
         gdc.s.para[GDC_CSRW + 1] = (BYTE)(csrw >> 8);          gdc.s.para[GDC_CSRW + 1] = (UINT8)(csrw >> 8);
         gdc.s.para[GDC_CSRW + 2] = (BYTE)(csrw >> 16);          gdc.s.para[GDC_CSRW + 2] = (UINT8)(csrw >> 16);
   
         gdc.s.para[GDC_VECTW] = vect->ope;          gdc.s.para[GDC_VECTW] = vect->ope;
         gdc_vectreset(&gdc.s);          gdc_vectreset(&gdc.s);
Line 628  static void bios0x18_47(void) { Line 631  static void bios0x18_47(void) {
                 vect.ope = 0x20 + (ucw.GBDSP & 7);                  vect.ope = 0x20 + (ucw.GBDSP & 7);
                 vect.DC[0] = ucw.GBLNG1[0];                  vect.DC[0] = ucw.GBLNG1[0];
                 vect.DC[1] = ucw.GBLNG1[1];                  vect.DC[1] = ucw.GBLNG1[1];
                 data = LOADINTELWORD(ucw.GBLNG2) - 1;  //              data = LOADINTELWORD(ucw.GBLNG2) - 1;
                   data = LOADINTELWORD(ucw.GBCIR) - 1;
                 STOREINTELWORD(vect.D, data);                  STOREINTELWORD(vect.D, data);
                 data >>= 1;                  data >>= 1;
                 STOREINTELWORD(vect.D2, data);                  STOREINTELWORD(vect.D2, data);
Line 670  static void bios0x18_49(void) { Line 674  static void bios0x18_49(void) {
   
         UCWTBL          ucw;          UCWTBL          ucw;
         UINT            i;          UINT            i;
         BYTE            pat[8];          UINT8           pat[8];
         UINT16          tmp;          UINT16          tmp;
         GDCVECT         vect;          GDCVECT         vect;
         UINT16          GBSX1;          UINT16          GBSX1;
Line 768  void bios0x18(void) { Line 772  void bios0x18(void) {
                                                         MEML_READ16(CPU_SS, CPU_SP)));                                                          MEML_READ16(CPU_SS, CPU_SP)));
 #endif  #endif
   
         sti_waiting ^= 1;  
         if (sti_waiting) {                                      // 割込み許可の遊び  
                 CPU_STI;  
                 if (PICEXISTINTR) {  
                         CPU_IP--;  
                         nevent_forceexit();  
                         return;  
                 }  
         }  
         sti_waiting = 0;  
   
         switch(CPU_AH) {          switch(CPU_AH) {
                 case 0x00:                                              // キー・データの読みだし                  case 0x00:                                              // キー・データの読みだし
                         if (mem[MEMB_KB_COUNT]) {                          if (mem[MEMB_KB_COUNT]) {
Line 811  void bios0x18(void) { Line 804  void bios0x18(void) {
                         break;                          break;
   
                 case 0x04:                                              // キー入力状態のセンス                  case 0x04:                                              // キー入力状態のセンス
                         CPU_AH = mem[0x00052a + (CPU_AL & 0x0f)];                          CPU_AH = mem[MEMX_KB_KY_STS + (CPU_AL & 0x0f)];
                         break;                          break;
   
                 case 0x05:                                              // キー入力センス                  case 0x05:                                              // キー入力センス
Line 945  void bios0x18(void) { Line 938  void bios0x18(void) {
                                 if (tmp.r8 == 0x05) {                                  if (tmp.r8 == 0x05) {
                                         CPU_AL = 0;                                          CPU_AL = 0;
                                         CPU_BH = 0;                                          CPU_BH = 0;
                                         TRACEOUT(("success"));  
                                 }                                  }
                                 else {                                  else {
                                         CPU_AL = 1;                                          CPU_AL = 1;
                                         CPU_BH = 1;                                          CPU_BH = 1;
                                         TRACEOUT(("failure"));  
                                 }                                  }
                         }                          }
                         break;                          break;

Removed from v.1.33  
changed lines
  Added in v.1.42


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