void scene_render_game(Uint32 delta) { background_draw(3, delta); world_draw(delta); player_draw(delta); enemy_draw(); item_draw(); bullet_draw(); player_life_draw(); world_life_draw(); }
void do_drive_cdrom_startstop_test(struct ide_controller *ide,unsigned char which) { struct menuboxbounds mbox; char backredraw=1; int select=-1; char redraw=1; int c; /* UI element vars */ menuboxbounds_set_def_list(&mbox,/*ofsx=*/4,/*ofsy=*/7,/*cols=*/1); menuboxbounds_set_item_strings_arraylen(&mbox,drive_cdrom_startstop_strings); /* most of the commands assume a ready controller. if it's stuck, * we'd rather the user have a visual indication that it's stuck that way */ c = do_ide_controller_user_wait_busy_controller(ide); if (c != 0) return; /* select the drive we want */ idelib_controller_drive_select(ide,which,/*head*/0,IDELIB_DRIVE_SELECT_MODE_CHS); /* in case the IDE controller is busy for that time */ c = do_ide_controller_user_wait_busy_controller(ide); if (c != 0) return; /* read back: did the drive select take effect? if not, it might not be there. another common sign is the head/drive select reads back 0xFF */ c = do_ide_controller_drive_check_select(ide,which); if (c < 0) return; /* it might be a CD-ROM drive, which in some cases might not raise the Drive Ready bit */ do_ide_controller_atapi_device_check_post_host_reset(ide); /* wait for the drive to indicate readiness */ /* NTS: If the drive never becomes ready even despite our reset hacks, there's a strong * possibility that the device doesn't exist. This can happen for example if there * is a master attached but no slave. */ c = do_ide_controller_user_wait_drive_ready(ide); if (c < 0) return; /* for completeness, clear pending IRQ */ idelib_controller_ack_irq(ide); while (1) { if (backredraw) { backredraw = 0; redraw = 1; background_draw(); vga_moveto(0,0); header_write("CD-ROM eject/load",ide,which); } if (redraw) { redraw = 0; vga_moveto(mbox.ofsx,mbox.ofsy - 2); vga_write_color((select == -1) ? 0x70 : 0x0F); vga_write("Back to IDE drive main menu"); while (vga_state.vga_pos_x < (mbox.width+mbox.ofsx) && vga_state.vga_pos_x != 0) vga_writec(' '); menuboxbound_redraw(&mbox,select); } c = getch(); if (c == 0) c = getch() << 8; if (c == 27) { break; } else if (c == 13) { if (select == -1) break; switch (select) { case 0: /* show IDE register taskfile */ do_common_show_ide_taskfile(ide,which); redraw = backredraw = 1; break; case 1: /*Eject*/ case 2: /*Load*/ case 3: /*Start*/ case 4: /*Stop*/ { static const unsigned char cmd[4] = {2/*eject*/,3/*load*/,1/*start*/,0/*stop*/}; do_drive_atapi_eject_load(ide,which,cmd[select-1]); } break; }; } else if (c == 0x4800) { if (--select < -1) select = mbox.item_max; redraw = 1; } else if (c == 0x4B00) { /* left */ redraw = 1; } else if (c == 0x4D00) { /* right */ redraw = 1; } else if (c == 0x5000) { if (++select > mbox.item_max) select = -1; redraw = 1; } } }