Mail Archives: djgpp/2003/08/10/02:23:40
Joel wrote:
> One of the SVGA graphics routines I'm making has given me an inline
> error message.
> What I'm doing is making a routine to call the protected mode verson
> of
> Function 9 -Set/Get Palette Data
> BL = 0 - Set Palette Data / 80H Set Palette Data During Vertical
> Retrace
> CX = Number of Palette Registers to Update
> DX = First of the Palette Registers to Update
> ES:EDI = Table of Palette Values
> So, here's my routine
> unsigned short PM_Palette_Data(unsigned char Flag, unsigned short
> PCount, unsigned short FirstPal, unsigned short TableSeg, unsigned
> long TableOff)
> {
> asm("movw %%ax, %%es\n\t"
> "call *%0"
> :
> : "r" (PMPaletteData),
OK. This code is to call PMPaletteData.
> "b" (Flag),
OK. ebx is to be Flag.
> "C" (PCount),
There is no "C" constraint on the i386.
Try the "c" constraint.
> "a" (TableSeg),
OK. eax is to be TableSeg.
You need to save and restore es.
> "D" (TableOff)
OK. edi is to be TableOff.
Where's FirstPal?
> );
> }
>
> And here's the error I get
> Error: inconsistent operand constraints in an `asm'
> Referring of course, to the "movw %%ax, %%es\n\t"
> I'm not sure why this is happening. movw is move word ax and es are
> words, although maybe it's confusing es as esi, but then what would I
> use to represent ES?
> Anyway, I'm still getting use to AT&T style DJGPP extended inline
> assembly, so any help is appreciated. Thanks.
Perhaps:
unsigned short
PM_Palette_Data (unsigned char Flag, unsigned short PCount,
unsigned short FirstPal, unsigned short TableSeg,
unsigned long TableOff){
int retval;
asm (
"pushl %%es\n\t"
"movw %w0, %%es\n\t"
"call *%1\n\t"
"popl %%es"
: "a" (RetVal)
: "r" (TableSeg), "r" (PMPaletteData),
"b" (Flag), "c" (PCount), "d" (FirstPal), "D" (TableOff)
);
return retval;
}
- Raw text -