Я очень новичок в C, это мой второй язык программирования высокого уровня после Java. Я потерял большинство основ, но по какой-то причине я не могу написать один символ для отображения памяти.
Эта программа скомпилирована с использованием Turbo C для DOS на Am486-DX4-100 с частотой 120 МГц. Графическая карта является стандартным VLB Diamond Multimedia Stealth SE с использованием микросхемы Trio32.
Для ОС я запускаю PC-DOS 2000 с загруженной кодовой страницей ISO. Я работаю в стандартном режиме текстового текста в формате MDA/CGA/EGA/VGA 80 с цветом.
Вот программа, как я ее написал:
#include <stdio.h>
int main(void) {
unsigned short int *Video = (unsigned short int *)0xB8000;
*Video = 0x0402;
getchar();
return 0;
}
Как я уже сказал, я очень новичок в C, поэтому я извиняюсь, если моя ошибка кажется очевидной, я не смог найти надежный источник, как это сделать, что я мог понять.
Насколько я знаю, в реальном режиме на платформе x86 экранная память для текстового режима начинается с 0xB8000. Каждый символ хранится в двух байтах, один для символа и один для фона/переднего плана. Идея состоит в том, чтобы написать значение 0x0402 (которое должно быть красным улыбающимся лицом) до 0xB8000. Это должно поместить его в верхнем левом углу экрана.
Я принял во внимание возможность прокрутки экрана и, таким образом, сразу же удалив моего персонажа при выполнении двумя способами. Чтобы решить эту проблему, я попытался:
- Повторно записывайте это значение с помощью цикла
- Напиши немного дальше.
Я могу читать и печатать значение, которое я написал в памяти, поэтому он, очевидно, все еще где-то в памяти, но по какой-то причине я ничего не получаю на экране. Я, очевидно, что-то делаю неправильно, но я не знаю, в чем проблема. Если вам нужна какая-либо другая информация, пожалуйста, спросите. Спасибо за любую возможную помощь, которую вы можете дать.