Да действительно, подключил на DX, всё пошло.
Образ - Здесь
На DX0 подключать (распакованный) образ ROOT.DSK
На DX1 подключать (распакованный) образ USR.DSK
На приглашение BOOT: ответить lsx
...
Видео запуска LSX на PDP 11/03 -Здесь
Вид для печати
...
Обновилась текущая сборка "эмулятора ДВК": 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 - Не выводить отчёт о срабатывании ловушки.
Обнаружены ошибки в конфигурациях 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 сообщает об отсутствии скрипта для загрузки.
Использую эмулятор для компиляции тестов при помощи родного MACRO-11. Написал .com файл и запускаю эмулятор из makefile, как часть процесса общей сборки. Возникли некоторые вопросы:
- эмулятор каждый раз мне отключает режим NumLock, можно как-то сделать чтобы он восстанавливал этот режим после выхода?
- можно как-то логировать в файл то что выводится в терминал в эмуляторе? Там бывают всякие ошибки (и компиляции и командной строки), их полезно рассмотреть подробнее, а не ловить в мелькающем окне
- можно как-то запускать эмулятор чтобы он не открывал окно, молча делал компиляцию в фоне и потом завершался, а то мигание окошка при makefile вызывает некоторый дискомфорт?
Update: по логу разобрался, все нормально
Пока нет. Проблема сложна тем, что если одновременно запущены несколько эмуляторов, то простое запоминание текущего состояния NumLock при запуске очередного эмулятора в общем случае приводит к невозможности восстановления исходного состяния NumLock после завершения всех эмуляторов. Попробую решить этот вопрос к следующему релизу.
Придётся подождать появления консольного "эмулятора RT-11", предназначенного исключительно для запуска команд и консольных утилит RT-11 в консоли Windows.
Меня устроит и приведение NumLock в какое-то фиксированное состояние, в моем случае всегда "включено". Может быть, ткнете меня в WinAPI как NumLock можно принудительно включить, тогда я утилитку себе напишу, буду просто в командном файле ее вызывать. Или в конфиг вставьте - в какое состояние NumLock приводить при выходе.
Да пока флажок в конфигурации какой-нибудь, чтобы было невидимым или хотя бы свернутым. Посмотрел - оно же и свернутое продолжает процессор нагружать значит должно работать по идее.
Еще предложение - чтобы эмулятор мог возвращать код ошибки, устанавливаемый или возвращаемый утилитами RT-11, тогда make может увидеть ошибку и более красиво и информативно остановиться.
Код: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);
}
}