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.2 by cebix, 2003-07-01T17:51:17Z vs.
Revision 1.8 by cebix, 2005-06-27T19:55:48Z

# 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 (C) 1994-1997,2002-2005 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 103 | Line 124 | int usleep(unsigned long int microSecond
124   void C64::c64_ctor1(void)
125   {
126          // Initialize joystick variables
127 <        joyfd[0] = joyfd[1] = -1;
128 <        joy_minx = joy_miny = 32767;
129 <        joy_maxx = joy_maxy = -32768;
127 >        joy_minx[0] = joy_miny[0] = 32767;
128 >        joy_maxx[0] = joy_maxy[0] = -32768;
129 >        joy_minx[1] = joy_miny[1] = 32767;
130 >        joy_maxx[1] = joy_maxy[1] = -32768;
131  
132          // we need to create a potential GUI subprocess here, because we don't want
133          // it to inherit file-descriptors (such as for the audio-device and alike..)
# Line 113 | Line 135 | void C64::c64_ctor1(void)
135          gui = 0;
136   #else
137          // try to start up Tk gui.
138 <        gui = new CmdPipe("wish", "TkGui.tcl");
138 >        gui = new CmdPipe("wish", BINDIR "Frodo_GUI.tcl");
139          if (gui) {
140                  if (gui->fail) {
141                          delete gui; gui = 0;
# Line 246 | Line 268 | void C64::VBlank(bool draw_frame)
268  
269                  // Limit speed to 100% if desired
270                  if ((speed_index > 100) && ThePrefs.LimitSpeed) {
271 <                        usleep((unsigned long)(ThePrefs.SkipFrames * 20000 - elapsed_time));
271 >                        Delay_usec((unsigned long)(ThePrefs.SkipFrames * 20000 - elapsed_time));
272                          speed_index = 100;
273                  }
274  
# Line 257 | Line 279 | void C64::VBlank(bool draw_frame)
279   }
280  
281  
260 /*
261 *  Open/close joystick drivers given old and new state of
262 *  joystick preferences
263 */
264
265 void C64::open_close_joysticks(bool oldjoy1, bool oldjoy2, bool newjoy1, bool newjoy2)
266 {
267 #ifdef HAVE_LINUX_JOYSTICK_H
268        if (oldjoy1 != newjoy1) {
269                joy_minx = joy_miny = 32767;    // Reset calibration
270                joy_maxx = joy_maxy = -32768;
271                if (newjoy1) {
272                        joyfd[0] = open("/dev/js0", O_RDONLY);
273                        if (joyfd[0] < 0)
274                                fprintf(stderr, "Couldn't open joystick 1\n");
275                } else {
276                        close(joyfd[0]);
277                        joyfd[0] = -1;
278                }
279        }
280
281        if (oldjoy2 != newjoy2) {
282                joy_minx = joy_miny = 32767;    // Reset calibration
283                joy_maxx = joy_maxy = -32768;
284                if (newjoy2) {
285                        joyfd[1] = open("/dev/js1", O_RDONLY);
286                        if (joyfd[1] < 0)
287                                fprintf(stderr, "Couldn't open joystick 2\n");
288                } else {
289                        close(joyfd[1]);
290                        joyfd[1] = -1;
291                }
292        }
293 #endif
294 }
295
296
297 /*
298 *  Poll joystick port, return CIA mask
299 */
300
301 uint8 C64::poll_joystick(int port)
302 {
303 #ifdef HAVE_LINUX_JOYSTICK_H
304        JS_DATA_TYPE js;
305        uint8 j = 0xff;
306
307        if (joyfd[port] >= 0) {
308                if (read(joyfd[port], &js, JS_RETURN) == JS_RETURN) {
309                        if (js.x > joy_maxx)
310                                joy_maxx = js.x;
311                        if (js.x < joy_minx)
312                                joy_minx = js.x;
313                        if (js.y > joy_maxy)
314                                joy_maxy = js.y;
315                        if (js.y < joy_miny)
316                                joy_miny = js.y;
317
318                        if (joy_maxx-joy_minx < 100 || joy_maxy-joy_miny < 100)
319                                return 0xff;
320
321                        if (js.x < (joy_minx + (joy_maxx-joy_minx)/3))
322                                j &= 0xfb;                                                      // Left
323                        else if (js.x > (joy_minx + 2*(joy_maxx-joy_minx)/3))
324                                j &= 0xf7;                                                      // Right
325
326                        if (js.y < (joy_miny + (joy_maxy-joy_miny)/3))
327                                j &= 0xfe;                                                      // Up
328                        else if (js.y > (joy_miny + 2*(joy_maxy-joy_miny)/3))
329                                j &= 0xfd;                                                      // Down
330
331                        if (js.buttons & 1)
332                                j &= 0xef;                                                      // Button
333                }
334        }
335        return j;
336 #else
337        return 0xff;
338 #endif
339 }
340
341
282   /*
283   * The emulation's main loop
284   */

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines