CGA/MDA/HGC test

Разработка приложений под ретро системы
i8088
Advanced Member
Сообщения: 4865
Зарегистрирован: 30.01.2015,17:06
Откуда: г. Баку, Азербайджан
Поблагодарили: 48 раз

Конкурсы

Вклад в сообщество

CGA/MDA/HGC test

Сообщение i8088 » 06.09.2023,12:57

ATauenis писал(а): 05.09.2023,23:02 Извиняюсь, что замусорил тему.
Не вопрос, по моему вполне по теме.

Аватара пользователя
KennyDies
Advanced Member
Сообщения: 552
Зарегистрирован: 25.05.2008,16:31
Откуда: ταξινομημένο
Благодарил (а): 1 раз
Поблагодарили: 3 раза

Вклад в сообщество

CGA/MDA/HGC test

Сообщение KennyDies » 25.12.2024,11:13

Оставлю это тут, вдруг кому пригодится.
*** Как определить видеоподсистемы ПК. ***

*******************************************************************************
1. Первичный тип подсистемы можно узнать, считав из BIOS data area:
0x0040:0x0063 word Base port address for active 6845 CRT controller 3B4h = mono, 3D4h = color
*******************************************************************************
2. Так можно определить наличие цветной/моно подсистемы и их комбинации.
Чтобы убедиться что видео-подсистема установлена можно записать/считать значение от 0 до 15
в порт 0x3D4/0x3B4, адрес 0x0E/0x0F, предварительно сохранив исходные значения.
out 0x3D4, 0x0E
out 0x3D5,0x05
затем
out 0x3d4, 0x0E
inp 0x3d5 должно быть = 0x05, также с портом 0x3b4?.

Ещё можно почитать регистр статуса 0x3DA (color)/0x3BA (mono) бит 1, он должен меняться.
Bit 0: Retrace. This is 1 if the horizontal retrace is active.

Ещё можно записать/считать в любом текстовом режиме из видеобуфера по адресу 0xB000:0 (mono), 0xB800:0 (color) любое значение word/byte, сохранив исходное.
*******************************************************************************
3. Комбинацию подсистем можно узнать, если одна из них EGA (MCGA?, VGA?) считав из BIOS data area:
0x0040:0x0088 byte положения EGA DIP switches
ON ╓4┬3┬2┬1╖ Primary MDA
 0 ║▀│▀│▀│▀║ Secondary EGA connected to 40x25 color monitor
   ╙─┴─┴─┴─╜
ON ╓4┬3┬2┬1╖ Primary MDA
 1 ║▀│▀│▀│▄║ Secondary EGA connected to 80x25 color monitor
   ╙─┴─┴─┴─╜
ON ╓4┬3┬2┬1╖ Primary MDA
 2 ║▀│▀│▄│▀║ Secondary EGA connected to enh. color monitor (CGA emulation)
   ╙─┴─┴─┴─╜
ON ╓4┬3┬2┬1╖ Primary MDA
 3 ║▀│▀│▄│▄║ Secondary EGA connected to enh. monitor (best resolution)
   ╙─┴─┴─┴─╜
ON ╓4┬3┬2┬1╖ Primary CGA connected to 40x25 color monitor
 4 ║▀│▄│▀│▀║ Secondary EGA connected to Monochrome monitor
   ╙─┴─┴─┴─╜
ON ╓4┬3┬2┬1╖ Primary CGA connected to 80x25 color monitor
 5 ║▀│▄│▀│▄║ Secondary EGA connected to Monochrome monitor
   ╙─┴─┴─┴─╜
ON ╓4┬3┬2┬1╖ Primary EGA connected to 40x25 color monitor
 6 ║▀│▄│▄│▀║ Secondary MDA
   ╙─┴─┴─┴─╜
ON ╓4┬3┬2┬1╖ Primary EGA connected to 80x25 color monitor
 7 ║▀│▄│▄│▄║ Secondary MDA
   ╙─┴─┴─┴─╜
ON ╓4┬3┬2┬1╖ Primary EGA connected to enhanced color monitor (CGA emulation)
 8 ║▄│▀│▀│▀║ Secondary MDA
   ╙─┴─┴─┴─╜
ON ╓4┬3┬2┬1╖ Primary EGA connected to enh. color monitor (best resolution)
 9 ║▄│▀│▀│▄║ Secondary MDA
   ╙─┴─┴─┴─╜
ON ╓4┬3┬2┬1╖ Primary EGA connected to Monochrome monitor
10 ║▄│▀│▄│▀║ Secondary CGA connected to 40x25 color monitor
   ╙─┴─┴─┴─╜
ON ╓4┬3┬2┬1╖ Primary EGA connected to Monochrome monitor
11 ║▄│▀│▄│▄║ Secondary CGA connected to 80x25 color monitor
   ╙─┴─┴─┴─╜
 	 	 	 	0000b = MDA/color 40x25
 	 	 	 	0001b = MDA/color 80x25
 	 	 	 	0010b = MDA/high-resolution 80x25
 	 	 	 	0011b = MDA/high-resolution enhanced
 	 	 	 	0100b = CGA 40x25/monochrome
 	 	 	 	0101b = CGA 80x25/monochrome

 	 	 	 	0110b = color 40x25/MDA
 	 	 	 	0111b = color 80x25/MDA
 	 	 	 	1000b = high-resolution 80x25/MDA
 	 	 	 	1001b = high-resolution enhanced/MDA
 	 	 	 	1010b = monochrome/CGA 40x25
 	 	 	 	1011b = monochrome/CGA 80x25
*******************************************************************************
4. Так можно определить адаптер/монитор в старых системах: https://stanislavs.org/helppc/int_10-1a.html
BL – первичный адаптер и монитор
BH – вторичный адаптер и монитор
	 FF  Unrecognized video system
	 00  No display
	 01  MDA with monochrome display
	 02  CGA with color display
	 03  Reserved
	 04  EGA with color display
	 05  EGA with monochrome display
	 06  Professional graphics controller
	 07  VGA with analog monochrome display
	 08  VGA with analog color display
	 09  Reserved
	 0A  MCGA with digital color display
	 0B  MCGA with analog monochrome display
	 0C  MCGA with analog color display
К EGA, например, есть 4 варианта подключения 3-x мониторов
Монохромный совместимый с IBM 5151, режим 350строк, 50Hz, 18KHz, 2 градации яркости, TTL
Цветной совместимый с IBM 5153, режим 200строк, 60Hz, 14.3KHz, 16 цветов, TTL
Цветной совместимый с IBM 5154, режим 200строк, 60Hz, 14.3KHz, 16 цветов, TTL
Цветной совместимый с IBM 5154, режим 350строк, 60Hz, 21.85khz, 16 цвета из палитры в 64 цветов, TTL.
*******************************************************************************
5. Как отличить адаптер EGA от SuperEGA 640x480 - ну тут всё просто -
SuperEGA с цветным монитором умеет видеорежим 0x12h 640x480 16цв.
установить видеорежим 0x12
https://stanislavs.org/helppc/int_10-0.html
и убедиться что установка прошла успешно, AL = 0x12
https://stanislavs.org/helppc/int_10-f.html
*******************************************************************************
… As water spins in circles twice
Spiders, snakes and the little mice
Get twisted around and tumble down
When Nature calls, we all shall drown…

Dinozavr
Advanced Member
Сообщения: 641
Зарегистрирован: 29.12.2018,04:53
Благодарил (а): 1 раз
Поблагодарили: 4 раза

CGA/MDA/HGC test

Сообщение Dinozavr » 26.12.2024,09:25

Офтопик
https://www.phantom.sannata.org/viewtop ... 16#p747116
"Но в MASM принято оформлять подпрограмму как proc near(far)/endp
и жаль что разработчики не предусмотрели локализацию меток."
Не ясно, что имеется ввиду.
Example.7z
(2.85 КБ) 135 скачиваний

BolenB
Newbie
Сообщения: 36
Зарегистрирован: 28.04.2023,08:18
Откуда: Россия

CGA/MDA/HGC test

Сообщение BolenB » 26.12.2024,10:38

Dinozavr писал(а): 26.12.2024,09:25 Не ясно, что имеется ввиду.
Может локальные метки?
MASM автоматически различает метки, находящиеся в пределах процедуры, и считает их локальными, чтобы такая метка стала глобальной ее нужно метить так имя_метки:: также локальными считаются метки @@ их может быть в тексте программы десяток штук, переходы к таким меткам jmp @f (переход к метке @@ вперед) и jmp @b (переход к метке @@ назад)

В TASM по умолчанию метки считаются глобальными. Локальные метки должны иметь перед именем обозначение @@. Кроме того, в начале программы следует поставить директиву LOCALS.

В FASM локальная метка — это метка, имя которой начинается с точки. Во время генерации кода FASM автоматически добавляет к имени локальной метки имя последней объявленной «глобальной» метки. Имена локальных меток могут повторяться, если между ними есть хотя бы одна «глобальная» метка.
Локальные метки в стиле MASM
В MASM 5.1 и 5.2 предусмотрены специальные идентификаторы,
которые вы можете использовать для управления областью действия
ближних меток в небольшом диапазоне строк. Это идентификаторы @@,
@F и @B.
Когда вы описываете @@, как ближнюю метку, используя двоето-
чие (:), то определяете уникальный идентификатор вида @@xxxx (где
xxxx - это шестнадцатиричное число). @B ссылается на последний
определенный таким образом идентификатор. @F ссылается на следую-
щий идентификатор с определением такого вида.

Dinozavr
Advanced Member
Сообщения: 641
Зарегистрирован: 29.12.2018,04:53
Благодарил (а): 1 раз
Поблагодарили: 4 раза

CGA/MDA/HGC test

Сообщение Dinozavr » 26.12.2024,15:23

Офтопик
BolenB, спасибо за комментарий, ^^^это понятно и мне и i8088.
А не ясно - чем i8088 ^^^это не устраивает в MASM?
А возможно и Вас, можете написать?

i8088
Advanced Member
Сообщения: 4865
Зарегистрирован: 30.01.2015,17:06
Откуда: г. Баку, Азербайджан
Поблагодарили: 48 раз

Конкурсы

Вклад в сообщество

CGA/MDA/HGC test

Сообщение i8088 » 05.02.2025,08:34

Dinozavr писал(а): 26.12.2024,15:23 А не ясно - чем i8088 ^^^это не устраивает в MASM?
Я проверил Вашу информацию! До MASM 5 это не работает. В MASM 6 работает, но странно.
Любые метки внутри процедур считаются локальными, но только если транслировать с ML.EXE.
Если же по классике (как я привык работать) с MASM.EXE - то получаем ошибку о переопределенных
метках. Причем версию ассемблера ML сообщает ровно ту же. Проверено с MASM 6.00 и 6.11

Ответить