Обновить
16K+

Assembler *

Язык программирования низкого уровня

38,5
Рейтинг
Сначала показывать
Порог рейтинга
Уровень сложности
Формат публикации

Частотомер с БИХ-фильтром НЧ в 1 Кбайте на ATtiny13 и на что способен этот «малыш»

Уровень сложностиСредний
Время на прочтение12 мин
Охват и читатели11K

Появилась необходимость сделать частотомер для настройки бензинового генератора. Т.е. сама по себе задача простая: измерить частоту синусоидального напряжения в пределах 40..70 Гц с точностью около ±0.1 Гц, но при условии больших шумов и искажений, которые возникают при работе генератора. Для этого уже сделаны много вариантов приборов, но был «спортивный интерес» и азарт. На макетке был установлен один из самых простых и легких микроконтроллеров ATtiny13.

Читать далее

От игрушки с рандомными опкодами до 4-битной машины времени: как я собрал настоящий Intel 4004

Уровень сложностиСредний
Время на прочтение25 мин
Охват и читатели8.6K

Как я переписал свой старый эмулятор с нуля: теперь это не игрушка с рандомными опкодами, а полноценная машина времени с ассемблером, линкером, BASIC, виртуальными дискетами, монитором и Тетрисом, который ломается ровно так, как ломался бы на реальном железе 1971 года.

Читать далее

Частотомер с БИХ‑фильтром НЧ в 1 Кбайте на ATtiny13 или как запрячь одну лошадь в три телеги

Уровень сложностиСредний
Время на прочтение15 мин
Охват и читатели7.8K

Появилась необходимость сделать частотомер для настройки бензинового генератора. Т.е. сама по себе задача простая: измерить частоту синусоидального напряжения в пределах 40..70 Гц, но при условии больших шумов и искажений, которые возникают при работе генератора, с точностью около ±0.1 Гц.

Когда речь заходит о микроконтроллере ATtiny13, большинство представляет себе простые «мигалки», таймеры, или, в лучшем случае, драйверы фонариков. Но что, если бросить вызов и выжать из этого «малыша» максимум, превратив его в полноценный вычислительный узел.

Пожалуй, в рамках одной статьи не получится рассказать обо всем проекте. Прибор получился весьма нагруженный:
а) динамическая индикация на одном сдвиговом регистре 74HC164 на 3-х пинах;
б) ФНЧ с применением 2-х каскадного БИХ‑фильтра (фильтр с бесконечной импульсной характеристикой или IIR‑фильтр от англ. Infinite Impulse Response) — это линейный цифровой или электронный фильтр, в котором выходной сигнал зависит не только от текущих и прошлых входных значений, но и от предыдущих значений самого выхода);
в) аппроксимация точки перехода синусоиды через 0 (для увеличения точности до ±0.1Гц);
г) счетчик и табличный преобразователь для получения частоты со сглаживанием результата на 32 измерениях;
д) температурная подстройка частоты внутреннего RC‑генератора при помощи датчика ds18b20.

Читать далее

Прошивка 8-битных МК по одному проводу: как устроен бутлоадер в vm5277

Уровень сложностиСредний
Время на прочтение20 мин
Охват и читатели13K

vm5277 — это универсальный инструментарий для embedded-разработки, который связывает мир высокоуровневого ООП (язык j8b с Java-подобным синтаксисом) с нативной компиляцией под 8-битные микроконтроллеры (AVR, PIC, STM8).

Сегодня я разберу, как в vm5277 устроена прошивка МК по одному (или двум) проводам, почему я заменил стандартные механизмы собственным бутлоадером и что это даёт на практике.
Это решение упрощает прошивку, коммуникацию с программой и отладку, реализуя бесшовное взаимодействие с микроконтроллером на всём цикле разработки.

Читать далее

Бульник. Странная, ничего не делающая игра

Время на прочтение4 мин
Охват и читатели8.3K

Наткнулся в каталоге игр для Радио 86РК на интересную строчку.

Игра Бульник
Странная, ничего не делающая игра.

Дизассемблированный код всего три строчки.

lxi h,$0109
call $f818
hl
t

Конец истории?

Анализ выводимых данных пролил свет на то, как почти 40 лет назад делали картинки.

Читать далее

Компьютерное зрение на микроконтроллере за $2: SIMD на ESP32-S3 ускорил FAST в 2,2 раза

Время на прочтение4 мин
Охват и читатели13K

У ESP32-S3 есть 128-битные SIMD-инструкции, но примеров кода под них почти нет: автор нашёл всего три источника. Он написал на них детектор углов FAST и упёрся в два ограничения набора инструкций. Невыровненные блоки пикселей напрямую не читаются, а сравнивать можно только знаковые байты, причём вся арифметика с насыщением, так что вычесть 128 из беззнакового пикселя обычным вычитанием нельзя. Первое обошла инструкция, которая вырезает кусок из двух склеенных регистров, второе — XOR с 0x80. Итог в тестах автора — 11,2 мегапикселя в секунду вместо 5,1: этого хватает на поток VGA при 30 кадрах в секунду.

Читать далее

Интро для ZX Spectrum в 2026 году

Время на прочтение30 мин
Охват и читатели15K

Введение

В конце 80-х я кучу времени просидел скрючившись за своим ZX Spectrum, вводя программы на Sinclair BASIC и скопированные из журналов рудиментарные ассемблерные процедуры в попытках воссоздать интро крэков с Amiga, которые видел дома у друга. Разумеется, тогда я так и не смог добраться до этой цели, но теперь, спустя много десятков лет, мне наконец‑то это удалось! Я стал гордым автором написанного вручную ретро‑интро, работающего на стандартном Spectrum с 128 КБ. В нём есть все отличительные признаки демо конца 80-х: текст с плавным скроллингом (в крутых самодельных шрифтах!), трёхканальный саундтрек AY, скачущие индикаторы громкости и обязательное звёздное небо с параллаксом. Код занимает 10 287 байт, а полный образ плёнки — 19 552 байта; учитывая, что я работал над демо с 13 декабря прошлого года, средняя скорость написания кода составила приблизительно 455 байт в неделю!

В этом посте я расскажу, как добился этого, поделюсь изученными мной трюками и перечислю всё, чему мне пришлось научиться (и вспомнить) о Speccy и ассемблере Z80. Это один из моих самых любимых хобби‑проектов, но в то же время из‑за него мне зачастую хотелось пнуть монитор. Всем этим я поделюсь в конце статьи, а если вы просто хотите посмотреть на готовый результат, то скачайте образ кассетной плёнки .tap, который можно загрузить в любой эмулятор. Также можно посмотреть запись на YouTube, перейти по ссылке на pouet.net и запустить демо через браузер, зайдя на мой TNFS‑портал сайта и выбрав пункт 4 Recent uploads.

Читать далее

CactOS 2.0.0: последний релиз x86_32

Уровень сложностиСложный
Время на прочтение9 мин
Охват и читатели8.6K

CactOS — гибридное монолитное ядро для i686 на C и Rust. В 2.0.0: ABI сокращён с 95 сисколлов до 15, модули подписываются ECDSA P-256 с vermagic-отпечатком, VFS переписан на Rust, добавлен энергогоvernor для SMP с per-core runqueues. Suspend вырезан из-за ненадёжного resume. Репозиторий x86_32 уходит в архив после тега v2.0.0.

Читать далее

Как я простенький keygen писал

Уровень сложностиСредний
Время на прочтение6 мин
Охват и читатели5.8K

Это моя первая статья подобного рода(да и в целом любого рода), в которой я покажу как писал keygen для простенького приложения. Я использовал динамический анализ через x96 dbg, плюсы для keygen'а, и, конечно же, родненький ассемблер. Статья предназначена для новичков в реверсе и всех, кто хочет что‑то вспомнить. Если зайдет — это может превратиться в серию статей с повышающимся уровнем сложности реверса, но это в мечтах, а пока к сути.

Да давай уже

Режимы работы x86-процессора

Уровень сложностиСредний
Время на прочтение11 мин
Охват и читатели5.6K

Я пишу свою ОС и загрузчик для x86_64, параллельно изучая в CS и низкоуровневую разработку. Эта статья — подробный обзор, где я разбираю основу, на которой держится вся архитектура x86: как процессор оперирует битами, механика его работы в 16-битном, 32-битном и 64-битном режимах, с углублением в каждый из них.

Читать далее

Дизассемблер для arm64, x86-64, i386, WebAssembly, .NET и Java — в одном HTML-файле

Уровень сложностиПростой
Время на прочтение2 мин
Охват и читатели8.5K

Всем уже надоели клоны (их есть у меня) и спекуляция на чужом имени — хочется увидеть что-то по-настоящему новое и полезное.

