www.pudn.com > ncdzsrc.rar > neogeocd.c
/***************************************************************************
neogeocd.c
エミュレータのメインルーチン
***************************************************************************/
#include "neogeocd.h"
/***************************************************************************
グローバル関数
***************************************************************************/
/*--------------------------------------------------------
エミュレーションの実行
引 数: なし
戻り値: 終了コード 1=終了,0=再起動
-------------------------------------------------------*/
int neogeo_main(void)
{
int quit = 0;
first_time_boot = 1;
cdrom_current_drive = -1;
game_index = -1;
cdrom_loading_state = CDROM_IDLE;
timer_init();
logerror("Start memory emulation.\n");
if (memory_init())
{
logerror("Start CD-ROM emulation.\n");
if (cdrom_init())
{
logerror("Start input device emulation.\n");
if (input_init())
{
logerror("Start video emulation.\n");
if (video_init())
{
logerror("Start sound emulation.\n");
if (sound_init())
{
logerror("Initialize user interface.\n");
if (ui_init())
{
cpu_init();
while (osd_get_app_state() <= OSD_RESTART)
{
osd_set_app_state(OSD_EXEC);
neogeo_run();
}
cpu_exit();
}
else
{
quit = 1;
logerror("Could not initialize user interface.\n");
}
ui_exit();
}
else
{
quit = 1;
logerror("Could not start sound emulation.\n");
}
sound_shutdown();
}
else if (!quit)
{
quit = 1;
logerror("Could not start video emulation.\n");
}
video_shutdown();
}
else
{
quit = 1;
logerror("Could not start input devicee emulation.\n");
}
input_shutdown();
}
else if (!quit)
{
quit = 1;
logerror("Could not start CD-ROM emulation.\n");
}
cdrom_shutdown();
}
else if (!quit)
{
quit = 1;
logerror("Could not start memory emulation.\n");
}
memory_shutdown();
timer_free();
if (quit) osd_set_app_state(OSD_QUIT);
return osd_get_app_state();
}
/*--------------------------------------------------------
画面とサウンドの更新
引 数: なし
戻り値: 終了コード 1=終了,0=再起動
-------------------------------------------------------*/
void updatescreen(void)
{
if (cdrom_loading_state != CDROM_IDLE)
{
loading_updatescreen();
return;
}
if (driver_flag & PATCH_AOF2)
m68000_write_memory_8(0x108000 + 0x280, 0);
neogeo_cdda_check();
sound_update();
if (osd_skip_this_frame() == 0)
{
if (driver_type > 1)
neogeo_raster_screenrefresh();
else
neogeo_screenrefresh();
}
if (boot_bios)
{
bios_run();
if (osd_get_app_state())
return;
}
else
{
bios_check_exit();
}
ui_menu();
ui_show_popup();
osd_update_video(1);
}