Mercurial > repos > blastem
comparison z80_to_x86.c @ 663:7a5461001242
Sync Z80 when taking an interrupt so that int_cycle gets updated
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Fri, 02 Jan 2015 00:19:10 -0800 |
parents | 66388360f873 |
children | bca748422bf0 |
comparison
equal
deleted
inserted
replaced
662:66388360f873 | 663:7a5461001242 |
---|---|
2101 //dispose of return address as we'll be jumping somewhere else | 2101 //dispose of return address as we'll be jumping somewhere else |
2102 pop_r(code, options->gen.scratch2); | 2102 pop_r(code, options->gen.scratch2); |
2103 //TODO: Support interrupt mode 0 and 2 | 2103 //TODO: Support interrupt mode 0 and 2 |
2104 mov_ir(code, 0x38, options->gen.scratch1, SZ_W); | 2104 mov_ir(code, 0x38, options->gen.scratch1, SZ_W); |
2105 call(code, options->native_addr); | 2105 call(code, options->native_addr); |
2106 jmp_r(code, options->gen.scratch1); | 2106 mov_rrind(code, options->gen.scratch1, options->gen.context_reg, SZ_PTR); |
2107 //restore callee saved registers | |
2108 pop_r(code, R15); | |
2109 pop_r(code, R14); | |
2110 pop_r(code, R13); | |
2111 pop_r(code, R12); | |
2112 pop_r(code, RBP); | |
2113 pop_r(code, RBX); | |
2114 //return to caller of z80_run to sync | |
2115 retn(code); | |
2107 *skip_int = code->cur - (skip_int+1); | 2116 *skip_int = code->cur - (skip_int+1); |
2108 cmp_rdispr(code, options->gen.context_reg, offsetof(z80_context, sync_cycle), options->gen.cycles, SZ_D); | 2117 cmp_rdispr(code, options->gen.context_reg, offsetof(z80_context, sync_cycle), options->gen.cycles, SZ_D); |
2109 code_ptr skip_sync = code->cur + 1; | 2118 code_ptr skip_sync = code->cur + 1; |
2110 jcc(code, CC_B, skip_sync); | 2119 jcc(code, CC_B, skip_sync); |
2111 options->do_sync = code->cur; | 2120 options->do_sync = code->cur; |