Игры чII (продолжение) 29.03.2024
В детстве в Алматы я знал примерно только два человека, у которых была приставка Денди, а у нас же дома в конце 80х был настоящий компьютер. Ну так вот, если память мне не изменият в гости меня никто не приглашал, я знал только про эту приставку. Денди это китайский клон Японской Nintendo Famicom или Nintendo Entertainment System. Я не знаю как делали игры японцы, но лично я пользусь cc65 для компиляции игры с Си в NES, FamiTracker для создания музыки, YY-Chr для создания шрифтов и спрайтов, FCEUX эмулятор, для тестирования игры.
1. Сначало нужно настроить cc65, компилятор у меня находится в директории C:\cc65_2023_new создадим bat-файл, пусть будет называться compile.bat:
@echo off SET CC65_PATH=C:\cc65_2023_new SET CC65_HOME=C:\cc65_2023_new C:\cc65_2023_new\bin\cl65 -L C:\cc65_2023_new\lib -t nes -I C:\cc65_2023_new\include %1 -o %2
2. Небольшой пример hello.c:
#include <nes.h>
void printtext(char *str) {
*((unsigned char *)0x2006) = 0x21;
*((unsigned char *)0x2006) = 0x42;
while(*str) {
*((unsigned char *)0x2007) = *str; str++;
}
}
int main() {
waitvsync();
*((unsigned char *)0x2006) = 0x3F;
*((unsigned char *)0x2006) = 0x00;
*((unsigned char *)0x2007) = 1;
*((unsigned char *)0x2006) = 0x3F;
*((unsigned char *)0x2006) = 0x03;
*((unsigned char *)0x2007) = 0x30;
printtext("Hallo Forum! Ein Beispiel! Hallo von uscheswoi_82");
*((unsigned char *)0x2005) = 0x00;
*((unsigned char *)0x2005) = 0x00;
*((unsigned char *)0x2001) = 8;
while(1);
return 0;
}
Если в коде будет ошибка cc65 обязательно покажет, в каком месте ошибка например:
C:\cc65_new>compile.bat hello.c hello.nes hello.c:22: Error: Undefined symbol: 'x' hello.c:22: Error: ';' expected 2 errors and 0 warnings generated.
Но в нашем коде ошибки не будет, нужно ввести следующую команду:
C:\cc65_new>compile.bat hello.c hello.nes
Программа выводит текст на консоль Hallo Forum! Ein Beispiel! Hallo von uscheswoi_82. Вот запуск программы на эмуляторе FCEUX:

Моя ФЛ Он и ОнаТак выглядет программа YY-Chr:

Итак нарисуем мордочку, вместо 0:

2. Удалим число 0:

3. Нарисуем кружок:

Вот так должна выглядеть морда:

Вот сам весь шрифт:

Вот код:
#include <nes.h>
void printtext(char *str) {
*((unsigned char *)0x2006) = 0x21;
*((unsigned char *)0x2006) = 0x42;
while(*str) {
*((unsigned char *)0x2007) = *str; str++;
}
}
int main() {
waitvsync();
*((unsigned char *)0x2006) = 0x3F;
*((unsigned char *)0x2006) = 0x00;
*((unsigned char *)0x2007) = 1;
*((unsigned char *)0x2006) = 0x3F;
*((unsigned char *)0x2006) = 0x03;
*((unsigned char *)0x2007) = 0x30;
printtext("0 Hallo Forum! Ein Beispiel! Hallo von uscheswoi_82");
*((unsigned char *)0x2005) = 0x00;
*((unsigned char *)0x2005) = 0x00;
*((unsigned char *)0x2001) = 8;
while(1);
return 0;
}
Вот результат работы программы на эмуляторе:

Моя ФЛ Он и ОнаВместо 0, там подставилась вот такая морда

Моя ФЛ Он и ОнаНо! Если запускаю на железе (оно тоже эмулирует денди/NES), то происходит искажение:



Моя ФЛ Он и Она