Introduction using FAQ
I started the development of gNVM as a final project for my
graduate year. I thought it would be cool to create a machine
emulator so I started writing a Z80 emulator. During the
development, I realized that it wasn't such a difficult thing
after all and decided to make a tool to make emulators. That
tool, should be cross-platform, fast, opensource but at all costs
easy for everyone to use. That's how gNVM was created.
- What gNVM stands for?
gNVM stands for generic Nano Virtual Machine.
- And why is that?
Because gNVM can emulate everything you can describe ( generic ), its core is very small ( Nano ) and cross platform
and is not a real machine - hardware but an imaginary one ( Virtual ).
- Somekind as Java?
Not even close! Java is bigger, slower, object oriented and is builded for different purposes.
- gNVM is not object oriented?
If you believe that you can do in Assembly object oriented programming, then gNVM is object oriented. Now really,
gNVM is not a virtual machine that offers object oriented programming.
- I am sure it offers a basic-style programming or at least a c-like programming.
Don't be so sure. gNVM offers assembly-style programming.
- You can't be serious! Why anyone should try programming in assembly?
Well, generally i am not a serious person but about assembly-style programming I can give you a lot of reasons.
First of all, educational reasons. You can try programming asm ( even using an interpreter and see the results in
real time ) in your favorite platform
or operating system and without any worries about crushing your computer. Think about running x86 asm on your PDA!
You can also use gNVM as simulator for 8bit computers ( like z80, 8085 etc ) or even emulate devices that use
that processors ( for example gameboy ).
- So, that's all gNVM can be used for?
Nope, someone could use gNVM as a core for a new programming language. Sometime I'll release a version of Nano basic
to show you how. Or someone could create his own new Virtual machine with whatever abilities he likes!
- Excuse me?How can I create my own Virtual Machine?And what's that thing about whatever abilities I want?
One main difference from other virtual machines is that gNVM has dynamic instruction set. This means that user
can issue his own instruction set by using nsl ( nano scripting language ). So, with absolutely no need of knowing
any programming language can create a virtual machine ( without even recompiling the gNVM engine ) and issue
commands like : COPY A,B or TRANFORM HL,DE.
- And what these commands can do?
If he uses standard gNVM API, these commands can do everything gNVM's standard API can do ( see documentation ).
For example COPY A,B could do MOV A,B ( copies the content of a register B to register A ). If he decides to use
extended API, COPY A,B can do everything he wants ( recompiling is required if new extended API call is issued ).
So, COPY A,B could do copy filename to directory and TRANFORM HL,DE could tranform a bitmap file to jpg. The only
limit it the imagination of user. In the near future, I'll try to create an extended API file with these strange
abilities. Now imagine using gNVM like your bash shell and with that kind of commands, create scripts that can
do everything you like! And you don't have to be a programmer!
- What else can I do?
I don't know. gNVM is a tool. Use it as you like. I give you the engine you do the rest. You can try booting
DOS or something else. If you have created an instruction set or an intresting instruction file or an application
please send it to me and I'll upload it and place your name on the site for everyone to see :). Later on, I'll
make an upload mechanism to upload your instruction sets.
- That's all?
I am sure there are more, but lets call it a day :)
To see the current progress of gNVM check the status from main menu
gNVM is written in ANSI C and nsl laguage in C++. No platform specific code exists, so it should be
easy to port it to your favorite platform if a c compiler exists.
For the time being, gNVM has been ported ( compiled and runned with no errors ) on the following platforms:
- X ( KDE-GNOME-etc)
- Symbian OS ( 9210 mobile )
If you test the application, please let me know if it does not work on your platform,
including a somewhat detailed description of what happens.
Here are the things that sometime I'll implement in gNVM. If
you wanna do some of them, send me an email or write in forum. I
won't say no :)
- x86 emulation
- Booting MSDOS
- Booting Linux Kernel
- Port to other platforms ( if there is a c
compiler, it can be ported :)
- Make a better Nano scripting Language (
even in Visual Basic )
- Enhance Nano Basic ( read FAQ )
- Emulate as many processors
Development Status contains info for bug fixes, upgrades and
generally information about next versions that have not been
released ( yet ).
Comming Release 0.8
Planning Release date : 24/3/2004
- Creating site
- Making a better GUI for windows
- Organizing code
- Preparing Generic Machine for first public version release
Generic Nano Virtual Machine, Copyright (C) 2004 Jon Vlachoyiannis . All versions, except Windows versions,
licensed under the terms of the GNU General Public License. Windows versions licensed under the terms
of the FreeBDS License.
Generic Nano Virtual Machine comes with ABSOLUTELY NO WARRANTY. This is free software, and you
are welcome to redistribute it under certain conditions. See the GNU General Public License and FreeBSD License for
Generic Nano Virtual Machine is an opensource project.
See details of the licences to find out your rights. You are greatly encourage to distribute the
The project is hosted on SourceForge, thus allowing the source to be accessed through CVS.
See this page for details
Latest version is 0.8 but not yet released. Check Development Status for more info