src/emu/machine/scsicd.c
| r14728 | r14729 | |
| 607 | 607 | // indicate max volume |
| 608 | 608 | data[9] = data[11] = data[13] = data[15] = 0xff; |
| 609 | 609 | break; |
| 610 | case 0x2a: // Page capabilities |
| 611 | data[0] = 0x2a; |
| 612 | data[1] = 0x14; // page length |
| 613 | data[2] = 0x00; data[3] = 0x00; // CD-R only |
| 614 | data[4] = 0x01; // can play audio |
| 615 | data[5] = 0; |
| 616 | data[6] = 0; |
| 617 | data[7] = 0; |
| 618 | data[8] = 0x02; data[9] = 0xc0; // 4x speed |
| 619 | data[10] = 0; |
| 620 | data[11] = 2; // two volumen levels |
| 621 | data[12] = 0x00; data[13] = 0x00; // buffer |
| 622 | data[14] = 0x02; data[15] = 0xc0; // 4x read speed |
| 623 | data[16] = 0; |
| 624 | data[17] = 0; |
| 625 | data[18] = 0; |
| 626 | data[19] = 0; |
| 627 | data[20] = 0; |
| 628 | data[21] = 0; |
| 629 | break; |
| 610 | 630 | |
| 611 | 631 | default: |
| 612 | 632 | logerror("SCSICD: MODE SENSE unknown page %x\n", command[2] & 0x3f); |
src/mess/machine/isa_ide_cd.c
| r14728 | r14729 | |
| 47 | 47 | int reg, data;
|
| 48 | 48 | if (mem_mask == 0x0000ffff) // word-wide command read
|
| 49 | 49 | {
|
| 50 | | logerror("ATAPI: packet read = %04x\n", m_atapi_data[m_atapi_data_ptr]);
|
| 50 | //logerror("ATAPI: packet read = %02x%02x\n", m_atapi_data[m_atapi_data_ptr+1],m_atapi_data[m_atapi_data_ptr]);
|
| 51 | 51 | |
| 52 | 52 | // assert IRQ and drop DRQ
|
| 53 | 53 | if (m_atapi_data_ptr == 0 && m_atapi_data_len == 0)
|
| r14728 | r14729 | |
| 78 | 78 | }
|
| 79 | 79 | else
|
| 80 | 80 | {
|
| 81 | | logerror("ATAPI: dropping DRQ\n");
|
| 81 | //logerror("ATAPI: dropping DRQ\n");
|
| 82 | 82 | atapi_regs[ATAPI_REG_CMDSTATUS] = 0;
|
| 83 | | atapi_regs[ATAPI_REG_INTREASON] = ATAPI_INTREASON_IO;
|
| 83 | atapi_regs[ATAPI_REG_INTREASON] = ATAPI_INTREASON_IO | ATAPI_INTREASON_COMMAND;
|
| 84 | 84 | }
|
| 85 | 85 | |
| 86 | 86 | atapi_regs[ATAPI_REG_COUNTLOW] = m_atapi_xferlen & 0xff;
|
| r14728 | r14729 | |
| 102 | 102 | if( m_atapi_xferlen == 0 )
|
| 103 | 103 | {
|
| 104 | 104 | atapi_regs[ATAPI_REG_CMDSTATUS] = 0;
|
| 105 | | atapi_regs[ATAPI_REG_INTREASON] = ATAPI_INTREASON_IO;
|
| 105 | atapi_regs[ATAPI_REG_INTREASON] = ATAPI_INTREASON_IO | ATAPI_INTREASON_COMMAND;
|
| 106 | 106 | atapi_irq(this, ASSERT_LINE);
|
| 107 | 107 | }
|
| 108 | 108 | }
|
| r14728 | r14729 | |
| 129 | 129 | }
|
| 130 | 130 | if (m_cur_drive==1) return 0x00;
|
| 131 | 131 | data = atapi_regs[reg];
|
| 132 | | logerror("ATAPI: reg %d = %x (offset %x mask %x) [read]\n", reg, data, offset, mem_mask); |
| 132 | //logerror("ATAPI: reg %d = %x (offset %x mask %x) [%08x][read]\n", reg, data, offset, mem_mask,cpu_get_pc(machine().device("maincpu"))); |
| 133 | 133 | data <<= shift;
|
| 134 | 134 | }
|
| 135 | 135 | return data;
|
| r14728 | r14729 | |
| 147 | 147 | |
| 148 | 148 | if (m_atapi_cdata_wait)
|
| 149 | 149 | {
|
| 150 | | logerror("ATAPI: waiting, ptr %d wait %d\n", m_atapi_data_ptr, m_atapi_cdata_wait);
|
| 150 | //logerror("ATAPI: waiting, ptr %d wait %d\n", m_atapi_data_ptr, m_atapi_cdata_wait);
|
| 151 | 151 | if (m_atapi_data_ptr == m_atapi_cdata_wait)
|
| 152 | 152 | {
|
| 153 | 153 | // send it to the device
|
| r14728 | r14729 | |
| 274 | 274 | if (reg==6) m_cur_drive = (data & 0x10) >> 4;
|
| 275 | 275 | if (m_cur_drive==1) return;
|
| 276 | 276 | atapi_regs[reg] = data;
|
| 277 | | logerror("ATAPI: reg %d = %x (offset %x mask %x)\n", reg, data, offset, mem_mask);
|
| 277 | //logerror("ATAPI: reg %d = %x (offset %x mask %x)\n", reg, data, offset, mem_mask);
|
| 278 | 278 | |
| 279 | 279 | if (reg == ATAPI_REG_CMDSTATUS)
|
| 280 | 280 | {
|