Просмотр полной версии : Совместимость Z80 и i8080 (580ВМ80)
Dmitry Dubrovenko
09.11.2014, 13:25
Хочу уточнить у спецов: насколько помню, они были полностью совместимы вниз?
И их (Z80) много различных модификаций.
Сейчас реальнее достать z84c0020pec.
У него как дела?
SAM style
09.11.2014, 13:42
Насколько помню, у i8080 нет префиксов (CB, ED, DD, FD), один набор регистров и один тип прерываний. Где-то читал, что Z80 нормально обрабатывает код, написанный для i8080
http://imed.narod.ru/mp_8080/i8080.htm
Сейчас реальнее достать z84c0020pec.
У него как дела?
http://zx-pk.ru/showthread.php?t=21743 же
Vladimir_S
09.11.2014, 13:58
Z80 совместимости с i8080 ни какой не имел!Ведь понятно самому что разные процессоры от разных производителей Intel и Zilog.
Разница небольшая, в командах IN и OUT, некоторые команды иначе влияют на флаги, ну и прерывания.
Viktor2312
09.11.2014, 15:00
Хочу уточнить у спецов: насколько помню, они были полностью совместимы вниз?
Совместимы, сверху вниз, то есть Z80 может выполнять код КР580ВМ80А, наоборот нет.
Сейчас реальнее достать z84c0020pec.
Реально.
Вижу уже ответили за меня:)Ошибочку я допустил (Небольшую!)
Большую. Для оценки размера ошибочки достаточно вспомнить, какой объем CP/M софта, разработанного для i8080, без переделок использовался на компьютерах с z80.
ram_scan
09.11.2014, 19:58
Если для i8080 писать софт строго по даташиту, не лазая в недокументированные дебри, и программа не завязана на времянки и особенности конкретной периферии, то код для i8080 без изменений выполняется на z80 (с поправкой на скорость).
На многих советских тогда еще компах в более позднее время самодельщики меняли i8080 на z80 в порядке апгрейда не особо теряя в совместимости (и на РК86 ставили, и на ориона и на вектора точно).
Можно еще больше "сузить разность". У 8080 всего 256 адресов для портов, поскольку байт адреса дублируется на А0...А7 и А8...А15. У Z80 этих адресов - 65536.
И есть разница в работе команды DAA, у 8080 там есть "не глюк, а фишка". У Z80 оно было исправлено, но некоторые бейсики для 8080 потом не могли нормально работать на Z80, пока не пропатчишь эту команду.
ram_scan
09.11.2014, 20:40
Можно еще больше "сузить разность". У 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 (для этого в комплекте даже была специальная микросхема которая анализировала код операции на шине, уж не помню как именно энтот "арбитр" назывался). По простой причине, один жешифратор проще чем два.
Viktor2312
09.11.2014, 20:48
флаг полупереноса появился только на Z80
А что он тогда делает на КР580ВМ80А
ram_scan
10.11.2014, 06:19
А что он тогда делает на КР580ВМ80А
Сыплю голову пеплом. Точно есть. Другое дело что оно правильно работает только при сложении, то есть не работает как флаг полузаема. И его состояние кажется вообще определено только после команды ADD, хотя инкремент-декремент тоже его состояние меняют. Я помню что сроду им не пользовался никогда...
Viktor2312
10.11.2014, 10:56
А как же операции сравнения CPM, CPI, десятичной коррекции DAA, уеньшения на единицу DCR, DCX, увеличения на единицу. Он так же устанавливается.
И вообще впервые слышу, что он не корректно работает с командами SUB, SUI, SBB, SBI.
И есть разница в работе команды DAA, у 8080 там есть "не глюк, а фишка". У Z80 оно было исправлено, но некоторые бейсики для 8080 потом не могли нормально работать на Z80, пока не пропатчишь эту команду.
Если речь про бейсики для советских компов, базирующиеся на Altair Basic (их подавляющее большинство - на РК-подобных, специалисте, орионе, векторе, львове, ПК8000 и других), то тема обсуждалась много раз, на нескольких форумах, в т.ч. на zx-pk.ru. Там дело не в DAA, а в флаге четности (в двух местах), который в z80 еще и флаг переполнения.
ivagor, поверю, ты в барсиках разбираешься :)
А хрень с командой DAA неожиданно отловилась даже в Мониторе "ЮТ-88", писалось в соответствующей теме. Часы улетали в космос, если использовать в программе юзера прерывания. Там как раз не хватало команды для устаканивания работы DAA, которая учавствует в подсчете времени.
Viktor2312
10.11.2014, 11:22
Там как раз не хватало команды для устаканивания работы DAA, которая учавствует в подсчете времени.
Ну так объясни в трёх словах, по возможности, что там не так, и это только с командой DAA или со всеми остальными так же, а то я что-то не в курсе.
А хрень с командой DAA неожиданно отловилась даже в Мониторе "ЮТ-88", писалось в соответствующей теме. Часы улетали в космос, если использовать в программе юзера прерывания. Там как раз не хватало команды для устаканивания работы DAA, которая учавствует в подсчете времени.
На векторе, кстати, есть еще как минимум пара игрушек, раскодировщики которых не работали на z80. В одной из них содержимое регистра флагов использовалось как часть адреса перехода (раскопал Ramiros). Наверняка есть еще примеры программ под советские компы на ВМ80, которые не работают на Z80
На векторе, кстати, есть еще как минимум пара игрушек, раскодировщики которых не работали на z80. В одной из них содержимое регистра флагов использовалось как часть адреса перехода (раскопал Ramiros). Наверняка есть еще примеры программ под советские компы на ВМ80, которые не работают на Z80
Встречался с таким на специалисте
ram_scan
10.11.2014, 17:05
На векторе, кстати, есть еще как минимум пара игрушек, раскодировщики которых не работали на 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 или со всеми остальными так же, а то я что-то не в курсе.
Тут уже все рассказали :)
А вкратце - перед командой DAA лучше давать кукую-нить холостую команду для сброса флага, типа ORA. Я уже не помню нюансов, но вроде как она выручала. Там вначале прерывания и до DAA небыло никаких арифметических команд, и если программа юзера что-то там высчитывала, то DAA давала неверный результат. Типа 78 часов 95 минут 86 секунд :)
ram_scan
10.11.2014, 18:09
А вкратце - перед командой DAA лучше давать кукую-нить холостую команду для сброса флага, типа ORA.
Коллега, ну прочтите вы в даташите уже как на 8080 DAA работает. С ORA вы граблей точно так-же выгребете.
Только операция сложения для DAA правильно все флаги ставила. И это в доке английским по белому написано.
Я поэтому кстати про флаг AC и забыл. Ибо единственная команда на которую он влияет DAA, а единственная команда после которой он (и перенос) правильно стоит - сложение, и напрямую флаг AC нигде не доступен. Его во флаговый регистр вообще можно бы было не выносить.
перенос) правильно стоит - сложение, и напрямую флаг AC нигде не доступен. Его во флаговый регистр вообще можно бы было не выносить.
Нельзя его не выносить во флаговый регистр. Потому что если произойдет прерывание и в обработчике будут арфиметические операции (а они будут скорее всего), то значение флага будет потеряно.
А раскопки 580ВМ80А показали что флаг AC устанавливается по правилу:
psw_ac <= (c[3] & ~id_xra & ~id_ora & ~id_rxc) | (id_ana & (x[3] | r[3]));
То есть (когда он вообще устанавливается):
- при XOR, OR и сдвигах обнуляется
- при AND вычисляется как ИЛИ третьих разрядов аргументов
- при всех остальных операциях как перенос из третьего разряда суммы
(вычитание выполняется как сумма с инвертированных аргументом и еще единичка)
Jimmy Falcon
10.11.2014, 22:34
Кто-то, я помню, когда Z80 появился даже на нём Микро/80 собирал. Я учился АСМить на 8080, а когда появился Z80 меня ошеломили команды LDIR и им подобные. Только мнемоники сильно поменялись...
Коллега, ну прочтите вы в даташите уже как на 8080 DAA работает. С ORA вы граблей точно так-же выгребете.
Ищу инфу, что я там навыяснял и как вылечил. Много водки с той поры утекло...
А даташиту 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, и программа заработала.
Viktor2312
11.11.2014, 11:31
Ищу инфу, что я там навыяснял и как вылечил. Много водки с той поры утекло...
А даташиту 8080 я верю меньше, чем Vslav'у, который этот чип по винтикам транзисторам разобрал.
А толку, это всё ужасно сильно устарело и стало бесполезным...
А толку, это всё ужасно сильно устарело и стало бесполезным...
особенно страдают доки из СССР
если и читать то только оригиналы от INTEL & Co
Viktor2312
11.11.2014, 12:11
если и читать то только оригиналы от INTEL & Co
Это всё Китайская грамота, в которой ничего не понятно, я к тому что нет уже смысла это всё читать из-за прошедших многих лет, устарело окончательно и полность и не октуально.
Что-то у меня какая-то аппатия, и полная дизаориентация, нужен нормальный ПЭ с понятной и хорошо описанной системой команд, но никак ни на чём не могу остановиться, старые по быстродействию не годятся, новые не понятно, что брать за основу.
Как-то всё печально...
В сторону микроконтроллеров попробуйте посмотреть например - STM8/32 при 72Мгц, набор портов ввода/вывода - ориентировочно 4$ за чип. Опять же PIC/Atmel, как вариант ПЛИС. Тут скорее вопрос в вычислительной еденице - процессорном элементе - как должно строится взаимодействие с соседними. Не совсем окончательно понятно, что нужно от ПЭ: наилучшее соотношение цена/скорость, минимальная стоимость еденицы, векторные рассчеты?
Viktor2312
11.11.2014, 16:45
Тут скорее вопрос в вычислительной еденице - процессорном элементе - как должно строится взаимодействие с соседними.
Этот вопрос решён.
Не совсем окончательно понятно, что нужно от ПЭ: наилучшее соотношение цена/скорость, минимальная стоимость еденицы, векторные рассчеты?
В принципе нашёл, возможно то, что нужно 700 МГц Raspberry Pi Model B+ Думаю это и есть золотая середина, он сможет выполнять все необходимые функции, и есть возможность к нему же подсоединить дополнительне модули, всё компактно. Цена в принципе устраивает, если поштучно брать в бутике типа Чип дип то АНЯ будет стоить 288 000 руб. А вот если оптом и в другом месте, думаю цена кардинально уменьшится. Пока взял в бутике один для пробы. Инфу соберу, почитаю, там будет видно.
Viktor2312, как все запущено - больше 2х лет только кр580вм80А и нечего другого.Даже Z80 отвергался так как не ТЛЗ .И толком не разобравшись в коде I8080I и не доведя не ОДИН задуманный проект до конца - ударились в МК потом в Плисс и теперь уже АРМ 700 мгц а завтра I7 мало будет .А темы Изучение ХХХХ с нуля плодятся как блохи у собаки.Реально уже достало - утром все темы били загажены подрят что апатия и все надоело.
Я все сказал.
Dmitry Dubrovenko
11.11.2014, 18:52
Вернусь всё-таки к первоначальному вопросу.
Насколько понял из прочитанного, вниз софтово они всё-таки совместимы практически полностью (т.е. вероятность, что заработает, при замене 99,9%).
Как подключать пины (с адресами, данными и клоками понятно)?
Регенерация не производится (ОЗУ статическое). ДМА, вроде, тоже.
Собственно суть вопроса.
Есть старинный аппарат, где, как выяснилось, глюканул БП, и выдал +18V, вместо +12V.
Помимо проца они идут ещё на 580ГФ24 и 580ВК28.
Что вероятнее всего вылетело, учитывая, что девайс не совсем труп, а при включении хаотично мигает индикаторами?
Осциллографом пока не долез, ибо все жгуты крест-на-крест, и надо очень много сперва разобрать. А перед этим, надо, как водится, запротоколировать все разъёмы, ибо с маркировкой беда.
ПЗУ с программой вынимал и сверял с имеющимся дампом. Совпали полностью.
Вернусь всё-таки к первоначальному вопросу.
Насколько понял из прочитанного, вниз софтово они всё-таки совместимы практически полностью (т.е. вероятность, что заработает, при замене 99,9%).
КР580ВМ80А вроде не дефицит и недорогой, можно просто поменять на новый.
Да там всё из перечисленного поменять - меньше ста рублей выйдет. Без учета почтовых.
имхо при наличии 580ВК28 врядли можно подменить без переделки схемы и программы
хотя в теории надо схему глянуть ...
Viktor2312
11.11.2014, 19:22
Viktor2312, как все запущено - больше 2х лет только кр580вм80А и нечего другого.Даже Z80 отвергался так как не ТЛЗ .И толком не разобравшись в коде I8080I и не доведя не ОДИН задуманный проект до конца - ударились в МК потом в Плисс и теперь уже АРМ 700 мгц а завтра I7 мало будет .А темы Изучение ХХХХ с нуля плодятся как блохи у собаки.Реально уже достало - утром все темы били загажены подрят что апатия и все надоело.
Я все сказал.
Критика всегда принимается, СПАСИБО, есть над чем подумать.
Но.
Есть, как бы задача, и требуется её реализация, и идёт поиск подходящей элементной базы, и т. д. Поэтому так часто происходит переход от одного к другому, хотя чё объяснять, т...
имхо при наличии 580ВК28 врядли можно подменить без переделки схемы и программы
А что с ней не так? Шинный формирователь и дешифратор управляющего слова. Заменяется - только в путь.
А не проще все-таки поменять на ВМ80 учитывая что последние партии прекрасно работают только от 5-ти вольт, то есть "глюкнувшие" 12 можно отключить от проца. Далее, не зная что за аппарат замена на Z-ку может вылится в определенные проблемы:
1. если в программе используются циклы для организации задержек - поползут временные интервалы.
2. верно было сказано, pin-to-pin вряд-ли влезет - зависит от схемотехники - нужно-ли слово состояния процессора.
3. а зачем там вобще Z-ка? код в ПЗУ про расширенные возможности Z-ки ничего не знает. цель какая? починить аппарат или поставить Z-ку?
PS. вроде проблем с покупкой ВМ-ки нигде нету.
А не проще все-таки поменять на ВМ80 учитывая что последние партии прекрасно работают только от 5-ти вольт
При частоте не выше 1,78МГц. Уточнение, типа :)
Критика всегда принимается, СПАСИБО, есть над чем подумать.
Но.
Есть, как бы задача, и требуется её реализация, и идёт поиск подходящей элементной базы, и т. д. Поэтому так часто происходит переход от одного к другому, хотя чё объяснять, т...
Виктор, а что за задача-то? Если чистая математика, то PC-шка цена/скорость/время разработки будет однозначно лучше самодельных конструкций. Опять же, не забываем про энергопотребление. Далее, если мало центрального процессора - берем в оборот GPU(видеокарта) - еще пара порядков по производительности. Если и этого мало, то ПЛИС-ки с зашитой математикой - тут уже да, своя разработка.
Подход примерно такой: пишем прототип на PC, смотрим на скорость, дальше поехали: оцениваем сколько получили и сколько нужно получить. Дальше в зависимости от разницы оцениваем/думаем:
1. как можно оптимизировать сам алгоритм
2. что проще тупо добавить в PC-шку новый проц/пару процов или смотреть в сторону GPU/ПЛИС.
PS. я честно говоря думал, что ВМИР чисто исследоваельская разработка.
А что с ней не так? Шинный формирователь и дешифратор управляющего слова. Заменяется - только в путь.
просто в контексте девайса
наличие его - почти гарантированно использование портов ВВ
и возможно остальных управляющих с шины
имхо без копания в схеме заменить на z80 нелзя
как минимум надо будет их (гф И КО) выкусить и переделать схему на функциональный аналог для z80
а это уже не просто замена ...
не говоря уже если там шутки со стеком как в ЮТ88 ...
просто в контексте девайса
наличие его - почти гарантированно использование портов ВВ
и возможно остальных управляющих с шины
Я честно пытаюсь понять, что там не так, но - не доходит...
Просто по сути - 580ВМ80А+ВК28 - это еще ближе к Z80, чем просто голый 580ВМ80.
С вэкашкой управляющие сигналы уже четко определены, чтение/запись памяти, чтение/запись портов. По сути, как и в Z80. И не надо ловить никаких управляющих слов в схемах. Вот...
Конечно, от курения схемы и изготовления платки-переходника это не спасет. Да и софт может нежданную козу подстроить, шансы на это есть.
ИМХО, заменить все "подозрительные" чипы на новые и не переть на танки с граблями наперевес...
Dmitry Dubrovenko
13.11.2014, 19:57
заменить все "подозрительные" чипы на новые и не переть на танки с граблями наперевес...Да я бы с удовольствием, если подскажете, где ВМ80 можно рублей за 50-100 купить. :v2_dizzy_vodka2:
Максагор
13.11.2014, 20:30
Да я бы с удовольствием, если подскажете, где ВМ80 можно рублей за 50-100 купить
Например, тут:
http://www.chipdip.ru/search/?searchtext=580%D0%92%D0%9C80
Да я бы с удовольствием, если подскажете, где ВМ80 можно рублей за 50-100 купить
Вы же в Питере?
В бутике чип-дип на Восстания есть за 60 рублей... http://www.chipdip.ru/product/kr580vm80a/
У меня есть - бесплатно.
Dmitry Dubrovenko
13.11.2014, 21:14
В бутике чип-дип на Восстания есть за 60 рублейВот, млин!
А я только такой нашёл http://www.chipdip.ru/product/580vm80/
;)
У меня есть - бесплатно.Совсем?
И где? И когда?
:v2_rolley
А я только такой нашёл
Месье знает толк в извращениях? :)
Совсем?
И где? И когда?
Ну а что, мне жалко что ли? :)
http://savepic.org/6434891.jpg
После пяти вечера доступен на академке (Северный/Гражданский), до пяти - Карпинского.
Dmitry Dubrovenko
16.11.2014, 20:00
Ещё раз спасибо всем откликнувшимся (отдельное Ewgeny7, за предоставленные чипы).
Но замена не помогла.
Такое впечатление, что система начинает инициализироваться, а потом происходит ресет (или зацикливание).
На шинах проца жизнь есть.
Собственно, вот схемы (https://yadi.sk/d/Ur0cFhXKaRjVR) на аппарат.
Но это, так понимаю, уже другая тема (даже не знаю, для какого раздела).
нужен нормальный ПЭ с понятной и хорошо описанной системой команд, Вам точно надо применить Мультиклет, он многое взял от архитектуры ВМИР-1 и на нем можно сделать ВМИР-2-на-чипе.
Viktor2312
18.11.2014, 16:54
Вам точно надо применить Мультиклет, он многое взял от архитектуры ВМИР-1 и на нем можно сделать ВМИР-2-на-[/quote]
Я решил сделать более компактную плату ПЭ, чем и занимаюсь последнии 5 дней. первые два дня правда отправились в топку, с понедельника начал всё заново. Пока, удалось уместить 33 микросхемы на плате с размерами 195 х 77 мм, размер такой необходим, чтобы в корпусе, фото в теме ВМИР-1 есть, уместилось 8 шт. ПЭ.
Они будут вставляться в корпус как отдельные модули, на передней панели индикация напряжений питания +5В, +12В, -5В, кнопка RESET, два светодиода для "ТЕСТ ОЗУ" и ручки ещё будут, нужно посмотреть в мебельных магазина, что-то подходящее или у ближайшего токаря заказать придётся. Размер передней панели модуля будет 45 х 80 мм как и задней панели, только на задней панели будет три разъёма, один для подачи питающих напряжений, два для связи с блоком портов. Порты я решил сделать отдельно в таком же корпусе, это позволит менять их порты, делать параллельными или последовательными на любой подходящей элементной базе. Процесс идёт...
Наберусь наглости задать вопрос... Есть код для Z80 (работа с IDE флеш-картой), в нём активно используются опкоды, работающие с индексными регистрами. Есть необходимость каким-либо образом переделать программу для работы на ВМ80. Если со стандартными опкодами в основном проблем нет, то как заменять работу с индексными регистрами? Есть ли где справочник по подобным превращениям?
Уж очень не хочется заменять привычный ВМ80 на банальный Z80, которого хрен достанешь в нашей глуши..
rw6hrm, какой тут может быть справочник? Перевод одних опкодов в другие - это ручная работа. Можно выделить кусочек, где используется индексный регистр и оформить его в подпрограмму, в которой все занести в стэк, выполнить эмуляцию на опкодах ВМ80, потом всё восстановить.
Ну а если вся прога не очень большая, то просто всю переписать.
Я лет 20 назад так переписывал программы воспроизведения музыки на AY со Спектрума на БК. Причем никакого транслятора с ассемблера на использовал. Только отладчик - только хардкор. Порой вообще слепо переписывал не сильно разбираясь в алгоритме. И работало ведь :)
Так вот и вопрос, мож и есть где примеры подпрограмм эмуляции, к примеру многими любимой команды djnz... То, что почти всё вручную, это понятно, оно и не страшно...
Powered by vBulletin® Version 4.2.5 Copyright © 2026 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot