int gr_check_mode(u_int32_t mode) { switch(mode) { case SM(320,100)://19: case SM(320,200): case SM(320,240): case SM(360,200): case SM(360,240): case SM(376,282): case SM(320,400): case SM(320,480): case SM(360,400): case SM(360,480): case SM(360,360): case SM(376,308): case SM(376,564): return gr_mode13_checkmode(); case SM(640,400): return gr_vesa_checkmode( 0x100 ); case SM(640,480): return gr_vesa_checkmode( 0x101 ); case SM(800,600): return gr_vesa_checkmode( 0x103 ); case SM(1024,768): return gr_vesa_setmode( 0x105 ); // case SM_640x480V15: return gr_vesa_setmode( 0x110 ); // case SM_800x600V15: return gr_vesa_setmode( 0x113 ); } return 11; }
main(int argc,char **argv) { int ret; grs_bitmap my_bitmap; ubyte my_palette[256*3]; ret = iff_read_bitmap(argv[1],&my_bitmap,BM_RGB15,&my_palette); printf("ret = %d\n",ret); if (ret == IFF_NO_ERROR) { gr_vesa_setmode(0x110); draw_ubitmap(0,0,&my_bitmap); getch(); } }
int gr_set_mode(u_int32_t mode) { int retcode; unsigned int w,h,t,data, r; //JOHNgr_disable_default_palette_loading(); #ifdef NOGRAPH return 0; #endif switch(mode) { case SM_ORIGINAL: return 0; case SM(320,200)://0: if (!isvga()) return 1; gr_set_misc_mode(0x13); w = 320; r = 320; h = 200; t=BM_LINEAR; data = (int)gr_video_memory; break; case SM(640,400)://SM_640x400V: retcode = gr_vesa_setmode( 0x100 ); if (retcode !=0 ) return retcode; w = 640; r = 640; h = 400; t=BM_SVGA; data = 0; break; case SM(640,480)://SM_640x480V: retcode = gr_vesa_setmode( 0x101 ); if (retcode !=0 ) return retcode; w = 640; r = 640; h = 480; t=BM_SVGA; data = 0; break; case SM(800,600)://SM_800x600V: retcode = gr_vesa_setmode( 0x103 ); if (retcode !=0 ) return retcode; w = 800; r = 800; h = 600; t=BM_SVGA; data = 0; break; case SM(1024,768)://SM_1024x768V: retcode = gr_vesa_setmode( 0x105 ); if (retcode !=0 ) return retcode; w = 1024; r = 1024; h = 768; t=BM_SVGA; data = 0; break; /* case SM_640x480V15: retcode = gr_vesa_setmode( 0x110 ); if (retcode !=0 ) return retcode; w = 640; r = 640*2; h=480; t=BM_SVGA15; data = 0; break; case SM_800x600V15: retcode = gr_vesa_setmode( 0x113 ); if (retcode !=0 ) return retcode; w = 800; r = 800*2; h=600; t=BM_SVGA15; data = 0; break;*/ // case 19: case SM(320,100): if (!isvga()) return 1; gr_set_misc_mode(0x13); // { // ubyte x; // x = inp( 0x3c5 ); // x |= 8; // outp( 0x3c5, x ); // } gr_set_cellheight( 3 ); w = 320; r = 320; h = 100; t=BM_LINEAR; data = (int)gr_video_memory; break; /* case 20: retcode = gr_vesa_setmode( 0x102 ); //gr_enable_default_palette_loading(); if (retcode !=0 ) return retcode; gr_16_to_256(); gr_set_linear(); //gr_set_cellheight( 1 ); gr_vesa_setlogical( 400 ); w = 400; r = 400; h = 600; t=BM_SVGA; data = 0; break; case 21: if (!isvga()) return 1; gr_set_misc_mode(0xd); gr_16_to_256(); gr_set_linear(); gr_set_cellheight( 3 ); w = 160; r = 160; h = 100; t=BM_LINEAR; data = (int)gr_video_memory; break; case //22: // 3dmax 320x400 if (!isvga()) return 1; gr_set_3dbios_mode(0x31); //w = 320; r = 320/4; h = 400; t=BM_MODEX; data = 0; w = 320; r = 320; h = 400; t=BM_SVGA; data = 0; break;*/ default: if (!isvga()) return 1; if (mode==SM(320,240)) w = gr_modex_setmode( 2 ); else if (mode==SM(320,400)) w = gr_modex_setmode( 6 ); else Error("unhandled vid mode\n"); //gr_enable_default_palette_loading(); h = w & 0xffff; w = w >> 16; r = w / 4;t = BM_MODEX; data = 0; break; } gr_palette_clear(); memset( grd_curscreen, 0, sizeof(grs_screen)); grd_curscreen->sc_mode = mode; grd_curscreen->sc_w = w; grd_curscreen->sc_h = h; grd_curscreen->sc_aspect = fixdiv(grd_curscreen->sc_w*3,grd_curscreen->sc_h*4); grd_curscreen->sc_canvas.cv_bitmap.bm_x = 0; grd_curscreen->sc_canvas.cv_bitmap.bm_y = 0; grd_curscreen->sc_canvas.cv_bitmap.bm_w = w; grd_curscreen->sc_canvas.cv_bitmap.bm_h = h; grd_curscreen->sc_canvas.cv_bitmap.bm_rowsize = r; grd_curscreen->sc_canvas.cv_bitmap.bm_type = t; grd_curscreen->sc_canvas.cv_bitmap.bm_data = (unsigned char *)data; VGA_current_mode = mode; gr_set_current_canvas(NULL); //gr_enable_default_palette_loading(); // gamefont_choose_game_font(w,h); return 0; }