Немного конкретики : эльфы написаны на Си, загружаются они с флешки в память минуя яву и напрямую обращаясь к процессору - за счет этого в разы ( могу ошибиться - но на семенах примерно раз в 10 - увеличивается быстродействие и кпд). Grisha89, эмулировать работу семена не надо - надо переделать уже готовые эльфы с семеновскими апи под мотор.
Помимо патчей существует еще одна возможность расширения функциональных возможностей телефона.
http://cbn.narod.ru/documents/elf_info.htmlFAQ
Собран на основе ответов Rst7 (спасибо ему

- почему в iar cu конструкция char c[100]; int a= * (int*) (c+5) выключает трубу?
Потому что ты пытаешься читать int по некруглому адресу - проц это посылает нах - генерирует исключение... Если тебе надо такое делать, то читай побайтно и собирай в отдельный инт.
- обязательно при выходе освобождать всю память по mfree( )?
Всю, которую занял - обязательно
- как отлаживать эльфы кроме как копировать их на телефон и писать лог?
Дебаггером Хаосовским... Ищешь BLX R4 в загрузчике эльфов, ставишь туда точку останова и вперед...
- что делают SUBPROC ? REDRAW ?
SUBPROC - вызов функции в контексте другого потока с малым приоритетом для того, чтобы не тормозить GUI, если надо что-то долго делать (например в TED\'е грузить текст, в MegaDial\'е искать имена в записной книжке)
REDRAW - вызвать метод onRedraw отображаемого GUI (можно из контекста процесса-помощника)
Ответы от cbn:
- как получить дату/время?
TDate date; TTime time;
GetDateTime(&date,&time ) ;
sprintf(s,"%d:%02d",time.hour,time.min) ;
sprintf(ss,"%02d-%02d-%04d",date.day, date.month,date.year) ;
- IAR пишет: неизвестная функция div_32a (или адрес ELF_BEGIN)
К проекту должны быть подключены соответственно файлы div.r79 и func.asm
- приложение работает слишком медленно - как переписать на асм?
С переписыванием на асм спешить не стоит - сначала нужно убедиться что си версия работает без ошибок. Наибольшее ускорение дает правильно написанный АЛГОРИТМ, нужно попытаться его улучшить. В компиляторе включить максимальную оптимизация по скорости.
И уже последний этап - замерить или прикинуть какие части кода выполняются наиболее долго (80% времени проца занимает 20% кода) и переписать их.
Пример: добавляем в func.asm функцию myfunc (a,b,c,d)
вставляем ПЕРЕД ELF_BEGIN ее код
PUBLIC myfunc
myfunc: PUSH {R4-R6,LR}
;делаем что-то с R4-R6 (можно до R12 )
POP {R4-R6,PC} ; Возврат
;или делать BX LR не сохраняя его
Вызов из Си:
extern int myfunc(int a,int b,int c, int d) ;
myfunc(a,b,c,d ) ;
Первые 4 параметра передаются соотв. в регистрах R0-R3, остальные через стек.
Результат возвращается в R0.
- почему на х65-75 не открываются файлы с карточки (MMC)?
В fopen( ) должно быть P_READ вместо 0
- как вывести на экран рисунок bmp?
- есть ли вирусы на эльфах и как с ними бороться?
-как портировать имеющиеся исходники в IAR ?
-как отлаживать эльф?
Несложного отладчика нет

придумываем сами
Можно попробовать выводить значение параметра на экран
char s[128]; sprintf(s,"Значение a= %d",a); ShowMSG(1,(int)s) ; //или через DrawString(...)
или писать в лог: # define logsize 10000
char log[logsize], * ptr=log;
void debug(char * s) { if(ptr<log+logsize-strlen(s)-3) {
strcpy(ptr,s); ptr+=strlen(s); *ptr++=0xd; *ptr++=0xa ; } }
а при выходе: fwrite(f,log,ptr-log,&err);
Если получаем пикофф - исключаем часть функций до тех пор пока не находим кто виновник.
- как найти все файлы в папке?
void findlist(char *dir){ //dir - папка, например "0: ","0: \\Misc"
static DIR_ENTRY de; unsigned int err ;
char path[128]; strcpy(path,dir);
char *ptr=path+strlen(path)+1;
strcat(path,"\\ * . * " ); //или "\\ *.wav" т.е. то что нужно искать
if (FindFirstFile(&de,path,&err)) {
do{ strcpy(ptr,de.file_name);
//if(isdir(path,&err)) somedir(path); else //если это папка то делаем то-то, иначе
somefile(path); //делаем с найденным файлом что нам нужно
}while(FindNextFile(&de,&err ) ) ;
}FindClose(&de,&err); }
- как из эльфа запустить др. эльф?
void execelf(char *exename, char *fname){ //fname-параметр (имя файла), передаваемый в эльф
WSHDR *ws=AllocWS(256) ;
str_2ws(ws,exename,strlen(exename )+1 ) ;
ExecuteFile(ws,0,fname); FreeWS(ws); }
- почему эльф тормозит при перерисовке?
Ответ от KreN: ничего рисоваться не должно не в контексте MMI.
Пояснение от cbn: нельзя вызывать функции рисования: REDRAW(), DrawString и др. из процессов (функций), запущенных по SUBPROC( ) - на NEWSGOLD тормоза, SGOLD как ни странно работают нормально. Если все же нужно, рисуйте при обработке клавиши или "вешайте" на таймер.
- что за функции LockSсhed, UnlockSched?
Ответ от KreN: нужны чтобы во время чтения/записи в/из рамы лочить другие процессы, чтобы не было конфликтов между ними, другими словами остается активным только текущий процесс.
- как воспроизвести стандартный звук?
Ответ от Geka: PlaySound( 1,0,0,n,0 ) где n-номер станд.звука
- как воспроизвести звуковой файл?
Ответ от KreN (спасибо за разъяснения):
typedef struct { unsigned int unk1,unk2,unk3,volume; } SFO;
#pragma swi_number=74
__swi __arm void PlayFile(int _C,WSHDR* folder,WSHDR* filename,int cepid, int _167,SFO * options) ;
void PlayMelody(int type_melody) {
SFO unk1; WSHDR *ws1=AllocWS(50), * ws2=AllocWS(30);
str_2ws(ws1,natisq_path,49);
unk1.unk1=1; unk1.unk2=0; unk1.unk3=0; unk1.volume=3;
wsprintf(ws2,"message.wav") ;
PlayFile(0xC,ws1,ws2,GBS_GetCurCepid(),0x167,&unk1);
FreeWS(ws1); FreeWS(ws2); }
PS(cbn): структура SFO сложнее, со звуком много несовмест. (пикофф) на разных моделях, данных мало...
и вообще покопаться на семеновских форумах - там есть отзывы юзеров - например, мой приятель - запросто рубиться в игры от Сеги ..и т.д. Вариаций много.
Знаю, что во флейме тема скоро заглохнет - но все таки-если найдутся люди , которые этим заинтересуются, надеюсь, что нибудь у нас и получится ( подчеркиваю - я не программист - иначе давно бы уже стал копать библиотеки и Си)