<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://mupen64plus.org/wiki/index.php?action=history&amp;feed=atom&amp;title=Mupen64Plus_v2.0_Design_Proposal_3</id>
	<title>Mupen64Plus v2.0 Design Proposal 3 - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://mupen64plus.org/wiki/index.php?action=history&amp;feed=atom&amp;title=Mupen64Plus_v2.0_Design_Proposal_3"/>
	<link rel="alternate" type="text/html" href="https://mupen64plus.org/wiki/index.php?title=Mupen64Plus_v2.0_Design_Proposal_3&amp;action=history"/>
	<updated>2026-10-18T14:41:42Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.35.14</generator>
	<entry>
		<id>https://mupen64plus.org/wiki/index.php?title=Mupen64Plus_v2.0_Design_Proposal_3&amp;diff=12&amp;oldid=prev</id>
		<title>Richard42: Created page with &quot;== 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...&quot;</title>
		<link rel="alternate" type="text/html" href="https://mupen64plus.org/wiki/index.php?title=Mupen64Plus_v2.0_Design_Proposal_3&amp;diff=12&amp;oldid=prev"/>
		<updated>2015-07-22T03:48:15Z</updated>

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