Board.KolibriOS.org

Official KolibriOS board
It is currently Sat May 25, 2019 12:57 am

All times are UTC+03:00




Post new topic  Reply to topic  [ 79 posts ]  Go to page Previous 1 2 3 4 5 6 Next
Author Message
 Post subject: Re: Порт FCE Ultra
PostPosted: Sat Dec 13, 2008 10:10 pm 
Offline
User avatar

Joined: Fri Jun 27, 2008 3:22 pm
Posts: 988
barsuk прав.
Целым архив залить всё равно не удалось, но это видимо связано с политикой провайдера или клуба, где я сижу (хотя скачивать "большие" файлы могу без проблем).
Закачал и DJGPP и menuetlibc.

http://ftp.kolibrios.org/users/Asper/


Top
   
 Post subject: Re: Порт FCE Ultra
PostPosted: Sun Dec 14, 2008 10:47 pm 
Offline
User avatar

Joined: Tue Jan 24, 2006 8:50 am
Posts: 249
в общем теперь так... что с твоей версией(c местного ftp).. что с моей(с зеркала официального ftp), как я понял разницы нету(всмысле итог один и тот же, но размер файлов разный)...
распоковал djgpp и menuetlibc....
прописал все переменные среды(DJGPP, MENUETDEV - поставил c:\DJGPP\menuetos\ и в Path добавил пути к menuetos\include\, menuetos\linuxtools\, DJGPP\bin\)...
распоковал FCEU_v0.1a_src.7z...
получил кучу *.c, *.h, *.o и других файлов...
у тебя там лежит уже скомпилированный fce(размер 263104)... рабочий...
и fce.kex(размер 74292, сжатый kpack)... тоже рабочий...
проверяю через KlbrInWin.exe, на "Matrix v0.06, The by Wojciech Andralojc (PD).nes" и "Tetramino v0.30 by Damian Yerrick (PD).nes"....

Опыт 1:
снес откомпилированные(но оставил *.o файлы)...
сразу попытался собрать fce через MK.bat...
получаю fce(размер 252352)... хм.. проверяю... рабочий.. =)...

Опыт 2:
снес fce и все *.o файлы... даже в подпапках.. =)...
запускаю MKBase.bat... fce.o, m6502.o, mapper.o компилируються нормально.... вываливается ошибка на компиляции video.c..
Code:
gcc -Wall    -c -o video.o video.c
video.c: In function 'InitVirtualVideo':
video.c:39: warning: assignment makes pointer from integer without a cast
video.c: In function 'writepcx':
video.c:65: error: expected ')' before 'PSS'
video.c:65: warning: too few arguments for format
video.c:73: warning: pointer targets in passing argument 1 of 'sprintf' differ i
n signedness
video.c:111: warning: pointer targets in passing argument 1 of 'sprintf' differ
in signedness
make.exe: *** [video.o] Error 1

варнинги я как понял совсем не причер.. смотрю причину ерроров.. =)..
так... чтото с переменной PSS... она определяется в version.h...
залез туда... вижу:
Code:
...
#if PSS_STYLE==2
#define PSS "\\"
#define PS '\\'
#elif PSS_STYLE==1
#define PSS "/"
#define PS '/'
#elif PSS_STYLE==3
#define PSS "\\"
#define PS '\\'
#endif
...

хм... видимо pss не определяеться.... т.е. PSS_STYLE не проходит...
тут два вариант придумал... либо изменить в version.h вместо выше написанного...
Code:
...
#define PSS "/"
#define PS '/'
...

либо
вставить в первую строчку в файл Makefile.base строчку:
Code:
TFLAGS  = -O2 -fomit-frame-pointer -DC80x86 -DLSB_FIRST -DVGA -DPSS_STYLE=1 -DDRIVER_DIR="\"menuet\""

строчку взял из Makefile.menuet... кстати.. этот файл нигде не участвует.. ну и ладно.. =))..
я рекомендую второй вариант... =)... благо с первым вариантов fce будет компилироваться и собираться... но работать не будет.. =)..
...
чтож... пытаюсь снова скомпилировать.. получаю
Code:
c:\DJGPP\bin\ld.exe: nest.o: No such file: No such file or directory (ENOENT)

видимо не хватает файлика nest.o... иду в drivers\menuet\...
выполняю команду make.... получаю ошибки(пока пишу две главные.. остальные может изчезнут)...
Code:
nest.c:1:70: error: D:/OS/menuetos/include/menuet/os.h: No such file or directory (ENOENT)
vgavblank.h:2:50: error: D:/OS/menuetos/include/SDL/SDL_timer.h: No such file or directory (ENOENT)

хм... вижу что видимо стоят жесткие пути... иду исправлять.. =)...
как не страно.. правильные(т.е. относительные пути для настроеной системы) были закоментированы... убираю полные пути... убираю коментарии.. опять make...
nest.o собирается... хоть make и выдает вроде(пишу так, ибо я с майком крайне мало работал.. и плохо разбираюсь в ошибках) ошибку:
Code:
nest.o:nest.c:(.text+0x40f): undefined reference to `_DriverInterface'
nest.o:nest.c:(.text+0x7b1): undefined reference to `_LoadGame'
nest.o:nest.c:(.text+0x7bd): undefined reference to `_InitMachine'
nest.o:nest.c:(.text+0x7c6): undefined reference to `_TrashMachine'
nest.o:nest.c:(.text+0x7d6): undefined reference to `_Run6502'
nest.o:nest.c:(.text+0x7db): undefined reference to `_TrashFCE'
nest.o:nest.c:(.text+0x7e0): undefined reference to `_TrashMachine'
nest.o:nest.c:(.text+0x837): undefined reference to `_fceumain'
nest.o:nest.c:(.text+0x986): undefined reference to `_SDL_Delay'
make.exe: *** [nest] Error 1


теперь MKBase.bat проходит нормально.. =).. буду запускать MK.bat..
новая ошибка... не находит m.о... хотя он нормально собирается еще в MKBase.bat... это как я понял mapper'ы...
смотрю в MK.bat... вижу
Code:
mld fce fce.o mapper.o m6502.o video.o general.o endian.o svga.o sound.o nsf.o fds.o gg.o ines.o state.o nest.o m.o LibmSDL.a

строчка сборки запускаемого файла... как я понял.. =)... чтож... нужный файл m.o лежит в папке mappers\.. чтоже.. исправляю MK.bat... добавляю гденить сверху строчку
Code:
copy mappers\m.o m.o
...
и о чудо... файл полностью собирается... получается fce размером 252352 байт... не верю глазам.. =)... такой же как и у тебя.. =)... контрольная сумма не совпадает только...
запускаю KlbrInWin.exe... вбиваю путь... нажимаю enter... и УРА... работает.. =)...

вот мой путь к сборки твоей прогой... надеюсь тут ты подчерпнешь моменты чтобы исправить у себя, для наименьшей затраты для сборки программы...

з.ы. компилировал и собирал программу три дня.. =)... не полные конечно.... первое с чем столкнулся - это найти средство сборки.. =).. потом помучался с version.h... и сильно и долго мучался с готовой но не рабочей программой.. =)... благо из двух вариантов(описанныйх выше) с version.h, я выбрал первый.. =)... а вот про нехватку нужных флагов для компилятора - я не догадывался.. поэтому и не мог собрать рабочую программу... решил написать опус о своих старанию сюда.. и о нерабочей программе(т.е. явно неправильной сборки)... но пока писал - проверял разные варианты.. и нарвался на правильный.. =)...
надеюсь комунить сей рассказ понравиться.... а может и не понравиться... я получил опыт пока собирал проект... благо привык нажать одну кнопку.. и получить готовую прогу.. конечно для меня многое не понятно.... но все равно... =)... спасибо...


Top
   
 Post subject: Re: Порт FCE Ultra
PostPosted: Mon Dec 15, 2008 7:20 am 
Offline
User avatar

Joined: Fri Jun 27, 2008 3:22 pm
Posts: 988
Молодец! Сам догадался, значит не так уж ты и не очень в Си. А я вот тут http://asper.ucoz.ru/load/0-0-0-2-20 уже исходник с исправленным Makefile.base и MK.bat закачал с намерением написать какие надо внести изменения в эти файлы в FCEU_v0.1a_src.7z.

s1n wrote:
получаю fce(размер 252352)... хм.. проверяю... рабочий.. =)...

Размеры fce разные, потому что в архиве вариант скомпилированный с libc от Ярека, ты же скомпилировал с libc от Diamond'а.

s1n wrote:
Makefile.menuet... кстати.. этот файл нигде не участвует.. ну и ладно.. =))..


поначалу я его использовал когда компилировал всё строчкой make -f Makefile.base, но потом решил, что лучше отдельно собирать базовый код и отдельно код относящийся к Колибри.

s1n wrote:
благо с первым вариантов fce будет компилироваться и собираться... но работать не будет.. =)..

верно.

s1n wrote:
хм... вижу что видимо стоят жесткие пути... иду исправлять.. =)...
как не страно.. правильные(т.е. относительные пути для настроеной системы) были закоментированы...

У меня почему-то с относительными путями эти файлы не находятся, но на всякий случай (и для общего понимания дела) я их оставил в комментарии.

s1n wrote:
nest.o собирается... хоть make и выдает вроде(пишу так, ибо я с майком крайне мало работал.. и плохо разбираюсь в ошибках) ошибку:


Эти undefined reference это функции определенные в других частях программы и не видимые в этом модуле.
Мне было лень писать extern'ы и я просто забил на них, т.к. программа все равно собирается. Я подумал, что если у кого-то лени поменьше и есть желание то он всегда сможет исправить это самостоятельно.

s1n wrote:
вот мой путь к сборки твоей прогой... надеюсь тут ты подчерпнешь моменты чтобы исправить у себя, для наименьшей затраты для сборки программы...

А я вот ещё вчера вечером самостоятельно исправил и надеялся тебе помочь :)

s1n wrote:
з.ы. компилировал и собирал программу три дня.. =)...

это ещё ничего у меня ушло на это около месяца, учитывая то, что я до этого писал на Си (и С++) только для компиляторов фирмы Borland и ничего не знал о мэйкфайлах и встроенном ассемблере gcc, поэтому
s1n wrote:
благо привык нажать одну кнопку

мне понятно :) .

s1n wrote:
конечно для меня многое не понятно.... но все равно... =)... спасибо...

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

Вообще я бы хотел добавить ещё звук к эмулятору, но т.к. на мою аудиокарту пока нет драйвера, то и тестировать мне неначём. Поэтому если у кого-нибудь возникнет такое же желание и будет поддерживаемая Колибри аудиокарта...


Top
   
 Post subject: Re: Порт FCE Ultra
PostPosted: Mon Dec 15, 2008 9:53 am 
Offline
User avatar

Joined: Tue Jan 24, 2006 8:50 am
Posts: 249
решил поковырять FCEUv0.2src.7z.....
в MK.bat прописал полный путь к libmSDL.a...
Code:
mld nest drivers/menuet/nest.o D:/OS/menuetos/lib/libmSDL.a

но у тебя в папке уже есть он... так что можно либо грохнуть libmSDL.a, либо изменить путь... примерно так..
Code:
mld nest drivers/menuet/nest.o libmSDL.a

и Makefile.win не собирается.. =).. но там не стал заморачиваться... мне он не очень нужен...
и еще... зачем ты оставляешь в архиве с сорсами *.o и fce???

з.ы. а ты changelog не ведешь??? просто интеерсно что ты добавил в новой версии... что убрал... readme твоего не видно в сорсах.. =)

з.ы.2. добавил страничку на wiki (http://wiki.kolibrios.org/Applications/ru/FCEU)...


Top
   
 Post subject: Re: Порт FCE Ultra
PostPosted: Tue Dec 16, 2008 12:52 pm 
Offline
User avatar

Joined: Fri Jun 27, 2008 3:22 pm
Posts: 988
Исправил MK.bat. Выкинул всё лишнее. Ссылка та же.
Quote:
changelog не ведешь???

Он идет вместе с бинарником, там же и readme.
За страничку на wiki спасибо.
Я там немножко ошибся. Можешь исправить:
Quote:
4. Заходишь в папку menuetos из пункта 2.

на
4. Заходишь в папку menuetos из пункта 3.


Top
   
 Post subject: Re: Порт FCE Ultra
PostPosted: Tue Dec 16, 2008 1:13 pm 
Offline
User avatar

Joined: Tue Jan 24, 2006 8:50 am
Posts: 249
fix it.. =)...
за сорсы обновленые спасибо.. буду вникать...


Top
   
 Post subject: Re: Порт FCE Ultra
PostPosted: Mon Jun 15, 2009 9:44 pm 
Offline
User avatar

Joined: Fri Jun 27, 2008 3:22 pm
Posts: 988
Недели через две будет новая версия, а пока Just for fun, пара старых версий с глючным выводом графики.
http://narod.ru/disk/9897453000/FCEU_GluVers.7z.html


Top
   
 Post subject: Re: Порт FCE Ultra
PostPosted: Thu Jul 09, 2009 5:07 pm 
Offline
User avatar

Joined: Fri Jun 27, 2008 3:22 pm
Posts: 988
Версия порта 0.3.
Версия эмулятора 0.96.

- добавлено 33 новых маппера( 48, 51, 52, 57, 61, 72, 74, 77, 82, 83, 88, 92, 96, 114, 115-117, 140, 144, 152-156, 189, 227, 232, 234, 235, 242, 248-250 )
- добавлены новые эмулируемые устройства ( power pads, game pads, zapper, arkanoid, shadow, Family BASIC Keyboard )
- выбор виртуального джойстика
- ускоренный вывод графики
- вывод fps
- сообщения теперь выводятся на доску отладки
- см. файл "ChangeLog.txt" чтобы просмотреть весь список изменений

_____________________________________________________________________________________________________________________________________________

Port version 0.3.
Emulator version 0.96.

- 33 new mappers were add ( 48, 51, 52, 57, 61, 72, 74, 77, 82, 83, 88, 92, 96, 114, 115-117, 140, 144, 152-156, 189, 227, 232, 234, 235, 242, 248-250 )
- new emulated devices were add ( power pads, game pads, zapper, arkanoid, shadow, Family BASIC Keyboard )
- select virtual joysticks
- faster graphics output
- fps output
- messages now output to the debug board
- see file "ChangeLog.txt" for full list of changes


Attachments:
FCEU_v0.3.7z [141.86 KiB]
Downloaded 290 times
Top
   
 Post subject: Re: Порт FCE Ultra
PostPosted: Thu Jul 09, 2009 5:11 pm 
Offline
User avatar

Joined: Fri Jun 27, 2008 3:22 pm
Posts: 988
hidnplayr
Duck hunt, Ski Or die! games would work now. :)


Top
   
 Post subject: Re: Порт FCE Ultra
PostPosted: Fri Jul 10, 2009 9:56 am 
Offline
User avatar

Joined: Tue Jan 24, 2006 8:50 am
Posts: 249
спасибо за обновления..


Top
   
 Post subject: Re: Порт FCE Ultra
PostPosted: Fri Jul 10, 2009 10:44 am 
Offline
User avatar

Joined: Fri Jun 27, 2008 3:22 pm
Posts: 988
Пожалуйста. :)
Работаю сейчас над звуком, тестирую в Qemu на SoundBlaster. Плохо, что нет статьи по работе со звуковыми драйверами (Infinity, Sound, SB16), из-за этого много времени уходит на копание в коде драйверов и понимание логики работы звуковой подсистемы Колибри. :(
Может быть кто-нибудь мог бы взяться за написание такой статьи, а то кроме ac97snd и doom написанных Serge до сих пор не одно приложение не работает со звуком.


Top
   
 Post subject: Re: Порт FCE Ultra
PostPosted: Fri Jul 10, 2009 3:26 pm 
Offline
Kernel Developer
User avatar

Joined: Mon Nov 28, 2005 8:00 pm
Posts: 1601
dosbox тоже работает со звуком.
API для работы со звуком с интерфейсом для Си и реализацией на Fasm есть на svn в папке programs/develop/sdk/trunk/sound и в SDK. Копаться в драйверах необязательно.

_________________
Ушёл к умным, знающим и культурным людям.


Top
   
 Post subject: Re: Порт FCE Ultra
PostPosted: Wed Jul 15, 2009 9:10 pm 
Offline
User avatar

Joined: Fri Jun 27, 2008 3:22 pm
Posts: 988
Действительно работает, хотя в Qemu насладиться звуком dosbox и не получается.
SDK я конечно же смотрел, sound.lib с DJGPP не работает (видимо писалась под какой-то другой компилятор языка C с другим количеством подчеркиваний, не стал разбираться), но это не проблема все эти функции я переписал в отдельный модуль FCEU. Дело в том, что в эти функции мы передаем хэндлер буфера типа указатель на STREAM, как я понял, а у меня уже есть заполненный буфер в FCEU, содержимое которого мне просто нужно скопировать в буфер из которого и читаются сэмплы. Со звуком я раньше никогда не работал, так что может где-то что-то и напутал, но имеющийся, например, порт FCE Ultra под DOS, именно так и поступает выводя звук на SB16 аудиокарту.

Цитата из файла porting.txt (документация по портированию FCE Ultra, поставляется вместе с исходниками):

void FCEUD_Update(uint8 *XBuf, int32 *Buffer, int Count);
Called by FCE Ultra on every emulated frame. This function should
perform the following three things(in any order):

1.
Update the data pointed to by the pointers passed to
FCEUI_SetInput() and FCEUI_SetInputFC().
2.
Copy contents of XBuf over to video memory(or whatever needs to be
done to make the contents of XBuf visible on screen).
Each line is 256 pixels(and bytes) in width, and there can be 240
lines. The pitch for each line is 272 bytes.
XBuf will be 0 if the symbol FRAMESKIP is defined and this frame
was skipped.
3.
Write the contents of "Buffer" to the sound device. "Count" is the
number of samples to write. Only the lower 16-bits of each
sample are used, so each 32-bit sample in "Buffer" can be converted to
signed 16-bit by dropping the upper 16 bits.
When sound was disabled for the frame, "Count" will be 0.


Конец цитаты.

Если работать напрямую с драйвером SB16, то другие аудиокарты конечно же не станут выводить звук, а то и что похуже случится. Если же работать с Infinity (что и в принципе и необходимо), то не вполне понятно как состыковать буфер, предоставляемый FCEUD_Update и STREAM.


Top
   
 Post subject: Re: Порт FCE Ultra
PostPosted: Thu Aug 20, 2009 11:31 am 
Offline
User avatar

Joined: Fri Jun 27, 2008 3:22 pm
Posts: 988
Со звуком более - менее разобрался. Как оказалось создавать STREAM вручную не надо. Первым делом необходимо создать буфер через функцию CreateBuffer, которая создает буфер нужного формата и самостоятельно заполняет поля STREAM, после чего возвращает на него указатель через параметр. Существует несколько видов буферов: PCM_STATIC, PCM_RING, PCM_OUT и т.д. Некоторые функции драйвера Infinity предназначены для работы только с определенными видами буферов.
Вобщем создаю буфер так:
Code:
   if (CreateBuffer(PCM_1_8_44, 0, &SndBuf)) //Create stream buffer
   {
     __kolibri__debug_str("create buffer return error\n\r");
     return 0;
   }

звук вывожу в функции FCEUD_Update(uint8 *XBuf, int32 *Buffer, int Count); через WaveOut(SndBuf,Buf,Count);
Звук есть, но пока что лишь отдаленно напоминает то, что должно быть на самом деле. Продолжаю работать над этим.


Top
   
 Post subject: Re: Порт FCE Ultra
PostPosted: Thu Aug 20, 2009 2:14 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Asper

WaveOut() ,блокирует поток пока не прокачает все данные во внутренний буфер. И там большой лаг от вызова функции до вывода на чип (макс. 0.17с). лучше выводить звук через кольцевой буфер PCM_RING. Посмотри в исходниках Doom svn/programs/games/doom/trunk/s_sound.c S_Init() запускает в отдельном процессе sound_proc() и та выполняет всю работу по микшированию и выводу звука.


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 79 posts ]  Go to page Previous 1 2 3 4 5 6 Next

All times are UTC+03:00


Who is online

Users browsing this forum: No registered users and 1 guest


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Limited