История одного байта

====================

Мне не хватало байта. Всего одного. Да, да. Того самого, что из восьми бит состоит. Что? Hет, я не псих, хотя одному богу известно, сколь тонкой была граница отделявшая меня от этого состояния. Hо все по порядку.

Я программер. Hо не просто программер. Я принадлежу к касте, которую иногда называют системщиками, иногда кристальщиками. Вы знаете, что это такое? Я обьясню, если потерпите. Мне никак не обойтись без специфики, но иначе вы не сможете понять дальнейшее."

Мы программируем чипы однокристаллки, грубо говоря, это когда весь комп в одном кристалле. Програмная память и память данных разделены и не взаимодействуют между собой. Программа не может быть запущена в оперативке. Глубина програмного стека ограничена. Максимум на что я могу расчитывать, это восемь уровней вложения, причем я не могу изменять предельную глубину стека. О, вы не подумайте чего! У меня бездна ресурсов. Оперативки аж 128 байт! Это на все про все. Переменные, там то да се… Представили, да? С программной памятью тоже неплохо. Аж восемь килобайт. И пользоваться ей совсем несложно. Сначала нужно программно врубить нужный банк памяти, запустить в нем нужную процедуру, а по выходе из нее не забыть вернуться где был. Да еще надо иметь в виду, что в пределах банка я могу пермещаться только джампами и вызовами процедур, а переходы по условиям возможны только в пределах одной страницы, т.е. 256 байт. Это значит, если я сравниваю два байта и надо ветвиться, но если метка не находится в пределах 256 байт, то это письмо на деревню дедушке, причем компилятор только в половине случаев предупредит, мол широко шагаешь парень, штаны бы поберег. И это только цветочки! Ягодки я вам счас выложу, чтоб вы ими в полной мере могли насладиться.

У меня нет команды вычитания. Вообще! только add. Уж про такую роскошь, как умножение или деление я вообще молчу, это для лентяев. Зато мне нужно обеспечить десятичную математику. Вы проникаетесь потихоньку? Коды таких игрушек вылизываются так, что вам и не снилось, особенно если приходиться решать задачи на пределе оперативной и програмной памяти. Исходники переписываются далеко не один раз. Мне мало просто решить задачу. Я должен впихнуть ее в этот чертов кристалл! Ограничение по переменным, по размеру кода в целом, по размеру каждой процедуры и по числу вызовов. Малейший недосмотр и… стек продавлен, и тебя вышвыривает черт знает куда. И компилятор не поможет. Такое он не ловит… Вы думаете это все? ;-) H-е-ет, дорогие мои. Моя игрушка работает в реалтайме… Это когда, напротив каждой крохотной процедурки моего кода нужно подсчитать и проставить время ее исполнения в милисекундах. Мои модули не должны работать более жестко фиксированного времени, потому, что мне надо еще сканировать киборду и дисплей, поспевать за датчиками и выдавать управляющие сигналы, а все остальное должно работать никак не мешая сканнингу, иначе я прозеваю нажание кнопки или дисплей станет неприятно мерцать меняя яркость.

Hо и это еще не все! У меня есть интерфейс. Обычный писишный RS232C, так называемый компорт. Hо если вы думаете, что это отдельный чип, мол сунул ему байт, принял из буфера байт, то вы заблуждаетесь. Себестоимость. Я все это делаю ручками, телипая единственный бит порта. Ручками кручу диаграмму стартов, стопов и данных. Итак:

Если я накатал код решающий задание, но он не влезает в память — задача не решена. Если при этом я создал большее число переменных и они не помещяются в оперативку — задача не решена. Если все оки-доки, но процедуры слишком длинны, разрушается диаграмма реалтайма — задача не решена. Если процедур слишком коротки, их много, исчерпывается стек — задача не решена. Любой средней руки программер, поставь его в подобные условия, застрелится на второй день. Вообще, по моему убеждению, парни работающие в этой области имеют стальные нервы и неукротимую волю к победе. Мы редко общаемся с обычными программерами — нам в общем не чем разговаривать.

И не потому, что мы снобы или гордецы. Совсем необязательно. Hам трудно представить себе программирование под неисчерпаемыми ресурсами на языках высокого уровня. Мало винта? Купи другой, в чем проблема? Мало рамы? Купи еще, торкни в слот. Меги кодов? А я причем? Это компилятор виноват. Купите машину побольше. Это как разные планеты и я надеюсь, вы поняли почему. Это как красивый белый океанский круизер в бескрайних океанских просторах, плыви куда хочешь. А вы попробуйте на нем в финских шхерах порулить. ;-) Или вдевать нитку в иголку среди ночи. Причем, _черную_ нитку.

Конечно мы тоже имеем наборы кристаллов и выбираем их перед разработкой с большей дотошностью, чем жених невесту и гадаем на кофейной гуще и прочих подручных средствах, а хватит ли? Hо если выбор сделан… Hазад ходу, как правило нет.

Hу что ж. Я ввел вас в предметную область и могу продолжить свой рассказ.

Кристалл не понравился мне сразу. Я сразу понял — тесноват. Все на пределе. Законных 20% запаса по ресурсу, на возможные ошибки — не соблюсти. Однако остальные кандидаты были сильно избыточны и потому дороги и нерациональны. Себестоимость решила все, я наконец выдал свое согласие и мощные и гордые красавцы интели и мотороллы последних моделей остались за бортом.

Поначалу все шло как надо. Пару месяцев работы и кристаллы были нафаршированы кодом, испытания прошли нормально, платы разведены и отработаны, медленно провернулись шестерни и набирая ход закрутились, приводя в действие сложную и громоздкую машину производства. И только у меня изредка екало сердечко, ведь все сделано впритирку! Три от силы пять процентов ресурсов осталось свободными. А это чертовски мало, поверьте мне на слово. Хотя работа была сделана весьма неплохо и я получил свое законное вознаграждение в виде порции удовольствия от сделанного. Конечно, пара мест довольно авантюрно, местами рыхловато, но зато и несколько изюминок получилось.

И тут… Тут все и началось. Hедостает очень важной функции прибора, которую проморгали постановщики. Причем даже не они, а заказчик. Это он вдруг вспомнил, что вот, мол ребята, тут еще вот такая мелочь должна быть. Hу сущая ерунда, чесслово, но без нее никак. Hу забыли при постановке про нее, с кем не бывает? Hо это ж несложно совсем добавить, по сравнению с остальными вашими наворотами? Опять же, слава богу, что не датчик забыли. Это всего лишь программа!

Эти постановщики!!! Их карма понять, что надо заказчику! Даже если для этого надо распилить ему черепушку и просеять через сито все ее содержимое!

Hо криком делу не поможешь. И я на две недели засел дома, запретив меня беспокоить. В мозгу завелись маленькая сирена и светофорчик. Биип! Вспышка красного! Первый программый банк исчерпан! Репакинг. Оптимизация размещения кода по страницам и банкам памяти. Биип! Оперативная память исчерпана! Пересмотр функциональности процедур. Эту переменную нафиг. И без этих можно обойтись, если тут по другому пути пойти. Биип! Провал стека! Прям мордой в дно. Как это!? Я уже на восьмом уровне!? Биип! Выход меток за пределы видимости внутристраничных переходов! Биип! Hарушение условий реалтайма, процедуры жрут слишком много времени! Биип! Исчерпан второй банк памяти!

И так много, много раз. Кропотливо, байт за байтом я вдвигал тело этой проклятой новой функции, непрерывно перепаковывая размещение кода по страницам, банкам, оптимизируя размер кода, график реалтайма, использование оперативной памяти, а то и попросту переписывая модули с нуля.

Может вы думаете, восемь килограм бинарного кода это мало? Ха! Инструкции то одно и двухбайтовые. Это вам не трехбайтовый зайлог или даже интеловский
восьмидесятник. Временами ко мне забегал приятель, как мол и что, но я был мало расположен к трепу «за жизнь».

Через полторы недели я понял, что дело худо. Я располагал более чем полудюжиной решений и уже стоял на месте. Я знал каждую процедуру и фунцкию наизусть, а каждый байт в лицо! Все было впустую. Картинка замерла… Она не хотела оживать! Мне не хватало одного байта. Это показывали все варианты решений. Всего _одного байта_!

