Intel 80C188EC User Manual page 320

Hide thumbs Also See for 80C188EC:
Table of Contents

Advertisement

$MOD186
name
DMA_EXAMPLE_1
; This example shows code necessary to set up two DMA channels.
; One channel performs an unsynchronized transfer from memory to memory.
; The second channel is used by a hard disk controller located in
; I/O space.
; It is assumed that the constants for PCB register addresses are
; defined elsewhere with EQUates.
CODE_SEG
SEGMENT
ASSUME CS:CODE_SEG
START:
MOV
AX, DATA_SEG
MOV
DS, AX
ASSUME DS:DATA_SEG
; First we must initialize DMA channel 0. DMA0 will perform an
; unsynchronized transfer from SOURCE_DATA_1 to DEST_DATA_1.
; The first step is to calculate the proper values for the
; source and destination pointers.
MOV
AX, SEG SOURCE_DATA_1
ROL
AX, 4
MOV
BX, AX
AND
AX, 0FFF0H
ADD
AX, OFFSET SOURCE_DATA_1
; NOW LOW BYTES OF POINTER ARE IN AX
ADC
BX, 0
AND
BX, 000FH
MOV
DX, D0SRCL
OUT
DX, AL
MOV
DX, D0SRCH
MOV
AX, BX
OUT
DX, AX
; SOURCE POINTER DONE. REPEAT FOR DESTINATION.
MOV
AX, SEG DEST_DATA_1
ROL
AX, 4
MOV
BX, AX
AND
AX, 0FFF0H
ADD
AX, OFFSET DEST_DATA_1
; NOW LOW BYTES OF POINTER ARE IN AX
ADC
BX, 0
AND
BX, 000FH
MOV
DX, D0DSTL
OUT
DX, AX
Example 10-1. Initializing the DMA Unit
DIRECT MEMORY ACCESS UNIT
; DATA SEGMENT POINTER
; GET HIGH 4 BITS
; SAVE ROTATED VALUE
; GET SHIFTED LOW 4 NIBBLES
; ADD IN THE CARRY
; TO THE HIGH NIBBLE
; GET JUST THE HIGH NIBBLE
; AX=LOW 4 BYTES
; GET HIGH NIBBLE
; GET HIGH 4 BITS
; SAVE ROTATED VALUE
; GET SHIFTED LOW 4 NIBBLES
; ADD IN THE CARRY
; TO THE HIGH NIBBLE
; GET JUST THE HIGH NIBBLE
; AX=LOW 4 BYTES
10-31

Advertisement

Table of Contents
loading

This manual is also suitable for:

80c186ec

Table of Contents