Skip to content
Nikolay O. Zabrodotskiy edited this page Apr 6, 2016 · 1 revision

Оригинальная разработка SNES NES DB9 принадлежит Raphaël Assénat

В принципе, ранняя версия устройства является основой платы Pixelkit и вполне знакома по руководству пользователя.

Однако, в неизменном варианте прошивка просто "не лезет" в место, доступное ARCAdaptor.

Поэтому рассмотрим пошаговый процесс оптимизации и уменьшения размера прошивки.

Для начала обновим V-USB стек до последней версии с сайта.

Следующий шаг - адаптируем программу под обновленную версию AVR-GCC.

main.c:

diff nes_snes_db9_usb-1.9/main.c nes_snes_db9_usb-1.9_adapted/main.c
49c49
< PROGMEM int usbDescriptorStringSerialNumber[]  = {
---
> const PROGMEM int usbDescriptorStringSerialNumber[]  = {

Далее - убираем из программы поддержку SNES Mouse. Устройство очень редкое - так что большого вреда не будет. И уж конечно, "мышку" к компьютеру-планшету лучше подключить обычную.

Makefile:

15c15
< OBJS = $(COMMON_OBJS) snes.o snesmouse.o nes.o db9.o devdesc.o tg16.o segamtap.o
---
> OBJS = $(COMMON_OBJS) snes.o nes.o db9.o devdesc.o tg16.o segamtap.o #snesmouse.o
40c40

main.c

273c273
< //#define NOMOUSE
---
> #define NOMOUSE

Ну и наконец, обновим некоторые опции компилятора и линкера, уменьшающие размер выходного файла.

Makefile:

11c11
< COMPILE = avr-gcc -Wall -Os -Iusbdrv -I. -mmcu=atmega8 -DF_CPU=12000000L #-DDEBUG_LEVEL=1
---
> COMPILE = avr-gcc -Wall -Os -fdata-sections -ffunction-sections -funsigned-bitfields -fpack-struct  -fshort-enums -funsigned-char -mcall-prologues -Iusbdrv -I. -mmcu=atmega8 -DF_CPU=12000000L #-DDEBUG_LEVEL=1
40c40
< 	$(COMPILE) -o main.bin $(OBJS) -Wl,-Map=main.map
---
> 	$(COMPILE) -o main.bin $(OBJS) -Wl,-Map=main.map -gc-sections,--relax

Теперь список поддерживаемых устройств выглядит немного по-другому:

  • Nintendo Entertainment System (NES)
  • Famicon controller with built-in microphone
  • Super Nintendo Entertainment System (SNES)
  • Genesis 3/6 buttons controllers
  • 2 Button atari-style controllers (such as Sega master system)
  • 1 Button atari-style controllers
  • Sega multi-tap MK-1654

Схема подключения доступна в документации по проекту, ну а соответствие контактов можно посмотреть в Руководстве пользователя ARCAdaptor

Скачать адаптированную прошивку и исходные коды

.hex файл как раз помещается в отведенный объем - 6144 байт. Вполне возможно, что есть другие, более действенные методы оптимизации кода.