PDA

View Full Version : FPC 4 Wii



Legolas
24-02-2011, 06:03 PM
Hello :)
I have spent some hours of work on the free pascal compiler for Nintendo Wii. In the past days I have uploaded all sources on the fpc SVN trunk and this week-end I'll post on the fpc wiki a sort of howto that shows what is required and how to build it.

As far as I can see, the examples are running fine on the dolphin emulator. Relfos has tried an executable on a real Wii and he said that it worked as expected. Another good news is that on the dolphin emulator the speed is the same as the gcc compiler. ;D

I have made a quick port of SDL too. It compiles fine but seems that the emulator does not like sdl, because it shows a black screen. Searching on the net, seems that it is an issue of the emulator... ::)

noeska
24-02-2011, 06:50 PM
Nice :-)

Maybe i should pick up my abondonded 3d project (gl2gx) for the wii again. And do it in pascal this time.

gl2gx: http://code.google.com/p/gl2gx/

azrael11
24-02-2011, 10:24 PM
That is very interesting ...
I have a wii ...
Hmmm i always want to write a simple game for this console ....

Continue the good job legolas...

Legolas
27-02-2011, 07:33 PM
Wii page created on the wiki:

http://wiki.freepascal.org/Wii

It shows how to build a complete toolchain from the svn repository. Feel free to test it and report / correct errors :)

noeska
28-02-2011, 06:18 PM
I managed to get to the build_libs.bat step, but there i get:

D:\fpc4wii\build_libs>build_libs.bat
Processing Makefile.fpc
powerpc-wii requires: rtl
Writing Makefile
/bin/rm.exe -f units/powerpc-wii/mad.ppu
/bin/rm.exe -rf units
/bin/rm.exe -f *.o *.ppu *.rst *.s *.a *.so *.ppl
/bin/rm.exe -rf *.sl
/bin/rm.exe -f fpcmade.* Package.fpc ppas.sh script.res link.res
/bin/rm.exe -f *_ppas.bat
/d/FPC/2.2.4/bin/i386-Win32/gmkdir.exe -p units/powerpc-wii
ppcppc.exe -Twii -Ppowerpc -XPpowerpc-eabi- -Xr -Fu../../rtl/units/powerpc-wii -
Fisrc -FE. -FUunits/powerpc-wii -dpowerpc src/mad.pas
Fatal: Can't find unit system used by mad
Fatal: Compilation aborted
make: *** [mad.ppu] Error 1
Er bestaat al een submap of bestand D:\fpc4wii\units\powerpc-wii\mad.
0 bestand(en) gekopieerd
FPCMake Version 2.0.0 [2011/02/28]
Processing Makefile.fpc
Targets: "powerpc-wii"
Globals:
FPCDIR = "../.."
PACKAGESDIR = "$(FPCDIR)/packages $(FPCDIR)/packages/base $(FPCDIR)/packages
/extra $(FPCDIR)/packages"
UNITSDIR = "$(FPCDIR)/units/$(FULLTARGET)"
BASEDIR = "D:\FPC_SVN\packages\mad"
Required packages for wii-powerpc: rtl
Package "rtl": Looking for Makefile.fpc: "../../rtl/Makefile.fpc ../../packages
/rtl/Makefile.fpc ../../packages/base/rtl/Makefile.fpc ../../packages/extra/rtl/
Makefile.fpc ../../packages/rtl/Makefile.fpc "
Package rtl: ../../rtl/Makefile.fpc
Required packages for wii-powerpc:
Required dirs for powerpc-wii: wii
Subdir: ../../rtl/wii/Makefile.fpc
Required packages for wii-powerpc:
Required dirs for powerpc-wii:
Required dirs for powerpc-wii:
Writing Package.fpc
1 bestand(en) gekopieerd.
Druk op een toets om door te gaan. . .
Yes i use d instead of c, but i changed the bat files accordingly. A note on the one should edit the .bat files accordingly to the svn folder for fpc could not hurt. Also move in your new ... could be better frased as Go to the new ...

Looking into the previouse step build_rtl.bat i now noticed the following error message:

d:/fpc4wii/bin/powerpc-wii/ppcppc.exe -Twii -Ppowerpc -XPpowerpc-eabi- -Xr -Fi..
/inc -Fi../powerpc -FE. -FU../../rtl/units/powerpc-wii -Twii -CX -XX -O2 -dpower
pc -Us -Sg system.pp
thread.inc(411,10) Warning: Function result does not seem to be set
libc.inc(17,10) Warning: Function result does not seem to be set
system.pp(144,2) Warning: Variable "execpathstr" read but nowhere assigned
d:\fpc4wii\bin\powerpc-wii\powerpc-eabi-ar.exe: creating ..\..\rtl\units\powerpc
-wii\libpsystem.a
d:\fpc4wii\bin\powerpc-wii\powerpc-eabi-ar.exe: unable to rename '..\..\rtl\unit
s\powerpc-wii\libpsystem.a'; reason: Permission denied
system.pp(275) Error: Error while linking
system.pp(275) Fatal: There were 1 errors compiling module, stopping
Fatal: Compilation aborted
make: *** [system.ppu] Error 1
Bestand niet gevonden - *.*
0 bestand(en) gekopieerd

Doing a new build_rtl.bat seems to be going better and not give the previous error. Now on to the build_libs.bat again ....

Now build_libs.bat gives no errors.

But when building the examples i get:

D:\fpc4wii\build_examples\examples>make OS_TARGET=wii CPU_TARGET=powerpc BINUTIL
SPREFIX=powerpc-eabi- PP=ppcppc.exe
make -C audio all
make[1]: Entering directory `/d/fpc4wii/build_examples/examples/audio'
make -C modplay all
make[2]: Entering directory `/d/fpc4wii/build_examples/examples/audio/modplay'
Converting technique.mod file to asm...
Creating technique.mod.inc include file...
Assembling technique.mod.s file...
Done!
ppcppc.exe -Twii -Ppowerpc -XPpowerpc-eabi- -Xr -g -Xm -FE. -FUunits/powerpc-wii
-dpowerpc modplay.pp
Fatal: Can't find unit system used by modplay
Fatal: Compilation aborted
make[2]: *** [modplay.dol] Error 1
make[2]: Leaving directory `/d/fpc4wii/build_examples/examples/audio/modplay'
make[1]: *** [modplay_all] Error 2
make[1]: Leaving directory `/d/fpc4wii/build_examples/examples/audio'
make: *** [audio_all] Error 2

Legolas
28-02-2011, 10:07 PM
Ok, thanks for the suggestions. I have edited a little bit the page, following your advices ;)

The error you get comes in two cases: 1) the rtl isn't built at all or it misses some units or 2) the file fpc.cfg is missing or it points to the wrong paths.
Please, make sure that in C:\fpc4wii\units\powerpc-wii there are system.o and system.ppu.

In the meanwhile, I just found some problems (a couple of functions I forgot to translate...) on libogcfpc. Please, download gccore.inc again from the svn trunk :)

noeska
02-03-2011, 06:45 PM
After doing a update to head on the fpc sources i decided to to a new build_rtl.
Now it think it fails on:

d:/fpc4wii/bin/powerpc-wii/ppcppc.exe -Twii -Ppowerpc -XPpowerpc-eabi- -Xr -Fi..
/inc -Fi../powerpc -FE. -FU../../rtl/units/powerpc-wii -Twii -CX -XX -O2 -dpower
pc ../inc/cmem.pp
D:\fpc4wii\bin\powerpc-wii\powerpc-eabi-ar.exe: creating ..\..\rtl\units\powerpc
-wii\libpcmem.a
Bestand niet gevonden - *.*
0 bestand(en) gekopieerd
A file not found does not seem good in my opnion. Although i do not see something like a build error.

Legolas
02-03-2011, 07:09 PM
After doing a update to head on the fpc sources i decided to to a new build_rtl.
Now it think it fails on:

A file not found does not seem good in my opnion. Although i do not see something like a build error.

Definitely not. The problem is in the batch script: it searches the units in a folder that does not exist...


XCOPY /Y %FPC_SRC_DIR%\rtl\wii\units\powerpc-wii\*.* %FPC_INST_DIR%\units\powerpc-wii\should be


XCOPY /Y %FPC_SRC_DIR%\rtl\units\powerpc-wii\*.* %FPC_INST_DIR%\units\powerpc-wii\I have fixed the wiki too. Sorry for the inconvenience :-[

noeska
02-03-2011, 08:03 PM
Ok applied that fix and started from scratch and i now seem to have an almost working fpc4wii compiler.
The audio examples now compile.
But now i get some errors on the usbgecko examples:

make[1]: Entering directory `/d/fpc4wii/build_examples/examples/devices'
make -C network all
make[2]: Entering directory `/d/fpc4wii/build_examples/examples/devices/network'

make -C sockettest all
make[3]: Entering directory `/d/fpc4wii/build_examples/examples/devices/network/
sockettest'
/d/FPC/2.2.4/bin/i386-Win32/gmkdir.exe -p units/powerpc-wii
ppcppc.exe -Twii -Ppowerpc -XPpowerpc-eabi- -Xr -g -Xm -FE. -FUunits/powerpc-wii
-dpowerpc sockettest.pp
make[3]: Leaving directory `/d/fpc4wii/build_examples/examples/devices/network/s
ockettest'
make[2]: Leaving directory `/d/fpc4wii/build_examples/examples/devices/network'
make -C usbgecko all
make[2]: Entering directory `/d/fpc4wii/build_examples/examples/devices/usbgecko
'
make -C gdbstub all
make[3]: Entering directory `/d/fpc4wii/build_examples/examples/devices/usbgecko
/gdbstub'
/d/FPC/2.2.4/bin/i386-Win32/gmkdir.exe -p units/powerpc-wii
ppcppc.exe -Twii -Ppowerpc -XPpowerpc-eabi- -Xr -g -Xm -FE. -FUunits/powerpc-wii
-dpowerpc gdbstub.pp
D:\devkitPro\libogc\lib\wii\\libdb.a(debug_supp.o) : In function `gdbstub_getoffs
ets':
/Users/davem/projects/devkitpro/libogc/libdb/debug_supp.c:289: undefined referen
ce to `__text_fstart'
/Users/davem/projects/devkitpro/libogc/libdb/debug_supp.c:289: undefined referen
ce to `__text_fstart'
/Users/davem/projects/devkitpro/libogc/libdb/debug_supp.c:289: undefined referen
ce to `__data_fstart'
/Users/davem/projects/devkitpro/libogc/libdb/debug_supp.c:289: undefined referen
ce to `__data_fstart'
/Users/davem/projects/devkitpro/libogc/libdb/debug_supp.c:290: undefined referen
ce to `__bss_fstart'
/Users/davem/projects/devkitpro/libogc/libdb/debug_supp.c:290: undefined referen
ce to `__bss_fstart'
gdbstub.pp(49,33) Error: Error while linking
gdbstub.pp(49,33) Fatal: There were 1 errors compiling module, stopping
Fatal: Compilation aborted
make[3]: *** [gdbstub.dol] Error 1
make[3]: Leaving directory `/d/fpc4wii/build_examples/examples/devices/usbgecko/
gdbstub'
make[2]: *** [gdbstub_all] Error 2
make[2]: Leaving directory `/d/fpc4wii/build_examples/examples/devices/usbgecko'

make[1]: *** [usbgecko_all] Error 2
make[1]: Leaving directory `/d/fpc4wii/build_examples/examples/devices'
make: *** [devices_all] Error 2

Legolas
02-03-2011, 08:30 PM
That example needs to be fixed. Maybe I have missed to link some library or the linking order is wrong, but I haven't investigated further, because I'm focusing on the library itself.

EDIT: seems that this could be fixed by passing --gc-sections to the linker, or rather by passing -k--gc-sections to the fpc compiler. It is only matter to add this parameter to the makefile.fpc:


[compiler]
options=-Xm -k--gc-sectionsthen regenerate the Makefile as usual, by


fpcmake -r -w -Twii

noeska
02-03-2011, 09:38 PM
Thanks.

I am not that good with fpcmake and the likes.

I now run into problems when executing the fpcmake -r -w Twii as it then states:

Processing Makefile.fpc
Error: Target "wii", package "libogcfpc" not found
Just removing usbgecko examples gives and not found for usbgecko.

Maybe i should compile the examples one by one. :-)

Anyways i am going to try out the working examples on the wii this weekend.

Is not the gecko some kind of debug device?

Legolas
02-03-2011, 10:40 PM
Yes, it is. BTW, as you have noticed, things need some work here and there. I'll try to fix these issues in the next days. Let me know if the examples are running fine on the Wii :)