ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/cebix/Frodo4/Src/C64_x.h
(Generate patch)

Comparing Frodo4/Src/C64_x.h (file contents):
Revision 1.5 by cebix, 2004-01-10T15:07:14Z vs.
Revision 1.9 by cebix, 2010-04-21T21:59:24Z

# Line 1 | Line 1
1   /*
2   *  C64_x.h - Put the pieces together, X specific stuff
3   *
4 < *  Frodo (C) 1994-1997,2002-2003 Christian Bauer
4 > *  Frodo Copyright (C) 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
# Line 95 | Line 95 | int usleep(unsigned long int microSecond
95   }
96   #endif
97  
98 + #ifdef __linux__
99 + // select() timing is much more accurate under Linux
100 + static void Delay_usec(unsigned long usec)
101 + {
102 +        int was_error;
103 +        struct timeval tv;
104 +
105 +        tv.tv_sec = 0;
106 +        tv.tv_usec = usec;
107 +        do {
108 +                errno = 0;
109 +                was_error = select(0, NULL, NULL, NULL, &tv);
110 +        } while (was_error && (errno == EINTR));
111 + }
112 + #else
113 + static void Delay_usec(unsigned long usec)
114 + {
115 +        usleep(usec);
116 + }
117 + #endif
118 +
119  
120   /*
121   *  Constructor, system-dependent things
# Line 107 | Line 128 | void C64::c64_ctor1(void)
128          joy_maxx[0] = joy_maxy[0] = -32768;
129          joy_minx[1] = joy_miny[1] = 32767;
130          joy_maxx[1] = joy_maxy[1] = -32768;
110
111        // we need to create a potential GUI subprocess here, because we don't want
112        // it to inherit file-descriptors (such as for the audio-device and alike..)
113 #if defined(__svgalib__)
114        gui = 0;
115 #else
116        // try to start up Tk gui.
117        gui = new CmdPipe("wish", BINDIR "Frodo_GUI.tcl");
118        if (gui) {
119                if (gui->fail) {
120                        delete gui; gui = 0;
121                }
122        }
123        // wait until the GUI process responds (if it does...)
124        if (gui) {
125                if (5 != gui->ewrite("ping\n",5)) {
126                        delete gui; gui = 0;
127                } else {
128                        char c;
129                        fd_set set;
130                        FD_ZERO(&set);
131                        FD_SET(gui->get_read_fd(), &set);
132                        struct timeval tv;
133                        tv.tv_usec = 0;
134                        tv.tv_sec = 5;
135 // Use the following commented line for HP-UX < 10.20
136 //                      if (select(FD_SETSIZE, (int *)&set, (int *)NULL, (int *)NULL, &tv) <= 0) {
137                        if (select(FD_SETSIZE, &set, NULL, NULL, &tv) <= 0) {
138                                delete gui; gui = 0;
139                        } else {
140                                if (1 != gui->eread(&c, 1)) {
141                                        delete gui; gui = 0;
142                                } else {
143                                        if (c != 'o') {
144                                                delete gui; gui = 0;
145                                        }
146                                }
147                        }
148                }
149        }
150 #endif // __svgalib__
131   }
132  
133   void C64::c64_ctor2(void)
134   {
135 < #ifndef  __svgalib__  
136 <   if (!gui) {
137 <        fprintf(stderr,"Alas, master, no preferences window will be available.\n"
138 <                       "If you wish to see one, make sure the 'wish' interpreter\n"
159 <                       "(Tk version >= 4.1) is installed in your path.\n"
160 <                       "You can still use Frodo, though. Use F10 to quit, \n"
161 <                       "F11 to cause an NMI and F12 to reset the C64.\n"
162 <                       "You can change the preferences by editing ~/.frodorc\n");
163 <   }
164 < #endif // SVGAlib
135 >        printf("Use F9 to enter the SAM machine language monitor,\n"
136 >               "F10 to edit preferences or quit,\n"
137 >               "F11 to cause an NMI (RESTORE key) and\n"
138 >               "F12 to reset the C64.\n\n");
139    
140          gettimeofday(&tv_start, NULL);
141   }
# Line 247 | Line 221 | void C64::VBlank(bool draw_frame)
221  
222                  // Limit speed to 100% if desired
223                  if ((speed_index > 100) && ThePrefs.LimitSpeed) {
224 <                        usleep((unsigned long)(ThePrefs.SkipFrames * 20000 - elapsed_time));
224 >                        Delay_usec((unsigned long)(ThePrefs.SkipFrames * 20000 - elapsed_time));
225                          speed_index = 100;
226                  }
227  
# Line 264 | Line 238 | void C64::VBlank(bool draw_frame)
238  
239   void C64::thread_func(void)
240   {
267        int linecnt = 0;
268
241   #ifdef FRODO_SC
242          while (!quit_thyself) {
243  
# Line 314 | Line 286 | void C64::thread_func(void)
286                          // 1541 processor disabled, only emulate 6510
287                          TheCPU->EmulateLine(cycles);
288   #endif
317                linecnt++;
318 #if !defined(__svgalib__)
319                if ((linecnt & 0xfff) == 0 && gui) {
320
321                        // check for command from GUI process
322                // fprintf(stderr,":");
323                        while (gui->probe()) {
324                                char c;
325                                if (gui->eread(&c, 1) != 1) {
326                                        delete gui;
327                                        gui = 0;
328                                        fprintf(stderr,"Oops, GUI process died...\n");
329                                } else {
330               // fprintf(stderr,"%c",c);
331                                        switch (c) {
332                                                case 'q':
333                                                        quit_thyself = true;
334                                                        break;
335                                                case 'r':
336                                                        Reset();
337                                                        break;
338                                                case 'p':{
339                                                        Prefs *np = Frodo::reload_prefs();
340                                                        NewPrefs(np);
341                                                        ThePrefs = *np;
342                                                        break;
343                                                }
344                                                default:
345                                                        break;
346                                        }
347                                }
348                        }
349                }
350 #endif
289          }
290 < #if !defined(__svgalib__)
291 <        if (gui) {
292 <                gui->ewrite("quit\n",5);
293 <        }
294 < #endif
290 > }
291 >
292 >
293 > /*
294 > *  Pause main emulation thread
295 > */
296 >
297 > void C64::Pause(void)
298 > {
299 >        TheSID->PauseSound();
300 > }
301 >
302 >
303 > /*
304 > *  Resume main emulation thread
305 > */
306 >
307 > void C64::Resume(void)
308 > {
309 >        TheSID->ResumeSound();
310   }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines