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); } } } }
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]); } } } } }