X-Authentication-Warning: delorie.com: mail set sender to djgpp-bounces using -f X-Recipient: djgpp AT delorie DOT com X-Authenticated: #27081556 X-Provags-ID: V01U2FsdGVkX18Fm3pjjusFM9fl9eyjOTNTUNo1OUCiCEp6EaN3eP gheBCcvKyK1TRI From: Juan Manuel Guerrero To: djgpp AT delorie DOT com Subject: inline assemby question Date: Thu, 13 Sep 2007 18:22:23 +0200 User-Agent: KMail/1.9.5 MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline Message-Id: <200709131822.23799.juan.guerrero@gmx.de> X-Y-GMX-Trusted: 0 I have tried to compile freebe12 using gcc 4.2.1 and binutils 2.17. I have also applied the patch proposed by Robert Riebisch some time ago. The compilation of the cirrus54 driver fails with the following error message: make.exe[1]: Entering directory `d:/p/srcs/contrib/freebe/cirrus54' gcc -O3 -m486 -fomit-frame-pointer -Wall -Werror -I.. -MMD -o driver.o -c driver.c driver.c: In function 'SrcTransBltSys32MMIO': driver.c:1309: error: can't find a register in class 'DREG' while reloading 'asm' driver.c:1309: error: 'asm' operand has impossible constraints make.exe[1]: *** [driver.o] Error 1 make.exe[1]: Leaving directory `d:/p/srcs/contrib/freebe/cirrus54' make.exe: *** [cirrus54/vbeaf.drv] Error 2 The inline assembly code follows: #define SrcTransBltSysMacro(mmio,bpp,pixmode)\ void SrcTransBltSys##bpp##mmio(AF_DRIVER *af, void *srcAddr, long srcPitch, long srcLeft, long srcTop, long width, long height, long dstLeft, long dstTop, long op, unsigned long transparent)\ { \ unsigned long pdst; \ int bltmode,bltrop; \ \ width*=(bpp/8);width--;height--; \ srcLeft*=(bpp/8);dstLeft*=(bpp/8); \ waitidle##mmio(); \ need_wait=1; \ dstTop += af_active_page*af_height; \ pdst = dstTop * af_width + dstLeft; \ bltrop=af_mix_fore(op); \ bltmode=CIR_BLT_MEM|CIR_BLT_TRANS|pixmode;\ SET_ROP_MODE##mmio(bltrop,bltmode); \ SET_WIDTH_HEIGHT##mmio(width,height); \ SET_TRANS##mmio((int)transparent); \ SET_SRCADDR##mmio(0); \ SET_DSTADDR##mmio(pdst); \ CIR_CMD(CIR_CMD_RUN); \ width++;height++; \ __asm__ __volatile__ (" \ cld; \ 1:; \ pushl %%edi; \ pushl %%ecx; \ rep; movsl; \ movsw; \ movsw; \ popl %%ecx; \ addl %%ebx,%%esi; \ popl %%edi; \ decl %%edx; \ jnz 1b; \ " \ : \ :"S" (srcAddr+srcTop*srcPitch+srcLeft), "D" (af_linear?af->LinearMem:af->BankedMem), "b" (srcPitch-((width-1)&0xfffffffc)-4), "c" ((width-1)>>2), "d" (height)\ :"eax","ebx","ecx","edx","esi","edi","cc"\ ); \ } SrcTransBltSysMacro(,8,CIR_BLT_PIX8) SrcTransBltSysMacro(,16,CIR_BLT_PIX16) SrcTransBltSysMacro(,24,CIR_BLT_PIX24) SrcTransBltSysMacro(,32,CIR_BLT_PIX32) SrcTransBltSysMacro(MMIO,8,CIR_BLT_PIX8) SrcTransBltSysMacro(MMIO,16,CIR_BLT_PIX16) SrcTransBltSysMacro(MMIO,24,CIR_BLT_PIX24) SrcTransBltSysMacro(MMIO,32,CIR_BLT_PIX32) // This is line 1309 My inline assembly and GAS skills are to limited to solve this issue. May be some one else has a good suggestion how to fix this. Only for the realy interested people I submit the actual patch. This patch includes the modifications proposed by Robert. Regards, Juan M. Guerrero 2007-09-12 Juan Manuel Guerrero * mach64/driver.c: Fix wrong use of ## in PutMonoImageMacro macro. 2007-09-10 Juan Manuel Guerrero * cirrus54/driver.c: Fix wrong use of ## in PutMonoImageMacro macro. Fix wrong use of ## in SetupMacro macro. * mach64/driver.c (SetBank32): Quote every asm line with ". (SetBank): Quote every asm line with ". 2007-09-09 Juan Manuel Guerrero Patch to compile freebs12 with gcc 4.2.1, binutils 2.17 and djdev203 and djdev204. The things that I have changed are documentated in this changelog. The original patch is *not* from me, it has been taken from: The original patch is also stored in /djgpp as: http://www.bttr-software.de/misc/freebe12_gcc4_patch.zip * ati/driver.c: Include for declaration of memcmp(). (SetBank32): Quote every asm line with ". * avance/driver.c (GetVideoModeInfo): Fix difference in signedness of pointer targets. (SetBank32): Quote every asm line with ". * cirrus54/driver.c: Fix wrong use of ## in WaitMacro macro. Fix wrong use of ## in copymonomacro macro. Fix wrong use of ## in copycolormacro macro. Fix wrong use of ## in DrawScanMacro macro. Fix wrong use of ## in DrawPattScanMacro macro. Fix wrong use of ## in DrawPattRectMacro macro. Fix wrong use of ## in DrawColorPattScanMacro macro. Fix wrong use of ## in DrawRectMacro macro. Fix wrong use of ## in DrawColorPattRectMacro macro. Fix wrong use of ## in BitBltMacro macro. Fix wrong use of ## in SrcTransBltMacro macro. Fix wrong use of ## in BitBltSysMacro macro. Fix wrong use of ## in SrcTransBltSysMacro macro. (SetBank32): Quote every asm line with ". (SetBank): Quote every asm line with ". (SetCursorPos): Quote every asm line with ". (shiftleft): Quote every asm line with ". diff -aprNU3 freebe.orig/ati/driver.c freebe/ati/driver.c --- freebe.orig/ati/driver.c 1998-12-21 20:52:42 +0000 +++ freebe/ati/driver.c 2007-09-11 23:51:04 +0000 @@ -19,6 +19,7 @@ #include +#include #include "vbeaf.h" @@ -563,41 +564,41 @@ void SetPaletteData(AF_DRIVER *af, AF_PA * Relocatable bank switch function, called with a bank number in %edx. */ -asm (" +asm ( - .globl _SetBank32, _SetBank32End + ".globl _SetBank32, _SetBank32End\n\t" - .align 4 - _SetBank32: - pushl %edx - pushl %eax - movl %edx, %eax - movb %al, %ah /* save al into ah */ - - movl _ati_port, %edx /* read port 1CE index 0xB2 */ - movb $0xB2, %al - outb %al, %dx - incl %edx - inb %dx, %al - decl %edx - - andb $0xE1, %al /* mask out bits 1-4 */ - shlb $1, %ah /* shift bank number */ - orb %al, %ah - - movb $0xB2, %al /* write to port 1CE index 0xB2 */ - outb %al, %dx - incl %edx - movb %ah, %al - outb %al, %dx - - popl %eax - popl %edx - ret + ".align 4\n\t" + "_SetBank32:\n\t" + "pushl %edx\n\t" + "pushl %eax\n\t" + "movl %edx, %eax\n\t" + "movb %al, %ah /* save al into ah */\n\t" + + "movl _ati_port, %edx /* read port 1CE index 0xB2 */\n\t" + "movb $0xB2, %al\n\t" + "outb %al, %dx \n\t" + "incl %edx\n\t" + "inb %dx, %al\n\t" + "decl %edx\n\t" + + "andb $0xE1, %al /* mask out bits 1-4 */\n\t" + "shlb $1, %ah /* shift bank number */\n\t" + "orb %al, %ah \n\t" + + "movb $0xB2, %al /* write to port 1CE index 0xB2 */\n\t" + "outb %al, %dx\n\t" + "incl %edx\n\t" + "movb %ah, %al\n\t" + "outb %al, %dx\n\t" + + "popl %eax\n\t" + "popl %edx\n\t" + "ret\n\t" - _SetBank32End: + "_SetBank32End:\n\t" -"); +); diff -aprNU3 freebe.orig/avance/driver.c freebe/avance/driver.c --- freebe.orig/avance/driver.c 1998-12-11 23:17:14 +0000 +++ freebe/avance/driver.c 2007-09-11 23:51:04 +0000 @@ -549,10 +549,10 @@ long GetVideoModeInfo(AF_DRIVER *af, sho get_field_data ( info->bpp, - &modeInfo->RedMaskSize, &modeInfo->RedFieldPosition, - &modeInfo->GreenMaskSize, &modeInfo->GreenFieldPosition, - &modeInfo->BlueMaskSize, &modeInfo->BlueFieldPosition, - &modeInfo->RsvdMaskSize, &modeInfo->RsvdFieldPosition + (char *)(void *)&modeInfo->RedMaskSize, (char *)(void *)&modeInfo->RedFieldPosition, + (char *)(void *)&modeInfo->GreenMaskSize, (char *)(void *)&modeInfo->GreenFieldPosition, + (char *)(void *)&modeInfo->BlueMaskSize, (char *)(void *)&modeInfo->BlueFieldPosition, + (char *)(void *)&modeInfo->RsvdMaskSize, (char *)(void *)&modeInfo->RsvdFieldPosition ); /* for linear video modes, fill in these variables: */ @@ -859,30 +859,30 @@ void SetPaletteData(AF_DRIVER *af, AF_PA * function out, but you may have problems running other VBE/AF * applications if you don't provide it. */ -asm (" +asm ( # - .globl _SetBank32, _SetBank32End + ".globl _SetBank32, _SetBank32End\n\t" - .align 4 - _SetBank32: + ".align 4\n\t" + "_SetBank32:\n\t" - pushal + "pushal\n\t" - andl $0x1F, %edx # Bank numbers are 5-bit - movl %edx, %eax + "andl $0x1F, %edx # Bank numbers are 5-bit\n\t" + "movl %edx, %eax\n\t" - movl $0x3d6, %edx # 0x3d6 = read bank select port - outb %al, %dx + "movl $0x3d6, %edx # 0x3d6 = read bank select port\n\t" + "outb %al, %dx\n\t" - movl $0x3d7, %edx # 0x3d7 = r/w bank select port - outb %al, %dx + "movl $0x3d7, %edx # 0x3d7 = r/w bank select port\n\t" + "outb %al, %dx\n\t" - popal - ret + "popal\n\t" + "ret\n\t" - _SetBank32End: + "_SetBank32End:\n\t" # -"); +); /* SetBank: diff -aprNU3 freebe.orig/cirrus54/driver.c freebe/cirrus54/driver.c --- freebe.orig/cirrus54/driver.c 1999-06-04 21:51:40 +0000 +++ freebe/cirrus54/driver.c 2007-09-12 00:15:32 +0000 @@ -337,23 +337,23 @@ void SetPaletteData(AF_DRIVER *af, AF_PA * applications if you don't provide it. * */ -asm (" +asm ( - .globl _SetBank32, _SetBank32End + ".globl _SetBank32, _SetBank32End\n\t" - .align 4 - _SetBank32: - pushl %edx /* I have 16K bank gran, but driver probably */ - movb %dl,%ah /* don't know about that, so I must multiply by 4 */ - shlb $2,%ah - movl $0x3CE, %edx - movb $9, %al - outw %ax, %dx - popl %edx - ret - _SetBank32End: + ".align 4\n\t" + "_SetBank32:\n\t" + "pushl %edx /* I have 16K bank gran, but driver probably */\n\t" + "movb %dl,%ah /* don't know about that, so I must multiply by 4 */\n\t" + "shlb $2,%ah\n\t" + "movl $0x3CE, %edx\n\t" + "movb $9, %al\n\t" + "outw %ax, %dx\n\t" + "popl %edx\n\t" + "ret\n\t" + "_SetBank32End:\n\t" -"); +); /* SetBank: * C-callable bank switch function. This version simply chains to the @@ -364,12 +364,12 @@ asm (" */ void SetBank(AF_DRIVER *af, long bank) { - asm(" - movb %%al,%%ah - shlb $2,%%ah - movl $0x3CE, %%edx - movb $9, %%al - outw %%ax, %%dx" + asm( + "movb %%al,%%ah\n\t" + "shlb $2,%%ah\n\t" + "movl $0x3CE, %%edx\n\t" + "movb $9, %%al\n\t" + "outw %%ax, %%dx" ::"a" (bank):"%dx"); af_bank = bank; } @@ -559,15 +559,15 @@ inline void waitidleMMIO() * Delay until the hardware controller has finished drawing. */ -#define WaitMacro(bpp) \ -void WaitTillIdle##bpp##(AF_DRIVER *af) \ +#define WaitMacro(bpp) \ +void WaitTillIdle##bpp(AF_DRIVER *af) \ { \ if (need_wait) { \ outportb(GRX,0x31); \ while (inportb(GRX+1)&1); \ need_wait=0; \ } \ - SET_FG##bpp##(0); \ + SET_FG##bpp(0); \ } WaitMacro(8) @@ -575,7 +575,7 @@ WaitMacro(16) WaitMacro(24) WaitMacro(32) -#define WaitMacroMMIO(bpp) \ +#define WaitMacroMMIO(bpp) \ void WaitTillIdle##bpp##MMIO(AF_DRIVER *af) \ { \ if (need_wait) { \ @@ -655,13 +655,13 @@ int last_mono_x,last_mono_y; int last_color_x,last_color_y; -#define copymonomacro(mmio,bpp) \ -void copymonopattern##bpp####mmio##(AF_DRIVER *af,int x,int y)\ +#define copymonomacro(mmio,bpp) \ +void copymonopattern##bpp##mmio(AF_DRIVER *af,int x,int y) \ { \ int i; \ unsigned char *p; \ \ - SET_FG##bpp####mmio##(0); \ + SET_FG##bpp##mmio(0); \ if ((last_mono_y!=(y&7))||(last_mono_x!=(x&7))) { \ last_mono_y=y&7; \ last_mono_x=x&7; \ @@ -689,12 +689,12 @@ copymonomacro(MMIO,16) copymonomacro(MMIO,24) copymonomacro(MMIO,32) -#define copycolormacro(mmio,bpp) \ -void copycolorpattern##bpp####mmio##(AF_DRIVER *af,int x,int y) \ +#define copycolormacro(mmio,bpp) \ +void copycolorpattern##bpp##mmio(AF_DRIVER *af,int x,int y) \ { \ int i,j; \ \ - SET_FG##bpp####mmio##(0); \ + SET_FG##bpp##mmio(0); \ if ((last_color_y!=(y&7))||(last_color_x!=(x&7))) { \ last_color_y=y&7; \ last_color_x=x&7; \ @@ -842,8 +842,8 @@ void Use8x8ColorPattern(AF_DRIVER *af, i * not including the second x coordinate. If the second coord is less * than the first, they are swapped. If they are equal, nothing is drawn. */ -#define DrawScanMacro(mmio,bpp)\ -void DrawScan##bpp####mmio##(AF_DRIVER *af, long color, long y, long x1, long x2)\ +#define DrawScanMacro(mmio,bpp) \ +void DrawScan##bpp##mmio(AF_DRIVER *af, long color, long y, long x1, long x2)\ { \ if (x2 < x1) { \ int tmp = x1; \ @@ -852,13 +852,13 @@ void DrawScan##bpp####mmio##(AF_DRIVER * } \ \ y += af_active_page*af_height; \ - waitidle##mmio##(); \ + waitidle##mmio(); \ need_wait=1; \ SET_ROP_MODE(cir_bltrop,cir_bltmode); \ - SET_FG##bpp####mmio##(color); \ - SET_WIDTH_HEIGHT##mmio##((x2-x1)*(bpp/8)-1,0);\ - SET_DSTADDR##mmio##(y*af_width+x1*(bpp/8));\ - SET_SRCADDR##mmio##(cir_offscreen); \ + SET_FG##bpp##mmio(color); \ + SET_WIDTH_HEIGHT##mmio((x2-x1)*(bpp/8)-1,0);\ + SET_DSTADDR##mmio(y*af_width+x1*(bpp/8)); \ + SET_SRCADDR##mmio(cir_offscreen); \ CIR_CMD(CIR_CMD_RUN); \ } @@ -877,8 +877,8 @@ DrawScanMacro(MMIO,32) * drawn using the specified foreground color and the foreground mix * mode, and clear bits use the background color and background mix mode. */ -#define DrawPattScanMacro(mmio,bpp)\ -void DrawPattScan##bpp####mmio##(AF_DRIVER *af, long foreColor, long backColor, long y, long x1, long x2)\ +#define DrawPattScanMacro(mmio,bpp) \ +void DrawPattScan##bpp##mmio(AF_DRIVER *af, long foreColor, long backColor, long y, long x1, long x2)\ { \ if (x2 < x1) { \ int tmp = x1; \ @@ -887,15 +887,15 @@ void DrawPattScan##bpp####mmio##(AF_DRIV } \ \ y += af_active_page*af_height; \ - waitidle##mmio##(); \ - copymonopattern##bpp####mmio##(af,x1,y); \ + waitidle##mmio(); \ + copymonopattern##bpp##mmio(af,x1,y); \ need_wait=1; \ SET_ROP_MODE(cir_bltrop,cir_bltmode); \ - SET_FG##bpp####mmio##(foreColor); \ - SET_BG##bpp####mmio##(backColor); \ - SET_WIDTH_HEIGHT##mmio##((x2-x1)*(bpp/8)-1,0);\ - SET_DSTADDR##mmio##(y*af_width+x1*(bpp/8));\ - SET_SRCADDR##mmio##(cir_offmono); \ + SET_FG##bpp##mmio(foreColor); \ + SET_BG##bpp##mmio(backColor); \ + SET_WIDTH_HEIGHT##mmio((x2-x1)*(bpp/8)-1,0);\ + SET_DSTADDR##mmio(y*af_width+x1*(bpp/8)); \ + SET_SRCADDR##mmio(cir_offmono); \ CIR_CMD(CIR_CMD_RUN); \ } @@ -912,8 +912,8 @@ DrawPattScanMacro(MMIO,32) /* DrawColorPattScan: * Fills a scanline using the current color pattern and mix mode. */ -#define DrawColorPattScanMacro(mmio,bpp)\ -void DrawColorPattScan##bpp####mmio##(AF_DRIVER *af, long y, long x1, long x2)\ +#define DrawColorPattScanMacro(mmio,bpp) \ +void DrawColorPattScan##bpp##mmio(AF_DRIVER *af, long y, long x1, long x2)\ { \ if (x2 < x1) { \ int tmp = x1; \ @@ -922,13 +922,13 @@ void DrawColorPattScan##bpp####mmio##(AF } \ \ y += af_active_page*af_height; \ - waitidle##mmio##(); \ - copycolorpattern##bpp####mmio##(af,x1,y); \ + waitidle##mmio(); \ + copycolorpattern##bpp##mmio(af,x1,y); \ need_wait=1; \ - SET_ROP_MODE##mmio##(cir_bltrop,cir_bltmode);\ - SET_WIDTH_HEIGHT##mmio##((x2-x1)*(bpp/8)-1,0);\ - SET_DSTADDR##mmio##(y*af_width+x1*(bpp/8));\ - SET_SRCADDR##mmio##(cir_offcolor); \ + SET_ROP_MODE##mmio(cir_bltrop,cir_bltmode);\ + SET_WIDTH_HEIGHT##mmio((x2-x1)*(bpp/8)-1,0);\ + SET_DSTADDR##mmio(y*af_width+x1*(bpp/8)); \ + SET_SRCADDR##mmio(cir_offcolor); \ CIR_CMD(CIR_CMD_RUN); \ } @@ -945,17 +945,17 @@ DrawColorPattScanMacro(MMIO,32) /* DrawRect: * Fills a rectangle in the current foreground mix mode. */ -#define DrawRectMacro(mmio,bpp)\ -void DrawRect##bpp####mmio##(AF_DRIVER *af, unsigned long color, long left, long top, long width, long height)\ +#define DrawRectMacro(mmio,bpp) \ +void DrawRect##bpp##mmio(AF_DRIVER *af, unsigned long color, long left, long top, long width, long height)\ { \ top += af_active_page*af_height; \ - waitidle##mmio##(); \ + waitidle##mmio(); \ need_wait=1; \ - SET_ROP_MODE##mmio##(cir_bltrop,cir_bltmode);\ - SET_FG##bpp####mmio##((int)color); \ - SET_WIDTH_HEIGHT##mmio##(width*(bpp/8)-1,height-1);\ - SET_DSTADDR##mmio##(top*af_width+left*(bpp/8));\ - SET_SRCADDR##mmio##(cir_offscreen); \ + SET_ROP_MODE##mmio(cir_bltrop,cir_bltmode);\ + SET_FG##bpp##mmio((int)color); \ + SET_WIDTH_HEIGHT##mmio(width*(bpp/8)-1,height-1);\ + SET_DSTADDR##mmio(top*af_width+left*(bpp/8));\ + SET_SRCADDR##mmio(cir_offscreen); \ CIR_CMD(CIR_CMD_RUN); \ } @@ -974,19 +974,19 @@ DrawRectMacro(MMIO,32) * drawn using the specified foreground color and the foreground mix * mode, and clear bits use the background color and background mix mode. */ -#define DrawPattRectMacro(mmio,bpp)\ -void DrawPattRect##bpp####mmio##(AF_DRIVER *af, unsigned long foreColor, unsigned long backColor, long left, long top, long width, long height)\ +#define DrawPattRectMacro(mmio,bpp) \ +void DrawPattRect##bpp##mmio(AF_DRIVER *af, unsigned long foreColor, unsigned long backColor, long left, long top, long width, long height)\ { \ top += af_active_page*af_height; \ - waitidle##mmio##(); \ - copymonopattern##bpp####mmio##(af,left,top);\ + waitidle##mmio(); \ + copymonopattern##bpp##mmio(af,left,top); \ need_wait=1; \ - SET_ROP_MODE##mmio##(cir_bltrop,cir_bltmode);\ - SET_FG##bpp####mmio##((int)foreColor); \ - SET_BG##bpp####mmio##((int)backColor); \ - SET_WIDTH_HEIGHT##mmio##(width*(bpp/8)-1,height-1);\ - SET_DSTADDR##mmio##(top*af_width+left*(bpp/8));\ - SET_SRCADDR##mmio##(cir_offmono); \ + SET_ROP_MODE##mmio(cir_bltrop,cir_bltmode);\ + SET_FG##bpp##mmio((int)foreColor); \ + SET_BG##bpp##mmio((int)backColor); \ + SET_WIDTH_HEIGHT##mmio(width*(bpp/8)-1,height-1);\ + SET_DSTADDR##mmio(top*af_width+left*(bpp/8));\ + SET_SRCADDR##mmio(cir_offmono); \ CIR_CMD(CIR_CMD_RUN); \ } @@ -1003,17 +1003,17 @@ DrawPattRectMacro(MMIO,32) /* DrawColorPattRect: * Fills a rectangle using the current color pattern and mix mode. */ -#define DrawColorPattRectMacro(mmio,bpp)\ -void DrawColorPattRect##bpp####mmio##(AF_DRIVER *af, long left, long top, long width, long height)\ +#define DrawColorPattRectMacro(mmio,bpp) \ +void DrawColorPattRect##bpp##mmio(AF_DRIVER *af, long left, long top, long width, long height)\ { \ top += af_active_page*af_height; \ - waitidle##mmio##(); \ - copycolorpattern##bpp####mmio##(af,left,top);\ + waitidle##mmio(); \ + copycolorpattern##bpp##mmio(af,left,top); \ need_wait=1; \ - SET_ROP_MODE##mmio##(cir_bltrop,cir_bltmode);\ - SET_WIDTH_HEIGHT##mmio##(width*(bpp/8)-1,height-1);\ - SET_DSTADDR##mmio##(top*af_width+left*(bpp/8));\ - SET_SRCADDR##mmio##(cir_offcolor); \ + SET_ROP_MODE##mmio(cir_bltrop,cir_bltmode);\ + SET_WIDTH_HEIGHT##mmio(width*(bpp/8)-1,height-1);\ + SET_DSTADDR##mmio(top*af_width+left*(bpp/8));\ + SET_SRCADDR##mmio(cir_offcolor); \ CIR_CMD(CIR_CMD_RUN); \ } @@ -1032,15 +1032,15 @@ DrawColorPattRectMacro(MMIO,32) * mix operation. This must correctly handle the case where the two * regions overlap. */ -#define BitBltMacro(mmio,bpp,pixmode)\ -void BitBlt##bpp####mmio##(AF_DRIVER *af, long left, long top, long width, long height, long dstLeft, long dstTop, long op)\ +#define BitBltMacro(mmio,bpp,pixmode) \ +void BitBlt##bpp##mmio(AF_DRIVER *af, long left, long top, long width, long height, long dstLeft, long dstTop, long op)\ { \ unsigned long pdst,psrc; \ int bltmode=pixmode,bltrop; \ \ top += af_active_page*af_height; \ dstTop += af_active_page*af_height; \ - waitidle##mmio##(); \ + waitidle##mmio(); \ width*=(bpp/8);width--;height--; \ left*=(bpp/8);dstLeft*=(bpp/8); \ need_wait=1; \ @@ -1052,11 +1052,11 @@ void BitBlt##bpp####mmio##(AF_DRIVER *af psrc = ((top * af_width) + left); \ pdst = ((dstTop * af_width) + dstLeft); \ } \ - SET_WIDTH_HEIGHT##mmio##(width,height); \ - SET_SRCADDR##mmio##(psrc); \ - SET_DSTADDR##mmio##(pdst); \ + SET_WIDTH_HEIGHT##mmio(width,height); \ + SET_SRCADDR##mmio(psrc); \ + SET_DSTADDR##mmio(pdst); \ bltrop=af_mix_fore(op); \ - SET_ROP_MODE##mmio##(bltrop,bltmode); \ + SET_ROP_MODE##mmio(bltrop,bltmode); \ CIR_CMD(CIR_CMD_RUN); \ } @@ -1076,14 +1076,14 @@ BitBltMacro(MMIO,32,CIR_BLT_PIX32) * transparent color. Results are undefined if the two regions overlap. */ #define SrcTransBltMacro(mmio,bpp,pixmode)\ -void SrcTransBlt##bpp####mmio##(AF_DRIVER *af, long left, long top, long width, long height, long dstLeft, long dstTop, long op, unsigned long transparent)\ +void SrcTransBlt##bpp##mmio(AF_DRIVER *af, long left, long top, long width, long height, long dstLeft, long dstTop, long op, unsigned long transparent)\ { \ unsigned long pdst,psrc; \ int bltmode=pixmode|CIR_BLT_TRANS,bltrop; \ \ top += af_active_page*af_height; \ dstTop += af_active_page*af_height; \ - waitidle##mmio##(); \ + waitidle##mmio(); \ width*=(bpp/8);width--;height--; \ left*=(bpp/8);dstLeft*=(bpp/8); \ need_wait=1; \ @@ -1095,12 +1095,12 @@ void SrcTransBlt##bpp####mmio##(AF_DRIVE psrc = ((top * af_width) + left); \ pdst = ((dstTop * af_width) + dstLeft); \ } \ - SET_TRANS##mmio##((int)transparent); \ - SET_WIDTH_HEIGHT##mmio##(width,height); \ - SET_SRCADDR##mmio##(psrc); \ - SET_DSTADDR##mmio##(pdst); \ + SET_TRANS##mmio((int)transparent); \ + SET_WIDTH_HEIGHT##mmio(width,height); \ + SET_SRCADDR##mmio(psrc); \ + SET_DSTADDR##mmio(pdst); \ bltrop=af_mix_fore(op); \ - SET_ROP_MODE##mmio##(bltrop,bltmode); \ + SET_ROP_MODE##mmio(bltrop,bltmode); \ CIR_CMD(CIR_CMD_RUN); \ } @@ -1162,10 +1162,10 @@ void SetCursorPos(AF_DRIVER *af, long x, y-=hw_cur_y; if (y<0) y=0; __asm__ ( - "movw $0x3c4,%%dx - outw %%ax,%%dx - movw %%bx,%%ax - outw %%ax,%%dx" + "movw $0x3c4,%%dx\n" + "outw %%ax,%%dx\n" + "movw %%bx,%%ax\n" + "outw %%ax,%%dx\n" : :"a" ((x<<5)+0x10),"b" ((y<<5)+0x11) :"%dx"); @@ -1208,24 +1208,24 @@ void ShowCursor(AF_DRIVER *af, long visi } } -#define BitBltSysMacro(mmio,bpp,pixmode) \ -void BitBltSys##bpp####mmio##(AF_DRIVER *af, void *srcAddr, long srcPitch, long srcLeft, long srcTop, long width, long height, long dstLeft, long dstTop, long op)\ +#define BitBltSysMacro(mmio,bpp,pixmode) \ +void BitBltSys##bpp##mmio(AF_DRIVER *af, void *srcAddr, long srcPitch, long srcLeft, long srcTop, long width, long height, long dstLeft, long dstTop, long op)\ { \ unsigned long pdst; \ int bltmode=pixmode,bltrop; \ \ width*=(bpp/8);width--;height--; \ srcLeft*=(bpp/8);dstLeft*=(bpp/8); \ - waitidle##mmio##(); \ + waitidle##mmio(); \ need_wait=1; \ dstTop += af_active_page*af_height; \ pdst = dstTop * af_width + dstLeft; \ - SET_WIDTH_HEIGHT##mmio##(width,height); \ - SET_SRCADDR##mmio##(0); \ - SET_DSTADDR##mmio##(pdst); \ + SET_WIDTH_HEIGHT##mmio(width,height); \ + SET_SRCADDR##mmio(0); \ + SET_DSTADDR##mmio(pdst); \ bltrop=af_mix_fore(op); \ bltmode|=CIR_BLT_MEM; \ - SET_ROP_MODE##mmio##(bltrop,bltmode); \ + SET_ROP_MODE##mmio(bltrop,bltmode); \ CIR_CMD(CIR_CMD_RUN); \ width++;height++; \ __asm__ __volatile__ ("\ @@ -1258,24 +1258,24 @@ BitBltSysMacro(MMIO,24,CIR_BLT_PIX24) BitBltSysMacro(MMIO,32,CIR_BLT_PIX32) #define SrcTransBltSysMacro(mmio,bpp,pixmode)\ -void SrcTransBltSys##bpp####mmio##(AF_DRIVER *af, void *srcAddr, long srcPitch, long srcLeft, long srcTop, long width, long height, long dstLeft, long dstTop, long op, unsigned long transparent)\ +void SrcTransBltSys##bpp##mmio(AF_DRIVER *af, void *srcAddr, long srcPitch, long srcLeft, long srcTop, long width, long height, long dstLeft, long dstTop, long op, unsigned long transparent)\ { \ unsigned long pdst; \ int bltmode,bltrop; \ \ width*=(bpp/8);width--;height--; \ srcLeft*=(bpp/8);dstLeft*=(bpp/8); \ - waitidle##mmio##(); \ + waitidle##mmio(); \ need_wait=1; \ dstTop += af_active_page*af_height; \ pdst = dstTop * af_width + dstLeft; \ bltrop=af_mix_fore(op); \ bltmode=CIR_BLT_MEM|CIR_BLT_TRANS|pixmode;\ - SET_ROP_MODE##mmio##(bltrop,bltmode); \ - SET_WIDTH_HEIGHT##mmio##(width,height); \ - SET_TRANS##mmio##((int)transparent); \ - SET_SRCADDR##mmio##(0); \ - SET_DSTADDR##mmio##(pdst); \ + SET_ROP_MODE##mmio(bltrop,bltmode); \ + SET_WIDTH_HEIGHT##mmio(width,height); \ + SET_TRANS##mmio((int)transparent); \ + SET_SRCADDR##mmio(0); \ + SET_DSTADDR##mmio(pdst); \ CIR_CMD(CIR_CMD_RUN); \ width++;height++; \ __asm__ __volatile__ (" \ @@ -1310,28 +1310,28 @@ SrcTransBltSysMacro(MMIO,32,CIR_BLT_PIX3 inline void shiftleft(unsigned char *line,int bytes,unsigned char bits) { - asm(" - movb $8,%%ch - addb %%cl,%%ch - movb %%dl,%%al -1: - movb (%%esi),%%ah - andl $0xffff,%%eax - shll %%cl,%%eax - movb %%ah,(%%esi) - xchgb %%ch,%%cl - shrl %%cl,%%eax - decl %%esi - xchgb %%ch,%%cl - decl %%ebx - jnz 1b" + asm( + "movb $8,%%ch\n\t" + "addb %%cl,%%ch\n\t" + "movb %%dl,%%al\n\t" +"1:\n\t" + "movb (%%esi),%%ah\n\t" + "andl $0xffff,%%eax\n\t" + "shll %%cl,%%eax\n\t" + "movb %%ah,(%%esi)\n\t" + "xchgb %%ch,%%cl\n\t" + "shrl %%cl,%%eax\n\t" + "decl %%esi\n\t" + "xchgb %%ch,%%cl\n\t" + "decl %%ebx\n\t" + "jnz 1b" ::"S" (line+bytes-1), "c" ((bits&31)|((32-(bits&31))<<8)), "d" (0), "b" (bytes)); } unsigned char lines[1024]; -#define PutMonoImageMacro(mmio,bpp,pixmode)\ -void PutMonoImage##bpp####mmio##(AF_DRIVER *af, long foreColor, long backColor, long dstX, long dstY, long byteWidth, long srcX, long srcY, long width, long height, unsigned char *image)\ +#define PutMonoImageMacro(mmio,bpp,pixmode) \ +void PutMonoImage##bpp##mmio(AF_DRIVER *af, long foreColor, long backColor, long dstX, long dstY, long byteWidth, long srcX, long srcY, long width, long height, unsigned char *image)\ { \ unsigned long pdst; \ int i,j,bytelen=(width+7)/8; \ @@ -1351,7 +1351,7 @@ void PutMonoImage##bpp####mmio##(AF_DRIV \ width*=(bpp/8);width--; \ dstX*=(bpp/8); \ - waitidle##mmio##(); \ + waitidle##mmio(); \ need_wait=1; \ dstY += af_active_page*af_height; \ pdst = dstY * af_width + dstX; \ @@ -1361,17 +1361,17 @@ void PutMonoImage##bpp####mmio##(AF_DRIV bltmode |= CIR_BLT_TRANS; \ if ((bpp/8)==1) { \ backColor|=backColor<<8; \ - SET_TRANS##mmio##(backColor); \ + SET_TRANS##mmio(backColor); \ backColor&=0xff; \ } else \ SET_TRANS(backColor); \ } \ - SET_BG##bpp####mmio##(backColor); \ - SET_ROP_MODE##mmio##(cir_bltrop,bltmode); \ - SET_FG##bpp####mmio##(foreColor); \ - SET_WIDTH_HEIGHT##mmio##(width,height-1); \ - SET_SRCADDR##mmio##(0); \ - SET_DSTADDR##mmio##(pdst); \ + SET_BG##bpp##mmio(backColor); \ + SET_ROP_MODE##mmio(cir_bltrop,bltmode); \ + SET_FG##bpp##mmio(foreColor); \ + SET_WIDTH_HEIGHT##mmio(width,height-1); \ + SET_SRCADDR##mmio(0); \ + SET_DSTADDR##mmio(pdst); \ CIR_CMD(CIR_CMD_RUN); \ __asm__ __volatile__ (" \ cld; \ @@ -1400,21 +1400,21 @@ PutMonoImageMacro(MMIO,32,CIR_BLT_PIX32) * video memory, so we can't talk directly to the card. */ -#define SetupMacro(mmio,bpp)\ -void SetupFuncPtr##bpp####mmio##(AF_DRIVER *af)\ -{\ - af->DrawScan = DrawScan##bpp####mmio##;\ - af->DrawPattScan = DrawPattScan##bpp####mmio##;\ - af->DrawColorPattScan = DrawColorPattScan##bpp####mmio##;\ - af->DrawRect = DrawRect##bpp####mmio##;\ - af->DrawPattRect = DrawPattRect##bpp####mmio##;\ - af->DrawColorPattRect = DrawColorPattRect##bpp####mmio##;\ - af->BitBlt = BitBlt##bpp####mmio##;\ - af->BitBltSys = BitBltSys##bpp####mmio##;\ - af->SrcTransBlt = SrcTransBlt##bpp####mmio##;\ - af->SrcTransBltSys = SrcTransBltSys##bpp####mmio##;\ - af->WaitTillIdle = WaitTillIdle##bpp####mmio##;\ - af->PutMonoImage = PutMonoImage##bpp####mmio##;\ +#define SetupMacro(mmio,bpp) \ +void SetupFuncPtr##bpp##mmio(AF_DRIVER *af) \ +{ \ + af->DrawScan = DrawScan##bpp##mmio; \ + af->DrawPattScan = DrawPattScan##bpp##mmio; \ + af->DrawColorPattScan = DrawColorPattScan##bpp##mmio;\ + af->DrawRect = DrawRect##bpp##mmio; \ + af->DrawPattRect = DrawPattRect##bpp##mmio; \ + af->DrawColorPattRect = DrawColorPattRect##bpp##mmio;\ + af->BitBlt = BitBlt##bpp##mmio; \ + af->BitBltSys = BitBltSys##bpp##mmio; \ + af->SrcTransBlt = SrcTransBlt##bpp##mmio; \ + af->SrcTransBltSys = SrcTransBltSys##bpp##mmio; \ + af->WaitTillIdle = WaitTillIdle##bpp##mmio; \ + af->PutMonoImage = PutMonoImage##bpp##mmio; \ } diff -aprNU3 freebe.orig/helper.c freebe/helper.c --- freebe.orig/helper.c 1999-06-23 21:18:28 +0000 +++ freebe/helper.c 2007-09-11 23:51:04 +0000 @@ -30,7 +30,7 @@ */ void trace_putc(char c) { - asm ( + __asm__ __volatile__ ( " int $0x21 " : @@ -38,12 +38,6 @@ void trace_putc(char c) : "a" (0x200), "d" (c) - : "%eax", - "%ebx", - "%ecx", - "%edx", - "%esi", - "%edi" ); } @@ -79,7 +73,7 @@ void trace_printf(char *msg, ...) break; case 'c': - c = va_arg(ap, char); + c = va_arg(ap, int); trace_putc(c); break; @@ -142,7 +136,7 @@ void rm_int(int num, RM_REGS *regs) regs->x.sp = 0; regs->x.ss = 0; - asm ( + __asm__ __volatile__ ( " int $0x31 " : @@ -151,12 +145,6 @@ void rm_int(int num, RM_REGS *regs) "c" (0), "D" (regs) - : "%eax", - "%ebx", - "%ecx", - "%edx", - "%esi", - "%edi" ); } @@ -173,7 +161,7 @@ int allocate_dos_memory(int size, int *s int pm_sel; int ok; - asm ( + __asm__ __volatile__ ( " int $0x31 ; " " jc 0f ; " " movl $1, %2 ; " @@ -189,12 +177,6 @@ int allocate_dos_memory(int size, int *s : "a" (0x100), "b" ((size+15)/16) - : "%eax", - "%ebx", - "%ecx", - "%edx", - "%esi", - "%edi" ); if (!ok) @@ -212,19 +194,13 @@ int allocate_dos_memory(int size, int *s */ void free_dos_memory(int sel) { - asm ( + __asm__ __volatile__ ( " int $0x31 " : : "a" (0x101), "d" (sel) - : "%eax", - "%ebx", - "%ecx", - "%edx", - "%esi", - "%edi" ); } @@ -239,7 +215,7 @@ int allocate_selector(int addr, int size int sel; int ok; - asm ( + __asm__ __volatile__ ( " int $0x31 ; " " jc 0f ; " @@ -268,17 +244,11 @@ int allocate_selector(int addr, int size : "a" (0), "c" (1), - "m" (addr>>16), - "m" (addr&0xFFFF), - "m" ((size-1)>>16), - "m" ((size-1)&0xFFFF) - - : "%eax", - "%ebx", - "%ecx", - "%edx", - "%esi", - "%edi" + "g" (addr>>16), + "g" (addr&0xFFFF), + "g" ((size-1)>>16), + "g" ((size-1)&0xFFFF) + ); if (!ok) @@ -295,19 +265,13 @@ int allocate_selector(int addr, int size */ void free_selector(int sel) { - asm ( + __asm__ __volatile__ ( " int $0x31 " : : "a" (1), "b" (sel) - : "%eax", - "%ebx", - "%ecx", - "%edx", - "%esi", - "%edi" ); } @@ -326,18 +290,18 @@ void free_selector(int sel) typedef struct VESA_INFO /* VESA information block structure */ { - unsigned char VESASignature[4] __attribute__ ((packed)); + unsigned char VESASignature[4]; unsigned short VESAVersion __attribute__ ((packed)); unsigned long OEMStringPtr __attribute__ ((packed)); - unsigned char Capabilities[4] __attribute__ ((packed)); + unsigned char Capabilities[4]; unsigned long VideoModePtr __attribute__ ((packed)); unsigned short TotalMemory __attribute__ ((packed)); unsigned short OemSoftwareRev __attribute__ ((packed)); unsigned long OemVendorNamePtr __attribute__ ((packed)); unsigned long OemProductNamePtr __attribute__ ((packed)); unsigned long OemProductRevPtr __attribute__ ((packed)); - unsigned char Reserved[222] __attribute__ ((packed)); - unsigned char OemData[256] __attribute__ ((packed)); + unsigned char Reserved[222]; + unsigned char OemData[256]; } VESA_INFO; @@ -345,8 +309,8 @@ typedef struct VESA_INFO /* VESA typedef struct VESA_MODE_INFO /* VESA information for a specific mode */ { unsigned short ModeAttributes __attribute__ ((packed)); - unsigned char WinAAttributes __attribute__ ((packed)); - unsigned char WinBAttributes __attribute__ ((packed)); + unsigned char WinAAttributes; + unsigned char WinBAttributes; unsigned short WinGranularity __attribute__ ((packed)); unsigned short WinSize __attribute__ ((packed)); unsigned short WinASegment __attribute__ ((packed)); @@ -355,24 +319,24 @@ typedef struct VESA_MODE_INFO /* V unsigned short BytesPerScanLine __attribute__ ((packed)); unsigned short XResolution __attribute__ ((packed)); unsigned short YResolution __attribute__ ((packed)); - unsigned char XCharSize __attribute__ ((packed)); - unsigned char YCharSize __attribute__ ((packed)); - unsigned char NumberOfPlanes __attribute__ ((packed)); - unsigned char BitsPerPixel __attribute__ ((packed)); - unsigned char NumberOfBanks __attribute__ ((packed)); - unsigned char MemoryModel __attribute__ ((packed)); - unsigned char BankSize __attribute__ ((packed)); - unsigned char NumberOfImagePages __attribute__ ((packed)); - unsigned char Reserved_page __attribute__ ((packed)); - unsigned char RedMaskSize __attribute__ ((packed)); - unsigned char RedMaskPos __attribute__ ((packed)); - unsigned char GreenMaskSize __attribute__ ((packed)); - unsigned char GreenMaskPos __attribute__ ((packed)); - unsigned char BlueMaskSize __attribute__ ((packed)); - unsigned char BlueMaskPos __attribute__ ((packed)); - unsigned char ReservedMaskSize __attribute__ ((packed)); - unsigned char ReservedMaskPos __attribute__ ((packed)); - unsigned char DirectColorModeInfo __attribute__ ((packed)); + unsigned char XCharSize; + unsigned char YCharSize; + unsigned char NumberOfPlanes; + unsigned char BitsPerPixel; + unsigned char NumberOfBanks; + unsigned char MemoryModel; + unsigned char BankSize; + unsigned char NumberOfImagePages; + unsigned char Reserved_page; + unsigned char RedMaskSize; + unsigned char RedMaskPos; + unsigned char GreenMaskSize; + unsigned char GreenMaskPos; + unsigned char BlueMaskSize; + unsigned char BlueMaskPos; + unsigned char ReservedMaskSize; + unsigned char ReservedMaskPos; + unsigned char DirectColorModeInfo; /* VBE 2.0 extensions */ unsigned long PhysBasePtr __attribute__ ((packed)); @@ -381,19 +345,19 @@ typedef struct VESA_MODE_INFO /* V /* VBE 3.0 extensions */ unsigned short LinBytesPerScanLine __attribute__ ((packed)); - unsigned char BnkNumberOfPages __attribute__ ((packed)); - unsigned char LinNumberOfPages __attribute__ ((packed)); - unsigned char LinRedMaskSize __attribute__ ((packed)); - unsigned char LinRedFieldPos __attribute__ ((packed)); - unsigned char LinGreenMaskSize __attribute__ ((packed)); - unsigned char LinGreenFieldPos __attribute__ ((packed)); - unsigned char LinBlueMaskSize __attribute__ ((packed)); - unsigned char LinBlueFieldPos __attribute__ ((packed)); - unsigned char LinRsvdMaskSize __attribute__ ((packed)); - unsigned char LinRsvdFieldPos __attribute__ ((packed)); + unsigned char BnkNumberOfPages; + unsigned char LinNumberOfPages; + unsigned char LinRedMaskSize; + unsigned char LinRedFieldPos; + unsigned char LinGreenMaskSize; + unsigned char LinGreenFieldPos; + unsigned char LinBlueMaskSize; + unsigned char LinBlueFieldPos; + unsigned char LinRsvdMaskSize; + unsigned char LinRsvdFieldPos; unsigned long MaxPixelClock __attribute__ ((packed)); - unsigned char Reserved[190] __attribute__ ((packed)); + unsigned char Reserved[190]; } VESA_MODE_INFO; diff -aprNU3 freebe.orig/stub/driver.c freebe/stub/driver.c --- freebe.orig/stub/driver.c 1999-04-08 19:36:50 +0000 +++ freebe/stub/driver.c 2007-09-11 23:51:04 +0000 @@ -908,32 +908,32 @@ void SetPaletteData(AF_DRIVER *af, AF_PA * rm_int(0x10, &r); */ -asm (" +asm ( - .globl _SetBank32, _SetBank32End + ".globl _SetBank32, _SetBank32End\n\t" - .align 4 - _SetBank32: - pushal - subl $56, %esp # RM_REGS structure on the stack - movw $0x4F05, 32(%esp) # r.x.ax = 0x4F05 - movw $0, 20(%esp) # r.x.bx = 0 - movw %dx, 24(%esp) # r.x.dx = bank number - movw $0, 36(%esp) # r.x.flags = 0 - movw $0, 50(%esp) # r.x.sp = 0 - movw $0, 52(%esp) # r.x.ss = 0 - movl $0x300, %eax # %eax = 0x300 - movl $0x10, %ebx # %ebx = 0x10 - movl $0, %ecx # %ecx = 0 - leal 4(%esp), %edi # %edi = RM_REGS structure - int $0x31 # real mode VESA call - addl $56, %esp - popal - ret + " .align 4\n\t" + "_SetBank32:\n\t" + " pushal\n\t" + " subl $56, %esp # RM_REGS structure on the stack\n\t" + " movw $0x4F05, 32(%esp) # r.x.ax = 0x4F05\n\t" + " movw $0, 20(%esp) # r.x.bx = 0\n\t" + " movw %dx, 24(%esp) # r.x.dx = bank number\n\t" + " movw $0, 36(%esp) # r.x.flags = 0\n\t" + " movw $0, 50(%esp) # r.x.sp = 0\n\t" + " movw $0, 52(%esp) # r.x.ss = 0\n\t" + " movl $0x300, %eax # %eax = 0x300\n\t" + " movl $0x10, %ebx # %ebx = 0x10\n\t" + " movl $0, %ecx # %ecx = 0\n\t" + " leal 4(%esp), %edi # %edi = RM_REGS structure\n\t" + " int $0x31 # real mode VESA call\n\t" + " addl $56, %esp\n\t" + " popal\n\t" + " ret\n\t" - _SetBank32End: + "_SetBank32End:\n\t" -"); +); diff -aprNU3 freebe.orig/vbeaf.h freebe/vbeaf.h --- freebe.orig/vbeaf.h 1999-06-22 20:22:22 +0000 +++ freebe/vbeaf.h 2007-09-11 23:51:04 +0000 @@ -146,7 +146,7 @@ typedef struct AF_CRTCInfo unsigned short VerticalTotal __attribute__ ((packed)); /* vertical total (lines) */ unsigned short VerticalSyncStart __attribute__ ((packed)); /* vertical sync start position */ unsigned short VerticalSyncEnd __attribute__ ((packed)); /* vertical sync end position */ - unsigned char Flags __attribute__ ((packed)); /* initialisation flags for mode */ + unsigned char Flags; /* initialisation flags for mode */ unsigned int PixelClock __attribute__ ((packed)); /* pixel clock in units of Hz */ unsigned short RefreshRate __attribute__ ((packed)); /* expected refresh rate in .01Hz */ unsigned short NumBuffers __attribute__ ((packed)); /* number of display buffers */ @@ -177,29 +177,29 @@ typedef struct AF_MODE_INFO unsigned short BytesPerScanLine __attribute__ ((packed)); unsigned short BitsPerPixel __attribute__ ((packed)); unsigned short MaxBuffers __attribute__ ((packed)); - unsigned char RedMaskSize __attribute__ ((packed)); - unsigned char RedFieldPosition __attribute__ ((packed)); - unsigned char GreenMaskSize __attribute__ ((packed)); - unsigned char GreenFieldPosition __attribute__ ((packed)); - unsigned char BlueMaskSize __attribute__ ((packed)); - unsigned char BlueFieldPosition __attribute__ ((packed)); - unsigned char RsvdMaskSize __attribute__ ((packed)); - unsigned char RsvdFieldPosition __attribute__ ((packed)); + unsigned char RedMaskSize; + unsigned char RedFieldPosition; + unsigned char GreenMaskSize; + unsigned char GreenFieldPosition; + unsigned char BlueMaskSize; + unsigned char BlueFieldPosition; + unsigned char RsvdMaskSize; + unsigned char RsvdFieldPosition; unsigned short MaxBytesPerScanLine __attribute__ ((packed)); unsigned short MaxScanLineWidth __attribute__ ((packed)); /* VBE/AF 2.0 extensions */ unsigned short LinBytesPerScanLine __attribute__ ((packed)); - unsigned char BnkMaxBuffers __attribute__ ((packed)); - unsigned char LinMaxBuffers __attribute__ ((packed)); - unsigned char LinRedMaskSize __attribute__ ((packed)); - unsigned char LinRedFieldPosition __attribute__ ((packed)); - unsigned char LinGreenMaskSize __attribute__ ((packed)); - unsigned char LinGreenFieldPosition __attribute__ ((packed)); - unsigned char LinBlueMaskSize __attribute__ ((packed)); - unsigned char LinBlueFieldPosition __attribute__ ((packed)); - unsigned char LinRsvdMaskSize __attribute__ ((packed)); - unsigned char LinRsvdFieldPosition __attribute__ ((packed)); + unsigned char BnkMaxBuffers; + unsigned char LinMaxBuffers; + unsigned char LinRedMaskSize; + unsigned char LinRedFieldPosition; + unsigned char LinGreenMaskSize; + unsigned char LinGreenFieldPosition; + unsigned char LinBlueMaskSize; + unsigned char LinBlueFieldPosition; + unsigned char LinRsvdMaskSize; + unsigned char LinRsvdFieldPosition; unsigned long MaxPixelClock __attribute__ ((packed)); unsigned long VideoCapabilities __attribute__ ((packed)); unsigned short VideoMinXScale __attribute__ ((packed)); @@ -207,7 +207,7 @@ typedef struct AF_MODE_INFO unsigned short VideoMaxXScale __attribute__ ((packed)); unsigned short VideoMaxYScale __attribute__ ((packed)); - unsigned char reserved[76] __attribute__ ((packed)); + unsigned char reserved[76]; } AF_MODE_INFO; @@ -221,11 +221,11 @@ typedef struct AF_MODE_INFO typedef struct AF_DRIVER { /* header */ - char Signature[12] __attribute__ ((packed)); + char Signature[12]; unsigned long Version __attribute__ ((packed)); unsigned long DriverRev __attribute__ ((packed)); - char OemVendorName[80] __attribute__ ((packed)); - char OemCopyright[80] __attribute__ ((packed)); + char OemVendorName[80]; + char OemCopyright[80]; short *AvailableModes __attribute__ ((packed)); unsigned long TotalMemory __attribute__ ((packed)); unsigned long Attributes __attribute__ ((packed));