Форум программистов, компьютерный форум, киберфорум
Низкоуровневое программирование
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/8: Рейтинг темы: голосов - 8, средняя оценка - 4.50
7 / 7 / 8
Регистрация: 19.06.2016
Сообщений: 134
1

Узнать поддерживаемые режимы дисплея в защищённом режиме

28.05.2018, 14:31. Показов 1642. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть ли способ узнать поддерживаемые режимы дисплея на ассемблере в защищённом режиме. Хочется достать инфу типа (Символов:Строк*(битность цвет))
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.05.2018, 14:31
Ответы с готовыми решениями:

Как узнать поддерживаемые монитором разрешения?
Нужно узнать режимы поддерживаемые монитором (разрешение\частота) Все примеры кода которые находил...

Память в защищенном режиме
Всем доброго дня! Я, наконец, сдал основные экзамены и теперь снова могу заняться столь интересным...

Прерывания в защищенном режиме
Помогите пожалуйста разобраться с прерываниями в защищенном режиме.Какие обращения к памяти есть....

Работа с файлами в защищенном режиме
Здравствуйте, я взялся писать ОС, уже готов загрузчик переводящий в защищенный режим процессор, IDT...

3
Эксперт Hardware
Эксперт Hardware
6103 / 2347 / 390
Регистрация: 29.07.2014
Сообщений: 3,108
Записей в блоге: 4
28.05.2018, 19:32 2
Лучший ответ Сообщение было отмечено Mikl___ как решение

Решение

Цитата Сообщение от DARKPALADIN Посмотреть сообщение
узнать поддерживаемые режимы дисплея на ассемблере в защищённом режиме.
без разницы, где ты находишься - хоть в реальном(RM), хоть в защищённом(PM) режиме.
ОС всё равно считывает поддерживаемые режимы из VGA-BIOS.
Из доса - можешь получить чз fn.VESA=4F00h, из винды - можно считать с реестра:
Код
INT-10h, АX = 4F00h - Получить общую SVGA-информацию
----------------------------------------------------
   Вход: AX = 4F00h
         ES:DI = адрес буфера (512 байт).
  Вывод: AX = 004Fh, если данные записаны в буфер,
         АН = 01h,   если произошла ошибка.
Чтобы получить все данные,
нужно в голову буфера предварительно записать строку 'VBE2':
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
; fasm-code
;----------
org  100h
jmp  start
 
align     16
vgaBuf    db    'VBE2',512 dup(0)      ; буфер для выхлопа
 
start:    mov   ax,4F00h
          mov   di,vgaBuf
          int   10h
