dma->set_context_ch0(fdc);
dma->set_context_ch1(scsi_host);
//dma->set_context_ch2(printer);
- //dma->set_context_ch3(cdc);
-// dma->set_context_ch3(cdc_scsi);
dma->set_context_ch3(cdrom);
dma->set_context_ube1(scsi_host, SIG_SCSI_16BIT_BUS, 0x02);
memory->set_context_sprite(sprite);
memory->set_context_pcm(rf5c68);
-// cdrom->scsi_id = 0;
-// cdrom->set_context_interface(cdc_scsi);
- //cdrom->set_context_completed(cdc, SIG_TOWNS_CDC_TRANSFER_COMPLETE, 0xffffffff);
- //cdrom->set_context_next_sector(cdc, SIG_TOWNS_CDC_NEXT_SECTOR, 0xffffffff);
- //cdrom->set_context_done(cdc, SIG_TOWNS_CDC_TRANSFER_COMPLETE, 1);
-
-// cdc->set_context_scsi_host(cdc_scsi);
-// cdc_scsi->set_context_target(cdrom);
-
-// cdc->set_context_cdrom(cdrom);
-// cdc->set_context_dmac(dma);
-// cdc_scsi->set_device_name(_T("CDROM controller's PSEUDO SCSI"));
-
adpcm->set_context_opn2(opn2);
adpcm->set_context_rf5c68(rf5c68);
adpcm->set_context_adc(adc);
// IRQ13 : ADPCM AND OPN2 (Route to adpcm.cpp)
// IRQ14 : EXTRA I/O (Maybe not implement)
// IRQ15 : RESERVED.
- //cdrom->set_context_dmaint_line(pic, SIG_I8259_CHIP1 | SIG_I8259_IR1, 0xffffffff);
cdrom->set_context_mpuint_line(pic, SIG_I8259_CHIP1 | SIG_I8259_IR1, 0xffffffff);
crtc->set_context_vsync(pic, SIG_I8259_CHIP1 | SIG_I8259_IR3, 0xffffffff);
adpcm->set_context_intr_line(pic, SIG_I8259_CHIP1 | SIG_I8259_IR5, 0xffffffff);
is_playing = false;
read_sectors = 0;
write_signals(&outputs_drq, 0);
- write_signals(&outputs_next_sector, 0);
- write_signals(&outputs_done, 0);
mcu_intr = false;
dma_intr = false;
stat_reply_intr = false;
if(!(mounted())) {
out_debug_log(_T("CMD (%02X) BUT DISC NOT ACTIVE"), command);
set_status(command, req_status, 0, 0x10, 0, 0, 0);
+ mcu_ready = true;
set_mcu_intr(true);
return;
}
case CDROM_COMMAND_01:
out_debug_log(_T("CMD UNKNOWN 01(%02X)"), command);
set_status(command, req_status, 0, 0, 0xff, 0xff, 0xff);
+ mcu_ready = true;
set_mcu_intr(true);
break;
case CDROM_COMMAND_READ_MODE1:
} else {
set_status(command, true, 2, 0x16, 0, 0xa0, 0);
}
+ mcu_ready = true;
set_mcu_intr(true);
// TOC READING
break;
case CDROM_COMMAND_READ_CDDA_STATE:
out_debug_log(_T("CMD SET CDDA STATE(%02X)"), command);
set_status(command, req_status, 1, 0, 0, 0, 0);
+ mcu_ready = true;
set_mcu_intr(true);
break;
case CDROM_COMMAND_1F:
out_debug_log(_T("CMD UNKNOWN 1F(%02X)"), command);
set_status(command, req_status, 0, 0x10, 0, 0, 0);
+ mcu_ready = true;
set_mcu_intr(true);
break;
case CDROM_COMMAND_SET_STATE:
} else {
set_status(command, req_status, 0, 0, 1, 0, 0);
}
+ mcu_ready = true;
set_mcu_intr(true);
break;
case CDROM_COMMAND_SET_CDDASET:
out_debug_log(_T("CMD CDDA SET(%02X)"), command);
set_status(command, req_status, 0, 0, 0, 0, 0);
+ mcu_ready = true;
set_mcu_intr(true);
break;
case CDROM_COMMAND_STOP_CDDA:
out_debug_log(_T("CMD STOP CDDA(%02X)"), command);
stop_cdda_from_cmd();
+ mcu_ready = true;
+ set_mcu_intr(true);
break;
case CDROM_COMMAND_STOP_CDDA2:
out_debug_log(_T("CMD PLAY CDDA2(%02X)"), command);
stop_cdda2_from_cmd(); // ToDo : Re-Implement.
+ mcu_ready = true;
+ set_mcu_intr(true);
break;
case CDROM_COMMAND_RESUME_CDDA:
out_debug_log(_T("CMD RESUME CDDA(%02X)"), command);
unpause_cdda_from_cmd();
+ mcu_ready = true;
+ set_mcu_intr(true);
break;
default:
out_debug_log(_T("CMD Illegal(%02X)"), command);
set_status(command, true, 0, 0x10, 0x00, 0x00, 0x00);
+ mcu_ready = true;
set_mcu_intr(true);
break;
}
if(extra > 0) extra_status = extra;
if(req_status) {
has_status = true;
- mcu_ready = true;
+// mcu_ready = true;
status_queue->write(s0);
status_queue->write(s1);
status_queue->write(s2);
status_queue->write(s3);
out_debug_log(_T("SET STATUS %02x: %02x %02x %02x %02x EXTRA=%d"), cmd, s0, s1, s2, s3, extra_status);
} else {
- mcu_ready = true;
+// mcu_ready = true;
}
}
{
switch (event_id) {
case EVENT_CDROM_DELAY_INTERRUPT_ON:
- write_signals(&outputs_done, 0xffffffff);
+ write_signals(&outputs_mcuint, 0xffffffff);
event_delay_interrupt = -1;
break;
case EVENT_CDROM_DELAY_INTERRUPT_OFF:
- write_signals(&outputs_done, 0x00000000);
+ write_signals(&outputs_mcuint, 0x00000000);
event_delay_interrupt = -1;
break;
case EVENT_CDDA_DELAY_PLAY:
break;
case EVENT_CDDA_DELAY_STOP:
if(cdda_interrupt) {
- write_signals(&outputs_done, 0xffffffff);
+ write_signals(&outputs_mcuint, 0xffffffff);
}
set_cdda_status(CDDA_OFF);
event_cdda_delay_play = -1;
bool req_status = ((w_regs[0x02] & 0x20) != 0) ? true : false;
event_seek = -1;
set_status(w_regs[0x02], req_status, 1, 0, 0, 0, 0);
+ mcu_ready = true;
set_mcu_intr(true);
}
break;
case EVENT_CDROM_NEXT_SECTOR:
event_next_sector = -1;
// set_dma_intr(true);
-// write_signals(&outputs_next_sector, 0xffffffff);
register_event(this, EVENT_CDROM_SEEK_COMPLETED,
(1.0e6 / ((double)transfer_speed * 150.0e3)) * 0.5, // OK?
false, NULL);
false, NULL);
} else {
out_debug_log(_T("EOT"));
+ mcu_ready = true;
set_status(CDROM_COMMAND_READ_MODE1, true, 0, 0x06, 0x00, 0x00, 0x00);
dma_transfer_phase = false;
pio_transfer_phase = false;
}
if(cdda_status != CDDA_PLAYING) {
//// Notify to release bus.
- write_signals(&outputs_done, 0x00000000);
+ write_signals(&outputs_mcuint, 0x00000000);
if(cdda_status == CDDA_OFF) {
//get_track_by_track_num(current_track); // Re-Play
//memset(cdda_buffer, 0x00, sizeof(cdda_buffer));
}
if(cdda_status == CDDA_PLAYING) {
// Notify to release bus.
- write_signals(&outputs_done, 0x00000000);
+ write_signals(&outputs_mcuint, 0x00000000);
//if(event_delay_interrupt >= 0) cancel_event(this, event_delay_interrupt);
//register_event(this, EVENT_CDROM_DELAY_INTERRUPT_OFF, 1.0e6 / (44100.0 * 2352), false, &event_delay_interrupt);
if(status == CDDA_OFF) {
class TOWNS_CDROM: public DEVICE {
protected:
outputs_t outputs_drq;
- outputs_t outputs_next_sector;
- outputs_t outputs_done;
outputs_t outputs_mcuint;
FILEIO* fio_img;
memset(subq_buffer, 0x00, sizeof(subq_buffer));
initialize_output_signals(&outputs_drq);
- initialize_output_signals(&outputs_next_sector);
- initialize_output_signals(&outputs_done);
initialize_output_signals(&outputs_mcuint);
set_device_name(_T("FM-Towns CD-ROM drive"));
read_mode = is_mode2;
}
- void set_context_done_line(DEVICE* dev, int id, uint32_t mask)
- {
- register_output_signal(&outputs_done, dev, id, mask);
- }
- void set_context_next_sector_line(DEVICE* dev, int id, uint32_t mask)
- {
- register_output_signal(&outputs_next_sector, dev, id, mask);
- }
void set_context_mpuint_line(DEVICE* dev, int id, uint32_t mask)
{
register_output_signal(&outputs_mcuint, dev, id, mask);