trunk/src/mess/machine/psxcd.c
| r22560 | r22561 | |
| 148 | 148 | m_regs.sr = 0x18; |
| 149 | 149 | m_regs.ir = 0; |
| 150 | 150 | m_regs.imr = 0x1f; |
| 151 | | sechead = 0; |
| 152 | 151 | sectail = 0; |
| 152 | m_cursec = 0; |
| 153 | 153 | m_mute = false; |
| 154 | 154 | m_dmaload = false; |
| 155 | m_int1 = NULL; |
| 155 | 156 | curpos.w = 0; |
| 156 | 157 | } |
| 157 | 158 | |
| r22560 | r22561 | |
| 281 | 282 | case 0x03: |
| 282 | 283 | if((data & 0x80) && !m_dmaload) |
| 283 | 284 | { |
| 284 | | if(sechead == sectail) |
| 285 | | break; |
| 286 | | |
| 287 | 285 | m_dmaload = true; |
| 288 | | memcpy(m_transbuf, secbuf[sechead], raw_sector_size); |
| 286 | memcpy(m_transbuf, secbuf[m_cursec], raw_sector_size); |
| 289 | 287 | m_regs.sr |= 0x40; |
| 290 | | sechead++; |
| 291 | | sechead %= sector_buffer_size; |
| 292 | 288 | |
| 289 | m_cursec++; |
| 290 | m_cursec %= sector_buffer_size; |
| 291 | |
| 293 | 292 | switch(mode & mode_size_mask) |
| 294 | 293 | { |
| 295 | 294 | case 0x00: |
| r22560 | r22561 | |
| 325 | 324 | if(res_queue && !m_regs.ir) |
| 326 | 325 | { |
| 327 | 326 | command_result *res = res_queue; |
| 327 | if(res == m_int1) |
| 328 | m_int1 = NULL; |
| 329 | |
| 328 | 330 | res_queue = res->next; |
| 329 | 331 | global_free(res); |
| 330 | 332 | m_regs.sr &= ~0x20; |
| r22560 | r22561 | |
| 935 | 937 | } |
| 936 | 938 | else |
| 937 | 939 | { |
| 938 | | cmd_complete(prepare_result(intr_dataready)); |
| 940 | if(!m_int1) |
| 941 | m_cursec = sectail; |
| 942 | |
| 943 | m_int1 = prepare_result(intr_dataready); |
| 944 | cmd_complete(m_int1); |
| 939 | 945 | sectail++; |
| 940 | 946 | sectail %= sector_buffer_size; |
| 941 | | |
| 942 | | if(sectail == sechead) |
| 943 | | verboselog(machine(), 0, "psxcd: sector buffer overrun\n"); |
| 944 | 947 | } |
| 945 | 948 | |
| 946 | 949 | curpos.b[F]++; |
| r22560 | r22561 | |
| 1083 | 1086 | send_result(intr_complete); |
| 1084 | 1087 | status |= status_reading; |
| 1085 | 1088 | |
| 1086 | | sechead=sectail=0; |
| 1089 | m_cursec=sectail=0; |
| 1087 | 1090 | |
| 1088 | 1091 | unsigned int cyc=read_sector_cycles; |
| 1089 | 1092 | if (mode&mode_double_speed) cyc>>=1; |
| r22560 | r22561 | |
| 1105 | 1108 | |
| 1106 | 1109 | status|=status_playing; |
| 1107 | 1110 | |
| 1108 | | sechead=sectail=0; |
| 1111 | m_cursec=sectail=0; |
| 1109 | 1112 | |
| 1110 | 1113 | if (mode&mode_autopause) |
| 1111 | 1114 | { |