Author |
Message |
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22716 Location: Silicon Valley
|
Кто-то может поделиться программой (ассемблерный код или программа для РК,Ориона,Специалиста и т.д.) для проверки точности эмуляции процессора КР580ВМ80А (8080)? У меня есть собственный код эмуляции, но на нём не все программы корректно работают, хотелось бы отыскать проблему, которая судя по всему находится в реализации ядра процессора.
|
20 May 2007 08:28 |
|
|
HardWareMan
Banned
Joined: 20 Mar 2005 13:41 Posts: 2141 Location: От туда
|
Неточности обычно с флагами. А какого рода проги глючат? Как проявляется глюк?
|
20 May 2007 10:53 |
|
|
b2m
Devil
Joined: 26 May 2003 06:57 Posts: 870
|
У меня в эмуляторе есть возможность записать ход исполнения (только регистр PC) или полный лог исполнения, со всеми регистрами и флагами. Потом можно сравнить. Если интересует, могу рассказать, как можно это сделать (в двух словах не получится).
|
20 May 2007 11:20 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22716 Location: Silicon Valley
|
Ну у меня тоже можно записать - вот только с чем потом сравнивать?
|
20 May 2007 13:30 |
|
|
b2m
Devil
Joined: 26 May 2003 06:57 Posts: 870
|
Я имел ввиду записать в одинаковом формате, а потом сравнить твой и мой, хоть diff-ом, хоть fc /b. Там, откуда начнётся разница, и копать. Для начала можно ограничиться одним PC.
Какая прога не работает? Кидай мне или скажи где взять. Может у меня тоже не заработает.
|
21 May 2007 04:45 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22716 Location: Silicon Valley
|
CP/M на моём эмуле толком не работает, потом некоторые орионовские программы не идут нормально
|
21 May 2007 05:10 |
|
|
b2m
Devil
Joined: 26 May 2003 06:57 Posts: 870
|
У меня тоже очень давно, когда я только начинал делать эмуль, был глюк с CP/M. Причина была - неправильная установка флагов в командах INR DCR (устанавливаются все, кроме переноса). Из последних исправленных глюков - команда DAA и неизменяемые биты в регистре флагов - никак не влияли на работу CP/M. Неизменяемые биты странным образом влияли на программу ADSKOK на Специалисте (в стек там кладётся psw, а вынимается регистровая пара, и наоборот, причём флаги как-то используются). Команды сдвига, которые тоже используются в CP/M при всяких там рассчётах, я думаю, ты без ошибок реализовал, но всё равно проверь. Флаг паритета тоже частенько неправильно реализуют или не везде, где надо, устанавливают (INR DCR и все ALU). Остальное, вроде, очевидно.
|
21 May 2007 06:39 |
|
|
HardWareMan
Banned
Joined: 20 Mar 2005 13:41 Posts: 2141 Location: От туда
|
Интересно, прогнать бы это все на моем эмуле.... Где взять прожки и саму CP/M для i8080?
|
21 May 2007 07:38 |
|
|
b2m
Devil
Joined: 26 May 2003 06:57 Posts: 870
|
На моём сайте bashkiria-2m.narod.ru есть образы дисков для Башкирии-2М,Kорвета,Ориона-128,Партнёра,Специалиста-МХ. И везде, естесственно, CP/M.
|
21 May 2007 07:46 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22716 Location: Silicon Valley
|
| | | | b2m wrote: У меня тоже очень давно, когда я только начинал делать эмуль, был глюк с CP/M. Причина была - неправильная установка флагов в командах INR DCR (устанавливаются все, кроме переноса). Из последних исправленных глюков - команда DAA и неизменяемые биты в регистре флагов - никак не влияли на работу CP/M. Неизменяемые биты странным образом влияли на программу ADSKOK на Специалисте (в стек там кладётся psw, а вынимается регистровая пара, и наоборот, причём флаги как-то используются). Команды сдвига, которые тоже используются в CP/M при всяких там рассчётах, я думаю, ты без ошибок реализовал, но всё равно проверь. Флаг паритета тоже частенько неправильно реализуют или не везде, где надо, устанавливают (INR DCR и все ALU). Остальное, вроде, очевидно. | | | | |
Ok, спасибо, погляжу повнимательнее на свою реализацию
|
21 May 2007 15:55 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22716 Location: Silicon Valley
|
Поглядел пристально на свою реализацию - ничего криминального не нашёл, но когда стал внимательно читать старую добрую американскую книгу про 8080/8085, обнаружил массу вещей о которых я раньше не знал - например странное поведение флага AC (полуперенос) в логических операциях (причём это поведение разное для 8080 и 8085 в случае операции И)...
|
15 Nov 2007 22:13 |
|
|
HardWareMan
Banned
Joined: 20 Mar 2005 13:41 Posts: 2141 Location: От туда
|
Наблюдения и выводы в студию!
|
16 Nov 2007 02:16 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22716 Location: Silicon Valley
|
ANA/ANI : C=0, AC=1 (8085) or AC=A3|B3 (8080)
ORA/ORI : C=0 AC=0
XRA/XRI : C=0 AC=0
|
16 Nov 2007 07:30 |
|
|
b2m
Devil
Joined: 26 May 2003 06:57 Posts: 870
|
У меня во всех логических операциях и даже в CMP стоит AC=0, и ничего, по крайней мере CP/M вроде без глюков работает. Так что ищи в другом месте.
В Z80 действительно, почему-то, для AND должно быть AC=1 ...
|
16 Nov 2007 11:38 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22716 Location: Silicon Valley
|
А у меня C и AC нигде не трогались в неарифметических и несдвиговых местах... Кстати CMP должна функционировать как вычитание - у меня к примеру C и AC при сравнении соответственно меняют свои значения
И в 8085 тоже
Но не в 8080 - в нём в AC кладётся ИЛИ третьих битов операндов ...
|
16 Nov 2007 18:35 |
|
|