ZUCCONI@FRMOP11.BITNET (02/14/90)
Date: 13 February 1990, 23:37:13 GMT
From: J.-M. Zucconi (+33) 81666900 ZUCCONI at FRMOP11
To: info-atari16@wsmr-simtel20.army.mil
Subject: read/write to the DMA port
I try to use the DMA port to write and read data (not in DMA mode)
typically to send commands to an external controller. The problem I meet
is that I can't read safely from the DMA port. After several checkings
I have found that I always read the last byte written on the port. Further
investigations show that if I wait 'some' time before reading the port, the
value returns to zero. The following code shows that. It should be noted
that during execution, NOTHING is connected to the DMA port!
I write the value 0xff to the port. If the parameter 'time' is set
to 0x1fff, I read 0xff. when time is set to 0x5fff, I read 0x0 (correctly?)
and if time is set to 0x3fff, I get 0xe0 !!!
Could someone tell me what is wrong in my code and how to write/read via the
DMA port?
Thanks
J.-M.
------------ CUT HERE -----------------------------------------------
flock EQU $43E
diskctl EQU $FF8604
fifo EQU $FF8606
; ...initializations take place here
BSR super_on ;go in supervisor mode
ST flock ;turn off floppy
MOVE #$1C8,fifo ;set DMA mode register to write data
MOVE #$FF,diskctl ;write data on DMA port
MOVE #$C8,fifo ;set DMA mode register to read data
BSR pause ; pause
MOVE diskctl,D0 ;read data on DMA port
BSR affiche_status ;and prints value
SF flock ;turn on floppy
BSR super_off ;return in user mode
; end of the program...
pause MOVE.L #time,D1 ;delay loop. time is set between $1FFF and $5FFF
loop SUB.L #1,D1
BNE loop
RTS
------------ CUT HERE -----------------------------------------------
-*-*-*-*-*-*-*-*-*-*-*
Jean-Marc Zucconi
ZUCCONI@FRMOP11.BITNET
*-*-*-*-*-*-*-*-*-*-*-