Как стать автором
Обновить
77.22
Рейтинг

Assembler *

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

Сначала показывать
Порог рейтинга

Вычисляем π на первом процессоре от Intel — 4004

Ненормальное программирование *Assembler *Математика *Программирование микроконтроллеров *
Перевод

Как-то мне пришла в голову мысль о том, насколько же быстрее современные процессоры по сравнению с ранними экземплярами. Да, можно размышлять об этом эмпирически - зная тактовую частоту и особенности микроархитектуры (как устроен конвейер, сколько есть ALU, и т.д.), можно прикинуть производительность Intel 4004. Пусть и не в FLOPS'ах, ибо нативная поддержка чисел с плавающей запятой появилась позже. Но это будет весьма грубая прикидка, так как у этого процессора есть несколько интересных черт: разрядность только 4 бита (а не 64, как у большинства современных машин), очень скудный набор инструкций (нет даже AND'a и XOR'a!) и ограничения переферии (в частности памяти не так уж и много).

Поэтому я решил исследовать вопрос на практике. В качестве бенчмарка выбор пал на вычисления числа π. В конце-то концов, даже ENIAC в дремучем 1949 году справился с этой задачей! [2]

Читать далее
Всего голосов 97: ↑96 и ↓1 +95
Просмотры 11K
Комментарии 23

Новости

Использование procmon от sysinternals для диагностики проблемных мест в исполняемом коде

Assembler *Visual Studio * *
Из песочницы

Сразу хочу сказать, что это только демонстрация возможностей procmon для определения проблемных мест в программном обеспечении. 1С83 была выбрана для опытов из-за неочевидности способа поиска точки входа в процедуру проверки наличия установленных эмуляторов ключа. Она выполняется через различное время после старта порядка 3~10 мин, и вызывает появление окна «нарушение целостности системы» с последующим закрытием приложения. Я призываю всех использовать только лицензионное программное обеспечение. Рассматривать эту статью, как описание возможности взлома, нет смысла. Хотя бы потому, что 1С83 давно взломана и без меня. Любой 1с-ник за секунду вам скажет, как ее запустить без ключа.

Если кто не в курсе procmon от sysinternals умеет ставить перехватчик на системные события работы процессов с файлами и регистром виндуза. И хотя любой процесс плодит гигантское количество обращений к файлам и регистру при старте, да и в процессе работы тоже, использование фильтров и поиска по событиям упрощает нахождение нужного. Интересной особенностью procmon является сохранение стека вызовов у каждого события. Таким образом можно проследить какие модули и в каком месте породили то или иное событие.

Итак, ставим фильтр по имени процесса 1с.

Читать далее
Всего голосов 16: ↑15 и ↓1 +14
Просмотры 3.6K
Комментарии 5

Создание игр для NES на ассемблере 6502: скроллинг фона

Assembler *Разработка игр *Компиляторы *История IT Старое железо
Перевод


Содержание:

  • Использование PPUSCROLL
  • Системы камер
  • Подготовка фонов к скроллингу
  • Реализация автоскроллинга
  • Логические фильтры
  • Подводим итог
  • Домашняя работа

Мы уже рассмотрели отрисовку и перемещение спрайтов, но фоны мы пока только отрисовывали. NES имеет возможность плавного скроллинга фонов с точностью до одного пикселя в кадр.
Читать дальше →
Всего голосов 8: ↑8 и ↓0 +8
Просмотры 2.2K
Комментарии 1

Сортировка массивов фиксированной длины с применением SIMD

Программирование *Assembler *

Простая сортировка массива очень простая задача, в то время как эффективная сортировка очень сложная, во многом из-за простоты задачи.

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

Читать далее
Всего голосов 9: ↑9 и ↓0 +9
Просмотры 3.4K
Комментарии 7

Как мы делали Warface для Денди

Assembler *FPGA *Демосцена Старое железо Игры и игровые консоли
В октябре 2020 мне написал мой друг Андрей Скочок, работающий в Mail.ru, и предложил сделать для них необычную промоакцию.

Суть в том, что в ноябре для их игры Warface выходило обновление, и Андрею пришла в голову идея разослать различным видеоблогерам картриджи для Денди, которые будут в качестве тизера демонстрировать несколько картинок из вселенной игры, а в конце показывать промокод.



Читать дальше →
Всего голосов 238: ↑238 и ↓0 +238
Просмотры 35K
Комментарии 37

Создание игр для NES на ассемблере 6502: движение спрайтов

Assembler *Разработка игр *Компиляторы *История IT Старое железо
Перевод


14. Движение спрайтов


Содержание:

  • Zero-Page RAM
  • Подпрограммы
  • Управление регистрами для подпрограмм
  • Наша первая подпрограмма: отрисовка игрока
  • Соединяем всё вместе
  • Домашняя работа

В предыдущей главе мы создали графику фона, которая должна отображаться под спрайтами. Хотя добавление фонов делает наш проект похожим на настоящую игру, он пока всё равно совершенно статичен и не отличается от картинки. В этой главе мы узнаем, как перемещать спрайты по экрану. Для этого нам нужно внести изменения в способ отрисовки спрайтов.
Читать дальше →
Всего голосов 8: ↑8 и ↓0 +8
Просмотры 1.6K
Комментарии 0

