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

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





Мне не хватало байта. Всего одного. Да, да. Того самого, что из восьми бит

состоит. Что? Hет, я не псих, хотя одному богу известно, сколь тонкой была

граница отделявшая меня от этого состояния. Hо все по порядку.



Я программер. Hо не просто программер. Я принадлежу к касте, которую иногда

называют системщиками, иногда кристальщиками. Вы знаете, что это такое?

Я обьясню, если потерпите. Мне никак не обойтись без специфики, но иначе вы не

сможете понять дальнейшее.



Мы программируем чипы однокристаллки, грубо говоря, это когда весь комп в

одном кристалле. Програмная память и память данных разделены и не

взаимодействуют между собой. Программа не может быть запущена в оперативке.

Глубина програмного стека ограничена. Максимум на что я могу расчитывать,

это восемь уровней вложения, причем я не могу изменять предельную глубину

стека. О, вы не подумайте чего! У меня бездна ресурсов. Оперативки аж 128 байт!

Это на все про все. Переменные, там то да се.. Представили, да? С програмной

памятью тоже неплохо. Аж восемь килобайт. И пользоваться ей совсем несложно.

Сначала нужно программно врубить нужный банк памяти, запустить в нем нужную

процедуру, а по выходе из нее не забыть вернуться где был. Да еще надо иметь в

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

процедур, а переходы по условиям возможны только в пределах одной страницы,

т.е. 256 байт. Это значит, если я сравниваю два байта и надо ветвиться, но если

метка не находится в пределах 256 байт, то это письмо на деревню дедушке,

причем компилятор только в половине случаев предупредит, мол широко шагаешь

парень, штаны бы поберег. И это только цветочки! Ягодки я вам счас выложу,

чтоб вы ими в полной мере могли насладиться.



У меня нет команды вычитания. Вообще! только add. Уж про такую роскошь, как

умножение или деление я вообще молчу, это для лентяев. Зато мне нужно

обеспечить десятичную математику. Вы проникаетесь потихоньку? Коды таких

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

решать задачи на пределе оперативной и програмной памяти. Исходники

переписываются далеко не один раз. Мне мало просто решить задачу. Я должен

впихнуть ее в этот чертов кристалл! Ограничение по переменным, по размеру кода

в целом, по размеру каждой процедуры и по числу вызовов. Малейший недосмотр и..

стек продавлен, и тебя вышвыривает черт знает куда. И компилятор не поможет.

Такое он не ловит.. Вы думаете это все? H-е-ет, дорогие мои. Моя игрушка

работает в реалтайме.. Это когда, напротив каждой крохотной процедурки моего

кода нужно подсчитать и проставить время ее исполнения в милисекундах. Мои

модули не должны работать более жестко фиксированного времени, потому, что мне

надо еще сканировать киборду и дисплей, поспевать за датчиками и выдавать

управляющие сигналы, а все остальное должно работать никак не мешая сканнингу,

иначе я прозеваю нажание кнопки или дисплей станет неприятно мерцать меняя

яркость.

читать дальше