Mail Archives: djgpp/1993/01/19/03:57:47
>In the process of porting pdcurses 2.0 to work under go32, I found
>that int 0x10, fn 0xfe (return shadow buffer address) doesn't seem
>to work in the sense that the DV shadow buffer isn't returned when
>run in a DV 2.42 window without either screen virtualisation or
>direct writes enabled.
>Is this simply 'unimplemented', or am I doing something wrong? As
>I understand it, the DV shadow buffer should be in the 1st meg for
>that VM, so the usual MK_FP() style macro using the correct base
>address for GO32 should be able to address it, avoiding the necessity
>of having to write directly to video RAM.
>I guess it's not entirely necessary since virtualisation always
>works in DV/386 because of the '3' in '386'. :-) But performance
>is always better and output smoother in a window where screen
>virtualisation is set to "N".
>If it's relevent, I'm using int86x() to call int 0x10 in this case.
In go32 int 0x10 is intercepted and function 0xfe is passed to a
graphics_inquiry() function, which sets ebx,ecx and edx. DV never gets
involved. If you have the facility to rebuild go32 you could try adding a
reference to generic_handler() in the function graphics_inquiry() in the file
'graphics.c' i.e.:
void graphics_inquiry(void)
{
#if !DEBUGGER
if(!gr_driver) init_graphics_driver();
#endif
generic_handler(); /* right here */
tss_ptr->tss_ebx = gr_driver->old.driver_flags;
if(new_driver) {
word32 base = 0xe0000000L + ((word32)gr_paging_segment << 4);
tss_ptr->tss_ecx = base + gr_driver->new.text_table;
tss_ptr->tss_edx = base + gr_driver->new.graphics_table;
}
else {
tss_ptr->tss_ecx = 0L;
tss_ptr->tss_edx = 0L;
}
}
Peter Crowley
Quarterdeck Offices Systems
- Raw text -