Глава 7
Линда подвезла меня в этот раз до дома, иначе никак — я ведь нагрузился тем самым подходящим на роль монитора телевизором и пустым корпусом от еще одного, компактного, ставшего донором дисплея для космических вторженцев.
Пластиковый шпон с отделкой под дерево попросту идеально подойдет для того, чтобы стать корпусом моего нового ПК. Помещу компоненты через дыру от кинескопа и прикрою боковой стенкой от еще одного телекорпуса. И дисководы, поставляемые отдельно, туда же прикручу. Очень даже прикольный моддинг получится. И плату клавиатуры на такую же дощечку прифигачу. У Возняка в гараже и то хуже получалось, чем у меня выйдет!
Линда, когда я позвал ее заглянуть к нам посмотреть, как живем, очень сильно смутилась, и, кажется, немного испугалась. Подозреваю, что не меня, а потенциальной встречи с Еленой, так как, увидев, что дома моей «старшей сестры» нет, как-то расслабилась и даже на мою новую комнату взглянула.
Проводив девушку, взялся за священнодействие — сборку компа. В своей жизни я собрал… сбился со счета, сколько системников. Едва родственники узнавали, что я умею — начинали звать в гости, чтоб «занялся любимым делом», как настоящий тыж — «быстро, качественно, для вас всегда бесплатно». По молодости не каждый раз находил моральные силы отказать дальней родне, но постепенно все же зачерствел, подвыгорел и выучил слово «нет». Но десяток компов к тому моменту собрал.
Сегодня меня ждало развлечение того же рода — удачно уместить компоненты в ящике и протянуть к нему длинный шлейф клавиатуры, какую, в свою очередь, прикрутить к дощечке-основанию. Мне достался настоящий клад — версия с платой расширения памяти до 64Кб оперативки, вместо 48Кб в базовой комплектации. Включение вывел на кнопку питания бывшего телевизора при помощи пары проводов.
Ну! Можно попробовать! Щелчок клавишей. Плата издала громкий и длинный бип, компьютер загудел на одной ноте. И… и ничего. То есть комп работает, даже надрывается, монотонно завывая, но не загружается. Чему там так гудеть-то? Да что за дичь⁈ Верните мне простой и понятный «кусок дерьма трэш-80»!
Послушав гул секунд двадцать, сделал то, что сегодня, видимо, гормоны делать мешали — подумал головой. Кулеров в детище сумрачного яблочного гения нет. Откуда же вибрации? Единственная механика… дисковод! Привод для чтения дискет! Ну точно, один из двух еще и красным светодиодом моргает! Выключил компьютер, отрубил физически оба флопика от слотов расширения и… помогло.
На дисплее появилась надпись APPLE II и ниже квадратная скобочка, обозначающая курсор.
— О великие Император, Ктулху и Макаронный Монстр! — провозгласил я вслух. — В чем тут вообще логика — бесконечно крутить пустой флопик? Каждый раз его отключать неудобно!
Ответ, как оказалось, прозаичен: RTFM, то есть Read the fucking manual, прочитай долбаную инструкцию. Полистал книжки, найденные в коробке с компьютером, и в названной «руководством для DOS» узнал, что бесконечное вращение привода при пустом дисководе — не баг, а фича. Достаточно нажать клавишу «ресет» на клавиатуре и загрузка продолжится. Не приводился лишь ответ — «нафига». Я всегда знал, что яблочники — извращенцы. Какие еще нужны доказательства?
Нормальные люди, безусловно, сначала читают руководство пользователя, а затем уже тянут влажные ручонки к ценной технике. Ни одного такого не встречал. Однако за качество документации, вложенной в коробку с компом, Джобсу огромный респект. Мне досталась не книжка-отписка «держите подальше от детей и домашних животных», а очень обстоятельная инструкция, включающая описание распространенных проблем и даже подробное руководство по разработке на ассемблере под платформу. Не придется, как с Трэш-80, покупать книжку за свои кровные.
Что я всегда делал, заполучив новое железо — игрался. Увы, готовых игр под Эппл 2 мне не положили. Один из конвертов с дискетами, имеющихся в комплекте, маркирован, как Apple DOS 3.3, вторая дискета — пустая.
Расшифровку аббревиатуры DOS — дисковая операционная система — я в прошлом знал, но особенно о ней не задумывался, а знание реалий 82-го года меня подвело. Зачем к уже работающему компьютеру класть отдельный носитель с операционкой? Переустанавливать с него? Точно нет. Винчестер, то есть жесткий диск, хоть уже и придумали еще в 50-х, удовольствие дорогое и редкое.
А выходит так, что изначально ДОС — это не больше, чем драйвер для дисковода, вокруг которого постепенно накрутилось всякого до 30 гигов в системной папке на диске C в 2026. В нынешних реалиях, чтобы использовать дискету, я должен сначала загрузиться с другой дискеты, а затем вставить пустую во второй дисковод. Ну или устраивать безумную чехарду с жонглированием гибкими дисками. Реально гибкими, кстати, в совсем тонком пластиковом чехле. Одна ошибка — и ты ошибся. То есть повредил нежный магнитный слой и всё сломал. И даже такая фигня лучше, чем аудиокассеты для хранения кода!
Загрузился с дискеты.
APPLE II DOS VERSION 3.3 SYSTEM MASTER
AUGUST 25, 1980
COPYRIGHT APPLE COMPUTER, INC. 1980
]
Проверил свои навыки программирования хеллоу ворлдом. Всё еще достоин!
Ну, что, пацаны, змейка? Поленившись в очередной раз набирать код по памяти, подключил верный магнитофон, для чего пришлось влезть с кабелем внутрь корпуса-телевизора. Отыскал в мануале команду загрузки. Авторы предусмотрительно написали, что при работе с внешними носителями нужно в командной строке добавлять суффикс, указывающий адрес, куда он подключен, что особенно важно с записью. Забудешь указать, что пишешь в слот расширения номер шесть, и сохранишь змейку на системную дискету, записав поверх DOS. И всё, никакого тебе ctrl-z или вопроса «вы уверены, что желаете перезаписать?» Ищи новую операционку, если не подсуетился защитить дискету от перезаписи, заклеив специальное окошко наклейкой. Суровые нынче времена!
На всякий случай сверился с талмудом, подал команду на чтение с магнитной ленты и… ERR! Ошибка! Книги дали ответ и на эту проблему — Эппл 2 понимает только те кассеты, что записывались на яблочных компьютерах. Стив Возняк в своей сумрачной гениальности создал собственный алгоритм записи, естественно, проприетарный.
Ну ладно, всего триста строк кода. Воспроизвел по памяти и даже нигде не опечатался и… ERR! Не код, а песня…
2 в 16-ой способов отстрелить себе конечности
Отладка даёт представление о вечности
Разобрался! RTFM! У Трэш-80 и надкушенного яблока слишком разные диалекты бейсика. Бейсика, Карл! Там, где компьютер от Радиорубки позволяет взять и напечатать символ по координатам, одной командой PRINT, чудо-техника от Эппл требует сначала спозиционировать курсор двумя отдельными действиями. Я ненавижу тебя, Стив Джобс! Как-то вообще у меня отношения со Стивами не сложились. Тот, который Возняк, вроде как ничего мужик, много сделал для опенсурса и вообще гениальный инженер, на шее у которого проехался делец Джобс. Но… и он тоже ведь приложил руку к этому дерьму. Ох, Гектор, братан, знал бы ты, насколько прав, когда называл краденый комп не иначе, как миерда! Я тебя еще вытащу!
Полная страданий отладка… За окном уже начало темнеть и я наконец-то сделал это! На мусорном компе получалось проще. По экрану нешустро поползла змейка из буковок О, пожирающая символы звездочек. Видимо, сказывается то, что на процессоре будущие купертины также сэкономили и поставили камень всего в 1 МГц, в то время как у Z80 тактовая частота целых 1.7МГц — почти в два раза больше.
С улицы как раз послышался звук двигателя, затем бодрый лай Дюке и к нам в трейлер ввалился цыганский табор. Вернее, Елена и ёе подруги-парикмахерши.
— Тобалито! Отличные новости! Мы завтра идем за покупками в Зонко! — прокричала Елена. — Глория и Трейси съездят с нами.
— Зачем? — вышел я из комнаты.
— Потому что тебе нужно приодеться, Кристобаль, — добавила в голос суровости моя опекунша, — как офицер Кастильо сказал.
— Ох, этот Круз такой горячий, — мечтательно закатила глаза Трейси. Не пялиться в ее легкомысленное декольте — то еще испытание. И лишь милый образ Линды, воскрешенный в памяти, дал какой-то иммунитет. Хоть слюни пускать не начал.
— Он же не поэт и не музыкант, — фыркнула Глория, адекватная и в целом приятная тридцатилетняя тетка, очень чисто говорящая на английском, почти без испанских словечек. — Кристобаль, насчет покупок мы серьезно. Завтра у нас выходной и день скидок в Зонко. Идеальный момент. Заедем за тобой после школы.
— Свою китайскую подружку позови, мы посадим вас на заднем сидении и ты сможешь как следует к ней прижаться, — с ехидцей предложила Трейcи. — Хотя не представляю, что ты в ней нашел. Все китаянки страшные и кривоногие.
— Да с математикой она ему помогает, — озвучила версию старшая из женщин.
— Очень мудрое предположение, мэм, — похвалил я, — простите, мне пора идти учиться. Хорошо, я буду вас ждать у ворот школы.
А мне и правда нужно в свою комнату, но только не домашку делать, а продолжить освоение Эппла. И никакого смущения, честно-честно. Так-то завтра после уроков я собирался попытаться применить совет Феликса по поводу замера напряжения на выходе блока питания к Галаге и таки заработать еще сотню баксов у Ковальски, но приодеться тоже нужно. Я не модник, скорее даже наоборот, но встречают по одёжке, а мне еще на чиновника из службы опеки достойное впечатление производить.
Вернулся за компьютер, погонял змейку и перешел к тетрису. Стив и еще один Стив, да что же вы такое творите? Надо будет выкупить вашу фруктовую шарашкину контору в девяностых на волне вашего кризиса, до того как айпод, а затем айфон вас спасут!
Первая же проблема, с какой я столкнулся — в текстовой раскладке Эппла не нашлось символа-квадратика, в отличие от трэш-80. Ну и кто тут у нас мусор? Блоки из букв О же смотрелись убого. Кроме того, цветной видеовыход так и просил поиграться с раскраской фигур в их классические цвета, а далее уже и редактор кода с подсветкой символов нашаманить. Увы, в текстовом режиме чудо пока еще не купертинской мысли буквы раскрашивать не умеет. И они еще взяли на себя смелость поместить на свой логотип все цвета радуги!
Наплевав на ущербность текстового режима, перешел в графический. Разрабы Ультимы под него, вон, полноценную РПГ выпустили. Чем я хуже? Я уже большой мальчик и мне полагаются серьезные взрослые игрушки. Надо всего-то отрисовать разноцветные прямоугольники…
О Великий Ктулху! Как же я ошибался!
Начал с самого простого — нарисовал одну палку, разделенную на сегменты и залитую зеленым. Команды рисования — элементарные. Принялся двигать фигуру влево и зеленый стал фиолетовым. Снова зеленым, и опять фиолетовым. Примитивнейший код работал не так, как задумано и заставил меня орать в голос, чего я позволял себе в отношении компьютера нечасто.
— Да пендехо ты яблочный! — крикнул на несчастный комп, уже будучи далек от радости, что я его спас. — Это что за цветомузыка?
Ответ, как всегда, в процедуре RTFM!
Старший бит (бит 7) каждого байта видеопамяти является битом задержки фазы. Если он равен 0, пиксели отображаются в фазе с цветовой поднесущей NTSC, давая фиолетовый и зеленый цвета. Если он равен 1, фаза сдвигается на 90 градусов, давая синий и оранжевый.
До Штирлица не дошла шифровка из центра. Он перечитал еще раз — всё еще не дошла.
Я искренне считаю себя не полным дебилом. Да, иногда я веду себя, как клинический идиот, но то в сложных ситуациях, связанных с общением с людьми. Мы, хомосапиенсы — сложные. А вот компьютеры обычно простые и в них, я думал, хорошо разбираюсь и секретов не осталось. Но вот перечитал… вроде бы понятным английским языком написанную фразу и нифига не вдуплил. Что значит — всего четыре цвета? Почему именно эти? Как гениальные парни смогли написать ULTIMA с подобными ограничениями? Игра что, цветная, но зелено-фиолетовая? А как мне текст рендерить? И ладно четыре, мерцание-то зачем?
Вспомнился, опять нет лучшего слова, легендарный Принц Персии, изначально писавшийся как раз под Эппл 2. Фон — черный. Главный герой — по большей части белый, с редкими вкраплениями оранжевого. Огонь — только оранжевый. Окружение — бело-синее. То есть в парадигме имеющихся в графическом режиме цветов.
Но какой же Джобс пройдоха! Цветное яблочко на логотипе! Его следовало изобразить зелено-оранжево-фиолетово-синим! Переливающимся на свету при смене угла зрения из зеленого в фиолетовый, как голографическая наклейка на акцизной марке.
Но как разработчик Принца, а он трудился в одиночку, как и я, устранил мерцание? С производительностью-то известен ответ — ассемблер. Среди книжек есть и руководство по нему.
RTFM!
Полчаса лихорадочного листания страниц толстой красной книги и вырывания волос на ягодицах я нашел:
Цвет точки жестко привязан к ее координате X. Зеленый и оранжевый могут быть отображены только в нечетных столбцах. Фиолетовый и синий — в четных. Сдвиг точки на соседнюю колонку неизбежно приведет к смене фазы и, как следствие, изменению цвета.
Ха! А что если двигать сразу по два пикселя? Интерфейс получится визуально более отзывчивым? И я смогу задействовать все четыре цвета. А чтобы фигуры стыковались лучше — в белую рамочку их заключить!
Стало понятнее, но всё еще что-то не то. Обоих Стивов давно бы засудили за настолько неприкрытый обман с цветами. Эппл 2 ведь умудрился стать стандартом для бизнеса? Как насчет рисования всяких графиков?
RTFM!
Нашел! Бинго! Джекпот! После какой уже за сегодня пятиминутки ненависти в сторону яблочников я выяснил, что у моего компьютера два графических режима.
Тормознутый hi-res для графики высокого 280×192 разрешения и с упоротой зависимостью цвета от координаты X, да еще и сходящий с ума при попытках обращения через ассемблер — ячейки видеопамяти расположены не последовательно, их адреса прерываются и нельзя просто так взять и нарисовать длинную прямую линию, нужно составлять ее из отрезков.
Но есть и луч света в темном царстве жадности Стива Джобса — графический режим низкого 40×48 разрешения lo-res, в котором еще и несколько текстовых строк в нижней части экрана доступны. Как раз поместится текущий счет и анонс следующей фигуры в упрощенном символьном виде: I, J, L, O, S, T, Z.
Мне не понравился данный компромисс. Но альтернатива пока в том, чтобы курить недельку после уроков мануал по их странному ассемблеру, разбираясь с неочевидной адресацией ячеек памяти. И я это сделаю, надо знать свои инструменты, но потом, не сейчас.
На Принца Персии вроде бы четыре года ушло, и это при том, что разраб до того выпустил другую игру, файтинг про карате. Да ну нафиг! Я лучше сменю платформу на спектрум, Вик-20 или даже какую-нибудь Атари, изначально предполагающую игры. IBM совсем скоро начнет захватывать рынки, Коммодор 64 — очень массовый компьютер — выйдет… не помню, когда.
Я написал Тетрис за одну ночь и даже поспал парочку часов перед подъемом. Или меньше? Ни о чем не жалею! Только я, код и упрощенный графический режим. Смотрелась итоговая поделка так себе — цветные кубики 2×2 крупных пикселя сливались в сплошную массу. А при уничтожении линии сдвиг вниз прорисовывался с задержкой в половину секунды, но получилась та самая игра, тот самый геймплей, попавший в особенности физиологии мозга. Сел попробовать что получилось, и залип на полчаса, раз за разом получая дофаминовую награду, когда собирал полную линию.
Маленький шаг для одного программиста — огромный прыжок для всей игровой индустрии, которой я не хочу позволить скатиться в то не самое приятное состояние из 2026, какое запомнил.