Date: Thu, 16 Nov 1995 13:24:54 -0800 From: Sam Vincent To: djgpp AT sun DOT soe DOT clarkson DOT edu, ward AT escape DOT com Subject: Re: A peculiar question: Extra Segments & DJGPP...? > Okay here goes... DJGPP runs in protected 32 bit mode, which is basically a non-segment memory system. All pointers are 4 byte ints.. no seg, no offset. What you need to do is put &STRING[0] or whatever into the psuedo register "ebx" or "ebp" or whatever it is.. es:bx is ebx, es:bp is ebp, es:ax is eax, and so on. It's something like this: #include /* Not sure of this. might be go32.h.. check the docs. */ main() { char s[80]; _go32_segment_registers r;/* Might be some other name. again, check the docs.*/ strcpy(s, "This is an example of direct bios writing.\r\n"); r.x.ebx = &s[0]; /* r.x.bp? whatever.. */ r.x.ss = r.x.sp = 0; /* Just needed for some reason dealing with stack and crap like that. Once again, check the docs.. */ r.x.ax = whatever; /* don't bother with bx if it's supposed to be es:bx */ _go32_dpmi_simulate_int(0x10, &r); return 0; } okay. check the docs for _go32_dpmi_simulate_int.. it'll explain it better than I did. but djgpp will take care of the pointer conversion for you. Justin ----- Uh.. say what? That will *not* work... #1.. it will look for the data to use at es:bx.. not at ebx.. #2.. the string is located somewhere in 32-bit memory.. above and beyond where DOS's conventional memory lies... You cannot address memory above the 1meg+64k of conventional memory using segment:offset at all.. It's physically impossible. It must be copied to a chunk of dos memory that you allocated using the appropriate _dpmi_allocate_dos_memory() or whatever function. Then you must pass the address of that dos memory in es:bx or wherever else it wants it. -Sam