public static void InitParser(Ucodes UcodeID)
        {
            UcodeCommands.Init(new UcodeCommandDelegate(Ucode_NOOP));

            switch (UcodeID)
            {
                case Ucodes.F3DEX2:
                    UcodeCommands[(byte)UcodeF3DEX2.VTX] = new UcodeCommandDelegate(Ucode_F3DEX2_VTX);
                    UcodeCommands[(byte)UcodeF3DEX2.TRI1] = new UcodeCommandDelegate(Ucode_F3DEX2_TRI1);
                    UcodeCommands[(byte)UcodeF3DEX2.TRI2] = new UcodeCommandDelegate(Ucode_F3DEX2_TRI2);
                    UcodeCommands[(byte)UcodeF3DEX2.DL] = new UcodeCommandDelegate(Ucode_F3DEX2_DL);
                    UcodeCommands[(byte)UcodeF3DEX2.ENDDL] = new UcodeCommandDelegate(Ucode_F3DEX2_ENDDL);
                    UcodeCommands[(byte)UcodeF3DEX2.TEXTURE] = new UcodeCommandDelegate(Ucode_F3DEX2_TEXTURE);
                    UcodeCommands[(byte)UcodeG.SETTIMG] = new UcodeCommandDelegate(Ucode_G_SETTIMG);
                    UcodeCommands[(byte)UcodeG.SETTILE] = new UcodeCommandDelegate(Ucode_G_SETTILE);
                    UcodeCommands[(byte)UcodeG.SETTILESIZE] = new UcodeCommandDelegate(Ucode_G_SETTILESIZE);
                    UcodeCommands[(byte)UcodeG.LOADBLOCK] = new UcodeCommandDelegate(Ucode_G_LOADBLOCK);
                    UcodeCommands[(byte)UcodeG.LOADTLUT] = new UcodeCommandDelegate(Ucode_G_LOADTLUT);
                    UcodeCommands[(byte)UcodeG.SETCOMBINE] = new UcodeCommandDelegate(Ucode_G_SETCOMBINE);
                    UcodeCommands[(byte)UcodeG.SETFILLCOLOR] = new UcodeCommandDelegate(Ucode_G_SETFILLCOLOR);
                    UcodeCommands[(byte)UcodeG.SETFOGCOLOR] = new UcodeCommandDelegate(Ucode_G_SETFOGCOLOR);
                    UcodeCommands[(byte)UcodeG.SETBLENDCOLOR] = new UcodeCommandDelegate(Ucode_G_SETBLENDCOLOR);
                    UcodeCommands[(byte)UcodeG.SETPRIMCOLOR] = new UcodeCommandDelegate(Ucode_G_SETPRIMCOLOR);
                    UcodeCommands[(byte)UcodeG.SETENVCOLOR] = new UcodeCommandDelegate(Ucode_G_SETENVCOLOR);
                    UcodeCommands[(byte)UcodeF3DEX2.GEOMETRYMODE] = new UcodeCommandDelegate(Ucode_F3DEX2_GEOMETRYMODE);
                    UcodeCommands[(byte)UcodeF3DEX2.SETOTHERMODE_L] = new UcodeCommandDelegate(Ucode_F3DEX2_SETOTHERMODE_L);
                    UcodeCommands[(byte)UcodeF3DEX2.RDPHALF_1] = new UcodeCommandDelegate(Ucode_F3DEX2_RDPHALF_1);
                    UcodeCommands[(byte)UcodeF3DEX2.RDPHALF_2] = new UcodeCommandDelegate(Ucode_F3DEX2_RDPHALF_2);
                    UcodeCommands[(byte)UcodeF3DEX2.BRANCH_Z] = new UcodeCommandDelegate(Ucode_F3DEX2_BRANCH_Z);
                    UcodeCommands[(byte)UcodeF3DEX2.MTX] = new UcodeCommandDelegate(Ucode_F3DEX2_MTX);
                    UcodeCommands[(byte)UcodeF3DEX2.POPMTX] = new UcodeCommandDelegate(Ucode_F3DEX2_POPMTX);

                    DLCmd = (byte)UcodeF3DEX2.DL;
                    EndDLCmd = (byte)UcodeF3DEX2.ENDDL;
                    RDPHalf1Cmd = (byte)UcodeF3DEX2.RDPHALF_1;
                    break;
            }
        }
        public static void Initialize(Ucodes UcodeID)
        {
            TexUtil.InitTexturing();

            NGraphics = new NGraphicsStruct();
            NGraphics.Textures = new NTextureStruct[2];
            NGraphics.Palette = new Color4[256];

            CurrentDLists = new List<DisplayListStruct>();

            FragmentCache = new List<FragmentCacheStruct>();
            TextureCache = new List<TextureCacheStruct>();

            InitParser(UcodeID);
            /*
            byte[] HighlightBytes = Encoding.ASCII.GetBytes(
                "!!ARBfp1.0\n" +
                "OUTPUT FinalColor = result.color;\n" +
                "MOV FinalColor, {0.0, 1.0, 0.0, 0.3};\n" +
                "END");

            GL.Arb.GenProgram(1, out FPHighlight);
            GL.Arb.BindProgram(AssemblyProgramTargetArb.FragmentProgram, FPHighlight);
            GL.Arb.ProgramString(AssemblyProgramTargetArb.FragmentProgram, ArbVertexProgram.ProgramFormatAsciiArb,
                HighlightBytes.Length, HighlightBytes);
            */
            AddMacros();
        }