Commit 8e0b1628 authored by Patrice Mandin's avatar Patrice Mandin

Set video mode, allocate buffers, and enable new Milan video xbios support, need a tester now :).

--HG--
branch : SDL-1.2
extra : convert_revision : svn%3Ac70aab31-4412-0410-b14c-859654838e24/branches/SDL-1.2%403830
parent 8eeb1d6d
...@@ -143,7 +143,7 @@ static int XBIOS_Available(void) ...@@ -143,7 +143,7 @@ static int XBIOS_Available(void)
const char *envr = SDL_getenv("SDL_VIDEODRIVER"); const char *envr = SDL_getenv("SDL_VIDEODRIVER");
/* Milan/Hades Atari clones do not have an Atari video chip */ /* Milan/Hades Atari clones do not have an Atari video chip */
if ( (Getcookie(C__MIL, &cookie_mil) == C_FOUND) || if ( /*(Getcookie(C__MIL, &cookie_mil) == C_FOUND) ||*/
(Getcookie(C_hade, &cookie_hade) == C_FOUND) ) { (Getcookie(C_hade, &cookie_hade) == C_FOUND) ) {
return 0; return 0;
} }
...@@ -387,6 +387,7 @@ static int XBIOS_VideoInit(_THIS, SDL_PixelFormat *vformat) ...@@ -387,6 +387,7 @@ static int XBIOS_VideoInit(_THIS, SDL_PixelFormat *vformat)
/* Initialize video mode list */ /* Initialize video mode list */
/* and save current screen status (palette, screen address, video mode) */ /* and save current screen status (palette, screen address, video mode) */
XBIOS_centscreen = SDL_FALSE; XBIOS_centscreen = SDL_FALSE;
XBIOS_oldvbase = Physbase();
/* Determine the current screen size */ /* Determine the current screen size */
this->info.current_w = 0; this->info.current_w = 0;
...@@ -402,7 +403,6 @@ static int XBIOS_VideoInit(_THIS, SDL_PixelFormat *vformat) ...@@ -402,7 +403,6 @@ static int XBIOS_VideoInit(_THIS, SDL_PixelFormat *vformat)
{ {
short *oldpalette; short *oldpalette;
XBIOS_oldvbase=Physbase();
XBIOS_oldvmode=Getrez(); XBIOS_oldvmode=Getrez();
switch(XBIOS_oldvmode << 8) { switch(XBIOS_oldvmode << 8) {
case ST_LOW: case ST_LOW:
...@@ -425,7 +425,6 @@ static int XBIOS_VideoInit(_THIS, SDL_PixelFormat *vformat) ...@@ -425,7 +425,6 @@ static int XBIOS_VideoInit(_THIS, SDL_PixelFormat *vformat)
} }
break; break;
case VDO_TT: case VDO_TT:
XBIOS_oldvbase=Logbase();
XBIOS_oldvmode=EgetShift(); XBIOS_oldvmode=EgetShift();
switch(XBIOS_oldvmode & ES_MODE) { switch(XBIOS_oldvmode & ES_MODE) {
...@@ -451,7 +450,6 @@ static int XBIOS_VideoInit(_THIS, SDL_PixelFormat *vformat) ...@@ -451,7 +450,6 @@ static int XBIOS_VideoInit(_THIS, SDL_PixelFormat *vformat)
XBIOS_ListTTModes(this, 0); XBIOS_ListTTModes(this, 0);
break; break;
case VDO_F30: case VDO_F30:
XBIOS_oldvbase=Logbase();
XBIOS_oldvmode=VsetMode(-1); XBIOS_oldvmode=VsetMode(-1);
XBIOS_oldnumcol= 1<< (1 << (XBIOS_oldvmode & NUMCOLS)); XBIOS_oldnumcol= 1<< (1 << (XBIOS_oldvmode & NUMCOLS));
...@@ -622,7 +620,13 @@ static void XBIOS_FreeBuffers(_THIS) ...@@ -622,7 +620,13 @@ static void XBIOS_FreeBuffers(_THIS)
for (i=0;i<2;i++) { for (i=0;i<2;i++) {
if (XBIOS_screensmem[i]!=NULL) { if (XBIOS_screensmem[i]!=NULL) {
Mfree(XBIOS_screensmem[i]); if ((XBIOS_cvdo>>16) == VDO_MILAN)) {
if (i==1) {
VsetScreen(-1, -1, MI_MAGIC, CMD_FREEPAGE);
}
} else {
Mfree(XBIOS_screensmem[i]);
}
XBIOS_screensmem[i]=NULL; XBIOS_screensmem[i]=NULL;
} }
} }
...@@ -709,7 +713,15 @@ static SDL_Surface *XBIOS_SetVideoMode(_THIS, SDL_Surface *current, ...@@ -709,7 +713,15 @@ static SDL_Surface *XBIOS_SetVideoMode(_THIS, SDL_Surface *current,
/* Allocate buffers */ /* Allocate buffers */
for (i=0; i<num_buffers; i++) { for (i=0; i<num_buffers; i++) {
XBIOS_screensmem[i] = Atari_SysMalloc(new_screen_size, MX_STRAM); if ((XBIOS_cvdo>>16) == VDO_MILAN) {
if (i==0) {
XBIOS_screensmem[i] = XBIOS_oldvbase;
} else {
XBIOS_screensmem[i] = VsetScreen(-1, new_video_mode->number, MI_MAGIC, CMD_ALLOCPAGE);
}
} else {
XBIOS_screensmem[i] = Atari_SysMalloc(new_screen_size, MX_STRAM);
}
if (XBIOS_screensmem[i]==NULL) { if (XBIOS_screensmem[i]==NULL) {
XBIOS_FreeBuffers(this); XBIOS_FreeBuffers(this);
...@@ -805,6 +817,8 @@ static SDL_Surface *XBIOS_SetVideoMode(_THIS, SDL_Surface *current, ...@@ -805,6 +817,8 @@ static SDL_Surface *XBIOS_SetVideoMode(_THIS, SDL_Surface *current,
} }
break; break;
case VDO_MILAN: case VDO_MILAN:
VsetScreen(-1, new_video_mode->number, MI_MAGIC, CMD_SETMODE);
/* Set hardware palette to black in True Colour */ /* Set hardware palette to black in True Colour */
if (new_depth > 8) { if (new_depth > 8) {
SDL_memset(F30_palette, 0, sizeof(F30_palette)); SDL_memset(F30_palette, 0, sizeof(F30_palette));
...@@ -1033,6 +1047,7 @@ static void XBIOS_VideoQuit(_THIS) ...@@ -1033,6 +1047,7 @@ static void XBIOS_VideoQuit(_THIS)
} }
break; break;
case VDO_MILAN: case VDO_MILAN:
VsetScreen(-1, &XBIOS_oldvbase, MI_MAGIC, CMD_SETADR);
VsetScreen(-1, &XBIOS_oldvmode, MI_MAGIC, CMD_SETMODE); VsetScreen(-1, &XBIOS_oldvmode, MI_MAGIC, CMD_SETMODE);
if (XBIOS_oldnumcol) { if (XBIOS_oldnumcol) {
VsetRGB(0, XBIOS_oldnumcol, XBIOS_oldpalette); VsetRGB(0, XBIOS_oldnumcol, XBIOS_oldpalette);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment