— На самом деле, скорее всего, ты меня видела, но не думала, что это я. Или не смотрела вверх. Я летал над всем этим безобразием.
— Вот оно что! Наверное я правда не смотрела вверх. Куда мы едем?
— В Цехин. Наш план не изменился. Думаю ближе к нему можно будет найти другой караван. Да и мы так быстрее доберёмся. Ты подумала над моим предложением о поездке в Юрбэ?
— Да. Только надо решить как мне вернуться. Фургона нет.
— Чего проще? Возьми нож и нацарапай на седле своего лорга что-нибудь. Потом вернёшься к нему. Дать тебе пару телепортов?
— Нет. Только один. Если удастся у Инроргна получить телепорт, то я верну его тебе.
— Я не требую его возвращать. — сказал я.
— Я знаю. Ты ведёшь себя как демон, а должно быть наоборот…
— Тогда не будем медлить. Отправляйся прямо сейчас!
Немного повозившись, чтобы обеспечить себе возможность вернуться, Кора отправилась домой, а я привязал её лорга к седлу своего и поехал дальше.
Дорогой я занялся модификацией своих перфокарт. Нужно было сделать так, чтобы одна перфокарта могла использовать другую, как подпрограмму. У меня, увы, всё ещё не было полноценного компьютера.
Я сделал однобитный сумматор на одной перфокарте. Два цифровых входа, два цифровых выхода — результат и переполнение. Затем, сделал другую перфокарту, плетующую сто двадцать восемь таких сумматоров. Получился сумматор моего будущего ALU. После этого я сделал однобитную ячейку памяти и так же масштабировал её до регистра размером в сто двадцать восемь бит.
Поскольку, на начальном этапе я собираюсь делать процессор с минимальным набором команд, то экспериментальные сборки плетений я отлаживал не на ста двадцати восьми, а всего на четырёх битах.
Я решил, что все ядра моего будущего компьютера, как и Радио-86РК, будут тактироваться от многофазного генератора. Таким образом, никогда не будет ситуации, что в одну ячейку памяти придёт больше одного процессора и случится логическая гонка.
Тот кто посмотрит на мою архитектуру скажет: “это можно было бы сделать с одним ядром, работающем на большей частоте!”. И я соглашусь с ним. Да одно ядро, переключая свой контекст с задачи на задачу может делать то же самое. А мои ядра, по сути — это и есть аппаратная поддержка переключения контекста с задачи на задачу.
Поддержку прерываний я решил не делать и, таким образом, ядро моего CPU радикально упрощается.
Я сплёл четырёхбитный прототип шины данных, сделал регистр адреса и занялся мультиплексором, переключающим внутреннее содержимое ALU в зависимости от кода на входе. Это самая сложная и плохо масштабируемая часть.
У меня не было отладочных средств, но зато я мог остановить генератор тактовой частоты и рассматривать получившуюся систему в статике. Этакий аппаратный дебагер.
Первая команда, которую я сделал — это загрузка адресного регистра значением. Фактически это команда перехода. JUMP по абсолютному адресу. Когда, спустя неделю, у меня получился процессор умеющий переходить по адресу, то я как ребёнок баловался программами “перейти по адресу 2, перейти по адресу 0”. Такая минимальная версия моего процессора, помещалась на двадцати семи металлических пластинках-перфокартах. Заменив константы в шести из них, я могу сделать из четырёхбитного компьютера сто двадцати восьми битный.
На плетение четырёхбитного одноядерного прототипа, умеющего выполнять только одну команду, мой Радио-86РК тратит около тридцати секунд. Это вместе с шестнадцатью ячейками памяти. Полноценный прототип будет, видимо, собираться значительно дольше, но зато потом он начнёт строить сам себя и наступит сингулярность развития моего вычислительного потенциала.
После команды JUMP я пришёл всё-таки к необходимости делать систему прерываний, либо придумывать альтернативу. Если мой процессор дойдёт до неизвестного кода команды, то хотелось бы иметь возможность писать программы-эмуляторы. Так же без прерываний не обойтись, если я захочу программно останавливать код на том или ином CPU. Вместо того, чтобы делать систему прерываний, я решил упростить себе жизнь и добавил ещё один регистр, куда копируется регистр адреса и программа после этого просто переходит в фиксированное место. Сейчас там нет никакой программы, но в будущем, по мере расширения моего ассемблера, я смогу вписать там эмулятор новой функциональности. Причина прерывания просто отображается в некоторых битах регистра адреса. Ещё в регистре статуса я выделил место под константу с версией моего процессора, её можно использовать при создании эмуляторов.
Помимо регистра статуса, у каждого CPU есть управляющий регистр. Записывая различные биты в него, CPU можно сбросить, прервать и остановить.
Это всё, что я успел сделать, пока ехал в направлении к Цехину без Коры. Она почему-то задерживалась, и, подъехав к городу на расстояние видимости, я организовал лагерь из которого обследовал его конструктами.
Огромное количество полтергейстов, кружащих вокруг, сразу же бросилось в глаза. Их здесь было, вероятно, штук сто! Они летали около границы города, но не могли преодолеть антиэлементальную защиту.