|
Здравствуйте Гость ( Вход | Регистрация ) Доступ из РоссииДля сохранения достпа из России к сайту и форуму GBX
|
||||||||||||||||||||||||||||
| aa-dav |
Четверг, 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 тайлов на стандартный кадр): ![]() Урок седьмой - полноценный перехват прокрутки по прерыванию от счётчика сканлайнов маппера MMC3: Этого всего уже достаточно чтобы написать игру уровня Darkwing Duck, Contra Force и т.п. В связи с вынужденными коронавыходными возможно у кого то из вас возникнет не только желание, но и время поковыряться в этих древних древностях и прикоснуться к ним так сказать вживую. Стоит заметить так же, что на хабре существует перевод статьи про программирования на NES на языке C: https://habr.com/ru/post/348022/ Но для меня Си это слишком не в духе эпохи, да и генерация кода на Си для такой архитектуры это весьма нетривиальная задачка роняющая пиковую производительность в десятки раз при несоблюдении очень жёстких и некрасивых практик (так, например, неиспользование локальных переменных или параметров в функциях). Поэтому я ничуть не сомневаясь решил писать эти уроки. Сообщение отредактировал aa-dav - Суббота, 25 июля 2020, 11:25 |
![]() ![]() ![]() |
Ответов
| Oreanor |
Четверг, 16 июля 2020, 20:19
Отправлено
#2
|
![]() старая тусовка ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 2 820 Регистрация: 15 мая. 2008 Из: Москва Пользователь №: 26 741 ![]() ![]() |
Сколько ни смотрю на ассемблерный код, так и не могу понять, как заставить себя думать ассемблерными категориями - сдвиги, инкременты, декременты, все эти манипуляции с регистрами.
Это какой-то нечеловеческий подход, после ООПа. На спектруме (еще тогда) сильно дальше 20-строчных вспомогательных процедурок для бейсиковых прожек дело не пошло, помню. А сейчас вообще в голову не лезет такое. -------------------- сайт dendy-steepler http://www.dendy.byethost16.com/steepler/
|
| aa-dav |
Пятница, 17 июля 2020, 03:29
Отправлено
#3
|
|
Фанат ![]() ![]() ![]() Группа: Пользователи Сообщений: 180 Регистрация: 20 апр. 2017 Пользователь №: 58 717 ![]() ![]() |
QUOTE (dimm0505 @ Четверг, 16 июля 2020, 19:28) Спасибо. Типа справочника в каком смысле? В каком то смысле справочниками у меня являются тела самих модулей neslib.inc и mmc3.inc - я старался каждый порт и порт откомментировать так чтобы единожды прочитав всю статью легко было вспомнить всё просто пробежавшись глазами по текстам этих модулей всматриваясь в комментарии. Если речь про то чтобы просто всё скомпоновать в offline-документ, то возможно займусь, но в принципе сохранить всё как HTML в offline-копию может каждый. QUOTE (Oreanor @ Четверг, 16 июля 2020, 20:19) Сколько ни смотрю на ассемблерный код, так и не могу понять, как заставить себя думать ассемблерными категориями - сдвиги, инкременты, декременты, все эти манипуляции с регистрами. Это какой-то нечеловеческий подход, после ООПа. На спектруме (еще тогда) сильно дальше 20-строчных вспомогательных процедурок для бейсиковых прожек дело не пошло, помню. А сейчас вообще в голову не лезет такое. В основном это дело привычки конечно же. В 40-50-х годах прошлого века, когда только начали появляться первые ЭВМ и такие люди как Алан Тьюринг писали для них инструкции вот по программированию было совсем интересно: http://hype.retroscene.org/blog/937.html Ассемблеры типа того что в моих уроках для NES тут выглядят самим образцом читаемости. xD У меня история примерно такая же - в детстве у меня был тоже спектрум и он мне дал импульс на то чтобы я стал в дальнейшем программистом, но на ассемблере в то время на спектруме я программировал очень мало. Можно сказать что и не программировал, а больше разбирал чужие примеры. А попытки что-то самому напрограммировать откровенно пугали и был своеобразный страх - т.к. на Z80 регистры было немало регистров и они конечно быстрее памяти, то всё время был страх что код перекладывающий значения в память и обратно неоптимален и можно всё переписать и ускорить правильно как в тетрисе сложив использование одних регистров с другими и получить оптимальный кусочек цикла. Это сильно мешало и отталкивало. Но вот сейчас далеко уже в возрасте у меня несколько лет назад возник импульс вернуться к этим древностям и вернувшись я обладая уже опытом разглядывания ассемблера который порождают компиляторы для современных процессоров Intel перестал "боятся" таких вещей и что спектрум, что вот сейчас NES - прикасаюсь к их ассемблерам и прям интересно и забавно. Основное что помогает - это эдакое понимание что не надо пытаться всё запихать в регистры (а на MOS 6502 в NES это просто невозможно принципиально, поэтому этот процессор сразу воспитывает), а сам код надо упорядочивать внутри процедур на независимые фрагменты у которых неважно что на входе и что на выходе - они выполняют какую-то монолитную операцию соответствующую одной, допустим, строке программы на языке программирования высокого уровня. Обильно обсыпав такие фрагменты комментариями чтобы в будущем не забыть где этот фрагмент начинается и где заканчивается и что делает - мы резко всё структурируем и действительно в некотором смысле сводим к более привычному программированию, просто размазанному лапшой инструкций на несколько строк там где раньше была одна (в ЯВУ). И это получается просто "трансляция" привычной программы в более неплотное ассемблерное представление (и именно так компиляторы и работают) и как только это осознаёшь, то ассемблер теряет какой либо имидж чего то загадочного. В общем мне нра. Сообщение отредактировал aa-dav - Пятница, 17 июля 2020, 03:30 |
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 Доделываю последний урок по мапперу 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![]() ![]() |
1 чел. читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
| Упрощённая версия | Сейчас: Вс., 25 окт. 2026, 18:44 |

Четверг, 02 апреля 2020, 08:27














