PDA

Просмотр полной версии : Загадка плавающих флагов SCF/CCF раскрыта!



Titus
02.10.2024, 21:14
Для тех, кто не следит за этой (https://zx-pk.ru/threads/34173-revers-inzhiniring-z80.html?p=1204427&viewfull=1#post1204427) темой, акцентирую внимание, что загадка плавающих флагов (5 и 3 бит) в командах SCF/CCF на процессорах NMOS наконец-то раскрыта и обьяснена.

Если очень кратко и популярно обьяснять, то все происходит из-за того, что две внутренние шины HBUS и LBUS, на которые в начале команды выдается содержимое регистров A и F соответственно, в какой-то момент электрически обьединяются, и в тех битах, где обьединяются противоположные значения 0 и 1 появляется некий средний потенциал, условное 0.5. А далее, эти значения записываются обратно в регистр F, и в зависимости от порога срабатывания затворов транзисторов, эти условные 0.5 могут превратиться, как в 0, так и в 1. Более подробно, читайте в вышеуказанной теме.

Теперь же для сбора статистики требуется позапускать этот (https://zx-pk.ru/threads/34173-revers-inzhiniring-z80.html?p=1204427&viewfull=1#post1204427) тест на различных реалах.

Если картинка в тесте статичная, то достаточно сделать скриншот.
Если картинка в тесте с шумом, динамичная, то желательно записать видео.
И обязательно написать полную маркировку процессора, на котором тестировалось, и модель спектрума.

Замечу, что картина может меняться от температуры процессора, напряжения питания, частоты. Поэтому поле для экспериментов большое.

Вот пример теста со статичной картинкой (порог срабатывания затворов сильно смещен относительно 0.5):
https://pic.maxiol.com/images2/1727685769.2997898642.01.png

А вот пример теста с динамичной картинкой (порог срабатывания затворов близок к 0.5):
https://pic.maxiol.com/images2/1727892791.2997898411..png

goodboy
02.10.2024, 22:08
для сбора статистики требуется
не вижу практического смысла.

Titus
02.10.2024, 22:17
не вижу практического смысла.
Ничего страшного) У всех свои интересы)

himik
06.10.2024, 18:50
100 лет спустя оказывается, что есть проблемы, которые раньше и не были известны :)

Titus
06.10.2024, 22:31
100 лет спустя оказывается, что есть проблемы, которые раньше и не были известны
100 лет, конечно, еще не прошло)

Меня больше смущает, что на форуме спектрумистов ни один человек в этой теме не запустил тест. Ни один!

himik
07.10.2024, 07:25
100 лет, конечно, еще не прошло)

Меня больше смущает, что на форуме спектрумистов ни один человек в этой теме не запустил тест. Ни один!

У меня нет реального спектрума, от меня нет пользы в этом вопросе.

Deadly
07.10.2024, 08:26
Меня больше смущает, что на форуме спектрумистов ни один человек в этой теме не запустил тест. Ни один!
потому что флаги 3 и 5 никому не нужны, а кому нужны другие вещи никто не делает

creator
07.10.2024, 17:11
Десять двадцатых пеков на Speccy2007:

ZiLOG
Z84C0020PEC
Z80 CPU

9111 E1
9150 FY
9209 NB
9228 JU
9247 MO
9321 B9
9420 IP
9541 EQ
9716 EQ
9725 E1

https://amiga.nsk.ru/nisht/z801s.jpg (https://amiga.nsk.ru/nisht/z801.jpg) https://amiga.nsk.ru/nisht/z802s.jpg (https://amiga.nsk.ru/nisht/z802.jpg)
https://pic.maxiol.com/thumbs2/1728310152.92868234.img20241007202022.jpg (https://pic.maxiol.com/?v=1728310152.92868234.img20241007202022.jpg&dp=2)

transman
07.10.2024, 18:04
Так а что нужно делать, чтобы всё отрабатывало 100% корректно на всех вариантах z80?

Deadly
07.10.2024, 18:34
Так а что нужно делать, чтобы всё отрабатывало 100% корректно на всех вариантах z80?
плясать с бубном (ничего) оно итак работает всё корректно!

transman
07.10.2024, 18:42
плясать с бубном (ничего) оно итак работает всё корректно!
Ну слава богу. Я уж думал надо будет извращаться, чтобы всё работало одинаково везде с учётом скрытых багов процессора.

himik
07.10.2024, 19:01
А что, щас ещё кодят на спектруме?

transman
07.10.2024, 19:40
Кодят где придётся. Исполняемый код запускают на спектрумах и с ним совместимых.

Titus
07.10.2024, 19:56
Так а что нужно делать, чтобы всё отрабатывало 100% корректно на всех вариантах z80?
Ничего не нужно делать. Все варианты работы нормальные.
Тест нужно запустить для сбора статистики, какие модели процессоров, как ведут себя в командах SCF/CCF. Может быть найдем какое-нибудь редкое поведение.

Deadly
07.10.2024, 21:30
Ну слава богу. Я уж думал надо будет извращаться, чтобы всё работало одинаково везде с учётом скрытых багов процессора.
как там говориться, работало и хай на неё, ещё столько же проработает!
а то нашли багулю и мир должен схлопнуться, но нет... оказывается проблемы в головах )

Egal
07.10.2024, 23:09
А что, щас ещё кодят на спектруме?
Как минимум один математик точно :) Почему бы и нет. Если бы не работа, которая сжирает всю жизнь, я бы тоже покодил.

haywire
08.10.2024, 09:52
http://www.sanarin.ru/pic/Test%20SCF9.jpg
ZX-Spectrum+2, ZiLOG Z8400APS

Titus
08.10.2024, 11:54
ZX-Spectrum+2, ZiLOG Z8400APS
Странный процессор. NMOS, а ведет себя, как CMOS.
Можно полную маркировку или фотку?

haywire
10.10.2024, 08:33
- - - Добавлено - - -


Странный процессор. NMOS, а ведет себя, как CMOS.
Можно полную маркировку или фотку?

http://www.sanarin.ru/pic/20241010_082714.JPG

zebest
10.10.2024, 12:17
https://s1.hostingkartinok.com/uploads/images/2024/10/882407737eef58e4ca2dd539b4b48a40.jpg

Бордер белый, картинка - шавелиЦЦа, смысла в видео не вижу вообще.
Цифры то хоть правильные??

Titus
10.10.2024, 12:32
Бордер белый, картинка - шавелиЦЦа, смысла в видео не вижу вообще.
Цифры то хоть правильные??
Видео обязательно нужно! Это же первый результат глюка на CMOS-процессоре!

Какая полная маркировка процессора?

aviator
10.10.2024, 13:06
Все мои спектрумы остались в Белгороде.
Но, насколько я помню, биты 3 и 5 не используются и не несут смысловой нагрузки в регистре F. Или другие биты также портятся?

Titus
10.10.2024, 13:09
Все мои спектрумы остались в Белгороде.
Но, насколько я помню, биты 3 и 5 не используются и не несут смысловой нагрузки в регистре F. Или другие биты также портятся?
Другие биты не портятся.
Смысловой нагрузки не несут. Это чисто для понимания внутренней работы процессора, точного повторения в ФПГА или эмуляторе и для сбора статистики, какие вообще процессоры выпускались.

org
10.10.2024, 16:00
Я так понимаю это обычный Bus конфликт, когда 2 драйвера шины пихают своё значение на неё? Разве в этом случае не должна победить земля?

Titus
10.10.2024, 16:30
Я так понимаю это обычный Bus конфликт, когда 2 драйвера шины пихают своё значение на неё? Разве в этом случае не должна победить земля?

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

org
10.10.2024, 16:37
Не совсем так. Это скорее две заряженных шины, одна, допустим, до 0, другая до плюса, причем одинаково сильно, и они обьединяются уже отключенные от драйверов. В итоге противоположные заряды усредняются. И это среднее, если находится в районе порога срабатывания затвора входного транзистора, дает плавающее значение.

Тогда это Open Bus конфликт. Спасибо.

Titus
10.10.2024, 16:47
Тогда это Open Bus конфликт. Спасибо.
Что это в переводе на русский язык? Дословный перевод я понимаю, но нужен аналог в русском языке)

org
10.10.2024, 17:07
Как это переводится я не знаю, м.б. "конфликт плавающих шин"? :)

- - - Добавлено - - -

А к вопросу местных "Зачем оно надо?": ну как бы у вас в процессоре оказывается есть аппаратный датчик случайных чисел теперь. Возможно не очень "случайный", но как источник энтропии - сойдёт.

Titus
13.10.2024, 14:02
Бордер белый, картинка - шавелиЦЦа, смысла в видео не вижу вообще.
Цифры то хоть правильные??
zebest, ты не пропустил мой вопрос, что это был за процессор, и снять видео?

aviator
13.10.2024, 19:10
А к вопросу местных "Зачем оно надо?": ну как бы у вас в процессоре оказывается есть аппаратный датчик случайных чисел теперь. Возможно не очень "случайный", но как источник энтропии - сойдёт.
Нет, как источник энтропии не пойдёт. Это видно по картинкам. Если процессор и шумит, то распределение не является равномерным. А на некоторых экземплярах вообще не шумит.

zebest
14.10.2024, 23:27
ты не пропустил мой вопрос, что это был за процессор, и снять видео?
Ну нет же, как можно?!
Чего не сделаешь ради науки:v2_dizzy_botan:

https://pic.maxiol.com/images2/1728937177.2987899429.zif01.jpg
Profi сам по себе не очень пригодный zx-совместимый комп для экспериментов.
Бутербродная" конструкция, да еще и панелька под проц - цанговая.
Поэтомуу я совершил ПОДВИГ - скрестил ужа и ежа, цанговый разъем с ZIF панелькой.
Из-за бутера получилась фигня - слишком высокая получилась "начинка", но с большим трудом верхнюю плату можно немного надеть.
Надеюсь получиЦЦа проверить все процы.

Вот то самое видео, не знаю, что в нем может быть интересного.. Ну да ладно.
https://drive.google.com/file/d/1W-Aea1XWc4bqLz1FKFc0h8Al2mKr6Z0-/view?usp=sharing

Итак, начинаю новую серию тестов, по три картинки на проц (картинка с тестом Патрика - это для ЗлоКиллер-а, на нее не смотрите:)


Это который выше видео
https://pic.maxiol.com/images2/1728938825.2987899429.11.jpg
https://pic.maxiol.com/images2/1728938955.2987899429.12.jpg
https://pic.maxiol.com/images2/1728939030.2987899429.151.jpg


https://pic.maxiol.com/images2/1728939111.2987899429.21.jpg
https://pic.maxiol.com/images2/1728939202.2987899429.22.jpg
https://pic.maxiol.com/images2/1728939262.2987899429.231.jpg


Полностью стабильный проц, без синдрома моего имени
https://pic.maxiol.com/images2/1728939509.2987899429.31.jpg
https://pic.maxiol.com/images2/1728939580.2987899429.32.jpg
https://pic.maxiol.com/images2/1728939654.2987899429.331.jpg


https://pic.maxiol.com/images2/1728939851.2987899429.41.jpg
https://pic.maxiol.com/images2/1728939937.2987899429.42.jpg
https://pic.maxiol.com/images2/1728940256.2987899429.431.jpg


https://pic.maxiol.com/images2/1728942369.2987899429.51.jpg
https://pic.maxiol.com/images2/1728942413.2987899429.52.jpg
https://pic.maxiol.com/images2/1728942449.2987899429.531.jpg


https://pic.maxiol.com/images2/1728942493.2987899429.61.jpg
https://pic.maxiol.com/images2/1728942523.2987899429.62.jpg
https://pic.maxiol.com/images2/1728942553.2987899429.631.jpg


https://pic.maxiol.com/images2/1728976790.2987899429.71.jpg
https://pic.maxiol.com/images2/1728976990.2987899429.72.jpg
https://pic.maxiol.com/images2/1728977029.2987899429.731.jpg


https://pic.maxiol.com/images2/1728988221.2987899429.81.jpg
https://pic.maxiol.com/images2/1728988248.2987899429.82.jpg
https://pic.maxiol.com/images2/1728988279.2987899429.831.jpg


https://pic.maxiol.com/images2/1728988322.2987899429.91.jpg
https://pic.maxiol.com/images2/1728988369.2987899429.92.jpg
https://pic.maxiol.com/images2/1728988413.2987899429.931.jpg


https://pic.maxiol.com/images2/1728992614.2987899429.101.jpg
https://pic.maxiol.com/images2/1728992647.2987899429.102.jpg
https://pic.maxiol.com/images2/1728992682.2987899429.1031.jpg


https://pic.maxiol.com/images2/1728992721.2987899429.111.jpg
https://pic.maxiol.com/images2/1728992756.2987899429.112.jpg
https://pic.maxiol.com/images2/1728992782.2987899429.1131.jpg


https://pic.maxiol.com/images2/1729008199.2987899429.121.jpg
https://pic.maxiol.com/images2/1729008281.2987899429.122.jpg
https://pic.maxiol.com/images2/1729008381.2987899429.1231.jpg


https://pic.maxiol.com/images2/1729010017.2987899429.131.jpg
https://pic.maxiol.com/images2/1729010053.2987899429.132.jpg
https://pic.maxiol.com/images2/1729010097.2987899429.1331.jpg


https://pic.maxiol.com/images2/1729011507.2987899429.141.jpg
https://pic.maxiol.com/images2/1729011579.2987899429.142.jpg
https://pic.maxiol.com/images2/1729011609.2987899429.1431.jpg


Противоположный пример.
Сразу при включении "снежит", но буквально минут через 5-10 эффект синдрома пропадает
Проц в цанговой панельке, уже без переходника. Это финал!
https://pic.maxiol.com/images2/1729066013.2987899429.151.jpg
https://pic.maxiol.com/images2/1729066241.2987899429.152.jpg
https://pic.maxiol.com/images2/1729104443.2987899429.1531.jpg

Titus
15.10.2024, 00:06
Итак, начинаю новую серию тестов, по три картинки на проц (картинка с тестом Патрика - это для ЗлоКиллер-а, на нее не смотрите
Тест Патрика малоинформативен. Он написан примерно так 'я не знаю, что там происходит, поэтому покажу все флаги подряд в какой-то там последовательности, но все не влезло, поэтому частично'.
А мой тест написан так 'Я знаю, что там происходит, поэтому покажу только то, что нужно, при этом целиком и в наиболее дружественно воспринимаемых координатах и форме'.

- - - Добавлено - - -


Чего не сделаешь ради науки
А название процессора-то где? И полная маркировка?

Titus
15.10.2024, 00:14
так первый номер а дин
В смысле номер один?
Маркировка процессора какая? Ну буковки типа Zillog Z80C04 и т.д.?

Titus
15.10.2024, 00:26
А, все, увидел) У тебя многоэтажные картинки)

- - - Добавлено - - -

Значит это 1858ВМ3 лепит такую картинку нам экзотическую)

- - - Добавлено - - -

Кстати, хорошо бы попросить иностранцев, чтобы они тоже прогнали мой тест. У них там реалов много. Ты вроде на их форумах зареган, можешь кинуть им просьбу?

Titus
15.10.2024, 00:44
А у меня то дискорд заблокировали, как и всемъ)
Кто был ничемъ, тот встанет в семъ! Или в восемъ! (c)

Я до сих пор в шоке, как технически подкованным людям могут что-то заблокировать в интернете) Шутите, наверное)

Titus
15.10.2024, 11:11
По поводу 7-го процессора - ты не ошибся? Это действительно его фотка? На тесте бордюр черный, значит NMOS, и тест ведет себя как на NMOS. Oднако по маркировке обычный CMOS - Zilog Z84C0006PEC. Может перемаркировка?

- - - Добавлено - - -

Еще замечание - у тебя фотик наводит резкость не на процессоры, а на чип рядом. Помоги ему увидеть то, что надо)

- - - Добавлено - - -

Из находок - удивил процессор NEC JAPAN - D780C -2 8911Y5014. У него все поля белые. Ни на одном NMOS такого не было.

- - - Добавлено - - -

Ну и конечно удивил КР1858ВМ3 - 9507 (завод Транзистор, Минск). Первый нестабильный CMOS. Хотя, считалось, что ВМ3 - это тоже NMOS, типа как клон ВМ1.

- - - Добавлено - - -

