Annotation of hatari/src/cpu/cpummu030.h, revision 1.1.1.1

1.1       root        1: 
                      2: #ifndef CPUMMU030_H
                      3: #define CPUMMU030_H
                      4: 
                      5: #include "mmu_common.h"
                      6: 
                      7: void mmu_op30_pmove (uaecptr pc, uae_u32 opcode, uae_u16 next, uaecptr extra);
                      8: void mmu_op30_ptest (uaecptr pc, uae_u32 opcode, uae_u16 next, uaecptr extra);
                      9: void mmu_op30_pload (uaecptr pc, uae_u32 opcode, uae_u16 next, uaecptr extra);
                     10: void mmu_op30_pflush (uaecptr pc, uae_u32 opcode, uae_u16 next, uaecptr extra);
                     11: 
                     12: uae_u32 mmu_op30_helper_get_fc(uae_u16 next);
                     13: 
                     14: void mmu030_ptest_atc_search(uaecptr logical_addr, uae_u32 fc, bool write);
                     15: uae_u32 mmu030_ptest_table_search(uaecptr extra, uae_u32 fc, bool write, int level);
                     16: uae_u32 mmu030_table_search(uaecptr addr, uae_u32 fc, bool write, int level);
                     17: 
                     18: 
                     19: typedef struct {
                     20:     uae_u32 addr_base;
                     21:     uae_u32 addr_mask;
                     22:     uae_u32 fc_base;
                     23:     uae_u32 fc_mask;
                     24: } TT_info;
                     25: 
                     26: TT_info mmu030_decode_tt(uae_u32 TT);
                     27: void mmu030_decode_tc(uae_u32 TC);
                     28: void mmu030_decode_rp(uae_u64 RP);
                     29: 
                     30: int mmu030_logical_is_in_atc(uaecptr addr, uae_u32 fc, bool write);
                     31: void mmu030_atc_handle_history_bit(int entry_num);
                     32: 
                     33: void mmu030_put_long_atc(uaecptr addr, uae_u32 val, int l);
                     34: void mmu030_put_word_atc(uaecptr addr, uae_u16 val, int l);
                     35: void mmu030_put_byte_atc(uaecptr addr, uae_u8 val, int l);
                     36: uae_u32 mmu030_get_long_atc(uaecptr addr, int l);
                     37: uae_u16 mmu030_get_word_atc(uaecptr addr, int l);
                     38: uae_u8 mmu030_get_byte_atc(uaecptr addr, int l);
                     39: 
                     40: void mmu030_flush_atc_fc(uae_u32 fc_base, uae_u32 fc_mask);
                     41: void mmu030_flush_atc_page(uaecptr logical_addr);
                     42: void mmu030_flush_atc_page_fc(uaecptr logical_addr, uae_u32 fc_base, uae_u32 fc_mask);
                     43: void mmu030_flush_atc_all(void);
                     44: void mmu030_reset(int hardreset);
                     45: 
                     46: int mmu030_match_ttr(uaecptr addr, uae_u32 fc, bool write);
                     47: int mmu030_do_match_ttr(uae_u32 tt, TT_info masks, uaecptr addr, uae_u32 fc, bool write);
                     48: 
                     49: void mmu030_put_long(uaecptr addr, uae_u32 val, uae_u32 fc, int size);
                     50: void mmu030_put_word(uaecptr addr, uae_u16 val, uae_u32 fc, int size);
                     51: void mmu030_put_byte(uaecptr addr, uae_u8  val, uae_u32 fc, int size);
                     52: uae_u32 mmu030_get_long(uaecptr addr, uae_u32 fc, int size);
                     53: uae_u16 mmu030_get_word(uaecptr addr, uae_u32 fc, int size);
                     54: uae_u8  mmu030_get_byte(uaecptr addr, uae_u32 fc, int size);
                     55: 
                     56: void mmu030_page_fault(uaecptr addr, bool read);
                     57: 
                     58: extern uae_u16 REGPARAM3 mmu030_get_word_unaligned(uaecptr addr, uae_u32 fc) REGPARAM;
                     59: extern uae_u32 REGPARAM3 mmu030_get_long_unaligned(uaecptr addr, uae_u32 fc) REGPARAM;
                     60: extern void REGPARAM3 mmu030_put_word_unaligned(uaecptr addr, uae_u16 val, uae_u32 fc) REGPARAM;
                     61: extern void REGPARAM3 mmu030_put_long_unaligned(uaecptr addr, uae_u32 val, uae_u32 fc) REGPARAM;
                     62: 
                     63: static ALWAYS_INLINE uae_u32 uae_mmu030_get_ilong(uaecptr addr)
                     64: {
                     65:     uae_u32 fc = (regs.s ? 4 : 0) | 2;
                     66: 
                     67:        if (unlikely(is_unaligned(addr, 4)))
                     68:                return mmu030_get_long_unaligned(addr, fc);
                     69:        return mmu030_get_long(addr, fc, sz_long);
                     70: }
                     71: static ALWAYS_INLINE uae_u16 uae_mmu030_get_iword(uaecptr addr)
                     72: {
                     73:     uae_u32 fc = (regs.s ? 4 : 0) | 2;
                     74: 
                     75:        if (unlikely(is_unaligned(addr, 2)))
                     76:                return mmu030_get_word_unaligned(addr, fc);
                     77:        return mmu030_get_word(addr, fc, sz_word);
                     78: }
                     79: static ALWAYS_INLINE uae_u16 uae_mmu030_get_ibyte(uaecptr addr)
                     80: {
                     81:     uae_u32 fc = (regs.s ? 4 : 0) | 2;
                     82: 
                     83:        return mmu030_get_byte(addr, fc, sz_byte);
                     84: }
                     85: static ALWAYS_INLINE uae_u32 uae_mmu030_get_long(uaecptr addr)
                     86: {
                     87:     uae_u32 fc = (regs.s ? 4 : 0) | 1;
                     88: 
                     89:        if (unlikely(is_unaligned(addr, 4)))
                     90:                return mmu030_get_long_unaligned(addr, fc);
                     91:        return mmu030_get_long(addr, fc, sz_long);
                     92: }
                     93: static ALWAYS_INLINE uae_u16 uae_mmu030_get_word(uaecptr addr)
                     94: {
                     95:     uae_u32 fc = (regs.s ? 4 : 0) | 1;
                     96: 
                     97:        if (unlikely(is_unaligned(addr, 2)))
                     98:                return mmu030_get_word_unaligned(addr, fc);
                     99:        return mmu030_get_word(addr, fc, sz_word);
                    100: }
                    101: static ALWAYS_INLINE uae_u8 uae_mmu030_get_byte(uaecptr addr)
                    102: {
                    103:     uae_u32 fc = (regs.s ? 4 : 0) | 1;
                    104: 
                    105:        return mmu030_get_byte(addr, fc, sz_byte);
                    106: }
                    107: static ALWAYS_INLINE void uae_mmu030_put_long(uaecptr addr, uae_u32 val)
                    108: {
                    109:     uae_u32 fc = (regs.s ? 4 : 0) | 1;
                    110: 
                    111:        if (unlikely(is_unaligned(addr, 4)))
                    112:                mmu030_put_long_unaligned(addr, val, fc);
                    113:        else
                    114:                mmu030_put_long(addr, val, fc, sz_long);
                    115: }
                    116: static ALWAYS_INLINE void uae_mmu030_put_word(uaecptr addr, uae_u16 val)
                    117: {
                    118:     uae_u32 fc = (regs.s ? 4 : 0) | 1;
                    119: 
                    120:        if (unlikely(is_unaligned(addr, 2)))
                    121:                mmu030_put_word_unaligned(addr, val, fc);
                    122:        else
                    123:                mmu030_put_word(addr, val, fc, sz_word);
                    124: }
                    125: static ALWAYS_INLINE void uae_mmu030_put_byte(uaecptr addr, uae_u8 val)
                    126: {
                    127:     uae_u32 fc = (regs.s ? 4 : 0) | 1;
                    128: 
                    129:        mmu030_put_byte(addr, val, fc, sz_byte);
                    130: }
                    131: 
                    132: static ALWAYS_INLINE uae_u32 sfc030_get_long(uaecptr addr)
                    133: {
                    134:     uae_u32 fc = regs.sfc&7;
                    135:        printf("sfc030_get_long: FC = %i\n",fc);
                    136:     if (unlikely(is_unaligned(addr, 4)))
                    137:                return mmu030_get_long_unaligned(addr, fc);
                    138:        return mmu030_get_long(addr, fc, sz_long);
                    139: }
                    140: 
                    141: static ALWAYS_INLINE uae_u16 sfc030_get_word(uaecptr addr)
                    142: {
                    143:     uae_u32 fc = regs.sfc&7;
                    144:        printf("sfc030_get_word: FC = %i\n",fc);
                    145:     if (unlikely(is_unaligned(addr, 2)))
                    146:                return mmu030_get_word_unaligned(addr, fc);
                    147:        return mmu030_get_word(addr, fc, sz_word);
                    148: }
                    149: 
                    150: static ALWAYS_INLINE uae_u8 sfc030_get_byte(uaecptr addr)
                    151: {
                    152:     uae_u32 fc = regs.sfc&7;
                    153:        printf("sfc030_get_byte: FC = %i\n",fc);
                    154:        return mmu030_get_byte(addr, fc, sz_byte);
                    155: }
                    156: 
                    157: static ALWAYS_INLINE void dfc030_put_long(uaecptr addr, uae_u32 val)
                    158: {
                    159:     uae_u32 fc = regs.dfc&7;
                    160:        printf("dfc030_put_long: FC = %i\n",fc);
                    161:     if (unlikely(is_unaligned(addr, 4)))
                    162:                mmu030_put_long_unaligned(addr, val, fc);
                    163:        else
                    164:                mmu030_put_long(addr, val, fc, sz_long);
                    165: }
                    166: 
                    167: static ALWAYS_INLINE void dfc030_put_word(uaecptr addr, uae_u16 val)
                    168: {
                    169:     uae_u32 fc = regs.dfc&7;
                    170:        printf("dfc030_put_word: FC = %i\n",fc);
                    171:     if (unlikely(is_unaligned(addr, 2)))
                    172:                mmu030_put_word_unaligned(addr, val, fc);
                    173:        else
                    174:                mmu030_put_word(addr, val, fc, sz_word);
                    175: }
                    176: 
                    177: static ALWAYS_INLINE void dfc030_put_byte(uaecptr addr, uae_u8 val)
                    178: {
                    179:     uae_u32 fc = regs.dfc&7;
                    180:        printf("dfc030_put_byte: FC = %i\n",fc);
                    181:     mmu030_put_byte(addr, val, fc, sz_byte);
                    182: }
                    183: 
                    184: STATIC_INLINE void put_byte_mmu030 (uaecptr addr, uae_u32 v)
                    185: {
                    186:     uae_mmu030_put_byte (addr, v);
                    187: }
                    188: STATIC_INLINE void put_word_mmu030 (uaecptr addr, uae_u32 v)
                    189: {
                    190:     uae_mmu030_put_word (addr, v);
                    191: }
                    192: STATIC_INLINE void put_long_mmu030 (uaecptr addr, uae_u32 v)
                    193: {
                    194:     uae_mmu030_put_long (addr, v);
                    195: }
                    196: STATIC_INLINE uae_u32 get_byte_mmu030 (uaecptr addr)
                    197: {
                    198:     return uae_mmu030_get_byte (addr);
                    199: }
                    200: STATIC_INLINE uae_u32 get_word_mmu030 (uaecptr addr)
                    201: {
                    202:     return uae_mmu030_get_word (addr);
                    203: }
                    204: STATIC_INLINE uae_u32 get_long_mmu030 (uaecptr addr)
                    205: {
                    206:     return uae_mmu030_get_long (addr);
                    207: }
                    208: STATIC_INLINE uae_u32 get_ibyte_mmu030 (int o)
                    209: {
                    210:     uae_u32 pc = m68k_getpc () + o;
                    211:     return uae_mmu030_get_iword (pc);
                    212: }
                    213: STATIC_INLINE uae_u32 get_iword_mmu030 (int o)
                    214: {
                    215:     uae_u32 pc = m68k_getpc () + o;
                    216:     return uae_mmu030_get_iword (pc);
                    217: }
                    218: STATIC_INLINE uae_u32 get_ilong_mmu030 (int o)
                    219: {
                    220:     uae_u32 pc = m68k_getpc () + o;
                    221:     return uae_mmu030_get_ilong (pc);
                    222: }
                    223: STATIC_INLINE uae_u32 next_iword_mmu030 (void)
                    224: {
                    225:     uae_u32 pc = m68k_getpc ();
                    226:     m68k_incpci (2);
                    227:     return uae_mmu030_get_iword (pc);
                    228: }
                    229: STATIC_INLINE uae_u32 next_ilong_mmu030 (void)
                    230: {
                    231:     uae_u32 pc = m68k_getpc ();
                    232:     m68k_incpci (4);
                    233:     return uae_mmu030_get_ilong (pc);
                    234: }
                    235: 
                    236: extern void m68k_do_rts_mmu030 (void);
                    237: extern void m68k_do_rte_mmu030 (uaecptr a7);
                    238: extern void flush_mmu030 (uaecptr, int);
                    239: extern void m68k_do_bsr_mmu030 (uaecptr oldpc, uae_s32 offset);
                    240: 
                    241: #endif

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.