X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=cpu%2Ffame%2Ffame.h;h=93172c8747fc95ca74d509b87e5f726319347594;hb=12f23dac6f91eb707f985ef00a5d48e9e5ef8838;hp=11955939d12ff8539f6508274eb4413610996755;hpb=70357ce52578dee0dd3b3663902cf872c3d34258;p=picodrive.git diff --git a/cpu/fame/fame.h b/cpu/fame/fame.h index 1195593..93172c8 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,24 +122,52 @@ 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; +typedef enum +{ + fm68k_reason_emulate = 0, + fm68k_reason_init, + fm68k_reason_idle_install, + fm68k_reason_idle_remove, +} fm68k_call_reason; + /************************/ /* Function definition */ /************************/ /* General purpose functions */ -void m68k_init(void); -int m68k_reset(void); -int m68k_emulate(int n); +void fm68k_init(void); +int fm68k_reset(M68K_CONTEXT *ctx); +int fm68k_emulate(M68K_CONTEXT *ctx, int n, fm68k_call_reason reason); +int fm68k_would_interrupt(M68K_CONTEXT *ctx); // 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 *ctx); +// PICODRIVE_HACK +int fm68k_idle_install(void); +int fm68k_idle_remove(void); #ifdef __cplusplus }