Intel 80C188XL User Manual

Page 279

Advertising
background image

DIRECT MEMORY ACCESS UNIT

10-24

Example 10-1. Initializing the DMA Unit (Continued)

MOV

DX, D0DSTH

MOV

AX, BX

; GET HIGH NIBBLE

OUT

DX, AX

; THE POINTER ADDRESSES HAVE BEEN SET UP. NOW WE SET UP THE TRANSFER COUNT.

MOV

AX, 29

; THE MESSAGE IS 29 BYTES LONG.

MOV

DX, D0TC

; XFER COUNT REG

OUT

DX, AX

; NOW WE NEED TO SET THE PARAMETERS FOR THE CHANNEL AS FOLLOWS:
;
;

DESTINATION

SOURCE

;

-----------

------

;

MEMORY SPACE

MEMORY SPACE

;

INCREMENT PTR INCREMENT PTR

;
; TERMINATE ON TC, NO INTERRUPT, UNSYNCHRONIZED, LOW PRIORITY RELATIVE
; TO CHANNEL 1, BYTE XFERS. WE START THE CHANNEL.

MOV

AX, 1011011000000110B

MOV

DX, D0CON

OUT

DX, AX

; THE UNSYNCHRONIZED BURST IS NOW RUNNING ON THE BUS...
; NOW SET UP CHANNEL 1 TO SERVICE THE DISK CONTROLLER.
; FOR THIS EXAMPLE WE WILL ONLY BE READING FROM THE DISK.
; THE SOURCE IS THE I/O PORT FOR THE DISK CONTROLLER.

MOV

AX, DISK_IO_ADDR

MOV

DX, D1SRCL

OUT

DX, AX

; PROGRAM LOW ADDR

XOR

AX, AX

MOV

DX, D1SRCH

; HI ADDR FOR IO=0

OUT

DX, AX

; THE DESTINATION IS THE DISK BUFFER IN MEMORY

MOV

AX, SEG DISK_BUFF

ROL

AX, 4

; GET HIGH 4 BITS

MOV

BX, AX

; SAVE ROTATED VALUE

AND

AX, 0FFF0H

; GET SHIFTED LOW 4 NIBBLES

ADD

AX, OFFSET DISK_BUFF

; NOW LOW BYTES OF POINTER ARE IN AX

ADC

BX, 0

; ADD IN THE CARRY
; TO THE HIGH NIBBLE

AND

BX, 000FH

; GET JUST THE HIGH NIBBLE

MOV

DX, D1DSTL

OUT

DX, AL

; AX=LOW 4 BYTES

MOV

DX, D1DSTH

MOV

AX, BX

; GET HIGH NIBBLE

OUT

DX, AX

; THE POINTER ADDRESSES HAVE BEEN SET UP. NOW WE SET UP THE TRANSFER COUNT.

Advertising
This manual is related to the following products: