Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-winehq
Commits
d6b6dda6
Commit
d6b6dda6
authored
Feb 11, 2003
by
Jukka Heinonen
Committed by
Alexandre Julliard
Feb 11, 2003
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Add support for VESA mode information.
Reorganize controller and state information routines.
parent
15e0657f
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
274 additions
and
12 deletions
+274
-12
int10.c
dlls/winedos/int10.c
+274
-12
No files found.
dlls/winedos/int10.c
View file @
d6b6dda6
...
...
@@ -115,6 +115,255 @@ static const INT10_MODE *INT10_FindMode( WORD mode )
/**********************************************************************
* INT10_FillControllerInformation
*
* Fill 256-byte (VBE1.x) or 512-byte buffer (VBE2.0+) with
* capabilities of the video controller.
*/
static
void
INT10_FillControllerInformation
(
BYTE
*
buffer
)
{
/*
* FIXME: Move VESA info stuff here from dosmem.
*/
memcpy
(
buffer
,
&
BIOS_EXTRA_PTR
->
vesa_info
,
sizeof
(
VESAINFO
));
}
/**********************************************************************
* INT10_FillModeInformation
*
* Fill 256-byte buffer with extended information about display mode.
*
* Returns FALSE if mode is unknown and TRUE is mode is known
* even if it is not supported.
*/
static
BOOL
INT10_FillModeInformation
(
BYTE
*
buffer
,
WORD
mode
)
{
const
INT10_MODE
*
ptr
=
INT10_FindMode
(
mode
);
if
(
!
ptr
)
return
FALSE
;
/*
* 00 - WORD: mode attributes
* Bits:
* 0 - Mode supported by present hardware configuration.
* 1 - Optional information available. Must be =1 for VBE v1.2+.
* 2 - BIOS output supported.
* Int10 functions 01, 02, 06, 07, 09, 0a and 0e are supported.
* 3 - Set if color, clear if monochrome.
* 4 - Set if graphics mode, clear if text mode.
* 5 - Mode is not VGA-compatible if set.
* VGA-compatible modes support standard VGA I/O ports.
* 6 - Bank-switched (or windowed) mode is not supported if set.
* 7 - Linear framebuffer mode supported.
* 8 - Double scanning supported.
* 9 - Interlaced operation supported.
* 10 - Triple buffering supported.
* 11 - Stereoscopic display supported.
* 12 - Dual display start address supported.
* 13-15 - Reserved.
*/
{
WORD
attr
=
0x000a
;
/* color mode, optional info */
/*
* FIXME: Attribute handling is incomplete.
*/
/* Mode supported? FIXME: correct value */
attr
|=
0x0001
;
/* Graphical mode? */
if
(
ptr
->
Depth
)
attr
|=
0x0010
;
/* Not VGA-compatible? */
if
(
mode
>
0xff
)
attr
|=
0x0020
;
*
(
WORD
*
)(
buffer
+
0
)
=
attr
;
}
/*
* 02 - BYTE[2]: window attributes, window A and window B
* Bits:
* 0 - Window exists.
* 1 - Window is readable.
* 2 - Window is writable.
* 3-7 - Reserved.
*/
buffer
[
2
]
=
0x07
;
/* window A exists, readable and writable */
buffer
[
3
]
=
0x00
;
/* window B not supported */
/* 04 - WORD: window granularity in KB */
*
(
WORD
*
)(
buffer
+
4
)
=
64
;
/* 06 - WORD: window size in KB */
*
(
WORD
*
)(
buffer
+
6
)
=
64
;
/* 08 - WORD[2]: start segments, window A and window B */
*
(
WORD
*
)(
buffer
+
8
)
=
0xa000
;
/* window A segment */
*
(
WORD
*
)(
buffer
+
10
)
=
0x0000
;
/* window B not supported */
/* 12 - DWORD: window positioning function */
*
(
DWORD
*
)(
buffer
+
12
)
=
0
;
/* not supported */
/* 16 - WORD: bytes per scan line */
*
(
WORD
*
)(
buffer
+
16
)
=
0
;
/* FIXME */
/* 18 - WORD: width in pixels (graphics) or characters (text) */
*
(
WORD
*
)(
buffer
+
18
)
=
ptr
->
Width
;
/* 20 - WORD: height in pixels (graphics) or characters (text) */
*
(
WORD
*
)(
buffer
+
20
)
=
ptr
->
Height
;
/* 22 - BYTE: width of character cell in pixels */
buffer
[
22
]
=
0
;
/* FIXME */
/* 23 - BYTE: height of character cell in pixels */
buffer
[
23
]
=
0
;
/* FIXME */
/* 24 - BYTE: number of memory planes */
buffer
[
24
]
=
1
;
/* FIXME */
/* 25 - BYTE: number of bits per pixel */
buffer
[
25
]
=
ptr
->
Depth
;
/* FIXME: text modes? reserved bits? */
/* 26 - BYTE: number of banks */
buffer
[
26
]
=
1
;
/* FIXME */
/*
* 27 - BYTE: memory model type
* Values (hex):
* 00 - Text mode
* 01 - CGA graphics
* 02 - Hercules graphics
* 03 - Planar
* 04 - Packed pixel
* 05 - Non-chain 4, 256 color
* 06 - Direct color
* 07 - YUV
* 08-0F - Reserved for VESA.
* 10-FF - OEM memory models.
*/
if
(
!
ptr
->
Depth
)
buffer
[
27
]
=
0
;
/* text mode */
else
buffer
[
27
]
=
3
;
/* FIXME */
/* 28 - BYTE: size of bank in KB */
buffer
[
28
]
=
0
;
/* FIXME */
/* 29 - BYTE: number of image pages (less one) in video RAM */
buffer
[
29
]
=
0
;
/* FIXME */
/* 30 - BYTE: reserved (0x00 for VBE 1.0-2.0, 0x01 for VBE 3.0) */
buffer
[
30
]
=
0x01
;
/*
* 31 - BYTE: red mask size
* Size of red color component in bits.
* Used only when memory model is direct color, otherwise set to zero.
*/
buffer
[
31
]
=
0
;
/* FIXME */
/*
* 32 - BYTE: red field position
* Bit position of the least significant bit of red color component.
* Used only when memory model is direct color, otherwise set to zero.
*/
buffer
[
32
]
=
0
;
/* FIXME */
/* 33 - BYTE: green mask size */
buffer
[
33
]
=
0
;
/* FIXME */
/* 34 - BYTE: green field position */
buffer
[
34
]
=
0
;
/* FIXME */
/* 35 - BYTE: blue mask size */
buffer
[
35
]
=
0
;
/* FIXME */
/* 36 - BYTE: blue field position */
buffer
[
36
]
=
0
;
/* 37 - BYTE: reserved mask size */
buffer
[
37
]
=
0
;
/* 38 - BYTE: reserved mask position */
buffer
[
38
]
=
0
;
/*
* 39 - BYTE: direct color mode info
* Bits:
* 0 - Set if color ramp is programmable.
* 1 - Set if bytes in reserved field may be used by application.
*/
buffer
[
39
]
=
0
;
/* not supported */
/* 40 - DWORD: physical address of linear video buffer */
*
(
DWORD
*
)(
buffer
+
40
)
=
0
;
/* not supported */
/* 44 - DWORD: reserved, always zero */
*
(
DWORD
*
)(
buffer
+
44
)
=
0
;
/* 48 - WORD: reserved, always zero */
*
(
WORD
*
)(
buffer
+
48
)
=
0
;
/* 50 - WORD: bytes per scan line in linear modes */
*
(
WORD
*
)(
buffer
+
50
)
=
*
(
WORD
*
)(
buffer
+
16
);
/* 52 - BYTE: number of images (less one) for banked video modes */
buffer
[
52
]
=
0
;
/* FIXME */
/* 53 - BYTE: number of images (less one) for linear video modes */
buffer
[
53
]
=
buffer
[
52
];
/* 54 - BYTE: red mask size (linear modes) */
buffer
[
54
]
=
buffer
[
31
];
/* 55 - BYTE: red field position (linear modes) */
buffer
[
55
]
=
buffer
[
32
];
/* 56 - BYTE: green mask size (linear modes) */
buffer
[
56
]
=
buffer
[
33
];
/* 57 - BYTE: green field size (linear modes) */
buffer
[
57
]
=
buffer
[
34
];
/* 58 - BYTE: blue mask size (linear modes) */
buffer
[
58
]
=
buffer
[
35
];
/* 59 - BYTE: blue field position (linear modes) */
buffer
[
59
]
=
buffer
[
36
];
/* 60 - BYTE: reserved mask size (linear modes) */
buffer
[
60
]
=
buffer
[
37
];
/* 61 - BYTE: reserved mask position (linear modes) */
buffer
[
61
]
=
buffer
[
38
];
/* 62 - DWORD: maximum pixel clock for graphics video mode, in Hz */
*
(
DWORD
*
)(
buffer
+
62
)
=
0
;
/* FIXME */
return
TRUE
;
}
/**********************************************************************
* INT10_FillStateInformation
*
* Fill 64-byte buffer with VGA state and functionality information.
*/
static
void
INT10_FillStateInformation
(
BYTE
*
buffer
,
BIOSDATA
*
data
)
{
/*
* FIXME: Move VGA info stuff here from dosmem.
*/
memcpy
(
buffer
,
&
BIOS_EXTRA_PTR
->
vid_state
,
sizeof
(
VIDEOSTATE
)
);
}
/**********************************************************************
* INT10_SetVideoMode
*
* Change current video mode to any VGA or VESA mode.
...
...
@@ -246,18 +495,30 @@ static void INT10_HandleVESA( CONTEXT86 *context )
switch
(
AL_reg
(
context
))
{
case
0x00
:
/* GET SuperVGA INFORMATION */
TRACE
(
"VESA GET SuperVGA INFORMATION
\n
"
);
memcpy
(
CTX_SEG_OFF_TO_LIN
(
context
,
context
->
SegEs
,
context
->
Edi
),
&
BIOS_EXTRA_PTR
->
vesa_info
,
sizeof
(
VESAINFO
));
case
0x00
:
/* RETURN CONTROLLER INFORMATION */
TRACE
(
"VESA RETURN CONTROLLER INFORMATION
\n
"
);
{
BYTE
*
ptr
=
CTX_SEG_OFF_TO_LIN
(
context
,
context
->
SegEs
,
context
->
Edi
);
INT10_FillControllerInformation
(
ptr
);
SET_AL
(
context
,
0x4f
);
SET_AH
(
context
,
0x00
);
/* 0x00 = successful 0x01 = failed */
}
break
;
case
0x01
:
/* GET SuperVGA MODE INFORMATION */
FIXME
(
"VESA GET SuperVGA Mode Information - Not supported
\n
"
);
case
0x01
:
/* RETURN MODE INFORMATION */
TRACE
(
"VESA RETURN MODE INFORMATION %04x
\n
"
,
CX_reg
(
context
)
);
{
BYTE
*
ptr
=
CTX_SEG_OFF_TO_LIN
(
context
,
context
->
SegEs
,
context
->
Edi
);
SET_AL
(
context
,
0x4f
);
SET_AH
(
context
,
0x01
);
/* 0x00 = successful 0x01 = failed */
if
(
INT10_FillModeInformation
(
ptr
,
CX_reg
(
context
)
))
SET_AH
(
context
,
0x00
);
/* status: success */
else
SET_AH
(
context
,
0x01
);
/* status: failed */
}
break
;
case
0x02
:
/* SET SuperVGA VIDEO MODE */
...
...
@@ -802,12 +1063,13 @@ void WINAPI DOSVM_Int10Handler( CONTEXT86 *context )
case
0x1b
:
/* FUNCTIONALITY/STATE INFORMATION */
TRACE
(
"Get functionality/state information
\n
"
);
if
(
BX_reg
(
context
)
==
0x0
)
if
(
BX_reg
(
context
)
==
0x0
000
)
{
SET_AL
(
context
,
0x1b
);
/* Copy state information structure to ES:DI */
memcpy
(
CTX_SEG_OFF_TO_LIN
(
context
,
context
->
SegEs
,
context
->
Edi
),
&
BIOS_EXTRA_PTR
->
vid_state
,
sizeof
(
VIDEOSTATE
));
BYTE
*
ptr
=
CTX_SEG_OFF_TO_LIN
(
context
,
context
->
SegEs
,
context
->
Edi
);
SET_AL
(
context
,
0x1b
);
/* Function is supported */
INT10_FillStateInformation
(
ptr
,
data
);
}
break
;
...
...
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