Тест точности эмуляции 8080
Moderator: Pyk
-
- Admin
- Posts: 24011
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Тест точности эмуляции 8080
Кто-то может поделиться программой (ассемблерный код или программа для РК,Ориона,Специалиста и т.д.) для проверки точности эмуляции процессора КР580ВМ80А (8080)? У меня есть собственный код эмуляции, но на нём не все программы корректно работают, хотелось бы отыскать проблему, которая судя по всему находится в реализации ядра процессора.
Я тут за главного - если что шлите мыло на me собака shaos точка net
-
- Banned
- Posts: 2139
- Joined: 20 Mar 2005 13:41
- Location: От туда
-
- Devil
- Posts: 907
- Joined: 26 May 2003 06:57
-
- Admin
- Posts: 24011
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Ну у меня тоже можно записать - вот только с чем потом сравнивать?b2m wrote:У меня в эмуляторе есть возможность записать ход исполнения (только регистр PC) или полный лог исполнения, со всеми регистрами и флагами. Потом можно сравнить. Если интересует, могу рассказать, как можно это сделать (в двух словах не получится).

Я тут за главного - если что шлите мыло на me собака shaos точка net
-
- Devil
- Posts: 907
- Joined: 26 May 2003 06:57
-
- Admin
- Posts: 24011
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
CP/M на моём эмуле толком не работает, потом некоторые орионовские программы не идут нормальноb2m wrote:Я имел ввиду записать в одинаковом формате, а потом сравнить твой и мой, хоть diff-ом, хоть fc /b. Там, откуда начнётся разница, и копать. Для начала можно ограничиться одним PC.
Какая прога не работает? Кидай мне или скажи где взять. Может у меня тоже не заработает.
Я тут за главного - если что шлите мыло на me собака shaos точка net
-
- Devil
- Posts: 907
- Joined: 26 May 2003 06:57
У меня тоже очень давно, когда я только начинал делать эмуль, был глюк с CP/M. Причина была - неправильная установка флагов в командах INR DCR (устанавливаются все, кроме переноса). Из последних исправленных глюков - команда DAA и неизменяемые биты в регистре флагов - никак не влияли на работу CP/M. Неизменяемые биты странным образом влияли на программу ADSKOK на Специалисте (в стек там кладётся psw, а вынимается регистровая пара, и наоборот, причём флаги как-то используются). Команды сдвига, которые тоже используются в CP/M при всяких там рассчётах, я думаю, ты без ошибок реализовал, но всё равно проверь. Флаг паритета тоже частенько неправильно реализуют или не везде, где надо, устанавливают (INR DCR и все ALU). Остальное, вроде, очевидно.Shaos wrote:CP/M на моём эмуле толком не работает
-
- Banned
- Posts: 2139
- Joined: 20 Mar 2005 13:41
- Location: От туда
-
- Devil
- Posts: 907
- Joined: 26 May 2003 06:57
-
- Admin
- Posts: 24011
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Ok, спасибо, погляжу повнимательнее на свою реализациюb2m wrote:У меня тоже очень давно, когда я только начинал делать эмуль, был глюк с CP/M. Причина была - неправильная установка флагов в командах INR DCR (устанавливаются все, кроме переноса). Из последних исправленных глюков - команда DAA и неизменяемые биты в регистре флагов - никак не влияли на работу CP/M. Неизменяемые биты странным образом влияли на программу ADSKOK на Специалисте (в стек там кладётся psw, а вынимается регистровая пара, и наоборот, причём флаги как-то используются). Команды сдвига, которые тоже используются в CP/M при всяких там рассчётах, я думаю, ты без ошибок реализовал, но всё равно проверь. Флаг паритета тоже частенько неправильно реализуют или не везде, где надо, устанавливают (INR DCR и все ALU). Остальное, вроде, очевидно.Shaos wrote:CP/M на моём эмуле толком не работает
Я тут за главного - если что шлите мыло на me собака shaos точка net
-
- Admin
- Posts: 24011
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Поглядел пристально на свою реализацию - ничего криминального не нашёл, но когда стал внимательно читать старую добрую американскую книгу про 8080/8085, обнаружил массу вещей о которых я раньше не знал - например странное поведение флага AC (полуперенос) в логических операциях (причём это поведение разное для 8080 и 8085 в случае операции И)...
Я тут за главного - если что шлите мыло на me собака shaos точка net
-
- Banned
- Posts: 2139
- Joined: 20 Mar 2005 13:41
- Location: От туда
Наблюдения и выводы в студию!Shaos wrote:Поглядел пристально на свою реализацию - ничего криминального не нашёл, но когда стал внимательно читать старую добрую американскую книгу про 8080/8085, обнаружил массу вещей о которых я раньше не знал - например странное поведение флага AC (полуперенос) в логических операциях (причём это поведение разное для 8080 и 8085 в случае операции И)...
-
- Admin
- Posts: 24011
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
ANA/ANI : C=0, AC=1 (8085) or AC=A3|B3 (8080)HardWareMan wrote:Наблюдения и выводы в студию!Shaos wrote:Поглядел пристально на свою реализацию - ничего криминального не нашёл, но когда стал внимательно читать старую добрую американскую книгу про 8080/8085, обнаружил массу вещей о которых я раньше не знал - например странное поведение флага AC (полуперенос) в логических операциях (причём это поведение разное для 8080 и 8085 в случае операции И)...
ORA/ORI : C=0 AC=0
XRA/XRI : C=0 AC=0
Я тут за главного - если что шлите мыло на me собака shaos точка net
-
- Devil
- Posts: 907
- Joined: 26 May 2003 06:57
-
- Admin
- Posts: 24011
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
А у меня C и AC нигде не трогались в неарифметических и несдвиговых местах...b2m wrote:У меня во всех логических операциях и даже в CMP стоит AC=0, и ничего, по крайней мере CP/M вроде без глюков работает. Так что ищи в другом месте.
Кстати CMP должна функционировать как вычитание - у меня к примеру C и AC при сравнении соответственно меняют свои значения
И в 8085 тожеb2m wrote:В Z80 действительно, почему-то, для AND должно быть AC=1 ...

Но не в 8080 - в нём в AC кладётся ИЛИ третьих битов операндов ...
Я тут за главного - если что шлите мыло на me собака shaos точка net