Mail Archives: djgpp/1996/05/22/05:04:18
Xref: | news2.mv.net comp.graphics.algorithms:20670 comp.os.msdos.djgpp:4125
|
From: | "Matthew J. Freyman" <flatline AT postoffice DOT ptd DOT net>
|
Newsgroups: | comp.os.msdos.djgpp,comp.graphics.algorithms
|
Subject: | Inline ASM, Mode 13h problem
|
Date: | Tue, 21 May 1996 20:44:39 -0400
|
Organization: | ProLog - PenTeleData, Inc.
|
Lines: | 76
|
Message-ID: | <31A26377.29C6@postoffice.ptd.net>
|
Reply-To: | flatline AT postoffice DOT ptd DOT net
|
NNTP-Posting-Host: | cs4-06.all.ptd.net
|
Mime-Version: | 1.0
|
To: | djgpp AT delorie DOT com
|
DJ-Gateway: | from newsgroup comp.os.msdos.djgpp
|
I'm an experienced C, C++ programmer, but I admit to know little about
assembly language, especially the AT&T Syntax. I picked up some ASM
FAQs and Tutorials off the net. I've been toying with various graphic
libs for Turbo C(initially), and more recently DJGPP, and I decided to
code my own routines so I could get a better understanding of the low
level stuff.
Here's my problem: I managed to set mode 13h under DJGPP v2, and
restore the text mode, but I am not having luck using the inline
assembler to work on a put-pixel routine.
Here's the code:
#include <go32.h>
#include <dpmi.h>
#include <pc.h>
#define VGA256 0x13
#define TEXT 0x03
short glib_current_vidmode=0x03;
short glib_selector;
void setmode(short);
void putpixel(short,short,short);
int main() {
setmode(VGA256);
putpixel(160,100,4);
while(!kbhit());
setmode(TEXT);
return 0;
}
void setmode(short mode) {
__dpmi_regs r;
r.x.ax = mode;
__dpmi_int(0x10,&r);
glib_selector = _dos_ds;
glib_current_vidmode=mode;
}//END SETMODE FUNCTION
void putpixel(short x,short y,short c) {
__asm__ __volatile__("
movw %0, %%es;
movl $0xA0000, %%edi;
movw %2, %%ax;
imulw $320, %%ax;
addw %1, %%ax;
addw %%ax, %%di;
movb %3, %%es:(%%edi);"
:
: "g" (glib_selector), "g" (x), "g" (y), "g" (c)
);
}//END PUTPIXEL ROUTINE
I'm developing under RHIDE beta4. I get an assembler error in the
putpixel function, and I believe it is with the following line:
movb %3, %%es:(%%edi);"
ERROR: OPERANDS GIVEN DON'T MATCH ANY KNOWN 386 INSTRUCTION.
I don't know enough about inline ASM to find what I'm doing wrong.
Most of that function was taken from a snipped of ASM code from a
tutorial that I converted inline.
Any help would be appreciated.
--
***********************************************************
* FLATLINE: * flatline AT prolog DOT net *
* Stone Cold Dream of * *
* a Dead-Hot Cyberjock * *
***********************************************************
* Matthew J Freyman *
**************************
- Raw text -