//----------------------------------------------------------------------------- // state_restore() //----------------------------------------------------------------------------- void state_restore(char* filename) { _u16 version; if (system_io_state_read(filename, (_u8*)&version, sizeof(_u16))) { switch(version) { case 0x0050: read_state_0050(filename); break; default: system_message(system_get_string(IDS_BADSTATE)); return; } #ifdef NEOPOP_DEBUG system_debug_message("Restoring State ..."); system_debug_refresh(); #endif } }
void emulate_debug(BOOL dis_TLCS900h, BOOL dis_Z80) { _u32 storePC = pc; debug_abort_memory = FALSE; debug_abort_instruction = FALSE; system_debug_history_add(); //For the debugger if (dis_TLCS900h) { char* s; //Disassemble TLCS-900h _u32 oldpc = pc; s = disassemble(); system_debug_message(s); system_debug_message_associate_address(oldpc); free(s); pc = oldpc; } if (dis_Z80) { //Disassemble Z80 if (Z80ACTIVE) { char* s; _u16 pc = Z80_getReg(Z80_REG_PC); _u16 store_pc = pc; //Disassemble s = Z80_disassemble(&pc); system_debug_message(s); system_debug_message_associate_address(store_pc + 0x7000); free(s); } } debug_abort_memory = FALSE; debug_abort_instruction = FALSE; //================== // EMULATE //================== { //TLCS900h instruction updateTimers(TLCS900h_interpret()); //Z80 Instruction if (Z80ACTIVE) Z80EMULATE; } //Check register code error if (rErr != RERR_VALUE) instruction_error("Invalid register code used."); //Memory Exception if (debug_abort_memory && filter_mem) { _u32 oldpc = pc; char* s; debug_abort_memory = FALSE; //Try to disassemble the erroneous instruction pc = storePC; debug_mask_memory_error_messages = TRUE; s = disassemble(); debug_mask_memory_error_messages = FALSE; if (debug_abort_memory == FALSE) { system_debug_message("Stopped due to memory exception caused by"); system_debug_message(" %s", s); system_debug_message_associate_address(storePC); system_debug_message("\n"); } else { system_debug_message("Stopped due to memory exception caused at %06X", storePC); system_debug_message_associate_address(storePC); } free(s); pc = oldpc; system_debug_stop(); system_debug_refresh(); return; } //Unimplemented Instruction if (debug_abort_instruction) { _u32 oldpc = pc; char* s; debug_abort_memory = FALSE; //Try to disassemble the erroneous instruction pc = storePC; debug_mask_memory_error_messages = TRUE; s = disassemble(); debug_mask_memory_error_messages = FALSE; if (debug_abort_memory == FALSE) { system_debug_message("Stopped due to instruction"); system_debug_message(" %s", s); system_debug_message_associate_address(storePC); system_debug_message("\n"); } else { system_debug_message("Stopped due to instruction at %06X", storePC); system_debug_message_associate_address(storePC); } free(s); pc = oldpc; system_debug_stop(); system_debug_refresh(); return; } }