Вход

Просмотр полной версии : Програмная эмуляция i8086 в ДВК



MM
01.03.2019, 17:53
Собственно вознит такой вопрос :
- насколько сложно сделать базовый эмулятор исполнения 8086 инструкций в МС1201.02, методом интерпретатора ?
Никакое особое быстродействие не требуется.
Конфу АП желательно настраивать предварительно.
Цель - исполнение некотрого текста программ из ПЗУ внешней карты, кратковременное и редкое по частоте вызова.

Желателен вариант для ПЗУ - насколько большой объем кода получится ?

DFM
01.03.2019, 18:37
- насколько сложно сделать базовый эмулятор исполнения 8086 инструкций
Вдруг подойдет:
https://github.com/adriancable/8086tiny
http://8086tiny.freeforums.net/
Еще у меня есть версия 1.30 с более полным исходником на с++, не помню откуда взалась.

DenSam
02.03.2019, 10:53
Особых сложностей в таком эмуляторе нет, объем оценить не могу, не начав писать этот интерпретатор-эмулятор. Вопрос другого плана - каков уровень взаимодействия с "PC"-шным железом ( видеоконтроллер, видео-ОЗУ, чипсет и пр. ) необходим? Ведь "вакуумных" программ под 8086не так много - они все привязаны к различным осям, API которых опять же наверное нужно как-то (прямо или криво ) эмулировать?

troosh
02.03.2019, 14:50
В X Windows разогрев видеокарт на различных экзотический платформах (sparc, poweroc, mips) делают такой вот штукой https://gitlab.freedesktop.org/xorg/xserver/blob/master/hw/xfree86/int10/INT10.HOWTO
Для Radeon-ов не очень актуально, т.к. там в БИОСах уже прожуточный код и небольшой его встроенный интерпретатор для х86, а остальные платформы использую свои реализации этого пи-кода (но не эмулируют уже х86-й код), плюс там много чего в таблицах описано, которые унифицированные для разных видеокарт.

MM
02.03.2019, 16:14
Для чего конкретно нужен интерпретатор - для запуска всяких ISA-16 видеокарт в ДВК, как внешних устройств в АП BS7.

По очень грубым прикидкам , возможно устройство интерпретатора в 16 кбайт ПЗУ и ~128 байт ОЗУ - с некотрой оптимизацией быстродействия.
Если без оптимизации - может и в 8 Кбайт ПЗУ влезет ( 1 команда 8086 ~~~ 1000 команд 1801ВМ3 ).

DenSam
02.03.2019, 16:22
Задача ясна. Мне кажется, можно и плотнее по объему ужаться.
Уже есть рабочее схемотехническое решение по подключению ISA-устройств к МПИ?

MM
02.03.2019, 16:35
Уже есть рабочее схемотехническое решение по подключению ISA-устройств к МПИ?
Пока нет.
Примерные параметры ремаппера ISA-16 на МПИ :
1. Область окна - в районе 175000...175777
2. Область регистров управления окном - 177000...177400 ( несколько регистров ).
На каждое слово в области окна будет своя ячейка СОЗУ с конкретным адресом ISA-16, и ~256 вариантов таких комбинаций ( зависит от емкости СОЗУ ремаппера ) - что бы быстро иметь доступ к 16 метрам АП ISA-16.
Решение громоздкое, но довольно универсальное, может даже поместится на полуплату МПИ.
*
Ну а если совсем по-проще для 1 шт. конкретной видеокарты , например Триадент-9000 - то и ~20 шт.ИС мелкоты хватит, и интерпретатор ( не особо ) нужен.

DenSam
02.03.2019, 17:31
А может тогда ремаппер проще сделать на КР1810ВМ86 ? Эдакая МС1702 для ДВК получится...

svinka
03.03.2019, 14:24
Если взять видеокарточку для которой есть биос в исходничках под свободной лицензией и описание всех регистров то ничего интерпретировать не надо. Цирроз вроде. А если исходничков нет то сдайте такую МСДОСчикам рублей по 300+ на фантомах.

Для текстового режима нужно окно памяти 4кб и окно под регистры байт 16

Для графического режима надо бы 64кб

Из хитростей ВМ2 - словное обращение по нечетному адресу позволяет увеличить адресное пространство в 2 раза; А наличие режима процессора хальт еще в 2 раза

Или приделайте самодельный диспетчер памяти. Как в союз-неоне например

Korchagin
04.03.2019, 00:54
С вычислителями на ВМ3 ISA видеокарту подружить можно, так как память видеокарты в PC начинается сразу после первых 640 кб оперативки и составляет 128 кб + 64 кб на сам биос видеокарты, а комп на ВМ3 в целом эквивалентен компам на первом 80286 6 Мгц. С помощью аппаратных костылей возможна установка портов ввода-вывода на свободные адреса, да и саму память карты можно подвигать по адресному пространству при необходимости. Считаю, что можно обойтись прямым программированием портов ввода-вывода, режим VGA в любом случае будет работать независимо от карты. Но как подружить видеокарту с ВМ2 не представляю - адресная шина урезана.

DenSam
04.03.2019, 09:54
Но этот вариант предполагает написание минимального драйвера vga, вместо массивного и тормозного "интерпретатора", что в целом лучше, и универсальнее ( vga без расширений стандартен и довольно прост в доступе ), как мне кажется. А доступ из АП ВМ2 можно будет организовывать только через специфические регистры, даже в видео-озу.

Hunta
04.03.2019, 10:07
даже в видео-озу.
И, как мне кажется, сразу резко затормозить скорость работы с графикой

troosh
04.03.2019, 10:55
Но этот вариант предполагает написание минимального драйвера vga, вместо массивного и тормозного "интерпретатора", что в целом лучше, и универсальнее ( vga без расширений стандартен и довольно прост в доступе ), как мне кажется.
Скорее все "вместо" не получится, - большинство видеокарт приобретают навык vga совместимости только после того как исполнится их видео Биос (там настраивают чип и контроллер памяти, выбирают через какой вилеовыход выдавать картинку и прочее).

Насчёт скорости - что-то более менее приличное получится если задействовать блиттер карты (2D ускоритель), но у всех он разный - тут уже без драйверов никак.

DenSam
04.03.2019, 11:22
Блиттер карты - это уже svga. Карты vga совместимы на уровне общих ( неспецифических ) регистров, а а вот для инициализации действительно нужен интерпретатор. По МПИ доступ хоть на запись, хоть на чтение долгий, должно не сильно быть тормозным. Вечером попробую прикинуть механизм...

svinka
04.03.2019, 11:51
большинство видеокарт приобретают навык vga совместимости только после того как исполнится их видео Биос (там настраивают чип и контроллер памяти, выбирают через какой вилеовыход выдавать картинку и прочее).
Вот мы и говорим о наличии исходников такого биоса. Есть для Cirrus Logic CL-GD54хх ISA. Написан вроде на Си и легко портируется
По-шерстите по эмуляторам х86 с открытым кодом. Может еще чего найдете

MM
04.03.2019, 13:45
Как вариант использования эмулятора - реализация старинного проекта материнской платы по типу 286 , но с СОЗУ 3 метра и М1801ВМ3А-6.
БИОС должен поддерживать мультикарты и VGA карту. ОС - RT-11 сильно патченная. Все ИС - или Интел-набор, или мелкота. Ну может 588ВН1 для векторных прерываний. Клава - на 8042 и БИОС-обработчике кодов.
По возможностям такой комп был бы примерно как Э-85.
О том, что какие-то игрушки с ИБМ ЭВМ пойдут - скорее всего никакие. А от ДВК - в лучшем случае для дисплея 15-ИЭ-хх.

Отмечу, что кроме тополога, для разработки такого монстрика понадобится квалифицированный программер БИОСа.
Задачи программера :
1. Сделать из 8042 "программную клаву 15-ВВ-097"
2. Справиться с мультикартой
3. Разработать систему меню БИОСа.

DenSam
04.03.2019, 14:17
Мда, это мощный замах. Тут интерпретатором кода 8086 не отделаешься.
Я рассматриваю вопрос просто в подключении стандартных ISA16 VGA-карт и работе с ними из кода pdp-11. Интерпретатор 8086 в таком случае нужен будет только для выполнения видео-BIOS. Да, кстати, подскажите кто знает, VGA-шный BIOS может иметь в своем коде инструкции 80286?

