Есть ещё немножко (вложение).
Может имеет смысл запуститься по-ближе к самой ошибке?
Вид для печати
Есть ещё немножко (вложение).
Может имеет смысл запуститься по-ближе к самой ошибке?
Тесты для разных инструкций копируют соответствующие фрагменты кода в одни и те же адреса, которые исполняются в цикле, поэтому поймать только по значению PC не получится. Условие получается такое: начиная с первой встретившейся инструкции "EX (SP), IX" по адресу PC=#9428 и далее все инструкции со всеми регистрами пока управление не перейдет в Бейсик.
Есть немножко.
Имеем следующий код:
То есть младшую половину POP загружает правильную, а в старшую будто ничего не загружает вообще.Код:#9414 LD IX, #9439
...
#9422 PUSH IX
#9424 LD IX, #2114
#9428 EX (SP), IX ; судя по трейсингу, получаем IX=#9439 -- OK
#942A EX (SP), IX ; получаем IX=#2114 -- OK
#942C POP IX ; а здесь получаем IX=#2139 вместо #9439
#942E NOP
...
#94AC JP IX ; а здесь, естественно, вылетаем в Бейсик
Прийдётся немного поэксперементировать. Глюк найден серьёзный. Уверен, что это в нём всё дело.
Моя бесконечная благодарность персонально Higgins. Разбираюсь.
Всех приветствую.
Есть хорошие новости. Глюк устранён, загружается корректно, ROBOCOP научился ходить, ELITE продвинулась, но пока не летает. Jumping Jack заработал. Zexall грузится, но виснет в самом начале тестов.
ROBOCOP: http://www.youtube.com/watch?v=eWriMB0FckI
ELITE: http://www.youtube.com/watch?v=3vIRnnXrpJw
Jumping Jack: http://www.youtube.com/watch?v=wMY9tkJa6RQ
Lisitsin, Dominoes заработало?
Заработало.
http://www.youtube.com/watch?v=0GslAEOQjdk
А в чем была проблема?
Буква "N" на экранах рисуется с одним и тем же дефектом. При том, что другие буквы выводятся нормально. Значит, образ этой буквы в памяти испорчен. Вопрос в том, появился ли этот дефект в памяти в процессе загрузки или в процессе распаковки и/или перемещений правильно загруженной программы.
Если загрузить ROBOCOP еще раз, будет ли в точности тот же дефект с буквой "N"?
Приветствую, Higgins. Без вас долго бы искал. Дело в том, что в AVR не хватает регистрового файла (32 РОН) для всех целей эмуляции и приходится использовать регистры пространства ввода-вывода, запись и чтение которых не влияет на общую работоспособность. Для регистровых пар IX и IY я чисто механически выбрал TCNT1H:TCNT1L и OCR1BH:OCR1BL - парные регистры блока таймера - счётчика, чтение которых в AVR имеет свои особенности и оптимизировано для обеспечения чтения обоих байт 16-битного устройства в одном такте. Вот на это я и напоролся. Переназначил IH и IXL на другие регистры ввода-вывода - и всё сразу закрутилось.
В ROBOCOP я замечал искажения текста и раньше. С чем это связано пока не знаю. Бейсик текст выводит нормально. ROBOCOP сейчас загружу ещё раз.
---------- Post added at 19:38 ---------- Previous post was at 19:21 ----------
Некоторые буквы в ROBOCOP с дефектом:
http://www.youtube.com/watch?v=GvnZxR84jrM