/* * fetch.c * * This file is part of Emu48 * * Copyright (C) 1999 Christoph Gießelink * */ #include "pch.h" #include "Opcodes.h" #define F 0xFF // F = function typedef const struct { LPCVOID pLnk; const DWORD dwTyp; } JMPTAB, *PJMPTAB; // jump tables static JMPTAB oF_[] = { { (LPCVOID) oF0, F }, { (LPCVOID) oF1, F }, { (LPCVOID) oF2, F }, { (LPCVOID) oF3, F }, { (LPCVOID) oF4, F }, { (LPCVOID) oF5, F }, { (LPCVOID) oF6, F }, { (LPCVOID) oF7, F }, { (LPCVOID) oF8, F }, { (LPCVOID) oF9, F }, { (LPCVOID) oFA, F }, { (LPCVOID) oFB, F }, { (LPCVOID) oFC, F }, { (LPCVOID) oFD, F }, { (LPCVOID) oFE, F }, { (LPCVOID) oFF, F } }; static JMPTAB oE_[] = { { (LPCVOID) oE0, F }, { (LPCVOID) oE1, F }, { (LPCVOID) oE2, F }, { (LPCVOID) oE3, F }, { (LPCVOID) oE4, F }, { (LPCVOID) oE5, F }, { (LPCVOID) oE6, F }, { (LPCVOID) oE7, F }, { (LPCVOID) oE8, F }, { (LPCVOID) oE9, F }, { (LPCVOID) oEA, F }, { (LPCVOID) oEB, F }, { (LPCVOID) oEC, F }, { (LPCVOID) oED, F }, { (LPCVOID) oEE, F }, { (LPCVOID) oEF, F } }; static JMPTAB oD_[] = { { (LPCVOID) oD0, F }, { (LPCVOID) oD1, F }, { (LPCVOID) oD2, F }, { (LPCVOID) oD3, F }, { (LPCVOID) oD4, F }, { (LPCVOID) oD5, F }, { (LPCVOID) oD6, F }, { (LPCVOID) oD7, F }, { (LPCVOID) oD8, F }, { (LPCVOID) oD9, F }, { (LPCVOID) oDA, F }, { (LPCVOID) oDB, F }, { (LPCVOID) oDC, F }, { (LPCVOID) oDD, F }, { (LPCVOID) oDE, F }, { (LPCVOID) oDF, F } }; static JMPTAB oC_[] = { { (LPCVOID) oC0, F }, { (LPCVOID) oC1, F }, { (LPCVOID) oC2, F }, { (LPCVOID) oC3, F }, { (LPCVOID) oC4, F }, { (LPCVOID) oC5, F }, { (LPCVOID) oC6, F }, { (LPCVOID) oC7, F }, { (LPCVOID) oC8, F }, { (LPCVOID) oC9, F }, { (LPCVOID) oCA, F }, { (LPCVOID) oCB, F }, { (LPCVOID) oCC, F }, { (LPCVOID) oCD, F }, { (LPCVOID) oCE, F }, { (LPCVOID) oCF, F } }; static JMPTAB oBb_[] = { { (LPCVOID) oBb0, F }, { (LPCVOID) oBb1, F }, { (LPCVOID) oBb2, F }, { (LPCVOID) oBb3, F }, { (LPCVOID) oBb4, F }, { (LPCVOID) oBb5, F }, { (LPCVOID) oBb6, F }, { (LPCVOID) oBb7, F }, { (LPCVOID) oBb8, F }, { (LPCVOID) oBb9, F }, { (LPCVOID) oBbA, F }, { (LPCVOID) oBbB, F }, { (LPCVOID) oBbC, F }, { (LPCVOID) oBbD, F }, { (LPCVOID) oBbE, F }, { (LPCVOID) oBbF, F } }; static JMPTAB oBa_[] = { { (LPCVOID) oBa0, F }, { (LPCVOID) oBa1, F }, { (LPCVOID) oBa2, F }, { (LPCVOID) oBa3, F }, { (LPCVOID) oBa4, F }, { (LPCVOID) oBa5, F }, { (LPCVOID) oBa6, F }, { (LPCVOID) oBa7, F }, { (LPCVOID) oBa8, F }, { (LPCVOID) oBa9, F }, { (LPCVOID) oBaA, F }, { (LPCVOID) oBaB, F }, { (LPCVOID) oBaC, F }, { (LPCVOID) oBaD, F }, { (LPCVOID) oBaE, F }, { (LPCVOID) oBaF, F } }; static JMPTAB oB_[] = { { (LPCVOID) oBa_, 2 }, { (LPCVOID) oBa_, 2 }, { (LPCVOID) oBa_, 2 }, { (LPCVOID) oBa_, 2 }, { (LPCVOID) oBa_, 2 }, { (LPCVOID) oBa_, 2 }, { (LPCVOID) oBa_, 2 }, { (LPCVOID) oBa_, 2 }, { (LPCVOID) oBb_, 2 }, { (LPCVOID) oBb_, 2 }, { (LPCVOID) oBb_, 2 }, { (LPCVOID) oBb_, 2 }, { (LPCVOID) oBb_, 2 }, { (LPCVOID) oBb_, 2 }, { (LPCVOID) oBb_, 2 }, { (LPCVOID) oBb_, 2 } }; static JMPTAB oAb_[] = { { (LPCVOID) oAb0, F }, { (LPCVOID) oAb1, F }, { (LPCVOID) oAb2, F }, { (LPCVOID) oAb3, F }, { (LPCVOID) oAb4, F }, { (LPCVOID) oAb5, F }, { (LPCVOID) oAb6, F }, { (LPCVOID) oAb7, F }, { (LPCVOID) oAb8, F }, { (LPCVOID) oAb9, F }, { (LPCVOID) oAbA, F }, { (LPCVOID) oAbB, F }, { (LPCVOID) oAbC, F }, { (LPCVOID) oAbD, F }, { (LPCVOID) oAbE, F }, { (LPCVOID) oAbF, F } }; static JMPTAB oAa_[] = { { (LPCVOID) oAa0, F }, { (LPCVOID) oAa1, F }, { (LPCVOID) oAa2, F }, { (LPCVOID) oAa3, F }, { (LPCVOID) oAa4, F }, { (LPCVOID) oAa5, F }, { (LPCVOID) oAa6, F }, { (LPCVOID) oAa7, F }, { (LPCVOID) oAa8, F }, { (LPCVOID) oAa9, F }, { (LPCVOID) oAaA, F }, { (LPCVOID) oAaB, F }, { (LPCVOID) oAaC, F }, { (LPCVOID) oAaD, F }, { (LPCVOID) oAaE, F }, { (LPCVOID) oAaF, F } }; static JMPTAB oA_[] = { { (LPCVOID) oAa_, 2 }, { (LPCVOID) oAa_, 2 }, { (LPCVOID) oAa_, 2 }, { (LPCVOID) oAa_, 2 }, { (LPCVOID) oAa_, 2 }, { (LPCVOID) oAa_, 2 }, { (LPCVOID) oAa_, 2 }, { (LPCVOID) oAa_, 2 }, { (LPCVOID) oAb_, 2 }, { (LPCVOID) oAb_, 2 }, { (LPCVOID) oAb_, 2 }, { (LPCVOID) oAb_, 2 }, { (LPCVOID) oAb_, 2 }, { (LPCVOID) oAb_, 2 }, { (LPCVOID) oAb_, 2 }, { (LPCVOID) oAb_, 2 } }; static JMPTAB o9b_[] = { { (LPCVOID) o9b0, F }, { (LPCVOID) o9b1, F }, { (LPCVOID) o9b2, F }, { (LPCVOID) o9b3, F }, { (LPCVOID) o9b4, F }, { (LPCVOID) o9b5, F }, { (LPCVOID) o9b6, F }, { (LPCVOID) o9b7, F }, { (LPCVOID) o9b8, F }, { (LPCVOID) o9b9, F }, { (LPCVOID) o9bA, F }, { (LPCVOID) o9bB, F }, { (LPCVOID) o9bC, F }, { (LPCVOID) o9bD, F }, { (LPCVOID) o9bE, F }, { (LPCVOID) o9bF, F } }; static JMPTAB o9a_[] = { { (LPCVOID) o9a0, F }, { (LPCVOID) o9a1, F }, { (LPCVOID) o9a2, F }, { (LPCVOID) o9a3, F }, { (LPCVOID) o9a4, F }, { (LPCVOID) o9a5, F }, { (LPCVOID) o9a6, F }, { (LPCVOID) o9a7, F }, { (LPCVOID) o9a8, F }, { (LPCVOID) o9a9, F }, { (LPCVOID) o9aA, F }, { (LPCVOID) o9aB, F }, { (LPCVOID) o9aC, F }, { (LPCVOID) o9aD, F }, { (LPCVOID) o9aE, F }, { (LPCVOID) o9aF, F } }; static JMPTAB o9_[] = { { (LPCVOID) o9a_, 2 }, { (LPCVOID) o9a_, 2 }, { (LPCVOID) o9a_, 2 }, { (LPCVOID) o9a_, 2 }, { (LPCVOID) o9a_, 2 }, { (LPCVOID) o9a_, 2 }, { (LPCVOID) o9a_, 2 }, { (LPCVOID) o9a_, 2 }, { (LPCVOID) o9b_, 2 }, { (LPCVOID) o9b_, 2 }, { (LPCVOID) o9b_, 2 }, { (LPCVOID) o9b_, 2 }, { (LPCVOID) o9b_, 2 }, { (LPCVOID) o9b_, 2 }, { (LPCVOID) o9b_, 2 }, { (LPCVOID) o9b_, 2 } }; static JMPTAB o8B_[] = { { (LPCVOID) o8B0, F }, { (LPCVOID) o8B1, F }, { (LPCVOID) o8B2, F }, { (LPCVOID) o8B3, F }, { (LPCVOID) o8B4, F }, { (LPCVOID) o8B5, F }, { (LPCVOID) o8B6, F }, { (LPCVOID) o8B7, F }, { (LPCVOID) o8B8, F }, { (LPCVOID) o8B9, F }, { (LPCVOID) o8BA, F }, { (LPCVOID) o8BB, F }, { (LPCVOID) o8BC, F }, { (LPCVOID) o8BD, F }, { (LPCVOID) o8BE, F }, { (LPCVOID) o8BF, F } }; static JMPTAB o8A_[] = { { (LPCVOID) o8A0, F }, { (LPCVOID) o8A1, F }, { (LPCVOID) o8A2, F }, { (LPCVOID) o8A3, F }, { (LPCVOID) o8A4, F }, { (LPCVOID) o8A5, F }, { (LPCVOID) o8A6, F }, { (LPCVOID) o8A7, F }, { (LPCVOID) o8A8, F }, { (LPCVOID) o8A9, F }, { (LPCVOID) o8AA, F }, { (LPCVOID) o8AB, F }, { (LPCVOID) o8AC, F }, { (LPCVOID) o8AD, F }, { (LPCVOID) o8AE, F }, { (LPCVOID) o8AF, F } }; static JMPTAB o81B_[] = { { (LPCVOID) o_invalid4, F }, { (LPCVOID) o_invalid4, F }, { (LPCVOID) o81B2, F }, { (LPCVOID) o81B3, F }, { (LPCVOID) o81B4, F }, { (LPCVOID) o81B5, F }, { (LPCVOID) o81B6, F }, { (LPCVOID) o81B7, F }, { (LPCVOID) o_invalid4, F }, { (LPCVOID) o_invalid4, F }, { (LPCVOID) o_invalid4, F }, { (LPCVOID) o_invalid4, F }, { (LPCVOID) o_invalid4, F }, { (LPCVOID) o_invalid4, F }, { (LPCVOID) o_invalid4, F }, { (LPCVOID) o_invalid4, F } }; static JMPTAB o81Af2_[] = { { (LPCVOID) o81Af20, F }, { (LPCVOID) o81Af21, F }, { (LPCVOID) o81Af22, F }, { (LPCVOID) o81Af23, F }, { (LPCVOID) o81Af24, F }, { (LPCVOID) o81Af21, F }, { (LPCVOID) o81Af22, F }, { (LPCVOID) o81Af23, F }, { (LPCVOID) o81Af28, F }, { (LPCVOID) o81Af29, F }, { (LPCVOID) o81Af2A, F }, { (LPCVOID) o81Af2B, F }, { (LPCVOID) o81Af2C, F }, { (LPCVOID) o81Af29, F }, { (LPCVOID) o81Af2A, F }, { (LPCVOID) o81Af2B, F } }; static JMPTAB o81Af1_[] = { { (LPCVOID) o81Af10, F }, { (LPCVOID) o81Af11, F }, { (LPCVOID) o81Af12, F }, { (LPCVOID) o81Af13, F }, { (LPCVOID) o81Af14, F }, { (LPCVOID) o81Af11, F }, { (LPCVOID) o81Af12, F }, { (LPCVOID) o81Af13, F }, { (LPCVOID) o81Af18, F }, { (LPCVOID) o81Af19, F }, { (LPCVOID) o81Af1A, F }, { (LPCVOID) o81Af1B, F }, { (LPCVOID) o81Af1C, F }, { (LPCVOID) o81Af19, F }, { (LPCVOID) o81Af1A, F }, { (LPCVOID) o81Af1B, F } }; static JMPTAB o81Af0_[] = { { (LPCVOID) o81Af00, F }, { (LPCVOID) o81Af01, F }, { (LPCVOID) o81Af02, F }, { (LPCVOID) o81Af03, F }, { (LPCVOID) o81Af04, F }, { (LPCVOID) o81Af01, F }, { (LPCVOID) o81Af02, F }, { (LPCVOID) o81Af03, F }, { (LPCVOID) o81Af08, F }, { (LPCVOID) o81Af09, F }, { (LPCVOID) o81Af0A, F }, { (LPCVOID) o81Af0B, F }, { (LPCVOID) o81Af0C, F }, { (LPCVOID) o81Af09, F }, { (LPCVOID) o81Af0A, F }, { (LPCVOID) o81Af0B, F } }; static JMPTAB o81A_[] = { { (LPCVOID) o81Af0_, 5 }, { (LPCVOID) o81Af1_, 5 }, { (LPCVOID) o81Af2_, 5 }, { (LPCVOID) o_invalid6, F }, { (LPCVOID) o_invalid6, F }, { (LPCVOID) o_invalid6, F }, { (LPCVOID) o_invalid6, F }, { (LPCVOID) o_invalid6, F }, { (LPCVOID) o_invalid6, F }, { (LPCVOID) o_invalid6, F }, { (LPCVOID) o_invalid6, F }, { (LPCVOID) o_invalid6, F }, { (LPCVOID) o_invalid6, F }, { (LPCVOID) o_invalid6, F }, { (LPCVOID) o_invalid6, F }, { (LPCVOID) o_invalid6, F } }; static JMPTAB o819_[] = { { (LPCVOID) o819f0, F }, { (LPCVOID) o819f1, F }, { (LPCVOID) o819f2, F }, { (LPCVOID) o819f3, F }, { (LPCVOID) o_invalid5, F }, { (LPCVOID) o_invalid5, F }, { (LPCVOID) o_invalid5, F }, { (LPCVOID) o_invalid5, F }, { (LPCVOID) o_invalid5, F }, { (LPCVOID) o_invalid5, F }, { (LPCVOID) o_invalid5, F }, { (LPCVOID) o_invalid5, F }, { (LPCVOID) o_invalid5, F }, { (LPCVOID) o_invalid5, F }, { (LPCVOID) o_invalid5, F }, { (LPCVOID) o_invalid5, F } }; static JMPTAB o818_[] = { { (LPCVOID) o818f0x, F }, { (LPCVOID) o818f1x, F }, { (LPCVOID) o818f2x, F }, { (LPCVOID) o818f3x, F }, { (LPCVOID) o_invalid6, F }, { (LPCVOID) o_invalid6, F }, { (LPCVOID) o_invalid6, F }, { (LPCVOID) o_invalid6, F }, { (LPCVOID) o818f8x, F }, { (LPCVOID) o818f9x, F }, { (LPCVOID) o818fAx, F }, { (LPCVOID) o818fBx, F }, { (LPCVOID) o_invalid6, F }, { (LPCVOID) o_invalid6, F }, { (LPCVOID) o_invalid6, F }, { (LPCVOID) o_invalid6, F } }; static JMPTAB o81_[] = { { (LPCVOID) o810, F }, { (LPCVOID) o811, F }, { (LPCVOID) o812, F }, { (LPCVOID) o813, F }, { (LPCVOID) o814, F }, { (LPCVOID) o815, F }, { (LPCVOID) o816, F }, { (LPCVOID) o817, F }, { (LPCVOID) o818_, 4 }, { (LPCVOID) o819_, 4 }, { (LPCVOID) o81A_, 4 }, { (LPCVOID) o81B_, 3 }, { (LPCVOID) o81C, F }, { (LPCVOID) o81D, F }, { (LPCVOID) o81E, F }, { (LPCVOID) o81F, F } }; static JMPTAB o8081_[] = { { (LPCVOID) o80810, F }, { (LPCVOID) o_invalid5, F }, { (LPCVOID) o_invalid5, F }, { (LPCVOID) o_invalid5, F }, { (LPCVOID) o_invalid5, F }, { (LPCVOID) o_invalid5, F }, { (LPCVOID) o_invalid5, F }, { (LPCVOID) o_invalid5, F }, { (LPCVOID) o_invalid5, F }, { (LPCVOID) o_invalid5, F }, { (LPCVOID) o_invalid5, F }, { (LPCVOID) o_invalid5, F }, { (LPCVOID) o_invalid5, F }, { (LPCVOID) o_invalid5, F }, { (LPCVOID) o_invalid5, F }, { (LPCVOID) o_invalid5, F } }; static JMPTAB o808_[] = { { (LPCVOID) o8080, F }, { (LPCVOID) o8081_, 4 }, { (LPCVOID) o8082X, F }, { (LPCVOID) o8083, F }, { (LPCVOID) o8084n, F }, { (LPCVOID) o8085n, F }, { (LPCVOID) o8086n, F }, { (LPCVOID) o8087n, F }, { (LPCVOID) o8088n, F }, { (LPCVOID) o8089n, F }, { (LPCVOID) o808An, F }, { (LPCVOID) o808Bn, F }, { (LPCVOID) o808C, F }, { (LPCVOID) o808D, F }, { (LPCVOID) o808E, F }, { (LPCVOID) o808F, F } }; static JMPTAB o80_[] = { { (LPCVOID) o800, F }, { (LPCVOID) o801, F }, { (LPCVOID) o802, F }, { (LPCVOID) o803, F }, { (LPCVOID) o804, F }, { (LPCVOID) o805, F }, { (LPCVOID) o806, F }, { (LPCVOID) o807, F }, { (LPCVOID) o808_, 3 }, { (LPCVOID) o809, F }, { (LPCVOID) o80A, F }, { (LPCVOID) o80B, F }, { (LPCVOID) o80Cn, F }, { (LPCVOID) o80Dn, F }, { (LPCVOID) o80E, F }, { (LPCVOID) o80Fn, F } }; static JMPTAB o8_[] = { { (LPCVOID) o80_, 2 }, { (LPCVOID) o81_, 2 }, { (LPCVOID) o82n, F }, { (LPCVOID) o83n, F }, { (LPCVOID) o84n, F }, { (LPCVOID) o85n, F }, { (LPCVOID) o86n, F }, { (LPCVOID) o87n, F }, { (LPCVOID) o88n, F }, { (LPCVOID) o89n, F }, { (LPCVOID) o8A_, 2 }, { (LPCVOID) o8B_, 2 }, { (LPCVOID) o8Cd4, F }, { (LPCVOID) o8Dd5, F }, { (LPCVOID) o8Ed4, F }, { (LPCVOID) o8Fd5, F } }; static JMPTAB o15_[] = { { (LPCVOID) o150a, F }, { (LPCVOID) o151a, F }, { (LPCVOID) o152a, F }, { (LPCVOID) o153a, F }, { (LPCVOID) o154a, F }, { (LPCVOID) o155a, F }, { (LPCVOID) o156a, F }, { (LPCVOID) o157a, F }, { (LPCVOID) o158x, F }, { (LPCVOID) o159x, F }, { (LPCVOID) o15Ax, F }, { (LPCVOID) o15Bx, F }, { (LPCVOID) o15Cx, F }, { (LPCVOID) o15Dx, F }, { (LPCVOID) o15Ex, F }, { (LPCVOID) o15Fx, F } }; static JMPTAB o14_[] = { { (LPCVOID) o140, F }, { (LPCVOID) o141, F }, { (LPCVOID) o142, F }, { (LPCVOID) o143, F }, { (LPCVOID) o144, F }, { (LPCVOID) o145, F }, { (LPCVOID) o146, F }, { (LPCVOID) o147, F }, { (LPCVOID) o148, F }, { (LPCVOID) o149, F }, { (LPCVOID) o14A, F }, { (LPCVOID) o14B, F }, { (LPCVOID) o14C, F }, { (LPCVOID) o14D, F }, { (LPCVOID) o14E, F }, { (LPCVOID) o14F, F } }; static JMPTAB o13_[] = { { (LPCVOID) o130, F }, { (LPCVOID) o131, F }, { (LPCVOID) o132, F }, { (LPCVOID) o133, F }, { (LPCVOID) o134, F }, { (LPCVOID) o135, F }, { (LPCVOID) o136, F }, { (LPCVOID) o137, F }, { (LPCVOID) o138, F }, { (LPCVOID) o139, F }, { (LPCVOID) o13A, F }, { (LPCVOID) o13B, F }, { (LPCVOID) o13C, F }, { (LPCVOID) o13D, F }, { (LPCVOID) o13E, F }, { (LPCVOID) o13F, F } }; static JMPTAB o12_[] = { { (LPCVOID) o120, F }, { (LPCVOID) o121, F }, { (LPCVOID) o122, F }, { (LPCVOID) o123, F }, { (LPCVOID) o124, F }, { (LPCVOID) o121, F }, { (LPCVOID) o122, F }, { (LPCVOID) o123, F }, { (LPCVOID) o128, F }, { (LPCVOID) o129, F }, { (LPCVOID) o12A, F }, { (LPCVOID) o12B, F }, { (LPCVOID) o12C, F }, { (LPCVOID) o129, F }, { (LPCVOID) o12A, F }, { (LPCVOID) o12B, F } }; static JMPTAB o11_[] = { { (LPCVOID) o110, F }, { (LPCVOID) o111, F }, { (LPCVOID) o112, F }, { (LPCVOID) o113, F }, { (LPCVOID) o114, F }, { (LPCVOID) o111, F }, { (LPCVOID) o112, F }, { (LPCVOID) o113, F }, { (LPCVOID) o118, F }, { (LPCVOID) o119, F }, { (LPCVOID) o11A, F }, { (LPCVOID) o11B, F }, { (LPCVOID) o11C, F }, { (LPCVOID) o119, F }, { (LPCVOID) o11A, F }, { (LPCVOID) o11B, F } }; static JMPTAB o10_[] = { { (LPCVOID) o100, F }, { (LPCVOID) o101, F }, { (LPCVOID) o102, F }, { (LPCVOID) o103, F }, { (LPCVOID) o104, F }, { (LPCVOID) o101, F }, { (LPCVOID) o102, F }, { (LPCVOID) o103, F }, { (LPCVOID) o108, F }, { (LPCVOID) o109, F }, { (LPCVOID) o10A, F }, { (LPCVOID) o10B, F }, { (LPCVOID) o10C, F }, { (LPCVOID) o109, F }, { (LPCVOID) o10A, F }, { (LPCVOID) o10B, F } }; static JMPTAB o1_[] = { { (LPCVOID) o10_, 2 }, { (LPCVOID) o11_, 2 }, { (LPCVOID) o12_, 2 }, { (LPCVOID) o13_, 2 }, { (LPCVOID) o14_, 2 }, { (LPCVOID) o15_, 2 }, { (LPCVOID) o16x, F }, { (LPCVOID) o17x, F }, { (LPCVOID) o18x, F }, { (LPCVOID) o19d2, F }, { (LPCVOID) o1Ad4, F }, { (LPCVOID) o1Bd5, F }, { (LPCVOID) o1Cx, F }, { (LPCVOID) o1Dd2, F }, { (LPCVOID) o1Ed4, F }, { (LPCVOID) o1Fd5, F } }; static JMPTAB o0E_[] = { { (LPCVOID) o0Ef0, F }, { (LPCVOID) o0Ef1, F }, { (LPCVOID) o0Ef2, F }, { (LPCVOID) o0Ef3, F }, { (LPCVOID) o0Ef4, F }, { (LPCVOID) o0Ef5, F }, { (LPCVOID) o0Ef6, F }, { (LPCVOID) o0Ef7, F }, { (LPCVOID) o0Ef8, F }, { (LPCVOID) o0Ef9, F }, { (LPCVOID) o0EfA, F }, { (LPCVOID) o0EfB, F }, { (LPCVOID) o0EfC, F }, { (LPCVOID) o0EfD, F }, { (LPCVOID) o0EfE, F }, { (LPCVOID) o0EfF, F } }; static JMPTAB o0_[] = { { (LPCVOID) o00, F }, { (LPCVOID) o01, F }, { (LPCVOID) o02, F }, { (LPCVOID) o03, F }, { (LPCVOID) o04, F }, { (LPCVOID) o05, F }, { (LPCVOID) o06, F }, { (LPCVOID) o07, F }, { (LPCVOID) o08, F }, { (LPCVOID) o09, F }, { (LPCVOID) o0A, F }, { (LPCVOID) o0B, F }, { (LPCVOID) o0C, F }, { (LPCVOID) o0D, F }, { (LPCVOID) o0E_, 3 }, { (LPCVOID) o0F, F } }; static JMPTAB o_[] = { { (LPCVOID) o0_, 1 }, { (LPCVOID) o1_, 1 }, { (LPCVOID) o2n, F }, { (LPCVOID) o3X, F }, { (LPCVOID) o4d2, F }, { (LPCVOID) o5d2, F }, { (LPCVOID) o6d3, F }, { (LPCVOID) o7d3, F }, { (LPCVOID) o8_, 1 }, { (LPCVOID) o9_, 1 }, { (LPCVOID) oA_, 1 }, { (LPCVOID) oB_, 1 }, { (LPCVOID) oC_, 1 }, { (LPCVOID) oD_, 1 }, { (LPCVOID) oE_, 1 }, { (LPCVOID) oF_, 1 } }; // opcode dispatcher VOID EvalOpcode(LPBYTE I) { DWORD dwIndex = 0; PJMPTAB pJmpTab = o_; do { _ASSERT(I[dwIndex] <= 0xf); // found packed data pJmpTab = &pJmpTab[I[dwIndex]]; // table entry by opcode dwIndex = pJmpTab->dwTyp; // next pointer type pJmpTab = (PJMPTAB) pJmpTab->pLnk; // next pointer to table/function } while (dwIndex != F); // reference to table? -> again ((VOID (*)(LPBYTE)) pJmpTab)(I); // call function return; }