OSDev
http://osdev.su/

Текстовый вывод
http://osdev.su/viewtopic.php?f=6&t=356
Страница 1 из 2

Автор:  tommi-boy [ 29 ноя 2010, 13:13 ]
Заголовок сообщения:  Текстовый вывод

Набрал код, запускаю его из чистой дос, но ничего не происходит, экран совершенно чистый.
То ли лыжи не едут, то ли у меня с головой чего.
Подскажите пожалуйста.

Код:
void write_string(int colour, const char *string)
{
   char *video=(char*)0xB8000;
   while(*string!=0)
   {
      *video=*string;
      string++;
      video++;
      *video=colour;
      video++;
   }
}

int main()
{
write_string(7, "Hello world!!!");
getch();
return 0;
}

Автор:  qeos [ 29 ноя 2010, 14:04 ]
Заголовок сообщения:  Re: Текстовый вывод

мб не та страница видео памяти?
попробуй дизасемблить.. или отладчиком его..

Автор:  tommi-boy [ 29 ноя 2010, 14:12 ]
Заголовок сообщения:  Re: Текстовый вывод

Пробовал менять страницы, ставил ему адреса 0xB9000 0xBА000, всё равно никакого эффекта, а дизассемлить и отладчиком ходить под досом не очень удобно.

Автор:  qeos [ 29 ноя 2010, 15:02 ]
Заголовок сообщения:  Re: Текстовый вывод

Не знаю как твой компилятор преобразует адрес, но как я понимаю под досом не расширеный режим, а значит адресация должна быть сегмент:смещение.. Надо тебе дебагером посмотреть. По идее ссылаться должен на 0b80:0000 если я ничего не путаю..

Автор:  SII [ 29 ноя 2010, 16:14 ]
Заголовок сообщения:  Re: Текстовый вывод

Ссылаться должен на B800:0000. Что же касается причины, надо дизассемблировать выполняемый файл и в нём смотреть, что там происходит -- это самый надёжный и верный путь.

Автор:  Himik [ 29 ноя 2010, 16:52 ]
Заголовок сообщения:  Re: Текстовый вывод

Как вуже сказали, в чистом ДОС 16-битная адресация, а число 0xB8000 умещается только в 32-битном виде. Соответственно, надо использовать 32-битный расширитель, например dos4gw. Просмотри ключи сборки проекта, там найдёшь какой-нибудь расширитель.

Автор:  SII [ 29 ноя 2010, 17:09 ]
Заголовок сообщения:  Re: Текстовый вывод

Но это будет уже не чистый ДОС :)

Автор:  tommi-boy [ 29 ноя 2010, 17:54 ]
Заголовок сообщения:  Re: Текстовый вывод

0xB8000 прекрасно умещается в 16тибитном режиме, поскольку на шине в 16тибитном режиме 20 разрядов, а значит максимальный адрес 0xfffff а это больше чем 0xb8000, да и если написать заменитель загрузочного сектора на ассемблере и писать по тому же адреса, значит дело либо в операционке которая перед тем грузиться, либо в том что компилер коряво компилит, вот я и хочу знать что именно. Потому что писать на ассемблере мне не в кайф.

Автор:  qeos [ 29 ноя 2010, 18:01 ]
Заголовок сообщения:  Re: Текстовый вывод

читай мануал по 8086.. метод адресации

Автор:  tommi-boy [ 29 ноя 2010, 18:30 ]
Заголовок сообщения:  Re: Текстовый вывод

я их прочитал поболее твоего, будут конкретные замечания или нет?

Страница 1 из 2 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/