GeezerVison is showing dvd.sourceforge.net — Virtual Machine Instruction Set
Virtual Machine Instruction Set - broken down by value
Commands with Type 0-3 have 16 bits of Opcode and 48 bits for Parameters.
Commands with Type 4-6 have 12 bits of Opcode and 52 bits for Parameters.
Commands with Type 7 are unknown at this stage, and have never been seen in real life yet.
| Opcode | Parameters |
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | <- Byte |
| 7-5 | 4 | 3-0 | 7 | 6-4 | 3-0 | 7-4 | 3-0 | 7-0 | 7-0 | 7-0 | 7-4 | 3-2 | 1-0 | 7-0 | <- Bits |
| Type | Direct | SET | Dir Cmp | CMP | CMD | operand 1 | operand 2 | operand 3 | Mnemonic | Operands |
| 0 | | | X | 0 | 0 | | | | NOP | |
| 0 | | | X | 0 | 1 | | | | line# | Goto | line# |
| 0 | | | X | 0 | 2 | | | | Break | |
| 0 | | | X | 0 | 3 | | | 0 | lvl | line# | SetTmpPML | lvl, line# |
| 0 | | | 0 | 1-7 | 0-3 | | cr1* | | cr2* | as above | Cplus above | reg(cr1) cmp-op reg(cr2) plus above |
| 0 | | | 1 | 1-7 | 0-3 | | cr1* | cval | as above | Cplus above | reg(cr1) cmp-op #cval plus above |
| 0 | X | X | X | X | 4-F | X | X | X | invalid | |
| 1 | 0 | | X | 0 | 0 | | | | NOP | |
| 1 | 0 | | X | 0 | 1 | | | Link subset | Link subset | |
| 1 | 0 | | X | 0 | 4 | | | pgcn | LinkPGCN | pgcn |
| 1 | 0 | | X | 0 | 5 | | | hl_bn | pttn | LinkPTTN | pttn [,button=hl_bn] |
| 1 | 0 | | X | 0 | 6 | | | hl_bn | 0 | pgn | LinkPGN | pgn [,button=hl_bn] |
| 1 | 0 | | X | 0 | 7 | | | hl_bn | 0 | cn | LinkCN | cn [,button=hl_bn] |
| 1 | 0 | | 0 | 1-7 | 0, 1, 4-7 | | cr1* | | cr2* | as above | Cplus above | reg(cr1) cmp-op reg(cr2) plus above |
| 1 | 0 | | 1 | 1-7 | 0, 1, 4-7 | | cr1* | cval | as above | Cplus above | reg(cr1) cmp-op #cval plus above |
| 1 | 0 | X | X | X | 2, 3, 8-F | X | X | X | invalid | |
| 1 | 1 | | X | 0 | 0 | | | | NOP | |
| 1 | 1 | | X | 0 | 1 | | | | Exit | |
| 1 | 1 | | X | 0 | 2 | | | ttn | | JumpTT | ttn |
| 1 | 1 | | X | 0 | 3 | | | ttn | | JumpVTS_TT | ttn |
| 1 | 1 | | X | 0 | 5 | | pttn | | ttn | | JumpVTS_PTT | ttn pttn |
| 1 | 1 | | X | 0 | 6 | | | 0 | | | JumpSS | FP |
| 1 | 1 | | X | 0 | 6 | | | 1 | | menu | | JumpSS | VMGM menu |
| 1 | 1 | | X | 0 | 6 | | ttn | vts | 2 | | menu | | JumpSS | VTSM vts, ttn, menu |
| 1 | 1 | | X | 0 | 6 | pgcn | | 3 | | | JumpSS | VMGM pgcn |
| 1 | 1 | | X | 0 | 8 | | rsm_cell | 0 | | | CallSS | FP [rsm_cell] |
| 1 | 1 | | X | 0 | 8 | | rsm_cell | 1 | | menu | | CallSS | VMGM menu [, rsm_cell] |
| 1 | 1 | | X | 0 | 8 | | rsm_cell | 2 | | menu | | CallSS | VTSM menu [, rsm_cell] |
| 1 | 1 | | X | 0 | 8 | pgcn | rsm_cell | 3 | | | CallSS | VMGM pgcn [, rsm_cell] |
| 1 | 1 | | | 1-7 | 0-3, 5, 6, 8 | as above | as above | cr1* | cr2* | Cplus above | reg(cr1) cmp-op reg(cr2) plus above |
| 1 | 1 | X | X | X | 4, 7, 9-F | X | X | X | invalid | |
| 2 | X | 0 | X | 0 | 0 | | | | NOP | |
| 2 | 0 | 1 | X | 0 | 0 | | af | | sr1 | sf | | sr2 | nf | | sr3 | | SetSTN | if(af) Audio = Gsr1 if(sf) Subpicture = Gsr2 if(nf) Angle = Gsr3 |
| 2 | 0 | 2 | X | 0 | 0 | | srs* | pgcn | | SetNVTMR | srs, pgcn |
| 2 | 0 | 3 | X | 0 | 0 | | srs* | | mf | | srd | | SetGPRMMD | Gsrd = srs [,COUNTER](mf=1) |
| 2 | 0 | 4 | X | 0 | 0 | | | srs | | SetAMXMD | Gsrs |
| 2 | 0 | 6 | X | 0 | 0 | | | srs | | SetHL_BTNN | Gsrs |
| 2 | 1 | 1 | X | 0 | 0 | | af | aval | sf | sval | nf | nval | | SetSTN | if(af) Audio = #aval if(sf) Subpicture = #sval if(nf) Angle = #nval |
| 2 | 1 | 2 | X | 0 | 0 | sval | pgcn | | SetNVTMR | #sval, pgcn |
| 2 | 1 | 3 | X | 0 | 0 | sval | | mf | | srd | | SetGPRMMD | Gsrd = #sval [,COUNTER](mf=1) |
| 2 | 1 | 4 | X | 0 | 0 | | sval | | SetAMXMD | #sval |
| 2 | 1 | 6 | X | 0 | 0 | | sval | | SetHL_BTNN | #sval |
| 2 | as above | as above | | 1-7 | 0 | as above | as above | cr1* | cr2* | Cplus above | reg(cr1) cmp-op reg(cr2) plus above |
| 2 | as above | as above | X | 0 | 1, 4-7 | as above | as above | as per link | as above // as per link | as above // as per link |
| 2 | X | 7-F | X | X | X | X | X | X | invalid SetSystem |
| 2 | X | X | X | 0 | 2, 3, 8-F | X | X | X | invalid Link |
| 2 | X | X | X | 1-7 | 1-F | X | X | X | illegal - CMP & LNK conflict |
| 3 | X | 0 | X | 0 | 0 | | | | NOP | |
| 3 | 0 | 1-B | X | 0 | 0 | | srd | | srs* | | Set | Gsrd set-op reg(srs) |
| 3 | 1 | 1-B | X | 0 | 0 | | srd | sval | | Set | Gsrd set-op #sval |
| 3 | as above | as above | 0 | 1-7 | 0 | cr1* | as above | as above | | cr2* | Cplus above | reg(cr1) cmp-op reg(cr2), plus above |
| 3 | as above | as above | 1 | 1-7 | 0 | cr1* | as above | as above | cval | Cplus above | reg(cr1) cmp-op #cval, plus above |
| 3 | as above | as above | X | 0 | 1, 4-7 | as above | as above | as per link | as above // as per link | as above // as per link |
| 3 | X | C-F | X | X | X | X | X | X | invalid Set |
| 3 | X | X | X | 0 | 2, 3, 8-F | X | X | X | invalid Link |
| 3 | X | X | X | 1-7 | 1-F | X | X | X | illegal - CMP & LNK conflict |
| Opcode | Parameters |
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | <- Byte |
| 7-5 | 4 | 3-0 | 7 | 6-4 | 3-0 | 7-0 | 7-0 | 7-0 | 7-0 | 7-2 | 1-0 | 7-0 | <- Bits |
| Type | SET Flag | SET | CMP Flag | CMP | operand 1 | operand 2 | operand 3 | Mnemonic | Operands |
| 4 | 0 | set-op | 0 | cmp-op | scr | | srs* | | cr2* | hl_bn | | Lnk | SetCLnk | Gscr set-op reg(srs), Gscr cmp-op reg(cr2) [, button=hl_bn] |
| 4 | 0 | set-op | 1 | cmp-op | scr | | srs* | cval | hl_bn | | Lnk | SetCLnk | Gscr set-op reg(srs), Gscr cmp-op #cval [, button=hl_bn] |
| 4 | 1 | set-op | 0 | cmp-op | scr | sval | | cr2* | hl_bn | | Lnk | SetCLnk | Gscr set-op #sval, Gscr cmp-op reg(cr2) [, button=hl_bn] |
| 4 | 1 | set-op | 1 | cmp-op | scr | sval | cval | hl_bn | | Lnk | SetCLnk | Gscr set-op #sval, Gscr cmp-op #cval [, button=hl_bn] |
| 5 | 0 | set-op | 0 | cmp-op | sr1 | sr2* | cr1* | | cr2* | hl_bn | | Lnk | CSetCLnk | Gscr cmp-op reg(cr2), Gscr set-op reg(srs) [, button=hl_bn] |
| 5 | 0 | set-op | 1 | cmp-op | sr1 | sr2* | cr1* | cval | hl_bn | | Lnk | CSetCLnk | Gscr cmp-op #cval, Gscr set-op reg(srs) [, button=hl_bn] |
| 5 | 1 | set-op | 0 | cmp-op | sr1 | sval2 | cr1 | cr2* | hl_bn | | Lnk | CSetCLnk | Gscr cmp-op reg(cr2, Gscr set-op #sval [, button=hl_bn] |
| 5 | 1 | X | 1 | X | | Illegal CSetCLnk |
| 6 | 0 | set-op | 0 | cmp-op | sr1 | sr2* | cr1* | | cr2* | hl_bn | | Lnk | CmpSetLnk | Gsr1 cmp-op reg(cr2), Gsr1 set-op reg(srs) [, button=hl_bn] |
| 6 | 0 | set-op | 1 | cmp-op | sr1 | sr2* | cr1* | cval | hl_bn | | Lnk | CmpSetLnk | Gsr1 cmp-op #cval, Gsr1 set-op reg(srs) [, button=hl_bn] |
| 6 | 1 | set-op | 0 | cmp-op | sr1 | sval | cr1* | cr2* | hl_bn | | Lnk | CmpSetLnk | Gsr1 cmp-op reg(cr2, Gsr1 set-op #sval [, button=hl_bn] |
| 6 | 1 | X | 1 | X | | Illegal CmpSetLnk |
| 7 | | | | | | unknown | |
* register values 0-15 (0x00 - 0x0f) refer to General Purpose registers (GPRM), 16-127 (0x10 - 0x7f) are invalid, 128-151 (0x80 - 0x97) refer to System Parameter registers (SPRM),
152-255 (0x98 - 0xff) are invalid.
SET and CMP operations Instructions using values not mentioned in this table are invalid. Code0123456789ab SET opnonemov=swp <-> add+=sub-=mul*=div/=mod%=rnd and&=or|=xor^= CMP opnoneBC&EQ==NE!=GE>= GT> LE<= LT<Link subset codes 67<- Byte 7-21-07-54-0<- Bits operand 3MnemonicOperands X 00NOP hl_bn 01LinkTopCell[button=hl_bn] hl_bn 02LinkNextCell[button=hl_bn] hl_bn 03LinkPrevCell[button=hl_bn] hl_bn 05LinkTopPG[button=hl_bn] hl_bn 06LinkNextPG[button=hl_bn] hl_bn 07LinkPrevPG[button=hl_bn] hl_bn 09LinkTopPGC[button=hl_bn] hl_bn 0aLinkNextPGC[button=hl_bn] hl_bn 0bLinkPrevPGC[button=hl_bn] hl_bn 0cLinkGoupPGC[button=hl_bn] hl_bn 0dLinkTailPGC[button=hl_bn] hl_bn 10RSM[button=hl_bn] XX04, 08, 0E, 0F, 11-1Finvalid SetCLnk:Type 4: Set then Compare & Link. 1) Set. 2) Compare SRD and CR2. If TRUE: 3) Link. If FALSE: 3) Do not do Link. CSetCLnk:Type 5: Compare then Set & Link. 1) Compare CR1 and CR2. If TRUE: 2) Set. 3) Link. If FALSE: 2) Do not do Set and do not do Link. CmpSetLnk:Type 6: Compare then Set, followed by Link. 1) Compare CR1 and CR2. If TRUE: 2) Set. 3) Link. If FALSE: 2) Do not do Set. 3) Link. CmpSetLnk: SetCLnk: CmpSet: SetLnk: CmpLnk: DVD-Video home
|