OSDev

для всех
Текущее время: 17 окт 2017, 12:51

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




Начать новую тему Ответить на тему  [ Сообщений: 7 ] 
Автор Сообщение
 Заголовок сообщения: Вывод символов в VESA 115h (800*600*16M)
СообщениеДобавлено: 23 июл 2014, 11:04 

Зарегистрирован: 10 апр 2014, 17:12
Сообщения: 68
в борще работает, а в qemu нет. да собственно как и в других виртуалках.
Код:
initTTY:
   pusha
   mov esi, [videoModeInfo]

   mov eax, dword [esi+28h]
   mov [LFB], eax
   mov edi, eax
   mov al, [esi+19h]
   cmp al, 24
   jne @f
   mov [bytesPerPixel], 3
   mov [bytesPerLine], 3*800
   jmp .detected
@@:
   mov [bytesPerPixel], 4
   mov [bytesPerLine], 4*800
.detected:
   pushw 'W'
   call putChar
   popa
   ret
   
putChar:
   push ebp
   mov ebp, esp
   pusha
   
   mov esi, font
   movzx eax, word [ebp+8]
   shl eax, 4
   add esi, eax
   mov ecx, 16
   mov edx, [LFB]
   mov eax, 0xFFFFFF
.lines:
   mov bl, byte [esi]
   push ecx
   mov ecx, 8
   mov edi, edx
   .columns:
      shl bl, 1
      jnc @f
      mov [edi], eax
   @@:
      add edi, [bytesPerPixel]
      loop .columns
   add edx, [bytesPerLine]
   pop ecx
   inc esi
   loop .lines
   
   popa
   leave
   ret 2
   
LFB dd ?
bytesPerPixel dd ?
bytesPerLine dd ?   
tab db 4
backgroundColor db 0
simbolsColor db 1111b
cursorX dw 0
cursorY dw 0
font:
   include 'font.inc'

проблема в следующем: имеются три типа режимов: 256 цветов, 64К и 16М. при включении режима в 256 цветов работают только 2 виртуалки: это борщ и кему. но у них есть какие-то глюке в выводе цветов. в борще выводится белый цвет, а в кему какой-то бело-синий. затем я решил заюзать TrueColor и 16М цветов. в борще сей код пашет а в Qemu нет, хотя видеорежим устанавливается.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вывод символов в VESA 115h (800*600*16M)
СообщениеДобавлено: 23 июл 2014, 11:09 

Зарегистрирован: 10 апр 2014, 17:12
Сообщения: 68
однако просто линия
Код:
mov eax, 0xFFFFFF
mov edi, [LFB]
mov ecx, 800
@@:
   mov [edi], eax
   add edi, 3
   loop @b

выводится норм в обеих виртуалках. соответственно формат пикселя и там и там 8:8:8. я бы мог подумать на неверные вычисления, да только в борще то пашет ._.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вывод символов в VESA 115h (800*600*16M)
СообщениеДобавлено: 23 июл 2014, 15:10 

Зарегистрирован: 21 сен 2007, 17:24
Сообщения: 1025
Откуда: Балаково
У тебя неправильный алгоритм нахождения заданного видеорежима. Это должен быть цикл по всем имеющимся режимам с выборкой по заданным параметрам, а у тебя проверяется один единственный видеорежим. Так требуемый режим не может быть найден.
Список режимов берётся от функции AX=4F00h "GET SuperVGA INFORMATION", из полученного буфера берётся дальний указатель на смещении 0Eh.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вывод символов в VESA 115h (800*600*16M)
СообщениеДобавлено: 23 июл 2014, 15:40 

Зарегистрирован: 10 апр 2014, 17:12
Сообщения: 68
так-то я про поиск знаю, но режим 800*600*16М точно присутствует и я не стал искать нужный. в общем баг каким-то магическим образом пропал. мб я что-то подправил и не помню, но проблема решена. тогда есть другой вопрос: как достучаться до оперативки видеокарты? ато нужно много-много памяти для хранение экрана, а я их планирую несколько. а так можно было бы размещать их прямо в видюхе.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вывод символов в VESA 115h (800*600*16M)
СообщениеДобавлено: 23 июл 2014, 15:48 

Зарегистрирован: 21 сен 2007, 17:24
Сообщения: 1025
Откуда: Балаково
Нет проблем - адрес видеобуфера это начало всей имеющейся памяти, адресоваться к ней можно линейно. Данные о размерах поищи в информационном блоке. Например "количество буферов" можно умножить на размер самого буфера. Но запись (и особенно чтение) видеопамяти гораздо медленней оперативной компьютера, поэтому тормоза будут приличные.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вывод символов в VESA 115h (800*600*16M)
СообщениеДобавлено: 23 июл 2014, 16:06 

Зарегистрирован: 10 апр 2014, 17:12
Сообщения: 68
т.е. лучше все-таки писать в оперативку?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вывод символов в VESA 115h (800*600*16M)
СообщениеДобавлено: 23 июл 2014, 16:40 

Зарегистрирован: 21 сен 2007, 17:24
Сообщения: 1025
Откуда: Балаково
Оперативная память конечно лучше.


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

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


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

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


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

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