Ну и ГДР'овский 80A-CPU - MME9212 по тестам оказался полным клоном Т34 (вернее, Т34 клон ГДР'овского). А оба они, как я уже упоминал, судя по моему тесту, клоны GoldStar Z8400A PS.

zebest
15.10.2024, 13:36
перепроверил седьмой - у меня все верно.
Добавил еще пару.
Восьмой - стабилен
Девятый - в тесте Патрика нестабильность есть (даже на картинке можно найти). в тесте Titus-a - картинка стабильная.
Вот такая фня, малята...
upd +2 процессора
Оба стабильны, НО!
на обоих маркировка Z84C0020PEC
вот только один CMOS, другой - NMOS
кЕтайсы-маркираторы ваще не паляЦЦА!

Titus
15.10.2024, 16:12
вот только один CMOS, другой - NMOS
Скорее всего это перемаркировка из Zilog Z8400APS. Тоже, кстати, уникальный проц. NMOS, а поля, как в CMOS.

- - - Добавлено - - -


Девятый - в тесте Патрика нестабильность есть (даже на картинке можно найти). в тесте Titus-a - картинка стабильная.
Я думаю, это связано с тем, что порог находится прям где-то на самой грани, и небольшое отличие содержимого регистров в тестах, или адреса кода, в одном тесте дает незначительную нестабильность.
Тоже самое, как на процессоре TSL 80H-CPU от creator'а в одном поле были отдельные пиксели изредка. Может быть как раз в тесте Патрика их бы и не было.

- - - Добавлено - - -

Попробуй подольше погонять его в моем тесте, может быть пальцами при этом потрогать или еще что. Не икслючено, что появяться пиксели.

- - - Добавлено - - -

Я думаю, что процессор вовсе не ST, а тоже перемаркировка. Посмотри, надпись чуть криво идет по сравнению со вторым процессором, который родной ST.

zebest
15.10.2024, 19:13
Попробуй подольше погонять его в моем тесте, может быть пальцами при этом потрогать или еще что. Не икслючено, что появяться пиксели.
до проца вообще не вариант дотронуться. Бутерброд-с...

добавлен 12-й процессор.
из интересностей - у Патрика "шумит" сильно, это и так видно.
в 9-м тесте - в белом секторе поначалу или вообще не было точек, или вот одну поймал(на фото), с итерациями проскакивало 0-1-2.
сейчас же, за несколько часов работы теста - в белом секторе меньше 10-15 не бывает, но не более 20-ти навскидку.

добавлен 13-й процессор, NEC
тут без неожиданностей, стабильный, как и его брат за номером 6

добавлен 14-й процессор. GS. Надпись на нем такая бледная и есть, это еще хорошо получилось.
Думаю на этом финал.
Осталось 2 проца ST(с короткими ногами) - не завелись и один Zilog не завелся, и Т34, итого еще 4
Ну может попробую попозже с Т34 еще без переходника, он так то точно работал.
Всеееееееее... Кино то уже кончилось! (с)
Делайте выводы.

Titus
15.10.2024, 21:06
в 9-м тесте - в белом секторе поначалу или вообще не было точек, или вот одну поймал(на фото), с итерациями проскакивало 0-1-2.
сейчас же, за несколько часов работы теста - в белом секторе меньше 10-15 не бывает, но не более 20-ти навскидку.
А видео-то где? Надо же посмотреть, в каком секторе и где.

DDp
20.10.2024, 20:02
...форуме спектрумистов ни один человек в этой теме не запустил тест.
Я запустил! :v2_dizzy_fire:

По ссылке (https://disk.yandex.ru/d/Xj7W5bJNB5t5jQ) архив с результатами тестирования двенадцати микросхем.
Экземпляры с 01 по 08 из "свежего" приобретения (в этом тысячелетия).
Экземпляры с 09 по 12 из 90-х.


81431


81432
Меняется плотность пикселей, если держу палец на выводах, около 6 вывода - CLK.
81433


1) ZX Evolution (rev.A) - без "видеоэфектов"
2) Pentagon SL 2.2 - есть "видеоэфекты"
81434
Меняется плотность пикселей, если держу палец на выводах, около 6 вывода - CLK.
81435



81436

Titus
20.10.2024, 22:06
Я запустил!
Образцово-показательные тесты)

- - - Добавлено - - -


Меняется плотность пикселей, если держу палец на выводах, около 6 вывода - CLK.
Очень хорошо! Теперь мы имеем хотя бы один (а уже не один) пример, что прикосновение пальца меняет характеристику (что и было предсказано).

- - - Добавлено - - -

В общем, прекрасные и показательные тесты.

Как говорится, если ваш Z80 не шумит, это не значит, что он стабилен, это значит, что вы не в том режиме его гоняли, или не трогали пальцем)

aviator
20.10.2024, 22:51
Как говорится, если ваш Z80 не шумит, это не значит, что он стабилен, это значит, что вы не в том режиме его гоняли, или не трогали пальцем)
Гусары, молчать! :-D
Вроде бы ещё есть ядра Z80 в радиацианно-стойком исполнении. Потестировать бы их... Возможно там не допустили этих двух бит, "повешенных в воздухе".

Titus
20.10.2024, 22:56
Возможно там не допустили этих двух бит, "повешенных в воздухе".
Проблема не в том, что они повешены) Повешенных сигналов там много возникает в процессе работы. Проблема в том, чти их читают, когда они повешены)

Titus
28.10.2024, 16:00
Друзья, не ленимся, запускаем тест на реалах!

Что за болотце такое, все в спячку впали уже? )

creator
28.10.2024, 16:06
Titus, увы, список статистики не обновляется.

Titus
28.10.2024, 16:11
Titus, увы, список статистики не обновляется.
Какой список?

Lethargeek
28.10.2024, 19:57
если пальцем трогать особо дерзко, так не только флаги могут шуметь :rolleyes:

Titus
09.11.2024, 18:40
Ну что, больше нет желающих вложить свою лепту в историю процессора Z80? )

ZXMAK
07.05.2025, 22:10
Если правильно понимаю - на экране 4 области LT,RT,LB,RB (Left/Right, Top/Bottom). Где LT и RT связаны с флагом F3, а LB и RB с флагом F5.
Левая и правая половина - это как понимаю состояние бита аккумулятора, соответствющуего флагу.
Дальше не совсем ясно - как происходит заполнение четверти, от чего каждый байт зависит?

Как понял - тест не проверяет зависимость от результатов изменения флагов на предыдущих операциях?
Попробовал в эмуляторе отключить эмуляцию зависимости от предыдущего состояния флагов и результаты теста не изменились, хотя на реальных процессорах и в нет-лист симуляторе такая зависимость есть.

Судя по коду, перед выполением SCF тест выполняет POP AF. которая сбрасывает состояние изменившихся флагов, влияющее на результат в F3 и F5. Т.е. по сути тестируется только нестабильная часть влияющая на эти флаги?

Titus
08.05.2025, 00:13
Судя по коду, перед выполением SCF тест выполняет POP AF. которая сбрасывает состояние изменившихся флагов, влияющее на результат в F3 и F5. Т.е. по сути тестируется только нестабильная часть влияющая на эти флаги?
В тесте проверяется влияние всех 16 линий внутренней шины LBUS и HBUS на плавающие флаги 3 и 5.
Разумеется, на них влияют вообще все шины процессора, и создаваемые ими емкостные и индуктивные связи.
Но, во первых, я не могу в тесте перебрать все варианты всех состояний процессора за обозримое время существования Вселенной.
А во вторых, влияние ближайших шин наиболее показательно и хорошо позволяет визуализировать процессы, а также отличать разные версии кристаллов.

ZXMAK
08.05.2025, 07:18
В тесте проверяется влияние всех 16 линий внутренней шины LBUS и HBUS на плавающие флаги 3 и 5.

так а что за условие используется для разных байтов в одном квадранте? Хотелось бы понять, что отражают узоры которые получаются на разных процессорах.

Titus
08.05.2025, 12:59
Вот вам исходик теста, там все подписано:


LX DEFINE IXL
HX DEFINE IXH
LY DEFINE IYL
HY DEFINE IYH

;---------------------------------------------------------------



STACK EQU $C000

ConvTable EQU $8000

PatternX30 EQU $A000
PatternY31 EQU $A080

PatternX31 EQU $A100
PatternY30 EQU $A180

PatternX50 EQU $A200
PatternY51 EQU $A280

PatternX51 EQU $A300
PatternY50 EQU $A380


;================================================= ==============

ORG $9000
BeginTest:
DI
LD SP,STACK

LD HL,$4000 ; Очистить экран
LD DE,$4001 ;
LD BC,$1800 ;
LD (HL),L ;
LDIR ;

;---------------------------------------------------------------

; LD HL,$5800
LD B,L

BT_T0: LD (HL),$78 ; Верхняя треть экрана - белая бумага, черные чернила
INC HL ;
DJNZ BT_T0 ;

BT_T1: LD (HL),$69 ; Средняя треть экрана - белая бумага, черные синие
INC HL ;
DJNZ BT_T1 ;

BT_T2: LD (HL),$38 ; Нижняя треть экрана - белая бумага, черные чернила
INC HL ;
DJNZ BT_T2 ;

;---------------------------------------------------------------

LD A,2 ; Открыть поток вывода 2 (основной экран)
CALL $1601 ;

LD HL,TextInfo ; Печать информационного текста
LD A,(HL)
PrintTextLoop: RST $10
INC HL
LD A,(HL)
OR A
JP P,PrintTextLoop


;---------------------------------------------------------------

DI

LD BC,$00FE ;

DEFB $ED,$71 ; OUT (c),0 (определение CMOS/NMOS)

LD HL,ConvTable ;

TableLoop: LD D,$08 ;
CALL CreateTable ; Построить таблицу для бита 3

LD D,$20 ;
CALL CreateTable ; Построить таблицу для бита 5

;--------------------------------------------------------------- Построение паттернов для бита 3

LD HL,PatternX30 ; Паттерн для X (F)
XOR A ;
LD B,$80 ; B - длина таблицы 128 байт

CPX3_Loop: LD (HL),A ; Записать байт в таблицу
INC L ;

INC A ; Инкремент цепочки бит по увеличению приоритета:
LD C,A ; 0,1,4,5,6,7,2
AND $03 ; так как 2 имеет большое влияние на результат
LD A,C ;
JR NZ,CPX3_noBit2 ;
ADD A,$0C ;
CPX3_noBit2: JR NC,CPX3_noBit8 ;
ADD A,$04 ;
CPX3_noBit8: DJNZ CPX3_Loop ;

;---------------------------------------------------------------

LD HL,PatternY31 ; Паттерн для Y (A)
LD A,$08 ; Бит 3 установлен, чтобы быть в противофазе с X (F)
LD B,$40 ; B - длина таблицы 64 байта

CPY3_Loop: LD (HL),A ; Записать байт в таблицу
INC L ;

ADD A,2 ; Инкремент цепочки бит по увеличению приоритета:
BIT 1,A ; 1,4,5,6,7,2
JR NZ,CPY3_noBit2 ; так как 2 имеет большое влияние на результат
ADD A,$0C ; 0 не используется для сокращения таблицы вдвое
CPY3_noBit2: JR NC,CPY3_noBit8 ;
ADD A,$04 ;
CPY3_noBit8: DJNZ CPY3_Loop ;


;--------------------------------------------------------------- Построение паттернов для бита 5

LD HL,PatternX50 ; Паттерн для X (F)
XOR A ;
LD B,$80 ; B - длина таблицы 128 байт

CPX5_Loop: LD (HL),A ; Записать байт в таблицу
INC L ;

INC A ; Инкремент цепочки бит по увеличению приоритета:
LD C,A ; 0,1,2,3,4,6,7
AND $1F ;
LD A,C ;
JR NZ,CPX5_noBit5 ;
ADD A,$20 ;
CPX5_noBit5: DJNZ CPX5_Loop ;

;---------------------------------------------------------------

LD HL,PatternY51 ; Паттерн для Y (A)
LD A,$20 ; Бит 5 установлен, чтобы быть в противофазе с X (F)
LD B,$40 ; B - длина таблицы 64 байта

CPY5_Loop: LD (HL),A ; Записать байт в таблицу
INC L ;

ADD A,2 ; Инкремент цепочки бит по увеличению приоритета:
LD C,A ; 1,2,3,4,6,7
AND $1F ; 0 не используется для сокращения таблицы вдвое
LD A,C ;
JR NZ,CPY5_noBit5 ;
ADD A,$20 ;
CPY5_noBit5: DJNZ CPY5_Loop ;

;---------------------------------------------------------------

LD HL,PatternX30 ; Копировать PatternX30/PatternY31 в PatternX31/PatternY30
LD DE,PatternX31 ; с инверсией бита 3
Inv3Loop: LD A,(HL) ;
XOR $08 ;
LD (DE),A ;
INC L ;
INC E ;
JR NZ,Inv3Loop ;

LD HL,PatternX50 ; Копировать PatternX50/PatternY51 в PatternY51/PatternY50
LD DE,PatternX51 ; с инверсией бита 5
Inv5Loop: LD A,(HL) ;
XOR $20 ;
LD (DE),A ;
INC L ;
INC E ;
JR NZ,Inv5Loop ;




;--------------------------------------------------------------- Главный цикл теста

MainLoop:
LD A,ConvTable / 256 ; Таблица бит для бита 3
LD HL,$4000 ; Верхний левый график
LD IX,PatternX30 ; IX - таблица паттернов по X (F) для бита 3 = 0
LD IY,PatternY31 ; IY - таблица паттернов по Y (A) для бита 3 = 1
CALL DrawGraph ; Рисвать график

LD A,ConvTable / 256 ; Таблица бит для бита 3
LD HL,$4010 ; Верхний правый график
LD IX,PatternX31 ; IX - таблица паттернов по X (F) для бита 3 = 1
LD IY,PatternY30 ; IY - таблица паттернов по Y (A) для бита 3 = 0
CALL DrawGraph ; Рисвать график

LD A,(ConvTable + $800) / 256 ; Таблица бит для бита 5
LD HL,$4800 ; Нижний левый график
LD IX,PatternX50 ; IX - таблица паттернов по X (F) для бита 5 = 0
LD IY,PatternY51 ; IY - таблица паттернов по Y (A) для бита 5 = 1
CALL DrawGraph ; Рисвать график

LD A,(ConvTable + $800) / 256 ; Таблица бит для бита 5
LD HL,$4810 ; Нижний правый график
LD IX,PatternX51 ; IX - таблица паттернов по X (F) для бита 5 = 1
LD IY,PatternY50 ; IY - таблица паттернов по Y (A) для бита 5 = 0
CALL DrawGraph ; Рисвать график




JP MainLoop ; Повторить тест заново

;================================================= ==============
; Рисование графика шириной 128, высотой 64 точки


DrawGraph: ; HL - адрес трети на экране
; A - старший байт адреса таблицы бит
; IX - таблица паттернов по X (F)
; IY - таблица паттернов по Y (A)

LD (ByteLoop + 2),A ; Сохранить старший адрес таблицы бит

ByteLoop: LD DE,ConvTable ; D - старший байт адреса таблицы ConvTable
; E - буфер байта для экрана
TestLoop:
LD B,(IY+00) ; B - паттерн по Y (A)
LD C,(IX+00) ; C - паттерн по X (F)

PUSH BC ; Одиночный тест SCF
POP AF ;
SCF ;
PUSH AF ;
POP BC ;

LD B,D ; C - регистр флагов
LD A,(BC) ; (BC) -> A (битовая маска для текущей позиции экрана)
OR E ; Установить в байте точку
LD E,A ;
INC D ; Перейти к следующему биту

INC LX ; Перейти к следующему паттерну по X (F)

LD A,D
AND $07 ; Цикл на 8 бит в байте
JP NZ,TestLoop ;

LD (HL),E ; Записать байт в экран
INC HL ; Перейти к следующему байту

LD A,L ;
AND $0F ;
JP NZ,ByteLoop ; Цикл по горизонтали до конца половины экрана

INC LY ; Перейти к следующему паттерну по Y (A)
LD LX,0 ; Перейти на начало таблицы паттернов для X (F)

LD DE,$00F0 ; Перейти на следующую линию
ADD HL,DE ;

LD A,H ;
AND $07 ; Цикл на 8 линий
JP NZ,ByteLoop ;

LD DE,-$07E0 ; Перейти на следующую строку (знакоместо)
ADD HL,DE ;

BIT 0,H ; Цикл на 8 знакомест в высоту (64 точки)
JP Z,ByteLoop ;

RET ; Выход

;================================================= ==============

CreateTable: LD E,$80 ;

CT_Loop: LD A,L
AND D
JR Z,CT_Zero
LD A,E
CT_Zero: LD (HL),A
INC L
JR NZ,CT_Loop
INC H

SRL E ;
JR NC,CT_Loop ; Цикл на 8 бит в байте

RET


;================================================= ==============

TextInfo: DEFB 22,16,5,17,7,16,0,"SCF Test-9 by dr.Titus"
DEFB 22,21,0,"Border: Black-NMOS; White-CMOS"
DEFB 22,18,0,"Zones:", 19,1,"F3=0,A3=1; F3=1,A3=0"
DEFB 22,19,6,17,5,16,1,"F5=0,A5=1; F5=1,A5=0"
DEFB $FF


;---------------------------------------------------------------

cafedead
20.06.2025, 16:08
Всем привет. Увы, не знаю, как вас, а меня все эти тесты вообще не приблизили к пониманию, как бы это все можно было бы сэмулировать. Но тут мне помог случай. Мне тоже удалось пронаблюдать девиации во флаге F3 на подопытном, даже несмотря на то, что процессор тактировался достаточно медленно. Процессор подключен к микроконтроллеру, который имитирует окружение, память, забирая и поставляя данные, и отправляя данные на компьютер, где я могу это все проанализировать с красивой расшифровкой. Увы, маркировки на процессоре нет, но это какой-то из старых, был в Спектруме 48К, Ленинград, наверное, самосбор, который лежит у меня с детства.

Интересной для меня показалась команда CP, поскольку не меняет регистр A, но, тем не менее, влияет на флаги, после нее могло найтись что-то интересненькое. Сначала немного потыкал ее, получил странное, например, при нулях в регистрах после SCF во флаге F3 я получил единицу, поэтому написал цикл:


LD A,0
LD B,0
LOOP:
CP B
SCF
PUSH BC; чтобы в дампе был виден B
POP DE
PUSH AF; чтобы в дампе были видны флаги
POP DE
DJNZ LOOP


После CP флаги F5 и F3 должны браться из аргумента, в моем случае это B, который у нас на первой итерации #00, затем изменяется от #FF до #01. Этот код выполнялся три раза, полный дамп каждого прогона сохранялся. В некоторых полученных значениях были обнаружены девиации. На следующий день я также запустил немного другой код, но на сей раз получил уже более стабильные и ожидаемые результаты, хоть и не без нюансов, но без явных девиаций. Вернул прошлый код, но девиаций также больше не было, и не представляю, как можно было бы повторить те результаты. Сделал два прогона. Все результаты свел в табличку, здесь значения регистра флагов для каждого из значений B:



\ | 00 | 10 | 20 | 30 | 40 | 50 | 60 | 70 | 80 | 90 | A0 | B0 | C0 | D0 | E0 | F0 |
---+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----+----|
00 | 4* | 8* | A* | A* | 8* | 8* | A* | A* | 8D | 0* | 2* | 2* | 0* | 0* | 2* | 2* |
01 | 8* | 8* | A* | A* | 8* | 8* | A* | A* | 0* | 0* | 2* | 2* | 0* | 0* | 2* | 2* |
02 | 8* | 8* | A* | A* | 8* | 8* | A* | A* | 0* | 0* | 2* | 2* | 0* | 0* | 2* | 2* |
03 | 8* | 8* | A* | A* | 8* | 8* | A* | A* | 0* | 0* | 2* | 2* | 0# | 0* | 2* | 2% |
04 | 8* | 8# | A* | A* | 8* | 8* | A* | A* | 0* | 0% | 2* | 2# | 0# | 0% | 2* | 2% |
05 | 8# | 8# | A# | A# | 8* | 8* | A* | A* | 0* | 0% | 2* | 2# | 0# | 0% | 2% | 2% |
06 | 8# | 8# | A* | A# | 8* | 8* | A* | A* | 0* | 0% | 2# | 21 | 0# | 01 | 2% | 21 |
07 | 8# | 8# | A# | A# | 8* | 8* | A* | A* | 0* | 01 | 21 | 21 | 01 | 01 | 2% | 21 |
08 | 89 | 89 | A9 | A9 | 89 | 89 | A9 | A9 | 09 | 09 | 29 | 29 | 09 | 09 | 29 | 29 |
09 | 89 | 89 | A9 | A9 | 89 | 89 | A9 | A9 | 09 | 09 | 29 | 29 | 09 | 09 | 29 | 29 |
0A | 89 | 89 | A9 | A9 | 89 | 89 | A9 | A9 | 09 | 09 | 29 | 29 | 09 | 09 | 29 | 29 |
0B | 89 | 89 | A9 | A9 | 89 | 89 | A9 | A9 | 09 | 09 | 29 | 29 | 09 | 09 | 29 | 29 |
0C | 89 | 89 | A9 | A9 | 89 | 89 | A9 | A9 | 09 | 09 | 29 | 29 | 09 | 09 | 29 | 29 |
0D | 89 | 89 | A9 | A9 | 89 | 89 | A9 | A9 | 09 | 09 | 29 | 29 | 09 | 09 | 29 | 29 |
0E | 89 | 89 | A9 | A9 | 89 | 89 | A9 | A9 | 09 | 09 | 29 | 29 | 09 | 09 | 29 | 29 |
0F | 89 | 89 | A9 | A9 | 89 | 89 | A9 | A9 | 09 | 09 | 29 | 29 | 09 | 09 | 29 | 29 |


Здесь * означает, что значение ожидалось 1, но было 9 в предыдущий день, а на следующий день стало 1,
# означает, что в предыдущий день, когда была обнаружена нестабильность, значение иногда было 1, иногда 9, отличалось в каждом дампе,
% означает то же, только сравнение было с другим сохраненным дампом. Вообще, все собранные дампы субъективно охарактеризовал бы, как стабильный в одну сторону, стабильный в другую сторону, и наименее стабильный.

Думаю, из такой таблички вполне можно выявить некую систему, сделать какие-то выводы, лучше понять, как такое поведение можно было бы проэмулировать, если есть такое желание. Предполагаю, что и F5 может аналогичным образом проявлять нестабильность, это только в моем случае он был стабильным. Наверное, может быть нестабильность и с установленными значениями флагов, но в моем случае это было связано именно с нулевыми их ожидаемыми значениями, где они такими должны были быть.

Кроме того, хотел бы обратить ваше внимание на значение для B=#80, где флаги выставились как #8D, т.е. вместе с флагом переполнения F3 также раз за разом оказывается установленным, хотя в B соответствующий бит сброшен, в результате вычитания бит сброшен, в регистре A соответствующий бит сброшен. Тем не менее, это значение стабильно повторяется во всех моих собранных дампах, 5 из 5. Хотя в чуть другом коде получил таки #85. Для B=#00 я получал как #49 - все три дампа в предыдущий день, так и #41 - в обоих дампах на следующий день.

aviator
20.06.2025, 18:15
Так а зачем это эмулировать? Этот шум на вычисления никак не влияет.

cafedead
20.06.2025, 19:44
Так а зачем это эмулировать? Этот шум на вычисления никак не влияет.
Например, чтобы получить аналогичные узоры в тесте Титуса, но уже под управлением эмулятора. Шум влияет на возможность установления факта, что программа выполняется под управлением эмулятора, если эмулятор процессора с одной стороны вроде бы ведет себя как Zilog, но после CP r : SCF выдает что-то странное. Вы сформулируете, что он должен выдавать? Ну вот на данный момент все эмуляторы выдают что-то другое, и если к эмуляторам, тупо берущим значение из регистра A, аля NEC NMOS, вопросов нет, то вот к эмуляторам, пытающимся считать что-то с использованием регистра Q и последних изменений флагов, у меня вопросики. Они ведут себя сначала как один процессор, а потом как другой. Поэтому нужны проверки, тесты, и так далее. Выяснение всех обстоятельств.

cafedead
01.07.2025, 13:51
JeRrS любезно потестировал на паре машин. На одной процессор выдавал стабильное значение из регистра A, но на другой - выдавал примерно то же, что и мой процессор - из флагов, с мерцанием, но все же с некоторыми отличиями. Прикрепляю его фотку с его результатом и моими к этому пояснениями. Надеюсь, нигде не ошибся.

82427

Хотелось бы, чтобы JeRrS прокомментировал, какие именно секции у него мерцали, ориентируясь по матрице, которую я здесь наложил. С его слов я примерно понял, но в таких делах нужна конкретика.

JeRrS
01.07.2025, 15:55
Так-с прошу прощения за предыдущую фотографию это мой косяк с БП был! Но если вдруг это тоже как-то для тестов нужно то грубо говоря при 5.15В он нормально показывает и далее я начинаю снижать до 4.5В

Хоббит (тот что в корпусе и клавиатурой от БК-0010)
https://i.postimg.cc/yJnJksW8/DSC01807.jpg (https://postimg.cc/yJnJksW8)https://i.postimg.cc/2b61WMBF/DSC01808.jpg (https://postimg.cc/2b61WMBF)https://i.postimg.cc/CRGnpjgD/DSC01809.jpg (https://postimg.cc/CRGnpjgD)https://i.postimg.cc/G4wTfXZd/DSC01810.jpg (https://postimg.cc/G4wTfXZd)

Квант-БК
https://i.postimg.cc/ZBMCxH8k/DSC01805.jpg (https://postimg.cc/ZBMCxH8k)

Sintez-M / Компаньон-2 / Кворум БК 04
https://i.postimg.cc/XZnGjpjP/DSC01806.jpg (https://postimg.cc/XZnGjpjP)

cafedead
01.07.2025, 16:26
Но если вдруг это тоже как-то для тестов нужно то грубо говоря при 5.15В он нормально показывает и далее я начинаю снижать до 4.5В
Идеально. Как раз то, о чем Титус говорил. Поймали, так сказать, в динамике.

Хотя у Хоббита картинка изменилась в сравнении со старой картинкой. На вашей новой фотографии при сниженном напряжении данные флага F3 влияют на всю треть, а на старой фотографии, которую я комментировал - на половину каждой трети. Это вот там как раз мерцание было тогда?

JeRrS
01.07.2025, 16:44
Это вот там как раз мерцание было тогда? да, я правда не помню какое на тот момент тогда стояло напряжение, но точно ниже чем 5В это было.

cafedead
09.07.2025, 21:31
да, я правда не помню какое на тот момент тогда стояло напряжение, но точно ниже чем 5В это было.
А какой внутри процессор возможно увидеть?

JeRrS
10.07.2025, 15:55
А какой внутри процессор возможно увидеть?
https://i.postimg.cc/6TKh6H1L/image.jpg (https://postimg.cc/6TKh6H1L)