branches/saturn_cdblock/src/emu/sound/scsp.c
| r248501 | r248502 | |
| 30 | 30 | */ |
| 31 | 31 | |
| 32 | 32 | #include "emu.h" |
| 33 | #include "sound/cdda.h" |
| 33 | 34 | #include "scsp.h" |
| 34 | 35 | |
| 35 | 36 | |
| r248501 | r248502 | |
| 281 | 282 | { |
| 282 | 283 | m_mcipd |= irq_type; |
| 283 | 284 | |
| 285 | //machine().scheduler().synchronize(); // force resync |
| 286 | |
| 284 | 287 | if(m_mcipd & m_mcieb) |
| 285 | 288 | m_main_irq_cb(1); |
| 286 | 289 | else |
| r248501 | r248502 | |
| 695 | 698 | break; |
| 696 | 699 | case 8: |
| 697 | 700 | case 9: |
| 698 | | /* Only MSLC could be written. */ |
| 699 | | m_udata.data[0x8/2] &= 0x7800; |
| 701 | /* Only MSLC could be written. */ |
| 702 | m_udata.data[0x8/2] &= 0xf800; /**< @todo Docs claims MSLC to be 0x7800, but Jikkyou Parodius doesn't agree. */ |
| 700 | 703 | break; |
| 701 | 704 | case 0x12: |
| 702 | 705 | case 0x13: |
| r248501 | r248502 | |
| 1010 | 1013 | v= *((unsigned short *) (m_DSP.EFREG+(addr-0xec0)/2)); |
| 1011 | 1014 | else |
| 1012 | 1015 | { |
| 1013 | | /* |
| 1014 | | TODO: Kyuutenkai reads from 0xee0/0xee2, it's an undocumented "DSP internal buffer" register ... |
| 1016 | /**! |
| 1017 | @todo Kyuutenkai reads from 0xee0/0xee2, it's tied with EXTS register(s) also used for CD-Rom Player equalizer. |
| 1018 | This port is actually an external parallel port, directly connected from the CD Block device, hence code is a bit of an hack. |
| 1019 | Kyuutenkai code snippet for reference: |
| 1015 | 1020 | 004A3A: 207C 0010 0EE0 movea.l #$100ee0, A0 |
| 1016 | 1021 | 004A40: 43EA 0090 lea ($90,A2), A1 ;A2=0x700 |
| 1017 | 1022 | 004A44: 6100 0254 bsr $4c9a |
| r248501 | r248502 | |
| 1044 | 1049 | 004CB0: 4CDF 0002 movem.l (A7)+, D1 |
| 1045 | 1050 | 004CB4: 4E75 rts |
| 1046 | 1051 | */ |
| 1047 | | logerror("SCSP: Reading from unmapped register %08x\n",addr); |
| 1052 | logerror("SCSP: Reading from EXTS register %08x\n",addr); |
| 1048 | 1053 | if(addr == 0xee0) |
| 1049 | | v= m_DSP.TEMP[0] >> 16; |
| 1054 | v = space.machine().device<cdda_device>("cdda")->get_channel_volume(0); |
| 1050 | 1055 | if(addr == 0xee2) |
| 1051 | | v= m_DSP.TEMP[0] & 0xffff; |
| 1056 | v = space.machine().device<cdda_device>("cdda")->get_channel_volume(1); |
| 1052 | 1057 | } |
| 1053 | 1058 | } |
| 1054 | 1059 | return v; |