Search
lxdream.org :: lxdream/src/sh4/sh4.h
lxdream 0.9.1
released Jun 29
Download Now
filename src/sh4/sh4.h
changeset 904:5b92e51ac06b
prev903:1337c7a7dd6b
next929:fd8cb0c82f5f
next953:f4a156508ad1
author nkeynes
date Thu Dec 11 23:26:03 2008 +0000 (15 years ago)
permissions -rw-r--r--
last change Disable the generational translation cache - I've got no evidence that it
actually helps performance, and it simplifies things to get rid of it (in
particular, translated code doesn't have to worry about being moved now).
view annotate diff log raw
     1 /**
     2  * $Id: sh4.h 577 2008-01-01 05:08:38Z nkeynes $
     3  * 
     4  * This file defines the public functions and definitions exported by the SH4
     5  * modules.
     6  *
     7  * Copyright (c) 2005 Nathan Keynes.
     8  *
     9  * This program is free software; you can redistribute it and/or modify
    10  * it under the terms of the GNU General Public License as published by
    11  * the Free Software Foundation; either version 2 of the License, or
    12  * (at your option) any later version.
    13  *
    14  * This program is distributed in the hope that it will be useful,
    15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
    16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    17  * GNU General Public License for more details.
    18  */
    20 #ifndef lxdream_sh4_H
    21 #define lxdream_sh4_H 1
    23 #include "lxdream.h"
    24 #include "mem.h"
    26 #ifdef __cplusplus
    27 extern "C" {
    28 #endif
    31 /**
    32  * SH4 is running normally 
    33  */
    34 #define SH4_STATE_RUNNING 1
    35 /**
    36  * SH4 is not executing instructions but all peripheral modules are still
    37  * running
    38  */
    39 #define SH4_STATE_SLEEP 2
    40 /**
    41  * SH4 is not executing instructions, DMAC is halted, but all other peripheral
    42  * modules are still running
    43  */
    44 #define SH4_STATE_DEEP_SLEEP 3
    45 /**
    46  * SH4 is not executing instructions and all peripheral modules are also
    47  * stopped. As close as you can get to powered-off without actually being
    48  * off.
    49  */
    50 #define SH4_STATE_STANDBY 4
    52 /**
    53  * sh4r.event_types flag indicating a pending IRQ
    54  */
    55 #define PENDING_IRQ 1
    57 /**
    58  * sh4r.event_types flag indicating a pending event (from the event queue)
    59  */
    60 #define PENDING_EVENT 2
    62 /**
    63  * SH4 register structure
    64  */
    65 struct sh4_registers {
    66     uint32_t r[16];
    67     uint32_t sr, pr, pc;
    68     union {
    69         int32_t i;
    70         float f;
    71     } fpul;
    72     uint32_t t, m, q, s; /* really boolean - 0 or 1 */
    73     float fr[2][16]; /* Must be aligned on 16-byte boundary */
    74     uint32_t fpscr;
    75     uint32_t pad; /* Pad up to 64-bit boundaries */
    76     uint64_t mac;
    77     uint32_t gbr, ssr, spc, sgr, dbr, vbr;
    79     uint32_t r_bank[8]; /* hidden banked registers */
    80     int32_t store_queue[16]; /* technically 2 banks of 32 bytes */
    82     uint32_t new_pc; /* Not a real register, but used to handle delay slots */
    83     uint32_t event_pending; /* slice cycle time of the next pending event, or FFFFFFFF
    84                              when no events are pending */
    85     uint32_t event_types; /* bit 0 = IRQ pending, bit 1 = general event pending */
    86     int in_delay_slot; /* flag to indicate the current instruction is in
    87      * a delay slot (certain rules apply) */
    88     uint32_t slice_cycle; /* Current nanosecond within the timeslice */
    89     int sh4_state; /* Current power-on state (one of the SH4_STATE_* values ) */
    90 };
    92 extern struct sh4_registers sh4r;
    94 /**
    95  * Switch between translation and emulation execution modes. Note that this
    96  * should only be used while the system is stopped. If the system was built
    97  * without translation support, this method has no effect.
    98  *
    99  * @param use TRUE for translation mode, FALSE for emulation mode.
   100  */
   101 void sh4_translate_set_enabled( gboolean use );
   103 /**
   104  * Test if system is currently using the translation engine.
   105  */
   106 gboolean sh4_translate_is_enabled();
   108 /**
   109  * Explicitly set the SH4 PC to the supplied value - this will be the next
   110  * instruction executed. This should only be called while the system is stopped.
   111  */
   112 void sh4_set_pc( int pc );
   114 /**
   115  * Execute (using the emulator) a single instruction (in other words, perform a
   116  * single-step operation). 
   117  */
   118 gboolean sh4_execute_instruction( void );
   120 /* SH4 breakpoints */
   121 void sh4_set_breakpoint( uint32_t pc, breakpoint_type_t type );
   122 gboolean sh4_clear_breakpoint( uint32_t pc, breakpoint_type_t type );
   123 int sh4_get_breakpoint( uint32_t pc );
   125 #ifdef __cplusplus
   126 }
   127 #endif
   128 #endif /* !lxdream_sh4_H */
.