Mercurial > repos > blastem
comparison x86_backend.c @ 235:d9bf8e61c33c
Get Z80 core working for simple programs
author | Mike Pavone <pavone@retrodev.com> |
---|---|
date | Thu, 25 Apr 2013 21:01:11 -0700 |
parents | |
children | 7b8a49220e3b |
comparison
equal
deleted
inserted
replaced
234:f456ee23d372 | 235:d9bf8e61c33c |
---|---|
1 #include "x86_backend.h" | |
2 #include <stdlib.h> | |
3 | |
4 deferred_addr * defer_address(deferred_addr * old_head, uint32_t address, uint8_t *dest) | |
5 { | |
6 deferred_addr * new_head = malloc(sizeof(deferred_addr)); | |
7 new_head->next = old_head; | |
8 new_head->address = address & 0xFFFFFF; | |
9 new_head->dest = dest; | |
10 return new_head; | |
11 } | |
12 | |
13 void process_deferred(deferred_addr ** head_ptr, void * context, native_addr_func get_native) | |
14 { | |
15 deferred_addr * cur = *head_ptr; | |
16 deferred_addr **last_next = head_ptr; | |
17 while(cur) | |
18 { | |
19 uint8_t * native = get_native(context, cur->address);//get_native_address(opts->native_code_map, cur->address); | |
20 if (native) { | |
21 int32_t disp = native - (cur->dest + 4); | |
22 uint8_t * out = cur->dest; | |
23 *(out++) = disp; | |
24 disp >>= 8; | |
25 *(out++) = disp; | |
26 disp >>= 8; | |
27 *(out++) = disp; | |
28 disp >>= 8; | |
29 *out = disp; | |
30 *last_next = cur->next; | |
31 free(cur); | |
32 cur = *last_next; | |
33 } else { | |
34 last_next = &(cur->next); | |
35 cur = cur->next; | |
36 } | |
37 } | |
38 } | |
39 |