;;;;;;;;;;;;; ; Constants ; ;;;;;;;;;;;;; ;;;;;;;;;;;;; ; Functions ; ;;;;;;;;;;;;; setupDMAChannel: ; Set up DMA Channel ; In: ; channel (byte, 0..3) ; mode (byte) ; start offset (word) ; page (word) ; count (word) ; Out: none push bp mov bp, sp ; Disable channel 2 mov al, [bp + 4] or al, 100b out 0ah, al ; Set mode mov al, [bp + 5] or al, [bp + 4] out 0bh, al ; Select address register xor dh, dh mov dl, [bp + 4] shl dl, 1 out 0ch, al ; Set offset mov ax, [bp + 6] out dx, al mov al, ah out dx, al ; Set count inc dl mov ax, [bp + 10] dec ax out dx, al mov al, ah out dx, al ; Set page xor bh, bh mov bl, [bp + 4] mov dl, [cs:_dma_page_registers + bx] mov al, [bp + 8] out dx, al ; Enable channel 2 mov al, [bp + 4] out 0ah, al pop bp ret ;;;;;;;; ; Data ; ;;;;;;;; section .data _dma_page_registers db 87h, 83h, 81h, 82h