Xref: news2.mv.net comp.os.msdos.djgpp:3514 From: Shawn Hargreaves Newsgroups: comp.os.msdos.djgpp Subject: Re: Memory problem Date: Sun, 5 May 1996 12:01:15 +0100 Organization: The University of York, UK Lines: 34 Message-ID: NNTP-Posting-Host: tower.york.ac.uk Mime-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII In-Reply-To: <4mdcv7$2qgu@venere.inet.it> To: djgpp AT delorie DOT com DJ-Gateway: from newsgroup comp.os.msdos.djgpp On Fri, 3 May 1996, Edo wrote: > Can anyone help me with this little piece of code? This program put a > pixel into a "virtual" screen and then copy the virtual screen into > the vga...but it doesn't work! I think that it is due to my low skill [...] > vr_screen=(unsigned long *)malloc(320*200); > vr_screen_sel=_go32_my_ds(); > vr_addr=__dpmi_get_segment_base_address(vr_screen_sel,vr_screen); > vr_addr=vr_addr*16; None of that is needed for writing to a virtual buffer. You don't need to explicitly load the vr_screen_sel, since that will always be in %ds and %es in any case. You don't need to worry about the segment base address either: that is a linear address, wheras you want to use the offset into the segment which is what malloc returns. It's much simpler than you think... All you need is: char *vr_screen = malloc(320*200); void putpixel(int x, int y, int color) { vr_screen[y*320 + x] = color; } /* * Shawn Hargreaves. Why is 'phonetic' spelt with a ph? * Check out Allegro and FED on http://www.york.ac.uk/~slh100/ */