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

1.1       root        1: #ifndef CPUMMU030_H
                      2: #define CPUMMU030_H
                      3: 
                      4: #include "mmu_common.h"
                      5: 
1.1.1.2 ! root        6: extern uae_u64 srp_030, crp_030;
        !             7: extern uae_u32 tt0_030, tt1_030, tc_030;
        !             8: extern uae_u16 mmusr_030;
        !             9: 
        !            10: #define MAX_MMU030_ACCESS 10
        !            11: extern uae_u32 mm030_stageb_address;
        !            12: extern int mmu030_idx;
        !            13: extern bool mmu030_retry;
        !            14: extern int mmu030_opcode, mmu030_opcode_stageb;
        !            15: extern int mmu030_fake_prefetch;
        !            16: extern uaecptr mmu030_fake_prefetch_addr;
        !            17: extern uae_u16 mmu030_state[3];
        !            18: extern uae_u32 mmu030_data_buffer;
        !            19: extern uae_u32 mmu030_disp_store[2];
        !            20: extern uae_u32 mmu030_fmovem_store[2];
        !            21: 
        !            22: #define MMU030_STATEFLAG1_FMOVEM 0x2000
        !            23: #define MMU030_STATEFLAG1_MOVEM1 0x4000
        !            24: #define MMU030_STATEFLAG1_MOVEM2 0x8000
        !            25: #define MMU030_STATEFLAG1_DISP0 0x0001
        !            26: #define MMU030_STATEFLAG1_DISP1 0x0002
        !            27: 
        !            28: struct mmu030_access
        !            29: {
        !            30:        bool done;
        !            31:        uae_u32 val;
        !            32: };
        !            33: extern struct mmu030_access mmu030_ad[MAX_MMU030_ACCESS];
        !            34: 
        !            35: uae_u32 REGPARAM3 get_disp_ea_020_mmu030 (uae_u32 base, int idx) REGPARAM;
        !            36: void mmu030_page_fault(uaecptr addr, bool read, int flags, uae_u32 fc);
        !            37: 
        !            38: bool mmu_op30_pmove (uaecptr pc, uae_u32 opcode, uae_u16 next, uaecptr extra);
        !            39: bool mmu_op30_ptest (uaecptr pc, uae_u32 opcode, uae_u16 next, uaecptr extra);
        !            40: bool mmu_op30_pload (uaecptr pc, uae_u32 opcode, uae_u16 next, uaecptr extra);
        !            41: bool mmu_op30_pflush (uaecptr pc, uae_u32 opcode, uae_u16 next, uaecptr extra);
1.1       root       42: 
                     43: uae_u32 mmu_op30_helper_get_fc(uae_u16 next);
                     44: 
                     45: void mmu030_ptest_atc_search(uaecptr logical_addr, uae_u32 fc, bool write);
                     46: uae_u32 mmu030_ptest_table_search(uaecptr extra, uae_u32 fc, bool write, int level);
                     47: uae_u32 mmu030_table_search(uaecptr addr, uae_u32 fc, bool write, int level);
                     48: 
                     49: 
                     50: typedef struct {
                     51:     uae_u32 addr_base;
                     52:     uae_u32 addr_mask;
                     53:     uae_u32 fc_base;
                     54:     uae_u32 fc_mask;
                     55: } TT_info;
                     56: 
                     57: TT_info mmu030_decode_tt(uae_u32 TT);
1.1.1.2 ! root       58: bool mmu030_decode_tc(uae_u32 TC);
        !            59: bool mmu030_decode_rp(uae_u64 RP);
1.1       root       60: 
                     61: int mmu030_logical_is_in_atc(uaecptr addr, uae_u32 fc, bool write);
                     62: void mmu030_atc_handle_history_bit(int entry_num);
                     63: 
1.1.1.2 ! root       64: void mmu030_put_long_atc(uaecptr addr, uae_u32 val, int l, uae_u32 fc);
        !            65: void mmu030_put_word_atc(uaecptr addr, uae_u16 val, int l, uae_u32 fc);
        !            66: void mmu030_put_byte_atc(uaecptr addr, uae_u8 val, int l, uae_u32 fc);
        !            67: uae_u32 mmu030_get_long_atc(uaecptr addr, int l, uae_u32 fc);
        !            68: uae_u16 mmu030_get_word_atc(uaecptr addr, int l, uae_u32 fc);
        !            69: uae_u8 mmu030_get_byte_atc(uaecptr addr, int l, uae_u32 fc);
        !            70: #ifdef WINUAE_FOR_HATARI
        !            71: uae_u32 mmu030_get_ilong_atc(uaecptr addr, int l, uae_u32 fc);
        !            72: uae_u16 mmu030_get_iword_atc(uaecptr addr, int l, uae_u32 fc);
        !            73: #endif
        !            74: 
        !            75: void mmu030_put_atc_generic(uaecptr addr, uae_u32 val, int l, uae_u32 fc, int size, int flags);
        !            76: uae_u32 mmu030_get_atc_generic(uaecptr addr, int l, uae_u32 fc, int size, int flags, bool checkwrite);
1.1       root       77: 
                     78: void mmu030_flush_atc_fc(uae_u32 fc_base, uae_u32 fc_mask);
                     79: void mmu030_flush_atc_page(uaecptr logical_addr);
                     80: void mmu030_flush_atc_page_fc(uaecptr logical_addr, uae_u32 fc_base, uae_u32 fc_mask);
                     81: void mmu030_flush_atc_all(void);
                     82: void mmu030_reset(int hardreset);
1.1.1.2 ! root       83: void mmu030_set_funcs(void);
        !            84: uaecptr mmu030_translate(uaecptr addr, bool super, bool data, bool write);
1.1       root       85: 
                     86: int mmu030_match_ttr(uaecptr addr, uae_u32 fc, bool write);
1.1.1.2 ! root       87: int mmu030_match_ttr_access(uaecptr addr, uae_u32 fc, bool write);
        !            88: int mmu030_match_lrmw_ttr_access(uaecptr addr, uae_u32 fc);
1.1       root       89: int mmu030_do_match_ttr(uae_u32 tt, TT_info masks, uaecptr addr, uae_u32 fc, bool write);
1.1.1.2 ! root       90: int mmu030_do_match_lrmw_ttr(uae_u32 tt, TT_info masks, uaecptr addr, uae_u32 fc);
1.1       root       91: 
1.1.1.2 ! root       92: void mmu030_put_long(uaecptr addr, uae_u32 val, uae_u32 fc);
        !            93: void mmu030_put_word(uaecptr addr, uae_u16 val, uae_u32 fc);
        !            94: void mmu030_put_byte(uaecptr addr, uae_u8  val, uae_u32 fc);
        !            95: uae_u32 mmu030_get_long(uaecptr addr, uae_u32 fc);
        !            96: uae_u16 mmu030_get_word(uaecptr addr, uae_u32 fc);
        !            97: uae_u8  mmu030_get_byte(uaecptr addr, uae_u32 fc);
        !            98: uae_u32 mmu030_get_ilong(uaecptr addr, uae_u32 fc);
        !            99: uae_u16 mmu030_get_iword(uaecptr addr, uae_u32 fc);
        !           100: 
        !           101: uae_u32 uae_mmu030_get_lrmw(uaecptr addr, int size);
        !           102: void uae_mmu030_put_lrmw(uaecptr addr, uae_u32 val, int size);
        !           103: 
        !           104: void mmu030_put_generic(uaecptr addr, uae_u32 val, uae_u32 fc, int size, int accesssize, int flags);
        !           105: uae_u32 mmu030_get_generic(uaecptr addr, uae_u32 fc, int size, int accesssize, int flags);
        !           106: 
        !           107: extern uae_u16 REGPARAM3 mmu030_get_word_unaligned(uaecptr addr, uae_u32 fc, int flags) REGPARAM;
        !           108: extern uae_u32 REGPARAM3 mmu030_get_long_unaligned(uaecptr addr, uae_u32 fc, int flags) REGPARAM;
        !           109: extern uae_u32 REGPARAM3 mmu030_get_ilong_unaligned(uaecptr addr, uae_u32 fc, int flags) REGPARAM;
        !           110: extern uae_u16 REGPARAM3 mmu030_get_lrmw_word_unaligned(uaecptr addr, uae_u32 fc, int flags) REGPARAM;
        !           111: extern uae_u32 REGPARAM3 mmu030_get_lrmw_long_unaligned(uaecptr addr, uae_u32 fc, int flags) REGPARAM;
        !           112: extern void REGPARAM3 mmu030_put_word_unaligned(uaecptr addr, uae_u16 val, uae_u32 fc, int flags) REGPARAM;
        !           113: extern void REGPARAM3 mmu030_put_long_unaligned(uaecptr addr, uae_u32 val, uae_u32 fc, int flags) REGPARAM;
1.1       root      114: 
                    115: static ALWAYS_INLINE uae_u32 uae_mmu030_get_ilong(uaecptr addr)
                    116: {
                    117:     uae_u32 fc = (regs.s ? 4 : 0) | 2;
                    118: 
                    119:        if (unlikely(is_unaligned(addr, 4)))
1.1.1.2 ! root      120:                return mmu030_get_ilong_unaligned(addr, fc, 0);
        !           121:        return mmu030_get_ilong(addr, fc);
1.1       root      122: }
                    123: static ALWAYS_INLINE uae_u16 uae_mmu030_get_iword(uaecptr addr)
                    124: {
                    125:     uae_u32 fc = (regs.s ? 4 : 0) | 2;
1.1.1.2 ! root      126:        return mmu030_get_iword(addr, fc);
1.1       root      127: }
                    128: static ALWAYS_INLINE uae_u16 uae_mmu030_get_ibyte(uaecptr addr)
                    129: {
                    130:     uae_u32 fc = (regs.s ? 4 : 0) | 2;
                    131: 
1.1.1.2 ! root      132:        return mmu030_get_byte(addr, fc);
1.1       root      133: }
                    134: static ALWAYS_INLINE uae_u32 uae_mmu030_get_long(uaecptr addr)
                    135: {
                    136:     uae_u32 fc = (regs.s ? 4 : 0) | 1;
                    137: 
                    138:        if (unlikely(is_unaligned(addr, 4)))
1.1.1.2 ! root      139:                return mmu030_get_long_unaligned(addr, fc, 0);
        !           140:        return mmu030_get_long(addr, fc);
1.1       root      141: }
                    142: static ALWAYS_INLINE uae_u16 uae_mmu030_get_word(uaecptr addr)
                    143: {
                    144:     uae_u32 fc = (regs.s ? 4 : 0) | 1;
                    145: 
                    146:        if (unlikely(is_unaligned(addr, 2)))
1.1.1.2 ! root      147:                return mmu030_get_word_unaligned(addr, fc, 0);
        !           148:        return mmu030_get_word(addr, fc);
1.1       root      149: }
                    150: static ALWAYS_INLINE uae_u8 uae_mmu030_get_byte(uaecptr addr)
                    151: {
                    152:     uae_u32 fc = (regs.s ? 4 : 0) | 1;
                    153: 
1.1.1.2 ! root      154:        return mmu030_get_byte(addr, fc);
1.1       root      155: }
                    156: static ALWAYS_INLINE void uae_mmu030_put_long(uaecptr addr, uae_u32 val)
                    157: {
                    158:     uae_u32 fc = (regs.s ? 4 : 0) | 1;
1.1.1.2 ! root      159:     
1.1       root      160:        if (unlikely(is_unaligned(addr, 4)))
1.1.1.2 ! root      161:                mmu030_put_long_unaligned(addr, val, fc, 0);
1.1       root      162:        else
1.1.1.2 ! root      163:                mmu030_put_long(addr, val, fc);
1.1       root      164: }
                    165: static ALWAYS_INLINE void uae_mmu030_put_word(uaecptr addr, uae_u16 val)
                    166: {
                    167:     uae_u32 fc = (regs.s ? 4 : 0) | 1;
                    168: 
                    169:        if (unlikely(is_unaligned(addr, 2)))
1.1.1.2 ! root      170:                mmu030_put_word_unaligned(addr, val, fc, 0);
1.1       root      171:        else
1.1.1.2 ! root      172:                mmu030_put_word(addr, val, fc);
1.1       root      173: }
                    174: static ALWAYS_INLINE void uae_mmu030_put_byte(uaecptr addr, uae_u8 val)
                    175: {
                    176:     uae_u32 fc = (regs.s ? 4 : 0) | 1;
                    177: 
1.1.1.2 ! root      178:        mmu030_put_byte(addr, val, fc);
1.1       root      179: }
                    180: 
                    181: static ALWAYS_INLINE uae_u32 sfc030_get_long(uaecptr addr)
                    182: {
1.1.1.2 ! root      183:     uae_u32 fc = regs.sfc;
        !           184: #if MMUDEBUG > 2
        !           185:        write_log(_T("sfc030_get_long: FC = %i\n"),fc);
        !           186: #endif
        !           187:        if (unlikely(is_unaligned(addr, 4)))
        !           188:                return mmu030_get_long_unaligned(addr, fc, 0);
        !           189:        return mmu030_get_long(addr, fc);
1.1       root      190: }
                    191: 
                    192: static ALWAYS_INLINE uae_u16 sfc030_get_word(uaecptr addr)
                    193: {
1.1.1.2 ! root      194:     uae_u32 fc = regs.sfc;
        !           195: #if MMUDEBUG > 2
        !           196:        write_log(_T("sfc030_get_word: FC = %i\n"),fc);
        !           197: #endif
1.1       root      198:     if (unlikely(is_unaligned(addr, 2)))
1.1.1.2 ! root      199:                return mmu030_get_word_unaligned(addr, fc, 0);
        !           200:        return mmu030_get_word(addr, fc);
1.1       root      201: }
                    202: 
                    203: static ALWAYS_INLINE uae_u8 sfc030_get_byte(uaecptr addr)
                    204: {
1.1.1.2 ! root      205:     uae_u32 fc = regs.sfc;
        !           206: #if MMUDEBUG > 2
        !           207:        write_log(_T("sfc030_get_byte: FC = %i\n"),fc);
        !           208: #endif
        !           209:        return mmu030_get_byte(addr, fc);
1.1       root      210: }
                    211: 
                    212: static ALWAYS_INLINE void dfc030_put_long(uaecptr addr, uae_u32 val)
                    213: {
1.1.1.2 ! root      214:     uae_u32 fc = regs.dfc;
        !           215: #if MMUDEBUG > 2
        !           216:        write_log(_T("dfc030_put_long: %08X = %08X FC = %i\n"), addr, val, fc);
        !           217: #endif
1.1       root      218:     if (unlikely(is_unaligned(addr, 4)))
1.1.1.2 ! root      219:                mmu030_put_long_unaligned(addr, val, fc, 0);
1.1       root      220:        else
1.1.1.2 ! root      221:                mmu030_put_long(addr, val, fc);
1.1       root      222: }
                    223: 
                    224: static ALWAYS_INLINE void dfc030_put_word(uaecptr addr, uae_u16 val)
                    225: {
1.1.1.2 ! root      226:     uae_u32 fc = regs.dfc;
        !           227: #if MMUDEBUG > 2
        !           228:        write_log(_T("dfc030_put_word: %08X = %04X FC = %i\n"), addr, val, fc);
        !           229: #endif
        !           230:        if (unlikely(is_unaligned(addr, 2)))
        !           231:                mmu030_put_word_unaligned(addr, val, fc, 0);
1.1       root      232:        else
1.1.1.2 ! root      233:                mmu030_put_word(addr, val, fc);
1.1       root      234: }
                    235: 
                    236: static ALWAYS_INLINE void dfc030_put_byte(uaecptr addr, uae_u8 val)
                    237: {
1.1.1.2 ! root      238:     uae_u32 fc = regs.dfc;
        !           239: #if MMUDEBUG > 2
        !           240:        write_log(_T("dfc030_put_byte: %08X = %02X FC = %i\n"), addr, val, fc);
        !           241: #endif
        !           242:        mmu030_put_byte(addr, val, fc);
1.1       root      243: }
                    244: 
1.1.1.2 ! root      245: #define ACCESS_CHECK_PUT \
        !           246:        if (!mmu030_ad[mmu030_idx].done) { \
        !           247:                mmu030_ad[mmu030_idx].val = v; \
        !           248:        } else if (mmu030_ad[mmu030_idx].done) { \
        !           249:                mmu030_idx++; \
        !           250:                return; \
        !           251:        }
        !           252: 
        !           253: #define ACCESS_CHECK_GET \
        !           254:        if (mmu030_ad[mmu030_idx].done) { \
        !           255:                v = mmu030_ad[mmu030_idx].val; \
        !           256:                mmu030_idx++; \
        !           257:                return v; \
        !           258:        }
        !           259: 
        !           260: #define ACCESS_CHECK_GET_PC(pc) \
        !           261:        if (mmu030_ad[mmu030_idx].done) { \
        !           262:                v = mmu030_ad[mmu030_idx].val; \
        !           263:                mmu030_idx++; \
        !           264:                m68k_incpci (pc); \
        !           265:                return v; \
        !           266:        }
        !           267: 
        !           268: #define ACCESS_EXIT_PUT \
        !           269:        mmu030_ad[mmu030_idx].done = true; \
        !           270:        mmu030_idx++; \
        !           271:        mmu030_ad[mmu030_idx].done = false;
        !           272: 
        !           273: #define ACCESS_EXIT_GET \
        !           274:        mmu030_ad[mmu030_idx].val = v; \
        !           275:        mmu030_ad[mmu030_idx].done = true; \
        !           276:        mmu030_idx++; \
        !           277:        mmu030_ad[mmu030_idx].done = false;
        !           278: 
        !           279: STATIC_INLINE void put_byte_mmu030_state (uaecptr addr, uae_u32 v)
1.1       root      280: {
1.1.1.2 ! root      281:        ACCESS_CHECK_PUT
1.1       root      282:     uae_mmu030_put_byte (addr, v);
1.1.1.2 ! root      283:        ACCESS_EXIT_PUT
1.1       root      284: }
1.1.1.2 ! root      285: STATIC_INLINE void put_lrmw_byte_mmu030_state (uaecptr addr, uae_u32 v)
        !           286: {
        !           287:        ACCESS_CHECK_PUT
        !           288:     uae_mmu030_put_lrmw (addr, v, sz_byte);
        !           289:        ACCESS_EXIT_PUT
        !           290: }
        !           291: STATIC_INLINE void put_word_mmu030_state (uaecptr addr, uae_u32 v)
1.1       root      292: {
1.1.1.2 ! root      293:        ACCESS_CHECK_PUT
1.1       root      294:     uae_mmu030_put_word (addr, v);
1.1.1.2 ! root      295:        ACCESS_EXIT_PUT
1.1       root      296: }
1.1.1.2 ! root      297: STATIC_INLINE void put_lrmw_word_mmu030_state (uaecptr addr, uae_u32 v)
1.1       root      298: {
1.1.1.2 ! root      299:        ACCESS_CHECK_PUT
        !           300:     uae_mmu030_put_lrmw (addr, v, sz_word);
        !           301:        ACCESS_EXIT_PUT
        !           302: }
        !           303: STATIC_INLINE void put_long_mmu030_state (uaecptr addr, uae_u32 v)
        !           304: {
        !           305:        ACCESS_CHECK_PUT
1.1       root      306:     uae_mmu030_put_long (addr, v);
1.1.1.2 ! root      307:        ACCESS_EXIT_PUT
        !           308: }
        !           309: STATIC_INLINE void put_lrmw_long_mmu030_state (uaecptr addr, uae_u32 v)
        !           310: {
        !           311:        ACCESS_CHECK_PUT
        !           312:     uae_mmu030_put_lrmw (addr, v, sz_long);
        !           313:        ACCESS_EXIT_PUT
        !           314: }
        !           315: 
        !           316: STATIC_INLINE uae_u32 get_byte_mmu030_state (uaecptr addr)
        !           317: {
        !           318:        uae_u32 v;
        !           319:        ACCESS_CHECK_GET
        !           320:     v = uae_mmu030_get_byte (addr);
        !           321:        ACCESS_EXIT_GET
        !           322:        return v;
        !           323: }
        !           324: STATIC_INLINE uae_u32 get_lrmw_byte_mmu030_state (uaecptr addr)
        !           325: {
        !           326:        uae_u32 v;
        !           327:        ACCESS_CHECK_GET
        !           328:     v = uae_mmu030_get_lrmw (addr, sz_byte);
        !           329:        ACCESS_EXIT_GET
        !           330:        return v;
        !           331: }
        !           332: 
        !           333: STATIC_INLINE uae_u32 get_word_mmu030_state (uaecptr addr)
        !           334: {
        !           335:        uae_u32 v;
        !           336:        ACCESS_CHECK_GET
        !           337:        v = uae_mmu030_get_word (addr);
        !           338:        ACCESS_EXIT_GET
        !           339:        return v;
        !           340: }
        !           341: STATIC_INLINE uae_u32 get_lrmw_word_mmu030_state (uaecptr addr)
        !           342: {
        !           343:        uae_u32 v;
        !           344:        ACCESS_CHECK_GET
        !           345:     v = uae_mmu030_get_lrmw (addr, sz_word);
        !           346:        ACCESS_EXIT_GET
        !           347:        return v;
        !           348: }
        !           349: STATIC_INLINE uae_u32 get_long_mmu030_state (uaecptr addr)
        !           350: {
        !           351:        uae_u32 v;
        !           352:        ACCESS_CHECK_GET
        !           353:        v = uae_mmu030_get_long (addr);
        !           354:        ACCESS_EXIT_GET
        !           355:        return v;
        !           356: }
        !           357: STATIC_INLINE uae_u32 get_lrmw_long_mmu030_state (uaecptr addr)
        !           358: {
        !           359:        uae_u32 v;
        !           360:        ACCESS_CHECK_GET
        !           361:     v = uae_mmu030_get_lrmw (addr, sz_long);
        !           362:        ACCESS_EXIT_GET
        !           363:        return v;
        !           364: }
        !           365: 
        !           366: STATIC_INLINE uae_u32 get_ibyte_mmu030_state (int o)
        !           367: {
        !           368:        uae_u32 v;
        !           369:     uae_u32 addr = m68k_getpci () + o;
        !           370:        ACCESS_CHECK_GET
        !           371:     v = uae_mmu030_get_iword (addr);
        !           372:        ACCESS_EXIT_GET
        !           373:        return v;
        !           374: }
        !           375: STATIC_INLINE uae_u32 get_iword_mmu030_state (int o)
        !           376: {
        !           377:        uae_u32 v;
        !           378:     uae_u32 addr = m68k_getpci () + o;
        !           379:        ACCESS_CHECK_GET
        !           380:     v = uae_mmu030_get_iword (addr);
        !           381:        ACCESS_EXIT_GET
        !           382:        return v;
        !           383: }
        !           384: STATIC_INLINE uae_u32 get_ilong_mmu030_state (int o)
        !           385: {
        !           386:        uae_u32 v;
        !           387:     uae_u32 addr = m68k_getpci () + o;
        !           388:        ACCESS_CHECK_GET
        !           389:     v = uae_mmu030_get_ilong (addr);
        !           390:        ACCESS_EXIT_GET
        !           391:        return v;
        !           392: }
        !           393: STATIC_INLINE uae_u32 next_iword_mmu030_state (void)
        !           394: {
        !           395:        uae_u32 v;
        !           396:     uae_u32 addr = m68k_getpci ();
        !           397:        ACCESS_CHECK_GET_PC(2);
        !           398:     v = uae_mmu030_get_iword (addr);
        !           399:     m68k_incpci (2);
        !           400:        ACCESS_EXIT_GET
        !           401:        return v;
        !           402: }
        !           403: STATIC_INLINE uae_u32 next_ilong_mmu030_state (void)
        !           404: {
        !           405:        uae_u32 v;
        !           406:     uae_u32 addr = m68k_getpci ();
        !           407:        ACCESS_CHECK_GET_PC(4);
        !           408:     v = uae_mmu030_get_ilong (addr);
        !           409:     m68k_incpci (4);
        !           410:        ACCESS_EXIT_GET
        !           411:        return v;
1.1       root      412: }
1.1.1.2 ! root      413: 
1.1       root      414: STATIC_INLINE uae_u32 get_byte_mmu030 (uaecptr addr)
                    415: {
1.1.1.2 ! root      416:        return uae_mmu030_get_byte (addr);
1.1       root      417: }
                    418: STATIC_INLINE uae_u32 get_word_mmu030 (uaecptr addr)
                    419: {
1.1.1.2 ! root      420:        return uae_mmu030_get_word (addr);
1.1       root      421: }
                    422: STATIC_INLINE uae_u32 get_long_mmu030 (uaecptr addr)
                    423: {
1.1.1.2 ! root      424:        return uae_mmu030_get_long (addr);
        !           425: }
        !           426: STATIC_INLINE void put_byte_mmu030 (uaecptr addr, uae_u32 v)
        !           427: {
        !           428:     uae_mmu030_put_byte (addr, v);
1.1       root      429: }
1.1.1.2 ! root      430: 
        !           431: STATIC_INLINE void put_word_mmu030 (uaecptr addr, uae_u32 v)
        !           432: {
        !           433:     uae_mmu030_put_word (addr, v);
        !           434: }
        !           435: STATIC_INLINE void put_long_mmu030 (uaecptr addr, uae_u32 v)
        !           436: {
        !           437:     uae_mmu030_put_long (addr, v);
        !           438: }
        !           439: 
1.1       root      440: STATIC_INLINE uae_u32 get_ibyte_mmu030 (int o)
                    441: {
1.1.1.2 ! root      442:     uae_u32 pc = m68k_getpci () + o;
1.1       root      443:     return uae_mmu030_get_iword (pc);
                    444: }
                    445: STATIC_INLINE uae_u32 get_iword_mmu030 (int o)
                    446: {
1.1.1.2 ! root      447:     uae_u32 pc = m68k_getpci () + o;
1.1       root      448:     return uae_mmu030_get_iword (pc);
                    449: }
                    450: STATIC_INLINE uae_u32 get_ilong_mmu030 (int o)
                    451: {
1.1.1.2 ! root      452:     uae_u32 pc = m68k_getpci () + o;
1.1       root      453:     return uae_mmu030_get_ilong (pc);
                    454: }
                    455: STATIC_INLINE uae_u32 next_iword_mmu030 (void)
                    456: {
1.1.1.2 ! root      457:        uae_u32 v;
        !           458:     uae_u32 pc = m68k_getpci ();
        !           459:     v = uae_mmu030_get_iword (pc);
1.1       root      460:     m68k_incpci (2);
1.1.1.2 ! root      461:        return v;
1.1       root      462: }
                    463: STATIC_INLINE uae_u32 next_ilong_mmu030 (void)
                    464: {
1.1.1.2 ! root      465:        uae_u32 v;
        !           466:     uae_u32 pc = m68k_getpci ();
        !           467:     v = uae_mmu030_get_ilong (pc);
1.1       root      468:     m68k_incpci (4);
1.1.1.2 ! root      469:        return v;
1.1       root      470: }
                    471: 
                    472: extern void m68k_do_rts_mmu030 (void);
                    473: extern void m68k_do_rte_mmu030 (uaecptr a7);
                    474: extern void flush_mmu030 (uaecptr, int);
                    475: extern void m68k_do_bsr_mmu030 (uaecptr oldpc, uae_s32 offset);
                    476: 
                    477: #endif

unix.superglobalmegacorp.com

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