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

Самодельный порт-расширитель к ПК для собственных нужд также не помешает.
Да и имитатор параллельного ПЗУ ( ещё и с самодельным программатором при возможности) вполне приличная железяка.
А опыт работы с проектированием конструкции с параллельными распределёнными шинами вообще как бы "эксклюзив".
На сегодня то в основном на последовательный обмен упор делается.
Не всем же с проектирования мобильных начинать.
- Сообщения: 455
- Зарегистрирован: Ср сен 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...
Да и расширенный набор команд в нескольких вариантах существует...
Но "преемственность" (заданная рамками лицензии от Интел) гораздо лучше.
- Сообщения: 455
- Зарегистрирован: Ср сен 02, 2015 07:47:20
Всё верно. Предполагаю, что его назвали N - Negative потому, что S - Substract назвать нельзя, так как S занято как Sign. Поэтому в букваре пишут что "Negative operation", подразумевая именно вычитание а не сложение.
Я себе все подобные устройства делаю сам по мере необходимости. Вот, например, фотокарточка из архивов НКВД начала нулевых:BOB51 писал(а): Ср авг 19, 2026 17:25:10 Да и имитатор параллельного ПЗУ ( ещё и с самодельным программатором при возможности) вполне приличная железяка.
Тупая схема на регистрах и статическом ОЗУ на LPT порт. Позже были более компактные устройства на ОЗУ, МК и с управлением через COM/USB, поддерживающие скриптовые команды.
- Сообщения: 1799
- Зарегистрирован: Вт авг 15, 2017 10:51:13
Зачем?BOB51 писал(а): Ср авг 19, 2026 17:25:10Самодельный порт-расширитель к ПК для собственных нужд также не помешает.
Вот именно. Никакие параллельные расширители - не нужны. Это позавчерашний день. Поделки к ПК нужно цеплять через стандартные последовательные интерфейсы. Или вообще - беспроводно. Без лишних костылей.BOB51 писал(а): Ср авг 19, 2026 17:25:10На сегодня то в основном на последовательный обмен упор делается.
- Сообщения: 1799
- Зарегистрирован: Вт авг 15, 2017 10:51:13
Такое использование - вещь настолько редкая, что почти никогда не встречается. Чтобы скопировать PSW через стек, и потом ещё использовать отсутствующие флаги - это и есть "маргинальный код".HardWareMan писал(а): Ср авг 19, 2026 18:24:33Поймите уже наконец, что нельзя АЛУ запретить использовать флаг N в Z80.
Как собственно и DAA - сколько всего писал на i8080 в своё время, но по-моему ни разу её не использовал.
Притягиваете аргументы за уши.
Пардон, но вся данная тема не имеет смысла, ибо :
Не , ну просто так поболтать конечно у многих есть потребность.....В классическом оригинальном микроконтроллере Intel 8051 нет встроенного аппаратного режима пошагового тактирования (потактового выполнения команд одной кнопкой «на «живом» кристалле»).
Ну и, кстати, что касаемо кода, поелику
Спойлер
Классический микроконтроллер i8051 имеет 5 основных источников аппаратных прерываний.
Для каждого из них в памяти программ выделена фиксированная точка входа (вектор прерывания), отстоящая от предыдущей на 8 байт.
При срабатывании прерывания процессор переходит по соответствующему адресу.
Таблица векторов прерываний i8051
0000H — Сброс (Reset / Аппаратный сброс)
0003H — Внешнее прерывание 0 (INT0)
000BH — Переполнение таймера 0 (Timer 0)
0013H — Внешнее прерывание 1 (INT1)
001BH — Переполнение таймера 1 (Timer 1)
0023H — Последовательный порт (UART — прием/передача
а сам START сделать .. ну с 002BH например ..
ORG 002BH
START:
;<какой-нибудь код>
SJMP START
< виртуальная "кнопочка" >--( WWW ) <- Убедительная просьба интересующимся старыми компьютерами типа РК86 - не пишите в теме в барахолке, пишите Ваши вопросы в ( лс ) пожалуйста
- Сообщения: 455
- Зарегистрирован: Ср сен 02, 2015 07:47:20
Ох, я сдаюсь. Но всё же скажу для остальных читающих эту ветку. Моя цитата выше в этом посте относится к АЛУ Z80. Естественно, что в АЛУ i8080 нет никакого флага N и не надо ничего там копировать PSW через стек. Соответственно, одинаковые для обоих процессоров команды выполняются на i8080 не зная ничего об N, но стоит эту же последовательность команд начать запускать на Z80 так сразу появляется влияние флага N, который у Z80, ВНЕЗАПНО, есть! И дело не только в DAA. Ну да ладно, я уже выводы все сделал, думаю что читатели тоже. На этом выхожу из темы.jcxz писал(а): Ср авг 19, 2026 23:09:47Такое использование - вещь настолько редкая, что почти никогда не встречается. Чтобы скопировать PSW через стек, и потом ещё использовать отсутствующие флаги - это и есть "маргинальный код".HardWareMan писал(а): Ср авг 19, 2026 18:24:33Поймите уже наконец, что нельзя АЛУ запретить использовать флаг N в Z80.
Как собственно и DAA - сколько всего писал на i8080 в своё время, но по-моему ни разу её не использовал.
Притягиваете аргументы за уши.![]()
Hy логично, тема то об TSC80C31
А об z80 и 8080 можем побеседовать в соответствующей ежели желаете
< виртуальная "кнопочка" >--( WWW ) <- Убедительная просьба интересующимся старыми компьютерами типа РК86 - не пишите в теме в барахолке, пишите Ваши вопросы в ( лс ) пожалуйста
- Сообщения: 1799
- Зарегистрирован: Вт авг 15, 2017 10:51:13
Кто вам такое сказал? Открывем даташит, читаем в самом его начале:petrenko писал(а): Чт авг 20, 2026 14:20:17Пардон, но вся данная тема не имеет смысла, ибо :В классическом оригинальном микроконтроллере Intel 8051 нет встроенного аппаратного режима пошагового тактирования (потактового выполнения команд одной кнопкой «на «живом» кристалле»).
Видите "even DC"? А значит можно полностью остановить тактирование МК. И подавать отдельные клоки хоть с кнопки. Это и будет "пошаговый режим". Что ТС и делает.The fully static design of the TSC80C31/80C51 allows to reduce system power consumption by bringing the clock frequency down to any value, even DC, without loss of data.
- Сообщения: 1799
- Зарегистрирован: Вт авг 15, 2017 10:51:13
Так может расскажете: на какие именно команды, имеющиеся у i8080, влияет этот несуществующий в i8080 флаг, о коем вы так печётесь?HardWareMan писал(а): Чт авг 20, 2026 14:25:41 Естественно, что в АЛУ i8080 нет никакого флага N и не надо ничего там копировать PSW через стек. Соответственно, одинаковые для обоих процессоров команды выполняются на i8080 не зная ничего об N, но стоит эту же последовательность команд начать запускать на Z80 так сразу появляется влияние флага N, который у Z80, ВНЕЗАПНО, есть! И дело не только в DAA.
Несёте откровенную галиматью. Как может флаг на что-то влиять, если его нет?
Единственное его влияние - этот как раз если скопировать PSW через стек. Но если "не надо ничего там копировать PSW через стек", то он ни на что и не повлияет. Так как его попросту нет.
Да, перечитал ещё раз внимательнее, согласен с Вами, данная модель отличается от "классического оригинального" и получается "шаговый" режим возможен через нетактирование.jcxz писал(а): Чт авг 20, 2026 14:52:43 :Видите "even DC"? А значит можно полностью остановить тактирование МК. И подавать отдельные клоки хоть с кнопки. Это и будет "пошаговый режим". Что ТС и делает.The fully static design of the TSC80C31/80C51 allows to reduce system power consumption by bringing the clock frequency down to any value, even DC, without loss of data.
Однако тогда получается лучше к тактильной кнопке окромя триггера_Шмита прикошачить одновибратор чтоб получить желаемый чёткий тактовый импульс - как вы считаете ?
< виртуальная "кнопочка" >--( WWW ) <- Убедительная просьба интересующимся старыми компьютерами типа РК86 - не пишите в теме в барахолке, пишите Ваши вопросы в ( лс ) пожалуйста
- Сообщения: 1799
- Зарегистрирован: Вт авг 15, 2017 10:51:13
Можно, но зачем усложнять?petrenko писал(а): Чт авг 20, 2026 15:20:30Однако тогда получается лучше к тактильной кнопке окромя триггера_Шмита прикошачить одновибратор чтоб получить желаемый чёткий тактовый импульс - как вы считаете ?
Если тактовая кнопка с нормально разомкнутыми + нормально замкнутыми контактами, то лучше к ней прицепить RS-триггер. И прямо с него - на тактовый вход МК.


