Detecting Colour and Monochrome Monitors: Difference between revisions
Jump to navigation
Jump to search
[unchecked revision] | [unchecked revision] |
Content added Content deleted
mNo edit summary |
m (Bot: Replace deprecated source tag with syntaxhighlight) |
||
(11 intermediate revisions by 6 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=(*(volatile 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: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);
}