src/mame/drivers/megadriv.c
| r9432 | r9433 | |
| 397 | 397 | { |
| 398 | 398 | UINT8 buffer[5]; |
| 399 | 399 | UINT8 ctrl; |
| 400 | UINT8 scd_status; // SCSI status? |
| 400 | 401 | }segacd_cdd; |
| 401 | 402 | #ifdef MESS |
| 402 | 403 | static struct |
| r9432 | r9433 | |
| 5108 | 5109 | segacd.end_frame = segacd.last_frame; |
| 5109 | 5110 | } |
| 5110 | 5111 | } |
| 5112 | |
| 5113 | segacd_cdd.scd_status = 0x00; // initial state |
| 5111 | 5114 | } |
| 5112 | 5115 | #endif |
| 5113 | 5116 | |
| r9432 | r9433 | |
| 5365 | 5368 | |
| 5366 | 5369 | static void segacd_cdd_get_status(running_machine *machine) |
| 5367 | 5370 | { |
| 5368 | | segacd_cdd.buffer[0] = 0; |
| 5369 | | segacd_cdd.buffer[1] = 0; |
| 5370 | | segacd_cdd.buffer[2] = 0; |
| 5371 | | segacd_cdd.buffer[3] = 0; |
| 5372 | | segacd_cdd.buffer[4] = 0; |
| 5371 | //segacd_cdd.buffer[0] = 0; |
| 5372 | //segacd_cdd.buffer[1] = 0; |
| 5373 | //segacd_cdd.buffer[2] = 0; |
| 5374 | //segacd_cdd.buffer[3] = 0; |
| 5375 | //segacd_cdd.buffer[4] = 0; |
| 5373 | 5376 | |
| 5374 | 5377 | cdd_hock_irq(machine,1); |
| 5375 | 5378 | } |
| r9432 | r9433 | |
| 5390 | 5393 | |
| 5391 | 5394 | static void segacd_cdd_get_toc_info(running_machine *machine) |
| 5392 | 5395 | { |
| 5393 | | segacd_cdd.buffer[0] = (segacd_cdd_tx[3] & 0xf) | (segacd_cdd.buffer[0] & 0xf0); |
| 5396 | segacd_cdd.buffer[0] = (segacd_cdd_tx[3] & 0xf) | (segacd_cdd.scd_status & 0xf0); // TODO: remove me |
| 5394 | 5397 | |
| 5395 | 5398 | #if LOG_CDD |
| 5396 | 5399 | printf("CDD: TOC command %s issued\n",segacd_cdd_get_toc_cmd[segacd_cdd_tx[3] & 0xf]); |
| r9432 | r9433 | |
| 5429 | 5432 | |
| 5430 | 5433 | frame = segacd.toc->tracks[segacd.toc->numtrks-1].physframeofs; |
| 5431 | 5434 | frame += segacd.toc->tracks[segacd.toc->numtrks-1].frames; |
| 5435 | frame += 150; // 2 seconds of pre-gap |
| 5432 | 5436 | msf = lba_to_msf( frame ); |
| 5433 | 5437 | |
| 5434 | | segacd_cdd.buffer[0] = (0x3 & 0xf) | (segacd_cdd.buffer[0] & 0xf0); |
| 5438 | segacd_cdd.buffer[0] = (0x3 & 0xf) | (segacd_cdd.scd_status & 0xf0); |
| 5435 | 5439 | segacd_cdd.buffer[1] = ((msf >> 16) & 0xff); |
| 5436 | 5440 | segacd_cdd.buffer[2] = ((msf >> 8) & 0xff); |
| 5437 | 5441 | segacd_cdd.buffer[3] = ((msf >> 0) & 0xff); |
| 5438 | 5442 | segacd_cdd.buffer[4] = 0; |
| 5439 | 5443 | |
| 5444 | printf("%02x %02x %02x %02x %02x\n",segacd_cdd.buffer[0],segacd_cdd.buffer[1],segacd_cdd.buffer[2],segacd_cdd.buffer[3],segacd_cdd.buffer[4]); |
| 5445 | |
| 5440 | 5446 | cdd_hock_irq(machine,1); |
| 5441 | 5447 | return; |
| 5442 | 5448 | |
| 5443 | 5449 | } |
| 5444 | 5450 | case 0x4: //Get First and Last Track Number |
| 5445 | 5451 | { |
| 5446 | | segacd_cdd.buffer[0] = (0x4 & 0xf) | (segacd_cdd.buffer[0] & 0xf0); |
| 5452 | segacd_cdd.scd_status = 0x40; |
| 5453 | segacd_cdd.buffer[0] = (0x4 & 0xf) | (segacd_cdd.scd_status & 0xf0); |
| 5447 | 5454 | segacd_cdd.buffer[1] = dec_2_bcd(1); |
| 5448 | | segacd_cdd.buffer[2] = dec_2_bcd(segacd.toc->numtrks); |
| 5455 | segacd_cdd.buffer[2] = dec_2_bcd(segacd.toc->numtrks - 1); // TODO: check me |
| 5449 | 5456 | segacd_cdd.buffer[3] = 0; |
| 5450 | 5457 | segacd_cdd.buffer[4] = 0; |
| 5451 | 5458 | |
| 5459 | printf("%02x %02x %02x %02x %02x\n",segacd_cdd.buffer[0],segacd_cdd.buffer[1],segacd_cdd.buffer[2],segacd_cdd.buffer[3],segacd_cdd.buffer[4]); |
| 5460 | |
| 5452 | 5461 | cdd_hock_irq(machine,1); |
| 5453 | 5462 | } |
| 5454 | 5463 | return; |