Mercurial > repos > blastem
changeset 872:7022ba865cfd
Initial work for allowing loading a ROM from menu
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Sun, 08 Nov 2015 15:51:57 -0800 |
parents | f364f4f22f8f |
children | 91bf4d905eba |
files | blastem.c m68k_core.h m68k_core_x86.c menu.c menu.s68 |
diffstat | 5 files changed, 18 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/blastem.c Fri Nov 06 19:47:58 2015 -0800 +++ b/blastem.c Sun Nov 08 15:51:57 2015 -0800 @@ -171,6 +171,9 @@ }*/ context->target_cycle = context->int_cycle < context->sync_cycle ? context->int_cycle : context->sync_cycle; + if (context->should_return) { + context->target_cycle = context->current_cycle; + } /*printf("Cyc: %d, Trgt: %d, Int Cyc: %d, Int: %d, Mask: %X, V: %d, H: %d, HICount: %d, HReg: %d, Line: %d\n", context->current_cycle, context->target_cycle, context->int_cycle, context->int_num, (context->status & 0x7), v_context->regs[REG_MODE_2] & 0x20, v_context->regs[REG_MODE_1] & 0x10, v_context->hint_counter, v_context->regs[REG_HINT], v_context->cycles / MCLKS_LINE);*/ @@ -1016,7 +1019,7 @@ //Temporary hack until UI is in place if (!(rom_size = load_rom("/mnt/sdcard/rom.bin"))) { fatal_error("Failed to open /mnt/sdcard/rom.bin for reading"); - + } romfname = "/mnt/sdcard/rom.bin"; loaded = 1;
--- a/m68k_core.h Fri Nov 06 19:47:58 2015 -0800 +++ b/m68k_core.h Sun Nov 08 15:51:57 2015 -0800 @@ -59,11 +59,12 @@ uint32_t int_num; uint16_t *mem_pointers[NUM_MEM_AREAS]; void *video_context; - + void *resume_pc; native_map_slot *native_code_map; m68k_options *options; void *system; uint8_t int_pending; + uint8_t should_return; uint8_t ram_code_flags[]; } m68k_context;
--- a/m68k_core_x86.c Fri Nov 06 19:47:58 2015 -0800 +++ b/m68k_core_x86.c Sun Nov 08 15:51:57 2015 -0800 @@ -2509,7 +2509,14 @@ mov_rr(code, RAX, opts->gen.context_reg, SZ_PTR); jmp(code, opts->gen.load_context); *skip_sync = code->cur - (skip_sync+1); + cmp_irdisp(code, 0, opts->gen.context_reg, offsetof(m68k_context, should_return), SZ_B); + code_ptr do_ret = code->cur + 1; + jcc(code, CC_NZ, do_ret); retn(code); + *do_ret = code->cur - (do_ret+1); + pop_r(code, opts->gen.scratch1); + retn(code); + mov_rrdisp(code, opts->gen.scratch1, opts->gen.context_reg, offsetof(m68k_context, resume_pc), SZ_PTR); *do_int = code->cur - (do_int+1); //implement 1 instruction latency cmp_irdisp(code, 0, opts->gen.context_reg, offsetof(m68k_context, int_pending), SZ_B);