Встречайте дизассемблер для ARM64, 32-битного ARM, x86-64, i386, WebAssembly, .NET (CIL) и байт-кода Java: файлы Mach-O, ELF, PE, APK и IPA из macOS, iOS, Linux, Android и Windows. Один HTML-файл, работает без сети, ничего не отправляет — скачиваете на дискету, и этот инструмент с вами навсегда. Всё уместилось в 1,22 МБ.

Читать далее

Модуляция CPFSK и не только в квадратурах на микропроцессорах STM32

Время на прочтение10 мин
Охват и читатели91K

Добрый день, уважаемые коллеги!

Начнем с того, что побудило написать статью.

Я инженер, который ранее работал в организациях, которые так или иначе были связаны с проектированием, производством и поставками оборудования и микросхем для систем связи. В наши задачи входила работа с протокольным уровнем систем связи, проектирование устройств и стабилизация их параметров с применением калибровок. Это мир большого телекома. На работе мы пользовались весьма серьезными приборами вроде CMW-270, FSL-6, FSQ-8, векторными анализаторами и много-гигагерцовыми осциллографами Agilent. А дома у меня маленький мирок в котором приборы значительно проще. И процессоры проще. Но интерес тот же. Вот и попробуем сделать кое что интересное из этой сферы.

Некоторое время назад планировал собрать радио-модем. Первое что пришло в голову, это старенький протокол AX.25, который де-факто нижним уровнем использует модуляцию CPFSK. Сказано-сделано. Модемную часть планировалось реализовывать на знакомом ядре Cortex M3 и оптимизировать его работу.

Итак. Нам предстоит работать с модуляцией Continuous-Phase Frequency-Shift Keying (CPFSK). Эта модуляция является разновидностью частотной модуляции при которой не происходит разрыва фазы. Давайте разработаем эффективный модулятор на микроконтроллере STM32.

В результате, получим функции на Assembler Corex M3, позволяющие относительно быстро синтезировать гладкие сигналы с непрерывной фазой.

Читать далее

Как я вернул LAN-кооп в Neverwinter Nights 2 на Switch

Уровень сложностиСредний
Время на прочтение9 мин
Охват и читатели15K

Как вернуть LAN-режим в Neverwinter Nights 2 на прошитой Switch: без аккаунта Nintendo, без подписки, по локальной сети между двумя консолями. Разбор ARM64-кода, отладка GDB прямо на консоли и готовый патч для Atmosphere.

Читать далее

Ближайшие события

Когерентная демодуляция CPFSK на микроконтроллерах семейства ARM Cotex M (STM32F103 — STM32H750)

Уровень сложностиСложный
Время на прочтение13 мин
Охват и читатели13K

Доброго времени суток, уважаемые посетители Habr!
Данная статья будет короткой, но полезной.

В одной из предыдущих статей, уже описывал вычисление sin(x)/cos(x) с применением разложения в ряд Фурье с фиксированной точкой. Вычисление тригонометрических функций, в моем случае занимало порядка 125-130 тактов на пару (sin+cos) на процессорном ядре Cortex M7 (STM32H750). При этом, код компилировался для архитектуры Cortex M3. Точность sin/cos просчитанного таким образом составила менее 1.5LSB. Google посчитал ее как 1.2-1.3LSB, с минимальной дисперсией. Это уже дало динамический диапазон ~183dB. Для сравнения, полный динамический диапазон человеческого уха 120dB от болевого порога до шелеста листвы. А динамически диапазон звука который человек слышит одновременно порядка 40-60dB. Несколько позже поясню для чего приведено сравнение.

В общем и целом такого динамического диапазона и скорости уже достаточно чтобы производить операцию квадратурной свертки сигнала с частотой дискретизации до 450-500KHz. Кстати, на STM32F103C8T6, это заняло бы ~1.8uS на квадратурный отсчет. Т.е. с отключенными прерываниями процессор бы успел выполнить расчет одного бина честного преобразования Фурье в реальном времени. Это эквивалентно квадратурной демодуляцию на одной произвольной поднесущей до частоты 250КГц (хотя лучше брать Fsample/4 ), что позволяет работать с полосой до 125КГц, на простом контроллере в реальном времени.

Однако, этого мало для полноценной обработки сигналов. И тут я задумался. Как можно значительно повысить скорость работы и почти не потерять в точности? Первое что сделал,- разбил преобразование на блоки, фаза которых непрерывна. Это позволило работать с блоками отсчетов, которые, затем можно суммировать скользящим окном со сложностью O(1). Это привело к эффекту квадратурной демодуляции сигнала и без повышения сложности позволяло работать с малыми временными сдвигами. Фактически пришел к поблочной корреляция. Нечто вроде временного Rack-приема.