Создание игр для NES на ассемблере 6502: графика фона

Assembler *Разработка игр *Компиляторы *История IT Старое железо
Перевод


13. Графика фона


Содержание:

  • Таблица паттернов фона
  • Составление таблицы имён
  • Таблица атрибутов
  • Дополнительные изменения
  • Использование проектов NES Lightbox
  • Домашняя работа

Прежде чем мы начнём перемещать спрайты по экрану, я хотел бы рассказать, как на NES работает графика фона. Мы изучили механику графики фона в Главе 9, а в этой главе мы рассмотрим код, необходимый для отображения фонов на экране.
Читать дальше →
Всего голосов 1: ↑1 и ↓0 +1
Просмотры 1.3K
Комментарии 0

Создание игр для NES на ассемблере 6502: ветвление и циклы

Assembler *Разработка игр *Компиляторы *История IT Старое железо
Перевод


11. Ветвление и циклы


Содержание:

  • Управление потоком в языке ассемблера
  • Ветвление
  • Обзор опкодов циклов и ветвления
  • Ещё один пример ветвления
  • Выполнение сравнений
  • Использование сравнений в циклах

В конце предыдущей главы мы успешно отрисовали на экране один спрайт, но для этого потребовался большой объём кода. В этой главе мы узнаем ещё несколько новых опкодов языка ассемблера, которые помогут нам разделить данные и логику, а также сделать код гораздо более эффективным, удобным для чтения и обдумывания.
Читать дальше →
Всего голосов 7: ↑7 и ↓0 +7
Просмотры 1.9K
Комментарии 3

Создание игр для NES на ассемблере 6502: спрайтовая графика

Assembler *Разработка игр *Компиляторы *История IT Старое железо
Перевод
image


10. Спрайтовая графика


Содержание:

  • Спрайтовые данные
  • Object Attribute Memory (OAM)
  • Работа с NES Lightbox
  • Отображение спрайтов в игре

Итак, мы рассмотрели устройство PPU на высоком уровне, и теперь готовы изучить подробности отрисовки спрайтов. К концу этой главы вы будете знать, как создавать тайлы спрайтов и отрисовывать их на экране.
Читать дальше →
Всего голосов 5: ↑5 и ↓0 +5
Просмотры 3.5K
Комментарии 5

Создание игр для NES на ассемблере 6502: Picture Processing Unit (PPU)

Assembler *Разработка игр *Компиляторы *История IT Старое железо
Перевод
image


9. Picture Processing Unit (PPU)


Содержание:

  • Палитры
  • Таблицы паттернов
  • Спрайты
  • Фоны

«Игра» для NES состоит из трёх компонентов: отображаемой на экране графики, пользовательского ввода через какой-нибудь контроллер и звука для музыки и звуковых эффектов. Игра использует пользовательский ввод для изменения отображаемой графики и воспроизводимого звука, пока пользователь не отключит систему. В этой серии глав мы рассмотрим каждый из этих трёх компонентов, начав с того, как NES отображает графику.
Читать дальше →
Всего голосов 4: ↑4 и ↓0 +4
Просмотры 1.7K
Комментарии 1

Создание игр для NES на ассемблере 6502: рефакторинг

Assembler *Разработка игр *Компиляторы *История IT Старое железо
Перевод


8. Рефакторинг


Содержание:

  • Константы
  • Файл заголовка
  • Импорт и экспорт ca65
  • Собственная конфигурация компоновщика
  • Соединяем всё вместе
Читать дальше →
Всего голосов 12: ↑12 и ↓0 +12
Просмотры 3K
Комментарии 2

Создание игр для NES на ассемблере 6502: заголовки и векторы прерываний

Assembler *Разработка игр *Компиляторы *История IT Старое железо
Перевод


6. Заголовки и векторы прерываний


Содержание:

  • Заголовки iNES
  • Выделение процедур с помощью .proc
  • Векторы прерываний

В предыдущей главе мы разобрали часть «main» тестового проекта, которая задаёт цвет фона, а затем входит в бесконечный цикл. Однако этот код составляет всего 13 из 44 строк исходного кода тестового проекта. В этой главе мы изучим оставшуюся часть кода тестового проекта и узнаем ещё несколько опкодов.
Читать дальше →
Всего голосов 7: ↑7 и ↓0 +7
Просмотры 2.4K
Комментарии 1

Создание игр для NES на ассемблере 6502: оборудование NES и знакомство с ассемблером

Assembler *Разработка игр *Компиляторы *История IT Старое железо
Перевод
image


4. Оборудование NES


Содержание:

  • Консоль
  • Картриджи
  • Как это связано с нашим тестовым проектом?
  • Цвета и палитры
  • Возвращаемся к тестовому проекту

Прежде чем приступать к разбору ассемблера, начнём с обзора самой NES.
Читать дальше →
Всего голосов 10: ↑10 и ↓0 +10
Просмотры 3.3K
Комментарии 3

Изучаем язык ассемблера на примере TSR программы под MS-DOS. Часть 1

Программирование *Assembler *Изучение языков
Из песочницы

Эта серия статей посвящена изучению и практике программирования на языке ассемблера.

Материал рассчитан на новичков в ассемблере, студентов, которым пришлось столкнуться с «динозавром» в виде MS-DOS, и может быть интересен тем, кто хочет немного узнать как функционировали операционные системы на заре своего существования.

Писать мы будем резидентную программу (TSR), которая при завершении возвращает управление оболочке операционной системы, но остается в памяти и продолжает своё существование. В современном мире близкий аналог этого понятия — демон/служба.

Программа будет выполнять следующие функции:

– вывод текста вниз экрана по таймеру,

– переключение режима отображения шрифта: italic/normal,

– русификация,

– запрет на ввод прописных русских букв,

– резидентные часы,

– вывод бинарного представления символа.

Кто готов погрузиться в палеолит — погнали!

В палеолит
Всего голосов 19: ↑16 и ↓3 +13
Просмотры 4.7K
Комментарии 17

Создание игр для NES на ассемблере 6502: приступаем к разработке

Assembler *Разработка игр *Компиляторы *История IT Старое железо
Перевод
image


2. Фундаментальные понятия


Содержание:

  • Работа с данными
  • Регистры процессора
  • Память
  • Как задаются данные
  • Как сделать данные человекочитаемыми
  • Соединяем всё вместе

Что такое компьютер?

Вопрос кажется простым, но он затрагивает самую суть того, что делаем мы как программисты. Пока скажем, что «компьютер» — это нечто, исполняющее программу. «Программа» — это просто последовательность команд, а под исполнением программы подразумевается, что команды выполняются с начала и одна за другой. (Если вы читаете программу и сами исполняете команды, то поздравляю! Вы — компьютер!)
Читать дальше →
Всего голосов 11: ↑11 и ↓0 +11
Просмотры 5.9K
Комментарии 1

Создание игр для NES на ассемблере 6502: краткая история NES

Assembler *Разработка игр *Компиляторы *История IT Старое железо
Перевод

Введение


Осенью 1990 года родители подарили мне набор Nintendo Entertainment System Action Set: серую угловатую консоль (Control Deck), два контроллера, ярко-оранжевый световой пистолет "Zapper" и картридж, на котором были Super Mario Bros. и Duck Hunt.


Консоль NES с одним контроллером. Фото Эвана Эмоса.

Control Deck подключалась к стоявшему в чулане большому ЭЛТ-телевизору RF-переключателем — по сути, это была антенна, подававшая видеосигнал из консоли на телевизор на канале 3. Это была моя первая видеоигровая консоль, и я её обожал.

В том году я проводил в чулане много времени. Поначалу и отец тоже — он проходил Super Mario Bros., выяснял местоположение секретных Warp Zones и пытался проскользнуть через опасных Hammer Bro (прим. пер.: кидающихся молотками черепах). Однажды ему удалось победить Баузера («дракона», как он его называл) и спасти принцессу, после чего он практически перестал играть в игры на NES.
Читать дальше →
Всего голосов 11: ↑11 и ↓0 +11
Просмотры 5.5K
Комментарии 4

Ловля жуков в чемодане

Блог компании RUVDS.com Ненормальное программирование *Assembler *Старое железо

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

На этапе пока я не научился шить ПЗУ, заготовки демки были реализованы ещё в оперативной памяти. И казалось бы, смени адреса, залей в ПЗУ и будет счастье. Но при попытке прошить это в постоянную память, ничего не работало. Попробовал проверить свою программу в эмуляторе и она без проблем выполнила всё именно так, как я от неё ожидал. Код даже работал при записи его частями в УМК, но целиком, со всеми прелестями, вылетал с ошибкой.

И всё никак в толк не мог взять: это лыжи не едут, либо у меня проблемы с ассемблером.

Пробегался по каждой инструкции, стал сам линкером, уже как процессор начал всё исполнять, но ошибку в коде никак не мог найти. И вот тут начинается квест жёсткого аппаратного дебага и трёх недель бессонных ночей.
Читать дальше →
Всего голосов 70: ↑69 и ↓1 +68
Просмотры 7.4K
Комментарии 52

Анализируем bound checks в Go по CPU профилю

Высокая производительность *Assembler *Системное программирование *Компиляторы *Go *

Сегодня мы будем анализировать бинарники на пару с CPU профилями, чтобы создать на их основе расширенные профили исполнения. Эти дополненные профили мы сможем использовать для оценки времени, которое программа тратит на проверки выхода за границу массивов и слайсов.


Читать дальше →
Всего голосов 26: ↑23 и ↓3 +20
Просмотры 3.2K
Комментарии 0

Ассeмблерные хаки из книги «xchg rax, rax»

Assembler *Разработка под Linux *
Из песочницы

Разбор фрагментов кода из загадочной книги, которая содержит только ассемблерный листинг и никаких комментариев. Часть 1

Читать далее
Всего голосов 97: ↑97 и ↓0 +97
Просмотры 19K
Комментарии 30

Вклад авторов