📄 translate_init.c
字号:
if (opc->opc2 == 0xFF) { printf(" %02x -- -- (%2d ----) : %s\n", opc->opc1, opc->opc1, opc->oname); } else { printf(" %02x %02x -- (%2d %4d) : %s\n", opc->opc1, opc->opc2, opc->opc1, opc->opc2, opc->oname); } } else { printf(" %02x %02x %02x (%2d %4d) : %s\n", opc->opc1, opc->opc2, opc->opc3, opc->opc1, (opc->opc3 << 5) | opc->opc2, opc->oname); } }#endif } } fix_opcode_tables(env->opcodes); fflush(stdout); fflush(stderr); return 0;}int cpu_ppc_register (CPUPPCState *env, ppc_def_t *def){ env->msr_mask = def->msr_mask; env->flags = def->flags; if (create_ppc_opcodes(env, def) < 0) { printf("Error creating opcodes table\n"); fflush(stdout); fflush(stderr); return -1; } init_ppc_proc(env, def);#if defined(PPC_DUMP_CPU) dump_sprs(env);#endif fflush(stdout); fflush(stderr); return 0;}CPUPPCState *cpu_ppc_init(void){ CPUPPCState *env; env = qemu_mallocz(sizeof(CPUPPCState)); if (!env) return NULL; cpu_exec_init(env); tlb_flush(env, 1);#if defined (DO_SINGLE_STEP) && 0 /* Single step trace mode */ msr_se = 1; msr_be = 1;#endif msr_fp = 1; /* Allow floating point exceptions */ msr_me = 1; /* Allow machine check exceptions */#if defined(CONFIG_USER_ONLY) msr_pr = 1;#else env->nip = 0xFFFFFFFC;#endif do_compute_hflags(env); env->reserve = -1; return env;}void cpu_ppc_close(CPUPPCState *env){ /* Should also remove all opcode tables... */ free(env);}/*****************************************************************************//* PowerPC CPU definitions */static ppc_def_t ppc_defs[] ={ /* Embedded PPC */#if defined (TODO) /* PPC 401 */ { .name = "401", .pvr = CPU_PPC_401, .pvr_mask = 0xFFFF0000, .insns_flags = PPC_INSNS_401, .flags = PPC_FLAGS_401, .msr_mask = xxx, },#endif#if defined (TODO) /* IOP480 (401 microcontroler) */ { .name = "iop480", .pvr = CPU_PPC_IOP480, .pvr_mask = 0xFFFF0000, .insns_flags = PPC_INSNS_401, .flags = PPC_FLAGS_401, .msr_mask = xxx, },#endif#if defined (TODO) /* PPC 403 GA */ { .name = "403ga", .pvr = CPU_PPC_403GA, .pvr_mask = 0xFFFFFF00, .insns_flags = PPC_INSNS_403, .flags = PPC_FLAGS_403, .msr_mask = 0x000000000007D23D, },#endif#if defined (TODO) /* PPC 403 GB */ { .name = "403gb", .pvr = CPU_PPC_403GB, .pvr_mask = 0xFFFFFF00, .insns_flags = PPC_INSNS_403, .flags = PPC_FLAGS_403, .msr_mask = 0x000000000007D23D, },#endif#if defined (TODO) /* PPC 403 GC */ { .name = "403gc", .pvr = CPU_PPC_403GC, .pvr_mask = 0xFFFFFF00, .insns_flags = PPC_INSNS_403, .flags = PPC_FLAGS_403, .msr_mask = 0x000000000007D23D, },#endif#if defined (TODO) /* PPC 403 GCX */ { .name = "403gcx", .pvr = CPU_PPC_403GCX, .pvr_mask = 0xFFFFFF00, .insns_flags = PPC_INSNS_403, .flags = PPC_FLAGS_403, .msr_mask = 0x000000000007D23D, },#endif#if defined (TODO) /* PPC 405 CR */ { .name = "405cr", .pvr = CPU_PPC_405, .pvr_mask = 0xFFFF0000, .insns_flags = PPC_INSNS_405, .flags = PPC_FLAGS_405, .msr_mask = 0x00000000020EFF30, },#endif#if defined (TODO) /* PPC 405 GP */ { .name = "405gp", .pvr = CPU_PPC_405, .pvr_mask = 0xFFFF0000, .insns_flags = PPC_INSNS_405, .flags = PPC_FLAGS_405, .msr_mask = 0x00000000020EFF30, },#endif#if defined (TODO) /* PPC 405 EP */ { .name = "405ep", .pvr = CPU_PPC_405EP, .pvr_mask = 0xFFFF0000, .insns_flags = PPC_INSNS_405, .flags = PPC_FLAGS_405, .msr_mask = 0x00000000020EFF30, },#endif#if defined (TODO) /* PPC 405 GPR */ { .name = "405gpr", .pvr = CPU_PPC_405GPR, .pvr_mask = 0xFFFF0000, .insns_flags = PPC_INSNS_405, .flags = PPC_FLAGS_405, .msr_mask = 0x00000000020EFF30, },#endif#if defined (TODO) /* PPC 405 D2 */ { .name = "405d2", .pvr = CPU_PPC_405D2, .pvr_mask = 0xFFFF0000, .insns_flags = PPC_INSNS_405, .flags = PPC_FLAGS_405, .msr_mask = 0x00000000020EFF30, },#endif#if defined (TODO) /* PPC 405 D4 */ { .name = "405d4", .pvr = CPU_PPC_405D4, .pvr_mask = 0xFFFF0000, .insns_flags = PPC_INSNS_405, .flags = PPC_FLAGS_405, .msr_mask = 0x00000000020EFF30, },#endif#if defined (TODO) /* Npe405 H */ { .name = "Npe405H", .pvr = CPU_PPC_NPE405H, .pvr_mask = 0xFFFF0000, .insns_flags = PPC_INSNS_405, .flags = PPC_FLAGS_405, .msr_mask = 0x00000000020EFF30, },#endif#if defined (TODO) /* Npe405 L */ { .name = "Npe405L", .pvr = CPU_PPC_NPE405L, .pvr_mask = 0xFFFF0000, .insns_flags = PPC_INSNS_405, .flags = PPC_FLAGS_405, .msr_mask = 0x00000000020EFF30, },#endif#if defined (TODO) /* STB03xx */ { .name = "STB03", .pvr = CPU_PPC_STB03, .pvr_mask = 0xFFFF0000, .insns_flags = PPC_INSNS_405, .flags = PPC_FLAGS_405, .msr_mask = 0x00000000020EFF30, },#endif#if defined (TODO) /* STB04xx */ { .name = "STB04", .pvr = CPU_PPC_STB04, .pvr_mask = 0xFFFF0000, .insns_flags = PPC_INSNS_405, .flags = PPC_FLAGS_405, .msr_mask = 0x00000000020EFF30, },#endif#if defined (TODO) /* STB25xx */ { .name = "STB25", .pvr = CPU_PPC_STB25, .pvr_mask = 0xFFFF0000, .insns_flags = PPC_INSNS_405, .flags = PPC_FLAGS_405, .msr_mask = 0x00000000020EFF30, },#endif#if defined (TODO) /* PPC 440 EP */ { .name = "440ep", .pvr = CPU_PPC_440EP, .pvr_mask = 0xFFFF0000, .insns_flags = PPC_INSNS_440, .flags = PPC_FLAGS_440, .msr_mask = 0x000000000006D630, },#endif#if defined (TODO) /* PPC 440 GP */ { .name = "440gp", .pvr = CPU_PPC_440GP, .pvr_mask = 0xFFFFFF00, .insns_flags = PPC_INSNS_440, .flags = PPC_FLAGS_440, .msr_mask = 0x000000000006D630, },#endif#if defined (TODO) /* PPC 440 GX */ { .name = "440gx", .pvr = CPU_PPC_440GX, .pvr_mask = 0xFFFF0000, .insns_flags = PPC_INSNS_405, .flags = PPC_FLAGS_440, .msr_mask = 0x000000000006D630, },#endif /* 32 bits "classic" powerpc */#if defined (TODO) /* PPC 601 */ { .name = "601", .pvr = CPU_PPC_601, .pvr_mask = 0xFFFF0000, .insns_flags = PPC_INSNS_601, .flags = PPC_FLAGS_601, .msr_mask = 0x000000000000FD70, },#endif#if defined (TODO) /* PPC 602 */ { .name = "602", .pvr = CPU_PPC_602, .pvr_mask = 0xFFFF0000, .insns_flags = PPC_INSNS_602, .flags = PPC_FLAGS_602, .msr_mask = 0x0000000000C7FF73, },#endif#if defined (TODO) /* PPC 603 */ { .name = "603", .pvr = CPU_PPC_603, .pvr_mask = 0xFFFF0000, .insns_flags = PPC_INSNS_603, .flags = PPC_FLAGS_603, .msr_mask = 0x000000000007FF73, },#endif#if defined (TODO) /* PPC 603e */ { .name = "603e", .pvr = CPU_PPC_603E, .pvr_mask = 0xFFFF0000, .insns_flags = PPC_INSNS_603, .flags = PPC_FLAGS_603, .msr_mask = 0x000000000007FF73, }, { .name = "Stretch", .pvr = CPU_PPC_603E, .pvr_mask = 0xFFFF0000, .insns_flags = PPC_INSNS_603, .flags = PPC_FLAGS_603, .msr_mask = 0x000000000007FF73, },#endif#if defined (TODO) /* PPC 603ev */ { .name = "603ev", .pvr = CPU_PPC_603EV, .pvr_mask = 0xFFFFF000, .insns_flags = PPC_INSNS_603, .flags = PPC_FLAGS_603, .msr_mask = 0x000000000007FF73, },#endif#if defined (TODO) /* PPC 603r */ { .name = "603r", .pvr = CPU_PPC_603R, .pvr_mask = 0xFFFFF000, .insns_flags = PPC_INSNS_603, .flags = PPC_FLAGS_603, .msr_mask = 0x000000000007FF73, }, { .name = "Goldeneye", .pvr = CPU_PPC_603R, .pvr_mask = 0xFFFFF000, .insns_flags = PPC_INSNS_603, .flags = PPC_FLAGS_603, .msr_mask = 0x000000000007FF73, },#endif#if defined (TODO) /* XXX: TODO: according to Motorola UM, this is a derivative to 603e */ { .name = "G2", .pvr = CPU_PPC_G2, .pvr_mask = 0xFFFF0000, .insns_flags = PPC_INSNS_G2, .flags = PPC_FLAGS_G2, .msr_mask = 0x000000000006FFF2, }, { /* Same as G2, with LE mode support */ .name = "G2le", .pvr = CPU_PPC_G2LE, .pvr_mask = 0xFFFF0000, .insns_flags = PPC_INSNS_G2, .flags = PPC_FLAGS_G2, .msr_mask = 0x000000000007FFF3, },#endif /* PPC 604 */ { .name = "604", .pvr = CPU_PPC_604, .pvr_mask = 0xFFFF0000, .insns_flags = PPC_INSNS_604, .flags = PPC_FLAGS_604, .msr_mask = 0x000000000005FF77, }, /* PPC 604e */ { .name = "604e", .pvr = CPU_PPC_604E, .pvr_mask = 0xFFFF0000, .insns_flags = PPC_INSNS_604, .flags = PPC_FLAGS_604, .msr_mask = 0x000000000005FF77, }, /* PPC 604r */ { .name = "604r", .pvr = CPU_PPC_604R, .pvr_mask = 0xFFFF0000, .insns_flags = PPC_INSNS_604, .flags = PPC_FLAGS_604, .msr_mask = 0x000000000005FF77, }, /* generic G3 */ { .name = "G3", .pvr = CPU_PPC_74x, .pvr_mask = 0xFFFFF000, .insns_flags = PPC_INSNS_7x0, .flags = PPC_FLAGS_7x0, .msr_mask = 0x000000000007FF77, },#if defined (TODO) /* MPC740 (G3) */ { .name = "740", .pvr = CPU_PPC_74x, .pvr_mask = 0xFFFFF000, .insns_flags = PPC_INSNS_7x0, .flags = PPC_FLAGS_7x0, .msr_mask = 0x000000000007FF77, }, { .name = "Arthur", .pvr = CPU_PPC_74x, .pvr_mask = 0xFFFFF000, .insns_flags = PPC_INSNS_7x0, .flags = PPC_FLAGS_7x0, .msr_mask = 0x000000000007FF77, },#endif#if defined (TODO) /* MPC745 (G3) */ { .name = "745", .pvr = CPU_PPC_74x, .pvr_mask = 0xFFFFF000, .insns_flags = PPC_INSNS_7x5, .flags = PPC_FLAGS_7x5, .msr_mask = 0x000000000007FF77, }, { .name = "Goldfinger", .pvr = CPU_PPC_74x, .pvr_mask = 0xFFFFF000, .insns_flags = PPC_INSNS_7x5, .flags = PPC_FLAGS_7x5, .msr_mask = 0x000000000007FF77, },#endif /* MPC750 (G3) */ { .name = "750", .pvr = CPU_PPC_74x, .pvr_mask = 0xFFFFF000, .insns_flags = PPC_INSNS_7x0, .flags = PPC_FLAGS_7x0, .msr_mask = 0x000000000007FF77, },#if defined (TODO) /* MPC755 (G3) */ { .name = "755", .pvr = CPU_PPC_755, .pvr_mask = 0xFFFFF000, .insns_flags = PPC_INSNS_7x5, .flags = PPC_FLAGS_7x5, .msr_mask = 0x000000000007FF77, },#endif#if defined (TODO) /* MPC740P (G3) */ { .name = "740p", .pvr = CPU_PPC_74xP, .pvr_mask = 0xFFFFF000, .insns_flags = PPC_INSNS_7x0, .flags = PPC_FLAGS_7x0, .msr_mask = 0x000000000007FF77, }, { .name = "Conan/Doyle", .pvr = CPU_PPC_74xP, .pvr_mask = 0xFFFFF000, .insns_flags = PPC_INSNS_7x0, .flags = PPC_FLAGS_7x0, .msr_mask = 0x000000000007FF77, },
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -