|
|
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
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.