Speccy - наш выбор!

Speccy - наш выбор! (http://zx-pk.ru/index.php)
-   Unsorted (http://zx-pk.ru/forumdisplay.php?f=13)
-   -   ZX Spectrum: аппаратная реализация на восьми микросхемах (http://zx-pk.ru/showthread.php?t=13747)

Lisitsin 6th March 2011 20:45

2 Attachment(s)
Пока failed. Прошли меньше 0,5% от DAA. Может исключить IX, IY, SP? И ещё: я тут подумал, если ошибка при возникновении накапливается, может найти где она начинается? могу запуститься по содержимому BC сразу с половины, четверти/трёх четвёртых и т д трейсинга.

Lisitsin 6th March 2011 21:04

1 Attachment(s)
Начиная с BC=8000:

Higgins 6th March 2011 22:01

Quote:

Originally Posted by Lisitsin (Post 363995)
TRACE_DAA_00A2.zip

Здесь проходим все.

Quote:

Originally Posted by Lisitsin (Post 364001)
TRACE_DAA_8000.zip

К моменту BC=#8000 контрольная сумма уже отличается, то есть ошибка где-то раньше.

Предложение такое: мы уже занем, что оснастка работает как положено. В каждой итерации она исполняется одинаково. Поэтому можно оставить только состояние до и после "DAA". Формально условие будет такое: (PC=#86E7 ИЛИ PC=#86E8). Если объем вывода существенно влияет на время сбора трейсинга, можно оставить только значения для AF.

Lisitsin 6th March 2011 22:11

1 Attachment(s)
Quote:

Originally Posted by Higgins (Post 364016)
Здесь проходим все.
Предложение такое: мы уже занем, что оснастка работает как положено. В каждой итерации она исполняется одинаково. Поэтому можно оставить только состояние до и после "DAA". Формально условие будет такое: (PC=#86E7 ИЛИ PC=#86E8). Если объем вывода существенно влияет на время сбора трейсинга, можно оставить только значения для AF.

Получается что-то типа этого: (начало с BC=0100)

Higgins 6th March 2011 23:32

Quote:

Originally Posted by Lisitsin (Post 364021)
TRACE_DAA_0100.zip

Отлично, попалась на строке 1570. На входе AF=#0410, на выходе ошибочное AF=#6A2D вместо правильного AF=#0A0C.

Насчет #6A вместо #0A: #60 нужно добавлять только если CF взведен или A >= #9A. В последнем случае CF на выходе следует взвести (тогда в F получим правильное #xD вместо имеющегося #xC).

Насчет взведенного флага 5: это может быть из-за ошибочно добавленного #60 к результату. Если нет, то во флаги 3 и 5 следует скопировать соответствующие разряды результирующего значения регистра A.

Lisitsin 7th March 2011 00:00

Quote:

Originally Posted by Higgins (Post 364046)
На входе AF=#0410, на выходе ошибочное AF=#6A2D вместо правильного AF=#0A0C.

Не понял ... На входе AF=0410, т. е. С=0, N=0, H=0. A=04 - добавлять нужно 00.

Higgins 7th March 2011 00:08

Quote:

Originally Posted by Lisitsin (Post 364050)
Не понял ... На входе AF=0410, т. е. С=0, N=0, H=0. A=04 - добавлять нужно 00.

В данном случае добавляем #06 из-за взведенного HF.

Если на входе CF взведен или регистр A больше или равен #9A, то следует a) добавить #60 и b) взвести CF.

Далее, если взведен HF или четыре младших разряда A больше или равны 10, тогда добавляем #06 (возможно, к дополнение к ранее добавленным #60).

Далее, если NF взведен, тогда эти #60 и #06 следует не добавлять к A, а вычитать из A.

Как считать HF уже выяснили. Про CF сказано выше. NF не меняем. PF считаем как флаг четности. ZF взводим если результат в A получился нулевым. Про флаги 3 и 5 тоже сказано выше. Вроде бы все, что нужно.

Lisitsin 7th March 2011 00:24

1 Attachment(s)
Точно. Н=1. Но тогда я вообще не понимаю. Я пользовался при генерировании DAA вложением. Так вот там эта ситуация (Н=1, С=0, N=0, А=04) - вообще не определена. Значит там где-то ошибка?

Lisitsin 7th March 2011 00:35

Quote:

Originally Posted by Higgins (Post 364052)
В данном случае добавляем #06 из-за взведенного HF.

Если на входе CF взведен или регистр A больше или равен #9A, то следует a) добавить #60 и b) взвести CF.

Далее, если взведен HF или четыре младших разряда A больше или равны 10, тогда добавляем #06 (возможно, к дополнение к ранее добавленным #60).

Далее, если NF взведен, тогда эти #60 и #06 следует не добавлять к A, а вычитать из A.

Как считать HF уже выяснили. Про CF сказано выше. NF не меняем. PF считаем как флаг четности. ZF взводим если результат в A получился нулевым. Про флаги 3 и 5 тоже сказано выше. Вроде бы все, что нужно.

Переделаю всё заново. В документацию веры нет. Да здравствует здравая логика !!!

Lisitsin 7th March 2011 11:38

1 Attachment(s)
P A S S E D !
Вот они, результаты работы с умным человеком !


All times are GMT +4. The time now is 17:00.

Powered by vBulletin® Version 3.8.3
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.