Вход

Просмотр полной версии : Адаптер шины МПИ для эмулятора ДВК-1



Patron
12.06.2015, 15:08
...

Адаптер шины МПИ для эмулятора ДВК-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 на шине МПИ, поэтому к шине МПИ всегда должен быть подключен процессор. При нарушениях синхронности работы пассивного и активного процессоров - в листинг дизассемблера и на системную консоль выводятся диагностические сообщения.

MiX
12.06.2015, 18:14
При запуске вылезает ошибка:Инструкция по адресу "0х00169d6b" обратилась по адресу "0х00у57766". Память не может быть "written"...

Если запустить отладку то дизассемблер показывает на такую команду-

00169D6B add byte ptr [eax+EFFh] , ch

Patron
12.06.2015, 18:48
При запуске вылезает ошибкаУ меня в Windows Vista работает.

Проверил в виртуальной машине - под Windows XP вылетает, под Windows 7 работает.

Буду отлаживать, чтобы запускалось и под XP тоже.

Patron
12.06.2015, 22:15
В Windows XP обнаружился жестокий глюк в реализации Fibers API, который удалось обойти. Исправленный вариант дистрибутива перезалит под тем же именем. Теперь под Windows XP тоже должно работать.

MiX
13.06.2015, 10:25
Важная особенность эмуляции - синхронная работа пассивного ВМ1 на абстрактной шине и активного ВМ1 на шине МПИ, поэтому к шине МПИ всегда должен быть подключен процессор.Это относится к двухпроцессорности описанной ниже?
http://zx-pk.ru/attachment.php?attachmentid=46269&stc=1&d=1394045189

Patron
13.06.2015, 16:13
Это относится к двухпроцессорности?Нет. Текущая версия адаптера МПИ может нормально работать только с одним процессором на шине МПИ.

Поскольку в адаптере МПИ есть встроенная копия 1801ВМ1 - можно было бы сделать так, чтобы всё работало даже когда на шине МПИ процессора нет вообще, но так сделано не было, поэтому в текущем варианте адаптер работоспособен лишь в том случае, когда к шине МПИ подключен один и только один процессор.

MiX
14.06.2015, 11:38
Тогда действительно шину надо сделать независимой, где вместо:

bus & CPU | CpuBoard
сделать

bus | CPU & CpuBoard
или наверно лучше

bus | CPU | CpuBoard

Тогда можно будет до 4х процессоров навешать.

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

Patron
14.06.2015, 18:34
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, в зависимости от активного процессора ).

Patron
22.11.2015, 19:20
...

Обновилась текущая сборка адаптера шины МПИ для эмулятора ДВК-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 ).

MiX
22.11.2015, 20:19
На Windows XP рассчитано?
http://s018.radikal.ru/i520/1511/e9/8a8b77f55826.jpg (http://radikal.ru/big/6dee034511a84177ae6b103a3bb04961)

Patron
22.11.2015, 21:42
На Windows XP рассчитано?Исправил и перезалил.

MiX
22.11.2015, 22:32
Patron, Честно говоря я не до конца всё понимаю. Просто прогнал тест SPEED.
Результат на адаптере шины 376тыс. оп./сек рег-рег и 176тыс. оп./сек рег-пам.
На эмуляторе 184 и 88.
Частота на обоих 5,3Мгц.
Хотя адаптер медленнее по загрузке.

Patron
22.11.2015, 23:37
На эмуляторе 184 и 88.Это потому что летняя и осенняя версии эмулятора ДВК дефектные - там частота прерываний таймера платы МС1201 при работе с процессором 1801ВМ1 не 50 Гц, а 100 Гц.

Если взять на замену pdp11.exe из свежего комплекта адаптера МПИ ( который выложен здесь сегодня ) - там эта ошибка уже исправлена.

MiX
23.11.2015, 00:46
Patron, Ещё вопрос, как правильно задействовать модель процессора ещё и на контроллере MY.

Patron
23.11.2015, 01:55
как правильно задействовать модель процессора ещё и на контроллере 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


Возможно сыграло роль то, что модуль уже был загружен родительским конфигом.

hobot
23.11.2015, 11:03
что модуль уже был загружен родительским конфигом.
как всё сложно, целый язык программирования уже получается. Похоже даже защита от коллизий требуется? ))) А все варианты возможных CFG вряд ли автор даже сам сможет подробно рассмотреть в разумном по объёму справочном тексте. Или я сгущаю краски? Или всё будет и дальше усложняться как снежный ком?

MiX
24.11.2015, 00:16
Patron, Выложите рабой конфиг пожалуйста. У меня после набора 172140.....итд G вываливается 000002.

Patron
24.11.2015, 15:46
Выложите рабой конфиг пожалуйста.Конфиг такой:

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


.

hobot
24.11.2015, 16:55
160442 @172140/000040 37 172142/000004 0^ 172140/000000 /000000 /000040 @G
Для наглядности лучше бы ещё и нужную кнопку в конце строк описывать\указывать - у ДВК слишком неявное пульт в плане управляющих клавиш. Вот у меня после /37 и <ВК> на следущей строке полюбому @ в листинге этого не видно !!! )

MiX
24.11.2015, 20:31
Конфиг такой: У меня почти такой же, но опция дизассемблера не давала загрузится адаптеру.

InitialStateOf[DisAsm] = 1 Причем консоль Дизасм. контроллера MY выдавала данные с такой скоростью, что невозможно было что-то прочесть. При этом загрузка ПиСишного доходила до 32%. Отключил опцию- всё пошло.

Patron
25.11.2015, 12:33
Отключил опцию- всё пошло.Идёт и со включённым дизассемблером, просто нельзя нажимать <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

Patron
02.12.2015, 12:15
...

Обновилась текущая сборка адаптера шины МПИ для эмулятора ДВК-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.

...

Patron
01.01.2016, 15:22
...

Обновилась текущая сборка адаптера шины МПИ для эмулятора ДВК-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.

...

MiX
15.07.2018, 23:37
Patron, совместимы ли ехешники эмулятора ДВК и адаптера шины? После замены ехешника v0.97A на v0.97j, при запуске программы происходит мгновенное её закрытие.

Patron
15.07.2018, 23:49
совместимы ли ехешники эмулятора ДВК и адаптера шины? После замены ехешника v0.97A на v0.97j, при запуске программы происходит мгновенное её закрытие.Нет - не совместимы. API постоянно изменяется, поэтому хотя эмулятор и модульный - он всё ещё предлагается только в виде монолитного файла, а не набора модулей. Поэтому модуль адаптера шины МПИ из этого комплекта будет работать только с exeшником из этого комплекта, с которым у него совпадает API.

MiX
21.07.2018, 18:58
и другие потактовые эмуляторы устройств, взаимодействующих через сигналы МПИ ) и подключить к абстрактной шине эмулятора ДВК.
Возможно ли вывести сигналы МПИ на шину IDE для подключения процессора? Можно будет сравнивать работу реального процессора и эмулятора.