-Wall fixes. Might have fixed VESA based DPMS code as a result

This commit is contained in:
Keith Packard 2003-10-14 05:08:35 +00:00
parent 4b844cafb2
commit 109b949516
7 changed files with 169 additions and 144 deletions

View File

@ -58,7 +58,6 @@ VbeGetVmib (Vm86InfoPtr vi, int mode, VbeModeInfoBlock *vmib)
{ {
int code; int code;
int mark; int mark;
int vib_base;
int vmib_base; int vmib_base;
VbeModeInfoBlock *vmib_low; VbeModeInfoBlock *vmib_low;
@ -79,6 +78,101 @@ VbeGetVmib (Vm86InfoPtr vi, int mode, VbeModeInfoBlock *vmib)
return code; return code;
} }
static int
VbeReportVib(Vm86InfoPtr vi, VbeInfoBlock *vib)
{
U32 i, p;
unsigned char c;
int error = 0;
ErrorF("VBE version %c.%c (",
((vib->VbeVersion >> 8) & 0xFF) + '0',
(vib->VbeVersion & 0xFF)+'0');
p = vib->OemStringPtr;
for(i = 0; 1; i++) {
c = Vm86Memory(vi, MAKE_POINTER_1(p+i));
if(!c) break;
if (c >= ' ')
ErrorF("%c", c);
if (i > 32000) {
error = 1;
break;
}
}
ErrorF(")\n");
ErrorF("DAC is %s, controller is %sVGA compatible%s\n",
(vib->Capabilities[0]&1)?"fixed":"switchable",
(vib->Capabilities[0]&2)?"not ":"",
(vib->Capabilities[0]&3)?", RAMDAC causes snow":"");
ErrorF("Total memory: %lu kilobytes\n", 64L*vib->TotalMemory);
if(error)
return -1;
return 0;
}
#if 0
static int
VbeReportModeInfo(Vm86InfoPtr vi, U16 mode, VbeModeInfoBlock *vmib)
{
int supported = (vmib->ModeAttributes&0x1)?1:0;
int colour = (vmib->ModeAttributes&0x8)?1:0;
int graphics = (vmib->ModeAttributes&0x10)?1:0;
int vga_compatible = !((vmib->ModeAttributes&0x20)?1:0);
int linear_fb = (vmib->ModeAttributes&0x80)?1:0;
ErrorF("0x%04X: %dx%dx%d%s",
(unsigned)mode,
(int)vmib->XResolution, (int)vmib->YResolution,
(int)vmib->BitsPerPixel,
colour?"":" (monochrome)",
graphics?"":" (graphics)",
vga_compatible?"":" (vga compatible)",
linear_fb?"":" (linear frame buffer)");
switch(vmib->MemoryModel) {
case 0:
ErrorF(" text mode (%dx%d)",
(int)vmib->XCharSize, (int)vmib->YCharSize);
break;
case 1:
ErrorF(" CGA graphics");
break;
case 2:
ErrorF(" Hercules graphics");
break;
case 3:
ErrorF(" Planar (%d planes)", vmib->NumberOfPlanes);
break;
case 4:
ErrorF(" PseudoColor");
break;
case 5:
ErrorF(" Non-chain 4, 256 colour");
break;
case 6:
if(vmib->DirectColorModeInfo & 1)
ErrorF(" DirectColor");
else
ErrorF(" TrueColor");
ErrorF(" [%d:%d:%d:%d]",
vmib->RedMaskSize, vmib->GreenMaskSize, vmib->BlueMaskSize,
vmib->RsvdMaskSize);
if(vmib->DirectColorModeInfo & 2)
ErrorF(" (reserved bits are reserved)");
break;
case 7: ErrorF("YUV");
break;
default:
ErrorF("unknown MemoryModel 0x%X ", vmib->MemoryModel);
}
if(!supported)
ErrorF(" (unsupported)");
else if(!linear_fb)
ErrorF(" (no linear framebuffer)");
ErrorF("\n");
return 0;
}
#endif
void void
VbeReportInfo (Vm86InfoPtr vi) VbeReportInfo (Vm86InfoPtr vi)
{ {
@ -95,7 +189,6 @@ VbeGetNmode (Vm86InfoPtr vi)
{ {
VbeInfoBlock vib; VbeInfoBlock vib;
int code; int code;
int ret = 0;
unsigned int p; unsigned int p;
int n; int n;
int mode; int mode;
@ -121,7 +214,6 @@ VbeGetModes (Vm86InfoPtr vi, VesaModePtr modes, int nmode)
{ {
VbeInfoBlock vib; VbeInfoBlock vib;
int code; int code;
int ret = 0;
unsigned int p; unsigned int p;
int n; int n;
int mode; int mode;
@ -262,7 +354,6 @@ VbeMapFramebuffer(Vm86InfoPtr vi, VbeInfoPtr vbe, int mode, int *ret_size, CARD3
int size; int size;
int pagesize = getpagesize(); int pagesize = getpagesize();
int before, after; int before, after;
int devmem;
if (VbeGetVib (vi, &vib) < 0) if (VbeGetVib (vi, &vib) < 0)
return 0; return 0;
@ -329,7 +420,7 @@ VbeSetPalette(Vm86InfoPtr vi, VbeInfoPtr vbe, int first, int number, U8 *entries
U8 *palette_scratch; U8 *palette_scratch;
int mark; int mark;
int palette_base; int palette_base;
int i, j, code; int i, code;
if(number == 0) if(number == 0)
return 0; return 0;
@ -374,7 +465,7 @@ VbeGetPalette(Vm86InfoPtr vi, VbeInfoPtr vbe, int first, int number, U8 *entries
U8 *palette_scratch; U8 *palette_scratch;
int mark; int mark;
int palette_base; int palette_base;
int i, j, code; int i, code;
if(number == 0) if(number == 0)
return 0; return 0;
@ -513,10 +604,15 @@ static const int VbeDPMSModes[4] = {
}; };
Bool Bool
VbeDPMS(Vm86InfoPtr vi, VbeInfoBlock *vib, int mode) VbeDPMS(Vm86InfoPtr vi, VbeInfoPtr vbe, int mode)
{ {
int code; int code;
VbeInfoBlock vib;
code = VbeGetVib (vi, &vib);
if (code < 0)
return FALSE;
/* /*
* Check which modes are supported * Check which modes are supported
*/ */
@ -547,95 +643,6 @@ VbeDPMS(Vm86InfoPtr vi, VbeInfoBlock *vib, int mode)
return TRUE; return TRUE;
} }
int
VbeReportVib(Vm86InfoPtr vi, VbeInfoBlock *vib)
{
U32 i, p;
unsigned char c;
int error;
ErrorF("VBE version %c.%c (",
((vib->VbeVersion >> 8) & 0xFF) + '0',
(vib->VbeVersion & 0xFF)+'0');
p = vib->OemStringPtr;
for(i = 0; 1; i++) {
c = Vm86Memory(vi, MAKE_POINTER_1(p+i));
if(!c) break;
if (c >= ' ')
ErrorF("%c", c);
if (i > 32000) {
error = 1;
break;
}
}
ErrorF(")\n");
ErrorF("DAC is %s, controller is %sVGA compatible%s\n",
(vib->Capabilities[0]&1)?"fixed":"switchable",
(vib->Capabilities[0]&2)?"not ":"",
(vib->Capabilities[0]&3)?", RAMDAC causes snow":"");
ErrorF("Total memory: %lu kilobytes\n", 64L*vib->TotalMemory);
if(error)
return -1;
return 0;
}
int
VbeReportModeInfo(Vm86InfoPtr vi, U16 mode, VbeModeInfoBlock *vmib)
{
int supported = (vmib->ModeAttributes&0x1)?1:0;
int colour = (vmib->ModeAttributes&0x8)?1:0;
int graphics = (vmib->ModeAttributes&0x10)?1:0;
int vga_compatible = !((vmib->ModeAttributes&0x20)?1:0);
int linear_fb = (vmib->ModeAttributes&0x80)?1:0;
ErrorF("0x%04X: %dx%dx%d%s",
(unsigned)mode,
(int)vmib->XResolution, (int)vmib->YResolution,
(int)vmib->BitsPerPixel,
colour?"":" (monochrome)");
switch(vmib->MemoryModel) {
case 0:
ErrorF(" text mode (%dx%d)",
(int)vmib->XCharSize, (int)vmib->YCharSize);
break;
case 1:
ErrorF(" CGA graphics");
break;
case 2:
ErrorF(" Hercules graphics");
break;
case 3:
ErrorF(" Planar (%d planes)", vmib->NumberOfPlanes);
break;
case 4:
ErrorF(" PseudoColor");
break;
case 5:
ErrorF(" Non-chain 4, 256 colour");
break;
case 6:
if(vmib->DirectColorModeInfo & 1)
ErrorF(" DirectColor");
else
ErrorF(" TrueColor");
ErrorF(" [%d:%d:%d:%d]",
vmib->RedMaskSize, vmib->GreenMaskSize, vmib->BlueMaskSize,
vmib->RsvdMaskSize);
if(vmib->DirectColorModeInfo & 2)
ErrorF(" (reserved bits are reserved)");
break;
case 7: ErrorF("YUV");
break;
default:
ErrorF("unknown MemoryModel 0x%X ", vmib->MemoryModel);
}
if(!supported)
ErrorF(" (unsupported)");
else if(!linear_fb)
ErrorF(" (no linear framebuffer)");
ErrorF("\n");
return 0;
}
int int
VbeDoInterrupt10(Vm86InfoPtr vi) VbeDoInterrupt10(Vm86InfoPtr vi)
{ {

View File

@ -121,12 +121,12 @@ VbeGetNmode (Vm86InfoPtr vi);
int int
VbeGetModes (Vm86InfoPtr vi, VesaModePtr modes, int nmode); VbeGetModes (Vm86InfoPtr vi, VesaModePtr modes, int nmode);
int
VbeGetModeInfo(Vm86InfoPtr vi, int m, VesaModePtr mode);
VbeInfoPtr VbeInfoPtr
VbeInit (Vm86InfoPtr vi); VbeInit (Vm86InfoPtr vi);
void
VbeCleanup (Vm86InfoPtr vi, VbeInfoPtr vbe);
int int
VbeSetMode (Vm86InfoPtr vi, VbeInfoPtr vbe, int mode, int linear, int direct); VbeSetMode (Vm86InfoPtr vi, VbeInfoPtr vbe, int mode, int linear, int direct);
@ -134,30 +134,27 @@ int
VbeGetMode(Vm86InfoPtr vi, int *mode); VbeGetMode(Vm86InfoPtr vi, int *mode);
void * void *
VbeMapFramebuffer(Vm86InfoPtr vi, VbeInfoPtr vbe, int mode, int *size, CARD32 *phys); VbeMapFramebuffer(Vm86InfoPtr vi, VbeInfoPtr vbe, int mode, int *ret_size, CARD32 *ret_phys);
void void
VbeUnmapFramebuffer(Vm86InfoPtr vi, VbeInfoPtr vbe, int mode, void *fb); VbeUnmapFramebuffer(Vm86InfoPtr vi, VbeInfoPtr vbe, int mode, void *fb);
int int
VbeSetPalette(Vm86InfoPtr vi, VbeInfoPtr vbe, int first, int number, U8 *entries); VbeSetPalette(Vm86InfoPtr vi, VbeInfoPtr vbe, int first, int number, U8 *entries);
int int
VbeGetPalette(Vm86InfoPtr vi, VbeInfoPtr vbe, int first, int number, U8 *entries); VbeGetPalette(Vm86InfoPtr vi, VbeInfoPtr vbe, int first, int number, U8 *entries);
int int
VbeSetPaletteOptions(Vm86InfoPtr vi, VbeInfoPtr vbe, U8 bits, int wait); VbeSetPaletteOptions(Vm86InfoPtr vi, VbeInfoPtr vbe, U8 bits, int wait);
void * void *
VbeSetWindow(Vm86InfoPtr vi, VbeInfoPtr vbe, int offset, int purpose, int *size_return); VbeSetWindow(Vm86InfoPtr vi, VbeInfoPtr vbe, int offset, int purpose, int *size_return);
int Bool
VbeReportVib(Vm86InfoPtr vi, VbeInfoBlock *vib); VbeDPMS(Vm86InfoPtr vi, VbeInfoPtr vbe, int mode);
int
VbeReportModeInfo(Vm86InfoPtr vi, U16 mode, VbeModeInfoBlock *vmib);
int int
VbeDoInterrupt10(Vm86InfoPtr vi); VbeDoInterrupt10(Vm86InfoPtr vi);
#endif #endif

View File

@ -25,6 +25,8 @@ THE SOFTWARE.
#include <config.h> #include <config.h>
#endif #endif
#include "vesa.h" #include "vesa.h"
#include "vga.h"
#include "vbe.h"
#ifdef RANDR #ifdef RANDR
#include <randrstr.h> #include <randrstr.h>
#endif #endif
@ -93,11 +95,14 @@ vesaReportMode (VesaModePtr mode)
int vga_compatible = !((mode->ModeAttributes&MODE_VGA)?1:0); int vga_compatible = !((mode->ModeAttributes&MODE_VGA)?1:0);
int linear_fb = (mode->ModeAttributes&MODE_LINEAR)?1:0; int linear_fb = (mode->ModeAttributes&MODE_LINEAR)?1:0;
ErrorF("0x%04X: %dx%dx%d%s", ErrorF("0x%04X: %dx%dx%d%s%s",
(unsigned)mode->mode, (unsigned)mode->mode,
(int)mode->XResolution, (int)mode->YResolution, (int)mode->XResolution, (int)mode->YResolution,
vesaDepth (mode), vesaDepth (mode),
colour?"":" (monochrome)"); colour?"":" (monochrome)",
graphics?"":" (graphics)",
vga_compatible?"":" (vga compatible)",
linear_fb?"":" (linear frame buffer)");
switch(mode->MemoryModel) { switch(mode->MemoryModel) {
case MEMORY_TEXT: case MEMORY_TEXT:
ErrorF(" text mode"); ErrorF(" text mode");
@ -201,8 +206,6 @@ vesaGetModes (Vm86InfoPtr vi, int *ret_nmode)
Bool Bool
vesaInitialize (KdCardInfo *card, VesaCardPrivPtr priv) vesaInitialize (KdCardInfo *card, VesaCardPrivPtr priv)
{ {
int code;
priv->vi = Vm86Setup(vesa_map_holes); priv->vi = Vm86Setup(vesa_map_holes);
if(!priv->vi) if(!priv->vi)
goto fail; goto fail;
@ -349,6 +352,7 @@ vesaModeGood (KdScreenInfo *screen,
{ {
return TRUE; return TRUE;
} }
return FALSE;
} }
#define vabs(a) ((a) >= 0 ? (a) : -(a)) #define vabs(a) ((a) >= 0 ? (a) : -(a))
@ -424,9 +428,7 @@ vesaSelectMode (KdScreenInfo *screen)
Bool Bool
vesaScreenInitialize (KdScreenInfo *screen, VesaScreenPrivPtr pscr) vesaScreenInitialize (KdScreenInfo *screen, VesaScreenPrivPtr pscr)
{ {
VesaCardPrivPtr priv = screen->card->driver;
VesaModePtr mode; VesaModePtr mode;
Pixel allbits;
screen->driver = pscr; screen->driver = pscr;
@ -568,7 +570,6 @@ vesaSetWindowLinear (ScreenPtr pScreen,
CARD32 *size) CARD32 *size)
{ {
KdScreenPriv(pScreen); KdScreenPriv(pScreen);
VesaCardPrivPtr priv = pScreenPriv->card->driver;
VesaScreenPrivPtr pscr = pScreenPriv->screen->driver; VesaScreenPrivPtr pscr = pScreenPriv->screen->driver;
*size = pscr->mode.BytesPerScanLine; *size = pscr->mode.BytesPerScanLine;
@ -668,7 +669,6 @@ vesaWindowCga (ScreenPtr pScreen,
void *closure) void *closure)
{ {
KdScreenPriv(pScreen); KdScreenPriv(pScreen);
VesaCardPrivPtr priv = pScreenPriv->card->driver;
VesaScreenPrivPtr pscr = pScreenPriv->screen->driver; VesaScreenPrivPtr pscr = pScreenPriv->screen->driver;
int line; int line;
@ -685,21 +685,18 @@ vesaUpdateMono (ScreenPtr pScreen,
{ {
RegionPtr damage = &pBuf->damage; RegionPtr damage = &pBuf->damage;
PixmapPtr pShadow = pBuf->pPixmap; PixmapPtr pShadow = pBuf->pPixmap;
shadowScrPriv(pScreen);
int nbox = REGION_NUM_RECTS (damage); int nbox = REGION_NUM_RECTS (damage);
BoxPtr pbox = REGION_RECTS (damage); BoxPtr pbox = REGION_RECTS (damage);
FbBits *shaBase, *shaLine, *sha; FbBits *shaBase, *shaLine, *sha;
FbBits s;
FbStride shaStride; FbStride shaStride;
int scrBase, scrLine, scr; int scrBase, scrLine, scr;
int shaBpp; int shaBpp;
int shaXoff, shaYoff; /* XXX assumed to be zero */ int shaXoff, shaYoff; /* XXX assumed to be zero */
int x, y, w, h, width; int x, y, w, h, width;
int i; int i;
FbBits *winBase, *winLine, *win; FbBits *winBase = 0, *win;
CARD32 winSize; CARD32 winSize;
FbBits bits; FbBits bits;
int plane;
fbGetDrawable (&pShadow->drawable, shaBase, shaStride, shaBpp, shaXoff, shaYoff); fbGetDrawable (&pShadow->drawable, shaBase, shaStride, shaBpp, shaXoff, shaYoff);
while (nbox--) while (nbox--)
@ -798,7 +795,6 @@ vesaConfigureScreen (ScreenPtr pScreen)
{ {
KdScreenPriv(pScreen); KdScreenPriv(pScreen);
KdScreenInfo *screen = pScreenPriv->screen; KdScreenInfo *screen = pScreenPriv->screen;
VesaCardPrivPtr priv = pScreenPriv->card->driver;
VesaScreenPrivPtr pscr = pScreenPriv->screen->driver; VesaScreenPrivPtr pscr = pScreenPriv->screen->driver;
KdMouseMatrix m; KdMouseMatrix m;
@ -840,11 +836,9 @@ vesaLayerCreate (ScreenPtr pScreen)
{ {
KdScreenPriv(pScreen); KdScreenPriv(pScreen);
KdScreenInfo *screen = pScreenPriv->screen; KdScreenInfo *screen = pScreenPriv->screen;
VesaCardPrivPtr priv = pScreenPriv->card->driver;
VesaScreenPrivPtr pscr = pScreenPriv->screen->driver; VesaScreenPrivPtr pscr = pScreenPriv->screen->driver;
LayerPtr pLayer;
ShadowUpdateProc update; ShadowUpdateProc update;
ShadowWindowProc window; ShadowWindowProc window = 0;
PixmapPtr pPixmap; PixmapPtr pPixmap;
int kind; int kind;
@ -1144,7 +1138,7 @@ vesaRandRSetConfig (ScreenPtr pScreen,
RRScreenSizePtr pSize) RRScreenSizePtr pSize)
{ {
KdScreenPriv(pScreen); KdScreenPriv(pScreen);
VesaModePtr mode; VesaModePtr mode = 0;
KdScreenInfo *screen = pScreenPriv->screen; KdScreenInfo *screen = pScreenPriv->screen;
VesaCardPrivPtr priv = pScreenPriv->card->driver; VesaCardPrivPtr priv = pScreenPriv->card->driver;
VesaScreenPrivPtr pscr = pScreenPriv->screen->driver; VesaScreenPrivPtr pscr = pScreenPriv->screen->driver;
@ -1346,9 +1340,6 @@ vesaRandRInit (ScreenPtr pScreen)
Bool Bool
vesaInitScreen(ScreenPtr pScreen) vesaInitScreen(ScreenPtr pScreen)
{ {
KdScreenPriv(pScreen);
VesaScreenPrivPtr pscr = pScreenPriv->screen->driver;
if (!LayerStartInit (pScreen)) if (!LayerStartInit (pScreen))
return FALSE; return FALSE;
@ -1417,7 +1408,6 @@ vesaEnable(ScreenPtr pScreen)
VesaCardPrivPtr priv = pScreenPriv->card->driver; VesaCardPrivPtr priv = pScreenPriv->card->driver;
VesaScreenPrivPtr pscr = pScreenPriv->screen->driver; VesaScreenPrivPtr pscr = pScreenPriv->screen->driver;
KdScreenInfo *screen = pScreenPriv->screen; KdScreenInfo *screen = pScreenPriv->screen;
int code;
int i; int i;
CARD32 size; CARD32 size;
char *p; char *p;
@ -1615,7 +1605,6 @@ void
vesaPreserve(KdCardInfo *card) vesaPreserve(KdCardInfo *card)
{ {
VesaCardPrivPtr priv = card->driver; VesaCardPrivPtr priv = card->driver;
int code;
/* The framebuffer might not be valid at this point, so we cannot /* The framebuffer might not be valid at this point, so we cannot
save the VGA fonts now; we do it in vesaEnable. */ save the VGA fonts now; we do it in vesaEnable. */
@ -1678,7 +1667,6 @@ void
vesaScreenFini(KdScreenInfo *screen) vesaScreenFini(KdScreenInfo *screen)
{ {
VesaScreenPrivPtr pscr = screen->driver; VesaScreenPrivPtr pscr = screen->driver;
VesaCardPrivPtr priv = screen->card->driver;
vesaUnmapFramebuffer (screen); vesaUnmapFramebuffer (screen);
screen->fb[0].depth = pscr->origDepth; screen->fb[0].depth = pscr->origDepth;
@ -1779,7 +1767,7 @@ vesaGetColors (ScreenPtr pScreen, int fb, int n, xColorItem *pdefs)
KdScreenPriv(pScreen); KdScreenPriv(pScreen);
VesaScreenPrivPtr pscr = pScreenPriv->screen->driver; VesaScreenPrivPtr pscr = pScreenPriv->screen->driver;
VesaCardPrivPtr priv = pScreenPriv->card->driver; VesaCardPrivPtr priv = pScreenPriv->card->driver;
int first, i, j, k; int i;
int red, green, blue; int red, green, blue;
int min, max; int min, max;
int p; int p;

View File

@ -117,6 +117,25 @@ vesaInitialize(KdCardInfo *card, VesaCardPrivPtr priv);
Bool Bool
vesaCardInit(KdCardInfo *card); vesaCardInit(KdCardInfo *card);
int
vesaDepth (VesaModePtr mode);
Bool
vesaModeGood (KdScreenInfo *screen,
VesaModePtr a);
int
vesaSizeError (KdScreenInfo *screen,
VesaModePtr a);
Bool
vesaModeBetter (KdScreenInfo *screen,
VesaModePtr a,
VesaModePtr b);
VesaModePtr
vesaSelectMode (KdScreenInfo *screen);
Bool Bool
vesaInitialize (KdCardInfo *card, VesaCardPrivPtr priv); vesaInitialize (KdCardInfo *card, VesaCardPrivPtr priv);
@ -129,12 +148,19 @@ vesaScreenInit(KdScreenInfo *screen);
LayerPtr LayerPtr
vesaLayerCreate (ScreenPtr pScreen); vesaLayerCreate (ScreenPtr pScreen);
Bool
vesaMapFramebuffer (KdScreenInfo *screen);
Bool Bool
vesaInitScreen(ScreenPtr pScreen); vesaInitScreen(ScreenPtr pScreen);
Bool Bool
vesaFinishInitScreen(ScreenPtr pScreen); vesaFinishInitScreen(ScreenPtr pScreen);
Bool
vesaSetMode (ScreenPtr pScreen,
VesaModePtr mode);
Bool Bool
vesaEnable(ScreenPtr pScreen); vesaEnable(ScreenPtr pScreen);
@ -165,4 +191,12 @@ vesaGetColors (ScreenPtr pScreen, int fb, int n, xColorItem *pdefs);
int int
vesaProcessArgument (int argc, char **argv, int i); vesaProcessArgument (int argc, char **argv, int i);
#ifdef RANDR
Bool
vesaRandRSetConfig (ScreenPtr pScreen,
Rotation randr,
int rate,
RRScreenSizePtr pSize);
#endif
#endif /* _VESA_H_ */ #endif /* _VESA_H_ */

View File

@ -115,14 +115,14 @@ VgaGetMode (Vm86InfoPtr vi, int *mode)
return 0; return 0;
} }
int void
VgaSetWritePlaneMask(Vm86InfoPtr vi, int mask) VgaSetWritePlaneMask(Vm86InfoPtr vi, int mask)
{ {
asm volatile ("outb %b0,%w1" : : "a" (2), "d" (0x3c4)); asm volatile ("outb %b0,%w1" : : "a" (2), "d" (0x3c4));
asm volatile ("outb %b0,%w1" : : "a" (mask), "d" (0x3c5)); asm volatile ("outb %b0,%w1" : : "a" (mask), "d" (0x3c5));
} }
int void
VgaSetReadPlaneMap(Vm86InfoPtr vi, int map) VgaSetReadPlaneMap(Vm86InfoPtr vi, int map)
{ {
asm volatile ("outb %b0,%w1" : : "a" (4), "d" (0x3ce)); asm volatile ("outb %b0,%w1" : : "a" (4), "d" (0x3ce));

View File

@ -37,10 +37,10 @@ VgaSetMode(Vm86InfoPtr vi, int mode);
int int
VgaGetMode (Vm86InfoPtr vi, int *mode); VgaGetMode (Vm86InfoPtr vi, int *mode);
int void
VgaSetWritePlaneMask(Vm86InfoPtr vi, int mask); VgaSetWritePlaneMask(Vm86InfoPtr vi, int mask);
int void
VgaSetReadPlaneMap(Vm86InfoPtr vi, int map); VgaSetReadPlaneMap(Vm86InfoPtr vi, int map);
int int

View File

@ -328,8 +328,8 @@ vm86_outl(U16 port, U32 value)
#define SEG_FS 6 #define SEG_FS 6
#define REP 1 #define REP 1
#define REPNZ 2 #define REPNZ 2
#define SET_8(_x, _y) (_x) = (_x & ~0xFF) | (_y & 0xFF); #define SET_8(_x, _y) (_x) = ((_x) & ~0xFF) | ((_y) & 0xFF);
#define SET_16(_x, _y) (_x) = (_x & ~0xFFFF) | (_y & 0xFFFF); #define SET_16(_x, _y) (_x) = ((_x) & ~0xFFFF) | ((_y) & 0xFFFF);
#define INC_IP(_i) SET_16(regs->eip, (regs->eip + _i)) #define INC_IP(_i) SET_16(regs->eip, (regs->eip + _i))
#define AGAIN INC_IP(1); goto again; #define AGAIN INC_IP(1); goto again;
@ -340,8 +340,6 @@ vm86_emulate(Vm86InfoPtr vi)
U8 opcode; U8 opcode;
int size; int size;
int pref_seg = 0, pref_rep = 0, pref_66 = 0, pref_67 = 0; int pref_seg = 0, pref_rep = 0, pref_66 = 0, pref_67 = 0;
U32 count;
int code;
again: again:
if(!Vm86IsMemory(vi, MAKE_POINTER(regs->cs, regs->eip))) { if(!Vm86IsMemory(vi, MAKE_POINTER(regs->cs, regs->eip))) {
@ -412,7 +410,7 @@ vm86_emulate(Vm86InfoPtr vi)
goto again; goto again;
} else { } else {
SET_16(regs->ecx, regs->ecx - 1); SET_16(regs->ecx, regs->ecx - 1);
if(regs->ecx & 0xFFFF != 0) if((regs->ecx & 0xFFFF) != 0)
goto again; goto again;
} }
} }
@ -470,7 +468,7 @@ vm86_emulate(Vm86InfoPtr vi)
goto again; goto again;
} else { } else {
SET_16(regs->ecx, regs->ecx - 1); SET_16(regs->ecx, regs->ecx - 1);
if(regs->ecx & 0xFFFF != 0) if((regs->ecx & 0xFFFF) != 0)
goto again; goto again;
} }
} }
@ -571,6 +569,7 @@ Vm86Memory(Vm86InfoPtr vi, U32 i)
return HM(vi, i); return HM(vi, i);
else { else {
ErrorF("Reading unmapped memory at 0x%08X\n", i); ErrorF("Reading unmapped memory at 0x%08X\n", i);
return 0;
} }
} }