bb16@prism.gatech.EDU (Scott Bostater) (10/02/90)
This sort of half belongs in this newsgroup and half in c.s.i.p.hardware, but
I didn't want to take the flak for using Pascal instead of C :-)
I've run into a problem/bug with TP IDE and the use of I/O ports. I'm trying
to read from an I/O port. Sometimes it works, sometimes it doesn't.
Program Test;
var
a: Byte;
Begin
a := Port[$300];
Writeln( 'a = ', a);
End.
This simple program has several different outcomes depending on the machine
I run it on and whether I use the IDE or use the command line compiler. The
program behaves properly when compiled with TPC and executed via TD.
Machine IDE Result
-------- ------ ----------------------
IBM XT (true blue) Yes Reboots Computer
IBM XT (true Blue) No a = 175
80386 clone Yes a = 255
80386 clone No a = 255
During the testing process, I ended up pulling all of the "strange" cards out
of the XT so that now there is only a CGA card, Floppy controller, HD
controller, and Multifunction I/O board (384K/1s/1p/1g).
The port I'm trying to read from is $300, which does not exist in either
machine. I would expect to get $FF back from reading it (since the data lines
should float high).
Has anybody else experienced this problem? Anybody have an idea has to how to
fix it? I'ld really like to be able to use the IDE because I'm used to it, but
I'd also like to know what's causing the problem.
--
Scott Bostater Georgia Tech Research Institute - Radar Systems Analysis
"My soul finds rest in God alone; my salvation comes from Him" -Ps 62.1
uucp: ...!{allegra,amd,hplabs,ut-ngp}!gatech!prism!bb16
Internet: bb16@prism.gatech.eduKRW1@Lehigh (10/03/90)
Use the following inline function instead of the Pascal port array
for reading:
function inport(x: integer): byte;
inline($5a/$eb/$00/$ec);
Then instead of p := port[x], use p := inport(x).
The problem is that on fast processors, the input may not be returned
before the result is used. The inline function includes a short jump
which flushes the prefetch queue on 286's and higher, slowing down
the processor for the next (in) instruction. -- Kevinddavidso@sunc.mqcc.mq.oz.au (Dean Davidson) (10/03/90)
In article <14401@hydra.gatech.EDU> bb16@prism.gatech.EDU (Scott Bostater) writes: >I've run into a problem/bug with TP IDE and the use of I/O ports. I'm trying >to read from an I/O port. Sometimes it works, sometimes it doesn't. > >Program Test; > >var > a: Byte; > >Begin > a := Port[$300]; > Writeln( 'a = ', a); >End. > I've had this sort of problem - in particular using Turbo Asynch in the IDE I put it down to the fact that there is probably a clash of interupts or interupts are disabled and not re-enabled or something It was particularly noticable if you traced right into the routine I just learned to live with it ! -- Dean Davidson ddavidso@mqccsuna.mqcc.mq.oz.au User Support Phone 61 2 805 7436 Macquarie University Fax 61 2 805 7433 NSW 2109 Australia VK2 ZID