Поймал:
Поймал:
Последний раз редактировалось Lisitsin; 28.05.2014 в 08:14.
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Higgins ZX Spectrum Emulator 8.10 alpha 3 available
Please write us to report a bug or request a feature.
Идёт !!! вместе с IY !!!!!!!
LDI failed.
Последний раз редактировалось Lisitsin; 28.05.2014 в 08:14.
Условие: PC=#89AE ИЛИ #89B0. Регистры PC, BC, DE, HL, AF.
Флаги для всего семейства LDI, LDD, LDIR и LDDR:
- SF, ZF и CF не меняем.
- Флаги 3 и 5. Если принять r за значение ячейки, которое читается из (HL) и пишется в (DE), то разряд 3 (считая от 0) суммы r+A (где A -- это регистр A) даст значение для флага 3, а бит 1 этой суммы даст значение для флага 5.
- PF взведен, если BC (после декремента) не равен нулю.
- HF и NF сброшены.
Если это инструкция с повторением (LDIR, LDDR) и если она должна быть повторена (то есть BC после декремента не равен нулю), тогда PC уменьшается на два, то есть, становится на начало той же инструкции, и MEMPTR получает PC+1, где PC -- это уже уменьшенное на два прежнее значение PC. MEMPTR устанавливается только в этом случае. Если это инструкция без повтора или если повтора нет, MEMPTR остается прежним.
Higgins ZX Spectrum Emulator 8.10 alpha 3 available
Please write us to report a bug or request a feature.
LDI, LDD, LDIR, LDDR Passed. CPI, CPD FAILED:
Последний раз редактировалось Lisitsin; 28.05.2014 в 08:14.
Условие: PC=#89AE ИЛИ #89B0. Регистры PC, BC, HL, AF.
Обратите внимание, что условие то же, что и для LDI. Чтобы поймать именно CPI нужно выводить трейсинг только после того, как управление пройдет по адресу PC=#8966.
Флаги:
- SF, ZF и HF выставляются так же, как в инструкции "CP n", где в роли "n" -- значение ячейки в (HL).
- Флаги 3 и 5. Вычисляем значение r = A - n - HF. Здесь "A" -- это регистр A, "n" -- значение ячейки, "HF" -- значение флага HF (0 или 1). Здесь берется не значение HF на входе, а значение этого флага уже после выполнения "CP n". Как и в случае с LDI, во флаг 3 копируем разряд 3 значения "r", а во флаг 5 -- разряд 1 того же значения.
- PF устанавливаем так же, как в LDI.
- NF нужно взвести.
- CF не меняем (то есть, он должен быть такой же, как на входе, а не такой, как после "CP n").
MEMPTR:
CPI и CPIR увеличивают MEMPTR на 1.
CPD и CPDR уменьшают MEMPTR на 1.
Но: если исполняется CPIR или CPDR и нужное значение не найдено (сравнение дало сброшенный ZF) и BC не равно 0, тогда PC уменьшается на 2, после чего MEMPTR получает значение PC+1. Во всех остальных случаях MEMPTR остается прежним.
Higgins ZX Spectrum Emulator 8.10 alpha 3 available
Please write us to report a bug or request a feature.
Ваши консультации бесценны !
CPI, CPD прошли. CPDR и CPIR я прописал, но следом за CPD в тесте идёт INI, которая у меня пока не реализована. Может продолжем с ввода-вывода?
Последний раз редактировалось Lisitsin; 28.05.2014 в 08:14.
А CPIR и CPDR в тесте и нету, поэтому будем продолжать по списку.
Пока пишу про группу INI, несколько вопросов. Есть ли подвижки в правильности/стабильности работы Бейсика? Осталась ли проблема с загрузкой программ с ленты? Можете ли загрузить zexall? Если можете, подтверждает ли он наш прогресс? И как с загрузкой и работой игр, с которыми раньше были проблемы?
---------- Post added at 19:20 ---------- Previous post was at 18:54 ----------
Условие для INI то же, что для CPI, но для начала трассировки управление должно пройти через PC=#8976.
Для этих инструкций лучше MEMPTR посчитать до вычисления флагов. Для INI и INIR MEMPTR получает значение BC-1, для IND и INDR -- значение BC+1. Здесь BC -- это значение регистра до декремента B.
Флаги:
- SF и флаги 3 и 5 копируются из соответствующих разрядов регистра B (после его декремента).
- ZF выставляется как результат проверки регистра B (после его декремента) на равенство нулю.
- PF выставляется как флаг четности для 8-разрядного значения, которое вычисляется так. Берем младшую половину MEMPTR (после его установки как описано выше), прибавляем к нему значение, прочитанное из порта. Назовем эту промежуточную сумму "cf". Затем берем три младших разряда этой суммы и делаем XOR с регистром B (после его декремента). Вот для этого сумасшедшего числа и считаем четность, и выставляем PF.
- HF и CF. Если сумма "cf" дает переполнение (то есть, было переполнение при 8-разрядном сложении младшей половины MEMPTR с регистром B), тогда взводим HF и CF. Иначе, оба флага сброшены.
- NF копируем из старшего разряда значения, прочитанного из порта.
Higgins ZX Spectrum Emulator 8.10 alpha 3 available
Please write us to report a bug or request a feature.
Значит дело такое: самая большая продвижка по бейсику была последняя - страниц 15 назад. Бейсик вообще был нестабилен. Сейчас стоит как вкопанный. Есть один постоянный глюк, проявляется при загрузке с ленты: с первого раза нет автоматического старта загрузчика. Zexall вообще не грузится (приложение). ROBOCOP при старте игры или виснет или сбрасывается в бейсик. Есть простенькая игрушка - feenix - она работает.
Последний раз редактировалось Lisitsin; 28.05.2014 в 08:14.
Вопрос: а куда читается при этом байт из порта? В А?
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)