Следующей под раздачу попадёт, скорее всего, JMP.
Но, возможно, какая-то из однооперандных команд. Типа SWAB (если она есть на PDP-11/03) или COM (если SWAB нет на PDP-11/03)
Вид для печати
Следующей под раздачу попадёт, скорее всего, JMP.
Но, возможно, какая-то из однооперандных команд. Типа SWAB (если она есть на PDP-11/03) или COM (если SWAB нет на PDP-11/03)
Насчёт отсутствия SWAB на PDP-11/03 - это я погорячился.. Есть она там, есть :) Видимо, память царапнула про другое (сброс или не сброс V), но до сознания царапка не успела дойти :)
Так что следующие команды под раздачу - JMP, CLR и COM, поскольку они одноадресные, ближе к началу таблицы операций по кодам и две из них с особенностями (JMP только читает, а CLR только пишет).
Разобрался с тем, как инициализировать массив (aka ОЗУ-ПЗУ) через константные индексы. До этого инициализация сама по себе проблем не вызывала, но просто тупым перечислением значений одно за другим.
Это позволит не просто смоделировать ПЗУ(ОЗУ) с адресным полем (в котором указан адрес ячейки из него же), но и не пересчитывать руками (числовые) индексы, если поменялся порядок ячеек или ячейки были добавлены (удалены).
А так же позволит нарисовать "реальные" процессора - отталкиваясь от их схемотехники и ПЗУ (в том числе ПЗУ микрокода).
Ну а пока это нужно мне - с моими переделками PDP-2011 :)
Шаблон-концепт получил, попробую наполнить содержимым (JMP, SWAB, CLR, COM) и посмотреть, что получается.
SWAB - поскольку и с ней начал возиться.
JMP, SWAB, CLR, COM - это я как-то погорячился. Там перепиливать много надо будет. Поэтому начал с чего попроще - RTI. RTI - потому как оно почти в FullODT не используется и есть вероятность добраться до отладки (в пошаговом режиме) в нем.
Первый вариант допилил - посмотрим, скоко будет ошибок и как оно взлетит.
- - - Добавлено - - -
Ну, всё было ожидаемо - и наличие ошибок и поведение. Вот только забыл на пульт выдавать новую инфу - о микроадресе :)
После фикса всех тупых и не тупых ошибок новая модель показал свою работоспособность :)
RTI/RTT переведены на новый подход :) По крайне мере всё работоспобно до успешной загруки RT-11
Теперь XXDP :)
- - - Добавлено - - -
Одна (по крайне мере) ошибка нашлась - прерывание по установленному T-биту не отработало так, как положено.
Ок, в принципе - ожидаемо.
T-бит пока не поддаётся, но он не критичен для просто работы процессора, в том числе операционок, поэтому пока забил.
Вместо этого взялся за обработку прерываний (кстати, косвенно связанную и с T-битом). По сравнению в RTI/RTT несколько сложней и больше по объёму переделок плюс обработка прерыаний - это не выполнение команд процессора, но и упрощение внутрянки должно быть больше.
Пока описываю работу в microROM. После завершения - начнётся внесение изменений в логику процессора.
Обработка преываний, фаза TRAP (это когда вектор, предопределённый или от устройства, получен и собственно начался процесс перехода по вектору со всем сопутствующим) переделана, теперь отладка.
До одной ошибки уже допер - поправил - синтезируется.
Потратив некоторое количество нервов - я всё таки вычислил (вроде) все зависимости внутренних процессов от обработки TRAP. Последнее, что трепало нервы - yellow stack :) Yf
Так что на текущий момент переделана сладкая парочка - прерывания-RTI/RTT и при этом грузятся XXDP и RT-11 на PDP-11/03. Дальше, как обычно - тесты :)
А потом посмотрю :)
Погонял. Проблема с T флагом ушла. Не удивлён (почему я сунулся в TRAP) :)
Но нарисовалась другая проблема, причём ловит её только один тест (надо попробовать закрыть этот подтест и посмотреть - не вылезит ли ещё где), причём только в одной редакции и только в одном подтесте :)
Пример кода:
Причём сама INCB выполняется без проблем и с правильными флагами на выходе..Код:MOV #136,R4
MOV #376, (R4)
MOV #17256, R0 ; адрес п/п проверки флагов
INCB (R4)+ ; тестируемая инструкция
; и вот где-то в промежутке между последним микродействием
; по засылке адреса п/п в R0 и началом выполнения (R4)+
; в R0 записывается 0 (по тому как сигнал записи в регистр
; не сбрасывается
CALL (R0) ; что приводит к очевидным последствиям при попытке выполнить вызов
Пока, как и с флагом T - отложил поиск и устранения причины, так как подозреваю наведённую ошибку - из-за начала переделки на полнстью синхронную работу с регистрами. Ну и поскольку запуску и работе операционок и тестов - не мешает.
Теперь, наверное, займусь RTS
Update. Что-то я про флаг T погорячился - проблема то ушла :)