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