nedoPC.org

Community of electronics hobbyists established in 2002

...
Atom Feed | View unanswered posts | View active topics It is currently 13 Dec 2017 20:34



Reply to topic  [ 44 posts ]  Go to page Previous  1, 2, 3  Next
search Z80 CPU DIAGNOSTIC code 
Author Message
Online
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 15912
Location: Colorado
Reply with quote
Lavr wrote:
То есть эмуляция в Протеусе и в emu80 ошибается одинаково?


emu80 или b2m? у них вообще 8080 который по флагам по другому работает нежели z80...

_________________
:eugeek: https://twitter.com/Shaos1973


01 Oct 2016 14:40
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
Ну раз есть тест, рассчитанный под Спецтрум, интересно бы какой-либо из известных эмуляторов
прогнать этим тестом... Может быть, тоже полно ошибок crc? :lol:

_________________
iLavr


01 Oct 2016 15:35
Profile
Online
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 15912
Location: Colorado
Reply with quote
Lavr wrote:
Ну раз есть тест, рассчитанный под Спецтрум, интересно бы какой-либо из известных эмуляторов
прогнать этим тестом... Может быть, тоже полно ошибок crc? :lol:


ну я и на живых спецтрумах могу прогнать :)

_________________
:eugeek: https://twitter.com/Shaos1973


01 Oct 2016 18:02
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
Shaos wrote:
ну я и на живых спецтрумах могу прогнать :)

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

А еще лучше если этот эмулятор с исходным кодом - чтобы в коде
посмотреть, а не лезь в отладчик.

_________________
iLavr


02 Oct 2016 03:37
Profile
God

Joined: 02 Jan 2006 03:28
Posts: 1341
Location: Abakan
Reply with quote
Запустил в Xpeccy, и судя по всему зависон. Попробую на днях ещё позапускать.
На текущий момент вот такая картинка:
Image


02 Oct 2016 07:48
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
jdigreze wrote:
Запустил в Xpeccy...

Если я правильно понимаю - у тебя уже ошибки crc есть!...

_________________
iLavr


02 Oct 2016 08:09
Profile
Senior

Joined: 12 Feb 2016 14:39
Posts: 178
Reply with quote
Этот тест по полному набору(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 считает не только то, что относится к тестируемой мнемонике, но и захватывает часть кода теста, вот и получается различие с оригинальным тестом.
Attachment:
zx_test.png
zx_test.png [ 165.47 KiB | Viewed 635 times ]

Получается, действительно надо этот тест запустить на реальном спектруме, посмотреть и записать! полученные crc , а, затем, вбить эти новые crc в код для спектрума.
во вложении исходник, sna и tap файлы.


Attachments:
ZX_test.zip [20.72 KiB]
Downloaded 14 times
02 Oct 2016 15:02
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
То есть, получается, что правильные crc для какой-либо платформы надо посмотреть на ней самой "железной"?
А потом эти правильные crc сравнивать с теми crc, что получатся на эмуляции этой же платформы?

Немного странно тогда выглядит такой тест... :-?

_________________
iLavr


03 Oct 2016 02:47
Profile
Senior

Joined: 12 Feb 2016 14:39
Posts: 178
Reply with quote
Похоже, что crc считается по 16 байтам, среди которых есть указатель стека, а если стек перемещается при смене платформы, то и подсчет crc изменится. Не понятно только одно, а почему тогда ошибка crc есть на некоторых, а не на всех тестах?!

Для проверки оригинального кода нужно его собрать и запустить на платформе у которой распределение адресного пространства совпадает с требованиями теста, а именно, вначале располагается ОЗУ, а в конце ПЗУ. По моим прикидкам это можно сделать на ОРИОНЕ с Z80. В том же b2m запустить ОРИОН, а на нем этот тест, если все crc будут ОК, тогда можно будет считать, что z80 эмулируется правильно. Только я с ОРИОНом никогда не имел дела, как там бинарник запускать то?


03 Oct 2016 09:57
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
Вобще говоря, очень странно, что тест зависит от платформы... :-?
Я не вникал, как работают эти тесты для i8080 и z80, но серьёзно вникал, как работает тест для 6502,
когда сам его эмулировал, и мне помогали люди, которые тот тест хорошо в узких местах знали.
Ну никакой зависимости от платформы не было - хоть эмулятор тестируй, хоть реальный 6502 ! :o

_________________
iLavr


03 Oct 2016 10:38
Profile
Senior

Joined: 12 Feb 2016 14:39
Posts: 178
Reply with quote
Запустить тест на ОРИОНе у меня не получилось, но я модифицировал СПЕЦИАЛИСТа под 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( адрес в памяти ОЗУ), а в модифицированных вариантах значения совсем другие, тк это область ПЗУ.
Попробую тестовую схему переделать под другое распределение ОЗУ и ПЗУ...


03 Oct 2016 15:04
Profile
Senior

Joined: 12 Feb 2016 14:39
Posts: 178
Reply with quote
Переделал я тестовую схему под 'требования' теста, и ... все получилось вполне ожидаемо, там, где crc не совпадало, теперь - ОК!
Attachment:
wx_vc1.png
wx_vc1.png [ 115.63 KiB | Viewed 597 times ]

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

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

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

PPS: перезалил исправленную dll.


Attachments:
zexdoc_new.zip [925.23 KiB]
Downloaded 19 times


Last edited by PVV on 06 Oct 2016 13:43, edited 1 time in total.

04 Oct 2016 13:35
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
PVV wrote:
осталось проверить работу с портами, которые этот тест не проверяет.

Там есть отличие от i8080, причем в одном варианте до того туповатое, что я так и не вник,
зачем у z80 так сделано - я имею в виду, что z80 подает в младшую и старшую части
адресной шины при обращении к порту.

_________________
iLavr


04 Oct 2016 13:53
Profile
Senior

Joined: 12 Feb 2016 14:39
Posts: 178
Reply with quote
Lavr wrote:
PVV wrote:
осталось проверить работу с портами, которые этот тест не проверяет.

Там есть отличие от i8080, причем в одном варианте до того туповатое, что я так и не вник,
зачем у z80 так сделано - я имею в виду, что z80 подает в младшую и старшую части
адресной шины при обращении к порту.

Этот момент я обработал, для i8080 Addr={А15..8=А7..0} и для z80 Addr={А15..8=regB, A7..0}.


04 Oct 2016 15:34
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
PVV wrote:
для z80 Addr={А15..8=regB, A7..0}.

У z80 out же не один - у него помнится какой-то out - аналог 8080 - что-то неприятное делает с регистром А вроде.
Я уж подзабыл, а в коды лезть неохота сейчвс...

_________________
iLavr


04 Oct 2016 16:14
Profile
Display posts from previous:  Sort by  
Reply to topic   [ 44 posts ]  Go to page Previous  1, 2, 3  Next

Who is online

Users browsing this forum: No registered users and 1 guest


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.