Pofigism as a lifestyle 2.0

Назад, в будущее

Posted in Просто трёп by pofigist on 23 сентября, 2013

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

Последние две недели я занимался тем, что писал особо хитрый bootloader (системный загрузчик для нечитающих на буржуйском) для некоего микропроцессора. Все бы хорошо, но памяти у этого самого микропроцессора очень и очень немного. Нет, не гигабайт. И даже не мегабайт. А ровно 1 килобайт, или 1024 байта из которых 22 уходят на таблицу векторов прерываний. Итого, 1002 байта. С оперативкой все еще хуже — ее аж целых 256 байт….

Помните извечный прикол о том, как Билл Гейтс (или еще кто-то, я эту историю слышал в …надцати разных вариантах) утверждал, что 640Кб оперативки хватит всем и каждому? Так вот, я бы с такой радостью получил в свое распоряжение эти самые 640Кбайт! Что греха-то таить,  я даже и 64 килобайтам был бы несказанно рад. Но, к сожалению, это для меня недостижимая мечта, а пока что надо выкручиваться с тем, что имеется в наличии.

Впрочем, особо ничего хитрого загрузчик делать не должен — всего-то инициализировать порт USB (или RS-232,  наличие которого он должен определить), посмотреть или в специальном секторе есть операционка (на которую мне выделили еще 3 кбайта) и если есть, загрузить ее. Если же нет, то попытаться связаться с другим микропроцессором, получить от него код операционки, залить ее в память (благо этой самой памяти немного), проверить, что все залито как надо и запустить ее. Ерунда, можно сказать, но основная засада заключается в том, что загрузчику придется отрабатывать переключение векторов прерываний для операционки, на что у меня и ушла неделя. Точнее, неделя ушла на то, чтобы сообразить как это все сделать, чтобы уместиться в выделенный объем памяти.

В общем, сегодня опытный образец заработал — программа уместилась аж в 670 байт, а с учетом инициализационных таблиц у меня еще остались в наличии 18 свободных байт! Можно сказать, просто навалом свободного места. И это без использования оптимизации компилятора — если ее включить, то можно получить в свое распоряжение еще аж 62 байта. Вот так-то…

И вот, прихожу я домой, весь такой счастливый и гордый, а мне Винда и говорит — памяти, мол, не хватает. На диске, мол, осталось всего-то 10 гигабайт! Вот так я и вернулся назад в будущее из прогрессивного прошлого. Бывает. Главное, что завтра мне опять вперед, в прошлое, дописывать операционку так, чтобы она вместилась в 3 килобайта и 256 байт оперативки.