OSDev
http://osdev.su/

Ошибка при сдвиге курсора
http://osdev.su/viewtopic.php?f=6&t=823
Страница 1 из 1

Автор:  Lincor [ 24 ноя 2013, 16:03 ]
Заголовок сообщения:  Ошибка при сдвиге курсора

Не работает функция сдвига аппаратного курсора. Делаю так:
Код:
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

Автор:  Nable [ 24 ноя 2013, 16:22 ]
Заголовок сообщения:  Re: Ошибка при сдвиге курсора

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

Автор:  pavia [ 24 ноя 2013, 19:02 ]
Заголовок сообщения:  Re: Ошибка при сдвиге курсора

Глобальные переменные зло.
А так да надо outb - посмотреть.

Автор:  Lincor [ 24 ноя 2013, 20:15 ]
Заголовок сообщения:  Re: Ошибка при сдвиге курсора

outb я скопипастил из linux 0.01:
Код:
#define outb(value,port) \
__asm__ ("outb %%al,%%dx"::"a" (value),"d" (port))

Автор:  pavia [ 24 ноя 2013, 20:28 ]
Заголовок сообщения:  Re: Ошибка при сдвиге курсора

Нашли откуда копировать. :lol:
Ну собственно догадки подтвердились. Порядок аргументов перепутан. В объявлении функции у вас один порядок аргументов, а вызываете вы с другим.

Автор:  Lincor [ 25 ноя 2013, 14:30 ]
Заголовок сообщения:  Re: Ошибка при сдвиге курсора

спасибо, никогда бы не заметил

Автор:  SII [ 25 ноя 2013, 15:23 ]
Заголовок сообщения:  Re: Ошибка при сдвиге курсора

Если ничего не помогает, разумно трассировать выполнение программы на уровне машинных команд (ассемблера). Там сразу бы всплыла неправильная передача параметров.

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