|
|
1.1 ! root 1: /* ! 2: * m68k virtual CPU header ! 3: * ! 4: * Copyright (c) 2005-2006 CodeSourcery ! 5: * Written by Paul Brook ! 6: * ! 7: * This library is free software; you can redistribute it and/or ! 8: * modify it under the terms of the GNU Lesser General Public ! 9: * License as published by the Free Software Foundation; either ! 10: * version 2 of the License, or (at your option) any later version. ! 11: * ! 12: * This library is distributed in the hope that it will be useful, ! 13: * but WITHOUT ANY WARRANTY; without even the implied warranty of ! 14: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ! 15: * General Public License for more details. ! 16: * ! 17: * You should have received a copy of the GNU Lesser General Public ! 18: * License along with this library; if not, write to the Free Software ! 19: * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ! 20: */ ! 21: #ifndef CPU_M68K_H ! 22: #define CPU_M68K_H ! 23: ! 24: #define TARGET_LONG_BITS 32 ! 25: ! 26: #include "cpu-defs.h" ! 27: ! 28: #include "softfloat.h" ! 29: ! 30: #define MAX_QREGS 32 ! 31: ! 32: #define TARGET_HAS_ICE 1 ! 33: ! 34: #define ELF_MACHINE EM_68K ! 35: ! 36: #define EXCP_ACCESS 2 /* Access (MMU) error. */ ! 37: #define EXCP_ADDRESS 3 /* Address error. */ ! 38: #define EXCP_ILLEGAL 4 /* Illegal instruction. */ ! 39: #define EXCP_DIV0 5 /* Divide by zero */ ! 40: #define EXCP_PRIVILEGE 8 /* Privilege violation. */ ! 41: #define EXCP_TRACE 9 ! 42: #define EXCP_LINEA 10 /* Unimplemented line-A (MAC) opcode. */ ! 43: #define EXCP_LINEF 11 /* Unimplemented line-F (FPU) opcode. */ ! 44: #define EXCP_DEBUGNBP 12 /* Non-breakpoint debug interrupt. */ ! 45: #define EXCP_DEBEGBP 13 /* Breakpoint debug interrupt. */ ! 46: #define EXCP_FORMAT 14 /* RTE format error. */ ! 47: #define EXCP_UNINITIALIZED 15 ! 48: #define EXCP_TRAP0 32 /* User trap #0. */ ! 49: #define EXCP_TRAP15 47 /* User trap #15. */ ! 50: #define EXCP_UNSUPPORTED 61 ! 51: #define EXCP_ICE 13 ! 52: ! 53: typedef struct CPUM68KState { ! 54: uint32_t dregs[8]; ! 55: uint32_t aregs[8]; ! 56: uint32_t pc; ! 57: uint32_t sr; ! 58: ! 59: /* Condition flags. */ ! 60: uint32_t cc_op; ! 61: uint32_t cc_dest; ! 62: uint32_t cc_src; ! 63: uint32_t cc_x; ! 64: ! 65: float64 fregs[8]; ! 66: float64 fp_result; ! 67: uint32_t fpcr; ! 68: uint32_t fpsr; ! 69: float_status fp_status; ! 70: ! 71: /* Temporary storage for DIV helpers. */ ! 72: uint32_t div1; ! 73: uint32_t div2; ! 74: ! 75: /* MMU status. */ ! 76: struct { ! 77: uint32_t ar; ! 78: } mmu; ! 79: /* ??? remove this. */ ! 80: uint32_t t1; ! 81: ! 82: /* exception/interrupt handling */ ! 83: jmp_buf jmp_env; ! 84: int exception_index; ! 85: int interrupt_request; ! 86: int user_mode_only; ! 87: uint32_t address; ! 88: ! 89: uint32_t qregs[MAX_QREGS]; ! 90: ! 91: CPU_COMMON ! 92: } CPUM68KState; ! 93: ! 94: CPUM68KState *cpu_m68k_init(void); ! 95: int cpu_m68k_exec(CPUM68KState *s); ! 96: void cpu_m68k_close(CPUM68KState *s); ! 97: /* you can call this signal handler from your SIGBUS and SIGSEGV ! 98: signal handlers to inform the virtual CPU of exceptions. non zero ! 99: is returned if the signal was handled by the virtual CPU. */ ! 100: int cpu_m68k_signal_handler(int host_signum, void *pinfo, ! 101: void *puc); ! 102: void cpu_m68k_flush_flags(CPUM68KState *, int); ! 103: ! 104: enum { ! 105: CC_OP_DYNAMIC, /* Use env->cc_op */ ! 106: CC_OP_FLAGS, /* CC_DEST = CVZN, CC_SRC = unused */ ! 107: CC_OP_LOGIC, /* CC_DEST = result, CC_SRC = unused */ ! 108: CC_OP_ADD, /* CC_DEST = result, CC_SRC = source */ ! 109: CC_OP_SUB, /* CC_DEST = result, CC_SRC = source */ ! 110: CC_OP_CMPB, /* CC_DEST = result, CC_SRC = source */ ! 111: CC_OP_CMPW, /* CC_DEST = result, CC_SRC = source */ ! 112: CC_OP_ADDX, /* CC_DEST = result, CC_SRC = source */ ! 113: CC_OP_SUBX, /* CC_DEST = result, CC_SRC = source */ ! 114: CC_OP_SHL, /* CC_DEST = source, CC_SRC = shift */ ! 115: CC_OP_SHR, /* CC_DEST = source, CC_SRC = shift */ ! 116: CC_OP_SAR, /* CC_DEST = source, CC_SRC = shift */ ! 117: }; ! 118: ! 119: #define CCF_C 0x01 ! 120: #define CCF_V 0x02 ! 121: #define CCF_Z 0x04 ! 122: #define CCF_N 0x08 ! 123: #define CCF_X 0x01 ! 124: ! 125: typedef struct m68k_def_t m68k_def_t; ! 126: ! 127: m68k_def_t *m68k_find_by_name(const char *); ! 128: void cpu_m68k_register(CPUM68KState *, m68k_def_t *); ! 129: ! 130: #define M68K_FPCR_PREC (1 << 6) ! 131: ! 132: #ifdef CONFIG_USER_ONLY ! 133: /* Linux uses 8k pages. */ ! 134: #define TARGET_PAGE_BITS 13 ! 135: #else ! 136: /* Smallest TLB entry size is 1k. */ ! 137: #define TARGET_PAGE_BITS 10 ! 138: #endif ! 139: #include "cpu-all.h" ! 140: ! 141: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.