Вход

Просмотр полной версии : Вектор-06Ц: Эмуляция - КР580ВМ80А



Ramiros
20.08.2008, 12:33
ZEman

2. Небольшое "плавание" длительности интервала между прерываниями. Это, конечно, заметно только в тестах и в отдельных демах, но все же. К слову, в эмуляторе Ramirosа нет такого "плавания", но у него в прерывание укладывается чуть больше (совсем чуть-чуть) команд, чем на реале (либо у меня чуть-чуть тормозной Вектор:)).

дело в том что нет точной информации по времени выполнения команд на векторе в виду особенностей системной шины (которые я кстати недавно учел) поэтому правило округления до краных 4-м тактов работает почти всегда, но бывают и исключения например команда MOV R,R выполняется процессором за 5 тактов, но реально из за задержек системной шины - 8, а команда MOV R,M - 7 тактов, но это совсем незначит что за 8 тактов она будет выполнена а вероятно за 12.

ivagor
20.08.2008, 12:56
Ramiros
А информация из Вектор-USER 15 чем не точна? Там есть опечатки (call), но в целом вроде нормально.

Ramiros
20.08.2008, 13:35
ivagor, эту газету я нечитал, к сожалению, в следующей версии сделаю поправки

Добавлено через 8 часов 5 минут
прокололся я немного по тактам на командах SHLD,XTHL,CALL,RST,RET, поэтому и чуть больше команд выполнялось за интервал между прерываниями. в новой версии будет исправлено.

ivagor
21.08.2008, 20:45
Ramiros
Это мелочь, но хорошо помню, что "Тест устройств" в "тесте базового микропроцессора" давал на моем экземпляре вектора (астраханский, 91 г. выпуска) такие цифры
623 тыс. оп. - в твоем эмуляторе 624
748 тыс. оп. - в твоем эмуляторе 749
Это мизерное расхождение, но досовский эмулятор Романа Пантелеева показывает цифры из левой колонки, значит есть еще какая-то тонкость, которую можно учесть.

Ramiros
22.08.2008, 07:37
Господа, у меня к вам такой вопрос: есть ли у кого нибуть достоверная информация по недокументированым командам 580-го процессора?
потому как та инфа, которая у меня похоже неточная и команда с кодом $FD явно не CALL, т.к. из за этой команды неработает KOLOBIHA.rom.
Програмисты тех времен меня мягко говоря убивают своим изобилием недокументированых команд в своих распоковщиках игр, это наверное чтобы трудней было взломать игры...

Tim0xA
22.08.2008, 10:43
Господа, у меня к вам такой вопрос: есть ли у кого нибуть достоверная информация по недокументированым командам 580-го процессора?
потому как та инфа, которая у меня похоже неточная и команда с кодом $FD явно не CALL, т.к. из за этой команды неработает KOLOBIHA.rom.
Програмисты тех времен меня мягко говоря убивают своим изобилием недокументированых команд в своих распоковщиках игр, это наверное чтобы трудней было взломать игры...
Процессор уже изучен вдоль и поперек, очень сомневаюсь я, что опкод $FD принадлежит другой команде, в инете была бы уже инфа об этом.
Интересно другое - использованием недокументированных команд i8080A программисты обрекли массу софта на несовместимость, ибо при замене процессора на Z80А все результаты их труда можно было просто выбросить. Та же "колобиха" не работает в эмуляторе b2m в режиме Z80, что собственно и ожидалось.

svofski
27.08.2008, 00:16
Господа, у меня к вам такой вопрос: есть ли у кого нибуть достоверная информация по недокументированым командам 580-го процессора?
потому как та инфа, которая у меня похоже неточная и команда с кодом $FD явно не CALL, т.к. из за этой команды неработает KOLOBIHA.rom.


А откуда подозрение, что именно $FD какая-то не такая? В Башкирии $FD исполняется как CALL и Колобиха работает.

Проверил и у себя. $FD ($DD, $ED) как CALL у меня исполняется (заодно и все NOP-ы, JMP и RET -- стандартный набор), а Колобиха не работает все равно. Значит, дело в чем-то еще.


Програмисты тех времен меня мягко говоря убивают своим изобилием недокументированых команд в своих распоковщиках игр, это наверное чтобы трудней было взломать игры...
Посмотрим, как ты взвоешь когда сделаешь дисковод и попробуешь запустить SkyNet. Я вот до сих пор выть перестать не могу =) Все программы как программы, а эта просто адъ.

svofski
27.08.2008, 11:46
b2m, мои "недокументированные" инструкции:


08h, 10h, 18h, 20h, 28h, 30h, 38h - NOP
0CBh - JMP
0D9h - RET
0DDh, 0EDh, 0FDh - CALL


Эти точно совпадают с твоим эмулятором, сидел вчера в SID-е и проверял. Может быть я что-то еще забыл? (Чорт бы меня побрал за то, что стал использовать готовый процессор. Лучше бы свой написал, хоть бы знал кого убивать за глюки.)

b2m
27.08.2008, 12:37
b2m, мои "недокументированные" инструкции
Ну и у меня так-же.

svofski
27.08.2008, 12:39
Ну и у меня так-же.

Спасибо. Значит, вилы. Хоть садись и приклеивай хардверный дебаггер.

Ramiros
28.08.2008, 12:42
колобиха заработала с $FD=CALL
звук подправил немного, теперь в eric и firerescue все ок

Tim0xA
28.08.2008, 12:58
колобиха заработала с $FD=CALL
звук подправил немного, теперь в eric и firerescue все ок

Можно качать...

Ramiros
21.10.2008, 13:14
b2m, еще хотелось бы знать какие в твоем эмуле команды проца формируют сигнал обращения к стеку, т.к. это важно при работе с рамдиском?
у меня следующие: PUSH,POP,XTHL,SPHL,CALL,RET,RST

ivagor
21.10.2008, 13:48
Ramiros
Если не секрет, для чего в SPHL формировать сигнал обращения к стеку?

svofski
21.10.2008, 15:33
b2m, еще хотелось бы знать какие в твоем эмуле команды проца формируют сигнал обращения к стеку, т.к. это важно при работе с рамдиском?
у меня следующие: PUSH,POP,XTHL,SPHL,CALL,RET,RST

На самом деле все очень просто -- если инструкция имеет цикл чтения или записи из стека, значит формируется сигнал STACK. Это описано в даташите от i8080A, даже расписано какие именно M-циклы работают со стеком. SPHL в твоем списке и правда лишний, остальные вроде да. Не забудь, что CALL и RET бывают условными.

Ramiros
21.10.2008, 16:31
Пардон, SPHL написал случайно :)

b2m
21.10.2008, 18:33
Присоединяюсь к вышесказанному.

ivagor
17.03.2009, 09:03
Вчера нашел свои векторовские кассеты, спаял шнурок, начал оцифровывать.
Pillars, который сейчас оцифровал, совпал с тем, который оцифровывал 8 лет назад, что неудивительно. Удивительно то, что не работает ни в VV ни в b2m.

Удалил вложение, т.к. теперь pillars есть в картотеке
Pillars (http://sensi.org/%7Esvo/scalar/ware/484/)

ZEman
17.03.2009, 09:40
может дамп битый (неправильный) ?

ivagor
17.03.2009, 14:42
может дамп битый (неправильный)
Т.е. участок ленты испортился таким образом, что это не определяется контрольной суммой? Теоретически это возможно, точно сказать можно только если на реале попробовать.

Tim0xA
17.03.2009, 17:20
Интересно, что в конце файла Pillars есть фраза "НЕ ТРОЖЬ МЕНЯ ИЗНУТРИ !!!" Таким нехитрым приемом автор предостерегает нас от взлома его программы. И что удивительно, это ему удается!

Tim0xA
17.03.2009, 20:18
Поставлена точка в вопросе о работоспособности "Pillars" (скриншоты с реала).

Ramiros
18.03.2009, 19:57
Tim0xA, а ты pillars какой грузил, сделаный из ROM с помощью конвертора, или ту запись которая в архиве с реальной кассеты?

Tim0xA
18.03.2009, 20:07
Tim0xA, а ты pillars какой грузил, сделаный из ROM с помощью конвертора, или ту запись которая в архиве с реальной кассеты?
Сделанный из ROM с помощью конвертора.

Ramiros
18.03.2009, 20:32
Кто нибуть в отладчике пытался вкурить где Pillars залетает, я толко понял что он переносит себя с первого блока на нулевой, а дальше начинается какой то бред, непонятные операции, в общем дальше ничего непонял, ясно только одно - к портам В/В обращений нет, к RAM диску и другим устройствам тоже, так что наиболее вероятно что проблема в эмуляции самого процессора

Ramiros
20.03.2009, 20:05
Определена причина, по которой Pillars нехочет работать в эмуляторах, ее корень заключается в следующем...

программа зашифрована по определенному алгоритму, расшифровка происходит через стековые операции начиная с конечного байта и двигаясь к начальному (младшему)

организован следующий алгоритм переходов в зависимости от полученного результата вычитания:
...
...
SUB D
MVI A,00h
PUSH PSW
...
RET

где адрес возврата равен слову состояния после команды SUB, а по этим адресам расположены алгоритмы декодирования очередного байта программы.
одно неверное состояние какого либо флага приводит к ошибке декодирования и соответственно неработоспособному коду.
Нужна достоверная информация по формированию каждого флага в данной операции! я так думаю что команда SUB была выбрана неспроста, уж очень она неоднозначна и покрыта мраком. если у кого что то есть, нестесняйтесь, выкладывайте...

ivagor
20.03.2009, 21:08
Учитывая, что есть живые компьютеры с КР580 - Векторы и ПК8000, достаточно просто получить ответ на вопрос по особенностям установки флагов после sub. Нужно для каждой комбинации уменьшаемого и вычитаемого сохранить значение регистра флагов, получится файлик на 64 Кб (или, если влезать в детали, 2 по 32). Потом этот файлик сравнивается с тем, что выдает аналогичная программа в эмуляторе и при сравнении несовпадений находятся закономерности.
Сорри, если сказал слишком очевидные вещи.

b2m
20.03.2009, 22:18
адрес возврата равен слову состояния после команды SUB
Маньяк.

Ramiros
21.03.2009, 19:53
Учитывая, что есть живые компьютеры с КР580 - Векторы и ПК8000, достаточно просто получить ответ на вопрос по особенностям установки флагов после sub. Нужно для каждой комбинации уменьшаемого и вычитаемого сохранить значение регистра флагов, получится файлик на 64 Кб (или, если влезать в детали, 2 по 32). Потом этот файлик сравнивается с тем, что выдает аналогичная программа в эмуляторе и при сравнении несовпадений находятся закономерности.
Сорри, если сказал слишком очевидные вещи.

У меня в распоряжении такого добра к сожалению нет, да и с трудом себе представляю как выдернуть из вектора такой файл. Даже если проделать такую работу, я неуверен, что флаги после какой нибуть другой команды невлияют на результат, т.к. после обнаруженного ИЗВРАТА я дальше в коде разбираться нестал.

ivagor
21.03.2009, 20:48
Можно принять меры по "изоляции" влияния исследуемой команды, в этом случае запуск одного и того же кода в эмуляторе и на реале позволит по крайней мере для данной команды увидеть расхождение в установке флагов, если оно есть. Потом, при необходимости, можно проверить и остальные команды.
Детали практической реализации - на векторе, как мне кажется, проще всего было бы запустить "выявлятель различий" в мониторе-отладчике и потом перегнать сгенерированный массив флагов через магнитофонный выход - звуковую карту. Придется делать в 2 захода, т.к. 64 Кб разом в памяти (без КД) не разместишь. На ПК8000 все аналогично, только подгружать ничего, кроме самого "выявителя различий" не нужно, бейсик позволит выгрузить.
Нужен доброволец с работающим реалом.

Tim0xA
21.03.2009, 23:49
Нужен доброволец с работающим реалом.
ivagor, готовь тест :)

ivagor
22.03.2009, 07:43
Tim0xA
Итак, состряпал нечто похожее на тест установки флагов командой sub d (легким движением руки превращается в тест других подобных команд)
Нужно делать 4 прогона, записывая по адресу 830B команды lxi h,0000 (так исходно); lxi h,8000; lxi h,00FF; lxi h,80FF (младший байт - то, что будет в регистре флагов перед sub d; старший - исходное значение рег-ра A, в ходе теста оно будет увеличено на 127).
Тест предлагаю делать в Мониторе 3.5, тем более он у тебя прошит в ПЗУ. Стартуем в режиме 1 (9400-9FFF, E000-FFFF)
На всякий случай желательно сделать XS и задать 100, хотя это вроде только для трассировки, а так стек устанавливается отдельно.
Загружаем (или набираем) testpsw.
Запуск C8300
В адресах 0200-81FF теперь лежит результат
Задаем имя IPSW0000
Выгружаем W200,81FF

Потом остальные варианты - модифицируем команду по адресу 830B - исходно было lxi h,0000; потом делаем lxi h,8000; lxi h,00FF; lxi h,80FF
Желательно задавать имя сохраняемого файла аналогично аргументу lxi h - PSW0000, PSW8000, PSW00FF, PSW80FF

После загрузки в PC и сохранения как участка памяти из VV можно объединить фрагменты, например так
copy /b psw8000 + psw0000 psw00
copy /b psw80FF + psw00FF pswFF
(логичнее объединять именно так, т.к. стек идет от старших адресов к младшим, и при таком объединении не будет "скачка аргументов" на стыке)

В качестве примера я приложил результаты прогонов в VV (на ВМ80, ВМ1 и Z80) и в TDV (там только ВМ80).
Как нетрудно убедиться, VV и TDV при выполнении sub d обрабатывают флаги совершенно одинаково.
Также видно, что ВМ80, ВМ1 и Z80 устанавливают флаги по разному :)
Обнаружилась, как я считаю, неточность в эмуляции ВМ1 - sub d влияет на флаг MF (бит 3), поэтому pswVV_00_vm1 и pswVV_FF_vm1 одинаковые. По моим представлениям на MF должны влиять только команды SMF0, SMF1 и POP PSW, поэтому pswVV_00_vm1 и pswVV_FF_vm1 должны отличаться значением бита 3 в каждом байте.

Если я что-то не учел, не заметил или ошибся - поправьте, ведь есть шанс совершить прорыв в точности эмуляции КР580ВМ80 :)

Tim0xA
22.03.2009, 13:31
ivagor, выполнил тесты, три выгрузил (в приложении), на четвертом комп притормозил, запись была нарушена, но в ней похоже уже нет смысла, т.к. судя по результатам тестов в эмуляции ВМ80А нужно проинвертировать флаг вспомогательного переноса AC.

ivagor
22.03.2009, 14:04
Вон оно как оказалось...

Tim0xA
22.03.2009, 16:05
Чтож, теперь ждем вердикта от Ramiros-а, что он скажет...

b2m
22.03.2009, 17:01
Действительно, достаточно инвертировать флаг доп. переноса в командах вычитания:

ivagor
22.03.2009, 17:30
Выяснение этого вопроса заняло примерно 9 лет :)

Ramiros
22.03.2009, 19:21
Всем спасибо! совместными усилиями мы это сделали! :)

Добавлено через 11 минут
Весь прикол похоже в том, что ВМ80 в командах вычитания сначало внутренне получает дополнительный код вычитаемого, а потом вместо вычитания делает сложение. Наверное к ВМ1 это тоже относится. Кстати косяк с флагом MF в ВМ1 действительно был, но он сидел в команде POP PSW.

b2m
22.03.2009, 19:45
И что теперь делать с командой DAA? Оставить так, как есть?

Ramiros
22.03.2009, 20:31
И что теперь делать с командой DAA? Оставить так, как есть?

Оставить как есть, она после вычитания должна работать неправильно, это нормально :)

Tim0xA
22.03.2009, 21:52
В Векторе на Altera DE1 тот же глюк. Pillars - не работает.

Tim0xA
23.03.2009, 17:28
Если верить тесту CPU (см. образ диска в приложении), то даже на данном этапе корректная эмуляция ВМ80А еще не достигнута. Жаль, что у меня нет квазидиска (чтобы запустить МикроДОС) и я не могу получить результаты этого теста на реале. Если прогнать тест на версиях VV 5.70 и 5.71, то виден глюк с флагом AC, в версии 5.70 тест именно на ней останавливается. В версии 5.71 тоже обнаруживается ошибка в флаге AC, но видимо, проблема уже в эмуляции другой команды.
Примечание: тест выполняется довольно долго.

Tim0xA
23.03.2009, 17:33
Хотелось бы уточнить, как сейчас эмулируется команда CMP, учтен ли там флаг AC?
http://www.nedopc.org/forum/viewtopic.php?t=8790&postdays=0&postorder=asc&highlight=daa&start=15

b2m
23.03.2009, 19:21
У меня учтён.

Jons
23.03.2009, 19:39
прогонял тест на версиях 5.70 и 5.71 вроде одно и тоже выдаёт(может не там и не то смотрю?)

Ramiros
23.03.2009, 22:13
Хотелось бы уточнить, как сейчас эмулируется команда CMP, учтен ли там флаг AC?
http://www.nedopc.org/forum/viewtopic.php?t=8790&postdays=0&postorder=asc&highlight=daa&start=15

да учтен, также и в sbb, sui, sbi

Tim0xA
26.03.2009, 00:24
Сегодня вспомнил, что в монитор-отладчике можно запускать программы МикроДОС. Поддерживаются функции ввода с клавиатуры и вывод на экран. Это позволило запустить тест CPU (который я выкладывал ранее) на реале. Тест подтвердил полноценность моего процессора, но в большей степени доказал свою собственную состоятельность, т.е. ему можно верить. Становится совершенно очевидно, что над эмуляцией ВМ80А еще нужно поработать.

b2m
26.03.2009, 00:45
Запустил тест, выдало, что после INR флаг AC должен быть установлен, а у меня судя по всему - не меняется. Почитал Шахнова - и правда нужно устанавливать...

Добавлено через 1 час 4 минуты
Исправил AC в команде INR, он теперь зараза виснет, а это хуже, придётся разбираться, что он там такое хотел проверить...

Tim0xA
26.03.2009, 10:49
В описании одной из 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?do=project&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....

Ramiros
26.03.2009, 22:13
к сожалению тест невыдает объективного результата, где искать в каких инструкциях. c Z80 в этом плане гораздо лучше, все флаги давно прощюпаны и в инете много информации в виде формул.

Ramiros
26.03.2009, 22:23
после исправления DCR стал выдавать следующее (см. картинку)

где эту ошибку искать даже незнаю, метод научного тыка несработал к сожалению.

b2m
27.03.2009, 00:07
А по моему всё предельно ясно:
инструкция 27 00 00 DAA NOP NOP
регистр флагов 16h
должен быть 06h
регистр (акк.) до инструкции 56h
номер теста ...

Т.е. регистр AC в команде DAA установлен неверно.

Tim0xA
27.03.2009, 00:25
Оказалось, что тест Келли Смита не так уж и крут, каким его представляют. Ошибок AC он не видит в упор.

b2m
27.03.2009, 00:33
Любая хорошая игра тестирует процессор не хуже теста Келли Смита, pillars например :)

Tim0xA
27.03.2009, 02:08
Ха, буржуев до сих пор терзает вопрос эмуляции i8080, критика в адрес Келли Смита была таки обоснована, флаг AC будоражит умы наших зарубежных коллег: http://groups.google.com/group/comp.os.cpm/browse_thread/thread/f7b5eb429432a8e4/0355cc755d930d77?lnk=raot&pli=1
И вот еще один тест от автора гуглева топика http://www.sunhillow.eu/8080exerciser/

Tim0xA
27.03.2009, 02:37
Ох и долго считает этот "8080 CPU Exerciser". Сейчас идет тест на реале и в VV параллельно. Реал - жуткий тормоз, а у VV проц на 12МГц. Различия уже видны, но что к чему, фиг поймешь. Видимо, придется оставить тестирование на ночь.

Tim0xA
27.03.2009, 11:02
Вы будете смеяться, но утром оказалось, что ПиСюк досчитал тест до конца и завис! Так что его скриншот я не снял. А вот Вектор - молодцом, закончил тестирование и по прежнему бодро мигал курсором в мониторе! Но тест надо будет повторить в другом режиме экрана, а то не все результаты видны на скрине. Вообщем, все, бросаю эту глючную ПиСишную технику, возвращаюсь на надежный проверенный старый добрый Вектор! :v2_lol:

Да, стоит отметить, что "8080 CPU Exerciser" - это сырой продукт и на реале не испытан самим автором, поэтому надписи "ЦРЦ ЕЬПЕЦТЕД ФОУНД ERROR" - не принак глючности моего КР580ВМ80А.

Ramiros
27.03.2009, 20:21
А по моему всё предельно ясно:
инструкция 27 00 00 DAA NOP NOP
регистр флагов 16h
должен быть 06h
регистр (акк.) до инструкции 56h
номер теста ...

Т.е. регистр AC в команде DAA установлен неверно.

Спасибо, сразу до меня недоперло как понимать эту циферу :)

Ramiros
28.03.2009, 19:07
а как вам это:

Ramiros
28.03.2009, 19:10
команды ANA, ORA, XRA с флагом AC че нить делают? я думал что он должен сбрасываться, в другой литературе написали что он неизменяется (в чем я очень сомневаюсь, и в доказательство этому тест виснет).

Tim0xA
29.03.2009, 00:05
а как вам это:
Тест предполагает, что в регистре флагов должно быть 59H? Прикольно :)

команды ANA, ORA, XRA с флагом AC че нить делают? я думал что он должен сбрасываться, в другой литературе написали что он неизменяется (в чем я очень сомневаюсь, и в доказательство этому тест виснет).
В доке на асм от вектора ни слова не сказано о влиянии этих команд на АС. У Шахнова сказано, что команды ORA и XRA устанавливают AC в 0 , а вот у команды ANA влияние на AC почему-то считается неопределенным. На nedopc.org было сказано о различии в команде ANA для i8080 и i8085:
ANA/ANI : C=0, AC=1 (8085) or AC=A3|B3 (8080)

b2m
29.03.2009, 00:56
Бит b1 в регистре флагов не может быть 0, физически. Полагаю, это результат другой ошибки, из-за которой сам тест неправильно работает.

Tim0xA
29.03.2009, 03:36
Бит b1 в регистре флагов не может быть 0, физически.
Кстати, а почему вообще в регистре флагов ВМ80А бит b1 равен "1", а b3 и b5 равны "0"? Какие у разработчиков процессора были предпосылки в выборе именно таких состояний? Какие есть физические различия в реализации битов и могут ли быть (хотя бы гипотетически) аномальные состояния, отличные от базовых?

Добавлено через 8 минут
Только что при помощи теста ivagor-a проверил команды ANA, XRA, ORA в эмуляторе VV 5.71 и на реале. ORA и XRA в эмуляторе и на реале дают одинаковый результат, а вот для ANA флаг AC тоже нужно инвертировать!

b2m
29.03.2009, 13:53
Странный он, этот тест, сегодня не виснет :)
Никто не пробовал дважды запускать его в моём эмуляторе? На первый раз ругается на команду DAA, а второй раз говорит, что всё ОК :)
Появилось подозрение, что зря я запоминаю, какая была последняя операция: сложение или вычитание. Выкинул, и вот результат:

Ramiros
29.03.2009, 21:39
Только что при помощи теста ivagor-a проверил команды ANA, XRA, ORA в эмуляторе VV 5.71 и на реале. ORA и XRA в эмуляторе и на реале дают одинаковый результат, а вот для ANA флаг AC тоже нужно инвертировать!

Инверсия положительного результата недала. А вот у меня другая информация: после команды ANI и ANA M AC=1, а после команды ANA R АС=5-му биту R, что подтверждает положительный результат теста.

Добавлено через 7 минут
Обновил VV 5.72 исправил эмуляцию ВМ80А и сделал чтобы дискеты "невыподали" после закрытия эмулятора

Tim0xA
29.03.2009, 23:33
Инверсия положительного результата недала. А вот у меня другая информация: после команды ANI и ANA M AC=1, а после команды ANA R АС=5-му биту R, что подтверждает положительный результат теста.
Не совсем понятно, ты принял к сведению мою информацию или проигнорировал и сделал по-своему? Проверил 5.72 - тест CPUTEST действительно проходит, но тест ivagor-а (спасибо ему еще раз) показывает, что команда ANA по-прежнему выполняется неправильно. Прилагаю скриншоты, как доказательство. Первые два скриншота с реала, вторые два из VV. b2m - на очереди, приготовиться ;)

b2m
30.03.2009, 00:33
b2m - на очереди, приготовиться ;)
Завтра будет последняя версия на сайте. Сам убедишься, что второй скриншот с реала и у меня в эмуляторе совпадают :)

Ты бы лучше проверил команду DAA, для разных сочетаний A, CY и AC. Интересует и результат, и регистр флагов.

Tim0xA
30.03.2009, 01:41
Ты бы лучше проверил команду DAA, для разных сочетаний A, CY и AC. Интересует и результат, и регистр флагов.
Беглый просмотр результатов ivagor-теста не выявил в VV никаких проблем с DAA. В твоем эмуляторе проверю уже на новой версии. На закуску будет стресс-тест "8080 instruction executioner" :v2_devil:, для которого уже есть результаты с реала (считались несколько часов). Если после него будут различия, будем копать дальше, пока вам не надоест :)

Ramiros, есть пожелания по Rom2wav:
1. Не конвертируются файлы размером меньше 256 байт. Пусть конвертор сам добивает их до 256 байт нулями.
2. Нужна опция для указания адреса загрузки (первый байт адреса в HEX и он же номер блока в HEX). Например, чтобы сделать WAV для теста CPU, который грузится с 0x8300 мне пришлось делать огромный Wav для диапазона 0x100-0x83ff.
3. В диалог выбора файлов нужно добавить маску *.*
Выполнение этих трех пунктов позволит более шустро грузить тесты в реал, так что сделай, пожалуйста, если не затруднит.

ivagor
30.03.2009, 07:23
Доработка ROM2WAV - дело полезное, но если ограничиться задачей быстрой загрузки testPSW или производных от него (причем именно в формате ROM, смысл чего мне неизвестен), то проще изменить стартовый адрес теста на 100h.
А DAA я бы протестировал так
11355
Все сочетания слагаемых не проверяются, мне кажется это излишне. Проверяются 0+(0...255) и 255+(0...255). Результат с адреса 7E00 до 81FF (длина 400h). В результат входит и аккумулятор и регистр флагов.
Приложил результат прогона в VV 5.71

ivagor
30.03.2009, 09:19
Все же сделал полный вариант теста. Используются все возможные варианты значений регистра флагов, у которых биты 5,3,1 соответственно равны 0,0,1, поэтому их не 256, а 32. Результат с адреса 4200h по 81FFh (длина 4000h).
Приложил результат прогона в VV 5.71, в TDV получилось абсолютно также.

b2m
30.03.2009, 10:57
Беглый просмотр результатов ivagor-теста не выявил в VV никаких проблем с DAA.
Учитывая то, что AC у него формируется неверно, странно.


В твоем эмуляторе проверю уже на новой версии.
Новая версия на сайте.

Tim0xA
30.03.2009, 12:09
Доработка ROM2WAV - дело полезное, но если ограничиться задачей быстрой загрузки testPSW или производных от него (причем именно в формате ROM, смысл чего мне неизвестен), то проще изменить стартовый адрес теста на 100h.
Я загружаю данные в монитор реала используя временный выход в загрузчик, без промежуточной подготовки WAV-файлов (или прямой загрузки) в MON-формате из эмулятора.

Новая версия эмулятора VV на сайте.

Добавлено через 13 минут

Все же сделал полный вариант теста.
Вечером прогоню на реале - отпишусь.

Ramiros
30.03.2009, 20:08
Не совсем понятно, ты принял к сведению мою информацию или проигнорировал и сделал по-своему? Проверил 5.72 - тест CPUTEST действительно проходит, но тест ivagor-а (спасибо ему еще раз) показывает, что команда ANA по-прежнему выполняется неправильно. Прилагаю скриншоты, как доказательство. Первые два скриншота с реала, вторые два из VV. b2m - на очереди, приготовиться ;)

Я же говорю, если оставить ANA как в версии 5.71 и просто проинвертировать флаг АС, то тест непроходит, значит это неправильно, значит ты гдето разницу просто незаметил. Сделал я по своему, я неутверждаю что это истина, но покрайней мере тест проходит, мне интересно как у b2m этот флаг расчитывается?

Добавлено через 4 минуты
DAA я тоже исправил, описание ее работы (флага АС) есть в базовой книжке от вектора по ассемблеру. могу сказать точно, что 8080 незапоминает вычитание или сложение было до команды DAA в отличии от Z80.

svofski
30.03.2009, 20:44
Я немножко опоздал, мне штрафную пожалуйста.

Сейчас попробовал для затравки инвертировать бит АС в команде "-1" в ALU. Тест №11 пролетел, но обломалось дальше. Кто мне поможет интерпретировать результат теста:

Instruction sequence was 070000H
Register f contains 46H
But should contain 59H
Register value before instruction sequence was 56H
Test Number 0015H

Вроде b2m уже все разобрал, инструкция была RLC, аккумулятор был 56H, получилось 46H в флагах вместо ожидаемых 59H.

Я сижу с даташитом от 8080, карандашом и бумажкой и никак не могу понять, как в регистре F может оказаться число 59H. Бит 3 должен быть всегда "0", бит 1 всегда "1". С такими битами девятка в младшем нибле не получается.

Ramiros
30.03.2009, 20:49
svofski, Это похоже глюк теста, просто если команда заработает правильно, то тест пройдет дальше

b2m
31.03.2009, 00:19
Я же говорю, если оставить ANA как в версии 5.71 и просто проинвертировать флаг АС, то тест непроходит, значит это неправильно, значит ты гдето разницу просто незаметил. Сделал я по своему, я неутверждаю что это истина, но покрайней мере тест проходит, мне интересно как у b2m этот флаг расчитывается?
Ничего инвертировать не надо. В командах 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 )

Tim0xA
31.03.2009, 05:49
Реальные результаты теста TestDAAfull и тест команды ANA с результатами (real,vv571,vv572).

svofski
31.03.2009, 15:47
svofski, Это похоже глюк теста, просто если команда заработает правильно, то тест пройдет дальше
Да вот странно это, что именно в команде RLC может быть неправильного. Или RLC из сообщения никакого отношения к ошибке не имеет?

b2m
31.03.2009, 17:40
Как я и предполагал, у меня были ошибки эмуляции DAA. Теперь, надеюсь, нету. По крайней мере тест ivagor-а совпадает с реальными данными, спасибо ему.

Отдельное спасибо Tim0xA-е, за реальные данные.

Tim0xA
31.03.2009, 18:35
b2m, поздравляю! Тест "8080 instruction exerciser" в последней версии эмулятора дал результаты, идентичные реальным. На сегодняшний день я не знаю таких тестов, которые могли бы выявить расхождения между реалом и твоей симуляцией ВМ80А. Вектор можно убирать в шкаф. Все результаты в виде скриншотов выложены. Ramiros и svofski, не сдаваться! :)

Ramiros
31.03.2009, 18:57
Tim0xA, выложил бы ты этот тест :) сегодня к вечеру новая версия будет готова ;)

Tim0xA
31.03.2009, 19:05
Tim0xA, выложил бы ты этот тест :) сегодня к вечеру новая версия будет готова ;)
http://www.sunhillow.eu/8080exerciser/

ZEman
31.03.2009, 19:16
так что, типа в эмуляции вектора можно ставить точку, или же какоето развитие эмулей ещё ожидается ? :)

ZEman
31.03.2009, 19:24
ну Ramiros, например может чтото добавить ещё, помнится ктото просил добавить эмуляцию жёсткого диска в эмуль.
а я надеюсь на добавление реплеев и может даже игры по сети.
...ну по крайней мере помечтать то можно :)

Ramiros
31.03.2009, 21:53
Tim0xA, Готова новая версия VV 5.73. Обновил конвертор Rom2Wav

Добавлено через 1 минуту
исправлены ANA/ANI, DAA. DAA сам проверил в тесте ivagora, вроде полностью совпала с реалом.

Добавлено через 2 часа 17 минут

Да вот странно это, что именно в команде RLC может быть неправильного. Или RLC из сообщения никакого отношения к ошибке не имеет?

Не если тест ругается на код данной команды, значит ошибка именно в ней, но в регистре флагов тест иногда хочет видеть нереальные значения :) . А у тебя команды сдвига влияют только на CY ? остальные флаги должны оставаться без изменения.

Tim0xA
01.04.2009, 03:20
Эмулятор и Rom2wav на сайте.

Ramiros, по Rom2wav ты указание адреса загрузки не делал? Если еще нет, то было бы удобно сделать, как в эмуляторе: по маске файла *.rXX, где XX - номер блока загрузки в HEX.

Добавлено через 38 минут
VV 5.73 выдержал тест "8080 instruction exerciser" :)

Ramiros
01.04.2009, 08:44
Tim0xA, если расширение файла не ROM, R0M или COM то конвертор сам предложит ввести адрес загрузки.

Добавлено через 10 часов 50 минут
Tim0xA, У тебя на сайте в новостях типа первоапрельская шутка про версию? :)

Ramiros
02.04.2009, 21:22
Ramiros, по Rom2wav ты указание адреса загрузки не делал? Если еще нет, то было бы удобно сделать, как в эмуляторе: по маске файла *.rXX, где XX - номер блока загрузки в HEX.


Готова новая версия Rom2Wav v.1.8
Добавлена такая поддержка.
Вот краткая инструкция:
Если открываемые файлы имеют расширение rom или com то Wavы делаются с первого блока, если r0m то с 0-го блока, если rXX то с ХХ-ного блока, ну а если расширение неапознано т.е. любое другое, то конвертер предлогает ввести адрес для загрузки от 0 до FFFF.
Если файлы rom,com,r0m имеют длинну более 48 кБ, то конвертер предложит их обрезать до 48 кБ, но можно и отказаться от этого.

Tim0xA
02.04.2009, 22:12
Исправил ссылку на эмулятор. Выложил конвертер на сайт.

maxkit
23.04.2009, 17:42
Кстати, ни у кого случайно не завалялась таблица времён исполнения Вектором команд КР580? Я когда-то составлял для себя опытным путём, но таблица утеряна.

Tim0xA
23.04.2009, 17:55
Я ориентировался на эту таблицу http://www.itwas.ru/radio/rk/commands.html с поправкой на число тактов, кратное 4м. Есть еще таблица тут http://www.sensi.org/~svo/scalar/ware/573/

maxkit
23.04.2009, 18:26
Спасибо! По 1-й таблице нельзя ориентироваться, т.к., например, там PUSH - 11, POP 10, казалось бы, оба укладываются в 12, но на практике PUSH - 16. Т.е. там какой-то цикл был более 4-х тактов. А во 2-м файле - вроде бы, всё так.

svofski
18.09.2009, 15:00
Pillars можно только загрузить из WAV-a? Если переименовать его в .com и запустить с диска в b2m, он не запускается. Запускается только если сделать File->Open->pillars.rom. В чем тонкость?

svofski
18.09.2009, 16:04
Вона как. А ты рисуешь картинку, когда загружаешь rom?

b2m
18.09.2009, 17:07
Пардон, это какая-то другая игра так делает. А с этой игрухой были лишь проблемы эмуляции проца. Собственно с этого и началась эта тема. Но кто-же начало-то читает, когда 8 страниц уже :)

А в VV запускается из МикроДоса? Если тоже нет, то может Ramiros что-нибудь подскажет, он на этом собаку съел, пока выяснял, почему pillars не работает.

svofski
18.09.2009, 18:37
Я вот почитал. Спасибо Tim0xE, что вытащил в отдельную тему. А то сначала же вообще было невозможно :)

Если проблема Pillars только в проце, то непонятно, отчего она не запусается из МикроДОС-а?

Я в очередной раз прочесал T80 (как же я ненавижу этого динозавра), в этот раз вооруженный тестами. Теперь у меня cputest.com говорит CPU TESTS OK, а 8080-еьец, задумавшись на какие-то часа 3-4, показывает всю ровно ту же цифирь, что и реал. Pillars я гружу из вав-файла.. Но они у меня не запускаются.

К Ramiros-у просьба по поводу rom2wav: сделай в конце вава паддинг на секунду где-то, а то некоторые плееры, которых у меня почему-то большинство, любят от вавов проглотить последние доли секунды.

ivagor
18.09.2009, 19:41
Пардон, это какая-то другая игра так делает.
bolder так делает (может и еще какие)

svofski
18.09.2009, 19:53
ivagor, твой pill.com запустился! Что ты сделал, поделись секретом?

ivagor
18.09.2009, 20:09
"секрет" - очистка памяти перед запуском. При запуске с того образа диска, который я использовал (t34+co), память при старте игрушки замусорена (у тебя наверно тоже), а ее содержимое, насколько я понимаю, используется при расшифровке игрушки.

svofski
18.09.2009, 20:12
Любопытно. Если память не изменяет, у меня загрузчик подпатчен, чтобы не чистилась память: мне это было актуально для отладки. Вот может быть почему. Может быть выложить .com в картотеку тоже?

ivagor
18.09.2009, 20:16
Может быть выложить .com в картотеку тоже?
Пароль к базису не могу найти (после переустановки системы), может сам выложишь?

Tim0xA
18.09.2009, 20:21
Любопытно. Если память не изменяет, у меня загрузчик подпатчен, чтобы не чистилась память: мне это было актуально для отладки.
Чтобы не очищалась память, в загрузчике можно удерживать УС при нажатии ВВОД+БЛК. Этого будет достаточно для отладки, от патча можно отказаться.

Выложи новую корку T80, я начал было сам править, кое-какие ошибки успел найти, по тесту CPUTEST продвинулся, но так как ты уже решил эту проблему, я потерял к ней интерес. Теперь хочу сравнить и посмотреть, что ты сделал.

svofski
18.09.2009, 20:36
Tim0xA, svn update ;)


Log message

T80/8080 Mode (Mode 2) CPU Fixes:
1. ALU-based subtractions have AC flag inverted, SUB/SBB/DCR...
2. RRC/RLC/RAL/RAR only modify C flag
3. STC/CMC/CMA do not change AC flag
4. ALU AND operation sets AC flag to (BusA(3)|BusB(3))
5. DAD instruction does not modify AC flag
6. RESET does not change Flags, SP and Accumulator, only PC is set to zero

The fixes above make this core pass all known 8080 CPU tests.
Results of 8080 Executioner match those of real CPU, tested on Vector-06c with
KR580VM80A.

Audio clocks are generated by another PLL for the time being: tape loading
didn't work otherwise.


Affected files
expand all collapse all
Modify /trunk/src/T80/T80.vhd diff


Modify /trunk/src/T80/T80_ALU.vhd diff


Modify /trunk/src/altmodules/mclk14mhz.v diff


Modify /trunk/src/clockster.v diff

ivagor
18.09.2009, 20:48
Там столько ошибок было? Офигеть! svofski - уважаю.

svofski
18.09.2009, 20:54
Строго говоря, это не ошибки, а неучтенные различия между Z80 и 8080. Оно и понятно, автор T80 прежде всего писал Z80.

ivagor
18.09.2009, 20:59
Строго говоря, это не ошибки, а неучтенные различия между Z80 и 8080. Оно и понятно, автор T80 прежде всего писал Z80.
не по всем пунктам уверен на 100%, но вот эти
2. RRC/RLC/RAL/RAR (однобайтные) only modify C flag
3. STC/CMC/CMA do not change AC flag
5. DAD instruction does not modify AC flag
насколько я знаю должны также работать и на z80

b2m
18.09.2009, 21:02
5. DAD instruction does not modify AC flag
Спорное утверждение. Если AC был равен еденице, то да, а вот если он был равен нулю и младшая цифра была больше 9, то он станет равным еденице. По крайней мере у меня так.

ivagor
18.09.2009, 21:04
Похоже мой справочник по z80 надо фтопку.

svofski
18.09.2009, 21:14
Спорное утверждение. Если AC был равен еденице, то да, а вот если он был равен нулю и младшая цифра была больше 9, то он станет равным еденице. По крайней мере у меня так.
Ты уверен? Как бы такое проскочило мимо еьецутора?

Сейчас посмотрел, обычный у меня был загрузчик, один из TimSoft-овских 2к. Взял на всякий случай тот, что в картотеке. Как будто бы тот же результат: не грузится.

Tim0xA
18.09.2009, 21:17
Tim0xA, svn update ;)
1,2,4 я сам исправил, как раз на DAD остановился, когда узнал о твоих успехах :)

svofski
18.09.2009, 21:24
ХРРР! Пересобрал целиком с boots.bin из картотеки, орининальный Пилярс загрузился с магнитофона! Можно проапдейтить zagr512.hex (имя файла историческое =)

Tim0xA
18.09.2009, 21:39
Ты уверен? Как бы такое проскочило мимо еьецутора?
Похоже, вы о разных вещах говорите, ты о DAD, а b2m о DAA. Что касется DAA, то она сделана именно так, как говорит b2m. Так что все вроде бы корректно.

b2m
18.09.2009, 22:06
Похоже, вы о разных вещах говорите, ты о DAD, а b2m о DAA.
Блин, пора очки покупать :)

svofski
18.09.2009, 22:12
Отлегло :)

А чего в этой игре делать-то надо? Чего-то я что стою, что еду, что стреляю, что не стреляю, столбы стоят ровно и ничего на самом деле не происходит. Какой-то вертолетик скачет на горизонте и какой-то счетчик чего-то считает. Это все, или я упускаю что-то важное?

---------- Post added at 22:12 ---------- Previous post was at 22:11 ----------

В смысле на столбы-то я еду.. Просто непонятно, какова их роль.

b2m
18.09.2009, 22:15
Столбы надо объезжать, а в вертолётик стрелять :)

Tim0xA
18.09.2009, 22:21
Интересная цитата из книги "Программирование на языке ассемблера для микропроцессоров 8080 и 8085" Л.Левенталь, У.Сэйвилл, 1987
Наверное, это самое детальное описание проблемы DAA (или, вернее сказать, проблемы АЛУ, которае проявляется в DAA):

http://pic.ipicture.ru/uploads/090918/15427/ObK3X67420.jpg
http://pic.ipicture.ru/uploads/090918/15427/NmG3TS4ERv.jpg

INR вроде как не вызывал никаких проблем, а DAD не должен влиять на флаг AC.

svofski
18.09.2009, 22:24
INR вроде как не вызывал никаких проблем и что подразумевается под "двойным сложением"? Два сложения подряд?

Может быть как раз DAD и подразумевался?

Tim0xA
18.09.2009, 22:32
Может быть как раз DAD и подразумевался?
Да, я уже понял, DAD - Double Add. Только при чем он здесь - непонятно.

Есть ли какой-нибудь документальный источник, в котором описано, что AND/ANI реализуется именно так:
4. ALU AND operation sets AC flag to (BusA(3)|BusB(3))
Мы-то знаем, но интересен пруфлинк.

svofski
18.09.2009, 22:41
Ну просто на всякий случай, чтобы кто-нибудь не подумал, что можно сделать десятичную коррекцию после DAD. DAD должен быть SP и цыц.

Tim0xA
18.09.2009, 23:26
Вообще-то на INR были жалобы
http://www.nedopc.org/forum/viewtopic.php?t=8790&postdays=0&postorder=asc&highlight=daa&start=15
В эмуляторах и DE1 связка INR + DAA работает, как задумывалось. Эх, жаль нет вектора рабочего, нельзя проверить, как оно в железе.

b2m
19.09.2009, 12:13
В эмуляторах и DE1 связка INR + DAA работает, как задумывалось.
Вопрос только в том, устанавливается ли AC после INR. У меня устанавливается.

svofski
19.09.2009, 14:59
В T80 тоже устанавливается. Мне кажется, что автор книги имел под рукой примерно столько же компьютеров на 8080-м процессоре, сколько мы имеем сейчас. Возможности проверить вовремя у него не было и он обобщил все в безопасную сторону.

Иначе выходит, что в 8080 отдельная дорожка для INR/DCR, которая минует АЛУ. Это легко представить для 16-битных инструкций, которые вообще вписать было тяжело в общую канву, но зачем бы делать что-то отдельное для инструкции, суть которой сложить регистр с константой? То есть сделать то, что АЛУ уже прекрасно делать умеет.

С другой стороны, сложить любой регистр с константой и положить результат в тот же регистр. Можно ли было в 8080 переключить шины таким образом, чтобы результат АЛУ попал при этом не в аккумулятор — вот в чем вопрос. Если нельзя, то отдельная дорожка для INR/DCR оправдана. Я не очень в это верю, но все могло быть. Tim0xA, доставай уже паяльник и чини Вектор :)

---------- Post added at 14:59 ---------- Previous post was at 14:48 ----------

Так, ну вот, написал — теперь можно и почитать. Оказывается все, что мы гадаем, было расписано в 1976-м году. Просто это было давно и далеко. Итак, читаем, 8080 Instruction Set Summary (http://www.altair32.com/pdf/8080inst.pdf) например, про инструкцию ANA:


...бла бла бла...
The CY flag is cleared and AC set (8085), The CY flag is cleared and AC set to the OR'ring of bits 3 of operands (8080)



DAD...
Only the CY flag is affected



INR r
All condition flags except CY are affected.

(Еще на мысль о реюзе АЛУ с задвиганием результата наводит то, что в 8080 INR/DCR требуют 5 циклов на исполнение)


CMA
No flags are affected



STC,CMC
CY is set/complemented. No other flags are affected


Ну и так далее. Про AC после вычитания дополнительных ремарок, правда, нет. А остальное вполне все прозрачно.

Tim0xA
19.09.2009, 16:23
Итак, читаем, 8080 Instruction Set Summary например, про инструкцию ANA:
Ну хоть на это есть документальное подтверждение. Могли бы и в Intel 8080 Assembly Language Programming Manual (http://www.altair32.com/pdf/8080%20Assembly%20Language%20Programming%20Manual. pdf) об этом упомянуть, но почему-то не стали.

Вообщем, пока про инверсию флага AC в командах вычитания нигде информации не обнаружено, можно считать, что это наше коллективное форумное открытие. svofski, переводи все на английский и пиши в Intel - может нам нобеля дадут. 35 лет народ истины не знал, все на DAA валили ;)

svofski
19.09.2009, 16:31
Я пока написал только Ивану Варфоломееву, автору 8080 Еьерцисера. Послал ему скриншоты и вообще расписал какие вы все тут молодцы. Он очень рад -- по-моему у него до сих пор не было данных с реальных процессоров.

---------- Post added at 16:31 ---------- Previous post was at 16:29 ----------


Имеется: Вектор-06Ц (2шт), Вектор-06Ц.02 (2шт)
Паяльник уже горяч? |:)

Tim0xA
19.09.2009, 23:36
Я пока написал только Ивану Варфоломееву, автору 8080 Еьерцисера. Послал ему скриншоты и вообще расписал какие вы все тут молодцы. Он очень рад -- по-моему у него до сих пор не было данных с реальных процессоров.
Ивану - респект, его тест очень крут.



Паяльник уже горяч? |:)
Все четыре Вектора нерабочие, а паяльник холоден, как лед. Приезжай, вместе починим :v2_cheer:

svofski
20.09.2009, 04:17
Иван ожил от наших результатов. Сидит хакает свой эмулятор прямо в хаку: чего-то у него в DAA не сходится. Знакомо, да? Респекты передал.

Эх, когда я соберусь :D Но паяльник ты все-таки начинай греть.

svofski
23.09.2009, 20:31
Ян проапдейтил Еьерсисер и страничку результатов:
http://www.idb.me.uk/sunhillow/8080exerciser/index.html
Как всегда, в области никому не нужного барахла мы впереди планеты всей. Ни одного компьютера с оригинальным 8080 пока не обнаружилось :D


Exerciser for a KR580VM80A CPU baseline

This Russian CPU is, supposedly, a gate level clone of the original Intel 8080 (and from the results here it looks quite likely that is an accurate description). It will be nice to confirm this by comparing the exerciser results from other 8080 CPUs.

Many thanks to Alexander Timoshenko who ran the exerciser on a Vector-06c and provided some screenshots of the results. He, and some other Vector-06c fans, also tracked down a problem that seems to be a common error among 8080 emulators; my emulation certainly failed because of it! Thanks also to Viacheslav Slavinsky who forwarded the results to me, and provided some extremely helpful advice.

AlecV
23.09.2009, 22:13
А насколько наш КР580ВМ80А точный клон i8080 ? Вроде как его скалывали 1:1 сошлифовкой.

У меня есть заводская дока на наш КР580ВМ80А. Не поможет ?

svofski
23.09.2009, 22:16
Я капаю на моск всем ютубберам, которые хвастаются своими работающими компами на 8080. Тест-экзесисер очень дотошный, так что мы скоро все узнаем.

DDp
25.09.2009, 20:02
Ян проапдейтил Еьерсисер...
Прогнал на Радио-86РК. Ок.

Tim0xA
29.09.2009, 23:30
Вообще-то на INR были жалобы
http://www.nedopc.org/forum/viewtopi...t=daa&start=15
В эмуляторах и DE1 связка INR + DAA работает, как задумывалось. Эх, жаль нет вектора рабочего, нельзя проверить, как оно в железе.
Проверил на "железе", INR эмулируется верно.

Ramiros
08.10.2009, 15:57
Чето у меня растровые эффекты в разных прогах с разной фазы получаются, немогу свести к общему знаменателю, походу у меня какая то команда выполняется больше или меньше тактов чем на самом деле. b2m, если нежалко, огласи свою растактовку.

b2m
08.10.2009, 16:07
Растактовка указана в Вектор-USER 15 стр. 3 (http://www.emulator3000.org/Books/VU/VU15/VU15-3.djvu)

Ramiros
08.10.2009, 16:11
Растактовка указана в Вектор-USER 15 стр. 3 (http://www.emulator3000.org/Books/VU/VU15/VU15-3.djvu)

я знаю, но там не все верно.
или напиши какие неверно написаны

b2m
08.10.2009, 16:24
Там, вроде, только одна опечатка: CALL ADR 17 24
Я не думаю, что у кого-либо возникли сомнения по поводу этой опечатки :)

---------- Post added at 17:24 ---------- Previous post was at 17:19 ----------

Вот ещё от коллеги svofski эта же статья (http://code.google.com/p/vector06cc/wiki/Instruction_Timings)
Там исправлено.

Tim0xA
08.10.2009, 16:30
Есть еще опечатка: вместо "ORA R 4 4" написано "ORA M 4 4".

b2m
08.10.2009, 17:30
Ай-яй-яй, и у svofski тоже :)

svofski
08.10.2009, 19:26
Поправил. Вообще этой таблицей я только для отсчета улиток пользуюсь.

Ramiros
08.10.2009, 19:30
при выходе из режима HALT по прерыванию дополнительно 4 такта тратятся или нет?

svofski
08.10.2009, 19:32
Есть еще опечатка: вместо "ORA R 4 4" написано "ORA M 4 4".
Между прочим, ты мог и сам поправить =)

b2m
08.10.2009, 20:42
при выходе из режима HALT по прерыванию дополнительно 4 такта тратятся или нет?
Для Вектора - не принципиально, всё равно все циклы по 4 такта. Главное соблюсти момент возникновения прерывания, чтобы "луч экрана" всегда в этот момент был в одной и той-же точке.

Ramiros
08.10.2009, 21:16
Для Вектора - не принципиально, всё равно все циклы по 4 такта. Главное соблюсти момент возникновения прерывания, чтобы "луч экрана" всегда в этот момент был в одной и той-же точке.

почему я об этом спрашиваю - как я понимаю любой растровый эффект должен начинаться с выхода по прерыванию из режима HALT, если же проц в режим останова незагонять, то прерывание может возникнуть в тот момент когда выполняется инструкция более 4 тактов, и произойдет сдвиг программы относительно луча на N кратное 4 тактов, что будет вызывать дрожжание картинки, или я неправ?

svofski
08.10.2009, 22:24
Скорее всего так и есть. Вряд ли есть программы с растровыми эффектами, которые не ждали бы прерывания в HLT. Впрочем, после b2m'овского рассчета съезда задержки по таймеру я уже ничему не удивляюсь: так ведь можно и вообще без прерывания растровые эффекты делать.

Tim0xA
13.10.2009, 14:05
На сайте http://www.idb.me.uk/sunhillow/8080exerciser/index.html обновление. Появились результаты и тесты для 8085 и 8080.

Tim0xA
13.10.2009, 18:07
http://forum.ixbt.com/topic.cgi?id=8:21341-3


когдато ходили байки что проц 8080 украли и везли на подводной лодке, америкосы на своих подводных лодках гнались, но не догнали


По байкам лодку догнали и окружили, но наши какимто способом выкрутились - проц толи вертолетом из под носа америкосов забрали, толи еще както, подробности истории уже не помню, чтото там весёлое вобщем было
А проц потом скопировали, вначале даже не разбирались особо в его схемотехнике, потом разобрались и начали свои модификации делать.
:v2_laugh:

ivagor
13.10.2009, 18:18
Это взрыво-мозговая ветка.
Меня на этой странице (http://forum.ixbt.com/topic.cgi?id=8:21341-4) удивила фраза "Была даже примерная копия TI TMS9918A - 1809ВГ3 (16-битный „контроллер ЭЛТ“)"
Хотя учитывая процент пурги, который там есть, это скорее опечатка.

AlecV
21.10.2009, 00:24
"Была даже примерная копия TI TMS9918A - 1809ВГ3 (16-битный „контроллер ЭЛТ“)" Эта информация есть в книжке "Все отечественные микросхемы" изд.Додэка

http://publ.lib.ru/ARCHIVES/D/%27%27DODEKA%27%27/_%27%27DODEKA%27%27.html

стр.112

ivagor
21.10.2009, 07:20
Спасибо, я в первый раз настолько не поверил, что даже искать не стал. Еще здесь одну строчку инфы нашел: http://www.laborant.ru/el_kompon/023.htm. А так по всем ссылкам только данные о соответствии 1809ВГ3 и 9918, в продаже их нигде не увидел. Непонятно, когда они производились, в каком количестве, да и производились ли вобще.
Странно, что для российских условий скопировали (?) 9918A, который выдает композитный сигнал NTSC с 525 строками.
Еще удивительнее с 16 разрядностью. Сложили разрядность шин данных чтения и записи в видеопамять? Еще бы прибавили разрядность шины для связи с процессором, получили бы 24 :)

Tim0xA
23.10.2009, 13:03
http://velopiter.spb.ru/forum/index.php?t=msg&goto=439467&rid=0


при повторе 580ВМ80 были обнаружены странные глюки (ошибки проектирования), наши подумали, что где-то недоглядели и плохо скопировали. После этого наши микросхему доработали и сделали 580ВМ80А.
Дальше уже американцы занимались точно тем же, послойно сошлифовывали наш чип и фотографируя (электронным микроскопом) топологию каждого слоя, после чего долго удивлялись и восторгались, как здорово советские электронщики внесли в топологию интелевского процессора около 50 улучшений и исправили несколько десятков американских ошибок. Дальше америкозы быстренько свернули выпуск i8080 и выпускали i8080A
:v2_clap2:

ivagor
24.10.2009, 14:58
Надеюсь, никто не думал, что уже все сэмулировано точно?
Сделал тестик 13887, который проверяет, сколько команд выполнится между прерываниями. Там не все команды, надоело их вбивать. А для тестирования jmp, call, ret и т.п. надо доделывать. Вот результат с реала:
13884
Тест прогонял 2 раза, результаты оба раза абсолютно идентичные, поэтому привел только 1 картинку.
Как оказалось, до сих пор можно программно отличить реал от эмуляторов. Мало того, можно отличить b2m от VV.
EI - это жесть, похоже во всех эмуляторах при выполнении (или после выполнения) EI проверяется приход прерывания, даже если следующая команда тоже EI. А на реальном КР580 при выполнении EI приход прерывания не проверяется, у меня так и в книжке написано. В итоге, пока область EI в тесте не заканчивается, прерывание не обрабатывается.

ivagor
24.10.2009, 15:44
Чтобы картина была более полной, сделал вариант теста 13888, в котором перед тем как пойдет основная группа команд добавлен один nop. Результат с реала:

ivagor
24.10.2009, 17:15
Последняя проверка - заменил EI на EI + NOP (генерацию соответственно поправил) - стало как в эмуляторе - 1D38. Т.е. когда EI разбавлены NOPами процессор может после NOPа все же обработать прерывание.
Надеюсь, уважаемые разработчики эмуляторов учтут эту особенность КР580.

b2m
24.10.2009, 23:42
Вот убей не помню, зачем я в mov a,a сделал 4 такта как у NOP, но это оказалось неправильно :)

ivagor
25.10.2009, 10:37
Доделываю тест (добавляю команды и немного повышаю универсальность), попробовал в эмуляторах с z80. Растактовка z80 для вектора вызывает уныние и в b2m (все совсем плохо) и в VV (некоторые команды). Зато в b2m для z80 реализована особенность обработки прерываний при выполнении ei.
Текущий вариант теста работоспособен до 6 МГц включительно, в связи с этим обнаружилась проблема с последними версиями b2m. Конфиг вектора с z80 на 6 МГц еще работает в версии 06.10.2009 и уже не работает в версии 12.10.2009. Это не связано с тестом, просто конфиг не запускается.

Ramiros
25.10.2009, 11:38
Надеюсь, никто не думал, что уже все сэмулировано точно?
Сделал тестик 13887, который проверяет, сколько команд выполнится между прерываниями. Там не все команды, надоело их вбивать. А для тестирования jmp, call, ret и т.п. надо доделывать. Вот результат с реала:
13884
Тест прогонял 2 раза, результаты оба раза абсолютно идентичные, поэтому привел только 1 картинку.
Как оказалось, до сих пор можно программно отличить реал от эмуляторов. Мало того, можно отличить b2m от VV.
EI - это жесть, похоже во всех эмуляторах при выполнении (или после выполнения) EI проверяется приход прерывания, даже если следующая команда тоже EI. А на реальном КР580 при выполнении EI приход прерывания не проверяется, у меня так и в книжке написано. В итоге, пока область EI в тесте не заканчивается, прерывание не обрабатывается.

Хм.. интересная особенность, правда я нигде невстречал ни слова об этом :)

---------- Post added at 13:38 ---------- Previous post was at 13:34 ----------

ivagor, ты хочешь сказать что это относится и к Z80? а к ВМ1 это условие тоже применимо?

ivagor
25.10.2009, 12:17
Хм.. интересная особенность, правда я нигде невстречал ни слова об этом
Отсканировал фрагмент книжки 13893, стр. 61-62.


ivagor, ты хочешь сказать что это относится и к Z80?
По z80 datasheet (http://files.mail.ru/1084GL). Стр. 14 бумажного документа (стр. 10 pdfa) - табличка. У EI и DI звездочки, снизу примечание
*indicates interrupts are not sampled at the end of EI or DI


а к ВМ1 это условие тоже применимо?
По ВМ1 вряд ли удастся найти источники, только проверять на реале, если он будет. Еще 1821ВМ85 меня интересует.

b2m
26.10.2009, 10:48
Как оказалось, до сих пор можно программно отличить реал от эмуляторов.
Исправлено.

Tim0xA
26.10.2009, 10:55
VV 5.94 на сайте!
Исправлена система прерываний.

---------- Post added at 09:55 ---------- Previous post was at 09:52 ----------

ivagor, респект за тесты!
Кстати, как подключил Вектор? Через тюнер? Делал ли доработку синхронизации?

ivagor
26.10.2009, 14:08
b2m и Ramiros - спасибо за доработки.
Однако разница с реалом осталась. Если приглядитесь к картинке с результатами spdtest, для 8 тактных команд наблюдются колебания в одну команду:
ADD M, MOV M, MVI R - 1D38
INR R, INX, MOV R, SPHL - 1D39
Проверял несколько раз - результат аналогичный, т.е. для определения реал/эмулятор это можно использовать. Я не утверждаю, что именно эти команды всегда выполняются "чуть быстрее" или прерывание для них таинственным образом "растягивается", скорее всего это результат стечения каких-то обстоятельств. Если добавить один nop (см. spdtest2) то результаты становится гладкие как в эмуляторе (скриншот с результатом spdtest2). Есть какие-нибудь идеи почему так происходит?


Кстати, как подключил Вектор? Через тюнер? Делал ли доработку синхронизации?
Через тюнер. Синхру не дорабатывал, зажал на векторе яркость, кадры медленно плывут. Записываю короткий фрагмент, выбираю оттуда "правильный" кадр. Такая вот технология. Купил 2 155ЛЕ1, теперь надо искать, кто мне ее впаяет.

b2m
26.10.2009, 14:20
Я не утверждаю, что именно эти команды всегда выполняются "чуть быстрее" или прерывание для них таинственным образом "растягивается", скорее всего это результат стечения каких-то обстоятельств. ... Есть какие-нибудь идеи почему так происходит?
Закономерность только одна: команды в первой строке выполняются на "нормальном" процессоре за 7 тактов, во второй - за 5. Видимо, это как-то влияет на возникновение прерывания. Точнее, это влияет на то, какая команда будет "ждать" пару тактов - последняя до прерывания, или первая после.

ivagor
26.10.2009, 14:23
Закономерность только одна: команды в первой строке выполняются на "нормальном" процессоре за 7 тактов, во второй - за 5.
Да уж, мощно я стормозил. Можно еще так сказать - команды в первой строке требуют 2 доступа к памяти, а во второй - 1, хотя может это не так важно, как то что они на 2 такта медленнее.

b2m
26.10.2009, 14:24
Фишка в том, что в случае 5-ти тактовой команды три такта ожидания достаются следующей за ней команде, а в случае 7-ми тактовой - один такт самой команде (при выборке операнда).

ivagor
26.10.2009, 16:36
Если продолжить сдвигать фазу начала теста, то там период 8 тактов:
spdtest - есть разница 5 и 7 тактовых
spdtest2 - нет разницы 5 и 7 тактовых
добавим еще nop - есть разница 5 и 7 тактовых
добавим еще nop - нет разницы 5 и 7 тактовых
...

b2m
26.10.2009, 18:52
Зависит от того, на какой байт 7-ми тактовой команды выпадает момент возникновения прерывания.

svofski
28.10.2009, 03:06
Я могу сделать у себя 100% как на реале в обоих случаях, но тогда видео неминуемо съезжает как было до улиточных исправлений.

b2m
28.10.2009, 23:58
После переделки системы прерываний я наблюдаю у себя какие-то глюки, связанные с тем, что необработанный запрос на прерывание так и висит, и срабатывает после разрешения прерываний. Однако запрос на прерывание через какое-то количество тактов снимается, и если за это время разрешения прерываний не было, то оно и не должно возникнуть. Никто не задавался вопросом, как долго активен сигнал INT?

---------- Post added at 01:58 ---------- Previous post was at 01:45 ----------

Разобрался, вроде. Запрос снимается запрещением прерываний, т.е. либо когда процессор начал обработку, либо по команде DI. О как.

svofski
29.10.2009, 00:00
Разобрался, вроде. Запрос снимается запрещением прерываний, т.е. либо когда процессор начал обработку, либо по команде DI. О как.
Я в свое время пришел к такому же выводу. Запрос сбрасывается сигналом INTE.

Ramiros
29.10.2009, 12:32
После переделки системы прерываний я наблюдаю у себя какие-то глюки, связанные с тем, что необработанный запрос на прерывание так и висит, и срабатывает после разрешения прерываний. Однако запрос на прерывание через какое-то количество тактов снимается, и если за это время разрешения прерываний не было, то оно и не должно возникнуть. Никто не задавался вопросом, как долго активен сигнал INT?

---------- Post added at 01:58 ---------- Previous post was at 01:45 ----------

Разобрался, вроде. Запрос снимается запрещением прерываний, т.е. либо когда процессор начал обработку, либо по команде DI. О как.

Я тоже сначало этим вопросом задался, а потом посмотрел схему, и стало все ясно :)

b2m
30.10.2009, 11:24
Блин, с комбинацией Вектор+Z80 конфуз вышел, прерывания вообще пропали, пришлось сегодня опять обновить эмулятор на сайте.

Tim0xA
02.11.2009, 23:09
Прогнал тесты скорости на своем векторе. Выложил в картотеку очередную версию Vector Speed Test (http://www.sensi.org/~svo/scalar/ware/787/) от ivagor-а

ivagor
06.11.2009, 22:26
По результатам проверки самопала Vadikа обратил внимание на одну вещь, которую я не совсем верно написал в readme к vst (мог бы и раньше обратить, в b2m z80 также работает). Tim0xA, если не сложно, поправь:
Было:
"Максимальная тактовая частота, до которой (включительно) тест будет корректно определять быстродействие всех команд - 6,5 МГц."
Надо сделать:
"Максимальная тактовая частота, до которой (включительно) тест будет корректно определять быстродействие всех команд - 5,7 МГц."

Vadik
07.11.2009, 11:55
извеняюсь,может не по теме. А как в эмуляторах в конфигурации с Z80 сбрасывается тригер прерывания? Ведь у z80 нет выхода INTE.

ivagor
07.11.2009, 12:28
Vadik, а ты смотрел схемы адаптеров z80 для вектора?
Омский (http://sensi.org/~svo/scalar/ware/569/) - обязательно посмотри дополнение по поводу доделывания обработки прерываний в Вектор-USER (http://sensi.org/~svo/scalar/ware/572/), номер 28-29, стр. 6 (страница 118 djvuшного документа)
Владимирский (http://sensi.org/~svo/scalar/ware/570/)
Кишиневский (http://sensi.org/~svo/scalar/ware/571/)

Vadik
07.11.2009, 12:45
Спасибо большое, я просто забыл про эти схемы. Попробую сделать по "Омски"

ivagor
07.11.2009, 13:03
Насколько я понимаю, исходный вариант обработки прерываний в Омском адаптере (опубликован в Вектор-USER 26-27) не годится, если запускать программы, использующие команды z80 с префиксами. Доработка из Вектор-USER 28-29 нормальна для 3 МГц, а для других частот - не факт.

Ramiros
08.11.2009, 13:23
Обновил VV, поправил команду MOV B,B в ВМ80 и ВМ1, она у меня выполнялась за 0 тактов :), команда типа как пустая, но она же есть.
ВМ1 тоже скоректировал в плане прерываний.

Tim0xA, Обнови эмуль

ivagor
08.11.2009, 13:58
Ramiros, подправишь несколько растактовок для z80? Если ориентироваться на Вектор-USER 15 (хотя можно взять любую доку с растактовками по циклам) и результаты vst (названия команд приведу как у КР580, надеюсь это никого не смутит :) ):
... - есть у тебя/должно быть
inr m и dcr m - 12/16
ldhl и shld - 16/20
push - 12/16
r* Y - 12/16
xthl - 20/24

---------- Post added at 15:58 ---------- Previous post was at 15:47 ----------

Еще две команды пропустил
c* Y - 20/24
call - 20/24

Tim0xA
08.11.2009, 17:50
Обновил VV, поправил команду MOV B,B в ВМ80 и ВМ1, она у меня выполнялась за 0 тактов , команда типа как пустая, но она же есть.
ВМ1 тоже скоректировал в плане прерываний.

Tim0xA, Обнови эмуль
Готово

Ramiros
09.11.2009, 08:41
Ramiros, подправишь несколько растактовок для z80? Если ориентироваться на Вектор-USER 15 (хотя можно взять любую доку с растактовками по циклам) и результаты vst (названия команд приведу как у КР580, надеюсь это никого не смутит :) ):
... - есть у тебя/должно быть
inr m и dcr m - 12/16
ldhl и shld - 16/20
push - 12/16
r* Y - 12/16
xthl - 20/24

---------- Post added at 15:58 ---------- Previous post was at 15:47 ----------

Еще две команды пропустил
c* Y - 20/24
call - 20/24

Поправил, ждем обновления на сайте :)

Tim0xA
09.11.2009, 13:38
Поправил, ждем обновления на сайте :)

Обновил

svofski
03.12.2009, 17:02
Г-н Alexis прогнал 8080 Exerciser на National Semiconductor INS8080A. Результаты полностью совпадают, поэтому приводить их нет смысла. Скоро будут результаты на AMD 8080A и Intel 8080A, но по-моему не стоит ожидать чего-то шокирующего =)

Ramiros
08.12.2009, 11:51
у меня еще вот такой вот проц лежит, можно сказать нулевый, это предшественник КР580ВМ80А

Ewgeny7
08.12.2009, 18:38
у меня еще вот такой вот проц лежит, можно сказать нулевый, это предшественник КР580ВМ80А
У меня того же года, только другого завода:

ALEXEY.GORDEEV
09.12.2009, 15:13
А у мну старее:v2_tong2:
Я этот процик на улице нашел случайно:v2_laugh:

AlecV
04.01.2010, 22:16
ALEXEY.GORDEEV, :)

http://s50.radikal.ru/i130/1001/9f/b404aa47440ct.jpg (http://radikal.ru/F/s50.radikal.ru/i130/1001/9f/b404aa47440c.jpg.html)

Почему-то дата в другом формате

svofski
24.08.2012, 12:49
А сохранились все тесты, которые мелькали в этой ветке? Как их найти?

ivagor
24.08.2012, 17:25
А можно список огласить? Часть наверно мои были, если найду - выложу.

svofski
24.08.2012, 17:50
ivagor, я таким образом нахаляву надеялся еще и список выудить ;)

ivagor
28.11.2013, 17:00
Слегка доработал экзорциста.
1. Изменен постестовый фрагмент. Теперь должно корректно работать не только на 8080 но и на 8085 и 580ВМ1, причем без индивидуальных масок.
2. Теперь в каждой строке (рассчитано на 80 символов) результаты двух групп команд, что позволяет с большим запасом уместить на одном экране все результаты, без "уезжания" первых двух строк.
3. Немного ускорено вычисление CRC. В целом резервы программы по ускорению еще большие.

Исходник прилагается. В заголовке я никакой инфы не дописал, только выше в посте. Покореженные мной фрагменты отметил так
;!!!{
;!!!}

Заодно просьба к b2m - как я понял, в отладчике emu такты считает 32битный счетчик. Если это так, то желательно бы увеличить до 64 разрядов.

ivagor
05.12.2013, 10:39
Добился ощутимого ускорения - на треть, в абсолютном исчислении аж на 4 часа. Резервы для дальнейшего ускорения определенно еще есть.

ivagor
14.12.2013, 10:31
Почти добился изначально намечавшейся цели - ускорить экзорциста в 2 раза относительно исходного варианта. Резервы для "не почти" есть, но мне как-то надоело.
Косметическое изменение - CRC теперь печатается большими буквами.

Kakos_nonos
14.12.2013, 11:58
А этот экзор только для вектора или можно к любым компам адаптировать?

ivagor
14.12.2013, 13:35
Он для CP/M, ничего специфичного для вектора там нет. Сайт проекта (http://www.idb.me.uk/sunhillow/8080.html). Отмечу, что на сайте нет результатов 1821ВМ85, которые получил dk_spb. Зато там есть интересные результаты AMDшных клонов, которые оказались не 100% клонами.
Важный момент - мои варианты переделаны так, чтобы корректно сохранять значение всех флагов без маскировки. Из за этого результаты на 8080 и подобных будут совпадать с оригинальным вариантом, а на 8085 и КР580ВМ1 будут отличаться в лучшую сторону :)

---------- Post added at 15:35 ---------- Previous post was at 15:22 ----------

От CP/M (или от чего-то эмулирующего CP/M) требуются только ДВЕ функции - печатать текстовой строки и символа.

ivagor
30.12.2013, 20:45
Столкнулся с интересным моментом. Насколько я понял, при очень большой тактовой эмулируемого вектора в emu время прогона ощутимо зависит от быстродействия эмулирующего компа. В результате проскочившая в одном месте абсолютная величина выигрыша обновленного эксисайзера под вопросом, а вот относительные выигрыши по времени примерно верны.

ivagor
19.05.2014, 17:31
Не прошло и полгода - определил время прогона 8080exe7.com на векторе - 1 час 44 минуты и примерно 10 секунд. Замерял в v06cc и VV6.82.

ivagor
19.05.2014, 21:37
Время прогона оригинального эксисайзера на векторе (VV6.82) - 3 часа 1 минута

ivagor
17.08.2014, 19:13
В связи с тестом на специалисте нужно отметить, что измененный посттестовый (после iut) фрагмент в 8080exe7 не для всех компов годится. Он был введен для корректного тестирования продвинутых клонов ВМ80 (ВМ85, ВМ1) и нормально работает на векторе и его клонах, но на специалисте есть проблема с inx sp/dcx sp
Самый простой вариант - откатить изменение постестового фрагмента, т.е. после


iut: ds 4 ; max 4 byte instruction under test

;#idb ld (spat),sp replaced with the following code
;#idb Must be very careful to preserve registers and flag
;#idb state resulting from the test. The temptation is to use the
;#idb stack - but that doesn't work because of the way the app
;#idb uses SP as a quick way of pointing to memory.
;#idb Bit of a code smell, but I can't think of an easier way.

В выложенном exe7 так

;!!!{
shld SetHL1+1
pop h
push psw
xthl
shld spat-2
lxi h,0
; jc temp1 ;jump on the state of the C flag set in the test
dad sp ;this code will clear the C flag (0 + nnnn = nc)
; jmp temp2 ;C flag is same state as before
;temp1: dad sp ;this code will clear the C flag (0 + nnnn = nc)
; stc ;C flage needs re-setting to preserve state
;temp2:
shld spat
;#idb
lxi sp,spat-2
; push psw ; save other registers
push b
push d
; lhld temp
SetHL1:
lxi h,0
;!!!}
push h
А в исходном было так

shld temp
lxi h,0
jc temp1 ;jump on the state of the C flag set in the test

dad sp ;this code will clear the C flag (0 + nnnn = nc)
jmp temp2 ;C flag is same state as before

temp1: dad sp ;this code will clear the C flag (0 + nnnn = nc)
stc ;C flage needs re-setting to preserve state

temp2: shld spat
lhld temp
;#idb

lxi sp,spat
push psw ; save other registers
push b
push d
push h
Т.е. если планируется использовать 8080exe7 не на векторе или его клонах, то лучше вернуть посттестовый фрагмент к исходному виду. При этом выигрыш по скорости останется, но тестирование ВМ1 и ВМ85 будет некорректным, как и с оригинальным эксисайзером.

ivagor
17.08.2014, 21:52
на специалисте есть проблема с inx sp/dcx sp
И даже еще с несколькими группами команд. Причина очевидна - к моменту выполнения фрагмента
push psw
xthl
sp должен указывать на ОЗУ. В векторе очевидно это всегда будет выполняться и поэтому проблем не возникает

esl
17.08.2014, 22:10
И даже еще с несколькими группами команд. Причина очевидна - к моменту выполнения фрагмента
pushpsw
xthl
sp должен указывать на ОЗУ. В векторе очевидно это всегда будет выполняться и поэтому проблем не возникает
Ой а что не так со специалистом?

ivagor
17.08.2014, 22:19
Со специалистом все отлично, просто в старших адресах там ПЗУ и УВВ, что для "нового" посттестового фрагмента не подходит. Старый посттестовый фрагмент работает штатно.