Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.04.2016, 14:07   #1
timcryt
Форумчанин
 
Регистрация: 25.01.2016
Сообщений: 105
По умолчанию Высокие разрешения экрана в DOS

Мне интересно как реализуются высокие разрешения (выше 640x350) экрана и высокие цветовые гаммы (>256 цветов) в DOS на Ассемблере, ведь в BIOS нет таких режимов, а общаться с видеокартой не даёт реальный режим. Но программы не требующие 32-bit расширитель DOS и использует высокие разрешения экрана я видел. Но как они реализуются на ассемблере?

Последний раз редактировалось timcryt; 27.04.2016 в 14:26.
timcryt вне форума Ответить с цитированием
Старый 27.04.2016, 14:26   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

читайте про VESA
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 27.04.2016, 15:17   #3
timcryt
Форумчанин
 
Регистрация: 25.01.2016
Сообщений: 105
По умолчанию

Прочитал, но у меня остались некоторые вопросы: как выводить графику в реальном режиме с VESA, если стандартная функция прерывания 10h SVGA не поддерживает, а прямой доступ к видеопамяти запрещён (ну точнее не разрешён, ведь в реальном режиме можно всё), где компьютер находит столько видео памяти, ведь BIOS резервирует всего 384 Кб памяти, а, например, режим 11Bh требует минимум 3840 Кб (даже если под видеопамять уйдёт вся адресуемая память, ОЗУ просто не хватит).
timcryt вне форума Ответить с цитированием
Старый 27.04.2016, 15:44   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

через режимы длинного адреса можно вполне.
в 32 битную адресацию можно уйти и без готовых расширителей.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 27.04.2016, 16:18   #5
Pavia
Лис
Старожил
 
Аватар для Pavia
 
Регистрация: 18.09.2015
Сообщений: 2,409
По умолчанию

Читаем про VESA
http://www.osp.ru/pcworld/1998/07/159374/
Цитата:
если стандартная функция прерывания 10h SVGA не поддерживает
С чего вдруг не поддерживает? Такое встречается крайне редко 1 из 1000000 если не реже.
Цитата:
а прямой доступ к видеопамяти запрещён (ну точнее не разрешён, ведь в реальном режиме можно всё)
Кто запретил? Как запретил? В ДОС прямой доступ к видеопамяти разрешён. Потому что иначе никак. Или он аппаратно эммулируется.

Цитата:
где компьютер находит столько видео памяти, ведь BIOS резервирует всего 384 Кб памяти
С чего вы взяли, что резервируется?
Не надо путать системную память и видео память. Это два разных устройства.
В 1 мегабайте под BIOS отводится 192 КБ адресов.
128 КБ отводиться под адреса видео памяти.

Видео память компьютер находит где либо(на системной плате, на видео карте или в системной ОЗУ). А далее просто отображает её в адреса с $A0000 по $BFFFF

Цитата:
режим 11Bh требует минимум 3840 Кб (даже если под видеопамять уйдёт вся адресуемая память, ОЗУ просто не хватит).
А под режимы на что? Есть режим LFB и окон. Вот через окна можно работать.
Но лучше через LFB прыгаем в "нериальный" режим процессора. Это промежуточный между реальным и защищенным. И там работаем.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал .

Последний раз редактировалось Pavia; 27.04.2016 в 16:24.
Pavia вне форума Ответить с цитированием
Старый 27.04.2016, 16:32   #6
timcryt
Форумчанин
 
Регистрация: 25.01.2016
Сообщений: 105
По умолчанию

Но как ставить точку через функцию BIOS прерывания 10h если в видеорежиме больше 256 цветов, если под цвет выделен однобайтовый регистр?
timcryt вне форума Ответить с цитированием
Старый 27.04.2016, 16:33   #7
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Сообщение от timcryt Посмотреть сообщение
Но как ставить точку через функцию BIOS прерывания 10h если в видеорежиме больше 256 цветов, если под цвет выделен однобайтовый регистр?
кто сказал что там один байт?
один байт только в опред режимах.
вы хоть формат режима прочитайте.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 27.04.2016, 16:41   #8
timcryt
Форумчанин
 
Регистрация: 25.01.2016
Сообщений: 105
По умолчанию

Цитата:
0cH писать графическую точку
вход: BH = номер видео страницы
DX,CX = строка,колонка
AL = значение цвета
AL - регистр однобайтный.
И ещё, что за такой "нериальный" режим, никогда о таком не слышал: знаю только реаль, защищённый и длинный режимы, ну и виртуальный.
timcryt вне форума Ответить с цитированием
Старый 27.04.2016, 17:00   #9
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Сообщение от timcryt Посмотреть сообщение
AL - регистр однобайтный.
И ещё, что за такой "нериальный" режим, никогда о таком не слышал: знаю только реаль, защищённый и длинный режимы, ну и виртуальный.
вы в видео память только прерываниями писали? О_о
в VESA вы в буфер памяти пишете всегда и сами.

https://ru.wikipedia.org/wiki/Unreal_mode
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 27.04.2016, 17:08   #10
timcryt
Форумчанин
 
Регистрация: 25.01.2016
Сообщений: 105
По умолчанию

Да в видеопамять я писал исключительно с помощью прерывания 10h. Про Unreal Mode понял. Спасибо.
timcryt вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Изменение разрешения экрана sanya_fl Общие вопросы .NET 1 13.09.2011 14:49
Смена разрешения экрана boostman Общие вопросы Delphi 1 05.12.2009 21:47
Изменение разрешения экрана Alex Cones Мультимедиа в Delphi 2 16.04.2009 19:34
Определение разрешения экрана nemoomen Microsoft Office Excel 9 16.03.2009 22:49
Смена разрешения экрана san72 Помощь студентам 3 05.06.2008 12:38