public static void vblank_begin_callback() { screenstate.vblank_start_time = Timer.global_basetime;// Timer.get_current_time(); Cpuexec.on_vblank(); video_frame_update(); Timer.timer_adjust_periodic(vblank_begin_timer, frame_update_time, Attotime.ATTOTIME_NEVER); }
public static void timer_adjust_periodic(emu_timer which, Atime start_delay, Atime period) { Atime time = get_current_time(); if (which == callback_timer) { callback_timer_modified = true; } which.enabled = true; if (start_delay.seconds < 0) { start_delay = Attotime.ATTOTIME_ZERO; } which.start = time; which.expire = Attotime.attotime_add(time, start_delay); if (which.expire.attoseconds == 0x003be7e176706f58) { int i1 = 1; } which.period = period; timer_list_remove(which); timer_list_insert(which); if (lt.IndexOf(which) == 0) { if (Cpuexec.activecpu >= 0 && Cpuexec.activecpu < Cpuexec.ncpu) { Cpuexec.activecpu_abort_timeslice(Cpuexec.activecpu); } } }
public static void audio_command_w(byte data) { Sound.soundlatch_w(data); audio_cpu_nmi_pending = true; audio_cpu_check_nmi(); Cpuexec.cpu_boost_interleave(Attotime.ATTOTIME_ZERO, new Atime(0, (long)(50 * 1e12))); }
public static void audio_command_w(byte data) { /*StreamWriter sw1 = new StreamWriter("1.txt", true); * sw1.WriteLine(Video.screenstate.frame_number.ToString() + "\t0\t" + data.ToString("X2")); * sw1.Close();*/ Sound.soundlatch_w(data); audio_cpu_nmi_pending = true; audio_cpu_check_nmi(); Cpuexec.cpu_boost_interleave(Attotime.ATTOTIME_ZERO, new Atime(0, (long)(50 * 1e12))); }
public static void soft_reset() { Memory.memory_reset(); Cpuint.cpuint_reset(); Machine.machine_reset_callback(); Cpuexec.cpuexec_reset(); Watchdog.watchdog_internal_reset(); //Sound.sound_reset(); playState = PlayState.PLAY_RUNNING; Timer.timer_set_global_time(Timer.get_current_time()); }
public static Atime get_current_time() { if (callback_timer != null) { return(callback_timer_expire_time); //return global_basetime; } if (Cpuexec.activecpu >= 0 && Cpuexec.activecpu < Cpuexec.ncpu) { return(Cpuexec.cpunum_get_localtime(Cpuexec.activecpu)); } return(global_basetime); }
public static void init_machine() { //Inptport.input_init(); Generic.generic_machine_init(); Timer.timer_init(); soft_reset_timer = Timer.timer_alloc_common(soft_reset, "soft_reset", false); //Inptport.input_port_init(); Cpuexec.cpuexec_init(); Watchdog.watchdog_init(); Cpuint.cpuint_init(); Video.video_init(); //Sound.sound_init(); State.state_init(); Machine.machine_start(); }
public static void mame_execute() { soft_reset(); mame_pause(true); while (!exit_pending) { if (!paused) { Cpuexec.cpuexec_timeslice(); } else { Video.video_frame_update(); } handlestate(); } }
public static void init_machine() { //fileio_init(); //config_init(); Inptport.input_init(); //output_init(); //render_init(); //ui_init(); Generic.generic_machine_init(); Timer.timer_init(); soft_reset_timer = Timer.timer_alloc_common(soft_reset, "soft_reset", false); //osd_init(); //time(&mame->base_time); Inptport.input_port_init(); //if (newbase != 0) // mame->base_time = newbase; /* intialize UI input */ //ui_input_init(); //rom_init(); //memory_init(); Cpuexec.cpuexec_init(); Watchdog.watchdog_init(); //cps1_gfx_decode(); //device_list_start(); Video.video_init(); Sound.sound_init(); State.state_init(); Machine.machine_start(); }
public static void vblank_begin_callback() { screenstate.vblank_start_time = Timer.global_basetime; Cpuexec.on_vblank(); video_frame_update(); switch (Machine.sBoard) { case "CPS-1": case "CPS-1(QSound)": case "CPS2": case "Namco System 1": case "IGS011": case "PGM": Timer.timer_adjust_periodic(vblank_begin_timer, frame_update_time, Attotime.ATTOTIME_NEVER); break; case "Neo Geo": Timer.timer_adjust_periodic(vblank_begin_timer, video_screen_get_time_until_pos(screenstate.visarea.max_y + 1, 0), Attotime.ATTOTIME_NEVER); break; } }
public static void cpunum_empty_event_queue() { List <irq> lsirq = new List <irq>(); foreach (irq irq1 in lirq) { if (Attotime.attotime_compare(irq1.time, Timer.global_basetime) <= 0) { if (irq1.line == (int)LineState.INPUT_LINE_RESET) { if (irq1.state == LineState.ASSERT_LINE) { Cpuexec.cpunum_suspend(irq1.cpunum, Cpuexec.SUSPEND_REASON_RESET, 1); } else { if ((irq1.state == LineState.CLEAR_LINE && Cpuexec.cpunum_is_suspended(irq1.cpunum, Cpuexec.SUSPEND_REASON_RESET)) || irq1.state == LineState.PULSE_LINE) { Cpuexec.cpu[irq1.cpunum].Reset(); } Cpuexec.cpunum_resume(irq1.cpunum, Cpuexec.SUSPEND_REASON_RESET); } } else if (irq1.line == (int)LineState.INPUT_LINE_HALT) { if (irq1.state == LineState.ASSERT_LINE) { Cpuexec.cpunum_suspend(irq1.cpunum, Cpuexec.SUSPEND_REASON_HALT, 1); } else if (irq1.state == LineState.CLEAR_LINE) { Cpuexec.cpunum_resume(irq1.cpunum, Cpuexec.SUSPEND_REASON_HALT); } } else { switch (irq1.state) { case LineState.PULSE_LINE: Cpuexec.cpu[irq1.cpunum].set_irq_line(irq1.line, LineState.ASSERT_LINE); Cpuexec.cpu[irq1.cpunum].set_irq_line(irq1.line, LineState.CLEAR_LINE); break; case LineState.HOLD_LINE: case LineState.ASSERT_LINE: Cpuexec.cpu[irq1.cpunum].set_irq_line(irq1.line, LineState.ASSERT_LINE); break; case LineState.CLEAR_LINE: Cpuexec.cpu[irq1.cpunum].set_irq_line(irq1.line, LineState.CLEAR_LINE); break; } } lsirq.Add(irq1); } } foreach (irq irq1 in lsirq) { lirq.Remove(irq1); } }