]> git.unchartedbackwaters.co.uk Git - francis/winuae.git/commitdiff
It seems SCSI chip always resets phase state after MSGACC command.
authorToni Wilen <twilen@winuae.net>
Sat, 26 Sep 2020 15:05:04 +0000 (18:05 +0300)
committerToni Wilen <twilen@winuae.net>
Sat, 26 Sep 2020 15:05:04 +0000 (18:05 +0300)
ncr9x_scsi.cpp
qemuvga/esp.cpp

index 25ffcfd6edbf678b280a4a62aa18a328f396e554..85d13b67a11916b0d556dae432d858ed988c91e9 100644 (file)
@@ -954,9 +954,11 @@ static void ncr9x_io_bput3(struct ncr9x_state *ncr, uaecptr addr, uae_u32 val, i
                        esp_dma_enable(ncr->devobject.lsistate, ncr->dma_on);
                        ncr->states[0] = val;
                        ncr->dma_cnt = 0;
+#if NCR_DEBUG
                        if (ncr->dma_on) {
                                write_log(_T("Trifecta DMA %08x %c\n"), ncr->dma_ptr, (val & 1) ? 'R' : 'W');
                        }
+#endif
                } else if (addr == 0x402) {
                        ncr->dma_ptr &= 0xffff00;
                        ncr->dma_ptr |= val;
index 3ffc970a2d3edfa5ecb19ee9b4636159a139b2d1..e73bc91d39315c50960ac012a6994e4c16339ee7 100644 (file)
@@ -71,7 +71,10 @@ static void esp_raise_irq(ESPState *s)
 {
     if (!(s->rregs[ESP_RSTAT] & STAT_INT)) {
         s->rregs[ESP_RSTAT] |= STAT_INT;
-               esp_raise_ext_irq(s);
+#if ESPLOG
+        write_log("irq->1\n");
+#endif
+        esp_raise_ext_irq(s);
     }
 }
 
@@ -79,7 +82,10 @@ static void esp_lower_irq(ESPState *s)
 {
     if (s->rregs[ESP_RSTAT] & STAT_INT) {
         s->rregs[ESP_RSTAT] &= ~STAT_INT;
-               esp_lower_ext_irq(s);
+#if ESPLOG
+        write_log("irq->0\n");
+#endif
+        esp_lower_ext_irq(s);
     }
 }
 
@@ -87,6 +93,9 @@ static void fas408_raise_irq(ESPState *s)
 {
        if (!(s->rregs[ESP_REGS + NCR_PSTAT] & NCRPSTAT_SIRQ)) {
                s->rregs[ESP_REGS + NCR_PSTAT] |= NCRPSTAT_SIRQ;
+#if ESPLOG
+        write_log("irq408->1\n");
+#endif
                esp_raise_ext_irq(s);
        }
 }
@@ -95,7 +104,10 @@ static void fas408_lower_irq(ESPState *s)
 {
        if (s->rregs[ESP_REGS + NCR_PSTAT] & NCRPSTAT_SIRQ) {
                s->rregs[ESP_REGS + NCR_PSTAT] &= ~NCRPSTAT_SIRQ;
-               esp_lower_ext_irq(s);
+#if ESPLOG
+        write_log("irq408->0\n");
+#endif
+        esp_lower_ext_irq(s);
        }
 }
 
@@ -855,11 +867,8 @@ void esp_reg_write(void *opaque, uint32_t saddr, uint64_t val)
             s->rregs[ESP_RINTR] = INTR_DC;
             s->rregs[ESP_RSEQ] = 0;
             //s->rregs[ESP_RFLAGS] = 0;
-                       // Features enable
-                       if (!(s->wregs[ESP_CFG2] & 0x40)) {
-                               // Masoboshi driver expects phase=0!
-                               s->rregs[ESP_RSTAT] &= ~7;
-                       }
+                       // Masoboshi and Trifecta drivers expects phase=0
+                       s->rregs[ESP_RSTAT] &= ~7;
             esp_raise_irq(s);
             break;
         case CMD_PAD: