Detecting Colour and Monochrome Monitors: Difference between revisions

From OSDev.wiki
Jump to navigation Jump to search
[unchecked revision][unchecked revision]
Content added Content deleted
No edit summary
 
m (Bot: Replace deprecated source tag with syntaxhighlight)
 
(13 intermediate revisions by 8 users not shown)
Line 1: Line 1:
Detecting whether a user has a colour or monochrome video card is a trivial task. The [[BIOS]] [[Memory Map (x86)#BIOS Data Area .28BDA.29|data segment]] has a value in it for this information. Below is a function (in ISO C) to retrieve this:
{{Convert}}


== The Function ==
Detecting if you have a colour or monochrome video card is trivial. You can use the values stored in the BIOS data segment to determine this.
<syntaxhighlight lang="c">
#include <stdint.h>


enum video_type
Here is some C source example of how I do it.
{
VIDEO_TYPE_NONE = 0x00,
VIDEO_TYPE_COLOUR = 0x20,
VIDEO_TYPE_MONOCHROME = 0x30,
};


uint16_t detect_bios_area_hardware(void)
<pre>
/* video card mono/colour detection by Dark Fiber
* returns 0=mono, 1=colour
*/
int detect_video_type(void)
{
{
const uint16_t* bda_detected_hardware_ptr = (const uint16_t*) 0x410;
int rc;
return *bda_detected_hardware_ptr;
char c=(*(USHORT*)0x410&0x30;
}


enum video_type get_bios_area_video_type(void)
/* C can be 0x00 or 0x20 for colour, 0x30 for mono
{
if(c==0x30){
return (enum video_type) (detect_bios_area_hardware() & 0x30);
rc=0; // mono
}
else
{
rc=1; // colour
}
return rc;
}
}
</syntaxhighlight>
</pre>

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

Latest revision as of 05:13, 9 June 2024

Detecting whether a user has a colour or monochrome video card is a trivial task. The BIOS data segment has a value in it for this information. Below is a function (in ISO C) to retrieve this:

The Function

#include <stdint.h>

enum video_type
{
    VIDEO_TYPE_NONE = 0x00,
    VIDEO_TYPE_COLOUR = 0x20,
    VIDEO_TYPE_MONOCHROME = 0x30,
};

uint16_t detect_bios_area_hardware(void)
{
    const uint16_t* bda_detected_hardware_ptr = (const uint16_t*) 0x410;
    return *bda_detected_hardware_ptr;
}

enum video_type get_bios_area_video_type(void)
{
    return (enum video_type) (detect_bios_area_hardware() & 0x30);
}