Просмотр полной версии : Адаптер шины МПИ для эмулятора ДВК-1
...
Адаптер шины МПИ для эмулятора ДВК-1 ( текущая сборка DVK1+MPI_01.01.2016 (http://emulator.pdp-11.org.ru/DVK/MPI/distr/DVK1+MPI_01.01.2016.rar) описана ЗДЕСЬ (http://zx-pk.ru/showthread.php?t=25252&page=3&p=849241#post849241) ) позволяет создать собственный потактовый эмулятор процессора 1801ВМ1 ( и другие потактовые эмуляторы устройств, взаимодействующих через сигналы МПИ ) и подключить к абстрактной шине эмулятора ДВК (http://zx-pk.ru/showthread.php?t=18351).
Проект модуля MPI_module.em для Visual C++ 2005 находится в файле DVK1+MPI\MODULES\MPI_module\MPI_module.sln
Эмуляция запускается файлом DVK1+MPI\pdp11.exe
Для загрузки RT-11 нужно обнулить R0 и ввести команду 2G :
160442
@R0/160440 0
@2G
HD Boot-I-Cold boot..
HD (177720) disk driver v1.4 2015
SL V08.00 [SW] Сторожевых С.В. 1988
KZ V01.00 (C) ВЦ МИЭТ, НОЯБРЬ 1987
ПРИМЕНЯЙТЕ КОМАНДУ "SET MX INFORM"
RT-11SB (Y) V05.07
Для запуска теста MAINDEC-11-DVKAA-A-PB.bin нужно запустить абсолютный перфоленточный загрузчик, сменить образ ленты в приводе PC на MAINDEC-11-DVKAA-A-PB.bin, нажать P и после загрузки ленты запустить тест с адреса 200 :
@177550L
157500
@P
157712
@200G
END PASS
END PASS
...
Для запуска тестов 791401.bin и 791404.bin при старте эмуляции - нужно указать имя файла теста в параметре BinLoadFile раздела [CpuBoard.ini] в используемом файле конфигурации.
...
Исходники модуля MPI_module.em находятся в каталоге DVK1+MPI\MODULES\MPI_module\ :
MPI_module.cpp - исходник DllMain и экспортируемых из DLL-библиотеки функций.
MPI_model.h ; MPI_model.cpp - базовые классы эмуляции шины МПИ и устройств для неё.
MPI_Adapter.h ; MPI_Adapter.cpp - абстрактный эмулятор процессора 1801ВМ1 для абстрактной шины PDP11A16, переделанный для синхронной работы с процессором на шине МПИ.
MPI_1801VM1.h ; MPI_1801VM1.cpp - абстрактный потактовый эмулятор процессора 1801ВМ1 для шины МПИ.
MPI_VM1_V.h ; MPI_VM1_V.cpp - потактовый эмулятор процессора 1801ВМ1 для шины МПИ на базе модели Verilog
( исходники V-модели находятся в каталоге MPI_module\vm1cpu\ ).
MPI_VE_Timer.h ; MPI_VE_Timer.cpp - абстрактный эмулятор ВЕ-таймера процессора 1801ВМ1, адаптированный для шины МПИ.
MPI_BS7.h ; MPI_BS7.cpp - генератор сигнала BS7 в качестве примера простейшего устройства для шины МПИ.
...
Важная особенность эмуляции - синхронная работа пассивного ВМ1 на абстрактной шине и активного ВМ1 на шине МПИ, поэтому к шине МПИ всегда должен быть подключен процессор. При нарушениях синхронности работы пассивного и активного процессоров - в листинг дизассемблера и на системную консоль выводятся диагностические сообщения.
При запуске вылезает ошибка:Инструкция по адресу "0х00169d6b" обратилась по адресу "0х00у57766". Память не может быть "written"...
Если запустить отладку то дизассемблер показывает на такую команду-
00169D6B add byte ptr [eax+EFFh] , ch
При запуске вылезает ошибкаУ меня в Windows Vista работает.
Проверил в виртуальной машине - под Windows XP вылетает, под Windows 7 работает.
Буду отлаживать, чтобы запускалось и под XP тоже.
В Windows XP обнаружился жестокий глюк в реализации Fibers API, который удалось обойти. Исправленный вариант дистрибутива перезалит под тем же именем. Теперь под Windows XP тоже должно работать.
Важная особенность эмуляции - синхронная работа пассивного ВМ1 на абстрактной шине и активного ВМ1 на шине МПИ, поэтому к шине МПИ всегда должен быть подключен процессор.Это относится к двухпроцессорности описанной ниже?
http://zx-pk.ru/attachment.php?attachmentid=46269&stc=1&d=1394045189
Это относится к двухпроцессорности?Нет. Текущая версия адаптера МПИ может нормально работать только с одним процессором на шине МПИ.
Поскольку в адаптере МПИ есть встроенная копия 1801ВМ1 - можно было бы сделать так, чтобы всё работало даже когда на шине МПИ процессора нет вообще, но так сделано не было, поэтому в текущем варианте адаптер работоспособен лишь в том случае, когда к шине МПИ подключен один и только один процессор.
Тогда действительно шину надо сделать независимой, где вместо:
bus & CPU | CpuBoard
сделать
bus | CPU & CpuBoard
или наверно лучше
bus | CPU | CpuBoard
Тогда можно будет до 4х процессоров навешать.
Так-же я думаю, можно будет повесить процессоры разных поколений, и посмотреть отличия быстродействия (на одной частоте 2х процессоров).
bus & CPU | CpuBoardЗначок '&' в секции [links] описания связей в файле конфигурации означает соединение двунаправленных сокетов, а значок '|' служит просто для сокращения числа записей.
Следующие описания эквивалентны:
bus & MPI_Adapter | CpuBoard | HD | MX | DW | DX
bus & MPI_Adapter | CpuBoard
bus & HD | MX | DW | DX
bus & MPI_Adapter
bus & CpuBoard
bus & HD
bus & MX
bus & DW
bus & DX
...
Значок '+' означает подключение к точке присоединения.
Подключения к абстрактной шине реализованы через двунаправленные сокеты, а подключения к шине МПИ - через точки присоединения, поэтому запись о подключении устройств к шине МПИ выглядит так:
MPI_Adapter + VM1 | BS7 | VE_Timer
Но можно записать и так:
MPI_Adapter + VM1
MPI_Adapter + BS7
MPI_Adapter + VE_Timer
---------- Post added at 18:34 ---------- Previous post was at 18:10 ----------
шину надо сделать независимой, тогда можно будет до 4х процессоров навешатьС точки зрения шины МПИ - ограничений числа процессоров нет уже сейчас. Надо только иметь МПИ-модель процессора, правильно реагирующую на номер процессора, и уметь одновременно выставлять разные номера для разных процессоров ( для этого нужен ещё один переходник, так как модель шины ВМ1 не может сама динамически переключать состояние линий PA, в зависимости от активного процессора ).
...
Обновилась текущая сборка адаптера шины МПИ для эмулятора ДВК-1: DVK1+MPI_22.11.2015 (http://emulator.pdp-11.org.ru/DVK/MPI/distr/DVK1+MPI_22.11.2015.rar)
Изменения:
1. Добавлена возможность запускать V-модель процессора 1801ВМ1 (http://zx-pk.ru/showthread.php?t=23978&p=836067&viewfull=1#post836067) при помощи объекта MPI_1801VM1_Verilog. Добавлен файл конфигурации V-model.cfg, реализующий эту возможность.
2. Поскольку V-модель грузится медленно - добавлен системный образ TSTSYS.DSK, содержащий RT-11 V05.04 G.
Для загрузки RT-11 нужно обнулить R0 и ввести команду 2G :
160442
@R0/160440 0
@2G
HD Boot-I-Cold boot..
HD (177720) disk driver v1.4 2015
SL V08.00 [SW] Сторожевых С.В. 1988
RT-11SJ (Y) V05.04 G
.SET USR NOSWAP
.SET EXIT NOSWAP
.SET TT SCOPE
.SET EDIT K52
.
3. Добавлен пример теста IRQtst.bin с исходником IRQtst.mac и файлом конфигурации IRQtst.cfg.
4. Абстрактный потактовый аналог MPI_1801VM1 приведён в соответствие с V-моделью во всех режимах, кроме ДМА и мега-глюка.
5. Объект MPI_Adapter получил дополнительные настройки листинга состояний шины:
Show_nCLK - выводить/не выводить номера тактов.
DisAsmStart_nCLK - не выводить листинг до такта с указанным номером.
DisAsmStop__nCLK - не выводить листинг после такта с указанным номером ( при нулевом значении листинг выводится до конца, если значение меньше стартового - будет выведен листинг выполнения только для одной команды процессора ).
6. Выбор типа эмулируемого процессора 1801ВМ1а или 1801ВМ1г осуществляется одновременным изменением двух настроек - CPU_Type у адаптера и MicrocodeStepping у процессора ( по умолчанию там VM1A и A, но можно установить VM1G и G ).
На Windows XP рассчитано?
http://s018.radikal.ru/i520/1511/e9/8a8b77f55826.jpg (http://radikal.ru/big/6dee034511a84177ae6b103a3bb04961)
На Windows XP рассчитано?Исправил и перезалил.
Patron, Честно говоря я не до конца всё понимаю. Просто прогнал тест SPEED.
Результат на адаптере шины 376тыс. оп./сек рег-рег и 176тыс. оп./сек рег-пам.
На эмуляторе 184 и 88.
Частота на обоих 5,3Мгц.
Хотя адаптер медленнее по загрузке.
На эмуляторе 184 и 88.Это потому что летняя и осенняя версии эмулятора ДВК дефектные - там частота прерываний таймера платы МС1201 при работе с процессором 1801ВМ1 не 50 Гц, а 100 Гц.
Если взять на замену pdp11.exe из свежего комплекта адаптера МПИ ( который выложен здесь сегодня ) - там эта ошибка уже исправлена.
Patron, Ещё вопрос, как правильно задействовать модель процессора ещё и на контроллере MY.
как правильно задействовать модель процессора ещё и на контроллере MYНаверное так.
Чтобы заменить в MY\MY.cfg абстрактный процессор на адаптер МПИ с подключенной МПИ-моделью процессора - надо или скопировать файл MPI_module.em из каталога MODULES\ в каталог MY\, или прописать в описании модуля MPI_module полный путь к файлу MPI_module.em в каталоге MODULES\
Т.е. скопировать и написать так:
[modules]
MPI_module = MPI_module.em
Или не копировать и написать (например) так:
[modules]
MPI_module = G:\FTP\DVK1+MPI\MODULES\MPI_module.em
После чего внести следующие дополнительные правки:
[objects]
MY_CPU = MPI_module:MPI_Adapter
VM1 = MPI_module:MPI_1801VM1
[links]
MY_CPU + VM1
Чтобы выводить листинг состояний шины - надо направить его на какую-то консоль и включить режим дизассемблирования.
[links]
MY_CPU [DisAsm] > Debug
[MY_CPU.ini]
InitialStateOf[DisAsm] = 1
Есть ещё один момент, что эмулятор платы MY_Board в текущем варианте вместо сигнала EVNT выставляет IRQ и передаёт вектор 0100, но каких-то проблем из-за этого быть не должно.
...
Сейчас проверил - всё работает, но адаптер при первом использовании обновлённого конфига MY\MY.cfg сообщил о нескольких сбоях синхронизации дизассемблера - на эмуляцию это не влияет ( и даже не влияет на листинг состояний шины ), но в моменты сбоев синхронизации названия выполняемых процессором действий в листинге дизассемблера могут не совпадать с действиями, реально выполненными МПИ-моделью.
...
Ещё интересный момент - первый вариант описания модуля сработал даже без копирования файла модуля MPI_module.em из каталога MODULES\ в каталог MY\ :
[modules]
MPI_module = MPI_module.em
Возможно сыграло роль то, что модуль уже был загружен родительским конфигом.
что модуль уже был загружен родительским конфигом.
как всё сложно, целый язык программирования уже получается. Похоже даже защита от коллизий требуется? ))) А все варианты возможных CFG вряд ли автор даже сам сможет подробно рассмотреть в разумном по объёму справочном тексте. Или я сгущаю краски? Или всё будет и дальше усложняться как снежный ком?
Patron, Выложите рабой конфиг пожалуйста. У меня после набора 172140.....итд G вываливается 000002.
Выложите рабой конфиг пожалуйста.Конфиг такой:
MY\MY.cfg
;
; pdp11 emulator virtual device config file.
;
[export]
BusBridge (socket) {PDP11A16}
VP1-128 (interface) [StorageMediaUserInterface]
VP1-128 (interface) [StorageDriveInterface]
[modules]
Ядро = Main_module.em
CPU_module = CPU11_module.em
DSK_module = DSK_module.em
Port_module = Port_module.em
Terminal_module = Terminal_module.em
;;MPI_module = G:\FTP\DVK1+MPI\MODULES\MPI_module.em
MPI_module = MPI_module.em
[objects]
Debug = Ядро:Console
MY_bus = Ядро:PDP11A16
;;MY_CPU = CPU_module:1801VM1
MY_CPU = MPI_module:MPI_Adapter
VM1 = MPI_module:MPI_1801VM1
MYBoard = CPU_module:MY_Board
BusBridge = CPU_module:MY_BusBridge
VP1-128 = DSK_module:VP1-128
Power_Button = Ядро:SB_StateFlashButton
MY0_Button = Ядро:SB_DriveButton
MY1_Button = Ядро:SB_DriveButton
MY2_Button = Ядро:SB_DriveButton
MY3_Button = Ядро:SB_DriveButton
[links]
MY_bus & MY_CPU | MYBoard | VP1-128
MY_CPU + VM1
MY_CPU [DebugOut] > Debug
MYBoard > BusBridge
BusBridge [Power] > MY_bus [Power]
Config + Power_Button + MY_bus
Config + MY0_Button + VP1-128
Config + MY1_Button + VP1-128
Config + MY2_Button + VP1-128
Config + MY3_Button + VP1-128
; === INI SECTIONS ===
[MY_CPU.ini]
CPU_Frequency_KHz = 4000
CPU_SpeedLimit_KIPS = True
DisAsmBottomAddr = 0
DisAsmTopAddr = 0177777
InitialStateOf[DisAsm] = 0
SaveChangesFor[DisAsm] = 0
InitialStateOf[StepMode]=0
SaveChangesFor[StepMode]=0
MaxLoopCommandsToHide=32
CPU_Type=VM1A
Show_DAsm=Yes
Show_CLC1=No
Show_CLC0=Yes
Show_nCLK=No
DisAsmStart_nCLK=0
DisAsmStop__nCLK=0
[MYBoard.ini]
RAM_Latency_NS = 1000
ROM_Latency_NS = 250
ROM_DataFile = 255.dat
;; ROM_DataFile = 091.dat
;; ROM_DataFile = 092.dat
;; ROM_DataFile = 093.dat
SEL1_Data = 010002
[MY_bus.ini]
InitialStateOf[Pause] =0
SaveChangesFor[Pause] =0
InitialStateOf[Power] =1
SaveChangesFor[Power] =0
InitialStateOf[Reset] =0
SaveChangesFor[Reset] =0
InitialStateOf[HALT] =0
SaveChangesFor[HALT] =0
InitialStateOf[Timer] =1
SaveChangesFor[Timer] =0
[Config.ini]
ExtendedStartLog=0
InitialStateOf[StatusBar]=1
SaveChangesFor[StatusBar]=0
InitialStateOf[ControlBar]=0
SaveChangesFor[ControlBar]=0
InitialStateOf[Log]=0
SaveChangesFor[Log]=0
RunEmulationInParentThread=0
ActiveWindowHandle=
ActiveConfigID=
[Debug.ini]
TabTitle =""
InitialStateOf[StatusBar]=0
SaveChangesFor[StatusBar]=0
InitialStateOf[ControlBar]=0
SaveChangesFor[ControlBar]=0
InitialStateOf[Log]=0
SaveChangesFor[Log]=0
DumpMode = 1
LeftDumpSeparator=«
RightDumpSeparator=»
SeparateWindow_X0_px=0
SeparateWindow_Y0_px=0
SeparateWindow_DX_px=800
SeparateWindow_DY_px=600
InitialStateOf[SeparateWindow]=0
SaveChangesFor[SeparateWindow]=1
PrinterMode=0
[Power_Button.ini]
SB_Part_Data = nPosition[1] | nPriority[0] | bHidden[0]
TextFieldWidth_Px = 0
TextFieldText =
ButtonPushMode = 2
IsInverted = 0
ButtonON_Text = "Power"
ButtonOFF_Text = "Power"
ButtonWidth = 100
ButtonHeight = 18
ButtonFontSize = 12
ButtonFontWeight = 600
StateName = "Power"
PushedButton_Text_X_Offset_Px = 1
PushedButton_Text_Y_Offset_Px = 2
PoppedButton_Text_X_Offset_Px = 0
PoppedButton_Text_Y_Offset_Px = 1
ButtonON_TextColor = 0,0,0
ButtonOFF_TextColor = 0,0,0
ButtonON_Background = 160,205,160
ButtonOFF_Background = 1,0,0
Is_PoppedButton_Border_ButtonLike = 1
Is_PushedButton_Border_ButtonLike = 1
DoCenterAlignButtonText = 1
LightsOFF_StateName=Power
[MY0_Button.ini]
SB_Part_Data=nPosition[2] | nPriority[2] | bHidden[0]
Unit_Number=0
[MY1_Button.ini]
SB_Part_Data=nPosition[3] | nPriority[2] | bHidden[0]
Unit_Number=1
[MY2_Button.ini]
SB_Part_Data=nPosition[4] | nPriority[2] | bHidden[0]
Unit_Number=2
[MY3_Button.ini]
SB_Part_Data=nPosition[5] | nPriority[2] | bHidden[0]
Unit_Number=3
[VP1-128.ini]
MY0=
MY1=
MY2=
MY3=
[VM1.ini]
MicrocodeStepping=A
Результат такой:
160442
@172140/000040 37
172142/000004 0^
172140/000000 /000000 /000040
@G
SL V08.00 [SW] Сторожевых С.В. 1988
RT-11SJ (Y) V05.04 G
.SET USR NOSWAP
.SET EXIT NOSWAP
.SET TT SCOPE
.SET EM ON
.SET SL ON
.DAY
Время Дата
00:00:16 31-Дек-2014, Среда
.SH
TT
MY (Resident)
MY0 = DK , SY
SL (Loaded)
EM (Loaded)
LD
LP
16 free slots
.
160442 @172140/000040 37 172142/000004 0^ 172140/000000 /000000 /000040 @G
Для наглядности лучше бы ещё и нужную кнопку в конце строк описывать\указывать - у ДВК слишком неявное пульт в плане управляющих клавиш. Вот у меня после /37 и <ВК> на следущей строке полюбому @ в листинге этого не видно !!! )
Конфиг такой: У меня почти такой же, но опция дизассемблера не давала загрузится адаптеру.
InitialStateOf[DisAsm] = 1 Причем консоль Дизасм. контроллера MY выдавала данные с такой скоростью, что невозможно было что-то прочесть. При этом загрузка ПиСишного доходила до 32%. Отключил опцию- всё пошло.
Отключил опцию- всё пошло.Идёт и со включённым дизассемблером, просто нельзя нажимать <G> до появления бита готовности по адресу 172140 :
160442
@172140/000040 37
172142/000004 0^
172140/000000 /000000 /000000 /000000 /000000 /000000 /000040
@G
SL V08.00 [SW] Сторожевых С.В. 1988
RT-11SJ (Y) V05.04 G
...
Обновилась текущая сборка адаптера шины МПИ для эмулятора ДВК-1: DVK1+MPI_01.12.2015 (http://emulator.pdp-11.org.ru/DVK/MPI/distr/DVK1+MPI_01.12.2015.rar)
Изменения:
1. V-модель процессора 1801ВМ1 (http://zx-pk.ru/showthread.php?t=23978&p=836067&viewfull=1#post836067) обновлена до rev 0.04 (http://zx-pk.ru/showthread.php?t=23978&p=844375&viewfull=1#post844375) ( с небольшими изменениями и дополнениями ).
2. Исправлена абстрактная эмуляция ВЕ-таймера в объекте MPI_VE_Timer.
...
...
Обновилась текущая сборка адаптера шины МПИ для эмулятора ДВК-1: DVK1+MPI_01.01.2016 (http://emulator.pdp-11.org.ru/DVK/MPI/distr/DVK1+MPI_01.01.2016.rar)
Изменения:
1. V-модель процессора 1801ВМ1 (http://zx-pk.ru/showthread.php?t=23978&p=836067&viewfull=1#post836067) ( объект MPI_1801VM1_Verilog ) обновлена до rev 0.06 (http://zx-pk.ru/showthread.php?t=23978&p=846960&viewfull=1#post846960) ( с небольшими исправлениями и дополнениями ).
2. A-модель процессора 1801ВМ1 ( объект MPI_1801VM1 ) доведена до полутактового совпадения с V-моделью в основных режимах ( кроме ДМА, мега-глюка и задержки снятия RPLY более 2 тактов ).
3. В каталог WorkDir добавлены тесты VM1C1 и VM1C4.
...
Patron, совместимы ли ехешники эмулятора ДВК и адаптера шины? После замены ехешника v0.97A на v0.97j, при запуске программы происходит мгновенное её закрытие.
совместимы ли ехешники эмулятора ДВК и адаптера шины? После замены ехешника v0.97A на v0.97j, при запуске программы происходит мгновенное её закрытие.Нет - не совместимы. API постоянно изменяется, поэтому хотя эмулятор и модульный - он всё ещё предлагается только в виде монолитного файла, а не набора модулей. Поэтому модуль адаптера шины МПИ из этого комплекта будет работать только с exeшником из этого комплекта, с которым у него совпадает API.
и другие потактовые эмуляторы устройств, взаимодействующих через сигналы МПИ ) и подключить к абстрактной шине эмулятора ДВК.
Возможно ли вывести сигналы МПИ на шину IDE для подключения процессора? Можно будет сравнивать работу реального процессора и эмулятора.
Powered by vBulletin® Version 4.2.5 Copyright © 2026 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot