fix regression from r4111 in store/restore matrix operations regarding stack size and overflow. also fix regression from other time in the handling of push/pop commands regarding stack size and overflow (fixes sims games and spiderman games). also a bunch of unrelated license cleanup i foolishly mixed in here

This commit is contained in:
zeromus 2012-03-30 04:11:00 +00:00
parent d546cd53c5
commit 16dd75b1e4
15 changed files with 61 additions and 71 deletions

View File

@ -1,22 +1,19 @@
/* Copyright (C) 2006 yopyop
yopyop156@ifrance.com
yopyop156.ifrance.com
/*
Copyright (C) 2006 yopyop
Copyright (C) 2006-2012 DeSmuME team
This file is part of DeSmuME
This file is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
DeSmuME is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
DeSmuME is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with DeSmuME; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
You should have received a copy of the GNU General Public License
along with the this software. If not, see <http://www.gnu.org/licenses/>.
*/
#include <stdio.h>

View File

@ -1,7 +1,7 @@
/*
Copyright (C) 2006 yopyop
Copyright (C) 2007 shash
Copyright (C) 2007-2011 DeSmuME team
Copyright (C) 2007-2012 DeSmuME team
This file is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by

View File

@ -1,7 +1,7 @@
/*
Copyright (C) 2006 yopyop
Copyright (C) 2007 shash
Copyright (C) 2007-2011 DeSmuME team
Copyright (C) 2007-2012 DeSmuME team
This file is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by

View File

@ -1,6 +1,6 @@
/*
Copyright (C) 2006 yopyop
Copyright (C) 2008-2011 DeSmuME team
Copyright (C) 2008-2012 DeSmuME team
This file is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by

View File

@ -1,23 +1,20 @@
/*
/*
Copyright (C) 2006 yopyop
Copyright (C) 2006-2007 shash
Copyright (C) 2008-2011 DeSmuME team
Copyright (C) 2008-2012 DeSmuME team
This file is part of DeSmuME
DeSmuME is free software; you can redistribute it and/or modify
This file is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
DeSmuME is distributed in the hope that it will be useful,
This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with DeSmuME; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
along with the this software. If not, see <http://www.gnu.org/licenses/>.
*/
// ARM core TODO:

View File

@ -1,9 +1,10 @@
/* Copyright (C) 2006 yopyop
Copyright (C) 2009-2010 DeSmuME team
/*
Copyright (C) 2006 yopyop
Copyright (C) 2009-2012 DeSmuME team
This file is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
This file is distributed in the hope that it will be useful,

View File

@ -3,7 +3,7 @@
This file is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
This file is distributed in the hope that it will be useful,

View File

@ -1,9 +1,10 @@
/* Copyright (C) 2006 yopyop
Copyright (C) 2008-2011 DeSmuME team
/*
Copyright (C) 2006 yopyop
Copyright (C) 2008-2012 DeSmuME team
This file is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
This file is distributed in the hope that it will be useful,

View File

@ -3,7 +3,7 @@
This file is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
This file is distributed in the hope that it will be useful,

View File

@ -1,6 +1,6 @@
/*
Copyright (C) 2006 yopyop
Copyright (C) 2008-2011 DeSmuME team
Copyright (C) 2008-2012 DeSmuME team
This file is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@ -863,9 +863,13 @@ static void gfx3d_glPopMatrix(s32 i)
//this command always works on both pos and vector when either pos or pos-vector are the current mtx mode
short mymode = (mode==1?2:mode);
//6 bits, sign extended
//this was necessary to fix sims apartment pets
//i = (i<<26)>>26;
//previously, we sign extended here. that isnt really necessary since the stacks are apparently modularly addressed. so i am somewhat doubtful that this is a real concept.
//example:
//suppose we had a -30 that would be %100010.
//which is the same as adding 34. if our stack was at 17 then one way is 17-30(+32)=19 and the other way is 17+34(-32)=19
//please note that our ability to skip treating this as signed is dependent on the modular addressing later. if that ever changes, we need to change this back.
MatrixStackPopMatrix(mtxCurrent[mymode], &mtxStack[mymode], i);
@ -886,8 +890,13 @@ static void gfx3d_glStoreMatrix(u32 v)
v = 0;
v &= 31;
//this behaviour is unverified. gbatek suggests that it may be meaningful somehow.
if(v==31) return;
//according to gbatek, 31 works but sets the stack overflow flag
//spider-man 2 tests this on the spiderman model (and elsewhere)
//i am somewhat skeptical of this, but we'll leave it this way for now.
//a test shouldnt be too hard
if(v==31)
MMU_new.gxstat.se = 1;
MatrixStackLoadMatrix (&mtxStack[mymode], v, mtxCurrent[mymode]);
@ -909,12 +918,13 @@ static void gfx3d_glRestoreMatrix(u32 v)
v &= 31;
//this seems to do something irrational if v==31, as far as we know.
//lets arbitrarily choose to use entry -
if(v==31) {
v = 0;
printf("gfx3d_glRestoreMatrix is using -1. why would anyone do this? please report!\n");
}
//according to gbatek, 31 works but sets the stack overflow flag
//spider-man 2 tests this on the spiderman model (and elsewhere)
//i am somewhat skeptical of this, but we'll leave it this way for now.
//a test shouldnt be too hard
if(v==31)
MMU_new.gxstat.se = 1;
MatrixCopy (mtxCurrent[mymode], MatrixStackGetPos(&mtxStack[mymode], v));

View File

@ -1,6 +1,6 @@
/*
Copyright (C) 2006-2007 shash
Copyright (C) 2007-2011 DeSmuME team
Copyright (C) 2007-2012 DeSmuME team
This file is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@ -149,19 +149,6 @@ void MatrixInit (float *matrix)
matrix[0] = matrix[5] = matrix[10] = matrix[15] = 1.f;
}
void MatrixTranspose(s32 *matrix)
{
float temp;
#define swap(A,B) temp = matrix[A];matrix[A] = matrix[B]; matrix[B] = temp;
swap(1,4);
swap(2,8);
swap(3,0xC);
swap(6,9);
swap(7,0xD);
swap(0xB,0xE);
#undef swap
}
void MatrixIdentity (s32 *matrix)
{
matrix[1] = matrix[2] = matrix[3] = matrix[4] = 0;
@ -258,12 +245,10 @@ static void MatrixStackSetStackPosition (MatrixStack *stack, int pos)
if((stack->position < 0) || (stack->position > stack->size))
MMU_new.gxstat.se = 1;
//this behaviour is unverified, but its more logical than the old code which would wrap around and turn negative
//it may still be right to wrap around, but we have no proof right now one way or another
if(stack->position < 0)
stack->position = 0;
if(stack->position > stack->size)
stack->position = stack->size;
//once upon a time, we tried clamping to the size.
//this utterly broke sims 2 apartment pets.
//changing to wrap around made it work perfectly
stack->position = ((u32)stack->position) & stack->size;
}
void MatrixStackPushMatrix (MatrixStack *stack, const s32 *ptr)

View File

@ -56,7 +56,6 @@ void MatrixCopy (s32 * matrixDST, const s32 * matrixSRC);
int MatrixCompare (const s32 * matrixDST, const float * matrixSRC);
void MatrixIdentity (s32 *matrix);
void MatrixTranspose (s32 *matrix);
void MatrixStackInit (MatrixStack *stack);
void MatrixStackSetMaxSize (MatrixStack *stack, int size);
void MatrixStackPushMatrix (MatrixStack *stack, const s32 *ptr);

View File

@ -2,7 +2,7 @@
Copyright (C) 2006 Normmatt
Copyright (C) 2006 Theo Berkau
Copyright (C) 2007 Pascal Giard
Copyright (C) 2008-2011 DeSmuME team
Copyright (C) 2008-2012 DeSmuME team
This file is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by

View File

@ -2,7 +2,7 @@
This file is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
This file is distributed in the hope that it will be useful,

View File

@ -2,7 +2,7 @@
This file is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
the Free Software Foundation, either version 2 of the License, or
(at your option) any later version.
This file is distributed in the hope that it will be useful,