Forums Logo

Здравствуйте Гость ( Вход | Регистрация )

[ Каскадный ] · Стандартный · Линейный

> Программирование на Famicom/NES/Денди в IDE Nesicide, Программирование NES в асме CA65 и IDE Nesicide

aa-dav
post Четверг, 02 апреля 2020, 08:27
Отправлено #1


Фанат
***

Группа: Пользователи
Сообщений: 180
Регистрация: 20 апр. 2017
Пользователь №: 58 717





Давно уже я написал руководство по программированию на Game Boy Advance, скорее всего единственное на русском языке и как там писал присматривался и к денди, но не нравилась мне хардкорность программирования на столь древней системе.

Однако недавно я наткнулся на одну довольно интересную IDE — Nesicide https://knob.phreneticappsllc.com/nesicide/ которая сильно снизила для меня порог вхождения в это дело и... ретроэнтузиаст во мне проснулся и закипела работа над уроками по программированию на Famicom/NES/Денди в ядрёном ассемблере как завещали предки: http://hype.retroscene.org/blog/967.html

Уроки находятся в процессе написания и будут появляться новые.

Результаты уроков выглядят пока не особо зрелищно, но такова суть уроков.
Первый урок показывает скроллинг заднего фона заполненного разными символвами:



Второй показывает работу с 64 возможными спрайтами на платформе — они выстроены в лесенку с перекрытием, а два летают свободно:



Второй показывает технику HBlank–отсечения с помощью zero–sprite–hit — то как в играх типа Super Mario или Bomberman реализовывалась неподвижная полоска игровой статистики с одного из краёв экрана:



Четвёртый урок демонстрирует возможности звукового драйвера FamiTone2 от известного в узких кругах ретроэнтузиаста Shiru:



Этот драйвер может воспроизводить музыку и звуки созданные в программе Famitracker, но в отличие от драйвера самого Famitracker заточен под игровое применение.

Пятый урок демонстрирует переключение банков памяти программы/данных в картридже с маппером MMC3 и когда на экране меняются строки - они находятся в разных страницах расширенной памяти картриджа (сверх 32Кб консоли без апгрейдов):



Урок шестой: перехват прерывания IRQ по счётчику сканлайнов при маппере MMC3 демонстрирует полноэкранную картинку (что нетривиально сделать в тайловой графике денди с ограничением 256 тайлов на стандартный кадр):
user posted image

Урок седьмой - полноценный перехват прокрутки по прерыванию от счётчика сканлайнов маппера MMC3:


Этого всего уже достаточно чтобы написать игру уровня Darkwing Duck, Contra Force и т.п.

В связи с вынужденными коронавыходными возможно у кого то из вас возникнет не только желание, но и время поковыряться в этих древних древностях и прикоснуться к ним так сказать вживую.

Стоит заметить так же, что на хабре существует перевод статьи про программирования на NES на языке C: https://habr.com/ru/post/348022/

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

Сообщение отредактировал aa-dav - Суббота, 25 июля 2020, 11:25
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
 
Reply to this topicStart new topicStart Poll
Ответов
dimm0505
post Пятница, 24 апреля 2020, 21:54
Отправлено #2


Console Addict
Group Icon

Группа: Супермодераторы
Сообщений: 30 264
Регистрация: 21 янв. 2007
Из: СПб
Пользователь №: 20 637





А вам так слабо? lol2.gif



--------------------
Switch2/Xbox Series X/Steam Deck LE White/Quest 2/Retroid Pocket 4 Pro/Anbernic 35xx+
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
aa-dav
post Суббота, 25 апреля 2020, 05:11
Отправлено #3


Фанат
***

Группа: Пользователи
Сообщений: 180
Регистрация: 20 апр. 2017
Пользователь №: 58 717





QUOTE (dimm0505 @ Пятница, 24 апреля 2020, 21:54)

А вам так слабо? lol2.gif
*


