Сейчас на форуме: zds, UniSoft (+5 невидимых)

 eXeL@B —› Программирование —› Текстовый режим без API
Посл.ответ Сообщение

Ранг: 50.0 (постоянный), 31thx
Активность: 0.090.1
Статус: Участник

Создано: 03 декабря 2011 20:54
· Личное сообщение · #1

Хочу делать тестовый вывод из дрова. По некоторым причинам апи неприемлемо. Нужно просто переключить видяху в текст.mode3 и писать напрямую в видеопамять. Не получается блять. рипнул код из биоса, он под виндой не работает. Т.е. работает, переключает в текст, но вывода нет. Единственный рабочий вариант - переключаться в RM, звать биос, потом обратно. Это нифига неправильно.
Где-то косяк. Кто прогал видео, поделитесь.




Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 03 декабря 2011 21:12
· Личное сообщение · #2

spinz пишет:
Не получается блять. рипнул код из биоса, он под виндой не работает.

емуль x86 тяни в дров, и под емулем пускай свой биос
тогда все заработает
ну либо виндовый x86 емуль зови
в видео дрове он помоему есть или в hal, не помню уже



Ранг: 50.0 (постоянный), 31thx
Активность: 0.090.1
Статус: Участник

Создано: 03 декабря 2011 21:22
· Личное сообщение · #3

reversecode пишет:
емуль x86 тяни в дров, и под емулем пускай свой биос
тогда все заработает
ну либо виндовый x86 емуль зови
в видео дрове он помоему есть или в hal, не помню уже

повторю, нужно без винды, чистым I/O.




Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 03 декабря 2011 21:28 · Поправил: reversecode
· Личное сообщение · #4

и что бы без релоков?
ну если биос клацнул уже видео в текстовый режим
пробуй писать что то в память текстового режима в реал моде она b800
в протекте сам пересчитай где это будет, я хз, там же еще страничная адрессация будет
кстати! bootvid.dll же это и делал-делает?!

но самый правильный способ это притянуть какойто емулятор x86 кода в ядро
на С языке их полно x86emu например есть в гугле

ps исходники bootvid вроде должны быть в reactos
либо дизассемблируй биос и вытяни и перепиши код int 10h из реал в пм-под

ах нет, bootvid кажется перед выводом уже прыгает обратно в RM
а адресс b800 может быть фиг знает где

поэтому
1) разбирать код биоса на int 10h
или
2) тянуть сишный (или переписывать на asm) x86 емулятор и пускать код биоса под ним



Ранг: 50.0 (постоянный), 31thx
Активность: 0.090.1
Статус: Участник

Создано: 03 декабря 2011 21:57
· Личное сообщение · #5

Поясню. рип-код из биоса под виндой не работает. Я трейсил банально весь I/O в RM и скидывал в лог. Потом этот ио перекинул в свой кодес под вынью. С учетом префиксов.
Этот кодес работает под рм (досом), но не работает в винде. Где-то нюанс. Причем если винду переклбючить реалмоду и звать биос, то опятьже все работает. Какие-то нюансы в графике. На васме когда то похожие темы бодали BC и кто-то еще. Киньте в личку кусочек, если есть что кинуть ))




Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 03 декабря 2011 22:04 · Поправил: reversecode
· Личное сообщение · #6

там ньюанс может быть только один - порты ввода вывода
либо они директ,
либо отмапленные IO адрессное пространство видухи
поэтому ничего и не пашет, ты обращаешься с портами ввода вывода не видухи скорее всего

я кстати забыл уточнить
что бы в емуль x86+сграбленный биос под ним пошел(заработал)
в емуль нужно поставить калбеки на IO портов byte/word/dword R/W
и вот эти обращения IO портов должны быть предварительно отмапленые в адрессное пространство видухи или биоса (вот здесь уже чать подзабыл) по которому он должен располагатся в ПМ режиме с учетом РМ



Ранг: 50.0 (постоянный), 31thx
Активность: 0.090.1
Статус: Участник

Создано: 03 декабря 2011 22:17
· Личное сообщение · #7

VGA-порты винда не перемапливает.
у мну есть мысль что, косяк связан с цветовым слоем и знакогенераторм.
вынь, как я понимаю, знакогенератор перегружает. я не понимаю как биос делает это обратно (или не делает???)




Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 03 декабря 2011 22:26
· Личное сообщение · #8

начинаю понемногу вспоминать
VGA порты считаются стандартными и каждая видуха должна по стандарту их поддерживать
на практике насколько я помню все иначе
вектор int 10h, в обычном мозерборадр биосе перебиватся на адресс видео биоса в самой видухе(после инициализации материнки+видео)
и дальнейший алого по работе с видео на int 10h стандартный
таким образом производители видео ушли от стандартных портов

насчет знакогенератора не помню
надо смотреть по bootvid, там вроде какойто статический при инициализации есть...
но это в старой XP... как там в висте и 7 уже хз..

во всяком случае знакогенератор уже в видео биосе поскольку int 10h перебит(читаем выше)
и перебивание его виндой мне кажется надуманым...
там кстати в видео биосе есть еще entry называемый "инициализацией"
который сбрасывает все настройки видео для того что бы int10h нормально работала



Ранг: 50.0 (постоянный), 31thx
Активность: 0.090.1
Статус: Участник

Создано: 13 декабря 2011 04:54
· Личное сообщение · #9

Оказалось все просто. Вынь действительно херит второй цветовой слой, где расположены фонты знакогенератора. Достаточно было подгрузить туда свои фонты и все заработало.




Ранг: 568.2 (!), 465thx
Активность: 0.550.57
Статус: Участник
оптимист

Создано: 13 декабря 2011 05:26
· Личное сообщение · #10

spinz
Ждём новую флешку-вымогалку =)

-----
Чтобы правильно задать вопрос, нужно знать большую часть ответа. Р.Шекли.


| Сообщение посчитали полезным: SReg, DimitarSerg, Lacoste
 eXeL@B —› Программирование —› Текстовый режим без API
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати