Проблема с запуском самодельного миниЭВ на TSC80C31 + 74HC573 + SST39FS010A: процессор не отрабатывает переходы и убегае
- Сообщения: 402
- Зарегистрирован: Чт май 07, 2026 00:30:38
Ретро - это тоже самое хобби, как и любое другое. А все хобби (в том числе радиолюбительство) странны в той или иной степени. Мне возиться с ретро-электроникой нравится, правда, я пытаюсь её заставить приносить какую-то реальную пользу, модернизируя без необратимого вмешательства и порчи аутентичности.
- Реклама
- Сообщения: 1794
- Зарегистрирован: Вт авг 15, 2017 10:51:13
В своё время у меня тоже был ретро-комп: "Вектор-06Ц". Но его железо я не реинкарнировал. Просто написал эмулятор. Чтобы старые программки позапускать на современном ПК.Zapolyarny писал(а): Ср авг 19, 2026 14:29:27Ретро - это тоже самое хобби, как и любое другое. А все хобби (в том числе радиолюбительство) странны в той или иной степени.
Отладочный аппаратный симулятор вполне оправдан (тем более при достаточном количестве микросхем по оптовым ценам).
Самодельный порт-расширитель к ПК для собственных нужд также не помешает.
Да и имитатор параллельного ПЗУ ( ещё и с самодельным программатором при возможности) вполне приличная железяка.
А опыт работы с проектированием конструкции с параллельными распределёнными шинами вообще как бы "эксклюзив".
На сегодня то в основном на последовательный обмен упор делается.
Не всем же с проектирования мобильных начинать.

Самодельный порт-расширитель к ПК для собственных нужд также не помешает.
Да и имитатор параллельного ПЗУ ( ещё и с самодельным программатором при возможности) вполне приличная железяка.
А опыт работы с проектированием конструкции с параллельными распределёнными шинами вообще как бы "эксклюзив".
На сегодня то в основном на последовательный обмен упор делается.
Не всем же с проектирования мобильных начинать.
- Сообщения: 454
- Зарегистрирован: Ср сен 02, 2015 07:47:20
У i8080 нет недокументированных возможностей. Декап показал полное соответствие оригинальному букварю. Пустые места в карте опкодов имеют вполне себе логичные алиасы существующих команд из-за упрощения дешифрации и они тоже известны. Это я с оглядкой на 6502, где есть прямо недокументированные команды которые делают сложные и иногда даже осмысленные действия.jcxz писал(а): Ср авг 19, 2026 14:15:09 снизу вверх: i8080 -> Z80". Если использовать только команды/регистры/флаги, которые есть у i8080, то код должен работать.
Исключаем конечно маргинальный код, использующий недокументированные возможности.
Я же написал - исопльзование флага N в Z80. У i8080 этот бит PSW всегда 1. Что по аннотации Z80 означает, что предыдущая команда была вычитанием. Но этот бит i8080 не обрабатывается, поэтому можно миксовать минусы в коде так, что по итогу Z80 будет лажать, исполняя этот код. Собственно, на этом построен автодетект процессора для самопальных компьютеров, куда можно вставить и i8080 и Z80 (например, мой "Специалист МХ2").
В том, что эта команда документирована и есть в обоих процессорах. Но исполняется у Z80 в 50% случаев не так, как у i8080, потому что использует вышеупомянутый флаг N. Поймите уже наконец, что нельзя АЛУ запретить использовать флаг N в Z80. И он ломает весь ваш тезис о совместимости. Если же брать код, который либо не использует вычисления, либо спроектирован так, чтобы флаг N не влиял на дальнейшие вычисления, то всё будет работать как надо. Самый простой патч для работоспособности тех же Бейсиков заключается в добавлении команды OR A, которая не делает ничего, кроме сброса флага N, но команда требует 1 байт и не везде её можно вставить в уже собранный код.jcxz писал(а): Ср авг 19, 2026 14:15:09И опять-же - в чём противоречие с тем, что я писал? О совместимости снизу вверх.HardWareMan писал(а): Ср авг 19, 2026 13:38:47 Ну и единственная общая команда DAA у i8080 корректно работает только после сложения (это результат реверсинжениринга кристалла), в то время как у Z80 она работает корректно после любой операции
- Сообщения: 109
- Зарегистрирован: Вс окт 14, 2012 22:04:58
вот что пишут на просторах и наискано по быстрому
В чём суть
Z80 — это развитие процессора Intel 8080, и он сохраняет совместимость с его инструкциями. В 8080/Z80 нет отдельных команд «вычесть в BCD»; есть только ADD и SUB, а после них программист вызывает DAA, чтобы превратить двоичный результат в корректный двоично‑десятичный.
Флаг N как раз и говорит: «эта арифметическая операция была вычитанием».
Для команд сложения (ADD, ADC) флаг N сбрасывается в 0.
Для вычитания (SUB, SBC, CP и т. п.) флаг N устанавливается в 1.
Зачем это нужно в DAA
Инструкция DAA смотрит на флаги и на значение аккумулятора и решает, какую коррекцию применить. Ей важно знать не только про переносы (флаги C и H), но и про то, была ли операция сложением или вычитанием — потому что правила коррекции для этих случаев разные.
Пример: если ты сделал SUB и получил какой‑то байт, DAA должен скорректировать его по правилам вычитания в BCD, а не сложения. Флаг N даёт эту информацию напрямую, без необходимости хранить тип операции где‑то ещё.
Важное уточнение про «отрицательность»
Не надо путать флаг N с понятием «число отрицательное». В Z80 знак числа определяется по старшему биту (бит 7) аккумулятора — для этого есть отдельный флаг S (Sign). Флаг N вообще не про значение результата, он про тип последней арифметической команды.
Именно поэтому в документации Z80 флаг N часто называют add/subtract flag.
Ещё одна причина — совместимость и простота схем
Поскольку Z80 должен был быть обратно совместим с 8080 и при этом оставаться простым в реализации, флаг N — это самый дешёвый способ закодировать тип предыдущей операции в регистре флагов. Это позволяет DAA работать единообразно и предсказуемо, а программистам — не городить лишние проверки.
Спойлер
Флаг N (Negative) в Z80 нужен не для того, чтобы «понять, отрицательное ли число» в бытовом смысле, а как технический маркер типа операции — чтобы инструкция DAA (Decimal Adjust Accumulator) могла правильно скорректировать результат при работе с BCD‑арифметикой.В чём суть
Z80 — это развитие процессора Intel 8080, и он сохраняет совместимость с его инструкциями. В 8080/Z80 нет отдельных команд «вычесть в BCD»; есть только ADD и SUB, а после них программист вызывает DAA, чтобы превратить двоичный результат в корректный двоично‑десятичный.
Флаг N как раз и говорит: «эта арифметическая операция была вычитанием».
Для команд сложения (ADD, ADC) флаг N сбрасывается в 0.
Для вычитания (SUB, SBC, CP и т. п.) флаг N устанавливается в 1.
Зачем это нужно в DAA
Инструкция DAA смотрит на флаги и на значение аккумулятора и решает, какую коррекцию применить. Ей важно знать не только про переносы (флаги C и H), но и про то, была ли операция сложением или вычитанием — потому что правила коррекции для этих случаев разные.
Пример: если ты сделал SUB и получил какой‑то байт, DAA должен скорректировать его по правилам вычитания в BCD, а не сложения. Флаг N даёт эту информацию напрямую, без необходимости хранить тип операции где‑то ещё.
Важное уточнение про «отрицательность»
Не надо путать флаг N с понятием «число отрицательное». В Z80 знак числа определяется по старшему биту (бит 7) аккумулятора — для этого есть отдельный флаг S (Sign). Флаг N вообще не про значение результата, он про тип последней арифметической команды.
Именно поэтому в документации Z80 флаг N часто называют add/subtract flag.
Ещё одна причина — совместимость и простота схем
Поскольку Z80 должен был быть обратно совместим с 8080 и при этом оставаться простым в реализации, флаг N — это самый дешёвый способ закодировать тип предыдущей операции в регистре флагов. Это позволяет DAA работать единообразно и предсказуемо, а программистам — не городить лишние проверки.
- Реклама
А по исходному вопросу макета на mcs51 пока что...
ТИШИНА (абсолютная).
Кыстати...
У 51й также много вариантов как от производителей, так и развития базового МК - 151 и 251...
Да и расширенный набор команд в нескольких вариантах существует...
Но "преемственность" (заданная рамками лицензии от Интел) гораздо лучше.

ТИШИНА (абсолютная).
Кыстати...
У 51й также много вариантов как от производителей, так и развития базового МК - 151 и 251...
Да и расширенный набор команд в нескольких вариантах существует...
Но "преемственность" (заданная рамками лицензии от Интел) гораздо лучше.
- Сообщения: 454
- Зарегистрирован: Ср сен 02, 2015 07:47:20
Всё верно. Предполагаю, что его назвали N - Negative потому, что S - Substract назвать нельзя, так как S занято как Sign. Поэтому в букваре пишут что "Negative operation", подразумевая именно вычитание а не сложение.
Я себе все подобные устройства делаю сам по мере необходимости. Вот, например, фотокарточка из архивов НКВД начала нулевых:BOB51 писал(а): Ср авг 19, 2026 17:25:10 Да и имитатор параллельного ПЗУ ( ещё и с самодельным программатором при возможности) вполне приличная железяка.
Тупая схема на регистрах и статическом ОЗУ на LPT порт. Позже были более компактные устройства на ОЗУ, МК и с управлением через COM/USB, поддерживающие скриптовые команды.


