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 байт оперативки.

 

комментариев 26

Subscribe to comments with RSS.

  1. Findus said, on 23 сентября, 2013 at 19:31

    Блин, ты порвал мне мозг ;)))) Я вроде бы понял о чём речь, но даже не представляю, как такое делается :))))))))))))))

    • pofigist said, on 23 сентября, 2013 at 20:01

      На самом деле, все делается довольно просто — у меня больше времени заняло сообразить как именно перенаправлять вектора прерываний так, чтобы расход памяти и времени процессора был минимальный. Если интересует описание процесса, могу расписать. 🙂

      • Findus said, on 24 сентября, 2013 at 07:19

        Думаю не надо ;))))))))

        • pofigist said, on 24 сентября, 2013 at 17:01

          Да там все просто 🙂 Это ж не под Винду писать — тут ты сам себе хозяин, никаких тормознутых API с описанием на полторы тыщи страниц.

  2. FiL said, on 24 сентября, 2013 at 01:20

    Собственно, всё логично. Ты жалуешься, что у тебя осталось всего 18 байт из килобайта и радуешься, что можно сделать 62. Винда тоже жалуется, что осталось меньше 5% и будет рада если останется больше.

    • pofigist said, on 24 сентября, 2013 at 05:10

      То, что это логично я понимаю. Просто сама ситуация из серии «у кого-то суп жидок, а у кого-то жемчуг мелок». 🙂
      В современном мире кому сказать, что мне нужно вместить программу в память меньше килобайта и сразу народ начинает смотреть квадратными глазами «ты, наверное, мегабайт имел в виду?». Это те, разумеется, кто вообще имеет понятие о байтах и их количествах.

      • FiL said, on 25 сентября, 2013 at 02:05

        В конце 90-х было весьма популярное развлечение — писать графические демки до 4К. А некоторые таки баловались и меньшими (1К или даже 512 байт). Но это размер кода (бинарника). Памяти было больше. Мне кроме как в 64К укладываться не приходилось.

        • Damballah said, on 25 сентября, 2013 at 16:29

          Это ты про фракталы под музон? Довольно классные экземпляры были. 🙂
          Но мне больше интересна игрушка .kkrieger. Как???!!! Как они вместили полноценный шутер с приличной (на то время) графикой, всего в 96 КБ???

          • pofigist said, on 25 сентября, 2013 at 18:57

            Помнится, на размер запускаемого файла, который .com было ограничение в 64 кбайта, иначе его нельзя было разместить в одном сегменте памяти. Это потом уже появился ,exe с сегментацией и переходами типа long jump. 🙂
            Вроде бы иTest Drive (первые приличные автогонки на тот момент) помещались в одном сегменте.

          • FiL said, on 1 октября, 2013 at 20:33

            Не, не фракталы. Игрушки разные, не полноценные, а именно демки. Управление есть, поверхности все прорисованы, а противников и конкретной цели нет.

            • pofigist said, on 7 октября, 2013 at 20:27

              Я помню, как я офигел, увидев поезд метро в игрушке Goody 🙂

  3. Damballah said, on 24 сентября, 2013 at 09:54

    На ассемблере пишешь? 🙂

    • pofigist said, on 24 сентября, 2013 at 16:59

      Не-а, на ассемблере все было лениво писать, так что я только обработку прерываний на нем написал. А все остальное на C 🙂

      • Damballah said, on 24 сентября, 2013 at 17:33

        На ассемблере, имхо, получилось бы еще компактнее. 🙂
        Помнится, в институте я как-то написал безобидный вирус на четырех языках. На асме он получился ровно 666 байт, на С где-то 1.5Кб, на Паскале около трех, на Бейсике 200+ Кб. 🙂

        • pofigist said, on 24 сентября, 2013 at 17:52

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

          И так уже у начальника, который второй программер на этом проекте глаза на лоб полезли, когда я ему стал объяснять, как именно надо настраивать компилятор и линкер, чтобы оно все получилось как надо. Через полчаса он сказал, что это все находится за пределами его мозговых возможностей, а поэтому он очень рад, что предложил мне работу и ему не придется самому заниматься всей этой фигней. 🙂

          • Damballah said, on 25 сентября, 2013 at 16:16

            А шеф-то ламерок. 🙂

            • pofigist said, on 25 сентября, 2013 at 18:58

              Шеф, как раз, поступил толково — не знаешь как сделать, возьми на работу того, кто знает и руководи им 🙂

  4. PaPof said, on 24 сентября, 2013 at 10:24

    Теперь можешь смело говорить, что блоху подковал. Уж очень похоже…..:)

    • pofigist said, on 24 сентября, 2013 at 17:00

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

  5. Findus said, on 24 сентября, 2013 at 17:06

    Пиши по чаше такое, то все машинки да машинки 🙂

    • pofigist said, on 24 сентября, 2013 at 17:52

      Ну, еще фотки есть 🙂 Периодически, правда.
      С тобой, конечно, мне не сравниться.

      • Findus said, on 24 сентября, 2013 at 18:03

        Твое мастерство словестной прозы ничем не перебить 🙂

        • pofigist said, on 24 сентября, 2013 at 18:10

          ОК, давай просто договоримся что мы тут все гении 🙂

          • Findus said, on 24 сентября, 2013 at 18:11

            Отличное решение 😉

            • pofigist said, on 24 сентября, 2013 at 18:29

              Кстати, о гениях — ты нашел фотофорум для путешественников? 🙂

              • Findus said, on 26 сентября, 2013 at 20:09

                Неа, так по жж пару групп, но ничего путнего


Обсуждение закрыто.

%d такие блоггеры, как: