Cómo imprimir caracteres ASCII prolongarse utilizando un const char *?
-
22-09-2019 - |
Pregunta
Tengo una función para imprimir caracteres en la pantalla que es de esta manera:
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++;
}
}
Y quiero imprimir el carácter 254 en decimal , pero tengo que usar almacenado en un const char*
. No puedo tratar print(0x0F, 0, 0, 0xFE);
, porque esta trows un error de puntero de sin el molde, entonces, ¿cómo puedo hacer esto?
Solución
Insertar el carácter de la cadena usando la notación hexadecimal de C:
print(0x0f, 0, 0, "\xfe");
A medida que la gente tiene en punta a cabo, es posible que desee embellecer el código un poco, tal vez añadiendo un nombre simbólico para el VGA framebuffer dirección base .
Otros consejos
Esto es fuera de tema, recuerdos de esto, pero desenterrar el código encontré esto:
/* Global Variables */ static Word far *ScrPtr; /* Local Variables */ static Word VidSeg; ... int WinScreenHeight(void) { return (*(unsigned char far *) 0x484) + 1; } int WinScreenWidth(void) { return (*(unsigned int far *) 0x44A); } void WinInit(){ SetMode(AdapterType()); ScrPtr = (Word far *) CreateFarPtr(VidSeg, 0x0000); } static void SetMode(int VideoAddress) { switch(VideoAddress) { case VGA : case MCGA: case EGA : case CGA : (Word) VidSeg = 0xB800; break; case MDA : (Word) VidSeg = 0xB000; break; case '?' : fprintf(stderr, "Sorry Unknown Video Adapter.\n"); fprintf(stderr, "This program requires C/E/MC/VGA, Mono Adapter\n"); exit(1); } } static int AdapterType(void) { char far *VidMode; char blreg, alreg; VidMode = (char far *) 0x00000449L; asm mov ax, 0x1a00; asm push bp; asm int 0x10; asm pop bp; asm mov blreg, bl; asm mov alreg, al; 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); return('?'); }
Espero que esta ayuda, Atentamente, Tom.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow