Это я учёл, поэтому у меня так:
Код:def fflag_3(flag):
global flag_3
if not i8080:
flag_3 = flag
def fflag_5(flag):
global flag_5
if not i8080:
flag_5 = flag
def fflag_n(flag):
global flag_n
if not i8080:
flag_n = flag
Вид для печати
Да нет, не так. Флаг сбрасывается только при условии, если переменная i8080 == False. В противном случае данная процедура игнорируется.
Где нибудь этому флагу присваивается значение 1 или по умолчанию 0 и так всегда для 8080?
При инициализации этому флагу присваивается True и, если это i8080 (а не Z80), то этот флаг у меня больше нигде не трогается. Этот момент я проверял, когда искал потенциальные ошибки.
Наверно самый неожиданный флаг 8080 это AC (который H) в ANI/ANA. Если и он правильно реализован, то тогда надо тестом проверять флаги по отдельности.
- - - Добавлено - - -
Переделал один тестик для специалиста. Для пробы тестируются только флаги H(AC) и P, можно и другие потестировать.
Вложение 67435
Эталонные результаты из emu и emu80:
Вложение 67436Вложение 67437
ivagor, огромное спасибо! Это сильно поможет, а то вслепую найти уже, наверное, нереально.
А вот и виновник - команда sbi d8. Причём проблема в обоих флагах. У меня в эмуляторе она ведёт себя точно так же, как sui d8 и cpi d8. И по всем сведениям это корректное поведение. То же самое говорят эталонный эмулятор. Но почему же тогда отличаются результаты теста?
https://pic.maxiol.com/images/154569....testflags.png
"Н" - Невнимательность! Вместо того, чтобы вызывать sbc_a() (вычитание с учётом флагом переноса) в командае sbi d8 я вызывал sub_a() (вычитание без учёта флага переноса)! Причём я сломал это вчера, пока чинил другое. Поправил, и результат не заставил себя ждать! :)
https://pic.maxiol.com/images/154570....flagstest.png https://pic.maxiol.com/images/154569....aluopnnok.png
Я даже не знаю сколько бы у меня ушло времени на поиск проблемы, если бы не тест ivagor. Ещё раз огромное спасибо! Теперь осталось поставить на ночь полный тест и посмотреть, что скажет последняя, самая длительная, секция тестирования.
А ларчик... Впрочем, как обычно.
Существует ли какая-то общепринятая раскладка PC-клавиатуры для Специалиста или кто во что горазд? Особенно интересуют клавиши, которые не буквенные. А то я сразу же клавиши забиндил для Монитора, то есть QWERTY. А потом начал игры запускать и столкнулся с тем, что во всех играх управление жёстко задано и если использовать QWERTY, то вся концепция рушится - для игр непременно требуется JCUKENG. В играх типа DUNGEON используется управление ИТЬБЮ (ITXB@), в ЗООПАРКе что-то своё:
https://pic.maxiol.com/images/1545735788.90463878..png
В общем, чаще всего управление использует физическое расположение клавиш на стандартной клавиатуре Специалиста. А клавиатура Специалиста несколько отличается по физическому размещению клавиш от PC-шной.
Нашёл подходящую тему и решил задать вопрос автору эмулятора emu.
Я тут заметил, что в эмуляторе появилась новая конфигурация "Специалист + SD ATMega8 (alemorf)". Вроде всё хорошо работает, но заметил две ошибки:
1. нет цвета, как бы вообще.
2. не верно выводится имя файла, у которого более 8 символов, например: ivagorti.m0x вместо IvagorTim0xaGam8c.rom, в сокращённом виде нужно так - IvagorT~.rom,