# HG changeset patch # User Mike Pavone # Date 1393231815 28800 # Node ID acec5464fa1ef6addaab44c76bfdd34451f15e0c # Parent 34dfa9b24c7b4856852a132389221ff279154407 Rename x86_backend.h and x86_backend.c to backend.h and backend.c respectively diff -r 34dfa9b24c7b -r acec5464fa1e Makefile --- a/Makefile Mon Feb 24 00:40:32 2014 -0800 +++ b/Makefile Mon Feb 24 00:50:15 2014 -0800 @@ -24,7 +24,7 @@ -TRANSOBJS=gen_x86.o x86_backend.o mem.o +TRANSOBJS=gen_x86.o backend.o mem.o M68KOBJS=68kinst.o m68k_to_x86.o ifeq ($(CPU),x86_64) M68KOBJS+= runtime.o diff -r 34dfa9b24c7b -r acec5464fa1e backend.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/backend.c Mon Feb 24 00:50:15 2014 -0800 @@ -0,0 +1,53 @@ +/* + Copyright 2013 Michael Pavone + This file is part of BlastEm. + BlastEm is free software distributed under the terms of the GNU General Public License version 3 or greater. See COPYING for full license text. +*/ +#include "backend.h" +#include + +deferred_addr * defer_address(deferred_addr * old_head, uint32_t address, uint8_t *dest) +{ + deferred_addr * new_head = malloc(sizeof(deferred_addr)); + new_head->next = old_head; + new_head->address = address & 0xFFFFFF; + new_head->dest = dest; + return new_head; +} + +void remove_deferred_until(deferred_addr **head_ptr, deferred_addr * remove_to) +{ + for(deferred_addr *cur = *head_ptr; cur && cur != remove_to; cur = *head_ptr) + { + *head_ptr = cur->next; + free(cur); + } +} + +void process_deferred(deferred_addr ** head_ptr, void * context, native_addr_func get_native) +{ + deferred_addr * cur = *head_ptr; + deferred_addr **last_next = head_ptr; + while(cur) + { + uint8_t * native = get_native(context, cur->address);//get_native_address(opts->native_code_map, cur->address); + if (native) { + int32_t disp = native - (cur->dest + 4); + uint8_t * out = cur->dest; + *(out++) = disp; + disp >>= 8; + *(out++) = disp; + disp >>= 8; + *(out++) = disp; + disp >>= 8; + *out = disp; + *last_next = cur->next; + free(cur); + cur = *last_next; + } else { + last_next = &(cur->next); + cur = cur->next; + } + } +} + diff -r 34dfa9b24c7b -r acec5464fa1e backend.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/backend.h Mon Feb 24 00:50:15 2014 -0800 @@ -0,0 +1,92 @@ +/* + Copyright 2013 Michael Pavone + This file is part of BlastEm. + BlastEm is free software distributed under the terms of the GNU General Public License version 3 or greater. See COPYING for full license text. +*/ +#ifndef BACKEND_H_ +#define BACKEND_H_ + +#include +#include + +#define INVALID_OFFSET 0xFFFFFFFF +#define EXTENSION_WORD 0xFFFFFFFE + +typedef struct { + int32_t disp; + uint8_t mode; + uint8_t base; + uint8_t index; + uint8_t cycles; +} x86_ea; + +typedef struct { + uint8_t *base; + int32_t *offsets; +} native_map_slot; + +typedef struct deferred_addr { + struct deferred_addr *next; + uint8_t *dest; + uint32_t address; +} deferred_addr; + +typedef enum { + READ_16, + READ_8, + WRITE_16, + WRITE_8 +} ftype; + +typedef struct { + uint32_t flags; + native_map_slot *native_code_map; + deferred_addr *deferred; + uint8_t *cur_code; + uint8_t *code_end; + uint8_t **ram_inst_sizes; + FILE *address_log; + uint8_t *save_context; + uint8_t *load_context; + uint8_t *handle_cycle_limit; + uint8_t *handle_cycle_limit_int; + uint8_t context_reg; + uint8_t scratch1; + uint8_t scratch2; +} cpu_options; + + +#define MMAP_READ 0x01 +#define MMAP_WRITE 0x02 +#define MMAP_CODE 0x04 +#define MMAP_PTR_IDX 0x08 +#define MMAP_ONLY_ODD 0x10 +#define MMAP_ONLY_EVEN 0x20 +#define MMAP_FUNC_NULL 0x40 + +typedef uint16_t (*read_16_fun)(uint32_t address, void * context); +typedef uint8_t (*read_8_fun)(uint32_t address, void * context); +typedef void * (*write_16_fun)(uint32_t address, void * context, uint16_t value); +typedef void * (*write_8_fun)(uint32_t address, void * context, uint8_t value); + +typedef struct { + uint32_t start; + uint32_t end; + uint32_t mask; + uint16_t ptr_index; + uint16_t flags; + void * buffer; + read_16_fun read_16; + write_16_fun write_16; + read_8_fun read_8; + write_8_fun write_8; +} memmap_chunk; + +typedef uint8_t * (*native_addr_func)(void * context, uint32_t address); + +deferred_addr * defer_address(deferred_addr * old_head, uint32_t address, uint8_t *dest); +void remove_deferred_until(deferred_addr **head_ptr, deferred_addr * remove_to); +void process_deferred(deferred_addr ** head_ptr, void * context, native_addr_func get_native); + +#endif //BACKEND_H_ + diff -r 34dfa9b24c7b -r acec5464fa1e m68k_to_x86.c --- a/m68k_to_x86.c Mon Feb 24 00:40:32 2014 -0800 +++ b/m68k_to_x86.c Mon Feb 24 00:50:15 2014 -0800 @@ -7,7 +7,7 @@ #include "m68k_to_x86.h" #include "68kinst.h" #include "mem.h" -#include "x86_backend.h" +#include "backend.h" #include #include #include diff -r 34dfa9b24c7b -r acec5464fa1e m68k_to_x86.h --- a/m68k_to_x86.h Mon Feb 24 00:40:32 2014 -0800 +++ b/m68k_to_x86.h Mon Feb 24 00:50:15 2014 -0800 @@ -7,7 +7,7 @@ #define M68K_TO_X86_H_ #include #include -#include "x86_backend.h" +#include "backend.h" //#include "68kinst.h" struct m68kinst; diff -r 34dfa9b24c7b -r acec5464fa1e x86_backend.c --- a/x86_backend.c Mon Feb 24 00:40:32 2014 -0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,53 +0,0 @@ -/* - Copyright 2013 Michael Pavone - This file is part of BlastEm. - BlastEm is free software distributed under the terms of the GNU General Public License version 3 or greater. See COPYING for full license text. -*/ -#include "x86_backend.h" -#include - -deferred_addr * defer_address(deferred_addr * old_head, uint32_t address, uint8_t *dest) -{ - deferred_addr * new_head = malloc(sizeof(deferred_addr)); - new_head->next = old_head; - new_head->address = address & 0xFFFFFF; - new_head->dest = dest; - return new_head; -} - -void remove_deferred_until(deferred_addr **head_ptr, deferred_addr * remove_to) -{ - for(deferred_addr *cur = *head_ptr; cur && cur != remove_to; cur = *head_ptr) - { - *head_ptr = cur->next; - free(cur); - } -} - -void process_deferred(deferred_addr ** head_ptr, void * context, native_addr_func get_native) -{ - deferred_addr * cur = *head_ptr; - deferred_addr **last_next = head_ptr; - while(cur) - { - uint8_t * native = get_native(context, cur->address);//get_native_address(opts->native_code_map, cur->address); - if (native) { - int32_t disp = native - (cur->dest + 4); - uint8_t * out = cur->dest; - *(out++) = disp; - disp >>= 8; - *(out++) = disp; - disp >>= 8; - *(out++) = disp; - disp >>= 8; - *out = disp; - *last_next = cur->next; - free(cur); - cur = *last_next; - } else { - last_next = &(cur->next); - cur = cur->next; - } - } -} - diff -r 34dfa9b24c7b -r acec5464fa1e x86_backend.h --- a/x86_backend.h Mon Feb 24 00:40:32 2014 -0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,92 +0,0 @@ -/* - Copyright 2013 Michael Pavone - This file is part of BlastEm. - BlastEm is free software distributed under the terms of the GNU General Public License version 3 or greater. See COPYING for full license text. -*/ -#ifndef X86_BACKEND_H_ -#define X86_BACKEND_H_ - -#include -#include - -#define INVALID_OFFSET 0xFFFFFFFF -#define EXTENSION_WORD 0xFFFFFFFE - -typedef struct { - int32_t disp; - uint8_t mode; - uint8_t base; - uint8_t index; - uint8_t cycles; -} x86_ea; - -typedef struct { - uint8_t *base; - int32_t *offsets; -} native_map_slot; - -typedef struct deferred_addr { - struct deferred_addr *next; - uint8_t *dest; - uint32_t address; -} deferred_addr; - -typedef enum { - READ_16, - READ_8, - WRITE_16, - WRITE_8 -} ftype; - -typedef struct { - uint32_t flags; - native_map_slot *native_code_map; - deferred_addr *deferred; - uint8_t *cur_code; - uint8_t *code_end; - uint8_t **ram_inst_sizes; - FILE *address_log; - uint8_t *save_context; - uint8_t *load_context; - uint8_t *handle_cycle_limit; - uint8_t *handle_cycle_limit_int; - uint8_t context_reg; - uint8_t scratch1; - uint8_t scratch2; -} cpu_options; - - -#define MMAP_READ 0x01 -#define MMAP_WRITE 0x02 -#define MMAP_CODE 0x04 -#define MMAP_PTR_IDX 0x08 -#define MMAP_ONLY_ODD 0x10 -#define MMAP_ONLY_EVEN 0x20 -#define MMAP_FUNC_NULL 0x40 - -typedef uint16_t (*read_16_fun)(uint32_t address, void * context); -typedef uint8_t (*read_8_fun)(uint32_t address, void * context); -typedef void * (*write_16_fun)(uint32_t address, void * context, uint16_t value); -typedef void * (*write_8_fun)(uint32_t address, void * context, uint8_t value); - -typedef struct { - uint32_t start; - uint32_t end; - uint32_t mask; - uint16_t ptr_index; - uint16_t flags; - void * buffer; - read_16_fun read_16; - write_16_fun write_16; - read_8_fun read_8; - write_8_fun write_8; -} memmap_chunk; - -typedef uint8_t * (*native_addr_func)(void * context, uint32_t address); - -deferred_addr * defer_address(deferred_addr * old_head, uint32_t address, uint8_t *dest); -void remove_deferred_until(deferred_addr **head_ptr, deferred_addr * remove_to); -void process_deferred(deferred_addr ** head_ptr, void * context, native_addr_func get_native); - -#endif //X86_BACKEND_H_ - diff -r 34dfa9b24c7b -r acec5464fa1e z80_to_x86.h --- a/z80_to_x86.h Mon Feb 24 00:40:32 2014 -0800 +++ b/z80_to_x86.h Mon Feb 24 00:50:15 2014 -0800 @@ -1,12 +1,12 @@ /* Copyright 2013 Michael Pavone - This file is part of BlastEm. + This file is part of BlastEm. BlastEm is free software distributed under the terms of the GNU General Public License version 3 or greater. See COPYING for full license text. */ #ifndef Z80_TO_X86_H_ #define Z80_TO_X86_H_ #include "z80inst.h" -#include "x86_backend.h" +#include "backend.h" #define ZNUM_MEM_AREAS 4 #define ZMAX_NATIVE_SIZE 128