EDID: Difference between revisions

From OSDev.wiki
Jump to navigation Jump to search
[unchecked revision][unchecked revision]
Content added Content deleted
m (vm8086 → Virtual 8086 Mode)
m (Bot: Replace deprecated source tag with syntaxhighlight)
 
(8 intermediate revisions by 5 users not shown)
Line 2: Line 2:


== Reading EDID ==
== Reading EDID ==
The first step is, naturally, to actually get the data. This is done through the BIOS - int 0x10, ax=4F15h, bl=01h.
The first step is, naturally, to actually get the data. This is done through the BIOS - INT 0x10, AX=4F15h, BL=01h, CX = Controller Unit, DX = EDID block, ES:DI = 128-Byte Buffer.
<source lang="asm">
<syntaxhighlight lang="asm">
mov ax, 0x4f15
mov ax, 0x4f15
mov bl, 0x01
mov bl, 0x01
mov cx, 0
xor cx, cx
mov dx, 0
xor dx, dx
int 0x10
int 0x10
;AL = 0x4F if function supported
;AL = 0x4F if function supported
;AH = status (0 is success, 1 is fail)
;AH = status (0 is success, 1 is fail)
;ES:DI contains the EDID
;ES:DI contains the EDID
</syntaxhighlight>
</source>
Note that this code will only run in [[Real Mode]] or [[Virtual 8086 Mode]].
Note that this code will only run in [[Real Mode]] or [[Virtual 8086 Mode]].


== EDID Data ==
== EDID Data ==
{{stub}}
{{stub}}
'''EDID record:'''
{| class="wikitable"
|-
! Offset (Bytes)
! Length
! Description
|-
| 00h
| 8 Bytes
| Padding
|-
| 08h
| 1 Word
| Manufacture ID (Big-Endian)
|-
| 0Ah
| 1 Word
| EDID ID code
|-
| 0Ch
| 1 DWord
| Serial Number
|-
| 10h
| 1 Byte
| Manufacture Week
|-
| 11h
| 1 Byte
| Manufacture Year
|-
| 12h
| 1 Byte
| EDID Version
|-
| 13h
| 1 Byte
| EDID Revision
|-
| 14h
| 1 Byte
| Video Input Type
|-
| 15h
| 1 Byte
| Max Horizontal Size (cm)
|-
| 16h
| 1 Byte
| Max Vertical Size (cm)
|-
| 17h
| 1 Byte
| Gama Factor
|-
| 18h
| 1 Byte
| DPMS Flags
|-
| 19h
| 10 Bytes
| Chroma Information
|-
| 23h
| 1 Byte
| Established Timings 1
|-
| 24h
| 1 Byte
| Established Timings 2
|-
| 25h
| 1 Byte
| Manufacture's Reserved Timings
|-
| 26h
| 8 Words
| Standard Timing Identification
|-
| 36h
| 18 Bytes
| Detailed Timing Description 1
|-
| 48h
| 18 Bytes
| Detailed Timing Description 2
|-
| 5Ah
| 18 Bytes
| Detailed Timing Description 3
|-
| 6Ch
| 18 Bytes
| Detailed Timing Description 4
|-
| 7Eh
| 1 Byte
| Unused
|-
| 7Fh
| 1 Byte
| Checksum (Low Byte of 16-bit sum of 00-7Eh)
|}
'''Video Input Type:'''
{| class="wikitable"
|-
! Bit(s)
! Description
|-
| 0
| Separate Sync
|-
| 1
| Composite Sync
|-
| 2
| Sync on green
|-
| 3-4
| Unused?
|-
| 5-6
| Voltage Level
|-
| 7
| Digital Signal
|}
'''DPMS Flags:'''
{| class="wikitable"
|-
! Bit(s)
! Description
|-
| 0-2
| Unused?
|-
| 3
| Display Type (1=RGB)
|-
| 4
| Unused?
|-
| 5
| Active Off Supported
|-
| 6
| Suspend Supported
|-
| 7
| Standby Supported
|}
'''Chroma Information:'''
{| class="wikitable"
|-
! Byte
! Description
|-
| 0
| Green X'/Y' and Red X'/Y'
|-
| 1
| White X'/Y' and Blue X'/Y'
|-
| 2
| Red Y
|-
| 3
| Red X
|-
| 4
| Green Y
|-
| 5
| Green X
|-
| 6
| Blue Y
|-
| 7
| Blue X
|-
| 8
| White Y
|-
| 9
| White X
|}
'''Detailed Timing Description:'''
{| class="wikitable"
|-
! Byte
! Description
|-
| 0
| Horizontal Frequency (kHz)
|-
| 1
| Vertical Frequency (Hz)
|-
| 2
| Horizontal Active Time
|-
| 3
| Horizontal Blanking Time
|-
| 4
| Horizontal Active Time / Horizontal Blanking Time
|-
| 5
| Vertical Active time
|-
| 6
| Vertical Blanking Time
|-
| 7
| Vertical Active Time / Vertical Blanking Time
|-
| 8
| Horizontal Sync Offset
|-
| 9
| Horizontal Sync Pulse-width
|-
| 10
| Vertical Sync Offset / Vertical Sync Pulse-width
|-
| 11
| Vertical/Horizontal Sync Offset / Pulse-width
|-
| 12
| Horizontal Image Size (mm)
|-
| 13
| Vertical Image Size (mm)
|-
| 14
| Horizontal Image Size / Vertical Image Size
|-
| 15
| Horizontal Border
|-
| 16
| Vertical Border
|-
| 17
| Type Of Display
|}
'''Type Of Display:'''
{| class="wikitable"
|-
! Bit(s)
! Description
|-
| 7
| Interlaced
|-
| 5-6
| Stereo Mode (00 - No Stereo, 01 - Right Stereo Sync High, 10 - Left Stereo Sync High)
|-
| 4-3
| Sync Type (00 - Analog Composite, 01 - Bipolar Analog Composite, 10 - Digital Composite, 11 - Digital Separate)
|-
| 2
| Serrate (OR Vertical Sync Polarity IF 'Sync Type' == 11)
|-
| 1
| Sync Location (OR Horizontal Sync Polarity IF 'Sync Type' == 11)
|-
| 0
| Unused?
|}

