|
|
| version 1.1, 2003/10/16 17:58:01 | version 1.8, 2004/06/02 11:02:53 |
|---|---|
| Line 1 | Line 1 |
| #include "compiler.h" | #include "compiler.h" |
| #include "memory.h" | #include "cpucore.h" |
| #include "pccore.h" | #include "pccore.h" |
| #include "iocore.h" | #include "iocore.h" |
| #include "cs4231io.h" | #include "cs4231io.h" |
| Line 7 | Line 7 |
| #include "fmboard.h" | #include "fmboard.h" |
| static void IOOUTCALL csctrl_oc24(UINT port, BYTE dat) { | static const UINT8 cs4231dma[] = {0xff,0x00,0x01,0x03,0xff,0xff,0xff,0xff}; |
| static const UINT8 cs4231irq[] = {0xff,0x03,0x06,0x0a,0x0c,0xff,0xff,0xff}; | |
| static void IOOUTCALL csctrl_oc24(UINT port, REG8 dat) { | |
| cs4231.portctrl = dat; | cs4231.portctrl = dat; |
| (void)port; | (void)port; |
| } | } |
| static void IOOUTCALL csctrl_oc2b(UINT port, BYTE dat) { | static void IOOUTCALL csctrl_oc2b(UINT port, REG8 dat) { |
| if ((cs4231.portctrl & 0x2f) == 0x20) { | if ((cs4231.portctrl & 0x2f) == 0x20) { |
| cs4231.port &= 0xff00; | cs4231.port &= 0xff00; |
| Line 22 static void IOOUTCALL csctrl_oc2b(UINT p | Line 26 static void IOOUTCALL csctrl_oc2b(UINT p |
| (void)port; | (void)port; |
| } | } |
| static void IOOUTCALL csctrl_oc2d(UINT port, BYTE dat) { | static void IOOUTCALL csctrl_oc2d(UINT port, REG8 dat) { |
| if ((cs4231.portctrl & 0x2f) == 0x20) { | if ((cs4231.portctrl & 0x2f) == 0x20) { |
| cs4231.port &= 0x00ff; | cs4231.port &= 0x00ff; |
| Line 31 static void IOOUTCALL csctrl_oc2d(UINT p | Line 35 static void IOOUTCALL csctrl_oc2d(UINT p |
| (void)port; | (void)port; |
| } | } |
| static BYTE IOINPCALL csctrl_ic24(UINT port) { | static REG8 IOINPCALL csctrl_ic24(UINT port) { |
| (void)port; | (void)port; |
| return(0x80 | cs4231.portctrl); | return(0x80 | cs4231.portctrl); |
| } | } |
| static BYTE IOINPCALL csctrl_ic2b(UINT port) { | static REG8 IOINPCALL csctrl_ic2b(UINT port) { |
| switch(cs4231.portctrl & 0x0f) { | switch(cs4231.portctrl & 0x0f) { |
| case 0x00: | case 0x00: |
| Line 53 static BYTE IOINPCALL csctrl_ic2b(UINT p | Line 57 static BYTE IOINPCALL csctrl_ic2b(UINT p |
| return(0xff); | return(0xff); |
| } | } |
| static BYTE IOINPCALL csctrl_ic2d(UINT port) { | static REG8 IOINPCALL csctrl_ic2d(UINT port) { |
| switch(cs4231.portctrl & 0x0f) { | switch(cs4231.portctrl & 0x0f) { |
| case 0x00: | case 0x00: |
| Line 74 static BYTE IOINPCALL csctrl_ic2d(UINT p | Line 78 static BYTE IOINPCALL csctrl_ic2d(UINT p |
| void cs4231io_reset(void) { | void cs4231io_reset(void) { |
| cs4231.enable = 0; | cs4231.enable = 1; |
| cs4231.port = 0xffff; | cs4231.port = 0xf40; |
| cs4231.adrs = 0x22; | |
| cs4231.dmairq = cs4231irq[(cs4231.adrs >> 3) & 7]; | |
| cs4231.dmach = cs4231dma[cs4231.adrs & 7]; | |
| if (cs4231.dmach != 0xff) { | |
| dmac_attach(DMADEV_CS4231, cs4231.dmach); | |
| } | |
| TRACEOUT(("CS4231 - IRQ = %d", cs4231.dmairq)); | |
| TRACEOUT(("CS4231 - DMA channel = %d", cs4231.dmach)); | |
| } | } |
| void cs4231io_bind(void) { | void cs4231io_bind(void) { |
| cs4231.enable = 1; | |
| cs4231.port = 0xf40; | |
| cs4231.adrs = 0x21; | |
| cs4231.dmach = 0; | |
| cs4231.dmairq = 0x0c; | |
| cs4231.step = 22050; | |
| sound_streamregist(&cs4231, (SOUNDCB)cs4231_getpcm); | sound_streamregist(&cs4231, (SOUNDCB)cs4231_getpcm); |
| iocore_attachout(0xc24, csctrl_oc24); | iocore_attachout(0xc24, csctrl_oc24); |
| iocore_attachout(0xc2b, csctrl_oc2b); | iocore_attachout(0xc2b, csctrl_oc2b); |
| iocore_attachout(0xc2d, csctrl_oc2d); | iocore_attachout(0xc2d, csctrl_oc2d); |
| Line 96 void cs4231io_bind(void) { | Line 101 void cs4231io_bind(void) { |
| iocore_attachinp(0xc2d, csctrl_ic2d); | iocore_attachinp(0xc2d, csctrl_ic2d); |
| } | } |
| void IOOUTCALL cs4231io_w8(UINT port, BYTE value) { | void IOOUTCALL cs4231io_w8(UINT port, REG8 value) { |
| switch(port & 0x0f) { | switch(port & 0x0f) { |
| case 0: | case 0: |
| #if 0 | |
| cs4231.adrs = value; | cs4231.adrs = value; |
| cs4231.dmairq = dmairq[(value >> 3) & 3]; | cs4231.dmairq = cs4231irq[(value >> 3) & 7]; |
| cs4231.dmach = dmach[value & 7]; | cs4231.dmach = cs4231dma[value & 7]; |
| dmac_detach(DMADEV_CS4231); | |
| if (cs4231.dmach != 0xff) { | |
| dmac_attach(DMADEV_CS4231, cs4231.dmach); | |
| #if 0 | |
| if (cs4231.sdc_enable) { | |
| dmac.dmach[cs4231.dmach].ready = 1; | |
| dmac_check(); | |
| } | |
| #endif | #endif |
| } | |
| break; | break; |
| case 4: | case 4: |
| Line 118 void IOOUTCALL cs4231io_w8(UINT port, BY | Line 131 void IOOUTCALL cs4231io_w8(UINT port, BY |
| case 6: | case 6: |
| cs4231.intflag = 0; | cs4231.intflag = 0; |
| break; | break; |
| case 7: | |
| cs4231_datasend(value); | |
| break; | |
| } | } |
| } | } |
| BYTE IOINPCALL cs4231io_r8(UINT port) { | REG8 IOINPCALL cs4231io_r8(UINT port) { |
| switch(port & 0x0f) { | switch(port & 0x0f) { |
| case 0: | case 0: |