Программирование для Famicom/NES/Денди в Nesicide+ca65: маппер MMC3 - перехват HBlank (9)

Итак, кроме собственно управления дополнительными банками памяти маппер MMC3 обладает еще одной важной функцией — генерацией прерываний IRQ по счётчику сканлайнов. В уроке про zero sprite hit мы перехватывали момент когда можно например в середине кадра сменить параметры прокрутки заднего фона этим средством встроенным в консоль. Но этот способ во первых можно использовать только один раз за кадр, а во вторых требует от процессора тратить все вычислительные ресурсы на обнаружение наступления события, что кроме самого этого факта еще и затрудняет планирование времени сколько код должен выполняться.
Счётчик сканлайнов в MMC3 лишён всех этих недостатков.

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

Программирование для Famicom/NES/Денди в Nesicide+ca65: маппер MMC3 - страницы (8)

Итак на этот момент нам подвластны 32Кб кода/данных в PRG ROM и 8Кб графики в CHR ROM. Но когда этого перестало хватать в ход пошли мапперы — микросхемы встроенные в картриджи переключающие банки памяти. О них у меня есть отдельная обзорная статья. Одним из крайне популярных мапперов был MMC3 и кроме собственной популярности на его базе было создано огромное число производных чипов. В этой статье мы научимся использовать его для увеличения доступного для игры ROM картриджа.

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

Программирование для Famicom/NES/Денди в Nesicide+ca65: музыка и звуки (7)

Если вы еще совсем не в курсе о принципах на которых работает звуковой чип в Famicom/NES/Денди, то можете сперва провести небольшой ликбез по моей статье «О звуке». И надо же так совпало, что в день публикации этой статьи на хабре появилось очень подробное рассмотрение азов тут: habr.com/ru/post/482916/ Рекомендую ознакомится. Итак — в денди у нас есть набор примитивных осцилляторов-каналов: один треугольный, два прямоугольных, один шумовой и один однобитный DCPM. Программируются они через порты которые мы уже описывали в neslib.inc — группа портов с префиксов APU_*. Описание того как каждый канал настраивается, какие параметры имеет и самое главное — эксперименты потом со всем этим великолепием отнимут на мой взгляд слишком много времени у нас и это тот самый случай когда надо воспользоваться уже готовыми решениями. Мы так и поступим и не будем писать звуковой драйвер и редактор для него с нуля — а воспользуемся уже готовым открытым звуковым драйвером для Famicom/NES/Денди — FamiTone2 от Shiru. Драйвер и набор утилит к нему позволяет воспроизводить музыку и звуки созданные в популярном редакторе FamiTracker.

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

Программирование для Famicom/NES/Денди в Nesicide+ca65: ушибленный спрайт (6)

Научившись выводить и задний фон и спрайты мы готовы реализовать технику известную как zero sprite hit. Она применяется главным образом чтобы создать панель статистики в играх со скроллингом. По крайней мере в играх «первой волны».

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

Программирование для Famicom/NES/Денди в Nesicide+ca65: спрайты (5)

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

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

Программирование для Famicom/NES/Денди в Nesicide+ca65: задний фон с прокруткой (4)

Итак, после создания модуля neslib который нам еще пригодится в будущем мы можем приступать к формированию основной программы — модуля main.s. Откроем его, удалим всё старое содержимое и начнём наполнять новым кодом:

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

Программирование для Famicom/NES/Денди в Nesicide+ca65: модуль neslib (3)

Пример 1 — скроллинг заднего фона — neslib

Тот тестовый проект Hello world что мы создали из шаблона Nesicide работает, но мы сейчас переделаем его полностью — от него останется только каркас проекта и два битмапа с двумя наборами тайлов где присутствуют изображения символов текста. Текущий набор исходников можно скачать тут: yadi.sk/d/_THxg1gxuCCVNw — учтите, что у меня они создавались в папке c:\devel\nes и проще всего развернуть их там же.


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

Программирование для Famicom/NES/Денди в Nesicide+ca65: архитектура MOS 6502 (2)

Еще немного про сегменты

Если вы до этого программировали на каком-нибудь другом ассемблере для 8-биток, то возможно, что все эти заморочки с сегментами на первый взгляд могут показаться ненужными. Почему бы не использовать директиву .ORG и явно не указывать где находятся код и данные?

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

Программирование для Famicom/NES/Денди в Nesicide+ca65: введение (1)

Оглавление

2 — Архитектура MOS 6502...
3 — Модуль neslib...
4 — Задний фон с прокруткой...
5 — Спрайты...
6 — Ушибленный спрайт...
7 — Музыка и звуки...
8 — Маппер MMC3 — страницы...
9 — Маппер MMC3 — перехват HBlank...

0. Предисловие

В этой серии статей я попытаюсь как можно быстрее ввести вас в программирование на ассемблере ca65 на 8-битной консоли Famicom/NES/Денди в среде программирования Nesicide.
Статьи не ставят своей целью учить кого либо программировать: вы уже должны быть программистом и понимать что такое программы, ассемблер и как работают процессоры. Многое я попытаюсь объяснить как можно более детально, но определенный багаж знаний и умений конечно надо будет иметь. В принципе в интернете немало переведённой литературы и про MOS 6502 и про Famicom/NES/Денди, поэтому особо даже не буду что-то рекомендовать.
Для первичного ознакомления с основами основ о том что из себя представляет обзорно для программмиста консоль могу отослать к своей же статье: /blog/868.html, хотя похожих статей вообще немало.
Огромная масса полезной информации находится на англоязычном сайте nesdev.com (бесценный источник и для этого моего цикла статьей!).
Если с английским туго, то могу еще отослать к обзору разных материалов от Shiru: hype.retroscene.org/blog/282.html
Начало положено этой статьёй, остальные будут дописываться по мере появления свободного времени, всячески приветствуются комментарии, замечания, корректировки и вопросы помогающие улучшить статьи и дополнить непонятные в них места.

Исходные коды к урокам на момент пока я пишу статьи можно скачать тут: yadi.sk/d/_THxg1gxuCCVNw


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

Архитектура и программирование Fairchild Channel F

«Channel F homebrew would be like programming sprites via hardware jumpers...»
/ chadtower, atariage forum /




Игровая приставка Fairchild Channel F, также известная как VES, появилась в ноябре 1976 года. В отличие от своих предшественников типа Ping-Pong, Tennis (в том же ряду — советский «Видеоспорт»), у неё было очень существенное отличие — наличие микропроцессора и картриджей с программами. До этого игры в приставках реализовывались на жёсткой логике — программа, в современном понимании, там отсутствовала.

Fairchild Channel F выпускалась вплоть до 1983 года. За это время было продано более четверти миллиона этих приставок и выпущено около 30-40 игр, некоторые из которых — уже в 2000-х годах.

Говоря о первенстве в плане использования микропроцессора стоит отметить, что RCA Studio II, о которой я рассказывал в прошлой статье, опоздала всего на пару месяцев, но оказалась существенно слабее Channel F, ввиду чего и провалилась по продажам. Впрочем, появление, менее чем через год, Atari VCS — вытеснило с рынка и Channel F.

Развития Fairchild_Channel_F, как такового, не было. В System II и нескольких клонах, типа Saba Videoplay 2 (1979), отличия состояли преимущественно в корпусе, джойстиках (кстати, все они понимали кроме обычных положений ещё и поворот ручки) и количестве микросхем. Архитектурно всё было практически идентично.

Что же собой представляет Channel F?

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