Назад, в будущее
Знаю, что давно ничего не постил, но очень надеюсь, начиная с этой недели, исправиться. Честное пионерское! Надо, все-таки, добить каталог машин по версии Топгира, а то уже самому стыдно становится. Ну и фотки разобрать, куда уж без них-то… Но это все попозже, а пока что будет что-то в стиле отчета о проделанной работе. В смысле, о том, что у меня творится в рабочей области мозга.
Последние две недели я занимался тем, что писал особо хитрый bootloader (системный загрузчик для нечитающих на буржуйском) для некоего микропроцессора. Все бы хорошо, но памяти у этого самого микропроцессора очень и очень немного. Нет, не гигабайт. И даже не мегабайт. А ровно 1 килобайт, или 1024 байта из которых 22 уходят на таблицу векторов прерываний. Итого, 1002 байта. С оперативкой все еще хуже — ее аж целых 256 байт….
Помните извечный прикол о том, как Билл Гейтс (или еще кто-то, я эту историю слышал в …надцати разных вариантах) утверждал, что 640Кб оперативки хватит всем и каждому? Так вот, я бы с такой радостью получил в свое распоряжение эти самые 640Кбайт! Что греха-то таить, я даже и 64 килобайтам был бы несказанно рад. Но, к сожалению, это для меня недостижимая мечта, а пока что надо выкручиваться с тем, что имеется в наличии.
Впрочем, особо ничего хитрого загрузчик делать не должен — всего-то инициализировать порт USB (или RS-232, наличие которого он должен определить), посмотреть или в специальном секторе есть операционка (на которую мне выделили еще 3 кбайта) и если есть, загрузить ее. Если же нет, то попытаться связаться с другим микропроцессором, получить от него код операционки, залить ее в память (благо этой самой памяти немного), проверить, что все залито как надо и запустить ее. Ерунда, можно сказать, но основная засада заключается в том, что загрузчику придется отрабатывать переключение векторов прерываний для операционки, на что у меня и ушла неделя. Точнее, неделя ушла на то, чтобы сообразить как это все сделать, чтобы уместиться в выделенный объем памяти.
В общем, сегодня опытный образец заработал — программа уместилась аж в 670 байт, а с учетом инициализационных таблиц у меня еще остались в наличии 18 свободных байт! Можно сказать, просто навалом свободного места. И это без использования оптимизации компилятора — если ее включить, то можно получить в свое распоряжение еще аж 62 байта. Вот так-то…
И вот, прихожу я домой, весь такой счастливый и гордый, а мне Винда и говорит — памяти, мол, не хватает. На диске, мол, осталось всего-то 10 гигабайт! Вот так я и вернулся назад в будущее из прогрессивного прошлого. Бывает. Главное, что завтра мне опять вперед, в прошлое, дописывать операционку так, чтобы она вместилась в 3 килобайта и 256 байт оперативки.
Блин, ты порвал мне мозг ;)))) Я вроде бы понял о чём речь, но даже не представляю, как такое делается :))))))))))))))
На самом деле, все делается довольно просто — у меня больше времени заняло сообразить как именно перенаправлять вектора прерываний так, чтобы расход памяти и времени процессора был минимальный. Если интересует описание процесса, могу расписать. 🙂
Думаю не надо ;))))))))
Да там все просто 🙂 Это ж не под Винду писать — тут ты сам себе хозяин, никаких тормознутых API с описанием на полторы тыщи страниц.
Собственно, всё логично. Ты жалуешься, что у тебя осталось всего 18 байт из килобайта и радуешься, что можно сделать 62. Винда тоже жалуется, что осталось меньше 5% и будет рада если останется больше.
То, что это логично я понимаю. Просто сама ситуация из серии «у кого-то суп жидок, а у кого-то жемчуг мелок». 🙂
В современном мире кому сказать, что мне нужно вместить программу в память меньше килобайта и сразу народ начинает смотреть квадратными глазами «ты, наверное, мегабайт имел в виду?». Это те, разумеется, кто вообще имеет понятие о байтах и их количествах.
В конце 90-х было весьма популярное развлечение — писать графические демки до 4К. А некоторые таки баловались и меньшими (1К или даже 512 байт). Но это размер кода (бинарника). Памяти было больше. Мне кроме как в 64К укладываться не приходилось.
Это ты про фракталы под музон? Довольно классные экземпляры были. 🙂
Но мне больше интересна игрушка .kkrieger. Как???!!! Как они вместили полноценный шутер с приличной (на то время) графикой, всего в 96 КБ???
Помнится, на размер запускаемого файла, который .com было ограничение в 64 кбайта, иначе его нельзя было разместить в одном сегменте памяти. Это потом уже появился ,exe с сегментацией и переходами типа long jump. 🙂
Вроде бы иTest Drive (первые приличные автогонки на тот момент) помещались в одном сегменте.
Не, не фракталы. Игрушки разные, не полноценные, а именно демки. Управление есть, поверхности все прорисованы, а противников и конкретной цели нет.
Я помню, как я офигел, увидев поезд метро в игрушке Goody 🙂
На ассемблере пишешь? 🙂
Не-а, на ассемблере все было лениво писать, так что я только обработку прерываний на нем написал. А все остальное на C 🙂
На ассемблере, имхо, получилось бы еще компактнее. 🙂
Помнится, в институте я как-то написал безобидный вирус на четырех языках. На асме он получился ровно 666 байт, на С где-то 1.5Кб, на Паскале около трех, на Бейсике 200+ Кб. 🙂
Получилось бы, конечно. Я прикидывал, что уложился бы в полкилобайта в худшем случае, но надо было бы штудировать мануалы на тему побочных эффектов команд. А поскольку я себе отвел на написание всей этой фигни две недели (и еще надо учесть, что для этого процессора я никогда софт не писал), на ассемблере я бы не уложился в срок.
И так уже у начальника, который второй программер на этом проекте глаза на лоб полезли, когда я ему стал объяснять, как именно надо настраивать компилятор и линкер, чтобы оно все получилось как надо. Через полчаса он сказал, что это все находится за пределами его мозговых возможностей, а поэтому он очень рад, что предложил мне работу и ему не придется самому заниматься всей этой фигней. 🙂
А шеф-то ламерок. 🙂
Шеф, как раз, поступил толково — не знаешь как сделать, возьми на работу того, кто знает и руководи им 🙂
Теперь можешь смело говорить, что блоху подковал. Уж очень похоже…..:)
Да ну, в свое время народ еще и не так изгалялся. Когда память стоила диких денег.
Пиши по чаше такое, то все машинки да машинки 🙂
Ну, еще фотки есть 🙂 Периодически, правда.
С тобой, конечно, мне не сравниться.
Твое мастерство словестной прозы ничем не перебить 🙂
ОК, давай просто договоримся что мы тут все гении 🙂
Отличное решение 😉
Кстати, о гениях — ты нашел фотофорум для путешественников? 🙂
Неа, так по жж пару групп, но ничего путнего