Pull to refresh

Comments 83

Гениальный процессор был.
Да, в роли микроконтроллера его нельзя применять, но тогда это было нормально.
Шина адреса и данных, внешние RAM/ROM, таймер ВИ53, порты на ИР22/23/27 или ВВ55.

Да, и пользовался у нас популярностью не только по Синклерам, а и по АОНам. FFT реализовалось нормально, даже с компаратором. Тогда было востребованно.

А вот
Занимаясь чипом по 80 часов в неделю, Фаджин завершил разработку его архитектуры меньше чем за девять месяцев.

Это уже мало кто поймёт. На это только японцы способны, наверное. Для меня 30 чистых часов — норма, 40-подвиг.
Ага, и у него ВСЕ выходы имели нагрузочную способность в 1 TTL вход! Это была редкость и большое удобство, процессоры тех времен обычно имели нагрузочную способность в несколько КМОП входов.
UFO just landed and posted this here
Это значит, что выход даёт около 1.6 мА. Это позволяет цеплять не КМОП, а ТТЛ (она быстрее тогда была) логику/память снаружи без микросхем-преобразователей.
У ВМ80 такая же нагрузочная способность.
Только схема подключения ВМ80 в целом была намного сложнее; одни три напряжения питания чего стоят. Да и машиннокодовых команд в несколько раз меньше.
А чего редкость? По-моему, все массовые процессоры 70-х были совместимы по нагрузке с TTL. По крайней мере, насколько я помню, вездесущие i8080 и MOS 6502 также TTL держали.

Интересно, были АОНы на Z-80 с чистым БПФ? Мэйнстримом IMHO был "Байес", там битовая последовательность с выхода компаратора сравнивалась с меандрами разных частот.

Это можно считать частным случаем дискретного преобразования Фурье. Корреляционный приемник определял пару частот, как пару максимумов сумм квадратов перемножений входного сигнала на 6 синус-косинус составляющих ожидаемых частот, и в окне получалась цифра. А вот дальше уже, ряд определенных «сырых» цифр передавался «Байес» обработчику, правилами которого они складывались в «пакет» и соответственно номер. Чистые БПФ методы тоже были — они к сожалению на железе того времени (580ВМ80) требовали около 15-20 секунд для расчетов «номера» из оцифрованного пакета и были в целом не очень устойчивы…
Хотелось бы больше подробностей (вплоть до того, что и как следует знать, чтобы написать подобное)
Не в курсе, что именно внутри тех аонов, но подозреваю, что это называется «алгоритм Гёрцеля». Подходит для определения наличия указанной частоты в последовательности, что в самый раз для того аона.
Я в курсе, т.к. сам и писал. Только уже под PIС16С622.
Да, ЦАП не было, только компаратор (как и в массовых моделях на Z80, потом на 8031). Тогда все экономили.
Есть «окно», выборки сравниваем с 6-ю частотами, с sin и cos.
Но sqrt(sinSum^2 + cosSum^2) ни кто не заморачивался, слишком накладно было, было просто abs(sinSum) + abs(cosSum).
И работало же нормально. Да, не БПФ в чистом виде, но алгоритмы у всех были одинаковые. Надо было делать, чтобы было быстро и дёшево.
Что-то вспомнился «Паша АОН» с радиорынка по приданию с дисководом на занавеске:)

Это не тот, который "Русь" изобрёл?

Не помню, не стал писать. Мне «Русь» не очень нравилась не знаю уже за давностью почему. Сидел на параллельной ветке версий каких то. Но да, что-то из них он пилил. Мой уровень был тогда jp подправить да текст поменять :)
А я на 16f684 АОН «Хамелеон». Он встраивался в радиотелефоны с Caller ID
Для определения 2х максимумов вычисление корней — лишняя операция. Разницы нет, использовать массив значений, или массив корней из этих значений. Мы с Пашей как то даже спорили по этому поводу — я ему доказывал что таблицу корней надо выкинуть нафиг (она была), он согласился потом.

Году в 1997 я сделал из "Байта" говорящий АОН, изучив прошивку АОНа, опубликованную в каком-то из журналов для радиолюбителей (не помню уже в каком). Я опять же не помню подробностей (возможно, где-то и остались записи, но я их не нашел) — смысл был в конъюнкции битовой последовательности с компаратора с битовыми последовательностями для разных частот, причем, если память не изменяет, с разными начальными фазами. Потом оценивались результаты и выбирались две частоты, наиболее соответствующие этому сигналу.
P.S. https://habr.com/ru/post/486584/#comment_21220580 — более научным языком.

Нет, фазы точно не использовались, т.к. непонятно откуда их брать.
Вычислялось 3 максимума по частотам.
Если третий максимум был сравним со вторым, это считалось ошибкой, шумом.
И «окна» должны были идти последовательно, несколько выборок.
AAAASBBBBBXCCC надо было преобразовать в ABC.
Но AASAABBXBBXCC — это шум или слабый сигнал, недостоверно.

Под "с разными начальными фазами" я имел ввиду, что там сдвиг был (кажется, на четверть периода, т.е., например, вот такие "эталонные" последовательности для частот:
...11110000111100…
...00111100001111...

90е на нём НПФ «Прорыв» довольно хороший контроллер ТМ выпускал — ТК-8. Довольно неубиваемая штука была
таймер ВИ53, порты на ИР22/23/27 или ВВ55
Это «наш колхоз». У Zilog на самом деле был не один микропроцессор Z80CPU, а микропроцессорный комплект, дополнительные микросхемы про которые мы (на советском пространстве) мало знали (Z80PIO, Z80CTC, Z80SIO, Z80DMA, Z80DART).
Есть какая-то инфа, что и как на этом комплекте было интересного сделано? В википедии не встречал, а далее следы теряются.
Встречались в промышленых контроллерах (особенно таймеры, PIO и SIO/DART).
Самый интересный вариант, с которым имел дело — это «умный» терминал от Филлипса — на нем было возможно запустить даже CP/M. Так в нем использовалця почти весь комплект (DMA, CTC, PIO и DART (это асинхронный последовательный приемопередатчик (SIO — синхронный)) и два процессора — один работал как контроллер двух дисководов ( и там как раз и стояли CTC).
А в 1985 (или 86?) году Hitachi поместила Z80 и часть периферии в один чип — HD64180, который потом стал Z180 :).
Для спектрума как минимум есть современное (т.е. не «тех» лет, а новодел последних лет) устройство под Z80DMA — контроллер DMA-интерфейса «DataGear», позволяющий использовать аппаратное ускорение блоковых функций посредством DMA. Под это есть даже несколько показательных демок и просмотрщик мультиколорных картинок.
Весьма интересная девайсина.

Инфа:
speccy.info/DataGear
velesoft.speccy.cz/data-gear.htm
Это очень интересно! Спасибо за ссылки.
Интересно, их Интел не засудила за то что украли технологии? В штатах работадатели запрещают заниматься той же деятельностью после ухода с позиции в течении какого-то времени. Чертить на милимитровке без юнит-тестов это мощно.
>Фаджин рисовал чертеж на миллиметровой бумаге грифелем; Сима следил за созданием шаблонов по чертежам.
Вот не могу понять, как на миллиметровке нарисовать АЛУ хотя бы.
Но, может быть, они были очень увлечённые.

В Штатах законы меняют постоянно. Тогда это не было DNA или чем-то подобным. Сейчас уже нельзя.
Но, может быть, они были очень увлечённые.


-… probably you were passionate about this?
-Actually, the japanese was.
Вот не могу понять, как на миллиметровке нарисовать АЛУ хотя бы.
А в то время других способов не было. Не было САПРов, не было плоттеров. Рисовали черновики на миллиметровке, потом за кульманом, опять же вручную, делались чертежи тушью на "белке". Потом с этих белков делался фотошаблон с помощью специальной фотоаппаратуры. Да и первые программы к таким процессорвм писались и транслировались с помощью таблички с кодами и бумажки с карандашом.
Ну здрасьте. С середины 60ых — всё было. А вот компьютера у них не было. Они потратили всего 400 тысяч на разработку. Компьютеры тех времен были большими, машзал 200 кв. метров — норма, и стоили они миллионы. Так что боинг — мог позволить себе САПР. Но не интел.

В качестве пруфов — в 1983 году (это через 8 лет) в Ленпромстройпроекте САПР воспринимался как банальность. Просто дорогая и ненужная банальность. Месячная зарплата конструктор — примерно два машинных часа. А чертил конструктор быстрее.

Только z80 появился раньше. В 70-х о компьютерной графике только мечтали.

В 70-х компьютерная графика вышла за пределы лабораторий (где была на протяжении 60-х) и уже вполне активно использовалась в телерекламе и кино, появились видеоигры от Pong (1972) до Space Invaders (1979), со многими довольно впечатляющими промежуточными остановками, типа Speed Freak (1977).


В 70ых с компьютерной графикой все было намного проще. Дисплеи были векторными (как осцилограф), там что с буквами на них было не очень (они округлялись), а с графикой — всё хорошо.

Первые серийные векторные дисплеи за рубежом появились в конце 1960-х годов.
В Штатах законы меняют постоянно.

В Штатах такие вещи регламентируются не столько законами, а сколько вашим индивидуальным договором с работодателем. Англо-сакская же прецедентная система.

Это в континентальной системе (вся Европа, без Великобритании и ex-СССР) — прежде всего в законах рекламентировано.
В штатах работадатели запрещают заниматься той же деятельностью после ухода с позиции в течении какого-то времени.

Это слишком сильное утверждение, в такой формулировке скорее байка про дикий запад на постсоветском пространстве. Вы можете получить что-то такое в контракте, но с кучей оговорок, и вероятнее всего потом будете небедно жить за счёт компании.

Интересно, их Интел не засудила за то что украли технологии?

Топология микросхем стала объектом защиты авторских прав в 1980-е. Кроме того, может быть и не украли.
Думаю что не украли, но если покапаться в стили Oracle Java, то наверняка можно было бы найти похожие куски :) Хотя бы потому что помнишь как старался сделать что-то подобное на прошлой работе. То что это не было объектом защиты авторских прав всё объясняет.
UFO just landed and posted this here
На самом деле у Z80 и i8080 только совместимая система команд, а внутри они устроены по разному, вплоть до того что АЛУ у Z80 4-х битное. Плюс Интелу в суде пришлось бы не просто доказывать факт копирования т.к. изменений по сравнению с 8080 было очень много начиная с:
1. Теневого набора регистров
2. Наличие индексных регистров и команд по работе с ними
3. Наличие команд оперирующими битами
4. Более развитая система прерываний
5. Регенерация динамической памяти
6. одно напряжение +5 вольт
7. более высокая производительность
8. возможность адресации 65536 портов ввода/вывода
9. Ассемблер Z80 полностью отличался от ассемблера 8080
А если учесть что Zilog неоднократно обращалась к Intel с предложением о выпуске Z80 на их мощностях, но Интел тогда ответил отказом, было бы сложно предположить что люди укравшие пришли бы на поклон к тем кого обворовали.
С z80-ым, точнее с его продолжателями связан такой факап. Эксон решил выйти на рынок 16 разрядных процессоров, и оставил такую задачу перед Zilog разработать и выпустить такой процессор. Был нанят инженер для разработки архитектуры нового процессора. И он его проектировал, с чистого листа, с популярной тогда ортогональной системой команд, но с Z80 этот процессор не имел ни чего общего кроме наименований мнемоник, совместимость была полностью нулевая. На это еще наложились проблемы при запуске в производство, и Z8000 фактически провалился.
А прими в Zilog итеративный план развития Z80 с добавлением сегментных регистров или MMU и создав процессор подобный Hitachi HD64180, то история компьютеров могла пойти по другому пути. Возможно и IBM могла принять такой процессор в качестве сердца PC, а что? Совместимость с CP/M есть, мегабайт адресуется, как не вариант?
А ещё Z80, помнится, кое-какие инструкции выполнял иначе, чем i8080. Например, DAA у Z80 работает корректно и после сложения и после вычитания (у i8080 DAA работала правильно только после сложения).
Да были такие команды, и по их поведению делался вывод на каком процессоре они выполняются: на Z80 или на 8080.
Кстати U880 (а с ним и наш Т34) был не прямым клоном Z80, а работой по мотивам т.к. тоже имелись команды с иным поведением чем у оригинала.
А ещё были переходы с относительной адресацией… это было счастье! (когда программируешь в машинных кодах) ))
А еще не упомянули, что и по тактам он был быстрее. Например самую быструю команду MOV 8080 выполнял за 6 тактов, а Z80 за 4 такта, то есть он был еще быстрее чем просто по тактовой частоте считать. И это как-бэ намекает, что его архитектура «не была просто скопирована».
В типичных системах того времени, не все так просто было по тактам, частенько z80 wait-ился чтоб за ним периферия успевала.
А подробная статья с разбором полетов уже была на Хабре в «Эмоциональная история процессоров для первых компьютеров с 70-х до начала 90-х»
Из неё:
про Intel 8080 и 8085
Первый настоящий процессор на чипе, сделанный в первой половине 1974 года, он до сих пор производится и находит себе применение. Многократно клонировался по всему миру, в СССР имел обозначение КР580ВМ80А. Современные процессоры Intel для РС до сих пор легко обнаруживают свою родственность этому уже в каком-то смысле реликтовому изделию. Сам для этого процессора кодов не писал, но будучи хорошо знакомым с архитектурой z80, рискну привести некоторые свои замечания.

