Speccy - наш выбор!

Speccy - наш выбор! (http://zx-pk.ru/index.php)
-   Эмуляторы отечественных компьютеров (http://zx-pk.ru/forumdisplay.php?f=61)
-   -   Эмулятор ДВК (http://zx-pk.ru/showthread.php?t=18351)

Patron 31st December 2013 18:08

Quote:

Originally Posted by hobot (Post 657459)
как же всё таки вот эту информацию закрепить на вкладке VT52

Нужно добавить в конфиг создание интересующих кнопок и повесить эти кнопки на интересующую полосу интересующего окна.

Например, так:

Code:

[objects]
MY0_Button = Ядро:SB_DriveButton
MY1_Button = Ядро:SB_DriveButton
MY2_Button = Ядро:SB_DriveButton
MY3_Button = Ядро:SB_DriveButton

[links]
VT52 + MY0_Button + MY
VT52 + MY1_Button + MY
VT52 + MY2_Button + MY
VT52 + MY3_Button + MY

[VT52.ini]
InitialStateOf[StatusBar] = 1

[MY0_Button.ini]
SB_Part_Data=nPosition[1] | nPriority[2] | bHidden[0]
Unit_Number=0

[MY1_Button.ini]
SB_Part_Data=nPosition[2] | nPriority[2] | bHidden[0]
Unit_Number=1

[MY2_Button.ini]
SB_Part_Data=nPosition[3] | nPriority[2] | bHidden[0]
Unit_Number=2

[MY3_Button.ini]
SB_Part_Data=nPosition[4] | nPriority[2] | bHidden[0]
Unit_Number=3


Alex_K 4th January 2014 19:58

Patron, а в эмуляторе в КМД работает вывод на терминал, если к регистру 177566 обращаются из КМД через окно? В данном случае старший адрес окна равен 177777, а обращение к регистру идет через 77566. Регистр 177564 вроде читается через окно, а вот вывод на экран не идет.

Patron 4th January 2014 20:54

Quote:

Originally Posted by Alex_K (Post 658314)
Patron, а в эмуляторе в КМД работает вывод на терминал, если к регистру 177566 обращаются из КМД через окно?

Не работает.

Эмулятор порта терминала и эмулятор КМД выполняются в разных потоках, а обработка записи в регистры устройства из другого потока в эмуляторе порта терминала пока не предусмотрена.

Quote:

Originally Posted by Alex_K (Post 658314)
Регистр 177564 вроде читается через окно

Регистры читаются в режиме дизассемблера - без уведомления устройства, поэтому ( например ) при чтении регистра данных приёмника - бит готовности в регистре статуса не сбрасывается.

Изменить содержимое регистра статуса невозможно - ячейка изменится, но эмулятор устройства уведомления не получит и записанное в ячейку слово пропадёт.


В принципе - можно добавить в API устройств PDP-11 специальные вызовы "постороннего" чтения/записи регистров DMA_IO, которые можно будет вызывать как из своего, так и из чужого потока.

Alex_K 4th January 2014 21:01

Quote:

Originally Posted by Patron (Post 658319)
Не работает.

Эмулятор порта терминала и эмулятор КМД выполняются в разных потоках, а обработка записи в регистры устройства из другого потока в эмуляторе порта терминала пока не предусмотрена.

Жаль. С точки зрения работы аппаратуры это обращение к шине МПИ, и устройству не играет роли, процессор к нему обращается или другое устройство через ПДП.
Quote:

Originally Posted by Patron (Post 658319)
Читается в режиме дизассемблера - без уведомления устройства, поэтому бит готовности в регистре статуса не сбрасывается.

Изменить содержимое регистра статуса невозможно - ячейка изменится, но эмулятор устройства уведомления не получит и записанное в ячейку слово пропадёт.

Я вообще-то читаю регистр статуса терминала 177564 и проверяю бит готовности в цикле. Если он не будет установлен, то вывод в 177566 прерывается. Собственно всегда был установлен и вывод в 177566 проходил.

Patron 4th January 2014 21:37

Quote:

Originally Posted by Alex_K (Post 658321)
С точки зрения работы аппаратуры это обращение к шине МПИ, и устройству не играет роли, процессор к нему обращается или другое устройство через ПДП.

При абстрактной многопоточной эмуляции это играет роль.

После добавления новых вызовов в API устройств - КМД сможет работать через ПДП только с теми устройствами, в эмуляторы которых будет добавлена соответствующая возможность.

Но ведь через запуск программы пользователя можно заставить реальный КМД работать с любым устройством на шине ДВК. Значит, надо будет добавить поддержку новых вызовов в эмуляторы порта терминала, порта принтера, платы МС1201 ( чтобы КМД мог изменять содержимое SEL1 ), процессора ВМ1 ( для доступа к регистрам ВЕ-таймера ), контроллера MX и даже микросхемы ВП1-128 ( вдруг КМД будет подключен к шине БК-0011, где есть своя ВП1-128 ).

В принципе, можно сделать и так.

Кстати, если хочется поработать напрямую с ВП1-128 - можно прицепить её на шину ДВК вместо контроллера MX:

Code:

[objects]
VP1-128 = DSK_module:VP1-128


[links]
;; bus & CPU | CpuBoard | HD | TerminalPort | PrinterPort | Booter | MX | MY
bus & CPU | CpuBoard | HD | TerminalPort | PrinterPort | Booter | MY | VP1-128


[VP1-128.ini]
MY0 = MY80_System.DSK
MY1 =
MY2 =
MY3 =


Alex_K 4th January 2014 21:51

Quote:

Originally Posted by Patron (Post 658332)
При абстрактной многопоточной эмуляции это играет роль.

После добавления новых вызовов в API устройств - КМД сможет работать через ПДП только с теми устройствами, в эмуляторы которых будет добавлена соответствующая возможность.

Но ведь через запуск программы пользователя можно заставить реальный КМД работать с любым устройством на шине ДВК. Значит, надо будет добавить поддержку новых вызовов в эмуляторы порта терминала, порта принтера, платы МС1201 ( чтобы КМД мог изменять содержимое SEL1 ), процессора ВМ1 ( для доступа к регистрам ВЕ-таймера ), контроллера MX и даже микросхемы ВП1-128 ( вдруг КМД будет подключен к шине БК-0011, где есть своя ВП1-128 ).

Вообще-то реальный ДВК - это конструктор. Есть корзина, в которую вставляются платы. Каждая плата имеет адреса, на которые она реагирует, играет роль место в приоритетной цепочке при обслуживании VIRQ, а также ответа на запрос ПДП. Есть другие сигналы, на которые реагируют устройства, например BS, INIT.
Quote:

Originally Posted by Patron (Post 658332)
Кстати, если хочется поработать напрямую с ВП1-128 - можно прицепить её на шину ДВК вместо контроллера MX:

Да пока интересно именно в составе КМД, если что программу можно загрузить и в СОЗУ с адреса 20000, что я и делал, пробовал выводить на терминал через "окно".

Patron 4th January 2014 22:23

Quote:

Originally Posted by Alex_K (Post 658335)
Вообще-то реальный ДВК - это конструктор.

Модульный API - точно такой же конструктур. Проблема возникает при многопоточной эмуляции, когда два потока одновременно обращаются к одному устройству.

В принципе - может помочь введение межпоточной блокировки в обычный API обращения к устройству.

Если межпоточная блокировка решит проблему - в следующем релизе КМД сможет работать с любыми устройствами на шине ДВК.

BYTEMAN 4th January 2014 22:28

Quote:

Originally Posted by Patron (Post 658346)
Проблема возникает при многопоточной эмуляции, когда два потока одновременно обращаются к одному устройству.

а как такая проблема решалась на аппаратном уровне?

Alex_K 4th January 2014 22:40

Quote:

Originally Posted by BYTEMAN (Post 658348)
а как такая проблема решалась на аппаратном уровне?

На аппаратном уровне для захвата шины устройство выставляет сигнал DMR. После того, как процессор освободит шину, он выставляет сигнал DMG (на самом деле у устройств есть вход DMGI и выход DMGO для передачи сигнала по приоритетной цепочке). Получив сигнал DMG, устройство снимает сигнал DMR и ставит SACK, подтверждая захват шины. Процессор снимает DMG и освобождает шину. После этого, во время действия сигнала SACK, устройство может распоряжаться шиной МПИ по своему усмотрению. После снятия сигнала SACK управление шиной возвращается процессору.

Patron 4th January 2014 22:42

Quote:

Originally Posted by BYTEMAN (Post 658348)
а как такая проблема решалась на аппаратном уровне?

Активное устройство должно было "захватить" шину перед выставлением адреса. Пока активен сигнал захвата шины - все остальные активные устройства должны ждать.

При многопоточной эмуляции роль захвата шины играет межпоточная блокировка. При обращении к заблокированному ресурсу поток впадает в спячку до снятия блокировки тем потоком, который раньше успел захватить этот ресурс.


All times are GMT +4. The time now is 02:58.

Powered by vBulletin® Version 3.8.3
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.