EDID

From OSDev Wiki
Jump to navigation Jump to search

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 article is a stub! This page or section is a stub. You can help the wiki by accurately contributing 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