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)); } }
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(); }
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); }
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); }