Как напечатать расширенные символы 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);
    вернуть('?');
}

Надеюсь, это поможет, С наилучшими пожеланиями, Том.

Другие вопросы по тегам