Как были запрограммированы первые микропроцессоры?

44

Меня только что осенило, что если вы пишете операционную систему, то о чем вы пишете? Я спрашиваю об этом, когда читаю книгу об основах микропроцессора 1980 года, и этот вопрос всплыл у меня в голове:

Как был запрограммирован первый микропроцессорный чип?

Ответ может быть очевидным, но это меня беспокоит.

декан
источник
6
Если мне будет разрешено подключить мою собственную работу, см. Мой ответ на вопрос «Как ядро ​​Linux может компилироваться самостоятельно?» Переполнение стека . Ответ не очевиден, пока вы не поймете общий принцип, после чего вы скажете: «Ну, конечно ...»
dmckee
@dmckee Но он все еще не отвечает на вопрос, как он узнал, что делать :) кто сказал компьютеру с переключателями, что делать? Я хочу немного больше деталей.
декан
4
Таким образом, вопрос о разработке последовательности загрузки первого чипа? Что ж, это, безусловно, вопрос, который принадлежит этому сайту, но он идет по аналогии с разработкой цифровой логики, построенной из компонентов ... чтобы она начала работать в известном состоянии, а затем передавала входные данные, которые будут делать полезные вещи. Я оставлю это другой , чтобы обеспечить точный ответ, потому что я шаткий на это, но вы же знаете , что первые компьютеры были реализованы в вакуумных трубках, не так ли? Затем было поколение отдельных транзисторов, все до появления первого микросхемы. Инженеры уже знали, что делают.
dmckee
1
На немикро-процессорах, конечно.
user253751

Ответы:

56

Я восприму ваш вопрос буквально и буду обсуждать в основном микропроцессоры, а не компьютеры в целом.

Все компьютеры имеют какой-то машинный код. Инструкция состоит из кода операции и одного или нескольких операндов. Например, инструкция ADD для Intel 4004 (самый первый микропроцессор) была закодирована как 1000RRRR, где 1000 - код операции для ADD, а RRRR - номер регистра.

Самые первые компьютерные программы были написаны вручную, с ручным кодированием цифр 1 и 0, чтобы создать программу на машинном языке. Это затем запрограммировано в чип. Первые микропроцессоры использовали ПЗУ (постоянная память); позже это было заменено EPROM (стираемое программируемое ПЗУ, которое было стерто ультрафиолетовым светом); теперь программы обычно программируются в EEPROM ( «электрически ... - EPROM» , который может быть удален на кристалле) или, в частности, во флэш-память.

Большинство микропроцессоров теперь могут запускать программы из ОЗУ (это в значительной степени стандартно для всех, кроме микроконтроллеров), но в первую очередь должен быть способ загрузки программы в ОЗУ. Как отметил в своем ответе Джоби Таффи, это было сделано с помощью тумблеров для Altair 8080, который работал на Intel 8080 (который последовал за 4004 и 8008). На вашем ПК есть немного ПЗУ, называемое BIOS, которое используется для запуска компьютера и загрузки ОС в ОЗУ.

Машинный язык очень быстро утомляет, поэтому были разработаны программы на ассемблере, которые используют мнемонический язык ассемблера и переводят его, обычно по одной строке кода ассемблера на инструкцию, в машинный код. Таким образом, вместо 10000001, можно написать ADD R1.

Но самый первый ассемблер должен был быть написан на машинном коде. Затем он может быть переписан в своем собственном коде ассемблера, и версия на машинном языке использовалась для его сборки в первый раз. После этого программа могла собраться сама. Это называется начальной загрузкой и выполняется также с компиляторами - они обычно сначала пишутся на ассемблере (или другом языке высокого уровня), а затем переписываются на их собственном языке и компилируются с оригинальным компилятором, пока компилятор не сможет скомпилировать себя.

Поскольку первый микропроцессор разрабатывался задолго до появления мэйнфреймов и миникомпьютеров, а 4004 на самом деле не подходил для работы на ассемблере, Intel, вероятно, написала кросс-ассемблер, который работал на одном из своих больших компьютеров, и перевела код сборки для 4004 в двоичный образ, который может быть запрограммирован в ПЗУ. Еще раз, это распространенный метод, используемый для переноса компиляторов на новую платформу (называемую кросс-компиляцией ).

