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
Ответов
aa-dav
post Четверг, 02 июля 2020, 09:38
Отправлено #2


Фанат
***

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





Доделываю последний урок по мапперу MMC3 и полноценному скроллингу с панелью состояния игры - код и видео готовы, но эта техника самая сложная что я реализовывал и хотелось бы проверить на реальном железе.
Если кому нибудь не трудно, проверьте плиз.
По ссылке https://yadi.sk/d/_THxg1gxuCCVNw это последний седьмой урок. Образ в этой же папке лежит.
Изначально направления скроллят нижнюю зону экрана которая отсчитывается от позиции Y где находится спрайт.
Если зажать (A), то начинаем двигать сам спрайт быстро.
А если зажать (cool.gif, то спрайт двигается шажками для точного позиционирования.
Смысл вот в чём - чтобы поменять параметры скроллинга нужно выдержать правильную паузу и быстро выполнить запись в порты ввода видеочипа.
Код в качестве этой паузы берёт уже координату X спрайта и разные эмуляторы показывают разный диапазон допустимых значений.
Так FCEUX видео с которого я снял ниже показывает? что глитчи в линии со спрайтом (они гуляют если разные паузы делать) исчезают если координаты спрайта по X (верхнее отображаемое число) заключено в диапазоне 0C-10 (это шестнадцатеричная запись числа для простоты кода).
Но более щепетильный эмулятор Mesen (король отладки) заужает этот диапазон до 0D-0F.
Нужно аккуратно выставлять позицию спрайта и скроллить в разных фонах и направлениях проверяя не дёргаются ли пиксели с краёв экрана.
На видео я думаю всё прекрасно видно.
Насколько я знаю даже разное железо тоже по разному может реагировать (конечно разница между PAL/NTSC очевидна).
Посему очень интересно как реагирует настоящее железо - интересен сам диапазон валидных значений интересен.


Сообщение отредактировал aa-dav - Четверг, 02 июля 2020, 09:42
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
aa-dav   Хехе, между прочим про это будет следующий мой у...   Суббота, 25 апреля 2020, 05:11
dimm0505   Хочу заметить, что на технике HBlank отсечения раб...   Суббота, 25 апреля 2020, 08:43
aa-dav   Готов следующий урок - перехват прерывания IRQ по ...   Четверг, 25 июня 2020, 19:19
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:47
Skin Designed (c) by Rooq.net, All Rights Reserved.
Invision Power Board Database Error  

There appears to be an error with the database.
You can try to refresh the page by clicking here.

Error Returned

We apologise for any inconvenience
пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ GBX.ru пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ.