Всем привет. Только что запускал R-TYPE. Но корабля не было и через 10 секунд свалился в сбой. Ни у кого не завалялось тестовых программок для проверки эмуляции? Типа для проверки корректности выполнения команд Z80?
всем спасибо.
Всем привет. Только что запускал R-TYPE. Но корабля не было и через 10 секунд свалился в сбой. Ни у кого не завалялось тестовых программок для проверки эмуляции? Типа для проверки корректности выполнения команд Z80?
всем спасибо.
Смотрите в приложении набор утилиток для тестирования. Начать стоит, наверное, с z80tests.
Higgins ZX Spectrum Emulator 8.10 alpha 3 available
Please write us to report a bug or request a feature.
Благодарю, Higgins. Запустил Z80tests и в итоге кругом failed: (да как он вообще у меня работает?)
Последний раз редактировалось Lisitsin; 28.05.2014 в 08:11.
Ну, что, хорошее начало.
Судя по картинке, тест даже не может корректно сообщить об ошибке, то есть проблемы с какими-то основными вещами.
Можно попробовать еще раз глазами внимательно проверить реализации самых первых инструкций в тесте и, если будут найдены ошибки, исправить их и попробовать тест еще раз. Если тест сообщит, что тест для этих инструкции пройден успешно, значит сам код тестирования исполняется верно, и можно продолжать искать ошибки для других инструкций. Иначе, нельзя быть уверенным в том, что код тестирования исполняется верно, и тогда сообщения Failed/Passed не имеют никакого значения. В этом случае следует начать с проверки основных инструкций (арифметика, сравнения и переходы) и флагов (C, Z).
Higgins ZX Spectrum Emulator 8.10 alpha 3 available
Please write us to report a bug or request a feature.
Ну вот, например, SCF: MRIN failed: что это за MRIN? SCF я делаю элементарно:
EX37: CBR F,1<<NN - сбрасываю N
SBR F,1<<CC - устанавливаю с
NOP - коррекция времени выполнения команды
JMP LOOP - возврат в следующий цикл M1
и ещё не ясно что такое expected GRND
А Basic глючит следующим образом: PRINT 10 - в ответ - 1. PRINT 12.21 - в ответ 1.21. Целую часть пишет всегда либо 1 (если >=1) либо 0 (<1). Синус, косинус считает при этом верно. При загрузки программ с кассеты загрузчик стартует только со второй попытки загрузки, а в первый раз выдаёт OK и сваливается в main-loop.
А Basic глючит следующим образом: PRINT 10 - в ответ - 1. PRINT 12.21 - в ответ 1.21. Целую часть пишет всегда либо 1 (если >=1) либо 0 (<1). Синус, косинус считает при этом верно. При загрузки программ с кассеты загрузчик стартует только со второй попытки загрузки, а в первый раз выдаёт OK и сваливается в main-loop.
Последний раз редактировалось Lisitsin; 11.02.2011 в 23:46.
А вот и R-TYPE.
Последний раз редактировалось Lisitsin; 28.05.2014 в 08:11.
А вот и Robocop:
Последний раз редактировалось Lisitsin; 28.05.2014 в 08:11.
MRIN означает, что утилита не может правильно вывести значение контрольной суммы, т.е. ошибки эмулятора приводят к тому, что вместо шестнадцатиричных цифр печатаются неподходящие буквы и токены.
Тест печатает цифры контрольной суммы с помощью RST #10. Для ориентации в коде: само значение контрольной суммы хранится по адресу #9527. По адресам #8926 - #8931 лежит тело цикла тестирования. Процедура по адресу #80F5 печатает значение в HL (собственно, контрольную сумму). Процедура #80FE печатает значение в A. Процедура #810B печатает значение в четырех младших битах A, то есть одну шестнадцатиричную цифру.
Все эти процедуры печати очень простые и не работать там, в общем-то, нечему, за одним исключением: процедура #810B использует DAA. Это для вас должно быть звоночком. Во-первых, потому что проблемы с этой инструкцией -- обычное дело для эмуляторов. Во-вторых, потому что проблемы с печатью чисел в BASIC тоже указывают на возможные проблемы именно с этой инструкцией.
Значит, вопрос такой: как вы считаете результат для DAA?
Higgins ZX Spectrum Emulator 8.10 alpha 3 available
Please write us to report a bug or request a feature.
ScorpEvo ZS 1024 turbo+ CF-HDD/FDD/Mouse/SMUC 3.1/ProfROMse/NeoGS/ZC
Speccy-2007 128/AY/TR-DOS
Сайт с документацией к "Scorpion ZS 256"
Посчитать DAA можно так:
Команда короткая -- 4 такта, поэтому в вашем случае, чтобы выдержать скорость эмуляции, наверное, понадобится вводить таблички.#define PF_LOG(n) ((!PF_LOG4((n)) == !PF_LOG4((n) >> 4)) << PF_BIT)
case 0x27: /* DAA: f(4) */
d = 0x0000;
if((Z80_AF & Z80_CF) || Z80_AF >= 0x9a00) d |= 0x6000, Z80_AF |= Z80_CF;
if((Z80_AF & Z80_HF) || ((Z80_AF & 0x0f00) >= 0x0a00)) d |= 0x0600;
if(!(Z80_AF & Z80_NF)) Z80_AF = ((Z80_AF + d) & 0xff00) |
(((Z80_AF & 0x0f00) >= 0x0a00) << HF_BIT) | (Z80_AF & Z80_CF);
else Z80_AF = ((Z80_AF - d) & 0xff00) |
(((Z80_AF & Z80_HF) && (Z80_AF & 0x0f00) <= 0x0500) << HF_BIT) | Z80_NF | (Z80_AF & Z80_CF);
r = (Z80_AF >> 8);
Z80_AF |= PF_LOG(r) | (!r << ZF_BIT) | (r & (Z80_SF | Z80_XF | Z80_YF));
Нашелся еще один тест на инструкции. Смотрите в приложении.
Higgins ZX Spectrum Emulator 8.10 alpha 3 available
Please write us to report a bug or request a feature.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)