== Get preferred resolution ==

<syntaxhighlight lang="c">
void get_preferred_resolution(uint8_t *edid, int *x, int *y) {
*x = edid[0x38] | ((int) (edid[0x3A] & 0xF0) << 4);
*y = edid[0x3B] | ((int) (edid[0x3D] & 0xF0) << 4);
}
</syntaxhighlight>

== See Also ==
=== External Links ===
* [http://www.edidreader.com/ Online parser for EDID information]
* [https://web.archive.org/web/20080614205229/http://www.vesa.org/public/VBE/VBEDDC11.PDF VBE/DDC 1.1 Specification]
* [https://glenwing.github.io/docs/VESA-EEDID-A2.pdf VESA EDID 1.4 Specification]

[[Category:Video]]
[[Category:Hardware Detection]]

Latest revision as of 05:21, 9 June 2024

Extended Display IDentification is data about the monitor, which the monitor provides to the video card. EDID is the programmatical way to check if a video mode is supported. However, this procedure is rather complex. (See VBE.)

Reading EDID

The first step is, naturally, to actually get the data. This is done through the BIOS - INT 0x10, AX=4F15h, BL=01h, CX = Controller Unit, DX = EDID block, ES:DI = 128-Byte Buffer.

mov ax, 0x4f15
mov bl, 0x01
xor cx, cx
xor dx, dx
int 0x10
;AL = 0x4F if function supported
;AH = status (0 is success, 1 is fail)
;ES:DI contains the EDID

Note that this code will only run in Real Mode or Virtual 8086 Mode.

EDID Data

This page is a stub.
You can help the wiki by accurately adding more contents to it.

EDID record:

Offset (Bytes) Length Description
00h 8 Bytes Padding
08h 1 Word Manufacture ID (Big-Endian)
0Ah 1 Word EDID ID code
0Ch 1 DWord Serial Number
10h 1 Byte Manufacture Week
11h 1 Byte Manufacture Year
12h 1 Byte EDID Version
13h 1 Byte EDID Revision
14h 1 Byte Video Input Type
15h 1 Byte Max Horizontal Size (cm)
16h 1 Byte Max Vertical Size (cm)
17h 1 Byte Gama Factor
18h 1 Byte DPMS Flags
19h 10 Bytes Chroma Information
23h 1 Byte Established Timings 1
24h 1 Byte Established Timings 2
25h 1 Byte Manufacture's Reserved Timings
26h 8 Words Standard Timing Identification
36h 18 Bytes Detailed Timing Description 1
48h 18 Bytes Detailed Timing Description 2
5Ah 18 Bytes Detailed Timing Description 3
6Ch 18 Bytes Detailed Timing Description 4
7Eh 1 Byte Unused
7Fh 1 Byte Checksum (Low Byte of 16-bit sum of 00-7Eh)

Video Input Type:

Bit(s) Description
0 Separate Sync
1 Composite Sync
2 Sync on green
3-4 Unused?
5-6 Voltage Level
7 Digital Signal

DPMS Flags:

Bit(s) Description
0-2 Unused?
3 Display Type (1=RGB)
4 Unused?
5 Active Off Supported
6 Suspend Supported
7 Standby Supported

Chroma Information:

Byte Description
0 Green X'/Y' and Red X'/Y'
1 White X'/Y' and Blue X'/Y'
2 Red Y
3 Red X
4 Green Y
5 Green X
6 Blue Y
7 Blue X
8 White Y
9 White X

Detailed Timing Description:

Byte Description
0 Horizontal Frequency (kHz)
1 Vertical Frequency (Hz)
2 Horizontal Active Time
3 Horizontal Blanking Time
4 Horizontal Active Time / Horizontal Blanking Time
5 Vertical Active time
6 Vertical Blanking Time
7 Vertical Active Time / Vertical Blanking Time
8 Horizontal Sync Offset
9 Horizontal Sync Pulse-width
10 Vertical Sync Offset / Vertical Sync Pulse-width
11 Vertical/Horizontal Sync Offset / Pulse-width
12 Horizontal Image Size (mm)
13 Vertical Image Size (mm)
14 Horizontal Image Size / Vertical Image Size
15 Horizontal Border
16 Vertical Border
17 Type Of Display

Type Of Display:

Bit(s) Description
7 Interlaced
5-6 Stereo Mode (00 - No Stereo, 01 - Right Stereo Sync High, 10 - Left Stereo Sync High)
4-3 Sync Type (00 - Analog Composite, 01 - Bipolar Analog Composite, 10 - Digital Composite, 11 - Digital Separate)
2 Serrate (OR Vertical Sync Polarity IF 'Sync Type' == 11)
1 Sync Location (OR Horizontal Sync Polarity IF 'Sync Type' == 11)
0 Unused?

Get preferred resolution

void get_preferred_resolution(uint8_t *edid, int *x, int *y) {
    *x = edid[0x38] | ((int) (edid[0x3A] & 0xF0) << 4);
    *y = edid[0x3B] | ((int) (edid[0x3D] & 0xF0) << 4);
}

See Also

External Links