PDP-11/83, Электроника МС0511 (УК-НЦ), DECserver 90M
Q-Bus: H9278-A, DLV11-J, DZQ11, DHV11, DELQA-M, LPV11, CQD-420/TM, DRV11
PMI: KDJ11-BF, MSV11-JE
VT220, CM7209
В эмуляторе пульта доступ идет в точности к написанному адресу (MMU выключен).
Нет даже регистров (177700-177707) как на клавишном пульте.
- - - Добавлено - - -
Взял голый конфиг E100_ROM.cfg, добавил туда HDROM, все работает, хотя и странноКод:000000 000000 000000 000000 $L 177720 $D 20 $L 20000 $S Boot HD unit? 0 HD Boot-I-Cold boot.. HD (177720) disk driver v1.5 2016 SL V08.00 [SW] Сторожевых С.В. 1988 RT-11SB (Y) V05.07 .SET TT FORM .SET TT SCOPE .SET EDIT K52 .SET SL ON .DAY Время Дата 00:00:00 18-Апр-2016, Понедельник
PDP-11/83, Электроника МС0511 (УК-НЦ), DECserver 90M
Q-Bus: H9278-A, DLV11-J, DZQ11, DHV11, DELQA-M, LPV11, CQD-420/TM, DRV11
PMI: KDJ11-BF, MSV11-JE
VT220, CM7209
Тем не менее, работает не совсем как ожидается
Сейчас посмотрю.
- - - Добавлено - - -
Обновил прошивку. Поправлена печать заголовка если нет SWR. По умолчанию не грузится если загрузчик нестандартный. При наличии SWR, SW14 разрешает загрузку в любом случае. Если SWR нету, можно нажать CTRL/C и записать значение для SWR в R5, затем нажать P.- - - Добавлено - - -Код:000000 000000 000000 000000 $L 177720 $D 20 $L 20000 $S *** HD BOOT ROM V01.01 *** Boot HD unit? 1 ?BOOT-U-No boot on volume Boot HD unit? 0 HD Boot-I-Cold boot.. HD (177720) disk driver v1.5 2016 SL V08.00 [SW] Сторожевых С.В. 1988 RT-11SB (Y) V05.07 .SET TT FORM .SET TT SCOPE .SET EDIT K52 .SET SL ON .DAY Время Дата 00:00:00 18-Апр-2016, Понедельник
Крутит лампочки в стиле RT-11
Видео 24Mb.
Последний раз редактировалось form; 24.09.2017 в 20:10.
PDP-11/83, Электроника МС0511 (УК-НЦ), DECserver 90M
Q-Bus: H9278-A, DLV11-J, DZQ11, DHV11, DELQA-M, LPV11, CQD-420/TM, DRV11
PMI: KDJ11-BF, MSV11-JE
VT220, CM7209
тем не менее, не удалось у себя в эмуляторе повторить, что то у меня снова не так с конфигом возможно?
довабил в раздел [HD.ini] строку
HD_Service_ROM_File = DWBoot.bin
жму HALT и получаю вот такое :
Замена файла .bin Patron'a в строке на .rom файл Олега те же цифры и снова "ат" (Код:. 150006 @177720/000200 20 @20000G 020000 @
так и есть.
заработал DWBOOT.bin - загрузился смонтированный DW образ
заменил в строке на файл прошивки, номер устройства позволяет выбрать а дальше
бежит строка с удивительной скоростью ))) Это пример "нестандартного" загрузчика???
???Код:HD Boot-I-Cold b HD Boot-I-Cold bo HD Boot-I-Cold b HD Boot-I-Cold bo HD Boot-I-Cold b HD Boot-I-Cold b HD Boot-I-Cold bo HD Boot-I-Cold b HD Boot-I-Co ld b HD Boot-I-Cold bo HD Boot-I-Cold b HD Boot-I-Cold bo HD Boot-I-Cold b HD Boot-I- Cold bo HD Boot-I-Cold b HD Boot-I-Cold b HD Boot-I-Cold bo HD Boot-I-Cold b HD Boot- I-Cold b HD Boot-I-Cold bo
- - - Добавлено - - -
отвечу сам себе - возможно у меня устарела версия HD.SYS (у меня 1.2) или надо дождаться очередного обновления
эмулятора.
- - - Добавлено - - -
обновление до 1.5 не помогло )
Устройство HD - варианты контроллеров и драйверов.
-------------------------------------------------------------------------
HD t1 t2 t3 t4 t5 Driver Distribution Kit
Устройство HD - контроллер, предназначенный для реализации псевдо-дискового устройства с несколькими приводами, содержимое носителей в которых - эмулируется файлами на неком общем носителе ( файловой системе ОС хоста программного эмулятора HD, флеш-карте, подключенной к аппаратному эмулятору HD и т.п. ).
Такой контроллер не требует от драйвера вычисления и передачи ему номера головки, номера дорожки, номера сектора, а использует входные параметры драйвера, передаваемые ему операционкой - номер диска, номер блока, счётчик слов и адрес буфера в памяти. Это значительно упрощает написание драйвера, особенно потому, что любой запрос операционки может быть выполнен за одно обращение к устройству. Драйверу не надо, как в случае (например) с контроллером DW - разбивать крупный запрос операционки на серию одноблочных запросов к устройству. При записи неполного блока - контроллер HD сам добивает остаток блока нулями.
Устройство HD может быть реализовано как в программных, так и в аппаратных проектах, причём как в одном модуле с эмулятором процессора, так и в виде отдельного контроллера на шине. Это предъявляет к контроллеру противоречивые требования, которые не могут быть выполнены все в рамках одной архитектуры. Поэтому существует несколько незначительно отличающихся типов контроллера HD, как и драйверов, работающих с этими контролерами.
На данный момент есть 5 типов контролера HD ( t1, t2, t3, t4, t5 ) и 5 соответствующих им веток драйверов ( v1, v2, v3, v4, v5 ). При эмуляции тип эмулируемого контролера HD задаётся "секретным" параметром: HD_InterfaceType в разделе HD.ini. Значение по умолчанию HD_InterfaceType = 2 соответствует обычному контроллеру HD.
Все контроллеры имеют два регистра на шине PDP-11 : CSR=177720 и DATA=177722 : t3 и t5 также используют вектор прерывания 0164.
HD t1 останавливает процессор и используют прямую работу с памятью.
HD t2 может останавливать процессор или использовать DMA. Главное отличие HD t2 от t1 в том, что HD t2 позволяет работать с образами 32-разрядного размера (в блоках по 512 байт) и использовать 22-разрядные адреса памяти, а HD t1 - поддерживает только 16-разрядные размеры и адреса. Драйвер v2 одинаково хорошо работает с HD t2 и если тот останавливает процессор, и если использует DMA, снимая в CSR флаг READY на время работы.
HD t3 - это t2 с прерываниями. Драйвер v2 работает с HD t3 в режиме без прерываний, драйвер v3 - с прерываниями.
HD t4 и HD t5 не используют DMA, получая и передавая данные чтения и записи через регистр данных. HD t4 работает без прерываний ( как MX ), а HD t5 - с прерываниями ( как DW ). Драйвер v4 может работать c HD t5 без прерываний, драйвер v5 может работать только с HD t5 по прерываниям.
Старший бит CSR используется в качестве флага ошибки. HD t1 не использует других битов в CSR. HD t2 ( и последующие ) устанавливает бит 040, если в текущем приводе смонтирован образ, содержащий более 65535 блоков по 512 байт. HD t2 использует в CSR бит READY ( 0200 ), что позволяет отличить его от t1. HD t3 позволяет изменять в CSR бит IE ( 0100 ), в случае установленности которого генерит прерывание после завершения команд чтения и записи. Установка бита IE у готового устройства не вызывает прерывание. HD t2 и HD t3 могут работать с 22-разрядной адресной шиной, поэтому для задания старших битов адреса используются 6 младших битов старшего байта CSR. HD t2 и HD t3 допускают байтовую запись в CSR для раздельного задания старших битов адреса и кода команды чтения/записи. HD t4 и HD t5 держат установленным в CSR бит NO.DMA ( 040000 ). HD t5 позволяет изменять в CSR бит IE ( 0100 ), в случае установленности которого генерит прерывание после завершения фазы работы с образом в командах чтения и записи.
HD t2 и последующие - после каждой команды ( кроме команды GetUnitSize ) возвращают в младшем байте регистра данных код завершения команды, а в старшем - текущий номер привода.
Коды завершения:
Код:IS_SUC = 0001; // нет ошибки IE_OFL = 0277; // устройство offline IE_BLK = 0354; // выход за пределы устройства IE_WLK = 0364; // попытка записи на защищенное устройство IE_VER = 0374; // неустранимая ошибка (например bus error) IE_ABT = 0375; // выполнение прервано IE_IFC = 0376; // неверная команда
Максимально полный набор команд семейства HD, некоторые из которых работают только при реализации HD в блоке эмуляции процессора, выглядит так:
Цветом выделены "расширенные" команды, не поддерживаемые HD t1.Код:#define HD_CheckUnit 0 #define HD_SetUnit 1 #define HD_SetBlockNum 2 #define HD_SetBlockNumHi 022 // 18 #define HD_SetBufAddr 3 #define HD_SetWordCount 4 #define HD_Read 5 #define HD_Write 6 #define HD_GetUnitSize 7 #define HD_GetBootForUnit0 010 // 8 #define HD_GetUnitSizeHi 027 // 23 #define HD_GetUnitSizeLo 047 // 39 #define HD_ExitEmulator 9 #define HD_SetTempCPUSpeed 10 #define HD_RestoreMainCPUSpeed 11 #define HD_SetSlowCPUSpeed 12 #define HD_Take_RT11_ExitCode 13 #define HD_LoadSeviceROM 020 // 16 #define HD_Ignored_040 040 // 32
Если к выбранному приводу подключен образ 32-разрядного размера - команда GetUnitSize возвращает размер образа 65535 блоков. Команды GetUnitSizeHi и GetUnitSizeLo - всегда возвращают старшее и младшее слово размера ( для образов 16-разрядного размера GetUnitSizeHi возвращает 0 ). Команда SetBlockNum обнуляет старшее слово номера блока, поэтому для задания 32-разрядного номера блока должна вызываться перед командой SetBlockNumHi.
Минимальный набор команд, необходимый для полноценной работы контроллера с драйвером HD выглядит так:
Цветом выделена команда, не поддерживаемая HD t4 и HD t5.Код:SetUni = 1 ; Запомнить содержимое регистра данных в качестве номера привода. SetBlk = 2 ; Запомнить содержимое регистра данных в качестве номера блока. SetBuf = 3 ; Запомнить содержимое регистра данных в качестве адреса буфера. SetWCn = 4 ; Запомнить содержимое регистра данных в качестве счётчика слов. CmdRea = 5 ; Выполнить чтение CmdWri = 6 ; Выполнить запись GetSiz = 7 ; Выдать в регистре данных размер файла образа ( в блоках по 512 байт )
В младшем байте CSR по чтению читаются флаги, а по записи - пишутся коды команд, поэтому подачу команд в контроллер можно выполнять только командами: MOV, MOVB, CLR, CLRB. Маска команды 077.
При любой ошибке в ходе выполнения команды - в CSR устанавливается флаг ошибки ( старший бит ), а код ошибки возвращается в младшем байте регистра данных.
Если к заданному номеру привода не подключен образ - после выполнения всех этих команд ( и до выполнения чтения и записи ) - возвращается IE_OFL.
Если номер блока находится за пределами размера образа в текущем приводе - возвращается IE_BLK.
Если счётчик слов запрашивает доступ за пределы образа в текущем приводе - возвращается IE_BLK, но запоминается переданное значение ( иначе t4 и t5 не будут знать, сколько слов позже передаст драйвер ).
При сбое чтения или записи образа - возвращается IE_VER. Чтение и запись с завышенным счётчиком слов не вызывает ошибки, но осуществляется только для "влезающего" количества слов.
Чтение и запись за пределами образа возвращает ошибку IE_BLK только в том случае, если ни один блок не был прочитан/записан.
При попытке записи в защищённый от записи образ - возвращается IE_WLK.
При зависании шины в режиме DMA - возвращается IE_VER.
Дополнительные команды.
GetBootForUnit0 = 010 ( 8 ) - устанавливает: [ НОМЕР ПРИВОДА = 0 ; НОМЕР БЛОКА = 0 ; АДРЕС БУФЕРА = 0 ; СЧЁТЧИК СЛОВ = 256 ] и выполняет команду чтения.
LoadSeviceROM = 020 ( 16 ) - устанавливает: [ АДРЕС БУФЕРА = 020000 ; СЧЁТЧИК СЛОВ = ROM_Size/2 ] и считывает в буфер контроллера ( для t4 и t5 ) или пересылает в память по адресу 020000 сервисный код контроллера.
ExitEmulator = 011 ( 9 ) - завершает эмуляцию, если последнее значение, записанное в регистр данных = 060434.
SetTempCPUSpeed = 012 ( 10 ) - задаёт последнее значение, записанное в регистр данных - в качестве текущей скорости процессора в KIPS ( тысячах команд в секунду ). Значение 0 - устанавливает максимальную скорость.
RestoreMainCPUSpeed = 013 ( 11 ) - восстанавливает "обычную" скорость процессора, задаваемую как-то помимо HD ( например - переключателями на плате ).
SetSlowCPUSpeed = 014 ( 12 ) - в цикле ожидания операционной системы устанавливает для процессора "режим сна" в целях экономии энергии ( используется в ОС AT-11 ).
Take_RT11_ExitCode = 015 ( 13 ) - при программной эмуляции сохраняет код завершения программы RT-11 для передачи Windows в качестве кода завершения программы эмулятора ( используется в ОС AT-11 ).
Ignored_040 = 040 ( 32 ) - игнорируется контроллером, как и команда CheckUnit ( 000 ). Защищает контроллер от попадания флага 32-разрядного образа ( 040 ) обратно в CSR при выполнении команды BIS #100,@#177720.
HD t1
HD t1 - простейший вариант реализации устройства HD, предназначенный для простых программных, микроконтроллерных и FPGA эмуляторов микро-ЭВМ типа PDP-11. Главная особенность HD t1 - остановка тактовой частоты процессора на время выполнения контроллером полученной команды. Это позволяет не беспокоиться о синхронизации работы процессора и контроллера. Когда процессор получает тактовую частоту - это означает, что контроллер HD находится в режиме ожидания, а когда контроллер выполняет команду - процессор бездействует. Со стороны программы это выглядит так, что на следующем такте, после загрузки команды чтения в регистр HD - прочитанные данные уже находятся в ОЗУ, а контроллер готов к приёму следующей команды. Может работать только с драйвером ветки v1.
HD t2
HD t2 - в отличие от t1 позволяет работать с образами 32-разрядного размера (в блоках по 512 байт) и использовать 22-разрядные адреса памяти. В зависимости от реализации может останавливать процессор на время работы, как HD t1, или использовать DMA, снимая флаг READY в CSR. При остановке процессора на время работы - может работать с драйвером v1 или v2, при использовании DMA - только с драйвером ветки v2. При использовании DMA - должен досрочно завершать команды чтения и записи при получении по шине сигнала INIT и при записи в CSR.
HD t3
HD t3 - вариант t2 с поддержкой прерываний. При остановке процессора на время работы - может работать с драйвером v1, v2 или v3. При использовании DMA - только с драйверами v2 или v3. Режим работы HD t3 по прерываниям используется только драйвером v3. При использовании DMA - должен досрочно завершать команды чтения и записи при получении по шине сигнала INIT и при записи в CSR. Сигнал INIT должен сбрасывать разрешение прерываний.
HD t4
HD t4 - не использует DMA и не использует прерывания ( как MX ). После подачи команды записи - контроллер снимает флаг READY ( 0200 ) и в регистр данных нужно (без каких-либо других обращений) записать количество слов, равное текущему значению "СЧЁТЧИК СЛОВ", после чего контроллер снимает флаг NO.DMA и выполняет запись. Завершение записи приводит к установке в CSR флагов READY и NO.DMA. При выполнении чтения - контроллер снимает флаги READY и NO.DMA ( 040000 ), выполняет обращение к образу, после чего устанавливает флаг NO.DMA. После этого драйвер должен прочитать в регистре данных счётчик слов пакета и затем (без каких-либо других обращений) прочитать это количество слов из регистра данных. После чтения драйвером завершающего слова пакета - контроллер устанавливает в CSR флаг READY. При при получении по шине сигнала INIT и при записи в CSR во время выполнения команд записи и чтения - фаза обмена данными прерывается/отменяется ( после записи в CSR - с установкой кода ошибки IE_ABT ).
HD t5
HD t5 - вариант t4 с поддержкой прерываний. Всё как у t4, но сигнал INIT ещё должен сбрасывать разрешение прерываний. При разрешённых прерываниях они возникают в момент установки флага NO.DMA в операциях чтения и записи.
При работе с контроллером HD прерывания возникают только в процессе выполнения чтения и записи ( по одному прерыванию на каждую команду чтения/записи с разрешёнными прерываниями ).
...
CSR может быть организован как обычный буферный регистр на шине Q-Bus, куда контроллер HD записывает флаги и откуда читает команды. Поскольку драйвер v1 рассчитан на работу с HD t1, который никаких флагов в CSR не пишет - дальнейшее относится только к драйверам и контроллерам "продвинутых версий". Взаимодействие драйверов с регистром CSR основано на допущении, что команда CLR @#HDCSR может стереть из CSR все флаги, но если контроллер не занят выполнением записи или чтения - он воспримет очистку CSR как команду CheckUnit и восстановит все флаги до следующего обращения драйвера к CSR.
Поэтому все драйверы HD ( кроме v1 ) начинаются так:
Однако, "записываемость" флагов в CSR со стороны драйвера не является требованием, наоборот - драйверы написаны так, чтобы одинаково работать и при записываемых и при не записываемых флагах CSR. Если флаги CSR могут быть "незаконно" обнулены драйвером - контроллер должен их восстанавливать только в двух случаях: 1) при установке флага READY (т.е. после завершения выполнения любой команды, включая команду 000 ); 2) когда значение флага должно измениться по логике работы контроллера.Код:; ; I/O request entry point. ; .DrBeg HD 1$: Mov #HD$CSR, R3 Clr (R3) ; Reset controller if READ not completed TstB (R3) ; Device READY ? BPl 1$ ; No - Wait
Если операционка перед аварийной выгрузкой драйвера вызывает его в точке аборта - драйвер выполняет команду CLR @#HDCSR. Занятый контроллер, когда освободится - должен быть в состоянии обнаружить факт записи в CSR, чтобы отменить передачу прочитанных данных в ОЗУ по ДМА ( для t2 и t3 ) или отменить фазу выгрузки данных через регистр данных ( для t4 и t5 ). Монитор RT11SJ не вызывает драйвер в точке аборта, выдавая вместо этого на шину сигнал INIT, который также не должен быть "забыт" контроллером, если он временно занят и не реагирует немедленно на происходящее на шине.
Последний раз редактировалось Patron; 16.11.2018 в 14:26.
В текущей реализации виртуального диска, подключенного к каталогу Windows - обнаружена ошибка синхронизации.
Если выполнить в каталоге Windows следующий командный файл:
TST.COM
Файл XXX.BIN будет создан одновременно и в каталоге виртуального диска, и в каталоге Windows, но затем удалён только в каталоге виртуального диска. В результате - при первой же синхронизации файл снова окажется в каталоге виртуального диска.Код:CREA XXX.BIN/ALL:1 DEL XXX.BIN
Ошибка вызвана тем, что в каталоге Windows могут быть удалены только те файлы, которые присутствуют в списке файлов каталога Windows, создаваемом при синхронизации. Для исправления ошибки - создаваемые в каталоге виртуального диска файлы теперь будут добавляться в вектор имён файлов каталога Windows ( при отсутствии там одноимённого файла ), а удаляемые - помечаться, как удалённые ( исключить их из вектора нельзя, потому что индексы всех имён файлов в векторе должны быть неизменными между синхронизациями ).
В следующих релизах программ модульного API ( эмуляторе ДВК, эмуляторе терминала типа VT52 и эмуляторе RT-11 ) эта ошибка будет исправлена.
Эту тему просматривают: 4 (пользователей: 0 , гостей: 4)