⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vgb.c

📁 gameboy游戏模拟器,COMMON.H CONV.C DASM.C DEBUG.C FILE_ID.DIZ FMFREQS.C FMFREQS.H GB.C GB.H GBLIST.C HEL
💻 C
📖 第 1 页 / 共 2 页
字号:
/** VGB: portable GameBoy emulator ***************************/
/**                                                         **/
/**                           VGB.c                         **/
/**                                                         **/
/** This file contains generic main() procedure statrting   **/
/** the emulation.                                          **/
/**                                                         **/
/** Copyright (C) Marat Fayzullin 1995                      **/
/**               Marcel de Kogel 1996                      **/
/**     You are not allowed to distribute this software     **/
/**     commercially. Please, notify me, if you make any    **/
/**     changes to this file.                               **/
/**                                                         **/
/** Edited for use with MS-DOS by Marcel de Kogel           **/
/*************************************************************/


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <signal.h>
#include <sys/stat.h>
#include <conio.h>

#include "GB.h"
#include "Help.h"

#define MAX_CONFIG_FILE_SIZE    4096
#define MAX_FILE_NAME           256

struct colorscheme_struct
{
 char *color0;
 char *color1;
 char *color2;
 char *color3;
};

static struct colorscheme_struct defcolorschemes[] =
{
 { "white","#B0B0B0","#606060","black" },
 { "#c2e3b3","#9cb88e","#688063","#506d4c" },
 { "#ffff50","#bdbd48","#7b7bac","#292952" },
 { "#cbec50", "#a3d55a", "#5c9447", "#056d21" },
 { "#a0a000", "#707000", "#555500", "#191900" },
 { "#e6a428", "#ba8522", "#8d661b", "#614615" },

};

static struct colorscheme_struct colorschemes[256];

char *Options[]=
{
  "verbose","vperiod","uperiod","help","shm","noshm",
  "trap","saver","nosaver","color0","color1","color2",
  "color3","cheat","delay","nodelay","crc","nocrc",
  "video","sound","volume","background","ifreq","swapbuttons",
  "colorscheme","definecolorscheme","spritecolor0","spritecolor1",
  "spritecolor2","spritecolor3","spritecolorscheme","brightness",
  "spritebrightness","windowbrightness","windowcolorscheme",
  "windowcolor0","windowcolor1","windowcolor2","windowcolor3","stereo",
  "backgroundcolorscheme","backgroundcolor0","backgroundcolor1","backgroundcolor2","backgroundcolor3",
  "autoa","autob","logsnd","keys","backgroundbrightness",
  NULL
};

char *AbvOptions[]=
{
  "vb","vp","up","he","shm","noshm",
  "trap","saver","nosaver","c0","c1","c2",
  "c3","cheat","delay","nodelay","crc","nocrc",
  "video","sound","vol","bg","ifreq","swap",
  "cs","dcs","sc0","sc1","sc2","sc3","scs","br","sbr","wbr","wcs",
  "wc0","wc1","wc2","wc3","stereo",
  "bcs","bc0","bc1","bc2","bc3",
  "autoa","autob","logsnd","keys","bbr",
  NULL
};

extern int   UseSHM;
extern int   SaveCPU;
extern char *ColorNames[8];
#ifdef MSDOS
extern int videomode;
extern int soundmode;
extern byte mastervolume;
extern int swapbuttons;
extern int IFreq;
extern int IntSync;
extern int brightness,spritebrightness,windowbrightness,backgroundbrightness;
extern int stereomode;
extern char *szKeys;
#endif

#define _DefExt         ".gb"

static int _argc;
static char *_argv[4096];
static char MainConfigFile[MAX_CONFIG_FILE_SIZE];
static char SubConfigFile[MAX_CONFIG_FILE_SIZE];
static char szTempFileName[MAX_FILE_NAME];
static char *CartName="CART.GB";
static char _CartName[MAX_FILE_NAME];
static char ProgramPath[MAX_FILE_NAME];
static char CartNameNoExt[MAX_FILE_NAME];
char szGifFile[MAX_FILE_NAME];
static char _SaveName[MAX_FILE_NAME];
extern char *SaveName;

static void SelectColorScheme (int nr)
{
 ColorNames[0]=ColorNames[4]=ColorNames[8]=colorschemes[nr].color0;
 ColorNames[1]=ColorNames[5]=ColorNames[9]=colorschemes[nr].color1;
 ColorNames[2]=ColorNames[6]=ColorNames[10]=colorschemes[nr].color2;
 ColorNames[3]=ColorNames[7]=ColorNames[11]=colorschemes[nr].color3;
}

static void SelectSpriteColorScheme (int nr)
{
 ColorNames[4]=colorschemes[nr].color0;
 ColorNames[5]=colorschemes[nr].color1;
 ColorNames[6]=colorschemes[nr].color2;
 ColorNames[7]=colorschemes[nr].color3;
}

static void SelectWindowColorScheme (int nr)
{
 ColorNames[8]=colorschemes[nr].color0;
 ColorNames[9]=colorschemes[nr].color1;
 ColorNames[10]=colorschemes[nr].color2;
 ColorNames[11]=colorschemes[nr].color3;
}

static void SelectBackgroundColorScheme (int nr)
{
 ColorNames[0]=colorschemes[nr].color0;
 ColorNames[1]=colorschemes[nr].color1;
 ColorNames[2]=colorschemes[nr].color2;
 ColorNames[3]=colorschemes[nr].color3;
}

static void DefineColorScheme (int nr,char *c0,char *c1,char *c2,char *c3)
{
 if (nr>=128 && nr<=255)
 {
  colorschemes[nr].color0=c0;
  colorschemes[nr].color1=c1;
  colorschemes[nr].color2=c2;
  colorschemes[nr].color3=c3;
 }
}

static int ParseOptions (int argc,char *argv[])
{
 int N,I,J;
 int misparm;
  for(N=1,I=0;N<argc;N++)
  {
    misparm=0;
    if(*argv[N]!='-')
    {
      if(I++)
      {
       printf("Excessive filename '%s'\n",argv[N]);
       return 0;
      }
    }
    else
    {    
      for(J=0;Options[J];J++)
        if(!strcmp(argv[N]+1,Options[J])) break;
      if (!Options[J])
       for(J=0;AbvOptions[J];J++)
         if(!strcmp(argv[N]+1,AbvOptions[J])) break;
      switch(J)
      {
        case 0:  N++;
                 if(N<argc)
                 { Verbose=atoi(argv[N]);TrapBadOps=Verbose&0x04; }
                 else misparm=1;
                 break;
        case 1:  N++;
                 if(N>=argc)
                   misparm=1;
                 else
                 {
                   VPeriod=atoi(argv[N]);
                   if((VPeriod<1000)||(VPeriod>320000)) VPeriod=69905;
                 }
                 break;
        case 2:  N++;
                 if(N>=argc)
                   misparm=1;
                 else
                 {
                   UPeriod=atoi(argv[N]);
                   if(UPeriod>20) UPeriod=2;
                 }
                 break;
        case 3:  printf ("VGB MS-DOS 0.8b1\n"
                         "Core emulator code copyright (C) 1995,1996  Marat Fayzullin\n"
                         "MS-DOS port copyright (C) 1996  Marcel de Kogel\n");
                 for(J=0;HelpText[J];J++)
                 {
                  if (!strcmp(HelpText[J],""))
                  {
                   puts ("");
                   printf("-- more --"); fflush(stdout);
                   getch (); printf ("\n");
                  }
                  puts(HelpText[J]);
                 }
                 return 0;
        case 13: N++;
                 if(N>=argc)
                   misparm=1;
                 else
                   if(!AddCheat(argv[N]))
                   {
                     printf("Wrong cheat data supplied\n");
                     return 0;
                   }
                 break;
        case 14: LineDelay=1;break;
        case 15: LineDelay=0;break;
        case 16: CheckCRC=1;break;
        case 17: CheckCRC=0;break;
#ifdef DEBUG
        case 6:  N++;
                 if(N>=argc)
                   misparm=1;
                 else 
                   sscanf(argv[N],"%hX",&Trap);
                 break;
#endif
#ifdef MSDOS
        case 9:  N++;
                 if(N<argc) ColorNames[0]=ColorNames[4]=ColorNames[8]=argv[N];
                 else misparm=1;
                 break;
        case 10: N++;
                 if(N<argc) ColorNames[1]=ColorNames[5]=ColorNames[9]=argv[N];
                 else misparm=1;
                 break;
        case 11: N++;
                 if(N<argc) ColorNames[2]=ColorNames[6]=ColorNames[10]=argv[N];
                 else misparm=1;
                 break;
        case 12: N++;
                 if(N<argc) ColorNames[3]=ColorNames[7]=ColorNames[11]=argv[N];
                 else misparm=1;
                 break;
        case 18: N++;
                 if(N<argc)
                  videomode=atoi(argv[N]);
                 else
                  misparm=1;
                 break;
        case 19: N++;
                 if(N<argc)
                  soundmode=atoi(argv[N]);
                 else
                  misparm=1;
                 break;
        case 20: N++;
                 if(N<argc)
                  mastervolume=atoi(argv[N]);
                 else
                  misparm=1;
                 break;
        case 21: N++;
                 if(N<argc)
                 {
                  _fixpath (argv[N],szGifFile);
                  strlwr (szGifFile);
                  if (strchr(szGifFile,'.')==0)
                   strcat (szGifFile,".gif");
                 }
                 else
                  misparm=1;
                 break;
        case 22: N++;
                 if(N<argc)
                  IFreq=atoi(argv[N]);
                 else
                  misparm=1;
                 break;
        case 23: N++;
                 if(N<argc)
                  swapbuttons=atoi(argv[N]);
                 else
                  misparm=1;
                 break;
        case 24: N++;
                 if(N<argc)
                  SelectColorScheme (atoi(argv[N]));
                 else
                  misparm=1;
                 break;
        case 25: if((N+5)<argc)
                 {

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -