Не вопрос, по моему вполне по теме.
CGA/MDA/HGC test
- KennyDies
- Advanced Member
- Сообщения: 552
- Зарегистрирован: 25.05.2008,16:31
- Откуда: ταξινομημένο
- Благодарил (а): 1 раз
- Поблагодарили: 3 раза
-
Вклад в сообщество
CGA/MDA/HGC test
Оставлю это тут, вдруг кому пригодится.
*** Как определить видеоподсистемы ПК. ***
*******************************************************************************
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
4. Так можно определить адаптер/монитор в старых системах: https://stanislavs.org/helppc/int_10-1a.html
BL – первичный адаптер и монитор
BH – вторичный адаптер и монитор
Монохромный совместимый с 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
*******************************************************************************
*** Как определить видеоподсистемы ПК. ***
*******************************************************************************
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…
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
Офтопик
https://www.phantom.sannata.org/viewtop ... 16#p747116
"Но в MASM принято оформлять подпрограмму как proc near(far)/endp
и жаль что разработчики не предусмотрели локализацию меток."
Не ясно, что имеется ввиду.
"Но в MASM принято оформлять подпрограмму как proc near(far)/endp
и жаль что разработчики не предусмотрели локализацию меток."
Не ясно, что имеется ввиду.
CGA/MDA/HGC test
Может локальные метки?
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
Офтопик
BolenB, спасибо за комментарий, ^^^это понятно и мне и i8088.
А не ясно - чем i8088 ^^^это не устраивает в MASM?
А возможно и Вас, можете написать?
А не ясно - чем i8088 ^^^это не устраивает в MASM?
А возможно и Вас, можете написать?
-
i8088
- Advanced Member
- Сообщения: 4865
- Зарегистрирован: 30.01.2015,17:06
- Откуда: г. Баку, Азербайджан
- Поблагодарили: 48 раз
-
Конкурсы
Вклад в сообщество
CGA/MDA/HGC test
Я проверил Вашу информацию! До MASM 5 это не работает. В MASM 6 работает, но странно.
Любые метки внутри процедур считаются локальными, но только если транслировать с ML.EXE.
Если же по классике (как я привык работать) с MASM.EXE - то получаем ошибку о переопределенных
метках. Причем версию ассемблера ML сообщает ровно ту же. Проверено с MASM 6.00 и 6.11