Просмотр полной версии : Програмная эмуляция i8086 в ДВК
Собственно вознит такой вопрос :
- насколько сложно сделать базовый эмулятор исполнения 8086 инструкций в МС1201.02, методом интерпретатора ?
Никакое особое быстродействие не требуется.
Конфу АП желательно настраивать предварительно.
Цель - исполнение некотрого текста программ из ПЗУ внешней карты, кратковременное и редкое по частоте вызова.
Желателен вариант для ПЗУ - насколько большой объем кода получится ?
- насколько сложно сделать базовый эмулятор исполнения 8086 инструкций
Вдруг подойдет:
https://github.com/adriancable/8086tiny
http://8086tiny.freeforums.net/
Еще у меня есть версия 1.30 с более полным исходником на с++, не помню откуда взалась.
Особых сложностей в таком эмуляторе нет, объем оценить не могу, не начав писать этот интерпретатор-эмулятор. Вопрос другого плана - каков уровень взаимодействия с "PC"-шным железом ( видеоконтроллер, видео-ОЗУ, чипсет и пр. ) необходим? Ведь "вакуумных" программ под 8086не так много - они все привязаны к различным осям, API которых опять же наверное нужно как-то (прямо или криво ) эмулировать?
В X Windows разогрев видеокарт на различных экзотический платформах (sparc, poweroc, mips) делают такой вот штукой https://gitlab.freedesktop.org/xorg/xserver/blob/master/hw/xfree86/int10/INT10.HOWTO
Для Radeon-ов не очень актуально, т.к. там в БИОСах уже прожуточный код и небольшой его встроенный интерпретатор для х86, а остальные платформы использую свои реализации этого пи-кода (но не эмулируют уже х86-й код), плюс там много чего в таблицах описано, которые унифицированные для разных видеокарт.
Для чего конкретно нужен интерпретатор - для запуска всяких ISA-16 видеокарт в ДВК, как внешних устройств в АП BS7.
По очень грубым прикидкам , возможно устройство интерпретатора в 16 кбайт ПЗУ и ~128 байт ОЗУ - с некотрой оптимизацией быстродействия.
Если без оптимизации - может и в 8 Кбайт ПЗУ влезет ( 1 команда 8086 ~~~ 1000 команд 1801ВМ3 ).
Задача ясна. Мне кажется, можно и плотнее по объему ужаться.
Уже есть рабочее схемотехническое решение по подключению ISA-устройств к МПИ?
Уже есть рабочее схемотехническое решение по подключению ISA-устройств к МПИ?
Пока нет.
Примерные параметры ремаппера ISA-16 на МПИ :
1. Область окна - в районе 175000...175777
2. Область регистров управления окном - 177000...177400 ( несколько регистров ).
На каждое слово в области окна будет своя ячейка СОЗУ с конкретным адресом ISA-16, и ~256 вариантов таких комбинаций ( зависит от емкости СОЗУ ремаппера ) - что бы быстро иметь доступ к 16 метрам АП ISA-16.
Решение громоздкое, но довольно универсальное, может даже поместится на полуплату МПИ.
*
Ну а если совсем по-проще для 1 шт. конкретной видеокарты , например Триадент-9000 - то и ~20 шт.ИС мелкоты хватит, и интерпретатор ( не особо ) нужен.
А может тогда ремаппер проще сделать на КР1810ВМ86 ? Эдакая МС1702 для ДВК получится...
Если взять видеокарточку для которой есть биос в исходничках под свободной лицензией и описание всех регистров то ничего интерпретировать не надо. Цирроз вроде. А если исходничков нет то сдайте такую МСДОСчикам рублей по 300+ на фантомах.
Для текстового режима нужно окно памяти 4кб и окно под регистры байт 16
Для графического режима надо бы 64кб
Из хитростей ВМ2 - словное обращение по нечетному адресу позволяет увеличить адресное пространство в 2 раза; А наличие режима процессора хальт еще в 2 раза
Или приделайте самодельный диспетчер памяти. Как в союз-неоне например
Korchagin
04.03.2019, 00:54
С вычислителями на ВМ3 ISA видеокарту подружить можно, так как память видеокарты в PC начинается сразу после первых 640 кб оперативки и составляет 128 кб + 64 кб на сам биос видеокарты, а комп на ВМ3 в целом эквивалентен компам на первом 80286 6 Мгц. С помощью аппаратных костылей возможна установка портов ввода-вывода на свободные адреса, да и саму память карты можно подвигать по адресному пространству при необходимости. Считаю, что можно обойтись прямым программированием портов ввода-вывода, режим VGA в любом случае будет работать независимо от карты. Но как подружить видеокарту с ВМ2 не представляю - адресная шина урезана.
Но этот вариант предполагает написание минимального драйвера vga, вместо массивного и тормозного "интерпретатора", что в целом лучше, и универсальнее ( vga без расширений стандартен и довольно прост в доступе ), как мне кажется. А доступ из АП ВМ2 можно будет организовывать только через специфические регистры, даже в видео-озу.
даже в видео-озу.
И, как мне кажется, сразу резко затормозить скорость работы с графикой
Но этот вариант предполагает написание минимального драйвера vga, вместо массивного и тормозного "интерпретатора", что в целом лучше, и универсальнее ( vga без расширений стандартен и довольно прост в доступе ), как мне кажется.
Скорее все "вместо" не получится, - большинство видеокарт приобретают навык vga совместимости только после того как исполнится их видео Биос (там настраивают чип и контроллер памяти, выбирают через какой вилеовыход выдавать картинку и прочее).
Насчёт скорости - что-то более менее приличное получится если задействовать блиттер карты (2D ускоритель), но у всех он разный - тут уже без драйверов никак.
Блиттер карты - это уже svga. Карты vga совместимы на уровне общих ( неспецифических ) регистров, а а вот для инициализации действительно нужен интерпретатор. По МПИ доступ хоть на запись, хоть на чтение долгий, должно не сильно быть тормозным. Вечером попробую прикинуть механизм...
большинство видеокарт приобретают навык vga совместимости только после того как исполнится их видео Биос (там настраивают чип и контроллер памяти, выбирают через какой вилеовыход выдавать картинку и прочее).
Вот мы и говорим о наличии исходников такого биоса. Есть для Cirrus Logic CL-GD54хх ISA. Написан вроде на Си и легко портируется
По-шерстите по эмуляторам х86 с открытым кодом. Может еще чего найдете
Как вариант использования эмулятора - реализация старинного проекта материнской платы по типу 286 , но с СОЗУ 3 метра и М1801ВМ3А-6.
БИОС должен поддерживать мультикарты и VGA карту. ОС - RT-11 сильно патченная. Все ИС - или Интел-набор, или мелкота. Ну может 588ВН1 для векторных прерываний. Клава - на 8042 и БИОС-обработчике кодов.
По возможностям такой комп был бы примерно как Э-85.
О том, что какие-то игрушки с ИБМ ЭВМ пойдут - скорее всего никакие. А от ДВК - в лучшем случае для дисплея 15-ИЭ-хх.
Отмечу, что кроме тополога, для разработки такого монстрика понадобится квалифицированный программер БИОСа.
Задачи программера :
1. Сделать из 8042 "программную клаву 15-ВВ-097"
2. Справиться с мультикартой
3. Разработать систему меню БИОСа.
Мда, это мощный замах. Тут интерпретатором кода 8086 не отделаешься.
Я рассматриваю вопрос просто в подключении стандартных ISA16 VGA-карт и работе с ними из кода pdp-11. Интерпретатор 8086 в таком случае нужен будет только для выполнения видео-BIOS. Да, кстати, подскажите кто знает, VGA-шный BIOS может иметь в своем коде инструкции 80286?
Korchagin
05.03.2019, 09:33
Видите ли, работа с аппаратными портами видеокарты будет проще и менее громоздко, чем интерпретатор. Инициализация начального режима в биос карты проста, там не сильно много инструкций включают текстовый режим при старте компа 40х25 и настраивают вектор прерывания int 10h на определенный адрес биоса. Вот еще одна проблема - при интерпретаторе придется какие-то программные костыли для обхода кода назначения вектора юзать, так как IBMовский вектор прерывания это просто 4 байта, содержащие адрес, а не как в PDP еще и слово состояния. Плюсы работы с аппаратными портами - память ВК находится в пространстве памяти вычислителя, изменение в ней символов, их атрибутов в текстовом режиме и цвета пиксела в графическом мгновенно автоматом отобразится на экране монитора, программирование портов VGA несложное и обсосано в инете очень хорошо. Минусы - придется программировать, читать обсасывающую это программирование лит-ру.
Вот мы и говорим о наличии исходников такого биоса. Есть для Cirrus Logic CL-GD54хх ISA. Написан вроде на Си и легко портируется
По-шерстите по эмуляторам х86 с открытым кодом. Может еще чего найдетеЦирроз не достать, и вообще забудьте про ISA видеокарты, - сейчас вполне себе есть доступые чипы Siliconmotion SM718 (http://d1.amobbs.com/bbs_upload782111/files_45/ourdev_672389T8XRGF.pdf ), да корпус с шариками неприятно, зато встроенные 16М видеопамяти и кроме PCI шины есть шина попроще.
Шерстить мне не надо - я портировал видео Биос под видеокарту, которую мы сами же разработали. А эмуляцией х86 занимался много лет.
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 надо трудиться искать
TC!!! Вам алфавитно-цифровой режим с загружаемыми шрифтами нужен или графика?
SM718 вполне себе VGA совместимый чип, но есть возможность подключаться непосредственно на шины процессора, на 32 или 16 битную шину данных и отдельную шину адреса. Да, не ваш МПИ, придется все равно делать переходник.
И с графикой там проблем нет, хотя там только 2D ускоритель. ВидеоЦАП встроен, тянет нормально FullHD разрешение.
Дайте клич и Вам насыплют по 400-500руб. По 200 надо трудиться искать
Много лет назад пытался както найти Cirrus, правда в PCI исполнении. Только изредка попадались и все по неадекватной цене. Сейчас все винтажное ещё более дорогое и ещё менее доступное. В общем, не верю.
Написан для реального режима. Вряд ли имеет инструкции 80286 так как большинство VGA карточек работают в 8-битном слоте XT на процессоре 8088.
В крайнем случае можно использовать процессор NEC V20/V30 или Квазаровский КР1810ВМ86М или военный М1810ВМ86 (он вроде тоже умеет)
Конечно под реализацию только реальный режим. Есть несколько инструкций 80186 - они так сказать учтены мной. Еще есть инструкции 80286, какие-то циклические сдвиги добавлены, они идут в общем поле опкодов - и их тоже можно реализовать. А есть еще у 80286 инструкции с префиксом 0x0F, который в 8086 еще не префикс, но довольно специфическая инструкция pop cs. Вот вопрос у меня за этот опкод 0x0F - реализовывать его по 86-му или по 286-му?
Powered by vBulletin® Version 4.2.5 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot