search Z80 CPU DIAGNOSTIC code

Микропроцессоры и микроконтроллеры от фирмы Zilog, а также компьютеры на них построенные

Moderator: Shaos

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

Re: search Z80 CPU DIAGNOSTIC code

Post by Shaos »

Lavr wrote:То есть эмуляция в Протеусе и в emu80 ошибается одинаково?
emu80 или b2m? у них вообще 8080 который по флагам по другому работает нежели z80...
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Lavr
Supreme God
Posts: 16680
Joined: 21 Oct 2009 08:08
Location: Россия

Re: search Z80 CPU DIAGNOSTIC code

Post by Lavr »

Ну раз есть тест, рассчитанный под Спецтрум, интересно бы какой-либо из известных эмуляторов
прогнать этим тестом... Может быть, тоже полно ошибок crc? :lol:
iLavr
User avatar
Shaos
Admin
Posts: 24008
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: search Z80 CPU DIAGNOSTIC code

Post by Shaos »

Lavr wrote:Ну раз есть тест, рассчитанный под Спецтрум, интересно бы какой-либо из известных эмуляторов
прогнать этим тестом... Может быть, тоже полно ошибок crc? :lol:
ну я и на живых спецтрумах могу прогнать :)
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Lavr
Supreme God
Posts: 16680
Joined: 21 Oct 2009 08:08
Location: Россия

Re: search Z80 CPU DIAGNOSTIC code

Post by Lavr »

Shaos wrote:ну я и на живых спецтрумах могу прогнать :)
Ну на живых ведь не должно быть ошибок crc...
Идея-то какая: берем заведомо популярный и известный эмулятор,
прогоняем на нем тест, и если у него ошибок нет, а у нас есть -
то смотрим в отладчике, как реализованы в нем коды, которые у нас
приводят к ошибке crc... Вот такая мысль... Чтобы не гадать...

А еще лучше если этот эмулятор с исходным кодом - чтобы в коде
посмотреть, а не лезь в отладчик.
iLavr
jdigreze
God
Posts: 1388
Joined: 02 Jan 2006 02:28
Location: Abakan

Re: search Z80 CPU DIAGNOSTIC code

Post by jdigreze »

Запустил в Xpeccy, и судя по всему зависон. Попробую на днях ещё позапускать.
На текущий момент вот такая картинка:
Image
User avatar
Lavr
Supreme God
Posts: 16680
Joined: 21 Oct 2009 08:08
Location: Россия

Re: search Z80 CPU DIAGNOSTIC code

Post by Lavr »

jdigreze wrote:Запустил в Xpeccy...
Если я правильно понимаю - у тебя уже ошибки crc есть!...
iLavr
PVV
Doomed
Posts: 463
Joined: 12 Feb 2016 13:39

Re: search Z80 CPU DIAGNOSTIC code

Post by PVV »

Этот тест по полному набору(zexall - это видно по ожидаемой crc), а я тестировал на документированных мнемониках(zexdoc), и тем не менее, по полному набору ошибка crc возникает на тех же мнемониках...

Я как то не обратил внимание на комментарий к архиву Spectrum.zip: ...Some of the tests fail incorrectly due to the code being moved. I have the changed needed, but haven't added them to the source yet. , а сейчас задумался над ним.

Собрал zexdoc для zx, и запустил в b2m, так вот, теперь crc другие, но на тех же мнемониках! Очень похоже, что в результате модификации кода этого теста под конкретную платформу (в одном zx , в другом моя тестовая схема, а в оригинале третья схема? какая?) алгоритм подсчета crc считает не только то, что относится к тестируемой мнемонике, но и захватывает часть кода теста, вот и получается различие с оригинальным тестом.
zx_test.png
Получается, действительно надо этот тест запустить на реальном спектруме, посмотреть и записать! полученные crc , а, затем, вбить эти новые crc в код для спектрума.
во вложении исходник, sna и tap файлы.
You do not have the required permissions to view the files attached to this post.
User avatar
Lavr
Supreme God
Posts: 16680
Joined: 21 Oct 2009 08:08
Location: Россия

Re: search Z80 CPU DIAGNOSTIC code

Post by Lavr »

То есть, получается, что правильные crc для какой-либо платформы надо посмотреть на ней самой "железной"?
А потом эти правильные crc сравнивать с теми crc, что получатся на эмуляции этой же платформы?

Немного странно тогда выглядит такой тест... :-?
iLavr
PVV
Doomed
Posts: 463
Joined: 12 Feb 2016 13:39

Re: search Z80 CPU DIAGNOSTIC code

Post by PVV »

Похоже, что crc считается по 16 байтам, среди которых есть указатель стека, а если стек перемещается при смене платформы, то и подсчет crc изменится. Не понятно только одно, а почему тогда ошибка crc есть на некоторых, а не на всех тестах?!

Для проверки оригинального кода нужно его собрать и запустить на платформе у которой распределение адресного пространства совпадает с требованиями теста, а именно, вначале располагается ОЗУ, а в конце ПЗУ. По моим прикидкам это можно сделать на ОРИОНЕ с Z80. В том же b2m запустить ОРИОН, а на нем этот тест, если все crc будут ОК, тогда можно будет считать, что z80 эмулируется правильно. Только я с ОРИОНом никогда не имел дела, как там бинарник запускать то?
User avatar
Lavr
Supreme God
Posts: 16680
Joined: 21 Oct 2009 08:08
Location: Россия

Re: search Z80 CPU DIAGNOSTIC code

Post by Lavr »

Вобще говоря, очень странно, что тест зависит от платформы... :-?
Я не вникал, как работают эти тесты для i8080 и z80, но серьёзно вникал, как работает тест для 6502,
когда сам его эмулировал, и мне помогали люди, которые тот тест хорошо в узких местах знали.
Ну никакой зависимости от платформы не было - хоть эмулятор тестируй, хоть реальный 6502 ! :o
iLavr
PVV
Doomed
Posts: 463
Joined: 12 Feb 2016 13:39

Re: search Z80 CPU DIAGNOSTIC code

Post by PVV »

Запустить тест на ОРИОНе у меня не получилось, но я модифицировал СПЕЦИАЛИСТа под CPU z80 :lol: в b2m и в нем оригинальный тест запустился(с изменениями - забил NOPами печать куда либо) и ... ни каких ошибок crc! (я проверил не абсолютно все тесты, но первую треть...)
Начал копать дальше, почему же часть тестов проходит верно, а часть нет... и нашел - в параметрах для тестирования в тестах с неверно рассчитанным crc присутствует переменная msbt, например:
; aluop a,<b,c,d,e,h,l,(hl),a> (753,664 cycles)
alu8r: db 0d7h ; flag mask
tstr 080h,0,0,0,0c53eh,0573ah,04c4dh,
msbt,0e309h,0a666h,0d0h,03bh,0adbbh
в оригинальном тесте это 102h( адрес в памяти ОЗУ), а в модифицированных вариантах значения совсем другие, тк это область ПЗУ.
Попробую тестовую схему переделать под другое распределение ОЗУ и ПЗУ...
PVV
Doomed
Posts: 463
Joined: 12 Feb 2016 13:39

Re: search Z80 CPU DIAGNOSTIC code

Post by PVV »

Переделал я тестовую схему под 'требования' теста, и ... все получилось вполне ожидаемо, там, где crc не совпадало, теперь - ОК!
wx_vc1.png
(тест зациклен и начал второй круг на картинке...)
не успел проверить только 5 пунктов с большим числом итераций, но, с высокой вероятностью думаю, что и там все будет ОК.

Во вложении новый проект и тест.

PS: В х80.dll поддерживаются все три cpu - i8080, i8085(нет его дополнительных к i8080 двух инструкций и расширенных прерываний) и z80(кроме IM2) на уровне инструкций, осталось проверить работу с портами, которые этот тест не проверяет.

PPS: перезалил исправленную dll.
You do not have the required permissions to view the files attached to this post.
Last edited by PVV on 06 Oct 2016 12:43, edited 1 time in total.
User avatar
Lavr
Supreme God
Posts: 16680
Joined: 21 Oct 2009 08:08
Location: Россия

Re: search Z80 CPU DIAGNOSTIC code

Post by Lavr »

PVV wrote:осталось проверить работу с портами, которые этот тест не проверяет.
Там есть отличие от i8080, причем в одном варианте до того туповатое, что я так и не вник,
зачем у z80 так сделано - я имею в виду, что z80 подает в младшую и старшую части
адресной шины при обращении к порту.
iLavr
PVV
Doomed
Posts: 463
Joined: 12 Feb 2016 13:39

Re: search Z80 CPU DIAGNOSTIC code

Post by PVV »

Lavr wrote:
PVV wrote:осталось проверить работу с портами, которые этот тест не проверяет.
Там есть отличие от i8080, причем в одном варианте до того туповатое, что я так и не вник,
зачем у z80 так сделано - я имею в виду, что z80 подает в младшую и старшую части
адресной шины при обращении к порту.
Этот момент я обработал, для i8080 Addr={А15..8=А7..0} и для z80 Addr={А15..8=regB, A7..0}.
User avatar
Lavr
Supreme God
Posts: 16680
Joined: 21 Oct 2009 08:08
Location: Россия

Re: search Z80 CPU DIAGNOSTIC code

Post by Lavr »

PVV wrote:для z80 Addr={А15..8=regB, A7..0}.
У z80 out же не один - у него помнится какой-то out - аналог 8080 - что-то неприятное делает с регистром А вроде.
Я уж подзабыл, а в коды лезть неохота сейчвс...
iLavr