Korchagin
05.03.2019, 09:33
Видите ли, работа с аппаратными портами видеокарты будет проще и менее громоздко, чем интерпретатор. Инициализация начального режима в биос карты проста, там не сильно много инструкций включают текстовый режим при старте компа 40х25 и настраивают вектор прерывания int 10h на определенный адрес биоса. Вот еще одна проблема - при интерпретаторе придется какие-то программные костыли для обхода кода назначения вектора юзать, так как IBMовский вектор прерывания это просто 4 байта, содержащие адрес, а не как в PDP еще и слово состояния. Плюсы работы с аппаратными портами - память ВК находится в пространстве памяти вычислителя, изменение в ней символов, их атрибутов в текстовом режиме и цвета пиксела в графическом мгновенно автоматом отобразится на экране монитора, программирование портов VGA несложное и обсосано в инете очень хорошо. Минусы - придется программировать, читать обсасывающую это программирование лит-ру.

troosh
05.03.2019, 10:10
Вот мы и говорим о наличии исходников такого биоса. Есть для Cirrus Logic CL-GD54хх ISA. Написан вроде на Си и легко портируется
По-шерстите по эмуляторам х86 с открытым кодом. Может еще чего найдетеЦирроз не достать, и вообще забудьте про ISA видеокарты, - сейчас вполне себе есть доступые чипы Siliconmotion SM718 (http://d1.amobbs.com/bbs_upload782111/files_45/ourdev_672389T8XRGF.pdf ), да корпус с шариками неприятно, зато встроенные 16М видеопамяти и кроме PCI шины есть шина попроще.
Шерстить мне не надо - я портировал видео Биос под видеокарту, которую мы сами же разработали. А эмуляцией х86 занимался много лет.

svinka
06.03.2019, 11:56
VGA-шный BIOS может иметь в своем коде инструкции 80286

Написан для реального режима. Вряд ли имеет инструкции 80286 так как большинство VGA карточек работают в 8-битном слоте XT на процессоре 8088.
В крайнем случае можно использовать процессор NEC V20/V30 или Квазаровский КР1810ВМ86М или военный М1810ВМ86 (он вроде тоже умеет)

- - - Добавлено - - -


и вообще забудьте про ISA видеокарты, - сейчас вполне себе есть доступые чипы
Тогда дешевле на старенькой 5-ти вольтовой FPGA прям на МПИ. И совместимость с VGA не вперлась. Можно программно совместимую с DECPro


TC!!! Вам алфавитно-цифровой режим с загружаемыми шрифтами нужен или графика?

- - - Добавлено - - -


Цирроз не достать, и вообще забудьте про ISA видеокарты Дайте клич и Вам насыплют по 400-500руб. По 200 надо трудиться искать

troosh
06.03.2019, 12:27
TC!!! Вам алфавитно-цифровой режим с загружаемыми шрифтами нужен или графика?

SM718 вполне себе VGA совместимый чип, но есть возможность подключаться непосредственно на шины процессора, на 32 или 16 битную шину данных и отдельную шину адреса. Да, не ваш МПИ, придется все равно делать переходник.

И с графикой там проблем нет, хотя там только 2D ускоритель. ВидеоЦАП встроен, тянет нормально FullHD разрешение.


Дайте клич и Вам насыплют по 400-500руб. По 200 надо трудиться искать

Много лет назад пытался както найти Cirrus, правда в PCI исполнении. Только изредка попадались и все по неадекватной цене. Сейчас все винтажное ещё более дорогое и ещё менее доступное. В общем, не верю.

DenSam
06.03.2019, 13:04
Написан для реального режима. Вряд ли имеет инструкции 80286 так как большинство VGA карточек работают в 8-битном слоте XT на процессоре 8088.
В крайнем случае можно использовать процессор NEC V20/V30 или Квазаровский КР1810ВМ86М или военный М1810ВМ86 (он вроде тоже умеет)


Конечно под реализацию только реальный режим. Есть несколько инструкций 80186 - они так сказать учтены мной. Еще есть инструкции 80286, какие-то циклические сдвиги добавлены, они идут в общем поле опкодов - и их тоже можно реализовать. А есть еще у 80286 инструкции с префиксом 0x0F, который в 8086 еще не префикс, но довольно специфическая инструкция pop cs. Вот вопрос у меня за этот опкод 0x0F - реализовывать его по 86-му или по 286-му?