feat: improve DMA Transfer support
This commit is contained in:
		
							
								
								
									
										28
									
								
								src/cpu.zig
									
									
									
									
									
								
							
							
						
						
									
										28
									
								
								src/cpu.zig
									
									
									
									
									
								
							@@ -296,30 +296,10 @@ pub const Arm7tdmi = struct {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fn handleDMATransfers(self: *Self) bool {
 | 
			
		||||
        const dma0 = &self.bus.io.dma0;
 | 
			
		||||
        const dma1 = &self.bus.io.dma1;
 | 
			
		||||
        const dma2 = &self.bus.io.dma2;
 | 
			
		||||
        const dma3 = &self.bus.io.dma3;
 | 
			
		||||
 | 
			
		||||
        if (dma0.cnt.enabled.read() and dma0.cnt.start_timing.read() == 0) {
 | 
			
		||||
            dma0.step(self.bus);
 | 
			
		||||
            return true;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (dma1.cnt.enabled.read() and dma1.cnt.start_timing.read() == 0) {
 | 
			
		||||
            dma1.step(self.bus);
 | 
			
		||||
            return true;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (dma2.cnt.enabled.read() and dma2.cnt.start_timing.read() == 0) {
 | 
			
		||||
            dma2.step(self.bus);
 | 
			
		||||
            return true;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (dma3.cnt.enabled.read() and dma3.cnt.start_timing.read() == 0) {
 | 
			
		||||
            dma3.step(self.bus);
 | 
			
		||||
            return true;
 | 
			
		||||
        }
 | 
			
		||||
        if (self.bus.io.dma0.step(self.bus)) return self.bus.io.dma0.isBlocking();
 | 
			
		||||
        if (self.bus.io.dma1.step(self.bus)) return self.bus.io.dma1.isBlocking();
 | 
			
		||||
        if (self.bus.io.dma2.step(self.bus)) return self.bus.io.dma2.isBlocking();
 | 
			
		||||
        if (self.bus.io.dma3.step(self.bus)) return self.bus.io.dma3.isBlocking();
 | 
			
		||||
 | 
			
		||||
        return false;
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user