Часть 1: Что это такое?
В этом посте:
- краткая история СМ-1800
- формат шестнадцатиричных и двоичных чисел:
0xce00,0b11110010 - устройство компьютера: процессор выполняет код из памяти
- первые 2048 байт – ПЗУ
Краткая история СМ-1800
ЭВМ серии СМ – разработанные в 1970-1980х годах советские компьютеры.

СМ 1803 – вариант СМ-1800 в тумбочном исполнении. © Совет Виртуального компьютерного музея, 1997 — 2022
Большинство из компьютеров этой серии были разработаны, чтобы быть совместимыми с западными разработками. В частности, СМ-1800, про который идет речь, использует процессор КР580ВМ80А, который является полностью совместимым с Intel 8080. Поэтому, для задач поиска информации в интернете, в этом компьютере используется процессор Intel 8080.
Устройство компьютера
Перейдем к более общему вопросу: как вообще работают такие компьютеры? В общем говоря, у них есть несколько важных частей: процессор, память, и устройства ввода-вывода. Последние мы пока не будем обсуждать.
Память компьютера – это набор ячеек, каждая из которых имеет свой уникальный адрес и может хранить одно значение. В контексте СМ-1800, существуют 65536 ячеек, каждая из которых может принимать одно из 256 значений. Поэтому такая память имеет 16-битный адрес и содержит 8-битные значения.
Примечание про форматы чисел
При обсуждении программ нам очень часто будет нужно говорить о адресах и значениях памяти. Числа вроде 65536 и 256 бывают довольно трудны для восприятия, поэтому с самого изобретения двоичных компьютеров использовались особые форматы записи чисел: двоичная, восьмеричная и шестнадцатеричная. Мне будет нужна только шестнадцатиричная, и возможно совсем немного – двоичная, поэтому здесь я приведу небольшое описание этих форматов.
Из-за того, что мы будем использовать разные системы счисления, нам нужно договориться о том, как именно мы будем их представлять. Здесь и далее:
- десятичные числа записываются без изменений:
9+1 = 10 - двоичные числа записываются с префиксом
0b:0b10 = 2,0b11 = 3,0b1010 = 10 - шестнадцатиричные числа записываются с префиксом
0x:0xf=15,0xf + 0x1 = 0x10 = 16
В некоторой литературе шестнадцатиричные числа вместо этого записываются с постфиксом h: Fh = 15, Fh + 1h = 10h = 16.
Такой стандарт записи тоже существует, но я привык к 0x, поэтому далее я буду использовать только 0x.
Исключение составляет запись в блоках кода, где шестнадцатиричные числа будут записываться всегда в две цифры, по одиночке или в группах из двух цифр. Например, следующая запись:
01 3490
CD 0049
C6 FF
76
будет соответствовать последовательности байтов 0x01, 0x34, 0x90, 0xcd, 0x00, 0x49, 0xc6, 0xff, 0x76.
Устройство компьютера: продолжение
Теперь, когда у нас есть способ представления чисел в шестнадцатиричной системе, мы можем сказать,
что в памяти есть ячейки с адресом от 0x0000 до 0xffff, и каждая из них содержит число от 0x00 до 0xff.
Значение этой ячейки имеет размер в один байт, или 8 бит. Это можно продемонстрировать, потому что 0xff = 0b11111111, то есть самое большое значение можно представить с помощью 8 бит.
Аналогично, 0xffff = 0b1111111111111111, то есть самое большое значение можно представить с помощью 16 бит.
Процессор связан с памятью. Он отправляет в микросхему памяти 16 бит, описывающие адрес, и команду – прочитать или записать в память. Если команда записи, то процессор также передает определенные 8 бит, а память сохраняет их в указанную ячейку. Если команда чтения, то память, наоборот, читает значение из указанной ячейки и передает его процессору.
В этой архитектуре компьютера нет разделения между данными и программой – программа, которую исполняет процессор, находится в той же самой памяти, как и данные, над которыми происходит работа. В других архитектурах компьютеров существует отдельная память для кода и для данных.
Как процессор выполняет инструкции
Программа состоит из инструкций. Каждая инструкция (на этом компьютере) описывается одним, двумя, или тремя байтами.
Внутри процессора есть счетчик программы, или program counter. Это – 16 бит памяти, которые являются адресом памяти.
Когда процессор работает, он выполняет цикл fetch-decode-execute. На шаге fetch процессор считывает из памяти по адресу в счетчике программы инструкцию.
На шаге decode процессор декодирует инструкцию – определяет действие, которое будет выполнено, и параметры выполнения. Здесь процессор может прочитать из памяти следующие байты – параметры к инструкцию.
На шаге execute процессор выполняет инструкцию. К этому моменту program counter уже указывает на инструкцию, которую процессор будет выполнять дальше, и после того как это выполнение завершится, процессор сделает fetch следующей инструкции.
Этот цикл начинается, когда процессор подключается к электричеству, и продолжается до его остановки –
либо отключением питания, либо при выполнении инструкции HLT.
Пространство памяти
Когда процессор запускается, его program counter имеет значение 0x0000.
Это значит, что он начнет выполнять код, находящийся в самом начале адресного пространства.
Какой код там расположен по умолчанию, зависит от того, что это за компьютер –
например, в настольных компьютерах это часто определенная программа в ПЗУ,
в то время как в игровых консолях это – код, настраивающий оборудование для определенной игры, который загружается из картриджа.
В эмуляторе СМ-1800 первые два килобайта – адреса от 0x0000 до 0x2000 – занимает образ ПЗУ, содержащий так называемую программу-монитор.
Она предоставляет пользователю возможность вручную вводить данные в память, читать их из памяти, и выполнять код по определенному адресу.
Как пользоваться этой программой, и как вообще работать с эмулятором, мы рассмотрим в следующей статье.
Если вам помогла эта статья, вы можете поддержать автора: