|
|
| version 1.1, 2003/10/16 17:58:08 | version 1.5, 2004/01/05 14:16:35 |
|---|---|
| Line 6 | Line 6 |
| #include "fmboard.h" | #include "fmboard.h" |
| extern CS4231CFG cs4231cfg; | |
| // ---- 補完くらいしようよ… | // ---- 補完くらいしようよ… |
| BYTE cs4231_nodecode(void) { | REG8 cs4231_nodecode(DMACH dmach) { |
| (void)dmach; | |
| return(0); | return(0); |
| } | } |
| static BYTE cs4231_pcm8s(void) { | static REG8 cs4231_pcm8s(DMACH dmach) { |
| SINT32 leng; | SINT32 leng; |
| UINT indatas; | UINT indatas; |
| Line 21 static BYTE cs4231_pcm8s(void) { | Line 25 static BYTE cs4231_pcm8s(void) { |
| UINT32 ctime; | UINT32 ctime; |
| UINT wpos; | UINT wpos; |
| leng = dmac.dmach[0].leng.w; | leng = dmach->leng.w; |
| if ((leng >= 2) && (cs4231.bufsize < CS4231_BUFFERS)) { | if ((leng >= 2) && (cs4231.bufsize < CS4231_BUFFERS)) { |
| indatas = cs4231.bufsize; | indatas = cs4231.bufsize; |
| ctime = cs4231.curtime; | ctime = cs4231.curtime; |
| wpos = cs4231.writepos; | wpos = cs4231.writepos; |
| addr = dmac.dmach[0].adrs.d; | addr = dmach->adrs.d; |
| do { | do { |
| while(ctime < cs4231.step) { | while(ctime < cs4231.step) { |
| ctime += opna_rate; | ctime += cs4231cfg.rate; |
| leng -= 2; | leng -= 2; |
| if (leng < 0) { | if (leng < 0) { |
| leng = 0; | leng = 0; |
| goto p8s_stop; | goto p8s_stop; |
| } | } |
| cs4231.pcmdata[0] = (i286_memoryread(addr+0) ^ 0x80) << 8; | cs4231.pcmdata[0] = (i286_memoryread(addr + 0) ^ 0x80) << 8; |
| cs4231.pcmdata[1] = (i286_memoryread(addr+1) ^ 0x80) << 8; | cs4231.pcmdata[1] = (i286_memoryread(addr + 1) ^ 0x80) << 8; |
| addr += 2; | addr += 2; |
| } | } |
| ctime -= cs4231.step; | ctime -= cs4231.step; |
| Line 46 static BYTE cs4231_pcm8s(void) { | Line 50 static BYTE cs4231_pcm8s(void) { |
| } while(indatas < CS4231_BUFFERS); | } while(indatas < CS4231_BUFFERS); |
| p8s_stop: | p8s_stop: |
| dmac.dmach[0].leng.w = leng; | dmach->leng.w = leng; |
| dmac.dmach[0].adrs.d = addr; | dmach->adrs.d = addr; |
| cs4231.bufsize = indatas; | cs4231.bufsize = indatas; |
| cs4231.curtime = ctime; | cs4231.curtime = ctime; |
| cs4231.writepos = wpos; | cs4231.writepos = wpos; |
| Line 55 p8s_stop: | Line 59 p8s_stop: |
| return((leng < 2)?1:0); | return((leng < 2)?1:0); |
| } | } |
| static BYTE cs4231_pcm8m(void) { | static REG8 cs4231_pcm8m(DMACH dmach) { |
| SINT32 leng; | SINT32 leng; |
| UINT indatas; | UINT indatas; |
| Line 64 static BYTE cs4231_pcm8m(void) { | Line 68 static BYTE cs4231_pcm8m(void) { |
| UINT wpos; | UINT wpos; |
| SINT16 pcmdata; | SINT16 pcmdata; |
| leng = dmac.dmach[0].leng.w; | leng = dmach->leng.w; |
| if ((leng > 0) && (cs4231.bufsize < CS4231_BUFFERS)) { | if ((leng > 0) && (cs4231.bufsize < CS4231_BUFFERS)) { |
| indatas = cs4231.bufsize; | indatas = cs4231.bufsize; |
| ctime = cs4231.curtime; | ctime = cs4231.curtime; |
| wpos = cs4231.writepos; | wpos = cs4231.writepos; |
| addr = dmac.dmach[0].adrs.d; | addr = dmach->adrs.d; |
| do { | do { |
| while(ctime < cs4231.step) { | while(ctime < cs4231.step) { |
| ctime += opna_rate; | ctime += cs4231cfg.rate; |
| leng -= 1; | leng -= 1; |
| if (leng < 0) { | if (leng < 0) { |
| leng = 0; | leng = 0; |
| Line 90 static BYTE cs4231_pcm8m(void) { | Line 94 static BYTE cs4231_pcm8m(void) { |
| } while(indatas < CS4231_BUFFERS); | } while(indatas < CS4231_BUFFERS); |
| p8m_stop: | p8m_stop: |
| dmac.dmach[0].leng.w = leng; | dmach->leng.w = leng; |
| dmac.dmach[0].adrs.d = addr; | dmach->adrs.d = addr; |
| cs4231.bufsize = indatas; | cs4231.bufsize = indatas; |
| cs4231.curtime = ctime; | cs4231.curtime = ctime; |
| cs4231.writepos = wpos; | cs4231.writepos = wpos; |
| Line 99 p8m_stop: | Line 103 p8m_stop: |
| return((leng == 0)?1:0); | return((leng == 0)?1:0); |
| } | } |
| static BYTE cs4231_pcm16s(void) { | static REG8 cs4231_pcm16s(DMACH dmach) { |
| SINT32 leng; | SINT32 leng; |
| UINT indatas; | UINT indatas; |
| Line 108 static BYTE cs4231_pcm16s(void) { | Line 112 static BYTE cs4231_pcm16s(void) { |
| UINT wpos; | UINT wpos; |
| UINT16 samp; | UINT16 samp; |
| leng = dmac.dmach[0].leng.w; | leng = dmach->leng.w; |
| if ((leng >= 4) && (cs4231.bufsize < CS4231_BUFFERS)) { | if ((leng >= 4) && (cs4231.bufsize < CS4231_BUFFERS)) { |
| indatas = cs4231.bufsize; | indatas = cs4231.bufsize; |
| ctime = cs4231.curtime; | ctime = cs4231.curtime; |
| wpos = cs4231.writepos; | wpos = cs4231.writepos; |
| addr = dmac.dmach[0].adrs.d; | addr = dmach->adrs.d; |
| // TRACEOUT(("addr: %x", addr)); | // TRACEOUT(("addr: %x", addr)); |
| do { | do { |
| while(ctime < cs4231.step) { | while(ctime < cs4231.step) { |
| ctime += opna_rate; | ctime += cs4231cfg.rate; |
| leng -= 4; | leng -= 4; |
| if (leng < 0) { | if (leng < 0) { |
| leng = 0; | leng = 0; |
| Line 136 static BYTE cs4231_pcm16s(void) { | Line 140 static BYTE cs4231_pcm16s(void) { |
| } while(indatas < CS4231_BUFFERS); | } while(indatas < CS4231_BUFFERS); |
| p16s_stop: | p16s_stop: |
| dmac.dmach[0].leng.w = leng; | dmach->leng.w = leng; |
| dmac.dmach[0].adrs.d = addr; | dmach->adrs.d = addr; |
| cs4231.bufsize = indatas; | cs4231.bufsize = indatas; |
| cs4231.curtime = ctime; | cs4231.curtime = ctime; |
| cs4231.writepos = wpos; | cs4231.writepos = wpos; |
| Line 145 p16s_stop: | Line 149 p16s_stop: |
| return((leng < 4)?1:0); | return((leng < 4)?1:0); |
| } | } |
| static BYTE cs4231_pcm16m(void) { | static REG8 cs4231_pcm16m(DMACH dmach) { |
| SINT32 leng; | SINT32 leng; |
| UINT indatas; | UINT indatas; |
| Line 154 static BYTE cs4231_pcm16m(void) { | Line 158 static BYTE cs4231_pcm16m(void) { |
| UINT wpos; | UINT wpos; |
| UINT16 samp; | UINT16 samp; |
| leng = dmac.dmach[0].leng.w; | leng = dmach->leng.w; |
| if ((leng >= 2) && (cs4231.bufsize < CS4231_BUFFERS)) { | if ((leng >= 2) && (cs4231.bufsize < CS4231_BUFFERS)) { |
| indatas = cs4231.bufsize; | indatas = cs4231.bufsize; |
| ctime = cs4231.curtime; | ctime = cs4231.curtime; |
| wpos = cs4231.writepos; | wpos = cs4231.writepos; |
| addr = dmac.dmach[0].adrs.d; | addr = dmach->adrs.d; |
| do { | do { |
| while(ctime < cs4231.step) { | while(ctime < cs4231.step) { |
| ctime += opna_rate; | ctime += cs4231cfg.rate; |
| leng -= 2; | leng -= 2; |
| if (leng < 0) { | if (leng < 0) { |
| leng = 0; | leng = 0; |
| Line 181 static BYTE cs4231_pcm16m(void) { | Line 185 static BYTE cs4231_pcm16m(void) { |
| } while(indatas < CS4231_BUFFERS); | } while(indatas < CS4231_BUFFERS); |
| p16m_stop: | p16m_stop: |
| dmac.dmach[0].leng.w = leng; | dmach->leng.w = leng; |
| dmac.dmach[0].adrs.d = addr; | dmach->adrs.d = addr; |
| cs4231.bufsize = indatas; | cs4231.bufsize = indatas; |
| cs4231.curtime = ctime; | cs4231.curtime = ctime; |
| cs4231.writepos = wpos; | cs4231.writepos = wpos; |