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
m (removed unused variable from the code snippet)
m (Update function to ISO and better coding convention)
Line 3: Line 3:
== The Function ==
== The Function ==
<source lang="c">
<source lang="c">
#include <stdint.h>
/*

Video card mono/colour detection.
enum video_type
Return values: false=colour
true=monochrome
*/
_Bool detectVideoType(void)
{
{
VIDEO_TYPE_NONE = 0x00,
char c=(*(volatile USHORT*)0x410)&0x30;
VIDEO_TYPE_COLOUR = 0x20,
VIDEO_TYPE_MONOCHROME = 0x30,
};


uint16_t detect_bios_area_hardware(void)
//c can be 0x00 or 0x20 for colour, 0x30 for mono.
{
return (c==0x30);
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);
}
}
</source>
</source>

Revision as of 00:45, 20 December 2013

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);
}