Как стать автором
Обновить
0
@Zara6502read⁠-⁠only

Пользователь

Отправить сообщение

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

Время на прочтение11 мин
Количество просмотров4K


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


Содержание:

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

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

Числа с фиксированной запятой для NES/DENDY

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

Консоль Dendy в первую очередь ассоциируется с относительно простыми играми (Super Mario Bros, Duck Hunt, Battle City и т. д.), которые обычно не требуют сложных расчётов и обходятся целочисленной математикой. Но как только нужно сделать трёхмерную графику или сложную физику, сразу появляется потребность в точных вычислениях и дробных числах.

Самым простым и быстрым способом программного представления дробей являются числа с фиксированной запятой (Fixed‑point числа). О реализации такой арифметики для NES/Dendy мы и поговорим.

Читать далее

Как математически просчитать градиент цветовой палитры

Уровень сложностиПростой
Время на прочтение3 мин
Количество просмотров1.9K

Начать хотелось бы с предыстории и задачи, которую я решаю на работе. Есть сайт, фотографии на котором при публикации должны подходить под определенное соотношение сторон (3х2). При этом в работе часто возникают определенные трудности. Например, что делать, если автор сделал скрин-шот, который не соответствует этому соотношению?

Здесь помочь может дизайнер, который вставит изображение на подходящий фон, или просто при загрузке выбирать, какую часть изображения придется отрезать. Оба варианта по своим причинам неудобны. Первый — из-за времени, второй — из-за потери содержания. Отсюда и родилась задача написать сервис, который автоматически будет выполнять работу дизайнера: возьмет изображение и поместит его в рамки с необходимым соотношением сторон. Получится примерно следующее:

Читать далее

Детальный взгляд на Breadbox Ensemble. Что умела продвинутая оболочка для MS-DOS?

Время на прочтение5 мин
Количество просмотров10K

Привет, любители старого «железа». Это Антон Комаров, и сегодня мы изучим ИТ-артефакт, одно из имен которого — Breadbox Ensemble. Это графическая оболочка для MS-DOS, которая значительно опередила свое время. К примеру, концепция меню «Пуск» в ней появилась на 2,5 года раньше, чем в Windows 95. Компанию-разработчика, Berkeley Softworks, пытались купить Microsoft, Apple Notebooks и Sun Microsystems. Но руководство не согласилось, решив продолжить самостоятельное «плавание». И оно было довольно успешным: последняя версия оболочки вышла аж в 2009 году.

Так что заваривайте себе чайку, доставайте печеньки и давайте посмотрим, ради чего в начале 90-х шла нешуточная борьба между крупнейшими софтверными корпорациями. И как Breadbox Ensemble повлияла на внешний облик операционных систем того времени. Приятного чтения.

Читать далее

Как кандидат наук продал 230 000 экземпляров своих книг с намеком на мат в заголовке

Уровень сложностиПростой
Время на прочтение16 мин
Количество просмотров62K

Мой первый успех в литературе случился в 17 лет. Тогда я стал призёром олимпиады по русскому языку среди абитуриентов в вузы с сочинением: “Почему еврей Розенталь устанавливает правила русского языка”.

Читать далее

Нахождение сильно преобладающего элемента последовательности >n/2 (алгоритм большинства голосов Бойера-Мура)

Уровень сложностиПростой
Время на прочтение3 мин
Количество просмотров3.8K

Пару статей назад я уже рассматривала один из алгоритмов Бойера-Мура, с помощью которого можно было найти подстроку в строке.

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

Предлагаю сразу использовать его на примере задачи «Majority Element» с leetcode.

Условие здесь: https://leetcode.com/problems/most-frequent-even-element/description/

Кстати, у меня есть телеграм-канал, где пишу подходы к решениям всяких задачек с LeetCode, там больше разборов конкретных задач, чем здесь, потому что не всегда нужна статья. В общем, если интересно - жду здесь - t.me/crushiteasy :)

Возвращаемся к Муру!

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

Не супер очевидно, но это число занимает больше половины элементов массива, т.е.

Читать далее

Doom в mindustry? Псевдо-3D движок, финал

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

В прошлой статье мы забыли упомянуть FOV (Field of view). По сути это угол обзора, в котором все лучи лежат равномерно с разницей, допустим, в ~1⁰.

К текущей статье мы успели заменить мелкую ячейку памяти настроек cell1, на банк настроек памяти bank12, bank2, bank1 (в зависимости от процессора).

Также мы решили убрать редактор карты, ведь он только запутывал людей, хотевших пользоваться нашим псевдо-3D движком, и теперь она создается автоматически.

Ещё изменился внешний вид нашего псевдо-3D движка, теперь он более аккуратный...

Читать далее

Как я создал архиватор из задачки с техсобеса: сжатие файлов с помощью RLE

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

Привет, меня зовут Рома. Я работаю в отделе спецпроектов KTS на позиции Python backend-разработчика. 

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

Читать далее

Firefox не только самый быстрый, но и самый эффективный браузер

Уровень сложностиСредний
Время на прочтение5 мин
Количество просмотров40K

Несколько месяцев назад мы публиковали результаты тестов Speedometer 3.0, согласно которым Firefox сохраняет преимущество в производительности перед Chrome.

А сейчас появились доказательства, что Firefox не только быстрее, но и эффективнее Chrome по некоторым параметрам. В частности, по работе с памятью.
Читать дальше →

Лабиринты: классификация, генерирование, поиск решений

