Comments 91
Я вот недавно узнал, что Z80 не полностью совместим с 8080 "снизу вверх", как это мною ожидалось: проблема во флаге переполнения и ещё чем-то там в регистре флагов. По этой причине не всякий код, написанный для 8080, будет корректно выполняться на Z80, хотя основная масса таки будет.
Ну, плюс та проблема со звуком, которая описана в статье и которую нужно решать костылём :) В общем, я бы, если б стал такое делать, взял бы всё-таки 8080 (КР580ВМ80А) -- благо, их вполне можно купить. Но, насколько понял, тут работал принцип "я тебя слепила из того что было" -- что тоже имеет право на существование, конечно.
Все так. Но я не взял 8080 прежде всего из-за сложности трехполярного питания. Можно было использовать 8085, но раз уж не родной процессор, то уже какая разница какой?
В плане системы команд 8085 и 8080 совместимы полностью, а вот насчёт вывода INTE не помню, а смотреть даташит лениво :)
Поскольку у Вас не было цели собрать комп, которым потом можно активно пользоваться, Ваш подход представляется вполне разумным. Вот если б Вы хотели в дальнейшем им пользоваться подобно реальному Радио-86РК, что предполагает использование существующих программ, которых, всё же, не так уж мало (это по сравнению со "Спектрумом" их мало) замена 8080 на Z80 была бы ошибкой как раз в силу неполной совместимости: мало ли что начало бы выползать, и поди разберись, в чём дело...
Ну а три питания... Да, определённые проблемы сие доставляет, хотя вполне решаемые: преобразователей сейчас пруд пруди на любой вкус и цвет. "Тогда" с этим посложней было, на самом-то деле, особенно с питанием -5 В: импульсный преобразователь на рассыпухе соорудить затратно, а для линейного необходима отдельная обмотка трансформатора (как, собственно, и делали).
Я больше скажу. То, что я сделал встроенный режим VGA, потенциально делает невозможной работу программ, которые используют для разных эффектов перенастройку ВГ75. Я таких не встречал, но читал, что они были.
Некоторые программы у меня не запустились. Я в таких случаях проверял их на эмуляторах, и там они тоже не работали. Пожно пофантазировать почему. Если судить по общению в ркашных некрочатах, то Z80 очень даже успешно применяли. Обычно чтобы разогнать машину, потому что из-за той же ВГ75 ЦПУ очень часто тормозится и много времени просто ждет когда память освободится.
Какие-то программы точно должны были при этом не работать, но сделать версию под Z80 было не сложно.
есть предположение, что не завелись программы, которые недоадаптировали от Микроши, я такие очень часто встречал. а про РК-шку на Z80 я видел только разговоры, в железе так никто и не решился сделать. не знаю, на каких эмуляторах запускались программы, но эмулятор Виктора Пыхонина и мой весьма точно эмулируют РК-шку, всю её периферию и тайминги.
Тогда" с этим посложней было, на самом-то деле, особенно с питанием -5 В
Любопытно, почему для странного питания не использовали charge pump. Это проще чем специальный транс
Потому что их тогда не было в готовом виде, и пришлось бы собирать на рассыпухе. Кроме того, напряжение -5В могло понадобиться (не для Радио-86РК, а вообще) и для других целей, где ток будет уже повыше -- скажем, для преобразователей уровней ТТЛ в уровни RS-232.
Потому что тогда использование charge pump было странным, а -5в обычное дело. В первоначальной версии 16кб было сделано на 565РУ3, которым тоже надо -5в.
Трехполярный преобразователь хорошо был реализован на "Орионе-128", другом динозавре тех лет
Честно говоря я был удивлен тем фактом, что Z80 на столько совместим с i8080, что можно перепечатать бинарный код из журнала для одного микропроцессора и почти безболезненно запустить на другом. :-) Я всегда считал эти два микропроцессора плохо совместимыми, а код при переносе требует модификации, причем на уровне ассемблера. Ведь есть даже утилиты для этой цели.
Когда-то я начинал изучать машкод на ZX Spectrum, имея под рукой книжку от Радио 86РК, набивая программки через POKE. Я тогда даже не подозревал, что процессоры в принципе как-то отличаются друг от друга, и так как Z80 может то же самое, что и 8080, у меня всё работало.
Аналогично. В 88-89-м году я ходил в кружок программирования и у нас появились Atari 800. Никто не знал как с ними обращаться. Из инструментария только встроенный BASIC с командой POKE (позже появился дисковод и дискеты с MAC). Из мануала на Atari выяснили, что у него процесор MOS 6502. Кто-то нам подсказал, что такой же проц устанавливается в ПЭВМ Агат. Мы разжились документацией по "агатовскому ассемблеру" и давай прогать через POKE на Atari по этим мануалам. :)
Z80 и 8080 одинаковы. За исключением расширенных команд, которых нет в 8080. Так что если программа не использует эти расширенные команды, то она будет работать. В Z80 немного расширили команды, введя например относительные переходы, что позволяет работать программе без привязке к адресации. И еще сделали 2 комплекта регистров. То есть Z80 это типа 8080MMX. И он будет работать вместо 8080, а вот наоборот не всегда.
Вот я тоже помню, что у Z80 4-х битное АЛУ и операции в нём требуют большего числа тактов, что должно было как-то отпечататься и на программной стороне вопроса. Спасибо за разьяснения. Как говорил Поручик - "век живи, век учись". ;)
Число тактов немного разное, но в обратную сторону. INC r и LD r,r на 8080 пять тактов, на Z80 четыре. На Z80 вообще нет пятитактовых операций, а на 8080 есть.
Я могу судить по количеству тактов только по справочникам, так как сам их не измерял, и кристалл не разбирал. В справочниках издревле такие вот таблички без расписания машинных циклов, где мне и бросилось в глаза различие по тактам. А по факту что, они не соответствуют действительности, или всё-таки в расчёте времени выполнения можно ими пользоваться? (кстати, только сейчас вспомнил, что по ним INC r8 и INC r16 занимают по 5 тактов, а на Z80 это 4 и 6).

(страница из 8080 Programming Manual от Intel, 1975 года)
В копилку:
У Кена Ширриффа есть статья про устройство АЛУ на Z80 по декапнутым снимкам, но без таймингов. Из схемы видно, что почти все инструкции на Z80 идут через АЛУ и влияют на флаги.
В Википедии прочел, что Z80 тоже активно использует overlap по времени выполнения инструкций. Зачатки конвейеризации ? ;-)
Я тоже так думал, а оказалось, что есть несовместимая разница во флагах. Вот регистр флагов 8080 из интеловской доки:

А вот он же для Z80:

У 8080 бит 2 -- всегда чётность, а в Z80 в зависимости от команды там либо чётность, либо переполнение. Соответственно, в определённых ситуациях программа, успешно работающая на 8080, не будет работать на Z80. Почему для переполнения они не использовали остающиеся без дела разряды 5 и 3, непонятно.
Так вроде в Z80 еще были команды управления циклами. То есть одна команда делала сразу две вещи: декрементировала регистр счетчика, и если получался не ноль, происходил прыжок на начало цикла. В 580 такого не было. И еще были регистры IX и IY, которые предполагались для работы с массивами.
Тут как раз все совместимо снизу вверх
Как уже правильно отмечено, эти команды и регистры не нарушают совместимость снизу вверх: они не меняют поведение процессора для тех команд, которые уже существовали, а добавляют новые возможности. А вот использование бита 2 как индикатора переполнения или внесение изменений в команду десятичной коррекции разрушает совместимость, поскольку программы, написанные для 8080, полагаются на строго определённые правила формирования результатов выполнения используемых ими команд, а нововведения в Z80 приводят иногда к получению других результатов.
Круто! Сначала отнёсся к материалу скептически из-за оформления, но по содержанию оказалось, что проект весьма годный. Но особенно впечатлила информация про существование в продаже макеток формата A4. Как говорится, дайте две.
Так вроде самый простой был "Специалист", в Моделисте-Конструкторе вроде печатали...
У него 52 микросхемы, если верить оригинальной схеме. почти в два раза больше. Но и огромный плюс - нет той самой 580ВГ75, которая экономит корпуса. Говорят, что ее было очень сложно купить. Я конечно не знаю. Сейчас купил без проблем за копейки по сути.
Да, в те времена ВГ75 была одной из самых дефицитных. Хотя года эдак до 87-88 честно купить вообще практически ничего нельзя было из цифровой электроники, даже рассыпуху 155-й серии проблематично (может, через Посылторг что-то и можно было, и то под вопросом, ну а в магазинах радиодеталей -- только лампы, транзисторы, небольшое количество аналоговых микросхем -- и всё). Поэтому все ранние компьютеры, включая Микро-80, были собраны, по сути, на ворованных деталях. Ну, коммунизм же, "всё вокруг колхозное -- всё вокруг моё" :) В общем, в тех условиях собрать Специалист действительно было проще: украсть нужные микросхемы 155-ю серии можно было практически на любом вычислительном центре, проц и КР580ВВ55 тоже уже встречались достаточно часто в промышленных изделиях, а значит, бывали и в ЗИПах тех предприятий, где эти изделия использовались, а вот ВГ75... Я его встречал вживую, если не ошибаюсь за давностью лет, только в терминалах СМ-7209, причём они польского производства, и ЗИПа к ним не было никакого -- впрочем, они никогда и не ломались.
а вот ВГ75...
30 советских рублей на Шаболовке "с рук" примерно в 87г, но мы были пионерами ещё, не понятно, что бы нам продали.
Скорей, в 89-м, но, в любом случае, всё это стало появляться в самом конце Союза, когда всё уже разваливалось, а воровать и продавать краденое стали практически открыто -- заметьте, "с рук", как Вы пишите, а не в магазинах, доступных честным гражданам.
Некислыми вы были пионерами, раз в 87 году у вас 30 рублей на руках имелось.
Это было очень много! И конечно таких денег не было.
Друг мог покупать по 1 фирменной кассете не каждый месяц за 4.50руб и за столько же записывать в студийке. И это было сразу как бы ощутимо - можно было послушать. А тут одна только микросхема и неизвестный результат, да и мы тогда в глаза этих компов не видели, непонятно что бы с ним делать. Хотя я собирался получить интернет packet radio :) Оставалось бы только заполучить радиостанцию :)
Не все воры - радиолюбители, но все радиолюбители - воры. Поговорка из 80-х)
Самый простой компьютер это югославский Galaksija, схема которого была напечатана в одноимённом журнале. Ну по крайней мере я ничего проще не видел.
Ну дык и в Специалисте тоже, да и много где. А сделать можно не только VGA, можно хоть 4К -- вопрос только в том, сколько проц всё это отрисовывать будет :) Поэтому лично я, если б проектировал комп на 8080, ограничился бы чисто текстовым режимом (для бытового компа это не очень-то приемлемо, но меня аркадные игры никогда не привлекали, а более-менее приличные стратегии или симуляторы, как и стрелялки и прочие РПГ, стали возможны лишь на железе совсем другого уровня).
А, Вы про это. Я про другое говорю: как формируются битики, формирующие изображение. У Специалиста и многих других они лежат в ОЗУ, и за формирование их отвечает процессор. У а вот у Радио-86РК -- нет, там в ОЗУ лежат коды символов, а конкретные последовательности битов для отображения формирует КР580ВГ75 совместно с ПЗУ знакогенератора. По этой причине формирование изображения на Радио многократно быстрей, чем на Специалисте (нужно записать лишь коды символов, а не программно отрисовывать каждый символ как набор пикселей).
Что же до этого компа... Как по мне, это уже вообще ничем не оправданное извращение.
блин. это Корвет, да? нет, я понимаю, когда мы использовали "зеленые" кондёры в своих "Ленинградах" - что купил у барыг на таганрогском "радиоцирке" то и впаял (до начала эры приема металлов они стоили как обычные)... но что и в промышленном изделии дорогие высокоточные платиносодержащие "каэмки" тоже ставили как фильтры по питанию - ёпрст, ну слов нет.
а что за микросхемы под радиаторами?
Так изображение ещё в ZX-80 формировалось. Минимализм.
Когда у меня был Микроша (тоже клон Радио-86РК), у меня был знакомый взрослый дяденька, который сделал свой компьютер вообще без шрифтов.
У него был самодельный дешифтратор, который как-то преобразовывал код символа в телевизионную развертку. Ну то есть в самом коде символа содержался внешний вид символа! Нечто вроде визуализации 7-сегментного индикатора на телевизоре на одном знакоместе. Возможно у него были и полу-символы, чтобы показать левую и правую части буквы.
Естественно, таблица символов была ни с чем не совместима.
Даже не слышал раньше про такой. Посмотрел по вашей ссылке, действительно очень простой.
Присоединяюсь, "Специалист", ПМСМ и по совокупности потребительских свойств - лучший. Мог бы просто плюсик поставить, но для этого не хватает кармы, а вот чтобы написать "Присоединяюсь", её достаточно. Ну не парадокс ли? Есть ещё одно ограничение - не более одного комментария в час... Жду.
А кто-то таки отреверсил «Дон» или этот раритет сгинул в безвестности? Партии очень маленькие были, вроде смутно помню, в одном «кроватки» для расширения памяти были, а в другом — уже не было…
У меня только кассета осталась, ХЗ, можно ли там что-то разобрать, кроме «БЕЙСИК! (на заднем плане: „…хорошо ж те в рубашке…“) ПИИИИИИИИпжжжжжжжжжж…»
На «Саннате» целая одна штука нашлась, ХЗ куда уехала, правда.
Спасибо за статью!)
И особенно за цвет на мониторе - я такой в ssh выставляю:)
Особо хочется отметить усилия по раскидыванию навесного монтажа, у меня такое больше 5-10 перемычек превращается в не поддерживаемую паутину, поэтому даже для макета - только плата!
В серии MAX3000A - только один вариант PLCC, на 44 вывода.
если бы у них были микросхемы SRAM как у меня, вышло бы тоже около 20
можно было использовать контроллер RAM из той же серии, хотя не уверен, был ли наш аналог
Благодарю за статью!
Очень интересно, как и комментарии коллег, которые появились благодаря статье :)
Отсутствие очистки ОЗУ при нажатии кнопки сброса считается одним из преимуществ РК. А вы сделали, чтобы очищалось?
Нет. Но первые три байта перезаписываются. Это можно было легко обойти просто еще одной кнопкой сброса чисто на ЦПУ, но я ее не стал делать - нужды не ощутил. Сейчас у меня сброс сбрасывает микроконтроллер STC, тот готовит ОЗУ - записывает туда код монитора и те три байта, а потом ресетит ЦПУ.
Лучше сделать эту кнопку. Удобная функция. Прочитал программу с кассеты, запустил. Что-то сделал. Программа зависла. Нажал сброс, запустил снова. На Спектруме для такого надо программу заново с кассеты читать, а на РК вот так просто и непринуждённо.
Программа зависла. Нажал сброс, запустил снова
После того как программа зависла - в памяти может быть абсолютно что угодно. Например, ушла в бесконечную рекурсию и везде теперь останки стека. Смысл это сохранять?
А может и оказаться нормально. Возможность это проверить не помешает.
Запускаем программу -:она зависает. Что будет, если запустить её ещё раз? (хм. надо подумать.. неужели починится?)
Ну, во-первых, такое бывает. В официальной доке на ОС ЕС, в девичестве OS/360, на половину сообщений об ошибках первая рекомендация -- повторить задание или перезагрузить систему и повторить задание :)
Но ценность сохранения ОЗУ -- и в возможностях для отладки. Прога зависла, но, если ты разработчик, ты можешь из монитора или что там у них в ПЗУ лежит глянуть, что творится в памяти, не вылез ли стек за границы и т.д. и т.п.
В общем, смысл в сохранении всё-таки имеется.
Когда пишешь длинную прогу на ассемблере на 8080 или z80, и это делаешь путём ввода каждого байта с клавиатуры, вероятность ошибки растёт по мере роста программы. И вот ты такой ввёл несколько килобайт данных, запускаешь.... И тут хопа! Зависание! ААААААА! ВСЁ ЗАНОВО ВВОДИТЬ!
И вот тут как раз охрененнвй плюс сброса без очистки памяти. И можно проверить код, поискать ошибку и прочее.
Можно, и конечно нужно, каждый раз сбрасывать программу на кассету перед запуском. Но иногда дух "экстремизма" зашкаливал, и хотелось прогу запустить прямо щщас, а не через минуту.
В спектруме мне пришлось даже пзу перепрограммировать и добавить сброс без чистки памяти(реализовал сброс прерыванием с адреса 8).
О... Радио-86РК ) Это мой первый компьютер))
Для него написал пакет 3-х игр. Конечно, на ассемблере. Причем ОЗУ у меня было 16 Кб. Все в память не помещалось.
Исходники, конечно, канули в лету на кассетах. Сами игры, наверное, тоже. Хотя они ходили в народе, переписывали друг у друга. Назывались "Сокровища и чудовища", "Невидимый лабиринт"... А третей даже название не помню. Кажется, что-то типа гонок-стрелялок в стиле Атари. Вдруг у кого-то осталось)
хотелось бы увидеть код программирующий вг75

Это скрин с кода на ассемблере. Мои параметры для VGA режима указаны как комментарий. 4 других байта. Я конечно не пересобирал монитор из исходников, а просто нашел это место в коде и поменял байты. Это было не сложно. Важно, что при этом на ВГ75 должна подаваться частота синхронизации примерно 25.175 / 8 = 3.15 МГц. Иначе VGA не получится.
Да. Там два регистра на прием. Команд и праметров. Сначала пишется команда 0 по адресу С001 - это команда "сейчас будут настройки", потом декремент указателя и идут параметры команды (4 штуки) в адрес С000. Потом инкремент указателя и команда 27 по адресу С001. Это запуск. Параметры в самой команде. Дальше (уже не видно на скрине) в цикле чтение регистра состояния и там проверка флага конца кадра. Как только кадр закончится, и начнется обратный ход луча по кадру, будет инициализация и запуск ПДП. Потом уже пойдет картинка.
Получается, что Радио-86РК воспроизводил звук флагом запрещения прерываний?! Жёстко.
Справедливости ради, это не местное изобретение, оно пошло ещё с IMSAI 8080.
Такое решение лишило их возможности использовать прерывания в будущих версиях компьютера.
А однобитный звук – такое дело, что торопиться особенно некуда, могли бы порты ввода-вывода без проблем дёргать.
С другой стороны, конечно, будущих версий и не было.
Да и качество звука с ножки прерывания было ужасающим. Меандр не получить
Да не такое уж и ужасающее. Можно сделать и меандр, и три импульсных канала, как на ZX Spectum. Софт из видео в 80-х был перетащен на РК86, называется там «Музыкальная система»: https://www.youtube.com/watch?v=1FDigtF0dRQ
Еще один клон Радио-86РК