|
|
| version 1.2, 2003/10/20 06:36:33 | version 1.5, 2004/02/06 17:10:32 |
|---|---|
| Line 6 | Line 6 |
| ADPCMCFG adpcmcfg; | ADPCMCFG adpcmcfg; |
| void adpcm_initialize(UINT rate) { | void adpcm_initialize(UINT rate) { |
| adpcmcfg.rate = rate; | adpcmcfg.rate = rate; |
| Line 21 void adpcm_reset(ADPCM ad) { | Line 20 void adpcm_reset(ADPCM ad) { |
| ZeroMemory(ad, sizeof(_ADPCM)); | ZeroMemory(ad, sizeof(_ADPCM)); |
| ad->mask = 0; // (BYTE)~0x1c; | ad->mask = 0; // (BYTE)~0x1c; |
| ad->delta = 128; | ad->delta = 127; |
| STOREINTELWORD(ad->reg.stop, 0x0002); | STOREINTELWORD(ad->reg.stop, 0x0002); |
| STOREINTELWORD(ad->reg.limit, 0xffff); | STOREINTELWORD(ad->reg.limit, 0xffff); |
| ad->stop = 0x000060; | ad->stop = 0x000060; |
| Line 46 void adpcm_update(ADPCM ad) { | Line 45 void adpcm_update(ADPCM ad) { |
| ad->level = (ad->reg.level * adpcmcfg.vol) >> 4; | ad->level = (ad->reg.level * adpcmcfg.vol) >> 4; |
| } | } |
| void adpcm_setreg(ADPCM ad, BYTE reg, BYTE value) { | void adpcm_setreg(ADPCM ad, REG8 reg, REG8 value) { |
| UINT32 addr; | UINT32 addr; |
| sound_sync(); | |
| ((BYTE *)(&ad->reg))[reg] = value; | ((BYTE *)(&ad->reg))[reg] = value; |
| switch(reg) { | switch(reg) { |
| case 0x00: // control1 | case 0x00: // control1 |
| Line 57 void adpcm_setreg(ADPCM ad, BYTE reg, BY | Line 57 void adpcm_setreg(ADPCM ad, BYTE reg, BY |
| ad->play = 0x20; | ad->play = 0x20; |
| ad->pos = ad->start; | ad->pos = ad->start; |
| ad->samp = 0; | ad->samp = 0; |
| ad->delta = 128; | ad->delta = 127; |
| ad->remain = 0; | ad->remain = 0; |
| } | } |
| if (value & 1) { | if (value & 1) { |
| Line 115 void adpcm_setreg(ADPCM ad, BYTE reg, BY | Line 115 void adpcm_setreg(ADPCM ad, BYTE reg, BY |
| } | } |
| } | } |
| BYTE adpcm_status(ADPCM ad) { | REG8 adpcm_status(ADPCM ad) { |
| return(((ad->status | 8) & ad->mask) | ad->play); | return(((ad->status | 8) & ad->mask) | ad->play); |
| } | } |