Хехе, между прочим про это будет следующий мой урок с которым я весьма затормозился с этим коронавирусом и рядом еще обстоятельств, хочу еще какую-нибудь красивую графику замутить и это требует времени разработать парочку утилит по созданию банков графики...
Так вот - третий урок демонстрирующий технику HBlank-отсечения посредством zero-sprite-hit и видео с ним выше является претдечей к тому как сделана эта демка.
Из коробки консоль может в одном месте видеоизображения поменять параметры прокрутки заднего фона и это чаще всего использовалось для создания неподвижных статус-панелей.
Но во первых это можно было сделать только 1 раз за кадр и во вторых эта техника сильно жрёт ресурсы процессора, т.к. ему нужно явным образом в цикле постоянно опрашивать видеочип не достиг ли тот обозначенного нулевого спрайта.
В результате когда в картриджи начали встраивать мапперы расширяющие возможности консоли то появился очень полезный механизм счётчика сканлайнов который позволяет сгенерировать прерывание по достижению определенного сканлайна - процессор по наступлению прерывания откладывает работу которой занимался до, перескакивает на код обработчика прерывания и потом возвращается обратно как ни в чём не бывало. В результате стало возможным менять параметры прокрутки заднего фона много раз за кадр и при этом намного более экономно использовать ресурсы процессора.
Но некоторые игры умудрялись подменять параметры скроллинга вообще в каждом сканлайне.
Например в игре Gun Dec переходный экран к боссу "расслаивался" на чётные и нечётные строки которые улетали в разные стороны. Каждая.
Или вот эффект парящего дыма у босса отхватывает солидный кусок экрана делая разную прокрутку в каждой строке:
user posted image
В общем это ключевой момент и демки Axelay - перехватывать параметры прокрутки в каждом сканлайне. Там можно еще порассуждать о том не используются ли еще дополнительные трюки чтобы успевать в очень узкое временное окно, но основная идея понятна.

Так вот и какую хитрую вещь демка делает - на самом деле задний фон просто прямоугольный кусок "текстуры" без каких либо искажений прокручиваемый сверху в низ. Но это в видеопамяти. А на экране прокрутка подменяется в каждой строке так что вверху экрана попиксельные строки "текстуры" пропускаются, проскакивают сразу на 2-3 вниз, а снизу экрана наоборот сканлайны как бы застревают на одной и той же строке "текстуры" несколько раз выводя одну и ту же строку. И да, это эквивалентно сжатию изображения по вертикали сверху и растяжению снизу - грамотно комбинируя эти отставания и опережения прокрутки чувак реально создал крайне нетипичный для NES эффект имитации перспективного искажения как будто мы в 3Д.

Действительно была бы такая игра в своё время она произвела бы много впечатлений. Но вот не припомню ничего такого. Самое близкое что можно припомнить - гоночные симуляторы с эффектом дороги уходящей вдаль и змеящейся влево-вправо, там скорее всего тоже подменой прокрутки в каждом сканлайне такое делается.
User is offlineProfile CardPM
Go to the top of the page
+Quote Post

Posts in this topic
aa-dav   Программирование на Famicom/NES/Денди в IDE Nesicide   Четверг, 02 апреля 2020, 08:27
terek   Просто хотел сказать - это круто что ты делаешь...   Четверг, 02 апреля 2020, 15:38
aa-dav   Спасибо. :)   Четверг, 02 апреля 2020, 18:13
Boris   aa-dav ваша доброта не знает границ, браво! П...   Четверг, 16 апреля 2020, 16:20
aa-dav   Спасибо опять за тёплые слова. :) Буду рад если ...   Четверг, 16 апреля 2020, 18:30
dimm0505   А вам так слабо? :woot: https://youtube.com/wat...   Пятница, 24 апреля 2020, 21:54
dimm0505   Хочу заметить, что на технике HBlank отсечения раб...   Суббота, 25 апреля 2020, 08:43
aa-dav   Готов следующий урок - перехват прерывания IRQ по ...   Четверг, 25 июня 2020, 19:19
aa-dav   Доделываю последний урок по мапперу MMC3 и полноце...   Четверг, 02 июля 2020, 09:38
aa-dav   Для меня это какая то мистическая загадка, если че...   Понедельник, 06 июля 2020, 19:55
Oreanor   бро, у меня есть, я хоть и не распаивал ничего, но...   Понедельник, 06 июля 2020, 22:20
aa-dav   О, круто! Заранее спасибо! Я тогда вкратц...   Вторник, 07 июля 2020, 06:12
Oreanor   на IQ-2000: совсем без глитчей только OD, OE и OF....   Вторник, 07 июля 2020, 11:57
aa-dav   Большое спасибо! Значит точные допуски дейст...   Вторник, 07 июля 2020, 15:36
Oreanor   пожалуйста! Если что-то еще надо будет потести...   Вторник, 07 июля 2020, 16:19
aa-dav   Уффф, всё, цикл моих статей о том как программиров...   Четверг, 16 июля 2020, 16:43
dimm0505   Серьезная работа! Сделал бы ты еще какую-нибуд...   Четверг, 16 июля 2020, 19:28
Oreanor   Сколько ни смотрю на ассемблерный код, так и не мо...   Четверг, 16 июля 2020, 20:19
aa-dav   Спасибо. Типа справочника в каком смысле? В како...   Пятница, 17 июля 2020, 03:29


Reply to this topicStart new topic
1 чел. читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
 

Упрощённая версия Сейчас: Вс., 29 июня 2025, 13:35
Skin Designed (c) by Rooq.net, All Rights Reserved.