Хочу уточнить у спецов: насколько помню, они были полностью совместимы вниз?
И их (Z80) много различных модификаций.
Сейчас реальнее достать z84c0020pec.
У него как дела?
Вид для печати
Хочу уточнить у спецов: насколько помню, они были полностью совместимы вниз?
И их (Z80) много различных модификаций.
Сейчас реальнее достать z84c0020pec.
У него как дела?
Насколько помню, у i8080 нет префиксов (CB, ED, DD, FD), один набор регистров и один тип прерываний. Где-то читал, что Z80 нормально обрабатывает код, написанный для i8080
http://imed.narod.ru/mp_8080/i8080.htm
Если для i8080 писать софт строго по даташиту, не лазая в недокументированные дебри, и программа не завязана на времянки и особенности конкретной периферии, то код для i8080 без изменений выполняется на z80 (с поправкой на скорость).
На многих советских тогда еще компах в более позднее время самодельщики меняли i8080 на z80 в порядке апгрейда не особо теряя в совместимости (и на РК86 ставили, и на ориона и на вектора точно).
Можно еще больше "сузить разность". У 8080 всего 256 адресов для портов, поскольку байт адреса дублируется на А0...А7 и А8...А15. У Z80 этих адресов - 65536.
И есть разница в работе команды DAA, у 8080 там есть "не глюк, а фишка". У Z80 оно было исправлено, но некоторые бейсики для 8080 потом не могли нормально работать на Z80, пока не пропатчишь эту команду.
Если писать и рожать железо по даташиту для i8080 - то для Z80 разницы никакой, и i8080 меняется на Z80 практически не глядя с поправкой на распиновку (это кстати была одна из целей его создания как такового, сохранить существующий софт плюс дать новые фичи). Как в отношении портов так и в отношении DAA. По даташиту на i8080 DAA работала правильно только после сложения (флаг полупереноса появился только на Z80 который позволил ей работать и после вычитания) и никак иначе. Если кто-то на i8080 закладывался на какое-то недокументированное ее поведение после вычитания, то кто ему доктор ?
Кроме того у i8080 не было ноги /iorq и формирование этого сигнала обеспечивала внешняя схема. По этой причине на большинстве машин построенных на базе i8080 ввод-вывод был memory-mapped (для этого в комплекте даже была специальная микросхема которая анализировала код операции на шине, уж не помню как именно энтот "арбитр" назывался). По простой причине, один жешифратор проще чем два.
Сыплю голову пеплом. Точно есть. Другое дело что оно правильно работает только при сложении, то есть не работает как флаг полузаема. И его состояние кажется вообще определено только после команды ADD, хотя инкремент-декремент тоже его состояние меняют. Я помню что сроду им не пользовался никогда...
А как же операции сравнения CPM, CPI, десятичной коррекции DAA, уеньшения на единицу DCR, DCX, увеличения на единицу. Он так же устанавливается.
И вообще впервые слышу, что он не корректно работает с командами SUB, SUI, SBB, SBI.
Если речь про бейсики для советских компов, базирующиеся на Altair Basic (их подавляющее большинство - на РК-подобных, специалисте, орионе, векторе, львове, ПК8000 и других), то тема обсуждалась много раз, на нескольких форумах, в т.ч. на zx-pk.ru. Там дело не в DAA, а в флаге четности (в двух местах), который в z80 еще и флаг переполнения.
ivagor, поверю, ты в барсиках разбираешься :)
А хрень с командой DAA неожиданно отловилась даже в Мониторе "ЮТ-88", писалось в соответствующей теме. Часы улетали в космос, если использовать в программе юзера прерывания. Там как раз не хватало команды для устаканивания работы DAA, которая учавствует в подсчете времени.
На векторе, кстати, есть еще как минимум пара игрушек, раскодировщики которых не работали на z80. В одной из них содержимое регистра флагов использовалось как часть адреса перехода (раскопал Ramiros). Наверняка есть еще примеры программ под советские компы на ВМ80, которые не работают на Z80
Это запрещенный прием программирования.
Не, никто не запрещает написать программу именно так. Но потом не надо удивляться, что на формально совместимом процессоре она не выполняется. Такой прием можно еще оправдать, когда реально не хватает двух байт памяти или черырех тактов чтобы во время уложиться. Но по моему опыту большинство таких приемов применяется "смотрите пацаны как я могу".
По документации есть "неопределенное" значение флагов. "Неопределенное" это не значит что никто не знает что на вот этом конкретном процессоре какое именно. Это не "неизвестное". Это "не регламентируется". Это значит что завтра появится совместимый процессор у которого "неопределенное" поведение отличается (имеет кстати полное право) который ведет себя по другому, и вам придется софт переписывать.
Что касается DAA. Открываем фирменный мануал "8080/8085 assembly language programming manual (c) 1977, 1978, 1979, 1981 Intel corporation" и читаем там дословно на странице 3-18 : DAA used when adding decimal numbers. Надо после вычитания использовать - добавьте ноль и потом используйте. Или дополните до двойки и складывайте.
И основные грабли там закопаны в том что флаг полупереноса не работает как флаг полузаема (а в Z80 работает). Только справа налево.
Кстати INR не модифицирует CF, поэтому при инкременте можно тоже багов выгребсти при десятичной коррекции чисел шире двух знаков. Только сложение и только хардкор.
Так что все вопросы задавайте товарищам которые используют DAA после инкремента-декремента-вычитания и "у них все работает".
8085 еще и при логических операциях по другому AC модифицирует чем i8080. То есть даже при переносе с 8080 на 8085 если на даташит не оглядываться то можно с DAA "багов выгребсти".
А так да, можно написать программу которая работает на Z80 и не работает на Т34. Примеры были.
Программ которые работали на 8086 и не работали на 80286 вообще валом. Причем написанных в строгом соответствии с документацией. В 80286 просто появился конвейер предвыборки, поэтому модификация кода "прямо перед собой" стала работать только при определенных условиях. Если модифицированная команда уже прошла предвыборку - финита ля комедиа. Выполнится не то что в память положено.
Тут уже все рассказали :)
А вкратце - перед командой DAA лучше давать кукую-нить холостую команду для сброса флага, типа ORA. Я уже не помню нюансов, но вроде как она выручала. Там вначале прерывания и до DAA небыло никаких арифметических команд, и если программа юзера что-то там высчитывала, то DAA давала неверный результат. Типа 78 часов 95 минут 86 секунд :)
Коллега, ну прочтите вы в даташите уже как на 8080 DAA работает. С ORA вы граблей точно так-же выгребете.
Только операция сложения для DAA правильно все флаги ставила. И это в доке английским по белому написано.
Я поэтому кстати про флаг AC и забыл. Ибо единственная команда на которую он влияет DAA, а единственная команда после которой он (и перенос) правильно стоит - сложение, и напрямую флаг AC нигде не доступен. Его во флаговый регистр вообще можно бы было не выносить.
Нельзя его не выносить во флаговый регистр. Потому что если произойдет прерывание и в обработчике будут арфиметические операции (а они будут скорее всего), то значение флага будет потеряно.
А раскопки 580ВМ80А показали что флаг AC устанавливается по правилу:
psw_ac <= (c[3] & ~id_xra & ~id_ora & ~id_rxc) | (id_ana & (x[3] | r[3]));
То есть (когда он вообще устанавливается):
- при XOR, OR и сдвигах обнуляется
- при AND вычисляется как ИЛИ третьих разрядов аргументов
- при всех остальных операциях как перенос из третьего разряда суммы
(вычитание выполняется как сумма с инвертированных аргументом и еще единичка)
Кто-то, я помню, когда Z80 появился даже на нём Микро/80 собирал. Я учился АСМить на 8080, а когда появился Z80 меня ошеломили команды LDIR и им подобные. Только мнемоники сильно поменялись...
Ищу инфу, что я там навыяснял и как вылечил. Много водки с той поры утекло...
А даташиту 8080 я верю меньше, чем Vslav'у, который этот чип повинтикамтранзисторам разобрал. :)
---------- Post added at 11:27 ---------- Previous post was at 11:13 ----------
Нашел тему - http://zx-pk.ru/showpost.php?p=690721&postcount=39
Я там действительно воткнул ORA вместо ненужного DI, и программа заработала.
Это всё Китайская грамота, в которой ничего не понятно, я к тому что нет уже смысла это всё читать из-за прошедших многих лет, устарело окончательно и полность и не октуально.
Что-то у меня какая-то аппатия, и полная дизаориентация, нужен нормальный ПЭ с понятной и хорошо описанной системой команд, но никак ни на чём не могу остановиться, старые по быстродействию не годятся, новые не понятно, что брать за основу.
Как-то всё печально...
В сторону микроконтроллеров попробуйте посмотреть например - STM8/32 при 72Мгц, набор портов ввода/вывода - ориентировочно 4$ за чип. Опять же PIC/Atmel, как вариант ПЛИС. Тут скорее вопрос в вычислительной еденице - процессорном элементе - как должно строится взаимодействие с соседними. Не совсем окончательно понятно, что нужно от ПЭ: наилучшее соотношение цена/скорость, минимальная стоимость еденицы, векторные рассчеты?
Этот вопрос решён.
В принципе нашёл, возможно то, что нужно 700 МГц Raspberry Pi Model B+ Думаю это и есть золотая середина, он сможет выполнять все необходимые функции, и есть возможность к нему же подсоединить дополнительне модули, всё компактно. Цена в принципе устраивает, если поштучно брать в бутике типа Чип дип то АНЯ будет стоить 288 000 руб. А вот если оптом и в другом месте, думаю цена кардинально уменьшится. Пока взял в бутике один для пробы. Инфу соберу, почитаю, там будет видно.
Viktor2312, как все запущено - больше 2х лет только кр580вм80А и нечего другого.Даже Z80 отвергался так как не ТЛЗ .И толком не разобравшись в коде I8080I и не доведя не ОДИН задуманный проект до конца - ударились в МК потом в Плисс и теперь уже АРМ 700 мгц а завтра I7 мало будет .А темы Изучение ХХХХ с нуля плодятся как блохи у собаки.Реально уже достало - утром все темы били загажены подрят что апатия и все надоело.
Я все сказал.
Вернусь всё-таки к первоначальному вопросу.
Насколько понял из прочитанного, вниз софтово они всё-таки совместимы практически полностью (т.е. вероятность, что заработает, при замене 99,9%).
Как подключать пины (с адресами, данными и клоками понятно)?
Регенерация не производится (ОЗУ статическое). ДМА, вроде, тоже.
Собственно суть вопроса.
Есть старинный аппарат, где, как выяснилось, глюканул БП, и выдал +18V, вместо +12V.
Помимо проца они идут ещё на 580ГФ24 и 580ВК28.
Что вероятнее всего вылетело, учитывая, что девайс не совсем труп, а при включении хаотично мигает индикаторами?
Осциллографом пока не долез, ибо все жгуты крест-на-крест, и надо очень много сперва разобрать. А перед этим, надо, как водится, запротоколировать все разъёмы, ибо с маркировкой беда.
ПЗУ с программой вынимал и сверял с имеющимся дампом. Совпали полностью.
Да там всё из перечисленного поменять - меньше ста рублей выйдет. Без учета почтовых.
имхо при наличии 580ВК28 врядли можно подменить без переделки схемы и программы
хотя в теории надо схему глянуть ...
А не проще все-таки поменять на ВМ80 учитывая что последние партии прекрасно работают только от 5-ти вольт, то есть "глюкнувшие" 12 можно отключить от проца. Далее, не зная что за аппарат замена на Z-ку может вылится в определенные проблемы:
1. если в программе используются циклы для организации задержек - поползут временные интервалы.
2. верно было сказано, pin-to-pin вряд-ли влезет - зависит от схемотехники - нужно-ли слово состояния процессора.
3. а зачем там вобще Z-ка? код в ПЗУ про расширенные возможности Z-ки ничего не знает. цель какая? починить аппарат или поставить Z-ку?
PS. вроде проблем с покупкой ВМ-ки нигде нету.
Виктор, а что за задача-то? Если чистая математика, то PC-шка цена/скорость/время разработки будет однозначно лучше самодельных конструкций. Опять же, не забываем про энергопотребление. Далее, если мало центрального процессора - берем в оборот GPU(видеокарта) - еще пара порядков по производительности. Если и этого мало, то ПЛИС-ки с зашитой математикой - тут уже да, своя разработка.
Подход примерно такой: пишем прототип на PC, смотрим на скорость, дальше поехали: оцениваем сколько получили и сколько нужно получить. Дальше в зависимости от разницы оцениваем/думаем:
1. как можно оптимизировать сам алгоритм
2. что проще тупо добавить в PC-шку новый проц/пару процов или смотреть в сторону GPU/ПЛИС.
PS. я честно говоря думал, что ВМИР чисто исследоваельская разработка.
просто в контексте девайса
наличие его - почти гарантированно использование портов ВВ
и возможно остальных управляющих с шины
имхо без копания в схеме заменить на z80 нелзя
как минимум надо будет их (гф И КО) выкусить и переделать схему на функциональный аналог для z80
а это уже не просто замена ...
не говоря уже если там шутки со стеком как в ЮТ88 ...
Я честно пытаюсь понять, что там не так, но - не доходит...
Просто по сути - 580ВМ80А+ВК28 - это еще ближе к Z80, чем просто голый 580ВМ80.
С вэкашкой управляющие сигналы уже четко определены, чтение/запись памяти, чтение/запись портов. По сути, как и в Z80. И не надо ловить никаких управляющих слов в схемах. Вот...
Конечно, от курения схемы и изготовления платки-переходника это не спасет. Да и софт может нежданную козу подстроить, шансы на это есть.
ИМХО, заменить все "подозрительные" чипы на новые и не переть на танки с граблями наперевес...