Mail Archives: djgpp/1999/03/30/03:32:19
X-magnet-rcpt: | <djgpp AT delorie DOT com>
|
From: | "Mark Usher" <marku AT magnet DOT at>
|
Cc: | <djgpp AT delorie DOT com>
|
Subject: | RE: Tricky interrupt problem
|
Date: | Tue, 30 Mar 1999 10:32:19 +0200
|
Message-ID: | <E5E743A4F743D211BE7800104B9D6426266F@BURNTS40BDC>
|
MIME-Version: | 1.0
|
X-Priority: | 3 (Normal)
|
X-MSMail-Priority: | Normal
|
X-Mailer: | Microsoft Outlook CWS, Build 9.0.2212 (4.71.2419.0)
|
X-MimeOLE: | Produced By Microsoft MimeOLE V5.00.2013.600
|
Importance: | Normal
|
Reply-To: | djgpp AT delorie DOT com
|
> I suggest to stop trying to reinvent the wheel, and instead read the
> documentation. You have been pointed to section 18.2 of the FAQ which
> explains how to do that. That section includes a working example of
> code which does something very similar to what you need; use that
> example as the starting point.
I did read section 18.2 and worked on it for a couple of hours before even
asking for further help.
There is no problem to pass a ControlBlock to the driver, the pointer to the
block being in in ds:dx.
That is easily done as in 18.2 of the FAQ, using the default transfer buffer
as you say.
The problem is that the Control Block contains 3 long pointers to 3 more
blocks which the driver needs access to and read / fill in on return, which
means as far as I understand it, that I must create at least three more
transfer buffers in conventional memory.
ie.
struct ControlBlock
{
byte Command;
unsigned short length_Tx;
unsigned int pTx;
unsigned short length_Rx;
unsigned int pRx;
unsigned short lengthReply;
unsigned int pReply;
}
The creation of a transfer buffer was simple enough via the FAQ and reading
the libc docs.
I couldn't though, despite trying, manage to get the conventional memory
long pointer to fill in pTx, pRx and pReply that I need to pass in the
control block.
I was looking at the way the __tb macro is defined but this seemed specific
to the transfer buffer, and I looked through the libc sources, but couldn't
find anything of use.
Maybe as you say I am trying to re-invent the wheel, but at the moment I
cannot see another way of acheiving this. As you can see it is complicated
by the need to send and return information in other blocks.
Sorry if I am overlooking something that is obvious to you, I am trying, and
reading the FAQ and docs as I go.
Mark Usher
marku AT magnet DOT at
- Raw text -