示例#1
0
文件: emu.c 项目: gillotte/gxgeo
void cpu_68k_dpg_step(void) {
    static Uint32 nb_cycle;
    static Uint32 line_cycle;
    Uint32 cpu_68k_timeslice = 200000;
    Uint32 cpu_68k_timeslice_scanline = 200000/(float)262;
    Uint32 cycle;
    if (nb_cycle==0) {
        main_loop(); /* update event etc. */
    }
    cycle=cpu_68k_run_step();
    add_bt(cpu_68k_getpc());
    line_cycle+=cycle;
    nb_cycle+=cycle;
    if (nb_cycle>=cpu_68k_timeslice) {
        nb_cycle=line_cycle=0;
        if (conf.raster) {
            update_screen();
        } else {
            neo_interrupt();
        }
        state_handling(pending_save_state,pending_load_state);
        cpu_68k_interrupt(1);
    } else {
        if (line_cycle>=cpu_68k_timeslice_scanline) {
            line_cycle=0;
            if (conf.raster) {
                if (update_scanline())
                    cpu_68k_interrupt(2);
            }
        }
    }
}
示例#2
0
void drawscreen(int x, int mx, int my)
{
	int loop1,loop2,back,x2;
	static int dy;
	x2=x;
	back=0;
	while(x2>=16)
	{
		x2-=16;
		back++;
	}
	for (loop1=0;loop1<12;loop1++) {
		for (loop2=back;loop2<=back+16;loop2++) {
			if (data.world[loop1][loop2]>0)
			{
				if (data.bumped[0]==loop2 && data.bumped[1]==loop1)
				{
					dy+=data.bumploop;
					put_masked_pbm((loop2<<4)-x+32,(loop1<<4)+dy,data.block[data.world[loop1][loop2]-1],mx,my);
					data.bumploop++;
					if(data.bumploop==3)
					{
						data.bumploop=0;
						data.bumped[0]=0;
						data.bumped[1]=0;
						dy=0;
					}
				}
				else
				{
					if(data.world[loop1][loop2]==38) 
					{
						add_cw((loop2<<4)-x,(loop1<<4));
						data.world[loop1][loop2]=0;
					}
					else if(data.world[loop1][loop2]==39)
					{
						add_bt((loop2<<4)-x,(loop1<<4));
						data.world[loop1][loop2]=0;
					}
					else
						put_masked_pbm((loop2<<4)-x+32,(loop1<<4),data.block[data.world[loop1][loop2]-1],mx,my);
				}
			}
			else
			{
				draw_block((loop2<<4)-x+32,(loop1<<4),mx,my);
			}
		}
	}
	drawcoin(x, mx, my);

	/*int loop1,loop2;*/
	for (loop1=0;loop1<=15;loop1++) {
		for (loop2=0;loop2<=15;loop2++) {
			if (data.mario[abs(data.sprite/2)][loop1][loop2]>=0) {
				if (my-15+loop1>=0 && my-15+loop1<192)
				{
					if (data.direction==0)/*向前*/
						put_pix(mx+loop2+32,my-15+loop1,data.mario[data.sprite/2][loop1][loop2]);
					else/*向后,反向画出*/
						put_pix(mx+15-loop2+32,my-15+loop1,data.mario[data.sprite/2][loop1][loop2]);
				}
			}
		}
	}

}