СКАЗ О ВОСЬМИ БИТАХ
http://entropia.fluda.net/pm/8bits.htm
ПРЕДУПРЕЖДЕНИЕ.
Эта история выдумана от начала и до конца. При любом совпадении с реальными лицами, событиями и продуктами следует немедленно вызвать санитаров.
0
Неделю назад менеджер Петрович подозвал меня к себе и сообщил, что нашу компанию поглотил софтверный гигант «64K», и, следовательно, будет «реорганизация» (читай: массовые увольнения). По слухам, порядки в «64K» были весьма и весьма строгие. Петрович намекнул: умных и тертых парней вроде меня должны оставить в покое, но для этого перед новым начальством надо отличиться. «Как раз подоспел потрясающий заказ, но немного не по твоему профилю. Думаю, Леха, ты справишься, гонорар хороший», – сказал он. Так я превратился из прикладного программиста в разработчика встроенных (embedded) решений.
Разработчик встроенных решений, как всем известно, пишет микрокод для процессоров в калькуляторах, холодильниках, телевизорах и тостерах, а также устройствах по производству серной кислоты, молока и полиэтиленовых пакетов.
1
Петрович сказал: «Все очень просто, правда я в этом не разбираюсь» и вкратце обрисовал техническое задание. Есть экспериментальная модель сенсорного экрана с терморезистивной матрицей и самопальный процессор. Плюс еще куча всяческих устройств (контроллеры, понижаторы, повышаторы, усредняторы, ужасаторы…) Эти компоненты надо срочно подружить. При этом в проц можно загнать до 16 Кб кода и данных, но лучше вполовину, так как уже при 10 К система начинает дико тормозить. «И чтоб через неделю работало!» – предупредил менеджер.
Чуть позже мне выдали экран, чип, полное ТЗ и «дополнительные ресурсы». Среди них были пять килограмм печатных мануалов и диск с материалами. В числе последних – доходчиво прокоментированные примеры кода и статьи «Оптимизация кода для восьмибитных процессоров», «Преимущества сортировки крестиком-ноликом», «Строки: использовать или нет?», «Пять истинных типов данных», «Особенности реализации БПФ (1) на ARM-базированных DSP», «Арифметика с плавающей точкой: краткий курс для новичков», «Техники однотактового побитового сдвига на 3 разряда», «Теория резонанса в стековой памяти» и т.п. Кроме того, я получил флэшку сомнительной жизнеспособности, на которой были: а) драйвер последовательного порта, б) софт для работы с процессором, в) текстовый редактор BRED2.
10
Работаю я дома. Потому что мысль. Если пытаться думать в офисе, мысль улетит и больше не вернется. А в уютной квартире, наоборот, созданы все условия. Товарищи по несчастью не мешают глупыми вопросами вроде «Какая функция в Win32 API помогает получить моментальный кайф?». Начальство не задает глупых же вопросов о сроках сдачи и не предлагает «сдвинуть вот эту штуковину на пять миллиметров относительно вон той хреновины». Правда, никакой комфорт не поможет, если проект изначально провальный…
Первым делом я решил ознакомиться с техпаспортом к экрану. Но нашел только маленькую наклейку на задней стороне панели:
Из написанного было понятно только, что экран работает от источника постоянного тока и сделан на мистическом «фабризаводе». Правда, штатный адаптер в комплекте все же нашелся, так что паять выпрямитель не пришлось. Но неприятный осадок остался.
Я пролистал первый мануал (всего-то 100 страниц), нашел раздел «Ввод/вывод», внимательно прочитал следующее: «для обработки сигнала может использоваться внешнее электронное устройство; при этом требуется преобразование данных из аналогового вида в цифровой».
Аналогово-цифровой преобразователь мне путем дипломатических уловок, уступок и обещаний удалось выпросить у друга на несколько дней. Преобразователь отлично подключился к экрану, а процессор – к преобразователю. Написание кода я оставил на следующие дни, а пока решил установить весь необходимый софт. Тут-то меня и поджидали «приятные» неожиданности.
11
Во-первых, драйвер последовательного порта не захотел ставиться под Windows XP. Разработчики, видите ли, не подписали его в лабораториях им. Б.Гейтса, и вообще, он предназначен для Windows 98. Достал диск с «девяносто восьмой». Выставил на ноутбуке загрузку с DVD. Система бодро перезагрузилась, дрогнула дисководом, вывела надпись «Press any key to boot from CD/DVD…». Нажал пробел. Дисковод заурчал, и на экране появилось красивое меню мультизагрузочного диска. Выбрал пункт «Установить Windows 98 Second Russian Edition». Ноут подумал пару минут, пошуршал дисками, помигал лампочками, показал непонятное сообщение: «ID 4F» (2). А еще через минуту экран выключился. Загрузился в XP, запустил PartitionMagic, создал аж два дополнительных FAT32-раздела. Попробовал опять начать установку «девяносто восьмой» – с тем же результатом. Решил: аппаратный конфликт. Просмотрел все до единой опции BIOS Setup – не помогло. Написал на форум iXBT – не помогло. Применил найденный в шкафу артефакт «бубен шамана особый» (1 шт.) по прямому назначению – не помогло. В итоге закончилось тем, что я достал старый проеденный молью системный блок, подключил клавиатуру и мышь. Комп, охая и кряхтя, врубился. «Non-System Disk or Disk Error. Insert System Disk…» Настроил загрузку с диска, запустил инсталляцию Windows 98. Началась. Но с какой скоростью! В общем, к концу дня я уже лицезрел надпись «Откиньтесь на спинку стула и займитесь самосозерцанием!»
Ценой бессонной ночи были установлены все привычные программы и утилиты. Решил поставить главный софт с флэшки. Вставил. Ничего. Вынул. Ничего. «Нужен драйвер!» – догадался Штир…, то есть я. К счастью, на этот случай есть волшебный CD с «Универсальным драйвером съемных дисков» (ufdsk.sys). Запустил «Мастер установки нового оборудования», в очередной раз понял, что это вовсе не мастер, а самый натуральный чайник! Да что там чайник! В прошлый раз все ставилось «на раз», а тут система выпадала с самыми разными сообщениями. Чего стоит, например, такое: «Из-за чрезмерного увеличения энтропии во Вселенной невозможно найти файл "ufdskst.inf", необходимый для установки устройства "Universal USB Flash Disk". Попробуйте еще раз. В случае неудачи обратитесь в "Русское лото".» Пару часов промучавшись с универсальным драйвером, я нашел-таки выход из положения: переписал софт с флэшки на CD-R. После завершения всех инсталляционных процедур система самовольно перезагрузилась, но софт заработал! Правда, его вид вызывал исключительно рвотные ассоциации. Представьте себе, что сумасшедший любитель скинов вдруг открыл для себя «кислотные» оттенки. И применил все свои знания к разукрашиванию и без того ужасных утилит «M-chip Code Writer» и «M-chip COM1 Debugger». Последняя соответствует своему названию: подключается только через порт COM1. Причем, отменить отладку можно только вырвав кабель «с мясом» из системного блока. Сей оригинальный метод предлагается в мануале! Там же приведен другой вариант отладки: установка эмулятора процессора и альтернативного драйвера последовательного порта. Альтернативный драйвер уже поставлен, а вот эмулятора я не нашел. «Ничего, сейчас загружу с сайта M-chip! – подумал я и тут же осекся. – У нас же локалку отрубили до второго числа следующего месяца! Теперь только по GPRS и выходить. Так и не скачаешь ничего, и без штанов мигом останешься!»
Короче, решил я писать код «вживую». Подключил все нужные устройства (спасибо пятикилограммовым мануалам, ничего не перепутал) и стал отлаживать программу по COM-порту. Параллельно пытаясь выучить примитивный ассемблер самопального процессора, явно придуманный изощренными садистами. Операции умножения нет, операции деления нет, зато все побитовые операции есть. И восемь способов занести данные в регистр. И регистров столько же, сколько способов. Ну, вы поняли…
100
На десятом часу пятого дня я, озверев, пытался загнать непомерно разросшуюся программу в узкие рамки аппаратных решений. То и дело отладчик выводил сообщения: «Strange Operation Pending. Please wait!», «Memory limit exceeded!», «Illegal instruction!» и (чаще всего) «Unknown Communication Error ???»
За эти пять дней я сильно оброс, похудел (еще бы, есть некогда!) и даже вроде поседел в нескольких местах. К счастью, еще не полысел, хотя все к этому идет. По крайней мере, по моим ощущениям.
Так вот, на десятом часу пятого дня в дверь позвонили. Пришел друг детства Дима. Спросил с порога: «Чем занимаешься?» Я указал на коробки из-под терморезистивного экрана и самопального процессора. Димка поинтересовался, сколько дней я уже мучаюсь. «Пять», – говорю. – «Тогда понятно. А я вот уже семь лет в этой области работаю. Помочь?»
Ну, кто же откажется!
101
…Шестой день. Шесть утра. Мы с Димой сидим на кухне, читаем распечатку кода. Пьем чай «РахметовЪ» с экстрактом натурального гвоздя для воспитания воли. И спорим. До хрипоты. Он говорит: «Тут лишних как минимум восемь бит!» А я ему: «Да ну?» А он: «Ну да!» Я: «Ладно, уговорил. Что сделать? Может сортировку методом крестика-нолика?» Тут друг разозлился: «Бред это все! Когда в коде лишние всего восемь бит, случаются события, которые потом преподносятся как универсальный мистический опыт! Со мной, вон, такое тоже бывало. Целых три раза!» «И что же делать?!» – испуганно спрашиваю я. «Как что, – объясняет Дмитрий, – жить. Вот вижу, надо удалить инструкцию 614. Как раз освободим один байт! Эх, истинных программистов осталось так мало. Но это, может быть, и к лучшему…»
На седьмой день, собрав себя в кулак, я довел код до рабочего состояния. Вечером позвонил Петрович и спросил, нагло так: «Ну как?» «Работает, – говорю, – Проект можно развивать. Но только без меня!»
_______________________________________________
(1) БПФ – Быстрое преобразование Фурье.
(2) «Frequently, crashes are followed with a message like "ID 02". "ID" is an abbreviation for "idiosyncrasy" and the number that follows indicates how many more months of testing the product should have had.» (Фольклор.)
_______________________________________________
/по мотивам истории одного байта/