Pull to refresh

Comments 6

Жду продолжения, интересно про звук ещё почитать.
Как-то совсем примитивно описана графика NES. Подано так, что на экране может быть всего 4 цвета. На самом деле каждый экранный тайл может иметь свою мини-палитру из 4 цветов, это атрибут тайла. Там еще есть странности с хранением бит для группы тайлов в разных местах, с учётом этого количество одновременно отображаемых цветов на экране можно довести до 25 (12 для фоновых тайлов + 13 для спрайтов), хотя казалось бы логичным иметь «круглые» 64 или 32.
Про палитры детально в следующей части. Сейчас просто демонстрация концепции — что можно написать что-то осязаемое
Шрифт весьма ущербный, на мой взгяд и вкус. Впрочем 8х8 сложно нормально нарисовать. Интересна была бы работа со шрифтом 8х16, литеры для которого можно выдрать из досовых консольных шрифтов, которых создано огромное множество, либо из *.psf, которые попадаются в Linux (один такой я для себя нарисовал). Или 6х8, чтобы в строку больше букв влезало.

Вторым уроком хочу видеть полноценную реализацию printf(). Третьим уроком — реальзацию примитивного текстового редактора.
Как раз недавно тоже изучал тему программирования на си под NES. У меня получилась такая демка:

Как и nesdoug, начинал с движка shiru и модифицировал его немного под себя.

Хорошо, что вы в своих примерах портируете код под новую версию cc65, буду следить за вашими переводами и добавлять замечания, может напишу от себя статью по темам, которые не раскрыты у nesdoug'а:

Отладка и профилирование под fceux с помощью lua, использование более продвинутого звукового движка от famitraker'а, использование различных блочных систем для экономии памяти и экспорт данных уровней из готовых игр с использованием редактора CadEditor, реальные примеры реализации спецэффектов из игр, реализация систем паролей/использование батарейки, написание своих компрессоров данных, возможно, создание меню для многоигровок.

Замечание и неточности в статье:
1. Флаг компилятору -Cl позволяет сделать все локальные переменные статическими, что позволит не терять в скорости. Однако переменные вообще лучше не заводить без особых на то причин.
2. Квалификатор типа volatile позволяет отмечать переменные, используемые для чтения/записи регистров процессора и внешних устройств, такие переменные не будут удалены как неиспользуемые при оптимизации.
3. Директива __fastcall__ задаёт передачу аргументов в функцию через регистры A,X и 2 специально отведённых компилятором байта из нулевой страницы памяти, регистр Y не используется. Если для передачи аргументов требуется больше 4х байт, то всё равно будет задействован стек.
На глаза иногда попадался Subor с клавиатурой, и появилась мысль: "Наверное можно набрать какую-то программу, а потом в нее поиграть"

У меня он был, и я, бывало, играл в то, что сам написал на G-BASIC. Но у меня не было никакого внешнего носителя, а потому программа каждый раз набиралась ручками с бумаги.

Only those users with full accounts are able to leave comments. Log in, please.