Подскажите, плз, как в протектед-мод управлять курсором ввода? Видимо, это нужно делать через порты. Но если есть другие решения, буду рад узнать. Через V86 и int10h не очень хочется - слишком навороченно для такой простой задачи. Хорошо бы найти какой-нибудь обширный хелп по портам архитектуры PC
Что касается видео одаптора, то: http://www.codenet.ru/progr/video/egavga/ Если будут вопросы распишу подробнее. Обширного хэлпа нет. А вобще есть Ralf_Brown_2000.
Спасибо за ссылку и за оперативность. А что означают знаки вопроса в номерах портов( напр, в оглавлении: Порт 3?5h: Регистр Старшего Адреса Курсора (Индекс eh) (Cursor Location High Register) )? Это какие-то обозначения, или их значения могут варьироваться?
3?5 имеет два варианта. 3B5 для монохромных режимов и 3D5 для цветных. В твоем случае наверное последнее.
Этот вопрос, скорее, по языку С Есть такая global функция на nasm: Код (Text): port_in_char: mov dx,[esp+4] in al,dx retn И на С: Код (Text): char port_in_char(short port); static int get_cursor() { // return cursor; port_out_char(CRTC_ADDRESS_PORT,CURSOR_HI_REGISTER); int x = (int)port_in_char(CRTC_REGISTER_PORT); port_out_char(CRTC_ADDRESS_PORT,CURSOR_LO_REGISTER); return (x<<8) + (int)port_in_char(CRTC_REGISTER_PORT); } последняя глючит на переполнениях: выдаёт значение, которое отличается от истинного на величину, кратную 256(напр, 0, -256). Ну никак не пойму, почему... Кстати, аналогичная функция set_cursor(int) работает нормально, т.е. константы все правильные
функция get_cursor() должна возвращать short, старший байт которого есть результат первого вызова port_in_char, а младший - соответственно, результат второго вызова той же функции функция char port_in_char(int port) должна бы, вроде, возвращать значение char из портa port. port_out_char работает нормально - проверено
Если кому-либо интересно, то я уже нашел решение: port_in_char возвращал signed char, поэтому, когда старший бит был установлен, его неявное преобразование к int давало число на 256 меньшее, чем следовало