ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/cebix/Frodo4/Src/C64.h
Revision: 1.1
Committed: 2003-07-01T17:09:43Z (20 years, 10 months ago) by cebix
Content type: text/plain
Branch: MAIN
Log Message:
imported files

File Contents

# User Rev Content
1 cebix 1.1 /*
2     * C64.h - Put the pieces together
3     *
4     * Frodo (C) 1994-1997,2002 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 _C64_H
22     #define _C64_H
23    
24     #ifdef __BEOS__
25     #include <KernelKit.h>
26     #include <device/Joystick.h>
27     #endif
28    
29     #ifdef AMIGA
30     #include <devices/timer.h>
31     #include <devices/gameport.h>
32     #include <devices/inputevent.h>
33     #endif
34    
35     #ifdef __riscos__
36     #include "ROlib.h"
37     #endif
38    
39    
40     // false: Frodo, true: FrodoSC
41     extern bool IsFrodoSC;
42    
43    
44     class Prefs;
45     class C64Display;
46     class MOS6510;
47     class MOS6569;
48     class MOS6581;
49     class MOS6526_1;
50     class MOS6526_2;
51     class IEC;
52     class REU;
53     class MOS6502_1541;
54     class Job1541;
55     class CmdPipe;
56    
57     class C64 {
58     public:
59     C64();
60     ~C64();
61    
62     void Run(void);
63     void Quit(void);
64     void Pause(void);
65     void Resume(void);
66     void Reset(void);
67     void NMI(void);
68     void VBlank(bool draw_frame);
69     void NewPrefs(Prefs *prefs);
70     void PatchKernal(bool fast_reset, bool emul_1541_proc);
71     void SaveRAM(char *filename);
72     void SaveSnapshot(char *filename);
73     bool LoadSnapshot(char *filename);
74     int SaveCPUState(FILE *f);
75     int Save1541State(FILE *f);
76     bool Save1541JobState(FILE *f);
77     bool SaveVICState(FILE *f);
78     bool SaveSIDState(FILE *f);
79     bool SaveCIAState(FILE *f);
80     bool LoadCPUState(FILE *f);
81     bool Load1541State(FILE *f);
82     bool Load1541JobState(FILE *f);
83     bool LoadVICState(FILE *f);
84     bool LoadSIDState(FILE *f);
85     bool LoadCIAState(FILE *f);
86    
87     uint8 *RAM, *Basic, *Kernal,
88     *Char, *Color; // C64
89     uint8 *RAM1541, *ROM1541; // 1541
90    
91     C64Display *TheDisplay;
92    
93     MOS6510 *TheCPU; // C64
94     MOS6569 *TheVIC;
95     MOS6581 *TheSID;
96     MOS6526_1 *TheCIA1;
97     MOS6526_2 *TheCIA2;
98     IEC *TheIEC;
99     REU *TheREU;
100    
101     MOS6502_1541 *TheCPU1541; // 1541
102     Job1541 *TheJob1541;
103    
104     #ifdef FRODO_SC
105     uint32 CycleCounter;
106     #endif
107    
108     private:
109     void c64_ctor1(void);
110     void c64_ctor2(void);
111     void c64_dtor(void);
112     void open_close_joysticks(bool oldjoy1, bool oldjoy2, bool newjoy1, bool newjoy2);
113     uint8 poll_joystick(int port);
114     void thread_func(void);
115    
116     bool thread_running; // Emulation thread is running
117     bool quit_thyself; // Emulation thread shall quit
118     bool have_a_break; // Emulation thread shall pause
119    
120     int joy_minx, joy_maxx, joy_miny, joy_maxy; // For dynamic joystick calibration
121     uint8 joykey; // Joystick keyboard emulation mask value
122    
123     uint8 orig_kernal_1d84, // Original contents of kernal locations $1d84 and $1d85
124     orig_kernal_1d85; // (for undoing the Fast Reset patch)
125    
126     #ifdef __BEOS__
127     public:
128     void SoundSync(void);
129    
130     private:
131     static long thread_invoc(void *obj);
132    
133     BJoystick *joy[2]; // Joystick objects
134     thread_id the_thread;
135     sem_id pause_sem;
136     sem_id sound_sync_sem;
137     double start_time;
138     #endif
139    
140     #ifdef AMIGA
141     struct MsgPort *timer_port; // For speed limiter
142     struct timerequest *timer_io;
143     struct timeval start_time;
144     struct MsgPort *game_port; // For joystick
145     struct IOStdReq *game_io;
146     struct GamePortTrigger game_trigger;
147     struct InputEvent game_event;
148     UBYTE joy_state; // Current state of joystick
149     bool game_open, port_allocated; // Flags: gameport.device opened, game port allocated
150     #endif
151    
152     #ifdef __unix
153     int joyfd[2]; // File descriptors for joysticks
154     double speed_index;
155     public:
156     CmdPipe *gui;
157     #endif
158    
159     #ifdef WIN32
160     private:
161     void CheckTimerChange();
162     void StartTimer();
163     void StopTimer();
164     static void CALLBACK StaticTimeProc(UINT uID, UINT uMsg, DWORD dwUser, DWORD dw1, DWORD dw2);
165     void TimeProc(UINT id);
166     #ifdef FRODO_SC
167     void EmulateCyclesWith1541();
168     void EmulateCyclesWithout1541();
169     #endif
170    
171     DWORD ref_time; // when frame count was reset
172     int skipped_frames; // number of skipped frames
173     int timer_every; // frequency of timer in frames
174     HANDLE timer_semaphore; // Timer semaphore for synch
175     MMRESULT timer_id; // Timer identifier
176     int frame; // current frame number
177     uint8 joy_state; // Current state of joystick
178     bool state_change;
179     #endif
180    
181     #ifdef __riscos__
182     public:
183     void RequestSnapshot(void);
184     bool LoadOldSnapshot(FILE *f);
185     void LoadSystemConfig(const char *filename); // loads timing vals and keyboard joys
186     void SaveSystemConfig(const char *filename); // saves timing vals and keyboard joys
187     void ReadTimings(int *poll_after, int *speed_after, int *sound_after);
188     void WriteTimings(int poll_after, int speed_after, int sound_after);
189    
190     WIMP *TheWIMP;
191     int PollAfter; // centiseconds before polling
192     int SpeedAfter; // centiseconds before updating speedometer
193     int PollSoundAfter; // *rasterlines* after which DigitalRenderer is polled
194     int HostVolume; // sound volume of host machine
195    
196     private:
197     bool make_a_snapshot;
198    
199     uint8 joykey2; // two keyboard joysticks possible here
200    
201     uint8 joystate[2]; // Joystick state
202     bool Poll; // TRUE if polling should take place
203     int LastPoll, LastFrame, LastSpeed; // time of last poll / last frame / speedom (cs)
204     int FramesSince;
205     int laststate; // last keyboard state (-> scroll lock)
206     int lastptr; // last mouse pointer shape
207     bool SingleTasking;
208     #endif
209     };
210    
211    
212     #endif