Mercurial > repos > blastem
comparison backend_x86.c @ 604:39d7d463ed5b
Get Z80 banked access sort of working again
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Fri, 26 Dec 2014 19:37:59 -0800 |
parents | f0061e3d2ad9 |
children | 9d6fed6501ba |
comparison
equal
deleted
inserted
replaced
603:8c7b63f9fab8 | 604:39d7d463ed5b |
---|---|
82 cfun = memmap[chunk].write_8; | 82 cfun = memmap[chunk].write_8; |
83 break; | 83 break; |
84 default: | 84 default: |
85 cfun = NULL; | 85 cfun = NULL; |
86 } | 86 } |
87 if(memmap[chunk].buffer && memmap[chunk].flags & access_flag) { | 87 if(memmap[chunk].flags & access_flag) { |
88 if (memmap[chunk].flags & MMAP_PTR_IDX) { | 88 if (memmap[chunk].flags & MMAP_PTR_IDX) { |
89 if (memmap[chunk].flags & MMAP_FUNC_NULL) { | 89 if (memmap[chunk].flags & MMAP_FUNC_NULL) { |
90 cmp_irdisp(code, 0, opts->context_reg, opts->mem_ptr_off + sizeof(void*) * memmap[chunk].ptr_index, SZ_PTR); | 90 cmp_irdisp(code, 0, opts->context_reg, opts->mem_ptr_off + sizeof(void*) * memmap[chunk].ptr_index, SZ_PTR); |
91 code_ptr not_null = code->cur + 1; | 91 code_ptr not_null = code->cur + 1; |
92 jcc(code, CC_NZ, code->cur + 2); | 92 jcc(code, CC_NZ, code->cur + 2); |
131 } | 131 } |
132 jmp(code, opts->load_context); | 132 jmp(code, opts->load_context); |
133 | 133 |
134 *not_null = code->cur - (not_null + 1); | 134 *not_null = code->cur - (not_null + 1); |
135 } | 135 } |
136 if (opts->byte_swap && size == SZ_B) { | 136 if ((opts->byte_swap || memmap[chunk].flags & MMAP_BYTESWAP) && size == SZ_B) { |
137 xor_ir(code, 1, adr_reg, opts->address_size); | 137 xor_ir(code, 1, adr_reg, opts->address_size); |
138 } | 138 } |
139 if (opts->address_size != SZ_D) { | 139 if (opts->address_size != SZ_D) { |
140 movzx_rr(code, adr_reg, adr_reg, opts->address_size, SZ_D); | 140 movzx_rr(code, adr_reg, adr_reg, opts->address_size, SZ_D); |
141 } | 141 } |
157 mov_ir(code, 0xFF, opts->scratch1, SZ_B); | 157 mov_ir(code, 0xFF, opts->scratch1, SZ_B); |
158 } | 158 } |
159 retn(code); | 159 retn(code); |
160 *good_addr = code->cur - (good_addr + 1); | 160 *good_addr = code->cur - (good_addr + 1); |
161 shr_ir(code, 1, adr_reg, opts->address_size); | 161 shr_ir(code, 1, adr_reg, opts->address_size); |
162 } else if (opts->byte_swap) { | 162 } else if (opts->byte_swap || memmap[chunk].flags & MMAP_BYTESWAP) { |
163 xor_ir(code, 1, adr_reg, opts->address_size); | 163 xor_ir(code, 1, adr_reg, opts->address_size); |
164 } | 164 } |
165 } else if ((memmap[chunk].flags & MMAP_ONLY_ODD) || (memmap[chunk].flags & MMAP_ONLY_EVEN)) { | 165 } else if ((memmap[chunk].flags & MMAP_ONLY_ODD) || (memmap[chunk].flags & MMAP_ONLY_EVEN)) { |
166 tmp_size = SZ_B; | 166 tmp_size = SZ_B; |
167 shr_ir(code, 1, adr_reg, opts->address_size); | 167 shr_ir(code, 1, adr_reg, opts->address_size); |