trunk/src/emu/sound/scsp.c
| r20399 | r20400 | |
| 222 | 222 | |
| 223 | 223 | UINT16 dma_regs[3]; |
| 224 | 224 | |
| 225 | UINT16 mcieb; |
| 226 | UINT16 mcipd; |
| 227 | |
| 225 | 228 | int ARTABLE[64], DRTABLE[64]; |
| 226 | 229 | |
| 227 | 230 | SCSPDSP DSP; |
| r20399 | r20400 | |
| 309 | 312 | scsp->Int68kCB(scsp->device, 0); |
| 310 | 313 | } |
| 311 | 314 | |
| 315 | static void MainCheckPendingIRQ(scsp_state *scsp, UINT16 irq_type) |
| 316 | { |
| 317 | scsp->mcipd |= irq_type; |
| 318 | |
| 319 | if(scsp->mcipd & scsp->mcieb) |
| 320 | scsp->main_irq(1); |
| 321 | } |
| 322 | |
| 312 | 323 | static void ResetInterrupts(scsp_state *scsp) |
| 313 | 324 | { |
| 314 | 325 | UINT32 reset = scsp->udata.data[0x22/2]; |
| r20399 | r20400 | |
| 789 | 800 | } |
| 790 | 801 | } |
| 791 | 802 | break; |
| 803 | case 0x1e: |
| 804 | case 0x1f: |
| 805 | if(scsp->Master) |
| 806 | { |
| 807 | if(scsp->udata.data[0x1e/2] & 0x630) |
| 808 | popmessage("SCSP SCIEB enabled %04x, contact MAMEdev",scsp->udata.data[0x1e/2]); |
| 809 | } |
| 810 | break; |
| 792 | 811 | case 0x22: //SCIRE |
| 793 | 812 | case 0x23: |
| 794 | 813 | |
| r20399 | r20400 | |
| 826 | 845 | scsp->IrqMidi=DecodeSCI(scsp,SCIMID); |
| 827 | 846 | } |
| 828 | 847 | break; |
| 848 | case 0x2a: |
| 849 | case 0x2b: |
| 850 | scsp->mcieb = scsp->udata.data[0x2a/2]; |
| 851 | |
| 852 | MainCheckPendingIRQ(scsp, 0); |
| 853 | if(scsp->mcieb & ~0x20) |
| 854 | popmessage("SCSP MCIEB enabled %04x, contact MAMEdev",scsp->mcieb); |
| 855 | break; |
| 856 | case 0x2c: |
| 857 | case 0x2d: |
| 858 | if(scsp->udata.data[0x2c/2] & 0x20) |
| 859 | MainCheckPendingIRQ(scsp, 0x20); |
| 860 | break; |
| 861 | case 0x2e: |
| 862 | case 0x2f: |
| 863 | scsp->mcipd &= ~scsp->udata.data[0x2e/2]; |
| 864 | MainCheckPendingIRQ(scsp, 0); |
| 865 | break; |
| 866 | |
| 829 | 867 | } |
| 830 | 868 | } |
| 831 | 869 | |
| r20399 | r20400 | |
| 878 | 916 | case 0x1c: |
| 879 | 917 | case 0x1d: |
| 880 | 918 | break; |
| 919 | |
| 920 | case 0x2a: |
| 921 | case 0x2b: |
| 922 | scsp->udata.data[0x2a/2] = scsp->mcieb; |
| 923 | break; |
| 924 | |
| 925 | case 0x2c: |
| 926 | case 0x2d: |
| 927 | scsp->udata.data[0x2c/2] = scsp->mcipd; |
| 928 | break; |
| 881 | 929 | } |
| 882 | 930 | } |
| 883 | 931 | |
| r20399 | r20400 | |
| 1322 | 1370 | if(ACCESSING_BITS_8_15 && offset*2 == 0x416) |
| 1323 | 1371 | dma_scsp(space, scsp); |
| 1324 | 1372 | break; |
| 1325 | | case 0x42a: //check main cpu IRQ |
| 1326 | | scsp->main_irq(1); |
| 1327 | | break; |
| 1328 | | case 0x42c: |
| 1329 | | break; |
| 1330 | | case 0x42e: |
| 1331 | | break; |
| 1332 | 1373 | } |
| 1333 | 1374 | } |
| 1334 | 1375 | |