Читать далее

Симулятор микропроцессоров: запускаем BASIC и не только

Уровень сложностиСредний
Время на прочтение28 мин
Охват и читатели11K

Со времени написания последней статьи я продолжал работу над I8086 и практически закончил его реализацию, но было бы странно приходить с материалом типа “я добавил поддержку еще одного процессора”. Я решил основательно подготовиться к этой публикации.

Читать далее

Эволюция эксплуатации переполнения буфера в Windows: от Stack Smashing до ROP и CET

Уровень сложностиСредний
Время на прочтение19 мин
Охват и читатели7.5K

Как менялась эксплуатация переполнений буфера в Windows за последние десятилетия?

Рассмотрим путь от классического Stack Smashing до современных механизмов защиты потока выполнения. На практике рассматриваются x86-техники переписывания EIP, NOP-sled, JMP ESP, эксплуатация SEH, переход к ROP как способу обхода DEP.

Практически продемонстрированы примеры создания и эксплуатации указанных уязвимостей.

Читать далее

Как я запустил Bad Apple с частотой 20 fps на E‑Ink дисплее за $71

Уровень сложностиСложный
Время на прочтение14 мин
Охват и читатели18K

Мне удалось запустить полноценное чёрно-белое видео на стоковой плате ESP32-S3 с экраном на электронных чернилах: никакой ПЛИС и никакого ПК — панель управляется напрямую по параллельной шине. В статье я подробно расскажу, как работает этот драйвер. Если коротко, то в нём используется векторный блок, принимающий по 64 пикселя за раз; управляющие сигналы (waveforms), которые хранятся в регистрах, а не в таблицах, и дельта-движок, который обрабатывает только изменения. При этом точность всей системы контролировалась с помощью планшетного сканера.

Читать далее

MLow — голосовой кодек звонков WhatsApp *

Уровень сложностиСредний
Время на прочтение8 мин
Охват и читатели7.7K

Когда вы звоните в WhatsApp, Messenger или Instagram*, ваш голос, скорее всего, сжимает не Opus, а MLow — собственный низкобитрейтный кодек Meta*, созданный для плохих сетей и слабых смартфонов. Компания рассказала о нём в инженерном блоге, но ни спецификации, ни исходников, ни описания формата кадра нет.

Эта статья о том, как мы восстановили кодек по его поведению и написали совместимую реализацию на Go без cgo и сторонних зависимостей. Сначала мы дважды ошиблись в том, что это вообще за кодек. Ещё были «электронные пищалки» в эфире, и под конец пришлось честно признать, что чужой код лучше нашего.

Читать далее

Маленькие тонкости большого дела

Уровень сложностиСложный
Время на прочтение27 мин
Охват и читатели7.6K

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

И причина простая как 2х2. Весь обмен информацией теперь шифруется и подписывается. А это, как ни крути, умножение и сложение больших чисел

Любая передача информации, денег, команд и знаний нынче требует стандартных шагов: зашифровать-расшифровать и проверить. А это, в основном, именно те самые умножения и сложения больших чисел в большом количестве.

Ну и поскольку самый наш любимый размер это 256 битовые числа, то попробуем кое-что тут посмотреть интересного.

глянем в суть

Zed: Великий и ужасный

Уровень сложностиСредний
Время на прочтение14 мин
Охват и читатели9.8K

Zed — новый редактор, написанный почти полностью на Rust. Своим слоганом он сразу заяляет то, для чего предназначен: Zed — Your last next editor.

Для меня Zed оказался нужен по следующим причинам: не устраивало наличие 5+ редакторов под разные языки программирования; требовалось иметь интеграцию с ИИ, чтобы тот мог вносить точечные изменения в код с автозапуском тестов и генерировать коммиты; хотелось найти что-то полегковеснее условных PyCharm, Intellij IDEA и им подобных; искал редактор, который без проблем сможет работать с WSL (в принципе, подходит большинство, но возвращаемся к вопросу о числе редакторов для разных проектов, так что нужно было “1 раз и чтобы навсегда”)

Я прошел через стадию отрицания при настройке (нет обычных кнопок Run и Debug, повсюду! Максимально непривычный интерфейс), но когда всё заработало, остался лишь один вопрос: почему я не слышал о Zed раньше?

Читать далее
1
23 ...