]> git.unchartedbackwaters.co.uk Git - francis/winuae.git/commitdiff
Do not simply clear DMA counter. Less than requested number of bytes may have been...
authorToni Wilen <twilen@winuae.net>
Wed, 1 Aug 2018 09:57:38 +0000 (12:57 +0300)
committerToni Wilen <twilen@winuae.net>
Wed, 1 Aug 2018 09:57:38 +0000 (12:57 +0300)
qemuvga/esp.cpp

index 7616068b68eefae030ea2f97808cb23723fb7937..63c027db4324a217d6c664fd9d3e5239b1317023 100644 (file)
@@ -334,10 +334,13 @@ static void esp_dma_done(ESPState *s)
     s->rregs[ESP_RSTAT] |= STAT_TC;
     s->rregs[ESP_RINTR] = INTR_BS;
     s->rregs[ESP_RSEQ] = 0;
-    s->rregs[ESP_TCLO] = 0;
-    s->rregs[ESP_TCMID] = 0;
-    s->rregs[ESP_TCHI] = 0;
-    esp_raise_irq(s);
+
+       s->dma_counter -= s->dma_len;
+    s->rregs[ESP_TCLO] = s->dma_counter;
+    s->rregs[ESP_TCMID] = s->dma_counter >> 8;
+    s->rregs[ESP_TCHI] = s->dma_counter >> 16;
+    
+       esp_raise_irq(s);
 }
 
 static int esp_do_dma(ESPState *s)