--- np2/i386c/ia32/cpu_mem.h 2004/01/25 07:53:09 1.2 +++ np2/i386c/ia32/cpu_mem.h 2005/03/05 16:47:04 1.8 @@ -1,7 +1,7 @@ -/* $Id: cpu_mem.h,v 1.2 2004/01/25 07:53:09 yui Exp $ */ +/* $Id: cpu_mem.h,v 1.8 2005/03/05 16:47:04 monaka Exp $ */ /* - * Copyright (c) 2002-2003 NONAKA Kimihiro + * Copyright (c) 2002-2004 NONAKA Kimihiro * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -30,53 +30,57 @@ #ifndef IA32_CPU_CPU_MEM_H__ #define IA32_CPU_CPU_MEM_H__ +#include "memory.h" #include "segments.h" #ifdef __cplusplus extern "C" { #endif -// extern BYTE *cpumem; -// extern DWORD extmem_size; - -int init_cpumem(UINT8 usemem); - /* * memory access check */ -void cpu_memoryread_check(descriptor_t* sd, DWORD madr, DWORD length, int e); -void cpu_memorywrite_check(descriptor_t* sd, DWORD madr, DWORD length, int e); -BOOL cpu_stack_push_check(descriptor_t* sd, DWORD madr, DWORD length); -BOOL cpu_stack_pop_check(descriptor_t* sd, DWORD madr, DWORD length); -#define CHECK_STACK_PUSH(sdp, addr, n) cpu_stack_push_check(sdp, addr, n) -#define CHECK_STACK_POP(sdp, addr, n) cpu_stack_pop_check(sdp, addr, n) +void cpu_memoryread_check(descriptor_t *sd, UINT32 madr, UINT length, int e); +void cpu_memorywrite_check(descriptor_t *sd, UINT32 madr, UINT length, int e); +void cpu_stack_push_check(UINT16 s, descriptor_t *sd, UINT32 madr, UINT length); +void cpu_stack_pop_check(UINT16 s, descriptor_t *sd, UINT32 madr, UINT length); +#define STACK_PUSH_CHECK(s, sd, addr, n) cpu_stack_push_check(s, sd, addr, n) +#define STACK_POP_CHECK(s, sd, addr, n) cpu_stack_pop_check(s, sd, addr, n) /* - * physcal address function + * virtual address function */ -void MEMCALL cpu_memorywrite(DWORD address, BYTE value); -void MEMCALL cpu_memorywrite_w(DWORD address, WORD value); -void MEMCALL cpu_memorywrite_d(DWORD address, DWORD value); -BYTE MEMCALL cpu_memoryread(DWORD address); -WORD MEMCALL cpu_memoryread_w(DWORD address); -DWORD MEMCALL cpu_memoryread_d(DWORD address); +void MEMCALL cpu_vmemorywrite_b(int idx, UINT32 offset, UINT8 value) GCC_ATTR_REGPARM; +void MEMCALL cpu_vmemorywrite_w(int idx, UINT32 offset, UINT16 value) GCC_ATTR_REGPARM; +void MEMCALL cpu_vmemorywrite_d(int idx, UINT32 offset, UINT32 value) GCC_ATTR_REGPARM; +void MEMCALL cpu_vmemorywrite_q(int idx, UINT32 offset, UINT64 value) GCC_ATTR_REGPARM; +void MEMCALL cpu_vmemorywrite_f(int idx, UINT32 offset, const REG80 *value) GCC_ATTR_REGPARM; +UINT8 MEMCALL cpu_vmemoryread_b(int idx, UINT32 offset) GCC_ATTR_REGPARM; +UINT16 MEMCALL cpu_vmemoryread_w(int idx, UINT32 offset) GCC_ATTR_REGPARM; +UINT32 MEMCALL cpu_vmemoryread_d(int idx, UINT32 offset) GCC_ATTR_REGPARM; +UINT64 MEMCALL cpu_vmemoryread_q(int idx, UINT32 offset) GCC_ATTR_REGPARM; +REG80 MEMCALL cpu_vmemoryread_f(int idx, UINT32 offset) GCC_ATTR_REGPARM; +UINT32 MEMCALL cpu_memory_access_va_RMW_b(int idx, UINT32 offset, UINT32 (*func)(UINT32, void *), void *arg) GCC_ATTR_REGPARM; +UINT32 MEMCALL cpu_memory_access_va_RMW_w(int idx, UINT32 offset, UINT32 (*func)(UINT32, void *), void *arg) GCC_ATTR_REGPARM; +UINT32 MEMCALL cpu_memory_access_va_RMW_d(int idx, UINT32 offset, UINT32 (*func)(UINT32, void *), void *arg) GCC_ATTR_REGPARM; +#define cpu_vmemorywrite(i,o,v) cpu_vmemorywrite_b(i,o,v) +#define cpu_vmemoryread(i,o) cpu_vmemoryread_b(i,o) +#define cpu_memory_access_va_RMW(i,o,f,a) cpu_memory_access_va_RMW_b(i,o,f,a) /* - * virtual address function + * code fetch */ -void MEMCALL cpu_vmemorywrite(int idx, DWORD address, BYTE value); -void MEMCALL cpu_vmemorywrite_w(int idx, DWORD address, WORD value); -void MEMCALL cpu_vmemorywrite_d(int idx, DWORD address, DWORD value); -BYTE MEMCALL cpu_vmemoryread(int idx, DWORD address); -WORD MEMCALL cpu_vmemoryread_w(int idx, DWORD address); -DWORD MEMCALL cpu_vmemoryread_d(int idx, DWORD address); +UINT8 MEMCALL cpu_codefetch(UINT32 madr) GCC_ATTR_REGPARM; +UINT16 MEMCALL cpu_codefetch_w(UINT32 madr) GCC_ATTR_REGPARM; +UINT32 MEMCALL cpu_codefetch_d(UINT32 madr) GCC_ATTR_REGPARM; /* - * code fetch + * additional physical address function */ -BYTE MEMCALL cpu_codefetch(DWORD madr); -WORD MEMCALL cpu_codefetch_w(DWORD madr); -DWORD MEMCALL cpu_codefetch_d(DWORD madr); +UINT64 MEMCALL cpu_memoryread_q(UINT32 address) GCC_ATTR_REGPARM; +REG80 MEMCALL cpu_memoryread_f(UINT32 address) GCC_ATTR_REGPARM; +void MEMCALL cpu_memorywrite_q(UINT32 address, UINT64 value) GCC_ATTR_REGPARM; +void MEMCALL cpu_memorywrite_f(UINT32 address, const REG80 *value) GCC_ATTR_REGPARM; #ifdef __cplusplus }