Annotation of frontvm/hardware/main.c, revision 1.1

1.1     ! root        1: /*
        !             2:   Hatari - main.c
        !             3: 
        !             4:   This file is distributed under the GNU Public License, version 2 or at
        !             5:   your option any later version. Read the file gpl.txt for details.
        !             6: 
        !             7:   Main initialization and event handling routines.
        !             8: */
        !             9: 
        !            10: #include <time.h>
        !            11: #include <signal.h>
        !            12: #include <sys/time.h>
        !            13: #include <unistd.h>
        !            14: 
        !            15: #include <SDL.h>
        !            16: 
        !            17: #include "main.h"
        !            18: #include "configuration.h"
        !            19: #include "decode.h"
        !            20: #include "dialog.h"
        !            21: #include "audio.h"
        !            22: #include "file.h"
        !            23: #include "hostcall.h"
        !            24: #include "input.h"
        !            25: #include "reset.h"
        !            26: #include "keymap.h"
        !            27: #include "m68000.h"
        !            28: #include "misc.h"
        !            29: #include "screen.h"
        !            30: #include "sdlgui.h"
        !            31: #include "shortcut.h"
        !            32: #include "video.h"
        !            33: 
        !            34: #include "../cpu/hatari-glue.h"
        !            35: 
        !            36: 
        !            37: #define FORCE_WORKING_DIR                 /* Set default directory to cwd */
        !            38: 
        !            39: 
        !            40: BOOL bQuitProgram=FALSE;                  /* Flag to quit program cleanly */
        !            41: BOOL bUseFullscreen=FALSE;
        !            42: BOOL bEmulationActive=TRUE;               /* Run emulation when started */
        !            43: BOOL bAppActive = FALSE;
        !            44: char szBootDiscImage[MAX_FILENAME_LENGTH] = { "" };
        !            45: 
        !            46: char szWorkingDir[MAX_FILENAME_LENGTH] = { "" };
        !            47: char szCurrentDir[MAX_FILENAME_LENGTH] = { "" };
        !            48: 
        !            49: unsigned char STRam[MEMORY_SIZE];        /* This is our ST Ram, includes all TOS/hardware areas for ease */
        !            50: 
        !            51: 
        !            52: /*-----------------------------------------------------------------------*/
        !            53: /*
        !            54:   Error handler
        !            55: */
        !            56: void Main_SysError(char *Error,char *Title)
        !            57: {
        !            58:   fprintf(stderr,"%s : %s\n",Title,Error);
        !            59: }
        !            60: 
        !            61: 
        !            62: /*-----------------------------------------------------------------------*/
        !            63: /*
        !            64:   Bring up message(handles full-screen as well as Window)
        !            65: */
        !            66: int Main_Message(char *lpText, char *lpCaption/*,unsigned int uType*/)
        !            67: {
        !            68:   int Ret=0;
        !            69: 
        !            70:   /* Show message */
        !            71:   fprintf(stderr,"%s: %s\n", lpCaption, lpText);
        !            72: 
        !            73:   return(Ret);
        !            74: }
        !            75: 
        !            76: 
        !            77: /*-----------------------------------------------------------------------*/
        !            78: /*
        !            79:   Pause emulation, stop sound
        !            80: */
        !            81: void Main_PauseEmulation(void)
        !            82: {
        !            83:   if( bEmulationActive )
        !            84:   {
        !            85:     Audio_EnableAudio(FALSE);
        !            86:     bEmulationActive = FALSE;
        !            87:   }
        !            88: }
        !            89: 
        !            90: /*-----------------------------------------------------------------------*/
        !            91: /*
        !            92:   Start emulation
        !            93: */
        !            94: void Main_UnPauseEmulation(void)
        !            95: {
        !            96:   if( !bEmulationActive )
        !            97:   {
        !            98:     Audio_EnableAudio(ConfigureParams.Sound.bEnableSound);
        !            99:     bFullScreenHold = FALSE;      /* Release hold  */
        !           100: 
        !           101:     bEmulationActive = TRUE;
        !           102:   }
        !           103: }
        !           104: 
        !           105: /* ----------------------------------------------------------------------- */
        !           106: /*
        !           107:   Message handler
        !           108:   Here we process the SDL events (keyboard, mouse, ...) and map it to
        !           109:   Atari IKBD events.
        !           110: */
        !           111: void Main_EventHandler()
        !           112: {
        !           113:   SDL_Event event;
        !           114: 
        !           115:   if( SDL_PollEvent(&event) )
        !           116:    switch( event.type )
        !           117:    {
        !           118:     case SDL_QUIT:
        !           119:        bQuitProgram = TRUE;
        !           120:        break;
        !           121:     case SDL_MOUSEMOTION:               /* Read/Update internal mouse position */
        !           122:        input.motion_x += event.motion.xrel;
        !           123:        input.motion_y += event.motion.yrel;
        !           124:        break;
        !           125:     case SDL_MOUSEBUTTONDOWN:
        !           126:        Input_MousePress (event.button.button);
        !           127:        break;
        !           128:     case SDL_MOUSEBUTTONUP:
        !           129:        Input_MouseRelease (event.button.button);
        !           130:        break;
        !           131:     case SDL_KEYDOWN:
        !           132:        Keymap_KeyDown(&event.key.keysym);
        !           133:        break;
        !           134:     case SDL_KEYUP:
        !           135:        Keymap_KeyUp(&event.key.keysym);
        !           136:        break;
        !           137:    }
        !           138:   Input_Update ();
        !           139: }
        !           140: 
        !           141: 
        !           142: /*-----------------------------------------------------------------------*/
        !           143: /*
        !           144:   Check for any passed parameters
        !           145: */
        !           146: void Main_ReadParameters(int argc, char *argv[])
        !           147: {
        !           148:   int i;
        !           149: 
        !           150:   /* Scan for any which we can use */
        !           151:   for(i=1; i<argc; i++)
        !           152:   {
        !           153:     if (strlen(argv[i])>0)
        !           154:     {
        !           155:       if (!strcmp(argv[i],"--help") || !strcmp(argv[i],"-h"))
        !           156:       {
        !           157:         printf("Usage:\n frontier [options]\n"
        !           158:                "Where options are:\n"
        !           159:                "  --help or -h          Print this help text and exit.\n"
        !           160:                "  --fullscreen or -f    Try to use fullscreen mode.\n"
        !           161:                "  --nosound             Disable sound (faster!).\n"
        !           162:               );
        !           163:         exit(0);
        !           164:       }
        !           165:       else if (!strcmp(argv[i],"--fullscreen") || !strcmp(argv[i],"-f"))
        !           166:       {
        !           167:         bUseFullscreen=TRUE;
        !           168:       }
        !           169:       else if ( !strcmp(argv[i],"--nosound") )
        !           170:       {
        !           171:         bDisableSound=TRUE;
        !           172:         ConfigureParams.Sound.bEnableSound = FALSE;
        !           173:       }
        !           174:       else
        !           175:       {
        !           176:              /* some time make it possible to read alternative
        !           177:               * names for fe2.bin from command line */
        !           178:              fprintf(stderr,"Illegal parameter: %s\n",argv[i]);
        !           179:       }
        !           180:     }
        !           181:   }
        !           182: }
        !           183: 
        !           184: 
        !           185: /*-----------------------------------------------------------------------*/
        !           186: /*
        !           187:   Initialise emulation
        !           188: */
        !           189: void Main_Init(void)
        !           190: {
        !           191:   /* Init SDL's video subsystem. Note: Audio and joystick subsystems
        !           192:      will be initialized later (failures there are not fatal). */
        !           193:   if(SDL_Init(SDL_INIT_VIDEO) < 0)
        !           194:   {
        !           195:     fprintf(stderr, "Could not initialize the SDL library:\n %s\n", SDL_GetError() );
        !           196:     exit(-1);
        !           197:   }
        !           198: 
        !           199:   Misc_SeedRandom(1043618);
        !           200:   SDLGui_Init();
        !           201:   Screen_Init();
        !           202:   Init680x0();                  /* Init CPU emulation */
        !           203:   Audio_Init();
        !           204:   Keymap_Init();
        !           205: 
        !           206:   GemDOS_Init();
        !           207:   GemDOS_InitDrives();
        !           208: 
        !           209:   if(Reset_VM())              /* Reset all systems */
        !           210:   {
        !           211:     /* If loading of the TOS failed, we bring up the GUI to let the
        !           212:      * user choose another TOS ROM file. */
        !           213:     Dialog_DoProperty();
        !           214:   }
        !           215:   if(bQuitProgram)
        !           216:   {
        !           217:     SDL_Quit();
        !           218:     exit(-2);
        !           219:   }
        !           220: }
        !           221: 
        !           222: 
        !           223: /*-----------------------------------------------------------------------*/
        !           224: /*
        !           225:   Un-Initialise emulation
        !           226: */
        !           227: void Main_UnInit(void)
        !           228: {
        !           229:   Screen_ReturnFromFullScreen();
        !           230:   GemDOS_UnInitDrives();
        !           231:   Audio_UnInit();
        !           232:   SDLGui_UnInit();
        !           233:   Screen_UnInit();
        !           234: 
        !           235:   /* SDL uninit: */
        !           236:   SDL_Quit();
        !           237: }
        !           238: 
        !           239: 
        !           240: /*-----------------------------------------------------------------------*/
        !           241: /*
        !           242:   Main
        !           243: */
        !           244: int main(int argc, char *argv[])
        !           245: {
        !           246: 
        !           247:   /* Generate random seed */
        !           248:   srand( time(NULL) );
        !           249: 
        !           250:   /* Get working directory, if in MSDev force */
        !           251:   Misc_FindWorkingDirectory(argv[0]);
        !           252: #ifdef FORCE_WORKING_DIR
        !           253:   getcwd(szWorkingDir, MAX_FILENAME_LENGTH);
        !           254: #endif
        !           255: 
        !           256:   /* Set default configuration values: */
        !           257:   Configuration_SetDefault();
        !           258: 
        !           259:   /* Check for any passed parameters */
        !           260:   Main_ReadParameters(argc, argv);
        !           261: 
        !           262:   /* Init emulator system */
        !           263:   Main_Init();
        !           264: 
        !           265:   /* Switch immediately to fullscreen if user wants to */
        !           266:   if( bUseFullscreen )
        !           267:     Screen_EnterFullScreen();
        !           268: 
        !           269:   /* Run emulation */
        !           270:   Main_UnPauseEmulation();
        !           271:   Start680x0();                 /* Start emulation */
        !           272: 
        !           273:   /* Un-init emulation system */
        !           274:   Main_UnInit();
        !           275: 
        !           276:   return(0);
        !           277: }
        !           278: 
        !           279: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.