00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef LIBDVDNAV_DECODER_H
00023 #define LIBDVDNAV_DECODER_H
00024
00025
00026 typedef enum {
00027 LinkNoLink = 0,
00028
00029 LinkTopC = 1,
00030 LinkNextC = 2,
00031 LinkPrevC = 3,
00032
00033 LinkTopPG = 5,
00034 LinkNextPG = 6,
00035 LinkPrevPG = 7,
00036
00037 LinkTopPGC = 9,
00038 LinkNextPGC = 10,
00039 LinkPrevPGC = 11,
00040 LinkGoUpPGC = 12,
00041 LinkTailPGC = 13,
00042
00043 LinkRSM = 16,
00044
00045 LinkPGCN,
00046 LinkPTTN,
00047 LinkPGN,
00048 LinkCN,
00049
00050 Exit,
00051
00052 JumpTT,
00053 JumpVTS_TT,
00054 JumpVTS_PTT,
00055
00056 JumpSS_FP,
00057 JumpSS_VMGM_MENU,
00058 JumpSS_VTSM,
00059 JumpSS_VMGM_PGC,
00060
00061 CallSS_FP,
00062 CallSS_VMGM_MENU,
00063 CallSS_VTSM,
00064 CallSS_VMGM_PGC,
00065
00066 PlayThis
00067 } link_cmd_t;
00068
00069
00070 typedef struct {
00071 link_cmd_t command;
00072 uint16_t data1;
00073 uint16_t data2;
00074 uint16_t data3;
00075 } link_t;
00076
00077
00078 typedef struct {
00079 uint16_t SPRM[24];
00080 uint16_t GPRM[16];
00081 uint8_t GPRM_mode[16];
00082 struct timeval GPRM_time[16];
00083 } registers_t;
00084
00085
00086 typedef struct {
00087 uint64_t instruction;
00088 uint64_t examined;
00089 registers_t *registers;
00090 } command_t;
00091
00092
00093
00094
00095 int32_t vmEval_CMD(vm_cmd_t commands[], int32_t num_commands,
00096 registers_t *registers, link_t *return_values);
00097
00098
00099 uint32_t vm_getbits(command_t* command, int32_t start, int32_t count);
00100
00101 #ifdef TRACE
00102
00103 void vm_print_link(link_t value);
00104
00105
00106 void vm_print_registers( registers_t *registers );
00107 #endif
00108
00109 #endif