[http://mupen64plus.retrouprising.com Project page] == Primary Goal == The primary goal of this re-architecture is to split this large project into smaller projects which may proceed to be developed independently of each other. The advantages of the new architecture are: * The build system can be greatly simplified * Each module can use its own build system. For example, the Qt GUI might switch to cmake for better Qt integration. * Porting the emulator core to other platforms (namely Win32) will be greatly simplified by removing the most platform-specific pieces. * Making releases for each package will be simpler and faster * Mupen64Plus may be included into the Debian/Ubuntu repositories since glN64 (with its 'unknown' license) will be a separate project == Topography == This re-architecture will force us to lay boundaries with well-defined APIs between different parts of the emulator. Here are some initial suggestions for the new layout of the modules: # Mupen64plus-core #* To simplify porting to other platforms, the core needs to be as lean as possible #* For this reason, the GUI interfaces, the ROM cache, and the zip/lzma/7zip decompressors will be removed #* The core will contain the code for: #** Emulating the R4300 main CPU and memory systems #** Loading and configuring plugins #** Reading, parsing, and writing all configuration files for the core + plugins #** Parsing and returning information about ROM images #** Core user interface for keyboard and LIRC input #** Savestates and screenshots #** An on-screen display #** Cheat and debugger core functions #** 'Dummy' plugins # Mupen64plus-console, Mupen64plus-gtk, Mupen64plus-qt #* Command-line only, GTK, and Qt front-end interfaces #* Each front-end for the core library will be a separate project #* The ROM cache code will be forked and included into both GUIs #* The front-ends will be responsible for finding and loading the core library and the plugins #* The dynamic library handle of the core will be passed to all the plugins, and the dynamic library handle of the plugins will be passed to the core #* The front-ends will be responsible for loading and decompressing the ROM image, and passing a pointer to the core # Plugins (RiceVideo, glN64, glide64, Blight Input, JTTL Audio) #* The plugins will be spun off into separate projects #* The plugin API will change, and will be incompatible with the old Zilmar spec == Project Owners == Richard42 will retain ownership of the Mupen64plus-core and Mupen64plus-console modules. I will recommend that Slougi take ownership of the Qt GUI. The plugins and GTK GUI are up for grabs. == Work To Do == Tasks which have been completed will be marked with the strikethrough format. === Prior to starting on the code === # Write design document for Core API #* Front-end + debugger + cheat #* Configuration interface #* Video plugin #* Audio plugin #* Input plugin #* RSP plugin # Set up new Mercurial repository for project === Coding tasks === # First steps #* Split & fork the source files into new structure # Core #* Refactor/simplify makefiles #* Remove #include statements from header files #* Write new configuration load/parse/save functionality #* Separate event loop out of main.c into new source file #* Fix broken WM_KeyDown/WM_KeyUp commands sent to input plugin #* Remove main() function #* Remove main/winlnxdefs.h #* Add new shared library interface (Must be thread-safe and re-entrant where necessary) #** api/callbacks.c #** api/common.c #** api/config.c #** api/debugger.c #** api/frontend.c #** api/vidext.c #* Refactor core code for new debug info interface (instead of printf(), send back to front-end) #* Modify plugin-handling code to use new plugin API #* Fix 64-bit dynamic recompiler for dynamic lib #* Update translate.c file handling and translations #* Update cheat.c cheat code handling #* Remove compare_core.c, add core comparison feature to console-ui #* Generate versioned core library #* Simplify makefile / pre.mk #* Refactor install.sh #* Go through google code issue list, apply patches and close issue reports # Front-ends #* Refactor/simplify makefiles ## CLI ##* Write from scratch, based on main.c ##* Update man page ## GUI-Qt ##* Adapt from previous mupen64puls Qt GUI code, pulling code from CLI front-end (Slougi) ## GUI-GTK ##* Adapt from previous mupen64puls GTK GUI code, pulling code from CLI front-end (TBD) # Plug-ins #* For each plug-in: #** m64p-rsp-hle #** m64p-audio-sdl #** m64p-video-rice #** m64p-input-sdl #* Remove existing configuration read/write code #* Add Deadzone and Scaling parameters to Blight Input plugin #* Refactor to use new configuration interface through core library #* Refactor for changes in core plugin API #* Refactor for new debug info interface (instead of printf(), send back to front-end)