VGA 监视器编程涉及将 16 位值写入某些内存位置,以便在屏幕上打印字符。这就是这个 16 位值中的不同位如何转换为屏幕上打印的字符的方式:
我使用枚举来表示不同的背景/前景色:
typedef enum
{
eBlack ,
eBlue ,
eGreen ,
eCyan,
eRed,
eMagenta,
eBrown,
eLightGrey,
eDarkGrey,
eLightBlue,
eLightGreen,
eLightCyan,
eLightRed,
eLightMagenta,
eLightBrown,
eWhite
} textColor ;
我编写了这个函数来创建这个基于三件事的 16 位值,角色用户想要打印,他想要的前景色和背景色:
假设:在我的平台上,int 32 位,unsigned short 16 位,char 8 位
void printCharacterOnScreen ( char c , textColor bgColor, textColor fgColor )
{
unsigned char higherByte = ( bgColor << 4 ) | (fgColor ) ;
unsigned char lowerByte = c ;
unsigned short higherByteAs16bitValue = higherByte & 0 ;
higherByteAs16bitValue = higherByteAs16bitValue << 8 ;
unsigned short lowerByteAs16bitValue = lowerByte & 0 ;
unsigned short complete16bitValue = higherByteAs16bitValue & lowerByteAs16bitValue ;
// Then write this value at the special address for VGA devices.
}
问:代码是否正确,是创建这样一个值的编写方式吗?有没有一些标准的方法来做这种操作?
问:我的方法会独立于平台吗?对代码还有其他评论吗?