Open main menu

Difference between revisions of "OpenTasks"

1,448 bytes added ,  12:20, 19 March 2009
Line 83: Line 83:
* Possibly experience with cmake or another meta-build system
* Possibly experience with cmake or another meta-build system


=== Implemented support for loadable modules on Nintendo DS and other ports ===
=== Implemented support for loadable modules on small devices ===
''Technical Contact'': [[User:Fingolfin|Max Horn]]
''Technical Contact'': [[User:Fingolfin|Max Horn]]


''Background:''
''Background:''


TODO engines take up lots of storage space and RAM. Putting them into lodable modules reduces memory usage, as only needed module needs to be loaded. For DS port, this is is esp. nice, because it right now has to be shipped in multiple versions, combining different sets of engines. Ugly.  
ScummVM by now contains about two dozen engines for different adventure games. Each of these takes up lots of storage space in the ScummVM binary, and hence also RAM, even if not used. Since both are scarce resources on some of our smaller targets (e.g. the Nintendo DS, which only has 4 MB RAM), this leads to problems. Some of the ports work around this by shipping multiple ScummVM binaries, each with a different subset of engines. This is not ideal, as it means more work for the developers and is confusing to users.
 
Putting all engines into lodable modules reduces memory usage, as this way during game play only a single  module needs to be in RAM. ScummVM itself is prepared for loadable module support. In fact several of our ports, notably the Windows, Linux and Mac OS X ports, already support loadable modules. This is easy for them as the operating system already provides loadable modules. But this is not the case on systems like the Dreamcast, Nintendo Gamecube & DS & Wii, the PlayStation Portable, Symbian and others.  
 


''The Task:''
''The Task:''


TODO Implement infrastructure that allows generating loadable modules for the Nintendo DS, and code which then allows to (un)load these during runtime. For our Dreamcast code, we already have code doing that, which could be used as a reference, and maybe even some of its code could be reduced. Ultimately, the goal would be to not just target the Nintendo DS, but all target platforms which use the ELF binary format and an ARM processor. Bonus: Support for MIPS processors to cover Playstation 2 / PSP ports.
Implement support for loadable modules for at least two "small" targets where this is currently not possible. For the Dreamcast, Marcus Comstedt solved this by implementing [http://scummvm.svn.sourceforge.net/viewvc/scummvm/scummvm/trunk/backends/platform/dc/ a module loader] on his own. You can use this as a starting point.
 
There is a [http://sourceware.org/binutils/docs-2.19/ld/Scripts.html#Scripts linker script] which is used to generate custom loadable modules "manually". Furthermore, he implemented a custom loader for [http://en.wikipedia.org/wiki/Executable_and_Linkable_Format ELF binaries] which takes care of the run-tinke linking.
 
You would have to adapt this to generated and load ELF binaries for ARM processors (for Nintendo DS, WinCE, Symbian, GP2x), or MIPS processors (PS2 and PSP), or PowerPC (Nintendo Wii & Gamecube). The original Dreamcast code is for Sh processors. Ideally, your code is generic enough to be usable for all these platforms, but at least two of these four should be supported, to ensure it is generic enough.


TODO: Add reference to the DS build chain, DevKitPro, etc.


''Required Skills:''
''Required Skills:''


* Good C++ skills.  
* Good C++ skills.  
* Some knowledge of the ELF binary format (great documentation is available on the net, start e.g. at Wikipedia).
* Some knowledge of the ELF binary format (great documentation is available on the net, start e.g. [http://en.wikipedia.org/wiki/Executable_and_Linkable_Format at Wikipedia]).
* A Nintendo DS for testing would be ideal.
* Any of the listed "small" devices (Nintendo DS, Wii, Gamecube, PS2, PSP, Dreamcast, GP2x, any WinCE or Symbian device supporting ScummVM, ...); ideally multiple. Or figure out how to setup compilers for them


=== Small Devices Backend ===
=== Small Devices Backend ===
1,079

edits