Зачем это и что здесь настоящее
Эта методичка — к набору лабораторных, в которых вы работаете с операционной системой 1986 года, запущенной на процессоре, описанном на Verilog. В браузере, без установки.
Прежде чем разбираться, стоит договориться, что именно настоящее, а что имитация. В ретрокомпьютерных проектах это обычно размыто, и зря.
Что настоящее
Процессор. Под страницей работает RISC5.v — синтезируемый Verilog
Никлауса Вирта, прогоняемый такт за тактом симулятором Verilator. Это не модель
процессора и не эмулятор: это тот самый код, который прошивается в ПЛИС. Когда
вы видите на экране мигающий курсор, его рисует настоящая логика,
просимулированная с точностью до такта.
Система. Project Oberon — операционная система, которую Вирт и Юрг Гуткнехт написали в 1986 году и переписали под собственный процессор в 2013-м. Вся она, вместе с компилятором, оконной средой и текстовым редактором, занимает около десяти тысяч строк.
Компилятор. Компилятор Оберона написан на Обероне и лежит на том же диске, что и всё остальное. В лабораторной №7 вы запустите его и он соберёт сам себя.
Что не настоящее
Периферия. Диск, клавиатура и мышь смоделированы на C++ и JavaScript. Настоящая плата общается с SD-картой по SPI и с клавиатурой по PS/2; здесь эти протоколы воспроизведены программно. Процессор об этом не знает — он видит те же регистры по тем же адресам.
Скорость. Симуляция даёт около четырёх мегагерц эквивалента — примерно вчетверо медленнее настоящей платы. Загрузка занимает пару секунд.
Почему этому можно верить
Утверждать «у нас настоящий процессор» легко. Проверить трудно. Поэтому всё, что вы увидите, проверено машинно, и проверки лежат в том же репозитории:
- Загрузка сверяется по контрольной сумме экрана. После двенадцати миллионов
инструкций кадровый буфер даёт
B5DFC933— одинаково в нативной сборке, в сборке с диском в памяти и в браузере. - Шаг в шаг с независимым эмулятором. Четырнадцать с половиной миллионов инструкций сравниваются с эмулятором Петера де Вахта по всем регистрам, флагам и содержимому памяти. Ни одного расхождения.
- Компилятор приходит в неподвижную точку. Собранный им же компилятор выдаёт те же размеры кода и те же ключи, бит в бит.
- Вся система пересобирает себя. Тридцать семь объектных файлов после пересборки совпадают с исходными побайтово.
Последний пункт стоит того, чтобы задержаться. Он означает, что перед вами не музейный экспонат, а замкнутая система: описание процессора порождает процессор, процессор выполняет систему, система содержит компилятор, компилятор порождает саму систему. Круг сходится, и это проверяется одной командой.
Как читать дальше
Главы независимы настолько, насколько это возможно, но порядок не случаен:
- Машина — что такое RISC5: регистры, команды, память.
- Язык — Оберон целиком, за одну главу. Он действительно помещается.
- Система — самая непривычная часть: здесь нет кнопок, весь интерфейс это текст, а команды запускаются средней кнопкой мыши.
- Модули — раздельная компиляция и символьные файлы.
- Компилятор — четыре модуля и путь от
a[i]до команд. - Самораскрутка — что доказывает неподвижная точка.
- Что мы измерили — числа и находки, которых нет в книгах.
Если хочется сразу потрогать — начинайте с лабораторной №1, она ничего не требует, кроме браузера.