wabasoft specifications  
Fun and Games
More VMs
Dev Tools
How-to Papers
Contact Us
Home Page
The Waba Virtual Machine

The WabaVM was designed to execute a subset of bytecode instructions defined in the Java Virtual Machine specification.

Because of this and since the Waba class file format is defined as a subset of the Java class file format, developers can use Java development tools to create class files and bytecode that are compatible with Waba and execute them under a WabaVM.

WabaVMs can be created that run in very small amounts of memory. For example, the complete WabaVM for the PalmPilot is around 60K in size (around 30K for the executable and 30K for the full set of foundation classes).


The full definition of Waba-supported bytecode instructions and their format may be found in the book "Java Virtual Machine" by Jon Meyer and Troy Downing. The opcodes that must be implemented by a WabaVM are the "Standard" opcodes (0 - 201) with the exception of those relating to long and double data types, exceptions and threads.

WabaVMs do not support operations related to long and double data types, exceptions or threads.

Below is the full list of opcodes that are part of the list of "Standard" opcodes that do not need to be implemented by a WabaVM:

OP_monitorenter OP_monitorexit OP_athrow
OP_lconst_N OP_dconst_N OP_lload
OP_dload OP_lload_N OP_dload_N
OP_laload OP_daload OP_lstore
OP_dstore OP_lstore_N OP_dstore_N
OP_lastore OP_dastore OP_ldc2_w
OP_i2l OP_i2d OP_f2l
OP_f2d OP_ladd OP_dadd
OP_lsub OP_dsub OP_lmul
OP_dmul OP_ldiv OP_ddiv
OP_lrem OP_drem OP_lneg
OP_dneg OP_lshl OP_lshr
OP_lushr OP_land OP_lor
OP_lxor OP_l2i OP_l2f
OP_l2d OP_d2i OP_d2l
OP_d2f OP_lcmp OP_dcmpl
OP_dcmpg OP_lreturn OP_dreturn

"Quick" opcodes and "Reserved" opcodes (203-255) are not part of the WabaVM specification and are not supported by Waba Virtual Machines.

Class File Format

The class file format supported by a WabaVM is defined as a subset of the class file format supported by a Java Virtual Machine.

The class file format is the same as described in Chapter 12 (Class File Reference) of the book "Java Virtual Machine" by Jon Meyer and Troy Downing with the following exceptions:

  • long and double type descriptors are not supported
  • long and double constant types are not supported
  • long and double ConstantValue's are not supported
  • Exception tables in method attributes must be skipped over
  • Code attributes such as LineNumber and LocalVariableTable may be skipped over
It's important to note that Waba requires class files to be stored in their original, unparsed format. Class files are not allowed to be pre-linked or pre-parsed in any way and must have the same format across all platforms.

This preserves portability and reduces versioning problems.

Copyright (c) 1999 - 2001 Wabasoft. Waba, WabaVM and WabaSDK are trademarks of Wabasoft Inc.