Оригинальная прошивка с исходными текстами здесь, в архиве:
ftp://ftp.radio.ru/pub/2007/01/usbjoy/prog.zip
Правда исходники там только для одного джойстика, а прошивок несколько (sega2 - на два джойстика, sega1-2 - на два джойстика, которые будут использоваться по-переменно), но это отдельная тема.
Взял новый драйвер USB от objective development: http://www.obdev.at/products/vusb/download.html
Отредактировал как надо usbconfig-prototype.h в соответствии со старым, переименовал в usbconfig.h, заменил все остальные исходники драйвера новыми, в т.ч. скопировал asmcommon.inc и usbdrvasm12.inc
Создал новый проект в IAR, добавил все файлы.
В свойствах проекта выбрал контроллер ATmega8a, на вкладке System отметил галочку "Enable bit defintions in I/O-include files".
В common.h выкинул io.h, заменил на iom8a.h, выкинул pgmspace.h, пофиксил ошибку с __flash (было объявлено как const chat, требовало char), выкинул interrupt.h, новых ругательств после этого не заметил.
Теперь осталось ругательство на строку, в которой присутствует переменная USBIN:
Error[Pe020]: identifier "PINPORTD" is undefined
в
Код
uchar usbLineStatus = USBIN & USBMASK;
А также аналогичные:Error[50]: Undefined symbol:'PINPORTD'
Error[50]: Undefined symbol:'DDRPORTD'
Error[50]: Undefined symbol:'PORTPORTD'
в строках
Код
sbis USBIN, USBMINUS
Код
in x2, USBDDR;[-12] 12 cycles until SOP
Код
sbi USBOUT, USBMINUS;[-10] prepare idle state; D+ and D- must have been 0 (no pullups)
соответственно.Это всё ошибки в драйвере USB.
Еще есть кучка варнингов:
Warning[Pe223]: function "bit_is_set" declared implicitly C:\sega-update\in_sega.c 33
Warning[Pa082]: undefined behavior: the order of volatile accesses is undefined in this statement C:\sega-update\in_sega.c 48
Warning[Pa082]: undefined behavior: the order of volatile accesses is undefined in this statement C:\sega-update\in_sega.c 50
Warning[Pa050]: non-native end of line sequence detected (this diagnostic is only issued once) C:\sega-update\usbdrv.c 1
Warning[Pe068]: integer conversion resulted in a change of sign C:\sega-update\usbdrv.c 318
Warning[Pe068]: integer conversion resulted in a change of sign C:\sega-update\usbdrv.c 320
Warning[Pe068]: integer conversion resulted in a change of sign C:\sega-update\usbdrv.c 329
Warning[Pe068]: integer conversion resulted in a change of sign C:\sega-update\usbdrv.c 331
Warning[Pe068]: integer conversion resulted in a change of sign C:\sega-update\usbdrv.c 333
Warning[16]: Suspicious sfr expression C:\sega-update\usbdrvasm.S 74
Собственно всё. Не знаю что с этим делать дальше.