www.delorie.com/archives/browse.cgi   search  
Mail Archives: djgpp/1996/08/18/22:46:46

Xref: news2.mv.net comp.os.msdos.djgpp:7588
From: John Luebs <jkluebs AT sprynet DOT com>
Newsgroups: comp.os.msdos.djgpp
Subject: Screen Read problems (mode 13h)
Date: Sun, 18 Aug 1996 02:13:17 -0400
Organization: EpiCenter Software
Lines: 46
Message-ID: <3216B47D.EDA@sprynet.com>
Reply-To: jkluebs AT sprynet DOT com
NNTP-Posting-Host: dd09-083.compuserve.com
Mime-Version: 1.0
To: djgpp AT delorie DOT com
DJ-Gateway: from newsgroup comp.os.msdos.djgpp

I use this function to put a row of pixels into the video buffer
offset is an int that contains the starting pixel value
work_back is a long* to the data to be put to the screen, and
sprite_width
is the number of pixels in the transfer.

This function works fine!
__asm__ __volatile__ ("pushw %%es\n
    		movl $0xa0000h, %%edi\n
    		addl %0, %%edi\n
    		movw %1, %%es\n
    		movl %2, %%esi\n
    		movl %3, %%ecx\n
    		cld\n
    		rep\n
    		movsb\n
    		popw %%es\n"
    		:
    		: "g" (offset), "g" (_dos_ds), "g" (work_back), "g" (sprite_width)
    		: "cx", "di", "si"
    	);

I use this to do the opposite, however I get GPFs. Any Suggestions??

__asm__ __volatile__ ("pushw %%ds\n
 		pushw %%es\n
 		movw %%ds, %%ax\n
 		movl $0xa0000h, %%esi\n
    		addl %0, %%esi\n
    		movw %1, %%ds\n
    		movl %2, %%edi\n
    		movw %%ax, %%es\n
    		movl %3, %%ecx\n
    		cld\n
    		rep\n
    		movsb\n
    		popw %%es\n
    		popw %%ds\n"
    		:
    		: "g" (offset), "g" (_dos_ds), "g" (work_back), "g" (sprite_width)
    		: "ax", "cx", "di", "si"
    	);

Any help appreciated!

John Luebs

- Raw text -


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