Просмотр полной версии : Загадка плавающих флагов SCF/CCF раскрыта!
Для тех, кто не следит за этой (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
для сбора статистики требуется
не вижу практического смысла.
не вижу практического смысла.
Ничего страшного) У всех свои интересы)
100 лет спустя оказывается, что есть проблемы, которые раньше и не были известны :)
100 лет спустя оказывается, что есть проблемы, которые раньше и не были известны
100 лет, конечно, еще не прошло)
Меня больше смущает, что на форуме спектрумистов ни один человек в этой теме не запустил тест. Ни один!
100 лет, конечно, еще не прошло)
Меня больше смущает, что на форуме спектрумистов ни один человек в этой теме не запустил тест. Ни один!
У меня нет реального спектрума, от меня нет пользы в этом вопросе.
Меня больше смущает, что на форуме спектрумистов ни один человек в этой теме не запустил тест. Ни один!
потому что флаги 3 и 5 никому не нужны, а кому нужны другие вещи никто не делает
Десять двадцатых пеков на 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?
Так а что нужно делать, чтобы всё отрабатывало 100% корректно на всех вариантах z80?
плясать с бубном (ничего) оно итак работает всё корректно!
transman
07.10.2024, 18:42
плясать с бубном (ничего) оно итак работает всё корректно!
Ну слава богу. Я уж думал надо будет извращаться, чтобы всё работало одинаково везде с учётом скрытых багов процессора.
А что, щас ещё кодят на спектруме?
transman
07.10.2024, 19:40
Кодят где придётся. Исполняемый код запускают на спектрумах и с ним совместимых.
Так а что нужно делать, чтобы всё отрабатывало 100% корректно на всех вариантах z80?
Ничего не нужно делать. Все варианты работы нормальные.
Тест нужно запустить для сбора статистики, какие модели процессоров, как ведут себя в командах SCF/CCF. Может быть найдем какое-нибудь редкое поведение.
Ну слава богу. Я уж думал надо будет извращаться, чтобы всё работало одинаково везде с учётом скрытых багов процессора.
как там говориться, работало и хай на неё, ещё столько же проработает!
а то нашли багулю и мир должен схлопнуться, но нет... оказывается проблемы в головах )
А что, щас ещё кодят на спектруме?
Как минимум один математик точно :) Почему бы и нет. Если бы не работа, которая сжирает всю жизнь, я бы тоже покодил.
http://www.sanarin.ru/pic/Test%20SCF9.jpg
ZX-Spectrum+2, ZiLOG Z8400APS
ZX-Spectrum+2, ZiLOG Z8400APS
Странный процессор. NMOS, а ведет себя, как CMOS.
Можно полную маркировку или фотку?
- - - Добавлено - - -
Странный процессор. NMOS, а ведет себя, как CMOS.
Можно полную маркировку или фотку?
http://www.sanarin.ru/pic/20241010_082714.JPG
https://s1.hostingkartinok.com/uploads/images/2024/10/882407737eef58e4ca2dd539b4b48a40.jpg
Бордер белый, картинка - шавелиЦЦа, смысла в видео не вижу вообще.
Цифры то хоть правильные??
Бордер белый, картинка - шавелиЦЦа, смысла в видео не вижу вообще.
Цифры то хоть правильные??
Видео обязательно нужно! Это же первый результат глюка на CMOS-процессоре!
Какая полная маркировка процессора?
Все мои спектрумы остались в Белгороде.
Но, насколько я помню, биты 3 и 5 не используются и не несут смысловой нагрузки в регистре F. Или другие биты также портятся?
Все мои спектрумы остались в Белгороде.
Но, насколько я помню, биты 3 и 5 не используются и не несут смысловой нагрузки в регистре F. Или другие биты также портятся?
Другие биты не портятся.
Смысловой нагрузки не несут. Это чисто для понимания внутренней работы процессора, точного повторения в ФПГА или эмуляторе и для сбора статистики, какие вообще процессоры выпускались.
Я так понимаю это обычный Bus конфликт, когда 2 драйвера шины пихают своё значение на неё? Разве в этом случае не должна победить земля?
Я так понимаю это обычный Bus конфликт, когда 2 драйвера шины пихают своё значение на неё? Разве в этом случае не должна победить земля?
Не совсем так. Это скорее две заряженных шины, одна, допустим, до 0, другая до плюса, причем одинаково сильно, и они обьединяются уже отключенные от драйверов. В итоге противоположные заряды усредняются. И это среднее, если находится в районе порога срабатывания затвора входного транзистора, дает плавающее значение.
Не совсем так. Это скорее две заряженных шины, одна, допустим, до 0, другая до плюса, причем одинаково сильно, и они обьединяются уже отключенные от драйверов. В итоге противоположные заряды усредняются. И это среднее, если находится в районе порога срабатывания затвора входного транзистора, дает плавающее значение.
Тогда это Open Bus конфликт. Спасибо.
Тогда это Open Bus конфликт. Спасибо.
Что это в переводе на русский язык? Дословный перевод я понимаю, но нужен аналог в русском языке)
Как это переводится я не знаю, м.б. "конфликт плавающих шин"? :)
- - - Добавлено - - -
А к вопросу местных "Зачем оно надо?": ну как бы у вас в процессоре оказывается есть аппаратный датчик случайных чисел теперь. Возможно не очень "случайный", но как источник энтропии - сойдёт.
Бордер белый, картинка - шавелиЦЦа, смысла в видео не вижу вообще.
Цифры то хоть правильные??
zebest, ты не пропустил мой вопрос, что это был за процессор, и снять видео?
А к вопросу местных "Зачем оно надо?": ну как бы у вас в процессоре оказывается есть аппаратный датчик случайных чисел теперь. Возможно не очень "случайный", но как источник энтропии - сойдёт.
Нет, как источник энтропии не пойдёт. Это видно по картинкам. Если процессор и шумит, то распределение не является равномерным. А на некоторых экземплярах вообще не шумит.
ты не пропустил мой вопрос, что это был за процессор, и снять видео?
Ну нет же, как можно?!
Чего не сделаешь ради науки: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
Итак, начинаю новую серию тестов, по три картинки на проц (картинка с тестом Патрика - это для ЗлоКиллер-а, на нее не смотрите
Тест Патрика малоинформативен. Он написан примерно так 'я не знаю, что там происходит, поэтому покажу все флаги подряд в какой-то там последовательности, но все не влезло, поэтому частично'.
А мой тест написан так 'Я знаю, что там происходит, поэтому покажу только то, что нужно, при этом целиком и в наиболее дружественно воспринимаемых координатах и форме'.
- - - Добавлено - - -
Чего не сделаешь ради науки
А название процессора-то где? И полная маркировка?
так первый номер а дин
В смысле номер один?
Маркировка процессора какая? Ну буковки типа Zillog Z80C04 и т.д.?
А, все, увидел) У тебя многоэтажные картинки)
- - - Добавлено - - -
Значит это 1858ВМ3 лепит такую картинку нам экзотическую)
- - - Добавлено - - -
Кстати, хорошо бы попросить иностранцев, чтобы они тоже прогнали мой тест. У них там реалов много. Ты вроде на их форумах зареган, можешь кинуть им просьбу?
А у меня то дискорд заблокировали, как и всемъ)
Кто был ничемъ, тот встанет в семъ! Или в восемъ! (c)
Я до сих пор в шоке, как технически подкованным людям могут что-то заблокировать в интернете) Шутите, наверное)
По поводу 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.
перепроверил седьмой - у меня все верно.
Добавил еще пару.
Восьмой - стабилен
Девятый - в тесте Патрика нестабильность есть (даже на картинке можно найти). в тесте Titus-a - картинка стабильная.
Вот такая фня, малята...
upd +2 процессора
Оба стабильны, НО!
на обоих маркировка Z84C0020PEC
вот только один CMOS, другой - NMOS
кЕтайсы-маркираторы ваще не паляЦЦА!
вот только один CMOS, другой - NMOS
Скорее всего это перемаркировка из Zilog Z8400APS. Тоже, кстати, уникальный проц. NMOS, а поля, как в CMOS.
- - - Добавлено - - -
Девятый - в тесте Патрика нестабильность есть (даже на картинке можно найти). в тесте Titus-a - картинка стабильная.
Я думаю, это связано с тем, что порог находится прям где-то на самой грани, и небольшое отличие содержимого регистров в тестах, или адреса кода, в одном тесте дает незначительную нестабильность.
Тоже самое, как на процессоре TSL 80H-CPU от creator'а в одном поле были отдельные пиксели изредка. Может быть как раз в тесте Патрика их бы и не было.
- - - Добавлено - - -
Попробуй подольше погонять его в моем тесте, может быть пальцами при этом потрогать или еще что. Не икслючено, что появяться пиксели.
- - - Добавлено - - -
Я думаю, что процессор вовсе не ST, а тоже перемаркировка. Посмотри, надпись чуть криво идет по сравнению со вторым процессором, который родной ST.
Попробуй подольше погонять его в моем тесте, может быть пальцами при этом потрогать или еще что. Не икслючено, что появяться пиксели.
до проца вообще не вариант дотронуться. Бутерброд-с...
добавлен 12-й процессор.
из интересностей - у Патрика "шумит" сильно, это и так видно.
в 9-м тесте - в белом секторе поначалу или вообще не было точек, или вот одну поймал(на фото), с итерациями проскакивало 0-1-2.
сейчас же, за несколько часов работы теста - в белом секторе меньше 10-15 не бывает, но не более 20-ти навскидку.
добавлен 13-й процессор, NEC
тут без неожиданностей, стабильный, как и его брат за номером 6
добавлен 14-й процессор. GS. Надпись на нем такая бледная и есть, это еще хорошо получилось.
Думаю на этом финал.
Осталось 2 проца ST(с короткими ногами) - не завелись и один Zilog не завелся, и Т34, итого еще 4
Ну может попробую попозже с Т34 еще без переходника, он так то точно работал.
Всеееееееее... Кино то уже кончилось! (с)
Делайте выводы.
в 9-м тесте - в белом секторе поначалу или вообще не было точек, или вот одну поймал(на фото), с итерациями проскакивало 0-1-2.
сейчас же, за несколько часов работы теста - в белом секторе меньше 10-15 не бывает, но не более 20-ти навскидку.
А видео-то где? Надо же посмотреть, в каком секторе и где.
...форуме спектрумистов ни один человек в этой теме не запустил тест.
Я запустил! :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
Я запустил!
Образцово-показательные тесты)
- - - Добавлено - - -
Меняется плотность пикселей, если держу палец на выводах, около 6 вывода - CLK.
Очень хорошо! Теперь мы имеем хотя бы один (а уже не один) пример, что прикосновение пальца меняет характеристику (что и было предсказано).
- - - Добавлено - - -
В общем, прекрасные и показательные тесты.
Как говорится, если ваш Z80 не шумит, это не значит, что он стабилен, это значит, что вы не в том режиме его гоняли, или не трогали пальцем)
Как говорится, если ваш Z80 не шумит, это не значит, что он стабилен, это значит, что вы не в том режиме его гоняли, или не трогали пальцем)
Гусары, молчать! :-D
Вроде бы ещё есть ядра Z80 в радиацианно-стойком исполнении. Потестировать бы их... Возможно там не допустили этих двух бит, "повешенных в воздухе".
Возможно там не допустили этих двух бит, "повешенных в воздухе".
Проблема не в том, что они повешены) Повешенных сигналов там много возникает в процессе работы. Проблема в том, чти их читают, когда они повешены)
Друзья, не ленимся, запускаем тест на реалах!
Что за болотце такое, все в спячку впали уже? )
Titus, увы, список статистики не обновляется.
Titus, увы, список статистики не обновляется.
Какой список?
Lethargeek
28.10.2024, 19:57
если пальцем трогать особо дерзко, так не только флаги могут шуметь :rolleyes:
Ну что, больше нет желающих вложить свою лепту в историю процессора Z80? )
Если правильно понимаю - на экране 4 области LT,RT,LB,RB (Left/Right, Top/Bottom). Где LT и RT связаны с флагом F3, а LB и RB с флагом F5.
Левая и правая половина - это как понимаю состояние бита аккумулятора, соответствющуего флагу.
Дальше не совсем ясно - как происходит заполнение четверти, от чего каждый байт зависит?
Как понял - тест не проверяет зависимость от результатов изменения флагов на предыдущих операциях?
Попробовал в эмуляторе отключить эмуляцию зависимости от предыдущего состояния флагов и результаты теста не изменились, хотя на реальных процессорах и в нет-лист симуляторе такая зависимость есть.
Судя по коду, перед выполением SCF тест выполняет POP AF. которая сбрасывает состояние изменившихся флагов, влияющее на результат в F3 и F5. Т.е. по сути тестируется только нестабильная часть влияющая на эти флаги?
Судя по коду, перед выполением SCF тест выполняет POP AF. которая сбрасывает состояние изменившихся флагов, влияющее на результат в F3 и F5. Т.е. по сути тестируется только нестабильная часть влияющая на эти флаги?
В тесте проверяется влияние всех 16 линий внутренней шины LBUS и HBUS на плавающие флаги 3 и 5.
Разумеется, на них влияют вообще все шины процессора, и создаваемые ими емкостные и индуктивные связи.
Но, во первых, я не могу в тесте перебрать все варианты всех состояний процессора за обозримое время существования Вселенной.
А во вторых, влияние ближайших шин наиболее показательно и хорошо позволяет визуализировать процессы, а также отличать разные версии кристаллов.
В тесте проверяется влияние всех 16 линий внутренней шины LBUS и HBUS на плавающие флаги 3 и 5.
так а что за условие используется для разных байтов в одном квадранте? Хотелось бы понять, что отражают узоры которые получаются на разных процессорах.
Вот вам исходик теста, там все подписано:
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 - в обоих дампах на следующий день.
Так а зачем это эмулировать? Этот шум на вычисления никак не влияет.
cafedead
20.06.2025, 19:44
Так а зачем это эмулировать? Этот шум на вычисления никак не влияет.
Например, чтобы получить аналогичные узоры в тесте Титуса, но уже под управлением эмулятора. Шум влияет на возможность установления факта, что программа выполняется под управлением эмулятора, если эмулятор процессора с одной стороны вроде бы ведет себя как Zilog, но после CP r : SCF выдает что-то странное. Вы сформулируете, что он должен выдавать? Ну вот на данный момент все эмуляторы выдают что-то другое, и если к эмуляторам, тупо берущим значение из регистра A, аля NEC NMOS, вопросов нет, то вот к эмуляторам, пытающимся считать что-то с использованием регистра Q и последних изменений флагов, у меня вопросики. Они ведут себя сначала как один процессор, а потом как другой. Поэтому нужны проверки, тесты, и так далее. Выяснение всех обстоятельств.
cafedead
01.07.2025, 13:51
JeRrS любезно потестировал на паре машин. На одной процессор выдавал стабильное значение из регистра A, но на другой - выдавал примерно то же, что и мой процессор - из флагов, с мерцанием, но все же с некоторыми отличиями. Прикрепляю его фотку с его результатом и моими к этому пояснениями. Надеюсь, нигде не ошибся.
82427
Хотелось бы, чтобы JeRrS прокомментировал, какие именно секции у него мерцали, ориентируясь по матрице, которую я здесь наложил. С его слов я примерно понял, но в таких делах нужна конкретика.
Так-с прошу прощения за предыдущую фотографию это мой косяк с БП был! Но если вдруг это тоже как-то для тестов нужно то грубо говоря при 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 влияют на всю треть, а на старой фотографии, которую я комментировал - на половину каждой трети. Это вот там как раз мерцание было тогда?
Это вот там как раз мерцание было тогда? да, я правда не помню какое на тот момент тогда стояло напряжение, но точно ниже чем 5В это было.
cafedead
09.07.2025, 21:31
да, я правда не помню какое на тот момент тогда стояло напряжение, но точно ниже чем 5В это было.
А какой внутри процессор возможно увидеть?
А какой внутри процессор возможно увидеть?
https://i.postimg.cc/6TKh6H1L/image.jpg (https://postimg.cc/6TKh6H1L)
Powered by vBulletin® Version 4.2.5 Copyright © 2026 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot