Esempio n. 1
0
        public static uint GetArgValue(OneCode code, int arg_count)
        {
            Arg arg = code.Script.Args[arg_count];

            if (arg.Size == 1)
            {//1バイト
                return(ROM.u8(code.ByteData, (uint)arg.Position));
            }
            else if (arg.Size == 2)
            {//2バイト
                return(ROM.u16(code.ByteData, (uint)arg.Position));
            }
            else //if (arg.Size == 4)
            {//4バイト
                return(ROM.u32(code.ByteData, (uint)arg.Position));
            }
        }
Esempio n. 2
0
        public static string GetArg(OneCode code, int arg_count, out uint v)
        {
            Arg arg = code.Script.Args[arg_count];

            if (arg.Size == 1)
            {//1バイト
                v = ROM.u8(code.ByteData, (uint)arg.Position);
            }
            else if (arg.Size == 2)
            {//2バイト
                v = ROM.u16(code.ByteData, (uint)arg.Position);
            }
            else //if (arg.Size == 4)
            {//4バイト
                v = ROM.u32(code.ByteData, (uint)arg.Position);
            }

            if (arg.Size == 1)
            {//1バイト
                if (arg.Type == ArgType.ArgType_X || arg.Type == ArgType.ArgType_Y)
                {
                    return(v.ToString());
                }
                return("0x" + v.ToString("X"));
            }
            else if (arg.Size == 2)
            {//2バイト
                if (arg.Type == ArgType.ArgType_X || arg.Type == ArgType.ArgType_Y)
                {
                    return(v.ToString());
                }
                return("0x" + v.ToString("X"));
            }
            else //if (arg.Size == 4)
            {//4バイト
                if (arg.Type == ArgType.ArgType_X || arg.Type == ArgType.ArgType_Y)
                {
                    return(v.ToString());
                }
                return("0x" + v.ToString("X"));
            }
            //return v.ToString();
        }
Esempio n. 3
0
        static uint FindFontDataSJIS(uint topaddress
                                     , uint moji, out uint prevaddr, ROM rom
                                     )
        {
            uint moji1 = ((moji >> 8) & 0xff);
            uint moji2 = (moji & 0xff);
            uint list;

            if (moji1 == 0)
            {//拡張 半角アルファベットフォント
                moji1 = 0x40;
            }
            else if (moji1 < 0x1f)
            {
                prevaddr = U.NOT_FOUND;
                //moji1バイト目が 0x1F より小さい コントロールコードにはフォントは存在しません
                return(U.NOT_FOUND);
            }

            //リストの元になるポインタへ移動.
            list     = topaddress + (moji1 << 2) - 0x100;
            prevaddr = list;

            if (!U.isSafetyOffset(list))
            {
                return(U.NOT_FOUND);
            }
            uint p = rom.p32(list);

            if (!U.isSafetyOffset(p, rom))
            {
                return(U.NOT_FOUND);
            }

            //同一ハッシュキーがあるため、リストをたどりながら目的のフォントを探します.
            //日本語版
            //struct{
            //    void* next;
            //    byte  moji2
            //    byte  width
            //    byte  nazo1
            //    byte  nazo2
            //} //sizeof()==8
            while (p > 0)
            {
                uint next  = rom.p32(p);
                uint check = rom.u8(p + 4);

                //日本語版は、 moji1でハッシュして、 以下listをmoji2で探索します.
                if (check == moji2)
                {
                    //探していた文字コードである.
                    return(p);
                }

                //現在地の保存.
                prevaddr = p;

                if (next == 0)
                {//リスト終端.
                    break;
                }

                if (!U.isSafetyOffset(next, rom))
                {//リストが壊れている.
                    break;
                }

                //次のリストへ進む.
                p = next;
            }

            //探していたフォントは存在しない!
            return(U.NOT_FOUND);
        }
Esempio n. 4
0
        static uint FindFontDataUTF8(uint topaddress
                                     , uint moji, out uint prevaddr, ROM rom
                                     )
        {
            uint moji1 = (moji & 0xff);

            //リストの元になるポインタへ移動.
            uint list = topaddress + (moji1 << 2);

            prevaddr = list;

            if (!U.isSafetyOffset(list))
            {
                return(U.NOT_FOUND);
            }
            uint p = rom.p32(list);

            if (!U.isSafetyOffset(p, rom))
            {
                return(U.NOT_FOUND);
            }

            //同一ハッシュキーがあるため、リストをたどりながら目的のフォントを探します.
            //日本語版
            //struct{
            //    void* next;
            //    byte  moji2
            //    byte  width
            //    byte  moji3
            //    byte  moji4
            //} //sizeof()==8
            uint moji2 = ((moji >> 8) & 0xff);
            uint moji3 = ((moji >> 16) & 0xff);
            uint moji4 = ((moji >> 24) & 0xff);

            while (p > 0)
            {
                uint next   = rom.p32(p);
                uint check2 = rom.u8(p + 4);
                uint check3 = rom.u8(p + 6);
                uint check4 = rom.u8(p + 7);

                //日本語版は、 moji1でハッシュして、 以下listをmoji2で探索します.
                if (check2 == moji2 &&
                    check3 == moji3 &&
                    check4 == moji4
                    )
                {
                    //探していた文字コードである.
                    return(p);
                }

                //現在地の保存.
                prevaddr = p;

                if (next == 0)
                {//リスト終端.
                    break;
                }

                if (!U.isSafetyOffset(next, rom))
                {//リストが壊れている.
                    break;
                }

                //次のリストへ進む.
                p = next;
            }

            //探していたフォントは存在しない!
            return(U.NOT_FOUND);
        }