Плюс TST и TSTB. Смотрю на мысли про оптимизацию. Пока чего-то не так делаю - даже не стартует..
- - - Добавлено - - -
Начинает потихоньку оживать, но местами сопротивляется.. :)
Вид для печати
Плюс TST и TSTB. Смотрю на мысли про оптимизацию. Пока чего-то не так делаю - даже не стартует..
- - - Добавлено - - -
Начинает потихоньку оживать, но местами сопротивляется.. :)
Там не местами :) Там вообще феерические ошибки сыпались, но как только пытался копать предполагаемое место ошибки, как она разззззз - и тютю :) В общем, немного больше суток доходило, какую глупость сотворил :)
Итак, на текущий момент:
- новый механизм используют - обработка прерываний, RTI/RTT. RTS и (SWAB CLR(B) COM(B) INC(B) DEC(B) NEG(B) ADC(B) SBC(B) TST(B) ROR(B) ROL(B) ASR(B) ASL(B)) reg.
- все (на текущий момент) мысли по ускорению процесса выполнения передедланных инструкций реализованы
- RT-11 грузится и проходит формальный тест (копирование диск-в-диск с проверкой)
- XXDP грузится и тесты для PDP-11/03 (кроме FIS VKABC0) проходят.
Что буду переделывать дальше - пока не знаю, но уже примерно с неделю ломаю голову над (общими) обработчиками получения исходного операнда, получения операнда-получателя (где это нужно) и сохранения результата. Есссвенно, в рамках нового подхода на основе "табличной" обработки. Некоторые мысли (как сделать) есть, так что.. возможно, что и этим займусь. А может попробую реализовать какой-то частный случай и посмотреть - как пойдёт.
Мысли по поводу того, как сделать общие обработчики, сформировались, начиню пробовать. Для начала - источник (reg), по результатам буду смотреть - куда дальше
Следующей под раздачу (для проверки концепции обработки разных режимов адресации общим кодом) попала BIS в вариантах BIS (reg), reg.
В целом - концепция работоспособна, но, с учётом того, что для остальной части команд нужен и старый код... Мешанина дикая.. Как говорится в анекдоте - "и теперь с этой хнёй попробуем взлететь!". Так что - иногда синтезированное не работает и хрен пойми - где оно колом встало.
На текущий момент - RT-11 загрузилось, формальный тест прошло. Начинаю XXDP..
- - - Добавлено - - -
Тесты XXDP тоже прошли.
Дальше добавлю и проверю BISB, а потом другие двуадресные команды в том же варианте.
Потом, скорее всего, пройдусь по списку команд и посмотрю, какие ещё в принципе могут использовать новый подход - и попробую и их туда же.
Ни у где-то в этой цепочке попробую сделать код не только для reg, но и (reg) как приёмник
Занимательно смотреть, как при некоторых неправильно работающих командах (копи-паст кривой, соотвественно тесты на них валятся) RT-11 - загружается и даже что-то там делает :)
Подредактировал "PLM" для переключения BIC(b)|BIS(b) (reg1), reg2 на новый подход, но (см выше), так что сейчас собирается исправленный вариант и опять пойдёт в тесты :)
Выловил мелкую ошибку (выставлял, что ячейка - указатель, не смотря на то, что сей факт с ячейки должен был быть сброшен) и среднюю.. даже не знаю, чем её считать :) Сценарий:
Формально, такой вариант не допустим - ибо в этом режиме адресации операнд (5+1004-> 1011) процом воспринимается как указатель на указатель. То есть 1011 - это адрес ячейки (словный!), где лежит указатель на операнд. Но 1011 - нечётный адрес и на большинстве компов получим прерывание по вектору 4. На самом деле, ячейки 1000 и 1002 содержат не команду, а данные, так что с точки зрения корректности программы всё ок. Но вот в силу расположения этих ячеек - DisAsm воспринимает их как ячейки с командами. И получалось что-то типа (MOV @1011, R0) при чем он понимает, что 1011 - это ячейка указатель, поэтому а) на неё надо поставить метку и б) надо взять из неё указатель и поставить метку на ячейку, куда он указывает :) С пунктом б правда всё ОК - раз нечётный, а должен быть четным - ничего не делаем. Пункт а сам по себе не страшен. Хотя, как оказалось, установленная на нём метка не сбрасывается - ибо в коде сброса проверяется - а не нечтный ли адреса - а вот это уже неприятно - так как в DisAsm-е я пытаюсь соблюдать правило - метка только если есть реальный указатель на слово или байт :) Так что, по размышлению, генерировать КРИВУЮ команду он будет (в конце концов - на некоторых процах команда пройдёт), но вот метки в таких случаях надо будет подчищать :)Код:1000 27700
1002 5
...
1010 ...
1012 ...
Устал от программирования :)
И попутных разборок файлопомойки - так как нужно было найти нужные файлы для DOS-11.
Вернулся к основам - так как PDP-11 на FPGA - это то, с чего опять воскрес интерес к PDP-11 (хотя полностью он и не угасал никогда :) )
Для начало надо было вспомнить - чего я там ваял :) И где остановился в наваянном :)
- - - Добавлено - - -
И сдвинулся с того места, где застрял :) Ок, потестируем наваянное..
В общем.. устал воевать с разным. Плюнул - и начал ваять процессор с нуля :) Ну не совсем с нуля - что-то я успел наваять с подходом а-ля-PLM - так что некая БАЗА есть. Но процессор по сути - с нуля. Из работающего на текущий момент - все команды коротокого перехода (BR/BEQ/BNE...), а так же частично (не все режимы адресации реализованы) некоторые команды.
Скажем
- из команд работают MFPS reg, CMP reg, #xxx :)
- из режимов адресации reg, (reg), (reg)+, -(reg)
Ну и если есть отличия в использовании режимов адресации на разных процессорах - это тоже пока - КАК ДОЛЖНО БЫТЬ, а не КАК РЕАЛИЗОВАНО :)
Сейчас занялся режимом @#XXX, будет проверяться на MFPS :)
Ну, на самом деле, это был не @#XXX а более общий вариант - @(reg)+ :)
На текущий момент работают (в какой-то мере) reg, (reg), (reg)+, @(reg)+, дальше (параллельно) -(reg) и @-(reg) и посколько их плюсовые аналоги описаны - с минусовыми будет несколько проще :)
Периодически (время!) возвращался к проекту, на текущий момент вроде остались только X и @X режимы. Ну и тестирование - ошибки и в описании команд и микрокоманд нахожу..
- - - Добавлено - - -
А, нет, ошибся, @-(reg) ещё не сделал :)