Тест точности эмуляции 8080

Эмулятор Радио-86РК и других советских компьютеров на КР580ВМ80А http://www.emu80.org

Moderator: Pyk

User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Shaos wrote:
b2m wrote:У меня во всех логических операциях и даже в CMP стоит AC=0, и ничего, по крайней мере CP/M вроде без глюков работает. Так что ищи в другом месте.
А у меня C и AC нигде не трогались в неарифметических и несдвиговых местах...
Кстати CMP должна функционировать как вычитание - у меня к примеру C и AC при сравнении соответственно меняют свои значения
b2m wrote:В Z80 действительно, почему-то, для AND должно быть AC=1 ...
И в 8085 тоже ;)
Но не в 8080 - в нём в AC кладётся ИЛИ третьих битов операндов ...
Ой, а у меня всё Ок с C и AC в логических операциях - зря на себя наговаривал ;)

P.S. Хотя в ANA B зачем-то написал C=1 - исправляюсь :)

P.P.S. Наконец-то нашёл время сделать DAA:

Code: Select all

 case 0x27: // DAA
  timel+=4;
  if((A&0x0F)>9||a_){A+=6;a_=SH_TRUE;}
  if(((A&0xF0)>>4)>9||c_) A=plus(A,0x60); // flag C
  flag_all(A); // flags S,Z,P
  break;
P.P.P.S. Обновления выложил на CVS в SourceForge
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
HardWareMan
Banned
Posts: 2139
Joined: 20 Mar 2005 13:41
Location: От туда

Post by HardWareMan »

Shaos wrote:P.P.S. Наконец-то нашёл время сделать DAA:

Code: Select all

 case 0x27: // DAA
  timel+=4;
  if((A&0x0F)>9||a_){A+=6;a_=SH_TRUE;}
  if(((A&0xF0)>>4)>9||c_) A=plus(A,0x60); // flag C
  flag_all(A); // flags S,Z,P
  break;
P.P.P.S. Обновления выложил на CVS в SourceForge
Я когда на кружке изучал ВМ80 сделал прожку, которая увеличивает регистр на 1, корректирует и выводит в хексе. Но блин почемуто он вел себя странно:
0...9 выдавал, потом 10, 11, 12, 13, 14, 15, а затем 10, 11 - 19, 20, 21, 22, 23, 24, 25 и опять 20 и т.д. Почему - хз...
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

HardWareMan wrote:
Shaos wrote:P.P.S. Наконец-то нашёл время сделать DAA:

Code: Select all

 case 0x27: // DAA
  timel+=4;
  if((A&0x0F)>9||a_){A+=6;a_=SH_TRUE;}
  if(((A&0xF0)>>4)>9||c_) A=plus(A,0x60); // flag C
  flag_all(A); // flags S,Z,P
  break;
P.P.P.S. Обновления выложил на CVS в SourceForge
Я когда на кружке изучал ВМ80 сделал прожку, которая увеличивает регистр на 1, корректирует и выводит в хексе. Но блин почемуто он вел себя странно:
0...9 выдавал, потом 10, 11, 12, 13, 14, 15, а затем 10, 11 - 19, 20, 21, 22, 23, 24, 25 и опять 20 и т.д. Почему - хз...
а не могла твоя подпрограмма вывода хекса флаги CY и AC сбивать?
или коррекция делалась не через DAA, а "вручную", но с ошибкой?
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
HardWareMan
Banned
Posts: 2139
Joined: 20 Mar 2005 13:41
Location: От туда

Post by HardWareMan »

Shaos wrote:
HardWareMan wrote:
Shaos wrote:P.P.S. Наконец-то нашёл время сделать DAA:

Code: Select all

 case 0x27: // DAA
  timel+=4;
  if((A&0x0F)>9||a_){A+=6;a_=SH_TRUE;}
  if(((A&0xF0)>>4)>9||c_) A=plus(A,0x60); // flag C
  flag_all(A); // flags S,Z,P
  break;
P.P.P.S. Обновления выложил на CVS в SourceForge
Я когда на кружке изучал ВМ80 сделал прожку, которая увеличивает регистр на 1, корректирует и выводит в хексе. Но блин почемуто он вел себя странно:
0...9 выдавал, потом 10, 11, 12, 13, 14, 15, а затем 10, 11 - 19, 20, 21, 22, 23, 24, 25 и опять 20 и т.д. Почему - хз...
а не могла твоя подпрограмма вывода хекса флаги CY и AC сбивать?
или коррекция делалась не через DAA, а "вручную", но с ошибкой?
Нет. Подозреваю, что вместо ADD я делал INC, поэтому. Так что DAA у 8080 хреновый. Кстати, флага N как бы и вообще нету, так что корекция работает тока на ADD, на SUB ничего не работает. :(
Tim0xA
Writer
Posts: 11
Joined: 05 Oct 2007 08:09
Location: 91.124.79.227

Post by Tim0xA »

Возможно заинтересует эта тема http://zx.pk.ru/showthread.php?t=9826
SoftCat
Junior
Posts: 5
Joined: 15 Jun 2009 00:02
Location: 77.232.145.63

Re: Тест точности эмуляции 8080

Post by SoftCat »

Shaos wrote:Кто-то может поделиться программой (ассемблерный код или программа для РК,Ориона,Специалиста и т.д.) для проверки точности эмуляции процессора КР580ВМ80А (8080)? У меня есть собственный код эмуляции, но на нём не все программы корректно работают, хотелось бы отыскать проблему, которая судя по всему находится в реализации ядра процессора.
У меня есть ассемблерный код для тестирования процессора 8086 (8088). Он и флаги тестирует. Можно переделать под 8080.
b2m
Devil
Posts: 905
Joined: 26 May 2003 06:57

Post by b2m »

Есть готовый тест, очень качественный, но нужно сравнивать с реальным процессором, т.к. эталонных значений в самом тесте почему-то нет. Подробнее тут: http://zx.pk.ru/showthread.php?t=9826&page=7
Страничка эмулятора наших компьютеров
http://bashkiria-2m.narod.ru/
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

DAA

Post by Lavr »

Что-то мне кажется где-то здесь говорили (может в недокументированных командах), что DAA в принципе в К580
работает неверно - глючит при вычитании что-ли...
А в Z80 - она вроде как исправлена...
И помнится мне был тест для Ориона, который как раз различает
Z80 и К580 по какой-то команде реализованной по-разному...

PS. А вобще - интересный тест - посмотрел я... :lol:
но в регистре флагов тест иногда хочет видеть нереальные значения
Mac Buster
Retired
Posts: 1474
Joined: 03 Aug 2003 22:37
Location: Moscow

Re: DAA

Post by Mac Buster »

Lavr wrote:Что-то мне кажется где-то здесь говорили (может в недокументированных командах), что DAA в принципе в К580
работает неверно
Не то чтобы неверно, скорее иначе :) Сам видел сравнение работы DAA этих процессоров в старой буржуйской книжке по программированию на ассемблере для тех, кто переходит с 8080 на Z80.
Extreme Entertainment
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: DAA

Post by Shaos »

Lavr wrote:Что-то мне кажется где-то здесь говорили (может в недокументированных командах), что DAA в принципе в К580
работает неверно - глючит при вычитании что-ли...]
DAA работает верно, но только после сложения - про это во всех справочниках говорится :)
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Тест К580ВМ80

Post by Lavr »

А существует какой-либо стандартный тест или схема, если я хочу проверить
до какой тактовой частоты разгонится отдельный экземпляр К580ВМ80 ?
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

A вот этот тест всёж кто-либо пробовал?

http://www.sunhillow.eu/8080exerciser/
Tim0xA
Writer
Posts: 11
Joined: 05 Oct 2007 08:09
Location: 91.124.79.227

Post by Tim0xA »

Lavr wrote:A вот этот тест всёж кто-либо пробовал?

http://www.sunhillow.eu/8080exerciser/
Более чем два года назад в этой же теме семью сообщениями ранее я давал ссылку http://zx.pk.ru/showthread.php?t=9826
( http://zx.pk.ru/showpost.php?p=192286&postcount=82 )

Я прогнал этот тест на реальном ВМ80А, см. таблицу Result (1). По результатам прогона была доработан процессор в эмуляторе b2m.
User avatar
HardWareMan
Banned
Posts: 2139
Joined: 20 Mar 2005 13:41
Location: От туда

Post by HardWareMan »

А давайте сведем в таблицу формирование всех флагов для ВМ80А и Z80. Как смотрите на это?

Киса, ку-ку!
User avatar
HardWareMan
Banned
Posts: 2139
Joined: 20 Mar 2005 13:41
Location: От туда

Post by HardWareMan »

Народ, я конечно понимаю, что никто тут не страдает некрофилией, но давайте все же поставим точку в этом треде. Я же не просто так спрашиваю об сводной таблице реального формирования флагов для ВМ80/Z80 здесь: эмулятор писать мне не надо. Эта инфа будет задействована для исправления и адаптации программ под Z80 на Спеце, которые на нем не работают. Адаптацию делать я буду сам, но я не вижу картины в разрезе, а собирать информацию по частям я наверное буду слишком долго. Плюс часть ее тут замалчивается как очевидная. Давайте стремится к законченности в любой информационной ветке!