-
На новый механизм переведена RTS. RT-11 и XXDP грузятся, тесты от PDP-11/03 и тест памяти - ок, за исключением той же проблемы из https://zx-pk.ru/threads/28952-pdp-1...=1#post1185969 . Ну, она пока не сильно мешает, так что - пока разборки с ней отложены :)
Была сделана некоторая оптимизация выполнения (с учётом полученного опыта) RTI/RTT/RTS. Попробую тоже сделать с цепочкой TRAP.
-
Вроде как ок, но надо тесты погонять. Чуть позже :)
-
Тесты - ок, начинаю двигаться по прерванному - JMP, SWAB, CLR. Возможно, с определённой оглядкой на операции с двумя операндами. Как подопытного кролика - возьму BIC (наоболее универсальный вариант по алгоритму).
Подход такой же, как и с RTI/RTT/RTS - расписываются микрооперации, учитывается порядок и возможность параллельного выполнения. Учитывая, что могу читать в паралель source и destinations регистры :)
Вот при написании предыдущего предложения заметил интересное - после написания "source и" и начала написания de браузер подсказал мне - destination? с предложением нажать таб :) Похоже, MS и в Edge начала добавлять intellisense :)
- - - Добавлено - - -
Как пример - как выглядит описание для RTS:
Код:
-- -------------------------------------------------------------------------
--
-- RTS reg
-- SrcReg - reg, DestReg - SP
--
-- -------------------------------------------------------------------------
-- чтение (DestReg) будет выполнено до микрошага addrRTSa
-- PC <- SrcReg | чтение @Destreg | SrcReg <- @Destreg
mrom(addrRTSa) := MRomEntry( -- 016
NextAddr => addrRTSz
, isGet => Yes -- читаем
, isGetAtDestReg => Yes -- читаем (DestReg)
, isPC_SrcReg => Yes -- PC <- SrcReg
, isSrcReg_AtDestReg => Yes -- SrcReg <- (DestReg)
, isDataSpaceUsing => Yes -- адрес возврата в стеке - в D пространстве (для процессоров с поддержкой I-D)
);
-- post operation (в том числе DestReg <- DestReg+2)
mrom(addrRTSz) := MRomEntry( -- 017
NextAddr => addrNextOp
, isPostRTS => Yes -- пост операции для RTS
, isCommonPrefetch => Yes -- пост операции - общий набор
);
Небольшая расшифровка, скажем, для isPC_SrcReg => Yes -- PC <- (SrcReg)
На этапе выполнения по тактовому импульсу сработает сохранение считанного содержимого SrcReg в PC (если, конечно, выполняется не оператор RTS PC - тогда данное действие будет заблокировано, хотя ничего страшного не будет, если не блокировать).
Всё, ушёл спать, дальше уже с утра буду развлекаться :)
-
Умею я, блин, ошибки сажать..
Предыстория :) Начал пилить JMP-SWAB-CLR под новую схему. Расписал микрооперации. Посмотрел. Понял, что пока ничего в голову на предмет повтороного использования расписанного не приходит, поэтому для начала решил в лоб реализовать, а там посмотрим. Ок. Нарисовал код под SWAB reg. Не работает. То есть в принципе код отрабатывает, но неправильно. Почесал почесуемое. Слегка подправил. И...
Вообще перестало работать!
Ну, я же знаю, то сначала надо свои ошибки искать. Вот с примерно вчерашних часов четырёх (дня) искал :) Ошибка тупая :) Поправил, посмотрим, что будет на выходе :)
- - - Добавлено - - -
Да, после фикса ошибки стало лучше - RT-11 грузится и даже работает.
На очереди, как обычно, XXDP с тестами.
И, технически, теперь я могу подцепить другие одноадресные команды в варианте работы с регистрами.
Но для начала сделаю остальные режимы адресации - и для JMP-CLR. И, возможно, так же что-то подпилю с учётом возможного опыта :)
-
Оптимизация работы с регистрами (теперь и запись и чтение идут быстрее), что позволит удалить некоторые шаги, связанные с ожиданием записи в регистры (ну, по мере переделки) - с новым мехазмом выполнение данная проблема прям в глаза полезла.
И вроде как нашёл причину ошибки https://zx-pk.ru/threads/28952-pdp-1...=1#post1185969, по крайне мере мой тестовый код на ней не спотыкается. Но как обычно - надо проверить тестами XXDP.
Так что - сейчас синтезируется и посмотрим на тесты. Некоторые сомнения вызывает RTS (после оптимизации), так что вполне возможно, что после тестов будет поиска ошибки :)
- - - Добавлено - - -
В целом - ситуация лучше, но есть ещё ошибки. Ищу...
-
Ошибка обнуления регистра найдена и пофиксина - результат невнимательной доработки кода под новый подход :)
Дальше вылезла ошибка XOR. Сначала подумал, что из-за более быстрой работы регистров (и не сохранение результата ALU), но оказалось - изменение из разряда - "а вот так лучше". Не в этот раз. Вернул - XOR заработал :)
Дальше вылезла ошибка yellow stack trap - сложно было понять, что именно она. Думаю над исправлением...
- - - Добавлено - - -
Сбой в тестах прерывани (VKAD). Бум разбираться и фиксить
- - - Добавлено - - -
Аха, для начала накосячил в JMP reg - прерывание не отработывается
-
Все тупости и корявости были найдены и пофиксины, теперь снова все тесты PDP-11/03 проходят.
Попробую слегка оптимизировать (см ускорение работы с регистрами), если получится - хорошо, если нет - верну как было и в любом случае - двинусь дальше :)
-
Из хороших новостей - в новом "микрокоде" убраны последние задержки (для завершения чтения и записи регистров), доставшиеся в наследство от PDP-2011 - тесты PDP-11/03 проходят без проблем.
Из плохий - решил собрать для проверки PDP-11/04 и.. зависание на ровном месте - RTI не отрабатывает. Причём - отличий в работе RTI между /03 и /04 я (пока) не вижу, а внешне - после завершения микрокода RTI /03 читает следующую инструкцию, а /04 не читает, видит, естественно, ещё RTI, начинает её выполнять, но вот по завершению что делать дальше - не знает - нет у неё перехода (естественно) дальше.. Начал воевать вчера вечером, пока ясности нет...
-
Я тут уже третий день хожу под вирусом, которые мелкие притащили плюс вчера был "жаркий" день на работе - голова протестует против вдумчивого думанья, так что слегка попричёсывал код (убрал последние следы задержек - были в описании констант, не использовались - так что, как-то неаккуратненько, доктор) а потом для проверки концепии перевёл на микрокод не только SWAB reg, но и CLR, COM, INC, DEC, NET. ADC, SBC, ROR, ROL, ASR, ASL - пока все тоже для варианта - Op reg, так как данное изменение - тупое редактирование описаний этих команд и никакого нового микрокода. Ну и сказалось то, что управление ALU идёт давно уже из "PLM". Синтезирую, посмотрю - как заработаю, пофиксю ошибки, потом погоняю тесты.
Потом, скорее всего, допилю микрокод для TST. Его ещё не допили из-за следующих факторв:
- все одноадресные команды можно разбить на три группы (только читают (пример - TST), только пишут (CLR), читают-что-то делают-пишут)
- внутрянка сейчас работает так, что нужные регистры для выполнения команды читаются ещё на этапе пред-декодинга
- поэтому, несмотря на то, что для, скажем, CLR - формально регистр читать не требуется - вся дальнейшая работа идёт как у читай-пиши команд. И поэтому в варианте - работа с регистрами - микрокод один и тот же.
- а вот для TST надо блокировать запись, что, в принципе, делается элементарно, но (по крайне мере пока) - отдельной веткой микрокода. Которую ещё надо написать. А у нас - ВИРУС :D
- - - Добавлено - - -
RT-11 загрузилась без проблем, формальный тест прошёл, на очереди XXDP
- - - Добавлено - - -
Занимательно :) Падает тест на такой последовательности:
Код:
JMP ODD+1
..
ODD: DEC PC
...
Последовательность, конечно, специфическая (и по докам PDP-11/03 игнорит нечётное обращение), но, получается, что преддекодинг берёт не то значение PC :)
Будем посмотреть :)
Ну а тесты инструкций (включая EIS) проходят беЗпроблем :)
- - - Добавлено - - -
Нашёлся ещё один тест (это был VKAD, а нашёлся VKAL), где проверяется такая же последовательность. Остальные проходят.
- - - Добавлено - - -
Хороший, кстати, пример того, что, в принципе, все регистры у PDP-11 равны, но некоторые "равнее" других.
Особенно "ровный" - R7 aka PC.
Чуть менее "ровный" - R6 aka SP :)
- - - Добавлено - - -
И ещё одна мысль.
Судя по этой последовательности - посл JMP ODD+1 нечётность PC СОХРАНЯЕТСЯ :) Хоть команды и будут выбираться по чётному (сброшен бит 0) адресу :) Но когда PC будет использоваться как источник или приёмник в команде - бит 0 участвует :) По крайне мере - на PDP-11/03 :)
- - - Добавлено - - -
Чёт мне надоело для запуска тестов грузить XXDP, а потом ещё ждать, пока она найдёт файл.. Уже начинаю больше задумываться на добавку в FullODT прямой работы с ФС, хотя бы с ФС RT-11 - благо она - не бином RSX :)
- - - Добавлено - - -
Поведение PC поправил. VKAD и VKAL проходят. Начинаю гонять тесты сначала :)
- - - Добавлено - - -
Все тесты PDP-11/03 проходят.
Нуууу... почти все - одна из редакций VKAC - VKACB0 - некоторое время назад начала выпендриваться. Но! Её более новая редакция - VKACC1 - как часы. Если учесть, что не проходит тест прерываемости FIS (а эти инструкии пока никаким боком в новом механизме) - пока забил. Когда совсем будет нечего делать :D (скажем - очередной ступор) - может и подумая над его поведением :)
- - - Добавлено - - -
Жжжж.. Про байтовые варианты забыл. Так что на очереди они.
- - - Добавлено - - -
Ещё и накосячил с реализацией байтовых вариантов :) Поправил, синтезируется...
- - - Добавлено - - -
Поправил. И второй раз попал в ситуацию, когда XXDP грузится, тесты проходят, а RT-11 падает. Ну, в прошлый раз она не падала, а говорила (через драйвер VM), что у вас ДП неправильно работает :) Так что - ишууууу, иде ошибка порылась..
-
Попробовал разные варианты изменения кода - фсё равно фигВам.. Придётся всё таки лезть в код и смотреть - чего там. Проблема в том, что RT уже успевает переключиться на работу через драйвер - соотвественно - поиск проблемного места будет не тривиальный.
И да, вчера забыл написать - падает она с сообщением "?BOOT-U-I/O error" - ещё работает загрузчик. Падает при попытке загрузки с RK11, RL11 и HX..
- - - Добавлено - - -
Всё, вычислил ошибку :) Значит - тесты её не проверяют :) Проблемы была (ну может что ещё есть) в CRLB reg - сбрасывала весь регистр (расширение знака?), а не только младший байт. Ок, будем пофиксить.
- - - Добавлено - - -
Смотрю на код - и в упор не вижу проблем. Решил для очистки совести проверить работоспобность всего остального, заблокировав новый вариант для CLRB, и, скорее всего - в этой ветки вообще старый код удалю, добавив в микрокод флаг - расширять знаковый бит младшего байта в старший байт. Так оно будет проще и меньше веток.
- - - Добавлено - - -
Да, проблема в CRLB
- - - Добавлено - - -
Переделал код на использование нового флага - а вот фиг.. Какая-то более тонкая ошибка..
- - - Добавлено - - -
Уф... Всё, дошло. CLRB reg - этот вариант команды ДОЛЖЕН прочитать регистр - ибо с регистрами нет работы на уровне байт.
- - - Добавлено - - -
Теперь RT всё устраивает. Щас формальный тест закончится и прогоню XXDP-шные тесты :)
Были мысли по очередной оптимизации по результатам игр, возможно, займусь ими.
- - - Добавлено - - -
Тесты XXDP идут, RT-11 грузится - очередной milestone :)