X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=source%2Fmupen64plus-core%2Fdoc%2Femuwiki-api-doc%2FMupen64Plus_v2.0_Design_Proposal_3.txt;fp=source%2Fmupen64plus-core%2Fdoc%2Femuwiki-api-doc%2FMupen64Plus_v2.0_Design_Proposal_3.txt;h=fdee505a78966671942a85b7c2986c70e3054dd7;hb=451ab91e3827a6384981b3300e2a7000d2eaba58;hp=0000000000000000000000000000000000000000;hpb=a2ab25365b5b0dddbee476d695d8a31151407581;p=mupen64plus-pandora.git diff --git a/source/mupen64plus-core/doc/emuwiki-api-doc/Mupen64Plus_v2.0_Design_Proposal_3.txt b/source/mupen64plus-core/doc/emuwiki-api-doc/Mupen64Plus_v2.0_Design_Proposal_3.txt new file mode 100644 index 0000000..fdee505 --- /dev/null +++ b/source/mupen64plus-core/doc/emuwiki-api-doc/Mupen64Plus_v2.0_Design_Proposal_3.txt @@ -0,0 +1,103 @@ +[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) +