delorie.com/archives/browse.cgi   search  
Mail Archives: djgpp/1995/01/13/06:39:50

From: "A.Appleyard" <A DOT APPLEYARD AT fs2 DOT mt DOT umist DOT ac DOT uk>
To: DJGPP AT SUN DOT SOE DOT CLARKSON DOT EDU
Date: Fri, 13 Jan 1995 11:12:17 GMT
Subject: Another array-writing interrupt not catered for by G032

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 -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019