X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=cpu%2Ffame%2Ffame.h;h=2f9d8508a1d03cf4b38aace9a1525ba0da8d49e1;hb=9db6a54485501b56b0f2f5db4d093c38fe495bda;hp=11955939d12ff8539f6508274eb4413610996755;hpb=70357ce52578dee0dd3b3663902cf872c3d34258;p=picodrive.git diff --git a/cpu/fame/fame.h b/cpu/fame/fame.h index 1195593..2f9d850 100644 --- a/cpu/fame/fame.h +++ b/cpu/fame/fame.h @@ -18,13 +18,13 @@ extern "C" { #define M68K_FETCHBANK1 (1 << FAMEC_FETCHBITS) //#define M68K_RUNNING 0x01 -#define M68K_HALTED 0x80 -#define M68K_WAITING 0x04 -#define M68K_DISABLE 0x20 -#define M68K_FAULTED 0x40 -#define M68K_EMULATE_GROUP_0 0x02 -#define M68K_EMULATE_TRACE 0x08 -#define M68K_DO_TRACE 0x10 +#define FM68K_HALTED 0x80 +//#define M68K_WAITING 0x04 +//#define M68K_DISABLE 0x20 +//#define M68K_FAULTED 0x40 +#define FM68K_EMULATE_GROUP_0 0x02 +#define FM68K_EMULATE_TRACE 0x08 +#define FM68K_DO_TRACE 0x10 /************************************/ @@ -92,29 +92,6 @@ extern "C" { /* Data definition */ /*******************/ -/* M68K registers */ -typedef enum { - M68K_REG_D0=0, - M68K_REG_D1, - M68K_REG_D2, - M68K_REG_D3, - M68K_REG_D4, - M68K_REG_D5, - M68K_REG_D6, - M68K_REG_D7, - M68K_REG_A0, - M68K_REG_A1, - M68K_REG_A2, - M68K_REG_A3, - M68K_REG_A4, - M68K_REG_A5, - M68K_REG_A6, - M68K_REG_A7, - M68K_REG_ASP, - M68K_REG_PC, - M68K_REG_SR -} m68k_register; - typedef union { unsigned char B; @@ -125,21 +102,6 @@ typedef union signed int SD; } famec_union32; -/* The memory blocks must be in native (Motorola) format */ -struct M68K_PROGRAM { - unsigned low_addr; - unsigned high_addr; - unsigned offset; -}; - -/* The memory blocks must be in native (Motorola) format */ -struct M68K_DATA { - unsigned low_addr; - unsigned high_addr; - void *mem_handler; - void *data; -}; - /* M68K CPU CONTEXT */ typedef struct { @@ -160,7 +122,25 @@ typedef struct unsigned short execinfo; // PD extension int io_cycle_counter; // cycles left - unsigned int Fetch[M68K_FETCHBANK1]; + + unsigned int Opcode; + signed int cycles_needed; + + unsigned short *PC; + unsigned long BasePC; + unsigned int flag_C; + unsigned int flag_V; + unsigned int flag_NotZ; + unsigned int flag_N; + unsigned int flag_X; + unsigned int flag_T; + unsigned int flag_S; + unsigned int flag_I; + + unsigned char not_polling; + unsigned char pad[3]; + + unsigned long Fetch[M68K_FETCHBANK1]; } M68K_CONTEXT; extern M68K_CONTEXT *g_m68kcontext; @@ -170,13 +150,12 @@ extern M68K_CONTEXT *g_m68kcontext; /************************/ /* General purpose functions */ -void m68k_init(void); -int m68k_reset(void); -int m68k_emulate(int n); +void fm68k_init(void); +int fm68k_reset(void); +int fm68k_emulate(int n, int idle_mode); +int fm68k_would_interrupt(void); // to be called from fm68k_emulate() -unsigned m68k_get_pc(M68K_CONTEXT *context); -unsigned m68k_get_register(M68K_CONTEXT *context, m68k_register reg); -unsigned m68k_set_register(M68K_CONTEXT *context, m68k_register reg, unsigned value); +unsigned fm68k_get_pc(M68K_CONTEXT *context); #ifdef __cplusplus