2 Кб, 311x62
Разработка для Dendy/NES/Famicom sage 2438 В конец треда | Веб
Ни для кого не нужный, кроме меня, тред о разработке игр для Dendy/NES/Famicom.

Есть ли здесь разработчики, которые могут пояснить, что лучше приобрести в плане качества и приближения к работе оригинальной приставки: какой лучше клон Денди, или придется покупать Фамиком? (на аутентичную НЕС нет денег.)
2 Кб, 250x224
2 2439
>>2438 (OP)
Материальная часть - дело десятое. Как у тебя дела с программированием?
3 2441
>>2439
Хорошо.

> Материальная часть - дело десятое.

Но хочется тестировать в железе (чтобы выпустить игру в железе).
48 Кб, 455x426
4 2442
>>2441
Ты хотя бы освой разработку и запусти на эмуляторе. И вообще, что именно ты собрался писать?
Аноним 5 2443
>>2442
Крутые игры.
Разработку освоил, на эмуляторе запускал.
Что, если хочу запилить собственный маппер? Его нужно прототипировать и делать это примерно параллельно с разработкой игры, чтобы понять, каким может быть маппер и как с ним интерфейсить
6 2446
>>2443
Вбрасывай тогда свое творчество сюда. И заодно расскажи: зачем тебе собственный маппер?
7 2449
>>2446
Чтобы удивить игроков спецэффектами / поддерживать кучу памяти, щас же технология развилась, можно больше всего за меньше денег

вбрасывать нибуду
170 Кб, 1920x1080
8 2451
>>2449
Звучит неплохо. А как у тебя вообще с электроникой? Плату картриджа развести сможешь?
И почему не хочешь вбрасывать? Собираешься сразу выпускать на физическом носителе?
9 2454
>>2451
В электронике еще плохо разбираюсь.

Не хочу вбрасывать, потому что секретная разработка.
10 2455
>>2454
Прямо настолько секретно?
11 2457
>>2455
Да.
12 2459
>>2457
Скрины тогда покажи что ли.
13 2464
>>2459
Нет, не в этом смысле, а просто секретная
14 2465
>>2464
Но что там на самом деле такого секретного? Поделился бы подробностями с аноном.
15 2477
>>2441
Посоветуй, что почитать начинающему? Пока изучаю дебаггер FCEUX и ассемблер 6502.
До этого приходилось писать на асме под DOS и ZX Spectrum, но это было давно, в далеком детстве, сейчас многое уже забыл.

Хочу сделать хак Mario Bros с разными персонажами (в оригинале Луиджи - спрайт Марио с другой палитрой), реально ли это?
85 Кб, 1024x768
16 2479
Репост с загнивающего петухленда. Это больше про взлом, модификацию уже существующего кода.

[NES Ромхакинг] Первый урок. Введение

Многие из вас, желавшие поиграть в игры Денди, Сеги и других платформ, дабы поностальгировать и вспомнить "детство золотое", задавались вопросом - как воплотить это в жизнь, как можно поиграть в эти игры на мобильном телефоне/смартфоне/планшете/ПК и пр.? Попробовав самые разные эмуляторы консолей, вы выбираете один из них (или сразу несколько, как я) в качестве оптимального варианта на все случаи. И, естественно, начинаете воплощать мечту детства - играете во все игры, которые раньше были вам недоступны или неизвестны.
Но со временем просто играть вам, разумеется, надоедает, и поэтому вы начинаете задаваться вопросом: как можно видоизменить/улучшить/переделать эти игры? Ведь, как известно, и разработчики оригинальных игр, и пираты, не брезговали ромхакингом. Действительно, зачем тратить на разработку новую игру (читай - сиквел того же Мегамена) много денег и времени, когда можно использовать уже готовый движок, готовую музыку и звуковые эффекты, готовые спрайты, и переделать их с тем, чтобы выпустить сиквел как можно скорее. Удобно, не так ли? И геймеры довольны, и разрабы озолотились. ;) Увы, этим также пользовались и пираты, выпуская псевдо-сиквелы, годами обманывая геймеров Европы, Азии и стран СНГ... :(
... Но мы с вами не будем брать пример с пиратов и намеренно затирать копирайты разработчиков, верно? Если так - давайте же приступим к изучению ромхакинга! :)
Для первого урока по ромхакингу NES игр вам понадобится:
A) эмулятор, имеющий в себе кучу встроенных утилит - в данном случае это FCEUX 2.2.3. Его можно найти на сайте emu-russia.net . Если у вас более старая версия этого эмуля - ничего страшного, на ромхакинг это никак не повлияет. Просто в новой версии добавлены новые мапперы (включая CoolBoy).
Б) ром Super Mario Bros. (JU) [!]. Если его нет - можете скачать его на том же сайте. Или найти на сайте romfind.com
Итак, перейдём, непосредственно, к делу. Открываем Супер Марио с помощью указанного эмуля и нажимаем "старт". Для начала научимся менять количество жизней этого героя. Заходим в Tools->RAM Search. В появившемся окне выставляем Equal to - Specific Value - в форме рядом с этой фразой вбиваем цифру 2 и жмём на Search:

