Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
xserver
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Incidents
Environments
Packages & Registries
Packages & Registries
Container Registry
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Marco Trevisan
xserver
Commits
109b9495
Commit
109b9495
authored
Oct 14, 2003
by
Keith Packard
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
-Wall fixes. Might have fixed VESA based DPMS code as a result
parent
4b844caf
Changes
7
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
169 additions
and
144 deletions
+169
-144
hw/kdrive/vesa/vbe.c
hw/kdrive/vesa/vbe.c
+104
-97
hw/kdrive/vesa/vbe.h
hw/kdrive/vesa/vbe.h
+10
-13
hw/kdrive/vesa/vesa.c
hw/kdrive/vesa/vesa.c
+12
-24
hw/kdrive/vesa/vesa.h
hw/kdrive/vesa/vesa.h
+34
-0
hw/kdrive/vesa/vga.c
hw/kdrive/vesa/vga.c
+2
-2
hw/kdrive/vesa/vga.h
hw/kdrive/vesa/vga.h
+2
-2
hw/kdrive/vesa/vm86.c
hw/kdrive/vesa/vm86.c
+5
-6
No files found.
hw/kdrive/vesa/vbe.c
View file @
109b9495
...
...
@@ -58,7 +58,6 @@ VbeGetVmib (Vm86InfoPtr vi, int mode, VbeModeInfoBlock *vmib)
{
int
code
;
int
mark
;
int
vib_base
;
int
vmib_base
;
VbeModeInfoBlock
*
vmib_low
;
...
...
@@ -79,6 +78,101 @@ VbeGetVmib (Vm86InfoPtr vi, int mode, VbeModeInfoBlock *vmib)
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
VbeReportInfo
(
Vm86InfoPtr
vi
)
{
...
...
@@ -95,7 +189,6 @@ VbeGetNmode (Vm86InfoPtr vi)
{
VbeInfoBlock
vib
;
int
code
;
int
ret
=
0
;
unsigned
int
p
;
int
n
;
int
mode
;
...
...
@@ -121,7 +214,6 @@ VbeGetModes (Vm86InfoPtr vi, VesaModePtr modes, int nmode)
{
VbeInfoBlock
vib
;
int
code
;
int
ret
=
0
;
unsigned
int
p
;
int
n
;
int
mode
;
...
...
@@ -262,7 +354,6 @@ VbeMapFramebuffer(Vm86InfoPtr vi, VbeInfoPtr vbe, int mode, int *ret_size, CARD3
int
size
;
int
pagesize
=
getpagesize
();
int
before
,
after
;
int
devmem
;
if
(
VbeGetVib
(
vi
,
&
vib
)
<
0
)
return
0
;
...
...
@@ -329,7 +420,7 @@ VbeSetPalette(Vm86InfoPtr vi, VbeInfoPtr vbe, int first, int number, U8 *entries
U8
*
palette_scratch
;
int
mark
;
int
palette_base
;
int
i
,
j
,
code
;
int
i
,
code
;
if
(
number
==
0
)
return
0
;
...
...
@@ -374,7 +465,7 @@ VbeGetPalette(Vm86InfoPtr vi, VbeInfoPtr vbe, int first, int number, U8 *entries
U8
*
palette_scratch
;
int
mark
;
int
palette_base
;
int
i
,
j
,
code
;
int
i
,
code
;
if
(
number
==
0
)
return
0
;
...
...
@@ -513,10 +604,15 @@ static const int VbeDPMSModes[4] = {
};
Bool
VbeDPMS
(
Vm86InfoPtr
vi
,
VbeInfo
Block
*
vib
,
int
mode
)
VbeDPMS
(
Vm86InfoPtr
vi
,
VbeInfo
Ptr
vbe
,
int
mode
)
{
int
code
;
int
code
;
VbeInfoBlock
vib
;
code
=
VbeGetVib
(
vi
,
&
vib
);
if
(
code
<
0
)
return
FALSE
;
/*
* Check which modes are supported
*/
...
...
@@ -547,95 +643,6 @@ VbeDPMS(Vm86InfoPtr vi, VbeInfoBlock *vib, int mode)
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
VbeDoInterrupt10
(
Vm86InfoPtr
vi
)
{
...
...
hw/kdrive/vesa/vbe.h
View file @
109b9495
...
...
@@ -121,12 +121,12 @@ VbeGetNmode (Vm86InfoPtr vi);
int
VbeGetModes
(
Vm86InfoPtr
vi
,
VesaModePtr
modes
,
int
nmode
);
int
VbeGetModeInfo
(
Vm86InfoPtr
vi
,
int
m
,
VesaModePtr
mode
);
VbeInfoPtr
VbeInit
(
Vm86InfoPtr
vi
);
void
VbeCleanup
(
Vm86InfoPtr
vi
,
VbeInfoPtr
vbe
);
int
VbeSetMode
(
Vm86InfoPtr
vi
,
VbeInfoPtr
vbe
,
int
mode
,
int
linear
,
int
direct
);
...
...
@@ -134,30 +134,27 @@ int
VbeGetMode
(
Vm86InfoPtr
vi
,
int
*
mode
);
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
VbeUnmapFramebuffer
(
Vm86InfoPtr
vi
,
VbeInfoPtr
vbe
,
int
mode
,
void
*
fb
);
int
VbeSetPalette
(
Vm86InfoPtr
vi
,
VbeInfoPtr
vbe
,
int
first
,
int
number
,
U8
*
entries
);
int
VbeGetPalette
(
Vm86InfoPtr
vi
,
VbeInfoPtr
vbe
,
int
first
,
int
number
,
U8
*
entries
);
int
VbeSetPaletteOptions
(
Vm86InfoPtr
vi
,
VbeInfoPtr
vbe
,
U8
bits
,
int
wait
);
void
*
VbeSetWindow
(
Vm86InfoPtr
vi
,
VbeInfoPtr
vbe
,
int
offset
,
int
purpose
,
int
*
size_return
);
int
VbeReportVib
(
Vm86InfoPtr
vi
,
VbeInfoBlock
*
vib
);
int
VbeReportModeInfo
(
Vm86InfoPtr
vi
,
U16
mode
,
VbeModeInfoBlock
*
vmib
);
Bool
VbeDPMS
(
Vm86InfoPtr
vi
,
VbeInfoPtr
vbe
,
int
mode
);
int
VbeDoInterrupt10
(
Vm86InfoPtr
vi
);
#endif
hw/kdrive/vesa/vesa.c
View file @
109b9495
...
...
@@ -25,6 +25,8 @@ THE SOFTWARE.
#include <config.h>
#endif
#include "vesa.h"
#include "vga.h"
#include "vbe.h"
#ifdef RANDR
#include <randrstr.h>
#endif
...
...
@@ -93,11 +95,14 @@ vesaReportMode (VesaModePtr mode)
int
vga_compatible
=
!
((
mode
->
ModeAttributes
&
MODE_VGA
)
?
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
,
(
int
)
mode
->
XResolution
,
(
int
)
mode
->
YResolution
,
vesaDepth
(
mode
),
colour
?
""
:
" (monochrome)"
);
colour
?
""
:
" (monochrome)"
,
graphics
?
""
:
" (graphics)"
,
vga_compatible
?
""
:
" (vga compatible)"
,
linear_fb
?
""
:
" (linear frame buffer)"
);
switch
(
mode
->
MemoryModel
)
{
case
MEMORY_TEXT
:
ErrorF
(
" text mode"
);
...
...
@@ -201,8 +206,6 @@ vesaGetModes (Vm86InfoPtr vi, int *ret_nmode)
Bool
vesaInitialize
(
KdCardInfo
*
card
,
VesaCardPrivPtr
priv
)
{
int
code
;
priv
->
vi
=
Vm86Setup
(
vesa_map_holes
);
if
(
!
priv
->
vi
)
goto
fail
;
...
...
@@ -349,6 +352,7 @@ vesaModeGood (KdScreenInfo *screen,
{
return
TRUE
;
}
return
FALSE
;
}
#define vabs(a) ((a) >= 0 ? (a) : -(a))
...
...
@@ -424,9 +428,7 @@ vesaSelectMode (KdScreenInfo *screen)
Bool
vesaScreenInitialize
(
KdScreenInfo
*
screen
,
VesaScreenPrivPtr
pscr
)
{
VesaCardPrivPtr
priv
=
screen
->
card
->
driver
;
VesaModePtr
mode
;
Pixel
allbits
;
screen
->
driver
=
pscr
;
...
...
@@ -568,7 +570,6 @@ vesaSetWindowLinear (ScreenPtr pScreen,
CARD32
*
size
)
{
KdScreenPriv
(
pScreen
);
VesaCardPrivPtr
priv
=
pScreenPriv
->
card
->
driver
;
VesaScreenPrivPtr
pscr
=
pScreenPriv
->
screen
->
driver
;
*
size
=
pscr
->
mode
.
BytesPerScanLine
;
...
...
@@ -668,7 +669,6 @@ vesaWindowCga (ScreenPtr pScreen,
void
*
closure
)
{
KdScreenPriv
(
pScreen
);
VesaCardPrivPtr
priv
=
pScreenPriv
->
card
->
driver
;
VesaScreenPrivPtr
pscr
=
pScreenPriv
->
screen
->
driver
;
int
line
;
...
...
@@ -685,21 +685,18 @@ vesaUpdateMono (ScreenPtr pScreen,
{
RegionPtr
damage
=
&
pBuf
->
damage
;
PixmapPtr
pShadow
=
pBuf
->
pPixmap
;
shadowScrPriv
(
pScreen
);
int
nbox
=
REGION_NUM_RECTS
(
damage
);
BoxPtr
pbox
=
REGION_RECTS
(
damage
);
FbBits
*
shaBase
,
*
shaLine
,
*
sha
;
FbBits
s
;
FbStride
shaStride
;
int
scrBase
,
scrLine
,
scr
;
int
shaBpp
;
int
shaXoff
,
shaYoff
;
/* XXX assumed to be zero */
int
x
,
y
,
w
,
h
,
width
;
int
i
;
FbBits
*
winBase
,
*
winLine
,
*
win
;
FbBits
*
winBase
=
0
,
*
win
;
CARD32
winSize
;
FbBits
bits
;
int
plane
;
fbGetDrawable
(
&
pShadow
->
drawable
,
shaBase
,
shaStride
,
shaBpp
,
shaXoff
,
shaYoff
);
while
(
nbox
--
)
...
...
@@ -798,7 +795,6 @@ vesaConfigureScreen (ScreenPtr pScreen)
{
KdScreenPriv
(
pScreen
);
KdScreenInfo
*
screen
=
pScreenPriv
->
screen
;
VesaCardPrivPtr
priv
=
pScreenPriv
->
card
->
driver
;
VesaScreenPrivPtr
pscr
=
pScreenPriv
->
screen
->
driver
;
KdMouseMatrix
m
;
...
...
@@ -840,11 +836,9 @@ vesaLayerCreate (ScreenPtr pScreen)
{
KdScreenPriv
(
pScreen
);
KdScreenInfo
*
screen
=
pScreenPriv
->
screen
;
VesaCardPrivPtr
priv
=
pScreenPriv
->
card
->
driver
;
VesaScreenPrivPtr
pscr
=
pScreenPriv
->
screen
->
driver
;
LayerPtr
pLayer
;
ShadowUpdateProc
update
;
ShadowWindowProc
window
;
ShadowWindowProc
window
=
0
;
PixmapPtr
pPixmap
;
int
kind
;
...
...
@@ -1144,7 +1138,7 @@ vesaRandRSetConfig (ScreenPtr pScreen,
RRScreenSizePtr
pSize
)
{
KdScreenPriv
(
pScreen
);
VesaModePtr
mode
;
VesaModePtr
mode
=
0
;
KdScreenInfo
*
screen
=
pScreenPriv
->
screen
;
VesaCardPrivPtr
priv
=
pScreenPriv
->
card
->
driver
;
VesaScreenPrivPtr
pscr
=
pScreenPriv
->
screen
->
driver
;
...
...
@@ -1346,9 +1340,6 @@ vesaRandRInit (ScreenPtr pScreen)
Bool
vesaInitScreen
(
ScreenPtr
pScreen
)
{
KdScreenPriv
(
pScreen
);
VesaScreenPrivPtr
pscr
=
pScreenPriv
->
screen
->
driver
;
if
(
!
LayerStartInit
(
pScreen
))
return
FALSE
;
...
...
@@ -1417,7 +1408,6 @@ vesaEnable(ScreenPtr pScreen)
VesaCardPrivPtr
priv
=
pScreenPriv
->
card
->
driver
;
VesaScreenPrivPtr
pscr
=
pScreenPriv
->
screen
->
driver
;
KdScreenInfo
*
screen
=
pScreenPriv
->
screen
;
int
code
;
int
i
;
CARD32
size
;
char
*
p
;
...
...
@@ -1615,7 +1605,6 @@ void
vesaPreserve
(
KdCardInfo
*
card
)
{
VesaCardPrivPtr
priv
=
card
->
driver
;
int
code
;
/* The framebuffer might not be valid at this point, so we cannot
save the VGA fonts now; we do it in vesaEnable. */
...
...
@@ -1678,7 +1667,6 @@ void
vesaScreenFini
(
KdScreenInfo
*
screen
)
{
VesaScreenPrivPtr
pscr
=
screen
->
driver
;
VesaCardPrivPtr
priv
=
screen
->
card
->
driver
;
vesaUnmapFramebuffer
(
screen
);
screen
->
fb
[
0
].
depth
=
pscr
->
origDepth
;
...
...
@@ -1779,7 +1767,7 @@ vesaGetColors (ScreenPtr pScreen, int fb, int n, xColorItem *pdefs)
KdScreenPriv
(
pScreen
);
VesaScreenPrivPtr
pscr
=
pScreenPriv
->
screen
->
driver
;
VesaCardPrivPtr
priv
=
pScreenPriv
->
card
->
driver
;
int
first
,
i
,
j
,
k
;
int
i
;
int
red
,
green
,
blue
;
int
min
,
max
;
int
p
;
...
...
hw/kdrive/vesa/vesa.h
View file @
109b9495
...
...
@@ -117,6 +117,25 @@ vesaInitialize(KdCardInfo *card, VesaCardPrivPtr priv);
Bool
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
vesaInitialize
(
KdCardInfo
*
card
,
VesaCardPrivPtr
priv
);
...
...
@@ -129,12 +148,19 @@ vesaScreenInit(KdScreenInfo *screen);
LayerPtr
vesaLayerCreate
(
ScreenPtr
pScreen
);
Bool
vesaMapFramebuffer
(
KdScreenInfo
*
screen
);
Bool
vesaInitScreen
(
ScreenPtr
pScreen
);
Bool
vesaFinishInitScreen
(
ScreenPtr
pScreen
);
Bool
vesaSetMode
(
ScreenPtr
pScreen
,
VesaModePtr
mode
);
Bool
vesaEnable
(
ScreenPtr
pScreen
);
...
...
@@ -165,4 +191,12 @@ vesaGetColors (ScreenPtr pScreen, int fb, int n, xColorItem *pdefs);
int
vesaProcessArgument
(
int
argc
,
char
**
argv
,
int
i
);
#ifdef RANDR
Bool
vesaRandRSetConfig
(
ScreenPtr
pScreen
,
Rotation
randr
,
int
rate
,
RRScreenSizePtr
pSize
);
#endif
#endif
/* _VESA_H_ */
hw/kdrive/vesa/vga.c
View file @
109b9495
...
...
@@ -115,14 +115,14 @@ VgaGetMode (Vm86InfoPtr vi, int *mode)
return
0
;
}
int
void
VgaSetWritePlaneMask
(
Vm86InfoPtr
vi
,
int
mask
)
{
asm
volatile
(
"outb %b0,%w1"
:
:
"a"
(
2
),
"d"
(
0x3c4
));
asm
volatile
(
"outb %b0,%w1"
:
:
"a"
(
mask
),
"d"
(
0x3c5
));
}
int
void
VgaSetReadPlaneMap
(
Vm86InfoPtr
vi
,
int
map
)
{
asm
volatile
(
"outb %b0,%w1"
:
:
"a"
(
4
),
"d"
(
0x3ce
));
...
...
hw/kdrive/vesa/vga.h
View file @
109b9495
...
...
@@ -37,10 +37,10 @@ VgaSetMode(Vm86InfoPtr vi, int mode);
int
VgaGetMode
(
Vm86InfoPtr
vi
,
int
*
mode
);
int
void
VgaSetWritePlaneMask
(
Vm86InfoPtr
vi
,
int
mask
);
int
void
VgaSetReadPlaneMap
(
Vm86InfoPtr
vi
,
int
map
);
int
...
...
hw/kdrive/vesa/vm86.c
View file @
109b9495
...
...
@@ -328,8 +328,8 @@ vm86_outl(U16 port, U32 value)
#define SEG_FS 6
#define REP 1
#define REPNZ 2
#define SET_8(_x, _y) (_x) = (
_x & ~0xFF) | (_y
& 0xFF);
#define SET_16(_x, _y) (_x) = (
_x & ~0xFFFF) | (_y
& 0xFFFF);
#define SET_8(_x, _y) (_x) = (
(_x) & ~0xFF) | ((_y)
& 0xFF);
#define SET_16(_x, _y) (_x) = (
(_x) & ~0xFFFF) | ((_y)
& 0xFFFF);
#define INC_IP(_i) SET_16(regs->eip, (regs->eip + _i))
#define AGAIN INC_IP(1); goto again;
...
...
@@ -340,8 +340,6 @@ vm86_emulate(Vm86InfoPtr vi)
U8
opcode
;
int
size
;
int
pref_seg
=
0
,
pref_rep
=
0
,
pref_66
=
0
,
pref_67
=
0
;
U32
count
;
int
code
;
again:
if
(
!
Vm86IsMemory
(
vi
,
MAKE_POINTER
(
regs
->
cs
,
regs
->
eip
)))
{
...
...
@@ -412,7 +410,7 @@ vm86_emulate(Vm86InfoPtr vi)
goto
again
;
}
else
{
SET_16
(
regs
->
ecx
,
regs
->
ecx
-
1
);
if
(
regs
->
ecx
&
0xFFFF
!=
0
)
if
(
(
regs
->
ecx
&
0xFFFF
)
!=
0
)
goto
again
;
}
}
...
...
@@ -470,7 +468,7 @@ vm86_emulate(Vm86InfoPtr vi)
goto
again
;
}
else
{
SET_16
(
regs
->
ecx
,
regs
->
ecx
-
1
);
if
(
regs
->
ecx
&
0xFFFF
!=
0
)
if
(
(
regs
->
ecx
&
0xFFFF
)
!=
0
)
goto
again
;
}
}
...
...
@@ -571,6 +569,7 @@ Vm86Memory(Vm86InfoPtr vi, U32 i)
return
HM
(
vi
,
i
);
else
{
ErrorF
(
"Reading unmapped memory at 0x%08X
\n
"
,
i
);
return
0
;
}
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment