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:
Nunuhara Cabbage
2020-01-11 15:05:45 -08:00
parent 8c226ab535
commit 70a8b9d136
3 changed files with 74 additions and 50 deletions
+18
View File
@@ -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
+1
View File
@@ -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
View File
@@ -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 ),