1 ////////////////////////////////////////////////////////////////////////////////
\r
3 ////////////////////////////////////////////////////////////////////////////////
\r
11 ////////////////////////////////////////////////////////////////////////////////
\r
14 #include <mmsystem.h>
\r
16 #endif // #ifndef __PORT__
\r
19 /* Added by SDLEMU (http://sdlemu.ngemu.com) */
\r
20 /* Added for GCC UNIX compatibility */
\r
23 #endif // #ifdef __GCCUNIX__
\r
29 /* Enable this (uncomment) for speed control */
\r
30 //#define SPEED_CONTROL
\r
33 Format format(16, 0x007C00, 0x00003E0, 0x0000001F);
\r
38 char * jaguar_boot_dir;
\r
40 void main_screen_switch(void)
\r
42 fullscreen = !fullscreen;
\r
44 console.option("fullscreen output");
\r
46 console.option("windowed output");
\r
48 console.open("WIP VERSION", tom_width, tom_height, format);
\r
53 /* Added/changed by SDLEMU http://sdlemu.ngemu.com */
\r
55 int main(int argc, char * argv[])
\r
58 uint32 startTime, totalFrames, endTime, w, h;
\r
60 unsigned int nNormalLast = 0;
\r
61 int nNormalFrac = 0;
\r
65 int nFrameskip = 1; /* Frameskip */
\r
66 int nFrame = 0; /* No. of Frame */
\r
67 int nJoyport = 0; /* Joystick port */
\r
69 printf("Virtual Jaguar/SDL v1.0.1 (GCC/SDL Port)\n");
\r
70 printf("Based upon Virtual Jaguar core v1.0.0 by Potato emulation.\n");
\r
71 printf("Written by Niels Wagenaar (Linux/WIN32) and Caz (BeOS)\n");
\r
72 printf("Portions massaged by James L. Hammons (WIN32)\n");
\r
73 printf("Contact : http://sdlemu.ngemu.com/ | sdlemu@ngemu.com\n");
\r
77 printf("Usage : \n\n");
\r
78 printf("jag_em <romfile> [switches] ]\n");
\r
79 printf(" -fullscreen : Enable fullscreen mode \n");
\r
80 printf(" -window : Enable windowed mode (default) \n");
\r
81 printf(" -frameskip 1-10 : Enable frameskip 1 (default) - 10\n");
\r
82 printf(" -joystick : Enable joystick/gamepad \n");
\r
83 printf(" -joyport 0-3 : Select desired joystick port \n");
\r
87 jaguar_boot_dir=(char*)malloc(1024);
\r
88 getcwd(jaguar_boot_dir,1024);
\r
90 log_init("jag_em.log");
\r
94 version_display(log_get());
\r
95 jaguar_init(argv[1]);
\r
98 /* Setting up the backbuffer */
\r
99 int16 *backbuffer=(int16*)malloc(845*525*sizeof(int16));
\r
100 memset(backbuffer,0xaa,tom_getVideoModeWidth()*tom_getVideoModeHeight()*sizeof(int16));
\r
102 /* Setting up the primary SDL display */
\r
103 Format format(16,0x007c00,0x00003e0,0x0000001f);
\r
104 surface=new Surface(tom_getVideoModeWidth(),tom_getVideoModeHeight(), format);
\r
105 console.option("windowed output");
\r
107 /* Checking the switches ;) */
\r
108 for(i = 0; (i < argc || argv[i] != NULL); i++)
\r
110 if(!strcmp(argv[i], "-fullscreen"))
\r
111 console.option("fullscreen output");
\r
113 if(!strcmp(argv[i], "-window"))
\r
114 console.option("windowed output");
\r
116 if(!strcmp(argv[i], "-joystick"))
\r
117 console.option("joystick enabled");
\r
119 if(!strcmp(argv[i], "-joyport"))
\r
121 nJoyport = atoi(argv[++i]) + 1;
\r
122 if(nJoyport > 3) nJoyport = 3;
\r
125 if(!strcmp(argv[i], "-frameskip"))
\r
127 nFrameskip = atoi(argv[++i]) + 1;
\r
128 if(nFrameskip > 10) nFrameskip = 10;
\r
129 #ifdef SPEED_CONTROL
\r
139 /* Initialize Joystick support under SDL */
\r
140 if ( console.JoyEnabled() == 1 ) {
\r
142 if(SDL_NumJoysticks() <= 0)
\r
144 console.option("joystick disabled");
\r
145 printf("No joystick(s) or joypad(s) detected on your system. Using keyboards....\n");
\r
148 if((console.joystick = SDL_JoystickOpen(nJoyport)) == 0)
\r
150 console.option("joystick disabled");
\r
151 printf("Unable to open a Joystick on port : %d\n", nJoyport);
\r
154 printf("Using: %s\n", SDL_JoystickName(nJoyport));
\r
158 /* Open the display and start emulating some l337 Atari Jaguar games :P */
\r
159 console.open("Virtual Jaguar",tom_getVideoModeWidth(),tom_getVideoModeHeight(),format);
\r
164 nNormalLast=0;// Last value of timeGetTime()
\r
165 nNormalFrac=0; // Extra fraction we did
\r
167 nNormalLast=SDL_GetTicks();//timeGetTime();
\r
170 #ifdef SPEED_CONTROL
\r
171 nTime=SDL_GetTicks()-nNormalLast; // calcule le temps écoulé depuis le dernier affichage
\r
172 // nTime est en mili-secondes.
\r
173 // détermine le nombre de trames à passer + 1
\r
174 nCount=(nTime*600 - nNormalFrac) /10000;
\r
176 // si le nombre de trames à passer + 1 est nul ou négatif,
\r
177 // ne rien faire pendant 2 ms
\r
182 } // No need to do anything for a bit
\r
185 nNormalFrac+=nCount*10000; //
\r
186 nNormalLast+=nNormalFrac/600; // add the duration of nNormalFrac frames
\r
187 nNormalFrac%=600; //
\r
189 // Pas plus de 9 (10-1) trames non affichées
\r
192 for (i=0;i<nCount-1;i++)
\r
193 jaguar_exec(backbuffer,0);
\r
195 /* Setting up new backbuffer with new pixels and data */
\r
196 jaguar_exec(backbuffer,1);
\r
199 /* Simple frameskip */
\r
200 if ( nFrame == nFrameskip ) {
\r
203 vs = (int32 *)surface->lock();
\r
204 memcpy(vs,backbuffer,w*h*2);
\r
206 surface->copy(console);
\r
214 #ifdef SPEED_CONTROL
\r
218 int elapsedTime=clock()-startTime;
\r
219 int fps=(1000*totalFrames)/elapsedTime;
\r
220 printf("statistics: %i fps\n",fps);
\r
222 if ( console.JoyEnabled() == 1 ) {}
\r
228 console.close(); // Close SDL items as last!
\r
234 int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
\r
236 uint32 startTime, endTime, totalFrames;
\r
237 unsigned int nNormalLast=0;
\r
238 int nNormalFrac=0;
\r
239 int nTime=0,nCount=0; int i=0;
\r
241 jaguar_boot_dir=(char*)malloc(1024);
\r
242 _getcwd(jaguar_boot_dir,1024);
\r
244 log_init("jagem.log");
\r
246 SDL_Event app_input_event;
\r
250 version_display(log_get());
\r
255 int16 * backbuffer = (int16 *)malloc(845 * 525 * sizeof(int16));
\r
256 memset(backbuffer, 0xAA, tom_getVideoModeWidth() * tom_getVideoModeHeight() * sizeof(int16));
\r
257 surface=new Surface(tom_getVideoModeWidth(),tom_getVideoModeHeight(),format);
\r
258 console.option("DirectX");
\r
259 console.option("windowed output");
\r
260 // console.option("fullscreen output");
\r
261 console.option("center window");
\r
262 console.open("WIP VERSION",tom_getVideoModeWidth(),tom_getVideoModeHeight(),format);
\r
263 uint32 surfacePitch=(surface->pitch()>>1);
\r
267 nNormalLast=0;// Last value of timeGetTime()
\r
268 nNormalFrac=0; // Extra fraction we did
\r
269 nNormalLast=timeGetTime();
\r
272 while ( SDL_PollEvent(&app_input_event) )
\r
274 if ( app_input_event.type == SDL_QUIT )
\r
280 #define SPEED_CONTROL
\r
281 #ifdef SPEED_CONTROL
\r
282 nTime=timeGetTime()-nNormalLast; // calcule le temps écoulé depuis le dernier affichage
\r
283 // nTime est en mili-secondes.
\r
284 // détermine le nombre de trames à passer + 1
\r
285 nCount=(nTime*600 - nNormalFrac) /10000;
\r
287 // si le nombre de trames à passer + 1 est nul ou négatif,
\r
288 // ne rien faire pendant 2 ms
\r
292 } // No need to do anything for a bit
\r
295 nNormalFrac+=nCount*10000; //
\r
296 nNormalLast+=nNormalFrac/600; // add the duration of nNormalFrac frames
\r
297 nNormalFrac%=600; //
\r
299 // Pas plus de 9 (10-1) trames non affichées
\r
302 for (i=0;i<nCount-1;i++)
\r
303 jaguar_exec(backbuffer,0);
\r
305 jaguar_exec(backbuffer,1);
\r
308 int32 *vs = (int32 *)surface->lock();
\r
313 memcpy(vs,backbuffer,w*h*2);
\r
315 surface->copy(console);
\r
318 #ifdef SPEED_CONTROL
\r
322 int elapsedTime=clock()-startTime;
\r
323 int fps=(1000*totalFrames)/elapsedTime;
\r
324 fprintf(log_get(),"statistics: %i fps\n",fps);
\r