1 /* 2 SDL - Simple DirectMedia Layer 3 Copyright (C) 1997-2012 Sam Lantinga 4 5 This library is free software; you can redistribute it and/or 6 modify it under the terms of the GNU Library General Public 7 License as published by the Free Software Foundation; either 8 version 2 of the License, or (at your option) any later version. 9 10 This library is distributed in the hope that it will be useful, 11 but WITHOUT ANY WARRANTY; without even the implied warranty of 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 Library General Public License for more details. 14 15 You should have received a copy of the GNU Library General Public 16 License along with this library; if not, write to the Free 17 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 18 19 Sam Lantinga 20 slouken (at) libsdl.org 21 */ 22 #include "SDL_config.h" 23 24 /* 25 Milan Xbios video functions 26 27 Patrice Mandin 28 */ 29 30 #include <mint/cookie.h> 31 #include <mint/falcon.h> 32 33 #include "SDL_xbios.h" 34 #include "SDL_xbios_milan.h" 35 36 #define NUM_PREDEFINED_MODES 7 37 38 typedef struct { 39 Uint16 width, height; 40 } predefined_mode_t; 41 42 static const predefined_mode_t mode_list[NUM_PREDEFINED_MODES]={ 43 {640,400}, 44 {640,480}, 45 {800,608}, 46 {1024,768}, 47 {1152,864}, 48 {1280,1024}, 49 {1600,1200} 50 }; 51 52 static const Uint8 mode_bpp[4]={ 53 8, 15, 16, 32 54 }; 55 56 /*--- Variables ---*/ 57 58 static int enum_actually_add; 59 static SDL_VideoDevice *enum_this; 60 61 /*--- Functions ---*/ 62 63 static unsigned long /*cdecl*/ enumfunc(SCREENINFO *inf, unsigned long flag) 64 { 65 xbiosmode_t modeinfo; 66 67 modeinfo.number = inf->devID; 68 modeinfo.width = inf->scrWidth; 69 modeinfo.height = inf->scrHeight; 70 modeinfo.depth = inf->scrPlanes; 71 modeinfo.flags = 0; 72 73 SDL_XBIOS_AddMode(enum_this, enum_actually_add, &modeinfo); 74 75 return ENUMMODE_CONT; 76 } 77 78 void SDL_XBIOS_ListMilanModes(_THIS, int actually_add) 79 { 80 int i; 81 82 /* Read validated predefined modes */ 83 for (i=0; i<NUM_PREDEFINED_MODES; i++) { 84 int j; 85 Uint16 deviceid = 0x1000 + (i<<4); 86 87 for (j=1; j<4; j++) { 88 if (Validmode(deviceid + j)) { 89 xbiosmode_t modeinfo; 90 91 modeinfo.number = deviceid + j; 92 modeinfo.width = mode_list[i].width; 93 modeinfo.height = mode_list[i].height; 94 modeinfo.depth = mode_bpp[j-1]; 95 modeinfo.flags = 0; 96 97 SDL_XBIOS_AddMode(this, actually_add, &modeinfo); 98 } 99 } 100 } 101 102 /* Read custom created modes */ 103 enum_this = this; 104 enum_actually_add = actually_add; 105 VsetScreen(-1, &enumfunc, MI_MAGIC, CMD_ENUMMODES); 106 } 107