Плюс TST и TSTB. Смотрю на мысли про оптимизацию. Пока чего-то не так делаю - даже не стартует..
- - - Добавлено - - -
Начинает потихоньку оживать, но местами сопротивляется..![]()
Плюс TST и TSTB. Смотрю на мысли про оптимизацию. Пока чего-то не так делаю - даже не стартует..
- - - Добавлено - - -
Начинает потихоньку оживать, но местами сопротивляется..![]()
Последний раз редактировалось Hunta; 30.09.2023 в 23:07.
Там не местамиТам вообще феерические ошибки сыпались, но как только пытался копать предполагаемое место ошибки, как она разззззз - и тютю
В общем, немного больше суток доходило, какую глупость сотворил
Итак, на текущий момент:
- новый механизм используют - обработка прерываний, 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 - это ячейка указатель, поэтому а) на неё надо поставить метку и б) надо взять из неё указатель и поставить метку на ячейку, куда он указываетКод:1000 27700 1002 5 ... 1010 ... 1012 ...С пунктом б правда всё ОК - раз нечётный, а должен быть четным - ничего не делаем. Пункт а сам по себе не страшен. Хотя, как оказалось, установленная на нём метка не сбрасывается - ибо в коде сброса проверяется - а не нечтный ли адреса - а вот это уже неприятно - так как в DisAsm-е я пытаюсь соблюдать правило - метка только если есть реальный указатель на слово или байт
Так что, по размышлению, генерировать КРИВУЮ команду он будет (в конце концов - на некоторых процах команда пройдёт), но вот метки в таких случаях надо будет подчищать
![]()
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)