tcrosley
источник
Отличный ответ tcrosley! Исправлена ​​ошибка, касающаяся EEPROM и EPROM. +1
Тыблу
1
И если вы действительно хотите запрограммировать микроконтроллер без другого компьютера (помимо вашего мозга), вы можете сделать это, встроив схему, которая непосредственно запрограммирует его. Если он был запрограммирован через jtag, вы можете переключать переключатели, чтобы имитировать команды jtag, необходимые для программирования устройства. Если бы он использовал внешний ОЗУ, то вы могли бы использовать множество демультиплексоров и огромные массивы резисторов, привязанных к высокому или низкому уровню, чтобы представить биты инструкций (и, вероятно, использовать низкую тактовую частоту, потому что ваше оборудование будет работать медленно).
Nategoose
3
@tyblu: Я вполне уверен, что PROM предшествуют EPROM. Простейшая форма ПЗУ - это, по сути, выборочно заполненная диодная матрица (в первые дни диоды буквально паялись на сетке для представления одной полярности бита; отсутствующий диод представлял другую полярность). Плавкий предохранитель помещает диодную матрицу в микросхему, но имеет рядные транзисторы, которые намного лучше, чем диоды на пересечениях. Можно было выборочно удалить диоды, установив адресные провода, а затем по-настоящему сильно ударив по проводам данных, подключенным к диодам, которые вы хотели удалить.
суперкат
@tyblu: Обратите внимание, что предохранители PROM электрически не имеют ничего общего с современными OTPROM, которые являются просто чипами EPROM в неоконных пакетах. Устройства EPROM / OTP программируются путем электрической зарядки затворов некоторых транзисторов (которые имеют достаточную емкость и достаточно малую утечку, чтобы удерживать заряд по существу на неопределенное время). Напротив, микросхемы с плавким предохранителем программируются путем физического разрушения соединений с нежелательными диодами.
суперкат
1
посмотрите это «ПЗУ» времен дискретных транзисторов: en.wikipedia.org/wiki/Core_rope_memory
JustJeff
23

Первоначально программы были написаны на бумаге, а затем перенесены на любой метод ввода, который был доступен компьютеру. Это касалось кнопок, переключателей и соединительных проводов на первых компьютерах, перфокарт, клавиатур / плат.

На рисунке ниже показано, что используют настоящие программисты:

W5VO
источник
10
Черт возьми, Emacs ..
Tyblu
6
Я программист. (И те программисты, которых я программирую программистам, которые программируют программистов.)
Матин Улхак
4
Я делаю свои собственные программисты.
W5VO
16

Что ж, я был рядом, когда впервые появились микросхемы, мы писали кросс-ассемблеры и компиляторы на мэйнфреймах и мини-компьютерах, а затем мы загрузили их на 8-битное оборудование, люди на самом деле не удосужились собирать компиляторы / ассемблеры на микро, пока у них не было достаточно локального хранилища, чтобы сделать это полезным

Павел
источник
14