Систему команд 8080, как и других процессоров Intel для РС, трудно назвать идеальной, но она универсальная, достаточно гибкая и имеет несколько очень привлекательных особенностей. От своих конкурентов, Motorola 6800 и MOS Technology 6502, 8080 выгодно отличался большим количеством пусть и несколько неуклюжих регистров, предоставляя пользователю один 8-битный аккумулятор А, один 16-битный полуаккуммулятор и по совместительству быстрый индексный регистр HL, 16-разрядный указатель стека SP, а также ещё два 16-битных регистра ВС и DE. Регистры BC, DE, и HL можно было использовать и как 6 байтовых регистров. Кроме того, 8080 имел поддержку почти полного набора флагов состояния: переноса, знака, нуля и даже чётности и полупереноса. Некоторые инструкции из набора команд 8080 долгое время были чемпионами по быстродействию. Например, команда XCHG делает обмен содержимым 16-битных регистров DE и HL всего за 4 такта – это было исключительно быстро! Ряд других команд хотя и не ставили столь яркие рекорды, но также долгое время были одними из лучших:

XTHL – обмен содержимым регистра HL и данных на вершине стека, 18 тактов – вроде бы много, на даже на настоящем 16-битном 8086 такая команда занимает от 22 тактов, а для 6800 или 6502 такую команду даже трудно представить;
DAD – добавить к полуаккуммулятору HL значение другого 16-битного регистра (BC, DE или даже SP), 10 тактов. Это настоящее 16-битное сложение с установкой флага переноса. Если складывать HL самим с собой, то будет получаться быстрый 16-разрядный сдвиг влево или умножение на 2, ключевая операция как для реализации полного умножения, так и деления;
PUSH и POP – положить в стек и вынуть из стека 16-разрядное значение соответственно из регистра или в регистр. Выполняются за 11 и 10 тактов. Это самые быстрые операции 8080 для работы с памятью и при их выполнении происходит автоматическая инкрементация или декрементация SP. PUSH можно использовать, например, для быстрого заполнения памяти паттерном со значениями из 3 регистров (BC, DE, HL). Команд для работы с 8-битными величинами со стеком нет вообще;
LXI – загрузка 16-битной константы в регистр (HL, DE, BC, SP) за 10 тактов;
RNZ, RZ, RNC, RC, RPO, RPE, RP, RM – условные возвраты из подпрограммы, позволяли делать код чище, избавляя от необходимости писать лишние условные переходы. От этих команд отказались в архитектуре x86, возможно, что и зря, код с ним получается симпатичнее.

и про Zilog Z80
Этот процессор стал наряду с 6502 основным процессором первых персональных компьютеров. В истории его появления и использования нет никаких насыщенных драматизмом событий. Есть только некоторая интрига в неуспехе Zilog сделать следующее поколение процессоров. Z80 начали производить в 1976 и его варианты производят до сих пор. Когда-то даже сам Билл Гейтс объявил о поддержке систем на основе z80.

Интересны ряд совпадений. Как и в случае с 6502, главный разработчик Z80, Федерико Фаггин (Federico Faggin), ушёл из крупной компании, из Intel. После работы над z80 Федерико уже почти не работал с процессором следующего поколения Z8000 и в начале 80-х ушёл из основанной им компании, чтобы в дальнейшем уже никогда процессорами не заниматься. Он создал затем несколько относительно успешных стартапов, создавая системы связи, тачпады и цифровые камеры. Можно упомянуть, что, помимо z80, в Zilog им ещё был разработан удачный и производимый до сих пор микроконтроллер Z8.

Z80 – это более удобный для включения в компьютерные системы процессор, чем 8080. Он требует только одного напряжения питания и имеет встроенную поддержку регенерации динамической памяти. Кроме того, он при полной совместимости с 8080 имеет довольно много новых команд, второй набор основных регистров и несколько совершенно новых регистров. Любопытно, что в Zilog отказались от использования мнемоник ассемблера 8080, а стали использовать свои собственные мнемоники, более подходящие для расширенной системы команд z80. Подобная история случилась с ассемблером Intel x86 в мире программного обеспечения GNU, там тоже почему-то используют по умолчанию свои собственные соглашения по записи программ на ассемблере. В Z80 добавили поддержку флага переполнения, Intel добавила поддержку такого флага только в 8086. Однако, этот флаг в z80 совместили с флагом чётности, поэтому одновременно, как в 8086, оба флага использовать не получится. В z80, как и в 6502, есть только базовая проверка значения одного флага, т.е. нет проверок сразу двух или трех флагов, что необходимо для сравнений «строго больше», «меньше или равно», а также всех знаковых – в таких случаях приходится делать несколько проверок, на 8086, 6800 или PDP-11 достаточно одной.

Среди новых команд z80 особенно впечатляют команды массового копирования памяти за 21 такт на байт, а также интересная команда поиска байта в памяти. Однако наиболее интересна команда EXX, меняющая местами содержимое 48 байт регистровой памяти, регистры BC, DE, HL с их двойниками, которая выполняется всего за 4 такта! Даже 32-битным ARM понадобится на такую же операцию не менее 6 тактов. Остальные добавочные инструкции не так впечатляют, хотя иногда могут быть полезными. Добавлены ещё:

16-битное вычитание c заемом и 16-битное сложение с переносом за 15 тактов;
унарный минус для аккумулятора за 8 тактов;
возможность читать из памяти и писать в неё, используя регистры BC, DE, SP, IX,IY, а не только HL;
сдвиги, вращения и ввод-вывод для всех 8-битных регистров;
операции проверки, установки и сброса бита по его номеру;
переходы по смещению (JR);
команда цикла.

Большинство новых команд довольно медленные, но их правильное использование может все же сделать код несколько быстрее и существенно компактнее. Это особенно относится к использованию новых 16-разрядных регистров IX и IY, которые можно использовать для новых методов адресации. Интересно, что индексные регистры IX и IY появились в Z80 с целью привлечь пользователей 6800 к переходу на Z80! Но осмелюсь высказать своё мнение, операции с индексными регистрами Z80 сделаны скорее неудачно из-за наличия почти бесполезного байтового смещения в командах, использующих эти регистры.

Многие команды 8080 в z80 стали на такт быстрее и это очень заметное ускорение. Но основная для 16-битной арифметики команда ADD стала на такт медленнее, что делает арифметику в целом если и быстрее, то только чуть-чуть.

Система работы с прерываниями стала гораздо интереснее имеющейся у 8080. С z80 можно использовать как немаскируемые прерывания, так и три способа (один из них совместим с 8080) для работы с маскируемыми. Наиболее интересен режим маскируемых прерываний 2, который позволяет гибко менять адрес кода для обработки прерывания.

Z80 имеет довольно много недокументированных инструкций, многие из этих инструкций пропали при переходе на технологию CMOS, но те которые сохранились стали фактически стандартными и были документированы некоторыми фирмами. Особенно полезны инструкции, позволяющие работать с отдельными байтами неуклюжих 16-битных регистров IХ и IY. Кроме недокументированных инструкций Z80 имеет и другие недокументированные свойства, например, два особых флага в регистре состояний.

Конечно, z80 ещё в большей степени, чем 8080 имеет право называться слегка 16-битным. Гипотетический индекс разрядности у z80 явно чуть-чуть повыше, но при этом парадоксально, что АЛУ у z80 на самом деле 4-битное! На электронном уровне z80 и 8080 – совершенно разные чипы.
Система команд i8080 очень далека от совершенства, особенно, если рассматривать с точки зрения разработчика компиляторов с языков высокого уровня. По себе могу сказать, что условные возвраты и условные call'ы используются крайне редко. Очень не хватает инструкций смещения стека (add sp,), получения адреса переменной в стеке (lea hl,sp+), загрузка/запись из/в стек по указателю со смещением (ld a,(sp+)), индексации с переменным смещением (ld a,(hl+b)), а так же call hl. Лучше бы вместо условных возвратов, длинных джампов и коллов, они бы сделали: условный относительный переход на 1-9 байт вперед (смещение в коде инструкции), относительный переход на -128...+127, относительный переход на -32768...+32768, абсолютный переход, косвенный переход (на адрес в регистре), относительный call, абсолютный call, косвенный call, а так же инструкции загрузки регистров со смещением (пусть только положительным) относительно PC.
В процессоре gbz80 (который от z80 только мнемоники и таблицу cb имеет) ряд этих инструкций добавлен.
А вот z80 мало что унаследовал весь этот бардак (почему группу загрузок регистр-регистр нельзя было в начало опкодов поместить — тогда бы nop сама собой получилась, push af сохраняет аккумулятор как msb, но при этом он в остальных инструкциях имеет код 7, соответствующий младшему регистру в паре: ld a,a имеет код 0177). Плюс дополнил рядом бесполезных блочных инструкций. Кто-нибудь когда-нибудь использовал otdr и indr? А инструкция neg нахера нужна, когда есть cpl и inc a, исполняющиеся примерно за то же время?
Не так давно Zilog выпустила процессор с расширенным набором команд. Там появились инструкции LEA rr,ii+d и LD rr,(gg). Но Zilog не была бы сама собой, если бы не наворотила глупостей (имхо), например инструкция PEA ii+d (push effective address). Я так и не смог придумать ей полезного применения, а пишу под eZ80 с 2013 года (на z80 стаж с 1993, где-то). А вот реально нужных инструкций не добавилось…
Разработчики ZX Spectrum Next пошли еще дальше в с маразмом в системе команд процессора Z80N. Они тупо последовательно добавили в таблицу ed нужные с их точки зрения инструкции. То, что при этом их кодировка не соответствует существующей, их, похоже, меньше всего волновало, а это скажется на количестве логики. Там, где можно было получить 4 инструкции, они добавили одну (mul d,e; хотя в z180 есть набор mlt ss). Есть инструкция зеркалирования битов аккумулятора (так себе идея, проще было через «внешнее устройство» сделать), своп половин аккумулятора (реально полезно при выводе BCD чисел), barrel shifter, который двигает DE на B бит… Но вишенка на торте — это инструкция push nn. Эти нехорошие люди придумали nn хранить в коде инструкции в big endian! Из-за них мне пришлось реализовывать отдельный релокейшн в GNU binutils (BFD, Assembler, Ld) — два дня ковырялся.
Система команд i8080 очень далека от совершенства, особенно, если рассматривать с точки зрения разработчика компиляторов с языков высокого уровня.

Абсолютно согласен, но 8080 оправдывает то что он был одним из первых микропроцессоров, и соответственно никакой базы «что нужно в системе команд микропроцессора общего применения» не было. Ну кроме специфичного 8008.
они бы сделали: условный относительный переход на 1-9 байт вперед (смещение в коде инструкции), относительный переход на -128...+127, относительный переход на -32768...+32768, абсолютный переход, косвенный переход (на адрес в регистре), относительный call, абсолютный call, косвенный call, а так же инструкции загрузки регистров со смещением (пусть только положительным) относительно PC.

В Z80 и сделали относительный переход +127 -128, и меньше двух байт его не сделаешь, а делать сверхкороткий относительный переход нет смысла из-за нерационального расхода оптокодов.
Необходимость относительного перехода -32768...+32768 вызывает сомнение т.к. 64 кб можно улететь не туда куда надо из-за арифметики.
Косвенный (короткий) вызов подпрограммы, теоретически возможен,, но на практике будет медленнее чем обычный вызов подпрограммы
Разработчики ZX Spectrum Next пошли еще дальше в с маразмом в системе команд процессора Z80N.

Z80N это что за чудо, где о нем почитать?
В Z80 и сделали относительный переход +127 -128, и меньше двух байт его не сделаешь, а делать сверхкороткий относительный переход нет смысла из-за нерационального расхода оптокодов.
Речь не про Z80, а про 8080. Конечно в z80 вставлять сверхкороткий относительный переход некуда уже было, а вот в i8080 вместо условных коллов вполне. Как вариант, можно было сделать условный джамп на 1 инструкцию (1-4 байта) или просто префикс условного выполнения.
Необходимость относительного перехода -32768...+32768 вызывает сомнение т.к. 64 кб можно улететь не туда куда надо из-за арифметики.
это проблемы программиста.
Косвенный (короткий) вызов подпрограммы, теоретически возможен,, но на практике будет медленнее чем обычный вызов подпрограммы
косвенный нужен, если адрес подрограммы вычисляется. Сейчас call hl реализуется либо через push+jp (hl) или через call __call_hl.

А про z80n можно почитать в вике на сайте zx spectrum next.
Речь не про Z80, а про 8080. Конечно в z80 вставлять сверхкороткий относительный переход некуда уже было, а вот в i8080 вместо условных коллов вполне.

Так создатели Z80 и поправили несправедливость сделав короткий переход по смещению. Почему не сделали это в 8085? Кто его знает…
Как вариант, можно было сделать условный джамп на 1 инструкцию (1-4 байта) или просто префикс условного выполнения.

Ну тут пригодился бы REP (команда повторения) с условием на различное количество команд 1/2/4/8.
А префикс исполнения — это у нас ARM получается.
это проблемы программиста.

Ну мы же не шерифы, и должны думать об индейцах.
косвенный нужен, если адрес подрограммы вычисляется. Сейчас call hl реализуется либо через push+jp (hl) или через call __call_hl.

Теперь понял о чем речь, обознался, извините.
А про z80n можно почитать в вике на сайте zx spectrum next.

Т.е. это софткорка на ПЛИСине? Тогда логику ломающих совместимость не понимаю. А так туда можно было запихать хоть ММХ для Z80 :)
Ну тут пригодился бы REP (команда повторения) с условием на различное количество команд 1/2/4/8.
REP сложнее реализовать.
А префикс исполнения — это у нас ARM получается.
Ну если только thumb2. В ARMv4 там у каждой инструкции было поле для условия (неразумное решение, имхо).
Ну мы же не шерифы, и должны думать об индейцах.
ну разработчики i8080 не думали же о том, как обезопасить программистов от call 0 или call 65535. Так же и тут. У арма, например, основная масса переходов — относительные. И это мне нравится! Кстати, линк регистр тоже классная штука. Вообще, в thumb2 очень много красивых инструкций, например, ITE.
Т.е. это софткорка на ПЛИСине? Тогда логику ломающих совместимость не понимаю. А так туда можно было запихать хоть ММХ для Z80 :)
Там с совместимостью проблем нет (она полностью сохранена). Там с головой разработчиков проблемы. Если бы они использовали стандартный для z80 подход к проектированию набора инструкций, то логики на новые инструкции ушло бы меньше. Гимору разработчикам компиляторов тоже. Ну вот зачем было у push nn хранить данные в обратном порядке?!? Все равно она сначала считает во временный 16-ти битный регистр, а потом уже запушит его в стек. Они думали, что проц будет читать побайтно?!? ХА! В классическом z80 даже этот временный регистр есть, если память не изменяет, WZ называется (он недоступен программно). Кроме того, полная длина инструкции push nn 4 байта (2 опкод и 2 данные), это тоже самое, что ld rr,nn; push rr!!! Кроме того, даже по скорости выигрыш максимум в 1 такт. Не стоит оно того.
REP сложнее реализовать.

Почему сложнее? Встречаем REP,
заполняем очередь команд из N операций которые хочет обработать REP. Потом проверяем условие, если оно выполняется бежим по очереди без чтения команд из памяти. По достижению последней команды в очереди переходим на первую, проверяем условие условие, если исполняется повторяем, в противном случае приращиваем IP длину очереди плюс один. Вот как-то так вчерне, да тут есть вопросы по обработке прерываний, возможном наличии переходов и вызовов в блоке REP, и т.д.
Ну если только thumb2. В ARMv4 там у каждой инструкции было поле для условия (неразумное решение, имхо).

Для RISC процессора вполне нормально
ну разработчики i8080 не думали же о том, как обезопасить программистов от call 0 или call 65535.

В CP/M Call 0 — это перезагрузка ;)
Call 0xFFFF сложнее, но в 90% это будет перезагрузка
Там с совместимостью проблем нет (она полностью сохранена). Там с головой разработчиков проблемы. Если бы они использовали стандартный для z80 подход к проектированию набора инструкций, то логики на новые инструкции ушло бы меньше.

Что тут сказать «Они так видят»;)
На самом деле очень сложно дополнять систему команд процессора не имея TRAP Illegal operation и команды ESCape. жаль что в Z80 не было ни того не другого
На самом деле у Z80 и i8080 только совместимая система команд

Да и то не полностью. У 8080 флаг четности это всегда флаг четности, у Z80 это флаг четности/переполнения. Это нужно учитывать при использовании арифметических операций.
Когда в детстве изучал ассемблер Z-80 на глаза попалась фраза, что была выбрана оригинальная мнемоника команд именно из-за патентных ограничений.
Его использовали и в качестве микропроцессора музыкальных инструментов (например, легендарной MIDI-клавиатуры Prophet-5)

Prophet-5 это все же полифонический аналоговый синтезатор, а не просто MIDI-клавиатура.
Таки легендарный процессор. Под это определение еще, разве что, Intel 386 попадает.
UFO just landed and posted this here
Чтобы процессор стал легендарным, нужно, чтобы на нём существовали дешёвые игрушки, на которых можно развлекаться в своё удовольствие, и чтобы было более-менее приятно писать на ассемблере.
Ну где такое есть для MIPS или Alpha?
А, для вас «легендарный» = «легендарный в среде самодельщиков». Тогда надо как минимум «Атмегу» включить в список)
> А, для вас «легендарный» = «легендарный в среде самодельщиков».

Не для меня. Но вижу вокруг в основном такое отношение.

> Тогда надо как минимум «Атмегу» включить в список)

Да, тоже.
Я смотрю по степени влияния оказанного на широкие массы :)
68k — Amiga, Mac, Next, Atari, Sun (рабочие станции), Sega Megadrive, игровые автоматы
6502 — PET, C64, NES, Apple I/II
Z80 — ZX-Spectrum, MSX, Amstrad, Atari, Калькуляторы TI, Gameboy
x86 — IBM PC
ARM, хоть и имел высокую производительность, был только в Acorn Archimedes и не снискал особого успеха в 80е. Знали бы инженеры что они захватят мир через пару десятилетий ;)

Big Iron и станции за десятки тысяч долларов это другая история, хотя MIPS/Alpha процессоры революционные были, конечно.

Тогда вот это ещё добавьте))

CPU SC 29332VG - Motorola: E380, E398, RAZR V3, V180, V220, V300, V500, V600, V620, V80

До сих пор помню тестпойнт V3 для этого "Secure Blank Neptun"))

пространства ввода вывода


Речь про порты?
Этот процессор открыл для меня дорогу к низкоуровневому программированию.

Написал эмулятор спектрума на асме ibm.
После запуска он даже работал, что удивительно.

Не Спектрумом единым — целое поколение наших программистов выросло на учебных классах компьютеров Yamaha MSX и MSX2, сердцем которых был Z80.

Да, помню, классные были машинки

UFO just landed and posted this here
у меня есть TI-81 очень классный аппарат, я на нем как-то даже рисовал множество Мандельброта, куплен в 90х в штатах и до сих пор работает! весчь
У меня в детстве был аж целый комп «Дельта-С» на этом проце. Я на нем училась писать на бейсике и паскале.
Delta-C-02 был. Один раз менял пзу (накрылось), затем что-то ещё сломалось… Так и продал недавно
По сути, ZX-Spectrum. Бейсик-то там встроенный. А вот паскаль какой? От HiSoft?
Все верно. Это был аналог Спектрума. Только клавиатура в моей комплектации была убогая. С бумажечками и крышечками.
Бейсик — да. А паскаль чей был, не помню. У меня ПО грузилось с магнитофонной ленты. Использовала старый папин магнитофон с вырубленным шумоподавителем. В комплекте к компу шла кассета со служебными прогами. В числе прочего был там и Паскаль. Это был год 90-91-й примерно.
UFO just landed and posted this here
Когда я об этом прочитал, используя свой смартфон, которому порой недостаточно 6Гб оперативки и 128Гб ROM, а от одной зарядки он едва доживает до вечера, то захотелось заплакать.
Потому что во многих приложениях модулей аналитики, телеметрии и вставки рекламы (которую они, к слову, качают из инета, что её больше садит батарею) больше, чем модулей выполняющих основные функции приложения (не у всех приложений так, но у большинства — точно).
Если поставить фаервол, заблочить все ненужные пользователю активности (я обычно блочу также сервисы, ресиверы и провайдеры через MyAndroidTools), то смарт будет работать ощутимо дольше от одной зарядки. Только для этого сначала нужно получить рут, что для некоторых уже является непреодолимым препятствием (не всегда из-за заблокированного производителем загрузчика). Ещё есть отдельные темы по разным устройствам на форуме 4PDA, где пользователи обсуждают автономность своих устройств и как её увеличить.
Списки мусора в прогах можно посмотреть в этой теме на 4PDA, например.
Когда читаю на телефоне тот же Хабре и часто просто страницы в браузере нехило тормозит… Уж не говорю о попытках открыть комментарии к статье, когда их число более 250-300.
На ПК открытие страницы с несколькими сотнями комментариев тоже неплохо процессор нагружает.
Даже просто эта отрытая и загруженная нагружает периодически до 25% (с 1.5к уже легко 100% держит, только я не понял это на одно ядро диспетчер задач браузера показывает или как, т.к. в этот момент Process Explorer только 25% показывает) мой Core i5-2500, хотя что там может выполняться? Глянул вкладку Perfomance в DevTools Оперы — больше всего времени тратится на обработку событий мыши.
Портянка cкриншота
Скриншот свойств этой страницы с 42 комментариями
Ну не все так плохо, вот PRODATRON написал SymbOS — the 8bit multitasking operating system for the Amstrad CPC, MSX, Amstrad PCW and Enterprise 64/128
SymbOS
SymbOS — свободно распространяемая многозадачная операционная система для 8-разрядных бытовых компьютеров на основе микропроцессора Z80. В настоящее время существуют версии системы для компьютеров семейств Amstrad CPC, Amstrad PCW и компьютеров стандарта MSX2. Система может работать на оригинальных, не модифицированных моделях этих компьютеров. В отличие от ранних 8-разрядных операционных систем, она основана на микроядре, которое реализует вытесняющую многозадачность и работу с оперативной памятью объёмом до 1024 КБ. SymbOS имеет Windows-подобный графический интерфейс пользователя, имеет поддержку жёстких дисков объёмом до 128 Гб.
Разработка SymbOS изначально была экспериментом, имеющим целью выяснение возможности реализации многозадачной операционной системы с графическим пользовательским интерфейсом на 8-разрядном компьютере 1985-го года выпуска. Существование операционной системы GEOS также оказало влияние, однако структура и возможности SymbOS не имеют сходства с этой системой. Релиз 2006 года показал, что подобная система, «Windows в миниатюре», может существовать на бытовом компьютере 20-летней давности только лишь с количественными ограничениями. SymbOS является одним из самых больших программных ретрокомпьютерных проектов последних лет. Одной из целью проекта являлось обеспечение (в том числе, с помощью различных аппаратных расширений) возможности организации процесса работы с системой, аналогичного современным PC

Facts about SymbOS
Feature Power
Micro kernel
Maximum amount of supported RAM 1024 KB
Maximum number of processes 32
Number of different process priorities 9
Maximum number of timers 32
Maximum number of open messages 64
System manager
Maximum number of applications 24
Maximum application core size 63 KB
Desktop manager
Maximum number of windows 32
Maximum number of controls per window 1000
Maximum possible screen resolution 32.000 x 32.000 pixel
File manager
Maximum hard disc size 2 TeraByte
Maximum file size 2 GB
Maximum number of devices 8
Maximum number of open files 7
Source code
Source code size (OS Release 2.1) ~ 49.000 lines (1,5MB)
Source code size (Applications) ~ 70.000 lines (2,2MB)
Total size of the Z80 source code ~ 119.000 lines (3,7MB)
Supported platforms
Amstrad CPC-464,664,6128,464+,6128+ Yes
CPC-TREX, C-ONE Yes
MSX2, MSX2+, MSX TurboR, OCM Yes
MSX1 with Graphics 9000 (V9990) Yes
Amstrad PCW 8xxx, 9xxx, PcW10 Yes
Enterprise 64, Enterprise 128 Yes


Так что это не ОСь неповоротливая, а её приложения неоптимизированны.
Мы как-то на КУВТ-2 запускали какую-то оконную многозадачную ось… Не помню уже название и для MSX какого производитяля она предназначалась. Работала достаточно шустро. Быстрее, чем полуось на 286-м PS/2 c 20 мегабайтами жесткого диска и VGA. Но сама ось занимала дискетку 720 кБ почти целиком. И 128 килобайт ОЗУ ей было маловато, часто просила переткнуть дискеты. И приложений для той ОСи никаких не нашли тогда. А винчестеры… по слухам они для MSX существовали, но живьем их никто не видел. Да и денег таких у студентов в конце 80-х, естественно, не было.
Мы как-то на КУВТ-2 запускали какую-то оконную многозадачную ось… Не помню уже название и для MSX какого производитяля она предназначалась.

Не помню такого. Наверное это всетаки это с MSXTurbo (с R800) шло?
Быстрее, чем полуось на 286-м PS/2 c 20 мегабайтами жесткого диска и VGA.

Ну Пополама первых версий я только в книжках видел. Но на варпе проработал несколько лет.
А винчестеры… по слухам они для MSX существовали, но живьем их никто не видел. Да и денег таких у студентов в конце 80-х, естественно, не было.

Они были, только их цена была мягко говоря кусучей, винт стоил как целый класс
Смотрю ваш канал, очень интересные темы рассказываете и в доступной форме. Казалось бы, всё про этот Z80 давным давно известно, но некоторые факты я узнал впервые. Продолжайте в том же духе!
Статья годная, одно замечание — разброс в наименовании процессора. В заголовке и первую половину статьи используется Z-80, далее начинает встречаться Z80. Более ходовой вариант (маркировка большинства чипов, документация, зарубежные книги) без дефиса, но дефис присутствовал в маркировке некоторых версий ранних чипов производства Zilog.

Thales RG-7xxx на Z80 был.
Банковский HSM однако.

Sign up to leave a comment.

Articles

Change theme settings