• Запускаем ReactOS с BTRFS раздела

      Привет, Хабр!

      Меня зовут Виктор, и в этом году я единственный студент в программе Google Summer of Code на проекте ReactOS. Сегодня я расскажу немного о том, что я делаю в рамках стажировки.

      ReactOS поддерживает кучу всяких разных файловых систем для чтения и записи (fat32, ext2, ReiserFS, BTRFS), однако загружаться до сих пор умеет только с раздела, отформатированного в fat32. Этой весной я решил что пора начать исправлять эту ситуацию, и подал заявку на GSoC. И вот, спустя несколько месяцев я пишу этот пост :)

      Почему BTRFS? Ответ прост — драйвер файловой системы WinBtrfs на текущий момент самый стабильный и полнофункциональный из всех, что включены в код РеактОС. На данном этапе, мы хотим пофиксить именно баги ядра, которые мешают использовать другие ФС для загрузки, так что баги драйвера ФС нам тут совсем ни к чему.


      Читать дальше →
    • Реверсим «Нейроманта». Часть 3: Добили рендеринг, делаем игру


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


        Реверсим «Нейроманта». Часть 1: Спрайты
        Реверсим «Нейроманта». Часть 2: Рендерим шрифт

        Эта часть может показаться несколько сумбурной. Дело в том, что большая часть того, о чём здесь рассказано, было готово ещё во время написания предыдущей. Поскольку с того момента прошло уже два месяца, а у меня, к сожалению, нет привычки вести рабочие заметки, некоторые детали я попросту забыл. Но уж как есть, поехали.

        Читать дальше →
      • Особенности вызова функций в С++

          Не так давно у меня произошёл очередной разговор с коллегой на извечную тему: "по ссылке, или по значению". В результате возникла данная статья. В ней я хочу изложить результаты моего исследования по этой и смежным темам. Далее будут рассмотрены:


          • Регистры и их назначение при вызове функций.
          • Передача и возврат простых типов и структур.
          • Как передача по ссылке и по значению влияют на оптимизации тела функции компилятором.
          • Как используется место при многочисленных вызовах функций.
          • Механизм виртуальных вызовов.
          • Оптимизация хвостовых вызовов и рекурсии.
          • Инициализация структур, массивов и векторов.

          Осторожно! Статья содержит большое количество кода на C++ и ассемблере (Intel ASM с комментариями), а также множество таблиц с оценками производительности. Всё написанное актуально для x86-64 System V ABI, который используется во всех современных Unix операционных системах, к примеру, в Linux и macOS.

          Читать дальше →
        • Неканонический режим терминала и неблокирующий ввод на nasm

          Идея написания игры на языке ассемблера, конечно, вряд ли придёт кому-то в голову сама собой, однако именно такая изощренная форма отчетности уже долгое время практикуется на первом курсе ВМК МГУ. Но так как прогресс не стоит на месте, то и DOS, и masm становятся историей, а nasm и Linux выходят на первый план подготовки бакалавров. Возможно, лет через десять руководство факультета откроет для себя python, но речь сейчас не об этом.

          Программирование на ассемблере под Linux, при всех своих плюсах, делает невозможным использование прерываний BIOS'a и как следствие обделяет функциональностью. Вместо них приходится использовать системные вызовы и контактировать с api терминала. Поэтому написать симулятор блек-джека или морского боя не вызывает больших трудностей, а с самой обычной змейкой возникают проблемы. Дело в том, что система ввода-вывода контролируется терминалом, а системными функциями Си напрямую пользоваться нельзя. Поэтому при написании даже довольно простых игр рождаются два камня преткновения: как переключить терминал в неканонический режим и как сделать ввод с клавиатуры неблокирующим. Об этом и пойдёт речь в статье.
          Читать дальше →
        • Смешанный десятично-двоичный формат vs IEEE754

            В предыдущем топике был рассмотрен новый формат представления десятичных чисел с плавающей точкой, который мы назвали смешанным десятично-двоичным форматом (СДДФ).

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

            $F=SM_{2}10^{e}$


            где $M_{2}$ и e — целые двоичные числа. Под двоичным эквивалентом десятичного числа подразумевается двоичный код этого десятичного числа в выбранном формате. Под десятичным эквивалентом двоичного числа подразумевается десятичный код этого двоичного числа.
            Читать дальше →
          • Go 1.11: AVX-512 со вкусом Go



              В Go 1.11 значительно обновлён ассемблер под платформу x86.


              У программистов появится возможность использовать AVX-512 — новейшие инструкции, доступные в процессорах Intel.


              Под катом:


              • Самые значительные обновления в cmd/asm (go tool asm)
              • Как был внедрён новый набор инструкций в Go ассемблер
              • Использование новых инструкций и специальных возможностей EVEX префикса
              • Уровень интеграции в тулчейн (рецепты обхождения текущих ограничений)
              Читать дальше →
            • Ой, у вас баннер убежал!

              Ну. И что?
              Реклама
            • Как собрать досовский COM-файл компилятором GCC

              • Перевод
              Статья опубликована 9 декабря 2014 года
              Обновление от 2018 года: RenéRebe сделал на базе этой статьи интересное видео (часть 2)

              В минувшие выходные я участвовал в Ludum Dare #31. Но даже до объявления тем конференции из-за своего недавнего увлечения я хотел сделать олдскульную игру под DOS. Целевой платформой выбрана DOSBox. Это самый практичный способ запуска DOS-приложений несмотря на то, что все современные процессоры x86 полностью обратно совместимы со старыми, вплоть до 16-битного 8086.

              Я успешно создал и показал на конференции игру DOS Defender. Программа работает в реальном режиме 32-битного 80386. Все ресурсы встроены в исполняемый COM-файл, никаких внешних зависимостей, так что игра целиком упакована в бинарник 10 килобайт.


              Читать дальше →
            • Как обновление Rust 1.26 ускорило мой код в три с лишним раза

              • Перевод
              Хочу поделиться небольшой историей о мощи LLVM и преимуществах языков высокого уровня над ассемблером.

              Я работаю в компании Parity Technologies, которая поддерживает клиент Parity Ethereum. В этом клиенте нам нужна быстрая 256-битная арифметика, которую приходится эмулировать на программном уровне, потому что никакое оборудование не поддерживает её аппаратно.

              Долгое время мы параллельно делаем две реализации арифметики: одну на Rust для стабильных сборок и одну со встроенным ассемблерным кодом (который автоматически используется nightly-версией компилятора). Мы так поступаем, потому что храним 256-битные числа как массивы 64-битных чисел, а в Rust нет никакого способа умножить два 64-битных числа, чтобы получить результат более 64 бит (так как целочисленные типы Rust только доходят до u64). Это несмотря на то, что x86_64 (наша основная целевая платформа) нативно поддерживает 128-битные результаты вычислений с 64-битными числами. Так что мы разделяем каждое 64-битное число на два 32-битных (потому что можно умножить два 32-битных числа и получить 64-битный результат).
              Читать дальше →
            • 8088 MPH: мы сломаем все ваши эмуляторы

              • Перевод
              image

              Одним из пунктов списка моих желаний после прочтения первого отчета с пати в 1991 году стало посещение европейской демопати и участие в соревнованиях compo. Я участвовал в NAID ’96 и даже занял там место, но моей мечтой всегда было соревноваться с лучшими из лучших. Я рад объявить о том, что спустя шесть месяцев упорной работы с хорошими друзьями и невероятно талантливыми людьми нам это удалось. Наше демо 8088 MPH победило в oldskool demo compo Revision 2015. (Моей личной победой стало то, что наше демо показали в compo последним, что стало знаком уважения организаторов.) 7 апреля 2015 года в мире не было эмуляторов IBM PC, способных правильно запускать наше демо; они зависали или вываливались ещё до завершения демо, а цвета были искажены. То же относится и ко всему остальному железу, кроме целевого (см. ниже). Чтобы увидеть, что такое 8088 MPH, я рекомендую вам посмотреть видео записи демо, запущенного на реальном железе:


              В демо так много технологических открытий, сделанных впервые в мире, а мы эксплуатируем железо так, как никто до нас не додумывался, поэтому будет честным рассказать, как же нам это удалось. Одной из моих должностей была «организатор» демо, поэтому я расскажу о нём сцена за сценой, вкратце объяснив основы каждого трюка. О частях, написанный мной, я расскажу чуть подробнее, но для глубокого анализа технологий я буду обновлять этот пост, чтобы можно было оставить ссылки на посты reenigne, VileR и Scali. Мы надеемся, что этот рассказ привлечёт интерес к «олдскульному» программированию ПО для платформы. После прочтения этого обзорного поста рекомендую пройти по ссылкам на статьи, где подробнее рассматриваются отдельные части демо.
              Читать дальше →
              • +35
              • 11,8k
              • 8
            • Go: ускоряем выборку больших таблиц из MySQL

                Я использую Go для написания рекламной сети вот уже почти год. Разработку веду на сервере Intel i7-7700, 16Gb RAM, 256Gb SSD. И в скрипте который выполняется раз в сутки появилась задача выбрать все показы за прошедшие сутки и пересчитать на этой основе статистику за день сразу по нескольким объектам (сайт, кампания, баннер).

                По идиомам Go делается всё достаточно тривиально:
                Читать дальше →
              Самое читаемое