OSDev

для всех
Текущее время: 27 апр 2024, 17:31

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 7 ] 
Автор Сообщение
 Заголовок сообщения: Ошибка при сдвиге курсора
СообщениеДобавлено: 24 ноя 2013, 16:03 

Зарегистрирован: 24 ноя 2013, 15:59
Сообщения: 40
Не работает функция сдвига аппаратного курсора. Делаю так:
Код:
static void move_cursor()
{
   u16int cursorLocation = cursor_y * width + cursor_x;
   outb(0x3D4, 14);
   outb(0x3D5, cursorLocation >> 8);
   outb(0x3D4, 15);
   outb(0x3D5, cursorLocation);
}

При попытке запуска в QEMU курсор находится в неправильном месте. Ошибка:
Код:
dma: command d5 not supported
dma: unregistered DMA channel used nchan=1 dma_pos=0 dma_len=54529
dma: unregistered DMA channel used nchan=1 dma_pos=0 dma_len=54529
dma: unregistered DMA channel used nchan=1 dma_pos=0 dma_len=54529
dma: unregistered DMA channel used nchan=1 dma_pos=0 dma_len=54529
dma: unregistered DMA channel used nchan=1 dma_pos=0 dma_len=54529
dma: unregistered DMA channel used nchan=1 dma_pos=0 dma_len=54529
dma: unregistered DMA channel used nchan=1 dma_pos=0 dma_len=54529
dma: unregistered DMA channel used nchan=1 dma_pos=0 dma_len=54529
dma: unregistered DMA channel used nchan=1 dma_pos=0 dma_len=54529


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ошибка при сдвиге курсора
СообщениеДобавлено: 24 ноя 2013, 16:22 

Зарегистрирован: 26 мар 2012, 17:32
Сообщения: 209
Как будто бы, выглядит правильно (ср. с http://wiki.osdev.org/Text_Mode_Cursor)
Реализацию outb покажи, я бы на месте компилятора ругнулся typemismatch на вот это: outb(0x3D5, cursorLocation);


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ошибка при сдвиге курсора
СообщениеДобавлено: 24 ноя 2013, 19:02 
Аватара пользователя

Зарегистрирован: 16 май 2007, 23:46
Сообщения: 1126
Глобальные переменные зло.
А так да надо outb - посмотреть.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ошибка при сдвиге курсора
СообщениеДобавлено: 24 ноя 2013, 20:15 

Зарегистрирован: 24 ноя 2013, 15:59
Сообщения: 40
outb я скопипастил из linux 0.01:
Код:
#define outb(value,port) \
__asm__ ("outb %%al,%%dx"::"a" (value),"d" (port))


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ошибка при сдвиге курсора
СообщениеДобавлено: 24 ноя 2013, 20:28 
Аватара пользователя

Зарегистрирован: 16 май 2007, 23:46
Сообщения: 1126
Нашли откуда копировать. :lol:
Ну собственно догадки подтвердились. Порядок аргументов перепутан. В объявлении функции у вас один порядок аргументов, а вызываете вы с другим.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ошибка при сдвиге курсора
СообщениеДобавлено: 25 ноя 2013, 14:30 

Зарегистрирован: 24 ноя 2013, 15:59
Сообщения: 40
спасибо, никогда бы не заметил


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ошибка при сдвиге курсора
СообщениеДобавлено: 25 ноя 2013, 15:23 

Зарегистрирован: 28 окт 2007, 18:33
Сообщения: 1418
Если ничего не помогает, разумно трассировать выполнение программы на уровне машинных команд (ассемблера). Там сразу бы всплыла неправильная передача параметров.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 7 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 19


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB