#define log_translation(type) \ { \ static FILE *translation_log_fp = NULL; \ char disasm_buffer[512]; \ u8 *current_translation_ptr; \ \ if(translation_log_fp == NULL) \ translation_log_fp = fopen("translation_log.txt", "wb"); \ \ fprintf(translation_log_fp, "Block PC %x -> %p\n", block_start_pc, \ translation_ptr_start); \ \ pc = block_start_pc; \ \ while(pc < block_end_pc) \ { \ check_pc_region(pc); \ type##_load_opcode_disasm(); \ \ disasm_##type##_instruction(opcode, disasm_buffer, pc); \ fprintf(translation_log_fp, "%08x: %s\n", pc, disasm_buffer); \ } \ \ fprintf(translation_log_fp, "\n"); \ \ for(current_translation_ptr = translation_ptr_start; \ current_translation_ptr < translation_ptr; current_translation_ptr += 4) \ { \ opcode = address32(current_translation_ptr, 0); \ disasm_arm_instruction(opcode, disasm_buffer, \ (u32)current_translation_ptr); \ fprintf(translation_log_fp, "%08x: %s\n", current_translation_ptr, \ disasm_buffer); \ } \ \ fprintf(translation_log_fp, "\n"); \ fflush(translation_log_fp); \ } \