Внортонепоэфтрисампосмотри
В хорошем, крепком банке с конца восьмидесятых активно использовались несколько барабанных АЦПУ с интерфейсом ИРПР. А надо знать, что ИРПР — это штука хитрая и с привычным Centronix не особо совместимая. Поэтому к этому делу прилагался драйвер.
Изначально всё это было заточено под XT. К 93-му году экстишки себя совсем изжили и были переданы в филиалы райцентров, где после Robotron-1715, а кое-где и печатающих калькуляторов Elka-55 им сильно обрадовались. На смену заслуженным экстишкам пришли 286-е машины. Тут-то принтера и отвалились. Кооператив, который делал сопряжение интерфейсов, уже давно пукнул и испарился — разумеется, вместе с исходниками. Печатать сальдовки по сто метров надо. Оставшиеся экстишки отбирают в приказном порядке.
Давай разбираться, что не так. Тык-мык-тык-мык. Что первое в глаза бросается? Экстишка — 4,77 МГц, 286-ая — 12, а в турборежиме — 16. Перепаиваем кварц на экстишечный. Работает принтер. Значит, завязан на тактовую частоту и квитирование делает в зависимости от неё. Но кто ж позволит из работающей экстишки кварц попятить?
«Пишем драйвер», — говорит шеф. Пишем, чё! «За сутки управимся», — отвечаю я.
И тут выясняется, что спеков на ИРПР хоть чем жуй. А вот на ИРПР-М, он же Centronix, чё-то не видно нигде. Ну, пока всякие НИИ работали, можно было в их научных библиотеках покопаться. Или в какой ВЦ по старой дружбе заглянуть — спеки-то не секретные. Но на улице был 93 год, и почти всё уже загнулось и позакрывалось.
Хорошо, что драйвер был пару килобайт. Плохо, что в виде TSR-программки. Если что, Hiew и IDA появились заметно позже, а досовский debug дебагать TSR не очень умел. Даже хекс-режим «внортонепоэфтрисампосмотри», по-моему, ещё не появился. Поэтому сначала мы получили старую добрую распечатку хекс-дампа драйвера. Потом «дизассемблировали» карандашиком на бумажке. Нашли цикл задержки, который крутился в цикле управления квитированием, после чего рассчитали нужные значения для 12 МГц и попатчили драйвер. Найти под утро компилятор ассемблера тоже оказалось непростой задачей. Да и драйвер изначально не на ассемблере был писан. И мусорного кода было предостаточно.
Самое главное, что в цикле гонялось транспонирование каких-то мусорных матриц. Увеличение размеров матрицы и их количества позволило аналогично попатчить драйвер под 25, 33, 40 мегагерц. А вот, не приведи господи, считался бы там какой-нибудь факториал…
Потом появились 486 с кэшем, и всё накрылось тазом. Но к тому времени под рукой уже были и дебаггеры, и IDA, и компиляторы. И году в 96-м драйвер был-таки переписан.