ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/cebix/BasiliskII/src/main.cpp
Revision: 1.9
Committed: 2001-06-30T17:21:51Z (22 years, 10 months ago) by cebix
Branch: MAIN
Changes since 1.8: +17 -2 lines
Log Message:
- experimental gamma table support
- restructured video_x.cpp: uses classes for display types

File Contents

# User Rev Content
1 cebix 1.1 /*
2     * main.cpp - Startup/shutdown code
3     *
4 cebix 1.7 * Basilisk II (C) 1997-2001 Christian Bauer
5 cebix 1.1 *
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 cebix 1.3 #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 cebix 1.1
59     /*
60     * Initialize everything, returns false on error
61     */
62    
63     bool InitAll(void)
64     {
65     // Check ROM version
66     if (!CheckROM()) {
67 cebix 1.9 ErrorAlert(STR_UNSUPPORTED_ROM_TYPE_ERR);
68 cebix 1.1 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 cebix 1.4 CPUType = PrefsFindInt32("cpu");
83     if (CPUType < 2) CPUType = 2;
84     if (CPUType > 4) CPUType = 4;
85 cebix 1.1 FPUType = PrefsFindBool("fpu") ? 1 : 0;
86 cebix 1.4 if (CPUType == 4) FPUType = 1; // 68040 always with FPU
87 cebix 1.1 TwentyFourBitAddressing = true;
88     break;
89     case ROM_VERSION_32:
90 cebix 1.4 CPUType = PrefsFindInt32("cpu");
91     if (CPUType < 2) CPUType = 2;
92     if (CPUType > 4) CPUType = 4;
93 cebix 1.1 FPUType = PrefsFindBool("fpu") ? 1 : 0;
94 cebix 1.4 if (CPUType == 4) FPUType = 1; // 68040 always with FPU
95 cebix 1.1 TwentyFourBitAddressing = false;
96     break;
97     }
98     CPUIs68060 = false;
99     #endif
100    
101     // Load XPRAM
102     XPRAMInit();
103    
104     // Set boot volume
105 cebix 1.6 int16 i16 = PrefsFindInt32("bootdrive");
106 cebix 1.1 XPRAM[0x78] = i16 >> 8;
107     XPRAM[0x79] = i16 & 0xff;
108 cebix 1.6 i16 = PrefsFindInt32("bootdriver");
109 cebix 1.1 XPRAM[0x7a] = i16 >> 8;
110     XPRAM[0x7b] = i16 & 0xff;
111    
112     // Init drivers
113     SonyInit();
114     DiskInit();
115     CDROMInit();
116     SCSIInit();
117    
118 cebix 1.2 #if SUPPORTS_EXTFS
119 cebix 1.1 // Init external file system
120     ExtFSInit();
121 cebix 1.2 #endif
122 cebix 1.1
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 cebix 1.8 // 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 cebix 1.1 #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 cebix 1.9 ErrorAlert(STR_UNSUPPORTED_ROM_TYPE_ERR);
157 cebix 1.1 return false;
158     }
159 cebix 1.3
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 cebix 1.1 return true;
168     }
169    
170    
171     /*
172     * Deinitialize everything
173     */
174    
175     void ExitAll(void)
176     {
177 cebix 1.3 #if ENABLE_MON
178     // Deinitialize mon
179     mon_exit();
180     #endif
181    
182 cebix 1.1 // 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 cebix 1.2 #if SUPPORTS_EXTFS
204 cebix 1.1 // Exit external file system
205     ExtFSExit();
206 cebix 1.2 #endif
207 cebix 1.1
208     // Exit drivers
209     SCSIExit();
210     CDROMExit();
211     DiskExit();
212     SonyExit();
213 cebix 1.9 }
214    
215    
216     /*
217     * Display error/warning alert given the message string ID
218     */
219    
220     void ErrorAlert(int string_id)
221     {
222     ErrorAlert(GetString(string_id));
223     }
224    
225     void WarningAlert(int string_id)
226     {
227     WarningAlert(GetString(string_id));
228 cebix 1.1 }