Как напечатать расширенные символы ASCII, используя Const Char*?
У меня есть функция для печати символов на экране, которая выглядит так:
void print(int colour, int y, int x, const char *string)
{
volatile char *video=(volatile char*)0xB8000 + y*160 + x*2;
while(*string != 0)
{
*video=*string;
string++;
video++;
*video=colour;
video++;
}
}
И я хочу напечатать символ 254 в десятичном виде, но мне нужно использовать сохраненный на const char*
, Я не могу попробовать print(0x0F, 0, 0, 0xFE);
, потому что это выдает ошибку указателя без приведения, то как я могу это сделать?
2 ответа
Решение
Вставьте символ в строку, используя шестнадцатеричное обозначение C:
print(0x0f, 0, 0, "\xfe");
Как отмечали люди, вы, возможно, захотите немного улучшить код, возможно, добавив символическое имя для базового адреса кадрового буфера VGA.
Это не по теме, воспоминания об этом, но, копаясь в коде, я нашел это:
/ * Глобальные переменные */ статическое слово far * ScrPtr; / * Локальные переменные */ статическое слово VidSeg;... int WinScreenHeight (void) { return (* (unsigned char far *) 0x484) + 1; } int WinScreenWidth (void) { return (* (без знака int far *) 0x44A); } void WinInit () { SetMode (AdapterType ()); ScrPtr = (Word far *) CreateFarPtr (VidSeg, 0x0000); } статический void SetMode(int VideoAddress) { Переключатель (VideoAddress) { корпус VGA: дело MCGA: дело EGA: case CGA: (Word) VidSeg = 0xB800; перерыв; case MDA: (Word) VidSeg = 0xB000; перерыв; дело '?': fprintf(stderr, "Извините, неизвестный видеоадаптер.\n"); fprintf(stderr, "Для этой программы требуется C/E/MC/VGA, моно-адаптер \ n"); выход (1); } } static int AdapterType(void) { char far *VidMode; чар блрег, алрег; VidMode = (char far *) 0x00000449L; asm mov ax, 0x1a00; asm push bp; asm int 0x10; asm pop bp; асм мов блрег, бл; асм мов алрег, ал; if (alreg == 0x1a && blreg >= 9) return(MCGA); if (alreg == 0x1a && blreg >= 7 && blreg <= 9) return(VGA); if (blreg == 4 || blreg == 5) return(EGA); if (*VidMode == 3) return(CGA); if (*VidMode == 7) return(MDA); вернуть('?'); }
Надеюсь, это поможет, С наилучшими пожеланиями, Том.