Diff for /np2/cbus/board14.c between versions 1.1 and 1.2

version 1.1, 2003/10/16 17:58:00 version 1.2, 2003/11/12 20:02:54
Line 7 Line 7
 #include        "fmboard.h"  #include        "fmboard.h"
   
   
   // どうも 8253C-2は 4MHz/16らすい?
   // とりあえず 1996800/8を入力してみる... (ver0.71)
   
   
   // ---- 8253C-2
   
   static UINT16 pit3_latch(void) {
   
           SINT32  clock;
   
           clock = nevent_getremain(NEVENT_MUSICGEN);
           if (clock >= 0) {
                   clock /= pc.multiple;
                   clock /= 8;
                   if (pc.baseclock == PCBASECLOCK25) {
                           clock = clock * 13 / 16;
                   }
                   return((UINT16)clock);
           }
           return(0);
   }
   
   static void pit3_setflag(BYTE value) {
   
           pit.flag[3] = 0;
           if (value & 0x30) {
                   pit.mode[3] = value;
           }
           else {
                   pit.mode[3] &= ~0x30;
                   pit.latch[3] = pit3_latch();
           }
   }
   
   static BOOL pit3_setcount(BYTE value) {
   
           switch(pit.mode[3] & 0x30) {
                   case 0x10:              // access low
                           pit.value[3] = value;
                           break;
   
                   case 0x20:              // access high
                           pit.value[3] = value << 8;
                           break;
   
                   case 0x30:              // access word
                           if (!(pit.flag[3] & 2)) {
                                   pit.value[3] &= 0xff00;
                                   pit.value[3] += value;
                                   pit.flag[3] ^= 2;
                                   return(TRUE);
                           }
                           pit.value[3] &= 0x00ff;
                           pit.value[3] += value << 8;
                           pit.flag[3] ^= 2;
                           break;
           }
           return(FALSE);
   }
   
   static BYTE pit3_getcount(void) {
   
           BYTE    ret;
           UINT16  w;
   
           if (!(pit.mode[3] & 0x30)) {
                   w = pit.latch[3];
           }
           else {
                   w = pit3_latch();
           }
           switch(pit.mode[3] & 0x30) {
                   case 0x10:                                              // access low
                           return((BYTE)w);
   
                   case 0x20:                                              // access high
                           return((BYTE)(w >> 8));
           }
                                                                                   // access word
           if (!(pit.flag[3] & 1)) {
                   ret = (BYTE)w;
           }
           else {
                   ret = (BYTE)(w >> 8);
           }
           pit.flag[3] ^= 1;
           return(ret);
   }
   
   
 // ---- intr  // ---- intr
   
 static void setmusicgenevent(BOOL absolute) {  static void setmusicgenevent(BOOL absolute) {
   
         SINT32  cnt;          SINT32  cnt;
   
         if (pit.value[3].w > 8) {                                               // 根拠なし          if (pit.value[3] > 4) {                                         // 根拠なし
                 cnt = pc.multiple * pit.value[3].w;                  cnt = pc.multiple * pit.value[3];
         }          }
         else {          else {
                 cnt = pc.multiple << 16;                  cnt = pc.multiple << 16;
         }          }
           if (pc.baseclock == PCBASECLOCK25) {
                   cnt = cnt * 16 / 13;                                    // cnt * 2457600 / 1996800
           }
           cnt *= 8;
         nevent_set(NEVENT_MUSICGEN, cnt, musicgenint, absolute);          nevent_set(NEVENT_MUSICGEN, cnt, musicgenint, absolute);
 }  }
   
Line 81  static void IOOUTCALL musicgen_o188(UINT Line 175  static void IOOUTCALL musicgen_o188(UINT
   
 static void IOOUTCALL musicgen_o18c(UINT port, BYTE dat) {  static void IOOUTCALL musicgen_o18c(UINT port, BYTE dat) {
   
         itimer_setcount(3, dat);          if (!pit3_setcount(dat)) {
         setmusicgenevent(NEVENT_ABSOLUTE);                  setmusicgenevent(NEVENT_ABSOLUTE);
           }
         (void)port;          (void)port;
 }  }
   
 static void IOOUTCALL musicgen_o18e(UINT port, BYTE dat) {  static void IOOUTCALL musicgen_o18e(UINT port, BYTE dat) {
   
         itimer_setflag(3, dat);          pit3_setflag(dat);
         (void)port;          (void)port;
 }  }
   
Line 125  static BYTE IOINPCALL musicgen_i188(UINT Line 220  static BYTE IOINPCALL musicgen_i188(UINT
 static BYTE IOINPCALL musicgen_i18c(UINT port) {  static BYTE IOINPCALL musicgen_i18c(UINT port) {
   
         (void)port;          (void)port;
         return(itimer_getcount(3));          return(pit3_getcount());
 }  }
   
 static BYTE IOINPCALL musicgen_i18e(UINT port) {  static BYTE IOINPCALL musicgen_i18e(UINT port) {
   
         (void)port;          (void)port;
   #if 1
           return(0x80);                                   // INT-5
   #else
         return(0x40);                                   // INT-5          return(0x40);                                   // INT-5
   #endif
 }  }
   
   

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


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