"Почему 2, если у героя на самом деле 3 жизни?" - спросите вы. Отвечаю: в некоторых играх есть такая особенность - когда отображаемая цифра или количество палочек-сердечек не совпадают с тем значением, что указано в ram. Например, когда вы ищете лайфбар, состоящий из 10 палочек/сердечек, и не находите - вам придётся выставить условие поиска Less than - Previous value, чтобы найти количество сердец по значению, которое уменьшается на определённое число каждый раз при получении урона. Конкретно в Супер Марио герою присваивают 2 жизни, хотя отображается 3. Из этого следует, что жизни у Марио уменьшаются вот так: 2, 1, 0 (то есть, ноль тоже используется как значение, и game over происходит после того, как значение "уходит в минус", а точнее - становится равно FF).
После того, как вы нажмёте на Search, вы получите:
85 Кб, 1024x768
16 2479
Репост с загнивающего петухленда. Это больше про взлом, модификацию уже существующего кода.

[NES Ромхакинг] Первый урок. Введение

Многие из вас, желавшие поиграть в игры Денди, Сеги и других платформ, дабы поностальгировать и вспомнить "детство золотое", задавались вопросом - как воплотить это в жизнь, как можно поиграть в эти игры на мобильном телефоне/смартфоне/планшете/ПК и пр.? Попробовав самые разные эмуляторы консолей, вы выбираете один из них (или сразу несколько, как я) в качестве оптимального варианта на все случаи. И, естественно, начинаете воплощать мечту детства - играете во все игры, которые раньше были вам недоступны или неизвестны.
Но со временем просто играть вам, разумеется, надоедает, и поэтому вы начинаете задаваться вопросом: как можно видоизменить/улучшить/переделать эти игры? Ведь, как известно, и разработчики оригинальных игр, и пираты, не брезговали ромхакингом. Действительно, зачем тратить на разработку новую игру (читай - сиквел того же Мегамена) много денег и времени, когда можно использовать уже готовый движок, готовую музыку и звуковые эффекты, готовые спрайты, и переделать их с тем, чтобы выпустить сиквел как можно скорее. Удобно, не так ли? И геймеры довольны, и разрабы озолотились. ;) Увы, этим также пользовались и пираты, выпуская псевдо-сиквелы, годами обманывая геймеров Европы, Азии и стран СНГ... :(
... Но мы с вами не будем брать пример с пиратов и намеренно затирать копирайты разработчиков, верно? Если так - давайте же приступим к изучению ромхакинга! :)
Для первого урока по ромхакингу NES игр вам понадобится:
A) эмулятор, имеющий в себе кучу встроенных утилит - в данном случае это FCEUX 2.2.3. Его можно найти на сайте emu-russia.net . Если у вас более старая версия этого эмуля - ничего страшного, на ромхакинг это никак не повлияет. Просто в новой версии добавлены новые мапперы (включая CoolBoy).
Б) ром Super Mario Bros. (JU) [!]. Если его нет - можете скачать его на том же сайте. Или найти на сайте romfind.com
Итак, перейдём, непосредственно, к делу. Открываем Супер Марио с помощью указанного эмуля и нажимаем "старт". Для начала научимся менять количество жизней этого героя. Заходим в Tools->RAM Search. В появившемся окне выставляем Equal to - Specific Value - в форме рядом с этой фразой вбиваем цифру 2 и жмём на Search:

"Почему 2, если у героя на самом деле 3 жизни?" - спросите вы. Отвечаю: в некоторых играх есть такая особенность - когда отображаемая цифра или количество палочек-сердечек не совпадают с тем значением, что указано в ram. Например, когда вы ищете лайфбар, состоящий из 10 палочек/сердечек, и не находите - вам придётся выставить условие поиска Less than - Previous value, чтобы найти количество сердец по значению, которое уменьшается на определённое число каждый раз при получении урона. Конкретно в Супер Марио герою присваивают 2 жизни, хотя отображается 3. Из этого следует, что жизни у Марио уменьшаются вот так: 2, 1, 0 (то есть, ноль тоже используется как значение, и game over происходит после того, как значение "уходит в минус", а точнее - становится равно FF).
После того, как вы нажмёте на Search, вы получите:
88 Кб, 1024x768
17 2480
>>2479
Как видите, количество переменных резко уменьшилось. Нажимаем ещё раз, чтобы отсеять те, которые меняются в данный момент игры. Теперь их стало ещё меньше, верно? Чтобы знать наверняка, что изменится после потери жизни - выставляем условие поиска: Less than - Previous value. Это позволит выделить те переменные, что изменились после потери жизни. Теперь идём и напарываемся на гумбу. Смотрим внимательно на результаты в RAM Search. Даже без повторного поиска видим, что переменная 075A стала 1, была 2, а количество изменений равно 1.
Чтобы убедиться в этом - нажмите правой кнопкой мыши на этой переменной. Вы попадёте в HEX Editor - шестнадцатиричный редактор - где курсор будет стоять на этой переменной (как на этом скрине). И вводите, к примеру, 08 вместо текущего значения. После потери жизни их станет 8 (нумерацию жизней в этой игре я уже написал). Если произошло так, как я написал - значит, вы нашли значение жизней. Теперь осталось лишь ввести нужное вам значение в ROM и сохранить результат для дальнешего использования.
Для этого жмём на самом значении правой кнопкой мыши и выбираем Add Write Breakpoint For Address 075A:
67 Кб, 1024x768
18 2481
>>2480
Тут же откроется отладчик. Сворачивайте его. Если закроете - придётся залезать в Debug->Debugger и включать его заново. Жмём Reset (или Power, роли не играет). И тут же наш брейкпоинт срабатывает. В данный момент значение А переменной равно нулю, так что пропускаем это, нажав Run в отладчике. И в этот раз значение А переменной равна нулю, снова жмём Run. Теперь мы видим, что значение стало равно 02. Это - то. что мы искали:
79 Кб, 1024x768
19 2482
>>2481
К слову, при наведении на нужную нам строку в самом низу отладчика отображается местонахождение этого выражения в ROM. Запоминаем эту строку, заходим в HEX-editor, View-ROM File, и находим это место. Меняем 02 на какое хотите (желательно не выше 63 (62) - в хексе это 99). Да, если хотите сделать конкретное значение - вам понадобится Калькулятор, а точнее - инженерный Калькулятор. В поле вводите любое число в десятичной (DEC) системе (например, 20), переключаетесь в HEX - получаете 14. Именно HEX значения вам понадобятся в ромхакинге. :)
Второй способ: нам известно значение в RAM - тогда включаем HEX Editor и переходим к этому адресу. Для прокрутки я использую кнопки PgUp и PgDn. Можно также перейти напрямую по адресу, зайдя в хексе File->Goto address и вписав туда полученный адрес. Делаем, как на этом скриншоте:
67 Кб, 1024x768
20 2483
>>2482
Дальше - также меняете значение и жмёте Save ROM, чтобы сохранить изменения в текущем роме, или Save ROM As, чтобы сохранить изменения в новом роме, не меняя текущий:
21 2484
>>2483
Собственно, подобным образом можно не только накручивать жизни и сердечки в играх, но ещё и увеличить время, скорость персонажей и многое-многое другое. ;)
P. S.: также рекомендую вам скачать и установить утилиту Insectduel_s SMB Utility Rus.exe, с помощью которой вы сможете в Супер Марио задать количество жизней одним кликом, указать количество миров, изменить время, свойства уровней, превращения Боузера после смерти, переделать все уровни, задать их тип и погодные условия, а также переписать интро игры.
Для изменения заставки игры я рекомендую использовать smbte10b.zip. Правда, нужно учесть, что место на заставке не резиновое, за поля залезать нежелательно, иначе изменения не сохранятся.

Файл Insectduel_s SMB Utility Rus.exe:
http://spaces.ru/files/view/?Li=315023&Lii=39618922&Link_id=1673502&Lt=1&Read=39618922&Sn=29&name=lancuster&sid=::sid::

Файл smbte10b.zip:
http://spaces.ru/files/view/?Li=315023&Lii=56687485&Link_id=1546930&Lt=1&Read=56687485&Sn=10&name=lancuster&sid=::sid::
84 Кб, 1024x768
22 2485
Первый урок вышел достаточно длинным, чтобы вписывать в него что-то ещё. Поэтому выкладываю дополнение отдельной темой - "Как сделать бесконечные жизни и пр.."
Если вы уже прочли предыдущую статью - значит, вы уже знаете, что нужно делать.
Открываете ром, заходите в Debug->Debugger, вводите в появившееся окно 075A, ставите галочку на Write и нажимаете ОК. Затем традиционно идёте на гумбу и сливаете жизнь. В этот момент сработает брейкпоинт:
95 Кб, 1024x768
23 2486
>>2485
То, что выделено на скриншоте (на что указывает стрелка сбоку) - это и есть код уменьшения жизни (сокр. англ. DEC - DECREASE | Уменьшение). Его необходимо затереть. Для этого переходим по указанному адресу в ROM к данным трём байтам и делаем вот это:
24 2487
>>2486
Теперь значение будет записываться в LDA, а не будет уменьшаться, как было изначально.
Можно было затереть все три байта вот так: EA EA EA. Но к Супер Марио это неприменимо, так как после потери жизни вы получите game over.
Так что - да, в некоторых играх тупое затирание байтов типа этого:

EA - NOP
EA - NOP
EA - NOP

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

85 - A5
C6 - A5
CE - AD
8D - AD
9D - AD

Если будут выражения типа 99 ХХ ХХ - тогда, конечно, прокатит затирание байтов EA-шками.
... Ну, и, разумеется, делаем Save ROM или Save ROM As.
25 2489
>>2477
Читать wiki.nesdev.com, я почти все там нашел.

>Хочу сделать хак Mario Bros с разными персонажами (в оригинале Луиджи - спрайт Марио с другой палитрой), реально ли это?

Да, но, если не менять маппер, придется выкинуть пару квадратиков графической информации, так как там пространство забито.
26 2492
>>2489
Разве в SMB используется какой-то маппер?
28 2495
>>2492
я имел в виду добавить
29 2497
>>2494
Доигрался с кодом?
sage 30 2501
>>2497
просто няшная картинка
31 2503
>>2501
Не очень. Такой эффект можно было получить прикоснувшись к картриджу.
29 Кб, 480x254
32 2505
>>2492
Mario Bros, а не Super Mario Bros, братюнь. Игра, где двое братишек пытаются съебаться из замкнутого темного помещения через трубу, отвинтив вон ту хуйню.

>>2489
Думаю, можно выкинуть нахуй раков, оставив из врагов только купа черепах (их планирую перерисовать в зеленых слоников) и мух, которые мешают спать. За вики спасибо, уже нагуглил.
33 2507
>>2505
Было бы убергодно, конечно, реализовать зеленого слоника в Марио. Но вместо того чтобы что-то вырезать, можешь покопаться в улучшенных версиях, где есть маппер.
2 Кб, 256x240
34 2508
Mario Bros. Classic. Выходил в Европе, более точно повторяет аркадный оригинал. Есть катсцены, и можно менять направление в прыжке.
https://youtu.be/zll16wdrnsM
Kaettekita Mario Bros.
Версия для FDS. Добавлена реклама и новый игровой режим, плюс, можно сохраняться.
https://youtu.be/SsjPIgE-smI
35 2533
Братишки, возможно вам это пригодится. Полная система команд 8-битного процессора MOS 6502:
http://www.emuverse.ru/wiki/MOS_Technology_6502/Система_команд

В NES'овском процессоре нет команд для работы с двоично-десятичными числами (BCD), т.к. в играх они не нужны.
60117[1].jpg4 Кб, 512x448
36 2534
Кстати, спрайт слоника можно взять из игры CJ's Elephant Antics
37 2777
>>2505
Годнота
38 2783
>>2494
>>2501
анон я её использую в качестве бекграунда для своего рисунка если ты не против
39 3116
бамп!
40 3171
бамп
41 3172
бамп
42 3246
О, какой интересный тред. Я тоже хочу вкатиться в несдев, пробовал курить техдоки, пока что ничего толком не понятно. С ассемблером, думаю, проблем не будет (владею несколькими).
43 3347
Я думаю стоит приобретать Dendy Classic Junior 2
44 3352
>>2438 (OP)
NES разработчик в треде, задавайте ответы. Погляжу за тредом некоторое время, похуй что доска мёртвая.
45 3451
Могу помочь, задавайте вопросы, помогу вкатиться.
46 3454
>>3352
>>3451
На чем пишете? Асм, сишка? Какой компилятор?
47 3455
>>3454

Возможно то и другое, как по отдельности так и совмещение. Си (сс65) + neslib + famitone2 - очень хоршая база, чтобы вкатиться, освоиться и развиваться. Этих сей вполне хватает на игру уровня супермарио, ну и прототипировать на сях удобно.
Сам пока что пишу на сс65, постепенно углубляясь под капот в ассемблер.

>>3352
48 3456
>>3454
ассемблер на nesasm

Какой в этом смысл, спросите себя, надо ли вам это. Игроделание уровня, хотел в детстве сделать игру.

Звуковые движки пижжу с других игр.
49 3459
>>3456
>Какой в этом смысл, спросите себя


На физических носителях игры неплохо продаются. И для NES и для Сеги и для некоторых других консолях.

>>3456
>пижжу с других игр


Зачем, если есть Famitracker + либа Famitone? Подойдет и для твоего несасма.
50 3460
>>3459
> консолей

фикс
51 3461
>>3459
Я не музыкант, и мне лень уже ковыряться в этом.
Что я буду музыку писать? нет. Звуки придумывать? нет.
Проще взять готовое.

Для серъёзных целей нужно разделять задачи, чтоб задачей занимался профессионал своего дела. Для игры типа Марио, звуки лучше взять из Марио.
52 3462
Нужно написать какую нибудь инструкцию, как выводить графен, опрашивать джойстик, загружать уровень, и двигать объекты. Пусть погромируют, кому не лень. Это же очень простое железо, главное понять.

Я вобще руководствовался книжками:
GameDevNES.chm
Архитектура и программирование Dendy.doc
Язык Ассемблера для персонального компьютера ЭПЛ У.Моррер 1987.djvu

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

Сейчас решил доделать начатое.

Не рекомендую ковырять чужие исходники, кто не умеет программировать, потому что желание отпадёт этим заниматься. Я до сих пор в ахуе от чужих исходников, нихуя не понимаю, что там хотели сказать такой кашей.
53 3463
Компилируем на 6502 онлайн:

http://skilldrick.github.io/easy6502/

Просто охуительный туториал для делающих в 6502 асм.
54 3464
>>3462

Если пишем на Си, то все инструкции есть в neslib.h. Там весь базис собран в виде библиотеки, нужно только настроить ROM под нужный маппер и вперёд.
С асмами всякими знаком, но 6502 кажется уберущербным с его аккумулятором и двумя индексными регистрами. Новичкам (особенно тем, кто вообще не знает никакого асма) вкатываться в такой асм будет довольно болезненно. Но ничего нет невозможного, конечно.
55 3468
Вот набросал в nesasm, спрайт по экрану движется, вредакторе поправить вс и откомпилировать, графен цеплять не нужно.

.inesprg 2;32k PRG 1=16kb
.ineschr 0;1;4;8 k
.inesmir 0;0 - H, 1 - V
.inesmap 0
;
.bank 0
.org$8000
;

system_start:;инициализация
sei
cld;
jsr video_init_0

ldx #$FF ;stack init
txs
jsr memory
jsr video_memory
jsr palette_load

lda #$00;записать мусор для спрайта
sta $2006
lda #$00
sta $2006
lda #$FF
sta $2007

jsr video_init_1
game: ;цикл
jsr sprite_

jsr delay_wait
jsr delay

lda #$02;загрузка спрайтов из $0200
sta $4014

lda #$00;сбросить скроллинг
sta $2005
sta $2005
jmp game
;*
sprite_:
inc <$00
inc <$01
lda <$00
sta $0200
lda #$00
sta $0201
lda #%00000000
sta $0202
lda <$01
sta $0203
rts
;***
memory: ;чистим мемори
ldx #$00
memory_:
lda #$00
sta <$00, X
sta $0200,X
sta $0300,X
sta $0400,X
sta $0500,X
sta $0600,X
sta $0700,X
inx
bne memory_
rts
;***
delay:
lda $2002
bpl delay
rts

