Sat, 17 Nov 2012 19:18:29 +0000
add HDD support + fixes
Patch-Author: Andrew Warkentin <andreww591!gmail>
Patch-Message-ID: <50A772FC.8020009@gmail.com>
I have added floppy write support, full hard disk emulation, and proper handling of DMA page faults to FreeBee. I also fixed the floppy step commands, changed the "force interrupt" floppy command to generate a type 1 status, and changed the DMA address counter to reset to 3fff when a transfer completes (which is what Unix seems to expect - without it, the kernel says that the floppy isn't ready). The floppy, hard disk, and DMA page fault tests all pass. Initializing hard disks and floppies also works (the geometry for both is still fixed by the size of the image, though, and format commands only appear to succeed, but they don't modify the image). Unix still doesn't run, though (it hangs after reading some sectors from the floppy).
1 /* ======================================================================== */
2 /* ========================= LICENSING & COPYRIGHT ======================== */
3 /* ======================================================================== */
4 /*
5 * MUSASHI
6 * Version 3.3
7 *
8 * A portable Motorola M680x0 processor emulation engine.
9 * Copyright 1998-2001 Karl Stenerud. All rights reserved.
10 *
11 * This code may be freely used for non-commercial purposes as long as this
12 * copyright notice remains unaltered in the source code and any binary files
13 * containing this code in compiled form.
14 *
15 * All other lisencing terms must be negotiated with the author
16 * (Karl Stenerud).
17 *
18 * The latest version of this code can be obtained at:
19 * http://kstenerud.cjb.net
20 */
24 #ifndef M68KCONF__HEADER
25 #define M68KCONF__HEADER
28 /* Configuration switches.
29 * Use OPT_SPECIFY_HANDLER for configuration options that allow callbacks.
30 * OPT_SPECIFY_HANDLER causes the core to link directly to the function
31 * or macro you specify, rather than using callback functions whose pointer
32 * must be passed in using m68k_set_xxx_callback().
33 */
34 #define OPT_OFF 0
35 #define OPT_ON 1
36 #define OPT_SPECIFY_HANDLER 2
39 /* ======================================================================== */
40 /* ============================== MAME STUFF ============================== */
41 /* ======================================================================== */
43 /* If you're compiling this for MAME, only change M68K_COMPILE_FOR_MAME
44 * to OPT_ON and use m68kmame.h to configure the 68k core.
45 */
46 #ifndef M68K_COMPILE_FOR_MAME
47 #define M68K_COMPILE_FOR_MAME OPT_OFF
48 #endif /* M68K_COMPILE_FOR_MAME */
50 #if M68K_COMPILE_FOR_MAME == OPT_ON
51 #include "m68kmame.h"
52 #else
56 /* ======================================================================== */
57 /* ============================= CONFIGURATION ============================ */
58 /* ======================================================================== */
60 /* Turn on if you want to use the following M68K variants */
61 #define M68K_EMULATE_010 OPT_ON
62 #define M68K_EMULATE_EC020 OPT_ON
63 #define M68K_EMULATE_020 OPT_ON
66 /* If on, the CPU will call m68k_read_immediate_xx() for immediate addressing
67 * and m68k_read_pcrelative_xx() for PC-relative addressing.
68 * If off, all read requests from the CPU will be redirected to m68k_read_xx()
69 */
70 #define M68K_SEPARATE_READS OPT_OFF
73 /* If on, CPU will call the interrupt acknowledge callback when it services an
74 * interrupt.
75 * If off, all interrupts will be autovectored and all interrupt requests will
76 * auto-clear when the interrupt is serviced.
77 */
78 #define M68K_EMULATE_INT_ACK OPT_OFF
79 #define M68K_INT_ACK_CALLBACK(A) your_int_ack_handler_function(A)
82 /* If on, CPU will call the breakpoint acknowledge callback when it encounters
83 * a breakpoint instruction and it is running a 68010+.
84 */
85 #define M68K_EMULATE_BKPT_ACK OPT_OFF
86 #define M68K_BKPT_ACK_CALLBACK() your_bkpt_ack_handler_function()
89 /* If on, the CPU will monitor the trace flags and take trace exceptions
90 */
91 #define M68K_EMULATE_TRACE OPT_OFF
94 /* If on, CPU will call the output reset callback when it encounters a reset
95 * instruction.
96 */
97 #define M68K_EMULATE_RESET OPT_OFF
98 #define M68K_RESET_CALLBACK() your_reset_handler_function()
101 /* If on, CPU will call the set fc callback on every memory access to
102 * differentiate between user/supervisor, program/data access like a real
103 * 68000 would. This should be enabled and the callback should be set if you
104 * want to properly emulate the m68010 or higher. (moves uses function codes
105 * to read/write data from different address spaces)
106 */
107 #define M68K_EMULATE_FC OPT_OFF
108 #define M68K_SET_FC_CALLBACK(A) your_set_fc_handler_function(A)
111 /* If on, CPU will call the pc changed callback when it changes the PC by a
112 * large value. This allows host programs to be nicer when it comes to
113 * fetching immediate data and instructions on a banked memory system.
114 */
115 #define M68K_MONITOR_PC OPT_OFF
116 #define M68K_SET_PC_CALLBACK(A) your_pc_changed_handler_function(A)
119 /* If on, CPU will call the instruction hook callback before every
120 * instruction.
121 */
122 #define M68K_INSTRUCTION_HOOK OPT_OFF
123 #define M68K_INSTRUCTION_CALLBACK() your_instruction_hook_function()
126 /* If on, the CPU will emulate the 4-byte prefetch queue of a real 68000 */
127 #define M68K_EMULATE_PREFETCH OPT_OFF
130 /* If on, the CPU will generate address error exceptions if it tries to
131 * access a word or longword at an odd address.
132 * NOTE: Do not enable this! It is not working!
133 */
134 #define M68K_EMULATE_ADDRESS_ERROR OPT_OFF
137 /* Turn on to enable logging of illegal instruction calls.
138 * M68K_LOG_FILEHANDLE must be #defined to a stdio file stream.
139 * Turn on M68K_LOG_1010_1111 to log all 1010 and 1111 calls.
140 */
141 #define M68K_LOG_ENABLE OPT_OFF
142 #define M68K_LOG_1010_1111 OPT_OFF
143 #define M68K_LOG_FILEHANDLE some_file_handle
146 /* ----------------------------- COMPATIBILITY ---------------------------- */
148 /* The following options set optimizations that violate the current ANSI
149 * standard, but will be compliant under the forthcoming C9X standard.
150 */
153 /* If on, the enulation core will use 64-bit integers to speed up some
154 * operations.
155 */
156 #define M68K_USE_64_BIT OPT_OFF
159 /* Set to your compiler's static inline keyword to enable it, or
160 * set it to blank to disable it.
161 * If you define INLINE in the makefile, it will override this value.
162 * NOTE: not enabling inline functions will SEVERELY slow down emulation.
163 */
164 #ifndef INLINE
165 #define INLINE static __inline__
166 #endif /* INLINE */
169 /* If your environment requires special prefixes for system callback functions
170 * such as the argument to qsort(), then set them here or in the makefile.
171 */
172 #ifndef DECL_SPEC
173 #define DECL_SPEC
174 #endif
176 #endif /* M68K_COMPILE_FOR_MAME */
179 /* ======================================================================== */
180 /* ============================== END OF FILE ============================= */
181 /* ======================================================================== */
183 #endif /* M68KCONF__HEADER */