As a few of you may know, I announced my intention to develop a low-level Nintendo 64 emulator in <a href="http://www.emutalk.net/showthread.php?threadid=16062">this thread</a> [emutalk.net].
I started work last night on a formal software development plan for this emulator, and I had an even better idea.
I propose to create a framework under which future emulators for any system can be developed and current emulators can be ported. It will build on the already useful plug-in architecture of certain PlayStation and Nintendo 64 emulators while offering portability between platforms, independent component development and re-use, and an optional layer of abstraction available to "homebrew" game and application developers who would like to develop their software in a high-level language.
Several previously unrelated components will need to be brought together before something like this could happen. For instance, the abstraction layer requires assemblers for each architecture supported and compatible targets added to existing compilers. Portability will require a platform independent program "kernel" to be developed to allow messaging between the different modules (more below). And the modules themselves will need a highly-specific standard by which to communicate.
In other words, how will the NES CPU module communicate with the PPU module, on-cartridge "mapper" chip, and the VRAM image? Since most emulators are written as one big program rather than multiple modules linked together, this hasn't really been an issue. Would a messaging system not unlike that integrated into the GNU/Hurd kernel be optimal for our purposes?
I am calling the project UNIversal System Emulation Framework (UNISEF) in recognition of the fine work of the United Nations Children's Fund (UNICEF). This project is copyrighted under the <a href="http://www.gnu.org/licenses/gpl.html">GNU General Public License</a> [gnu.org] version 2.0.
I look forward to reading any ideas the community may have. Please note that by posting to this thread you are giving me the right to use your idea in this <a href="http://www.gnu.org/philosophy/free-sw.html">free software</a> [gnu.org] project.
The ideas herein are (c) 2003 Dustin D. Cook under the <a href="http://www.gnu.org/licenses/fdl.html">GNU Free Documentation License</a> [gnu.org] version 1.2.
I started work last night on a formal software development plan for this emulator, and I had an even better idea.
I propose to create a framework under which future emulators for any system can be developed and current emulators can be ported. It will build on the already useful plug-in architecture of certain PlayStation and Nintendo 64 emulators while offering portability between platforms, independent component development and re-use, and an optional layer of abstraction available to "homebrew" game and application developers who would like to develop their software in a high-level language.
Several previously unrelated components will need to be brought together before something like this could happen. For instance, the abstraction layer requires assemblers for each architecture supported and compatible targets added to existing compilers. Portability will require a platform independent program "kernel" to be developed to allow messaging between the different modules (more below). And the modules themselves will need a highly-specific standard by which to communicate.
In other words, how will the NES CPU module communicate with the PPU module, on-cartridge "mapper" chip, and the VRAM image? Since most emulators are written as one big program rather than multiple modules linked together, this hasn't really been an issue. Would a messaging system not unlike that integrated into the GNU/Hurd kernel be optimal for our purposes?
I am calling the project UNIversal System Emulation Framework (UNISEF) in recognition of the fine work of the United Nations Children's Fund (UNICEF). This project is copyrighted under the <a href="http://www.gnu.org/licenses/gpl.html">GNU General Public License</a> [gnu.org] version 2.0.
I look forward to reading any ideas the community may have. Please note that by posting to this thread you are giving me the right to use your idea in this <a href="http://www.gnu.org/philosophy/free-sw.html">free software</a> [gnu.org] project.
The ideas herein are (c) 2003 Dustin D. Cook under the <a href="http://www.gnu.org/licenses/fdl.html">GNU Free Documentation License</a> [gnu.org] version 1.2.