delay_wait:
lda $2002
bmi delay_wait
rts
;***
video_init_1: ;увеличение адреса +1 по горизонтали
lda #%00101100
sta $2000
lda #%00011000
sta $2001
rts
video_init_0:;видео
lda #%00000000
sta $2000
lda #%00000000
sta $2001
rts
;***
palette_load:
lda #$3F;палитра BG
sta $2006
lda #$00
sta $2006

ldx #$00
ldy #$00
palette_load_bg:
lda pal, X
sta $2007
inx
iny
cpy #$10
bne palette_load_bg
;rts
;***
lda #$3F;палитра sprite
sta $2006
lda #$10
sta $2006

ldx #$00
ldy #$10
palette_load_spr:
lda pal, X
sta $2007
inx
iny
cpy #$20
bne palette_load_spr
rts
;***
video_memory:;чистка видео
lda #$20
sta $2006
lda #$00
sta $2006

ldx #$00
ldy #$04
lda #$01
video_memory_:
sta $2007
inx
bne video_memory_
dey
bne video_memory_
rts
;***
pal:
.db $22,$0F,$31,$00
.db $22,$38,$27,$07
.db $22,$36,$17,$0F
.db $22,$0F,$36,$27
;***
.org$9000
.bank 1
.org$A000
.org$B000
.bank 2
.org$C000
.org$D000
.bank 3
.org$E000
.org$F000

.org$FFFA
.dw 0;(NMI_Routine)
.dw system_start;(Reset_Routine)
.dw 0;(IRQ_Routine)
55 3468
Вот набросал в nesasm, спрайт по экрану движется, вредакторе поправить вс и откомпилировать, графен цеплять не нужно.

.inesprg 2;32k PRG 1=16kb
.ineschr 0;1;4;8 k
.inesmir 0;0 - H, 1 - V
.inesmap 0
;
.bank 0
.org$8000
;

system_start:;инициализация
sei
cld;
jsr video_init_0

ldx #$FF ;stack init
txs
jsr memory
jsr video_memory
jsr palette_load

lda #$00;записать мусор для спрайта
sta $2006
lda #$00
sta $2006
lda #$FF
sta $2007

jsr video_init_1
game: ;цикл
jsr sprite_

jsr delay_wait
jsr delay

lda #$02;загрузка спрайтов из $0200
sta $4014

lda #$00;сбросить скроллинг
sta $2005
sta $2005
jmp game
;*
sprite_:
inc <$00
inc <$01
lda <$00
sta $0200
lda #$00
sta $0201
lda #%00000000
sta $0202
lda <$01
sta $0203
rts
;***
memory: ;чистим мемори
ldx #$00
memory_:
lda #$00
sta <$00, X
sta $0200,X
sta $0300,X
sta $0400,X
sta $0500,X
sta $0600,X
sta $0700,X
inx
bne memory_
rts
;***
delay:
lda $2002
bpl delay
rts

delay_wait:
lda $2002
bmi delay_wait
rts
;***
video_init_1: ;увеличение адреса +1 по горизонтали
lda #%00101100
sta $2000
lda #%00011000
sta $2001
rts
video_init_0:;видео
lda #%00000000
sta $2000
lda #%00000000
sta $2001
rts
;***
palette_load:
lda #$3F;палитра BG
sta $2006
lda #$00
sta $2006

ldx #$00
ldy #$00
palette_load_bg:
lda pal, X
sta $2007
inx
iny
cpy #$10
bne palette_load_bg
;rts
;***
lda #$3F;палитра sprite
sta $2006
lda #$10
sta $2006

ldx #$00
ldy #$10
palette_load_spr:
lda pal, X
sta $2007
inx
iny
cpy #$20
bne palette_load_spr
rts
;***
video_memory:;чистка видео
lda #$20
sta $2006
lda #$00
sta $2006

ldx #$00
ldy #$04
lda #$01
video_memory_:
sta $2007
inx
bne video_memory_
dey
bne video_memory_
rts
;***
pal:
.db $22,$0F,$31,$00
.db $22,$38,$27,$07
.db $22,$36,$17,$0F
.db $22,$0F,$36,$27
;***
.org$9000
.bank 1
.org$A000
.org$B000
.bank 2
.org$C000
.org$D000
.bank 3
.org$E000
.org$F000

.org$FFFA
.dw 0;(NMI_Routine)
.dw system_start;(Reset_Routine)
.dw 0;(IRQ_Routine)
56 3469
\t это пробелы

не годится сюда копировать.
Обновить тред