Annotation of previous/src/cpu/cpummu030.h, revision 1.1

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

unix.superglobalmegacorp.com

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