В Векторе на Altera DE1 тот же глюк. Pillars - не работает.
Вид для печати
В Векторе на Altera DE1 тот же глюк. Pillars - не работает.
Если верить тесту CPU (см. образ диска в приложении), то даже на данном этапе корректная эмуляция ВМ80А еще не достигнута. Жаль, что у меня нет квазидиска (чтобы запустить МикроДОС) и я не могу получить результаты этого теста на реале. Если прогнать тест на версиях VV 5.70 и 5.71, то виден глюк с флагом AC, в версии 5.70 тест именно на ней останавливается. В версии 5.71 тоже обнаруживается ошибка в флаге AC, но видимо, проблема уже в эмуляции другой команды.
Примечание: тест выполняется довольно долго.
Хотелось бы уточнить, как сейчас эмулируется команда CMP, учтен ли там флаг AC?
http://www.nedopc.org/forum/viewtopi...t=daa&start=15
У меня учтён.
прогонял тест на версиях 5.70 и 5.71 вроде одно и тоже выдаёт(может не там и не то смотрю?)
Сегодня вспомнил, что в монитор-отладчике можно запускать программы МикроДОС. Поддерживаются функции ввода с клавиатуры и вывод на экран. Это позволило запустить тест CPU (который я выкладывал ранее) на реале. Тест подтвердил полноценность моего процессора, но в большей степени доказал свою собственную состоятельность, т.е. ему можно верить. Становится совершенно очевидно, что над эмуляцией ВМ80А еще нужно поработать.
Запустил тест, выдало, что после INR флаг AC должен быть установлен, а у меня судя по всему - не меняется. Почитал Шахнова - и правда нужно устанавливать...
Добавлено через 1 час 4 минуты
Исправил AC в команде INR, он теперь зараза виснет, а это хуже, придётся разбираться, что он там такое хотел проверить...
В описании одной из FPGA-шных корок i8080 http://www.opencores.org/?do=project&who=cpu8080 сказано следующее:
Где бы еще раздобыть тест Келли Смита?Код:cpu8080 passes the Kelly Smith test, both in simulation and in hardware.
There were 8 different cpu bugs solved by my count, so this is a very
important series of updates. Kelly Smith is an 8080 CPU test created in 1980
under the Microcosm Associates brand name, and donated to the "SIG/M"
CP/M user's group.
Its a very complete CPU test for all flags, modes and instructions, so passing
that is very good for the design.
Добавлено через 4 минуты
Что-то нашлось http://www.classiccmp.org/dunfield/r/test.asm
Добавлено через 15 минут
И даже этот тест - не панацея, ибо тут http://www.opencores.org/index.php?d...&who=light8080 сказано
Код:Update, 8-18-2008:
A microcode bug has been found in INR M that the test bench (and other code I've
been running on it) did not catch....
к сожалению тест невыдает объективного результата, где искать в каких инструкциях. c Z80 в этом плане гораздо лучше, все флаги давно прощюпаны и в инете много информации в виде формул.
после исправления DCR стал выдавать следующее (см. картинку)
где эту ошибку искать даже незнаю, метод научного тыка несработал к сожалению.
А по моему всё предельно ясно:
инструкция 27 00 00 DAA NOP NOP
регистр флагов 16h
должен быть 06h
регистр (акк.) до инструкции 56h
номер теста ...
Т.е. регистр AC в команде DAA установлен неверно.
Оказалось, что тест Келли Смита не так уж и крут, каким его представляют. Ошибок AC он не видит в упор.
Любая хорошая игра тестирует процессор не хуже теста Келли Смита, pillars например :)
Ха, буржуев до сих пор терзает вопрос эмуляции i8080, критика в адрес Келли Смита была таки обоснована, флаг AC будоражит умы наших зарубежных коллег: http://groups.google.com/group/comp....lnk=raot&pli=1
И вот еще один тест от автора гуглева топика http://www.sunhillow.eu/8080exerciser/
Ох и долго считает этот "8080 CPU Exerciser". Сейчас идет тест на реале и в VV параллельно. Реал - жуткий тормоз, а у VV проц на 12МГц. Различия уже видны, но что к чему, фиг поймешь. Видимо, придется оставить тестирование на ночь.
Вы будете смеяться, но утром оказалось, что ПиСюк досчитал тест до конца и завис! Так что его скриншот я не снял. А вот Вектор - молодцом, закончил тестирование и по прежнему бодро мигал курсором в мониторе! Но тест надо будет повторить в другом режиме экрана, а то не все результаты видны на скрине. Вообщем, все, бросаю эту глючную ПиСишную технику, возвращаюсь на надежный проверенный старый добрый Вектор! :v2_lol:
Да, стоит отметить, что "8080 CPU Exerciser" - это сырой продукт и на реале не испытан самим автором, поэтому надписи "ЦРЦ ЕЬПЕЦТЕД ФОУНД ERROR" - не принак глючности моего КР580ВМ80А.
а как вам это:
команды ANA, ORA, XRA с флагом AC че нить делают? я думал что он должен сбрасываться, в другой литературе написали что он неизменяется (в чем я очень сомневаюсь, и в доказательство этому тест виснет).
Тест предполагает, что в регистре флагов должно быть 59H? Прикольно :)
В доке на асм от вектора ни слова не сказано о влиянии этих команд на АС. У Шахнова сказано, что команды ORA и XRA устанавливают AC в 0 , а вот у команды ANA влияние на AC почему-то считается неопределенным. На nedopc.org было сказано о различии в команде ANA для i8080 и i8085:
ANA/ANI : C=0, AC=1 (8085) or AC=A3|B3 (8080)
Бит b1 в регистре флагов не может быть 0, физически. Полагаю, это результат другой ошибки, из-за которой сам тест неправильно работает.
Кстати, а почему вообще в регистре флагов ВМ80А бит b1 равен "1", а b3 и b5 равны "0"? Какие у разработчиков процессора были предпосылки в выборе именно таких состояний? Какие есть физические различия в реализации битов и могут ли быть (хотя бы гипотетически) аномальные состояния, отличные от базовых?
Добавлено через 8 минут
Только что при помощи теста ivagor-a проверил команды ANA, XRA, ORA в эмуляторе VV 5.71 и на реале. ORA и XRA в эмуляторе и на реале дают одинаковый результат, а вот для ANA флаг AC тоже нужно инвертировать!
Странный он, этот тест, сегодня не виснет :)
Никто не пробовал дважды запускать его в моём эмуляторе? На первый раз ругается на команду DAA, а второй раз говорит, что всё ОК :)
Появилось подозрение, что зря я запоминаю, какая была последняя операция: сложение или вычитание. Выкинул, и вот результат:
Инверсия положительного результата недала. А вот у меня другая информация: после команды ANI и ANA M AC=1, а после команды ANA R АС=5-му биту R, что подтверждает положительный результат теста.
Добавлено через 7 минут
Обновил VV 5.72 исправил эмуляцию ВМ80А и сделал чтобы дискеты "невыподали" после закрытия эмулятора
Не совсем понятно, ты принял к сведению мою информацию или проигнорировал и сделал по-своему? Проверил 5.72 - тест CPUTEST действительно проходит, но тест ivagor-а (спасибо ему еще раз) показывает, что команда ANA по-прежнему выполняется неправильно. Прилагаю скриншоты, как доказательство. Первые два скриншота с реала, вторые два из VV. b2m - на очереди, приготовиться ;)
Беглый просмотр результатов ivagor-теста не выявил в VV никаких проблем с DAA. В твоем эмуляторе проверю уже на новой версии. На закуску будет стресс-тест "8080 instruction executioner" :v2_devil:, для которого уже есть результаты с реала (считались несколько часов). Если после него будут различия, будем копать дальше, пока вам не надоест :)
Ramiros, есть пожелания по Rom2wav:
1. Не конвертируются файлы размером меньше 256 байт. Пусть конвертор сам добивает их до 256 байт нулями.
2. Нужна опция для указания адреса загрузки (первый байт адреса в HEX и он же номер блока в HEX). Например, чтобы сделать WAV для теста CPU, который грузится с 0x8300 мне пришлось делать огромный Wav для диапазона 0x100-0x83ff.
3. В диалог выбора файлов нужно добавить маску *.*
Выполнение этих трех пунктов позволит более шустро грузить тесты в реал, так что сделай, пожалуйста, если не затруднит.
Доработка ROM2WAV - дело полезное, но если ограничиться задачей быстрой загрузки testPSW или производных от него (причем именно в формате ROM, смысл чего мне неизвестен), то проще изменить стартовый адрес теста на 100h.
А DAA я бы протестировал так
Вложение 11355
Все сочетания слагаемых не проверяются, мне кажется это излишне. Проверяются 0+(0...255) и 255+(0...255). Результат с адреса 7E00 до 81FF (длина 400h). В результат входит и аккумулятор и регистр флагов.
Приложил результат прогона в VV 5.71
Все же сделал полный вариант теста. Используются все возможные варианты значений регистра флагов, у которых биты 5,3,1 соответственно равны 0,0,1, поэтому их не 256, а 32. Результат с адреса 4200h по 81FFh (длина 4000h).
Приложил результат прогона в VV 5.71, в TDV получилось абсолютно также.
Я загружаю данные в монитор реала используя временный выход в загрузчик, без промежуточной подготовки WAV-файлов (или прямой загрузки) в MON-формате из эмулятора.
Новая версия эмулятора VV на сайте.
Добавлено через 13 минут
Вечером прогоню на реале - отпишусь.
Я же говорю, если оставить ANA как в версии 5.71 и просто проинвертировать флаг АС, то тест непроходит, значит это неправильно, значит ты гдето разницу просто незаметил. Сделал я по своему, я неутверждаю что это истина, но покрайней мере тест проходит, мне интересно как у b2m этот флаг расчитывается?
Добавлено через 4 минуты
DAA я тоже исправил, описание ее работы (флага АС) есть в базовой книжке от вектора по ассемблеру. могу сказать точно, что 8080 незапоминает вычитание или сложение было до команды DAA в отличии от Z80.
Я немножко опоздал, мне штрафную пожалуйста.
Сейчас попробовал для затравки инвертировать бит АС в команде "-1" в ALU. Тест №11 пролетел, но обломалось дальше. Кто мне поможет интерпретировать результат теста:
Вроде b2m уже все разобрал, инструкция была RLC, аккумулятор был 56H, получилось 46H в флагах вместо ожидаемых 59H.Код:Instruction sequence was 070000H
Register f contains 46H
But should contain 59H
Register value before instruction sequence was 56H
Test Number 0015H
Я сижу с даташитом от 8080, карандашом и бумажкой и никак не могу понять, как в регистре F может оказаться число 59H. Бит 3 должен быть всегда "0", бит 1 всегда "1". С такими битами девятка в младшем нибле не получается.
svofski, Это похоже глюк теста, просто если команда заработает правильно, то тест пройдет дальше
Ничего инвертировать не надо. В командах ANA/ANI у меня он устанавливается в ИЛИ третьих битов операндов. Можно даже научно обосновать, почему так происходит.
Очевидно, флаг AC делался с учётом того, что он формируется в операции сложения. Тогда:
a3=0, b3=0 -> AC=0
a3=1, b3=1 -> AC=1
a3=0, b3=1, r3=1 -> AC=0
a3=0, b3=1, r3=0 -> AC=1
a3=1, b3=0, r3=1 -> AC=0
a3=1, b3=0, r3=0 -> AC=1
где a и b - операнды, r - результат
Однако для логического И результат однозначно определяется соответствующими битами и пару строк можно выкинуть, останется:
a3=0, b3=0 -> AC=0
a3=1, b3=1 -> AC=1
a3=0, b3=1, r3=0 -> AC=1
a3=1, b3=0, r3=0 -> AC=1
что и соответствует логическому ИЛИ :)
Если бы в ORA/ORI флаги переноса не обнулялись, то значение AC было бы равно логическому И третьих разрядов. Парадокс :)
Добавлено через 14 минут
Подозреваю, что в процессоре сделано типа так:
AC = (a3 & b3) | ( (a3 ^ b3) & ~r3 )
Реальные результаты теста TestDAAfull и тест команды ANA с результатами (real,vv571,vv572).
Как я и предполагал, у меня были ошибки эмуляции DAA. Теперь, надеюсь, нету. По крайней мере тест ivagor-а совпадает с реальными данными, спасибо ему.
Отдельное спасибо Tim0xA-е, за реальные данные.
b2m, поздравляю! Тест "8080 instruction exerciser" в последней версии эмулятора дал результаты, идентичные реальным. На сегодняшний день я не знаю таких тестов, которые могли бы выявить расхождения между реалом и твоей симуляцией ВМ80А. Вектор можно убирать в шкаф. Все результаты в виде скриншотов выложены. Ramiros и svofski, не сдаваться! :)