Ejemplo n.º 1
0
 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);
 }
Ejemplo n.º 2
0
        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);
                }
            }
        }
Ejemplo n.º 3
0
 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)));
 }
Ejemplo n.º 4
0
 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)));
 }
Ejemplo n.º 5
0
 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());
 }
Ejemplo n.º 6
0
 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);
 }
Ejemplo n.º 7
0
 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();
 }
Ejemplo n.º 8
0
 public static void mame_execute()
 {
     soft_reset();
     mame_pause(true);
     while (!exit_pending)
     {
         if (!paused)
         {
             Cpuexec.cpuexec_timeslice();
         }
         else
         {
             Video.video_frame_update();
         }
         handlestate();
     }
 }
Ejemplo n.º 9
0
        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();
        }
Ejemplo n.º 10
0
        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;
            }
        }
Ejemplo n.º 11
0
        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);
            }
        }