void setup_timer( void ) { Huint data; Huint delta; Huint timer1; Huint timer2; Huint timer3; printf( "Setting up Timer\n" ); timer_set_delta( 0, 5 * DELTA ); delta = timer_get_delta( 0 ); timer_set_data( 0, 0xCAFEBABE ); data = timer_get_data( 0 ); timer_set_command( 0, HT_TIMER_CMD_PERIODIC | HT_TIMER_CMD_ENABLE | HT_TIMER_CMD_LOAD | HT_TIMER_CMD_RUN ); timer1 = timer_get_value( 0 ); timer2 = timer_get_value( 0 ); timer3 = timer_get_value( 0 ); printf( "Timer Delta: %u\n", delta ); printf( "Timer Data: %#08x\n", data ); printf( "Timer Value 1: %#08x\n", timer1 ); printf( "Timer Value 2: %#08x\n", timer2 ); printf( "Timer Value 3: %#08x\n", timer3 ); timer_set_delta( 0, DELTA ); timer_set_command( 0, HT_TIMER_CMD_PERIODIC | HT_TIMER_CMD_ENABLE | HT_TIMER_CMD_LOAD | HT_TIMER_CMD_RUN ); }
/*------------------------------------------------------------------------- Do all one time initializations. ---------------------------------------------------------------------------*/ void neogeo_initialize ( void ) { neogeo_audio_track = NULL; /* Create and register the watchdog timer */ timer_create ( &neogeo_watchdog_timer, neogeo_watchdog_callback ); timer_register ( &neogeo_watchdog_timer ); /* Create and register the drawline timer. */ timer_create ( &neogeo_drawline_timer, neogeo_drawline_callback ); timer_register ( &neogeo_drawline_timer ); /* Create and register the screen timer. */ timer_create ( &neogeo_screen_timer, neogeo_screen_callback ); timer_register ( &neogeo_screen_timer ); /* Create and register the VBL timer */ timer_create ( &neogeo_VBL_timer, neogeo_VBL_callback ); timer_register ( &neogeo_VBL_timer ); /* Create and register the HBL timer */ timer_create ( &neogeo_HIRQ_timer, neogeo_HIRQ_callback ); timer_register ( &neogeo_HIRQ_timer ); /* Create and register the CDROM IRQ1 Timer */ timer_create ( &neogeo_cdrom_irq1_timer, neogeo_cdrom_irq1_callback ); timer_register ( &neogeo_cdrom_irq1_timer ); /* Create and register the CDROM IRQ2 Timer */ timer_create ( &neogeo_cdrom_irq2_timer, neogeo_cdrom_irq2_callback ); timer_register ( &neogeo_cdrom_irq2_timer ); /* Create and register the timer for audio commands */ timer_create ( &neogeo_audio_command_timer, neogeo_audio_command_timer_callback ); timer_register ( &neogeo_audio_command_timer ); /* Create and register the YM2610 timers */ timer_create ( &neogeo_ym2610_timer_a, neogeo_ym2610_timer_callback ); timer_set_data ( &neogeo_ym2610_timer_a, 0 ); timer_register ( &neogeo_ym2610_timer_a ); timer_create ( &neogeo_ym2610_timer_b, neogeo_ym2610_timer_callback ); timer_set_data ( &neogeo_ym2610_timer_b, 1 ); timer_register ( &neogeo_ym2610_timer_b ); /* Initialize the memory lookup table */ memory_init_lookup(); /* Initialize the 68000 emulation core */ m68k_set_cpu_type ( M68K_CPU_TYPE_68000 ); m68k_init(); /* Inizialize the z80 core */ z80_init ( 0, Z80_CLOCK, NULL, neogeo_z80_irq_callback ); /* Initialize the YM2610 */ YM2610Init ( 8000000, neogeo_audio_frequency, neogeo_PCM_RAM, 0x100000, YM2610TimerHandler, YM2610IrqHandler ); /* Patch protection check 1 (Disc recognition) */ m68k_debug_write_memory_16 ( 0xC0D280, 0x4E71 ); /* Patch protection check 2 ("Now loading" screen) */ m68k_debug_write_memory_16 ( 0xC0EB82, 0x4E71 ); /* CD-Loading "speed hack" ^.^ */ m68k_debug_write_memory_32 ( 0xC0E764, 0x4E722000 ); m68k_debug_write_memory_16 ( 0xC0E768, 0x4E71 ); /* Reset all internal register and variables to a known state */ neogeo_cold_reset(); /* Test if the underlying OS has accurate sleep() */ neogeo_test_delay_accurate(); }