ret
Вот-что получил я в буфер на своей машине (у тебя будет отличаться)..
Описание полей буфера найдёшь в сети, поддерживаемые режимы размером слово (у меня 27-штук), начинаются с адреса 0e81:0150 и заканчиваются маркером(FFFF):
Код
->d 110
0E81:0110  56 45 53 41 00 03 10 02 81 0E 01 00 00 00 50 01  VESA ♥►☻Б♫☺   P☺
0E81:0120  81 0E 00 0F 00 01 52 02 81 0E 64 02 81 0E 97 02  Б♫ ☼ ☺R☻Б♫d☻Б♫Ч☻
0E81:0130  81 0E 00 00 00 00 00 00 00 00 00 00 00 00 00 00  Б♫
0E81:0140  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0E81:0150  60 01 61 01 62 01 63 01 64 01 65 01 66 01 67 01  `☺a☺b☺c☺d☺e☺f☺g☺
0E81:0160  68 01 3C 01 4D 01 5C 01 3A 01 4B 01 5A 01 07 01  h☺<☺M☺\☺:☺K☺Z☺.☺
0E81:0170  1A 01 1B 01 05 01 17 01 18 01 12 01 14 01 15 01  →☺←☺♣☺↨☺↑☺↕☺¶☺§☺
0E81:0180  01 01 03 01 11 01 FF FF 00 00 00 00 00 00 00 00  ☺☺♥☺◄☺**
0E81:0190  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0E81:01A0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0E81:01B0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0E81:01C0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0E81:01D0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0E81:01E0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0E81:01F0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0E81:0200  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0E81:0210  49 6E 74 65 6C 28 72 29 20 38 32 39 34 35 47 20  Intel(r) 82945G
0E81:0220  43 68 69 70 73 65 74 20 46 61 6D 69 6C 79 20 47  Chipset Family G
0E81:0230  72 61 70 68 69 63 73 20 43 68 69 70 20 41 63 63  raphics Chip Acc
0E81:0240  65 6C 65 72 61 74 65 64 20 56 47 41 20 42 49 4F  elerated VGA BIO
0E81:0250  53 00 49 6E 74 65 6C 20 43 6F 72 70 6F 72 61 74  S Intel Corporat
0E81:0260  69 6F 6E 00 49 6E 74 65 6C 28 72 29 20 38 32 39  ion Intel(r) 829
0E81:0270  34 35 47 20 43 68 69 70 73 65 74 20 46 61 6D 69  45G Chipset Fami
0E81:0280  6C 79 20 47 72 61 70 68 69 63 73 20 43 6F 6E 74  ly Graphics Cont
0E81:0290  72 6F 6C 6C 65 72 00 48 61 72 64 77 61 72 65 20  roller Hardware
0E81:02A0  56 65 72 73 69 6F 6E 20 30 2E 30 00 00 00 00 00  Version 0.0
0E81:02B0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0E81:02C0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0E81:02D0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0E81:02E0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0E81:02F0  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0E81:0300  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
->
1
Модератор
Эксперт по электронике
8476 / 4335 / 1642
Регистрация: 01.02.2015
Сообщений: 13,461
Записей в блоге: 8
28.05.2018, 22:18 3
Не очень хорошо помню этот вопрос.
В защищённом режиме SVGA предоставляет сервис (функции) не через прерывания, а через точку входа.
Т.е. регистры заполняются как для прерывания SVGA (int 10h), но int не вызывается, а вызывается точка входа в сервис SVGA через call.

И уже тогда можно смотреть параметры видеорежимов, как бы вызывая эту функцию (4200h).

Но детали я уже не помню. Возможно, читал об этом в книге Владимира Кулакова. Там и примеры были.

Добавлено через 1 минуту
Но это касается только SVGA режимов. Для остальных - просто запоминают константы.
2
Эксперт Hardware
Эксперт Hardware
6103 / 2347 / 390
Регистрация: 29.07.2014
Сообщений: 3,108
Записей в блоге: 4
29.05.2018, 12:15 4
Цитата Сообщение от ФедосеевПавел Посмотреть сообщение
В защищённом режиме SVGA предоставляет сервис не через прерывания, а через точку входа.
..глючный подход. (как и все сервисы защищённой моды)
Точку входа в РМ-функции, VESA возвращает 4F0Ah - у меня последний VBE3, и выдаёт ошибку:
Код
В.Кулаков. Программирование на аппаратном уровне
------------------------------------------------
int-10h. Получить таблицу доступа к интерфейсу защищенного режима.
   Вход: АХ = 4F0Ah
         ВХ = 00h
  Выход: АХ = код возврата
         ES:DI = указатель на таблицу доступа к интерфейсу защищенного режима
         СХ = размер таблицы в байтах.
Если-уж находимся в защищённом режиме, то лучше использовать всё-что угодно,
но только не эти/кривые сервисы, тем более что разгребать полученный хлам придётся всю/оставшуюся жизнь. ИМХО..
1
29.05.2018, 12:15
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.05.2018, 12:15
Помогаю со студенческими работами здесь

Размер программы в защищенном режиме
и снова возникли проблемы. Дело в том,что при достижении определенного размера программы,она...

Удаленный доступ в защищенном режиме
Обычный удаленный доступ: Ввожу IP, пользователя и пароль, а затем подключаюсь. Мне не нравится,...

Особые случаи в защищённом режиме
Какие особые случаи и при каких условиях могут возникнуть при выполнении команды FAR JMP dword ptr...

Программирование видеокарты в защищённом режиме
Перерыл пол инета, не нашел ничего. начал изучать assembler не очень давно. книги по...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru