Я работаю над функцией построения символа в видеорежиме для режима 256 VGA. Я использую 6x7 шрифтов с набором, содержащим только заглавные буквы, цифры и знаки. Это данные:Построение символа в режиме VGA
uint8_t characters[455] = {
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x20,0x20,0x00,0x20,0x00,0x50,
0x50,0x00,0x00,0x00,0x00,0x00,0x50,0xf8,0x50,0x50,0xf8,0x50,0x00,0x20,0xf8,0xa0,
0xf8,0x28,0xf8,0x00,0xc8,0xd0,0x20,0x20,0x58,0x98,0x00,0x40,0xa0,0x40,0xa8,0x90,
0x68,0x00,0x20,0x40,0x00,0x00,0x00,0x00,0x00,0x20,0x40,0x40,0x40,0x40,0x20,0x00,
0x20,0x10,0x10,0x10,0x10,0x20,0x00,0x50,0x20,0xf8,0x20,0x50,0x00,0x00,0x20,0x20,
0xf8,0x20,0x20,0x00,0x00,0x00,0x00,0x00,0x60,0x20,0x40,0x00,0x00,0x00,0xf8,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x60,0x00,0x00,0x08,0x10,0x20,0x40,0x80,
0x00,0x70,0x88,0x98,0xa8,0xc8,0x70,0x00,0x20,0x60,0x20,0x20,0x20,0x70,0x00,0x70,
0x88,0x08,0x70,0x80,0xf8,0x00,0xf8,0x10,0x30,0x08,0x88,0x70,0x00,0x20,0x40,0x90,
0x90,0xf8,0x10,0x00,0xf8,0x80,0xf0,0x08,0x88,0x70,0x00,0x70,0x80,0xf0,0x88,0x88,
0x70,0x00,0xf8,0x08,0x10,0x20,0x20,0x20,0x00,0x70,0x88,0x70,0x88,0x88,0x70,0x00,
0x70,0x88,0x88,0x78,0x08,0x70,0x00,0x30,0x30,0x00,0x00,0x30,0x30,0x00,0x30,0x30,
0x00,0x30,0x10,0x20,0x00,0x00,0x10,0x20,0x40,0x20,0x10,0x00,0x00,0xf8,0x00,0xf8,
0x00,0x00,0x00,0x00,0x20,0x10,0x08,0x10,0x20,0x00,0x70,0x88,0x10,0x20,0x00,0x20,
0x00,0x70,0x90,0xa8,0xb8,0x80,0x70,0x00,0x70,0x88,0x88,0xf8,0x88,0x88,0x00,0xf0,
0x88,0xf0,0x88,0x88,0xf0,0x00,0x70,0x88,0x80,0x80,0x88,0x70,0x00,0xe0,0x90,0x88,
0x88,0x90,0xe0,0x00,0xf8,0x80,0xf0,0x80,0x80,0xf8,0x00,0xf8,0x80,0xf0,0x80,0x80,
0x80,0x00,0x70,0x88,0x80,0x98,0x88,0x70,0x00,0x88,0x88,0xf8,0x88,0x88,0x88,0x00,
0x70,0x20,0x20,0x20,0x20,0x70,0x00,0x10,0x10,0x10,0x10,0x90,0x60,0x00,0x90,0xa0,
0xc0,0xa0,0x90,0x88,0x00,0x80,0x80,0x80,0x80,0x80,0xf8,0x00,0x88,0xd8,0xa8,0x88,
0x88,0x88,0x00,0x88,0xc8,0xa8,0x98,0x88,0x88,0x00,0x70,0x88,0x88,0x88,0x88,0x70,
0x00,0xf0,0x88,0x88,0xf0,0x80,0x80,0x00,0x70,0x88,0x88,0xa8,0x98,0x70,0x00,0xf0,
0x88,0x88,0xf0,0x90,0x88,0x00,0x70,0x80,0x70,0x08,0x88,0x70,0x00,0xf8,0x20,0x20,
0x20,0x20,0x20,0x00,0x88,0x88,0x88,0x88,0x88,0x70,0x00,0x88,0x88,0x88,0x88,0x50,
0x20,0x00,0x88,0x88,0x88,0xa8,0xa8,0x50,0x00,0x88,0x50,0x20,0x20,0x50,0x88,0x00,
0x88,0x50,0x20,0x20,0x20,0x20,0x00,0xf8,0x10,0x20,0x40,0x80,0xf8,0x00,0x60,0x40,
0x40,0x40,0x40,0x60,0x00,0x00,0x80,0x40,0x20,0x10,0x08,0x00,0x30,0x10,0x10,0x10,
0x10,0x30,0x00,0x20,0x50,0x88,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,
0x00,0xf8,0xf8,0xf8,0xf8,0xf8,0xf8};
Для put_char функции, I'm вычисления смещения для массива путем умножения кода ASCII на 7 и вычитая 32 (так как я просто используя заглавные буквы). Тогда я итерацию по ширине и высоте размера шрифта (т.е. 6 и 7), чтобы построить пиксель, если я найду 1 и ничего не делать, если я найду 0.
void put_char(int x,int y,int ascii_char){
int l,i,j,h,char_offset;
j,h,l,i=0;
char_offset = ascii_char*7-32;
printf("offset: %d\n",char_offset);
for (l = 0; l < 7; l++) {
for (i = 6; i > 0; i--) {
j++;
if ((characters[char_offset+l+j] & (1 << i))) {
plot_pixel(j+x, h+y, current_color);
}
}
h++;
j = 0;
}
}
Однако I'm не получают письмо напечатано правильно на экране. Я думаю, что у меня может возникнуть проблема расчета смещения, но я не знаю, где это. Я также сомневаюсь в том, что мой метод проверяет правильность числа 1 или 0. Может ли кто-нибудь помочь мне с этим?
EDIT:
Далее мы приводим картину того, что получение I'm (обратите внимание на зеленые пиксели на области рисования, те должны быть буква 'А'
EDIT 2:
Далее мы приводим картину того, что I'm получаю теперь, когда я изменил
char_offset = ascii_char*7-32;
к
char_offset = (ascii_char-32)*7;
подмигнули почти хорошо, однако левая сторона «А» как-то не хватает на черчения пикселей.
Вы можете добавить скриншот? Могла бы сделать проблему мгновенно очевидной, не читая код, хотя то, что вы уже дали, - это много информации. Если вы напечатали пробел,! "И т. Д. В строке, то ошибка в вычислении смещения может быть мгновенно видна. – Tommy
Привет, спасибо за ваши комментарии. @enhzflep У меня есть 1 байт на горизонтальную строку. Поэтому идея состоит в том, чтобы иметь 7 байты на битбитовый символ. –
@Tommy. Я добавил, что скриншот того, что отображается –