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).
Bytecode
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.
|