...
Обновилась текущая сборка "эмулятора ДВК": DVK_Emulator_17.01.15_16-28
Изменения:
1. Теперь файлы с расширениями .BIN и .DAT не могут быть перекодированы при работе приводов HD и HX с каталогом Windows.
2. В модуль CPU11_module.em добавлен объект BreakPoint, создающий на шине ловушку адреса. Пример использования BreakPoint добавлен в файл конфигурации DisAsm.cfg
По умолчанию каждый объект типа BreakPoint имеет следующие настройки:
Возможные значения:Код:[BRK.ini] InitialStateOf[Enabled] =1 SaveChangesFor[Enabled] =0 InitialStateOf[PauseCPU]=1 SaveChangesFor[PauseCPU]=1 FirstAddr =0177726 Last_Addr =0177727 IO_Mode = Any IO_Size = Any IO_Data = Any Skip_FirstHits = None Catch_NextHits = All Show_LastSteps = Max Show_NextSteps = Default Show_HitReport = Yes
Enabled
1 - Ловушка включена.
0 - Ловушка отключена.
PauseCPU
1 - Эмуляция ставится на паузу при каждом срабатывании ловушки.
0 - Эмуляция не останавливается.
FirstAddr
0000000..0177777, 0x0000..0xFFFF - Начальный адрес зоны перехвата.
Last_Addr
0000000..0177777, 0x0000..0xFFFF - Конечный адрес зоны перехвата.
IO_Mode
Any, READ, WRITE - Тип обращения.
IO_Size
Any, WORD, BYTE - Размер данных.
IO_Data
Any, -32768..65535, -077777..0177777, -0x7FFF..0xFFFF - Конкретное содержимое данных для перехвата.
Skip_FirstHits
None, 0 - Не пропускать первые срабатывания.
1..nn - Игнорировать nn первых срабатываний ловушки.
Catch_NextHits
All - Не игнорировать последующие срабатывания.
None, 0 - Игнорировать последующие срабатывания.
1..nn - Повторять срабатывание ловушки nn раз.
Show_LastSteps
Max, None, 0..nn - При срабатывании ловушки выводить в поток дизассемблера трассу предыдущих nn шагов.
Show_NextSteps
Default - Не изменять режим дизассемблера.
All - Включить дизассемблер.
None, 0 - Выключить дизассемблер.
1..nn - Включить дизассемблер для nn последующих шагов, после чего выключить.
Show_HitReport
Yes, true, ON, 1 - Вывести в листинг дизассемблера отчёт о срабатывании ловушки.
No, false, OFF, 0 - Не выводить отчёт о срабатывании ловушки.
Последний раз редактировалось Patron; 01.12.2015 в 16:45.
Обнаружены ошибки в конфигурациях LoadScript и CmdLine, где первый выдав на экран скрипт -закрывается. Второй пишет в консоли что "Файл скрипта не указан".
...
Еще просьба, можно сделать RAM диск под драйвер VD где адресация 176640.
Спасибо.
LoadScript.cfg выполняет в RT-11 команды из файла Script.txt, который в комплекте поставки выглядит так:
Последняя команда вызывает завершение программы эмулятора. Если убрать её из файла Script.txt - тогда после выполнения всех команд скрипта эмулятор продолжит работу.Код:ASS HD1 DK: DIR/FU/BL/VOL DU/TE HD1:/END:6 EXIT
ODT_Loader теперь имеет специальный режим извлечения скрипта из файла ODT_Loader.ini, который активируется при двойном клике в Windows на файле с расширением, зарегистрированным в Windows для открытия программой эмулятора.
При двойном клике на таком файле Windows ( например, на файле TETRIS.SAV или GAME.BAS ) эмулятор загружает файл конфигурации CmdLine.cfg и через внутренний параметр передаёт команду в ODT_Loader для извлечения скрипта из файла ODT_Loader.ini. При обычной "ручной" загрузке CmdLine.cfg этого не происходит и поэтому ODT_Loader сообщает об отсутствии скрипта для загрузки.
Последний раз редактировалось Patron; 18.01.2015 в 14:24.
Использую эмулятор для компиляции тестов при помощи родного MACRO-11. Написал .com файл и запускаю эмулятор из makefile, как часть процесса общей сборки. Возникли некоторые вопросы:
- эмулятор каждый раз мне отключает режим NumLock, можно как-то сделать чтобы он восстанавливал этот режим после выхода?
- можно как-то логировать в файл то что выводится в терминал в эмуляторе? Там бывают всякие ошибки (и компиляции и командной строки), их полезно рассмотреть подробнее, а не ловить в мелькающем окне
- можно как-то запускать эмулятор чтобы он не открывал окно, молча делал компиляцию в фоне и потом завершался, а то мигание окошка при makefile вызывает некоторый дискомфорт?
Update: по логу разобрался, все нормально
Последний раз редактировалось Vslav; 20.01.2015 в 13:36.
Пока нет. Проблема сложна тем, что если одновременно запущены несколько эмуляторов, то простое запоминание текущего состояния NumLock при запуске очередного эмулятора в общем случае приводит к невозможности восстановления исходного состяния NumLock после завершения всех эмуляторов. Попробую решить этот вопрос к следующему релизу.
Придётся подождать появления консольного "эмулятора RT-11", предназначенного исключительно для запуска команд и консольных утилит RT-11 в консоли Windows.
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Меня устроит и приведение NumLock в какое-то фиксированное состояние, в моем случае всегда "включено". Может быть, ткнете меня в WinAPI как NumLock можно принудительно включить, тогда я утилитку себе напишу, буду просто в командном файле ее вызывать. Или в конфиг вставьте - в какое состояние NumLock приводить при выходе.
Да пока флажок в конфигурации какой-нибудь, чтобы было невидимым или хотя бы свернутым. Посмотрел - оно же и свернутое продолжает процессор нагружать значит должно работать по идее.
Еще предложение - чтобы эмулятор мог возвращать код ошибки, устанавливаемый или возвращаемый утилитами RT-11, тогда make может увидеть ошибку и более красиво и информативно остановиться.
Последний раз редактировалось Vslav; 20.01.2015 в 17:04.
Код:BYTE keyState[256]; GetKeyboardState((LPBYTE)&keyState); keyState[VK_NUMLOCK] = 1; SetKeyboardState((LPBYTE)&keyState);
Запустить любую оконную программу в свёрнутом окне можно средствами Windows. Для проверки сейчас сделал на своём рабочем столе ссылку на pdp11.exe, сделал на этой ссылке правый клик и в свойствах выбрал "Окно->Свёрнутое в значок". Наверняка, запустить эмулятор через такую ссылку можно не только вручную.
Такое возможно только при использовании специального ( ещё не написанного ) монитора RT-11, передающего код завершения из RT-11 в эмулятор. Вряд ли такая опция появится раньше консольной версии эмулятора.
У меня такое под Win7 не заработало, MSDN вот чего пишет:
Вот такое работает:Сообщение от MSDN
Да, спасибо за идею, я на FAR-е сижу, поэтому сложно до такого додуматьсяКод:int main(int argc, char *argv[]) { BYTE keyState[256]; BOOL result; result = GetKeyboardState((LPBYTE)&keyState); if (result && (keyState[VK_NUMLOCK] == 0)) { keybd_event(VK_NUMLOCK, 0x45, KEYEVENTF_EXTENDEDKEY | 0, 0); keybd_event(VK_NUMLOCK, 0x45, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0); } return 0; }
Точно. В эмуляторе это выглядит ( и работает ) так:
Код:void SetNumLock( bool bState ) { BYTE keyState[256]; GetKeyboardState((LPBYTE)&keyState); if( (bState && !(keyState[VK_NUMLOCK] & 1)) || (!bState && (keyState[VK_NUMLOCK] & 1)) ) { // Simulate a key press keybd_event( VK_NUMLOCK, 0, KEYEVENTF_EXTENDEDKEY | 0, 0 ); // Simulate a key release keybd_event( VK_NUMLOCK, 0, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0); } }
Эту тему просматривают: 2 (пользователей: 0 , гостей: 2)