Diff for /np2/cbus/amd98.c between versions 1.11 and 1.16

version 1.11, 2004/02/21 16:35:31 version 1.16, 2005/05/13 05:47:24
Line 179  static void amd98_rhythm(UINT map) { Line 179  static void amd98_rhythm(UINT map) {
   
 // ----  // ----
   
 static void setamd98event(BOOL absolute) {  static void setamd98event(UINT32 cnt, BOOL absolute) {
   
         SINT32  cnt;          if (cnt > 8) {                                                          // 根拠なし
                   cnt *= pccore.multiple;
         if (pit.value[3] > 8) {                                         // 根拠なし  
                 cnt = pccore.multiple * pit.value[3];  
         }          }
         else {          else {
                 cnt = pccore.multiple << 16;                  cnt = pccore.multiple << 16;
Line 197  static void setamd98event(BOOL absolute) Line 195  static void setamd98event(BOOL absolute)
   
 void amd98int(NEVENTITEM item) {  void amd98int(NEVENTITEM item) {
   
           PITCH   pitch;
   
         if (item->flag & NEVENT_SETEVENT) {          if (item->flag & NEVENT_SETEVENT) {
                 if ((pit.mode[3] & 0x0c) == 0x04) {                  pitch = pit.ch + 4;
                   if ((pitch->ctrl & 0x0c) == 0x04) {
                         // レートジェネレータ                          // レートジェネレータ
                         setamd98event(NEVENT_RELATIVE);                          setamd98event(pitch->value, NEVENT_RELATIVE);
                 }                  }
         }          }
         pic_setirq(0x0d);          pic_setirq(0x0d);
Line 212  void amd98int(NEVENTITEM item) { Line 213  void amd98int(NEVENTITEM item) {
   
 static void IOOUTCALL amd_od8(UINT port, REG8 dat) {  static void IOOUTCALL amd_od8(UINT port, REG8 dat) {
   
         opn.opnreg = dat;          opn.addr = dat;
         (void)port;          (void)port;
 }  }
   
 static void IOOUTCALL amd_od9(UINT port, REG8 dat) {  static void IOOUTCALL amd_od9(UINT port, REG8 dat) {
   
         opn.extreg = dat;          opn.addr2 = dat;
         (void)port;          (void)port;
 }  }
   
 static void IOOUTCALL amd_oda(UINT port, REG8 dat) {  static void IOOUTCALL amd_oda(UINT port, REG8 dat) {
   
         if (opn.opnreg < 0x0e) {          UINT    addr;
                 psggen_setreg(&psg1, opn.opnreg, dat);  
           addr = opn.addr;
           if (addr < 0x0e) {
                   psggen_setreg(&psg1, addr, dat);
         }          }
         else if (opn.opnreg == 0x0f) {          else if (addr == 0x0f) {
                 psg1.reg.io2 = dat;                  psg1.reg.io2 = dat;
         }          }
         (void)port;          (void)port;
Line 235  static void IOOUTCALL amd_oda(UINT port, Line 239  static void IOOUTCALL amd_oda(UINT port,
   
 static void IOOUTCALL amd_odb(UINT port, REG8 dat) {  static void IOOUTCALL amd_odb(UINT port, REG8 dat) {
   
         if (opn.extreg < 0x0e) {          UINT    addr;
                 psggen_setreg(&psg2, opn.extreg, dat);  
           addr = opn.addr2;
           if (addr < 0x0e) {
                   psggen_setreg(&psg2, addr, dat);
         }          }
         else if (opn.extreg == 0x0f) {          else if (addr == 0x0f) {
                 REG8 b;                  REG8 b;
                 b = psg2.reg.io2;                  b = psg2.reg.io2;
                 if ((b & 1) > (dat & 1)) {                  if ((b & 1) > (dat & 1)) {
                         b &= 0xc2;                          b &= 0xc2;
                         if (b == 0x42) {                          if (b == 0x42) {
 //                              TRACEOUT(0xfff0, psg_1.reg.io2);  
                                 amd98.psg3reg = psg1.reg.io2;                                  amd98.psg3reg = psg1.reg.io2;
                         }                          }
                         else if (b == 0x40) {                          else if (b == 0x40) {
 //                              TRACEOUT(0xfff1, psg_1.reg.io2);  
                                 if (amd98.psg3reg < 0x0e) {                                  if (amd98.psg3reg < 0x0e) {
                                         psggen_setreg(&psg3, amd98.psg3reg, psg1.reg.io2);                                          psggen_setreg(&psg3, amd98.psg3reg, psg1.reg.io2);
                                 }                                  }
Line 264  static void IOOUTCALL amd_odb(UINT port, Line 269  static void IOOUTCALL amd_odb(UINT port,
   
 static void IOOUTCALL amd_odc(UINT port, REG8 dat) {  static void IOOUTCALL amd_odc(UINT port, REG8 dat) {
   
         pit_setcount(3, dat);          PITCH   pitch;
         setamd98event(NEVENT_ABSOLUTE);  
           pitch = pit.ch + 4;
           if (pit_setcount(pitch, dat)) {
                   return;
           }
           setamd98event(pitch->value, NEVENT_ABSOLUTE);
         (void)port;          (void)port;
 }  }
   
 static void IOOUTCALL amd_ode(UINT port, REG8 dat) {  static void IOOUTCALL amd_ode(UINT port, REG8 dat) {
   
         pit_setflag(3, dat);          pit_setflag(pit.ch + 4, dat);
         (void)port;          (void)port;
 }  }
   
   static REG8 IOINPCALL amd_ida(UINT port) {
   
           UINT    addr;
   
           addr = opn.addr;
           if (addr < 0x0e) {
                   return(psggen_getreg(&psg1, addr));
           }
           else if (addr == 0x0f) {
                   return(psg1.reg.io2);
           }
           (void)port;
           return(0xff);
   }
   
   static REG8 IOINPCALL amd_idb(UINT port) {
   
           UINT    addr;
   
           addr = opn.addr2;
           if (addr < 0x0e) {
                   return(psggen_getreg(&psg2, addr));
           }
           else if (addr == 0x0f) {
                   return(psg2.reg.io2);
           }
           (void)port;
           return(0xff);
   }
   
   #if defined(TRACE)
   static REG8 IOINPCALL amd_inp(UINT port) {
   
           TRACEOUT(("amd inp - %.4x", port));
           return(0xff);
   }
   #endif
   
 // ----  // ----
   
Line 305  void amd98_bind(void) { Line 352  void amd98_bind(void) {
         iocore_attachout(0xdb, amd_odb);          iocore_attachout(0xdb, amd_odb);
         iocore_attachout(0xdc, amd_odc);          iocore_attachout(0xdc, amd_odc);
         iocore_attachout(0xde, amd_ode);          iocore_attachout(0xde, amd_ode);
   
           iocore_attachinp(0xda, amd_ida);
           iocore_attachinp(0xdb, amd_idb);
   #if defined(TRACE)
           iocore_attachinp(0xd8, amd_inp);
           iocore_attachinp(0xd9, amd_inp);
           iocore_attachinp(0xdc, amd_inp);
           iocore_attachinp(0xde, amd_inp);
   #endif
 }  }
   

Removed from v.1.11  
changed lines
  Added in v.1.16


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