EDID: Difference between revisions
Jump to navigation
Jump to search
[unchecked revision] | [unchecked revision] |
Content added Content deleted
(Created page detailing obtaining EDID, EDID contents stubbed) |
m (Bot: Replace deprecated source tag with syntaxhighlight) |
||
(10 intermediate revisions by 7 users not shown) | |||
Line 1: | Line 1: | ||
'''E'''xtended '''D'''isplay '''ID'''entification 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 [[Getting VBE Mode Info|VBE]].) |
|||
== Introduction == |
|||
Extended Display IDentification ('''EDID''') 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 [[Getting VBE Mode Info|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. |
|||
=== Reading EDID === |
|||
<syntaxhighlight lang="asm"> |
|||
The first step, is, naturally, to actually get the data. This is done through the BIOS - int 0x10, ax=4F15h, bl=01h. |
|||
<source lang="asm"> |
|||
mov ax, 0x4f15 |
mov ax, 0x4f15 |
||
mov bl, 0x01 |
mov bl, 0x01 |
||
xor cx, cx |
|||
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 |
Note that this code will only run in [[Real Mode]] or [[Virtual 8086 Mode]]. |
||
== 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);
}