ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/cebix/BasiliskII/src/main.cpp
Revision: 1.8
Committed: 2001-06-27T20:05:23Z (22 years, 10 months ago) by cebix
Branch: MAIN
Changes since 1.7: +6 -0 lines
Log Message:
depth/resolution switching infrastructure should be complete now; slot ROM
contains all supported depths, default mode is stored in XPRAM upon startup,
and added video_switch_to_mode() call (currently unimplemented in all drivers)

File Contents

# Content
1 /*
2 * main.cpp - Startup/shutdown code
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 #include "sysdeps.h"
22
23 #include "cpu_emulation.h"
24 #include "xpram.h"
25 #include "timer.h"
26 #include "sony.h"
27 #include "disk.h"
28 #include "cdrom.h"
29 #include "scsi.h"
30 #include "extfs.h"
31 #include "audio.h"
32 #include "video.h"
33 #include "serial.h"
34 #include "ether.h"
35 #include "clip.h"
36 #include "rom_patches.h"
37 #include "user_strings.h"
38 #include "prefs.h"
39 #include "main.h"
40
41 #define DEBUG 0
42 #include "debug.h"
43
44 #if ENABLE_MON
45 #include "mon.h"
46
47 static uint32 mon_read_byte_b2(uint32 adr)
48 {
49 return ReadMacInt8(adr);
50 }
51
52 static void mon_write_byte_b2(uint32 adr, uint32 b)
53 {
54 WriteMacInt8(adr, b);
55 }
56 #endif
57
58
59 /*
60 * Initialize everything, returns false on error
61 */
62
63 bool InitAll(void)
64 {
65 // Check ROM version
66 if (!CheckROM()) {
67 ErrorAlert(GetString(STR_UNSUPPORTED_ROM_TYPE_ERR));
68 return false;
69 }
70
71 #if EMULATED_68K
72 // Set CPU and FPU type (UAE emulation)
73 switch (ROMVersion) {
74 case ROM_VERSION_64K:
75 case ROM_VERSION_PLUS:
76 case ROM_VERSION_CLASSIC:
77 CPUType = 0;
78 FPUType = 0;
79 TwentyFourBitAddressing = true;
80 break;
81 case ROM_VERSION_II:
82 CPUType = PrefsFindInt32("cpu");
83 if (CPUType < 2) CPUType = 2;
84 if (CPUType > 4) CPUType = 4;
85 FPUType = PrefsFindBool("fpu") ? 1 : 0;
86 if (CPUType == 4) FPUType = 1; // 68040 always with FPU
87 TwentyFourBitAddressing = true;
88 break;
89 case ROM_VERSION_32:
90 CPUType = PrefsFindInt32("cpu");
91 if (CPUType < 2) CPUType = 2;
92 if (CPUType > 4) CPUType = 4;
93 FPUType = PrefsFindBool("fpu") ? 1 : 0;
94 if (CPUType == 4) FPUType = 1; // 68040 always with FPU
95 TwentyFourBitAddressing = false;
96 break;
97 }
98 CPUIs68060 = false;
99 #endif
100
101 // Load XPRAM
102 XPRAMInit();
103
104 // Set boot volume
105 int16 i16 = PrefsFindInt32("bootdrive");
106 XPRAM[0x78] = i16 >> 8;
107 XPRAM[0x79] = i16 & 0xff;
108 i16 = PrefsFindInt32("bootdriver");
109 XPRAM[0x7a] = i16 >> 8;
110 XPRAM[0x7b] = i16 & 0xff;
111
112 // Init drivers
113 SonyInit();
114 DiskInit();
115 CDROMInit();
116 SCSIInit();
117
118 #if SUPPORTS_EXTFS
119 // Init external file system
120 ExtFSInit();
121 #endif
122
123 // Init serial ports
124 SerialInit();
125
126 // Init network
127 EtherInit();
128
129 // Init Time Manager
130 TimerInit();
131
132 // Init clipboard
133 ClipInit();
134
135 // Init audio
136 AudioInit();
137
138 // Init video
139 if (!VideoInit(ROMVersion == ROM_VERSION_64K || ROMVersion == ROM_VERSION_PLUS || ROMVersion == ROM_VERSION_CLASSIC))
140 return false;
141
142 // Set default video mode
143 XPRAM[0x56] = 0x42; // 'B'
144 XPRAM[0x57] = 0x32; // '2'
145 XPRAM[0x58] = DepthToAppleMode(VideoMonitor.mode.depth);
146 XPRAM[0x59] = 0;
147
148 #if EMULATED_68K
149 // Init 680x0 emulation (this also activates the memory system which is needed for PatchROM())
150 if (!Init680x0())
151 return false;
152 #endif
153
154 // Install ROM patches
155 if (!PatchROM()) {
156 ErrorAlert(GetString(STR_UNSUPPORTED_ROM_TYPE_ERR));
157 return false;
158 }
159
160 #if ENABLE_MON
161 // Initialize mon
162 mon_init();
163 mon_read_byte = mon_read_byte_b2;
164 mon_write_byte = mon_write_byte_b2;
165 #endif
166
167 return true;
168 }
169
170
171 /*
172 * Deinitialize everything
173 */
174
175 void ExitAll(void)
176 {
177 #if ENABLE_MON
178 // Deinitialize mon
179 mon_exit();
180 #endif
181
182 // Save XPRAM
183 XPRAMExit();
184
185 // Exit video
186 VideoExit();
187
188 // Exit audio
189 AudioExit();
190
191 // Exit clipboard
192 ClipExit();
193
194 // Exit Time Manager
195 TimerExit();
196
197 // Exit serial ports
198 SerialExit();
199
200 // Exit network
201 EtherExit();
202
203 #if SUPPORTS_EXTFS
204 // Exit external file system
205 ExtFSExit();
206 #endif
207
208 // Exit drivers
209 SCSIExit();
210 CDROMExit();
211 DiskExit();
212 SonyExit();
213 }