charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Does all system support the 0C00:0000 location for linear video memory? =
In my PC, I could use 000A:0000 location to output VGA colors, I could =
also use 0c00:0000 to output colors. the 0c00:0000 works faster so I =
just wanted to know weather it is compatible with all PCs. If you more =
about this please tell me. Thanks. Bye.

Does all system support the 0C00:0000 location for linear video
memory? In my PC, I could use 000A:0000 location to output VGA
colors, I could also use 0c00:0000 to output colors. the 0c00:0000
works faster so I just wanted to know weather it is compatible with
all PCs. If you more about this please tell me. Thanks. Bye.

Does all system support the 0C00:0000 location for linear video memory? In my
PC, I could use 000A:0000 location to output VGA colors, I could also use
0c00:0000 to output colors. the 0c00:0000 works faster so I just wanted to know
weather it is compatible with all PCs. If you more about this please tell me.
Thanks. Bye.

vbe cf int 10h fc 4f01h gives you a structure like this...

after this reply i was expecting 2 questions:
1- how can i call a real mode interrupt not implemented by DOSX ? (easy),
2- how can i pass a buffer to a real mode interrupt ? (more complicate)
Even if those questions were not asked, i reply, may be they are good candidate
for the FAQ.
1- how can i call a real mode interrupt not implemented by DOSX ?
call int86_real or int86x_real
or define something like this if you want your code to compile on DOSX and
large model as well:
#if (sizeof(int)==4)
#define _CALL_INT(intnum,regsin,regsout) int86_real(intnum,&(regsin),&(regsout))
#define _CALL_INTS(intnum,regsin,regsout,segregs)
int86x_real(intnum,&(regsin),&(regsout),&(segregs))
#else
#define _CALL_INT(intnum,regsin,regsout) int86(intnum,&regsin,&regsout)
#define _CALL_INTS(intnum,regsin,regsout,segregs)
int86x(intnum,&(regsin),&(regsout),&(segregs))
#endif //sizeof(int)==4
2- how can i pass a buffer to a real mode interrupt ?
the real mode interrupt expects a real mode pointer (segment:offset) below 1
Mbyte limite.
you have to allocate a buffer in real mode memory and pass its real mode
addresse to the interrupt.
do like this:
unsigned short _x386_convmemalloc(unsigned size);
//allocate a conventional memory block
//return the conventional memory segment, 0 if error
//!!! allocate 4 k byte minimum !!!
//!!! there is no way to deallocate this memory !!!
unsigned short _x386_convmemalloc(const unsigned size) {
REGS regs;
regs.x.bx = (unsigned short)((size+15)>>4);
regs.h.ah = 0x48;
int86(0x21,&regs,&regs);
return (regs.x.flags&_cf_) ?
0 //DOS error no is in ax
: regs.x.ax;
}
example:
#if (sizeof(int)==4)
unsigned convmemseg,dosptr; //real mode segment, pointer
void* dosxptr; //dosx pointer
#define DGROUP MKFP(getDS(),0)
convmemseg = (unsigned)_x386_convmemalloc(size);
dosptr = convmemseg<<16; //offset = 0
dosxptr = (void*)(-_x386_get_abs_address(DGROUP)+(convmemseg<<4));
#endif //sizeof(int)==4
(hope no syntax error)
Ciao
Roland