OSDN Git Service

[VM][FMTOWNS][DMAC] Works with CD-ROM and FDD, excepts SCSI.
authorK.Ohta <whatisthis.sowhat@gmail.com>
Fri, 28 Apr 2023 17:35:03 +0000 (02:35 +0900)
committerK.Ohta <whatisthis.sowhat@gmail.com>
Fri, 28 Apr 2023 17:35:03 +0000 (02:35 +0900)
source/src/vm/common_vm/CMakeLists.txt
source/src/vm/fmtowns/cdrom/cdrom.cpp
source/src/vm/fmtowns/fmtowns.cpp
source/src/vm/fmtowns/scsi.cpp

index 666b81e..fbe24c9 100644 (file)
@@ -1,6 +1,6 @@
 message("* vm/common_vm")
 
-SET(THIS_LIB_VERSION 7.8.1)
+SET(THIS_LIB_VERSION 7.9.0)
 
 #include(cotire)
 set(s_vm_common_vm_srcs
@@ -97,7 +97,11 @@ set(s_vm_common_vm_srcs
        ../upd16434.cpp
        ../upd1990a.cpp
        ../upd4991a.cpp
+
        ../upd71071.cpp
+       ../upd71071_art.cpp
+
+
        ../upd7220.cpp
        ../upd765a.cpp
        ../upd7752.cpp
index 409e372..77d88be 100644 (file)
@@ -256,7 +256,6 @@ void TOWNS_CDROM::do_dma_eot(bool by_signal)
 
        clear_event(this, event_time_out);
        clear_event(this, event_eot);
-//     clear_event(this, event_drq);
 
        if((read_length <= 0) && (databuffer->empty())) {
                write_signals(&outputs_drq, 0x00000000);
@@ -276,6 +275,7 @@ void TOWNS_CDROM::do_dma_eot(bool by_signal)
                //cdrom_debug_log(_T("NEXT(%s/DMA)"), (by_signal) ? by_dma : by_event);
                //cdrom_debug_log(_T("NEXT(%s/DMA)"), (by_signal) ? by_dma : by_event);
                // TRY: Register after EOT. 20201123 K.O
+               clear_event(this, event_drq);
                write_signals(&outputs_drq, 0x00000000);
                if(dma_transfer_phase) {
                        dma_transfer_phase = false;
@@ -335,6 +335,7 @@ void TOWNS_CDROM::write_signal(int id, uint32_t data, uint32_t mask)
                        do_dma_eot(true);
                }
                break;
+#if 0
        case SIG_TOWNS_CDROM_DMAACK:
                if(((data & mask) != 0) && (dma_transfer_phase)) {
                        //force_register_event(this, EVENT_CDROM_DRQ, 1.0 / 8.0, false, event_drq);
@@ -352,6 +353,7 @@ void TOWNS_CDROM::write_signal(int id, uint32_t data, uint32_t mask)
                        #endif
                }
                break;
+#endif
        default:
                // ToDo: Implement master devices.
                break;
index befbf75..09fa294 100644 (file)
@@ -356,11 +356,14 @@ VM::VM(EMU_TEMPLATE* parent_emu) : VM_TEMPLATE(parent_emu)
        //dma->set_context_ch2(printer);
        dma->set_context_ch3(cdrom);
 
-       dma->set_context_tc1(scsi, SIG_SCSI_EOT, 0xffffffff);
+       extra_dma->set_context_cpu(cpu);
+       extra_dma->set_context_memory(memory);
+
+       //dma->set_context_tc1(scsi, SIG_SCSI_EOT, 0xffffffff);
        dma->set_context_tc3(cdrom, SIG_TOWNS_CDROM_DMAINT, 0xffffffff);
 
        //dma->set_context_ack1(scsi_host, SIG_SCSI_ACK, 0xffffffff);
-       dma->set_context_ack3(cdrom, SIG_TOWNS_CDROM_DMAACK, 0xffffffff);
+       //dma->set_context_ack3(cdrom, SIG_TOWNS_CDROM_DMAACK, 0xffffffff);
        //dma->set_context_ube1(scsi_host, SIG_SCSI_16BIT_BUS, 0x02);
        dma->set_context_child_dma(extra_dma);
 
index bbbdf27..d02997f 100644 (file)
@@ -67,9 +67,9 @@ void SCSI::write_io8w(uint32_t addr, uint32_t data, int *wait)
                if((machine_id >= 0x0300) & ((machine_id & 0xff00) != 0x0400)) { // After UX
                        ex_int_enable = ((data & 0x20) != 0) ? true : false;
                        // Set host to 16bit bus width. BIT3 ,= '1'.
-                       if(d_dma != NULL) {
-                               d_dma->write_signal(SIG_UPD71071_UBE_CH0, 0xffffffff, 0xffffffff);
-                       }
+                       //if(d_dma != NULL) {
+                       //      d_dma->write_signal(SIG_UPD71071_UBE_CH1, 0xffffffff, 0xffffffff);
+                       //}
                }
                if(ctrl_reg  & CTRL_WEN) {
                        d_host->write_signal(SIG_SCSI_RST, data, CTRL_RST);
@@ -189,8 +189,10 @@ void SCSI::write_signal(int id, uint32_t data, uint32_t mask)
                        }
                }*/
                break;
-       case SIG_SCSI_EOT:
-               dma_enabled = ((data & mask) == 0) ? true : false;
+//     case SIG_SCSI_EOT:
+//             dma_enabled = ((data & mask) == 0) ? true : false;
+//             break;
+       default:
                break;
        }
 }