Ngine
What it is:
ngine is a multiplatform operating environment targeted at applications
that need to have minimum effort for porting it to different operation
systems and platforms. It is (as a first test) currently used for creating
a NES emulator, but could be used for any application.
What is cool about it:
It puts absolutely minimal effort to the porter. The main program is organized
in two parts, the kernel (system independent c++), and plugin code. This
plugin code gets called by the kernel and may call kernel functions through
a sophisticated messaging system.
..Umm yea, so what is cool about it:
Imagine your programs menuing system. Menus usually are target platform
specific, and eat up lots of time for porting. With ngine, there is NOT
a single line of porting code needed, as the kernel will display menuing
controls on its own display area, and communicates with the input plugin to
send/receive menu changes. It then redraws the display through the plugins
RedrawGfx routine, which gets a pointer to an array of bytes to copy to the
target macine display. And yes, any color depth is supported, even funky pixel
formats. Just send our desired color depth to the kernel on startup.
Same story for the Keyboard controls. Imagine your ngine based Windows9X
program, that you would like to port to WindowsCE. NO rewrite of input routines
is ever needed in the kernel, although we have no keyboard. The input plugin
sends keycodes to the kernel, which processes them as it pleases you. You are
not going to be involved in anything but writing a routine that submits your
stylus clicks, and ngine will take care of the rest.
Maybe it IS cool, now what can it do? :
- Fully kernel based memory management
- Coded for efficiency, speed, and little size. (overhead in RAM < 100k)
- Supports Graphics display, Sound, Input, Networking and other
target specific stuff (yes, a Linux application instance can be networked
with a WindowsCE instance)
- Full system independent menuing and other tools included.
- Offers easy embedding of exiting applications.
Small FAQ:
Does it work with Platform X? Yes. all that needs to be done ONCE is
writing the plugin code. ONCE only for ANY given ngine program.
Whats the minimum requirements? A C++ compiler for the target platform,
a display able to display a pixel based image, and some means of input. The ngine
core will not use a lot of resources, but the ultimate amount of RAM required
is based on your target program running in the ngine.
This sounds pretty familiar to what MAME / PSEmu does... ...but its SO much more
powerful. Talk about system independent menuing and messaging.
Is this going to help me find ROMS? no. go away.
Does it support DirectX? It supports whatever you want it to support.
Included in the current implementation are DirectX and GDI plugins for Windows
and Windows CE.
OK, i want to develop using this / port your emu, where is the download?
Well, it isnt completed yet. It is heavily under construction, and some major parts
of the application already work. In a few weeks, I will be posting a beta of the program
to a limited amount of testers.
Development status:
- Messaging core: done
- Graphics core and example plugin: done, pending redesign
- File IO core and example plugin: done
- Keyboard IO core and example plugin: done
- Font display: done
- Menuing: 50%
- Sound kernel routines: 20%
- Networking: 0%
Plugin porting status:
- Win32 (95/98/NT/2000): done
- WindowsCE: 50%
- WindowsCE (Dreamcast): 30%
- Linux: about to start
- QNX pending resource
Tell me more:
Sure thing. Mail me.