src/mess/machine/pce.c
| r9071 | r9072 | |
| 2 | 2 | |
| 3 | 3 | PC Engine CD HW notes: |
| 4 | 4 | |
| 5 | | CD Interface Register 0 - CDC status |
| 5 | CD Interface Register 0x00 - CDC status |
| 6 | 6 | x--- ---- busy signal |
| 7 | 7 | -x-- ---- request signal |
| 8 | 8 | ---x ---- cd signal |
| 9 | 9 | ---- x--- i/o signal |
| 10 | 10 | |
| 11 | | CD Interface Register 3 - BRAM lock / CD status |
| 11 | CD Interface Register 0x03 - BRAM lock / CD status |
| 12 | 12 | -x-- ---- acknowledge signal |
| 13 | 13 | --x- ---- done signal |
| 14 | 14 | ---x ---- bram signal |
| r9071 | r9072 | |
| 16 | 16 | ---- -x-- ADPCM 1 |
| 17 | 17 | ---- --x- CDDA volume |
| 18 | 18 | |
| 19 | | CD Inteface Register 0x0c - ADPCM status |
| 19 | CD Interface Register 0x07 - BRAM unlock / CD status |
| 20 | x--- ---- Enables BRAM |
| 21 | |
| 22 | CD Interface Register 0x0c - ADPCM status |
| 20 | 23 | x--- ---- ? |
| 21 | 24 | ---- x--- ADPCM playback (0) stopped (1) currently playing |
| 22 | | ---- -x-- CD -> DMA transfer busy flag? |
| 25 | ---- -x-- CD -> DMA transfer busy flag |
| 23 | 26 | ---- ---x ADPCM playback (1) stopped (0) currently playing |
| 24 | 27 | |
| 25 | | CD Inteface Register 0x0d - ADPCM address control |
| 28 | CD Interface Register 0x0d - ADPCM address control |
| 26 | 29 | x--- ---- ADPCM reset |
| 27 | 30 | -x-- ---- ADPCM play |
| 28 | 31 | --x- ---- ADPCM repeat |
| r9071 | r9072 | |
| 30 | 33 | ---- x--- ADPCM set read address |
| 31 | 34 | ---- --xx ADPCM set write address |
| 32 | 35 | |
| 36 | CD Interface Register 0x0e - ADPCM playback rate |
| 37 | |
| 38 | CD Interface Register 0x0f - ADPCM fade in/out register |
| 39 | ---- xxxx command setting: |
| 40 | 0x00 ADPCM/CD-DA Fade-in |
| 41 | 0x01 CD-DA fade-in |
| 42 | 0x08 CD-DA fade-out (short) ADPCM fade-in |
| 43 | 0x09 CD-DA fade-out (long) |
| 44 | 0x0a ADPCM fade-out (long) |
| 45 | 0x0c CD-DA fade-out (short) ADPCM fade-in |
| 46 | 0x0d CD-DA fade-out (short) |
| 47 | 0x0e ADPCM fade-out (short) |
| 48 | |
| 33 | 49 | *************************************************************/ |
| 34 | 50 | |
| 35 | 51 | #include "emu.h" |
| r9071 | r9072 | |
| 1097 | 1113 | { |
| 1098 | 1114 | /* Start CD to ADPCM transfer */ |
| 1099 | 1115 | timer_adjust_periodic(pce_cd.adpcm_dma_timer, ATTOTIME_IN_HZ( PCE_CD_DATA_FRAMES_PER_SECOND * 2048 ), 0, ATTOTIME_IN_HZ( PCE_CD_DATA_FRAMES_PER_SECOND * 2048 ) ); |
| 1116 | pce_cd.regs[0x0c] |= 4; |
| 1100 | 1117 | } |
| 1101 | 1118 | if ( ( pce_cd.regs[0x0B] & 0x02 ) && ! ( data & 0x02 ) ) |
| 1102 | 1119 | { |
| r9071 | r9072 | |
| 1107 | 1124 | case 0x0C: /* ADPCM status */ |
| 1108 | 1125 | break; |
| 1109 | 1126 | case 0x0D: /* ADPCM address control */ |
| 1127 | //printf("%02x\n",data); |
| 1110 | 1128 | if ( ( pce_cd.regs[0x0D] & 0x80 ) && ! ( data & 0x80 ) ) |
| 1111 | 1129 | { |
| 1112 | 1130 | /* Reset ADPCM hardware */ |
| r9071 | r9072 | |
| 1168 | 1186 | |
| 1169 | 1187 | static TIMER_CALLBACK( pce_cd_adpcm_dma_timer_callback ) |
| 1170 | 1188 | { |
| 1171 | | if ( pce_cd.scsi_REQ && ! pce_cd.scsi_ACK && ! pce_cd.scsi_CD && pce_cd.scsi_IO ) |
| 1189 | if ( pce_cd.scsi_REQ && ! pce_cd.scsi_ACK && ! pce_cd.scsi_CD && pce_cd.scsi_IO ) |
| 1172 | 1190 | { |
| 1173 | 1191 | pce_cd.adpcm_ram[pce_cd.adpcm_write_ptr] = pce_cd_get_cd_data_byte(machine); |
| 1174 | 1192 | pce_cd.adpcm_write_ptr = ( pce_cd.adpcm_write_ptr + 1 ) & 0xFFFF; |
| 1193 | |
| 1194 | pce_cd.regs[0x0c] &= ~4; |
| 1175 | 1195 | } |
| 1176 | 1196 | } |
| 1177 | 1197 | |
| r9071 | r9072 | |
| 1209 | 1229 | break; |
| 1210 | 1230 | case 0x05: /* Convert PCM data / PCM data */ |
| 1211 | 1231 | case 0x06: /* PCM data */ |
| 1232 | break; |
| 1212 | 1233 | case 0x07: /* BRAM unlock / CD status */ |
| 1213 | 1234 | data = ( pce_cd.bram_locked ? ( data & 0x7F ) : ( data | 0x80 ) ); |
| 1214 | 1235 | break; |
| r9071 | r9072 | |
| 1218 | 1239 | case 0x09: /* ADPCM address (MSB) */ |
| 1219 | 1240 | case 0x0A: /* ADPCM RAM data port */ |
| 1220 | 1241 | case 0x0B: /* ADPCM DMA control */ |
| 1221 | | case 0x0C: /* ADPCM status */ |
| 1222 | 1242 | case 0x0D: /* ADPCM address control */ |
| 1223 | 1243 | case 0x0E: /* ADPCM playback rate */ |
| 1224 | 1244 | case 0x0F: /* ADPCM and CD audio fade timer */ |
| 1225 | 1245 | break; |
| 1246 | case 0x0C: /* ADPCM status */ |
| 1247 | //data |= 1; |
| 1248 | break; |
| 1226 | 1249 | case 0xC1: |
| 1227 | 1250 | data = pce_sys3_card ? 0xAA : 0xFF; |
| 1228 | 1251 | break; |