--- np2/sound/adpcmg.c 2003/10/18 09:02:38 1.2 +++ np2/sound/adpcmg.c 2004/02/06 17:10:32 1.5 @@ -10,11 +10,11 @@ static const UINT adpcmdeltatable[8] = { 228, 228, 228, 228, 308, 408, 512, 612}; -BYTE SOUNDCALL adpcm_readsample(ADPCM ad) { +REG8 SOUNDCALL adpcm_readsample(ADPCM ad) { UINT32 pos; - BYTE data; - BYTE ret; + REG8 data; + REG8 ret; if ((ad->reg.ctrl1 & 0x60) == 0x20) { pos = ad->pos & 0x1fffff; @@ -24,7 +24,7 @@ BYTE SOUNDCALL adpcm_readsample(ADPCM ad } else { const BYTE *ptr; - BYTE bit; + REG8 bit; UINT tmp; ptr = ad->buf + ((pos >> 3) & 0x7fff); bit = 1 << (pos & 7); @@ -36,7 +36,7 @@ BYTE SOUNDCALL adpcm_readsample(ADPCM ad tmp += (ptr[0x28000] & bit) << 5; tmp += (ptr[0x30000] & bit) << 6; tmp += (ptr[0x38000] & bit) << 7; - data = (BYTE)(tmp >> (pos & 7)); + data = (REG8)(tmp >> (pos & 7)); pos++; } if (pos != ad->stop) { @@ -58,7 +58,7 @@ BYTE SOUNDCALL adpcm_readsample(ADPCM ad return(ret); } -void SOUNDCALL adpcm_datawrite(ADPCM ad, BYTE data) { +void SOUNDCALL adpcm_datawrite(ADPCM ad, REG8 data) { UINT32 pos; @@ -69,8 +69,8 @@ void SOUNDCALL adpcm_datawrite(ADPCM ad, } else { BYTE *ptr; - BYTE bit; - BYTE mask; + UINT8 bit; + UINT8 mask; ptr = ad->buf + ((pos >> 3) & 0x7fff); bit = 1 << (pos & 7); mask = ~bit; @@ -108,7 +108,7 @@ void SOUNDCALL adpcm_datawrite(ADPCM ad, } pos++; } - if (pos != ad->stop) { + if (pos == ad->stop) { pos &= 0x1fffff; ad->status |= 4; } @@ -129,14 +129,14 @@ static void SOUNDCALL getadpcmdata(ADPCM pos = ad->pos; if (!(ad->reg.ctrl2 & 2)) { data = ad->buf[(pos >> 3) & 0x3ffff]; - pos += ADPCM_NBR + 4; if (!(pos & ADPCM_NBR)) { data >>= 4; } + pos += ADPCM_NBR + 4; } else { const BYTE *ptr; - BYTE bit; + REG8 bit; UINT tmp; ptr = ad->buf + ((pos >> 3) & 0x7fff); bit = 1 << (pos & 7); @@ -160,10 +160,9 @@ static void SOUNDCALL getadpcmdata(ADPCM dir = data & 8; data &= 7; dlt = adpcmdeltatable[data] * ad->delta; - dlt -= 12; dlt >>= 8; - if (dlt < 126) { - dlt = 126; + if (dlt < 127) { + dlt = 127; } else if (dlt > 24000) { dlt = 24000; @@ -191,7 +190,7 @@ static void SOUNDCALL getadpcmdata(ADPCM if (ad->reg.ctrl1 & 0x10) { pos = ad->start; ad->samp = 0; - ad->delta = 128; + ad->delta = 127; } else { pos &= 0x1fffff;