Mail Archives: djgpp/1995/01/13/06:39:50
During my struggles with 64K-color graphics, I was referred to the info file
C:\DJGPP\CONTRIB\LIBGRX\NDRIVERS\DOCS\VESA.DOC . Its section 6.3 describes an
interrupt `AX=0x4f01, CX=n, int10' which writes to addresses ES:DI etseq much
necessary information about the Super VGA screen mode n. But when I tried to
use it, it did not write any info. In the end I found the two info items that
I was wanting (window granularity and window size for my PC's screen's mode
0x64) by trial and error; but this is awkward. In my C:\DJGPP\GO32\EXPHDLR.C,
the function i_10() which handles int10 interrupts, checks for ax==0x1100 and
ax==0x1110 (user-define a font character), but not for any other array-using
interrupt. i_10() should also cater for ax==0x4f01, int10, e.g. as follows
(which may need correcting by someone more skilled in programming for G032):-
tss2reg(&r);
i = (word16)tss_ptr->tss_eax;
if(i==0x4f01) { /* get Super VGA mode info */
v = tss_ptr->tss_edi + ARENA; CHECK_SEGFAULT(v);
r.r_di = FP_OFF(transfer_buffer);
r.r_es = _ES; /* this interrupt writes to 256 bytes starting at (es:di) */
intr(0x10, &r);
tss_ptr->tss_eax = r.r_ax; /* 0 if OK, 1 if error */
if(!r.r_ax) memput(tss_ptr->tss_edi + ARENA, transfer_buffer, 256);
reg2tss(&r);
return 0; }
- Raw text -