Mail Archives: djgpp/1992/12/18/10:15:11
> (1) Compiling with NONEWDRIVER defined would cause a 'case label not in a
>switch' compile error!
We never compile that way.
> (2) After the interrupt is called, line ZZ converts the system es:bp
>segmented address into the Gnu C epb nonsegmented address, OK. But vice-versa
>doesn't happen before the 'intr(0x10, &r);' to convert the input Gnu C ebp
>nonsegmented address into a system es:bp segmented address! I suggest, before
>the instruction 'tss2reg(&r);', inserting:-
> rr._bp = tss_ptr->tss_ebp - 0xe0000000L; r.r_es = 0;
No. You can't just convert that way. When the application passes
pointers to DOS, the memory they point to must be physically copied
into a transfer buffer in real memory. This is different for all
functions, so I did not implement it. No int10 function that takes a
pointer will work. The code to convert on the way back allows all
int10 functions that return pointers to BIOS data areas to work
correctly, as most do.
DJ
dj AT ctron DOT com
Life is a banana.
- Raw text -