mirror of
https://github.com/nunuhara/xsystem4.git
synced 2026-10-12 09:18:11 +03:00
aindump: correct argument types, all syscalls
Use the correct argument types for all instructions, with the exception of SH_REF_LOCAL_ASSIGN_STRUCTREF2 which I could find an example of. List all system calls.
This commit is contained in:
@@ -40,6 +40,7 @@ enum syscall_code {
|
||||
SYS_OPEN_WEB = 0x0B,
|
||||
SYS_GET_SAVE_FOLDER_NAME = 0x0C,
|
||||
SYS_GET_TIME = 0x0D,
|
||||
SYS_GET_GAME_NAME = 0x0E,
|
||||
SYS_ERROR = 0x0F,
|
||||
SYS_EXISTS_SAVE_FILE = 0x10,
|
||||
SYS_IS_DEBUG_MODE = 0x11,
|
||||
@@ -47,8 +48,12 @@ enum syscall_code {
|
||||
SYS_GET_FUNC_STACK_NAME = 0x13,
|
||||
SYS_PEEK = 0x14,
|
||||
SYS_SLEEP = 0x15,
|
||||
SYS_RESUME_WRITE_COMMENT = 0x16,
|
||||
SYS_RESUME_READ_COMMENT = 0x17,
|
||||
SYS_GROUP_SAVE = 0x18,
|
||||
SYS_GROUP_LOAD = 0x19,
|
||||
SYS_DELETE_SAVE_FILE = 0x1A,
|
||||
SYS_EXIST_FUNC = 0x1B,
|
||||
SYS_COPY_SAVE_FILE = 0x1C,
|
||||
NR_SYSCALLS
|
||||
};
|
||||
@@ -348,6 +353,19 @@ enum instruction_argtype {
|
||||
T_DLG,
|
||||
};
|
||||
|
||||
// TODO: Need to know which class a method belongs to
|
||||
// in order to use this. Should be replaced with
|
||||
// "this.<member-name>" in disassembled output.
|
||||
#define T_MEMB T_INT
|
||||
|
||||
// TODO: As above, but for member of a member, etc.
|
||||
#define T_MEMB2 T_INT
|
||||
#define T_MEMB3 T_INT
|
||||
|
||||
// TODO: Similar to above, but for member of local variable.
|
||||
// Only used in one instruction--maybe special case?
|
||||
#define T_LOCMEMB T_INT
|
||||
|
||||
struct instruction {
|
||||
const enum opcode opcode; // the opcode
|
||||
const char * const name; // assembler name
|
||||
|
||||
@@ -444,6 +444,7 @@ static bool read_tag(struct ain_reader *r, struct ain *ain)
|
||||
instructions[CALLHLL].nr_args = 3;
|
||||
instructions[S_MOD].nr_args = 1;
|
||||
instructions[OBJSWAP].nr_args = 1;
|
||||
instructions[DG_STR_TO_METHOD].nr_args = 1;
|
||||
}
|
||||
} else if (TAG_EQ("KEYC")) {
|
||||
ain->keycode = read_int32(r);
|
||||
|
||||
+55
-50
@@ -50,6 +50,7 @@ const struct syscall syscalls[NR_SYSCALLS] = {
|
||||
TODO ( SYS_OPEN_WEB, OpenWeb ),
|
||||
SYS ( SYS_GET_SAVE_FOLDER_NAME, GetSaveFolderName ),
|
||||
SYS ( SYS_GET_TIME, GetTime ),
|
||||
TODO ( SYS_GET_GAME_NAME, GetGameName ),
|
||||
SYS ( SYS_ERROR, Error ),
|
||||
SYS ( SYS_EXISTS_SAVE_FILE, ExistsSaveFile ),
|
||||
SYS ( SYS_IS_DEBUG_MODE, IsDebugMode ),
|
||||
@@ -59,6 +60,10 @@ const struct syscall syscalls[NR_SYSCALLS] = {
|
||||
SYS ( SYS_SLEEP, Sleep ),
|
||||
SYS ( SYS_GROUP_SAVE, GroupSave ),
|
||||
SYS ( SYS_GROUP_LOAD, GroupLoad ),
|
||||
TODO ( SYS_RESUME_WRITE_COMMENT, ResumeWriteComment ),
|
||||
TODO ( SYS_RESUME_READ_COMMENT, ResumeReadComment ),
|
||||
TODO ( SYS_DELETE_SAVE_FILE, DeleteSaveFile ),
|
||||
TODO ( SYS_EXIST_FUNC, ExistFunc ),
|
||||
TODO ( SYS_COPY_SAVE_FILE, CopySaveFile ),
|
||||
};
|
||||
|
||||
@@ -277,69 +282,69 @@ struct instruction instructions[NR_OPCODES] = {
|
||||
|
||||
// FIXME: all types are guesses
|
||||
TODO ( SH_SR_ASSIGN, 0 ),
|
||||
TODO ( SH_MEM_ASSIGN_LOCAL, 2, T_INT, T_LOCAL ),
|
||||
TODO ( SH_MEM_ASSIGN_LOCAL, 2, T_MEMB, T_LOCAL ),
|
||||
TODO ( A_NUMOF_GLOB_1, 1, T_GLOBAL ),
|
||||
TODO ( A_NUMOF_STRUCT_1, 1, T_INT ),
|
||||
TODO ( SH_MEM_ASSIGN_IMM, 2, T_INT, T_INT ),
|
||||
TODO ( A_NUMOF_STRUCT_1, 1, T_MEMB ),
|
||||
TODO ( SH_MEM_ASSIGN_IMM, 2, T_MEMB, T_INT ),
|
||||
TODO ( SH_LOCALREFREF, 1, T_LOCAL ),
|
||||
TODO ( SH_LOCALASSIGN_SUB_IMM, 2, T_INT, T_INT ),
|
||||
TODO ( SH_LOCALASSIGN_SUB_IMM, 2, T_LOCAL, T_INT ),
|
||||
TODO ( SH_IF_LOC_LT_IMM, 3, T_LOCAL, T_INT, T_ADDR ),
|
||||
TODO ( SH_IF_LOC_GE_IMM, 3, T_LOCAL, T_INT, T_ADDR ),
|
||||
TODO ( SH_LOCREF_ASSIGN_MEM, 2, T_INT, T_INT ),
|
||||
TODO ( SH_LOCREF_ASSIGN_MEM, 2, T_LOCAL, T_MEMB ),
|
||||
TODO ( PAGE_REF, 1, T_INT ),
|
||||
TODO ( SH_GLOBAL_ASSIGN_LOCAL, 2, T_GLOBAL, T_LOCAL ),
|
||||
TODO ( SH_STRUCTREF_GT_IMM, 2, T_INT, T_INT ),
|
||||
TODO ( SH_STRUCT_ASSIGN_LOCALREF_ITOB, 2, T_INT, T_INT ),
|
||||
TODO ( SH_LOCAL_ASSIGN_STRUCTREF, 2, T_INT, T_INT ),
|
||||
TODO ( SH_IF_STRUCTREF_NE_LOCALREF, 3, T_STRUCT, T_LOCAL, T_ADDR ),
|
||||
TODO ( SH_IF_STRUCTREF_GT_IMM, 3, T_INT, T_INT, T_ADDR ),
|
||||
TODO ( SH_STRUCTREF_CALLMETHOD_NO_PARAM, 2, T_INT, T_FUNC ),
|
||||
TODO ( SH_STRUCTREF2, 2, T_INT, T_INT ),
|
||||
TODO ( SH_REF_STRUCTREF2, 2, T_INT, T_INT ),
|
||||
TODO ( SH_STRUCTREF3, 3, T_INT, T_INT, T_INT ),
|
||||
TODO ( SH_STRUCTREF2_CALLMETHOD_NO_PARAM, 3, T_INT, T_INT, T_FUNC ),
|
||||
TODO ( SH_IF_STRUCTREF_Z, 2, T_INT, T_ADDR ),
|
||||
TODO ( SH_IF_STRUCT_A_NOT_EMPTY, 2, T_INT, T_ADDR ),
|
||||
TODO ( SH_IF_LOC_GT_IMM, 3, T_INT, T_INT, T_ADDR ),
|
||||
TODO ( SH_IF_STRUCTREF_NE_IMM, 3, T_INT, T_INT, T_ADDR ),
|
||||
TODO ( SH_STRUCTREF_GT_IMM, 2, T_MEMB, T_INT ),
|
||||
TODO ( SH_STRUCT_ASSIGN_LOCALREF_ITOB, 2, T_MEMB, T_LOCAL ),
|
||||
TODO ( SH_LOCAL_ASSIGN_STRUCTREF, 2, T_LOCAL, T_MEMB ),
|
||||
TODO ( SH_IF_STRUCTREF_NE_LOCALREF, 3, T_MEMB, T_LOCAL, T_ADDR ),
|
||||
TODO ( SH_IF_STRUCTREF_GT_IMM, 3, T_MEMB, T_INT, T_ADDR ),
|
||||
TODO ( SH_STRUCTREF_CALLMETHOD_NO_PARAM, 2, T_MEMB, T_FUNC ),
|
||||
TODO ( SH_STRUCTREF2, 2, T_MEMB, T_MEMB2 ),
|
||||
TODO ( SH_REF_STRUCTREF2, 2, T_MEMB, T_MEMB2 ),
|
||||
TODO ( SH_STRUCTREF3, 3, T_MEMB, T_MEMB2, T_MEMB3 ),
|
||||
TODO ( SH_STRUCTREF2_CALLMETHOD_NO_PARAM, 3, T_MEMB, T_MEMB2, T_FUNC ),
|
||||
TODO ( SH_IF_STRUCTREF_Z, 2, T_MEMB, T_ADDR ),
|
||||
TODO ( SH_IF_STRUCT_A_NOT_EMPTY, 2, T_MEMB, T_ADDR ),
|
||||
TODO ( SH_IF_LOC_GT_IMM, 3, T_LOCAL, T_INT, T_ADDR ),
|
||||
TODO ( SH_IF_STRUCTREF_NE_IMM, 3, T_MEMB, T_INT, T_ADDR ),
|
||||
TODO ( THISCALLMETHOD_NOPARAM, 1, T_FUNC ),
|
||||
TODO ( SH_IF_LOC_NE_IMM, 3, T_LOCAL, T_INT, T_ADDR ),
|
||||
TODO ( SH_IF_STRUCTREF_EQ_IMM, 3, T_INT, T_INT, T_ADDR ),
|
||||
TODO ( SH_IF_STRUCTREF_EQ_IMM, 3, T_MEMB, T_INT, T_ADDR ),
|
||||
TODO ( SH_GLOBAL_ASSIGN_IMM, 2, T_GLOBAL, T_INT ),
|
||||
TODO ( SH_LOCALSTRUCT_ASSIGN_IMM, 0 ), // TODO: args?
|
||||
TODO ( SH_STRUCT_A_PUSHBACK_LOCAL_STRUCT, 2, T_INT, T_INT ),
|
||||
TODO ( SH_GLOBAL_A_PUSHBACK_LOCAL_STRUCT, 2, T_INT, T_INT ),
|
||||
TODO ( SH_LOCAL_A_PUSHBACK_LOCAL_STRUCT, 2, T_INT, T_INT ),
|
||||
TODO ( SH_IF_SREF_NE_STR0, 2, T_INT, T_ADDR ),
|
||||
TODO ( SH_LOCALSTRUCT_ASSIGN_IMM, 3, T_LOCAL, T_LOCMEMB, T_INT ),
|
||||
TODO ( SH_STRUCT_A_PUSHBACK_LOCAL_STRUCT, 2, T_MEMB, T_LOCAL ),
|
||||
TODO ( SH_GLOBAL_A_PUSHBACK_LOCAL_STRUCT, 2, T_GLOBAL, T_LOCAL ),
|
||||
TODO ( SH_LOCAL_A_PUSHBACK_LOCAL_STRUCT, 2, T_LOCAL, T_LOCAL ),
|
||||
TODO ( SH_IF_SREF_NE_STR0, 2, T_STRING, T_ADDR ),
|
||||
TODO ( SH_S_ASSIGN_REF, 0 ),
|
||||
TODO ( SH_A_FIND_SREF, 0 ), // TODO: args?
|
||||
TODO ( SH_A_FIND_SREF, 0 ),
|
||||
TODO ( SH_SREF_EMPTY, 0 ),
|
||||
TODO ( SH_STRUCTSREF_EQ_LOCALSREF, 2 , T_STRUCT, T_LOCAL ),
|
||||
TODO ( SH_LOCALSREF_EQ_STR0, 2, T_INT, T_INT ),
|
||||
TODO ( SH_STRUCTSREF_NE_LOCALSREF, 2, T_INT, T_INT ),
|
||||
TODO ( SH_LOCALSREF_NE_STR0, 2, T_INT, T_INT ),
|
||||
TODO ( SH_STRUCT_SR_REF, 2, T_INT, T_INT ),
|
||||
TODO ( SH_STRUCT_S_REF, 1, T_INT ),
|
||||
TODO ( S_REF2, 1, T_INT ),
|
||||
TODO ( SH_REF_LOCAL_ASSIGN_STRUCTREF2, 0 ),
|
||||
TODO ( SH_STRUCTSREF_EQ_LOCALSREF, 2 , T_MEMB, T_LOCAL ),
|
||||
TODO ( SH_LOCALSREF_EQ_STR0, 2, T_LOCAL, T_STRING ),
|
||||
TODO ( SH_STRUCTSREF_NE_LOCALSREF, 2, T_MEMB, T_LOCAL ),
|
||||
TODO ( SH_LOCALSREF_NE_STR0, 2, T_LOCAL, T_STRING ),
|
||||
TODO ( SH_STRUCT_SR_REF, 2, T_MEMB, T_STRUCT ),
|
||||
TODO ( SH_STRUCT_S_REF, 1, T_MEMB ),
|
||||
TODO ( S_REF2, 1, T_MEMB ),
|
||||
TODO ( SH_REF_LOCAL_ASSIGN_STRUCTREF2, 3, T_INT, T_INT, T_INT ), // FIXME: arguments types unknown
|
||||
TODO ( SH_GLOBAL_S_REF, 1, T_GLOBAL ),
|
||||
TODO ( SH_LOCAL_S_REF, 1, T_INT ),
|
||||
TODO ( SH_LOCALREF_SASSIGN_LOCALSREF, 2, T_INT, T_INT ),
|
||||
TODO ( SH_LOCAL_APUSHBACK_LOCALSREF, 2, T_INT, T_INT ),
|
||||
TODO ( SH_LOCAL_S_REF, 1, T_LOCAL ),
|
||||
TODO ( SH_LOCALREF_SASSIGN_LOCALSREF, 2, T_LOCAL, T_LOCAL ),
|
||||
TODO ( SH_LOCAL_APUSHBACK_LOCALSREF, 2, T_LOCAL, T_LOCAL ),
|
||||
TODO ( SH_S_ASSIGN_CALLSYS19, 0 ),
|
||||
TODO ( SH_S_ASSIGN_STR0, 1, T_INT ),
|
||||
TODO ( SH_SASSIGN_LOCALSREF, 1, T_INT ),
|
||||
TODO ( SH_STRUCTREF_SASSIGN_LOCALSREF, 2, T_INT, T_INT ),
|
||||
TODO ( SH_LOCALSREF_EMPTY, 1, T_INT ),
|
||||
TODO ( SH_GLOBAL_APUSHBACK_LOCALSREF, 2, T_INT, T_INT ),
|
||||
TODO ( SH_STRUCT_APUSHBACK_LOCALSREF, 2, T_INT, T_INT ),
|
||||
TODO ( SH_STRUCTSREF_EMPTY, 1, T_INT ),
|
||||
TODO ( SH_S_ASSIGN_STR0, 1, T_STRING ),
|
||||
TODO ( SH_SASSIGN_LOCALSREF, 1, T_LOCAL ),
|
||||
TODO ( SH_STRUCTREF_SASSIGN_LOCALSREF, 2, T_MEMB, T_LOCAL ),
|
||||
TODO ( SH_LOCALSREF_EMPTY, 1, T_LOCAL ),
|
||||
TODO ( SH_GLOBAL_APUSHBACK_LOCALSREF, 2, T_GLOBAL, T_LOCAL ),
|
||||
TODO ( SH_STRUCT_APUSHBACK_LOCALSREF, 2, T_MEMB, T_LOCAL ),
|
||||
TODO ( SH_STRUCTSREF_EMPTY, 1, T_MEMB ),
|
||||
TODO ( SH_GLOBALSREF_EMPTY, 1, T_GLOBAL ),
|
||||
TODO ( SH_SASSIGN_STRUCTSREF, 1, T_INT ),
|
||||
TODO ( SH_SASSIGN_GLOBALSREF, 1, T_INT ),
|
||||
TODO ( SH_STRUCTSREF_NE_STR0, 2, T_INT, T_INT ),
|
||||
TODO ( SH_GLOBALSREF_NE_STR0, 2, T_INT, T_INT ),
|
||||
TODO ( SH_LOC_LT_IMM_OR_LOC_GE_IMM, 3, T_INT, T_ADDR, T_ADDR ),
|
||||
TODO ( SH_SASSIGN_STRUCTSREF, 1, T_MEMB ),
|
||||
TODO ( SH_SASSIGN_GLOBALSREF, 1, T_GLOBAL ),
|
||||
TODO ( SH_STRUCTSREF_NE_STR0, 2, T_MEMB, T_STRING ),
|
||||
TODO ( SH_GLOBALSREF_NE_STR0, 2, T_GLOBAL, T_STRING ),
|
||||
TODO ( SH_LOC_LT_IMM_OR_LOC_GE_IMM, 3, T_LOCAL, T_INT, T_INT ),
|
||||
|
||||
TODO ( A_SORT_MEM, 0 ),
|
||||
TODO ( DG_ADD, 0 ),
|
||||
@@ -357,7 +362,7 @@ struct instruction instructions[NR_OPCODES] = {
|
||||
TODO ( DG_MINUSA, 0 ),
|
||||
TODO ( DG_CALLBEGIN, 1, T_DLG ),
|
||||
TODO ( DG_NEW, 0 ),
|
||||
TODO ( DG_STR_TO_METHOD, 1, T_INT ),
|
||||
TODO ( DG_STR_TO_METHOD, 0, T_DLG ), // XXX: changed in ain version > 8
|
||||
|
||||
TODO ( OP_0x102, 0 ),
|
||||
TODO ( OP_0x103, 2, T_INT, T_INT ),
|
||||
|
||||
Reference in New Issue
Block a user