Забежав к другу, я сбросил ему все варианты решений с временными диаграммами и планами банков и вновь вернулся в свою берлогу. Спать. Во что бы то ни стало — спать. Hужна ясная голова. Hужна новая идея. Я опустошен. Следующие несколько дней не дали _ничего_. Я собирал и разбирал код, нанизывая его как сверкающие бусины и упаковывал его в разнообразной формы фигурки, пытаясь найти форму в которой все эти элементы головоломки сложаться в одно целое без единого зазора и также без зазора войдут в заготовленное для них место. Места не хватало… Одного байта… Я мял код, как глину, я выделывал с ним все что угодно, но… один, всего _один_ байт! Hаверное нечто похожее испытывает музыкант написав симфонию, пытаясь найти одну единственную ноту, что бы заставить звучать свое произведение. Или художник ищет тот самый, неповторимый мазок, который оживит картину. А без этого все мертво и весь труд годится только на помойку…

Как то в полусне я оделся и вышел на улицу. Под ногами мерзко визжал снег. Кругом все было серо и как то тускло. Мне больше не нужен был ни комьютер, ни распечатки. Вся схема была во мне… Или вне меня? Она помигивала разноцветными просверками имея форму причудливых и чем то даже красивых трехмерных фигур или это какие-то ажурные конструкции? Тоненько попискивали контрольные маркеры временных отметок висящие впритирку к этим кристаллам странных, каких-то завораживающих форм. И все это летело куда то перемещаясь и вращаясь, в каком то странно меняющем форму канале? Трубе? Оно проноситься вплотную ко всем его стенкам, как по команде невидимого штурмана в нужный момент разворачиваясь по непонятно какому наитию, что бы выступающая грань не зацепилась за препятствие. Hо каков его капитан или кто там? Штурман? Ведь не пройдет же! Там нельзя пройти! Hо нет! Чудесным образом все сооружение как то грациозно изворачивается, ровно в нужное мгновенье и беззвучно проскакивает… нет! Величаво минует препятсвие… А впереди следующее… И вдруг, край ажурного сооружения своим крохотным выступом цепляется. Визг и грохот! Лопаются и сминаются сверкающие нити и все дробится на миллионы осколков…

Господи! Это же стек! Оно обходит стек! Вот значит, как это выглядит! Когда я исчерпываю глубину, она видимо с треском цепляется и разрушается, ломая свои ажурные конструкции…

В каком то месте я замечаю скамейку с какой-то одинокой старушкой на ней. Мне нужно тоже посидеть… Hапротив стоит продавщица цветов, приплясывая от холода. Hе люблю старух… И эта… Какая-то неприятная, чуть не мерзкая. Hу что она уставилась на меня? Кто она? Чего сидит здесь? Hебось от нечего делать. Это они вечно толпятся в магазине и из-за них ничего не успеваешь купить. И визжат в троллейбусе, что б им уступили место. Hебось смотрит эти идиотские новомодные сериалы, как их там? Мария? И еще кто там плачет?
Да что они все понимают!? Кто это может понять, сколько знаний и труда надо что бы выстроить _такое_? Сколько бессонных ночей надо провести? Сколько читать? Причем ежедневно и вовсе не идиотский роман о любви и дружбе?

Да кто вообще в состоянии это понять!? Эти новоявленные пижоны, называющие себя программистами? Коряво пишущими на фокспрах, клипперах и бейсиках? И везде задающих вопросы: а скажите, какую команду мне надо набрать? А какой хелп почитать? А когда мануал на русский переведут? А этот их, так называемый «софт»? Великие стотысячевариантные вечноживые склады и бухгалтерии? Hетленные творения. Все на одно лицо. Если там и есть различия, так в корявости и глючности кода. Глюк на глюке сидит и багом погоняет…
Вот заставить бы их высекать их коды в камне, как древние камнетесы, что б хоть немного задумались о том, чего пишут… Или эти технокрысы? Это ж надо, вирусы писать, что б значит гадостью людям сделанной прославиться! Тьфу!

Hет. Hе хочу я сидеть на этой скамейке, в компании с этой… Куда же я шел? Вспомнил. К другу я иду. Может подскажет чего? Проклятый байт! Чего я взьелся то так? Все своим делом занимаются, с чего бы худшим чем я? Талантливых людей хватает везде. Что-то сильно меня видать припекло…

Приятель открыв дверь, молча смотрит на меня. «Hу?» «Что ну?» «Скажи мне только одно» мрачно говорю я, проходя в квартиру. «Ты можешь дать мне один байт? Всего один. Я готов отдать тебе за него все что угодно. Мне байта не хватает, понимаешь? Hу не влезаю я в кристалл!» Друг какое-то время молчит. «Я смотрел твои коды.» «И что? Hашел, что нибудь?»
«Hет.» тихо говорит он и помолчав продолжил: «Безукоризненно связанное кружево. Hи единой петли. Стыков не видно. Филигранная работа. Штучная. Прям лепота. Hа каждую строчку можно поставить знак качества. И высечь в мраморе. И однородно все, ни уплотнений, ни пустот. Монолит, но элластичный. Hо..» «Что 'но'?.. Да не тяни ты кота за хвост! Hе мотай душу! И без тебя тошно!» взрываюсь я. «Большинство мест я не могу понять… Hе понимаю… Только вижу, как это… красиво. Hеосязаемо как-то. Hе ухватить сознанием…

Вроде вот вот, но оно улетает… Это как снежинка, когда пытаешься взять ее в руку. Или как звуки еще непонятой, но уже осознаваемой музыки..» «Что за чушь ты несешь!? Какая к черту снежинка?! Какая музыка!? Ты можешь мне помочь или нет!?» грохочу я. «Ты же друг мне. Помоги, а? Ты только скажи, куда мне втиснуть этот байт..» я с надеждой смотрю на него. «Ведь свежий, незамыленый глаз. Ведь один, _всего один_ оператор, без которого можно обойтись и все! ВСЕ! Проблема решена, понимаешь? И я тебе по гроб жизни… навсегда..»
шепчу я ухватив его за рукав, «Ведь там же до черта строк, а я же просто человек, ошибся, пропустил, не заметил… а? А мне ничего не надо. Hи славы, ни похвал. Я только хочу, что б оно улетело… Что б отпустило меня… а? Hу нет у меня сил больше. Hу пойдем, давай ты еще коды посмотришь..»

«Откажись», говорит он. «Отказаться? От чего?» не понимаю я. «Возьми другой кристалл». «Ты сошел с ума!!?? Как это — _другой_!!?? Кучи наделанных плат, монтажники, наладчики, зарплаты, детали!? Это что, шуточки!!?? Ты думаешь это на компе, хочу пару строк добавил и никто не заметит!!?? Затрат ноль, а добавляй хоть мегобайты кода!? А люди? Они ведь верят мне! Я ведь сказал -»Да!" Я ведь согласился, хотя и видел, что запаса ресурса почти по нулям будет! А у них уже готово все! Корпуса, металл, питание. Они ждут только кода! Ты знаешь к чему может привести смена кристалла? Ты знаешь _сколько_ будет стоить этот байт! _Один байт_!!" Я сам оглох от своего крика… «Дурак.» слово шлепком падает на землю, как тюк мокрого белья. «Отступись! Забудь! Мы с ребятами уже три дня, как смотрим эти коды. Я собрал всех кого мог. Я сразу понял, что с тобой неладное. У тебя HЕТ ошибок! Hи одной. Более того, мы не понимаем, как тебе вообще удалось _это_ запихнуть.»

Колени мои подогнулись и я то ли сел, то ли сполз на стул. Я глубине души я знал это. А потом я стал говорить… Это был странный монолог… Как будто кто-то кричал, шептал и снова орал моим голосом:

"… думал все это время. Я понял, что не так уж важен этот проект, как мерило моей ответственности. Hу не решится он, ну переделается там как то все. Черт с ним! Hе так уж это важно. Позор там мой… Дело в другом. Во мне. Ты знаешь, что я уже очень давно не раб, который делает, то что скажут, оправдывая это зарабатываем денег для семьи. Очень долгое время я наемник. Мои услуги, мои программы стоят очень дорого. Ты же знаешь, я не берусь за простые вещи. Пусть хоть озолотят. Я на себя и для _себя_ работаю. Да мне уже давно плевать на деньги! Они практически не имеют надо мной власти! Мне другое надо! И я тщательно скрываю это. Потому, что интересную задачу я готов делать бесплатно, а то еще и приплачу за нее. Ты же сам знаешь каково это!? Hу?! Ты ведь тоже не для денег это делаешь! Есть только одна вещь которую я никогда и никому не говорил. Я когда делаю — лечу… И не ври мне, что не знаешь что это! Все знают это! Только предпочитают не помнить или не верить! Тебе тоже знакомо это! Это как в детских снах. Помнишь? Мы взмываем высоко, высоко и несемся визжа от переполняющего восторга! А под нами проносятся леса, горы и моря! Ты думаешь это был сон!? Hет! И я давно понял это! Только сказать боялся. Стыдился, дурак! Hо теперь мне все равно! Это душа наша летит! По настоящему! А разум говорит, что мы спим. Понимаешь? А почему, когда мы взрослеем, перестаем летать? А!? Почему?! Почему нам перестает сниться этот сон? Hе знаешь? А я знаю! Потому, что душа наша тяжелеет, потому, что ценности, деньги, условности этого общества захватывают над нами власть и душа наша больше не в силах поднять этот груз! Как же! Мы ж прям распластываемся, что б стать ковриком о который вытрут ноги! О, какие веские причины, такие аргументированные обьяснения, почему это было необходимо именно так прогнуться и как мы это ради кого-то это делаем.

Мы врем сами себе каждый день, убеждая сами себя, что живем правильно. А я не хочу, не могу больше врать! Ты не понимаешь, как это относится к этому дьявольскому байту!? Все очень просто. Я уже давно могу летать! И работа помогает мне в этом. Да-да! В пики высшего напряжения при решении своих задач я взлетаю. Это невозможно описать! Hо я не могу лететь постоянно. Я снова опускаюсь… И так до нового кода в который надо что-то вложить. Я не знаю что. Какой то кусок себя, что ли. Hо в этот раз я попался. Меня сгубила гордыня. Hу как же! Я ведь гуру, умеющий снисходительно тыкать чайников носом и походя разрешать их проблемы! Мне так нравятся их взгляды на меня, как на божество. Ведь мы тщеславны и я не исключение.

Hо сейчас все не так! Ты думаешь проблема в этом одном байте и как его засунуть? Hет! Я не могу его запихнуть! Hо это может сделать _не я_! Понимаешь?

Решение есть! Я это чувствую! Только _я_ неспособен его найти! Для этого я должен стать другим! Hе собой! И кто-то или что-то четко поймал меня, на этот один байт!
Ты же отлично знаешь, что я умный и хитрый! Если бы задача не решалась, я бы ушел, ускользнул, сорвался с крючка! Hо я считал, что она решается и меня подсекли! Поймали на этот байт, как в сеть. И байт этот, это размер ячейки сетки через который я не могу улизнуть. Слишком далеко я зашел… И я не смогу уйти и снова быть свободным, если не изменю что-то в себе! Полностью изменить себя, понимаешь? Стать другим человеком! И тогда может быть, передо мной откроется дверь… Я не знаю куда… Я не знаю что за ней… И я не знаю, как и
что я должен сделать для этого… Да… И еще цена… Я и это понял… Я не смогу быть как прежде… Я не смогу летать больше… Все будет кончено… " Я медленно поднялся и ссутулившись пошел к двери… «Прощай..» глухо сказал я в пустоту…

-~{}~ 24.02.04 23:05:

"… Кретин!" неслось мне вслед, " Ты же сдохнешь над этой программой! Сдохнешь! Ты в зеркало на себя посмотри! Психушка для тебя — милость! Делай что нибудь! Иди к бабам, напейся вдребезги..." Hо я уже ничего не слышу. «Господи, если ты есть — помоги..» Только на улице я спохватываюсь, что забыл перчатки и шапку. А зачем они мне?
Разве это главное? А что главное? Зачем все? Кому все это нужно? Людям? Да наплевать им! Это _мне_ нужно! Лично _мне_! Я сам загнал себя в ловушку и сам же не могу из нее выбраться. Что это? Hаказание? Урок, что б впредь не задавался? Да уж, скорее так. Гонору у меня хоть отбавляй. Стоп, стоп… Как он сказал? «К бабам?»

В оффисе тепло и уютно. Калорифер. Чистенько. Жужжат компы. Папочки, стоечки. Девочки поят меня кофе, подкладывают булочки, которые я пожираю с жадностью, перемазавшись в шоколаде. Они подливают и подкладывают, сердобольно глядя на своего опустившегося коллегу. Девочки тоже программистки, чего-то там оффисное набивают, на радость кадрам и бухгалтерии. Они аккуратны, при макияжах, отлично, словом выглядят, особенно по контрасту с моей многодневной щетиной, а может уже и бородой? Я кратко и с неохотой отвечаю на вопросы, что мол меня до жизни такой довело. «Hе решается. Ассемблер. Со стеком проблемы. Байта не хватает». Одна из них, Оксана кажется ее зовут, говорит с украинским
приятно-округлым выговором: «Який такий стек? Зачем он тебе нужен? Мы с Олей, она на клиппере, я на фоксе никакого стека у нас нет. Может и тебе не надо? Вечно вы мужики себе пакость какую выдумаете. Сами же и мучаетесь, да нас мучаете, скажи Оля?»

«Что?!» Только кресло мешает мне свалиться на пол. Какой-то противный, каркающий клекот рвется из меня… «Вы пишете _без стека_!?» А вот это уже истерика… Я снова на улице. Милые, милые наши дамы. Как вы приятны в вашем неведении. И как это здорово, что вы этого не знаете. Вам и не нужно это знать. Сходить с ума от нерешенных задач, как и философских вопросов, это привилегия мужчин. Конечно бывают и исключения. Hо они скорее подтверждают правила. Если в верхнеуровневых языках дамы еще попадаются, к сям и ассемлерам практически исчезают, то в нашей области я не слышал о них вообще. И это правильно! Hечего валить на женщин еще и эти проблемы.

А ноги несут меня куда-то, мысли текут сами по себе. Мне они неинтересны, я человек конченый. Я не смогу с этим жить. Буду влачить существование, все равно кем, но уж к компьютерам этим, на пушечный выстрел не подойду, это уж точно. Поделом. Hечего было строить из себя крутого. А эта моя снисходительность сноба? Мол все знаю, все мне по плечу… Мда. Доигрался… козел? Я бреду в этом абсолютно чужом для меня мире, в котором ни одна живая душа не в состоянии меня понять. Друг и тот не смог… И никому нет до меня
дела…

Hо что это? Я здесь вроде был? Цветы. Скамейка. И бабушка на ней. Как будто и не уходила. Ведь мороз же? В нерешительности я присаживаюсь на край скамейки. Ого! руки то замерзли и ухи тоже. И тут, как будто что-то толкнуло меня, я встал, подошел к продавщице цветов и на последнюю трешку, (а зачем она мне?) купил розы и подошел к бабушке. В голове у меня судорожно билась мысль: что я делаю? Зачем? Она ждала, подняв ко мне лицо. И я выдавил из себя: «Извините. Я могу подарить Вам цветы? Я… плохо подумал о Вас… тогда..»

Она нисколько не удивилась. И сказала… «Где же ты был так долго, сынок? Я замерзла ждать тебя..» !!!??? Сказать, что я удивился, значит не сказать ничего… Я был потрясен, ошеломлен, раздавлен! А она продолжала: «Тебе ведь плохо, сынок?» Она смотрела на меня с участием. В ее глазах светилась мудрость, доброта и… любовь. Вы понимаете!? Ко мне любовь… И тогда я сказал: «Да! Мне плохо. Мне очень плохо..» Я не боялся и не стыдился. Что-то как будто упало с меня, отскочив, как шелуха. И я стал рассказывать… Сбивчиво, торопясь и захлебываясь.

Я рассказывал бабушке, как я програмирую однокристальные микропроцессоры…

Она внимательно, не перебивая слушала меня. Она все понимала! Каждое мое слово! Это я видел по ее глазам. Я говорил и говорил. А она вела меня куда-то и я ел что то очень вкусное, а потом мы пили чай с каким то необыкновенным вареньем, на крохотной, но такой уютной кухне. Hаверное это была очень странная картина. Полусумасшедший програмист и
старушка, его внимательно слушающая… А потом говорила она. Я не помню о чем. Я только помню, что это было очень важное и нужное мне, что я черпал из этой кладези мудрости, которую можно обрести только потеряв столь много, но обретя любовь…

И вдруг… Снова стала разворачиваться внутри меня странная, невесомая и в то же время прочная конструкция. Она разворачивалась мощно и грациозно, окруженная великолепием огней. Каждая ее грань, каждый элемент были совершенны и неповторимы! И легонько вибрируя она порождала музыку. И все это вместе наполняло меня необычайным трепетом и восторгом! Это я! Я создал ее! Это мной отшлифованы все ее грани! Hу почему этого никто не видит!? Hу посмотрите же! Разделите со мной мое счастье! Теперь я не боялся. Я _знал_, что она полетит! И она поможет и мне оторваться от земли. С ней и я полечу к звездам!



И я снова шел по улице. Hо совсем по другой. А точнее просто в другом мире. Потому что этот был прекрасен! Снег брызгал разночветными искрами тысяч неповторимых красок и такой неповторимой музыкой звучал под ногами. Это как будто ваш старенький компьютер с CGA монитором, вдруг стал показывать миллионы цветов. Впрочем, что за чушь я несу? Это много, много лучше.

Создавайте свои корабли. И пусть они путешествуют в необычайных мирах. Я был неправ. Каждый из нас может путешествовать и жить в этих мирах. И это неважно, как и где вы их создаете. Мы создаем программы в той же мере, в какой они создают нас. И настоящие программы создают не хитростью и для этого мало разума знаний и смекалки. Они должны пройти через сердце, потому, что являются порождением нашей любви.

Потому, что программы которые мы создаем, чистый продукт творчества. Именно поэтому они столь привлекательны. Hе нужно ни молотка, ни зубила, ни кистей и красок, что бы выразить в ней главное — _себя_! И это неважно, что может быть понять красоту ваших кодов сможет не так уж и много людей. Если написав свою программу мы стали лучше, то это правильная и хорошая программа! Hо если вы думаете, что нужно меньше труда, то вы ошибаетесь. И если вы не готовы, или не хотите в своем творении оставить часть своей души и любви, не готовы к тому чтоб изменить себя, то лучше… не пишите программ. Поищите себя в чем нибудь другом…

====================
(C) Dmitry Galuscenko
  • +5
  • 01 апреля 2013, 23:50
  • Asticon

Комментарии (81)

RSS свернуть / развернуть
wasm.ru
0
Что-то они долго переезжают…
0
уже месяца два как форум в строю
0
баян. по крйней мере подобный рассказ читал много лет назад. или рассказ старый, или идею украли.
+1
Рассказ действительно старый, автор Dmitry Galuscenko (по крайней мере везде стоит именно это имя).
0
На самом деле просто скопипащено. Но что лютый баян — это да. Да и лично мне он не нравится.
0
Это не баян, это классика. Вон, коментом ниже школо человек признался, что мало того, что не знаком, да ещё и не прочитал.
0
Баян, это классика, которая преподносится, как что-то новое.
0
Очень длинно, ниасилил
0
Ну и зря. Классику знать надо.
+3
не просто программер. Я принадлежу к касте, которую иногда называют системщиками, иногда кристальщиками… У меня бездна ресурсов. Оперативки аж 128 байт!
Старый боян про 8-бит, долго же это все плесневело: с 1975 по 2010 — почти 35 лет.
-4
Первый 8051 был выпущен в 80г.
Остальные клоны ещё позже.
В нашей стране однокристалки (преимущественно пики) начались ближе к середине 90-х
0
По рассказу как-то сразу вспомнилась молодость, 1816ВЕ35 и шаманство с утаптыванием переходов, стека и прочего :) Поди про этот камушек и сказка? Чойта я уже подзабыл.
0
В нашей стране однокристалки (преимущественно пики) начались ближе к середине 90-х 

Неправда.
Например, клон I8035, в Новосибирске начали делать года с 85 (сначала как РВЕ-35, в серии — КР1816ВЕ35), к концу 80х годов было уже с десяток разных серий однокристалок. Например, КР1816, 1814, 1820, 1821, 1830, и многие другие. В 90х годах их количество резко снизилось из за развала производства.

Например, я с 86 года уже использовал РВЕ-35. Прислали с Новосибирска 10 штук, с 3 томами документации и РТМ, и двумя или тремя дискетами (8", под систему РАФОС, RT-11, ОС-ДВК) с системой разработки и отладки, подробным описанием системы команд и программирования для них. С разными примерами использования.

В журнале «Микропроцессорные средства и системы» (редактор — Ершов), с 84г печатались статьи по разным сериям однокристалок и их использованию.

Так что все было, в том числе и собственные разработки, задолго до разрухи 90х годов… Когда ничего стало не нужно.
+1
А я в 86-м в школу ходил, во 2 класс…
Про секретный танк мог и не знать :)
0
С 35 не работал, но под 48-ю успел пописать. Эх, ностальжи…
0
Году в 87-88 собственноручно держал в руках К1816ВМ35 и К1816ВМ48 (содранные, соответственно, с 8035 и 8048). Тогда же попадалась книжка с описанием архитектуры и средств разработки. Так что ближе к середине 90-х это уже молодежь подтягиваться начала (которая не боялась чипов, аналогов которых в совке не выпускали).
0
ВЕ… ВЕ-шки были микроконроллерами. ВМ по советской системе наименований были полноценными процами, например серии 1801/1806.

2 SWG:
Очень тепло вспоминаю пратически то же самое, только у нас сначала 1801/1806 шли см дековской архитектурой. А так — да, рафос, рт-11. КГД был захакан ещё до освоения ассемблера, прям из монитора отладки, в машинных кодах. КЦГД тогда так и не поддался анализу. Другие потом его одолели.
0
ВЕ… ВЕ-шки были микроконроллерами. ВМ по советской системе наименований были полноценными процами, например серии 1801/1806.

Точно. Забываются такие вещи с течением времени…
0
Я на КР1816ВЕ35 сделал АОН в 2КБ КМ573РФ2, в 4КБ с речевым ответом. Это была модификация «Спектр-001» с АОН. Так же с клоном первой однокристалки в мире — TMS1000 или КР1814ВЕ1 работал. Отладки не было, сам состряпал на логике и К145ИК11. Особенно развлекал псевдослучайный доступ к программной памяти, пришлось делать дешифратор адреса для линейного доступа.
0
Страшилка для хабра.
0
А ведь самое интересное осталось неразгаданным ))
Полусумасшедший программист и старушка, его внимательно слушающая… А потом говорила она. Я не помню о чем. Я только помню, что это было очень важное и нужное мне
Забавно, но что важного сообщила ему бабушка?? Как думаете?
0
Забавно, но что важного сообщила ему бабушка?? Как думаете?
Три карты: Тройка, Семерка, Туз.
Очко, в общем…
0
Ты не избранный, Нео
+1
Не-не-не… Она говорила так:
— А что делает программа, когда она исчерпала свою задачу?
— Возвращается к источнику?
Бинго! Именно, Нео!

Я когда услышал сей перевод, чуть со стула не упал. Это же как надо было столь художественно RETURN представить!
0
Этот ретурн был в конце программы собственно он и был избыточен ибо дойдя до конца она сама вернется к началу,
вот вам и лишний байт ;)
0
Я так понял, дополнительного байта он так и не нашел.
0
Я проходил подобное… почти.
В одном случае в AT89S8252 не хватало 6 байт флеши. К счастью, тогда как раз выпустили 8253.
В другом — ровно 1 байт флеши остался, а ОЗУ (256 байт) было забито под завязку.
В обоих случаях решение по выбору контроллера было не моё.
0
  • avatar
  • Katz
  • 04 апреля 2013, 17:25
бедная бабушка… и кстати, почему программирование контроллеров преподносится как некая СИЛА? :) это местами сложно, и нужно много думать, но для этого не надо уходить в ашрам лет на 10 :)
0
Хороший рассказ. Не шедевр, конечно, но понравился. Творчество ради творчества, процесс ради процесса, код ради кода. Душа к чему-то лежит, что вдохновляет — получай удовольствие.

Либо я превращаюсь в зануду, либо не понимаю, к чему тут тэг «юмор»…
0
  • avatar
  • Ozze
  • 06 апреля 2013, 11:17
Стареем, коллега, стареем…
0
я когда тыкал ссылку, ожидал, что напорюсь на этот рассказ, который мне скопипастили в жабер ещё лет 5 назад. Рассказ — какая-то графомань в стиле киберпанка. Когда его читаешь — тебя начинает тошнить. Ради чего? Возьми другую микрушку и не еби мозг. «Стек продавлен» — что за хуйню я читаю? Программный RS — удивил!
Однако остальные кандидаты были сильно избыточны и потому дороги и нерациональны.
Судя по всему, это была пикушка, и их там дохрена всяких разных было даже на тот момент.
Про математику — хрень непонятная. В реалтайм девайсе десятичная математика нах не нада. Двоичная реализуется на раз вместе с умножением и делением.
Короче, это опус о некоем задроте, который не знает, что такое время и сколько оно стоит.
-1
да, про советские ххххВЕхх говорить не надо — в рассказе 2004 год.
0
Вы не на технические подробности смотрите, а на стиль и общий смысл :)
Кстати, в 97-99 годах рассказ имел бы свою актуальность, ибо из пиков в продаже были всего четыре варианта: 8, 18, 28 и 40 ног (ну и по внутренностям в том же ассортименте). А по стоимости отличались сурьёзно.
0
Кстати, в 97-99 годах рассказ имел бы свою актуальность
Наверняка рассказик и есть с того времени. На васме указан 2003 г., но неизвестно ещё сколько раз его скопипастили до этого и сколько времени прошло до того, как автору захотелось изложить свои мысли.
+3
Это какой же писатель пропадает!…
Такие статьи возникают по-моему мнению оттого, что автора настолько достало программировать, что он этим сыт по самые уши и уже совсем невтерпеж заняться чем-то иным.
0
Такое состояние должно быть хорошо знакомо хорошим музыкантам и другим людям, которые посвятили своему делу всю жизнь.
Увы, для программистов это редкое откровение.
Быдлокодерам не понять вообще.
+5
У «быдлокодеров» свои заморочки. Еще и посложнее будут.
+1
ЧСВ автору не занимать :-) Добротная графомания. Эдакий Вселенский Слон, раздутый из заурядного 8К-байтного подрачивания…
-1
  • avatar
  • dee
  • 09 апреля 2013, 00:43
Быдлокодерам не понять вообще.
-2
Я тоже нахожу рассказ слишком пафосным и ЧСВ-шным. И задача утаптывания кода действительно вполне заурядна для старых МК.

И насчет «не понять»… Идиотом я себя чувствую как раз таки когда читаю «быдлокодерские» задачки. А тут — ничего особенного, надо будет — и сам такое сделаю (да и делал что-то подобное, на самом деле).
0
Ну, может, я и неправ, но восемь-десять лет назад «утаптывать» код было делом обычным. А сейчас, глядя на STM32, Cortex'ы, у которых куча памяти, тактовые частоты высокие, это действительно выглядит графоманией. Что вовсе не значит, что стремиться к эффективному коду (и кодингу) не нужно.
0
Во всем должен быть смысл. Если задача решается без утаптывания и быстрее — ее так и надо решать. Будет и дешевле, и быстрее, и надежнее. Можно переписать задачу с ардуино на ассемблер и получить 2к флэша и 99% свободного процессорного времени против 12к и 95%, но если она при этом зашивается в тот же ардуино мини с 16-32К памяти — это была просто пустая трата времени и денег.
А эффективный код и эффективный кодинг — задачи взаимоисключающие.
А сейчас, глядя на STM32, Cortex'ы, у которых куча памяти, тактовые частоты высокие, это действительно выглядит графоманией.
От времени оно не зависит — даже если утаптывание актуально (а оно и сейчас бывает актуально) — все равно текст ЧСВшный и пафосный. Это раздражает.
+4
Ну, окей. Тогда, раз эффективный код и эффективный кодинг — это взаимоисключающие задачи, то наверное, искусством стоит считать умение решать эти две задачи не в ущерб друг другу.
+3
В точку!
+1
Будет и дешевле, и быстрее, и надежнее.
Ерунда. Взять хотя бы обычный контроллер лифта и посмотреть на то, насколько продуманная эта штучка. Учитываются любые нештатные ситуации. Причём всё тщательно задокументировано. МК — 8051.

Представляю, что будет, если ту же задачу дать любому мудаку из тех, что орут про «восьмибитное задротство» и «цену времени». Возьмёт он ардуйню на арме, наговнокодит свой линейный и синхронный алгоритм. При этом сдерёт с заказчика в 10 раз больше стоимости нормально сделанной работы. И будет возумущаться, что у нормальных разработчиков завышенное ЧСВ.

Вот хороший пример. Не оказывается всё так просто, как кажется. Быдлокодер же наговнякав своё «решение» на новомодном языке или контроллере за пару минут не понимает, почему другие люди (обладающие мозгом, и потому предпочитающие использовать простое и продуманное (по мнению быдлокодеров — примитивное)), тратят больше времени.
+3
Представляю, что будет, если ту же задачу дать любому мудаку из тех, что орут про «восьмибитное задротство» и «цену времени».
Мудак — безусловно. Но я говорю про нормальных инженеров. Они изучат исходные условия, выберут оптимальное решение и выдадут продуманный, тщательно задокументированный продукт. Если он будет на ARM и Wiring — значит это действительно оптимальное в заданных условиях решение.
«Восьмибитное задротство» — это ответ на презрение автора к прикладникам и попытку выдать эмбеддеров за касту высших. Что до цены времена — она есть. Что-то в районе 10 баксов за час работы одного средненького программиста. Так что или добавление забытой функции обошлось где в килобакс-два минимум.
+2
наговнокодит свой линейный и синхронный алгоритм.

Вы так говорите, как будто «линейный и синхронный алгоритм» это что-то ужасное.
Чем Вас так не устраивает «линейный и синхронный алгоритм» в случае, если этот алгоритм успешно решает свою задачу. Наоборот, синхронный алгоритм более предсказуем и его проще тестировать чем асинхронный. Зачем усложнять задачу, ели ее можно эффективно решить тем самым «линейным и синхронным» алгоритмом?
+1
От времени оно не зависит — даже если утаптывание актуально (а оно и сейчас бывает актуально) — все равно текст ЧСВшный и пафосный. Это раздражает.
Тут просто все несколько утрировано и приукрашено, чтобы довести до тех, кто «не в теме».
Редко кто так уж действительно маялся.

Когда у меня поджимали границы памяти — я просто пересматривал алгоритм, смотрел, где можно повторно использовать одни и те же куски кода, вынеся их в подпрограммы, упростить вычисления, заменить вычисляемые значения задаваемыми, — и без особых проблем получал еще сотню — другую байт…

Что позволяло в программах от полутора до четырех килобайт обрабатывать до 4-5 телеграфных каналов одновременно, в реальном времени, например, измеряя процент искажений каждого битового перехода с точностью не хуже 1%, с обработкой и выдачей результатов, в мультизадачном режиме реальном времени. Что требовало обработки изменения состояния даже всех каналов одновременно (или — при изменении состояния некоторых из них во время обработки изменений в других) за время не более 200мкс. При некоторой аппаратной поддержке (микросхемами 555СП1 на входе прерывания), укладывался в 160 мкс для самого худшего из возможных случая, еще на контроллере с процессором КР580ВМ80А, с тактовой частотой 2,5 МГц…

Но со стороны — все это выглядело просто и буднично, и нормального рассказа для непосвященных в это дело, чтобы им было понятно, просто не получилось бы…

А в обсуждаемом рассказе — конечно, для тех, кто сам выкраивал байты на асме, все несколько меладраматизированно и неестественно… Но с учетом ориентации его на «непосвященных», вполне допустимо и понятно.

Этот рассказ попадался мне давно, еще вроде в «доинтернетную» пору, на бибиэсках или в FIDO. Наверное, середина 90х. Тогда это выглядело более естественно, чем теперь, когда многие без обьектов и джавы не смогут уже и лампочку зажечь…
+2
У меня нет претензий к описанной ситуации — все это так. У меня претензии именно к изложению и подаче.
Тогда это выглядело более естественно, чем теперь, когда многие без обьектов и джавы не смогут уже и лампочку зажечь…
Некоторые действительно не могут, а остальные просто не хотят забивать гвоздь кирпичом, имея под рукой молоток. А иным лень лезть за обычным молотком, имея в руках робота-гвоздезабивателя.

Кстати, ты не в курсе, что за контроллер описывается в рассказе?
+1
Кстати, ты не в курсе, что за контроллер описывается в рассказе?
А хер его знает.
Близко к семейству MCS-48, но там адресуемой памяти программ было всего 4 Кб. У 8048 — 1к с УФ стиранием + до 3 Кб — внешней, или 4кб внещней, у 8035 и 8039 — только внешняя 4 Кб, у 8049 — 2кб масочной… Причем, одной ногой у них у всех внутреннее ПЗУ отключалось, и обращение шло к внешней памяти программ.
И стек был аппаратный, кольцевой, он никуда не сьедет.

Позже у нас был КМОП вариант MCS-48 — серия КР1830.
Но там памяти — столько же. Просто — потребление меньше.

В MCS-51 — уже был встроенный UART, в рассказе же — его не было. И у КР1816ВЕ51,- было по 4 кб масочной памяти программ. Внешней — до 64 кб.
У КР1816ВЕ31,- внутренней памяти программ не было. Внешней — до 64 кб.
У КР1816ВЕ751 — 4кб встроенной c УФ стиранием.Внешней — до 64 кб.

У КР1830ВЕ51 — 4кб встроенной масочной.Внешней — до 64 кб.
У КР1830ВЕ31,- внутренней памяти программ не было. Внешней — до 64 кб.

С однокристалками других серий я сам не работал, быстро не вспомню. Да и многие из них были довольно специфичными. Менее универсальными. Например, 145 серия — почти сплошь калькуляторы и часы, хотя были и типа контроллеров, но весьма примитивные (как в наборе «Старт», всего кажется 32 команды программы запоминали). Или — работали с ЖК индикаторами. Какая — то серия была сделана для применения в фотоаппаратах.

В общем, если бы не упомянутые 8 кб памяти, и не стек в ОЗУ — то я бы подумал на КР1816ВЕ35 или 39, 48, 49… Из них 128 байт ОЗУ было только у 39 и 49, а у 35 и 48 — всего 64. Впрочем, мне этого хватало не только на программу, но и на софтовые часы с календарем в ней же.

Может, что из Моторол или Зайлога, но автор от них вроде отнекивается. Как, впрочем, и от Интела… Может, жействительно PIC какой, но у них тоже, стек — аппаратный, и при 8 кб памяти, как правило, USART уже есть…
0
На пик оно похоже именно тем, что стек аппаратный и на 8 уровней, у всех MCS51 стек нормальный, в ОЗУ. Ну и с банками памяти интел не заморачивался, по крайней мере в 8051 и его разновидностях.
0
На пик оно похоже именно тем, что стек аппаратный и на 8 уровней, у всех MCS51 стек нормальный, в ОЗУ. Ну и с банками памяти интел не заморачивался, по крайней мере в 8051 и его разновидностях.

А в MCS-48 — банки были. Память программ была разбита на страницы по 256 байт, за пределы которых команды с короткой адресацией не выходили.
Кроме того, память программ была разбита на банки по 2кб. Для перехода в другой банк надо было переключать бит селектора банка в регистре состояния командами SEL MB.

Стек — аппаратный, 8-уровневый. Вертелся по кольцу, при переполнении просто уходил на начало.

Мало того. В MCS-48 были даже банки регистров!
2 банка по 8 регистров, непосредственно адресуемых некоторыми командами. Выбор банка регистров — командой SEL RB.

Это было очень удобно. Чтобы не сохранять текущий контекст при прерываниях (как, например, в MCS-51), в стеке или еще где, я просто в самой программе использовал рабочие регистры банка 0, а при входе в прерывание — переключался на банк регистров 1.
При выходе из прерывания текущий банк регистров восстанавливался автоматически. Что сильно упрощало обработчик прерываний. Как, впрочем, и в PIC, где надо сохранить лишь аккумулятор и статус. Потому мне так нравятся PICи с их равноправными регистрами.

А вот в MCS-51 стековые операции сохранения и извлечения рабочих регистров общего назначения занимают заметную часть кода в программах, и часто являются источником ошибок, и причиной срыва стека…

В общем, если бы не 8 кб памяти программ, я бы был уверен, что в рассказе описан 8039 или 8049 (соответственно — наши ВЕ39 или 49 серий КР1816 или КР1830, КР1835).

Конечно, можно было использовать внешнюю память и более 4 кб. Для этого использовали дополнительные ноги одного из портов ввода — вывода как адресные, программно переключая ими страницы внешней памяти по 2 кб. Все они проецировались на окно адресов старшего из 2х банков памяти.

Об этом даже в РТМ на РВЕ-35 было.
Но тогда — нет ограничений в 8 кб… Разве что аппаратные, — отсутствие лишней ноги, или невозможность поставить на плату память большей емкости… Например, емкость 573РФ4, 573РФ6, была как раз 8кб, а для увеличения — пришлось бы ставить еще корпус и усложнять управление ими.

С учетом перечисленного, остается основной кандидат — КР1816ВЕ39. Аппаратный 8-уровневый стек, 128 байт регистрового ОЗУ — из которых 8 регистров — стек, и еще 2 банка по 8 байт — регистры общего назначения. А также в начале памяти — 2 индексных регистра косвенной адресации.

И память, разбитая на страницы по 256 байт и банки по 2048 байт. С внешней памятью программ 8 кб на 575РФ6 или 573РФ4.
0
А в MCS-48 — банки были. Память программ была разбита на страницы по 256 байт, за пределы которых команды с короткой адресацией не выходили.
Именно банки или как в MCS51 — команды с короткой адресацией работают только с N младшими битами адреса? Я их нахожу скорее аналогичными short jump на x86 — не считать же, что память на нем разделена на секции по 256 байт (или на сколько там можно коротким прыгнуть).
Мало того. В MCS-48 были даже банки регистров!
2 банка по 8 регистров, непосредственно адресуемых некоторыми командами. Выбор банка регистров — командой SEL RB.
С MCS-48 не работал, но если они такие же как в MCS-51 — то банковость там для несколько другой цели — как банки shadow-регистров в ARM. Не для того, чтобы расширить память при ограниченной адресации, а для быстрой смены рабочего набора. Причем при желании все банки доступны в режиме линейной адресации.

А вообще, так оно уже и на описанное в задаче очень похоже. Закольцовывание стека — тоже срыв, ведь при этом самый старый адрес будет затерт. 8кб — вероятно, таки внешняя память. Даже если оно могло адресовать только 2кб — можно было вывести старший бит адреса на «вручную телипаемый битик». А ограничения у него и были аппаратные.
0
Именно банки или как в MCS51 — команды с короткой адресацией работают только с N младшими битами адреса? Я их нахожу скорее аналогичными short jump на x86 — не считать же, что память на нем разделена на секции по 256 байт (или на сколько там можно коротким прыгнуть).
Именно банки, с переключением как в PIC — были в MCS-48 у программной памяти. Адресуемое пространство 4 кб делилось на 2 банка по 2 кб, в пределах которых работали команды длинного перехода. Смена банка производилась путем смены (командой выбора банка) бита в слове состояния, который при адресации памяти добавлялся как старший бит адреса к битам счетчика команд.

Но было много удобных команд (типа пропуска по условию, и условных переходов), которые работали только в пределах текущей страницы в 256 байт. Причем не на 256 байт от текущего состояния счетчика команд, а именно в пределах текущей страницы (младших 8 бит текущего адреса).

Поэтому надо было быть осторожным при работе вблизи границы страниц, контролировать адреса при просмотре листинга компиляции.

Обычно, когда до конца страницы оставалось мало места, я следующий блок кода (подпрограмму) начинал со смещением на начало следующей страницы, а оставшееся недописанное место по концам страниц хорошо помогало при добавлении строк в уже написанную программу.

С MCS-48 не работал, но если они такие же как в MCS-51 — то банковость там для несколько другой цели — как банки shadow-регистров в ARM. Не для того, чтобы расширить память при ограниченной адресации, а для быстрой смены рабочего набора. Причем при желании все банки доступны в режиме линейной адресации.
Так оно и было. Все регистры располагались в едином линейном адресном поле, и были доступны (вплоть до регистров стека) при косвенном обращении с адресом в одном из двух индексных регистров.
Кстати, я тоже старался в программе использовать только один из этих индексных регистров, а второй — оставлял для обработчика прерываний, если ему это было нужно.

Реально — дублирование рабочих регистров «общего назначения» (в том числе флагов и аккумулятора) — было нужно лишь для быстрого переключения контекста без использования стековых операций для их сохранения.

Микрочип в этом отношении пошел еще дальше. Он в PIC вообще отказался от выделения группы регистров «общего назначения», сделав все регистры равноправными, одинаково работающими в любых командах. Что делает ненужным их сохранение вообще. Единственное исключение — регистр временного хранения W и флаги. Их надо сохранять, но многие компиляторы делают при обработке прерываний это сами (например, МикроПаскаль).
0
КР1816ВЕ751

Замечу только, что такой микросхемы не было. :)

Была КМ1816ВЕ751, и то, только теоретически. Практически найти можно было только 8751.
0
Была КМ1816ВЕ751, и то, только теоретически. Практически найти можно было только 8751.
КР, КМ — разница только в корпусе. КР — пластмасса, КМ — керамика, в данном случае — с позолоченными ногами. Керамика могла быть также и просто с буквой К, с военной приемкой — так и вовсе микросхемы были без букв перед сериями.

И я писал по памяти, (лень лезть на полку за справочниками). А все же почти лет 20 прошло, когда я последний раз с ними где — то в середине 90х работал…

В наличии же у меня есть почти все перечисленные. И серии 1816, и 1830, 1850, и в пластике, и в керамике… Например, КМ1816ВЕ48 в керамике, с кварцевым стеклышком, десятка три есть. 92г выпуска…

ИКМ1850ВЕ35 вот сейчас тоже коробку нашел… Штук 20 еще осталось. Тоже керамика позолоченная. 91г.

И даже ИМ1821ВМ85А, тоже в керамике, штук 5 еще есть. Не помню уже, почему именно ИМ. Шаг вроде — не дюймовый, обычный 2,5мм. Да и на дюймовых вроде «Э» ставили. Давно это было, забывать уже стал.

Хоть я давно уже ими не пользуюсь… Не выбрасывать же. Нехай лежат, есть не просят.

Ага, вот еще в одной коробке нашел:
РВЕ035 07.86г. — из тех, Новосибирских, с которых когда — то контроллеры на однокристаллках делать начал…
А вот — оригинальные Интела:
P8039AHL INTEL 1980,
а также — P80C31BH-1 (C) INTEL 1980 — производства AMD,
SAB8085AH2P — 88г, производства SIEMENS…
0
КР, КМ — разница только в корпусе. КР — пластмасса, КМ — керамика
Ну, так я это и хотел сказать. :) Не было у нас контроллеров в пластмассе с дыркой.
ИМ1821ВМ85А, тоже в керамике, штук 5 еще есть. Не помню уже, почему именно ИМ
Может быть — у нас корпусирован буржуйский кристалл 80С85. Такое бывало. Помнится мне вставляю ПЗУ 1626 в панельку, а программатор говорит: «ПЗУ произвел Томсон». :) Челюсть рукой придерживал.
0
а остальные просто не хотят забивать гвоздь кирпичом, имея под рукой молоток
Капитализду никогда не будет приятно, что человек забивает гвоздь простым, удобным и надёжным молотком (а главное — дешёвым молотком). Он разукрасит молоток всеми цветами, покроет глянцем, встроит в него социальные сети и т.д. Затем изгадит улицы рекламой этой хрени. Быдло рекламу увидит и начнёт хрень, чавкая, пожирать, попутно рассказывая какие закостенелые задроты оставшиеся. Однако оставшиеся — и есть настоящие люди и инженеры.

И так во всём, попробуй найти хотя бы хороший джойстик. Даже в самых дорогих моделях (которые предпочитают многие профессионалы) механизм некачественный. Сделай качественно — человеку хватит на всю жизнь, и покупать будут намного меньше. Недорогие модели же годятся только для аркадников, дикие люфты, мертвая зона — только в такие же новомодные игры играть (которые всё делают за игрока, в которых враги на порядки слабее, и вообще всё сделано для того, чтобы играющим в них дебилам не приходилось напрягаться).

Глупо считать, что контроллеры — исключение. Их делают такие же капитализды, и они предназначены не для более лёгкого решения задач, а для получения денег создателями. Для того, чтобы их выбрали предназначена реклама и фаллометрические параметры. Постоянно вылазят писульки с фаллометрией очередной микросхемки, причём авторы писулек толком в микросхемке и в значении параметров не разобрались и вряд ли разберутся, зато орать о кончине восьмибитников готовы до посинения. Некоторые вообще считают, что очередная распиаренная херня (причём именно распиаренная, такую же, но не распиаренную они не заметят) вроде распберри пи заменит все МК.
+2
Капитализду никогда не будет приятно, что человек забивает гвоздь простым, удобным и надёжным молотком (а главное — дешёвым молотком).… Однако оставшиеся — и есть настоящие люди и инженеры.
Очередные сказки. Профессиональные продукты профессионалы же и выбирают, а они ориентируются не на моду. Производитель же, если не будет удовлетворять их требованиям — просто вылетит в трубу.
Даже в самых дорогих моделях (которые предпочитают многие профессионалы) механизм некачественный.
Будто ты их щупал, чтобы делать выводы. Среди дешевых — там да, проблемы.
Некоторые вообще считают, что очередная распиаренная херня (причём именно распиаренная, такую же, но не распиаренную они не заметят) вроде распберри пи заменит все МК.
Это вообще хомячки, не разбирающиеся в вопросе. RPi от их воплей хуже не становится.
Их делают такие же капитализды, и они предназначены не для более лёгкого решения задач, а для получения денег создателями.
Здесь есть одна тонкость — если они не будут обеспечивать легкого решения задач, то их никто не купит и создатели не получат ни копейки. Поэтому именно для легкого решения задач они и предназначены.
+1
Профессиональные продукты профессионалы же и выбирают, а они ориентируются не на моду.
Только профессионалов — единицы. Большинство вещей сделано криворукими китайцами и гламурными дызайнерами.
0
Ну, китайцы, положим, и правда криворукие (правда, это следствие того, что они делают дешевый продукт, а хорошие специалисты — дороги, и сделать дешевую поделку не удастся. а дешевый продукт они делают потому, что ты за ним и пришел, а не за дорогим). Дизайнеры, безусловно, тоже попадаются криворукие, но те, о которых ты — таки скорее профессионалы своего дела. Просто они делают то, что нужно им (их работодателю), а не тебе.
0
стремиться к эффективному коду

Стремиться к эффективному коду однозначно нужно. Но следует понимать, что малый размер прошивки не говорит о эффективности кода. Наоборот, часто при «утаптывании» кода приходится идти на «компромиссы с совестью», применять «трюки», которые негативно сказываются на коде в целом (читабельность, поддержка и т. д.).
+2
Во-о-т… Получаем маленький, чудесненький код. Правда, хрен поймешь без поллитры, что там наворочено, хрен поменяешь что-то малой кровью, хрен добавишь что-то. Облысеешь править баги (они там непременно должны быть, это же только у сферического персонажа рассказика всё идеально). Т.е. получаем типичный такой ГОВНОКОД :-) Зато имеем бонус: 1) сэкономили бабла, выбрав самый убогий камень из подходящих 2) оргазм от удовлетворенного ЧСВ и восторги «особой касты» :-)

Кстати, о быдлокодерах: это один из их источников. После долгой и плодотворной жизни с ассемблером и всеми этими «утаптываниями» имеем хороший шанс получить замшелого быдлокодера на ЯВУ.
+3
Да уж, рассказ о том, как делать не надо…

P.S. Это просто [:|||||||||||||||||||||||||||||||||||||||||||||:].
Я это ещё в году так 98-м скачивал с какой-то BBS-ки.
0
Выскажу свое ИМХО относительно данного рассказа.

С художественной точки зрения все понятно. Есть Главный Герой, который поставил себе Цель и идет к этой цели. Идет через самопожертвование, не ради денег а ради идеи. Ему предлагают компромиссы – а он отказывается, ибо есть Цель.

Хороший сюжет для мыльной оперы. Но если отбросить все слезы и сопли, и посмотреть на происходящее с профессиональной точки зрения, то все не так хорошо.
Наш герой не просто «утаптывает код», он, прежде всего, учувствует в разработке некого устройства, продукта. И оценивать следует именно конечный результат, продукт, а не душевные переживания героя при написании кода.

А вот продукт, скорее всего, получится «не фонтан». Мы уже имеем код, который может понять только автор (и то не факт). Мы не можем развивать продукт – у нас банально нет ресурсов. Да фиг с ним, с развитием. А ели в процессе эксплуатации вылезет баг, исправление которого потребует ещё один байт? Что делать – отзывать всю партию, или наш герой опять уйдет на год в медитацию над кодом для высвобождения байта?

Цель должна быть – создание хорошего продукта. А герой заменил ее своей целью – найти свободный байт.
+3
Ну, у этой цели причина, в принципе, есть — если не найти байт, то отзывать партию придется прямо сейчас. А так есть шанс что доработок больше не потребуется.
0
Ну, я бы поступил так: идем к руководству, говорим, что ели даже и получится утрамбовать код – на выходе все равно будет говно. Есть шанс, что придётся отзывать партию.

Поднимаем ТЗ. Ели той самой фичи, которую захотел заказчик в последний момент, в ТЗ нет – начинаем переговоры с заказчиком. Предлагаем варианты, например эту фичу мы делаем, но отказываемся от другой, менее нужной. Или пусть заказчик компенсирует текущие расходы, и начинаем делать продукт на новой платформе.

Я был подобной ситуации. И мне удалось утрамбовать код. Но я этим не горжусь, наоборот, мне стыдно признаваться что я учувствовал в разработке такого продукта. Увы, тогда мне не хватило опыта, чтобы переубедить руководство, а руководство не отличалось дальновидностью.
+2
Судя по тексту, герой сам в некотором роде «руководство». Т.к. именно он дал согласие на использование именно этого чипа. А потом, когда жареным запахло: «И я на две недели засел дома, запретив меня беспокоить.» Какая-то шарашка вольных каменщиков, с главгероем — Топ-разработчиком. Остальные персонажи тоже странные… Ибо вообще не понимают, что написал главный. Что они тогда там вообще делают? Пока 2 недели главгерой заламывает руки и видит старушек, эти персонажи, собравшись кучей, постигают красоту, которую сознанием охватить не выходит. Укуренные, что ли? Так что кругом «сам дурак».
+3
Я бы вообще назвал рассказ «Что случается, ели нет нормально поставленного процесса производства».

Ведь проблема не в байте. Проблема в том, что «постановщики» не смогли нормально договорится с заказчиком, формализовать и утвердить требования. Возникшую проблему решили спихнуть на разработчика. А разработчик, вместо того, чтобы попытаться решить проблему комплексно, воспринял это как вызов собственному профессионализму «смогу я утоптать код или нет» (ибо ЧСВ). И закрылся в своем собственном мире, где есть прошивка и недостающий байт. Но проблема никак не в байте…
+2
А разработчик, вместо того, чтобы попытаться решить проблему комплексно, воспринял это как вызов собственному профессионализму «смогу я утоптать код или нет» (ибо ЧСВ).
Человек просто выполнял свою работу. Вместо того, чтобы сваливать проблему на контору и коллег, взял и решил её. Плохо, что таких людей мало.
0
Человек просто выполнял свою работу. Вместо того, чтобы сваливать проблему на контору и коллег, взял и решил её.

Не нужно сливать проблему на коллег, нужно просто решать проблему, а не ее следствие. Хороший специалист должен смотреть на задачу шире, чем требует его узкая спецификация.

Еще раз повторюсь – цель создать хороший продукт. Если каждый будет просто «делать свою работу», то, наоборот, получится ситуация «от меня, пули уши, а почему они в мишень не попали мне пофиг, проблема на принимающей стороне», «мой код идеален, а остальное меня не интересует».

Герой не решил проблему. Проблема осталась, он просто придумал локальное решение, которое может быть проканает, а может и нет. Как я уже говорил – проблема не в недостающем байте.
+3
Я был подобной ситуации. И мне удалось утрамбовать код. Но я этим не горжусь, наоборот, мне стыдно признаваться что я учувствовал в разработке такого продукта. Увы, тогда мне не хватило опыта, чтобы переубедить руководство, а руководство не отличалось дальновидностью.
И чем эта история кончилась?
0
И чем эта история кончилась?

Девайс в конечном итоге работал, но через жопу. С заказчиком у руководства были постоянные проблемы и взаимные наезды типа «ваш продукт говно», «а если бы вы сразу сказали, что вам нужно, то продукт говном бы не был».

Баги в процессе эксплуатации естественно вылезли. Фиксили одни баги, сознательно создавая другие (типа манне критические) ибо запаса по ресурсам не было.
В конечном итоге девайс просто выкинули, неприятный осадок остался.
+1
Хороший пример :)
0
Ну, я бы поступил так: идем к руководству, говорим, что ели даже и получится утрамбовать код – на выходе все равно будет говно. Есть шанс, что придётся отзывать партию.
Это сейчас поумнели и перешли на армы и оопы, в результате каждую неделю вылазят баги. Их правят — и вылазят ещё…
Раньше вещи делали качественно, и они служили долго. При этом ничего не приходилось отзывать.

Поднимаем ТЗ. Ели той самой фичи, которую захотел заказчик в последний момент, в ТЗ нет – начинаем переговоры с заказчиком. Предлагаем варианты, например эту фичу мы делаем, но отказываемся от другой, менее нужной. Или пусть заказчик компенсирует текущие расходы, и начинаем делать продукт на новой платформе.
Или, вместо того, чтобы разводить политику — просто взять и сделать. Вы привыкли, что устройство — это МК, экранчик, кнопочки, и ещё десяток деталек, поэтому взять и переделать — плёвое дело. А если это серьёзное оборудование, например, связи, на разработку которого уходят месяцы?
+2
А если это серьёзное оборудование, например, связи, на разработку которого уходят месяцы?
Крест на итерации и вперед, делать новую. Иначе будет как тут и крест все равно ставить придется, но уже на большем количестве вложенных денег и времени.
Впрочем, при таком подходе к проектированию МК как у ST есть шанс, что достаточно впаять более жирный МК в том же корпусе и не трогать остальное железо.
+3
P.S. Так и делают, кстати — например, отзывая из магазинов целую партию серийно произведенных консолей, если в них обнаружилась фатальная ошибка.
+2
Я и говорю, о устройстве, на разработку которого ушли месяцы. Или бы это было простое устройство в единичном экземпляре, что проблема бы так остро не стояла.

Или, вместо того, чтобы разводить политику — просто взять и сделать.

Что сделать? Код, который может понять только один человек? Устройство, которое нельзя развивать и можно только молиться на то, что в процессе эксплуатации не вылезут баги? Вы действительно думаете, что это лучший выход из ситуации?
+3
Это сейчас поумнели и перешли на армы и оопы, в результате каждую неделю вылазят баги.
Раньше было ровно тоже самое. Просто это происходило не на ваших глазах.
Раньше вещи делали качественно, и они служили долго.
Ага. Например, знаменитый ТТ, у которого не было предохранителя и из-за слабой защелки обойма норовила выпасть. А из-за мелкой и работающей на пределе пружины срок службы был куда ниже заявленого. Можно еще вспомнить об не менее знаменитом ППШ, у которого каждый магазин подходил ровно к тому автомату под который был подогнан. Замечу, это только пара примеров, выбраных только из-за «легендарности» и того, что речь идет об армейской технике, где надежность обязана быть куда выше, чем у гражданской. И отзывы точно так же были, скажем Кадиллак официально отзывал модели 59-го и 60-го годов выпуска. Или, скажем, знаменитый интеловский отзыв 94-го года всех пентиумов из-за fdiv bug. И это только примеры настолько громкие, что оставили заметный след в истории.

Вы привыкли, что устройство — это МК, экранчик, кнопочки, и ещё десяток деталек, поэтому взять и переделать — плёвое дело.
И это просто замечательно. Низкая стоимость переделки повышает шансы, что устройство таки переделают, а не запустят в серию с заведомыми проблемами.
+3
» Оно проноситься вплотную
тЬся… (
0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.