1 /* FCE Ultra - NES/Famicom Emulator
3 * Copyright notice for this file:
4 * Copyright (C) 1998 BERO
5 * Copyright (C) 2002 Ben Parnell
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; either version 2 of the License, or
10 * (at your option) any later version.
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, write to the Free Software
19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
22 /* SVGA High Level Routines
34 #define M_PI 3.14159265358979323846
57 static char errmsg[65];
59 void FCEU_PrintError(char *format, ...)
66 vsprintf(temp,format,ap);
67 FCEUD_PrintError(temp);
72 void FCEU_DispMessage(char *format, ...)
77 vsprintf(errmsg,format,ap);
82 printf("%s\n", errmsg);
85 void FCEU_CancelDispMessage(void)
90 void FCEUI_SetRenderedLines(int ntscf, int ntscl, int palf, int pall)
92 FSettings.UsrFirstSLine[0]=ntscf;
93 FSettings.UsrLastSLine[0]=ntscl;
94 FSettings.UsrFirstSLine[1]=palf;
95 FSettings.UsrLastSLine[1]=pall;
98 FSettings.FirstSLine=FSettings.UsrFirstSLine[1];
99 FSettings.LastSLine=FSettings.UsrLastSLine[1];
103 FSettings.FirstSLine=FSettings.UsrFirstSLine[0];
104 FSettings.LastSLine=FSettings.UsrLastSLine[0];
109 void FCEUI_SetVidSystem(int a)
116 int FCEUI_GetCurrentVidSystem(int *slstart, int *slend)
119 *slstart=FSettings.FirstSLine;
121 *slend=FSettings.LastSLine;
126 void FCEUI_SetNetworkPlay(int type)
128 FSettings.NetworkPlay=type;
132 void FCEUI_SetGameGenie(int a)
134 FSettings.GameGenie=a?1:0;
145 uint8 CommandQueue=0;
148 void FCEUI_SetSnapName(int a)
150 FSettings.SnapName=a;
153 void FCEUI_SaveExtraDataUnderBase(int a)
155 FSettings.SUnderBase=a;
159 void FCEUI_SelectState(int w)
161 // if(netplay!=2 && FCEUGameInfo.type!=GIT_NSF)
162 // CommandQueue=42+w;
165 void FCEUI_SaveState(void)
167 // if(netplay!=2 && FCEUGameInfo.type!=GIT_NSF)
174 void FCEUI_LoadState(void)
176 // if(netplay!=2 && FCEUGameInfo.type!=GIT_NSF)
182 int32 FCEUI_GetDesiredFPS(void)
185 return(838977920); // ~50.007
187 return(1008307711); // ~60.1
190 static int dosnapsave=0;
191 void FCEUI_SaveSnapshot(void)
196 /* I like the sounds of breaking necks. */
197 static void ReallySnap(void)
199 int x=SaveSnapshot();
201 FCEU_DispMessage("Error saving screen snapshot.");
203 FCEU_DispMessage("Screen snapshot %d saved.",x-1);
206 void DriverInterface(int w, void *d)
210 case DES_RESET:if(netplay!=2) CommandQueue=30;break;
211 case DES_POWER:if(netplay!=2) CommandQueue=31;break;
213 case DES_VSUNIDIPSET:CommandQueue=10+(int)d;break;
214 case DES_VSUNITOGGLEDIPVIEW:CommandQueue=10;break;
215 case DES_VSUNICOIN:CommandQueue=19;break;
218 if(ntsccol && FCEUGameInfo.type!=GIT_VSUNI && !PAL && FCEUGameInfo.type!=GIT_NSF)
225 which=controlselect==1?ntschue:ntsctint;
238 if(ntsccol && FCEUGameInfo.type!=GIT_VSUNI && !PAL && FCEUGameInfo.type!=GIT_NSF)
243 switch(controlselect)
246 if(ntschue>128) ntschue=128;
250 if(ntsctint>128) ntsctint=128;
265 void FCEU_PutImageDummy(void)
267 if(howlong) howlong--; /* DrawMessage() */
270 extern uint64 frcount;
278 void FCEU_PutImage(void)
280 if(FCEUGameInfo.type==GIT_NSF)
283 /* Save snapshot after NSF screen is drawn. Why would we want to
294 /* Save snapshot before overlay stuff is written. */
300 if(FCEUGameInfo.type==GIT_VSUNI)
301 FCEU_VSUniDraw(XBuf);
303 //FCEU_DrawSaveStates(XBuf);
304 //FCEU_DrawMovies(XBuf);
305 //FCEU_DrawNTSCControlBars(XBuf);
306 //FCEU_DrawRecordingStatus(XBuf);
308 //if(controllength) {controllength--;DrawBars();}
313 extern uint64 frcount;
321 void DoCommand(uint8 c)
325 case 1:FDSControl(FDS_SELECT);break;
326 case 2:FDSControl(FDS_IDISK);break;
327 case 3:FDSControl(FDS_EJECT);break;
329 case 10:DIPS^=2;break;
330 case 11:vsdip^=1;DIPS|=2;break;
331 case 12:vsdip^=2;DIPS|=2;break;
332 case 13:vsdip^=4;DIPS|=2;break;
333 case 14:vsdip^=8;DIPS|=2;break;
334 case 15:vsdip^=0x10;DIPS|=2;break;
335 case 16:vsdip^=0x20;DIPS|=2;break;
336 case 17:vsdip^=0x40;DIPS|=2;break;
337 case 18:vsdip^=0x80;DIPS|=2;break;
338 case 19:coinon=6;break;
339 case 30:ResetNES();break;
340 case 31:PowerNES();break;
341 case 40:CheckStates();StateShow=0;SaveState();break;
342 case 41:CheckStates();StateShow=0;LoadState();break;
343 case 42: case 43: case 44: case 45: case 46: case 47: case 48: case 49:
344 case 50: case 51:StateShow=180;CurrentState=c-42;CheckStates();break;