Unfortunately, it isn't just a matter of getting the interrupt done in real mode. Your code seems like you understand the basic idea okay.
I see your structure has pointer fields, and the information is passed to the RM code in that structure.
The driver RM code at int $65 can only reference memory in the first megabyte. Your program and its data will be allocated somewhere above one megabyte, so you have to:
Allocate the structure to be passed to your driver in DOS memory.
If the structure points to memory buffers, those also have to be in DOS memory. Otherwise the driver won't be able to see them
Get a PM pointer to the structure in DOS memory.
Use that pointer to fill in the structure and buffers.
Change all of the addresses to be real-mode addresses in the structure.
There are DPMI calls to help you do all of the above, but it's not as simple as the code you've written so far.
It's all doable, and probably in a few days work for you, but it's not trivial.
You might start by trying an interrupt which doesn't need a structure, like the DOS get time subfunction. Once you have that working, try an int $65 which doesn't involve buffers so that you only have to worry about allocating the structure in DOS memory. Finally, you can do the full job, with buffers in DOS memory as well as the structure.
Partager