Время на прочтение44 мин
Количество просмотров93K

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

Классификация лабиринтов


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

Как я реализовал процедурную генерацию лабиринтов в своей игре

Уровень сложностиСредний
Время на прочтение22 мин
Количество просмотров9.2K

Приветствую вас! Меня зовут Денис, я разрабатываю игры на Unity, и сегодня я расскажу о том, как устроена генерация лабиринтов в игре, которая находится на данный момент в разработке.

Это не коммерческий проект (хотя есть планы по выпуску игры в Google Play), а мой личный, так что в конце статьи вас ждёт технодемка.

Читать далее

Андреас Клинг, его операционная система SerenityOS и браузер Ladybird

Уровень сложностиПростой
Время на прочтение7 мин
Количество просмотров14K


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

Взять к примеру шведского программиста Андреаса Клинга (Andreas Kling). В 2018 году он вышел из государственной клиники реабилитации наркоманов после трёхмесячного курса — и в качестве хобби начал разработку операционной системы SerenityOS. Нужно было чем-то занять свободное время и избавиться от посторонних мыслей. Создание новой ОС вполне подходит для такой задачи.

За несколько лет SerenityOS стала одним из крупнейших опенсорсных проектов в мире с тысячами контрибуторов. Приятный интерфейс в стиле 90-х, Unix-подобное ядро и лучшие идеи из других ОС — вот рецепт успеха.
Читать дальше →

Экран для вывода данных через COM-порт

Уровень сложностиПростой
Время на прочтение3 мин
Количество просмотров10K
Если у компьютера нет не только монитора, но и даже видео-выхода, а показания датчиков хотелось бы видеть, то решением может быть отправлять данные в виде строки в COM-порт, который будет слушать микроконтроллер и отображать приходящую строку на своём дисплее. Под катом простейшая реализация этого на микроконтроллере ATtiny13 и 0,96'-экране SSD1306 с разрешением 128х32.


Читать дальше →

Быстрое вычисление степени

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

В статье описан процесс разработки алгоритма функции вычисления любой степени положительного числа, использующего «магическую константу». Приведены результаты её сравнения с исходной функцией вычисления обратного квадратного корня, а также со стандартной функцией вычисления степени Math.Pow.

Читать далее

Укрощаем суммы с плавающей запятой

Уровень сложностиПростой
Время на прочтение9 мин
Количество просмотров9.9K

Допустим, у нас есть массив чисел с плавающей запятой, и мы хотим их суммировать. Можно наивно подумать, что их достаточно просто сложить, например, на Rust.

Однако это запросто может привести к произвольно большой накопленной погрешности. Давайте проверим:

naive_sum(&vec![1.0; 1_000_000]) = 1000000.0
naive_sum(&vec![1.0; 10_000_000]) = 10000000.0
naive_sum(&vec![1.0; 100_000_000]) = 16777216.0
naive_sum(&vec![1.0; 1_000_000_000]) = 16777216.0

Ой-ёй… Что произошло? Проблема в том .что следующее 32-битное число с плавающей запятой после 16777216 — это 16777218. Так что при вычислении 16777216 + 1, значение округляется до ближайшего числа с плавающей запятой, имеющей чётную мантиссу, то есть снова до 16777216. Мы зашли в тупик.

К счастью, есть более совершенные способы суммирования массива.

Читать далее

Матричный шрифт с анимацией на микроконтроллере

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

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

Читать далее

Город в бутылке — движок Raycasting всего на 256 байт

Время на прочтение8 мин
Количество просмотров17K

Привет любителям микро-кодирования. Вот вам кое-что невероятное: крошечный движок raycasting (метод “бросания лучей”) и генератор городов, который помещается в отдельный 256-байтовый HTML-файл.

Читать далее

Демо City In A Bottle – система рейкастинга в 256 байтах

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

Привет всем любителям size coding, сегодня я расскажу о чём-то потрясающем: крошечном движке трассировки лучей (raycasting) и генераторе города, умещающихся в автономном файле HTML размером 256 байтов.

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

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

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

Читать далее

Delta-Rle-Huffman (DRH) Texture Format

Время на прочтение8 мин
Количество просмотров4.2K

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

Внимание! В статье много картинок.

Кому интересно, добро пожаловать под кат!

Compiler Explorer — уникальный проект для исследования компилируемого кода

Уровень сложностиСредний
Время на прочтение7 мин
Количество просмотров14K
Этот пост посвящён замечательному инструменту, полезному для каждого, кто интересуется компиляторами или архитектурой компьютеров. Это Compiler Explorer, который я в дальнейшем будут называть CE.

CE — потрясающий инструмент. Если вы с ним не знакомы, то прервите чтение и перейдите на веб-сайт CE, где вы увидите примерно такой экран:

Предупреждение: вы забираетесь в «кроличью нору», на которую можете потратить несколько часов своего времени.


В основе CE лежит очень простая идея. Достаточно ввести исходный код в левую панель, и сайт мгновенно покажет вам на правой панели скомпилированный результат (обычно на языке ассемблера).

CE поддерживает 69 языков, более двух тысяч компиляторов и широкий спектр архитектур, включая x86, arm, risc-v, avr, mips, vax, tensa, 68k, PowerPC, SPARC и даже древний 6502.

То есть теперь для просмотра результата работы компилятора достаточно открыть godbolt.org и скопировать туда блок кода.

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

Информация

В рейтинге
Не участвует
Откуда
Россия
Зарегистрирован
Активность

Специализация

Специалист
Средний