Одной из ранних форм памяти только для чтения была сетка, в которой адрес выбирал строку (тянет ее вниз), а столбцы представляли данные. Каждый столбец будет иметь подтягивание, и каждое пересечение будет иметь впаянный диод, чтобы представлять «ноль», или нет диода, чтобы представлять «один» [битовые уровни могут быть инвертированы, если это необходимо, в случаях, когда это уменьшит необходимое количество диодов. Любая желаемая комбинация битов может быть «запрограммирована» путем пайки в соответствующие диоды.

Эта конструкция была введена в мир интегральных микросхем в виде плавкого предохранителя. По сути, PROM с плавким предохранителем представлял собой схему, аналогичную приведенной выше, встроенную в микросхему, за исключением того, что все диоды были заполнены, и каждый диод имел слабый плавкий предохранитель, последовательно с ним. При поставке PROM будет читать «0» во всех местах. Однако можно было бы выборочно удалить диоды, выбрав соответствующий адрес и установив соответствующие линии данных «жестко» высоко [примечание: я думаю, что каждый бит мог иметь свой собственный транзистор, а не диод, но принцип тот же].

За программируемыми плавкими предохранителями PROM следовали полупроводниковые запоминающие устройства, которые накапливают биты путем имплантации зарядов на внутренних конденсаторах. Мало того, что такие воспоминания более компактны, чем предохранители PROM, но если они помещены в прозрачные для ультрафиолетового излучения пакеты, они могут быть стерты и использованы повторно. Обратите внимание, что даже так называемые «одноразовые программируемые» воспоминания почти всегда используют эту же конструкцию, но просто помещаются в непрозрачные для УФ-упаковки.

двое мужчин указывают на большую диодную матрицу диодно-матричный магазин управления 1950 MIT Whirlwind Computer

транзисторная матрица с крошечными SMD транзисторами транзисторно-матричный магазин управления 2005 года CPU MT15

Supercat
источник
надеюсь, вы не возражаете против небольшого изменения, которое я внес в ваш пост.
Дэвидкари
7

Я не уверен, что кто-то ответил на реальный вопрос ОП, который, кажется, звучит так: «Как компьютер знает, как начать работу?» так что я попробую.

Начнем с аналогии. "Как транзистор знает, как начать?" Конечно, это не так, это просто работает в соответствии с физикой, и инженер строит схему так, чтобы она запускалась в известном состоянии.

Компьютеры знают, с чего начать, потому что они являются цепями (конечно, очень сложными), и они созданы для запуска в определенном состоянии. В современной машине это может быть состояние, в котором основная шина перераспределяет часть адресного пространства для пользователя ПЗУ на материнской плате в виде нехватки памяти (ПЗУ было записано с BIOS). В машине первого поколения начальное состояние могло быть остановлено центральным процессором, нулевой счетчик программ и активная подсистема переключения памяти.

dmckee
источник
6

Операционная система - это компьютерная программа, которая запускается непосредственно на процессоре. Он может быть написан на любом языке, который может быть скомпилирован или собран в соответствии с машинными инструкциями. Сборка и C являются общими вариантами.

Код загружается в процессоры по одной инструкции из хранилища - ПЗУ или ОЗУ.

Z3 , первый программируемый процессор был построен из электромеханического реле и читать инструкции из перфорированного фильма.

Altair 8800, первый персональный компьютер, был запрограммирован с помощью переключателей.

Чтобы узнать, как процессор построен из цифровой логики, смотрите https://electronics.stackexchange.com/questions/5516/a-fun-book-to-learn-computer-architecture-for-not-exactly-beginners

Для истории, смотрите http://en.wikipedia.org/wiki/History_of_computing_hardware

Тоби джеффи
источник
5

Вот немного о действительно старых компьютерах:

Насколько я знаю, в те времена у вас была большая компьютерная лицевая панель, которая использовалась для их программирования. По сути, каждая ячейка памяти в этих компьютерах была подключена к коммутаторам. Вы включаете память, а затем используете переключатели для установки данных в каждой ячейке. Таким образом, вы постепенно вводите программу в память компьютера. Затем вы должны установить начальную точку программы и начать выполнение.

По мере развития технологий были разработаны так называемые программы загрузчика. Это короткие программы, цель которых - запустить другую программу из памяти компьютера. Проблема с постепенным вводом программ (и более позднего, более чем одного бита с использованием восьмеричных и более поздних шестнадцатеричных чисел) заключалась в том, что это было очень медленно, и была большая вероятность того, что оператор допустит ошибку при загрузке программы. Поэтому короткие программы будут использоваться для загрузки больших программ, хранящихся в памяти компьютера. Со временем часть кода, которую приходилось вводить вручную, уменьшалась, и в современных компьютерах у нас часто бывают загрузчики, написанные на каком-то ПЗУ или даже флэш-памяти.

AndrejaKo
источник
4
В машинах с «передней панелью», как и в более ранних системах S-100, переключатели позволяют управлять системной шиной. Один переключатель позволит вам приостановить процессор. В то время как процессор был приостановлен, вы можете вручную поместить адрес на адресную шину (через коммутаторы), поместить данные на шину данных (больше коммутаторов), а затем вручную вызвать цикл записи на шине (другой коммутатор), или цикл чтения, чтобы вывести данные обратно на 8 отдельных светодиодов и прочитать двоичный файл и т. д. Таким образом, вы можете сохранить достаточное количество машинного кода в ОЗУ, отключить процессор и перейти оттуда.
JustJeff
4

Несколько лет назад я столкнулся с программистом микроконтроллера, который имел четырехзначный семисегментный дисплей и шестигранную клавиатуру. Я уверен, что на нем не было микроконтроллера, и он позволял вам вводить машинный код сразу по байтам.

Так что это позволит вам (мучительно) составить список кодов операций вручную один за другим и ввести их в чип.

Я понятия не имею, если вы все еще можете получить их, но я предполагаю, что нечто подобное использовалось еще тогда, когда микроконтроллеры были относительно новыми.

BG100
источник
1
Похоже, возможно, KIM-1 или Cosmac ELF, оба из которых включали микропроцессор (MOS 6502 и RCA [CD] 1802). KIM: oldcomputers.net/kim1.html ELF: cosmacelf.com
mctylr
Это было что-то вроде того, что сказал mctylr. На машинах такого типа в ПЗУ обычно была небольшая программа-монитор. Когда вы вводили байты с клавиатуры, это было на самом деле 6502 (или 8085 или что-то еще), считывающее клавиши, изменяющее память, обновляющее светодиоды и т. Д.
JustJeff
1

Первые микропроцессоры были бы запрограммированы с помощью существующих компьютеров, которые не были основаны на микропроцессорах. До того, как первый ЦП был изготовлен на одном чипе, уже существовали передовые компьютерные архитектуры, которые были построены из дискретных компонентов, а не микропроцессоров. Взгляните, скажем, на IBM 360.

Kaz
источник