JVM2
 Registers
NameWidth
cpp32
h32
heap32
lv32
mar32
mbr8
mdr32
opc32
pc32
sp32
status1
tos32

 Register Arrays
NameLengthWidth
(none)

 Condition Bits
NameRegisterBitHalt
halt-bitstatus0true

 RAMs
NameLength
ConstantPool128
Main128
Stack256

 Set
NameRegisterStart BitNumber of BitsValue
mar=0mar0320
mdr=-1mdr032-1
mdr=0mdr0320
mdr=1mdr0321
pc=0pc0320

 Test
NameRegisterStart BitNumber of BitsComparisonValueOmission
mar!=0?skip1mar032NE01
mdr<0?skip2mdr032LT02
mdr=0?skip2mdr032EQ02
sp<0?skip2sp032LT02

 Increment
NameRegisterOverflow BitDelta
dec4-spsphalt-bit-4
inc1-pcpchalt-bit1
inc2-pcpchalt-bit2
inc3-pcpchalt-bit3
inc4-marmarhalt-bit4
inc4-pcpchalt-bit4
inc4-spsphalt-bit4

 Shift
NameSourceDestinationTypeDirectionDistance
mar<<2marmarlogicalleft2
mdr<<2mdrmdrlogicalleft2
mdr<<8mdrmdrlogicalleft8
mdr>>24mdrmdrarithmeticright24
mdr>>>16mdrmdrlogicalright16
mdr>>>24mdrmdrlogicalright24

 Logical
NameTypeSource1Source2Destination
mdr<-mdr&hANDmdrhmdr
mdr<-mdr|hORmdrhmdr

 Arithmetic
NameTypeSource1Source2DestinationOverflow BitCarry Bit
mar=mar-spSUBTRACTmarspmarhalt-bit(none)
mdr=mdr*hMULTIPLYmdrhmdrhalt-bit(none)
mdr=mdr+hADDmdrhmdrhalt-bit(none)
mdr=mdr+opcADDmdropcmdrhalt-bit(none)
mdr=mdr+tosADDmdrtosmdrhalt-bit(none)
mdr=mdr-hSUBTRACTmdrhmdrhalt-bit(none)
mdr=mdr/hDIVIDEmdrhmdrhalt-bit(none)

 Branch
NameAmount
branch+33

 TransferRtoR
NameSourceSrc Start BitDestinationDest Start BitNumber of Bits
h->mdrh0mdr032
lv->hlv0h032
lv->marlv0mar032
lv->splv0sp032
mdr->hmdr0h032
mdr->lvmdr0lv032
mdr->marmdr0mar032
mdr->opcmdr0opc032
mdr->pcmdr0pc032
mdr->spmdr0sp032
mdr->tosmdr0tos032
mdr0-16->marmdr0mar1616
mdr0-16->pcmdr0pc1616
opc->mdropc0mdr032
pc->marpc0mar032
pc->mdrpc0mdr032
sp->mdrsp0mdr032
tos->htos0h032
tos->mdrtos0mdr032
tos->pctos0pc032

 TransferRtoA
NameSourceSrc Start BitDestinationDest Start BitNumber of BitsIndexIndex Start BitIndex Number of Bits
(none)

 TransferAtoR
NameSourceSrc Start BitDestinationDest Start BitNumber of BitsIndexIndex Start BitIndex Number of Bits
(none)

 Decode
NameIR
decodembr

 Set Condition Bit
NameBitValue
setHalthalt-bit1

 IO
NameDirectionTypeBufferConnection
mdr->outputoutputintegermdr[Console]
mdr<-inputinputintegermdr[Console]

 Memory Access
NameDirectionMemoryDataAddress
mbr<-Main[pc]readMainmbrpc
mdr->Main[mar]writeMainmdrmar
mdr->Stack[mar]writeStackmdrmar
mdr->Stack[sp]writeStackmdrsp
mdr<-CP[mar]readConstantPoolmdrmar
mdr<-Main[mar]readMainmdrmar
mdr<-Stack[mar]readStackmdrmar
mdr<-Stack[sp]readStackmdrsp

 EQUs
NameValue
(none)

 Fetch Sequence
Microinstructions
mbr<-Main[pc]
inc1-pc
decode

 Machine Instructions
NameOpcode (hex)Field LengthsMicroinstructions
ireturnAC8  End
returnB18  lv->sp
dec4-sp
lv->mar
mdr<-Stack[mar]
mdr->mar
mdr<-Stack[mar]
mdr->pc
inc4-mar
mdr<-Stack[mar]
mdr->lv
sp<0?skip2
mdr<-Stack[sp]
mdr->tos
End
invokevB68  16  pc->mar
mdr<-Main[mar]
mdr>>>16
mdr->tos
mdr->mar
mdr<-Main[mar]
mdr->opc
mdr>>>24
mdr->h
opc->mdr
mdr<<8
mdr>>>24
mdr->opc
mdr=mdr-h
mdr<<2
mdr->h
sp->mdr
mdr=mdr+h
mdr->sp
inc4-sp
opc->mdr
mdr<<2
mdr->h
sp->mdr
mdr=mdr-h
mdr->mar
mdr->opc
sp->mdr
mdr->Stack[mar]
inc2-pc
pc->mdr
mdr->Stack[sp]
lv->h
h->mdr
inc4-sp
mdr->Stack[sp]
opc->mdr
mdr->lv
tos->pc
inc2-pc
mdr<-Stack[sp]
mdr->tos
End
iinc848  8  8  pc->mar
mdr<-Main[mar]
mdr->opc
mdr>>>24
mdr<<2
lv->h
mdr=mdr+h
mdr->mar
mdr<-Stack[mar]
mdr->h
opc->mdr
mdr<<8
mdr>>24
mdr=mdr+h
mdr->Stack[mar]
inc2-pc
mar=mar-sp
mar!=0?skip1
mdr->tos
End
istore368  8  pc->mar
inc1-pc
mdr<-Main[mar]
mdr>>>24
mdr<<2
lv->h
mdr=mdr+h
mdr->mar
tos->mdr
mdr->Stack[mar]
dec4-sp
sp<0?skip2
mdr<-Stack[sp]
mdr->tos
End
iload158  8  pc->mar
mdr<-Main[mar]
mdr>>>24
mdr<<2
lv->h
mdr=mdr+h
mdr->mar
mdr<-Stack[mar]
inc4-sp
mdr->Stack[sp]
mdr->tos
inc1-pc
End
bipush108  8  pc->mar
mdr<-Main[mar]
mdr>>24
inc4-sp
mdr->Stack[sp]
mdr->tos
inc1-pc
End
ifeq998  16  tos->mdr
dec4-sp
mdr=0?skip2
inc2-pc
branch+3
pc->mar
mdr<-Main[mar]
mdr0-16->pc
sp<0?skip2
mdr<-Stack[sp]
mdr->tos
End
iflt9B8  16  tos->mdr
dec4-sp
mdr<0?skip2
inc2-pc
branch+3
pc->mar
mdr<-Main[mar]
mdr0-16->pc
sp<0?skip2
mdr<-Stack[sp]
mdr->tos
End
if_icmpeq9F8  16  tos->h
dec4-sp
mdr<-Stack[sp]
dec4-sp
mdr=mdr-h
mdr=0?skip2
inc2-pc
branch+3
pc->mar
mdr<-Main[mar]
mdr0-16->pc
sp<0?skip2
mdr<-Stack[sp]
mdr->tos
End
dup_x25B8  inc4-sp
tos->mdr
mdr->Stack[sp]
dec4-sp
dec4-sp
mdr<-Stack[sp]
inc4-sp
mdr->Stack[sp]
dec4-sp
dec4-sp
mdr<-Stack[sp]
inc4-sp
mdr->Stack[sp]
dec4-sp
tos->mdr
mdr->Stack[sp]
inc4-sp
inc4-sp
inc4-sp
End
idiv6C8  tos->h
dec4-sp
mdr<-Stack[sp]
mdr=mdr/h
mdr->tos
mdr->Stack[sp]
End
imul688  tos->h
dec4-sp
mdr<-Stack[sp]
mdr=mdr*h
mdr->tos
mdr->Stack[sp]
End
isub648  tos->h
dec4-sp
mdr<-Stack[sp]
mdr=mdr-h
mdr->tos
mdr->Stack[sp]
End
ior808  tos->h
dec4-sp
mdr<-Stack[sp]
mdr<-mdr|h
mdr->tos
mdr->Stack[sp]
End
iand7E8  tos->h
dec4-sp
mdr<-Stack[sp]
mdr<-mdr&h
mdr->tos
mdr->Stack[sp]
End
ldc_w138  16  inc4-sp
pc->mar
mdr<-Main[mar]
mar=0
mdr0-16->mar
mar<<2
mdr<-CP[mar]
mdr->Stack[sp]
mdr->tos
End
nop008  End
swap5F8  dec4-sp
mdr<-Stack[sp]
mdr->h
inc4-sp
mdr->Stack[sp]
dec4-sp
tos->mdr
mdr->Stack[sp]
inc4-sp
h->mdr
mdr->tos
End
pop578  dec4-sp
sp<0?skip2
mdr<-Stack[sp]
mdr->tos
End
dup_x15A8  tos->mdr
inc4-sp
mdr->Stack[sp]
dec4-sp
dec4-sp
mdr<-Stack[sp]
inc4-sp
mdr->Stack[sp]
dec4-sp
tos->mdr
mdr->Stack[sp]
inc4-sp
inc4-sp
End
dup598  tos->mdr
inc4-sp
mdr->Stack[sp]
End
gotoA78  16  pc->mar
mdr<-Main[mar]
pc=0
mdr0-16->pc
End
stopFC8  setHalt
End
iconst_0038  mdr=0
inc4-sp
mdr->Stack[sp]
mdr->tos
End
iconst_-1028  mdr=-1
inc4-sp
mdr->Stack[sp]
mdr->tos
End
iconst_1048  mdr=1
inc4-sp
mdr->Stack[sp]
mdr->tos
End
outputFF8  tos->mdr
mdr->output
dec4-sp
sp<0?skip2
mdr<-Stack[sp]
mdr->tos
End
inputFE8  mdr<-input
inc4-sp
mdr->Stack[sp]
mdr->tos
End
iadd608  tos->h
dec4-sp
mdr<-Stack[sp]
mdr=mdr+h
mdr->tos
mdr->Stack[sp]
End