Выбрать главу

— А как проверить этот метод?

— Экспериментально, как же ещё?

— Давай лучше к шине CPU вернёмся!

Коллапс

Уже начав писать программу саморепликации для Орион-128 я понял, что здесь нужен реестр свободных CPU. Иначе никак не понять: есть ли в доступе свободные CPU и какой CPU выбрать для того, чтобы его запустить в работу.

Помимо такого реестра, ещё пришлось реализовать ассемблерную команду, выполняющую атомарный запуск CPU в работу.

Устранив эти недоработки, завершить программу саморепликации оказалось очень просто: программа плетения одного ядра, каждый раз, как доделает свою работу, заглядывала в список свободных CPU и запускала на них себя же.

Этот алгоритм продолжается, пока количество CPU не станет равно 2 в степени 128. Причём тот CPU что уже начал плестись, считается готовым, чтобы программа гарантировано могла остановиться.

Загрузив счётчик CPU начальным значением близким к 2 в 128 степени, мы сделали множество тестовых прогонов и сплели таким образом шестьдесят четыре стартовых ядра. Все произведённые тесты убедили нас, что всё работает и готово к запуску.

– “Помолясь усердно богу он отправился в дорогу” — процитировал я фразочку из детского стихотворения.

— Начинаем? — спросила Эт.

— Осталось два маленьких штриха.

— Какие?

— Подпустить огоньку и водичкой разбавить. Это же твоя идея.

— О, я и забыла!

— Я добавлю искорку, а ты льдинку?

— Ага!

Завершив все подготовительные работы, мы перезапустили Орион-128 и шестьдесят четыре ядра начали плести новые шестьдесят четыре ядра.

Итоговая сложность каждого CPU получилась довольно высокой: на плетение одного ядра тратится около двух часов процессорного времени. Из за того, что сложность некоторых шин по мере их построения растёт нелинейно, то плетение новых слоёв будет происходить всё медленнее и медленнее. В конечном итоге, каждое ядро, по расчётам, будет изготавливаться около пяти часов, а на изготовление всех 128 слоёв Орион-128 уйдёт около двадцати дней.

Запустив репликацию в работу, мы прождали два часа и убедились, что седьмой слой ядер доплёлся и их стало сто двадцать восемь.

Я забрал одно ядро на нужды индикации и запустил на нём программку, показывающую сколько CPU уже сделано в виде этакого прогресс-бара, путешествующего от единицы до 128.

— А чем мы займёмся теперь? — спросила Эт.

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

— А куда он их будет выводить?

— В плетение связи. С его помощью я уже умею рисовать линии перед глазами. Нам нужны шрифты со всеми демонскими буквами, цифрами, а ещё с моим родным русским алфавитом. Заодно и алфавит древних нужно поддержать.

— Алфавит древних?

— Ага, я зря что ли рисунки их символов коллекционирую и переписываю все найденные тексты?

В общем, база символов будет первой базой данных нашего компьютера. По номеру символа из неё можно будет извлечь список, описывающих его линий.

— И как это делать?

— Смотри. — я взял лист бумаги. — Делим лист на клеточки, затем рисуем на нём букву. А потом описываем её считая, что компьютер умеет рисовать только прямые линии. Например: начало в клетке 20,30, толщина 4, прямая до клетки 25,45. И так далее. Такое надо прорисовать для каждого символа и сложить в память компьютера.

— Каждый символ вот так рисовать? Это же очень муторно и долго!

— У нас примерно двадцать дней впереди. Косм нам тоже поможет, он же хотел участвовать. На самом деле, хоть работа и однообразная, но нам надо нарисовать всего около пары сотен символов. Вот увидишь: уже к послезавтра мы всё доделаем. И, кстати, здесь можно загрузить конструкты: ты рисуешь, а он описывает нарисованное.

Как я и предполагал, на следующий день, когда Орион-128 добрался до двадцатого слоя CPU, мы уже сделали большую часть работы. У меня были описания для всех цифр и значительной части букв, включая буквы древних.

В кодах символов я решил выделить часть бит, чтобы можно было использовать их как биты признаков: например если вдруг захочется поставить ударение, то взяв символ с кодом 10, установив в единицу бит ударения, можно будет получить ударную букву. Да, таким образом, можно ставить ударения и над согласными, но пока что не до жиру: будем решать эти проблемы на более высоком уровне.

Главное, из за чего я взялся за эти биты, необходимость различать цифры и буквы. Выделив целых восемь бит под признак цифры и ещё шестнадцать бит под признак языка я получил возможность кодировать цифры на разных языках. Можно написать цифру 2, поставив ей во флагах признак “десятичная система” и язык “арабский”. Та же цифра 2, записанная в демонском написании будет иметь тот же код символа, но другие флаги. А изображение символа можно рисовать для любого сочетания флагов.