ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/cebix/BasiliskII/src/uae_cpu/cpu_emulation.h
Revision: 1.9
Committed: 2001-06-28T21:20:02Z (23 years, 5 months ago) by cebix
Content type: text/plain
Branch: MAIN
Changes since 1.8: +5 -4 lines
Log Message:
video_x.cpp supports resolution switching in windowed mode: the available
resolutions are 512x384, 640x480, 800x600, 1024x768 and 1280x1024 (the prefs
editor has to be updated to reflect this). The resolution selected in the
prefs editor is used as the default, but it can be changed in the Monitors
control panel. So far only tested with direct addressing.

File Contents

# Content
1 /*
2 * cpu_emulation.h - Definitions for Basilisk II CPU emulation module (UAE 0.8.10 version)
3 *
4 * Basilisk II (C) 1997-2001 Christian Bauer
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19 */
20
21 #ifndef CPU_EMULATION_H
22 #define CPU_EMULATION_H
23
24 #include <string.h>
25
26
27 /*
28 * Memory system
29 */
30
31 // RAM and ROM pointers (allocated and set by main_*.cpp)
32 extern uint32 RAMBaseMac; // RAM base (Mac address space), does not include Low Mem when != 0
33 extern uint8 *RAMBaseHost; // RAM base (host address space)
34 extern uint32 RAMSize; // Size of RAM
35
36 extern uint32 ROMBaseMac; // ROM base (Mac address space)
37 extern uint8 *ROMBaseHost; // ROM base (host address space)
38 extern uint32 ROMSize; // Size of ROM
39
40 #if !REAL_ADDRESSING && !DIRECT_ADDRESSING
41 // If we are not using real or direct addressing, the Mac frame buffer gets
42 // mapped to this location. The memory must be allocated by VideoInit().
43 // If multiple monitors are used, they must share the frame buffer
44 const uint32 MacFrameBaseMac = 0xa0000000;
45 extern uint8 *MacFrameBaseHost; // Frame buffer base (host address space)
46 extern uint32 MacFrameSize; // Size of frame buffer
47 #endif
48 extern int MacFrameLayout; // Frame buffer layout (see defines below)
49
50 // Possible frame buffer layouts
51 enum {
52 FLAYOUT_NONE, // No frame buffer
53 FLAYOUT_DIRECT, // Frame buffer is in MacOS layout, no conversion needed
54 FLAYOUT_HOST_555, // 16 bit, RGB 555, host byte order
55 FLAYOUT_HOST_565, // 16 bit, RGB 565, host byte order
56 FLAYOUT_HOST_888 // 32 bit, RGB 888, host byte order
57 };
58
59 // Mac memory access functions
60 #include "memory.h"
61 static inline uint32 ReadMacInt32(uint32 addr) {return get_long(addr);}
62 static inline uint32 ReadMacInt16(uint32 addr) {return get_word(addr);}
63 static inline uint32 ReadMacInt8(uint32 addr) {return get_byte(addr);}
64 static inline void WriteMacInt32(uint32 addr, uint32 l) {put_long(addr, l);}
65 static inline void WriteMacInt16(uint32 addr, uint32 w) {put_word(addr, w);}
66 static inline void WriteMacInt8(uint32 addr, uint32 b) {put_byte(addr, b);}
67 static inline uint8 *Mac2HostAddr(uint32 addr) {return get_real_address(addr);}
68 static inline uint32 Host2MacAddr(uint8 *addr) {return get_virtual_address(addr);}
69
70 static inline void *Mac_memset(uint32 addr, int c, size_t n) {return memset(Mac2HostAddr(addr), c, n);}
71 static inline void *Mac2Host_memcpy(void *dest, uint32 src, size_t n) {return memcpy(dest, Mac2HostAddr(src), n);}
72 static inline void *Host2Mac_memcpy(uint32 dest, const void *src, size_t n) {return memcpy(Mac2HostAddr(dest), src, n);}
73 static inline void *Mac2Mac_memcpy(uint32 dest, uint32 src, size_t n) {return memcpy(Mac2HostAddr(dest), Mac2HostAddr(src), n);}
74
75
76 /*
77 * 680x0 emulation
78 */
79
80 // Initialization
81 extern bool Init680x0(void); // This routine may want to look at CPUType/FPUType to set up the apropriate emulation
82 extern void Exit680x0(void);
83 extern void InitFrameBufferMapping(void);
84
85 // 680x0 emulation functions
86 struct M68kRegisters;
87 extern void Start680x0(void); // Reset and start 680x0
88 extern "C" void Execute68k(uint32 addr, M68kRegisters *r); // Execute 68k code from EMUL_OP routine
89 extern "C" void Execute68kTrap(uint16 trap, M68kRegisters *r); // Execute MacOS 68k trap from EMUL_OP routine
90
91 // Interrupt functions
92 extern void TriggerInterrupt(void); // Trigger interrupt level 1 (InterruptFlag must be set first)
93 extern void TriggerNMI(void); // Trigger interrupt level 7
94
95 #endif