diff options
| author | Xavier Del Campo <xavi.dcr@gmail.com> | 2017-02-04 14:49:08 +0100 |
|---|---|---|
| committer | Xavier Del Campo <xavi.dcr@gmail.com> | 2017-02-04 14:49:08 +0100 |
| commit | 189ecf754d0c8131464bfdff98fb56e7752556b1 (patch) | |
| tree | 89e7d02128bbc7b2d3f5c19a3da14ec14291982a /Source | |
| download | airport-189ecf754d0c8131464bfdff98fb56e7752556b1.tar.gz | |
Initial commit
Diffstat (limited to 'Source')
50 files changed, 63449 insertions, 0 deletions
diff --git a/Source/Aircraft.c b/Source/Aircraft.c new file mode 100755 index 0000000..aed8793 --- /dev/null +++ b/Source/Aircraft.c @@ -0,0 +1,372 @@ +/* *************************************
+ * Includes
+ * *************************************/
+
+#include "Aircraft.h"
+
+/* *************************************
+ * Defines
+ * *************************************/
+
+#define AIRCRAFT_SPEED_TABLE_SIZE 8
+#define AIRCRAFT_SIZE 16
+
+/* *************************************
+ * Structs and enums
+ * *************************************/
+
+enum
+{
+ AIRCRAFT_SPRITE_SIZE = 24,
+ AIRCRAFT_SPRITE_VRAM_X = 800,
+ AIRCRAFT_SPRITE_VRAM_Y = 304,
+};
+
+enum
+{
+ PHX_LIVERY_CLUT_X = 384,
+ PHX_LIVERY_CLUT_Y = 497,
+};
+
+typedef enum t_aircraftSpeeds
+{
+ AIRCRAFT_SPEED_IDLE = 0,
+ AIRCRAFT_SPEED_TAXIING,
+ AIRCRAFT_SPEED_APPROACH,
+ AIRCRAFT_SPEED_TAKEOFF,
+ AIRCRAFT_SPEED_DESCENT,
+}AIRCRAFT_SPEEDS;
+
+/* *************************************
+ * Local variables
+ * *************************************/
+
+static TYPE_AIRCRAFT_DATA AircraftData[GAME_MAX_AIRCRAFT];
+static uint8_t AircraftIndex;
+static GsSprite AircraftSpr;
+static TYPE_ISOMETRIC_POS AircraftCenterIsoPos;
+static TYPE_CARTESIAN_POS AircraftCenterPos;
+static char * AircraftLiveryNamesTable[] = {"PHX", NULL};
+static AIRCRAFT_LIVERY AircraftLiveryTable[] = {AIRCRAFT_LIVERY_0, AIRCRAFT_LIVERY_UNKNOWN};
+static const fix16_t AircraftSpeedsTable[] = { 0 /* IDLE */ ,
+ 0x3333 /* TAXIING */ ,
+ 0x00010000 /* APPROACH */ ,
+ 0x20000 /* TAKEOFF */ ,
+ 0x8000 /* DESCENT */ };
+
+/* *************************************
+ * Local prototypes
+ * *************************************/
+
+static void AircraftDirection(TYPE_AIRCRAFT_DATA * ptrAircraft);
+static AIRCRAFT_LIVERY AircraftLiveryFromFlightNumber(char * strFlightNumber);
+static void AircraftAttitude(TYPE_AIRCRAFT_DATA * ptrAircraft);
+static void AircraftUpdateSpriteFromData(TYPE_AIRCRAFT_DATA * ptrAircraft);
+
+void AircraftInit(void)
+{
+ bzero(AircraftData, GAME_MAX_AIRCRAFT * sizeof(TYPE_AIRCRAFT_DATA));
+ AircraftIndex = 0;
+
+ AircraftSpr.x = 0;
+ AircraftSpr.y = 0;
+
+ AircraftSpr.attribute = COLORMODE(COLORMODE_8BPP);
+
+ AircraftSpr.cx = PHX_LIVERY_CLUT_X;
+ AircraftSpr.cy = PHX_LIVERY_CLUT_Y;
+
+ AircraftSpr.w = AIRCRAFT_SPRITE_SIZE;
+ AircraftSpr.h = AIRCRAFT_SPRITE_SIZE;
+
+ /*AircraftSpr.tpage = 28;
+ AircraftSpr.u = 64;
+ AircraftSpr.v = 48;*/
+
+ GfxTPageOffsetFromVRAMPosition(&AircraftSpr, AIRCRAFT_SPRITE_VRAM_X, AIRCRAFT_SPRITE_VRAM_Y);
+
+ AircraftCenterIsoPos.x = AIRCRAFT_SIZE >> 1;
+ AircraftCenterIsoPos.y = AIRCRAFT_SIZE >> 1;
+ AircraftCenterIsoPos.z = 0;
+
+ AircraftCenterPos = GfxIsometricToCartesian(&AircraftCenterIsoPos);
+}
+
+bool AircraftAddNew( TYPE_FLIGHT_DATA * ptrFlightData,
+ uint8_t FlightDataIndex,
+ uint16_t * targets )
+{
+ TYPE_AIRCRAFT_DATA * ptrAircraft = &AircraftData[AircraftIndex];
+ uint8_t level_columns = GameGetLevelColumns();
+ uint8_t i;
+
+ if(AircraftIndex >= GAME_MAX_AIRCRAFT)
+ {
+ dprintf("Exceeded maximum aircraft capacity!\n");
+ return false;
+ }
+
+ memcpy(ptrAircraft->Target, targets, sizeof(uint16_t) * AIRCRAFT_MAX_TARGETS);
+
+ ptrAircraft->TargetIdx = 0;
+ ptrAircraft->Livery = AircraftLiveryFromFlightNumber(ptrFlightData->strFlightNumber[FlightDataIndex]);
+
+ ptrAircraft->FlightDataIdx = FlightDataIndex;
+
+ if(ptrFlightData->FlightDirection[FlightDataIndex] == ARRIVAL)
+ {
+ ptrAircraft->IsoPos.x = 0;
+
+ ptrAircraft->IsoPos.y = targets[0] / level_columns;
+ ptrAircraft->IsoPos.y <<= TILE_SIZE_BIT_SHIFT;
+ ptrAircraft->IsoPos.y += TILE_SIZE >> 1; // Adjust to tile center
+ ptrAircraft->IsoPos.y = fix16_from_int(ptrAircraft->IsoPos.y);
+
+ ptrAircraft->IsoPos.z = targets[0] % level_columns;
+ ptrAircraft->IsoPos.z <<= TILE_SIZE_BIT_SHIFT - 1;
+ ptrAircraft->IsoPos.z = fix16_from_int(ptrAircraft->IsoPos.z);
+
+ ptrAircraft->Speed = AircraftSpeedsTable[AIRCRAFT_SPEED_APPROACH];
+ }
+
+ ptrAircraft->State = ptrFlightData->State[FlightDataIndex];
+
+ dprintf("\nAircraft Data:\n");
+ dprintf("\tTargets:");
+
+ for(i = 0; i < AIRCRAFT_MAX_TARGETS; i++)
+ {
+ if(ptrAircraft->Target[i] == 0)
+ {
+ break;
+ }
+
+ dprintf(" %d", ptrAircraft->Target[i]);
+ }
+
+ dprintf("\nLivery: %d\n", ptrAircraft->Livery );
+
+ dprintf("Aircraft position: {%d, %d, %d}\n",
+ fix16_to_int(ptrAircraft->IsoPos.x),
+ fix16_to_int(ptrAircraft->IsoPos.y),
+ fix16_to_int(ptrAircraft->IsoPos.z) );
+
+ AircraftIndex++;
+
+ return true;
+}
+
+AIRCRAFT_LIVERY AircraftLiveryFromFlightNumber(char * strFlightNumber)
+{
+ int32_t liveryIndex;
+ char strLivery[4];
+
+ memset(strLivery, 0, 4 * sizeof(char) );
+
+ strncpy(strLivery, strFlightNumber, 3);
+
+ liveryIndex = SystemIndexOfStringArray(strLivery, AircraftLiveryNamesTable);
+
+ if(liveryIndex == -1)
+ {
+ return AIRCRAFT_LIVERY_UNKNOWN;
+ }
+
+ return AircraftLiveryTable[liveryIndex];
+}
+
+void AircraftHandler(void)
+{
+ TYPE_AIRCRAFT_DATA * ptrAircraft;
+ uint8_t i;
+
+ for(i = 0; i < GAME_MAX_AIRCRAFT; i++)
+ {
+ ptrAircraft = &AircraftData[i];
+
+ if(ptrAircraft->State == STATE_IDLE)
+ {
+ continue;
+ }
+
+ AircraftDirection(ptrAircraft);
+ AircraftAttitude(ptrAircraft);
+ }
+}
+
+void AircraftRender(TYPE_PLAYER * ptrPlayer)
+{
+ TYPE_AIRCRAFT_DATA * ptrAircraft;
+ TYPE_CARTESIAN_POS cartPos;
+
+ uint8_t i;
+
+ for(i = 0; i < GAME_MAX_AIRCRAFT; i++)
+ {
+ ptrAircraft = &AircraftData[i];
+
+ if(ptrAircraft->State == STATE_IDLE)
+ {
+ continue;
+ }
+
+ cartPos = GfxIsometricFix16ToCartesian(&ptrAircraft->IsoPos);
+
+ // Aircraft position is referred to aircraft center
+ AircraftSpr.x = cartPos.x - (AircraftSpr.w >> 1);
+ AircraftSpr.y = cartPos.y - (AircraftSpr.h >> 1);
+
+ AircraftUpdateSpriteFromData(ptrAircraft);
+
+ CameraApplyCoordinatesToSprite(ptrPlayer, &AircraftSpr);
+
+ AircraftSpr.r = NORMAL_LUMINANCE;
+ AircraftSpr.g = NORMAL_LUMINANCE;
+ AircraftSpr.b = NORMAL_LUMINANCE;
+
+ GfxSortSprite(&AircraftSpr);
+ }
+}
+
+void AircraftDirection(TYPE_AIRCRAFT_DATA * ptrAircraft)
+{
+ TYPE_ISOMETRIC_FIX16_POS targetPos;
+
+ if(ptrAircraft->Target[ptrAircraft->TargetIdx] == 0)
+ {
+ return;
+ }
+
+ targetPos.x = GameGetXFromTile(ptrAircraft->Target[ptrAircraft->TargetIdx]);
+ targetPos.y = GameGetYFromTile(ptrAircraft->Target[ptrAircraft->TargetIdx]);
+ targetPos.z = 0;
+
+ ptrAircraft->TargetReached = false;
+
+ if(targetPos.y == ptrAircraft->IsoPos.y)
+ {
+ if(targetPos.x > ptrAircraft->IsoPos.x)
+ {
+ ptrAircraft->Direction = AIRCRAFT_DIR_EAST;
+ ptrAircraft->IsoPos.x += ptrAircraft->Speed;
+ }
+ else if(targetPos.x < ptrAircraft->IsoPos.x)
+ {
+ ptrAircraft->Direction = AIRCRAFT_DIR_WEST;
+ ptrAircraft->IsoPos.x -= ptrAircraft->Speed;
+ }
+ else
+ {
+ ptrAircraft->TargetReached = true;
+
+ if(ptrAircraft->Target[++ptrAircraft->TargetIdx] == 0)
+ {
+ dprintf("All targets reached!\n");
+ GameTargetsReached(ptrAircraft->FlightDataIdx);
+ }
+ }
+ }
+ else if(targetPos.x == ptrAircraft->IsoPos.x)
+ {
+ if(targetPos.y > ptrAircraft->IsoPos.y)
+ {
+ ptrAircraft->Direction = AIRCRAFT_DIR_SOUTH;
+ ptrAircraft->IsoPos.y += ptrAircraft->Speed;
+ }
+ else if(targetPos.y < ptrAircraft->IsoPos.y)
+ {
+ ptrAircraft->Direction = AIRCRAFT_DIR_NORTH;
+ ptrAircraft->IsoPos.y -= ptrAircraft->Speed;
+ }
+ else
+ {
+ ptrAircraft->TargetReached = true;
+
+ if(ptrAircraft->Target[++ptrAircraft->TargetIdx] == 0)
+ {
+ dprintf("All targets reached!\n");
+ GameTargetsReached(ptrAircraft->FlightDataIdx);
+ }
+ }
+ }
+}
+
+void AircraftUpdateSpriteFromData(TYPE_AIRCRAFT_DATA * ptrAircraft)
+{
+ switch(ptrAircraft->Livery)
+ {
+ case AIRCRAFT_LIVERY_0:
+ AircraftSpr.cx = PHX_LIVERY_CLUT_X;
+ AircraftSpr.cy = PHX_LIVERY_CLUT_Y;
+ break;
+
+ case AIRCRAFT_LIVERY_UNKNOWN:
+ // Fall through
+ default:
+ dprintf("Unknown livery %d!\n", ptrAircraft->Livery);
+ break;
+ }
+
+ // Reset TPAGE and {U, V} offset first.
+ GfxTPageOffsetFromVRAMPosition(&AircraftSpr, AIRCRAFT_SPRITE_VRAM_X, AIRCRAFT_SPRITE_VRAM_Y);
+
+ switch(ptrAircraft->Direction)
+ {
+ case AIRCRAFT_DIR_NORTH:
+ AircraftSpr.v += AircraftSpr.w;
+ AircraftSpr.attribute |= H_FLIP;
+ break;
+ case AIRCRAFT_DIR_SOUTH:
+ AircraftSpr.v += 0;
+ AircraftSpr.attribute |= H_FLIP;
+ break;
+ case AIRCRAFT_DIR_EAST:
+ AircraftSpr.v += 0;
+ AircraftSpr.attribute &= ~(H_FLIP);
+ break;
+ case AIRCRAFT_DIR_WEST:
+ AircraftSpr.v += AircraftSpr.w;
+ AircraftSpr.attribute &= ~(H_FLIP);
+ break;
+ }
+}
+
+void AircraftAttitude(TYPE_AIRCRAFT_DATA * ptrAircraft)
+{
+ if(ptrAircraft->State == STATE_FINAL)
+ {
+ if(ptrAircraft->IsoPos.z > 0)
+ {
+ ptrAircraft->IsoPos.z -= AircraftSpeedsTable[AIRCRAFT_SPEED_DESCENT];
+ }
+ }
+}
+
+TYPE_ISOMETRIC_POS AircraftGetIsoPos(uint8_t FlightDataIdx)
+{
+ // Aircraft position data is stored in fix16_t data type instead of "short" data type.
+ // So we must perform a conversion first for convenience.
+ TYPE_ISOMETRIC_POS retIsoPos;
+ TYPE_ISOMETRIC_FIX16_POS fix16IsoPos = AircraftData[FlightDataIdx].IsoPos;
+
+ retIsoPos.x = (short)fix16_to_int(fix16IsoPos.x);
+ retIsoPos.y = (short)fix16_to_int(fix16IsoPos.y);
+ retIsoPos.z = (short)fix16_to_int(fix16IsoPos.z);
+
+ return retIsoPos;
+}
+
+void AircraftAddTargets(TYPE_AIRCRAFT_DATA * ptrAircraft, uint16_t * targets)
+{
+ memcpy(ptrAircraft->Target, targets, sizeof(uint16_t) * AIRCRAFT_MAX_TARGETS);
+}
+
+TYPE_AIRCRAFT_DATA * AircraftFromFlightDataIndex(uint8_t index)
+{
+ return &AircraftData[index];
+}
+
+void AircraftFromFlightDataIndexAddTargets(uint8_t index, uint16_t * targets)
+{
+ AircraftAddTargets(AircraftFromFlightDataIndex(index), targets);
+}
diff --git a/Source/Aircraft.h b/Source/Aircraft.h new file mode 100755 index 0000000..2c64422 --- /dev/null +++ b/Source/Aircraft.h @@ -0,0 +1,28 @@ +#ifndef __AIRCRAFT_HEADER__
+#define __AIRCRAFT_HEADER__
+
+/* *************************************
+ * Includes
+ * *************************************/
+
+#include "Global_Inc.h"
+#include "System.h"
+#include "GameStructures.h"
+
+
+/* *************************************
+ * Global prototypes
+ * *************************************/
+
+void AircraftInit(void);
+void AircraftHandler(void);
+void AircraftRender(TYPE_PLAYER * ptrPlayer);
+TYPE_AIRCRAFT_DATA * AircraftFromFlightDataIndex(uint8_t index);
+void AircraftFromFlightDataIndexAddTargets(uint8_t index, uint16_t * targets);
+void AircraftAddTargets(TYPE_AIRCRAFT_DATA * ptrAircraft, uint16_t * targets);
+TYPE_ISOMETRIC_POS AircraftGetIsoPos(uint8_t FlightDataIdx);
+bool AircraftAddNew( TYPE_FLIGHT_DATA * ptrFlightData,
+ uint8_t FlightDataIndex,
+ uint16_t * targets );
+
+#endif //__AIRCRAFT_HEADER__
diff --git a/Source/Camera.c b/Source/Camera.c new file mode 100755 index 0000000..9241455 --- /dev/null +++ b/Source/Camera.c @@ -0,0 +1,201 @@ +/* ************************************* + * Includes + * *************************************/ + +#include "Camera.h" + +/* ************************************* + * Defines + * *************************************/ + +#define SPEED_CALCULATION_TIME 3 +#define MAX_CAMERA_SPEED 5 +#define MIN_CAMERA_SPEED 1 +#define CAMERA_INITIAL_X_OFFSET (X_SCREEN_RESOLUTION >> 1) + +/* ************************************* + * Local Prototypes + * *************************************/ + +static void CameraUpdateSpeed(TYPE_PLAYER * ptrPlayer); +static bool CameraSpecialConditions(TYPE_PLAYER * ptrPlayer); + +void CameraInit(TYPE_PLAYER * ptrPlayer) +{ + // Center camera on screen + ptrPlayer->Camera.X_Offset = CAMERA_INITIAL_X_OFFSET; + ptrPlayer->Camera.Y_Offset = 0; + ptrPlayer->Camera.X_Speed = 0; + ptrPlayer->Camera.Y_Speed = 0; + ptrPlayer->Camera.Speed_Timer = SPEED_CALCULATION_TIME; +} + +void CameraApplyCoordinatesToSprite(TYPE_PLAYER * ptrPlayer, GsSprite * spr) +{ + spr->x += (short)ptrPlayer->Camera.X_Offset; + spr->y += (short)ptrPlayer->Camera.Y_Offset; +} + +void CameraApplyCoordinatesToRectangle(TYPE_PLAYER * ptrPlayer, GsRectangle * rect) +{ + dprintf("Rectangle {%d, %d}\n", + rect->x, + rect->y ); + + rect->x += (short)ptrPlayer->Camera.X_Offset; + rect->y += (short)ptrPlayer->Camera.Y_Offset; +} + +void CameraUpdateSpeed(TYPE_PLAYER * ptrPlayer) +{ + if(ptrPlayer->PadDirectionKeyPressed_Callback() == true) + { + if(ptrPlayer->PadKeyPressed_Callback(PAD_LEFT) == true) + { + if(ptrPlayer->Camera.X_Speed < 0) + { + ptrPlayer->Camera.X_Speed += 2; + } + else if(ptrPlayer->Camera.X_Speed < MAX_CAMERA_SPEED) + { + ptrPlayer->Camera.X_Speed++; + } + } + + if(ptrPlayer->PadKeyPressed_Callback(PAD_UP) == true) + { + if(ptrPlayer->Camera.Y_Speed < 0) + { + ptrPlayer->Camera.Y_Speed += 2; + } + else if(ptrPlayer->Camera.Y_Speed < MAX_CAMERA_SPEED) + { + ptrPlayer->Camera.Y_Speed++; + } + } + + if(ptrPlayer->PadKeyPressed_Callback(PAD_DOWN) == true) + { + if(ptrPlayer->Camera.Y_Speed > 0) + { + ptrPlayer->Camera.Y_Speed -= 2; + } + else if(ptrPlayer->Camera.Y_Speed > -MAX_CAMERA_SPEED) + { + ptrPlayer->Camera.Y_Speed--; + } + } + + if(ptrPlayer->PadKeyPressed_Callback(PAD_RIGHT) == true) + { + if(ptrPlayer->Camera.X_Speed > 0) + { + ptrPlayer->Camera.X_Speed -= 2; + } + else if(ptrPlayer->Camera.X_Speed > -MAX_CAMERA_SPEED) + { + ptrPlayer->Camera.X_Speed--; + } + } + } + + if( (ptrPlayer->PadKeyPressed_Callback(PAD_LEFT) == false) + && + (ptrPlayer->PadKeyPressed_Callback(PAD_RIGHT) == false) ) + { + if(ptrPlayer->Camera.X_Speed > 0) + { + ptrPlayer->Camera.X_Speed--; + } + else if(ptrPlayer->Camera.X_Speed < 0) + { + ptrPlayer->Camera.X_Speed++; + } + } + + if( (ptrPlayer->PadKeyPressed_Callback(PAD_UP) == false) + && + (ptrPlayer->PadKeyPressed_Callback(PAD_DOWN) == false) ) + { + if(ptrPlayer->Camera.Y_Speed > 0) + { + ptrPlayer->Camera.Y_Speed--; + } + else if(ptrPlayer->Camera.Y_Speed < 0) + { + ptrPlayer->Camera.Y_Speed++; + } + } +} + +void CameraHandler(TYPE_PLAYER * ptrPlayer) +{ + if(CameraSpecialConditions(ptrPlayer) == true) + { + ptrPlayer->Camera.X_Speed = 0; + ptrPlayer->Camera.Y_Speed = 0; + return; + } + + if(ptrPlayer->Camera.Speed_Timer < SPEED_CALCULATION_TIME) + { + ptrPlayer->Camera.Speed_Timer++; + } + else + { + ptrPlayer->Camera.Speed_Timer = 0; + CameraUpdateSpeed(ptrPlayer); + } + + ptrPlayer->Camera.X_Offset += ptrPlayer->Camera.X_Speed; + ptrPlayer->Camera.Y_Offset += ptrPlayer->Camera.Y_Speed; +} + +bool CameraSpecialConditions(TYPE_PLAYER * ptrPlayer) +{ + if( (ptrPlayer->ShowAircraftData == true) + || + (ptrPlayer->SelectRunway == true) ) + { + // Camera cannot be handled when these states are activated + + return true; + } + + return false; +} + +TYPE_ISOMETRIC_POS CameraGetIsoPos(TYPE_PLAYER * ptrPlayer) +{ + TYPE_ISOMETRIC_POS IsoPos; + TYPE_CARTESIAN_POS CartPos; + + CartPos.x = CAMERA_INITIAL_X_OFFSET - ptrPlayer->Camera.X_Offset; + CartPos.y = (Y_SCREEN_RESOLUTION >> 1) - ptrPlayer->Camera.Y_Offset; + + /*dprintf("CartPos = {%d, %d}\n", CartPos.x, CartPos.y);*/ + + IsoPos = GfxCartesianToIsometric(&CartPos); + + return IsoPos; +} + +void CameraMoveToIsoPos(TYPE_PLAYER * ptrPlayer, TYPE_ISOMETRIC_POS IsoPos) +{ + TYPE_CARTESIAN_POS CartPos = GfxIsometricToCartesian(&IsoPos); + + /*dprintf("Isometric pos = {%d, %d, %d}, " + "Cartesian pos = {%d, %d}\n", + IsoPos.x, + IsoPos.y, + IsoPos.z, + CartPos.x, + CartPos.y );*/ + + ptrPlayer->Camera.X_Offset = CAMERA_INITIAL_X_OFFSET - CartPos.x; + ptrPlayer->Camera.Y_Offset = (Y_SCREEN_RESOLUTION >> 1) - CartPos.y; + + /*dprintf("Moving camera to {%d, %d}\n", + ptrPlayer->Camera.X_Offset, + ptrPlayer->Camera.Y_Offset );*/ +} diff --git a/Source/Camera.h b/Source/Camera.h new file mode 100755 index 0000000..8e6866f --- /dev/null +++ b/Source/Camera.h @@ -0,0 +1,28 @@ +#ifndef __CAM_HEADER__ +#define __CAM_HEADER__ + +/* ************************************* + * Includes + * *************************************/ + +#include "Global_Inc.h" +#include "System.h" +#include "Pad.h" +#include "GameStructures.h" + +/* ************************************* + * Defines + * *************************************/ + +/* ************************************* + * Global prototypes + * *************************************/ + +void CameraInit(TYPE_PLAYER * ptrPlayer); +void CameraHandler(TYPE_PLAYER * ptrPlayer); +void CameraApplyCoordinatesToSprite(TYPE_PLAYER * ptrPlayer, GsSprite * spr); +void CameraApplyCoordinatesToRectangle(TYPE_PLAYER * ptrPlayer, GsRectangle * rect); +TYPE_ISOMETRIC_POS CameraGetIsoPos(TYPE_PLAYER * ptrPlayer); +void CameraMoveToIsoPos(TYPE_PLAYER * ptrPlayer, TYPE_ISOMETRIC_POS ptrIsoPos); + +#endif //__CAM_HEADER__ diff --git a/Source/EndAnimation.c b/Source/EndAnimation.c new file mode 100755 index 0000000..27789c8 --- /dev/null +++ b/Source/EndAnimation.c @@ -0,0 +1,235 @@ +/* ************************************* + * Includes + * *************************************/ + +#include "EndAnimation.h" + +/* ************************************* + * Defines + * *************************************/ + +/* ************************************* + * Structs and enums + * *************************************/ + +enum +{ + END_ANIMATION_FADEOUT_STEP = 8, + + END_ANIMATION_LINE_STEP = 2, + + END_ANIMATION_SQUARES_SIZE_BITSHIFT = 5, + END_ANIMATION_SQUARES_SIZE = 32, + END_ANIMATION_SQUARES_PER_COLUMN = 8, + END_ANIMATION_SQUARES_PER_ROW = 12, + END_ANIMATION_SQUARES_TOTAL = END_ANIMATION_SQUARES_PER_COLUMN * + END_ANIMATION_SQUARES_PER_ROW, + + END_ANIMATION_SQUARES_TOTAL_MAX_INDEX = END_ANIMATION_SQUARES_TOTAL - 1, + + END_ANIMATION_SQUARES = 0, + END_ANIMATION_FADEOUT, + END_ANIMATION_LINE, + END_ANIMATION_MAX_RAND_VALUE = END_ANIMATION_LINE +}; + +/* ************************************* + * Local Prototypes + * *************************************/ + +static void EndAnimationSquares(void); +static void EndAnimationFadeOut(void); +static void EndAnimationLine(void); + +/* ************************************* + * Local Variables + * *************************************/ + +static GsRectangle EndAnimationRect; +static GsSprite EndAnimationDisplay; + +void EndAnimation(void) +{ + uint8_t randIndex = 0; + + GfxSaveDisplayData(&EndAnimationDisplay); + + GfxSetGlobalLuminance(NORMAL_LUMINANCE); + + if(SystemIsRandSeedSet() == false) + { + // Set default end animation + EndAnimationFadeOut(); + } + else + { + randIndex = rand() % (END_ANIMATION_MAX_RAND_VALUE + 1); + + switch(randIndex) + { + case END_ANIMATION_SQUARES: + EndAnimationSquares(); + break; + + case END_ANIMATION_FADEOUT: + EndAnimationFadeOut(); + break; + + case END_ANIMATION_LINE: + EndAnimationLine(); + break; + + default: + break; + } + + SfxStopMusic(); + } +} + +void EndAnimationFadeOut(void) +{ + uint8_t i; + + while(1) + { + if( GfxGetGlobalLuminance() > 0) + { + GfxSetGlobalLuminance(GfxGetGlobalLuminance() - END_ANIMATION_FADEOUT_STEP); + + GfxSortSprite(&EndAnimationDisplay);; + GfxDrawScene_Slow(); + } + else + { + GsSortCls(0,0,0); + + for(i = 0 ; i < 2 ; i++) + { + // Draw two frames to ensure black display + GfxDrawScene_Slow(); + } + + break; + } + } +} + +void EndAnimationLine(void) +{ + short rectIndex = 0; + + do + { + GfxSortSprite(&EndAnimationDisplay); + + // Draw upper half rectangle + + EndAnimationRect.x = 0; + EndAnimationRect.y = 0; + + EndAnimationRect.w = X_SCREEN_RESOLUTION; + EndAnimationRect.h = rectIndex; + + GsSortRectangle(&EndAnimationRect); + + EndAnimationRect.x = 0; + EndAnimationRect.y = Y_SCREEN_RESOLUTION - rectIndex; + + EndAnimationRect.w = X_SCREEN_RESOLUTION; + EndAnimationRect.h = rectIndex; + + GsSortRectangle(&EndAnimationRect); + + GfxDrawScene_Slow(); + + rectIndex += END_ANIMATION_LINE_STEP; + + }while(rectIndex <= (X_SCREEN_RESOLUTION >> 1) ); + +} + +void EndAnimationSquares(void) +{ + uint16_t i, j, k; + uint16_t randInd = 0; + bool sqPos[END_ANIMATION_SQUARES_TOTAL]; + uint16_t sqCounter = END_ANIMATION_SQUARES_TOTAL; + uint16_t maxIndex = END_ANIMATION_SQUARES_TOTAL_MAX_INDEX; + + EndAnimationRect.w = END_ANIMATION_SQUARES_SIZE; + EndAnimationRect.h = END_ANIMATION_SQUARES_SIZE; + + EndAnimationRect.r = 0; + EndAnimationRect.g = 0; + EndAnimationRect.b = 0; + + memset(sqPos, false , END_ANIMATION_SQUARES_TOTAL); + + for(i = 0; i < END_ANIMATION_SQUARES_TOTAL ; i++) + { + + do + { + randInd = SystemRand(0,maxIndex); + + /*dprintf("randInd = %d\t",randInd); + dprintf("sqPos[randInd] = %d\n", sqPos[randInd]);*/ + + if(sqPos[randInd] == false) + { + sqPos[randInd] = true; + sqCounter--; + + while(sqPos[maxIndex] == true) + { + // Lower maximum value for rand() so that it's + // easier to spot new empty index on next iteration. + maxIndex--; + } + + break; + } + else + { + if(sqCounter == 0) + { + break; + } + } + + }while(1); + + GfxSortSprite(&EndAnimationDisplay); + + if(sqCounter != 0) + { + for(j = 0; j < END_ANIMATION_SQUARES_TOTAL ; j++) + { + if(sqPos[j] == true) + { + EndAnimationRect.x = ((j) << END_ANIMATION_SQUARES_SIZE_BITSHIFT) - + (short)( (j / END_ANIMATION_SQUARES_PER_ROW) * + X_SCREEN_RESOLUTION); + + EndAnimationRect.y = (short) (j/ END_ANIMATION_SQUARES_PER_ROW) << + END_ANIMATION_SQUARES_SIZE_BITSHIFT; + + GsSortRectangle(&EndAnimationRect); + } + } + } + else + { + // Quick fix: draw a full black rectangle instead of multiple squares + for(k = 0 ; k < 2 ; k++) + { + // Draw two frames to ensure black display + GsSortCls(0,0,0); + GfxDrawScene_Slow(); + } + } + + GfxDrawScene_Slow(); + } +} diff --git a/Source/EndAnimation.h b/Source/EndAnimation.h new file mode 100755 index 0000000..edb7b07 --- /dev/null +++ b/Source/EndAnimation.h @@ -0,0 +1,25 @@ +#ifndef __END_SCREEN_HEADER__ +#define __END_SCREEN_HEADER__ + +/* ************************************** + * Includes * + * **************************************/ + +#include "Global_Inc.h" +#include "Gfx.h" + +/* ************************************** + * Defines * + * **************************************/ + +/* ************************************** + * Global Prototypes * + * **************************************/ + +void EndAnimation(void); + +/* ************************************** + * Global Variables * + * **************************************/ + +#endif // __END_SCREEN_HEADER__ diff --git a/Source/Exe/AIRPORT.s b/Source/Exe/AIRPORT.s new file mode 100644 index 0000000..bdff6c5 --- /dev/null +++ b/Source/Exe/AIRPORT.s @@ -0,0 +1,52108 @@ + +AIRPORT.elf: file format elf32-littlemips + + +Disassembly of section .text: + +80010000 <__text_start>: +.extern get_cop0_epc +#.global run_bios +#.global is_load_delay_ok + +_start: + li $29, 0x801fff00 # Load stack pointer +80010000: 3c1d801f lui sp,0x801f +80010004: 37bdff00 ori sp,sp,0xff00 + li $k1, 0x1f800000 # set to hardware base +80010008: 3c1b1f80 lui k1,0x1f80 + + addiu $sp, $sp, -24 +8001000c: 27bdffe8 addiu sp,sp,-24 + jal ResetEntryInt +80010010: 0c00edad jal 8003b6b4 <ResetEntryInt> +80010014: 00000000 nop + nop +80010018: 00000000 nop + + jal psxsdk_setup +8001001c: 0c00d562 jal 80035588 <psxsdk_setup> +80010020: 00000000 nop + nop +80010024: 00000000 nop + + jal main +80010028: 0c009473 jal 800251cc <main> +8001002c: 00000000 nop + nop +80010030: 00000000 nop + +80010034 <_real_exit>: + +_real_exit: + la $a0, progtermfmt +80010034: 3c048004 lui a0,0x8004 +80010038: 248413e1 addiu a0,a0,5089 + move $a1, $v0 +8001003c: 00402821 move a1,v0 + + jal printf +80010040: 0c00ed8f jal 8003b63c <printf> +80010044: 00000000 nop + nop +80010048: 00000000 nop + + jal call_atexit_callbacks +8001004c: 0c00d511 jal 80035444 <call_atexit_callbacks> +80010050: 00000000 nop + nop +80010054: 00000000 nop + +80010058 <inf_loop>: + +inf_loop: + j inf_loop +80010058: 08004016 j 80010058 <inf_loop> +8001005c: 00000000 nop + nop +80010060: 00000000 nop + +80010064 <vblank_handler>: + +# VBlank handler + +vblank_handler: + addi $sp, -120 +80010064: 23bdff88 addi sp,sp,-120 +.set noat + sw $at, 0($sp) +80010068: afa10000 sw at,0(sp) + mfhi $at +8001006c: 00000810 mfhi at + sw $at, 112($sp) +80010070: afa10070 sw at,112(sp) + mflo $at +80010074: 00000812 mflo at + sw $at, 116($sp) +80010078: afa10074 sw at,116(sp) +.set at + sw $v0, 4($sp) +8001007c: afa20004 sw v0,4(sp) + sw $v1, 8($sp) +80010080: afa30008 sw v1,8(sp) + sw $a0, 12($sp) +80010084: afa4000c sw a0,12(sp) + sw $a1, 16($sp) +80010088: afa50010 sw a1,16(sp) + sw $a2, 20($sp) +8001008c: afa60014 sw a2,20(sp) + sw $a3, 24($sp) +80010090: afa70018 sw a3,24(sp) + sw $t0, 28($sp) +80010094: afa8001c sw t0,28(sp) + sw $t1, 32($sp) +80010098: afa90020 sw t1,32(sp) + sw $t2, 36($sp) +8001009c: afaa0024 sw t2,36(sp) + sw $t3, 40($sp) +800100a0: afab0028 sw t3,40(sp) + sw $t4, 44($sp) +800100a4: afac002c sw t4,44(sp) + sw $t5, 48($sp) +800100a8: afad0030 sw t5,48(sp) + sw $t6, 52($sp) +800100ac: afae0034 sw t6,52(sp) + sw $t7, 56($sp) +800100b0: afaf0038 sw t7,56(sp) + sw $s0, 60($sp) +800100b4: afb0003c sw s0,60(sp) + sw $s1, 64($sp) +800100b8: afb10040 sw s1,64(sp) + sw $s2, 68($sp) +800100bc: afb20044 sw s2,68(sp) + sw $s3, 72($sp) +800100c0: afb30048 sw s3,72(sp) + sw $s4, 76($sp) +800100c4: afb4004c sw s4,76(sp) + sw $s5, 80($sp) +800100c8: afb50050 sw s5,80(sp) + sw $s6, 84($sp) +800100cc: afb60054 sw s6,84(sp) + sw $s7, 88($sp) +800100d0: afb70058 sw s7,88(sp) + sw $t8, 92($sp) +800100d4: afb8005c sw t8,92(sp) + sw $t9, 96($sp) +800100d8: afb90060 sw t9,96(sp) + sw $gp, 100($sp) +800100dc: afbc0064 sw gp,100(sp) + sw $s8, 104($sp) +800100e0: afbe0068 sw s8,104(sp) + sw $ra, 108($sp) +800100e4: afbf006c sw ra,108(sp) + +800100e8 <vblank_fire_user_handler>: + +vblank_fire_user_handler: + + la $t0, vblank_handler_callback +800100e8: 3c088007 lui t0,0x8007 +800100ec: 25081d70 addiu t0,t0,7536 + lw $t1, 0($t0) +800100f0: 8d090000 lw t1,0(t0) + + addiu $sp, $sp, -24 +800100f4: 27bdffe8 addiu sp,sp,-24 + jalr $t1 +800100f8: 0120f809 jalr t1 +800100fc: 00000000 nop + nop +80010100: 00000000 nop + addiu $sp, $sp, 24 +80010104: 27bd0018 addiu sp,sp,24 + +80010108 <vblank_acknowledge_irq>: + +vblank_acknowledge_irq: + li $t0, 0x1f801070 # IPENDING +80010108: 3c081f80 lui t0,0x1f80 +8001010c: 35081070 ori t0,t0,0x1070 + + lw $t1, 0($t0) +80010110: 8d090000 lw t1,0(t0) + ... + nop + nop + xori $t1, $t1, 1 # Acknowledge VBlank IRQ +8001011c: 39290001 xori t1,t1,0x1 + sw $t1, 0($t0) +80010120: ad090000 sw t1,0(t0) + +80010124 <vblank_handler_end>: + +vblank_handler_end: +.set noat + lw $at, 112($sp) +80010124: 8fa10070 lw at,112(sp) + nop +80010128: 00000000 nop + mthi $at +8001012c: 00200011 mthi at + lw $at, 116($sp) +80010130: 8fa10074 lw at,116(sp) + nop +80010134: 00000000 nop + mtlo $at +80010138: 00200013 mtlo at + lw $at, 0($sp) +8001013c: 8fa10000 lw at,0(sp) +.set at + lw $v0, 4($sp) +80010140: 8fa20004 lw v0,4(sp) + lw $v1, 8($sp) +80010144: 8fa30008 lw v1,8(sp) + lw $a0, 12($sp) +80010148: 8fa4000c lw a0,12(sp) + lw $a1, 16($sp) +8001014c: 8fa50010 lw a1,16(sp) + lw $a2, 20($sp) +80010150: 8fa60014 lw a2,20(sp) + lw $a3, 24($sp) +80010154: 8fa70018 lw a3,24(sp) + lw $t0, 28($sp) +80010158: 8fa8001c lw t0,28(sp) + lw $t1, 32($sp) +8001015c: 8fa90020 lw t1,32(sp) + lw $t2, 36($sp) +80010160: 8faa0024 lw t2,36(sp) + lw $t3, 40($sp) +80010164: 8fab0028 lw t3,40(sp) + lw $t4, 44($sp) +80010168: 8fac002c lw t4,44(sp) + lw $t5, 48($sp) +8001016c: 8fad0030 lw t5,48(sp) + lw $t6, 52($sp) +80010170: 8fae0034 lw t6,52(sp) + lw $t7, 56($sp) +80010174: 8faf0038 lw t7,56(sp) + lw $s0, 60($sp) +80010178: 8fb0003c lw s0,60(sp) + lw $s1, 64($sp) +8001017c: 8fb10040 lw s1,64(sp) + lw $s2, 68($sp) +80010180: 8fb20044 lw s2,68(sp) + lw $s3, 72($sp) +80010184: 8fb30048 lw s3,72(sp) + lw $s4, 76($sp) +80010188: 8fb4004c lw s4,76(sp) + lw $s5, 80($sp) +8001018c: 8fb50050 lw s5,80(sp) + lw $s6, 84($sp) +80010190: 8fb60054 lw s6,84(sp) + lw $s7, 88($sp) +80010194: 8fb70058 lw s7,88(sp) + lw $t8, 92($sp) +80010198: 8fb8005c lw t8,92(sp) + lw $t9, 96($sp) +8001019c: 8fb90060 lw t9,96(sp) + lw $gp, 100($sp) +800101a0: 8fbc0064 lw gp,100(sp) + lw $s8, 104($sp) +800101a4: 8fbe0068 lw s8,104(sp) + lw $ra, 108($sp) +800101a8: 8fbf006c lw ra,108(sp) + addi $sp, 120 +800101ac: 23bd0078 addi sp,sp,120 + jr $ra +800101b0: 03e00008 jr ra +800101b4: 00000000 nop + nop +800101b8: 00000000 nop + +800101bc <rcnt_handler>: + +# Root counter handler + +rcnt_handler: + addi $sp, -120 +800101bc: 23bdff88 addi sp,sp,-120 +.set noat + sw $at, 0($sp) +800101c0: afa10000 sw at,0(sp) + mfhi $at +800101c4: 00000810 mfhi at + sw $at, 112($sp) +800101c8: afa10070 sw at,112(sp) + mflo $at +800101cc: 00000812 mflo at + sw $at, 116($sp) +800101d0: afa10074 sw at,116(sp) +.set at + sw $v0, 4($sp) +800101d4: afa20004 sw v0,4(sp) + sw $v1, 8($sp) +800101d8: afa30008 sw v1,8(sp) + sw $a0, 12($sp) +800101dc: afa4000c sw a0,12(sp) + sw $a1, 16($sp) +800101e0: afa50010 sw a1,16(sp) + sw $a2, 20($sp) +800101e4: afa60014 sw a2,20(sp) + sw $a3, 24($sp) +800101e8: afa70018 sw a3,24(sp) + sw $t0, 28($sp) +800101ec: afa8001c sw t0,28(sp) + sw $t1, 32($sp) +800101f0: afa90020 sw t1,32(sp) + sw $t2, 36($sp) +800101f4: afaa0024 sw t2,36(sp) + sw $t3, 40($sp) +800101f8: afab0028 sw t3,40(sp) + sw $t4, 44($sp) +800101fc: afac002c sw t4,44(sp) + sw $t5, 48($sp) +80010200: afad0030 sw t5,48(sp) + sw $t6, 52($sp) +80010204: afae0034 sw t6,52(sp) + sw $t7, 56($sp) +80010208: afaf0038 sw t7,56(sp) + sw $s0, 60($sp) +8001020c: afb0003c sw s0,60(sp) + sw $s1, 64($sp) +80010210: afb10040 sw s1,64(sp) + sw $s2, 68($sp) +80010214: afb20044 sw s2,68(sp) + sw $s3, 72($sp) +80010218: afb30048 sw s3,72(sp) + sw $s4, 76($sp) +8001021c: afb4004c sw s4,76(sp) + sw $s5, 80($sp) +80010220: afb50050 sw s5,80(sp) + sw $s6, 84($sp) +80010224: afb60054 sw s6,84(sp) + sw $s7, 88($sp) +80010228: afb70058 sw s7,88(sp) + sw $t8, 92($sp) +8001022c: afb8005c sw t8,92(sp) + sw $t9, 96($sp) +80010230: afb90060 sw t9,96(sp) + sw $gp, 100($sp) +80010234: afbc0064 sw gp,100(sp) + sw $s8, 104($sp) +80010238: afbe0068 sw s8,104(sp) + sw $ra, 108($sp) +8001023c: afbf006c sw ra,108(sp) + +80010240 <rcnt_fire_user_handler>: + +rcnt_fire_user_handler: + la $t0, rcnt_handler_callback +80010240: 3c088007 lui t0,0x8007 +80010244: 25081d6c addiu t0,t0,7532 + lw $t1, 0($t0) +80010248: 8d090000 lw t1,0(t0) + + addiu $sp, $sp, -24 +8001024c: 27bdffe8 addiu sp,sp,-24 + jalr $t1 +80010250: 0120f809 jalr t1 +80010254: 00000000 nop + nop +80010258: 00000000 nop + addiu $sp, $sp, 24 +8001025c: 27bd0018 addiu sp,sp,24 + +80010260 <rcnt_acknowledge_irq>: + +rcnt_acknowledge_irq: + li $t0, 0x1f801070 # IPENDING +80010260: 3c081f80 lui t0,0x1f80 +80010264: 35081070 ori t0,t0,0x1070 + la $t2, rcnt_handler_evfield +80010268: 3c0a8007 lui t2,0x8007 +8001026c: 254a1d68 addiu t2,t2,7528 + + lw $t1, 0($t0) +80010270: 8d090000 lw t1,0(t0) + ... + nop + nop + xor $t1, $t1, $t2 # Acknowledge Root Counter IRQ +8001027c: 012a4826 xor t1,t1,t2 + sw $t1, 0($t0) +80010280: ad090000 sw t1,0(t0) + +80010284 <rcnt_handler_end>: + +rcnt_handler_end: +.set noat + lw $at, 112($sp) +80010284: 8fa10070 lw at,112(sp) + nop +80010288: 00000000 nop + mthi $at +8001028c: 00200011 mthi at + lw $at, 116($sp) +80010290: 8fa10074 lw at,116(sp) + nop +80010294: 00000000 nop + mtlo $at +80010298: 00200013 mtlo at + lw $at, 0($sp) +8001029c: 8fa10000 lw at,0(sp) +.set at + lw $v0, 4($sp) +800102a0: 8fa20004 lw v0,4(sp) + lw $v1, 8($sp) +800102a4: 8fa30008 lw v1,8(sp) + lw $a0, 12($sp) +800102a8: 8fa4000c lw a0,12(sp) + lw $a1, 16($sp) +800102ac: 8fa50010 lw a1,16(sp) + lw $a2, 20($sp) +800102b0: 8fa60014 lw a2,20(sp) + lw $a3, 24($sp) +800102b4: 8fa70018 lw a3,24(sp) + lw $t0, 28($sp) +800102b8: 8fa8001c lw t0,28(sp) + lw $t1, 32($sp) +800102bc: 8fa90020 lw t1,32(sp) + lw $t2, 36($sp) +800102c0: 8faa0024 lw t2,36(sp) + lw $t3, 40($sp) +800102c4: 8fab0028 lw t3,40(sp) + lw $t4, 44($sp) +800102c8: 8fac002c lw t4,44(sp) + lw $t5, 48($sp) +800102cc: 8fad0030 lw t5,48(sp) + lw $t6, 52($sp) +800102d0: 8fae0034 lw t6,52(sp) + lw $t7, 56($sp) +800102d4: 8faf0038 lw t7,56(sp) + lw $s0, 60($sp) +800102d8: 8fb0003c lw s0,60(sp) + lw $s1, 64($sp) +800102dc: 8fb10040 lw s1,64(sp) + lw $s2, 68($sp) +800102e0: 8fb20044 lw s2,68(sp) + lw $s3, 72($sp) +800102e4: 8fb30048 lw s3,72(sp) + lw $s4, 76($sp) +800102e8: 8fb4004c lw s4,76(sp) + lw $s5, 80($sp) +800102ec: 8fb50050 lw s5,80(sp) + lw $s6, 84($sp) +800102f0: 8fb60054 lw s6,84(sp) + lw $s7, 88($sp) +800102f4: 8fb70058 lw s7,88(sp) + lw $t8, 92($sp) +800102f8: 8fb8005c lw t8,92(sp) + lw $t9, 96($sp) +800102fc: 8fb90060 lw t9,96(sp) + lw $gp, 100($sp) +80010300: 8fbc0064 lw gp,100(sp) + lw $s8, 104($sp) +80010304: 8fbe0068 lw s8,104(sp) + lw $ra, 108($sp) +80010308: 8fbf006c lw ra,108(sp) + addi $sp, 120 +8001030c: 23bd0078 addi sp,sp,120 + jr $ra +80010310: 03e00008 jr ra +80010314: 00000000 nop + nop +80010318: 00000000 nop + +8001031c <get_cop0_status>: + +get_cop0_status: + mfc0 $v0, $12 +8001031c: 40026000 mfc0 v0,c0_sr + jr $ra +80010320: 03e00008 jr ra +80010324: 00000000 nop + nop +80010328: 00000000 nop + +8001032c <set_cop0_status>: + +set_cop0_status: + mtc0 $a0, $12 +8001032c: 40846000 mtc0 a0,c0_sr + jr $ra +80010330: 03e00008 jr ra +80010334: 00000000 nop + nop +80010338: 00000000 nop + +8001033c <get_cop0_epc>: + +get_cop0_epc: + mfc0 $2, $14 +8001033c: 40027000 mfc0 v0,c0_epc + jr $ra +80010340: 03e00008 jr ra +80010344: 00000000 nop + nop +80010348: 00000000 nop + +8001034c <run_bios>: + +run_bios: + j 0xbfc00000 +8001034c: 0bf00000 j 8fc00000 <_EXC_dma_handler+0xfb8e26c> +80010350: 00000000 nop + nop +80010354: 00000000 nop + +80010358 <is_load_delay_ok>: + +is_load_delay_ok: + li $t2, 0 +80010358: 240a0000 li t2,0 + li $t0, 0x0adecade +8001035c: 3c080ade lui t0,0xade +80010360: 3508cade ori t0,t0,0xcade + la $t1, isldo_data +80010364: 3c098004 lui t1,0x8004 +80010368: 2529140c addiu t1,t1,5132 +8001036c: 8d2a0000 lw t2,0(t1) + .word 0x8d2a0000 #lw t2,0(t1) + beq $t0, $t2, load_delay_not_ok +80010370: 110a0006 beq t0,t2,8001038c <load_delay_not_ok> +80010374: 00000000 nop + nop +80010378: 00000000 nop + +8001037c <load_delay_ok>: +load_delay_ok: + li $v0, 1 +8001037c: 24020001 li v0,1 + jr $ra +80010380: 03e00008 jr ra +80010384: 00000000 nop + nop +80010388: 00000000 nop + +8001038c <load_delay_not_ok>: +load_delay_not_ok: + li $v0, 0 +8001038c: 24020000 li v0,0 + jr $ra +80010390: 03e00008 jr ra +80010394: 00000000 nop + nop +80010398: 00000000 nop + +8001039c <exit>: + +exit: + move $s0, $a0 +8001039c: 00808021 move s0,a0 + + la $a0, called_exit +800103a0: 3c048004 lui a0,0x8004 +800103a4: 248413d0 addiu a0,a0,5072 + move $a1, $s0 +800103a8: 02002821 move a1,s0 + + addiu $sp, $sp, -24 +800103ac: 27bdffe8 addiu sp,sp,-24 + jal printf +800103b0: 0c00ed8f jal 8003b63c <printf> +800103b4: 00000000 nop + nop +800103b8: 00000000 nop + addiu $sp, $sp, 24 +800103bc: 27bd0018 addiu sp,sp,24 + + move $v0, $s0 +800103c0: 02001021 move v0,s0 + + j _real_exit +800103c4: 0800400d j 80010034 <_real_exit> +800103c8: 00000000 nop + ... + +80020000 <deregister_tm_clones>: +80020000: 3c048004 lui a0,0x8004 +80020004: 3c028004 lui v0,0x8004 +80020008: 24842568 addiu a0,a0,9576 +8002000c: 2442256b addiu v0,v0,9579 +80020010: 00441023 subu v0,v0,a0 +80020014: 2c420007 sltiu v0,v0,7 +80020018: 14400006 bnez v0,80020034 <deregister_tm_clones+0x34> +8002001c: 3c190000 lui t9,0x0 +80020020: 27390000 addiu t9,t9,0 +80020024: 13200003 beqz t9,80020034 <deregister_tm_clones+0x34> +80020028: 00000000 nop +8002002c: 03200008 jr t9 +80020030: 00000000 nop +80020034: 03e00008 jr ra +80020038: 00000000 nop + +8002003c <register_tm_clones>: +8002003c: 3c048004 lui a0,0x8004 +80020040: 3c028004 lui v0,0x8004 +80020044: 24842568 addiu a0,a0,9576 +80020048: 24422568 addiu v0,v0,9576 +8002004c: 00441023 subu v0,v0,a0 +80020050: 00021083 sra v0,v0,0x2 +80020054: 00022fc2 srl a1,v0,0x1f +80020058: 00a22821 addu a1,a1,v0 +8002005c: 00052843 sra a1,a1,0x1 +80020060: 10a00006 beqz a1,8002007c <register_tm_clones+0x40> +80020064: 3c190000 lui t9,0x0 +80020068: 27390000 addiu t9,t9,0 +8002006c: 13200003 beqz t9,8002007c <register_tm_clones+0x40> +80020070: 00000000 nop +80020074: 03200008 jr t9 +80020078: 00000000 nop +8002007c: 03e00008 jr ra +80020080: 00000000 nop + +80020084 <__do_global_dtors_aux>: +80020084: 27bdffd8 addiu sp,sp,-40 +80020088: afb30020 sw s3,32(sp) +8002008c: 3c138004 lui s3,0x8004 +80020090: 92622584 lbu v0,9604(s3) +80020094: afbf0024 sw ra,36(sp) +80020098: afb2001c sw s2,28(sp) +8002009c: afb10018 sw s1,24(sp) +800200a0: 14400025 bnez v0,80020138 <__do_global_dtors_aux+0xb4> +800200a4: afb00014 sw s0,20(sp) +800200a8: 3c118004 lui s1,0x8004 +800200ac: 3c028004 lui v0,0x8004 +800200b0: 24422580 addiu v0,v0,9600 +800200b4: 2631257c addiu s1,s1,9596 +800200b8: 00518823 subu s1,v0,s1 +800200bc: 3c108004 lui s0,0x8004 +800200c0: 8e022588 lw v0,9608(s0) +800200c4: 00118883 sra s1,s1,0x2 +800200c8: 2631ffff addiu s1,s1,-1 +800200cc: 3c048004 lui a0,0x8004 +800200d0: 0051182b sltu v1,v0,s1 +800200d4: 2492257c addiu s2,a0,9596 +800200d8: 1060000c beqz v1,8002010c <__do_global_dtors_aux+0x88> +800200dc: 24420001 addiu v0,v0,1 +800200e0: 00021880 sll v1,v0,0x2 +800200e4: 02431821 addu v1,s2,v1 +800200e8: 8c630000 lw v1,0(v1) +800200ec: 00000000 nop +800200f0: 0060f809 jalr v1 +800200f4: ae022588 sw v0,9608(s0) +800200f8: 8e022588 lw v0,9608(s0) +800200fc: 00000000 nop +80020100: 0051182b sltu v1,v0,s1 +80020104: 1460fff6 bnez v1,800200e0 <__do_global_dtors_aux+0x5c> +80020108: 24420001 addiu v0,v0,1 +8002010c: 0c008000 jal 80020000 <deregister_tm_clones> +80020110: 00000000 nop +80020114: 3c020000 lui v0,0x0 +80020118: 24420000 addiu v0,v0,0 +8002011c: 10400005 beqz v0,80020134 <__do_global_dtors_aux+0xb0> +80020120: 24020001 li v0,1 +80020124: 3c048004 lui a0,0x8004 +80020128: 0c000000 jal 80000000 <__scratchpad+0x60800000> +8002012c: 24840118 addiu a0,a0,280 +80020130: 24020001 li v0,1 +80020134: a2622584 sb v0,9604(s3) +80020138: 8fbf0024 lw ra,36(sp) +8002013c: 8fb30020 lw s3,32(sp) +80020140: 8fb2001c lw s2,28(sp) +80020144: 8fb10018 lw s1,24(sp) +80020148: 8fb00014 lw s0,20(sp) +8002014c: 03e00008 jr ra +80020150: 27bd0028 addiu sp,sp,40 + +80020154 <frame_dummy>: +80020154: 3c020000 lui v0,0x0 +80020158: 27bdffe8 addiu sp,sp,-24 +8002015c: 24420000 addiu v0,v0,0 +80020160: 10400006 beqz v0,8002017c <frame_dummy+0x28> +80020164: afbf0014 sw ra,20(sp) +80020168: 3c058004 lui a1,0x8004 +8002016c: 3c048004 lui a0,0x8004 +80020170: 24a5258c addiu a1,a1,9612 +80020174: 0c000000 jal 80000000 <__scratchpad+0x60800000> +80020178: 24840118 addiu a0,a0,280 +8002017c: 3c028004 lui v0,0x8004 +80020180: 24442564 addiu a0,v0,9572 +80020184: 8c820000 lw v0,0(a0) +80020188: 00000000 nop +8002018c: 14400004 bnez v0,800201a0 <frame_dummy+0x4c> +80020190: 3c020000 lui v0,0x0 +80020194: 8fbf0014 lw ra,20(sp) +80020198: 0800800f j 8002003c <register_tm_clones> +8002019c: 27bd0018 addiu sp,sp,24 +800201a0: 24420000 addiu v0,v0,0 +800201a4: 1040fffb beqz v0,80020194 <frame_dummy+0x40> +800201a8: 00000000 nop +800201ac: 0040f809 jalr v0 +800201b0: 00000000 nop +800201b4: 1000fff7 b 80020194 <frame_dummy+0x40> +800201b8: 00000000 nop + +800201bc <fix16_to_int>: +static inline int fix16_to_int(fix16_t a) +{ +#ifdef FIXMATH_NO_ROUNDING + return a >> 16; +#else + if (a >= 0) +800201bc: 04800003 bltz a0,800201cc <fix16_to_int+0x10> +800201c0: 24828000 addiu v0,a0,-32768 + return (a + fix16_one / 2) / fix16_one; +800201c4: 34028000 li v0,0x8000 +800201c8: 00821021 addu v0,a0,v0 + else + return (a - fix16_one / 2) / fix16_one; +800201cc: 00021fc3 sra v1,v0,0x1f +800201d0: 3063ffff andi v1,v1,0xffff +800201d4: 00621021 addu v0,v1,v0 +#endif +} +800201d8: 03e00008 jr ra +800201dc: 00021403 sra v0,v0,0x10 + +800201e0 <AircraftInit>: +static void AircraftAttitude(TYPE_AIRCRAFT_DATA * ptrAircraft); +static void AircraftUpdateSpriteFromData(TYPE_AIRCRAFT_DATA * ptrAircraft); + +void AircraftInit(void) +{ + bzero(AircraftData, GAME_MAX_AIRCRAFT * sizeof(TYPE_AIRCRAFT_DATA)); +800201e0: 3c048004 lui a0,0x8004 +static AIRCRAFT_LIVERY AircraftLiveryFromFlightNumber(char * strFlightNumber); +static void AircraftAttitude(TYPE_AIRCRAFT_DATA * ptrAircraft); +static void AircraftUpdateSpriteFromData(TYPE_AIRCRAFT_DATA * ptrAircraft); + +void AircraftInit(void) +{ +800201e4: 27bdffe0 addiu sp,sp,-32 + bzero(AircraftData, GAME_MAX_AIRCRAFT * sizeof(TYPE_AIRCRAFT_DATA)); +800201e8: 24060d00 li a2,3328 +800201ec: 00002821 move a1,zero +static AIRCRAFT_LIVERY AircraftLiveryFromFlightNumber(char * strFlightNumber); +static void AircraftAttitude(TYPE_AIRCRAFT_DATA * ptrAircraft); +static void AircraftUpdateSpriteFromData(TYPE_AIRCRAFT_DATA * ptrAircraft); + +void AircraftInit(void) +{ +800201f0: afbf001c sw ra,28(sp) + bzero(AircraftData, GAME_MAX_AIRCRAFT * sizeof(TYPE_AIRCRAFT_DATA)); +800201f4: 0c00d7ab jal 80035eac <memset> +800201f8: 248425d0 addiu a0,a0,9680 + AircraftIndex = 0; +800201fc: 3c028007 lui v0,0x8007 + + AircraftSpr.x = 0; +80020200: 3c048004 lui a0,0x8004 +static void AircraftUpdateSpriteFromData(TYPE_AIRCRAFT_DATA * ptrAircraft); + +void AircraftInit(void) +{ + bzero(AircraftData, GAME_MAX_AIRCRAFT * sizeof(TYPE_AIRCRAFT_DATA)); + AircraftIndex = 0; +80020204: a0401bfe sb zero,7166(v0) + + AircraftSpr.x = 0; +80020208: a48025a4 sh zero,9636(a0) + AircraftSpr.y = 0; + + AircraftSpr.attribute = COLORMODE(COLORMODE_8BPP); +8002020c: 24020001 li v0,1 +{ + bzero(AircraftData, GAME_MAX_AIRCRAFT * sizeof(TYPE_AIRCRAFT_DATA)); + AircraftIndex = 0; + + AircraftSpr.x = 0; + AircraftSpr.y = 0; +80020210: 248425a4 addiu a0,a0,9636 + + AircraftSpr.attribute = COLORMODE(COLORMODE_8BPP); +80020214: ac820014 sw v0,20(a0) + + AircraftSpr.cx = PHX_LIVERY_CLUT_X; +80020218: 24020180 li v0,384 +8002021c: a482000a sh v0,10(a0) + AircraftSpr.cy = PHX_LIVERY_CLUT_Y; +80020220: 240201f1 li v0,497 +80020224: a482000c sh v0,12(a0) + + /*AircraftSpr.tpage = 28; + AircraftSpr.u = 64; + AircraftSpr.v = 48;*/ + + GfxTPageOffsetFromVRAMPosition(&AircraftSpr, AIRCRAFT_SPRITE_VRAM_X, AIRCRAFT_SPRITE_VRAM_Y); +80020228: 24060130 li a2,304 + AircraftSpr.attribute = COLORMODE(COLORMODE_8BPP); + + AircraftSpr.cx = PHX_LIVERY_CLUT_X; + AircraftSpr.cy = PHX_LIVERY_CLUT_Y; + + AircraftSpr.w = AIRCRAFT_SPRITE_SIZE; +8002022c: 24020018 li v0,24 + + /*AircraftSpr.tpage = 28; + AircraftSpr.u = 64; + AircraftSpr.v = 48;*/ + + GfxTPageOffsetFromVRAMPosition(&AircraftSpr, AIRCRAFT_SPRITE_VRAM_X, AIRCRAFT_SPRITE_VRAM_Y); +80020230: 24050320 li a1,800 +{ + bzero(AircraftData, GAME_MAX_AIRCRAFT * sizeof(TYPE_AIRCRAFT_DATA)); + AircraftIndex = 0; + + AircraftSpr.x = 0; + AircraftSpr.y = 0; +80020234: a4800002 sh zero,2(a0) + AircraftSpr.attribute = COLORMODE(COLORMODE_8BPP); + + AircraftSpr.cx = PHX_LIVERY_CLUT_X; + AircraftSpr.cy = PHX_LIVERY_CLUT_Y; + + AircraftSpr.w = AIRCRAFT_SPRITE_SIZE; +80020238: a4820006 sh v0,6(a0) + + /*AircraftSpr.tpage = 28; + AircraftSpr.u = 64; + AircraftSpr.v = 48;*/ + + GfxTPageOffsetFromVRAMPosition(&AircraftSpr, AIRCRAFT_SPRITE_VRAM_X, AIRCRAFT_SPRITE_VRAM_Y); +8002023c: 0c009187 jal 8002461c <GfxTPageOffsetFromVRAMPosition> +80020240: a4820008 sh v0,8(a0) + + AircraftCenterIsoPos.x = AIRCRAFT_SIZE >> 1; +80020244: 24020008 li v0,8 +80020248: 3c058007 lui a1,0x8007 +8002024c: a4a21bf8 sh v0,7160(a1) + AircraftCenterIsoPos.y = AIRCRAFT_SIZE >> 1; + AircraftCenterIsoPos.z = 0; + + AircraftCenterPos = GfxIsometricToCartesian(&AircraftCenterIsoPos); +80020250: 27a40010 addiu a0,sp,16 + AircraftSpr.v = 48;*/ + + GfxTPageOffsetFromVRAMPosition(&AircraftSpr, AIRCRAFT_SPRITE_VRAM_X, AIRCRAFT_SPRITE_VRAM_Y); + + AircraftCenterIsoPos.x = AIRCRAFT_SIZE >> 1; + AircraftCenterIsoPos.y = AIRCRAFT_SIZE >> 1; +80020254: 24a51bf8 addiu a1,a1,7160 +80020258: a4a20002 sh v0,2(a1) + AircraftCenterIsoPos.z = 0; + + AircraftCenterPos = GfxIsometricToCartesian(&AircraftCenterIsoPos); +8002025c: 0c0091ac jal 800246b0 <GfxIsometricToCartesian> +80020260: a4a00004 sh zero,4(a1) +} +80020264: 8fbf001c lw ra,28(sp) +80020268: 00000000 nop +8002026c: 03e00008 jr ra +80020270: 27bd0020 addiu sp,sp,32 + +80020274 <AircraftAddNew>: + +bool AircraftAddNew( TYPE_FLIGHT_DATA * ptrFlightData, + uint8_t FlightDataIndex, + uint16_t * targets ) +{ +80020274: 27bdffc0 addiu sp,sp,-64 +80020278: afb10020 sw s1,32(sp) + TYPE_AIRCRAFT_DATA * ptrAircraft = &AircraftData[AircraftIndex]; +8002027c: 3c118007 lui s1,0x8007 +} + +bool AircraftAddNew( TYPE_FLIGHT_DATA * ptrFlightData, + uint8_t FlightDataIndex, + uint16_t * targets ) +{ +80020280: afb70038 sw s7,56(sp) +80020284: afb50030 sw s5,48(sp) +80020288: afb4002c sw s4,44(sp) +8002028c: afb30028 sw s3,40(sp) +80020290: afb20024 sw s2,36(sp) +80020294: afbf003c sw ra,60(sp) +80020298: afb60034 sw s6,52(sp) +8002029c: afb0001c sw s0,28(sp) +800202a0: 0080a021 move s4,a0 +800202a4: 00c0b821 move s7,a2 + TYPE_AIRCRAFT_DATA * ptrAircraft = &AircraftData[AircraftIndex]; +800202a8: 92321bfe lbu s2,7166(s1) + uint8_t level_columns = GameGetLevelColumns(); +800202ac: 0c008c9a jal 80023268 <GameGetLevelColumns> +800202b0: 30b500ff andi s5,a1,0xff +800202b4: 00409821 move s3,v0 + uint8_t i; + + if(AircraftIndex >= GAME_MAX_AIRCRAFT) +800202b8: 92221bfe lbu v0,7166(s1) +800202bc: 00000000 nop +800202c0: 2c420020 sltiu v0,v0,32 +800202c4: 14400006 bnez v0,800202e0 <AircraftAddNew+0x6c> +800202c8: 24160068 li s6,104 + { + dprintf("Exceeded maximum aircraft capacity!\n"); +800202cc: 3c048004 lui a0,0x8004 +800202d0: 0c00ed8f jal 8003b63c <printf> +800202d4: 24840158 addiu a0,a0,344 + return false; +800202d8: 1000007c b 800204cc <AircraftAddNew+0x258> +800202dc: 00001021 move v0,zero + } + + memcpy(ptrAircraft->Target, targets, sizeof(uint16_t) * AIRCRAFT_MAX_TARGETS); +800202e0: 02560018 mult s2,s6 +800202e4: 3c108004 lui s0,0x8004 +800202e8: 261025d0 addiu s0,s0,9680 +800202ec: 24060040 li a2,64 +800202f0: 02e02821 move a1,s7 +800202f4: 0000b012 mflo s6 +800202f8: 26c40010 addiu a0,s6,16 +800202fc: 02042021 addu a0,s0,a0 +80020300: 0c00d75e jal 80035d78 <memcpy> +80020304: 02d0b021 addu s6,s6,s0 + + ptrAircraft->TargetIdx = 0; +80020308: a2c00050 sb zero,80(s6) + ptrAircraft->Livery = AircraftLiveryFromFlightNumber(ptrFlightData->strFlightNumber[FlightDataIndex]); +8002030c: 26b60010 addiu s6,s5,16 +80020310: 0016b0c0 sll s6,s6,0x3 +AIRCRAFT_LIVERY AircraftLiveryFromFlightNumber(char * strFlightNumber) +{ + int32_t liveryIndex; + char strLivery[4]; + + memset(strLivery, 0, 4 * sizeof(char) ); +80020314: 24060004 li a2,4 +80020318: 00002821 move a1,zero +8002031c: 27a40010 addiu a0,sp,16 +80020320: 0c00d7ab jal 80035eac <memset> +80020324: 0296b021 addu s6,s4,s6 + + strncpy(strLivery, strFlightNumber, 3); +80020328: 24060003 li a2,3 +8002032c: 02c02821 move a1,s6 +80020330: 0c00d860 jal 80036180 <strncpy> +80020334: 27a40010 addiu a0,sp,16 + + liveryIndex = SystemIndexOfStringArray(strLivery, AircraftLiveryNamesTable); +80020338: 3c058004 lui a1,0x8004 +8002033c: 27a40010 addiu a0,sp,16 +80020340: 0c00a167 jal 8002859c <SystemIndexOfStringArray> +80020344: 24a51410 addiu a1,a1,5136 + + if(liveryIndex == -1) +80020348: 2403ffff li v1,-1 +8002034c: 10430006 beq v0,v1,80020368 <AircraftAddNew+0xf4> +80020350: 00002021 move a0,zero + { + return AIRCRAFT_LIVERY_UNKNOWN; + } + + return AircraftLiveryTable[liveryIndex]; +80020354: 3c038004 lui v1,0x8004 +80020358: 00021080 sll v0,v0,0x2 +8002035c: 2463f77c addiu v1,v1,-2180 +80020360: 00431021 addu v0,v0,v1 +80020364: 8c440000 lw a0,0(v0) + } + + memcpy(ptrAircraft->Target, targets, sizeof(uint16_t) * AIRCRAFT_MAX_TARGETS); + + ptrAircraft->TargetIdx = 0; + ptrAircraft->Livery = AircraftLiveryFromFlightNumber(ptrFlightData->strFlightNumber[FlightDataIndex]); +80020368: 24030068 li v1,104 +8002036c: 02430018 mult s2,v1 + + ptrAircraft->FlightDataIdx = FlightDataIndex; + + if(ptrFlightData->FlightDirection[FlightDataIndex] == ARRIVAL) +80020370: 24020002 li v0,2 + } + + memcpy(ptrAircraft->Target, targets, sizeof(uint16_t) * AIRCRAFT_MAX_TARGETS); + + ptrAircraft->TargetIdx = 0; + ptrAircraft->Livery = AircraftLiveryFromFlightNumber(ptrFlightData->strFlightNumber[FlightDataIndex]); +80020374: 00001812 mflo v1 +80020378: 02031821 addu v1,s0,v1 + + ptrAircraft->FlightDataIdx = FlightDataIndex; +8002037c: a0750051 sb s5,81(v1) +80020380: 0015a880 sll s5,s5,0x2 + } + + memcpy(ptrAircraft->Target, targets, sizeof(uint16_t) * AIRCRAFT_MAX_TARGETS); + + ptrAircraft->TargetIdx = 0; + ptrAircraft->Livery = AircraftLiveryFromFlightNumber(ptrFlightData->strFlightNumber[FlightDataIndex]); +80020384: ac640000 sw a0,0(v1) +80020388: 0295a021 addu s4,s4,s5 + + ptrAircraft->FlightDataIdx = FlightDataIndex; + + if(ptrFlightData->FlightDirection[FlightDataIndex] == ARRIVAL) +8002038c: 8e840000 lw a0,0(s4) +80020390: 00000000 nop +80020394: 14820016 bne a0,v0,800203f0 <AircraftAddNew+0x17c> +80020398: 00000000 nop + { + ptrAircraft->IsoPos.x = 0; +8002039c: ac600054 sw zero,84(v1) + + ptrAircraft->IsoPos.y = targets[0] / level_columns; + ptrAircraft->IsoPos.y <<= TILE_SIZE_BIT_SHIFT; + ptrAircraft->IsoPos.y += TILE_SIZE >> 1; // Adjust to tile center + ptrAircraft->IsoPos.y = fix16_from_int(ptrAircraft->IsoPos.y); +800203a0: 96e20000 lhu v0,0(s7) +800203a4: 00000000 nop +800203a8: 16600002 bnez s3,800203b4 <AircraftAddNew+0x140> +800203ac: 0053001a div zero,v0,s3 +800203b0: 0007000d break 0x7 +800203b4: 00001012 mflo v0 +800203b8: 00021180 sll v0,v0,0x6 +800203bc: 24420020 addiu v0,v0,32 +800203c0: 00021400 sll v0,v0,0x10 +800203c4: ac620058 sw v0,88(v1) + + ptrAircraft->IsoPos.z = targets[0] % level_columns; + ptrAircraft->IsoPos.z <<= TILE_SIZE_BIT_SHIFT - 1; + ptrAircraft->IsoPos.z = fix16_from_int(ptrAircraft->IsoPos.z); +800203c8: 96e20000 lhu v0,0(s7) +800203cc: 00000000 nop +800203d0: 16600002 bnez s3,800203dc <AircraftAddNew+0x168> +800203d4: 0053001a div zero,v0,s3 +800203d8: 0007000d break 0x7 +800203dc: 00001010 mfhi v0 +800203e0: 00029d40 sll s3,v0,0x15 + + ptrAircraft->Speed = AircraftSpeedsTable[AIRCRAFT_SPEED_APPROACH]; +800203e4: 3c020001 lui v0,0x1 + ptrAircraft->IsoPos.y += TILE_SIZE >> 1; // Adjust to tile center + ptrAircraft->IsoPos.y = fix16_from_int(ptrAircraft->IsoPos.y); + + ptrAircraft->IsoPos.z = targets[0] % level_columns; + ptrAircraft->IsoPos.z <<= TILE_SIZE_BIT_SHIFT - 1; + ptrAircraft->IsoPos.z = fix16_from_int(ptrAircraft->IsoPos.z); +800203e8: ac73005c sw s3,92(v1) + + ptrAircraft->Speed = AircraftSpeedsTable[AIRCRAFT_SPEED_APPROACH]; +800203ec: ac620060 sw v0,96(v1) + } + + ptrAircraft->State = ptrFlightData->State[FlightDataIndex]; +800203f0: 8e830204 lw v1,516(s4) +800203f4: 24140068 li s4,104 +800203f8: 02540018 mult s2,s4 + + dprintf("\nAircraft Data:\n"); +800203fc: 3c048004 lui a0,0x8004 +80020400: 24840180 addiu a0,a0,384 + if(ptrAircraft->Target[i] == 0) + { + break; + } + + dprintf(" %d", ptrAircraft->Target[i]); +80020404: 3c158004 lui s5,0x8004 + } + + ptrAircraft->State = ptrFlightData->State[FlightDataIndex]; + + dprintf("\nAircraft Data:\n"); + dprintf("\tTargets:"); +80020408: 00009821 move s3,zero + if(ptrAircraft->Target[i] == 0) + { + break; + } + + dprintf(" %d", ptrAircraft->Target[i]); +8002040c: 26b501d4 addiu s5,s5,468 + ptrAircraft->State = ptrFlightData->State[FlightDataIndex]; + + dprintf("\nAircraft Data:\n"); + dprintf("\tTargets:"); + + for(i = 0; i < AIRCRAFT_MAX_TARGETS; i++) +80020410: 24160040 li s6,64 + ptrAircraft->IsoPos.z = fix16_from_int(ptrAircraft->IsoPos.z); + + ptrAircraft->Speed = AircraftSpeedsTable[AIRCRAFT_SPEED_APPROACH]; + } + + ptrAircraft->State = ptrFlightData->State[FlightDataIndex]; +80020414: 0000a012 mflo s4 +80020418: 02141021 addu v0,s0,s4 + + dprintf("\nAircraft Data:\n"); +8002041c: 0c00ed8f jal 8003b63c <printf> +80020420: ac43000c sw v1,12(v0) + dprintf("\tTargets:"); +80020424: 3c048004 lui a0,0x8004 +80020428: 0c00ed8f jal 8003b63c <printf> +8002042c: 24840194 addiu a0,a0,404 + + for(i = 0; i < AIRCRAFT_MAX_TARGETS; i++) + { + if(ptrAircraft->Target[i] == 0) +80020430: 02931021 addu v0,s4,s3 +80020434: 02021021 addu v0,s0,v0 +80020438: 94450010 lhu a1,16(v0) +8002043c: 00000000 nop +80020440: 14a0001b bnez a1,800204b0 <AircraftAddNew+0x23c> +80020444: 24020068 li v0,104 + } + + dprintf(" %d", ptrAircraft->Target[i]); + } + + dprintf("\nLivery: %d\n", ptrAircraft->Livery ); +80020448: 02420018 mult s2,v0 +8002044c: 3c048004 lui a0,0x8004 +80020450: 00009012 mflo s2 +80020454: 02128021 addu s0,s0,s2 +80020458: 8e050000 lw a1,0(s0) +8002045c: 0c00ed8f jal 8003b63c <printf> +80020460: 248401a0 addiu a0,a0,416 + + dprintf("Aircraft position: {%d, %d, %d}\n", +80020464: 8e040054 lw a0,84(s0) +80020468: 0c00806f jal 800201bc <fix16_to_int> +8002046c: 00000000 nop +80020470: 8e040058 lw a0,88(s0) +80020474: 0c00806f jal 800201bc <fix16_to_int> +80020478: 00402821 move a1,v0 +8002047c: 8e04005c lw a0,92(s0) +80020480: 0c00806f jal 800201bc <fix16_to_int> +80020484: 00403021 move a2,v0 +80020488: 3c048004 lui a0,0x8004 +8002048c: 00403821 move a3,v0 +80020490: 0c00ed8f jal 8003b63c <printf> +80020494: 248401b0 addiu a0,a0,432 + fix16_to_int(ptrAircraft->IsoPos.x), + fix16_to_int(ptrAircraft->IsoPos.y), + fix16_to_int(ptrAircraft->IsoPos.z) ); + + AircraftIndex++; +80020498: 92221bfe lbu v0,7166(s1) +8002049c: 00000000 nop +800204a0: 24420001 addiu v0,v0,1 +800204a4: a2221bfe sb v0,7166(s1) + + return true; +800204a8: 10000008 b 800204cc <AircraftAddNew+0x258> +800204ac: 24020001 li v0,1 + if(ptrAircraft->Target[i] == 0) + { + break; + } + + dprintf(" %d", ptrAircraft->Target[i]); +800204b0: 02a02021 move a0,s5 +800204b4: 0c00ed8f jal 8003b63c <printf> +800204b8: 26730002 addiu s3,s3,2 + ptrAircraft->State = ptrFlightData->State[FlightDataIndex]; + + dprintf("\nAircraft Data:\n"); + dprintf("\tTargets:"); + + for(i = 0; i < AIRCRAFT_MAX_TARGETS; i++) +800204bc: 1676ffdc bne s3,s6,80020430 <AircraftAddNew+0x1bc> +800204c0: 24020068 li v0,104 + } + + dprintf(" %d", ptrAircraft->Target[i]); + } + + dprintf("\nLivery: %d\n", ptrAircraft->Livery ); +800204c4: 1000ffe1 b 8002044c <AircraftAddNew+0x1d8> +800204c8: 02420018 mult s2,v0 + fix16_to_int(ptrAircraft->IsoPos.z) ); + + AircraftIndex++; + + return true; +} +800204cc: 8fbf003c lw ra,60(sp) +800204d0: 8fb70038 lw s7,56(sp) +800204d4: 8fb60034 lw s6,52(sp) +800204d8: 8fb50030 lw s5,48(sp) +800204dc: 8fb4002c lw s4,44(sp) +800204e0: 8fb30028 lw s3,40(sp) +800204e4: 8fb20024 lw s2,36(sp) +800204e8: 8fb10020 lw s1,32(sp) +800204ec: 8fb0001c lw s0,28(sp) +800204f0: 03e00008 jr ra +800204f4: 27bd0040 addiu sp,sp,64 + +800204f8 <AircraftHandler>: + + return AircraftLiveryTable[liveryIndex]; +} + +void AircraftHandler(void) +{ +800204f8: 27bdffc8 addiu sp,sp,-56 +800204fc: afb00010 sw s0,16(sp) +80020500: 3c108004 lui s0,0x8004 +80020504: 261025d0 addiu s0,s0,9680 +80020508: afb20018 sw s2,24(sp) + { + ptrAircraft->TargetReached = true; + + if(ptrAircraft->Target[++ptrAircraft->TargetIdx] == 0) + { + dprintf("All targets reached!\n"); +8002050c: 3c128004 lui s2,0x8004 + + return AircraftLiveryTable[liveryIndex]; +} + +void AircraftHandler(void) +{ +80020510: afb60028 sw s6,40(sp) +80020514: afb50024 sw s5,36(sp) +80020518: afb40020 sw s4,32(sp) +8002051c: afb3001c sw s3,28(sp) +80020520: afb10014 sw s1,20(sp) +80020524: afbf0034 sw ra,52(sp) +80020528: afbe0030 sw s8,48(sp) +8002052c: afb7002c sw s7,44(sp) +80020530: 00008821 move s1,zero +80020534: 0200a021 move s4,s0 + +void AircraftDirection(TYPE_AIRCRAFT_DATA * ptrAircraft) +{ + TYPE_ISOMETRIC_FIX16_POS targetPos; + + if(ptrAircraft->Target[ptrAircraft->TargetIdx] == 0) +80020538: 24150034 li s5,52 +8002053c: 02009821 move s3,s0 + } +} + +void AircraftAttitude(TYPE_AIRCRAFT_DATA * ptrAircraft) +{ + if(ptrAircraft->State == STATE_FINAL) +80020540: 24160005 li s6,5 + { + ptrAircraft->TargetReached = true; + + if(ptrAircraft->Target[++ptrAircraft->TargetIdx] == 0) + { + dprintf("All targets reached!\n"); +80020544: 265201d8 addiu s2,s2,472 + + for(i = 0; i < GAME_MAX_AIRCRAFT; i++) + { + ptrAircraft = &AircraftData[i]; + + if(ptrAircraft->State == STATE_IDLE) +80020548: 8e02000c lw v0,12(s0) +8002054c: 00000000 nop +80020550: 10400059 beqz v0,800206b8 <AircraftHandler+0x1c0> +80020554: 02350018 mult s1,s5 + +void AircraftDirection(TYPE_AIRCRAFT_DATA * ptrAircraft) +{ + TYPE_ISOMETRIC_FIX16_POS targetPos; + + if(ptrAircraft->Target[ptrAircraft->TargetIdx] == 0) +80020558: 92020050 lbu v0,80(s0) +8002055c: 0000b812 mflo s7 +80020560: 02e21021 addu v0,s7,v0 +80020564: 24420008 addiu v0,v0,8 +80020568: 00021040 sll v0,v0,0x1 +8002056c: 02821021 addu v0,s4,v0 +80020570: 94440000 lhu a0,0(v0) +80020574: 00000000 nop +80020578: 10800046 beqz a0,80020694 <AircraftHandler+0x19c> +8002057c: 00000000 nop + { + return; + } + + targetPos.x = GameGetXFromTile(ptrAircraft->Target[ptrAircraft->TargetIdx]); +80020580: 0c008c75 jal 800231d4 <GameGetXFromTile> +80020584: 00000000 nop +80020588: 0040f021 move s8,v0 + targetPos.y = GameGetYFromTile(ptrAircraft->Target[ptrAircraft->TargetIdx]); +8002058c: 92020050 lbu v0,80(s0) +80020590: 00000000 nop +80020594: 02e21021 addu v0,s7,v0 +80020598: 24420008 addiu v0,v0,8 +8002059c: 00021040 sll v0,v0,0x1 +800205a0: 00531021 addu v0,v0,s3 +800205a4: 94440000 lhu a0,0(v0) +800205a8: 0c008c81 jal 80023204 <GameGetYFromTile> +800205ac: 00000000 nop + targetPos.z = 0; + + ptrAircraft->TargetReached = false; + + if(targetPos.y == ptrAircraft->IsoPos.y) +800205b0: 8e030058 lw v1,88(s0) + + targetPos.x = GameGetXFromTile(ptrAircraft->Target[ptrAircraft->TargetIdx]); + targetPos.y = GameGetYFromTile(ptrAircraft->Target[ptrAircraft->TargetIdx]); + targetPos.z = 0; + + ptrAircraft->TargetReached = false; +800205b4: a2000066 sb zero,102(s0) +800205b8: 8e040054 lw a0,84(s0) + + if(targetPos.y == ptrAircraft->IsoPos.y) +800205bc: 14430012 bne v0,v1,80020608 <AircraftHandler+0x110> +800205c0: 00000000 nop + { + if(targetPos.x > ptrAircraft->IsoPos.x) +800205c4: 009e102a slt v0,a0,s8 +800205c8: 10400005 beqz v0,800205e0 <AircraftHandler+0xe8> +800205cc: 24020002 li v0,2 + { + ptrAircraft->Direction = AIRCRAFT_DIR_EAST; +800205d0: ae020004 sw v0,4(s0) + ptrAircraft->IsoPos.x += ptrAircraft->Speed; +800205d4: 8e020060 lw v0,96(s0) +800205d8: 10000009 b 80020600 <AircraftHandler+0x108> +800205dc: 00442021 addu a0,v0,a0 + } + else if(targetPos.x < ptrAircraft->IsoPos.x) +800205e0: 03c4f02a slt s8,s8,a0 +800205e4: 13c00018 beqz s8,80020648 <AircraftHandler+0x150> +800205e8: 24020001 li v0,1 + { + ptrAircraft->Direction = AIRCRAFT_DIR_WEST; +800205ec: 24020003 li v0,3 +800205f0: ae020004 sw v0,4(s0) + ptrAircraft->IsoPos.x -= ptrAircraft->Speed; +800205f4: 8e020060 lw v0,96(s0) +800205f8: 00000000 nop +800205fc: 00822023 subu a0,a0,v0 +80020600: 10000024 b 80020694 <AircraftHandler+0x19c> +80020604: ae040054 sw a0,84(s0) + dprintf("All targets reached!\n"); + GameTargetsReached(ptrAircraft->FlightDataIdx); + } + } + } + else if(targetPos.x == ptrAircraft->IsoPos.x) +80020608: 17c40022 bne s8,a0,80020694 <AircraftHandler+0x19c> +8002060c: 0062202a slt a0,v1,v0 + { + if(targetPos.y > ptrAircraft->IsoPos.y) +80020610: 10800006 beqz a0,8002062c <AircraftHandler+0x134> +80020614: 0043102a slt v0,v0,v1 + { + ptrAircraft->Direction = AIRCRAFT_DIR_SOUTH; +80020618: 24020001 li v0,1 +8002061c: ae020004 sw v0,4(s0) + ptrAircraft->IsoPos.y += ptrAircraft->Speed; +80020620: 8e020060 lw v0,96(s0) +80020624: 10000006 b 80020640 <AircraftHandler+0x148> +80020628: 00431821 addu v1,v0,v1 + } + else if(targetPos.y < ptrAircraft->IsoPos.y) +8002062c: 10400006 beqz v0,80020648 <AircraftHandler+0x150> +80020630: 24020001 li v0,1 + { + ptrAircraft->Direction = AIRCRAFT_DIR_NORTH; + ptrAircraft->IsoPos.y -= ptrAircraft->Speed; +80020634: 8e020060 lw v0,96(s0) + ptrAircraft->Direction = AIRCRAFT_DIR_SOUTH; + ptrAircraft->IsoPos.y += ptrAircraft->Speed; + } + else if(targetPos.y < ptrAircraft->IsoPos.y) + { + ptrAircraft->Direction = AIRCRAFT_DIR_NORTH; +80020638: ae000004 sw zero,4(s0) + ptrAircraft->IsoPos.y -= ptrAircraft->Speed; +8002063c: 00621823 subu v1,v1,v0 +80020640: 10000014 b 80020694 <AircraftHandler+0x19c> +80020644: ae030058 sw v1,88(s0) + } + else + { + ptrAircraft->TargetReached = true; +80020648: a2020066 sb v0,102(s0) + + if(ptrAircraft->Target[++ptrAircraft->TargetIdx] == 0) +8002064c: 92020050 lbu v0,80(s0) +80020650: 00000000 nop +80020654: 24420001 addiu v0,v0,1 +80020658: 304200ff andi v0,v0,0xff +8002065c: a2020050 sb v0,80(s0) +80020660: 02e21021 addu v0,s7,v0 +80020664: 24420008 addiu v0,v0,8 +80020668: 00021040 sll v0,v0,0x1 +8002066c: 00531021 addu v0,v0,s3 +80020670: 94420000 lhu v0,0(v0) +80020674: 00000000 nop +80020678: 14400006 bnez v0,80020694 <AircraftHandler+0x19c> +8002067c: 00000000 nop + { + dprintf("All targets reached!\n"); +80020680: 0c00ed8f jal 8003b63c <printf> +80020684: 02402021 move a0,s2 + GameTargetsReached(ptrAircraft->FlightDataIdx); +80020688: 92040051 lbu a0,81(s0) +8002068c: 0c008c8c jal 80023230 <GameTargetsReached> +80020690: 00000000 nop + } +} + +void AircraftAttitude(TYPE_AIRCRAFT_DATA * ptrAircraft) +{ + if(ptrAircraft->State == STATE_FINAL) +80020694: 8e02000c lw v0,12(s0) +80020698: 00000000 nop +8002069c: 14560006 bne v0,s6,800206b8 <AircraftHandler+0x1c0> +800206a0: 00000000 nop + { + if(ptrAircraft->IsoPos.z > 0) +800206a4: 8e02005c lw v0,92(s0) +800206a8: 00000000 nop +800206ac: 18400002 blez v0,800206b8 <AircraftHandler+0x1c0> +800206b0: 24428000 addiu v0,v0,-32768 + { + ptrAircraft->IsoPos.z -= AircraftSpeedsTable[AIRCRAFT_SPEED_DESCENT]; +800206b4: ae02005c sw v0,92(s0) +800206b8: 26310001 addiu s1,s1,1 +void AircraftHandler(void) +{ + TYPE_AIRCRAFT_DATA * ptrAircraft; + uint8_t i; + + for(i = 0; i < GAME_MAX_AIRCRAFT; i++) +800206bc: 24020020 li v0,32 +800206c0: 1622ffa1 bne s1,v0,80020548 <AircraftHandler+0x50> +800206c4: 26100068 addiu s0,s0,104 + } + + AircraftDirection(ptrAircraft); + AircraftAttitude(ptrAircraft); + } +} +800206c8: 8fbf0034 lw ra,52(sp) +800206cc: 8fbe0030 lw s8,48(sp) +800206d0: 8fb7002c lw s7,44(sp) +800206d4: 8fb60028 lw s6,40(sp) +800206d8: 8fb50024 lw s5,36(sp) +800206dc: 8fb40020 lw s4,32(sp) +800206e0: 8fb3001c lw s3,28(sp) +800206e4: 8fb20018 lw s2,24(sp) +800206e8: 8fb10014 lw s1,20(sp) +800206ec: 8fb00010 lw s0,16(sp) +800206f0: 03e00008 jr ra +800206f4: 27bd0038 addiu sp,sp,56 + +800206f8 <AircraftRender>: + +void AircraftRender(TYPE_PLAYER * ptrPlayer) +{ +800206f8: 27bdffc0 addiu sp,sp,-64 +800206fc: afb50030 sw s5,48(sp) + } + + cartPos = GfxIsometricFix16ToCartesian(&ptrAircraft->IsoPos); + + // Aircraft position is referred to aircraft center + AircraftSpr.x = cartPos.x - (AircraftSpr.w >> 1); +80020700: 3c158004 lui s5,0x8004 + AircraftAttitude(ptrAircraft); + } +} + +void AircraftRender(TYPE_PLAYER * ptrPlayer) +{ +80020704: afb4002c sw s4,44(sp) +80020708: afb30028 sw s3,40(sp) +8002070c: afb20024 sw s2,36(sp) +80020710: afb10020 sw s1,32(sp) +80020714: 3c138004 lui s3,0x8004 +80020718: 3c118004 lui s1,0x8004 + } + + cartPos = GfxIsometricFix16ToCartesian(&ptrAircraft->IsoPos); + + // Aircraft position is referred to aircraft center + AircraftSpr.x = cartPos.x - (AircraftSpr.w >> 1); +8002071c: 26b225a4 addiu s2,s5,9636 + break; + + case AIRCRAFT_LIVERY_UNKNOWN: + // Fall through + default: + dprintf("Unknown livery %d!\n", ptrAircraft->Livery); +80020720: 3c148004 lui s4,0x8004 + AircraftAttitude(ptrAircraft); + } +} + +void AircraftRender(TYPE_PLAYER * ptrPlayer) +{ +80020724: afb60034 sw s6,52(sp) +80020728: afb0001c sw s0,28(sp) +8002072c: afbf003c sw ra,60(sp) +80020730: afb70038 sw s7,56(sp) +80020734: 0080b021 move s6,a0 +80020738: 263125d0 addiu s1,s1,9680 +8002073c: 267332d0 addiu s3,s3,13008 +80020740: 02408021 move s0,s2 + break; + + case AIRCRAFT_LIVERY_UNKNOWN: + // Fall through + default: + dprintf("Unknown livery %d!\n", ptrAircraft->Livery); +80020744: 269401f0 addiu s4,s4,496 + + for(i = 0; i < GAME_MAX_AIRCRAFT; i++) + { + ptrAircraft = &AircraftData[i]; + + if(ptrAircraft->State == STATE_IDLE) +80020748: 8e22000c lw v0,12(s1) +8002074c: 00000000 nop +80020750: 10400044 beqz v0,80020864 <AircraftRender+0x16c> +80020754: 26250054 addiu a1,s1,84 + { + continue; + } + + cartPos = GfxIsometricFix16ToCartesian(&ptrAircraft->IsoPos); +80020758: 0c0091bb jal 800246ec <GfxIsometricFix16ToCartesian> +8002075c: 27a40010 addiu a0,sp,16 + + // Aircraft position is referred to aircraft center + AircraftSpr.x = cartPos.x - (AircraftSpr.w >> 1); +80020760: 86420006 lh v0,6(s2) + } +} + +void AircraftUpdateSpriteFromData(TYPE_AIRCRAFT_DATA * ptrAircraft) +{ + switch(ptrAircraft->Livery) +80020764: 8e250000 lw a1,0(s1) + } + + cartPos = GfxIsometricFix16ToCartesian(&ptrAircraft->IsoPos); + + // Aircraft position is referred to aircraft center + AircraftSpr.x = cartPos.x - (AircraftSpr.w >> 1); +80020768: 00021843 sra v1,v0,0x1 +8002076c: 97a20010 lhu v0,16(sp) +80020770: 00000000 nop +80020774: 00431023 subu v0,v0,v1 +80020778: a6a225a4 sh v0,9636(s5) + AircraftSpr.y = cartPos.y - (AircraftSpr.h >> 1); +8002077c: 86420008 lh v0,8(s2) +80020780: 00000000 nop +80020784: 00021843 sra v1,v0,0x1 +80020788: 97a20012 lhu v0,18(sp) +8002078c: 00000000 nop +80020790: 00431023 subu v0,v0,v1 +80020794: a6420002 sh v0,2(s2) + } +} + +void AircraftUpdateSpriteFromData(TYPE_AIRCRAFT_DATA * ptrAircraft) +{ + switch(ptrAircraft->Livery) +80020798: 24020001 li v0,1 +8002079c: 14a20006 bne a1,v0,800207b8 <AircraftRender+0xc0> +800207a0: 3c178004 lui s7,0x8004 + { + case AIRCRAFT_LIVERY_0: + AircraftSpr.cx = PHX_LIVERY_CLUT_X; +800207a4: 24020180 li v0,384 +800207a8: a642000a sh v0,10(s2) + AircraftSpr.cy = PHX_LIVERY_CLUT_Y; +800207ac: 240201f1 li v0,497 +800207b0: 10000003 b 800207c0 <AircraftRender+0xc8> +800207b4: a642000c sh v0,12(s2) + break; + + case AIRCRAFT_LIVERY_UNKNOWN: + // Fall through + default: + dprintf("Unknown livery %d!\n", ptrAircraft->Livery); +800207b8: 0c00ed8f jal 8003b63c <printf> +800207bc: 02802021 move a0,s4 + break; + } + + // Reset TPAGE and {U, V} offset first. + GfxTPageOffsetFromVRAMPosition(&AircraftSpr, AIRCRAFT_SPRITE_VRAM_X, AIRCRAFT_SPRITE_VRAM_Y); +800207c0: 24060130 li a2,304 +800207c4: 24050320 li a1,800 +800207c8: 0c009187 jal 8002461c <GfxTPageOffsetFromVRAMPosition> +800207cc: 26e425a4 addiu a0,s7,9636 + + switch(ptrAircraft->Direction) +800207d0: 8e220004 lw v0,4(s1) +800207d4: 24030001 li v1,1 +800207d8: 10430012 beq v0,v1,80020824 <AircraftRender+0x12c> +800207dc: 00000000 nop +800207e0: 1040000b beqz v0,80020810 <AircraftRender+0x118> +800207e4: 24030002 li v1,2 +800207e8: 10430011 beq v0,v1,80020830 <AircraftRender+0x138> +800207ec: 24030003 li v1,3 +800207f0: 14430014 bne v0,v1,80020844 <AircraftRender+0x14c> +800207f4: 02c02021 move a0,s6 + case AIRCRAFT_DIR_EAST: + AircraftSpr.v += 0; + AircraftSpr.attribute &= ~(H_FLIP); + break; + case AIRCRAFT_DIR_WEST: + AircraftSpr.v += AircraftSpr.w; +800207f8: 92020005 lbu v0,5(s0) +800207fc: 92030006 lbu v1,6(s0) +80020800: 00000000 nop +80020804: 00431021 addu v0,v0,v1 +80020808: 10000009 b 80020830 <AircraftRender+0x138> +8002080c: a2020005 sb v0,5(s0) + GfxTPageOffsetFromVRAMPosition(&AircraftSpr, AIRCRAFT_SPRITE_VRAM_X, AIRCRAFT_SPRITE_VRAM_Y); + + switch(ptrAircraft->Direction) + { + case AIRCRAFT_DIR_NORTH: + AircraftSpr.v += AircraftSpr.w; +80020810: 92020005 lbu v0,5(s0) +80020814: 92030006 lbu v1,6(s0) +80020818: 00000000 nop +8002081c: 00431021 addu v0,v0,v1 +80020820: a2020005 sb v0,5(s0) + AircraftSpr.attribute |= H_FLIP; + break; + case AIRCRAFT_DIR_SOUTH: + AircraftSpr.v += 0; + AircraftSpr.attribute |= H_FLIP; +80020824: 8e020014 lw v0,20(s0) +80020828: 10000004 b 8002083c <AircraftRender+0x144> +8002082c: 34420020 ori v0,v0,0x20 + AircraftSpr.v += 0; + AircraftSpr.attribute &= ~(H_FLIP); + break; + case AIRCRAFT_DIR_WEST: + AircraftSpr.v += AircraftSpr.w; + AircraftSpr.attribute &= ~(H_FLIP); +80020830: 8e020014 lw v0,20(s0) +80020834: 2403ffdf li v1,-33 +80020838: 00431024 and v0,v0,v1 +8002083c: ae020014 sw v0,20(s0) + AircraftSpr.x = cartPos.x - (AircraftSpr.w >> 1); + AircraftSpr.y = cartPos.y - (AircraftSpr.h >> 1); + + AircraftUpdateSpriteFromData(ptrAircraft); + + CameraApplyCoordinatesToSprite(ptrPlayer, &AircraftSpr); +80020840: 02c02021 move a0,s6 +80020844: 0c00825d jal 80020974 <CameraApplyCoordinatesToSprite> +80020848: 26e525a4 addiu a1,s7,9636 + + AircraftSpr.r = NORMAL_LUMINANCE; +8002084c: 2402ff80 li v0,-128 + AircraftSpr.g = NORMAL_LUMINANCE; + AircraftSpr.b = NORMAL_LUMINANCE; + + GfxSortSprite(&AircraftSpr); +80020850: 02002021 move a0,s0 + + AircraftUpdateSpriteFromData(ptrAircraft); + + CameraApplyCoordinatesToSprite(ptrPlayer, &AircraftSpr); + + AircraftSpr.r = NORMAL_LUMINANCE; +80020854: a202000e sb v0,14(s0) + AircraftSpr.g = NORMAL_LUMINANCE; +80020858: a202000f sb v0,15(s0) + AircraftSpr.b = NORMAL_LUMINANCE; + + GfxSortSprite(&AircraftSpr); +8002085c: 0c0090d2 jal 80024348 <GfxSortSprite> +80020860: a2020010 sb v0,16(s0) +80020864: 26310068 addiu s1,s1,104 + TYPE_AIRCRAFT_DATA * ptrAircraft; + TYPE_CARTESIAN_POS cartPos; + + uint8_t i; + + for(i = 0; i < GAME_MAX_AIRCRAFT; i++) +80020868: 1633ffb7 bne s1,s3,80020748 <AircraftRender+0x50> +8002086c: 00000000 nop + AircraftSpr.g = NORMAL_LUMINANCE; + AircraftSpr.b = NORMAL_LUMINANCE; + + GfxSortSprite(&AircraftSpr); + } +} +80020870: 8fbf003c lw ra,60(sp) +80020874: 8fb70038 lw s7,56(sp) +80020878: 8fb60034 lw s6,52(sp) +8002087c: 8fb50030 lw s5,48(sp) +80020880: 8fb4002c lw s4,44(sp) +80020884: 8fb30028 lw s3,40(sp) +80020888: 8fb20024 lw s2,36(sp) +8002088c: 8fb10020 lw s1,32(sp) +80020890: 8fb0001c lw s0,28(sp) +80020894: 03e00008 jr ra +80020898: 27bd0040 addiu sp,sp,64 + +8002089c <AircraftGetIsoPos>: + } + } +} + +TYPE_ISOMETRIC_POS AircraftGetIsoPos(uint8_t FlightDataIdx) +{ +8002089c: 30a500ff andi a1,a1,0xff + // Aircraft position data is stored in fix16_t data type instead of "short" data type. + // So we must perform a conversion first for convenience. + TYPE_ISOMETRIC_POS retIsoPos; + TYPE_ISOMETRIC_FIX16_POS fix16IsoPos = AircraftData[FlightDataIdx].IsoPos; +800208a0: 24020068 li v0,104 +800208a4: 00a20018 mult a1,v0 +800208a8: 3c028004 lui v0,0x8004 +800208ac: 244225d0 addiu v0,v0,9680 + } + } +} + +TYPE_ISOMETRIC_POS AircraftGetIsoPos(uint8_t FlightDataIdx) +{ +800208b0: 00803021 move a2,a0 +800208b4: 27bdffe8 addiu sp,sp,-24 +800208b8: afbf0014 sw ra,20(sp) + // Aircraft position data is stored in fix16_t data type instead of "short" data type. + // So we must perform a conversion first for convenience. + TYPE_ISOMETRIC_POS retIsoPos; + TYPE_ISOMETRIC_FIX16_POS fix16IsoPos = AircraftData[FlightDataIdx].IsoPos; +800208bc: 00002812 mflo a1 +800208c0: 24a50050 addiu a1,a1,80 +800208c4: 00452821 addu a1,v0,a1 + + retIsoPos.x = (short)fix16_to_int(fix16IsoPos.x); +800208c8: 8ca40004 lw a0,4(a1) +800208cc: 0c00806f jal 800201bc <fix16_to_int> +800208d0: 24a70004 addiu a3,a1,4 + retIsoPos.y = (short)fix16_to_int(fix16IsoPos.y); +800208d4: 8ca40008 lw a0,8(a1) +800208d8: 0c00806f jal 800201bc <fix16_to_int> +800208dc: 00404021 move t0,v0 + retIsoPos.z = (short)fix16_to_int(fix16IsoPos.z); +800208e0: 8ce40008 lw a0,8(a3) +800208e4: 0c00806f jal 800201bc <fix16_to_int> +800208e8: 00402821 move a1,v0 + + return retIsoPos; +} +800208ec: 8fbf0014 lw ra,20(sp) + + retIsoPos.x = (short)fix16_to_int(fix16IsoPos.x); + retIsoPos.y = (short)fix16_to_int(fix16IsoPos.y); + retIsoPos.z = (short)fix16_to_int(fix16IsoPos.z); + + return retIsoPos; +800208f0: a4c20004 sh v0,4(a2) +} +800208f4: 00c01021 move v0,a2 + + retIsoPos.x = (short)fix16_to_int(fix16IsoPos.x); + retIsoPos.y = (short)fix16_to_int(fix16IsoPos.y); + retIsoPos.z = (short)fix16_to_int(fix16IsoPos.z); + + return retIsoPos; +800208f8: a4c80000 sh t0,0(a2) +800208fc: a4c50002 sh a1,2(a2) +} +80020900: 03e00008 jr ra +80020904: 27bd0018 addiu sp,sp,24 + +80020908 <AircraftAddTargets>: + +void AircraftAddTargets(TYPE_AIRCRAFT_DATA * ptrAircraft, uint16_t * targets) +{ + memcpy(ptrAircraft->Target, targets, sizeof(uint16_t) * AIRCRAFT_MAX_TARGETS); +80020908: 24060040 li a2,64 +8002090c: 0800d75e j 80035d78 <memcpy> +80020910: 24840010 addiu a0,a0,16 + +80020914 <AircraftFromFlightDataIndex>: +} + +TYPE_AIRCRAFT_DATA * AircraftFromFlightDataIndex(uint8_t index) +{ +80020914: 308400ff andi a0,a0,0xff + return &AircraftData[index]; +80020918: 24020068 li v0,104 +8002091c: 00820018 mult a0,v0 +} +80020920: 3c028004 lui v0,0x8004 +80020924: 244225d0 addiu v0,v0,9680 + memcpy(ptrAircraft->Target, targets, sizeof(uint16_t) * AIRCRAFT_MAX_TARGETS); +} + +TYPE_AIRCRAFT_DATA * AircraftFromFlightDataIndex(uint8_t index) +{ + return &AircraftData[index]; +80020928: 00002012 mflo a0 +} +8002092c: 03e00008 jr ra +80020930: 00441021 addu v0,v0,a0 + +80020934 <AircraftFromFlightDataIndexAddTargets>: + +void AircraftFromFlightDataIndexAddTargets(uint8_t index, uint16_t * targets) +{ +80020934: 308400ff andi a0,a0,0xff + memcpy(ptrAircraft->Target, targets, sizeof(uint16_t) * AIRCRAFT_MAX_TARGETS); +} + +TYPE_AIRCRAFT_DATA * AircraftFromFlightDataIndex(uint8_t index) +{ + return &AircraftData[index]; +80020938: 24020068 li v0,104 +8002093c: 00820018 mult a0,v0 +} + +void AircraftFromFlightDataIndexAddTargets(uint8_t index, uint16_t * targets) +{ + AircraftAddTargets(AircraftFromFlightDataIndex(index), targets); +80020940: 3c028004 lui v0,0x8004 +80020944: 244225d0 addiu v0,v0,9680 + memcpy(ptrAircraft->Target, targets, sizeof(uint16_t) * AIRCRAFT_MAX_TARGETS); +} + +TYPE_AIRCRAFT_DATA * AircraftFromFlightDataIndex(uint8_t index) +{ + return &AircraftData[index]; +80020948: 00002012 mflo a0 +} + +void AircraftFromFlightDataIndexAddTargets(uint8_t index, uint16_t * targets) +{ + AircraftAddTargets(AircraftFromFlightDataIndex(index), targets); +8002094c: 08008242 j 80020908 <AircraftAddTargets> +80020950: 00442021 addu a0,v0,a0 + +80020954 <CameraInit>: +static bool CameraSpecialConditions(TYPE_PLAYER * ptrPlayer); + +void CameraInit(TYPE_PLAYER * ptrPlayer) +{ + // Center camera on screen + ptrPlayer->Camera.X_Offset = CAMERA_INITIAL_X_OFFSET; +80020954: 240200c0 li v0,192 +80020958: ac820084 sw v0,132(a0) + ptrPlayer->Camera.Y_Offset = 0; + ptrPlayer->Camera.X_Speed = 0; + ptrPlayer->Camera.Y_Speed = 0; + ptrPlayer->Camera.Speed_Timer = SPEED_CALCULATION_TIME; +8002095c: 24020003 li v0,3 + +void CameraInit(TYPE_PLAYER * ptrPlayer) +{ + // Center camera on screen + ptrPlayer->Camera.X_Offset = CAMERA_INITIAL_X_OFFSET; + ptrPlayer->Camera.Y_Offset = 0; +80020960: ac800088 sw zero,136(a0) + ptrPlayer->Camera.X_Speed = 0; +80020964: a080008c sb zero,140(a0) + ptrPlayer->Camera.Y_Speed = 0; +80020968: a080008d sb zero,141(a0) + ptrPlayer->Camera.Speed_Timer = SPEED_CALCULATION_TIME; +8002096c: 03e00008 jr ra +80020970: a082008e sb v0,142(a0) + +80020974 <CameraApplyCoordinatesToSprite>: +} + +void CameraApplyCoordinatesToSprite(TYPE_PLAYER * ptrPlayer, GsSprite * spr) +{ + spr->x += (short)ptrPlayer->Camera.X_Offset; +80020974: 8c820084 lw v0,132(a0) +80020978: 94a30000 lhu v1,0(a1) +8002097c: 00000000 nop +80020980: 00431021 addu v0,v0,v1 +80020984: a4a20000 sh v0,0(a1) + spr->y += (short)ptrPlayer->Camera.Y_Offset; +80020988: 94a30002 lhu v1,2(a1) +8002098c: 8c820088 lw v0,136(a0) +80020990: 00000000 nop +80020994: 00431021 addu v0,v0,v1 +80020998: 03e00008 jr ra +8002099c: a4a20002 sh v0,2(a1) + +800209a0 <CameraApplyCoordinatesToRectangle>: +} + +void CameraApplyCoordinatesToRectangle(TYPE_PLAYER * ptrPlayer, GsRectangle * rect) +{ +800209a0: 27bdffe0 addiu sp,sp,-32 + dprintf("Rectangle {%d, %d}\n", +800209a4: 84a60002 lh a2,2(a1) + spr->x += (short)ptrPlayer->Camera.X_Offset; + spr->y += (short)ptrPlayer->Camera.Y_Offset; +} + +void CameraApplyCoordinatesToRectangle(TYPE_PLAYER * ptrPlayer, GsRectangle * rect) +{ +800209a8: afb10018 sw s1,24(sp) +800209ac: afb00014 sw s0,20(sp) +800209b0: 00808821 move s1,a0 +800209b4: 00a08021 move s0,a1 + dprintf("Rectangle {%d, %d}\n", +800209b8: 3c048004 lui a0,0x8004 +800209bc: 84a50000 lh a1,0(a1) + spr->x += (short)ptrPlayer->Camera.X_Offset; + spr->y += (short)ptrPlayer->Camera.Y_Offset; +} + +void CameraApplyCoordinatesToRectangle(TYPE_PLAYER * ptrPlayer, GsRectangle * rect) +{ +800209c0: afbf001c sw ra,28(sp) + dprintf("Rectangle {%d, %d}\n", +800209c4: 0c00ed8f jal 8003b63c <printf> +800209c8: 24840208 addiu a0,a0,520 + rect->x, + rect->y ); + + rect->x += (short)ptrPlayer->Camera.X_Offset; +800209cc: 8e220084 lw v0,132(s1) +800209d0: 96030000 lhu v1,0(s0) + rect->y += (short)ptrPlayer->Camera.Y_Offset; +} +800209d4: 8fbf001c lw ra,28(sp) +{ + dprintf("Rectangle {%d, %d}\n", + rect->x, + rect->y ); + + rect->x += (short)ptrPlayer->Camera.X_Offset; +800209d8: 00431021 addu v0,v0,v1 +800209dc: a6020000 sh v0,0(s0) + rect->y += (short)ptrPlayer->Camera.Y_Offset; +800209e0: 96030002 lhu v1,2(s0) +800209e4: 8e220088 lw v0,136(s1) +} +800209e8: 8fb10018 lw s1,24(sp) + dprintf("Rectangle {%d, %d}\n", + rect->x, + rect->y ); + + rect->x += (short)ptrPlayer->Camera.X_Offset; + rect->y += (short)ptrPlayer->Camera.Y_Offset; +800209ec: 00431021 addu v0,v0,v1 +800209f0: a6020002 sh v0,2(s0) +} +800209f4: 8fb00014 lw s0,20(sp) +800209f8: 03e00008 jr ra +800209fc: 27bd0020 addiu sp,sp,32 + +80020a00 <CameraHandler>: + ptrPlayer->Camera.Y_Offset += ptrPlayer->Camera.Y_Speed; +} + +bool CameraSpecialConditions(TYPE_PLAYER * ptrPlayer) +{ + if( (ptrPlayer->ShowAircraftData == true) +80020a00: 90820001 lbu v0,1(a0) +80020a04: 00000000 nop +80020a08: 14400089 bnez v0,80020c30 <CameraHandler+0x230> +80020a0c: 00000000 nop + || +80020a10: 90820002 lbu v0,2(a0) +80020a14: 00000000 nop +80020a18: 14400085 bnez v0,80020c30 <CameraHandler+0x230> +80020a1c: 00000000 nop + } + } +} + +void CameraHandler(TYPE_PLAYER * ptrPlayer) +{ +80020a20: 27bdffe8 addiu sp,sp,-24 +80020a24: afb00010 sw s0,16(sp) +80020a28: afbf0014 sw ra,20(sp) + ptrPlayer->Camera.X_Speed = 0; + ptrPlayer->Camera.Y_Speed = 0; + return; + } + + if(ptrPlayer->Camera.Speed_Timer < SPEED_CALCULATION_TIME) +80020a2c: 9082008e lbu v0,142(a0) +80020a30: 00000000 nop +80020a34: 2c430003 sltiu v1,v0,3 +80020a38: 10600004 beqz v1,80020a4c <CameraHandler+0x4c> +80020a3c: 00808021 move s0,a0 + { + ptrPlayer->Camera.Speed_Timer++; +80020a40: 24420001 addiu v0,v0,1 +80020a44: 1000006d b 80020bfc <CameraHandler+0x1fc> +80020a48: a202008e sb v0,142(s0) + rect->y += (short)ptrPlayer->Camera.Y_Offset; +} + +void CameraUpdateSpeed(TYPE_PLAYER * ptrPlayer) +{ + if(ptrPlayer->PadDirectionKeyPressed_Callback() == true) +80020a4c: 8e020080 lw v0,128(s0) +80020a50: 00000000 nop +80020a54: 0040f809 jalr v0 +80020a58: a200008e sb zero,142(s0) +80020a5c: 1040003d beqz v0,80020b54 <CameraHandler+0x154> +80020a60: 00000000 nop + { + if(ptrPlayer->PadKeyPressed_Callback(PAD_LEFT) == true) +80020a64: 8e020078 lw v0,120(s0) +80020a68: 00000000 nop +80020a6c: 0040f809 jalr v0 +80020a70: 34048000 li a0,0x8000 +80020a74: 1040000a beqz v0,80020aa0 <CameraHandler+0xa0> +80020a78: 00000000 nop + { + if(ptrPlayer->Camera.X_Speed < 0) +80020a7c: 8202008c lb v0,140(s0) +80020a80: 00000000 nop +80020a84: 04410003 bgez v0,80020a94 <CameraHandler+0x94> +80020a88: 28430005 slti v1,v0,5 + { + ptrPlayer->Camera.X_Speed += 2; +80020a8c: 10000003 b 80020a9c <CameraHandler+0x9c> +80020a90: 24420002 addiu v0,v0,2 + } + else if(ptrPlayer->Camera.X_Speed < MAX_CAMERA_SPEED) +80020a94: 10600002 beqz v1,80020aa0 <CameraHandler+0xa0> +80020a98: 24420001 addiu v0,v0,1 + { + ptrPlayer->Camera.X_Speed++; +80020a9c: a202008c sb v0,140(s0) + } + } + + if(ptrPlayer->PadKeyPressed_Callback(PAD_UP) == true) +80020aa0: 8e020078 lw v0,120(s0) +80020aa4: 00000000 nop +80020aa8: 0040f809 jalr v0 +80020aac: 24041000 li a0,4096 +80020ab0: 1040000a beqz v0,80020adc <CameraHandler+0xdc> +80020ab4: 00000000 nop + { + if(ptrPlayer->Camera.Y_Speed < 0) +80020ab8: 8202008d lb v0,141(s0) +80020abc: 00000000 nop +80020ac0: 04410003 bgez v0,80020ad0 <CameraHandler+0xd0> +80020ac4: 28430005 slti v1,v0,5 + { + ptrPlayer->Camera.Y_Speed += 2; +80020ac8: 10000003 b 80020ad8 <CameraHandler+0xd8> +80020acc: 24420002 addiu v0,v0,2 + } + else if(ptrPlayer->Camera.Y_Speed < MAX_CAMERA_SPEED) +80020ad0: 10600002 beqz v1,80020adc <CameraHandler+0xdc> +80020ad4: 24420001 addiu v0,v0,1 + { + ptrPlayer->Camera.Y_Speed++; +80020ad8: a202008d sb v0,141(s0) + } + } + + if(ptrPlayer->PadKeyPressed_Callback(PAD_DOWN) == true) +80020adc: 8e020078 lw v0,120(s0) +80020ae0: 00000000 nop +80020ae4: 0040f809 jalr v0 +80020ae8: 24044000 li a0,16384 +80020aec: 1040000a beqz v0,80020b18 <CameraHandler+0x118> +80020af0: 00000000 nop + { + if(ptrPlayer->Camera.Y_Speed > 0) +80020af4: 8202008d lb v0,141(s0) +80020af8: 00000000 nop +80020afc: 18400003 blez v0,80020b0c <CameraHandler+0x10c> +80020b00: 2843fffc slti v1,v0,-4 + { + ptrPlayer->Camera.Y_Speed -= 2; +80020b04: 10000003 b 80020b14 <CameraHandler+0x114> +80020b08: 2442fffe addiu v0,v0,-2 + } + else if(ptrPlayer->Camera.Y_Speed > -MAX_CAMERA_SPEED) +80020b0c: 14600002 bnez v1,80020b18 <CameraHandler+0x118> +80020b10: 2442ffff addiu v0,v0,-1 + { + ptrPlayer->Camera.Y_Speed--; +80020b14: a202008d sb v0,141(s0) + } + } + + if(ptrPlayer->PadKeyPressed_Callback(PAD_RIGHT) == true) +80020b18: 8e020078 lw v0,120(s0) +80020b1c: 00000000 nop +80020b20: 0040f809 jalr v0 +80020b24: 24042000 li a0,8192 +80020b28: 1040000a beqz v0,80020b54 <CameraHandler+0x154> +80020b2c: 00000000 nop + { + if(ptrPlayer->Camera.X_Speed > 0) +80020b30: 8202008c lb v0,140(s0) +80020b34: 00000000 nop +80020b38: 18400003 blez v0,80020b48 <CameraHandler+0x148> +80020b3c: 2843fffc slti v1,v0,-4 + { + ptrPlayer->Camera.X_Speed -= 2; +80020b40: 10000003 b 80020b50 <CameraHandler+0x150> +80020b44: 2442fffe addiu v0,v0,-2 + } + else if(ptrPlayer->Camera.X_Speed > -MAX_CAMERA_SPEED) +80020b48: 14600002 bnez v1,80020b54 <CameraHandler+0x154> +80020b4c: 2442ffff addiu v0,v0,-1 + { + ptrPlayer->Camera.X_Speed--; +80020b50: a202008c sb v0,140(s0) + } + } + } + + if( (ptrPlayer->PadKeyPressed_Callback(PAD_LEFT) == false) +80020b54: 8e020078 lw v0,120(s0) +80020b58: 00000000 nop +80020b5c: 0040f809 jalr v0 +80020b60: 34048000 li a0,0x8000 +80020b64: 14400010 bnez v0,80020ba8 <CameraHandler+0x1a8> +80020b68: 00000000 nop + && + (ptrPlayer->PadKeyPressed_Callback(PAD_RIGHT) == false) ) +80020b6c: 8e020078 lw v0,120(s0) +80020b70: 00000000 nop +80020b74: 0040f809 jalr v0 +80020b78: 24042000 li a0,8192 + } + } + } + + if( (ptrPlayer->PadKeyPressed_Callback(PAD_LEFT) == false) + && +80020b7c: 1440000a bnez v0,80020ba8 <CameraHandler+0x1a8> +80020b80: 00000000 nop + (ptrPlayer->PadKeyPressed_Callback(PAD_RIGHT) == false) ) + { + if(ptrPlayer->Camera.X_Speed > 0) +80020b84: 8202008c lb v0,140(s0) +80020b88: 00000000 nop +80020b8c: 18400003 blez v0,80020b9c <CameraHandler+0x19c> +80020b90: 00000000 nop + { + ptrPlayer->Camera.X_Speed--; +80020b94: 10000003 b 80020ba4 <CameraHandler+0x1a4> +80020b98: 2442ffff addiu v0,v0,-1 + } + else if(ptrPlayer->Camera.X_Speed < 0) +80020b9c: 10400002 beqz v0,80020ba8 <CameraHandler+0x1a8> +80020ba0: 24420001 addiu v0,v0,1 + { + ptrPlayer->Camera.X_Speed++; +80020ba4: a202008c sb v0,140(s0) + } + } + + if( (ptrPlayer->PadKeyPressed_Callback(PAD_UP) == false) +80020ba8: 8e020078 lw v0,120(s0) +80020bac: 00000000 nop +80020bb0: 0040f809 jalr v0 +80020bb4: 24041000 li a0,4096 +80020bb8: 14400010 bnez v0,80020bfc <CameraHandler+0x1fc> +80020bbc: 00000000 nop + && + (ptrPlayer->PadKeyPressed_Callback(PAD_DOWN) == false) ) +80020bc0: 8e020078 lw v0,120(s0) +80020bc4: 00000000 nop +80020bc8: 0040f809 jalr v0 +80020bcc: 24044000 li a0,16384 + ptrPlayer->Camera.X_Speed++; + } + } + + if( (ptrPlayer->PadKeyPressed_Callback(PAD_UP) == false) + && +80020bd0: 1440000a bnez v0,80020bfc <CameraHandler+0x1fc> +80020bd4: 00000000 nop + (ptrPlayer->PadKeyPressed_Callback(PAD_DOWN) == false) ) + { + if(ptrPlayer->Camera.Y_Speed > 0) +80020bd8: 8202008d lb v0,141(s0) +80020bdc: 00000000 nop +80020be0: 18400003 blez v0,80020bf0 <CameraHandler+0x1f0> +80020be4: 00000000 nop + { + ptrPlayer->Camera.Y_Speed--; +80020be8: 10000003 b 80020bf8 <CameraHandler+0x1f8> +80020bec: 2442ffff addiu v0,v0,-1 + } + else if(ptrPlayer->Camera.Y_Speed < 0) +80020bf0: 10400002 beqz v0,80020bfc <CameraHandler+0x1fc> +80020bf4: 24420001 addiu v0,v0,1 + { + ptrPlayer->Camera.Y_Speed++; +80020bf8: a202008d sb v0,141(s0) + { + ptrPlayer->Camera.Speed_Timer = 0; + CameraUpdateSpeed(ptrPlayer); + } + + ptrPlayer->Camera.X_Offset += ptrPlayer->Camera.X_Speed; +80020bfc: 8203008c lb v1,140(s0) +80020c00: 8e020084 lw v0,132(s0) + ptrPlayer->Camera.Y_Offset += ptrPlayer->Camera.Y_Speed; +} +80020c04: 8fbf0014 lw ra,20(sp) + { + ptrPlayer->Camera.Speed_Timer = 0; + CameraUpdateSpeed(ptrPlayer); + } + + ptrPlayer->Camera.X_Offset += ptrPlayer->Camera.X_Speed; +80020c08: 00431021 addu v0,v0,v1 +80020c0c: ae020084 sw v0,132(s0) + ptrPlayer->Camera.Y_Offset += ptrPlayer->Camera.Y_Speed; +80020c10: 8203008d lb v1,141(s0) +80020c14: 8e020088 lw v0,136(s0) +80020c18: 00000000 nop +80020c1c: 00431021 addu v0,v0,v1 +80020c20: ae020088 sw v0,136(s0) +} +80020c24: 8fb00010 lw s0,16(sp) +80020c28: 03e00008 jr ra +80020c2c: 27bd0018 addiu sp,sp,24 + +void CameraHandler(TYPE_PLAYER * ptrPlayer) +{ + if(CameraSpecialConditions(ptrPlayer) == true) + { + ptrPlayer->Camera.X_Speed = 0; +80020c30: a080008c sb zero,140(a0) + ptrPlayer->Camera.Y_Speed = 0; + return; +80020c34: 03e00008 jr ra +80020c38: a080008d sb zero,141(a0) + +80020c3c <CameraGetIsoPos>: +TYPE_ISOMETRIC_POS CameraGetIsoPos(TYPE_PLAYER * ptrPlayer) +{ + TYPE_ISOMETRIC_POS IsoPos; + TYPE_CARTESIAN_POS CartPos; + + CartPos.x = CAMERA_INITIAL_X_OFFSET - ptrPlayer->Camera.X_Offset; +80020c3c: 8ca30084 lw v1,132(a1) +80020c40: 240200c0 li v0,192 + + return false; +} + +TYPE_ISOMETRIC_POS CameraGetIsoPos(TYPE_PLAYER * ptrPlayer) +{ +80020c44: 27bdffd8 addiu sp,sp,-40 + TYPE_ISOMETRIC_POS IsoPos; + TYPE_CARTESIAN_POS CartPos; + + CartPos.x = CAMERA_INITIAL_X_OFFSET - ptrPlayer->Camera.X_Offset; +80020c48: 00431023 subu v0,v0,v1 + CartPos.y = (Y_SCREEN_RESOLUTION >> 1) - ptrPlayer->Camera.Y_Offset; +80020c4c: 8ca30088 lw v1,136(a1) +TYPE_ISOMETRIC_POS CameraGetIsoPos(TYPE_PLAYER * ptrPlayer) +{ + TYPE_ISOMETRIC_POS IsoPos; + TYPE_CARTESIAN_POS CartPos; + + CartPos.x = CAMERA_INITIAL_X_OFFSET - ptrPlayer->Camera.X_Offset; +80020c50: a7a20018 sh v0,24(sp) + CartPos.y = (Y_SCREEN_RESOLUTION >> 1) - ptrPlayer->Camera.Y_Offset; +80020c54: 24020078 li v0,120 + + return false; +} + +TYPE_ISOMETRIC_POS CameraGetIsoPos(TYPE_PLAYER * ptrPlayer) +{ +80020c58: afb00020 sw s0,32(sp) + TYPE_ISOMETRIC_POS IsoPos; + TYPE_CARTESIAN_POS CartPos; + + CartPos.x = CAMERA_INITIAL_X_OFFSET - ptrPlayer->Camera.X_Offset; + CartPos.y = (Y_SCREEN_RESOLUTION >> 1) - ptrPlayer->Camera.Y_Offset; +80020c5c: 00431023 subu v0,v0,v1 + + return false; +} + +TYPE_ISOMETRIC_POS CameraGetIsoPos(TYPE_PLAYER * ptrPlayer) +{ +80020c60: 00808021 move s0,a0 + CartPos.x = CAMERA_INITIAL_X_OFFSET - ptrPlayer->Camera.X_Offset; + CartPos.y = (Y_SCREEN_RESOLUTION >> 1) - ptrPlayer->Camera.Y_Offset; + + /*dprintf("CartPos = {%d, %d}\n", CartPos.x, CartPos.y);*/ + + IsoPos = GfxCartesianToIsometric(&CartPos); +80020c64: 27a50018 addiu a1,sp,24 +80020c68: 27a40010 addiu a0,sp,16 + + return false; +} + +TYPE_ISOMETRIC_POS CameraGetIsoPos(TYPE_PLAYER * ptrPlayer) +{ +80020c6c: afbf0024 sw ra,36(sp) + CartPos.x = CAMERA_INITIAL_X_OFFSET - ptrPlayer->Camera.X_Offset; + CartPos.y = (Y_SCREEN_RESOLUTION >> 1) - ptrPlayer->Camera.Y_Offset; + + /*dprintf("CartPos = {%d, %d}\n", CartPos.x, CartPos.y);*/ + + IsoPos = GfxCartesianToIsometric(&CartPos); +80020c70: 0c0091e8 jal 800247a0 <GfxCartesianToIsometric> +80020c74: a7a2001a sh v0,26(sp) + + return IsoPos; +80020c78: 97a20010 lhu v0,16(sp) +} +80020c7c: 8fbf0024 lw ra,36(sp) + + /*dprintf("CartPos = {%d, %d}\n", CartPos.x, CartPos.y);*/ + + IsoPos = GfxCartesianToIsometric(&CartPos); + + return IsoPos; +80020c80: a6020000 sh v0,0(s0) +80020c84: 97a20012 lhu v0,18(sp) +80020c88: 00000000 nop +80020c8c: a6020002 sh v0,2(s0) +80020c90: 97a20014 lhu v0,20(sp) +80020c94: 00000000 nop +80020c98: a6020004 sh v0,4(s0) +} +80020c9c: 02001021 move v0,s0 +80020ca0: 8fb00020 lw s0,32(sp) +80020ca4: 03e00008 jr ra +80020ca8: 27bd0028 addiu sp,sp,40 + +80020cac <CameraMoveToIsoPos>: + +void CameraMoveToIsoPos(TYPE_PLAYER * ptrPlayer, TYPE_ISOMETRIC_POS IsoPos) +{ +80020cac: 27bdffe0 addiu sp,sp,-32 +80020cb0: afb00018 sw s0,24(sp) +80020cb4: afa50024 sw a1,36(sp) +80020cb8: 00808021 move s0,a0 + TYPE_CARTESIAN_POS CartPos = GfxIsometricToCartesian(&IsoPos); +80020cbc: 27a50024 addiu a1,sp,36 +80020cc0: 27a40010 addiu a0,sp,16 + + return IsoPos; +} + +void CameraMoveToIsoPos(TYPE_PLAYER * ptrPlayer, TYPE_ISOMETRIC_POS IsoPos) +{ +80020cc4: afbf001c sw ra,28(sp) + TYPE_CARTESIAN_POS CartPos = GfxIsometricToCartesian(&IsoPos); +80020cc8: 0c0091ac jal 800246b0 <GfxIsometricToCartesian> +80020ccc: afa60028 sw a2,40(sp) + IsoPos.y, + IsoPos.z, + CartPos.x, + CartPos.y );*/ + + ptrPlayer->Camera.X_Offset = CAMERA_INITIAL_X_OFFSET - CartPos.x; +80020cd0: 87a30010 lh v1,16(sp) +80020cd4: 240200c0 li v0,192 +80020cd8: 00431023 subu v0,v0,v1 + ptrPlayer->Camera.Y_Offset = (Y_SCREEN_RESOLUTION >> 1) - CartPos.y; +80020cdc: 87a30012 lh v1,18(sp) + IsoPos.y, + IsoPos.z, + CartPos.x, + CartPos.y );*/ + + ptrPlayer->Camera.X_Offset = CAMERA_INITIAL_X_OFFSET - CartPos.x; +80020ce0: ae020084 sw v0,132(s0) + ptrPlayer->Camera.Y_Offset = (Y_SCREEN_RESOLUTION >> 1) - CartPos.y; + + /*dprintf("Moving camera to {%d, %d}\n", + ptrPlayer->Camera.X_Offset, + ptrPlayer->Camera.Y_Offset );*/ +} +80020ce4: 8fbf001c lw ra,28(sp) + IsoPos.z, + CartPos.x, + CartPos.y );*/ + + ptrPlayer->Camera.X_Offset = CAMERA_INITIAL_X_OFFSET - CartPos.x; + ptrPlayer->Camera.Y_Offset = (Y_SCREEN_RESOLUTION >> 1) - CartPos.y; +80020ce8: 24020078 li v0,120 +80020cec: 00431023 subu v0,v0,v1 +80020cf0: ae020088 sw v0,136(s0) + + /*dprintf("Moving camera to {%d, %d}\n", + ptrPlayer->Camera.X_Offset, + ptrPlayer->Camera.Y_Offset );*/ +} +80020cf4: 8fb00018 lw s0,24(sp) +80020cf8: 03e00008 jr ra +80020cfc: 27bd0020 addiu sp,sp,32 + +80020d00 <EndAnimationFadeOut>: + SfxStopMusic(); + } +} + +void EndAnimationFadeOut(void) +{ +80020d00: 27bdffe8 addiu sp,sp,-24 +80020d04: afb00010 sw s0,16(sp) + { + if( GfxGetGlobalLuminance() > 0) + { + GfxSetGlobalLuminance(GfxGetGlobalLuminance() - END_ANIMATION_FADEOUT_STEP); + + GfxSortSprite(&EndAnimationDisplay);; +80020d08: 3c108004 lui s0,0x8004 + SfxStopMusic(); + } +} + +void EndAnimationFadeOut(void) +{ +80020d0c: afbf0014 sw ra,20(sp) + { + if( GfxGetGlobalLuminance() > 0) + { + GfxSetGlobalLuminance(GfxGetGlobalLuminance() - END_ANIMATION_FADEOUT_STEP); + + GfxSortSprite(&EndAnimationDisplay);; +80020d10: 261032d0 addiu s0,s0,13008 +{ + uint8_t i; + + while(1) + { + if( GfxGetGlobalLuminance() > 0) +80020d14: 0c009007 jal 8002401c <GfxGetGlobalLuminance> +80020d18: 00000000 nop +80020d1c: 1040000c beqz v0,80020d50 <EndAnimationFadeOut+0x50> +80020d20: 00003021 move a2,zero + { + GfxSetGlobalLuminance(GfxGetGlobalLuminance() - END_ANIMATION_FADEOUT_STEP); +80020d24: 0c009007 jal 8002401c <GfxGetGlobalLuminance> +80020d28: 00000000 nop +80020d2c: 2442fff8 addiu v0,v0,-8 +80020d30: 0c00900b jal 8002402c <GfxSetGlobalLuminance> +80020d34: 304400ff andi a0,v0,0xff + + GfxSortSprite(&EndAnimationDisplay);; +80020d38: 0c0090d2 jal 80024348 <GfxSortSprite> +80020d3c: 02002021 move a0,s0 + GfxDrawScene_Slow(); +80020d40: 0c009030 jal 800240c0 <GfxDrawScene_Slow> +80020d44: 00000000 nop + GfxDrawScene_Slow(); + } + + break; + } + } +80020d48: 1000fff2 b 80020d14 <EndAnimationFadeOut+0x14> +80020d4c: 00000000 nop + GfxSortSprite(&EndAnimationDisplay);; + GfxDrawScene_Slow(); + } + else + { + GsSortCls(0,0,0); +80020d50: 00002821 move a1,zero +80020d54: 0c00c4e8 jal 800313a0 <GsSortCls> +80020d58: 00002021 move a0,zero + + for(i = 0 ; i < 2 ; i++) + { + // Draw two frames to ensure black display + GfxDrawScene_Slow(); +80020d5c: 0c009030 jal 800240c0 <GfxDrawScene_Slow> +80020d60: 00000000 nop + } + + break; + } + } +} +80020d64: 8fbf0014 lw ra,20(sp) +80020d68: 8fb00010 lw s0,16(sp) + GsSortCls(0,0,0); + + for(i = 0 ; i < 2 ; i++) + { + // Draw two frames to ensure black display + GfxDrawScene_Slow(); +80020d6c: 08009030 j 800240c0 <GfxDrawScene_Slow> +80020d70: 27bd0018 addiu sp,sp,24 + +80020d74 <EndAnimation>: + +static GsRectangle EndAnimationRect; +static GsSprite EndAnimationDisplay; + +void EndAnimation(void) +{ +80020d74: 27bdff60 addiu sp,sp,-160 +80020d78: afb1007c sw s1,124(sp) + uint8_t randIndex = 0; + + GfxSaveDisplayData(&EndAnimationDisplay); +80020d7c: 3c118004 lui s1,0x8004 +80020d80: 262432d0 addiu a0,s1,13008 + +static GsRectangle EndAnimationRect; +static GsSprite EndAnimationDisplay; + +void EndAnimation(void) +{ +80020d84: afbf009c sw ra,156(sp) +80020d88: afbe0098 sw s8,152(sp) +80020d8c: afb70094 sw s7,148(sp) +80020d90: afb60090 sw s6,144(sp) +80020d94: afb5008c sw s5,140(sp) +80020d98: afb40088 sw s4,136(sp) +80020d9c: afb30084 sw s3,132(sp) +80020da0: afb20080 sw s2,128(sp) + uint8_t randIndex = 0; + + GfxSaveDisplayData(&EndAnimationDisplay); +80020da4: 0c009090 jal 80024240 <GfxSaveDisplayData> +80020da8: afb00078 sw s0,120(sp) + + GfxSetGlobalLuminance(NORMAL_LUMINANCE); +80020dac: 0c00900b jal 8002402c <GfxSetGlobalLuminance> +80020db0: 24040080 li a0,128 + + if(SystemIsRandSeedSet() == false) +80020db4: 0c009f87 jal 80027e1c <SystemIsRandSeedSet> +80020db8: 00000000 nop +80020dbc: 14400005 bnez v0,80020dd4 <EndAnimation+0x60> +80020dc0: 00000000 nop + { + // Set default end animation + EndAnimationFadeOut(); +80020dc4: 0c008340 jal 80020d00 <EndAnimationFadeOut> +80020dc8: 00000000 nop +80020dcc: 10000091 b 80021014 <EndAnimation+0x2a0> +80020dd0: 00000000 nop + } + else + { + randIndex = rand() % (END_ANIMATION_MAX_RAND_VALUE + 1); +80020dd4: 0c00d5a9 jal 800356a4 <rand> +80020dd8: 00000000 nop + + switch(randIndex) +80020ddc: 24030003 li v1,3 +80020de0: 14600002 bnez v1,80020dec <EndAnimation+0x78> +80020de4: 0043001a div zero,v0,v1 +80020de8: 0007000d break 0x7 +80020dec: 24030001 li v1,1 +80020df0: 00001010 mfhi v0 +80020df4: 304200ff andi v0,v0,0xff +80020df8: 10430063 beq v0,v1,80020f88 <EndAnimation+0x214> +80020dfc: 24030002 li v1,2 +80020e00: 10430065 beq v0,v1,80020f98 <EndAnimation+0x224> +80020e04: 3c148004 lui s4,0x8004 +80020e08: 14400080 bnez v0,8002100c <EndAnimation+0x298> +80020e0c: 3c158004 lui s5,0x8004 + uint16_t randInd = 0; + bool sqPos[END_ANIMATION_SQUARES_TOTAL]; + uint16_t sqCounter = END_ANIMATION_SQUARES_TOTAL; + uint16_t maxIndex = END_ANIMATION_SQUARES_TOTAL_MAX_INDEX; + + EndAnimationRect.w = END_ANIMATION_SQUARES_SIZE; +80020e10: 26b032fc addiu s0,s5,13052 +80020e14: 24020020 li v0,32 + + EndAnimationRect.r = 0; + EndAnimationRect.g = 0; + EndAnimationRect.b = 0; + + memset(sqPos, false , END_ANIMATION_SQUARES_TOTAL); +80020e18: 24060060 li a2,96 +80020e1c: 00002821 move a1,zero +80020e20: 27a40010 addiu a0,sp,16 + uint16_t randInd = 0; + bool sqPos[END_ANIMATION_SQUARES_TOTAL]; + uint16_t sqCounter = END_ANIMATION_SQUARES_TOTAL; + uint16_t maxIndex = END_ANIMATION_SQUARES_TOTAL_MAX_INDEX; + + EndAnimationRect.w = END_ANIMATION_SQUARES_SIZE; +80020e24: a6020004 sh v0,4(s0) + EndAnimationRect.h = END_ANIMATION_SQUARES_SIZE; +80020e28: a6020006 sh v0,6(s0) + + EndAnimationRect.r = 0; +80020e2c: a2000008 sb zero,8(s0) + EndAnimationRect.g = 0; +80020e30: a2000009 sb zero,9(s0) + EndAnimationRect.b = 0; +80020e34: a200000a sb zero,10(s0) + + memset(sqPos, false , END_ANIMATION_SQUARES_TOTAL); +80020e38: 0c00d7ab jal 80035eac <memset> +80020e3c: 24140060 li s4,96 +void EndAnimationSquares(void) +{ + uint16_t i, j, k; + uint16_t randInd = 0; + bool sqPos[END_ANIMATION_SQUARES_TOTAL]; + uint16_t sqCounter = END_ANIMATION_SQUARES_TOTAL; +80020e40: 24120060 li s2,96 + uint16_t maxIndex = END_ANIMATION_SQUARES_TOTAL_MAX_INDEX; +80020e44: 2413005f li s3,95 + /*dprintf("randInd = %d\t",randInd); + dprintf("sqPos[randInd] = %d\n", sqPos[randInd]);*/ + + if(sqPos[randInd] == false) + { + sqPos[randInd] = true; +80020e48: 24170001 li s7,1 + } + } + + }while(1); + + GfxSortSprite(&EndAnimationDisplay); +80020e4c: 263132d0 addiu s1,s1,13008 + { + for(j = 0; j < END_ANIMATION_SQUARES_TOTAL ; j++) + { + if(sqPos[j] == true) + { + EndAnimationRect.x = ((j) << END_ANIMATION_SQUARES_SIZE_BITSHIFT) - +80020e50: 2416000c li s6,12 + + GfxSortSprite(&EndAnimationDisplay); + + if(sqCounter != 0) + { + for(j = 0; j < END_ANIMATION_SQUARES_TOTAL ; j++) +80020e54: 241e0060 li s8,96 + for(i = 0; i < END_ANIMATION_SQUARES_TOTAL ; i++) + { + + do + { + randInd = SystemRand(0,maxIndex); +80020e58: 02602821 move a1,s3 +80020e5c: 0c00a03d jal 800280f4 <SystemRand> +80020e60: 00002021 move a0,zero + + /*dprintf("randInd = %d\t",randInd); + dprintf("sqPos[randInd] = %d\n", sqPos[randInd]);*/ + + if(sqPos[randInd] == false) +80020e64: 3042ffff andi v0,v0,0xffff +80020e68: 27a30010 addiu v1,sp,16 +80020e6c: 00621021 addu v0,v1,v0 +80020e70: 90430000 lbu v1,0(v0) +80020e74: 00000000 nop +80020e78: 1460000d bnez v1,80020eb0 <EndAnimation+0x13c> +80020e7c: 00000000 nop + { + sqPos[randInd] = true; + sqCounter--; +80020e80: 2652ffff addiu s2,s2,-1 + /*dprintf("randInd = %d\t",randInd); + dprintf("sqPos[randInd] = %d\n", sqPos[randInd]);*/ + + if(sqPos[randInd] == false) + { + sqPos[randInd] = true; +80020e84: a0570000 sb s7,0(v0) + sqCounter--; +80020e88: 3252ffff andi s2,s2,0xffff + + while(sqPos[maxIndex] == true) +80020e8c: 27a20010 addiu v0,sp,16 +80020e90: 00531021 addu v0,v0,s3 +80020e94: 90420000 lbu v0,0(v0) +80020e98: 00000000 nop +80020e9c: 10400006 beqz v0,80020eb8 <EndAnimation+0x144> +80020ea0: 00000000 nop + { + // Lower maximum value for rand() so that it's + // easier to spot new empty index on next iteration. + maxIndex--; +80020ea4: 2673ffff addiu s3,s3,-1 +80020ea8: 1000fff8 b 80020e8c <EndAnimation+0x118> +80020eac: 3273ffff andi s3,s3,0xffff + + break; + } + else + { + if(sqCounter == 0) +80020eb0: 1640ffea bnez s2,80020e5c <EndAnimation+0xe8> +80020eb4: 02602821 move a1,s3 + } + } + + }while(1); + + GfxSortSprite(&EndAnimationDisplay); +80020eb8: 0c0090d2 jal 80024348 <GfxSortSprite> +80020ebc: 02202021 move a0,s1 + + if(sqCounter != 0) +80020ec0: 1640000f bnez s2,80020f00 <EndAnimation+0x18c> +80020ec4: 00001821 move v1,zero + { + // Quick fix: draw a full black rectangle instead of multiple squares + for(k = 0 ; k < 2 ; k++) + { + // Draw two frames to ensure black display + GsSortCls(0,0,0); +80020ec8: 00003021 move a2,zero +80020ecc: 00002821 move a1,zero +80020ed0: 0c00c4e8 jal 800313a0 <GsSortCls> +80020ed4: 00002021 move a0,zero + GfxDrawScene_Slow(); +80020ed8: 0c009030 jal 800240c0 <GfxDrawScene_Slow> +80020edc: 2694ffff addiu s4,s4,-1 + { + // Quick fix: draw a full black rectangle instead of multiple squares + for(k = 0 ; k < 2 ; k++) + { + // Draw two frames to ensure black display + GsSortCls(0,0,0); +80020ee0: 00003021 move a2,zero +80020ee4: 00002821 move a1,zero +80020ee8: 0c00c4e8 jal 800313a0 <GsSortCls> +80020eec: 00002021 move a0,zero + GfxDrawScene_Slow(); +80020ef0: 0c009030 jal 800240c0 <GfxDrawScene_Slow> +80020ef4: 3294ffff andi s4,s4,0xffff +80020ef8: 1000001d b 80020f70 <EndAnimation+0x1fc> +80020efc: 00000000 nop + + if(sqCounter != 0) + { + for(j = 0; j < END_ANIMATION_SQUARES_TOTAL ; j++) + { + if(sqPos[j] == true) +80020f00: 27a40010 addiu a0,sp,16 +80020f04: 00832021 addu a0,a0,v1 +80020f08: 90840000 lbu a0,0(a0) +80020f0c: 00000000 nop +80020f10: 10800012 beqz a0,80020f5c <EndAnimation+0x1e8> +80020f14: 3062ffff andi v0,v1,0xffff + { + EndAnimationRect.x = ((j) << END_ANIMATION_SQUARES_SIZE_BITSHIFT) - +80020f18: 16c00002 bnez s6,80020f24 <EndAnimation+0x1b0> +80020f1c: 0056001b divu zero,v0,s6 +80020f20: 0007000d break 0x7 +80020f24: 00021140 sll v0,v0,0x5 +80020f28: afa30070 sw v1,112(sp) +80020f2c: 00002012 mflo a0 +80020f30: 000431c0 sll a2,a0,0x7 +80020f34: 00042a40 sll a1,a0,0x9 +80020f38: 00a62823 subu a1,a1,a2 + (short)( (j / END_ANIMATION_SQUARES_PER_ROW) * + X_SCREEN_RESOLUTION); + + EndAnimationRect.y = (short) (j/ END_ANIMATION_SQUARES_PER_ROW) << +80020f3c: 00042140 sll a0,a0,0x5 + { + for(j = 0; j < END_ANIMATION_SQUARES_TOTAL ; j++) + { + if(sqPos[j] == true) + { + EndAnimationRect.x = ((j) << END_ANIMATION_SQUARES_SIZE_BITSHIFT) - +80020f40: 00451023 subu v0,v0,a1 + (short)( (j / END_ANIMATION_SQUARES_PER_ROW) * + X_SCREEN_RESOLUTION); + + EndAnimationRect.y = (short) (j/ END_ANIMATION_SQUARES_PER_ROW) << +80020f44: a6040002 sh a0,2(s0) + END_ANIMATION_SQUARES_SIZE_BITSHIFT; + + GsSortRectangle(&EndAnimationRect); +80020f48: 02002021 move a0,s0 +80020f4c: 0c00b762 jal 8002dd88 <GsSortRectangle> +80020f50: a6a232fc sh v0,13052(s5) +80020f54: 8fa30070 lw v1,112(sp) +80020f58: 00000000 nop +80020f5c: 24630001 addiu v1,v1,1 + + GfxSortSprite(&EndAnimationDisplay); + + if(sqCounter != 0) + { + for(j = 0; j < END_ANIMATION_SQUARES_TOTAL ; j++) +80020f60: 147effe8 bne v1,s8,80020f04 <EndAnimation+0x190> +80020f64: 27a40010 addiu a0,sp,16 +80020f68: 2694ffff addiu s4,s4,-1 +80020f6c: 3294ffff andi s4,s4,0xffff + GsSortCls(0,0,0); + GfxDrawScene_Slow(); + } + } + + GfxDrawScene_Slow(); +80020f70: 0c009030 jal 800240c0 <GfxDrawScene_Slow> +80020f74: 00000000 nop + EndAnimationRect.g = 0; + EndAnimationRect.b = 0; + + memset(sqPos, false , END_ANIMATION_SQUARES_TOTAL); + + for(i = 0; i < END_ANIMATION_SQUARES_TOTAL ; i++) +80020f78: 1680ffb8 bnez s4,80020e5c <EndAnimation+0xe8> +80020f7c: 02602821 move a1,s3 +80020f80: 10000022 b 8002100c <EndAnimation+0x298> +80020f84: 00000000 nop + case END_ANIMATION_SQUARES: + EndAnimationSquares(); + break; + + case END_ANIMATION_FADEOUT: + EndAnimationFadeOut(); +80020f88: 0c008340 jal 80020d00 <EndAnimationFadeOut> +80020f8c: 00000000 nop + break; +80020f90: 1000001e b 8002100c <EndAnimation+0x298> +80020f94: 00000000 nop + } + else + { + randIndex = rand() % (END_ANIMATION_MAX_RAND_VALUE + 1); + + switch(randIndex) +80020f98: 00009821 move s3,zero +{ + short rectIndex = 0; + + do + { + GfxSortSprite(&EndAnimationDisplay); +80020f9c: 263232d0 addiu s2,s1,13008 + + // Draw upper half rectangle + + EndAnimationRect.x = 0; + EndAnimationRect.y = 0; +80020fa0: 269032fc addiu s0,s4,13052 + + EndAnimationRect.w = X_SCREEN_RESOLUTION; +80020fa4: 24150180 li s5,384 + EndAnimationRect.h = rectIndex; + + GsSortRectangle(&EndAnimationRect); + + EndAnimationRect.x = 0; + EndAnimationRect.y = Y_SCREEN_RESOLUTION - rectIndex; +80020fa8: 241600f0 li s6,240 +{ + short rectIndex = 0; + + do + { + GfxSortSprite(&EndAnimationDisplay); +80020fac: 0c0090d2 jal 80024348 <GfxSortSprite> +80020fb0: 02402021 move a0,s2 +80020fb4: 3271ffff andi s1,s3,0xffff + EndAnimationRect.y = 0; + + EndAnimationRect.w = X_SCREEN_RESOLUTION; + EndAnimationRect.h = rectIndex; + + GsSortRectangle(&EndAnimationRect); +80020fb8: 02002021 move a0,s0 + + EndAnimationRect.x = 0; + EndAnimationRect.y = 0; + + EndAnimationRect.w = X_SCREEN_RESOLUTION; + EndAnimationRect.h = rectIndex; +80020fbc: a6130006 sh s3,6(s0) + { + GfxSortSprite(&EndAnimationDisplay); + + // Draw upper half rectangle + + EndAnimationRect.x = 0; +80020fc0: a68032fc sh zero,13052(s4) + EndAnimationRect.y = 0; +80020fc4: a6000002 sh zero,2(s0) + + EndAnimationRect.w = X_SCREEN_RESOLUTION; + EndAnimationRect.h = rectIndex; + + GsSortRectangle(&EndAnimationRect); +80020fc8: 0c00b762 jal 8002dd88 <GsSortRectangle> +80020fcc: a6150004 sh s5,4(s0) + + EndAnimationRect.x = 0; + EndAnimationRect.y = Y_SCREEN_RESOLUTION - rectIndex; +80020fd0: 02d11023 subu v0,s6,s1 +80020fd4: 26310002 addiu s1,s1,2 + + EndAnimationRect.w = X_SCREEN_RESOLUTION; + EndAnimationRect.h = rectIndex; + + GsSortRectangle(&EndAnimationRect); +80020fd8: 02002021 move a0,s0 +80020fdc: 3231ffff andi s1,s1,0xffff + EndAnimationRect.h = rectIndex; + + GsSortRectangle(&EndAnimationRect); + + EndAnimationRect.x = 0; + EndAnimationRect.y = Y_SCREEN_RESOLUTION - rectIndex; +80020fe0: a6020002 sh v0,2(s0) + + EndAnimationRect.w = X_SCREEN_RESOLUTION; + EndAnimationRect.h = rectIndex; +80020fe4: a6130006 sh s3,6(s0) + EndAnimationRect.w = X_SCREEN_RESOLUTION; + EndAnimationRect.h = rectIndex; + + GsSortRectangle(&EndAnimationRect); + + EndAnimationRect.x = 0; +80020fe8: a68032fc sh zero,13052(s4) + EndAnimationRect.y = Y_SCREEN_RESOLUTION - rectIndex; + + EndAnimationRect.w = X_SCREEN_RESOLUTION; +80020fec: a6150004 sh s5,4(s0) + EndAnimationRect.h = rectIndex; + + GsSortRectangle(&EndAnimationRect); +80020ff0: 0c00b762 jal 8002dd88 <GsSortRectangle> +80020ff4: 00119c00 sll s3,s1,0x10 + + GfxDrawScene_Slow(); +80020ff8: 0c009030 jal 800240c0 <GfxDrawScene_Slow> +80020ffc: 00139c03 sra s3,s3,0x10 + + rectIndex += END_ANIMATION_LINE_STEP; + + }while(rectIndex <= (X_SCREEN_RESOLUTION >> 1) ); +80021000: 240200c2 li v0,194 +80021004: 1622ffe9 bne s1,v0,80020fac <EndAnimation+0x238> +80021008: 00000000 nop + + default: + break; + } + + SfxStopMusic(); +8002100c: 0c009f28 jal 80027ca0 <SfxStopMusic> +80021010: 00000000 nop + } +} +80021014: 8fbf009c lw ra,156(sp) +80021018: 8fbe0098 lw s8,152(sp) +8002101c: 8fb70094 lw s7,148(sp) +80021020: 8fb60090 lw s6,144(sp) +80021024: 8fb5008c lw s5,140(sp) +80021028: 8fb40088 lw s4,136(sp) +8002102c: 8fb30084 lw s3,132(sp) +80021030: 8fb20080 lw s2,128(sp) +80021034: 8fb1007c lw s1,124(sp) +80021038: 8fb00078 lw s0,120(sp) +8002103c: 03e00008 jr ra +80021040: 27bd00a0 addiu sp,sp,160 + +80021044 <FontLoadImage>: + * *************************************/ + +char _internal_text[FONT_INTERNAL_TEXT_BUFFER_MAX_SIZE]; + +bool FontLoadImage(char * strPath, TYPE_FONT * ptrFont) +{ +80021044: 27bdffe0 addiu sp,sp,-32 +80021048: afb10018 sw s1,24(sp) +8002104c: afb00014 sw s0,20(sp) +80021050: afbf001c sw ra,28(sp) + if(GfxSpriteFromFile(strPath, &ptrFont->spr) == false) +80021054: 0c00903c jal 800240f0 <GfxSpriteFromFile> +80021058: 00a08021 move s0,a1 +8002105c: 10400021 beqz v0,800210e4 <FontLoadImage+0xa0> +80021060: 00408821 move s1,v0 + { + return false; + } + + ptrFont->spr_w = ptrFont->spr.w; + ptrFont->spr_h = ptrFont->spr.h; +80021064: 96020008 lhu v0,8(s0) + if(GfxSpriteFromFile(strPath, &ptrFont->spr) == false) + { + return false; + } + + ptrFont->spr_w = ptrFont->spr.w; +80021068: 86040006 lh a0,6(s0) + ptrFont->spr_h = ptrFont->spr.h; +8002106c: a602003a sh v0,58(s0) + ptrFont->spr_u = ptrFont->spr.u; +80021070: 92020004 lbu v0,4(s0) + ptrFont->spr_v = ptrFont->spr.v; + + //Now set default values to font + + ptrFont->char_w = FONT_DEFAULT_CHAR_SIZE; +80021074: 24030010 li v1,16 + return false; + } + + ptrFont->spr_w = ptrFont->spr.w; + ptrFont->spr_h = ptrFont->spr.h; + ptrFont->spr_u = ptrFont->spr.u; +80021078: a602003c sh v0,60(s0) + ptrFont->spr_v = ptrFont->spr.v; +8002107c: 92020005 lbu v0,5(s0) + if(GfxSpriteFromFile(strPath, &ptrFont->spr) == false) + { + return false; + } + + ptrFont->spr_w = ptrFont->spr.w; +80021080: a6040038 sh a0,56(s0) + ptrFont->spr_h = ptrFont->spr.h; + ptrFont->spr_u = ptrFont->spr.u; + ptrFont->spr_v = ptrFont->spr.v; +80021084: a602003e sh v0,62(s0) + ptrFont->char_w = FONT_DEFAULT_CHAR_SIZE; + ptrFont->char_h = FONT_DEFAULT_CHAR_SIZE; + + ptrFont->spr.attribute |= COLORMODE(COLORMODE_4BPP); + ptrFont->spr.attribute &= COLORMODE(~(COLORMODE_8BPP | COLORMODE_16BPP | COLORMODE_24BPP)); + ptrFont->spr.r = NORMAL_LUMINANCE; +80021088: 2402ff80 li v0,-128 +8002108c: a202000e sb v0,14(s0) + ptrFont->spr.g = NORMAL_LUMINANCE; +80021090: a202000f sb v0,15(s0) + ptrFont->spr.b = NORMAL_LUMINANCE; +80021094: a2020010 sb v0,16(s0) + + //At this point, spr.w and spr.h = real w/h + ptrFont->char_per_row = (uint8_t)(ptrFont->spr_w / ptrFont->char_w); +80021098: 000417c3 sra v0,a0,0x1f +8002109c: 3042000f andi v0,v0,0xf +800210a0: 00441021 addu v0,v0,a0 +800210a4: 00021103 sra v0,v0,0x4 +800210a8: a2020031 sb v0,49(s0) + + ptrFont->flags = FONT_NOFLAGS; + + ptrFont->init_ch = FONT_DEFAULT_INIT_CHAR; + + dprintf("Sprite CX = %d, sprite CY = %d\n",ptrFont->spr.cx, ptrFont->spr.cy); +800210ac: 3c048004 lui a0,0x8004 + ptrFont->spr.w = ptrFont->char_w; + ptrFont->spr.h = ptrFont->char_h; + + ptrFont->flags = FONT_NOFLAGS; + + ptrFont->init_ch = FONT_DEFAULT_INIT_CHAR; +800210b0: 24020021 li v0,33 + + dprintf("Sprite CX = %d, sprite CY = %d\n",ptrFont->spr.cx, ptrFont->spr.cy); +800210b4: 8606000c lh a2,12(s0) +800210b8: 8605000a lh a1,10(s0) + ptrFont->spr_u = ptrFont->spr.u; + ptrFont->spr_v = ptrFont->spr.v; + + //Now set default values to font + + ptrFont->char_w = FONT_DEFAULT_CHAR_SIZE; +800210bc: a603002c sh v1,44(s0) + ptrFont->char_h = FONT_DEFAULT_CHAR_SIZE; +800210c0: a603002e sh v1,46(s0) + + ptrFont->spr.attribute |= COLORMODE(COLORMODE_4BPP); + ptrFont->spr.attribute &= COLORMODE(~(COLORMODE_8BPP | COLORMODE_16BPP | COLORMODE_24BPP)); +800210c4: ae000014 sw zero,20(s0) + ptrFont->spr.g = NORMAL_LUMINANCE; + ptrFont->spr.b = NORMAL_LUMINANCE; + + //At this point, spr.w and spr.h = real w/h + ptrFont->char_per_row = (uint8_t)(ptrFont->spr_w / ptrFont->char_w); + ptrFont->max_ch_wrap = 0; +800210c8: a2000032 sb zero,50(s0) + + ptrFont->spr.w = ptrFont->char_w; +800210cc: a6030006 sh v1,6(s0) + ptrFont->spr.h = ptrFont->char_h; +800210d0: a6030008 sh v1,8(s0) + + ptrFont->flags = FONT_NOFLAGS; +800210d4: ae000034 sw zero,52(s0) + + ptrFont->init_ch = FONT_DEFAULT_INIT_CHAR; +800210d8: a2020030 sb v0,48(s0) + + dprintf("Sprite CX = %d, sprite CY = %d\n",ptrFont->spr.cx, ptrFont->spr.cy); +800210dc: 0c00ed8f jal 8003b63c <printf> +800210e0: 2484021c addiu a0,a0,540 + + return true; +} +800210e4: 8fbf001c lw ra,28(sp) +800210e8: 02201021 move v0,s1 +800210ec: 8fb00014 lw s0,20(sp) +800210f0: 8fb10018 lw s1,24(sp) +800210f4: 03e00008 jr ra +800210f8: 27bd0020 addiu sp,sp,32 + +800210fc <FontSetInitChar>: + +void FontSetInitChar(TYPE_FONT * ptrFont, char c) +{ + ptrFont->init_ch = c; +800210fc: 03e00008 jr ra +80021100: a0850030 sb a1,48(a0) + +80021104 <FontSetFlags>: +} + +void FontSetFlags(TYPE_FONT * ptrFont, FONT_FLAGS flags) +{ + ptrFont->flags = flags; +80021104: 03e00008 jr ra +80021108: ac850034 sw a1,52(a0) + +8002110c <FontSetSize>: +{ + ptrFont->char_w = size; + ptrFont->char_h = size; + + //At this point, spr.w and spr.h = real w/h + ptrFont->char_per_row = (uint8_t)(ptrFont->spr_w / ptrFont->char_w); +8002110c: 84820038 lh v0,56(a0) +{ + ptrFont->flags = flags; +} + +void FontSetSize(TYPE_FONT * ptrFont, short size) +{ +80021110: 00052c00 sll a1,a1,0x10 +80021114: 00052c03 sra a1,a1,0x10 + ptrFont->char_w = size; + ptrFont->char_h = size; + + //At this point, spr.w and spr.h = real w/h + ptrFont->char_per_row = (uint8_t)(ptrFont->spr_w / ptrFont->char_w); +80021118: 14a00002 bnez a1,80021124 <FontSetSize+0x18> +8002111c: 0045001a div zero,v0,a1 +80021120: 0007000d break 0x7 + ptrFont->flags = flags; +} + +void FontSetSize(TYPE_FONT * ptrFont, short size) +{ + ptrFont->char_w = size; +80021124: a485002c sh a1,44(a0) + ptrFont->char_h = size; +80021128: a485002e sh a1,46(a0) + + //At this point, spr.w and spr.h = real w/h + ptrFont->char_per_row = (uint8_t)(ptrFont->spr_w / ptrFont->char_w); + ptrFont->max_ch_wrap = 0; +8002112c: a0800032 sb zero,50(a0) + + ptrFont->spr.w = ptrFont->char_w; +80021130: a4850006 sh a1,6(a0) + ptrFont->spr.h = ptrFont->char_h; +80021134: a4850008 sh a1,8(a0) +{ + ptrFont->char_w = size; + ptrFont->char_h = size; + + //At this point, spr.w and spr.h = real w/h + ptrFont->char_per_row = (uint8_t)(ptrFont->spr_w / ptrFont->char_w); +80021138: 00001012 mflo v0 + ptrFont->max_ch_wrap = 0; + + ptrFont->spr.w = ptrFont->char_w; + ptrFont->spr.h = ptrFont->char_h; +8002113c: 03e00008 jr ra +80021140: a0820031 sb v0,49(a0) + +80021144 <FontPrintText>: + int result; + short orig_x = x; + + va_list ap; + + if(ptrFont->flags & FONT_1HZ_FLASH) +80021144: 8c820034 lw v0,52(a0) + ptrFont->spr.w = ptrFont->char_w; + ptrFont->spr.h = ptrFont->char_h; +} + +void FontPrintText(TYPE_FONT * ptrFont, short x, short y, char * str, ...) +{ +80021148: 27bdffb8 addiu sp,sp,-72 + int result; + short orig_x = x; + + va_list ap; + + if(ptrFont->flags & FONT_1HZ_FLASH) +8002114c: 30430008 andi v1,v0,0x8 + ptrFont->spr.w = ptrFont->char_w; + ptrFont->spr.h = ptrFont->char_h; +} + +void FontPrintText(TYPE_FONT * ptrFont, short x, short y, char * str, ...) +{ +80021150: afb20028 sw s2,40(sp) +80021154: afb10024 sw s1,36(sp) +80021158: 00059400 sll s2,a1,0x10 +8002115c: 00068c00 sll s1,a2,0x10 +80021160: afb3002c sw s3,44(sp) +80021164: afb00020 sw s0,32(sp) +80021168: afbf0044 sw ra,68(sp) +8002116c: afbe0040 sw s8,64(sp) +80021170: afb7003c sw s7,60(sp) +80021174: afb60038 sw s6,56(sp) +80021178: afb50034 sw s5,52(sp) +8002117c: afb40030 sw s4,48(sp) +80021180: 00808021 move s0,a0 +80021184: 00e09821 move s3,a3 +80021188: 00129403 sra s2,s2,0x10 + int result; + short orig_x = x; + + va_list ap; + + if(ptrFont->flags & FONT_1HZ_FLASH) +8002118c: 10600014 beqz v1,800211e0 <FontPrintText+0x9c> +80021190: 00118c03 sra s1,s1,0x10 + { + if(Gfx1HzFlash() == false) +80021194: 0c0090b6 jal 800242d8 <Gfx1HzFlash> +80021198: 00000000 nop +8002119c: 1040007c beqz v0,80021390 <FontPrintText+0x24c> +800211a0: 3c168007 lui s6,0x8007 + } + } + + va_start(ap, str); + + result = vsnprintf( _internal_text, +800211a4: 02603021 move a2,s3 + { + return; + } + } + + va_start(ap, str); +800211a8: 27a70058 addiu a3,sp,88 + + result = vsnprintf( _internal_text, +800211ac: 26c48db8 addiu a0,s6,-29256 +800211b0: 240500c8 li a1,200 +800211b4: 0c00ec5d jal 8003b174 <vsnprintf> +800211b8: afa70010 sw a3,16(sp) +800211bc: 0040f021 move s8,v0 + FONT_INTERNAL_TEXT_BUFFER_MAX_SIZE, + str, + ap ); + + for(i = 0; i < result ; i++) +800211c0: 02409821 move s3,s2 +} + +void FontPrintText(TYPE_FONT * ptrFont, short x, short y, char * str, ...) +{ + uint16_t i; + uint16_t line_count = 0; +800211c4: 0000a821 move s5,zero + result = vsnprintf( _internal_text, + FONT_INTERNAL_TEXT_BUFFER_MAX_SIZE, + str, + ap ); + + for(i = 0; i < result ; i++) +800211c8: 0000a021 move s4,zero + { + char _ch = _internal_text[i]; +800211cc: 26d68db8 addiu s6,s6,-29256 + { + // End of string + break; + } + + switch(_ch) +800211d0: 2402000a li v0,10 +800211d4: 24060020 li a2,32 + result = vsnprintf( _internal_text, + FONT_INTERNAL_TEXT_BUFFER_MAX_SIZE, + str, + ap ); + + for(i = 0; i < result ; i++) +800211d8: 10000017 b 80021238 <FontPrintText+0xf4> +800211dc: 2417ff80 li s7,-128 + if(Gfx1HzFlash() == false) + { + return; + } + } + else if(ptrFont->flags & FONT_2HZ_FLASH) +800211e0: 30420010 andi v0,v0,0x10 +800211e4: 1040ffef beqz v0,800211a4 <FontPrintText+0x60> +800211e8: 3c168007 lui s6,0x8007 + { + if(Gfx2HzFlash() == false) +800211ec: 0c0090c4 jal 80024310 <Gfx2HzFlash> +800211f0: 00000000 nop +800211f4: 1000ffe9 b 8002119c <FontPrintText+0x58> +800211f8: 00000000 nop + str, + ap ); + + for(i = 0; i < result ; i++) + { + char _ch = _internal_text[i]; +800211fc: 80630000 lb v1,0(v1) +80021200: 00000000 nop + + if(_ch == '\0') +80021204: 10600062 beqz v1,80021390 <FontPrintText+0x24c> +80021208: 00000000 nop + { + // End of string + break; + } + + switch(_ch) +8002120c: 1062000f beq v1,v0,8002124c <FontPrintText+0x108> +80021210: 00000000 nop +80021214: 14660013 bne v1,a2,80021264 <FontPrintText+0x120> +80021218: 00000000 nop + { + case ' ': + x += ptrFont->char_w; +8002121c: 9603002c lhu v1,44(s0) +80021220: 00000000 nop +80021224: 02639821 addu s3,s3,v1 +80021228: 00139c00 sll s3,s3,0x10 +8002122c: 00139c03 sra s3,s3,0x10 + result = vsnprintf( _internal_text, + FONT_INTERNAL_TEXT_BUFFER_MAX_SIZE, + str, + ap ); + + for(i = 0; i < result ; i++) +80021230: 26940001 addiu s4,s4,1 +80021234: 3294ffff andi s4,s4,0xffff +80021238: 029e182a slt v1,s4,s8 +8002123c: 1460ffef bnez v1,800211fc <FontPrintText+0xb8> +80021240: 02961821 addu v1,s4,s6 +80021244: 10000052 b 80021390 <FontPrintText+0x24c> +80021248: 00000000 nop + case ' ': + x += ptrFont->char_w; + continue; + case '\n': + x = orig_x; + y += ptrFont->char_h; +8002124c: 9603002e lhu v1,46(s0) + { + case ' ': + x += ptrFont->char_w; + continue; + case '\n': + x = orig_x; +80021250: 02409821 move s3,s2 + y += ptrFont->char_h; +80021254: 02238821 addu s1,s1,v1 +80021258: 00118c00 sll s1,s1,0x10 + break; +8002125c: 1000fff4 b 80021230 <FontPrintText+0xec> +80021260: 00118c03 sra s1,s1,0x10 + default: + if( (ptrFont->flags & FONT_WRAP_LINE) && (ptrFont->max_ch_wrap != 0) ) +80021264: 8e050034 lw a1,52(s0) +80021268: 00000000 nop +8002126c: 30a40002 andi a0,a1,0x2 +80021270: 10800010 beqz a0,800212b4 <FontPrintText+0x170> +80021274: 00000000 nop +80021278: 92040032 lbu a0,50(s0) +8002127c: 00000000 nop +80021280: 1080000c beqz a0,800212b4 <FontPrintText+0x170> +80021284: 00000000 nop + { + if(++line_count >= ptrFont->max_ch_wrap) +80021288: 26b50001 addiu s5,s5,1 +8002128c: 32b5ffff andi s5,s5,0xffff +80021290: 02a4202b sltu a0,s5,a0 +80021294: 14800007 bnez a0,800212b4 <FontPrintText+0x170> +80021298: 00000000 nop + { + line_count = 0; + x = orig_x; + y += ptrFont->char_h; +8002129c: 9604002e lhu a0,46(s0) + if( (ptrFont->flags & FONT_WRAP_LINE) && (ptrFont->max_ch_wrap != 0) ) + { + if(++line_count >= ptrFont->max_ch_wrap) + { + line_count = 0; + x = orig_x; +800212a0: 02409821 move s3,s2 + y += ptrFont->char_h; +800212a4: 02248821 addu s1,s1,a0 +800212a8: 00118c00 sll s1,s1,0x10 +800212ac: 00118c03 sra s1,s1,0x10 + default: + if( (ptrFont->flags & FONT_WRAP_LINE) && (ptrFont->max_ch_wrap != 0) ) + { + if(++line_count >= ptrFont->max_ch_wrap) + { + line_count = 0; +800212b0: 0000a821 move s5,zero + + ptrFont->spr.x = x; + ptrFont->spr.y = y; + ptrFont->spr.w = ptrFont->char_w; + ptrFont->spr.h = ptrFont->char_h; + ptrFont->spr.u = (short)( (_ch - ptrFont->init_ch) % ptrFont->char_per_row) * ptrFont->char_w; +800212b4: 82040030 lb a0,48(s0) + } + } + + ptrFont->spr.x = x; + ptrFont->spr.y = y; + ptrFont->spr.w = ptrFont->char_w; +800212b8: 8608002c lh t0,44(s0) + ptrFont->spr.h = ptrFont->char_h; + ptrFont->spr.u = (short)( (_ch - ptrFont->init_ch) % ptrFont->char_per_row) * ptrFont->char_w; +800212bc: 00641823 subu v1,v1,a0 +800212c0: 92040031 lbu a0,49(s0) + } + + ptrFont->spr.x = x; + ptrFont->spr.y = y; + ptrFont->spr.w = ptrFont->char_w; + ptrFont->spr.h = ptrFont->char_h; +800212c4: 8607002e lh a3,46(s0) + ptrFont->spr.u = (short)( (_ch - ptrFont->init_ch) % ptrFont->char_per_row) * ptrFont->char_w; + ptrFont->spr.u += ptrFont->spr_u; // Add original offset for image +800212c8: 14800002 bnez a0,800212d4 <FontPrintText+0x190> +800212cc: 0064001a div zero,v1,a0 +800212d0: 0007000d break 0x7 + } + } + + ptrFont->spr.x = x; + ptrFont->spr.y = y; + ptrFont->spr.w = ptrFont->char_w; +800212d4: a6080006 sh t0,6(s0) + ptrFont->spr.u = (short)( (_ch - ptrFont->init_ch) % ptrFont->char_per_row) * ptrFont->char_w; + ptrFont->spr.u += ptrFont->spr_u; // Add original offset for image + ptrFont->spr.v = (short)( (_ch - ptrFont->init_ch) / ptrFont->char_per_row) * ptrFont->char_h; + ptrFont->spr.v += ptrFont->spr_v; // Add original offset for image + + if(ptrFont->flags & FONT_BLEND_EFFECT) +800212d8: 30a50004 andi a1,a1,0x4 + x = orig_x; + y += ptrFont->char_h; + } + } + + ptrFont->spr.x = x; +800212dc: a6130000 sh s3,0(s0) + ptrFont->spr.y = y; +800212e0: a6110002 sh s1,2(s0) + ptrFont->spr.w = ptrFont->char_w; + ptrFont->spr.h = ptrFont->char_h; +800212e4: a6070008 sh a3,8(s0) + ptrFont->spr.u = (short)( (_ch - ptrFont->init_ch) % ptrFont->char_per_row) * ptrFont->char_w; + ptrFont->spr.u += ptrFont->spr_u; // Add original offset for image +800212e8: 00002010 mfhi a0 +800212ec: 00001812 mflo v1 + ... +800212f8: 00880018 mult a0,t0 +800212fc: 9208003c lbu t0,60(s0) +80021300: 00002012 mflo a0 +80021304: 00882021 addu a0,a0,t0 +80021308: a2040004 sb a0,4(s0) + ptrFont->spr.v = (short)( (_ch - ptrFont->init_ch) / ptrFont->char_per_row) * ptrFont->char_h; + ptrFont->spr.v += ptrFont->spr_v; // Add original offset for image +8002130c: 00670018 mult v1,a3 +80021310: 9204003e lbu a0,62(s0) +80021314: 00001812 mflo v1 +80021318: 00641821 addu v1,v1,a0 + + if(ptrFont->flags & FONT_BLEND_EFFECT) +8002131c: 10a0000e beqz a1,80021358 <FontPrintText+0x214> +80021320: a2030005 sb v1,5(s0) + { + ptrFont->spr.r += 8; +80021324: 9203000e lbu v1,14(s0) +80021328: 00000000 nop +8002132c: 24630008 addiu v1,v1,8 +80021330: a203000e sb v1,14(s0) + ptrFont->spr.g += 8; +80021334: 9203000f lbu v1,15(s0) +80021338: 00000000 nop +8002133c: 24630008 addiu v1,v1,8 +80021340: a203000f sb v1,15(s0) + ptrFont->spr.b += 8; +80021344: 92030010 lbu v1,16(s0) +80021348: 00000000 nop +8002134c: 24630008 addiu v1,v1,8 +80021350: 10000004 b 80021364 <FontPrintText+0x220> +80021354: a2030010 sb v1,16(s0) + } + else + { + ptrFont->spr.r = NORMAL_LUMINANCE; +80021358: a217000e sb s7,14(s0) + ptrFont->spr.g = NORMAL_LUMINANCE; +8002135c: a217000f sb s7,15(s0) + ptrFont->spr.b = NORMAL_LUMINANCE; +80021360: a2170010 sb s7,16(s0) + ptrFont->init_ch); + dprintf("Char: %c, spr.u = %d, spr.v = %d\n",str[i],ptrFont->spr.u, ptrFont->spr.v); + dprintf("Sprite CX = %d, sprite CY = %d\n",ptrFont->spr.cx, ptrFont->spr.cy);*/ + //dprintf("Sprite rgb={%d,%d,%d}\n",ptrFont->spr.r, ptrFont->spr.g, ptrFont->spr.b); + + GfxSortSprite(&ptrFont->spr); +80021364: 02002021 move a0,s0 +80021368: afa6001c sw a2,28(sp) +8002136c: 0c0090d2 jal 80024348 <GfxSortSprite> +80021370: afa20018 sw v0,24(sp) + x += ptrFont->char_w; +80021374: 9603002c lhu v1,44(s0) +80021378: 8fa6001c lw a2,28(sp) +8002137c: 02639821 addu s3,s3,v1 +80021380: 00139c00 sll s3,s3,0x10 +80021384: 8fa20018 lw v0,24(sp) + break; +80021388: 1000ffa9 b 80021230 <FontPrintText+0xec> +8002138c: 00139c03 sra s3,s3,0x10 + } + } + + va_end(ap); +} +80021390: 8fbf0044 lw ra,68(sp) +80021394: 8fbe0040 lw s8,64(sp) +80021398: 8fb7003c lw s7,60(sp) +8002139c: 8fb60038 lw s6,56(sp) +800213a0: 8fb50034 lw s5,52(sp) +800213a4: 8fb40030 lw s4,48(sp) +800213a8: 8fb3002c lw s3,44(sp) +800213ac: 8fb20028 lw s2,40(sp) +800213b0: 8fb10024 lw s1,36(sp) +800213b4: 8fb00020 lw s0,32(sp) +800213b8: 03e00008 jr ra +800213bc: 27bd0048 addiu sp,sp,72 + +800213c0 <GameGetTileFromIsoPosition>: + +uint16_t GameGetTileFromIsoPosition(TYPE_ISOMETRIC_POS * IsoPos) +{ + uint16_t tile; + + if( (IsoPos->x < 0) || (IsoPos->y < 0) ) +800213c0: 84830000 lh v1,0(a0) +800213c4: 00000000 nop +800213c8: 0460000d bltz v1,80021400 <GameGetTileFromIsoPosition+0x40> +800213cc: 3402ffff li v0,0xffff +800213d0: 84840002 lh a0,2(a0) +800213d4: 00000000 nop +800213d8: 04800009 bltz a0,80021400 <GameGetTileFromIsoPosition+0x40> +800213dc: 00042183 sra a0,a0,0x6 + { + return GAME_INVALID_TILE_SELECTION; // Invalid XYZ position + } + + tile = IsoPos->x >> TILE_SIZE_BIT_SHIFT; + tile += (IsoPos->y >> TILE_SIZE_BIT_SHIFT) * GameLevelColumns; +800213e0: 3c028007 lui v0,0x8007 +800213e4: 90421c12 lbu v0,7186(v0) +800213e8: 00000000 nop +800213ec: 00820018 mult a0,v0 + if( (IsoPos->x < 0) || (IsoPos->y < 0) ) + { + return GAME_INVALID_TILE_SELECTION; // Invalid XYZ position + } + + tile = IsoPos->x >> TILE_SIZE_BIT_SHIFT; +800213f0: 00031983 sra v1,v1,0x6 + tile += (IsoPos->y >> TILE_SIZE_BIT_SHIFT) * GameLevelColumns; +800213f4: 00002012 mflo a0 +800213f8: 00641021 addu v0,v1,a0 +800213fc: 3042ffff andi v0,v0,0xffff + IsoPos->x, + IsoPos->y, + IsoPos->z );*/ + + return tile; +} +80021400: 03e00008 jr ra +80021404: 00000000 nop + +80021408 <GameGetSelectedRunwayArray>: + } + } +} + +void GameGetSelectedRunwayArray(uint16_t rwyHeader) +{ +80021408: 27bdffd8 addiu sp,sp,-40 +8002140c: afb00010 sw s0,16(sp) +80021410: 3c108004 lui s0,0x8004 +80021414: afb40020 sw s4,32(sp) +80021418: afb20018 sw s2,24(sp) +8002141c: afb10014 sw s1,20(sp) +80021420: afbf0024 sw ra,36(sp) +80021424: afb3001c sw s3,28(sp) +80021428: 3c128004 lui s2,0x8004 +8002142c: 3c118007 lui s1,0x8007 +80021430: 3c148007 lui s4,0x8007 + + static uint16_t last_tile = 0; + static uint8_t i = 0; + static RWY_DIR dir; + + if(rwyHeader != 0) +80021434: 1080002a beqz a0,800214e0 <GameGetSelectedRunwayArray+0xd8> +80021438: 26103324 addiu s0,s0,13092 +8002143c: 00809821 move s3,a0 + { + // This function is called recursively. + // Since 0 is not a valid value (it's not allowed to place + // a runway header on first tile), it is used to determine + // when to start creating the array. + memset(GameRwyArray, 0, GAME_MAX_RWY_LENGTH * sizeof(uint16_t)); +80021440: 24060020 li a2,32 +80021444: 00002821 move a1,zero +80021448: 26443744 addiu a0,s2,14148 +8002144c: 0c00d7ab jal 80035eac <memset> +80021450: 02138021 addu s0,s0,s3 + last_tile = rwyHeader; + i = 0; + + switch(GameLevelBuffer[rwyHeader]) +80021454: 92020000 lbu v0,0(s0) +80021458: 2403000a li v1,10 + // This function is called recursively. + // Since 0 is not a valid value (it's not allowed to place + // a runway header on first tile), it is used to determine + // when to start creating the array. + memset(GameRwyArray, 0, GAME_MAX_RWY_LENGTH * sizeof(uint16_t)); + last_tile = rwyHeader; +8002145c: a6331c0a sh s3,7178(s1) + i = 0; + + switch(GameLevelBuffer[rwyHeader]) +80021460: 10430010 beq v0,v1,800214a4 <GameGetSelectedRunwayArray+0x9c> +80021464: a2801c08 sb zero,7176(s4) +80021468: 2c43000b sltiu v1,v0,11 +8002146c: 10600006 beqz v1,80021488 <GameGetSelectedRunwayArray+0x80> +80021470: 24030001 li v1,1 +80021474: 24030009 li v1,9 +80021478: 1443000e bne v0,v1,800214b4 <GameGetSelectedRunwayArray+0xac> +8002147c: 3c028007 lui v0,0x8007 + { + case TILE_RWY_START_1: + dir = RWY_DIR_EAST; + break; +80021480: 10000030 b 80021544 <GameGetSelectedRunwayArray+0x13c> +80021484: ac401c04 sw zero,7172(v0) + // when to start creating the array. + memset(GameRwyArray, 0, GAME_MAX_RWY_LENGTH * sizeof(uint16_t)); + last_tile = rwyHeader; + i = 0; + + switch(GameLevelBuffer[rwyHeader]) +80021488: 2442ff77 addiu v0,v0,-137 +8002148c: 0062102b sltu v0,v1,v0 +80021490: 14400008 bnez v0,800214b4 <GameGetSelectedRunwayArray+0xac> +80021494: 24030002 li v1,2 + dir = RWY_DIR_WEST; + break; + case TILE_RWY_START_1 | TILE_MIRROR_FLAG: + dir = RWY_DIR_SOUTH; + case TILE_RWY_START_2 | TILE_MIRROR_FLAG: + dir = RWY_DIR_NORTH; +80021498: 3c028007 lui v0,0x8007 +8002149c: 10000005 b 800214b4 <GameGetSelectedRunwayArray+0xac> +800214a0: ac431c04 sw v1,7172(v0) + { + case TILE_RWY_START_1: + dir = RWY_DIR_EAST; + break; + case TILE_RWY_START_2: + dir = RWY_DIR_WEST; +800214a4: 24030001 li v1,1 +800214a8: 3c028007 lui v0,0x8007 + break; +800214ac: 10000025 b 80021544 <GameGetSelectedRunwayArray+0x13c> +800214b0: ac431c04 sw v1,7172(v0) + case RWY_DIR_SOUTH: + last_tile += GameLevelColumns; + } + + GameGetSelectedRunwayArray(0); +} +800214b4: 8fbf0024 lw ra,36(sp) +800214b8: 8fb40020 lw s4,32(sp) +800214bc: 8fb20018 lw s2,24(sp) +800214c0: 8fb10014 lw s1,20(sp) +800214c4: 8fb00010 lw s0,16(sp) + case TILE_RWY_START_1 | TILE_MIRROR_FLAG: + dir = RWY_DIR_SOUTH; + case TILE_RWY_START_2 | TILE_MIRROR_FLAG: + dir = RWY_DIR_NORTH; + default: + dprintf("Unknown direction for tile %d\n",rwyHeader); +800214c8: 02602821 move a1,s3 +800214cc: 3c048004 lui a0,0x8004 + case RWY_DIR_SOUTH: + last_tile += GameLevelColumns; + } + + GameGetSelectedRunwayArray(0); +} +800214d0: 8fb3001c lw s3,28(sp) + case TILE_RWY_START_1 | TILE_MIRROR_FLAG: + dir = RWY_DIR_SOUTH; + case TILE_RWY_START_2 | TILE_MIRROR_FLAG: + dir = RWY_DIR_NORTH; + default: + dprintf("Unknown direction for tile %d\n",rwyHeader); +800214d4: 2484023c addiu a0,a0,572 +800214d8: 0800ed8f j 8003b63c <printf> +800214dc: 27bd0028 addiu sp,sp,40 + break; + } + } + else + { + if( (GameLevelBuffer[last_tile] == TILE_RWY_START_1) +800214e0: 96231c0a lhu v1,7178(s1) +800214e4: 00000000 nop +800214e8: 02038021 addu s0,s0,v1 +800214ec: 92020000 lbu v0,0(s0) +800214f0: 00000000 nop +800214f4: 3042007f andi v0,v0,0x7f +800214f8: 2442fff7 addiu v0,v0,-9 +800214fc: 2c420002 sltiu v0,v0,2 +80021500: 10400010 beqz v0,80021544 <GameGetSelectedRunwayArray+0x13c> +80021504: 00000000 nop + (GameLevelBuffer[last_tile] == (TILE_RWY_START_1 | TILE_MIRROR_FLAG) ) + || + (GameLevelBuffer[last_tile] == (TILE_RWY_START_2 | TILE_MIRROR_FLAG) ) ) + { + // Runway end found + GameRwyArray[i++] = last_tile; +80021508: 92821c08 lbu v0,7176(s4) +8002150c: 26523744 addiu s2,s2,14148 +80021510: 24440001 addiu a0,v0,1 + case RWY_DIR_SOUTH: + last_tile += GameLevelColumns; + } + + GameGetSelectedRunwayArray(0); +} +80021514: 8fbf0024 lw ra,36(sp) + (GameLevelBuffer[last_tile] == (TILE_RWY_START_1 | TILE_MIRROR_FLAG) ) + || + (GameLevelBuffer[last_tile] == (TILE_RWY_START_2 | TILE_MIRROR_FLAG) ) ) + { + // Runway end found + GameRwyArray[i++] = last_tile; +80021518: 00021040 sll v0,v0,0x1 +8002151c: 00521021 addu v0,v0,s2 + case RWY_DIR_SOUTH: + last_tile += GameLevelColumns; + } + + GameGetSelectedRunwayArray(0); +} +80021520: 8fb3001c lw s3,28(sp) +80021524: 8fb20018 lw s2,24(sp) +80021528: 8fb10014 lw s1,20(sp) +8002152c: 8fb00010 lw s0,16(sp) + (GameLevelBuffer[last_tile] == (TILE_RWY_START_1 | TILE_MIRROR_FLAG) ) + || + (GameLevelBuffer[last_tile] == (TILE_RWY_START_2 | TILE_MIRROR_FLAG) ) ) + { + // Runway end found + GameRwyArray[i++] = last_tile; +80021530: a2841c08 sb a0,7176(s4) +80021534: a4430000 sh v1,0(v0) + case RWY_DIR_SOUTH: + last_tile += GameLevelColumns; + } + + GameGetSelectedRunwayArray(0); +} +80021538: 8fb40020 lw s4,32(sp) +8002153c: 03e00008 jr ra +80021540: 27bd0028 addiu sp,sp,40 + GameRwyArray[i++] = last_tile; + return; + } + } + + GameRwyArray[i++] = last_tile; +80021544: 92831c08 lbu v1,7176(s4) +80021548: 26523744 addiu s2,s2,14148 +8002154c: 24620001 addiu v0,v1,1 +80021550: a2821c08 sb v0,7176(s4) +80021554: 00031840 sll v1,v1,0x1 +80021558: 96221c0a lhu v0,7178(s1) +8002155c: 00721821 addu v1,v1,s2 +80021560: a4620000 sh v0,0(v1) + + switch(dir) +80021564: 3c038007 lui v1,0x8007 +80021568: 8c631c04 lw v1,7172(v1) +8002156c: 24050001 li a1,1 +80021570: 1065000c beq v1,a1,800215a4 <GameGetSelectedRunwayArray+0x19c> +80021574: 3c048007 lui a0,0x8007 +80021578: 10600008 beqz v1,8002159c <GameGetSelectedRunwayArray+0x194> +8002157c: 24420001 addiu v0,v0,1 +80021580: 24020002 li v0,2 +80021584: 10620009 beq v1,v0,800215ac <GameGetSelectedRunwayArray+0x1a4> +80021588: 24020003 li v0,3 +8002158c: 1062000e beq v1,v0,800215c8 <GameGetSelectedRunwayArray+0x1c0> +80021590: 3c028007 lui v0,0x8007 +80021594: 10000011 b 800215dc <GameGetSelectedRunwayArray+0x1d4> +80021598: 00000000 nop + { + case RWY_DIR_EAST: + last_tile++; + break; +8002159c: 1000000f b 800215dc <GameGetSelectedRunwayArray+0x1d4> +800215a0: a4821c0a sh v0,7178(a0) + case RWY_DIR_WEST: + last_tile--; +800215a4: 2442ffff addiu v0,v0,-1 +800215a8: a4821c0a sh v0,7178(a0) + case RWY_DIR_NORTH: + last_tile -= GameLevelColumns; +800215ac: 3c028007 lui v0,0x8007 +800215b0: 90431c12 lbu v1,7186(v0) +800215b4: 96221c0a lhu v0,7178(s1) +800215b8: 00000000 nop +800215bc: 00431023 subu v0,v0,v1 +800215c0: a6221c0a sh v0,7178(s1) + case RWY_DIR_SOUTH: + last_tile += GameLevelColumns; +800215c4: 3c028007 lui v0,0x8007 +800215c8: 96231c0a lhu v1,7178(s1) +800215cc: 90421c12 lbu v0,7186(v0) +800215d0: 00000000 nop +800215d4: 00431021 addu v0,v0,v1 +800215d8: a6221c0a sh v0,7178(s1) + } + + GameGetSelectedRunwayArray(0); +} +800215dc: 8fbf0024 lw ra,36(sp) +800215e0: 8fb40020 lw s4,32(sp) +800215e4: 8fb3001c lw s3,28(sp) +800215e8: 8fb20018 lw s2,24(sp) +800215ec: 8fb10014 lw s1,20(sp) +800215f0: 8fb00010 lw s0,16(sp) + last_tile -= GameLevelColumns; + case RWY_DIR_SOUTH: + last_tile += GameLevelColumns; + } + + GameGetSelectedRunwayArray(0); +800215f4: 00002021 move a0,zero +800215f8: 08008502 j 80021408 <GameGetSelectedRunwayArray> +800215fc: 27bd0028 addiu sp,sp,40 + +80021600 <GamePlayerAddWaypoint_Ex>: +void GamePlayerAddWaypoint_Ex(TYPE_PLAYER * ptrPlayer, uint16_t tile) +{ + // "_Ex" function allow selecting a certain tile, whereas the other one + // is a particulare case of "_Ex" for tile = ptrPlayer->SelectedTIle. + + if(ptrPlayer->WaypointIdx >= PLAYER_MAX_WAYPOINTS) +80021600: 90820074 lbu v0,116(a0) +80021604: 00000000 nop +80021608: 2c430020 sltiu v1,v0,32 +8002160c: 14600004 bnez v1,80021620 <GamePlayerAddWaypoint_Ex+0x20> +80021610: 24430001 addiu v1,v0,1 + { + dprintf("No available waypoints for this player!\n"); +80021614: 3c048004 lui a0,0x8004 +80021618: 0800ed8f j 8003b63c <printf> +8002161c: 2484025c addiu a0,a0,604 + + /*dprintf("Added tile %d to ptrPlayer->Waypoints[%d]\n", + tile, + ptrPlayer->WaypointIdx);*/ + + ptrPlayer->Waypoints[ptrPlayer->WaypointIdx++] = tile; +80021620: 24420018 addiu v0,v0,24 +80021624: 00021040 sll v0,v0,0x1 +80021628: 00821021 addu v0,a0,v0 +8002162c: a0830074 sb v1,116(a0) +80021630: 03e00008 jr ra +80021634: a4450004 sh a1,4(v0) + +80021638 <GameSelectAircraft>: + + return true; +} + +void GameSelectAircraft(TYPE_PLAYER * ptrPlayer) +{ +80021638: 27bdffe0 addiu sp,sp,-32 +8002163c: afbf001c sw ra,28(sp) +80021640: afb00018 sw s0,24(sp) + TYPE_ISOMETRIC_POS IsoPos = AircraftGetIsoPos(ptrPlayer->SelectedAircraft); +80021644: 9085002e lbu a1,46(a0) + + return true; +} + +void GameSelectAircraft(TYPE_PLAYER * ptrPlayer) +{ +80021648: 00808021 move s0,a0 + TYPE_ISOMETRIC_POS IsoPos = AircraftGetIsoPos(ptrPlayer->SelectedAircraft); +8002164c: 0c008227 jal 8002089c <AircraftGetIsoPos> +80021650: 27a40010 addiu a0,sp,16 + + CameraMoveToIsoPos(ptrPlayer, IsoPos); +80021654: 8fa50010 lw a1,16(sp) +80021658: 8fa60014 lw a2,20(sp) +8002165c: 0c00832b jal 80020cac <CameraMoveToIsoPos> +80021660: 02002021 move a0,s0 + + ptrPlayer->SelectedTile = GameGetTileFromIsoPosition(&IsoPos); +80021664: 0c0084f0 jal 800213c0 <GameGetTileFromIsoPosition> +80021668: 27a40010 addiu a0,sp,16 +8002166c: a6020032 sh v0,50(s0) + return GameLevelColumns; +} + +void GamePlayerAddWaypoint(TYPE_PLAYER * ptrPlayer) +{ + GamePlayerAddWaypoint_Ex(ptrPlayer, ptrPlayer->SelectedTile); +80021670: 02002021 move a0,s0 +80021674: 0c008580 jal 80021600 <GamePlayerAddWaypoint_Ex> +80021678: 00402821 move a1,v0 + CameraMoveToIsoPos(ptrPlayer, IsoPos); + + ptrPlayer->SelectedTile = GameGetTileFromIsoPosition(&IsoPos); + + GamePlayerAddWaypoint(ptrPlayer); +} +8002167c: 8fbf001c lw ra,28(sp) +80021680: 8fb00018 lw s0,24(sp) +80021684: 03e00008 jr ra +80021688: 27bd0020 addiu sp,sp,32 + +8002168c <GamePathToTile>: + + ptrPlayer->Waypoints[ptrPlayer->WaypointIdx++] = tile; +} + +bool GamePathToTile(TYPE_PLAYER * ptrPlayer) +{ +8002168c: 27bdffc0 addiu sp,sp,-64 + // Given an input TYPE_PLAYER structure and a selected tile, + // it updates current Waypoints array with all tiles between two points. + // If one of these tiles do not belong to desired tiles (i.e.: grass, + // water, buildings...), then false is returned. + + uint8_t AcceptedTiles[] = { TILE_ASPHALT, TILE_ASPHALT_WITH_BORDERS, +80021690: 3c058004 lui a1,0x8004 +80021694: 2406000b li a2,11 + + ptrPlayer->Waypoints[ptrPlayer->WaypointIdx++] = tile; +} + +bool GamePathToTile(TYPE_PLAYER * ptrPlayer) +{ +80021698: afb10024 sw s1,36(sp) + // Given an input TYPE_PLAYER structure and a selected tile, + // it updates current Waypoints array with all tiles between two points. + // If one of these tiles do not belong to desired tiles (i.e.: grass, + // water, buildings...), then false is returned. + + uint8_t AcceptedTiles[] = { TILE_ASPHALT, TILE_ASPHALT_WITH_BORDERS, +8002169c: 24a5f784 addiu a1,a1,-2172 + + ptrPlayer->Waypoints[ptrPlayer->WaypointIdx++] = tile; +} + +bool GamePathToTile(TYPE_PLAYER * ptrPlayer) +{ +800216a0: 00808821 move s1,a0 + // Given an input TYPE_PLAYER structure and a selected tile, + // it updates current Waypoints array with all tiles between two points. + // If one of these tiles do not belong to desired tiles (i.e.: grass, + // water, buildings...), then false is returned. + + uint8_t AcceptedTiles[] = { TILE_ASPHALT, TILE_ASPHALT_WITH_BORDERS, +800216a4: 27a40010 addiu a0,sp,16 + + ptrPlayer->Waypoints[ptrPlayer->WaypointIdx++] = tile; +} + +bool GamePathToTile(TYPE_PLAYER * ptrPlayer) +{ +800216a8: afbf003c sw ra,60(sp) +800216ac: afb60038 sw s6,56(sp) +800216b0: afb50034 sw s5,52(sp) +800216b4: afb40030 sw s4,48(sp) +800216b8: afb3002c sw s3,44(sp) +800216bc: afb20028 sw s2,40(sp) + // Given an input TYPE_PLAYER structure and a selected tile, + // it updates current Waypoints array with all tiles between two points. + // If one of these tiles do not belong to desired tiles (i.e.: grass, + // water, buildings...), then false is returned. + + uint8_t AcceptedTiles[] = { TILE_ASPHALT, TILE_ASPHALT_WITH_BORDERS, +800216c0: 0c00d75e jal 80035d78 <memcpy> +800216c4: afb00020 sw s0,32(sp) + + uint16_t x_diff; + uint16_t y_diff; + uint16_t temp_tile; + + if(ptrPlayer->SelectedTile == GAME_INVALID_TILE_SELECTION) +800216c8: 96240032 lhu a0,50(s1) +800216cc: 3402ffff li v0,0xffff +800216d0: 10820105 beq a0,v0,80021ae8 <GamePathToTile+0x45c> +800216d4: 00001021 move v0,zero + { + return false; + } + + for(i = (ptrPlayer->LastWaypointIdx + 1); i < PLAYER_MAX_WAYPOINTS; i++) +800216d8: 92220075 lbu v0,117(s1) +800216dc: 00000000 nop +800216e0: 24460001 addiu a2,v0,1 +800216e4: 30c600ff andi a2,a2,0xff +800216e8: 00c01821 move v1,a2 +800216ec: 2c650020 sltiu a1,v1,32 +800216f0: 10a00007 beqz a1,80021710 <GamePathToTile+0x84> +800216f4: 24650018 addiu a1,v1,24 + { + ptrPlayer->Waypoints[i] = 0; +800216f8: 00052840 sll a1,a1,0x1 +800216fc: 02252821 addu a1,s1,a1 + if(ptrPlayer->SelectedTile == GAME_INVALID_TILE_SELECTION) + { + return false; + } + + for(i = (ptrPlayer->LastWaypointIdx + 1); i < PLAYER_MAX_WAYPOINTS; i++) +80021700: 24630001 addiu v1,v1,1 + { + ptrPlayer->Waypoints[i] = 0; +80021704: a4a00004 sh zero,4(a1) + if(ptrPlayer->SelectedTile == GAME_INVALID_TILE_SELECTION) + { + return false; + } + + for(i = (ptrPlayer->LastWaypointIdx + 1); i < PLAYER_MAX_WAYPOINTS; i++) +80021708: 1000fff8 b 800216ec <GamePathToTile+0x60> +8002170c: 306300ff andi v1,v1,0xff + ptrPlayer->Waypoints[i] = 0; + } + + ptrPlayer->WaypointIdx = ptrPlayer->LastWaypointIdx + 1; + + x_diff = (uint16_t)abs( (ptrPlayer->SelectedTile % GameLevelColumns) - +80021710: 3c158007 lui s5,0x8007 +80021714: 92a31c12 lbu v1,7186(s5) + (ptrPlayer->Waypoints[ptrPlayer->LastWaypointIdx] % GameLevelColumns) ); +80021718: 24420018 addiu v0,v0,24 + ptrPlayer->Waypoints[i] = 0; + } + + ptrPlayer->WaypointIdx = ptrPlayer->LastWaypointIdx + 1; + + x_diff = (uint16_t)abs( (ptrPlayer->SelectedTile % GameLevelColumns) - +8002171c: 14600002 bnez v1,80021728 <GamePathToTile+0x9c> +80021720: 0083001a div zero,a0,v1 +80021724: 0007000d break 0x7 + (ptrPlayer->Waypoints[ptrPlayer->LastWaypointIdx] % GameLevelColumns) ); +80021728: 00021040 sll v0,v0,0x1 + for(i = (ptrPlayer->LastWaypointIdx + 1); i < PLAYER_MAX_WAYPOINTS; i++) + { + ptrPlayer->Waypoints[i] = 0; + } + + ptrPlayer->WaypointIdx = ptrPlayer->LastWaypointIdx + 1; +8002172c: a2260074 sb a2,116(s1) + + x_diff = (uint16_t)abs( (ptrPlayer->SelectedTile % GameLevelColumns) - + (ptrPlayer->Waypoints[ptrPlayer->LastWaypointIdx] % GameLevelColumns) ); +80021730: 02221021 addu v0,s1,v0 + ptrPlayer->Waypoints[i] = 0; + } + + ptrPlayer->WaypointIdx = ptrPlayer->LastWaypointIdx + 1; + + x_diff = (uint16_t)abs( (ptrPlayer->SelectedTile % GameLevelColumns) - +80021734: 94420004 lhu v0,4(v0) +80021738: 26340034 addiu s4,s1,52 +8002173c: 00002010 mfhi a0 + ... +80021748: 14600002 bnez v1,80021754 <GamePathToTile+0xc8> +8002174c: 0043001a div zero,v0,v1 +80021750: 0007000d break 0x7 +80021754: 00001010 mfhi v0 +80021758: 0c00d588 jal 80035620 <abs> +8002175c: 00822023 subu a0,a0,v0 + (ptrPlayer->Waypoints[ptrPlayer->LastWaypointIdx] % GameLevelColumns) ); + + y_diff = (uint16_t)abs( (ptrPlayer->SelectedTile / GameLevelColumns) - +80021760: 92a31c12 lbu v1,7186(s5) +80021764: 96240032 lhu a0,50(s1) + ptrPlayer->Waypoints[i] = 0; + } + + ptrPlayer->WaypointIdx = ptrPlayer->LastWaypointIdx + 1; + + x_diff = (uint16_t)abs( (ptrPlayer->SelectedTile % GameLevelColumns) - +80021768: 3052ffff andi s2,v0,0xffff + (ptrPlayer->Waypoints[ptrPlayer->LastWaypointIdx] % GameLevelColumns) ); + + y_diff = (uint16_t)abs( (ptrPlayer->SelectedTile / GameLevelColumns) - +8002176c: 14600002 bnez v1,80021778 <GamePathToTile+0xec> +80021770: 0083001a div zero,a0,v1 +80021774: 0007000d break 0x7 + (ptrPlayer->Waypoints[ptrPlayer->LastWaypointIdx] / GameLevelColumns) ); +80021778: 92220075 lbu v0,117(s1) +8002177c: 00000000 nop +80021780: 24420018 addiu v0,v0,24 +80021784: 00021040 sll v0,v0,0x1 +80021788: 02221021 addu v0,s1,v0 + ptrPlayer->WaypointIdx = ptrPlayer->LastWaypointIdx + 1; + + x_diff = (uint16_t)abs( (ptrPlayer->SelectedTile % GameLevelColumns) - + (ptrPlayer->Waypoints[ptrPlayer->LastWaypointIdx] % GameLevelColumns) ); + + y_diff = (uint16_t)abs( (ptrPlayer->SelectedTile / GameLevelColumns) - +8002178c: 94420004 lhu v0,4(v0) +80021790: 00002012 mflo a0 + ... +8002179c: 14600002 bnez v1,800217a8 <GamePathToTile+0x11c> +800217a0: 0043001a div zero,v0,v1 +800217a4: 0007000d break 0x7 +800217a8: 00001812 mflo v1 +800217ac: 0c00d588 jal 80035620 <abs> +800217b0: 00832023 subu a0,a0,v1 +800217b4: 3053ffff andi s3,v0,0xffff + + // At this point, we have to update current waypoints list. + // ptrPlayer->Waypoints[ptrPlayer->WaypointIdx - 1] points to the last inserted point, + // so now we have to determine how many points need to be created. + + temp_tile = ptrPlayer->Waypoints[ptrPlayer->LastWaypointIdx]; +800217b8: 92220075 lbu v0,117(s1) +800217bc: 00000000 nop +800217c0: 24420018 addiu v0,v0,24 +800217c4: 00021040 sll v0,v0,0x1 +800217c8: 02221021 addu v0,s1,v0 +800217cc: 94500004 lhu s0,4(v0) + + if(x_diff >= y_diff) +800217d0: 0253102b sltu v0,s2,s3 +800217d4: 1440004e bnez v0,80021910 <GamePathToTile+0x284> +800217d8: 00000000 nop + { + while( (x_diff--) > 0) +800217dc: 12400046 beqz s2,800218f8 <GamePathToTile+0x26c> +800217e0: 00000000 nop + { + if( (ptrPlayer->SelectedTile % GameLevelColumns) > +800217e4: 92a31c12 lbu v1,7186(s5) +800217e8: 96240032 lhu a0,50(s1) + (ptrPlayer->Waypoints[ptrPlayer->LastWaypointIdx] % GameLevelColumns) ) +800217ec: 92220075 lbu v0,117(s1) + + if(x_diff >= y_diff) + { + while( (x_diff--) > 0) + { + if( (ptrPlayer->SelectedTile % GameLevelColumns) > +800217f0: 14600002 bnez v1,800217fc <GamePathToTile+0x170> +800217f4: 0083001a div zero,a0,v1 +800217f8: 0007000d break 0x7 + (ptrPlayer->Waypoints[ptrPlayer->LastWaypointIdx] % GameLevelColumns) ) +800217fc: 24420018 addiu v0,v0,24 +80021800: 00021040 sll v0,v0,0x1 +80021804: 02221021 addu v0,s1,v0 + + if(x_diff >= y_diff) + { + while( (x_diff--) > 0) + { + if( (ptrPlayer->SelectedTile % GameLevelColumns) > +80021808: 94420004 lhu v0,4(v0) +8002180c: 00002010 mfhi a0 + ... +80021818: 14600002 bnez v1,80021824 <GamePathToTile+0x198> +8002181c: 0043001a div zero,v0,v1 +80021820: 0007000d break 0x7 +80021824: 00001010 mfhi v0 +80021828: 0044182a slt v1,v0,a0 +8002182c: 10600003 beqz v1,8002183c <GamePathToTile+0x1b0> +80021830: 00000000 nop + (ptrPlayer->Waypoints[ptrPlayer->LastWaypointIdx] % GameLevelColumns) ) + { + temp_tile++; +80021834: 10000002 b 80021840 <GamePathToTile+0x1b4> +80021838: 26100001 addiu s0,s0,1 + } + else + { + temp_tile--; +8002183c: 2610ffff addiu s0,s0,-1 +80021840: 3210ffff andi s0,s0,0xffff + } + + if(SystemContains_u16(temp_tile, ptrPlayer->Waypoints, PLAYER_MAX_WAYPOINTS) == false) +80021844: 24060020 li a2,32 +80021848: 02802821 move a1,s4 +8002184c: 0c00a067 jal 8002819c <SystemContains_u16> +80021850: 02002021 move a0,s0 +80021854: 14400003 bnez v0,80021864 <GamePathToTile+0x1d8> +80021858: 02002821 move a1,s0 + { + GamePlayerAddWaypoint_Ex(ptrPlayer, temp_tile); +8002185c: 0c008580 jal 80021600 <GamePlayerAddWaypoint_Ex> +80021860: 02202021 move a0,s1 +80021864: 2652ffff addiu s2,s2,-1 +80021868: 1000ffdc b 800217dc <GamePathToTile+0x150> +8002186c: 3252ffff andi s2,s2,0xffff + } + } + + while( (y_diff--) > 0) + { + if( (ptrPlayer->SelectedTile / GameLevelColumns) > +80021870: 92a21c12 lbu v0,7186(s5) +80021874: 96230032 lhu v1,50(s1) +80021878: 00000000 nop +8002187c: 14400002 bnez v0,80021888 <GamePathToTile+0x1fc> +80021880: 0062001a div zero,v1,v0 +80021884: 0007000d break 0x7 + (ptrPlayer->Waypoints[ptrPlayer->LastWaypointIdx] / GameLevelColumns) ) +80021888: 92230075 lbu v1,117(s1) +8002188c: 00000000 nop +80021890: 24630018 addiu v1,v1,24 +80021894: 00031840 sll v1,v1,0x1 +80021898: 02231821 addu v1,s1,v1 + } + } + + while( (y_diff--) > 0) + { + if( (ptrPlayer->SelectedTile / GameLevelColumns) > +8002189c: 94630004 lhu v1,4(v1) +800218a0: 00002012 mflo a0 + ... +800218ac: 14400002 bnez v0,800218b8 <GamePathToTile+0x22c> +800218b0: 0062001a div zero,v1,v0 +800218b4: 0007000d break 0x7 +800218b8: 00001812 mflo v1 +800218bc: 0064182a slt v1,v1,a0 +800218c0: 10600011 beqz v1,80021908 <GamePathToTile+0x27c> +800218c4: 00000000 nop + (ptrPlayer->Waypoints[ptrPlayer->LastWaypointIdx] / GameLevelColumns) ) + { + temp_tile += GameLevelColumns; +800218c8: 02028021 addu s0,s0,v0 + } + else + { + temp_tile -= GameLevelColumns; +800218cc: 3210ffff andi s0,s0,0xffff + } + + if(SystemContains_u16(temp_tile, ptrPlayer->Waypoints, PLAYER_MAX_WAYPOINTS) == false) +800218d0: 24060020 li a2,32 +800218d4: 02802821 move a1,s4 +800218d8: 0c00a067 jal 8002819c <SystemContains_u16> +800218dc: 02002021 move a0,s0 +800218e0: 14400003 bnez v0,800218f0 <GamePathToTile+0x264> +800218e4: 02002821 move a1,s0 + { + GamePlayerAddWaypoint_Ex(ptrPlayer, temp_tile); +800218e8: 0c008580 jal 80021600 <GamePlayerAddWaypoint_Ex> +800218ec: 02202021 move a0,s1 +800218f0: 2673ffff addiu s3,s3,-1 +800218f4: 3273ffff andi s3,s3,0xffff + { + GamePlayerAddWaypoint_Ex(ptrPlayer, temp_tile); + } + } + + while( (y_diff--) > 0) +800218f8: 1660ffdd bnez s3,80021870 <GamePathToTile+0x1e4> +800218fc: 3c128004 lui s2,0x8004 +80021900: 1000002b b 800219b0 <GamePathToTile+0x324> +80021904: 26523324 addiu s2,s2,13092 + { + temp_tile += GameLevelColumns; + } + else + { + temp_tile -= GameLevelColumns; +80021908: 1000fff0 b 800218cc <GamePathToTile+0x240> +8002190c: 02028023 subu s0,s0,v0 + } + else + { + while( (y_diff--) > 0) + { + if( (ptrPlayer->SelectedTile / GameLevelColumns) > +80021910: 92a21c12 lbu v0,7186(s5) +80021914: 96230032 lhu v1,50(s1) +80021918: 00000000 nop +8002191c: 14400002 bnez v0,80021928 <GamePathToTile+0x29c> +80021920: 0062001a div zero,v1,v0 +80021924: 0007000d break 0x7 + (ptrPlayer->Waypoints[ptrPlayer->LastWaypointIdx] / GameLevelColumns) ) +80021928: 92230075 lbu v1,117(s1) +8002192c: 00000000 nop +80021930: 24630018 addiu v1,v1,24 +80021934: 00031840 sll v1,v1,0x1 +80021938: 02231821 addu v1,s1,v1 + } + else + { + while( (y_diff--) > 0) + { + if( (ptrPlayer->SelectedTile / GameLevelColumns) > +8002193c: 94630004 lhu v1,4(v1) +80021940: 00002012 mflo a0 + ... +8002194c: 14400002 bnez v0,80021958 <GamePathToTile+0x2cc> +80021950: 0062001a div zero,v1,v0 +80021954: 0007000d break 0x7 +80021958: 00001812 mflo v1 +8002195c: 0064182a slt v1,v1,a0 +80021960: 10600018 beqz v1,800219c4 <GamePathToTile+0x338> +80021964: 00000000 nop + (ptrPlayer->Waypoints[ptrPlayer->LastWaypointIdx] / GameLevelColumns) ) + { + temp_tile += GameLevelColumns; +80021968: 02028021 addu s0,s0,v0 + } + else + { + temp_tile -= GameLevelColumns; +8002196c: 3210ffff andi s0,s0,0xffff + } + + if(SystemContains_u16(temp_tile, ptrPlayer->Waypoints, PLAYER_MAX_WAYPOINTS) == false) +80021970: 24060020 li a2,32 +80021974: 02802821 move a1,s4 +80021978: 0c00a067 jal 8002819c <SystemContains_u16> +8002197c: 02002021 move a0,s0 +80021980: 14400003 bnez v0,80021990 <GamePathToTile+0x304> +80021984: 02002821 move a1,s0 + { + GamePlayerAddWaypoint_Ex(ptrPlayer, temp_tile); +80021988: 0c008580 jal 80021600 <GamePlayerAddWaypoint_Ex> +8002198c: 02202021 move a0,s1 +80021990: 2673ffff addiu s3,s3,-1 +80021994: 3273ffff andi s3,s3,0xffff + } + } + } + else + { + while( (y_diff--) > 0) +80021998: 1660ffdd bnez s3,80021910 <GamePathToTile+0x284> +8002199c: 00000000 nop + { + GamePlayerAddWaypoint_Ex(ptrPlayer, temp_tile); + } + } + + while( (x_diff--) > 0) +800219a0: 1640000a bnez s2,800219cc <GamePathToTile+0x340> +800219a4: 00000000 nop + { + // We have found empty waypoints. Exit loop + break; + } + + if(SystemContains_u8( GameLevelBuffer[ptrPlayer->Waypoints[i]], +800219a8: 3c128004 lui s2,0x8004 +800219ac: 26523324 addiu s2,s2,13092 +800219b0: 26310074 addiu s1,s1,116 +800219b4: 0240a821 move s5,s2 +800219b8: 27b3001b addiu s3,sp,27 + { + // Now try again with mirrored tiles, just in case! + + for(j = 0; j < (sizeof(AcceptedTiles) * sizeof(uint8_t) ); j++) + { + AcceptedTiles[j] |= TILE_MIRROR_FLAG; +800219bc: 1000002f b 80021a7c <GamePathToTile+0x3f0> +800219c0: 2416ff80 li s6,-128 + { + temp_tile += GameLevelColumns; + } + else + { + temp_tile -= GameLevelColumns; +800219c4: 1000ffe9 b 8002196c <GamePathToTile+0x2e0> +800219c8: 02028023 subu s0,s0,v0 + } + } + + while( (x_diff--) > 0) + { + if( (ptrPlayer->SelectedTile % GameLevelColumns) > +800219cc: 92a31c12 lbu v1,7186(s5) +800219d0: 96240032 lhu a0,50(s1) + (ptrPlayer->Waypoints[ptrPlayer->LastWaypointIdx] % GameLevelColumns) ) +800219d4: 92220075 lbu v0,117(s1) + } + } + + while( (x_diff--) > 0) + { + if( (ptrPlayer->SelectedTile % GameLevelColumns) > +800219d8: 14600002 bnez v1,800219e4 <GamePathToTile+0x358> +800219dc: 0083001a div zero,a0,v1 +800219e0: 0007000d break 0x7 + (ptrPlayer->Waypoints[ptrPlayer->LastWaypointIdx] % GameLevelColumns) ) +800219e4: 24420018 addiu v0,v0,24 +800219e8: 00021040 sll v0,v0,0x1 +800219ec: 02221021 addu v0,s1,v0 + } + } + + while( (x_diff--) > 0) + { + if( (ptrPlayer->SelectedTile % GameLevelColumns) > +800219f0: 94420004 lhu v0,4(v0) +800219f4: 00002010 mfhi a0 + ... +80021a00: 14600002 bnez v1,80021a0c <GamePathToTile+0x380> +80021a04: 0043001a div zero,v0,v1 +80021a08: 0007000d break 0x7 +80021a0c: 00001010 mfhi v0 +80021a10: 0044182a slt v1,v0,a0 +80021a14: 10600003 beqz v1,80021a24 <GamePathToTile+0x398> +80021a18: 00000000 nop + (ptrPlayer->Waypoints[ptrPlayer->LastWaypointIdx] % GameLevelColumns) ) + { + temp_tile++; +80021a1c: 10000002 b 80021a28 <GamePathToTile+0x39c> +80021a20: 26100001 addiu s0,s0,1 + } + else + { + temp_tile--; +80021a24: 2610ffff addiu s0,s0,-1 +80021a28: 3210ffff andi s0,s0,0xffff + } + + if(SystemContains_u16(temp_tile, ptrPlayer->Waypoints, PLAYER_MAX_WAYPOINTS) == false) +80021a2c: 24060020 li a2,32 +80021a30: 02802821 move a1,s4 +80021a34: 0c00a067 jal 8002819c <SystemContains_u16> +80021a38: 02002021 move a0,s0 +80021a3c: 14400003 bnez v0,80021a4c <GamePathToTile+0x3c0> +80021a40: 02002821 move a1,s0 + { + GamePlayerAddWaypoint_Ex(ptrPlayer, temp_tile); +80021a44: 0c008580 jal 80021600 <GamePlayerAddWaypoint_Ex> +80021a48: 02202021 move a0,s1 +80021a4c: 2652ffff addiu s2,s2,-1 +80021a50: 1000ffd3 b 800219a0 <GamePathToTile+0x314> +80021a54: 3252ffff andi s2,s2,0xffff + { + // We have found empty waypoints. Exit loop + break; + } + + if(SystemContains_u8( GameLevelBuffer[ptrPlayer->Waypoints[i]], +80021a58: 00521021 addu v0,v0,s2 +80021a5c: 90440000 lbu a0,0(v0) +80021a60: 0c00a05b jal 8002816c <SystemContains_u8> +80021a64: 27a50010 addiu a1,sp,16 +80021a68: 1040000a beqz v0,80021a94 <GamePathToTile+0x408> +80021a6c: 27b00010 addiu s0,sp,16 +80021a70: 26940002 addiu s4,s4,2 + } + } + + // Now at this point, we have prepared our array. + + for(i = 0; i < PLAYER_MAX_WAYPOINTS; i++) +80021a74: 1291001c beq s4,s1,80021ae8 <GamePathToTile+0x45c> +80021a78: 24020001 li v0,1 + { + if(ptrPlayer->Waypoints[i] == 0) +80021a7c: 96820000 lhu v0,0(s4) +80021a80: 00000000 nop +80021a84: 1440fff4 bnez v0,80021a58 <GamePathToTile+0x3cc> +80021a88: 2406000b li a2,11 + AcceptedTiles[j] &= ~(TILE_MIRROR_FLAG); + } + } + } + + return true; +80021a8c: 10000016 b 80021ae8 <GamePathToTile+0x45c> +80021a90: 24020001 li v0,1 + { + // We have found empty waypoints. Exit loop + break; + } + + if(SystemContains_u8( GameLevelBuffer[ptrPlayer->Waypoints[i]], +80021a94: 02001021 move v0,s0 + { + // Now try again with mirrored tiles, just in case! + + for(j = 0; j < (sizeof(AcceptedTiles) * sizeof(uint8_t) ); j++) + { + AcceptedTiles[j] |= TILE_MIRROR_FLAG; +80021a98: 90430000 lbu v1,0(v0) +80021a9c: 24420001 addiu v0,v0,1 +80021aa0: 00761825 or v1,v1,s6 + AcceptedTiles, + sizeof(AcceptedTiles) ) == false) + { + // Now try again with mirrored tiles, just in case! + + for(j = 0; j < (sizeof(AcceptedTiles) * sizeof(uint8_t) ); j++) +80021aa4: 1453fffc bne v0,s3,80021a98 <GamePathToTile+0x40c> +80021aa8: a043ffff sb v1,-1(v0) + { + AcceptedTiles[j] |= TILE_MIRROR_FLAG; + } + + if(SystemContains_u8( GameLevelBuffer[ptrPlayer->Waypoints[i]], +80021aac: 96820000 lhu v0,0(s4) +80021ab0: 2406000b li a2,11 +80021ab4: 02a21021 addu v0,s5,v0 +80021ab8: 90440000 lbu a0,0(v0) +80021abc: 0c00a05b jal 8002816c <SystemContains_u8> +80021ac0: 27a50010 addiu a1,sp,16 +80021ac4: 10400008 beqz v0,80021ae8 <GamePathToTile+0x45c> +80021ac8: 00001021 move v0,zero + + // Reverse mirror flag. + + for(j = 0; j < (sizeof(AcceptedTiles) * sizeof(uint8_t) ); j++) + { + AcceptedTiles[j] &= ~(TILE_MIRROR_FLAG); +80021acc: 92020000 lbu v0,0(s0) +80021ad0: 26100001 addiu s0,s0,1 +80021ad4: 3042007f andi v0,v0,0x7f + return false; + } + + // Reverse mirror flag. + + for(j = 0; j < (sizeof(AcceptedTiles) * sizeof(uint8_t) ); j++) +80021ad8: 1613fffc bne s0,s3,80021acc <GamePathToTile+0x440> +80021adc: a202ffff sb v0,-1(s0) +80021ae0: 1000ffe4 b 80021a74 <GamePathToTile+0x3e8> +80021ae4: 26940002 addiu s4,s4,2 + } + } + } + + return true; +} +80021ae8: 8fbf003c lw ra,60(sp) +80021aec: 8fb60038 lw s6,56(sp) +80021af0: 8fb50034 lw s5,52(sp) +80021af4: 8fb40030 lw s4,48(sp) +80021af8: 8fb3002c lw s3,44(sp) +80021afc: 8fb20028 lw s2,40(sp) +80021b00: 8fb10024 lw s1,36(sp) +80021b04: 8fb00020 lw s0,32(sp) +80021b08: 03e00008 jr ra +80021b0c: 27bd0040 addiu sp,sp,64 + +80021b10 <Game>: +static uint8_t firstActiveAircraft; +//Index for last non-idle aircraft on list +static uint8_t lastActiveAircraft; + +void Game(bool two_players) +{ +80021b10: 27bdff28 addiu sp,sp,-216 +80021b14: afb100b4 sw s1,180(sp) + TwoPlayersActive = two_players; +80021b18: 3c118007 lui s1,0x8007 +80021b1c: a2241c0e sb a0,7182(s1) + uint8_t i; + uint32_t track; + + GameStartupFlag = true; + + LoadMenu( GameFileList, +80021b20: 3c058004 lui a1,0x8004 +80021b24: 3c048004 lui a0,0x8004 +void GameInit(void) +{ + uint8_t i; + uint32_t track; + + GameStartupFlag = true; +80021b28: 24020001 li v0,1 +static uint8_t firstActiveAircraft; +//Index for last non-idle aircraft on list +static uint8_t lastActiveAircraft; + +void Game(bool two_players) +{ +80021b2c: afb000b0 sw s0,176(sp) + uint8_t i; + uint32_t track; + + GameStartupFlag = true; + + LoadMenu( GameFileList, +80021b30: 24070006 li a3,6 +void GameInit(void) +{ + uint8_t i; + uint32_t track; + + GameStartupFlag = true; +80021b34: 3c108007 lui s0,0x8007 + + LoadMenu( GameFileList, +80021b38: 24060006 li a2,6 +80021b3c: 24a51418 addiu a1,a1,5144 +80021b40: 24841430 addiu a0,a0,5168 +static uint8_t firstActiveAircraft; +//Index for last non-idle aircraft on list +static uint8_t lastActiveAircraft; + +void Game(bool two_players) +{ +80021b44: afbf00d4 sw ra,212(sp) +void GameInit(void) +{ + uint8_t i; + uint32_t track; + + GameStartupFlag = true; +80021b48: a2021d24 sb v0,7460(s0) +static uint8_t firstActiveAircraft; +//Index for last non-idle aircraft on list +static uint8_t lastActiveAircraft; + +void Game(bool two_players) +{ +80021b4c: afbe00d0 sw s8,208(sp) +80021b50: afb700cc sw s7,204(sp) +80021b54: afb600c8 sw s6,200(sp) +80021b58: afb500c4 sw s5,196(sp) +80021b5c: afb400c0 sw s4,192(sp) +80021b60: afb300bc sw s3,188(sp) + uint8_t i; + uint32_t track; + + GameStartupFlag = true; + + LoadMenu( GameFileList, +80021b64: 0c0093c1 jal 80024f04 <LoadMenu> +80021b68: afb200b8 sw s2,184(sp) + /* TODO - Very important */ + // Map contents (that means, without header) should be copied to GameLevelBuffer + // Header treatment (magic number, map size, map title...) should be done + // using System's file buffer. + + if(SystemLoadFile(GameLevelList[0]) == false) +80021b6c: 3c048004 lui a0,0x8004 +80021b70: 0c00a022 jal 80028088 <SystemLoadFile> +80021b74: 24840288 addiu a0,a0,648 +80021b78: 10400046 beqz v0,80021c94 <Game+0x184> +80021b7c: afb00094 sw s0,148(sp) + { + return; + } + + ptrBuffer = SystemGetBufferAddress(); +80021b80: 0c00a027 jal 8002809c <SystemGetBufferAddress> +80021b84: 00000000 nop +80021b88: 00408021 move s0,v0 + + //SystemLoadFileToBuffer(GameLevelList[0],GameLevelBuffer,GAME_MAX_MAP_SIZE); + + memset(LevelHeader,0, LEVEL_MAGIC_NUMBER_SIZE + 1); +80021b8c: 24060004 li a2,4 +80021b90: 00002821 move a1,zero +80021b94: 0c00d7ab jal 80035eac <memset> +80021b98: 27a40010 addiu a0,sp,16 + + memcpy(LevelHeader,ptrBuffer,LEVEL_MAGIC_NUMBER_SIZE); +80021b9c: 24060003 li a2,3 +80021ba0: 02002821 move a1,s0 +80021ba4: 0c00d75e jal 80035d78 <memcpy> +80021ba8: 27a40010 addiu a0,sp,16 + + LevelHeader[LEVEL_MAGIC_NUMBER_SIZE] = '\0'; + + dprintf("Level header: %s\n",LevelHeader); +80021bac: 3c048004 lui a0,0x8004 +80021bb0: 27a50010 addiu a1,sp,16 +80021bb4: 248402a8 addiu a0,a0,680 +80021bb8: 0c00ed8f jal 8003b63c <printf> +80021bbc: a3a00013 sb zero,19(sp) + + if(strncmp(LevelHeader,LEVEL_MAGIC_NUMBER_STRING,LEVEL_MAGIC_NUMBER_SIZE) != 0) +80021bc0: 3c058004 lui a1,0x8004 +80021bc4: 24060003 li a2,3 +80021bc8: 24a502bc addiu a1,a1,700 +80021bcc: 0c00d9dd jal 80036774 <strncmp> +80021bd0: 27a40010 addiu a0,sp,16 +80021bd4: 10400004 beqz v0,80021be8 <Game+0xd8> +80021bd8: 3c048004 lui a0,0x8004 + { + dprintf("Invalid level header! Read \"%s\" instead of \"ATC\"\n",LevelHeader); +80021bdc: 27a50010 addiu a1,sp,16 +80021be0: 1000000f b 80021c20 <Game+0x110> +80021be4: 248402c0 addiu a0,a0,704 + return; + } + + i += LEVEL_MAGIC_NUMBER_SIZE; + + GameLevelColumns = ptrBuffer[i++]; +80021be8: 92050003 lbu a1,3(s0) + + dprintf("Level size: %d\n",GameLevelColumns); +80021bec: 3c048004 lui a0,0x8004 + return; + } + + i += LEVEL_MAGIC_NUMBER_SIZE; + + GameLevelColumns = ptrBuffer[i++]; +80021bf0: 3c128007 lui s2,0x8007 + + dprintf("Level size: %d\n",GameLevelColumns); +80021bf4: 248402f4 addiu a0,a0,756 +80021bf8: 0c00ed8f jal 8003b63c <printf> +80021bfc: a2451c12 sb a1,7186(s2) + + if( (GameLevelColumns < MIN_MAP_COLUMNS) + || +80021c00: 92451c12 lbu a1,7186(s2) +80021c04: 00000000 nop + + GameLevelColumns = ptrBuffer[i++]; + + dprintf("Level size: %d\n",GameLevelColumns); + + if( (GameLevelColumns < MIN_MAP_COLUMNS) +80021c08: 24a2fff8 addiu v0,a1,-8 +80021c0c: 2c420019 sltiu v0,v0,25 +80021c10: 14400007 bnez v0,80021c30 <Game+0x120> +80021c14: 00a50018 mult a1,a1 + || + (GameLevelColumns > MAX_MAP_COLUMNS) ) + { + dprintf("Invalid map size! Value: %d\n",GameLevelColumns); +80021c18: 3c048004 lui a0,0x8004 +80021c1c: 24840304 addiu a0,a0,772 +80021c20: 0c00ed8f jal 8003b63c <printf> +80021c24: 3c128004 lui s2,0x8004 +80021c28: 1000001b b 80021c98 <Game+0x188> +80021c2c: 00000000 nop + return; + } + + GameLevelSize = GameLevelColumns * GameLevelColumns; + + memset(GameLevelTitle,0,LEVEL_TITLE_SIZE); +80021c30: 3c128004 lui s2,0x8004 + { + dprintf("Invalid map size! Value: %d\n",GameLevelColumns); + return; + } + + GameLevelSize = GameLevelColumns * GameLevelColumns; +80021c34: 3c138007 lui s3,0x8007 + + memset(GameLevelTitle,0,LEVEL_TITLE_SIZE); +80021c38: 2644330c addiu a0,s2,13068 +80021c3c: 24060018 li a2,24 + { + dprintf("Invalid map size! Value: %d\n",GameLevelColumns); + return; + } + + GameLevelSize = GameLevelColumns * GameLevelColumns; +80021c40: 00002812 mflo a1 +80021c44: a2651c11 sb a1,7185(s3) + + memset(GameLevelTitle,0,LEVEL_TITLE_SIZE); +80021c48: 0c00d7ab jal 80035eac <memset> +80021c4c: 00002821 move a1,zero + + memcpy(GameLevelTitle,&ptrBuffer[i],LEVEL_TITLE_SIZE); +80021c50: 24060018 li a2,24 +80021c54: 2644330c addiu a0,s2,13068 +80021c58: 0c00d75e jal 80035d78 <memcpy> +80021c5c: 26050004 addiu a1,s0,4 + + dprintf("Game level title: %s\n",GameLevelTitle); +80021c60: 3c048004 lui a0,0x8004 +80021c64: 2645330c addiu a1,s2,13068 +80021c68: 24840324 addiu a0,a0,804 +80021c6c: 0c00ed8f jal 8003b63c <printf> +80021c70: 3c128004 lui s2,0x8004 + + i += LEVEL_TITLE_SIZE; + + memset(GameLevelBuffer,0,GAME_MAX_MAP_SIZE); +80021c74: 24060400 li a2,1024 +80021c78: 00002821 move a1,zero +80021c7c: 0c00d7ab jal 80035eac <memset> +80021c80: 26443324 addiu a0,s2,13092 + + i = LEVEL_HEADER_SIZE; + + memcpy(GameLevelBuffer,&ptrBuffer[i],GameLevelSize); +80021c84: 92661c11 lbu a2,7185(s3) +80021c88: 26050040 addiu a1,s0,64 +80021c8c: 0c00d75e jal 80035d78 <memcpy> +80021c90: 26443324 addiu a0,s2,13092 + + GameLoadLevel(); + + GameGuiInit(); + + memset(GameRwy,0,GAME_MAX_RUNWAYS * sizeof(uint16_t) ); +80021c94: 3c128004 lui s2,0x8004 + sizeof(GameFileList) / sizeof(char*), + sizeof(GameFileDest) /sizeof(void*) ); + + GameLoadLevel(); + + GameGuiInit(); +80021c98: 0c008c9e jal 80023278 <GameGuiInit> +80021c9c: 3c108007 lui s0,0x8007 + + memset(GameRwy,0,GAME_MAX_RUNWAYS * sizeof(uint16_t) ); +80021ca0: 24060020 li a2,32 +80021ca4: 00002821 move a1,zero +80021ca8: 0c00d7ab jal 80035eac <memset> +80021cac: 26443a08 addiu a0,s2,14856 + + memset(GameUsedRwy,0,GAME_MAX_RUNWAYS * sizeof(uint16_t) ); +80021cb0: 3c048004 lui a0,0x8004 +80021cb4: 24060020 li a2,32 +80021cb8: 00002821 move a1,zero +80021cbc: 0c00d7ab jal 80035eac <memset> +80021cc0: 24843724 addiu a0,a0,14116 + + PlayerData[PLAYER_ONE].Active = true; +80021cc4: 24020001 li v0,1 +80021cc8: a2028e80 sb v0,-29056(s0) + PlayerData[PLAYER_ONE].PadKeyPressed_Callback = &PadOneKeyPressed; +80021ccc: 3c028002 lui v0,0x8002 +80021cd0: 26108e80 addiu s0,s0,-29056 +80021cd4: 24426b60 addiu v0,v0,27488 +80021cd8: ae020078 sw v0,120(s0) + PlayerData[PLAYER_ONE].PadKeyReleased_Callback = &PadOneKeyReleased; +80021cdc: 3c028002 lui v0,0x8002 +80021ce0: 24426780 addiu v0,v0,26496 +80021ce4: ae02007c sw v0,124(s0) + PlayerData[PLAYER_ONE].PadDirectionKeyPressed_Callback = &PadOneDirectionKeyPressed; +80021ce8: 3c028002 lui v0,0x8002 +80021cec: 24426a78 addiu v0,v0,27256 +80021cf0: ae020080 sw v0,128(s0) + PlayerData[PLAYER_ONE].FlightDataPage = 0; + + PlayerData[PLAYER_TWO].Active = TwoPlayersActive? true : false; +80021cf4: 92221c0e lbu v0,7182(s1) + + PlayerData[PLAYER_ONE].Active = true; + PlayerData[PLAYER_ONE].PadKeyPressed_Callback = &PadOneKeyPressed; + PlayerData[PLAYER_ONE].PadKeyReleased_Callback = &PadOneKeyReleased; + PlayerData[PLAYER_ONE].PadDirectionKeyPressed_Callback = &PadOneDirectionKeyPressed; + PlayerData[PLAYER_ONE].FlightDataPage = 0; +80021cf8: a200002d sb zero,45(s0) + + PlayerData[PLAYER_TWO].Active = TwoPlayersActive? true : false; + + if(PlayerData[PLAYER_TWO].Active == true) +80021cfc: 10400015 beqz v0,80021d54 <Game+0x244> +80021d00: a2020090 sb v0,144(s0) + { + PlayerData[PLAYER_TWO].PadKeyPressed_Callback = &PadTwoKeyPressed; +80021d04: 3c028002 lui v0,0x8002 +80021d08: 24426b78 addiu v0,v0,27512 +80021d0c: ae020108 sw v0,264(s0) + PlayerData[PLAYER_TWO].PadKeyReleased_Callback = &PadTwoKeyReleased; +80021d10: 3c028002 lui v0,0x8002 +80021d14: 244267b4 addiu v0,v0,26548 +80021d18: ae02010c sw v0,268(s0) + PlayerData[PLAYER_TWO].PadDirectionKeyPressed_Callback = &PadTwoDirectionKeyPressed; +80021d1c: 3c028002 lui v0,0x8002 +80021d20: 24426b38 addiu v0,v0,27448 +80021d24: ae020110 sw v0,272(s0) + PlayerData[PLAYER_TWO].FlightDataPage = 0; + + // On 2-player mode, one player controls departure flights and + // other player controls arrival flights. + PlayerData[PLAYER_ONE].FlightDirection = DEPARTURE; +80021d28: 24020001 li v0,1 +80021d2c: ae020028 sw v0,40(s0) + PlayerData[PLAYER_TWO].FlightDirection = ARRIVAL; +80021d30: 24020002 li v0,2 + if(PlayerData[PLAYER_TWO].Active == true) + { + PlayerData[PLAYER_TWO].PadKeyPressed_Callback = &PadTwoKeyPressed; + PlayerData[PLAYER_TWO].PadKeyReleased_Callback = &PadTwoKeyReleased; + PlayerData[PLAYER_TWO].PadDirectionKeyPressed_Callback = &PadTwoDirectionKeyPressed; + PlayerData[PLAYER_TWO].FlightDataPage = 0; +80021d34: a20000bd sb zero,189(s0) + + // On 2-player mode, one player controls departure flights and + // other player controls arrival flights. + PlayerData[PLAYER_ONE].FlightDirection = DEPARTURE; + PlayerData[PLAYER_TWO].FlightDirection = ARRIVAL; +80021d38: ae0200b8 sw v0,184(s0) +80021d3c: 3c028007 lui v0,0x8007 +80021d40: 24428fa0 addiu v0,v0,-28768 +80021d44: afb00074 sw s0,116(sp) +80021d48: afa20078 sw v0,120(sp) +static uint8_t firstActiveAircraft; +//Index for last non-idle aircraft on list +static uint8_t lastActiveAircraft; + +void Game(bool two_players) +{ +80021d4c: 10000004 b 80021d60 <Game+0x250> +80021d50: 02008821 move s1,s0 + PlayerData[PLAYER_ONE].FlightDirection = DEPARTURE; + PlayerData[PLAYER_TWO].FlightDirection = ARRIVAL; + } + else + { + PlayerData[PLAYER_ONE].FlightDirection = DEPARTURE | ARRIVAL; +80021d54: 24020003 li v0,3 +80021d58: 1000fff8 b 80021d3c <Game+0x22c> +80021d5c: ae020028 sw v0,40(s0) + } + + for(i = 0; i < MAX_PLAYERS ; i++) + { + CameraInit(&PlayerData[i]); +80021d60: 0c008255 jal 80020954 <CameraInit> +80021d64: 02202021 move a0,s1 + PlayerData[i].ShowAircraftData = false; +80021d68: a2200001 sb zero,1(s1) + PlayerData[i].SelectRunway = false; +80021d6c: a2200002 sb zero,2(s1) + PlayerData[i].SelectTaxiwayRunway = false; +80021d70: a2200003 sb zero,3(s1) + PlayerData[i].LockTarget = false; +80021d74: a2200006 sb zero,6(s1) + PlayerData[i].SelectedAircraft = 0; +80021d78: a220002e sb zero,46(s1) + PlayerData[i].FlightDataPage = 0; +80021d7c: a220002d sb zero,45(s1) + memset(&PlayerData[i].Waypoints, 0, sizeof(uint16_t) * PLAYER_MAX_WAYPOINTS); +80021d80: 26240034 addiu a0,s1,52 +80021d84: 24060040 li a2,64 +80021d88: 0c00d7ab jal 80035eac <memset> +80021d8c: 00002821 move a1,zero + else + { + PlayerData[PLAYER_ONE].FlightDirection = DEPARTURE | ARRIVAL; + } + + for(i = 0; i < MAX_PLAYERS ; i++) +80021d90: 8fa20078 lw v0,120(sp) + PlayerData[i].SelectTaxiwayRunway = false; + PlayerData[i].LockTarget = false; + PlayerData[i].SelectedAircraft = 0; + PlayerData[i].FlightDataPage = 0; + memset(&PlayerData[i].Waypoints, 0, sizeof(uint16_t) * PLAYER_MAX_WAYPOINTS); + PlayerData[i].WaypointIdx = 0; +80021d94: a2200074 sb zero,116(s1) + PlayerData[i].LastWaypointIdx = 0; +80021d98: a2200075 sb zero,117(s1) +80021d9c: 26310090 addiu s1,s1,144 + else + { + PlayerData[PLAYER_ONE].FlightDirection = DEPARTURE | ARRIVAL; + } + + for(i = 0; i < MAX_PLAYERS ; i++) +80021da0: 1622ffef bne s1,v0,80021d60 <Game+0x250> +80021da4: 3c028004 lui v0,0x8004 + } + + firstActiveAircraft = 0; + lastActiveAircraft = 0; + + GameMouseSpr.x = MOUSE_X; +80021da8: 240300c0 li v1,192 +80021dac: a4433a28 sh v1,14888(v0) + GameMouseSpr.y = MOUSE_Y; +80021db0: 24423a28 addiu v0,v0,14888 +80021db4: 24030078 li v1,120 +80021db8: a4430002 sh v1,2(v0) + GameMouseSpr.w = MOUSE_W; +80021dbc: 24030008 li v1,8 +80021dc0: a4430006 sh v1,6(v0) + GameMouseSpr.h = MOUSE_H; +80021dc4: a4430008 sh v1,8(v0) + GameMouseSpr.attribute = COLORMODE(COLORMODE_16BPP); +80021dc8: 24030002 li v1,2 + memset(&PlayerData[i].Waypoints, 0, sizeof(uint16_t) * PLAYER_MAX_WAYPOINTS); + PlayerData[i].WaypointIdx = 0; + PlayerData[i].LastWaypointIdx = 0; + } + + firstActiveAircraft = 0; +80021dcc: 3c058007 lui a1,0x8007 + lastActiveAircraft = 0; +80021dd0: 3c048007 lui a0,0x8007 + + GameMouseSpr.x = MOUSE_X; + GameMouseSpr.y = MOUSE_Y; + GameMouseSpr.w = MOUSE_W; + GameMouseSpr.h = MOUSE_H; + GameMouseSpr.attribute = COLORMODE(COLORMODE_16BPP); +80021dd4: ac430014 sw v1,20(v0) + uint8_t i; + uint8_t j = 0; + + for(i = 0; i < GameLevelSize; i++) + { + if(GameLevelBuffer[i] == TILE_RWY_START_1) +80021dd8: 3c148004 lui s4,0x8004 + GameMouseSpr.x = MOUSE_X; + GameMouseSpr.y = MOUSE_Y; + GameMouseSpr.w = MOUSE_W; + GameMouseSpr.h = MOUSE_H; + GameMouseSpr.attribute = COLORMODE(COLORMODE_16BPP); + GameMouseSpr.r = NORMAL_LUMINANCE; +80021ddc: 2403ff80 li v1,-128 + memset(&PlayerData[i].Waypoints, 0, sizeof(uint16_t) * PLAYER_MAX_WAYPOINTS); + PlayerData[i].WaypointIdx = 0; + PlayerData[i].LastWaypointIdx = 0; + } + + firstActiveAircraft = 0; +80021de0: a0a01c0d sb zero,7181(a1) + lastActiveAircraft = 0; +80021de4: a0801c0c sb zero,7180(a0) + GameMouseSpr.x = MOUSE_X; + GameMouseSpr.y = MOUSE_Y; + GameMouseSpr.w = MOUSE_W; + GameMouseSpr.h = MOUSE_H; + GameMouseSpr.attribute = COLORMODE(COLORMODE_16BPP); + GameMouseSpr.r = NORMAL_LUMINANCE; +80021de8: a043000e sb v1,14(v0) + GameMouseSpr.g = NORMAL_LUMINANCE; +80021dec: a043000f sb v1,15(v0) + GameMouseSpr.b = NORMAL_LUMINANCE; +80021df0: a0430010 sb v1,16(v0) +} + +void GameGetRunwayArray(void) +{ + uint8_t i; + uint8_t j = 0; +80021df4: 00009821 move s3,zero + + for(i = 0; i < GameLevelSize; i++) +80021df8: 00008821 move s1,zero +80021dfc: afa50080 sw a1,128(sp) +80021e00: afa40084 sw a0,132(sp) +80021e04: 3c158007 lui s5,0x8007 + { + if(GameLevelBuffer[i] == TILE_RWY_START_1) +80021e08: 26943324 addiu s4,s4,13092 +80021e0c: 24160009 li s6,9 + { + if(SystemContains_u8(i, GameLevelBuffer, GAME_MAX_RUNWAYS) == false) + { + GameRwy[j++] = i; +80021e10: 26573a08 addiu s7,s2,14856 +void GameGetRunwayArray(void) +{ + uint8_t i; + uint8_t j = 0; + + for(i = 0; i < GameLevelSize; i++) +80021e14: 92a21c11 lbu v0,7185(s5) +80021e18: 00000000 nop +80021e1c: 0222102b sltu v0,s1,v0 +80021e20: 10400011 beqz v0,80021e68 <Game+0x358> +80021e24: 02341021 addu v0,s1,s4 + { + if(GameLevelBuffer[i] == TILE_RWY_START_1) +80021e28: 90420000 lbu v0,0(v0) +80021e2c: 00000000 nop +80021e30: 1456000a bne v0,s6,80021e5c <Game+0x34c> +80021e34: 24060010 li a2,16 + { + if(SystemContains_u8(i, GameLevelBuffer, GAME_MAX_RUNWAYS) == false) +80021e38: 02802821 move a1,s4 +80021e3c: 0c00a05b jal 8002816c <SystemContains_u8> +80021e40: 02202021 move a0,s1 +80021e44: 14400005 bnez v0,80021e5c <Game+0x34c> +80021e48: 26620001 addiu v0,s3,1 + { + GameRwy[j++] = i; +80021e4c: 00139840 sll s3,s3,0x1 +80021e50: 02779821 addu s3,s3,s7 +80021e54: a6710000 sh s1,0(s3) +80021e58: 305300ff andi s3,v0,0xff +void GameGetRunwayArray(void) +{ + uint8_t i; + uint8_t j = 0; + + for(i = 0; i < GameLevelSize; i++) +80021e5c: 26310001 addiu s1,s1,1 +80021e60: 1000ffec b 80021e14 <Game+0x304> +80021e64: 323100ff andi s1,s1,0xff + GameRwy[j++] = i; + } + } + } + + dprintf("GameRwy = "); +80021e68: 3c048004 lui a0,0x8004 +80021e6c: 2484033c addiu a0,a0,828 +80021e70: 0c00ed8f jal 8003b63c <printf> +80021e74: 3c138004 lui s3,0x8004 +80021e78: 00008821 move s1,zero + + for(i = 0; i < GAME_MAX_RUNWAYS; i++) + { + if(GameRwy[i] == 0) +80021e7c: 26523a08 addiu s2,s2,14856 + { + break; + } + + dprintf("%d ", GameRwy[i]); +80021e80: 26730348 addiu s3,s3,840 + } + } + + dprintf("GameRwy = "); + + for(i = 0; i < GAME_MAX_RUNWAYS; i++) +80021e84: 24140020 li s4,32 + { + if(GameRwy[i] == 0) +80021e88: 02511021 addu v0,s2,s1 +80021e8c: 94450000 lhu a1,0(v0) +80021e90: 00000000 nop +80021e94: 14a00017 bnez a1,80021ef4 <Game+0x3e4> +80021e98: afb20068 sw s2,104(sp) + } + + dprintf("%d ", GameRwy[i]); + } + + dprintf("\n"); +80021e9c: 3c118004 lui s1,0x8004 +80021ea0: 0c00ed8f jal 8003b63c <printf> +80021ea4: 262408dc addiu a0,s1,2268 + + GameGetRunwayArray(); + + GameSelectedTile = 0; + + AircraftInit(); +80021ea8: 0c008078 jal 800201e0 <AircraftInit> +80021eac: 00000000 nop + + LoadMenuEnd(); +80021eb0: 0c0093ab jal 80024eac <LoadMenuEnd> +80021eb4: 00000000 nop + + GfxSetGlobalLuminance(0); +80021eb8: 0c00900b jal 8002402c <GfxSetGlobalLuminance> +80021ebc: 00002021 move a0,zero + + track = SystemRand(GAMEPLAY_FIRST_TRACK,GAMEPLAY_LAST_TRACK); +80021ec0: 24050004 li a1,4 +80021ec4: 0c00a03d jal 800280f4 <SystemRand> +80021ec8: 24040003 li a0,3 + + SfxPlayTrack(track); +80021ecc: 0c009f16 jal 80027c58 <SfxPlayTrack> +80021ed0: 00402021 move a0,v0 + +void GameClockFlights(void) +{ + uint8_t i; + + for(i = 0; i < FlightData.nAircraft ; i++) +80021ed4: 3c028004 lui v0,0x8004 +80021ed8: 24423764 addiu v0,v0,14180 +80021edc: afb10098 sw s1,152(sp) +80021ee0: afa2006c sw v0,108(sp) +80021ee4: afa20070 sw v0,112(sp) +80021ee8: 00409021 move s2,v0 + } + } + + if(PadOneKeyReleased(PAD_CIRCLE) == true) + { + for(i = 0; i < FlightData.nAircraft ; i++) +80021eec: 100000a8 b 80022190 <Game+0x680> +80021ef0: afa2008c sw v0,140(sp) + if(GameRwy[i] == 0) + { + break; + } + + dprintf("%d ", GameRwy[i]); +80021ef4: 02602021 move a0,s3 +80021ef8: 0c00ed8f jal 8003b63c <printf> +80021efc: 26310002 addiu s1,s1,2 + } + } + + dprintf("GameRwy = "); + + for(i = 0; i < GAME_MAX_RUNWAYS; i++) +80021f00: 1634ffe2 bne s1,s4,80021e8c <Game+0x37c> +80021f04: 02511021 addu v0,s2,s1 + } + + dprintf("%d ", GameRwy[i]); + } + + dprintf("\n"); +80021f08: 1000ffe5 b 80021ea0 <Game+0x390> +80021f0c: 3c118004 lui s1,0x8004 + GameSelectAircraftFromList(ptrPlayer, ptrFlightData); +} + +void GameClock(void) +{ + if(System1SecondTick() == true) +80021f10: 0c009fb6 jal 80027ed8 <System1SecondTick> +80021f14: 00000000 nop +80021f18: 144000f0 bnez v0,800222dc <Game+0x7cc> +80021f1c: 3c048007 lui a0,0x8007 +{ + TYPE_PLAYER * ptrPlayer; + uint8_t i; + bool pause_flag = false; + + if(GameStartupFlag == true) +80021f20: 00008821 move s1,zero + { + if( (FlightData.Minutes[i] == 0) + && + (FlightData.Hours[i] > 0) ) + { + FlightData.Minutes[i] = 60; +80021f24: 2413003c li s3,60 + +void GameClockFlights(void) +{ + uint8_t i; + + for(i = 0; i < FlightData.nAircraft ; i++) +80021f28: 8fa2006c lw v0,108(sp) +80021f2c: 00000000 nop +80021f30: 90460200 lbu a2,512(v0) +80021f34: 00000000 nop +80021f38: 0226102b sltu v0,s1,a2 +80021f3c: 144000fa bnez v0,80022328 <Game+0x818> +80021f40: 3c148004 lui s4,0x8004 +80021f44: 8fa50070 lw a1,112(sp) +80021f48: 00001821 move v1,zero +80021f4c: 00a01021 move v0,a1 +80021f50: 00a02021 move a0,a1 + && + (FlightData.Minutes[i] == 0) + && + (FlightData.State[i] == STATE_IDLE) ) + { + if(FlightData.FlightDirection[i] == DEPARTURE) +80021f54: 24070001 li a3,1 + { + FlightData.State[i] = STATE_APPROACH; + } + + // Create notification request for incoming aircraft + FlightData.NotificationRequest[i] = true; +80021f58: 24090001 li t1,1 + { + if(FlightData.FlightDirection[i] == DEPARTURE) + { + FlightData.State[i] = STATE_PARKED; + } + else if(FlightData.FlightDirection[i] == ARRIVAL) +80021f5c: 240a0002 li t2,2 + { + FlightData.State[i] = STATE_APPROACH; +80021f60: 240b0004 li t3,4 + +void GameAircraftState(void) +{ + uint8_t i; + + for(i = 0; i < FlightData.nAircraft ; i++) +80021f64: 1466010c bne v1,a2,80022398 <Game+0x888> +80021f68: 00000000 nop + +void GameActiveAircraft(void) +{ + uint8_t i; + + FlightData.ActiveAircraft = 0; +80021f6c: 8fa40070 lw a0,112(sp) +80021f70: a2400201 sb zero,513(s2) +80021f74: 00003821 move a3,zero +80021f78: 00001021 move v0,zero + + for(i = 0 ; i < FlightData.nAircraft ; i++) +80021f7c: 00001821 move v1,zero +80021f80: 14660120 bne v1,a2,80022404 <Game+0x8f4> +80021f84: 00000000 nop +80021f88: 10e00002 beqz a3,80021f94 <Game+0x484> +80021f8c: 00000000 nop +80021f90: a2420201 sb v0,513(s2) +80021f94: 8fa20080 lw v0,128(sp) +80021f98: 00003021 move a2,zero +80021f9c: 90431c0d lbu v1,7181(v0) +80021fa0: 8fa20084 lw v0,132(sp) +80021fa4: 00003821 move a3,zero +80021fa8: 90441c0c lbu a0,7180(v0) +void GameFirstLastAircraftIndex(void) +{ + bool first_set = false; + uint8_t i; + + for(i = 0; i < GAME_MAX_AIRCRAFT ; i++) +80021fac: 24080020 li t0,32 +{ + uint8_t i; + + FlightData.ActiveAircraft = 0; + + for(i = 0 ; i < FlightData.nAircraft ; i++) +80021fb0: 00001021 move v0,zero + bool first_set = false; + uint8_t i; + + for(i = 0; i < GAME_MAX_AIRCRAFT ; i++) + { + if(FlightData.State[i] != STATE_IDLE) +80021fb4: 8ca90204 lw t1,516(a1) +80021fb8: 00000000 nop +80021fbc: 1520011c bnez t1,80022430 <Game+0x920> +80021fc0: 00000000 nop +void GameFirstLastAircraftIndex(void) +{ + bool first_set = false; + uint8_t i; + + for(i = 0; i < GAME_MAX_AIRCRAFT ; i++) +80021fc4: 24420001 addiu v0,v0,1 +80021fc8: 304200ff andi v0,v0,0xff +80021fcc: 1448fff9 bne v0,t0,80021fb4 <Game+0x4a4> +80021fd0: 24a50004 addiu a1,a1,4 +80021fd4: 10c00004 beqz a2,80021fe8 <Game+0x4d8> +80021fd8: 00000000 nop +80021fdc: 8fa20084 lw v0,132(sp) +80021fe0: 00000000 nop +80021fe4: a0441c0c sb a0,7180(v0) +80021fe8: 12e00004 beqz s7,80021ffc <Game+0x4ec> +80021fec: 00000000 nop +80021ff0: 8fa20080 lw v0,128(sp) +80021ff4: 00000000 nop +80021ff8: a0431c0d sb v1,7181(v0) + + GameClock(); + GameAircraftState(); + GameActiveAircraft(); + GameFirstLastAircraftIndex(); + AircraftHandler(); +80021ffc: 0c00813e jal 800204f8 <AircraftHandler> +80022000: 3c118007 lui s1,0x8007 + // Move camera to selected aircraft and add first waypoint. + GameSelectAircraft(ptrPlayer); + break; + + default: + dprintf("Incompatible state %d!\n",aircraftState); +80022004: 3c028004 lui v0,0x8004 + + GameClock(); + GameAircraftState(); + GameActiveAircraft(); + GameFirstLastAircraftIndex(); + AircraftHandler(); +80022008: 8fbe0074 lw s8,116(sp) + // Move camera to selected aircraft and add first waypoint. + GameSelectAircraft(ptrPlayer); + break; + + default: + dprintf("Incompatible state %d!\n",aircraftState); +8002200c: afa200a4 sw v0,164(sp) + } + + ptrPlayer->LastWaypointIdx = i; + } + + target_tile = GameLevelBuffer[ptrPlayer->Waypoints[ptrPlayer->LastWaypointIdx]]; +80022010: 3c028004 lui v0,0x8004 +80022014: 24423324 addiu v0,v0,13092 +80022018: 26318eb4 addiu s1,s1,-29004 + + GameClock(); + GameAircraftState(); + GameActiveAircraft(); + GameFirstLastAircraftIndex(); + AircraftHandler(); +8002201c: 0000a821 move s5,zero + } + + ptrPlayer->LastWaypointIdx = i; + } + + target_tile = GameLevelBuffer[ptrPlayer->Waypoints[ptrPlayer->LastWaypointIdx]]; +80022020: afbe0088 sw s8,136(sp) +80022024: afa2007c sw v0,124(sp) + AircraftHandler(); + + for(i = 0 ; i < MAX_PLAYERS ; i++) + { + // Run player-specific functions for each player + if(PlayerData[i].Active == true) +80022028: 93c20000 lbu v0,0(s8) +8002202c: 00000000 nop +80022030: 14400107 bnez v0,80022450 <Game+0x940> +80022034: 00000000 nop + GameAircraftState(); + GameActiveAircraft(); + GameFirstLastAircraftIndex(); + AircraftHandler(); + + for(i = 0 ; i < MAX_PLAYERS ; i++) +80022038: 8fa20078 lw v0,120(sp) +8002203c: 27de0090 addiu s8,s8,144 +80022040: 26b50001 addiu s5,s5,1 +80022044: 17c2fff8 bne s8,v0,80022028 <Game+0x518> +80022048: 26310090 addiu s1,s1,144 + { + GamePlayerHandler(&PlayerData[i], &FlightData); + } + } + + if(PadOneKeyReleased(PAD_CIRCLE) == true) +8002204c: 0c0099e0 jal 80026780 <PadOneKeyReleased> +80022050: 24040020 li a0,32 +80022054: 10400011 beqz v0,8002209c <Game+0x58c> +80022058: 00000000 nop + uint8_t Hours[GAME_MAX_AIRCRAFT]; + uint8_t Minutes[GAME_MAX_AIRCRAFT]; + uint8_t Parking[GAME_MAX_AIRCRAFT]; + }TYPE_FLIGHT_DATA;*/ + + dprintf("\n*****************\n"); +8002205c: 3c138004 lui s3,0x8004 + + dprintf("Time: %d:%d\n",FlightData.Hours[i],FlightData.Minutes[i]); + + dprintf("State: "); + + switch(FlightData.State[i]) +80022060: 3c158004 lui s5,0x8004 + { + GamePlayerHandler(&PlayerData[i], &FlightData); + } + } + + if(PadOneKeyReleased(PAD_CIRCLE) == true) +80022064: 00008821 move s1,zero + uint8_t Hours[GAME_MAX_AIRCRAFT]; + uint8_t Minutes[GAME_MAX_AIRCRAFT]; + uint8_t Parking[GAME_MAX_AIRCRAFT]; + }TYPE_FLIGHT_DATA;*/ + + dprintf("\n*****************\n"); +80022068: 26730518 addiu s3,s3,1304 + dprintf("\tAIRCRAFT %d\n",i); +8002206c: 3c168004 lui s6,0x8004 + + dprintf("Time: %d:%d\n",FlightData.Hours[i],FlightData.Minutes[i]); + + dprintf("State: "); + + switch(FlightData.State[i]) +80022070: 26b5f790 addiu s5,s5,-2160 + } + } + + if(PadOneKeyReleased(PAD_CIRCLE) == true) + { + for(i = 0; i < FlightData.nAircraft ; i++) +80022074: 92420200 lbu v0,512(s2) +80022078: 00000000 nop +8002207c: 0222102b sltu v0,s1,v0 +80022080: 14400303 bnez v0,80022c90 <Game+0x1180> +80022084: 00000000 nop + break; + } + dprintf("\n"); + } + + dprintf("Active aircraft: %d\n",FlightData.ActiveAircraft); +80022088: 8fa2008c lw v0,140(sp) +8002208c: 3c048004 lui a0,0x8004 +80022090: 90450201 lbu a1,513(v0) +80022094: 0c00ed8f jal 8003b63c <printf> +80022098: 248405bc addiu a0,a0,1468 + +void GameGraphics(void) +{ + int i; + + while( (GfxIsGPUBusy() == true) +8002209c: 0c00901d jal 80024074 <GfxIsGPUBusy> +800220a0: 00000000 nop +800220a4: 1440fffd bnez v0,8002209c <Game+0x58c> +800220a8: 00000000 nop + || + (SystemRefreshNeeded() == false) ); +800220ac: 0c009f9a jal 80027e68 <SystemRefreshNeeded> +800220b0: 00000000 nop +void GameGraphics(void) +{ + int i; + + while( (GfxIsGPUBusy() == true) + || +800220b4: 1040fff9 beqz v0,8002209c <Game+0x58c> +800220b8: 24060040 li a2,64 + (SystemRefreshNeeded() == false) ); + + GsSortCls(0,0,NORMAL_LUMINANCE >> 1); +800220bc: 00002821 move a1,zero +800220c0: 0c00c4e8 jal 800313a0 <GsSortCls> +800220c4: 00002021 move a0,zero + + if(GfxGetGlobalLuminance() < NORMAL_LUMINANCE) +800220c8: 0c009007 jal 8002401c <GfxGetGlobalLuminance> +800220cc: 00000000 nop +800220d0: 00021600 sll v0,v0,0x18 +800220d4: 00021603 sra v0,v0,0x18 +800220d8: 04400004 bltz v0,800220ec <Game+0x5dc> +800220dc: 3c178004 lui s7,0x8004 + { + GfxIncreaseGlobalLuminance(1); +800220e0: 0c00900e jal 80024038 <GfxIncreaseGlobalLuminance> +800220e4: 24040001 li a0,1 + } + + for(i = 0 ; i < GameLevelSize; i++) + { + // Flipped tiles have bit 7 enabled + if(GameLevelBuffer[i] & TILE_MIRROR_FLAG) +800220e8: 3c178004 lui s7,0x8004 +800220ec: 26e23324 addiu v0,s7,13092 +800220f0: afa2007c sw v0,124(sp) +800220f4: afa20088 sw v0,136(sp) + && + (SystemContains_u16(i, GameRwyArray, GAME_MAX_RWY_LENGTH) == true) ) + { + for(j = 0; j < GAME_MAX_RUNWAYS; j++) + { + if(GameUsedRwy[j] != 0) +800220f8: 3c028004 lui v0,0x8004 +800220fc: 24423724 addiu v0,v0,14116 + { + GamePlayerHandler(&PlayerData[i], &FlightData); + } + } + + if(PadOneKeyReleased(PAD_CIRCLE) == true) +80022100: 8fb10074 lw s1,116(sp) + && + (SystemContains_u16(i, GameRwyArray, GAME_MAX_RWY_LENGTH) == true) ) + { + for(j = 0; j < GAME_MAX_RUNWAYS; j++) + { + if(GameUsedRwy[j] != 0) +80022104: afa2009c sw v0,156(sp) + GfxIncreaseGlobalLuminance(1); + } + + for(i = 0; i < MAX_PLAYERS ; i++) + { + if(PlayerData[i].Active == true) +80022108: 92220000 lbu v0,0(s1) +8002210c: 00000000 nop +80022110: 14400327 bnez v0,80022db0 <Game+0x12a0> +80022114: 00000000 nop + if(GfxGetGlobalLuminance() < NORMAL_LUMINANCE) + { + GfxIncreaseGlobalLuminance(1); + } + + for(i = 0; i < MAX_PLAYERS ; i++) +80022118: 8fa20078 lw v0,120(sp) +8002211c: 26310090 addiu s1,s1,144 +80022120: 1622fff9 bne s1,v0,80022108 <Game+0x5f8> +80022124: 00000000 nop + GameRenderLevel(&PlayerData[i]); + AircraftRender(&PlayerData[i]); + } + } + + GameGuiAircraftNotificationRequest(&FlightData); +80022128: 0c008cc9 jal 80023324 <GameGuiAircraftNotificationRequest> +8002212c: 26843764 addiu a0,s4,14180 + + GameGuiBubble(&FlightData); +80022130: 0c008f21 jal 80023c84 <GameGuiBubble> +80022134: 26843764 addiu a0,s4,14180 + + GameGuiClock(GameHour,GameMinutes); +80022138: 3c028007 lui v0,0x8007 +8002213c: 90451c0f lbu a1,7183(v0) +80022140: 3c028007 lui v0,0x8007 +80022144: 90441c10 lbu a0,7184(v0) +80022148: 0c008f86 jal 80023e18 <GameGuiClock> +8002214c: 00000000 nop + + for(i = 0; i < MAX_PLAYERS ; i++) + { + GameGuiAircraftList(&PlayerData[i], &FlightData); +80022150: 3c048007 lui a0,0x8007 +80022154: 26853764 addiu a1,s4,14180 +80022158: 0c008e2b jal 800238ac <GameGuiAircraftList> +8002215c: 24848e80 addiu a0,a0,-29056 +80022160: 3c048007 lui a0,0x8007 +80022164: 26853764 addiu a1,s4,14180 +80022168: 0c008e2b jal 800238ac <GameGuiAircraftList> +8002216c: 24848f10 addiu a0,a0,-28912 + } + + GfxDrawScene(); +80022170: 0c008fe2 jal 80023f88 <GfxDrawScene> +80022174: 00000000 nop + + GameCalculations(); + + GameGraphics(); + + if(GameStartupFlag == true) +80022178: 3c028007 lui v0,0x8007 +8002217c: 90431d24 lbu v1,7460(v0) +80022180: 00000000 nop +80022184: 10600002 beqz v1,80022190 <Game+0x680> +80022188: 00000000 nop + { + GameStartupFlag = false; +8002218c: a0401d24 sb zero,7460(v0) +{ + TYPE_PLAYER * ptrPlayer; + uint8_t i; + bool pause_flag = false; + + if(GameStartupFlag == true) +80022190: 8fa20094 lw v0,148(sp) +80022194: 00000000 nop +80022198: 90421d24 lbu v0,7460(v0) +8002219c: 00000000 nop +800221a0: 1040000b beqz v0,800221d0 <Game+0x6c0> +800221a4: 00000000 nop + ERROR_RECT_B = NORMAL_LUMINANCE + }; + + GsRectangle errorRct; + + bzero((GsRectangle*)&errorRct, sizeof(GsRectangle)); +800221a8: 24060010 li a2,16 +800221ac: 00002821 move a1,zero +800221b0: 0c00d7ab jal 80035eac <memset> +800221b4: 27a40010 addiu a0,sp,16 + // Pad one has been disconnected during gameplay + // Show an error screen until it is disconnected again. + + GsSortCls(0,0,0); + + errorRct.x = ERROR_RECT_X; +800221b8: 24110020 li s1,32 + errorRct.w = ERROR_RECT_W; +800221bc: 24130140 li s3,320 + errorRct.y = ERROR_RECT_Y; +800221c0: 24140010 li s4,16 + errorRct.h = ERROR_RECT_H; +800221c4: 241500d0 li s5,208 + + errorRct.r = ERROR_RECT_R; + errorRct.g = ERROR_RECT_G; + errorRct.b = ERROR_RECT_B; +800221c8: 1000002f b 80022288 <Game+0x778> +800221cc: 2416ff80 li s6,-128 +{ + TYPE_PLAYER * ptrPlayer; + uint8_t i; + bool pause_flag = false; + + if(GameStartupFlag == true) +800221d0: 8fb30074 lw s3,116(sp) +800221d4: 00008821 move s1,zero + { + return false; + } + + for(i = 0 ; i < MAX_PLAYERS ; i++) +800221d8: 24140002 li s4,2 + { + ptrPlayer = &PlayerData[i]; + // Run player-specific functions for each player + if(ptrPlayer->Active == true) +800221dc: 92620000 lbu v0,0(s3) +800221e0: 00000000 nop +800221e4: 10400023 beqz v0,80022274 <Game+0x764> +800221e8: 00000000 nop + { + //dprintf("Released callback = 0x%08X\n", ptrPlayer->PadKeyReleased_Callback); + if(ptrPlayer->PadKeyReleased_Callback(PAD_START) == true) +800221ec: 8e62007c lw v0,124(s3) +800221f0: 00000000 nop +800221f4: 0040f809 jalr v0 +800221f8: 24040800 li a0,2048 +800221fc: 1040001e beqz v0,80022278 <Game+0x768> +80022200: 26310001 addiu s1,s1,1 +80022204: 2631ffff addiu s1,s1,-1 + { + dprintf("Player %d set pause_flag to true!\n",i); +80022208: 3c048004 lui a0,0x8004 +8002220c: 02202821 move a1,s1 +80022210: 0c00ed8f jal 8003b63c <printf> +80022214: 2484034c addiu a0,a0,844 + return false; + } + + for(i = 0 ; i < MAX_PLAYERS ; i++) + { + ptrPlayer = &PlayerData[i]; +80022218: 00112100 sll a0,s1,0x4 +8002221c: 001189c0 sll s1,s1,0x7 +80022220: 00912021 addu a0,a0,s1 + if(pause_flag == true) + { + // Blocking function: + // * Returns true if player pointed to by ptrPlayer wants to exit game + // * Returns false if player pointed to by ptrPlayer wants to resume game + return GameGuiPauseDialog(ptrPlayer); +80022224: 0c008d62 jal 80023588 <GameGuiPauseDialog> +80022228: 02042021 addu a0,s0,a0 + TwoPlayersActive = two_players; + GameInit(); + + while(1) + { + if(GamePause() == true) +8002222c: 1040ffdf beqz v0,800221ac <Game+0x69c> +80022230: 24060010 li a2,16 + { + GameStartupFlag = false; + } + } + + EndAnimation(); +80022234: 0c00835d jal 80020d74 <EndAnimation> +80022238: 00000000 nop + + SfxPlayTrack(INTRO_TRACK); +8002223c: 0c009f16 jal 80027c58 <SfxPlayTrack> +80022240: 24040002 li a0,2 +} +80022244: 8fbf00d4 lw ra,212(sp) +80022248: 8fbe00d0 lw s8,208(sp) +8002224c: 8fb700cc lw s7,204(sp) +80022250: 8fb600c8 lw s6,200(sp) +80022254: 8fb500c4 lw s5,196(sp) +80022258: 8fb400c0 lw s4,192(sp) +8002225c: 8fb300bc lw s3,188(sp) +80022260: 8fb200b8 lw s2,184(sp) +80022264: 8fb100b4 lw s1,180(sp) +80022268: 8fb000b0 lw s0,176(sp) +8002226c: 03e00008 jr ra +80022270: 27bd00d8 addiu sp,sp,216 +80022274: 26310001 addiu s1,s1,1 + if(GameStartupFlag == true) + { + return false; + } + + for(i = 0 ; i < MAX_PLAYERS ; i++) +80022278: 1234ffcb beq s1,s4,800221a8 <Game+0x698> +8002227c: 26730090 addiu s3,s3,144 +80022280: 1000ffd6 b 800221dc <Game+0x6cc> +80022284: 00000000 nop + + GsRectangle errorRct; + + bzero((GsRectangle*)&errorRct, sizeof(GsRectangle)); + + while(SystemGetEmergencyMode() == true) +80022288: 0c00a053 jal 8002814c <SystemGetEmergencyMode> +8002228c: 00000000 nop +80022290: 1040ff1f beqz v0,80021f10 <Game+0x400> +80022294: 0040b821 move s7,v0 + { + // Pad one has been disconnected during gameplay + // Show an error screen until it is disconnected again. + + GsSortCls(0,0,0); +80022298: 00003021 move a2,zero +8002229c: 00002821 move a1,zero +800222a0: 0c00c4e8 jal 800313a0 <GsSortCls> +800222a4: 00002021 move a0,zero + + errorRct.r = ERROR_RECT_R; + errorRct.g = ERROR_RECT_G; + errorRct.b = ERROR_RECT_B; + + GsSortRectangle(&errorRct); +800222a8: 27a40010 addiu a0,sp,16 + // Pad one has been disconnected during gameplay + // Show an error screen until it is disconnected again. + + GsSortCls(0,0,0); + + errorRct.x = ERROR_RECT_X; +800222ac: a7b10010 sh s1,16(sp) + errorRct.w = ERROR_RECT_W; +800222b0: a7b30014 sh s3,20(sp) + errorRct.y = ERROR_RECT_Y; +800222b4: a7b40012 sh s4,18(sp) + errorRct.h = ERROR_RECT_H; +800222b8: a7b50016 sh s5,22(sp) + + errorRct.r = ERROR_RECT_R; +800222bc: a3a00018 sb zero,24(sp) + errorRct.g = ERROR_RECT_G; +800222c0: a3b10019 sb s1,25(sp) + errorRct.b = ERROR_RECT_B; + + GsSortRectangle(&errorRct); +800222c4: 0c00b762 jal 8002dd88 <GsSortRectangle> +800222c8: a3b6001a sb s6,26(sp) + GfxDrawScene(); +800222cc: 0c008fe2 jal 80023f88 <GfxDrawScene> +800222d0: 00000000 nop +800222d4: 1000ffec b 80022288 <Game+0x778> +800222d8: 00000000 nop + +void GameClock(void) +{ + if(System1SecondTick() == true) + { + GameMinutes++; +800222dc: 90821c0f lbu v0,7183(a0) +800222e0: 00000000 nop +800222e4: 24420001 addiu v0,v0,1 +800222e8: 304200ff andi v0,v0,0xff +800222ec: a0821c0f sb v0,7183(a0) + + if(GameMinutes >= 60) +800222f0: 2c42003c sltiu v0,v0,60 +800222f4: 14400005 bnez v0,8002230c <Game+0x7fc> +800222f8: 3c038007 lui v1,0x8007 + { + GameHour++; +800222fc: 90621c10 lbu v0,7184(v1) + GameMinutes = 0; +80022300: a0801c0f sb zero,7183(a0) + { + GameMinutes++; + + if(GameMinutes >= 60) + { + GameHour++; +80022304: 24420001 addiu v0,v0,1 +80022308: a0621c10 sb v0,7184(v1) + GameMinutes = 0; + } + + if(GameHour >= 24) +8002230c: 90621c10 lbu v0,7184(v1) +80022310: 00000000 nop +80022314: 2c420018 sltiu v0,v0,24 +80022318: 1440ff01 bnez v0,80021f20 <Game+0x410> +8002231c: 3c028007 lui v0,0x8007 + { + GameHour = 0; +80022320: 1000feff b 80021f20 <Game+0x410> +80022324: a0401c10 sb zero,7184(v0) +{ + uint8_t i; + + for(i = 0; i < FlightData.nAircraft ; i++) + { + if(System1SecondTick() == true) +80022328: 0c009fb6 jal 80027ed8 <System1SecondTick> +8002232c: 00000000 nop +80022330: 10400016 beqz v0,8002238c <Game+0x87c> +80022334: 00000000 nop + { + if( (FlightData.Minutes[i] == 0) +80022338: 8fa2006c lw v0,108(sp) +8002233c: 00000000 nop +80022340: 02221021 addu v0,s1,v0 +80022344: 904301c0 lbu v1,448(v0) +80022348: 00000000 nop +8002234c: 14600007 bnez v1,8002236c <Game+0x85c> +80022350: 00000000 nop + && + (FlightData.Hours[i] > 0) ) +80022354: 904301a0 lbu v1,416(v0) +80022358: 00000000 nop + for(i = 0; i < FlightData.nAircraft ; i++) + { + if(System1SecondTick() == true) + { + if( (FlightData.Minutes[i] == 0) + && +8002235c: 10600003 beqz v1,8002236c <Game+0x85c> +80022360: 2463ffff addiu v1,v1,-1 + (FlightData.Hours[i] > 0) ) + { + FlightData.Minutes[i] = 60; +80022364: a05301c0 sb s3,448(v0) + FlightData.Hours[i]--; +80022368: a04301a0 sb v1,416(v0) + } + + if(FlightData.Minutes[i] > 0) +8002236c: 8fa20070 lw v0,112(sp) +80022370: 00000000 nop +80022374: 00511821 addu v1,v0,s1 +80022378: 906201c0 lbu v0,448(v1) +8002237c: 00000000 nop +80022380: 10400002 beqz v0,8002238c <Game+0x87c> +80022384: 2442ffff addiu v0,v0,-1 + { + FlightData.Minutes[i]--; +80022388: a06201c0 sb v0,448(v1) + +void GameClockFlights(void) +{ + uint8_t i; + + for(i = 0; i < FlightData.nAircraft ; i++) +8002238c: 26310001 addiu s1,s1,1 +80022390: 1000fee5 b 80021f28 <Game+0x418> +80022394: 323100ff andi s1,s1,0xff +{ + uint8_t i; + + for(i = 0; i < FlightData.nAircraft ; i++) + { + if( (FlightData.Hours[i] == 0) +80022398: 908801a0 lbu t0,416(a0) +8002239c: 00000000 nop +800223a0: 15000013 bnez t0,800223f0 <Game+0x8e0> +800223a4: 00000000 nop + && +800223a8: 908801c0 lbu t0,448(a0) +800223ac: 00000000 nop +800223b0: 1500000f bnez t0,800223f0 <Game+0x8e0> +800223b4: 00000000 nop + (FlightData.Minutes[i] == 0) + && +800223b8: 8c480204 lw t0,516(v0) +800223bc: 00000000 nop +800223c0: 1500000b bnez t0,800223f0 <Game+0x8e0> +800223c4: 00000000 nop + (FlightData.State[i] == STATE_IDLE) ) + { + if(FlightData.FlightDirection[i] == DEPARTURE) +800223c8: 8c480000 lw t0,0(v0) +800223cc: 00000000 nop +800223d0: 15070003 bne t0,a3,800223e0 <Game+0x8d0> +800223d4: 00000000 nop + { + FlightData.State[i] = STATE_PARKED; +800223d8: 10000004 b 800223ec <Game+0x8dc> +800223dc: ac470204 sw a3,516(v0) + } + else if(FlightData.FlightDirection[i] == ARRIVAL) +800223e0: 150a0002 bne t0,t2,800223ec <Game+0x8dc> +800223e4: 00000000 nop + { + FlightData.State[i] = STATE_APPROACH; +800223e8: ac4b0204 sw t3,516(v0) + } + + // Create notification request for incoming aircraft + FlightData.NotificationRequest[i] = true; +800223ec: a0890284 sb t1,644(a0) + +void GameAircraftState(void) +{ + uint8_t i; + + for(i = 0; i < FlightData.nAircraft ; i++) +800223f0: 24630001 addiu v1,v1,1 +800223f4: 306300ff andi v1,v1,0xff +800223f8: 24840001 addiu a0,a0,1 +800223fc: 1000fed9 b 80021f64 <Game+0x454> +80022400: 24420004 addiu v0,v0,4 + + FlightData.ActiveAircraft = 0; + + for(i = 0 ; i < FlightData.nAircraft ; i++) + { + if(FlightData.State[i] != STATE_IDLE) +80022404: 8c880204 lw t0,516(a0) +80022408: 00000000 nop +8002240c: 11000004 beqz t0,80022420 <Game+0x910> +80022410: 00000000 nop + { + FlightData.ActiveAircraft++; +80022414: 24420001 addiu v0,v0,1 +80022418: 304200ff andi v0,v0,0xff +8002241c: 24070001 li a3,1 +{ + uint8_t i; + + FlightData.ActiveAircraft = 0; + + for(i = 0 ; i < FlightData.nAircraft ; i++) +80022420: 24630001 addiu v1,v1,1 +80022424: 306300ff andi v1,v1,0xff +80022428: 1000fed5 b 80021f80 <Game+0x470> +8002242c: 24840004 addiu a0,a0,4 + + for(i = 0; i < GAME_MAX_AIRCRAFT ; i++) + { + if(FlightData.State[i] != STATE_IDLE) + { + if(first_set == false) +80022430: 14e00003 bnez a3,80022440 <Game+0x930> +80022434: 00000000 nop + { + firstActiveAircraft = i; +80022438: 00401821 move v1,v0 + + for(i = 0; i < GAME_MAX_AIRCRAFT ; i++) + { + if(FlightData.State[i] != STATE_IDLE) + { + if(first_set == false) +8002243c: 24170001 li s7,1 + { + firstActiveAircraft = i; + first_set = true; + } + lastActiveAircraft = i; +80022440: 00402021 move a0,v0 +80022444: 24060001 li a2,1 +80022448: 1000fede b 80021fc4 <Game+0x4b4> +8002244c: 24070001 li a3,1 + } +} + +void GameStateLockTarget(TYPE_PLAYER * ptrPlayer) +{ + if(ptrPlayer->LockTarget == true) +80022450: 93c20006 lbu v0,6(s8) + return lastActiveAircraft; +} + +void GamePlayerHandler(TYPE_PLAYER * ptrPlayer, TYPE_FLIGHT_DATA * ptrFlightData) +{ + ptrPlayer->SelectedTile = 0; // Reset selected tile if no states +80022454: a7c00032 sh zero,50(s8) + } +} + +void GameStateLockTarget(TYPE_PLAYER * ptrPlayer) +{ + if(ptrPlayer->LockTarget == true) +80022458: 10400010 beqz v0,8002249c <Game+0x98c> +8002245c: a3c00005 sb zero,5(s8) + { + CameraMoveToIsoPos(ptrPlayer, AircraftGetIsoPos(ptrPlayer->LockedAircraft) ); +80022460: 93c5002f lbu a1,47(s8) +80022464: 0c008227 jal 8002089c <AircraftGetIsoPos> +80022468: 27a40060 addiu a0,sp,96 +8002246c: 8fa50060 lw a1,96(sp) +80022470: 8fa60064 lw a2,100(sp) +80022474: 0c00832b jal 80020cac <CameraMoveToIsoPos> +80022478: 03c02021 move a0,s8 + + if(ptrPlayer->PadKeyReleased_Callback(PAD_SQUARE) == true) +8002247c: 8fc2007c lw v0,124(s8) +80022480: 00000000 nop +80022484: 0040f809 jalr v0 +80022488: 24040080 li a0,128 +8002248c: 10400003 beqz v0,8002249c <Game+0x98c> +80022490: 00000000 nop + { + ptrPlayer->LockTarget = false; +80022494: a3c00006 sb zero,6(s8) + ptrPlayer->LockedAircraft = 0; +80022498: a3c0002f sb zero,47(s8) +void GameStateSelectRunway(TYPE_PLAYER * ptrPlayer, TYPE_FLIGHT_DATA * ptrFlightData) +{ + uint8_t i; + bool success; + + if(ptrPlayer->SelectRunway == true) +8002249c: 93c20002 lbu v0,2(s8) +800224a0: 00000000 nop +800224a4: 104000b6 beqz v0,80022780 <Game+0xc70> +800224a8: 03c02821 move a1,s8 + { + // Under this mode, always reset locking target. + ptrPlayer->LockTarget = false; + ptrPlayer->LockedAircraft = 0; + + if(ptrPlayer->PadKeyReleased_Callback(PAD_TRIANGLE) == true) +800224ac: 8fc2007c lw v0,124(s8) + bool success; + + if(ptrPlayer->SelectRunway == true) + { + // Under this mode, always reset locking target. + ptrPlayer->LockTarget = false; +800224b0: a3c00006 sb zero,6(s8) + ptrPlayer->LockedAircraft = 0; +800224b4: a3c0002f sb zero,47(s8) + + if(ptrPlayer->PadKeyReleased_Callback(PAD_TRIANGLE) == true) +800224b8: 0040f809 jalr v0 +800224bc: 24040010 li a0,16 +800224c0: 10400003 beqz v0,800224d0 <Game+0x9c0> +800224c4: 00000000 nop + { + ptrPlayer->SelectRunway = false; +800224c8: 100000ac b 8002277c <Game+0xc6c> +800224cc: a3c00002 sb zero,2(s8) + } + else if(ptrPlayer->PadKeyReleased_Callback(PAD_CROSS) == true) +800224d0: 8fc2007c lw v0,124(s8) +800224d4: 00000000 nop +800224d8: 0040f809 jalr v0 +800224dc: 24040040 li a0,64 +800224e0: 10400087 beqz v0,80022700 <Game+0xbf0> +800224e4: 3c048004 lui a0,0x8004 + { + ptrPlayer->SelectRunway = false; + + dprintf("ptrPlayer->SelectedRunway = %d\n", GameRwy[ptrPlayer->SelectedRunway]); +800224e8: 97c20030 lhu v0,48(s8) +800224ec: 8fa30068 lw v1,104(sp) +800224f0: 00021040 sll v0,v0,0x1 +800224f4: 00621021 addu v0,v1,v0 +800224f8: 94450000 lhu a1,0(v0) +800224fc: 24840370 addiu a0,a0,880 +80022500: 0c00ed8f jal 8003b63c <printf> +80022504: a3c00002 sb zero,2(s8) + if(SystemContains_u16(GameRwy[ptrPlayer->SelectedRunway], GameUsedRwy, GAME_MAX_RUNWAYS) == false) +80022508: 97c20030 lhu v0,48(s8) +8002250c: 8fa30068 lw v1,104(sp) +80022510: 00021040 sll v0,v0,0x1 +80022514: 00621021 addu v0,v1,v0 +80022518: 3c138004 lui s3,0x8004 +8002251c: 94440000 lhu a0,0(v0) +80022520: 24060010 li a2,16 +80022524: 0c00a067 jal 8002819c <SystemContains_u16> +80022528: 26653724 addiu a1,s3,14116 +8002252c: 14400094 bnez v0,80022780 <Game+0xc70> +80022530: 03c02821 move a1,s8 + { + ptrPlayer->SelectRunway = false; + dprintf("Player selected runway %d!\n",GameRwy[ptrPlayer->SelectedRunway]); +80022534: 97c20030 lhu v0,48(s8) +80022538: 8fa30068 lw v1,104(sp) +8002253c: 00021040 sll v0,v0,0x1 +80022540: 00431021 addu v0,v0,v1 +80022544: 94450000 lhu a1,0(v0) +80022548: 3c048004 lui a0,0x8004 +8002254c: 24840390 addiu a0,a0,912 +80022550: 0c00ed8f jal 8003b63c <printf> +80022554: a3c00002 sb zero,2(s8) +80022558: 26623724 addiu v0,s3,14116 +8002255c: afa2009c sw v0,156(sp) +80022560: 00009821 move s3,zero + + success = false; + + for(i = 0; i < GAME_MAX_RUNWAYS; i++) +80022564: 24040010 li a0,16 + { + if(GameUsedRwy[i] == 0) +80022568: 94450000 lhu a1,0(v0) +8002256c: 00000000 nop +80022570: 14a0005c bnez a1,800226e4 <Game+0xbd4> +80022574: 26730001 addiu s3,s3,1 +80022578: 2673ffff addiu s3,s3,-1 + GameGetSelectedRunwayArray(0); +} + +void GameAssignRunwaytoAircraft(TYPE_PLAYER * ptrPlayer, TYPE_FLIGHT_DATA * ptrFlightData) +{ + uint16_t assignedRwy = GameRwy[ptrPlayer->SelectedRunway]; +8002257c: 97c20030 lhu v0,48(s8) +80022580: 8fa30068 lw v1,104(sp) +80022584: 00021040 sll v0,v0,0x1 +80022588: 93d7002e lbu s7,46(s8) +8002258c: 00621021 addu v0,v1,v0 + uint16_t rwyExit; + uint32_t i; + uint16_t targets[AIRCRAFT_MAX_TARGETS]; + uint8_t rwyTiles[GAME_MAX_RWY_LENGTH]; + + memset(targets, 0, sizeof(uint16_t) * AIRCRAFT_MAX_TARGETS); +80022590: 24060040 li a2,64 + GameGetSelectedRunwayArray(0); +} + +void GameAssignRunwaytoAircraft(TYPE_PLAYER * ptrPlayer, TYPE_FLIGHT_DATA * ptrFlightData) +{ + uint16_t assignedRwy = GameRwy[ptrPlayer->SelectedRunway]; +80022594: 94560000 lhu s6,0(v0) + uint16_t rwyExit; + uint32_t i; + uint16_t targets[AIRCRAFT_MAX_TARGETS]; + uint8_t rwyTiles[GAME_MAX_RWY_LENGTH]; + + memset(targets, 0, sizeof(uint16_t) * AIRCRAFT_MAX_TARGETS); +80022598: 0c00d7ab jal 80035eac <memset> +8002259c: 27a40010 addiu a0,sp,16 + STATE_TAXIING, + STATE_APPROACH, + STATE_FINAL + }FL_STATE;*/ + + dprintf("aircraftIndex = %d\n",aircraftIndex); +800225a0: 3c048004 lui a0,0x8004 +800225a4: 02e02821 move a1,s7 +800225a8: 0c00ed8f jal 8003b63c <printf> +800225ac: 248403ac addiu a0,a0,940 + + if(ptrFlightData->State[aircraftIndex] == STATE_APPROACH) +800225b0: 26e20080 addiu v0,s7,128 +800225b4: 00021080 sll v0,v0,0x2 +800225b8: 02421021 addu v0,s2,v0 +800225bc: 8c450004 lw a1,4(v0) +800225c0: 24040004 li a0,4 +800225c4: 14a4003d bne a1,a0,800226bc <Game+0xbac> +800225c8: 24040005 li a0,5 + { + ptrFlightData->State[aircraftIndex] = STATE_FINAL; +800225cc: ac440004 sw a0,4(v0) + + GameGetSelectedRunwayArray(assignedRwy); +800225d0: 0c008502 jal 80021408 <GameGetSelectedRunwayArray> +800225d4: 02c02021 move a0,s6 +800225d8: 3c028004 lui v0,0x8004 +800225dc: 24423744 addiu v0,v0,14148 + + for(i = 0; i < GAME_MAX_RWY_LENGTH; i++) +800225e0: 00002021 move a0,zero +800225e4: afa200a0 sw v0,160(sp) +800225e8: 24060010 li a2,16 + { + rwyTiles[i] = GameLevelBuffer[GameRwyArray[i]]; +800225ec: 27a30050 addiu v1,sp,80 +800225f0: 00643821 addu a3,v1,a0 +800225f4: 94450000 lhu a1,0(v0) +800225f8: 8fa3007c lw v1,124(sp) + { + ptrFlightData->State[aircraftIndex] = STATE_FINAL; + + GameGetSelectedRunwayArray(assignedRwy); + + for(i = 0; i < GAME_MAX_RWY_LENGTH; i++) +800225fc: 24840001 addiu a0,a0,1 + { + rwyTiles[i] = GameLevelBuffer[GameRwyArray[i]]; +80022600: 00a32821 addu a1,a1,v1 +80022604: 90a50000 lbu a1,0(a1) +80022608: 24420002 addiu v0,v0,2 + { + ptrFlightData->State[aircraftIndex] = STATE_FINAL; + + GameGetSelectedRunwayArray(assignedRwy); + + for(i = 0; i < GAME_MAX_RWY_LENGTH; i++) +8002260c: 1486fff7 bne a0,a2,800225ec <Game+0xadc> +80022610: a0e50000 sb a1,0(a3) + { + rwyTiles[i] = GameLevelBuffer[GameRwyArray[i]]; + } + + i = SystemIndexOf_U8((uint8_t)TILE_RWY_EXIT, rwyTiles, 0, GAME_MAX_RWY_LENGTH); +80022614: 24070010 li a3,16 +80022618: 00003021 move a2,zero +8002261c: 27a50050 addiu a1,sp,80 +80022620: 0c00a19a jal 80028668 <SystemIndexOf_U8> +80022624: 24040018 li a0,24 + + if(i == -1) +80022628: 2408ffff li t0,-1 +8002262c: 14480005 bne v0,t0,80022644 <Game+0xb34> +80022630: 24070010 li a3,16 + { + dprintf("ERROR: Could not find TILE_RWY_EXIT for runway header %d.\n", assignedRwy); +80022634: 3c048004 lui a0,0x8004 +80022638: 02c02821 move a1,s6 +8002263c: 1000000d b 80022674 <Game+0xb64> +80022640: 248403c0 addiu a0,a0,960 + return; + } + + i = SystemIndexOf_U8((uint8_t)TILE_RWY_EXIT, rwyTiles, i + 1, GAME_MAX_RWY_LENGTH); +80022644: 24460001 addiu a2,v0,1 +80022648: 27a50050 addiu a1,sp,80 +8002264c: 24040018 li a0,24 +80022650: 0c00a19a jal 80028668 <SystemIndexOf_U8> +80022654: afa800a8 sw t0,168(sp) + + if(i == -1) +80022658: 8fa800a8 lw t0,168(sp) +8002265c: 00000000 nop +80022660: 14480008 bne v0,t0,80022684 <Game+0xb74> +80022664: 00021040 sll v0,v0,0x1 + { + dprintf("ERROR: Could not find second TILE_RWY_EXIT for runway header %d.\n", assignedRwy); +80022668: 3c048004 lui a0,0x8004 +8002266c: 02c02821 move a1,s6 +80022670: 248403fc addiu a0,a0,1020 +80022674: 0c00ed8f jal 8003b63c <printf> +80022678: 00000000 nop +8002267c: 1000000f b 800226bc <Game+0xbac> +80022680: 00000000 nop + return; + } + + rwyExit = GameRwyArray[i]; +80022684: 8fa300a0 lw v1,160(sp) +80022688: 00000000 nop +8002268c: 00621021 addu v0,v1,v0 +80022690: 94420000 lhu v0,0(v0) + + targets[0] = assignedRwy; + targets[1] = rwyExit; + + if( AircraftAddNew(ptrFlightData, +80022694: 27a60010 addiu a2,sp,16 +80022698: 02e02821 move a1,s7 +8002269c: 26843764 addiu a0,s4,14180 + return; + } + + rwyExit = GameRwyArray[i]; + + targets[0] = assignedRwy; +800226a0: a7b60010 sh s6,16(sp) + targets[1] = rwyExit; + + if( AircraftAddNew(ptrFlightData, +800226a4: 0c00809d jal 80020274 <AircraftAddNew> +800226a8: a7a20012 sh v0,18(sp) +800226ac: 14400003 bnez v0,800226bc <Game+0xbac> +800226b0: 3c048004 lui a0,0x8004 + aircraftIndex, + targets ) == false) + { + dprintf("Exceeded maximum aircraft number!\n"); +800226b4: 0c00ed8f jal 8003b63c <printf> +800226b8: 24840440 addiu a0,a0,1088 + { + if(GameUsedRwy[i] == 0) + { + GameAssignRunwaytoAircraft(ptrPlayer, ptrFlightData); + success = true; + GameUsedRwy[i] = GameRwy[ptrPlayer->SelectedRunway]; +800226bc: 8fa2009c lw v0,156(sp) +800226c0: 00139840 sll s3,s3,0x1 +800226c4: 00539821 addu s3,v0,s3 +800226c8: 97c20030 lhu v0,48(s8) +800226cc: 8fa30068 lw v1,104(sp) +800226d0: 00021040 sll v0,v0,0x1 +800226d4: 00621021 addu v0,v1,v0 +800226d8: 94420000 lhu v0,0(v0) +800226dc: 10000027 b 8002277c <Game+0xc6c> +800226e0: a6620000 sh v0,0(s3) + ptrPlayer->SelectRunway = false; + dprintf("Player selected runway %d!\n",GameRwy[ptrPlayer->SelectedRunway]); + + success = false; + + for(i = 0; i < GAME_MAX_RUNWAYS; i++) +800226e4: 1664ffa0 bne s3,a0,80022568 <Game+0xa58> +800226e8: 24420002 addiu v0,v0,2 + } + } + + if(success == false) + { + dprintf("No available runways!\n"); +800226ec: 3c048004 lui a0,0x8004 +800226f0: 0c00ed8f jal 8003b63c <printf> +800226f4: 248405d4 addiu a0,a0,1492 + } +} + +void GameStateSelectTaxiwayRunway(TYPE_PLAYER * ptrPlayer, TYPE_FLIGHT_DATA * ptrFlightData) +{ + TYPE_ISOMETRIC_POS IsoPos = CameraGetIsoPos(ptrPlayer); +800226f8: 10000021 b 80022780 <Game+0xc70> +800226fc: 03c02821 move a1,s8 + { + dprintf("No available runways!\n"); + } + } + } + else if(ptrPlayer->PadKeyReleased_Callback(PAD_LEFT) == true) +80022700: 8fc2007c lw v0,124(s8) +80022704: 00000000 nop +80022708: 0040f809 jalr v0 +8002270c: 34048000 li a0,0x8000 +80022710: 10400007 beqz v0,80022730 <Game+0xc20> +80022714: 00000000 nop + { + if(ptrPlayer->SelectedRunway != 0) +80022718: 97c20030 lhu v0,48(s8) +8002271c: 00000000 nop +80022720: 10400017 beqz v0,80022780 <Game+0xc70> +80022724: 03c02821 move a1,s8 + { + ptrPlayer->SelectedRunway--; +80022728: 10000013 b 80022778 <Game+0xc68> +8002272c: 2442ffff addiu v0,v0,-1 + } + } + else if(ptrPlayer->PadKeyReleased_Callback(PAD_RIGHT) == true) +80022730: 8fc2007c lw v0,124(s8) +80022734: 00000000 nop +80022738: 0040f809 jalr v0 +8002273c: 24042000 li a0,8192 +80022740: 1040000f beqz v0,80022780 <Game+0xc70> +80022744: 03c02821 move a1,s8 + { + if(ptrPlayer->SelectedRunway < GAME_MAX_RUNWAYS) +80022748: 97c20030 lhu v0,48(s8) +8002274c: 00000000 nop +80022750: 2c440010 sltiu a0,v0,16 +80022754: 1080000a beqz a0,80022780 <Game+0xc70> +80022758: 24420001 addiu v0,v0,1 + { + if(GameRwy[ptrPlayer->SelectedRunway + 1] != 0) +8002275c: 8fa30068 lw v1,104(sp) +80022760: 00022040 sll a0,v0,0x1 +80022764: 00642021 addu a0,v1,a0 +80022768: 94840000 lhu a0,0(a0) +8002276c: 00000000 nop +80022770: 10800003 beqz a0,80022780 <Game+0xc70> +80022774: 00000000 nop + { + ptrPlayer->SelectedRunway++; +80022778: a7c20030 sh v0,48(s8) + } +} + +void GameStateSelectTaxiwayRunway(TYPE_PLAYER * ptrPlayer, TYPE_FLIGHT_DATA * ptrFlightData) +{ + TYPE_ISOMETRIC_POS IsoPos = CameraGetIsoPos(ptrPlayer); +8002277c: 03c02821 move a1,s8 +80022780: 0c00830f jal 80020c3c <CameraGetIsoPos> +80022784: 27a40010 addiu a0,sp,16 + uint8_t i; + uint16_t target_tile; + + /*dprintf("Camera is pointing to {%d,%d}\n",IsoPos.x, IsoPos.y);*/ + + if(ptrPlayer->SelectTaxiwayRunway == true) +80022788: 93c20003 lbu v0,3(s8) +8002278c: 00000000 nop +80022790: 10400065 beqz v0,80022928 <Game+0xe18> +80022794: 03c02821 move a1,s8 + { + // Under this mode, always reset locking target. + ptrPlayer->LockTarget = false; + ptrPlayer->LockedAircraft = 0; + + ptrPlayer->SelectedTile = GameGetTileFromIsoPosition(&IsoPos); +80022798: 27a40010 addiu a0,sp,16 + /*dprintf("Camera is pointing to {%d,%d}\n",IsoPos.x, IsoPos.y);*/ + + if(ptrPlayer->SelectTaxiwayRunway == true) + { + // Under this mode, always reset locking target. + ptrPlayer->LockTarget = false; +8002279c: a3c00006 sb zero,6(s8) + ptrPlayer->LockedAircraft = 0; + + ptrPlayer->SelectedTile = GameGetTileFromIsoPosition(&IsoPos); +800227a0: 0c0084f0 jal 800213c0 <GameGetTileFromIsoPosition> +800227a4: a3c0002f sb zero,47(s8) +800227a8: a7c20032 sh v0,50(s8) + + if(GamePathToTile(ptrPlayer) == false) +800227ac: 0c0085a3 jal 8002168c <GamePathToTile> +800227b0: 03c02021 move a0,s8 +800227b4: 14400002 bnez v0,800227c0 <Game+0xcb0> +800227b8: 24020001 li v0,1 + { + ptrPlayer->InvalidPath = true; +800227bc: a3c20005 sb v0,5(s8) + } + + if(ptrPlayer->PadKeyReleased_Callback(PAD_TRIANGLE) == true) +800227c0: 8fc2007c lw v0,124(s8) +800227c4: 00000000 nop +800227c8: 0040f809 jalr v0 +800227cc: 24040010 li a0,16 +800227d0: 10400008 beqz v0,800227f4 <Game+0xce4> +800227d4: 24060040 li a2,64 + { + // State exit. + ptrPlayer->SelectTaxiwayRunway = false; +800227d8: a3c00003 sb zero,3(s8) + // Clear waypoints array. + memset(ptrPlayer->Waypoints, 0, sizeof(uint16_t) * PLAYER_MAX_WAYPOINTS); +800227dc: 00002821 move a1,zero +800227e0: 0c00d7ab jal 80035eac <memset> +800227e4: 02202021 move a0,s1 + ptrPlayer->WaypointIdx = 0; +800227e8: a3c00074 sb zero,116(s8) + ptrPlayer->LastWaypointIdx = 0; +800227ec: 1000004d b 80022924 <Game+0xe14> +800227f0: a3c00075 sb zero,117(s8) + } + else if(ptrPlayer->PadKeyReleased_Callback(PAD_CROSS) == true) +800227f4: 8fc2007c lw v0,124(s8) +800227f8: 00000000 nop +800227fc: 0040f809 jalr v0 +80022800: 24040040 li a0,64 +80022804: 10400048 beqz v0,80022928 <Game+0xe18> +80022808: 03c02821 move a1,s8 + { + if(ptrPlayer->InvalidPath == false) +8002280c: 93c20005 lbu v0,5(s8) +80022810: 00000000 nop +80022814: 14400043 bnez v0,80022924 <Game+0xe14> +80022818: 24050020 li a1,32 + { + for(i = 0; i < PLAYER_MAX_WAYPOINTS; i++) + { + if(ptrPlayer->Waypoints[i] == 0) +8002281c: 00022040 sll a0,v0,0x1 +80022820: 03c42021 addu a0,s8,a0 +80022824: 94840034 lhu a0,52(a0) +80022828: 00000000 nop +8002282c: 14800021 bnez a0,800228b4 <Game+0xda4> +80022830: 304600ff andi a2,v0,0xff + } + + ptrPlayer->LastWaypointIdx = i; + } + + target_tile = GameLevelBuffer[ptrPlayer->Waypoints[ptrPlayer->LastWaypointIdx]]; +80022834: 93c50075 lbu a1,117(s8) +80022838: 001510c0 sll v0,s5,0x3 +8002283c: 00153180 sll a2,s5,0x6 +80022840: 00461021 addu v0,v0,a2 +80022844: 00451021 addu v0,v0,a1 +80022848: 8fa30088 lw v1,136(sp) +8002284c: 24420018 addiu v0,v0,24 +80022850: 00021040 sll v0,v0,0x1 +80022854: 00621021 addu v0,v1,v0 +80022858: 94420004 lhu v0,4(v0) +8002285c: 8fa3007c lw v1,124(sp) +80022860: 00000000 nop +80022864: 00431021 addu v0,v0,v1 + + if( (target_tile == TILE_RWY_START_1) +80022868: 90420000 lbu v0,0(v0) +8002286c: 00000000 nop +80022870: 3042007f andi v0,v0,0x7f +80022874: 2442fff7 addiu v0,v0,-9 +80022878: 2c420002 sltiu v0,v0,2 +8002287c: 1040002a beqz v0,80022928 <Game+0xe18> +80022880: 03c02821 move a1,s8 + (target_tile == TILE_RWY_START_2) + || + (target_tile == (TILE_RWY_START_2 | TILE_MIRROR_FLAG) ) ) + { + // TODO: Assign path to aircraft + AircraftFromFlightDataIndexAddTargets(ptrPlayer->LockedAircraft, ptrPlayer->Waypoints); +80022884: 93c4002f lbu a0,47(s8) +80022888: 0c00824d jal 80020934 <AircraftFromFlightDataIndexAddTargets> +8002288c: 02202821 move a1,s1 + dprintf("Added these targets to aircraft %d:\n", ptrPlayer->LockedAircraft); +80022890: 93c5002f lbu a1,47(s8) +80022894: 3c048004 lui a0,0x8004 +80022898: 24840464 addiu a0,a0,1124 +8002289c: 0c00ed8f jal 8003b63c <printf> +800228a0: 3c168004 lui s6,0x8004 +800228a4: 00009821 move s3,zero + + for(i = 0; i < PLAYER_MAX_WAYPOINTS; i++) + { + dprintf("%d ",ptrPlayer->Waypoints[i]); +800228a8: 26d60348 addiu s6,s6,840 + { + // TODO: Assign path to aircraft + AircraftFromFlightDataIndexAddTargets(ptrPlayer->LockedAircraft, ptrPlayer->Waypoints); + dprintf("Added these targets to aircraft %d:\n", ptrPlayer->LockedAircraft); + + for(i = 0; i < PLAYER_MAX_WAYPOINTS; i++) +800228ac: 10000006 b 800228c8 <Game+0xdb8> +800228b0: 24170040 li s7,64 +800228b4: 24420001 addiu v0,v0,1 + } + else if(ptrPlayer->PadKeyReleased_Callback(PAD_CROSS) == true) + { + if(ptrPlayer->InvalidPath == false) + { + for(i = 0; i < PLAYER_MAX_WAYPOINTS; i++) +800228b8: 1445ffd8 bne v0,a1,8002281c <Game+0xd0c> +800228bc: a3c60075 sb a2,117(s8) +800228c0: 1000ffdc b 80022834 <Game+0xd24> +800228c4: 00000000 nop + AircraftFromFlightDataIndexAddTargets(ptrPlayer->LockedAircraft, ptrPlayer->Waypoints); + dprintf("Added these targets to aircraft %d:\n", ptrPlayer->LockedAircraft); + + for(i = 0; i < PLAYER_MAX_WAYPOINTS; i++) + { + dprintf("%d ",ptrPlayer->Waypoints[i]); +800228c8: 03d31021 addu v0,s8,s3 +800228cc: 94450034 lhu a1,52(v0) +800228d0: 02c02021 move a0,s6 +800228d4: 0c00ed8f jal 8003b63c <printf> +800228d8: 26730002 addiu s3,s3,2 + { + // TODO: Assign path to aircraft + AircraftFromFlightDataIndexAddTargets(ptrPlayer->LockedAircraft, ptrPlayer->Waypoints); + dprintf("Added these targets to aircraft %d:\n", ptrPlayer->LockedAircraft); + + for(i = 0; i < PLAYER_MAX_WAYPOINTS; i++) +800228dc: 1677fffb bne s3,s7,800228cc <Game+0xdbc> +800228e0: 03d31021 addu v0,s8,s3 + { + dprintf("%d ",ptrPlayer->Waypoints[i]); + } + + dprintf("\n"); +800228e4: 3c048004 lui a0,0x8004 +800228e8: 0c00ed8f jal 8003b63c <printf> +800228ec: 248408dc addiu a0,a0,2268 + + ptrPlayer->SelectTaxiwayParking = false; + // Clear waypoints array. + memset(ptrPlayer->Waypoints, 0, sizeof(uint16_t) * PLAYER_MAX_WAYPOINTS); +800228f0: 02202021 move a0,s1 + dprintf("%d ",ptrPlayer->Waypoints[i]); + } + + dprintf("\n"); + + ptrPlayer->SelectTaxiwayParking = false; +800228f4: a3c00004 sb zero,4(s8) + // Clear waypoints array. + memset(ptrPlayer->Waypoints, 0, sizeof(uint16_t) * PLAYER_MAX_WAYPOINTS); +800228f8: 24060040 li a2,64 +800228fc: 0c00d7ab jal 80035eac <memset> +80022900: 00002821 move a1,zero + ptrPlayer->WaypointIdx = 0; + ptrPlayer->LastWaypointIdx = 0; + + ptrFlightData->State[ptrPlayer->LockedAircraft] = STATE_TAXIING; +80022904: 93c2002f lbu v0,47(s8) +80022908: 24040002 li a0,2 +8002290c: 24420080 addiu v0,v0,128 +80022910: 00021080 sll v0,v0,0x2 +80022914: 02421021 addu v0,s2,v0 + dprintf("\n"); + + ptrPlayer->SelectTaxiwayParking = false; + // Clear waypoints array. + memset(ptrPlayer->Waypoints, 0, sizeof(uint16_t) * PLAYER_MAX_WAYPOINTS); + ptrPlayer->WaypointIdx = 0; +80022918: a3c00074 sb zero,116(s8) + ptrPlayer->LastWaypointIdx = 0; +8002291c: a3c00075 sb zero,117(s8) + + ptrFlightData->State[ptrPlayer->LockedAircraft] = STATE_TAXIING; +80022920: ac440004 sw a0,4(v0) + } +} + +void GameStateSelectTaxiwayParking(TYPE_PLAYER * ptrPlayer, TYPE_FLIGHT_DATA * ptrFlightData) +{ + TYPE_ISOMETRIC_POS IsoPos = CameraGetIsoPos(ptrPlayer); +80022924: 03c02821 move a1,s8 +80022928: 0c00830f jal 80020c3c <CameraGetIsoPos> +8002292c: 27a40010 addiu a0,sp,16 + uint8_t i; + uint16_t target_tile; + + if(ptrPlayer->SelectTaxiwayParking == true) +80022930: 93c20004 lbu v0,4(s8) +80022934: 00000000 nop +80022938: 10400068 beqz v0,80022adc <Game+0xfcc> +8002293c: 27a40010 addiu a0,sp,16 + { + // Under this mode, always reset locking target. + ptrPlayer->LockTarget = false; +80022940: a3c00006 sb zero,6(s8) + ptrPlayer->LockedAircraft = 0; + + ptrPlayer->SelectedTile = GameGetTileFromIsoPosition(&IsoPos); +80022944: 0c0084f0 jal 800213c0 <GameGetTileFromIsoPosition> +80022948: a3c0002f sb zero,47(s8) +8002294c: a7c20032 sh v0,50(s8) + + if(GamePathToTile(ptrPlayer) == false) +80022950: 0c0085a3 jal 8002168c <GamePathToTile> +80022954: 03c02021 move a0,s8 +80022958: 14400002 bnez v0,80022964 <Game+0xe54> +8002295c: 24020001 li v0,1 + { + ptrPlayer->InvalidPath = true; +80022960: a3c20005 sb v0,5(s8) + } + + if(ptrPlayer->PadKeyReleased_Callback(PAD_TRIANGLE) == true) +80022964: 8fc2007c lw v0,124(s8) +80022968: 00000000 nop +8002296c: 0040f809 jalr v0 +80022970: 24040010 li a0,16 +80022974: 10400008 beqz v0,80022998 <Game+0xe88> +80022978: 24060040 li a2,64 + { + // State exit. + ptrPlayer->SelectTaxiwayParking = false; +8002297c: a3c00004 sb zero,4(s8) + // Clear waypoints array. + memset(ptrPlayer->Waypoints, 0, sizeof(uint16_t) * PLAYER_MAX_WAYPOINTS); +80022980: 00002821 move a1,zero +80022984: 0c00d7ab jal 80035eac <memset> +80022988: 02202021 move a0,s1 + ptrPlayer->WaypointIdx = 0; +8002298c: a3c00074 sb zero,116(s8) + ptrPlayer->LastWaypointIdx = 0; +80022990: 10000052 b 80022adc <Game+0xfcc> +80022994: a3c00075 sb zero,117(s8) + } + else if(ptrPlayer->PadKeyReleased_Callback(PAD_CROSS) == true) +80022998: 8fc2007c lw v0,124(s8) +8002299c: 00000000 nop +800229a0: 0040f809 jalr v0 +800229a4: 24040040 li a0,64 +800229a8: 1040004c beqz v0,80022adc <Game+0xfcc> +800229ac: 00000000 nop + { + if(ptrPlayer->InvalidPath == false) +800229b0: 93c20005 lbu v0,5(s8) +800229b4: 00000000 nop +800229b8: 14400048 bnez v0,80022adc <Game+0xfcc> +800229bc: 24050020 li a1,32 + { + for(i = 0; i < PLAYER_MAX_WAYPOINTS; i++) + { + if(ptrPlayer->Waypoints[i] == 0) +800229c0: 00022040 sll a0,v0,0x1 +800229c4: 03c42021 addu a0,s8,a0 +800229c8: 94840034 lhu a0,52(a0) +800229cc: 00000000 nop +800229d0: 14800026 bnez a0,80022a6c <Game+0xf5c> +800229d4: 304600ff andi a2,v0,0xff + } + + ptrPlayer->LastWaypointIdx = i; + } + + target_tile = GameLevelBuffer[ptrPlayer->Waypoints[ptrPlayer->LastWaypointIdx]]; +800229d8: 93c50075 lbu a1,117(s8) +800229dc: 00152180 sll a0,s5,0x6 +800229e0: 001510c0 sll v0,s5,0x3 +800229e4: 00441021 addu v0,v0,a0 +800229e8: 00451021 addu v0,v0,a1 +800229ec: 8fa30088 lw v1,136(sp) +800229f0: 24420018 addiu v0,v0,24 +800229f4: 00021040 sll v0,v0,0x1 +800229f8: 00621021 addu v0,v1,v0 +800229fc: 94420004 lhu v0,4(v0) +80022a00: 8fa3007c lw v1,124(sp) + + dprintf("ptrPlayer->LastWaypointIdx = %d\n", +80022a04: 3c048004 lui a0,0x8004 + } + + ptrPlayer->LastWaypointIdx = i; + } + + target_tile = GameLevelBuffer[ptrPlayer->Waypoints[ptrPlayer->LastWaypointIdx]]; +80022a08: 00431021 addu v0,v0,v1 +80022a0c: 90530000 lbu s3,0(v0) + + dprintf("ptrPlayer->LastWaypointIdx = %d\n", +80022a10: 0c00ed8f jal 8003b63c <printf> +80022a14: 2484048c addiu a0,a0,1164 + ptrPlayer->LastWaypointIdx); + + dprintf("target_tile = %d, TILE_PARKING = %d\n", +80022a18: 3c048004 lui a0,0x8004 +80022a1c: 02602821 move a1,s3 +80022a20: 2406000b li a2,11 +80022a24: 0c00ed8f jal 8003b63c <printf> +80022a28: 248404b0 addiu a0,a0,1200 + target_tile, + TILE_PARKING); + + if( (target_tile == TILE_PARKING) +80022a2c: 3273007f andi s3,s3,0x7f +80022a30: 2402000b li v0,11 +80022a34: 16620029 bne s3,v0,80022adc <Game+0xfcc> +80022a38: 00000000 nop + || + (target_tile == (TILE_PARKING | TILE_MIRROR_FLAG) ) ) + { + // TODO: Assign path to aircraft + AircraftFromFlightDataIndexAddTargets(ptrPlayer->LockedAircraft, ptrPlayer->Waypoints); +80022a3c: 93c4002f lbu a0,47(s8) +80022a40: 0c00824d jal 80020934 <AircraftFromFlightDataIndexAddTargets> +80022a44: 02202821 move a1,s1 + + dprintf("Added these targets to aircraft %d:\n", ptrPlayer->LockedAircraft); +80022a48: 93c5002f lbu a1,47(s8) +80022a4c: 3c048004 lui a0,0x8004 +80022a50: 24840464 addiu a0,a0,1124 +80022a54: 0c00ed8f jal 8003b63c <printf> +80022a58: 3c168004 lui s6,0x8004 +80022a5c: 00009821 move s3,zero + + for(i = 0; i < PLAYER_MAX_WAYPOINTS; i++) + { + dprintf("%d ",ptrPlayer->Waypoints[i]); +80022a60: 26d60348 addiu s6,s6,840 + // TODO: Assign path to aircraft + AircraftFromFlightDataIndexAddTargets(ptrPlayer->LockedAircraft, ptrPlayer->Waypoints); + + dprintf("Added these targets to aircraft %d:\n", ptrPlayer->LockedAircraft); + + for(i = 0; i < PLAYER_MAX_WAYPOINTS; i++) +80022a64: 10000006 b 80022a80 <Game+0xf70> +80022a68: 24170040 li s7,64 +80022a6c: 24420001 addiu v0,v0,1 + } + else if(ptrPlayer->PadKeyReleased_Callback(PAD_CROSS) == true) + { + if(ptrPlayer->InvalidPath == false) + { + for(i = 0; i < PLAYER_MAX_WAYPOINTS; i++) +80022a70: 1445ffd3 bne v0,a1,800229c0 <Game+0xeb0> +80022a74: a3c60075 sb a2,117(s8) +80022a78: 1000ffd7 b 800229d8 <Game+0xec8> +80022a7c: 00000000 nop + + dprintf("Added these targets to aircraft %d:\n", ptrPlayer->LockedAircraft); + + for(i = 0; i < PLAYER_MAX_WAYPOINTS; i++) + { + dprintf("%d ",ptrPlayer->Waypoints[i]); +80022a80: 03d31021 addu v0,s8,s3 +80022a84: 94450034 lhu a1,52(v0) +80022a88: 02c02021 move a0,s6 +80022a8c: 0c00ed8f jal 8003b63c <printf> +80022a90: 26730002 addiu s3,s3,2 + // TODO: Assign path to aircraft + AircraftFromFlightDataIndexAddTargets(ptrPlayer->LockedAircraft, ptrPlayer->Waypoints); + + dprintf("Added these targets to aircraft %d:\n", ptrPlayer->LockedAircraft); + + for(i = 0; i < PLAYER_MAX_WAYPOINTS; i++) +80022a94: 1677fffb bne s3,s7,80022a84 <Game+0xf74> +80022a98: 03d31021 addu v0,s8,s3 + { + dprintf("%d ",ptrPlayer->Waypoints[i]); + } + + dprintf("\n"); +80022a9c: 3c048004 lui a0,0x8004 +80022aa0: 0c00ed8f jal 8003b63c <printf> +80022aa4: 248408dc addiu a0,a0,2268 + + ptrPlayer->SelectTaxiwayParking = false; + // Clear waypoints array. + memset(ptrPlayer->Waypoints, 0, sizeof(uint16_t) * PLAYER_MAX_WAYPOINTS); +80022aa8: 02202021 move a0,s1 + dprintf("%d ",ptrPlayer->Waypoints[i]); + } + + dprintf("\n"); + + ptrPlayer->SelectTaxiwayParking = false; +80022aac: a3c00004 sb zero,4(s8) + // Clear waypoints array. + memset(ptrPlayer->Waypoints, 0, sizeof(uint16_t) * PLAYER_MAX_WAYPOINTS); +80022ab0: 24060040 li a2,64 +80022ab4: 0c00d7ab jal 80035eac <memset> +80022ab8: 00002821 move a1,zero + ptrPlayer->WaypointIdx = 0; + ptrPlayer->LastWaypointIdx = 0; + + ptrFlightData->State[ptrPlayer->LockedAircraft] = STATE_TAXIING; +80022abc: 93c2002f lbu v0,47(s8) +80022ac0: 24040002 li a0,2 +80022ac4: 24420080 addiu v0,v0,128 +80022ac8: 00021080 sll v0,v0,0x2 +80022acc: 02421021 addu v0,s2,v0 + dprintf("\n"); + + ptrPlayer->SelectTaxiwayParking = false; + // Clear waypoints array. + memset(ptrPlayer->Waypoints, 0, sizeof(uint16_t) * PLAYER_MAX_WAYPOINTS); + ptrPlayer->WaypointIdx = 0; +80022ad0: a3c00074 sb zero,116(s8) + ptrPlayer->LastWaypointIdx = 0; +80022ad4: a3c00075 sb zero,117(s8) + + ptrFlightData->State[ptrPlayer->LockedAircraft] = STATE_TAXIING; +80022ad8: ac440004 sw a0,4(v0) + } +} + +void GameStateShowAircraft(TYPE_PLAYER * ptrPlayer, TYPE_FLIGHT_DATA * ptrFlightData) +{ + if(ptrPlayer->ShowAircraftData == true) +80022adc: 93c20001 lbu v0,1(s8) +80022ae0: 00000000 nop +80022ae4: 10400023 beqz v0,80022b74 <Game+0x1064> +80022ae8: 00000000 nop + { + if(ptrPlayer->PadKeyReleased_Callback(PAD_TRIANGLE) == true) +80022aec: 8fc2007c lw v0,124(s8) +80022af0: 00000000 nop +80022af4: 0040f809 jalr v0 +80022af8: 24040010 li a0,16 +80022afc: 10400003 beqz v0,80022b0c <Game+0xffc> +80022b00: 00000000 nop + { + ptrPlayer->ShowAircraftData = false; +80022b04: 1000001b b 80022b74 <Game+0x1064> +80022b08: a3c00001 sb zero,1(s8) + } + else if(ptrPlayer->PadKeyReleased_Callback(PAD_SQUARE) == true) +80022b0c: 8fc2007c lw v0,124(s8) +80022b10: 00000000 nop +80022b14: 0040f809 jalr v0 +80022b18: 24040080 li a0,128 +80022b1c: 10400015 beqz v0,80022b74 <Game+0x1064> +80022b20: 3c048004 lui a0,0x8004 + { + dprintf("Aircraft state = %d. STATE_IDLE = %d\n", + ptrFlightData->State[ptrPlayer->SelectedAircraft], +80022b24: 93c2002e lbu v0,46(s8) +80022b28: 00000000 nop +80022b2c: 24420080 addiu v0,v0,128 +80022b30: 00021080 sll v0,v0,0x2 +80022b34: 02421021 addu v0,s2,v0 + { + ptrPlayer->ShowAircraftData = false; + } + else if(ptrPlayer->PadKeyReleased_Callback(PAD_SQUARE) == true) + { + dprintf("Aircraft state = %d. STATE_IDLE = %d\n", +80022b38: 8c450004 lw a1,4(v0) +80022b3c: 248404d8 addiu a0,a0,1240 +80022b40: 0c00ed8f jal 8003b63c <printf> +80022b44: 00003021 move a2,zero + ptrFlightData->State[ptrPlayer->SelectedAircraft], + STATE_IDLE); + + if(ptrFlightData->State[ptrPlayer->SelectedAircraft] != STATE_IDLE) +80022b48: 93c4002e lbu a0,46(s8) +80022b4c: 00000000 nop +80022b50: 24820080 addiu v0,a0,128 +80022b54: 00021080 sll v0,v0,0x2 +80022b58: 02421021 addu v0,s2,v0 +80022b5c: 8c420004 lw v0,4(v0) +80022b60: 00000000 nop +80022b64: 10400003 beqz v0,80022b74 <Game+0x1064> +80022b68: 24020001 li v0,1 + { + ptrPlayer->LockTarget = true; +80022b6c: a3c20006 sb v0,6(s8) + ptrPlayer->LockedAircraft = ptrPlayer->SelectedAircraft; +80022b70: a3c4002f sb a0,47(s8) + } + } + } + + if(ptrPlayer->PadKeyReleased_Callback(PAD_CIRCLE) == true) +80022b74: 8fc2007c lw v0,124(s8) +80022b78: 00000000 nop +80022b7c: 0040f809 jalr v0 +80022b80: 24040020 li a0,32 +80022b84: 1040000d beqz v0,80022bbc <Game+0x10ac> +80022b88: 00000000 nop + +bool GameGuiShowAircraftDataSpecialConditions(TYPE_PLAYER * ptrPlayer) +{ + // Aircraft list data cannot be shown under these conditions. + + if( (ptrPlayer->SelectRunway == true) +80022b8c: 93c20002 lbu v0,2(s8) +80022b90: 00000000 nop +80022b94: 14400009 bnez v0,80022bbc <Game+0x10ac> +80022b98: 00000000 nop + || +80022b9c: 93c20004 lbu v0,4(s8) +80022ba0: 00000000 nop +80022ba4: 14400005 bnez v0,80022bbc <Game+0x10ac> +80022ba8: 00000000 nop + (ptrPlayer->SelectTaxiwayParking == true) + || +80022bac: 93c20003 lbu v0,3(s8) +80022bb0: 00000000 nop +80022bb4: 10400166 beqz v0,80023150 <Game+0x1640> +80022bb8: 00000000 nop + GameStateLockTarget(ptrPlayer); + GameStateSelectRunway(ptrPlayer, ptrFlightData); + GameStateSelectTaxiwayRunway(ptrPlayer, ptrFlightData); + GameStateSelectTaxiwayParking(ptrPlayer, ptrFlightData); + GameStateShowAircraft(ptrPlayer, ptrFlightData); + CameraHandler(ptrPlayer); +80022bbc: 0c008280 jal 80020a00 <CameraHandler> +80022bc0: 03c02021 move a0,s8 + GameGuiActiveAircraftList(ptrPlayer, ptrFlightData); +80022bc4: 26853764 addiu a1,s4,14180 +80022bc8: 0c008d95 jal 80023654 <GameGuiActiveAircraftList> +80022bcc: 03c02021 move a0,s8 + GameGuiActiveAircraftPage(ptrPlayer, ptrFlightData); +80022bd0: 26853764 addiu a1,s4,14180 +80022bd4: 0c008dbe jal 800236f8 <GameGuiActiveAircraftPage> +80022bd8: 03c02021 move a0,s8 + +void GameSelectAircraftFromList(TYPE_PLAYER * ptrPlayer, TYPE_FLIGHT_DATA * ptrFlightData) +{ + FL_STATE aircraftState = ptrFlightData->State[ptrPlayer->SelectedAircraft]; + + if(ptrPlayer->ShowAircraftData == true) +80022bdc: 93c20001 lbu v0,1(s8) +80022be0: 00000000 nop +80022be4: 1040fd14 beqz v0,80022038 <Game+0x528> +80022be8: 00000000 nop + dprintf("\n"); +} + +void GameSelectAircraftFromList(TYPE_PLAYER * ptrPlayer, TYPE_FLIGHT_DATA * ptrFlightData) +{ + FL_STATE aircraftState = ptrFlightData->State[ptrPlayer->SelectedAircraft]; +80022bec: 93c2002e lbu v0,46(s8) +80022bf0: 00000000 nop +80022bf4: 24420080 addiu v0,v0,128 +80022bf8: 00021080 sll v0,v0,0x2 +80022bfc: 02421021 addu v0,s2,v0 +80022c00: 8c530004 lw s3,4(v0) + + if(ptrPlayer->ShowAircraftData == true) + { + if(ptrPlayer->PadKeyReleased_Callback(PAD_CROSS) == true) +80022c04: 8fc2007c lw v0,124(s8) +80022c08: 00000000 nop +80022c0c: 0040f809 jalr v0 +80022c10: 24040040 li a0,64 +80022c14: 1040fd08 beqz v0,80022038 <Game+0x528> +80022c18: 00000000 nop + { + if(ptrPlayer->ActiveAircraft != 0) +80022c1c: 93c2002c lbu v0,44(s8) +80022c20: 00000000 nop +80022c24: 1040fd04 beqz v0,80022038 <Game+0x528> +80022c28: 24020004 li v0,4 + { + ptrPlayer->ShowAircraftData = false; + + switch(aircraftState) +80022c2c: 12620008 beq s3,v0,80022c50 <Game+0x1140> +80022c30: a3c00001 sb zero,1(s8) +80022c34: 24020006 li v0,6 +80022c38: 12620008 beq s3,v0,80022c5c <Game+0x114c> +80022c3c: 24160001 li s6,1 +80022c40: 1676000c bne s3,s6,80022c74 <Game+0x1164> +80022c44: 02602821 move a1,s3 + case STATE_APPROACH: + ptrPlayer->SelectRunway = true; + break; + + case STATE_PARKED: + ptrPlayer->SelectTaxiwayRunway = true; +80022c48: 10000006 b 80022c64 <Game+0x1154> +80022c4c: a3d30003 sb s3,3(s8) + ptrPlayer->ShowAircraftData = false; + + switch(aircraftState) + { + case STATE_APPROACH: + ptrPlayer->SelectRunway = true; +80022c50: 24020001 li v0,1 +80022c54: 1000fcf8 b 80022038 <Game+0x528> +80022c58: a3c20002 sb v0,2(s8) + ptrPlayer->SelectTaxiwayRunway = true; + GameSelectAircraft(ptrPlayer); + break; + + case STATE_LANDED: + ptrPlayer->SelectTaxiwayParking = true; +80022c5c: 24020001 li v0,1 +80022c60: a3c20004 sb v0,4(s8) + // Move camera to selected aircraft and add first waypoint. + GameSelectAircraft(ptrPlayer); +80022c64: 0c00858e jal 80021638 <GameSelectAircraft> +80022c68: 03c02021 move a0,s8 +80022c6c: 1000fcf2 b 80022038 <Game+0x528> +80022c70: 00000000 nop + break; + + default: + dprintf("Incompatible state %d!\n",aircraftState); +80022c74: 8fa200a4 lw v0,164(sp) +80022c78: 0c00ed8f jal 8003b63c <printf> +80022c7c: 24440500 addiu a0,v0,1280 + // States remain unchanged + ptrPlayer->SelectRunway = false; +80022c80: a3c00002 sb zero,2(s8) + ptrPlayer->SelectTaxiwayRunway = false; +80022c84: a3c00003 sb zero,3(s8) + ptrPlayer->ShowAircraftData = true; +80022c88: 1000fceb b 80022038 <Game+0x528> +80022c8c: a3d60001 sb s6,1(s8) + uint8_t Hours[GAME_MAX_AIRCRAFT]; + uint8_t Minutes[GAME_MAX_AIRCRAFT]; + uint8_t Parking[GAME_MAX_AIRCRAFT]; + }TYPE_FLIGHT_DATA;*/ + + dprintf("\n*****************\n"); +80022c90: 0c00ed8f jal 8003b63c <printf> +80022c94: 02602021 move a0,s3 + dprintf("\tAIRCRAFT %d\n",i); +80022c98: 02202821 move a1,s1 +80022c9c: 0c00ed8f jal 8003b63c <printf> +80022ca0: 26c4052c addiu a0,s6,1324 + dprintf("*****************\n"); +80022ca4: 3c048004 lui a0,0x8004 +80022ca8: 0c00ed8f jal 8003b63c <printf> +80022cac: 2484053c addiu a0,a0,1340 + + if(FlightData.FlightDirection[i] == ARRIVAL) +80022cb0: 8fa3008c lw v1,140(sp) +80022cb4: 00111080 sll v0,s1,0x2 +80022cb8: 00431021 addu v0,v0,v1 + { + dprintf("Direction: %s\n","Arrival"); + } + else if(FlightData.FlightDirection[i] == DEPARTURE) +80022cbc: 8c420000 lw v0,0(v0) +80022cc0: 00000000 nop +80022cc4: 2442ffff addiu v0,v0,-1 +80022cc8: 2c420002 sltiu v0,v0,2 +80022ccc: 10400007 beqz v0,80022cec <Game+0x11dc> +80022cd0: 02511021 addu v0,s2,s1 + dprintf("\tAIRCRAFT %d\n",i); + dprintf("*****************\n"); + + if(FlightData.FlightDirection[i] == ARRIVAL) + { + dprintf("Direction: %s\n","Arrival"); +80022cd4: 3c058004 lui a1,0x8004 +80022cd8: 3c048004 lui a0,0x8004 +80022cdc: 24a50550 addiu a1,a1,1360 +80022ce0: 0c00ed8f jal 8003b63c <printf> +80022ce4: 24840558 addiu a0,a0,1368 + else if(FlightData.FlightDirection[i] == DEPARTURE) + { + dprintf("Direction: %s\n","Arrival"); + } + + dprintf("Time: %d:%d\n",FlightData.Hours[i],FlightData.Minutes[i]); +80022ce8: 02511021 addu v0,s2,s1 +80022cec: 904601c0 lbu a2,448(v0) +80022cf0: 904501a0 lbu a1,416(v0) +80022cf4: 3c048004 lui a0,0x8004 +80022cf8: 0c00ed8f jal 8003b63c <printf> +80022cfc: 24840568 addiu a0,a0,1384 + + dprintf("State: "); +80022d00: 3c048004 lui a0,0x8004 +80022d04: 0c00ed8f jal 8003b63c <printf> +80022d08: 24840578 addiu a0,a0,1400 + + switch(FlightData.State[i]) +80022d0c: 26220080 addiu v0,s1,128 +80022d10: 00021080 sll v0,v0,0x2 +80022d14: 02421021 addu v0,s2,v0 +80022d18: 8c420004 lw v0,4(v0) +80022d1c: 00000000 nop +80022d20: 2c430007 sltiu v1,v0,7 +80022d24: 1060001c beqz v1,80022d98 <Game+0x1288> +80022d28: 00021080 sll v0,v0,0x2 +80022d2c: 02a21021 addu v0,s5,v0 +80022d30: 8c420000 lw v0,0(v0) +80022d34: 00000000 nop +80022d38: 00400008 jr v0 +80022d3c: 00000000 nop + { + case STATE_APPROACH: + dprintf("Approach"); +80022d40: 3c048004 lui a0,0x8004 +80022d44: 10000012 b 80022d90 <Game+0x1280> +80022d48: 24840580 addiu a0,a0,1408 + break; + + case STATE_TAXIING: + dprintf("Taxiing"); +80022d4c: 3c048004 lui a0,0x8004 +80022d50: 1000000f b 80022d90 <Game+0x1280> +80022d54: 2484058c addiu a0,a0,1420 + break; + + case STATE_FINAL: + dprintf("Final"); +80022d58: 3c048004 lui a0,0x8004 +80022d5c: 1000000c b 80022d90 <Game+0x1280> +80022d60: 24840594 addiu a0,a0,1428 + break; + + case STATE_IDLE: + dprintf("Idle"); +80022d64: 3c048004 lui a0,0x8004 +80022d68: 10000009 b 80022d90 <Game+0x1280> +80022d6c: 2484059c addiu a0,a0,1436 + break; + + case STATE_PARKED: + dprintf("Parked"); +80022d70: 3c048004 lui a0,0x8004 +80022d74: 10000006 b 80022d90 <Game+0x1280> +80022d78: 248405a4 addiu a0,a0,1444 + break; + + case STATE_LANDED: + dprintf("Landed"); +80022d7c: 3c048004 lui a0,0x8004 +80022d80: 10000003 b 80022d90 <Game+0x1280> +80022d84: 248405ac addiu a0,a0,1452 + break; + + case STATE_TAKEOFF: + dprintf("Takeoff"); +80022d88: 3c048004 lui a0,0x8004 +80022d8c: 248405b4 addiu a0,a0,1460 +80022d90: 0c00ed8f jal 8003b63c <printf> +80022d94: 00000000 nop + break; + + default: + break; + } + dprintf("\n"); +80022d98: 8fa20098 lw v0,152(sp) + } + } + + if(PadOneKeyReleased(PAD_CIRCLE) == true) + { + for(i = 0; i < FlightData.nAircraft ; i++) +80022d9c: 26310001 addiu s1,s1,1 + break; + + default: + break; + } + dprintf("\n"); +80022da0: 0c00ed8f jal 8003b63c <printf> +80022da4: 244408dc addiu a0,v0,2268 + } + } + + if(PadOneKeyReleased(PAD_CIRCLE) == true) + { + for(i = 0; i < FlightData.nAircraft ; i++) +80022da8: 1000fcb2 b 80022074 <Game+0x564> +80022dac: 323100ff andi s1,s1,0xff + static bool rwy_sine_decrease = false; + TYPE_ISOMETRIC_POS tileIsoPos; + TYPE_CARTESIAN_POS tileCartPos; + + // Prepare runway to be painted in blue if player is on runway selection mode + if(ptrPlayer->SelectRunway == true) +80022db0: 92220002 lbu v0,2(s1) +80022db4: 00000000 nop +80022db8: 1040000a beqz v0,80022de4 <Game+0x12d4> +80022dbc: 0000a821 move s5,zero + { + GameGetSelectedRunwayArray(GameRwy[ptrPlayer->SelectedRunway]); +80022dc0: 96220030 lhu v0,48(s1) +80022dc4: 00000000 nop +80022dc8: 00021840 sll v1,v0,0x1 +80022dcc: 3c028004 lui v0,0x8004 +80022dd0: 24423a08 addiu v0,v0,14856 +80022dd4: 00621021 addu v0,v1,v0 +80022dd8: 94440000 lhu a0,0(v0) +80022ddc: 0c008502 jal 80021408 <GameGetSelectedRunwayArray> +80022de0: 00000000 nop + columns++; + } + else + { + rows++; + columns = 0; +80022de4: 00009821 move s3,zero +80022de8: 0000f021 move s8,zero + } + + dprintf("\n");*/ + } + + for(i = 0 ; i < GameLevelSize; i++) +80022dec: 3c028007 lui v0,0x8007 +80022df0: 90421c11 lbu v0,7185(v0) +80022df4: 00000000 nop +80022df8: 03c2102b sltu v0,s8,v0 +80022dfc: 104000c6 beqz v0,80023118 <Game+0x1608> +80022e00: 00000000 nop + { + // Flipped tiles have bit 7 enabled + if(GameLevelBuffer[i] & TILE_MIRROR_FLAG) +80022e04: 8fa2007c lw v0,124(sp) +80022e08: 00000000 nop +80022e0c: 03c21821 addu v1,s8,v0 +80022e10: 90620000 lbu v0,0(v1) +80022e14: 00000000 nop +80022e18: 00022600 sll a0,v0,0x18 +80022e1c: 00042603 sra a0,a0,0x18 +80022e20: 04810005 bgez a0,80022e38 <Game+0x1328> +80022e24: 0000b021 move s6,zero + { + flip_id = true; + aux_id = GameLevelBuffer[i]; + GameLevelBuffer[i] &= ~(TILE_MIRROR_FLAG); +80022e28: 3044007f andi a0,v0,0x7f +80022e2c: a0640000 sb a0,0(v1) +80022e30: afa20090 sw v0,144(sp) + for(i = 0 ; i < GameLevelSize; i++) + { + // Flipped tiles have bit 7 enabled + if(GameLevelBuffer[i] & TILE_MIRROR_FLAG) + { + flip_id = true; +80022e34: 24160001 li s6,1 + else + { + flip_id = false; + } + + if(GameLevelBuffer[i] == TILE_NOTHING) +80022e38: 8fa20088 lw v0,136(sp) +80022e3c: 240300ff li v1,255 +80022e40: 005e1021 addu v0,v0,s8 +80022e44: 90420000 lbu v0,0(v0) +80022e48: 00000000 nop +80022e4c: 104300af beq v0,v1,8002310c <Game+0x15fc> +80022e50: 2c430010 sltiu v1,v0,16 + { + // Skip empty tiles + continue; + } + + if(GameLevelBuffer[i] <= LAST_TILE_TILESET1) +80022e54: 14600008 bnez v1,80022e78 <Game+0x1368> +80022e58: 2442fff0 addiu v0,v0,-16 + { + // Draw using GameTilesetSpr + ptrTileset = &GameTilesetSpr; + } + else if( (GameLevelBuffer[i] > LAST_TILE_TILESET1) +80022e5c: 2c42000d sltiu v0,v0,13 +80022e60: 14400008 bnez v0,80022e84 <Game+0x1374> +80022e64: 00000000 nop + } + else + { + ptrTileset = NULL; + + if(flip_id == false) +80022e68: 16c000c8 bnez s6,8002318c <Game+0x167c> +80022e6c: 27c70001 addiu a3,s8,1 +80022e70: 1000ffde b 80022dec <Game+0x12dc> +80022e74: 30feffff andi s8,a3,0xffff + } + + if(GameLevelBuffer[i] <= LAST_TILE_TILESET1) + { + // Draw using GameTilesetSpr + ptrTileset = &GameTilesetSpr; +80022e78: 3c038004 lui v1,0x8004 +80022e7c: 10000003 b 80022e8c <Game+0x137c> +80022e80: 24773aac addiu s7,v1,15020 + else if( (GameLevelBuffer[i] > LAST_TILE_TILESET1) + && + (GameLevelBuffer[i] <= LAST_TILE_TILESET2) ) + { + // Draw using GameTileset2Spr + ptrTileset = &GameTileset2Spr; +80022e84: 3c038004 lui v1,0x8004 +80022e88: 24773a80 addiu s7,v1,14976 + { + continue; + } + } + + ptrTileset->w = TILE_SIZE; +80022e8c: 24020040 li v0,64 +80022e90: a6e20006 sh v0,6(s7) + ptrTileset->h = TILE_SIZE; +80022e94: a6e20008 sh v0,8(s7) + + used_rwy = false; + + if( (ptrPlayer->SelectRunway == true) +80022e98: 92220002 lbu v0,2(s1) +80022e9c: 00000000 nop +80022ea0: 10400027 beqz v0,80022f40 <Game+0x1430> +80022ea4: 00000000 nop + && +80022ea8: 13c00025 beqz s8,80022f40 <Game+0x1430> +80022eac: 3c098004 lui t1,0x8004 + (i != 0) + && + (SystemContains_u16(i, GameRwyArray, GAME_MAX_RWY_LENGTH) == true) ) +80022eb0: 24060010 li a2,16 +80022eb4: 25253744 addiu a1,t1,14148 +80022eb8: 03c02021 move a0,s8 +80022ebc: 0c00a067 jal 8002819c <SystemContains_u16> +80022ec0: afa900a0 sw t1,160(sp) + used_rwy = false; + + if( (ptrPlayer->SelectRunway == true) + && + (i != 0) + && +80022ec4: 1040001e beqz v0,80022f40 <Game+0x1430> +80022ec8: 00004021 move t0,zero + { + for(j = 0; j < GAME_MAX_RUNWAYS; j++) + { + if(GameUsedRwy[j] != 0) + { + if(SystemContains_u16(GameUsedRwy[j], GameRwyArray, GAME_MAX_RWY_LENGTH) == true) +80022ecc: 8fa900a0 lw t1,160(sp) +80022ed0: 00000000 nop +80022ed4: 25293744 addiu t1,t1,14148 + && + (i != 0) + && + (SystemContains_u16(i, GameRwyArray, GAME_MAX_RWY_LENGTH) == true) ) + { + for(j = 0; j < GAME_MAX_RUNWAYS; j++) +80022ed8: 240a0020 li t2,32 + { + if(GameUsedRwy[j] != 0) +80022edc: 8fa2009c lw v0,156(sp) +80022ee0: 00000000 nop +80022ee4: 00481021 addu v0,v0,t0 +80022ee8: 94440000 lhu a0,0(v0) +80022eec: 00000000 nop +80022ef0: 14800007 bnez a0,80022f10 <Game+0x1400> +80022ef4: 01202821 move a1,t1 +80022ef8: 25080002 addiu t0,t0,2 + && + (i != 0) + && + (SystemContains_u16(i, GameRwyArray, GAME_MAX_RWY_LENGTH) == true) ) + { + for(j = 0; j < GAME_MAX_RUNWAYS; j++) +80022efc: 150afff7 bne t0,t2,80022edc <Game+0x13cc> +80022f00: 3c028007 lui v0,0x8007 + ptrTileset->b = NORMAL_LUMINANCE >> 2; + ptrTileset->g = NORMAL_LUMINANCE >> 2; + } + else + { + ptrTileset->r = NORMAL_LUMINANCE >> 2; +80022f04: a2e8000e sb t0,14(s7) + ptrTileset->g = NORMAL_LUMINANCE >> 2; +80022f08: 1000009d b 80023180 <Game+0x1670> +80022f0c: a2e8000f sb t0,15(s7) + { + for(j = 0; j < GAME_MAX_RUNWAYS; j++) + { + if(GameUsedRwy[j] != 0) + { + if(SystemContains_u16(GameUsedRwy[j], GameRwyArray, GAME_MAX_RWY_LENGTH) == true) +80022f10: 24060010 li a2,16 +80022f14: afaa00a8 sw t2,168(sp) +80022f18: afa800a4 sw t0,164(sp) +80022f1c: 0c00a067 jal 8002819c <SystemContains_u16> +80022f20: afa900a0 sw t1,160(sp) +80022f24: 8fa900a0 lw t1,160(sp) +80022f28: 8fa800a4 lw t0,164(sp) +80022f2c: 8faa00a8 lw t2,168(sp) +80022f30: 1040fff2 beqz v0,80022efc <Game+0x13ec> +80022f34: 25080002 addiu t0,t0,2 + } + } + + if(used_rwy == true) + { + ptrTileset->r = rwy_sine; +80022f38: 1000008a b 80023164 <Game+0x1654> +80022f3c: 3c028007 lui v0,0x8007 + ptrTileset->r = NORMAL_LUMINANCE >> 2; + ptrTileset->g = NORMAL_LUMINANCE >> 2; + ptrTileset->b = rwy_sine; + } + } + else if( ( (ptrPlayer->SelectTaxiwayParking == true) +80022f40: 92220004 lbu v0,4(s1) +80022f44: 00000000 nop +80022f48: 14400005 bnez v0,80022f60 <Game+0x1450> +80022f4c: 00000000 nop + || +80022f50: 92220003 lbu v0,3(s1) +80022f54: 00000000 nop +80022f58: 10400018 beqz v0,80022fbc <Game+0x14ac> +80022f5c: 2402ff80 li v0,-128 + (ptrPlayer->SelectTaxiwayRunway == true) ) + && +80022f60: 13c00016 beqz s8,80022fbc <Game+0x14ac> +80022f64: 2402ff80 li v0,-128 + (i != 0) + && + ( (SystemContains_u16(i, ptrPlayer->Waypoints, PLAYER_MAX_WAYPOINTS) == true) +80022f68: 03c02021 move a0,s8 +80022f6c: 24060020 li a2,32 +80022f70: 0c00a067 jal 8002819c <SystemContains_u16> +80022f74: 26250034 addiu a1,s1,52 +80022f78: 96240032 lhu a0,50(s1) + else if( ( (ptrPlayer->SelectTaxiwayParking == true) + || + (ptrPlayer->SelectTaxiwayRunway == true) ) + && + (i != 0) + && +80022f7c: 14400004 bnez v0,80022f90 <Game+0x1480> +80022f80: 3402ffff li v0,0xffff + ( (SystemContains_u16(i, ptrPlayer->Waypoints, PLAYER_MAX_WAYPOINTS) == true) + || +80022f84: 149e000d bne a0,s8,80022fbc <Game+0x14ac> +80022f88: 2402ff80 li v0,-128 + (i == ptrPlayer->SelectedTile) ) + && +80022f8c: 3402ffff li v0,0xffff +80022f90: 10820009 beq a0,v0,80022fb8 <Game+0x14a8> +80022f94: 00000000 nop + (ptrPlayer->SelectedTile != GAME_INVALID_TILE_SELECTION) ) + { + if(ptrPlayer->InvalidPath == true) +80022f98: 92240005 lbu a0,5(s1) +80022f9c: 00000000 nop +80022fa0: 14800070 bnez a0,80023164 <Game+0x1654> +80022fa4: 3c028007 lui v0,0x8007 + ptrTileset->b = NORMAL_LUMINANCE >> 2; + ptrTileset->g = NORMAL_LUMINANCE >> 2; + } + else + { + ptrTileset->r = NORMAL_LUMINANCE >> 2; +80022fa8: 24040020 li a0,32 +80022fac: a2e4000e sb a0,14(s7) + ptrTileset->g = NORMAL_LUMINANCE >> 2; +80022fb0: 10000073 b 80023180 <Game+0x1670> +80022fb4: a2e4000f sb a0,15(s7) + ptrTileset->b = rwy_sine; + } + } + else + { + ptrTileset->r = NORMAL_LUMINANCE; +80022fb8: 2402ff80 li v0,-128 +80022fbc: a2e2000e sb v0,14(s7) + ptrTileset->g = NORMAL_LUMINANCE; +80022fc0: a2e2000f sb v0,15(s7) + ptrTileset->b = NORMAL_LUMINANCE; +80022fc4: a2e20010 sb v0,16(s7) + } + + if(System100msTick() == true) +80022fc8: 0c009fba jal 80027ee8 <System100msTick> +80022fcc: 00000000 nop +80022fd0: 10400014 beqz v0,80023024 <Game+0x1514> +80022fd4: 3c058007 lui a1,0x8007 + { + if(rwy_sine_decrease == false) +80022fd8: 90a41c00 lbu a0,7168(a1) +80022fdc: 00000000 nop +80022fe0: 14800008 bnez a0,80023004 <Game+0x14f4> +80022fe4: 3c028007 lui v0,0x8007 + { + if(rwy_sine < 255) +80022fe8: 90441c01 lbu a0,7169(v0) +80022fec: 240600ff li a2,255 +80022ff0: 14860009 bne a0,a2,80023018 <Game+0x1508> +80022ff4: 24840001 addiu a0,a0,1 + { + rwy_sine++; + } + else + { + rwy_sine_decrease = true; +80022ff8: 24020001 li v0,1 +80022ffc: 10000009 b 80023024 <Game+0x1514> +80023000: a0a21c00 sb v0,7168(a1) + } + } + else + { + if(rwy_sine > (NORMAL_LUMINANCE >> 2)) +80023004: 90441c01 lbu a0,7169(v0) +80023008: 00000000 nop +8002300c: 2c860021 sltiu a2,a0,33 +80023010: 14c00003 bnez a2,80023020 <Game+0x1510> +80023014: 2484ffff addiu a0,a0,-1 + { + rwy_sine--; +80023018: 10000002 b 80023024 <Game+0x1514> +8002301c: a0441c01 sb a0,7169(v0) + } + else + { + rwy_sine_decrease = false; +80023020: a0a01c00 sb zero,7168(a1) + } + } + } + + // TODO: Isometric -> Cartesian conversion + tileIsoPos.x = columns << (TILE_SIZE_BIT_SHIFT); +80023024: 00131180 sll v0,s3,0x6 +80023028: a7a20010 sh v0,16(sp) + tileIsoPos.y = rows << (TILE_SIZE_BIT_SHIFT); + tileIsoPos.z = 0; + + tileCartPos = GfxIsometricToCartesian(&tileIsoPos); +8002302c: 27a40050 addiu a0,sp,80 + } + } + + // TODO: Isometric -> Cartesian conversion + tileIsoPos.x = columns << (TILE_SIZE_BIT_SHIFT); + tileIsoPos.y = rows << (TILE_SIZE_BIT_SHIFT); +80023030: 00151180 sll v0,s5,0x6 + tileIsoPos.z = 0; + + tileCartPos = GfxIsometricToCartesian(&tileIsoPos); +80023034: 27a50010 addiu a1,sp,16 + } + } + + // TODO: Isometric -> Cartesian conversion + tileIsoPos.x = columns << (TILE_SIZE_BIT_SHIFT); + tileIsoPos.y = rows << (TILE_SIZE_BIT_SHIFT); +80023038: a7a20012 sh v0,18(sp) + tileIsoPos.z = 0; + + tileCartPos = GfxIsometricToCartesian(&tileIsoPos); +8002303c: 0c0091ac jal 800246b0 <GfxIsometricToCartesian> +80023040: a7a00014 sh zero,20(sp) + + ptrTileset->x = tileCartPos.x; + ptrTileset->y = tileCartPos.y; +80023044: 87a20052 lh v0,82(sp) + + // Set coordinate origin to left upper corner + ptrTileset->x -= TILE_SIZE >> 1; +80023048: 97a40050 lhu a0,80(sp) + ptrTileset->y -= TILE_SIZE >> 2; +8002304c: 2442fff0 addiu v0,v0,-16 +80023050: a6e20002 sh v0,2(s7) + ptrTileset->x -= rows << (TILE_SIZE_BIT_SHIFT - 1); + + ptrTileset->y = rows << (TILE_SIZE_BIT_SHIFT - 2); + ptrTileset->y += columns << (TILE_SIZE_BIT_SHIFT - 2);*/ + + if(columns < GameLevelColumns -1 ) +80023054: 3c028007 lui v0,0x8007 +80023058: 90421c12 lbu v0,7186(v0) + + ptrTileset->x = tileCartPos.x; + ptrTileset->y = tileCartPos.y; + + // Set coordinate origin to left upper corner + ptrTileset->x -= TILE_SIZE >> 1; +8002305c: 2484ffe0 addiu a0,a0,-32 + ptrTileset->x -= rows << (TILE_SIZE_BIT_SHIFT - 1); + + ptrTileset->y = rows << (TILE_SIZE_BIT_SHIFT - 2); + ptrTileset->y += columns << (TILE_SIZE_BIT_SHIFT - 2);*/ + + if(columns < GameLevelColumns -1 ) +80023060: 2442ffff addiu v0,v0,-1 +80023064: 0262102a slt v0,s3,v0 +80023068: 10400004 beqz v0,8002307c <Game+0x156c> +8002306c: a6e40000 sh a0,0(s7) + { + columns++; +80023070: 26730001 addiu s3,s3,1 +80023074: 10000004 b 80023088 <Game+0x1578> +80023078: 327300ff andi s3,s3,0xff + } + else + { + rows++; +8002307c: 26b50001 addiu s5,s5,1 +80023080: 32b500ff andi s5,s5,0xff + columns = 0; +80023084: 00009821 move s3,zero + } + + if(ptrTileset != NULL) + { + if(flip_id == true) +80023088: 12c00005 beqz s6,800230a0 <Game+0x1590> +8002308c: 00000000 nop + { + ptrTileset->attribute |= H_FLIP; +80023090: 8ee20014 lw v0,20(s7) +80023094: 00000000 nop +80023098: 34420020 ori v0,v0,0x20 +8002309c: aee20014 sw v0,20(s7) + } + } + + ptrTileset->u = (short)(GameLevelBuffer[i] % COLUMNS_PER_TILESET)<<TILE_SIZE_BIT_SHIFT; +800230a0: 8fa20088 lw v0,136(sp) +800230a4: 00000000 nop +800230a8: 005e2021 addu a0,v0,s8 +800230ac: 90820000 lbu v0,0(a0) +800230b0: 00000000 nop +800230b4: 00022980 sll a1,v0,0x6 + ptrTileset->v = (short)(GameLevelBuffer[i] / COLUMNS_PER_TILESET)<<TILE_SIZE_BIT_SHIFT; +800230b8: 00021082 srl v0,v0,0x2 +800230bc: 00021180 sll v0,v0,0x6 + { + ptrTileset->attribute |= H_FLIP; + } + } + + ptrTileset->u = (short)(GameLevelBuffer[i] % COLUMNS_PER_TILESET)<<TILE_SIZE_BIT_SHIFT; +800230c0: a2e50004 sb a1,4(s7) + ptrTileset->v = (short)(GameLevelBuffer[i] / COLUMNS_PER_TILESET)<<TILE_SIZE_BIT_SHIFT; + + if(flip_id == true) +800230c4: 12c00004 beqz s6,800230d8 <Game+0x15c8> +800230c8: a2e20005 sb v0,5(s7) + { + flip_id = false; + GameLevelBuffer[i] = aux_id; +800230cc: 93a20090 lbu v0,144(sp) +800230d0: 00000000 nop +800230d4: a0820000 sb v0,0(a0) + } + + // dprintf("Tile %d, attribute 0x%X\n",i,ptrTileset->attribute); + + CameraApplyCoordinatesToSprite(ptrPlayer, ptrTileset); +800230d8: 02e02821 move a1,s7 +800230dc: 0c00825d jal 80020974 <CameraApplyCoordinatesToSprite> +800230e0: 02202021 move a0,s1 + GfxSortSprite(ptrTileset); +800230e4: 0c0090d2 jal 80024348 <GfxSortSprite> +800230e8: 02e02021 move a0,s7 + + if(ptrTileset->attribute & H_FLIP) +800230ec: 8ee20014 lw v0,20(s7) +800230f0: 00000000 nop +800230f4: 30440020 andi a0,v0,0x20 +800230f8: 10800005 beqz a0,80023110 <Game+0x1600> +800230fc: 27c70001 addiu a3,s8,1 + { + ptrTileset->attribute &= ~(H_FLIP); +80023100: 2404ffdf li a0,-33 +80023104: 00441024 and v0,v0,a0 +80023108: aee20014 sw v0,20(s7) + } + + dprintf("\n");*/ + } + + for(i = 0 ; i < GameLevelSize; i++) +8002310c: 27c70001 addiu a3,s8,1 +80023110: 1000ff36 b 80022dec <Game+0x12dc> +80023114: 30feffff andi s8,a3,0xffff + { + ptrTileset->attribute &= ~(H_FLIP); + } + } + + if( (ptrPlayer->SelectTaxiwayParking == true) +80023118: 92220004 lbu v0,4(s1) +8002311c: 00000000 nop +80023120: 14400005 bnez v0,80023138 <Game+0x1628> +80023124: 3c048004 lui a0,0x8004 + || +80023128: 92220003 lbu v0,3(s1) +8002312c: 00000000 nop +80023130: 10400003 beqz v0,80023140 <Game+0x1630> +80023134: 00000000 nop + (ptrPlayer->SelectTaxiwayRunway == true) ) + { + GfxSortSprite(&GameMouseSpr); +80023138: 0c0090d2 jal 80024348 <GfxSortSprite> +8002313c: 24843a28 addiu a0,a0,14888 + for(i = 0; i < MAX_PLAYERS ; i++) + { + if(PlayerData[i].Active == true) + { + GameRenderLevel(&PlayerData[i]); + AircraftRender(&PlayerData[i]); +80023140: 0c0081be jal 800206f8 <AircraftRender> +80023144: 02202021 move a0,s1 +80023148: 1000fbf3 b 80022118 <Game+0x608> +8002314c: 00000000 nop + if(ptrPlayer->PadKeyReleased_Callback(PAD_CIRCLE) == true) + { + if(GameGuiShowAircraftDataSpecialConditions(ptrPlayer) == false) + { + //Invert ptrPlayer->ShowAircraftData value + ptrPlayer->ShowAircraftData = ptrPlayer->ShowAircraftData ? false : true; +80023150: 93c20001 lbu v0,1(s8) +80023154: 00000000 nop +80023158: 38420001 xori v0,v0,0x1 +8002315c: 1000fe97 b 80022bbc <Game+0x10ac> +80023160: a3c20001 sb v0,1(s8) + } + } + + if(used_rwy == true) + { + ptrTileset->r = rwy_sine; +80023164: 90421c01 lbu v0,7169(v0) +80023168: 00000000 nop +8002316c: a2e2000e sb v0,14(s7) + ptrTileset->b = NORMAL_LUMINANCE >> 2; +80023170: 24020020 li v0,32 +80023174: a2e20010 sb v0,16(s7) + ptrTileset->g = NORMAL_LUMINANCE >> 2; +80023178: 1000ff93 b 80022fc8 <Game+0x14b8> +8002317c: a2e2000f sb v0,15(s7) + } + else + { + ptrTileset->r = NORMAL_LUMINANCE >> 2; + ptrTileset->g = NORMAL_LUMINANCE >> 2; + ptrTileset->b = rwy_sine; +80023180: 90421c01 lbu v0,7169(v0) + } + else + { + ptrTileset->r = NORMAL_LUMINANCE; + ptrTileset->g = NORMAL_LUMINANCE; + ptrTileset->b = NORMAL_LUMINANCE; +80023184: 1000ff90 b 80022fc8 <Game+0x14b8> +80023188: a2e20010 sb v0,16(s7) + { + continue; + } + } + + ptrTileset->w = TILE_SIZE; +8002318c: a4000006 sh zero,6(zero) +80023190: 0000000d break + +80023194 <GameGetFirstActiveAircraft>: +} + +uint8_t GameGetFirstActiveAircraft(void) +{ + return firstActiveAircraft; +} +80023194: 3c028007 lui v0,0x8007 +80023198: 90421c0d lbu v0,7181(v0) +8002319c: 03e00008 jr ra +800231a0: 00000000 nop + +800231a4 <GameGetLastActiveAircraft>: + +uint8_t GameGetLastActiveAircraft(void) +{ + return lastActiveAircraft; +} +800231a4: 3c028007 lui v0,0x8007 +800231a8: 90421c0c lbu v0,7180(v0) +800231ac: 03e00008 jr ra +800231b0: 00000000 nop + +800231b4 <GetGameLevelTitle>: +} + +char* GetGameLevelTitle(void) +{ + return GameLevelTitle; +} +800231b4: 3c028004 lui v0,0x8004 +800231b8: 03e00008 jr ra +800231bc: 2442330c addiu v0,v0,13068 + +800231c0 <GameSetTime>: + }*/ +} + +void GameSetTime(uint8_t hour, uint8_t minutes) +{ + GameHour = hour; +800231c0: 3c028007 lui v0,0x8007 +800231c4: a0441c10 sb a0,7184(v0) + GameMinutes = minutes; +800231c8: 3c028007 lui v0,0x8007 +800231cc: 03e00008 jr ra +800231d0: a0451c0f sb a1,7183(v0) + +800231d4 <GameGetXFromTile>: + +fix16_t GameGetXFromTile(uint16_t tile) +{ + fix16_t retVal; + + tile %= GameLevelColumns; +800231d4: 3c028007 lui v0,0x8007 + + retVal = (fix16_t)(tile << TILE_SIZE_BIT_SHIFT); +800231d8: 90421c12 lbu v0,7186(v0) + } + } +} + +fix16_t GameGetXFromTile(uint16_t tile) +{ +800231dc: 3084ffff andi a0,a0,0xffff + fix16_t retVal; + + tile %= GameLevelColumns; + + retVal = (fix16_t)(tile << TILE_SIZE_BIT_SHIFT); +800231e0: 14400002 bnez v0,800231ec <GameGetXFromTile+0x18> +800231e4: 0082001a div zero,a0,v0 +800231e8: 0007000d break 0x7 +800231ec: 00001010 mfhi v0 +800231f0: 3042ffff andi v0,v0,0xffff +800231f4: 00021180 sll v0,v0,0x6 + // Always point to tile center + retVal += TILE_SIZE >> 1; + + retVal = fix16_from_int(retVal); + + return retVal; +800231f8: 24420020 addiu v0,v0,32 +} +800231fc: 03e00008 jr ra +80023200: 00021400 sll v0,v0,0x10 + +80023204 <GameGetYFromTile>: + +fix16_t GameGetYFromTile(uint16_t tile) +{ + fix16_t retVal; + + tile /= GameLevelColumns; +80023204: 3c028007 lui v0,0x8007 + + retVal = (fix16_t)(tile << TILE_SIZE_BIT_SHIFT); +80023208: 90421c12 lbu v0,7186(v0) + + return retVal; +} + +fix16_t GameGetYFromTile(uint16_t tile) +{ +8002320c: 3084ffff andi a0,a0,0xffff + fix16_t retVal; + + tile /= GameLevelColumns; + + retVal = (fix16_t)(tile << TILE_SIZE_BIT_SHIFT); +80023210: 14400002 bnez v0,8002321c <GameGetYFromTile+0x18> +80023214: 0082001a div zero,a0,v0 +80023218: 0007000d break 0x7 +8002321c: 00001012 mflo v0 +80023220: 00021180 sll v0,v0,0x6 + // Always point to tile center + retVal += TILE_SIZE >> 1; + + retVal = fix16_from_int(retVal); + + return retVal; +80023224: 24420020 addiu v0,v0,32 +} +80023228: 03e00008 jr ra +8002322c: 00021400 sll v0,v0,0x10 + +80023230 <GameTargetsReached>: + +void GameTargetsReached(uint8_t index) +{ +80023230: 308400ff andi a0,a0,0xff + switch(FlightData.State[index]) +80023234: 24840080 addiu a0,a0,128 +80023238: 3c028004 lui v0,0x8004 +8002323c: 24423764 addiu v0,v0,14180 +80023240: 00042080 sll a0,a0,0x2 +80023244: 00442021 addu a0,v0,a0 +80023248: 8c830004 lw v1,4(a0) +8002324c: 24020005 li v0,5 +80023250: 14620003 bne v1,v0,80023260 <GameTargetsReached+0x30> +80023254: 00000000 nop + { + case STATE_FINAL: + FlightData.State[index] = STATE_LANDED; +80023258: 24020006 li v0,6 +8002325c: ac820004 sw v0,4(a0) +80023260: 03e00008 jr ra +80023264: 00000000 nop + +80023268 <GameGetLevelColumns>: +} + +uint8_t GameGetLevelColumns(void) +{ + return GameLevelColumns; +} +80023268: 3c028007 lui v0,0x8007 +8002326c: 90421c12 lbu v0,7186(v0) +80023270: 03e00008 jr ra +80023274: 00000000 nop + +80023278 <GameGuiInit>: + +static char strNotificationRequest[NOTIFICATION_BUFFER_SIZE]; + +void GameGuiInit(void) +{ + LoadMenu( GameFileList, +80023278: 3c058004 lui a1,0x8004 +8002327c: 3c048004 lui a0,0x8004 + (GsSprite*)&ArrowsSpr }; + +static char strNotificationRequest[NOTIFICATION_BUFFER_SIZE]; + +void GameGuiInit(void) +{ +80023280: 27bdffe8 addiu sp,sp,-24 + LoadMenu( GameFileList, +80023284: 24a51448 addiu a1,a1,5192 +80023288: 24841454 addiu a0,a0,5204 +8002328c: 24070003 li a3,3 + (GsSprite*)&ArrowsSpr }; + +static char strNotificationRequest[NOTIFICATION_BUFFER_SIZE]; + +void GameGuiInit(void) +{ +80023290: afbf0014 sw ra,20(sp) + LoadMenu( GameFileList, +80023294: 0c0093c1 jal 80024f04 <LoadMenu> +80023298: 24060003 li a2,3 + GameFileDest, + sizeof(GameFileList) / sizeof(char*), + sizeof(GameFileDest) /sizeof(void*) ); + + PauseRect.x[0] = PAUSE_DIALOG_X; +8002329c: 3c038004 lui v1,0x8004 +800232a0: 24623bcc addiu v0,v1,15308 + PauseRect.y[0] = PAUSE_DIALOG_Y; + PauseRect.y[1] = PAUSE_DIALOG_Y; + PauseRect.y[2] = PAUSE_DIALOG_Y + PAUSE_DIALOG_H; + PauseRect.y[3] = PAUSE_DIALOG_Y + PAUSE_DIALOG_H; + + PauseRect.r[0] = PAUSE_DIALOG_R0; +800232a4: a0603bcc sb zero,15308(v1) + PauseRect.r[1] = PAUSE_DIALOG_R1; + PauseRect.r[2] = PAUSE_DIALOG_R2; + PauseRect.r[3] = PAUSE_DIALOG_R3; + + PauseRect.b[0] = PAUSE_DIALOG_B0; +800232a8: 24030028 li v1,40 +800232ac: a0430008 sb v1,8(v0) + PauseRect.b[1] = PAUSE_DIALOG_B1; +800232b0: a0430009 sb v1,9(v0) + PauseRect.b[2] = PAUSE_DIALOG_B2; + PauseRect.b[3] = PAUSE_DIALOG_B3; + + PauseRect.g[0] = PAUSE_DIALOG_G0; +800232b4: 2403ff80 li v1,-128 + GameFileDest, + sizeof(GameFileList) / sizeof(char*), + sizeof(GameFileDest) /sizeof(void*) ); + + PauseRect.x[0] = PAUSE_DIALOG_X; + PauseRect.x[1] = PAUSE_DIALOG_X + PAUSE_DIALOG_W; +800232b8: 24040124 li a0,292 + PauseRect.b[0] = PAUSE_DIALOG_B0; + PauseRect.b[1] = PAUSE_DIALOG_B1; + PauseRect.b[2] = PAUSE_DIALOG_B2; + PauseRect.b[3] = PAUSE_DIALOG_B3; + + PauseRect.g[0] = PAUSE_DIALOG_G0; +800232bc: a0430004 sb v1,4(v0) + PauseRect.g[1] = PAUSE_DIALOG_G1; +800232c0: a0430005 sb v1,5(v0) + PauseRect.g[2] = PAUSE_DIALOG_G2; + PauseRect.g[3] = PAUSE_DIALOG_G3; + + PauseRect.attribute |= ENABLE_TRANS | TRANS_MODE(0); +800232c4: 8c43001c lw v1,28(v0) +} +800232c8: 8fbf0014 lw ra,20(sp) + GameFileDest, + sizeof(GameFileList) / sizeof(char*), + sizeof(GameFileDest) /sizeof(void*) ); + + PauseRect.x[0] = PAUSE_DIALOG_X; + PauseRect.x[1] = PAUSE_DIALOG_X + PAUSE_DIALOG_W; +800232cc: a444000e sh a0,14(v0) + PauseRect.x[2] = PAUSE_DIALOG_X; + PauseRect.x[3] = PAUSE_DIALOG_X + PAUSE_DIALOG_W; +800232d0: a4440012 sh a0,18(v0) + + PauseRect.y[0] = PAUSE_DIALOG_Y; +800232d4: 2404001c li a0,28 + LoadMenu( GameFileList, + GameFileDest, + sizeof(GameFileList) / sizeof(char*), + sizeof(GameFileDest) /sizeof(void*) ); + + PauseRect.x[0] = PAUSE_DIALOG_X; +800232d8: 2405005c li a1,92 + PauseRect.x[1] = PAUSE_DIALOG_X + PAUSE_DIALOG_W; + PauseRect.x[2] = PAUSE_DIALOG_X; + PauseRect.x[3] = PAUSE_DIALOG_X + PAUSE_DIALOG_W; + + PauseRect.y[0] = PAUSE_DIALOG_Y; +800232dc: a4440014 sh a0,20(v0) + PauseRect.y[1] = PAUSE_DIALOG_Y; +800232e0: a4440016 sh a0,22(v0) + PauseRect.g[0] = PAUSE_DIALOG_G0; + PauseRect.g[1] = PAUSE_DIALOG_G1; + PauseRect.g[2] = PAUSE_DIALOG_G2; + PauseRect.g[3] = PAUSE_DIALOG_G3; + + PauseRect.attribute |= ENABLE_TRANS | TRANS_MODE(0); +800232e4: 34630010 ori v1,v1,0x10 + PauseRect.x[2] = PAUSE_DIALOG_X; + PauseRect.x[3] = PAUSE_DIALOG_X + PAUSE_DIALOG_W; + + PauseRect.y[0] = PAUSE_DIALOG_Y; + PauseRect.y[1] = PAUSE_DIALOG_Y; + PauseRect.y[2] = PAUSE_DIALOG_Y + PAUSE_DIALOG_H; +800232e8: 240400d4 li a0,212 + LoadMenu( GameFileList, + GameFileDest, + sizeof(GameFileList) / sizeof(char*), + sizeof(GameFileDest) /sizeof(void*) ); + + PauseRect.x[0] = PAUSE_DIALOG_X; +800232ec: a445000c sh a1,12(v0) + PauseRect.x[1] = PAUSE_DIALOG_X + PAUSE_DIALOG_W; + PauseRect.x[2] = PAUSE_DIALOG_X; +800232f0: a4450010 sh a1,16(v0) + PauseRect.x[3] = PAUSE_DIALOG_X + PAUSE_DIALOG_W; + + PauseRect.y[0] = PAUSE_DIALOG_Y; + PauseRect.y[1] = PAUSE_DIALOG_Y; + PauseRect.y[2] = PAUSE_DIALOG_Y + PAUSE_DIALOG_H; +800232f4: a4440018 sh a0,24(v0) + PauseRect.y[3] = PAUSE_DIALOG_Y + PAUSE_DIALOG_H; +800232f8: a444001a sh a0,26(v0) + + PauseRect.r[0] = PAUSE_DIALOG_R0; + PauseRect.r[1] = PAUSE_DIALOG_R1; +800232fc: a0400001 sb zero,1(v0) + PauseRect.r[2] = PAUSE_DIALOG_R2; +80023300: a0400002 sb zero,2(v0) + PauseRect.r[3] = PAUSE_DIALOG_R3; +80023304: a0400003 sb zero,3(v0) + + PauseRect.b[0] = PAUSE_DIALOG_B0; + PauseRect.b[1] = PAUSE_DIALOG_B1; + PauseRect.b[2] = PAUSE_DIALOG_B2; +80023308: a040000a sb zero,10(v0) + PauseRect.b[3] = PAUSE_DIALOG_B3; +8002330c: a040000b sb zero,11(v0) + + PauseRect.g[0] = PAUSE_DIALOG_G0; + PauseRect.g[1] = PAUSE_DIALOG_G1; + PauseRect.g[2] = PAUSE_DIALOG_G2; +80023310: a0400006 sb zero,6(v0) + PauseRect.g[3] = PAUSE_DIALOG_G3; +80023314: a0400007 sb zero,7(v0) + + PauseRect.attribute |= ENABLE_TRANS | TRANS_MODE(0); +80023318: ac43001c sw v1,28(v0) +} +8002331c: 03e00008 jr ra +80023320: 27bd0018 addiu sp,sp,24 + +80023324 <GameGuiAircraftNotificationRequest>: + uint8_t i; + static uint16_t NotificationTimer; + static uint8_t FirstNotification; + bool first_entered = true; + + if(GameStartupFlag == true) +80023324: 3c028007 lui v0,0x8007 +80023328: 90421d24 lbu v0,7460(v0) + + PauseRect.attribute |= ENABLE_TRANS | TRANS_MODE(0); +} + +void GameGuiAircraftNotificationRequest(TYPE_FLIGHT_DATA * ptrFlightData) +{ +8002332c: 27bdffc8 addiu sp,sp,-56 +80023330: afb30020 sw s3,32(sp) +80023334: afbf0034 sw ra,52(sp) +80023338: afb70030 sw s7,48(sp) +8002333c: afb6002c sw s6,44(sp) +80023340: afb50028 sw s5,40(sp) +80023344: afb40024 sw s4,36(sp) +80023348: afb2001c sw s2,28(sp) +8002334c: afb10018 sw s1,24(sp) +80023350: afb00014 sw s0,20(sp) + uint8_t i; + static uint16_t NotificationTimer; + static uint8_t FirstNotification; + bool first_entered = true; + + if(GameStartupFlag == true) +80023354: 10400004 beqz v0,80023368 <GameGuiAircraftNotificationRequest+0x44> +80023358: 3c138007 lui s3,0x8007 + { + // Set initial values to static variables + NotificationTimer = 0; +8002335c: 3c028007 lui v0,0x8007 +80023360: a4401c20 sh zero,7200(v0) + FirstNotification = 0; +80023364: a2601c1e sb zero,7198(s3) + } + + for(i = FirstNotification; i < ptrFlightData->nAircraft ; i++) +80023368: 92711c1e lbu s1,7198(s3) +8002336c: 90830200 lbu v1,512(a0) +80023370: 00000000 nop +80023374: 0223102b sltu v0,s1,v1 +80023378: 10400078 beqz v0,8002355c <GameGuiAircraftNotificationRequest+0x238> +8002337c: 00913021 addu a2,a0,s1 + { + if(ptrFlightData->NotificationRequest[i] == true) +80023380: 90c20284 lbu v0,644(a2) +80023384: 00000000 nop +80023388: 10400072 beqz v0,80023554 <GameGuiAircraftNotificationRequest+0x230> +8002338c: 26310001 addiu s1,s1,1 +80023390: 2631ffff addiu s1,s1,-1 + { + // Prepare RGB data and (X,Y) coordinates for notification + // request rectangle. + NotificationGPoly4.r[0] = NOTIFICATION_GSGPOLY4_R0; +80023394: 3c158004 lui s5,0x8004 + NotificationGPoly4.r[1] = NOTIFICATION_GSGPOLY4_R1; +80023398: 26a23c58 addiu v0,s5,15448 + NotificationGPoly4.r[2] = NOTIFICATION_GSGPOLY4_R2; + NotificationGPoly4.r[3] = NOTIFICATION_GSGPOLY4_R3; + + NotificationGPoly4.g[0] = NOTIFICATION_GSGPOLY4_G0; +8002339c: 2403ff80 li v1,-128 +800233a0: a0430004 sb v1,4(v0) + NotificationGPoly4.g[1] = NOTIFICATION_GSGPOLY4_G1; +800233a4: a0430005 sb v1,5(v0) + NotificationGPoly4.g[2] = NOTIFICATION_GSGPOLY4_G2; + NotificationGPoly4.g[3] = NOTIFICATION_GSGPOLY4_G3; + + NotificationGPoly4.b[0] = NOTIFICATION_GSGPOLY4_B0; +800233a8: 24030028 li v1,40 +800233ac: a0430008 sb v1,8(v0) + NotificationGPoly4.b[1] = NOTIFICATION_GSGPOLY4_B1; +800233b0: a0430009 sb v1,9(v0) + NotificationGPoly4.b[2] = NOTIFICATION_GSGPOLY4_B2; + NotificationGPoly4.b[3] = NOTIFICATION_GSGPOLY4_B3; + + NotificationGPoly4.attribute |= ENABLE_TRANS | TRANS_MODE(0); +800233b4: 8c43001c lw v1,28(v0) + + NotificationGPoly4.x[0] = NOTIFICATION_GSGPOLY4_X0; +800233b8: 24050010 li a1,16 + NotificationGPoly4.b[0] = NOTIFICATION_GSGPOLY4_B0; + NotificationGPoly4.b[1] = NOTIFICATION_GSGPOLY4_B1; + NotificationGPoly4.b[2] = NOTIFICATION_GSGPOLY4_B2; + NotificationGPoly4.b[3] = NOTIFICATION_GSGPOLY4_B3; + + NotificationGPoly4.attribute |= ENABLE_TRANS | TRANS_MODE(0); +800233bc: 34630010 ori v1,v1,0x10 +800233c0: ac43001c sw v1,28(v0) + + NotificationGPoly4.x[0] = NOTIFICATION_GSGPOLY4_X0; + NotificationGPoly4.x[1] = NOTIFICATION_GSGPOLY4_X1; +800233c4: 24030160 li v1,352 +800233c8: a443000e sh v1,14(v0) + NotificationGPoly4.x[2] = NOTIFICATION_GSGPOLY4_X2; + NotificationGPoly4.x[3] = NOTIFICATION_GSGPOLY4_X3; +800233cc: a4430012 sh v1,18(v0) + + NotificationGPoly4.y[0] = NOTIFICATION_GSGPOLY4_Y0; +800233d0: 240300a8 li v1,168 + NotificationGPoly4.b[2] = NOTIFICATION_GSGPOLY4_B2; + NotificationGPoly4.b[3] = NOTIFICATION_GSGPOLY4_B3; + + NotificationGPoly4.attribute |= ENABLE_TRANS | TRANS_MODE(0); + + NotificationGPoly4.x[0] = NOTIFICATION_GSGPOLY4_X0; +800233d4: a445000c sh a1,12(v0) + NotificationGPoly4.x[1] = NOTIFICATION_GSGPOLY4_X1; + NotificationGPoly4.x[2] = NOTIFICATION_GSGPOLY4_X2; +800233d8: a4450010 sh a1,16(v0) + NotificationGPoly4.x[3] = NOTIFICATION_GSGPOLY4_X3; + + NotificationGPoly4.y[0] = NOTIFICATION_GSGPOLY4_Y0; +800233dc: a4430014 sh v1,20(v0) + NotificationGPoly4.y[2] = NOTIFICATION_GSGPOLY4_Y2; + NotificationGPoly4.y[3] = NOTIFICATION_GSGPOLY4_Y3; + + /* dprintf("Notification timer: %d.\n",NotificationTimer); */ + + if(++NotificationTimer >= NOTIFICATION_TIMER_LIMIT) +800233e0: 3c058007 lui a1,0x8007 + NotificationGPoly4.x[1] = NOTIFICATION_GSGPOLY4_X1; + NotificationGPoly4.x[2] = NOTIFICATION_GSGPOLY4_X2; + NotificationGPoly4.x[3] = NOTIFICATION_GSGPOLY4_X3; + + NotificationGPoly4.y[0] = NOTIFICATION_GSGPOLY4_Y0; + NotificationGPoly4.y[1] = NOTIFICATION_GSGPOLY4_Y1; +800233e4: a4430016 sh v1,22(v0) + NotificationGPoly4.y[2] = NOTIFICATION_GSGPOLY4_Y2; +800233e8: 240300e8 li v1,232 +800233ec: a4430018 sh v1,24(v0) + NotificationGPoly4.y[3] = NOTIFICATION_GSGPOLY4_Y3; +800233f0: a443001a sh v1,26(v0) + + /* dprintf("Notification timer: %d.\n",NotificationTimer); */ + + if(++NotificationTimer >= NOTIFICATION_TIMER_LIMIT) +800233f4: 94a31c20 lhu v1,7200(a1) + { + if(ptrFlightData->NotificationRequest[i] == true) + { + // Prepare RGB data and (X,Y) coordinates for notification + // request rectangle. + NotificationGPoly4.r[0] = NOTIFICATION_GSGPOLY4_R0; +800233f8: a2a03c58 sb zero,15448(s5) + NotificationGPoly4.y[2] = NOTIFICATION_GSGPOLY4_Y2; + NotificationGPoly4.y[3] = NOTIFICATION_GSGPOLY4_Y3; + + /* dprintf("Notification timer: %d.\n",NotificationTimer); */ + + if(++NotificationTimer >= NOTIFICATION_TIMER_LIMIT) +800233fc: 24630001 addiu v1,v1,1 +80023400: 3063ffff andi v1,v1,0xffff +80023404: a4a31c20 sh v1,7200(a1) +80023408: 2c6300fa sltiu v1,v1,250 + if(ptrFlightData->NotificationRequest[i] == true) + { + // Prepare RGB data and (X,Y) coordinates for notification + // request rectangle. + NotificationGPoly4.r[0] = NOTIFICATION_GSGPOLY4_R0; + NotificationGPoly4.r[1] = NOTIFICATION_GSGPOLY4_R1; +8002340c: a0400001 sb zero,1(v0) + NotificationGPoly4.r[2] = NOTIFICATION_GSGPOLY4_R2; +80023410: a0400002 sb zero,2(v0) + NotificationGPoly4.r[3] = NOTIFICATION_GSGPOLY4_R3; +80023414: a0400003 sb zero,3(v0) + + NotificationGPoly4.g[0] = NOTIFICATION_GSGPOLY4_G0; + NotificationGPoly4.g[1] = NOTIFICATION_GSGPOLY4_G1; + NotificationGPoly4.g[2] = NOTIFICATION_GSGPOLY4_G2; +80023418: a0400006 sb zero,6(v0) + NotificationGPoly4.g[3] = NOTIFICATION_GSGPOLY4_G3; +8002341c: a0400007 sb zero,7(v0) + + NotificationGPoly4.b[0] = NOTIFICATION_GSGPOLY4_B0; + NotificationGPoly4.b[1] = NOTIFICATION_GSGPOLY4_B1; + NotificationGPoly4.b[2] = NOTIFICATION_GSGPOLY4_B2; +80023420: a040000a sb zero,10(v0) + NotificationGPoly4.b[3] = NOTIFICATION_GSGPOLY4_B3; +80023424: a040000b sb zero,11(v0) + NotificationGPoly4.y[2] = NOTIFICATION_GSGPOLY4_Y2; + NotificationGPoly4.y[3] = NOTIFICATION_GSGPOLY4_Y3; + + /* dprintf("Notification timer: %d.\n",NotificationTimer); */ + + if(++NotificationTimer >= NOTIFICATION_TIMER_LIMIT) +80023428: 14600005 bnez v1,80023440 <GameGuiAircraftNotificationRequest+0x11c> +8002342c: 00408021 move s0,v0 + { + // Reset timer and notification request for current aircraft + FirstNotification = 0; +80023430: a2601c1e sb zero,7198(s3) + NotificationTimer = 0; +80023434: a4a01c20 sh zero,7200(a1) +80023438: 10000048 b 8002355c <GameGuiAircraftNotificationRequest+0x238> +8002343c: a0c00284 sb zero,644(a2) + { + if(first_entered == true) + { + // Prepare string for new notification request only once + first_entered = false; + RadioFont.max_ch_wrap = 18; +80023440: 3c178007 lui s7,0x8007 +80023444: 26e28d78 addiu v0,s7,-29320 +80023448: 24030012 li v1,18 +8002344c: a0430032 sb v1,50(v0) +void GameGuiPrepareNotificationString(TYPE_FLIGHT_DATA * ptrFlightData, uint8_t offset) +{ + memset(strNotificationRequest,0,NOTIFICATION_BUFFER_SIZE); + strncat( strNotificationRequest, + ptrFlightData->strFlightNumber[offset], + strlen(ptrFlightData->strFlightNumber[offset]) ); +80023450: 26340010 addiu s4,s1,16 + if(first_entered == true) + { + // Prepare string for new notification request only once + first_entered = false; + RadioFont.max_ch_wrap = 18; + RadioFont.flags |= FONT_WRAP_LINE; +80023454: 8c430034 lw v1,52(v0) +80023458: 0080b021 move s6,a0 + //dprintf("Bubble timer: %d\n",BubbleVibrationTimer); +} + +void GameGuiPrepareNotificationString(TYPE_FLIGHT_DATA * ptrFlightData, uint8_t offset) +{ + memset(strNotificationRequest,0,NOTIFICATION_BUFFER_SIZE); +8002345c: 3c128004 lui s2,0x8004 + strncat( strNotificationRequest, + ptrFlightData->strFlightNumber[offset], + strlen(ptrFlightData->strFlightNumber[offset]) ); +80023460: 0014a0c0 sll s4,s4,0x3 + if(first_entered == true) + { + // Prepare string for new notification request only once + first_entered = false; + RadioFont.max_ch_wrap = 18; + RadioFont.flags |= FONT_WRAP_LINE; +80023464: 34630002 ori v1,v1,0x2 + //dprintf("Bubble timer: %d\n",BubbleVibrationTimer); +} + +void GameGuiPrepareNotificationString(TYPE_FLIGHT_DATA * ptrFlightData, uint8_t offset) +{ + memset(strNotificationRequest,0,NOTIFICATION_BUFFER_SIZE); +80023468: 240600c8 li a2,200 +8002346c: 00002821 move a1,zero + strncat( strNotificationRequest, + ptrFlightData->strFlightNumber[offset], + strlen(ptrFlightData->strFlightNumber[offset]) ); +80023470: 02d4a021 addu s4,s6,s4 + //dprintf("Bubble timer: %d\n",BubbleVibrationTimer); +} + +void GameGuiPrepareNotificationString(TYPE_FLIGHT_DATA * ptrFlightData, uint8_t offset) +{ + memset(strNotificationRequest,0,NOTIFICATION_BUFFER_SIZE); +80023474: 26443ad8 addiu a0,s2,15064 +80023478: 0c00d7ab jal 80035eac <memset> +8002347c: ac430034 sw v1,52(v0) + strncat( strNotificationRequest, + ptrFlightData->strFlightNumber[offset], + strlen(ptrFlightData->strFlightNumber[offset]) ); +80023480: 0c00d8af jal 800362bc <strlen> +80023484: 02802021 move a0,s4 +} + +void GameGuiPrepareNotificationString(TYPE_FLIGHT_DATA * ptrFlightData, uint8_t offset) +{ + memset(strNotificationRequest,0,NOTIFICATION_BUFFER_SIZE); + strncat( strNotificationRequest, +80023488: 00403021 move a2,v0 +8002348c: 02802821 move a1,s4 +80023490: 0c00dc6e jal 800371b8 <strncat> +80023494: 26443ad8 addiu a0,s2,15064 + ptrFlightData->strFlightNumber[offset], + strlen(ptrFlightData->strFlightNumber[offset]) ); + + strcat(strNotificationRequest, " request for "); +80023498: 3c058004 lui a1,0x8004 +8002349c: 26443ad8 addiu a0,s2,15064 +800234a0: 0c00dc56 jal 80037158 <strcat> +800234a4: 24a506bc addiu a1,a1,1724 + + switch(ptrFlightData->FlightDirection[offset]) +800234a8: 00112080 sll a0,s1,0x2 +800234ac: 02c42021 addu a0,s6,a0 +800234b0: 8c820000 lw v0,0(a0) +800234b4: 24030001 li v1,1 +800234b8: 10430006 beq v0,v1,800234d4 <GameGuiAircraftNotificationRequest+0x1b0> +800234bc: 02e0a021 move s4,s7 +800234c0: 24030002 li v1,2 +800234c4: 14430007 bne v0,v1,800234e4 <GameGuiAircraftNotificationRequest+0x1c0> +800234c8: 3c058004 lui a1,0x8004 + { + case DEPARTURE: + strcat(strNotificationRequest, "departure"); + break; + case ARRIVAL: + strcat(strNotificationRequest, "approach"); +800234cc: 10000003 b 800234dc <GameGuiAircraftNotificationRequest+0x1b8> +800234d0: 24a506d8 addiu a1,a1,1752 + strcat(strNotificationRequest, " request for "); + + switch(ptrFlightData->FlightDirection[offset]) + { + case DEPARTURE: + strcat(strNotificationRequest, "departure"); +800234d4: 3c058004 lui a1,0x8004 +800234d8: 24a506cc addiu a1,a1,1740 + break; + case ARRIVAL: + strcat(strNotificationRequest, "approach"); +800234dc: 0c00dc56 jal 80037158 <strcat> +800234e0: 26443ad8 addiu a0,s2,15064 + break; + } + + strcat(strNotificationRequest, "."); +800234e4: 3c058004 lui a1,0x8004 +800234e8: 24a506e4 addiu a1,a1,1764 +800234ec: 0c00dc56 jal 80037158 <strcat> +800234f0: 26443ad8 addiu a0,s2,15064 + } + + // Keep information about last aircraft notified... + // so that it gets called on next cycle + FirstNotification = i; + GsSortGPoly4(&NotificationGPoly4); +800234f4: 26a43c58 addiu a0,s5,15448 +800234f8: 0c00b0e6 jal 8002c398 <GsSortGPoly4> +800234fc: a2711c1e sb s1,7198(s3) + FontPrintText( &RadioFont, +80023500: 96060014 lhu a2,20(s0) +80023504: 9605000c lhu a1,12(s0) +80023508: 24c60008 addiu a2,a2,8 +8002350c: 24a50008 addiu a1,a1,8 + } + + break; + } + } +} +80023510: 8fbf0034 lw ra,52(sp) +80023514: 8fb70030 lw s7,48(sp) +80023518: 8fb6002c lw s6,44(sp) +8002351c: 8fb50028 lw s5,40(sp) +80023520: 8fb30020 lw s3,32(sp) +80023524: 8fb10018 lw s1,24(sp) +80023528: 8fb00014 lw s0,20(sp) + + // Keep information about last aircraft notified... + // so that it gets called on next cycle + FirstNotification = i; + GsSortGPoly4(&NotificationGPoly4); + FontPrintText( &RadioFont, +8002352c: 26473ad8 addiu a3,s2,15064 +80023530: 00063400 sll a2,a2,0x10 + } + + break; + } + } +} +80023534: 8fb2001c lw s2,28(sp) + + // Keep information about last aircraft notified... + // so that it gets called on next cycle + FirstNotification = i; + GsSortGPoly4(&NotificationGPoly4); + FontPrintText( &RadioFont, +80023538: 00052c00 sll a1,a1,0x10 +8002353c: 26848d78 addiu a0,s4,-29320 + } + + break; + } + } +} +80023540: 8fb40024 lw s4,36(sp) + + // Keep information about last aircraft notified... + // so that it gets called on next cycle + FirstNotification = i; + GsSortGPoly4(&NotificationGPoly4); + FontPrintText( &RadioFont, +80023544: 00063403 sra a2,a2,0x10 +80023548: 00052c03 sra a1,a1,0x10 +8002354c: 08008451 j 80021144 <FontPrintText> +80023550: 27bd0038 addiu sp,sp,56 + // Set initial values to static variables + NotificationTimer = 0; + FirstNotification = 0; + } + + for(i = FirstNotification; i < ptrFlightData->nAircraft ; i++) +80023554: 1000ff87 b 80023374 <GameGuiAircraftNotificationRequest+0x50> +80023558: 323100ff andi s1,s1,0xff + } + + break; + } + } +} +8002355c: 8fbf0034 lw ra,52(sp) +80023560: 8fb70030 lw s7,48(sp) +80023564: 8fb6002c lw s6,44(sp) +80023568: 8fb50028 lw s5,40(sp) +8002356c: 8fb40024 lw s4,36(sp) +80023570: 8fb30020 lw s3,32(sp) +80023574: 8fb2001c lw s2,28(sp) +80023578: 8fb10018 lw s1,24(sp) +8002357c: 8fb00014 lw s0,20(sp) +80023580: 03e00008 jr ra +80023584: 27bd0038 addiu sp,sp,56 + +80023588 <GameGuiPauseDialog>: + +bool GameGuiPauseDialog(TYPE_PLAYER * ptrPlayer) +{ +80023588: 27bdffc8 addiu sp,sp,-56 +8002358c: afb00024 sw s0,36(sp) + GfxSaveDisplayData(&SecondDisplay); +80023590: 3c108004 lui s0,0x8004 + } + } +} + +bool GameGuiPauseDialog(TYPE_PLAYER * ptrPlayer) +{ +80023594: afb30030 sw s3,48(sp) +80023598: 00809821 move s3,a0 + GfxSaveDisplayData(&SecondDisplay); +8002359c: 26043ba0 addiu a0,s0,15264 + } + } +} + +bool GameGuiPauseDialog(TYPE_PLAYER * ptrPlayer) +{ +800235a0: afbf0034 sw ra,52(sp) +800235a4: afb2002c sw s2,44(sp) + GfxSaveDisplayData(&SecondDisplay); +800235a8: 0c009090 jal 80024240 <GfxSaveDisplayData> +800235ac: afb10028 sw s1,40(sp) + + DrawFBRect(0, 0, X_SCREEN_RESOLUTION, VRAM_H, 0, 0, 0); +800235b0: afa00018 sw zero,24(sp) +800235b4: afa00014 sw zero,20(sp) +800235b8: afa00010 sw zero,16(sp) +800235bc: 24070200 li a3,512 +800235c0: 24060180 li a2,384 +800235c4: 00002821 move a1,zero +800235c8: 0c00bd2f jal 8002f4bc <DrawFBRect> +800235cc: 00002021 move a0,zero + + while(GfxIsGPUBusy() == true); +800235d0: 0c00901d jal 80024074 <GfxIsGPUBusy> +800235d4: 00000000 nop +800235d8: 1440fffd bnez v0,800235d0 <GameGuiPauseDialog+0x48> +800235dc: 00000000 nop + return true; + } + + GfxSortSprite(&SecondDisplay); + + GsSortGPoly4(&PauseRect); +800235e0: 3c118004 lui s1,0x8004 + if(ptrPlayer->PadKeyReleased_Callback(PAD_CROSS) == true) + { + return true; + } + + GfxSortSprite(&SecondDisplay); +800235e4: 26103ba0 addiu s0,s0,15264 + + GsSortGPoly4(&PauseRect); +800235e8: 26313bcc addiu s1,s1,15308 + + while(GfxIsGPUBusy() == true); + + do + { + if(ptrPlayer->PadKeyReleased_Callback(PAD_CROSS) == true) +800235ec: 8e62007c lw v0,124(s3) +800235f0: 00000000 nop +800235f4: 0040f809 jalr v0 +800235f8: 24040040 li a0,64 +800235fc: 1440000d bnez v0,80023634 <GameGuiPauseDialog+0xac> +80023600: 00409021 move s2,v0 + { + return true; + } + + GfxSortSprite(&SecondDisplay); +80023604: 0c0090d2 jal 80024348 <GfxSortSprite> +80023608: 02002021 move a0,s0 + + GsSortGPoly4(&PauseRect); +8002360c: 0c00b0e6 jal 8002c398 <GsSortGPoly4> +80023610: 02202021 move a0,s1 + + GfxDrawScene_Slow(); +80023614: 0c009030 jal 800240c0 <GfxDrawScene_Slow> +80023618: 00000000 nop + + }while(ptrPlayer->PadKeyReleased_Callback(PAD_START) == false); +8002361c: 8e62007c lw v0,124(s3) +80023620: 00000000 nop +80023624: 0040f809 jalr v0 +80023628: 24040800 li a0,2048 +8002362c: 1040ffef beqz v0,800235ec <GameGuiPauseDialog+0x64> +80023630: 00000000 nop + + return false; +} +80023634: 8fbf0034 lw ra,52(sp) +80023638: 02401021 move v0,s2 +8002363c: 8fb30030 lw s3,48(sp) +80023640: 8fb2002c lw s2,44(sp) +80023644: 8fb10028 lw s1,40(sp) +80023648: 8fb00024 lw s0,36(sp) +8002364c: 03e00008 jr ra +80023650: 27bd0038 addiu sp,sp,56 + +80023654 <GameGuiActiveAircraftList>: + +void GameGuiActiveAircraftList(TYPE_PLAYER * ptrPlayer, TYPE_FLIGHT_DATA * ptrFlightData) +{ +80023654: 27bdffe0 addiu sp,sp,-32 + uint8_t i; + uint8_t j = 0; + + // Clear all pointers for aircraft data first. + // Then, rebuild aircraft list for player. + memset(ptrPlayer->ActiveAircraftList, 0, GAME_MAX_AIRCRAFT); +80023658: 24060020 li a2,32 + + return false; +} + +void GameGuiActiveAircraftList(TYPE_PLAYER * ptrPlayer, TYPE_FLIGHT_DATA * ptrFlightData) +{ +8002365c: afb10018 sw s1,24(sp) +80023660: afb00014 sw s0,20(sp) +80023664: 00808821 move s1,a0 +80023668: 00a08021 move s0,a1 + uint8_t i; + uint8_t j = 0; + + // Clear all pointers for aircraft data first. + // Then, rebuild aircraft list for player. + memset(ptrPlayer->ActiveAircraftList, 0, GAME_MAX_AIRCRAFT); +8002366c: 24840007 addiu a0,a0,7 + + return false; +} + +void GameGuiActiveAircraftList(TYPE_PLAYER * ptrPlayer, TYPE_FLIGHT_DATA * ptrFlightData) +{ +80023670: afbf001c sw ra,28(sp) + uint8_t i; + uint8_t j = 0; + + // Clear all pointers for aircraft data first. + // Then, rebuild aircraft list for player. + memset(ptrPlayer->ActiveAircraftList, 0, GAME_MAX_AIRCRAFT); +80023674: 0c00d7ab jal 80035eac <memset> +80023678: 00002821 move a1,zero + ptrPlayer->ActiveAircraft = 0; +8002367c: a220002c sb zero,44(s1) +80023680: 26050204 addiu a1,s0,516 +} + +void GameGuiActiveAircraftList(TYPE_PLAYER * ptrPlayer, TYPE_FLIGHT_DATA * ptrFlightData) +{ + uint8_t i; + uint8_t j = 0; +80023684: 00001821 move v1,zero + // Clear all pointers for aircraft data first. + // Then, rebuild aircraft list for player. + memset(ptrPlayer->ActiveAircraftList, 0, GAME_MAX_AIRCRAFT); + ptrPlayer->ActiveAircraft = 0; + + for(i = 0; i < GAME_MAX_AIRCRAFT; i++) +80023688: 00001021 move v0,zero +8002368c: 24060020 li a2,32 + { + if( (ptrFlightData->State[i] != STATE_IDLE) +80023690: 8ca40000 lw a0,0(a1) +80023694: 00000000 nop +80023698: 1080000e beqz a0,800236d4 <GameGuiActiveAircraftList+0x80> +8002369c: 00000000 nop + && +800236a0: 8ca4fdfc lw a0,-516(a1) +800236a4: 8e270028 lw a3,40(s1) +800236a8: 00000000 nop +800236ac: 00872024 and a0,a0,a3 +800236b0: 10800008 beqz a0,800236d4 <GameGuiActiveAircraftList+0x80> +800236b4: 24640001 addiu a0,v1,1 + (ptrFlightData->FlightDirection[i] & ptrPlayer->FlightDirection) ) + { + ptrPlayer->ActiveAircraftList[j++] = i; +800236b8: 02231821 addu v1,s1,v1 +800236bc: a0620007 sb v0,7(v1) + ptrPlayer->ActiveAircraft++; +800236c0: 9223002c lbu v1,44(s1) +800236c4: 00000000 nop +800236c8: 24630001 addiu v1,v1,1 +800236cc: a223002c sb v1,44(s1) + { + if( (ptrFlightData->State[i] != STATE_IDLE) + && + (ptrFlightData->FlightDirection[i] & ptrPlayer->FlightDirection) ) + { + ptrPlayer->ActiveAircraftList[j++] = i; +800236d0: 308300ff andi v1,a0,0xff + // Clear all pointers for aircraft data first. + // Then, rebuild aircraft list for player. + memset(ptrPlayer->ActiveAircraftList, 0, GAME_MAX_AIRCRAFT); + ptrPlayer->ActiveAircraft = 0; + + for(i = 0; i < GAME_MAX_AIRCRAFT; i++) +800236d4: 24420001 addiu v0,v0,1 +800236d8: 304200ff andi v0,v0,0xff +800236dc: 1446ffec bne v0,a2,80023690 <GameGuiActiveAircraftList+0x3c> +800236e0: 24a50004 addiu a1,a1,4 + { + ptrPlayer->ActiveAircraftList[j++] = i; + ptrPlayer->ActiveAircraft++; + } + } +} +800236e4: 8fbf001c lw ra,28(sp) +800236e8: 8fb10018 lw s1,24(sp) +800236ec: 8fb00014 lw s0,20(sp) +800236f0: 03e00008 jr ra +800236f4: 27bd0020 addiu sp,sp,32 + +800236f8 <GameGuiActiveAircraftPage>: + +void GameGuiActiveAircraftPage(TYPE_PLAYER * ptrPlayer, TYPE_FLIGHT_DATA * ptrFlightData) +{ + while(ptrPlayer->ActiveAircraft < ptrPlayer->SelectedAircraft) +800236f8: 9085002c lbu a1,44(a0) +800236fc: 9082002e lbu v0,46(a0) +80023700: 00000000 nop +80023704: 00a2182b sltu v1,a1,v0 +80023708: 10600003 beqz v1,80023718 <GameGuiActiveAircraftPage+0x20> +8002370c: 2442ffff addiu v0,v0,-1 + { + ptrPlayer->SelectedAircraft--; +80023710: 1000fffa b 800236fc <GameGuiActiveAircraftPage+0x4> +80023714: a082002e sb v0,46(a0) + } + + while(ptrPlayer->ActiveAircraft < (uint8_t)(GAME_GUI_AIRCRAFT_DATA_MAX_PAGE * ptrPlayer->FlightDataPage) ) +80023718: 9083002d lbu v1,45(a0) +8002371c: 00000000 nop +80023720: 00031080 sll v0,v1,0x2 +80023724: 00621021 addu v0,v1,v0 +80023728: 304200ff andi v0,v0,0xff +8002372c: 00a2102b sltu v0,a1,v0 +80023730: 10400003 beqz v0,80023740 <GameGuiActiveAircraftPage+0x48> +80023734: 2463ffff addiu v1,v1,-1 + { + ptrPlayer->FlightDataPage--; +80023738: 1000fff7 b 80023718 <GameGuiActiveAircraftPage+0x20> +8002373c: a083002d sb v1,45(a0) + } + + if(ptrPlayer->ShowAircraftData == true) +80023740: 90820001 lbu v0,1(a0) +80023744: 00000000 nop +80023748: 10400056 beqz v0,800238a4 <GameGuiActiveAircraftPage+0x1ac> +8002374c: 00000000 nop + } + } +} + +void GameGuiActiveAircraftPage(TYPE_PLAYER * ptrPlayer, TYPE_FLIGHT_DATA * ptrFlightData) +{ +80023750: 27bdffe8 addiu sp,sp,-24 + ptrPlayer->FlightDataPage--; + } + + if(ptrPlayer->ShowAircraftData == true) + { + if(ptrPlayer->PadKeyReleased_Callback(PAD_DOWN) == true) +80023754: 8c82007c lw v0,124(a0) + } + } +} + +void GameGuiActiveAircraftPage(TYPE_PLAYER * ptrPlayer, TYPE_FLIGHT_DATA * ptrFlightData) +{ +80023758: afb00010 sw s0,16(sp) +8002375c: afbf0014 sw ra,20(sp) +80023760: 00808021 move s0,a0 + ptrPlayer->FlightDataPage--; + } + + if(ptrPlayer->ShowAircraftData == true) + { + if(ptrPlayer->PadKeyReleased_Callback(PAD_DOWN) == true) +80023764: 0040f809 jalr v0 +80023768: 24044000 li a0,16384 +8002376c: 10400010 beqz v0,800237b0 <GameGuiActiveAircraftPage+0xb8> +80023770: 00000000 nop + { + if( ( (ptrPlayer->SelectedAircraft + 1) < ptrPlayer->ActiveAircraft) +80023774: 9202002e lbu v0,46(s0) +80023778: 9203002c lbu v1,44(s0) +8002377c: 24420001 addiu v0,v0,1 +80023780: 0043182a slt v1,v0,v1 +80023784: 1060000a beqz v1,800237b0 <GameGuiActiveAircraftPage+0xb8> +80023788: 00000000 nop + && +8002378c: 9203002d lbu v1,45(s0) +80023790: 00000000 nop +80023794: 24630001 addiu v1,v1,1 +80023798: 00032080 sll a0,v1,0x2 +8002379c: 00831821 addu v1,a0,v1 +800237a0: 0043182a slt v1,v0,v1 +800237a4: 10600002 beqz v1,800237b0 <GameGuiActiveAircraftPage+0xb8> +800237a8: 00000000 nop + ( (ptrPlayer->SelectedAircraft + 1) < ( (ptrPlayer->FlightDataPage + 1) * GAME_GUI_AIRCRAFT_DATA_MAX_PAGE) ) ) + { + ptrPlayer->SelectedAircraft++; +800237ac: a202002e sb v0,46(s0) + } + } + + if(ptrPlayer->PadKeyReleased_Callback(PAD_UP) == true) +800237b0: 8e02007c lw v0,124(s0) +800237b4: 00000000 nop +800237b8: 0040f809 jalr v0 +800237bc: 24041000 li a0,4096 +800237c0: 10400009 beqz v0,800237e8 <GameGuiActiveAircraftPage+0xf0> +800237c4: 00000000 nop + { + if(ptrPlayer->SelectedAircraft > ( (ptrPlayer->FlightDataPage) * GAME_GUI_AIRCRAFT_DATA_MAX_PAGE) ) +800237c8: 9204002d lbu a0,45(s0) +800237cc: 9203002e lbu v1,46(s0) +800237d0: 00041080 sll v0,a0,0x2 +800237d4: 00441021 addu v0,v0,a0 +800237d8: 0043102a slt v0,v0,v1 +800237dc: 10400002 beqz v0,800237e8 <GameGuiActiveAircraftPage+0xf0> +800237e0: 2463ffff addiu v1,v1,-1 + { + ptrPlayer->SelectedAircraft--; +800237e4: a203002e sb v1,46(s0) + } + } + + if(ptrPlayer->PadKeyReleased_Callback(PAD_RIGHT) == true) +800237e8: 8e02007c lw v0,124(s0) +800237ec: 00000000 nop +800237f0: 0040f809 jalr v0 +800237f4: 24042000 li a0,8192 +800237f8: 10400011 beqz v0,80023840 <GameGuiActiveAircraftPage+0x148> +800237fc: 00000000 nop + { + if(ptrPlayer->ActiveAircraft > (GAME_GUI_AIRCRAFT_DATA_MAX_PAGE * (ptrPlayer->FlightDataPage + 1) ) ) +80023800: 9202002d lbu v0,45(s0) +80023804: 9204002c lbu a0,44(s0) +80023808: 24420001 addiu v0,v0,1 +8002380c: 00021880 sll v1,v0,0x2 +80023810: 00621821 addu v1,v1,v0 +80023814: 0064182a slt v1,v1,a0 +80023818: 10600009 beqz v1,80023840 <GameGuiActiveAircraftPage+0x148> +8002381c: 304200ff andi v0,v0,0xff + { + ptrPlayer->FlightDataPage++; + ptrPlayer->SelectedAircraft = ptrPlayer->FlightDataPage * GAME_GUI_AIRCRAFT_DATA_MAX_PAGE; +80023820: 00022880 sll a1,v0,0x2 +80023824: 00452821 addu a1,v0,a1 +80023828: 30a500ff andi a1,a1,0xff + dprintf("Selected Aircraft = %d\n",ptrPlayer->SelectedAircraft); +8002382c: 3c048004 lui a0,0x8004 + + if(ptrPlayer->PadKeyReleased_Callback(PAD_RIGHT) == true) + { + if(ptrPlayer->ActiveAircraft > (GAME_GUI_AIRCRAFT_DATA_MAX_PAGE * (ptrPlayer->FlightDataPage + 1) ) ) + { + ptrPlayer->FlightDataPage++; +80023830: a202002d sb v0,45(s0) + ptrPlayer->SelectedAircraft = ptrPlayer->FlightDataPage * GAME_GUI_AIRCRAFT_DATA_MAX_PAGE; +80023834: a205002e sb a1,46(s0) + dprintf("Selected Aircraft = %d\n",ptrPlayer->SelectedAircraft); +80023838: 0c00ed8f jal 8003b63c <printf> +8002383c: 248406e8 addiu a0,a0,1768 + } + } + + if(ptrPlayer->PadKeyReleased_Callback(PAD_LEFT) == true) +80023840: 8e02007c lw v0,124(s0) +80023844: 00000000 nop +80023848: 0040f809 jalr v0 +8002384c: 34048000 li a0,0x8000 +80023850: 10400011 beqz v0,80023898 <GameGuiActiveAircraftPage+0x1a0> +80023854: 00000000 nop + { + if(ptrPlayer->FlightDataPage != 0) +80023858: 9202002d lbu v0,45(s0) +8002385c: 00000000 nop +80023860: 1040000d beqz v0,80023898 <GameGuiActiveAircraftPage+0x1a0> +80023864: 2442ffff addiu v0,v0,-1 + { + ptrPlayer->FlightDataPage--; +80023868: 304200ff andi v0,v0,0xff + ptrPlayer->SelectedAircraft = ptrPlayer->FlightDataPage * GAME_GUI_AIRCRAFT_DATA_MAX_PAGE; +8002386c: 00022880 sll a1,v0,0x2 +80023870: 00452821 addu a1,v0,a1 +80023874: 30a500ff andi a1,a1,0xff + + if(ptrPlayer->PadKeyReleased_Callback(PAD_LEFT) == true) + { + if(ptrPlayer->FlightDataPage != 0) + { + ptrPlayer->FlightDataPage--; +80023878: a202002d sb v0,45(s0) + ptrPlayer->SelectedAircraft = ptrPlayer->FlightDataPage * GAME_GUI_AIRCRAFT_DATA_MAX_PAGE; +8002387c: a205002e sb a1,46(s0) + dprintf("Selected Aircraft = %d\n",ptrPlayer->SelectedAircraft); + } + } + } +} +80023880: 8fbf0014 lw ra,20(sp) +80023884: 8fb00010 lw s0,16(sp) + { + if(ptrPlayer->FlightDataPage != 0) + { + ptrPlayer->FlightDataPage--; + ptrPlayer->SelectedAircraft = ptrPlayer->FlightDataPage * GAME_GUI_AIRCRAFT_DATA_MAX_PAGE; + dprintf("Selected Aircraft = %d\n",ptrPlayer->SelectedAircraft); +80023888: 3c048004 lui a0,0x8004 +8002388c: 248406e8 addiu a0,a0,1768 +80023890: 0800ed8f j 8003b63c <printf> +80023894: 27bd0018 addiu sp,sp,24 + } + } + } +} +80023898: 8fbf0014 lw ra,20(sp) +8002389c: 8fb00010 lw s0,16(sp) +800238a0: 27bd0018 addiu sp,sp,24 +800238a4: 03e00008 jr ra +800238a8: 00000000 nop + +800238ac <GameGuiAircraftList>: +void GameGuiAircraftList(TYPE_PLAYER * ptrPlayer, TYPE_FLIGHT_DATA * ptrFlightData) +{ + short y_offset; + uint8_t page_aircraft; + + if(ptrPlayer->ShowAircraftData == true) +800238ac: 90820001 lbu v0,1(a0) +800238b0: 00000000 nop +800238b4: 104000f1 beqz v0,80023c7c <GameGuiAircraftList+0x3d0> +800238b8: 24020028 li v0,40 + } + } +} + +void GameGuiAircraftList(TYPE_PLAYER * ptrPlayer, TYPE_FLIGHT_DATA * ptrFlightData) +{ +800238bc: 27bdffb8 addiu sp,sp,-72 +800238c0: afb10024 sw s1,36(sp) +800238c4: 00808821 move s1,a0 + + if(ptrPlayer->ShowAircraftData == true) + { + // Prepare RGB data and (X,Y) coordinates for aircraft + // data list request rectangle. + AircraftDataGPoly4.r[0] = AIRCRAFT_DATA_GSGPOLY4_R0; +800238c8: 3c048004 lui a0,0x8004 +800238cc: a0803c38 sb zero,15416(a0) + AircraftDataGPoly4.r[1] = AIRCRAFT_DATA_GSGPOLY4_R1; +800238d0: 24843c38 addiu a0,a0,15416 + } + } +} + +void GameGuiAircraftList(TYPE_PLAYER * ptrPlayer, TYPE_FLIGHT_DATA * ptrFlightData) +{ +800238d4: afbf0044 sw ra,68(sp) +800238d8: afb50034 sw s5,52(sp) +800238dc: afb40030 sw s4,48(sp) +800238e0: afb00020 sw s0,32(sp) +800238e4: afbe0040 sw s8,64(sp) +800238e8: afb7003c sw s7,60(sp) +800238ec: afb60038 sw s6,56(sp) +800238f0: afb3002c sw s3,44(sp) +800238f4: afb20028 sw s2,40(sp) + AircraftDataGPoly4.g[0] = AIRCRAFT_DATA_GSGPOLY4_G0; + AircraftDataGPoly4.g[1] = AIRCRAFT_DATA_GSGPOLY4_G1; + AircraftDataGPoly4.g[2] = AIRCRAFT_DATA_GSGPOLY4_G2; + AircraftDataGPoly4.g[3] = AIRCRAFT_DATA_GSGPOLY4_G3; + + AircraftDataGPoly4.b[0] = AIRCRAFT_DATA_GSGPOLY4_B0; +800238f8: a0820008 sb v0,8(a0) + AircraftDataGPoly4.b[1] = AIRCRAFT_DATA_GSGPOLY4_B1; +800238fc: a0820009 sb v0,9(a0) + AircraftDataGPoly4.b[2] = AIRCRAFT_DATA_GSGPOLY4_B2; + AircraftDataGPoly4.b[3] = AIRCRAFT_DATA_GSGPOLY4_B3; + + AircraftDataGPoly4.attribute |= ENABLE_TRANS | TRANS_MODE(0); +80023900: 8c82001c lw v0,28(a0) + + AircraftDataGPoly4.x[0] = AIRCRAFT_DATA_GSGPOLY4_X0; +80023904: 24030060 li v1,96 + AircraftDataGPoly4.b[0] = AIRCRAFT_DATA_GSGPOLY4_B0; + AircraftDataGPoly4.b[1] = AIRCRAFT_DATA_GSGPOLY4_B1; + AircraftDataGPoly4.b[2] = AIRCRAFT_DATA_GSGPOLY4_B2; + AircraftDataGPoly4.b[3] = AIRCRAFT_DATA_GSGPOLY4_B3; + + AircraftDataGPoly4.attribute |= ENABLE_TRANS | TRANS_MODE(0); +80023908: 34420010 ori v0,v0,0x10 +8002390c: ac82001c sw v0,28(a0) + + AircraftDataGPoly4.x[0] = AIRCRAFT_DATA_GSGPOLY4_X0; + AircraftDataGPoly4.x[1] = AIRCRAFT_DATA_GSGPOLY4_X1; +80023910: 24020120 li v0,288 +80023914: a482000e sh v0,14(a0) + AircraftDataGPoly4.x[2] = AIRCRAFT_DATA_GSGPOLY4_X2; + AircraftDataGPoly4.x[3] = AIRCRAFT_DATA_GSGPOLY4_X3; +80023918: a4820012 sh v0,18(a0) + + AircraftDataGPoly4.y[0] = AIRCRAFT_DATA_GSGPOLY4_Y0; +8002391c: 24020018 li v0,24 +80023920: a4820014 sh v0,20(a0) + AircraftDataGPoly4.y[1] = AIRCRAFT_DATA_GSGPOLY4_Y1; +80023924: a4820016 sh v0,22(a0) + AircraftDataGPoly4.r[0] = AIRCRAFT_DATA_GSGPOLY4_R0; + AircraftDataGPoly4.r[1] = AIRCRAFT_DATA_GSGPOLY4_R1; + AircraftDataGPoly4.r[2] = AIRCRAFT_DATA_GSGPOLY4_R2; + AircraftDataGPoly4.r[3] = AIRCRAFT_DATA_GSGPOLY4_R3; + + AircraftDataGPoly4.g[0] = AIRCRAFT_DATA_GSGPOLY4_G0; +80023928: 2410ff80 li s0,-128 + AircraftDataGPoly4.x[2] = AIRCRAFT_DATA_GSGPOLY4_X2; + AircraftDataGPoly4.x[3] = AIRCRAFT_DATA_GSGPOLY4_X3; + + AircraftDataGPoly4.y[0] = AIRCRAFT_DATA_GSGPOLY4_Y0; + AircraftDataGPoly4.y[1] = AIRCRAFT_DATA_GSGPOLY4_Y1; + AircraftDataGPoly4.y[2] = AIRCRAFT_DATA_GSGPOLY4_Y2; +8002392c: 240200d8 li v0,216 +80023930: a4820018 sh v0,24(a0) + if(ptrPlayer->ShowAircraftData == true) + { + // Prepare RGB data and (X,Y) coordinates for aircraft + // data list request rectangle. + AircraftDataGPoly4.r[0] = AIRCRAFT_DATA_GSGPOLY4_R0; + AircraftDataGPoly4.r[1] = AIRCRAFT_DATA_GSGPOLY4_R1; +80023934: a0800001 sb zero,1(a0) + AircraftDataGPoly4.r[2] = AIRCRAFT_DATA_GSGPOLY4_R2; +80023938: a0800002 sb zero,2(a0) + AircraftDataGPoly4.r[3] = AIRCRAFT_DATA_GSGPOLY4_R3; +8002393c: a0800003 sb zero,3(a0) + + AircraftDataGPoly4.g[0] = AIRCRAFT_DATA_GSGPOLY4_G0; +80023940: a0900004 sb s0,4(a0) + AircraftDataGPoly4.g[1] = AIRCRAFT_DATA_GSGPOLY4_G1; +80023944: a0900005 sb s0,5(a0) + AircraftDataGPoly4.g[2] = AIRCRAFT_DATA_GSGPOLY4_G2; +80023948: a0800006 sb zero,6(a0) + AircraftDataGPoly4.g[3] = AIRCRAFT_DATA_GSGPOLY4_G3; +8002394c: a0800007 sb zero,7(a0) + + AircraftDataGPoly4.b[0] = AIRCRAFT_DATA_GSGPOLY4_B0; + AircraftDataGPoly4.b[1] = AIRCRAFT_DATA_GSGPOLY4_B1; + AircraftDataGPoly4.b[2] = AIRCRAFT_DATA_GSGPOLY4_B2; +80023950: a080000a sb zero,10(a0) + AircraftDataGPoly4.b[3] = AIRCRAFT_DATA_GSGPOLY4_B3; +80023954: a080000b sb zero,11(a0) + + AircraftDataGPoly4.attribute |= ENABLE_TRANS | TRANS_MODE(0); + + AircraftDataGPoly4.x[0] = AIRCRAFT_DATA_GSGPOLY4_X0; +80023958: a483000c sh v1,12(a0) + AircraftDataGPoly4.x[1] = AIRCRAFT_DATA_GSGPOLY4_X1; + AircraftDataGPoly4.x[2] = AIRCRAFT_DATA_GSGPOLY4_X2; +8002395c: a4830010 sh v1,16(a0) +80023960: 00a0a821 move s5,a1 + AircraftDataGPoly4.y[0] = AIRCRAFT_DATA_GSGPOLY4_Y0; + AircraftDataGPoly4.y[1] = AIRCRAFT_DATA_GSGPOLY4_Y1; + AircraftDataGPoly4.y[2] = AIRCRAFT_DATA_GSGPOLY4_Y2; + AircraftDataGPoly4.y[3] = AIRCRAFT_DATA_GSGPOLY4_Y3; + + GsSortGPoly4(&AircraftDataGPoly4); +80023964: 0c00b0e6 jal 8002c398 <GsSortGPoly4> +80023968: a482001a sh v0,26(a0) + + if(ptrPlayer->ActiveAircraft != 0) +8002396c: 9222002c lbu v0,44(s1) +80023970: 00000000 nop +80023974: 104000a5 beqz v0,80023c0c <GameGuiAircraftList+0x360> +80023978: 3c148007 lui s4,0x8007 + { + SelectedAircraftGPoly4.r[0] = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_R0; +8002397c: 3c048004 lui a0,0x8004 +80023980: a0903c18 sb s0,15384(a0) + SelectedAircraftGPoly4.r[1] = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_R1; +80023984: 24843c18 addiu a0,a0,15384 + SelectedAircraftGPoly4.b[0] = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_B0; + SelectedAircraftGPoly4.b[1] = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_B1; + SelectedAircraftGPoly4.b[2] = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_B2; + SelectedAircraftGPoly4.b[3] = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_B3; + + SelectedAircraftGPoly4.attribute |= ENABLE_TRANS | TRANS_MODE(0); +80023988: 8c82001c lw v0,28(a0) + SelectedAircraftGPoly4.x[2] = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_X2; + SelectedAircraftGPoly4.x[3] = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_X3; + + page_aircraft = (ptrPlayer->SelectedAircraft) - (ptrPlayer->FlightDataPage * GAME_GUI_AIRCRAFT_DATA_MAX_PAGE); + + y_offset = (short)(page_aircraft * AIRCRAFT_DATA_FLIGHT_GSGPOLY4_H); +8002398c: 9223002d lbu v1,45(s1) + SelectedAircraftGPoly4.b[0] = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_B0; + SelectedAircraftGPoly4.b[1] = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_B1; + SelectedAircraftGPoly4.b[2] = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_B2; + SelectedAircraftGPoly4.b[3] = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_B3; + + SelectedAircraftGPoly4.attribute |= ENABLE_TRANS | TRANS_MODE(0); +80023990: 34420010 ori v0,v0,0x10 +80023994: ac82001c sw v0,28(a0) + + SelectedAircraftGPoly4.x[0] = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_X0; +80023998: 24020068 li v0,104 +8002399c: a482000c sh v0,12(a0) + SelectedAircraftGPoly4.x[1] = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_X1; + SelectedAircraftGPoly4.x[2] = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_X2; +800239a0: a4820010 sh v0,16(a0) + SelectedAircraftGPoly4.x[3] = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_X3; + + page_aircraft = (ptrPlayer->SelectedAircraft) - (ptrPlayer->FlightDataPage * GAME_GUI_AIRCRAFT_DATA_MAX_PAGE); + + y_offset = (short)(page_aircraft * AIRCRAFT_DATA_FLIGHT_GSGPOLY4_H); +800239a4: 00031080 sll v0,v1,0x2 +800239a8: 00431021 addu v0,v0,v1 +800239ac: 9223002e lbu v1,46(s1) + GsSortGPoly4(&AircraftDataGPoly4); + + if(ptrPlayer->ActiveAircraft != 0) + { + SelectedAircraftGPoly4.r[0] = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_R0; + SelectedAircraftGPoly4.r[1] = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_R1; +800239b0: a0900001 sb s0,1(a0) + SelectedAircraftGPoly4.x[2] = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_X2; + SelectedAircraftGPoly4.x[3] = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_X3; + + page_aircraft = (ptrPlayer->SelectedAircraft) - (ptrPlayer->FlightDataPage * GAME_GUI_AIRCRAFT_DATA_MAX_PAGE); + + y_offset = (short)(page_aircraft * AIRCRAFT_DATA_FLIGHT_GSGPOLY4_H); +800239b4: 00621023 subu v0,v1,v0 +800239b8: 00021140 sll v0,v0,0x5 +800239bc: 30421fe0 andi v0,v0,0x1fe0 + /*dprintf("ptrPlayer->ActiveAircraft = %d\n",ptrPlayer->ActiveAircraft); + dprintf("ptrPlayer->SelectedAircraft = %d\n",ptrPlayer->SelectedAircraft); + dprintf("ptrPlayer->FlightDataPage = %d\n",ptrPlayer->FlightDataPage); + dprintf("y_offset = %d\n",y_offset);*/ + + SelectedAircraftGPoly4.y[0] = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_Y0 + y_offset; +800239c0: 24430020 addiu v1,v0,32 + SelectedAircraftGPoly4.r[0] = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_R0; + SelectedAircraftGPoly4.r[1] = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_R1; + SelectedAircraftGPoly4.r[2] = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_R2; + SelectedAircraftGPoly4.r[3] = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_R3; + + SelectedAircraftGPoly4.g[0] = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_G0; +800239c4: a0900004 sb s0,4(a0) + dprintf("ptrPlayer->FlightDataPage = %d\n",ptrPlayer->FlightDataPage); + dprintf("y_offset = %d\n",y_offset);*/ + + SelectedAircraftGPoly4.y[0] = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_Y0 + y_offset; + SelectedAircraftGPoly4.y[1] = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_Y1 + y_offset; + SelectedAircraftGPoly4.y[2] = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_Y2 + y_offset; +800239c8: 24420040 addiu v0,v0,64 + SelectedAircraftGPoly4.r[1] = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_R1; + SelectedAircraftGPoly4.r[2] = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_R2; + SelectedAircraftGPoly4.r[3] = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_R3; + + SelectedAircraftGPoly4.g[0] = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_G0; + SelectedAircraftGPoly4.g[1] = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_G1; +800239cc: a0900005 sb s0,5(a0) + SelectedAircraftGPoly4.g[2] = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_G2; + SelectedAircraftGPoly4.g[3] = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_G3; + + SelectedAircraftGPoly4.b[0] = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_B0; +800239d0: a0900008 sb s0,8(a0) + SelectedAircraftGPoly4.b[1] = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_B1; +800239d4: a0900009 sb s0,9(a0) + SelectedAircraftGPoly4.b[3] = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_B3; + + SelectedAircraftGPoly4.attribute |= ENABLE_TRANS | TRANS_MODE(0); + + SelectedAircraftGPoly4.x[0] = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_X0; + SelectedAircraftGPoly4.x[1] = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_X1; +800239d8: 24100118 li s0,280 + /*dprintf("ptrPlayer->ActiveAircraft = %d\n",ptrPlayer->ActiveAircraft); + dprintf("ptrPlayer->SelectedAircraft = %d\n",ptrPlayer->SelectedAircraft); + dprintf("ptrPlayer->FlightDataPage = %d\n",ptrPlayer->FlightDataPage); + dprintf("y_offset = %d\n",y_offset);*/ + + SelectedAircraftGPoly4.y[0] = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_Y0 + y_offset; +800239dc: a4830014 sh v1,20(a0) + SelectedAircraftGPoly4.y[1] = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_Y1 + y_offset; +800239e0: a4830016 sh v1,22(a0) + SelectedAircraftGPoly4.y[2] = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_Y2 + y_offset; +800239e4: a4820018 sh v0,24(a0) + SelectedAircraftGPoly4.y[3] = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_Y3 + y_offset; +800239e8: a482001a sh v0,26(a0) + + if(ptrPlayer->ActiveAircraft != 0) + { + SelectedAircraftGPoly4.r[0] = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_R0; + SelectedAircraftGPoly4.r[1] = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_R1; + SelectedAircraftGPoly4.r[2] = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_R2; +800239ec: a0800002 sb zero,2(a0) + SelectedAircraftGPoly4.r[3] = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_R3; +800239f0: a0800003 sb zero,3(a0) + + SelectedAircraftGPoly4.g[0] = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_G0; + SelectedAircraftGPoly4.g[1] = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_G1; + SelectedAircraftGPoly4.g[2] = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_G2; +800239f4: a0800006 sb zero,6(a0) + SelectedAircraftGPoly4.g[3] = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_G3; +800239f8: a0800007 sb zero,7(a0) + + SelectedAircraftGPoly4.b[0] = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_B0; + SelectedAircraftGPoly4.b[1] = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_B1; + SelectedAircraftGPoly4.b[2] = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_B2; +800239fc: a080000a sb zero,10(a0) + SelectedAircraftGPoly4.b[3] = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_B3; +80023a00: a080000b sb zero,11(a0) + + SelectedAircraftGPoly4.attribute |= ENABLE_TRANS | TRANS_MODE(0); + + SelectedAircraftGPoly4.x[0] = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_X0; + SelectedAircraftGPoly4.x[1] = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_X1; +80023a04: a490000e sh s0,14(a0) + SelectedAircraftGPoly4.y[0] = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_Y0 + y_offset; + SelectedAircraftGPoly4.y[1] = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_Y1 + y_offset; + SelectedAircraftGPoly4.y[2] = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_Y2 + y_offset; + SelectedAircraftGPoly4.y[3] = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_Y3 + y_offset; + + GsSortGPoly4(&SelectedAircraftGPoly4); +80023a08: 0c00b0e6 jal 8002c398 <GsSortGPoly4> +80023a0c: a4900012 sh s0,18(a0) + + if(ptrPlayer->ActiveAircraft > (GAME_GUI_AIRCRAFT_DATA_MAX_PAGE * (ptrPlayer->FlightDataPage + 1) ) ) +80023a10: 9222002d lbu v0,45(s1) +80023a14: 9223002c lbu v1,44(s1) +80023a18: 24420001 addiu v0,v0,1 +80023a1c: 00022080 sll a0,v0,0x2 +80023a20: 00821021 addu v0,a0,v0 +80023a24: 0043102a slt v0,v0,v1 +80023a28: 10400011 beqz v0,80023a70 <GameGuiAircraftList+0x1c4> +80023a2c: 3c048004 lui a0,0x8004 + { + ArrowsSpr.x = AIRCRAFT_DATA_FLIGHT_RIGHT_ARROW_X; + ArrowsSpr.y = AIRCRAFT_DATA_FLIGHT_RIGHT_ARROW_Y; +80023a30: 24020070 li v0,112 + + GsSortGPoly4(&SelectedAircraftGPoly4); + + if(ptrPlayer->ActiveAircraft > (GAME_GUI_AIRCRAFT_DATA_MAX_PAGE * (ptrPlayer->FlightDataPage + 1) ) ) + { + ArrowsSpr.x = AIRCRAFT_DATA_FLIGHT_RIGHT_ARROW_X; +80023a34: a4903bec sh s0,15340(a0) + ArrowsSpr.y = AIRCRAFT_DATA_FLIGHT_RIGHT_ARROW_Y; +80023a38: 24843bec addiu a0,a0,15340 +80023a3c: a4820002 sh v0,2(a0) + + ArrowsSpr.attribute |= GFX_1HZ_FLASH; +80023a40: 8c820014 lw v0,20(a0) +80023a44: 00000000 nop +80023a48: 34420080 ori v0,v0,0x80 +80023a4c: ac820014 sw v0,20(a0) + + ArrowsSpr.u = AIRCRAFT_DATA_FLIGHT_RIGHT_ARROW_U; +80023a50: 24020034 li v0,52 +80023a54: a0820004 sb v0,4(a0) + ArrowsSpr.v = AIRCRAFT_DATA_FLIGHT_RIGHT_ARROW_V; +80023a58: 24020030 li v0,48 +80023a5c: a0820005 sb v0,5(a0) + + ArrowsSpr.w = AIRCRAFT_DATA_FLIGHT_ARROWS_SIZE; +80023a60: 24020008 li v0,8 +80023a64: a4820006 sh v0,6(a0) + ArrowsSpr.h = AIRCRAFT_DATA_FLIGHT_ARROWS_SIZE; + + GfxSortSprite(&ArrowsSpr); +80023a68: 0c0090d2 jal 80024348 <GfxSortSprite> +80023a6c: a4820008 sh v0,8(a0) + } + + if(ptrPlayer->FlightDataPage != 0) +80023a70: 9222002d lbu v0,45(s1) +80023a74: 00000000 nop +80023a78: 10400012 beqz v0,80023ac4 <GameGuiAircraftList+0x218> +80023a7c: 3c048004 lui a0,0x8004 + { + ArrowsSpr.x = AIRCRAFT_DATA_FLIGHT_LEFT_ARROW_X; +80023a80: 24020060 li v0,96 +80023a84: a4823bec sh v0,15340(a0) + ArrowsSpr.y = AIRCRAFT_DATA_FLIGHT_LEFT_ARROW_Y; +80023a88: 24843bec addiu a0,a0,15340 +80023a8c: 24020070 li v0,112 +80023a90: a4820002 sh v0,2(a0) + + ArrowsSpr.attribute |= GFX_1HZ_FLASH; +80023a94: 8c820014 lw v0,20(a0) +80023a98: 00000000 nop +80023a9c: 34420080 ori v0,v0,0x80 +80023aa0: ac820014 sw v0,20(a0) + + ArrowsSpr.u = AIRCRAFT_DATA_FLIGHT_LEFT_ARROW_U; +80023aa4: 2402002c li v0,44 +80023aa8: a0820004 sb v0,4(a0) + ArrowsSpr.v = AIRCRAFT_DATA_FLIGHT_LEFT_ARROW_V; +80023aac: 24020030 li v0,48 +80023ab0: a0820005 sb v0,5(a0) + + ArrowsSpr.w = AIRCRAFT_DATA_FLIGHT_ARROWS_SIZE; +80023ab4: 24020008 li v0,8 +80023ab8: a4820006 sh v0,6(a0) + ArrowsSpr.h = AIRCRAFT_DATA_FLIGHT_ARROWS_SIZE; + + GfxSortSprite(&ArrowsSpr); +80023abc: 0c0090d2 jal 80024348 <GfxSortSprite> +80023ac0: a4820008 sh v0,8(a0) + FontPrintText(&RadioFont,CLOCK_X,CLOCK_Y,strClock); +} + +void GameGuiShowAircraftData(TYPE_PLAYER * ptrPlayer, TYPE_FLIGHT_DATA * ptrFlightData) +{ + uint8_t init_flight = ptrPlayer->FlightDataPage * GAME_GUI_AIRCRAFT_DATA_MAX_PAGE; +80023ac4: 9230002d lbu s0,45(s1) + uint8_t i; + uint8_t j; + + FontSetFlags(&SmallFont,FONT_NOFLAGS); +80023ac8: 00002821 move a1,zero + FontPrintText(&RadioFont,CLOCK_X,CLOCK_Y,strClock); +} + +void GameGuiShowAircraftData(TYPE_PLAYER * ptrPlayer, TYPE_FLIGHT_DATA * ptrFlightData) +{ + uint8_t init_flight = ptrPlayer->FlightDataPage * GAME_GUI_AIRCRAFT_DATA_MAX_PAGE; +80023acc: 00101080 sll v0,s0,0x2 + uint8_t i; + uint8_t j; + + FontSetFlags(&SmallFont,FONT_NOFLAGS); +80023ad0: 26848d38 addiu a0,s4,-29384 +80023ad4: 0c008441 jal 80021104 <FontSetFlags> +80023ad8: 00508021 addu s0,v0,s0 + AIRCRAFT_DATA_DIRECTION_X, + AIRCRAFT_DATA_DIRECTION_Y + (AIRCRAFT_DATA_FLIGHT_GSGPOLY4_H * j), + "Arrival" ); + break; + case DEPARTURE: + FontPrintText( &SmallFont, +80023adc: 3c028004 lui v0,0x8004 +80023ae0: 24420700 addiu v0,v0,1792 +80023ae4: 3c138007 lui s3,0x8007 + FontPrintText(&RadioFont,CLOCK_X,CLOCK_Y,strClock); +} + +void GameGuiShowAircraftData(TYPE_PLAYER * ptrPlayer, TYPE_FLIGHT_DATA * ptrFlightData) +{ + uint8_t init_flight = ptrPlayer->FlightDataPage * GAME_GUI_AIRCRAFT_DATA_MAX_PAGE; +80023ae8: 321000ff andi s0,s0,0xff + uint8_t i; + uint8_t j; + + FontSetFlags(&SmallFont,FONT_NOFLAGS); +80023aec: 24120030 li s2,48 + AIRCRAFT_DATA_DIRECTION_X, + AIRCRAFT_DATA_DIRECTION_Y + (AIRCRAFT_DATA_FLIGHT_GSGPOLY4_H * j), + "Arrival" ); + break; + case DEPARTURE: + FontPrintText( &SmallFont, +80023af0: afa20018 sw v0,24(sp) +80023af4: 26738d38 addiu s3,s3,-29384 + ptrFlightData->strFlightNumber[i] ); + + switch(ptrFlightData->FlightDirection[i]) + { + case ARRIVAL: + FontPrintText( &SmallFont, +80023af8: 3c1e8004 lui s8,0x8004 + uint8_t i; + uint8_t j; + + FontSetFlags(&SmallFont,FONT_NOFLAGS); + + for(i = init_flight ; i < ptrPlayer->ActiveAircraft ; i++) +80023afc: 9222002c lbu v0,44(s1) +80023b00: 00000000 nop +80023b04: 0202102b sltu v0,s0,v0 +80023b08: 10400051 beqz v0,80023c50 <GameGuiAircraftList+0x3a4> +80023b0c: 240200d0 li v0,208 + { + j = i - init_flight; + + if(j >= GAME_GUI_AIRCRAFT_DATA_MAX_PAGE) +80023b10: 1242004f beq s2,v0,80023c50 <GameGuiAircraftList+0x3a4> +80023b14: 26070010 addiu a3,s0,16 +80023b18: 2657fff8 addiu s7,s2,-8 + } + + FontPrintText( &SmallFont, + AIRCRAFT_DATA_FLIGHT_NUMBER_TEXT_X, + AIRCRAFT_DATA_FLIGHT_NUMBER_TEXT_Y + (AIRCRAFT_DATA_FLIGHT_GSGPOLY4_H * j), + ptrFlightData->strFlightNumber[i] ); +80023b1c: 000738c0 sll a3,a3,0x3 +80023b20: 0010b080 sll s6,s0,0x2 + if(j >= GAME_GUI_AIRCRAFT_DATA_MAX_PAGE) + { + break; + } + + FontPrintText( &SmallFont, +80023b24: 02a73821 addu a3,s5,a3 +80023b28: 02e03021 move a2,s7 +80023b2c: 24050070 li a1,112 +80023b30: 26848d38 addiu a0,s4,-29384 +80023b34: 0c008451 jal 80021144 <FontPrintText> +80023b38: 02b6b021 addu s6,s5,s6 + AIRCRAFT_DATA_FLIGHT_NUMBER_TEXT_X, + AIRCRAFT_DATA_FLIGHT_NUMBER_TEXT_Y + (AIRCRAFT_DATA_FLIGHT_GSGPOLY4_H * j), + ptrFlightData->strFlightNumber[i] ); + + switch(ptrFlightData->FlightDirection[i]) +80023b3c: 8ec20000 lw v0,0(s6) +80023b40: 24030001 li v1,1 +80023b44: 10430005 beq v0,v1,80023b5c <GameGuiAircraftList+0x2b0> +80023b48: 24030002 li v1,2 +80023b4c: 10430004 beq v0,v1,80023b60 <GameGuiAircraftList+0x2b4> +80023b50: 27c70550 addiu a3,s8,1360 + break; + default: + break; + } + + FontSetFlags(&SmallFont, FONT_2HZ_FLASH); +80023b54: 10000007 b 80023b74 <GameGuiAircraftList+0x2c8> +80023b58: 24050010 li a1,16 + AIRCRAFT_DATA_DIRECTION_X, + AIRCRAFT_DATA_DIRECTION_Y + (AIRCRAFT_DATA_FLIGHT_GSGPOLY4_H * j), + "Arrival" ); + break; + case DEPARTURE: + FontPrintText( &SmallFont, +80023b5c: 8fa70018 lw a3,24(sp) +80023b60: 02403021 move a2,s2 +80023b64: 24050070 li a1,112 +80023b68: 0c008451 jal 80021144 <FontPrintText> +80023b6c: 02602021 move a0,s3 + break; + default: + break; + } + + FontSetFlags(&SmallFont, FONT_2HZ_FLASH); +80023b70: 24050010 li a1,16 +80023b74: 0c008441 jal 80021104 <FontSetFlags> +80023b78: 26848d38 addiu a0,s4,-29384 + + switch(ptrFlightData->State[i]) +80023b7c: 8ec20204 lw v0,516(s6) +80023b80: 24030005 li v1,5 +80023b84: 10430008 beq v0,v1,80023ba8 <GameGuiAircraftList+0x2fc> +80023b88: 24030006 li v1,6 +80023b8c: 10430009 beq v0,v1,80023bb4 <GameGuiAircraftList+0x308> +80023b90: 24030002 li v1,2 +80023b94: 1443000e bne v0,v1,80023bd0 <GameGuiAircraftList+0x324> +80023b98: 00002821 move a1,zero + AIRCRAFT_DATA_DIRECTION_Y + (AIRCRAFT_DATA_FLIGHT_GSGPOLY4_H * j), + "Landing" ); + break; + + case STATE_TAXIING: + FontPrintText( &SmallFont, +80023b9c: 3c078004 lui a3,0x8004 +80023ba0: 10000006 b 80023bbc <GameGuiAircraftList+0x310> +80023ba4: 24e7058c addiu a3,a3,1420 + FontSetFlags(&SmallFont, FONT_2HZ_FLASH); + + switch(ptrFlightData->State[i]) + { + case STATE_FINAL: + FontPrintText( &SmallFont, +80023ba8: 3c078004 lui a3,0x8004 +80023bac: 10000003 b 80023bbc <GameGuiAircraftList+0x310> +80023bb0: 24e7070c addiu a3,a3,1804 + AIRCRAFT_DATA_DIRECTION_Y + (AIRCRAFT_DATA_FLIGHT_GSGPOLY4_H * j), + "Taxiing" ); + break; + + case STATE_LANDED: + FontPrintText( &SmallFont, +80023bb4: 3c078004 lui a3,0x8004 +80023bb8: 24e70714 addiu a3,a3,1812 +80023bbc: 02403021 move a2,s2 +80023bc0: 240500b0 li a1,176 +80023bc4: 0c008451 jal 80021144 <FontPrintText> +80023bc8: 02602021 move a0,s3 + + default: + break; + } + + FontSetFlags(&SmallFont, FONT_NOFLAGS); +80023bcc: 00002821 move a1,zero +80023bd0: 0c008441 jal 80021104 <FontSetFlags> +80023bd4: 26848d38 addiu a0,s4,-29384 + + FontPrintText( &SmallFont, + AIRCRAFT_DATA_PASSENGERS_X, + AIRCRAFT_DATA_PASSENGERS_Y + (AIRCRAFT_DATA_FLIGHT_GSGPOLY4_H * j), + "%d pax.", + ptrFlightData->Passengers[i] ); +80023bd8: 02b01021 addu v0,s5,s0 + break; + } + + FontSetFlags(&SmallFont, FONT_NOFLAGS); + + FontPrintText( &SmallFont, +80023bdc: 90420180 lbu v0,384(v0) +80023be0: 3c078004 lui a3,0x8004 +80023be4: afa20010 sw v0,16(sp) +80023be8: 24e7071c addiu a3,a3,1820 +80023bec: 02e03021 move a2,s7 +80023bf0: 240500b0 li a1,176 +80023bf4: 26848d38 addiu a0,s4,-29384 +80023bf8: 0c008451 jal 80021144 <FontPrintText> +80023bfc: 26100001 addiu s0,s0,1 + uint8_t i; + uint8_t j; + + FontSetFlags(&SmallFont,FONT_NOFLAGS); + + for(i = init_flight ; i < ptrPlayer->ActiveAircraft ; i++) +80023c00: 321000ff andi s0,s0,0xff +80023c04: 1000ffbd b 80023afc <GameGuiAircraftList+0x250> +80023c08: 26520020 addiu s2,s2,32 + ( (AIRCRAFT_DATA_GSGPOLY4_Y2 - AIRCRAFT_DATA_GSGPOLY4_Y0) >> 1), + "No flights!" ); + } + } + +} +80023c0c: 8fbf0044 lw ra,68(sp) +80023c10: 8fbe0040 lw s8,64(sp) +80023c14: 8fb7003c lw s7,60(sp) +80023c18: 8fb60038 lw s6,56(sp) +80023c1c: 8fb50034 lw s5,52(sp) +80023c20: 8fb3002c lw s3,44(sp) +80023c24: 8fb20028 lw s2,40(sp) +80023c28: 8fb10024 lw s1,36(sp) +80023c2c: 8fb00020 lw s0,32(sp) + + GameGuiShowAircraftData(ptrPlayer, ptrFlightData); + } + else + { + FontPrintText( &SmallFont, +80023c30: 3c078004 lui a3,0x8004 +80023c34: 26848d38 addiu a0,s4,-29384 + ( (AIRCRAFT_DATA_GSGPOLY4_Y2 - AIRCRAFT_DATA_GSGPOLY4_Y0) >> 1), + "No flights!" ); + } + } + +} +80023c38: 8fb40030 lw s4,48(sp) + + GameGuiShowAircraftData(ptrPlayer, ptrFlightData); + } + else + { + FontPrintText( &SmallFont, +80023c3c: 24e70724 addiu a3,a3,1828 +80023c40: 24060078 li a2,120 +80023c44: 240500c0 li a1,192 +80023c48: 08008451 j 80021144 <FontPrintText> +80023c4c: 27bd0048 addiu sp,sp,72 + ( (AIRCRAFT_DATA_GSGPOLY4_Y2 - AIRCRAFT_DATA_GSGPOLY4_Y0) >> 1), + "No flights!" ); + } + } + +} +80023c50: 8fbf0044 lw ra,68(sp) +80023c54: 8fbe0040 lw s8,64(sp) +80023c58: 8fb7003c lw s7,60(sp) +80023c5c: 8fb60038 lw s6,56(sp) +80023c60: 8fb50034 lw s5,52(sp) +80023c64: 8fb40030 lw s4,48(sp) +80023c68: 8fb3002c lw s3,44(sp) +80023c6c: 8fb20028 lw s2,40(sp) +80023c70: 8fb10024 lw s1,36(sp) +80023c74: 8fb00020 lw s0,32(sp) +80023c78: 27bd0048 addiu sp,sp,72 +80023c7c: 03e00008 jr ra +80023c80: 00000000 nop + +80023c84 <GameGuiBubble>: + uint8_t i; + static uint16_t BubbleVibrationTimer; + static uint8_t FirstNotification; + bool AtLeastOneEnabled = false; + + if(GameStartupFlag == true) +80023c84: 3c028007 lui v0,0x8007 +80023c88: 90421d24 lbu v0,7460(v0) + } + +} + +void GameGuiBubble(TYPE_FLIGHT_DATA * ptrFlightData) +{ +80023c8c: 27bdffc8 addiu sp,sp,-56 +80023c90: afb4002c sw s4,44(sp) +80023c94: afbf0034 sw ra,52(sp) +80023c98: afb50030 sw s5,48(sp) +80023c9c: afb30028 sw s3,40(sp) +80023ca0: afb20024 sw s2,36(sp) +80023ca4: afb10020 sw s1,32(sp) +80023ca8: afb0001c sw s0,28(sp) + uint8_t i; + static uint16_t BubbleVibrationTimer; + static uint8_t FirstNotification; + bool AtLeastOneEnabled = false; + + if(GameStartupFlag == true) +80023cac: 10400004 beqz v0,80023cc0 <GameGuiBubble+0x3c> +80023cb0: 3c148007 lui s4,0x8007 + { + // Set initial values to static variables + BubbleVibrationTimer = 0; +80023cb4: 3c028007 lui v0,0x8007 +80023cb8: a4401c1c sh zero,7196(v0) + FirstNotification = 0; +80023cbc: a2801c1a sb zero,7194(s4) + } + + for(i = FirstNotification ; i < ptrFlightData->nAircraft ; i++) +80023cc0: 92911c1a lbu s1,7194(s4) +80023cc4: 90830200 lbu v1,512(a0) +80023cc8: 00000000 nop +80023ccc: 0223102b sltu v0,s1,v1 +80023cd0: 10400045 beqz v0,80023de8 <GameGuiBubble+0x164> +80023cd4: 00911021 addu v0,a0,s1 + { + if(ptrFlightData->NotificationRequest[i] != 0) +80023cd8: 90420284 lbu v0,644(v0) +80023cdc: 00000000 nop +80023ce0: 1040003f beqz v0,80023de0 <GameGuiBubble+0x15c> +80023ce4: 26310001 addiu s1,s1,1 +80023ce8: 2631ffff addiu s1,s1,-1 + { + AtLeastOneEnabled = true; + + BubbleSpr.x = BUBBLE_SPRITE_X; +80023cec: 3c108004 lui s0,0x8004 +80023cf0: 2402012a li v0,298 +80023cf4: a6023c78 sh v0,15480(s0) + BubbleSpr.y = BUBBLE_SPRITE_Y; +80023cf8: 26123c78 addiu s2,s0,15480 +80023cfc: 24020020 li v0,32 + + if(BubbleVibrationTimer >= BUBBLE_VIBRATION_TIMER_LIMIT) +80023d00: 3c158007 lui s5,0x8007 + if(ptrFlightData->NotificationRequest[i] != 0) + { + AtLeastOneEnabled = true; + + BubbleSpr.x = BUBBLE_SPRITE_X; + BubbleSpr.y = BUBBLE_SPRITE_Y; +80023d04: a6420002 sh v0,2(s2) + + if(BubbleVibrationTimer >= BUBBLE_VIBRATION_TIMER_LIMIT) +80023d08: 96a21c1c lhu v0,7196(s5) +80023d0c: 00000000 nop +80023d10: 2c420019 sltiu v0,v0,25 +80023d14: 10400012 beqz v0,80023d60 <GameGuiBubble+0xdc> +80023d18: 00809821 move s3,a0 + BubbleVibrationTimer = 0; + } + } + else + { + BubbleSpr.x += SystemRand(BUBBLE_SPRITE_RAND_MIN,BUBBLE_SPRITE_RAND_MAX); +80023d1c: 24050003 li a1,3 +80023d20: 0c00a03d jal 800280f4 <SystemRand> +80023d24: 2404fffd li a0,-3 +80023d28: 96033c78 lhu v1,15480(s0) + BubbleSpr.y += SystemRand(BUBBLE_SPRITE_RAND_MIN,BUBBLE_SPRITE_RAND_MAX); +80023d2c: 24050003 li a1,3 + BubbleVibrationTimer = 0; + } + } + else + { + BubbleSpr.x += SystemRand(BUBBLE_SPRITE_RAND_MIN,BUBBLE_SPRITE_RAND_MAX); +80023d30: 00431021 addu v0,v0,v1 + BubbleSpr.y += SystemRand(BUBBLE_SPRITE_RAND_MIN,BUBBLE_SPRITE_RAND_MAX); +80023d34: 2404fffd li a0,-3 +80023d38: 0c00a03d jal 800280f4 <SystemRand> +80023d3c: a6023c78 sh v0,15480(s0) +80023d40: 96430002 lhu v1,2(s2) + + // Keep information about last aircraft notified... + // so that it gets called on next cycle + FirstNotification = i; +80023d44: a2911c1a sb s1,7194(s4) + } + } + else + { + BubbleSpr.x += SystemRand(BUBBLE_SPRITE_RAND_MIN,BUBBLE_SPRITE_RAND_MAX); + BubbleSpr.y += SystemRand(BUBBLE_SPRITE_RAND_MIN,BUBBLE_SPRITE_RAND_MAX); +80023d48: 00431021 addu v0,v0,v1 +80023d4c: a6420002 sh v0,2(s2) + + // Keep information about last aircraft notified... + // so that it gets called on next cycle + FirstNotification = i; + BubbleVibrationTimer++; +80023d50: 96a21c1c lhu v0,7196(s5) +80023d54: 00000000 nop +80023d58: 24420001 addiu v0,v0,1 +80023d5c: a6a21c1c sh v0,7196(s5) + } + + GfxSortSprite(&BubbleSpr); +80023d60: 26043c78 addiu a0,s0,15480 +80023d64: 0c0090d2 jal 80024348 <GfxSortSprite> +80023d68: 3c118007 lui s1,0x8007 + FontSetFlags(&SmallFont, FONT_CENTERED); +80023d6c: 26248d38 addiu a0,s1,-29384 +80023d70: 0c008441 jal 80021104 <FontSetFlags> +80023d74: 24050001 li a1,1 + FontPrintText(&SmallFont,BubbleSpr.x + 8 , BubbleSpr.y + 2, "%d", ptrFlightData->ActiveAircraft); +80023d78: 96460002 lhu a2,2(s2) +80023d7c: 96053c78 lhu a1,15480(s0) +80023d80: 92620201 lbu v0,513(s3) +80023d84: 24c60002 addiu a2,a2,2 +80023d88: 24a50008 addiu a1,a1,8 +80023d8c: 3c078004 lui a3,0x8004 +80023d90: 00063400 sll a2,a2,0x10 +80023d94: 00052c00 sll a1,a1,0x10 +80023d98: 26248d38 addiu a0,s1,-29384 +80023d9c: afa20010 sw v0,16(sp) +80023da0: 00063403 sra a2,a2,0x10 +80023da4: 00052c03 sra a1,a1,0x10 +80023da8: 0c008451 jal 80021144 <FontPrintText> +80023dac: 24e70730 addiu a3,a3,1840 + { + FirstNotification = 0; + BubbleVibrationTimer = 0; + } + //dprintf("Bubble timer: %d\n",BubbleVibrationTimer); +} +80023db0: 8fbf0034 lw ra,52(sp) +80023db4: 8fb50030 lw s5,48(sp) +80023db8: 8fb4002c lw s4,44(sp) +80023dbc: 8fb30028 lw s3,40(sp) +80023dc0: 8fb20024 lw s2,36(sp) +80023dc4: 8fb10020 lw s1,32(sp) +80023dc8: 8fb0001c lw s0,28(sp) + + GfxSortSprite(&BubbleSpr); + FontSetFlags(&SmallFont, FONT_CENTERED); + FontPrintText(&SmallFont,BubbleSpr.x + 8 , BubbleSpr.y + 2, "%d", ptrFlightData->ActiveAircraft); + + GfxDrawButton(NOTIFICATION_BUTTON_X, NOTIFICATION_BUTTON_Y, PAD_CIRCLE); +80023dcc: 24060020 li a2,32 +80023dd0: 24050030 li a1,48 +80023dd4: 24040142 li a0,322 +80023dd8: 0800914a j 80024528 <GfxDrawButton> +80023ddc: 27bd0038 addiu sp,sp,56 + // Set initial values to static variables + BubbleVibrationTimer = 0; + FirstNotification = 0; + } + + for(i = FirstNotification ; i < ptrFlightData->nAircraft ; i++) +80023de0: 1000ffba b 80023ccc <GameGuiBubble+0x48> +80023de4: 323100ff andi s1,s1,0xff + { + FirstNotification = 0; + BubbleVibrationTimer = 0; + } + //dprintf("Bubble timer: %d\n",BubbleVibrationTimer); +} +80023de8: 8fbf0034 lw ra,52(sp) + } + + if(AtLeastOneEnabled == false) + { + FirstNotification = 0; + BubbleVibrationTimer = 0; +80023dec: 3c028007 lui v0,0x8007 + } + //dprintf("Bubble timer: %d\n",BubbleVibrationTimer); +} +80023df0: 8fb50030 lw s5,48(sp) +80023df4: 8fb30028 lw s3,40(sp) +80023df8: 8fb20024 lw s2,36(sp) +80023dfc: 8fb10020 lw s1,32(sp) +80023e00: 8fb0001c lw s0,28(sp) + } + } + + if(AtLeastOneEnabled == false) + { + FirstNotification = 0; +80023e04: a2801c1a sb zero,7194(s4) + BubbleVibrationTimer = 0; +80023e08: a4401c1c sh zero,7196(v0) + } + //dprintf("Bubble timer: %d\n",BubbleVibrationTimer); +} +80023e0c: 8fb4002c lw s4,44(sp) +80023e10: 03e00008 jr ra +80023e14: 27bd0038 addiu sp,sp,56 + +80023e18 <GameGuiClock>: + +void GameGuiClock(uint8_t hour, uint8_t min) +{ + static char strClock[6]; // HH:MM + \0 (6 characters needed) + + if(GameStartupFlag || System1SecondTick() == true) +80023e18: 3c028007 lui v0,0x8007 +80023e1c: 90421d24 lbu v0,7460(v0) + + strcat(strNotificationRequest, "."); +} + +void GameGuiClock(uint8_t hour, uint8_t min) +{ +80023e20: 27bdffd8 addiu sp,sp,-40 +80023e24: afb20020 sw s2,32(sp) +80023e28: afb1001c sw s1,28(sp) +80023e2c: afb00018 sw s0,24(sp) +80023e30: afbf0024 sw ra,36(sp) +80023e34: 309100ff andi s1,a0,0xff +80023e38: 30b200ff andi s2,a1,0xff + static char strClock[6]; // HH:MM + \0 (6 characters needed) + + if(GameStartupFlag || System1SecondTick() == true) +80023e3c: 1040000e beqz v0,80023e78 <GameGuiClock+0x60> +80023e40: 3c108007 lui s0,0x8007 + { + memset(strClock, 0, 6); +80023e44: 26041c14 addiu a0,s0,7188 +80023e48: 24060006 li a2,6 +80023e4c: 0c00d7ab jal 80035eac <memset> +80023e50: 00002821 move a1,zero + snprintf(strClock,6,"%02d:%02d",hour, min); +80023e54: 3c068004 lui a2,0x8004 +80023e58: afb20010 sw s2,16(sp) +80023e5c: 02203821 move a3,s1 +80023e60: 24c60734 addiu a2,a2,1844 +80023e64: 24050006 li a1,6 +80023e68: 0c00ecf4 jal 8003b3d0 <snprintf> +80023e6c: 26041c14 addiu a0,s0,7188 + } + + RadioFont.flags = FONT_NOFLAGS; +80023e70: 10000006 b 80023e8c <GameGuiClock+0x74> +80023e74: 3c048007 lui a0,0x8007 + +void GameGuiClock(uint8_t hour, uint8_t min) +{ + static char strClock[6]; // HH:MM + \0 (6 characters needed) + + if(GameStartupFlag || System1SecondTick() == true) +80023e78: 0c009fb6 jal 80027ed8 <System1SecondTick> +80023e7c: 00000000 nop +80023e80: 1440fff1 bnez v0,80023e48 <GameGuiClock+0x30> +80023e84: 26041c14 addiu a0,s0,7188 + { + memset(strClock, 0, 6); + snprintf(strClock,6,"%02d:%02d",hour, min); + } + + RadioFont.flags = FONT_NOFLAGS; +80023e88: 3c048007 lui a0,0x8007 +80023e8c: 24848d78 addiu a0,a0,-29320 + RadioFont.max_ch_wrap = 0; +80023e90: a0800032 sb zero,50(a0) + FontPrintText(&RadioFont,CLOCK_X,CLOCK_Y,strClock); +} +80023e94: 8fbf0024 lw ra,36(sp) +80023e98: 8fb20020 lw s2,32(sp) +80023e9c: 8fb1001c lw s1,28(sp) + snprintf(strClock,6,"%02d:%02d",hour, min); + } + + RadioFont.flags = FONT_NOFLAGS; + RadioFont.max_ch_wrap = 0; + FontPrintText(&RadioFont,CLOCK_X,CLOCK_Y,strClock); +80023ea0: 26071c14 addiu a3,s0,7188 +} +80023ea4: 8fb00018 lw s0,24(sp) + { + memset(strClock, 0, 6); + snprintf(strClock,6,"%02d:%02d",hour, min); + } + + RadioFont.flags = FONT_NOFLAGS; +80023ea8: ac800034 sw zero,52(a0) + RadioFont.max_ch_wrap = 0; + FontPrintText(&RadioFont,CLOCK_X,CLOCK_Y,strClock); +80023eac: 24060010 li a2,16 +80023eb0: 24050010 li a1,16 +80023eb4: 08008451 j 80021144 <FontPrintText> +80023eb8: 27bd0028 addiu sp,sp,40 + +80023ebc <GfxInitDrawEnv>: +} + + +void GfxInitDrawEnv(void) +{ + DrawEnv.x = 0; +80023ebc: 3c048004 lui a0,0x8004 +80023ec0: 24845ca4 addiu a0,a0,23716 + DrawEnv.y = 0; + DrawEnv.draw_on_display = false; + DrawEnv.w = X_SCREEN_RESOLUTION; +80023ec4: 24020180 li v0,384 +80023ec8: a4820006 sh v0,6(a0) + DrawEnv.h = Y_SCREEN_RESOLUTION; +80023ecc: 240200f0 li v0,240 +} + + +void GfxInitDrawEnv(void) +{ + DrawEnv.x = 0; +80023ed0: a4800002 sh zero,2(a0) + DrawEnv.y = 0; +80023ed4: a4800004 sh zero,4(a0) + DrawEnv.draw_on_display = false; +80023ed8: a0800001 sb zero,1(a0) + DrawEnv.w = X_SCREEN_RESOLUTION; + DrawEnv.h = Y_SCREEN_RESOLUTION; + + GsSetDrawEnv(&DrawEnv); +80023edc: 0800bada j 8002eb68 <GsSetDrawEnv> +80023ee0: a4820008 sh v0,8(a0) + +80023ee4 <GfxInitDispEnv>: +} + +void GfxInitDispEnv(void) +{ + DispEnv.x = 0; +80023ee4: 3c048007 lui a0,0x8007 +80023ee8: a4801c2c sh zero,7212(a0) + DispEnv.y = 0; +80023eec: 24841c2c addiu a0,a0,7212 + + GsSetDispEnv(&DispEnv); +80023ef0: 0800bb71 j 8002edc4 <GsSetDispEnv> +80023ef4: a4800002 sh zero,2(a0) + +80023ef8 <GfxSetPrimitiveList>: +} + +void GfxSetPrimitiveList(void) +{ + GsSetList(prim_list); +80023ef8: 3c048004 lui a0,0x8004 +80023efc: 0800ae4f j 8002b93c <GsSetList> +80023f00: 24843ca4 addiu a0,a0,15524 + +80023f04 <GfxDrawScene_Fast>: +//Dictates (R,G,B) brigthness to all sprites silently +static uint8_t global_lum; + +void GfxSwapBuffers(void) +{ + if(DrawEnv.h == Y_SCREEN_RESOLUTION) +80023f04: 3c048004 lui a0,0x8004 +80023f08: 24825ca4 addiu v0,a0,23716 +80023f0c: 84450008 lh a1,8(v0) +80023f10: 240300f0 li v1,240 +80023f14: 14a3001a bne a1,v1,80023f80 <GfxDrawScene_Fast+0x7c> +80023f18: 00000000 nop +{ + GsSetList(prim_list); +} + +void GfxDrawScene_Fast(void) +{ +80023f1c: 27bdffe8 addiu sp,sp,-24 +80023f20: afb00010 sw s0,16(sp) +80023f24: 00808021 move s0,a0 + +void GfxSwapBuffers(void) +{ + if(DrawEnv.h == Y_SCREEN_RESOLUTION) + { + if(DispEnv.y == 0) +80023f28: 3c048007 lui a0,0x8007 +80023f2c: 24851c2c addiu a1,a0,7212 +80023f30: 84a30002 lh v1,2(a1) +80023f34: 00000000 nop +80023f38: 14600005 bnez v1,80023f50 <GfxDrawScene_Fast+0x4c> +80023f3c: afbf0014 sw ra,20(sp) + { + DispEnv.y = DOUBLE_BUFFERING_SWAP_Y; +80023f40: 24030100 li v1,256 +80023f44: a4a30002 sh v1,2(a1) + DrawEnv.y = 0; +80023f48: 10000006 b 80023f64 <GfxDrawScene_Fast+0x60> +80023f4c: a4400004 sh zero,4(v0) + } + else if(DispEnv.y == DOUBLE_BUFFERING_SWAP_Y) +80023f50: 24060100 li a2,256 +80023f54: 14660003 bne v1,a2,80023f64 <GfxDrawScene_Fast+0x60> +80023f58: 00000000 nop + { + DispEnv.y = 0; +80023f5c: a4a00002 sh zero,2(a1) + DrawEnv.y = DOUBLE_BUFFERING_SWAP_Y; +80023f60: a4430004 sh v1,4(v0) + } + + GsSetDispEnv(&DispEnv); +80023f64: 0c00bb71 jal 8002edc4 <GsSetDispEnv> +80023f68: 24841c2c addiu a0,a0,7212 + GsSetDrawEnv(&DrawEnv); +80023f6c: 0c00bada jal 8002eb68 <GsSetDrawEnv> +80023f70: 26045ca4 addiu a0,s0,23716 + +void GfxDrawScene_Fast(void) +{ + GfxSwapBuffers(); + GsDrawList(); +} +80023f74: 8fbf0014 lw ra,20(sp) +80023f78: 8fb00010 lw s0,16(sp) +80023f7c: 27bd0018 addiu sp,sp,24 +} + +void GfxDrawScene_Fast(void) +{ + GfxSwapBuffers(); + GsDrawList(); +80023f80: 0800ae5f j 8002b97c <GsDrawList> +80023f84: 00000000 nop + +80023f88 <GfxDrawScene>: +} + +void GfxDrawScene(void) +{ +80023f88: 27bdffe8 addiu sp,sp,-24 +80023f8c: afb00010 sw s0,16(sp) +80023f90: afbf0014 sw ra,20(sp) + while( (SystemRefreshNeeded() == false) + || +80023f94: 24100001 li s0,1 + GsDrawList(); +} + +void GfxDrawScene(void) +{ + while( (SystemRefreshNeeded() == false) +80023f98: 0c009f9a jal 80027e68 <SystemRefreshNeeded> +80023f9c: 00000000 nop +80023fa0: 1040fffd beqz v0,80023f98 <GfxDrawScene+0x10> +80023fa4: 00000000 nop + || + (GsIsDrawing() == true) +80023fa8: 0c00bf9f jal 8002fe7c <GsIsDrawing> +80023fac: 00000000 nop +} + +void GfxDrawScene(void) +{ + while( (SystemRefreshNeeded() == false) + || +80023fb0: 1050fff9 beq v0,s0,80023f98 <GfxDrawScene+0x10> +80023fb4: 00000000 nop + (GsIsDrawing() == true) + || + (SystemDMAReady() == false) ); +80023fb8: 0c009f8b jal 80027e2c <SystemDMAReady> +80023fbc: 00000000 nop +void GfxDrawScene(void) +{ + while( (SystemRefreshNeeded() == false) + || + (GsIsDrawing() == true) + || +80023fc0: 1040fff5 beqz v0,80023f98 <GfxDrawScene+0x10> +80023fc4: 00000000 nop + (SystemDMAReady() == false) ); + + GfxDrawScene_Fast(); +80023fc8: 0c008fc1 jal 80023f04 <GfxDrawScene_Fast> +80023fcc: 00000000 nop + + if(UpdatePads() == false) +80023fd0: 0c009aec jal 80026bb0 <UpdatePads> +80023fd4: 00000000 nop +80023fd8: 10400002 beqz v0,80023fe4 <GfxDrawScene+0x5c> +80023fdc: 24040001 li a0,1 + { + SystemSetEmergencyMode(true); + } + else + { + SystemSetEmergencyMode(false); +80023fe0: 00002021 move a0,zero +80023fe4: 0c00a050 jal 80028140 <SystemSetEmergencyMode> +80023fe8: 00000000 nop + } + + SystemRunTimers(); +80023fec: 0c009fc2 jal 80027f08 <SystemRunTimers> +80023ff0: 00000000 nop + + SystemUserTimersHandler(); +80023ff4: 0c00a0df jal 8002837c <SystemUserTimersHandler> +80023ff8: 00000000 nop + + SystemDisableScreenRefresh(); +80023ffc: 0c009fb2 jal 80027ec8 <SystemDisableScreenRefresh> +80024000: 00000000 nop + + MemCardHandler(); +80024004: 0c009747 jal 80025d1c <MemCardHandler> +80024008: 00000000 nop + + SystemCheckStack(); +} +8002400c: 8fbf0014 lw ra,20(sp) +80024010: 8fb00010 lw s0,16(sp) + + SystemDisableScreenRefresh(); + + MemCardHandler(); + + SystemCheckStack(); +80024014: 0800a158 j 80028560 <SystemCheckStack> +80024018: 27bd0018 addiu sp,sp,24 + +8002401c <GfxGetGlobalLuminance>: +} + +uint8_t GfxGetGlobalLuminance(void) +{ + return global_lum; +} +8002401c: 3c028007 lui v0,0x8007 +80024020: 90421c2a lbu v0,7210(v0) +80024024: 03e00008 jr ra +80024028: 00000000 nop + +8002402c <GfxSetGlobalLuminance>: + +void GfxSetGlobalLuminance(uint8_t value) +{ + global_lum = value; +8002402c: 3c028007 lui v0,0x8007 +80024030: 03e00008 jr ra +80024034: a0441c2a sb a0,7210(v0) + +80024038 <GfxIncreaseGlobalLuminance>: +} + +void GfxIncreaseGlobalLuminance(int8_t step) +{ + if( ( (global_lum + step) < MAX_LUMINANCE ) +80024038: 3c038007 lui v1,0x8007 +8002403c: 90621c2a lbu v0,7210(v1) +{ + global_lum = value; +} + +void GfxIncreaseGlobalLuminance(int8_t step) +{ +80024040: 00042600 sll a0,a0,0x18 +80024044: 00042603 sra a0,a0,0x18 + if( ( (global_lum + step) < MAX_LUMINANCE ) +80024048: 00442021 addu a0,v0,a0 +8002404c: 2482ffff addiu v0,a0,-1 +80024050: 2c4200fe sltiu v0,v0,254 +80024054: 10400003 beqz v0,80024064 <GfxIncreaseGlobalLuminance+0x2c> +80024058: 2402ffff li v0,-1 +8002405c: 03e00008 jr ra +80024060: a0641c2a sb a0,7210(v1) + { + global_lum += step; + } + else + { + global_lum = MAX_LUMINANCE; +80024064: 03e00008 jr ra +80024068: a0621c2a sb v0,7210(v1) + +8002406c <GfxRotateFromDegrees>: +} + +int GfxRotateFromDegrees(int deg) +{ + return deg << ROTATE_BIT_SHIFT; +} +8002406c: 03e00008 jr ra +80024070: 00041300 sll v0,a0,0xc + +80024074 <GfxIsGPUBusy>: + +bool GfxIsGPUBusy(void) +{ +80024074: 27bdffe8 addiu sp,sp,-24 +80024078: afbf0014 sw ra,20(sp) + return (GsIsDrawing() || gfx_busy || SystemDMABusy() ); +8002407c: 0c00bf9f jal 8002fe7c <GsIsDrawing> +80024080: 00000000 nop +80024084: 1440000a bnez v0,800240b0 <GfxIsGPUBusy+0x3c> +80024088: 24030001 li v1,1 +8002408c: 3c028007 lui v0,0x8007 +80024090: 90421c2b lbu v0,7211(v0) +80024094: 00000000 nop +80024098: 304200ff andi v0,v0,0xff +8002409c: 14400004 bnez v0,800240b0 <GfxIsGPUBusy+0x3c> +800240a0: 00000000 nop +800240a4: 0c009f91 jal 80027e44 <SystemDMABusy> +800240a8: 00000000 nop +800240ac: 00401821 move v1,v0 +} +800240b0: 8fbf0014 lw ra,20(sp) +800240b4: 30620001 andi v0,v1,0x1 +800240b8: 03e00008 jr ra +800240bc: 27bd0018 addiu sp,sp,24 + +800240c0 <GfxDrawScene_Slow>: + + SystemCheckStack(); +} + +void GfxDrawScene_Slow(void) +{ +800240c0: 27bdffe8 addiu sp,sp,-24 +800240c4: afbf0014 sw ra,20(sp) + GfxDrawScene(); +800240c8: 0c008fe2 jal 80023f88 <GfxDrawScene> +800240cc: 00000000 nop + while(GfxIsGPUBusy() == true); +800240d0: 0c00901d jal 80024074 <GfxIsGPUBusy> +800240d4: 00000000 nop +800240d8: 1440fffd bnez v0,800240d0 <GfxDrawScene_Slow+0x10> +800240dc: 00000000 nop +} +800240e0: 8fbf0014 lw ra,20(sp) +800240e4: 00000000 nop +800240e8: 03e00008 jr ra +800240ec: 27bd0018 addiu sp,sp,24 + +800240f0 <GfxSpriteFromFile>: +{ + return (GsIsDrawing() || gfx_busy || SystemDMABusy() ); +} + +bool GfxSpriteFromFile(char * fname, GsSprite * spr) +{ +800240f0: 27bdffb0 addiu sp,sp,-80 +800240f4: afb20048 sw s2,72(sp) +800240f8: afb00040 sw s0,64(sp) +800240fc: afbf004c sw ra,76(sp) +80024100: afb10044 sw s1,68(sp) + GsImage gsi; + + if(SystemLoadFile(fname) == false) +80024104: 0c00a022 jal 80028088 <SystemLoadFile> +80024108: 00a09021 move s2,a1 +8002410c: 10400011 beqz v0,80024154 <GfxSpriteFromFile+0x64> +80024110: 00408021 move s0,v0 + { + return false; + } + + while(GfxIsGPUBusy() == true); +80024114: 0c00901d jal 80024074 <GfxIsGPUBusy> +80024118: 00000000 nop +8002411c: 1440fffd bnez v0,80024114 <GfxSpriteFromFile+0x24> +80024120: 3c118007 lui s1,0x8007 + + gfx_busy = true; +80024124: 24020001 li v0,1 +80024128: a2221c2b sb v0,7211(s1) + + GsImageFromTim(&gsi,SystemGetBufferAddress() ); +8002412c: 0c00a027 jal 8002809c <SystemGetBufferAddress> +80024130: 00000000 nop +80024134: 00402821 move a1,v0 +80024138: 0c00bda9 jal 8002f6a4 <GsImageFromTim> +8002413c: 27a40010 addiu a0,sp,16 + + GsSpriteFromImage(spr,&gsi,UPLOAD_IMAGE_FLAG); +80024140: 24060001 li a2,1 +80024144: 27a50010 addiu a1,sp,16 +80024148: 0c00bea4 jal 8002fa90 <GsSpriteFromImage> +8002414c: 02402021 move a0,s2 + gfx_busy = false; +80024150: a2201c2b sb zero,7211(s1) + + return true; +} +80024154: 8fbf004c lw ra,76(sp) +80024158: 02001021 move v0,s0 +8002415c: 8fb20048 lw s2,72(sp) +80024160: 8fb10044 lw s1,68(sp) +80024164: 8fb00040 lw s0,64(sp) +80024168: 03e00008 jr ra +8002416c: 27bd0050 addiu sp,sp,80 + +80024170 <GfxCLUTFromFile>: + +bool GfxCLUTFromFile(char * fname) +{ +80024170: 27bdffb0 addiu sp,sp,-80 +80024174: afb00044 sw s0,68(sp) +80024178: afbf004c sw ra,76(sp) + GsImage gsi; + + if(SystemLoadFile(fname) == false) +8002417c: 0c00a022 jal 80028088 <SystemLoadFile> +80024180: afb10048 sw s1,72(sp) +80024184: 1040000f beqz v0,800241c4 <GfxCLUTFromFile+0x54> +80024188: 00408021 move s0,v0 + { + return false; + } + + while(GfxIsGPUBusy() == true); +8002418c: 0c00901d jal 80024074 <GfxIsGPUBusy> +80024190: 00000000 nop +80024194: 1440fffd bnez v0,8002418c <GfxCLUTFromFile+0x1c> +80024198: 24020001 li v0,1 + + gfx_busy = true; +8002419c: 3c118007 lui s1,0x8007 +800241a0: a2221c2b sb v0,7211(s1) + + GsImageFromTim(&gsi,SystemGetBufferAddress() ); +800241a4: 0c00a027 jal 8002809c <SystemGetBufferAddress> +800241a8: 00000000 nop +800241ac: 00402821 move a1,v0 +800241b0: 0c00bda9 jal 8002f6a4 <GsImageFromTim> +800241b4: 27a40010 addiu a0,sp,16 + + GsUploadCLUT(&gsi); +800241b8: 0c00be81 jal 8002fa04 <GsUploadCLUT> +800241bc: 27a40010 addiu a0,sp,16 + + gfx_busy = false; +800241c0: a2201c2b sb zero,7211(s1) + + return true; +} +800241c4: 8fbf004c lw ra,76(sp) +800241c8: 02001021 move v0,s0 +800241cc: 8fb10048 lw s1,72(sp) +800241d0: 8fb00044 lw s0,68(sp) +800241d4: 03e00008 jr ra +800241d8: 27bd0050 addiu sp,sp,80 + +800241dc <GfxIsInsideScreenArea>: + +bool GfxIsInsideScreenArea(short x, short y, short w, short h) +{ +800241dc: 00042400 sll a0,a0,0x10 +800241e0: 00063400 sll a2,a2,0x10 +800241e4: 00042403 sra a0,a0,0x10 +800241e8: 00063403 sra a2,a2,0x10 +800241ec: 00052c00 sll a1,a1,0x10 +800241f0: 00073c00 sll a3,a3,0x10 + if( ( (x + w) >= 0) +800241f4: 00863021 addu a2,a0,a2 + + return true; +} + +bool GfxIsInsideScreenArea(short x, short y, short w, short h) +{ +800241f8: 00052c03 sra a1,a1,0x10 +800241fc: 00073c03 sra a3,a3,0x10 + if( ( (x + w) >= 0) +80024200: 04c00007 bltz a2,80024220 <GfxIsInsideScreenArea+0x44> +80024204: 00001021 move v0,zero + && +80024208: 28840180 slti a0,a0,384 +8002420c: 10800004 beqz a0,80024220 <GfxIsInsideScreenArea+0x44> +80024210: 00a73821 addu a3,a1,a3 + (x < X_SCREEN_RESOLUTION) + && +80024214: 04e00002 bltz a3,80024220 <GfxIsInsideScreenArea+0x44> +80024218: 00000000 nop + ( (y + h) >= 0) + && +8002421c: 28a200f0 slti v0,a1,240 + { + return true; + } + + return false; +} +80024220: 03e00008 jr ra +80024224: 00000000 nop + +80024228 <GfxIsSpriteInsideScreenArea>: + +bool GfxIsSpriteInsideScreenArea(GsSprite * spr) +{ + return GfxIsInsideScreenArea(spr->x, spr->y, spr->w, spr->h); +80024228: 84870008 lh a3,8(a0) +8002422c: 84860006 lh a2,6(a0) +80024230: 84850002 lh a1,2(a0) +80024234: 84840000 lh a0,0(a0) +80024238: 08009077 j 800241dc <GfxIsInsideScreenArea> +8002423c: 00000000 nop + +80024240 <GfxSaveDisplayData>: +} + +void GfxSaveDisplayData(GsSprite *spr) +{ + MoveImage( DispEnv.x, + DispEnv.y, +80024240: 3c028007 lui v0,0x8007 + + GfxSortSprite(&PSXButtons); +} + +void GfxSaveDisplayData(GsSprite *spr) +{ +80024244: 27bdffd8 addiu sp,sp,-40 + MoveImage( DispEnv.x, + DispEnv.y, +80024248: 24431c2c addiu v1,v0,7212 + GfxSortSprite(&PSXButtons); +} + +void GfxSaveDisplayData(GsSprite *spr) +{ + MoveImage( DispEnv.x, +8002424c: 84650002 lh a1,2(v1) + + GfxSortSprite(&PSXButtons); +} + +void GfxSaveDisplayData(GsSprite *spr) +{ +80024250: afb20020 sw s2,32(sp) +80024254: afb1001c sw s1,28(sp) +80024258: afb00018 sw s0,24(sp) + MoveImage( DispEnv.x, +8002425c: 241100f0 li s1,240 + + GfxSortSprite(&PSXButtons); +} + +void GfxSaveDisplayData(GsSprite *spr) +{ +80024260: 00808021 move s0,a0 + MoveImage( DispEnv.x, +80024264: 24120180 li s2,384 +80024268: 84441c2c lh a0,7212(v0) +8002426c: afb10014 sw s1,20(sp) +80024270: afb20010 sw s2,16(sp) +80024274: 24070100 li a3,256 + + GfxSortSprite(&PSXButtons); +} + +void GfxSaveDisplayData(GsSprite *spr) +{ +80024278: afbf0024 sw ra,36(sp) + MoveImage( DispEnv.x, +8002427c: 0c00ba20 jal 8002e880 <MoveImage> +80024280: 24060180 li a2,384 + X_SCREEN_RESOLUTION, + Y_SCREEN_RESOLUTION); + + spr->x = 0; + spr->y = 0; + spr->tpage = GFX_SECOND_DISPLAY_TPAGE; +80024284: 24020016 li v0,22 +80024288: a2020011 sb v0,17(s0) + spr->attribute |= COLORMODE(COLORMODE_16BPP); +8002428c: 8e020014 lw v0,20(s0) + spr->u = 0; + spr->v = 0; + spr->r = NORMAL_LUMINANCE; + spr->g = NORMAL_LUMINANCE; + spr->b = NORMAL_LUMINANCE; +} +80024290: 8fbf0024 lw ra,36(sp) + Y_SCREEN_RESOLUTION); + + spr->x = 0; + spr->y = 0; + spr->tpage = GFX_SECOND_DISPLAY_TPAGE; + spr->attribute |= COLORMODE(COLORMODE_16BPP); +80024294: 34420002 ori v0,v0,0x2 +80024298: ae020014 sw v0,20(s0) + spr->w = X_SCREEN_RESOLUTION; + spr->h = Y_SCREEN_RESOLUTION; + spr->u = 0; + spr->v = 0; + spr->r = NORMAL_LUMINANCE; +8002429c: 2402ff80 li v0,-128 + + spr->x = 0; + spr->y = 0; + spr->tpage = GFX_SECOND_DISPLAY_TPAGE; + spr->attribute |= COLORMODE(COLORMODE_16BPP); + spr->w = X_SCREEN_RESOLUTION; +800242a0: a6120006 sh s2,6(s0) + spr->h = Y_SCREEN_RESOLUTION; +800242a4: a6110008 sh s1,8(s0) + spr->u = 0; + spr->v = 0; + spr->r = NORMAL_LUMINANCE; + spr->g = NORMAL_LUMINANCE; + spr->b = NORMAL_LUMINANCE; +} +800242a8: 8fb20020 lw s2,32(sp) +800242ac: 8fb1001c lw s1,28(sp) + GFX_SECOND_DISPLAY_X, + GFX_SECOND_DISPLAY_Y, + X_SCREEN_RESOLUTION, + Y_SCREEN_RESOLUTION); + + spr->x = 0; +800242b0: a6000000 sh zero,0(s0) + spr->y = 0; +800242b4: a6000002 sh zero,2(s0) + spr->tpage = GFX_SECOND_DISPLAY_TPAGE; + spr->attribute |= COLORMODE(COLORMODE_16BPP); + spr->w = X_SCREEN_RESOLUTION; + spr->h = Y_SCREEN_RESOLUTION; + spr->u = 0; +800242b8: a2000004 sb zero,4(s0) + spr->v = 0; +800242bc: a2000005 sb zero,5(s0) + spr->r = NORMAL_LUMINANCE; +800242c0: a202000e sb v0,14(s0) + spr->g = NORMAL_LUMINANCE; +800242c4: a202000f sb v0,15(s0) + spr->b = NORMAL_LUMINANCE; +800242c8: a2020010 sb v0,16(s0) +} +800242cc: 8fb00018 lw s0,24(sp) +800242d0: 03e00008 jr ra +800242d4: 27bd0028 addiu sp,sp,40 + +800242d8 <Gfx1HzFlash>: + +bool Gfx1HzFlash(void) +{ +800242d8: 27bdffe8 addiu sp,sp,-24 +800242dc: afbf0014 sw ra,20(sp) + static bool show = false; + + if(System1SecondTick() == true) +800242e0: 0c009fb6 jal 80027ed8 <System1SecondTick> +800242e4: 00000000 nop +800242e8: 10400005 beqz v0,80024300 <Gfx1HzFlash+0x28> +800242ec: 3c038007 lui v1,0x8007 + { + show = show? false:true; +800242f0: 90621c25 lbu v0,7205(v1) +800242f4: 00000000 nop +800242f8: 38420001 xori v0,v0,0x1 +800242fc: a0621c25 sb v0,7205(v1) + } + + return show; +} +80024300: 8fbf0014 lw ra,20(sp) +80024304: 90621c25 lbu v0,7205(v1) +80024308: 03e00008 jr ra +8002430c: 27bd0018 addiu sp,sp,24 + +80024310 <Gfx2HzFlash>: + +bool Gfx2HzFlash(void) +{ +80024310: 27bdffe8 addiu sp,sp,-24 +80024314: afbf0014 sw ra,20(sp) + static bool show = false; + + if(System500msTick() == true) +80024318: 0c009fbe jal 80027ef8 <System500msTick> +8002431c: 00000000 nop +80024320: 10400005 beqz v0,80024338 <Gfx2HzFlash+0x28> +80024324: 3c038007 lui v1,0x8007 + { + show = show? false:true; +80024328: 90621c24 lbu v0,7204(v1) +8002432c: 00000000 nop +80024330: 38420001 xori v0,v0,0x1 +80024334: a0621c24 sb v0,7204(v1) + } + + return show; +} +80024338: 8fbf0014 lw ra,20(sp) +8002433c: 90621c24 lbu v0,7204(v1) +80024340: 03e00008 jr ra +80024344: 27bd0018 addiu sp,sp,24 + +80024348 <GfxSortSprite>: + GfxDrawScene(); + while(GfxIsGPUBusy() == true); +} + +void GfxSortSprite(GsSprite * spr) +{ +80024348: 27bdffc8 addiu sp,sp,-56 +8002434c: afb10018 sw s1,24(sp) + uint8_t aux_r = spr->r; + uint8_t aux_g = spr->g; + uint8_t aux_b = spr->b; + unsigned char aux_tpage = spr->tpage; + short aux_w = spr->w; +80024350: 84910006 lh s1,6(a0) + GfxDrawScene(); + while(GfxIsGPUBusy() == true); +} + +void GfxSortSprite(GsSprite * spr) +{ +80024354: afbf0034 sw ra,52(sp) +80024358: afb70030 sw s7,48(sp) +8002435c: afb6002c sw s6,44(sp) +80024360: afb50028 sw s5,40(sp) +80024364: afb40024 sw s4,36(sp) +80024368: afb30020 sw s3,32(sp) +8002436c: afb2001c sw s2,28(sp) + short aux_w = spr->w; + short aux_x = spr->x; + bool has_1hz_flash = spr->attribute & GFX_1HZ_FLASH; + bool has_2hz_flash = spr->attribute & GFX_2HZ_FLASH; + + if( (spr->w <= 0) || (spr->h <= 0) ) +80024370: 1a200062 blez s1,800244fc <GfxSortSprite+0x1b4> +80024374: afb00014 sw s0,20(sp) +80024378: 84820008 lh v0,8(a0) +8002437c: 00000000 nop +80024380: 1840005e blez v0,800244fc <GfxSortSprite+0x1b4> +80024384: 00808021 move s0,a0 + { + // Invalid width or heigth + return; + } + + if(GfxIsSpriteInsideScreenArea(spr) == false) +80024388: 0c00908a jal 80024228 <GfxIsSpriteInsideScreenArea> +8002438c: 00000000 nop +80024390: 1040005a beqz v0,800244fc <GfxSortSprite+0x1b4> +80024394: 00000000 nop + uint8_t aux_g = spr->g; + uint8_t aux_b = spr->b; + unsigned char aux_tpage = spr->tpage; + short aux_w = spr->w; + short aux_x = spr->x; + bool has_1hz_flash = spr->attribute & GFX_1HZ_FLASH; +80024398: 8e170014 lw s7,20(s0) + while(GfxIsGPUBusy() == true); +} + +void GfxSortSprite(GsSprite * spr) +{ + uint8_t aux_r = spr->r; +8002439c: 9214000e lbu s4,14(s0) + + if(GfxIsSpriteInsideScreenArea(spr) == false) + { + return; + } + else if(has_2hz_flash && Gfx2HzFlash() == false) +800243a0: 32e20100 andi v0,s7,0x100 +} + +void GfxSortSprite(GsSprite * spr) +{ + uint8_t aux_r = spr->r; + uint8_t aux_g = spr->g; +800243a4: 9213000f lbu s3,15(s0) + uint8_t aux_b = spr->b; +800243a8: 92120010 lbu s2,16(s0) + unsigned char aux_tpage = spr->tpage; +800243ac: 92160011 lbu s6,17(s0) + short aux_w = spr->w; + short aux_x = spr->x; +800243b0: 86150000 lh s5,0(s0) + + if(GfxIsSpriteInsideScreenArea(spr) == false) + { + return; + } + else if(has_2hz_flash && Gfx2HzFlash() == false) +800243b4: 14400007 bnez v0,800243d4 <GfxSortSprite+0x8c> +800243b8: 3c028007 lui v0,0x8007 + { + return; + } + + if(global_lum != NORMAL_LUMINANCE) +800243bc: 90421c2a lbu v0,7210(v0) +800243c0: 24030080 li v1,128 +800243c4: 14430009 bne v0,v1,800243ec <GfxSortSprite+0xa4> +800243c8: 00000000 nop + uint8_t aux_g = spr->g; + uint8_t aux_b = spr->b; + unsigned char aux_tpage = spr->tpage; + short aux_w = spr->w; + short aux_x = spr->x; + bool has_1hz_flash = spr->attribute & GFX_1HZ_FLASH; +800243cc: 10000023 b 8002445c <GfxSortSprite+0x114> +800243d0: 32f70080 andi s7,s7,0x80 + + if(GfxIsSpriteInsideScreenArea(spr) == false) + { + return; + } + else if(has_2hz_flash && Gfx2HzFlash() == false) +800243d4: 0c0090c4 jal 80024310 <Gfx2HzFlash> +800243d8: 00000000 nop +800243dc: 1440fff7 bnez v0,800243bc <GfxSortSprite+0x74> +800243e0: 3c028007 lui v0,0x8007 +800243e4: 10000045 b 800244fc <GfxSortSprite+0x1b4> +800243e8: 00000000 nop + return; + } + + if(global_lum != NORMAL_LUMINANCE) + { + if(spr->r < NORMAL_LUMINANCE - global_lum) +800243ec: 9204000e lbu a0,14(s0) +800243f0: 00621823 subu v1,v1,v0 +800243f4: 0083282a slt a1,a0,v1 +800243f8: 10a00003 beqz a1,80024408 <GfxSortSprite+0xc0> +800243fc: 00442021 addu a0,v0,a0 +80024400: 10000003 b 80024410 <GfxSortSprite+0xc8> +80024404: a200000e sb zero,14(s0) + { + spr->r = 0; + } + else + { + spr->r -= NORMAL_LUMINANCE - global_lum; +80024408: 2484ff80 addiu a0,a0,-128 +8002440c: a204000e sb a0,14(s0) + } + + if(spr->g < NORMAL_LUMINANCE - global_lum) +80024410: 9204000f lbu a0,15(s0) +80024414: 00000000 nop +80024418: 0083282a slt a1,a0,v1 +8002441c: 10a00003 beqz a1,8002442c <GfxSortSprite+0xe4> +80024420: 00442021 addu a0,v0,a0 +80024424: 10000003 b 80024434 <GfxSortSprite+0xec> +80024428: a200000f sb zero,15(s0) + { + spr->g = 0; + } + else + { + spr->g -= NORMAL_LUMINANCE - global_lum; +8002442c: 2484ff80 addiu a0,a0,-128 +80024430: a204000f sb a0,15(s0) + } + + if(spr->b < NORMAL_LUMINANCE - global_lum) +80024434: 92040010 lbu a0,16(s0) +80024438: 00000000 nop +8002443c: 0083182a slt v1,a0,v1 +80024440: 10600003 beqz v1,80024450 <GfxSortSprite+0x108> +80024444: 00441021 addu v0,v0,a0 +80024448: 10000003 b 80024458 <GfxSortSprite+0x110> +8002444c: a2000010 sb zero,16(s0) + { + spr->b = 0; + } + else + { + spr->b -= NORMAL_LUMINANCE - global_lum; +80024450: 2442ff80 addiu v0,v0,-128 +80024454: a2020010 sb v0,16(s0) + uint8_t aux_g = spr->g; + uint8_t aux_b = spr->b; + unsigned char aux_tpage = spr->tpage; + short aux_w = spr->w; + short aux_x = spr->x; + bool has_1hz_flash = spr->attribute & GFX_1HZ_FLASH; +80024458: 32f70080 andi s7,s7,0x80 + { + spr->b -= NORMAL_LUMINANCE - global_lum; + } + } + + if(has_1hz_flash == true) +8002445c: 12e00005 beqz s7,80024474 <GfxSortSprite+0x12c> +80024460: 2403ff7f li v1,-129 + { + spr->attribute &= ~(GFX_1HZ_FLASH); +80024464: 8e020014 lw v0,20(s0) +80024468: 00000000 nop +8002446c: 00431024 and v0,v0,v1 +80024470: ae020014 sw v0,20(s0) + } + + if(spr->w > MAX_SIZE_FOR_GSSPRITE) +80024474: 86020006 lh v0,6(s0) +80024478: 00000000 nop +8002447c: 28420101 slti v0,v0,257 +80024480: 14400013 bnez v0,800244d0 <GfxSortSprite+0x188> +80024484: 24020100 li v0,256 + { + // GsSprites can't be bigger than 256x256, so since display + // resolution is 384x240, it must be split into two primitives. + + spr->w = MAX_SIZE_FOR_GSSPRITE; +80024488: a6020006 sh v0,6(s0) + GsSortSprite(spr); +8002448c: 0c00b356 jal 8002cd58 <GsSortSprite> +80024490: 02002021 move a0,s0 + + spr->x += MAX_SIZE_FOR_GSSPRITE; +80024494: 96020000 lhu v0,0(s0) + spr->w = X_SCREEN_RESOLUTION - MAX_SIZE_FOR_GSSPRITE; + spr->tpage += MAX_SIZE_FOR_GSSPRITE / GFX_TPAGE_WIDTH; + GsSortSprite(spr); +80024498: 02002021 move a0,s0 + // resolution is 384x240, it must be split into two primitives. + + spr->w = MAX_SIZE_FOR_GSSPRITE; + GsSortSprite(spr); + + spr->x += MAX_SIZE_FOR_GSSPRITE; +8002449c: 24420100 addiu v0,v0,256 +800244a0: a6020000 sh v0,0(s0) + spr->w = X_SCREEN_RESOLUTION - MAX_SIZE_FOR_GSSPRITE; +800244a4: 24020080 li v0,128 +800244a8: a6020006 sh v0,6(s0) + spr->tpage += MAX_SIZE_FOR_GSSPRITE / GFX_TPAGE_WIDTH; +800244ac: 92020011 lbu v0,17(s0) +800244b0: 00000000 nop +800244b4: 24420004 addiu v0,v0,4 + GsSortSprite(spr); +800244b8: 0c00b356 jal 8002cd58 <GsSortSprite> +800244bc: a2020011 sb v0,17(s0) + + // Restore original values after sorting + spr->w = aux_w; +800244c0: a6110006 sh s1,6(s0) + spr->tpage = aux_tpage; +800244c4: a2160011 sb s6,17(s0) +800244c8: 10000003 b 800244d8 <GfxSortSprite+0x190> +800244cc: a6150000 sh s5,0(s0) + spr->x = aux_x; + } + else + { + GsSortSprite(spr); +800244d0: 0c00b356 jal 8002cd58 <GsSortSprite> +800244d4: 02002021 move a0,s0 + } + + if(has_1hz_flash == true) +800244d8: 12e00005 beqz s7,800244f0 <GfxSortSprite+0x1a8> +800244dc: 00000000 nop + { + spr->attribute |= GFX_1HZ_FLASH; +800244e0: 8e020014 lw v0,20(s0) +800244e4: 00000000 nop +800244e8: 34420080 ori v0,v0,0x80 +800244ec: ae020014 sw v0,20(s0) + } + + spr->r = aux_r; +800244f0: a214000e sb s4,14(s0) + spr->g = aux_g; +800244f4: a213000f sb s3,15(s0) + spr->b = aux_b; +800244f8: a2120010 sb s2,16(s0) +} +800244fc: 8fbf0034 lw ra,52(sp) +80024500: 8fb70030 lw s7,48(sp) +80024504: 8fb6002c lw s6,44(sp) +80024508: 8fb50028 lw s5,40(sp) +8002450c: 8fb40024 lw s4,36(sp) +80024510: 8fb30020 lw s3,32(sp) +80024514: 8fb2001c lw s2,28(sp) +80024518: 8fb10018 lw s1,24(sp) +8002451c: 8fb00014 lw s0,20(sp) +80024520: 03e00008 jr ra +80024524: 27bd0038 addiu sp,sp,56 + +80024528 <GfxDrawButton>: +{ + static bool first_entered = true; + static short orig_u; + static short orig_v; + + if(first_entered == true) +80024528: 3c028004 lui v0,0x8004 +8002452c: 90431460 lbu v1,5216(v0) +{ + return GfxIsInsideScreenArea(spr->x, spr->y, spr->w, spr->h); +} + +void GfxDrawButton(short x, short y, unsigned short btn) +{ +80024530: 00045400 sll t2,a0,0x10 +80024534: 00052c00 sll a1,a1,0x10 +80024538: 3c098007 lui t1,0x8007 +8002453c: 000a5403 sra t2,t2,0x10 +80024540: 00052c03 sra a1,a1,0x10 +80024544: 30c6ffff andi a2,a2,0xffff +80024548: 3c088007 lui t0,0x8007 +8002454c: 25248fa0 addiu a0,t1,-28768 + static bool first_entered = true; + static short orig_u; + static short orig_v; + + if(first_entered == true) +80024550: 10600008 beqz v1,80024574 <GfxDrawButton+0x4c> +80024554: 3c078007 lui a3,0x8007 + { + first_entered = false; +80024558: a0401460 sb zero,5216(v0) + orig_u = PSXButtons.u; +8002455c: 90820004 lbu v0,4(a0) +80024560: 00000000 nop +80024564: a5021c28 sh v0,7208(t0) + orig_v = PSXButtons.v; +80024568: 90820005 lbu v0,5(a0) +8002456c: 00000000 nop +80024570: a4e21c26 sh v0,7206(a3) + } + + PSXButtons.w = BUTTON_SIZE; + PSXButtons.h = BUTTON_SIZE; + + PSXButtons.r = NORMAL_LUMINANCE; +80024574: 2403ff80 li v1,-128 + first_entered = false; + orig_u = PSXButtons.u; + orig_v = PSXButtons.v; + } + + PSXButtons.w = BUTTON_SIZE; +80024578: 24020010 li v0,16 + PSXButtons.h = BUTTON_SIZE; + + PSXButtons.r = NORMAL_LUMINANCE; +8002457c: a083000e sb v1,14(a0) + PSXButtons.g = NORMAL_LUMINANCE; +80024580: a083000f sb v1,15(a0) + PSXButtons.b = NORMAL_LUMINANCE; +80024584: a0830010 sb v1,16(a0) + + PSXButtons.x = x; + PSXButtons.y = y; + + switch(btn) +80024588: 24030020 li v1,32 + first_entered = false; + orig_u = PSXButtons.u; + orig_v = PSXButtons.v; + } + + PSXButtons.w = BUTTON_SIZE; +8002458c: a4820006 sh v0,6(a0) + PSXButtons.h = BUTTON_SIZE; +80024590: a4820008 sh v0,8(a0) + + PSXButtons.r = NORMAL_LUMINANCE; + PSXButtons.g = NORMAL_LUMINANCE; + PSXButtons.b = NORMAL_LUMINANCE; + + PSXButtons.x = x; +80024594: a52a8fa0 sh t2,-28768(t1) + PSXButtons.y = y; + + switch(btn) +80024598: 10c30010 beq a2,v1,800245dc <GfxDrawButton+0xb4> +8002459c: a4850002 sh a1,2(a0) +800245a0: 2cc20021 sltiu v0,a2,33 +800245a4: 10400006 beqz v0,800245c0 <GfxDrawButton+0x98> +800245a8: 24020040 li v0,64 +800245ac: 24020010 li v0,16 +800245b0: 14c2000d bne a2,v0,800245e8 <GfxDrawButton+0xc0> +800245b4: 00000000 nop + PSXButtons.u = BUTTON_SQUARE_U; + PSXButtons.v = BUTTON_SQUARE_V; + break; + + case PAD_TRIANGLE: + PSXButtons.u = BUTTON_TRIANGLE_U; +800245b8: 10000009 b 800245e0 <GfxDrawButton+0xb8> +800245bc: a0830004 sb v1,4(a0) + PSXButtons.b = NORMAL_LUMINANCE; + + PSXButtons.x = x; + PSXButtons.y = y; + + switch(btn) +800245c0: 10c20005 beq a2,v0,800245d8 <GfxDrawButton+0xb0> +800245c4: 24020080 li v0,128 +800245c8: 14c20007 bne a2,v0,800245e8 <GfxDrawButton+0xc0> +800245cc: 00000000 nop + PSXButtons.u = BUTTON_CROSS_U; + PSXButtons.v = BUTTON_CROSS_V; + break; + + case PAD_SQUARE: + PSXButtons.u = BUTTON_SQUARE_U; +800245d0: 10000003 b 800245e0 <GfxDrawButton+0xb8> +800245d4: a0800004 sb zero,4(a0) + PSXButtons.y = y; + + switch(btn) + { + case PAD_CROSS: + PSXButtons.u = BUTTON_CROSS_U; +800245d8: 24020030 li v0,48 + PSXButtons.u = BUTTON_TRIANGLE_U; + PSXButtons.v = BUTTON_TRIANGLE_V; + break; + + case PAD_CIRCLE: + PSXButtons.u = BUTTON_CIRCLE_U; +800245dc: a0820004 sb v0,4(a0) + break; + + case PAD_SQUARE: + PSXButtons.u = BUTTON_SQUARE_U; + PSXButtons.v = BUTTON_SQUARE_V; + break; +800245e0: 10000003 b 800245f0 <GfxDrawButton+0xc8> +800245e4: a0800005 sb zero,5(a0) + case PAD_R2: + case PAD_SELECT: + case PAD_START: + default: + // Set null width and height so that sprite doesn't get sorted + PSXButtons.w = 0; +800245e8: a4800006 sh zero,6(a0) + PSXButtons.h = 0; +800245ec: a4800008 sh zero,8(a0) + break; + } + + PSXButtons.u += orig_u; +800245f0: 90820004 lbu v0,4(a0) +800245f4: 91031c28 lbu v1,7208(t0) +800245f8: 00000000 nop +800245fc: 00431021 addu v0,v0,v1 +80024600: a0820004 sb v0,4(a0) + PSXButtons.v += orig_v; +80024604: 90e31c26 lbu v1,7206(a3) +80024608: 90820005 lbu v0,5(a0) +8002460c: 00000000 nop +80024610: 00431021 addu v0,v0,v1 + + GfxSortSprite(&PSXButtons); +80024614: 080090d2 j 80024348 <GfxSortSprite> +80024618: a0820005 sb v0,5(a0) + +8002461c <GfxTPageOffsetFromVRAMPosition>: + + return show; +} + +bool GfxTPageOffsetFromVRAMPosition(GsSprite * spr, short x, short y) +{ +8002461c: 00051400 sll v0,a1,0x10 +80024620: 00021403 sra v0,v0,0x10 + if( (x >= VRAM_W) || (x < 0) || (y >= VRAM_H) || (y < 0) ) +80024624: 3043ffff andi v1,v0,0xffff +80024628: 2c630400 sltiu v1,v1,1024 +8002462c: 1060001e beqz v1,800246a8 <GfxTPageOffsetFromVRAMPosition+0x8c> +80024630: 00063400 sll a2,a2,0x10 +80024634: 00063403 sra a2,a2,0x10 +80024638: 30c3ffff andi v1,a2,0xffff +8002463c: 2c630200 sltiu v1,v1,512 +80024640: 10600019 beqz v1,800246a8 <GfxTPageOffsetFromVRAMPosition+0x8c> +80024644: 00062a03 sra a1,a2,0x8 + { + return false; + } + + spr->tpage = x / GFX_TPAGE_WIDTH; + spr->tpage += (short)(VRAM_W / GFX_TPAGE_WIDTH) * (short)(y / GFX_TPAGE_HEIGHT); +80024648: 00021983 sra v1,v0,0x6 +8002464c: 00052900 sll a1,a1,0x4 +80024650: 00652821 addu a1,v1,a1 + + spr->u = (x % GFX_TPAGE_WIDTH); + + if(spr->attribute & COLORMODE(COLORMODE_8BPP)) +80024654: 8c830014 lw v1,20(a0) + + return show; +} + +bool GfxTPageOffsetFromVRAMPosition(GsSprite * spr, short x, short y) +{ +80024658: 27bdffe8 addiu sp,sp,-24 + { + return false; + } + + spr->tpage = x / GFX_TPAGE_WIDTH; + spr->tpage += (short)(VRAM_W / GFX_TPAGE_WIDTH) * (short)(y / GFX_TPAGE_HEIGHT); +8002465c: 30a500ff andi a1,a1,0xff + + spr->u = (x % GFX_TPAGE_WIDTH); +80024660: 3042003f andi v0,v0,0x3f + + if(spr->attribute & COLORMODE(COLORMODE_8BPP)) +80024664: 30630001 andi v1,v1,0x1 + + return show; +} + +bool GfxTPageOffsetFromVRAMPosition(GsSprite * spr, short x, short y) +{ +80024668: afbf0014 sw ra,20(sp) + { + return false; + } + + spr->tpage = x / GFX_TPAGE_WIDTH; + spr->tpage += (short)(VRAM_W / GFX_TPAGE_WIDTH) * (short)(y / GFX_TPAGE_HEIGHT); +8002466c: a0850011 sb a1,17(a0) + + spr->u = (x % GFX_TPAGE_WIDTH); + + if(spr->attribute & COLORMODE(COLORMODE_8BPP)) +80024670: 10600003 beqz v1,80024680 <GfxTPageOffsetFromVRAMPosition+0x64> +80024674: a0820004 sb v0,4(a0) + { + // On 8bpp images, it looks like U offset needs to be multiplied by 2. + spr->u <<= 1; +80024678: 00021040 sll v0,v0,0x1 +8002467c: a0820004 sb v0,4(a0) + } + + spr->v = (y % GFX_TPAGE_HEIGHT); +80024680: a0860005 sb a2,5(a0) + + dprintf("Sprite:\n\tTPAGE: %d\n\tU=%d\n\tV=%d\n",spr->tpage,spr->u, spr->v); +80024684: 30c700ff andi a3,a2,0xff +80024688: 90860004 lbu a2,4(a0) +8002468c: 3c048004 lui a0,0x8004 +80024690: 0c00ed8f jal 8003b63c <printf> +80024694: 248407a8 addiu a0,a0,1960 + + return false; +} +80024698: 8fbf0014 lw ra,20(sp) +8002469c: 00001021 move v0,zero +800246a0: 03e00008 jr ra +800246a4: 27bd0018 addiu sp,sp,24 +800246a8: 03e00008 jr ra +800246ac: 00001021 move v0,zero + +800246b0 <GfxIsometricToCartesian>: + +TYPE_CARTESIAN_POS GfxIsometricToCartesian(TYPE_ISOMETRIC_POS * ptrIsoPos) +{ + TYPE_CARTESIAN_POS retCartPos; + + retCartPos.x = ptrIsoPos->x - (ptrIsoPos->x >> 1); +800246b0: 84a30000 lh v1,0(a1) + retCartPos.x -= ptrIsoPos->y >> 1; +800246b4: 84a70002 lh a3,2(a1) + + return false; +} + +TYPE_CARTESIAN_POS GfxIsometricToCartesian(TYPE_ISOMETRIC_POS * ptrIsoPos) +{ +800246b8: 00801021 move v0,a0 + retCartPos.x = ptrIsoPos->x - (ptrIsoPos->x >> 1); + retCartPos.x -= ptrIsoPos->y >> 1; + + retCartPos.y = ptrIsoPos->y >> 2; + retCartPos.y += ptrIsoPos->x >> 2; + retCartPos.y -= ptrIsoPos->z; +800246bc: 00073083 sra a2,a3,0x2 +800246c0: 00032083 sra a0,v1,0x2 +800246c4: 00c43021 addu a2,a2,a0 +800246c8: 94a50004 lhu a1,4(a1) + + return retCartPos; +800246cc: 00032043 sra a0,v1,0x1 +800246d0: 00641823 subu v1,v1,a0 +800246d4: 00073843 sra a3,a3,0x1 + retCartPos.x = ptrIsoPos->x - (ptrIsoPos->x >> 1); + retCartPos.x -= ptrIsoPos->y >> 1; + + retCartPos.y = ptrIsoPos->y >> 2; + retCartPos.y += ptrIsoPos->x >> 2; + retCartPos.y -= ptrIsoPos->z; +800246d8: 00c52823 subu a1,a2,a1 + + return retCartPos; +800246dc: 00671823 subu v1,v1,a3 +800246e0: a4430000 sh v1,0(v0) +} +800246e4: 03e00008 jr ra +800246e8: a4450002 sh a1,2(v0) + +800246ec <GfxIsometricFix16ToCartesian>: + +TYPE_CARTESIAN_POS GfxIsometricFix16ToCartesian(TYPE_ISOMETRIC_FIX16_POS * ptrIso16Pos) +{ + TYPE_ISOMETRIC_POS IsoPos; + + IsoPos.x = (short)fix16_to_int(ptrIso16Pos->x); +800246ec: 8ca30000 lw v1,0(a1) + + return retCartPos; +} + +TYPE_CARTESIAN_POS GfxIsometricFix16ToCartesian(TYPE_ISOMETRIC_FIX16_POS * ptrIso16Pos) +{ +800246f0: 27bdffe0 addiu sp,sp,-32 +800246f4: 00804021 move t0,a0 +static inline int fix16_to_int(fix16_t a) +{ +#ifdef FIXMATH_NO_ROUNDING + return a >> 16; +#else + if (a >= 0) +800246f8: 04600004 bltz v1,8002470c <GfxIsometricFix16ToCartesian+0x20> +800246fc: afbf001c sw ra,28(sp) + return (a + fix16_one / 2) / fix16_one; +80024700: 34028000 li v0,0x8000 +80024704: 10000002 b 80024710 <GfxIsometricFix16ToCartesian+0x24> +80024708: 00621821 addu v1,v1,v0 + else + return (a - fix16_one / 2) / fix16_one; +8002470c: 24638000 addiu v1,v1,-32768 +80024710: 000327c3 sra a0,v1,0x1f +80024714: 3084ffff andi a0,a0,0xffff +80024718: 00831821 addu v1,a0,v1 +8002471c: 00031c03 sra v1,v1,0x10 + TYPE_ISOMETRIC_POS IsoPos; + + IsoPos.x = (short)fix16_to_int(ptrIso16Pos->x); +80024720: a7a30010 sh v1,16(sp) + IsoPos.y = (short)fix16_to_int(ptrIso16Pos->y); +80024724: 8ca30004 lw v1,4(a1) +80024728: 00000000 nop +static inline int fix16_to_int(fix16_t a) +{ +#ifdef FIXMATH_NO_ROUNDING + return a >> 16; +#else + if (a >= 0) +8002472c: 04600003 bltz v1,8002473c <GfxIsometricFix16ToCartesian+0x50> +80024730: 34028000 li v0,0x8000 + return (a + fix16_one / 2) / fix16_one; +80024734: 10000002 b 80024740 <GfxIsometricFix16ToCartesian+0x54> +80024738: 00621821 addu v1,v1,v0 + else + return (a - fix16_one / 2) / fix16_one; +8002473c: 24638000 addiu v1,v1,-32768 +80024740: 000327c3 sra a0,v1,0x1f +80024744: 3084ffff andi a0,a0,0xffff +80024748: 00831821 addu v1,a0,v1 +8002474c: 00031c03 sra v1,v1,0x10 +80024750: a7a30012 sh v1,18(sp) + IsoPos.z = (short)fix16_to_int(ptrIso16Pos->z); +80024754: 8ca30008 lw v1,8(a1) +80024758: 00000000 nop +static inline int fix16_to_int(fix16_t a) +{ +#ifdef FIXMATH_NO_ROUNDING + return a >> 16; +#else + if (a >= 0) +8002475c: 04600003 bltz v1,8002476c <GfxIsometricFix16ToCartesian+0x80> +80024760: 34028000 li v0,0x8000 + return (a + fix16_one / 2) / fix16_one; +80024764: 10000002 b 80024770 <GfxIsometricFix16ToCartesian+0x84> +80024768: 00621821 addu v1,v1,v0 + else + return (a - fix16_one / 2) / fix16_one; +8002476c: 24638000 addiu v1,v1,-32768 +80024770: 000327c3 sra a0,v1,0x1f +80024774: 3084ffff andi a0,a0,0xffff +80024778: 00831821 addu v1,a0,v1 +8002477c: 00031c03 sra v1,v1,0x10 + + return GfxIsometricToCartesian(&IsoPos); +80024780: 27a50010 addiu a1,sp,16 +80024784: 01002021 move a0,t0 +80024788: 0c0091ac jal 800246b0 <GfxIsometricToCartesian> +8002478c: a7a30014 sh v1,20(sp) +} +80024790: 8fbf001c lw ra,28(sp) +80024794: 01001021 move v0,t0 +80024798: 03e00008 jr ra +8002479c: 27bd0020 addiu sp,sp,32 + +800247a0 <GfxCartesianToIsometric>: + +TYPE_ISOMETRIC_POS GfxCartesianToIsometric(TYPE_CARTESIAN_POS * ptrCartPos) +{ +800247a0: 00801021 move v0,a0 + TYPE_ISOMETRIC_POS IsoPos; + + /*isoX = cartX - cartY; + isoY = (cartX + cartY) / 2;*/ + IsoPos.x = ptrCartPos->x + (ptrCartPos->y << 1); +800247a4: 94a40000 lhu a0,0(a1) +800247a8: 94a50002 lhu a1,2(a1) + IsoPos.y = (ptrCartPos->y << 1) - ptrCartPos->x; + + // Explicitely suppose z = 0 + IsoPos.z = 0; + + return IsoPos; +800247ac: a4400004 sh zero,4(v0) +{ + TYPE_ISOMETRIC_POS IsoPos; + + /*isoX = cartX - cartY; + isoY = (cartX + cartY) / 2;*/ + IsoPos.x = ptrCartPos->x + (ptrCartPos->y << 1); +800247b0: 00052840 sll a1,a1,0x1 +800247b4: 30a3ffff andi v1,a1,0xffff + IsoPos.y = (ptrCartPos->y << 1) - ptrCartPos->x; + + // Explicitely suppose z = 0 + IsoPos.z = 0; + + return IsoPos; +800247b8: 00832821 addu a1,a0,v1 +800247bc: 00641823 subu v1,v1,a0 +800247c0: a4450000 sh a1,0(v0) +} +800247c4: 03e00008 jr ra +800247c8: a4430002 sh v1,2(v0) + +800247cc <ISR_LoadMenuVBlank>: + + GfxSetGlobalLuminance(NORMAL_LUMINANCE); +} + +void ISR_LoadMenuVBlank(void) +{ +800247cc: 27bdffe0 addiu sp,sp,-32 +800247d0: afbf001c sw ra,28(sp) +800247d4: afb20018 sw s2,24(sp) +800247d8: afb10014 sw s1,20(sp) + uint8_t i; + + if( (SystemIsBusy() == true) || (GfxIsGPUBusy() == true) ) +800247dc: 0c00a057 jal 8002815c <SystemIsBusy> +800247e0: afb00010 sw s0,16(sp) +800247e4: 1440010e bnez v0,80024c20 <ISR_LoadMenuVBlank+0x454> +800247e8: 00000000 nop +800247ec: 0c00901d jal 80024074 <GfxIsGPUBusy> +800247f0: 00000000 nop +800247f4: 1440010a bnez v0,80024c20 <ISR_LoadMenuVBlank+0x454> +800247f8: 3c028007 lui v0,0x8007 + { + return; + } + + if(startup_flag == true) +800247fc: 90451c35 lbu a1,7221(v0) +80024800: 00401821 move v1,v0 +80024804: 30a500ff andi a1,a1,0xff +80024808: 3c108004 lui s0,0x8004 +8002480c: 3c048004 lui a0,0x8004 +80024810: 3c128004 lui s2,0x8004 +80024814: 10a0005a beqz a1,80024980 <ISR_LoadMenuVBlank+0x1b4> +80024818: 3c118004 lui s1,0x8004 + { + // "Loading..." text + if(LoadMenuTitleSpr.r < LOADING_TITLE_LUMINANCE_TARGET) +8002481c: 26025d00 addiu v0,s0,23808 +80024820: 9045000e lbu a1,14(v0) +80024824: 00000000 nop +80024828: 00053600 sll a2,a1,0x18 +8002482c: 00063603 sra a2,a2,0x18 +80024830: 04c0000a bltz a2,8002485c <ISR_LoadMenuVBlank+0x90> +80024834: 24a5000a addiu a1,a1,10 + { + LoadMenuTitleSpr.r += LOADING_TITLE_LUMINANCE_STEP; +80024838: a045000e sb a1,14(v0) + LoadMenuTitleSpr.g += LOADING_TITLE_LUMINANCE_STEP; +8002483c: 9045000f lbu a1,15(v0) +80024840: 00000000 nop +80024844: 24a5000a addiu a1,a1,10 +80024848: a045000f sb a1,15(v0) + LoadMenuTitleSpr.b += LOADING_TITLE_LUMINANCE_STEP; +8002484c: 90450010 lbu a1,16(v0) +80024850: 00000000 nop +80024854: 24a5000a addiu a1,a1,10 +80024858: a0450010 sb a1,16(v0) + + loadMenuBg.b[0] += BG_INCREASE_STEP; + loadMenuBg.b[1] += BG_INCREASE_STEP; + } + // Blue background + if(loadMenuBg.b[2] < BG_BLUE_TARGET_VALUE) +8002485c: 24825d58 addiu v0,a0,23896 +80024860: 9045000a lbu a1,10(v0) +80024864: 00000000 nop +80024868: 2ca600c0 sltiu a2,a1,192 +8002486c: 10c00006 beqz a2,80024888 <ISR_LoadMenuVBlank+0xbc> +80024870: 24a50010 addiu a1,a1,16 + { + loadMenuBg.b[2] += BG_INCREASE_STEP; +80024874: a045000a sb a1,10(v0) + loadMenuBg.b[3] += BG_INCREASE_STEP; +80024878: 9045000b lbu a1,11(v0) +8002487c: 00000000 nop +80024880: 24a50010 addiu a1,a1,16 +80024884: a045000b sb a1,11(v0) + } + + if(LoadMenuBarRect.r < LOADING_BAR_LUMINANCE_TARGET) +80024888: 26425cb0 addiu v0,s2,23728 +8002488c: 90450008 lbu a1,8(v0) +80024890: 00000000 nop +80024894: 00053600 sll a2,a1,0x18 +80024898: 00063603 sra a2,a2,0x18 +8002489c: 04c0000d bltz a2,800248d4 <ISR_LoadMenuVBlank+0x108> +800248a0: 00000000 nop + { + LoadMenuBarRect.r += LOADING_BAR_LUMINANCE_STEP; + LoadMenuBarRect.g += LOADING_BAR_LUMINANCE_STEP; +800248a4: 90430009 lbu v1,9(v0) + loadMenuBg.b[3] += BG_INCREASE_STEP; + } + + if(LoadMenuBarRect.r < LOADING_BAR_LUMINANCE_TARGET) + { + LoadMenuBarRect.r += LOADING_BAR_LUMINANCE_STEP; +800248a8: 24a5000a addiu a1,a1,10 + LoadMenuBarRect.g += LOADING_BAR_LUMINANCE_STEP; +800248ac: 2463000a addiu v1,v1,10 +800248b0: a0430009 sb v1,9(v0) + LoadMenuBarRect.b += LOADING_BAR_LUMINANCE_STEP; +800248b4: 9043000a lbu v1,10(v0) + loadMenuBg.b[3] += BG_INCREASE_STEP; + } + + if(LoadMenuBarRect.r < LOADING_BAR_LUMINANCE_TARGET) + { + LoadMenuBarRect.r += LOADING_BAR_LUMINANCE_STEP; +800248b8: a0450008 sb a1,8(v0) + LoadMenuBarRect.g += LOADING_BAR_LUMINANCE_STEP; + LoadMenuBarRect.b += LOADING_BAR_LUMINANCE_STEP; +800248bc: 2463000a addiu v1,v1,10 +800248c0: a043000a sb v1,10(v0) +800248c4: 3c058004 lui a1,0x8004 +800248c8: 26225cc0 addiu v0,s1,23744 +800248cc: 1000000a b 800248f8 <ISR_LoadMenuVBlank+0x12c> +800248d0: 24a55d00 addiu a1,a1,23808 + } + else + { + startup_flag = false; +800248d4: a0601c35 sb zero,7221(v1) + isr_started = true; +800248d8: 3c028007 lui v0,0x8007 +800248dc: 24030001 li v1,1 +800248e0: a0431c34 sb v1,7220(v0) +800248e4: 1000fff8 b 800248c8 <ISR_LoadMenuVBlank+0xfc> +800248e8: 3c058004 lui a1,0x8004 +800248ec: 24420010 addiu v0,v0,16 + } + + for(i = 0;i < LOADING_BAR_N_LINES ; i++) +800248f0: 10450011 beq v0,a1,80024938 <ISR_LoadMenuVBlank+0x16c> +800248f4: 00000000 nop + { + if(LoadMenuBarLines[i].r < LOADING_BAR_LUMINANCE_TARGET) +800248f8: 90430000 lbu v1,0(v0) +800248fc: 00000000 nop +80024900: 00033600 sll a2,v1,0x18 +80024904: 00063603 sra a2,a2,0x18 +80024908: 04c0fff8 bltz a2,800248ec <ISR_LoadMenuVBlank+0x120> +8002490c: 2463000a addiu v1,v1,10 + { + LoadMenuBarLines[i].r += LOADING_BAR_LUMINANCE_STEP; +80024910: a0430000 sb v1,0(v0) + LoadMenuBarLines[i].g += LOADING_BAR_LUMINANCE_STEP; +80024914: 90430001 lbu v1,1(v0) +80024918: 00000000 nop +8002491c: 2463000a addiu v1,v1,10 +80024920: a0430001 sb v1,1(v0) + LoadMenuBarLines[i].b += LOADING_BAR_LUMINANCE_STEP; +80024924: 90430002 lbu v1,2(v0) +80024928: 00000000 nop +8002492c: 2463000a addiu v1,v1,10 +80024930: 1000ffee b 800248ec <ISR_LoadMenuVBlank+0x120> +80024934: a0430002 sb v1,2(v0) + } + } + + if(LoadMenuPlaneSpr.r < PLANE_LUMINANCE_TARGET_VALUE) +80024938: 3c028004 lui v0,0x8004 +8002493c: 24425d2c addiu v0,v0,23852 +80024940: 9043000e lbu v1,14(v0) +80024944: 00000000 nop +80024948: 00032e00 sll a1,v1,0x18 +8002494c: 00052e03 sra a1,a1,0x18 +80024950: 04a00079 bltz a1,80024b38 <ISR_LoadMenuVBlank+0x36c> +80024954: 24630010 addiu v1,v1,16 + { + LoadMenuPlaneSpr.r += PLANE_LUMINANCE_STEP; +80024958: a043000e sb v1,14(v0) + LoadMenuPlaneSpr.g += PLANE_LUMINANCE_STEP; +8002495c: 9043000f lbu v1,15(v0) +80024960: 00000000 nop +80024964: 24630010 addiu v1,v1,16 +80024968: a043000f sb v1,15(v0) + LoadMenuPlaneSpr.b += PLANE_LUMINANCE_STEP; +8002496c: 90430010 lbu v1,16(v0) +80024970: 00000000 nop +80024974: 24630010 addiu v1,v1,16 +80024978: 1000006f b 80024b38 <ISR_LoadMenuVBlank+0x36c> +8002497c: a0430010 sb v1,16(v0) + } + + } + else if(end_flag == true) +80024980: 3c038007 lui v1,0x8007 +80024984: 90621c33 lbu v0,7219(v1) +80024988: 00000000 nop +8002498c: 304200ff andi v0,v0,0xff +80024990: 10400069 beqz v0,80024b38 <ISR_LoadMenuVBlank+0x36c> +80024994: 26025d00 addiu v0,s0,23808 + { + LoadMenuTitleSpr.r -= LOADING_TITLE_LUMINANCE_STEP; +80024998: 9045000e lbu a1,14(v0) +8002499c: 00000000 nop +800249a0: 24a5fff6 addiu a1,a1,-10 +800249a4: a045000e sb a1,14(v0) + LoadMenuTitleSpr.g -= LOADING_TITLE_LUMINANCE_STEP; +800249a8: 9045000f lbu a1,15(v0) +800249ac: 00000000 nop +800249b0: 24a5fff6 addiu a1,a1,-10 +800249b4: a045000f sb a1,15(v0) + LoadMenuTitleSpr.b -= LOADING_TITLE_LUMINANCE_STEP; +800249b8: 90450010 lbu a1,16(v0) +800249bc: 00000000 nop +800249c0: 24a5fff6 addiu a1,a1,-10 +800249c4: a0450010 sb a1,16(v0) + + if(loadMenuBg.g[0] > 0) +800249c8: 24825d58 addiu v0,a0,23896 +800249cc: 90450004 lbu a1,4(v0) +800249d0: 00000000 nop +800249d4: 10a00011 beqz a1,80024a1c <ISR_LoadMenuVBlank+0x250> +800249d8: 24a5fff0 addiu a1,a1,-16 + { + loadMenuBg.r[0] -= BG_INCREASE_STEP; + loadMenuBg.r[1] -= BG_INCREASE_STEP; + + loadMenuBg.g[0] -= BG_INCREASE_STEP; +800249dc: a0450004 sb a1,4(v0) + loadMenuBg.g[1] -= BG_INCREASE_STEP; +800249e0: 90450005 lbu a1,5(v0) + LoadMenuTitleSpr.g -= LOADING_TITLE_LUMINANCE_STEP; + LoadMenuTitleSpr.b -= LOADING_TITLE_LUMINANCE_STEP; + + if(loadMenuBg.g[0] > 0) + { + loadMenuBg.r[0] -= BG_INCREASE_STEP; +800249e4: 90865d58 lbu a2,23896(a0) + loadMenuBg.r[1] -= BG_INCREASE_STEP; + + loadMenuBg.g[0] -= BG_INCREASE_STEP; + loadMenuBg.g[1] -= BG_INCREASE_STEP; +800249e8: 24a5fff0 addiu a1,a1,-16 +800249ec: a0450005 sb a1,5(v0) + + loadMenuBg.b[0] -= BG_INCREASE_STEP; +800249f0: 90450008 lbu a1,8(v0) + LoadMenuTitleSpr.g -= LOADING_TITLE_LUMINANCE_STEP; + LoadMenuTitleSpr.b -= LOADING_TITLE_LUMINANCE_STEP; + + if(loadMenuBg.g[0] > 0) + { + loadMenuBg.r[0] -= BG_INCREASE_STEP; +800249f4: 24c6fff0 addiu a2,a2,-16 + loadMenuBg.r[1] -= BG_INCREASE_STEP; + + loadMenuBg.g[0] -= BG_INCREASE_STEP; + loadMenuBg.g[1] -= BG_INCREASE_STEP; + + loadMenuBg.b[0] -= BG_INCREASE_STEP; +800249f8: 24a5fff0 addiu a1,a1,-16 + LoadMenuTitleSpr.g -= LOADING_TITLE_LUMINANCE_STEP; + LoadMenuTitleSpr.b -= LOADING_TITLE_LUMINANCE_STEP; + + if(loadMenuBg.g[0] > 0) + { + loadMenuBg.r[0] -= BG_INCREASE_STEP; +800249fc: a0865d58 sb a2,23896(a0) + loadMenuBg.r[1] -= BG_INCREASE_STEP; + + loadMenuBg.g[0] -= BG_INCREASE_STEP; + loadMenuBg.g[1] -= BG_INCREASE_STEP; + + loadMenuBg.b[0] -= BG_INCREASE_STEP; +80024a00: a0450008 sb a1,8(v0) + LoadMenuTitleSpr.b -= LOADING_TITLE_LUMINANCE_STEP; + + if(loadMenuBg.g[0] > 0) + { + loadMenuBg.r[0] -= BG_INCREASE_STEP; + loadMenuBg.r[1] -= BG_INCREASE_STEP; +80024a04: 90460001 lbu a2,1(v0) + + loadMenuBg.g[0] -= BG_INCREASE_STEP; + loadMenuBg.g[1] -= BG_INCREASE_STEP; + + loadMenuBg.b[0] -= BG_INCREASE_STEP; + loadMenuBg.b[1] -= BG_INCREASE_STEP; +80024a08: 90450009 lbu a1,9(v0) + LoadMenuTitleSpr.b -= LOADING_TITLE_LUMINANCE_STEP; + + if(loadMenuBg.g[0] > 0) + { + loadMenuBg.r[0] -= BG_INCREASE_STEP; + loadMenuBg.r[1] -= BG_INCREASE_STEP; +80024a0c: 24c6fff0 addiu a2,a2,-16 + + loadMenuBg.g[0] -= BG_INCREASE_STEP; + loadMenuBg.g[1] -= BG_INCREASE_STEP; + + loadMenuBg.b[0] -= BG_INCREASE_STEP; + loadMenuBg.b[1] -= BG_INCREASE_STEP; +80024a10: 24a5fff0 addiu a1,a1,-16 + LoadMenuTitleSpr.b -= LOADING_TITLE_LUMINANCE_STEP; + + if(loadMenuBg.g[0] > 0) + { + loadMenuBg.r[0] -= BG_INCREASE_STEP; + loadMenuBg.r[1] -= BG_INCREASE_STEP; +80024a14: a0460001 sb a2,1(v0) + + loadMenuBg.g[0] -= BG_INCREASE_STEP; + loadMenuBg.g[1] -= BG_INCREASE_STEP; + + loadMenuBg.b[0] -= BG_INCREASE_STEP; + loadMenuBg.b[1] -= BG_INCREASE_STEP; +80024a18: a0450009 sb a1,9(v0) + } + + if(loadMenuBg.b[2] > 0) +80024a1c: 9045000a lbu a1,10(v0) +80024a20: 00000000 nop +80024a24: 10a00006 beqz a1,80024a40 <ISR_LoadMenuVBlank+0x274> +80024a28: 24a5fff0 addiu a1,a1,-16 + { + loadMenuBg.b[2] -= BG_INCREASE_STEP; +80024a2c: a045000a sb a1,10(v0) + loadMenuBg.b[3] -= BG_INCREASE_STEP; +80024a30: 9045000b lbu a1,11(v0) +80024a34: 00000000 nop +80024a38: 24a5fff0 addiu a1,a1,-16 +80024a3c: a045000b sb a1,11(v0) + } + + if(loadMenuBg.b[2] == 0) +80024a40: 9042000a lbu v0,10(v0) +80024a44: 00000000 nop +80024a48: 14400005 bnez v0,80024a60 <ISR_LoadMenuVBlank+0x294> +80024a4c: 00000000 nop + { + end_flag = false; +80024a50: a0601c33 sb zero,7219(v1) + isr_ended = true; +80024a54: 3c028007 lui v0,0x8007 +80024a58: 24030001 li v1,1 +80024a5c: a0431c32 sb v1,7218(v0) + } + + if(LoadMenuPlaneSpr.r > 0) +80024a60: 3c038004 lui v1,0x8004 +80024a64: 24625d2c addiu v0,v1,23852 +80024a68: 9045000e lbu a1,14(v0) +80024a6c: 00000000 nop +80024a70: 10a0000a beqz a1,80024a9c <ISR_LoadMenuVBlank+0x2d0> +80024a74: 24a5fff0 addiu a1,a1,-16 + { + LoadMenuPlaneSpr.r -= PLANE_LUMINANCE_STEP; +80024a78: a045000e sb a1,14(v0) + LoadMenuPlaneSpr.g -= PLANE_LUMINANCE_STEP; +80024a7c: 9045000f lbu a1,15(v0) +80024a80: 00000000 nop +80024a84: 24a5fff0 addiu a1,a1,-16 +80024a88: a045000f sb a1,15(v0) + LoadMenuPlaneSpr.b -= PLANE_LUMINANCE_STEP; +80024a8c: 90450010 lbu a1,16(v0) +80024a90: 00000000 nop +80024a94: 24a5fff0 addiu a1,a1,-16 +80024a98: a0450010 sb a1,16(v0) + } + + LoadMenuPlaneSpr.x = (PLANE_START_X + LOADING_BAR_WIDTH); +80024a9c: 24050138 li a1,312 +80024aa0: a4655d2c sh a1,23852(v1) + LoadMenuPlaneSpr.y = PLANE_START_Y; +80024aa4: 240300c8 li v1,200 +80024aa8: a4430002 sh v1,2(v0) + + LoadMenuBarRect.w = LOADING_BAR_WIDTH; +80024aac: 26425cb0 addiu v0,s2,23728 +80024ab0: 24030100 li v1,256 +80024ab4: a4430004 sh v1,4(v0) + + if(LoadMenuBarRect.r > 0) +80024ab8: 90430008 lbu v1,8(v0) +80024abc: 00000000 nop +80024ac0: 1060000b beqz v1,80024af0 <ISR_LoadMenuVBlank+0x324> +80024ac4: 3c058004 lui a1,0x8004 + { + LoadMenuBarRect.r -= LOADING_BAR_LUMINANCE_STEP; +80024ac8: 2463fff6 addiu v1,v1,-10 +80024acc: a0430008 sb v1,8(v0) + LoadMenuBarRect.g -= LOADING_BAR_LUMINANCE_STEP; +80024ad0: 90430009 lbu v1,9(v0) +80024ad4: 00000000 nop +80024ad8: 2463fff6 addiu v1,v1,-10 +80024adc: a0430009 sb v1,9(v0) + LoadMenuBarRect.b -= LOADING_BAR_LUMINANCE_STEP; +80024ae0: 9043000a lbu v1,10(v0) +80024ae4: 00000000 nop +80024ae8: 2463fff6 addiu v1,v1,-10 +80024aec: a043000a sb v1,10(v0) +80024af0: 26225cc0 addiu v0,s1,23744 +80024af4: 24a55d00 addiu a1,a1,23808 + } + + for(i = 0;i < LOADING_BAR_N_LINES ; i++) + { + if(LoadMenuBarLines[i].r > 0) +80024af8: 90430000 lbu v1,0(v0) +80024afc: 00000000 nop +80024b00: 1060000a beqz v1,80024b2c <ISR_LoadMenuVBlank+0x360> +80024b04: 2463fff6 addiu v1,v1,-10 + { + LoadMenuBarLines[i].r -= LOADING_BAR_LUMINANCE_STEP; +80024b08: a0430000 sb v1,0(v0) + LoadMenuBarLines[i].g -= LOADING_BAR_LUMINANCE_STEP; +80024b0c: 90430001 lbu v1,1(v0) +80024b10: 00000000 nop +80024b14: 2463fff6 addiu v1,v1,-10 +80024b18: a0430001 sb v1,1(v0) + LoadMenuBarLines[i].b -= LOADING_BAR_LUMINANCE_STEP; +80024b1c: 90430002 lbu v1,2(v0) +80024b20: 00000000 nop +80024b24: 2463fff6 addiu v1,v1,-10 +80024b28: a0430002 sb v1,2(v0) +80024b2c: 24420010 addiu v0,v0,16 + LoadMenuBarRect.r -= LOADING_BAR_LUMINANCE_STEP; + LoadMenuBarRect.g -= LOADING_BAR_LUMINANCE_STEP; + LoadMenuBarRect.b -= LOADING_BAR_LUMINANCE_STEP; + } + + for(i = 0;i < LOADING_BAR_N_LINES ; i++) +80024b30: 1445fff1 bne v0,a1,80024af8 <ISR_LoadMenuVBlank+0x32c> +80024b34: 00000000 nop + LoadMenuBarLines[i].b -= LOADING_BAR_LUMINANCE_STEP; + } + } + } + + GsSortGPoly4(&loadMenuBg); +80024b38: 0c00b0e6 jal 8002c398 <GsSortGPoly4> +80024b3c: 24845d58 addiu a0,a0,23896 + + GsSortRectangle(&LoadMenuBarRect); +80024b40: 0c00b762 jal 8002dd88 <GsSortRectangle> +80024b44: 26445cb0 addiu a0,s2,23728 + + for(i = 0 ; i < LOADING_BAR_N_LINES ; i++) + { + GsSortLine(&LoadMenuBarLines[i]); +80024b48: 0c00b18e jal 8002c638 <GsSortLine> +80024b4c: 26245cc0 addiu a0,s1,23744 +80024b50: 3c048004 lui a0,0x8004 +80024b54: 0c00b18e jal 8002c638 <GsSortLine> +80024b58: 24845cd0 addiu a0,a0,23760 +80024b5c: 3c048004 lui a0,0x8004 +80024b60: 0c00b18e jal 8002c638 <GsSortLine> +80024b64: 24845ce0 addiu a0,a0,23776 +80024b68: 3c048004 lui a0,0x8004 +80024b6c: 0c00b18e jal 8002c638 <GsSortLine> +80024b70: 24845cf0 addiu a0,a0,23792 + } + + GsSortSprite(&LoadMenuTitleSpr); +80024b74: 0c00b356 jal 8002cd58 <GsSortSprite> +80024b78: 26045d00 addiu a0,s0,23808 + + LoadMenuPlaneSpr.w = PLANE_SIZE; +80024b7c: 3c048004 lui a0,0x8004 +80024b80: 24845d2c addiu a0,a0,23852 +80024b84: 24020010 li v0,16 + LoadMenuPlaneSpr.u = PLANE_U; + LoadMenuPlaneSpr.v = PLANE_V; + + GsSortSprite(&LoadMenuPlaneSpr); + + FontSetFlags(&SmallFont, FONT_BLEND_EFFECT); +80024b88: 3c108007 lui s0,0x8007 + GsSortLine(&LoadMenuBarLines[i]); + } + + GsSortSprite(&LoadMenuTitleSpr); + + LoadMenuPlaneSpr.w = PLANE_SIZE; +80024b8c: a4820006 sh v0,6(a0) + LoadMenuPlaneSpr.h = PLANE_SIZE; +80024b90: a4820008 sh v0,8(a0) + + LoadMenuPlaneSpr.u = PLANE_U; + LoadMenuPlaneSpr.v = PLANE_V; +80024b94: 24020020 li v0,32 +80024b98: a0820005 sb v0,5(a0) + + GsSortSprite(&LoadMenuPlaneSpr); +80024b9c: 0c00b356 jal 8002cd58 <GsSortSprite> +80024ba0: a0800004 sb zero,4(a0) + + FontSetFlags(&SmallFont, FONT_BLEND_EFFECT); +80024ba4: 26048d38 addiu a0,s0,-29384 +80024ba8: 0c008441 jal 80021104 <FontSetFlags> +80024bac: 24050004 li a1,4 + + FontPrintText( &SmallFont, +80024bb0: 3c028007 lui v0,0x8007 +80024bb4: 8c471c38 lw a3,7224(v0) +80024bb8: 26048d38 addiu a0,s0,-29384 +80024bbc: 240600e0 li a2,224 +80024bc0: 0c008451 jal 80021144 <FontPrintText> +80024bc4: 24050038 li a1,56 + LOADING_BAR_X - 8, + LOADING_BAR_Y + LOADING_BAR_HEIGHT + 8, + strCurrentFile ); + + FontSetFlags(&SmallFont, FONT_NOFLAGS); +80024bc8: 26048d38 addiu a0,s0,-29384 +80024bcc: 0c008441 jal 80021104 <FontSetFlags> +80024bd0: 00002821 move a1,zero + + small_font_lum -= 8; +80024bd4: 3c028007 lui v0,0x8007 +80024bd8: 90431c3c lbu v1,7228(v0) + + SmallFont.spr.r = small_font_lum; +80024bdc: 26108d38 addiu s0,s0,-29384 + LOADING_BAR_Y + LOADING_BAR_HEIGHT + 8, + strCurrentFile ); + + FontSetFlags(&SmallFont, FONT_NOFLAGS); + + small_font_lum -= 8; +80024be0: 2463fff8 addiu v1,v1,-8 +80024be4: 306300ff andi v1,v1,0xff +80024be8: a0431c3c sb v1,7228(v0) + + SmallFont.spr.r = small_font_lum; +80024bec: 90431c3c lbu v1,7228(v0) +80024bf0: 00000000 nop +80024bf4: a203000e sb v1,14(s0) + SmallFont.spr.g = small_font_lum; +80024bf8: 90431c3c lbu v1,7228(v0) + SmallFont.spr.b = small_font_lum; +80024bfc: 90421c3c lbu v0,7228(v0) + FontSetFlags(&SmallFont, FONT_NOFLAGS); + + small_font_lum -= 8; + + SmallFont.spr.r = small_font_lum; + SmallFont.spr.g = small_font_lum; +80024c00: a203000f sb v1,15(s0) + SmallFont.spr.b = small_font_lum; +80024c04: a2020010 sb v0,16(s0) + + GfxDrawScene_Fast(); +} +80024c08: 8fbf001c lw ra,28(sp) +80024c0c: 8fb20018 lw s2,24(sp) +80024c10: 8fb10014 lw s1,20(sp) +80024c14: 8fb00010 lw s0,16(sp) + + SmallFont.spr.r = small_font_lum; + SmallFont.spr.g = small_font_lum; + SmallFont.spr.b = small_font_lum; + + GfxDrawScene_Fast(); +80024c18: 08008fc1 j 80023f04 <GfxDrawScene_Fast> +80024c1c: 27bd0020 addiu sp,sp,32 +} +80024c20: 8fbf001c lw ra,28(sp) +80024c24: 8fb20018 lw s2,24(sp) +80024c28: 8fb10014 lw s1,20(sp) +80024c2c: 8fb00010 lw s0,16(sp) +80024c30: 03e00008 jr ra +80024c34: 27bd0020 addiu sp,sp,32 + +80024c38 <LoadMenuLoadFileList.part.1>: + + LoadMenuLoadFileList(fileList,dest,szFileList,szDestList); + +} + +void LoadMenuLoadFileList( char * fileList[], void * dest[], +80024c38: 27bdff60 addiu sp,sp,-160 +80024c3c: afb50090 sw s5,144(sp) +80024c40: afb30088 sw s3,136(sp) + + //We want to get file extension, so split into tokens + strtok(fileList[fileLoadedCount],".;"); + extension = strtok(NULL,".;"); + + dprintf("File extension: .%s\n",extension); +80024c44: 3c158004 lui s5,0x8004 + + // Backup original file path + strncpy(aux_file_name,fileList[fileLoadedCount],100); + + //We want to get file extension, so split into tokens + strtok(fileList[fileLoadedCount],".;"); +80024c48: 3c138004 lui s3,0x8004 + + LoadMenuLoadFileList(fileList,dest,szFileList,szDestList); + +} + +void LoadMenuLoadFileList( char * fileList[], void * dest[], +80024c4c: afb60094 sw s6,148(sp) +80024c50: afb4008c sw s4,140(sp) +80024c54: afb20084 sw s2,132(sp) +80024c58: afb10080 sw s1,128(sp) +80024c5c: afb0007c sw s0,124(sp) +80024c60: afbf009c sw ra,156(sp) +80024c64: afb70098 sw s7,152(sp) +80024c68: 00c0a021 move s4,a2 +80024c6c: 00808021 move s0,a0 +80024c70: 00a08821 move s1,a1 +80024c74: 00009021 move s2,zero + if(fileList[fileLoadedCount] == NULL) + { + continue; + } + + strCurrentFile = fileList[fileLoadedCount]; +80024c78: 3c168007 lui s6,0x8007 + + // Backup original file path + strncpy(aux_file_name,fileList[fileLoadedCount],100); + + //We want to get file extension, so split into tokens + strtok(fileList[fileLoadedCount],".;"); +80024c7c: 267307c8 addiu s3,s3,1992 + extension = strtok(NULL,".;"); + + dprintf("File extension: .%s\n",extension); +80024c80: 26b507cc addiu s5,s5,1996 + dprintf("File list size different from dest list size! %d vs %d\n", + szFileList, szDestList); + return; + } + + for(fileLoadedCount = 0; fileLoadedCount < szFileList ; fileLoadedCount++) +80024c84: 1254007e beq s2,s4,80024e80 <LoadMenuLoadFileList.part.1+0x248> +80024c88: 00000000 nop + { + if(fileList[fileLoadedCount] == NULL) +80024c8c: 8e050000 lw a1,0(s0) +80024c90: 00000000 nop +80024c94: 10a00076 beqz a1,80024e70 <LoadMenuLoadFileList.part.1+0x238> +80024c98: 24020100 li v0,256 + + x_increment = (short)(LOADING_BAR_WIDTH / szFileList); + + // Calculate new X position for loading menu plane sprite. + // This is not calculated on ISR as to avoid longer ISR time. + LoadMenuPlaneSpr.x = (PLANE_START_X + (fileLoadedCount* x_increment) ); +80024c9c: 16800002 bnez s4,80024ca8 <LoadMenuLoadFileList.part.1+0x70> +80024ca0: 0054001a div zero,v0,s4 +80024ca4: 0007000d break 0x7 +80024ca8: 3c038004 lui v1,0x8004 + LoadMenuBarRect.w = fileLoadedCount* x_increment; + + //dprintf("Files %d / %d loaded. New plane X = %d.\n",fileLoadedCount,szFileList,LoadMenuPlaneSpr.x); + + // Backup original file path + strncpy(aux_file_name,fileList[fileLoadedCount],100); +80024cac: 24060064 li a2,100 + if(fileList[fileLoadedCount] == NULL) + { + continue; + } + + strCurrentFile = fileList[fileLoadedCount]; +80024cb0: aec51c38 sw a1,7224(s6) + + x_increment = (short)(LOADING_BAR_WIDTH / szFileList); + + // Calculate new X position for loading menu plane sprite. + // This is not calculated on ISR as to avoid longer ISR time. + LoadMenuPlaneSpr.x = (PLANE_START_X + (fileLoadedCount* x_increment) ); +80024cb4: 00001012 mflo v0 + ... +80024cc0: 00520018 mult v0,s2 +80024cc4: 00001012 mflo v0 +80024cc8: 3042ffff andi v0,v0,0xffff +80024ccc: 24440038 addiu a0,v0,56 +80024cd0: a4645d2c sh a0,23852(v1) + + LoadMenuBarRect.w = fileLoadedCount* x_increment; +80024cd4: 3c038004 lui v1,0x8004 + + //dprintf("Files %d / %d loaded. New plane X = %d.\n",fileLoadedCount,szFileList,LoadMenuPlaneSpr.x); + + // Backup original file path + strncpy(aux_file_name,fileList[fileLoadedCount],100); +80024cd8: 27a40010 addiu a0,sp,16 +80024cdc: 0c00d860 jal 80036180 <strncpy> +80024ce0: a4625cb4 sh v0,23732(v1) + + //We want to get file extension, so split into tokens + strtok(fileList[fileLoadedCount],".;"); +80024ce4: 8e040000 lw a0,0(s0) +80024ce8: 0c00ddea jal 800377a8 <strtok> +80024cec: 02602821 move a1,s3 + extension = strtok(NULL,".;"); +80024cf0: 02602821 move a1,s3 +80024cf4: 0c00ddea jal 800377a8 <strtok> +80024cf8: 00002021 move a0,zero + + dprintf("File extension: .%s\n",extension); +80024cfc: 00402821 move a1,v0 +80024d00: 02a02021 move a0,s5 +80024d04: 0c00ed8f jal 8003b63c <printf> +80024d08: 0040b821 move s7,v0 + //Restore original file path in order to load file + strncpy(fileList[fileLoadedCount],aux_file_name,100); +80024d0c: 8e040000 lw a0,0(s0) +80024d10: 24060064 li a2,100 +80024d14: 0c00d860 jal 80036180 <strncpy> +80024d18: 27a50010 addiu a1,sp,16 + + if(strncmp(extension,"TIM",3) == 0) +80024d1c: 3c058004 lui a1,0x8004 +80024d20: 24060003 li a2,3 +80024d24: 24a507e4 addiu a1,a1,2020 +80024d28: 0c00d9dd jal 80036774 <strncmp> +80024d2c: 02e02021 move a0,s7 +80024d30: 1440000a bnez v0,80024d5c <LoadMenuLoadFileList.part.1+0x124> +80024d34: 3c058004 lui a1,0x8004 + { + if(GfxSpriteFromFile(fileList[fileLoadedCount], dest[fileLoadedCount]) == false) +80024d38: 8e250000 lw a1,0(s1) +80024d3c: 8e040000 lw a0,0(s0) +80024d40: 0c00903c jal 800240f0 <GfxSpriteFromFile> +80024d44: 00000000 nop +80024d48: 14400049 bnez v0,80024e70 <LoadMenuLoadFileList.part.1+0x238> +80024d4c: 3c048004 lui a0,0x8004 + { + dprintf("Could not load image file \"%s\"!\n",fileList[fileLoadedCount]); +80024d50: 8e050000 lw a1,0(s0) +80024d54: 10000044 b 80024e68 <LoadMenuLoadFileList.part.1+0x230> +80024d58: 248407e8 addiu a0,a0,2024 + } + } + else if(strncmp(extension,"CLT",3) == 0) +80024d5c: 24060003 li a2,3 +80024d60: 24a5080c addiu a1,a1,2060 +80024d64: 0c00d9dd jal 80036774 <strncmp> +80024d68: 02e02021 move a0,s7 +80024d6c: 1440000f bnez v0,80024dac <LoadMenuLoadFileList.part.1+0x174> +80024d70: 3c058004 lui a1,0x8004 + { + if(dest[fileLoadedCount] != NULL) +80024d74: 8e250000 lw a1,0(s1) +80024d78: 00000000 nop +80024d7c: 10a00003 beqz a1,80024d8c <LoadMenuLoadFileList.part.1+0x154> +80024d80: 3c048004 lui a0,0x8004 + { + dprintf("WARNING: File %s linked to non-NULL destination pointer!\n", dest[fileLoadedCount]); +80024d84: 0c00ed8f jal 8003b63c <printf> +80024d88: 24840810 addiu a0,a0,2064 + } + + if(GfxCLUTFromFile(fileList[fileLoadedCount]) == false) +80024d8c: 8e040000 lw a0,0(s0) +80024d90: 0c00905c jal 80024170 <GfxCLUTFromFile> +80024d94: 00000000 nop +80024d98: 14400035 bnez v0,80024e70 <LoadMenuLoadFileList.part.1+0x238> +80024d9c: 3c048004 lui a0,0x8004 + { + dprintf("Could not load CLUT file \"%s\"!\n",fileList[fileLoadedCount]); +80024da0: 8e050000 lw a1,0(s0) +80024da4: 10000030 b 80024e68 <LoadMenuLoadFileList.part.1+0x230> +80024da8: 2484084c addiu a0,a0,2124 + } + } + else if(strncmp(extension,"VAG",3) == 0) +80024dac: 24060003 li a2,3 +80024db0: 24a5086c addiu a1,a1,2156 +80024db4: 0c00d9dd jal 80036774 <strncmp> +80024db8: 02e02021 move a0,s7 +80024dbc: 1440000a bnez v0,80024de8 <LoadMenuLoadFileList.part.1+0x1b0> +80024dc0: 3c058004 lui a1,0x8004 + { + if(SfxUploadSound(fileList[fileLoadedCount], dest[fileLoadedCount]) == false) +80024dc4: 8e250000 lw a1,0(s1) +80024dc8: 8e040000 lw a0,0(s0) +80024dcc: 0c009eef jal 80027bbc <SfxUploadSound> +80024dd0: 00000000 nop +80024dd4: 14400026 bnez v0,80024e70 <LoadMenuLoadFileList.part.1+0x238> +80024dd8: 3c048004 lui a0,0x8004 + { + dprintf("Could not load sound file \"%s\"!\n",fileList[fileLoadedCount]); +80024ddc: 8e050000 lw a1,0(s0) +80024de0: 10000021 b 80024e68 <LoadMenuLoadFileList.part.1+0x230> +80024de4: 24840870 addiu a0,a0,2160 + } + } + else if(strncmp(extension,"FNT",3) == 0) +80024de8: 24060003 li a2,3 +80024dec: 24a50894 addiu a1,a1,2196 +80024df0: 0c00d9dd jal 80036774 <strncmp> +80024df4: 02e02021 move a0,s7 +80024df8: 1440000a bnez v0,80024e24 <LoadMenuLoadFileList.part.1+0x1ec> +80024dfc: 3c058004 lui a1,0x8004 + { + if(FontLoadImage(fileList[fileLoadedCount], dest[fileLoadedCount]) == false) +80024e00: 8e250000 lw a1,0(s1) +80024e04: 8e040000 lw a0,0(s0) +80024e08: 0c008411 jal 80021044 <FontLoadImage> +80024e0c: 00000000 nop +80024e10: 14400017 bnez v0,80024e70 <LoadMenuLoadFileList.part.1+0x238> +80024e14: 3c048004 lui a0,0x8004 + { + dprintf("Could not load font file \"%s\"!\n",fileList[fileLoadedCount]); +80024e18: 8e050000 lw a1,0(s0) +80024e1c: 10000012 b 80024e68 <LoadMenuLoadFileList.part.1+0x230> +80024e20: 24840898 addiu a0,a0,2200 + } + } + else if(strncmp(extension,"PLT",3) == 0) +80024e24: 24060003 li a2,3 +80024e28: 24a508b8 addiu a1,a1,2232 +80024e2c: 0c00d9dd jal 80036774 <strncmp> +80024e30: 02e02021 move a0,s7 +80024e34: 1440000a bnez v0,80024e60 <LoadMenuLoadFileList.part.1+0x228> +80024e38: 3c048004 lui a0,0x8004 + { + if(PltParserLoadFile(fileList[fileLoadedCount], dest[fileLoadedCount]) == false) +80024e3c: 8e250000 lw a1,0(s1) +80024e40: 8e040000 lw a0,0(s0) +80024e44: 0c009bbb jal 80026eec <PltParserLoadFile> +80024e48: 00000000 nop +80024e4c: 14400008 bnez v0,80024e70 <LoadMenuLoadFileList.part.1+0x238> +80024e50: 3c048004 lui a0,0x8004 + { + dprintf("Could not load pilots file \"%s\"!\n",fileList[fileLoadedCount]); +80024e54: 8e050000 lw a1,0(s0) +80024e58: 10000003 b 80024e68 <LoadMenuLoadFileList.part.1+0x230> +80024e5c: 248408bc addiu a0,a0,2236 + } + } + else + { + dprintf("LoadMenu does not recognize following extension: %s\n",extension); +80024e60: 02e02821 move a1,s7 +80024e64: 248408e0 addiu a0,a0,2272 +80024e68: 0c00ed8f jal 8003b63c <printf> +80024e6c: 00000000 nop +80024e70: 26520001 addiu s2,s2,1 +80024e74: 26100004 addiu s0,s0,4 +80024e78: 1000ff82 b 80024c84 <LoadMenuLoadFileList.part.1+0x4c> +80024e7c: 26310004 addiu s1,s1,4 + } + } +} +80024e80: 8fbf009c lw ra,156(sp) +80024e84: 8fb70098 lw s7,152(sp) +80024e88: 8fb60094 lw s6,148(sp) +80024e8c: 8fb50090 lw s5,144(sp) +80024e90: 8fb4008c lw s4,140(sp) +80024e94: 8fb30088 lw s3,136(sp) +80024e98: 8fb20084 lw s2,132(sp) +80024e9c: 8fb10080 lw s1,128(sp) +80024ea0: 8fb0007c lw s0,124(sp) +80024ea4: 03e00008 jr ra +80024ea8: 27bd00a0 addiu sp,sp,160 + +80024eac <LoadMenuEnd>: + SetVBlankHandler(&ISR_LoadMenuVBlank); +} + +void LoadMenuEnd(void) +{ + end_flag = true; +80024eac: 24030001 li v1,1 +80024eb0: 3c028007 lui v0,0x8007 +80024eb4: a0431c33 sb v1,7219(v0) + load_menu_running = false; +80024eb8: 3c028007 lui v0,0x8007 +80024ebc: a0401c31 sb zero,7217(v0) + GfxDrawScene_Fast(); +} + +bool LoadMenuISRHasEnded(void) +{ + return isr_ended; +80024ec0: 3c038007 lui v1,0x8007 +80024ec4: 90621c32 lbu v0,7218(v1) +80024ec8: 00000000 nop +80024ecc: 304200ff andi v0,v0,0xff +void LoadMenuEnd(void) +{ + end_flag = true; + load_menu_running = false; + + while(LoadMenuISRHasEnded() == false); +80024ed0: 1040fffc beqz v0,80024ec4 <LoadMenuEnd+0x18> +80024ed4: 3c048004 lui a0,0x8004 + + SetVBlankHandler(&ISR_LoadMenuVBlank); +} + +void LoadMenuEnd(void) +{ +80024ed8: 27bdffe8 addiu sp,sp,-24 +80024edc: afbf0014 sw ra,20(sp) + end_flag = true; + load_menu_running = false; + + while(LoadMenuISRHasEnded() == false); + dprintf("Set default VBlank handler.\n"); +80024ee0: 0c00ed8f jal 8003b63c <printf> +80024ee4: 24840918 addiu a0,a0,2328 + SetVBlankHandler(&ISR_SystemDefaultVBlank); +80024ee8: 3c048002 lui a0,0x8002 +80024eec: 0c00d35e jal 80034d78 <SetVBlankHandler> +80024ef0: 24847ea0 addiu a0,a0,32416 + + GfxSetGlobalLuminance(NORMAL_LUMINANCE); +} +80024ef4: 8fbf0014 lw ra,20(sp) + + while(LoadMenuISRHasEnded() == false); + dprintf("Set default VBlank handler.\n"); + SetVBlankHandler(&ISR_SystemDefaultVBlank); + + GfxSetGlobalLuminance(NORMAL_LUMINANCE); +80024ef8: 24040080 li a0,128 +80024efc: 0800900b j 8002402c <GfxSetGlobalLuminance> +80024f00: 27bd0018 addiu sp,sp,24 + +80024f04 <LoadMenu>: +} + +void LoadMenu( char * fileList[], + void * dest[], + uint8_t szFileList , uint8_t szDestList) +{ +80024f04: 27bdffd0 addiu sp,sp,-48 +80024f08: afb00010 sw s0,16(sp) + + if(load_menu_running == false) +80024f0c: 3c108007 lui s0,0x8007 +80024f10: 92021c31 lbu v0,7217(s0) +} + +void LoadMenu( char * fileList[], + void * dest[], + uint8_t szFileList , uint8_t szDestList) +{ +80024f14: afb40020 sw s4,32(sp) +80024f18: afb3001c sw s3,28(sp) +80024f1c: afb20018 sw s2,24(sp) +80024f20: afb10014 sw s1,20(sp) +80024f24: afbf002c sw ra,44(sp) +80024f28: afb60028 sw s6,40(sp) +80024f2c: afb50024 sw s5,36(sp) +80024f30: 00809821 move s3,a0 +80024f34: 00a0a021 move s4,a1 +80024f38: 30d100ff andi s1,a2,0xff + + if(load_menu_running == false) +80024f3c: 1040000f beqz v0,80024f7c <LoadMenu+0x78> +80024f40: 30f200ff andi s2,a3,0xff + char aux_file_name[100]; + char * extension; + short x_increment; + uint8_t fileLoadedCount; + + if(szFileList != szDestList) +80024f44: 16320093 bne s1,s2,80025194 <LoadMenu+0x290> +80024f48: 02203021 move a2,s1 + while(LoadMenuISRHasStarted() == false); + } + + LoadMenuLoadFileList(fileList,dest,szFileList,szDestList); + +} +80024f4c: 8fbf002c lw ra,44(sp) +80024f50: 8fb60028 lw s6,40(sp) +80024f54: 8fb50024 lw s5,36(sp) +80024f58: 8fb20018 lw s2,24(sp) +80024f5c: 8fb00010 lw s0,16(sp) +80024f60: 02802821 move a1,s4 +80024f64: 8fb10014 lw s1,20(sp) +80024f68: 8fb40020 lw s4,32(sp) +80024f6c: 02602021 move a0,s3 +80024f70: 8fb3001c lw s3,28(sp) +80024f74: 0800930e j 80024c38 <LoadMenuLoadFileList.part.1> +80024f78: 27bd0030 addiu sp,sp,48 +void LoadMenuInit(void) +{ + int i; + static bool first_load = false; + + if(first_load == false) +80024f7c: 3c028007 lui v0,0x8007 +80024f80: 90431c30 lbu v1,7216(v0) +80024f84: 00000000 nop +80024f88: 1460000a bnez v1,80024fb4 <LoadMenu+0xb0> +80024f8c: 3c158007 lui s5,0x8007 +80024f90: 3c058004 lui a1,0x8004 +80024f94: 3c048004 lui a0,0x8004 + { + first_load = true; +80024f98: 24030001 li v1,1 +80024f9c: 24060003 li a2,3 +80024fa0: 24a51464 addiu a1,a1,5220 +80024fa4: 24841470 addiu a0,a0,5232 +80024fa8: 0c00930e jal 80024c38 <LoadMenuLoadFileList.part.1> +80024fac: a0431c30 sb v1,7216(v0) + LoadMenuDest, + sizeof(LoadMenuFiles) / sizeof(char*), + sizeof(LoadMenuDest) / sizeof(void*)); + } + + FontSetSize(&SmallFont, SMALL_FONT_SIZE); +80024fb0: 3c158007 lui s5,0x8007 +80024fb4: 26a48d38 addiu a0,s5,-29384 +80024fb8: 0c008443 jal 8002110c <FontSetSize> +80024fbc: 24050008 li a1,8 + + LoadMenuPlaneSpr.r = 0; +80024fc0: 3c028004 lui v0,0x8004 + LoadMenuPlaneSpr.g = 0; + LoadMenuPlaneSpr.b = 0; + + LoadMenuPlaneSpr.x = PLANE_START_X; +80024fc4: 24040038 li a0,56 + sizeof(LoadMenuDest) / sizeof(void*)); + } + + FontSetSize(&SmallFont, SMALL_FONT_SIZE); + + LoadMenuPlaneSpr.r = 0; +80024fc8: 24435d2c addiu v1,v0,23852 + LoadMenuPlaneSpr.g = 0; + LoadMenuPlaneSpr.b = 0; + + LoadMenuPlaneSpr.x = PLANE_START_X; +80024fcc: a4445d2c sh a0,23852(v0) + LoadMenuPlaneSpr.y = PLANE_START_Y; +80024fd0: 240200c8 li v0,200 +80024fd4: a4620002 sh v0,2(v1) + + LoadMenuTitleSpr.r = 0; + LoadMenuTitleSpr.g = 0; + LoadMenuTitleSpr.b = 0; + + LoadMenuTitleSpr.x = LOADING_TITLE_X; +80024fd8: 24040080 li a0,128 + sizeof(LoadMenuDest) / sizeof(void*)); + } + + FontSetSize(&SmallFont, SMALL_FONT_SIZE); + + LoadMenuPlaneSpr.r = 0; +80024fdc: a060000e sb zero,14(v1) + LoadMenuPlaneSpr.g = 0; +80024fe0: a060000f sb zero,15(v1) + LoadMenuPlaneSpr.b = 0; +80024fe4: a0600010 sb zero,16(v1) + LoadMenuPlaneSpr.x = PLANE_START_X; + LoadMenuPlaneSpr.y = PLANE_START_Y; + + // "Loading..." title init + + LoadMenuTitleSpr.r = 0; +80024fe8: 3c038004 lui v1,0x8004 +80024fec: 24625d00 addiu v0,v1,23808 + LoadMenuTitleSpr.g = 0; + LoadMenuTitleSpr.b = 0; + + LoadMenuTitleSpr.x = LOADING_TITLE_X; +80024ff0: a4645d00 sh a0,23808(v1) + LoadMenuTitleSpr.y = LOADING_TITLE_Y; +80024ff4: 24030020 li v1,32 +80024ff8: a4430002 sh v1,2(v0) + + LoadMenuTitleSpr.cx = LOADING_TITLE_CLUT_X; + LoadMenuTitleSpr.cy = LOADING_TITLE_CLUT_Y; +80024ffc: 240401f0 li a0,496 + LoadMenuTitleSpr.b = 0; + + LoadMenuTitleSpr.x = LOADING_TITLE_X; + LoadMenuTitleSpr.y = LOADING_TITLE_Y; + + LoadMenuTitleSpr.cx = LOADING_TITLE_CLUT_X; +80025000: 24030180 li v1,384 + LoadMenuTitleSpr.cy = LOADING_TITLE_CLUT_Y; +80025004: a444000c sh a0,12(v0) + LoadMenuPlaneSpr.x = PLANE_START_X; + LoadMenuPlaneSpr.y = PLANE_START_Y; + + // "Loading..." title init + + LoadMenuTitleSpr.r = 0; +80025008: a040000e sb zero,14(v0) + LoadMenuTitleSpr.g = 0; +8002500c: a040000f sb zero,15(v0) + LoadMenuTitleSpr.b = 0; +80025010: a0400010 sb zero,16(v0) + + LoadMenuTitleSpr.x = LOADING_TITLE_X; + LoadMenuTitleSpr.y = LOADING_TITLE_Y; + + LoadMenuTitleSpr.cx = LOADING_TITLE_CLUT_X; +80025014: a443000a sh v1,10(v0) + LoadMenuTitleSpr.cy = LOADING_TITLE_CLUT_Y; + LoadMenuTitleSpr.u = LOADING_TITLE_U; + LoadMenuTitleSpr.v = LOADING_TITLE_V; + + startup_flag = true; +80025018: 24040001 li a0,1 + LoadMenuTitleSpr.x = LOADING_TITLE_X; + LoadMenuTitleSpr.y = LOADING_TITLE_Y; + + LoadMenuTitleSpr.cx = LOADING_TITLE_CLUT_X; + LoadMenuTitleSpr.cy = LOADING_TITLE_CLUT_Y; + LoadMenuTitleSpr.u = LOADING_TITLE_U; +8002501c: a0400004 sb zero,4(v0) + LoadMenuTitleSpr.v = LOADING_TITLE_V; +80025020: a0400005 sb zero,5(v0) + + startup_flag = true; +80025024: 3c028007 lui v0,0x8007 +80025028: a0441c35 sb a0,7221(v0) + isr_started = false; +8002502c: 3c048007 lui a0,0x8007 + end_flag = false; +80025030: 3c028007 lui v0,0x8007 + LoadMenuTitleSpr.cy = LOADING_TITLE_CLUT_Y; + LoadMenuTitleSpr.u = LOADING_TITLE_U; + LoadMenuTitleSpr.v = LOADING_TITLE_V; + + startup_flag = true; + isr_started = false; +80025034: a0801c34 sb zero,7220(a0) + end_flag = false; +80025038: a0401c33 sb zero,7219(v0) + isr_ended = false; +8002503c: 3c028007 lui v0,0x8007 +80025040: a0401c32 sb zero,7218(v0) + + // Background init + + loadMenuBg.x[0] = 0; +80025044: 3c028004 lui v0,0x8004 +80025048: 24425d58 addiu v0,v0,23896 + loadMenuBg.x[1] = X_SCREEN_RESOLUTION; +8002504c: a443000e sh v1,14(v0) + loadMenuBg.x[2] = 0; + loadMenuBg.x[3] = X_SCREEN_RESOLUTION; +80025050: a4430012 sh v1,18(v0) + + loadMenuBg.y[0] = 0; + loadMenuBg.y[1] = 0; + loadMenuBg.y[2] = Y_SCREEN_RESOLUTION; +80025054: 240300f0 li v1,240 +80025058: a4430018 sh v1,24(v0) + loadMenuBg.y[3] = Y_SCREEN_RESOLUTION; +8002505c: a443001a sh v1,26(v0) +80025060: 0080b021 move s6,a0 + end_flag = false; + isr_ended = false; + + // Background init + + loadMenuBg.x[0] = 0; +80025064: a440000c sh zero,12(v0) + loadMenuBg.x[1] = X_SCREEN_RESOLUTION; + loadMenuBg.x[2] = 0; +80025068: a4400010 sh zero,16(v0) + loadMenuBg.x[3] = X_SCREEN_RESOLUTION; + + loadMenuBg.y[0] = 0; +8002506c: a4400014 sh zero,20(v0) + loadMenuBg.y[1] = 0; +80025070: a4400016 sh zero,22(v0) + loadMenuBg.y[2] = Y_SCREEN_RESOLUTION; + loadMenuBg.y[3] = Y_SCREEN_RESOLUTION; + + // Colour components adjustment (default to zero) + for(i = 0; i < 4 ; i++) +80025074: 00001821 move v1,zero +80025078: 24040004 li a0,4 +8002507c: 24630001 addiu v1,v1,1 + { + loadMenuBg.r[i] = 0; +80025080: a0400000 sb zero,0(v0) + loadMenuBg.g[i] = 0; +80025084: a0400004 sb zero,4(v0) + loadMenuBg.b[i] = 0; +80025088: a0400008 sb zero,8(v0) + loadMenuBg.y[1] = 0; + loadMenuBg.y[2] = Y_SCREEN_RESOLUTION; + loadMenuBg.y[3] = Y_SCREEN_RESOLUTION; + + // Colour components adjustment (default to zero) + for(i = 0; i < 4 ; i++) +8002508c: 1464fffb bne v1,a0,8002507c <LoadMenu+0x178> +80025090: 24420001 addiu v0,v0,1 + loadMenuBg.b[i] = 0; + } + + // "Loading" bar line 0 (up left - up right) + + LoadMenuBarLines[0].x[0] = LOADING_BAR_X; +80025094: 3c028004 lui v0,0x8004 +80025098: 24425cc0 addiu v0,v0,23744 + + LoadMenuBarLines[1].x[0] = LOADING_BAR_X; + LoadMenuBarLines[1].x[1] = LOADING_BAR_X; + + LoadMenuBarLines[1].y[0] = LOADING_BAR_Y; + LoadMenuBarLines[1].y[1] = LOADING_BAR_Y + LOADING_BAR_HEIGHT; +8002509c: 240300d8 li v1,216 + loadMenuBg.b[i] = 0; + } + + // "Loading" bar line 0 (up left - up right) + + LoadMenuBarLines[0].x[0] = LOADING_BAR_X; +800250a0: 24060040 li a2,64 + LoadMenuBarLines[0].x[1] = LOADING_BAR_X + LOADING_BAR_WIDTH; +800250a4: 24050140 li a1,320 + + LoadMenuBarLines[0].y[0] = LOADING_BAR_Y; +800250a8: 240400c8 li a0,200 + + LoadMenuBarLines[1].x[0] = LOADING_BAR_X; + LoadMenuBarLines[1].x[1] = LOADING_BAR_X; + + LoadMenuBarLines[1].y[0] = LOADING_BAR_Y; + LoadMenuBarLines[1].y[1] = LOADING_BAR_Y + LOADING_BAR_HEIGHT; +800250ac: a443001a sh v1,26(v0) + // "Loading" bar line 2 (down left - down right) + + LoadMenuBarLines[2].x[0] = LOADING_BAR_X; + LoadMenuBarLines[2].x[1] = LOADING_BAR_X + LOADING_BAR_WIDTH; + + LoadMenuBarLines[2].y[0] = LOADING_BAR_Y + LOADING_BAR_HEIGHT; +800250b0: a4430028 sh v1,40(v0) + LoadMenuBarLines[2].y[1] = LOADING_BAR_Y + LOADING_BAR_HEIGHT; +800250b4: a443002a sh v1,42(v0) + + LoadMenuBarLines[3].x[0] = LOADING_BAR_X + LOADING_BAR_WIDTH; + LoadMenuBarLines[3].x[1] = LOADING_BAR_X + LOADING_BAR_WIDTH; + + LoadMenuBarLines[3].y[0] = LOADING_BAR_Y; + LoadMenuBarLines[3].y[1] = LOADING_BAR_Y + LOADING_BAR_HEIGHT; +800250b8: a443003a sh v1,58(v0) +800250bc: 3c038004 lui v1,0x8004 + loadMenuBg.b[i] = 0; + } + + // "Loading" bar line 0 (up left - up right) + + LoadMenuBarLines[0].x[0] = LOADING_BAR_X; +800250c0: a4460004 sh a2,4(v0) + LoadMenuBarLines[0].x[1] = LOADING_BAR_X + LOADING_BAR_WIDTH; +800250c4: a4450006 sh a1,6(v0) + + LoadMenuBarLines[0].y[0] = LOADING_BAR_Y; +800250c8: a4440008 sh a0,8(v0) + LoadMenuBarLines[0].y[1] = LOADING_BAR_Y; +800250cc: a444000a sh a0,10(v0) + + // "Loading" bar line 1 (up left - down left) + + LoadMenuBarLines[1].x[0] = LOADING_BAR_X; +800250d0: a4460014 sh a2,20(v0) + LoadMenuBarLines[1].x[1] = LOADING_BAR_X; +800250d4: a4460016 sh a2,22(v0) + + LoadMenuBarLines[1].y[0] = LOADING_BAR_Y; +800250d8: a4440018 sh a0,24(v0) + LoadMenuBarLines[1].y[1] = LOADING_BAR_Y + LOADING_BAR_HEIGHT; + + // "Loading" bar line 2 (down left - down right) + + LoadMenuBarLines[2].x[0] = LOADING_BAR_X; +800250dc: a4460024 sh a2,36(v0) + LoadMenuBarLines[2].x[1] = LOADING_BAR_X + LOADING_BAR_WIDTH; +800250e0: a4450026 sh a1,38(v0) + LoadMenuBarLines[2].y[0] = LOADING_BAR_Y + LOADING_BAR_HEIGHT; + LoadMenuBarLines[2].y[1] = LOADING_BAR_Y + LOADING_BAR_HEIGHT; + + // "Loading" bar line 3 (up right - down right) + + LoadMenuBarLines[3].x[0] = LOADING_BAR_X + LOADING_BAR_WIDTH; +800250e4: a4450034 sh a1,52(v0) + LoadMenuBarLines[3].x[1] = LOADING_BAR_X + LOADING_BAR_WIDTH; +800250e8: a4450036 sh a1,54(v0) + + LoadMenuBarLines[3].y[0] = LOADING_BAR_Y; +800250ec: a4440038 sh a0,56(v0) +800250f0: 24635d00 addiu v1,v1,23808 + LoadMenuBarLines[3].y[1] = LOADING_BAR_Y + LOADING_BAR_HEIGHT; + + for(i = 0; i < LOADING_BAR_N_LINES ; i++) + { + LoadMenuBarLines[i].r = 0; +800250f4: a0400000 sb zero,0(v0) + LoadMenuBarLines[i].g = 0; +800250f8: a0400001 sb zero,1(v0) + LoadMenuBarLines[i].b = 0; +800250fc: a0400002 sb zero,2(v0) +80025100: 24420010 addiu v0,v0,16 + LoadMenuBarLines[3].x[1] = LOADING_BAR_X + LOADING_BAR_WIDTH; + + LoadMenuBarLines[3].y[0] = LOADING_BAR_Y; + LoadMenuBarLines[3].y[1] = LOADING_BAR_Y + LOADING_BAR_HEIGHT; + + for(i = 0; i < LOADING_BAR_N_LINES ; i++) +80025104: 1443fffb bne v0,v1,800250f4 <LoadMenu+0x1f0> +80025108: 24040040 li a0,64 + LoadMenuBarLines[i].r = 0; + LoadMenuBarLines[i].g = 0; + LoadMenuBarLines[i].b = 0; + } + + LoadMenuBarRect.r = 0; +8002510c: 3c038004 lui v1,0x8004 +80025110: 24625cb0 addiu v0,v1,23728 + LoadMenuBarRect.g = 0; + LoadMenuBarRect.b = 0; + + // LoadMenuBarRect.attribute |= ENABLE_TRANS | TRANS_MODE(0); + + LoadMenuBarRect.x = LOADING_BAR_X; +80025114: a4645cb0 sh a0,23728(v1) + LoadMenuBarRect.y = LOADING_BAR_Y; +80025118: 240300c8 li v1,200 +8002511c: a4430002 sh v1,2(v0) + LoadMenuBarRect.w = 0; + LoadMenuBarRect.h = LOADING_BAR_HEIGHT; +80025120: 24030010 li v1,16 +80025124: a4430006 sh v1,6(v0) + + LoadMenuBarRect.attribute |= ENABLE_TRANS | TRANS_MODE(0); +80025128: 8c43000c lw v1,12(v0) + LoadMenuBarLines[i].r = 0; + LoadMenuBarLines[i].g = 0; + LoadMenuBarLines[i].b = 0; + } + + LoadMenuBarRect.r = 0; +8002512c: a0400008 sb zero,8(v0) + LoadMenuBarRect.x = LOADING_BAR_X; + LoadMenuBarRect.y = LOADING_BAR_Y; + LoadMenuBarRect.w = 0; + LoadMenuBarRect.h = LOADING_BAR_HEIGHT; + + LoadMenuBarRect.attribute |= ENABLE_TRANS | TRANS_MODE(0); +80025130: 34630010 ori v1,v1,0x10 +80025134: ac43000c sw v1,12(v0) + LoadMenuBarLines[i].g = 0; + LoadMenuBarLines[i].b = 0; + } + + LoadMenuBarRect.r = 0; + LoadMenuBarRect.g = 0; +80025138: a0400009 sb zero,9(v0) + LoadMenuBarRect.b = 0; +8002513c: a040000a sb zero,10(v0) + + // LoadMenuBarRect.attribute |= ENABLE_TRANS | TRANS_MODE(0); + + LoadMenuBarRect.x = LOADING_BAR_X; + LoadMenuBarRect.y = LOADING_BAR_Y; + LoadMenuBarRect.w = 0; +80025140: a4400004 sh zero,4(v0) + LoadMenuBarRect.h = LOADING_BAR_HEIGHT; + + LoadMenuBarRect.attribute |= ENABLE_TRANS | TRANS_MODE(0); + + load_menu_running = true; +80025144: 24020001 li v0,1 +80025148: a2021c31 sb v0,7217(s0) + + small_font_lum = 0; +8002514c: 3c028007 lui v0,0x8007 +80025150: a0401c3c sb zero,7228(v0) + + SmallFont.spr.r = 0; + SmallFont.spr.g = 0; + SmallFont.spr.b = 0; + + GfxSetGlobalLuminance(0); +80025154: 00002021 move a0,zero + + load_menu_running = true; + + small_font_lum = 0; + + SmallFont.spr.r = 0; +80025158: 26a28d38 addiu v0,s5,-29384 +8002515c: a040000e sb zero,14(v0) + SmallFont.spr.g = 0; +80025160: a040000f sb zero,15(v0) + SmallFont.spr.b = 0; + + GfxSetGlobalLuminance(0); +80025164: 0c00900b jal 8002402c <GfxSetGlobalLuminance> +80025168: a0400010 sb zero,16(v0) + + SetVBlankHandler(&ISR_LoadMenuVBlank); +8002516c: 3c048002 lui a0,0x8002 +80025170: 0c00d35e jal 80034d78 <SetVBlankHandler> +80025174: 248447cc addiu a0,a0,18380 + return isr_ended; +} + +bool LoadMenuISRHasStarted(void) +{ + return isr_started; +80025178: 92c21c34 lbu v0,7220(s6) +8002517c: 00000000 nop +80025180: 304200ff andi v0,v0,0xff + + if(load_menu_running == false) + { + LoadMenuInit(); + + while(LoadMenuISRHasStarted() == false); +80025184: 1040fffc beqz v0,80025178 <LoadMenu+0x274> +80025188: 00000000 nop +8002518c: 1000ff6d b 80024f44 <LoadMenu+0x40> +80025190: 00000000 nop + } + + LoadMenuLoadFileList(fileList,dest,szFileList,szDestList); + +} +80025194: 8fbf002c lw ra,44(sp) +80025198: 8fb60028 lw s6,40(sp) +8002519c: 8fb50024 lw s5,36(sp) +800251a0: 8fb40020 lw s4,32(sp) +800251a4: 8fb3001c lw s3,28(sp) +800251a8: 8fb00010 lw s0,16(sp) + short x_increment; + uint8_t fileLoadedCount; + + if(szFileList != szDestList) + { + dprintf("File list size different from dest list size! %d vs %d\n", +800251ac: 02403021 move a2,s2 +800251b0: 02202821 move a1,s1 + while(LoadMenuISRHasStarted() == false); + } + + LoadMenuLoadFileList(fileList,dest,szFileList,szDestList); + +} +800251b4: 8fb20018 lw s2,24(sp) +800251b8: 8fb10014 lw s1,20(sp) + short x_increment; + uint8_t fileLoadedCount; + + if(szFileList != szDestList) + { + dprintf("File list size different from dest list size! %d vs %d\n", +800251bc: 3c048004 lui a0,0x8004 +800251c0: 24840938 addiu a0,a0,2360 +800251c4: 0800ed8f j 8003b63c <printf> +800251c8: 27bd0030 addiu sp,sp,48 + +800251cc <main>: +/* ************************************* + * Local Prototypes + * *************************************/ + +int main(void) +{ +800251cc: 27bdffe8 addiu sp,sp,-24 +800251d0: afbf0014 sw ra,20(sp) + + //System initialization + SystemInit(); +800251d4: 0c00a0a8 jal 800282a0 <SystemInit> +800251d8: 00000000 nop + + MainMenu(); +800251dc: 0c009900 jal 80026400 <MainMenu> +800251e0: 00000000 nop + + return 0; + +} +800251e4: 8fbf0014 lw ra,20(sp) +800251e8: 00001021 move v0,zero +800251ec: 03e00008 jr ra +800251f0: 27bd0018 addiu sp,sp,24 + +800251f4 <MemCardReadSector>: + + return true; +} + +bool MemCardReadSector(TYPE_BLOCK_DATA * ptrBlockData, int sector) +{ +800251f4: 27bdffe0 addiu sp,sp,-32 + uint8_t result; + + MemCardErrors.Block = ptrBlockData->Block; +800251f8: 8c860004 lw a2,4(a0) + + return true; +} + +bool MemCardReadSector(TYPE_BLOCK_DATA * ptrBlockData, int sector) +{ +800251fc: afb10014 sw s1,20(sp) +80025200: afb00010 sw s0,16(sp) + uint8_t result; + + MemCardErrors.Block = ptrBlockData->Block; +80025204: 3c118004 lui s1,0x8004 + + return true; +} + +bool MemCardReadSector(TYPE_BLOCK_DATA * ptrBlockData, int sector) +{ +80025208: 00808021 move s0,a0 + uint8_t result; + + MemCardErrors.Block = ptrBlockData->Block; + MemCardErrors.Slot = ptrBlockData->Slot; +8002520c: 8c840000 lw a0,0(a0) + +bool MemCardReadSector(TYPE_BLOCK_DATA * ptrBlockData, int sector) +{ + uint8_t result; + + MemCardErrors.Block = ptrBlockData->Block; +80025210: 26225e14 addiu v0,s1,24084 + + return true; +} + +bool MemCardReadSector(TYPE_BLOCK_DATA * ptrBlockData, int sector) +{ +80025214: afbf001c sw ra,28(sp) +80025218: afb20018 sw s2,24(sp) + uint8_t result; + + MemCardErrors.Block = ptrBlockData->Block; +8002521c: ac460008 sw a2,8(v0) + MemCardErrors.Slot = ptrBlockData->Slot; +80025220: ac440004 sw a0,4(v0) + + if( (ptrBlockData->Slot != 0) +80025224: 2c820002 sltiu v0,a0,2 +80025228: 14400008 bnez v0,8002524c <MemCardReadSector+0x58> +8002522c: 24020053 li v0,83 + && + (ptrBlockData->Slot != 1) ) + { + MemCardErrors.ErrorByte = 'S'; + + dprintf("Incorrect slot %d! Block %d?\n", +80025230: 00802821 move a1,a0 +80025234: 3c048004 lui a0,0x8004 +80025238: 248409d4 addiu a0,a0,2516 +8002523c: 0c00ed8f jal 8003b63c <printf> +80025240: a2225e14 sb v0,24084(s1) + return false; + + case MEMCARD_BAD_SECTOR: + dprintf("Invalid memory card sector %d. Only values between" + " 0 and 511 are allowed!\n", sector); + return false; +80025244: 1000001f b 800252c4 <MemCardReadSector+0xd0> +80025248: 00001021 move v0,zero + ptrBlockData->Block); + + return false; + } + + if((sector < 0) || (sector > MEMCARD_MAXIMUM_SECTOR)) +8002524c: 2ca20200 sltiu v0,a1,512 +80025250: 14400004 bnez v0,80025264 <MemCardReadSector+0x70> +80025254: 00a09021 move s2,a1 + { + MemCardErrors.ErrorByte = 'T'; +80025258: 24020054 li v0,84 +8002525c: 10000015 b 800252b4 <MemCardReadSector+0xc0> +80025260: a2225e14 sb v0,24084(s1) + dprintf("Invalid memory card sector %d. Only values between" + " 0 and 511 are allowed!\n", sector); + return false; + } + + result = McReadSector(ptrBlockData->Slot, sector, DataBuffer); +80025264: 3c068004 lui a2,0x8004 +80025268: 0c00ca8f jal 80032a3c <McReadSector> +8002526c: 24c65e20 addiu a2,a2,24096 + + // Fill char "MemCardErrors" for further error description. + MemCardErrors.ErrorByte = result; + + switch(result) +80025270: 2403004e li v1,78 +80025274: 10430006 beq v0,v1,80025290 <MemCardReadSector+0x9c> +80025278: a2225e14 sb v0,24084(s1) +8002527c: 240300ff li v1,255 +80025280: 1043000b beq v0,v1,800252b0 <MemCardReadSector+0xbc> +80025284: 38420047 xori v0,v0,0x47 + { + case '1': + case '2': + case 'L': + case 'M': + return false; +80025288: 1000000e b 800252c4 <MemCardReadSector+0xd0> +8002528c: 2c420001 sltiu v0,v0,1 + + case MEMCARD_INVALID_CHECKSUM: + dprintf("Invalid checksum for memory card sector %d" +80025290: 8e070000 lw a3,0(s0) +80025294: 8e060004 lw a2,4(s0) +80025298: 3c048004 lui a0,0x8004 +8002529c: 02402821 move a1,s2 +800252a0: 0c00ed8f jal 8003b63c <printf> +800252a4: 24840a40 addiu a0,a0,2624 + return false; + + case MEMCARD_BAD_SECTOR: + dprintf("Invalid memory card sector %d. Only values between" + " 0 and 511 are allowed!\n", sector); + return false; +800252a8: 10000006 b 800252c4 <MemCardReadSector+0xd0> +800252ac: 00001021 move v0,zero + ptrBlockData->Block, + ptrBlockData->Slot ); + return false; + + case MEMCARD_BAD_SECTOR: + dprintf("Invalid memory card sector %d. Only values between" +800252b0: 02402821 move a1,s2 +800252b4: 3c048004 lui a0,0x8004 +800252b8: 0c00ed8f jal 8003b63c <printf> +800252bc: 248409f4 addiu a0,a0,2548 + " 0 and 511 are allowed!\n", sector); + return false; +800252c0: 00001021 move v0,zero + default: + return false; + } + + return true; +} +800252c4: 8fbf001c lw ra,28(sp) +800252c8: 8fb20018 lw s2,24(sp) +800252cc: 8fb10014 lw s1,20(sp) +800252d0: 8fb00010 lw s0,16(sp) +800252d4: 03e00008 jr ra +800252d8: 27bd0020 addiu sp,sp,32 + +800252dc <ISR_MemCardDataHandling>: +void ISR_MemCardDataHandling(void) +{ + + uint8_t i; + + ISR_TimesAccessed++; +800252dc: 3c038007 lui v1,0x8007 +800252e0: 8c621c50 lw v0,7248(v1) + + bzero((TYPE_MEMCARD_ERRORS*)&MemCardErrors, sizeof(TYPE_MEMCARD_ERRORS) ); +} + +void ISR_MemCardDataHandling(void) +{ +800252e4: 27bdffe0 addiu sp,sp,-32 + + uint8_t i; + + ISR_TimesAccessed++; +800252e8: 24420001 addiu v0,v0,1 +800252ec: ac621c50 sw v0,7248(v1) + + bzero((TYPE_MEMCARD_ERRORS*)&MemCardErrors, sizeof(TYPE_MEMCARD_ERRORS) ); +} + +void ISR_MemCardDataHandling(void) +{ +800252f0: afbf001c sw ra,28(sp) +800252f4: afb20018 sw s2,24(sp) +800252f8: afb10014 sw s1,20(sp) + + uint8_t i; + + ISR_TimesAccessed++; + + if( (GfxIsGPUBusy() == true) || (SystemIsBusy() == true) ) +800252fc: 0c00901d jal 80024074 <GfxIsGPUBusy> +80025300: afb00010 sw s0,16(sp) +80025304: 1440007d bnez v0,800254fc <ISR_MemCardDataHandling+0x220> +80025308: 00000000 nop +8002530c: 0c00a057 jal 8002815c <SystemIsBusy> +80025310: 00000000 nop +80025314: 14400079 bnez v0,800254fc <ISR_MemCardDataHandling+0x220> +80025318: 3c048004 lui a0,0x8004 + { + return; + } + + SecondDisplay.r = NORMAL_LUMINANCE; +8002531c: 2405ff80 li a1,-128 +80025320: 24825de8 addiu v0,a0,24040 + SecondDisplay.g = NORMAL_LUMINANCE; + SecondDisplay.b = NORMAL_LUMINANCE; + + MemCardRect.x[0] = MEMCARD_BG_X; +80025324: 3c038004 lui v1,0x8004 + if( (GfxIsGPUBusy() == true) || (SystemIsBusy() == true) ) + { + return; + } + + SecondDisplay.r = NORMAL_LUMINANCE; +80025328: a045000e sb a1,14(v0) + SecondDisplay.g = NORMAL_LUMINANCE; +8002532c: a045000f sb a1,15(v0) + SecondDisplay.b = NORMAL_LUMINANCE; +80025330: a0450010 sb a1,16(v0) + + MemCardRect.x[0] = MEMCARD_BG_X; +80025334: 24625dc8 addiu v0,v1,24008 + MemCardRect.r[2] = MEMCARD_BG_R2; + MemCardRect.r[3] = MEMCARD_BG_R3; + + MemCardRect.g[0] = MEMCARD_BG_G0; + MemCardRect.g[1] = MEMCARD_BG_G1; + MemCardRect.g[2] = MEMCARD_BG_G2; +80025338: a0450006 sb a1,6(v0) + MemCardRect.g[3] = MEMCARD_BG_G3; +8002533c: a0450007 sb a1,7(v0) + MemCardRect.b[0] = MEMCARD_BG_B0; + MemCardRect.b[1] = MEMCARD_BG_B1; + MemCardRect.b[2] = MEMCARD_BG_B2; + MemCardRect.b[3] = MEMCARD_BG_B3; + + MemCardRect.attribute |= ENABLE_TRANS | TRANS_MODE(0); +80025340: 8c45001c lw a1,28(v0) + SecondDisplay.r = NORMAL_LUMINANCE; + SecondDisplay.g = NORMAL_LUMINANCE; + SecondDisplay.b = NORMAL_LUMINANCE; + + MemCardRect.x[0] = MEMCARD_BG_X; + MemCardRect.x[1] = MEMCARD_BG_X + MEMCARD_BG_W; +80025344: 24070140 li a3,320 +80025348: a447000e sh a3,14(v0) + MemCardRect.x[2] = MEMCARD_BG_X; + MemCardRect.x[3] = MEMCARD_BG_X + MEMCARD_BG_W; +8002534c: a4470012 sh a3,18(v0) + MemCardRect.b[0] = MEMCARD_BG_B0; + MemCardRect.b[1] = MEMCARD_BG_B1; + MemCardRect.b[2] = MEMCARD_BG_B2; + MemCardRect.b[3] = MEMCARD_BG_B3; + + MemCardRect.attribute |= ENABLE_TRANS | TRANS_MODE(0); +80025350: 34a50010 ori a1,a1,0x10 + MemCardRect.x[0] = MEMCARD_BG_X; + MemCardRect.x[1] = MEMCARD_BG_X + MEMCARD_BG_W; + MemCardRect.x[2] = MEMCARD_BG_X; + MemCardRect.x[3] = MEMCARD_BG_X + MEMCARD_BG_W; + + MemCardRect.y[0] = MEMCARD_BG_Y; +80025354: 2407001c li a3,28 + + SecondDisplay.r = NORMAL_LUMINANCE; + SecondDisplay.g = NORMAL_LUMINANCE; + SecondDisplay.b = NORMAL_LUMINANCE; + + MemCardRect.x[0] = MEMCARD_BG_X; +80025358: 24060040 li a2,64 + MemCardRect.x[1] = MEMCARD_BG_X + MEMCARD_BG_W; + MemCardRect.x[2] = MEMCARD_BG_X; + MemCardRect.x[3] = MEMCARD_BG_X + MEMCARD_BG_W; + + MemCardRect.y[0] = MEMCARD_BG_Y; +8002535c: a4470014 sh a3,20(v0) + MemCardRect.y[1] = MEMCARD_BG_Y; +80025360: a4470016 sh a3,22(v0) + MemCardRect.b[0] = MEMCARD_BG_B0; + MemCardRect.b[1] = MEMCARD_BG_B1; + MemCardRect.b[2] = MEMCARD_BG_B2; + MemCardRect.b[3] = MEMCARD_BG_B3; + + MemCardRect.attribute |= ENABLE_TRANS | TRANS_MODE(0); +80025364: ac45001c sw a1,28(v0) + MemCardRect.x[2] = MEMCARD_BG_X; + MemCardRect.x[3] = MEMCARD_BG_X + MEMCARD_BG_W; + + MemCardRect.y[0] = MEMCARD_BG_Y; + MemCardRect.y[1] = MEMCARD_BG_Y; + MemCardRect.y[2] = MEMCARD_BG_Y + MEMCARD_BG_H; +80025368: 240700d4 li a3,212 + + MemCardRect.attribute |= ENABLE_TRANS | TRANS_MODE(0); + + // "Loading" bar line 0 (up left - up right) + + MemCardProgressBarLines[0].x[0] = MEMCARD_PROGRESS_BAR_X; +8002536c: 3c058004 lui a1,0x8004 + MemCardRect.x[2] = MEMCARD_BG_X; + MemCardRect.x[3] = MEMCARD_BG_X + MEMCARD_BG_W; + + MemCardRect.y[0] = MEMCARD_BG_Y; + MemCardRect.y[1] = MEMCARD_BG_Y; + MemCardRect.y[2] = MEMCARD_BG_Y + MEMCARD_BG_H; +80025370: a4470018 sh a3,24(v0) + MemCardRect.g[2] = MEMCARD_BG_G2; + MemCardRect.g[3] = MEMCARD_BG_G3; + + MemCardRect.b[0] = MEMCARD_BG_B0; + MemCardRect.b[1] = MEMCARD_BG_B1; + MemCardRect.b[2] = MEMCARD_BG_B2; +80025374: a046000a sb a2,10(v0) + MemCardRect.b[3] = MEMCARD_BG_B3; +80025378: a046000b sb a2,11(v0) + + MemCardRect.attribute |= ENABLE_TRANS | TRANS_MODE(0); + + // "Loading" bar line 0 (up left - up right) + + MemCardProgressBarLines[0].x[0] = MEMCARD_PROGRESS_BAR_X; +8002537c: 24090056 li t1,86 + MemCardProgressBarLines[0].x[1] = MEMCARD_PROGRESS_BAR_X + MEMCARD_PROGRESS_BAR_W; +80025380: 24080138 li t0,312 + + SecondDisplay.r = NORMAL_LUMINANCE; + SecondDisplay.g = NORMAL_LUMINANCE; + SecondDisplay.b = NORMAL_LUMINANCE; + + MemCardRect.x[0] = MEMCARD_BG_X; +80025384: a446000c sh a2,12(v0) + MemCardRect.x[1] = MEMCARD_BG_X + MEMCARD_BG_W; + MemCardRect.x[2] = MEMCARD_BG_X; +80025388: a4460010 sh a2,16(v0) + MemCardRect.x[3] = MEMCARD_BG_X + MEMCARD_BG_W; + + MemCardRect.y[0] = MEMCARD_BG_Y; + MemCardRect.y[1] = MEMCARD_BG_Y; + MemCardRect.y[2] = MEMCARD_BG_Y + MEMCARD_BG_H; + MemCardRect.y[3] = MEMCARD_BG_Y + MEMCARD_BG_H; +8002538c: a447001a sh a3,26(v0) + + MemCardProgressBarLines[1].x[0] = MEMCARD_PROGRESS_BAR_X; + MemCardProgressBarLines[1].x[1] = MEMCARD_PROGRESS_BAR_X; + + MemCardProgressBarLines[1].y[0] = MEMCARD_PROGRESS_BAR_Y; + MemCardProgressBarLines[1].y[1] = MEMCARD_PROGRESS_BAR_Y + MEMCARD_PROGRESS_BAR_H; +80025390: 240600a4 li a2,164 + // "Loading" bar line 0 (up left - up right) + + MemCardProgressBarLines[0].x[0] = MEMCARD_PROGRESS_BAR_X; + MemCardProgressBarLines[0].x[1] = MEMCARD_PROGRESS_BAR_X + MEMCARD_PROGRESS_BAR_W; + + MemCardProgressBarLines[0].y[0] = MEMCARD_PROGRESS_BAR_Y; +80025394: 24070094 li a3,148 + MemCardRect.r[0] = MEMCARD_BG_R0; + MemCardRect.r[1] = MEMCARD_BG_R1; + MemCardRect.r[2] = MEMCARD_BG_R2; + MemCardRect.r[3] = MEMCARD_BG_R3; + + MemCardRect.g[0] = MEMCARD_BG_G0; +80025398: a0400004 sb zero,4(v0) + MemCardRect.g[1] = MEMCARD_BG_G1; +8002539c: a0400005 sb zero,5(v0) + MemCardRect.g[2] = MEMCARD_BG_G2; + MemCardRect.g[3] = MEMCARD_BG_G3; + + MemCardRect.b[0] = MEMCARD_BG_B0; +800253a0: a0400008 sb zero,8(v0) + MemCardRect.b[1] = MEMCARD_BG_B1; +800253a4: a0400009 sb zero,9(v0) + MemCardRect.y[1] = MEMCARD_BG_Y; + MemCardRect.y[2] = MEMCARD_BG_Y + MEMCARD_BG_H; + MemCardRect.y[3] = MEMCARD_BG_Y + MEMCARD_BG_H; + + MemCardRect.r[0] = MEMCARD_BG_R0; + MemCardRect.r[1] = MEMCARD_BG_R1; +800253a8: a0400001 sb zero,1(v0) + MemCardRect.r[2] = MEMCARD_BG_R2; +800253ac: a0400002 sb zero,2(v0) + MemCardRect.r[3] = MEMCARD_BG_R3; +800253b0: a0400003 sb zero,3(v0) + + MemCardRect.attribute |= ENABLE_TRANS | TRANS_MODE(0); + + // "Loading" bar line 0 (up left - up right) + + MemCardProgressBarLines[0].x[0] = MEMCARD_PROGRESS_BAR_X; +800253b4: 24a25d78 addiu v0,a1,23928 + MemCardRect.y[0] = MEMCARD_BG_Y; + MemCardRect.y[1] = MEMCARD_BG_Y; + MemCardRect.y[2] = MEMCARD_BG_Y + MEMCARD_BG_H; + MemCardRect.y[3] = MEMCARD_BG_Y + MEMCARD_BG_H; + + MemCardRect.r[0] = MEMCARD_BG_R0; +800253b8: a0605dc8 sb zero,24008(v1) + + MemCardRect.attribute |= ENABLE_TRANS | TRANS_MODE(0); + + // "Loading" bar line 0 (up left - up right) + + MemCardProgressBarLines[0].x[0] = MEMCARD_PROGRESS_BAR_X; +800253bc: a4490004 sh t1,4(v0) + MemCardProgressBarLines[0].x[1] = MEMCARD_PROGRESS_BAR_X + MEMCARD_PROGRESS_BAR_W; +800253c0: a4480006 sh t0,6(v0) + + MemCardProgressBarLines[0].y[0] = MEMCARD_PROGRESS_BAR_Y; +800253c4: a4470008 sh a3,8(v0) + MemCardProgressBarLines[0].y[1] = MEMCARD_PROGRESS_BAR_Y; +800253c8: a447000a sh a3,10(v0) + + // "Loading" bar line 1 (up left - down left) + + MemCardProgressBarLines[1].x[0] = MEMCARD_PROGRESS_BAR_X; +800253cc: a4490014 sh t1,20(v0) + MemCardProgressBarLines[1].x[1] = MEMCARD_PROGRESS_BAR_X; +800253d0: a4490016 sh t1,22(v0) + + MemCardProgressBarLines[1].y[0] = MEMCARD_PROGRESS_BAR_Y; +800253d4: a4470018 sh a3,24(v0) + MemCardProgressBarLines[1].y[1] = MEMCARD_PROGRESS_BAR_Y + MEMCARD_PROGRESS_BAR_H; +800253d8: a446001a sh a2,26(v0) + // "Loading" bar line 2 (down left - down right) + + MemCardProgressBarLines[2].x[0] = MEMCARD_PROGRESS_BAR_X; + MemCardProgressBarLines[2].x[1] = MEMCARD_PROGRESS_BAR_X + MEMCARD_PROGRESS_BAR_W; + + MemCardProgressBarLines[2].y[0] = MEMCARD_PROGRESS_BAR_Y + MEMCARD_PROGRESS_BAR_H; +800253dc: a4460028 sh a2,40(v0) + MemCardProgressBarLines[2].y[1] = MEMCARD_PROGRESS_BAR_Y + MEMCARD_PROGRESS_BAR_H; +800253e0: a446002a sh a2,42(v0) + + MemCardProgressBarLines[3].x[0] = MEMCARD_PROGRESS_BAR_X + MEMCARD_PROGRESS_BAR_W; + MemCardProgressBarLines[3].x[1] = MEMCARD_PROGRESS_BAR_X + MEMCARD_PROGRESS_BAR_W; + + MemCardProgressBarLines[3].y[0] = MEMCARD_PROGRESS_BAR_Y; + MemCardProgressBarLines[3].y[1] = MEMCARD_PROGRESS_BAR_Y + MEMCARD_PROGRESS_BAR_H; +800253e4: a446003a sh a2,58(v0) +800253e8: 3c068004 lui a2,0x8004 +800253ec: 00a09021 move s2,a1 + MemCardProgressBarLines[1].y[0] = MEMCARD_PROGRESS_BAR_Y; + MemCardProgressBarLines[1].y[1] = MEMCARD_PROGRESS_BAR_Y + MEMCARD_PROGRESS_BAR_H; + + // "Loading" bar line 2 (down left - down right) + + MemCardProgressBarLines[2].x[0] = MEMCARD_PROGRESS_BAR_X; +800253f0: a4490024 sh t1,36(v0) + MemCardProgressBarLines[2].x[1] = MEMCARD_PROGRESS_BAR_X + MEMCARD_PROGRESS_BAR_W; +800253f4: a4480026 sh t0,38(v0) + MemCardProgressBarLines[2].y[0] = MEMCARD_PROGRESS_BAR_Y + MEMCARD_PROGRESS_BAR_H; + MemCardProgressBarLines[2].y[1] = MEMCARD_PROGRESS_BAR_Y + MEMCARD_PROGRESS_BAR_H; + + // "Loading" bar line 3 (up right - down right) + + MemCardProgressBarLines[3].x[0] = MEMCARD_PROGRESS_BAR_X + MEMCARD_PROGRESS_BAR_W; +800253f8: a4480034 sh t0,52(v0) + MemCardProgressBarLines[3].x[1] = MEMCARD_PROGRESS_BAR_X + MEMCARD_PROGRESS_BAR_W; +800253fc: a4480036 sh t0,54(v0) + + MemCardProgressBarLines[3].y[0] = MEMCARD_PROGRESS_BAR_Y; +80025400: a4470038 sh a3,56(v0) +80025404: 24c65db8 addiu a2,a2,23992 +80025408: 00608821 move s1,v1 + MemCardProgressBarLines[3].y[1] = MEMCARD_PROGRESS_BAR_Y + MEMCARD_PROGRESS_BAR_H; + + for(i = 0; i < MEMCARD_PROGRESS_BAR_N_LINES; i++) + { + MemCardProgressBarLines[i].r = NORMAL_LUMINANCE; +8002540c: 2405ff80 li a1,-128 +80025410: a0450000 sb a1,0(v0) + MemCardProgressBarLines[i].g = NORMAL_LUMINANCE; +80025414: a0450001 sb a1,1(v0) + MemCardProgressBarLines[i].b = NORMAL_LUMINANCE; +80025418: a0450002 sb a1,2(v0) +8002541c: 24420010 addiu v0,v0,16 + MemCardProgressBarLines[3].x[1] = MEMCARD_PROGRESS_BAR_X + MEMCARD_PROGRESS_BAR_W; + + MemCardProgressBarLines[3].y[0] = MEMCARD_PROGRESS_BAR_Y; + MemCardProgressBarLines[3].y[1] = MEMCARD_PROGRESS_BAR_Y + MEMCARD_PROGRESS_BAR_H; + + for(i = 0; i < MEMCARD_PROGRESS_BAR_N_LINES; i++) +80025420: 1446fffb bne v0,a2,80025410 <ISR_MemCardDataHandling+0x134> +80025424: 2403ff80 li v1,-128 + MemCardProgressBarLines[i].b = NORMAL_LUMINANCE; + } + + // Set progress bar attributes + + MemCardProgressBar.x = MEMCARD_PROGRESS_BAR_X; +80025428: 3c108004 lui s0,0x8004 +8002542c: 24020056 li v0,86 +80025430: a6025db8 sh v0,23992(s0) + MemCardProgressBar.y = MEMCARD_PROGRESS_BAR_Y; +80025434: 26105db8 addiu s0,s0,23992 +80025438: 24020094 li v0,148 +8002543c: a6020002 sh v0,2(s0) + + MemCardProgressBar.w = ProgressBarXOffset; +80025440: 3c028007 lui v0,0x8007 +80025444: 94421c48 lhu v0,7240(v0) + + MemCardProgressBar.r = MEMCARD_PROGRESS_BAR_R; + MemCardProgressBar.g = MEMCARD_PROGRESS_BAR_G; + MemCardProgressBar.b = MEMCARD_PROGRESS_BAR_B; + + GfxSortSprite(&SecondDisplay); +80025448: 24845de8 addiu a0,a0,24040 + // Set progress bar attributes + + MemCardProgressBar.x = MEMCARD_PROGRESS_BAR_X; + MemCardProgressBar.y = MEMCARD_PROGRESS_BAR_Y; + + MemCardProgressBar.w = ProgressBarXOffset; +8002544c: a6020004 sh v0,4(s0) + MemCardProgressBar.h = MEMCARD_PROGRESS_BAR_H; +80025450: 24020010 li v0,16 +80025454: a6020006 sh v0,6(s0) + + MemCardProgressBar.r = MEMCARD_PROGRESS_BAR_R; +80025458: a2030008 sb v1,8(s0) + MemCardProgressBar.g = MEMCARD_PROGRESS_BAR_G; +8002545c: a2030009 sb v1,9(s0) + MemCardProgressBar.b = MEMCARD_PROGRESS_BAR_B; + + GfxSortSprite(&SecondDisplay); +80025460: 0c0090d2 jal 80024348 <GfxSortSprite> +80025464: a203000a sb v1,10(s0) + GsSortGPoly4(&MemCardRect); +80025468: 0c00b0e6 jal 8002c398 <GsSortGPoly4> +8002546c: 26245dc8 addiu a0,s1,24008 + GsSortRectangle(&MemCardProgressBar); +80025470: 0c00b762 jal 8002dd88 <GsSortRectangle> +80025474: 02002021 move a0,s0 + + for(i = 0; i < MEMCARD_PROGRESS_BAR_N_LINES; i++) + { + GsSortLine(&MemCardProgressBarLines[i]); +80025478: 0c00b18e jal 8002c638 <GsSortLine> +8002547c: 26445d78 addiu a0,s2,23928 +80025480: 3c048004 lui a0,0x8004 +80025484: 0c00b18e jal 8002c638 <GsSortLine> +80025488: 24845d88 addiu a0,a0,23944 +8002548c: 3c048004 lui a0,0x8004 +80025490: 0c00b18e jal 8002c638 <GsSortLine> +80025494: 24845d98 addiu a0,a0,23960 +80025498: 3c048004 lui a0,0x8004 +8002549c: 0c00b18e jal 8002c638 <GsSortLine> +800254a0: 24845da8 addiu a0,a0,23976 + } + + GfxSetGlobalLuminance(0); + + FontSetFlags(&SmallFont, FONT_BLEND_EFFECT); +800254a4: 3c108007 lui s0,0x8007 + for(i = 0; i < MEMCARD_PROGRESS_BAR_N_LINES; i++) + { + GsSortLine(&MemCardProgressBarLines[i]); + } + + GfxSetGlobalLuminance(0); +800254a8: 0c00900b jal 8002402c <GfxSetGlobalLuminance> +800254ac: 00002021 move a0,zero + + FontSetFlags(&SmallFont, FONT_BLEND_EFFECT); +800254b0: 24050004 li a1,4 +800254b4: 0c008441 jal 80021104 <FontSetFlags> +800254b8: 26048d38 addiu a0,s0,-29384 + + FontPrintText(&SmallFont, MEMCARD_LOAD_DATA_TEXT_X, MEMCARD_LOAD_DATA_TEXT_Y, "Loading memory card data..."); +800254bc: 3c078004 lui a3,0x8004 +800254c0: 24e70a84 addiu a3,a3,2692 +800254c4: 240600c0 li a2,192 +800254c8: 24050060 li a1,96 +800254cc: 0c008451 jal 80021144 <FontPrintText> +800254d0: 26048d38 addiu a0,s0,-29384 + + FontSetFlags(&SmallFont, FONT_NOFLAGS); +800254d4: 00002821 move a1,zero +800254d8: 0c008441 jal 80021104 <FontSetFlags> +800254dc: 26048d38 addiu a0,s0,-29384 + + GfxDrawScene_Fast(); +800254e0: 0c008fc1 jal 80023f04 <GfxDrawScene_Fast> +800254e4: 00000000 nop + + ISR_TimesExecuted++; +800254e8: 3c038007 lui v1,0x8007 +800254ec: 8c621c4c lw v0,7244(v1) +800254f0: 00000000 nop +800254f4: 24420001 addiu v0,v0,1 +800254f8: ac621c4c sw v0,7244(v1) +} +800254fc: 8fbf001c lw ra,28(sp) +80025500: 8fb20018 lw s2,24(sp) +80025504: 8fb10014 lw s1,20(sp) +80025508: 8fb00010 lw s0,16(sp) +8002550c: 03e00008 jr ra +80025510: 27bd0020 addiu sp,sp,32 + +80025514 <MemCardInit>: + * *************************************/ + +TYPE_BLOCK_DATA MemCardData[MEMCARD_BLOCKS_PER_CARD][MEMCARD_NUMBER_OF_SLOTS]; + +void MemCardInit(void) +{ +80025514: 3c028007 lui v0,0x8007 +80025518: 24428fcc addiu v0,v0,-28724 +8002551c: 3c048007 lui a0,0x8007 +80025520: 2484d16c addiu a0,a0,-11924 +80025524: 00401821 move v1,v0 + { + for(i = BLOCK_1; i <= BLOCK_15; i++) + { + ptrBlockData = &MemCardData[i - BLOCK_1][j]; + + ptrBlockData->IconTPoly.r = NORMAL_LUMINANCE; +80025528: 2405ff80 li a1,-128 +8002552c: a0650218 sb a1,536(v1) + ptrBlockData->IconTPoly.g = NORMAL_LUMINANCE; +80025530: a0650219 sb a1,537(v1) + ptrBlockData->IconTPoly.b = NORMAL_LUMINANCE; +80025534: a065021a sb a1,538(v1) +80025538: 24630460 addiu v1,v1,1120 + uint8_t i; + uint8_t j; + + for(j = SLOT_ONE; j <= SLOT_TWO; j++) + { + for(i = BLOCK_1; i <= BLOCK_15; i++) +8002553c: 1483fffb bne a0,v1,8002552c <MemCardInit+0x18> +80025540: 00000000 nop + { + ptrBlockData = &MemCardData[i - BLOCK_1][j]; + + ptrBlockData->IconTPoly.r = NORMAL_LUMINANCE; +80025544: 2403ff80 li v1,-128 +80025548: a0430448 sb v1,1096(v0) + ptrBlockData->IconTPoly.g = NORMAL_LUMINANCE; +8002554c: a0430449 sb v1,1097(v0) + ptrBlockData->IconTPoly.b = NORMAL_LUMINANCE; +80025550: a043044a sb v1,1098(v0) +80025554: 24420460 addiu v0,v0,1120 + uint8_t i; + uint8_t j; + + for(j = SLOT_ONE; j <= SLOT_TWO; j++) + { + for(i = BLOCK_1; i <= BLOCK_15; i++) +80025558: 1482fffb bne a0,v0,80025548 <MemCardInit+0x34> +8002555c: 2406000c li a2,12 + ptrBlockData->IconTPoly.g = NORMAL_LUMINANCE; + ptrBlockData->IconTPoly.b = NORMAL_LUMINANCE; + } + } + + ISR_TimesAccessed = 0; +80025560: 3c028007 lui v0,0x8007 + ISR_TimesExecuted = 0; + + bzero((TYPE_MEMCARD_ERRORS*)&MemCardErrors, sizeof(TYPE_MEMCARD_ERRORS) ); +80025564: 3c048004 lui a0,0x8004 + ptrBlockData->IconTPoly.g = NORMAL_LUMINANCE; + ptrBlockData->IconTPoly.b = NORMAL_LUMINANCE; + } + } + + ISR_TimesAccessed = 0; +80025568: ac401c50 sw zero,7248(v0) + ISR_TimesExecuted = 0; +8002556c: 3c028007 lui v0,0x8007 + + bzero((TYPE_MEMCARD_ERRORS*)&MemCardErrors, sizeof(TYPE_MEMCARD_ERRORS) ); +80025570: 00002821 move a1,zero +80025574: 24845e14 addiu a0,a0,24084 +80025578: 0800d7ab j 80035eac <memset> +8002557c: ac401c4c sw zero,7244(v0) + +80025580 <MemCardResetBlockData>: + + ISR_TimesExecuted++; +} + +void MemCardResetBlockData(TYPE_BLOCK_DATA * ptrBlockData) +{ +80025580: 27bdffe8 addiu sp,sp,-24 + bzero((TYPE_BLOCK_DATA*)ptrBlockData, sizeof(TYPE_BLOCK_DATA)); +80025584: 24060230 li a2,560 +80025588: 00002821 move a1,zero + + ISR_TimesExecuted++; +} + +void MemCardResetBlockData(TYPE_BLOCK_DATA * ptrBlockData) +{ +8002558c: afbf0014 sw ra,20(sp) +80025590: afb00010 sw s0,16(sp) + bzero((TYPE_BLOCK_DATA*)ptrBlockData, sizeof(TYPE_BLOCK_DATA)); +80025594: 0c00d7ab jal 80035eac <memset> +80025598: 00808021 move s0,a0 + + ptrBlockData->BlockCount = FIRST_OR_ONLY_BLOCK; +8002559c: 24020001 li v0,1 + + IconIndex = 0; +} +800255a0: 8fbf0014 lw ra,20(sp) + +void MemCardResetBlockData(TYPE_BLOCK_DATA * ptrBlockData) +{ + bzero((TYPE_BLOCK_DATA*)ptrBlockData, sizeof(TYPE_BLOCK_DATA)); + + ptrBlockData->BlockCount = FIRST_OR_ONLY_BLOCK; +800255a4: ae020020 sw v0,32(s0) + + IconIndex = 0; +800255a8: 3c028007 lui v0,0x8007 +} +800255ac: 8fb00010 lw s0,16(sp) +{ + bzero((TYPE_BLOCK_DATA*)ptrBlockData, sizeof(TYPE_BLOCK_DATA)); + + ptrBlockData->BlockCount = FIRST_OR_ONLY_BLOCK; + + IconIndex = 0; +800255b0: a0401c54 sb zero,7252(v0) +} +800255b4: 03e00008 jr ra +800255b8: 27bd0018 addiu sp,sp,24 + +800255bc <MemCardUploadToGPU>: + + return false; +} + +bool MemCardUploadToGPU(TYPE_BLOCK_DATA * ptrBlockData) +{ +800255bc: 27bdff98 addiu sp,sp,-104 +800255c0: afbf0064 sw ra,100(sp) +800255c4: afb60060 sw s6,96(sp) +800255c8: afb5005c sw s5,92(sp) +800255cc: afb40058 sw s4,88(sp) +800255d0: afb30054 sw s3,84(sp) +800255d4: afb20050 sw s2,80(sp) +800255d8: afb1004c sw s1,76(sp) +800255dc: afb00048 sw s0,72(sp) + short x_clut_offset; + short y_clut_offset; + short x_block_offset; + GsImage gs; + + if( (ptrBlockData->IconNumber < 1) +800255e0: 90820008 lbu v0,8(a0) +800255e4: 00000000 nop +800255e8: 2442ffff addiu v0,v0,-1 +800255ec: 304200ff andi v0,v0,0xff +800255f0: 2c420003 sltiu v0,v0,3 +800255f4: 10400008 beqz v0,80025618 <MemCardUploadToGPU+0x5c> +800255f8: 3c128004 lui s2,0x8004 + if(i == 0) + { + ptrBlockData->IconTPoly.attribute = COLORMODE(COLORMODE_4BPP); + ptrBlockData->IconTPoly.tpage = (gs.x / 64) + ((gs.y/256)*16); + + dprintf("\tTPAGE = %d\n", ptrBlockData->IconTPoly.tpage); +800255fc: 3c138004 lui s3,0x8004 +80025600: 00808021 move s0,a0 +80025604: 0000a821 move s5,zero + gs.clut_x = MEMCARD_BLOCK_CLUT_X + x_clut_offset; + gs.clut_y = MEMCARD_BLOCK_CLUT_Y + y_clut_offset + (ptrBlockData->Slot << 4); + gs.clut_w = MEMCARD_BLOCK_CLUT_W; + gs.clut_h = MEMCARD_BLOCK_CLUT_H; + + dprintf("Gs Clut = {%d,%d,%d,%d}\n", +80025608: 26520abc addiu s2,s2,2748 + if(i == 0) + { + ptrBlockData->IconTPoly.attribute = COLORMODE(COLORMODE_4BPP); + ptrBlockData->IconTPoly.tpage = (gs.x / 64) + ((gs.y/256)*16); + + dprintf("\tTPAGE = %d\n", ptrBlockData->IconTPoly.tpage); +8002560c: 26730ad8 addiu s3,s3,2776 + ptrBlockData->IconTPoly.u[0] = MEMCARD_BLOCK_IMAGE_X + x_block_offset; + ptrBlockData->IconTPoly.u[1] = ptrBlockData->IconTPoly.u[0] + (gs.w << 2); + ptrBlockData->IconTPoly.u[2] = ptrBlockData->IconTPoly.u[0]; + ptrBlockData->IconTPoly.u[3] = ptrBlockData->IconTPoly.u[1]; + + dprintf("\tu = {%d, %d, %d, %d}\n", +80025610: 10000080 b 80025814 <MemCardUploadToGPU+0x258> +80025614: 3c148004 lui s4,0x8004 + + if( (ptrBlockData->IconNumber < 1) + || + (ptrBlockData->IconNumber > MEMCARD_NUMBER_OF_ICONS) ) + { + dprintf("Invalid number of icons.\n"); +80025618: 3c048004 lui a0,0x8004 +8002561c: 0c00ed8f jal 8003b63c <printf> +80025620: 24840aa0 addiu a0,a0,2720 + return false; +80025624: 10000081 b 8002582c <MemCardUploadToGPU+0x270> +80025628: 00001021 move v0,zero + { + gs.pmode = COLORMODE_4BPP; + gs.has_clut = 1; + + x_clut_offset = i << 4; + y_clut_offset = ptrBlockData->Block - 1; +8002562c: 8e060004 lw a2,4(s0) + + gs.clut_x = MEMCARD_BLOCK_CLUT_X + x_clut_offset; + gs.clut_y = MEMCARD_BLOCK_CLUT_Y + y_clut_offset + (ptrBlockData->Slot << 4); +80025630: 8e020000 lw v0,0(s0) + { + gs.pmode = COLORMODE_4BPP; + gs.has_clut = 1; + + x_clut_offset = i << 4; + y_clut_offset = ptrBlockData->Block - 1; +80025634: 24c6ffff addiu a2,a2,-1 +80025638: 00063400 sll a2,a2,0x10 + + gs.clut_x = MEMCARD_BLOCK_CLUT_X + x_clut_offset; + gs.clut_y = MEMCARD_BLOCK_CLUT_Y + y_clut_offset + (ptrBlockData->Slot << 4); +8002563c: 00021100 sll v0,v0,0x4 +80025640: 24420160 addiu v0,v0,352 + { + gs.pmode = COLORMODE_4BPP; + gs.has_clut = 1; + + x_clut_offset = i << 4; + y_clut_offset = ptrBlockData->Block - 1; +80025644: 00063403 sra a2,a2,0x10 + + gs.clut_x = MEMCARD_BLOCK_CLUT_X + x_clut_offset; +80025648: 00152900 sll a1,s5,0x4 +8002564c: 24a503c0 addiu a1,a1,960 + gs.clut_y = MEMCARD_BLOCK_CLUT_Y + y_clut_offset + (ptrBlockData->Slot << 4); +80025650: 00463021 addu a2,v0,a2 + gs.clut_w = MEMCARD_BLOCK_CLUT_W; +80025654: 24160010 li s6,16 + gs.clut_h = MEMCARD_BLOCK_CLUT_H; + + dprintf("Gs Clut = {%d,%d,%d,%d}\n", +80025658: afa30010 sw v1,16(sp) +8002565c: 02402021 move a0,s2 +80025660: 24070010 li a3,16 + } + + for(i = 0; i < ptrBlockData->IconNumber; i++) + { + gs.pmode = COLORMODE_4BPP; + gs.has_clut = 1; +80025664: afa3001c sw v1,28(sp) + y_clut_offset = ptrBlockData->Block - 1; + + gs.clut_x = MEMCARD_BLOCK_CLUT_X + x_clut_offset; + gs.clut_y = MEMCARD_BLOCK_CLUT_Y + y_clut_offset + (ptrBlockData->Slot << 4); + gs.clut_w = MEMCARD_BLOCK_CLUT_W; + gs.clut_h = MEMCARD_BLOCK_CLUT_H; +80025668: afa3002c sw v1,44(sp) + return false; + } + + for(i = 0; i < ptrBlockData->IconNumber; i++) + { + gs.pmode = COLORMODE_4BPP; +8002566c: afa00018 sw zero,24(sp) + gs.has_clut = 1; + + x_clut_offset = i << 4; + y_clut_offset = ptrBlockData->Block - 1; + + gs.clut_x = MEMCARD_BLOCK_CLUT_X + x_clut_offset; +80025670: afa50020 sw a1,32(sp) + gs.clut_y = MEMCARD_BLOCK_CLUT_Y + y_clut_offset + (ptrBlockData->Slot << 4); +80025674: afa60024 sw a2,36(sp) + gs.clut_w = MEMCARD_BLOCK_CLUT_W; +80025678: afb60028 sw s6,40(sp) + gs.clut_h = MEMCARD_BLOCK_CLUT_H; + + dprintf("Gs Clut = {%d,%d,%d,%d}\n", +8002567c: 0c00ed8f jal 8003b63c <printf> +80025680: 3c110fff lui s1,0xfff + gs.clut_y, + gs.clut_w, + gs.clut_h ); + + x_block_offset = MEMCARD_BLOCK_IMAGE_W * (ptrBlockData->Block - 1); + x_block_offset *= MEMCARD_BLOCK_MAX_ICONS; +80025684: 8e020004 lw v0,4(s0) +80025688: 3631ffff ori s1,s1,0xffff +8002568c: 00511021 addu v0,v0,s1 +80025690: 00021900 sll v1,v0,0x4 +80025694: 00021180 sll v0,v0,0x6 +80025698: 00431023 subu v0,v0,v1 +8002569c: 00021400 sll v0,v0,0x10 +800256a0: 00021403 sra v0,v0,0x10 + x_block_offset >>= MEMCARD_BLOCK_IMAGE_W_BITSHIFT; + x_block_offset += i<<MEMCARD_BLOCK_IMAGE_W_BITSHIFT; +800256a4: 00151880 sll v1,s5,0x2 +800256a8: 00021083 sra v0,v0,0x2 + + gs.x = MEMCARD_BLOCK_IMAGE_X + x_block_offset; +800256ac: 00621021 addu v0,v1,v0 +800256b0: 24420300 addiu v0,v0,768 +800256b4: afa20030 sw v0,48(sp) + gs.y = MEMCARD_BLOCK_IMAGE_Y + (MEMCARD_BLOCK_IMAGE_H * ptrBlockData->Slot); +800256b8: 8e020000 lw v0,0(s0) + gs.h = MEMCARD_BLOCK_IMAGE_H; + + gs.clut_data = (uint8_t*)ptrBlockData->CLUT[i]; + gs.data = (uint8_t*)ptrBlockData->Icons[i]; + + GsUploadImage(&gs); +800256bc: 27a40018 addiu a0,sp,24 + x_block_offset *= MEMCARD_BLOCK_MAX_ICONS; + x_block_offset >>= MEMCARD_BLOCK_IMAGE_W_BITSHIFT; + x_block_offset += i<<MEMCARD_BLOCK_IMAGE_W_BITSHIFT; + + gs.x = MEMCARD_BLOCK_IMAGE_X + x_block_offset; + gs.y = MEMCARD_BLOCK_IMAGE_Y + (MEMCARD_BLOCK_IMAGE_H * ptrBlockData->Slot); +800256c0: 24420016 addiu v0,v0,22 +800256c4: 00021100 sll v0,v0,0x4 +800256c8: afa20034 sw v0,52(sp) + + // Dimensions are 16x16 px, but since 4bpp is used, it actually + // takes 4x16 px on the framebuffer. + gs.w = MEMCARD_BLOCK_IMAGE_W >> MEMCARD_BLOCK_IMAGE_W_BITSHIFT; +800256cc: 24020004 li v0,4 +800256d0: afa20038 sw v0,56(sp) + gs.h = MEMCARD_BLOCK_IMAGE_H; + + gs.clut_data = (uint8_t*)ptrBlockData->CLUT[i]; +800256d4: 26a2000d addiu v0,s5,13 +800256d8: 00021140 sll v0,v0,0x5 +800256dc: 02021021 addu v0,s0,v0 +800256e0: 24420004 addiu v0,v0,4 +800256e4: afa20040 sw v0,64(sp) + gs.data = (uint8_t*)ptrBlockData->Icons[i]; +800256e8: 001511c0 sll v0,s5,0x7 +800256ec: 02021021 addu v0,s0,v0 +800256f0: 24420024 addiu v0,v0,36 + gs.y = MEMCARD_BLOCK_IMAGE_Y + (MEMCARD_BLOCK_IMAGE_H * ptrBlockData->Slot); + + // Dimensions are 16x16 px, but since 4bpp is used, it actually + // takes 4x16 px on the framebuffer. + gs.w = MEMCARD_BLOCK_IMAGE_W >> MEMCARD_BLOCK_IMAGE_W_BITSHIFT; + gs.h = MEMCARD_BLOCK_IMAGE_H; +800256f4: afb6003c sw s6,60(sp) + + gs.clut_data = (uint8_t*)ptrBlockData->CLUT[i]; + gs.data = (uint8_t*)ptrBlockData->Icons[i]; + + GsUploadImage(&gs); +800256f8: 0c00be55 jal 8002f954 <GsUploadImage> +800256fc: afa20044 sw v0,68(sp) + + if(i == 0) +80025700: 16a00042 bnez s5,8002580c <MemCardUploadToGPU+0x250> +80025704: 00000000 nop + { + ptrBlockData->IconTPoly.attribute = COLORMODE(COLORMODE_4BPP); + ptrBlockData->IconTPoly.tpage = (gs.x / 64) + ((gs.y/256)*16); +80025708: 8fa20034 lw v0,52(sp) +8002570c: 8fa30030 lw v1,48(sp) +80025710: 00022fc3 sra a1,v0,0x1f +80025714: 30a500ff andi a1,a1,0xff +80025718: 00a22821 addu a1,a1,v0 +8002571c: 00052a03 sra a1,a1,0x8 +80025720: 00051100 sll v0,a1,0x4 +80025724: 00032fc3 sra a1,v1,0x1f +80025728: 30a5003f andi a1,a1,0x3f +8002572c: 00a32821 addu a1,a1,v1 +80025730: 00052983 sra a1,a1,0x6 +80025734: 00452821 addu a1,v0,a1 +80025738: 30a500ff andi a1,a1,0xff +8002573c: a2050220 sb a1,544(s0) + + dprintf("\tTPAGE = %d\n", ptrBlockData->IconTPoly.tpage); +80025740: 02602021 move a0,s3 +80025744: 0c00ed8f jal 8003b63c <printf> +80025748: ae00022c sw zero,556(s0) + + x_block_offset = MEMCARD_BLOCK_IMAGE_W * (ptrBlockData->Block - 1); + x_block_offset *= MEMCARD_BLOCK_MAX_ICONS; + + ptrBlockData->IconTPoly.u[0] = MEMCARD_BLOCK_IMAGE_X + x_block_offset; +8002574c: 8e070004 lw a3,4(s0) + ptrBlockData->IconTPoly.u[1] = ptrBlockData->IconTPoly.u[0] + (gs.w << 2); +80025750: 8fa60038 lw a2,56(sp) + dprintf("\tTPAGE = %d\n", ptrBlockData->IconTPoly.tpage); + + x_block_offset = MEMCARD_BLOCK_IMAGE_W * (ptrBlockData->Block - 1); + x_block_offset *= MEMCARD_BLOCK_MAX_ICONS; + + ptrBlockData->IconTPoly.u[0] = MEMCARD_BLOCK_IMAGE_X + x_block_offset; +80025754: 00f18821 addu s1,a3,s1 +80025758: 00113900 sll a3,s1,0x4 +8002575c: 00118980 sll s1,s1,0x6 +80025760: 02273823 subu a3,s1,a3 +80025764: 30e700ff andi a3,a3,0xff + ptrBlockData->IconTPoly.u[1] = ptrBlockData->IconTPoly.u[0] + (gs.w << 2); +80025768: 00063080 sll a2,a2,0x2 +8002576c: 00e63021 addu a2,a3,a2 +80025770: 30c600ff andi a2,a2,0xff + dprintf("\tTPAGE = %d\n", ptrBlockData->IconTPoly.tpage); + + x_block_offset = MEMCARD_BLOCK_IMAGE_W * (ptrBlockData->Block - 1); + x_block_offset *= MEMCARD_BLOCK_MAX_ICONS; + + ptrBlockData->IconTPoly.u[0] = MEMCARD_BLOCK_IMAGE_X + x_block_offset; +80025774: a2070221 sb a3,545(s0) + ptrBlockData->IconTPoly.u[1] = ptrBlockData->IconTPoly.u[0] + (gs.w << 2); +80025778: a2060222 sb a2,546(s0) + ptrBlockData->IconTPoly.u[2] = ptrBlockData->IconTPoly.u[0]; +8002577c: a2070223 sb a3,547(s0) + ptrBlockData->IconTPoly.u[3] = ptrBlockData->IconTPoly.u[1]; +80025780: a2060224 sb a2,548(s0) + + dprintf("\tu = {%d, %d, %d, %d}\n", +80025784: 00e02821 move a1,a3 +80025788: afa60010 sw a2,16(sp) +8002578c: 0c00ed8f jal 8003b63c <printf> +80025790: 26840ae8 addiu a0,s4,2792 + ptrBlockData->IconTPoly.u[0], + ptrBlockData->IconTPoly.u[1], + ptrBlockData->IconTPoly.u[2], + ptrBlockData->IconTPoly.u[3]); + + ptrBlockData->IconTPoly.v[0] = gs.y % 256; +80025794: 8fa60034 lw a2,52(sp) +80025798: 24020100 li v0,256 +8002579c: 14400002 bnez v0,800257a8 <MemCardUploadToGPU+0x1ec> +800257a0: 00c2001a div zero,a2,v0 +800257a4: 0007000d break 0x7 + ptrBlockData->IconTPoly.v[1] = ptrBlockData->IconTPoly.v[0]; + ptrBlockData->IconTPoly.v[2] = (gs.y % 256) + (gs.h); +800257a8: 8fa7003c lw a3,60(sp) + ptrBlockData->IconTPoly.v[3] = ptrBlockData->IconTPoly.v[2]; + + dprintf("\tu = {%d, %d, %d, %d}\n", +800257ac: 26840ae8 addiu a0,s4,2792 + ptrBlockData->IconTPoly.u[0], + ptrBlockData->IconTPoly.u[1], + ptrBlockData->IconTPoly.u[2], + ptrBlockData->IconTPoly.u[3]); + + ptrBlockData->IconTPoly.v[0] = gs.y % 256; +800257b0: 00003010 mfhi a2 +800257b4: 30c200ff andi v0,a2,0xff + ptrBlockData->IconTPoly.v[1] = ptrBlockData->IconTPoly.v[0]; + ptrBlockData->IconTPoly.v[2] = (gs.y % 256) + (gs.h); +800257b8: 00473821 addu a3,v0,a3 +800257bc: 30e700ff andi a3,a3,0xff +800257c0: 30c600ff andi a2,a2,0xff + ptrBlockData->IconTPoly.v[3] = ptrBlockData->IconTPoly.v[2]; + + dprintf("\tu = {%d, %d, %d, %d}\n", +800257c4: 00c02821 move a1,a2 + ptrBlockData->IconTPoly.u[0], + ptrBlockData->IconTPoly.u[1], + ptrBlockData->IconTPoly.u[2], + ptrBlockData->IconTPoly.u[3]); + + ptrBlockData->IconTPoly.v[0] = gs.y % 256; +800257c8: a2020225 sb v0,549(s0) + ptrBlockData->IconTPoly.v[1] = ptrBlockData->IconTPoly.v[0]; +800257cc: a2020226 sb v0,550(s0) + ptrBlockData->IconTPoly.v[2] = (gs.y % 256) + (gs.h); +800257d0: a2070227 sb a3,551(s0) + ptrBlockData->IconTPoly.v[3] = ptrBlockData->IconTPoly.v[2]; +800257d4: a2070228 sb a3,552(s0) + + dprintf("\tu = {%d, %d, %d, %d}\n", +800257d8: 0c00ed8f jal 8003b63c <printf> +800257dc: afa70010 sw a3,16(sp) + + ptrBlockData->IconTPoly.r = NORMAL_LUMINANCE; + ptrBlockData->IconTPoly.g = NORMAL_LUMINANCE; + ptrBlockData->IconTPoly.b = NORMAL_LUMINANCE; + + ptrBlockData->IconTPoly.cx = gs.clut_x; +800257e0: 87a50020 lh a1,32(sp) + ptrBlockData->IconTPoly.cy = gs.clut_y; +800257e4: 87a60024 lh a2,36(sp) + ptrBlockData->IconTPoly.v[0], + ptrBlockData->IconTPoly.v[1], + ptrBlockData->IconTPoly.v[2], + ptrBlockData->IconTPoly.v[3]); + + ptrBlockData->IconTPoly.r = NORMAL_LUMINANCE; +800257e8: 2402ff80 li v0,-128 + ptrBlockData->IconTPoly.b = NORMAL_LUMINANCE; + + ptrBlockData->IconTPoly.cx = gs.clut_x; + ptrBlockData->IconTPoly.cy = gs.clut_y; + + dprintf("\tclut = {%d, %d}\n", +800257ec: 3c048004 lui a0,0x8004 + ptrBlockData->IconTPoly.v[0], + ptrBlockData->IconTPoly.v[1], + ptrBlockData->IconTPoly.v[2], + ptrBlockData->IconTPoly.v[3]); + + ptrBlockData->IconTPoly.r = NORMAL_LUMINANCE; +800257f0: a2020218 sb v0,536(s0) + ptrBlockData->IconTPoly.g = NORMAL_LUMINANCE; +800257f4: a2020219 sb v0,537(s0) + ptrBlockData->IconTPoly.b = NORMAL_LUMINANCE; +800257f8: a202021a sb v0,538(s0) + + ptrBlockData->IconTPoly.cx = gs.clut_x; +800257fc: a605021c sh a1,540(s0) + ptrBlockData->IconTPoly.cy = gs.clut_y; +80025800: a606021e sh a2,542(s0) + + dprintf("\tclut = {%d, %d}\n", +80025804: 0c00ed8f jal 8003b63c <printf> +80025808: 24840b00 addiu a0,a0,2816 + { + dprintf("Invalid number of icons.\n"); + return false; + } + + for(i = 0; i < ptrBlockData->IconNumber; i++) +8002580c: 26b50001 addiu s5,s5,1 +80025810: 32b500ff andi s5,s5,0xff +80025814: 92020008 lbu v0,8(s0) +80025818: 00000000 nop +8002581c: 02a2102b sltu v0,s5,v0 +80025820: 1440ff82 bnez v0,8002562c <MemCardUploadToGPU+0x70> +80025824: 24030001 li v1,1 + ptrBlockData->IconTPoly.cx, + ptrBlockData->IconTPoly.cy); + } + } + + return true; +80025828: 24020001 li v0,1 +} +8002582c: 8fbf0064 lw ra,100(sp) +80025830: 8fb60060 lw s6,96(sp) +80025834: 8fb5005c lw s5,92(sp) +80025838: 8fb40058 lw s4,88(sp) +8002583c: 8fb30054 lw s3,84(sp) +80025840: 8fb20050 lw s2,80(sp) +80025844: 8fb1004c lw s1,76(sp) +80025848: 8fb00048 lw s0,72(sp) +8002584c: 03e00008 jr ra +80025850: 27bd0068 addiu sp,sp,104 + +80025854 <MemCardGetBlockInfo>: +} + +bool MemCardGetBlockInfo( TYPE_BLOCK_DATA * ptrBlockData, + MEMCARD_SLOTS slot, + MEMCARD_BLOCKS blockNumber ) +{ +80025854: 27bdffd0 addiu sp,sp,-48 +80025858: afbf002c sw ra,44(sp) +8002585c: afb20018 sw s2,24(sp) +80025860: afb10014 sw s1,20(sp) +80025864: 00a09021 move s2,a1 +80025868: 00c08821 move s1,a2 +8002586c: afb00010 sw s0,16(sp) +80025870: afb60028 sw s6,40(sp) +80025874: 00808021 move s0,a0 +80025878: afb50024 sw s5,36(sp) +8002587c: afb40020 sw s4,32(sp) + MemCardResetBlockData(ptrBlockData); +80025880: 0c009560 jal 80025580 <MemCardResetBlockData> +80025884: afb3001c sw s3,28(sp) + + ptrBlockData->Slot = slot; + ptrBlockData->Block = blockNumber; + + dprintf("MemCardGetBlockStateFileName...\n"); +80025888: 3c048004 lui a0,0x8004 + MEMCARD_SLOTS slot, + MEMCARD_BLOCKS blockNumber ) +{ + MemCardResetBlockData(ptrBlockData); + + ptrBlockData->Slot = slot; +8002588c: ae120000 sw s2,0(s0) + ptrBlockData->Block = blockNumber; +80025890: ae110004 sw s1,4(s0) + + dprintf("MemCardGetBlockStateFileName...\n"); +80025894: 0c00ed8f jal 8003b63c <printf> +80025898: 24840b14 addiu a0,a0,2836 + +bool MemCardGetBlockStateFileName(TYPE_BLOCK_DATA * ptrBlockData) +{ + int sector = ptrBlockData->Block; + + memset(DataBuffer, 0, MEMCARD_SECTOR_SIZE); +8002589c: 3c118004 lui s1,0x8004 + return true; +} + +bool MemCardGetBlockStateFileName(TYPE_BLOCK_DATA * ptrBlockData) +{ + int sector = ptrBlockData->Block; +800258a0: 8e120004 lw s2,4(s0) + + memset(DataBuffer, 0, MEMCARD_SECTOR_SIZE); +800258a4: 00002821 move a1,zero +800258a8: 26245e20 addiu a0,s1,24096 +800258ac: 0c00d7ab jal 80035eac <memset> +800258b0: 24060080 li a2,128 + + if(MemCardReadSector(ptrBlockData, sector) == false) +800258b4: 02402821 move a1,s2 +800258b8: 0c00947d jal 800251f4 <MemCardReadSector> +800258bc: 02002021 move a0,s0 +800258c0: 104000a4 beqz v0,80025b54 <MemCardGetBlockInfo+0x300> +800258c4: 3c048004 lui a0,0x8004 + { + return false; + } + + // 00h-03h Block Allocation State + dprintf("Block %d, slot %d, allocation state: 0x%02X.\n", +800258c8: 92275e20 lbu a3,24096(s1) +800258cc: 8e060000 lw a2,0(s0) +800258d0: 8e050004 lw a1,4(s0) +800258d4: 24840b38 addiu a0,a0,2872 +800258d8: 0c00ed8f jal 8003b63c <printf> +800258dc: 00409821 move s3,v0 + * 000000A3h - Free ;deleted (last block of file) */ + + // Always take into account memory card data is little-endian, + // so if using a hex editor, you will read 51000000h. + + switch(DataBuffer[0]) +800258e0: 92225e20 lbu v0,24096(s1) +800258e4: 24030053 li v1,83 +800258e8: 10430012 beq v0,v1,80025934 <MemCardGetBlockInfo+0xe0> +800258ec: 2c430054 sltiu v1,v0,84 +800258f0: 10600007 beqz v1,80025910 <MemCardGetBlockInfo+0xbc> +800258f4: 24030051 li v1,81 +800258f8: 1043000c beq v0,v1,8002592c <MemCardGetBlockInfo+0xd8> +800258fc: 24030052 li v1,82 +80025900: 14430021 bne v0,v1,80025988 <MemCardGetBlockInfo+0x134> +80025904: 24020002 li v0,2 + case 0x52: + ptrBlockData->BlockCount = INTERMEDIATE_BLOCK; + break; + + case 0x53: + ptrBlockData->BlockCount = LAST_BLOCK; +80025908: 1000000c b 8002593c <MemCardGetBlockInfo+0xe8> +8002590c: ae020020 sw v0,32(s0) + * 000000A3h - Free ;deleted (last block of file) */ + + // Always take into account memory card data is little-endian, + // so if using a hex editor, you will read 51000000h. + + switch(DataBuffer[0]) +80025910: 2442ff60 addiu v0,v0,-160 +80025914: 24030003 li v1,3 +80025918: 0062102b sltu v0,v1,v0 +8002591c: 1440001b bnez v0,8002598c <MemCardGetBlockInfo+0x138> +80025920: 3c048004 lui a0,0x8004 + break; + case 0xA0: + case 0xA1: + case 0xA2: + case 0xA3: + ptrBlockData->BlockCount = EMPTY_BLOCK; +80025924: 1000001b b 80025994 <MemCardGetBlockInfo+0x140> +80025928: ae000020 sw zero,32(s0) + // so if using a hex editor, you will read 51000000h. + + switch(DataBuffer[0]) + { + case 0x51: + ptrBlockData->BlockCount = FIRST_OR_ONLY_BLOCK; +8002592c: 10000002 b 80025938 <MemCardGetBlockInfo+0xe4> +80025930: 24020001 li v0,1 + case 0x52: + ptrBlockData->BlockCount = INTERMEDIATE_BLOCK; + break; + + case 0x53: + ptrBlockData->BlockCount = LAST_BLOCK; +80025934: 24020003 li v0,3 +80025938: ae020020 sw v0,32(s0) + } + + // 0Ah-1Eh Filename in ASCII, terminated by 00h (max 20 chars, plus ending 00h) + // File name is only defined on first block of group (allocation state == 0x51) + + if(ptrBlockData->BlockCount == FIRST_OR_ONLY_BLOCK) +8002593c: 8e030020 lw v1,32(s0) +80025940: 24020001 li v0,1 +80025944: 14620013 bne v1,v0,80025994 <MemCardGetBlockInfo+0x140> +80025948: 26120009 addiu s2,s0,9 + { + memset(ptrBlockData->FileName, 0 , MEMCARD_FILENAME_SIZE); +8002594c: 02402021 move a0,s2 +80025950: 24060015 li a2,21 +80025954: 0c00d7ab jal 80035eac <memset> +80025958: 00002821 move a1,zero + + memcpy(ptrBlockData->FileName, &DataBuffer[0x0A], MEMCARD_FILENAME_SIZE); +8002595c: 3c058004 lui a1,0x8004 +80025960: 02402021 move a0,s2 +80025964: 24060015 li a2,21 +80025968: 0c00d75e jal 80035d78 <memcpy> +8002596c: 24a55e2a addiu a1,a1,24106 + + dprintf("File name: %s\n", ptrBlockData->FileName); +80025970: 3c048004 lui a0,0x8004 +80025974: 02402821 move a1,s2 +80025978: 0c00ed8f jal 8003b63c <printf> +8002597c: 24840b8c addiu a0,a0,2956 +80025980: 10000004 b 80025994 <MemCardGetBlockInfo+0x140> +80025984: 00000000 nop + case 0xA2: + case 0xA3: + ptrBlockData->BlockCount = EMPTY_BLOCK; + return true; + default: + printf("Invalid block allocation state!\n"); +80025988: 3c048004 lui a0,0x8004 +8002598c: 1000001d b 80025a04 <MemCardGetBlockInfo+0x1b0> +80025990: 24840b68 addiu a0,a0,2920 + if(MemCardGetBlockStateFileName(ptrBlockData) == false) + { + return false; + } + + if(ptrBlockData->BlockCount == EMPTY_BLOCK) +80025994: 8e020020 lw v0,32(s0) +80025998: 00000000 nop +8002599c: 104000bc beqz v0,80025c90 <MemCardGetBlockInfo+0x43c> +800259a0: 3c048004 lui a0,0x8004 + { + // Stop looking for any other data. + return true; + } + + dprintf("MemCardGetInitialFrameInfo...\n"); +800259a4: 0c00ed8f jal 8003b63c <printf> +800259a8: 24840b9c addiu a0,a0,2972 +bool MemCardGetInitialFrameInfo(TYPE_BLOCK_DATA * ptrBlockData) +{ + unsigned int i; + int sector = ptrBlockData->Block << MEMCARD_SECTORS_PER_BLOCK_BITSHIFT; + + if(ptrBlockData->BlockCount != FIRST_OR_ONLY_BLOCK) +800259ac: 8e140020 lw s4,32(s0) +800259b0: 24020001 li v0,1 +800259b4: 12820017 beq s4,v0,80025a14 <MemCardGetBlockInfo+0x1c0> +800259b8: 00002821 move a1,zero + if(MemCardGetInitialFrameInfo(ptrBlockData) == false) + { + return false; + } + + dprintf("MemCardGetIconFrameInfo...\n"); +800259bc: 3c048004 lui a0,0x8004 +800259c0: 0c00ed8f jal 8003b63c <printf> +800259c4: 24840ce4 addiu a0,a0,3300 + unsigned int i; + unsigned int j; + uint8_t buffer_contents; + static TYPE_BLOCK_DATA * ptrReferenceBlock = NULL; + + switch(ptrBlockData->BlockCount) +800259c8: 8e020020 lw v0,32(s0) +800259cc: 24030001 li v1,1 +800259d0: 10430083 beq v0,v1,80025be0 <MemCardGetBlockInfo+0x38c> +800259d4: 24120001 li s2,1 +800259d8: 1040009f beqz v0,80025c58 <MemCardGetBlockInfo+0x404> +800259dc: 2c420004 sltiu v0,v0,4 +800259e0: 1040007d beqz v0,80025bd8 <MemCardGetBlockInfo+0x384> +800259e4: 3c048004 lui a0,0x8004 + return true; + + case INTERMEDIATE_BLOCK: + case LAST_BLOCK: + + if(ptrReferenceBlock == NULL) +800259e8: 3c128007 lui s2,0x8007 +800259ec: 8e421c44 lw v0,7236(s2) +800259f0: 00000000 nop +800259f4: 14400059 bnez v0,80025b5c <MemCardGetBlockInfo+0x308> +800259f8: 261401a4 addiu s4,s0,420 + { + dprintf("No reference memory card block found yet!\n"); +800259fc: 3c048004 lui a0,0x8004 +80025a00: 24840c28 addiu a0,a0,3112 + ptrReferenceBlock = ptrBlockData; + + return true; + } + + dprintf("Unknown error from MemCardGetIconFrameInfo()!\n"); +80025a04: 0c00ed8f jal 8003b63c <printf> +80025a08: 00009821 move s3,zero +80025a0c: 100000a0 b 80025c90 <MemCardGetBlockInfo+0x43c> +80025a10: 00000000 nop +} + +bool MemCardGetInitialFrameInfo(TYPE_BLOCK_DATA * ptrBlockData) +{ + unsigned int i; + int sector = ptrBlockData->Block << MEMCARD_SECTORS_PER_BLOCK_BITSHIFT; +80025a14: 8e120004 lw s2,4(s0) + + // Pretty silly operation (TITLE_FRAME = 0), but used for + // conceptual purposes and better understanding. + sector += TITLE_FRAME; + + memset(DataBuffer, 0, MEMCARD_SECTOR_SIZE); +80025a18: 26245e20 addiu a0,s1,24096 +80025a1c: 0c00d7ab jal 80035eac <memset> +80025a20: 24060080 li a2,128 + + if(MemCardReadSector(ptrBlockData, sector) == false) +80025a24: 00122980 sll a1,s2,0x6 +80025a28: 02002021 move a0,s0 +80025a2c: 0c00947d jal 800251f4 <MemCardReadSector> +80025a30: 3c138004 lui s3,0x8004 +80025a34: 10400047 beqz v0,80025b54 <MemCardGetBlockInfo+0x300> +80025a38: 26725e20 addiu s2,s3,24096 + { + return false; + } + + dprintf("Magic number: '%c' '%c'\n",DataBuffer[0], DataBuffer[1]); +80025a3c: 92460001 lbu a2,1(s2) +80025a40: 92655e20 lbu a1,24096(s3) +80025a44: 3c048004 lui a0,0x8004 +80025a48: 0c00ed8f jal 8003b63c <printf> +80025a4c: 24840bbc addiu a0,a0,3004 + + if(DataBuffer[0] != 'S' || DataBuffer[1] != 'C') +80025a50: 92635e20 lbu v1,24096(s3) +80025a54: 24020053 li v0,83 +80025a58: 14620005 bne v1,v0,80025a70 <MemCardGetBlockInfo+0x21c> +80025a5c: 24020043 li v0,67 +80025a60: 92430001 lbu v1,1(s2) +80025a64: 00000000 nop +80025a68: 10620006 beq v1,v0,80025a84 <MemCardGetBlockInfo+0x230> +80025a6c: 24030012 li v1,18 + { + // Invalid magic number. + dprintf("Invalid magic number extracted from slot %d, block %d.\n", +80025a70: 3c048004 lui a0,0x8004 +80025a74: 8e060004 lw a2,4(s0) +80025a78: 8e050000 lw a1,0(s0) +80025a7c: 10000033 b 80025b4c <MemCardGetBlockInfo+0x2f8> +80025a80: 24840bd8 addiu a0,a0,3032 + 11h...Icon has 1 frame (static) (same image shown forever) + 12h...Icon has 2 frames (animated) (changes every 16 PAL frames) + 13h...Icon has 3 frames (animated) (changes every 11 PAL frames) + * */ + + switch(DataBuffer[2]) +80025a84: 92420002 lbu v0,2(s2) +80025a88: 00000000 nop +80025a8c: 10430007 beq v0,v1,80025aac <MemCardGetBlockInfo+0x258> +80025a90: 24030013 li v1,19 +80025a94: 10430007 beq v0,v1,80025ab4 <MemCardGetBlockInfo+0x260> +80025a98: 24030011 li v1,17 +80025a9c: 1443007c bne v0,v1,80025c90 <MemCardGetBlockInfo+0x43c> +80025aa0: 00009821 move s3,zero + { + case 0x11: + ptrBlockData->IconNumber = 1; +80025aa4: 10000005 b 80025abc <MemCardGetBlockInfo+0x268> +80025aa8: a2140008 sb s4,8(s0) + break; + + case 0x12: + ptrBlockData->IconNumber = 2; +80025aac: 10000002 b 80025ab8 <MemCardGetBlockInfo+0x264> +80025ab0: 24020002 li v0,2 + break; + + case 0x13: + ptrBlockData->IconNumber = 3; +80025ab4: 24020003 li v0,3 +80025ab8: a2020008 sb v0,8(s0) + // Invalid icon display flag! We can't know how many icons + // are used. + return false; + } + + dprintf("Number of icons: %d\n", ptrBlockData->IconNumber); +80025abc: 92050008 lbu a1,8(s0) +80025ac0: 3c048004 lui a0,0x8004 +80025ac4: 24840c10 addiu a0,a0,3088 +80025ac8: 0c00ed8f jal 8003b63c <printf> +80025acc: 3c148004 lui s4,0x8004 +80025ad0: 261301a4 addiu s3,s0,420 + + // 60h-7Fh Icon 16 Color Palette Data (each entry is 16bit CLUT) + + for(i = 0; i < ptrBlockData->IconNumber; i++) +80025ad4: 00009021 move s2,zero + { + memcpy(ptrBlockData->CLUT[i],&DataBuffer[0x60], MEMCARD_CLUT_SIZE); +80025ad8: 26945e80 addiu s4,s4,24192 + + dprintf("Number of icons: %d\n", ptrBlockData->IconNumber); + + // 60h-7Fh Icon 16 Color Palette Data (each entry is 16bit CLUT) + + for(i = 0; i < ptrBlockData->IconNumber; i++) +80025adc: 92020008 lbu v0,8(s0) +80025ae0: 00000000 nop +80025ae4: 0242102b sltu v0,s2,v0 +80025ae8: 1040ffb4 beqz v0,800259bc <MemCardGetBlockInfo+0x168> +80025aec: 24060020 li a2,32 + { + memcpy(ptrBlockData->CLUT[i],&DataBuffer[0x60], MEMCARD_CLUT_SIZE); +80025af0: 02602021 move a0,s3 +80025af4: 0c00d75e jal 80035d78 <memcpy> +80025af8: 02802821 move a1,s4 + + dprintf("Number of icons: %d\n", ptrBlockData->IconNumber); + + // 60h-7Fh Icon 16 Color Palette Data (each entry is 16bit CLUT) + + for(i = 0; i < ptrBlockData->IconNumber; i++) +80025afc: 26520001 addiu s2,s2,1 +80025b00: 1000fff6 b 80025adc <MemCardGetBlockInfo+0x288> +80025b04: 26730020 addiu s3,s3,32 + { + dprintf("Could not read memory sector!\n"); + return false; + } + + memcpy(ptrBlockData->Icons[i - 1 /* ICON_FRAME_# - 1 */], DataBuffer, MEMCARD_SECTOR_SIZE); +80025b08: 26640024 addiu a0,s3,36 +80025b0c: 0c00d75e jal 80035d78 <memcpy> +80025b10: 02c02821 move a1,s6 + + // Icon Frame(s) (Block 1..15, Frame 1..3) (in first block of file only) + for(i = ICON_FRAME_1; i <= ptrBlockData->IconNumber; i++) + { + dprintf("\tIcon %d out of %d\n",i, ptrBlockData->IconNumber); + buffer_contents = 0; +80025b14: 00001821 move v1,zero + return false; + } + + memcpy(ptrBlockData->Icons[i - 1 /* ICON_FRAME_# - 1 */], DataBuffer, MEMCARD_SECTOR_SIZE); + + for(j = 0; j < MEMCARD_SECTOR_SIZE; j++) +80025b18: 00001021 move v0,zero +80025b1c: 24040080 li a0,128 + { + buffer_contents |= ptrBlockData->Icons[i - 1][j]; +80025b20: 02622821 addu a1,s3,v0 +80025b24: 90a50024 lbu a1,36(a1) + return false; + } + + memcpy(ptrBlockData->Icons[i - 1 /* ICON_FRAME_# - 1 */], DataBuffer, MEMCARD_SECTOR_SIZE); + + for(j = 0; j < MEMCARD_SECTOR_SIZE; j++) +80025b28: 24420001 addiu v0,v0,1 +80025b2c: 1444fffc bne v0,a0,80025b20 <MemCardGetBlockInfo+0x2cc> +80025b30: 00651825 or v1,v1,a1 + { + buffer_contents |= ptrBlockData->Icons[i - 1][j]; + } + + if(buffer_contents == 0) +80025b34: 14600044 bnez v1,80025c48 <MemCardGetBlockInfo+0x3f4> +80025b38: 26730080 addiu s3,s3,128 + { + // Icon buffer is empty! + dprintf("Invalid icon buffer for slot %d, block %d.\n", +80025b3c: 3c048004 lui a0,0x8004 +80025b40: 8e060004 lw a2,4(s0) +80025b44: 8e050000 lw a1,0(s0) +80025b48: 24840c88 addiu a0,a0,3208 +80025b4c: 0c00ed8f jal 8003b63c <printf> +80025b50: 00000000 nop + + dprintf("MemCardGetInitialFrameInfo...\n"); + + if(MemCardGetInitialFrameInfo(ptrBlockData) == false) + { + return false; +80025b54: 1000004e b 80025c90 <MemCardGetBlockInfo+0x43c> +80025b58: 00009821 move s3,zero + { + dprintf("No reference memory card block found yet!\n"); + return false; + } + + ptrBlockData->IconNumber = ptrReferenceBlock->IconNumber; +80025b5c: 90420008 lbu v0,8(v0) +80025b60: 00000000 nop +80025b64: a2020008 sb v0,8(s0) +80025b68: 26130024 addiu s3,s0,36 + + for(i = 0; i < MEMCARD_NUMBER_OF_ICONS; i++) +80025b6c: 00008821 move s1,zero +80025b70: 24150003 li s5,3 + { + memcpy(ptrBlockData->CLUT[i], ptrReferenceBlock->CLUT[i], MEMCARD_CLUT_SIZE); +80025b74: 2625000d addiu a1,s1,13 +80025b78: 8e421c44 lw v0,7236(s2) +80025b7c: 00052940 sll a1,a1,0x5 +80025b80: 00452821 addu a1,v0,a1 +80025b84: 02802021 move a0,s4 +80025b88: 24060020 li a2,32 +80025b8c: 0c00d75e jal 80035d78 <memcpy> +80025b90: 24a50004 addiu a1,a1,4 + memcpy(ptrBlockData->Icons[i], ptrReferenceBlock->Icons[i], MEMCARD_ICON_SIZE); +80025b94: 8e421c44 lw v0,7236(s2) +80025b98: 001129c0 sll a1,s1,0x7 +80025b9c: 00452821 addu a1,v0,a1 +80025ba0: 02602021 move a0,s3 +80025ba4: 24060080 li a2,128 +80025ba8: 24a50024 addiu a1,a1,36 +80025bac: 0c00d75e jal 80035d78 <memcpy> +80025bb0: 26310001 addiu s1,s1,1 +80025bb4: 26940020 addiu s4,s4,32 + return false; + } + + ptrBlockData->IconNumber = ptrReferenceBlock->IconNumber; + + for(i = 0; i < MEMCARD_NUMBER_OF_ICONS; i++) +80025bb8: 1635ffee bne s1,s5,80025b74 <MemCardGetBlockInfo+0x320> +80025bbc: 26730080 addiu s3,s3,128 + { + memcpy(ptrBlockData->CLUT[i], ptrReferenceBlock->CLUT[i], MEMCARD_CLUT_SIZE); + memcpy(ptrBlockData->Icons[i], ptrReferenceBlock->Icons[i], MEMCARD_ICON_SIZE); + } + + if(ptrBlockData->BlockCount == LAST_BLOCK) +80025bc0: 8e020020 lw v0,32(s0) +80025bc4: 00000000 nop +80025bc8: 14510023 bne v0,s1,80025c58 <MemCardGetBlockInfo+0x404> +80025bcc: 3c028007 lui v0,0x8007 + { + // Dereference pointer + ptrReferenceBlock = NULL; +80025bd0: 10000021 b 80025c58 <MemCardGetBlockInfo+0x404> +80025bd4: ac401c44 sw zero,7236(v0) + ptrReferenceBlock = ptrBlockData; + + return true; + } + + dprintf("Unknown error from MemCardGetIconFrameInfo()!\n"); +80025bd8: 1000ff8a b 80025a04 <MemCardGetBlockInfo+0x1b0> +80025bdc: 24840cb4 addiu a0,a0,3252 + return true; +} + +bool MemCardGetIconFrameInfo(TYPE_BLOCK_DATA * ptrBlockData) +{ + int initial_sector = ptrBlockData->Block << MEMCARD_SECTORS_PER_BLOCK_BITSHIFT; +80025be0: 8e150004 lw s5,4(s0) + case FIRST_OR_ONLY_BLOCK: + + // Icon Frame(s) (Block 1..15, Frame 1..3) (in first block of file only) + for(i = ICON_FRAME_1; i <= ptrBlockData->IconNumber; i++) + { + dprintf("\tIcon %d out of %d\n",i, ptrBlockData->IconNumber); +80025be4: 3c148004 lui s4,0x8004 + buffer_contents = 0; + sector = initial_sector + i; + memset(DataBuffer, 0, MEMCARD_SECTOR_SIZE * sizeof(uint8_t) ); +80025be8: 26315e20 addiu s1,s1,24096 + return true; +} + +bool MemCardGetIconFrameInfo(TYPE_BLOCK_DATA * ptrBlockData) +{ + int initial_sector = ptrBlockData->Block << MEMCARD_SECTORS_PER_BLOCK_BITSHIFT; +80025bec: 0015a980 sll s5,s5,0x6 +80025bf0: 02009821 move s3,s0 + case FIRST_OR_ONLY_BLOCK: + + // Icon Frame(s) (Block 1..15, Frame 1..3) (in first block of file only) + for(i = ICON_FRAME_1; i <= ptrBlockData->IconNumber; i++) + { + dprintf("\tIcon %d out of %d\n",i, ptrBlockData->IconNumber); +80025bf4: 26940c54 addiu s4,s4,3156 + { + dprintf("Could not read memory sector!\n"); + return false; + } + + memcpy(ptrBlockData->Icons[i - 1 /* ICON_FRAME_# - 1 */], DataBuffer, MEMCARD_SECTOR_SIZE); +80025bf8: 0220b021 move s6,s1 + + return true; + case FIRST_OR_ONLY_BLOCK: + + // Icon Frame(s) (Block 1..15, Frame 1..3) (in first block of file only) + for(i = ICON_FRAME_1; i <= ptrBlockData->IconNumber; i++) +80025bfc: 92060008 lbu a2,8(s0) +80025c00: 00000000 nop +80025c04: 00d2102b sltu v0,a2,s2 +80025c08: 14400011 bnez v0,80025c50 <MemCardGetBlockInfo+0x3fc> +80025c0c: 02402821 move a1,s2 + { + dprintf("\tIcon %d out of %d\n",i, ptrBlockData->IconNumber); +80025c10: 0c00ed8f jal 8003b63c <printf> +80025c14: 02802021 move a0,s4 + buffer_contents = 0; + sector = initial_sector + i; + memset(DataBuffer, 0, MEMCARD_SECTOR_SIZE * sizeof(uint8_t) ); +80025c18: 00002821 move a1,zero +80025c1c: 02202021 move a0,s1 +80025c20: 0c00d7ab jal 80035eac <memset> +80025c24: 24060080 li a2,128 + + if(MemCardReadSector(ptrBlockData, sector) == false) +80025c28: 02b22821 addu a1,s5,s2 +80025c2c: 0c00947d jal 800251f4 <MemCardReadSector> +80025c30: 02002021 move a0,s0 +80025c34: 1440ffb4 bnez v0,80025b08 <MemCardGetBlockInfo+0x2b4> +80025c38: 24060080 li a2,128 + { + dprintf("Could not read memory sector!\n"); +80025c3c: 3c048004 lui a0,0x8004 +80025c40: 1000ff70 b 80025a04 <MemCardGetBlockInfo+0x1b0> +80025c44: 24840c68 addiu a0,a0,3176 + + return true; + case FIRST_OR_ONLY_BLOCK: + + // Icon Frame(s) (Block 1..15, Frame 1..3) (in first block of file only) + for(i = ICON_FRAME_1; i <= ptrBlockData->IconNumber; i++) +80025c48: 1000ffec b 80025bfc <MemCardGetBlockInfo+0x3a8> +80025c4c: 26520001 addiu s2,s2,1 + return false; + } + } + + // Use current block as reference if file contains more than one block. + ptrReferenceBlock = ptrBlockData; +80025c50: 3c028007 lui v0,0x8007 +80025c54: ac501c44 sw s0,7236(v0) + } + + // We will not get any block data information, we are only interested + // in basic info. + + dprintf("MemCardUploadToGPU...\n"); +80025c58: 3c048004 lui a0,0x8004 +80025c5c: 0c00ed8f jal 8003b63c <printf> +80025c60: 24840d00 addiu a0,a0,3328 + { + return false; + } + + return true; +} +80025c64: 8fbf002c lw ra,44(sp) +80025c68: 8fb60028 lw s6,40(sp) +80025c6c: 8fb50024 lw s5,36(sp) +80025c70: 8fb40020 lw s4,32(sp) +80025c74: 8fb3001c lw s3,28(sp) +80025c78: 8fb20018 lw s2,24(sp) +80025c7c: 8fb10014 lw s1,20(sp) + // We will not get any block data information, we are only interested + // in basic info. + + dprintf("MemCardUploadToGPU...\n"); + + if(MemCardUploadToGPU(ptrBlockData) == false) +80025c80: 02002021 move a0,s0 + { + return false; + } + + return true; +} +80025c84: 8fb00010 lw s0,16(sp) + // We will not get any block data information, we are only interested + // in basic info. + + dprintf("MemCardUploadToGPU...\n"); + + if(MemCardUploadToGPU(ptrBlockData) == false) +80025c88: 0800956f j 800255bc <MemCardUploadToGPU> +80025c8c: 27bd0030 addiu sp,sp,48 + { + return false; + } + + return true; +} +80025c90: 8fbf002c lw ra,44(sp) +80025c94: 02601021 move v0,s3 +80025c98: 8fb60028 lw s6,40(sp) +80025c9c: 8fb50024 lw s5,36(sp) +80025ca0: 8fb40020 lw s4,32(sp) +80025ca4: 8fb3001c lw s3,28(sp) +80025ca8: 8fb20018 lw s2,24(sp) +80025cac: 8fb10014 lw s1,20(sp) +80025cb0: 8fb00010 lw s0,16(sp) +80025cb4: 03e00008 jr ra +80025cb8: 27bd0030 addiu sp,sp,48 + +80025cbc <MemCardGetAllData>: + + return true; +} + +bool MemCardGetAllData(void) +{ +80025cbc: 27bdffe8 addiu sp,sp,-24 +80025cc0: afbf0014 sw ra,20(sp) + uint8_t i; + uint8_t j; + + PadClearData(); +80025cc4: 0c009b84 jal 80026e10 <PadClearData> +80025cc8: 00000000 nop + + CurrentReadBlock = 0; +80025ccc: 3c028007 lui v0,0x8007 +80025cd0: a0401c4a sb zero,7242(v0) + + TotalBlocks = MEMCARD_BLOCKS_PER_CARD * MEMCARD_NUMBER_OF_SLOTS; +80025cd4: 2403001e li v1,30 +80025cd8: 3c028007 lui v0,0x8007 +80025cdc: a0431c4b sb v1,7243(v0) + + SmallFont.spr.r = 0; + SmallFont.spr.g = 0; + SmallFont.spr.b = 0; + + GfxSaveDisplayData(&SecondDisplay); +80025ce0: 3c048004 lui a0,0x8004 + + CurrentReadBlock = 0; + + TotalBlocks = MEMCARD_BLOCKS_PER_CARD * MEMCARD_NUMBER_OF_SLOTS; + + SmallFont.spr.r = 0; +80025ce4: 3c028007 lui v0,0x8007 +80025ce8: 24428d38 addiu v0,v0,-29384 + SmallFont.spr.g = 0; + SmallFont.spr.b = 0; + + GfxSaveDisplayData(&SecondDisplay); +80025cec: 24845de8 addiu a0,a0,24040 + + CurrentReadBlock = 0; + + TotalBlocks = MEMCARD_BLOCKS_PER_CARD * MEMCARD_NUMBER_OF_SLOTS; + + SmallFont.spr.r = 0; +80025cf0: a040000e sb zero,14(v0) + SmallFont.spr.g = 0; +80025cf4: a040000f sb zero,15(v0) + SmallFont.spr.b = 0; + + GfxSaveDisplayData(&SecondDisplay); +80025cf8: 0c009090 jal 80024240 <GfxSaveDisplayData> +80025cfc: a0400010 sb zero,16(v0) + + GfxSetGlobalLuminance(NORMAL_LUMINANCE); +80025d00: 0c00900b jal 8002402c <GfxSetGlobalLuminance> +80025d04: 24040080 li a0,128 + + // ISR_MemCardDataHandling draws a rectangle on top to show + // memory card loading progress. + + SetVBlankHandler(&ISR_MemCardDataHandling); +80025d08: 3c048002 lui a0,0x8002 +80025d0c: 0c00d35e jal 80034d78 <SetVBlankHandler> +80025d10: 248452dc addiu a0,a0,21212 +80025d14: 1000ffff b 80025d14 <MemCardGetAllData+0x58> +80025d18: 00000000 nop + +80025d1c <MemCardHandler>: + + return true; +} + +void MemCardHandler(void) +{ +80025d1c: 27bdffe8 addiu sp,sp,-24 +80025d20: afbf0014 sw ra,20(sp) + +void MemCardIconIndexHandler(void) +{ + static uint8_t iconTimer = 0; + + if(System100msTick() == true) +80025d24: 0c009fba jal 80027ee8 <System100msTick> +80025d28: 00000000 nop +80025d2c: 10400016 beqz v0,80025d88 <MemCardHandler+0x6c> +80025d30: 3c038007 lui v1,0x8007 + { + if(++iconTimer >= MEMCARD_ICON_INDEX_TIME) +80025d34: 90621c40 lbu v0,7232(v1) +80025d38: 00000000 nop +80025d3c: 24420001 addiu v0,v0,1 +80025d40: 304200ff andi v0,v0,0xff +80025d44: 2c440004 sltiu a0,v0,4 +80025d48: 10800003 beqz a0,80025d58 <MemCardHandler+0x3c> +80025d4c: 00000000 nop +80025d50: 1000000d b 80025d88 <MemCardHandler+0x6c> +80025d54: a0621c40 sb v0,7232(v1) + { + iconTimer = 0; +80025d58: a0601c40 sb zero,7232(v1) + + if(++IconIndex >= MEMCARD_NUMBER_OF_ICONS) +80025d5c: 3c038007 lui v1,0x8007 +80025d60: 90621c54 lbu v0,7252(v1) +80025d64: 00000000 nop +80025d68: 24420001 addiu v0,v0,1 +80025d6c: 304200ff andi v0,v0,0xff +80025d70: 2c440003 sltiu a0,v0,3 +80025d74: 10800003 beqz a0,80025d84 <MemCardHandler+0x68> +80025d78: 00000000 nop +80025d7c: 10000002 b 80025d88 <MemCardHandler+0x6c> +80025d80: a0621c54 sb v0,7252(v1) + { + IconIndex = 0; +80025d84: a0601c54 sb zero,7252(v1) +} + +void MemCardHandler(void) +{ + MemCardIconIndexHandler(); +} +80025d88: 8fbf0014 lw ra,20(sp) +80025d8c: 00000000 nop +80025d90: 03e00008 jr ra +80025d94: 27bd0018 addiu sp,sp,24 + +80025d98 <MemCardDrawIcon>: + // Auxiliar variable to keep original data + short orig_u[4]; + short orig_clut_x; + static bool first_access = true; + + if(ptrBlockData->BlockCount == EMPTY_BLOCK) +80025d98: 8c820020 lw v0,32(a0) +80025d9c: 00000000 nop +80025da0: 1040007b beqz v0,80025f90 <MemCardDrawIcon+0x1f8> +80025da4: 00052c00 sll a1,a1,0x10 +80025da8: 00052c03 sra a1,a1,0x10 +80025dac: 00063400 sll a2,a2,0x10 + } + } +} + +void MemCardDrawIcon(TYPE_BLOCK_DATA * ptrBlockData, short x, short y) +{ +80025db0: 27bdffc8 addiu sp,sp,-56 +80025db4: 00063403 sra a2,a2,0x10 + { + return; + } + + ptrBlockData->IconTPoly.x[0] = x; + ptrBlockData->IconTPoly.x[1] = x + MEMCARD_BLOCK_IMAGE_W; +80025db8: 24a20010 addiu v0,a1,16 +80025dbc: 00021400 sll v0,v0,0x10 + } + } +} + +void MemCardDrawIcon(TYPE_BLOCK_DATA * ptrBlockData, short x, short y) +{ +80025dc0: afb10020 sw s1,32(sp) +80025dc4: afbf0034 sw ra,52(sp) +80025dc8: afb50030 sw s5,48(sp) +80025dcc: afb4002c sw s4,44(sp) +80025dd0: afb30028 sw s3,40(sp) +80025dd4: afb20024 sw s2,36(sp) +80025dd8: afb0001c sw s0,28(sp) + ptrBlockData->IconTPoly.x[0] = x; + ptrBlockData->IconTPoly.x[1] = x + MEMCARD_BLOCK_IMAGE_W; + ptrBlockData->IconTPoly.x[2] = x; + ptrBlockData->IconTPoly.x[3] = ptrBlockData->IconTPoly.x[1]; + + ptrBlockData->IconTPoly.y[0] = y; +80025ddc: a4860210 sh a2,528(a0) + ptrBlockData->IconTPoly.y[1] = ptrBlockData->IconTPoly.y[0]; +80025de0: a4860212 sh a2,530(a0) + ptrBlockData->IconTPoly.y[2] = y + MEMCARD_BLOCK_IMAGE_H; +80025de4: 24c60010 addiu a2,a2,16 + { + return; + } + + ptrBlockData->IconTPoly.x[0] = x; + ptrBlockData->IconTPoly.x[1] = x + MEMCARD_BLOCK_IMAGE_W; +80025de8: 00021403 sra v0,v0,0x10 + ptrBlockData->IconTPoly.x[2] = x; + ptrBlockData->IconTPoly.x[3] = ptrBlockData->IconTPoly.x[1]; + + ptrBlockData->IconTPoly.y[0] = y; + ptrBlockData->IconTPoly.y[1] = ptrBlockData->IconTPoly.y[0]; + ptrBlockData->IconTPoly.y[2] = y + MEMCARD_BLOCK_IMAGE_H; +80025dec: 00063400 sll a2,a2,0x10 +80025df0: 00063403 sra a2,a2,0x10 + { + return; + } + + ptrBlockData->IconTPoly.x[0] = x; + ptrBlockData->IconTPoly.x[1] = x + MEMCARD_BLOCK_IMAGE_W; +80025df4: a482020a sh v0,522(a0) + ptrBlockData->IconTPoly.x[2] = x; + ptrBlockData->IconTPoly.x[3] = ptrBlockData->IconTPoly.x[1]; +80025df8: a482020e sh v0,526(a0) + orig_u[i] = ptrBlockData->IconTPoly.u[i]; + } + + orig_clut_x = ptrBlockData->IconTPoly.cx; + + if(ptrBlockData->IconNumber >= IconIndex) +80025dfc: 3c028007 lui v0,0x8007 + ptrBlockData->IconTPoly.x[2] = x; + ptrBlockData->IconTPoly.x[3] = ptrBlockData->IconTPoly.x[1]; + + ptrBlockData->IconTPoly.y[0] = y; + ptrBlockData->IconTPoly.y[1] = ptrBlockData->IconTPoly.y[0]; + ptrBlockData->IconTPoly.y[2] = y + MEMCARD_BLOCK_IMAGE_H; +80025e00: a4860214 sh a2,532(a0) + ptrBlockData->IconTPoly.y[3] = ptrBlockData->IconTPoly.y[2]; +80025e04: a4860216 sh a2,534(a0) + orig_u[i] = ptrBlockData->IconTPoly.u[i]; + } + + orig_clut_x = ptrBlockData->IconTPoly.cx; + + if(ptrBlockData->IconNumber >= IconIndex) +80025e08: 90461c54 lbu a2,7252(v0) +80025e0c: 90820008 lbu v0,8(a0) + if(ptrBlockData->BlockCount == EMPTY_BLOCK) + { + return; + } + + ptrBlockData->IconTPoly.x[0] = x; +80025e10: a4850208 sh a1,520(a0) + orig_u[i] = ptrBlockData->IconTPoly.u[i]; + } + + orig_clut_x = ptrBlockData->IconTPoly.cx; + + if(ptrBlockData->IconNumber >= IconIndex) +80025e14: 0046102b sltu v0,v0,a2 + return; + } + + ptrBlockData->IconTPoly.x[0] = x; + ptrBlockData->IconTPoly.x[1] = x + MEMCARD_BLOCK_IMAGE_W; + ptrBlockData->IconTPoly.x[2] = x; +80025e18: a485020c sh a1,524(a0) + ptrBlockData->IconTPoly.y[2] = y + MEMCARD_BLOCK_IMAGE_H; + ptrBlockData->IconTPoly.y[3] = ptrBlockData->IconTPoly.y[2]; + + for(i = 0; i < 4; i++) + { + orig_u[i] = ptrBlockData->IconTPoly.u[i]; +80025e1c: 90920221 lbu s2,545(a0) +80025e20: 90950222 lbu s5,546(a0) +80025e24: 90940223 lbu s4,547(a0) +80025e28: 90930224 lbu s3,548(a0) + } + + orig_clut_x = ptrBlockData->IconTPoly.cx; +80025e2c: 8491021c lh s1,540(a0) + + if(ptrBlockData->IconNumber >= IconIndex) +80025e30: 1440000d bnez v0,80025e68 <MemCardDrawIcon+0xd0> +80025e34: 3c028004 lui v0,0x8004 + { + ptrBlockData->IconTPoly.u[0] += MEMCARD_BLOCK_IMAGE_W * IconIndex; +80025e38: 00061900 sll v1,a2,0x4 +80025e3c: 02431021 addu v0,s2,v1 +80025e40: 304200ff andi v0,v0,0xff + ptrBlockData->IconTPoly.u[1] = ptrBlockData->IconTPoly.u[0] + MEMCARD_BLOCK_IMAGE_W; +80025e44: 24450010 addiu a1,v0,16 +80025e48: 30a500ff andi a1,a1,0xff + ptrBlockData->IconTPoly.u[2] = ptrBlockData->IconTPoly.u[0]; + ptrBlockData->IconTPoly.u[3] = ptrBlockData->IconTPoly.u[1]; + + ptrBlockData->IconTPoly.cx += IconIndex * MEMCARD_BLOCK_CLUT_W; +80025e4c: 00711821 addu v1,v1,s1 + + orig_clut_x = ptrBlockData->IconTPoly.cx; + + if(ptrBlockData->IconNumber >= IconIndex) + { + ptrBlockData->IconTPoly.u[0] += MEMCARD_BLOCK_IMAGE_W * IconIndex; +80025e50: a0820221 sb v0,545(a0) + ptrBlockData->IconTPoly.u[1] = ptrBlockData->IconTPoly.u[0] + MEMCARD_BLOCK_IMAGE_W; +80025e54: a0850222 sb a1,546(a0) + ptrBlockData->IconTPoly.u[2] = ptrBlockData->IconTPoly.u[0]; +80025e58: a0820223 sb v0,547(a0) + ptrBlockData->IconTPoly.u[3] = ptrBlockData->IconTPoly.u[1]; +80025e5c: a0850224 sb a1,548(a0) + + ptrBlockData->IconTPoly.cx += IconIndex * MEMCARD_BLOCK_CLUT_W; +80025e60: a483021c sh v1,540(a0) + } + + if(first_access == true) +80025e64: 3c028004 lui v0,0x8004 +80025e68: 904314e8 lbu v1,5352(v0) +80025e6c: 00000000 nop +80025e70: 10600038 beqz v1,80025f54 <MemCardDrawIcon+0x1bc> +80025e74: 00808021 move s0,a0 + { + if(IconIndex == 0) +80025e78: 14c00036 bnez a2,80025f54 <MemCardDrawIcon+0x1bc> +80025e7c: 3c048004 lui a0,0x8004 + { + first_access = false; + + dprintf("Icon index: %d\n",IconIndex); +80025e80: 00002821 move a1,zero +80025e84: 24840d18 addiu a0,a0,3352 +80025e88: 0c00ed8f jal 8003b63c <printf> +80025e8c: a04014e8 sb zero,5352(v0) + + dprintf("\tU = {%d,%d,%d,%d}\n", +80025e90: 92020224 lbu v0,548(s0) +80025e94: 92070223 lbu a3,547(s0) +80025e98: 92060222 lbu a2,546(s0) +80025e9c: 92050221 lbu a1,545(s0) +80025ea0: 3c048004 lui a0,0x8004 +80025ea4: 24840d28 addiu a0,a0,3368 +80025ea8: 0c00ed8f jal 8003b63c <printf> +80025eac: afa20010 sw v0,16(sp) + ptrBlockData->IconTPoly.u[1], + ptrBlockData->IconTPoly.u[2], + ptrBlockData->IconTPoly.u[3]); + + + dprintf("\tV = {%d,%d,%d,%d}\n", +80025eb0: 92020228 lbu v0,552(s0) +80025eb4: 92070227 lbu a3,551(s0) +80025eb8: 92060226 lbu a2,550(s0) +80025ebc: 92050225 lbu a1,549(s0) +80025ec0: 3c048004 lui a0,0x8004 +80025ec4: 24840d3c addiu a0,a0,3388 +80025ec8: 0c00ed8f jal 8003b63c <printf> +80025ecc: afa20010 sw v0,16(sp) + ptrBlockData->IconTPoly.v[0], + ptrBlockData->IconTPoly.v[1], + ptrBlockData->IconTPoly.v[2], + ptrBlockData->IconTPoly.v[3]); + + dprintf("\tBlock number: %d\n",ptrBlockData->Block); +80025ed0: 8e050004 lw a1,4(s0) +80025ed4: 3c048004 lui a0,0x8004 +80025ed8: 0c00ed8f jal 8003b63c <printf> +80025edc: 24840d50 addiu a0,a0,3408 + + dprintf("\tBlock count: %d\n",ptrBlockData->BlockCount); +80025ee0: 8e050020 lw a1,32(s0) +80025ee4: 3c048004 lui a0,0x8004 +80025ee8: 0c00ed8f jal 8003b63c <printf> +80025eec: 24840d64 addiu a0,a0,3428 + + dprintf("\tX = {%d,%d,%d,%d}\n", +80025ef0: 8602020e lh v0,526(s0) +80025ef4: 8607020c lh a3,524(s0) +80025ef8: 8606020a lh a2,522(s0) +80025efc: 86050208 lh a1,520(s0) +80025f00: 3c048004 lui a0,0x8004 +80025f04: 24840d78 addiu a0,a0,3448 +80025f08: 0c00ed8f jal 8003b63c <printf> +80025f0c: afa20010 sw v0,16(sp) + ptrBlockData->IconTPoly.x[0], + ptrBlockData->IconTPoly.x[1], + ptrBlockData->IconTPoly.x[2], + ptrBlockData->IconTPoly.x[3]); + + dprintf("\tY = {%d,%d,%d,%d}\n", +80025f10: 86020216 lh v0,534(s0) +80025f14: 86060212 lh a2,530(s0) +80025f18: 86070214 lh a3,532(s0) +80025f1c: 86050210 lh a1,528(s0) +80025f20: 3c048004 lui a0,0x8004 +80025f24: 24840d8c addiu a0,a0,3468 +80025f28: 0c00ed8f jal 8003b63c <printf> +80025f2c: afa20010 sw v0,16(sp) + ptrBlockData->IconTPoly.y[0], + ptrBlockData->IconTPoly.y[1], + ptrBlockData->IconTPoly.y[2], + ptrBlockData->IconTPoly.y[3]); + + dprintf("\tTPAGE = %d\n", ptrBlockData->IconTPoly.tpage); +80025f30: 92050220 lbu a1,544(s0) +80025f34: 3c048004 lui a0,0x8004 +80025f38: 0c00ed8f jal 8003b63c <printf> +80025f3c: 24840ad8 addiu a0,a0,2776 + dprintf("\tCLUT = {%d, %d}\n", +80025f40: 3c048004 lui a0,0x8004 +80025f44: 8606021e lh a2,542(s0) +80025f48: 8605021c lh a1,540(s0) +80025f4c: 0c00ed8f jal 8003b63c <printf> +80025f50: 24840da0 addiu a0,a0,3488 + ptrBlockData->IconTPoly.cx, + ptrBlockData->IconTPoly.cy); + } + } + + GsSortTPoly4(&ptrBlockData->IconTPoly); +80025f54: 0c00b7fe jal 8002dff8 <GsSortTPoly4> +80025f58: 26040208 addiu a0,s0,520 + + for(i = 0; i < 4; i++) + { + ptrBlockData->IconTPoly.u[i] = orig_u[i]; // Restore data +80025f5c: a2120221 sb s2,545(s0) +80025f60: a2150222 sb s5,546(s0) +80025f64: a2140223 sb s4,547(s0) +80025f68: a2130224 sb s3,548(s0) + } + + ptrBlockData->IconTPoly.cx = orig_clut_x; +80025f6c: a611021c sh s1,540(s0) +} +80025f70: 8fbf0034 lw ra,52(sp) +80025f74: 8fb50030 lw s5,48(sp) +80025f78: 8fb4002c lw s4,44(sp) +80025f7c: 8fb30028 lw s3,40(sp) +80025f80: 8fb20024 lw s2,36(sp) +80025f84: 8fb10020 lw s1,32(sp) +80025f88: 8fb0001c lw s0,28(sp) +80025f8c: 27bd0038 addiu sp,sp,56 +80025f90: 03e00008 jr ra +80025f94: 00000000 nop + +80025f98 <MemCardShowMap>: + +TYPE_BLOCK_DATA * MemCardShowMap(void) +{ +80025f98: 27bdffe8 addiu sp,sp,-24 +80025f9c: afbf0014 sw ra,20(sp) + unsigned char orig_r; + unsigned char orig_g; + unsigned char orig_b; + GsRectangle MemCardMapDialog; + + if(MemCardGetAllData() == false) +80025fa0: 0c00972f jal 80025cbc <MemCardGetAllData> +80025fa4: 00000000 nop + +80025fa8 <MemCardSaveData>: + uint32_t sz; + int sector = (ptrBlockData->Block << MEMCARD_SECTORS_PER_BLOCK_BITSHIFT) + DATA_FRAME; + + // Always check whether current block is empty or not + + if(ptrBlockData->BlockCount != EMPTY_BLOCK) +80025fa8: 8c820020 lw v0,32(a0) + + return NULL; +} + +bool MemCardSaveData(TYPE_BLOCK_DATA * ptrBlockData) +{ +80025fac: 27bdffd8 addiu sp,sp,-40 +80025fb0: afbf0024 sw ra,36(sp) +80025fb4: afb30020 sw s3,32(sp) +80025fb8: afb2001c sw s2,28(sp) +80025fbc: afb10018 sw s1,24(sp) + uint32_t sz; + int sector = (ptrBlockData->Block << MEMCARD_SECTORS_PER_BLOCK_BITSHIFT) + DATA_FRAME; + + // Always check whether current block is empty or not + + if(ptrBlockData->BlockCount != EMPTY_BLOCK) +80025fc0: 1040000d beqz v0,80025ff8 <MemCardSaveData+0x50> +80025fc4: afb00014 sw s0,20(sp) + { + if(strncmp((char*)ptrBlockData->FileName, MEMCARD_GAME_FILENAME, MEMCARD_FILENAME_SIZE) != 0) +80025fc8: 3c058004 lui a1,0x8004 +80025fcc: 00808821 move s1,a0 + +bool MemCardSaveData(TYPE_BLOCK_DATA * ptrBlockData) +{ + uint32_t i; + uint32_t sz; + int sector = (ptrBlockData->Block << MEMCARD_SECTORS_PER_BLOCK_BITSHIFT) + DATA_FRAME; +80025fd0: 8c920004 lw s2,4(a0) + + // Always check whether current block is empty or not + + if(ptrBlockData->BlockCount != EMPTY_BLOCK) + { + if(strncmp((char*)ptrBlockData->FileName, MEMCARD_GAME_FILENAME, MEMCARD_FILENAME_SIZE) != 0) +80025fd4: 24060015 li a2,21 +80025fd8: 24a50db4 addiu a1,a1,3508 +80025fdc: 0c00d9dd jal 80036774 <strncmp> +80025fe0: 24840009 addiu a0,a0,9 +80025fe4: 1040000a beqz v0,80026010 <MemCardSaveData+0x68> +80025fe8: 00129180 sll s2,s2,0x6 + { + // Only our own blocks can be overwritten. NEVER overwrite other game blocks! + dprintf("I cannot erase blocks from other games!\n"); +80025fec: 3c048004 lui a0,0x8004 +80025ff0: 10000003 b 80026000 <MemCardSaveData+0x58> +80025ff4: 24840dc8 addiu a0,a0,3528 + return false; + } + } + else if(ptrBlockData->BlockCount != FIRST_OR_ONLY_BLOCK) + { + dprintf("Please select first block of block array.\n"); +80025ff8: 3c048004 lui a0,0x8004 +80025ffc: 24840df4 addiu a0,a0,3572 +80026000: 0c00ed8f jal 8003b63c <printf> +80026004: 00000000 nop + return false; +80026008: 1000000d b 80026040 <MemCardSaveData+0x98> +8002600c: 00001021 move v0,zero + +bool MemCardSaveData(TYPE_BLOCK_DATA * ptrBlockData) +{ + uint32_t i; + uint32_t sz; + int sector = (ptrBlockData->Block << MEMCARD_SECTORS_PER_BLOCK_BITSHIFT) + DATA_FRAME; +80026010: 26520004 addiu s2,s2,4 +80026014: 00008021 move s0,zero + + // After all these checks, now we can save data! + + sz = MEMCARD_FIRST_OR_LAST_DATA_SIZE; + + for(i = 0; i < sz; i++) +80026018: 24131e00 li s3,7680 + { + McWriteSector(ptrBlockData->Slot, sector + i, &ptrBlockData->Data[i << 7 /* 128 */]); +8002601c: 8e260204 lw a2,516(s1) +80026020: 001011c0 sll v0,s0,0x7 +80026024: 8e240000 lw a0,0(s1) +80026028: 02502821 addu a1,s2,s0 +8002602c: 00c23021 addu a2,a2,v0 +80026030: 0c00caf7 jal 80032bdc <McWriteSector> +80026034: 26100001 addiu s0,s0,1 + + // After all these checks, now we can save data! + + sz = MEMCARD_FIRST_OR_LAST_DATA_SIZE; + + for(i = 0; i < sz; i++) +80026038: 1613fff8 bne s0,s3,8002601c <MemCardSaveData+0x74> +8002603c: 24020001 li v0,1 + { + McWriteSector(ptrBlockData->Slot, sector + i, &ptrBlockData->Data[i << 7 /* 128 */]); + } + + return true; +} +80026040: 8fbf0024 lw ra,36(sp) +80026044: 8fb30020 lw s3,32(sp) +80026048: 8fb2001c lw s2,28(sp) +8002604c: 8fb10018 lw s1,24(sp) +80026050: 8fb00014 lw s0,20(sp) +80026054: 03e00008 jr ra +80026058: 27bd0028 addiu sp,sp,40 + +8002605c <PlayMenu>: +static MainMenuLevel menuLevel; +static MMBtn_Index MainMenuMinimumBtn; + +void PlayMenu(void) +{ + menuLevel = ONE_TWO_PLAYERS_LEVEL; +8002605c: 24030001 li v1,1 +80026060: 3c028007 lui v0,0x8007 +80026064: ac431c60 sw v1,7264(v0) + MainMenuMinimumBtn = ONE_PLAYER_BUTTON_INDEX; +80026068: 24040002 li a0,2 +8002606c: 3c028007 lui v0,0x8007 +80026070: ac441c5c sw a0,7260(v0) + + MainMenuBtn[PLAY_BUTTON_INDEX].selected = false; +80026074: 3c028004 lui v0,0x8004 +80026078: 24425ea0 addiu v0,v0,24224 +8002607c: a0400012 sb zero,18(v0) + MainMenuBtn[PLAY_BUTTON_INDEX].was_selected = false; +80026080: a0400013 sb zero,19(v0) + MainMenuBtn[PLAY_BUTTON_INDEX].timer = 0; +80026084: a4400008 sh zero,8(v0) + + MainMenuBtn[OPTIONS_BUTTON_INDEX].selected = false; +80026088: a0400026 sb zero,38(v0) + MainMenuBtn[OPTIONS_BUTTON_INDEX].was_selected = false; +8002608c: a0400027 sb zero,39(v0) + MainMenuBtn[OPTIONS_BUTTON_INDEX].timer = 0; +80026090: a440001c sh zero,28(v0) + + MainMenuBtn[ONE_PLAYER_BUTTON_INDEX].selected = true; +80026094: a043003a sb v1,58(v0) + MainMenuBtn[ONE_PLAYER_BUTTON_INDEX].was_selected = false; +80026098: a040003b sb zero,59(v0) + MainMenuBtn[ONE_PLAYER_BUTTON_INDEX].timer = 0; +8002609c: a4400030 sh zero,48(v0) + + MainMenuBtn[TWO_PLAYER_BUTTON_INDEX].selected = false; +800260a0: a040004e sb zero,78(v0) + MainMenuBtn[TWO_PLAYER_BUTTON_INDEX].was_selected = false; +800260a4: a040004f sb zero,79(v0) + MainMenuBtn[TWO_PLAYER_BUTTON_INDEX].timer = 0; +800260a8: 03e00008 jr ra +800260ac: a4400044 sh zero,68(v0) + +800260b0 <MenuTestCheat>: + } + +} + +void MenuTestCheat(void) +{ +800260b0: 27bdffe8 addiu sp,sp,-24 +800260b4: afbf0014 sw ra,20(sp) + if(MemCardShowMap() == false) +800260b8: 0c0097e6 jal 80025f98 <MemCardShowMap> +800260bc: 00000000 nop +800260c0: 14400005 bnez v0,800260d8 <MenuTestCheat+0x28> +800260c4: 3c048004 lui a0,0x8004 + { + dprintf("MemCardShowMap() failed!\n"); + return; + } +} +800260c8: 8fbf0014 lw ra,20(sp) + +void MenuTestCheat(void) +{ + if(MemCardShowMap() == false) + { + dprintf("MemCardShowMap() failed!\n"); +800260cc: 24840e20 addiu a0,a0,3616 +800260d0: 0800ed8f j 8003b63c <printf> +800260d4: 27bd0018 addiu sp,sp,24 + return; + } +} +800260d8: 8fbf0014 lw ra,20(sp) +800260dc: 00000000 nop +800260e0: 03e00008 jr ra +800260e4: 27bd0018 addiu sp,sp,24 + +800260e8 <OptionsMenu>: + MainMenuBtn[TWO_PLAYER_BUTTON_INDEX].timer = 0; +} + +void OptionsMenu(void) +{ + dprintf("OptionsMenu(void)!\n"); +800260e8: 3c048004 lui a0,0x8004 +800260ec: 0800ed8f j 8003b63c <printf> +800260f0: 24840e3c addiu a0,a0,3644 + +800260f4 <TwoPlayerMenu>: + EndAnimation(); + Game(false /* One Player Only */); +} + +void TwoPlayerMenu(void) +{ +800260f4: 27bdffe8 addiu sp,sp,-24 +800260f8: afbf0014 sw ra,20(sp) + EndAnimation(); +800260fc: 0c00835d jal 80020d74 <EndAnimation> +80026100: 00000000 nop + Game(true /* Two players */); +} +80026104: 8fbf0014 lw ra,20(sp) +} + +void TwoPlayerMenu(void) +{ + EndAnimation(); + Game(true /* Two players */); +80026108: 24040001 li a0,1 +8002610c: 080086c4 j 80021b10 <Game> +80026110: 27bd0018 addiu sp,sp,24 + +80026114 <OnePlayerMenu>: +{ + dprintf("OptionsMenu(void)!\n"); +} + +void OnePlayerMenu(void) +{ +80026114: 27bdffe8 addiu sp,sp,-24 +80026118: afbf0014 sw ra,20(sp) + EndAnimation(); +8002611c: 0c00835d jal 80020d74 <EndAnimation> +80026120: 00000000 nop + Game(false /* One Player Only */); +} +80026124: 8fbf0014 lw ra,20(sp) +} + +void OnePlayerMenu(void) +{ + EndAnimation(); + Game(false /* One Player Only */); +80026128: 00002021 move a0,zero +8002612c: 080086c4 j 80021b10 <Game> +80026130: 27bd0018 addiu sp,sp,24 + +80026134 <MainMenuDrawButton>: + +} + +void MainMenuDrawButton(TYPE_MMBtn * btn) +{ + MenuSpr.w = BUTTON_SIZE; +80026134: 3c028004 lui v0,0x8004 +80026138: 24425f88 addiu v0,v0,24456 +8002613c: 24030040 li v1,64 +80026140: a4430006 sh v1,6(v0) + MenuSpr.h = BUTTON_SIZE; +80026144: a4430008 sh v1,8(v0) + + if(btn->timer < MAIN_MENU_BTN_ANI_SIZE) +80026148: 84830008 lh v1,8(a0) + + +} + +void MainMenuDrawButton(TYPE_MMBtn * btn) +{ +8002614c: 00802821 move a1,a0 + MenuSpr.w = BUTTON_SIZE; + MenuSpr.h = BUTTON_SIZE; + + if(btn->timer < MAIN_MENU_BTN_ANI_SIZE) +80026150: 28660035 slti a2,v1,53 +80026154: 10c00003 beqz a2,80026164 <MainMenuDrawButton+0x30> +80026158: 00402021 move a0,v0 + { + btn->timer++; +8002615c: 24630001 addiu v1,v1,1 +80026160: a4a30008 sh v1,8(a1) + } + + if(btn->selected == true) +80026164: 90a20012 lbu v0,18(a1) +80026168: 00000000 nop +8002616c: 10400007 beqz v0,8002618c <MainMenuDrawButton+0x58> +80026170: 2402ff80 li v0,-128 + { + if(btn->was_selected == false) +80026174: 90a20013 lbu v0,19(a1) +80026178: 00000000 nop +8002617c: 14400002 bnez v0,80026188 <MainMenuDrawButton+0x54> +80026180: 00000000 nop + { + btn->timer = 0; +80026184: a4a00008 sh zero,8(a1) +80026188: 2402ffc0 li v0,-64 + MenuSpr.g = SELECTED_BUTTON_LUMINANCE; + MenuSpr.b = SELECTED_BUTTON_LUMINANCE; + } + else + { + MenuSpr.r = NORMAL_LUMINANCE; +8002618c: a082000e sb v0,14(a0) + MenuSpr.g = NORMAL_LUMINANCE; +80026190: a082000f sb v0,15(a0) + MenuSpr.b = NORMAL_LUMINANCE; +80026194: a0820010 sb v0,16(a0) + } + + MenuSpr.u = DEFAULT_BUTTON_U_OFFSET; + MenuSpr.v = DEFAULT_BUTTON_V_OFFSET; +80026198: 2402ff80 li v0,-128 + MenuSpr.r = NORMAL_LUMINANCE; + MenuSpr.g = NORMAL_LUMINANCE; + MenuSpr.b = NORMAL_LUMINANCE; + } + + MenuSpr.u = DEFAULT_BUTTON_U_OFFSET; +8002619c: a0800004 sb zero,4(a0) + MenuSpr.v = DEFAULT_BUTTON_V_OFFSET; +800261a0: a0820005 sb v0,5(a0) + + switch(btn->i) +800261a4: 88a20011 lwl v0,17(a1) +800261a8: 24060001 li a2,1 +800261ac: 98a2000e lwr v0,14(a1) +800261b0: 00000000 nop +800261b4: 10460016 beq v0,a2,80026210 <MainMenuDrawButton+0xdc> +800261b8: 3c038004 lui v1,0x8004 +800261bc: 10400007 beqz v0,800261dc <MainMenuDrawButton+0xa8> +800261c0: 24060002 li a2,2 +800261c4: 10460005 beq v0,a2,800261dc <MainMenuDrawButton+0xa8> +800261c8: 24060003 li a2,3 +800261cc: 10460011 beq v0,a2,80026214 <MainMenuDrawButton+0xe0> +800261d0: 240200e1 li v0,225 +800261d4: 03e00008 jr ra +800261d8: 00000000 nop + + GsSortSprite(&MenuSpr); + break; + + case ONE_PLAYER_BUTTON_INDEX: + MenuSpr.x = MAIN_MENU_ONE_PLAYER_BUTTON_X; +800261dc: 2406005c li a2,92 +800261e0: a4665f88 sh a2,24456(v1) + MenuSpr.y = MAIN_MENU_ONE_PLAYER_BUTTON_Y - MainMenuBtnAni[btn->timer]; +800261e4: 84a20008 lh v0,8(a1) +800261e8: 00000000 nop +800261ec: 00021840 sll v1,v0,0x1 +800261f0: 3c028004 lui v0,0x8004 +800261f4: 2442147c addiu v0,v0,5244 +800261f8: 00621021 addu v0,v1,v0 +800261fc: 94420000 lhu v0,0(v0) +80026200: 00000000 nop +80026204: 00c23023 subu a2,a2,v0 +80026208: 1000000d b 80026240 <MainMenuDrawButton+0x10c> +8002620c: a4860002 sh a2,2(a0) + + GsSortSprite(&MenuSpr); + break; + + case TWO_PLAYER_BUTTON_INDEX: + MenuSpr.x = MAIN_MENU_TWO_PLAYER_BUTTON_X; +80026210: 240200e1 li v0,225 +80026214: a4625f88 sh v0,24456(v1) + MenuSpr.y = MAIN_MENU_TWO_PLAYER_BUTTON_Y - MainMenuBtnAni[btn->timer]; +80026218: 84a20008 lh v0,8(a1) +8002621c: 00000000 nop +80026220: 00021840 sll v1,v0,0x1 +80026224: 3c028004 lui v0,0x8004 +80026228: 2442147c addiu v0,v0,5244 +8002622c: 00621021 addu v0,v1,v0 +80026230: 94430000 lhu v1,0(v0) +80026234: 2402005c li v0,92 +80026238: 00431023 subu v0,v0,v1 +8002623c: a4820002 sh v0,2(a0) + MenuSpr.u += btn->offset_u; +80026240: 8ca20000 lw v0,0(a1) +80026244: 00000000 nop +80026248: a0820004 sb v0,4(a0) + MenuSpr.v += btn->offset_v; +8002624c: 8ca20004 lw v0,4(a1) +80026250: 00000000 nop +80026254: 2442ff80 addiu v0,v0,-128 + + GsSortSprite(&MenuSpr); +80026258: 0800b356 j 8002cd58 <GsSortSprite> +8002625c: a0820005 sb v0,5(a0) + +80026260 <MainMenuInit>: +} + + +void MainMenuInit(void) +{ + LoadMenu( MainMenuFiles,MainMenuDest, +80026260: 3c058004 lui a1,0x8004 +80026264: 3c048004 lui a0,0x8004 + Game(true /* Two players */); +} + + +void MainMenuInit(void) +{ +80026268: 27bdffa8 addiu sp,sp,-88 + LoadMenu( MainMenuFiles,MainMenuDest, +8002626c: 2407000a li a3,10 +80026270: 2406000a li a2,10 +80026274: 24a514ec addiu a1,a1,5356 +80026278: 24841514 addiu a0,a0,5396 + Game(true /* Two players */); +} + + +void MainMenuInit(void) +{ +8002627c: afbf0054 sw ra,84(sp) + LoadMenu( MainMenuFiles,MainMenuDest, +80026280: 0c0093c1 jal 80024f04 <LoadMenu> +80026284: afb00050 sw s0,80(sp) + sizeof(MainMenuFiles) / sizeof(char*) , + sizeof(MainMenuDest) / sizeof(void*) ); + + MainMenuBtn[PLAY_BUTTON_INDEX].offset_u = PLAY_BUTTON_U_OFFSET; +80026288: 3c028004 lui v0,0x8004 + MainMenuBtn[PLAY_BUTTON_INDEX].offset_v = PLAY_BUTTON_Y_OFFSET; + MainMenuBtn[PLAY_BUTTON_INDEX].timer = 0; + MainMenuBtn[PLAY_BUTTON_INDEX].f = &PlayMenu; +8002628c: 3c048002 lui a0,0x8002 + LoadMenu( MainMenuFiles,MainMenuDest, + sizeof(MainMenuFiles) / sizeof(char*) , + sizeof(MainMenuDest) / sizeof(void*) ); + + MainMenuBtn[PLAY_BUTTON_INDEX].offset_u = PLAY_BUTTON_U_OFFSET; + MainMenuBtn[PLAY_BUTTON_INDEX].offset_v = PLAY_BUTTON_Y_OFFSET; +80026290: 24030040 li v1,64 + MainMenuBtn[PLAY_BUTTON_INDEX].timer = 0; + MainMenuBtn[PLAY_BUTTON_INDEX].f = &PlayMenu; +80026294: 2484605c addiu a0,a0,24668 +{ + LoadMenu( MainMenuFiles,MainMenuDest, + sizeof(MainMenuFiles) / sizeof(char*) , + sizeof(MainMenuDest) / sizeof(void*) ); + + MainMenuBtn[PLAY_BUTTON_INDEX].offset_u = PLAY_BUTTON_U_OFFSET; +80026298: ac405ea0 sw zero,24224(v0) + MainMenuBtn[PLAY_BUTTON_INDEX].offset_v = PLAY_BUTTON_Y_OFFSET; +8002629c: 24425ea0 addiu v0,v0,24224 +800262a0: ac430004 sw v1,4(v0) + MainMenuBtn[PLAY_BUTTON_INDEX].timer = 0; +800262a4: a4400008 sh zero,8(v0) + MainMenuBtn[PLAY_BUTTON_INDEX].f = &PlayMenu; +800262a8: a844000d swl a0,13(v0) +800262ac: b844000a swr a0,10(v0) + MainMenuBtn[PLAY_BUTTON_INDEX].i = PLAY_BUTTON_INDEX; +800262b0: a8400011 swl zero,17(v0) + + MainMenuBtn[OPTIONS_BUTTON_INDEX].offset_u = OPTIONS_BUTTON_U_OFFSET; + MainMenuBtn[OPTIONS_BUTTON_INDEX].offset_v = OPTIONS_BUTTON_Y_OFFSET; + MainMenuBtn[OPTIONS_BUTTON_INDEX].timer = 0; + MainMenuBtn[OPTIONS_BUTTON_INDEX].f = &OptionsMenu; +800262b4: 3c048002 lui a0,0x8002 + + MainMenuBtn[PLAY_BUTTON_INDEX].offset_u = PLAY_BUTTON_U_OFFSET; + MainMenuBtn[PLAY_BUTTON_INDEX].offset_v = PLAY_BUTTON_Y_OFFSET; + MainMenuBtn[PLAY_BUTTON_INDEX].timer = 0; + MainMenuBtn[PLAY_BUTTON_INDEX].f = &PlayMenu; + MainMenuBtn[PLAY_BUTTON_INDEX].i = PLAY_BUTTON_INDEX; +800262b8: b840000e swr zero,14(v0) + + MainMenuBtn[OPTIONS_BUTTON_INDEX].offset_u = OPTIONS_BUTTON_U_OFFSET; + MainMenuBtn[OPTIONS_BUTTON_INDEX].offset_v = OPTIONS_BUTTON_Y_OFFSET; + MainMenuBtn[OPTIONS_BUTTON_INDEX].timer = 0; + MainMenuBtn[OPTIONS_BUTTON_INDEX].f = &OptionsMenu; +800262bc: 248460e8 addiu a0,a0,24808 + MainMenuBtn[PLAY_BUTTON_INDEX].offset_v = PLAY_BUTTON_Y_OFFSET; + MainMenuBtn[PLAY_BUTTON_INDEX].timer = 0; + MainMenuBtn[PLAY_BUTTON_INDEX].f = &PlayMenu; + MainMenuBtn[PLAY_BUTTON_INDEX].i = PLAY_BUTTON_INDEX; + + MainMenuBtn[OPTIONS_BUTTON_INDEX].offset_u = OPTIONS_BUTTON_U_OFFSET; +800262c0: ac430014 sw v1,20(v0) + MainMenuBtn[OPTIONS_BUTTON_INDEX].offset_v = OPTIONS_BUTTON_Y_OFFSET; +800262c4: ac430018 sw v1,24(v0) + MainMenuBtn[OPTIONS_BUTTON_INDEX].timer = 0; +800262c8: a440001c sh zero,28(v0) + MainMenuBtn[OPTIONS_BUTTON_INDEX].f = &OptionsMenu; +800262cc: a8440021 swl a0,33(v0) +800262d0: b844001e swr a0,30(v0) + MainMenuBtn[OPTIONS_BUTTON_INDEX].i = OPTIONS_BUTTON_INDEX; +800262d4: 24040001 li a0,1 +800262d8: a8440025 swl a0,37(v0) +800262dc: b8440022 swr a0,34(v0) + + MainMenuBtn[ONE_PLAYER_BUTTON_INDEX].offset_u = ONE_PLAYER_BUTTON_U_OFFSET; +800262e0: 24040080 li a0,128 +800262e4: ac440028 sw a0,40(v0) + MainMenuBtn[ONE_PLAYER_BUTTON_INDEX].offset_v = ONE_PLAYER_BUTTON_Y_OFFSET; + MainMenuBtn[ONE_PLAYER_BUTTON_INDEX].timer = 0; + MainMenuBtn[ONE_PLAYER_BUTTON_INDEX].f = &OnePlayerMenu; +800262e8: 3c048002 lui a0,0x8002 +800262ec: 24846114 addiu a0,a0,24852 + MainMenuBtn[OPTIONS_BUTTON_INDEX].timer = 0; + MainMenuBtn[OPTIONS_BUTTON_INDEX].f = &OptionsMenu; + MainMenuBtn[OPTIONS_BUTTON_INDEX].i = OPTIONS_BUTTON_INDEX; + + MainMenuBtn[ONE_PLAYER_BUTTON_INDEX].offset_u = ONE_PLAYER_BUTTON_U_OFFSET; + MainMenuBtn[ONE_PLAYER_BUTTON_INDEX].offset_v = ONE_PLAYER_BUTTON_Y_OFFSET; +800262f0: ac43002c sw v1,44(v0) + MainMenuBtn[ONE_PLAYER_BUTTON_INDEX].timer = 0; +800262f4: a4400030 sh zero,48(v0) + MainMenuBtn[ONE_PLAYER_BUTTON_INDEX].f = &OnePlayerMenu; +800262f8: a8440035 swl a0,53(v0) +800262fc: b8440032 swr a0,50(v0) + MainMenuBtn[ONE_PLAYER_BUTTON_INDEX].i = ONE_PLAYER_BUTTON_INDEX; +80026300: 24040002 li a0,2 +80026304: a8440039 swl a0,57(v0) +80026308: b8440036 swr a0,54(v0) + + MainMenuBtn[TWO_PLAYER_BUTTON_INDEX].offset_u = TWO_PLAYER_BUTTON_U_OFFSET; + MainMenuBtn[TWO_PLAYER_BUTTON_INDEX].offset_v = TWO_PLAYER_BUTTON_Y_OFFSET; +8002630c: ac430040 sw v1,64(v0) + MainMenuBtn[TWO_PLAYER_BUTTON_INDEX].timer = 0; + MainMenuBtn[TWO_PLAYER_BUTTON_INDEX].f = &TwoPlayerMenu; +80026310: 3c038002 lui v1,0x8002 +80026314: 246360f4 addiu v1,v1,24820 + MainMenuBtn[ONE_PLAYER_BUTTON_INDEX].offset_v = ONE_PLAYER_BUTTON_Y_OFFSET; + MainMenuBtn[ONE_PLAYER_BUTTON_INDEX].timer = 0; + MainMenuBtn[ONE_PLAYER_BUTTON_INDEX].f = &OnePlayerMenu; + MainMenuBtn[ONE_PLAYER_BUTTON_INDEX].i = ONE_PLAYER_BUTTON_INDEX; + + MainMenuBtn[TWO_PLAYER_BUTTON_INDEX].offset_u = TWO_PLAYER_BUTTON_U_OFFSET; +80026318: 240400c0 li a0,192 +8002631c: ac44003c sw a0,60(v0) + MainMenuBtn[TWO_PLAYER_BUTTON_INDEX].offset_v = TWO_PLAYER_BUTTON_Y_OFFSET; + MainMenuBtn[TWO_PLAYER_BUTTON_INDEX].timer = 0; +80026320: a4400044 sh zero,68(v0) + MainMenuBtn[TWO_PLAYER_BUTTON_INDEX].f = &TwoPlayerMenu; +80026324: a8430049 swl v1,73(v0) +80026328: b8430046 swr v1,70(v0) + MainMenuBtn[TWO_PLAYER_BUTTON_INDEX].i = TWO_PLAYER_BUTTON_INDEX; +8002632c: 24030003 li v1,3 +80026330: a843004d swl v1,77(v0) +80026334: b843004a swr v1,74(v0) + + menuLevel = PLAY_OPTIONS_LEVEL; +80026338: 3c028007 lui v0,0x8007 +8002633c: ac401c60 sw zero,7264(v0) + + MainMenuMinimumBtn = PLAY_BUTTON_INDEX; + + TestCheat.Callback = &MenuTestCheat; +80026340: 3c108004 lui s0,0x8004 + MainMenuBtn[TWO_PLAYER_BUTTON_INDEX].f = &TwoPlayerMenu; + MainMenuBtn[TWO_PLAYER_BUTTON_INDEX].i = TWO_PLAYER_BUTTON_INDEX; + + menuLevel = PLAY_OPTIONS_LEVEL; + + MainMenuMinimumBtn = PLAY_BUTTON_INDEX; +80026344: 3c028007 lui v0,0x8007 + + TestCheat.Callback = &MenuTestCheat; +80026348: 26105f14 addiu s0,s0,24340 + MainMenuBtn[TWO_PLAYER_BUTTON_INDEX].f = &TwoPlayerMenu; + MainMenuBtn[TWO_PLAYER_BUTTON_INDEX].i = TWO_PLAYER_BUTTON_INDEX; + + menuLevel = PLAY_OPTIONS_LEVEL; + + MainMenuMinimumBtn = PLAY_BUTTON_INDEX; +8002634c: ac401c5c sw zero,7260(v0) + + TestCheat.Callback = &MenuTestCheat; +80026350: 3c028002 lui v0,0x8002 + memset(TestCheat.Combination,0,CHEAT_ARRAY_SIZE); +80026354: 02002021 move a0,s0 + + menuLevel = PLAY_OPTIONS_LEVEL; + + MainMenuMinimumBtn = PLAY_BUTTON_INDEX; + + TestCheat.Callback = &MenuTestCheat; +80026358: 244260b0 addiu v0,v0,24752 + memset(TestCheat.Combination,0,CHEAT_ARRAY_SIZE); +8002635c: 24060010 li a2,16 +80026360: 00002821 move a1,zero +80026364: 0c00d7ab jal 80035eac <memset> +80026368: ae020020 sw v0,32(s0) + //memcpy(myarray, (int [5]){a,b,c,d,e}, 5*sizeof(int)); + + memcpy( TestCheat.Combination, + (unsigned short[CHEAT_ARRAY_SIZE]) + { PAD_CIRCLE, PAD_CIRCLE, PAD_CROSS, PAD_TRIANGLE, +8002636c: 3c058004 lui a1,0x8004 +80026370: 27a40030 addiu a0,sp,48 +80026374: 24060020 li a2,32 +80026378: 0c00d75e jal 80035d78 <memcpy> +8002637c: 24a5f7ac addiu a1,a1,-2132 + + TestCheat.Callback = &MenuTestCheat; + memset(TestCheat.Combination,0,CHEAT_ARRAY_SIZE); + //memcpy(myarray, (int [5]){a,b,c,d,e}, 5*sizeof(int)); + + memcpy( TestCheat.Combination, +80026380: 27a50030 addiu a1,sp,48 +80026384: 24060020 li a2,32 +80026388: 0c00d75e jal 80035d78 <memcpy> +8002638c: 02002021 move a0,s0 + { PAD_CIRCLE, PAD_CIRCLE, PAD_CROSS, PAD_TRIANGLE, + PAD_TRIANGLE, PAD_TRIANGLE, 0 , 0 , + 0, 0, 0, 0, + 0, 0, 0, 0 } , sizeof(unsigned short) * CHEAT_ARRAY_SIZE); + + PadAddCheat(&TestCheat); +80026390: 02002021 move a0,s0 +80026394: 0c009ba4 jal 80026e90 <PadAddCheat> +80026398: 3c108004 lui s0,0x8004 + + StackCheckCheat.Callback = &SystemPrintStackPointerAddress; +8002639c: 26105ef0 addiu s0,s0,24304 +800263a0: 3c028003 lui v0,0x8003 + memset(StackCheckCheat.Combination, 0, CHEAT_ARRAY_SIZE); +800263a4: 02002021 move a0,s0 + 0, 0, 0, 0, + 0, 0, 0, 0 } , sizeof(unsigned short) * CHEAT_ARRAY_SIZE); + + PadAddCheat(&TestCheat); + + StackCheckCheat.Callback = &SystemPrintStackPointerAddress; +800263a8: 24428490 addiu v0,v0,-31600 + memset(StackCheckCheat.Combination, 0, CHEAT_ARRAY_SIZE); +800263ac: 24060010 li a2,16 +800263b0: 00002821 move a1,zero +800263b4: 0c00d7ab jal 80035eac <memset> +800263b8: ae020020 sw v0,32(s0) + + memcpy( StackCheckCheat.Combination, + (unsigned short[CHEAT_ARRAY_SIZE]) + { PAD_TRIANGLE, PAD_TRIANGLE, PAD_CROSS, PAD_TRIANGLE, +800263bc: 3c058004 lui a1,0x8004 +800263c0: 27a40010 addiu a0,sp,16 +800263c4: 24060020 li a2,32 +800263c8: 0c00d75e jal 80035d78 <memcpy> +800263cc: 24a5f7cc addiu a1,a1,-2100 + PadAddCheat(&TestCheat); + + StackCheckCheat.Callback = &SystemPrintStackPointerAddress; + memset(StackCheckCheat.Combination, 0, CHEAT_ARRAY_SIZE); + + memcpy( StackCheckCheat.Combination, +800263d0: 27a50010 addiu a1,sp,16 +800263d4: 24060020 li a2,32 +800263d8: 0c00d75e jal 80035d78 <memcpy> +800263dc: 02002021 move a0,s0 + { PAD_TRIANGLE, PAD_TRIANGLE, PAD_CROSS, PAD_TRIANGLE, + PAD_L1, PAD_R1, 0 , 0 , + 0, 0, 0, 0, + 0, 0, 0, 0 } , sizeof(unsigned short) * CHEAT_ARRAY_SIZE); + + PadAddCheat(&StackCheckCheat); +800263e0: 0c009ba4 jal 80026e90 <PadAddCheat> +800263e4: 02002021 move a0,s0 + + LoadMenuEnd(); +800263e8: 0c0093ab jal 80024eac <LoadMenuEnd> +800263ec: 00000000 nop +} +800263f0: 8fbf0054 lw ra,84(sp) +800263f4: 8fb00050 lw s0,80(sp) +800263f8: 03e00008 jr ra +800263fc: 27bd0058 addiu sp,sp,88 + +80026400 <MainMenu>: + +void MainMenu(void) +{ +80026400: 27bdffc8 addiu sp,sp,-56 +80026404: afb3001c sw s3,28(sp) + default: + max_buttons = 0; + break; + } + + MainMenuBtn[previous_btn_selected].was_selected = MainMenuBtn[previous_btn_selected].selected; +80026408: 3c138004 lui s3,0x8004 + + LoadMenuEnd(); +} + +void MainMenu(void) +{ +8002640c: afb40020 sw s4,32(sp) + default: + max_buttons = 0; + break; + } + + MainMenuBtn[previous_btn_selected].was_selected = MainMenuBtn[previous_btn_selected].selected; +80026410: 26735ea0 addiu s3,s3,24224 + + if( (PadOneKeyReleased(PAD_CROSS) == true) + || + (PadOneKeyReleased(PAD_TRIANGLE) == true) ) + { + SfxPlaySound(&AcceptSnd); +80026414: 3c148004 lui s4,0x8004 + + LoadMenuEnd(); +} + +void MainMenu(void) +{ +80026418: afbf0034 sw ra,52(sp) +8002641c: afb00010 sw s0,16(sp) +80026420: afbe0030 sw s8,48(sp) +80026424: afb7002c sw s7,44(sp) +80026428: afb60028 sw s6,40(sp) +8002642c: afb50024 sw s5,36(sp) +80026430: afb20018 sw s2,24(sp) +80026434: afb10014 sw s1,20(sp) + + MainMenuInit(); +80026438: 0c009898 jal 80026260 <MainMenuInit> +8002643c: 02608021 move s0,s3 + + #ifndef NO_INTRO + PSXSDKIntro(); +80026440: 0c009d2e jal 800274b8 <PSXSDKIntro> +80026444: 26945f38 addiu s4,s4,24376 +80026448: 3c118007 lui s1,0x8007 +{ + static uint8_t btn_selected = PLAY_BUTTON_INDEX; + static uint8_t previous_btn_selected = 0; + uint8_t max_buttons; + + if(PadOneAnyKeyPressed() == true) +8002644c: 0c009a9a jal 80026a68 <PadOneAnyKeyPressed> +80026450: 00000000 nop +80026454: 10400007 beqz v0,80026474 <MainMenu+0x74> +80026458: 00000000 nop + { + if(SystemIsRandSeedSet() == false) +8002645c: 0c009f87 jal 80027e1c <SystemIsRandSeedSet> +80026460: 00000000 nop +80026464: 14400003 bnez v0,80026474 <MainMenu+0x74> +80026468: 00000000 nop + { + SystemSetRandSeed(); +8002646c: 0c009f6d jal 80027db4 <SystemSetRandSeed> +80026470: 00000000 nop + } + } + + if( (PadOneKeyReleased(PAD_CROSS) == true) +80026474: 0c0099e0 jal 80026780 <PadOneKeyReleased> +80026478: 24040040 li a0,64 +8002647c: 10400005 beqz v0,80026494 <MainMenu+0x94> +80026480: 00000000 nop + || + (PadOneKeyReleased(PAD_TRIANGLE) == true) ) + { + SfxPlaySound(&AcceptSnd); +80026484: 0c009eeb jal 80027bac <SfxPlaySound> +80026488: 02802021 move a0,s4 + } + + switch(menuLevel) +8002648c: 10000006 b 800264a8 <MainMenu+0xa8> +80026490: 3c128007 lui s2,0x8007 + } + } + + if( (PadOneKeyReleased(PAD_CROSS) == true) + || + (PadOneKeyReleased(PAD_TRIANGLE) == true) ) +80026494: 0c0099e0 jal 80026780 <PadOneKeyReleased> +80026498: 24040010 li a0,16 + SystemSetRandSeed(); + } + } + + if( (PadOneKeyReleased(PAD_CROSS) == true) + || +8002649c: 1440fff9 bnez v0,80026484 <MainMenu+0x84> +800264a0: 00000000 nop + (PadOneKeyReleased(PAD_TRIANGLE) == true) ) + { + SfxPlaySound(&AcceptSnd); + } + + switch(menuLevel) +800264a4: 3c128007 lui s2,0x8007 +800264a8: 8e421c60 lw v0,7264(s2) +800264ac: 3c158007 lui s5,0x8007 +800264b0: 1040000b beqz v0,800264e0 <MainMenu+0xe0> +800264b4: 24160002 li s6,2 +800264b8: 24030001 li v1,1 +800264bc: 14430008 bne v0,v1,800264e0 <MainMenu+0xe0> +800264c0: 0000b021 move s6,zero + max_buttons = MAIN_MENU_PLAY_OPTIONS_LEVEL_BUTTONS; + break; + + case ONE_TWO_PLAYERS_LEVEL: + max_buttons = MAIN_MENU_ONE_TWO_PLAYERS_LEVEL_BUTTONS; + if(PadOneKeyReleased(PAD_TRIANGLE) == true) +800264c4: 0c0099e0 jal 80026780 <PadOneKeyReleased> +800264c8: 24040010 li a0,16 +800264cc: 10400004 beqz v0,800264e0 <MainMenu+0xe0> +800264d0: 24160002 li s6,2 + { + menuLevel = PLAY_OPTIONS_LEVEL; +800264d4: ae401c60 sw zero,7264(s2) + MainMenuMinimumBtn = PLAY_BUTTON_INDEX; +800264d8: aea01c5c sw zero,7260(s5) + btn_selected = PLAY_BUTTON_INDEX; +800264dc: a2201c59 sb zero,7257(s1) + default: + max_buttons = 0; + break; + } + + MainMenuBtn[previous_btn_selected].was_selected = MainMenuBtn[previous_btn_selected].selected; +800264e0: 3c178007 lui s7,0x8007 +800264e4: 92e21c58 lbu v0,7256(s7) + MainMenuBtn[btn_selected].was_selected = MainMenuBtn[btn_selected].selected; + + if(PadOneKeyReleased(PAD_LEFT) && (btn_selected > 0) ) +800264e8: 34048000 li a0,0x8000 + default: + max_buttons = 0; + break; + } + + MainMenuBtn[previous_btn_selected].was_selected = MainMenuBtn[previous_btn_selected].selected; +800264ec: 00021880 sll v1,v0,0x2 +800264f0: 00021100 sll v0,v0,0x4 +800264f4: 00621021 addu v0,v1,v0 +800264f8: 02621021 addu v0,s3,v0 +800264fc: 90430012 lbu v1,18(v0) +80026500: 02e0f021 move s8,s7 +80026504: a0430013 sb v1,19(v0) + MainMenuBtn[btn_selected].was_selected = MainMenuBtn[btn_selected].selected; +80026508: 92221c59 lbu v0,7257(s1) +8002650c: 00000000 nop +80026510: 00021880 sll v1,v0,0x2 +80026514: 00021100 sll v0,v0,0x4 +80026518: 00621021 addu v0,v1,v0 +8002651c: 02621021 addu v0,s3,v0 +80026520: 90430012 lbu v1,18(v0) + + if(PadOneKeyReleased(PAD_LEFT) && (btn_selected > 0) ) +80026524: 0c0099e0 jal 80026780 <PadOneKeyReleased> +80026528: a0430013 sb v1,19(v0) +8002652c: 1040000c beqz v0,80026560 <MainMenu+0x160> +80026530: 00000000 nop +80026534: 92221c59 lbu v0,7257(s1) +80026538: 00000000 nop +8002653c: 10400008 beqz v0,80026560 <MainMenu+0x160> +80026540: 00021880 sll v1,v0,0x2 + { + MainMenuBtn[btn_selected].selected = false; +80026544: 00022100 sll a0,v0,0x4 +80026548: 00641821 addu v1,v1,a0 +8002654c: 02631821 addu v1,s3,v1 + previous_btn_selected = btn_selected; +80026550: a2e21c58 sb v0,7256(s7) + MainMenuBtn[previous_btn_selected].was_selected = MainMenuBtn[previous_btn_selected].selected; + MainMenuBtn[btn_selected].was_selected = MainMenuBtn[btn_selected].selected; + + if(PadOneKeyReleased(PAD_LEFT) && (btn_selected > 0) ) + { + MainMenuBtn[btn_selected].selected = false; +80026554: a0600012 sb zero,18(v1) + previous_btn_selected = btn_selected; + btn_selected--; +80026558: 10000012 b 800265a4 <MainMenu+0x1a4> +8002655c: 2442ffff addiu v0,v0,-1 + SfxPlaySound(&BellSnd); + } + else if(PadOneKeyReleased(PAD_RIGHT) +80026560: 0c0099e0 jal 80026780 <PadOneKeyReleased> +80026564: 24042000 li a0,8192 +80026568: 10400012 beqz v0,800265b4 <MainMenu+0x1b4> +8002656c: 00000000 nop + && +80026570: 8ea31c5c lw v1,7260(s5) + (btn_selected < (max_buttons - 1 + MainMenuMinimumBtn) ) ) +80026574: 92221c59 lbu v0,7257(s1) + previous_btn_selected = btn_selected; + btn_selected--; + SfxPlaySound(&BellSnd); + } + else if(PadOneKeyReleased(PAD_RIGHT) + && +80026578: 2463ffff addiu v1,v1,-1 +8002657c: 00761821 addu v1,v1,s6 +80026580: 0043182b sltu v1,v0,v1 +80026584: 1060000b beqz v1,800265b4 <MainMenu+0x1b4> +80026588: 00021880 sll v1,v0,0x2 + (btn_selected < (max_buttons - 1 + MainMenuMinimumBtn) ) ) + { + MainMenuBtn[btn_selected].selected = false; +8002658c: 00022100 sll a0,v0,0x4 +80026590: 00641821 addu v1,v1,a0 +80026594: 02031821 addu v1,s0,v1 + previous_btn_selected = btn_selected; +80026598: a3c21c58 sb v0,7256(s8) + } + else if(PadOneKeyReleased(PAD_RIGHT) + && + (btn_selected < (max_buttons - 1 + MainMenuMinimumBtn) ) ) + { + MainMenuBtn[btn_selected].selected = false; +8002659c: a0600012 sb zero,18(v1) + previous_btn_selected = btn_selected; + btn_selected++; +800265a0: 24420001 addiu v0,v0,1 + SfxPlaySound(&BellSnd); +800265a4: 3c048004 lui a0,0x8004 +800265a8: 24845f60 addiu a0,a0,24416 +800265ac: 0c009eeb jal 80027bac <SfxPlaySound> +800265b0: a2221c59 sb v0,7257(s1) + } + + if(btn_selected < MainMenuMinimumBtn) +800265b4: 8ea21c5c lw v0,7260(s5) +800265b8: 92231c59 lbu v1,7257(s1) +800265bc: 00000000 nop +800265c0: 0062182b sltu v1,v1,v0 +800265c4: 10600002 beqz v1,800265d0 <MainMenu+0x1d0> +800265c8: 00000000 nop + { + btn_selected = MainMenuMinimumBtn; +800265cc: a2221c59 sb v0,7257(s1) + } + + if(btn_selected > (max_buttons - 1 + MainMenuMinimumBtn) ) +800265d0: 92231c59 lbu v1,7257(s1) +800265d4: 2442ffff addiu v0,v0,-1 +800265d8: 00561021 addu v0,v0,s6 +800265dc: 0043182b sltu v1,v0,v1 +800265e0: 10600002 beqz v1,800265ec <MainMenu+0x1ec> +800265e4: 00000000 nop + { + // Avoid overflow when going back in menu navigation + btn_selected = (max_buttons - 1 + MainMenuMinimumBtn); +800265e8: a2221c59 sb v0,7257(s1) + } + + if(PadOneKeyReleased(PAD_CROSS) ) +800265ec: 0c0099e0 jal 80026780 <PadOneKeyReleased> +800265f0: 24040040 li a0,64 +800265f4: 10400033 beqz v0,800266c4 <MainMenu+0x2c4> +800265f8: 24020001 li v0,1 + { + if(menuLevel == ONE_TWO_PLAYERS_LEVEL) +800265fc: 8e561c60 lw s6,7264(s2) +80026600: 00000000 nop +80026604: 16c2001e bne s6,v0,80026680 <MainMenu+0x280> +80026608: 00000000 nop + { + MainMenuBtn[btn_selected].f(); +8002660c: 92221c59 lbu v0,7257(s1) +80026610: 00000000 nop +80026614: 00021880 sll v1,v0,0x2 +80026618: 00021100 sll v0,v0,0x4 +8002661c: 00621021 addu v0,v1,v0 +80026620: 02021021 addu v0,s0,v0 +80026624: 8843000d lwl v1,13(v0) +80026628: 00000000 nop +8002662c: 9843000a lwr v1,10(v0) +80026630: 00000000 nop +80026634: 0060f809 jalr v1 +80026638: 00000000 nop + +} + +void MainMenuRestoreInitValues(void) +{ + menuLevel = PLAY_OPTIONS_LEVEL; +8002663c: 3c028007 lui v0,0x8007 +80026640: ac401c60 sw zero,7264(v0) + MainMenuMinimumBtn = PLAY_BUTTON_INDEX; +80026644: aea01c5c sw zero,7260(s5) + + MainMenuBtn[PLAY_BUTTON_INDEX].selected = true; +80026648: a2160012 sb s6,18(s0) + MainMenuBtn[PLAY_BUTTON_INDEX].was_selected = false; +8002664c: a2000013 sb zero,19(s0) + MainMenuBtn[PLAY_BUTTON_INDEX].timer = 0; +80026650: a6000008 sh zero,8(s0) + + MainMenuBtn[OPTIONS_BUTTON_INDEX].selected = false; +80026654: a2000026 sb zero,38(s0) + MainMenuBtn[OPTIONS_BUTTON_INDEX].was_selected = false; +80026658: a2000027 sb zero,39(s0) + MainMenuBtn[OPTIONS_BUTTON_INDEX].timer = 0; +8002665c: a600001c sh zero,28(s0) + + MainMenuBtn[ONE_PLAYER_BUTTON_INDEX].selected = false; +80026660: a200003a sb zero,58(s0) + MainMenuBtn[ONE_PLAYER_BUTTON_INDEX].was_selected = false; +80026664: a200003b sb zero,59(s0) + MainMenuBtn[ONE_PLAYER_BUTTON_INDEX].timer = 0; +80026668: a6000030 sh zero,48(s0) + + MainMenuBtn[TWO_PLAYER_BUTTON_INDEX].selected = false; +8002666c: a200004e sb zero,78(s0) + MainMenuBtn[TWO_PLAYER_BUTTON_INDEX].was_selected = false; +80026670: a200004f sb zero,79(s0) + MainMenuBtn[TWO_PLAYER_BUTTON_INDEX].timer = 0; +80026674: a6000044 sh zero,68(s0) + if(menuLevel == ONE_TWO_PLAYERS_LEVEL) + { + MainMenuBtn[btn_selected].f(); + // Once gameplay has finished, turn back to first level + MainMenuRestoreInitValues(); + btn_selected = PLAY_BUTTON_INDEX; +80026678: 1000000d b 800266b0 <MainMenu+0x2b0> +8002667c: a2201c59 sb zero,7257(s1) + } + else + { + MainMenuBtn[btn_selected].f(); +80026680: 92221c59 lbu v0,7257(s1) +80026684: 00000000 nop +80026688: 00021880 sll v1,v0,0x2 +8002668c: 00021100 sll v0,v0,0x4 +80026690: 00621021 addu v0,v1,v0 +80026694: 02021021 addu v0,s0,v0 +80026698: 8843000d lwl v1,13(v0) +8002669c: 00000000 nop +800266a0: 9843000a lwr v1,10(v0) +800266a4: 00000000 nop +800266a8: 0060f809 jalr v1 +800266ac: 00000000 nop + } + + + + if(menuLevel == ONE_TWO_PLAYERS_LEVEL) +800266b0: 8e431c60 lw v1,7264(s2) +800266b4: 24020001 li v0,1 +800266b8: 14620002 bne v1,v0,800266c4 <MainMenu+0x2c4> +800266bc: 00000000 nop + { + btn_selected = PLAY_BUTTON_INDEX; +800266c0: a2201c59 sb zero,7257(s1) + } + + } + + MainMenuBtn[btn_selected].selected = true; +800266c4: 92221c59 lbu v0,7257(s1) +800266c8: 00000000 nop +800266cc: 00021880 sll v1,v0,0x2 +800266d0: 00021100 sll v0,v0,0x4 +800266d4: 00621021 addu v0,v1,v0 +800266d8: 02021021 addu v0,s0,v0 +800266dc: 24030001 li v1,1 +800266e0: a0430012 sb v1,18(v0) + + while(1) + { + MainMenuButtonHandler(); + + switch(menuLevel) +800266e4: 8e421c60 lw v0,7264(s2) +800266e8: 00000000 nop +800266ec: 10400005 beqz v0,80026704 <MainMenu+0x304> +800266f0: 24030001 li v1,1 +800266f4: 10430010 beq v0,v1,80026738 <MainMenu+0x338> +800266f8: 00000000 nop +800266fc: 1000ff53 b 8002644c <MainMenu+0x4c> +80026700: 00000000 nop + { + case PLAY_OPTIONS_LEVEL: + while(SystemDMAReady() == false); +80026704: 0c009f8b jal 80027e2c <SystemDMAReady> +80026708: 00000000 nop +8002670c: 1040fffd beqz v0,80026704 <MainMenu+0x304> +80026710: 24060028 li a2,40 + + GsSortCls(0,0,40); +80026714: 00002821 move a1,zero +80026718: 0c00c4e8 jal 800313a0 <GsSortCls> +8002671c: 00002021 move a0,zero + MainMenuDrawButton(&MainMenuBtn[PLAY_BUTTON_INDEX]); +80026720: 3c048004 lui a0,0x8004 +80026724: 0c00984d jal 80026134 <MainMenuDrawButton> +80026728: 24845ea0 addiu a0,a0,24224 + MainMenuDrawButton(&MainMenuBtn[OPTIONS_BUTTON_INDEX]); +8002672c: 3c048004 lui a0,0x8004 +80026730: 1000000d b 80026768 <MainMenu+0x368> +80026734: 24845eb4 addiu a0,a0,24244 + + GfxDrawScene(); + break; + + case ONE_TWO_PLAYERS_LEVEL: + while(SystemDMAReady() == false); +80026738: 0c009f8b jal 80027e2c <SystemDMAReady> +8002673c: 00000000 nop +80026740: 1040fffd beqz v0,80026738 <MainMenu+0x338> +80026744: 24060028 li a2,40 + + GsSortCls(0,0,40); +80026748: 00002821 move a1,zero +8002674c: 0c00c4e8 jal 800313a0 <GsSortCls> +80026750: 00002021 move a0,zero + MainMenuDrawButton(&MainMenuBtn[ONE_PLAYER_BUTTON_INDEX]); +80026754: 3c048004 lui a0,0x8004 +80026758: 0c00984d jal 80026134 <MainMenuDrawButton> +8002675c: 24845ec8 addiu a0,a0,24264 + MainMenuDrawButton(&MainMenuBtn[TWO_PLAYER_BUTTON_INDEX]); +80026760: 3c048004 lui a0,0x8004 +80026764: 24845edc addiu a0,a0,24284 +80026768: 0c00984d jal 80026134 <MainMenuDrawButton> +8002676c: 3c118007 lui s1,0x8007 + GfxDrawScene(); +80026770: 0c008fe2 jal 80023f88 <GfxDrawScene> +80026774: 00000000 nop + break; +80026778: 1000ff34 b 8002644c <MainMenu+0x4c> +8002677c: 00000000 nop + +80026780 <PadOneKeyReleased>: + return true; +} + +bool PadOneKeyReleased(unsigned short key) +{ + return ( !(pad1 & key) && (previous_pad1 & key) ); +80026780: 3c028007 lui v0,0x8007 +80026784: 94431c7a lhu v1,7290(v0) + + return true; +} + +bool PadOneKeyReleased(unsigned short key) +{ +80026788: 3084ffff andi a0,a0,0xffff + return ( !(pad1 & key) && (previous_pad1 & key) ); +8002678c: 00831824 and v1,a0,v1 +80026790: 14600006 bnez v1,800267ac <PadOneKeyReleased+0x2c> +80026794: 00001021 move v0,zero +80026798: 3c028007 lui v0,0x8007 +8002679c: 94421c76 lhu v0,7286(v0) +800267a0: 00000000 nop +800267a4: 00822024 and a0,a0,v0 +800267a8: 0004102b sltu v0,zero,a0 +} +800267ac: 03e00008 jr ra +800267b0: 00000000 nop + +800267b4 <PadTwoKeyReleased>: + +bool PadTwoKeyReleased(unsigned short key) +{ + return ( !(pad2 & key) && (previous_pad2 & key) ); +800267b4: 3c028007 lui v0,0x8007 +800267b8: 94431c78 lhu v1,7288(v0) +{ + return ( !(pad1 & key) && (previous_pad1 & key) ); +} + +bool PadTwoKeyReleased(unsigned short key) +{ +800267bc: 3084ffff andi a0,a0,0xffff + return ( !(pad2 & key) && (previous_pad2 & key) ); +800267c0: 00831824 and v1,a0,v1 +800267c4: 14600006 bnez v1,800267e0 <PadTwoKeyReleased+0x2c> +800267c8: 00001021 move v0,zero +800267cc: 3c028007 lui v0,0x8007 +800267d0: 94421c74 lhu v0,7284(v0) +800267d4: 00000000 nop +800267d8: 00822024 and a0,a0,v0 +800267dc: 0004102b sltu v0,zero,a0 +} +800267e0: 03e00008 jr ra +800267e4: 00000000 nop + +800267e8 <PadCheatHandler>: + pad2_cheat_timer = SystemCreateTimer(PAD_CHEAT_TIMEOUT,true /* Repeat flag */,&PadTwoCleanCheatArray); + memset(cheatsArray,0, sizeof(TYPE_CHEAT) * PAD_MAX_CHEATS); +} + +void PadCheatHandler(uint8_t n_pad) +{ +800267e8: 27bdffb0 addiu sp,sp,-80 + unsigned short available_keys[12] = { PAD_LEFT, PAD_RIGHT, PAD_UP, PAD_DOWN, +800267ec: 3c058004 lui a1,0x8004 +800267f0: 24060018 li a2,24 + pad2_cheat_timer = SystemCreateTimer(PAD_CHEAT_TIMEOUT,true /* Repeat flag */,&PadTwoCleanCheatArray); + memset(cheatsArray,0, sizeof(TYPE_CHEAT) * PAD_MAX_CHEATS); +} + +void PadCheatHandler(uint8_t n_pad) +{ +800267f4: afb00028 sw s0,40(sp) + unsigned short available_keys[12] = { PAD_LEFT, PAD_RIGHT, PAD_UP, PAD_DOWN, +800267f8: 24a5f7ec addiu a1,a1,-2068 + pad2_cheat_timer = SystemCreateTimer(PAD_CHEAT_TIMEOUT,true /* Repeat flag */,&PadTwoCleanCheatArray); + memset(cheatsArray,0, sizeof(TYPE_CHEAT) * PAD_MAX_CHEATS); +} + +void PadCheatHandler(uint8_t n_pad) +{ +800267fc: 00808021 move s0,a0 + unsigned short available_keys[12] = { PAD_LEFT, PAD_RIGHT, PAD_UP, PAD_DOWN, +80026800: 27a40010 addiu a0,sp,16 + pad2_cheat_timer = SystemCreateTimer(PAD_CHEAT_TIMEOUT,true /* Repeat flag */,&PadTwoCleanCheatArray); + memset(cheatsArray,0, sizeof(TYPE_CHEAT) * PAD_MAX_CHEATS); +} + +void PadCheatHandler(uint8_t n_pad) +{ +80026804: afbf004c sw ra,76(sp) +80026808: afbe0048 sw s8,72(sp) +8002680c: afb70044 sw s7,68(sp) +80026810: afb60040 sw s6,64(sp) +80026814: afb5003c sw s5,60(sp) +80026818: afb40038 sw s4,56(sp) +8002681c: afb30034 sw s3,52(sp) +80026820: afb20030 sw s2,48(sp) + unsigned short available_keys[12] = { PAD_LEFT, PAD_RIGHT, PAD_UP, PAD_DOWN, +80026824: 0c00d75e jal 80035d78 <memcpy> +80026828: afb1002c sw s1,44(sp) + void (*clean_callback)(void); + bool success = false; + unsigned short * cheat_array; + TYPE_TIMER * timer; + + switch(n_pad) +8002682c: 1200000c beqz s0,80026860 <PadCheatHandler+0x78> +80026830: 24020001 li v0,1 +80026834: 16020013 bne s0,v0,80026884 <PadCheatHandler+0x9c> +80026838: 3c048004 lui a0,0x8004 + + case PAD_TWO: + released_callback = &PadTwoKeyReleased; + cheat_array = pad2_cheat_array; + clean_callback = &PadTwoCleanCheatArray; + timer = pad2_cheat_timer; +8002683c: 3c028007 lui v0,0x8007 + timer = pad1_cheat_timer; + break; + + case PAD_TWO: + released_callback = &PadTwoKeyReleased; + cheat_array = pad2_cheat_array; +80026840: 3c108004 lui s0,0x8004 + clean_callback = &PadTwoCleanCheatArray; +80026844: 3c128002 lui s2,0x8002 + clean_callback = &PadOneCleanCheatArray; + timer = pad1_cheat_timer; + break; + + case PAD_TWO: + released_callback = &PadTwoKeyReleased; +80026848: 3c158002 lui s5,0x8002 + cheat_array = pad2_cheat_array; + clean_callback = &PadTwoCleanCheatArray; + timer = pad2_cheat_timer; +8002684c: 8c561c68 lw s6,7272(v0) + timer = pad1_cheat_timer; + break; + + case PAD_TWO: + released_callback = &PadTwoKeyReleased; + cheat_array = pad2_cheat_array; +80026850: 26115ff4 addiu s1,s0,24564 + clean_callback = &PadTwoCleanCheatArray; +80026854: 26526a18 addiu s2,s2,27160 + timer = pad2_cheat_timer; + break; +80026858: 10000017 b 800268b8 <PadCheatHandler+0xd0> +8002685c: 26b567b4 addiu s5,s5,26548 + { + case PAD_ONE: + released_callback = &PadOneKeyReleased; + cheat_array = pad1_cheat_array; + clean_callback = &PadOneCleanCheatArray; + timer = pad1_cheat_timer; +80026860: 3c028007 lui v0,0x8007 + + switch(n_pad) + { + case PAD_ONE: + released_callback = &PadOneKeyReleased; + cheat_array = pad1_cheat_array; +80026864: 3c108004 lui s0,0x8004 + clean_callback = &PadOneCleanCheatArray; +80026868: 3c128002 lui s2,0x8002 + TYPE_TIMER * timer; + + switch(n_pad) + { + case PAD_ONE: + released_callback = &PadOneKeyReleased; +8002686c: 3c158002 lui s5,0x8002 + cheat_array = pad1_cheat_array; + clean_callback = &PadOneCleanCheatArray; + timer = pad1_cheat_timer; +80026870: 8c561c6c lw s6,7276(v0) + + switch(n_pad) + { + case PAD_ONE: + released_callback = &PadOneKeyReleased; + cheat_array = pad1_cheat_array; +80026874: 26116014 addiu s1,s0,24596 + clean_callback = &PadOneCleanCheatArray; +80026878: 26526a2c addiu s2,s2,27180 + timer = pad1_cheat_timer; + break; +8002687c: 1000000e b 800268b8 <PadCheatHandler+0xd0> +80026880: 26b56780 addiu s5,s5,26496 + clean_callback(); + } + } + + cheat_array[j] = key; +} +80026884: 8fbf004c lw ra,76(sp) +80026888: 8fbe0048 lw s8,72(sp) +8002688c: 8fb70044 lw s7,68(sp) +80026890: 8fb60040 lw s6,64(sp) +80026894: 8fb5003c lw s5,60(sp) +80026898: 8fb40038 lw s4,56(sp) +8002689c: 8fb30034 lw s3,52(sp) +800268a0: 8fb20030 lw s2,48(sp) +800268a4: 8fb1002c lw s1,44(sp) +800268a8: 8fb00028 lw s0,40(sp) + clean_callback = &PadTwoCleanCheatArray; + timer = pad2_cheat_timer; + break; + + default: + dprintf("Invalid pad called for PadCheatHandler()!\n"); +800268ac: 24840fa8 addiu a0,a0,4008 +800268b0: 0800ed8f j 8003b63c <printf> +800268b4: 27bd0050 addiu sp,sp,80 +800268b8: 3c138004 lui s3,0x8004 +800268bc: 26735fb4 addiu s3,s3,24500 + clean_callback = &PadOneCleanCheatArray; + timer = pad1_cheat_timer; + break; + + case PAD_TWO: + released_callback = &PadTwoKeyReleased; +800268c0: 00008021 move s0,zero +800268c4: 0260b821 move s7,s3 + return; + } + + for(i = 0; i < PAD_MAX_CHEATS; i++) + { + if(cheatsArray[i] != NULL) +800268c8: 8e650000 lw a1,0(s3) +800268cc: 00000000 nop +800268d0: 10a0001e beqz a1,8002694c <PadCheatHandler+0x164> +800268d4: 24060010 li a2,16 + { + if(SystemArrayCompare(cheat_array, cheatsArray[i]->Combination, CHEAT_ARRAY_SIZE) == true) +800268d8: 0c00a116 jal 80028458 <SystemArrayCompare> +800268dc: 02202021 move a0,s1 +800268e0: 1040001a beqz v0,8002694c <PadCheatHandler+0x164> +800268e4: 00000000 nop + { + if(cheatsArray[i]->Callback != NULL) +800268e8: 8e620000 lw v0,0(s3) +800268ec: 00000000 nop +800268f0: 8c420020 lw v0,32(v0) +800268f4: 00000000 nop +800268f8: 10400015 beqz v0,80026950 <PadCheatHandler+0x168> +800268fc: 26100001 addiu s0,s0,1 +80026900: 2610ffff addiu s0,s0,-1 + if(clean_callback != NULL) + { + clean_callback(); + } + + cheatsArray[i]->Callback(); +80026904: 00108080 sll s0,s0,0x2 + { + if(cheatsArray[i]->Callback != NULL) + { + if(clean_callback != NULL) + { + clean_callback(); +80026908: 0240f809 jalr s2 +8002690c: 02f08021 addu s0,s7,s0 + } + + cheatsArray[i]->Callback(); +80026910: 8e020000 lw v0,0(s0) + clean_callback(); + } + } + + cheat_array[j] = key; +} +80026914: 8fbf004c lw ra,76(sp) +80026918: 8fbe0048 lw s8,72(sp) +8002691c: 8fb70044 lw s7,68(sp) +80026920: 8fb60040 lw s6,64(sp) +80026924: 8fb5003c lw s5,60(sp) +80026928: 8fb40038 lw s4,56(sp) +8002692c: 8fb30034 lw s3,52(sp) +80026930: 8fb20030 lw s2,48(sp) +80026934: 8fb1002c lw s1,44(sp) +80026938: 8fb00028 lw s0,40(sp) + if(clean_callback != NULL) + { + clean_callback(); + } + + cheatsArray[i]->Callback(); +8002693c: 8c590020 lw t9,32(v0) +80026940: 00000000 nop +80026944: 03200008 jr t9 +80026948: 27bd0050 addiu sp,sp,80 +8002694c: 26100001 addiu s0,s0,1 + default: + dprintf("Invalid pad called for PadCheatHandler()!\n"); + return; + } + + for(i = 0; i < PAD_MAX_CHEATS; i++) +80026950: 24020010 li v0,16 +80026954: 1602ffdc bne s0,v0,800268c8 <PadCheatHandler+0xe0> +80026958: 26730004 addiu s3,s3,4 +8002695c: 0000f021 move s8,zero +80026960: 00008021 move s0,zero + } + } + } + } + + for(i = 0; i < sizeof(available_keys) / sizeof(unsigned short); i++) +80026964: 24170018 li s7,24 + { + if(released_callback(available_keys[i]) == true) +80026968: 27a20010 addiu v0,sp,16 +8002696c: 005e1021 addu v0,v0,s8 +80026970: 94530000 lhu s3,0(v0) +80026974: 02a0f809 jalr s5 +80026978: 02602021 move a0,s3 +8002697c: 10400005 beqz v0,80026994 <PadCheatHandler+0x1ac> +80026980: 02c02021 move a0,s6 + { + SystemTimerRestart(timer); +80026984: 0c00a10d jal 80028434 <SystemTimerRestart> +80026988: 26100001 addiu s0,s0,1 + key = available_keys[i]; + keys_released++; +8002698c: 321000ff andi s0,s0,0xff + for(i = 0; i < sizeof(available_keys) / sizeof(unsigned short); i++) + { + if(released_callback(available_keys[i]) == true) + { + SystemTimerRestart(timer); + key = available_keys[i]; +80026990: 0260a021 move s4,s3 +80026994: 27de0002 addiu s8,s8,2 + } + } + } + } + + for(i = 0; i < sizeof(available_keys) / sizeof(unsigned short); i++) +80026998: 17d7fff4 bne s8,s7,8002696c <PadCheatHandler+0x184> +8002699c: 27a20010 addiu v0,sp,16 + key = available_keys[i]; + keys_released++; + } + } + + if(keys_released != 1) +800269a0: 24020001 li v0,1 +800269a4: 16020010 bne s0,v0,800269e8 <PadCheatHandler+0x200> +800269a8: 02201021 move v0,s1 +800269ac: 00008021 move s0,zero + return; + } + + // Check for full array (return success = true if an empty array + // element was found. + for(j = 0; j < CHEAT_ARRAY_SIZE; j++) +800269b0: 24030010 li v1,16 + { + if(cheat_array[j] == 0) +800269b4: 94440000 lhu a0,0(v0) +800269b8: 00000000 nop +800269bc: 10800007 beqz a0,800269dc <PadCheatHandler+0x1f4> +800269c0: 00000000 nop + return; + } + + // Check for full array (return success = true if an empty array + // element was found. + for(j = 0; j < CHEAT_ARRAY_SIZE; j++) +800269c4: 26100001 addiu s0,s0,1 +800269c8: 321000ff andi s0,s0,0xff +800269cc: 1603fff9 bne s0,v1,800269b4 <PadCheatHandler+0x1cc> +800269d0: 24420002 addiu v0,v0,2 + if(success == false) + { + if(clean_callback != NULL) + { + // Overrun + clean_callback(); +800269d4: 0240f809 jalr s2 +800269d8: 00000000 nop + } + } + + cheat_array[j] = key; +800269dc: 00108040 sll s0,s0,0x1 +800269e0: 02308021 addu s0,s1,s0 +800269e4: a6140000 sh s4,0(s0) +} +800269e8: 8fbf004c lw ra,76(sp) +800269ec: 8fbe0048 lw s8,72(sp) +800269f0: 8fb70044 lw s7,68(sp) +800269f4: 8fb60040 lw s6,64(sp) +800269f8: 8fb5003c lw s5,60(sp) +800269fc: 8fb40038 lw s4,56(sp) +80026a00: 8fb30034 lw s3,52(sp) +80026a04: 8fb20030 lw s2,48(sp) +80026a08: 8fb1002c lw s1,44(sp) +80026a0c: 8fb00028 lw s0,40(sp) +80026a10: 03e00008 jr ra +80026a14: 27bd0050 addiu sp,sp,80 + +80026a18 <PadTwoCleanCheatArray>: + memset(pad1_cheat_array,0,sizeof(unsigned short) * CHEAT_ARRAY_SIZE); +} + +void PadTwoCleanCheatArray(void) +{ + memset(pad2_cheat_array,0,sizeof(unsigned short) * CHEAT_ARRAY_SIZE); +80026a18: 3c048004 lui a0,0x8004 +80026a1c: 24060020 li a2,32 +80026a20: 00002821 move a1,zero +80026a24: 0800d7ab j 80035eac <memset> +80026a28: 24845ff4 addiu a0,a0,24564 + +80026a2c <PadOneCleanCheatArray>: + return true; +} + +void PadOneCleanCheatArray(void) +{ + memset(pad1_cheat_array,0,sizeof(unsigned short) * CHEAT_ARRAY_SIZE); +80026a2c: 3c048004 lui a0,0x8004 +80026a30: 24060020 li a2,32 +80026a34: 00002821 move a1,zero +80026a38: 0800d7ab j 80035eac <memset> +80026a3c: 24846014 addiu a0,a0,24596 + +80026a40 <PadOneConnected>: + + return PadOne; +} + +bool PadOneConnected(void) +{ +80026a40: 27bdffd8 addiu sp,sp,-40 + +psx_pad_state PadOneGetState(void) +{ + psx_pad_state PadOne; + + PSX_PollPad_Fast(PAD_ONE,&PadOne); +80026a44: 27a50010 addiu a1,sp,16 + + return PadOne; +} + +bool PadOneConnected(void) +{ +80026a48: afbf0024 sw ra,36(sp) + +psx_pad_state PadOneGetState(void) +{ + psx_pad_state PadOne; + + PSX_PollPad_Fast(PAD_ONE,&PadOne); +80026a4c: 0c00d0ba jal 800342e8 <PSX_PollPad_Fast> +80026a50: 00002021 move a0,zero + + return PadOne; +80026a54: 93a20010 lbu v0,16(sp) + { + return false; + } + + return true; +} +80026a58: 8fbf0024 lw ra,36(sp) +80026a5c: 2c420001 sltiu v0,v0,1 +80026a60: 03e00008 jr ra +80026a64: 27bd0028 addiu sp,sp,40 + +80026a68 <PadOneAnyKeyPressed>: + +bool PadOneAnyKeyPressed(void) +{ + return (bool)pad1; +80026a68: 3c028007 lui v0,0x8007 +80026a6c: 94421c7a lhu v0,7290(v0) +} +80026a70: 03e00008 jr ra +80026a74: 0002102b sltu v0,zero,v0 + +80026a78 <PadOneDirectionKeyPressed>: + +bool PadOneDirectionKeyPressed(void) +{ + return ( (PadOneKeyPressed(PAD_UP) == true) +80026a78: 3c028007 lui v0,0x8007 +80026a7c: 94421c7a lhu v0,7290(v0) +80026a80: 00000000 nop +80026a84: 3042f000 andi v0,v0,0xf000 + (PadOneKeyPressed(PAD_LEFT) == true) + || + (PadOneKeyPressed(PAD_RIGHT) == true) + || + (PadOneKeyPressed(PAD_DOWN) == true) ); +} +80026a88: 03e00008 jr ra +80026a8c: 0002102b sltu v0,zero,v0 + +80026a90 <PadOneDirectionKeyReleased>: + +bool PadOneDirectionKeyReleased(void) +{ +80026a90: 27bdffe8 addiu sp,sp,-24 +80026a94: afbf0014 sw ra,20(sp) + return ( (PadOneKeyReleased(PAD_UP) == true) +80026a98: 0c0099e0 jal 80026780 <PadOneKeyReleased> +80026a9c: 24041000 li a0,4096 + || + (PadOneKeyReleased(PAD_LEFT) == true) + || + (PadOneKeyReleased(PAD_RIGHT) == true) + || +80026aa0: 1440000c bnez v0,80026ad4 <PadOneDirectionKeyReleased+0x44> +80026aa4: 24050001 li a1,1 + +bool PadOneDirectionKeyReleased(void) +{ + return ( (PadOneKeyReleased(PAD_UP) == true) + || + (PadOneKeyReleased(PAD_LEFT) == true) +80026aa8: 0c0099e0 jal 80026780 <PadOneKeyReleased> +80026aac: 34048000 li a0,0x8000 +} + +bool PadOneDirectionKeyReleased(void) +{ + return ( (PadOneKeyReleased(PAD_UP) == true) + || +80026ab0: 14400008 bnez v0,80026ad4 <PadOneDirectionKeyReleased+0x44> +80026ab4: 00000000 nop + (PadOneKeyReleased(PAD_LEFT) == true) + || + (PadOneKeyReleased(PAD_RIGHT) == true) +80026ab8: 0c0099e0 jal 80026780 <PadOneKeyReleased> +80026abc: 24042000 li a0,8192 +bool PadOneDirectionKeyReleased(void) +{ + return ( (PadOneKeyReleased(PAD_UP) == true) + || + (PadOneKeyReleased(PAD_LEFT) == true) + || +80026ac0: 14400004 bnez v0,80026ad4 <PadOneDirectionKeyReleased+0x44> +80026ac4: 00000000 nop + (PadOneKeyReleased(PAD_RIGHT) == true) + || + (PadOneKeyReleased(PAD_DOWN) == true) ); +80026ac8: 0c0099e0 jal 80026780 <PadOneKeyReleased> +80026acc: 24044000 li a0,16384 +80026ad0: 00402821 move a1,v0 +} +80026ad4: 8fbf0014 lw ra,20(sp) +80026ad8: 30a20001 andi v0,a1,0x1 +80026adc: 03e00008 jr ra +80026ae0: 27bd0018 addiu sp,sp,24 + +80026ae4 <PadTwoDirectionKeyReleased>: + +bool PadTwoDirectionKeyReleased(void) +{ +80026ae4: 27bdffe8 addiu sp,sp,-24 +80026ae8: afbf0014 sw ra,20(sp) + return ( (PadTwoKeyReleased(PAD_UP) == true) +80026aec: 0c0099ed jal 800267b4 <PadTwoKeyReleased> +80026af0: 24041000 li a0,4096 + || + (PadTwoKeyReleased(PAD_LEFT) == true) + || + (PadTwoKeyReleased(PAD_RIGHT) == true) + || +80026af4: 1440000c bnez v0,80026b28 <PadTwoDirectionKeyReleased+0x44> +80026af8: 24050001 li a1,1 + +bool PadTwoDirectionKeyReleased(void) +{ + return ( (PadTwoKeyReleased(PAD_UP) == true) + || + (PadTwoKeyReleased(PAD_LEFT) == true) +80026afc: 0c0099ed jal 800267b4 <PadTwoKeyReleased> +80026b00: 34048000 li a0,0x8000 +} + +bool PadTwoDirectionKeyReleased(void) +{ + return ( (PadTwoKeyReleased(PAD_UP) == true) + || +80026b04: 14400008 bnez v0,80026b28 <PadTwoDirectionKeyReleased+0x44> +80026b08: 00000000 nop + (PadTwoKeyReleased(PAD_LEFT) == true) + || + (PadTwoKeyReleased(PAD_RIGHT) == true) +80026b0c: 0c0099ed jal 800267b4 <PadTwoKeyReleased> +80026b10: 24042000 li a0,8192 +bool PadTwoDirectionKeyReleased(void) +{ + return ( (PadTwoKeyReleased(PAD_UP) == true) + || + (PadTwoKeyReleased(PAD_LEFT) == true) + || +80026b14: 14400004 bnez v0,80026b28 <PadTwoDirectionKeyReleased+0x44> +80026b18: 00000000 nop + (PadTwoKeyReleased(PAD_RIGHT) == true) + || + (PadTwoKeyReleased(PAD_DOWN) == true) ); +80026b1c: 0c0099ed jal 800267b4 <PadTwoKeyReleased> +80026b20: 24044000 li a0,16384 +80026b24: 00402821 move a1,v0 +} +80026b28: 8fbf0014 lw ra,20(sp) +80026b2c: 30a20001 andi v0,a1,0x1 +80026b30: 03e00008 jr ra +80026b34: 27bd0018 addiu sp,sp,24 + +80026b38 <PadTwoDirectionKeyPressed>: + +bool PadTwoDirectionKeyPressed(void) +{ + return ( (PadTwoKeyPressed(PAD_UP) == true) +80026b38: 3c028007 lui v0,0x8007 +80026b3c: 94421c78 lhu v0,7288(v0) +80026b40: 00000000 nop +80026b44: 3042f000 andi v0,v0,0xf000 + (PadTwoKeyPressed(PAD_LEFT) == true) + || + (PadTwoKeyPressed(PAD_RIGHT) == true) + || + (PadTwoKeyPressed(PAD_DOWN) == true) ); +} +80026b48: 03e00008 jr ra +80026b4c: 0002102b sltu v0,zero,v0 + +80026b50 <PadTwoAnyKeyPressed>: + +bool PadTwoAnyKeyPressed(void) +{ + return (bool)pad2; +80026b50: 3c028007 lui v0,0x8007 +80026b54: 94421c78 lhu v0,7288(v0) +} +80026b58: 03e00008 jr ra +80026b5c: 0002102b sltu v0,zero,v0 + +80026b60 <PadOneKeyPressed>: + +bool PadOneKeyPressed(unsigned short key) +{ + return (bool)( pad1 & key ); +80026b60: 3c028007 lui v0,0x8007 +80026b64: 94421c7a lhu v0,7290(v0) +80026b68: 00000000 nop +80026b6c: 00821024 and v0,a0,v0 +} +80026b70: 03e00008 jr ra +80026b74: 0002102b sltu v0,zero,v0 + +80026b78 <PadTwoKeyPressed>: + +bool PadTwoKeyPressed(unsigned short key) +{ + return (bool)( pad2 & key ); +80026b78: 3c028007 lui v0,0x8007 +80026b7c: 94421c78 lhu v0,7288(v0) +80026b80: 00000000 nop +80026b84: 00821024 and v0,a0,v0 +} +80026b88: 03e00008 jr ra +80026b8c: 0002102b sltu v0,zero,v0 + +80026b90 <PadOneIsVibrationEnabled>: + } +} + +bool PadOneIsVibrationEnabled(void) +{ + return (pad1_vibration_timer & true); +80026b90: 3c028007 lui v0,0x8007 +80026b94: 90421c72 lbu v0,7282(v0) +} +80026b98: 03e00008 jr ra +80026b9c: 30420001 andi v0,v0,0x1 + +80026ba0 <PadTwoIsVibrationEnabled>: + +bool PadTwoIsVibrationEnabled(void) +{ + return (pad2_vibration_timer & true); +80026ba0: 3c028007 lui v0,0x8007 +80026ba4: 90421c70 lbu v0,7280(v0) +} +80026ba8: 03e00008 jr ra +80026bac: 30420001 andi v0,v0,0x1 + +80026bb0 <UpdatePads>: + +bool UpdatePads(void) +{ +80026bb0: 27bdffe8 addiu sp,sp,-24 +80026bb4: afbf0014 sw ra,20(sp) + return false; +} + +void PadOneVibrationHandler(void) +{ + if(PadOneIsVibrationEnabled() == true) +80026bb8: 0c009ae4 jal 80026b90 <PadOneIsVibrationEnabled> +80026bbc: 00000000 nop +80026bc0: 1040000c beqz v0,80026bf4 <UpdatePads+0x44> +80026bc4: 00000000 nop + { + pad_enable_vibration(PAD_ONE); +80026bc8: 0c00ca38 jal 800328e0 <pad_enable_vibration> +80026bcc: 00002021 move a0,zero + pad_set_vibration(PAD_ONE,pad1_small_vibration_force,pad1_big_vibration_force); +80026bd0: 00003021 move a2,zero +80026bd4: 00002821 move a1,zero +80026bd8: 0c00ca66 jal 80032998 <pad_set_vibration> +80026bdc: 00002021 move a0,zero + pad1_vibration_timer--; +80026be0: 3c038007 lui v1,0x8007 +80026be4: 94621c72 lhu v0,7282(v1) +80026be8: 00000000 nop +80026bec: 2442ffff addiu v0,v0,-1 +80026bf0: a4621c72 sh v0,7282(v1) + } +} + +void PadTwoVibrationHandler(void) +{ + if(PadTwoIsVibrationEnabled() == true) +80026bf4: 0c009ae8 jal 80026ba0 <PadTwoIsVibrationEnabled> +80026bf8: 00000000 nop +80026bfc: 1040000c beqz v0,80026c30 <UpdatePads+0x80> +80026c00: 00000000 nop + { + pad_enable_vibration(PAD_TWO); +80026c04: 0c00ca38 jal 800328e0 <pad_enable_vibration> +80026c08: 24040001 li a0,1 + pad_set_vibration(PAD_TWO,pad2_small_vibration_force,pad2_big_vibration_force); +80026c0c: 00003021 move a2,zero +80026c10: 00002821 move a1,zero +80026c14: 0c00ca66 jal 80032998 <pad_set_vibration> +80026c18: 24040001 li a0,1 + pad2_vibration_timer--; +80026c1c: 3c038007 lui v1,0x8007 +80026c20: 94621c70 lhu v0,7280(v1) +80026c24: 00000000 nop +80026c28: 2442ffff addiu v0,v0,-1 +80026c2c: a4621c70 sh v0,7280(v1) +{ + PadOneVibrationHandler(); + + PadTwoVibrationHandler(); + + PadCheatHandler(PAD_ONE); +80026c30: 0c0099fa jal 800267e8 <PadCheatHandler> +80026c34: 00002021 move a0,zero + + PadCheatHandler(PAD_TWO); +80026c38: 0c0099fa jal 800267e8 <PadCheatHandler> +80026c3c: 24040001 li a0,1 + + // Get now-old pad data + previous_pad1 = pad1; +80026c40: 3c048007 lui a0,0x8007 +80026c44: 94831c7a lhu v1,7290(a0) +80026c48: 3c028007 lui v0,0x8007 + previous_pad2 = pad2; +80026c4c: 3c058007 lui a1,0x8007 + PadCheatHandler(PAD_ONE); + + PadCheatHandler(PAD_TWO); + + // Get now-old pad data + previous_pad1 = pad1; +80026c50: a4431c76 sh v1,7286(v0) + previous_pad2 = pad2; +80026c54: 94a31c78 lhu v1,7288(a1) +80026c58: 3c028007 lui v0,0x8007 + + PSX_ReadPad(&pad1,&pad2); +80026c5c: 24a51c78 addiu a1,a1,7288 +80026c60: 24841c7a addiu a0,a0,7290 +80026c64: 0c00d062 jal 80034188 <PSX_ReadPad> +80026c68: a4431c74 sh v1,7284(v0) + { + return false; + } + + return true; +} +80026c6c: 8fbf0014 lw ra,20(sp) + previous_pad1 = pad1; + previous_pad2 = pad2; + + PSX_ReadPad(&pad1,&pad2); + + if(PadOneConnected() == false) +80026c70: 08009a90 j 80026a40 <PadOneConnected> +80026c74: 27bd0018 addiu sp,sp,24 + +80026c78 <PadGetKeyIndex>: +{ + return ( !(pad2 & key) && (previous_pad2 & key) ); +} + +uint8_t PadGetKeyIndex(unsigned short key) +{ +80026c78: 3084ffff andi a0,a0,0xffff + switch(key) +80026c7c: 24030020 li v1,32 +80026c80: 1083002a beq a0,v1,80026d2c <PadGetKeyIndex+0xb4> +80026c84: 24020003 li v0,3 +80026c88: 2c820021 sltiu v0,a0,33 +80026c8c: 10400012 beqz v0,80026cd8 <PadGetKeyIndex+0x60> +80026c90: 24031000 li v1,4096 +80026c94: 24030004 li v1,4 +80026c98: 10830024 beq a0,v1,80026d2c <PadGetKeyIndex+0xb4> +80026c9c: 24020008 li v0,8 +80026ca0: 2c820005 sltiu v0,a0,5 +80026ca4: 10400007 beqz v0,80026cc4 <PadGetKeyIndex+0x4c> +80026ca8: 24030008 li v1,8 +80026cac: 24030001 li v1,1 +80026cb0: 1083001e beq a0,v1,80026d2c <PadGetKeyIndex+0xb4> +80026cb4: 24020009 li v0,9 + case PAD_L2: + return PAD_L2_INDEX; + break; + + case PAD_R2: + return PAD_R2_INDEX; +80026cb8: 2402000b li v0,11 + return ( !(pad2 & key) && (previous_pad2 & key) ); +} + +uint8_t PadGetKeyIndex(unsigned short key) +{ + switch(key) +80026cbc: 10000018 b 80026d20 <PadGetKeyIndex+0xa8> +80026cc0: 24030002 li v1,2 +80026cc4: 10830019 beq a0,v1,80026d2c <PadGetKeyIndex+0xb4> +80026cc8: 2402000a li v0,10 + case PAD_SQUARE: + return PAD_SQUARE_INDEX; + break; + + case PAD_TRIANGLE: + return PAD_TRIANGLE_INDEX; +80026ccc: 24020002 li v0,2 + return ( !(pad2 & key) && (previous_pad2 & key) ); +} + +uint8_t PadGetKeyIndex(unsigned short key) +{ + switch(key) +80026cd0: 10000013 b 80026d20 <PadGetKeyIndex+0xa8> +80026cd4: 24030010 li v1,16 +80026cd8: 10830014 beq a0,v1,80026d2c <PadGetKeyIndex+0xb4> +80026cdc: 24020006 li v0,6 +80026ce0: 2c821001 sltiu v0,a0,4097 +80026ce4: 10400007 beqz v0,80026d04 <PadGetKeyIndex+0x8c> +80026ce8: 24034000 li v1,16384 +80026cec: 24030040 li v1,64 +80026cf0: 1083000e beq a0,v1,80026d2c <PadGetKeyIndex+0xb4> +80026cf4: 00001021 move v0,zero + case PAD_CROSS: + return PAD_CROSS_INDEX; + break; + + case PAD_SQUARE: + return PAD_SQUARE_INDEX; +80026cf8: 24020001 li v0,1 + return ( !(pad2 & key) && (previous_pad2 & key) ); +} + +uint8_t PadGetKeyIndex(unsigned short key) +{ + switch(key) +80026cfc: 10000008 b 80026d20 <PadGetKeyIndex+0xa8> +80026d00: 24030080 li v1,128 +80026d04: 10830009 beq a0,v1,80026d2c <PadGetKeyIndex+0xb4> +80026d08: 24020004 li v0,4 +80026d0c: 34038000 li v1,0x8000 +80026d10: 10830006 beq a0,v1,80026d2c <PadGetKeyIndex+0xb4> +80026d14: 24020005 li v0,5 + case PAD_UP: + return PAD_UP_INDEX; + break; + + case PAD_RIGHT: + return PAD_RIGHT_INDEX; +80026d18: 24020007 li v0,7 + return ( !(pad2 & key) && (previous_pad2 & key) ); +} + +uint8_t PadGetKeyIndex(unsigned short key) +{ + switch(key) +80026d1c: 24032000 li v1,8192 +80026d20: 10830002 beq a0,v1,80026d2c <PadGetKeyIndex+0xb4> +80026d24: 00000000 nop + case PAD_R2: + return PAD_R2_INDEX; + break; + + default: + return NUMBER_OF_KEYS; +80026d28: 2402000c li v0,12 + break; + } +} +80026d2c: 03e00008 jr ra +80026d30: 00000000 nop + +80026d34 <PadOneKeyRepeat>: +{ + return (bool)( pad2 & key ); +} + +bool PadOneKeyRepeat(unsigned short key, uint8_t time) +{ +80026d34: 27bdffe8 addiu sp,sp,-24 +80026d38: afbf0014 sw ra,20(sp) + uint8_t key_index = PadGetKeyIndex(key); +80026d3c: 0c009b1e jal 80026c78 <PadGetKeyIndex> +80026d40: 3084ffff andi a0,a0,0xffff + + if(key_index == NUMBER_OF_KEYS) +80026d44: 2403000c li v1,12 +80026d48: 14430003 bne v0,v1,80026d58 <PadOneKeyRepeat+0x24> +80026d4c: 3c038004 lui v1,0x8004 + { + return false; +80026d50: 1000000e b 80026d8c <PadOneKeyRepeat+0x58> +80026d54: 00001021 move v0,zero + } + + pad1_keys_repeat[key_index]++; +80026d58: 24636040 addiu v1,v1,24640 +80026d5c: 00431021 addu v0,v0,v1 +80026d60: 90430000 lbu v1,0(v0) +80026d64: 30a500ff andi a1,a1,0xff +80026d68: 24630001 addiu v1,v1,1 +80026d6c: 306300ff andi v1,v1,0xff + + if(pad1_keys_repeat[key_index] >= time) +80026d70: 0065282b sltu a1,v1,a1 +80026d74: 10a00003 beqz a1,80026d84 <PadOneKeyRepeat+0x50> +80026d78: 00000000 nop + if(key_index == NUMBER_OF_KEYS) + { + return false; + } + + pad1_keys_repeat[key_index]++; +80026d7c: 1000fff4 b 80026d50 <PadOneKeyRepeat+0x1c> +80026d80: a0430000 sb v1,0(v0) + + if(pad1_keys_repeat[key_index] >= time) + { + pad1_keys_repeat[key_index] = 0; +80026d84: a0400000 sb zero,0(v0) + return true; +80026d88: 24020001 li v0,1 + } + + return false; +} +80026d8c: 8fbf0014 lw ra,20(sp) +80026d90: 00000000 nop +80026d94: 03e00008 jr ra +80026d98: 27bd0018 addiu sp,sp,24 + +80026d9c <PadTwoKeyRepeat>: + +bool PadTwoKeyRepeat(unsigned short key, uint8_t time) +{ +80026d9c: 27bdffe8 addiu sp,sp,-24 +80026da0: afbf0014 sw ra,20(sp) + uint8_t key_index = PadGetKeyIndex(key); +80026da4: 0c009b1e jal 80026c78 <PadGetKeyIndex> +80026da8: 3084ffff andi a0,a0,0xffff + + if(key_index == NUMBER_OF_KEYS) +80026dac: 2403000c li v1,12 +80026db0: 14430003 bne v0,v1,80026dc0 <PadTwoKeyRepeat+0x24> +80026db4: 3c038004 lui v1,0x8004 + { + return false; +80026db8: 1000000e b 80026df4 <PadTwoKeyRepeat+0x58> +80026dbc: 00001021 move v0,zero + } + + pad2_keys_repeat[key_index]++; +80026dc0: 24636034 addiu v1,v1,24628 +80026dc4: 00431021 addu v0,v0,v1 +80026dc8: 90430000 lbu v1,0(v0) +80026dcc: 30a500ff andi a1,a1,0xff +80026dd0: 24630001 addiu v1,v1,1 +80026dd4: 306300ff andi v1,v1,0xff + + if(pad2_keys_repeat[key_index] >= time) +80026dd8: 0065282b sltu a1,v1,a1 +80026ddc: 10a00003 beqz a1,80026dec <PadTwoKeyRepeat+0x50> +80026de0: 00000000 nop + if(key_index == NUMBER_OF_KEYS) + { + return false; + } + + pad2_keys_repeat[key_index]++; +80026de4: 1000fff4 b 80026db8 <PadTwoKeyRepeat+0x1c> +80026de8: a0430000 sb v1,0(v0) + + if(pad2_keys_repeat[key_index] >= time) + { + pad2_keys_repeat[key_index] = 0; +80026dec: a0400000 sb zero,0(v0) + return true; +80026df0: 24020001 li v0,1 + } + + return false; +} +80026df4: 8fbf0014 lw ra,20(sp) +80026df8: 00000000 nop +80026dfc: 03e00008 jr ra +80026e00: 27bd0018 addiu sp,sp,24 + +80026e04 <PadOneGetAddress>: +} + +unsigned short * PadOneGetAddress(void) +{ + return &pad1; +} +80026e04: 3c028007 lui v0,0x8007 +80026e08: 03e00008 jr ra +80026e0c: 24421c7a addiu v0,v0,7290 + +80026e10 <PadClearData>: + +void PadClearData(void) +{ + pad1 = 0; +80026e10: 3c028007 lui v0,0x8007 +80026e14: a4401c7a sh zero,7290(v0) + pad2 = 0; +80026e18: 3c028007 lui v0,0x8007 +80026e1c: a4401c78 sh zero,7288(v0) + + previous_pad1 = 0; +80026e20: 3c028007 lui v0,0x8007 +80026e24: a4401c76 sh zero,7286(v0) + previous_pad2 = 0; +80026e28: 3c028007 lui v0,0x8007 +80026e2c: 03e00008 jr ra +80026e30: a4401c74 sh zero,7284(v0) + +80026e34 <PadInit>: +} + +void PadInit(void) +{ + pad1_cheat_timer = SystemCreateTimer(PAD_CHEAT_TIMEOUT,true /* Repeat flag */,&PadOneCleanCheatArray); +80026e34: 3c068002 lui a2,0x8002 + previous_pad1 = 0; + previous_pad2 = 0; +} + +void PadInit(void) +{ +80026e38: 27bdffe8 addiu sp,sp,-24 + pad1_cheat_timer = SystemCreateTimer(PAD_CHEAT_TIMEOUT,true /* Repeat flag */,&PadOneCleanCheatArray); +80026e3c: 24c66a2c addiu a2,a2,27180 +80026e40: 24050001 li a1,1 + previous_pad1 = 0; + previous_pad2 = 0; +} + +void PadInit(void) +{ +80026e44: afbf0014 sw ra,20(sp) + pad1_cheat_timer = SystemCreateTimer(PAD_CHEAT_TIMEOUT,true /* Repeat flag */,&PadOneCleanCheatArray); +80026e48: 0c00a075 jal 800281d4 <SystemCreateTimer> +80026e4c: 24040002 li a0,2 + pad2_cheat_timer = SystemCreateTimer(PAD_CHEAT_TIMEOUT,true /* Repeat flag */,&PadTwoCleanCheatArray); +80026e50: 3c068002 lui a2,0x8002 + previous_pad2 = 0; +} + +void PadInit(void) +{ + pad1_cheat_timer = SystemCreateTimer(PAD_CHEAT_TIMEOUT,true /* Repeat flag */,&PadOneCleanCheatArray); +80026e54: 3c038007 lui v1,0x8007 + pad2_cheat_timer = SystemCreateTimer(PAD_CHEAT_TIMEOUT,true /* Repeat flag */,&PadTwoCleanCheatArray); +80026e58: 24c66a18 addiu a2,a2,27160 +80026e5c: 24050001 li a1,1 +80026e60: 24040002 li a0,2 +80026e64: 0c00a075 jal 800281d4 <SystemCreateTimer> +80026e68: ac621c6c sw v0,7276(v1) + memset(cheatsArray,0, sizeof(TYPE_CHEAT) * PAD_MAX_CHEATS); +} +80026e6c: 8fbf0014 lw ra,20(sp) + +void PadInit(void) +{ + pad1_cheat_timer = SystemCreateTimer(PAD_CHEAT_TIMEOUT,true /* Repeat flag */,&PadOneCleanCheatArray); + pad2_cheat_timer = SystemCreateTimer(PAD_CHEAT_TIMEOUT,true /* Repeat flag */,&PadTwoCleanCheatArray); + memset(cheatsArray,0, sizeof(TYPE_CHEAT) * PAD_MAX_CHEATS); +80026e70: 3c048004 lui a0,0x8004 +} + +void PadInit(void) +{ + pad1_cheat_timer = SystemCreateTimer(PAD_CHEAT_TIMEOUT,true /* Repeat flag */,&PadOneCleanCheatArray); + pad2_cheat_timer = SystemCreateTimer(PAD_CHEAT_TIMEOUT,true /* Repeat flag */,&PadTwoCleanCheatArray); +80026e74: 3c038007 lui v1,0x8007 + memset(cheatsArray,0, sizeof(TYPE_CHEAT) * PAD_MAX_CHEATS); +80026e78: 24060240 li a2,576 +80026e7c: 00002821 move a1,zero +80026e80: 24845fb4 addiu a0,a0,24500 +} +80026e84: 27bd0018 addiu sp,sp,24 + +void PadInit(void) +{ + pad1_cheat_timer = SystemCreateTimer(PAD_CHEAT_TIMEOUT,true /* Repeat flag */,&PadOneCleanCheatArray); + pad2_cheat_timer = SystemCreateTimer(PAD_CHEAT_TIMEOUT,true /* Repeat flag */,&PadTwoCleanCheatArray); + memset(cheatsArray,0, sizeof(TYPE_CHEAT) * PAD_MAX_CHEATS); +80026e88: 0800d7ab j 80035eac <memset> +80026e8c: ac621c68 sw v0,7272(v1) + +80026e90 <PadAddCheat>: + +bool PadAddCheat(TYPE_CHEAT * cheat) +{ + static uint8_t idx = 0; + + if(idx >= PAD_MAX_CHEATS) +80026e90: 3c038007 lui v1,0x8007 +80026e94: 90621c64 lbu v0,7268(v1) +80026e98: 00000000 nop +80026e9c: 2c450010 sltiu a1,v0,16 +80026ea0: 14a0000a bnez a1,80026ecc <PadAddCheat+0x3c> +80026ea4: 24450001 addiu a1,v0,1 + { + dprintf("Maximum number of cheats exceeded!\n"); +80026ea8: 3c048004 lui a0,0x8004 + + cheat_array[j] = key; +} + +bool PadAddCheat(TYPE_CHEAT * cheat) +{ +80026eac: 27bdffe8 addiu sp,sp,-24 +80026eb0: afbf0014 sw ra,20(sp) + static uint8_t idx = 0; + + if(idx >= PAD_MAX_CHEATS) + { + dprintf("Maximum number of cheats exceeded!\n"); +80026eb4: 0c00ed8f jal 8003b63c <printf> +80026eb8: 24840fd4 addiu a0,a0,4052 + } + + cheatsArray[idx++] = cheat; + + return true; +} +80026ebc: 8fbf0014 lw ra,20(sp) + static uint8_t idx = 0; + + if(idx >= PAD_MAX_CHEATS) + { + dprintf("Maximum number of cheats exceeded!\n"); + return false; +80026ec0: 00001021 move v0,zero + } + + cheatsArray[idx++] = cheat; + + return true; +} +80026ec4: 03e00008 jr ra +80026ec8: 27bd0018 addiu sp,sp,24 + { + dprintf("Maximum number of cheats exceeded!\n"); + return false; + } + + cheatsArray[idx++] = cheat; +80026ecc: a0651c64 sb a1,7268(v1) +80026ed0: 3c038004 lui v1,0x8004 +80026ed4: 24635fb4 addiu v1,v1,24500 +80026ed8: 00021080 sll v0,v0,0x2 +80026edc: 00431021 addu v0,v0,v1 +80026ee0: ac440000 sw a0,0(v0) + + return true; +80026ee4: 03e00008 jr ra +80026ee8: 24020001 li v0,1 + +80026eec <PltParserLoadFile>: + * Local Prototypes + * *************************************/ +static void PltParserResetBuffers(TYPE_FLIGHT_DATA * ptrFlightData); + +bool PltParserLoadFile(char * strPath, TYPE_FLIGHT_DATA * ptrFlightData) +{ +80026eec: 27bdff48 addiu sp,sp,-184 +80026ef0: afb00090 sw s0,144(sp) + char * lineBufferPtr; + char * pltBufferSavePtr; + char strHour[PLT_HOUR_MINUTE_CHARACTERS]; + char strMinutes[PLT_HOUR_MINUTE_CHARACTERS]; + + if(SystemLoadFileToBuffer(strPath,(uint8_t*)strPltBuffer,PLT_BUFFER_SIZE) == false) +80026ef4: 3c108004 lui s0,0x8004 + * Local Prototypes + * *************************************/ +static void PltParserResetBuffers(TYPE_FLIGHT_DATA * ptrFlightData); + +bool PltParserLoadFile(char * strPath, TYPE_FLIGHT_DATA * ptrFlightData) +{ +80026ef8: afb10094 sw s1,148(sp) + char * lineBufferPtr; + char * pltBufferSavePtr; + char strHour[PLT_HOUR_MINUTE_CHARACTERS]; + char strMinutes[PLT_HOUR_MINUTE_CHARACTERS]; + + if(SystemLoadFileToBuffer(strPath,(uint8_t*)strPltBuffer,PLT_BUFFER_SIZE) == false) +80026efc: 24062800 li a2,10240 + * Local Prototypes + * *************************************/ +static void PltParserResetBuffers(TYPE_FLIGHT_DATA * ptrFlightData); + +bool PltParserLoadFile(char * strPath, TYPE_FLIGHT_DATA * ptrFlightData) +{ +80026f00: 00a08821 move s1,a1 + char * lineBufferPtr; + char * pltBufferSavePtr; + char strHour[PLT_HOUR_MINUTE_CHARACTERS]; + char strMinutes[PLT_HOUR_MINUTE_CHARACTERS]; + + if(SystemLoadFileToBuffer(strPath,(uint8_t*)strPltBuffer,PLT_BUFFER_SIZE) == false) +80026f04: 2605604c addiu a1,s0,24652 + * Local Prototypes + * *************************************/ +static void PltParserResetBuffers(TYPE_FLIGHT_DATA * ptrFlightData); + +bool PltParserLoadFile(char * strPath, TYPE_FLIGHT_DATA * ptrFlightData) +{ +80026f08: afb500a4 sw s5,164(sp) +80026f0c: afb20098 sw s2,152(sp) +80026f10: afbf00b4 sw ra,180(sp) +80026f14: afbe00b0 sw s8,176(sp) +80026f18: afb700ac sw s7,172(sp) +80026f1c: afb600a8 sw s6,168(sp) +80026f20: afb400a0 sw s4,160(sp) +80026f24: afb3009c sw s3,156(sp) + char * lineBufferPtr; + char * pltBufferSavePtr; + char strHour[PLT_HOUR_MINUTE_CHARACTERS]; + char strMinutes[PLT_HOUR_MINUTE_CHARACTERS]; + + if(SystemLoadFileToBuffer(strPath,(uint8_t*)strPltBuffer,PLT_BUFFER_SIZE) == false) +80026f28: 0c009fd8 jal 80027f60 <SystemLoadFileToBuffer> +80026f2c: 00809021 move s2,a0 +80026f30: 14400005 bnez v0,80026f48 <PltParserLoadFile+0x5c> +80026f34: 0040a821 move s5,v0 + { + dprintf("Error loading file %s!\n",strPath); +80026f38: 3c048004 lui a0,0x8004 +80026f3c: 02402821 move a1,s2 +80026f40: 1000012d b 800273f8 <PltParserLoadFile+0x50c> +80026f44: 24840ff8 addiu a0,a0,4088 +80026f48: 02009821 move s3,s0 +80026f4c: 26320180 addiu s2,s1,384 +80026f50: 26300080 addiu s0,s1,128 +{ + uint8_t i; + + for(i = 0; i < GAME_MAX_AIRCRAFT ; i++) + { + memset(ptrFlightData->strFlightNumber[i],'\0',GAME_MAX_CHARACTERS); +80026f54: 02002021 move a0,s0 +80026f58: 24060008 li a2,8 +80026f5c: 00002821 move a1,zero +80026f60: 0c00d7ab jal 80035eac <memset> +80026f64: 26100008 addiu s0,s0,8 + +void PltParserResetBuffers(TYPE_FLIGHT_DATA * ptrFlightData) +{ + uint8_t i; + + for(i = 0; i < GAME_MAX_AIRCRAFT ; i++) +80026f68: 1612fffa bne s0,s2,80026f54 <PltParserLoadFile+0x68> +80026f6c: 24060020 li a2,32 + { + memset(ptrFlightData->strFlightNumber[i],'\0',GAME_MAX_CHARACTERS); + } + + memset(ptrFlightData->FlightDirection,DEPARTURE,GAME_MAX_AIRCRAFT); +80026f70: 24050001 li a1,1 +80026f74: 0c00d7ab jal 80035eac <memset> +80026f78: 02202021 move a0,s1 + memset(ptrFlightData->Passengers,0,GAME_MAX_AIRCRAFT); +80026f7c: 02002021 move a0,s0 +80026f80: 24060020 li a2,32 +80026f84: 0c00d7ab jal 80035eac <memset> +80026f88: 00002821 move a1,zero + memset(ptrFlightData->Hours,0,GAME_MAX_AIRCRAFT); +80026f8c: 24060020 li a2,32 +80026f90: 00002821 move a1,zero +80026f94: 0c00d7ab jal 80035eac <memset> +80026f98: 262401a0 addiu a0,s1,416 + memset(ptrFlightData->Minutes,0,GAME_MAX_AIRCRAFT); +80026f9c: 24060020 li a2,32 +80026fa0: 00002821 move a1,zero +80026fa4: 0c00d7ab jal 80035eac <memset> +80026fa8: 262401c0 addiu a0,s1,448 + memset(ptrFlightData->State,STATE_IDLE,GAME_MAX_AIRCRAFT); +80026fac: 24060020 li a2,32 +80026fb0: 00002821 move a1,zero +80026fb4: 0c00d7ab jal 80035eac <memset> +80026fb8: 26240204 addiu a0,s1,516 + memset(ptrFlightData->NotificationRequest,0,GAME_MAX_AIRCRAFT); +80026fbc: 24060020 li a2,32 +80026fc0: 00002821 move a1,zero +80026fc4: 0c00d7ab jal 80035eac <memset> +80026fc8: 26240284 addiu a0,s1,644 + + PltParserResetBuffers(ptrFlightData); + + // Now, buffer shall be read from line to line + + buffer = strtok_r(strPltBuffer,"\n",&pltBufferSavePtr); +80026fcc: 3c128004 lui s2,0x8004 + memset(ptrFlightData->Passengers,0,GAME_MAX_AIRCRAFT); + memset(ptrFlightData->Hours,0,GAME_MAX_AIRCRAFT); + memset(ptrFlightData->Minutes,0,GAME_MAX_AIRCRAFT); + memset(ptrFlightData->State,STATE_IDLE,GAME_MAX_AIRCRAFT); + memset(ptrFlightData->NotificationRequest,0,GAME_MAX_AIRCRAFT); + memset(ptrFlightData->Parking,0,GAME_MAX_AIRCRAFT); +80026fd0: 24060020 li a2,32 +80026fd4: 00002821 move a1,zero +80026fd8: 0c00d7ab jal 80035eac <memset> +80026fdc: 262401e0 addiu a0,s1,480 + + PltParserResetBuffers(ptrFlightData); + + // Now, buffer shall be read from line to line + + buffer = strtok_r(strPltBuffer,"\n",&pltBufferSavePtr); +80026fe0: 2664604c addiu a0,s3,24652 +80026fe4: 27a60074 addiu a2,sp,116 +80026fe8: 0c00dda6 jal 80037698 <strtok_r> +80026fec: 264508dc addiu a1,s2,2268 + FLIGHT_NUMBER_INDEX, + PASSENGERS_INDEX, + HOURS_MINUTES_INDEX, + PARKING_INDEX + };*/ + switch(i) +80026ff0: 3c168004 lui s6,0x8004 + + PltParserResetBuffers(ptrFlightData); + + // Now, buffer shall be read from line to line + + buffer = strtok_r(strPltBuffer,"\n",&pltBufferSavePtr); +80026ff4: 00409821 move s3,v0 + else + { + // File header (initial game time) has already been read + strncpy(lineBuffer, buffer, LINE_MAX); + + lineBufferPtr = strtok(lineBuffer,";"); +80026ff8: 3c178004 lui s7,0x8004 + FLIGHT_NUMBER_INDEX, + PASSENGERS_INDEX, + HOURS_MINUTES_INDEX, + PARKING_INDEX + };*/ + switch(i) +80026ffc: 26c2f804 addiu v0,s6,-2044 +bool PltParserLoadFile(char * strPath, TYPE_FLIGHT_DATA * ptrFlightData) +{ + uint8_t i; + uint8_t j; + uint8_t aircraftIndex; + bool first_line_read = false; +80027000: 0000a021 move s4,zero + + // Now, buffer shall be read from line to line + + buffer = strtok_r(strPltBuffer,"\n",&pltBufferSavePtr); + + aircraftIndex = 0; +80027004: 00008021 move s0,zero + FLIGHT_NUMBER_INDEX, + PASSENGERS_INDEX, + HOURS_MINUTES_INDEX, + PARKING_INDEX + };*/ + switch(i) +80027008: afa20080 sw v0,128(sp) + + default: + break; + } + + lineBufferPtr = strtok(NULL,";"); +8002700c: 26fe1030 addiu s8,s7,4144 + + buffer = strtok_r(strPltBuffer,"\n",&pltBufferSavePtr); + + aircraftIndex = 0; + + while(buffer != NULL) +80027010: 126000f4 beqz s3,800273e4 <PltParserLoadFile+0x4f8> +80027014: 24020023 li v0,35 + { + if(buffer[0] == '#') +80027018: 82630000 lb v1,0(s3) +8002701c: 00000000 nop +80027020: 14620006 bne v1,v0,8002703c <PltParserLoadFile+0x150> +80027024: 27a60074 addiu a2,sp,116 + { + // Comment line + buffer = strtok_r(NULL,"\n",&pltBufferSavePtr); +80027028: 264508dc addiu a1,s2,2268 +8002702c: 0c00dda6 jal 80037698 <strtok_r> +80027030: 00002021 move a0,zero + continue; +80027034: 1000fff6 b 80027010 <PltParserLoadFile+0x124> +80027038: 00409821 move s3,v0 + } + + if(first_line_read == false) +8002703c: 1680003e bnez s4,80027138 <PltParserLoadFile+0x24c> +80027040: 24060064 li a2,100 + { + // First (non-comment) line should indicate level time + // i.e.: 10:30, or 22:45 + first_line_read = true; + + if(strlen(buffer) != PLT_FIRST_LINE_CHARACTERS) +80027044: 0c00d8af jal 800362bc <strlen> +80027048: 02602021 move a0,s3 +8002704c: 24030005 li v1,5 +80027050: 144300ed bne v0,v1,80027408 <PltParserLoadFile+0x51c> +80027054: 2402003a li v0,58 + // Format should always be HH:MM (5 characters) + // Treat any other combination as possible error + return false; + } + + if(buffer[PLT_COLON_POSITION] != ':') +80027058: 82630002 lb v1,2(s3) +8002705c: 00000000 nop +80027060: 146200e9 bne v1,v0,80027408 <PltParserLoadFile+0x51c> +80027064: 00001021 move v0,zero + + j = 0; + + for(i = 0; i < PLT_FIRST_LINE_CHARACTERS ; i++) + { + if(i == PLT_COLON_POSITION) +80027068: 24070002 li a3,2 + { + j = 0; + buffer = strtok(NULL,"\n"); +8002706c: 264808dc addiu t0,s2,2268 + return false; + } + + j = 0; + + for(i = 0; i < PLT_FIRST_LINE_CHARACTERS ; i++) +80027070: 24160005 li s6,5 + { + if(i == PLT_COLON_POSITION) +80027074: 1687000b bne s4,a3,800270a4 <PltParserLoadFile+0x1b8> +80027078: 328300ff andi v1,s4,0xff + { + j = 0; + buffer = strtok(NULL,"\n"); +8002707c: 01002821 move a1,t0 +80027080: 00002021 move a0,zero +80027084: afa70088 sw a3,136(sp) +80027088: 0c00ddea jal 800377a8 <strtok> +8002708c: afa80084 sw t0,132(sp) +80027090: 00409821 move s3,v0 + continue; +80027094: 8fa80084 lw t0,132(sp) +80027098: 8fa70088 lw a3,136(sp) +8002709c: 1000000f b 800270dc <PltParserLoadFile+0x1f0> +800270a0: 00001021 move v0,zero + } + else if(i < PLT_COLON_POSITION) +800270a4: 2c630002 sltiu v1,v1,2 +800270a8: 24440001 addiu a0,v0,1 +800270ac: 10600006 beqz v1,800270c8 <PltParserLoadFile+0x1dc> +800270b0: 02742821 addu a1,s3,s4 + { + strHour[j++] = buffer[i]; +800270b4: 80a30000 lb v1,0(a1) +800270b8: 27a50010 addiu a1,sp,16 +800270bc: 00a21021 addu v0,a1,v0 +800270c0: 10000005 b 800270d8 <PltParserLoadFile+0x1ec> +800270c4: a043006c sb v1,108(v0) + } + else + { + strMinutes[j++] = buffer[i]; +800270c8: 80a30000 lb v1,0(a1) +800270cc: 27a50010 addiu a1,sp,16 +800270d0: 00a21021 addu v0,a1,v0 +800270d4: a0430068 sb v1,104(v0) +800270d8: 308200ff andi v0,a0,0xff +800270dc: 26940001 addiu s4,s4,1 + return false; + } + + j = 0; + + for(i = 0; i < PLT_FIRST_LINE_CHARACTERS ; i++) +800270e0: 1696ffe4 bne s4,s6,80027074 <PltParserLoadFile+0x188> +800270e4: 00000000 nop + { + strMinutes[j++] = buffer[i]; + } + } + + GameSetTime((uint8_t)atoi(strHour),(uint8_t)atoi(strMinutes) ); +800270e8: 0c00df72 jal 80037dc8 <atoi> +800270ec: 27a4007c addiu a0,sp,124 +800270f0: 27a40078 addiu a0,sp,120 +800270f4: 0c00df72 jal 80037dc8 <atoi> +800270f8: 00409821 move s3,v0 +800270fc: 304500ff andi a1,v0,0xff +80027100: 0c008c70 jal 800231c0 <GameSetTime> +80027104: 326400ff andi a0,s3,0xff + dprintf("Game time set to %.2d:%.2d.\n",(uint8_t)atoi(strHour),(uint8_t)atoi(strMinutes) ); +80027108: 0c00df72 jal 80037dc8 <atoi> +8002710c: 27a4007c addiu a0,sp,124 +80027110: 27a40078 addiu a0,sp,120 +80027114: 0c00df72 jal 80037dc8 <atoi> +80027118: 00409821 move s3,v0 +8002711c: 3c048004 lui a0,0x8004 +80027120: 304600ff andi a2,v0,0xff +80027124: 326500ff andi a1,s3,0xff +80027128: 0c00ed8f jal 8003b63c <printf> +8002712c: 24841010 addiu a0,a0,4112 +80027130: 100000a6 b 800273cc <PltParserLoadFile+0x4e0> +80027134: 27a60074 addiu a2,sp,116 + } + else + { + // File header (initial game time) has already been read + strncpy(lineBuffer, buffer, LINE_MAX); +80027138: 02602821 move a1,s3 +8002713c: 0c00d860 jal 80036180 <strncpy> +80027140: 27a40010 addiu a0,sp,16 + + lineBufferPtr = strtok(lineBuffer,";"); +80027144: 26e51030 addiu a1,s7,4144 +80027148: 0c00ddea jal 800377a8 <strtok> +8002714c: 27a40010 addiu a0,sp,16 + dprintf("Flight direction is not correct!\n"); + } + break; + + case FLIGHT_NUMBER_INDEX: + strncpy(ptrFlightData->strFlightNumber[aircraftIndex],lineBufferPtr,GAME_MAX_CHARACTERS); +80027150: 26140010 addiu s4,s0,16 + + lineBufferPtr = strtok(lineBuffer,";"); + + i = 0; + + dprintf("New line read: %s\n",buffer); +80027154: 3c048004 lui a0,0x8004 +80027158: 02602821 move a1,s3 +8002715c: 24841034 addiu a0,a0,4148 + dprintf("Flight direction is not correct!\n"); + } + break; + + case FLIGHT_NUMBER_INDEX: + strncpy(ptrFlightData->strFlightNumber[aircraftIndex],lineBufferPtr,GAME_MAX_CHARACTERS); +80027160: 0014a0c0 sll s4,s4,0x3 + else + { + // File header (initial game time) has already been read + strncpy(lineBuffer, buffer, LINE_MAX); + + lineBufferPtr = strtok(lineBuffer,";"); +80027164: 0040b021 move s6,v0 + + i = 0; + + dprintf("New line read: %s\n",buffer); +80027168: 0c00ed8f jal 8003b63c <printf> +8002716c: 00009821 move s3,zero + dprintf("Flight direction is not correct!\n"); + } + break; + + case FLIGHT_NUMBER_INDEX: + strncpy(ptrFlightData->strFlightNumber[aircraftIndex],lineBufferPtr,GAME_MAX_CHARACTERS); +80027170: 0234a021 addu s4,s1,s4 + + i = 0; + + dprintf("New line read: %s\n",buffer); + + while(lineBufferPtr != NULL) +80027174: 12c0008c beqz s6,800273a8 <PltParserLoadFile+0x4bc> +80027178: 2e620005 sltiu v0,s3,5 + FLIGHT_NUMBER_INDEX, + PASSENGERS_INDEX, + HOURS_MINUTES_INDEX, + PARKING_INDEX + };*/ + switch(i) +8002717c: 10400083 beqz v0,8002738c <PltParserLoadFile+0x4a0> +80027180: 00131080 sll v0,s3,0x2 +80027184: 8fa30080 lw v1,128(sp) +80027188: 00000000 nop +8002718c: 00621021 addu v0,v1,v0 +80027190: 8c420000 lw v0,0(v0) +80027194: 00000000 nop +80027198: 00400008 jr v0 +8002719c: 00000000 nop + { + case DEPARTURE_ARRIVAL_INDEX: + + if(strncmp(lineBufferPtr,"DEPARTURE",strlen("DEPARTURE") ) == 0) +800271a0: 3c058004 lui a1,0x8004 +800271a4: 24a41048 addiu a0,a1,4168 +800271a8: 0c00d8af jal 800362bc <strlen> +800271ac: afa50084 sw a1,132(sp) +800271b0: 8fa50084 lw a1,132(sp) +800271b4: 00403021 move a2,v0 +800271b8: 24a51048 addiu a1,a1,4168 +800271bc: 0c00d9dd jal 80036774 <strncmp> +800271c0: 02c02021 move a0,s6 +800271c4: 14400008 bnez v0,800271e8 <PltParserLoadFile+0x2fc> +800271c8: 00101080 sll v0,s0,0x2 + { + ptrFlightData->FlightDirection[aircraftIndex] = DEPARTURE; +800271cc: 02221021 addu v0,s1,v0 +800271d0: 24030001 li v1,1 + dprintf("Aircraft %d set to DEPARTURE.\n",aircraftIndex); +800271d4: 3c048004 lui a0,0x8004 + { + case DEPARTURE_ARRIVAL_INDEX: + + if(strncmp(lineBufferPtr,"DEPARTURE",strlen("DEPARTURE") ) == 0) + { + ptrFlightData->FlightDirection[aircraftIndex] = DEPARTURE; +800271d8: ac430000 sw v1,0(v0) + dprintf("Aircraft %d set to DEPARTURE.\n",aircraftIndex); +800271dc: 02002821 move a1,s0 +800271e0: 10000013 b 80027230 <PltParserLoadFile+0x344> +800271e4: 24841054 addiu a0,a0,4180 + } + else if(strncmp(lineBufferPtr,"ARRIVAL",strlen("ARRIVAL") ) == 0) +800271e8: 3c058004 lui a1,0x8004 +800271ec: 24a41074 addiu a0,a1,4212 +800271f0: 0c00d8af jal 800362bc <strlen> +800271f4: afa50084 sw a1,132(sp) +800271f8: 8fa50084 lw a1,132(sp) +800271fc: 00403021 move a2,v0 +80027200: 24a51074 addiu a1,a1,4212 +80027204: 0c00d9dd jal 80036774 <strncmp> +80027208: 02c02021 move a0,s6 +8002720c: 1440000c bnez v0,80027240 <PltParserLoadFile+0x354> +80027210: 3c048004 lui a0,0x8004 + { + ptrFlightData->FlightDirection[aircraftIndex] = ARRIVAL; +80027214: 00101080 sll v0,s0,0x2 +80027218: 02221021 addu v0,s1,v0 +8002721c: 24030002 li v1,2 + dprintf("Aircraft %d set to ARRIVAL.\n",aircraftIndex); +80027220: 3c048004 lui a0,0x8004 + ptrFlightData->FlightDirection[aircraftIndex] = DEPARTURE; + dprintf("Aircraft %d set to DEPARTURE.\n",aircraftIndex); + } + else if(strncmp(lineBufferPtr,"ARRIVAL",strlen("ARRIVAL") ) == 0) + { + ptrFlightData->FlightDirection[aircraftIndex] = ARRIVAL; +80027224: ac430000 sw v1,0(v0) + dprintf("Aircraft %d set to ARRIVAL.\n",aircraftIndex); +80027228: 02002821 move a1,s0 +8002722c: 2484107c addiu a0,a0,4220 +80027230: 0c00ed8f jal 8003b63c <printf> +80027234: 00000000 nop +80027238: 10000055 b 80027390 <PltParserLoadFile+0x4a4> +8002723c: 03c02821 move a1,s8 + } + else + { + dprintf("Flight direction is not correct!\n"); +80027240: 10000037 b 80027320 <PltParserLoadFile+0x434> +80027244: 2484109c addiu a0,a0,4252 + } + break; + + case FLIGHT_NUMBER_INDEX: + strncpy(ptrFlightData->strFlightNumber[aircraftIndex],lineBufferPtr,GAME_MAX_CHARACTERS); +80027248: 24060008 li a2,8 +8002724c: 02c02821 move a1,s6 +80027250: 0c00d860 jal 80036180 <strncpy> +80027254: 02802021 move a0,s4 + ptrFlightData->strFlightNumber[aircraftIndex][GAME_MAX_CHARACTERS - 1] = '\0'; +80027258: 001010c0 sll v0,s0,0x3 +8002725c: 02221021 addu v0,s1,v0 + dprintf("Aircraft %d flight number set to %s.\n",aircraftIndex,ptrFlightData->strFlightNumber[aircraftIndex]); +80027260: 3c048004 lui a0,0x8004 + } + break; + + case FLIGHT_NUMBER_INDEX: + strncpy(ptrFlightData->strFlightNumber[aircraftIndex],lineBufferPtr,GAME_MAX_CHARACTERS); + ptrFlightData->strFlightNumber[aircraftIndex][GAME_MAX_CHARACTERS - 1] = '\0'; +80027264: a0400087 sb zero,135(v0) + dprintf("Aircraft %d flight number set to %s.\n",aircraftIndex,ptrFlightData->strFlightNumber[aircraftIndex]); +80027268: 02803021 move a2,s4 +8002726c: 02002821 move a1,s0 +80027270: 10000009 b 80027298 <PltParserLoadFile+0x3ac> +80027274: 248410c0 addiu a0,a0,4288 + break; + + case PASSENGERS_INDEX: + ptrFlightData->Passengers[aircraftIndex] = atoi(lineBufferPtr); +80027278: 0c00df72 jal 80037dc8 <atoi> +8002727c: 02c02021 move a0,s6 +80027280: 02301821 addu v1,s1,s0 + dprintf("Aircraft %d passengers set to %d.\n",aircraftIndex,ptrFlightData->Passengers[aircraftIndex]); +80027284: 3c048004 lui a0,0x8004 + ptrFlightData->strFlightNumber[aircraftIndex][GAME_MAX_CHARACTERS - 1] = '\0'; + dprintf("Aircraft %d flight number set to %s.\n",aircraftIndex,ptrFlightData->strFlightNumber[aircraftIndex]); + break; + + case PASSENGERS_INDEX: + ptrFlightData->Passengers[aircraftIndex] = atoi(lineBufferPtr); +80027288: a0620180 sb v0,384(v1) + dprintf("Aircraft %d passengers set to %d.\n",aircraftIndex,ptrFlightData->Passengers[aircraftIndex]); +8002728c: 304600ff andi a2,v0,0xff +80027290: 02002821 move a1,s0 +80027294: 248410e8 addiu a0,a0,4328 +80027298: 0c00ed8f jal 8003b63c <printf> +8002729c: 00000000 nop + break; +800272a0: 1000003b b 80027390 <PltParserLoadFile+0x4a4> +800272a4: 03c02821 move a1,s8 + + case PARKING_INDEX: + if(ptrFlightData->FlightDirection[aircraftIndex] == DEPARTURE) +800272a8: 00101080 sll v0,s0,0x2 +800272ac: 02221021 addu v0,s1,v0 +800272b0: 8c440000 lw a0,0(v0) +800272b4: 24020001 li v0,1 +800272b8: 14820007 bne a0,v0,800272d8 <PltParserLoadFile+0x3ec> +800272bc: 02302821 addu a1,s1,s0 + { + ptrFlightData->Parking[aircraftIndex] = atoi(lineBufferPtr); +800272c0: 02c02021 move a0,s6 +800272c4: 0c00df72 jal 80037dc8 <atoi> +800272c8: afa50084 sw a1,132(sp) +800272cc: 8fa50084 lw a1,132(sp) +800272d0: 10000002 b 800272dc <PltParserLoadFile+0x3f0> +800272d4: a0a201e0 sb v0,480(a1) + } + else + { + ptrFlightData->Parking[aircraftIndex] = 0; +800272d8: a0a001e0 sb zero,480(a1) + } + dprintf("Aircraft %d parking set to %d.\n",aircraftIndex,ptrFlightData->Parking[aircraftIndex]); +800272dc: 3c048004 lui a0,0x8004 +800272e0: 90a601e0 lbu a2,480(a1) +800272e4: 2484110c addiu a0,a0,4364 +800272e8: 1000ffeb b 80027298 <PltParserLoadFile+0x3ac> +800272ec: 02002821 move a1,s0 + break; + + case HOURS_MINUTES_INDEX: + if( strlen(lineBufferPtr) != strlen("HH:MM") ) +800272f0: 0c00d8af jal 800362bc <strlen> +800272f4: 02c02021 move a0,s6 +800272f8: 3c048004 lui a0,0x8004 +800272fc: 2484112c addiu a0,a0,4396 +80027300: 0c00d8af jal 800362bc <strlen> +80027304: afa20084 sw v0,132(sp) +80027308: 8fa50084 lw a1,132(sp) +8002730c: 00000000 nop +80027310: 10a20007 beq a1,v0,80027330 <PltParserLoadFile+0x444> +80027314: 27a4007c addiu a0,sp,124 + { + dprintf("Hour minute format is not correct!\n"); +80027318: 3c048004 lui a0,0x8004 +8002731c: 24841134 addiu a0,a0,4404 +80027320: 0c00ed8f jal 8003b63c <printf> +80027324: 00000000 nop + break; +80027328: 10000019 b 80027390 <PltParserLoadFile+0x4a4> +8002732c: 03c02821 move a1,s8 + } + + // Copy hour + strHour[0] = lineBufferPtr[0]; +80027330: 82c20000 lb v0,0(s6) +80027334: 00000000 nop +80027338: a3a2007c sb v0,124(sp) + strHour[1] = lineBufferPtr[1]; +8002733c: 82c20001 lb v0,1(s6) +80027340: 00000000 nop +80027344: a3a2007d sb v0,125(sp) + // Copy minutes + strMinutes[0] = lineBufferPtr[3]; +80027348: 92c20003 lbu v0,3(s6) +8002734c: 00000000 nop +80027350: a3a20078 sb v0,120(sp) + strMinutes[1] = lineBufferPtr[4]; +80027354: 92c20004 lbu v0,4(s6) + + ptrFlightData->Hours[aircraftIndex] = (uint8_t)atoi(strHour); +80027358: 0230b021 addu s6,s1,s0 +8002735c: 0c00df72 jal 80037dc8 <atoi> +80027360: a3a20079 sb v0,121(sp) +80027364: a2c201a0 sb v0,416(s6) + ptrFlightData->Minutes[aircraftIndex] = (uint8_t)atoi(strMinutes); +80027368: 0c00df72 jal 80037dc8 <atoi> +8002736c: 27a40078 addiu a0,sp,120 + + dprintf("Aircraft %d time set to %.2d:%.2d.\n", aircraftIndex, +80027370: 3c048004 lui a0,0x8004 +80027374: 92c601a0 lbu a2,416(s6) + // Copy minutes + strMinutes[0] = lineBufferPtr[3]; + strMinutes[1] = lineBufferPtr[4]; + + ptrFlightData->Hours[aircraftIndex] = (uint8_t)atoi(strHour); + ptrFlightData->Minutes[aircraftIndex] = (uint8_t)atoi(strMinutes); +80027378: a2c201c0 sb v0,448(s6) + + dprintf("Aircraft %d time set to %.2d:%.2d.\n", aircraftIndex, +8002737c: 304700ff andi a3,v0,0xff +80027380: 02002821 move a1,s0 +80027384: 0c00ed8f jal 8003b63c <printf> +80027388: 24841158 addiu a0,a0,4440 + + default: + break; + } + + lineBufferPtr = strtok(NULL,";"); +8002738c: 03c02821 move a1,s8 +80027390: 0c00ddea jal 800377a8 <strtok> +80027394: 00002021 move a0,zero + i++; +80027398: 26730001 addiu s3,s3,1 + + default: + break; + } + + lineBufferPtr = strtok(NULL,";"); +8002739c: 0040b021 move s6,v0 + i++; +800273a0: 1000ff74 b 80027174 <PltParserLoadFile+0x288> +800273a4: 327300ff andi s3,s3,0xff + } + + ptrFlightData->State[aircraftIndex] = STATE_IDLE; +800273a8: 26020080 addiu v0,s0,128 +800273ac: 00021080 sll v0,v0,0x2 +800273b0: 02221021 addu v0,s1,v0 +800273b4: ac400004 sw zero,4(v0) + ptrFlightData->NotificationRequest[aircraftIndex] = false; +800273b8: 02301021 addu v0,s1,s0 + aircraftIndex++; +800273bc: 26100001 addiu s0,s0,1 + lineBufferPtr = strtok(NULL,";"); + i++; + } + + ptrFlightData->State[aircraftIndex] = STATE_IDLE; + ptrFlightData->NotificationRequest[aircraftIndex] = false; +800273c0: a0400284 sb zero,644(v0) + aircraftIndex++; +800273c4: 321000ff andi s0,s0,0xff + } + + buffer = strtok_r(NULL,"\n",&pltBufferSavePtr); +800273c8: 27a60074 addiu a2,sp,116 +800273cc: 264508dc addiu a1,s2,2268 +800273d0: 0c00dda6 jal 80037698 <strtok_r> +800273d4: 00002021 move a0,zero +800273d8: 00409821 move s3,v0 +800273dc: 1000ff0c b 80027010 <PltParserLoadFile+0x124> +800273e0: 24140001 li s4,1 + } + + ptrFlightData->nAircraft = aircraftIndex; //Set total number of aircraft used + ptrFlightData->ActiveAircraft = 0; + + dprintf("Number of aircraft parsed: %d\n",ptrFlightData->nAircraft); +800273e4: 3c048004 lui a0,0x8004 + } + + buffer = strtok_r(NULL,"\n",&pltBufferSavePtr); + } + + ptrFlightData->nAircraft = aircraftIndex; //Set total number of aircraft used +800273e8: a2300200 sb s0,512(s1) + ptrFlightData->ActiveAircraft = 0; +800273ec: a2200201 sb zero,513(s1) + + dprintf("Number of aircraft parsed: %d\n",ptrFlightData->nAircraft); +800273f0: 02002821 move a1,s0 +800273f4: 2484117c addiu a0,a0,4476 +800273f8: 0c00ed8f jal 8003b63c <printf> +800273fc: 00000000 nop + + return true; +80027400: 10000002 b 8002740c <PltParserLoadFile+0x520> +80027404: 00000000 nop + + if(strlen(buffer) != PLT_FIRST_LINE_CHARACTERS) + { + // Format should always be HH:MM (5 characters) + // Treat any other combination as possible error + return false; +80027408: 0000a821 move s5,zero + ptrFlightData->ActiveAircraft = 0; + + dprintf("Number of aircraft parsed: %d\n",ptrFlightData->nAircraft); + + return true; +} +8002740c: 8fbf00b4 lw ra,180(sp) +80027410: 02a01021 move v0,s5 +80027414: 8fbe00b0 lw s8,176(sp) +80027418: 8fb700ac lw s7,172(sp) +8002741c: 8fb600a8 lw s6,168(sp) +80027420: 8fb500a4 lw s5,164(sp) +80027424: 8fb400a0 lw s4,160(sp) +80027428: 8fb3009c lw s3,156(sp) +8002742c: 8fb20098 lw s2,152(sp) +80027430: 8fb10094 lw s1,148(sp) +80027434: 8fb00090 lw s0,144(sp) +80027438: 03e00008 jr ra +8002743c: 27bd00b8 addiu sp,sp,184 + +80027440 <PSXSDKIntroDrawChar>: +SsVag TrayClSnd; +SsVag SpinDiskSnd; + +void PSXSDKIntroDrawChar(short x, short y, char ch) +{ + PSXSDKIntroFont.w = FONT_SIZE; +80027440: 3c038007 lui v1,0x8007 +80027444: 2462d1ec addiu v0,v1,-11796 +80027448: 24070010 li a3,16 + PSXSDKIntroFont.h = FONT_SIZE; + PSXSDKIntroFont.tpage = FONT_TPAGE; + + if( (ch >= 'A') && (ch <= 'Z') ) +8002744c: 24c6ffbf addiu a2,a2,-65 +SsVag TrayClSnd; +SsVag SpinDiskSnd; + +void PSXSDKIntroDrawChar(short x, short y, char ch) +{ + PSXSDKIntroFont.w = FONT_SIZE; +80027450: a4470006 sh a3,6(v0) + PSXSDKIntroFont.h = FONT_SIZE; +80027454: a4470008 sh a3,8(v0) + PSXSDKIntroFont.tpage = FONT_TPAGE; + + if( (ch >= 'A') && (ch <= 'Z') ) +80027458: 30c600ff andi a2,a2,0xff + +void PSXSDKIntroDrawChar(short x, short y, char ch) +{ + PSXSDKIntroFont.w = FONT_SIZE; + PSXSDKIntroFont.h = FONT_SIZE; + PSXSDKIntroFont.tpage = FONT_TPAGE; +8002745c: 24070006 li a3,6 +80027460: a0470011 sb a3,17(v0) + + if( (ch >= 'A') && (ch <= 'Z') ) +80027464: 2cc7001a sltiu a3,a2,26 +80027468: 10e00011 beqz a3,800274b0 <PSXSDKIntroDrawChar+0x70> +8002746c: 00063600 sll a2,a2,0x18 + { + ch -= 'A'; // Reset offset +80027470: 00063603 sra a2,a2,0x18 + + PSXSDKIntroFont.x = x; +80027474: a464d1ec sh a0,-11796(v1) + PSXSDKIntroFont.y = y; + + PSXSDKIntroFont.u = FONT_U + ( (ch % FONT_COLUMNS) << FONT_SIZE_BITSHIFT); +80027478: 24030005 li v1,5 +8002747c: 14600002 bnez v1,80027488 <PSXSDKIntroDrawChar+0x48> +80027480: 00c3001a div zero,a2,v1 +80027484: 0007000d break 0x7 + PSXSDKIntroFont.v = FONT_V + ((short)(ch / FONT_COLUMNS) << FONT_SIZE_BITSHIFT); + + GfxSortSprite(&PSXSDKIntroFont); +80027488: 00402021 move a0,v0 + if( (ch >= 'A') && (ch <= 'Z') ) + { + ch -= 'A'; // Reset offset + + PSXSDKIntroFont.x = x; + PSXSDKIntroFont.y = y; +8002748c: a4450002 sh a1,2(v0) + + PSXSDKIntroFont.u = FONT_U + ( (ch % FONT_COLUMNS) << FONT_SIZE_BITSHIFT); +80027490: 00003012 mflo a2 + PSXSDKIntroFont.v = FONT_V + ((short)(ch / FONT_COLUMNS) << FONT_SIZE_BITSHIFT); +80027494: 00063100 sll a2,a2,0x4 +80027498: 24c6004c addiu a2,a2,76 + ch -= 'A'; // Reset offset + + PSXSDKIntroFont.x = x; + PSXSDKIntroFont.y = y; + + PSXSDKIntroFont.u = FONT_U + ( (ch % FONT_COLUMNS) << FONT_SIZE_BITSHIFT); +8002749c: 00001810 mfhi v1 +800274a0: 00031900 sll v1,v1,0x4 +800274a4: a0430004 sb v1,4(v0) + PSXSDKIntroFont.v = FONT_V + ((short)(ch / FONT_COLUMNS) << FONT_SIZE_BITSHIFT); + + GfxSortSprite(&PSXSDKIntroFont); +800274a8: 080090d2 j 80024348 <GfxSortSprite> +800274ac: a0460005 sb a2,5(v0) +800274b0: 03e00008 jr ra +800274b4: 00000000 nop + +800274b8 <PSXSDKIntro>: + return; + } +} + +void PSXSDKIntro(void) +{ +800274b8: 27bdffa0 addiu sp,sp,-96 + PSXSDKIntroRandTextEvent = false; + PSXSDKIntroRandTextEventReminder = false; + PSXSDKIntroStringEvent = false; + PSXSDKIntroClose = false; + + GfxSetGlobalLuminance(NORMAL_LUMINANCE); +800274bc: 24040080 li a0,128 + return; + } +} + +void PSXSDKIntro(void) +{ +800274c0: afb70054 sw s7,84(sp) +800274c4: afb60050 sw s6,80(sp) +800274c8: afb5004c sw s5,76(sp) +800274cc: afb40048 sw s4,72(sp) +800274d0: afb30044 sw s3,68(sp) +800274d4: afb20040 sw s2,64(sp) +800274d8: afb1003c sw s1,60(sp) +800274dc: afb00038 sw s0,56(sp) + int i; + + PSXSDKIntroCloseShellEvent = false; + PSXSDKIntroCloseShellEventReminder = false; +800274e0: 3c178007 lui s7,0x8007 + PSXSDKIntroSpinDiskEvent = false; + PSXSDKIntroSpinDiskEventReminder = false; + PSXSDKIntroRandTextEvent = false; + PSXSDKIntroRandTextEventReminder = false; +800274e4: 3c108007 lui s0,0x8007 + int i; + + PSXSDKIntroCloseShellEvent = false; + PSXSDKIntroCloseShellEventReminder = false; + PSXSDKIntroSpinDiskEvent = false; + PSXSDKIntroSpinDiskEventReminder = false; +800274e8: 3c168007 lui s6,0x8007 + +void PSXSDKIntro(void) +{ + int i; + + PSXSDKIntroCloseShellEvent = false; +800274ec: 3c118007 lui s1,0x8007 + PSXSDKIntroCloseShellEventReminder = false; + PSXSDKIntroSpinDiskEvent = false; +800274f0: 3c128007 lui s2,0x8007 + PSXSDKIntroSpinDiskEventReminder = false; + PSXSDKIntroRandTextEvent = false; +800274f4: 3c138007 lui s3,0x8007 + PSXSDKIntroRandTextEventReminder = false; + PSXSDKIntroStringEvent = false; +800274f8: 3c148007 lui s4,0x8007 + PSXSDKIntroClose = false; +800274fc: 3c158007 lui s5,0x8007 + PSXSDKIntroCloseShellEvent = false; + PSXSDKIntroCloseShellEventReminder = false; + PSXSDKIntroSpinDiskEvent = false; + PSXSDKIntroSpinDiskEventReminder = false; + PSXSDKIntroRandTextEvent = false; + PSXSDKIntroRandTextEventReminder = false; +80027500: a2001c8a sb zero,7306(s0) + return; + } +} + +void PSXSDKIntro(void) +{ +80027504: afbf005c sw ra,92(sp) +80027508: afbe0058 sw s8,88(sp) + int i; + + PSXSDKIntroCloseShellEvent = false; +8002750c: a2201c8f sb zero,7311(s1) + PSXSDKIntroCloseShellEventReminder = false; +80027510: a2e01c8e sb zero,7310(s7) + PSXSDKIntroSpinDiskEvent = false; +80027514: a2401c8d sb zero,7309(s2) + PSXSDKIntroSpinDiskEventReminder = false; +80027518: a2c01c8c sb zero,7308(s6) + PSXSDKIntroRandTextEvent = false; +8002751c: a2601c8b sb zero,7307(s3) + PSXSDKIntroRandTextEventReminder = false; + PSXSDKIntroStringEvent = false; +80027520: a2801c89 sb zero,7305(s4) + PSXSDKIntroClose = false; + + GfxSetGlobalLuminance(NORMAL_LUMINANCE); +80027524: 0c00900b jal 8002402c <GfxSetGlobalLuminance> +80027528: a2a01c88 sb zero,7304(s5) +8002752c: 3c028007 lui v0,0x8007 +80027530: afb0001c sw s0,28(sp) +80027534: afa20028 sw v0,40(sp) + + OpenSource_Logo.x = OPEN_SOURCE_LOGO_X; + OpenSource_Logo.y = OPEN_SOURCE_LOGO_Y; + } + + GfxSortSprite(&GPL_Logo); +80027538: 2450d1c0 addiu s0,v0,-11840 +8002753c: 3c028004 lui v0,0x8004 +80027540: afa2002c sw v0,44(sp) + GfxSortSprite(&OpenSource_Logo); + } + } + + for(i = 0; i < strlen(strPSXSDKIntroAuthor) ; i++) +80027544: 2442119c addiu v0,v0,4508 +80027548: afb70014 sw s7,20(sp) +8002754c: afb60018 sw s6,24(sp) +80027550: afa20030 sw v0,48(sp) + + GfxSetGlobalLuminance(NORMAL_LUMINANCE); + + while(1) + { + while(GfxIsGPUBusy() == true); +80027554: 0c00901d jal 80024074 <GfxIsGPUBusy> +80027558: 00000000 nop +8002755c: 1440fffd bnez v0,80027554 <PSXSDKIntro+0x9c> +80027560: 00000000 nop + + if( ( (GfxGetGlobalLuminance() - BG_LUMINANCE_STEP) > 0) +80027564: 0c009007 jal 8002401c <GfxGetGlobalLuminance> +80027568: 00000000 nop +8002756c: 2442fffe addiu v0,v0,-2 +80027570: 18400007 blez v0,80027590 <PSXSDKIntro+0xd8> +80027574: 00000000 nop + && +80027578: 92a21c88 lbu v0,7304(s5) +8002757c: 00000000 nop +80027580: 10400003 beqz v0,80027590 <PSXSDKIntro+0xd8> +80027584: 00000000 nop + (PSXSDKIntroClose == true) ) + { + GfxIncreaseGlobalLuminance(-BG_LUMINANCE_STEP); +80027588: 0c00900e jal 80024038 <GfxIncreaseGlobalLuminance> +8002758c: 2404fffe li a0,-2 + } + + if( (GfxGetGlobalLuminance() <= BG_LUMINANCE_STEP) +80027590: 0c009007 jal 8002401c <GfxGetGlobalLuminance> +80027594: 00000000 nop +80027598: 2c420003 sltiu v0,v0,3 +8002759c: 10400005 beqz v0,800275b4 <PSXSDKIntro+0xfc> +800275a0: 00003021 move a2,zero + && +800275a4: 92a21c88 lbu v0,7304(s5) +800275a8: 00000000 nop +800275ac: 14400173 bnez v0,80027b7c <PSXSDKIntro+0x6c4> +800275b0: 00000000 nop + (PSXSDKIntroClose == true) ) + { + break; + } + + GsSortCls(0,0,0); +800275b4: 00002821 move a1,zero +800275b8: 0c00c4e8 jal 800313a0 <GsSortCls> +800275bc: 00002021 move a0,zero +800275c0: 3c028004 lui v0,0x8004 +800275c4: 245e11ac addiu s8,v0,4524 +800275c8: afa20010 sw v0,16(sp) +800275cc: 3c028007 lui v0,0x8007 +800275d0: afa20020 sw v0,32(sp) + OpenSource_Logo.x = OPEN_SOURCE_LOGO_X; + OpenSource_Logo.y = OPEN_SOURCE_LOGO_Y; + } + + GfxSortSprite(&GPL_Logo); + GfxSortSprite(&OpenSource_Logo); +800275d4: 2456d16c addiu s6,v0,-11924 + { + if( (PSXSDKIntroRandTextEvent == true) + && + (PSXSDKIntroStringEvent == false) ) + { + if(PSXSDKIntroRandTextEventReminder == false) +800275d8: 3c028007 lui v0,0x8007 + break; + } + + GsSortCls(0,0,0); + + for(i = 0; i < strlen(strPSXSDKIntro) ; i++) +800275dc: 0000b821 move s7,zero + { + if( (PSXSDKIntroRandTextEvent == true) + && + (PSXSDKIntroStringEvent == false) ) + { + if(PSXSDKIntroRandTextEventReminder == false) +800275e0: afa20024 sw v0,36(sp) + break; + } + + GsSortCls(0,0,0); + + for(i = 0; i < strlen(strPSXSDKIntro) ; i++) +800275e4: 8fa20010 lw v0,16(sp) +800275e8: 0c00d8af jal 800362bc <strlen> +800275ec: 244411ac addiu a0,v0,4524 +800275f0: 02e2102a slt v0,s7,v0 +800275f4: 10400060 beqz v0,80027778 <PSXSDKIntro+0x2c0> +800275f8: 00000000 nop + { + if( (PSXSDKIntroRandTextEvent == true) +800275fc: 92621c8b lbu v0,7307(s3) +80027600: 00000000 nop +80027604: 10400059 beqz v0,8002776c <PSXSDKIntro+0x2b4> +80027608: 00171900 sll v1,s7,0x4 + && +8002760c: 92821c89 lbu v0,7305(s4) +80027610: 00000000 nop +80027614: 1440001f bnez v0,80027694 <PSXSDKIntro+0x1dc> +80027618: afa30034 sw v1,52(sp) + (PSXSDKIntroStringEvent == false) ) + { + if(PSXSDKIntroRandTextEventReminder == false) +8002761c: 8fa2001c lw v0,28(sp) +80027620: 00000000 nop +80027624: 90421c8a lbu v0,7306(v0) +80027628: 00000000 nop +8002762c: 14400008 bnez v0,80027650 <PSXSDKIntro+0x198> +80027630: 2405005a li a1,90 + { + PSXSDKIntroRandTextEventReminder = true; +80027634: 8fa30024 lw v1,36(sp) + SfxPlaySound(&SpinDiskSnd); +80027638: 3c048007 lui a0,0x8007 + && + (PSXSDKIntroStringEvent == false) ) + { + if(PSXSDKIntroRandTextEventReminder == false) + { + PSXSDKIntroRandTextEventReminder = true; +8002763c: 24020001 li v0,1 + SfxPlaySound(&SpinDiskSnd); +80027640: 2484d198 addiu a0,a0,-11880 +80027644: 0c009eeb jal 80027bac <SfxPlaySound> +80027648: a0621c8a sb v0,7306(v1) + } + + PSXSDKIntroDrawChar(FONT_X + (i << FONT_SIZE_BITSHIFT),FONT_Y,SystemRand('A','Z')); +8002764c: 2405005a li a1,90 +80027650: 0c00a03d jal 800280f4 <SystemRand> +80027654: 24040041 li a0,65 +80027658: 00171900 sll v1,s7,0x4 +8002765c: 24640040 addiu a0,v1,64 +80027660: 00023600 sll a2,v0,0x18 +80027664: 00042400 sll a0,a0,0x10 +80027668: 00063603 sra a2,a2,0x18 +8002766c: 24050090 li a1,144 +80027670: 0c009d10 jal 80027440 <PSXSDKIntroDrawChar> +80027674: 00042403 sra a0,a0,0x10 + + GPL_Logo.r = 0; +80027678: a200000e sb zero,14(s0) + GPL_Logo.g = 0; +8002767c: a200000f sb zero,15(s0) + GPL_Logo.b = 0; +80027680: a2000010 sb zero,16(s0) + + OpenSource_Logo.r = 0; +80027684: a2c0000e sb zero,14(s6) + OpenSource_Logo.g = 0; +80027688: a2c0000f sb zero,15(s6) + OpenSource_Logo.b = 0; +8002768c: 10000037 b 8002776c <PSXSDKIntro+0x2b4> +80027690: a2c00010 sb zero,16(s6) + } + else if( (PSXSDKIntroRandTextEvent == true) + && + (PSXSDKIntroStringEvent == true) ) + { + PSXSDKIntroDrawChar(FONT_X + (i << FONT_SIZE_BITSHIFT),FONT_Y,strPSXSDKIntro[i]); +80027694: 00171100 sll v0,s7,0x4 +80027698: 24440040 addiu a0,v0,64 +8002769c: 83c60000 lb a2,0(s8) +800276a0: 00042400 sll a0,a0,0x10 +800276a4: 24050090 li a1,144 +800276a8: 0c009d10 jal 80027440 <PSXSDKIntroDrawChar> +800276ac: 00042403 sra a0,a0,0x10 + + if(System100msTick() == true) +800276b0: 0c009fba jal 80027ee8 <System100msTick> +800276b4: 00000000 nop +800276b8: 10400028 beqz v0,8002775c <PSXSDKIntro+0x2a4> +800276bc: 00000000 nop + { + if(GPL_Logo.r < GPL_LOGO_LUMINANCE_TARGET) +800276c0: 9202000e lbu v0,14(s0) +800276c4: 00000000 nop +800276c8: 00022600 sll a0,v0,0x18 +800276cc: 00042603 sra a0,a0,0x18 +800276d0: 0480000a bltz a0,800276fc <PSXSDKIntro+0x244> +800276d4: 24420001 addiu v0,v0,1 + { + GPL_Logo.r += GPL_LOGO_LUMINANCE_STEP; +800276d8: a202000e sb v0,14(s0) + GPL_Logo.g += GPL_LOGO_LUMINANCE_STEP; +800276dc: 9202000f lbu v0,15(s0) +800276e0: 00000000 nop +800276e4: 24420001 addiu v0,v0,1 +800276e8: a202000f sb v0,15(s0) + GPL_Logo.b += GPL_LOGO_LUMINANCE_STEP; +800276ec: 92020010 lbu v0,16(s0) +800276f0: 00000000 nop +800276f4: 24420001 addiu v0,v0,1 +800276f8: a2020010 sb v0,16(s0) + } + + GPL_Logo.x = GPL_LOGO_X; +800276fc: 8fa30028 lw v1,40(sp) +80027700: 24020010 li v0,16 +80027704: a462d1c0 sh v0,-11840(v1) + GPL_Logo.y = GPL_LOGO_Y; +80027708: a6020002 sh v0,2(s0) + + if(OpenSource_Logo.r < OPEN_SOURCE_LOGO_LUMINANCE_TARGET) +8002770c: 92c2000e lbu v0,14(s6) +80027710: 00000000 nop +80027714: 00022600 sll a0,v0,0x18 +80027718: 00042603 sra a0,a0,0x18 +8002771c: 0480000a bltz a0,80027748 <PSXSDKIntro+0x290> +80027720: 24420001 addiu v0,v0,1 + { + OpenSource_Logo.r += OPEN_SOURCE_LOGO_LUMINANCE_STEP; +80027724: a2c2000e sb v0,14(s6) + OpenSource_Logo.g += OPEN_SOURCE_LOGO_LUMINANCE_STEP; +80027728: 92c2000f lbu v0,15(s6) +8002772c: 00000000 nop +80027730: 24420001 addiu v0,v0,1 +80027734: a2c2000f sb v0,15(s6) + OpenSource_Logo.b += OPEN_SOURCE_LOGO_LUMINANCE_STEP; +80027738: 92c20010 lbu v0,16(s6) +8002773c: 00000000 nop +80027740: 24420001 addiu v0,v0,1 +80027744: a2c20010 sb v0,16(s6) + } + + OpenSource_Logo.x = OPEN_SOURCE_LOGO_X; +80027748: 8fa30020 lw v1,32(sp) +8002774c: 24020130 li v0,304 +80027750: a462d16c sh v0,-11924(v1) + OpenSource_Logo.y = OPEN_SOURCE_LOGO_Y; +80027754: 24020010 li v0,16 +80027758: a6c20002 sh v0,2(s6) + } + + GfxSortSprite(&GPL_Logo); +8002775c: 0c0090d2 jal 80024348 <GfxSortSprite> +80027760: 02002021 move a0,s0 + GfxSortSprite(&OpenSource_Logo); +80027764: 0c0090d2 jal 80024348 <GfxSortSprite> +80027768: 02c02021 move a0,s6 + break; + } + + GsSortCls(0,0,0); + + for(i = 0; i < strlen(strPSXSDKIntro) ; i++) +8002776c: 26f70001 addiu s7,s7,1 +80027770: 1000ff9c b 800275e4 <PSXSDKIntro+0x12c> +80027774: 27de0001 addiu s8,s8,1 +80027778: 8fa2002c lw v0,44(sp) +8002777c: 0000b021 move s6,zero +80027780: 2457119c addiu s7,v0,4508 + GfxSortSprite(&GPL_Logo); + GfxSortSprite(&OpenSource_Logo); + } + } + + for(i = 0; i < strlen(strPSXSDKIntroAuthor) ; i++) +80027784: 8fa40030 lw a0,48(sp) +80027788: 0c00d8af jal 800362bc <strlen> +8002778c: 00000000 nop +80027790: 02c2102a slt v0,s6,v0 +80027794: 10400019 beqz v0,800277fc <PSXSDKIntro+0x344> +80027798: 240200a8 li v0,168 + { + if( (PSXSDKIntroRandTextEvent == true) +8002779c: 92621c8b lbu v0,7307(s3) +800277a0: 00000000 nop +800277a4: 10400012 beqz v0,800277f0 <PSXSDKIntro+0x338> +800277a8: 00000000 nop + && +800277ac: 92821c89 lbu v0,7305(s4) +800277b0: 00000000 nop +800277b4: 14400008 bnez v0,800277d8 <PSXSDKIntro+0x320> +800277b8: 0016f100 sll s8,s6,0x4 + (PSXSDKIntroStringEvent == false) ) + { + PSXSDKIntroDrawChar(FONT_X2 + (i << FONT_SIZE_BITSHIFT),FONT_Y2,SystemRand('A','Z')); +800277bc: 24040041 li a0,65 +800277c0: 0c00a03d jal 800280f4 <SystemRand> +800277c4: 2405005a li a1,90 +800277c8: 00023600 sll a2,v0,0x18 +800277cc: 27c40058 addiu a0,s8,88 +800277d0: 10000003 b 800277e0 <PSXSDKIntro+0x328> +800277d4: 00063603 sra a2,a2,0x18 + } + else if( (PSXSDKIntroRandTextEvent == true) + && + (PSXSDKIntroStringEvent == true) ) + { + PSXSDKIntroDrawChar(FONT_X2 + (i << FONT_SIZE_BITSHIFT),FONT_Y2,strPSXSDKIntroAuthor[i]); +800277d8: 82e60000 lb a2,0(s7) +800277dc: 27c40058 addiu a0,s8,88 +800277e0: 00042400 sll a0,a0,0x10 +800277e4: 240500a0 li a1,160 +800277e8: 0c009d10 jal 80027440 <PSXSDKIntroDrawChar> +800277ec: 00042403 sra a0,a0,0x10 + GfxSortSprite(&GPL_Logo); + GfxSortSprite(&OpenSource_Logo); + } + } + + for(i = 0; i < strlen(strPSXSDKIntroAuthor) ; i++) +800277f0: 26d60001 addiu s6,s6,1 +800277f4: 1000ffe3 b 80027784 <PSXSDKIntro+0x2cc> +800277f8: 26f70001 addiu s7,s7,1 + +} + +void PSXSDKIntroDrawConsole(void) +{ + PsxDisk.x = PSX_X; +800277fc: 3c168007 lui s6,0x8007 + PsxDisk.y = PSX_Y; +80027800: 26ded240 addiu s8,s6,-11712 + +} + +void PSXSDKIntroDrawConsole(void) +{ + PsxDisk.x = PSX_X; +80027804: a6c2d240 sh v0,-11712(s6) + PsxDisk.y = PSX_Y; +80027808: 24020068 li v0,104 +8002780c: a7c20002 sh v0,2(s8) + + PsxDisk.w = PSX_W; +80027810: 24020030 li v0,48 +80027814: a7c20006 sh v0,6(s8) + PsxDisk.h = PSX_H; +80027818: 24020020 li v0,32 +8002781c: a7c20008 sh v0,8(s8) + + PsxDisk.u = PSX_U; + PsxDisk.v = PSX_V; + + GfxSortSprite(&PsxDisk); +80027820: 03c02021 move a0,s8 + PsxDisk.y = PSX_Y; + + PsxDisk.w = PSX_W; + PsxDisk.h = PSX_H; + + PsxDisk.u = PSX_U; +80027824: 2402001e li v0,30 +80027828: a3c20004 sb v0,4(s8) + PsxDisk.v = PSX_V; + + GfxSortSprite(&PsxDisk); +8002782c: 0c0090d2 jal 80024348 <GfxSortSprite> +80027830: a3c00005 sb zero,5(s8) +void PSXSDKIntroDrawDisk(void) +{ + static int spin_rotate = 0; + static int spin_speed = 0; + + PsxDisk.x = DISK_X; +80027834: 240200b3 li v0,179 +80027838: a6c2d240 sh v0,-11712(s6) + PsxDisk.y = DISK_Y; +8002783c: 2402006a li v0,106 +80027840: a7c20002 sh v0,2(s8) + + PsxDisk.w = DISK_W; +80027844: 2402001b li v0,27 +80027848: a7c20006 sh v0,6(s8) + PsxDisk.h = DISK_H; +8002784c: a7c20008 sh v0,8(s8) + + PsxDisk.u = DISK_U; +80027850: 24020002 li v0,2 +80027854: a3c20004 sb v0,4(s8) + PsxDisk.v = DISK_V; +80027858: a3c20005 sb v0,5(s8) + + if(PSXSDKIntroSpinDiskEvent == true) +8002785c: 92421c8d lbu v0,7309(s2) +80027860: afb60010 sw s6,16(sp) +80027864: 1040002f beqz v0,80027924 <PSXSDKIntro+0x46c> +80027868: 03c0b821 move s7,s8 + { + if(PSXSDKIntroSpinDiskEventReminder == false) +8002786c: 8fa20018 lw v0,24(sp) +80027870: 00000000 nop +80027874: 90421c8c lbu v0,7308(v0) +80027878: 00000000 nop +8002787c: 14400004 bnez v0,80027890 <PSXSDKIntro+0x3d8> +80027880: 3c058007 lui a1,0x8007 + { + PSXSDKIntroSpinDiskEventReminder = true; +80027884: 24030001 li v1,1 +80027888: 3c028007 lui v0,0x8007 +8002788c: a0431c8c sb v1,7308(v0) + + //SfxPlaySound(&SpinDiskSnd); + } + + if(spin_speed < MAX_DISK_SPIN) +80027890: 8ca21c84 lw v0,7300(a1) +80027894: 00000000 nop +80027898: 28430005 slti v1,v0,5 +8002789c: 10600003 beqz v1,800278ac <PSXSDKIntro+0x3f4> +800278a0: 24040168 li a0,360 + { + spin_speed++; +800278a4: 24420001 addiu v0,v0,1 +800278a8: aca21c84 sw v0,7300(a1) + } + + if(spin_rotate < GfxRotateFromDegrees(360) ) +800278ac: 0c00901b jal 8002406c <GfxRotateFromDegrees> +800278b0: afa50020 sw a1,32(sp) +800278b4: 3c038007 lui v1,0x8007 +800278b8: 8c641c80 lw a0,7296(v1) +800278bc: 00000000 nop +800278c0: 0082102a slt v0,a0,v0 +800278c4: 1040000b beqz v0,800278f4 <PSXSDKIntro+0x43c> +800278c8: 0060b021 move s6,v1 + { + spin_rotate += GfxRotateFromDegrees(spin_speed++); +800278cc: 8fa50020 lw a1,32(sp) +800278d0: 00000000 nop +800278d4: 8ca41c84 lw a0,7300(a1) +800278d8: 00000000 nop +800278dc: 24820001 addiu v0,a0,1 +800278e0: 0c00901b jal 8002406c <GfxRotateFromDegrees> +800278e4: aca21c84 sw v0,7300(a1) +800278e8: 8ec41c80 lw a0,7296(s6) +800278ec: 10000006 b 80027908 <PSXSDKIntro+0x450> +800278f0: 00821021 addu v0,a0,v0 + } + else + { + spin_rotate = SystemRand(0,GfxRotateFromDegrees(360)); +800278f4: 0c00901b jal 8002406c <GfxRotateFromDegrees> +800278f8: 24040168 li a0,360 +800278fc: 00402821 move a1,v0 +80027900: 0c00a03d jal 800280f4 <SystemRand> +80027904: 00002021 move a0,zero +80027908: aec21c80 sw v0,7296(s6) + } + + PsxDisk.rotate = spin_rotate; +8002790c: 8ec21c80 lw v0,7296(s6) +80027910: 00000000 nop +80027914: afc20020 sw v0,32(s8) + PsxDisk.mx = DISK_W >> 1; +80027918: 2402000d li v0,13 +8002791c: afc20024 sw v0,36(s8) + PsxDisk.my = DISK_H >> 1; +80027920: afc20028 sw v0,40(s8) + } + + GfxSortSprite(&PsxDisk); +80027924: 8fa20010 lw v0,16(sp) +80027928: 0c0090d2 jal 80024348 <GfxSortSprite> +8002792c: 2444d240 addiu a0,v0,-11712 + + PSXSDKIntroDrawConsole(); + + PSXSDKIntroDrawDisk(); + + if(PSXSDKIntroCloseShellEvent == true) +80027930: 92221c8f lbu v0,7311(s1) +80027934: 00000000 nop +80027938: 10400016 beqz v0,80027994 <PSXSDKIntro+0x4dc> +8002793c: afc00020 sw zero,32(s8) + { + if(PSXSDKIntroCloseShellEventReminder == false) +80027940: 8fa20014 lw v0,20(sp) +80027944: 00000000 nop +80027948: 90421c8e lbu v0,7310(v0) +8002794c: 00000000 nop +80027950: 14400006 bnez v0,8002796c <PSXSDKIntro+0x4b4> +80027954: 3c048007 lui a0,0x8007 + { + PSXSDKIntroCloseShellEventReminder = true; +80027958: 24030001 li v1,1 +8002795c: 3c028007 lui v0,0x8007 + + SfxPlaySound(&TrayClSnd); +80027960: 2484d218 addiu a0,a0,-11752 +80027964: 0c009eeb jal 80027bac <SfxPlaySound> +80027968: a0431c8e sb v1,7310(v0) + } + + PsxDisk.x = READER_X; +8002796c: 8fa30010 lw v1,16(sp) +80027970: 240200b1 li v0,177 +80027974: a462d240 sh v0,-11712(v1) + PsxDisk.y = READER_Y; +80027978: 24020069 li v0,105 +8002797c: a7c20002 sh v0,2(s8) + + PsxDisk.w = CLOSED_READER_W; +80027980: 2402001e li v0,30 +80027984: a7c20006 sh v0,6(s8) + PsxDisk.h = CLOSED_READER_H; +80027988: a7c20008 sh v0,8(s8) + + PsxDisk.u = CLOSED_READER_U; +8002798c: 1000000c b 800279c0 <PSXSDKIntro+0x508> +80027990: a3c00004 sb zero,4(s8) + + GfxSortSprite(&PsxDisk); + } + else + { + PsxDisk.x = READER_X; +80027994: 3c028007 lui v0,0x8007 +80027998: 240300b1 li v1,177 +8002799c: a443d240 sh v1,-11712(v0) + PsxDisk.y = READER_Y; +800279a0: 24020069 li v0,105 +800279a4: a7c20002 sh v0,2(s8) + + PsxDisk.w = OPEN_READER_W; +800279a8: 2402001e li v0,30 +800279ac: a7c20006 sh v0,6(s8) + PsxDisk.h = OPEN_READER_H; +800279b0: 2402000f li v0,15 +800279b4: a7c20008 sh v0,8(s8) + + PsxDisk.u = OPEN_READER_U; +800279b8: a3c00004 sb zero,4(s8) + PsxDisk.v = OPEN_READER_V; +800279bc: 2402003d li v0,61 + + GfxSortSprite(&PsxDisk); +800279c0: 02e02021 move a0,s7 + +void PSXSDKIntroRunTimers(void) +{ + static uint16_t intro_timer = 0; + + intro_timer++; +800279c4: 3c168007 lui s6,0x8007 + PsxDisk.h = OPEN_READER_H; + + PsxDisk.u = OPEN_READER_U; + PsxDisk.v = OPEN_READER_V; + + GfxSortSprite(&PsxDisk); +800279c8: 0c0090d2 jal 80024348 <GfxSortSprite> +800279cc: a3c20005 sb v0,5(s8) + } + + PSXSDKIntroDrawTransCase(); + + GfxDrawScene(); +800279d0: 0c008fe2 jal 80023f88 <GfxDrawScene> +800279d4: 00000000 nop + +void PSXSDKIntroRunTimers(void) +{ + static uint16_t intro_timer = 0; + + intro_timer++; +800279d8: 96c21c7c lhu v0,7292(s6) +800279dc: 00000000 nop +800279e0: 24420001 addiu v0,v0,1 +800279e4: 3042ffff andi v0,v0,0xffff +800279e8: a6c21c7c sh v0,7292(s6) + + if( (intro_timer >= CLOSE_SHELL_EV_TIM) +800279ec: 2c420032 sltiu v0,v0,50 +800279f0: 14400008 bnez v0,80027a14 <PSXSDKIntro+0x55c> +800279f4: 00000000 nop + && +800279f8: 92221c8f lbu v0,7311(s1) +800279fc: 00000000 nop +80027a00: 14400004 bnez v0,80027a14 <PSXSDKIntro+0x55c> +80027a04: 24030001 li v1,1 + (PSXSDKIntroCloseShellEvent == false) ) + { + PSXSDKIntroCloseShellEvent = true; +80027a08: 3c028007 lui v0,0x8007 +80027a0c: a0431c8f sb v1,7311(v0) + intro_timer = 0; +80027a10: a6c01c7c sh zero,7292(s6) + } + + if( (intro_timer >= DISK_SPIN_EV_TIM) +80027a14: 96c21c7c lhu v0,7292(s6) +80027a18: 00000000 nop +80027a1c: 2c42001e sltiu v0,v0,30 +80027a20: 1440000d bnez v0,80027a58 <PSXSDKIntro+0x5a0> +80027a24: 00000000 nop + && +80027a28: 92221c8f lbu v0,7311(s1) +80027a2c: 00000000 nop +80027a30: 10400009 beqz v0,80027a58 <PSXSDKIntro+0x5a0> +80027a34: 00000000 nop + (PSXSDKIntroCloseShellEvent == true) + && +80027a38: 92421c8d lbu v0,7309(s2) +80027a3c: 00000000 nop +80027a40: 14400005 bnez v0,80027a58 <PSXSDKIntro+0x5a0> +80027a44: 3c028007 lui v0,0x8007 + (PSXSDKIntroSpinDiskEvent == false) ) + { + PSXSDKIntroSpinDiskEvent = true; +80027a48: 24030001 li v1,1 +80027a4c: a0431c8d sb v1,7309(v0) + intro_timer = 0; +80027a50: 3c028007 lui v0,0x8007 +80027a54: a4401c7c sh zero,7292(v0) + } + + if( (intro_timer >= TEXT_APPEAR_RANDOM_TIM) +80027a58: 96c21c7c lhu v0,7292(s6) +80027a5c: 00000000 nop +80027a60: 2c420064 sltiu v0,v0,100 +80027a64: 14400011 bnez v0,80027aac <PSXSDKIntro+0x5f4> +80027a68: 00000000 nop + && +80027a6c: 92221c8f lbu v0,7311(s1) +80027a70: 00000000 nop +80027a74: 1040000d beqz v0,80027aac <PSXSDKIntro+0x5f4> +80027a78: 00000000 nop + (PSXSDKIntroCloseShellEvent == true) + && +80027a7c: 92421c8d lbu v0,7309(s2) +80027a80: 00000000 nop +80027a84: 10400009 beqz v0,80027aac <PSXSDKIntro+0x5f4> +80027a88: 00000000 nop + (PSXSDKIntroSpinDiskEvent == true) + && +80027a8c: 92621c8b lbu v0,7307(s3) +80027a90: 00000000 nop +80027a94: 14400005 bnez v0,80027aac <PSXSDKIntro+0x5f4> +80027a98: 3c028007 lui v0,0x8007 + (PSXSDKIntroRandTextEvent == false) ) + { + PSXSDKIntroRandTextEvent = true; +80027a9c: 24030001 li v1,1 +80027aa0: a0431c8b sb v1,7307(v0) + intro_timer = 0; +80027aa4: 3c028007 lui v0,0x8007 +80027aa8: a4401c7c sh zero,7292(v0) + } + + if( (intro_timer >= TEXT_APPEAR_STRING_TIM) +80027aac: 96c21c7c lhu v0,7292(s6) +80027ab0: 00000000 nop +80027ab4: 2c420064 sltiu v0,v0,100 +80027ab8: 14400017 bnez v0,80027b18 <PSXSDKIntro+0x660> +80027abc: 00000000 nop + && +80027ac0: 92221c8f lbu v0,7311(s1) +80027ac4: 00000000 nop +80027ac8: 10400013 beqz v0,80027b18 <PSXSDKIntro+0x660> +80027acc: 00000000 nop + (PSXSDKIntroCloseShellEvent == true) + && +80027ad0: 92421c8d lbu v0,7309(s2) +80027ad4: 00000000 nop +80027ad8: 1040000f beqz v0,80027b18 <PSXSDKIntro+0x660> +80027adc: 00000000 nop + (PSXSDKIntroSpinDiskEvent == true) + && +80027ae0: 92621c8b lbu v0,7307(s3) +80027ae4: 00000000 nop +80027ae8: 1040000b beqz v0,80027b18 <PSXSDKIntro+0x660> +80027aec: 00000000 nop + (PSXSDKIntroRandTextEvent == true) + && +80027af0: 92821c89 lbu v0,7305(s4) +80027af4: 00000000 nop +80027af8: 14400007 bnez v0,80027b18 <PSXSDKIntro+0x660> +80027afc: 3c028007 lui v0,0x8007 + (PSXSDKIntroStringEvent == false) ) + { + PSXSDKIntroStringEvent = true; +80027b00: 24030001 li v1,1 + SfxPlayTrack(INTRO_TRACK); +80027b04: 24040002 li a0,2 +80027b08: 0c009f16 jal 80027c58 <SfxPlayTrack> +80027b0c: a0431c89 sb v1,7305(v0) + intro_timer = 0; +80027b10: 3c028007 lui v0,0x8007 +80027b14: a4401c7c sh zero,7292(v0) + } + + if( (intro_timer >= INTRO_CLOSE_TIM) +80027b18: 96c21c7c lhu v0,7292(s6) +80027b1c: 00000000 nop +80027b20: 2c420064 sltiu v0,v0,100 +80027b24: 1440fe8b bnez v0,80027554 <PSXSDKIntro+0x9c> +80027b28: 00000000 nop + && +80027b2c: 92221c8f lbu v0,7311(s1) +80027b30: 00000000 nop +80027b34: 1040fe87 beqz v0,80027554 <PSXSDKIntro+0x9c> +80027b38: 00000000 nop + (PSXSDKIntroCloseShellEvent == true) + && +80027b3c: 92421c8d lbu v0,7309(s2) +80027b40: 00000000 nop +80027b44: 1040fe83 beqz v0,80027554 <PSXSDKIntro+0x9c> +80027b48: 00000000 nop + (PSXSDKIntroSpinDiskEvent == true) + && +80027b4c: 92621c8b lbu v0,7307(s3) +80027b50: 00000000 nop +80027b54: 1040fe7f beqz v0,80027554 <PSXSDKIntro+0x9c> +80027b58: 00000000 nop + (PSXSDKIntroRandTextEvent == true) + && +80027b5c: 92821c89 lbu v0,7305(s4) +80027b60: 00000000 nop +80027b64: 1040fe7b beqz v0,80027554 <PSXSDKIntro+0x9c> +80027b68: 24020001 li v0,1 + (PSXSDKIntroStringEvent == true) ) + { + PSXSDKIntroClose = true; +80027b6c: a2a21c88 sb v0,7304(s5) + intro_timer = 0; +80027b70: 3c028007 lui v0,0x8007 +80027b74: 1000fe77 b 80027554 <PSXSDKIntro+0x9c> +80027b78: a4401c7c sh zero,7292(v0) + + GfxDrawScene(); + + PSXSDKIntroRunTimers(); + } +} +80027b7c: 8fbf005c lw ra,92(sp) +80027b80: 8fbe0058 lw s8,88(sp) +80027b84: 8fb70054 lw s7,84(sp) +80027b88: 8fb60050 lw s6,80(sp) +80027b8c: 8fb5004c lw s5,76(sp) +80027b90: 8fb40048 lw s4,72(sp) +80027b94: 8fb30044 lw s3,68(sp) +80027b98: 8fb20040 lw s2,64(sp) +80027b9c: 8fb1003c lw s1,60(sp) +80027ba0: 8fb00038 lw s0,56(sp) +80027ba4: 03e00008 jr ra +80027ba8: 27bd0060 addiu sp,sp,96 + +80027bac <SfxPlaySound>: + +static uint8_t voiceIndex = 0; + +void SfxPlaySound(SsVag * sound) +{ + SsPlayVag(sound, sound->cur_voice, MAX_VOLUME, MAX_VOLUME); +80027bac: 90850024 lbu a1,36(a0) +80027bb0: 24073fff li a3,16383 +80027bb4: 0800cea7 j 80033a9c <SsPlayVag> +80027bb8: 24063fff li a2,16383 + +80027bbc <SfxUploadSound>: +} + +bool SfxUploadSound(char * file_path, SsVag * vag) +{ +80027bbc: 27bdffe0 addiu sp,sp,-32 +80027bc0: afb20018 sw s2,24(sp) +80027bc4: afb00010 sw s0,16(sp) +80027bc8: afbf001c sw ra,28(sp) +80027bcc: afb10014 sw s1,20(sp) + if(SystemLoadFile(file_path) == false) +80027bd0: 0c00a022 jal 80028088 <SystemLoadFile> +80027bd4: 00a09021 move s2,a1 +80027bd8: 10400018 beqz v0,80027c3c <SfxUploadSound+0x80> +80027bdc: 00408021 move s0,v0 + { + return false; + } + + if(voiceIndex < NUMBER_OF_VOICES) +80027be0: 3c118007 lui s1,0x8007 +80027be4: 92221c90 lbu v0,7312(s1) +80027be8: 00000000 nop +80027bec: 2c420018 sltiu v0,v0,24 +80027bf0: 1040000e beqz v0,80027c2c <SfxUploadSound+0x70> +80027bf4: 00000000 nop + { + SsReadVag(vag,SystemGetBufferAddress()); +80027bf8: 0c00a027 jal 8002809c <SystemGetBufferAddress> +80027bfc: 00000000 nop +80027c00: 00402821 move a1,v0 +80027c04: 0c00cdde jal 80033778 <SsReadVag> +80027c08: 02402021 move a0,s2 + + SsUploadVag(vag); +80027c0c: 0c00ce86 jal 80033a18 <SsUploadVag> +80027c10: 02402021 move a0,s2 + + vag->cur_voice = voiceIndex; +80027c14: 92221c90 lbu v0,7312(s1) +80027c18: 00000000 nop +80027c1c: a2420024 sb v0,36(s2) + voiceIndex++; +80027c20: 24420001 addiu v0,v0,1 + { + dprintf("Maximum number of SPU voices exceeded!\n"); + return false; //Maximum voices exceeded + } + + return true; +80027c24: 10000005 b 80027c3c <SfxUploadSound+0x80> +80027c28: a2221c90 sb v0,7312(s1) + vag->cur_voice = voiceIndex; + voiceIndex++; + } + else + { + dprintf("Maximum number of SPU voices exceeded!\n"); +80027c2c: 3c048004 lui a0,0x8004 +80027c30: 0c00ed8f jal 8003b63c <printf> +80027c34: 248411c0 addiu a0,a0,4544 + return false; //Maximum voices exceeded +80027c38: 00008021 move s0,zero + } + + return true; +} +80027c3c: 8fbf001c lw ra,28(sp) +80027c40: 02001021 move v0,s0 +80027c44: 8fb20018 lw s2,24(sp) +80027c48: 8fb10014 lw s1,20(sp) +80027c4c: 8fb00010 lw s0,16(sp) +80027c50: 03e00008 jr ra +80027c54: 27bd0020 addiu sp,sp,32 + +80027c58 <SfxPlayTrack>: + +void SfxPlayTrack(MUSIC_TRACKS track) +{ +80027c58: 27bdffe8 addiu sp,sp,-24 +#ifndef NO_CDDA + SsCdVol(0x7FFF,0x7FFF); +80027c5c: 24057fff li a1,32767 + + return true; +} + +void SfxPlayTrack(MUSIC_TRACKS track) +{ +80027c60: afb00010 sw s0,16(sp) +80027c64: 00808021 move s0,a0 +80027c68: afbf0014 sw ra,20(sp) +#ifndef NO_CDDA + SsCdVol(0x7FFF,0x7FFF); +80027c6c: 0c00cf2e jal 80033cb8 <SsCdVol> +80027c70: 24047fff li a0,32767 + SsEnableCd(); +80027c74: 0c00cf04 jal 80033c10 <SsEnableCd> +80027c78: 00000000 nop + CdPlayTrack(track); +80027c7c: 0c00ab69 jal 8002ada4 <CdPlayTrack> +80027c80: 02002021 move a0,s0 + dprintf("Track number %d playing...\n",track); +#endif // NO_CDDA +} +80027c84: 8fbf0014 lw ra,20(sp) +{ +#ifndef NO_CDDA + SsCdVol(0x7FFF,0x7FFF); + SsEnableCd(); + CdPlayTrack(track); + dprintf("Track number %d playing...\n",track); +80027c88: 02002821 move a1,s0 +80027c8c: 3c048004 lui a0,0x8004 +#endif // NO_CDDA +} +80027c90: 8fb00010 lw s0,16(sp) +{ +#ifndef NO_CDDA + SsCdVol(0x7FFF,0x7FFF); + SsEnableCd(); + CdPlayTrack(track); + dprintf("Track number %d playing...\n",track); +80027c94: 248411e8 addiu a0,a0,4584 +80027c98: 0800ed8f j 8003b63c <printf> +80027c9c: 27bd0018 addiu sp,sp,24 + +80027ca0 <SfxStopMusic>: +#endif // NO_CDDA +} + +void SfxStopMusic(void) +{ +80027ca0: 27bdffd0 addiu sp,sp,-48 +80027ca4: afb20024 sw s2,36(sp) +80027ca8: afb10020 sw s1,32(sp) +80027cac: afb0001c sw s0,28(sp) +80027cb0: afbf002c sw ra,44(sp) +#ifndef NO_CDDA + uint64_t timer = SystemGetGlobalTimer(); +80027cb4: 0c009fad jal 80027eb4 <SystemGetGlobalTimer> +80027cb8: afb30028 sw s3,40(sp) +80027cbc: 00608021 move s0,v1 +80027cc0: 24120009 li s2,9 + uint16_t CDVol = 0x7FFF; +80027cc4: 24117fff li s1,32767 + uint8_t time_step = 5; + + while (CDVol > 0x3F) + { + CDVol>>=1; +80027cc8: 00118842 srl s1,s1,0x1 + SsCdVol(CDVol,CDVol); +80027ccc: 02202821 move a1,s1 +80027cd0: 02202021 move a0,s1 +80027cd4: 0c00cf2e jal 80033cb8 <SsCdVol> +80027cd8: afa20010 sw v0,16(sp) + + while(SystemGetGlobalTimer() < (timer + time_step) ); +80027cdc: 8fa20010 lw v0,16(sp) +80027ce0: 00000000 nop +80027ce4: 24530005 addiu s3,v0,5 +80027ce8: 0262102b sltu v0,s3,v0 +80027cec: 00508021 addu s0,v0,s0 +80027cf0: 0c009fad jal 80027eb4 <SystemGetGlobalTimer> +80027cf4: 00000000 nop +80027cf8: 0070202b sltu a0,v1,s0 +80027cfc: 1480fffc bnez a0,80027cf0 <SfxStopMusic+0x50> +80027d00: 00000000 nop +80027d04: 16030003 bne s0,v1,80027d14 <SfxStopMusic+0x74> +80027d08: 0053102b sltu v0,v0,s3 +80027d0c: 1440fff8 bnez v0,80027cf0 <SfxStopMusic+0x50> +80027d10: 00000000 nop + + timer = SystemGetGlobalTimer(); +80027d14: 0c009fad jal 80027eb4 <SystemGetGlobalTimer> +80027d18: 2652ffff addiu s2,s2,-1 +#ifndef NO_CDDA + uint64_t timer = SystemGetGlobalTimer(); + uint16_t CDVol = 0x7FFF; + uint8_t time_step = 5; + + while (CDVol > 0x3F) +80027d1c: 1640ffea bnez s2,80027cc8 <SfxStopMusic+0x28> +80027d20: 00608021 move s0,v1 + timer = SystemGetGlobalTimer(); + } + + CdSendCommand(CdlMute,0); +#endif +} +80027d24: 8fbf002c lw ra,44(sp) +80027d28: 8fb30028 lw s3,40(sp) +80027d2c: 8fb20024 lw s2,36(sp) +80027d30: 8fb10020 lw s1,32(sp) +80027d34: 8fb0001c lw s0,28(sp) + while(SystemGetGlobalTimer() < (timer + time_step) ); + + timer = SystemGetGlobalTimer(); + } + + CdSendCommand(CdlMute,0); +80027d38: 00002821 move a1,zero +80027d3c: 2404000b li a0,11 +80027d40: 0800aa46 j 8002a918 <CdSendCommand> +80027d44: 27bd0030 addiu sp,sp,48 + +80027d48 <SystemCheckTimer>: + +} + +void SystemCheckTimer(bool * timer, uint64_t * last_timer, uint8_t step) +{ + if(*timer == true) +80027d48: 90830000 lbu v1,0(a0) +80027d4c: 00000000 nop +80027d50: 10600006 beqz v1,80027d6c <SystemCheckTimer+0x24> +80027d54: 3c028007 lui v0,0x8007 + { + *timer = false; + *last_timer = global_timer; +80027d58: 8c481cb8 lw t0,7352(v0) +80027d5c: 8c491cbc lw t1,7356(v0) + +void SystemCheckTimer(bool * timer, uint64_t * last_timer, uint8_t step) +{ + if(*timer == true) + { + *timer = false; +80027d60: a0800000 sb zero,0(a0) + *last_timer = global_timer; +80027d64: aca80000 sw t0,0(a1) +80027d68: aca90004 sw t1,4(a1) + } + + if(global_timer >= (*last_timer + step) ) +80027d6c: 8ca30000 lw v1,0(a1) +80027d70: 8c481cb8 lw t0,7352(v0) +80027d74: 8ca50004 lw a1,4(a1) +80027d78: 8c491cbc lw t1,7356(v0) +80027d7c: 00c31021 addu v0,a2,v1 +80027d80: 0046302b sltu a2,v0,a2 +80027d84: 00c53021 addu a2,a2,a1 +80027d88: 0126182b sltu v1,t1,a2 +80027d8c: 14600007 bnez v1,80027dac <SystemCheckTimer+0x64> +80027d90: 00000000 nop +80027d94: 14c90003 bne a2,t1,80027da4 <SystemCheckTimer+0x5c> +80027d98: 0102102b sltu v0,t0,v0 +80027d9c: 14400003 bnez v0,80027dac <SystemCheckTimer+0x64> +80027da0: 00000000 nop + { + *timer = true; +80027da4: 24020001 li v0,1 +80027da8: a0820000 sb v0,0(a0) +80027dac: 03e00008 jr ra +80027db0: 00000000 nop + +80027db4 <SystemSetRandSeed>: + StartRCnt(RCntCNT2); +} + +void SystemSetRandSeed(void) +{ + if(rand_seed == false) +80027db4: 3c028007 lui v0,0x8007 +80027db8: 90431cb6 lbu v1,7350(v0) +80027dbc: 00000000 nop +80027dc0: 14600014 bnez v1,80027e14 <SystemSetRandSeed+0x60> +80027dc4: 00000000 nop + SetRCnt(RCntCNT2,0xFFFF,RCntSC); + StartRCnt(RCntCNT2); +} + +void SystemSetRandSeed(void) +{ +80027dc8: 27bdffe8 addiu sp,sp,-24 +80027dcc: afb00010 sw s0,16(sp) + if(rand_seed == false) + { + rand_seed = true; + //Set random seed using global timer as reference + srand((unsigned int)global_timer); +80027dd0: 3c108007 lui s0,0x8007 +80027dd4: 8e041cb8 lw a0,7352(s0) + +void SystemSetRandSeed(void) +{ + if(rand_seed == false) + { + rand_seed = true; +80027dd8: 24030001 li v1,1 + SetRCnt(RCntCNT2,0xFFFF,RCntSC); + StartRCnt(RCntCNT2); +} + +void SystemSetRandSeed(void) +{ +80027ddc: afbf0014 sw ra,20(sp) + if(rand_seed == false) + { + rand_seed = true; +80027de0: a0431cb6 sb v1,7350(v0) + //Set random seed using global timer as reference + srand((unsigned int)global_timer); +80027de4: 8e051cbc lw a1,7356(s0) +80027de8: 0c00d59b jal 8003566c <srand> +80027dec: 00000000 nop + + dprintf("Seed used: %d\n",(unsigned int)global_timer); +80027df0: 8e021cb8 lw v0,7352(s0) + } +} +80027df4: 8fbf0014 lw ra,20(sp) + { + rand_seed = true; + //Set random seed using global timer as reference + srand((unsigned int)global_timer); + + dprintf("Seed used: %d\n",(unsigned int)global_timer); +80027df8: 8e031cbc lw v1,7356(s0) +80027dfc: 3c048004 lui a0,0x8004 + } +} +80027e00: 8fb00010 lw s0,16(sp) + { + rand_seed = true; + //Set random seed using global timer as reference + srand((unsigned int)global_timer); + + dprintf("Seed used: %d\n",(unsigned int)global_timer); +80027e04: 00402821 move a1,v0 +80027e08: 24841204 addiu a0,a0,4612 +80027e0c: 0800ed8f j 8003b63c <printf> +80027e10: 27bd0018 addiu sp,sp,24 +80027e14: 03e00008 jr ra +80027e18: 00000000 nop + +80027e1c <SystemIsRandSeedSet>: +} + +bool SystemIsRandSeedSet(void) +{ + return rand_seed; +} +80027e1c: 3c028007 lui v0,0x8007 +80027e20: 90421cb6 lbu v0,7350(v0) +80027e24: 03e00008 jr ra +80027e28: 00000000 nop + +80027e2c <SystemDMAReady>: + +bool SystemDMAReady(void) +{ + return (*((unsigned int*)0x1F801814) & 1<<28); +80027e2c: 3c021f80 lui v0,0x1f80 +80027e30: 8c421814 lw v0,6164(v0) +80027e34: 00000000 nop +80027e38: 00021702 srl v0,v0,0x1c +} +80027e3c: 03e00008 jr ra +80027e40: 30420001 andi v0,v0,0x1 + +80027e44 <SystemDMABusy>: + +bool SystemDMABusy(void) +{ +80027e44: 27bdffe8 addiu sp,sp,-24 +80027e48: afbf0014 sw ra,20(sp) + return !SystemDMAReady(); +80027e4c: 0c009f8b jal 80027e2c <SystemDMAReady> +80027e50: 00000000 nop +} +80027e54: 8fbf0014 lw ra,20(sp) + return (*((unsigned int*)0x1F801814) & 1<<28); +} + +bool SystemDMABusy(void) +{ + return !SystemDMAReady(); +80027e58: 38420001 xori v0,v0,0x1 +} +80027e5c: 304200ff andi v0,v0,0xff +80027e60: 03e00008 jr ra +80027e64: 27bd0018 addiu sp,sp,24 + +80027e68 <SystemRefreshNeeded>: + +bool SystemRefreshNeeded(void) +{ + return refresh_needed; +80027e68: 3c028007 lui v0,0x8007 +80027e6c: 90421cb5 lbu v0,7349(v0) +} +80027e70: 03e00008 jr ra +80027e74: 304200ff andi v0,v0,0xff + +80027e78 <SystemIncreaseGlobalTimer>: + SystemIncreaseGlobalTimer(); +} + +void SystemIncreaseGlobalTimer(void) +{ + global_timer++; +80027e78: 3c068007 lui a2,0x8007 +80027e7c: 8cc41cb8 lw a0,7352(a2) +80027e80: 8cc51cbc lw a1,7356(a2) +80027e84: 24870001 addiu a3,a0,1 +80027e88: 00e4202b sltu a0,a3,a0 +80027e8c: 00851821 addu v1,a0,a1 +80027e90: acc71cb8 sw a3,7352(a2) +80027e94: acc31cbc sw v1,7356(a2) +80027e98: 03e00008 jr ra +80027e9c: 00000000 nop + +80027ea0 <ISR_SystemDefaultVBlank>: + return refresh_needed; +} + +void ISR_SystemDefaultVBlank(void) +{ + refresh_needed = true; +80027ea0: 24030001 li v1,1 +80027ea4: 3c028007 lui v0,0x8007 +80027ea8: a0431cb5 sb v1,7349(v0) + SystemIncreaseGlobalTimer(); +80027eac: 08009f9e j 80027e78 <SystemIncreaseGlobalTimer> +80027eb0: 00000000 nop + +80027eb4 <SystemGetGlobalTimer>: + global_timer++; +} + +uint64_t SystemGetGlobalTimer(void) +{ + return global_timer; +80027eb4: 3c028007 lui v0,0x8007 +80027eb8: 8c431cbc lw v1,7356(v0) +80027ebc: 8c421cb8 lw v0,7352(v0) +} +80027ec0: 03e00008 jr ra +80027ec4: 00000000 nop + +80027ec8 <SystemDisableScreenRefresh>: + +void SystemDisableScreenRefresh(void) +{ + refresh_needed = false; +80027ec8: 3c028007 lui v0,0x8007 +80027ecc: a0401cb5 sb zero,7349(v0) +80027ed0: 03e00008 jr ra +80027ed4: 00000000 nop + +80027ed8 <System1SecondTick>: +} + +bool System1SecondTick(void) +{ + return one_second_timer; +} +80027ed8: 3c028007 lui v0,0x8007 +80027edc: 90421cb4 lbu v0,7348(v0) +80027ee0: 03e00008 jr ra +80027ee4: 00000000 nop + +80027ee8 <System100msTick>: + +bool System100msTick(void) +{ + return hundred_ms_timer; +} +80027ee8: 3c028007 lui v0,0x8007 +80027eec: 90421cb3 lbu v0,7347(v0) +80027ef0: 03e00008 jr ra +80027ef4: 00000000 nop + +80027ef8 <System500msTick>: + +bool System500msTick(void) +{ + return five_hundred_ms_timer; +} +80027ef8: 3c028007 lui v0,0x8007 +80027efc: 90421cb2 lbu v0,7346(v0) +80027f00: 03e00008 jr ra +80027f04: 00000000 nop + +80027f08 <SystemRunTimers>: +{ + static uint64_t last_one_second_tick; + static uint64_t last_100_ms_tick; + static uint64_t last_500_ms_tick; + + SystemCheckTimer(&one_second_timer, &last_one_second_tick, REFRESH_FREQUENCY); +80027f08: 3c058007 lui a1,0x8007 +80027f0c: 3c048007 lui a0,0x8007 +{ + return five_hundred_ms_timer; +} + +void SystemRunTimers(void) +{ +80027f10: 27bdffe8 addiu sp,sp,-24 + static uint64_t last_one_second_tick; + static uint64_t last_100_ms_tick; + static uint64_t last_500_ms_tick; + + SystemCheckTimer(&one_second_timer, &last_one_second_tick, REFRESH_FREQUENCY); +80027f14: 24060032 li a2,50 +80027f18: 24a51ca8 addiu a1,a1,7336 +{ + return five_hundred_ms_timer; +} + +void SystemRunTimers(void) +{ +80027f1c: afbf0014 sw ra,20(sp) + static uint64_t last_one_second_tick; + static uint64_t last_100_ms_tick; + static uint64_t last_500_ms_tick; + + SystemCheckTimer(&one_second_timer, &last_one_second_tick, REFRESH_FREQUENCY); +80027f20: 0c009f52 jal 80027d48 <SystemCheckTimer> +80027f24: 24841cb4 addiu a0,a0,7348 + +#ifdef _PAL_MODE_ + SystemCheckTimer(&hundred_ms_timer, &last_100_ms_tick, 2 /* 2 * 50 ms = 100 ms */); +80027f28: 3c058007 lui a1,0x8007 +80027f2c: 3c048007 lui a0,0x8007 +80027f30: 24060002 li a2,2 +80027f34: 24a51ca0 addiu a1,a1,7328 +80027f38: 0c009f52 jal 80027d48 <SystemCheckTimer> +80027f3c: 24841cb3 addiu a0,a0,7347 + SystemCheckTimer(&five_hundred_ms_timer, &last_500_ms_tick, 10 /* 10 * 50 ms = 500 ms */); +#else + SystemCheckTimer(&hundred_ms_timer, &last_100_ms_tick, 3); +#endif //VMODE_PAL + +} +80027f40: 8fbf0014 lw ra,20(sp) + + SystemCheckTimer(&one_second_timer, &last_one_second_tick, REFRESH_FREQUENCY); + +#ifdef _PAL_MODE_ + SystemCheckTimer(&hundred_ms_timer, &last_100_ms_tick, 2 /* 2 * 50 ms = 100 ms */); + SystemCheckTimer(&five_hundred_ms_timer, &last_500_ms_tick, 10 /* 10 * 50 ms = 500 ms */); +80027f44: 3c058007 lui a1,0x8007 +80027f48: 3c048007 lui a0,0x8007 +80027f4c: 2406000a li a2,10 +80027f50: 24a51c98 addiu a1,a1,7320 +80027f54: 24841cb2 addiu a0,a0,7346 +80027f58: 08009f52 j 80027d48 <SystemCheckTimer> +80027f5c: 27bd0018 addiu sp,sp,24 + +80027f60 <SystemLoadFileToBuffer>: + *timer = true; + } +} + +bool SystemLoadFileToBuffer(char * fname, uint8_t * buffer, uint32_t szBuffer) +{ +80027f60: 27bdffd0 addiu sp,sp,-48 +80027f64: afbf002c sw ra,44(sp) +80027f68: afb50028 sw s5,40(sp) +80027f6c: afb40024 sw s4,36(sp) +80027f70: afb30020 sw s3,32(sp) +80027f74: afb2001c sw s2,28(sp) +80027f78: afb10018 sw s1,24(sp) + FILE *f; + int32_t size; + + if(fname == NULL) +80027f7c: 14800004 bnez a0,80027f90 <SystemLoadFileToBuffer+0x30> +80027f80: afb00014 sw s0,20(sp) + { + dprintf("SystemLoadFile: NULL fname!\n"); +80027f84: 3c048004 lui a0,0x8004 +80027f88: 10000012 b 80027fd4 <SystemLoadFileToBuffer+0x74> +80027f8c: 24841214 addiu a0,a0,4628 +80027f90: 00a0a821 move s5,a1 +80027f94: 00808821 move s1,a0 + return false; + } + + memset(buffer,0,szBuffer); +80027f98: 00002821 move a1,zero +80027f9c: 02a02021 move a0,s5 +80027fa0: 0c00d7ab jal 80035eac <memset> +80027fa4: 00c09821 move s3,a2 + + system_busy = true; + f = fopen(fname, "r"); +80027fa8: 3c058004 lui a1,0x8004 + return false; + } + + memset(buffer,0,szBuffer); + + system_busy = true; +80027fac: 24020001 li v0,1 +80027fb0: 3c148007 lui s4,0x8007 + f = fopen(fname, "r"); +80027fb4: 24a51234 addiu a1,a1,4660 +80027fb8: 02202021 move a0,s1 +80027fbc: 0c00a40c jal 80029030 <fopen> +80027fc0: a2821cb0 sb v0,7344(s4) + + if(f == NULL) +80027fc4: 14400007 bnez v0,80027fe4 <SystemLoadFileToBuffer+0x84> +80027fc8: 00408021 move s0,v0 + { + dprintf("SystemLoadFile: file could not be found!\n"); +80027fcc: 3c048004 lui a0,0x8004 +80027fd0: 24841238 addiu a0,a0,4664 +80027fd4: 0c00ed8f jal 8003b63c <printf> +80027fd8: 00000000 nop + //File couldn't be found + return false; +80027fdc: 10000021 b 80028064 <SystemLoadFileToBuffer+0x104> +80027fe0: 00001021 move v0,zero + } + + fseek(f, 0, SEEK_END); +80027fe4: 24060002 li a2,2 +80027fe8: 00002821 move a1,zero +80027fec: 0c00a598 jal 80029660 <fseek> +80027ff0: 00402021 move a0,v0 + + size = ftell(f); +80027ff4: 0c00a58c jal 80029630 <ftell> +80027ff8: 02002021 move a0,s0 + + if(size > szBuffer) +80027ffc: 0262982b sltu s3,s3,v0 +80028000: 12600007 beqz s3,80028020 <SystemLoadFileToBuffer+0xc0> +80028004: 00409021 move s2,v0 + { + dprintf("SystemLoadFile: Exceeds file buffer size (%d bytes)\n",size); +80028008: 3c048004 lui a0,0x8004 +8002800c: 00402821 move a1,v0 +80028010: 0c00ed8f jal 8003b63c <printf> +80028014: 24841264 addiu a0,a0,4708 +80028018: 10000012 b 80028064 <SystemLoadFileToBuffer+0x104> +8002801c: 00001021 move v0,zero + //Bigger than 128 kB (buffer's max size) + return false; + } + + fseek(f, 0, SEEK_SET); //f->pos = 0; +80028020: 00003021 move a2,zero +80028024: 00002821 move a1,zero +80028028: 0c00a598 jal 80029660 <fseek> +8002802c: 02002021 move a0,s0 + + fread(buffer, sizeof(char), size, f); +80028030: 02003821 move a3,s0 +80028034: 02403021 move a2,s2 +80028038: 24050001 li a1,1 +8002803c: 0c00a4b6 jal 800292d8 <fread> +80028040: 02a02021 move a0,s5 + + fclose(f); +80028044: 0c00a4a0 jal 80029280 <fclose> +80028048: 02002021 move a0,s0 + + system_busy = false; + + dprintf("File \"%s\" loaded successfully!\n",fname); +8002804c: 3c048004 lui a0,0x8004 +80028050: 02202821 move a1,s1 +80028054: 2484129c addiu a0,a0,4764 +80028058: 0c00ed8f jal 8003b63c <printf> +8002805c: a2801cb0 sb zero,7344(s4) + + return true; +80028060: 24020001 li v0,1 +} +80028064: 8fbf002c lw ra,44(sp) +80028068: 8fb50028 lw s5,40(sp) +8002806c: 8fb40024 lw s4,36(sp) +80028070: 8fb30020 lw s3,32(sp) +80028074: 8fb2001c lw s2,28(sp) +80028078: 8fb10018 lw s1,24(sp) +8002807c: 8fb00014 lw s0,20(sp) +80028080: 03e00008 jr ra +80028084: 27bd0030 addiu sp,sp,48 + +80028088 <SystemLoadFile>: + +bool SystemLoadFile(char *fname) +{ + return SystemLoadFileToBuffer(fname,file_buffer,sizeof(file_buffer)); +80028088: 3c060002 lui a2,0x2 +8002808c: 3c058005 lui a1,0x8005 +80028090: 24c60014 addiu a2,a2,20 +80028094: 08009fd8 j 80027f60 <SystemLoadFileToBuffer> +80028098: 24a5894c addiu a1,a1,-30388 + +8002809c <SystemGetBufferAddress>: +} + +uint8_t * SystemGetBufferAddress(void) +{ + return file_buffer; +} +8002809c: 3c028005 lui v0,0x8005 +800280a0: 03e00008 jr ra +800280a4: 2442894c addiu v0,v0,-30388 + +800280a8 <SystemWaitCycles>: + +void SystemWaitCycles(uint32_t cycles) +{ + uint64_t currentTime = global_timer; +800280a8: 3c028007 lui v0,0x8007 +800280ac: 8c461cb8 lw a2,7352(v0) +800280b0: 8c471cbc lw a3,7356(v0) + + while(global_timer < (currentTime + cycles) ); +800280b4: 00863021 addu a2,a0,a2 +800280b8: 00c4202b sltu a0,a2,a0 +800280bc: 00402821 move a1,v0 +800280c0: 00872021 addu a0,a0,a3 +800280c4: 8ca21cb8 lw v0,7352(a1) +800280c8: 8ca31cbc lw v1,7356(a1) +800280cc: 00000000 nop +800280d0: 0064382b sltu a3,v1,a0 +800280d4: 14e0fffb bnez a3,800280c4 <SystemWaitCycles+0x1c> +800280d8: 00000000 nop +800280dc: 14830003 bne a0,v1,800280ec <SystemWaitCycles+0x44> +800280e0: 0046102b sltu v0,v0,a2 +800280e4: 1440fff7 bnez v0,800280c4 <SystemWaitCycles+0x1c> +800280e8: 00000000 nop +800280ec: 03e00008 jr ra +800280f0: 00000000 nop + +800280f4 <SystemRand>: +} + +uint32_t SystemRand(uint32_t min, uint32_t max) +{ +800280f4: 27bdffe0 addiu sp,sp,-32 +800280f8: afb10018 sw s1,24(sp) +800280fc: afb00014 sw s0,20(sp) +80028100: 00808821 move s1,a0 +80028104: afbf001c sw ra,28(sp) + return rand() % (max - min + 1) + min; +80028108: 0c00d5a9 jal 800356a4 <rand> +8002810c: 00a08021 move s0,a1 +80028110: 02112823 subu a1,s0,s1 +80028114: 24a50001 addiu a1,a1,1 +80028118: 14a00002 bnez a1,80028124 <SystemRand+0x30> +8002811c: 0045001b divu zero,v0,a1 +80028120: 0007000d break 0x7 +} +80028124: 8fbf001c lw ra,28(sp) +80028128: 8fb00014 lw s0,20(sp) + while(global_timer < (currentTime + cycles) ); +} + +uint32_t SystemRand(uint32_t min, uint32_t max) +{ + return rand() % (max - min + 1) + min; +8002812c: 00001010 mfhi v0 +} +80028130: 00511021 addu v0,v0,s1 +80028134: 8fb10018 lw s1,24(sp) +80028138: 03e00008 jr ra +8002813c: 27bd0020 addiu sp,sp,32 + +80028140 <SystemSetEmergencyMode>: + +void SystemSetEmergencyMode(bool value) +{ + emergency_mode = value; +80028140: 3c028007 lui v0,0x8007 +80028144: 03e00008 jr ra +80028148: a0441cb1 sb a0,7345(v0) + +8002814c <SystemGetEmergencyMode>: +} + +bool SystemGetEmergencyMode(void) +{ + return emergency_mode; +} +8002814c: 3c028007 lui v0,0x8007 +80028150: 90421cb1 lbu v0,7345(v0) +80028154: 03e00008 jr ra +80028158: 00000000 nop + +8002815c <SystemIsBusy>: + +bool SystemIsBusy(void) +{ + return system_busy; +} +8002815c: 3c028007 lui v0,0x8007 +80028160: 90421cb0 lbu v0,7344(v0) +80028164: 03e00008 jr ra +80028168: 00000000 nop + +8002816c <SystemContains_u8>: + +bool SystemContains_u8(uint8_t value, uint8_t * buffer, size_t sz) +{ +8002816c: 308400ff andi a0,a0,0xff +80028170: 00a63021 addu a2,a1,a2 + size_t i = 0; + + for(i = 0; i < sz; i++) +80028174: 10a60007 beq a1,a2,80028194 <SystemContains_u8+0x28> +80028178: 24a50001 addiu a1,a1,1 + { + if(buffer[i] == value) +8002817c: 90a2ffff lbu v0,-1(a1) +80028180: 00000000 nop +80028184: 1444fffb bne v0,a0,80028174 <SystemContains_u8+0x8> +80028188: 24020001 li v0,1 + return true; + } + } + + return false; +} +8002818c: 03e00008 jr ra +80028190: 00000000 nop +80028194: 03e00008 jr ra +80028198: 00001021 move v0,zero + +8002819c <SystemContains_u16>: + +bool SystemContains_u16(uint16_t value, uint16_t * buffer, size_t sz) +{ +8002819c: 3084ffff andi a0,a0,0xffff + size_t i = 0; + + for(i = 0; i < sz; i++) +800281a0: 00001021 move v0,zero +800281a4: 10460007 beq v0,a2,800281c4 <SystemContains_u16+0x28> +800281a8: 24a50002 addiu a1,a1,2 + { + if(buffer[i] == value) +800281ac: 94a3fffe lhu v1,-2(a1) +800281b0: 00000000 nop +800281b4: 10640005 beq v1,a0,800281cc <SystemContains_u16+0x30> +800281b8: 00000000 nop + +bool SystemContains_u16(uint16_t value, uint16_t * buffer, size_t sz) +{ + size_t i = 0; + + for(i = 0; i < sz; i++) +800281bc: 1000fff9 b 800281a4 <SystemContains_u16+0x8> +800281c0: 24420001 addiu v0,v0,1 +800281c4: 03e00008 jr ra +800281c8: 00001021 move v0,zero + return true; + } + } + + return false; +} +800281cc: 03e00008 jr ra +800281d0: 24020001 li v0,1 + +800281d4 <SystemCreateTimer>: + +TYPE_TIMER * SystemCreateTimer(uint32_t seconds, bool rf, void (*timer_callback)(void) ) +{ +800281d4: 27bdffe8 addiu sp,sp,-24 + bool success = false; + uint8_t i; + + if(seconds == 0) +800281d8: 14800004 bnez a0,800281ec <SystemCreateTimer+0x18> +800281dc: afbf0014 sw ra,20(sp) + { + dprintf("Cannot create timer with time == 0!\n"); +800281e0: 3c048004 lui a0,0x8004 +800281e4: 10000019 b 8002824c <SystemCreateTimer+0x78> +800281e8: 248412bc addiu a0,a0,4796 +800281ec: 3c078005 lui a3,0x8005 +800281f0: 24e7884c addiu a3,a3,-30644 +800281f4: 30a500ff andi a1,a1,0xff +TYPE_TIMER * SystemCreateTimer(uint32_t seconds, bool rf, void (*timer_callback)(void) ) +{ + bool success = false; + uint8_t i; + + if(seconds == 0) +800281f8: 00001021 move v0,zero +800281fc: 00e01821 move v1,a3 + { + dprintf("Cannot create timer with time == 0!\n"); + return NULL; + } + + for(i = 0; i < SYSTEM_MAX_TIMERS; i++) +80028200: 24080010 li t0,16 + { + if(timer_array[i].busy == false) +80028204: 90e90009 lbu t1,9(a3) +80028208: 00000000 nop +8002820c: 1520000b bnez t1,8002823c <SystemCreateTimer+0x68> +80028210: 24420001 addiu v0,v0,1 +80028214: 2442ffff addiu v0,v0,-1 + { + timer_array[i].Timeout_Callback = timer_callback; +80028218: 00021100 sll v0,v0,0x4 +8002821c: 00621021 addu v0,v1,v0 + timer_array[i].time = seconds; + timer_array[i].orig_time = seconds; + timer_array[i].repeat_flag = rf; + timer_array[i].busy = true; +80028220: 24030001 li v1,1 + + for(i = 0; i < SYSTEM_MAX_TIMERS; i++) + { + if(timer_array[i].busy == false) + { + timer_array[i].Timeout_Callback = timer_callback; +80028224: ac46000c sw a2,12(v0) + timer_array[i].time = seconds; +80028228: ac440000 sw a0,0(v0) + timer_array[i].orig_time = seconds; +8002822c: ac440004 sw a0,4(v0) + timer_array[i].repeat_flag = rf; +80028230: a0450008 sb a1,8(v0) + { + dprintf("Could not find any free timer!\n"); + return NULL; + } + + return &timer_array[i]; +80028234: 10000008 b 80028258 <SystemCreateTimer+0x84> +80028238: a0430009 sb v1,9(v0) + { + dprintf("Cannot create timer with time == 0!\n"); + return NULL; + } + + for(i = 0; i < SYSTEM_MAX_TIMERS; i++) +8002823c: 1448fff1 bne v0,t0,80028204 <SystemCreateTimer+0x30> +80028240: 24e70010 addiu a3,a3,16 + } + } + + if(success == false) + { + dprintf("Could not find any free timer!\n"); +80028244: 3c048004 lui a0,0x8004 +80028248: 248412e4 addiu a0,a0,4836 +8002824c: 0c00ed8f jal 8003b63c <printf> +80028250: 00000000 nop + return NULL; +80028254: 00001021 move v0,zero + } + + return &timer_array[i]; +} +80028258: 8fbf0014 lw ra,20(sp) +8002825c: 00000000 nop +80028260: 03e00008 jr ra +80028264: 27bd0018 addiu sp,sp,24 + +80028268 <SystemResetTimers>: + +void SystemResetTimers(void) +{ +80028268: 3c028005 lui v0,0x8005 +8002826c: 3c038005 lui v1,0x8005 +80028270: 2442884c addiu v0,v0,-30644 +80028274: 2463894c addiu v1,v1,-30388 + uint8_t i; + + for(i = 0; i < SYSTEM_MAX_TIMERS; i++) + { + timer_array[i].Timeout_Callback = NULL; +80028278: ac40000c sw zero,12(v0) + timer_array[i].busy = false; +8002827c: a0400009 sb zero,9(v0) + timer_array[i].repeat_flag = false; +80028280: a0400008 sb zero,8(v0) + timer_array[i].time = 0; +80028284: ac400000 sw zero,0(v0) + timer_array[i].orig_time = 0; +80028288: ac400004 sw zero,4(v0) +8002828c: 24420010 addiu v0,v0,16 + +void SystemResetTimers(void) +{ + uint8_t i; + + for(i = 0; i < SYSTEM_MAX_TIMERS; i++) +80028290: 1443fff9 bne v0,v1,80028278 <SystemResetTimers+0x10> +80028294: 00000000 nop + timer_array[i].busy = false; + timer_array[i].repeat_flag = false; + timer_array[i].time = 0; + timer_array[i].orig_time = 0; + } +} +80028298: 03e00008 jr ra +8002829c: 00000000 nop + +800282a0 <SystemInit>: + * *************************************/ + +void SystemInit(void) +{ + //Reset global timer + global_timer = 0; +800282a0: 00002821 move a1,zero +800282a4: 3c028007 lui v0,0x8007 +800282a8: 00002021 move a0,zero + * @author: Xavier Del Campo + * @brief: + * *************************************/ + +void SystemInit(void) +{ +800282ac: 27bdffe8 addiu sp,sp,-24 + //Reset global timer + global_timer = 0; +800282b0: ac441cb8 sw a0,7352(v0) +800282b4: ac451cbc sw a1,7356(v0) + //Reset 1 second timer + one_second_timer = 0; + //PSXSDK init + PSX_InitEx(PSX_INIT_SAVESTATE | PSX_INIT_CD); +800282b8: 24040003 li a0,3 +void SystemInit(void) +{ + //Reset global timer + global_timer = 0; + //Reset 1 second timer + one_second_timer = 0; +800282bc: 3c028007 lui v0,0x8007 +800282c0: a0401cb4 sb zero,7348(v0) + * @author: Xavier Del Campo + * @brief: + * *************************************/ + +void SystemInit(void) +{ +800282c4: afbf0014 sw ra,20(sp) + //Reset global timer + global_timer = 0; + //Reset 1 second timer + one_second_timer = 0; + //PSXSDK init + PSX_InitEx(PSX_INIT_SAVESTATE | PSX_INIT_CD); +800282c8: 0c00cfe4 jal 80033f90 <PSX_InitEx> +800282cc: afb00010 sw s0,16(sp) + //Graphics init + GsInit(); +800282d0: 0c00bc55 jal 8002f154 <GsInit> +800282d4: 3c10f200 lui s0,0xf200 + //Clear VRAM + GsClearMem(); +800282d8: 0c00bd74 jal 8002f5d0 <GsClearMem> +800282dc: 00000000 nop + //Set Video Resolution +#ifdef _PAL_MODE_ + GsSetVideoMode(X_SCREEN_RESOLUTION, Y_SCREEN_RESOLUTION, VMODE_PAL); +800282e0: 24060001 li a2,1 +800282e4: 240500f0 li a1,240 +800282e8: 0c00bc63 jal 8002f18c <GsSetVideoMode> +800282ec: 24040180 li a0,384 +#else + GsSetVideoMode(X_SCREEN_RESOLUTION, Y_SCREEN_RESOLUTION, VMODE_NTSC); +#endif //_PAL_MODE_ + //SPU init + SsInit(); +800282f0: 0c00ccb2 jal 800332c8 <SsInit> +800282f4: 00000000 nop + //Reset all user-handled timers + SystemResetTimers(); +800282f8: 0c00a09a jal 80028268 <SystemResetTimers> +800282fc: 00000000 nop + //Pads init + PadInit(); +80028300: 0c009b8d jal 80026e34 <PadInit> +80028304: 00000000 nop + //Set Drawing Environment + GfxInitDrawEnv(); +80028308: 0c008faf jal 80023ebc <GfxInitDrawEnv> +8002830c: 00000000 nop + //Set Display Environment + GfxInitDispEnv(); +80028310: 0c008fb9 jal 80023ee4 <GfxInitDispEnv> +80028314: 00000000 nop + //Set VBlank Handler for screen refresh + SetVBlankHandler(&ISR_SystemDefaultVBlank); +80028318: 3c048002 lui a0,0x8002 +8002831c: 0c00d35e jal 80034d78 <SetVBlankHandler> +80028320: 24847ea0 addiu a0,a0,32416 + //Set Primitive List + GfxSetPrimitiveList(); +80028324: 0c008fbe jal 80023ef8 <GfxSetPrimitiveList> +80028328: 00000000 nop + // Init memory card + MemCardInit(); +8002832c: 0c009545 jal 80025514 <MemCardInit> +80028330: 00000000 nop + //Initial value for system_busy + system_busy = false; +80028334: 3c028007 lui v0,0x8007 + + GfxSetGlobalLuminance(NORMAL_LUMINANCE); +80028338: 24040080 li a0,128 +8002833c: 0c00900b jal 8002402c <GfxSetGlobalLuminance> +80028340: a0401cb0 sb zero,7344(v0) +{ + uint32_t * ptrStack = BEGIN_STACK_ADDRESS; + + ptrStack -= STACK_SIZE; + + *ptrStack = END_STACK_PATTERN; +80028344: 3c031802 lui v1,0x1802 +80028348: 3c02801f lui v0,0x801f +8002834c: 24632015 addiu v1,v1,8213 +80028350: 3442bf00 ori v0,v0,0xbf00 + + GfxSetGlobalLuminance(NORMAL_LUMINANCE); + + SystemSetStackPattern(); + + SetRCnt(RCntCNT2,0xFFFF,RCntSC); +80028354: 26040002 addiu a0,s0,2 +{ + uint32_t * ptrStack = BEGIN_STACK_ADDRESS; + + ptrStack -= STACK_SIZE; + + *ptrStack = END_STACK_PATTERN; +80028358: ac430000 sw v1,0(v0) + + GfxSetGlobalLuminance(NORMAL_LUMINANCE); + + SystemSetStackPattern(); + + SetRCnt(RCntCNT2,0xFFFF,RCntSC); +8002835c: 24060001 li a2,1 +80028360: 0c00d2c8 jal 80034b20 <SetRCnt> +80028364: 3405ffff li a1,0xffff + StartRCnt(RCntCNT2); +} +80028368: 8fbf0014 lw ra,20(sp) + GfxSetGlobalLuminance(NORMAL_LUMINANCE); + + SystemSetStackPattern(); + + SetRCnt(RCntCNT2,0xFFFF,RCntSC); + StartRCnt(RCntCNT2); +8002836c: 36040002 ori a0,s0,0x2 +} +80028370: 8fb00010 lw s0,16(sp) + GfxSetGlobalLuminance(NORMAL_LUMINANCE); + + SystemSetStackPattern(); + + SetRCnt(RCntCNT2,0xFFFF,RCntSC); + StartRCnt(RCntCNT2); +80028374: 0800d31a j 80034c68 <StartRCnt> +80028378: 27bd0018 addiu sp,sp,24 + +8002837c <SystemUserTimersHandler>: + timer_array[i].orig_time = 0; + } +} + +void SystemUserTimersHandler(void) +{ +8002837c: 27bdffe0 addiu sp,sp,-32 +80028380: afb10014 sw s1,20(sp) +80028384: afb00010 sw s0,16(sp) +80028388: 3c118005 lui s1,0x8005 +8002838c: 3c108005 lui s0,0x8005 +80028390: afb20018 sw s2,24(sp) +80028394: afbf001c sw ra,28(sp) +80028398: 2610884c addiu s0,s0,-30644 +8002839c: 2631894c addiu s1,s1,-30388 + refresh_needed = false; +} + +bool System1SecondTick(void) +{ + return one_second_timer; +800283a0: 3c128007 lui s2,0x8007 +{ + uint8_t i; + + for(i = 0; i < SYSTEM_MAX_TIMERS; i++) + { + if(timer_array[i].busy == true) +800283a4: 92020009 lbu v0,9(s0) +800283a8: 00000000 nop +800283ac: 10400018 beqz v0,80028410 <SystemUserTimersHandler+0x94> +800283b0: 00000000 nop + { + if(System1SecondTick() == true) +800283b4: 92421cb4 lbu v0,7348(s2) +800283b8: 00000000 nop +800283bc: 10400014 beqz v0,80028410 <SystemUserTimersHandler+0x94> +800283c0: 00000000 nop + { + timer_array[i].time--; +800283c4: 8e020000 lw v0,0(s0) +800283c8: 00000000 nop +800283cc: 2442ffff addiu v0,v0,-1 + + if(timer_array[i].time == 0) +800283d0: 1440000f bnez v0,80028410 <SystemUserTimersHandler+0x94> +800283d4: ae020000 sw v0,0(s0) + { + timer_array[i].Timeout_Callback(); +800283d8: 8e02000c lw v0,12(s0) +800283dc: 00000000 nop +800283e0: 0040f809 jalr v0 +800283e4: 00000000 nop + + if(timer_array[i].repeat_flag == true) +800283e8: 92020008 lbu v0,8(s0) +800283ec: 00000000 nop +800283f0: 10400004 beqz v0,80028404 <SystemUserTimersHandler+0x88> +800283f4: 00000000 nop + { + timer_array[i].time = timer_array[i].orig_time; +800283f8: 8e020004 lw v0,4(s0) +800283fc: 10000004 b 80028410 <SystemUserTimersHandler+0x94> +80028400: ae020000 sw v0,0(s0) + } + else + { + // Clean timer data + timer_array[i].busy = false; +80028404: a2000009 sb zero,9(s0) + timer_array[i].orig_time = 0; +80028408: ae000004 sw zero,4(s0) + timer_array[i].Timeout_Callback = NULL; +8002840c: ae00000c sw zero,12(s0) +80028410: 26100010 addiu s0,s0,16 + +void SystemUserTimersHandler(void) +{ + uint8_t i; + + for(i = 0; i < SYSTEM_MAX_TIMERS; i++) +80028414: 1611ffe3 bne s0,s1,800283a4 <SystemUserTimersHandler+0x28> +80028418: 00000000 nop + } + } + } + } + } +} +8002841c: 8fbf001c lw ra,28(sp) +80028420: 8fb20018 lw s2,24(sp) +80028424: 8fb10014 lw s1,20(sp) +80028428: 8fb00010 lw s0,16(sp) +8002842c: 03e00008 jr ra +80028430: 27bd0020 addiu sp,sp,32 + +80028434 <SystemTimerRestart>: + +void SystemTimerRestart(TYPE_TIMER * timer) +{ + timer->time = timer->orig_time; +80028434: 8c820004 lw v0,4(a0) +80028438: 03e00008 jr ra +8002843c: ac820000 sw v0,0(a0) + +80028440 <SystemTimerRemove>: +} + +void SystemTimerRemove(TYPE_TIMER * timer) +{ + timer->time = 0; +80028440: ac800000 sw zero,0(a0) + timer->orig_time = 0; +80028444: ac800004 sw zero,4(a0) + timer->Timeout_Callback = NULL; +80028448: ac80000c sw zero,12(a0) + timer->busy = false; +8002844c: a0800009 sb zero,9(a0) + timer->repeat_flag = false; +80028450: 03e00008 jr ra +80028454: a0800008 sb zero,8(a0) + +80028458 <SystemArrayCompare>: + +bool SystemArrayCompare(unsigned short * arr1, unsigned short * arr2, size_t sz) +{ + size_t i; + + for(i = 0; i < sz; i++) +80028458: 00001021 move v0,zero +8002845c: 10460008 beq v0,a2,80028480 <SystemArrayCompare+0x28> +80028460: 00000000 nop + { + if(arr1[i] != arr2[i]) +80028464: 94870000 lhu a3,0(a0) +80028468: 94a30000 lhu v1,0(a1) +8002846c: 24840002 addiu a0,a0,2 +80028470: 14e30005 bne a3,v1,80028488 <SystemArrayCompare+0x30> +80028474: 24a50002 addiu a1,a1,2 + +bool SystemArrayCompare(unsigned short * arr1, unsigned short * arr2, size_t sz) +{ + size_t i; + + for(i = 0; i < sz; i++) +80028478: 1000fff8 b 8002845c <SystemArrayCompare+0x4> +8002847c: 24420001 addiu v0,v0,1 +80028480: 03e00008 jr ra +80028484: 24020001 li v0,1 + return false; + } + } + + return true; +} +80028488: 03e00008 jr ra +8002848c: 00001021 move v0,zero + +80028490 <SystemPrintStackPointerAddress>: + +void SystemPrintStackPointerAddress(void) +{ +80028490: 27bdffd0 addiu sp,sp,-48 +80028494: afb00020 sw s0,32(sp) +static const fix16_t fix16_one = 0x00010000; /*!< fix16_t value of 1 */ + +/* Conversion functions between fix16_t and float/integer. + * These are inlined to allow compiler to optimize away constant numbers + */ +static inline fix16_t fix16_from_int(int a) { return a * fix16_one; } +80028498: 3c10801f lui s0,0x801f +8002849c: afb10024 sw s1,36(sp) +800284a0: 3610ff00 ori s0,s0,0xff00 +800284a4: 27b10018 addiu s1,sp,24 +800284a8: 02118023 subu s0,s0,s1 +800284ac: 00108400 sll s0,s0,0x10 +#ifdef PSXSDK_DEBUG // Used to avoid unused variable warning + void * ptr = NULL; + fix16_t used_bytes = fix16_from_int((int)((void*)BEGIN_STACK_ADDRESS - (void*)&ptr)); + fix16_t stackPercent = fix16_sdiv(used_bytes,fix16_from_int((int)STACK_SIZE)); +800284b0: 3c051000 lui a1,0x1000 +800284b4: 02002021 move a0,s0 + + return true; +} + +void SystemPrintStackPointerAddress(void) +{ +800284b8: afbf002c sw ra,44(sp) +800284bc: afb20028 sw s2,40(sp) +#ifdef PSXSDK_DEBUG // Used to avoid unused variable warning + void * ptr = NULL; + fix16_t used_bytes = fix16_from_int((int)((void*)BEGIN_STACK_ADDRESS - (void*)&ptr)); + fix16_t stackPercent = fix16_sdiv(used_bytes,fix16_from_int((int)STACK_SIZE)); +800284c0: 0c00a281 jal 80028a04 <fix16_sdiv> +800284c4: afa00018 sw zero,24(sp) + + stackPercent = fix16_smul(stackPercent, fix16_from_int((int)100)); +800284c8: 00402021 move a0,v0 +800284cc: 0c00a1f8 jal 800287e0 <fix16_smul> +800284d0: 3c050064 lui a1,0x64 + + dprintf("stackPercent: %d\n", stackPercent); +800284d4: 3c048004 lui a0,0x8004 +#ifdef PSXSDK_DEBUG // Used to avoid unused variable warning + void * ptr = NULL; + fix16_t used_bytes = fix16_from_int((int)((void*)BEGIN_STACK_ADDRESS - (void*)&ptr)); + fix16_t stackPercent = fix16_sdiv(used_bytes,fix16_from_int((int)STACK_SIZE)); + + stackPercent = fix16_smul(stackPercent, fix16_from_int((int)100)); +800284d8: 00409021 move s2,v0 + + dprintf("stackPercent: %d\n", stackPercent); +800284dc: 00402821 move a1,v0 +800284e0: 0c00ed8f jal 8003b63c <printf> +800284e4: 24841304 addiu a0,a0,4868 +static inline int fix16_to_int(fix16_t a) +{ +#ifdef FIXMATH_NO_ROUNDING + return a >> 16; +#else + if (a >= 0) +800284e8: 06400003 bltz s2,800284f8 <SystemPrintStackPointerAddress+0x68> +800284ec: 26478000 addiu a3,s2,-32768 + return (a + fix16_one / 2) / fix16_one; +800284f0: 34078000 li a3,0x8000 +800284f4: 02473821 addu a3,s2,a3 + else + return (a - fix16_one / 2) / fix16_one; +800284f8: 00071fc3 sra v1,a3,0x1f +800284fc: 3063ffff andi v1,v1,0xffff +80028500: 00673821 addu a3,v1,a3 +static inline int fix16_to_int(fix16_t a) +{ +#ifdef FIXMATH_NO_ROUNDING + return a >> 16; +#else + if (a >= 0) +80028504: 06000004 bltz s0,80028518 <SystemPrintStackPointerAddress+0x88> +80028508: 00073c03 sra a3,a3,0x10 + return (a + fix16_one / 2) / fix16_one; +8002850c: 34028000 li v0,0x8000 +80028510: 10000002 b 8002851c <SystemPrintStackPointerAddress+0x8c> +80028514: 02028021 addu s0,s0,v0 + else + return (a - fix16_one / 2) / fix16_one; +80028518: 26108000 addiu s0,s0,-32768 +8002851c: 001017c3 sra v0,s0,0x1f +80028520: 3042ffff andi v0,v0,0xffff +80028524: 00508021 addu s0,v0,s0 +80028528: 00108403 sra s0,s0,0x10 + + dprintf("Stack begin pointer: 0x%08X\n" +8002852c: 3c05801f lui a1,0x801f +80028530: 3c048004 lui a0,0x8004 +80028534: afb00010 sw s0,16(sp) +80028538: 02203021 move a2,s1 +8002853c: 34a5ff00 ori a1,a1,0xff00 +80028540: 0c00ed8f jal 8003b63c <printf> +80028544: 24841318 addiu a0,a0,4888 + (void*)&ptr, + fix16_to_int(stackPercent), + fix16_to_int(used_bytes) ); +#endif // PSXSDK_DEBUG + +} +80028548: 8fbf002c lw ra,44(sp) +8002854c: 8fb20028 lw s2,40(sp) +80028550: 8fb10024 lw s1,36(sp) +80028554: 8fb00020 lw s0,32(sp) +80028558: 03e00008 jr ra +8002855c: 27bd0030 addiu sp,sp,48 + +80028560 <SystemCheckStack>: +{ + uint32_t * ptrStack = BEGIN_STACK_ADDRESS; + uint32_t data; + + ptrStack -= STACK_SIZE; + data = (*ptrStack); +80028560: 3c02801f lui v0,0x801f +80028564: 3442bf00 ori v0,v0,0xbf00 + + if(data != END_STACK_PATTERN) +80028568: 8c430000 lw v1,0(v0) +8002856c: 3c021802 lui v0,0x1802 +80028570: 24422015 addiu v0,v0,8213 +80028574: 10620007 beq v1,v0,80028594 <SystemCheckStack+0x34> +80028578: 3c048004 lui a0,0x8004 +#endif // PSXSDK_DEBUG + +} + +void SystemCheckStack(void) +{ +8002857c: 27bdffe8 addiu sp,sp,-24 +80028580: afbf0014 sw ra,20(sp) + ptrStack -= STACK_SIZE; + data = (*ptrStack); + + if(data != END_STACK_PATTERN) + { + dprintf("Stack overflow?\n"); +80028584: 0c00ed8f jal 8003b63c <printf> +80028588: 2484137c addiu a0,a0,4988 +8002858c: 1000ffff b 8002858c <SystemCheckStack+0x2c> +80028590: 00000000 nop +80028594: 03e00008 jr ra +80028598: 00000000 nop + +8002859c <SystemIndexOfStringArray>: + + *ptrStack = END_STACK_PATTERN; +} + +int32_t SystemIndexOfStringArray(char * str, char ** array) +{ +8002859c: 27bdffd8 addiu sp,sp,-40 +800285a0: afb2001c sw s2,28(sp) + int32_t i; + + for(i = 0; array[i] != NULL; i++) + { + dprintf("String to find: %s\nEntry: %s\n", str, array[i]); +800285a4: 3c128004 lui s2,0x8004 + + *ptrStack = END_STACK_PATTERN; +} + +int32_t SystemIndexOfStringArray(char * str, char ** array) +{ +800285a8: afb30020 sw s3,32(sp) +800285ac: afb10018 sw s1,24(sp) +800285b0: afb00014 sw s0,20(sp) +800285b4: afbf0024 sw ra,36(sp) +800285b8: 00809821 move s3,a0 +800285bc: 00a08821 move s1,a1 + int32_t i; + + for(i = 0; array[i] != NULL; i++) +800285c0: 00008021 move s0,zero + { + dprintf("String to find: %s\nEntry: %s\n", str, array[i]); +800285c4: 26521390 addiu s2,s2,5008 + +int32_t SystemIndexOfStringArray(char * str, char ** array) +{ + int32_t i; + + for(i = 0; array[i] != NULL; i++) +800285c8: 8e260000 lw a2,0(s1) +800285cc: 00000000 nop +800285d0: 10c00010 beqz a2,80028614 <SystemIndexOfStringArray+0x78> +800285d4: 02602821 move a1,s3 + { + dprintf("String to find: %s\nEntry: %s\n", str, array[i]); +800285d8: 0c00ed8f jal 8003b63c <printf> +800285dc: 02402021 move a0,s2 + + if(strcmp(str, array[i]) == 0) +800285e0: 8e250000 lw a1,0(s1) +800285e4: 0c00d9aa jal 800366a8 <strcmp> +800285e8: 02602021 move a0,s3 +800285ec: 14400007 bnez v0,8002860c <SystemIndexOfStringArray+0x70> +800285f0: 26310004 addiu s1,s1,4 + { + dprintf("Match! Returning index %d...\n", i); +800285f4: 3c048004 lui a0,0x8004 +800285f8: 02002821 move a1,s0 +800285fc: 0c00ed8f jal 8003b63c <printf> +80028600: 248413b0 addiu a0,a0,5040 + return i; +80028604: 10000004 b 80028618 <SystemIndexOfStringArray+0x7c> +80028608: 02001021 move v0,s0 + +int32_t SystemIndexOfStringArray(char * str, char ** array) +{ + int32_t i; + + for(i = 0; array[i] != NULL; i++) +8002860c: 1000ffee b 800285c8 <SystemIndexOfStringArray+0x2c> +80028610: 26100001 addiu s0,s0,1 + dprintf("Match! Returning index %d...\n", i); + return i; + } + } + + return -1; +80028614: 2402ffff li v0,-1 +} +80028618: 8fbf0024 lw ra,36(sp) +8002861c: 8fb30020 lw s3,32(sp) +80028620: 8fb2001c lw s2,28(sp) +80028624: 8fb10018 lw s1,24(sp) +80028628: 8fb00014 lw s0,20(sp) +8002862c: 03e00008 jr ra +80028630: 27bd0028 addiu sp,sp,40 + +80028634 <SystemIndexOf_U16>: + +int32_t SystemIndexOf_U16(uint16_t value, uint16_t * array, uint32_t sz) +{ +80028634: 3084ffff andi a0,a0,0xffff + int32_t i; + + for(i = 0; i < sz; i++) +80028638: 00001021 move v0,zero +8002863c: 10460007 beq v0,a2,8002865c <SystemIndexOf_U16+0x28> +80028640: 24a50002 addiu a1,a1,2 + { + if(value == array[i]) +80028644: 94a3fffe lhu v1,-2(a1) +80028648: 00000000 nop +8002864c: 10640004 beq v1,a0,80028660 <SystemIndexOf_U16+0x2c> +80028650: 00000000 nop + +int32_t SystemIndexOf_U16(uint16_t value, uint16_t * array, uint32_t sz) +{ + int32_t i; + + for(i = 0; i < sz; i++) +80028654: 1000fff9 b 8002863c <SystemIndexOf_U16+0x8> +80028658: 24420001 addiu v0,v0,1 + { + return i; + } + } + + return -1; +8002865c: 2402ffff li v0,-1 +} +80028660: 03e00008 jr ra +80028664: 00000000 nop + +80028668 <SystemIndexOf_U8>: + +int32_t SystemIndexOf_U8(uint8_t value, uint8_t * array, uint32_t from, uint32_t sz) +{ +80028668: 308400ff andi a0,a0,0xff + int32_t i; + + for(i = from; i < sz; i++) +8002866c: 00c7102b sltu v0,a2,a3 +80028670: 10400008 beqz v0,80028694 <SystemIndexOf_U8+0x2c> +80028674: 00000000 nop + { + if(value == array[i]) +80028678: 00a61021 addu v0,a1,a2 +8002867c: 90420000 lbu v0,0(v0) +80028680: 00000000 nop +80028684: 10440005 beq v0,a0,8002869c <SystemIndexOf_U8+0x34> +80028688: 00000000 nop + +int32_t SystemIndexOf_U8(uint8_t value, uint8_t * array, uint32_t from, uint32_t sz) +{ + int32_t i; + + for(i = from; i < sz; i++) +8002868c: 1000fff7 b 8002866c <SystemIndexOf_U8+0x4> +80028690: 24c60001 addiu a2,a2,1 +80028694: 03e00008 jr ra +80028698: 2402ffff li v0,-1 + return i; + } + } + + return -1; +} +8002869c: 03e00008 jr ra +800286a0: 00c01021 move v0,a2 + +800286a4 <fix16_add>: + uint32_t _a = a, _b = b; + uint32_t sum = _a + _b; + + // Overflow can only happen if sign of a == sign of b, and then + // it causes sign of sum != sign of a. + if (!((_a ^ _b) & 0x80000000) && ((_a ^ sum) & 0x80000000)) +800286a4: 00851826 xor v1,a0,a1 +800286a8: 04600004 bltz v1,800286bc <fix16_add+0x18> +800286ac: 00851021 addu v0,a0,a1 +800286b0: 00822026 xor a0,a0,v0 +800286b4: 04800003 bltz a0,800286c4 <fix16_add+0x20> +800286b8: 00000000 nop + return fix16_overflow; + + return sum; +} +800286bc: 03e00008 jr ra +800286c0: 00000000 nop +800286c4: 03e00008 jr ra +800286c8: 3c028000 lui v0,0x8000 + +800286cc <fix16_sub>: + uint32_t _a = a, _b = b; + uint32_t diff = _a - _b; + + // Overflow can only happen if sign of a != sign of b, and then + // it causes sign of diff != sign of a. + if (((_a ^ _b) & 0x80000000) && ((_a ^ diff) & 0x80000000)) +800286cc: 00851826 xor v1,a0,a1 +800286d0: 04600003 bltz v1,800286e0 <fix16_sub+0x14> +800286d4: 00851023 subu v0,a0,a1 + return fix16_overflow; + + return diff; +} +800286d8: 03e00008 jr ra +800286dc: 00000000 nop + uint32_t _a = a, _b = b; + uint32_t diff = _a - _b; + + // Overflow can only happen if sign of a != sign of b, and then + // it causes sign of diff != sign of a. + if (((_a ^ _b) & 0x80000000) && ((_a ^ diff) & 0x80000000)) +800286e0: 00822026 xor a0,a0,v0 +800286e4: 0481fffc bgez a0,800286d8 <fix16_sub+0xc> +800286e8: 00000000 nop + return fix16_overflow; + + return diff; +} +800286ec: 03e00008 jr ra +800286f0: 3c028000 lui v0,0x8000 + +800286f4 <fix16_sadd>: + uint32_t _a = a, _b = b; + uint32_t sum = _a + _b; + + // Overflow can only happen if sign of a == sign of b, and then + // it causes sign of sum != sign of a. + if (!((_a ^ _b) & 0x80000000) && ((_a ^ sum) & 0x80000000)) +800286f4: 00851826 xor v1,a0,a1 +800286f8: 04600004 bltz v1,8002870c <fix16_sadd+0x18> +800286fc: 00851021 addu v0,a0,a1 +80028700: 00821826 xor v1,a0,v0 +80028704: 04600006 bltz v1,80028720 <fix16_sadd+0x2c> +80028708: 00000000 nop +/* Saturating arithmetic */ +fix16_t fix16_sadd(fix16_t a, fix16_t b) +{ + fix16_t result = fix16_add(a, b); + + if (result == fix16_overflow) +8002870c: 3c038000 lui v1,0x8000 +80028710: 10430003 beq v0,v1,80028720 <fix16_sadd+0x2c> +80028714: 00000000 nop + return (a > 0) ? fix16_max : fix16_min; + + return result; +} +80028718: 03e00008 jr ra +8002871c: 00000000 nop +fix16_t fix16_sadd(fix16_t a, fix16_t b) +{ + fix16_t result = fix16_add(a, b); + + if (result == fix16_overflow) + return (a > 0) ? fix16_max : fix16_min; +80028720: 18800004 blez a0,80028734 <fix16_sadd+0x40> +80028724: 00000000 nop +80028728: 3c027fff lui v0,0x7fff + + return result; +} +8002872c: 03e00008 jr ra +80028730: 3442ffff ori v0,v0,0xffff +fix16_t fix16_sadd(fix16_t a, fix16_t b) +{ + fix16_t result = fix16_add(a, b); + + if (result == fix16_overflow) + return (a > 0) ? fix16_max : fix16_min; +80028734: 03e00008 jr ra +80028738: 3c028000 lui v0,0x8000 + +8002873c <fix16_ssub>: + uint32_t _a = a, _b = b; + uint32_t diff = _a - _b; + + // Overflow can only happen if sign of a != sign of b, and then + // it causes sign of diff != sign of a. + if (((_a ^ _b) & 0x80000000) && ((_a ^ diff) & 0x80000000)) +8002873c: 00851826 xor v1,a0,a1 +80028740: 04600006 bltz v1,8002875c <fix16_ssub+0x20> +80028744: 00851023 subu v0,a0,a1 + +fix16_t fix16_ssub(fix16_t a, fix16_t b) +{ + fix16_t result = fix16_sub(a, b); + + if (result == fix16_overflow) +80028748: 3c038000 lui v1,0x8000 +8002874c: 10430006 beq v0,v1,80028768 <fix16_ssub+0x2c> +80028750: 00000000 nop + return (a > 0) ? fix16_max : fix16_min; + + return result; +} +80028754: 03e00008 jr ra +80028758: 00000000 nop + uint32_t _a = a, _b = b; + uint32_t diff = _a - _b; + + // Overflow can only happen if sign of a != sign of b, and then + // it causes sign of diff != sign of a. + if (((_a ^ _b) & 0x80000000) && ((_a ^ diff) & 0x80000000)) +8002875c: 00821826 xor v1,a0,v0 +80028760: 0461fffa bgez v1,8002874c <fix16_ssub+0x10> +80028764: 3c038000 lui v1,0x8000 +fix16_t fix16_ssub(fix16_t a, fix16_t b) +{ + fix16_t result = fix16_sub(a, b); + + if (result == fix16_overflow) + return (a > 0) ? fix16_max : fix16_min; +80028768: 18800004 blez a0,8002877c <fix16_ssub+0x40> +8002876c: 00000000 nop +80028770: 3c027fff lui v0,0x7fff + + return result; +} +80028774: 03e00008 jr ra +80028778: 3442ffff ori v0,v0,0xffff +fix16_t fix16_ssub(fix16_t a, fix16_t b) +{ + fix16_t result = fix16_sub(a, b); + + if (result == fix16_overflow) + return (a > 0) ? fix16_max : fix16_min; +8002877c: 03e00008 jr ra +80028780: 3c028000 lui v0,0x8000 + +80028784 <fix16_mul>: + */ + +#if !defined(FIXMATH_NO_64BIT) && !defined(FIXMATH_OPTIMIZE_8BIT) +fix16_t fix16_mul(fix16_t inArg0, fix16_t inArg1) +{ + int64_t product = (int64_t)inArg0 * inArg1; +80028784: 00850018 mult a0,a1 +80028788: 00002810 mfhi a1 +8002878c: 00002012 mflo a0 + #ifndef FIXMATH_NO_OVERFLOW + // The upper 17 bits should all be the same (the sign). + uint32_t upper = (product >> 47); + #endif + + if (product < 0) +80028790: 04a1000f bgez a1,800287d0 <fix16_mul+0x4c> +80028794: 000513c3 sra v0,a1,0xf + { + #ifndef FIXMATH_NO_OVERFLOW + if (~upper) +80028798: 2403ffff li v1,-1 +8002879c: 1443000e bne v0,v1,800287d8 <fix16_mul+0x54> +800287a0: 24a3ffff addiu v1,a1,-1 + return fix16_overflow; + #endif + + #ifndef FIXMATH_NO_ROUNDING + // This adjustment is required in order to round -1/2 correctly + product--; +800287a4: 2482ffff addiu v0,a0,-1 +800287a8: 0044302b sltu a2,v0,a0 +800287ac: 00402021 move a0,v0 +800287b0: 00c32821 addu a1,a2,v1 + + #ifdef FIXMATH_NO_ROUNDING + return product >> 16; + #else + fix16_t result = product >> 16; + result += (product & 0x8000) >> 15; +800287b4: 30828000 andi v0,a0,0x8000 +800287b8: 00051c00 sll v1,a1,0x10 +800287bc: 00042402 srl a0,a0,0x10 +800287c0: 00642025 or a0,v1,a0 +800287c4: 000213c2 srl v0,v0,0xf + + return result; +800287c8: 03e00008 jr ra +800287cc: 00441021 addu v0,v0,a0 + #endif + } + else + { + #ifndef FIXMATH_NO_OVERFLOW + if (upper) +800287d0: 1040fff8 beqz v0,800287b4 <fix16_mul+0x30> +800287d4: 00000000 nop + fix16_t result = product >> 16; + result += (product & 0x8000) >> 15; + + return result; + #endif +} +800287d8: 03e00008 jr ra +800287dc: 3c028000 lui v0,0x8000 + +800287e0 <fix16_smul>: + */ + +#if !defined(FIXMATH_NO_64BIT) && !defined(FIXMATH_OPTIMIZE_8BIT) +fix16_t fix16_mul(fix16_t inArg0, fix16_t inArg1) +{ + int64_t product = (int64_t)inArg0 * inArg1; +800287e0: 00850018 mult a0,a1 +800287e4: 00001810 mfhi v1 +800287e8: 00001012 mflo v0 + #ifndef FIXMATH_NO_OVERFLOW + // The upper 17 bits should all be the same (the sign). + uint32_t upper = (product >> 47); + #endif + + if (product < 0) +800287ec: 0461000c bgez v1,80028820 <fix16_smul+0x40> +800287f0: 000333c3 sra a2,v1,0xf + { + #ifndef FIXMATH_NO_OVERFLOW + if (~upper) +800287f4: 2407ffff li a3,-1 +800287f8: 10c70016 beq a2,a3,80028854 <fix16_smul+0x74> +800287fc: 2446ffff addiu a2,v0,-1 +fix16_t fix16_smul(fix16_t inArg0, fix16_t inArg1) { + fix16_t result = fix16_mul(inArg0, inArg1); + + if (result == fix16_overflow) + { + if ((inArg0 >= 0) == (inArg1 >= 0)) +80028800: 00052827 nor a1,zero,a1 +80028804: 000427c2 srl a0,a0,0x1f +80028808: 00052fc2 srl a1,a1,0x1f +8002880c: 10850016 beq a0,a1,80028868 <fix16_smul+0x88> +80028810: 00000000 nop + return fix16_max; +80028814: 3c027fff lui v0,0x7fff + else + return fix16_min; + } + + return result; +} +80028818: 03e00008 jr ra +8002881c: 3442ffff ori v0,v0,0xffff + #endif + } + else + { + #ifndef FIXMATH_NO_OVERFLOW + if (upper) +80028820: 14c0fff7 bnez a2,80028800 <fix16_smul+0x20> +80028824: 00000000 nop + + #ifdef FIXMATH_NO_ROUNDING + return product >> 16; + #else + fix16_t result = product >> 16; + result += (product & 0x8000) >> 15; +80028828: 30468000 andi a2,v0,0x8000 +8002882c: 00033c00 sll a3,v1,0x10 +80028830: 00021402 srl v0,v0,0x10 +80028834: 00061bc2 srl v1,a2,0xf +80028838: 00e21025 or v0,a3,v0 +8002883c: 00621021 addu v0,v1,v0 +#ifndef FIXMATH_NO_OVERFLOW +/* Wrapper around fix16_mul to add saturating arithmetic. */ +fix16_t fix16_smul(fix16_t inArg0, fix16_t inArg1) { + fix16_t result = fix16_mul(inArg0, inArg1); + + if (result == fix16_overflow) +80028840: 3c038000 lui v1,0x8000 +80028844: 1043ffef beq v0,v1,80028804 <fix16_smul+0x24> +80028848: 00052827 nor a1,zero,a1 + else + return fix16_min; + } + + return result; +} +8002884c: 03e00008 jr ra +80028850: 00000000 nop + return fix16_overflow; + #endif + + #ifndef FIXMATH_NO_ROUNDING + // This adjustment is required in order to round -1/2 correctly + product--; +80028854: 00c2402b sltu t0,a2,v0 +80028858: 2467ffff addiu a3,v1,-1 +8002885c: 00c01021 move v0,a2 +80028860: 1000fff1 b 80028828 <fix16_smul+0x48> +80028864: 01071821 addu v1,t0,a3 + if (result == fix16_overflow) + { + if ((inArg0 >= 0) == (inArg1 >= 0)) + return fix16_max; + else + return fix16_min; +80028868: 03e00008 jr ra +8002886c: 3c028000 lui v0,0x8000 + +80028870 <fix16_div>: +fix16_t fix16_div(fix16_t a, fix16_t b) +{ + // This uses a hardware 32/32 bit division multiple times, until we have + // computed all the bits in (a<<17)/b. Usually this takes 1-3 iterations. + + if (b == 0) +80028870: 10a00062 beqz a1,800289fc <fix16_div+0x18c> +80028874: 00000000 nop + return result; +} +#endif + +fix16_t fix16_div(fix16_t a, fix16_t b) +{ +80028878: 27bdffd0 addiu sp,sp,-48 + // computed all the bits in (a<<17)/b. Usually this takes 1-3 iterations. + + if (b == 0) + return fix16_min; + + uint32_t remainder = (a >= 0) ? a : (-a); +8002887c: 00803821 move a3,a0 + return result; +} +#endif + +fix16_t fix16_div(fix16_t a, fix16_t b) +{ +80028880: afbf002c sw ra,44(sp) +80028884: afb60028 sw s6,40(sp) +80028888: afb50024 sw s5,36(sp) +8002888c: afb40020 sw s4,32(sp) +80028890: afb3001c sw s3,28(sp) +80028894: afb20018 sw s2,24(sp) +80028898: afb10014 sw s1,20(sp) + // computed all the bits in (a<<17)/b. Usually this takes 1-3 iterations. + + if (b == 0) + return fix16_min; + + uint32_t remainder = (a >= 0) ? a : (-a); +8002889c: 04800055 bltz a0,800289f4 <fix16_div+0x184> +800288a0: afb00010 sw s0,16(sp) +800288a4: 00e08021 move s0,a3 + uint32_t divider = (b >= 0) ? b : (-b); +800288a8: 04a00050 bltz a1,800289ec <fix16_div+0x17c> +800288ac: 00a03021 move a2,a1 + int bit_pos = 17; + + // Kick-start the division a bit. + // This improves speed in the worst-case scenarios where N and D are large + // It gets a lower estimate for the result by N/(D >> 17 + 1). + if (divider & 0xFFF00000) +800288b0: 3c02fff0 lui v0,0xfff0 +800288b4: 00c21024 and v0,a2,v0 +800288b8: 14400036 bnez v0,80028994 <fix16_div+0x124> +800288bc: 00c08821 move s1,a2 + if (b == 0) + return fix16_min; + + uint32_t remainder = (a >= 0) ? a : (-a); + uint32_t divider = (b >= 0) ? b : (-b); + uint32_t quotient = 0; +800288c0: 0000b021 move s6,zero + quotient = remainder / shifted_div; + remainder -= ((uint64_t)quotient * divider) >> 17; + } + + // If the divider is divisible by 2^n, take advantage of it. + while (!(divider & 0xF) && bit_pos >= 4) +800288c4: 30c6000f andi a2,a2,0xf +800288c8: 0080a021 move s4,a0 +800288cc: 00a09821 move s3,a1 +800288d0: 14c00008 bnez a2,800288f4 <fix16_div+0x84> +800288d4: 24150011 li s5,17 +800288d8: 24030001 li v1,1 + { + divider >>= 4; +800288dc: 00118902 srl s1,s1,0x4 + quotient = remainder / shifted_div; + remainder -= ((uint64_t)quotient * divider) >> 17; + } + + // If the divider is divisible by 2^n, take advantage of it. + while (!(divider & 0xF) && bit_pos >= 4) +800288e0: 3222000f andi v0,s1,0xf +800288e4: 14400003 bnez v0,800288f4 <fix16_div+0x84> +800288e8: 26b5fffc addiu s5,s5,-4 +800288ec: 16a3fffb bne s5,v1,800288dc <fix16_div+0x6c> +800288f0: 00000000 nop + { + divider >>= 4; + bit_pos -= 4; + } + + while (remainder && bit_pos >= 0) +800288f4: 12000037 beqz s0,800289d4 <fix16_div+0x164> +800288f8: 2412ffff li s2,-1 +800288fc: 10000005 b 80028914 <fix16_div+0xa4> +80028900: 00000000 nop +80028904: 12000033 beqz s0,800289d4 <fix16_div+0x164> +80028908: 00000000 nop +8002890c: 06a00031 bltz s5,800289d4 <fix16_div+0x164> +80028910: 00000000 nop + { + // Shift remainder as much as we can without overflowing + int shift = clz(remainder); +80028914: 0c00a2d8 jal 80028b60 <__clzsi2> +80028918: 02002021 move a0,s0 +8002891c: 02a2182a slt v1,s5,v0 +80028920: 10600002 beqz v1,8002892c <fix16_div+0xbc> +80028924: 00000000 nop +80028928: 02a01021 move v0,s5 + if (shift > bit_pos) shift = bit_pos; + remainder <<= shift; +8002892c: 00508004 sllv s0,s0,v0 + bit_pos -= shift; + + uint32_t div = remainder / divider; +80028930: 16200002 bnez s1,8002893c <fix16_div+0xcc> +80028934: 0211001b divu zero,s0,s1 +80028938: 0007000d break 0x7 + { + // Shift remainder as much as we can without overflowing + int shift = clz(remainder); + if (shift > bit_pos) shift = bit_pos; + remainder <<= shift; + bit_pos -= shift; +8002893c: 02a21023 subu v0,s5,v0 + uint32_t div = remainder / divider; + remainder = remainder % divider; + quotient += div << bit_pos; + + #ifndef FIXMATH_NO_OVERFLOW + if (div & ~(0xFFFFFFFF >> bit_pos)) +80028940: 00521806 srlv v1,s2,v0 +80028944: 00031827 nor v1,zero,v1 + return fix16_overflow; + #endif + + remainder <<= 1; + bit_pos--; +80028948: 2455ffff addiu s5,v0,-1 + int shift = clz(remainder); + if (shift > bit_pos) shift = bit_pos; + remainder <<= shift; + bit_pos -= shift; + + uint32_t div = remainder / divider; +8002894c: 00008012 mflo s0 + remainder = remainder % divider; + quotient += div << bit_pos; +80028950: 00501004 sllv v0,s0,v0 + + #ifndef FIXMATH_NO_OVERFLOW + if (div & ~(0xFFFFFFFF >> bit_pos)) +80028954: 00701824 and v1,v1,s0 + int shift = clz(remainder); + if (shift > bit_pos) shift = bit_pos; + remainder <<= shift; + bit_pos -= shift; + + uint32_t div = remainder / divider; +80028958: 00002010 mfhi a0 + #ifndef FIXMATH_NO_OVERFLOW + if (div & ~(0xFFFFFFFF >> bit_pos)) + return fix16_overflow; + #endif + + remainder <<= 1; +8002895c: 00048040 sll s0,a0,0x1 + uint32_t div = remainder / divider; + remainder = remainder % divider; + quotient += div << bit_pos; + + #ifndef FIXMATH_NO_OVERFLOW + if (div & ~(0xFFFFFFFF >> bit_pos)) +80028960: 1060ffe8 beqz v1,80028904 <fix16_div+0x94> +80028964: 02c2b021 addu s6,s6,v0 +{ + // This uses a hardware 32/32 bit division multiple times, until we have + // computed all the bits in (a<<17)/b. Usually this takes 1-3 iterations. + + if (b == 0) + return fix16_min; +80028968: 3c028000 lui v0,0x8000 + + result = -result; + } + + return result; +} +8002896c: 8fbf002c lw ra,44(sp) +80028970: 8fb60028 lw s6,40(sp) +80028974: 8fb50024 lw s5,36(sp) +80028978: 8fb40020 lw s4,32(sp) +8002897c: 8fb3001c lw s3,28(sp) +80028980: 8fb20018 lw s2,24(sp) +80028984: 8fb10014 lw s1,20(sp) +80028988: 8fb00010 lw s0,16(sp) +8002898c: 03e00008 jr ra +80028990: 27bd0030 addiu sp,sp,48 + // This improves speed in the worst-case scenarios where N and D are large + // It gets a lower estimate for the result by N/(D >> 17 + 1). + if (divider & 0xFFF00000) + { + uint32_t shifted_div = ((divider >> 17) + 1); + quotient = remainder / shifted_div; +80028994: 0006b442 srl s6,a2,0x11 +80028998: 26d60001 addiu s6,s6,1 +8002899c: 16c00002 bnez s6,800289a8 <fix16_div+0x138> +800289a0: 00f6001b divu zero,a3,s6 +800289a4: 0007000d break 0x7 +800289a8: 0000b012 mflo s6 + ... + remainder -= ((uint64_t)quotient * divider) >> 17; +800289b4: 02c60019 multu s6,a2 +800289b8: 00001012 mflo v0 +800289bc: 00021442 srl v0,v0,0x11 +800289c0: 00001810 mfhi v1 +800289c4: 00031bc0 sll v1,v1,0xf +800289c8: 00621025 or v0,v1,v0 +800289cc: 1000ffbd b 800288c4 <fix16_div+0x54> +800289d0: 00e28023 subu s0,a3,v0 + #ifndef FIXMATH_NO_ROUNDING + // Quotient is always positive so rounding is easy + quotient++; + #endif + + fix16_t result = quotient >> 1; +800289d4: 26d60001 addiu s6,s6,1 + + // Figure out the sign of the result + if ((a ^ b) & 0x80000000) +800289d8: 02749826 xor s3,s3,s4 +800289dc: 0661ffe3 bgez s3,8002896c <fix16_div+0xfc> +800289e0: 00161042 srl v0,s6,0x1 + #ifndef FIXMATH_NO_OVERFLOW + if (result == fix16_min) + return fix16_overflow; + #endif + + result = -result; +800289e4: 1000ffe1 b 8002896c <fix16_div+0xfc> +800289e8: 00021023 negu v0,v0 + + if (b == 0) + return fix16_min; + + uint32_t remainder = (a >= 0) ? a : (-a); + uint32_t divider = (b >= 0) ? b : (-b); +800289ec: 1000ffb0 b 800288b0 <fix16_div+0x40> +800289f0: 00053023 negu a2,a1 + // computed all the bits in (a<<17)/b. Usually this takes 1-3 iterations. + + if (b == 0) + return fix16_min; + + uint32_t remainder = (a >= 0) ? a : (-a); +800289f4: 1000ffab b 800288a4 <fix16_div+0x34> +800289f8: 00043823 negu a3,a0 + + result = -result; + } + + return result; +} +800289fc: 03e00008 jr ra +80028a00: 3c028000 lui v0,0x8000 + +80028a04 <fix16_sdiv>: +} +#endif + +#ifndef FIXMATH_NO_OVERFLOW +/* Wrapper around fix16_div to add saturating arithmetic. */ +fix16_t fix16_sdiv(fix16_t inArg0, fix16_t inArg1) { +80028a04: 27bdffe0 addiu sp,sp,-32 +80028a08: afb10018 sw s1,24(sp) +80028a0c: afb00014 sw s0,20(sp) +80028a10: afbf001c sw ra,28(sp) +80028a14: 00808821 move s1,a0 + fix16_t result = fix16_div(inArg0, inArg1); +80028a18: 0c00a21c jal 80028870 <fix16_div> +80028a1c: 00a08021 move s0,a1 + + if (result == fix16_overflow) +80028a20: 3c038000 lui v1,0x8000 +80028a24: 10430006 beq v0,v1,80028a40 <fix16_sdiv+0x3c> +80028a28: 00108027 nor s0,zero,s0 + else + return fix16_min; + } + + return result; +} +80028a2c: 8fbf001c lw ra,28(sp) +80028a30: 8fb10018 lw s1,24(sp) +80028a34: 8fb00014 lw s0,20(sp) +80028a38: 03e00008 jr ra +80028a3c: 27bd0020 addiu sp,sp,32 +fix16_t fix16_sdiv(fix16_t inArg0, fix16_t inArg1) { + fix16_t result = fix16_div(inArg0, inArg1); + + if (result == fix16_overflow) + { + if ((inArg0 >= 0) == (inArg1 >= 0)) +80028a40: 00118fc2 srl s1,s1,0x1f +80028a44: 001087c2 srl s0,s0,0x1f +80028a48: 1230fff8 beq s1,s0,80028a2c <fix16_sdiv+0x28> +80028a4c: 3c028000 lui v0,0x8000 + else + return fix16_min; + } + + return result; +} +80028a50: 8fbf001c lw ra,28(sp) + fix16_t result = fix16_div(inArg0, inArg1); + + if (result == fix16_overflow) + { + if ((inArg0 >= 0) == (inArg1 >= 0)) + return fix16_max; +80028a54: 3c027fff lui v0,0x7fff + else + return fix16_min; + } + + return result; +} +80028a58: 8fb10018 lw s1,24(sp) +80028a5c: 8fb00014 lw s0,20(sp) + fix16_t result = fix16_div(inArg0, inArg1); + + if (result == fix16_overflow) + { + if ((inArg0 >= 0) == (inArg1 >= 0)) + return fix16_max; +80028a60: 3442ffff ori v0,v0,0xffff + else + return fix16_min; + } + + return result; +} +80028a64: 03e00008 jr ra +80028a68: 27bd0020 addiu sp,sp,32 + +80028a6c <fix16_lerp8>: +#endif + +fix16_t fix16_lerp8(fix16_t inArg0, fix16_t inArg1, uint8_t inFract) { +80028a6c: 30c600ff andi a2,a2,0xff + int64_t tempOut = int64_mul_i32_i32(inArg0, ((1 << 8) - inFract)); + tempOut = int64_add(tempOut, int64_mul_i32_i32(inArg1, inFract)); + tempOut = int64_shift(tempOut, -8); + return (fix16_t)int64_lo(tempOut); +80028a70: 24020100 li v0,256 +80028a74: 00461023 subu v0,v0,a2 +80028a78: 00440018 mult v0,a0 +80028a7c: 00002012 mflo a0 +80028a80: 000417c3 sra v0,a0,0x1f +80028a84: 00000000 nop +80028a88: 00c50018 mult a2,a1 +80028a8c: 00002812 mflo a1 +80028a90: 00853821 addu a3,a0,a1 +80028a94: 000537c3 sra a2,a1,0x1f +80028a98: 00e4182b sltu v1,a3,a0 +80028a9c: 00462021 addu a0,v0,a2 +80028aa0: 00642021 addu a0,v1,a0 +80028aa4: 00042600 sll a0,a0,0x18 +80028aa8: 00071202 srl v0,a3,0x8 +} +80028aac: 03e00008 jr ra +80028ab0: 00821025 or v0,a0,v0 + +80028ab4 <fix16_lerp16>: + +fix16_t fix16_lerp16(fix16_t inArg0, fix16_t inArg1, uint16_t inFract) { +80028ab4: 30c6ffff andi a2,a2,0xffff + int64_t tempOut = int64_mul_i32_i32(inArg0, ((1 << 16) - inFract)); + tempOut = int64_add(tempOut, int64_mul_i32_i32(inArg1, inFract)); + tempOut = int64_shift(tempOut, -16); + return (fix16_t)int64_lo(tempOut); +80028ab8: 3c020001 lui v0,0x1 +80028abc: 00461023 subu v0,v0,a2 +80028ac0: 00440018 mult v0,a0 +80028ac4: 00002012 mflo a0 +80028ac8: 000417c3 sra v0,a0,0x1f +80028acc: 00000000 nop +80028ad0: 00c50018 mult a2,a1 +80028ad4: 00002812 mflo a1 +80028ad8: 00853821 addu a3,a0,a1 +80028adc: 000537c3 sra a2,a1,0x1f +80028ae0: 00e4182b sltu v1,a3,a0 +80028ae4: 00462021 addu a0,v0,a2 +80028ae8: 00642021 addu a0,v1,a0 +80028aec: 00042400 sll a0,a0,0x10 +80028af0: 00071402 srl v0,a3,0x10 +} +80028af4: 03e00008 jr ra +80028af8: 00821025 or v0,a0,v0 + +80028afc <fix16_lerp32>: + +#ifndef FIXMATH_NO_64BIT +fix16_t fix16_lerp32(fix16_t inArg0, fix16_t inArg1, uint32_t inFract) { + int64_t tempOut; + tempOut = ((int64_t)inArg0 * (0 - inFract)); +80028afc: 00061023 negu v0,a2 +80028b00: 00043fc3 sra a3,a0,0x1f +80028b04: 00e20018 mult a3,v0 + tempOut += ((int64_t)inArg1 * inFract); +80028b08: 00051fc3 sra v1,a1,0x1f +} + +#ifndef FIXMATH_NO_64BIT +fix16_t fix16_lerp32(fix16_t inArg0, fix16_t inArg1, uint32_t inFract) { + int64_t tempOut; + tempOut = ((int64_t)inArg0 * (0 - inFract)); +80028b0c: 00003812 mflo a3 + ... +80028b18: 00440019 multu v0,a0 +80028b1c: 00004012 mflo t0 +80028b20: 00004810 mfhi t1 +80028b24: 00e94821 addu t1,a3,t1 +80028b28: 00000000 nop + tempOut += ((int64_t)inArg1 * inFract); +80028b2c: 00660018 mult v1,a2 +80028b30: 00001012 mflo v0 + ... +80028b3c: 00a60019 multu a1,a2 +80028b40: 00003012 mflo a2 +80028b44: 00003810 mfhi a3 +80028b48: 00473821 addu a3,v0,a3 +80028b4c: 00c81021 addu v0,a2,t0 +80028b50: 0046102b sltu v0,v0,a2 +80028b54: 00e91821 addu v1,a3,t1 + tempOut >>= 32; + return (fix16_t)tempOut; +} +80028b58: 03e00008 jr ra +80028b5c: 00431021 addu v0,v0,v1 + +80028b60 <__clzsi2>: +80028b60: 3c020001 lui v0,0x1 +80028b64: 0082102b sltu v0,a0,v0 +80028b68: 1040000c beqz v0,80028b9c <__clzsi2+0x3c> +80028b6c: 3c020100 lui v0,0x100 +80028b70: 2c820100 sltiu v0,a0,256 +80028b74: 10400014 beqz v0,80028bc8 <__clzsi2+0x68> +80028b78: 3c038004 lui v1,0x8004 +80028b7c: 00001021 move v0,zero +80028b80: 00442006 srlv a0,a0,v0 +80028b84: 2463f818 addiu v1,v1,-2024 +80028b88: 00832021 addu a0,a0,v1 +80028b8c: 90820000 lbu v0,0(a0) +80028b90: 24050020 li a1,32 +80028b94: 03e00008 jr ra +80028b98: 00a21023 subu v0,a1,v0 +80028b9c: 0082102b sltu v0,a0,v0 +80028ba0: 14400011 bnez v0,80028be8 <__clzsi2+0x88> +80028ba4: 3c038004 lui v1,0x8004 +80028ba8: 24020018 li v0,24 +80028bac: 00442006 srlv a0,a0,v0 +80028bb0: 2463f818 addiu v1,v1,-2024 +80028bb4: 00832021 addu a0,a0,v1 +80028bb8: 90820000 lbu v0,0(a0) +80028bbc: 24050008 li a1,8 +80028bc0: 03e00008 jr ra +80028bc4: 00a21023 subu v0,a1,v0 +80028bc8: 24020008 li v0,8 +80028bcc: 00442006 srlv a0,a0,v0 +80028bd0: 2463f818 addiu v1,v1,-2024 +80028bd4: 00832021 addu a0,a0,v1 +80028bd8: 90820000 lbu v0,0(a0) +80028bdc: 24050018 li a1,24 +80028be0: 03e00008 jr ra +80028be4: 00a21023 subu v0,a1,v0 +80028be8: 24020010 li v0,16 +80028bec: 00442006 srlv a0,a0,v0 +80028bf0: 2463f818 addiu v1,v1,-2024 +80028bf4: 00832021 addu a0,a0,v1 +80028bf8: 90820000 lbu v0,0(a0) +80028bfc: 24050010 li a1,16 +80028c00: 03e00008 jr ra +80028c04: 00a21023 subu v0,a1,v0 + +80028c08 <__do_global_ctors_aux>: +80028c08: 3c028004 lui v0,0x8004 +80028c0c: 8c422574 lw v0,9588(v0) +80028c10: 2403ffff li v1,-1 +80028c14: 10430012 beq v0,v1,80028c60 <__do_global_ctors_aux+0x58> +80028c18: 00000000 nop +80028c1c: 27bdffe0 addiu sp,sp,-32 +80028c20: afb00014 sw s0,20(sp) +80028c24: 3c108004 lui s0,0x8004 +80028c28: afb10018 sw s1,24(sp) +80028c2c: afbf001c sw ra,28(sp) +80028c30: 26102574 addiu s0,s0,9588 +80028c34: 2411ffff li s1,-1 +80028c38: 0040f809 jalr v0 +80028c3c: 2610fffc addiu s0,s0,-4 +80028c40: 8e020000 lw v0,0(s0) +80028c44: 00000000 nop +80028c48: 1451fffb bne v0,s1,80028c38 <__do_global_ctors_aux+0x30> +80028c4c: 00000000 nop +80028c50: 8fbf001c lw ra,28(sp) +80028c54: 8fb10018 lw s1,24(sp) +80028c58: 8fb00014 lw s0,20(sp) +80028c5c: 27bd0020 addiu sp,sp,32 +80028c60: 03e00008 jr ra +80028c64: 00000000 nop + +80028c68 <fmode_to_desmode>: + FDEV_CDROM, + FDEV_MEMCARD +}; + +unsigned int fmode_to_desmode(const char *fmode) +{ +80028c68: 27bdffd0 addiu sp,sp,-48 +80028c6c: afbf002c sw ra,44(sp) +80028c70: afbe0028 sw s8,40(sp) +80028c74: 03a0f021 move s8,sp +80028c78: afc40030 sw a0,48(s8) + char rmode[16]; + int x, y; + + y = 0; +80028c7c: afc00014 sw zero,20(s8) + + for(x=0;x<15;x++) +80028c80: afc00010 sw zero,16(s8) +80028c84: 10000029 b 80028d2c <fmode_to_desmode+0xc4> +80028c88: 00000000 nop + { + if(fmode[x] == 0) +80028c8c: 8fc20010 lw v0,16(s8) +80028c90: 8fc30030 lw v1,48(s8) +80028c94: 00000000 nop +80028c98: 00621021 addu v0,v1,v0 +80028c9c: 80420000 lb v0,0(v0) +80028ca0: 00000000 nop +80028ca4: 10400028 beqz v0,80028d48 <fmode_to_desmode+0xe0> +80028ca8: 00000000 nop + break; + else + { + if(fmode[x] != 'b' && fmode[x] != 'f') +80028cac: 8fc20010 lw v0,16(s8) +80028cb0: 8fc30030 lw v1,48(s8) +80028cb4: 00000000 nop +80028cb8: 00621021 addu v0,v1,v0 +80028cbc: 80430000 lb v1,0(v0) +80028cc0: 24020062 li v0,98 +80028cc4: 10620015 beq v1,v0,80028d1c <fmode_to_desmode+0xb4> +80028cc8: 00000000 nop +80028ccc: 8fc20010 lw v0,16(s8) +80028cd0: 8fc30030 lw v1,48(s8) +80028cd4: 00000000 nop +80028cd8: 00621021 addu v0,v1,v0 +80028cdc: 80430000 lb v1,0(v0) +80028ce0: 24020066 li v0,102 +80028ce4: 1062000d beq v1,v0,80028d1c <fmode_to_desmode+0xb4> +80028ce8: 00000000 nop + rmode[y++] = fmode[x]; +80028cec: 8fc20014 lw v0,20(s8) +80028cf0: 00000000 nop +80028cf4: 24430001 addiu v1,v0,1 +80028cf8: afc30014 sw v1,20(s8) +80028cfc: 8fc30010 lw v1,16(s8) +80028d00: 8fc40030 lw a0,48(s8) +80028d04: 00000000 nop +80028d08: 00831821 addu v1,a0,v1 +80028d0c: 80630000 lb v1,0(v1) +80028d10: 27c40010 addiu a0,s8,16 +80028d14: 00821021 addu v0,a0,v0 +80028d18: a0430008 sb v1,8(v0) + char rmode[16]; + int x, y; + + y = 0; + + for(x=0;x<15;x++) +80028d1c: 8fc20010 lw v0,16(s8) +80028d20: 00000000 nop +80028d24: 24420001 addiu v0,v0,1 +80028d28: afc20010 sw v0,16(s8) +80028d2c: 8fc20010 lw v0,16(s8) +80028d30: 00000000 nop +80028d34: 2842000f slti v0,v0,15 +80028d38: 1440ffd4 bnez v0,80028c8c <fmode_to_desmode+0x24> +80028d3c: 00000000 nop +80028d40: 10000002 b 80028d4c <fmode_to_desmode+0xe4> +80028d44: 00000000 nop + { + if(fmode[x] == 0) + break; +80028d48: 00000000 nop + if(fmode[x] != 'b' && fmode[x] != 'f') + rmode[y++] = fmode[x]; + } + } + + rmode[y] = 0; +80028d4c: 8fc20014 lw v0,20(s8) +80028d50: 27c30010 addiu v1,s8,16 +80028d54: 00621021 addu v0,v1,v0 +80028d58: a0400008 sb zero,8(v0) + + if(strcmp(rmode, "r") == 0) +80028d5c: 27c30018 addiu v1,s8,24 +80028d60: 3c028004 lui v0,0x8004 +80028d64: 2445f918 addiu a1,v0,-1768 +80028d68: 00602021 move a0,v1 +80028d6c: 0c00d9aa jal 800366a8 <strcmp> +80028d70: 00000000 nop +80028d74: 14400004 bnez v0,80028d88 <fmode_to_desmode+0x120> +80028d78: 00000000 nop + { + return O_RDONLY; +80028d7c: 24020001 li v0,1 +80028d80: 10000039 b 80028e68 <fmode_to_desmode+0x200> +80028d84: 00000000 nop + } + else if(strcmp(rmode, "r+") == 0) +80028d88: 27c30018 addiu v1,s8,24 +80028d8c: 3c028004 lui v0,0x8004 +80028d90: 2445f91c addiu a1,v0,-1764 +80028d94: 00602021 move a0,v1 +80028d98: 0c00d9aa jal 800366a8 <strcmp> +80028d9c: 00000000 nop +80028da0: 14400004 bnez v0,80028db4 <fmode_to_desmode+0x14c> +80028da4: 00000000 nop + { + dprintf("Open for reading and writing.\n"); + return O_RDWR; +80028da8: 24020003 li v0,3 +80028dac: 1000002e b 80028e68 <fmode_to_desmode+0x200> +80028db0: 00000000 nop + } + else if(strcmp(rmode, "w") == 0) +80028db4: 27c30018 addiu v1,s8,24 +80028db8: 3c028004 lui v0,0x8004 +80028dbc: 2445f920 addiu a1,v0,-1760 +80028dc0: 00602021 move a0,v1 +80028dc4: 0c00d9aa jal 800366a8 <strcmp> +80028dc8: 00000000 nop +80028dcc: 14400004 bnez v0,80028de0 <fmode_to_desmode+0x178> +80028dd0: 00000000 nop + { + dprintf("Open for writing.\n"); + return O_WRONLY | O_CREAT | O_TRUNC; +80028dd4: 24020602 li v0,1538 +80028dd8: 10000023 b 80028e68 <fmode_to_desmode+0x200> +80028ddc: 00000000 nop + } + else if(strcmp(rmode, "w+") == 0) +80028de0: 27c30018 addiu v1,s8,24 +80028de4: 3c028004 lui v0,0x8004 +80028de8: 2445f924 addiu a1,v0,-1756 +80028dec: 00602021 move a0,v1 +80028df0: 0c00d9aa jal 800366a8 <strcmp> +80028df4: 00000000 nop +80028df8: 14400004 bnez v0,80028e0c <fmode_to_desmode+0x1a4> +80028dfc: 00000000 nop + { + dprintf("Open for writing. Truncate to zero or create file.\n"); + return O_RDWR | O_CREAT | O_TRUNC; +80028e00: 24020603 li v0,1539 +80028e04: 10000018 b 80028e68 <fmode_to_desmode+0x200> +80028e08: 00000000 nop + } + else if(strcmp(rmode, "a") == 0) +80028e0c: 27c30018 addiu v1,s8,24 +80028e10: 3c028004 lui v0,0x8004 +80028e14: 2445f928 addiu a1,v0,-1752 +80028e18: 00602021 move a0,v1 +80028e1c: 0c00d9aa jal 800366a8 <strcmp> +80028e20: 00000000 nop +80028e24: 14400004 bnez v0,80028e38 <fmode_to_desmode+0x1d0> +80028e28: 00000000 nop + { + dprintf("Append; open for writing. Create file if it doesn't exist.\n"); + return O_WRONLY | O_APPEND; +80028e2c: 24020102 li v0,258 +80028e30: 1000000d b 80028e68 <fmode_to_desmode+0x200> +80028e34: 00000000 nop + } + else if(strcmp(rmode, "a+") == 0) +80028e38: 27c30018 addiu v1,s8,24 +80028e3c: 3c028004 lui v0,0x8004 +80028e40: 2445f92c addiu a1,v0,-1748 +80028e44: 00602021 move a0,v1 +80028e48: 0c00d9aa jal 800366a8 <strcmp> +80028e4c: 00000000 nop +80028e50: 14400004 bnez v0,80028e64 <fmode_to_desmode+0x1fc> +80028e54: 00000000 nop + { + dprintf("Append; open for reading and writing. Create file if it doesn't exist.\n"); + return O_RDWR | O_APPEND | O_CREAT; +80028e58: 24020303 li v0,771 +80028e5c: 10000002 b 80028e68 <fmode_to_desmode+0x200> +80028e60: 00000000 nop + } + else + { + return 0; +80028e64: 00001021 move v0,zero + } +} +80028e68: 03c0e821 move sp,s8 +80028e6c: 8fbf002c lw ra,44(sp) +80028e70: 8fbe0028 lw s8,40(sp) +80028e74: 27bd0030 addiu sp,sp,48 +80028e78: 03e00008 jr ra +80028e7c: 00000000 nop + +80028e80 <fdopen>: + +FILE *fdopen(int fildes, const char *mode) +{ +80028e80: 27bdffe0 addiu sp,sp,-32 +80028e84: afbf001c sw ra,28(sp) +80028e88: afbe0018 sw s8,24(sp) +80028e8c: 03a0f021 move s8,sp +80028e90: afc40020 sw a0,32(s8) +80028e94: afc50024 sw a1,36(s8) +// Adjust for malloc + int x; + +// Find a free file structure + for(x = 0; x < 256; x++) +80028e98: afc00010 sw zero,16(s8) +80028e9c: 1000001d b 80028f14 <fdopen+0x94> +80028ea0: 00000000 nop + { + if(file_structs[x].used == 0) +80028ea4: 3c028007 lui v0,0x8007 +80028ea8: 8fc40010 lw a0,16(s8) +80028eac: 2443db6c addiu v1,v0,-9364 +80028eb0: 00801021 move v0,a0 +80028eb4: 000210c0 sll v0,v0,0x3 +80028eb8: 00022080 sll a0,v0,0x2 +80028ebc: 00821023 subu v0,a0,v0 +80028ec0: 00621021 addu v0,v1,v0 +80028ec4: 8c420014 lw v0,20(v0) +80028ec8: 00000000 nop +80028ecc: 1440000d bnez v0,80028f04 <fdopen+0x84> +80028ed0: 00000000 nop + { + file_structs[x].used = 1; +80028ed4: 3c028007 lui v0,0x8007 +80028ed8: 8fc40010 lw a0,16(s8) +80028edc: 2443db6c addiu v1,v0,-9364 +80028ee0: 00801021 move v0,a0 +80028ee4: 000210c0 sll v0,v0,0x3 +80028ee8: 00022080 sll a0,v0,0x2 +80028eec: 00821023 subu v0,a0,v0 +80028ef0: 00621021 addu v0,v1,v0 +80028ef4: 24030001 li v1,1 +80028ef8: ac430014 sw v1,20(v0) + break; +80028efc: 1000000a b 80028f28 <fdopen+0xa8> +80028f00: 00000000 nop +{ +// Adjust for malloc + int x; + +// Find a free file structure + for(x = 0; x < 256; x++) +80028f04: 8fc20010 lw v0,16(s8) +80028f08: 00000000 nop +80028f0c: 24420001 addiu v0,v0,1 +80028f10: afc20010 sw v0,16(s8) +80028f14: 8fc20010 lw v0,16(s8) +80028f18: 00000000 nop +80028f1c: 28420100 slti v0,v0,256 +80028f20: 1440ffe0 bnez v0,80028ea4 <fdopen+0x24> +80028f24: 00000000 nop + } + } + +// If we found no free file structure, return NULL pointer + + if(x == 256) +80028f28: 8fc30010 lw v1,16(s8) +80028f2c: 24020100 li v0,256 +80028f30: 14620004 bne v1,v0,80028f44 <fdopen+0xc4> +80028f34: 00000000 nop + return NULL; +80028f38: 00001021 move v0,zero +80028f3c: 10000036 b 80029018 <fdopen+0x198> +80028f40: 00000000 nop + + + file_structs[x].fildes = fildes; +80028f44: 3c048007 lui a0,0x8007 +80028f48: 8fc20010 lw v0,16(s8) +80028f4c: 00000000 nop +80028f50: 00401821 move v1,v0 +80028f54: 000310c0 sll v0,v1,0x3 +80028f58: 00401821 move v1,v0 +80028f5c: 00031080 sll v0,v1,0x2 +80028f60: 00431023 subu v0,v0,v1 +80028f64: 2483db6c addiu v1,a0,-9364 +80028f68: 00431021 addu v0,v0,v1 +80028f6c: 8fc30020 lw v1,32(s8) +80028f70: 00000000 nop +80028f74: ac430000 sw v1,0(v0) + file_structs[x].pos = lseek(fildes, 0, SEEK_CUR); +80028f78: 24060001 li a2,1 +80028f7c: 00002821 move a1,zero +80028f80: 8fc40020 lw a0,32(s8) +80028f84: 0c00ede0 jal 8003b780 <lseek> +80028f88: 00000000 nop +80028f8c: 00402821 move a1,v0 +80028f90: 3c028007 lui v0,0x8007 +80028f94: 8fc40010 lw a0,16(s8) +80028f98: 2443db6c addiu v1,v0,-9364 +80028f9c: 00801021 move v0,a0 +80028fa0: 000210c0 sll v0,v0,0x3 +80028fa4: 00022080 sll a0,v0,0x2 +80028fa8: 00821023 subu v0,a0,v0 +80028fac: 00621021 addu v0,v1,v0 +80028fb0: ac450004 sw a1,4(v0) + file_structs[x].mode = fmode_to_desmode(mode); +80028fb4: 8fc40024 lw a0,36(s8) +80028fb8: 0c00a31a jal 80028c68 <fmode_to_desmode> +80028fbc: 00000000 nop +80028fc0: 00402821 move a1,v0 +80028fc4: 3c048007 lui a0,0x8007 +80028fc8: 8fc20010 lw v0,16(s8) +80028fcc: 00000000 nop +80028fd0: 00401821 move v1,v0 +80028fd4: 000310c0 sll v0,v1,0x3 +80028fd8: 00401821 move v1,v0 +80028fdc: 00031080 sll v0,v1,0x2 +80028fe0: 00431023 subu v0,v0,v1 +80028fe4: 2483db6c addiu v1,a0,-9364 +80028fe8: 00431021 addu v0,v0,v1 +80028fec: ac450008 sw a1,8(v0) + + return &file_structs[x]; +80028ff0: 8fc20010 lw v0,16(s8) +80028ff4: 00000000 nop +80028ff8: 00401821 move v1,v0 +80028ffc: 000310c0 sll v0,v1,0x3 +80029000: 00401821 move v1,v0 +80029004: 00031080 sll v0,v1,0x2 +80029008: 00431023 subu v0,v0,v1 +8002900c: 3c038007 lui v1,0x8007 +80029010: 2463db6c addiu v1,v1,-9364 +80029014: 00431021 addu v0,v0,v1 +} +80029018: 03c0e821 move sp,s8 +8002901c: 8fbf001c lw ra,28(sp) +80029020: 8fbe0018 lw s8,24(sp) +80029024: 27bd0020 addiu sp,sp,32 +80029028: 03e00008 jr ra +8002902c: 00000000 nop + +80029030 <fopen>: + +FILE *fopen(char *path, const char *mode) +{ +80029030: 27bdffd8 addiu sp,sp,-40 +80029034: afbf0024 sw ra,36(sp) +80029038: afbe0020 sw s8,32(sp) +8002903c: 03a0f021 move s8,sp +80029040: afc40028 sw a0,40(s8) +80029044: afc5002c sw a1,44(s8) + int fd; + FILE *f; + char *s = NULL; +80029048: afc00014 sw zero,20(s8) + + dprintf("fopen()\n"); + + if(strncmp(path, "cdromL:", 7) == 0) +8002904c: 24060007 li a2,7 +80029050: 3c028004 lui v0,0x8004 +80029054: 2445f930 addiu a1,v0,-1744 +80029058: 8fc40028 lw a0,40(s8) +8002905c: 0c00d9dd jal 80036774 <strncmp> +80029060: 00000000 nop +80029064: 1440001c bnez v0,800290d8 <fopen+0xa8> +80029068: 00000000 nop + { + //printf("strncmp=%d\n", strncmp(path, "cdromL:", 7) ); + s = malloc(1024); +8002906c: 24040400 li a0,1024 +80029070: 0c00ac10 jal 8002b040 <malloc> +80029074: 00000000 nop +80029078: afc20014 sw v0,20(s8) + + if(libc_get_transtbl_fname(path+7, s, 1024) == 0) +8002907c: 8fc20028 lw v0,40(s8) +80029080: 00000000 nop +80029084: 24420007 addiu v0,v0,7 +80029088: 24060400 li a2,1024 +8002908c: 8fc50014 lw a1,20(s8) +80029090: 00402021 move a0,v0 +80029094: 0c00a604 jal 80029810 <libc_get_transtbl_fname> +80029098: 00000000 nop +8002909c: 14400004 bnez v0,800290b0 <fopen+0x80> +800290a0: 00000000 nop + return NULL; +800290a4: 00001021 move v0,zero +800290a8: 1000006f b 80029268 <fopen+0x238> +800290ac: 00000000 nop + + fd = open(s, fmode_to_desmode(mode)); +800290b0: 8fc4002c lw a0,44(s8) +800290b4: 0c00a31a jal 80028c68 <fmode_to_desmode> +800290b8: 00000000 nop +800290bc: 00402821 move a1,v0 +800290c0: 8fc40014 lw a0,20(s8) +800290c4: 0c00eddc jal 8003b770 <open> +800290c8: 00000000 nop +800290cc: afc20010 sw v0,16(s8) +800290d0: 10000009 b 800290f8 <fopen+0xc8> +800290d4: 00000000 nop + } + else + { + fd = open(path, fmode_to_desmode(mode)); +800290d8: 8fc4002c lw a0,44(s8) +800290dc: 0c00a31a jal 80028c68 <fmode_to_desmode> +800290e0: 00000000 nop +800290e4: 00402821 move a1,v0 +800290e8: 8fc40028 lw a0,40(s8) +800290ec: 0c00eddc jal 8003b770 <open> +800290f0: 00000000 nop +800290f4: afc20010 sw v0,16(s8) + } + + if(fd == -1) +800290f8: 8fc30010 lw v1,16(s8) +800290fc: 2402ffff li v0,-1 +80029100: 1462000b bne v1,v0,80029130 <fopen+0x100> +80029104: 00000000 nop + { + if(s!=NULL)free(s); +80029108: 8fc20014 lw v0,20(s8) +8002910c: 00000000 nop +80029110: 10400004 beqz v0,80029124 <fopen+0xf4> +80029114: 00000000 nop +80029118: 8fc40014 lw a0,20(s8) +8002911c: 0c00acaf jal 8002b2bc <free> +80029120: 00000000 nop + return NULL; +80029124: 00001021 move v0,zero +80029128: 1000004f b 80029268 <fopen+0x238> +8002912c: 00000000 nop + } + + f = fdopen(fd, mode); +80029130: 8fc5002c lw a1,44(s8) +80029134: 8fc40010 lw a0,16(s8) +80029138: 0c00a3a0 jal 80028e80 <fdopen> +8002913c: 00000000 nop +80029140: afc20018 sw v0,24(s8) + + if(f == NULL) +80029144: 8fc20018 lw v0,24(s8) +80029148: 00000000 nop +8002914c: 1440000b bnez v0,8002917c <fopen+0x14c> +80029150: 00000000 nop + { + if(s!=NULL)free(s); +80029154: 8fc20014 lw v0,20(s8) +80029158: 00000000 nop +8002915c: 10400004 beqz v0,80029170 <fopen+0x140> +80029160: 00000000 nop +80029164: 8fc40014 lw a0,20(s8) +80029168: 0c00acaf jal 8002b2bc <free> +8002916c: 00000000 nop + return NULL; +80029170: 00001021 move v0,zero +80029174: 1000003c b 80029268 <fopen+0x238> +80029178: 00000000 nop + } + + f->dev = FDEV_UNKNOWN; +8002917c: 8fc20018 lw v0,24(s8) +80029180: 00000000 nop +80029184: ac40000c sw zero,12(v0) + + if(strncmp(path, "cdrom", 5) == 0 || strncmp(path, "cdromL", 6) == 0) +80029188: 24060005 li a2,5 +8002918c: 3c028004 lui v0,0x8004 +80029190: 2445f938 addiu a1,v0,-1736 +80029194: 8fc40028 lw a0,40(s8) +80029198: 0c00d9dd jal 80036774 <strncmp> +8002919c: 00000000 nop +800291a0: 10400009 beqz v0,800291c8 <fopen+0x198> +800291a4: 00000000 nop +800291a8: 24060006 li a2,6 +800291ac: 3c028004 lui v0,0x8004 +800291b0: 2445f940 addiu a1,v0,-1728 +800291b4: 8fc40028 lw a0,40(s8) +800291b8: 0c00d9dd jal 80036774 <strncmp> +800291bc: 00000000 nop +800291c0: 14400006 bnez v0,800291dc <fopen+0x1ac> +800291c4: 00000000 nop + f->dev = FDEV_CDROM; +800291c8: 8fc20018 lw v0,24(s8) +800291cc: 24030001 li v1,1 +800291d0: ac43000c sw v1,12(v0) +800291d4: 1000000c b 80029208 <fopen+0x1d8> +800291d8: 00000000 nop + else if(strncmp(path, "bu", 2) == 0) +800291dc: 24060002 li a2,2 +800291e0: 3c028004 lui v0,0x8004 +800291e4: 2445f948 addiu a1,v0,-1720 +800291e8: 8fc40028 lw a0,40(s8) +800291ec: 0c00d9dd jal 80036774 <strncmp> +800291f0: 00000000 nop +800291f4: 14400004 bnez v0,80029208 <fopen+0x1d8> +800291f8: 00000000 nop + f->dev = FDEV_MEMCARD; +800291fc: 8fc20018 lw v0,24(s8) +80029200: 24030002 li v1,2 +80029204: ac43000c sw v1,12(v0) + + if(s!=NULL) +80029208: 8fc20014 lw v0,20(s8) +8002920c: 00000000 nop +80029210: 1040000d beqz v0,80029248 <fopen+0x218> +80029214: 00000000 nop + { + f->size = get_real_file_size(s); +80029218: 8fc40014 lw a0,20(s8) +8002921c: 0c00d274 jal 800349d0 <get_real_file_size> +80029220: 00000000 nop +80029224: 00401821 move v1,v0 +80029228: 8fc20018 lw v0,24(s8) +8002922c: 00000000 nop +80029230: ac430010 sw v1,16(v0) + free(s); +80029234: 8fc40014 lw a0,20(s8) +80029238: 0c00acaf jal 8002b2bc <free> +8002923c: 00000000 nop +80029240: 10000008 b 80029264 <fopen+0x234> +80029244: 00000000 nop + } + else + f->size = get_real_file_size(path); +80029248: 8fc40028 lw a0,40(s8) +8002924c: 0c00d274 jal 800349d0 <get_real_file_size> +80029250: 00000000 nop +80029254: 00401821 move v1,v0 +80029258: 8fc20018 lw v0,24(s8) +8002925c: 00000000 nop +80029260: ac430010 sw v1,16(v0) + + dprintf("Finished fopen()\n"); + + return f; +80029264: 8fc20018 lw v0,24(s8) +} +80029268: 03c0e821 move sp,s8 +8002926c: 8fbf0024 lw ra,36(sp) +80029270: 8fbe0020 lw s8,32(sp) +80029274: 27bd0028 addiu sp,sp,40 +80029278: 03e00008 jr ra +8002927c: 00000000 nop + +80029280 <fclose>: + +int fclose(FILE *stream) +{ +80029280: 27bdffe8 addiu sp,sp,-24 +80029284: afbf0014 sw ra,20(sp) +80029288: afbe0010 sw s8,16(sp) +8002928c: 03a0f021 move s8,sp +80029290: afc40018 sw a0,24(s8) + stream->used = 0; +80029294: 8fc20018 lw v0,24(s8) +80029298: 00000000 nop +8002929c: ac400014 sw zero,20(v0) + close(stream->fildes); +800292a0: 8fc20018 lw v0,24(s8) +800292a4: 00000000 nop +800292a8: 8c420000 lw v0,0(v0) +800292ac: 00000000 nop +800292b0: 00402021 move a0,v0 +800292b4: 0c00edec jal 8003b7b0 <close> +800292b8: 00000000 nop + return 0; +800292bc: 00001021 move v0,zero +} +800292c0: 03c0e821 move sp,s8 +800292c4: 8fbf0014 lw ra,20(sp) +800292c8: 8fbe0010 lw s8,16(sp) +800292cc: 27bd0018 addiu sp,sp,24 +800292d0: 03e00008 jr ra +800292d4: 00000000 nop + +800292d8 <fread>: + * + * This is done to make programming and porting easier + */ + +int fread(void *ptr, int size, int nmemb, FILE *f) +{ +800292d8: 27bdffd8 addiu sp,sp,-40 +800292dc: afbf0024 sw ra,36(sp) +800292e0: afbe0020 sw s8,32(sp) +800292e4: 03a0f021 move s8,sp +800292e8: afc40028 sw a0,40(s8) +800292ec: afc5002c sw a1,44(s8) +800292f0: afc60030 sw a2,48(s8) +800292f4: afc70034 sw a3,52(s8) + int rsize = size * nmemb; +800292f8: 8fc3002c lw v1,44(s8) +800292fc: 8fc20030 lw v0,48(s8) +80029300: 00000000 nop +80029304: 00620018 mult v1,v0 +80029308: 00001012 mflo v0 +8002930c: afc20018 sw v0,24(s8) + int csize = rsize; +80029310: 8fc20018 lw v0,24(s8) +80029314: 00000000 nop +80029318: afc20010 sw v0,16(s8) + int max; + int nsect = (f->pos + rsize) >> 11; +8002931c: 8fc20034 lw v0,52(s8) +80029320: 00000000 nop +80029324: 8c430004 lw v1,4(v0) +80029328: 8fc20018 lw v0,24(s8) +8002932c: 00000000 nop +80029330: 00621021 addu v0,v1,v0 +80029334: 000212c2 srl v0,v0,0xb +80029338: afc20014 sw v0,20(s8) + nsect -= f->pos >> 11; +8002933c: 8fc30014 lw v1,20(s8) +80029340: 8fc20034 lw v0,52(s8) +80029344: 00000000 nop +80029348: 8c420004 lw v0,4(v0) +8002934c: 00000000 nop +80029350: 000212c2 srl v0,v0,0xb +80029354: 00621023 subu v0,v1,v0 +80029358: afc20014 sw v0,20(s8) + nsect++; +8002935c: 8fc20014 lw v0,20(s8) +80029360: 00000000 nop +80029364: 24420001 addiu v0,v0,1 +80029368: afc20014 sw v0,20(s8) + + //printf("f->dev = %d, f->pos = %d, rsize = %d\n", f->dev, f->pos, rsize); + + if(f->dev == FDEV_CDROM) +8002936c: 8fc20034 lw v0,52(s8) +80029370: 00000000 nop +80029374: 8c43000c lw v1,12(v0) +80029378: 24020001 li v0,1 +8002937c: 1462007c bne v1,v0,80029570 <fread+0x298> +80029380: 00000000 nop + { + // First sector + lseek(f->fildes, f->pos & (~0x7ff), SEEK_SET); +80029384: 8fc20034 lw v0,52(s8) +80029388: 00000000 nop +8002938c: 8c430000 lw v1,0(v0) +80029390: 8fc20034 lw v0,52(s8) +80029394: 00000000 nop +80029398: 8c420004 lw v0,4(v0) +8002939c: 00000000 nop +800293a0: 00402021 move a0,v0 +800293a4: 2402f800 li v0,-2048 +800293a8: 00821024 and v0,a0,v0 +800293ac: 00003021 move a2,zero +800293b0: 00402821 move a1,v0 +800293b4: 00602021 move a0,v1 +800293b8: 0c00ede0 jal 8003b780 <lseek> +800293bc: 00000000 nop + read(f->fildes, onesec_buf, 2048); +800293c0: 8fc20034 lw v0,52(s8) +800293c4: 00000000 nop +800293c8: 8c430000 lw v1,0(v0) +800293cc: 24060800 li a2,2048 +800293d0: 3c028007 lui v0,0x8007 +800293d4: 2445d36c addiu a1,v0,-11412 +800293d8: 00602021 move a0,v1 +800293dc: 0c00ede4 jal 8003b790 <read> +800293e0: 00000000 nop + + max = 2048 - (f->pos & 2047); +800293e4: 8fc20034 lw v0,52(s8) +800293e8: 00000000 nop +800293ec: 8c420004 lw v0,4(v0) +800293f0: 00000000 nop +800293f4: 304207ff andi v0,v0,0x7ff +800293f8: 24030800 li v1,2048 +800293fc: 00621023 subu v0,v1,v0 +80029400: afc2001c sw v0,28(s8) + + //printf("ptr(FIRST) = %d, %x\n", ptr, ptr); + dprintf("rsize = %d\n", rsize); + + memcpy(ptr, onesec_buf + (f->pos & 2047), (rsize > max) ? max : rsize); +80029404: 8fc20034 lw v0,52(s8) +80029408: 00000000 nop +8002940c: 8c420004 lw v0,4(v0) +80029410: 00000000 nop +80029414: 304307ff andi v1,v0,0x7ff +80029418: 3c028007 lui v0,0x8007 +8002941c: 2442d36c addiu v0,v0,-11412 +80029420: 00622821 addu a1,v1,v0 +80029424: 8fc3001c lw v1,28(s8) +80029428: 8fc20018 lw v0,24(s8) +8002942c: 00000000 nop +80029430: 0062202a slt a0,v1,v0 +80029434: 10800002 beqz a0,80029440 <fread+0x168> +80029438: 00000000 nop +8002943c: 00601021 move v0,v1 +80029440: 00403021 move a2,v0 +80029444: 8fc40028 lw a0,40(s8) +80029448: 0c00d75e jal 80035d78 <memcpy> +8002944c: 00000000 nop + + // Middle sector + ptr += max; +80029450: 8fc2001c lw v0,28(s8) +80029454: 8fc30028 lw v1,40(s8) +80029458: 00000000 nop +8002945c: 00621021 addu v0,v1,v0 +80029460: afc20028 sw v0,40(s8) + + //printf("ptr(MIDDLEsex) = %d, %x\n", ptr, ptr); + nsect--; +80029464: 8fc20014 lw v0,20(s8) +80029468: 00000000 nop +8002946c: 2442ffff addiu v0,v0,-1 +80029470: afc20014 sw v0,20(s8) + csize -= max; +80029474: 8fc30010 lw v1,16(s8) +80029478: 8fc2001c lw v0,28(s8) +8002947c: 00000000 nop +80029480: 00621023 subu v0,v1,v0 +80029484: afc20010 sw v0,16(s8) + + if(nsect > 1) +80029488: 8fc20014 lw v0,20(s8) +8002948c: 00000000 nop +80029490: 28420002 slti v0,v0,2 +80029494: 14400021 bnez v0,8002951c <fread+0x244> +80029498: 00000000 nop + + sect_num -= 4096;*/ + + //printf("read_middle=%d, sect_num = %d\n", read(f->fildes, ptr, sect_num), sect_num); + + read(f->fildes, ptr, (nsect - 1) * 2048); +8002949c: 8fc20034 lw v0,52(s8) +800294a0: 00000000 nop +800294a4: 8c430000 lw v1,0(v0) +800294a8: 8fc20014 lw v0,20(s8) +800294ac: 00000000 nop +800294b0: 2442ffff addiu v0,v0,-1 +800294b4: 000212c0 sll v0,v0,0xb +800294b8: 00403021 move a2,v0 +800294bc: 8fc50028 lw a1,40(s8) +800294c0: 00602021 move a0,v1 +800294c4: 0c00ede4 jal 8003b790 <read> +800294c8: 00000000 nop + + ptr += (nsect - 1) * 2048; +800294cc: 8fc20014 lw v0,20(s8) +800294d0: 00000000 nop +800294d4: 2442ffff addiu v0,v0,-1 +800294d8: 000212c0 sll v0,v0,0xb +800294dc: 00401821 move v1,v0 +800294e0: 8fc20028 lw v0,40(s8) +800294e4: 00000000 nop +800294e8: 00431021 addu v0,v0,v1 +800294ec: afc20028 sw v0,40(s8) + csize -= (nsect - 1) * 2048; +800294f0: 24030001 li v1,1 +800294f4: 8fc20014 lw v0,20(s8) +800294f8: 00000000 nop +800294fc: 00621023 subu v0,v1,v0 +80029500: 000212c0 sll v0,v0,0xb +80029504: 8fc30010 lw v1,16(s8) +80029508: 00000000 nop +8002950c: 00621021 addu v0,v1,v0 +80029510: afc20010 sw v0,16(s8) + nsect = 1; +80029514: 24020001 li v0,1 +80029518: afc20014 sw v0,20(s8) + } + + //printf("ptr(LAST) = %d, %x\n", ptr, ptr); + + if(nsect == 1) +8002951c: 8fc30014 lw v1,20(s8) +80029520: 24020001 li v0,1 +80029524: 14620012 bne v1,v0,80029570 <fread+0x298> +80029528: 00000000 nop + { + // Last sector + read(f->fildes, onesec_buf, 2048); +8002952c: 8fc20034 lw v0,52(s8) +80029530: 00000000 nop +80029534: 8c430000 lw v1,0(v0) +80029538: 24060800 li a2,2048 +8002953c: 3c028007 lui v0,0x8007 +80029540: 2445d36c addiu a1,v0,-11412 +80029544: 00602021 move a0,v1 +80029548: 0c00ede4 jal 8003b790 <read> +8002954c: 00000000 nop + + memcpy(ptr, onesec_buf, csize); +80029550: 8fc20010 lw v0,16(s8) +80029554: 00000000 nop +80029558: 00403021 move a2,v0 +8002955c: 3c028007 lui v0,0x8007 +80029560: 2445d36c addiu a1,v0,-11412 +80029564: 8fc40028 lw a0,40(s8) +80029568: 0c00d75e jal 80035d78 <memcpy> +8002956c: 00000000 nop + } + } + + f->pos+= rsize; +80029570: 8fc20034 lw v0,52(s8) +80029574: 00000000 nop +80029578: 8c430004 lw v1,4(v0) +8002957c: 8fc20018 lw v0,24(s8) +80029580: 00000000 nop +80029584: 00621821 addu v1,v1,v0 +80029588: 8fc20034 lw v0,52(s8) +8002958c: 00000000 nop +80029590: ac430004 sw v1,4(v0) + return rsize; +80029594: 8fc20018 lw v0,24(s8) +} +80029598: 03c0e821 move sp,s8 +8002959c: 8fbf0024 lw ra,36(sp) +800295a0: 8fbe0020 lw s8,32(sp) +800295a4: 27bd0028 addiu sp,sp,40 +800295a8: 03e00008 jr ra +800295ac: 00000000 nop + +800295b0 <fgetc>: + +int fgetc(FILE *f) +{ +800295b0: 27bdffe0 addiu sp,sp,-32 +800295b4: afbf001c sw ra,28(sp) +800295b8: afbe0018 sw s8,24(sp) +800295bc: 03a0f021 move s8,sp +800295c0: afc40020 sw a0,32(s8) + unsigned char c; + + if(f->pos >= f->size) +800295c4: 8fc20020 lw v0,32(s8) +800295c8: 00000000 nop +800295cc: 8c430004 lw v1,4(v0) +800295d0: 8fc20020 lw v0,32(s8) +800295d4: 00000000 nop +800295d8: 8c420010 lw v0,16(v0) +800295dc: 00000000 nop +800295e0: 0062102b sltu v0,v1,v0 +800295e4: 14400004 bnez v0,800295f8 <fgetc+0x48> +800295e8: 00000000 nop + return EOF; +800295ec: 2402ffff li v0,-1 +800295f0: 10000009 b 80029618 <fgetc+0x68> +800295f4: 00000000 nop + + fread(&c, sizeof(char), 1, f); +800295f8: 8fc70020 lw a3,32(s8) +800295fc: 24060001 li a2,1 +80029600: 24050001 li a1,1 +80029604: 27c20010 addiu v0,s8,16 +80029608: 00402021 move a0,v0 +8002960c: 0c00a4b6 jal 800292d8 <fread> +80029610: 00000000 nop + + return (int)c; +80029614: 93c20010 lbu v0,16(s8) +} +80029618: 03c0e821 move sp,s8 +8002961c: 8fbf001c lw ra,28(sp) +80029620: 8fbe0018 lw s8,24(sp) +80029624: 27bd0020 addiu sp,sp,32 +80029628: 03e00008 jr ra +8002962c: 00000000 nop + +80029630 <ftell>: + +int ftell(FILE *f) +{ +80029630: 27bdfff8 addiu sp,sp,-8 +80029634: afbe0004 sw s8,4(sp) +80029638: 03a0f021 move s8,sp +8002963c: afc40008 sw a0,8(s8) + return f->pos; +80029640: 8fc20008 lw v0,8(s8) +80029644: 00000000 nop +80029648: 8c420004 lw v0,4(v0) +} +8002964c: 03c0e821 move sp,s8 +80029650: 8fbe0004 lw s8,4(sp) +80029654: 27bd0008 addiu sp,sp,8 +80029658: 03e00008 jr ra +8002965c: 00000000 nop + +80029660 <fseek>: + +int fseek(FILE *f, int offset, int whence) +{ +80029660: 27bdfff8 addiu sp,sp,-8 +80029664: afbe0004 sw s8,4(sp) +80029668: 03a0f021 move s8,sp +8002966c: afc40008 sw a0,8(s8) +80029670: afc5000c sw a1,12(s8) +80029674: afc60010 sw a2,16(s8) + switch(whence) +80029678: 8fc20010 lw v0,16(s8) +8002967c: 24030001 li v1,1 +80029680: 1043000c beq v0,v1,800296b4 <fseek+0x54> +80029684: 00000000 nop +80029688: 24030002 li v1,2 +8002968c: 10430014 beq v0,v1,800296e0 <fseek+0x80> +80029690: 00000000 nop +80029694: 1440001d bnez v0,8002970c <fseek+0xac> +80029698: 00000000 nop + { + case SEEK_SET: + f->pos = offset; +8002969c: 8fc3000c lw v1,12(s8) +800296a0: 8fc20008 lw v0,8(s8) +800296a4: 00000000 nop +800296a8: ac430004 sw v1,4(v0) + break; +800296ac: 10000020 b 80029730 <fseek+0xd0> +800296b0: 00000000 nop + case SEEK_CUR: + f->pos+= offset; +800296b4: 8fc20008 lw v0,8(s8) +800296b8: 00000000 nop +800296bc: 8c430004 lw v1,4(v0) +800296c0: 8fc2000c lw v0,12(s8) +800296c4: 00000000 nop +800296c8: 00621821 addu v1,v1,v0 +800296cc: 8fc20008 lw v0,8(s8) +800296d0: 00000000 nop +800296d4: ac430004 sw v1,4(v0) + break; +800296d8: 10000015 b 80029730 <fseek+0xd0> +800296dc: 00000000 nop + case SEEK_END: + f->pos = f->size + offset; +800296e0: 8fc20008 lw v0,8(s8) +800296e4: 00000000 nop +800296e8: 8c430010 lw v1,16(v0) +800296ec: 8fc2000c lw v0,12(s8) +800296f0: 00000000 nop +800296f4: 00621821 addu v1,v1,v0 +800296f8: 8fc20008 lw v0,8(s8) +800296fc: 00000000 nop +80029700: ac430004 sw v1,4(v0) + break; +80029704: 1000000a b 80029730 <fseek+0xd0> +80029708: 00000000 nop + default: + f->pos = whence + offset; +8002970c: 8fc30010 lw v1,16(s8) +80029710: 8fc2000c lw v0,12(s8) +80029714: 00000000 nop +80029718: 00621021 addu v0,v1,v0 +8002971c: 00401821 move v1,v0 +80029720: 8fc20008 lw v0,8(s8) +80029724: 00000000 nop +80029728: ac430004 sw v1,4(v0) + break; +8002972c: 00000000 nop + } + + return 0; +80029730: 00001021 move v0,zero +} +80029734: 03c0e821 move sp,s8 +80029738: 8fbe0004 lw s8,4(sp) +8002973c: 27bd0008 addiu sp,sp,8 +80029740: 03e00008 jr ra +80029744: 00000000 nop + +80029748 <toupper>: + +int toupper(int c) +{ +80029748: 27bdfff8 addiu sp,sp,-8 +8002974c: afbe0004 sw s8,4(sp) +80029750: 03a0f021 move s8,sp +80029754: afc40008 sw a0,8(s8) + if(c >= 'a' && c <= 'z') +80029758: 8fc20008 lw v0,8(s8) +8002975c: 00000000 nop +80029760: 28420061 slti v0,v0,97 +80029764: 1440000b bnez v0,80029794 <toupper+0x4c> +80029768: 00000000 nop +8002976c: 8fc20008 lw v0,8(s8) +80029770: 00000000 nop +80029774: 2842007b slti v0,v0,123 +80029778: 10400006 beqz v0,80029794 <toupper+0x4c> +8002977c: 00000000 nop + return (c-'a')+'A'; +80029780: 8fc20008 lw v0,8(s8) +80029784: 00000000 nop +80029788: 2442ffe0 addiu v0,v0,-32 +8002978c: 10000002 b 80029798 <toupper+0x50> +80029790: 00000000 nop + + return c; +80029794: 8fc20008 lw v0,8(s8) +} +80029798: 03c0e821 move sp,s8 +8002979c: 8fbe0004 lw s8,4(sp) +800297a0: 27bd0008 addiu sp,sp,8 +800297a4: 03e00008 jr ra +800297a8: 00000000 nop + +800297ac <tolower>: + +int tolower(int c) +{ +800297ac: 27bdfff8 addiu sp,sp,-8 +800297b0: afbe0004 sw s8,4(sp) +800297b4: 03a0f021 move s8,sp +800297b8: afc40008 sw a0,8(s8) + if(c >= 'A' && c <= 'Z') +800297bc: 8fc20008 lw v0,8(s8) +800297c0: 00000000 nop +800297c4: 28420041 slti v0,v0,65 +800297c8: 1440000b bnez v0,800297f8 <tolower+0x4c> +800297cc: 00000000 nop +800297d0: 8fc20008 lw v0,8(s8) +800297d4: 00000000 nop +800297d8: 2842005b slti v0,v0,91 +800297dc: 10400006 beqz v0,800297f8 <tolower+0x4c> +800297e0: 00000000 nop + return (c-'A')+'a'; +800297e4: 8fc20008 lw v0,8(s8) +800297e8: 00000000 nop +800297ec: 24420020 addiu v0,v0,32 +800297f0: 10000002 b 800297fc <tolower+0x50> +800297f4: 00000000 nop + + return c; +800297f8: 8fc20008 lw v0,8(s8) +} +800297fc: 03c0e821 move sp,s8 +80029800: 8fbe0004 lw s8,4(sp) +80029804: 27bd0008 addiu sp,sp,8 +80029808: 03e00008 jr ra +8002980c: 00000000 nop + +80029810 <libc_get_transtbl_fname>: + +int libc_get_transtbl_fname(char *tofind, char *outstr, int outl) +{ +80029810: 27bdbdb0 addiu sp,sp,-16976 +80029814: afbf424c sw ra,16972(sp) +80029818: afbe4248 sw s8,16968(sp) +8002981c: 03a0f021 move s8,sp +80029820: afc44250 sw a0,16976(s8) +80029824: afc54254 sw a1,16980(s8) +80029828: afc64258 sw a2,16984(s8) + FILE *f; + int s; + int x; + int type; + int y; + int l = strlen(tofind); +8002982c: 8fc44250 lw a0,16976(s8) +80029830: 0c00d8af jal 800362bc <strlen> +80029834: 00000000 nop +80029838: afc20030 sw v0,48(s8) + int filename_found = 0; +8002983c: afc00020 sw zero,32(s8) + int exit_loop = 0; +80029840: afc00024 sw zero,36(s8) + int otfp = 0; +80029844: afc00028 sw zero,40(s8) + int tfp = 0; +80029848: afc0002c sw zero,44(s8) + char transtbl[0x4000]; + char orgname[16]; + char newname[256]; + char rootpath[256]; + + bzero(transtbl, 0x4000); +8002984c: 27c20038 addiu v0,s8,56 +80029850: 24064000 li a2,16384 +80029854: 00002821 move a1,zero +80029858: 00402021 move a0,v0 +8002985c: 0c00d7ab jal 80035eac <memset> +80029860: 00000000 nop + strcpy(rootpath, "cdrom:\\"); +80029864: 27c34148 addiu v1,s8,16712 +80029868: 3c028004 lui v0,0x8004 +8002986c: 2445f94c addiu a1,v0,-1716 +80029870: 00602021 move a0,v1 +80029874: 0c00d891 jal 80036244 <strcpy> +80029878: 00000000 nop + + f = fopen("cdrom:\\TRANS.TBL;1", "rb"); +8002987c: 3c028004 lui v0,0x8004 +80029880: 2445f954 addiu a1,v0,-1708 +80029884: 3c028004 lui v0,0x8004 +80029888: 2444f958 addiu a0,v0,-1704 +8002988c: 0c00a40c jal 80029030 <fopen> +80029890: 00000000 nop +80029894: afc20034 sw v0,52(s8) + + if(f == NULL) +80029898: 8fc20034 lw v0,52(s8) +8002989c: 00000000 nop +800298a0: 14400004 bnez v0,800298b4 <libc_get_transtbl_fname+0xa4> +800298a4: 00000000 nop + return 0; +800298a8: 00001021 move v0,zero +800298ac: 10000246 b 8002a1c8 <libc_get_transtbl_fname+0x9b8> +800298b0: 00000000 nop + + fseek(f, 0, SEEK_END); +800298b4: 24060002 li a2,2 +800298b8: 00002821 move a1,zero +800298bc: 8fc40034 lw a0,52(s8) +800298c0: 0c00a598 jal 80029660 <fseek> +800298c4: 00000000 nop + s = ftell(f); +800298c8: 8fc40034 lw a0,52(s8) +800298cc: 0c00a58c jal 80029630 <ftell> +800298d0: 00000000 nop +800298d4: afc20010 sw v0,16(s8) + fseek(f, 0, SEEK_SET); +800298d8: 00003021 move a2,zero +800298dc: 00002821 move a1,zero +800298e0: 8fc40034 lw a0,52(s8) +800298e4: 0c00a598 jal 80029660 <fseek> +800298e8: 00000000 nop + fread(transtbl, 1, s, f); +800298ec: 27c20038 addiu v0,s8,56 +800298f0: 8fc70034 lw a3,52(s8) +800298f4: 8fc60010 lw a2,16(s8) +800298f8: 24050001 li a1,1 +800298fc: 00402021 move a0,v0 +80029900: 0c00a4b6 jal 800292d8 <fread> +80029904: 00000000 nop + fclose(f); +80029908: 8fc40034 lw a0,52(s8) +8002990c: 0c00a4a0 jal 80029280 <fclose> +80029910: 00000000 nop + + outstr[0] = 0; +80029914: 8fc24254 lw v0,16980(s8) +80029918: 00000000 nop +8002991c: a0400000 sb zero,0(v0) + + x = 0; +80029920: afc00014 sw zero,20(s8) + + exit_loop = 0; +80029924: afc00024 sw zero,36(s8) + filename_found = 0; +80029928: afc00020 sw zero,32(s8) + + for(tfp = 0; tofind[tfp] == '\\' || tofind[tfp] == '/'; tfp++); +8002992c: afc0002c sw zero,44(s8) +80029930: 10000005 b 80029948 <libc_get_transtbl_fname+0x138> +80029934: 00000000 nop +80029938: 8fc2002c lw v0,44(s8) +8002993c: 00000000 nop +80029940: 24420001 addiu v0,v0,1 +80029944: afc2002c sw v0,44(s8) +80029948: 8fc2002c lw v0,44(s8) +8002994c: 8fc34250 lw v1,16976(s8) +80029950: 00000000 nop +80029954: 00621021 addu v0,v1,v0 +80029958: 80430000 lb v1,0(v0) +8002995c: 2402005c li v0,92 +80029960: 1062fff5 beq v1,v0,80029938 <libc_get_transtbl_fname+0x128> +80029964: 00000000 nop +80029968: 8fc2002c lw v0,44(s8) +8002996c: 8fc34250 lw v1,16976(s8) +80029970: 00000000 nop +80029974: 00621021 addu v0,v1,v0 +80029978: 80430000 lb v1,0(v0) +8002997c: 2402002f li v0,47 +80029980: 1062ffed beq v1,v0,80029938 <libc_get_transtbl_fname+0x128> +80029984: 00000000 nop + + otfp = tfp; +80029988: 8fc2002c lw v0,44(s8) +8002998c: 00000000 nop +80029990: afc20028 sw v0,40(s8) + + for(y = otfp; y < l; y++) +80029994: 8fc20028 lw v0,40(s8) +80029998: 00000000 nop +8002999c: afc2001c sw v0,28(s8) +800299a0: 1000001d b 80029a18 <libc_get_transtbl_fname+0x208> +800299a4: 00000000 nop + { + if(tofind[y] == '\0' || tofind[y] == '\\' || tofind[y] == '/') +800299a8: 8fc2001c lw v0,28(s8) +800299ac: 8fc34250 lw v1,16976(s8) +800299b0: 00000000 nop +800299b4: 00621021 addu v0,v1,v0 +800299b8: 80420000 lb v0,0(v0) +800299bc: 00000000 nop +800299c0: 1040001b beqz v0,80029a30 <libc_get_transtbl_fname+0x220> +800299c4: 00000000 nop +800299c8: 8fc2001c lw v0,28(s8) +800299cc: 8fc34250 lw v1,16976(s8) +800299d0: 00000000 nop +800299d4: 00621021 addu v0,v1,v0 +800299d8: 80430000 lb v1,0(v0) +800299dc: 2402005c li v0,92 +800299e0: 10620013 beq v1,v0,80029a30 <libc_get_transtbl_fname+0x220> +800299e4: 00000000 nop +800299e8: 8fc2001c lw v0,28(s8) +800299ec: 8fc34250 lw v1,16976(s8) +800299f0: 00000000 nop +800299f4: 00621021 addu v0,v1,v0 +800299f8: 80430000 lb v1,0(v0) +800299fc: 2402002f li v0,47 +80029a00: 1062000b beq v1,v0,80029a30 <libc_get_transtbl_fname+0x220> +80029a04: 00000000 nop + + for(tfp = 0; tofind[tfp] == '\\' || tofind[tfp] == '/'; tfp++); + + otfp = tfp; + + for(y = otfp; y < l; y++) +80029a08: 8fc2001c lw v0,28(s8) +80029a0c: 00000000 nop +80029a10: 24420001 addiu v0,v0,1 +80029a14: afc2001c sw v0,28(s8) +80029a18: 8fc3001c lw v1,28(s8) +80029a1c: 8fc20030 lw v0,48(s8) +80029a20: 00000000 nop +80029a24: 0062102a slt v0,v1,v0 +80029a28: 1440ffdf bnez v0,800299a8 <libc_get_transtbl_fname+0x198> +80029a2c: 00000000 nop + { + if(tofind[y] == '\0' || tofind[y] == '\\' || tofind[y] == '/') + break; + } + + tfp = y; +80029a30: 8fc2001c lw v0,28(s8) +80029a34: 00000000 nop +80029a38: afc2002c sw v0,44(s8) + + while((x < s) && !exit_loop) +80029a3c: 100001d7 b 8002a19c <libc_get_transtbl_fname+0x98c> +80029a40: 00000000 nop + { + while(transtbl[x] == ' ' || transtbl[x] == '\t' || transtbl[x] == '\n' || transtbl[x] == '\r') + x++; +80029a44: 8fc20014 lw v0,20(s8) +80029a48: 00000000 nop +80029a4c: 24420001 addiu v0,v0,1 +80029a50: afc20014 sw v0,20(s8) + + tfp = y; + + while((x < s) && !exit_loop) + { + while(transtbl[x] == ' ' || transtbl[x] == '\t' || transtbl[x] == '\n' || transtbl[x] == '\r') +80029a54: 8fc20014 lw v0,20(s8) +80029a58: 27c30010 addiu v1,s8,16 +80029a5c: 00621021 addu v0,v1,v0 +80029a60: 80430028 lb v1,40(v0) +80029a64: 24020020 li v0,32 +80029a68: 1062fff6 beq v1,v0,80029a44 <libc_get_transtbl_fname+0x234> +80029a6c: 00000000 nop +80029a70: 8fc20014 lw v0,20(s8) +80029a74: 27c30010 addiu v1,s8,16 +80029a78: 00621021 addu v0,v1,v0 +80029a7c: 80430028 lb v1,40(v0) +80029a80: 24020009 li v0,9 +80029a84: 1062ffef beq v1,v0,80029a44 <libc_get_transtbl_fname+0x234> +80029a88: 00000000 nop +80029a8c: 8fc20014 lw v0,20(s8) +80029a90: 27c30010 addiu v1,s8,16 +80029a94: 00621021 addu v0,v1,v0 +80029a98: 80430028 lb v1,40(v0) +80029a9c: 2402000a li v0,10 +80029aa0: 1062ffe8 beq v1,v0,80029a44 <libc_get_transtbl_fname+0x234> +80029aa4: 00000000 nop +80029aa8: 8fc20014 lw v0,20(s8) +80029aac: 27c30010 addiu v1,s8,16 +80029ab0: 00621021 addu v0,v1,v0 +80029ab4: 80430028 lb v1,40(v0) +80029ab8: 2402000d li v0,13 +80029abc: 1062ffe1 beq v1,v0,80029a44 <libc_get_transtbl_fname+0x234> +80029ac0: 00000000 nop + x++; + + if(transtbl[x] == 'F') +80029ac4: 8fc20014 lw v0,20(s8) +80029ac8: 27c30010 addiu v1,s8,16 +80029acc: 00621021 addu v0,v1,v0 +80029ad0: 80430028 lb v1,40(v0) +80029ad4: 24020046 li v0,70 +80029ad8: 14620004 bne v1,v0,80029aec <libc_get_transtbl_fname+0x2dc> +80029adc: 00000000 nop + type = 0; +80029ae0: afc00018 sw zero,24(s8) +80029ae4: 1000000a b 80029b10 <libc_get_transtbl_fname+0x300> +80029ae8: 00000000 nop + else if(transtbl[x] == 'D') +80029aec: 8fc20014 lw v0,20(s8) +80029af0: 27c30010 addiu v1,s8,16 +80029af4: 00621021 addu v0,v1,v0 +80029af8: 80430028 lb v1,40(v0) +80029afc: 24020044 li v0,68 +80029b00: 14620003 bne v1,v0,80029b10 <libc_get_transtbl_fname+0x300> +80029b04: 00000000 nop + type = 1; +80029b08: 24020001 li v0,1 +80029b0c: afc20018 sw v0,24(s8) + + x++; +80029b10: 8fc20014 lw v0,20(s8) +80029b14: 00000000 nop +80029b18: 24420001 addiu v0,v0,1 +80029b1c: afc20014 sw v0,20(s8) + + while(transtbl[x] == ' ' || transtbl[x] == '\t' || transtbl[x] == '\n' || transtbl[x] == '\r') +80029b20: 10000005 b 80029b38 <libc_get_transtbl_fname+0x328> +80029b24: 00000000 nop + x++; +80029b28: 8fc20014 lw v0,20(s8) +80029b2c: 00000000 nop +80029b30: 24420001 addiu v0,v0,1 +80029b34: afc20014 sw v0,20(s8) + else if(transtbl[x] == 'D') + type = 1; + + x++; + + while(transtbl[x] == ' ' || transtbl[x] == '\t' || transtbl[x] == '\n' || transtbl[x] == '\r') +80029b38: 8fc20014 lw v0,20(s8) +80029b3c: 27c30010 addiu v1,s8,16 +80029b40: 00621021 addu v0,v1,v0 +80029b44: 80430028 lb v1,40(v0) +80029b48: 24020020 li v0,32 +80029b4c: 1062fff6 beq v1,v0,80029b28 <libc_get_transtbl_fname+0x318> +80029b50: 00000000 nop +80029b54: 8fc20014 lw v0,20(s8) +80029b58: 27c30010 addiu v1,s8,16 +80029b5c: 00621021 addu v0,v1,v0 +80029b60: 80430028 lb v1,40(v0) +80029b64: 24020009 li v0,9 +80029b68: 1062ffef beq v1,v0,80029b28 <libc_get_transtbl_fname+0x318> +80029b6c: 00000000 nop +80029b70: 8fc20014 lw v0,20(s8) +80029b74: 27c30010 addiu v1,s8,16 +80029b78: 00621021 addu v0,v1,v0 +80029b7c: 80430028 lb v1,40(v0) +80029b80: 2402000a li v0,10 +80029b84: 1062ffe8 beq v1,v0,80029b28 <libc_get_transtbl_fname+0x318> +80029b88: 00000000 nop +80029b8c: 8fc20014 lw v0,20(s8) +80029b90: 27c30010 addiu v1,s8,16 +80029b94: 00621021 addu v0,v1,v0 +80029b98: 80430028 lb v1,40(v0) +80029b9c: 2402000d li v0,13 +80029ba0: 1062ffe1 beq v1,v0,80029b28 <libc_get_transtbl_fname+0x318> +80029ba4: 00000000 nop + x++; + + y = 0; +80029ba8: afc0001c sw zero,28(s8) + + while(!(transtbl[x] == ' ' || transtbl[x] == '\t' || transtbl[x] == '\n' || transtbl[x] == '\r' +80029bac: 1000000f b 80029bec <libc_get_transtbl_fname+0x3dc> +80029bb0: 00000000 nop + || transtbl[x] == 0)) + orgname[y++] = transtbl[x++]; +80029bb4: 8fc2001c lw v0,28(s8) +80029bb8: 00000000 nop +80029bbc: 24430001 addiu v1,v0,1 +80029bc0: afc3001c sw v1,28(s8) +80029bc4: 8fc30014 lw v1,20(s8) +80029bc8: 00000000 nop +80029bcc: 24640001 addiu a0,v1,1 +80029bd0: afc40014 sw a0,20(s8) +80029bd4: 27c40010 addiu a0,s8,16 +80029bd8: 00831821 addu v1,a0,v1 +80029bdc: 80630028 lb v1,40(v1) +80029be0: 27c40010 addiu a0,s8,16 +80029be4: 00821021 addu v0,a0,v0 +80029be8: a0434028 sb v1,16424(v0) + while(transtbl[x] == ' ' || transtbl[x] == '\t' || transtbl[x] == '\n' || transtbl[x] == '\r') + x++; + + y = 0; + + while(!(transtbl[x] == ' ' || transtbl[x] == '\t' || transtbl[x] == '\n' || transtbl[x] == '\r' +80029bec: 8fc20014 lw v0,20(s8) +80029bf0: 27c30010 addiu v1,s8,16 +80029bf4: 00621021 addu v0,v1,v0 +80029bf8: 80430028 lb v1,40(v0) +80029bfc: 24020020 li v0,32 +80029c00: 1062001d beq v1,v0,80029c78 <libc_get_transtbl_fname+0x468> +80029c04: 00000000 nop +80029c08: 8fc20014 lw v0,20(s8) +80029c0c: 27c30010 addiu v1,s8,16 +80029c10: 00621021 addu v0,v1,v0 +80029c14: 80430028 lb v1,40(v0) +80029c18: 24020009 li v0,9 +80029c1c: 10620016 beq v1,v0,80029c78 <libc_get_transtbl_fname+0x468> +80029c20: 00000000 nop +80029c24: 8fc20014 lw v0,20(s8) +80029c28: 27c30010 addiu v1,s8,16 +80029c2c: 00621021 addu v0,v1,v0 +80029c30: 80430028 lb v1,40(v0) +80029c34: 2402000a li v0,10 +80029c38: 1062000f beq v1,v0,80029c78 <libc_get_transtbl_fname+0x468> +80029c3c: 00000000 nop +80029c40: 8fc20014 lw v0,20(s8) +80029c44: 27c30010 addiu v1,s8,16 +80029c48: 00621021 addu v0,v1,v0 +80029c4c: 80430028 lb v1,40(v0) +80029c50: 2402000d li v0,13 +80029c54: 10620008 beq v1,v0,80029c78 <libc_get_transtbl_fname+0x468> +80029c58: 00000000 nop + || transtbl[x] == 0)) +80029c5c: 8fc20014 lw v0,20(s8) +80029c60: 27c30010 addiu v1,s8,16 +80029c64: 00621021 addu v0,v1,v0 +80029c68: 80420028 lb v0,40(v0) +80029c6c: 00000000 nop + while(transtbl[x] == ' ' || transtbl[x] == '\t' || transtbl[x] == '\n' || transtbl[x] == '\r') + x++; + + y = 0; + + while(!(transtbl[x] == ' ' || transtbl[x] == '\t' || transtbl[x] == '\n' || transtbl[x] == '\r' +80029c70: 1440ffd0 bnez v0,80029bb4 <libc_get_transtbl_fname+0x3a4> +80029c74: 00000000 nop + || transtbl[x] == 0)) + orgname[y++] = transtbl[x++]; + + orgname[y] = 0; +80029c78: 8fc2001c lw v0,28(s8) +80029c7c: 27c30010 addiu v1,s8,16 +80029c80: 00621021 addu v0,v1,v0 +80029c84: a0404028 sb zero,16424(v0) + //printf("orgname = %s\n", orgname); + + while(transtbl[x] == ' ' || transtbl[x] == '\t' || transtbl[x] == '\n' || transtbl[x] == '\r') +80029c88: 10000005 b 80029ca0 <libc_get_transtbl_fname+0x490> +80029c8c: 00000000 nop + x++; +80029c90: 8fc20014 lw v0,20(s8) +80029c94: 00000000 nop +80029c98: 24420001 addiu v0,v0,1 +80029c9c: afc20014 sw v0,20(s8) + orgname[y++] = transtbl[x++]; + + orgname[y] = 0; + //printf("orgname = %s\n", orgname); + + while(transtbl[x] == ' ' || transtbl[x] == '\t' || transtbl[x] == '\n' || transtbl[x] == '\r') +80029ca0: 8fc20014 lw v0,20(s8) +80029ca4: 27c30010 addiu v1,s8,16 +80029ca8: 00621021 addu v0,v1,v0 +80029cac: 80430028 lb v1,40(v0) +80029cb0: 24020020 li v0,32 +80029cb4: 1062fff6 beq v1,v0,80029c90 <libc_get_transtbl_fname+0x480> +80029cb8: 00000000 nop +80029cbc: 8fc20014 lw v0,20(s8) +80029cc0: 27c30010 addiu v1,s8,16 +80029cc4: 00621021 addu v0,v1,v0 +80029cc8: 80430028 lb v1,40(v0) +80029ccc: 24020009 li v0,9 +80029cd0: 1062ffef beq v1,v0,80029c90 <libc_get_transtbl_fname+0x480> +80029cd4: 00000000 nop +80029cd8: 8fc20014 lw v0,20(s8) +80029cdc: 27c30010 addiu v1,s8,16 +80029ce0: 00621021 addu v0,v1,v0 +80029ce4: 80430028 lb v1,40(v0) +80029ce8: 2402000a li v0,10 +80029cec: 1062ffe8 beq v1,v0,80029c90 <libc_get_transtbl_fname+0x480> +80029cf0: 00000000 nop +80029cf4: 8fc20014 lw v0,20(s8) +80029cf8: 27c30010 addiu v1,s8,16 +80029cfc: 00621021 addu v0,v1,v0 +80029d00: 80430028 lb v1,40(v0) +80029d04: 2402000d li v0,13 +80029d08: 1062ffe1 beq v1,v0,80029c90 <libc_get_transtbl_fname+0x480> +80029d0c: 00000000 nop + x++; + + y = 0; +80029d10: afc0001c sw zero,28(s8) + + while(!(transtbl[x] == '\n' || transtbl[x] == '\r' || transtbl[x] == 0)) +80029d14: 1000000f b 80029d54 <libc_get_transtbl_fname+0x544> +80029d18: 00000000 nop + newname[y++] = transtbl[x++]; +80029d1c: 8fc2001c lw v0,28(s8) +80029d20: 00000000 nop +80029d24: 24430001 addiu v1,v0,1 +80029d28: afc3001c sw v1,28(s8) +80029d2c: 8fc30014 lw v1,20(s8) +80029d30: 00000000 nop +80029d34: 24640001 addiu a0,v1,1 +80029d38: afc40014 sw a0,20(s8) +80029d3c: 27c40010 addiu a0,s8,16 +80029d40: 00831821 addu v1,a0,v1 +80029d44: 80630028 lb v1,40(v1) +80029d48: 27c40010 addiu a0,s8,16 +80029d4c: 00821021 addu v0,a0,v0 +80029d50: a0434038 sb v1,16440(v0) + while(transtbl[x] == ' ' || transtbl[x] == '\t' || transtbl[x] == '\n' || transtbl[x] == '\r') + x++; + + y = 0; + + while(!(transtbl[x] == '\n' || transtbl[x] == '\r' || transtbl[x] == 0)) +80029d54: 8fc20014 lw v0,20(s8) +80029d58: 27c30010 addiu v1,s8,16 +80029d5c: 00621021 addu v0,v1,v0 +80029d60: 80430028 lb v1,40(v0) +80029d64: 2402000a li v0,10 +80029d68: 1062000f beq v1,v0,80029da8 <libc_get_transtbl_fname+0x598> +80029d6c: 00000000 nop +80029d70: 8fc20014 lw v0,20(s8) +80029d74: 27c30010 addiu v1,s8,16 +80029d78: 00621021 addu v0,v1,v0 +80029d7c: 80430028 lb v1,40(v0) +80029d80: 2402000d li v0,13 +80029d84: 10620008 beq v1,v0,80029da8 <libc_get_transtbl_fname+0x598> +80029d88: 00000000 nop +80029d8c: 8fc20014 lw v0,20(s8) +80029d90: 27c30010 addiu v1,s8,16 +80029d94: 00621021 addu v0,v1,v0 +80029d98: 80420028 lb v0,40(v0) +80029d9c: 00000000 nop +80029da0: 1440ffde bnez v0,80029d1c <libc_get_transtbl_fname+0x50c> +80029da4: 00000000 nop + newname[y++] = transtbl[x++]; + + newname[y] = 0; +80029da8: 8fc2001c lw v0,28(s8) +80029dac: 27c30010 addiu v1,s8,16 +80029db0: 00621021 addu v0,v1,v0 +80029db4: a0404038 sb zero,16440(v0) + + while(transtbl[x] == ' ' || transtbl[x] == '\t' || transtbl[x] == '\n' || transtbl[x] == '\r') +80029db8: 10000005 b 80029dd0 <libc_get_transtbl_fname+0x5c0> +80029dbc: 00000000 nop + x++; +80029dc0: 8fc20014 lw v0,20(s8) +80029dc4: 00000000 nop +80029dc8: 24420001 addiu v0,v0,1 +80029dcc: afc20014 sw v0,20(s8) + while(!(transtbl[x] == '\n' || transtbl[x] == '\r' || transtbl[x] == 0)) + newname[y++] = transtbl[x++]; + + newname[y] = 0; + + while(transtbl[x] == ' ' || transtbl[x] == '\t' || transtbl[x] == '\n' || transtbl[x] == '\r') +80029dd0: 8fc20014 lw v0,20(s8) +80029dd4: 27c30010 addiu v1,s8,16 +80029dd8: 00621021 addu v0,v1,v0 +80029ddc: 80430028 lb v1,40(v0) +80029de0: 24020020 li v0,32 +80029de4: 1062fff6 beq v1,v0,80029dc0 <libc_get_transtbl_fname+0x5b0> +80029de8: 00000000 nop +80029dec: 8fc20014 lw v0,20(s8) +80029df0: 27c30010 addiu v1,s8,16 +80029df4: 00621021 addu v0,v1,v0 +80029df8: 80430028 lb v1,40(v0) +80029dfc: 24020009 li v0,9 +80029e00: 1062ffef beq v1,v0,80029dc0 <libc_get_transtbl_fname+0x5b0> +80029e04: 00000000 nop +80029e08: 8fc20014 lw v0,20(s8) +80029e0c: 27c30010 addiu v1,s8,16 +80029e10: 00621021 addu v0,v1,v0 +80029e14: 80430028 lb v1,40(v0) +80029e18: 2402000a li v0,10 +80029e1c: 1062ffe8 beq v1,v0,80029dc0 <libc_get_transtbl_fname+0x5b0> +80029e20: 00000000 nop +80029e24: 8fc20014 lw v0,20(s8) +80029e28: 27c30010 addiu v1,s8,16 +80029e2c: 00621021 addu v0,v1,v0 +80029e30: 80430028 lb v1,40(v0) +80029e34: 2402000d li v0,13 +80029e38: 1062ffe1 beq v1,v0,80029dc0 <libc_get_transtbl_fname+0x5b0> +80029e3c: 00000000 nop + x++; + + //printf("newname = %s\n", newname); + + if(strncasecmp(&tofind[otfp], newname, tfp-otfp) == 0) +80029e40: 8fc20028 lw v0,40(s8) +80029e44: 8fc34250 lw v1,16976(s8) +80029e48: 00000000 nop +80029e4c: 00622021 addu a0,v1,v0 +80029e50: 8fc3002c lw v1,44(s8) +80029e54: 8fc20028 lw v0,40(s8) +80029e58: 00000000 nop +80029e5c: 00621023 subu v0,v1,v0 +80029e60: 00401821 move v1,v0 +80029e64: 27c24048 addiu v0,s8,16456 +80029e68: 00603021 move a2,v1 +80029e6c: 00402821 move a1,v0 +80029e70: 0c00dcd3 jal 8003734c <strncasecmp> +80029e74: 00000000 nop +80029e78: 144000c8 bnez v0,8002a19c <libc_get_transtbl_fname+0x98c> +80029e7c: 00000000 nop + { + if(type == 0) +80029e80: 8fc20018 lw v0,24(s8) +80029e84: 00000000 nop +80029e88: 1440001d bnez v0,80029f00 <libc_get_transtbl_fname+0x6f0> +80029e8c: 00000000 nop + { + dprintf("Filename found: %s -> %s%s\n", tofind, rootpath, orgname); + filename_found = 1; +80029e90: 24020001 li v0,1 +80029e94: afc20020 sw v0,32(s8) + exit_loop = 1; +80029e98: 24020001 li v0,1 +80029e9c: afc20024 sw v0,36(s8) + + strncpy(outstr, rootpath, outl); +80029ea0: 8fc34258 lw v1,16984(s8) +80029ea4: 27c24148 addiu v0,s8,16712 +80029ea8: 00603021 move a2,v1 +80029eac: 00402821 move a1,v0 +80029eb0: 8fc44254 lw a0,16980(s8) +80029eb4: 0c00d860 jal 80036180 <strncpy> +80029eb8: 00000000 nop + strncat(outstr, orgname, outl-strlen(rootpath)); +80029ebc: 27c24148 addiu v0,s8,16712 +80029ec0: 00402021 move a0,v0 +80029ec4: 0c00d8af jal 800362bc <strlen> +80029ec8: 00000000 nop +80029ecc: 00401821 move v1,v0 +80029ed0: 8fc24258 lw v0,16984(s8) +80029ed4: 00000000 nop +80029ed8: 00431023 subu v0,v0,v1 +80029edc: 00401821 move v1,v0 +80029ee0: 27c24038 addiu v0,s8,16440 +80029ee4: 00603021 move a2,v1 +80029ee8: 00402821 move a1,v0 +80029eec: 8fc44254 lw a0,16980(s8) +80029ef0: 0c00dc6e jal 800371b8 <strncat> +80029ef4: 00000000 nop +80029ef8: 100000a8 b 8002a19c <libc_get_transtbl_fname+0x98c> +80029efc: 00000000 nop + { + //printf("Found directory! %s\n", newname); + + //printf("tfp = %d\n", tfp); + + if(tfp == l || tofind[l-1] == '/' +80029f00: 8fc3002c lw v1,44(s8) +80029f04: 8fc20030 lw v0,48(s8) +80029f08: 00000000 nop +80029f0c: 10620015 beq v1,v0,80029f64 <libc_get_transtbl_fname+0x754> +80029f10: 00000000 nop +80029f14: 8fc20030 lw v0,48(s8) +80029f18: 00000000 nop +80029f1c: 2442ffff addiu v0,v0,-1 +80029f20: 8fc34250 lw v1,16976(s8) +80029f24: 00000000 nop +80029f28: 00621021 addu v0,v1,v0 +80029f2c: 80430000 lb v1,0(v0) +80029f30: 2402002f li v0,47 +80029f34: 1062000b beq v1,v0,80029f64 <libc_get_transtbl_fname+0x754> +80029f38: 00000000 nop + || tofind[l-1] == '\\') +80029f3c: 8fc20030 lw v0,48(s8) +80029f40: 00000000 nop +80029f44: 2442ffff addiu v0,v0,-1 +80029f48: 8fc34250 lw v1,16976(s8) +80029f4c: 00000000 nop +80029f50: 00621021 addu v0,v1,v0 +80029f54: 80430000 lb v1,0(v0) +80029f58: 2402005c li v0,92 +80029f5c: 14620009 bne v1,v0,80029f84 <libc_get_transtbl_fname+0x774> +80029f60: 00000000 nop + { + dprintf("File not found. A directory was specified.\n"); + exit_loop = 1; +80029f64: 24020001 li v0,1 +80029f68: afc20024 sw v0,36(s8) + continue; +80029f6c: 1000008b b 8002a19c <libc_get_transtbl_fname+0x98c> +80029f70: 00000000 nop + } + + //tfp++; + for(; tofind[tfp] == '\\' || tofind[tfp] == '/'; tfp++); +80029f74: 8fc2002c lw v0,44(s8) +80029f78: 00000000 nop +80029f7c: 24420001 addiu v0,v0,1 +80029f80: afc2002c sw v0,44(s8) +80029f84: 8fc2002c lw v0,44(s8) +80029f88: 8fc34250 lw v1,16976(s8) +80029f8c: 00000000 nop +80029f90: 00621021 addu v0,v1,v0 +80029f94: 80430000 lb v1,0(v0) +80029f98: 2402005c li v0,92 +80029f9c: 1062fff5 beq v1,v0,80029f74 <libc_get_transtbl_fname+0x764> +80029fa0: 00000000 nop +80029fa4: 8fc2002c lw v0,44(s8) +80029fa8: 8fc34250 lw v1,16976(s8) +80029fac: 00000000 nop +80029fb0: 00621021 addu v0,v1,v0 +80029fb4: 80430000 lb v1,0(v0) +80029fb8: 2402002f li v0,47 +80029fbc: 1062ffed beq v1,v0,80029f74 <libc_get_transtbl_fname+0x764> +80029fc0: 00000000 nop + + otfp = tfp; +80029fc4: 8fc2002c lw v0,44(s8) +80029fc8: 00000000 nop +80029fcc: afc20028 sw v0,40(s8) + + for(y = otfp; y < l; y++) +80029fd0: 8fc20028 lw v0,40(s8) +80029fd4: 00000000 nop +80029fd8: afc2001c sw v0,28(s8) +80029fdc: 1000001d b 8002a054 <libc_get_transtbl_fname+0x844> +80029fe0: 00000000 nop + { + if(tofind[y] == '\0' || tofind[y] == '\\' || tofind[y] == '/') +80029fe4: 8fc2001c lw v0,28(s8) +80029fe8: 8fc34250 lw v1,16976(s8) +80029fec: 00000000 nop +80029ff0: 00621021 addu v0,v1,v0 +80029ff4: 80420000 lb v0,0(v0) +80029ff8: 00000000 nop +80029ffc: 1040001b beqz v0,8002a06c <libc_get_transtbl_fname+0x85c> +8002a000: 00000000 nop +8002a004: 8fc2001c lw v0,28(s8) +8002a008: 8fc34250 lw v1,16976(s8) +8002a00c: 00000000 nop +8002a010: 00621021 addu v0,v1,v0 +8002a014: 80430000 lb v1,0(v0) +8002a018: 2402005c li v0,92 +8002a01c: 10620013 beq v1,v0,8002a06c <libc_get_transtbl_fname+0x85c> +8002a020: 00000000 nop +8002a024: 8fc2001c lw v0,28(s8) +8002a028: 8fc34250 lw v1,16976(s8) +8002a02c: 00000000 nop +8002a030: 00621021 addu v0,v1,v0 +8002a034: 80430000 lb v1,0(v0) +8002a038: 2402002f li v0,47 +8002a03c: 1062000b beq v1,v0,8002a06c <libc_get_transtbl_fname+0x85c> +8002a040: 00000000 nop + //tfp++; + for(; tofind[tfp] == '\\' || tofind[tfp] == '/'; tfp++); + + otfp = tfp; + + for(y = otfp; y < l; y++) +8002a044: 8fc2001c lw v0,28(s8) +8002a048: 00000000 nop +8002a04c: 24420001 addiu v0,v0,1 +8002a050: afc2001c sw v0,28(s8) +8002a054: 8fc3001c lw v1,28(s8) +8002a058: 8fc20030 lw v0,48(s8) +8002a05c: 00000000 nop +8002a060: 0062102a slt v0,v1,v0 +8002a064: 1440ffdf bnez v0,80029fe4 <libc_get_transtbl_fname+0x7d4> +8002a068: 00000000 nop + { + if(tofind[y] == '\0' || tofind[y] == '\\' || tofind[y] == '/') + break; + } + + tfp = y; +8002a06c: 8fc2001c lw v0,28(s8) +8002a070: 00000000 nop +8002a074: afc2002c sw v0,44(s8) + + strcat(rootpath, orgname); +8002a078: 27c34038 addiu v1,s8,16440 +8002a07c: 27c24148 addiu v0,s8,16712 +8002a080: 00602821 move a1,v1 +8002a084: 00402021 move a0,v0 +8002a088: 0c00dc56 jal 80037158 <strcat> +8002a08c: 00000000 nop + strcat(rootpath, "\\"); +8002a090: 27c34148 addiu v1,s8,16712 +8002a094: 3c028004 lui v0,0x8004 +8002a098: 2445f96c addiu a1,v0,-1684 +8002a09c: 00602021 move a0,v1 +8002a0a0: 0c00dc56 jal 80037158 <strcat> +8002a0a4: 00000000 nop + + y = strlen(rootpath); +8002a0a8: 27c24148 addiu v0,s8,16712 +8002a0ac: 00402021 move a0,v0 +8002a0b0: 0c00d8af jal 800362bc <strlen> +8002a0b4: 00000000 nop +8002a0b8: afc2001c sw v0,28(s8) + strcat(rootpath, "TRANS.TBL;1"); +8002a0bc: 27c34148 addiu v1,s8,16712 +8002a0c0: 3c028004 lui v0,0x8004 +8002a0c4: 2445f970 addiu a1,v0,-1680 +8002a0c8: 00602021 move a0,v1 +8002a0cc: 0c00dc56 jal 80037158 <strcat> +8002a0d0: 00000000 nop + + bzero(transtbl, 0x4000); +8002a0d4: 27c20038 addiu v0,s8,56 +8002a0d8: 24064000 li a2,16384 +8002a0dc: 00002821 move a1,zero +8002a0e0: 00402021 move a0,v0 +8002a0e4: 0c00d7ab jal 80035eac <memset> +8002a0e8: 00000000 nop + + f = fopen(rootpath, "rb"); +8002a0ec: 27c34148 addiu v1,s8,16712 +8002a0f0: 3c028004 lui v0,0x8004 +8002a0f4: 2445f954 addiu a1,v0,-1708 +8002a0f8: 00602021 move a0,v1 +8002a0fc: 0c00a40c jal 80029030 <fopen> +8002a100: 00000000 nop +8002a104: afc20034 sw v0,52(s8) + + if(f == NULL) +8002a108: 8fc20034 lw v0,52(s8) +8002a10c: 00000000 nop +8002a110: 14400005 bnez v0,8002a128 <libc_get_transtbl_fname+0x918> +8002a114: 00000000 nop + { + dprintf("Couldn't find %s\n", rootpath); + exit_loop = 1; +8002a118: 24020001 li v0,1 +8002a11c: afc20024 sw v0,36(s8) + continue; +8002a120: 1000001e b 8002a19c <libc_get_transtbl_fname+0x98c> +8002a124: 00000000 nop + } + + rootpath[y] = 0; +8002a128: 8fc2001c lw v0,28(s8) +8002a12c: 27c30010 addiu v1,s8,16 +8002a130: 00621021 addu v0,v1,v0 +8002a134: a0404138 sb zero,16696(v0) + + fseek(f, 0, SEEK_END); +8002a138: 24060002 li a2,2 +8002a13c: 00002821 move a1,zero +8002a140: 8fc40034 lw a0,52(s8) +8002a144: 0c00a598 jal 80029660 <fseek> +8002a148: 00000000 nop + s = ftell(f); +8002a14c: 8fc40034 lw a0,52(s8) +8002a150: 0c00a58c jal 80029630 <ftell> +8002a154: 00000000 nop +8002a158: afc20010 sw v0,16(s8) + fseek(f, 0, SEEK_SET); +8002a15c: 00003021 move a2,zero +8002a160: 00002821 move a1,zero +8002a164: 8fc40034 lw a0,52(s8) +8002a168: 0c00a598 jal 80029660 <fseek> +8002a16c: 00000000 nop + fread(transtbl, 1, s, f); +8002a170: 27c20038 addiu v0,s8,56 +8002a174: 8fc70034 lw a3,52(s8) +8002a178: 8fc60010 lw a2,16(s8) +8002a17c: 24050001 li a1,1 +8002a180: 00402021 move a0,v0 +8002a184: 0c00a4b6 jal 800292d8 <fread> +8002a188: 00000000 nop + fclose(f); +8002a18c: 8fc40034 lw a0,52(s8) +8002a190: 0c00a4a0 jal 80029280 <fclose> +8002a194: 00000000 nop + + x = 0; +8002a198: afc00014 sw zero,20(s8) + break; + } + + tfp = y; + + while((x < s) && !exit_loop) +8002a19c: 8fc30014 lw v1,20(s8) +8002a1a0: 8fc20010 lw v0,16(s8) +8002a1a4: 00000000 nop +8002a1a8: 0062102a slt v0,v1,v0 +8002a1ac: 10400005 beqz v0,8002a1c4 <libc_get_transtbl_fname+0x9b4> +8002a1b0: 00000000 nop +8002a1b4: 8fc20024 lw v0,36(s8) +8002a1b8: 00000000 nop +8002a1bc: 1040fe25 beqz v0,80029a54 <libc_get_transtbl_fname+0x244> +8002a1c0: 00000000 nop + x = 0; + } + } + } + + return filename_found; +8002a1c4: 8fc20020 lw v0,32(s8) +} +8002a1c8: 03c0e821 move sp,s8 +8002a1cc: 8fbf424c lw ra,16972(sp) +8002a1d0: 8fbe4248 lw s8,16968(sp) +8002a1d4: 27bd4250 addiu sp,sp,16976 +8002a1d8: 03e00008 jr ra +8002a1dc: 00000000 nop + +8002a1e0 <isupper>: + +int isupper(int c) +{ +8002a1e0: 27bdfff8 addiu sp,sp,-8 +8002a1e4: afbe0004 sw s8,4(sp) +8002a1e8: 03a0f021 move s8,sp +8002a1ec: afc40008 sw a0,8(s8) + return (c >= 'A' && c <= 'Z'); +8002a1f0: 8fc20008 lw v0,8(s8) +8002a1f4: 00000000 nop +8002a1f8: 28420041 slti v0,v0,65 +8002a1fc: 14400009 bnez v0,8002a224 <isupper+0x44> +8002a200: 00000000 nop +8002a204: 8fc20008 lw v0,8(s8) +8002a208: 00000000 nop +8002a20c: 2842005b slti v0,v0,91 +8002a210: 10400004 beqz v0,8002a224 <isupper+0x44> +8002a214: 00000000 nop +8002a218: 24020001 li v0,1 +8002a21c: 10000002 b 8002a228 <isupper+0x48> +8002a220: 00000000 nop +8002a224: 00001021 move v0,zero +} +8002a228: 03c0e821 move sp,s8 +8002a22c: 8fbe0004 lw s8,4(sp) +8002a230: 27bd0008 addiu sp,sp,8 +8002a234: 03e00008 jr ra +8002a238: 00000000 nop + +8002a23c <islower>: + +int islower(int c) +{ +8002a23c: 27bdfff8 addiu sp,sp,-8 +8002a240: afbe0004 sw s8,4(sp) +8002a244: 03a0f021 move s8,sp +8002a248: afc40008 sw a0,8(s8) + return (c >= 'a' && c <= 'z'); +8002a24c: 8fc20008 lw v0,8(s8) +8002a250: 00000000 nop +8002a254: 28420061 slti v0,v0,97 +8002a258: 14400009 bnez v0,8002a280 <islower+0x44> +8002a25c: 00000000 nop +8002a260: 8fc20008 lw v0,8(s8) +8002a264: 00000000 nop +8002a268: 2842007b slti v0,v0,123 +8002a26c: 10400004 beqz v0,8002a280 <islower+0x44> +8002a270: 00000000 nop +8002a274: 24020001 li v0,1 +8002a278: 10000002 b 8002a284 <islower+0x48> +8002a27c: 00000000 nop +8002a280: 00001021 move v0,zero +} +8002a284: 03c0e821 move sp,s8 +8002a288: 8fbe0004 lw s8,4(sp) +8002a28c: 27bd0008 addiu sp,sp,8 +8002a290: 03e00008 jr ra +8002a294: 00000000 nop + +8002a298 <isdigit>: + +int isdigit(int c) +{ +8002a298: 27bdfff8 addiu sp,sp,-8 +8002a29c: afbe0004 sw s8,4(sp) +8002a2a0: 03a0f021 move s8,sp +8002a2a4: afc40008 sw a0,8(s8) + return (c >= '0' && c <= '9'); +8002a2a8: 8fc20008 lw v0,8(s8) +8002a2ac: 00000000 nop +8002a2b0: 28420030 slti v0,v0,48 +8002a2b4: 14400009 bnez v0,8002a2dc <isdigit+0x44> +8002a2b8: 00000000 nop +8002a2bc: 8fc20008 lw v0,8(s8) +8002a2c0: 00000000 nop +8002a2c4: 2842003a slti v0,v0,58 +8002a2c8: 10400004 beqz v0,8002a2dc <isdigit+0x44> +8002a2cc: 00000000 nop +8002a2d0: 24020001 li v0,1 +8002a2d4: 10000002 b 8002a2e0 <isdigit+0x48> +8002a2d8: 00000000 nop +8002a2dc: 00001021 move v0,zero +} +8002a2e0: 03c0e821 move sp,s8 +8002a2e4: 8fbe0004 lw s8,4(sp) +8002a2e8: 27bd0008 addiu sp,sp,8 +8002a2ec: 03e00008 jr ra +8002a2f0: 00000000 nop + +8002a2f4 <isxdigit>: + +int isxdigit(int c) +{ +8002a2f4: 27bdfff8 addiu sp,sp,-8 +8002a2f8: afbe0004 sw s8,4(sp) +8002a2fc: 03a0f021 move s8,sp +8002a300: afc40008 sw a0,8(s8) + return ((c >= '0' && c <= '9') || (c >= 'A' && c<='F') || (c >= 'a' && c<='f')); +8002a304: 8fc20008 lw v0,8(s8) +8002a308: 00000000 nop +8002a30c: 28420030 slti v0,v0,48 +8002a310: 14400006 bnez v0,8002a32c <isxdigit+0x38> +8002a314: 00000000 nop +8002a318: 8fc20008 lw v0,8(s8) +8002a31c: 00000000 nop +8002a320: 2842003a slti v0,v0,58 +8002a324: 14400015 bnez v0,8002a37c <isxdigit+0x88> +8002a328: 00000000 nop +8002a32c: 8fc20008 lw v0,8(s8) +8002a330: 00000000 nop +8002a334: 28420041 slti v0,v0,65 +8002a338: 14400006 bnez v0,8002a354 <isxdigit+0x60> +8002a33c: 00000000 nop +8002a340: 8fc20008 lw v0,8(s8) +8002a344: 00000000 nop +8002a348: 28420047 slti v0,v0,71 +8002a34c: 1440000b bnez v0,8002a37c <isxdigit+0x88> +8002a350: 00000000 nop +8002a354: 8fc20008 lw v0,8(s8) +8002a358: 00000000 nop +8002a35c: 28420061 slti v0,v0,97 +8002a360: 14400009 bnez v0,8002a388 <isxdigit+0x94> +8002a364: 00000000 nop +8002a368: 8fc20008 lw v0,8(s8) +8002a36c: 00000000 nop +8002a370: 28420067 slti v0,v0,103 +8002a374: 10400004 beqz v0,8002a388 <isxdigit+0x94> +8002a378: 00000000 nop +8002a37c: 24020001 li v0,1 +8002a380: 10000002 b 8002a38c <isxdigit+0x98> +8002a384: 00000000 nop +8002a388: 00001021 move v0,zero +} +8002a38c: 03c0e821 move sp,s8 +8002a390: 8fbe0004 lw s8,4(sp) +8002a394: 27bd0008 addiu sp,sp,8 +8002a398: 03e00008 jr ra +8002a39c: 00000000 nop + +8002a3a0 <isalpha>: + +int isalpha(int c) +{ +8002a3a0: 27bdfff8 addiu sp,sp,-8 +8002a3a4: afbe0004 sw s8,4(sp) +8002a3a8: 03a0f021 move s8,sp +8002a3ac: afc40008 sw a0,8(s8) + return ((c>='a' && c<='z') || (c>='A' && c<='Z')); +8002a3b0: 8fc20008 lw v0,8(s8) +8002a3b4: 00000000 nop +8002a3b8: 28420061 slti v0,v0,97 +8002a3bc: 14400006 bnez v0,8002a3d8 <isalpha+0x38> +8002a3c0: 00000000 nop +8002a3c4: 8fc20008 lw v0,8(s8) +8002a3c8: 00000000 nop +8002a3cc: 2842007b slti v0,v0,123 +8002a3d0: 1440000b bnez v0,8002a400 <isalpha+0x60> +8002a3d4: 00000000 nop +8002a3d8: 8fc20008 lw v0,8(s8) +8002a3dc: 00000000 nop +8002a3e0: 28420041 slti v0,v0,65 +8002a3e4: 14400009 bnez v0,8002a40c <isalpha+0x6c> +8002a3e8: 00000000 nop +8002a3ec: 8fc20008 lw v0,8(s8) +8002a3f0: 00000000 nop +8002a3f4: 2842005b slti v0,v0,91 +8002a3f8: 10400004 beqz v0,8002a40c <isalpha+0x6c> +8002a3fc: 00000000 nop +8002a400: 24020001 li v0,1 +8002a404: 10000002 b 8002a410 <isalpha+0x70> +8002a408: 00000000 nop +8002a40c: 00001021 move v0,zero +} +8002a410: 03c0e821 move sp,s8 +8002a414: 8fbe0004 lw s8,4(sp) +8002a418: 27bd0008 addiu sp,sp,8 +8002a41c: 03e00008 jr ra +8002a420: 00000000 nop + +8002a424 <isalnum>: + +int isalnum(int c) +{ +8002a424: 27bdfff8 addiu sp,sp,-8 +8002a428: afbe0004 sw s8,4(sp) +8002a42c: 03a0f021 move s8,sp +8002a430: afc40008 sw a0,8(s8) + return ((c>='a' && c<='z') || (c>='A' && c<='Z') || (c>='0' && c<='9')); +8002a434: 8fc20008 lw v0,8(s8) +8002a438: 00000000 nop +8002a43c: 28420061 slti v0,v0,97 +8002a440: 14400006 bnez v0,8002a45c <isalnum+0x38> +8002a444: 00000000 nop +8002a448: 8fc20008 lw v0,8(s8) +8002a44c: 00000000 nop +8002a450: 2842007b slti v0,v0,123 +8002a454: 14400015 bnez v0,8002a4ac <isalnum+0x88> +8002a458: 00000000 nop +8002a45c: 8fc20008 lw v0,8(s8) +8002a460: 00000000 nop +8002a464: 28420041 slti v0,v0,65 +8002a468: 14400006 bnez v0,8002a484 <isalnum+0x60> +8002a46c: 00000000 nop +8002a470: 8fc20008 lw v0,8(s8) +8002a474: 00000000 nop +8002a478: 2842005b slti v0,v0,91 +8002a47c: 1440000b bnez v0,8002a4ac <isalnum+0x88> +8002a480: 00000000 nop +8002a484: 8fc20008 lw v0,8(s8) +8002a488: 00000000 nop +8002a48c: 28420030 slti v0,v0,48 +8002a490: 14400009 bnez v0,8002a4b8 <isalnum+0x94> +8002a494: 00000000 nop +8002a498: 8fc20008 lw v0,8(s8) +8002a49c: 00000000 nop +8002a4a0: 2842003a slti v0,v0,58 +8002a4a4: 10400004 beqz v0,8002a4b8 <isalnum+0x94> +8002a4a8: 00000000 nop +8002a4ac: 24020001 li v0,1 +8002a4b0: 10000002 b 8002a4bc <isalnum+0x98> +8002a4b4: 00000000 nop +8002a4b8: 00001021 move v0,zero +} +8002a4bc: 03c0e821 move sp,s8 +8002a4c0: 8fbe0004 lw s8,4(sp) +8002a4c4: 27bd0008 addiu sp,sp,8 +8002a4c8: 03e00008 jr ra +8002a4cc: 00000000 nop + +8002a4d0 <isspace>: + +int isspace(int c) +{ +8002a4d0: 27bdfff8 addiu sp,sp,-8 +8002a4d4: afbe0004 sw s8,4(sp) +8002a4d8: 03a0f021 move s8,sp +8002a4dc: afc40008 sw a0,8(s8) + return ((c == ' ') || (c == '\f') || (c == '\n') || (c == '\r') || (c == '\t') || (c == '\v')); +8002a4e0: 8fc30008 lw v1,8(s8) +8002a4e4: 24020020 li v0,32 +8002a4e8: 10620015 beq v1,v0,8002a540 <isspace+0x70> +8002a4ec: 00000000 nop +8002a4f0: 8fc30008 lw v1,8(s8) +8002a4f4: 2402000c li v0,12 +8002a4f8: 10620011 beq v1,v0,8002a540 <isspace+0x70> +8002a4fc: 00000000 nop +8002a500: 8fc30008 lw v1,8(s8) +8002a504: 2402000a li v0,10 +8002a508: 1062000d beq v1,v0,8002a540 <isspace+0x70> +8002a50c: 00000000 nop +8002a510: 8fc30008 lw v1,8(s8) +8002a514: 2402000d li v0,13 +8002a518: 10620009 beq v1,v0,8002a540 <isspace+0x70> +8002a51c: 00000000 nop +8002a520: 8fc30008 lw v1,8(s8) +8002a524: 24020009 li v0,9 +8002a528: 10620005 beq v1,v0,8002a540 <isspace+0x70> +8002a52c: 00000000 nop +8002a530: 8fc30008 lw v1,8(s8) +8002a534: 2402000b li v0,11 +8002a538: 14620004 bne v1,v0,8002a54c <isspace+0x7c> +8002a53c: 00000000 nop +8002a540: 24020001 li v0,1 +8002a544: 10000002 b 8002a550 <isspace+0x80> +8002a548: 00000000 nop +8002a54c: 00001021 move v0,zero +} +8002a550: 03c0e821 move sp,s8 +8002a554: 8fbe0004 lw s8,4(sp) +8002a558: 27bd0008 addiu sp,sp,8 +8002a55c: 03e00008 jr ra +8002a560: 00000000 nop + +8002a564 <isprint>: + +int isprint(int c) +{ +8002a564: 27bdfff8 addiu sp,sp,-8 +8002a568: afbe0004 sw s8,4(sp) +8002a56c: 03a0f021 move s8,sp +8002a570: afc40008 sw a0,8(s8) + return (c >= 0x20) && (c <= 0x7E); +8002a574: 8fc20008 lw v0,8(s8) +8002a578: 00000000 nop +8002a57c: 28420020 slti v0,v0,32 +8002a580: 14400009 bnez v0,8002a5a8 <isprint+0x44> +8002a584: 00000000 nop +8002a588: 8fc20008 lw v0,8(s8) +8002a58c: 00000000 nop +8002a590: 2842007f slti v0,v0,127 +8002a594: 10400004 beqz v0,8002a5a8 <isprint+0x44> +8002a598: 00000000 nop +8002a59c: 24020001 li v0,1 +8002a5a0: 10000002 b 8002a5ac <isprint+0x48> +8002a5a4: 00000000 nop +8002a5a8: 00001021 move v0,zero +} +8002a5ac: 03c0e821 move sp,s8 +8002a5b0: 8fbe0004 lw s8,4(sp) +8002a5b4: 27bd0008 addiu sp,sp,8 +8002a5b8: 03e00008 jr ra +8002a5bc: 00000000 nop + +8002a5c0 <isgraph>: + +int isgraph(int c) +{ +8002a5c0: 27bdfff8 addiu sp,sp,-8 +8002a5c4: afbe0004 sw s8,4(sp) +8002a5c8: 03a0f021 move s8,sp +8002a5cc: afc40008 sw a0,8(s8) + return (c > 0x20) && (c <= 0x7E); +8002a5d0: 8fc20008 lw v0,8(s8) +8002a5d4: 00000000 nop +8002a5d8: 28420021 slti v0,v0,33 +8002a5dc: 14400009 bnez v0,8002a604 <isgraph+0x44> +8002a5e0: 00000000 nop +8002a5e4: 8fc20008 lw v0,8(s8) +8002a5e8: 00000000 nop +8002a5ec: 2842007f slti v0,v0,127 +8002a5f0: 10400004 beqz v0,8002a604 <isgraph+0x44> +8002a5f4: 00000000 nop +8002a5f8: 24020001 li v0,1 +8002a5fc: 10000002 b 8002a608 <isgraph+0x48> +8002a600: 00000000 nop +8002a604: 00001021 move v0,zero +} +8002a608: 03c0e821 move sp,s8 +8002a60c: 8fbe0004 lw s8,4(sp) +8002a610: 27bd0008 addiu sp,sp,8 +8002a614: 03e00008 jr ra +8002a618: 00000000 nop + +8002a61c <iscntrl>: + +int iscntrl(int c) +{ +8002a61c: 27bdfff8 addiu sp,sp,-8 +8002a620: afbe0004 sw s8,4(sp) +8002a624: 03a0f021 move s8,sp +8002a628: afc40008 sw a0,8(s8) + return (c < 0x20); +8002a62c: 8fc20008 lw v0,8(s8) +8002a630: 00000000 nop +8002a634: 28420020 slti v0,v0,32 +8002a638: 304200ff andi v0,v0,0xff +} +8002a63c: 03c0e821 move sp,s8 +8002a640: 8fbe0004 lw s8,4(sp) +8002a644: 27bd0008 addiu sp,sp,8 +8002a648: 03e00008 jr ra +8002a64c: 00000000 nop + +8002a650 <isblank>: + +int isblank(int c) +{ +8002a650: 27bdfff8 addiu sp,sp,-8 +8002a654: afbe0004 sw s8,4(sp) +8002a658: 03a0f021 move s8,sp +8002a65c: afc40008 sw a0,8(s8) + return ((c == ' ') || (c == '\t')); +8002a660: 8fc30008 lw v1,8(s8) +8002a664: 24020020 li v0,32 +8002a668: 10620005 beq v1,v0,8002a680 <isblank+0x30> +8002a66c: 00000000 nop +8002a670: 8fc30008 lw v1,8(s8) +8002a674: 24020009 li v0,9 +8002a678: 14620004 bne v1,v0,8002a68c <isblank+0x3c> +8002a67c: 00000000 nop +8002a680: 24020001 li v0,1 +8002a684: 10000002 b 8002a690 <isblank+0x40> +8002a688: 00000000 nop +8002a68c: 00001021 move v0,zero +} +8002a690: 03c0e821 move sp,s8 +8002a694: 8fbe0004 lw s8,4(sp) +8002a698: 27bd0008 addiu sp,sp,8 +8002a69c: 03e00008 jr ra +8002a6a0: 00000000 nop + +8002a6a4 <redirect_stdio_to_sio>: + +void redirect_stdio_to_sio(void) +{ +8002a6a4: 27bdfff8 addiu sp,sp,-8 +8002a6a8: afbe0004 sw s8,4(sp) +8002a6ac: 03a0f021 move s8,sp + __stdio_direction = STDIO_DIRECTION_SIO; +8002a6b0: 3c028007 lui v0,0x8007 +8002a6b4: 24030001 li v1,1 +8002a6b8: ac431cc0 sw v1,7360(v0) +} +8002a6bc: 00000000 nop +8002a6c0: 03c0e821 move sp,s8 +8002a6c4: 8fbe0004 lw s8,4(sp) +8002a6c8: 27bd0008 addiu sp,sp,8 +8002a6cc: 03e00008 jr ra +8002a6d0: 00000000 nop + +8002a6d4 <sio_stdio_mapcr>: + +void sio_stdio_mapcr(unsigned int setting) +{ +8002a6d4: 27bdfff8 addiu sp,sp,-8 +8002a6d8: afbe0004 sw s8,4(sp) +8002a6dc: 03a0f021 move s8,sp +8002a6e0: afc40008 sw a0,8(s8) + __sio_cr_mapped = setting; +8002a6e4: 3c028007 lui v0,0x8007 +8002a6e8: 8fc30008 lw v1,8(s8) +8002a6ec: 00000000 nop +8002a6f0: ac431cc4 sw v1,7364(v0) +} +8002a6f4: 00000000 nop +8002a6f8: 03c0e821 move sp,s8 +8002a6fc: 8fbe0004 lw s8,4(sp) +8002a700: 27bd0008 addiu sp,sp,8 +8002a704: 03e00008 jr ra +8002a708: 00000000 nop + +8002a70c <sio_putchar>: + +int sio_putchar(int c) +{ +8002a70c: 27bdffe8 addiu sp,sp,-24 +8002a710: afbf0014 sw ra,20(sp) +8002a714: afbe0010 sw s8,16(sp) +8002a718: 03a0f021 move s8,sp +8002a71c: afc40018 sw a0,24(s8) + if(c == '\n' && __sio_cr_mapped) +8002a720: 8fc30018 lw v1,24(s8) +8002a724: 2402000a li v0,10 +8002a728: 14620009 bne v1,v0,8002a750 <sio_putchar+0x44> +8002a72c: 00000000 nop +8002a730: 3c028007 lui v0,0x8007 +8002a734: 8c421cc4 lw v0,7364(v0) +8002a738: 00000000 nop +8002a73c: 10400004 beqz v0,8002a750 <sio_putchar+0x44> +8002a740: 00000000 nop + sio_putchar('\r'); +8002a744: 2404000d li a0,13 +8002a748: 0c00a9c3 jal 8002a70c <sio_putchar> +8002a74c: 00000000 nop + + while(!SIOCheckOutBuffer()); +8002a750: 00000000 nop +8002a754: 0c00cfd4 jal 80033f50 <SIOCheckOutBuffer> +8002a758: 00000000 nop +8002a75c: 1040fffd beqz v0,8002a754 <sio_putchar+0x48> +8002a760: 00000000 nop + + SIOSendByte(c); +8002a764: 8fc20018 lw v0,24(s8) +8002a768: 00000000 nop +8002a76c: 304200ff andi v0,v0,0xff +8002a770: 00402021 move a0,v0 +8002a774: 0c00cfb4 jal 80033ed0 <SIOSendByte> +8002a778: 00000000 nop + + return c; +8002a77c: 8fc20018 lw v0,24(s8) +} +8002a780: 03c0e821 move sp,s8 +8002a784: 8fbf0014 lw ra,20(sp) +8002a788: 8fbe0010 lw s8,16(sp) +8002a78c: 27bd0018 addiu sp,sp,24 +8002a790: 03e00008 jr ra +8002a794: 00000000 nop + +8002a798 <sio_puts>: + +int sio_puts(const char *str) +{ +8002a798: 27bdffe8 addiu sp,sp,-24 +8002a79c: afbf0014 sw ra,20(sp) +8002a7a0: afbe0010 sw s8,16(sp) +8002a7a4: 03a0f021 move s8,sp +8002a7a8: afc40018 sw a0,24(s8) + while(*str) +8002a7ac: 1000000a b 8002a7d8 <sio_puts+0x40> +8002a7b0: 00000000 nop + sio_putchar(*(str++)); +8002a7b4: 8fc20018 lw v0,24(s8) +8002a7b8: 00000000 nop +8002a7bc: 24430001 addiu v1,v0,1 +8002a7c0: afc30018 sw v1,24(s8) +8002a7c4: 80420000 lb v0,0(v0) +8002a7c8: 00000000 nop +8002a7cc: 00402021 move a0,v0 +8002a7d0: 0c00a9c3 jal 8002a70c <sio_putchar> +8002a7d4: 00000000 nop + return c; +} + +int sio_puts(const char *str) +{ + while(*str) +8002a7d8: 8fc20018 lw v0,24(s8) +8002a7dc: 00000000 nop +8002a7e0: 80420000 lb v0,0(v0) +8002a7e4: 00000000 nop +8002a7e8: 1440fff2 bnez v0,8002a7b4 <sio_puts+0x1c> +8002a7ec: 00000000 nop + sio_putchar(*(str++)); + + sio_putchar('\n'); +8002a7f0: 2404000a li a0,10 +8002a7f4: 0c00a9c3 jal 8002a70c <sio_putchar> +8002a7f8: 00000000 nop + + return 1; +8002a7fc: 24020001 li v0,1 +} +8002a800: 03c0e821 move sp,s8 +8002a804: 8fbf0014 lw ra,20(sp) +8002a808: 8fbe0010 lw s8,16(sp) +8002a80c: 27bd0018 addiu sp,sp,24 +8002a810: 03e00008 jr ra +8002a814: 00000000 nop + +8002a818 <putchar>: + +extern int bios_putchar(int c); +extern int bios_puts(const char *str); + +int putchar(int c) +{ +8002a818: 27bdffe8 addiu sp,sp,-24 +8002a81c: afbf0014 sw ra,20(sp) +8002a820: afbe0010 sw s8,16(sp) +8002a824: 03a0f021 move s8,sp +8002a828: afc40018 sw a0,24(s8) + switch(__stdio_direction) +8002a82c: 3c028007 lui v0,0x8007 +8002a830: 8c421cc0 lw v0,7360(v0) +8002a834: 00000000 nop +8002a838: 10400006 beqz v0,8002a854 <putchar+0x3c> +8002a83c: 00000000 nop +8002a840: 24030001 li v1,1 +8002a844: 10430008 beq v0,v1,8002a868 <putchar+0x50> +8002a848: 00000000 nop +8002a84c: 1000000b b 8002a87c <putchar+0x64> +8002a850: 00000000 nop + { + case STDIO_DIRECTION_BIOS: + return bios_putchar(c); +8002a854: 8fc40018 lw a0,24(s8) +8002a858: 0c00ed87 jal 8003b61c <bios_putchar> +8002a85c: 00000000 nop +8002a860: 10000007 b 8002a880 <putchar+0x68> +8002a864: 00000000 nop + break; + case STDIO_DIRECTION_SIO: + return sio_putchar(c); +8002a868: 8fc40018 lw a0,24(s8) +8002a86c: 0c00a9c3 jal 8002a70c <sio_putchar> +8002a870: 00000000 nop +8002a874: 10000002 b 8002a880 <putchar+0x68> +8002a878: 00000000 nop + break; + } + + return -1; +8002a87c: 2402ffff li v0,-1 +} +8002a880: 03c0e821 move sp,s8 +8002a884: 8fbf0014 lw ra,20(sp) +8002a888: 8fbe0010 lw s8,16(sp) +8002a88c: 27bd0018 addiu sp,sp,24 +8002a890: 03e00008 jr ra +8002a894: 00000000 nop + +8002a898 <puts>: + +int puts(const char *str) +{ +8002a898: 27bdffe8 addiu sp,sp,-24 +8002a89c: afbf0014 sw ra,20(sp) +8002a8a0: afbe0010 sw s8,16(sp) +8002a8a4: 03a0f021 move s8,sp +8002a8a8: afc40018 sw a0,24(s8) + switch(__stdio_direction) +8002a8ac: 3c028007 lui v0,0x8007 +8002a8b0: 8c421cc0 lw v0,7360(v0) +8002a8b4: 00000000 nop +8002a8b8: 10400006 beqz v0,8002a8d4 <puts+0x3c> +8002a8bc: 00000000 nop +8002a8c0: 24030001 li v1,1 +8002a8c4: 10430008 beq v0,v1,8002a8e8 <puts+0x50> +8002a8c8: 00000000 nop +8002a8cc: 1000000b b 8002a8fc <puts+0x64> +8002a8d0: 00000000 nop + { + case STDIO_DIRECTION_BIOS: + return bios_puts(str); +8002a8d4: 8fc40018 lw a0,24(s8) +8002a8d8: 0c00ed8b jal 8003b62c <bios_puts> +8002a8dc: 00000000 nop +8002a8e0: 10000007 b 8002a900 <puts+0x68> +8002a8e4: 00000000 nop + break; + case STDIO_DIRECTION_SIO: + return sio_puts(str); +8002a8e8: 8fc40018 lw a0,24(s8) +8002a8ec: 0c00a9e6 jal 8002a798 <sio_puts> +8002a8f0: 00000000 nop +8002a8f4: 10000002 b 8002a900 <puts+0x68> +8002a8f8: 00000000 nop + break; + } + + return -1; +8002a8fc: 2402ffff li v0,-1 +} +8002a900: 03c0e821 move sp,s8 +8002a904: 8fbf0014 lw ra,20(sp) +8002a908: 8fbe0010 lw s8,16(sp) +8002a90c: 27bd0018 addiu sp,sp,24 +8002a910: 03e00008 jr ra +8002a914: 00000000 nop + +8002a918 <CdSendCommand>: + 0xFF, // ??? 1D + 1, // ReadToc 1E +}; + +void CdSendCommand(int cmd, int num, ...) +{ +8002a918: 27bdfff0 addiu sp,sp,-16 +8002a91c: afbe000c sw s8,12(sp) +8002a920: 03a0f021 move s8,sp +8002a924: afc40010 sw a0,16(s8) +8002a928: afc50014 sw a1,20(s8) +8002a92c: afc60018 sw a2,24(s8) +8002a930: afc7001c sw a3,28(s8) + int x; + va_list ap; + va_start(ap, num); +8002a934: 27c20018 addiu v0,s8,24 +8002a938: afc20004 sw v0,4(s8) +// while(CDREG(0) & 128); + +// Flush old interrupts +// If this is not done, some events (like the opening of the shell) will hang the CD controller. + + CDREG(0) = 1; +8002a93c: 3c021f80 lui v0,0x1f80 +8002a940: 34421800 ori v0,v0,0x1800 +8002a944: 24030001 li v1,1 +8002a948: a0430000 sb v1,0(v0) + CDREG(3) = 7; +8002a94c: 3c021f80 lui v0,0x1f80 +8002a950: 34421803 ori v0,v0,0x1803 +8002a954: 24030007 li v1,7 +8002a958: a0430000 sb v1,0(v0) + +// Send parameters + + CDREG(0) = 0; +8002a95c: 3c021f80 lui v0,0x1f80 +8002a960: 34421800 ori v0,v0,0x1800 +8002a964: a0400000 sb zero,0(v0) + + while(num) +8002a968: 1000000f b 8002a9a8 <CdSendCommand+0x90> +8002a96c: 00000000 nop + { + CDREG(2) = (unsigned char)va_arg(ap, unsigned int); +8002a970: 3c021f80 lui v0,0x1f80 +8002a974: 34431802 ori v1,v0,0x1802 +8002a978: 8fc20004 lw v0,4(s8) +8002a97c: 00000000 nop +8002a980: 24440004 addiu a0,v0,4 +8002a984: afc40004 sw a0,4(s8) +8002a988: 8c420000 lw v0,0(v0) +8002a98c: 00000000 nop +8002a990: 304200ff andi v0,v0,0xff +8002a994: a0620000 sb v0,0(v1) + num--; +8002a998: 8fc20014 lw v0,20(s8) +8002a99c: 00000000 nop +8002a9a0: 2442ffff addiu v0,v0,-1 +8002a9a4: afc20014 sw v0,20(s8) + +// Send parameters + + CDREG(0) = 0; + + while(num) +8002a9a8: 8fc20014 lw v0,20(s8) +8002a9ac: 00000000 nop +8002a9b0: 1440ffef bnez v0,8002a970 <CdSendCommand+0x58> +8002a9b4: 00000000 nop + num--; + } + +// Send command + + CDREG(0) = 0; +8002a9b8: 3c021f80 lui v0,0x1f80 +8002a9bc: 34421800 ori v0,v0,0x1800 +8002a9c0: a0400000 sb zero,0(v0) + CDREG(1) = cmd; +8002a9c4: 3c021f80 lui v0,0x1f80 +8002a9c8: 34421801 ori v0,v0,0x1801 +8002a9cc: 8fc30010 lw v1,16(s8) +8002a9d0: 00000000 nop +8002a9d4: 306300ff andi v1,v1,0xff +8002a9d8: a0430000 sb v1,0(v0) + +// Depending on the number of INTs we expect for a command, +// we wait for an INT to occur, we store the response data returned, +// and we flush the INT. + for(x = 0; x < (cdrom_command_type[cmd] + 1); x++) +8002a9dc: afc00000 sw zero,0(s8) +8002a9e0: 10000022 b 8002aa6c <CdSendCommand+0x154> +8002a9e4: 00000000 nop + { + CDREG(0) = 1; +8002a9e8: 3c021f80 lui v0,0x1f80 +8002a9ec: 34421800 ori v0,v0,0x1800 +8002a9f0: 24030001 li v1,1 +8002a9f4: a0430000 sb v1,0(v0) + // PROBLEMATIC INSTRUCTION - CHECK! + while((CDREG(3) & 7) == 0); +8002a9f8: 00000000 nop +8002a9fc: 3c021f80 lui v0,0x1f80 +8002aa00: 34421803 ori v0,v0,0x1803 +8002aa04: 90420000 lbu v0,0(v0) +8002aa08: 00000000 nop +8002aa0c: 30420007 andi v0,v0,0x7 +8002aa10: 1040fffa beqz v0,8002a9fc <CdSendCommand+0xe4> +8002aa14: 00000000 nop + + cdrom_command_stat[x] = CDREG(1); +8002aa18: 3c021f80 lui v0,0x1f80 +8002aa1c: 34421801 ori v0,v0,0x1801 +8002aa20: 90430000 lbu v1,0(v0) +8002aa24: 3c028007 lui v0,0x8007 +8002aa28: 24441d2c addiu a0,v0,7468 +8002aa2c: 8fc20000 lw v0,0(s8) +8002aa30: 00000000 nop +8002aa34: 00821021 addu v0,a0,v0 +8002aa38: a0430000 sb v1,0(v0) + + CDREG(0) = 1; +8002aa3c: 3c021f80 lui v0,0x1f80 +8002aa40: 34421800 ori v0,v0,0x1800 +8002aa44: 24030001 li v1,1 +8002aa48: a0430000 sb v1,0(v0) + CDREG(3) = 7; +8002aa4c: 3c021f80 lui v0,0x1f80 +8002aa50: 34421803 ori v0,v0,0x1803 +8002aa54: 24030007 li v1,7 +8002aa58: a0430000 sb v1,0(v0) + CDREG(1) = cmd; + +// Depending on the number of INTs we expect for a command, +// we wait for an INT to occur, we store the response data returned, +// and we flush the INT. + for(x = 0; x < (cdrom_command_type[cmd] + 1); x++) +8002aa5c: 8fc20000 lw v0,0(s8) +8002aa60: 00000000 nop +8002aa64: 24420001 addiu v0,v0,1 +8002aa68: afc20000 sw v0,0(s8) +8002aa6c: 3c028004 lui v0,0x8004 +8002aa70: 2443f97c addiu v1,v0,-1668 +8002aa74: 8fc20010 lw v0,16(s8) +8002aa78: 00000000 nop +8002aa7c: 00621021 addu v0,v1,v0 +8002aa80: 90420000 lbu v0,0(v0) +8002aa84: 00000000 nop +8002aa88: 24430001 addiu v1,v0,1 +8002aa8c: 8fc20000 lw v0,0(s8) +8002aa90: 00000000 nop +8002aa94: 0043102a slt v0,v0,v1 +8002aa98: 1440ffd3 bnez v0,8002a9e8 <CdSendCommand+0xd0> +8002aa9c: 00000000 nop + CDREG(0) = 1; + CDREG(3) = 7; + } + +// Store ID number of last executed command (this) + cdrom_last_command = cmd; +8002aaa0: 8fc20010 lw v0,16(s8) +8002aaa4: 00000000 nop +8002aaa8: 304300ff andi v1,v0,0xff +8002aaac: 3c028007 lui v0,0x8007 +8002aab0: a0431d2e sb v1,7470(v0) + + va_end(ap); +} +8002aab4: 00000000 nop +8002aab8: 03c0e821 move sp,s8 +8002aabc: 8fbe000c lw s8,12(sp) +8002aac0: 27bd0010 addiu sp,sp,16 +8002aac4: 03e00008 jr ra +8002aac8: 00000000 nop + +8002aacc <CdReadResults>: + +int CdReadResults(unsigned char *out, int max) +{ +8002aacc: 27bdffe8 addiu sp,sp,-24 +8002aad0: afbe0014 sw s8,20(sp) +8002aad4: 03a0f021 move s8,sp +8002aad8: afc40018 sw a0,24(s8) +8002aadc: afc5001c sw a1,28(s8) + int x; + unsigned char *outo = out; +8002aae0: 8fc20018 lw v0,24(s8) +8002aae4: 00000000 nop +8002aae8: afc20004 sw v0,4(s8) + unsigned char b; + + for(x = 0; x < (cdrom_command_type[cdrom_last_command] + 1); x++) +8002aaec: afc00000 sw zero,0(s8) +8002aaf0: 1000001a b 8002ab5c <CdReadResults+0x90> +8002aaf4: 00000000 nop + { + if(max > 0) +8002aaf8: 8fc2001c lw v0,28(s8) +8002aafc: 00000000 nop +8002ab00: 18400012 blez v0,8002ab4c <CdReadResults+0x80> +8002ab04: 00000000 nop + { + *(out++) = cdrom_command_stat[x]; +8002ab08: 8fc20018 lw v0,24(s8) +8002ab0c: 00000000 nop +8002ab10: 24430001 addiu v1,v0,1 +8002ab14: afc30018 sw v1,24(s8) +8002ab18: 3c038007 lui v1,0x8007 +8002ab1c: 24641d2c addiu a0,v1,7468 +8002ab20: 8fc30000 lw v1,0(s8) +8002ab24: 00000000 nop +8002ab28: 00831821 addu v1,a0,v1 +8002ab2c: 90630000 lbu v1,0(v1) +8002ab30: 00000000 nop +8002ab34: 306300ff andi v1,v1,0xff +8002ab38: a0430000 sb v1,0(v0) + max--; +8002ab3c: 8fc2001c lw v0,28(s8) +8002ab40: 00000000 nop +8002ab44: 2442ffff addiu v0,v0,-1 +8002ab48: afc2001c sw v0,28(s8) +{ + int x; + unsigned char *outo = out; + unsigned char b; + + for(x = 0; x < (cdrom_command_type[cdrom_last_command] + 1); x++) +8002ab4c: 8fc20000 lw v0,0(s8) +8002ab50: 00000000 nop +8002ab54: 24420001 addiu v0,v0,1 +8002ab58: afc20000 sw v0,0(s8) +8002ab5c: 3c028007 lui v0,0x8007 +8002ab60: 90421d2e lbu v0,7470(v0) +8002ab64: 00000000 nop +8002ab68: 304200ff andi v0,v0,0xff +8002ab6c: 00401821 move v1,v0 +8002ab70: 3c028004 lui v0,0x8004 +8002ab74: 2442f97c addiu v0,v0,-1668 +8002ab78: 00621021 addu v0,v1,v0 +8002ab7c: 90420000 lbu v0,0(v0) +8002ab80: 00000000 nop +8002ab84: 24430001 addiu v1,v0,1 +8002ab88: 8fc20000 lw v0,0(s8) +8002ab8c: 00000000 nop +8002ab90: 0043102a slt v0,v0,v1 +8002ab94: 1440ffd8 bnez v0,8002aaf8 <CdReadResults+0x2c> +8002ab98: 00000000 nop + *(out++) = cdrom_command_stat[x]; + max--; + } + } + + CDREG(0) = 1; +8002ab9c: 3c021f80 lui v0,0x1f80 +8002aba0: 34421800 ori v0,v0,0x1800 +8002aba4: 24030001 li v1,1 +8002aba8: a0430000 sb v1,0(v0) + + while(CDREG(0) & 0x20) +8002abac: 10000015 b 8002ac04 <CdReadResults+0x138> +8002abb0: 00000000 nop + { + b = CDREG(1); +8002abb4: 3c021f80 lui v0,0x1f80 +8002abb8: 34421801 ori v0,v0,0x1801 +8002abbc: 90420000 lbu v0,0(v0) +8002abc0: 00000000 nop +8002abc4: a3c20008 sb v0,8(s8) + if(max>0) +8002abc8: 8fc2001c lw v0,28(s8) +8002abcc: 00000000 nop +8002abd0: 1840000c blez v0,8002ac04 <CdReadResults+0x138> +8002abd4: 00000000 nop + { + *(out++) = b; +8002abd8: 8fc20018 lw v0,24(s8) +8002abdc: 00000000 nop +8002abe0: 24430001 addiu v1,v0,1 +8002abe4: afc30018 sw v1,24(s8) +8002abe8: 93c30008 lbu v1,8(s8) +8002abec: 00000000 nop +8002abf0: a0430000 sb v1,0(v0) + max--; +8002abf4: 8fc2001c lw v0,28(s8) +8002abf8: 00000000 nop +8002abfc: 2442ffff addiu v0,v0,-1 +8002ac00: afc2001c sw v0,28(s8) + } + } + + CDREG(0) = 1; + + while(CDREG(0) & 0x20) +8002ac04: 3c021f80 lui v0,0x1f80 +8002ac08: 34421800 ori v0,v0,0x1800 +8002ac0c: 90420000 lbu v0,0(v0) +8002ac10: 00000000 nop +8002ac14: 30420020 andi v0,v0,0x20 +8002ac18: 1440ffe6 bnez v0,8002abb4 <CdReadResults+0xe8> +8002ac1c: 00000000 nop + *(out++) = b; + max--; + } + } + + return (out-outo); +8002ac20: 8fc30018 lw v1,24(s8) +8002ac24: 8fc20004 lw v0,4(s8) +8002ac28: 00000000 nop +8002ac2c: 00621023 subu v0,v1,v0 +} +8002ac30: 03c0e821 move sp,s8 +8002ac34: 8fbe0014 lw s8,20(sp) +8002ac38: 27bd0018 addiu sp,sp,24 +8002ac3c: 03e00008 jr ra +8002ac40: 00000000 nop + +8002ac44 <_internal_cdromlib_callback>: + +void _internal_cdromlib_callback() +{ +8002ac44: 27bdffe8 addiu sp,sp,-24 +8002ac48: afbf0014 sw ra,20(sp) +8002ac4c: afbe0010 sw s8,16(sp) +8002ac50: 03a0f021 move s8,sp + printf("Call from CD-ROM interrupt!\n"); +8002ac54: 3c028004 lui v0,0x8004 +8002ac58: 2444f99c addiu a0,v0,-1636 +8002ac5c: 0c00ed8f jal 8003b63c <printf> +8002ac60: 00000000 nop + printf("Status: %d\n", IPENDING); +8002ac64: 3c021f80 lui v0,0x1f80 +8002ac68: 34421070 ori v0,v0,0x1070 +8002ac6c: 8c420000 lw v0,0(v0) +8002ac70: 00000000 nop +8002ac74: 00402821 move a1,v0 +8002ac78: 3c028004 lui v0,0x8004 +8002ac7c: 2444f9bc addiu a0,v0,-1604 +8002ac80: 0c00ed8f jal 8003b63c <printf> +8002ac84: 00000000 nop + IPENDING &= ~(1<<2); +8002ac88: 3c021f80 lui v0,0x1f80 +8002ac8c: 34421070 ori v0,v0,0x1070 +8002ac90: 3c031f80 lui v1,0x1f80 +8002ac94: 34631070 ori v1,v1,0x1070 +8002ac98: 8c640000 lw a0,0(v1) +8002ac9c: 2403fffb li v1,-5 +8002aca0: 00831824 and v1,a0,v1 +8002aca4: ac430000 sw v1,0(v0) + CDREG(3) = 7; + i = CDREG(1); + cdrom_command_stat[1] = i; + + //printf("cdrom_command_done = %d\n", cdrom_command_done);*/ +} +8002aca8: 00000000 nop +8002acac: 03c0e821 move sp,s8 +8002acb0: 8fbf0014 lw ra,20(sp) +8002acb4: 8fbe0010 lw s8,16(sp) +8002acb8: 27bd0018 addiu sp,sp,24 +8002acbc: 03e00008 jr ra +8002acc0: 00000000 nop + +8002acc4 <_internal_cdromlib_init>: + +void _internal_cdromlib_init() +{ +8002acc4: 27bdffe8 addiu sp,sp,-24 +8002acc8: afbf0014 sw ra,20(sp) +8002accc: afbe0010 sw s8,16(sp) +8002acd0: 03a0f021 move s8,sp + printf("Starting CDROMlib...\n"); +8002acd4: 3c028004 lui v0,0x8004 +8002acd8: 2444f9c8 addiu a0,v0,-1592 +8002acdc: 0c00ed8f jal 8003b63c <printf> +8002ace0: 00000000 nop + + EnterCriticalSection(); // Disable IRQs +8002ace4: 0c00ee04 jal 8003b810 <EnterCriticalSection> +8002ace8: 00000000 nop + + SysEnqIntRP(0, cdrom_queue_buf); +8002acec: 3c028004 lui v0,0x8004 +8002acf0: 2445153c addiu a1,v0,5436 +8002acf4: 00002021 move a0,zero +8002acf8: 0c00ee10 jal 8003b840 <SysEnqIntRP> +8002acfc: 00000000 nop + + IMASK|=4; +8002ad00: 3c021f80 lui v0,0x1f80 +8002ad04: 34421074 ori v0,v0,0x1074 +8002ad08: 3c031f80 lui v1,0x1f80 +8002ad0c: 34631074 ori v1,v1,0x1074 +8002ad10: 8c630000 lw v1,0(v1) +8002ad14: 00000000 nop +8002ad18: 34630004 ori v1,v1,0x4 +8002ad1c: ac430000 sw v1,0(v0) + + cdrom_handler_callback = _internal_cdromlib_callback; +8002ad20: 3c028007 lui v0,0x8007 +8002ad24: 3c038003 lui v1,0x8003 +8002ad28: 2463ac44 addiu v1,v1,-21436 +8002ad2c: ac431d34 sw v1,7476(v0) + + ExitCriticalSection(); // Enable IRQs +8002ad30: 0c00ee0a jal 8003b828 <ExitCriticalSection> +8002ad34: 00000000 nop +} +8002ad38: 00000000 nop +8002ad3c: 03c0e821 move sp,s8 +8002ad40: 8fbf0014 lw ra,20(sp) +8002ad44: 8fbe0010 lw s8,16(sp) +8002ad48: 27bd0018 addiu sp,sp,24 +8002ad4c: 03e00008 jr ra +8002ad50: 00000000 nop + +8002ad54 <CdGetStatus>: + +int CdGetStatus() +{ +8002ad54: 27bdffe0 addiu sp,sp,-32 +8002ad58: afbf001c sw ra,28(sp) +8002ad5c: afbe0018 sw s8,24(sp) +8002ad60: 03a0f021 move s8,sp + unsigned char out; + + CdSendCommand(CdlGetstat, 0); +8002ad64: 00002821 move a1,zero +8002ad68: 24040001 li a0,1 +8002ad6c: 0c00aa46 jal 8002a918 <CdSendCommand> +8002ad70: 00000000 nop + CdReadResults(&out, 1); +8002ad74: 24050001 li a1,1 +8002ad78: 27c20010 addiu v0,s8,16 +8002ad7c: 00402021 move a0,v0 +8002ad80: 0c00aab3 jal 8002aacc <CdReadResults> +8002ad84: 00000000 nop + + return out; +8002ad88: 93c20010 lbu v0,16(s8) +} +8002ad8c: 03c0e821 move sp,s8 +8002ad90: 8fbf001c lw ra,28(sp) +8002ad94: 8fbe0018 lw s8,24(sp) +8002ad98: 27bd0020 addiu sp,sp,32 +8002ad9c: 03e00008 jr ra +8002ada0: 00000000 nop + +8002ada4 <CdPlayTrack>: + +int CdPlayTrack(unsigned int track) +{ +8002ada4: 27bdffe8 addiu sp,sp,-24 +8002ada8: afbf0014 sw ra,20(sp) +8002adac: afbe0010 sw s8,16(sp) +8002adb0: 03a0f021 move s8,sp +8002adb4: afc40018 sw a0,24(s8) + //while(CdGetStatus() & CDSTATUS_SEEK); + CdSendCommand(CdlSetmode, 1, 0x20); +8002adb8: 24060020 li a2,32 +8002adbc: 24050001 li a1,1 +8002adc0: 2404000e li a0,14 +8002adc4: 0c00aa46 jal 8002a918 <CdSendCommand> +8002adc8: 00000000 nop + CdSendCommand(CdlPlay, 1, ((track/10)<<4)|(track%10)); +8002adcc: 8fc30018 lw v1,24(s8) +8002add0: 2402000a li v0,10 +8002add4: 14400002 bnez v0,8002ade0 <CdPlayTrack+0x3c> +8002add8: 0062001b divu zero,v1,v0 +8002addc: 0007000d break 0x7 +8002ade0: 00001010 mfhi v0 +8002ade4: 00001012 mflo v0 +8002ade8: 00021100 sll v0,v0,0x4 +8002adec: 8fc40018 lw a0,24(s8) +8002adf0: 2403000a li v1,10 +8002adf4: 14600002 bnez v1,8002ae00 <CdPlayTrack+0x5c> +8002adf8: 0083001b divu zero,a0,v1 +8002adfc: 0007000d break 0x7 +8002ae00: 00001810 mfhi v1 +8002ae04: 00431025 or v0,v0,v1 +8002ae08: 00403021 move a2,v0 +8002ae0c: 24050001 li a1,1 +8002ae10: 24040003 li a0,3 +8002ae14: 0c00aa46 jal 8002a918 <CdSendCommand> +8002ae18: 00000000 nop + + return 1; +8002ae1c: 24020001 li v0,1 +} +8002ae20: 03c0e821 move sp,s8 +8002ae24: 8fbf0014 lw ra,20(sp) +8002ae28: 8fbe0010 lw s8,16(sp) +8002ae2c: 27bd0018 addiu sp,sp,24 +8002ae30: 03e00008 jr ra +8002ae34: 00000000 nop + +8002ae38 <CdRamRead>: + +unsigned char CdRamRead(unsigned short addr) +{ +8002ae38: 27bdffe0 addiu sp,sp,-32 +8002ae3c: afbf001c sw ra,28(sp) +8002ae40: afbe0018 sw s8,24(sp) +8002ae44: 03a0f021 move s8,sp +8002ae48: 00801021 move v0,a0 +8002ae4c: a7c20020 sh v0,32(s8) + unsigned char b; + addr &= 0x3ff; +8002ae50: 97c20020 lhu v0,32(s8) +8002ae54: 00000000 nop +8002ae58: 304203ff andi v0,v0,0x3ff +8002ae5c: a7c20020 sh v0,32(s8) + + CdSendCommand(0x19, 0x60, addr&0xff, addr >> 8); +8002ae60: 97c20020 lhu v0,32(s8) +8002ae64: 00000000 nop +8002ae68: 304300ff andi v1,v0,0xff +8002ae6c: 97c20020 lhu v0,32(s8) +8002ae70: 00000000 nop +8002ae74: 00021202 srl v0,v0,0x8 +8002ae78: 3042ffff andi v0,v0,0xffff +8002ae7c: 00403821 move a3,v0 +8002ae80: 00603021 move a2,v1 +8002ae84: 24050060 li a1,96 +8002ae88: 24040019 li a0,25 +8002ae8c: 0c00aa46 jal 8002a918 <CdSendCommand> +8002ae90: 00000000 nop + CdReadResults(&b, 1); +8002ae94: 24050001 li a1,1 +8002ae98: 27c20010 addiu v0,s8,16 +8002ae9c: 00402021 move a0,v0 +8002aea0: 0c00aab3 jal 8002aacc <CdReadResults> +8002aea4: 00000000 nop + + return b; +8002aea8: 93c20010 lbu v0,16(s8) +} +8002aeac: 03c0e821 move sp,s8 +8002aeb0: 8fbf001c lw ra,28(sp) +8002aeb4: 8fbe0018 lw s8,24(sp) +8002aeb8: 27bd0020 addiu sp,sp,32 +8002aebc: 03e00008 jr ra +8002aec0: 00000000 nop + +8002aec4 <malloc_setup>: +// RAM memory map on the PSX +// 0x80000000 - 0x8000FFFF RAM used by the BIOS +// 0x80010000 - 0x801FFFFF Program memory + +void malloc_setup() +{ +8002aec4: 27bdfff0 addiu sp,sp,-16 +8002aec8: afbe000c sw s8,12(sp) +8002aecc: 03a0f021 move s8,sp + int x; + + dprintf("malloc setup.\n"); + + first_free_page = (unsigned int) __bss_end; +8002aed0: 3c028007 lui v0,0x8007 +8002aed4: 24431bf8 addiu v1,v0,7160 +8002aed8: 3c028007 lui v0,0x8007 +8002aedc: ac431d38 sw v1,7480(v0) + first_free_page-= 0x80000000; +8002aee0: 3c028007 lui v0,0x8007 +8002aee4: 8c431d38 lw v1,7480(v0) +8002aee8: 3c028000 lui v0,0x8000 +8002aeec: 00621821 addu v1,v1,v0 +8002aef0: 3c028007 lui v0,0x8007 +8002aef4: ac431d38 sw v1,7480(v0) + + if(first_free_page & 0x3ff) +8002aef8: 3c028007 lui v0,0x8007 +8002aefc: 8c421d38 lw v0,7480(v0) +8002af00: 00000000 nop +8002af04: 304203ff andi v0,v0,0x3ff +8002af08: 10400008 beqz v0,8002af2c <malloc_setup+0x68> +8002af0c: 00000000 nop + first_free_page = (first_free_page | 0x3ff) + 1; +8002af10: 3c028007 lui v0,0x8007 +8002af14: 8c421d38 lw v0,7480(v0) +8002af18: 00000000 nop +8002af1c: 344203ff ori v0,v0,0x3ff +8002af20: 24430001 addiu v1,v0,1 +8002af24: 3c028007 lui v0,0x8007 +8002af28: ac431d38 sw v1,7480(v0) + + first_free_page>>=10; +8002af2c: 3c028007 lui v0,0x8007 +8002af30: 8c421d38 lw v0,7480(v0) +8002af34: 00000000 nop +8002af38: 00021a82 srl v1,v0,0xa +8002af3c: 3c028007 lui v0,0x8007 +8002af40: ac431d38 sw v1,7480(v0) + + //printf("First free page: %d, bss_end: %x\n", first_free_page, __bss_end); + + for(x = 0; x < first_free_page; x++) +8002af44: afc00000 sw zero,0(s8) +8002af48: 10000014 b 8002af9c <malloc_setup+0xd8> +8002af4c: 00000000 nop + { + busy_pages[x] = 1; // RAM occupied by program, data and BIOS looks always allocated +8002af50: 3c028007 lui v0,0x8007 +8002af54: 2443136c addiu v1,v0,4972 +8002af58: 8fc20000 lw v0,0(s8) +8002af5c: 00000000 nop +8002af60: 00621021 addu v0,v1,v0 +8002af64: 24030001 li v1,1 +8002af68: a0430000 sb v1,0(v0) + alloc_size[x] = 1; // Fake that 1K was required +8002af6c: 3c028007 lui v0,0x8007 +8002af70: 8fc30000 lw v1,0(s8) +8002af74: 00000000 nop +8002af78: 00031880 sll v1,v1,0x2 +8002af7c: 2442f36c addiu v0,v0,-3220 +8002af80: 00621021 addu v0,v1,v0 +8002af84: 24030001 li v1,1 +8002af88: ac430000 sw v1,0(v0) + + first_free_page>>=10; + + //printf("First free page: %d, bss_end: %x\n", first_free_page, __bss_end); + + for(x = 0; x < first_free_page; x++) +8002af8c: 8fc20000 lw v0,0(s8) +8002af90: 00000000 nop +8002af94: 24420001 addiu v0,v0,1 +8002af98: afc20000 sw v0,0(s8) +8002af9c: 8fc30000 lw v1,0(s8) +8002afa0: 3c028007 lui v0,0x8007 +8002afa4: 8c421d38 lw v0,7480(v0) +8002afa8: 00000000 nop +8002afac: 0062102b sltu v0,v1,v0 +8002afb0: 1440ffe7 bnez v0,8002af50 <malloc_setup+0x8c> +8002afb4: 00000000 nop + { + busy_pages[x] = 1; // RAM occupied by program, data and BIOS looks always allocated + alloc_size[x] = 1; // Fake that 1K was required + } + + for(x = first_free_page; x < 2048; x++) +8002afb8: 3c028007 lui v0,0x8007 +8002afbc: 8c421d38 lw v0,7480(v0) +8002afc0: 00000000 nop +8002afc4: afc20000 sw v0,0(s8) +8002afc8: 10000012 b 8002b014 <malloc_setup+0x150> +8002afcc: 00000000 nop + { + busy_pages[x] = 0; +8002afd0: 3c028007 lui v0,0x8007 +8002afd4: 2443136c addiu v1,v0,4972 +8002afd8: 8fc20000 lw v0,0(s8) +8002afdc: 00000000 nop +8002afe0: 00621021 addu v0,v1,v0 +8002afe4: a0400000 sb zero,0(v0) + alloc_size[x] = 0; +8002afe8: 3c028007 lui v0,0x8007 +8002afec: 8fc30000 lw v1,0(s8) +8002aff0: 00000000 nop +8002aff4: 00031880 sll v1,v1,0x2 +8002aff8: 2442f36c addiu v0,v0,-3220 +8002affc: 00621021 addu v0,v1,v0 +8002b000: ac400000 sw zero,0(v0) + { + busy_pages[x] = 1; // RAM occupied by program, data and BIOS looks always allocated + alloc_size[x] = 1; // Fake that 1K was required + } + + for(x = first_free_page; x < 2048; x++) +8002b004: 8fc20000 lw v0,0(s8) +8002b008: 00000000 nop +8002b00c: 24420001 addiu v0,v0,1 +8002b010: afc20000 sw v0,0(s8) +8002b014: 8fc20000 lw v0,0(s8) +8002b018: 00000000 nop +8002b01c: 28420800 slti v0,v0,2048 +8002b020: 1440ffeb bnez v0,8002afd0 <malloc_setup+0x10c> +8002b024: 00000000 nop + { + busy_pages[x] = 0; + alloc_size[x] = 0; + } +} +8002b028: 00000000 nop +8002b02c: 03c0e821 move sp,s8 +8002b030: 8fbe000c lw s8,12(sp) +8002b034: 27bd0010 addiu sp,sp,16 +8002b038: 03e00008 jr ra +8002b03c: 00000000 nop + +8002b040 <malloc>: + +void *malloc(size_t size) +{ +8002b040: 27bdfff0 addiu sp,sp,-16 +8002b044: afbe000c sw s8,12(sp) +8002b048: 03a0f021 move s8,sp +8002b04c: afc40010 sw a0,16(s8) + + int x, y; + +// Round size + + if(size & 0x3ff) +8002b050: 8fc20010 lw v0,16(s8) +8002b054: 00000000 nop +8002b058: 304203ff andi v0,v0,0x3ff +8002b05c: 10400006 beqz v0,8002b078 <malloc+0x38> +8002b060: 00000000 nop + size = (size | 0x3ff) + 1; +8002b064: 8fc20010 lw v0,16(s8) +8002b068: 00000000 nop +8002b06c: 344203ff ori v0,v0,0x3ff +8002b070: 24420001 addiu v0,v0,1 +8002b074: afc20010 sw v0,16(s8) + +// Divide it by 1024 + size >>= 10; +8002b078: 8fc20010 lw v0,16(s8) +8002b07c: 00000000 nop +8002b080: 00021282 srl v0,v0,0xa +8002b084: afc20010 sw v0,16(s8) + //printf("Allocating %dKb\n", size); + +// Find a free page + for(x = 0; x < 2048; x++) +8002b088: afc00000 sw zero,0(s8) +8002b08c: 1000004e b 8002b1c8 <malloc+0x188> +8002b090: 00000000 nop + { + if(busy_pages[x] == 0) +8002b094: 3c028007 lui v0,0x8007 +8002b098: 2443136c addiu v1,v0,4972 +8002b09c: 8fc20000 lw v0,0(s8) +8002b0a0: 00000000 nop +8002b0a4: 00621021 addu v0,v1,v0 +8002b0a8: 90420000 lbu v0,0(v0) +8002b0ac: 00000000 nop +8002b0b0: 14400041 bnez v0,8002b1b8 <malloc+0x178> +8002b0b4: 00000000 nop + // If it's enough for the memory we want to allocate, then return + // the pointer to the free page we found, otherwise keep finding + + // printf("Page found at %dKb\n", x); + + for(y = 0; y < size; y++) +8002b0b8: afc00004 sw zero,4(s8) +8002b0bc: 10000010 b 8002b100 <malloc+0xc0> +8002b0c0: 00000000 nop + if(busy_pages[x+y] == 1) goto malloc_keep_finding; +8002b0c4: 8fc30000 lw v1,0(s8) +8002b0c8: 8fc20004 lw v0,4(s8) +8002b0cc: 00000000 nop +8002b0d0: 00621821 addu v1,v1,v0 +8002b0d4: 3c028007 lui v0,0x8007 +8002b0d8: 2442136c addiu v0,v0,4972 +8002b0dc: 00621021 addu v0,v1,v0 +8002b0e0: 90430000 lbu v1,0(v0) +8002b0e4: 24020001 li v0,1 +8002b0e8: 10620032 beq v1,v0,8002b1b4 <malloc+0x174> +8002b0ec: 00000000 nop + // If it's enough for the memory we want to allocate, then return + // the pointer to the free page we found, otherwise keep finding + + // printf("Page found at %dKb\n", x); + + for(y = 0; y < size; y++) +8002b0f0: 8fc20004 lw v0,4(s8) +8002b0f4: 00000000 nop +8002b0f8: 24420001 addiu v0,v0,1 +8002b0fc: afc20004 sw v0,4(s8) +8002b100: 8fc30004 lw v1,4(s8) +8002b104: 8fc20010 lw v0,16(s8) +8002b108: 00000000 nop +8002b10c: 0062102b sltu v0,v1,v0 +8002b110: 1440ffec bnez v0,8002b0c4 <malloc+0x84> +8002b114: 00000000 nop + if(busy_pages[x+y] == 1) goto malloc_keep_finding; + + // We found the memory we wanted, now make it busy + + for(y = 0; y < size; y++) +8002b118: afc00004 sw zero,4(s8) +8002b11c: 1000000e b 8002b158 <malloc+0x118> +8002b120: 00000000 nop + busy_pages[x+y] = 1; +8002b124: 8fc30000 lw v1,0(s8) +8002b128: 8fc20004 lw v0,4(s8) +8002b12c: 00000000 nop +8002b130: 00621821 addu v1,v1,v0 +8002b134: 3c028007 lui v0,0x8007 +8002b138: 2442136c addiu v0,v0,4972 +8002b13c: 00621021 addu v0,v1,v0 +8002b140: 24030001 li v1,1 +8002b144: a0430000 sb v1,0(v0) + for(y = 0; y < size; y++) + if(busy_pages[x+y] == 1) goto malloc_keep_finding; + + // We found the memory we wanted, now make it busy + + for(y = 0; y < size; y++) +8002b148: 8fc20004 lw v0,4(s8) +8002b14c: 00000000 nop +8002b150: 24420001 addiu v0,v0,1 +8002b154: afc20004 sw v0,4(s8) +8002b158: 8fc30004 lw v1,4(s8) +8002b15c: 8fc20010 lw v0,16(s8) +8002b160: 00000000 nop +8002b164: 0062102b sltu v0,v1,v0 +8002b168: 1440ffee bnez v0,8002b124 <malloc+0xe4> +8002b16c: 00000000 nop + busy_pages[x+y] = 1; + + // Store allocation size, it is essential for free() + + alloc_size[x] = size; +8002b170: 3c028007 lui v0,0x8007 +8002b174: 8fc30000 lw v1,0(s8) +8002b178: 00000000 nop +8002b17c: 00031880 sll v1,v1,0x2 +8002b180: 2442f36c addiu v0,v0,-3220 +8002b184: 00621021 addu v0,v1,v0 +8002b188: 8fc30010 lw v1,16(s8) +8002b18c: 00000000 nop +8002b190: ac430000 sw v1,0(v0) + // printf("malloc(): alloc_size[%d] = %d\n", x, size); + + return (void*)((unsigned int)0x80000000 + (x<<10)); +8002b194: 8fc20000 lw v0,0(s8) +8002b198: 00000000 nop +8002b19c: 00021280 sll v0,v0,0xa +8002b1a0: 00401821 move v1,v0 +8002b1a4: 3c028000 lui v0,0x8000 +8002b1a8: 00621021 addu v0,v1,v0 +8002b1ac: 1000000c b 8002b1e0 <malloc+0x1a0> +8002b1b0: 00000000 nop + // the pointer to the free page we found, otherwise keep finding + + // printf("Page found at %dKb\n", x); + + for(y = 0; y < size; y++) + if(busy_pages[x+y] == 1) goto malloc_keep_finding; +8002b1b4: 00000000 nop +// Divide it by 1024 + size >>= 10; + //printf("Allocating %dKb\n", size); + +// Find a free page + for(x = 0; x < 2048; x++) +8002b1b8: 8fc20000 lw v0,0(s8) +8002b1bc: 00000000 nop +8002b1c0: 24420001 addiu v0,v0,1 +8002b1c4: afc20000 sw v0,0(s8) +8002b1c8: 8fc20000 lw v0,0(s8) +8002b1cc: 00000000 nop +8002b1d0: 28420800 slti v0,v0,2048 +8002b1d4: 1440ffaf bnez v0,8002b094 <malloc+0x54> +8002b1d8: 00000000 nop +malloc_keep_finding: + ; // Useless statement to make GCC not bail out... + } + +// We couldn't find anything, return NULL + return NULL; +8002b1dc: 00001021 move v0,zero +} +8002b1e0: 03c0e821 move sp,s8 +8002b1e4: 8fbe000c lw s8,12(sp) +8002b1e8: 27bd0010 addiu sp,sp,16 +8002b1ec: 03e00008 jr ra +8002b1f0: 00000000 nop + +8002b1f4 <calloc>: + +void *calloc(size_t number, size_t size) +{ +8002b1f4: 27bdffd8 addiu sp,sp,-40 +8002b1f8: afbf0024 sw ra,36(sp) +8002b1fc: afbe0020 sw s8,32(sp) +8002b200: 03a0f021 move s8,sp +8002b204: afc40028 sw a0,40(s8) +8002b208: afc5002c sw a1,44(s8) + void *ptr = malloc(number * size); +8002b20c: 8fc30028 lw v1,40(s8) +8002b210: 8fc2002c lw v0,44(s8) +8002b214: 00000000 nop +8002b218: 00620018 mult v1,v0 +8002b21c: 00002012 mflo a0 +8002b220: 0c00ac10 jal 8002b040 <malloc> +8002b224: 00000000 nop +8002b228: afc20010 sw v0,16(s8) + unsigned char *cptr = (unsigned char*)ptr; +8002b22c: 8fc20010 lw v0,16(s8) +8002b230: 00000000 nop +8002b234: afc20018 sw v0,24(s8) + int x; + + if(ptr == NULL) +8002b238: 8fc20010 lw v0,16(s8) +8002b23c: 00000000 nop +8002b240: 14400002 bnez v0,8002b24c <calloc+0x58> +8002b244: 00000000 nop + ptr = NULL; +8002b248: afc00010 sw zero,16(s8) + + for(x = 0; x < (number * size); x++) +8002b24c: afc00014 sw zero,20(s8) +8002b250: 1000000a b 8002b27c <calloc+0x88> +8002b254: 00000000 nop + cptr[x] = 0; +8002b258: 8fc20014 lw v0,20(s8) +8002b25c: 8fc30018 lw v1,24(s8) +8002b260: 00000000 nop +8002b264: 00621021 addu v0,v1,v0 +8002b268: a0400000 sb zero,0(v0) + int x; + + if(ptr == NULL) + ptr = NULL; + + for(x = 0; x < (number * size); x++) +8002b26c: 8fc20014 lw v0,20(s8) +8002b270: 00000000 nop +8002b274: 24420001 addiu v0,v0,1 +8002b278: afc20014 sw v0,20(s8) +8002b27c: 8fc30028 lw v1,40(s8) +8002b280: 8fc2002c lw v0,44(s8) +8002b284: 00000000 nop +8002b288: 00620018 mult v1,v0 +8002b28c: 8fc20014 lw v0,20(s8) +8002b290: 00001812 mflo v1 +8002b294: 0043102b sltu v0,v0,v1 +8002b298: 1440ffef bnez v0,8002b258 <calloc+0x64> +8002b29c: 00000000 nop + cptr[x] = 0; + + return ptr; +8002b2a0: 8fc20010 lw v0,16(s8) +} +8002b2a4: 03c0e821 move sp,s8 +8002b2a8: 8fbf0024 lw ra,36(sp) +8002b2ac: 8fbe0020 lw s8,32(sp) +8002b2b0: 27bd0028 addiu sp,sp,40 +8002b2b4: 03e00008 jr ra +8002b2b8: 00000000 nop + +8002b2bc <free>: + +void free(void *ptr) +{ +8002b2bc: 27bdffe0 addiu sp,sp,-32 +8002b2c0: afbf001c sw ra,28(sp) +8002b2c4: afbe0018 sw s8,24(sp) +8002b2c8: 03a0f021 move s8,sp +8002b2cc: afc40020 sw a0,32(s8) + dprintf("free(%x)\n", (unsigned int)ptr); + + unsigned int ptri = (unsigned int)ptr; +8002b2d0: 8fc20020 lw v0,32(s8) +8002b2d4: 00000000 nop +8002b2d8: afc20014 sw v0,20(s8) + ptri -= 0x80000000; +8002b2dc: 8fc30014 lw v1,20(s8) +8002b2e0: 3c028000 lui v0,0x8000 +8002b2e4: 00621021 addu v0,v1,v0 +8002b2e8: afc20014 sw v0,20(s8) + int x; + + if((ptri & 0x3ff) || (busy_pages[ptri>>10] == 0) || (alloc_size[ptri>>10] == 0)) +8002b2ec: 8fc20014 lw v0,20(s8) +8002b2f0: 00000000 nop +8002b2f4: 304203ff andi v0,v0,0x3ff +8002b2f8: 14400016 bnez v0,8002b354 <free+0x98> +8002b2fc: 00000000 nop +8002b300: 8fc20014 lw v0,20(s8) +8002b304: 00000000 nop +8002b308: 00021a82 srl v1,v0,0xa +8002b30c: 3c028007 lui v0,0x8007 +8002b310: 2442136c addiu v0,v0,4972 +8002b314: 00621021 addu v0,v1,v0 +8002b318: 90420000 lbu v0,0(v0) +8002b31c: 00000000 nop +8002b320: 1040000c beqz v0,8002b354 <free+0x98> +8002b324: 00000000 nop +8002b328: 8fc20014 lw v0,20(s8) +8002b32c: 00000000 nop +8002b330: 00021a82 srl v1,v0,0xa +8002b334: 3c028007 lui v0,0x8007 +8002b338: 00031880 sll v1,v1,0x2 +8002b33c: 2442f36c addiu v0,v0,-3220 +8002b340: 00621021 addu v0,v1,v0 +8002b344: 8c420000 lw v0,0(v0) +8002b348: 00000000 nop +8002b34c: 1440000b bnez v0,8002b37c <free+0xc0> +8002b350: 00000000 nop + { + // If the pointer address is not a multiplier of 1K, or the page + // is free, it means that memory not allocated by malloc() was passed to free. + // Print a warning message and return. + + printf("** free() ** : tried to free memory with invalid pointer at %x\n", +8002b354: 8fc30014 lw v1,20(s8) +8002b358: 3c028000 lui v0,0x8000 +8002b35c: 00621021 addu v0,v1,v0 +8002b360: 00402821 move a1,v0 +8002b364: 3c028004 lui v0,0x8004 +8002b368: 2444f9e0 addiu a0,v0,-1568 +8002b36c: 0c00ed8f jal 8003b63c <printf> +8002b370: 00000000 nop + ptri + 0x80000000); + + return; +8002b374: 10000027 b 8002b414 <free+0x158> +8002b378: 00000000 nop + } + +// Divide ptri by 1024, getting initial page + + ptri>>=10; +8002b37c: 8fc20014 lw v0,20(s8) +8002b380: 00000000 nop +8002b384: 00021282 srl v0,v0,0xa +8002b388: afc20014 sw v0,20(s8) + +// Free pages + +// printf("alloc_size[%d] = %d\n", ptri, alloc_size[ptri]); + + for(x = 0; x < alloc_size[ptri]; x++) +8002b38c: afc00010 sw zero,16(s8) +8002b390: 1000000d b 8002b3c8 <free+0x10c> +8002b394: 00000000 nop + { + dprintf("ptri + x = %d\n", ptri + x); + busy_pages[ptri + x] = 0; +8002b398: 8fc30010 lw v1,16(s8) +8002b39c: 8fc20014 lw v0,20(s8) +8002b3a0: 00000000 nop +8002b3a4: 00621821 addu v1,v1,v0 +8002b3a8: 3c028007 lui v0,0x8007 +8002b3ac: 2442136c addiu v0,v0,4972 +8002b3b0: 00621021 addu v0,v1,v0 +8002b3b4: a0400000 sb zero,0(v0) + +// Free pages + +// printf("alloc_size[%d] = %d\n", ptri, alloc_size[ptri]); + + for(x = 0; x < alloc_size[ptri]; x++) +8002b3b8: 8fc20010 lw v0,16(s8) +8002b3bc: 00000000 nop +8002b3c0: 24420001 addiu v0,v0,1 +8002b3c4: afc20010 sw v0,16(s8) +8002b3c8: 3c028007 lui v0,0x8007 +8002b3cc: 8fc30014 lw v1,20(s8) +8002b3d0: 00000000 nop +8002b3d4: 00031880 sll v1,v1,0x2 +8002b3d8: 2442f36c addiu v0,v0,-3220 +8002b3dc: 00621021 addu v0,v1,v0 +8002b3e0: 8c430000 lw v1,0(v0) +8002b3e4: 8fc20010 lw v0,16(s8) +8002b3e8: 00000000 nop +8002b3ec: 0043102b sltu v0,v0,v1 +8002b3f0: 1440ffe9 bnez v0,8002b398 <free+0xdc> +8002b3f4: 00000000 nop + busy_pages[ptri + x] = 0; + } + +// Set allocation size to 0, finally freeing initial page + + alloc_size[ptri] = 0; +8002b3f8: 3c028007 lui v0,0x8007 +8002b3fc: 8fc30014 lw v1,20(s8) +8002b400: 00000000 nop +8002b404: 00031880 sll v1,v1,0x2 +8002b408: 2442f36c addiu v0,v0,-3220 +8002b40c: 00621021 addu v0,v1,v0 +8002b410: ac400000 sw zero,0(v0) + + /*for(x=150;x<170;x++) + printf("%d: %d, %d\n", x, busy_pages[x], alloc_size[x]);*/ +} +8002b414: 03c0e821 move sp,s8 +8002b418: 8fbf001c lw ra,28(sp) +8002b41c: 8fbe0018 lw s8,24(sp) +8002b420: 27bd0020 addiu sp,sp,32 +8002b424: 03e00008 jr ra +8002b428: 00000000 nop + +8002b42c <realloc>: + +void *realloc(void *ptr, size_t size) +{ +8002b42c: 27bdffd8 addiu sp,sp,-40 +8002b430: afbf0024 sw ra,36(sp) +8002b434: afbe0020 sw s8,32(sp) +8002b438: 03a0f021 move s8,sp +8002b43c: afc40028 sw a0,40(s8) +8002b440: afc5002c sw a1,44(s8) + unsigned int ptri = (unsigned int)ptr; +8002b444: 8fc20028 lw v0,40(s8) +8002b448: 00000000 nop +8002b44c: afc20014 sw v0,20(s8) + int x; + void *newptr; + + if(ptr == NULL) +8002b450: 8fc20028 lw v0,40(s8) +8002b454: 00000000 nop +8002b458: 14400006 bnez v0,8002b474 <realloc+0x48> +8002b45c: 00000000 nop + return malloc(size); +8002b460: 8fc4002c lw a0,44(s8) +8002b464: 0c00ac10 jal 8002b040 <malloc> +8002b468: 00000000 nop +8002b46c: 1000009c b 8002b6e0 <realloc+0x2b4> +8002b470: 00000000 nop + + ptri -= 0x80000000; +8002b474: 8fc30014 lw v1,20(s8) +8002b478: 3c028000 lui v0,0x8000 +8002b47c: 00621021 addu v0,v1,v0 +8002b480: afc20014 sw v0,20(s8) + + size |= 0x3ff; +8002b484: 8fc2002c lw v0,44(s8) +8002b488: 00000000 nop +8002b48c: 344203ff ori v0,v0,0x3ff +8002b490: afc2002c sw v0,44(s8) + size++; +8002b494: 8fc2002c lw v0,44(s8) +8002b498: 00000000 nop +8002b49c: 24420001 addiu v0,v0,1 +8002b4a0: afc2002c sw v0,44(s8) + + size>>=10; +8002b4a4: 8fc2002c lw v0,44(s8) +8002b4a8: 00000000 nop +8002b4ac: 00021282 srl v0,v0,0xa +8002b4b0: afc2002c sw v0,44(s8) + + if((ptri & 0x3ff) || (busy_pages[ptri>>10] == 0) || (alloc_size[ptri>>10] == 0)) +8002b4b4: 8fc20014 lw v0,20(s8) +8002b4b8: 00000000 nop +8002b4bc: 304203ff andi v0,v0,0x3ff +8002b4c0: 14400016 bnez v0,8002b51c <realloc+0xf0> +8002b4c4: 00000000 nop +8002b4c8: 8fc20014 lw v0,20(s8) +8002b4cc: 00000000 nop +8002b4d0: 00021a82 srl v1,v0,0xa +8002b4d4: 3c028007 lui v0,0x8007 +8002b4d8: 2442136c addiu v0,v0,4972 +8002b4dc: 00621021 addu v0,v1,v0 +8002b4e0: 90420000 lbu v0,0(v0) +8002b4e4: 00000000 nop +8002b4e8: 1040000c beqz v0,8002b51c <realloc+0xf0> +8002b4ec: 00000000 nop +8002b4f0: 8fc20014 lw v0,20(s8) +8002b4f4: 00000000 nop +8002b4f8: 00021a82 srl v1,v0,0xa +8002b4fc: 3c028007 lui v0,0x8007 +8002b500: 00031880 sll v1,v1,0x2 +8002b504: 2442f36c addiu v0,v0,-3220 +8002b508: 00621021 addu v0,v1,v0 +8002b50c: 8c420000 lw v0,0(v0) +8002b510: 00000000 nop +8002b514: 1440000c bnez v0,8002b548 <realloc+0x11c> +8002b518: 00000000 nop + { + // If the pointer address is not a multiplier of 1K, or the page + // is free, it means that memory not allocated by malloc() was passed to realloc. + // Print a warning message and return. + + printf("** realloc() ** : tried to reallocate memory with invalid pointer at %x\n", +8002b51c: 8fc30014 lw v1,20(s8) +8002b520: 3c028000 lui v0,0x8000 +8002b524: 00621021 addu v0,v1,v0 +8002b528: 00402821 move a1,v0 +8002b52c: 3c028004 lui v0,0x8004 +8002b530: 2444fa20 addiu a0,v0,-1504 +8002b534: 0c00ed8f jal 8003b63c <printf> +8002b538: 00000000 nop + ptri + 0x80000000); + + return NULL; +8002b53c: 00001021 move v0,zero +8002b540: 10000067 b 8002b6e0 <realloc+0x2b4> +8002b544: 00000000 nop + } + +// Get page + + ptri>>=10; +8002b548: 8fc20014 lw v0,20(s8) +8002b54c: 00000000 nop +8002b550: 00021282 srl v0,v0,0xa +8002b554: afc20014 sw v0,20(s8) + + if(size < alloc_size[ptri]) // New size smaller than old size +8002b558: 3c028007 lui v0,0x8007 +8002b55c: 8fc30014 lw v1,20(s8) +8002b560: 00000000 nop +8002b564: 00031880 sll v1,v1,0x2 +8002b568: 2442f36c addiu v0,v0,-3220 +8002b56c: 00621021 addu v0,v1,v0 +8002b570: 8c430000 lw v1,0(v0) +8002b574: 8fc2002c lw v0,44(s8) +8002b578: 00000000 nop +8002b57c: 0043102b sltu v0,v0,v1 +8002b580: 10400029 beqz v0,8002b628 <realloc+0x1fc> +8002b584: 00000000 nop + { + for(x = size; x < alloc_size[ptri]; x++) +8002b588: 8fc2002c lw v0,44(s8) +8002b58c: 00000000 nop +8002b590: afc20010 sw v0,16(s8) +8002b594: 1000000d b 8002b5cc <realloc+0x1a0> +8002b598: 00000000 nop + busy_pages[ptri + x] = 0; +8002b59c: 8fc30010 lw v1,16(s8) +8002b5a0: 8fc20014 lw v0,20(s8) +8002b5a4: 00000000 nop +8002b5a8: 00621821 addu v1,v1,v0 +8002b5ac: 3c028007 lui v0,0x8007 +8002b5b0: 2442136c addiu v0,v0,4972 +8002b5b4: 00621021 addu v0,v1,v0 +8002b5b8: a0400000 sb zero,0(v0) + + ptri>>=10; + + if(size < alloc_size[ptri]) // New size smaller than old size + { + for(x = size; x < alloc_size[ptri]; x++) +8002b5bc: 8fc20010 lw v0,16(s8) +8002b5c0: 00000000 nop +8002b5c4: 24420001 addiu v0,v0,1 +8002b5c8: afc20010 sw v0,16(s8) +8002b5cc: 3c028007 lui v0,0x8007 +8002b5d0: 8fc30014 lw v1,20(s8) +8002b5d4: 00000000 nop +8002b5d8: 00031880 sll v1,v1,0x2 +8002b5dc: 2442f36c addiu v0,v0,-3220 +8002b5e0: 00621021 addu v0,v1,v0 +8002b5e4: 8c430000 lw v1,0(v0) +8002b5e8: 8fc20010 lw v0,16(s8) +8002b5ec: 00000000 nop +8002b5f0: 0043102b sltu v0,v0,v1 +8002b5f4: 1440ffe9 bnez v0,8002b59c <realloc+0x170> +8002b5f8: 00000000 nop + busy_pages[ptri + x] = 0; + + alloc_size[ptri] = size; +8002b5fc: 3c028007 lui v0,0x8007 +8002b600: 8fc30014 lw v1,20(s8) +8002b604: 00000000 nop +8002b608: 00031880 sll v1,v1,0x2 +8002b60c: 2442f36c addiu v0,v0,-3220 +8002b610: 00621021 addu v0,v1,v0 +8002b614: 8fc3002c lw v1,44(s8) +8002b618: 00000000 nop +8002b61c: ac430000 sw v1,0(v0) +8002b620: 1000002e b 8002b6dc <realloc+0x2b0> +8002b624: 00000000 nop + } + else if(size > alloc_size[ptri]) // New size bigger than old size +8002b628: 3c028007 lui v0,0x8007 +8002b62c: 8fc30014 lw v1,20(s8) +8002b630: 00000000 nop +8002b634: 00031880 sll v1,v1,0x2 +8002b638: 2442f36c addiu v0,v0,-3220 +8002b63c: 00621021 addu v0,v1,v0 +8002b640: 8c430000 lw v1,0(v0) +8002b644: 8fc2002c lw v0,44(s8) +8002b648: 00000000 nop +8002b64c: 0062102b sltu v0,v1,v0 +8002b650: 10400022 beqz v0,8002b6dc <realloc+0x2b0> +8002b654: 00000000 nop + { + newptr = malloc(size * 1024); +8002b658: 8fc2002c lw v0,44(s8) +8002b65c: 00000000 nop +8002b660: 00021280 sll v0,v0,0xa +8002b664: 00402021 move a0,v0 +8002b668: 0c00ac10 jal 8002b040 <malloc> +8002b66c: 00000000 nop +8002b670: afc20018 sw v0,24(s8) + + if(newptr == NULL) +8002b674: 8fc20018 lw v0,24(s8) +8002b678: 00000000 nop +8002b67c: 14400004 bnez v0,8002b690 <realloc+0x264> +8002b680: 00000000 nop + return NULL; +8002b684: 00001021 move v0,zero +8002b688: 10000015 b 8002b6e0 <realloc+0x2b4> +8002b68c: 00000000 nop + + memcpy(newptr, ptr, alloc_size[ptri]); +8002b690: 3c028007 lui v0,0x8007 +8002b694: 8fc30014 lw v1,20(s8) +8002b698: 00000000 nop +8002b69c: 00031880 sll v1,v1,0x2 +8002b6a0: 2442f36c addiu v0,v0,-3220 +8002b6a4: 00621021 addu v0,v1,v0 +8002b6a8: 8c420000 lw v0,0(v0) +8002b6ac: 00000000 nop +8002b6b0: 00403021 move a2,v0 +8002b6b4: 8fc50028 lw a1,40(s8) +8002b6b8: 8fc40018 lw a0,24(s8) +8002b6bc: 0c00d75e jal 80035d78 <memcpy> +8002b6c0: 00000000 nop + free(ptr); +8002b6c4: 8fc40028 lw a0,40(s8) +8002b6c8: 0c00acaf jal 8002b2bc <free> +8002b6cc: 00000000 nop + + ptr = newptr; +8002b6d0: 8fc20018 lw v0,24(s8) +8002b6d4: 00000000 nop +8002b6d8: afc20028 sw v0,40(s8) + } + + return ptr; +8002b6dc: 8fc20028 lw v0,40(s8) +} +8002b6e0: 03c0e821 move sp,s8 +8002b6e4: 8fbf0024 lw ra,36(sp) +8002b6e8: 8fbe0020 lw s8,32(sp) +8002b6ec: 27bd0028 addiu sp,sp,40 +8002b6f0: 03e00008 jr ra +8002b6f4: 00000000 nop + +8002b6f8 <PRFONT_SCALEX>: +double gs_vbuf[4][3]; + +static int __gs_autowait = 0; + +unsigned int PRFONT_SCALEX(int i) +{ +8002b6f8: 27bdfff8 addiu sp,sp,-8 +8002b6fc: afbe0004 sw s8,4(sp) +8002b700: 03a0f021 move s8,sp +8002b704: afc40008 sw a0,8(s8) + prfont_scale_x = i; +8002b708: 3c028007 lui v0,0x8007 +8002b70c: 8fc30008 lw v1,8(s8) +8002b710: 00000000 nop +8002b714: ac431ce0 sw v1,7392(v0) + return PRFONT_SCALE; +8002b718: 24020008 li v0,8 +} +8002b71c: 03c0e821 move sp,s8 +8002b720: 8fbe0004 lw s8,4(sp) +8002b724: 27bd0008 addiu sp,sp,8 +8002b728: 03e00008 jr ra +8002b72c: 00000000 nop + +8002b730 <PRFONT_SCALEY>: + +unsigned int PRFONT_SCALEY(int i) +{ +8002b730: 27bdfff8 addiu sp,sp,-8 +8002b734: afbe0004 sw s8,4(sp) +8002b738: 03a0f021 move s8,sp +8002b73c: afc40008 sw a0,8(s8) + prfont_scale_y = i; +8002b740: 3c028007 lui v0,0x8007 +8002b744: 8fc30008 lw v1,8(s8) +8002b748: 00000000 nop +8002b74c: ac431ce4 sw v1,7396(v0) + return PRFONT_SCALE; +8002b750: 24020008 li v0,8 +} +8002b754: 03c0e821 move sp,s8 +8002b758: 8fbe0004 lw s8,4(sp) +8002b75c: 27bd0008 addiu sp,sp,8 +8002b760: 03e00008 jr ra +8002b764: 00000000 nop + +8002b768 <PRFONT_RL>: + +unsigned int PRFONT_RL(unsigned char f) +{ +8002b768: 27bdfff8 addiu sp,sp,-8 +8002b76c: afbe0004 sw s8,4(sp) +8002b770: 03a0f021 move s8,sp +8002b774: 00801021 move v0,a0 +8002b778: a3c20008 sb v0,8(s8) + prfont_rl = f; +8002b77c: 3c028004 lui v0,0x8004 +8002b780: 93c30008 lbu v1,8(s8) +8002b784: 00000000 nop +8002b788: a043255c sb v1,9564(v0) + return PRFONT_COLOR; +8002b78c: 24020020 li v0,32 +} +8002b790: 03c0e821 move sp,s8 +8002b794: 8fbe0004 lw s8,4(sp) +8002b798: 27bd0008 addiu sp,sp,8 +8002b79c: 03e00008 jr ra +8002b7a0: 00000000 nop + +8002b7a4 <PRFONT_GL>: + +unsigned int PRFONT_GL(unsigned char f) +{ +8002b7a4: 27bdfff8 addiu sp,sp,-8 +8002b7a8: afbe0004 sw s8,4(sp) +8002b7ac: 03a0f021 move s8,sp +8002b7b0: 00801021 move v0,a0 +8002b7b4: a3c20008 sb v0,8(s8) + prfont_gl = f; +8002b7b8: 3c028004 lui v0,0x8004 +8002b7bc: 93c30008 lbu v1,8(s8) +8002b7c0: 00000000 nop +8002b7c4: a043255d sb v1,9565(v0) + return PRFONT_COLOR; +8002b7c8: 24020020 li v0,32 +} +8002b7cc: 03c0e821 move sp,s8 +8002b7d0: 8fbe0004 lw s8,4(sp) +8002b7d4: 27bd0008 addiu sp,sp,8 +8002b7d8: 03e00008 jr ra +8002b7dc: 00000000 nop + +8002b7e0 <PRFONT_BL>: + +unsigned int PRFONT_BL(unsigned char f) +{ +8002b7e0: 27bdfff8 addiu sp,sp,-8 +8002b7e4: afbe0004 sw s8,4(sp) +8002b7e8: 03a0f021 move s8,sp +8002b7ec: 00801021 move v0,a0 +8002b7f0: a3c20008 sb v0,8(s8) + prfont_bl = f; +8002b7f4: 3c028004 lui v0,0x8004 +8002b7f8: 93c30008 lbu v1,8(s8) +8002b7fc: 00000000 nop +8002b800: a043255e sb v1,9566(v0) + return PRFONT_COLOR; +8002b804: 24020020 li v0,32 +} +8002b808: 03c0e821 move sp,s8 +8002b80c: 8fbe0004 lw s8,4(sp) +8002b810: 27bd0008 addiu sp,sp,8 +8002b814: 03e00008 jr ra +8002b818: 00000000 nop + +8002b81c <gs_calculate_scaled_size>: +static void gs_internal_vector_rotate(int x_a, int y_a, int z_a, double *v, double *n); + +static char gpu_stringbuf[512]; + +int gs_calculate_scaled_size(int size, int scale) +{ +8002b81c: 27bdfff8 addiu sp,sp,-8 +8002b820: afbe0004 sw s8,4(sp) +8002b824: 03a0f021 move s8,sp +8002b828: afc40008 sw a0,8(s8) +8002b82c: afc5000c sw a1,12(s8) + if(scale > 8) +8002b830: 8fc2000c lw v0,12(s8) +8002b834: 00000000 nop +8002b838: 28420009 slti v0,v0,9 +8002b83c: 1440000c bnez v0,8002b870 <gs_calculate_scaled_size+0x54> +8002b840: 00000000 nop + return (size * scale) / SCALE_ONE; +8002b844: 8fc30008 lw v1,8(s8) +8002b848: 8fc2000c lw v0,12(s8) +8002b84c: 00000000 nop +8002b850: 00620018 mult v1,v0 +8002b854: 00001012 mflo v0 +8002b858: 04410002 bgez v0,8002b864 <gs_calculate_scaled_size+0x48> +8002b85c: 00000000 nop +8002b860: 24420fff addiu v0,v0,4095 +8002b864: 00021303 sra v0,v0,0xc +8002b868: 1000002f b 8002b928 <gs_calculate_scaled_size+0x10c> +8002b86c: 00000000 nop + else if(scale == 0) +8002b870: 8fc2000c lw v0,12(s8) +8002b874: 00000000 nop +8002b878: 14400004 bnez v0,8002b88c <gs_calculate_scaled_size+0x70> +8002b87c: 00000000 nop + return size; +8002b880: 8fc20008 lw v0,8(s8) +8002b884: 10000028 b 8002b928 <gs_calculate_scaled_size+0x10c> +8002b888: 00000000 nop + else if(scale > 0) +8002b88c: 8fc2000c lw v0,12(s8) +8002b890: 00000000 nop +8002b894: 18400008 blez v0,8002b8b8 <gs_calculate_scaled_size+0x9c> +8002b898: 00000000 nop + return size * scale; +8002b89c: 8fc30008 lw v1,8(s8) +8002b8a0: 8fc2000c lw v0,12(s8) +8002b8a4: 00000000 nop +8002b8a8: 00620018 mult v1,v0 +8002b8ac: 00001012 mflo v0 +8002b8b0: 1000001d b 8002b928 <gs_calculate_scaled_size+0x10c> +8002b8b4: 00000000 nop + else if(scale > -8) +8002b8b8: 8fc2000c lw v0,12(s8) +8002b8bc: 00000000 nop +8002b8c0: 2842fff9 slti v0,v0,-7 +8002b8c4: 1440000d bnez v0,8002b8fc <gs_calculate_scaled_size+0xe0> +8002b8c8: 00000000 nop + return size / (scale * -1); +8002b8cc: 8fc2000c lw v0,12(s8) +8002b8d0: 00000000 nop +8002b8d4: 00021023 negu v0,v0 +8002b8d8: 8fc30008 lw v1,8(s8) +8002b8dc: 00000000 nop +8002b8e0: 14400002 bnez v0,8002b8ec <gs_calculate_scaled_size+0xd0> +8002b8e4: 0062001a div zero,v1,v0 +8002b8e8: 0007000d break 0x7 +8002b8ec: 00001010 mfhi v0 +8002b8f0: 00001012 mflo v0 +8002b8f4: 1000000c b 8002b928 <gs_calculate_scaled_size+0x10c> +8002b8f8: 00000000 nop + + return (size * SCALE_ONE) / -scale; +8002b8fc: 8fc20008 lw v0,8(s8) +8002b900: 00000000 nop +8002b904: 00021b00 sll v1,v0,0xc +8002b908: 8fc2000c lw v0,12(s8) +8002b90c: 00000000 nop +8002b910: 00021023 negu v0,v0 +8002b914: 14400002 bnez v0,8002b920 <gs_calculate_scaled_size+0x104> +8002b918: 0062001a div zero,v1,v0 +8002b91c: 0007000d break 0x7 +8002b920: 00001010 mfhi v0 +8002b924: 00001012 mflo v0 +} +8002b928: 03c0e821 move sp,s8 +8002b92c: 8fbe0004 lw s8,4(sp) +8002b930: 27bd0008 addiu sp,sp,8 +8002b934: 03e00008 jr ra +8002b938: 00000000 nop + +8002b93c <GsSetList>: + +void GsSetList(unsigned int *listptr) +{ +8002b93c: 27bdfff8 addiu sp,sp,-8 +8002b940: afbe0004 sw s8,4(sp) +8002b944: 03a0f021 move s8,sp +8002b948: afc40008 sw a0,8(s8) + linked_list = listptr; +8002b94c: 3c028007 lui v0,0x8007 +8002b950: 8fc30008 lw v1,8(s8) +8002b954: 00000000 nop +8002b958: ac431cd4 sw v1,7380(v0) + linked_list_pos = 0; +8002b95c: 3c028007 lui v0,0x8007 +8002b960: ac401cd8 sw zero,7384(v0) +} +8002b964: 00000000 nop +8002b968: 03c0e821 move sp,s8 +8002b96c: 8fbe0004 lw s8,4(sp) +8002b970: 27bd0008 addiu sp,sp,8 +8002b974: 03e00008 jr ra +8002b978: 00000000 nop + +8002b97c <GsDrawList>: + +void GsDrawList() +{ +8002b97c: 27bdffe8 addiu sp,sp,-24 +8002b980: afbf0014 sw ra,20(sp) +8002b984: afbe0010 sw s8,16(sp) +8002b988: 03a0f021 move s8,sp + if(PSX_GetInitFlags() & PSX_INIT_NOBIOS) +8002b98c: 0c00d4c4 jal 80035310 <PSX_GetInitFlags> +8002b990: 00000000 nop +8002b994: 30420004 andi v0,v0,0x4 +8002b998: 10400005 beqz v0,8002b9b0 <GsDrawList+0x34> +8002b99c: 00000000 nop + { +// DMA is unreliable right now, use PIO. + GsDrawListPIO(); +8002b9a0: 0c00aeaa jal 8002baa8 <GsDrawListPIO> +8002b9a4: 00000000 nop + return; +8002b9a8: 10000039 b 8002ba90 <GsDrawList+0x114> +8002b9ac: 00000000 nop + } + + //int x = 0; + + /* Put a terminator, so the link listed ends. */ + linked_list[linked_list_pos] = 0x00ffffff; +8002b9b0: 3c028007 lui v0,0x8007 +8002b9b4: 8c431cd4 lw v1,7380(v0) +8002b9b8: 3c028007 lui v0,0x8007 +8002b9bc: 8c421cd8 lw v0,7384(v0) +8002b9c0: 00000000 nop +8002b9c4: 00021080 sll v0,v0,0x2 +8002b9c8: 00621021 addu v0,v1,v0 +8002b9cc: 3c0300ff lui v1,0xff +8002b9d0: 3463ffff ori v1,v1,0xffff +8002b9d4: ac430000 sw v1,0(v0) + +// do{printf("linked_list[%d] = %08x\n", x, linked_list[x]);}while(linked_list[x++]!=0xffffff); + + //#warning "Let's hope this works well." + + while(!(GPU_CONTROL_PORT & (1<<0x1a))); /* Wait for the GPU to finish +8002b9d8: 00000000 nop +8002b9dc: 3c021f80 lui v0,0x1f80 +8002b9e0: 34421814 ori v0,v0,0x1814 +8002b9e4: 8c430000 lw v1,0(v0) +8002b9e8: 3c020400 lui v0,0x400 +8002b9ec: 00621024 and v0,v1,v0 +8002b9f0: 1040fffa beqz v0,8002b9dc <GsDrawList+0x60> +8002b9f4: 00000000 nop + * drawing primitives. */ + while(!(GPU_CONTROL_PORT & (1<<0x1c))); /* Wait for the GPU to be free */ +8002b9f8: 00000000 nop +8002b9fc: 3c021f80 lui v0,0x1f80 +8002ba00: 34421814 ori v0,v0,0x1814 +8002ba04: 8c430000 lw v1,0(v0) +8002ba08: 3c021000 lui v0,0x1000 +8002ba0c: 00621024 and v0,v1,v0 +8002ba10: 1040fffa beqz v0,8002b9fc <GsDrawList+0x80> +8002ba14: 00000000 nop + + gpu_ctrl(4, 2); // DMA CPU->GPU mode +8002ba18: 24050002 li a1,2 +8002ba1c: 24040004 li a0,4 +8002ba20: 0c00bb8b jal 8002ee2c <gpu_ctrl> +8002ba24: 00000000 nop + D2_MADR = (unsigned int)linked_list; +8002ba28: 3c021f80 lui v0,0x1f80 +8002ba2c: 344210a0 ori v0,v0,0x10a0 +8002ba30: 3c038007 lui v1,0x8007 +8002ba34: 8c631cd4 lw v1,7380(v1) +8002ba38: 00000000 nop +8002ba3c: ac430000 sw v1,0(v0) + D2_BCR = 0; +8002ba40: 3c021f80 lui v0,0x1f80 +8002ba44: 344210a4 ori v0,v0,0x10a4 +8002ba48: ac400000 sw zero,0(v0) + D2_CHCR = (1<<0xa)|1|(1<<0x18); +8002ba4c: 3c021f80 lui v0,0x1f80 +8002ba50: 344210a8 ori v0,v0,0x10a8 +8002ba54: 3c030100 lui v1,0x100 +8002ba58: 34630401 ori v1,v1,0x401 +8002ba5c: ac430000 sw v1,0(v0) + + linked_list_pos = 0; +8002ba60: 3c028007 lui v0,0x8007 +8002ba64: ac401cd8 sw zero,7384(v0) + + //if(PSX_GetInitFlags() & PSX_INIT_NOBIOS) + // __psxsdk_gpu_dma_finished = 0; + + if(__gs_autowait) +8002ba68: 3c028007 lui v0,0x8007 +8002ba6c: 8c421ce8 lw v0,7400(v0) +8002ba70: 00000000 nop +8002ba74: 10400006 beqz v0,8002ba90 <GsDrawList+0x114> +8002ba78: 00000000 nop + while(GsIsDrawing()); +8002ba7c: 00000000 nop +8002ba80: 0c00bf9f jal 8002fe7c <GsIsDrawing> +8002ba84: 00000000 nop +8002ba88: 1440fffd bnez v0,8002ba80 <GsDrawList+0x104> +8002ba8c: 00000000 nop +} +8002ba90: 03c0e821 move sp,s8 +8002ba94: 8fbf0014 lw ra,20(sp) +8002ba98: 8fbe0010 lw s8,16(sp) +8002ba9c: 27bd0018 addiu sp,sp,24 +8002baa0: 03e00008 jr ra +8002baa4: 00000000 nop + +8002baa8 <GsDrawListPIO>: + +void GsDrawListPIO() +{ +8002baa8: 27bdffd8 addiu sp,sp,-40 +8002baac: afbf0024 sw ra,36(sp) +8002bab0: afbe0020 sw s8,32(sp) +8002bab4: 03a0f021 move s8,sp + //linked_list[linked_list_pos] = 0x00ffffff; + int pos = 0; +8002bab8: afc00010 sw zero,16(s8) + int sz = 0; +8002babc: afc00018 sw zero,24(s8) + int x; + + while(!(GPU_CONTROL_PORT & (1<<0x1c))); +8002bac0: 00000000 nop +8002bac4: 3c021f80 lui v0,0x1f80 +8002bac8: 34421814 ori v0,v0,0x1814 +8002bacc: 8c430000 lw v1,0(v0) +8002bad0: 3c021000 lui v0,0x1000 +8002bad4: 00621024 and v0,v1,v0 +8002bad8: 1040fffa beqz v0,8002bac4 <GsDrawListPIO+0x1c> +8002badc: 00000000 nop + // Disable DMA + GPU_CONTROL_PORT = 0x04000000; +8002bae0: 3c021f80 lui v0,0x1f80 +8002bae4: 34421814 ori v0,v0,0x1814 +8002bae8: 3c030400 lui v1,0x400 +8002baec: ac430000 sw v1,0(v0) + + + while(pos < linked_list_pos) +8002baf0: 10000033 b 8002bbc0 <GsDrawListPIO+0x118> +8002baf4: 00000000 nop + { + while(!(GPU_CONTROL_PORT & (1<<0x1c))); +8002baf8: 00000000 nop +8002bafc: 3c021f80 lui v0,0x1f80 +8002bb00: 34421814 ori v0,v0,0x1814 +8002bb04: 8c430000 lw v1,0(v0) +8002bb08: 3c021000 lui v0,0x1000 +8002bb0c: 00621024 and v0,v1,v0 +8002bb10: 1040fffa beqz v0,8002bafc <GsDrawListPIO+0x54> +8002bb14: 00000000 nop + + GPU_DATA_PORT = 0x01000000; // Reset data port +8002bb18: 3c021f80 lui v0,0x1f80 +8002bb1c: 34421810 ori v0,v0,0x1810 +8002bb20: 3c030100 lui v1,0x100 +8002bb24: ac430000 sw v1,0(v0) + + sz = linked_list[pos++] >> 24; +8002bb28: 3c028007 lui v0,0x8007 +8002bb2c: 8c431cd4 lw v1,7380(v0) +8002bb30: 8fc20010 lw v0,16(s8) +8002bb34: 00000000 nop +8002bb38: 24440001 addiu a0,v0,1 +8002bb3c: afc40010 sw a0,16(s8) +8002bb40: 00021080 sll v0,v0,0x2 +8002bb44: 00621021 addu v0,v1,v0 +8002bb48: 8c420000 lw v0,0(v0) +8002bb4c: 00000000 nop +8002bb50: 00021602 srl v0,v0,0x18 +8002bb54: afc20018 sw v0,24(s8) + + for(x = 0; x < sz; x++) +8002bb58: afc00014 sw zero,20(s8) +8002bb5c: 10000012 b 8002bba8 <GsDrawListPIO+0x100> +8002bb60: 00000000 nop + GPU_DATA_PORT = linked_list[pos++]; +8002bb64: 3c021f80 lui v0,0x1f80 +8002bb68: 34431810 ori v1,v0,0x1810 +8002bb6c: 3c028007 lui v0,0x8007 +8002bb70: 8c441cd4 lw a0,7380(v0) +8002bb74: 8fc20010 lw v0,16(s8) +8002bb78: 00000000 nop +8002bb7c: 24450001 addiu a1,v0,1 +8002bb80: afc50010 sw a1,16(s8) +8002bb84: 00021080 sll v0,v0,0x2 +8002bb88: 00821021 addu v0,a0,v0 +8002bb8c: 8c420000 lw v0,0(v0) +8002bb90: 00000000 nop +8002bb94: ac620000 sw v0,0(v1) + + GPU_DATA_PORT = 0x01000000; // Reset data port + + sz = linked_list[pos++] >> 24; + + for(x = 0; x < sz; x++) +8002bb98: 8fc20014 lw v0,20(s8) +8002bb9c: 00000000 nop +8002bba0: 24420001 addiu v0,v0,1 +8002bba4: afc20014 sw v0,20(s8) +8002bba8: 8fc30014 lw v1,20(s8) +8002bbac: 8fc20018 lw v0,24(s8) +8002bbb0: 00000000 nop +8002bbb4: 0062102a slt v0,v1,v0 +8002bbb8: 1440ffea bnez v0,8002bb64 <GsDrawListPIO+0xbc> +8002bbbc: 00000000 nop + while(!(GPU_CONTROL_PORT & (1<<0x1c))); + // Disable DMA + GPU_CONTROL_PORT = 0x04000000; + + + while(pos < linked_list_pos) +8002bbc0: 8fc30010 lw v1,16(s8) +8002bbc4: 3c028007 lui v0,0x8007 +8002bbc8: 8c421cd8 lw v0,7384(v0) +8002bbcc: 00000000 nop +8002bbd0: 0062102b sltu v0,v1,v0 +8002bbd4: 1440ffc8 bnez v0,8002baf8 <GsDrawListPIO+0x50> +8002bbd8: 00000000 nop + + for(x = 0; x < sz; x++) + GPU_DATA_PORT = linked_list[pos++]; + } + + linked_list_pos = 0; +8002bbdc: 3c028007 lui v0,0x8007 +8002bbe0: ac401cd8 sw zero,7384(v0) +// GPU_DATA_PORT = 0xE6000000; // Disable masking stuff +// gpu_data_ctrl(2, ((b&0xff)<<16)|((g&0xff)<<8)|r); +// GPU_DATA_PORT = (y<<16)|x; +// GPU_DATA_PORT = (h<<16)|w; + if(__gs_autowait) +8002bbe4: 3c028007 lui v0,0x8007 +8002bbe8: 8c421ce8 lw v0,7400(v0) +8002bbec: 00000000 nop +8002bbf0: 10400006 beqz v0,8002bc0c <GsDrawListPIO+0x164> +8002bbf4: 00000000 nop + while(GsIsDrawing()); +8002bbf8: 00000000 nop +8002bbfc: 0c00bf9f jal 8002fe7c <GsIsDrawing> +8002bc00: 00000000 nop +8002bc04: 1440fffd bnez v0,8002bbfc <GsDrawListPIO+0x154> +8002bc08: 00000000 nop +} +8002bc0c: 00000000 nop +8002bc10: 03c0e821 move sp,s8 +8002bc14: 8fbf0024 lw ra,36(sp) +8002bc18: 8fbe0020 lw s8,32(sp) +8002bc1c: 27bd0028 addiu sp,sp,40 +8002bc20: 03e00008 jr ra +8002bc24: 00000000 nop + +8002bc28 <GsSortPoly3>: + +void GsSortPoly3(GsPoly3 *poly3) +{ +8002bc28: 27bdffd8 addiu sp,sp,-40 +8002bc2c: afbf0024 sw ra,36(sp) +8002bc30: afbe0020 sw s8,32(sp) +8002bc34: 03a0f021 move s8,sp +8002bc38: afc40028 sw a0,40(s8) + int orig_pos = linked_list_pos; +8002bc3c: 3c028007 lui v0,0x8007 +8002bc40: 8c421cd8 lw v0,7384(v0) +8002bc44: 00000000 nop +8002bc48: afc20014 sw v0,20(s8) + int x; + unsigned char pkt = 0x20; +8002bc4c: 24020020 li v0,32 +8002bc50: a3c2001c sb v0,28(s8) + unsigned int md; + + md = setup_attribs(0, poly3->attribute, &pkt); +8002bc54: 8fc20028 lw v0,40(s8) +8002bc58: 00000000 nop +8002bc5c: 8c420010 lw v0,16(v0) +8002bc60: 27c3001c addiu v1,s8,28 +8002bc64: 00603021 move a2,v1 +8002bc68: 00402821 move a1,v0 +8002bc6c: 00002021 move a0,zero +8002bc70: 0c00bbd0 jal 8002ef40 <setup_attribs> +8002bc74: 00000000 nop +8002bc78: afc20018 sw v0,24(s8) + + linked_list[linked_list_pos++] = 0x05000000; +8002bc7c: 3c028007 lui v0,0x8007 +8002bc80: 8c431cd4 lw v1,7380(v0) +8002bc84: 3c028007 lui v0,0x8007 +8002bc88: 8c421cd8 lw v0,7384(v0) +8002bc8c: 00000000 nop +8002bc90: 24450001 addiu a1,v0,1 +8002bc94: 3c048007 lui a0,0x8007 +8002bc98: ac851cd8 sw a1,7384(a0) +8002bc9c: 00021080 sll v0,v0,0x2 +8002bca0: 00621021 addu v0,v1,v0 +8002bca4: 3c030500 lui v1,0x500 +8002bca8: ac430000 sw v1,0(v0) + linked_list[linked_list_pos++] = md; +8002bcac: 3c028007 lui v0,0x8007 +8002bcb0: 8c431cd4 lw v1,7380(v0) +8002bcb4: 3c028007 lui v0,0x8007 +8002bcb8: 8c421cd8 lw v0,7384(v0) +8002bcbc: 00000000 nop +8002bcc0: 24450001 addiu a1,v0,1 +8002bcc4: 3c048007 lui a0,0x8007 +8002bcc8: ac851cd8 sw a1,7384(a0) +8002bccc: 00021080 sll v0,v0,0x2 +8002bcd0: 00621021 addu v0,v1,v0 +8002bcd4: 8fc30018 lw v1,24(s8) +8002bcd8: 00000000 nop +8002bcdc: ac430000 sw v1,0(v0) + linked_list[linked_list_pos++] = (pkt<<24)|(poly3->b<<16)|(poly3->g<<8)|(poly3->r); +8002bce0: 3c028007 lui v0,0x8007 +8002bce4: 8c431cd4 lw v1,7380(v0) +8002bce8: 3c028007 lui v0,0x8007 +8002bcec: 8c421cd8 lw v0,7384(v0) +8002bcf0: 00000000 nop +8002bcf4: 24450001 addiu a1,v0,1 +8002bcf8: 3c048007 lui a0,0x8007 +8002bcfc: ac851cd8 sw a1,7384(a0) +8002bd00: 00021080 sll v0,v0,0x2 +8002bd04: 00621021 addu v0,v1,v0 +8002bd08: 93c3001c lbu v1,28(s8) +8002bd0c: 00000000 nop +8002bd10: 00032600 sll a0,v1,0x18 +8002bd14: 8fc30028 lw v1,40(s8) +8002bd18: 00000000 nop +8002bd1c: 90630002 lbu v1,2(v1) +8002bd20: 00000000 nop +8002bd24: 00031c00 sll v1,v1,0x10 +8002bd28: 00832025 or a0,a0,v1 +8002bd2c: 8fc30028 lw v1,40(s8) +8002bd30: 00000000 nop +8002bd34: 90630001 lbu v1,1(v1) +8002bd38: 00000000 nop +8002bd3c: 00031a00 sll v1,v1,0x8 +8002bd40: 00831825 or v1,a0,v1 +8002bd44: 8fc40028 lw a0,40(s8) +8002bd48: 00000000 nop +8002bd4c: 90840000 lbu a0,0(a0) +8002bd50: 00000000 nop +8002bd54: 00641825 or v1,v1,a0 +8002bd58: ac430000 sw v1,0(v0) + + for(x = 0; x < 3; x++) +8002bd5c: afc00010 sw zero,16(s8) +8002bd60: 10000025 b 8002bdf8 <GsSortPoly3+0x1d0> +8002bd64: 00000000 nop + linked_list[linked_list_pos++] = ((poly3->y[x]&0x7ff)<<16)|(poly3->x[x]&0x7ff); +8002bd68: 3c028007 lui v0,0x8007 +8002bd6c: 8c431cd4 lw v1,7380(v0) +8002bd70: 3c028007 lui v0,0x8007 +8002bd74: 8c421cd8 lw v0,7384(v0) +8002bd78: 00000000 nop +8002bd7c: 24450001 addiu a1,v0,1 +8002bd80: 3c048007 lui a0,0x8007 +8002bd84: ac851cd8 sw a1,7384(a0) +8002bd88: 00021080 sll v0,v0,0x2 +8002bd8c: 00621821 addu v1,v1,v0 +8002bd90: 8fc40028 lw a0,40(s8) +8002bd94: 8fc20010 lw v0,16(s8) +8002bd98: 00000000 nop +8002bd9c: 24420004 addiu v0,v0,4 +8002bda0: 00021040 sll v0,v0,0x1 +8002bda4: 00821021 addu v0,a0,v0 +8002bda8: 84420002 lh v0,2(v0) +8002bdac: 00000000 nop +8002bdb0: 3042ffff andi v0,v0,0xffff +8002bdb4: 304207ff andi v0,v0,0x7ff +8002bdb8: 00022400 sll a0,v0,0x10 +8002bdbc: 8fc50028 lw a1,40(s8) +8002bdc0: 8fc20010 lw v0,16(s8) +8002bdc4: 00000000 nop +8002bdc8: 00021040 sll v0,v0,0x1 +8002bdcc: 00a21021 addu v0,a1,v0 +8002bdd0: 84420004 lh v0,4(v0) +8002bdd4: 00000000 nop +8002bdd8: 3042ffff andi v0,v0,0xffff +8002bddc: 304207ff andi v0,v0,0x7ff +8002bde0: 00821025 or v0,a0,v0 +8002bde4: ac620000 sw v0,0(v1) + + linked_list[linked_list_pos++] = 0x05000000; + linked_list[linked_list_pos++] = md; + linked_list[linked_list_pos++] = (pkt<<24)|(poly3->b<<16)|(poly3->g<<8)|(poly3->r); + + for(x = 0; x < 3; x++) +8002bde8: 8fc20010 lw v0,16(s8) +8002bdec: 00000000 nop +8002bdf0: 24420001 addiu v0,v0,1 +8002bdf4: afc20010 sw v0,16(s8) +8002bdf8: 8fc20010 lw v0,16(s8) +8002bdfc: 00000000 nop +8002be00: 28420003 slti v0,v0,3 +8002be04: 1440ffd8 bnez v0,8002bd68 <GsSortPoly3+0x140> +8002be08: 00000000 nop + linked_list[linked_list_pos++] = ((poly3->y[x]&0x7ff)<<16)|(poly3->x[x]&0x7ff); + + linked_list[orig_pos] |= ((unsigned int)&linked_list[linked_list_pos]) & 0xffffff; +8002be0c: 3c028007 lui v0,0x8007 +8002be10: 8c431cd4 lw v1,7380(v0) +8002be14: 8fc20014 lw v0,20(s8) +8002be18: 00000000 nop +8002be1c: 00021080 sll v0,v0,0x2 +8002be20: 00621021 addu v0,v1,v0 +8002be24: 3c038007 lui v1,0x8007 +8002be28: 8c641cd4 lw a0,7380(v1) +8002be2c: 8fc30014 lw v1,20(s8) +8002be30: 00000000 nop +8002be34: 00031880 sll v1,v1,0x2 +8002be38: 00831821 addu v1,a0,v1 +8002be3c: 8c640000 lw a0,0(v1) +8002be40: 3c038007 lui v1,0x8007 +8002be44: 8c651cd4 lw a1,7380(v1) +8002be48: 3c038007 lui v1,0x8007 +8002be4c: 8c631cd8 lw v1,7384(v1) +8002be50: 00000000 nop +8002be54: 00031880 sll v1,v1,0x2 +8002be58: 00a31821 addu v1,a1,v1 +8002be5c: 00602821 move a1,v1 +8002be60: 3c0300ff lui v1,0xff +8002be64: 3463ffff ori v1,v1,0xffff +8002be68: 00a31824 and v1,a1,v1 +8002be6c: 00831825 or v1,a0,v1 +8002be70: ac430000 sw v1,0(v0) +} +8002be74: 00000000 nop +8002be78: 03c0e821 move sp,s8 +8002be7c: 8fbf0024 lw ra,36(sp) +8002be80: 8fbe0020 lw s8,32(sp) +8002be84: 27bd0028 addiu sp,sp,40 +8002be88: 03e00008 jr ra +8002be8c: 00000000 nop + +8002be90 <GsSortPoly4>: + +void GsSortPoly4(GsPoly4 *poly4) +{ +8002be90: 27bdffd8 addiu sp,sp,-40 +8002be94: afbf0024 sw ra,36(sp) +8002be98: afbe0020 sw s8,32(sp) +8002be9c: 03a0f021 move s8,sp +8002bea0: afc40028 sw a0,40(s8) + int orig_pos = linked_list_pos; +8002bea4: 3c028007 lui v0,0x8007 +8002bea8: 8c421cd8 lw v0,7384(v0) +8002beac: 00000000 nop +8002beb0: afc20014 sw v0,20(s8) + int x; + unsigned char pkt = 0x28; +8002beb4: 24020028 li v0,40 +8002beb8: a3c2001c sb v0,28(s8) + unsigned int md; + + md = setup_attribs(0, poly4->attribute, &pkt); +8002bebc: 8fc20028 lw v0,40(s8) +8002bec0: 00000000 nop +8002bec4: 8c420014 lw v0,20(v0) +8002bec8: 27c3001c addiu v1,s8,28 +8002becc: 00603021 move a2,v1 +8002bed0: 00402821 move a1,v0 +8002bed4: 00002021 move a0,zero +8002bed8: 0c00bbd0 jal 8002ef40 <setup_attribs> +8002bedc: 00000000 nop +8002bee0: afc20018 sw v0,24(s8) + + linked_list[linked_list_pos++] = 0x06000000; +8002bee4: 3c028007 lui v0,0x8007 +8002bee8: 8c431cd4 lw v1,7380(v0) +8002beec: 3c028007 lui v0,0x8007 +8002bef0: 8c421cd8 lw v0,7384(v0) +8002bef4: 00000000 nop +8002bef8: 24450001 addiu a1,v0,1 +8002befc: 3c048007 lui a0,0x8007 +8002bf00: ac851cd8 sw a1,7384(a0) +8002bf04: 00021080 sll v0,v0,0x2 +8002bf08: 00621021 addu v0,v1,v0 +8002bf0c: 3c030600 lui v1,0x600 +8002bf10: ac430000 sw v1,0(v0) + linked_list[linked_list_pos++] = md; +8002bf14: 3c028007 lui v0,0x8007 +8002bf18: 8c431cd4 lw v1,7380(v0) +8002bf1c: 3c028007 lui v0,0x8007 +8002bf20: 8c421cd8 lw v0,7384(v0) +8002bf24: 00000000 nop +8002bf28: 24450001 addiu a1,v0,1 +8002bf2c: 3c048007 lui a0,0x8007 +8002bf30: ac851cd8 sw a1,7384(a0) +8002bf34: 00021080 sll v0,v0,0x2 +8002bf38: 00621021 addu v0,v1,v0 +8002bf3c: 8fc30018 lw v1,24(s8) +8002bf40: 00000000 nop +8002bf44: ac430000 sw v1,0(v0) + linked_list[linked_list_pos++] = (pkt<<24)|(poly4->b<<16)|(poly4->g<<8)|(poly4->r); +8002bf48: 3c028007 lui v0,0x8007 +8002bf4c: 8c431cd4 lw v1,7380(v0) +8002bf50: 3c028007 lui v0,0x8007 +8002bf54: 8c421cd8 lw v0,7384(v0) +8002bf58: 00000000 nop +8002bf5c: 24450001 addiu a1,v0,1 +8002bf60: 3c048007 lui a0,0x8007 +8002bf64: ac851cd8 sw a1,7384(a0) +8002bf68: 00021080 sll v0,v0,0x2 +8002bf6c: 00621021 addu v0,v1,v0 +8002bf70: 93c3001c lbu v1,28(s8) +8002bf74: 00000000 nop +8002bf78: 00032600 sll a0,v1,0x18 +8002bf7c: 8fc30028 lw v1,40(s8) +8002bf80: 00000000 nop +8002bf84: 90630002 lbu v1,2(v1) +8002bf88: 00000000 nop +8002bf8c: 00031c00 sll v1,v1,0x10 +8002bf90: 00832025 or a0,a0,v1 +8002bf94: 8fc30028 lw v1,40(s8) +8002bf98: 00000000 nop +8002bf9c: 90630001 lbu v1,1(v1) +8002bfa0: 00000000 nop +8002bfa4: 00031a00 sll v1,v1,0x8 +8002bfa8: 00831825 or v1,a0,v1 +8002bfac: 8fc40028 lw a0,40(s8) +8002bfb0: 00000000 nop +8002bfb4: 90840000 lbu a0,0(a0) +8002bfb8: 00000000 nop +8002bfbc: 00641825 or v1,v1,a0 +8002bfc0: ac430000 sw v1,0(v0) + + for(x = 0; x < 4; x++) +8002bfc4: afc00010 sw zero,16(s8) +8002bfc8: 10000025 b 8002c060 <GsSortPoly4+0x1d0> +8002bfcc: 00000000 nop + linked_list[linked_list_pos++] = ((poly4->y[x]&0x7ff)<<16)|(poly4->x[x]&0x7ff); +8002bfd0: 3c028007 lui v0,0x8007 +8002bfd4: 8c431cd4 lw v1,7380(v0) +8002bfd8: 3c028007 lui v0,0x8007 +8002bfdc: 8c421cd8 lw v0,7384(v0) +8002bfe0: 00000000 nop +8002bfe4: 24450001 addiu a1,v0,1 +8002bfe8: 3c048007 lui a0,0x8007 +8002bfec: ac851cd8 sw a1,7384(a0) +8002bff0: 00021080 sll v0,v0,0x2 +8002bff4: 00621821 addu v1,v1,v0 +8002bff8: 8fc40028 lw a0,40(s8) +8002bffc: 8fc20010 lw v0,16(s8) +8002c000: 00000000 nop +8002c004: 24420004 addiu v0,v0,4 +8002c008: 00021040 sll v0,v0,0x1 +8002c00c: 00821021 addu v0,a0,v0 +8002c010: 84420004 lh v0,4(v0) +8002c014: 00000000 nop +8002c018: 3042ffff andi v0,v0,0xffff +8002c01c: 304207ff andi v0,v0,0x7ff +8002c020: 00022400 sll a0,v0,0x10 +8002c024: 8fc50028 lw a1,40(s8) +8002c028: 8fc20010 lw v0,16(s8) +8002c02c: 00000000 nop +8002c030: 00021040 sll v0,v0,0x1 +8002c034: 00a21021 addu v0,a1,v0 +8002c038: 84420004 lh v0,4(v0) +8002c03c: 00000000 nop +8002c040: 3042ffff andi v0,v0,0xffff +8002c044: 304207ff andi v0,v0,0x7ff +8002c048: 00821025 or v0,a0,v0 +8002c04c: ac620000 sw v0,0(v1) + + linked_list[linked_list_pos++] = 0x06000000; + linked_list[linked_list_pos++] = md; + linked_list[linked_list_pos++] = (pkt<<24)|(poly4->b<<16)|(poly4->g<<8)|(poly4->r); + + for(x = 0; x < 4; x++) +8002c050: 8fc20010 lw v0,16(s8) +8002c054: 00000000 nop +8002c058: 24420001 addiu v0,v0,1 +8002c05c: afc20010 sw v0,16(s8) +8002c060: 8fc20010 lw v0,16(s8) +8002c064: 00000000 nop +8002c068: 28420004 slti v0,v0,4 +8002c06c: 1440ffd8 bnez v0,8002bfd0 <GsSortPoly4+0x140> +8002c070: 00000000 nop + linked_list[linked_list_pos++] = ((poly4->y[x]&0x7ff)<<16)|(poly4->x[x]&0x7ff); + + linked_list[orig_pos] |= ((unsigned int)&linked_list[linked_list_pos]) & 0xffffff; +8002c074: 3c028007 lui v0,0x8007 +8002c078: 8c431cd4 lw v1,7380(v0) +8002c07c: 8fc20014 lw v0,20(s8) +8002c080: 00000000 nop +8002c084: 00021080 sll v0,v0,0x2 +8002c088: 00621021 addu v0,v1,v0 +8002c08c: 3c038007 lui v1,0x8007 +8002c090: 8c641cd4 lw a0,7380(v1) +8002c094: 8fc30014 lw v1,20(s8) +8002c098: 00000000 nop +8002c09c: 00031880 sll v1,v1,0x2 +8002c0a0: 00831821 addu v1,a0,v1 +8002c0a4: 8c640000 lw a0,0(v1) +8002c0a8: 3c038007 lui v1,0x8007 +8002c0ac: 8c651cd4 lw a1,7380(v1) +8002c0b0: 3c038007 lui v1,0x8007 +8002c0b4: 8c631cd8 lw v1,7384(v1) +8002c0b8: 00000000 nop +8002c0bc: 00031880 sll v1,v1,0x2 +8002c0c0: 00a31821 addu v1,a1,v1 +8002c0c4: 00602821 move a1,v1 +8002c0c8: 3c0300ff lui v1,0xff +8002c0cc: 3463ffff ori v1,v1,0xffff +8002c0d0: 00a31824 and v1,a1,v1 +8002c0d4: 00831825 or v1,a0,v1 +8002c0d8: ac430000 sw v1,0(v0) +} +8002c0dc: 00000000 nop +8002c0e0: 03c0e821 move sp,s8 +8002c0e4: 8fbf0024 lw ra,36(sp) +8002c0e8: 8fbe0020 lw s8,32(sp) +8002c0ec: 27bd0028 addiu sp,sp,40 +8002c0f0: 03e00008 jr ra +8002c0f4: 00000000 nop + +8002c0f8 <GsSortGPoly3>: + +void GsSortGPoly3(GsGPoly3 *poly3) +{ +8002c0f8: 27bdffd8 addiu sp,sp,-40 +8002c0fc: afbf0024 sw ra,36(sp) +8002c100: afbe0020 sw s8,32(sp) +8002c104: 03a0f021 move s8,sp +8002c108: afc40028 sw a0,40(s8) + // PKT 0x30 + + int orig_pos = linked_list_pos; +8002c10c: 3c028007 lui v0,0x8007 +8002c110: 8c421cd8 lw v0,7384(v0) +8002c114: 00000000 nop +8002c118: afc20014 sw v0,20(s8) + int x; + unsigned char pkt = 0x30; +8002c11c: 24020030 li v0,48 +8002c120: a3c2001c sb v0,28(s8) + unsigned int md; + + md = setup_attribs(0, poly3->attribute, &pkt); +8002c124: 8fc20028 lw v0,40(s8) +8002c128: 00000000 nop +8002c12c: 8c420018 lw v0,24(v0) +8002c130: 27c3001c addiu v1,s8,28 +8002c134: 00603021 move a2,v1 +8002c138: 00402821 move a1,v0 +8002c13c: 00002021 move a0,zero +8002c140: 0c00bbd0 jal 8002ef40 <setup_attribs> +8002c144: 00000000 nop +8002c148: afc20018 sw v0,24(s8) + + linked_list[linked_list_pos++] = 0x07000000; +8002c14c: 3c028007 lui v0,0x8007 +8002c150: 8c431cd4 lw v1,7380(v0) +8002c154: 3c028007 lui v0,0x8007 +8002c158: 8c421cd8 lw v0,7384(v0) +8002c15c: 00000000 nop +8002c160: 24450001 addiu a1,v0,1 +8002c164: 3c048007 lui a0,0x8007 +8002c168: ac851cd8 sw a1,7384(a0) +8002c16c: 00021080 sll v0,v0,0x2 +8002c170: 00621021 addu v0,v1,v0 +8002c174: 3c030700 lui v1,0x700 +8002c178: ac430000 sw v1,0(v0) + linked_list[linked_list_pos++] = md; +8002c17c: 3c028007 lui v0,0x8007 +8002c180: 8c431cd4 lw v1,7380(v0) +8002c184: 3c028007 lui v0,0x8007 +8002c188: 8c421cd8 lw v0,7384(v0) +8002c18c: 00000000 nop +8002c190: 24450001 addiu a1,v0,1 +8002c194: 3c048007 lui a0,0x8007 +8002c198: ac851cd8 sw a1,7384(a0) +8002c19c: 00021080 sll v0,v0,0x2 +8002c1a0: 00621021 addu v0,v1,v0 +8002c1a4: 8fc30018 lw v1,24(s8) +8002c1a8: 00000000 nop +8002c1ac: ac430000 sw v1,0(v0) + + for(x = 0; x < 3; x++) +8002c1b0: afc00010 sw zero,16(s8) +8002c1b4: 10000052 b 8002c300 <GsSortGPoly3+0x208> +8002c1b8: 00000000 nop + { + linked_list[linked_list_pos++] = (poly3->b[x]<<16)|(poly3->g[x]<<8)|(poly3->r[x]) | ((x == 0)?(pkt<<24):0); +8002c1bc: 3c028007 lui v0,0x8007 +8002c1c0: 8c431cd4 lw v1,7380(v0) +8002c1c4: 3c028007 lui v0,0x8007 +8002c1c8: 8c421cd8 lw v0,7384(v0) +8002c1cc: 00000000 nop +8002c1d0: 24450001 addiu a1,v0,1 +8002c1d4: 3c048007 lui a0,0x8007 +8002c1d8: ac851cd8 sw a1,7384(a0) +8002c1dc: 00021080 sll v0,v0,0x2 +8002c1e0: 00621821 addu v1,v1,v0 +8002c1e4: 8fc40028 lw a0,40(s8) +8002c1e8: 8fc20010 lw v0,16(s8) +8002c1ec: 00000000 nop +8002c1f0: 00821021 addu v0,a0,v0 +8002c1f4: 90420006 lbu v0,6(v0) +8002c1f8: 00000000 nop +8002c1fc: 00022400 sll a0,v0,0x10 +8002c200: 8fc50028 lw a1,40(s8) +8002c204: 8fc20010 lw v0,16(s8) +8002c208: 00000000 nop +8002c20c: 00a21021 addu v0,a1,v0 +8002c210: 90420003 lbu v0,3(v0) +8002c214: 00000000 nop +8002c218: 00021200 sll v0,v0,0x8 +8002c21c: 00821025 or v0,a0,v0 +8002c220: 8fc50028 lw a1,40(s8) +8002c224: 8fc40010 lw a0,16(s8) +8002c228: 00000000 nop +8002c22c: 00a42021 addu a0,a1,a0 +8002c230: 90840000 lbu a0,0(a0) +8002c234: 00000000 nop +8002c238: 00442025 or a0,v0,a0 +8002c23c: 8fc20010 lw v0,16(s8) +8002c240: 00000000 nop +8002c244: 14400006 bnez v0,8002c260 <GsSortGPoly3+0x168> +8002c248: 00000000 nop +8002c24c: 93c2001c lbu v0,28(s8) +8002c250: 00000000 nop +8002c254: 00021600 sll v0,v0,0x18 +8002c258: 10000002 b 8002c264 <GsSortGPoly3+0x16c> +8002c25c: 00000000 nop +8002c260: 00001021 move v0,zero +8002c264: 00821025 or v0,a0,v0 +8002c268: ac620000 sw v0,0(v1) + linked_list[linked_list_pos++] = ((poly3->y[x]&0x7ff)<<16)|(poly3->x[x]&0x7ff); +8002c26c: 3c028007 lui v0,0x8007 +8002c270: 8c431cd4 lw v1,7380(v0) +8002c274: 3c028007 lui v0,0x8007 +8002c278: 8c421cd8 lw v0,7384(v0) +8002c27c: 00000000 nop +8002c280: 24450001 addiu a1,v0,1 +8002c284: 3c048007 lui a0,0x8007 +8002c288: ac851cd8 sw a1,7384(a0) +8002c28c: 00021080 sll v0,v0,0x2 +8002c290: 00621821 addu v1,v1,v0 +8002c294: 8fc40028 lw a0,40(s8) +8002c298: 8fc20010 lw v0,16(s8) +8002c29c: 00000000 nop +8002c2a0: 24420008 addiu v0,v0,8 +8002c2a4: 00021040 sll v0,v0,0x1 +8002c2a8: 00821021 addu v0,a0,v0 +8002c2ac: 84420000 lh v0,0(v0) +8002c2b0: 00000000 nop +8002c2b4: 3042ffff andi v0,v0,0xffff +8002c2b8: 304207ff andi v0,v0,0x7ff +8002c2bc: 00022400 sll a0,v0,0x10 +8002c2c0: 8fc50028 lw a1,40(s8) +8002c2c4: 8fc20010 lw v0,16(s8) +8002c2c8: 00000000 nop +8002c2cc: 24420004 addiu v0,v0,4 +8002c2d0: 00021040 sll v0,v0,0x1 +8002c2d4: 00a21021 addu v0,a1,v0 +8002c2d8: 84420002 lh v0,2(v0) +8002c2dc: 00000000 nop +8002c2e0: 3042ffff andi v0,v0,0xffff +8002c2e4: 304207ff andi v0,v0,0x7ff +8002c2e8: 00821025 or v0,a0,v0 +8002c2ec: ac620000 sw v0,0(v1) + md = setup_attribs(0, poly3->attribute, &pkt); + + linked_list[linked_list_pos++] = 0x07000000; + linked_list[linked_list_pos++] = md; + + for(x = 0; x < 3; x++) +8002c2f0: 8fc20010 lw v0,16(s8) +8002c2f4: 00000000 nop +8002c2f8: 24420001 addiu v0,v0,1 +8002c2fc: afc20010 sw v0,16(s8) +8002c300: 8fc20010 lw v0,16(s8) +8002c304: 00000000 nop +8002c308: 28420003 slti v0,v0,3 +8002c30c: 1440ffab bnez v0,8002c1bc <GsSortGPoly3+0xc4> +8002c310: 00000000 nop + { + linked_list[linked_list_pos++] = (poly3->b[x]<<16)|(poly3->g[x]<<8)|(poly3->r[x]) | ((x == 0)?(pkt<<24):0); + linked_list[linked_list_pos++] = ((poly3->y[x]&0x7ff)<<16)|(poly3->x[x]&0x7ff); + } + + linked_list[orig_pos] |= ((unsigned int)&linked_list[linked_list_pos]) & 0xffffff; +8002c314: 3c028007 lui v0,0x8007 +8002c318: 8c431cd4 lw v1,7380(v0) +8002c31c: 8fc20014 lw v0,20(s8) +8002c320: 00000000 nop +8002c324: 00021080 sll v0,v0,0x2 +8002c328: 00621021 addu v0,v1,v0 +8002c32c: 3c038007 lui v1,0x8007 +8002c330: 8c641cd4 lw a0,7380(v1) +8002c334: 8fc30014 lw v1,20(s8) +8002c338: 00000000 nop +8002c33c: 00031880 sll v1,v1,0x2 +8002c340: 00831821 addu v1,a0,v1 +8002c344: 8c640000 lw a0,0(v1) +8002c348: 3c038007 lui v1,0x8007 +8002c34c: 8c651cd4 lw a1,7380(v1) +8002c350: 3c038007 lui v1,0x8007 +8002c354: 8c631cd8 lw v1,7384(v1) +8002c358: 00000000 nop +8002c35c: 00031880 sll v1,v1,0x2 +8002c360: 00a31821 addu v1,a1,v1 +8002c364: 00602821 move a1,v1 +8002c368: 3c0300ff lui v1,0xff +8002c36c: 3463ffff ori v1,v1,0xffff +8002c370: 00a31824 and v1,a1,v1 +8002c374: 00831825 or v1,a0,v1 +8002c378: ac430000 sw v1,0(v0) +} +8002c37c: 00000000 nop +8002c380: 03c0e821 move sp,s8 +8002c384: 8fbf0024 lw ra,36(sp) +8002c388: 8fbe0020 lw s8,32(sp) +8002c38c: 27bd0028 addiu sp,sp,40 +8002c390: 03e00008 jr ra +8002c394: 00000000 nop + +8002c398 <GsSortGPoly4>: + +void GsSortGPoly4(GsGPoly4 *poly4) +{ +8002c398: 27bdffd8 addiu sp,sp,-40 +8002c39c: afbf0024 sw ra,36(sp) +8002c3a0: afbe0020 sw s8,32(sp) +8002c3a4: 03a0f021 move s8,sp +8002c3a8: afc40028 sw a0,40(s8) + // PKT 0x38 + + int orig_pos = linked_list_pos; +8002c3ac: 3c028007 lui v0,0x8007 +8002c3b0: 8c421cd8 lw v0,7384(v0) +8002c3b4: 00000000 nop +8002c3b8: afc20014 sw v0,20(s8) + int x; + unsigned char pkt = 0x38; +8002c3bc: 24020038 li v0,56 +8002c3c0: a3c2001c sb v0,28(s8) + unsigned int md; + + md = setup_attribs(0, poly4->attribute, &pkt); +8002c3c4: 8fc20028 lw v0,40(s8) +8002c3c8: 00000000 nop +8002c3cc: 8c42001c lw v0,28(v0) +8002c3d0: 27c3001c addiu v1,s8,28 +8002c3d4: 00603021 move a2,v1 +8002c3d8: 00402821 move a1,v0 +8002c3dc: 00002021 move a0,zero +8002c3e0: 0c00bbd0 jal 8002ef40 <setup_attribs> +8002c3e4: 00000000 nop +8002c3e8: afc20018 sw v0,24(s8) + + linked_list[linked_list_pos++] = 0x09000000; +8002c3ec: 3c028007 lui v0,0x8007 +8002c3f0: 8c431cd4 lw v1,7380(v0) +8002c3f4: 3c028007 lui v0,0x8007 +8002c3f8: 8c421cd8 lw v0,7384(v0) +8002c3fc: 00000000 nop +8002c400: 24450001 addiu a1,v0,1 +8002c404: 3c048007 lui a0,0x8007 +8002c408: ac851cd8 sw a1,7384(a0) +8002c40c: 00021080 sll v0,v0,0x2 +8002c410: 00621021 addu v0,v1,v0 +8002c414: 3c030900 lui v1,0x900 +8002c418: ac430000 sw v1,0(v0) + linked_list[linked_list_pos++] = md; +8002c41c: 3c028007 lui v0,0x8007 +8002c420: 8c431cd4 lw v1,7380(v0) +8002c424: 3c028007 lui v0,0x8007 +8002c428: 8c421cd8 lw v0,7384(v0) +8002c42c: 00000000 nop +8002c430: 24450001 addiu a1,v0,1 +8002c434: 3c048007 lui a0,0x8007 +8002c438: ac851cd8 sw a1,7384(a0) +8002c43c: 00021080 sll v0,v0,0x2 +8002c440: 00621021 addu v0,v1,v0 +8002c444: 8fc30018 lw v1,24(s8) +8002c448: 00000000 nop +8002c44c: ac430000 sw v1,0(v0) + + for(x = 0; x < 4; x++) +8002c450: afc00010 sw zero,16(s8) +8002c454: 10000052 b 8002c5a0 <GsSortGPoly4+0x208> +8002c458: 00000000 nop + { + linked_list[linked_list_pos++] = (poly4->b[x]<<16)|(poly4->g[x]<<8)|(poly4->r[x]) | ((x == 0)?(pkt<<24):0); +8002c45c: 3c028007 lui v0,0x8007 +8002c460: 8c431cd4 lw v1,7380(v0) +8002c464: 3c028007 lui v0,0x8007 +8002c468: 8c421cd8 lw v0,7384(v0) +8002c46c: 00000000 nop +8002c470: 24450001 addiu a1,v0,1 +8002c474: 3c048007 lui a0,0x8007 +8002c478: ac851cd8 sw a1,7384(a0) +8002c47c: 00021080 sll v0,v0,0x2 +8002c480: 00621821 addu v1,v1,v0 +8002c484: 8fc40028 lw a0,40(s8) +8002c488: 8fc20010 lw v0,16(s8) +8002c48c: 00000000 nop +8002c490: 00821021 addu v0,a0,v0 +8002c494: 90420008 lbu v0,8(v0) +8002c498: 00000000 nop +8002c49c: 00022400 sll a0,v0,0x10 +8002c4a0: 8fc50028 lw a1,40(s8) +8002c4a4: 8fc20010 lw v0,16(s8) +8002c4a8: 00000000 nop +8002c4ac: 00a21021 addu v0,a1,v0 +8002c4b0: 90420004 lbu v0,4(v0) +8002c4b4: 00000000 nop +8002c4b8: 00021200 sll v0,v0,0x8 +8002c4bc: 00821025 or v0,a0,v0 +8002c4c0: 8fc50028 lw a1,40(s8) +8002c4c4: 8fc40010 lw a0,16(s8) +8002c4c8: 00000000 nop +8002c4cc: 00a42021 addu a0,a1,a0 +8002c4d0: 90840000 lbu a0,0(a0) +8002c4d4: 00000000 nop +8002c4d8: 00442025 or a0,v0,a0 +8002c4dc: 8fc20010 lw v0,16(s8) +8002c4e0: 00000000 nop +8002c4e4: 14400006 bnez v0,8002c500 <GsSortGPoly4+0x168> +8002c4e8: 00000000 nop +8002c4ec: 93c2001c lbu v0,28(s8) +8002c4f0: 00000000 nop +8002c4f4: 00021600 sll v0,v0,0x18 +8002c4f8: 10000002 b 8002c504 <GsSortGPoly4+0x16c> +8002c4fc: 00000000 nop +8002c500: 00001021 move v0,zero +8002c504: 00821025 or v0,a0,v0 +8002c508: ac620000 sw v0,0(v1) + linked_list[linked_list_pos++] = ((poly4->y[x]&0x7ff)<<16)|(poly4->x[x]&0x7ff); +8002c50c: 3c028007 lui v0,0x8007 +8002c510: 8c431cd4 lw v1,7380(v0) +8002c514: 3c028007 lui v0,0x8007 +8002c518: 8c421cd8 lw v0,7384(v0) +8002c51c: 00000000 nop +8002c520: 24450001 addiu a1,v0,1 +8002c524: 3c048007 lui a0,0x8007 +8002c528: ac851cd8 sw a1,7384(a0) +8002c52c: 00021080 sll v0,v0,0x2 +8002c530: 00621821 addu v1,v1,v0 +8002c534: 8fc40028 lw a0,40(s8) +8002c538: 8fc20010 lw v0,16(s8) +8002c53c: 00000000 nop +8002c540: 24420008 addiu v0,v0,8 +8002c544: 00021040 sll v0,v0,0x1 +8002c548: 00821021 addu v0,a0,v0 +8002c54c: 84420004 lh v0,4(v0) +8002c550: 00000000 nop +8002c554: 3042ffff andi v0,v0,0xffff +8002c558: 304207ff andi v0,v0,0x7ff +8002c55c: 00022400 sll a0,v0,0x10 +8002c560: 8fc50028 lw a1,40(s8) +8002c564: 8fc20010 lw v0,16(s8) +8002c568: 00000000 nop +8002c56c: 24420004 addiu v0,v0,4 +8002c570: 00021040 sll v0,v0,0x1 +8002c574: 00a21021 addu v0,a1,v0 +8002c578: 84420004 lh v0,4(v0) +8002c57c: 00000000 nop +8002c580: 3042ffff andi v0,v0,0xffff +8002c584: 304207ff andi v0,v0,0x7ff +8002c588: 00821025 or v0,a0,v0 +8002c58c: ac620000 sw v0,0(v1) + md = setup_attribs(0, poly4->attribute, &pkt); + + linked_list[linked_list_pos++] = 0x09000000; + linked_list[linked_list_pos++] = md; + + for(x = 0; x < 4; x++) +8002c590: 8fc20010 lw v0,16(s8) +8002c594: 00000000 nop +8002c598: 24420001 addiu v0,v0,1 +8002c59c: afc20010 sw v0,16(s8) +8002c5a0: 8fc20010 lw v0,16(s8) +8002c5a4: 00000000 nop +8002c5a8: 28420004 slti v0,v0,4 +8002c5ac: 1440ffab bnez v0,8002c45c <GsSortGPoly4+0xc4> +8002c5b0: 00000000 nop + { + linked_list[linked_list_pos++] = (poly4->b[x]<<16)|(poly4->g[x]<<8)|(poly4->r[x]) | ((x == 0)?(pkt<<24):0); + linked_list[linked_list_pos++] = ((poly4->y[x]&0x7ff)<<16)|(poly4->x[x]&0x7ff); + } + + linked_list[orig_pos] |= ((unsigned int)&linked_list[linked_list_pos]) & 0xffffff; +8002c5b4: 3c028007 lui v0,0x8007 +8002c5b8: 8c431cd4 lw v1,7380(v0) +8002c5bc: 8fc20014 lw v0,20(s8) +8002c5c0: 00000000 nop +8002c5c4: 00021080 sll v0,v0,0x2 +8002c5c8: 00621021 addu v0,v1,v0 +8002c5cc: 3c038007 lui v1,0x8007 +8002c5d0: 8c641cd4 lw a0,7380(v1) +8002c5d4: 8fc30014 lw v1,20(s8) +8002c5d8: 00000000 nop +8002c5dc: 00031880 sll v1,v1,0x2 +8002c5e0: 00831821 addu v1,a0,v1 +8002c5e4: 8c640000 lw a0,0(v1) +8002c5e8: 3c038007 lui v1,0x8007 +8002c5ec: 8c651cd4 lw a1,7380(v1) +8002c5f0: 3c038007 lui v1,0x8007 +8002c5f4: 8c631cd8 lw v1,7384(v1) +8002c5f8: 00000000 nop +8002c5fc: 00031880 sll v1,v1,0x2 +8002c600: 00a31821 addu v1,a1,v1 +8002c604: 00602821 move a1,v1 +8002c608: 3c0300ff lui v1,0xff +8002c60c: 3463ffff ori v1,v1,0xffff +8002c610: 00a31824 and v1,a1,v1 +8002c614: 00831825 or v1,a0,v1 +8002c618: ac430000 sw v1,0(v0) +} +8002c61c: 00000000 nop +8002c620: 03c0e821 move sp,s8 +8002c624: 8fbf0024 lw ra,36(sp) +8002c628: 8fbe0020 lw s8,32(sp) +8002c62c: 27bd0028 addiu sp,sp,40 +8002c630: 03e00008 jr ra +8002c634: 00000000 nop + +8002c638 <GsSortLine>: + +void GsSortLine(GsLine *line) +{ +8002c638: 27bdffd8 addiu sp,sp,-40 +8002c63c: afbf0024 sw ra,36(sp) +8002c640: afbe0020 sw s8,32(sp) +8002c644: 03a0f021 move s8,sp +8002c648: afc40028 sw a0,40(s8) + // PKT 0x40 + + int orig_pos = linked_list_pos; +8002c64c: 3c028007 lui v0,0x8007 +8002c650: 8c421cd8 lw v0,7384(v0) +8002c654: 00000000 nop +8002c658: afc20014 sw v0,20(s8) + int x; + unsigned char pkt = 0x40; +8002c65c: 24020040 li v0,64 +8002c660: a3c2001c sb v0,28(s8) + unsigned int md; + + md = setup_attribs(0, line->attribute, &pkt); +8002c664: 8fc20028 lw v0,40(s8) +8002c668: 00000000 nop +8002c66c: 8c42000c lw v0,12(v0) +8002c670: 27c3001c addiu v1,s8,28 +8002c674: 00603021 move a2,v1 +8002c678: 00402821 move a1,v0 +8002c67c: 00002021 move a0,zero +8002c680: 0c00bbd0 jal 8002ef40 <setup_attribs> +8002c684: 00000000 nop +8002c688: afc20018 sw v0,24(s8) + + linked_list[linked_list_pos++] = 0x04000000; +8002c68c: 3c028007 lui v0,0x8007 +8002c690: 8c431cd4 lw v1,7380(v0) +8002c694: 3c028007 lui v0,0x8007 +8002c698: 8c421cd8 lw v0,7384(v0) +8002c69c: 00000000 nop +8002c6a0: 24450001 addiu a1,v0,1 +8002c6a4: 3c048007 lui a0,0x8007 +8002c6a8: ac851cd8 sw a1,7384(a0) +8002c6ac: 00021080 sll v0,v0,0x2 +8002c6b0: 00621021 addu v0,v1,v0 +8002c6b4: 3c030400 lui v1,0x400 +8002c6b8: ac430000 sw v1,0(v0) + linked_list[linked_list_pos++] = md; +8002c6bc: 3c028007 lui v0,0x8007 +8002c6c0: 8c431cd4 lw v1,7380(v0) +8002c6c4: 3c028007 lui v0,0x8007 +8002c6c8: 8c421cd8 lw v0,7384(v0) +8002c6cc: 00000000 nop +8002c6d0: 24450001 addiu a1,v0,1 +8002c6d4: 3c048007 lui a0,0x8007 +8002c6d8: ac851cd8 sw a1,7384(a0) +8002c6dc: 00021080 sll v0,v0,0x2 +8002c6e0: 00621021 addu v0,v1,v0 +8002c6e4: 8fc30018 lw v1,24(s8) +8002c6e8: 00000000 nop +8002c6ec: ac430000 sw v1,0(v0) + linked_list[linked_list_pos++] = (pkt<<24)|(line->b<<16)|(line->g<<8)|(line->r); +8002c6f0: 3c028007 lui v0,0x8007 +8002c6f4: 8c431cd4 lw v1,7380(v0) +8002c6f8: 3c028007 lui v0,0x8007 +8002c6fc: 8c421cd8 lw v0,7384(v0) +8002c700: 00000000 nop +8002c704: 24450001 addiu a1,v0,1 +8002c708: 3c048007 lui a0,0x8007 +8002c70c: ac851cd8 sw a1,7384(a0) +8002c710: 00021080 sll v0,v0,0x2 +8002c714: 00621021 addu v0,v1,v0 +8002c718: 93c3001c lbu v1,28(s8) +8002c71c: 00000000 nop +8002c720: 00032600 sll a0,v1,0x18 +8002c724: 8fc30028 lw v1,40(s8) +8002c728: 00000000 nop +8002c72c: 90630002 lbu v1,2(v1) +8002c730: 00000000 nop +8002c734: 00031c00 sll v1,v1,0x10 +8002c738: 00832025 or a0,a0,v1 +8002c73c: 8fc30028 lw v1,40(s8) +8002c740: 00000000 nop +8002c744: 90630001 lbu v1,1(v1) +8002c748: 00000000 nop +8002c74c: 00031a00 sll v1,v1,0x8 +8002c750: 00831825 or v1,a0,v1 +8002c754: 8fc40028 lw a0,40(s8) +8002c758: 00000000 nop +8002c75c: 90840000 lbu a0,0(a0) +8002c760: 00000000 nop +8002c764: 00641825 or v1,v1,a0 +8002c768: ac430000 sw v1,0(v0) + + for(x = 0; x < 2; x++) +8002c76c: afc00010 sw zero,16(s8) +8002c770: 10000025 b 8002c808 <GsSortLine+0x1d0> +8002c774: 00000000 nop + linked_list[linked_list_pos++] = ((line->y[x]&0x7ff)<<16)|(line->x[x]&0x7ff); +8002c778: 3c028007 lui v0,0x8007 +8002c77c: 8c431cd4 lw v1,7380(v0) +8002c780: 3c028007 lui v0,0x8007 +8002c784: 8c421cd8 lw v0,7384(v0) +8002c788: 00000000 nop +8002c78c: 24450001 addiu a1,v0,1 +8002c790: 3c048007 lui a0,0x8007 +8002c794: ac851cd8 sw a1,7384(a0) +8002c798: 00021080 sll v0,v0,0x2 +8002c79c: 00621821 addu v1,v1,v0 +8002c7a0: 8fc40028 lw a0,40(s8) +8002c7a4: 8fc20010 lw v0,16(s8) +8002c7a8: 00000000 nop +8002c7ac: 24420004 addiu v0,v0,4 +8002c7b0: 00021040 sll v0,v0,0x1 +8002c7b4: 00821021 addu v0,a0,v0 +8002c7b8: 84420000 lh v0,0(v0) +8002c7bc: 00000000 nop +8002c7c0: 3042ffff andi v0,v0,0xffff +8002c7c4: 304207ff andi v0,v0,0x7ff +8002c7c8: 00022400 sll a0,v0,0x10 +8002c7cc: 8fc50028 lw a1,40(s8) +8002c7d0: 8fc20010 lw v0,16(s8) +8002c7d4: 00000000 nop +8002c7d8: 00021040 sll v0,v0,0x1 +8002c7dc: 00a21021 addu v0,a1,v0 +8002c7e0: 84420004 lh v0,4(v0) +8002c7e4: 00000000 nop +8002c7e8: 3042ffff andi v0,v0,0xffff +8002c7ec: 304207ff andi v0,v0,0x7ff +8002c7f0: 00821025 or v0,a0,v0 +8002c7f4: ac620000 sw v0,0(v1) + + linked_list[linked_list_pos++] = 0x04000000; + linked_list[linked_list_pos++] = md; + linked_list[linked_list_pos++] = (pkt<<24)|(line->b<<16)|(line->g<<8)|(line->r); + + for(x = 0; x < 2; x++) +8002c7f8: 8fc20010 lw v0,16(s8) +8002c7fc: 00000000 nop +8002c800: 24420001 addiu v0,v0,1 +8002c804: afc20010 sw v0,16(s8) +8002c808: 8fc20010 lw v0,16(s8) +8002c80c: 00000000 nop +8002c810: 28420002 slti v0,v0,2 +8002c814: 1440ffd8 bnez v0,8002c778 <GsSortLine+0x140> +8002c818: 00000000 nop + linked_list[linked_list_pos++] = ((line->y[x]&0x7ff)<<16)|(line->x[x]&0x7ff); + + linked_list[orig_pos] |= ((unsigned int)&linked_list[linked_list_pos]) & 0xffffff; +8002c81c: 3c028007 lui v0,0x8007 +8002c820: 8c431cd4 lw v1,7380(v0) +8002c824: 8fc20014 lw v0,20(s8) +8002c828: 00000000 nop +8002c82c: 00021080 sll v0,v0,0x2 +8002c830: 00621021 addu v0,v1,v0 +8002c834: 3c038007 lui v1,0x8007 +8002c838: 8c641cd4 lw a0,7380(v1) +8002c83c: 8fc30014 lw v1,20(s8) +8002c840: 00000000 nop +8002c844: 00031880 sll v1,v1,0x2 +8002c848: 00831821 addu v1,a0,v1 +8002c84c: 8c640000 lw a0,0(v1) +8002c850: 3c038007 lui v1,0x8007 +8002c854: 8c651cd4 lw a1,7380(v1) +8002c858: 3c038007 lui v1,0x8007 +8002c85c: 8c631cd8 lw v1,7384(v1) +8002c860: 00000000 nop +8002c864: 00031880 sll v1,v1,0x2 +8002c868: 00a31821 addu v1,a1,v1 +8002c86c: 00602821 move a1,v1 +8002c870: 3c0300ff lui v1,0xff +8002c874: 3463ffff ori v1,v1,0xffff +8002c878: 00a31824 and v1,a1,v1 +8002c87c: 00831825 or v1,a0,v1 +8002c880: ac430000 sw v1,0(v0) +} +8002c884: 00000000 nop +8002c888: 03c0e821 move sp,s8 +8002c88c: 8fbf0024 lw ra,36(sp) +8002c890: 8fbe0020 lw s8,32(sp) +8002c894: 27bd0028 addiu sp,sp,40 +8002c898: 03e00008 jr ra +8002c89c: 00000000 nop + +8002c8a0 <GsSortGLine>: + +void GsSortGLine(GsGLine *line) +{ +8002c8a0: 27bdffd8 addiu sp,sp,-40 +8002c8a4: afbf0024 sw ra,36(sp) +8002c8a8: afbe0020 sw s8,32(sp) +8002c8ac: 03a0f021 move s8,sp +8002c8b0: afc40028 sw a0,40(s8) + // PKT 0x50 + + int orig_pos = linked_list_pos; +8002c8b4: 3c028007 lui v0,0x8007 +8002c8b8: 8c421cd8 lw v0,7384(v0) +8002c8bc: 00000000 nop +8002c8c0: afc20014 sw v0,20(s8) + int x; + unsigned char pkt = 0x50; +8002c8c4: 24020050 li v0,80 +8002c8c8: a3c2001c sb v0,28(s8) + unsigned int md; + + md = setup_attribs(0, line->attribute, &pkt); +8002c8cc: 8fc20028 lw v0,40(s8) +8002c8d0: 00000000 nop +8002c8d4: 8c420010 lw v0,16(v0) +8002c8d8: 27c3001c addiu v1,s8,28 +8002c8dc: 00603021 move a2,v1 +8002c8e0: 00402821 move a1,v0 +8002c8e4: 00002021 move a0,zero +8002c8e8: 0c00bbd0 jal 8002ef40 <setup_attribs> +8002c8ec: 00000000 nop +8002c8f0: afc20018 sw v0,24(s8) + + linked_list[linked_list_pos++] = 0x05000000; +8002c8f4: 3c028007 lui v0,0x8007 +8002c8f8: 8c431cd4 lw v1,7380(v0) +8002c8fc: 3c028007 lui v0,0x8007 +8002c900: 8c421cd8 lw v0,7384(v0) +8002c904: 00000000 nop +8002c908: 24450001 addiu a1,v0,1 +8002c90c: 3c048007 lui a0,0x8007 +8002c910: ac851cd8 sw a1,7384(a0) +8002c914: 00021080 sll v0,v0,0x2 +8002c918: 00621021 addu v0,v1,v0 +8002c91c: 3c030500 lui v1,0x500 +8002c920: ac430000 sw v1,0(v0) + linked_list[linked_list_pos++] = md; +8002c924: 3c028007 lui v0,0x8007 +8002c928: 8c431cd4 lw v1,7380(v0) +8002c92c: 3c028007 lui v0,0x8007 +8002c930: 8c421cd8 lw v0,7384(v0) +8002c934: 00000000 nop +8002c938: 24450001 addiu a1,v0,1 +8002c93c: 3c048007 lui a0,0x8007 +8002c940: ac851cd8 sw a1,7384(a0) +8002c944: 00021080 sll v0,v0,0x2 +8002c948: 00621021 addu v0,v1,v0 +8002c94c: 8fc30018 lw v1,24(s8) +8002c950: 00000000 nop +8002c954: ac430000 sw v1,0(v0) + + for(x=0;x<2;x++) +8002c958: afc00010 sw zero,16(s8) +8002c95c: 10000051 b 8002caa4 <GsSortGLine+0x204> +8002c960: 00000000 nop + { + linked_list[linked_list_pos++] = (line->b[x]<<16)|(line->g[x]<<8)|(line->r[x])|((x == 0)?(pkt<<24):0); +8002c964: 3c028007 lui v0,0x8007 +8002c968: 8c431cd4 lw v1,7380(v0) +8002c96c: 3c028007 lui v0,0x8007 +8002c970: 8c421cd8 lw v0,7384(v0) +8002c974: 00000000 nop +8002c978: 24450001 addiu a1,v0,1 +8002c97c: 3c048007 lui a0,0x8007 +8002c980: ac851cd8 sw a1,7384(a0) +8002c984: 00021080 sll v0,v0,0x2 +8002c988: 00621821 addu v1,v1,v0 +8002c98c: 8fc40028 lw a0,40(s8) +8002c990: 8fc20010 lw v0,16(s8) +8002c994: 00000000 nop +8002c998: 00821021 addu v0,a0,v0 +8002c99c: 90420004 lbu v0,4(v0) +8002c9a0: 00000000 nop +8002c9a4: 00022400 sll a0,v0,0x10 +8002c9a8: 8fc50028 lw a1,40(s8) +8002c9ac: 8fc20010 lw v0,16(s8) +8002c9b0: 00000000 nop +8002c9b4: 00a21021 addu v0,a1,v0 +8002c9b8: 90420002 lbu v0,2(v0) +8002c9bc: 00000000 nop +8002c9c0: 00021200 sll v0,v0,0x8 +8002c9c4: 00821025 or v0,a0,v0 +8002c9c8: 8fc50028 lw a1,40(s8) +8002c9cc: 8fc40010 lw a0,16(s8) +8002c9d0: 00000000 nop +8002c9d4: 00a42021 addu a0,a1,a0 +8002c9d8: 90840000 lbu a0,0(a0) +8002c9dc: 00000000 nop +8002c9e0: 00442025 or a0,v0,a0 +8002c9e4: 8fc20010 lw v0,16(s8) +8002c9e8: 00000000 nop +8002c9ec: 14400006 bnez v0,8002ca08 <GsSortGLine+0x168> +8002c9f0: 00000000 nop +8002c9f4: 93c2001c lbu v0,28(s8) +8002c9f8: 00000000 nop +8002c9fc: 00021600 sll v0,v0,0x18 +8002ca00: 10000002 b 8002ca0c <GsSortGLine+0x16c> +8002ca04: 00000000 nop +8002ca08: 00001021 move v0,zero +8002ca0c: 00821025 or v0,a0,v0 +8002ca10: ac620000 sw v0,0(v1) + linked_list[linked_list_pos++] = ((line->y[x]&0x7ff)<<16)|(line->x[x] & 0x7ff); +8002ca14: 3c028007 lui v0,0x8007 +8002ca18: 8c431cd4 lw v1,7380(v0) +8002ca1c: 3c028007 lui v0,0x8007 +8002ca20: 8c421cd8 lw v0,7384(v0) +8002ca24: 00000000 nop +8002ca28: 24450001 addiu a1,v0,1 +8002ca2c: 3c048007 lui a0,0x8007 +8002ca30: ac851cd8 sw a1,7384(a0) +8002ca34: 00021080 sll v0,v0,0x2 +8002ca38: 00621821 addu v1,v1,v0 +8002ca3c: 8fc40028 lw a0,40(s8) +8002ca40: 8fc20010 lw v0,16(s8) +8002ca44: 00000000 nop +8002ca48: 24420004 addiu v0,v0,4 +8002ca4c: 00021040 sll v0,v0,0x1 +8002ca50: 00821021 addu v0,a0,v0 +8002ca54: 84420002 lh v0,2(v0) +8002ca58: 00000000 nop +8002ca5c: 3042ffff andi v0,v0,0xffff +8002ca60: 304207ff andi v0,v0,0x7ff +8002ca64: 00022400 sll a0,v0,0x10 +8002ca68: 8fc50028 lw a1,40(s8) +8002ca6c: 8fc20010 lw v0,16(s8) +8002ca70: 00000000 nop +8002ca74: 00021040 sll v0,v0,0x1 +8002ca78: 00a21021 addu v0,a1,v0 +8002ca7c: 84420006 lh v0,6(v0) +8002ca80: 00000000 nop +8002ca84: 3042ffff andi v0,v0,0xffff +8002ca88: 304207ff andi v0,v0,0x7ff +8002ca8c: 00821025 or v0,a0,v0 +8002ca90: ac620000 sw v0,0(v1) + md = setup_attribs(0, line->attribute, &pkt); + + linked_list[linked_list_pos++] = 0x05000000; + linked_list[linked_list_pos++] = md; + + for(x=0;x<2;x++) +8002ca94: 8fc20010 lw v0,16(s8) +8002ca98: 00000000 nop +8002ca9c: 24420001 addiu v0,v0,1 +8002caa0: afc20010 sw v0,16(s8) +8002caa4: 8fc20010 lw v0,16(s8) +8002caa8: 00000000 nop +8002caac: 28420002 slti v0,v0,2 +8002cab0: 1440ffac bnez v0,8002c964 <GsSortGLine+0xc4> +8002cab4: 00000000 nop + { + linked_list[linked_list_pos++] = (line->b[x]<<16)|(line->g[x]<<8)|(line->r[x])|((x == 0)?(pkt<<24):0); + linked_list[linked_list_pos++] = ((line->y[x]&0x7ff)<<16)|(line->x[x] & 0x7ff); + } + + linked_list[orig_pos] |= ((unsigned int)&linked_list[linked_list_pos]) & 0xffffff; +8002cab8: 3c028007 lui v0,0x8007 +8002cabc: 8c431cd4 lw v1,7380(v0) +8002cac0: 8fc20014 lw v0,20(s8) +8002cac4: 00000000 nop +8002cac8: 00021080 sll v0,v0,0x2 +8002cacc: 00621021 addu v0,v1,v0 +8002cad0: 3c038007 lui v1,0x8007 +8002cad4: 8c641cd4 lw a0,7380(v1) +8002cad8: 8fc30014 lw v1,20(s8) +8002cadc: 00000000 nop +8002cae0: 00031880 sll v1,v1,0x2 +8002cae4: 00831821 addu v1,a0,v1 +8002cae8: 8c640000 lw a0,0(v1) +8002caec: 3c038007 lui v1,0x8007 +8002caf0: 8c651cd4 lw a1,7380(v1) +8002caf4: 3c038007 lui v1,0x8007 +8002caf8: 8c631cd8 lw v1,7384(v1) +8002cafc: 00000000 nop +8002cb00: 00031880 sll v1,v1,0x2 +8002cb04: 00a31821 addu v1,a1,v1 +8002cb08: 00602821 move a1,v1 +8002cb0c: 3c0300ff lui v1,0xff +8002cb10: 3463ffff ori v1,v1,0xffff +8002cb14: 00a31824 and v1,a1,v1 +8002cb18: 00831825 or v1,a0,v1 +8002cb1c: ac430000 sw v1,0(v0) +} +8002cb20: 00000000 nop +8002cb24: 03c0e821 move sp,s8 +8002cb28: 8fbf0024 lw ra,36(sp) +8002cb2c: 8fbe0020 lw s8,32(sp) +8002cb30: 27bd0028 addiu sp,sp,40 +8002cb34: 03e00008 jr ra +8002cb38: 00000000 nop + +8002cb3c <GsSortDot>: + +void GsSortDot(GsDot *dot) +{ +8002cb3c: 27bdffd8 addiu sp,sp,-40 +8002cb40: afbf0024 sw ra,36(sp) +8002cb44: afbe0020 sw s8,32(sp) +8002cb48: 03a0f021 move s8,sp +8002cb4c: afc40028 sw a0,40(s8) + // PKT 0x68 + + int orig_pos = linked_list_pos; +8002cb50: 3c028007 lui v0,0x8007 +8002cb54: 8c421cd8 lw v0,7384(v0) +8002cb58: 00000000 nop +8002cb5c: afc20010 sw v0,16(s8) + unsigned char pkt = 0x68; +8002cb60: 24020068 li v0,104 +8002cb64: a3c20018 sb v0,24(s8) + unsigned int md; + + md = setup_attribs(0, dot->attribute, &pkt); +8002cb68: 8fc20028 lw v0,40(s8) +8002cb6c: 00000000 nop +8002cb70: 8c420008 lw v0,8(v0) +8002cb74: 27c30018 addiu v1,s8,24 +8002cb78: 00603021 move a2,v1 +8002cb7c: 00402821 move a1,v0 +8002cb80: 00002021 move a0,zero +8002cb84: 0c00bbd0 jal 8002ef40 <setup_attribs> +8002cb88: 00000000 nop +8002cb8c: afc20014 sw v0,20(s8) + + linked_list[linked_list_pos++] = 0x03000000; +8002cb90: 3c028007 lui v0,0x8007 +8002cb94: 8c431cd4 lw v1,7380(v0) +8002cb98: 3c028007 lui v0,0x8007 +8002cb9c: 8c421cd8 lw v0,7384(v0) +8002cba0: 00000000 nop +8002cba4: 24450001 addiu a1,v0,1 +8002cba8: 3c048007 lui a0,0x8007 +8002cbac: ac851cd8 sw a1,7384(a0) +8002cbb0: 00021080 sll v0,v0,0x2 +8002cbb4: 00621021 addu v0,v1,v0 +8002cbb8: 3c030300 lui v1,0x300 +8002cbbc: ac430000 sw v1,0(v0) + linked_list[linked_list_pos++] = md; +8002cbc0: 3c028007 lui v0,0x8007 +8002cbc4: 8c431cd4 lw v1,7380(v0) +8002cbc8: 3c028007 lui v0,0x8007 +8002cbcc: 8c421cd8 lw v0,7384(v0) +8002cbd0: 00000000 nop +8002cbd4: 24450001 addiu a1,v0,1 +8002cbd8: 3c048007 lui a0,0x8007 +8002cbdc: ac851cd8 sw a1,7384(a0) +8002cbe0: 00021080 sll v0,v0,0x2 +8002cbe4: 00621021 addu v0,v1,v0 +8002cbe8: 8fc30014 lw v1,20(s8) +8002cbec: 00000000 nop +8002cbf0: ac430000 sw v1,0(v0) + linked_list[linked_list_pos++] = (pkt<<24)|(dot->b<<16)|(dot->g<<8)|(dot->r); +8002cbf4: 3c028007 lui v0,0x8007 +8002cbf8: 8c431cd4 lw v1,7380(v0) +8002cbfc: 3c028007 lui v0,0x8007 +8002cc00: 8c421cd8 lw v0,7384(v0) +8002cc04: 00000000 nop +8002cc08: 24450001 addiu a1,v0,1 +8002cc0c: 3c048007 lui a0,0x8007 +8002cc10: ac851cd8 sw a1,7384(a0) +8002cc14: 00021080 sll v0,v0,0x2 +8002cc18: 00621021 addu v0,v1,v0 +8002cc1c: 93c30018 lbu v1,24(s8) +8002cc20: 00000000 nop +8002cc24: 00032600 sll a0,v1,0x18 +8002cc28: 8fc30028 lw v1,40(s8) +8002cc2c: 00000000 nop +8002cc30: 90630002 lbu v1,2(v1) +8002cc34: 00000000 nop +8002cc38: 00031c00 sll v1,v1,0x10 +8002cc3c: 00832025 or a0,a0,v1 +8002cc40: 8fc30028 lw v1,40(s8) +8002cc44: 00000000 nop +8002cc48: 90630001 lbu v1,1(v1) +8002cc4c: 00000000 nop +8002cc50: 00031a00 sll v1,v1,0x8 +8002cc54: 00831825 or v1,a0,v1 +8002cc58: 8fc40028 lw a0,40(s8) +8002cc5c: 00000000 nop +8002cc60: 90840000 lbu a0,0(a0) +8002cc64: 00000000 nop +8002cc68: 00641825 or v1,v1,a0 +8002cc6c: ac430000 sw v1,0(v0) + linked_list[linked_list_pos++] = ((dot->y&0x7ff)<<16)|(dot->x&0x7ff); +8002cc70: 3c028007 lui v0,0x8007 +8002cc74: 8c431cd4 lw v1,7380(v0) +8002cc78: 3c028007 lui v0,0x8007 +8002cc7c: 8c421cd8 lw v0,7384(v0) +8002cc80: 00000000 nop +8002cc84: 24450001 addiu a1,v0,1 +8002cc88: 3c048007 lui a0,0x8007 +8002cc8c: ac851cd8 sw a1,7384(a0) +8002cc90: 00021080 sll v0,v0,0x2 +8002cc94: 00621021 addu v0,v1,v0 +8002cc98: 8fc30028 lw v1,40(s8) +8002cc9c: 00000000 nop +8002cca0: 84630006 lh v1,6(v1) +8002cca4: 00000000 nop +8002cca8: 3063ffff andi v1,v1,0xffff +8002ccac: 306307ff andi v1,v1,0x7ff +8002ccb0: 00032400 sll a0,v1,0x10 +8002ccb4: 8fc30028 lw v1,40(s8) +8002ccb8: 00000000 nop +8002ccbc: 84630004 lh v1,4(v1) +8002ccc0: 00000000 nop +8002ccc4: 3063ffff andi v1,v1,0xffff +8002ccc8: 306307ff andi v1,v1,0x7ff +8002cccc: 00831825 or v1,a0,v1 +8002ccd0: ac430000 sw v1,0(v0) + + linked_list[orig_pos] |= ((unsigned int)&linked_list[linked_list_pos]) & 0xffffff; +8002ccd4: 3c028007 lui v0,0x8007 +8002ccd8: 8c431cd4 lw v1,7380(v0) +8002ccdc: 8fc20010 lw v0,16(s8) +8002cce0: 00000000 nop +8002cce4: 00021080 sll v0,v0,0x2 +8002cce8: 00621021 addu v0,v1,v0 +8002ccec: 3c038007 lui v1,0x8007 +8002ccf0: 8c641cd4 lw a0,7380(v1) +8002ccf4: 8fc30010 lw v1,16(s8) +8002ccf8: 00000000 nop +8002ccfc: 00031880 sll v1,v1,0x2 +8002cd00: 00831821 addu v1,a0,v1 +8002cd04: 8c640000 lw a0,0(v1) +8002cd08: 3c038007 lui v1,0x8007 +8002cd0c: 8c651cd4 lw a1,7380(v1) +8002cd10: 3c038007 lui v1,0x8007 +8002cd14: 8c631cd8 lw v1,7384(v1) +8002cd18: 00000000 nop +8002cd1c: 00031880 sll v1,v1,0x2 +8002cd20: 00a31821 addu v1,a1,v1 +8002cd24: 00602821 move a1,v1 +8002cd28: 3c0300ff lui v1,0xff +8002cd2c: 3463ffff ori v1,v1,0xffff +8002cd30: 00a31824 and v1,a1,v1 +8002cd34: 00831825 or v1,a0,v1 +8002cd38: ac430000 sw v1,0(v0) +} +8002cd3c: 00000000 nop +8002cd40: 03c0e821 move sp,s8 +8002cd44: 8fbf0024 lw ra,36(sp) +8002cd48: 8fbe0020 lw s8,32(sp) +8002cd4c: 27bd0028 addiu sp,sp,40 +8002cd50: 03e00008 jr ra +8002cd54: 00000000 nop + +8002cd58 <GsSortSprite>: + +void GsSortSprite(GsSprite *sprite) +{ +8002cd58: 27bdff98 addiu sp,sp,-104 +8002cd5c: afbf0064 sw ra,100(sp) +8002cd60: afbe0060 sw s8,96(sp) +8002cd64: afb0005c sw s0,92(sp) +8002cd68: 03a0f021 move s8,sp +8002cd6c: afc40068 sw a0,104(s8) + GsTPoly4 tpoly4; + int x, y; + int sx = sprite->x & 0x7ff; +8002cd70: 8fc20068 lw v0,104(s8) +8002cd74: 00000000 nop +8002cd78: 84420000 lh v0,0(v0) +8002cd7c: 00000000 nop +8002cd80: 3042ffff andi v0,v0,0xffff +8002cd84: 304207ff andi v0,v0,0x7ff +8002cd88: afc20020 sw v0,32(s8) + int sy = sprite->y & 0x7ff; +8002cd8c: 8fc20068 lw v0,104(s8) +8002cd90: 00000000 nop +8002cd94: 84420002 lh v0,2(v0) +8002cd98: 00000000 nop +8002cd9c: 3042ffff andi v0,v0,0xffff +8002cda0: 304207ff andi v0,v0,0x7ff +8002cda4: afc20024 sw v0,36(s8) + sprite->h = 256;*/ + + // If "sprite" has no flipping and no scaling use sprite primitive + // otherwise manipulate a 4 point textured polygon primitive + + if(sprite->rotate != 0) +8002cda8: 8fc20068 lw v0,104(s8) +8002cdac: 00000000 nop +8002cdb0: 8c420020 lw v0,32(v0) +8002cdb4: 00000000 nop +8002cdb8: 104001ba beqz v0,8002d4a4 <GsSortSprite+0x74c> +8002cdbc: 00000000 nop + { + tpoly4.u[0] = sprite->u; +8002cdc0: 8fc20068 lw v0,104(s8) +8002cdc4: 00000000 nop +8002cdc8: 90420004 lbu v0,4(v0) +8002cdcc: 00000000 nop +8002cdd0: a3c20049 sb v0,73(s8) + tpoly4.v[0] = sprite->v; +8002cdd4: 8fc20068 lw v0,104(s8) +8002cdd8: 00000000 nop +8002cddc: 90420005 lbu v0,5(v0) +8002cde0: 00000000 nop +8002cde4: a3c2004d sb v0,77(s8) + + tpoly4.u[1] = sprite->u; +8002cde8: 8fc20068 lw v0,104(s8) +8002cdec: 00000000 nop +8002cdf0: 90420004 lbu v0,4(v0) +8002cdf4: 00000000 nop +8002cdf8: a3c2004a sb v0,74(s8) + tpoly4.v[1] = sprite->v + sprite->h; +8002cdfc: 8fc20068 lw v0,104(s8) +8002ce00: 00000000 nop +8002ce04: 90430005 lbu v1,5(v0) +8002ce08: 8fc20068 lw v0,104(s8) +8002ce0c: 00000000 nop +8002ce10: 84420008 lh v0,8(v0) +8002ce14: 00000000 nop +8002ce18: 304200ff andi v0,v0,0xff +8002ce1c: 00621021 addu v0,v1,v0 +8002ce20: 304200ff andi v0,v0,0xff +8002ce24: a3c2004e sb v0,78(s8) + + tpoly4.u[2] = sprite->u + sprite->w; +8002ce28: 8fc20068 lw v0,104(s8) +8002ce2c: 00000000 nop +8002ce30: 90430004 lbu v1,4(v0) +8002ce34: 8fc20068 lw v0,104(s8) +8002ce38: 00000000 nop +8002ce3c: 84420006 lh v0,6(v0) +8002ce40: 00000000 nop +8002ce44: 304200ff andi v0,v0,0xff +8002ce48: 00621021 addu v0,v1,v0 +8002ce4c: 304200ff andi v0,v0,0xff +8002ce50: a3c2004b sb v0,75(s8) + tpoly4.v[2] = sprite->v; +8002ce54: 8fc20068 lw v0,104(s8) +8002ce58: 00000000 nop +8002ce5c: 90420005 lbu v0,5(v0) +8002ce60: 00000000 nop +8002ce64: a3c2004f sb v0,79(s8) + + tpoly4.u[3] = sprite->u + sprite->w; +8002ce68: 8fc20068 lw v0,104(s8) +8002ce6c: 00000000 nop +8002ce70: 90430004 lbu v1,4(v0) +8002ce74: 8fc20068 lw v0,104(s8) +8002ce78: 00000000 nop +8002ce7c: 84420006 lh v0,6(v0) +8002ce80: 00000000 nop +8002ce84: 304200ff andi v0,v0,0xff +8002ce88: 00621021 addu v0,v1,v0 +8002ce8c: 304200ff andi v0,v0,0xff +8002ce90: a3c2004c sb v0,76(s8) + tpoly4.v[3] = sprite->v + sprite->h; +8002ce94: 8fc20068 lw v0,104(s8) +8002ce98: 00000000 nop +8002ce9c: 90430005 lbu v1,5(v0) +8002cea0: 8fc20068 lw v0,104(s8) +8002cea4: 00000000 nop +8002cea8: 84420008 lh v0,8(v0) +8002ceac: 00000000 nop +8002ceb0: 304200ff andi v0,v0,0xff +8002ceb4: 00621021 addu v0,v1,v0 +8002ceb8: 304200ff andi v0,v0,0xff +8002cebc: a3c20050 sb v0,80(s8) + + gs_vbuf[0][2] = gs_vbuf[1][2] = gs_vbuf[2][2] = gs_vbuf[3][2] = 0; +8002cec0: 3c028007 lui v0,0x8007 +8002cec4: 24421b70 addiu v0,v0,7024 +8002cec8: ac400058 sw zero,88(v0) +8002cecc: ac40005c sw zero,92(v0) +8002ced0: 3c028007 lui v0,0x8007 +8002ced4: 24421b70 addiu v0,v0,7024 +8002ced8: 8c43005c lw v1,92(v0) +8002cedc: 8c420058 lw v0,88(v0) +8002cee0: 3c048007 lui a0,0x8007 +8002cee4: 24841b70 addiu a0,a0,7024 +8002cee8: ac820040 sw v0,64(a0) +8002ceec: ac830044 sw v1,68(a0) +8002cef0: 3c028007 lui v0,0x8007 +8002cef4: 24421b70 addiu v0,v0,7024 +8002cef8: 8c430044 lw v1,68(v0) +8002cefc: 8c420040 lw v0,64(v0) +8002cf00: 3c048007 lui a0,0x8007 +8002cf04: 24841b70 addiu a0,a0,7024 +8002cf08: ac820028 sw v0,40(a0) +8002cf0c: ac83002c sw v1,44(a0) +8002cf10: 3c028007 lui v0,0x8007 +8002cf14: 24421b70 addiu v0,v0,7024 +8002cf18: 8c43002c lw v1,44(v0) +8002cf1c: 8c420028 lw v0,40(v0) +8002cf20: 3c048007 lui a0,0x8007 +8002cf24: 24841b70 addiu a0,a0,7024 +8002cf28: ac820010 sw v0,16(a0) +8002cf2c: ac830014 sw v1,20(a0) + + mcx = sprite->mx + sprite->x; +8002cf30: 8fc20068 lw v0,104(s8) +8002cf34: 00000000 nop +8002cf38: 8c420024 lw v0,36(v0) +8002cf3c: 8fc30068 lw v1,104(s8) +8002cf40: 00000000 nop +8002cf44: 84630000 lh v1,0(v1) +8002cf48: 00000000 nop +8002cf4c: 00431021 addu v0,v0,v1 +8002cf50: afc20028 sw v0,40(s8) + mcy = sprite->my + sprite->y; +8002cf54: 8fc20068 lw v0,104(s8) +8002cf58: 00000000 nop +8002cf5c: 8c420028 lw v0,40(v0) +8002cf60: 8fc30068 lw v1,104(s8) +8002cf64: 00000000 nop +8002cf68: 84630002 lh v1,2(v1) +8002cf6c: 00000000 nop +8002cf70: 00431021 addu v0,v0,v1 +8002cf74: afc2002c sw v0,44(s8) + + gs_vbuf[0][0] = -(mcx - sprite->x); +8002cf78: 8fc20068 lw v0,104(s8) +8002cf7c: 00000000 nop +8002cf80: 84420000 lh v0,0(v0) +8002cf84: 00000000 nop +8002cf88: 00401821 move v1,v0 +8002cf8c: 8fc20028 lw v0,40(s8) +8002cf90: 00000000 nop +8002cf94: 00621023 subu v0,v1,v0 +8002cf98: 00402021 move a0,v0 +8002cf9c: 0c00fc5c jal 8003f170 <__floatsidf> +8002cfa0: 00000000 nop +8002cfa4: 3c048007 lui a0,0x8007 +8002cfa8: ac821b70 sw v0,7024(a0) +8002cfac: ac831b74 sw v1,7028(a0) + gs_vbuf[0][1] = (mcy - sprite->y); +8002cfb0: 8fc20068 lw v0,104(s8) +8002cfb4: 00000000 nop +8002cfb8: 84420002 lh v0,2(v0) +8002cfbc: 00000000 nop +8002cfc0: 00401821 move v1,v0 +8002cfc4: 8fc2002c lw v0,44(s8) +8002cfc8: 00000000 nop +8002cfcc: 00431023 subu v0,v0,v1 +8002cfd0: 00402021 move a0,v0 +8002cfd4: 0c00fc5c jal 8003f170 <__floatsidf> +8002cfd8: 00000000 nop +8002cfdc: 3c048007 lui a0,0x8007 +8002cfe0: 24841b70 addiu a0,a0,7024 +8002cfe4: ac820008 sw v0,8(a0) +8002cfe8: ac83000c sw v1,12(a0) + + gs_vbuf[1][0] = -(mcx - sprite->x); +8002cfec: 8fc20068 lw v0,104(s8) +8002cff0: 00000000 nop +8002cff4: 84420000 lh v0,0(v0) +8002cff8: 00000000 nop +8002cffc: 00401821 move v1,v0 +8002d000: 8fc20028 lw v0,40(s8) +8002d004: 00000000 nop +8002d008: 00621023 subu v0,v1,v0 +8002d00c: 00402021 move a0,v0 +8002d010: 0c00fc5c jal 8003f170 <__floatsidf> +8002d014: 00000000 nop +8002d018: 3c048007 lui a0,0x8007 +8002d01c: 24841b70 addiu a0,a0,7024 +8002d020: ac820018 sw v0,24(a0) +8002d024: ac83001c sw v1,28(a0) + gs_vbuf[1][1] = (mcy - (sprite->y + gs_calculate_scaled_size(sprite->h, sprite->scaley))); +8002d028: 8fc20068 lw v0,104(s8) +8002d02c: 00000000 nop +8002d030: 84420002 lh v0,2(v0) +8002d034: 00000000 nop +8002d038: 00408021 move s0,v0 +8002d03c: 8fc20068 lw v0,104(s8) +8002d040: 00000000 nop +8002d044: 84420008 lh v0,8(v0) +8002d048: 00000000 nop +8002d04c: 00401821 move v1,v0 +8002d050: 8fc20068 lw v0,104(s8) +8002d054: 00000000 nop +8002d058: 8c42001c lw v0,28(v0) +8002d05c: 00000000 nop +8002d060: 00402821 move a1,v0 +8002d064: 00602021 move a0,v1 +8002d068: 0c00ae07 jal 8002b81c <gs_calculate_scaled_size> +8002d06c: 00000000 nop +8002d070: 02021021 addu v0,s0,v0 +8002d074: 8fc3002c lw v1,44(s8) +8002d078: 00000000 nop +8002d07c: 00621023 subu v0,v1,v0 +8002d080: 00402021 move a0,v0 +8002d084: 0c00fc5c jal 8003f170 <__floatsidf> +8002d088: 00000000 nop +8002d08c: 3c048007 lui a0,0x8007 +8002d090: 24841b70 addiu a0,a0,7024 +8002d094: ac820020 sw v0,32(a0) +8002d098: ac830024 sw v1,36(a0) + + gs_vbuf[2][0] = -(mcx - (sprite->x + gs_calculate_scaled_size(sprite->w, sprite->scalex))); +8002d09c: 8fc20068 lw v0,104(s8) +8002d0a0: 00000000 nop +8002d0a4: 84420000 lh v0,0(v0) +8002d0a8: 00000000 nop +8002d0ac: 00408021 move s0,v0 +8002d0b0: 8fc20068 lw v0,104(s8) +8002d0b4: 00000000 nop +8002d0b8: 84420006 lh v0,6(v0) +8002d0bc: 00000000 nop +8002d0c0: 00401821 move v1,v0 +8002d0c4: 8fc20068 lw v0,104(s8) +8002d0c8: 00000000 nop +8002d0cc: 8c420018 lw v0,24(v0) +8002d0d0: 00000000 nop +8002d0d4: 00402821 move a1,v0 +8002d0d8: 00602021 move a0,v1 +8002d0dc: 0c00ae07 jal 8002b81c <gs_calculate_scaled_size> +8002d0e0: 00000000 nop +8002d0e4: 02021821 addu v1,s0,v0 +8002d0e8: 8fc20028 lw v0,40(s8) +8002d0ec: 00000000 nop +8002d0f0: 00621023 subu v0,v1,v0 +8002d0f4: 00402021 move a0,v0 +8002d0f8: 0c00fc5c jal 8003f170 <__floatsidf> +8002d0fc: 00000000 nop +8002d100: 3c048007 lui a0,0x8007 +8002d104: 24841b70 addiu a0,a0,7024 +8002d108: ac820030 sw v0,48(a0) +8002d10c: ac830034 sw v1,52(a0) + gs_vbuf[2][1] = (mcy - sprite->y); +8002d110: 8fc20068 lw v0,104(s8) +8002d114: 00000000 nop +8002d118: 84420002 lh v0,2(v0) +8002d11c: 00000000 nop +8002d120: 00401821 move v1,v0 +8002d124: 8fc2002c lw v0,44(s8) +8002d128: 00000000 nop +8002d12c: 00431023 subu v0,v0,v1 +8002d130: 00402021 move a0,v0 +8002d134: 0c00fc5c jal 8003f170 <__floatsidf> +8002d138: 00000000 nop +8002d13c: 3c048007 lui a0,0x8007 +8002d140: 24841b70 addiu a0,a0,7024 +8002d144: ac820038 sw v0,56(a0) +8002d148: ac83003c sw v1,60(a0) + + gs_vbuf[3][0] = -(mcx - (sprite->x + gs_calculate_scaled_size(sprite->w, sprite->scalex))); +8002d14c: 8fc20068 lw v0,104(s8) +8002d150: 00000000 nop +8002d154: 84420000 lh v0,0(v0) +8002d158: 00000000 nop +8002d15c: 00408021 move s0,v0 +8002d160: 8fc20068 lw v0,104(s8) +8002d164: 00000000 nop +8002d168: 84420006 lh v0,6(v0) +8002d16c: 00000000 nop +8002d170: 00401821 move v1,v0 +8002d174: 8fc20068 lw v0,104(s8) +8002d178: 00000000 nop +8002d17c: 8c420018 lw v0,24(v0) +8002d180: 00000000 nop +8002d184: 00402821 move a1,v0 +8002d188: 00602021 move a0,v1 +8002d18c: 0c00ae07 jal 8002b81c <gs_calculate_scaled_size> +8002d190: 00000000 nop +8002d194: 02021821 addu v1,s0,v0 +8002d198: 8fc20028 lw v0,40(s8) +8002d19c: 00000000 nop +8002d1a0: 00621023 subu v0,v1,v0 +8002d1a4: 00402021 move a0,v0 +8002d1a8: 0c00fc5c jal 8003f170 <__floatsidf> +8002d1ac: 00000000 nop +8002d1b0: 3c048007 lui a0,0x8007 +8002d1b4: 24841b70 addiu a0,a0,7024 +8002d1b8: ac820048 sw v0,72(a0) +8002d1bc: ac83004c sw v1,76(a0) + gs_vbuf[3][1] = (mcy - (sprite->y + gs_calculate_scaled_size(sprite->h, sprite->scaley))); +8002d1c0: 8fc20068 lw v0,104(s8) +8002d1c4: 00000000 nop +8002d1c8: 84420002 lh v0,2(v0) +8002d1cc: 00000000 nop +8002d1d0: 00408021 move s0,v0 +8002d1d4: 8fc20068 lw v0,104(s8) +8002d1d8: 00000000 nop +8002d1dc: 84420008 lh v0,8(v0) +8002d1e0: 00000000 nop +8002d1e4: 00401821 move v1,v0 +8002d1e8: 8fc20068 lw v0,104(s8) +8002d1ec: 00000000 nop +8002d1f0: 8c42001c lw v0,28(v0) +8002d1f4: 00000000 nop +8002d1f8: 00402821 move a1,v0 +8002d1fc: 00602021 move a0,v1 +8002d200: 0c00ae07 jal 8002b81c <gs_calculate_scaled_size> +8002d204: 00000000 nop +8002d208: 02021021 addu v0,s0,v0 +8002d20c: 8fc3002c lw v1,44(s8) +8002d210: 00000000 nop +8002d214: 00621023 subu v0,v1,v0 +8002d218: 00402021 move a0,v0 +8002d21c: 0c00fc5c jal 8003f170 <__floatsidf> +8002d220: 00000000 nop +8002d224: 3c048007 lui a0,0x8007 +8002d228: 24841b70 addiu a0,a0,7024 +8002d22c: ac820050 sw v0,80(a0) +8002d230: ac830054 sw v1,84(a0) + + for(x = 0; x < 4; x++) +8002d234: afc00018 sw zero,24(s8) +8002d238: 1000006c b 8002d3ec <GsSortSprite+0x694> +8002d23c: 00000000 nop + { + gs_internal_vector_rotate(0, 0, sprite->rotate, gs_vbuf[x], gs_vbuf[x]); +8002d240: 8fc20068 lw v0,104(s8) +8002d244: 00000000 nop +8002d248: 8c440020 lw a0,32(v0) +8002d24c: 8fc20018 lw v0,24(s8) +8002d250: 00000000 nop +8002d254: 00401821 move v1,v0 +8002d258: 000310c0 sll v0,v1,0x3 +8002d25c: 00401821 move v1,v0 +8002d260: 00031080 sll v0,v1,0x2 +8002d264: 00431023 subu v0,v0,v1 +8002d268: 3c038007 lui v1,0x8007 +8002d26c: 24631b70 addiu v1,v1,7024 +8002d270: 00432821 addu a1,v0,v1 +8002d274: 8fc20018 lw v0,24(s8) +8002d278: 00000000 nop +8002d27c: 00401821 move v1,v0 +8002d280: 000310c0 sll v0,v1,0x3 +8002d284: 00401821 move v1,v0 +8002d288: 00031080 sll v0,v1,0x2 +8002d28c: 00431023 subu v0,v0,v1 +8002d290: 3c038007 lui v1,0x8007 +8002d294: 24631b70 addiu v1,v1,7024 +8002d298: 00431021 addu v0,v0,v1 +8002d29c: afa20010 sw v0,16(sp) +8002d2a0: 00a03821 move a3,a1 +8002d2a4: 00803021 move a2,a0 +8002d2a8: 00002821 move a1,zero +8002d2ac: 00002021 move a0,zero +8002d2b0: 0c00c347 jal 80030d1c <gs_internal_vector_rotate> +8002d2b4: 00000000 nop + tpoly4.x[x] = mcx + gs_vbuf[x][0]; +8002d2b8: 8fc40028 lw a0,40(s8) +8002d2bc: 0c00fc5c jal 8003f170 <__floatsidf> +8002d2c0: 00000000 nop +8002d2c4: 00404021 move t0,v0 +8002d2c8: 00604821 move t1,v1 +8002d2cc: 3c048007 lui a0,0x8007 +8002d2d0: 8fc20018 lw v0,24(s8) +8002d2d4: 00000000 nop +8002d2d8: 00401821 move v1,v0 +8002d2dc: 000310c0 sll v0,v1,0x3 +8002d2e0: 00401821 move v1,v0 +8002d2e4: 00031080 sll v0,v1,0x2 +8002d2e8: 00431023 subu v0,v0,v1 +8002d2ec: 24831b70 addiu v1,a0,7024 +8002d2f0: 00431021 addu v0,v0,v1 +8002d2f4: 8c430004 lw v1,4(v0) +8002d2f8: 8c420000 lw v0,0(v0) +8002d2fc: 00000000 nop +8002d300: 00403021 move a2,v0 +8002d304: 00603821 move a3,v1 +8002d308: 01002021 move a0,t0 +8002d30c: 01202821 move a1,t1 +8002d310: 0c00f3d7 jal 8003cf5c <__adddf3> +8002d314: 00000000 nop +8002d318: 00402021 move a0,v0 +8002d31c: 00602821 move a1,v1 +8002d320: 0c00fc39 jal 8003f0e4 <__fixdfsi> +8002d324: 00000000 nop +8002d328: 00021c00 sll v1,v0,0x10 +8002d32c: 00031c03 sra v1,v1,0x10 +8002d330: 8fc20018 lw v0,24(s8) +8002d334: 00000000 nop +8002d338: 00021040 sll v0,v0,0x1 +8002d33c: 27c40018 addiu a0,s8,24 +8002d340: 00821021 addu v0,a0,v0 +8002d344: a4430018 sh v1,24(v0) + tpoly4.y[x] = mcy + gs_vbuf[x][1]; +8002d348: 8fc4002c lw a0,44(s8) +8002d34c: 0c00fc5c jal 8003f170 <__floatsidf> +8002d350: 00000000 nop +8002d354: 00404021 move t0,v0 +8002d358: 00604821 move t1,v1 +8002d35c: 3c048007 lui a0,0x8007 +8002d360: 8fc20018 lw v0,24(s8) +8002d364: 00000000 nop +8002d368: 00401821 move v1,v0 +8002d36c: 000310c0 sll v0,v1,0x3 +8002d370: 00401821 move v1,v0 +8002d374: 00031080 sll v0,v1,0x2 +8002d378: 00431023 subu v0,v0,v1 +8002d37c: 24831b70 addiu v1,a0,7024 +8002d380: 00431021 addu v0,v0,v1 +8002d384: 8c43000c lw v1,12(v0) +8002d388: 8c420008 lw v0,8(v0) +8002d38c: 00000000 nop +8002d390: 00403021 move a2,v0 +8002d394: 00603821 move a3,v1 +8002d398: 01002021 move a0,t0 +8002d39c: 01202821 move a1,t1 +8002d3a0: 0c00f3d7 jal 8003cf5c <__adddf3> +8002d3a4: 00000000 nop +8002d3a8: 00402021 move a0,v0 +8002d3ac: 00602821 move a1,v1 +8002d3b0: 0c00fc39 jal 8003f0e4 <__fixdfsi> +8002d3b4: 00000000 nop +8002d3b8: 00021c00 sll v1,v0,0x10 +8002d3bc: 00031c03 sra v1,v1,0x10 +8002d3c0: 8fc20018 lw v0,24(s8) +8002d3c4: 00000000 nop +8002d3c8: 24420004 addiu v0,v0,4 +8002d3cc: 00021040 sll v0,v0,0x1 +8002d3d0: 27c40018 addiu a0,s8,24 +8002d3d4: 00821021 addu v0,a0,v0 +8002d3d8: a4430018 sh v1,24(v0) + gs_vbuf[2][1] = (mcy - sprite->y); + + gs_vbuf[3][0] = -(mcx - (sprite->x + gs_calculate_scaled_size(sprite->w, sprite->scalex))); + gs_vbuf[3][1] = (mcy - (sprite->y + gs_calculate_scaled_size(sprite->h, sprite->scaley))); + + for(x = 0; x < 4; x++) +8002d3dc: 8fc20018 lw v0,24(s8) +8002d3e0: 00000000 nop +8002d3e4: 24420001 addiu v0,v0,1 +8002d3e8: afc20018 sw v0,24(s8) +8002d3ec: 8fc20018 lw v0,24(s8) +8002d3f0: 00000000 nop +8002d3f4: 28420004 slti v0,v0,4 +8002d3f8: 1440ff91 bnez v0,8002d240 <GsSortSprite+0x4e8> +8002d3fc: 00000000 nop + gs_internal_vector_rotate(0, 0, sprite->rotate, gs_vbuf[x], gs_vbuf[x]); + tpoly4.x[x] = mcx + gs_vbuf[x][0]; + tpoly4.y[x] = mcy + gs_vbuf[x][1]; + } + + tpoly4.r = sprite->r; +8002d400: 8fc20068 lw v0,104(s8) +8002d404: 00000000 nop +8002d408: 9042000e lbu v0,14(v0) +8002d40c: 00000000 nop +8002d410: a3c20040 sb v0,64(s8) + tpoly4.g = sprite->g; +8002d414: 8fc20068 lw v0,104(s8) +8002d418: 00000000 nop +8002d41c: 9042000f lbu v0,15(v0) +8002d420: 00000000 nop +8002d424: a3c20041 sb v0,65(s8) + tpoly4.b = sprite->b; +8002d428: 8fc20068 lw v0,104(s8) +8002d42c: 00000000 nop +8002d430: 90420010 lbu v0,16(v0) +8002d434: 00000000 nop +8002d438: a3c20042 sb v0,66(s8) + tpoly4.attribute = sprite->attribute; +8002d43c: 8fc20068 lw v0,104(s8) +8002d440: 00000000 nop +8002d444: 8c420014 lw v0,20(v0) +8002d448: 00000000 nop +8002d44c: afc20054 sw v0,84(s8) + tpoly4.tpage = sprite->tpage; +8002d450: 8fc20068 lw v0,104(s8) +8002d454: 00000000 nop +8002d458: 90420011 lbu v0,17(v0) +8002d45c: 00000000 nop +8002d460: a3c20048 sb v0,72(s8) + tpoly4.cx = sprite->cx; +8002d464: 8fc20068 lw v0,104(s8) +8002d468: 00000000 nop +8002d46c: 8442000a lh v0,10(v0) +8002d470: 00000000 nop +8002d474: a7c20044 sh v0,68(s8) + tpoly4.cy = sprite->cy; +8002d478: 8fc20068 lw v0,104(s8) +8002d47c: 00000000 nop +8002d480: 8442000c lh v0,12(v0) +8002d484: 00000000 nop +8002d488: a7c20046 sh v0,70(s8) + + GsSortTPoly4(&tpoly4); +8002d48c: 27c20030 addiu v0,s8,48 +8002d490: 00402021 move a0,v0 +8002d494: 0c00b7fe jal 8002dff8 <GsSortTPoly4> +8002d498: 00000000 nop + } + else + { + GsSortSimpleSprite(sprite); + } +} +8002d49c: 1000016c b 8002da50 <GsSortSprite+0xcf8> +8002d4a0: 00000000 nop + tpoly4.cx = sprite->cx; + tpoly4.cy = sprite->cy; + + GsSortTPoly4(&tpoly4); + } + else if((sprite->attribute & (H_FLIP|V_FLIP)) || +8002d4a4: 8fc20068 lw v0,104(s8) +8002d4a8: 00000000 nop +8002d4ac: 8c420014 lw v0,20(v0) +8002d4b0: 00000000 nop +8002d4b4: 30420060 andi v0,v0,0x60 +8002d4b8: 1440000d bnez v0,8002d4f0 <GsSortSprite+0x798> +8002d4bc: 00000000 nop + sprite->scalex != 0 || sprite->scaley != 0) +8002d4c0: 8fc20068 lw v0,104(s8) +8002d4c4: 00000000 nop +8002d4c8: 8c420018 lw v0,24(v0) +8002d4cc: 00000000 nop + tpoly4.cx = sprite->cx; + tpoly4.cy = sprite->cy; + + GsSortTPoly4(&tpoly4); + } + else if((sprite->attribute & (H_FLIP|V_FLIP)) || +8002d4d0: 14400007 bnez v0,8002d4f0 <GsSortSprite+0x798> +8002d4d4: 00000000 nop + sprite->scalex != 0 || sprite->scaley != 0) +8002d4d8: 8fc20068 lw v0,104(s8) +8002d4dc: 00000000 nop +8002d4e0: 8c42001c lw v0,28(v0) +8002d4e4: 00000000 nop +8002d4e8: 10400156 beqz v0,8002da44 <GsSortSprite+0xcec> +8002d4ec: 00000000 nop + { + x = sprite->w; +8002d4f0: 8fc20068 lw v0,104(s8) +8002d4f4: 00000000 nop +8002d4f8: 84420006 lh v0,6(v0) +8002d4fc: 00000000 nop +8002d500: afc20018 sw v0,24(s8) + if(x>256)x=256; +8002d504: 8fc20018 lw v0,24(s8) +8002d508: 00000000 nop +8002d50c: 28420101 slti v0,v0,257 +8002d510: 14400003 bnez v0,8002d520 <GsSortSprite+0x7c8> +8002d514: 00000000 nop +8002d518: 24020100 li v0,256 +8002d51c: afc20018 sw v0,24(s8) + + y = sprite->h; +8002d520: 8fc20068 lw v0,104(s8) +8002d524: 00000000 nop +8002d528: 84420008 lh v0,8(v0) +8002d52c: 00000000 nop +8002d530: afc2001c sw v0,28(s8) + if(y>256)y=256; +8002d534: 8fc2001c lw v0,28(s8) +8002d538: 00000000 nop +8002d53c: 28420101 slti v0,v0,257 +8002d540: 14400003 bnez v0,8002d550 <GsSortSprite+0x7f8> +8002d544: 00000000 nop +8002d548: 24020100 li v0,256 +8002d54c: afc2001c sw v0,28(s8) + + if(sprite->scalex > 8) +8002d550: 8fc20068 lw v0,104(s8) +8002d554: 00000000 nop +8002d558: 8c420018 lw v0,24(v0) +8002d55c: 00000000 nop +8002d560: 28420009 slti v0,v0,9 +8002d564: 14400012 bnez v0,8002d5b0 <GsSortSprite+0x858> +8002d568: 00000000 nop + { + x *= sprite->scalex; +8002d56c: 8fc20068 lw v0,104(s8) +8002d570: 00000000 nop +8002d574: 8c420018 lw v0,24(v0) +8002d578: 8fc30018 lw v1,24(s8) +8002d57c: 00000000 nop +8002d580: 00620018 mult v1,v0 +8002d584: 00001012 mflo v0 +8002d588: afc20018 sw v0,24(s8) + x /= 4096; +8002d58c: 8fc20018 lw v0,24(s8) +8002d590: 00000000 nop +8002d594: 04410002 bgez v0,8002d5a0 <GsSortSprite+0x848> +8002d598: 00000000 nop +8002d59c: 24420fff addiu v0,v0,4095 +8002d5a0: 00021303 sra v0,v0,0xc +8002d5a4: afc20018 sw v0,24(s8) +8002d5a8: 10000026 b 8002d644 <GsSortSprite+0x8ec> +8002d5ac: 00000000 nop + } + else + { + if(sprite->scalex >= 2) +8002d5b0: 8fc20068 lw v0,104(s8) +8002d5b4: 00000000 nop +8002d5b8: 8c420018 lw v0,24(v0) +8002d5bc: 00000000 nop +8002d5c0: 28420002 slti v0,v0,2 +8002d5c4: 1440000b bnez v0,8002d5f4 <GsSortSprite+0x89c> +8002d5c8: 00000000 nop + x*=sprite->scalex; +8002d5cc: 8fc20068 lw v0,104(s8) +8002d5d0: 00000000 nop +8002d5d4: 8c420018 lw v0,24(v0) +8002d5d8: 8fc30018 lw v1,24(s8) +8002d5dc: 00000000 nop +8002d5e0: 00620018 mult v1,v0 +8002d5e4: 00001012 mflo v0 +8002d5e8: afc20018 sw v0,24(s8) +8002d5ec: 10000015 b 8002d644 <GsSortSprite+0x8ec> +8002d5f0: 00000000 nop + else if(sprite->scalex <= -2) +8002d5f4: 8fc20068 lw v0,104(s8) +8002d5f8: 00000000 nop +8002d5fc: 8c420018 lw v0,24(v0) +8002d600: 00000000 nop +8002d604: 2842ffff slti v0,v0,-1 +8002d608: 1040000e beqz v0,8002d644 <GsSortSprite+0x8ec> +8002d60c: 00000000 nop + x/=-sprite->scalex; +8002d610: 8fc20068 lw v0,104(s8) +8002d614: 00000000 nop +8002d618: 8c420018 lw v0,24(v0) +8002d61c: 00000000 nop +8002d620: 00021023 negu v0,v0 +8002d624: 8fc30018 lw v1,24(s8) +8002d628: 00000000 nop +8002d62c: 14400002 bnez v0,8002d638 <GsSortSprite+0x8e0> +8002d630: 0062001a div zero,v1,v0 +8002d634: 0007000d break 0x7 +8002d638: 00001010 mfhi v0 +8002d63c: 00001012 mflo v0 +8002d640: afc20018 sw v0,24(s8) + } + + if(sprite->scaley > 8) +8002d644: 8fc20068 lw v0,104(s8) +8002d648: 00000000 nop +8002d64c: 8c42001c lw v0,28(v0) +8002d650: 00000000 nop +8002d654: 28420009 slti v0,v0,9 +8002d658: 14400012 bnez v0,8002d6a4 <GsSortSprite+0x94c> +8002d65c: 00000000 nop + { + y *= sprite->scaley; +8002d660: 8fc20068 lw v0,104(s8) +8002d664: 00000000 nop +8002d668: 8c42001c lw v0,28(v0) +8002d66c: 8fc3001c lw v1,28(s8) +8002d670: 00000000 nop +8002d674: 00620018 mult v1,v0 +8002d678: 00001012 mflo v0 +8002d67c: afc2001c sw v0,28(s8) + y /= 4096; +8002d680: 8fc2001c lw v0,28(s8) +8002d684: 00000000 nop +8002d688: 04410002 bgez v0,8002d694 <GsSortSprite+0x93c> +8002d68c: 00000000 nop +8002d690: 24420fff addiu v0,v0,4095 +8002d694: 00021303 sra v0,v0,0xc +8002d698: afc2001c sw v0,28(s8) +8002d69c: 10000026 b 8002d738 <GsSortSprite+0x9e0> +8002d6a0: 00000000 nop + } + else + { + if(sprite->scaley >= 2) +8002d6a4: 8fc20068 lw v0,104(s8) +8002d6a8: 00000000 nop +8002d6ac: 8c42001c lw v0,28(v0) +8002d6b0: 00000000 nop +8002d6b4: 28420002 slti v0,v0,2 +8002d6b8: 1440000b bnez v0,8002d6e8 <GsSortSprite+0x990> +8002d6bc: 00000000 nop + y*=sprite->scaley; +8002d6c0: 8fc20068 lw v0,104(s8) +8002d6c4: 00000000 nop +8002d6c8: 8c42001c lw v0,28(v0) +8002d6cc: 8fc3001c lw v1,28(s8) +8002d6d0: 00000000 nop +8002d6d4: 00620018 mult v1,v0 +8002d6d8: 00001012 mflo v0 +8002d6dc: afc2001c sw v0,28(s8) +8002d6e0: 10000015 b 8002d738 <GsSortSprite+0x9e0> +8002d6e4: 00000000 nop + else if(sprite->scaley <= -2) +8002d6e8: 8fc20068 lw v0,104(s8) +8002d6ec: 00000000 nop +8002d6f0: 8c42001c lw v0,28(v0) +8002d6f4: 00000000 nop +8002d6f8: 2842ffff slti v0,v0,-1 +8002d6fc: 1040000e beqz v0,8002d738 <GsSortSprite+0x9e0> +8002d700: 00000000 nop + y/=-sprite->scaley; +8002d704: 8fc20068 lw v0,104(s8) +8002d708: 00000000 nop +8002d70c: 8c42001c lw v0,28(v0) +8002d710: 00000000 nop +8002d714: 00021023 negu v0,v0 +8002d718: 8fc3001c lw v1,28(s8) +8002d71c: 00000000 nop +8002d720: 14400002 bnez v0,8002d72c <GsSortSprite+0x9d4> +8002d724: 0062001a div zero,v1,v0 +8002d728: 0007000d break 0x7 +8002d72c: 00001010 mfhi v0 +8002d730: 00001012 mflo v0 +8002d734: afc2001c sw v0,28(s8) + } + + tpoly4.x[0] = tpoly4.x[1] = sx; +8002d738: 8fc20020 lw v0,32(s8) +8002d73c: 00000000 nop +8002d740: 00021400 sll v0,v0,0x10 +8002d744: 00021403 sra v0,v0,0x10 +8002d748: a7c20032 sh v0,50(s8) +8002d74c: 87c20032 lh v0,50(s8) +8002d750: 00000000 nop +8002d754: a7c20030 sh v0,48(s8) + tpoly4.x[2] = tpoly4.x[3] = (sx + x); +8002d758: 8fc20020 lw v0,32(s8) +8002d75c: 00000000 nop +8002d760: 3043ffff andi v1,v0,0xffff +8002d764: 8fc20018 lw v0,24(s8) +8002d768: 00000000 nop +8002d76c: 3042ffff andi v0,v0,0xffff +8002d770: 00621021 addu v0,v1,v0 +8002d774: 3042ffff andi v0,v0,0xffff +8002d778: 00021400 sll v0,v0,0x10 +8002d77c: 00021403 sra v0,v0,0x10 +8002d780: a7c20036 sh v0,54(s8) +8002d784: 87c20036 lh v0,54(s8) +8002d788: 00000000 nop +8002d78c: a7c20034 sh v0,52(s8) + tpoly4.y[0] = tpoly4.y[2] = sy; +8002d790: 8fc20024 lw v0,36(s8) +8002d794: 00000000 nop +8002d798: 00021400 sll v0,v0,0x10 +8002d79c: 00021403 sra v0,v0,0x10 +8002d7a0: a7c2003c sh v0,60(s8) +8002d7a4: 87c2003c lh v0,60(s8) +8002d7a8: 00000000 nop +8002d7ac: a7c20038 sh v0,56(s8) + tpoly4.y[1] = tpoly4.y[3] = (sy + y); +8002d7b0: 8fc20024 lw v0,36(s8) +8002d7b4: 00000000 nop +8002d7b8: 3043ffff andi v1,v0,0xffff +8002d7bc: 8fc2001c lw v0,28(s8) +8002d7c0: 00000000 nop +8002d7c4: 3042ffff andi v0,v0,0xffff +8002d7c8: 00621021 addu v0,v1,v0 +8002d7cc: 3042ffff andi v0,v0,0xffff +8002d7d0: 00021400 sll v0,v0,0x10 +8002d7d4: 00021403 sra v0,v0,0x10 +8002d7d8: a7c2003e sh v0,62(s8) +8002d7dc: 87c2003e lh v0,62(s8) +8002d7e0: 00000000 nop +8002d7e4: a7c2003a sh v0,58(s8) + + if(sprite->attribute & H_FLIP) +8002d7e8: 8fc20068 lw v0,104(s8) +8002d7ec: 00000000 nop +8002d7f0: 8c420014 lw v0,20(v0) +8002d7f4: 00000000 nop +8002d7f8: 30420020 andi v0,v0,0x20 +8002d7fc: 1040001b beqz v0,8002d86c <GsSortSprite+0xb14> +8002d800: 00000000 nop + { + tpoly4.u[0] = tpoly4.u[1] = (sprite->u + sprite->w) - 1; +8002d804: 8fc20068 lw v0,104(s8) +8002d808: 00000000 nop +8002d80c: 90430004 lbu v1,4(v0) +8002d810: 8fc20068 lw v0,104(s8) +8002d814: 00000000 nop +8002d818: 84420006 lh v0,6(v0) +8002d81c: 00000000 nop +8002d820: 304200ff andi v0,v0,0xff +8002d824: 00621021 addu v0,v1,v0 +8002d828: 304200ff andi v0,v0,0xff +8002d82c: 2442ffff addiu v0,v0,-1 +8002d830: 304200ff andi v0,v0,0xff +8002d834: a3c2004a sb v0,74(s8) +8002d838: 93c2004a lbu v0,74(s8) +8002d83c: 00000000 nop +8002d840: a3c20049 sb v0,73(s8) + tpoly4.u[2] = tpoly4.u[3] = sprite->u; +8002d844: 8fc20068 lw v0,104(s8) +8002d848: 00000000 nop +8002d84c: 90420004 lbu v0,4(v0) +8002d850: 00000000 nop +8002d854: a3c2004c sb v0,76(s8) +8002d858: 93c2004c lbu v0,76(s8) +8002d85c: 00000000 nop +8002d860: a3c2004b sb v0,75(s8) +8002d864: 10000017 b 8002d8c4 <GsSortSprite+0xb6c> +8002d868: 00000000 nop + } + else + { + tpoly4.u[0] = tpoly4.u[1] = sprite->u; +8002d86c: 8fc20068 lw v0,104(s8) +8002d870: 00000000 nop +8002d874: 90420004 lbu v0,4(v0) +8002d878: 00000000 nop +8002d87c: a3c2004a sb v0,74(s8) +8002d880: 93c2004a lbu v0,74(s8) +8002d884: 00000000 nop +8002d888: a3c20049 sb v0,73(s8) + tpoly4.u[2] = tpoly4.u[3] = (sprite->u + sprite->w); +8002d88c: 8fc20068 lw v0,104(s8) +8002d890: 00000000 nop +8002d894: 90430004 lbu v1,4(v0) +8002d898: 8fc20068 lw v0,104(s8) +8002d89c: 00000000 nop +8002d8a0: 84420006 lh v0,6(v0) +8002d8a4: 00000000 nop +8002d8a8: 304200ff andi v0,v0,0xff +8002d8ac: 00621021 addu v0,v1,v0 +8002d8b0: 304200ff andi v0,v0,0xff +8002d8b4: a3c2004c sb v0,76(s8) +8002d8b8: 93c2004c lbu v0,76(s8) +8002d8bc: 00000000 nop +8002d8c0: a3c2004b sb v0,75(s8) + } + + if(sprite->attribute & V_FLIP) +8002d8c4: 8fc20068 lw v0,104(s8) +8002d8c8: 00000000 nop +8002d8cc: 8c420014 lw v0,20(v0) +8002d8d0: 00000000 nop +8002d8d4: 30420040 andi v0,v0,0x40 +8002d8d8: 1040001b beqz v0,8002d948 <GsSortSprite+0xbf0> +8002d8dc: 00000000 nop + { + tpoly4.v[0] = tpoly4.v[2] = (sprite->v + sprite->h) - 1; +8002d8e0: 8fc20068 lw v0,104(s8) +8002d8e4: 00000000 nop +8002d8e8: 90430005 lbu v1,5(v0) +8002d8ec: 8fc20068 lw v0,104(s8) +8002d8f0: 00000000 nop +8002d8f4: 84420008 lh v0,8(v0) +8002d8f8: 00000000 nop +8002d8fc: 304200ff andi v0,v0,0xff +8002d900: 00621021 addu v0,v1,v0 +8002d904: 304200ff andi v0,v0,0xff +8002d908: 2442ffff addiu v0,v0,-1 +8002d90c: 304200ff andi v0,v0,0xff +8002d910: a3c2004f sb v0,79(s8) +8002d914: 93c2004f lbu v0,79(s8) +8002d918: 00000000 nop +8002d91c: a3c2004d sb v0,77(s8) + tpoly4.v[1] = tpoly4.v[3] = sprite->v; +8002d920: 8fc20068 lw v0,104(s8) +8002d924: 00000000 nop +8002d928: 90420005 lbu v0,5(v0) +8002d92c: 00000000 nop +8002d930: a3c20050 sb v0,80(s8) +8002d934: 93c20050 lbu v0,80(s8) +8002d938: 00000000 nop +8002d93c: a3c2004e sb v0,78(s8) +8002d940: 10000017 b 8002d9a0 <GsSortSprite+0xc48> +8002d944: 00000000 nop + } + else + { + tpoly4.v[0] = tpoly4.v[2] = sprite->v; +8002d948: 8fc20068 lw v0,104(s8) +8002d94c: 00000000 nop +8002d950: 90420005 lbu v0,5(v0) +8002d954: 00000000 nop +8002d958: a3c2004f sb v0,79(s8) +8002d95c: 93c2004f lbu v0,79(s8) +8002d960: 00000000 nop +8002d964: a3c2004d sb v0,77(s8) + tpoly4.v[1] = tpoly4.v[3] = (sprite->v + sprite->h); +8002d968: 8fc20068 lw v0,104(s8) +8002d96c: 00000000 nop +8002d970: 90430005 lbu v1,5(v0) +8002d974: 8fc20068 lw v0,104(s8) +8002d978: 00000000 nop +8002d97c: 84420008 lh v0,8(v0) +8002d980: 00000000 nop +8002d984: 304200ff andi v0,v0,0xff +8002d988: 00621021 addu v0,v1,v0 +8002d98c: 304200ff andi v0,v0,0xff +8002d990: a3c20050 sb v0,80(s8) +8002d994: 93c20050 lbu v0,80(s8) +8002d998: 00000000 nop +8002d99c: a3c2004e sb v0,78(s8) + } + + tpoly4.r = sprite->r; +8002d9a0: 8fc20068 lw v0,104(s8) +8002d9a4: 00000000 nop +8002d9a8: 9042000e lbu v0,14(v0) +8002d9ac: 00000000 nop +8002d9b0: a3c20040 sb v0,64(s8) + tpoly4.g = sprite->g; +8002d9b4: 8fc20068 lw v0,104(s8) +8002d9b8: 00000000 nop +8002d9bc: 9042000f lbu v0,15(v0) +8002d9c0: 00000000 nop +8002d9c4: a3c20041 sb v0,65(s8) + tpoly4.b = sprite->b; +8002d9c8: 8fc20068 lw v0,104(s8) +8002d9cc: 00000000 nop +8002d9d0: 90420010 lbu v0,16(v0) +8002d9d4: 00000000 nop +8002d9d8: a3c20042 sb v0,66(s8) + tpoly4.attribute = sprite->attribute; +8002d9dc: 8fc20068 lw v0,104(s8) +8002d9e0: 00000000 nop +8002d9e4: 8c420014 lw v0,20(v0) +8002d9e8: 00000000 nop +8002d9ec: afc20054 sw v0,84(s8) + tpoly4.tpage = sprite->tpage; +8002d9f0: 8fc20068 lw v0,104(s8) +8002d9f4: 00000000 nop +8002d9f8: 90420011 lbu v0,17(v0) +8002d9fc: 00000000 nop +8002da00: a3c20048 sb v0,72(s8) + tpoly4.cx = sprite->cx; +8002da04: 8fc20068 lw v0,104(s8) +8002da08: 00000000 nop +8002da0c: 8442000a lh v0,10(v0) +8002da10: 00000000 nop +8002da14: a7c20044 sh v0,68(s8) + tpoly4.cy = sprite->cy; +8002da18: 8fc20068 lw v0,104(s8) +8002da1c: 00000000 nop +8002da20: 8442000c lh v0,12(v0) +8002da24: 00000000 nop +8002da28: a7c20046 sh v0,70(s8) + + GsSortTPoly4(&tpoly4); +8002da2c: 27c20030 addiu v0,s8,48 +8002da30: 00402021 move a0,v0 +8002da34: 0c00b7fe jal 8002dff8 <GsSortTPoly4> +8002da38: 00000000 nop + } + else + { + GsSortSimpleSprite(sprite); + } +} +8002da3c: 10000004 b 8002da50 <GsSortSprite+0xcf8> +8002da40: 00000000 nop + + GsSortTPoly4(&tpoly4); + } + else + { + GsSortSimpleSprite(sprite); +8002da44: 8fc40068 lw a0,104(s8) +8002da48: 0c00b69c jal 8002da70 <GsSortSimpleSprite> +8002da4c: 00000000 nop + } +} +8002da50: 00000000 nop +8002da54: 03c0e821 move sp,s8 +8002da58: 8fbf0064 lw ra,100(sp) +8002da5c: 8fbe0060 lw s8,96(sp) +8002da60: 8fb0005c lw s0,92(sp) +8002da64: 27bd0068 addiu sp,sp,104 +8002da68: 03e00008 jr ra +8002da6c: 00000000 nop + +8002da70 <GsSortSimpleSprite>: + +void GsSortSimpleSprite(GsSprite *sprite) +{ +8002da70: 27bdffd8 addiu sp,sp,-40 +8002da74: afbf0024 sw ra,36(sp) +8002da78: afbe0020 sw s8,32(sp) +8002da7c: 03a0f021 move s8,sp +8002da80: afc40028 sw a0,40(s8) + unsigned int orig_pos = linked_list_pos; +8002da84: 3c028007 lui v0,0x8007 +8002da88: 8c421cd8 lw v0,7384(v0) +8002da8c: 00000000 nop +8002da90: afc20010 sw v0,16(s8) + unsigned char pkt = 0x64; +8002da94: 24020064 li v0,100 +8002da98: a3c20018 sb v0,24(s8) + unsigned int md; + + md = setup_attribs(sprite->tpage, sprite->attribute, &pkt); +8002da9c: 8fc20028 lw v0,40(s8) +8002daa0: 00000000 nop +8002daa4: 90420011 lbu v0,17(v0) +8002daa8: 00000000 nop +8002daac: 00402021 move a0,v0 +8002dab0: 8fc20028 lw v0,40(s8) +8002dab4: 00000000 nop +8002dab8: 8c420014 lw v0,20(v0) +8002dabc: 27c30018 addiu v1,s8,24 +8002dac0: 00603021 move a2,v1 +8002dac4: 00402821 move a1,v0 +8002dac8: 0c00bbd0 jal 8002ef40 <setup_attribs> +8002dacc: 00000000 nop +8002dad0: afc20014 sw v0,20(s8) + + linked_list[linked_list_pos++] = 0x05000000; +8002dad4: 3c028007 lui v0,0x8007 +8002dad8: 8c431cd4 lw v1,7380(v0) +8002dadc: 3c028007 lui v0,0x8007 +8002dae0: 8c421cd8 lw v0,7384(v0) +8002dae4: 00000000 nop +8002dae8: 24450001 addiu a1,v0,1 +8002daec: 3c048007 lui a0,0x8007 +8002daf0: ac851cd8 sw a1,7384(a0) +8002daf4: 00021080 sll v0,v0,0x2 +8002daf8: 00621021 addu v0,v1,v0 +8002dafc: 3c030500 lui v1,0x500 +8002db00: ac430000 sw v1,0(v0) + linked_list[linked_list_pos++] = md; +8002db04: 3c028007 lui v0,0x8007 +8002db08: 8c431cd4 lw v1,7380(v0) +8002db0c: 3c028007 lui v0,0x8007 +8002db10: 8c421cd8 lw v0,7384(v0) +8002db14: 00000000 nop +8002db18: 24450001 addiu a1,v0,1 +8002db1c: 3c048007 lui a0,0x8007 +8002db20: ac851cd8 sw a1,7384(a0) +8002db24: 00021080 sll v0,v0,0x2 +8002db28: 00621021 addu v0,v1,v0 +8002db2c: 8fc30014 lw v1,20(s8) +8002db30: 00000000 nop +8002db34: ac430000 sw v1,0(v0) + linked_list[linked_list_pos++] = (pkt<<24)|(sprite->b<<16)|(sprite->g<<8)|sprite->r; +8002db38: 3c028007 lui v0,0x8007 +8002db3c: 8c431cd4 lw v1,7380(v0) +8002db40: 3c028007 lui v0,0x8007 +8002db44: 8c421cd8 lw v0,7384(v0) +8002db48: 00000000 nop +8002db4c: 24450001 addiu a1,v0,1 +8002db50: 3c048007 lui a0,0x8007 +8002db54: ac851cd8 sw a1,7384(a0) +8002db58: 00021080 sll v0,v0,0x2 +8002db5c: 00621021 addu v0,v1,v0 +8002db60: 93c30018 lbu v1,24(s8) +8002db64: 00000000 nop +8002db68: 00032600 sll a0,v1,0x18 +8002db6c: 8fc30028 lw v1,40(s8) +8002db70: 00000000 nop +8002db74: 90630010 lbu v1,16(v1) +8002db78: 00000000 nop +8002db7c: 00031c00 sll v1,v1,0x10 +8002db80: 00832025 or a0,a0,v1 +8002db84: 8fc30028 lw v1,40(s8) +8002db88: 00000000 nop +8002db8c: 9063000f lbu v1,15(v1) +8002db90: 00000000 nop +8002db94: 00031a00 sll v1,v1,0x8 +8002db98: 00831825 or v1,a0,v1 +8002db9c: 8fc40028 lw a0,40(s8) +8002dba0: 00000000 nop +8002dba4: 9084000e lbu a0,14(a0) +8002dba8: 00000000 nop +8002dbac: 00641825 or v1,v1,a0 +8002dbb0: ac430000 sw v1,0(v0) + linked_list[linked_list_pos++] = ((sprite->y&0x7ff)<<16)|(sprite->x&0x7ff); +8002dbb4: 3c028007 lui v0,0x8007 +8002dbb8: 8c431cd4 lw v1,7380(v0) +8002dbbc: 3c028007 lui v0,0x8007 +8002dbc0: 8c421cd8 lw v0,7384(v0) +8002dbc4: 00000000 nop +8002dbc8: 24450001 addiu a1,v0,1 +8002dbcc: 3c048007 lui a0,0x8007 +8002dbd0: ac851cd8 sw a1,7384(a0) +8002dbd4: 00021080 sll v0,v0,0x2 +8002dbd8: 00621021 addu v0,v1,v0 +8002dbdc: 8fc30028 lw v1,40(s8) +8002dbe0: 00000000 nop +8002dbe4: 84630002 lh v1,2(v1) +8002dbe8: 00000000 nop +8002dbec: 3063ffff andi v1,v1,0xffff +8002dbf0: 306307ff andi v1,v1,0x7ff +8002dbf4: 00032400 sll a0,v1,0x10 +8002dbf8: 8fc30028 lw v1,40(s8) +8002dbfc: 00000000 nop +8002dc00: 84630000 lh v1,0(v1) +8002dc04: 00000000 nop +8002dc08: 3063ffff andi v1,v1,0xffff +8002dc0c: 306307ff andi v1,v1,0x7ff +8002dc10: 00831825 or v1,a0,v1 +8002dc14: ac430000 sw v1,0(v0) + linked_list[linked_list_pos++] = (get_clutid(sprite->cx,sprite->cy)<<16)|(sprite->v<<8)|sprite->u; +8002dc18: 3c028007 lui v0,0x8007 +8002dc1c: 8c431cd4 lw v1,7380(v0) +8002dc20: 3c028007 lui v0,0x8007 +8002dc24: 8c421cd8 lw v0,7384(v0) +8002dc28: 00000000 nop +8002dc2c: 24450001 addiu a1,v0,1 +8002dc30: 3c048007 lui a0,0x8007 +8002dc34: ac851cd8 sw a1,7384(a0) +8002dc38: 00021080 sll v0,v0,0x2 +8002dc3c: 00621021 addu v0,v1,v0 +8002dc40: 8fc30028 lw v1,40(s8) +8002dc44: 00000000 nop +8002dc48: 8463000a lh v1,10(v1) +8002dc4c: 00000000 nop +8002dc50: 3063ffff andi v1,v1,0xffff +8002dc54: 306303ff andi v1,v1,0x3ff +8002dc58: 00032103 sra a0,v1,0x4 +8002dc5c: 8fc30028 lw v1,40(s8) +8002dc60: 00000000 nop +8002dc64: 8463000c lh v1,12(v1) +8002dc68: 00000000 nop +8002dc6c: 3063ffff andi v1,v1,0xffff +8002dc70: 306301ff andi v1,v1,0x1ff +8002dc74: 00031980 sll v1,v1,0x6 +8002dc78: 00831825 or v1,a0,v1 +8002dc7c: 00032400 sll a0,v1,0x10 +8002dc80: 8fc30028 lw v1,40(s8) +8002dc84: 00000000 nop +8002dc88: 90630005 lbu v1,5(v1) +8002dc8c: 00000000 nop +8002dc90: 00031a00 sll v1,v1,0x8 +8002dc94: 00831825 or v1,a0,v1 +8002dc98: 8fc40028 lw a0,40(s8) +8002dc9c: 00000000 nop +8002dca0: 90840004 lbu a0,4(a0) +8002dca4: 00000000 nop +8002dca8: 00641825 or v1,v1,a0 +8002dcac: ac430000 sw v1,0(v0) + linked_list[linked_list_pos++] = (sprite->h<<16)|sprite->w; +8002dcb0: 3c028007 lui v0,0x8007 +8002dcb4: 8c431cd4 lw v1,7380(v0) +8002dcb8: 3c028007 lui v0,0x8007 +8002dcbc: 8c421cd8 lw v0,7384(v0) +8002dcc0: 00000000 nop +8002dcc4: 24450001 addiu a1,v0,1 +8002dcc8: 3c048007 lui a0,0x8007 +8002dccc: ac851cd8 sw a1,7384(a0) +8002dcd0: 00021080 sll v0,v0,0x2 +8002dcd4: 00621021 addu v0,v1,v0 +8002dcd8: 8fc30028 lw v1,40(s8) +8002dcdc: 00000000 nop +8002dce0: 84630008 lh v1,8(v1) +8002dce4: 00000000 nop +8002dce8: 00031c00 sll v1,v1,0x10 +8002dcec: 8fc40028 lw a0,40(s8) +8002dcf0: 00000000 nop +8002dcf4: 84840006 lh a0,6(a0) +8002dcf8: 00000000 nop +8002dcfc: 00641825 or v1,v1,a0 +8002dd00: ac430000 sw v1,0(v0) + + linked_list[orig_pos] |= ((unsigned int)&linked_list[linked_list_pos]) & 0xffffff; +8002dd04: 3c028007 lui v0,0x8007 +8002dd08: 8c431cd4 lw v1,7380(v0) +8002dd0c: 8fc20010 lw v0,16(s8) +8002dd10: 00000000 nop +8002dd14: 00021080 sll v0,v0,0x2 +8002dd18: 00621021 addu v0,v1,v0 +8002dd1c: 3c038007 lui v1,0x8007 +8002dd20: 8c641cd4 lw a0,7380(v1) +8002dd24: 8fc30010 lw v1,16(s8) +8002dd28: 00000000 nop +8002dd2c: 00031880 sll v1,v1,0x2 +8002dd30: 00831821 addu v1,a0,v1 +8002dd34: 8c640000 lw a0,0(v1) +8002dd38: 3c038007 lui v1,0x8007 +8002dd3c: 8c651cd4 lw a1,7380(v1) +8002dd40: 3c038007 lui v1,0x8007 +8002dd44: 8c631cd8 lw v1,7384(v1) +8002dd48: 00000000 nop +8002dd4c: 00031880 sll v1,v1,0x2 +8002dd50: 00a31821 addu v1,a1,v1 +8002dd54: 00602821 move a1,v1 +8002dd58: 3c0300ff lui v1,0xff +8002dd5c: 3463ffff ori v1,v1,0xffff +8002dd60: 00a31824 and v1,a1,v1 +8002dd64: 00831825 or v1,a0,v1 +8002dd68: ac430000 sw v1,0(v0) +} +8002dd6c: 00000000 nop +8002dd70: 03c0e821 move sp,s8 +8002dd74: 8fbf0024 lw ra,36(sp) +8002dd78: 8fbe0020 lw s8,32(sp) +8002dd7c: 27bd0028 addiu sp,sp,40 +8002dd80: 03e00008 jr ra +8002dd84: 00000000 nop + +8002dd88 <GsSortRectangle>: + +void GsSortRectangle(GsRectangle *rectangle) +{ +8002dd88: 27bdffd8 addiu sp,sp,-40 +8002dd8c: afbf0024 sw ra,36(sp) +8002dd90: afbe0020 sw s8,32(sp) +8002dd94: 03a0f021 move s8,sp +8002dd98: afc40028 sw a0,40(s8) + unsigned int orig_pos = linked_list_pos; +8002dd9c: 3c028007 lui v0,0x8007 +8002dda0: 8c421cd8 lw v0,7384(v0) +8002dda4: 00000000 nop +8002dda8: afc20010 sw v0,16(s8) + unsigned char pkt = 0x60; +8002ddac: 24020060 li v0,96 +8002ddb0: a3c20018 sb v0,24(s8) + unsigned int md; + + md = setup_attribs(0, rectangle->attribute, &pkt); +8002ddb4: 8fc20028 lw v0,40(s8) +8002ddb8: 00000000 nop +8002ddbc: 8c42000c lw v0,12(v0) +8002ddc0: 27c30018 addiu v1,s8,24 +8002ddc4: 00603021 move a2,v1 +8002ddc8: 00402821 move a1,v0 +8002ddcc: 00002021 move a0,zero +8002ddd0: 0c00bbd0 jal 8002ef40 <setup_attribs> +8002ddd4: 00000000 nop +8002ddd8: afc20014 sw v0,20(s8) + + linked_list[linked_list_pos++] = 0x04000000; +8002dddc: 3c028007 lui v0,0x8007 +8002dde0: 8c431cd4 lw v1,7380(v0) +8002dde4: 3c028007 lui v0,0x8007 +8002dde8: 8c421cd8 lw v0,7384(v0) +8002ddec: 00000000 nop +8002ddf0: 24450001 addiu a1,v0,1 +8002ddf4: 3c048007 lui a0,0x8007 +8002ddf8: ac851cd8 sw a1,7384(a0) +8002ddfc: 00021080 sll v0,v0,0x2 +8002de00: 00621021 addu v0,v1,v0 +8002de04: 3c030400 lui v1,0x400 +8002de08: ac430000 sw v1,0(v0) + linked_list[linked_list_pos++] = md; +8002de0c: 3c028007 lui v0,0x8007 +8002de10: 8c431cd4 lw v1,7380(v0) +8002de14: 3c028007 lui v0,0x8007 +8002de18: 8c421cd8 lw v0,7384(v0) +8002de1c: 00000000 nop +8002de20: 24450001 addiu a1,v0,1 +8002de24: 3c048007 lui a0,0x8007 +8002de28: ac851cd8 sw a1,7384(a0) +8002de2c: 00021080 sll v0,v0,0x2 +8002de30: 00621021 addu v0,v1,v0 +8002de34: 8fc30014 lw v1,20(s8) +8002de38: 00000000 nop +8002de3c: ac430000 sw v1,0(v0) + linked_list[linked_list_pos++] = (pkt<<24)|(rectangle->b<<16)|(rectangle->g<<8)|(rectangle->r); +8002de40: 3c028007 lui v0,0x8007 +8002de44: 8c431cd4 lw v1,7380(v0) +8002de48: 3c028007 lui v0,0x8007 +8002de4c: 8c421cd8 lw v0,7384(v0) +8002de50: 00000000 nop +8002de54: 24450001 addiu a1,v0,1 +8002de58: 3c048007 lui a0,0x8007 +8002de5c: ac851cd8 sw a1,7384(a0) +8002de60: 00021080 sll v0,v0,0x2 +8002de64: 00621021 addu v0,v1,v0 +8002de68: 93c30018 lbu v1,24(s8) +8002de6c: 00000000 nop +8002de70: 00032600 sll a0,v1,0x18 +8002de74: 8fc30028 lw v1,40(s8) +8002de78: 00000000 nop +8002de7c: 9063000a lbu v1,10(v1) +8002de80: 00000000 nop +8002de84: 00031c00 sll v1,v1,0x10 +8002de88: 00832025 or a0,a0,v1 +8002de8c: 8fc30028 lw v1,40(s8) +8002de90: 00000000 nop +8002de94: 90630009 lbu v1,9(v1) +8002de98: 00000000 nop +8002de9c: 00031a00 sll v1,v1,0x8 +8002dea0: 00831825 or v1,a0,v1 +8002dea4: 8fc40028 lw a0,40(s8) +8002dea8: 00000000 nop +8002deac: 90840008 lbu a0,8(a0) +8002deb0: 00000000 nop +8002deb4: 00641825 or v1,v1,a0 +8002deb8: ac430000 sw v1,0(v0) + linked_list[linked_list_pos++] = ((rectangle->y&0x7ff)<<16)|(rectangle->x&0x7ff); +8002debc: 3c028007 lui v0,0x8007 +8002dec0: 8c431cd4 lw v1,7380(v0) +8002dec4: 3c028007 lui v0,0x8007 +8002dec8: 8c421cd8 lw v0,7384(v0) +8002decc: 00000000 nop +8002ded0: 24450001 addiu a1,v0,1 +8002ded4: 3c048007 lui a0,0x8007 +8002ded8: ac851cd8 sw a1,7384(a0) +8002dedc: 00021080 sll v0,v0,0x2 +8002dee0: 00621021 addu v0,v1,v0 +8002dee4: 8fc30028 lw v1,40(s8) +8002dee8: 00000000 nop +8002deec: 84630002 lh v1,2(v1) +8002def0: 00000000 nop +8002def4: 3063ffff andi v1,v1,0xffff +8002def8: 306307ff andi v1,v1,0x7ff +8002defc: 00032400 sll a0,v1,0x10 +8002df00: 8fc30028 lw v1,40(s8) +8002df04: 00000000 nop +8002df08: 84630000 lh v1,0(v1) +8002df0c: 00000000 nop +8002df10: 3063ffff andi v1,v1,0xffff +8002df14: 306307ff andi v1,v1,0x7ff +8002df18: 00831825 or v1,a0,v1 +8002df1c: ac430000 sw v1,0(v0) + linked_list[linked_list_pos++] = (rectangle->h<<16)|rectangle->w; +8002df20: 3c028007 lui v0,0x8007 +8002df24: 8c431cd4 lw v1,7380(v0) +8002df28: 3c028007 lui v0,0x8007 +8002df2c: 8c421cd8 lw v0,7384(v0) +8002df30: 00000000 nop +8002df34: 24450001 addiu a1,v0,1 +8002df38: 3c048007 lui a0,0x8007 +8002df3c: ac851cd8 sw a1,7384(a0) +8002df40: 00021080 sll v0,v0,0x2 +8002df44: 00621021 addu v0,v1,v0 +8002df48: 8fc30028 lw v1,40(s8) +8002df4c: 00000000 nop +8002df50: 84630006 lh v1,6(v1) +8002df54: 00000000 nop +8002df58: 00031c00 sll v1,v1,0x10 +8002df5c: 8fc40028 lw a0,40(s8) +8002df60: 00000000 nop +8002df64: 84840004 lh a0,4(a0) +8002df68: 00000000 nop +8002df6c: 00641825 or v1,v1,a0 +8002df70: ac430000 sw v1,0(v0) + + linked_list[orig_pos] |= ((unsigned int)&linked_list[linked_list_pos]) & 0xffffff; +8002df74: 3c028007 lui v0,0x8007 +8002df78: 8c431cd4 lw v1,7380(v0) +8002df7c: 8fc20010 lw v0,16(s8) +8002df80: 00000000 nop +8002df84: 00021080 sll v0,v0,0x2 +8002df88: 00621021 addu v0,v1,v0 +8002df8c: 3c038007 lui v1,0x8007 +8002df90: 8c641cd4 lw a0,7380(v1) +8002df94: 8fc30010 lw v1,16(s8) +8002df98: 00000000 nop +8002df9c: 00031880 sll v1,v1,0x2 +8002dfa0: 00831821 addu v1,a0,v1 +8002dfa4: 8c640000 lw a0,0(v1) +8002dfa8: 3c038007 lui v1,0x8007 +8002dfac: 8c651cd4 lw a1,7380(v1) +8002dfb0: 3c038007 lui v1,0x8007 +8002dfb4: 8c631cd8 lw v1,7384(v1) +8002dfb8: 00000000 nop +8002dfbc: 00031880 sll v1,v1,0x2 +8002dfc0: 00a31821 addu v1,a1,v1 +8002dfc4: 00602821 move a1,v1 +8002dfc8: 3c0300ff lui v1,0xff +8002dfcc: 3463ffff ori v1,v1,0xffff +8002dfd0: 00a31824 and v1,a1,v1 +8002dfd4: 00831825 or v1,a0,v1 +8002dfd8: ac430000 sw v1,0(v0) +} +8002dfdc: 00000000 nop +8002dfe0: 03c0e821 move sp,s8 +8002dfe4: 8fbf0024 lw ra,36(sp) +8002dfe8: 8fbe0020 lw s8,32(sp) +8002dfec: 27bd0028 addiu sp,sp,40 +8002dff0: 03e00008 jr ra +8002dff4: 00000000 nop + +8002dff8 <GsSortTPoly4>: + +void GsSortTPoly4(GsTPoly4 *tpoly4) +{ +8002dff8: 27bdffd8 addiu sp,sp,-40 +8002dffc: afbf0024 sw ra,36(sp) +8002e000: afbe0020 sw s8,32(sp) +8002e004: 03a0f021 move s8,sp +8002e008: afc40028 sw a0,40(s8) + unsigned int orig_pos = linked_list_pos; +8002e00c: 3c028007 lui v0,0x8007 +8002e010: 8c421cd8 lw v0,7384(v0) +8002e014: 00000000 nop +8002e018: afc20010 sw v0,16(s8) + unsigned char pkt = 0x2c; +8002e01c: 2402002c li v0,44 +8002e020: a3c20018 sb v0,24(s8) + + /*md = setup_attribs(tpoly4->tpage, tpoly4->attribute, &pkt);*/ + + //printf("tpoly4->tpage = %d\n", tpoly4->tpage); + + md = setup_attribs(tpoly4->tpage, tpoly4->attribute, &pkt); +8002e024: 8fc20028 lw v0,40(s8) +8002e028: 00000000 nop +8002e02c: 90420018 lbu v0,24(v0) +8002e030: 00000000 nop +8002e034: 00402021 move a0,v0 +8002e038: 8fc20028 lw v0,40(s8) +8002e03c: 00000000 nop +8002e040: 8c420024 lw v0,36(v0) +8002e044: 27c30018 addiu v1,s8,24 +8002e048: 00603021 move a2,v1 +8002e04c: 00402821 move a1,v0 +8002e050: 0c00bbd0 jal 8002ef40 <setup_attribs> +8002e054: 00000000 nop +8002e058: afc20014 sw v0,20(s8) + + //printf("pkt = %x\n", pkt); + + linked_list[linked_list_pos++] = 0x09000000; +8002e05c: 3c028007 lui v0,0x8007 +8002e060: 8c431cd4 lw v1,7380(v0) +8002e064: 3c028007 lui v0,0x8007 +8002e068: 8c421cd8 lw v0,7384(v0) +8002e06c: 00000000 nop +8002e070: 24450001 addiu a1,v0,1 +8002e074: 3c048007 lui a0,0x8007 +8002e078: ac851cd8 sw a1,7384(a0) +8002e07c: 00021080 sll v0,v0,0x2 +8002e080: 00621021 addu v0,v1,v0 +8002e084: 3c030900 lui v1,0x900 +8002e088: ac430000 sw v1,0(v0) + //linked_list[linked_list_pos++] = md; + //linked_list[linked_list_pos++] = 0xe0000000; + //linked_list[linked_list_pos++] = 0xe1000105; + + //printf("tpoly4 md: %08x\n", md); + linked_list[linked_list_pos++] = (pkt<<24)|(tpoly4->b<<16)|(tpoly4->g<<8)|(tpoly4->r); +8002e08c: 3c028007 lui v0,0x8007 +8002e090: 8c431cd4 lw v1,7380(v0) +8002e094: 3c028007 lui v0,0x8007 +8002e098: 8c421cd8 lw v0,7384(v0) +8002e09c: 00000000 nop +8002e0a0: 24450001 addiu a1,v0,1 +8002e0a4: 3c048007 lui a0,0x8007 +8002e0a8: ac851cd8 sw a1,7384(a0) +8002e0ac: 00021080 sll v0,v0,0x2 +8002e0b0: 00621021 addu v0,v1,v0 +8002e0b4: 93c30018 lbu v1,24(s8) +8002e0b8: 00000000 nop +8002e0bc: 00032600 sll a0,v1,0x18 +8002e0c0: 8fc30028 lw v1,40(s8) +8002e0c4: 00000000 nop +8002e0c8: 90630012 lbu v1,18(v1) +8002e0cc: 00000000 nop +8002e0d0: 00031c00 sll v1,v1,0x10 +8002e0d4: 00832025 or a0,a0,v1 +8002e0d8: 8fc30028 lw v1,40(s8) +8002e0dc: 00000000 nop +8002e0e0: 90630011 lbu v1,17(v1) +8002e0e4: 00000000 nop +8002e0e8: 00031a00 sll v1,v1,0x8 +8002e0ec: 00831825 or v1,a0,v1 +8002e0f0: 8fc40028 lw a0,40(s8) +8002e0f4: 00000000 nop +8002e0f8: 90840010 lbu a0,16(a0) +8002e0fc: 00000000 nop +8002e100: 00641825 or v1,v1,a0 +8002e104: ac430000 sw v1,0(v0) + linked_list[linked_list_pos++] = ((tpoly4->y[0]&0x7ff)<<16)|(tpoly4->x[0]&0x7ff); +8002e108: 3c028007 lui v0,0x8007 +8002e10c: 8c431cd4 lw v1,7380(v0) +8002e110: 3c028007 lui v0,0x8007 +8002e114: 8c421cd8 lw v0,7384(v0) +8002e118: 00000000 nop +8002e11c: 24450001 addiu a1,v0,1 +8002e120: 3c048007 lui a0,0x8007 +8002e124: ac851cd8 sw a1,7384(a0) +8002e128: 00021080 sll v0,v0,0x2 +8002e12c: 00621021 addu v0,v1,v0 +8002e130: 8fc30028 lw v1,40(s8) +8002e134: 00000000 nop +8002e138: 84630008 lh v1,8(v1) +8002e13c: 00000000 nop +8002e140: 3063ffff andi v1,v1,0xffff +8002e144: 306307ff andi v1,v1,0x7ff +8002e148: 00032400 sll a0,v1,0x10 +8002e14c: 8fc30028 lw v1,40(s8) +8002e150: 00000000 nop +8002e154: 84630000 lh v1,0(v1) +8002e158: 00000000 nop +8002e15c: 3063ffff andi v1,v1,0xffff +8002e160: 306307ff andi v1,v1,0x7ff +8002e164: 00831825 or v1,a0,v1 +8002e168: ac430000 sw v1,0(v0) + linked_list[linked_list_pos++] = (get_clutid(tpoly4->cx, tpoly4->cy)<<16)|(tpoly4->v[0]<<8)|tpoly4->u[0]; +8002e16c: 3c028007 lui v0,0x8007 +8002e170: 8c431cd4 lw v1,7380(v0) +8002e174: 3c028007 lui v0,0x8007 +8002e178: 8c421cd8 lw v0,7384(v0) +8002e17c: 00000000 nop +8002e180: 24450001 addiu a1,v0,1 +8002e184: 3c048007 lui a0,0x8007 +8002e188: ac851cd8 sw a1,7384(a0) +8002e18c: 00021080 sll v0,v0,0x2 +8002e190: 00621021 addu v0,v1,v0 +8002e194: 8fc30028 lw v1,40(s8) +8002e198: 00000000 nop +8002e19c: 84630014 lh v1,20(v1) +8002e1a0: 00000000 nop +8002e1a4: 3063ffff andi v1,v1,0xffff +8002e1a8: 306303ff andi v1,v1,0x3ff +8002e1ac: 00032103 sra a0,v1,0x4 +8002e1b0: 8fc30028 lw v1,40(s8) +8002e1b4: 00000000 nop +8002e1b8: 84630016 lh v1,22(v1) +8002e1bc: 00000000 nop +8002e1c0: 3063ffff andi v1,v1,0xffff +8002e1c4: 306301ff andi v1,v1,0x1ff +8002e1c8: 00031980 sll v1,v1,0x6 +8002e1cc: 00831825 or v1,a0,v1 +8002e1d0: 00032400 sll a0,v1,0x10 +8002e1d4: 8fc30028 lw v1,40(s8) +8002e1d8: 00000000 nop +8002e1dc: 9063001d lbu v1,29(v1) +8002e1e0: 00000000 nop +8002e1e4: 00031a00 sll v1,v1,0x8 +8002e1e8: 00831825 or v1,a0,v1 +8002e1ec: 8fc40028 lw a0,40(s8) +8002e1f0: 00000000 nop +8002e1f4: 90840019 lbu a0,25(a0) +8002e1f8: 00000000 nop +8002e1fc: 00641825 or v1,v1,a0 +8002e200: ac430000 sw v1,0(v0) + linked_list[linked_list_pos++] = ((tpoly4->y[1]&0x7ff)<<16)|(tpoly4->x[1]&0x7ff); +8002e204: 3c028007 lui v0,0x8007 +8002e208: 8c431cd4 lw v1,7380(v0) +8002e20c: 3c028007 lui v0,0x8007 +8002e210: 8c421cd8 lw v0,7384(v0) +8002e214: 00000000 nop +8002e218: 24450001 addiu a1,v0,1 +8002e21c: 3c048007 lui a0,0x8007 +8002e220: ac851cd8 sw a1,7384(a0) +8002e224: 00021080 sll v0,v0,0x2 +8002e228: 00621021 addu v0,v1,v0 +8002e22c: 8fc30028 lw v1,40(s8) +8002e230: 00000000 nop +8002e234: 8463000a lh v1,10(v1) +8002e238: 00000000 nop +8002e23c: 3063ffff andi v1,v1,0xffff +8002e240: 306307ff andi v1,v1,0x7ff +8002e244: 00032400 sll a0,v1,0x10 +8002e248: 8fc30028 lw v1,40(s8) +8002e24c: 00000000 nop +8002e250: 84630002 lh v1,2(v1) +8002e254: 00000000 nop +8002e258: 3063ffff andi v1,v1,0xffff +8002e25c: 306307ff andi v1,v1,0x7ff +8002e260: 00831825 or v1,a0,v1 +8002e264: ac430000 sw v1,0(v0) + linked_list[linked_list_pos++] = (md << 16)|(tpoly4->v[1]<<8)|tpoly4->u[1]; +8002e268: 3c028007 lui v0,0x8007 +8002e26c: 8c431cd4 lw v1,7380(v0) +8002e270: 3c028007 lui v0,0x8007 +8002e274: 8c421cd8 lw v0,7384(v0) +8002e278: 00000000 nop +8002e27c: 24450001 addiu a1,v0,1 +8002e280: 3c048007 lui a0,0x8007 +8002e284: ac851cd8 sw a1,7384(a0) +8002e288: 00021080 sll v0,v0,0x2 +8002e28c: 00621021 addu v0,v1,v0 +8002e290: 8fc30014 lw v1,20(s8) +8002e294: 00000000 nop +8002e298: 00031c00 sll v1,v1,0x10 +8002e29c: 8fc40028 lw a0,40(s8) +8002e2a0: 00000000 nop +8002e2a4: 9084001e lbu a0,30(a0) +8002e2a8: 00000000 nop +8002e2ac: 00042200 sll a0,a0,0x8 +8002e2b0: 00641825 or v1,v1,a0 +8002e2b4: 8fc40028 lw a0,40(s8) +8002e2b8: 00000000 nop +8002e2bc: 9084001a lbu a0,26(a0) +8002e2c0: 00000000 nop +8002e2c4: 00641825 or v1,v1,a0 +8002e2c8: ac430000 sw v1,0(v0) + linked_list[linked_list_pos++] = ((tpoly4->y[2]&0x7ff)<<16)|(tpoly4->x[2]&0x7ff); +8002e2cc: 3c028007 lui v0,0x8007 +8002e2d0: 8c431cd4 lw v1,7380(v0) +8002e2d4: 3c028007 lui v0,0x8007 +8002e2d8: 8c421cd8 lw v0,7384(v0) +8002e2dc: 00000000 nop +8002e2e0: 24450001 addiu a1,v0,1 +8002e2e4: 3c048007 lui a0,0x8007 +8002e2e8: ac851cd8 sw a1,7384(a0) +8002e2ec: 00021080 sll v0,v0,0x2 +8002e2f0: 00621021 addu v0,v1,v0 +8002e2f4: 8fc30028 lw v1,40(s8) +8002e2f8: 00000000 nop +8002e2fc: 8463000c lh v1,12(v1) +8002e300: 00000000 nop +8002e304: 3063ffff andi v1,v1,0xffff +8002e308: 306307ff andi v1,v1,0x7ff +8002e30c: 00032400 sll a0,v1,0x10 +8002e310: 8fc30028 lw v1,40(s8) +8002e314: 00000000 nop +8002e318: 84630004 lh v1,4(v1) +8002e31c: 00000000 nop +8002e320: 3063ffff andi v1,v1,0xffff +8002e324: 306307ff andi v1,v1,0x7ff +8002e328: 00831825 or v1,a0,v1 +8002e32c: ac430000 sw v1,0(v0) + linked_list[linked_list_pos++] = (tpoly4->v[2]<<8)|tpoly4->u[2]; +8002e330: 3c028007 lui v0,0x8007 +8002e334: 8c431cd4 lw v1,7380(v0) +8002e338: 3c028007 lui v0,0x8007 +8002e33c: 8c421cd8 lw v0,7384(v0) +8002e340: 00000000 nop +8002e344: 24450001 addiu a1,v0,1 +8002e348: 3c048007 lui a0,0x8007 +8002e34c: ac851cd8 sw a1,7384(a0) +8002e350: 00021080 sll v0,v0,0x2 +8002e354: 00621021 addu v0,v1,v0 +8002e358: 8fc30028 lw v1,40(s8) +8002e35c: 00000000 nop +8002e360: 9063001f lbu v1,31(v1) +8002e364: 00000000 nop +8002e368: 00031a00 sll v1,v1,0x8 +8002e36c: 8fc40028 lw a0,40(s8) +8002e370: 00000000 nop +8002e374: 9084001b lbu a0,27(a0) +8002e378: 00000000 nop +8002e37c: 00641825 or v1,v1,a0 +8002e380: ac430000 sw v1,0(v0) + linked_list[linked_list_pos++] = ((tpoly4->y[3]&0x7ff)<<16)|(tpoly4->x[3]&0x7ff); +8002e384: 3c028007 lui v0,0x8007 +8002e388: 8c431cd4 lw v1,7380(v0) +8002e38c: 3c028007 lui v0,0x8007 +8002e390: 8c421cd8 lw v0,7384(v0) +8002e394: 00000000 nop +8002e398: 24450001 addiu a1,v0,1 +8002e39c: 3c048007 lui a0,0x8007 +8002e3a0: ac851cd8 sw a1,7384(a0) +8002e3a4: 00021080 sll v0,v0,0x2 +8002e3a8: 00621021 addu v0,v1,v0 +8002e3ac: 8fc30028 lw v1,40(s8) +8002e3b0: 00000000 nop +8002e3b4: 8463000e lh v1,14(v1) +8002e3b8: 00000000 nop +8002e3bc: 3063ffff andi v1,v1,0xffff +8002e3c0: 306307ff andi v1,v1,0x7ff +8002e3c4: 00032400 sll a0,v1,0x10 +8002e3c8: 8fc30028 lw v1,40(s8) +8002e3cc: 00000000 nop +8002e3d0: 84630006 lh v1,6(v1) +8002e3d4: 00000000 nop +8002e3d8: 3063ffff andi v1,v1,0xffff +8002e3dc: 306307ff andi v1,v1,0x7ff +8002e3e0: 00831825 or v1,a0,v1 +8002e3e4: ac430000 sw v1,0(v0) + linked_list[linked_list_pos++] = (tpoly4->v[3]<<8)|tpoly4->u[3]; +8002e3e8: 3c028007 lui v0,0x8007 +8002e3ec: 8c431cd4 lw v1,7380(v0) +8002e3f0: 3c028007 lui v0,0x8007 +8002e3f4: 8c421cd8 lw v0,7384(v0) +8002e3f8: 00000000 nop +8002e3fc: 24450001 addiu a1,v0,1 +8002e400: 3c048007 lui a0,0x8007 +8002e404: ac851cd8 sw a1,7384(a0) +8002e408: 00021080 sll v0,v0,0x2 +8002e40c: 00621021 addu v0,v1,v0 +8002e410: 8fc30028 lw v1,40(s8) +8002e414: 00000000 nop +8002e418: 90630020 lbu v1,32(v1) +8002e41c: 00000000 nop +8002e420: 00031a00 sll v1,v1,0x8 +8002e424: 8fc40028 lw a0,40(s8) +8002e428: 00000000 nop +8002e42c: 9084001c lbu a0,28(a0) +8002e430: 00000000 nop +8002e434: 00641825 or v1,v1,a0 +8002e438: ac430000 sw v1,0(v0) + + linked_list[orig_pos] |= ((unsigned int)&linked_list[linked_list_pos]) & 0xffffff; +8002e43c: 3c028007 lui v0,0x8007 +8002e440: 8c431cd4 lw v1,7380(v0) +8002e444: 8fc20010 lw v0,16(s8) +8002e448: 00000000 nop +8002e44c: 00021080 sll v0,v0,0x2 +8002e450: 00621021 addu v0,v1,v0 +8002e454: 3c038007 lui v1,0x8007 +8002e458: 8c641cd4 lw a0,7380(v1) +8002e45c: 8fc30010 lw v1,16(s8) +8002e460: 00000000 nop +8002e464: 00031880 sll v1,v1,0x2 +8002e468: 00831821 addu v1,a0,v1 +8002e46c: 8c640000 lw a0,0(v1) +8002e470: 3c038007 lui v1,0x8007 +8002e474: 8c651cd4 lw a1,7380(v1) +8002e478: 3c038007 lui v1,0x8007 +8002e47c: 8c631cd8 lw v1,7384(v1) +8002e480: 00000000 nop +8002e484: 00031880 sll v1,v1,0x2 +8002e488: 00a31821 addu v1,a1,v1 +8002e48c: 00602821 move a1,v1 +8002e490: 3c0300ff lui v1,0xff +8002e494: 3463ffff ori v1,v1,0xffff +8002e498: 00a31824 and v1,a1,v1 +8002e49c: 00831825 or v1,a0,v1 +8002e4a0: ac430000 sw v1,0(v0) +} +8002e4a4: 00000000 nop +8002e4a8: 03c0e821 move sp,s8 +8002e4ac: 8fbf0024 lw ra,36(sp) +8002e4b0: 8fbe0020 lw s8,32(sp) +8002e4b4: 27bd0028 addiu sp,sp,40 +8002e4b8: 03e00008 jr ra +8002e4bc: 00000000 nop + +8002e4c0 <GsSortTPoly3>: + +void GsSortTPoly3(GsTPoly3 *tpoly3) +{ +8002e4c0: 27bdffd8 addiu sp,sp,-40 +8002e4c4: afbf0024 sw ra,36(sp) +8002e4c8: afbe0020 sw s8,32(sp) +8002e4cc: 03a0f021 move s8,sp +8002e4d0: afc40028 sw a0,40(s8) + int orig_pos = linked_list_pos; +8002e4d4: 3c028007 lui v0,0x8007 +8002e4d8: 8c421cd8 lw v0,7384(v0) +8002e4dc: 00000000 nop +8002e4e0: afc20014 sw v0,20(s8) + int x; + unsigned char pkt = 0x24; +8002e4e4: 24020024 li v0,36 +8002e4e8: a3c2001c sb v0,28(s8) + unsigned int md; + + md = setup_attribs(tpoly3->tpage, tpoly3->attribute, &pkt); +8002e4ec: 8fc20028 lw v0,40(s8) +8002e4f0: 00000000 nop +8002e4f4: 90420020 lbu v0,32(v0) +8002e4f8: 00000000 nop +8002e4fc: 00402021 move a0,v0 +8002e500: 8fc20028 lw v0,40(s8) +8002e504: 00000000 nop +8002e508: 8c42001c lw v0,28(v0) +8002e50c: 27c3001c addiu v1,s8,28 +8002e510: 00603021 move a2,v1 +8002e514: 00402821 move a1,v0 +8002e518: 0c00bbd0 jal 8002ef40 <setup_attribs> +8002e51c: 00000000 nop +8002e520: afc20018 sw v0,24(s8) + + linked_list[linked_list_pos++] = 0x07000000; +8002e524: 3c028007 lui v0,0x8007 +8002e528: 8c431cd4 lw v1,7380(v0) +8002e52c: 3c028007 lui v0,0x8007 +8002e530: 8c421cd8 lw v0,7384(v0) +8002e534: 00000000 nop +8002e538: 24450001 addiu a1,v0,1 +8002e53c: 3c048007 lui a0,0x8007 +8002e540: ac851cd8 sw a1,7384(a0) +8002e544: 00021080 sll v0,v0,0x2 +8002e548: 00621021 addu v0,v1,v0 +8002e54c: 3c030700 lui v1,0x700 +8002e550: ac430000 sw v1,0(v0) + linked_list[linked_list_pos++] = +8002e554: 3c028007 lui v0,0x8007 +8002e558: 8c431cd4 lw v1,7380(v0) +8002e55c: 3c028007 lui v0,0x8007 +8002e560: 8c421cd8 lw v0,7384(v0) +8002e564: 00000000 nop +8002e568: 24450001 addiu a1,v0,1 +8002e56c: 3c048007 lui a0,0x8007 +8002e570: ac851cd8 sw a1,7384(a0) +8002e574: 00021080 sll v0,v0,0x2 +8002e578: 00621021 addu v0,v1,v0 + (pkt<<24)|(tpoly3->b<<16)|(tpoly3->g<<8)|(tpoly3->r); +8002e57c: 93c3001c lbu v1,28(s8) +8002e580: 00000000 nop +8002e584: 00032600 sll a0,v1,0x18 +8002e588: 8fc30028 lw v1,40(s8) +8002e58c: 00000000 nop +8002e590: 90630002 lbu v1,2(v1) +8002e594: 00000000 nop +8002e598: 00031c00 sll v1,v1,0x10 +8002e59c: 00832025 or a0,a0,v1 +8002e5a0: 8fc30028 lw v1,40(s8) +8002e5a4: 00000000 nop +8002e5a8: 90630001 lbu v1,1(v1) +8002e5ac: 00000000 nop +8002e5b0: 00031a00 sll v1,v1,0x8 +8002e5b4: 00831825 or v1,a0,v1 +8002e5b8: 8fc40028 lw a0,40(s8) +8002e5bc: 00000000 nop +8002e5c0: 90840000 lbu a0,0(a0) +8002e5c4: 00000000 nop +8002e5c8: 00641825 or v1,v1,a0 + unsigned int md; + + md = setup_attribs(tpoly3->tpage, tpoly3->attribute, &pkt); + + linked_list[linked_list_pos++] = 0x07000000; + linked_list[linked_list_pos++] = +8002e5cc: ac430000 sw v1,0(v0) + (pkt<<24)|(tpoly3->b<<16)|(tpoly3->g<<8)|(tpoly3->r); + + for(x = 0; x < 3; x++) +8002e5d0: afc00010 sw zero,16(s8) +8002e5d4: 10000084 b 8002e7e8 <GsSortTPoly3+0x328> +8002e5d8: 00000000 nop + { + linked_list[linked_list_pos++] = ((tpoly3->y[x]&0x7ff)<<16)|(tpoly3->x[x]&0x7ff); +8002e5dc: 3c028007 lui v0,0x8007 +8002e5e0: 8c431cd4 lw v1,7380(v0) +8002e5e4: 3c028007 lui v0,0x8007 +8002e5e8: 8c421cd8 lw v0,7384(v0) +8002e5ec: 00000000 nop +8002e5f0: 24450001 addiu a1,v0,1 +8002e5f4: 3c048007 lui a0,0x8007 +8002e5f8: ac851cd8 sw a1,7384(a0) +8002e5fc: 00021080 sll v0,v0,0x2 +8002e600: 00621821 addu v1,v1,v0 +8002e604: 8fc40028 lw a0,40(s8) +8002e608: 8fc20010 lw v0,16(s8) +8002e60c: 00000000 nop +8002e610: 24420004 addiu v0,v0,4 +8002e614: 00021040 sll v0,v0,0x1 +8002e618: 00821021 addu v0,a0,v0 +8002e61c: 84420002 lh v0,2(v0) +8002e620: 00000000 nop +8002e624: 3042ffff andi v0,v0,0xffff +8002e628: 304207ff andi v0,v0,0x7ff +8002e62c: 00022400 sll a0,v0,0x10 +8002e630: 8fc50028 lw a1,40(s8) +8002e634: 8fc20010 lw v0,16(s8) +8002e638: 00000000 nop +8002e63c: 00021040 sll v0,v0,0x1 +8002e640: 00a21021 addu v0,a1,v0 +8002e644: 84420004 lh v0,4(v0) +8002e648: 00000000 nop +8002e64c: 3042ffff andi v0,v0,0xffff +8002e650: 304207ff andi v0,v0,0x7ff +8002e654: 00821025 or v0,a0,v0 +8002e658: ac620000 sw v0,0(v1) + linked_list[linked_list_pos] = (tpoly3->u[x]<<8)|tpoly3->v[x]; +8002e65c: 3c028007 lui v0,0x8007 +8002e660: 8c431cd4 lw v1,7380(v0) +8002e664: 3c028007 lui v0,0x8007 +8002e668: 8c421cd8 lw v0,7384(v0) +8002e66c: 00000000 nop +8002e670: 00021080 sll v0,v0,0x2 +8002e674: 00621021 addu v0,v1,v0 +8002e678: 8fc40028 lw a0,40(s8) +8002e67c: 8fc30010 lw v1,16(s8) +8002e680: 00000000 nop +8002e684: 00831821 addu v1,a0,v1 +8002e688: 90630010 lbu v1,16(v1) +8002e68c: 00000000 nop +8002e690: 00031a00 sll v1,v1,0x8 +8002e694: 8fc50028 lw a1,40(s8) +8002e698: 8fc40010 lw a0,16(s8) +8002e69c: 00000000 nop +8002e6a0: 00a42021 addu a0,a1,a0 +8002e6a4: 90840013 lbu a0,19(a0) +8002e6a8: 00000000 nop +8002e6ac: 00641825 or v1,v1,a0 +8002e6b0: ac430000 sw v1,0(v0) + + switch(x) +8002e6b4: 8fc20010 lw v0,16(s8) +8002e6b8: 00000000 nop +8002e6bc: 10400006 beqz v0,8002e6d8 <GsSortTPoly3+0x218> +8002e6c0: 00000000 nop +8002e6c4: 24030001 li v1,1 +8002e6c8: 10430026 beq v0,v1,8002e764 <GsSortTPoly3+0x2a4> +8002e6cc: 00000000 nop +8002e6d0: 1000003a b 8002e7bc <GsSortTPoly3+0x2fc> +8002e6d4: 00000000 nop + { + case 0: + linked_list[linked_list_pos++] |= +8002e6d8: 3c028007 lui v0,0x8007 +8002e6dc: 8c441cd4 lw a0,7380(v0) +8002e6e0: 3c028007 lui v0,0x8007 +8002e6e4: 8c421cd8 lw v0,7384(v0) +8002e6e8: 00000000 nop +8002e6ec: 24450001 addiu a1,v0,1 +8002e6f0: 3c038007 lui v1,0x8007 +8002e6f4: ac651cd8 sw a1,7384(v1) +8002e6f8: 00021880 sll v1,v0,0x2 +8002e6fc: 00831821 addu v1,a0,v1 +8002e700: 3c048007 lui a0,0x8007 +8002e704: 8c841cd4 lw a0,7380(a0) +8002e708: 00021080 sll v0,v0,0x2 +8002e70c: 00821021 addu v0,a0,v0 +8002e710: 8c420000 lw v0,0(v0) + get_clutid(tpoly3->cx, tpoly3->cy) << 16; +8002e714: 8fc40028 lw a0,40(s8) +8002e718: 00000000 nop +8002e71c: 84840016 lh a0,22(a0) +8002e720: 00000000 nop +8002e724: 3084ffff andi a0,a0,0xffff +8002e728: 308403ff andi a0,a0,0x3ff +8002e72c: 00042903 sra a1,a0,0x4 +8002e730: 8fc40028 lw a0,40(s8) +8002e734: 00000000 nop +8002e738: 84840018 lh a0,24(a0) +8002e73c: 00000000 nop +8002e740: 3084ffff andi a0,a0,0xffff +8002e744: 308401ff andi a0,a0,0x1ff +8002e748: 00042180 sll a0,a0,0x6 +8002e74c: 00a42025 or a0,a1,a0 +8002e750: 00042400 sll a0,a0,0x10 + linked_list[linked_list_pos] = (tpoly3->u[x]<<8)|tpoly3->v[x]; + + switch(x) + { + case 0: + linked_list[linked_list_pos++] |= +8002e754: 00441025 or v0,v0,a0 +8002e758: ac620000 sw v0,0(v1) + get_clutid(tpoly3->cx, tpoly3->cy) << 16; + break; +8002e75c: 1000001e b 8002e7d8 <GsSortTPoly3+0x318> +8002e760: 00000000 nop + case 1: + linked_list[linked_list_pos++] |= +8002e764: 3c028007 lui v0,0x8007 +8002e768: 8c441cd4 lw a0,7380(v0) +8002e76c: 3c028007 lui v0,0x8007 +8002e770: 8c421cd8 lw v0,7384(v0) +8002e774: 00000000 nop +8002e778: 24450001 addiu a1,v0,1 +8002e77c: 3c038007 lui v1,0x8007 +8002e780: ac651cd8 sw a1,7384(v1) +8002e784: 00021880 sll v1,v0,0x2 +8002e788: 00831821 addu v1,a0,v1 +8002e78c: 3c048007 lui a0,0x8007 +8002e790: 8c841cd4 lw a0,7380(a0) +8002e794: 00021080 sll v0,v0,0x2 +8002e798: 00821021 addu v0,a0,v0 +8002e79c: 8c440000 lw a0,0(v0) + md << 16; +8002e7a0: 8fc20018 lw v0,24(s8) +8002e7a4: 00000000 nop +8002e7a8: 00021400 sll v0,v0,0x10 + case 0: + linked_list[linked_list_pos++] |= + get_clutid(tpoly3->cx, tpoly3->cy) << 16; + break; + case 1: + linked_list[linked_list_pos++] |= +8002e7ac: 00821025 or v0,a0,v0 +8002e7b0: ac620000 sw v0,0(v1) + md << 16; + break; +8002e7b4: 10000008 b 8002e7d8 <GsSortTPoly3+0x318> +8002e7b8: 00000000 nop + default: + linked_list_pos++; +8002e7bc: 3c028007 lui v0,0x8007 +8002e7c0: 8c421cd8 lw v0,7384(v0) +8002e7c4: 00000000 nop +8002e7c8: 24430001 addiu v1,v0,1 +8002e7cc: 3c028007 lui v0,0x8007 +8002e7d0: ac431cd8 sw v1,7384(v0) + break; +8002e7d4: 00000000 nop + + linked_list[linked_list_pos++] = 0x07000000; + linked_list[linked_list_pos++] = + (pkt<<24)|(tpoly3->b<<16)|(tpoly3->g<<8)|(tpoly3->r); + + for(x = 0; x < 3; x++) +8002e7d8: 8fc20010 lw v0,16(s8) +8002e7dc: 00000000 nop +8002e7e0: 24420001 addiu v0,v0,1 +8002e7e4: afc20010 sw v0,16(s8) +8002e7e8: 8fc20010 lw v0,16(s8) +8002e7ec: 00000000 nop +8002e7f0: 28420003 slti v0,v0,3 +8002e7f4: 1440ff79 bnez v0,8002e5dc <GsSortTPoly3+0x11c> +8002e7f8: 00000000 nop + linked_list_pos++; + break; + } + } + + linked_list[orig_pos] |= ((unsigned int)&linked_list[linked_list_pos]) & 0xffffff; +8002e7fc: 3c028007 lui v0,0x8007 +8002e800: 8c431cd4 lw v1,7380(v0) +8002e804: 8fc20014 lw v0,20(s8) +8002e808: 00000000 nop +8002e80c: 00021080 sll v0,v0,0x2 +8002e810: 00621021 addu v0,v1,v0 +8002e814: 3c038007 lui v1,0x8007 +8002e818: 8c641cd4 lw a0,7380(v1) +8002e81c: 8fc30014 lw v1,20(s8) +8002e820: 00000000 nop +8002e824: 00031880 sll v1,v1,0x2 +8002e828: 00831821 addu v1,a0,v1 +8002e82c: 8c640000 lw a0,0(v1) +8002e830: 3c038007 lui v1,0x8007 +8002e834: 8c651cd4 lw a1,7380(v1) +8002e838: 3c038007 lui v1,0x8007 +8002e83c: 8c631cd8 lw v1,7384(v1) +8002e840: 00000000 nop +8002e844: 00031880 sll v1,v1,0x2 +8002e848: 00a31821 addu v1,a1,v1 +8002e84c: 00602821 move a1,v1 +8002e850: 3c0300ff lui v1,0xff +8002e854: 3463ffff ori v1,v1,0xffff +8002e858: 00a31824 and v1,a1,v1 +8002e85c: 00831825 or v1,a0,v1 +8002e860: ac430000 sw v1,0(v0) +} +8002e864: 00000000 nop +8002e868: 03c0e821 move sp,s8 +8002e86c: 8fbf0024 lw ra,36(sp) +8002e870: 8fbe0020 lw s8,32(sp) +8002e874: 27bd0028 addiu sp,sp,40 +8002e878: 03e00008 jr ra +8002e87c: 00000000 nop + +8002e880 <MoveImage>: + +void MoveImage(int src_x, int src_y, int dst_x, int dst_y, int w, int h) +{ +8002e880: 27bdfff8 addiu sp,sp,-8 +8002e884: afbe0004 sw s8,4(sp) +8002e888: 03a0f021 move s8,sp +8002e88c: afc40008 sw a0,8(s8) +8002e890: afc5000c sw a1,12(s8) +8002e894: afc60010 sw a2,16(s8) +8002e898: afc70014 sw a3,20(s8) + /* + * This seems more like "CopyImage"... + */ + + while(!(GPU_CONTROL_PORT & (1<<0x1c))); +8002e89c: 00000000 nop +8002e8a0: 3c021f80 lui v0,0x1f80 +8002e8a4: 34421814 ori v0,v0,0x1814 +8002e8a8: 8c430000 lw v1,0(v0) +8002e8ac: 3c021000 lui v0,0x1000 +8002e8b0: 00621024 and v0,v1,v0 +8002e8b4: 1040fffa beqz v0,8002e8a0 <MoveImage+0x20> +8002e8b8: 00000000 nop + + GPU_CONTROL_PORT = 0x04000000; +8002e8bc: 3c021f80 lui v0,0x1f80 +8002e8c0: 34421814 ori v0,v0,0x1814 +8002e8c4: 3c030400 lui v1,0x400 +8002e8c8: ac430000 sw v1,0(v0) + GPU_DATA_PORT = 0x01000000; // Reset command buffer +8002e8cc: 3c021f80 lui v0,0x1f80 +8002e8d0: 34421810 ori v0,v0,0x1810 +8002e8d4: 3c030100 lui v1,0x100 +8002e8d8: ac430000 sw v1,0(v0) + GPU_DATA_PORT = 0xE6000000; +8002e8dc: 3c021f80 lui v0,0x1f80 +8002e8e0: 34421810 ori v0,v0,0x1810 +8002e8e4: 3c03e600 lui v1,0xe600 +8002e8e8: ac430000 sw v1,0(v0) + GPU_DATA_PORT = 0x80000000; +8002e8ec: 3c021f80 lui v0,0x1f80 +8002e8f0: 34421810 ori v0,v0,0x1810 +8002e8f4: 3c038000 lui v1,0x8000 +8002e8f8: ac430000 sw v1,0(v0) + GPU_DATA_PORT = (src_y<<16)|src_x; +8002e8fc: 3c021f80 lui v0,0x1f80 +8002e900: 34421810 ori v0,v0,0x1810 +8002e904: 8fc3000c lw v1,12(s8) +8002e908: 00000000 nop +8002e90c: 00032400 sll a0,v1,0x10 +8002e910: 8fc30008 lw v1,8(s8) +8002e914: 00000000 nop +8002e918: 00831825 or v1,a0,v1 +8002e91c: ac430000 sw v1,0(v0) + GPU_DATA_PORT = (dst_y<<16)|dst_x; +8002e920: 3c021f80 lui v0,0x1f80 +8002e924: 34421810 ori v0,v0,0x1810 +8002e928: 8fc30014 lw v1,20(s8) +8002e92c: 00000000 nop +8002e930: 00032400 sll a0,v1,0x10 +8002e934: 8fc30010 lw v1,16(s8) +8002e938: 00000000 nop +8002e93c: 00831825 or v1,a0,v1 +8002e940: ac430000 sw v1,0(v0) + GPU_DATA_PORT = (h<<16)|w; +8002e944: 3c021f80 lui v0,0x1f80 +8002e948: 34421810 ori v0,v0,0x1810 +8002e94c: 8fc3001c lw v1,28(s8) +8002e950: 00000000 nop +8002e954: 00032400 sll a0,v1,0x10 +8002e958: 8fc30018 lw v1,24(s8) +8002e95c: 00000000 nop +8002e960: 00831825 or v1,a0,v1 +8002e964: ac430000 sw v1,0(v0) +} +8002e968: 00000000 nop +8002e96c: 03c0e821 move sp,s8 +8002e970: 8fbe0004 lw s8,4(sp) +8002e974: 27bd0008 addiu sp,sp,8 +8002e978: 03e00008 jr ra +8002e97c: 00000000 nop + +8002e980 <LoadImage>: +/* + * Add a method to add arbitrary data to the packet list + */ + +void LoadImage(void *img, int x, int y, int w, int h) +{ +8002e980: 27bdffd8 addiu sp,sp,-40 +8002e984: afbf0024 sw ra,36(sp) +8002e988: afbe0020 sw s8,32(sp) +8002e98c: 03a0f021 move s8,sp +8002e990: afc40028 sw a0,40(s8) +8002e994: afc5002c sw a1,44(s8) +8002e998: afc60030 sw a2,48(s8) +8002e99c: afc70034 sw a3,52(s8) + unsigned short *image = (unsigned short*)img; +8002e9a0: 8fc20028 lw v0,40(s8) +8002e9a4: 00000000 nop +8002e9a8: afc20018 sw v0,24(s8) + int a, l; + + while(GsIsDrawing() == true); +8002e9ac: 00000000 nop +8002e9b0: 0c00bf9f jal 8002fe7c <GsIsDrawing> +8002e9b4: 00000000 nop +8002e9b8: 00401821 move v1,v0 +8002e9bc: 24020001 li v0,1 +8002e9c0: 1062fffb beq v1,v0,8002e9b0 <LoadImage+0x30> +8002e9c4: 00000000 nop + + //printf("LoadImage: %d, %d, %d, %d\n", x, y, w, h); + + while(!(GPU_CONTROL_PORT & (1<<0x1c))); +8002e9c8: 00000000 nop +8002e9cc: 3c021f80 lui v0,0x1f80 +8002e9d0: 34421814 ori v0,v0,0x1814 +8002e9d4: 8c430000 lw v1,0(v0) +8002e9d8: 3c021000 lui v0,0x1000 +8002e9dc: 00621024 and v0,v1,v0 +8002e9e0: 1040fffa beqz v0,8002e9cc <LoadImage+0x4c> +8002e9e4: 00000000 nop + + GPU_CONTROL_PORT = 0x04000000; // Disable DMA +8002e9e8: 3c021f80 lui v0,0x1f80 +8002e9ec: 34421814 ori v0,v0,0x1814 +8002e9f0: 3c030400 lui v1,0x400 +8002e9f4: ac430000 sw v1,0(v0) + +// Reset should be on data port ! otherwise we won't be able +// to write CLUTs for some time after they've been used! +// (why??) + + GPU_DATA_PORT = 0x01000000; +8002e9f8: 3c021f80 lui v0,0x1f80 +8002e9fc: 34421810 ori v0,v0,0x1810 +8002ea00: 3c030100 lui v1,0x100 +8002ea04: ac430000 sw v1,0(v0) + GPU_DATA_PORT = 0xE6000000; // disable masking stuff !! +8002ea08: 3c021f80 lui v0,0x1f80 +8002ea0c: 34421810 ori v0,v0,0x1810 +8002ea10: 3c03e600 lui v1,0xe600 +8002ea14: ac430000 sw v1,0(v0) + GPU_DATA_PORT = 0xA0000000; +8002ea18: 3c021f80 lui v0,0x1f80 +8002ea1c: 34421810 ori v0,v0,0x1810 +8002ea20: 3c03a000 lui v1,0xa000 +8002ea24: ac430000 sw v1,0(v0) + GPU_DATA_PORT = (y<<16)|x; +8002ea28: 3c021f80 lui v0,0x1f80 +8002ea2c: 34421810 ori v0,v0,0x1810 +8002ea30: 8fc30030 lw v1,48(s8) +8002ea34: 00000000 nop +8002ea38: 00032400 sll a0,v1,0x10 +8002ea3c: 8fc3002c lw v1,44(s8) +8002ea40: 00000000 nop +8002ea44: 00831825 or v1,a0,v1 +8002ea48: ac430000 sw v1,0(v0) + GPU_DATA_PORT = (h<<16)|w; +8002ea4c: 3c021f80 lui v0,0x1f80 +8002ea50: 34421810 ori v0,v0,0x1810 +8002ea54: 8fc30038 lw v1,56(s8) +8002ea58: 00000000 nop +8002ea5c: 00032400 sll a0,v1,0x10 +8002ea60: 8fc30034 lw v1,52(s8) +8002ea64: 00000000 nop +8002ea68: 00831825 or v1,a0,v1 +8002ea6c: ac430000 sw v1,0(v0) + + l = w*h; +8002ea70: 8fc30034 lw v1,52(s8) +8002ea74: 8fc20038 lw v0,56(s8) +8002ea78: 00000000 nop +8002ea7c: 00620018 mult v1,v0 +8002ea80: 00001012 mflo v0 +8002ea84: afc20014 sw v0,20(s8) + if(l&1)l++; +8002ea88: 8fc20014 lw v0,20(s8) +8002ea8c: 00000000 nop +8002ea90: 30420001 andi v0,v0,0x1 +8002ea94: 10400005 beqz v0,8002eaac <LoadImage+0x12c> +8002ea98: 00000000 nop +8002ea9c: 8fc20014 lw v0,20(s8) +8002eaa0: 00000000 nop +8002eaa4: 24420001 addiu v0,v0,1 +8002eaa8: afc20014 sw v0,20(s8) + + for(a = 0; a < l; a+=2) +8002eaac: afc00010 sw zero,16(s8) +8002eab0: 1000001c b 8002eb24 <LoadImage+0x1a4> +8002eab4: 00000000 nop + GPU_DATA_PORT = image[a]|(image[a+1]<<16); +8002eab8: 3c021f80 lui v0,0x1f80 +8002eabc: 34421810 ori v0,v0,0x1810 +8002eac0: 8fc30010 lw v1,16(s8) +8002eac4: 00000000 nop +8002eac8: 00031840 sll v1,v1,0x1 +8002eacc: 8fc40018 lw a0,24(s8) +8002ead0: 00000000 nop +8002ead4: 00831821 addu v1,a0,v1 +8002ead8: 94630000 lhu v1,0(v1) +8002eadc: 00000000 nop +8002eae0: 00602821 move a1,v1 +8002eae4: 8fc30010 lw v1,16(s8) +8002eae8: 00000000 nop +8002eaec: 24630001 addiu v1,v1,1 +8002eaf0: 00031840 sll v1,v1,0x1 +8002eaf4: 8fc40018 lw a0,24(s8) +8002eaf8: 00000000 nop +8002eafc: 00831821 addu v1,a0,v1 +8002eb00: 94630000 lhu v1,0(v1) +8002eb04: 00000000 nop +8002eb08: 00031c00 sll v1,v1,0x10 +8002eb0c: 00a31825 or v1,a1,v1 +8002eb10: ac430000 sw v1,0(v0) + GPU_DATA_PORT = (h<<16)|w; + + l = w*h; + if(l&1)l++; + + for(a = 0; a < l; a+=2) +8002eb14: 8fc20010 lw v0,16(s8) +8002eb18: 00000000 nop +8002eb1c: 24420002 addiu v0,v0,2 +8002eb20: afc20010 sw v0,16(s8) +8002eb24: 8fc30010 lw v1,16(s8) +8002eb28: 8fc20014 lw v0,20(s8) +8002eb2c: 00000000 nop +8002eb30: 0062102a slt v0,v1,v0 +8002eb34: 1440ffe0 bnez v0,8002eab8 <LoadImage+0x138> +8002eb38: 00000000 nop + GPU_DATA_PORT = image[a]|(image[a+1]<<16); + + GPU_CONTROL_PORT = 0x01000000; +8002eb3c: 3c021f80 lui v0,0x1f80 +8002eb40: 34421814 ori v0,v0,0x1814 +8002eb44: 3c030100 lui v1,0x100 +8002eb48: ac430000 sw v1,0(v0) +// while(!(GPU_CONTROL_PORT & (1<<0x1c))); +} +8002eb4c: 00000000 nop +8002eb50: 03c0e821 move sp,s8 +8002eb54: 8fbf0024 lw ra,36(sp) +8002eb58: 8fbe0020 lw s8,32(sp) +8002eb5c: 27bd0028 addiu sp,sp,40 +8002eb60: 03e00008 jr ra +8002eb64: 00000000 nop + +8002eb68 <GsSetDrawEnv>: + + while(D2_CHCR & (1<<0x18)); +//}*/ + +void GsSetDrawEnv(GsDrawEnv *drawenv) +{ +8002eb68: 27bdffd8 addiu sp,sp,-40 +8002eb6c: afbf0024 sw ra,36(sp) +8002eb70: afbe0020 sw s8,32(sp) +8002eb74: 03a0f021 move s8,sp +8002eb78: afc40028 sw a0,40(s8) + /* + * Store the 0xe1 packet - we need it because we have to + * modify drawing environment for sprites + */ + + draw_mode_packet = (0xe1<<24)|(drawenv->draw_on_display>=1)<<10| +8002eb7c: 8fc20028 lw v0,40(s8) +8002eb80: 00000000 nop +8002eb84: 90420001 lbu v0,1(v0) +8002eb88: 00000000 nop +8002eb8c: 10400005 beqz v0,8002eba4 <GsSetDrawEnv+0x3c> +8002eb90: 00000000 nop +8002eb94: 3c02e100 lui v0,0xe100 +8002eb98: 34420400 ori v0,v0,0x400 +8002eb9c: 10000002 b 8002eba8 <GsSetDrawEnv+0x40> +8002eba0: 00000000 nop +8002eba4: 3c02e100 lui v0,0xe100 + (drawenv->dither>=1)<<9; +8002eba8: 8fc30028 lw v1,40(s8) +8002ebac: 00000000 nop +8002ebb0: 90630000 lbu v1,0(v1) +8002ebb4: 00000000 nop +8002ebb8: 10600004 beqz v1,8002ebcc <GsSetDrawEnv+0x64> +8002ebbc: 00000000 nop +8002ebc0: 24030200 li v1,512 +8002ebc4: 10000002 b 8002ebd0 <GsSetDrawEnv+0x68> +8002ebc8: 00000000 nop +8002ebcc: 00001821 move v1,zero + /* + * Store the 0xe1 packet - we need it because we have to + * modify drawing environment for sprites + */ + + draw_mode_packet = (0xe1<<24)|(drawenv->draw_on_display>=1)<<10| +8002ebd0: 00431025 or v0,v0,v1 +8002ebd4: 00401821 move v1,v0 +8002ebd8: 3c028007 lui v0,0x8007 +8002ebdc: ac431d5c sw v1,7516(v0) + (drawenv->dither>=1)<<9; + + gpu_data_ctrl(0xe1, draw_mode_packet); +8002ebe0: 3c028007 lui v0,0x8007 +8002ebe4: 8c421d5c lw v0,7516(v0) +8002ebe8: 00000000 nop +8002ebec: 00402821 move a1,v0 +8002ebf0: 240400e1 li a0,225 +8002ebf4: 0c00bbb5 jal 8002eed4 <gpu_data_ctrl> +8002ebf8: 00000000 nop + gpu_data_ctrl(0xe2, 0); +8002ebfc: 00002821 move a1,zero +8002ec00: 240400e2 li a0,226 +8002ec04: 0c00bbb5 jal 8002eed4 <gpu_data_ctrl> +8002ec08: 00000000 nop + gpu_data_ctrl(0xe3, (drawenv->y<<10)|drawenv->x); +8002ec0c: 8fc20028 lw v0,40(s8) +8002ec10: 00000000 nop +8002ec14: 84420004 lh v0,4(v0) +8002ec18: 00000000 nop +8002ec1c: 00021280 sll v0,v0,0xa +8002ec20: 8fc30028 lw v1,40(s8) +8002ec24: 00000000 nop +8002ec28: 84630002 lh v1,2(v1) +8002ec2c: 00000000 nop +8002ec30: 00431025 or v0,v0,v1 +8002ec34: 00402821 move a1,v0 +8002ec38: 240400e3 li a0,227 +8002ec3c: 0c00bbb5 jal 8002eed4 <gpu_data_ctrl> +8002ec40: 00000000 nop + + end_x = (drawenv->x + drawenv->w)-1; +8002ec44: 8fc20028 lw v0,40(s8) +8002ec48: 00000000 nop +8002ec4c: 84420002 lh v0,2(v0) +8002ec50: 00000000 nop +8002ec54: 00401821 move v1,v0 +8002ec58: 8fc20028 lw v0,40(s8) +8002ec5c: 00000000 nop +8002ec60: 84420006 lh v0,6(v0) +8002ec64: 00000000 nop +8002ec68: 00621021 addu v0,v1,v0 +8002ec6c: 2442ffff addiu v0,v0,-1 +8002ec70: afc20014 sw v0,20(s8) + end_y = (drawenv->y + drawenv->h)-1; +8002ec74: 8fc20028 lw v0,40(s8) +8002ec78: 00000000 nop +8002ec7c: 84420004 lh v0,4(v0) +8002ec80: 00000000 nop +8002ec84: 00401821 move v1,v0 +8002ec88: 8fc20028 lw v0,40(s8) +8002ec8c: 00000000 nop +8002ec90: 84420008 lh v0,8(v0) +8002ec94: 00000000 nop +8002ec98: 00621021 addu v0,v1,v0 +8002ec9c: 2442ffff addiu v0,v0,-1 +8002eca0: afc20018 sw v0,24(s8) + + gpu_data_ctrl(0xe4, (end_y<<10)|end_x); +8002eca4: 8fc20018 lw v0,24(s8) +8002eca8: 00000000 nop +8002ecac: 00021a80 sll v1,v0,0xa +8002ecb0: 8fc20014 lw v0,20(s8) +8002ecb4: 00000000 nop +8002ecb8: 00621025 or v0,v1,v0 +8002ecbc: 00402821 move a1,v0 +8002ecc0: 240400e4 li a0,228 +8002ecc4: 0c00bbb5 jal 8002eed4 <gpu_data_ctrl> +8002ecc8: 00000000 nop + + //#warning "Check drawing offset better." + gpu_data_ctrl(0xe5, (drawenv->y<<11)|drawenv->x); +8002eccc: 8fc20028 lw v0,40(s8) +8002ecd0: 00000000 nop +8002ecd4: 84420004 lh v0,4(v0) +8002ecd8: 00000000 nop +8002ecdc: 000212c0 sll v0,v0,0xb +8002ece0: 8fc30028 lw v1,40(s8) +8002ece4: 00000000 nop +8002ece8: 84630002 lh v1,2(v1) +8002ecec: 00000000 nop +8002ecf0: 00431025 or v0,v0,v1 +8002ecf4: 00402821 move a1,v0 +8002ecf8: 240400e5 li a0,229 +8002ecfc: 0c00bbb5 jal 8002eed4 <gpu_data_ctrl> +8002ed00: 00000000 nop + //gpu_data_ctrl(0xe5, 0); + + + mf = 0; +8002ed04: afc00010 sw zero,16(s8) + if(drawenv->set_mask) mf|=MASK_SET; +8002ed08: 8fc20028 lw v0,40(s8) +8002ed0c: 00000000 nop +8002ed10: 9042000b lbu v0,11(v0) +8002ed14: 00000000 nop +8002ed18: 10400005 beqz v0,8002ed30 <GsSetDrawEnv+0x1c8> +8002ed1c: 00000000 nop +8002ed20: 8fc20010 lw v0,16(s8) +8002ed24: 00000000 nop +8002ed28: 34420001 ori v0,v0,0x1 +8002ed2c: afc20010 sw v0,16(s8) + if(drawenv->ignore_mask) mf|=MASK_IGNORE; +8002ed30: 8fc20028 lw v0,40(s8) +8002ed34: 00000000 nop +8002ed38: 9042000a lbu v0,10(v0) +8002ed3c: 00000000 nop +8002ed40: 10400005 beqz v0,8002ed58 <GsSetDrawEnv+0x1f0> +8002ed44: 00000000 nop +8002ed48: 8fc20010 lw v0,16(s8) +8002ed4c: 00000000 nop +8002ed50: 34420002 ori v0,v0,0x2 +8002ed54: afc20010 sw v0,16(s8) + + GsSetMasking(mf); +8002ed58: 8fc20010 lw v0,16(s8) +8002ed5c: 00000000 nop +8002ed60: 304200ff andi v0,v0,0xff +8002ed64: 00402021 move a0,v0 +8002ed68: 0c00bf8c jal 8002fe30 <GsSetMasking> +8002ed6c: 00000000 nop + + GsCurDrawEnvW = drawenv->w; +8002ed70: 8fc20028 lw v0,40(s8) +8002ed74: 00000000 nop +8002ed78: 84420006 lh v0,6(v0) +8002ed7c: 00000000 nop +8002ed80: 3043ffff andi v1,v0,0xffff +8002ed84: 3c028007 lui v0,0x8007 +8002ed88: a4431d40 sh v1,7488(v0) + GsCurDrawEnvH = drawenv->h; +8002ed8c: 8fc20028 lw v0,40(s8) +8002ed90: 00000000 nop +8002ed94: 84420008 lh v0,8(v0) +8002ed98: 00000000 nop +8002ed9c: 3043ffff andi v1,v0,0xffff +8002eda0: 3c028007 lui v0,0x8007 +8002eda4: a4431d58 sh v1,7512(v0) +} +8002eda8: 00000000 nop +8002edac: 03c0e821 move sp,s8 +8002edb0: 8fbf0024 lw ra,36(sp) +8002edb4: 8fbe0020 lw s8,32(sp) +8002edb8: 27bd0028 addiu sp,sp,40 +8002edbc: 03e00008 jr ra +8002edc0: 00000000 nop + +8002edc4 <GsSetDispEnv>: + +void GsSetDispEnv(GsDispEnv *dispenv) +{ +8002edc4: 27bdffe8 addiu sp,sp,-24 +8002edc8: afbf0014 sw ra,20(sp) +8002edcc: afbe0010 sw s8,16(sp) +8002edd0: 03a0f021 move s8,sp +8002edd4: afc40018 sw a0,24(s8) + gpu_ctrl(5, (dispenv->y<<10)|dispenv->x); // Display offset +8002edd8: 8fc20018 lw v0,24(s8) +8002eddc: 00000000 nop +8002ede0: 84420002 lh v0,2(v0) +8002ede4: 00000000 nop +8002ede8: 00021280 sll v0,v0,0xa +8002edec: 8fc30018 lw v1,24(s8) +8002edf0: 00000000 nop +8002edf4: 84630000 lh v1,0(v1) +8002edf8: 00000000 nop +8002edfc: 00431025 or v0,v0,v1 +8002ee00: 00402821 move a1,v0 +8002ee04: 24040005 li a0,5 +8002ee08: 0c00bb8b jal 8002ee2c <gpu_ctrl> +8002ee0c: 00000000 nop +} +8002ee10: 00000000 nop +8002ee14: 03c0e821 move sp,s8 +8002ee18: 8fbf0014 lw ra,20(sp) +8002ee1c: 8fbe0010 lw s8,16(sp) +8002ee20: 27bd0018 addiu sp,sp,24 +8002ee24: 03e00008 jr ra +8002ee28: 00000000 nop + +8002ee2c <gpu_ctrl>: + +void gpu_ctrl(unsigned int command, unsigned int param) +{ +8002ee2c: 27bdfff0 addiu sp,sp,-16 +8002ee30: afbe000c sw s8,12(sp) +8002ee34: 03a0f021 move s8,sp +8002ee38: afc40010 sw a0,16(s8) +8002ee3c: afc50014 sw a1,20(s8) + unsigned int doubleword = (command << 0x18) | param; +8002ee40: 8fc20010 lw v0,16(s8) +8002ee44: 00000000 nop +8002ee48: 00021e00 sll v1,v0,0x18 +8002ee4c: 8fc20014 lw v0,20(s8) +8002ee50: 00000000 nop +8002ee54: 00621025 or v0,v1,v0 +8002ee58: afc20000 sw v0,0(s8) + + GPU_CONTROL_PORT = 0x01000000; +8002ee5c: 3c021f80 lui v0,0x1f80 +8002ee60: 34421814 ori v0,v0,0x1814 +8002ee64: 3c030100 lui v1,0x100 +8002ee68: ac430000 sw v1,0(v0) + GPU_CONTROL_PORT = doubleword; +8002ee6c: 3c021f80 lui v0,0x1f80 +8002ee70: 34421814 ori v0,v0,0x1814 +8002ee74: 8fc30000 lw v1,0(s8) +8002ee78: 00000000 nop +8002ee7c: ac430000 sw v1,0(v0) +} +8002ee80: 00000000 nop +8002ee84: 03c0e821 move sp,s8 +8002ee88: 8fbe000c lw s8,12(sp) +8002ee8c: 27bd0010 addiu sp,sp,16 +8002ee90: 03e00008 jr ra +8002ee94: 00000000 nop + +8002ee98 <gpu_data>: + +void gpu_data(unsigned int data) +{ +8002ee98: 27bdfff8 addiu sp,sp,-8 +8002ee9c: afbe0004 sw s8,4(sp) +8002eea0: 03a0f021 move s8,sp +8002eea4: afc40008 sw a0,8(s8) + GPU_DATA_PORT = data; +8002eea8: 3c021f80 lui v0,0x1f80 +8002eeac: 34421810 ori v0,v0,0x1810 +8002eeb0: 8fc30008 lw v1,8(s8) +8002eeb4: 00000000 nop +8002eeb8: ac430000 sw v1,0(v0) +} +8002eebc: 00000000 nop +8002eec0: 03c0e821 move sp,s8 +8002eec4: 8fbe0004 lw s8,4(sp) +8002eec8: 27bd0008 addiu sp,sp,8 +8002eecc: 03e00008 jr ra +8002eed0: 00000000 nop + +8002eed4 <gpu_data_ctrl>: + +void gpu_data_ctrl(unsigned int command, unsigned int param) +{ +8002eed4: 27bdfff0 addiu sp,sp,-16 +8002eed8: afbe000c sw s8,12(sp) +8002eedc: 03a0f021 move s8,sp +8002eee0: afc40010 sw a0,16(s8) +8002eee4: afc50014 sw a1,20(s8) + unsigned int doubleword = (command << 0x18) | param; +8002eee8: 8fc20010 lw v0,16(s8) +8002eeec: 00000000 nop +8002eef0: 00021e00 sll v1,v0,0x18 +8002eef4: 8fc20014 lw v0,20(s8) +8002eef8: 00000000 nop +8002eefc: 00621025 or v0,v1,v0 +8002ef00: afc20000 sw v0,0(s8) + + GPU_CONTROL_PORT = 0x01000000; +8002ef04: 3c021f80 lui v0,0x1f80 +8002ef08: 34421814 ori v0,v0,0x1814 +8002ef0c: 3c030100 lui v1,0x100 +8002ef10: ac430000 sw v1,0(v0) + GPU_DATA_PORT = doubleword; +8002ef14: 3c021f80 lui v0,0x1f80 +8002ef18: 34421810 ori v0,v0,0x1810 +8002ef1c: 8fc30000 lw v1,0(s8) +8002ef20: 00000000 nop +8002ef24: ac430000 sw v1,0(v0) +} +8002ef28: 00000000 nop +8002ef2c: 03c0e821 move sp,s8 +8002ef30: 8fbe000c lw s8,12(sp) +8002ef34: 27bd0010 addiu sp,sp,16 +8002ef38: 03e00008 jr ra +8002ef3c: 00000000 nop + +8002ef40 <setup_attribs>: + +unsigned int setup_attribs(unsigned char tpage, unsigned int attribute, unsigned char *packet) +{ +8002ef40: 27bdfff0 addiu sp,sp,-16 +8002ef44: afbe000c sw s8,12(sp) +8002ef48: 03a0f021 move s8,sp +8002ef4c: 00801021 move v0,a0 +8002ef50: afc50014 sw a1,20(s8) +8002ef54: afc60018 sw a2,24(s8) +8002ef58: a3c20010 sb v0,16(s8) + +/* + * First, setup draw mode setting. + */ + + sprite_mode_packet = draw_mode_packet; +8002ef5c: 3c028007 lui v0,0x8007 +8002ef60: 8c421d5c lw v0,7516(v0) +8002ef64: 00000000 nop +8002ef68: afc20000 sw v0,0(s8) + sprite_mode_packet|= tpage & 0x1f; /* Texture page */ +8002ef6c: 93c20010 lbu v0,16(s8) +8002ef70: 00000000 nop +8002ef74: 3042001f andi v0,v0,0x1f +8002ef78: 8fc30000 lw v1,0(s8) +8002ef7c: 00000000 nop +8002ef80: 00621025 or v0,v1,v0 +8002ef84: afc20000 sw v0,0(s8) + sprite_mode_packet|= (attribute & 3) << 7; /* Color mode */ +8002ef88: 8fc20014 lw v0,20(s8) +8002ef8c: 00000000 nop +8002ef90: 30420003 andi v0,v0,0x3 +8002ef94: 000211c0 sll v0,v0,0x7 +8002ef98: 8fc30000 lw v1,0(s8) +8002ef9c: 00000000 nop +8002efa0: 00621025 or v0,v1,v0 +8002efa4: afc20000 sw v0,0(s8) + sprite_mode_packet|= ((attribute>>2)&3) << 5; /* Translucency mode */ +8002efa8: 8fc20014 lw v0,20(s8) +8002efac: 00000000 nop +8002efb0: 00021082 srl v0,v0,0x2 +8002efb4: 30420003 andi v0,v0,0x3 +8002efb8: 00021140 sll v0,v0,0x5 +8002efbc: 8fc30000 lw v1,0(s8) +8002efc0: 00000000 nop +8002efc4: 00621025 or v0,v1,v0 +8002efc8: afc20000 sw v0,0(s8) + +/* + * Check for STP bit flag in attribute, and modify packet byte accordingly + */ + if(attribute & 16) +8002efcc: 8fc20014 lw v0,20(s8) +8002efd0: 00000000 nop +8002efd4: 30420010 andi v0,v0,0x10 +8002efd8: 1040000a beqz v0,8002f004 <setup_attribs+0xc4> +8002efdc: 00000000 nop + *packet|=2; +8002efe0: 8fc20018 lw v0,24(s8) +8002efe4: 00000000 nop +8002efe8: 90420000 lbu v0,0(v0) +8002efec: 00000000 nop +8002eff0: 34420002 ori v0,v0,0x2 +8002eff4: 304300ff andi v1,v0,0xff +8002eff8: 8fc20018 lw v0,24(s8) +8002effc: 00000000 nop +8002f000: a0430000 sb v1,0(v0) + + //printf("sprite_mode_packet = %08x\n", sprite_mode_packet); + + return sprite_mode_packet; +8002f004: 8fc20000 lw v0,0(s8) +} +8002f008: 03c0e821 move sp,s8 +8002f00c: 8fbe000c lw s8,12(sp) +8002f010: 27bd0010 addiu sp,sp,16 +8002f014: 03e00008 jr ra +8002f018: 00000000 nop + +8002f01c <GsListPos>: + +unsigned int GsListPos() +{ +8002f01c: 27bdfff8 addiu sp,sp,-8 +8002f020: afbe0004 sw s8,4(sp) +8002f024: 03a0f021 move s8,sp + return linked_list_pos; +8002f028: 3c028007 lui v0,0x8007 +8002f02c: 8c421cd8 lw v0,7384(v0) +} +8002f030: 03c0e821 move sp,s8 +8002f034: 8fbe0004 lw s8,4(sp) +8002f038: 27bd0008 addiu sp,sp,8 +8002f03c: 03e00008 jr ra +8002f040: 00000000 nop + +8002f044 <GsEnableDisplay>: + +void GsEnableDisplay(int enable) +{ +8002f044: 27bdffe8 addiu sp,sp,-24 +8002f048: afbf0014 sw ra,20(sp) +8002f04c: afbe0010 sw s8,16(sp) +8002f050: 03a0f021 move s8,sp +8002f054: afc40018 sw a0,24(s8) + gpu_ctrl(3, enable ? 0 : 1); +8002f058: 8fc20018 lw v0,24(s8) +8002f05c: 00000000 nop +8002f060: 2c420001 sltiu v0,v0,1 +8002f064: 304200ff andi v0,v0,0xff +8002f068: 00402821 move a1,v0 +8002f06c: 24040003 li a0,3 +8002f070: 0c00bb8b jal 8002ee2c <gpu_ctrl> +8002f074: 00000000 nop +} +8002f078: 00000000 nop +8002f07c: 03c0e821 move sp,s8 +8002f080: 8fbf0014 lw ra,20(sp) +8002f084: 8fbe0010 lw s8,16(sp) +8002f088: 27bd0018 addiu sp,sp,24 +8002f08c: 03e00008 jr ra +8002f090: 00000000 nop + +8002f094 <GsReset>: + +void GsReset() +{ +8002f094: 27bdffe8 addiu sp,sp,-24 +8002f098: afbf0014 sw ra,20(sp) +8002f09c: afbe0010 sw s8,16(sp) +8002f0a0: 03a0f021 move s8,sp + gpu_ctrl(0, 0); // Reset GPU +8002f0a4: 00002821 move a1,zero +8002f0a8: 00002021 move a0,zero +8002f0ac: 0c00bb8b jal 8002ee2c <gpu_ctrl> +8002f0b0: 00000000 nop +} +8002f0b4: 00000000 nop +8002f0b8: 03c0e821 move sp,s8 +8002f0bc: 8fbf0014 lw ra,20(sp) +8002f0c0: 8fbe0010 lw s8,16(sp) +8002f0c4: 27bd0018 addiu sp,sp,24 +8002f0c8: 03e00008 jr ra +8002f0cc: 00000000 nop + +8002f0d0 <GsInitEx>: + +void GsInitEx(unsigned int flags) +{ +8002f0d0: 27bdffe8 addiu sp,sp,-24 +8002f0d4: afbf0014 sw ra,20(sp) +8002f0d8: afbe0010 sw s8,16(sp) +8002f0dc: 03a0f021 move s8,sp +8002f0e0: afc40018 sw a0,24(s8) + //gpu_ctrl(0, 0); // Reset GPU + GsReset(); // Reset GPU +8002f0e4: 0c00bc25 jal 8002f094 <GsReset> +8002f0e8: 00000000 nop + + DPCR |= (1<<0xb); // Enable dma channel 2 +8002f0ec: 3c021f80 lui v0,0x1f80 +8002f0f0: 344210f0 ori v0,v0,0x10f0 +8002f0f4: 3c031f80 lui v1,0x1f80 +8002f0f8: 346310f0 ori v1,v1,0x10f0 +8002f0fc: 8c630000 lw v1,0(v1) +8002f100: 00000000 nop +8002f104: 34630800 ori v1,v1,0x800 +8002f108: ac430000 sw v1,0(v0) + gpu_ctrl(4, 2); // DMA CPU->GPU mode +8002f10c: 24050002 li a1,2 +8002f110: 24040004 li a0,4 +8002f114: 0c00bb8b jal 8002ee2c <gpu_ctrl> +8002f118: 00000000 nop + + //gpu_ctrl(3, 1); // Disable display + GsEnableDisplay(0); // Disable display +8002f11c: 00002021 move a0,zero +8002f120: 0c00bc11 jal 8002f044 <GsEnableDisplay> +8002f124: 00000000 nop + + GPU_DATA_PORT = 0x01000000; // Reset data port +8002f128: 3c021f80 lui v0,0x1f80 +8002f12c: 34421810 ori v0,v0,0x1810 +8002f130: 3c030100 lui v1,0x100 +8002f134: ac430000 sw v1,0(v0) + + /*gpu_ctrl(6, 0xc40240); // Horizontal start end + gpu_ctrl(7, 0x049025); // Vertical start end*/ + //DrawFBRect(0, 0, 1023, 511, 0, 0, 0); +} +8002f138: 00000000 nop +8002f13c: 03c0e821 move sp,s8 +8002f140: 8fbf0014 lw ra,20(sp) +8002f144: 8fbe0010 lw s8,16(sp) +8002f148: 27bd0018 addiu sp,sp,24 +8002f14c: 03e00008 jr ra +8002f150: 00000000 nop + +8002f154 <GsInit>: + +void GsInit() +{ +8002f154: 27bdffe8 addiu sp,sp,-24 +8002f158: afbf0014 sw ra,20(sp) +8002f15c: afbe0010 sw s8,16(sp) +8002f160: 03a0f021 move s8,sp + GsInitEx(0); +8002f164: 00002021 move a0,zero +8002f168: 0c00bc34 jal 8002f0d0 <GsInitEx> +8002f16c: 00000000 nop +} +8002f170: 00000000 nop +8002f174: 03c0e821 move sp,s8 +8002f178: 8fbf0014 lw ra,20(sp) +8002f17c: 8fbe0010 lw s8,16(sp) +8002f180: 27bd0018 addiu sp,sp,24 +8002f184: 03e00008 jr ra +8002f188: 00000000 nop + +8002f18c <GsSetVideoMode>: + + ExitCriticalSection(); +}*/ + +int GsSetVideoMode(int width, int height, int video_mode) +{ +8002f18c: 27bdffe0 addiu sp,sp,-32 +8002f190: afbf001c sw ra,28(sp) +8002f194: afbe0018 sw s8,24(sp) +8002f198: 03a0f021 move s8,sp +8002f19c: afc40020 sw a0,32(s8) +8002f1a0: afc50024 sw a1,36(s8) +8002f1a4: afc60028 sw a2,40(s8) + // Just a quick wrapper for GsSetVideoModeEx + return GsSetVideoModeEx(width, height, video_mode, 0, 0, 0); +8002f1a8: afa00014 sw zero,20(sp) +8002f1ac: afa00010 sw zero,16(sp) +8002f1b0: 00003821 move a3,zero +8002f1b4: 8fc60028 lw a2,40(s8) +8002f1b8: 8fc50024 lw a1,36(s8) +8002f1bc: 8fc40020 lw a0,32(s8) +8002f1c0: 0c00bc78 jal 8002f1e0 <GsSetVideoModeEx> +8002f1c4: 00000000 nop +} +8002f1c8: 03c0e821 move sp,s8 +8002f1cc: 8fbf001c lw ra,28(sp) +8002f1d0: 8fbe0018 lw s8,24(sp) +8002f1d4: 27bd0020 addiu sp,sp,32 +8002f1d8: 03e00008 jr ra +8002f1dc: 00000000 nop + +8002f1e0 <GsSetVideoModeEx>: + +int GsSetVideoModeEx(int width, int height, int video_mode, int rgb24, + int inter, int reverse) +{ +8002f1e0: 27bdffe0 addiu sp,sp,-32 +8002f1e4: afbf001c sw ra,28(sp) +8002f1e8: afbe0018 sw s8,24(sp) +8002f1ec: 03a0f021 move s8,sp +8002f1f0: afc40020 sw a0,32(s8) +8002f1f4: afc50024 sw a1,36(s8) +8002f1f8: afc60028 sw a2,40(s8) +8002f1fc: afc7002c sw a3,44(s8) + unsigned char mode = 0; +8002f200: a3c00010 sb zero,16(s8) + + GsEnableDisplay(0); +8002f204: 00002021 move a0,zero +8002f208: 0c00bc11 jal 8002f044 <GsEnableDisplay> +8002f20c: 00000000 nop + + if(video_mode == VMODE_NTSC) +8002f210: 8fc20028 lw v0,40(s8) +8002f214: 00000000 nop +8002f218: 1440000d bnez v0,8002f250 <GsSetVideoModeEx+0x70> +8002f21c: 00000000 nop + { + gpu_ctrl(6, 0xC4E24E); // Horizontal screen range +8002f220: 3c0200c4 lui v0,0xc4 +8002f224: 3445e24e ori a1,v0,0xe24e +8002f228: 24040006 li a0,6 +8002f22c: 0c00bb8b jal 8002ee2c <gpu_ctrl> +8002f230: 00000000 nop + gpu_ctrl(7, 0x040010); // Vertical screen range +8002f234: 3c020004 lui v0,0x4 +8002f238: 34450010 ori a1,v0,0x10 +8002f23c: 24040007 li a0,7 +8002f240: 0c00bb8b jal 8002ee2c <gpu_ctrl> +8002f244: 00000000 nop +8002f248: 1000000b b 8002f278 <GsSetVideoModeEx+0x98> +8002f24c: 00000000 nop + } + else + { + gpu_ctrl(6, 0xC62262); // Horizontal screen range +8002f250: 3c0200c6 lui v0,0xc6 +8002f254: 34452262 ori a1,v0,0x2262 +8002f258: 24040006 li a0,6 +8002f25c: 0c00bb8b jal 8002ee2c <gpu_ctrl> +8002f260: 00000000 nop + gpu_ctrl(7, 0x04B42D); // Vertical screen range +8002f264: 3c020004 lui v0,0x4 +8002f268: 3445b42d ori a1,v0,0xb42d +8002f26c: 24040007 li a0,7 +8002f270: 0c00bb8b jal 8002ee2c <gpu_ctrl> +8002f274: 00000000 nop + } + + switch(height) +8002f278: 8fc20024 lw v0,36(s8) +8002f27c: 240300f0 li v1,240 +8002f280: 10430014 beq v0,v1,8002f2d4 <GsSetVideoModeEx+0xf4> +8002f284: 00000000 nop +8002f288: 240301e0 li v1,480 +8002f28c: 14430007 bne v0,v1,8002f2ac <GsSetVideoModeEx+0xcc> +8002f290: 00000000 nop + { + case 240: + break; + case 480: + mode|=4; +8002f294: 93c20010 lbu v0,16(s8) +8002f298: 00000000 nop +8002f29c: 34420004 ori v0,v0,0x4 +8002f2a0: a3c20010 sb v0,16(s8) + break; +8002f2a4: 1000000c b 8002f2d8 <GsSetVideoModeEx+0xf8> +8002f2a8: 00000000 nop + default: + printf("%s: error, unknown width %d!\n", __FUNCTION__, width); +8002f2ac: 8fc60020 lw a2,32(s8) +8002f2b0: 3c028004 lui v0,0x8004 +8002f2b4: 2445fd88 addiu a1,v0,-632 +8002f2b8: 3c028004 lui v0,0x8004 +8002f2bc: 2444fd48 addiu a0,v0,-696 +8002f2c0: 0c00ed8f jal 8003b63c <printf> +8002f2c4: 00000000 nop + return 0; +8002f2c8: 00001021 move v0,zero +8002f2cc: 10000075 b 8002f4a4 <GsSetVideoModeEx+0x2c4> +8002f2d0: 00000000 nop + } + + switch(height) + { + case 240: + break; +8002f2d4: 00000000 nop + default: + printf("%s: error, unknown width %d!\n", __FUNCTION__, width); + return 0; + } + + switch(width) +8002f2d8: 8fc20020 lw v0,32(s8) +8002f2dc: 24030180 li v1,384 +8002f2e0: 10430026 beq v0,v1,8002f37c <GsSetVideoModeEx+0x19c> +8002f2e4: 00000000 nop +8002f2e8: 28430181 slti v1,v0,385 +8002f2ec: 10600009 beqz v1,8002f314 <GsSetVideoModeEx+0x134> +8002f2f0: 00000000 nop +8002f2f4: 24030100 li v1,256 +8002f2f8: 10430030 beq v0,v1,8002f3bc <GsSetVideoModeEx+0x1dc> +8002f2fc: 00000000 nop +8002f300: 24030140 li v1,320 +8002f304: 1043000b beq v0,v1,8002f334 <GsSetVideoModeEx+0x154> +8002f308: 00000000 nop +8002f30c: 10000021 b 8002f394 <GsSetVideoModeEx+0x1b4> +8002f310: 00000000 nop +8002f314: 24030200 li v1,512 +8002f318: 1043000c beq v0,v1,8002f34c <GsSetVideoModeEx+0x16c> +8002f31c: 00000000 nop +8002f320: 24030280 li v1,640 +8002f324: 1043000f beq v0,v1,8002f364 <GsSetVideoModeEx+0x184> +8002f328: 00000000 nop +8002f32c: 10000019 b 8002f394 <GsSetVideoModeEx+0x1b4> +8002f330: 00000000 nop + { + case 256: + break; + case 320: + mode|=1; +8002f334: 93c20010 lbu v0,16(s8) +8002f338: 00000000 nop +8002f33c: 34420001 ori v0,v0,0x1 +8002f340: a3c20010 sb v0,16(s8) + break; +8002f344: 1000001e b 8002f3c0 <GsSetVideoModeEx+0x1e0> +8002f348: 00000000 nop + case 512: + mode|=2; +8002f34c: 93c20010 lbu v0,16(s8) +8002f350: 00000000 nop +8002f354: 34420002 ori v0,v0,0x2 +8002f358: a3c20010 sb v0,16(s8) + break; +8002f35c: 10000018 b 8002f3c0 <GsSetVideoModeEx+0x1e0> +8002f360: 00000000 nop + case 640: + mode|=3; +8002f364: 93c20010 lbu v0,16(s8) +8002f368: 00000000 nop +8002f36c: 34420003 ori v0,v0,0x3 +8002f370: a3c20010 sb v0,16(s8) + break; +8002f374: 10000012 b 8002f3c0 <GsSetVideoModeEx+0x1e0> +8002f378: 00000000 nop + case 384: + mode|=64; +8002f37c: 93c20010 lbu v0,16(s8) +8002f380: 00000000 nop +8002f384: 34420040 ori v0,v0,0x40 +8002f388: a3c20010 sb v0,16(s8) + break; +8002f38c: 1000000c b 8002f3c0 <GsSetVideoModeEx+0x1e0> +8002f390: 00000000 nop + default: + printf("%s: error, unknown height %d!\n", __FUNCTION__, height); +8002f394: 8fc60024 lw a2,36(s8) +8002f398: 3c028004 lui v0,0x8004 +8002f39c: 2445fd88 addiu a1,v0,-632 +8002f3a0: 3c028004 lui v0,0x8004 +8002f3a4: 2444fd68 addiu a0,v0,-664 +8002f3a8: 0c00ed8f jal 8003b63c <printf> +8002f3ac: 00000000 nop + return 0; +8002f3b0: 00001021 move v0,zero +8002f3b4: 1000003b b 8002f4a4 <GsSetVideoModeEx+0x2c4> +8002f3b8: 00000000 nop + } + + switch(width) + { + case 256: + break; +8002f3bc: 00000000 nop + default: + printf("%s: error, unknown height %d!\n", __FUNCTION__, height); + return 0; + } + + if(video_mode)mode|=8; // Set PAL +8002f3c0: 8fc20028 lw v0,40(s8) +8002f3c4: 00000000 nop +8002f3c8: 10400005 beqz v0,8002f3e0 <GsSetVideoModeEx+0x200> +8002f3cc: 00000000 nop +8002f3d0: 93c20010 lbu v0,16(s8) +8002f3d4: 00000000 nop +8002f3d8: 34420008 ori v0,v0,0x8 +8002f3dc: a3c20010 sb v0,16(s8) + if(rgb24)mode|=16; // Set unaccellerated 24-bit mode +8002f3e0: 8fc2002c lw v0,44(s8) +8002f3e4: 00000000 nop +8002f3e8: 10400005 beqz v0,8002f400 <GsSetVideoModeEx+0x220> +8002f3ec: 00000000 nop +8002f3f0: 93c20010 lbu v0,16(s8) +8002f3f4: 00000000 nop +8002f3f8: 34420010 ori v0,v0,0x10 +8002f3fc: a3c20010 sb v0,16(s8) + if(inter)mode|=32; // Set interlaced video mode +8002f400: 8fc20030 lw v0,48(s8) +8002f404: 00000000 nop +8002f408: 10400005 beqz v0,8002f420 <GsSetVideoModeEx+0x240> +8002f40c: 00000000 nop +8002f410: 93c20010 lbu v0,16(s8) +8002f414: 00000000 nop +8002f418: 34420020 ori v0,v0,0x20 +8002f41c: a3c20010 sb v0,16(s8) + if(reverse)mode|=128; // Set reverse flag (?) +8002f420: 8fc20034 lw v0,52(s8) +8002f424: 00000000 nop +8002f428: 10400005 beqz v0,8002f440 <GsSetVideoModeEx+0x260> +8002f42c: 00000000 nop +8002f430: 93c30010 lbu v1,16(s8) +8002f434: 2402ff80 li v0,-128 +8002f438: 00621025 or v0,v1,v0 +8002f43c: a3c20010 sb v0,16(s8) + + gpu_ctrl(8, mode); +8002f440: 93c20010 lbu v0,16(s8) +8002f444: 00000000 nop +8002f448: 00402821 move a1,v0 +8002f44c: 24040008 li a0,8 +8002f450: 0c00bb8b jal 8002ee2c <gpu_ctrl> +8002f454: 00000000 nop + GsEnableDisplay(1); +8002f458: 24040001 li a0,1 +8002f45c: 0c00bc11 jal 8002f044 <GsEnableDisplay> +8002f460: 00000000 nop + + GsScreenW = width; +8002f464: 8fc20020 lw v0,32(s8) +8002f468: 00000000 nop +8002f46c: 3043ffff andi v1,v0,0xffff +8002f470: 3c028007 lui v0,0x8007 +8002f474: a4431d48 sh v1,7496(v0) + GsScreenH = height; +8002f478: 8fc20024 lw v0,36(s8) +8002f47c: 00000000 nop +8002f480: 3043ffff andi v1,v0,0xffff +8002f484: 3c028007 lui v0,0x8007 +8002f488: a4431d42 sh v1,7490(v0) + GsScreenM = video_mode; +8002f48c: 8fc20028 lw v0,40(s8) +8002f490: 00000000 nop +8002f494: 304300ff andi v1,v0,0xff +8002f498: 3c028007 lui v0,0x8007 +8002f49c: a0431d50 sb v1,7504(v0) + + return 1; +8002f4a0: 24020001 li v0,1 +} +8002f4a4: 03c0e821 move sp,s8 +8002f4a8: 8fbf001c lw ra,28(sp) +8002f4ac: 8fbe0018 lw s8,24(sp) +8002f4b0: 27bd0020 addiu sp,sp,32 +8002f4b4: 03e00008 jr ra +8002f4b8: 00000000 nop + +8002f4bc <DrawFBRect>: + +void DrawFBRect(int x, int y, int w, int h, int r, int g, int b) +{ +8002f4bc: 27bdffe8 addiu sp,sp,-24 +8002f4c0: afbf0014 sw ra,20(sp) +8002f4c4: afbe0010 sw s8,16(sp) +8002f4c8: 03a0f021 move s8,sp +8002f4cc: afc40018 sw a0,24(s8) +8002f4d0: afc5001c sw a1,28(s8) +8002f4d4: afc60020 sw a2,32(s8) +8002f4d8: afc70024 sw a3,36(s8) + while(!(GPU_CONTROL_PORT & (1<<0x1c))); +8002f4dc: 00000000 nop +8002f4e0: 3c021f80 lui v0,0x1f80 +8002f4e4: 34421814 ori v0,v0,0x1814 +8002f4e8: 8c430000 lw v1,0(v0) +8002f4ec: 3c021000 lui v0,0x1000 +8002f4f0: 00621024 and v0,v1,v0 +8002f4f4: 1040fffa beqz v0,8002f4e0 <DrawFBRect+0x24> +8002f4f8: 00000000 nop + + // Disable DMA + GPU_CONTROL_PORT = 0x04000000; +8002f4fc: 3c021f80 lui v0,0x1f80 +8002f500: 34421814 ori v0,v0,0x1814 +8002f504: 3c030400 lui v1,0x400 +8002f508: ac430000 sw v1,0(v0) + + GPU_DATA_PORT = 0x01000000; // Reset data port +8002f50c: 3c021f80 lui v0,0x1f80 +8002f510: 34421810 ori v0,v0,0x1810 +8002f514: 3c030100 lui v1,0x100 +8002f518: ac430000 sw v1,0(v0) + GPU_DATA_PORT = 0xE6000000; // Disable masking stuff +8002f51c: 3c021f80 lui v0,0x1f80 +8002f520: 34421810 ori v0,v0,0x1810 +8002f524: 3c03e600 lui v1,0xe600 +8002f528: ac430000 sw v1,0(v0) + gpu_data_ctrl(2, ((b&0xff)<<16)|((g&0xff)<<8)|r); +8002f52c: 8fc20030 lw v0,48(s8) +8002f530: 00000000 nop +8002f534: 304200ff andi v0,v0,0xff +8002f538: 00021c00 sll v1,v0,0x10 +8002f53c: 8fc2002c lw v0,44(s8) +8002f540: 00000000 nop +8002f544: 00021200 sll v0,v0,0x8 +8002f548: 3042ffff andi v0,v0,0xffff +8002f54c: 00621825 or v1,v1,v0 +8002f550: 8fc20028 lw v0,40(s8) +8002f554: 00000000 nop +8002f558: 00621025 or v0,v1,v0 +8002f55c: 00402821 move a1,v0 +8002f560: 24040002 li a0,2 +8002f564: 0c00bbb5 jal 8002eed4 <gpu_data_ctrl> +8002f568: 00000000 nop + GPU_DATA_PORT = (y<<16)|x; +8002f56c: 3c021f80 lui v0,0x1f80 +8002f570: 34421810 ori v0,v0,0x1810 +8002f574: 8fc3001c lw v1,28(s8) +8002f578: 00000000 nop +8002f57c: 00032400 sll a0,v1,0x10 +8002f580: 8fc30018 lw v1,24(s8) +8002f584: 00000000 nop +8002f588: 00831825 or v1,a0,v1 +8002f58c: ac430000 sw v1,0(v0) + GPU_DATA_PORT = (h<<16)|w; +8002f590: 3c021f80 lui v0,0x1f80 +8002f594: 34421810 ori v0,v0,0x1810 +8002f598: 8fc30024 lw v1,36(s8) +8002f59c: 00000000 nop +8002f5a0: 00032400 sll a0,v1,0x10 +8002f5a4: 8fc30020 lw v1,32(s8) +8002f5a8: 00000000 nop +8002f5ac: 00831825 or v1,a0,v1 +8002f5b0: ac430000 sw v1,0(v0) +} +8002f5b4: 00000000 nop +8002f5b8: 03c0e821 move sp,s8 +8002f5bc: 8fbf0014 lw ra,20(sp) +8002f5c0: 8fbe0010 lw s8,16(sp) +8002f5c4: 27bd0018 addiu sp,sp,24 +8002f5c8: 03e00008 jr ra +8002f5cc: 00000000 nop + +8002f5d0 <GsClearMem>: + +void GsClearMem() +{ +8002f5d0: 27bdffd8 addiu sp,sp,-40 +8002f5d4: afbf0024 sw ra,36(sp) +8002f5d8: afbe0020 sw s8,32(sp) +8002f5dc: 03a0f021 move s8,sp + // "Clears" the entire video memory by using DrawFBRect + // and waits that it has finished drawing... + + DrawFBRect(0,0,1023,511,0,0,0); +8002f5e0: afa00018 sw zero,24(sp) +8002f5e4: afa00014 sw zero,20(sp) +8002f5e8: afa00010 sw zero,16(sp) +8002f5ec: 240701ff li a3,511 +8002f5f0: 240603ff li a2,1023 +8002f5f4: 00002821 move a1,zero +8002f5f8: 00002021 move a0,zero +8002f5fc: 0c00bd2f jal 8002f4bc <DrawFBRect> +8002f600: 00000000 nop + while(GsIsDrawing()); +8002f604: 00000000 nop +8002f608: 0c00bf9f jal 8002fe7c <GsIsDrawing> +8002f60c: 00000000 nop +8002f610: 1440fffd bnez v0,8002f608 <GsClearMem+0x38> +8002f614: 00000000 nop + DrawFBRect(0,511,1023,1,0,0,0); +8002f618: afa00018 sw zero,24(sp) +8002f61c: afa00014 sw zero,20(sp) +8002f620: afa00010 sw zero,16(sp) +8002f624: 24070001 li a3,1 +8002f628: 240603ff li a2,1023 +8002f62c: 240501ff li a1,511 +8002f630: 00002021 move a0,zero +8002f634: 0c00bd2f jal 8002f4bc <DrawFBRect> +8002f638: 00000000 nop + while(GsIsDrawing()); +8002f63c: 00000000 nop +8002f640: 0c00bf9f jal 8002fe7c <GsIsDrawing> +8002f644: 00000000 nop +8002f648: 1440fffd bnez v0,8002f640 <GsClearMem+0x70> +8002f64c: 00000000 nop + DrawFBRect(1023,511,1,1,0,0,0); +8002f650: afa00018 sw zero,24(sp) +8002f654: afa00014 sw zero,20(sp) +8002f658: afa00010 sw zero,16(sp) +8002f65c: 24070001 li a3,1 +8002f660: 24060001 li a2,1 +8002f664: 240501ff li a1,511 +8002f668: 240403ff li a0,1023 +8002f66c: 0c00bd2f jal 8002f4bc <DrawFBRect> +8002f670: 00000000 nop + while(GsIsDrawing()); +8002f674: 00000000 nop +8002f678: 0c00bf9f jal 8002fe7c <GsIsDrawing> +8002f67c: 00000000 nop +8002f680: 1440fffd bnez v0,8002f678 <GsClearMem+0xa8> +8002f684: 00000000 nop +} +8002f688: 00000000 nop +8002f68c: 03c0e821 move sp,s8 +8002f690: 8fbf0024 lw ra,36(sp) +8002f694: 8fbe0020 lw s8,32(sp) +8002f698: 27bd0028 addiu sp,sp,40 +8002f69c: 03e00008 jr ra +8002f6a0: 00000000 nop + +8002f6a4 <GsImageFromTim>: + +int GsImageFromTim(GsImage *image, void *timdata) +{ +8002f6a4: 27bdffe8 addiu sp,sp,-24 +8002f6a8: afbe0014 sw s8,20(sp) +8002f6ac: 03a0f021 move s8,sp +8002f6b0: afc40018 sw a0,24(s8) +8002f6b4: afc5001c sw a1,28(s8) + unsigned int *timdata_i = (unsigned int*)timdata; +8002f6b8: 8fc2001c lw v0,28(s8) +8002f6bc: 00000000 nop +8002f6c0: afc20004 sw v0,4(s8) + unsigned short *timdata_s = (unsigned short*)timdata; +8002f6c4: 8fc2001c lw v0,28(s8) +8002f6c8: 00000000 nop +8002f6cc: afc20008 sw v0,8(s8) + unsigned int pdata_pos; + unsigned int pdata_pos_s; + + //printf("timdata_i[0] = %08x\n", timdata_i[0]); + + if(timdata_i[0] != 0x10) +8002f6d0: 8fc20004 lw v0,4(s8) +8002f6d4: 00000000 nop +8002f6d8: 8c430000 lw v1,0(v0) +8002f6dc: 24020010 li v0,16 +8002f6e0: 10620004 beq v1,v0,8002f6f4 <GsImageFromTim+0x50> +8002f6e4: 00000000 nop + { + //printf("timdata_i[0] = %08x\n", timdata_i[0]); + return 0; // Unknown version or ID +8002f6e8: 00001021 move v0,zero +8002f6ec: 10000094 b 8002f940 <GsImageFromTim+0x29c> +8002f6f0: 00000000 nop + } + + image->pmode = timdata_i[1] & 7; +8002f6f4: 8fc20004 lw v0,4(s8) +8002f6f8: 00000000 nop +8002f6fc: 24420004 addiu v0,v0,4 +8002f700: 8c420000 lw v0,0(v0) +8002f704: 00000000 nop +8002f708: 30430007 andi v1,v0,0x7 +8002f70c: 8fc20018 lw v0,24(s8) +8002f710: 00000000 nop +8002f714: ac430000 sw v1,0(v0) + + //printf("image->pmode = %d\n", image->pmode); + + image->has_clut = (timdata_i[1] & 8) ? 1 : 0; +8002f718: 8fc20004 lw v0,4(s8) +8002f71c: 00000000 nop +8002f720: 24420004 addiu v0,v0,4 +8002f724: 8c420000 lw v0,0(v0) +8002f728: 00000000 nop +8002f72c: 30420008 andi v0,v0,0x8 +8002f730: 0002102b sltu v0,zero,v0 +8002f734: 304200ff andi v0,v0,0xff +8002f738: 00401821 move v1,v0 +8002f73c: 8fc20018 lw v0,24(s8) +8002f740: 00000000 nop +8002f744: ac430004 sw v1,4(v0) + + if(!image->has_clut) +8002f748: 8fc20018 lw v0,24(s8) +8002f74c: 00000000 nop +8002f750: 8c420004 lw v0,4(v0) +8002f754: 00000000 nop +8002f758: 14400005 bnez v0,8002f770 <GsImageFromTim+0xcc> +8002f75c: 00000000 nop + pdata_pos = 8; +8002f760: 24020008 li v0,8 +8002f764: afc20000 sw v0,0(s8) +8002f768: 10000032 b 8002f834 <GsImageFromTim+0x190> +8002f76c: 00000000 nop + else + { + pdata_pos = 8 + timdata_i[2]; +8002f770: 8fc20004 lw v0,4(s8) +8002f774: 00000000 nop +8002f778: 24420008 addiu v0,v0,8 +8002f77c: 8c420000 lw v0,0(v0) +8002f780: 00000000 nop +8002f784: 24420008 addiu v0,v0,8 +8002f788: afc20000 sw v0,0(s8) + image->clut_x = timdata_s[6]; +8002f78c: 8fc20008 lw v0,8(s8) +8002f790: 00000000 nop +8002f794: 2442000c addiu v0,v0,12 +8002f798: 94420000 lhu v0,0(v0) +8002f79c: 00000000 nop +8002f7a0: 00401821 move v1,v0 +8002f7a4: 8fc20018 lw v0,24(s8) +8002f7a8: 00000000 nop +8002f7ac: ac430008 sw v1,8(v0) + image->clut_y = timdata_s[7]; +8002f7b0: 8fc20008 lw v0,8(s8) +8002f7b4: 00000000 nop +8002f7b8: 2442000e addiu v0,v0,14 +8002f7bc: 94420000 lhu v0,0(v0) +8002f7c0: 00000000 nop +8002f7c4: 00401821 move v1,v0 +8002f7c8: 8fc20018 lw v0,24(s8) +8002f7cc: 00000000 nop +8002f7d0: ac43000c sw v1,12(v0) + image->clut_w = timdata_s[8]; +8002f7d4: 8fc20008 lw v0,8(s8) +8002f7d8: 00000000 nop +8002f7dc: 24420010 addiu v0,v0,16 +8002f7e0: 94420000 lhu v0,0(v0) +8002f7e4: 00000000 nop +8002f7e8: 00401821 move v1,v0 +8002f7ec: 8fc20018 lw v0,24(s8) +8002f7f0: 00000000 nop +8002f7f4: ac430010 sw v1,16(v0) + image->clut_h = timdata_s[9]; +8002f7f8: 8fc20008 lw v0,8(s8) +8002f7fc: 00000000 nop +8002f800: 24420012 addiu v0,v0,18 +8002f804: 94420000 lhu v0,0(v0) +8002f808: 00000000 nop +8002f80c: 00401821 move v1,v0 +8002f810: 8fc20018 lw v0,24(s8) +8002f814: 00000000 nop +8002f818: ac430014 sw v1,20(v0) + image->clut_data = &timdata_s[10]; +8002f81c: 8fc20008 lw v0,8(s8) +8002f820: 00000000 nop +8002f824: 24430014 addiu v1,v0,20 +8002f828: 8fc20018 lw v0,24(s8) +8002f82c: 00000000 nop +8002f830: ac430028 sw v1,40(v0) + printf("image->clut_x = %d\n", image->clut_x); + printf("image->clut_h = %d\n", image->clut_h); + printf("image->clut_w = %d\n", image->clut_w);*/ + } + + pdata_pos_s = pdata_pos / 2; +8002f834: 8fc20000 lw v0,0(s8) +8002f838: 00000000 nop +8002f83c: 00021042 srl v0,v0,0x1 +8002f840: afc2000c sw v0,12(s8) + + image->x = timdata_s[pdata_pos_s + 2]; +8002f844: 8fc2000c lw v0,12(s8) +8002f848: 00000000 nop +8002f84c: 24420002 addiu v0,v0,2 +8002f850: 00021040 sll v0,v0,0x1 +8002f854: 8fc30008 lw v1,8(s8) +8002f858: 00000000 nop +8002f85c: 00621021 addu v0,v1,v0 +8002f860: 94420000 lhu v0,0(v0) +8002f864: 00000000 nop +8002f868: 00401821 move v1,v0 +8002f86c: 8fc20018 lw v0,24(s8) +8002f870: 00000000 nop +8002f874: ac430018 sw v1,24(v0) + image->y = timdata_s[pdata_pos_s + 3]; +8002f878: 8fc2000c lw v0,12(s8) +8002f87c: 00000000 nop +8002f880: 24420003 addiu v0,v0,3 +8002f884: 00021040 sll v0,v0,0x1 +8002f888: 8fc30008 lw v1,8(s8) +8002f88c: 00000000 nop +8002f890: 00621021 addu v0,v1,v0 +8002f894: 94420000 lhu v0,0(v0) +8002f898: 00000000 nop +8002f89c: 00401821 move v1,v0 +8002f8a0: 8fc20018 lw v0,24(s8) +8002f8a4: 00000000 nop +8002f8a8: ac43001c sw v1,28(v0) + image->w = timdata_s[pdata_pos_s + 4]; +8002f8ac: 8fc2000c lw v0,12(s8) +8002f8b0: 00000000 nop +8002f8b4: 24420004 addiu v0,v0,4 +8002f8b8: 00021040 sll v0,v0,0x1 +8002f8bc: 8fc30008 lw v1,8(s8) +8002f8c0: 00000000 nop +8002f8c4: 00621021 addu v0,v1,v0 +8002f8c8: 94420000 lhu v0,0(v0) +8002f8cc: 00000000 nop +8002f8d0: 00401821 move v1,v0 +8002f8d4: 8fc20018 lw v0,24(s8) +8002f8d8: 00000000 nop +8002f8dc: ac430020 sw v1,32(v0) + image->h = timdata_s[pdata_pos_s + 5]; +8002f8e0: 8fc2000c lw v0,12(s8) +8002f8e4: 00000000 nop +8002f8e8: 24420005 addiu v0,v0,5 +8002f8ec: 00021040 sll v0,v0,0x1 +8002f8f0: 8fc30008 lw v1,8(s8) +8002f8f4: 00000000 nop +8002f8f8: 00621021 addu v0,v1,v0 +8002f8fc: 94420000 lhu v0,0(v0) +8002f900: 00000000 nop +8002f904: 00401821 move v1,v0 +8002f908: 8fc20018 lw v0,24(s8) +8002f90c: 00000000 nop +8002f910: ac430024 sw v1,36(v0) + image->data = &timdata_s[pdata_pos_s + 6]; +8002f914: 8fc2000c lw v0,12(s8) +8002f918: 00000000 nop +8002f91c: 24420006 addiu v0,v0,6 +8002f920: 00021040 sll v0,v0,0x1 +8002f924: 8fc30008 lw v1,8(s8) +8002f928: 00000000 nop +8002f92c: 00621821 addu v1,v1,v0 +8002f930: 8fc20018 lw v0,24(s8) +8002f934: 00000000 nop +8002f938: ac43002c sw v1,44(v0) + /*printf("image->y = %d\n", image->y); + printf("image->x = %d\n", image->x); + printf("image->h = %d\n", image->h); + printf("image->w = %d\n", image->w);*/ + + return 1; +8002f93c: 24020001 li v0,1 +} +8002f940: 03c0e821 move sp,s8 +8002f944: 8fbe0014 lw s8,20(sp) +8002f948: 27bd0018 addiu sp,sp,24 +8002f94c: 03e00008 jr ra +8002f950: 00000000 nop + +8002f954 <GsUploadImage>: + +void GsUploadImage(GsImage *image) +{ +8002f954: 27bdffe0 addiu sp,sp,-32 +8002f958: afbf001c sw ra,28(sp) +8002f95c: afbe0018 sw s8,24(sp) +8002f960: 03a0f021 move s8,sp +8002f964: afc40020 sw a0,32(s8) + if(image->has_clut) +8002f968: 8fc20020 lw v0,32(s8) +8002f96c: 00000000 nop +8002f970: 8c420004 lw v0,4(v0) +8002f974: 00000000 nop +8002f978: 10400004 beqz v0,8002f98c <GsUploadImage+0x38> +8002f97c: 00000000 nop + { + GsUploadCLUT(image); +8002f980: 8fc40020 lw a0,32(s8) +8002f984: 0c00be81 jal 8002fa04 <GsUploadCLUT> +8002f988: 00000000 nop + } + + LoadImage(image->data, image->x, image->y, image->w, image->h); +8002f98c: 8fc20020 lw v0,32(s8) +8002f990: 00000000 nop +8002f994: 8c43002c lw v1,44(v0) +8002f998: 8fc20020 lw v0,32(s8) +8002f99c: 00000000 nop +8002f9a0: 8c440018 lw a0,24(v0) +8002f9a4: 8fc20020 lw v0,32(s8) +8002f9a8: 00000000 nop +8002f9ac: 8c45001c lw a1,28(v0) +8002f9b0: 8fc20020 lw v0,32(s8) +8002f9b4: 00000000 nop +8002f9b8: 8c460020 lw a2,32(v0) +8002f9bc: 8fc20020 lw v0,32(s8) +8002f9c0: 00000000 nop +8002f9c4: 8c420024 lw v0,36(v0) +8002f9c8: 00000000 nop +8002f9cc: afa20010 sw v0,16(sp) +8002f9d0: 00c03821 move a3,a2 +8002f9d4: 00a03021 move a2,a1 +8002f9d8: 00802821 move a1,a0 +8002f9dc: 00602021 move a0,v1 +8002f9e0: 0c00ba60 jal 8002e980 <LoadImage> +8002f9e4: 00000000 nop +} +8002f9e8: 00000000 nop +8002f9ec: 03c0e821 move sp,s8 +8002f9f0: 8fbf001c lw ra,28(sp) +8002f9f4: 8fbe0018 lw s8,24(sp) +8002f9f8: 27bd0020 addiu sp,sp,32 +8002f9fc: 03e00008 jr ra +8002fa00: 00000000 nop + +8002fa04 <GsUploadCLUT>: + +void GsUploadCLUT(GsImage * image) +{ +8002fa04: 27bdffe0 addiu sp,sp,-32 +8002fa08: afbf001c sw ra,28(sp) +8002fa0c: afbe0018 sw s8,24(sp) +8002fa10: 03a0f021 move s8,sp +8002fa14: afc40020 sw a0,32(s8) + LoadImage( image->clut_data, image->clut_x, image->clut_y, +8002fa18: 8fc20020 lw v0,32(s8) +8002fa1c: 00000000 nop +8002fa20: 8c430028 lw v1,40(v0) +8002fa24: 8fc20020 lw v0,32(s8) +8002fa28: 00000000 nop +8002fa2c: 8c440008 lw a0,8(v0) +8002fa30: 8fc20020 lw v0,32(s8) +8002fa34: 00000000 nop +8002fa38: 8c45000c lw a1,12(v0) +8002fa3c: 8fc20020 lw v0,32(s8) +8002fa40: 00000000 nop +8002fa44: 8c460010 lw a2,16(v0) +8002fa48: 8fc20020 lw v0,32(s8) +8002fa4c: 00000000 nop +8002fa50: 8c420014 lw v0,20(v0) +8002fa54: 00000000 nop +8002fa58: afa20010 sw v0,16(sp) +8002fa5c: 00c03821 move a3,a2 +8002fa60: 00a03021 move a2,a1 +8002fa64: 00802821 move a1,a0 +8002fa68: 00602021 move a0,v1 +8002fa6c: 0c00ba60 jal 8002e980 <LoadImage> +8002fa70: 00000000 nop + image->clut_w, image->clut_h ); +} +8002fa74: 00000000 nop +8002fa78: 03c0e821 move sp,s8 +8002fa7c: 8fbf001c lw ra,28(sp) +8002fa80: 8fbe0018 lw s8,24(sp) +8002fa84: 27bd0020 addiu sp,sp,32 +8002fa88: 03e00008 jr ra +8002fa8c: 00000000 nop + +8002fa90 <GsSpriteFromImage>: + +int GsSpriteFromImage(GsSprite *sprite, GsImage *image, int do_upload) +{ +8002fa90: 27bdffe8 addiu sp,sp,-24 +8002fa94: afbf0014 sw ra,20(sp) +8002fa98: afbe0010 sw s8,16(sp) +8002fa9c: 03a0f021 move s8,sp +8002faa0: afc40018 sw a0,24(s8) +8002faa4: afc5001c sw a1,28(s8) +8002faa8: afc60020 sw a2,32(s8) + if(do_upload) +8002faac: 8fc20020 lw v0,32(s8) +8002fab0: 00000000 nop +8002fab4: 10400004 beqz v0,8002fac8 <GsSpriteFromImage+0x38> +8002fab8: 00000000 nop + GsUploadImage(image); +8002fabc: 8fc4001c lw a0,28(s8) +8002fac0: 0c00be55 jal 8002f954 <GsUploadImage> +8002fac4: 00000000 nop + + bzero(sprite, sizeof(GsSprite)); +8002fac8: 2406002c li a2,44 +8002facc: 00002821 move a1,zero +8002fad0: 8fc40018 lw a0,24(s8) +8002fad4: 0c00d7ab jal 80035eac <memset> +8002fad8: 00000000 nop + + sprite->tpage = (image->x / 64) + ((image->y/256)*16); +8002fadc: 8fc2001c lw v0,28(s8) +8002fae0: 00000000 nop +8002fae4: 8c420018 lw v0,24(v0) +8002fae8: 00000000 nop +8002faec: 04410002 bgez v0,8002faf8 <GsSpriteFromImage+0x68> +8002faf0: 00000000 nop +8002faf4: 2442003f addiu v0,v0,63 +8002faf8: 00021183 sra v0,v0,0x6 +8002fafc: 304300ff andi v1,v0,0xff +8002fb00: 8fc2001c lw v0,28(s8) +8002fb04: 00000000 nop +8002fb08: 8c42001c lw v0,28(v0) +8002fb0c: 00000000 nop +8002fb10: 04410002 bgez v0,8002fb1c <GsSpriteFromImage+0x8c> +8002fb14: 00000000 nop +8002fb18: 244200ff addiu v0,v0,255 +8002fb1c: 00021203 sra v0,v0,0x8 +8002fb20: 304200ff andi v0,v0,0xff +8002fb24: 00021100 sll v0,v0,0x4 +8002fb28: 304200ff andi v0,v0,0xff +8002fb2c: 00621021 addu v0,v1,v0 +8002fb30: 304300ff andi v1,v0,0xff +8002fb34: 8fc20018 lw v0,24(s8) +8002fb38: 00000000 nop +8002fb3c: a0430011 sb v1,17(v0) + sprite->u = image->x & 0x3f; +8002fb40: 8fc2001c lw v0,28(s8) +8002fb44: 00000000 nop +8002fb48: 8c420018 lw v0,24(v0) +8002fb4c: 00000000 nop +8002fb50: 304200ff andi v0,v0,0xff +8002fb54: 3042003f andi v0,v0,0x3f +8002fb58: 304300ff andi v1,v0,0xff +8002fb5c: 8fc20018 lw v0,24(s8) +8002fb60: 00000000 nop +8002fb64: a0430004 sb v1,4(v0) + sprite->v = image->y & 0xff; +8002fb68: 8fc2001c lw v0,28(s8) +8002fb6c: 00000000 nop +8002fb70: 8c42001c lw v0,28(v0) +8002fb74: 00000000 nop +8002fb78: 304300ff andi v1,v0,0xff +8002fb7c: 8fc20018 lw v0,24(s8) +8002fb80: 00000000 nop +8002fb84: a0430005 sb v1,5(v0) + + sprite->cx = image->clut_x; +8002fb88: 8fc2001c lw v0,28(s8) +8002fb8c: 00000000 nop +8002fb90: 8c420008 lw v0,8(v0) +8002fb94: 00000000 nop +8002fb98: 00021c00 sll v1,v0,0x10 +8002fb9c: 00031c03 sra v1,v1,0x10 +8002fba0: 8fc20018 lw v0,24(s8) +8002fba4: 00000000 nop +8002fba8: a443000a sh v1,10(v0) + sprite->cy = image->clut_y; +8002fbac: 8fc2001c lw v0,28(s8) +8002fbb0: 00000000 nop +8002fbb4: 8c42000c lw v0,12(v0) +8002fbb8: 00000000 nop +8002fbbc: 00021c00 sll v1,v0,0x10 +8002fbc0: 00031c03 sra v1,v1,0x10 +8002fbc4: 8fc20018 lw v0,24(s8) +8002fbc8: 00000000 nop +8002fbcc: a443000c sh v1,12(v0) + + if(image->pmode == 0) // 4-bit pixel mode +8002fbd0: 8fc2001c lw v0,28(s8) +8002fbd4: 00000000 nop +8002fbd8: 8c420000 lw v0,0(v0) +8002fbdc: 00000000 nop +8002fbe0: 1440000c bnez v0,8002fc14 <GsSpriteFromImage+0x184> +8002fbe4: 00000000 nop + sprite->u*=4; +8002fbe8: 8fc20018 lw v0,24(s8) +8002fbec: 00000000 nop +8002fbf0: 90420004 lbu v0,4(v0) +8002fbf4: 00000000 nop +8002fbf8: 00021080 sll v0,v0,0x2 +8002fbfc: 304300ff andi v1,v0,0xff +8002fc00: 8fc20018 lw v0,24(s8) +8002fc04: 00000000 nop +8002fc08: a0430004 sb v1,4(v0) +8002fc0c: 10000010 b 8002fc50 <GsSpriteFromImage+0x1c0> +8002fc10: 00000000 nop + else if(image->pmode == 1) // 8-bit pixel mode +8002fc14: 8fc2001c lw v0,28(s8) +8002fc18: 00000000 nop +8002fc1c: 8c430000 lw v1,0(v0) +8002fc20: 24020001 li v0,1 +8002fc24: 1462000a bne v1,v0,8002fc50 <GsSpriteFromImage+0x1c0> +8002fc28: 00000000 nop + sprite->u*=2; +8002fc2c: 8fc20018 lw v0,24(s8) +8002fc30: 00000000 nop +8002fc34: 90420004 lbu v0,4(v0) +8002fc38: 00000000 nop +8002fc3c: 00021040 sll v0,v0,0x1 +8002fc40: 304300ff andi v1,v0,0xff +8002fc44: 8fc20018 lw v0,24(s8) +8002fc48: 00000000 nop +8002fc4c: a0430004 sb v1,4(v0) + + switch(image->pmode) +8002fc50: 8fc2001c lw v0,28(s8) +8002fc54: 00000000 nop +8002fc58: 8c420000 lw v0,0(v0) +8002fc5c: 24030001 li v1,1 +8002fc60: 1043001e beq v0,v1,8002fcdc <GsSpriteFromImage+0x24c> +8002fc64: 00000000 nop +8002fc68: 28430002 slti v1,v0,2 +8002fc6c: 10600005 beqz v1,8002fc84 <GsSpriteFromImage+0x1f4> +8002fc70: 00000000 nop +8002fc74: 1040000b beqz v0,8002fca4 <GsSpriteFromImage+0x214> +8002fc78: 00000000 nop +8002fc7c: 10000045 b 8002fd94 <GsSpriteFromImage+0x304> +8002fc80: 00000000 nop +8002fc84: 24030002 li v1,2 +8002fc88: 10430022 beq v0,v1,8002fd14 <GsSpriteFromImage+0x284> +8002fc8c: 00000000 nop +8002fc90: 24030003 li v1,3 +8002fc94: 1043002a beq v0,v1,8002fd40 <GsSpriteFromImage+0x2b0> +8002fc98: 00000000 nop +8002fc9c: 1000003d b 8002fd94 <GsSpriteFromImage+0x304> +8002fca0: 00000000 nop + { + case 0: + sprite->w = image->w * 4; +8002fca4: 8fc2001c lw v0,28(s8) +8002fca8: 00000000 nop +8002fcac: 8c420020 lw v0,32(v0) +8002fcb0: 00000000 nop +8002fcb4: 3042ffff andi v0,v0,0xffff +8002fcb8: 00021080 sll v0,v0,0x2 +8002fcbc: 3042ffff andi v0,v0,0xffff +8002fcc0: 00021c00 sll v1,v0,0x10 +8002fcc4: 00031c03 sra v1,v1,0x10 +8002fcc8: 8fc20018 lw v0,24(s8) +8002fccc: 00000000 nop +8002fcd0: a4430006 sh v1,6(v0) + break; +8002fcd4: 1000002f b 8002fd94 <GsSpriteFromImage+0x304> +8002fcd8: 00000000 nop + case 1: + sprite->w = image->w * 2; +8002fcdc: 8fc2001c lw v0,28(s8) +8002fce0: 00000000 nop +8002fce4: 8c420020 lw v0,32(v0) +8002fce8: 00000000 nop +8002fcec: 3042ffff andi v0,v0,0xffff +8002fcf0: 00021040 sll v0,v0,0x1 +8002fcf4: 3042ffff andi v0,v0,0xffff +8002fcf8: 00021c00 sll v1,v0,0x10 +8002fcfc: 00031c03 sra v1,v1,0x10 +8002fd00: 8fc20018 lw v0,24(s8) +8002fd04: 00000000 nop +8002fd08: a4430006 sh v1,6(v0) + break; +8002fd0c: 10000021 b 8002fd94 <GsSpriteFromImage+0x304> +8002fd10: 00000000 nop + case 2: + sprite->w = image->w; +8002fd14: 8fc2001c lw v0,28(s8) +8002fd18: 00000000 nop +8002fd1c: 8c420020 lw v0,32(v0) +8002fd20: 00000000 nop +8002fd24: 00021c00 sll v1,v0,0x10 +8002fd28: 00031c03 sra v1,v1,0x10 +8002fd2c: 8fc20018 lw v0,24(s8) +8002fd30: 00000000 nop +8002fd34: a4430006 sh v1,6(v0) + break; +8002fd38: 10000016 b 8002fd94 <GsSpriteFromImage+0x304> +8002fd3c: 00000000 nop + case 3: + sprite->w = image->w + (image->w / 2); +8002fd40: 8fc2001c lw v0,28(s8) +8002fd44: 00000000 nop +8002fd48: 8c420020 lw v0,32(v0) +8002fd4c: 00000000 nop +8002fd50: 3043ffff andi v1,v0,0xffff +8002fd54: 8fc2001c lw v0,28(s8) +8002fd58: 00000000 nop +8002fd5c: 8c420020 lw v0,32(v0) +8002fd60: 00000000 nop +8002fd64: 000227c2 srl a0,v0,0x1f +8002fd68: 00821021 addu v0,a0,v0 +8002fd6c: 00021043 sra v0,v0,0x1 +8002fd70: 3042ffff andi v0,v0,0xffff +8002fd74: 00621021 addu v0,v1,v0 +8002fd78: 3042ffff andi v0,v0,0xffff +8002fd7c: 00021c00 sll v1,v0,0x10 +8002fd80: 00031c03 sra v1,v1,0x10 +8002fd84: 8fc20018 lw v0,24(s8) +8002fd88: 00000000 nop +8002fd8c: a4430006 sh v1,6(v0) + break; +8002fd90: 00000000 nop + } + + sprite->h = image->h; +8002fd94: 8fc2001c lw v0,28(s8) +8002fd98: 00000000 nop +8002fd9c: 8c420024 lw v0,36(v0) +8002fda0: 00000000 nop +8002fda4: 00021c00 sll v1,v0,0x10 +8002fda8: 00031c03 sra v1,v1,0x10 +8002fdac: 8fc20018 lw v0,24(s8) +8002fdb0: 00000000 nop +8002fdb4: a4430008 sh v1,8(v0) + sprite->attribute = COLORMODE(image->pmode); +8002fdb8: 8fc2001c lw v0,28(s8) +8002fdbc: 00000000 nop +8002fdc0: 8c420000 lw v0,0(v0) +8002fdc4: 00000000 nop +8002fdc8: 30430003 andi v1,v0,0x3 +8002fdcc: 8fc20018 lw v0,24(s8) +8002fdd0: 00000000 nop +8002fdd4: ac430014 sw v1,20(v0) + sprite->r = sprite->g = sprite->b = NORMAL_LUMINANCE; +8002fdd8: 8fc20018 lw v0,24(s8) +8002fddc: 2403ff80 li v1,-128 +8002fde0: a0430010 sb v1,16(v0) +8002fde4: 8fc20018 lw v0,24(s8) +8002fde8: 00000000 nop +8002fdec: 90430010 lbu v1,16(v0) +8002fdf0: 8fc20018 lw v0,24(s8) +8002fdf4: 00000000 nop +8002fdf8: a043000f sb v1,15(v0) +8002fdfc: 8fc20018 lw v0,24(s8) +8002fe00: 00000000 nop +8002fe04: 9043000f lbu v1,15(v0) +8002fe08: 8fc20018 lw v0,24(s8) +8002fe0c: 00000000 nop +8002fe10: a043000e sb v1,14(v0) + + return 1; +8002fe14: 24020001 li v0,1 +} +8002fe18: 03c0e821 move sp,s8 +8002fe1c: 8fbf0014 lw ra,20(sp) +8002fe20: 8fbe0010 lw s8,16(sp) +8002fe24: 27bd0018 addiu sp,sp,24 +8002fe28: 03e00008 jr ra +8002fe2c: 00000000 nop + +8002fe30 <GsSetMasking>: + +void GsSetMasking(unsigned char flag) +{ +8002fe30: 27bdffe8 addiu sp,sp,-24 +8002fe34: afbf0014 sw ra,20(sp) +8002fe38: afbe0010 sw s8,16(sp) +8002fe3c: 03a0f021 move s8,sp +8002fe40: 00801021 move v0,a0 +8002fe44: a3c20018 sb v0,24(s8) + gpu_data_ctrl(0xe6, flag); +8002fe48: 93c20018 lbu v0,24(s8) +8002fe4c: 00000000 nop +8002fe50: 00402821 move a1,v0 +8002fe54: 240400e6 li a0,230 +8002fe58: 0c00bbb5 jal 8002eed4 <gpu_data_ctrl> +8002fe5c: 00000000 nop +} +8002fe60: 00000000 nop +8002fe64: 03c0e821 move sp,s8 +8002fe68: 8fbf0014 lw ra,20(sp) +8002fe6c: 8fbe0010 lw s8,16(sp) +8002fe70: 27bd0018 addiu sp,sp,24 +8002fe74: 03e00008 jr ra +8002fe78: 00000000 nop + +8002fe7c <GsIsDrawing>: + +int GsIsDrawing() +{ +8002fe7c: 27bdfff8 addiu sp,sp,-8 +8002fe80: afbe0004 sw s8,4(sp) +8002fe84: 03a0f021 move s8,sp + for(x = 0; x < 1000; x++); + + return r; + }*/ + + return !(GPU_CONTROL_PORT & (1<<0x1a)) ; +8002fe88: 3c021f80 lui v0,0x1f80 +8002fe8c: 34421814 ori v0,v0,0x1814 +8002fe90: 8c430000 lw v1,0(v0) +8002fe94: 3c020400 lui v0,0x400 +8002fe98: 00621024 and v0,v1,v0 +8002fe9c: 2c420001 sltiu v0,v0,1 +8002fea0: 304200ff andi v0,v0,0xff +} +8002fea4: 03c0e821 move sp,s8 +8002fea8: 8fbe0004 lw s8,4(sp) +8002feac: 27bd0008 addiu sp,sp,8 +8002feb0: 03e00008 jr ra +8002feb4: 00000000 nop + +8002feb8 <GsSetDrawEnvSimple>: + +// Functions which use default values to use when you do not +// really need to fiddle with all the fields of the structure + +void GsSetDrawEnvSimple(int x, int y, int w, int h) +{ +8002feb8: 27bdffd8 addiu sp,sp,-40 +8002febc: afbf0024 sw ra,36(sp) +8002fec0: afbe0020 sw s8,32(sp) +8002fec4: 03a0f021 move s8,sp +8002fec8: afc40028 sw a0,40(s8) +8002fecc: afc5002c sw a1,44(s8) +8002fed0: afc60030 sw a2,48(s8) +8002fed4: afc70034 sw a3,52(s8) + GsDrawEnv env; + + env.dither = 0; +8002fed8: a3c00010 sb zero,16(s8) + env.draw_on_display = 1; +8002fedc: 24020001 li v0,1 +8002fee0: a3c20011 sb v0,17(s8) + env.x = x; +8002fee4: 8fc20028 lw v0,40(s8) +8002fee8: 00000000 nop +8002feec: 00021400 sll v0,v0,0x10 +8002fef0: 00021403 sra v0,v0,0x10 +8002fef4: a7c20012 sh v0,18(s8) + env.y = y; +8002fef8: 8fc2002c lw v0,44(s8) +8002fefc: 00000000 nop +8002ff00: 00021400 sll v0,v0,0x10 +8002ff04: 00021403 sra v0,v0,0x10 +8002ff08: a7c20014 sh v0,20(s8) + env.w = w; +8002ff0c: 8fc20030 lw v0,48(s8) +8002ff10: 00000000 nop +8002ff14: 00021400 sll v0,v0,0x10 +8002ff18: 00021403 sra v0,v0,0x10 +8002ff1c: a7c20016 sh v0,22(s8) + env.h = h; +8002ff20: 8fc20034 lw v0,52(s8) +8002ff24: 00000000 nop +8002ff28: 00021400 sll v0,v0,0x10 +8002ff2c: 00021403 sra v0,v0,0x10 +8002ff30: a7c20018 sh v0,24(s8) + env.ignore_mask = 0; +8002ff34: a3c0001a sb zero,26(s8) + env.set_mask = 0; +8002ff38: a3c0001b sb zero,27(s8) + + GsSetDrawEnv(&env); +8002ff3c: 27c20010 addiu v0,s8,16 +8002ff40: 00402021 move a0,v0 +8002ff44: 0c00bada jal 8002eb68 <GsSetDrawEnv> +8002ff48: 00000000 nop +} +8002ff4c: 00000000 nop +8002ff50: 03c0e821 move sp,s8 +8002ff54: 8fbf0024 lw ra,36(sp) +8002ff58: 8fbe0020 lw s8,32(sp) +8002ff5c: 27bd0028 addiu sp,sp,40 +8002ff60: 03e00008 jr ra +8002ff64: 00000000 nop + +8002ff68 <GsSetDispEnvSimple>: + +void GsSetDispEnvSimple(int x, int y) +{ +8002ff68: 27bdffe0 addiu sp,sp,-32 +8002ff6c: afbf001c sw ra,28(sp) +8002ff70: afbe0018 sw s8,24(sp) +8002ff74: 03a0f021 move s8,sp +8002ff78: afc40020 sw a0,32(s8) +8002ff7c: afc50024 sw a1,36(s8) + GsDispEnv env; + + env.x = x; +8002ff80: 8fc20020 lw v0,32(s8) +8002ff84: 00000000 nop +8002ff88: 00021400 sll v0,v0,0x10 +8002ff8c: 00021403 sra v0,v0,0x10 +8002ff90: a7c20010 sh v0,16(s8) + env.y = y; +8002ff94: 8fc20024 lw v0,36(s8) +8002ff98: 00000000 nop +8002ff9c: 00021400 sll v0,v0,0x10 +8002ffa0: 00021403 sra v0,v0,0x10 +8002ffa4: a7c20012 sh v0,18(s8) + + GsSetDispEnv(&env); +8002ffa8: 27c20010 addiu v0,s8,16 +8002ffac: 00402021 move a0,v0 +8002ffb0: 0c00bb71 jal 8002edc4 <GsSetDispEnv> +8002ffb4: 00000000 nop +} +8002ffb8: 00000000 nop +8002ffbc: 03c0e821 move sp,s8 +8002ffc0: 8fbf001c lw ra,28(sp) +8002ffc4: 8fbe0018 lw s8,24(sp) +8002ffc8: 27bd0020 addiu sp,sp,32 +8002ffcc: 03e00008 jr ra +8002ffd0: 00000000 nop + +8002ffd4 <GsLoadFont>: + +// Built-in font functions. + +void GsLoadFont(int fb_x, int fb_y, int cx, int cy) +{ +8002ffd4: 27bdffd8 addiu sp,sp,-40 +8002ffd8: afbf0024 sw ra,36(sp) +8002ffdc: afbe0020 sw s8,32(sp) +8002ffe0: 03a0f021 move s8,sp +8002ffe4: afc40028 sw a0,40(s8) +8002ffe8: afc5002c sw a1,44(s8) +8002ffec: afc60030 sw a2,48(s8) +8002fff0: afc70034 sw a3,52(s8) + unsigned short pal[2] = {0x0, 0x7fff}; +8002fff4: a7c00018 sh zero,24(s8) +8002fff8: 24027fff li v0,32767 +8002fffc: a7c2001a sh v0,26(s8) + + LoadImage(psxsdk_font_data, fb_x, fb_y, 16, 128); +80030000: 24020080 li v0,128 +80030004: afa20010 sw v0,16(sp) +80030008: 24070010 li a3,16 +8003000c: 8fc6002c lw a2,44(s8) +80030010: 8fc50028 lw a1,40(s8) +80030014: 3c028004 lui v0,0x8004 +80030018: 2444154c addiu a0,v0,5452 +8003001c: 0c00ba60 jal 8002e980 <LoadImage> +80030020: 00000000 nop + while(GsIsDrawing()); +80030024: 00000000 nop +80030028: 0c00bf9f jal 8002fe7c <GsIsDrawing> +8003002c: 00000000 nop +80030030: 1440fffd bnez v0,80030028 <GsLoadFont+0x54> +80030034: 00000000 nop + + if(cx != -1 && cy != -1) +80030038: 8fc30030 lw v1,48(s8) +8003003c: 2402ffff li v0,-1 +80030040: 1062001b beq v1,v0,800300b0 <GsLoadFont+0xdc> +80030044: 00000000 nop +80030048: 8fc30034 lw v1,52(s8) +8003004c: 2402ffff li v0,-1 +80030050: 10620017 beq v1,v0,800300b0 <GsLoadFont+0xdc> +80030054: 00000000 nop + { + LoadImage(pal, cx, cy, 16, 1); +80030058: 24020001 li v0,1 +8003005c: afa20010 sw v0,16(sp) +80030060: 24070010 li a3,16 +80030064: 8fc60034 lw a2,52(s8) +80030068: 8fc50030 lw a1,48(s8) +8003006c: 27c20018 addiu v0,s8,24 +80030070: 00402021 move a0,v0 +80030074: 0c00ba60 jal 8002e980 <LoadImage> +80030078: 00000000 nop + + fb_font_cx = cx; +8003007c: 3c028007 lui v0,0x8007 +80030080: 8fc30030 lw v1,48(s8) +80030084: 00000000 nop +80030088: ac431d54 sw v1,7508(v0) + fb_font_cy = cy; +8003008c: 3c028007 lui v0,0x8007 +80030090: 8fc30034 lw v1,52(s8) +80030094: 00000000 nop +80030098: ac431d44 sw v1,7492(v0) + + while(GsIsDrawing()); +8003009c: 00000000 nop +800300a0: 0c00bf9f jal 8002fe7c <GsIsDrawing> +800300a4: 00000000 nop +800300a8: 1440fffd bnez v0,800300a0 <GsLoadFont+0xcc> +800300ac: 00000000 nop + } + + fb_font_x = fb_x; +800300b0: 3c028007 lui v0,0x8007 +800300b4: 8fc30028 lw v1,40(s8) +800300b8: 00000000 nop +800300bc: ac431d4c sw v1,7500(v0) + fb_font_y = fb_y; +800300c0: 3c028007 lui v0,0x8007 +800300c4: 8fc3002c lw v1,44(s8) +800300c8: 00000000 nop +800300cc: ac431d3c sw v1,7484(v0) +} +800300d0: 00000000 nop +800300d4: 03c0e821 move sp,s8 +800300d8: 8fbf0024 lw ra,36(sp) +800300dc: 8fbe0020 lw s8,32(sp) +800300e0: 27bd0028 addiu sp,sp,40 +800300e4: 03e00008 jr ra +800300e8: 00000000 nop + +800300ec <GsPrintFont_Draw>: + +unsigned int GsPrintFont_Draw(int x, int y, int scalex, int scaley) +{ +800300ec: 27bdffb0 addiu sp,sp,-80 +800300f0: afbf004c sw ra,76(sp) +800300f4: afbe0048 sw s8,72(sp) +800300f8: 03a0f021 move s8,sp +800300fc: afc40050 sw a0,80(s8) +80030100: afc50054 sw a1,84(s8) +80030104: afc60058 sw a2,88(s8) +80030108: afc7005c sw a3,92(s8) + va_start(ap, fmt);*/ + +// r = vsnprintf(gpu_stringbuf, 512, fmt, ap); + +// va_end(ap); + fw = gs_calculate_scaled_size(8, scalex);//(8*scalex)/4096; +8003010c: 8fc50058 lw a1,88(s8) +80030110: 24040008 li a0,8 +80030114: 0c00ae07 jal 8002b81c <gs_calculate_scaled_size> +80030118: 00000000 nop +8003011c: afc20014 sw v0,20(s8) + fh = gs_calculate_scaled_size(8, scaley);//(8*scaley)/4096; +80030120: 8fc5005c lw a1,92(s8) +80030124: 24040008 li a0,8 +80030128: 0c00ae07 jal 8002b81c <gs_calculate_scaled_size> +8003012c: 00000000 nop +80030130: afc20018 sw v0,24(s8) + + spr.x = x; +80030134: 8fc20050 lw v0,80(s8) +80030138: 00000000 nop +8003013c: 00021400 sll v0,v0,0x10 +80030140: 00021403 sra v0,v0,0x10 +80030144: a7c2001c sh v0,28(s8) + spr.y = y; +80030148: 8fc20054 lw v0,84(s8) +8003014c: 00000000 nop +80030150: 00021400 sll v0,v0,0x10 +80030154: 00021403 sra v0,v0,0x10 +80030158: a7c2001e sh v0,30(s8) + spr.r = prfont_rl; +8003015c: 3c028004 lui v0,0x8004 +80030160: 9042255c lbu v0,9564(v0) +80030164: 00000000 nop +80030168: a3c2002a sb v0,42(s8) + spr.g = prfont_gl; +8003016c: 3c028004 lui v0,0x8004 +80030170: 9042255d lbu v0,9565(v0) +80030174: 00000000 nop +80030178: a3c2002b sb v0,43(s8) + spr.b = prfont_bl; +8003017c: 3c028004 lui v0,0x8004 +80030180: 9042255e lbu v0,9566(v0) +80030184: 00000000 nop +80030188: a3c2002c sb v0,44(s8) + spr.attribute = 0; +8003018c: afc00030 sw zero,48(s8) + spr.cx = fb_font_cx; +80030190: 3c028007 lui v0,0x8007 +80030194: 8c421d54 lw v0,7508(v0) +80030198: 00000000 nop +8003019c: 00021400 sll v0,v0,0x10 +800301a0: 00021403 sra v0,v0,0x10 +800301a4: a7c20026 sh v0,38(s8) + spr.cy = fb_font_cy; +800301a8: 3c028007 lui v0,0x8007 +800301ac: 8c421d44 lw v0,7492(v0) +800301b0: 00000000 nop +800301b4: 00021400 sll v0,v0,0x10 +800301b8: 00021403 sra v0,v0,0x10 +800301bc: a7c20028 sh v0,40(s8) + spr.tpage = (fb_font_x / 64) + ((fb_font_y / 256)*16); +800301c0: 3c028007 lui v0,0x8007 +800301c4: 8c421d4c lw v0,7500(v0) +800301c8: 00000000 nop +800301cc: 04410002 bgez v0,800301d8 <GsPrintFont_Draw+0xec> +800301d0: 00000000 nop +800301d4: 2442003f addiu v0,v0,63 +800301d8: 00021183 sra v0,v0,0x6 +800301dc: 304300ff andi v1,v0,0xff +800301e0: 3c028007 lui v0,0x8007 +800301e4: 8c421d3c lw v0,7484(v0) +800301e8: 00000000 nop +800301ec: 04410002 bgez v0,800301f8 <GsPrintFont_Draw+0x10c> +800301f0: 00000000 nop +800301f4: 244200ff addiu v0,v0,255 +800301f8: 00021203 sra v0,v0,0x8 +800301fc: 304200ff andi v0,v0,0xff +80030200: 00021100 sll v0,v0,0x4 +80030204: 304200ff andi v0,v0,0xff +80030208: 00621021 addu v0,v1,v0 +8003020c: 304200ff andi v0,v0,0xff +80030210: a3c2002d sb v0,45(s8) + spr.w = 8; +80030214: 24020008 li v0,8 +80030218: a7c20022 sh v0,34(s8) + spr.h = 8; +8003021c: 24020008 li v0,8 +80030220: a7c20024 sh v0,36(s8) + spr.scalex = scalex; +80030224: 8fc20058 lw v0,88(s8) +80030228: 00000000 nop +8003022c: afc20034 sw v0,52(s8) + spr.scaley = scaley; +80030230: 8fc2005c lw v0,92(s8) +80030234: 00000000 nop +80030238: afc20038 sw v0,56(s8) + + string = gpu_stringbuf; +8003023c: 3c028007 lui v0,0x8007 +80030240: 24428960 addiu v0,v0,-30368 +80030244: afc20010 sw v0,16(s8) + + while(*string) +80030248: 100000da b 800305b4 <GsPrintFont_Draw+0x4c8> +8003024c: 00000000 nop + { + if(prfont_flags & PRFONT_WRAP) +80030250: 3c028007 lui v0,0x8007 +80030254: 8c421cdc lw v0,7388(v0) +80030258: 00000000 nop +8003025c: 30420001 andi v0,v0,0x1 +80030260: 10400020 beqz v0,800302e4 <GsPrintFont_Draw+0x1f8> +80030264: 00000000 nop + { + if(spr.x >= GsScreenW) +80030268: 87c2001c lh v0,28(s8) +8003026c: 00000000 nop +80030270: 00401821 move v1,v0 +80030274: 3c028007 lui v0,0x8007 +80030278: 94421d48 lhu v0,7496(v0) +8003027c: 00000000 nop +80030280: 0062102a slt v0,v1,v0 +80030284: 14400017 bnez v0,800302e4 <GsPrintFont_Draw+0x1f8> +80030288: 00000000 nop + { + spr.x = spr.x - GsScreenW; +8003028c: 87c2001c lh v0,28(s8) +80030290: 00000000 nop +80030294: 3043ffff andi v1,v0,0xffff +80030298: 3c028007 lui v0,0x8007 +8003029c: 94421d48 lhu v0,7496(v0) +800302a0: 00000000 nop +800302a4: 00621023 subu v0,v1,v0 +800302a8: 3042ffff andi v0,v0,0xffff +800302ac: 00021400 sll v0,v0,0x10 +800302b0: 00021403 sra v0,v0,0x10 +800302b4: a7c2001c sh v0,28(s8) + spr.y += fh; +800302b8: 87c2001e lh v0,30(s8) +800302bc: 00000000 nop +800302c0: 3043ffff andi v1,v0,0xffff +800302c4: 8fc20018 lw v0,24(s8) +800302c8: 00000000 nop +800302cc: 3042ffff andi v0,v0,0xffff +800302d0: 00621021 addu v0,v1,v0 +800302d4: 3042ffff andi v0,v0,0xffff +800302d8: 00021400 sll v0,v0,0x10 +800302dc: 00021403 sra v0,v0,0x10 +800302e0: a7c2001e sh v0,30(s8) + } + } + + if(*string >= ' ' && *string <= '~') +800302e4: 8fc20010 lw v0,16(s8) +800302e8: 00000000 nop +800302ec: 80420000 lb v0,0(v0) +800302f0: 00000000 nop +800302f4: 28420020 slti v0,v0,32 +800302f8: 14400071 bnez v0,800304c0 <GsPrintFont_Draw+0x3d4> +800302fc: 00000000 nop +80030300: 8fc20010 lw v0,16(s8) +80030304: 00000000 nop +80030308: 80430000 lb v1,0(v0) +8003030c: 2402007f li v0,127 +80030310: 1062006b beq v1,v0,800304c0 <GsPrintFont_Draw+0x3d4> +80030314: 00000000 nop + { + spr.u = ((fb_font_x & 0x3f)*4)+((*string & 7) << 3); +80030318: 3c028007 lui v0,0x8007 +8003031c: 8c421d4c lw v0,7500(v0) +80030320: 00000000 nop +80030324: 304200ff andi v0,v0,0xff +80030328: 3042003f andi v0,v0,0x3f +8003032c: 304200ff andi v0,v0,0xff +80030330: 00021080 sll v0,v0,0x2 +80030334: 304300ff andi v1,v0,0xff +80030338: 8fc20010 lw v0,16(s8) +8003033c: 00000000 nop +80030340: 80420000 lb v0,0(v0) +80030344: 00000000 nop +80030348: 304200ff andi v0,v0,0xff +8003034c: 30420007 andi v0,v0,0x7 +80030350: 304200ff andi v0,v0,0xff +80030354: 000210c0 sll v0,v0,0x3 +80030358: 304200ff andi v0,v0,0xff +8003035c: 00621021 addu v0,v1,v0 +80030360: 304200ff andi v0,v0,0xff +80030364: a3c20020 sb v0,32(s8) + spr.v = (fb_font_y & 0xff)+(*string & 0xf8); +80030368: 3c028007 lui v0,0x8007 +8003036c: 8c421d3c lw v0,7484(v0) +80030370: 00000000 nop +80030374: 304300ff andi v1,v0,0xff +80030378: 8fc20010 lw v0,16(s8) +8003037c: 00000000 nop +80030380: 80420000 lb v0,0(v0) +80030384: 00000000 nop +80030388: 304400ff andi a0,v0,0xff +8003038c: 2402fff8 li v0,-8 +80030390: 00821024 and v0,a0,v0 +80030394: 304200ff andi v0,v0,0xff +80030398: 00621021 addu v0,v1,v0 +8003039c: 304200ff andi v0,v0,0xff +800303a0: a3c20021 sb v0,33(s8) + + if((spr.x < GsCurDrawEnvW && (spr.x+fw)>=0) && +800303a4: 87c2001c lh v0,28(s8) +800303a8: 00000000 nop +800303ac: 00401821 move v1,v0 +800303b0: 3c028007 lui v0,0x8007 +800303b4: 94421d40 lhu v0,7488(v0) +800303b8: 00000000 nop +800303bc: 0062102a slt v0,v1,v0 +800303c0: 10400034 beqz v0,80030494 <GsPrintFont_Draw+0x3a8> +800303c4: 00000000 nop +800303c8: 87c2001c lh v0,28(s8) +800303cc: 00000000 nop +800303d0: 00401821 move v1,v0 +800303d4: 8fc20014 lw v0,20(s8) +800303d8: 00000000 nop +800303dc: 00621021 addu v0,v1,v0 +800303e0: 0440002c bltz v0,80030494 <GsPrintFont_Draw+0x3a8> +800303e4: 00000000 nop + (spr.y < GsCurDrawEnvH && (spr.y+fh)>=0)) +800303e8: 87c2001e lh v0,30(s8) +800303ec: 00000000 nop +800303f0: 00401821 move v1,v0 +800303f4: 3c028007 lui v0,0x8007 +800303f8: 94421d58 lhu v0,7512(v0) +800303fc: 00000000 nop + if(*string >= ' ' && *string <= '~') + { + spr.u = ((fb_font_x & 0x3f)*4)+((*string & 7) << 3); + spr.v = (fb_font_y & 0xff)+(*string & 0xf8); + + if((spr.x < GsCurDrawEnvW && (spr.x+fw)>=0) && +80030400: 0062102a slt v0,v1,v0 +80030404: 10400023 beqz v0,80030494 <GsPrintFont_Draw+0x3a8> +80030408: 00000000 nop + (spr.y < GsCurDrawEnvH && (spr.y+fh)>=0)) +8003040c: 87c2001e lh v0,30(s8) +80030410: 00000000 nop +80030414: 00401821 move v1,v0 +80030418: 8fc20018 lw v0,24(s8) +8003041c: 00000000 nop +80030420: 00621021 addu v0,v1,v0 +80030424: 0440001b bltz v0,80030494 <GsPrintFont_Draw+0x3a8> +80030428: 00000000 nop + { + + if((scalex == 0 || scalex == 1) && (scaley == 0 || scaley == 1)) +8003042c: 8fc20058 lw v0,88(s8) +80030430: 00000000 nop +80030434: 10400005 beqz v0,8003044c <GsPrintFont_Draw+0x360> +80030438: 00000000 nop +8003043c: 8fc30058 lw v1,88(s8) +80030440: 24020001 li v0,1 +80030444: 1462000f bne v1,v0,80030484 <GsPrintFont_Draw+0x398> +80030448: 00000000 nop +8003044c: 8fc2005c lw v0,92(s8) +80030450: 00000000 nop +80030454: 10400005 beqz v0,8003046c <GsPrintFont_Draw+0x380> +80030458: 00000000 nop +8003045c: 8fc3005c lw v1,92(s8) +80030460: 24020001 li v0,1 +80030464: 14620007 bne v1,v0,80030484 <GsPrintFont_Draw+0x398> +80030468: 00000000 nop + GsSortSimpleSprite(&spr); +8003046c: 27c2001c addiu v0,s8,28 +80030470: 00402021 move a0,v0 +80030474: 0c00b69c jal 8002da70 <GsSortSimpleSprite> +80030478: 00000000 nop +8003047c: 10000005 b 80030494 <GsPrintFont_Draw+0x3a8> +80030480: 00000000 nop + else + GsSortSprite(&spr); +80030484: 27c2001c addiu v0,s8,28 +80030488: 00402021 move a0,v0 +8003048c: 0c00b356 jal 8002cd58 <GsSortSprite> +80030490: 00000000 nop + } + + spr.x += fw; +80030494: 87c2001c lh v0,28(s8) +80030498: 00000000 nop +8003049c: 3043ffff andi v1,v0,0xffff +800304a0: 8fc20014 lw v0,20(s8) +800304a4: 00000000 nop +800304a8: 3042ffff andi v0,v0,0xffff +800304ac: 00621021 addu v0,v1,v0 +800304b0: 3042ffff andi v0,v0,0xffff +800304b4: 00021400 sll v0,v0,0x10 +800304b8: 00021403 sra v0,v0,0x10 +800304bc: a7c2001c sh v0,28(s8) + } + + if(*string == '\r') +800304c0: 8fc20010 lw v0,16(s8) +800304c4: 00000000 nop +800304c8: 80430000 lb v1,0(v0) +800304cc: 2402000d li v0,13 +800304d0: 14620002 bne v1,v0,800304dc <GsPrintFont_Draw+0x3f0> +800304d4: 00000000 nop + spr.x = 0; +800304d8: a7c0001c sh zero,28(s8) + + if(*string == '\n') +800304dc: 8fc20010 lw v0,16(s8) +800304e0: 00000000 nop +800304e4: 80430000 lb v1,0(v0) +800304e8: 2402000a li v0,10 +800304ec: 1462001a bne v1,v0,80030558 <GsPrintFont_Draw+0x46c> +800304f0: 00000000 nop + { + spr.x = (prfont_flags & PRFONT_UNIXLF)? 0 : x; +800304f4: 3c028007 lui v0,0x8007 +800304f8: 8c421cdc lw v0,7388(v0) +800304fc: 00000000 nop +80030500: 30420010 andi v0,v0,0x10 +80030504: 14400007 bnez v0,80030524 <GsPrintFont_Draw+0x438> +80030508: 00000000 nop +8003050c: 8fc20050 lw v0,80(s8) +80030510: 00000000 nop +80030514: 00021400 sll v0,v0,0x10 +80030518: 00021403 sra v0,v0,0x10 +8003051c: 10000002 b 80030528 <GsPrintFont_Draw+0x43c> +80030520: 00000000 nop +80030524: 00001021 move v0,zero +80030528: a7c2001c sh v0,28(s8) + spr.y += fh; +8003052c: 87c2001e lh v0,30(s8) +80030530: 00000000 nop +80030534: 3043ffff andi v1,v0,0xffff +80030538: 8fc20018 lw v0,24(s8) +8003053c: 00000000 nop +80030540: 3042ffff andi v0,v0,0xffff +80030544: 00621021 addu v0,v1,v0 +80030548: 3042ffff andi v0,v0,0xffff +8003054c: 00021400 sll v0,v0,0x10 +80030550: 00021403 sra v0,v0,0x10 +80030554: a7c2001e sh v0,30(s8) + } + + if(*string == '\t') +80030558: 8fc20010 lw v0,16(s8) +8003055c: 00000000 nop +80030560: 80430000 lb v1,0(v0) +80030564: 24020009 li v0,9 +80030568: 1462000e bne v1,v0,800305a4 <GsPrintFont_Draw+0x4b8> +8003056c: 00000000 nop + spr.x += fw * 8; +80030570: 87c2001c lh v0,28(s8) +80030574: 00000000 nop +80030578: 3043ffff andi v1,v0,0xffff +8003057c: 8fc20014 lw v0,20(s8) +80030580: 00000000 nop +80030584: 3042ffff andi v0,v0,0xffff +80030588: 000210c0 sll v0,v0,0x3 +8003058c: 3042ffff andi v0,v0,0xffff +80030590: 00621021 addu v0,v1,v0 +80030594: 3042ffff andi v0,v0,0xffff +80030598: 00021400 sll v0,v0,0x10 +8003059c: 00021403 sra v0,v0,0x10 +800305a0: a7c2001c sh v0,28(s8) + + string++; +800305a4: 8fc20010 lw v0,16(s8) +800305a8: 00000000 nop +800305ac: 24420001 addiu v0,v0,1 +800305b0: afc20010 sw v0,16(s8) + spr.scalex = scalex; + spr.scaley = scaley; + + string = gpu_stringbuf; + + while(*string) +800305b4: 8fc20010 lw v0,16(s8) +800305b8: 00000000 nop +800305bc: 80420000 lb v0,0(v0) +800305c0: 00000000 nop +800305c4: 1440ff22 bnez v0,80030250 <GsPrintFont_Draw+0x164> +800305c8: 00000000 nop + spr.x += fw * 8; + + string++; + } + + return (spr.y << 16) | spr.x; +800305cc: 87c2001e lh v0,30(s8) +800305d0: 00000000 nop +800305d4: 00021400 sll v0,v0,0x10 +800305d8: 87c3001c lh v1,28(s8) +800305dc: 00000000 nop +800305e0: 00431025 or v0,v0,v1 +} +800305e4: 03c0e821 move sp,s8 +800305e8: 8fbf004c lw ra,76(sp) +800305ec: 8fbe0048 lw s8,72(sp) +800305f0: 27bd0050 addiu sp,sp,80 +800305f4: 03e00008 jr ra +800305f8: 00000000 nop + +800305fc <GsVPrintFont>: + +unsigned int GsVPrintFont(int x, int y, const char *fmt, va_list ap) +{ +800305fc: 27bdffe0 addiu sp,sp,-32 +80030600: afbf001c sw ra,28(sp) +80030604: afbe0018 sw s8,24(sp) +80030608: 03a0f021 move s8,sp +8003060c: afc40020 sw a0,32(s8) +80030610: afc50024 sw a1,36(s8) +80030614: afc60028 sw a2,40(s8) +80030618: afc7002c sw a3,44(s8) + int r; + //GsSprite spr; + //char *string; + int fw = gs_calculate_scaled_size(8, prfont_scale_x); +8003061c: 3c028007 lui v0,0x8007 +80030620: 8c421ce0 lw v0,7392(v0) +80030624: 00000000 nop +80030628: 00402821 move a1,v0 +8003062c: 24040008 li a0,8 +80030630: 0c00ae07 jal 8002b81c <gs_calculate_scaled_size> +80030634: 00000000 nop +80030638: afc20014 sw v0,20(s8) + + r = vsnprintf(gpu_stringbuf, 512, fmt, ap); +8003063c: 8fc7002c lw a3,44(s8) +80030640: 8fc60028 lw a2,40(s8) +80030644: 24050200 li a1,512 +80030648: 3c028007 lui v0,0x8007 +8003064c: 24448960 addiu a0,v0,-30368 +80030650: 0c00ec5d jal 8003b174 <vsnprintf> +80030654: 00000000 nop +80030658: afc20010 sw v0,16(s8) + + if(prfont_flags & PRFONT_WRAP) +8003065c: 3c028007 lui v0,0x8007 +80030660: 8c421cdc lw v0,7388(v0) +80030664: 00000000 nop +80030668: 30420001 andi v0,v0,0x1 +8003066c: 1040000f beqz v0,800306ac <GsVPrintFont+0xb0> +80030670: 00000000 nop + r = GsPrintFont_Draw(x, y, prfont_scale_x, prfont_scale_y); +80030674: 3c028007 lui v0,0x8007 +80030678: 8c431ce0 lw v1,7392(v0) +8003067c: 3c028007 lui v0,0x8007 +80030680: 8c421ce4 lw v0,7396(v0) +80030684: 00000000 nop +80030688: 00403821 move a3,v0 +8003068c: 00603021 move a2,v1 +80030690: 8fc50024 lw a1,36(s8) +80030694: 8fc40020 lw a0,32(s8) +80030698: 0c00c03b jal 800300ec <GsPrintFont_Draw> +8003069c: 00000000 nop +800306a0: afc20010 sw v0,16(s8) +800306a4: 10000048 b 800307c8 <GsVPrintFont+0x1cc> +800306a8: 00000000 nop + else if(prfont_flags & PRFONT_CENTER) +800306ac: 3c028007 lui v0,0x8007 +800306b0: 8c421cdc lw v0,7388(v0) +800306b4: 00000000 nop +800306b8: 30420002 andi v0,v0,0x2 +800306bc: 1040001b beqz v0,8003072c <GsVPrintFont+0x130> +800306c0: 00000000 nop + r = GsPrintFont_Draw(x - ((r * fw)/2), y, prfont_scale_x, prfont_scale_y); +800306c4: 8fc30010 lw v1,16(s8) +800306c8: 8fc20014 lw v0,20(s8) +800306cc: 00000000 nop +800306d0: 00620018 mult v1,v0 +800306d4: 00001012 mflo v0 +800306d8: 00021fc2 srl v1,v0,0x1f +800306dc: 00621021 addu v0,v1,v0 +800306e0: 00021043 sra v0,v0,0x1 +800306e4: 00401821 move v1,v0 +800306e8: 8fc20020 lw v0,32(s8) +800306ec: 00000000 nop +800306f0: 00431823 subu v1,v0,v1 +800306f4: 3c028007 lui v0,0x8007 +800306f8: 8c441ce0 lw a0,7392(v0) +800306fc: 3c028007 lui v0,0x8007 +80030700: 8c421ce4 lw v0,7396(v0) +80030704: 00000000 nop +80030708: 00403821 move a3,v0 +8003070c: 00803021 move a2,a0 +80030710: 8fc50024 lw a1,36(s8) +80030714: 00602021 move a0,v1 +80030718: 0c00c03b jal 800300ec <GsPrintFont_Draw> +8003071c: 00000000 nop +80030720: afc20010 sw v0,16(s8) +80030724: 10000028 b 800307c8 <GsVPrintFont+0x1cc> +80030728: 00000000 nop + else if(prfont_flags & PRFONT_RIGHT) +8003072c: 3c028007 lui v0,0x8007 +80030730: 8c421cdc lw v0,7388(v0) +80030734: 00000000 nop +80030738: 30420004 andi v0,v0,0x4 +8003073c: 10400016 beqz v0,80030798 <GsVPrintFont+0x19c> +80030740: 00000000 nop + r = GsPrintFont_Draw(x - (r * fw), y, prfont_scale_x, prfont_scale_y); +80030744: 8fc30010 lw v1,16(s8) +80030748: 8fc20014 lw v0,20(s8) +8003074c: 00000000 nop +80030750: 00620018 mult v1,v0 +80030754: 8fc20020 lw v0,32(s8) +80030758: 00001812 mflo v1 +8003075c: 00431823 subu v1,v0,v1 +80030760: 3c028007 lui v0,0x8007 +80030764: 8c441ce0 lw a0,7392(v0) +80030768: 3c028007 lui v0,0x8007 +8003076c: 8c421ce4 lw v0,7396(v0) +80030770: 00000000 nop +80030774: 00403821 move a3,v0 +80030778: 00803021 move a2,a0 +8003077c: 8fc50024 lw a1,36(s8) +80030780: 00602021 move a0,v1 +80030784: 0c00c03b jal 800300ec <GsPrintFont_Draw> +80030788: 00000000 nop +8003078c: afc20010 sw v0,16(s8) +80030790: 1000000d b 800307c8 <GsVPrintFont+0x1cc> +80030794: 00000000 nop + else + r = GsPrintFont_Draw(x, y, prfont_scale_x, prfont_scale_y); +80030798: 3c028007 lui v0,0x8007 +8003079c: 8c431ce0 lw v1,7392(v0) +800307a0: 3c028007 lui v0,0x8007 +800307a4: 8c421ce4 lw v0,7396(v0) +800307a8: 00000000 nop +800307ac: 00403821 move a3,v0 +800307b0: 00603021 move a2,v1 +800307b4: 8fc50024 lw a1,36(s8) +800307b8: 8fc40020 lw a0,32(s8) +800307bc: 0c00c03b jal 800300ec <GsPrintFont_Draw> +800307c0: 00000000 nop +800307c4: afc20010 sw v0,16(s8) + + return r; +800307c8: 8fc20010 lw v0,16(s8) +} +800307cc: 03c0e821 move sp,s8 +800307d0: 8fbf001c lw ra,28(sp) +800307d4: 8fbe0018 lw s8,24(sp) +800307d8: 27bd0020 addiu sp,sp,32 +800307dc: 03e00008 jr ra +800307e0: 00000000 nop + +800307e4 <GsPrintFont>: + +unsigned int GsPrintFont(int x, int y, const char *fmt, ...) +{ +800307e4: 27bdffe0 addiu sp,sp,-32 +800307e8: afbf001c sw ra,28(sp) +800307ec: afbe0018 sw s8,24(sp) +800307f0: 03a0f021 move s8,sp +800307f4: afc40020 sw a0,32(s8) +800307f8: afc50024 sw a1,36(s8) +800307fc: afc60028 sw a2,40(s8) +80030800: afc7002c sw a3,44(s8) + int r; + + va_list ap; + + va_start(ap, fmt); +80030804: 27c2002c addiu v0,s8,44 +80030808: afc20014 sw v0,20(s8) + + r = GsVPrintFont(x, y, fmt, ap); +8003080c: 8fc20014 lw v0,20(s8) +80030810: 00000000 nop +80030814: 00403821 move a3,v0 +80030818: 8fc60028 lw a2,40(s8) +8003081c: 8fc50024 lw a1,36(s8) +80030820: 8fc40020 lw a0,32(s8) +80030824: 0c00c17f jal 800305fc <GsVPrintFont> +80030828: 00000000 nop +8003082c: afc20010 sw v0,16(s8) + + va_end(ap); + + return r; +80030830: 8fc20010 lw v0,16(s8) +} +80030834: 03c0e821 move sp,s8 +80030838: 8fbf001c lw ra,28(sp) +8003083c: 8fbe0018 lw s8,24(sp) +80030840: 27bd0020 addiu sp,sp,32 +80030844: 03e00008 jr ra +80030848: 00000000 nop + +8003084c <GsSetFont>: + +void GsSetFont(int fb_x, int fb_y, int cx, int cy) +{ +8003084c: 27bdfff8 addiu sp,sp,-8 +80030850: afbe0004 sw s8,4(sp) +80030854: 03a0f021 move s8,sp +80030858: afc40008 sw a0,8(s8) +8003085c: afc5000c sw a1,12(s8) +80030860: afc60010 sw a2,16(s8) +80030864: afc70014 sw a3,20(s8) + if(fb_x != -1) +80030868: 8fc30008 lw v1,8(s8) +8003086c: 2402ffff li v0,-1 +80030870: 10620005 beq v1,v0,80030888 <GsSetFont+0x3c> +80030874: 00000000 nop + fb_font_x = fb_x; +80030878: 3c028007 lui v0,0x8007 +8003087c: 8fc30008 lw v1,8(s8) +80030880: 00000000 nop +80030884: ac431d4c sw v1,7500(v0) + + if(fb_y != -1) +80030888: 8fc3000c lw v1,12(s8) +8003088c: 2402ffff li v0,-1 +80030890: 10620005 beq v1,v0,800308a8 <GsSetFont+0x5c> +80030894: 00000000 nop + fb_font_y = fb_y; +80030898: 3c028007 lui v0,0x8007 +8003089c: 8fc3000c lw v1,12(s8) +800308a0: 00000000 nop +800308a4: ac431d3c sw v1,7484(v0) + + if(fb_font_cx != -1) +800308a8: 3c028007 lui v0,0x8007 +800308ac: 8c431d54 lw v1,7508(v0) +800308b0: 2402ffff li v0,-1 +800308b4: 10620005 beq v1,v0,800308cc <GsSetFont+0x80> +800308b8: 00000000 nop + fb_font_cx = cx; +800308bc: 3c028007 lui v0,0x8007 +800308c0: 8fc30010 lw v1,16(s8) +800308c4: 00000000 nop +800308c8: ac431d54 sw v1,7508(v0) + + if(fb_font_cy != -1) +800308cc: 3c028007 lui v0,0x8007 +800308d0: 8c431d44 lw v1,7492(v0) +800308d4: 2402ffff li v0,-1 +800308d8: 10620005 beq v1,v0,800308f0 <GsSetFont+0xa4> +800308dc: 00000000 nop + fb_font_cy = cy; +800308e0: 3c028007 lui v0,0x8007 +800308e4: 8fc30014 lw v1,20(s8) +800308e8: 00000000 nop +800308ec: ac431d44 sw v1,7492(v0) +} +800308f0: 00000000 nop +800308f4: 03c0e821 move sp,s8 +800308f8: 8fbe0004 lw s8,4(sp) +800308fc: 27bd0008 addiu sp,sp,8 +80030900: 03e00008 jr ra +80030904: 00000000 nop + +80030908 <GsSetFontAttrib>: + +void GsSetFontAttrib(unsigned int flags) +{ +80030908: 27bdffe8 addiu sp,sp,-24 +8003090c: afbf0014 sw ra,20(sp) +80030910: afbe0010 sw s8,16(sp) +80030914: 03a0f021 move s8,sp +80030918: afc40018 sw a0,24(s8) + prfont_flags = flags; +8003091c: 3c028007 lui v0,0x8007 +80030920: 8fc30018 lw v1,24(s8) +80030924: 00000000 nop +80030928: ac431cdc sw v1,7388(v0) + + if(prfont_flags == 0) +8003092c: 3c028007 lui v0,0x8007 +80030930: 8c421cdc lw v0,7388(v0) +80030934: 00000000 nop +80030938: 14400010 bnez v0,8003097c <GsSetFontAttrib+0x74> +8003093c: 00000000 nop + { + PRFONT_SCALEX(0); +80030940: 00002021 move a0,zero +80030944: 0c00adbe jal 8002b6f8 <PRFONT_SCALEX> +80030948: 00000000 nop + PRFONT_SCALEY(0); +8003094c: 00002021 move a0,zero +80030950: 0c00adcc jal 8002b730 <PRFONT_SCALEY> +80030954: 00000000 nop + + PRFONT_RL(NORMAL_LUMINANCE); +80030958: 24040080 li a0,128 +8003095c: 0c00adda jal 8002b768 <PRFONT_RL> +80030960: 00000000 nop + PRFONT_GL(NORMAL_LUMINANCE); +80030964: 24040080 li a0,128 +80030968: 0c00ade9 jal 8002b7a4 <PRFONT_GL> +8003096c: 00000000 nop + PRFONT_BL(NORMAL_LUMINANCE); +80030970: 24040080 li a0,128 +80030974: 0c00adf8 jal 8002b7e0 <PRFONT_BL> +80030978: 00000000 nop + } +} +8003097c: 00000000 nop +80030980: 03c0e821 move sp,s8 +80030984: 8fbf0014 lw ra,20(sp) +80030988: 8fbe0010 lw s8,16(sp) +8003098c: 27bd0018 addiu sp,sp,24 +80030990: 03e00008 jr ra +80030994: 00000000 nop + +80030998 <gs_internal_cos>: + +static double gs_internal_cos(int a) +{ +80030998: 27bdfff0 addiu sp,sp,-16 +8003099c: afbe000c sw s8,12(sp) +800309a0: 03a0f021 move s8,sp +800309a4: afc40010 sw a0,16(s8) + int a_a = (a>>12)-(((a>>12)/360)*360); +800309a8: 8fc40010 lw a0,16(s8) +800309ac: 00000000 nop +800309b0: 00042b03 sra a1,a0,0xc +800309b4: 24040168 li a0,360 +800309b8: 14800002 bnez a0,800309c4 <gs_internal_cos+0x2c> +800309bc: 00a4001a div zero,a1,a0 +800309c0: 0007000d break 0x7 +800309c4: 00002010 mfhi a0 +800309c8: afc40000 sw a0,0(s8) + + if(a_a>=0 && a_a<=90) +800309cc: 8fc40000 lw a0,0(s8) +800309d0: 00000000 nop +800309d4: 04800010 bltz a0,80030a18 <gs_internal_cos+0x80> +800309d8: 00000000 nop +800309dc: 8fc40000 lw a0,0(s8) +800309e0: 00000000 nop +800309e4: 2884005b slti a0,a0,91 +800309e8: 1080000b beqz a0,80030a18 <gs_internal_cos+0x80> +800309ec: 00000000 nop + return gs_rot_cos_tbl[a_a]; +800309f0: 3c028004 lui v0,0x8004 +800309f4: 8fc30000 lw v1,0(s8) +800309f8: 00000000 nop +800309fc: 000318c0 sll v1,v1,0x3 +80030a00: 2442fa70 addiu v0,v0,-1424 +80030a04: 00621021 addu v0,v1,v0 +80030a08: 8c430004 lw v1,4(v0) +80030a0c: 8c420000 lw v0,0(v0) +80030a10: 1000004c b 80030b44 <gs_internal_cos+0x1ac> +80030a14: 00000000 nop + else if(a_a>90 && a_a<=180) +80030a18: 8fc40000 lw a0,0(s8) +80030a1c: 00000000 nop +80030a20: 2884005b slti a0,a0,91 +80030a24: 14800016 bnez a0,80030a80 <gs_internal_cos+0xe8> +80030a28: 00000000 nop +80030a2c: 8fc40000 lw a0,0(s8) +80030a30: 00000000 nop +80030a34: 288400b5 slti a0,a0,181 +80030a38: 10800011 beqz a0,80030a80 <gs_internal_cos+0xe8> +80030a3c: 00000000 nop + return -gs_rot_cos_tbl[180 - a_a]; +80030a40: 240500b4 li a1,180 +80030a44: 8fc40000 lw a0,0(s8) +80030a48: 00000000 nop +80030a4c: 00a42823 subu a1,a1,a0 +80030a50: 3c048004 lui a0,0x8004 +80030a54: 000528c0 sll a1,a1,0x3 +80030a58: 2484fa70 addiu a0,a0,-1424 +80030a5c: 00a42021 addu a0,a1,a0 +80030a60: 8c850004 lw a1,4(a0) +80030a64: 8c840000 lw a0,0(a0) +80030a68: 00000000 nop +80030a6c: 00801021 move v0,a0 +80030a70: 3c068000 lui a2,0x8000 +80030a74: 00a61826 xor v1,a1,a2 +80030a78: 10000032 b 80030b44 <gs_internal_cos+0x1ac> +80030a7c: 00000000 nop + else if(a_a>180 && a_a<=270) +80030a80: 8fc40000 lw a0,0(s8) +80030a84: 00000000 nop +80030a88: 288400b5 slti a0,a0,181 +80030a8c: 14800015 bnez a0,80030ae4 <gs_internal_cos+0x14c> +80030a90: 00000000 nop +80030a94: 8fc40000 lw a0,0(s8) +80030a98: 00000000 nop +80030a9c: 2884010f slti a0,a0,271 +80030aa0: 10800010 beqz a0,80030ae4 <gs_internal_cos+0x14c> +80030aa4: 00000000 nop + return -gs_rot_cos_tbl[a_a - 180]; +80030aa8: 8fc40000 lw a0,0(s8) +80030aac: 00000000 nop +80030ab0: 2485ff4c addiu a1,a0,-180 +80030ab4: 3c048004 lui a0,0x8004 +80030ab8: 000528c0 sll a1,a1,0x3 +80030abc: 2484fa70 addiu a0,a0,-1424 +80030ac0: 00a42021 addu a0,a1,a0 +80030ac4: 8c850004 lw a1,4(a0) +80030ac8: 8c840000 lw a0,0(a0) +80030acc: 00000000 nop +80030ad0: 00801021 move v0,a0 +80030ad4: 3c068000 lui a2,0x8000 +80030ad8: 00a61826 xor v1,a1,a2 +80030adc: 10000019 b 80030b44 <gs_internal_cos+0x1ac> +80030ae0: 00000000 nop + else if(a_a>270 && a_a<=359) +80030ae4: 8fc20000 lw v0,0(s8) +80030ae8: 00000000 nop +80030aec: 2842010f slti v0,v0,271 +80030af0: 14400012 bnez v0,80030b3c <gs_internal_cos+0x1a4> +80030af4: 00000000 nop +80030af8: 8fc20000 lw v0,0(s8) +80030afc: 00000000 nop +80030b00: 28420168 slti v0,v0,360 +80030b04: 1040000d beqz v0,80030b3c <gs_internal_cos+0x1a4> +80030b08: 00000000 nop + return gs_rot_cos_tbl[360 - a_a]; +80030b0c: 24030168 li v1,360 +80030b10: 8fc20000 lw v0,0(s8) +80030b14: 00000000 nop +80030b18: 00621823 subu v1,v1,v0 +80030b1c: 3c028004 lui v0,0x8004 +80030b20: 000318c0 sll v1,v1,0x3 +80030b24: 2442fa70 addiu v0,v0,-1424 +80030b28: 00621021 addu v0,v1,v0 +80030b2c: 8c430004 lw v1,4(v0) +80030b30: 8c420000 lw v0,0(v0) +80030b34: 10000003 b 80030b44 <gs_internal_cos+0x1ac> +80030b38: 00000000 nop + + return 0; +80030b3c: 00001021 move v0,zero +80030b40: 00001821 move v1,zero +} +80030b44: 03c0e821 move sp,s8 +80030b48: 8fbe000c lw s8,12(sp) +80030b4c: 27bd0010 addiu sp,sp,16 +80030b50: 03e00008 jr ra +80030b54: 00000000 nop + +80030b58 <gs_internal_sin>: + +static double gs_internal_sin(int a) +{ +80030b58: 27bdfff0 addiu sp,sp,-16 +80030b5c: afbe000c sw s8,12(sp) +80030b60: 03a0f021 move s8,sp +80030b64: afc40010 sw a0,16(s8) + int a_a = (a>>12)-(((a>>12)/360)*360); +80030b68: 8fc40010 lw a0,16(s8) +80030b6c: 00000000 nop +80030b70: 00042b03 sra a1,a0,0xc +80030b74: 24040168 li a0,360 +80030b78: 14800002 bnez a0,80030b84 <gs_internal_sin+0x2c> +80030b7c: 00a4001a div zero,a1,a0 +80030b80: 0007000d break 0x7 +80030b84: 00002010 mfhi a0 +80030b88: afc40000 sw a0,0(s8) + + if(a_a>=0 && a_a<=90) +80030b8c: 8fc40000 lw a0,0(s8) +80030b90: 00000000 nop +80030b94: 04800012 bltz a0,80030be0 <gs_internal_sin+0x88> +80030b98: 00000000 nop +80030b9c: 8fc40000 lw a0,0(s8) +80030ba0: 00000000 nop +80030ba4: 2884005b slti a0,a0,91 +80030ba8: 1080000d beqz a0,80030be0 <gs_internal_sin+0x88> +80030bac: 00000000 nop + return gs_rot_cos_tbl[90-a_a]; +80030bb0: 2403005a li v1,90 +80030bb4: 8fc20000 lw v0,0(s8) +80030bb8: 00000000 nop +80030bbc: 00621823 subu v1,v1,v0 +80030bc0: 3c028004 lui v0,0x8004 +80030bc4: 000318c0 sll v1,v1,0x3 +80030bc8: 2442fa70 addiu v0,v0,-1424 +80030bcc: 00621021 addu v0,v1,v0 +80030bd0: 8c430004 lw v1,4(v0) +80030bd4: 8c420000 lw v0,0(v0) +80030bd8: 1000004b b 80030d08 <gs_internal_sin+0x1b0> +80030bdc: 00000000 nop + else if(a_a>90 && a_a<=180) +80030be0: 8fc40000 lw a0,0(s8) +80030be4: 00000000 nop +80030be8: 2884005b slti a0,a0,91 +80030bec: 14800011 bnez a0,80030c34 <gs_internal_sin+0xdc> +80030bf0: 00000000 nop +80030bf4: 8fc40000 lw a0,0(s8) +80030bf8: 00000000 nop +80030bfc: 288400b5 slti a0,a0,181 +80030c00: 1080000c beqz a0,80030c34 <gs_internal_sin+0xdc> +80030c04: 00000000 nop + return gs_rot_cos_tbl[a_a-90]; +80030c08: 8fc20000 lw v0,0(s8) +80030c0c: 00000000 nop +80030c10: 2443ffa6 addiu v1,v0,-90 +80030c14: 3c028004 lui v0,0x8004 +80030c18: 000318c0 sll v1,v1,0x3 +80030c1c: 2442fa70 addiu v0,v0,-1424 +80030c20: 00621021 addu v0,v1,v0 +80030c24: 8c430004 lw v1,4(v0) +80030c28: 8c420000 lw v0,0(v0) +80030c2c: 10000036 b 80030d08 <gs_internal_sin+0x1b0> +80030c30: 00000000 nop + else if(a_a>180 && a_a<=270) +80030c34: 8fc40000 lw a0,0(s8) +80030c38: 00000000 nop +80030c3c: 288400b5 slti a0,a0,181 +80030c40: 14800016 bnez a0,80030c9c <gs_internal_sin+0x144> +80030c44: 00000000 nop +80030c48: 8fc40000 lw a0,0(s8) +80030c4c: 00000000 nop +80030c50: 2884010f slti a0,a0,271 +80030c54: 10800011 beqz a0,80030c9c <gs_internal_sin+0x144> +80030c58: 00000000 nop + return -gs_rot_cos_tbl[270-a_a]; +80030c5c: 2405010e li a1,270 +80030c60: 8fc40000 lw a0,0(s8) +80030c64: 00000000 nop +80030c68: 00a42823 subu a1,a1,a0 +80030c6c: 3c048004 lui a0,0x8004 +80030c70: 000528c0 sll a1,a1,0x3 +80030c74: 2484fa70 addiu a0,a0,-1424 +80030c78: 00a42021 addu a0,a1,a0 +80030c7c: 8c850004 lw a1,4(a0) +80030c80: 8c840000 lw a0,0(a0) +80030c84: 00000000 nop +80030c88: 00801021 move v0,a0 +80030c8c: 3c068000 lui a2,0x8000 +80030c90: 00a61826 xor v1,a1,a2 +80030c94: 1000001c b 80030d08 <gs_internal_sin+0x1b0> +80030c98: 00000000 nop + else if(a_a>270 && a_a<=359) +80030c9c: 8fc40000 lw a0,0(s8) +80030ca0: 00000000 nop +80030ca4: 2884010f slti a0,a0,271 +80030ca8: 14800015 bnez a0,80030d00 <gs_internal_sin+0x1a8> +80030cac: 00000000 nop +80030cb0: 8fc40000 lw a0,0(s8) +80030cb4: 00000000 nop +80030cb8: 28840168 slti a0,a0,360 +80030cbc: 10800010 beqz a0,80030d00 <gs_internal_sin+0x1a8> +80030cc0: 00000000 nop + return -gs_rot_cos_tbl[a_a-270]; +80030cc4: 8fc40000 lw a0,0(s8) +80030cc8: 00000000 nop +80030ccc: 2485fef2 addiu a1,a0,-270 +80030cd0: 3c048004 lui a0,0x8004 +80030cd4: 000528c0 sll a1,a1,0x3 +80030cd8: 2484fa70 addiu a0,a0,-1424 +80030cdc: 00a42021 addu a0,a1,a0 +80030ce0: 8c850004 lw a1,4(a0) +80030ce4: 8c840000 lw a0,0(a0) +80030ce8: 00000000 nop +80030cec: 00801021 move v0,a0 +80030cf0: 3c068000 lui a2,0x8000 +80030cf4: 00a61826 xor v1,a1,a2 +80030cf8: 10000003 b 80030d08 <gs_internal_sin+0x1b0> +80030cfc: 00000000 nop + + return 0; +80030d00: 00001021 move v0,zero +80030d04: 00001821 move v1,zero +} +80030d08: 03c0e821 move sp,s8 +80030d0c: 8fbe000c lw s8,12(sp) +80030d10: 27bd0010 addiu sp,sp,16 +80030d14: 03e00008 jr ra +80030d18: 00000000 nop + +80030d1c <gs_internal_vector_rotate>: + +static void gs_internal_vector_rotate(int x_a, int y_a, int z_a, double *v, double *n) +{ +80030d1c: 27bdff30 addiu sp,sp,-208 +80030d20: afbf00cc sw ra,204(sp) +80030d24: afbe00c8 sw s8,200(sp) +80030d28: afb700c4 sw s7,196(sp) +80030d2c: afb600c0 sw s6,192(sp) +80030d30: afb500bc sw s5,188(sp) +80030d34: afb400b8 sw s4,184(sp) +80030d38: afb300b4 sw s3,180(sp) +80030d3c: afb200b0 sw s2,176(sp) +80030d40: afb100ac sw s1,172(sp) +80030d44: afb000a8 sw s0,168(sp) +80030d48: 03a0f021 move s8,sp +80030d4c: afc400d0 sw a0,208(s8) +80030d50: afc500d4 sw a1,212(s8) +80030d54: afc600d8 sw a2,216(s8) +80030d58: afc700dc sw a3,220(s8) + double axis_m[3][3]; + double b[3]; + double k[3], s[3]; + int x; + + k[0] = gs_internal_cos(x_a); +80030d5c: 8fc400d0 lw a0,208(s8) +80030d60: 0c00c266 jal 80030998 <gs_internal_cos> +80030d64: 00000000 nop +80030d68: afc20078 sw v0,120(s8) +80030d6c: afc3007c sw v1,124(s8) + k[1] = gs_internal_cos(y_a); +80030d70: 8fc400d4 lw a0,212(s8) +80030d74: 0c00c266 jal 80030998 <gs_internal_cos> +80030d78: 00000000 nop +80030d7c: afc20080 sw v0,128(s8) +80030d80: afc30084 sw v1,132(s8) + k[2] = gs_internal_cos(z_a); +80030d84: 8fc400d8 lw a0,216(s8) +80030d88: 0c00c266 jal 80030998 <gs_internal_cos> +80030d8c: 00000000 nop +80030d90: afc20088 sw v0,136(s8) +80030d94: afc3008c sw v1,140(s8) + + s[0] = gs_internal_sin(x_a); +80030d98: 8fc400d0 lw a0,208(s8) +80030d9c: 0c00c2d6 jal 80030b58 <gs_internal_sin> +80030da0: 00000000 nop +80030da4: afc20090 sw v0,144(s8) +80030da8: afc30094 sw v1,148(s8) + s[1] = gs_internal_sin(y_a); +80030dac: 8fc400d4 lw a0,212(s8) +80030db0: 0c00c2d6 jal 80030b58 <gs_internal_sin> +80030db4: 00000000 nop +80030db8: afc20098 sw v0,152(s8) +80030dbc: afc3009c sw v1,156(s8) + s[2] = gs_internal_sin(z_a); +80030dc0: 8fc400d8 lw a0,216(s8) +80030dc4: 0c00c2d6 jal 80030b58 <gs_internal_sin> +80030dc8: 00000000 nop +80030dcc: afc200a0 sw v0,160(s8) +80030dd0: afc300a4 sw v1,164(s8) + + axis_m[0][0] = k[1] * k[2]; +80030dd4: 8fc20080 lw v0,128(s8) +80030dd8: 8fc30084 lw v1,132(s8) +80030ddc: 8fc40088 lw a0,136(s8) +80030de0: 8fc5008c lw a1,140(s8) +80030de4: 00803021 move a2,a0 +80030de8: 00a03821 move a3,a1 +80030dec: 00402021 move a0,v0 +80030df0: 00602821 move a1,v1 +80030df4: 0c00f853 jal 8003e14c <__muldf3> +80030df8: 00000000 nop +80030dfc: afc20018 sw v0,24(s8) +80030e00: afc3001c sw v1,28(s8) + axis_m[0][1] = (k[0] * s[2]) + (s[0]*s[1]*k[2]); +80030e04: 8fc20078 lw v0,120(s8) +80030e08: 8fc3007c lw v1,124(s8) +80030e0c: 8fc400a0 lw a0,160(s8) +80030e10: 8fc500a4 lw a1,164(s8) +80030e14: 00803021 move a2,a0 +80030e18: 00a03821 move a3,a1 +80030e1c: 00402021 move a0,v0 +80030e20: 00602821 move a1,v1 +80030e24: 0c00f853 jal 8003e14c <__muldf3> +80030e28: 00000000 nop +80030e2c: 0040b021 move s6,v0 +80030e30: 0060b821 move s7,v1 +80030e34: 8fc20090 lw v0,144(s8) +80030e38: 8fc30094 lw v1,148(s8) +80030e3c: 8fc40098 lw a0,152(s8) +80030e40: 8fc5009c lw a1,156(s8) +80030e44: 00803021 move a2,a0 +80030e48: 00a03821 move a3,a1 +80030e4c: 00402021 move a0,v0 +80030e50: 00602821 move a1,v1 +80030e54: 0c00f853 jal 8003e14c <__muldf3> +80030e58: 00000000 nop +80030e5c: 00402021 move a0,v0 +80030e60: 00602821 move a1,v1 +80030e64: 8fc20088 lw v0,136(s8) +80030e68: 8fc3008c lw v1,140(s8) +80030e6c: 00403021 move a2,v0 +80030e70: 00603821 move a3,v1 +80030e74: 0c00f853 jal 8003e14c <__muldf3> +80030e78: 00000000 nop +80030e7c: 00403021 move a2,v0 +80030e80: 00603821 move a3,v1 +80030e84: 02c02021 move a0,s6 +80030e88: 02e02821 move a1,s7 +80030e8c: 0c00f3d7 jal 8003cf5c <__adddf3> +80030e90: 00000000 nop +80030e94: afc20020 sw v0,32(s8) +80030e98: afc30024 sw v1,36(s8) + axis_m[0][2] = (s[0]*s[2]) - (k[0]*s[1]*k[2]); +80030e9c: 8fc20090 lw v0,144(s8) +80030ea0: 8fc30094 lw v1,148(s8) +80030ea4: 8fc400a0 lw a0,160(s8) +80030ea8: 8fc500a4 lw a1,164(s8) +80030eac: 00803021 move a2,a0 +80030eb0: 00a03821 move a3,a1 +80030eb4: 00402021 move a0,v0 +80030eb8: 00602821 move a1,v1 +80030ebc: 0c00f853 jal 8003e14c <__muldf3> +80030ec0: 00000000 nop +80030ec4: 0040b021 move s6,v0 +80030ec8: 0060b821 move s7,v1 +80030ecc: 8fc20078 lw v0,120(s8) +80030ed0: 8fc3007c lw v1,124(s8) +80030ed4: 8fc40098 lw a0,152(s8) +80030ed8: 8fc5009c lw a1,156(s8) +80030edc: 00803021 move a2,a0 +80030ee0: 00a03821 move a3,a1 +80030ee4: 00402021 move a0,v0 +80030ee8: 00602821 move a1,v1 +80030eec: 0c00f853 jal 8003e14c <__muldf3> +80030ef0: 00000000 nop +80030ef4: 00402021 move a0,v0 +80030ef8: 00602821 move a1,v1 +80030efc: 8fc20088 lw v0,136(s8) +80030f00: 8fc3008c lw v1,140(s8) +80030f04: 00403021 move a2,v0 +80030f08: 00603821 move a3,v1 +80030f0c: 0c00f853 jal 8003e14c <__muldf3> +80030f10: 00000000 nop +80030f14: 00403021 move a2,v0 +80030f18: 00603821 move a3,v1 +80030f1c: 02c02021 move a0,s6 +80030f20: 02e02821 move a1,s7 +80030f24: 0c00f9d7 jal 8003e75c <__subdf3> +80030f28: 00000000 nop +80030f2c: afc20028 sw v0,40(s8) +80030f30: afc3002c sw v1,44(s8) + axis_m[1][0] = -(k[1] * s[2]); +80030f34: 8fc20080 lw v0,128(s8) +80030f38: 8fc30084 lw v1,132(s8) +80030f3c: 8fc400a0 lw a0,160(s8) +80030f40: 8fc500a4 lw a1,164(s8) +80030f44: 00803021 move a2,a0 +80030f48: 00a03821 move a3,a1 +80030f4c: 00402021 move a0,v0 +80030f50: 00602821 move a1,v1 +80030f54: 0c00f853 jal 8003e14c <__muldf3> +80030f58: 00000000 nop +80030f5c: 0040a021 move s4,v0 +80030f60: 3c048000 lui a0,0x8000 +80030f64: 0064a826 xor s5,v1,a0 +80030f68: afd40030 sw s4,48(s8) +80030f6c: afd50034 sw s5,52(s8) + axis_m[1][1] = (k[0]*k[2]) - (s[0]*s[1]*s[2]); +80030f70: 8fc20078 lw v0,120(s8) +80030f74: 8fc3007c lw v1,124(s8) +80030f78: 8fc40088 lw a0,136(s8) +80030f7c: 8fc5008c lw a1,140(s8) +80030f80: 00803021 move a2,a0 +80030f84: 00a03821 move a3,a1 +80030f88: 00402021 move a0,v0 +80030f8c: 00602821 move a1,v1 +80030f90: 0c00f853 jal 8003e14c <__muldf3> +80030f94: 00000000 nop +80030f98: 0040a021 move s4,v0 +80030f9c: 0060a821 move s5,v1 +80030fa0: 8fc20090 lw v0,144(s8) +80030fa4: 8fc30094 lw v1,148(s8) +80030fa8: 8fc40098 lw a0,152(s8) +80030fac: 8fc5009c lw a1,156(s8) +80030fb0: 00803021 move a2,a0 +80030fb4: 00a03821 move a3,a1 +80030fb8: 00402021 move a0,v0 +80030fbc: 00602821 move a1,v1 +80030fc0: 0c00f853 jal 8003e14c <__muldf3> +80030fc4: 00000000 nop +80030fc8: 00402021 move a0,v0 +80030fcc: 00602821 move a1,v1 +80030fd0: 8fc200a0 lw v0,160(s8) +80030fd4: 8fc300a4 lw v1,164(s8) +80030fd8: 00403021 move a2,v0 +80030fdc: 00603821 move a3,v1 +80030fe0: 0c00f853 jal 8003e14c <__muldf3> +80030fe4: 00000000 nop +80030fe8: 00403021 move a2,v0 +80030fec: 00603821 move a3,v1 +80030ff0: 02802021 move a0,s4 +80030ff4: 02a02821 move a1,s5 +80030ff8: 0c00f9d7 jal 8003e75c <__subdf3> +80030ffc: 00000000 nop +80031000: afc20038 sw v0,56(s8) +80031004: afc3003c sw v1,60(s8) + axis_m[1][2] = (s[0]*k[2]) + (k[0]*s[1]*s[2]); +80031008: 8fc20090 lw v0,144(s8) +8003100c: 8fc30094 lw v1,148(s8) +80031010: 8fc40088 lw a0,136(s8) +80031014: 8fc5008c lw a1,140(s8) +80031018: 00803021 move a2,a0 +8003101c: 00a03821 move a3,a1 +80031020: 00402021 move a0,v0 +80031024: 00602821 move a1,v1 +80031028: 0c00f853 jal 8003e14c <__muldf3> +8003102c: 00000000 nop +80031030: 0040a021 move s4,v0 +80031034: 0060a821 move s5,v1 +80031038: 8fc20078 lw v0,120(s8) +8003103c: 8fc3007c lw v1,124(s8) +80031040: 8fc40098 lw a0,152(s8) +80031044: 8fc5009c lw a1,156(s8) +80031048: 00803021 move a2,a0 +8003104c: 00a03821 move a3,a1 +80031050: 00402021 move a0,v0 +80031054: 00602821 move a1,v1 +80031058: 0c00f853 jal 8003e14c <__muldf3> +8003105c: 00000000 nop +80031060: 00402021 move a0,v0 +80031064: 00602821 move a1,v1 +80031068: 8fc200a0 lw v0,160(s8) +8003106c: 8fc300a4 lw v1,164(s8) +80031070: 00403021 move a2,v0 +80031074: 00603821 move a3,v1 +80031078: 0c00f853 jal 8003e14c <__muldf3> +8003107c: 00000000 nop +80031080: 00403021 move a2,v0 +80031084: 00603821 move a3,v1 +80031088: 02802021 move a0,s4 +8003108c: 02a02821 move a1,s5 +80031090: 0c00f3d7 jal 8003cf5c <__adddf3> +80031094: 00000000 nop +80031098: afc20040 sw v0,64(s8) +8003109c: afc30044 sw v1,68(s8) + axis_m[2][0] = s[1]; +800310a0: 8fc20098 lw v0,152(s8) +800310a4: 8fc3009c lw v1,156(s8) +800310a8: afc20048 sw v0,72(s8) +800310ac: afc3004c sw v1,76(s8) + axis_m[2][1] = -(s[0]*k[1]); +800310b0: 8fc20090 lw v0,144(s8) +800310b4: 8fc30094 lw v1,148(s8) +800310b8: 8fc40080 lw a0,128(s8) +800310bc: 8fc50084 lw a1,132(s8) +800310c0: 00803021 move a2,a0 +800310c4: 00a03821 move a3,a1 +800310c8: 00402021 move a0,v0 +800310cc: 00602821 move a1,v1 +800310d0: 0c00f853 jal 8003e14c <__muldf3> +800310d4: 00000000 nop +800310d8: 00409021 move s2,v0 +800310dc: 3c048000 lui a0,0x8000 +800310e0: 00649826 xor s3,v1,a0 +800310e4: afd20050 sw s2,80(s8) +800310e8: afd30054 sw s3,84(s8) + axis_m[2][2] = k[0]*k[1]; +800310ec: 8fc20078 lw v0,120(s8) +800310f0: 8fc3007c lw v1,124(s8) +800310f4: 8fc40080 lw a0,128(s8) +800310f8: 8fc50084 lw a1,132(s8) +800310fc: 00803021 move a2,a0 +80031100: 00a03821 move a3,a1 +80031104: 00402021 move a0,v0 +80031108: 00602821 move a1,v1 +8003110c: 0c00f853 jal 8003e14c <__muldf3> +80031110: 00000000 nop +80031114: afc20058 sw v0,88(s8) +80031118: afc3005c sw v1,92(s8) + + for(x=0;x<3;x++) +8003111c: afc00010 sw zero,16(s8) +80031120: 1000005c b 80031294 <gs_internal_vector_rotate+0x578> +80031124: 00000000 nop + b[x] = (axis_m[x][0] * v[0]) + (axis_m[x][1] * v[1]) + (axis_m[x][2] * v[2]); +80031128: 8fc20010 lw v0,16(s8) +8003112c: 00000000 nop +80031130: 000210c0 sll v0,v0,0x3 +80031134: 00021880 sll v1,v0,0x2 +80031138: 00621023 subu v0,v1,v0 +8003113c: 27c30010 addiu v1,s8,16 +80031140: 00621021 addu v0,v1,v0 +80031144: 8c43000c lw v1,12(v0) +80031148: 8c420008 lw v0,8(v0) +8003114c: 8fc400dc lw a0,220(s8) +80031150: 00000000 nop +80031154: 8c850004 lw a1,4(a0) +80031158: 8c840000 lw a0,0(a0) +8003115c: 00000000 nop +80031160: 00803021 move a2,a0 +80031164: 00a03821 move a3,a1 +80031168: 00402021 move a0,v0 +8003116c: 00602821 move a1,v1 +80031170: 0c00f853 jal 8003e14c <__muldf3> +80031174: 00000000 nop +80031178: 00409021 move s2,v0 +8003117c: 00609821 move s3,v1 +80031180: 8fc20010 lw v0,16(s8) +80031184: 00000000 nop +80031188: 000210c0 sll v0,v0,0x3 +8003118c: 00021880 sll v1,v0,0x2 +80031190: 00621023 subu v0,v1,v0 +80031194: 27c30010 addiu v1,s8,16 +80031198: 00621021 addu v0,v1,v0 +8003119c: 8c430014 lw v1,20(v0) +800311a0: 8c420010 lw v0,16(v0) +800311a4: 8fc400dc lw a0,220(s8) +800311a8: 00000000 nop +800311ac: 24840008 addiu a0,a0,8 +800311b0: 8c850004 lw a1,4(a0) +800311b4: 8c840000 lw a0,0(a0) +800311b8: 00000000 nop +800311bc: 00803021 move a2,a0 +800311c0: 00a03821 move a3,a1 +800311c4: 00402021 move a0,v0 +800311c8: 00602821 move a1,v1 +800311cc: 0c00f853 jal 8003e14c <__muldf3> +800311d0: 00000000 nop +800311d4: 00403021 move a2,v0 +800311d8: 00603821 move a3,v1 +800311dc: 02402021 move a0,s2 +800311e0: 02602821 move a1,s3 +800311e4: 0c00f3d7 jal 8003cf5c <__adddf3> +800311e8: 00000000 nop +800311ec: 00409021 move s2,v0 +800311f0: 00609821 move s3,v1 +800311f4: 8fc20010 lw v0,16(s8) +800311f8: 00000000 nop +800311fc: 000210c0 sll v0,v0,0x3 +80031200: 00021880 sll v1,v0,0x2 +80031204: 00621023 subu v0,v1,v0 +80031208: 27c30010 addiu v1,s8,16 +8003120c: 00621021 addu v0,v1,v0 +80031210: 8c43001c lw v1,28(v0) +80031214: 8c420018 lw v0,24(v0) +80031218: 8fc400dc lw a0,220(s8) +8003121c: 00000000 nop +80031220: 24840010 addiu a0,a0,16 +80031224: 8c850004 lw a1,4(a0) +80031228: 8c840000 lw a0,0(a0) +8003122c: 00000000 nop +80031230: 00803021 move a2,a0 +80031234: 00a03821 move a3,a1 +80031238: 00402021 move a0,v0 +8003123c: 00602821 move a1,v1 +80031240: 0c00f853 jal 8003e14c <__muldf3> +80031244: 00000000 nop +80031248: 00403021 move a2,v0 +8003124c: 00603821 move a3,v1 +80031250: 02402021 move a0,s2 +80031254: 02602821 move a1,s3 +80031258: 0c00f3d7 jal 8003cf5c <__adddf3> +8003125c: 00000000 nop +80031260: 00402021 move a0,v0 +80031264: 00602821 move a1,v1 +80031268: 8fc20010 lw v0,16(s8) +8003126c: 00000000 nop +80031270: 000210c0 sll v0,v0,0x3 +80031274: 27c30010 addiu v1,s8,16 +80031278: 00621021 addu v0,v1,v0 +8003127c: ac440050 sw a0,80(v0) +80031280: ac450054 sw a1,84(v0) + axis_m[1][2] = (s[0]*k[2]) + (k[0]*s[1]*s[2]); + axis_m[2][0] = s[1]; + axis_m[2][1] = -(s[0]*k[1]); + axis_m[2][2] = k[0]*k[1]; + + for(x=0;x<3;x++) +80031284: 8fc20010 lw v0,16(s8) +80031288: 00000000 nop +8003128c: 24420001 addiu v0,v0,1 +80031290: afc20010 sw v0,16(s8) +80031294: 8fc20010 lw v0,16(s8) +80031298: 00000000 nop +8003129c: 28420003 slti v0,v0,3 +800312a0: 1440ffa1 bnez v0,80031128 <gs_internal_vector_rotate+0x40c> +800312a4: 00000000 nop + b[x] = (axis_m[x][0] * v[0]) + (axis_m[x][1] * v[1]) + (axis_m[x][2] * v[2]); + + b[1]=-b[1]; +800312a8: 8fc20068 lw v0,104(s8) +800312ac: 8fc3006c lw v1,108(s8) +800312b0: 00408021 move s0,v0 +800312b4: 3c048000 lui a0,0x8000 +800312b8: 00648826 xor s1,v1,a0 +800312bc: afd00068 sw s0,104(s8) +800312c0: afd1006c sw s1,108(s8) + + for(x=0;x<3;x++) +800312c4: afc00010 sw zero,16(s8) +800312c8: 10000015 b 80031320 <gs_internal_vector_rotate+0x604> +800312cc: 00000000 nop + n[x]=b[x]; +800312d0: 8fc20010 lw v0,16(s8) +800312d4: 00000000 nop +800312d8: 000210c0 sll v0,v0,0x3 +800312dc: 8fc300e0 lw v1,224(s8) +800312e0: 00000000 nop +800312e4: 00622021 addu a0,v1,v0 +800312e8: 8fc20010 lw v0,16(s8) +800312ec: 00000000 nop +800312f0: 000210c0 sll v0,v0,0x3 +800312f4: 27c30010 addiu v1,s8,16 +800312f8: 00621021 addu v0,v1,v0 +800312fc: 8c430054 lw v1,84(v0) +80031300: 8c420050 lw v0,80(v0) +80031304: 00000000 nop +80031308: ac820000 sw v0,0(a0) +8003130c: ac830004 sw v1,4(a0) + for(x=0;x<3;x++) + b[x] = (axis_m[x][0] * v[0]) + (axis_m[x][1] * v[1]) + (axis_m[x][2] * v[2]); + + b[1]=-b[1]; + + for(x=0;x<3;x++) +80031310: 8fc20010 lw v0,16(s8) +80031314: 00000000 nop +80031318: 24420001 addiu v0,v0,1 +8003131c: afc20010 sw v0,16(s8) +80031320: 8fc20010 lw v0,16(s8) +80031324: 00000000 nop +80031328: 28420003 slti v0,v0,3 +8003132c: 1440ffe8 bnez v0,800312d0 <gs_internal_vector_rotate+0x5b4> +80031330: 00000000 nop + n[x]=b[x]; +} +80031334: 00000000 nop +80031338: 03c0e821 move sp,s8 +8003133c: 8fbf00cc lw ra,204(sp) +80031340: 8fbe00c8 lw s8,200(sp) +80031344: 8fb700c4 lw s7,196(sp) +80031348: 8fb600c0 lw s6,192(sp) +8003134c: 8fb500bc lw s5,188(sp) +80031350: 8fb400b8 lw s4,184(sp) +80031354: 8fb300b4 lw s3,180(sp) +80031358: 8fb200b0 lw s2,176(sp) +8003135c: 8fb100ac lw s1,172(sp) +80031360: 8fb000a8 lw s0,168(sp) +80031364: 27bd00d0 addiu sp,sp,208 +80031368: 03e00008 jr ra +8003136c: 00000000 nop + +80031370 <GsIsWorking>: + +int GsIsWorking() +{ +80031370: 27bdffe8 addiu sp,sp,-24 +80031374: afbf0014 sw ra,20(sp) +80031378: afbe0010 sw s8,16(sp) +8003137c: 03a0f021 move s8,sp + return GsIsDrawing(); +80031380: 0c00bf9f jal 8002fe7c <GsIsDrawing> +80031384: 00000000 nop +} +80031388: 03c0e821 move sp,s8 +8003138c: 8fbf0014 lw ra,20(sp) +80031390: 8fbe0010 lw s8,16(sp) +80031394: 27bd0018 addiu sp,sp,24 +80031398: 03e00008 jr ra +8003139c: 00000000 nop + +800313a0 <GsSortCls>: + +void GsSortCls(int r, int g, int b) +{ +800313a0: 27bdffd8 addiu sp,sp,-40 +800313a4: afbf0024 sw ra,36(sp) +800313a8: afbe0020 sw s8,32(sp) +800313ac: 03a0f021 move s8,sp +800313b0: afc40028 sw a0,40(s8) +800313b4: afc5002c sw a1,44(s8) +800313b8: afc60030 sw a2,48(s8) + GsRectangle rect; + + rect.r = r; +800313bc: 8fc20028 lw v0,40(s8) +800313c0: 00000000 nop +800313c4: 304200ff andi v0,v0,0xff +800313c8: a3c20018 sb v0,24(s8) + rect.g = g; +800313cc: 8fc2002c lw v0,44(s8) +800313d0: 00000000 nop +800313d4: 304200ff andi v0,v0,0xff +800313d8: a3c20019 sb v0,25(s8) + rect.b = b; +800313dc: 8fc20030 lw v0,48(s8) +800313e0: 00000000 nop +800313e4: 304200ff andi v0,v0,0xff +800313e8: a3c2001a sb v0,26(s8) + rect.x = 0; +800313ec: a7c00010 sh zero,16(s8) + rect.y = 0; +800313f0: a7c00012 sh zero,18(s8) + rect.attribute = 0; +800313f4: afc0001c sw zero,28(s8) + rect.w = GsCurDrawEnvW; +800313f8: 3c028007 lui v0,0x8007 +800313fc: 94421d40 lhu v0,7488(v0) +80031400: 00000000 nop +80031404: 00021400 sll v0,v0,0x10 +80031408: 00021403 sra v0,v0,0x10 +8003140c: a7c20014 sh v0,20(s8) + rect.h = GsCurDrawEnvH; +80031410: 3c028007 lui v0,0x8007 +80031414: 94421d58 lhu v0,7512(v0) +80031418: 00000000 nop +8003141c: 00021400 sll v0,v0,0x10 +80031420: 00021403 sra v0,v0,0x10 +80031424: a7c20016 sh v0,22(s8) + + GsSortRectangle(&rect); +80031428: 27c20010 addiu v0,s8,16 +8003142c: 00402021 move a0,v0 +80031430: 0c00b762 jal 8002dd88 <GsSortRectangle> +80031434: 00000000 nop +} +80031438: 00000000 nop +8003143c: 03c0e821 move sp,s8 +80031440: 8fbf0024 lw ra,36(sp) +80031444: 8fbe0020 lw s8,32(sp) +80031448: 27bd0028 addiu sp,sp,40 +8003144c: 03e00008 jr ra +80031450: 00000000 nop + +80031454 <GsSetAutoWait>: + +void GsSetAutoWait() +{ +80031454: 27bdfff8 addiu sp,sp,-8 +80031458: afbe0004 sw s8,4(sp) +8003145c: 03a0f021 move s8,sp + __gs_autowait = 1; +80031460: 3c028007 lui v0,0x8007 +80031464: 24030001 li v1,1 +80031468: ac431ce8 sw v1,7400(v0) +} +8003146c: 00000000 nop +80031470: 03c0e821 move sp,s8 +80031474: 8fbe0004 lw s8,4(sp) +80031478: 27bd0008 addiu sp,sp,8 +8003147c: 03e00008 jr ra +80031480: 00000000 nop + +80031484 <GsRotateVector>: + +void GsRotateVector(int x_a, int y_a, int z_a, double *v, double *n) +{ +80031484: 27bdffe0 addiu sp,sp,-32 +80031488: afbf001c sw ra,28(sp) +8003148c: afbe0018 sw s8,24(sp) +80031490: 03a0f021 move s8,sp +80031494: afc40020 sw a0,32(s8) +80031498: afc50024 sw a1,36(s8) +8003149c: afc60028 sw a2,40(s8) +800314a0: afc7002c sw a3,44(s8) + gs_internal_vector_rotate(x_a, y_a, z_a, v, n); +800314a4: 8fc20030 lw v0,48(s8) +800314a8: 00000000 nop +800314ac: afa20010 sw v0,16(sp) +800314b0: 8fc7002c lw a3,44(s8) +800314b4: 8fc60028 lw a2,40(s8) +800314b8: 8fc50024 lw a1,36(s8) +800314bc: 8fc40020 lw a0,32(s8) +800314c0: 0c00c347 jal 80030d1c <gs_internal_vector_rotate> +800314c4: 00000000 nop +} +800314c8: 00000000 nop +800314cc: 03c0e821 move sp,s8 +800314d0: 8fbf001c lw ra,28(sp) +800314d4: 8fbe0018 lw s8,24(sp) +800314d8: 27bd0020 addiu sp,sp,32 +800314dc: 03e00008 jr ra +800314e0: 00000000 nop + +800314e4 <GsSetListEx>: + if(curCount > 0) + linked_list[orig_pos] = (curCount << 24) | (((unsigned int)&linked_list[linked_list_pos]) & 0xffffff); +}*/ + +void GsSetListEx(unsigned int *listptr, unsigned int listpos) +{ +800314e4: 27bdfff8 addiu sp,sp,-8 +800314e8: afbe0004 sw s8,4(sp) +800314ec: 03a0f021 move s8,sp +800314f0: afc40008 sw a0,8(s8) +800314f4: afc5000c sw a1,12(s8) + linked_list = listptr; +800314f8: 3c028007 lui v0,0x8007 +800314fc: 8fc30008 lw v1,8(s8) +80031500: 00000000 nop +80031504: ac431cd4 sw v1,7380(v0) + linked_list_pos = listpos; +80031508: 3c028007 lui v0,0x8007 +8003150c: 8fc3000c lw v1,12(s8) +80031510: 00000000 nop +80031514: ac431cd8 sw v1,7384(v0) +} +80031518: 00000000 nop +8003151c: 03c0e821 move sp,s8 +80031520: 8fbe0004 lw s8,4(sp) +80031524: 27bd0008 addiu sp,sp,8 +80031528: 03e00008 jr ra +8003152c: 00000000 nop + +80031530 <GsSortPolyLine>: + +void GsSortPolyLine(GsPolyLine *line) +{ +80031530: 27bdffd8 addiu sp,sp,-40 +80031534: afbf0024 sw ra,36(sp) +80031538: afbe0020 sw s8,32(sp) +8003153c: 03a0f021 move s8,sp +80031540: afc40028 sw a0,40(s8) + // PKT 0x48 + + int orig_pos = linked_list_pos; +80031544: 3c028007 lui v0,0x8007 +80031548: 8c421cd8 lw v0,7384(v0) +8003154c: 00000000 nop +80031550: afc20014 sw v0,20(s8) + int x; + unsigned char pkt = 0x48; +80031554: 24020048 li v0,72 +80031558: a3c2001c sb v0,28(s8) + unsigned int md; + + md = setup_attribs(0, line->attribute, &pkt); +8003155c: 8fc20028 lw v0,40(s8) +80031560: 00000000 nop +80031564: 8c420010 lw v0,16(v0) +80031568: 27c3001c addiu v1,s8,28 +8003156c: 00603021 move a2,v1 +80031570: 00402821 move a1,v0 +80031574: 00002021 move a0,zero +80031578: 0c00bbd0 jal 8002ef40 <setup_attribs> +8003157c: 00000000 nop +80031580: afc20018 sw v0,24(s8) + + linked_list_pos++; // skip this word, we will replace it later +80031584: 3c028007 lui v0,0x8007 +80031588: 8c421cd8 lw v0,7384(v0) +8003158c: 00000000 nop +80031590: 24430001 addiu v1,v0,1 +80031594: 3c028007 lui v0,0x8007 +80031598: ac431cd8 sw v1,7384(v0) + linked_list[linked_list_pos++] = md; +8003159c: 3c028007 lui v0,0x8007 +800315a0: 8c431cd4 lw v1,7380(v0) +800315a4: 3c028007 lui v0,0x8007 +800315a8: 8c421cd8 lw v0,7384(v0) +800315ac: 00000000 nop +800315b0: 24450001 addiu a1,v0,1 +800315b4: 3c048007 lui a0,0x8007 +800315b8: ac851cd8 sw a1,7384(a0) +800315bc: 00021080 sll v0,v0,0x2 +800315c0: 00621021 addu v0,v1,v0 +800315c4: 8fc30018 lw v1,24(s8) +800315c8: 00000000 nop +800315cc: ac430000 sw v1,0(v0) + linked_list[linked_list_pos++] = (pkt<<24)|(line->b<<16)|(line->g<<8)|(line->r); +800315d0: 3c028007 lui v0,0x8007 +800315d4: 8c431cd4 lw v1,7380(v0) +800315d8: 3c028007 lui v0,0x8007 +800315dc: 8c421cd8 lw v0,7384(v0) +800315e0: 00000000 nop +800315e4: 24450001 addiu a1,v0,1 +800315e8: 3c048007 lui a0,0x8007 +800315ec: ac851cd8 sw a1,7384(a0) +800315f0: 00021080 sll v0,v0,0x2 +800315f4: 00621021 addu v0,v1,v0 +800315f8: 93c3001c lbu v1,28(s8) +800315fc: 00000000 nop +80031600: 00032600 sll a0,v1,0x18 +80031604: 8fc30028 lw v1,40(s8) +80031608: 00000000 nop +8003160c: 90630006 lbu v1,6(v1) +80031610: 00000000 nop +80031614: 00031c00 sll v1,v1,0x10 +80031618: 00832025 or a0,a0,v1 +8003161c: 8fc30028 lw v1,40(s8) +80031620: 00000000 nop +80031624: 90630005 lbu v1,5(v1) +80031628: 00000000 nop +8003162c: 00031a00 sll v1,v1,0x8 +80031630: 00831825 or v1,a0,v1 +80031634: 8fc40028 lw a0,40(s8) +80031638: 00000000 nop +8003163c: 90840004 lbu a0,4(a0) +80031640: 00000000 nop +80031644: 00641825 or v1,v1,a0 +80031648: ac430000 sw v1,0(v0) + + for(x = 0; x < line->npoints; x++) +8003164c: afc00010 sw zero,16(s8) +80031650: 10000028 b 800316f4 <GsSortPolyLine+0x1c4> +80031654: 00000000 nop + linked_list[linked_list_pos++] = ((line->y[x]&0x7ff)<<16)|(line->x[x]&0x7ff); +80031658: 3c028007 lui v0,0x8007 +8003165c: 8c431cd4 lw v1,7380(v0) +80031660: 3c028007 lui v0,0x8007 +80031664: 8c421cd8 lw v0,7384(v0) +80031668: 00000000 nop +8003166c: 24450001 addiu a1,v0,1 +80031670: 3c048007 lui a0,0x8007 +80031674: ac851cd8 sw a1,7384(a0) +80031678: 00021080 sll v0,v0,0x2 +8003167c: 00621021 addu v0,v1,v0 +80031680: 8fc30028 lw v1,40(s8) +80031684: 00000000 nop +80031688: 8c64000c lw a0,12(v1) +8003168c: 8fc30010 lw v1,16(s8) +80031690: 00000000 nop +80031694: 00031840 sll v1,v1,0x1 +80031698: 00831821 addu v1,a0,v1 +8003169c: 84630000 lh v1,0(v1) +800316a0: 00000000 nop +800316a4: 3063ffff andi v1,v1,0xffff +800316a8: 306307ff andi v1,v1,0x7ff +800316ac: 00032400 sll a0,v1,0x10 +800316b0: 8fc30028 lw v1,40(s8) +800316b4: 00000000 nop +800316b8: 8c650008 lw a1,8(v1) +800316bc: 8fc30010 lw v1,16(s8) +800316c0: 00000000 nop +800316c4: 00031840 sll v1,v1,0x1 +800316c8: 00a31821 addu v1,a1,v1 +800316cc: 84630000 lh v1,0(v1) +800316d0: 00000000 nop +800316d4: 3063ffff andi v1,v1,0xffff +800316d8: 306307ff andi v1,v1,0x7ff +800316dc: 00831825 or v1,a0,v1 +800316e0: ac430000 sw v1,0(v0) + + linked_list_pos++; // skip this word, we will replace it later + linked_list[linked_list_pos++] = md; + linked_list[linked_list_pos++] = (pkt<<24)|(line->b<<16)|(line->g<<8)|(line->r); + + for(x = 0; x < line->npoints; x++) +800316e4: 8fc20010 lw v0,16(s8) +800316e8: 00000000 nop +800316ec: 24420001 addiu v0,v0,1 +800316f0: afc20010 sw v0,16(s8) +800316f4: 8fc20028 lw v0,40(s8) +800316f8: 00000000 nop +800316fc: 8c430000 lw v1,0(v0) +80031700: 8fc20010 lw v0,16(s8) +80031704: 00000000 nop +80031708: 0043102b sltu v0,v0,v1 +8003170c: 1440ffd2 bnez v0,80031658 <GsSortPolyLine+0x128> +80031710: 00000000 nop + linked_list[linked_list_pos++] = ((line->y[x]&0x7ff)<<16)|(line->x[x]&0x7ff); + + linked_list[linked_list_pos++] = 0x55555555; // termination code +80031714: 3c028007 lui v0,0x8007 +80031718: 8c431cd4 lw v1,7380(v0) +8003171c: 3c028007 lui v0,0x8007 +80031720: 8c421cd8 lw v0,7384(v0) +80031724: 00000000 nop +80031728: 24450001 addiu a1,v0,1 +8003172c: 3c048007 lui a0,0x8007 +80031730: ac851cd8 sw a1,7384(a0) +80031734: 00021080 sll v0,v0,0x2 +80031738: 00621021 addu v0,v1,v0 +8003173c: 3c035555 lui v1,0x5555 +80031740: 34635555 ori v1,v1,0x5555 +80031744: ac430000 sw v1,0(v0) + + linked_list[orig_pos] = ((line->npoints+3) << 24) | (((unsigned int)&linked_list[linked_list_pos]) & 0xffffff); +80031748: 3c028007 lui v0,0x8007 +8003174c: 8c431cd4 lw v1,7380(v0) +80031750: 8fc20014 lw v0,20(s8) +80031754: 00000000 nop +80031758: 00021080 sll v0,v0,0x2 +8003175c: 00621021 addu v0,v1,v0 +80031760: 8fc30028 lw v1,40(s8) +80031764: 00000000 nop +80031768: 8c630000 lw v1,0(v1) +8003176c: 00000000 nop +80031770: 24630003 addiu v1,v1,3 +80031774: 00032600 sll a0,v1,0x18 +80031778: 3c038007 lui v1,0x8007 +8003177c: 8c651cd4 lw a1,7380(v1) +80031780: 3c038007 lui v1,0x8007 +80031784: 8c631cd8 lw v1,7384(v1) +80031788: 00000000 nop +8003178c: 00031880 sll v1,v1,0x2 +80031790: 00a31821 addu v1,a1,v1 +80031794: 00602821 move a1,v1 +80031798: 3c0300ff lui v1,0xff +8003179c: 3463ffff ori v1,v1,0xffff +800317a0: 00a31824 and v1,a1,v1 +800317a4: 00831825 or v1,a0,v1 +800317a8: ac430000 sw v1,0(v0) +} +800317ac: 00000000 nop +800317b0: 03c0e821 move sp,s8 +800317b4: 8fbf0024 lw ra,36(sp) +800317b8: 8fbe0020 lw s8,32(sp) +800317bc: 27bd0028 addiu sp,sp,40 +800317c0: 03e00008 jr ra +800317c4: 00000000 nop + +800317c8 <GsSortGPolyLine>: + +void GsSortGPolyLine(GsGPolyLine *line) +{ +800317c8: 27bdffd8 addiu sp,sp,-40 +800317cc: afbf0024 sw ra,36(sp) +800317d0: afbe0020 sw s8,32(sp) +800317d4: 03a0f021 move s8,sp +800317d8: afc40028 sw a0,40(s8) + // PKT 0x58 + + int orig_pos = linked_list_pos; +800317dc: 3c028007 lui v0,0x8007 +800317e0: 8c421cd8 lw v0,7384(v0) +800317e4: 00000000 nop +800317e8: afc20014 sw v0,20(s8) + int x; + unsigned char pkt = 0x58; +800317ec: 24020058 li v0,88 +800317f0: a3c2001c sb v0,28(s8) + unsigned int md; + + md = setup_attribs(0, line->attribute, &pkt); +800317f4: 8fc20028 lw v0,40(s8) +800317f8: 00000000 nop +800317fc: 8c420018 lw v0,24(v0) +80031800: 27c3001c addiu v1,s8,28 +80031804: 00603021 move a2,v1 +80031808: 00402821 move a1,v0 +8003180c: 00002021 move a0,zero +80031810: 0c00bbd0 jal 8002ef40 <setup_attribs> +80031814: 00000000 nop +80031818: afc20018 sw v0,24(s8) + + linked_list_pos++; // skip this word, we will replace it later +8003181c: 3c028007 lui v0,0x8007 +80031820: 8c421cd8 lw v0,7384(v0) +80031824: 00000000 nop +80031828: 24430001 addiu v1,v0,1 +8003182c: 3c028007 lui v0,0x8007 +80031830: ac431cd8 sw v1,7384(v0) + linked_list[linked_list_pos++] = md; +80031834: 3c028007 lui v0,0x8007 +80031838: 8c431cd4 lw v1,7380(v0) +8003183c: 3c028007 lui v0,0x8007 +80031840: 8c421cd8 lw v0,7384(v0) +80031844: 00000000 nop +80031848: 24450001 addiu a1,v0,1 +8003184c: 3c048007 lui a0,0x8007 +80031850: ac851cd8 sw a1,7384(a0) +80031854: 00021080 sll v0,v0,0x2 +80031858: 00621021 addu v0,v1,v0 +8003185c: 8fc30018 lw v1,24(s8) +80031860: 00000000 nop +80031864: ac430000 sw v1,0(v0) + + for(x=0; x < line->npoints;x++) +80031868: afc00010 sw zero,16(s8) +8003186c: 1000005a b 800319d8 <GsSortGPolyLine+0x210> +80031870: 00000000 nop + { + linked_list[linked_list_pos++] = (line->b[x]<<16)|(line->g[x]<<8)|(line->r[x])|((x == 0)?(pkt<<24):0); +80031874: 3c028007 lui v0,0x8007 +80031878: 8c431cd4 lw v1,7380(v0) +8003187c: 3c028007 lui v0,0x8007 +80031880: 8c421cd8 lw v0,7384(v0) +80031884: 00000000 nop +80031888: 24450001 addiu a1,v0,1 +8003188c: 3c048007 lui a0,0x8007 +80031890: ac851cd8 sw a1,7384(a0) +80031894: 00021080 sll v0,v0,0x2 +80031898: 00621821 addu v1,v1,v0 +8003189c: 8fc20028 lw v0,40(s8) +800318a0: 00000000 nop +800318a4: 8c44000c lw a0,12(v0) +800318a8: 8fc20010 lw v0,16(s8) +800318ac: 00000000 nop +800318b0: 00821021 addu v0,a0,v0 +800318b4: 90420000 lbu v0,0(v0) +800318b8: 00000000 nop +800318bc: 00022400 sll a0,v0,0x10 +800318c0: 8fc20028 lw v0,40(s8) +800318c4: 00000000 nop +800318c8: 8c450008 lw a1,8(v0) +800318cc: 8fc20010 lw v0,16(s8) +800318d0: 00000000 nop +800318d4: 00a21021 addu v0,a1,v0 +800318d8: 90420000 lbu v0,0(v0) +800318dc: 00000000 nop +800318e0: 00021200 sll v0,v0,0x8 +800318e4: 00821025 or v0,a0,v0 +800318e8: 8fc40028 lw a0,40(s8) +800318ec: 00000000 nop +800318f0: 8c850004 lw a1,4(a0) +800318f4: 8fc40010 lw a0,16(s8) +800318f8: 00000000 nop +800318fc: 00a42021 addu a0,a1,a0 +80031900: 90840000 lbu a0,0(a0) +80031904: 00000000 nop +80031908: 00442025 or a0,v0,a0 +8003190c: 8fc20010 lw v0,16(s8) +80031910: 00000000 nop +80031914: 14400006 bnez v0,80031930 <GsSortGPolyLine+0x168> +80031918: 00000000 nop +8003191c: 93c2001c lbu v0,28(s8) +80031920: 00000000 nop +80031924: 00021600 sll v0,v0,0x18 +80031928: 10000002 b 80031934 <GsSortGPolyLine+0x16c> +8003192c: 00000000 nop +80031930: 00001021 move v0,zero +80031934: 00821025 or v0,a0,v0 +80031938: ac620000 sw v0,0(v1) + linked_list[linked_list_pos++] = ((line->y[x]&0x7ff)<<16)|(line->x[x] & 0x7ff); +8003193c: 3c028007 lui v0,0x8007 +80031940: 8c431cd4 lw v1,7380(v0) +80031944: 3c028007 lui v0,0x8007 +80031948: 8c421cd8 lw v0,7384(v0) +8003194c: 00000000 nop +80031950: 24450001 addiu a1,v0,1 +80031954: 3c048007 lui a0,0x8007 +80031958: ac851cd8 sw a1,7384(a0) +8003195c: 00021080 sll v0,v0,0x2 +80031960: 00621021 addu v0,v1,v0 +80031964: 8fc30028 lw v1,40(s8) +80031968: 00000000 nop +8003196c: 8c640014 lw a0,20(v1) +80031970: 8fc30010 lw v1,16(s8) +80031974: 00000000 nop +80031978: 00031840 sll v1,v1,0x1 +8003197c: 00831821 addu v1,a0,v1 +80031980: 84630000 lh v1,0(v1) +80031984: 00000000 nop +80031988: 3063ffff andi v1,v1,0xffff +8003198c: 306307ff andi v1,v1,0x7ff +80031990: 00032400 sll a0,v1,0x10 +80031994: 8fc30028 lw v1,40(s8) +80031998: 00000000 nop +8003199c: 8c650010 lw a1,16(v1) +800319a0: 8fc30010 lw v1,16(s8) +800319a4: 00000000 nop +800319a8: 00031840 sll v1,v1,0x1 +800319ac: 00a31821 addu v1,a1,v1 +800319b0: 84630000 lh v1,0(v1) +800319b4: 00000000 nop +800319b8: 3063ffff andi v1,v1,0xffff +800319bc: 306307ff andi v1,v1,0x7ff +800319c0: 00831825 or v1,a0,v1 +800319c4: ac430000 sw v1,0(v0) + md = setup_attribs(0, line->attribute, &pkt); + + linked_list_pos++; // skip this word, we will replace it later + linked_list[linked_list_pos++] = md; + + for(x=0; x < line->npoints;x++) +800319c8: 8fc20010 lw v0,16(s8) +800319cc: 00000000 nop +800319d0: 24420001 addiu v0,v0,1 +800319d4: afc20010 sw v0,16(s8) +800319d8: 8fc20028 lw v0,40(s8) +800319dc: 00000000 nop +800319e0: 8c430000 lw v1,0(v0) +800319e4: 8fc20010 lw v0,16(s8) +800319e8: 00000000 nop +800319ec: 0043102b sltu v0,v0,v1 +800319f0: 1440ffa0 bnez v0,80031874 <GsSortGPolyLine+0xac> +800319f4: 00000000 nop + { + linked_list[linked_list_pos++] = (line->b[x]<<16)|(line->g[x]<<8)|(line->r[x])|((x == 0)?(pkt<<24):0); + linked_list[linked_list_pos++] = ((line->y[x]&0x7ff)<<16)|(line->x[x] & 0x7ff); + } + + linked_list[linked_list_pos++] = 0x55555555; // termination code +800319f8: 3c028007 lui v0,0x8007 +800319fc: 8c431cd4 lw v1,7380(v0) +80031a00: 3c028007 lui v0,0x8007 +80031a04: 8c421cd8 lw v0,7384(v0) +80031a08: 00000000 nop +80031a0c: 24450001 addiu a1,v0,1 +80031a10: 3c048007 lui a0,0x8007 +80031a14: ac851cd8 sw a1,7384(a0) +80031a18: 00021080 sll v0,v0,0x2 +80031a1c: 00621021 addu v0,v1,v0 +80031a20: 3c035555 lui v1,0x5555 +80031a24: 34635555 ori v1,v1,0x5555 +80031a28: ac430000 sw v1,0(v0) + + linked_list[orig_pos] = (((line->npoints*2)+2) << 24) | (((unsigned int)&linked_list[linked_list_pos]) & 0xffffff); +80031a2c: 3c028007 lui v0,0x8007 +80031a30: 8c431cd4 lw v1,7380(v0) +80031a34: 8fc20014 lw v0,20(s8) +80031a38: 00000000 nop +80031a3c: 00021080 sll v0,v0,0x2 +80031a40: 00621021 addu v0,v1,v0 +80031a44: 8fc30028 lw v1,40(s8) +80031a48: 00000000 nop +80031a4c: 8c630000 lw v1,0(v1) +80031a50: 00000000 nop +80031a54: 24630001 addiu v1,v1,1 +80031a58: 00031840 sll v1,v1,0x1 +80031a5c: 00032600 sll a0,v1,0x18 +80031a60: 3c038007 lui v1,0x8007 +80031a64: 8c651cd4 lw a1,7380(v1) +80031a68: 3c038007 lui v1,0x8007 +80031a6c: 8c631cd8 lw v1,7384(v1) +80031a70: 00000000 nop +80031a74: 00031880 sll v1,v1,0x2 +80031a78: 00a31821 addu v1,a1,v1 +80031a7c: 00602821 move a1,v1 +80031a80: 3c0300ff lui v1,0xff +80031a84: 3463ffff ori v1,v1,0xffff +80031a88: 00a31824 and v1,a1,v1 +80031a8c: 00831825 or v1,a0,v1 +80031a90: ac430000 sw v1,0(v0) +} +80031a94: 00000000 nop +80031a98: 03c0e821 move sp,s8 +80031a9c: 8fbf0024 lw ra,36(sp) +80031aa0: 8fbe0020 lw s8,32(sp) +80031aa4: 27bd0028 addiu sp,sp,40 +80031aa8: 03e00008 jr ra +80031aac: 00000000 nop + +80031ab0 <GsSortGTPoly4>: + +void GsSortGTPoly4(GsGTPoly4 *tpoly4) +{ +80031ab0: 27bdffd8 addiu sp,sp,-40 +80031ab4: afbf0024 sw ra,36(sp) +80031ab8: afbe0020 sw s8,32(sp) +80031abc: 03a0f021 move s8,sp +80031ac0: afc40028 sw a0,40(s8) + unsigned int orig_pos = linked_list_pos; +80031ac4: 3c028007 lui v0,0x8007 +80031ac8: 8c421cd8 lw v0,7384(v0) +80031acc: 00000000 nop +80031ad0: afc20010 sw v0,16(s8) + unsigned char pkt = 0x3c; +80031ad4: 2402003c li v0,60 +80031ad8: a3c20018 sb v0,24(s8) + + /*md = setup_attribs(tpoly4->tpage, tpoly4->attribute, &pkt);*/ + + //printf("tpoly4->tpage = %d\n", tpoly4->tpage); + + md = setup_attribs(tpoly4->tpage, tpoly4->attribute, &pkt); +80031adc: 8fc20028 lw v0,40(s8) +80031ae0: 00000000 nop +80031ae4: 90420020 lbu v0,32(v0) +80031ae8: 00000000 nop +80031aec: 00402021 move a0,v0 +80031af0: 8fc20028 lw v0,40(s8) +80031af4: 00000000 nop +80031af8: 8c42002c lw v0,44(v0) +80031afc: 27c30018 addiu v1,s8,24 +80031b00: 00603021 move a2,v1 +80031b04: 00402821 move a1,v0 +80031b08: 0c00bbd0 jal 8002ef40 <setup_attribs> +80031b0c: 00000000 nop +80031b10: afc20014 sw v0,20(s8) + + //printf("pkt = %x\n", pkt); + + linked_list[linked_list_pos++] = 0x0C000000; +80031b14: 3c028007 lui v0,0x8007 +80031b18: 8c431cd4 lw v1,7380(v0) +80031b1c: 3c028007 lui v0,0x8007 +80031b20: 8c421cd8 lw v0,7384(v0) +80031b24: 00000000 nop +80031b28: 24450001 addiu a1,v0,1 +80031b2c: 3c048007 lui a0,0x8007 +80031b30: ac851cd8 sw a1,7384(a0) +80031b34: 00021080 sll v0,v0,0x2 +80031b38: 00621021 addu v0,v1,v0 +80031b3c: 3c030c00 lui v1,0xc00 +80031b40: ac430000 sw v1,0(v0) + //linked_list[linked_list_pos++] = md; + //linked_list[linked_list_pos++] = 0xe0000000; + //linked_list[linked_list_pos++] = 0xe1000105; + + //printf("tpoly4 md: %08x\n", md); + linked_list[linked_list_pos++] = (pkt<<24)|(tpoly4->b[0]<<16)|(tpoly4->g[0]<<8)|(tpoly4->r[0]); +80031b44: 3c028007 lui v0,0x8007 +80031b48: 8c431cd4 lw v1,7380(v0) +80031b4c: 3c028007 lui v0,0x8007 +80031b50: 8c421cd8 lw v0,7384(v0) +80031b54: 00000000 nop +80031b58: 24450001 addiu a1,v0,1 +80031b5c: 3c048007 lui a0,0x8007 +80031b60: ac851cd8 sw a1,7384(a0) +80031b64: 00021080 sll v0,v0,0x2 +80031b68: 00621021 addu v0,v1,v0 +80031b6c: 93c30018 lbu v1,24(s8) +80031b70: 00000000 nop +80031b74: 00032600 sll a0,v1,0x18 +80031b78: 8fc30028 lw v1,40(s8) +80031b7c: 00000000 nop +80031b80: 90630008 lbu v1,8(v1) +80031b84: 00000000 nop +80031b88: 00031c00 sll v1,v1,0x10 +80031b8c: 00832025 or a0,a0,v1 +80031b90: 8fc30028 lw v1,40(s8) +80031b94: 00000000 nop +80031b98: 90630004 lbu v1,4(v1) +80031b9c: 00000000 nop +80031ba0: 00031a00 sll v1,v1,0x8 +80031ba4: 00831825 or v1,a0,v1 +80031ba8: 8fc40028 lw a0,40(s8) +80031bac: 00000000 nop +80031bb0: 90840000 lbu a0,0(a0) +80031bb4: 00000000 nop +80031bb8: 00641825 or v1,v1,a0 +80031bbc: ac430000 sw v1,0(v0) + linked_list[linked_list_pos++] = ((tpoly4->y[0]&0x7ff)<<16)|(tpoly4->x[0]&0x7ff); +80031bc0: 3c028007 lui v0,0x8007 +80031bc4: 8c431cd4 lw v1,7380(v0) +80031bc8: 3c028007 lui v0,0x8007 +80031bcc: 8c421cd8 lw v0,7384(v0) +80031bd0: 00000000 nop +80031bd4: 24450001 addiu a1,v0,1 +80031bd8: 3c048007 lui a0,0x8007 +80031bdc: ac851cd8 sw a1,7384(a0) +80031be0: 00021080 sll v0,v0,0x2 +80031be4: 00621021 addu v0,v1,v0 +80031be8: 8fc30028 lw v1,40(s8) +80031bec: 00000000 nop +80031bf0: 84630014 lh v1,20(v1) +80031bf4: 00000000 nop +80031bf8: 3063ffff andi v1,v1,0xffff +80031bfc: 306307ff andi v1,v1,0x7ff +80031c00: 00032400 sll a0,v1,0x10 +80031c04: 8fc30028 lw v1,40(s8) +80031c08: 00000000 nop +80031c0c: 8463000c lh v1,12(v1) +80031c10: 00000000 nop +80031c14: 3063ffff andi v1,v1,0xffff +80031c18: 306307ff andi v1,v1,0x7ff +80031c1c: 00831825 or v1,a0,v1 +80031c20: ac430000 sw v1,0(v0) + linked_list[linked_list_pos++] = (get_clutid(tpoly4->cx, tpoly4->cy)<<16)|(tpoly4->v[0]<<8)|tpoly4->u[0]; +80031c24: 3c028007 lui v0,0x8007 +80031c28: 8c431cd4 lw v1,7380(v0) +80031c2c: 3c028007 lui v0,0x8007 +80031c30: 8c421cd8 lw v0,7384(v0) +80031c34: 00000000 nop +80031c38: 24450001 addiu a1,v0,1 +80031c3c: 3c048007 lui a0,0x8007 +80031c40: ac851cd8 sw a1,7384(a0) +80031c44: 00021080 sll v0,v0,0x2 +80031c48: 00621021 addu v0,v1,v0 +80031c4c: 8fc30028 lw v1,40(s8) +80031c50: 00000000 nop +80031c54: 8463001c lh v1,28(v1) +80031c58: 00000000 nop +80031c5c: 3063ffff andi v1,v1,0xffff +80031c60: 306303ff andi v1,v1,0x3ff +80031c64: 00032103 sra a0,v1,0x4 +80031c68: 8fc30028 lw v1,40(s8) +80031c6c: 00000000 nop +80031c70: 8463001e lh v1,30(v1) +80031c74: 00000000 nop +80031c78: 3063ffff andi v1,v1,0xffff +80031c7c: 306301ff andi v1,v1,0x1ff +80031c80: 00031980 sll v1,v1,0x6 +80031c84: 00831825 or v1,a0,v1 +80031c88: 00032400 sll a0,v1,0x10 +80031c8c: 8fc30028 lw v1,40(s8) +80031c90: 00000000 nop +80031c94: 90630025 lbu v1,37(v1) +80031c98: 00000000 nop +80031c9c: 00031a00 sll v1,v1,0x8 +80031ca0: 00831825 or v1,a0,v1 +80031ca4: 8fc40028 lw a0,40(s8) +80031ca8: 00000000 nop +80031cac: 90840021 lbu a0,33(a0) +80031cb0: 00000000 nop +80031cb4: 00641825 or v1,v1,a0 +80031cb8: ac430000 sw v1,0(v0) + linked_list[linked_list_pos++] = (tpoly4->b[1]<<16)|(tpoly4->g[1]<<8)|tpoly4->r[1]; +80031cbc: 3c028007 lui v0,0x8007 +80031cc0: 8c431cd4 lw v1,7380(v0) +80031cc4: 3c028007 lui v0,0x8007 +80031cc8: 8c421cd8 lw v0,7384(v0) +80031ccc: 00000000 nop +80031cd0: 24450001 addiu a1,v0,1 +80031cd4: 3c048007 lui a0,0x8007 +80031cd8: ac851cd8 sw a1,7384(a0) +80031cdc: 00021080 sll v0,v0,0x2 +80031ce0: 00621021 addu v0,v1,v0 +80031ce4: 8fc30028 lw v1,40(s8) +80031ce8: 00000000 nop +80031cec: 90630009 lbu v1,9(v1) +80031cf0: 00000000 nop +80031cf4: 00032400 sll a0,v1,0x10 +80031cf8: 8fc30028 lw v1,40(s8) +80031cfc: 00000000 nop +80031d00: 90630005 lbu v1,5(v1) +80031d04: 00000000 nop +80031d08: 00031a00 sll v1,v1,0x8 +80031d0c: 00831825 or v1,a0,v1 +80031d10: 8fc40028 lw a0,40(s8) +80031d14: 00000000 nop +80031d18: 90840001 lbu a0,1(a0) +80031d1c: 00000000 nop +80031d20: 00641825 or v1,v1,a0 +80031d24: ac430000 sw v1,0(v0) + linked_list[linked_list_pos++] = ((tpoly4->y[1]&0x7ff)<<16)|(tpoly4->x[1]&0x7ff); +80031d28: 3c028007 lui v0,0x8007 +80031d2c: 8c431cd4 lw v1,7380(v0) +80031d30: 3c028007 lui v0,0x8007 +80031d34: 8c421cd8 lw v0,7384(v0) +80031d38: 00000000 nop +80031d3c: 24450001 addiu a1,v0,1 +80031d40: 3c048007 lui a0,0x8007 +80031d44: ac851cd8 sw a1,7384(a0) +80031d48: 00021080 sll v0,v0,0x2 +80031d4c: 00621021 addu v0,v1,v0 +80031d50: 8fc30028 lw v1,40(s8) +80031d54: 00000000 nop +80031d58: 84630016 lh v1,22(v1) +80031d5c: 00000000 nop +80031d60: 3063ffff andi v1,v1,0xffff +80031d64: 306307ff andi v1,v1,0x7ff +80031d68: 00032400 sll a0,v1,0x10 +80031d6c: 8fc30028 lw v1,40(s8) +80031d70: 00000000 nop +80031d74: 8463000e lh v1,14(v1) +80031d78: 00000000 nop +80031d7c: 3063ffff andi v1,v1,0xffff +80031d80: 306307ff andi v1,v1,0x7ff +80031d84: 00831825 or v1,a0,v1 +80031d88: ac430000 sw v1,0(v0) + linked_list[linked_list_pos++] = (md << 16)|(tpoly4->v[1]<<8)|tpoly4->u[1]; +80031d8c: 3c028007 lui v0,0x8007 +80031d90: 8c431cd4 lw v1,7380(v0) +80031d94: 3c028007 lui v0,0x8007 +80031d98: 8c421cd8 lw v0,7384(v0) +80031d9c: 00000000 nop +80031da0: 24450001 addiu a1,v0,1 +80031da4: 3c048007 lui a0,0x8007 +80031da8: ac851cd8 sw a1,7384(a0) +80031dac: 00021080 sll v0,v0,0x2 +80031db0: 00621021 addu v0,v1,v0 +80031db4: 8fc30014 lw v1,20(s8) +80031db8: 00000000 nop +80031dbc: 00031c00 sll v1,v1,0x10 +80031dc0: 8fc40028 lw a0,40(s8) +80031dc4: 00000000 nop +80031dc8: 90840026 lbu a0,38(a0) +80031dcc: 00000000 nop +80031dd0: 00042200 sll a0,a0,0x8 +80031dd4: 00641825 or v1,v1,a0 +80031dd8: 8fc40028 lw a0,40(s8) +80031ddc: 00000000 nop +80031de0: 90840022 lbu a0,34(a0) +80031de4: 00000000 nop +80031de8: 00641825 or v1,v1,a0 +80031dec: ac430000 sw v1,0(v0) + linked_list[linked_list_pos++] = (tpoly4->b[1]<<16)|(tpoly4->g[1]<<8)|tpoly4->r[1]; +80031df0: 3c028007 lui v0,0x8007 +80031df4: 8c431cd4 lw v1,7380(v0) +80031df8: 3c028007 lui v0,0x8007 +80031dfc: 8c421cd8 lw v0,7384(v0) +80031e00: 00000000 nop +80031e04: 24450001 addiu a1,v0,1 +80031e08: 3c048007 lui a0,0x8007 +80031e0c: ac851cd8 sw a1,7384(a0) +80031e10: 00021080 sll v0,v0,0x2 +80031e14: 00621021 addu v0,v1,v0 +80031e18: 8fc30028 lw v1,40(s8) +80031e1c: 00000000 nop +80031e20: 90630009 lbu v1,9(v1) +80031e24: 00000000 nop +80031e28: 00032400 sll a0,v1,0x10 +80031e2c: 8fc30028 lw v1,40(s8) +80031e30: 00000000 nop +80031e34: 90630005 lbu v1,5(v1) +80031e38: 00000000 nop +80031e3c: 00031a00 sll v1,v1,0x8 +80031e40: 00831825 or v1,a0,v1 +80031e44: 8fc40028 lw a0,40(s8) +80031e48: 00000000 nop +80031e4c: 90840001 lbu a0,1(a0) +80031e50: 00000000 nop +80031e54: 00641825 or v1,v1,a0 +80031e58: ac430000 sw v1,0(v0) + linked_list[linked_list_pos++] = ((tpoly4->y[2]&0x7ff)<<16)|(tpoly4->x[2]&0x7ff); +80031e5c: 3c028007 lui v0,0x8007 +80031e60: 8c431cd4 lw v1,7380(v0) +80031e64: 3c028007 lui v0,0x8007 +80031e68: 8c421cd8 lw v0,7384(v0) +80031e6c: 00000000 nop +80031e70: 24450001 addiu a1,v0,1 +80031e74: 3c048007 lui a0,0x8007 +80031e78: ac851cd8 sw a1,7384(a0) +80031e7c: 00021080 sll v0,v0,0x2 +80031e80: 00621021 addu v0,v1,v0 +80031e84: 8fc30028 lw v1,40(s8) +80031e88: 00000000 nop +80031e8c: 84630018 lh v1,24(v1) +80031e90: 00000000 nop +80031e94: 3063ffff andi v1,v1,0xffff +80031e98: 306307ff andi v1,v1,0x7ff +80031e9c: 00032400 sll a0,v1,0x10 +80031ea0: 8fc30028 lw v1,40(s8) +80031ea4: 00000000 nop +80031ea8: 84630010 lh v1,16(v1) +80031eac: 00000000 nop +80031eb0: 3063ffff andi v1,v1,0xffff +80031eb4: 306307ff andi v1,v1,0x7ff +80031eb8: 00831825 or v1,a0,v1 +80031ebc: ac430000 sw v1,0(v0) + linked_list[linked_list_pos++] = (tpoly4->v[2]<<8)|tpoly4->u[2]; +80031ec0: 3c028007 lui v0,0x8007 +80031ec4: 8c431cd4 lw v1,7380(v0) +80031ec8: 3c028007 lui v0,0x8007 +80031ecc: 8c421cd8 lw v0,7384(v0) +80031ed0: 00000000 nop +80031ed4: 24450001 addiu a1,v0,1 +80031ed8: 3c048007 lui a0,0x8007 +80031edc: ac851cd8 sw a1,7384(a0) +80031ee0: 00021080 sll v0,v0,0x2 +80031ee4: 00621021 addu v0,v1,v0 +80031ee8: 8fc30028 lw v1,40(s8) +80031eec: 00000000 nop +80031ef0: 90630027 lbu v1,39(v1) +80031ef4: 00000000 nop +80031ef8: 00031a00 sll v1,v1,0x8 +80031efc: 8fc40028 lw a0,40(s8) +80031f00: 00000000 nop +80031f04: 90840023 lbu a0,35(a0) +80031f08: 00000000 nop +80031f0c: 00641825 or v1,v1,a0 +80031f10: ac430000 sw v1,0(v0) + linked_list[linked_list_pos++] = (tpoly4->b[2]<<16)|(tpoly4->g[2]<<8)|tpoly4->r[2]; +80031f14: 3c028007 lui v0,0x8007 +80031f18: 8c431cd4 lw v1,7380(v0) +80031f1c: 3c028007 lui v0,0x8007 +80031f20: 8c421cd8 lw v0,7384(v0) +80031f24: 00000000 nop +80031f28: 24450001 addiu a1,v0,1 +80031f2c: 3c048007 lui a0,0x8007 +80031f30: ac851cd8 sw a1,7384(a0) +80031f34: 00021080 sll v0,v0,0x2 +80031f38: 00621021 addu v0,v1,v0 +80031f3c: 8fc30028 lw v1,40(s8) +80031f40: 00000000 nop +80031f44: 9063000a lbu v1,10(v1) +80031f48: 00000000 nop +80031f4c: 00032400 sll a0,v1,0x10 +80031f50: 8fc30028 lw v1,40(s8) +80031f54: 00000000 nop +80031f58: 90630006 lbu v1,6(v1) +80031f5c: 00000000 nop +80031f60: 00031a00 sll v1,v1,0x8 +80031f64: 00831825 or v1,a0,v1 +80031f68: 8fc40028 lw a0,40(s8) +80031f6c: 00000000 nop +80031f70: 90840002 lbu a0,2(a0) +80031f74: 00000000 nop +80031f78: 00641825 or v1,v1,a0 +80031f7c: ac430000 sw v1,0(v0) + linked_list[linked_list_pos++] = ((tpoly4->y[3]&0x7ff)<<16)|(tpoly4->x[3]&0x7ff); +80031f80: 3c028007 lui v0,0x8007 +80031f84: 8c431cd4 lw v1,7380(v0) +80031f88: 3c028007 lui v0,0x8007 +80031f8c: 8c421cd8 lw v0,7384(v0) +80031f90: 00000000 nop +80031f94: 24450001 addiu a1,v0,1 +80031f98: 3c048007 lui a0,0x8007 +80031f9c: ac851cd8 sw a1,7384(a0) +80031fa0: 00021080 sll v0,v0,0x2 +80031fa4: 00621021 addu v0,v1,v0 +80031fa8: 8fc30028 lw v1,40(s8) +80031fac: 00000000 nop +80031fb0: 8463001a lh v1,26(v1) +80031fb4: 00000000 nop +80031fb8: 3063ffff andi v1,v1,0xffff +80031fbc: 306307ff andi v1,v1,0x7ff +80031fc0: 00032400 sll a0,v1,0x10 +80031fc4: 8fc30028 lw v1,40(s8) +80031fc8: 00000000 nop +80031fcc: 84630012 lh v1,18(v1) +80031fd0: 00000000 nop +80031fd4: 3063ffff andi v1,v1,0xffff +80031fd8: 306307ff andi v1,v1,0x7ff +80031fdc: 00831825 or v1,a0,v1 +80031fe0: ac430000 sw v1,0(v0) + linked_list[linked_list_pos++] = (tpoly4->v[3]<<8)|tpoly4->u[3]; +80031fe4: 3c028007 lui v0,0x8007 +80031fe8: 8c431cd4 lw v1,7380(v0) +80031fec: 3c028007 lui v0,0x8007 +80031ff0: 8c421cd8 lw v0,7384(v0) +80031ff4: 00000000 nop +80031ff8: 24450001 addiu a1,v0,1 +80031ffc: 3c048007 lui a0,0x8007 +80032000: ac851cd8 sw a1,7384(a0) +80032004: 00021080 sll v0,v0,0x2 +80032008: 00621021 addu v0,v1,v0 +8003200c: 8fc30028 lw v1,40(s8) +80032010: 00000000 nop +80032014: 90630028 lbu v1,40(v1) +80032018: 00000000 nop +8003201c: 00031a00 sll v1,v1,0x8 +80032020: 8fc40028 lw a0,40(s8) +80032024: 00000000 nop +80032028: 90840024 lbu a0,36(a0) +8003202c: 00000000 nop +80032030: 00641825 or v1,v1,a0 +80032034: ac430000 sw v1,0(v0) + + linked_list[orig_pos] |= ((unsigned int)&linked_list[linked_list_pos]) & 0xffffff; +80032038: 3c028007 lui v0,0x8007 +8003203c: 8c431cd4 lw v1,7380(v0) +80032040: 8fc20010 lw v0,16(s8) +80032044: 00000000 nop +80032048: 00021080 sll v0,v0,0x2 +8003204c: 00621021 addu v0,v1,v0 +80032050: 3c038007 lui v1,0x8007 +80032054: 8c641cd4 lw a0,7380(v1) +80032058: 8fc30010 lw v1,16(s8) +8003205c: 00000000 nop +80032060: 00031880 sll v1,v1,0x2 +80032064: 00831821 addu v1,a0,v1 +80032068: 8c640000 lw a0,0(v1) +8003206c: 3c038007 lui v1,0x8007 +80032070: 8c651cd4 lw a1,7380(v1) +80032074: 3c038007 lui v1,0x8007 +80032078: 8c631cd8 lw v1,7384(v1) +8003207c: 00000000 nop +80032080: 00031880 sll v1,v1,0x2 +80032084: 00a31821 addu v1,a1,v1 +80032088: 00602821 move a1,v1 +8003208c: 3c0300ff lui v1,0xff +80032090: 3463ffff ori v1,v1,0xffff +80032094: 00a31824 and v1,a1,v1 +80032098: 00831825 or v1,a0,v1 +8003209c: ac430000 sw v1,0(v0) +} +800320a0: 00000000 nop +800320a4: 03c0e821 move sp,s8 +800320a8: 8fbf0024 lw ra,36(sp) +800320ac: 8fbe0020 lw s8,32(sp) +800320b0: 27bd0028 addiu sp,sp,40 +800320b4: 03e00008 jr ra +800320b8: 00000000 nop + +800320bc <GsSortGTPoly3>: + +void GsSortGTPoly3(GsGTPoly3 *tpoly3) +{ +800320bc: 27bdffd8 addiu sp,sp,-40 +800320c0: afbf0024 sw ra,36(sp) +800320c4: afbe0020 sw s8,32(sp) +800320c8: 03a0f021 move s8,sp +800320cc: afc40028 sw a0,40(s8) + int orig_pos = linked_list_pos; +800320d0: 3c028007 lui v0,0x8007 +800320d4: 8c421cd8 lw v0,7384(v0) +800320d8: 00000000 nop +800320dc: afc20014 sw v0,20(s8) + int x; + unsigned char pkt = 0x34; +800320e0: 24020034 li v0,52 +800320e4: a3c2001c sb v0,28(s8) + unsigned int md; + + md = setup_attribs(tpoly3->tpage, tpoly3->attribute, &pkt); +800320e8: 8fc20028 lw v0,40(s8) +800320ec: 00000000 nop +800320f0: 9042001a lbu v0,26(v0) +800320f4: 00000000 nop +800320f8: 00402021 move a0,v0 +800320fc: 8fc20028 lw v0,40(s8) +80032100: 00000000 nop +80032104: 8c420024 lw v0,36(v0) +80032108: 27c3001c addiu v1,s8,28 +8003210c: 00603021 move a2,v1 +80032110: 00402821 move a1,v0 +80032114: 0c00bbd0 jal 8002ef40 <setup_attribs> +80032118: 00000000 nop +8003211c: afc20018 sw v0,24(s8) + + linked_list[linked_list_pos++] = 0x09000000; +80032120: 3c028007 lui v0,0x8007 +80032124: 8c431cd4 lw v1,7380(v0) +80032128: 3c028007 lui v0,0x8007 +8003212c: 8c421cd8 lw v0,7384(v0) +80032130: 00000000 nop +80032134: 24450001 addiu a1,v0,1 +80032138: 3c048007 lui a0,0x8007 +8003213c: ac851cd8 sw a1,7384(a0) +80032140: 00021080 sll v0,v0,0x2 +80032144: 00621021 addu v0,v1,v0 +80032148: 3c030900 lui v1,0x900 +8003214c: ac430000 sw v1,0(v0) + + for(x = 0; x < 3; x++) +80032150: afc00010 sw zero,16(s8) +80032154: 100000b0 b 80032418 <GsSortGTPoly3+0x35c> +80032158: 00000000 nop + { + linked_list[linked_list_pos++] = +8003215c: 3c028007 lui v0,0x8007 +80032160: 8c431cd4 lw v1,7380(v0) +80032164: 3c028007 lui v0,0x8007 +80032168: 8c421cd8 lw v0,7384(v0) +8003216c: 00000000 nop +80032170: 24450001 addiu a1,v0,1 +80032174: 3c048007 lui a0,0x8007 +80032178: ac851cd8 sw a1,7384(a0) +8003217c: 00021080 sll v0,v0,0x2 +80032180: 00621821 addu v1,v1,v0 + ((x==0)?(pkt<<24):0)|(tpoly3->b[x]<<16)|(tpoly3->g[x]<<8)|(tpoly3->r[x]); +80032184: 8fc20010 lw v0,16(s8) +80032188: 00000000 nop +8003218c: 14400006 bnez v0,800321a8 <GsSortGTPoly3+0xec> +80032190: 00000000 nop +80032194: 93c2001c lbu v0,28(s8) +80032198: 00000000 nop +8003219c: 00021600 sll v0,v0,0x18 +800321a0: 10000002 b 800321ac <GsSortGTPoly3+0xf0> +800321a4: 00000000 nop +800321a8: 00001021 move v0,zero +800321ac: 8fc50028 lw a1,40(s8) +800321b0: 8fc40010 lw a0,16(s8) +800321b4: 00000000 nop +800321b8: 00a42021 addu a0,a1,a0 +800321bc: 90840006 lbu a0,6(a0) +800321c0: 00000000 nop +800321c4: 00042400 sll a0,a0,0x10 +800321c8: 00442025 or a0,v0,a0 +800321cc: 8fc50028 lw a1,40(s8) +800321d0: 8fc20010 lw v0,16(s8) +800321d4: 00000000 nop +800321d8: 00a21021 addu v0,a1,v0 +800321dc: 90420003 lbu v0,3(v0) +800321e0: 00000000 nop +800321e4: 00021200 sll v0,v0,0x8 +800321e8: 00821025 or v0,a0,v0 +800321ec: 8fc50028 lw a1,40(s8) +800321f0: 8fc40010 lw a0,16(s8) +800321f4: 00000000 nop +800321f8: 00a42021 addu a0,a1,a0 +800321fc: 90840000 lbu a0,0(a0) +80032200: 00000000 nop +80032204: 00441025 or v0,v0,a0 + + linked_list[linked_list_pos++] = 0x09000000; + + for(x = 0; x < 3; x++) + { + linked_list[linked_list_pos++] = +80032208: ac620000 sw v0,0(v1) + ((x==0)?(pkt<<24):0)|(tpoly3->b[x]<<16)|(tpoly3->g[x]<<8)|(tpoly3->r[x]); + linked_list[linked_list_pos++] = ((tpoly3->y[x]&0x7ff)<<16)|(tpoly3->x[x]&0x7ff); +8003220c: 3c028007 lui v0,0x8007 +80032210: 8c431cd4 lw v1,7380(v0) +80032214: 3c028007 lui v0,0x8007 +80032218: 8c421cd8 lw v0,7384(v0) +8003221c: 00000000 nop +80032220: 24450001 addiu a1,v0,1 +80032224: 3c048007 lui a0,0x8007 +80032228: ac851cd8 sw a1,7384(a0) +8003222c: 00021080 sll v0,v0,0x2 +80032230: 00621821 addu v1,v1,v0 +80032234: 8fc40028 lw a0,40(s8) +80032238: 8fc20010 lw v0,16(s8) +8003223c: 00000000 nop +80032240: 24420008 addiu v0,v0,8 +80032244: 00021040 sll v0,v0,0x1 +80032248: 00821021 addu v0,a0,v0 +8003224c: 84420000 lh v0,0(v0) +80032250: 00000000 nop +80032254: 3042ffff andi v0,v0,0xffff +80032258: 304207ff andi v0,v0,0x7ff +8003225c: 00022400 sll a0,v0,0x10 +80032260: 8fc50028 lw a1,40(s8) +80032264: 8fc20010 lw v0,16(s8) +80032268: 00000000 nop +8003226c: 24420004 addiu v0,v0,4 +80032270: 00021040 sll v0,v0,0x1 +80032274: 00a21021 addu v0,a1,v0 +80032278: 84420002 lh v0,2(v0) +8003227c: 00000000 nop +80032280: 3042ffff andi v0,v0,0xffff +80032284: 304207ff andi v0,v0,0x7ff +80032288: 00821025 or v0,a0,v0 +8003228c: ac620000 sw v0,0(v1) + linked_list[linked_list_pos] = (tpoly3->u[x]<<8)|tpoly3->v[x]; +80032290: 3c028007 lui v0,0x8007 +80032294: 8c431cd4 lw v1,7380(v0) +80032298: 3c028007 lui v0,0x8007 +8003229c: 8c421cd8 lw v0,7384(v0) +800322a0: 00000000 nop +800322a4: 00021080 sll v0,v0,0x2 +800322a8: 00621021 addu v0,v1,v0 +800322ac: 8fc40028 lw a0,40(s8) +800322b0: 8fc30010 lw v1,16(s8) +800322b4: 00000000 nop +800322b8: 00831821 addu v1,a0,v1 +800322bc: 9063001b lbu v1,27(v1) +800322c0: 00000000 nop +800322c4: 00031a00 sll v1,v1,0x8 +800322c8: 8fc50028 lw a1,40(s8) +800322cc: 8fc40010 lw a0,16(s8) +800322d0: 00000000 nop +800322d4: 00a42021 addu a0,a1,a0 +800322d8: 9084001e lbu a0,30(a0) +800322dc: 00000000 nop +800322e0: 00641825 or v1,v1,a0 +800322e4: ac430000 sw v1,0(v0) + + switch(x) +800322e8: 8fc20010 lw v0,16(s8) +800322ec: 00000000 nop +800322f0: 10400006 beqz v0,8003230c <GsSortGTPoly3+0x250> +800322f4: 00000000 nop +800322f8: 24030001 li v1,1 +800322fc: 10430026 beq v0,v1,80032398 <GsSortGTPoly3+0x2dc> +80032300: 00000000 nop +80032304: 1000003a b 800323f0 <GsSortGTPoly3+0x334> +80032308: 00000000 nop + { + case 0: + linked_list[linked_list_pos++] |= +8003230c: 3c028007 lui v0,0x8007 +80032310: 8c441cd4 lw a0,7380(v0) +80032314: 3c028007 lui v0,0x8007 +80032318: 8c421cd8 lw v0,7384(v0) +8003231c: 00000000 nop +80032320: 24450001 addiu a1,v0,1 +80032324: 3c038007 lui v1,0x8007 +80032328: ac651cd8 sw a1,7384(v1) +8003232c: 00021880 sll v1,v0,0x2 +80032330: 00831821 addu v1,a0,v1 +80032334: 3c048007 lui a0,0x8007 +80032338: 8c841cd4 lw a0,7380(a0) +8003233c: 00021080 sll v0,v0,0x2 +80032340: 00821021 addu v0,a0,v0 +80032344: 8c420000 lw v0,0(v0) + get_clutid(tpoly3->cx, tpoly3->cy) << 16; +80032348: 8fc40028 lw a0,40(s8) +8003234c: 00000000 nop +80032350: 84840016 lh a0,22(a0) +80032354: 00000000 nop +80032358: 3084ffff andi a0,a0,0xffff +8003235c: 308403ff andi a0,a0,0x3ff +80032360: 00042903 sra a1,a0,0x4 +80032364: 8fc40028 lw a0,40(s8) +80032368: 00000000 nop +8003236c: 84840018 lh a0,24(a0) +80032370: 00000000 nop +80032374: 3084ffff andi a0,a0,0xffff +80032378: 308401ff andi a0,a0,0x1ff +8003237c: 00042180 sll a0,a0,0x6 +80032380: 00a42025 or a0,a1,a0 +80032384: 00042400 sll a0,a0,0x10 + linked_list[linked_list_pos] = (tpoly3->u[x]<<8)|tpoly3->v[x]; + + switch(x) + { + case 0: + linked_list[linked_list_pos++] |= +80032388: 00441025 or v0,v0,a0 +8003238c: ac620000 sw v0,0(v1) + get_clutid(tpoly3->cx, tpoly3->cy) << 16; + break; +80032390: 1000001d b 80032408 <GsSortGTPoly3+0x34c> +80032394: 00000000 nop + case 1: + linked_list[linked_list_pos++] |= +80032398: 3c028007 lui v0,0x8007 +8003239c: 8c441cd4 lw a0,7380(v0) +800323a0: 3c028007 lui v0,0x8007 +800323a4: 8c421cd8 lw v0,7384(v0) +800323a8: 00000000 nop +800323ac: 24450001 addiu a1,v0,1 +800323b0: 3c038007 lui v1,0x8007 +800323b4: ac651cd8 sw a1,7384(v1) +800323b8: 00021880 sll v1,v0,0x2 +800323bc: 00831821 addu v1,a0,v1 +800323c0: 3c048007 lui a0,0x8007 +800323c4: 8c841cd4 lw a0,7380(a0) +800323c8: 00021080 sll v0,v0,0x2 +800323cc: 00821021 addu v0,a0,v0 +800323d0: 8c440000 lw a0,0(v0) + md << 16; +800323d4: 8fc20018 lw v0,24(s8) +800323d8: 00000000 nop +800323dc: 00021400 sll v0,v0,0x10 + case 0: + linked_list[linked_list_pos++] |= + get_clutid(tpoly3->cx, tpoly3->cy) << 16; + break; + case 1: + linked_list[linked_list_pos++] |= +800323e0: 00821025 or v0,a0,v0 +800323e4: ac620000 sw v0,0(v1) + md << 16; + break; +800323e8: 10000007 b 80032408 <GsSortGTPoly3+0x34c> +800323ec: 00000000 nop + default: + linked_list_pos++; +800323f0: 3c028007 lui v0,0x8007 +800323f4: 8c421cd8 lw v0,7384(v0) +800323f8: 00000000 nop +800323fc: 24430001 addiu v1,v0,1 +80032400: 3c028007 lui v0,0x8007 +80032404: ac431cd8 sw v1,7384(v0) + + md = setup_attribs(tpoly3->tpage, tpoly3->attribute, &pkt); + + linked_list[linked_list_pos++] = 0x09000000; + + for(x = 0; x < 3; x++) +80032408: 8fc20010 lw v0,16(s8) +8003240c: 00000000 nop +80032410: 24420001 addiu v0,v0,1 +80032414: afc20010 sw v0,16(s8) +80032418: 8fc20010 lw v0,16(s8) +8003241c: 00000000 nop +80032420: 28420003 slti v0,v0,3 +80032424: 1440ff4d bnez v0,8003215c <GsSortGTPoly3+0xa0> +80032428: 00000000 nop + default: + linked_list_pos++; + } + } + + linked_list[orig_pos] |= ((unsigned int)&linked_list[linked_list_pos]) & 0xffffff; +8003242c: 3c028007 lui v0,0x8007 +80032430: 8c431cd4 lw v1,7380(v0) +80032434: 8fc20014 lw v0,20(s8) +80032438: 00000000 nop +8003243c: 00021080 sll v0,v0,0x2 +80032440: 00621021 addu v0,v1,v0 +80032444: 3c038007 lui v1,0x8007 +80032448: 8c641cd4 lw a0,7380(v1) +8003244c: 8fc30014 lw v1,20(s8) +80032450: 00000000 nop +80032454: 00031880 sll v1,v1,0x2 +80032458: 00831821 addu v1,a0,v1 +8003245c: 8c640000 lw a0,0(v1) +80032460: 3c038007 lui v1,0x8007 +80032464: 8c651cd4 lw a1,7380(v1) +80032468: 3c038007 lui v1,0x8007 +8003246c: 8c631cd8 lw v1,7384(v1) +80032470: 00000000 nop +80032474: 00031880 sll v1,v1,0x2 +80032478: 00a31821 addu v1,a1,v1 +8003247c: 00602821 move a1,v1 +80032480: 3c0300ff lui v1,0xff +80032484: 3463ffff ori v1,v1,0xffff +80032488: 00a31824 and v1,a1,v1 +8003248c: 00831825 or v1,a0,v1 +80032490: ac430000 sw v1,0(v0) +} +80032494: 00000000 nop +80032498: 03c0e821 move sp,s8 +8003249c: 8fbf0024 lw ra,36(sp) +800324a0: 8fbe0020 lw s8,32(sp) +800324a4: 27bd0028 addiu sp,sp,40 +800324a8: 03e00008 jr ra +800324ac: 00000000 nop + +800324b0 <QueryPAD>: + +unsigned char readpad_vibrations[4][2]; +int querypad_rxrdy = 1; + +void QueryPAD(int pad_n, unsigned char *in, unsigned char *out, int len) +{ +800324b0: 27bdffe0 addiu sp,sp,-32 +800324b4: afbe001c sw s8,28(sp) +800324b8: 03a0f021 move s8,sp +800324bc: afc40020 sw a0,32(s8) +800324c0: afc50024 sw a1,36(s8) +800324c4: afc60028 sw a2,40(s8) +800324c8: afc7002c sw a3,44(s8) + int x; + int y; + int i; + unsigned char TempData; + int EmuFlag = 0; +800324cc: afc0000c sw zero,12(s8) + + PADSIO_MODE(0) = 0xD; +800324d0: 3c021f80 lui v0,0x1f80 +800324d4: 34421048 ori v0,v0,0x1048 +800324d8: 2403000d li v1,13 +800324dc: a4430000 sh v1,0(v0) + PADSIO_BAUD(0) = 0x88; +800324e0: 3c021f80 lui v0,0x1f80 +800324e4: 3442104e ori v0,v0,0x104e +800324e8: 24030088 li v1,136 +800324ec: a4430000 sh v1,0(v0) + + if(pad_n == 1) PADSIO_CTRL(0) = 0x3003; else PADSIO_CTRL(0) = 0x1003; +800324f0: 8fc30020 lw v1,32(s8) +800324f4: 24020001 li v0,1 +800324f8: 14620007 bne v1,v0,80032518 <QueryPAD+0x68> +800324fc: 00000000 nop +80032500: 3c021f80 lui v0,0x1f80 +80032504: 3442104a ori v0,v0,0x104a +80032508: 24033003 li v1,12291 +8003250c: a4430000 sh v1,0(v0) +80032510: 10000005 b 80032528 <QueryPAD+0x78> +80032514: 00000000 nop +80032518: 3c021f80 lui v0,0x1f80 +8003251c: 3442104a ori v0,v0,0x104a +80032520: 24031003 li v1,4099 +80032524: a4430000 sh v1,0(v0) + + /*Get the initial command (usually 0x01 or 0x81)*/ + TempData = *in; +80032528: 8fc20024 lw v0,36(s8) +8003252c: 00000000 nop +80032530: 90420000 lbu v0,0(v0) +80032534: 00000000 nop +80032538: a3c20010 sb v0,16(s8) + + for(y=0;y<400;y++); /*Slight delay before first transmission*/ +8003253c: afc00004 sw zero,4(s8) +80032540: 10000005 b 80032558 <QueryPAD+0xa8> +80032544: 00000000 nop +80032548: 8fc20004 lw v0,4(s8) +8003254c: 00000000 nop +80032550: 24420001 addiu v0,v0,1 +80032554: afc20004 sw v0,4(s8) +80032558: 8fc20004 lw v0,4(s8) +8003255c: 00000000 nop +80032560: 28420190 slti v0,v0,400 +80032564: 1440fff8 bnez v0,80032548 <QueryPAD+0x98> +80032568: 00000000 nop + + for(x = 0; x < len; x++) +8003256c: afc00000 sw zero,0(s8) +80032570: 1000007d b 80032768 <QueryPAD+0x2b8> +80032574: 00000000 nop + { + /*Must use timeouts or else program hangs on emulators*/ + if(!EmuFlag) +80032578: 8fc2000c lw v0,12(s8) +8003257c: 00000000 nop +80032580: 14400017 bnez v0,800325e0 <QueryPAD+0x130> +80032584: 00000000 nop + { + for(y=0;y<1000;y++) +80032588: afc00004 sw zero,4(s8) +8003258c: 1000000c b 800325c0 <QueryPAD+0x110> +80032590: 00000000 nop + { + /*Wait for TX ready*/ + if(PADSIO_STATUS(0) & 4)break; +80032594: 3c021f80 lui v0,0x1f80 +80032598: 34421044 ori v0,v0,0x1044 +8003259c: 94420000 lhu v0,0(v0) +800325a0: 00000000 nop +800325a4: 30420004 andi v0,v0,0x4 +800325a8: 1440000c bnez v0,800325dc <QueryPAD+0x12c> +800325ac: 00000000 nop + for(x = 0; x < len; x++) + { + /*Must use timeouts or else program hangs on emulators*/ + if(!EmuFlag) + { + for(y=0;y<1000;y++) +800325b0: 8fc20004 lw v0,4(s8) +800325b4: 00000000 nop +800325b8: 24420001 addiu v0,v0,1 +800325bc: afc20004 sw v0,4(s8) +800325c0: 8fc20004 lw v0,4(s8) +800325c4: 00000000 nop +800325c8: 284203e8 slti v0,v0,1000 +800325cc: 1440fff1 bnez v0,80032594 <QueryPAD+0xe4> +800325d0: 00000000 nop +800325d4: 10000002 b 800325e0 <QueryPAD+0x130> +800325d8: 00000000 nop + { + /*Wait for TX ready*/ + if(PADSIO_STATUS(0) & 4)break; +800325dc: 00000000 nop + } + } + + PADSIO_DATA(0) = *in; +800325e0: 3c021f80 lui v0,0x1f80 +800325e4: 34421040 ori v0,v0,0x1040 +800325e8: 8fc30024 lw v1,36(s8) +800325ec: 00000000 nop +800325f0: 90630000 lbu v1,0(v1) +800325f4: 00000000 nop +800325f8: a0430000 sb v1,0(v0) + in++; +800325fc: 8fc20024 lw v0,36(s8) +80032600: 00000000 nop +80032604: 24420001 addiu v0,v0,1 +80032608: afc20024 sw v0,36(s8) + + if(!EmuFlag) +8003260c: 8fc2000c lw v0,12(s8) +80032610: 00000000 nop +80032614: 14400035 bnez v0,800326ec <QueryPAD+0x23c> +80032618: 00000000 nop + { + /*Check ACK only for Memory Cards*/ + if(TempData == 0x81 || x == 0) +8003261c: 93c30010 lbu v1,16(s8) +80032620: 24020081 li v0,129 +80032624: 10620005 beq v1,v0,8003263c <QueryPAD+0x18c> +80032628: 00000000 nop +8003262c: 8fc20000 lw v0,0(s8) +80032630: 00000000 nop +80032634: 14400017 bnez v0,80032694 <QueryPAD+0x1e4> +80032638: 00000000 nop + { + for(y=0;y<2000;y++) +8003263c: afc00004 sw zero,4(s8) +80032640: 1000000c b 80032674 <QueryPAD+0x1c4> +80032644: 00000000 nop + { + /*Check for ACK signal*/ + if(PADSIO_STATUS(0) & 128)break; +80032648: 3c021f80 lui v0,0x1f80 +8003264c: 34421044 ori v0,v0,0x1044 +80032650: 94420000 lhu v0,0(v0) +80032654: 00000000 nop +80032658: 30420080 andi v0,v0,0x80 +8003265c: 1440000c bnez v0,80032690 <QueryPAD+0x1e0> +80032660: 00000000 nop + if(!EmuFlag) + { + /*Check ACK only for Memory Cards*/ + if(TempData == 0x81 || x == 0) + { + for(y=0;y<2000;y++) +80032664: 8fc20004 lw v0,4(s8) +80032668: 00000000 nop +8003266c: 24420001 addiu v0,v0,1 +80032670: afc20004 sw v0,4(s8) +80032674: 8fc20004 lw v0,4(s8) +80032678: 00000000 nop +8003267c: 284207d0 slti v0,v0,2000 +80032680: 1440fff1 bnez v0,80032648 <QueryPAD+0x198> +80032684: 00000000 nop +80032688: 10000002 b 80032694 <QueryPAD+0x1e4> +8003268c: 00000000 nop + { + /*Check for ACK signal*/ + if(PADSIO_STATUS(0) & 128)break; +80032690: 00000000 nop + } + } + + for(i=0;i<100;i++) +80032694: afc00008 sw zero,8(s8) +80032698: 1000000c b 800326cc <QueryPAD+0x21c> +8003269c: 00000000 nop + { + /*Read RX status flag, required for Xebra*/ + if(PADSIO_STATUS(0) & 2)break; +800326a0: 3c021f80 lui v0,0x1f80 +800326a4: 34421044 ori v0,v0,0x1044 +800326a8: 94420000 lhu v0,0(v0) +800326ac: 00000000 nop +800326b0: 30420002 andi v0,v0,0x2 +800326b4: 1440000c bnez v0,800326e8 <QueryPAD+0x238> +800326b8: 00000000 nop + /*Check for ACK signal*/ + if(PADSIO_STATUS(0) & 128)break; + } + } + + for(i=0;i<100;i++) +800326bc: 8fc20008 lw v0,8(s8) +800326c0: 00000000 nop +800326c4: 24420001 addiu v0,v0,1 +800326c8: afc20008 sw v0,8(s8) +800326cc: 8fc20008 lw v0,8(s8) +800326d0: 00000000 nop +800326d4: 28420064 slti v0,v0,100 +800326d8: 1440fff1 bnez v0,800326a0 <QueryPAD+0x1f0> +800326dc: 00000000 nop +800326e0: 10000002 b 800326ec <QueryPAD+0x23c> +800326e4: 00000000 nop + { + /*Read RX status flag, required for Xebra*/ + if(PADSIO_STATUS(0) & 2)break; +800326e8: 00000000 nop + } + } + + *out = PADSIO_DATA(0); +800326ec: 3c021f80 lui v0,0x1f80 +800326f0: 34421040 ori v0,v0,0x1040 +800326f4: 90430000 lbu v1,0(v0) +800326f8: 8fc20028 lw v0,40(s8) +800326fc: 00000000 nop +80032700: a0430000 sb v1,0(v0) + + /*This is emulator, valid data was received without ACK, ePSXe and PCSX*/ + if((x == 0) && (y > 1900) && (*out != 0xFF)) +80032704: 8fc20000 lw v0,0(s8) +80032708: 00000000 nop +8003270c: 1440000e bnez v0,80032748 <QueryPAD+0x298> +80032710: 00000000 nop +80032714: 8fc20004 lw v0,4(s8) +80032718: 00000000 nop +8003271c: 2842076d slti v0,v0,1901 +80032720: 14400009 bnez v0,80032748 <QueryPAD+0x298> +80032724: 00000000 nop +80032728: 8fc20028 lw v0,40(s8) +8003272c: 00000000 nop +80032730: 90430000 lbu v1,0(v0) +80032734: 240200ff li v0,255 +80032738: 10620003 beq v1,v0,80032748 <QueryPAD+0x298> +8003273c: 00000000 nop + { + EmuFlag = 1; +80032740: 24020001 li v0,1 +80032744: afc2000c sw v0,12(s8) + } + + out++; +80032748: 8fc20028 lw v0,40(s8) +8003274c: 00000000 nop +80032750: 24420001 addiu v0,v0,1 +80032754: afc20028 sw v0,40(s8) + /*Get the initial command (usually 0x01 or 0x81)*/ + TempData = *in; + + for(y=0;y<400;y++); /*Slight delay before first transmission*/ + + for(x = 0; x < len; x++) +80032758: 8fc20000 lw v0,0(s8) +8003275c: 00000000 nop +80032760: 24420001 addiu v0,v0,1 +80032764: afc20000 sw v0,0(s8) +80032768: 8fc30000 lw v1,0(s8) +8003276c: 8fc2002c lw v0,44(s8) +80032770: 00000000 nop +80032774: 0062102a slt v0,v1,v0 +80032778: 1440ff7f bnez v0,80032578 <QueryPAD+0xc8> +8003277c: 00000000 nop + } + + out++; + } + + PADSIO_CTRL(0) = 0; +80032780: 3c021f80 lui v0,0x1f80 +80032784: 3442104a ori v0,v0,0x104a +80032788: a4400000 sh zero,0(v0) +} +8003278c: 00000000 nop +80032790: 03c0e821 move sp,s8 +80032794: 8fbe001c lw s8,28(sp) +80032798: 27bd0020 addiu sp,sp,32 +8003279c: 03e00008 jr ra +800327a0: 00000000 nop + +800327a4 <pad_read_raw>: + +void pad_read_raw(int pad_n, unsigned char *arr) +{ +800327a4: 27bdffd0 addiu sp,sp,-48 +800327a8: afbf002c sw ra,44(sp) +800327ac: afbe0028 sw s8,40(sp) +800327b0: 03a0f021 move s8,sp +800327b4: afc40030 sw a0,48(s8) +800327b8: afc50034 sw a1,52(s8) + // arr must be at least 16 bytes long... + + unsigned char pad_cmd[PAD_READ_RAW_SIZE] = {1,0x42,0,0,0}; +800327bc: afc00010 sw zero,16(s8) +800327c0: afc00014 sw zero,20(s8) +800327c4: afc00018 sw zero,24(s8) +800327c8: afc0001c sw zero,28(s8) +800327cc: afc00020 sw zero,32(s8) +800327d0: a3c00024 sb zero,36(s8) +800327d4: 24020001 li v0,1 +800327d8: a3c20010 sb v0,16(s8) +800327dc: 24020042 li v0,66 +800327e0: a3c20011 sb v0,17(s8) + + pad_cmd[3] = readpad_vibrations[pad_n][0]; +800327e4: 3c028007 lui v0,0x8007 +800327e8: 8fc30030 lw v1,48(s8) +800327ec: 00000000 nop +800327f0: 00031840 sll v1,v1,0x1 +800327f4: 24421d60 addiu v0,v0,7520 +800327f8: 00621021 addu v0,v1,v0 +800327fc: 90420000 lbu v0,0(v0) +80032800: 00000000 nop +80032804: a3c20013 sb v0,19(s8) + pad_cmd[4] = readpad_vibrations[pad_n][1]; +80032808: 3c028007 lui v0,0x8007 +8003280c: 8fc30030 lw v1,48(s8) +80032810: 00000000 nop +80032814: 00031840 sll v1,v1,0x1 +80032818: 24421d60 addiu v0,v0,7520 +8003281c: 00621021 addu v0,v1,v0 +80032820: 90420001 lbu v0,1(v0) +80032824: 00000000 nop +80032828: a3c20014 sb v0,20(s8) + + QueryPAD(pad_n, pad_cmd, arr, sizeof(pad_cmd)); +8003282c: 24070015 li a3,21 +80032830: 8fc60034 lw a2,52(s8) +80032834: 27c20010 addiu v0,s8,16 +80032838: 00402821 move a1,v0 +8003283c: 8fc40030 lw a0,48(s8) +80032840: 0c00c92c jal 800324b0 <QueryPAD> +80032844: 00000000 nop +} +80032848: 00000000 nop +8003284c: 03c0e821 move sp,s8 +80032850: 8fbf002c lw ra,44(sp) +80032854: 8fbe0028 lw s8,40(sp) +80032858: 27bd0030 addiu sp,sp,48 +8003285c: 03e00008 jr ra +80032860: 00000000 nop + +80032864 <pad_escape_mode>: + +void pad_escape_mode(int pad_n, int enable) +{ +80032864: 27bdffe0 addiu sp,sp,-32 +80032868: afbf001c sw ra,28(sp) +8003286c: afbe0018 sw s8,24(sp) +80032870: 03a0f021 move s8,sp +80032874: afc40020 sw a0,32(s8) +80032878: afc50024 sw a1,36(s8) + unsigned char pad_cmd[] = {1,0x43,0,enable?1:0,0}; +8003287c: 24020001 li v0,1 +80032880: a3c20010 sb v0,16(s8) +80032884: 24020043 li v0,67 +80032888: a3c20011 sb v0,17(s8) +8003288c: a3c00012 sb zero,18(s8) +80032890: 8fc20024 lw v0,36(s8) +80032894: 00000000 nop +80032898: 0002102b sltu v0,zero,v0 +8003289c: 304200ff andi v0,v0,0xff +800328a0: a3c20013 sb v0,19(s8) +800328a4: a3c00014 sb zero,20(s8) + + QueryPAD(pad_n, pad_cmd, NULL, sizeof(pad_cmd)); +800328a8: 24070005 li a3,5 +800328ac: 00003021 move a2,zero +800328b0: 27c20010 addiu v0,s8,16 +800328b4: 00402821 move a1,v0 +800328b8: 8fc40020 lw a0,32(s8) +800328bc: 0c00c92c jal 800324b0 <QueryPAD> +800328c0: 00000000 nop +} +800328c4: 00000000 nop +800328c8: 03c0e821 move sp,s8 +800328cc: 8fbf001c lw ra,28(sp) +800328d0: 8fbe0018 lw s8,24(sp) +800328d4: 27bd0020 addiu sp,sp,32 +800328d8: 03e00008 jr ra +800328dc: 00000000 nop + +800328e0 <pad_enable_vibration>: + +void pad_enable_vibration(int pad_n) +{ +800328e0: 27bdffd8 addiu sp,sp,-40 +800328e4: afbf0024 sw ra,36(sp) +800328e8: afbe0020 sw s8,32(sp) +800328ec: 03a0f021 move s8,sp +800328f0: afc40028 sw a0,40(s8) + unsigned char pad_cmd[] = {1, 0x4d, 0, 0, 1, 0xff, 0xff, 0xff, 0xff}; +800328f4: 3c028004 lui v0,0x8004 +800328f8: 2443fda0 addiu v1,v0,-608 +800328fc: 88630003 lwl v1,3(v1) +80032900: 00000000 nop +80032904: 9843fda0 lwr v1,-608(v0) +80032908: 00000000 nop +8003290c: 00602021 move a0,v1 +80032910: 2443fda0 addiu v1,v0,-608 +80032914: 88650007 lwl a1,7(v1) +80032918: 00000000 nop +8003291c: 98650004 lwr a1,4(v1) +80032920: 00000000 nop +80032924: 00a01821 move v1,a1 +80032928: afc40010 sw a0,16(s8) +8003292c: afc30014 sw v1,20(s8) +80032930: 2442fda0 addiu v0,v0,-608 +80032934: 90420008 lbu v0,8(v0) +80032938: 00000000 nop +8003293c: a3c20018 sb v0,24(s8) + + pad_escape_mode(pad_n, 1); // Enter escape / configuration mode +80032940: 24050001 li a1,1 +80032944: 8fc40028 lw a0,40(s8) +80032948: 0c00ca19 jal 80032864 <pad_escape_mode> +8003294c: 00000000 nop + QueryPAD(pad_n, pad_cmd, NULL, sizeof(pad_cmd)); +80032950: 24070009 li a3,9 +80032954: 00003021 move a2,zero +80032958: 27c20010 addiu v0,s8,16 +8003295c: 00402821 move a1,v0 +80032960: 8fc40028 lw a0,40(s8) +80032964: 0c00c92c jal 800324b0 <QueryPAD> +80032968: 00000000 nop + pad_escape_mode(pad_n, 0); // Exit escape / configuration mode +8003296c: 00002821 move a1,zero +80032970: 8fc40028 lw a0,40(s8) +80032974: 0c00ca19 jal 80032864 <pad_escape_mode> +80032978: 00000000 nop +} +8003297c: 00000000 nop +80032980: 03c0e821 move sp,s8 +80032984: 8fbf0024 lw ra,36(sp) +80032988: 8fbe0020 lw s8,32(sp) +8003298c: 27bd0028 addiu sp,sp,40 +80032990: 03e00008 jr ra +80032994: 00000000 nop + +80032998 <pad_set_vibration>: + +void pad_set_vibration(int pad_n, unsigned char small, unsigned char big) +{ +80032998: 27bdfff8 addiu sp,sp,-8 +8003299c: afbe0004 sw s8,4(sp) +800329a0: 03a0f021 move s8,sp +800329a4: afc40008 sw a0,8(s8) +800329a8: 00a01821 move v1,a1 +800329ac: 00c01021 move v0,a2 +800329b0: a3c3000c sb v1,12(s8) +800329b4: a3c20010 sb v0,16(s8) + if(pad_n >= 0 && pad_n <= 3) +800329b8: 8fc20008 lw v0,8(s8) +800329bc: 00000000 nop +800329c0: 04400018 bltz v0,80032a24 <pad_set_vibration+0x8c> +800329c4: 00000000 nop +800329c8: 8fc20008 lw v0,8(s8) +800329cc: 00000000 nop +800329d0: 28420004 slti v0,v0,4 +800329d4: 10400013 beqz v0,80032a24 <pad_set_vibration+0x8c> +800329d8: 00000000 nop + { + readpad_vibrations[pad_n][0] = small; +800329dc: 3c028007 lui v0,0x8007 +800329e0: 8fc30008 lw v1,8(s8) +800329e4: 00000000 nop +800329e8: 00031840 sll v1,v1,0x1 +800329ec: 24421d60 addiu v0,v0,7520 +800329f0: 00621021 addu v0,v1,v0 +800329f4: 93c3000c lbu v1,12(s8) +800329f8: 00000000 nop +800329fc: a0430000 sb v1,0(v0) + readpad_vibrations[pad_n][1] = big; +80032a00: 3c028007 lui v0,0x8007 +80032a04: 8fc30008 lw v1,8(s8) +80032a08: 00000000 nop +80032a0c: 00031840 sll v1,v1,0x1 +80032a10: 24421d60 addiu v0,v0,7520 +80032a14: 00621021 addu v0,v1,v0 +80032a18: 93c30010 lbu v1,16(s8) +80032a1c: 00000000 nop +80032a20: a0430001 sb v1,1(v0) + } +} +80032a24: 00000000 nop +80032a28: 03c0e821 move sp,s8 +80032a2c: 8fbe0004 lw s8,4(sp) +80032a30: 27bd0008 addiu sp,sp,8 +80032a34: 03e00008 jr ra +80032a38: 00000000 nop + +80032a3c <McReadSector>: + MEMCARD_READ_CMD = 'R', + MEMCARD_WRITE_CMD = 'W' +}; + +unsigned char McReadSector(int card_slot, int sector, unsigned char *buffer) +{ +80032a3c: 27bdffe8 addiu sp,sp,-24 +80032a40: afbf0014 sw ra,20(sp) +80032a44: afbe0010 sw s8,16(sp) +80032a48: 03a0f021 move s8,sp +80032a4c: afc40018 sw a0,24(s8) +80032a50: afc5001c sw a1,28(s8) +80032a54: afc60020 sw a2,32(s8) + memset(&card_cmd[0], 0, 140); +80032a58: 2406008c li a2,140 +80032a5c: 00002821 move a1,zero +80032a60: 3c028007 lui v0,0x8007 +80032a64: 24448b60 addiu a0,v0,-29856 +80032a68: 0c00d7ab jal 80035eac <memset> +80032a6c: 00000000 nop + + card_cmd[0] = MEMCARD_ACCESS_CMD; /*MC access*/ +80032a70: 3c028007 lui v0,0x8007 +80032a74: 2403ff81 li v1,-127 +80032a78: a0438b60 sb v1,-29856(v0) + card_cmd[1] = MEMCARD_READ_CMD; /*Read command*/ +80032a7c: 3c028007 lui v0,0x8007 +80032a80: 24428b60 addiu v0,v0,-29856 +80032a84: 24030052 li v1,82 +80032a88: a0430001 sb v1,1(v0) + + /*Copy frame number to command*/ + card_cmd[4] = sector >> 8; /*Frame MSB*/ +80032a8c: 8fc2001c lw v0,28(s8) +80032a90: 00000000 nop +80032a94: 00021203 sra v0,v0,0x8 +80032a98: 304300ff andi v1,v0,0xff +80032a9c: 3c028007 lui v0,0x8007 +80032aa0: 24428b60 addiu v0,v0,-29856 +80032aa4: a0430004 sb v1,4(v0) + card_cmd[5] = sector & 0xFF; /*Frame LSB*/ +80032aa8: 8fc2001c lw v0,28(s8) +80032aac: 00000000 nop +80032ab0: 304300ff andi v1,v0,0xff +80032ab4: 3c028007 lui v0,0x8007 +80032ab8: 24428b60 addiu v0,v0,-29856 +80032abc: a0430005 sb v1,5(v0) + + memset(arr,0,140); +80032ac0: 2406008c li a2,140 +80032ac4: 00002821 move a1,zero +80032ac8: 3c028007 lui v0,0x8007 +80032acc: 24448bec addiu a0,v0,-29716 +80032ad0: 0c00d7ab jal 80035eac <memset> +80032ad4: 00000000 nop + QueryPAD(card_slot, card_cmd, arr, sizeof(card_cmd)); +80032ad8: 2407008c li a3,140 +80032adc: 3c028007 lui v0,0x8007 +80032ae0: 24468bec addiu a2,v0,-29716 +80032ae4: 3c028007 lui v0,0x8007 +80032ae8: 24458b60 addiu a1,v0,-29856 +80032aec: 8fc40018 lw a0,24(s8) +80032af0: 0c00c92c jal 800324b0 <QueryPAD> +80032af4: 00000000 nop + + /*Copy received frame data*/ + memcpy(buffer, &arr[10], 128); +80032af8: 24060080 li a2,128 +80032afc: 3c028007 lui v0,0x8007 +80032b00: 24458bf6 addiu a1,v0,-29706 +80032b04: 8fc40020 lw a0,32(s8) +80032b08: 0c00d75e jal 80035d78 <memcpy> +80032b0c: 00000000 nop + + // Positions 6 and 7 belong to ACK's + // They always should be 0x5C and 0x5D, respectively + // On the other hand, positions 8 and 9 return MSB and LSB sectors. + + if(arr[6] != 0x5C) +80032b10: 3c028007 lui v0,0x8007 +80032b14: 24428bec addiu v0,v0,-29716 +80032b18: 90430006 lbu v1,6(v0) +80032b1c: 2402005c li v0,92 +80032b20: 10620004 beq v1,v0,80032b34 <McReadSector+0xf8> +80032b24: 00000000 nop + { + dprintf("Error when writing from Memory Card!\n"); + dprintf("BAD ACK1! Expected 0x5C, got %d\n",arr[6]); + return '1'; +80032b28: 24020031 li v0,49 +80032b2c: 10000025 b 80032bc4 <McReadSector+0x188> +80032b30: 00000000 nop + } + + if(arr[7] != 0x5D) +80032b34: 3c028007 lui v0,0x8007 +80032b38: 24428bec addiu v0,v0,-29716 +80032b3c: 90430007 lbu v1,7(v0) +80032b40: 2402005d li v0,93 +80032b44: 10620004 beq v1,v0,80032b58 <McReadSector+0x11c> +80032b48: 00000000 nop + { + dprintf("Error when writing from Memory Card!\n"); + dprintf("BAD ACK2! Expected 0x5D, got %d\n",arr[7]); + return '2'; +80032b4c: 24020032 li v0,50 +80032b50: 1000001c b 80032bc4 <McReadSector+0x188> +80032b54: 00000000 nop + } + + if(arr[8] != card_cmd[4]) +80032b58: 3c028007 lui v0,0x8007 +80032b5c: 24428bec addiu v0,v0,-29716 +80032b60: 90430008 lbu v1,8(v0) +80032b64: 3c028007 lui v0,0x8007 +80032b68: 24428b60 addiu v0,v0,-29856 +80032b6c: 90420004 lbu v0,4(v0) +80032b70: 00000000 nop +80032b74: 10620004 beq v1,v0,80032b88 <McReadSector+0x14c> +80032b78: 00000000 nop + { + dprintf("Error when writing from Memory Card!\n"); + dprintf("BAD MSB sector! Expected %d, got %d\n",card_cmd[4],arr[8]); + return 'M'; +80032b7c: 2402004d li v0,77 +80032b80: 10000010 b 80032bc4 <McReadSector+0x188> +80032b84: 00000000 nop + } + + if(arr[9] != card_cmd[5]) +80032b88: 3c028007 lui v0,0x8007 +80032b8c: 24428bec addiu v0,v0,-29716 +80032b90: 90430009 lbu v1,9(v0) +80032b94: 3c028007 lui v0,0x8007 +80032b98: 24428b60 addiu v0,v0,-29856 +80032b9c: 90420005 lbu v0,5(v0) +80032ba0: 00000000 nop +80032ba4: 10620004 beq v1,v0,80032bb8 <McReadSector+0x17c> +80032ba8: 00000000 nop + { + dprintf("Error when writing from Memory Card!\n"); + dprintf("BAD LSB sector! Expected %d, got %d\n",card_cmd[5],arr[9]); + return 'L'; +80032bac: 2402004c li v0,76 +80032bb0: 10000004 b 80032bc4 <McReadSector+0x188> +80032bb4: 00000000 nop + } + + /*Return RW status*/ + return arr[139]; +80032bb8: 3c028007 lui v0,0x8007 +80032bbc: 24428bec addiu v0,v0,-29716 +80032bc0: 9042008b lbu v0,139(v0) +} +80032bc4: 03c0e821 move sp,s8 +80032bc8: 8fbf0014 lw ra,20(sp) +80032bcc: 8fbe0010 lw s8,16(sp) +80032bd0: 27bd0018 addiu sp,sp,24 +80032bd4: 03e00008 jr ra +80032bd8: 00000000 nop + +80032bdc <McWriteSector>: + * @return + * + */ + +unsigned char McWriteSector(int card_slot, int sector, unsigned char *buffer) +{ +80032bdc: 27bdffe0 addiu sp,sp,-32 +80032be0: afbf001c sw ra,28(sp) +80032be4: afbe0018 sw s8,24(sp) +80032be8: 03a0f021 move s8,sp +80032bec: afc40020 sw a0,32(s8) +80032bf0: afc50024 sw a1,36(s8) +80032bf4: afc60028 sw a2,40(s8) + int i; + + memset(&card_cmd[0], 0, 140); +80032bf8: 2406008c li a2,140 +80032bfc: 00002821 move a1,zero +80032c00: 3c028007 lui v0,0x8007 +80032c04: 24448b60 addiu a0,v0,-29856 +80032c08: 0c00d7ab jal 80035eac <memset> +80032c0c: 00000000 nop + + card_cmd[0] = MEMCARD_ACCESS_CMD; /*MC access*/ +80032c10: 3c028007 lui v0,0x8007 +80032c14: 2403ff81 li v1,-127 +80032c18: a0438b60 sb v1,-29856(v0) + card_cmd[1] = MEMCARD_WRITE_CMD; /*Write command*/ +80032c1c: 3c028007 lui v0,0x8007 +80032c20: 24428b60 addiu v0,v0,-29856 +80032c24: 24030057 li v1,87 +80032c28: a0430001 sb v1,1(v0) + + /*Copy frame number to command*/ + card_cmd[4] = sector >> 8; /*Frame MSB*/ +80032c2c: 8fc20024 lw v0,36(s8) +80032c30: 00000000 nop +80032c34: 00021203 sra v0,v0,0x8 +80032c38: 304300ff andi v1,v0,0xff +80032c3c: 3c028007 lui v0,0x8007 +80032c40: 24428b60 addiu v0,v0,-29856 +80032c44: a0430004 sb v1,4(v0) + card_cmd[5] = sector & 0xFF; /*Frame LSB*/ +80032c48: 8fc20024 lw v0,36(s8) +80032c4c: 00000000 nop +80032c50: 304300ff andi v1,v0,0xff +80032c54: 3c028007 lui v0,0x8007 +80032c58: 24428b60 addiu v0,v0,-29856 +80032c5c: a0430005 sb v1,5(v0) + + memcpy(&card_cmd[6], buffer, 128); +80032c60: 24060080 li a2,128 +80032c64: 8fc50028 lw a1,40(s8) +80032c68: 3c028007 lui v0,0x8007 +80032c6c: 24448b66 addiu a0,v0,-29850 +80032c70: 0c00d75e jal 80035d78 <memcpy> +80032c74: 00000000 nop + + /* Compute checksum */ + for(i = 4, card_cmd[134] = 0; i < 134; i++) +80032c78: 24020004 li v0,4 +80032c7c: afc20010 sw v0,16(s8) +80032c80: 3c028007 lui v0,0x8007 +80032c84: 24428b60 addiu v0,v0,-29856 +80032c88: a0400086 sb zero,134(v0) +80032c8c: 10000014 b 80032ce0 <McWriteSector+0x104> +80032c90: 00000000 nop + card_cmd[134] ^= card_cmd[i]; +80032c94: 3c028007 lui v0,0x8007 +80032c98: 24428b60 addiu v0,v0,-29856 +80032c9c: 90430086 lbu v1,134(v0) +80032ca0: 3c028007 lui v0,0x8007 +80032ca4: 24448b60 addiu a0,v0,-29856 +80032ca8: 8fc20010 lw v0,16(s8) +80032cac: 00000000 nop +80032cb0: 00821021 addu v0,a0,v0 +80032cb4: 90420000 lbu v0,0(v0) +80032cb8: 00000000 nop +80032cbc: 00621026 xor v0,v1,v0 +80032cc0: 304300ff andi v1,v0,0xff +80032cc4: 3c028007 lui v0,0x8007 +80032cc8: 24428b60 addiu v0,v0,-29856 +80032ccc: a0430086 sb v1,134(v0) + card_cmd[5] = sector & 0xFF; /*Frame LSB*/ + + memcpy(&card_cmd[6], buffer, 128); + + /* Compute checksum */ + for(i = 4, card_cmd[134] = 0; i < 134; i++) +80032cd0: 8fc20010 lw v0,16(s8) +80032cd4: 00000000 nop +80032cd8: 24420001 addiu v0,v0,1 +80032cdc: afc20010 sw v0,16(s8) +80032ce0: 8fc20010 lw v0,16(s8) +80032ce4: 00000000 nop +80032ce8: 28420086 slti v0,v0,134 +80032cec: 1440ffe9 bnez v0,80032c94 <McWriteSector+0xb8> +80032cf0: 00000000 nop + card_cmd[134] ^= card_cmd[i]; + + memset(arr,0,140); +80032cf4: 2406008c li a2,140 +80032cf8: 00002821 move a1,zero +80032cfc: 3c028007 lui v0,0x8007 +80032d00: 24448bec addiu a0,v0,-29716 +80032d04: 0c00d7ab jal 80035eac <memset> +80032d08: 00000000 nop + QueryPAD(card_slot, card_cmd, arr, sizeof(card_cmd)); +80032d0c: 2407008c li a3,140 +80032d10: 3c028007 lui v0,0x8007 +80032d14: 24468bec addiu a2,v0,-29716 +80032d18: 3c028007 lui v0,0x8007 +80032d1c: 24458b60 addiu a1,v0,-29856 +80032d20: 8fc40020 lw a0,32(s8) +80032d24: 0c00c92c jal 800324b0 <QueryPAD> +80032d28: 00000000 nop + + if(arr[135] != 0x5C) +80032d2c: 3c028007 lui v0,0x8007 +80032d30: 24428bec addiu v0,v0,-29716 +80032d34: 90430087 lbu v1,135(v0) +80032d38: 2402005c li v0,92 +80032d3c: 10620004 beq v1,v0,80032d50 <McWriteSector+0x174> +80032d40: 00000000 nop + dprintf("Error when writing from Memory Card!\n"); + dprintf("BAD ACK1! Expected 0x5C, got %d\n",arr[135]); + // Positions 6 and 7 belong to ACK's + // They always should be 0x5C and 0x5D, respectively + // On the other hand, positions 8 and 9 return MSB and LSB sectors. + return '1'; +80032d44: 24020031 li v0,49 +80032d48: 1000000d b 80032d80 <McWriteSector+0x1a4> +80032d4c: 00000000 nop + } + + if(arr[136] != 0x5D) +80032d50: 3c028007 lui v0,0x8007 +80032d54: 24428bec addiu v0,v0,-29716 +80032d58: 90430088 lbu v1,136(v0) +80032d5c: 2402005d li v0,93 +80032d60: 10620004 beq v1,v0,80032d74 <McWriteSector+0x198> +80032d64: 00000000 nop + { + dprintf("Error when writing from Memory Card!\n"); + dprintf("BAD ACK1! Expected 0x5C, got %d\n",arr[136]); + return '2'; +80032d68: 24020032 li v0,50 +80032d6c: 10000004 b 80032d80 <McWriteSector+0x1a4> +80032d70: 00000000 nop + dprintf("BAD LSB Sector! Expected %d, got %d\n",card_cmd[5],arr[5]); + return 0; + } */ + + /*Return RW status*/ + return arr[137]; +80032d74: 3c028007 lui v0,0x8007 +80032d78: 24428bec addiu v0,v0,-29716 +80032d7c: 90420089 lbu v0,137(v0) +} +80032d80: 03c0e821 move sp,s8 +80032d84: 8fbf001c lw ra,28(sp) +80032d88: 8fbe0018 lw s8,24(sp) +80032d8c: 27bd0020 addiu sp,sp,32 +80032d90: 03e00008 jr ra +80032d94: 00000000 nop + +80032d98 <McGetStatus>: + +MEMCARD_STATUS McGetStatus(int card_slot) +{ +80032d98: 27bdffe0 addiu sp,sp,-32 +80032d9c: afbf001c sw ra,28(sp) +80032da0: afbe0018 sw s8,24(sp) +80032da4: 03a0f021 move s8,sp +80032da8: afc40020 sw a0,32(s8) + unsigned int status = MEMCARD_STATUS_UNKNOWN; +80032dac: afc00010 sw zero,16(s8) + + memset(&card_cmd[0], 0, 140); +80032db0: 2406008c li a2,140 +80032db4: 00002821 move a1,zero +80032db8: 3c028007 lui v0,0x8007 +80032dbc: 24448b60 addiu a0,v0,-29856 +80032dc0: 0c00d7ab jal 80035eac <memset> +80032dc4: 00000000 nop + + card_cmd[0] = 0x81; /*MC access*/ +80032dc8: 3c028007 lui v0,0x8007 +80032dcc: 2403ff81 li v1,-127 +80032dd0: a0438b60 sb v1,-29856(v0) + card_cmd[1] = 0x52; /*Read command*/ +80032dd4: 3c028007 lui v0,0x8007 +80032dd8: 24428b60 addiu v0,v0,-29856 +80032ddc: 24030052 li v1,82 +80032de0: a0430001 sb v1,1(v0) + + /*Copy frame number to command*/ + card_cmd[4] = 0;//sector >> 8; /*Frame MSB*/ +80032de4: 3c028007 lui v0,0x8007 +80032de8: 24428b60 addiu v0,v0,-29856 +80032dec: a0400004 sb zero,4(v0) + card_cmd[5] = 0;//sector & 0xFF; /*Frame LSB*/ +80032df0: 3c028007 lui v0,0x8007 +80032df4: 24428b60 addiu v0,v0,-29856 +80032df8: a0400005 sb zero,5(v0) + + QueryPAD(card_slot, card_cmd, arr, sizeof(card_cmd)); +80032dfc: 2407008c li a3,140 +80032e00: 3c028007 lui v0,0x8007 +80032e04: 24468bec addiu a2,v0,-29716 +80032e08: 3c028007 lui v0,0x8007 +80032e0c: 24458b60 addiu a1,v0,-29856 +80032e10: 8fc40020 lw a0,32(s8) +80032e14: 0c00c92c jal 800324b0 <QueryPAD> +80032e18: 00000000 nop + + if(arr[2] == 0x5a && arr[3] == 0x5d) +80032e1c: 3c028007 lui v0,0x8007 +80032e20: 24428bec addiu v0,v0,-29716 +80032e24: 90430002 lbu v1,2(v0) +80032e28: 2402005a li v0,90 +80032e2c: 1462000b bne v1,v0,80032e5c <McGetStatus+0xc4> +80032e30: 00000000 nop +80032e34: 3c028007 lui v0,0x8007 +80032e38: 24428bec addiu v0,v0,-29716 +80032e3c: 90430003 lbu v1,3(v0) +80032e40: 2402005d li v0,93 +80032e44: 14620005 bne v1,v0,80032e5c <McGetStatus+0xc4> +80032e48: 00000000 nop + { + status |= MEMCARD_CONNECTED; +80032e4c: 8fc20010 lw v0,16(s8) +80032e50: 00000000 nop +80032e54: 34420001 ori v0,v0,0x1 +80032e58: afc20010 sw v0,16(s8) + } + + if(arr[6] == 'M' && arr[7] == 'C') +80032e5c: 3c028007 lui v0,0x8007 +80032e60: 24428bec addiu v0,v0,-29716 +80032e64: 90430006 lbu v1,6(v0) +80032e68: 2402004d li v0,77 +80032e6c: 1462000b bne v1,v0,80032e9c <McGetStatus+0x104> +80032e70: 00000000 nop +80032e74: 3c028007 lui v0,0x8007 +80032e78: 24428bec addiu v0,v0,-29716 +80032e7c: 90430007 lbu v1,7(v0) +80032e80: 24020043 li v0,67 +80032e84: 14620005 bne v1,v0,80032e9c <McGetStatus+0x104> +80032e88: 00000000 nop + { + status |= MEMCARD_FORMATTED; +80032e8c: 8fc20010 lw v0,16(s8) +80032e90: 00000000 nop +80032e94: 34420002 ori v0,v0,0x2 +80032e98: afc20010 sw v0,16(s8) + } + + return status; +80032e9c: 8fc20010 lw v0,16(s8) +} +80032ea0: 03c0e821 move sp,s8 +80032ea4: 8fbf001c lw ra,28(sp) +80032ea8: 8fbe0018 lw s8,24(sp) +80032eac: 27bd0020 addiu sp,sp,32 +80032eb0: 03e00008 jr ra +80032eb4: 00000000 nop + +80032eb8 <SsVoiceVol>: +#define DPCR *((unsigned int*)0x1f8010f0) + +static unsigned int ss_vag_addr; + +void SsVoiceVol(int voice, unsigned short left, unsigned short right) +{ +80032eb8: 27bdfff0 addiu sp,sp,-16 +80032ebc: afbe000c sw s8,12(sp) +80032ec0: 03a0f021 move s8,sp +80032ec4: afc40010 sw a0,16(s8) +80032ec8: 00a01821 move v1,a1 +80032ecc: 00c01021 move v0,a2 +80032ed0: a7c30014 sh v1,20(s8) +80032ed4: a7c20018 sh v0,24(s8) + unsigned short *a = (unsigned short*)SPU_VOICE_BASE_ADDR(voice); +80032ed8: 8fc20010 lw v0,16(s8) +80032edc: 00000000 nop +80032ee0: 00021900 sll v1,v0,0x4 +80032ee4: 3c021f80 lui v0,0x1f80 +80032ee8: 34421c00 ori v0,v0,0x1c00 +80032eec: 00621021 addu v0,v1,v0 +80032ef0: afc20000 sw v0,0(s8) + + a[0] = left; +80032ef4: 8fc20000 lw v0,0(s8) +80032ef8: 97c30014 lhu v1,20(s8) +80032efc: 00000000 nop +80032f00: a4430000 sh v1,0(v0) + a[1] = right; +80032f04: 8fc20000 lw v0,0(s8) +80032f08: 00000000 nop +80032f0c: 24420002 addiu v0,v0,2 +80032f10: 97c30018 lhu v1,24(s8) +80032f14: 00000000 nop +80032f18: a4430000 sh v1,0(v0) +} +80032f1c: 00000000 nop +80032f20: 03c0e821 move sp,s8 +80032f24: 8fbe000c lw s8,12(sp) +80032f28: 27bd0010 addiu sp,sp,16 +80032f2c: 03e00008 jr ra +80032f30: 00000000 nop + +80032f34 <SsVoicePitch>: + +void SsVoicePitch(int voice, unsigned short pitch) +{ +80032f34: 27bdfff0 addiu sp,sp,-16 +80032f38: afbe000c sw s8,12(sp) +80032f3c: 03a0f021 move s8,sp +80032f40: afc40010 sw a0,16(s8) +80032f44: 00a01021 move v0,a1 +80032f48: a7c20014 sh v0,20(s8) + unsigned short *a = (unsigned short*)SPU_VOICE_BASE_ADDR(voice); +80032f4c: 8fc20010 lw v0,16(s8) +80032f50: 00000000 nop +80032f54: 00021900 sll v1,v0,0x4 +80032f58: 3c021f80 lui v0,0x1f80 +80032f5c: 34421c00 ori v0,v0,0x1c00 +80032f60: 00621021 addu v0,v1,v0 +80032f64: afc20000 sw v0,0(s8) + + a[2] = pitch; +80032f68: 8fc20000 lw v0,0(s8) +80032f6c: 00000000 nop +80032f70: 24420004 addiu v0,v0,4 +80032f74: 97c30014 lhu v1,20(s8) +80032f78: 00000000 nop +80032f7c: a4430000 sh v1,0(v0) +} +80032f80: 00000000 nop +80032f84: 03c0e821 move sp,s8 +80032f88: 8fbe000c lw s8,12(sp) +80032f8c: 27bd0010 addiu sp,sp,16 +80032f90: 03e00008 jr ra +80032f94: 00000000 nop + +80032f98 <SsVoiceStartAddr>: + +void SsVoiceStartAddr(int voice, unsigned int addr) +{ +80032f98: 27bdfff0 addiu sp,sp,-16 +80032f9c: afbe000c sw s8,12(sp) +80032fa0: 03a0f021 move s8,sp +80032fa4: afc40010 sw a0,16(s8) +80032fa8: afc50014 sw a1,20(s8) +// address given is real address, then it is divided by eight when written to the register +// example: SSVoiceStartAddr(0, 0x1008) , writes 0x201 on the register which means 0x1008 + + unsigned short *a = (unsigned short*)SPU_VOICE_BASE_ADDR(voice); +80032fac: 8fc20010 lw v0,16(s8) +80032fb0: 00000000 nop +80032fb4: 00021900 sll v1,v0,0x4 +80032fb8: 3c021f80 lui v0,0x1f80 +80032fbc: 34421c00 ori v0,v0,0x1c00 +80032fc0: 00621021 addu v0,v1,v0 +80032fc4: afc20000 sw v0,0(s8) + + a[3] = (addr >> 3); +80032fc8: 8fc20000 lw v0,0(s8) +80032fcc: 00000000 nop +80032fd0: 24420006 addiu v0,v0,6 +80032fd4: 8fc30014 lw v1,20(s8) +80032fd8: 00000000 nop +80032fdc: 000318c2 srl v1,v1,0x3 +80032fe0: 3063ffff andi v1,v1,0xffff +80032fe4: a4430000 sh v1,0(v0) +} +80032fe8: 00000000 nop +80032fec: 03c0e821 move sp,s8 +80032ff0: 8fbe000c lw s8,12(sp) +80032ff4: 27bd0010 addiu sp,sp,16 +80032ff8: 03e00008 jr ra +80032ffc: 00000000 nop + +80033000 <SsVoiceADSRRaw>: + +void SsVoiceADSRRaw(int voice, unsigned short level, unsigned short rate) +{ +80033000: 27bdfff0 addiu sp,sp,-16 +80033004: afbe000c sw s8,12(sp) +80033008: 03a0f021 move s8,sp +8003300c: afc40010 sw a0,16(s8) +80033010: 00a01821 move v1,a1 +80033014: 00c01021 move v0,a2 +80033018: a7c30014 sh v1,20(s8) +8003301c: a7c20018 sh v0,24(s8) + unsigned short *a = (unsigned short*)SPU_VOICE_BASE_ADDR(voice); +80033020: 8fc20010 lw v0,16(s8) +80033024: 00000000 nop +80033028: 00021900 sll v1,v0,0x4 +8003302c: 3c021f80 lui v0,0x1f80 +80033030: 34421c00 ori v0,v0,0x1c00 +80033034: 00621021 addu v0,v1,v0 +80033038: afc20000 sw v0,0(s8) + + a[4] = level; +8003303c: 8fc20000 lw v0,0(s8) +80033040: 00000000 nop +80033044: 24420008 addiu v0,v0,8 +80033048: 97c30014 lhu v1,20(s8) +8003304c: 00000000 nop +80033050: a4430000 sh v1,0(v0) + a[5] = rate; +80033054: 8fc20000 lw v0,0(s8) +80033058: 00000000 nop +8003305c: 2442000a addiu v0,v0,10 +80033060: 97c30018 lhu v1,24(s8) +80033064: 00000000 nop +80033068: a4430000 sh v1,0(v0) +} +8003306c: 00000000 nop +80033070: 03c0e821 move sp,s8 +80033074: 8fbe000c lw s8,12(sp) +80033078: 27bd0010 addiu sp,sp,16 +8003307c: 03e00008 jr ra +80033080: 00000000 nop + +80033084 <SsVoiceRepeatAddr>: + +void SsVoiceRepeatAddr(int voice, unsigned int addr) +{ +80033084: 27bdfff0 addiu sp,sp,-16 +80033088: afbe000c sw s8,12(sp) +8003308c: 03a0f021 move s8,sp +80033090: afc40010 sw a0,16(s8) +80033094: afc50014 sw a1,20(s8) +// only valid after KeyOn +// the explanation for SSVoiceStartAddr() is valid for this function as well + + unsigned short *a = (unsigned short*)SPU_VOICE_BASE_ADDR(voice); +80033098: 8fc20010 lw v0,16(s8) +8003309c: 00000000 nop +800330a0: 00021900 sll v1,v0,0x4 +800330a4: 3c021f80 lui v0,0x1f80 +800330a8: 34421c00 ori v0,v0,0x1c00 +800330ac: 00621021 addu v0,v1,v0 +800330b0: afc20000 sw v0,0(s8) + + a[7] = (addr >> 3); +800330b4: 8fc20000 lw v0,0(s8) +800330b8: 00000000 nop +800330bc: 2442000e addiu v0,v0,14 +800330c0: 8fc30014 lw v1,20(s8) +800330c4: 00000000 nop +800330c8: 000318c2 srl v1,v1,0x3 +800330cc: 3063ffff andi v1,v1,0xffff +800330d0: a4430000 sh v1,0(v0) +} +800330d4: 00000000 nop +800330d8: 03c0e821 move sp,s8 +800330dc: 8fbe000c lw s8,12(sp) +800330e0: 27bd0010 addiu sp,sp,16 +800330e4: 03e00008 jr ra +800330e8: 00000000 nop + +800330ec <SsKeyOn>: + +void SsKeyOn(int voice) +{ +800330ec: 27bdfff0 addiu sp,sp,-16 +800330f0: afbe000c sw s8,12(sp) +800330f4: 03a0f021 move s8,sp +800330f8: afc40010 sw a0,16(s8) + unsigned int i = 1 << voice; +800330fc: 24030001 li v1,1 +80033100: 8fc20010 lw v0,16(s8) +80033104: 00000000 nop +80033108: 00431004 sllv v0,v1,v0 +8003310c: afc20000 sw v0,0(s8) + + SPU_KEY_ON1 = i & 0xffff; +80033110: 3c021f80 lui v0,0x1f80 +80033114: 34421d88 ori v0,v0,0x1d88 +80033118: 8fc30000 lw v1,0(s8) +8003311c: 00000000 nop +80033120: 3063ffff andi v1,v1,0xffff +80033124: a4430000 sh v1,0(v0) + SPU_KEY_ON2 = i >> 16; +80033128: 3c021f80 lui v0,0x1f80 +8003312c: 34421d8a ori v0,v0,0x1d8a +80033130: 8fc30000 lw v1,0(s8) +80033134: 00000000 nop +80033138: 00031c02 srl v1,v1,0x10 +8003313c: 3063ffff andi v1,v1,0xffff +80033140: a4430000 sh v1,0(v0) + +/* while(SPU_KEY_ON1 != (i & 0xffff)); + while(SPU_KEY_ON2 != (i >> 16)); +*/ +} +80033144: 00000000 nop +80033148: 03c0e821 move sp,s8 +8003314c: 8fbe000c lw s8,12(sp) +80033150: 27bd0010 addiu sp,sp,16 +80033154: 03e00008 jr ra +80033158: 00000000 nop + +8003315c <SsKeyOff>: + +void SsKeyOff(int voice) +{ +8003315c: 27bdfff0 addiu sp,sp,-16 +80033160: afbe000c sw s8,12(sp) +80033164: 03a0f021 move s8,sp +80033168: afc40010 sw a0,16(s8) + unsigned int i = 1 << voice; +8003316c: 24030001 li v1,1 +80033170: 8fc20010 lw v0,16(s8) +80033174: 00000000 nop +80033178: 00431004 sllv v0,v1,v0 +8003317c: afc20000 sw v0,0(s8) + + SPU_KEY_OFF1 = i & 0xffff; +80033180: 3c021f80 lui v0,0x1f80 +80033184: 34421d8c ori v0,v0,0x1d8c +80033188: 8fc30000 lw v1,0(s8) +8003318c: 00000000 nop +80033190: 3063ffff andi v1,v1,0xffff +80033194: a4430000 sh v1,0(v0) + SPU_KEY_OFF2 = i >> 16; +80033198: 3c021f80 lui v0,0x1f80 +8003319c: 34421d8e ori v0,v0,0x1d8e +800331a0: 8fc30000 lw v1,0(s8) +800331a4: 00000000 nop +800331a8: 00031c02 srl v1,v1,0x10 +800331ac: 3063ffff andi v1,v1,0xffff +800331b0: a4430000 sh v1,0(v0) +} +800331b4: 00000000 nop +800331b8: 03c0e821 move sp,s8 +800331bc: 8fbe000c lw s8,12(sp) +800331c0: 27bd0010 addiu sp,sp,16 +800331c4: 03e00008 jr ra +800331c8: 00000000 nop + +800331cc <SsKeyOnMask>: + + + +void SsKeyOnMask(int mask) +{ +800331cc: 27bdfff8 addiu sp,sp,-8 +800331d0: afbe0004 sw s8,4(sp) +800331d4: 03a0f021 move s8,sp +800331d8: afc40008 sw a0,8(s8) + SPU_KEY_ON1 = mask & 0xffff; +800331dc: 3c021f80 lui v0,0x1f80 +800331e0: 34421d88 ori v0,v0,0x1d88 +800331e4: 8fc30008 lw v1,8(s8) +800331e8: 00000000 nop +800331ec: 3063ffff andi v1,v1,0xffff +800331f0: a4430000 sh v1,0(v0) + SPU_KEY_ON2 = mask >> 16; +800331f4: 3c021f80 lui v0,0x1f80 +800331f8: 34421d8a ori v0,v0,0x1d8a +800331fc: 8fc30008 lw v1,8(s8) +80033200: 00000000 nop +80033204: 00031c03 sra v1,v1,0x10 +80033208: 3063ffff andi v1,v1,0xffff +8003320c: a4430000 sh v1,0(v0) +} +80033210: 00000000 nop +80033214: 03c0e821 move sp,s8 +80033218: 8fbe0004 lw s8,4(sp) +8003321c: 27bd0008 addiu sp,sp,8 +80033220: 03e00008 jr ra +80033224: 00000000 nop + +80033228 <SsKeyOffMask>: + +void SsKeyOffMask(int mask) +{ +80033228: 27bdfff8 addiu sp,sp,-8 +8003322c: afbe0004 sw s8,4(sp) +80033230: 03a0f021 move s8,sp +80033234: afc40008 sw a0,8(s8) + SPU_KEY_OFF1 = mask & 0xffff; +80033238: 3c021f80 lui v0,0x1f80 +8003323c: 34421d8c ori v0,v0,0x1d8c +80033240: 8fc30008 lw v1,8(s8) +80033244: 00000000 nop +80033248: 3063ffff andi v1,v1,0xffff +8003324c: a4430000 sh v1,0(v0) + SPU_KEY_OFF2 = mask >> 16; +80033250: 3c021f80 lui v0,0x1f80 +80033254: 34421d8e ori v0,v0,0x1d8e +80033258: 8fc30008 lw v1,8(s8) +8003325c: 00000000 nop +80033260: 00031c03 sra v1,v1,0x10 +80033264: 3063ffff andi v1,v1,0xffff +80033268: a4430000 sh v1,0(v0) +} +8003326c: 00000000 nop +80033270: 03c0e821 move sp,s8 +80033274: 8fbe0004 lw s8,4(sp) +80033278: 27bd0008 addiu sp,sp,8 +8003327c: 03e00008 jr ra +80033280: 00000000 nop + +80033284 <SsWait>: + +void SsWait() +{ +80033284: 27bdfff8 addiu sp,sp,-8 +80033288: afbe0004 sw s8,4(sp) +8003328c: 03a0f021 move s8,sp + while(SPU_STATUS2 & 0x7ff); +80033290: 00000000 nop +80033294: 3c021f80 lui v0,0x1f80 +80033298: 34421dae ori v0,v0,0x1dae +8003329c: 94420000 lhu v0,0(v0) +800332a0: 00000000 nop +800332a4: 304207ff andi v0,v0,0x7ff +800332a8: 1440fffa bnez v0,80033294 <SsWait+0x10> +800332ac: 00000000 nop +} +800332b0: 00000000 nop +800332b4: 03c0e821 move sp,s8 +800332b8: 8fbe0004 lw s8,4(sp) +800332bc: 27bd0008 addiu sp,sp,8 +800332c0: 03e00008 jr ra +800332c4: 00000000 nop + +800332c8 <SsInit>: + +void SsInit() +{ +800332c8: 27bdffe0 addiu sp,sp,-32 +800332cc: afbf001c sw ra,28(sp) +800332d0: afbe0018 sw s8,24(sp) +800332d4: 03a0f021 move s8,sp + int x; + + printf("Initializing SPU (Sound Synthesizer)...\n"); +800332d8: 3c028004 lui v0,0x8004 +800332dc: 2444fdac addiu a0,v0,-596 +800332e0: 0c00ed8f jal 8003b63c <printf> +800332e4: 00000000 nop + + DPCR |= 0xB0000; +800332e8: 3c021f80 lui v0,0x1f80 +800332ec: 344210f0 ori v0,v0,0x10f0 +800332f0: 3c031f80 lui v1,0x1f80 +800332f4: 346310f0 ori v1,v1,0x10f0 +800332f8: 8c640000 lw a0,0(v1) +800332fc: 3c03000b lui v1,0xb +80033300: 00831825 or v1,a0,v1 +80033304: ac430000 sw v1,0(v0) + + SPU_MVOL_L = 0x3fff; +80033308: 3c021f80 lui v0,0x1f80 +8003330c: 34421d80 ori v0,v0,0x1d80 +80033310: 24033fff li v1,16383 +80033314: a4430000 sh v1,0(v0) + SPU_MVOL_R = 0x3fff; +80033318: 3c021f80 lui v0,0x1f80 +8003331c: 34421d82 ori v0,v0,0x1d82 +80033320: 24033fff li v1,16383 +80033324: a4430000 sh v1,0(v0) + + SPU_CONTROL = 0x0; +80033328: 3c021f80 lui v0,0x1f80 +8003332c: 34421daa ori v0,v0,0x1daa +80033330: a4400000 sh zero,0(v0) + SsWait(); +80033334: 0c00cca1 jal 80033284 <SsWait> +80033338: 00000000 nop + + SPU_STATUS = 0x4; // Must be done, but not totally understood +8003333c: 3c021f80 lui v0,0x1f80 +80033340: 34421dac ori v0,v0,0x1dac +80033344: 24030004 li v1,4 +80033348: a4430000 sh v1,0(v0) + + while(SPU_STATUS2 & 0x7ff); +8003334c: 00000000 nop +80033350: 3c021f80 lui v0,0x1f80 +80033354: 34421dae ori v0,v0,0x1dae +80033358: 94420000 lhu v0,0(v0) +8003335c: 00000000 nop +80033360: 304207ff andi v0,v0,0x7ff +80033364: 1440fffa bnez v0,80033350 <SsInit+0x88> +80033368: 00000000 nop + + SPU_REVERB_L = 0x0; +8003336c: 3c021f80 lui v0,0x1f80 +80033370: 34421d84 ori v0,v0,0x1d84 +80033374: a4400000 sh zero,0(v0) + SPU_REVERB_R = 0x0; +80033378: 3c021f80 lui v0,0x1f80 +8003337c: 34421d86 ori v0,v0,0x1d86 +80033380: a4400000 sh zero,0(v0) + + // All keys off + + SPU_KEY_OFF1 = 0xFFFF; +80033384: 3c021f80 lui v0,0x1f80 +80033388: 34421d8c ori v0,v0,0x1d8c +8003338c: 2403ffff li v1,-1 +80033390: a4430000 sh v1,0(v0) + SPU_KEY_OFF2 = 0xFFFF; +80033394: 3c021f80 lui v0,0x1f80 +80033398: 34421d8e ori v0,v0,0x1d8e +8003339c: 2403ffff li v1,-1 +800333a0: a4430000 sh v1,0(v0) + + // Switch FM, reverb and noise off + SPU_KEY_FM_MODE1 = 0x0; +800333a4: 3c021f80 lui v0,0x1f80 +800333a8: 34421d90 ori v0,v0,0x1d90 +800333ac: a4400000 sh zero,0(v0) + SPU_KEY_FM_MODE2 = 0x0; +800333b0: 3c021f80 lui v0,0x1f80 +800333b4: 34421d92 ori v0,v0,0x1d92 +800333b8: a4400000 sh zero,0(v0) + SPU_KEY_NOISE_MODE1 = 0x0; +800333bc: 3c021f80 lui v0,0x1f80 +800333c0: 34421d94 ori v0,v0,0x1d94 +800333c4: a4400000 sh zero,0(v0) + SPU_KEY_NOISE_MODE2 = 0x0; +800333c8: 3c021f80 lui v0,0x1f80 +800333cc: 34421d96 ori v0,v0,0x1d96 +800333d0: a4400000 sh zero,0(v0) + SPU_KEY_REVERB_MODE1 = 0x0; +800333d4: 3c021f80 lui v0,0x1f80 +800333d8: 34421d98 ori v0,v0,0x1d98 +800333dc: a4400000 sh zero,0(v0) + SPU_KEY_REVERB_MODE2 = 0x0; +800333e0: 3c021f80 lui v0,0x1f80 +800333e4: 34421d9a ori v0,v0,0x1d9a +800333e8: a4400000 sh zero,0(v0) + + // set CD master volume to 0 (mute it) + SPU_CD_MVOL_L = 0x0; +800333ec: 3c021f80 lui v0,0x1f80 +800333f0: 34421db0 ori v0,v0,0x1db0 +800333f4: a4400000 sh zero,0(v0) + SPU_CD_MVOL_R = 0x0; +800333f8: 3c021f80 lui v0,0x1f80 +800333fc: 34421db2 ori v0,v0,0x1db2 +80033400: a4400000 sh zero,0(v0) + + // set external input volume to 0 (mute it) + SPU_EXT_VOL_L = 0x0; +80033404: 3c021f80 lui v0,0x1f80 +80033408: 34421db4 ori v0,v0,0x1db4 +8003340c: a4400000 sh zero,0(v0) + SPU_EXT_VOL_R = 0x0; +80033410: 3c021f80 lui v0,0x1f80 +80033414: 34421db6 ori v0,v0,0x1db6 +80033418: a4400000 sh zero,0(v0) + + // set volume of all voices to 0 and adsr to 0,0 + + for(x = 0; x < 24; x++) +8003341c: afc00010 sw zero,16(s8) +80033420: 1000000f b 80033460 <SsInit+0x198> +80033424: 00000000 nop + { + SsVoiceVol(x, 0, 0); +80033428: 00003021 move a2,zero +8003342c: 00002821 move a1,zero +80033430: 8fc40010 lw a0,16(s8) +80033434: 0c00cbae jal 80032eb8 <SsVoiceVol> +80033438: 00000000 nop + SsVoiceADSRRaw(x, 0, 0); +8003343c: 00003021 move a2,zero +80033440: 00002821 move a1,zero +80033444: 8fc40010 lw a0,16(s8) +80033448: 0c00cc00 jal 80033000 <SsVoiceADSRRaw> +8003344c: 00000000 nop + SPU_EXT_VOL_L = 0x0; + SPU_EXT_VOL_R = 0x0; + + // set volume of all voices to 0 and adsr to 0,0 + + for(x = 0; x < 24; x++) +80033450: 8fc20010 lw v0,16(s8) +80033454: 00000000 nop +80033458: 24420001 addiu v0,v0,1 +8003345c: afc20010 sw v0,16(s8) +80033460: 8fc20010 lw v0,16(s8) +80033464: 00000000 nop +80033468: 28420018 slti v0,v0,24 +8003346c: 1440ffee bnez v0,80033428 <SsInit+0x160> +80033470: 00000000 nop + { + SsVoiceVol(x, 0, 0); + SsVoiceADSRRaw(x, 0, 0); + } + + SsWait(); +80033474: 0c00cca1 jal 80033284 <SsWait> +80033478: 00000000 nop + + SPU_CONTROL = 0xC000; // SPU is on +8003347c: 3c021f80 lui v0,0x1f80 +80033480: 34421daa ori v0,v0,0x1daa +80033484: 2403c000 li v1,-16384 +80033488: a4430000 sh v1,0(v0) + SPU_REVERB_WORK_ADDR = 0xFFFE; // Reverb work address in SPU memory, 0x1fff * 8 = 0xFFF8 +8003348c: 3c021f80 lui v0,0x1f80 +80033490: 34421da2 ori v0,v0,0x1da2 +80033494: 2403fffe li v1,-2 +80033498: a4430000 sh v1,0(v0) + + ss_vag_addr = SPU_DATA_BASE_ADDR; +8003349c: 3c028007 lui v0,0x8007 +800334a0: 24031010 li v1,4112 +800334a4: ac431cec sw v1,7404(v0) + + printf("SPU/SS Initialized.\n"); +800334a8: 3c028004 lui v0,0x8004 +800334ac: 2444fdd8 addiu a0,v0,-552 +800334b0: 0c00ed8f jal 8003b63c <printf> +800334b4: 00000000 nop +} +800334b8: 00000000 nop +800334bc: 03c0e821 move sp,s8 +800334c0: 8fbf001c lw ra,28(sp) +800334c4: 8fbe0018 lw s8,24(sp) +800334c8: 27bd0020 addiu sp,sp,32 +800334cc: 03e00008 jr ra +800334d0: 00000000 nop + +800334d4 <SsUpload>: +// This implementation of SsUpload() was contributed by Shendo +// It waits either for a period of time or for the status flags to be raised, whichever comes first. +// This makes it work also on ePSXe, which never raises the status flags. + +void SsUpload(void *addr, int size, int spu_addr) +{ +800334d4: 27bdfff0 addiu sp,sp,-16 +800334d8: afbe000c sw s8,12(sp) +800334dc: 03a0f021 move s8,sp +800334e0: afc40010 sw a0,16(s8) +800334e4: afc50014 sw a1,20(s8) +800334e8: afc60018 sw a2,24(s8) + unsigned short *ptr = addr; +800334ec: 8fc20010 lw v0,16(s8) +800334f0: 00000000 nop +800334f4: afc20000 sw v0,0(s8) + int i; + + while(size > 0) +800334f8: 10000082 b 80033704 <SsUpload+0x230> +800334fc: 00000000 nop + { + SPU_STATUS = 4; // Sound RAM Data Transfer Control +80033500: 3c021f80 lui v0,0x1f80 +80033504: 34421dac ori v0,v0,0x1dac +80033508: 24030004 li v1,4 +8003350c: a4430000 sh v1,0(v0) + SPU_CONTROL = SPU_CONTROL & ~0x30; // SPUCNT.transfer_mode = 0 (STOP) +80033510: 3c021f80 lui v0,0x1f80 +80033514: 34421daa ori v0,v0,0x1daa +80033518: 3c031f80 lui v1,0x1f80 +8003351c: 34631daa ori v1,v1,0x1daa +80033520: 94640000 lhu a0,0(v1) +80033524: 2403ffcf li v1,-49 +80033528: 00831824 and v1,a0,v1 +8003352c: 3063ffff andi v1,v1,0xffff +80033530: a4430000 sh v1,0(v0) + + + for(i = 0; i < 100; i++) +80033534: afc00004 sw zero,4(s8) +80033538: 1000000e b 80033574 <SsUpload+0xa0> +8003353c: 00000000 nop + if(((SPU_STATUS2 >> 4) & 3) == 0)break; // wait until SPUSTAT.transfer is 0 (STOP) +80033540: 3c021f80 lui v0,0x1f80 +80033544: 34421dae ori v0,v0,0x1dae +80033548: 94420000 lhu v0,0(v0) +8003354c: 00000000 nop +80033550: 00021102 srl v0,v0,0x4 +80033554: 3042ffff andi v0,v0,0xffff +80033558: 30420003 andi v0,v0,0x3 +8003355c: 1040000c beqz v0,80033590 <SsUpload+0xbc> +80033560: 00000000 nop + { + SPU_STATUS = 4; // Sound RAM Data Transfer Control + SPU_CONTROL = SPU_CONTROL & ~0x30; // SPUCNT.transfer_mode = 0 (STOP) + + + for(i = 0; i < 100; i++) +80033564: 8fc20004 lw v0,4(s8) +80033568: 00000000 nop +8003356c: 24420001 addiu v0,v0,1 +80033570: afc20004 sw v0,4(s8) +80033574: 8fc20004 lw v0,4(s8) +80033578: 00000000 nop +8003357c: 28420064 slti v0,v0,100 +80033580: 1440ffef bnez v0,80033540 <SsUpload+0x6c> +80033584: 00000000 nop +80033588: 10000002 b 80033594 <SsUpload+0xc0> +8003358c: 00000000 nop + if(((SPU_STATUS2 >> 4) & 3) == 0)break; // wait until SPUSTAT.transfer is 0 (STOP) +80033590: 00000000 nop + + SPU_ADDR = spu_addr >> 3; +80033594: 3c021f80 lui v0,0x1f80 +80033598: 34421da6 ori v0,v0,0x1da6 +8003359c: 8fc30018 lw v1,24(s8) +800335a0: 00000000 nop +800335a4: 000318c3 sra v1,v1,0x3 +800335a8: 3063ffff andi v1,v1,0xffff +800335ac: a4430000 sh v1,0(v0) + + for(i = 0; i < 32; i++) +800335b0: afc00004 sw zero,4(s8) +800335b4: 10000010 b 800335f8 <SsUpload+0x124> +800335b8: 00000000 nop + SPU_DATA = ptr[i]; +800335bc: 3c021f80 lui v0,0x1f80 +800335c0: 34421da8 ori v0,v0,0x1da8 +800335c4: 8fc30004 lw v1,4(s8) +800335c8: 00000000 nop +800335cc: 00031840 sll v1,v1,0x1 +800335d0: 8fc40000 lw a0,0(s8) +800335d4: 00000000 nop +800335d8: 00831821 addu v1,a0,v1 +800335dc: 94630000 lhu v1,0(v1) +800335e0: 00000000 nop +800335e4: a4430000 sh v1,0(v0) + for(i = 0; i < 100; i++) + if(((SPU_STATUS2 >> 4) & 3) == 0)break; // wait until SPUSTAT.transfer is 0 (STOP) + + SPU_ADDR = spu_addr >> 3; + + for(i = 0; i < 32; i++) +800335e8: 8fc20004 lw v0,4(s8) +800335ec: 00000000 nop +800335f0: 24420001 addiu v0,v0,1 +800335f4: afc20004 sw v0,4(s8) +800335f8: 8fc20004 lw v0,4(s8) +800335fc: 00000000 nop +80033600: 28420020 slti v0,v0,32 +80033604: 1440ffed bnez v0,800335bc <SsUpload+0xe8> +80033608: 00000000 nop + SPU_DATA = ptr[i]; + + SPU_CONTROL = (SPU_CONTROL & ~0x30) | 16; // SPUCNT.transfer_mode = 1 (MANUAL) +8003360c: 3c021f80 lui v0,0x1f80 +80033610: 34421daa ori v0,v0,0x1daa +80033614: 3c031f80 lui v1,0x1f80 +80033618: 34631daa ori v1,v1,0x1daa +8003361c: 94630000 lhu v1,0(v1) +80033620: 00000000 nop +80033624: 00032400 sll a0,v1,0x10 +80033628: 00042403 sra a0,a0,0x10 +8003362c: 2403ffcf li v1,-49 +80033630: 00831824 and v1,a0,v1 +80033634: 00031c00 sll v1,v1,0x10 +80033638: 00031c03 sra v1,v1,0x10 +8003363c: 34630010 ori v1,v1,0x10 +80033640: 00031c00 sll v1,v1,0x10 +80033644: 00031c03 sra v1,v1,0x10 +80033648: 3063ffff andi v1,v1,0xffff +8003364c: a4430000 sh v1,0(v0) + + for(i = 0; i < 100; i++) +80033650: afc00004 sw zero,4(s8) +80033654: 1000000f b 80033694 <SsUpload+0x1c0> +80033658: 00000000 nop + if(((SPU_STATUS2 >> 4) & 3) == 1)break; // wait until SPUSTAT.transfer is 1 (MANUAL) +8003365c: 3c021f80 lui v0,0x1f80 +80033660: 34421dae ori v0,v0,0x1dae +80033664: 94420000 lhu v0,0(v0) +80033668: 00000000 nop +8003366c: 00021102 srl v0,v0,0x4 +80033670: 3042ffff andi v0,v0,0xffff +80033674: 30430003 andi v1,v0,0x3 +80033678: 24020001 li v0,1 +8003367c: 1062000c beq v1,v0,800336b0 <SsUpload+0x1dc> +80033680: 00000000 nop + for(i = 0; i < 32; i++) + SPU_DATA = ptr[i]; + + SPU_CONTROL = (SPU_CONTROL & ~0x30) | 16; // SPUCNT.transfer_mode = 1 (MANUAL) + + for(i = 0; i < 100; i++) +80033684: 8fc20004 lw v0,4(s8) +80033688: 00000000 nop +8003368c: 24420001 addiu v0,v0,1 +80033690: afc20004 sw v0,4(s8) +80033694: 8fc20004 lw v0,4(s8) +80033698: 00000000 nop +8003369c: 28420064 slti v0,v0,100 +800336a0: 1440ffee bnez v0,8003365c <SsUpload+0x188> +800336a4: 00000000 nop +800336a8: 10000002 b 800336b4 <SsUpload+0x1e0> +800336ac: 00000000 nop + ... + if(((SPU_STATUS2 >> 4) & 3) == 1)break; // wait until SPUSTAT.transfer is 1 (MANUAL) + + while(SPU_STATUS2 & 0x400); // wait for transfer busy bit to be cleared +800336b8: 3c021f80 lui v0,0x1f80 +800336bc: 34421dae ori v0,v0,0x1dae +800336c0: 94420000 lhu v0,0(v0) +800336c4: 00000000 nop +800336c8: 30420400 andi v0,v0,0x400 +800336cc: 1440fffa bnez v0,800336b8 <SsUpload+0x1e4> +800336d0: 00000000 nop + + spu_addr += 64; +800336d4: 8fc20018 lw v0,24(s8) +800336d8: 00000000 nop +800336dc: 24420040 addiu v0,v0,64 +800336e0: afc20018 sw v0,24(s8) + ptr += 32; +800336e4: 8fc20000 lw v0,0(s8) +800336e8: 00000000 nop +800336ec: 24420040 addiu v0,v0,64 +800336f0: afc20000 sw v0,0(s8) + size-=64; +800336f4: 8fc20014 lw v0,20(s8) +800336f8: 00000000 nop +800336fc: 2442ffc0 addiu v0,v0,-64 +80033700: afc20014 sw v0,20(s8) +void SsUpload(void *addr, int size, int spu_addr) +{ + unsigned short *ptr = addr; + int i; + + while(size > 0) +80033704: 8fc20014 lw v0,20(s8) +80033708: 00000000 nop +8003370c: 1c40ff7c bgtz v0,80033500 <SsUpload+0x2c> +80033710: 00000000 nop + + spu_addr += 64; + ptr += 32; + size-=64; + } +} +80033714: 00000000 nop +80033718: 03c0e821 move sp,s8 +8003371c: 8fbe000c lw s8,12(sp) +80033720: 27bd0010 addiu sp,sp,16 +80033724: 03e00008 jr ra +80033728: 00000000 nop + +8003372c <SsFreqToPitch>: + +unsigned short SsFreqToPitch(int hz) +{ +8003372c: 27bdfff8 addiu sp,sp,-8 +80033730: afbe0004 sw s8,4(sp) +80033734: 03a0f021 move s8,sp +80033738: afc40008 sw a0,8(s8) +// Converts a normal samples per second frequency value in Hz +// in a pitch value + +// i.e. 44100 -> 0x1000, 22050 -> 0x800 + + return (hz << 12) / 44100; +8003373c: 8fc20008 lw v0,8(s8) +80033740: 00000000 nop +80033744: 00021b00 sll v1,v0,0xc +80033748: 3402ac44 li v0,0xac44 +8003374c: 14400002 bnez v0,80033758 <SsFreqToPitch+0x2c> +80033750: 0062001a div zero,v1,v0 +80033754: 0007000d break 0x7 +80033758: 00001010 mfhi v0 +8003375c: 00001012 mflo v0 +80033760: 3042ffff andi v0,v0,0xffff +} +80033764: 03c0e821 move sp,s8 +80033768: 8fbe0004 lw s8,4(sp) +8003376c: 27bd0008 addiu sp,sp,8 +80033770: 03e00008 jr ra +80033774: 00000000 nop + +80033778 <SsReadVag>: + +int SsReadVag(SsVag *vag, void *data) +{ +80033778: 27bdffe0 addiu sp,sp,-32 +8003377c: afbf001c sw ra,28(sp) +80033780: afbe0018 sw s8,24(sp) +80033784: 03a0f021 move s8,sp +80033788: afc40020 sw a0,32(s8) +8003378c: afc50024 sw a1,36(s8) + unsigned char *i = data; +80033790: 8fc20024 lw v0,36(s8) +80033794: 00000000 nop +80033798: afc20010 sw v0,16(s8) + + if(strncmp(data, "VAGp", 4) != 0) +8003379c: 24060004 li a2,4 +800337a0: 3c028004 lui v0,0x8004 +800337a4: 2445fdf0 addiu a1,v0,-528 +800337a8: 8fc40024 lw a0,36(s8) +800337ac: 0c00d9dd jal 80036774 <strncmp> +800337b0: 00000000 nop +800337b4: 10400004 beqz v0,800337c8 <SsReadVag+0x50> +800337b8: 00000000 nop + return 0; +800337bc: 00001021 move v0,zero +800337c0: 1000006d b 80033978 <SsReadVag+0x200> +800337c4: 00000000 nop + + vag->version = (i[4]<<24)|(i[5]<<16)|(i[6]<<8)|i[7]; +800337c8: 8fc20010 lw v0,16(s8) +800337cc: 00000000 nop +800337d0: 24420004 addiu v0,v0,4 +800337d4: 90420000 lbu v0,0(v0) +800337d8: 00000000 nop +800337dc: 00021e00 sll v1,v0,0x18 +800337e0: 8fc20010 lw v0,16(s8) +800337e4: 00000000 nop +800337e8: 24420005 addiu v0,v0,5 +800337ec: 90420000 lbu v0,0(v0) +800337f0: 00000000 nop +800337f4: 00021400 sll v0,v0,0x10 +800337f8: 00621825 or v1,v1,v0 +800337fc: 8fc20010 lw v0,16(s8) +80033800: 00000000 nop +80033804: 24420006 addiu v0,v0,6 +80033808: 90420000 lbu v0,0(v0) +8003380c: 00000000 nop +80033810: 00021200 sll v0,v0,0x8 +80033814: 00621025 or v0,v1,v0 +80033818: 8fc30010 lw v1,16(s8) +8003381c: 00000000 nop +80033820: 24630007 addiu v1,v1,7 +80033824: 90630000 lbu v1,0(v1) +80033828: 00000000 nop +8003382c: 00431025 or v0,v0,v1 +80033830: 00401821 move v1,v0 +80033834: 8fc20020 lw v0,32(s8) +80033838: 00000000 nop +8003383c: ac430000 sw v1,0(v0) + vag->data_size = (i[12]<<24)|(i[13]<<16)|(i[14]<<8)|i[15]; +80033840: 8fc20010 lw v0,16(s8) +80033844: 00000000 nop +80033848: 2442000c addiu v0,v0,12 +8003384c: 90420000 lbu v0,0(v0) +80033850: 00000000 nop +80033854: 00021e00 sll v1,v0,0x18 +80033858: 8fc20010 lw v0,16(s8) +8003385c: 00000000 nop +80033860: 2442000d addiu v0,v0,13 +80033864: 90420000 lbu v0,0(v0) +80033868: 00000000 nop +8003386c: 00021400 sll v0,v0,0x10 +80033870: 00621825 or v1,v1,v0 +80033874: 8fc20010 lw v0,16(s8) +80033878: 00000000 nop +8003387c: 2442000e addiu v0,v0,14 +80033880: 90420000 lbu v0,0(v0) +80033884: 00000000 nop +80033888: 00021200 sll v0,v0,0x8 +8003388c: 00621025 or v0,v1,v0 +80033890: 8fc30010 lw v1,16(s8) +80033894: 00000000 nop +80033898: 2463000f addiu v1,v1,15 +8003389c: 90630000 lbu v1,0(v1) +800338a0: 00000000 nop +800338a4: 00431025 or v0,v0,v1 +800338a8: 00401821 move v1,v0 +800338ac: 8fc20020 lw v0,32(s8) +800338b0: 00000000 nop +800338b4: ac430004 sw v1,4(v0) + vag->sample_rate = (i[16]<<24)|(i[17]<<16)|(i[18]<<8)|i[19]; +800338b8: 8fc20010 lw v0,16(s8) +800338bc: 00000000 nop +800338c0: 24420010 addiu v0,v0,16 +800338c4: 90420000 lbu v0,0(v0) +800338c8: 00000000 nop +800338cc: 00021e00 sll v1,v0,0x18 +800338d0: 8fc20010 lw v0,16(s8) +800338d4: 00000000 nop +800338d8: 24420011 addiu v0,v0,17 +800338dc: 90420000 lbu v0,0(v0) +800338e0: 00000000 nop +800338e4: 00021400 sll v0,v0,0x10 +800338e8: 00621825 or v1,v1,v0 +800338ec: 8fc20010 lw v0,16(s8) +800338f0: 00000000 nop +800338f4: 24420012 addiu v0,v0,18 +800338f8: 90420000 lbu v0,0(v0) +800338fc: 00000000 nop +80033900: 00021200 sll v0,v0,0x8 +80033904: 00621025 or v0,v1,v0 +80033908: 8fc30010 lw v1,16(s8) +8003390c: 00000000 nop +80033910: 24630013 addiu v1,v1,19 +80033914: 90630000 lbu v1,0(v1) +80033918: 00000000 nop +8003391c: 00431025 or v0,v0,v1 +80033920: 00401821 move v1,v0 +80033924: 8fc20020 lw v0,32(s8) +80033928: 00000000 nop +8003392c: ac430008 sw v1,8(v0) + memcpy(vag->name, &i[32], 16); +80033930: 8fc20020 lw v0,32(s8) +80033934: 00000000 nop +80033938: 2443000c addiu v1,v0,12 +8003393c: 8fc20010 lw v0,16(s8) +80033940: 00000000 nop +80033944: 24420020 addiu v0,v0,32 +80033948: 24060010 li a2,16 +8003394c: 00402821 move a1,v0 +80033950: 00602021 move a0,v1 +80033954: 0c00d75e jal 80035d78 <memcpy> +80033958: 00000000 nop + vag->data = &i[48]; +8003395c: 8fc20010 lw v0,16(s8) +80033960: 00000000 nop +80033964: 24430030 addiu v1,v0,48 +80033968: 8fc20020 lw v0,32(s8) +8003396c: 00000000 nop +80033970: ac43001c sw v1,28(v0) + + return 1; +80033974: 24020001 li v0,1 +} +80033978: 03c0e821 move sp,s8 +8003397c: 8fbf001c lw ra,28(sp) +80033980: 8fbe0018 lw s8,24(sp) +80033984: 27bd0020 addiu sp,sp,32 +80033988: 03e00008 jr ra +8003398c: 00000000 nop + +80033990 <SsUploadVagEx>: + +void SsUploadVagEx(SsVag *vag, int spu_addr) +{ +80033990: 27bdffe8 addiu sp,sp,-24 +80033994: afbf0014 sw ra,20(sp) +80033998: afbe0010 sw s8,16(sp) +8003399c: 03a0f021 move s8,sp +800339a0: afc40018 sw a0,24(s8) +800339a4: afc5001c sw a1,28(s8) + vag->spu_addr = spu_addr; +800339a8: 8fc3001c lw v1,28(s8) +800339ac: 8fc20018 lw v0,24(s8) +800339b0: 00000000 nop +800339b4: ac430020 sw v1,32(v0) + SsUpload(vag->data, vag->data_size, vag->spu_addr); +800339b8: 8fc20018 lw v0,24(s8) +800339bc: 00000000 nop +800339c0: 8c43001c lw v1,28(v0) +800339c4: 8fc20018 lw v0,24(s8) +800339c8: 00000000 nop +800339cc: 8c420004 lw v0,4(v0) +800339d0: 00000000 nop +800339d4: 00402021 move a0,v0 +800339d8: 8fc20018 lw v0,24(s8) +800339dc: 00000000 nop +800339e0: 8c420020 lw v0,32(v0) +800339e4: 00000000 nop +800339e8: 00403021 move a2,v0 +800339ec: 00802821 move a1,a0 +800339f0: 00602021 move a0,v1 +800339f4: 0c00cd35 jal 800334d4 <SsUpload> +800339f8: 00000000 nop + //spu_addr += vag->data_size; +} +800339fc: 00000000 nop +80033a00: 03c0e821 move sp,s8 +80033a04: 8fbf0014 lw ra,20(sp) +80033a08: 8fbe0010 lw s8,16(sp) +80033a0c: 27bd0018 addiu sp,sp,24 +80033a10: 03e00008 jr ra +80033a14: 00000000 nop + +80033a18 <SsUploadVag>: + +void SsUploadVag(SsVag *vag) +{ +80033a18: 27bdffe8 addiu sp,sp,-24 +80033a1c: afbf0014 sw ra,20(sp) +80033a20: afbe0010 sw s8,16(sp) +80033a24: 03a0f021 move s8,sp +80033a28: afc40018 sw a0,24(s8) + vag->spu_addr = ss_vag_addr; +80033a2c: 3c028007 lui v0,0x8007 +80033a30: 8c431cec lw v1,7404(v0) +80033a34: 8fc20018 lw v0,24(s8) +80033a38: 00000000 nop +80033a3c: ac430020 sw v1,32(v0) + SsUploadVagEx(vag, ss_vag_addr); +80033a40: 3c028007 lui v0,0x8007 +80033a44: 8c421cec lw v0,7404(v0) +80033a48: 00000000 nop +80033a4c: 00402821 move a1,v0 +80033a50: 8fc40018 lw a0,24(s8) +80033a54: 0c00ce64 jal 80033990 <SsUploadVagEx> +80033a58: 00000000 nop + ss_vag_addr += vag->data_size; +80033a5c: 8fc20018 lw v0,24(s8) +80033a60: 00000000 nop +80033a64: 8c430004 lw v1,4(v0) +80033a68: 3c028007 lui v0,0x8007 +80033a6c: 8c421cec lw v0,7404(v0) +80033a70: 00000000 nop +80033a74: 00621821 addu v1,v1,v0 +80033a78: 3c028007 lui v0,0x8007 +80033a7c: ac431cec sw v1,7404(v0) +} +80033a80: 00000000 nop +80033a84: 03c0e821 move sp,s8 +80033a88: 8fbf0014 lw ra,20(sp) +80033a8c: 8fbe0010 lw s8,16(sp) +80033a90: 27bd0018 addiu sp,sp,24 +80033a94: 03e00008 jr ra +80033a98: 00000000 nop + +80033a9c <SsPlayVag>: + +void SsPlayVag(SsVag *vag, unsigned char voice, unsigned short vl, + unsigned short vr) +{ +80033a9c: 27bdffe0 addiu sp,sp,-32 +80033aa0: afbf001c sw ra,28(sp) +80033aa4: afbe0018 sw s8,24(sp) +80033aa8: afb00014 sw s0,20(sp) +80033aac: 03a0f021 move s8,sp +80033ab0: afc40020 sw a0,32(s8) +80033ab4: 00a02021 move a0,a1 +80033ab8: 00c01821 move v1,a2 +80033abc: 00e01021 move v0,a3 +80033ac0: a3c40024 sb a0,36(s8) +80033ac4: a7c30028 sh v1,40(s8) +80033ac8: a7c2002c sh v0,44(s8) + SsVoicePitch(voice, SsFreqToPitch(vag->sample_rate)); +80033acc: 93d00024 lbu s0,36(s8) +80033ad0: 8fc20020 lw v0,32(s8) +80033ad4: 00000000 nop +80033ad8: 8c420008 lw v0,8(v0) +80033adc: 00000000 nop +80033ae0: 00402021 move a0,v0 +80033ae4: 0c00cdcb jal 8003372c <SsFreqToPitch> +80033ae8: 00000000 nop +80033aec: 00402821 move a1,v0 +80033af0: 02002021 move a0,s0 +80033af4: 0c00cbcd jal 80032f34 <SsVoicePitch> +80033af8: 00000000 nop + SsVoiceStartAddr(voice, vag->spu_addr); +80033afc: 93c30024 lbu v1,36(s8) +80033b00: 8fc20020 lw v0,32(s8) +80033b04: 00000000 nop +80033b08: 8c420020 lw v0,32(v0) +80033b0c: 00000000 nop +80033b10: 00402821 move a1,v0 +80033b14: 00602021 move a0,v1 +80033b18: 0c00cbe6 jal 80032f98 <SsVoiceStartAddr> +80033b1c: 00000000 nop + SsVoiceVol(voice, vl, vr); +80033b20: 93c20024 lbu v0,36(s8) +80033b24: 97c30028 lhu v1,40(s8) +80033b28: 97c4002c lhu a0,44(s8) +80033b2c: 00000000 nop +80033b30: 00803021 move a2,a0 +80033b34: 00602821 move a1,v1 +80033b38: 00402021 move a0,v0 +80033b3c: 0c00cbae jal 80032eb8 <SsVoiceVol> +80033b40: 00000000 nop + SsKeyOn(voice); +80033b44: 93c20024 lbu v0,36(s8) +80033b48: 00000000 nop +80033b4c: 00402021 move a0,v0 +80033b50: 0c00cc3b jal 800330ec <SsKeyOn> +80033b54: 00000000 nop + + vag->cur_voice = voice; +80033b58: 83c30024 lb v1,36(s8) +80033b5c: 8fc20020 lw v0,32(s8) +80033b60: 00000000 nop +80033b64: a0430024 sb v1,36(v0) +} +80033b68: 00000000 nop +80033b6c: 03c0e821 move sp,s8 +80033b70: 8fbf001c lw ra,28(sp) +80033b74: 8fbe0018 lw s8,24(sp) +80033b78: 8fb00014 lw s0,20(sp) +80033b7c: 27bd0020 addiu sp,sp,32 +80033b80: 03e00008 jr ra +80033b84: 00000000 nop + +80033b88 <SsStopVag>: + +void SsStopVag(SsVag *vag) +{ +80033b88: 27bdffe8 addiu sp,sp,-24 +80033b8c: afbf0014 sw ra,20(sp) +80033b90: afbe0010 sw s8,16(sp) +80033b94: 03a0f021 move s8,sp +80033b98: afc40018 sw a0,24(s8) + SsKeyOff(vag->cur_voice); +80033b9c: 8fc20018 lw v0,24(s8) +80033ba0: 00000000 nop +80033ba4: 80420024 lb v0,36(v0) +80033ba8: 00000000 nop +80033bac: 00402021 move a0,v0 +80033bb0: 0c00cc57 jal 8003315c <SsKeyOff> +80033bb4: 00000000 nop + vag->cur_voice = -1; +80033bb8: 8fc20018 lw v0,24(s8) +80033bbc: 2403ffff li v1,-1 +80033bc0: a0430024 sb v1,36(v0) +} +80033bc4: 00000000 nop +80033bc8: 03c0e821 move sp,s8 +80033bcc: 8fbf0014 lw ra,20(sp) +80033bd0: 8fbe0010 lw s8,16(sp) +80033bd4: 27bd0018 addiu sp,sp,24 +80033bd8: 03e00008 jr ra +80033bdc: 00000000 nop + +80033be0 <SsResetVagAddr>: + +void SsResetVagAddr() +{ +80033be0: 27bdfff8 addiu sp,sp,-8 +80033be4: afbe0004 sw s8,4(sp) +80033be8: 03a0f021 move s8,sp + ss_vag_addr = SPU_DATA_BASE_ADDR; +80033bec: 3c028007 lui v0,0x8007 +80033bf0: 24031010 li v1,4112 +80033bf4: ac431cec sw v1,7404(v0) +} +80033bf8: 00000000 nop +80033bfc: 03c0e821 move sp,s8 +80033c00: 8fbe0004 lw s8,4(sp) +80033c04: 27bd0008 addiu sp,sp,8 +80033c08: 03e00008 jr ra +80033c0c: 00000000 nop + +80033c10 <SsEnableCd>: + +void SsEnableCd() +{ +80033c10: 27bdffe8 addiu sp,sp,-24 +80033c14: afbf0014 sw ra,20(sp) +80033c18: afbe0010 sw s8,16(sp) +80033c1c: 03a0f021 move s8,sp + SPU_CONTROL |= 1; +80033c20: 3c021f80 lui v0,0x1f80 +80033c24: 34421daa ori v0,v0,0x1daa +80033c28: 3c031f80 lui v1,0x1f80 +80033c2c: 34631daa ori v1,v1,0x1daa +80033c30: 94630000 lhu v1,0(v1) +80033c34: 00000000 nop +80033c38: 34630001 ori v1,v1,0x1 +80033c3c: 3063ffff andi v1,v1,0xffff +80033c40: a4430000 sh v1,0(v0) + CdSendCommand(CdlDemute, 0); +80033c44: 00002821 move a1,zero +80033c48: 2404000c li a0,12 +80033c4c: 0c00aa46 jal 8002a918 <CdSendCommand> +80033c50: 00000000 nop +} +80033c54: 00000000 nop +80033c58: 03c0e821 move sp,s8 +80033c5c: 8fbf0014 lw ra,20(sp) +80033c60: 8fbe0010 lw s8,16(sp) +80033c64: 27bd0018 addiu sp,sp,24 +80033c68: 03e00008 jr ra +80033c6c: 00000000 nop + +80033c70 <SsEnableExt>: + +void SsEnableExt() +{ +80033c70: 27bdfff8 addiu sp,sp,-8 +80033c74: afbe0004 sw s8,4(sp) +80033c78: 03a0f021 move s8,sp + SPU_CONTROL |= 2; +80033c7c: 3c021f80 lui v0,0x1f80 +80033c80: 34421daa ori v0,v0,0x1daa +80033c84: 3c031f80 lui v1,0x1f80 +80033c88: 34631daa ori v1,v1,0x1daa +80033c8c: 94630000 lhu v1,0(v1) +80033c90: 00000000 nop +80033c94: 34630002 ori v1,v1,0x2 +80033c98: 3063ffff andi v1,v1,0xffff +80033c9c: a4430000 sh v1,0(v0) +} +80033ca0: 00000000 nop +80033ca4: 03c0e821 move sp,s8 +80033ca8: 8fbe0004 lw s8,4(sp) +80033cac: 27bd0008 addiu sp,sp,8 +80033cb0: 03e00008 jr ra +80033cb4: 00000000 nop + +80033cb8 <SsCdVol>: + +void SsCdVol(unsigned short left, unsigned short right) +{ +80033cb8: 27bdfff8 addiu sp,sp,-8 +80033cbc: afbe0004 sw s8,4(sp) +80033cc0: 03a0f021 move s8,sp +80033cc4: 00801821 move v1,a0 +80033cc8: 00a01021 move v0,a1 +80033ccc: a7c30008 sh v1,8(s8) +80033cd0: a7c2000c sh v0,12(s8) + SPU_CD_MVOL_L = left; +80033cd4: 3c021f80 lui v0,0x1f80 +80033cd8: 34421db0 ori v0,v0,0x1db0 +80033cdc: 97c30008 lhu v1,8(s8) +80033ce0: 00000000 nop +80033ce4: a4430000 sh v1,0(v0) + SPU_CD_MVOL_R = right; +80033ce8: 3c021f80 lui v0,0x1f80 +80033cec: 34421db2 ori v0,v0,0x1db2 +80033cf0: 97c3000c lhu v1,12(s8) +80033cf4: 00000000 nop +80033cf8: a4430000 sh v1,0(v0) +} +80033cfc: 00000000 nop +80033d00: 03c0e821 move sp,s8 +80033d04: 8fbe0004 lw s8,4(sp) +80033d08: 27bd0008 addiu sp,sp,8 +80033d0c: 03e00008 jr ra +80033d10: 00000000 nop + +80033d14 <SIOStart>: +#include <psx.h> +#include <psxsio.h> +#include <stdio.h> + +void SIOStart(int bitrate) +{ +80033d14: 27bdffe8 addiu sp,sp,-24 +80033d18: afbf0014 sw ra,20(sp) +80033d1c: afbe0010 sw s8,16(sp) +80033d20: 03a0f021 move s8,sp +80033d24: afc40018 sw a0,24(s8) + /*Set to 8N1 mode with desired bitrate*/ + SIOStartEx(bitrate, SIO_DATA_LEN_8, SIO_PARITY_NONE, SIO_STOP_BIT_1); +80033d28: 24070001 li a3,1 +80033d2c: 00003021 move a2,zero +80033d30: 24050003 li a1,3 +80033d34: 8fc40018 lw a0,24(s8) +80033d38: 0c00cf57 jal 80033d5c <SIOStartEx> +80033d3c: 00000000 nop +} +80033d40: 00000000 nop +80033d44: 03c0e821 move sp,s8 +80033d48: 8fbf0014 lw ra,20(sp) +80033d4c: 8fbe0010 lw s8,16(sp) +80033d50: 27bd0018 addiu sp,sp,24 +80033d54: 03e00008 jr ra +80033d58: 00000000 nop + +80033d5c <SIOStartEx>: + +void SIOStartEx(int bitrate, int datalength, int parity, int stopbit) +{ +80033d5c: 27bdfff8 addiu sp,sp,-8 +80033d60: afbe0004 sw s8,4(sp) +80033d64: 03a0f021 move s8,sp +80033d68: afc40008 sw a0,8(s8) +80033d6c: afc5000c sw a1,12(s8) +80033d70: afc60010 sw a2,16(s8) +80033d74: afc70014 sw a3,20(s8) + /*Set SIO_MODE register, bitrate reload factor set to MUL16 by default*/ + SIO_MODE = SIO_REL_MUL16 | (datalength << 2) | (parity << 4) | (stopbit << 6); +80033d78: 3c021f80 lui v0,0x1f80 +80033d7c: 34421058 ori v0,v0,0x1058 +80033d80: 8fc3000c lw v1,12(s8) +80033d84: 00000000 nop +80033d88: 00031880 sll v1,v1,0x2 +80033d8c: 00031c00 sll v1,v1,0x10 +80033d90: 00031c03 sra v1,v1,0x10 +80033d94: 34630002 ori v1,v1,0x2 +80033d98: 00032400 sll a0,v1,0x10 +80033d9c: 00042403 sra a0,a0,0x10 +80033da0: 8fc30010 lw v1,16(s8) +80033da4: 00000000 nop +80033da8: 00031900 sll v1,v1,0x4 +80033dac: 00031c00 sll v1,v1,0x10 +80033db0: 00031c03 sra v1,v1,0x10 +80033db4: 00831825 or v1,a0,v1 +80033db8: 00032400 sll a0,v1,0x10 +80033dbc: 00042403 sra a0,a0,0x10 +80033dc0: 8fc30014 lw v1,20(s8) +80033dc4: 00000000 nop +80033dc8: 00031980 sll v1,v1,0x6 +80033dcc: 00031c00 sll v1,v1,0x10 +80033dd0: 00031c03 sra v1,v1,0x10 +80033dd4: 00831825 or v1,a0,v1 +80033dd8: 00031c00 sll v1,v1,0x10 +80033ddc: 00031c03 sra v1,v1,0x10 +80033de0: 3063ffff andi v1,v1,0xffff +80033de4: a4430000 sh v1,0(v0) + + /*Reset SIO_CTRL register.*/ + SIO_CTRL = 0; +80033de8: 3c021f80 lui v0,0x1f80 +80033dec: 3442105a ori v0,v0,0x105a +80033df0: a4400000 sh zero,0(v0) + + /*Set TX and RT to enabled, no handshaking signals.*/ + SIO_CTRL = 1 | (1 << 2); +80033df4: 3c021f80 lui v0,0x1f80 +80033df8: 3442105a ori v0,v0,0x105a +80033dfc: 24030005 li v1,5 +80033e00: a4430000 sh v1,0(v0) + + /*Calculate bitrate reload value based on the given bitrate + * Reload = SystemClock (33 Mhz) / (Factor (MULI16) * bitrate)*/ + SIO_BPSV = 0x204CC00 / (16 * bitrate); +80033e04: 3c021f80 lui v0,0x1f80 +80033e08: 3442105e ori v0,v0,0x105e +80033e0c: 8fc30008 lw v1,8(s8) +80033e10: 00000000 nop +80033e14: 00031900 sll v1,v1,0x4 +80033e18: 3c040204 lui a0,0x204 +80033e1c: 3484cc00 ori a0,a0,0xcc00 +80033e20: 14600002 bnez v1,80033e2c <SIOStartEx+0xd0> +80033e24: 0083001a div zero,a0,v1 +80033e28: 0007000d break 0x7 +80033e2c: 00001810 mfhi v1 +80033e30: 00001812 mflo v1 +80033e34: 3063ffff andi v1,v1,0xffff +80033e38: a4430000 sh v1,0(v0) +} +80033e3c: 00000000 nop +80033e40: 03c0e821 move sp,s8 +80033e44: 8fbe0004 lw s8,4(sp) +80033e48: 27bd0008 addiu sp,sp,8 +80033e4c: 03e00008 jr ra +80033e50: 00000000 nop + +80033e54 <SIOStop>: + +void SIOStop() +{ +80033e54: 27bdfff8 addiu sp,sp,-8 +80033e58: afbe0004 sw s8,4(sp) +80033e5c: 03a0f021 move s8,sp + /*Set all SIO related registers to zero*/ + SIO_MODE = 0; +80033e60: 3c021f80 lui v0,0x1f80 +80033e64: 34421058 ori v0,v0,0x1058 +80033e68: a4400000 sh zero,0(v0) + SIO_CTRL = 0; +80033e6c: 3c021f80 lui v0,0x1f80 +80033e70: 3442105a ori v0,v0,0x105a +80033e74: a4400000 sh zero,0(v0) + SIO_BPSV = 0; +80033e78: 3c021f80 lui v0,0x1f80 +80033e7c: 3442105e ori v0,v0,0x105e +80033e80: a4400000 sh zero,0(v0) +} +80033e84: 00000000 nop +80033e88: 03c0e821 move sp,s8 +80033e8c: 8fbe0004 lw s8,4(sp) +80033e90: 27bd0008 addiu sp,sp,8 +80033e94: 03e00008 jr ra +80033e98: 00000000 nop + +80033e9c <SIOReadByte>: + +unsigned char SIOReadByte() +{ +80033e9c: 27bdfff8 addiu sp,sp,-8 +80033ea0: afbe0004 sw s8,4(sp) +80033ea4: 03a0f021 move s8,sp + return (unsigned char)SIO_TX_RX; +80033ea8: 3c021f80 lui v0,0x1f80 +80033eac: 34421050 ori v0,v0,0x1050 +80033eb0: 90420000 lbu v0,0(v0) +80033eb4: 00000000 nop +80033eb8: 304200ff andi v0,v0,0xff +} +80033ebc: 03c0e821 move sp,s8 +80033ec0: 8fbe0004 lw s8,4(sp) +80033ec4: 27bd0008 addiu sp,sp,8 +80033ec8: 03e00008 jr ra +80033ecc: 00000000 nop + +80033ed0 <SIOSendByte>: + +void SIOSendByte(unsigned char data) +{ +80033ed0: 27bdfff8 addiu sp,sp,-8 +80033ed4: afbe0004 sw s8,4(sp) +80033ed8: 03a0f021 move s8,sp +80033edc: 00801021 move v0,a0 +80033ee0: a3c20008 sb v0,8(s8) + SIO_TX_RX = data; +80033ee4: 3c021f80 lui v0,0x1f80 +80033ee8: 34421050 ori v0,v0,0x1050 +80033eec: 93c30008 lbu v1,8(s8) +80033ef0: 00000000 nop +80033ef4: a0430000 sb v1,0(v0) +} +80033ef8: 00000000 nop +80033efc: 03c0e821 move sp,s8 +80033f00: 8fbe0004 lw s8,4(sp) +80033f04: 27bd0008 addiu sp,sp,8 +80033f08: 03e00008 jr ra +80033f0c: 00000000 nop + +80033f10 <SIOCheckInBuffer>: + +int SIOCheckInBuffer() +{ +80033f10: 27bdfff8 addiu sp,sp,-8 +80033f14: afbe0004 sw s8,4(sp) +80033f18: 03a0f021 move s8,sp + /*Return status of RX FIFO*/ + return (SIO_STAT & 0x2)>0; +80033f1c: 3c021f80 lui v0,0x1f80 +80033f20: 34421054 ori v0,v0,0x1054 +80033f24: 94420000 lhu v0,0(v0) +80033f28: 00000000 nop +80033f2c: 3042ffff andi v0,v0,0xffff +80033f30: 30420002 andi v0,v0,0x2 +80033f34: 0002102a slt v0,zero,v0 +80033f38: 304200ff andi v0,v0,0xff +} +80033f3c: 03c0e821 move sp,s8 +80033f40: 8fbe0004 lw s8,4(sp) +80033f44: 27bd0008 addiu sp,sp,8 +80033f48: 03e00008 jr ra +80033f4c: 00000000 nop + +80033f50 <SIOCheckOutBuffer>: + +int SIOCheckOutBuffer() +{ +80033f50: 27bdfff8 addiu sp,sp,-8 +80033f54: afbe0004 sw s8,4(sp) +80033f58: 03a0f021 move s8,sp + /*Return status of TX Ready flag*/ + return (SIO_STAT & 0x4)>0; +80033f5c: 3c021f80 lui v0,0x1f80 +80033f60: 34421054 ori v0,v0,0x1054 +80033f64: 94420000 lhu v0,0(v0) +80033f68: 00000000 nop +80033f6c: 3042ffff andi v0,v0,0xffff +80033f70: 30420004 andi v0,v0,0x4 +80033f74: 0002102a slt v0,zero,v0 +80033f78: 304200ff andi v0,v0,0xff +} +80033f7c: 03c0e821 move sp,s8 +80033f80: 8fbe0004 lw s8,4(sp) +80033f84: 27bd0008 addiu sp,sp,8 +80033f88: 03e00008 jr ra +80033f8c: 00000000 nop + +80033f90 <PSX_InitEx>: + + +extern void SetCDROMHandler(void); + +void PSX_InitEx(unsigned int flags) +{ +80033f90: 27bdffe8 addiu sp,sp,-24 +80033f94: afbf0014 sw ra,20(sp) +80033f98: afbe0010 sw s8,16(sp) +80033f9c: 03a0f021 move s8,sp +80033fa0: afc40018 sw a0,24(s8) + if(flags & PSX_INIT_NOBIOS) +80033fa4: 8fc20018 lw v0,24(s8) +80033fa8: 00000000 nop +80033fac: 30420004 andi v0,v0,0x4 +80033fb0: 10400009 beqz v0,80033fd8 <PSX_InitEx+0x48> +80033fb4: 00000000 nop + { + printf("Entering No BIOS mode...\n"); +80033fb8: 3c028004 lui v0,0x8004 +80033fbc: 2444fe18 addiu a0,v0,-488 +80033fc0: 0c00ed8f jal 8003b63c <printf> +80033fc4: 00000000 nop + + __PSX_Init_NoBios(); +80033fc8: 0c00ef30 jal 8003bcc0 <__PSX_Init_NoBios> +80033fcc: 00000000 nop + goto _initex_end; +80033fd0: 10000033 b 800340a0 <PSX_InitEx+0x110> +80033fd4: 00000000 nop + } + + if(flags & PSX_INIT_SAVESTATE) +80033fd8: 8fc20018 lw v0,24(s8) +80033fdc: 00000000 nop +80033fe0: 30420002 andi v0,v0,0x2 +80033fe4: 10400012 beqz v0,80034030 <PSX_InitEx+0xa0> +80033fe8: 00000000 nop + { +// Save BIOS state +// This simply copies the entire section of RAM used by the BIOS +// in a buffer. + EnterCriticalSection(); +80033fec: 0c00ee04 jal 8003b810 <EnterCriticalSection> +80033ff0: 00000000 nop + psxBiosState = malloc(0x10000); +80033ff4: 3c040001 lui a0,0x1 +80033ff8: 0c00ac10 jal 8002b040 <malloc> +80033ffc: 00000000 nop +80034000: 00401821 move v1,v0 +80034004: 3c028007 lui v0,0x8007 +80034008: ac431d04 sw v1,7428(v0) + memcpy(psxBiosState, (void*)0x80000000, 0x10000); +8003400c: 3c028007 lui v0,0x8007 +80034010: 8c421d04 lw v0,7428(v0) +80034014: 3c060001 lui a2,0x1 +80034018: 3c058000 lui a1,0x8000 +8003401c: 00402021 move a0,v0 +80034020: 0c00d75e jal 80035d78 <memcpy> +80034024: 00000000 nop + ExitCriticalSection(); +80034028: 0c00ee0a jal 8003b828 <ExitCriticalSection> +8003402c: 00000000 nop + } + + /* Reinitialize ISO 9660 filesystem driver */ + + if(flags & PSX_INIT_CD) +80034030: 8fc20018 lw v0,24(s8) +80034034: 00000000 nop +80034038: 30420001 andi v0,v0,0x1 +8003403c: 1040000b beqz v0,8003406c <PSX_InitEx+0xdc> +80034040: 00000000 nop + { + EnterCriticalSection(); +80034044: 0c00ee04 jal 8003b810 <EnterCriticalSection> +80034048: 00000000 nop + _96_remove(); +8003404c: 0c00ee1c jal 8003b870 <_96_remove> +80034050: 00000000 nop + ExitCriticalSection(); +80034054: 0c00ee0a jal 8003b828 <ExitCriticalSection> +80034058: 00000000 nop + + _96_init(); +8003405c: 0c00ee18 jal 8003b860 <_96_init> +80034060: 00000000 nop + + SetCDROMHandler(); +80034064: 0c00ee58 jal 8003b960 <SetCDROMHandler> +80034068: 00000000 nop + /*This is needed, otherwise PSX will crash when VBlank handler is set*/ + /*InitCARD(1); + StartCARD(); + StopCARD();*/ + + if(flags & PSX_INIT_CD) +8003406c: 8fc20018 lw v0,24(s8) +80034070: 00000000 nop +80034074: 30420001 andi v0,v0,0x1 +80034078: 10400003 beqz v0,80034088 <PSX_InitEx+0xf8> +8003407c: 00000000 nop + _internal_cdromlib_init(); +80034080: 0c00ab31 jal 8002acc4 <_internal_cdromlib_init> +80034084: 00000000 nop + + printf("PSXSDK testing version !!!\n"); +80034088: 3c028004 lui v0,0x8004 +8003408c: 2444fe34 addiu a0,v0,-460 +80034090: 0c00ed8f jal 8003b63c <printf> +80034094: 00000000 nop + + vblank_handler_set = 0; +80034098: 3c028007 lui v0,0x8007 +8003409c: ac401cf0 sw zero,7408(v0) +_initex_end: + psxSdkFlags = flags; +800340a0: 3c028007 lui v0,0x8007 +800340a4: 8fc30018 lw v1,24(s8) +800340a8: 00000000 nop +800340ac: ac431d00 sw v1,7424(v0) +} +800340b0: 00000000 nop +800340b4: 03c0e821 move sp,s8 +800340b8: 8fbf0014 lw ra,20(sp) +800340bc: 8fbe0010 lw s8,16(sp) +800340c0: 27bd0018 addiu sp,sp,24 +800340c4: 03e00008 jr ra +800340c8: 00000000 nop + +800340cc <PSX_Init>: + +void PSX_Init(void) +{ +800340cc: 27bdffe8 addiu sp,sp,-24 +800340d0: afbf0014 sw ra,20(sp) +800340d4: afbe0010 sw s8,16(sp) +800340d8: 03a0f021 move s8,sp + PSX_InitEx(PSX_INIT_CD); +800340dc: 24040001 li a0,1 +800340e0: 0c00cfe4 jal 80033f90 <PSX_InitEx> +800340e4: 00000000 nop +} +800340e8: 00000000 nop +800340ec: 03c0e821 move sp,s8 +800340f0: 8fbf0014 lw ra,20(sp) +800340f4: 8fbe0010 lw s8,16(sp) +800340f8: 27bd0018 addiu sp,sp,24 +800340fc: 03e00008 jr ra +80034100: 00000000 nop + +80034104 <PSX_DeInit>: + +void PSX_DeInit(void) +{ +80034104: 27bdffe8 addiu sp,sp,-24 +80034108: afbf0014 sw ra,20(sp) +8003410c: afbe0010 sw s8,16(sp) +80034110: 03a0f021 move s8,sp + if(psxSdkFlags & PSX_INIT_CD) +80034114: 3c028007 lui v0,0x8007 +80034118: 8c421d00 lw v0,7424(v0) +8003411c: 00000000 nop +80034120: 30420001 andi v0,v0,0x1 +80034124: 10400007 beqz v0,80034144 <PSX_DeInit+0x40> +80034128: 00000000 nop + { + EnterCriticalSection(); +8003412c: 0c00ee04 jal 8003b810 <EnterCriticalSection> +80034130: 00000000 nop + _96_remove(); +80034134: 0c00ee1c jal 8003b870 <_96_remove> +80034138: 00000000 nop + ExitCriticalSection(); +8003413c: 0c00ee0a jal 8003b828 <ExitCriticalSection> +80034140: 00000000 nop + } + + RemoveVBlankHandler(); +80034144: 0c00d3ad jal 80034eb4 <RemoveVBlankHandler> +80034148: 00000000 nop + + if(psxSdkFlags & PSX_INIT_SAVESTATE)// This must always be the last to be called! +8003414c: 3c028007 lui v0,0x8007 +80034150: 8c421d00 lw v0,7424(v0) +80034154: 00000000 nop +80034158: 30420002 andi v0,v0,0x2 +8003415c: 10400003 beqz v0,8003416c <PSX_DeInit+0x68> +80034160: 00000000 nop + PSX_RestoreBiosState(); +80034164: 0c00d4a5 jal 80035294 <PSX_RestoreBiosState> +80034168: 00000000 nop +} +8003416c: 00000000 nop +80034170: 03c0e821 move sp,s8 +80034174: 8fbf0014 lw ra,20(sp) +80034178: 8fbe0010 lw s8,16(sp) +8003417c: 27bd0018 addiu sp,sp,24 +80034180: 03e00008 jr ra +80034184: 00000000 nop + +80034188 <PSX_ReadPad>: + +void PSX_ReadPad(unsigned short *padbuf, unsigned short *padbuf2) +{ +80034188: 27bdffc0 addiu sp,sp,-64 +8003418c: afbf003c sw ra,60(sp) +80034190: afbe0038 sw s8,56(sp) +80034194: 03a0f021 move s8,sp +80034198: afc40040 sw a0,64(s8) +8003419c: afc50044 sw a1,68(s8) + int x; + unsigned char arr[PAD_READ_RAW_SIZE]; + unsigned short *padbuf_a[2]; + +// Now uses low level pad routines... + padbuf_a[0] = padbuf; +800341a0: 8fc20040 lw v0,64(s8) +800341a4: 00000000 nop +800341a8: afc2002c sw v0,44(s8) + padbuf_a[1] = padbuf2; +800341ac: 8fc20044 lw v0,68(s8) +800341b0: 00000000 nop +800341b4: afc20030 sw v0,48(s8) + + for(x = 0; x < 2; x++) +800341b8: afc00010 sw zero,16(s8) +800341bc: 1000003e b 800342b8 <PSX_ReadPad+0x130> +800341c0: 00000000 nop + { + pad_read_raw(x, arr); +800341c4: 27c20014 addiu v0,s8,20 +800341c8: 00402821 move a1,v0 +800341cc: 8fc40010 lw a0,16(s8) +800341d0: 0c00c9e9 jal 800327a4 <pad_read_raw> +800341d4: 00000000 nop + + if(arr[2] == 0x5a) +800341d8: 93c30016 lbu v1,22(s8) +800341dc: 2402005a li v0,90 +800341e0: 14620029 bne v1,v0,80034288 <PSX_ReadPad+0x100> +800341e4: 00000000 nop + { + *padbuf_a[x] = (arr[3]<<8)|arr[4]; +800341e8: 8fc20010 lw v0,16(s8) +800341ec: 00000000 nop +800341f0: 00021080 sll v0,v0,0x2 +800341f4: 27c30010 addiu v1,s8,16 +800341f8: 00621021 addu v0,v1,v0 +800341fc: 8c42001c lw v0,28(v0) +80034200: 93c30017 lbu v1,23(s8) +80034204: 00000000 nop +80034208: 00031a00 sll v1,v1,0x8 +8003420c: 00032400 sll a0,v1,0x10 +80034210: 00042403 sra a0,a0,0x10 +80034214: 93c30018 lbu v1,24(s8) +80034218: 00000000 nop +8003421c: 00031c00 sll v1,v1,0x10 +80034220: 00031c03 sra v1,v1,0x10 +80034224: 00831825 or v1,a0,v1 +80034228: 00031c00 sll v1,v1,0x10 +8003422c: 00031c03 sra v1,v1,0x10 +80034230: 3063ffff andi v1,v1,0xffff +80034234: a4430000 sh v1,0(v0) + *padbuf_a[x] = ~*padbuf_a[x]; +80034238: 8fc20010 lw v0,16(s8) +8003423c: 00000000 nop +80034240: 00021080 sll v0,v0,0x2 +80034244: 27c30010 addiu v1,s8,16 +80034248: 00621021 addu v0,v1,v0 +8003424c: 8c43001c lw v1,28(v0) +80034250: 8fc20010 lw v0,16(s8) +80034254: 00000000 nop +80034258: 00021080 sll v0,v0,0x2 +8003425c: 27c40010 addiu a0,s8,16 +80034260: 00821021 addu v0,a0,v0 +80034264: 8c42001c lw v0,28(v0) +80034268: 00000000 nop +8003426c: 94420000 lhu v0,0(v0) +80034270: 00000000 nop +80034274: 00021027 nor v0,zero,v0 +80034278: 3042ffff andi v0,v0,0xffff +8003427c: a4620000 sh v0,0(v1) +80034280: 10000009 b 800342a8 <PSX_ReadPad+0x120> +80034284: 00000000 nop + } + else + *padbuf_a[x] = 0; +80034288: 8fc20010 lw v0,16(s8) +8003428c: 00000000 nop +80034290: 00021080 sll v0,v0,0x2 +80034294: 27c30010 addiu v1,s8,16 +80034298: 00621021 addu v0,v1,v0 +8003429c: 8c42001c lw v0,28(v0) +800342a0: 00000000 nop +800342a4: a4400000 sh zero,0(v0) + +// Now uses low level pad routines... + padbuf_a[0] = padbuf; + padbuf_a[1] = padbuf2; + + for(x = 0; x < 2; x++) +800342a8: 8fc20010 lw v0,16(s8) +800342ac: 00000000 nop +800342b0: 24420001 addiu v0,v0,1 +800342b4: afc20010 sw v0,16(s8) +800342b8: 8fc20010 lw v0,16(s8) +800342bc: 00000000 nop +800342c0: 28420002 slti v0,v0,2 +800342c4: 1440ffbf bnez v0,800341c4 <PSX_ReadPad+0x3c> +800342c8: 00000000 nop + *padbuf_a[x] = ~*padbuf_a[x]; + } + else + *padbuf_a[x] = 0; + } +} +800342cc: 00000000 nop +800342d0: 03c0e821 move sp,s8 +800342d4: 8fbf003c lw ra,60(sp) +800342d8: 8fbe0038 lw s8,56(sp) +800342dc: 27bd0040 addiu sp,sp,64 +800342e0: 03e00008 jr ra +800342e4: 00000000 nop + +800342e8 <PSX_PollPad_Fast>: + +unsigned char psxsdkPadArr[PAD_READ_RAW_SIZE]; + +void PSX_PollPad_Fast(int pad_num, psx_pad_state *pad_state) +{ +800342e8: 27bdfff0 addiu sp,sp,-16 +800342ec: afbe000c sw s8,12(sp) +800342f0: 03a0f021 move s8,sp +800342f4: afc40010 sw a0,16(s8) +800342f8: afc50014 sw a1,20(s8) + pad_read_raw(pad_num, arr);*/ + + //Rely on pad_read_raw being called AFTER PSX_ReadPad(), + //so that pad_read_raw is only called once. + + unsigned char *arr = psxsdkPadArr; +800342fc: 3c028007 lui v0,0x8007 +80034300: 24421bd0 addiu v0,v0,7120 +80034304: afc20000 sw v0,0(s8) + + pad_state->status = arr[0]; +80034308: 8fc20000 lw v0,0(s8) +8003430c: 00000000 nop +80034310: 90430000 lbu v1,0(v0) +80034314: 8fc20014 lw v0,20(s8) +80034318: 00000000 nop +8003431c: a0430000 sb v1,0(v0) + pad_state->id = arr[1]; +80034320: 8fc20000 lw v0,0(s8) +80034324: 00000000 nop +80034328: 90430001 lbu v1,1(v0) +8003432c: 8fc20014 lw v0,20(s8) +80034330: 00000000 nop +80034334: a0430001 sb v1,1(v0) + + pad_state->buttons = (arr[3]<<8)|arr[4]; +80034338: 8fc20000 lw v0,0(s8) +8003433c: 00000000 nop +80034340: 24420003 addiu v0,v0,3 +80034344: 90420000 lbu v0,0(v0) +80034348: 00000000 nop +8003434c: 00021200 sll v0,v0,0x8 +80034350: 00021c00 sll v1,v0,0x10 +80034354: 00031c03 sra v1,v1,0x10 +80034358: 8fc20000 lw v0,0(s8) +8003435c: 00000000 nop +80034360: 24420004 addiu v0,v0,4 +80034364: 90420000 lbu v0,0(v0) +80034368: 00000000 nop +8003436c: 00021400 sll v0,v0,0x10 +80034370: 00021403 sra v0,v0,0x10 +80034374: 00621025 or v0,v1,v0 +80034378: 00021400 sll v0,v0,0x10 +8003437c: 00021403 sra v0,v0,0x10 +80034380: 3043ffff andi v1,v0,0xffff +80034384: 8fc20014 lw v0,20(s8) +80034388: 00000000 nop +8003438c: a4430004 sh v1,4(v0) + pad_state->buttons = ~pad_state->buttons; +80034390: 8fc20014 lw v0,20(s8) +80034394: 00000000 nop +80034398: 94420004 lhu v0,4(v0) +8003439c: 00000000 nop +800343a0: 00021027 nor v0,zero,v0 +800343a4: 3043ffff andi v1,v0,0xffff +800343a8: 8fc20014 lw v0,20(s8) +800343ac: 00000000 nop +800343b0: a4430004 sh v1,4(v0) + + //dprintf("Pad Status: 0x%.2X\n",pad_state->status); + + switch(pad_state->id) +800343b4: 8fc20014 lw v0,20(s8) +800343b8: 00000000 nop +800343bc: 90420001 lbu v0,1(v0) +800343c0: 24030041 li v1,65 +800343c4: 1043001f beq v0,v1,80034444 <PSX_PollPad_Fast+0x15c> +800343c8: 00000000 nop +800343cc: 28430042 slti v1,v0,66 +800343d0: 1060000c beqz v1,80034404 <PSX_PollPad_Fast+0x11c> +800343d4: 00000000 nop +800343d8: 24030023 li v1,35 +800343dc: 10430088 beq v0,v1,80034600 <PSX_PollPad_Fast+0x318> +800343e0: 00000000 nop +800343e4: 24030031 li v1,49 +800343e8: 104300a8 beq v0,v1,8003468c <PSX_PollPad_Fast+0x3a4> +800343ec: 00000000 nop +800343f0: 24030012 li v1,18 +800343f4: 104300aa beq v0,v1,800346a0 <PSX_PollPad_Fast+0x3b8> +800343f8: 00000000 nop +800343fc: 100000ad b 800346b4 <PSX_PollPad_Fast+0x3cc> +80034400: 00000000 nop +80034404: 24030073 li v1,115 +80034408: 10430048 beq v0,v1,8003452c <PSX_PollPad_Fast+0x244> +8003440c: 00000000 nop +80034410: 240300ff li v1,255 +80034414: 10430006 beq v0,v1,80034430 <PSX_PollPad_Fast+0x148> +80034418: 00000000 nop +8003441c: 24030053 li v1,83 +80034420: 1043000d beq v0,v1,80034458 <PSX_PollPad_Fast+0x170> +80034424: 00000000 nop +80034428: 100000a2 b 800346b4 <PSX_PollPad_Fast+0x3cc> +8003442c: 00000000 nop + { + case 0xFF: + pad_state->type = PADTYPE_NONE; +80034430: 8fc20014 lw v0,20(s8) +80034434: 00000000 nop +80034438: a0400002 sb zero,2(v0) + break; +8003443c: 100000a0 b 800346c0 <PSX_PollPad_Fast+0x3d8> +80034440: 00000000 nop + case 0x41: + pad_state->type = PADTYPE_NORMALPAD; +80034444: 8fc20014 lw v0,20(s8) +80034448: 24030001 li v1,1 +8003444c: a0430002 sb v1,2(v0) + break; +80034450: 1000009b b 800346c0 <PSX_PollPad_Fast+0x3d8> +80034454: 00000000 nop + case 0x53: + pad_state->type = PADTYPE_ANALOGJOY; +80034458: 8fc20014 lw v0,20(s8) +8003445c: 24030002 li v1,2 +80034460: a0430002 sb v1,2(v0) + pad_state->extra.analogJoy.x[0] = arr[5]-128; +80034464: 8fc20000 lw v0,0(s8) +80034468: 00000000 nop +8003446c: 24420005 addiu v0,v0,5 +80034470: 90420000 lbu v0,0(v0) +80034474: 00000000 nop +80034478: 2442ff80 addiu v0,v0,-128 +8003447c: 304200ff andi v0,v0,0xff +80034480: 00021e00 sll v1,v0,0x18 +80034484: 00031e03 sra v1,v1,0x18 +80034488: 8fc20014 lw v0,20(s8) +8003448c: 00000000 nop +80034490: a0430006 sb v1,6(v0) + pad_state->extra.analogJoy.y[0] = arr[6]-128; +80034494: 8fc20000 lw v0,0(s8) +80034498: 00000000 nop +8003449c: 24420006 addiu v0,v0,6 +800344a0: 90420000 lbu v0,0(v0) +800344a4: 00000000 nop +800344a8: 2442ff80 addiu v0,v0,-128 +800344ac: 304200ff andi v0,v0,0xff +800344b0: 00021e00 sll v1,v0,0x18 +800344b4: 00031e03 sra v1,v1,0x18 +800344b8: 8fc20014 lw v0,20(s8) +800344bc: 00000000 nop +800344c0: a0430008 sb v1,8(v0) + pad_state->extra.analogJoy.x[1] = arr[7]-128; +800344c4: 8fc20000 lw v0,0(s8) +800344c8: 00000000 nop +800344cc: 24420007 addiu v0,v0,7 +800344d0: 90420000 lbu v0,0(v0) +800344d4: 00000000 nop +800344d8: 2442ff80 addiu v0,v0,-128 +800344dc: 304200ff andi v0,v0,0xff +800344e0: 00021e00 sll v1,v0,0x18 +800344e4: 00031e03 sra v1,v1,0x18 +800344e8: 8fc20014 lw v0,20(s8) +800344ec: 00000000 nop +800344f0: a0430007 sb v1,7(v0) + pad_state->extra.analogJoy.y[1] = arr[8]-128; +800344f4: 8fc20000 lw v0,0(s8) +800344f8: 00000000 nop +800344fc: 24420008 addiu v0,v0,8 +80034500: 90420000 lbu v0,0(v0) +80034504: 00000000 nop +80034508: 2442ff80 addiu v0,v0,-128 +8003450c: 304200ff andi v0,v0,0xff +80034510: 00021e00 sll v1,v0,0x18 +80034514: 00031e03 sra v1,v1,0x18 +80034518: 8fc20014 lw v0,20(s8) +8003451c: 00000000 nop +80034520: a0430009 sb v1,9(v0) + break; +80034524: 10000066 b 800346c0 <PSX_PollPad_Fast+0x3d8> +80034528: 00000000 nop + case 0x73: + pad_state->type = PADTYPE_ANALOGPAD; +8003452c: 8fc20014 lw v0,20(s8) +80034530: 24030003 li v1,3 +80034534: a0430002 sb v1,2(v0) + pad_state->extra.analogPad.x[0] = arr[5]-128; +80034538: 8fc20000 lw v0,0(s8) +8003453c: 00000000 nop +80034540: 24420005 addiu v0,v0,5 +80034544: 90420000 lbu v0,0(v0) +80034548: 00000000 nop +8003454c: 2442ff80 addiu v0,v0,-128 +80034550: 304200ff andi v0,v0,0xff +80034554: 00021e00 sll v1,v0,0x18 +80034558: 00031e03 sra v1,v1,0x18 +8003455c: 8fc20014 lw v0,20(s8) +80034560: 00000000 nop +80034564: a0430006 sb v1,6(v0) + pad_state->extra.analogPad.y[0] = arr[6]-128; +80034568: 8fc20000 lw v0,0(s8) +8003456c: 00000000 nop +80034570: 24420006 addiu v0,v0,6 +80034574: 90420000 lbu v0,0(v0) +80034578: 00000000 nop +8003457c: 2442ff80 addiu v0,v0,-128 +80034580: 304200ff andi v0,v0,0xff +80034584: 00021e00 sll v1,v0,0x18 +80034588: 00031e03 sra v1,v1,0x18 +8003458c: 8fc20014 lw v0,20(s8) +80034590: 00000000 nop +80034594: a0430008 sb v1,8(v0) + pad_state->extra.analogPad.x[1] = arr[7]-128; +80034598: 8fc20000 lw v0,0(s8) +8003459c: 00000000 nop +800345a0: 24420007 addiu v0,v0,7 +800345a4: 90420000 lbu v0,0(v0) +800345a8: 00000000 nop +800345ac: 2442ff80 addiu v0,v0,-128 +800345b0: 304200ff andi v0,v0,0xff +800345b4: 00021e00 sll v1,v0,0x18 +800345b8: 00031e03 sra v1,v1,0x18 +800345bc: 8fc20014 lw v0,20(s8) +800345c0: 00000000 nop +800345c4: a0430007 sb v1,7(v0) + pad_state->extra.analogPad.y[1] = arr[8]-128; +800345c8: 8fc20000 lw v0,0(s8) +800345cc: 00000000 nop +800345d0: 24420008 addiu v0,v0,8 +800345d4: 90420000 lbu v0,0(v0) +800345d8: 00000000 nop +800345dc: 2442ff80 addiu v0,v0,-128 +800345e0: 304200ff andi v0,v0,0xff +800345e4: 00021e00 sll v1,v0,0x18 +800345e8: 00031e03 sra v1,v1,0x18 +800345ec: 8fc20014 lw v0,20(s8) +800345f0: 00000000 nop +800345f4: a0430009 sb v1,9(v0) + break; +800345f8: 10000031 b 800346c0 <PSX_PollPad_Fast+0x3d8> +800345fc: 00000000 nop + case 0x23: + pad_state->type = PADTYPE_NEGCON; +80034600: 8fc20014 lw v0,20(s8) +80034604: 24030004 li v1,4 +80034608: a0430002 sb v1,2(v0) + pad_state->extra.negCon.steering = arr[5]-128; +8003460c: 8fc20000 lw v0,0(s8) +80034610: 00000000 nop +80034614: 24420005 addiu v0,v0,5 +80034618: 90420000 lbu v0,0(v0) +8003461c: 00000000 nop +80034620: 2442ff80 addiu v0,v0,-128 +80034624: 304200ff andi v0,v0,0xff +80034628: 00021e00 sll v1,v0,0x18 +8003462c: 00031e03 sra v1,v1,0x18 +80034630: 8fc20014 lw v0,20(s8) +80034634: 00000000 nop +80034638: a0430006 sb v1,6(v0) + pad_state->extra.negCon.one = arr[6]; +8003463c: 8fc20000 lw v0,0(s8) +80034640: 00000000 nop +80034644: 90430006 lbu v1,6(v0) +80034648: 8fc20014 lw v0,20(s8) +8003464c: 00000000 nop +80034650: a0430007 sb v1,7(v0) + pad_state->extra.negCon.two = arr[7]; +80034654: 8fc20000 lw v0,0(s8) +80034658: 00000000 nop +8003465c: 90430007 lbu v1,7(v0) +80034660: 8fc20014 lw v0,20(s8) +80034664: 00000000 nop +80034668: a0430008 sb v1,8(v0) + pad_state->extra.negCon.shoulder = arr[8]; +8003466c: 8fc20000 lw v0,0(s8) +80034670: 00000000 nop +80034674: 90430008 lbu v1,8(v0) +80034678: 8fc20014 lw v0,20(s8) +8003467c: 00000000 nop +80034680: a0430009 sb v1,9(v0) + break; +80034684: 1000000e b 800346c0 <PSX_PollPad_Fast+0x3d8> +80034688: 00000000 nop + case 0x31: + pad_state->type = PADTYPE_KONAMIGUN; +8003468c: 8fc20014 lw v0,20(s8) +80034690: 24030005 li v1,5 +80034694: a0430002 sb v1,2(v0) + break; +80034698: 10000009 b 800346c0 <PSX_PollPad_Fast+0x3d8> +8003469c: 00000000 nop + case 0x12: + pad_state->type = PADTYPE_MOUSE; +800346a0: 8fc20014 lw v0,20(s8) +800346a4: 24030006 li v1,6 +800346a8: a0430002 sb v1,2(v0) + break; +800346ac: 10000004 b 800346c0 <PSX_PollPad_Fast+0x3d8> +800346b0: 00000000 nop + default: + pad_state->type = PADTYPE_UNKNOWN; +800346b4: 8fc20014 lw v0,20(s8) +800346b8: 24030007 li v1,7 +800346bc: a0430002 sb v1,2(v0) + } +} +800346c0: 00000000 nop +800346c4: 03c0e821 move sp,s8 +800346c8: 8fbe000c lw s8,12(sp) +800346cc: 27bd0010 addiu sp,sp,16 +800346d0: 03e00008 jr ra +800346d4: 00000000 nop + +800346d8 <PSX_PollPad>: + +void PSX_PollPad(int pad_num, psx_pad_state *pad_state) +{ +800346d8: 27bdffe0 addiu sp,sp,-32 +800346dc: afbf001c sw ra,28(sp) +800346e0: afbe0018 sw s8,24(sp) +800346e4: 03a0f021 move s8,sp +800346e8: afc40020 sw a0,32(s8) +800346ec: afc50024 sw a1,36(s8) + } + else + *padbuf_a[x] = 0; + }*/ + + unsigned char *arr = psxsdkPadArr; +800346f0: 3c028007 lui v0,0x8007 +800346f4: 24421bd0 addiu v0,v0,7120 +800346f8: afc20010 sw v0,16(s8) + + pad_read_raw(pad_num, arr); +800346fc: 8fc50010 lw a1,16(s8) +80034700: 8fc40020 lw a0,32(s8) +80034704: 0c00c9e9 jal 800327a4 <pad_read_raw> +80034708: 00000000 nop + + PSX_PollPad_Fast(pad_num,pad_state); +8003470c: 8fc50024 lw a1,36(s8) +80034710: 8fc40020 lw a0,32(s8) +80034714: 0c00d0ba jal 800342e8 <PSX_PollPad_Fast> +80034718: 00000000 nop +} +8003471c: 00000000 nop +80034720: 03c0e821 move sp,s8 +80034724: 8fbf001c lw ra,28(sp) +80034728: 8fbe0018 lw s8,24(sp) +8003472c: 27bd0020 addiu sp,sp,32 +80034730: 03e00008 jr ra +80034734: 00000000 nop + +80034738 <PSX_GetSysInfo>: + return PADTYPE_UNKNOWN; +}*/ + + +void PSX_GetSysInfo(struct psx_info *info) +{ +80034738: 27bdffe0 addiu sp,sp,-32 +8003473c: afbf001c sw ra,28(sp) +80034740: afbe0018 sw s8,24(sp) +80034744: 03a0f021 move s8,sp +80034748: afc40020 sw a0,32(s8) + unsigned long i,i2; + + info->kernel.version = GetKernelRomVersion(); +8003474c: 0c00edb6 jal 8003b6d8 <GetKernelRomVersion> +80034750: 00000000 nop +80034754: 00401821 move v1,v0 +80034758: 8fc20020 lw v0,32(s8) +8003475c: 00000000 nop +80034760: ac430000 sw v1,0(v0) + + i = GetKernelDate(); +80034764: 0c00edb1 jal 8003b6c4 <GetKernelDate> +80034768: 00000000 nop +8003476c: afc20010 sw v0,16(s8) + +/* + * Convert year from BCD to decimal + */ + + i2 = i >> 16; +80034770: 8fc20010 lw v0,16(s8) +80034774: 00000000 nop +80034778: 00021402 srl v0,v0,0x10 +8003477c: afc20014 sw v0,20(s8) + + info->kernel.year = i2 & 0xf; +80034780: 8fc20014 lw v0,20(s8) +80034784: 00000000 nop +80034788: 3043000f andi v1,v0,0xf +8003478c: 8fc20020 lw v0,32(s8) +80034790: 00000000 nop +80034794: ac430004 sw v1,4(v0) + info->kernel.year+= ((i2>>4)&0xf)*10; +80034798: 8fc20020 lw v0,32(s8) +8003479c: 00000000 nop +800347a0: 8c420004 lw v0,4(v0) +800347a4: 00000000 nop +800347a8: 00402021 move a0,v0 +800347ac: 8fc20014 lw v0,20(s8) +800347b0: 00000000 nop +800347b4: 00021102 srl v0,v0,0x4 +800347b8: 3042000f andi v0,v0,0xf +800347bc: 00021040 sll v0,v0,0x1 +800347c0: 00021880 sll v1,v0,0x2 +800347c4: 00431021 addu v0,v0,v1 +800347c8: 00821021 addu v0,a0,v0 +800347cc: 00401821 move v1,v0 +800347d0: 8fc20020 lw v0,32(s8) +800347d4: 00000000 nop +800347d8: ac430004 sw v1,4(v0) + info->kernel.year+= ((i2>>8)&0xf)*100; +800347dc: 8fc20020 lw v0,32(s8) +800347e0: 00000000 nop +800347e4: 8c420004 lw v0,4(v0) +800347e8: 00000000 nop +800347ec: 00402021 move a0,v0 +800347f0: 8fc20014 lw v0,20(s8) +800347f4: 00000000 nop +800347f8: 00021202 srl v0,v0,0x8 +800347fc: 3042000f andi v0,v0,0xf +80034800: 00021080 sll v0,v0,0x2 +80034804: 00021880 sll v1,v0,0x2 +80034808: 00431021 addu v0,v0,v1 +8003480c: 00021880 sll v1,v0,0x2 +80034810: 00431021 addu v0,v0,v1 +80034814: 00821021 addu v0,a0,v0 +80034818: 00401821 move v1,v0 +8003481c: 8fc20020 lw v0,32(s8) +80034820: 00000000 nop +80034824: ac430004 sw v1,4(v0) + info->kernel.year+= ((i2>>12)&0xf)*1000; +80034828: 8fc20020 lw v0,32(s8) +8003482c: 00000000 nop +80034830: 8c420004 lw v0,4(v0) +80034834: 00000000 nop +80034838: 00402821 move a1,v0 +8003483c: 8fc20014 lw v0,20(s8) +80034840: 00000000 nop +80034844: 00021302 srl v0,v0,0xc +80034848: 3044000f andi a0,v0,0xf +8003484c: 00801821 move v1,a0 +80034850: 00031080 sll v0,v1,0x2 +80034854: 00401821 move v1,v0 +80034858: 00031140 sll v0,v1,0x5 +8003485c: 00431023 subu v0,v0,v1 +80034860: 00441021 addu v0,v0,a0 +80034864: 000210c0 sll v0,v0,0x3 +80034868: 00a21021 addu v0,a1,v0 +8003486c: 00401821 move v1,v0 +80034870: 8fc20020 lw v0,32(s8) +80034874: 00000000 nop +80034878: ac430004 sw v1,4(v0) + +/* + * Convert month from BCD to decimal + */ + i2 = (i >> 8) & 0xff; +8003487c: 8fc20010 lw v0,16(s8) +80034880: 00000000 nop +80034884: 00021202 srl v0,v0,0x8 +80034888: 304200ff andi v0,v0,0xff +8003488c: afc20014 sw v0,20(s8) + + info->kernel.month = i2 & 0xf; +80034890: 8fc20014 lw v0,20(s8) +80034894: 00000000 nop +80034898: 3043000f andi v1,v0,0xf +8003489c: 8fc20020 lw v0,32(s8) +800348a0: 00000000 nop +800348a4: ac430008 sw v1,8(v0) + info->kernel.month+= (i2>>4) * 10; +800348a8: 8fc20020 lw v0,32(s8) +800348ac: 00000000 nop +800348b0: 8c420008 lw v0,8(v0) +800348b4: 00000000 nop +800348b8: 00402021 move a0,v0 +800348bc: 8fc20014 lw v0,20(s8) +800348c0: 00000000 nop +800348c4: 00021102 srl v0,v0,0x4 +800348c8: 00021040 sll v0,v0,0x1 +800348cc: 00021880 sll v1,v0,0x2 +800348d0: 00431021 addu v0,v0,v1 +800348d4: 00821021 addu v0,a0,v0 +800348d8: 00401821 move v1,v0 +800348dc: 8fc20020 lw v0,32(s8) +800348e0: 00000000 nop +800348e4: ac430008 sw v1,8(v0) + +/* + * Convert day from BCD to decimal + */ + i2 = i & 0xff; +800348e8: 8fc20010 lw v0,16(s8) +800348ec: 00000000 nop +800348f0: 304200ff andi v0,v0,0xff +800348f4: afc20014 sw v0,20(s8) + + info->kernel.day = i2 & 0xf; +800348f8: 8fc20014 lw v0,20(s8) +800348fc: 00000000 nop +80034900: 3043000f andi v1,v0,0xf +80034904: 8fc20020 lw v0,32(s8) +80034908: 00000000 nop +8003490c: ac43000c sw v1,12(v0) + info->kernel.day+= (i2>>4) * 10; +80034910: 8fc20020 lw v0,32(s8) +80034914: 00000000 nop +80034918: 8c42000c lw v0,12(v0) +8003491c: 00000000 nop +80034920: 00402021 move a0,v0 +80034924: 8fc20014 lw v0,20(s8) +80034928: 00000000 nop +8003492c: 00021102 srl v0,v0,0x4 +80034930: 00021040 sll v0,v0,0x1 +80034934: 00021880 sll v1,v0,0x2 +80034938: 00431021 addu v0,v0,v1 +8003493c: 00821021 addu v0,a0,v0 +80034940: 00401821 move v1,v0 +80034944: 8fc20020 lw v0,32(s8) +80034948: 00000000 nop +8003494c: ac43000c sw v1,12(v0) +/* + * Unless we receive something in the range >= 1 && <= 16, + * RAM size will be reported as 2 Megabytes + */ + + i = GetRamSize(); +80034950: 0c00edbb jal 8003b6ec <GetRamSize> +80034954: 00000000 nop +80034958: afc20010 sw v0,16(s8) + + if(i == 0 || i > 16) +8003495c: 8fc20010 lw v0,16(s8) +80034960: 00000000 nop +80034964: 10400006 beqz v0,80034980 <PSX_GetSysInfo+0x248> +80034968: 00000000 nop +8003496c: 8fc20010 lw v0,16(s8) +80034970: 00000000 nop +80034974: 2c420011 sltiu v0,v0,17 +80034978: 14400006 bnez v0,80034994 <PSX_GetSysInfo+0x25c> +8003497c: 00000000 nop + info->system.memory = 2<<20; /* 2 Megabytes */ +80034980: 8fc20020 lw v0,32(s8) +80034984: 3c030020 lui v1,0x20 +80034988: ac430010 sw v1,16(v0) +8003498c: 10000009 b 800349b4 <PSX_GetSysInfo+0x27c> +80034990: 00000000 nop + else + info->system.memory <<= 20; +80034994: 8fc20020 lw v0,32(s8) +80034998: 00000000 nop +8003499c: 8c420010 lw v0,16(v0) +800349a0: 00000000 nop +800349a4: 00021d00 sll v1,v0,0x14 +800349a8: 8fc20020 lw v0,32(s8) +800349ac: 00000000 nop +800349b0: ac430010 sw v1,16(v0) +} +800349b4: 00000000 nop +800349b8: 03c0e821 move sp,s8 +800349bc: 8fbf001c lw ra,28(sp) +800349c0: 8fbe0018 lw s8,24(sp) +800349c4: 27bd0020 addiu sp,sp,32 +800349c8: 03e00008 jr ra +800349cc: 00000000 nop + +800349d0 <get_real_file_size>: + + + +int get_real_file_size(char *name) +{ +800349d0: 27bdffc0 addiu sp,sp,-64 +800349d4: afbf003c sw ra,60(sp) +800349d8: afbe0038 sw s8,56(sp) +800349dc: 03a0f021 move s8,sp +800349e0: afc40040 sw a0,64(s8) + struct DIRENTRY dirent_buf; + + if(firstfile(name, &dirent_buf) == &dirent_buf) +800349e4: 27c20010 addiu v0,s8,16 +800349e8: 00402821 move a1,v0 +800349ec: 8fc40040 lw a0,64(s8) +800349f0: 0c00edf4 jal 8003b7d0 <firstfile> +800349f4: 00000000 nop +800349f8: 00401821 move v1,v0 +800349fc: 27c20010 addiu v0,s8,16 +80034a00: 14620004 bne v1,v0,80034a14 <get_real_file_size+0x44> +80034a04: 00000000 nop + return dirent_buf.size; +80034a08: 8fc20028 lw v0,40(s8) +80034a0c: 10000002 b 80034a18 <get_real_file_size+0x48> +80034a10: 00000000 nop + else + return 0; +80034a14: 00001021 move v0,zero +} +80034a18: 03c0e821 move sp,s8 +80034a1c: 8fbf003c lw ra,60(sp) +80034a20: 8fbe0038 lw s8,56(sp) +80034a24: 27bd0040 addiu sp,sp,64 +80034a28: 03e00008 jr ra +80034a2c: 00000000 nop + +80034a30 <get_file_size>: + +int get_file_size(char *name) +{ +80034a30: 27bdffe0 addiu sp,sp,-32 +80034a34: afbf001c sw ra,28(sp) +80034a38: afbe0018 sw s8,24(sp) +80034a3c: 03a0f021 move s8,sp +80034a40: afc40020 sw a0,32(s8) + int i = get_real_file_size(name); +80034a44: 8fc40020 lw a0,32(s8) +80034a48: 0c00d274 jal 800349d0 <get_real_file_size> +80034a4c: 00000000 nop +80034a50: afc20010 sw v0,16(s8) + + if(strncmp(name, "cdrom:", 6) == 0) +80034a54: 24060006 li a2,6 +80034a58: 3c028004 lui v0,0x8004 +80034a5c: 2445fe50 addiu a1,v0,-432 +80034a60: 8fc40020 lw a0,32(s8) +80034a64: 0c00d9dd jal 80036774 <strncmp> +80034a68: 00000000 nop +80034a6c: 14400010 bnez v0,80034ab0 <get_file_size+0x80> +80034a70: 00000000 nop + { + if(i & 0x7ff) +80034a74: 8fc20010 lw v0,16(s8) +80034a78: 00000000 nop +80034a7c: 304207ff andi v0,v0,0x7ff +80034a80: 10400020 beqz v0,80034b04 <get_file_size+0xd4> +80034a84: 00000000 nop + { + i += 0x800; +80034a88: 8fc20010 lw v0,16(s8) +80034a8c: 00000000 nop +80034a90: 24420800 addiu v0,v0,2048 +80034a94: afc20010 sw v0,16(s8) + i &= ~0x7ff; +80034a98: 8fc30010 lw v1,16(s8) +80034a9c: 2402f800 li v0,-2048 +80034aa0: 00621024 and v0,v1,v0 +80034aa4: afc20010 sw v0,16(s8) +80034aa8: 10000016 b 80034b04 <get_file_size+0xd4> +80034aac: 00000000 nop + } + }else if(strncmp(name, "bu", 2) == 0) +80034ab0: 24060002 li a2,2 +80034ab4: 3c028004 lui v0,0x8004 +80034ab8: 2445fe58 addiu a1,v0,-424 +80034abc: 8fc40020 lw a0,32(s8) +80034ac0: 0c00d9dd jal 80036774 <strncmp> +80034ac4: 00000000 nop +80034ac8: 1440000e bnez v0,80034b04 <get_file_size+0xd4> +80034acc: 00000000 nop + { + if(i & 0x7f) +80034ad0: 8fc20010 lw v0,16(s8) +80034ad4: 00000000 nop +80034ad8: 3042007f andi v0,v0,0x7f +80034adc: 10400009 beqz v0,80034b04 <get_file_size+0xd4> +80034ae0: 00000000 nop + { + i += 0x80; +80034ae4: 8fc20010 lw v0,16(s8) +80034ae8: 00000000 nop +80034aec: 24420080 addiu v0,v0,128 +80034af0: afc20010 sw v0,16(s8) + i &= ~0x7f; +80034af4: 8fc30010 lw v1,16(s8) +80034af8: 2402ff80 li v0,-128 +80034afc: 00621024 and v0,v1,v0 +80034b00: afc20010 sw v0,16(s8) + } + } + + return i; +80034b04: 8fc20010 lw v0,16(s8) +} +80034b08: 03c0e821 move sp,s8 +80034b0c: 8fbf001c lw ra,28(sp) +80034b10: 8fbe0018 lw s8,24(sp) +80034b14: 27bd0020 addiu sp,sp,32 +80034b18: 03e00008 jr ra +80034b1c: 00000000 nop + +80034b20 <SetRCnt>: + +int SetRCnt(int spec, unsigned short target, unsigned int mode) +{ +80034b20: 27bdfff8 addiu sp,sp,-8 +80034b24: afbe0004 sw s8,4(sp) +80034b28: 03a0f021 move s8,sp +80034b2c: afc40008 sw a0,8(s8) +80034b30: 00a01021 move v0,a1 +80034b34: afc60010 sw a2,16(s8) +80034b38: a7c2000c sh v0,12(s8) + spec &= 0xf; +80034b3c: 8fc20008 lw v0,8(s8) +80034b40: 00000000 nop +80034b44: 3042000f andi v0,v0,0xf +80034b48: afc20008 sw v0,8(s8) + + if(spec >= 3) +80034b4c: 8fc20008 lw v0,8(s8) +80034b50: 00000000 nop +80034b54: 28420003 slti v0,v0,3 +80034b58: 14400004 bnez v0,80034b6c <SetRCnt+0x4c> +80034b5c: 00000000 nop + return 0; +80034b60: 00001021 move v0,zero +80034b64: 1000001d b 80034bdc <SetRCnt+0xbc> +80034b68: 00000000 nop + + RCNT_MODE(spec)=0; +80034b6c: 8fc20008 lw v0,8(s8) +80034b70: 00000000 nop +80034b74: 00021900 sll v1,v0,0x4 +80034b78: 3c021f80 lui v0,0x1f80 +80034b7c: 34421104 ori v0,v0,0x1104 +80034b80: 00621021 addu v0,v1,v0 +80034b84: ac400000 sw zero,0(v0) + RCNT_TARGET(spec)=target; +80034b88: 8fc20008 lw v0,8(s8) +80034b8c: 00000000 nop +80034b90: 00021900 sll v1,v0,0x4 +80034b94: 3c021f80 lui v0,0x1f80 +80034b98: 34421108 ori v0,v0,0x1108 +80034b9c: 00621021 addu v0,v1,v0 +80034ba0: 00401821 move v1,v0 +80034ba4: 97c2000c lhu v0,12(s8) +80034ba8: 00000000 nop +80034bac: ac620000 sw v0,0(v1) + RCNT_MODE(spec)=mode; +80034bb0: 8fc20008 lw v0,8(s8) +80034bb4: 00000000 nop +80034bb8: 00021900 sll v1,v0,0x4 +80034bbc: 3c021f80 lui v0,0x1f80 +80034bc0: 34421104 ori v0,v0,0x1104 +80034bc4: 00621021 addu v0,v1,v0 +80034bc8: 00401821 move v1,v0 +80034bcc: 8fc20010 lw v0,16(s8) +80034bd0: 00000000 nop +80034bd4: ac620000 sw v0,0(v1) + + return 1; +80034bd8: 24020001 li v0,1 +} +80034bdc: 03c0e821 move sp,s8 +80034be0: 8fbe0004 lw s8,4(sp) +80034be4: 27bd0008 addiu sp,sp,8 +80034be8: 03e00008 jr ra +80034bec: 00000000 nop + +80034bf0 <GetRCnt>: + +int GetRCnt(int spec) +{ +80034bf0: 27bdfff8 addiu sp,sp,-8 +80034bf4: afbe0004 sw s8,4(sp) +80034bf8: 03a0f021 move s8,sp +80034bfc: afc40008 sw a0,8(s8) + spec &= 0xf; +80034c00: 8fc20008 lw v0,8(s8) +80034c04: 00000000 nop +80034c08: 3042000f andi v0,v0,0xf +80034c0c: afc20008 sw v0,8(s8) + + if(spec >= 4) +80034c10: 8fc20008 lw v0,8(s8) +80034c14: 00000000 nop +80034c18: 28420004 slti v0,v0,4 +80034c1c: 14400004 bnez v0,80034c30 <GetRCnt+0x40> +80034c20: 00000000 nop + return -1; +80034c24: 2402ffff li v0,-1 +80034c28: 1000000a b 80034c54 <GetRCnt+0x64> +80034c2c: 00000000 nop + + return (RCNT_COUNT(spec) & 0xffff); +80034c30: 8fc20008 lw v0,8(s8) +80034c34: 00000000 nop +80034c38: 00021900 sll v1,v0,0x4 +80034c3c: 3c021f80 lui v0,0x1f80 +80034c40: 34421100 ori v0,v0,0x1100 +80034c44: 00621021 addu v0,v1,v0 +80034c48: 8c420000 lw v0,0(v0) +80034c4c: 00000000 nop +80034c50: 3042ffff andi v0,v0,0xffff +} +80034c54: 03c0e821 move sp,s8 +80034c58: 8fbe0004 lw s8,4(sp) +80034c5c: 27bd0008 addiu sp,sp,8 +80034c60: 03e00008 jr ra +80034c64: 00000000 nop + +80034c68 <StartRCnt>: + +int StartRCnt(int spec) +{ +80034c68: 27bdfff8 addiu sp,sp,-8 +80034c6c: afbe0004 sw s8,4(sp) +80034c70: 03a0f021 move s8,sp +80034c74: afc40008 sw a0,8(s8) + spec &= 0xf; +80034c78: 8fc20008 lw v0,8(s8) +80034c7c: 00000000 nop +80034c80: 3042000f andi v0,v0,0xf +80034c84: afc20008 sw v0,8(s8) + + if(spec >= 3) +80034c88: 8fc20008 lw v0,8(s8) +80034c8c: 00000000 nop +80034c90: 28420003 slti v0,v0,3 +80034c94: 14400004 bnez v0,80034ca8 <StartRCnt+0x40> +80034c98: 00000000 nop + return 0; +80034c9c: 00001021 move v0,zero +80034ca0: 1000000e b 80034cdc <StartRCnt+0x74> +80034ca4: 00000000 nop + + IMASK |= 1 << (spec + 4); +80034ca8: 3c021f80 lui v0,0x1f80 +80034cac: 34421074 ori v0,v0,0x1074 +80034cb0: 3c031f80 lui v1,0x1f80 +80034cb4: 34631074 ori v1,v1,0x1074 +80034cb8: 8c630000 lw v1,0(v1) +80034cbc: 8fc40008 lw a0,8(s8) +80034cc0: 00000000 nop +80034cc4: 24840004 addiu a0,a0,4 +80034cc8: 24050001 li a1,1 +80034ccc: 00852004 sllv a0,a1,a0 +80034cd0: 00641825 or v1,v1,a0 +80034cd4: ac430000 sw v1,0(v0) + + return 1; +80034cd8: 24020001 li v0,1 +} +80034cdc: 03c0e821 move sp,s8 +80034ce0: 8fbe0004 lw s8,4(sp) +80034ce4: 27bd0008 addiu sp,sp,8 +80034ce8: 03e00008 jr ra +80034cec: 00000000 nop + +80034cf0 <StopRCnt>: + +int StopRCnt(int spec) +{ +80034cf0: 27bdfff8 addiu sp,sp,-8 +80034cf4: afbe0004 sw s8,4(sp) +80034cf8: 03a0f021 move s8,sp +80034cfc: afc40008 sw a0,8(s8) + spec &= 0xf; +80034d00: 8fc20008 lw v0,8(s8) +80034d04: 00000000 nop +80034d08: 3042000f andi v0,v0,0xf +80034d0c: afc20008 sw v0,8(s8) + + if(spec >= 3) +80034d10: 8fc20008 lw v0,8(s8) +80034d14: 00000000 nop +80034d18: 28420003 slti v0,v0,3 +80034d1c: 14400004 bnez v0,80034d30 <StopRCnt+0x40> +80034d20: 00000000 nop + return 0; +80034d24: 00001021 move v0,zero +80034d28: 1000000e b 80034d64 <StopRCnt+0x74> +80034d2c: 00000000 nop + + IMASK ^= 1 << (spec + 4); +80034d30: 3c021f80 lui v0,0x1f80 +80034d34: 34421074 ori v0,v0,0x1074 +80034d38: 3c031f80 lui v1,0x1f80 +80034d3c: 34631074 ori v1,v1,0x1074 +80034d40: 8c630000 lw v1,0(v1) +80034d44: 8fc40008 lw a0,8(s8) +80034d48: 00000000 nop +80034d4c: 24840004 addiu a0,a0,4 +80034d50: 24050001 li a1,1 +80034d54: 00852004 sllv a0,a1,a0 +80034d58: 00641826 xor v1,v1,a0 +80034d5c: ac430000 sw v1,0(v0) + + return 1; +80034d60: 24020001 li v0,1 +} +80034d64: 03c0e821 move sp,s8 +80034d68: 8fbe0004 lw s8,4(sp) +80034d6c: 27bd0008 addiu sp,sp,8 +80034d70: 03e00008 jr ra +80034d74: 00000000 nop + +80034d78 <SetVBlankHandler>: + +void SetVBlankHandler(void (*callback)()) +{ +80034d78: 27bdffe8 addiu sp,sp,-24 +80034d7c: afbf0014 sw ra,20(sp) +80034d80: afbe0010 sw s8,16(sp) +80034d84: 03a0f021 move s8,sp +80034d88: afc40018 sw a0,24(s8) + if(psxSdkFlags & PSX_INIT_NOBIOS) +80034d8c: 3c028007 lui v0,0x8007 +80034d90: 8c421d00 lw v0,7424(v0) +80034d94: 00000000 nop +80034d98: 30420004 andi v0,v0,0x4 +80034d9c: 1040000c beqz v0,80034dd0 <SetVBlankHandler+0x58> +80034da0: 00000000 nop + { + _EXC_vblank_handler_set = 0; +80034da4: 3c028007 lui v0,0x8007 +80034da8: ac401d74 sw zero,7540(v0) + _EXC_vblank_handler = callback; +80034dac: 3c028007 lui v0,0x8007 +80034db0: 8fc30018 lw v1,24(s8) +80034db4: 00000000 nop +80034db8: ac431d8c sw v1,7564(v0) + _EXC_vblank_handler_set = 1; +80034dbc: 3c028007 lui v0,0x8007 +80034dc0: 24030001 li v1,1 +80034dc4: ac431d74 sw v1,7540(v0) + return; +80034dc8: 10000034 b 80034e9c <SetVBlankHandler+0x124> +80034dcc: 00000000 nop + } + + if(vblank_handler_set == 1) +80034dd0: 3c028007 lui v0,0x8007 +80034dd4: 8c431cf0 lw v1,7408(v0) +80034dd8: 24020001 li v0,1 +80034ddc: 1462000b bne v1,v0,80034e0c <SetVBlankHandler+0x94> +80034de0: 00000000 nop + { + EnterCriticalSection(); +80034de4: 0c00ee04 jal 8003b810 <EnterCriticalSection> +80034de8: 00000000 nop + + vblank_handler_callback = callback; +80034dec: 3c028007 lui v0,0x8007 +80034df0: 8fc30018 lw v1,24(s8) +80034df4: 00000000 nop +80034df8: ac431d70 sw v1,7536(v0) + + ExitCriticalSection(); +80034dfc: 0c00ee0a jal 8003b828 <ExitCriticalSection> +80034e00: 00000000 nop + + return; +80034e04: 10000025 b 80034e9c <SetVBlankHandler+0x124> +80034e08: 00000000 nop + } + +// Enter critical section + + EnterCriticalSection(); +80034e0c: 0c00ee04 jal 8003b810 <EnterCriticalSection> +80034e10: 00000000 nop + + IMASK|=1; +80034e14: 3c021f80 lui v0,0x1f80 +80034e18: 34421074 ori v0,v0,0x1074 +80034e1c: 3c031f80 lui v1,0x1f80 +80034e20: 34631074 ori v1,v1,0x1074 +80034e24: 8c630000 lw v1,0(v1) +80034e28: 00000000 nop +80034e2c: 34630001 ori v1,v1,0x1 +80034e30: ac430000 sw v1,0(v0) + + vblank_handler_event_id = OpenEvent(RCntCNT3, 2, 0x1000, vblank_handler); +80034e34: 3c028001 lui v0,0x8001 +80034e38: 24470064 addiu a3,v0,100 +80034e3c: 24061000 li a2,4096 +80034e40: 24050002 li a1,2 +80034e44: 3c02f200 lui v0,0xf200 +80034e48: 34440003 ori a0,v0,0x3 +80034e4c: 0c00edc0 jal 8003b700 <OpenEvent> +80034e50: 00000000 nop +80034e54: 00401821 move v1,v0 +80034e58: 3c028007 lui v0,0x8007 +80034e5c: ac431cf4 sw v1,7412(v0) + EnableEvent(vblank_handler_event_id); +80034e60: 3c028007 lui v0,0x8007 +80034e64: 8c421cf4 lw v0,7412(v0) +80034e68: 00000000 nop +80034e6c: 00402021 move a0,v0 +80034e70: 0c00edc4 jal 8003b710 <EnableEvent> +80034e74: 00000000 nop + + vblank_handler_callback = callback; +80034e78: 3c028007 lui v0,0x8007 +80034e7c: 8fc30018 lw v1,24(s8) +80034e80: 00000000 nop +80034e84: ac431d70 sw v1,7536(v0) + vblank_handler_set = 1; +80034e88: 3c028007 lui v0,0x8007 +80034e8c: 24030001 li v1,1 +80034e90: ac431cf0 sw v1,7408(v0) + +// Exit critical section + + ExitCriticalSection(); +80034e94: 0c00ee0a jal 8003b828 <ExitCriticalSection> +80034e98: 00000000 nop +} +80034e9c: 03c0e821 move sp,s8 +80034ea0: 8fbf0014 lw ra,20(sp) +80034ea4: 8fbe0010 lw s8,16(sp) +80034ea8: 27bd0018 addiu sp,sp,24 +80034eac: 03e00008 jr ra +80034eb0: 00000000 nop + +80034eb4 <RemoveVBlankHandler>: + +void RemoveVBlankHandler(void) +{ +80034eb4: 27bdffe8 addiu sp,sp,-24 +80034eb8: afbf0014 sw ra,20(sp) +80034ebc: afbe0010 sw s8,16(sp) +80034ec0: 03a0f021 move s8,sp + if(psxSdkFlags & PSX_INIT_NOBIOS) +80034ec4: 3c028007 lui v0,0x8007 +80034ec8: 8c421d00 lw v0,7424(v0) +80034ecc: 00000000 nop +80034ed0: 30420004 andi v0,v0,0x4 +80034ed4: 10400007 beqz v0,80034ef4 <RemoveVBlankHandler+0x40> +80034ed8: 00000000 nop + { + _EXC_vblank_handler_set = 0; +80034edc: 3c028007 lui v0,0x8007 +80034ee0: ac401d74 sw zero,7540(v0) + _EXC_vblank_handler = NULL; +80034ee4: 3c028007 lui v0,0x8007 +80034ee8: ac401d8c sw zero,7564(v0) + return; +80034eec: 10000018 b 80034f50 <RemoveVBlankHandler+0x9c> +80034ef0: 00000000 nop + } + + if(vblank_handler_set) +80034ef4: 3c028007 lui v0,0x8007 +80034ef8: 8c421cf0 lw v0,7408(v0) +80034efc: 00000000 nop +80034f00: 10400013 beqz v0,80034f50 <RemoveVBlankHandler+0x9c> +80034f04: 00000000 nop + { + EnterCriticalSection(); +80034f08: 0c00ee04 jal 8003b810 <EnterCriticalSection> +80034f0c: 00000000 nop + + DisableEvent(vblank_handler_event_id); +80034f10: 3c028007 lui v0,0x8007 +80034f14: 8c421cf4 lw v0,7412(v0) +80034f18: 00000000 nop +80034f1c: 00402021 move a0,v0 +80034f20: 0c00edcc jal 8003b730 <DisableEvent> +80034f24: 00000000 nop + CloseEvent(vblank_handler_event_id); +80034f28: 3c028007 lui v0,0x8007 +80034f2c: 8c421cf4 lw v0,7412(v0) +80034f30: 00000000 nop +80034f34: 00402021 move a0,v0 +80034f38: 0c00edc8 jal 8003b720 <CloseEvent> +80034f3c: 00000000 nop + + //IMASK^=1; + // ^ commented because masking out vblank could give problems to other bios functions + + vblank_handler_set = 0; +80034f40: 3c028007 lui v0,0x8007 +80034f44: ac401cf0 sw zero,7408(v0) + + ExitCriticalSection(); +80034f48: 0c00ee0a jal 8003b828 <ExitCriticalSection> +80034f4c: 00000000 nop + } +} +80034f50: 03c0e821 move sp,s8 +80034f54: 8fbf0014 lw ra,20(sp) +80034f58: 8fbe0010 lw s8,16(sp) +80034f5c: 27bd0018 addiu sp,sp,24 +80034f60: 03e00008 jr ra +80034f64: 00000000 nop + +80034f68 <SetRCntHandler>: + +void SetRCntHandler(void (*callback)(), int spec, unsigned short target) +{ +80034f68: 27bdffe8 addiu sp,sp,-24 +80034f6c: afbf0014 sw ra,20(sp) +80034f70: afbe0010 sw s8,16(sp) +80034f74: 03a0f021 move s8,sp +80034f78: afc40018 sw a0,24(s8) +80034f7c: afc5001c sw a1,28(s8) +80034f80: 00c01021 move v0,a2 +80034f84: a7c20020 sh v0,32(s8) + if(psxSdkFlags & PSX_INIT_NOBIOS) +80034f88: 3c028007 lui v0,0x8007 +80034f8c: 8c421d00 lw v0,7424(v0) +80034f90: 00000000 nop +80034f94: 30420004 andi v0,v0,0x4 +80034f98: 14400063 bnez v0,80035128 <SetRCntHandler+0x1c0> +80034f9c: 00000000 nop + return; // Not yet supported in No-Bios Mode + + if(rcnt_handler_set) +80034fa0: 3c028007 lui v0,0x8007 +80034fa4: 8c421cf8 lw v0,7416(v0) +80034fa8: 00000000 nop +80034fac: 1040000b beqz v0,80034fdc <SetRCntHandler+0x74> +80034fb0: 00000000 nop + { + EnterCriticalSection(); +80034fb4: 0c00ee04 jal 8003b810 <EnterCriticalSection> +80034fb8: 00000000 nop + + rcnt_handler_callback = callback; +80034fbc: 3c028007 lui v0,0x8007 +80034fc0: 8fc30018 lw v1,24(s8) +80034fc4: 00000000 nop +80034fc8: ac431d6c sw v1,7532(v0) + + ExitCriticalSection(); +80034fcc: 0c00ee0a jal 8003b828 <ExitCriticalSection> +80034fd0: 00000000 nop + + return; +80034fd4: 10000055 b 8003512c <SetRCntHandler+0x1c4> +80034fd8: 00000000 nop + } + +// Enter critical section + + SetRCnt(spec, target, RCntIntr | 0x08 | 0x10 | 0x40); +80034fdc: 97c20020 lhu v0,32(s8) +80034fe0: 24061058 li a2,4184 +80034fe4: 00402821 move a1,v0 +80034fe8: 8fc4001c lw a0,28(s8) +80034fec: 0c00d2c8 jal 80034b20 <SetRCnt> +80034ff0: 00000000 nop + StartRCnt(spec); +80034ff4: 8fc4001c lw a0,28(s8) +80034ff8: 0c00d31a jal 80034c68 <StartRCnt> +80034ffc: 00000000 nop + + EnterCriticalSection(); +80035000: 0c00ee04 jal 8003b810 <EnterCriticalSection> +80035004: 00000000 nop + rcnt_handler_event_id = OpenEvent(spec, 2, 0x1000, rcnt_handler); +80035008: 3c028001 lui v0,0x8001 +8003500c: 244701bc addiu a3,v0,444 +80035010: 24061000 li a2,4096 +80035014: 24050002 li a1,2 +80035018: 8fc4001c lw a0,28(s8) +8003501c: 0c00edc0 jal 8003b700 <OpenEvent> +80035020: 00000000 nop +80035024: 00401821 move v1,v0 +80035028: 3c028007 lui v0,0x8007 +8003502c: ac431cfc sw v1,7420(v0) + EnableEvent(rcnt_handler_event_id); +80035030: 3c028007 lui v0,0x8007 +80035034: 8c421cfc lw v0,7420(v0) +80035038: 00000000 nop +8003503c: 00402021 move a0,v0 +80035040: 0c00edc4 jal 8003b710 <EnableEvent> +80035044: 00000000 nop + + rcnt_handler_callback = callback; +80035048: 3c028007 lui v0,0x8007 +8003504c: 8fc30018 lw v1,24(s8) +80035050: 00000000 nop +80035054: ac431d6c sw v1,7532(v0) + rcnt_handler_set = spec; +80035058: 3c028007 lui v0,0x8007 +8003505c: 8fc3001c lw v1,28(s8) +80035060: 00000000 nop +80035064: ac431cf8 sw v1,7416(v0) + + switch(spec) +80035068: 8fc2001c lw v0,28(s8) +8003506c: 3c03f200 lui v1,0xf200 +80035070: 34630001 ori v1,v1,0x1 +80035074: 1043001a beq v0,v1,800350e0 <SetRCntHandler+0x178> +80035078: 00000000 nop +8003507c: 3c03f200 lui v1,0xf200 +80035080: 34630002 ori v1,v1,0x2 +80035084: 0043182a slt v1,v0,v1 +80035088: 10600006 beqz v1,800350a4 <SetRCntHandler+0x13c> +8003508c: 00000000 nop +80035090: 3c03f200 lui v1,0xf200 +80035094: 1043000d beq v0,v1,800350cc <SetRCntHandler+0x164> +80035098: 00000000 nop +8003509c: 1000001e b 80035118 <SetRCntHandler+0x1b0> +800350a0: 00000000 nop +800350a4: 3c03f200 lui v1,0xf200 +800350a8: 34630002 ori v1,v1,0x2 +800350ac: 10430011 beq v0,v1,800350f4 <SetRCntHandler+0x18c> +800350b0: 00000000 nop +800350b4: 3c03f200 lui v1,0xf200 +800350b8: 34630003 ori v1,v1,0x3 +800350bc: 10430012 beq v0,v1,80035108 <SetRCntHandler+0x1a0> +800350c0: 00000000 nop +800350c4: 10000014 b 80035118 <SetRCntHandler+0x1b0> +800350c8: 00000000 nop + { + case RCntCNT0: rcnt_handler_evfield = 1 << 4; break; +800350cc: 3c028007 lui v0,0x8007 +800350d0: 24030010 li v1,16 +800350d4: ac431d68 sw v1,7528(v0) +800350d8: 1000000f b 80035118 <SetRCntHandler+0x1b0> +800350dc: 00000000 nop + case RCntCNT1: rcnt_handler_evfield = 1 << 5; break; +800350e0: 3c028007 lui v0,0x8007 +800350e4: 24030020 li v1,32 +800350e8: ac431d68 sw v1,7528(v0) +800350ec: 1000000a b 80035118 <SetRCntHandler+0x1b0> +800350f0: 00000000 nop + case RCntCNT2: rcnt_handler_evfield = 1 << 6; break; +800350f4: 3c028007 lui v0,0x8007 +800350f8: 24030040 li v1,64 +800350fc: ac431d68 sw v1,7528(v0) +80035100: 10000005 b 80035118 <SetRCntHandler+0x1b0> +80035104: 00000000 nop + case RCntCNT3: rcnt_handler_evfield = 1; break; +80035108: 3c028007 lui v0,0x8007 +8003510c: 24030001 li v1,1 +80035110: ac431d68 sw v1,7528(v0) +80035114: 00000000 nop + } + +// Exit critical section + + ExitCriticalSection(); +80035118: 0c00ee0a jal 8003b828 <ExitCriticalSection> +8003511c: 00000000 nop +80035120: 10000002 b 8003512c <SetRCntHandler+0x1c4> +80035124: 00000000 nop +} + +void SetRCntHandler(void (*callback)(), int spec, unsigned short target) +{ + if(psxSdkFlags & PSX_INIT_NOBIOS) + return; // Not yet supported in No-Bios Mode +80035128: 00000000 nop + } + +// Exit critical section + + ExitCriticalSection(); +} +8003512c: 03c0e821 move sp,s8 +80035130: 8fbf0014 lw ra,20(sp) +80035134: 8fbe0010 lw s8,16(sp) +80035138: 27bd0018 addiu sp,sp,24 +8003513c: 03e00008 jr ra +80035140: 00000000 nop + +80035144 <RemoveRCntHandler>: + +void RemoveRCntHandler(int spec) +{ +80035144: 27bdffe8 addiu sp,sp,-24 +80035148: afbf0014 sw ra,20(sp) +8003514c: afbe0010 sw s8,16(sp) +80035150: 03a0f021 move s8,sp +80035154: afc40018 sw a0,24(s8) + if(psxSdkFlags & PSX_INIT_NOBIOS) +80035158: 3c028007 lui v0,0x8007 +8003515c: 8c421d00 lw v0,7424(v0) +80035160: 00000000 nop +80035164: 30420004 andi v0,v0,0x4 +80035168: 1440001a bnez v0,800351d4 <RemoveRCntHandler+0x90> +8003516c: 00000000 nop + return; // Not yet supported in No-Bios Mode + + if(rcnt_handler_set) +80035170: 3c028007 lui v0,0x8007 +80035174: 8c421cf8 lw v0,7416(v0) +80035178: 00000000 nop +8003517c: 10400016 beqz v0,800351d8 <RemoveRCntHandler+0x94> +80035180: 00000000 nop + { + EnterCriticalSection(); +80035184: 0c00ee04 jal 8003b810 <EnterCriticalSection> +80035188: 00000000 nop + + DisableEvent(rcnt_handler_event_id); +8003518c: 3c028007 lui v0,0x8007 +80035190: 8c421cfc lw v0,7420(v0) +80035194: 00000000 nop +80035198: 00402021 move a0,v0 +8003519c: 0c00edcc jal 8003b730 <DisableEvent> +800351a0: 00000000 nop + CloseEvent(rcnt_handler_event_id); +800351a4: 3c028007 lui v0,0x8007 +800351a8: 8c421cfc lw v0,7420(v0) +800351ac: 00000000 nop +800351b0: 00402021 move a0,v0 +800351b4: 0c00edc8 jal 8003b720 <CloseEvent> +800351b8: 00000000 nop + + rcnt_handler_set = 0; +800351bc: 3c028007 lui v0,0x8007 +800351c0: ac401cf8 sw zero,7416(v0) + + ExitCriticalSection(); +800351c4: 0c00ee0a jal 8003b828 <ExitCriticalSection> +800351c8: 00000000 nop +800351cc: 10000002 b 800351d8 <RemoveRCntHandler+0x94> +800351d0: 00000000 nop +} + +void RemoveRCntHandler(int spec) +{ + if(psxSdkFlags & PSX_INIT_NOBIOS) + return; // Not yet supported in No-Bios Mode +800351d4: 00000000 nop + + rcnt_handler_set = 0; + + ExitCriticalSection(); + } +} +800351d8: 03c0e821 move sp,s8 +800351dc: 8fbf0014 lw ra,20(sp) +800351e0: 8fbe0010 lw s8,16(sp) +800351e4: 27bd0018 addiu sp,sp,24 +800351e8: 03e00008 jr ra +800351ec: 00000000 nop + +800351f0 <GetSystemRomVersion>: + +const char *GetSystemRomVersion(void) +{ +800351f0: 27bdffe0 addiu sp,sp,-32 +800351f4: afbf001c sw ra,28(sp) +800351f8: afbe0018 sw s8,24(sp) +800351fc: 03a0f021 move s8,sp + +// If getting the pointer is not possible, a pointer to a string saying "System ROM Unavailable" is returned. + + int x; + + for(x = 0x7ffee; x >= 0; x--) +80035200: 3c020007 lui v0,0x7 +80035204: 3442ffee ori v0,v0,0xffee +80035208: afc20010 sw v0,16(s8) +8003520c: 10000015 b 80035264 <GetSystemRomVersion+0x74> +80035210: 00000000 nop + if(memcmp("System ROM Version", (void*)(0xbfc00000 + x), 18) == 0) +80035214: 8fc30010 lw v1,16(s8) +80035218: 3c02bfc0 lui v0,0xbfc0 +8003521c: 00621021 addu v0,v1,v0 +80035220: 24060012 li a2,18 +80035224: 00402821 move a1,v0 +80035228: 3c028004 lui v0,0x8004 +8003522c: 2444fe5c addiu a0,v0,-420 +80035230: 0c00d7cf jal 80035f3c <memcmp> +80035234: 00000000 nop +80035238: 14400006 bnez v0,80035254 <GetSystemRomVersion+0x64> +8003523c: 00000000 nop + return (char*)(0xbfc00000 + x); +80035240: 8fc30010 lw v1,16(s8) +80035244: 3c02bfc0 lui v0,0xbfc0 +80035248: 00621021 addu v0,v1,v0 +8003524c: 1000000b b 8003527c <GetSystemRomVersion+0x8c> +80035250: 00000000 nop + +// If getting the pointer is not possible, a pointer to a string saying "System ROM Unavailable" is returned. + + int x; + + for(x = 0x7ffee; x >= 0; x--) +80035254: 8fc20010 lw v0,16(s8) +80035258: 00000000 nop +8003525c: 2442ffff addiu v0,v0,-1 +80035260: afc20010 sw v0,16(s8) +80035264: 8fc20010 lw v0,16(s8) +80035268: 00000000 nop +8003526c: 0441ffe9 bgez v0,80035214 <GetSystemRomVersion+0x24> +80035270: 00000000 nop + if(memcmp("System ROM Version", (void*)(0xbfc00000 + x), 18) == 0) + return (char*)(0xbfc00000 + x); + + return sysromver_unavail; +80035274: 3c028004 lui v0,0x8004 +80035278: 8c422570 lw v0,9584(v0) +} +8003527c: 03c0e821 move sp,s8 +80035280: 8fbf001c lw ra,28(sp) +80035284: 8fbe0018 lw s8,24(sp) +80035288: 27bd0020 addiu sp,sp,32 +8003528c: 03e00008 jr ra +80035290: 00000000 nop + +80035294 <PSX_RestoreBiosState>: + +int PSX_RestoreBiosState(void) +{ +80035294: 27bdffe8 addiu sp,sp,-24 +80035298: afbf0014 sw ra,20(sp) +8003529c: afbe0010 sw s8,16(sp) +800352a0: 03a0f021 move s8,sp + if(!(psxSdkFlags & PSX_INIT_SAVESTATE)) +800352a4: 3c028007 lui v0,0x8007 +800352a8: 8c421d00 lw v0,7424(v0) +800352ac: 00000000 nop +800352b0: 30420002 andi v0,v0,0x2 +800352b4: 14400004 bnez v0,800352c8 <PSX_RestoreBiosState+0x34> +800352b8: 00000000 nop + return 0; // can't restore BIOS state if it was not saved previously +800352bc: 00001021 move v0,zero +800352c0: 1000000d b 800352f8 <PSX_RestoreBiosState+0x64> +800352c4: 00000000 nop + + EnterCriticalSection(); +800352c8: 0c00ee04 jal 8003b810 <EnterCriticalSection> +800352cc: 00000000 nop + memcpy((void*)0x80000000, psxBiosState, 0x10000); +800352d0: 3c028007 lui v0,0x8007 +800352d4: 8c421d04 lw v0,7428(v0) +800352d8: 3c060001 lui a2,0x1 +800352dc: 00402821 move a1,v0 +800352e0: 3c048000 lui a0,0x8000 +800352e4: 0c00d75e jal 80035d78 <memcpy> +800352e8: 00000000 nop + ExitCriticalSection(); +800352ec: 0c00ee0a jal 8003b828 <ExitCriticalSection> +800352f0: 00000000 nop + + return 1; +800352f4: 24020001 li v0,1 +} +800352f8: 03c0e821 move sp,s8 +800352fc: 8fbf0014 lw ra,20(sp) +80035300: 8fbe0010 lw s8,16(sp) +80035304: 27bd0018 addiu sp,sp,24 +80035308: 03e00008 jr ra +8003530c: 00000000 nop + +80035310 <PSX_GetInitFlags>: + +unsigned int PSX_GetInitFlags(void) +{ +80035310: 27bdfff8 addiu sp,sp,-8 +80035314: afbe0004 sw s8,4(sp) +80035318: 03a0f021 move s8,sp + return psxSdkFlags; +8003531c: 3c028007 lui v0,0x8007 +80035320: 8c421d00 lw v0,7424(v0) +} +80035324: 03c0e821 move sp,s8 +80035328: 8fbe0004 lw s8,4(sp) +8003532c: 27bd0008 addiu sp,sp,8 +80035330: 03e00008 jr ra +80035334: 00000000 nop + +80035338 <PSX_WarmReboot>: + +void PSX_WarmReboot(void) +{ +80035338: 27bdffe8 addiu sp,sp,-24 +8003533c: afbf0014 sw ra,20(sp) +80035340: afbe0010 sw s8,16(sp) +80035344: 03a0f021 move s8,sp + if(psxSdkFlags & PSX_INIT_NOBIOS) +80035348: 3c028007 lui v0,0x8007 +8003534c: 8c421d00 lw v0,7424(v0) +80035350: 00000000 nop +80035354: 30420004 andi v0,v0,0x4 +80035358: 1040000b beqz v0,80035388 <PSX_WarmReboot+0x50> +8003535c: 00000000 nop +80035360: 10000002 b 8003536c <PSX_WarmReboot+0x34> +80035364: 00000000 nop + __asm__("nop"); + } + else + { + if(!(psxSdkFlags & PSX_INIT_CD)) + goto psx_warmreboot_nobios; +80035368: 00000000 nop +void PSX_WarmReboot(void) +{ + if(psxSdkFlags & PSX_INIT_NOBIOS) + { +psx_warmreboot_nobios: + PSX_DeInit(); +8003536c: 0c00d041 jal 80034104 <PSX_DeInit> +80035370: 00000000 nop + __asm__("j _start"); +80035374: 08004000 j 80010000 <__text_start> +80035378: 00000000 nop + __asm__("nop"); +8003537c: 00000000 nop + if(!(psxSdkFlags & PSX_INIT_CD)) + goto psx_warmreboot_nobios; + + BIOSWarmReboot(); + } +} +80035380: 10000009 b 800353a8 <PSX_WarmReboot+0x70> +80035384: 00000000 nop + __asm__("j _start"); + __asm__("nop"); + } + else + { + if(!(psxSdkFlags & PSX_INIT_CD)) +80035388: 3c028007 lui v0,0x8007 +8003538c: 8c421d00 lw v0,7424(v0) +80035390: 00000000 nop +80035394: 30420001 andi v0,v0,0x1 +80035398: 1040fff3 beqz v0,80035368 <PSX_WarmReboot+0x30> +8003539c: 00000000 nop + goto psx_warmreboot_nobios; + + BIOSWarmReboot(); +800353a0: 0c00ee54 jal 8003b950 <BIOSWarmReboot> +800353a4: 00000000 nop + } +} +800353a8: 00000000 nop +800353ac: 03c0e821 move sp,s8 +800353b0: 8fbf0014 lw ra,20(sp) +800353b4: 8fbe0010 lw s8,16(sp) +800353b8: 27bd0018 addiu sp,sp,24 +800353bc: 03e00008 jr ra +800353c0: 00000000 nop + +800353c4 <atexit>: + +static void *f_ptr[32]; +static int f_ptr_pos = 0; + +int atexit(void (*function)(void)) +{ +800353c4: 27bdfff8 addiu sp,sp,-8 +800353c8: afbe0004 sw s8,4(sp) +800353cc: 03a0f021 move s8,sp +800353d0: afc40008 sw a0,8(s8) + if(f_ptr_pos >= 32) +800353d4: 3c028007 lui v0,0x8007 +800353d8: 8c421d08 lw v0,7432(v0) +800353dc: 00000000 nop +800353e0: 28420020 slti v0,v0,32 +800353e4: 14400004 bnez v0,800353f8 <atexit+0x34> +800353e8: 00000000 nop + return -1; +800353ec: 2402ffff li v0,-1 +800353f0: 1000000f b 80035430 <atexit+0x6c> +800353f4: 00000000 nop + + f_ptr[f_ptr_pos++] = function; +800353f8: 3c028007 lui v0,0x8007 +800353fc: 8c421d08 lw v0,7432(v0) +80035400: 00000000 nop +80035404: 24440001 addiu a0,v0,1 +80035408: 3c038007 lui v1,0x8007 +8003540c: ac641d08 sw a0,7432(v1) +80035410: 3c048007 lui a0,0x8007 +80035414: 00021880 sll v1,v0,0x2 +80035418: 24828c78 addiu v0,a0,-29576 +8003541c: 00621021 addu v0,v1,v0 +80035420: 8fc30008 lw v1,8(s8) +80035424: 00000000 nop +80035428: ac430000 sw v1,0(v0) + + return 0; +8003542c: 00001021 move v0,zero +} +80035430: 03c0e821 move sp,s8 +80035434: 8fbe0004 lw s8,4(sp) +80035438: 27bd0008 addiu sp,sp,8 +8003543c: 03e00008 jr ra +80035440: 00000000 nop + +80035444 <call_atexit_callbacks>: + +void call_atexit_callbacks(void) +{ +80035444: 27bdffe0 addiu sp,sp,-32 +80035448: afbf001c sw ra,28(sp) +8003544c: afbe0018 sw s8,24(sp) +80035450: 03a0f021 move s8,sp + int i; + void (*f)(void); + + for(i = (f_ptr_pos - 1); i >= 0; i--) +80035454: 3c028007 lui v0,0x8007 +80035458: 8c421d08 lw v0,7432(v0) +8003545c: 00000000 nop +80035460: 2442ffff addiu v0,v0,-1 +80035464: afc20010 sw v0,16(s8) +80035468: 10000012 b 800354b4 <call_atexit_callbacks+0x70> +8003546c: 00000000 nop + (f = f_ptr[i])(); +80035470: 3c028007 lui v0,0x8007 +80035474: 8fc30010 lw v1,16(s8) +80035478: 00000000 nop +8003547c: 00031880 sll v1,v1,0x2 +80035480: 24428c78 addiu v0,v0,-29576 +80035484: 00621021 addu v0,v1,v0 +80035488: 8c420000 lw v0,0(v0) +8003548c: 00000000 nop +80035490: afc20014 sw v0,20(s8) +80035494: 8fc20014 lw v0,20(s8) +80035498: 00000000 nop +8003549c: 0040f809 jalr v0 +800354a0: 00000000 nop +void call_atexit_callbacks(void) +{ + int i; + void (*f)(void); + + for(i = (f_ptr_pos - 1); i >= 0; i--) +800354a4: 8fc20010 lw v0,16(s8) +800354a8: 00000000 nop +800354ac: 2442ffff addiu v0,v0,-1 +800354b0: afc20010 sw v0,16(s8) +800354b4: 8fc20010 lw v0,16(s8) +800354b8: 00000000 nop +800354bc: 0441ffec bgez v0,80035470 <call_atexit_callbacks+0x2c> +800354c0: 00000000 nop + (f = f_ptr[i])(); +} +800354c4: 00000000 nop +800354c8: 03c0e821 move sp,s8 +800354cc: 8fbf001c lw ra,28(sp) +800354d0: 8fbe0018 lw s8,24(sp) +800354d4: 27bd0020 addiu sp,sp,32 +800354d8: 03e00008 jr ra +800354dc: 00000000 nop + +800354e0 <call_ctors>: +extern void *__ctor_list; +extern void *__ctor_end; + +// Function to call static constructors (for C++, etc.) +static void call_ctors(void) +{ +800354e0: 27bdffe0 addiu sp,sp,-32 +800354e4: afbf001c sw ra,28(sp) +800354e8: afbe0018 sw s8,24(sp) +800354ec: 03a0f021 move s8,sp + dprintf("Calling static constructors..\n"); + + void **p = &__ctor_list; +800354f0: 3c028004 lui v0,0x8004 +800354f4: 24422564 addiu v0,v0,9572 +800354f8: afc20010 sw v0,16(s8) + + for (++p; *p != NULL && p < &__ctor_end; p++) +800354fc: 8fc20010 lw v0,16(s8) +80035500: 00000000 nop +80035504: 24420004 addiu v0,v0,4 +80035508: afc20010 sw v0,16(s8) +8003550c: 1000000b b 8003553c <call_ctors+0x5c> +80035510: 00000000 nop + (*(void (**)())p)(); +80035514: 8fc20010 lw v0,16(s8) +80035518: 00000000 nop +8003551c: 8c420000 lw v0,0(v0) +80035520: 00000000 nop +80035524: 0040f809 jalr v0 +80035528: 00000000 nop +{ + dprintf("Calling static constructors..\n"); + + void **p = &__ctor_list; + + for (++p; *p != NULL && p < &__ctor_end; p++) +8003552c: 8fc20010 lw v0,16(s8) +80035530: 00000000 nop +80035534: 24420004 addiu v0,v0,4 +80035538: afc20010 sw v0,16(s8) +8003553c: 8fc20010 lw v0,16(s8) +80035540: 00000000 nop +80035544: 8c420000 lw v0,0(v0) +80035548: 00000000 nop +8003554c: 10400007 beqz v0,8003556c <call_ctors+0x8c> +80035550: 00000000 nop +80035554: 8fc30010 lw v1,16(s8) +80035558: 3c028004 lui v0,0x8004 +8003555c: 2442257c addiu v0,v0,9596 +80035560: 0062102b sltu v0,v1,v0 +80035564: 1440ffeb bnez v0,80035514 <call_ctors+0x34> +80035568: 00000000 nop + (*(void (**)())p)(); + + dprintf("Finished calling static constructors\n"); + } +8003556c: 00000000 nop +80035570: 03c0e821 move sp,s8 +80035574: 8fbf001c lw ra,28(sp) +80035578: 8fbe0018 lw s8,24(sp) +8003557c: 27bd0020 addiu sp,sp,32 +80035580: 03e00008 jr ra +80035584: 00000000 nop + +80035588 <psxsdk_setup>: + +void psxsdk_setup() +{ +80035588: 27bdffe0 addiu sp,sp,-32 +8003558c: afbf001c sw ra,28(sp) +80035590: afbe0018 sw s8,24(sp) +80035594: 03a0f021 move s8,sp + unsigned int x; + + printf("Initializing PSXSDK... \n"); +80035598: 3c028004 lui v0,0x8004 +8003559c: 2444fe70 addiu a0,v0,-400 +800355a0: 0c00ed8f jal 8003b63c <printf> +800355a4: 00000000 nop + +// Clear BSS space + for(x = (unsigned int)__bss_start; x < (unsigned int)__bss_end; x++) +800355a8: 3c028004 lui v0,0x8004 +800355ac: 24422584 addiu v0,v0,9604 +800355b0: afc20010 sw v0,16(s8) +800355b4: 10000008 b 800355d8 <psxsdk_setup+0x50> +800355b8: 00000000 nop + *((unsigned char*)x) = 0; +800355bc: 8fc20010 lw v0,16(s8) +800355c0: 00000000 nop +800355c4: a0400000 sb zero,0(v0) + unsigned int x; + + printf("Initializing PSXSDK... \n"); + +// Clear BSS space + for(x = (unsigned int)__bss_start; x < (unsigned int)__bss_end; x++) +800355c8: 8fc20010 lw v0,16(s8) +800355cc: 00000000 nop +800355d0: 24420001 addiu v0,v0,1 +800355d4: afc20010 sw v0,16(s8) +800355d8: 3c028007 lui v0,0x8007 +800355dc: 24421bf8 addiu v0,v0,7160 +800355e0: 8fc30010 lw v1,16(s8) +800355e4: 00000000 nop +800355e8: 0062102b sltu v0,v1,v0 +800355ec: 1440fff3 bnez v0,800355bc <psxsdk_setup+0x34> +800355f0: 00000000 nop + *((unsigned char*)x) = 0; + +// Setup memory allocation functions + malloc_setup(); +800355f4: 0c00abb1 jal 8002aec4 <malloc_setup> +800355f8: 00000000 nop + +// Call static constructors + call_ctors(); +800355fc: 0c00d538 jal 800354e0 <call_ctors> +80035600: 00000000 nop +} +80035604: 00000000 nop +80035608: 03c0e821 move sp,s8 +8003560c: 8fbf001c lw ra,28(sp) +80035610: 8fbe0018 lw s8,24(sp) +80035614: 27bd0020 addiu sp,sp,32 +80035618: 03e00008 jr ra +8003561c: 00000000 nop + +80035620 <abs>: + +static unsigned int rand_seed = 1; +//static unsigned int rand_next = 0; + +int abs(int x) +{ +80035620: 27bdfff8 addiu sp,sp,-8 +80035624: afbe0004 sw s8,4(sp) +80035628: 03a0f021 move s8,sp +8003562c: afc40008 sw a0,8(s8) + if(x<0)return -x; +80035630: 8fc20008 lw v0,8(s8) +80035634: 00000000 nop +80035638: 04410006 bgez v0,80035654 <abs+0x34> +8003563c: 00000000 nop +80035640: 8fc20008 lw v0,8(s8) +80035644: 00000000 nop +80035648: 00021023 negu v0,v0 +8003564c: 10000002 b 80035658 <abs+0x38> +80035650: 00000000 nop + + return x; +80035654: 8fc20008 lw v0,8(s8) +} +80035658: 03c0e821 move sp,s8 +8003565c: 8fbe0004 lw s8,4(sp) +80035660: 27bd0008 addiu sp,sp,8 +80035664: 03e00008 jr ra +80035668: 00000000 nop + +8003566c <srand>: + +void srand(unsigned int seed) +{ +8003566c: 27bdfff8 addiu sp,sp,-8 +80035670: afbe0004 sw s8,4(sp) +80035674: 03a0f021 move s8,sp +80035678: afc40008 sw a0,8(s8) + rand_seed = seed; +8003567c: 3c028004 lui v0,0x8004 +80035680: 8fc30008 lw v1,8(s8) +80035684: 00000000 nop +80035688: ac432560 sw v1,9568(v0) +} +8003568c: 00000000 nop +80035690: 03c0e821 move sp,s8 +80035694: 8fbe0004 lw s8,4(sp) +80035698: 27bd0008 addiu sp,sp,8 +8003569c: 03e00008 jr ra +800356a0: 00000000 nop + +800356a4 <rand>: + +int rand(void) /* RAND_MAX assumed to be 32767. */ +{ +800356a4: 27bdfff8 addiu sp,sp,-8 +800356a8: afbe0004 sw s8,4(sp) +800356ac: 03a0f021 move s8,sp + rand_seed = rand_seed * 1103515245 + 12345; +800356b0: 3c028004 lui v0,0x8004 +800356b4: 8c432560 lw v1,9568(v0) +800356b8: 3c0241c6 lui v0,0x41c6 +800356bc: 34424e6d ori v0,v0,0x4e6d +800356c0: 00620018 mult v1,v0 +800356c4: 00001012 mflo v0 +800356c8: 24433039 addiu v1,v0,12345 +800356cc: 3c028004 lui v0,0x8004 +800356d0: ac432560 sw v1,9568(v0) + return (unsigned)(rand_seed/65536) % 32768; +800356d4: 3c028004 lui v0,0x8004 +800356d8: 8c422560 lw v0,9568(v0) +800356dc: 00000000 nop +800356e0: 00021402 srl v0,v0,0x10 +800356e4: 30427fff andi v0,v0,0x7fff +} +800356e8: 03c0e821 move sp,s8 +800356ec: 8fbe0004 lw s8,4(sp) +800356f0: 27bd0008 addiu sp,sp,8 +800356f4: 03e00008 jr ra +800356f8: 00000000 nop + +800356fc <__ulltoa_internal__>: + +static char *__ulltoa_internal__(unsigned long long value, char *str, int base, int minus_sign, + unsigned long long maxp ) +{ +800356fc: 27bdffc0 addiu sp,sp,-64 +80035700: afbf003c sw ra,60(sp) +80035704: afbe0038 sw s8,56(sp) +80035708: afb30034 sw s3,52(sp) +8003570c: afb20030 sw s2,48(sp) +80035710: afb1002c sw s1,44(sp) +80035714: afb00028 sw s0,40(sp) +80035718: 03a0f021 move s8,sp +8003571c: afc40040 sw a0,64(s8) +80035720: afc50044 sw a1,68(s8) +80035724: afc60048 sw a2,72(s8) +80035728: afc7004c sw a3,76(s8) + unsigned long long p; + unsigned long long p3; + int c; + int a; + + p = 1; +8003572c: 24020001 li v0,1 +80035730: 00001821 move v1,zero +80035734: afc20010 sw v0,16(s8) +80035738: afc30014 sw v1,20(s8) + + do + { + p3 = p; +8003573c: 8fc20010 lw v0,16(s8) +80035740: 8fc30014 lw v1,20(s8) +80035744: afc20018 sw v0,24(s8) +80035748: afc3001c sw v1,28(s8) + p *= base; +8003574c: 8fc2004c lw v0,76(s8) +80035750: 00000000 nop +80035754: 00408021 move s0,v0 +80035758: 000217c3 sra v0,v0,0x1f +8003575c: 00408821 move s1,v0 +80035760: 8fc20014 lw v0,20(s8) +80035764: 00000000 nop +80035768: 00500018 mult v0,s0 +8003576c: 00001012 mflo v0 +80035770: 8fc30010 lw v1,16(s8) +80035774: 00000000 nop +80035778: 00710018 mult v1,s1 +8003577c: 00001812 mflo v1 +80035780: 00432021 addu a0,v0,v1 +80035784: 8fc20010 lw v0,16(s8) +80035788: 00000000 nop +8003578c: 00500019 multu v0,s0 +80035790: 00001012 mflo v0 +80035794: 00001810 mfhi v1 +80035798: 00832021 addu a0,a0,v1 +8003579c: 00801821 move v1,a0 +800357a0: afc20010 sw v0,16(s8) +800357a4: afc30014 sw v1,20(s8) +800357a8: afc20010 sw v0,16(s8) +800357ac: afc30014 sw v1,20(s8) + + if(maxp && p > maxp) +800357b0: 8fc20058 lw v0,88(s8) +800357b4: 8fc3005c lw v1,92(s8) +800357b8: 00000000 nop +800357bc: 00431025 or v0,v0,v1 +800357c0: 10400012 beqz v0,8003580c <__ulltoa_internal__+0x110> +800357c4: 00000000 nop +800357c8: 8fc30014 lw v1,20(s8) +800357cc: 8fc2005c lw v0,92(s8) +800357d0: 00000000 nop +800357d4: 0043102b sltu v0,v0,v1 +800357d8: 1440002d bnez v0,80035890 <__ulltoa_internal__+0x194> +800357dc: 00000000 nop +800357e0: 8fc30014 lw v1,20(s8) +800357e4: 8fc2005c lw v0,92(s8) +800357e8: 00000000 nop +800357ec: 14620007 bne v1,v0,8003580c <__ulltoa_internal__+0x110> +800357f0: 00000000 nop +800357f4: 8fc30010 lw v1,16(s8) +800357f8: 8fc20058 lw v0,88(s8) +800357fc: 00000000 nop +80035800: 0043102b sltu v0,v0,v1 +80035804: 14400022 bnez v0,80035890 <__ulltoa_internal__+0x194> +80035808: 00000000 nop + break; + }while((p >= p3) && !(p % p3)); +8003580c: 8fc3001c lw v1,28(s8) +80035810: 8fc20014 lw v0,20(s8) +80035814: 00000000 nop +80035818: 0043102b sltu v0,v0,v1 +8003581c: 1440001d bnez v0,80035894 <__ulltoa_internal__+0x198> +80035820: 00000000 nop +80035824: 8fc3001c lw v1,28(s8) +80035828: 8fc20014 lw v0,20(s8) +8003582c: 00000000 nop +80035830: 14620007 bne v1,v0,80035850 <__ulltoa_internal__+0x154> +80035834: 00000000 nop +80035838: 8fc30018 lw v1,24(s8) +8003583c: 8fc20010 lw v0,16(s8) +80035840: 00000000 nop +80035844: 0043102b sltu v0,v0,v1 +80035848: 14400012 bnez v0,80035894 <__ulltoa_internal__+0x198> +8003584c: 00000000 nop +80035850: 8fc20010 lw v0,16(s8) +80035854: 8fc30014 lw v1,20(s8) +80035858: 8fc60018 lw a2,24(s8) +8003585c: 8fc7001c lw a3,28(s8) +80035860: 00402021 move a0,v0 +80035864: 00602821 move a1,v1 +80035868: 0c00f245 jal 8003c914 <__umoddi3> +8003586c: 00000000 nop +80035870: 00402021 move a0,v0 +80035874: 00602821 move a1,v1 +80035878: 00801021 move v0,a0 +8003587c: 00451025 or v0,v0,a1 +80035880: 1040ffae beqz v0,8003573c <__ulltoa_internal__+0x40> +80035884: 00000000 nop +80035888: 10000002 b 80035894 <__ulltoa_internal__+0x198> +8003588c: 00000000 nop + { + p3 = p; + p *= base; + + if(maxp && p > maxp) + break; +80035890: 00000000 nop + }while((p >= p3) && !(p % p3)); + + if(minus_sign) +80035894: 8fc20050 lw v0,80(s8) +80035898: 00000000 nop +8003589c: 10400007 beqz v0,800358bc <__ulltoa_internal__+0x1c0> +800358a0: 00000000 nop + *(str++) = '-'; +800358a4: 8fc20048 lw v0,72(s8) +800358a8: 00000000 nop +800358ac: 24430001 addiu v1,v0,1 +800358b0: afc30048 sw v1,72(s8) +800358b4: 2403002d li v1,45 +800358b8: a0430000 sb v1,0(v0) + + for(a = 0;p3 > 0;p3/=base) +800358bc: afc00024 sw zero,36(s8) +800358c0: 10000041 b 800359c8 <__ulltoa_internal__+0x2cc> +800358c4: 00000000 nop + { + c = value / p3; +800358c8: 8fc60018 lw a2,24(s8) +800358cc: 8fc7001c lw a3,28(s8) +800358d0: 8fc40040 lw a0,64(s8) +800358d4: 8fc50044 lw a1,68(s8) +800358d8: 0c00f0ae jal 8003c2b8 <__udivdi3> +800358dc: 00000000 nop +800358e0: afc20020 sw v0,32(s8) + value %= p3; +800358e4: 8fc20040 lw v0,64(s8) +800358e8: 8fc30044 lw v1,68(s8) +800358ec: 8fc60018 lw a2,24(s8) +800358f0: 8fc7001c lw a3,28(s8) +800358f4: 00402021 move a0,v0 +800358f8: 00602821 move a1,v1 +800358fc: 0c00f245 jal 8003c914 <__umoddi3> +80035900: 00000000 nop +80035904: afc20040 sw v0,64(s8) +80035908: afc30044 sw v1,68(s8) + + if(c) +8003590c: 8fc20020 lw v0,32(s8) +80035910: 00000000 nop +80035914: 10400003 beqz v0,80035924 <__ulltoa_internal__+0x228> +80035918: 00000000 nop + a = 1; +8003591c: 24020001 li v0,1 +80035920: afc20024 sw v0,36(s8) + + if(a) +80035924: 8fc20024 lw v0,36(s8) +80035928: 00000000 nop +8003592c: 10400019 beqz v0,80035994 <__ulltoa_internal__+0x298> +80035930: 00000000 nop + { + if(c <= 9) +80035934: 8fc20020 lw v0,32(s8) +80035938: 00000000 nop +8003593c: 2842000a slti v0,v0,10 +80035940: 10400007 beqz v0,80035960 <__ulltoa_internal__+0x264> +80035944: 00000000 nop + c += '0'; +80035948: 8fc20020 lw v0,32(s8) +8003594c: 00000000 nop +80035950: 24420030 addiu v0,v0,48 +80035954: afc20020 sw v0,32(s8) +80035958: 10000005 b 80035970 <__ulltoa_internal__+0x274> +8003595c: 00000000 nop + else + c = (c - 10) + 'A'; +80035960: 8fc20020 lw v0,32(s8) +80035964: 00000000 nop +80035968: 24420037 addiu v0,v0,55 +8003596c: afc20020 sw v0,32(s8) + + *(str++) = c; +80035970: 8fc20048 lw v0,72(s8) +80035974: 00000000 nop +80035978: 24430001 addiu v1,v0,1 +8003597c: afc30048 sw v1,72(s8) +80035980: 8fc30020 lw v1,32(s8) +80035984: 00000000 nop +80035988: 00031e00 sll v1,v1,0x18 +8003598c: 00031e03 sra v1,v1,0x18 +80035990: a0430000 sb v1,0(v0) + }while((p >= p3) && !(p % p3)); + + if(minus_sign) + *(str++) = '-'; + + for(a = 0;p3 > 0;p3/=base) +80035994: 8fc2004c lw v0,76(s8) +80035998: 00000000 nop +8003599c: 00409021 move s2,v0 +800359a0: 000217c3 sra v0,v0,0x1f +800359a4: 00409821 move s3,v0 +800359a8: 02403021 move a2,s2 +800359ac: 02603821 move a3,s3 +800359b0: 8fc40018 lw a0,24(s8) +800359b4: 8fc5001c lw a1,28(s8) +800359b8: 0c00f0ae jal 8003c2b8 <__udivdi3> +800359bc: 00000000 nop +800359c0: afc20018 sw v0,24(s8) +800359c4: afc3001c sw v1,28(s8) +800359c8: 8fc20018 lw v0,24(s8) +800359cc: 8fc3001c lw v1,28(s8) +800359d0: 00000000 nop +800359d4: 00431025 or v0,v0,v1 +800359d8: 1440ffbb bnez v0,800358c8 <__ulltoa_internal__+0x1cc> +800359dc: 00000000 nop + + *(str++) = c; + } + } + + *str = '\0'; +800359e0: 8fc20048 lw v0,72(s8) +800359e4: 00000000 nop +800359e8: a0400000 sb zero,0(v0) + + return str; +800359ec: 8fc20048 lw v0,72(s8) +} +800359f0: 03c0e821 move sp,s8 +800359f4: 8fbf003c lw ra,60(sp) +800359f8: 8fbe0038 lw s8,56(sp) +800359fc: 8fb30034 lw s3,52(sp) +80035a00: 8fb20030 lw s2,48(sp) +80035a04: 8fb1002c lw s1,44(sp) +80035a08: 8fb00028 lw s0,40(sp) +80035a0c: 27bd0040 addiu sp,sp,64 +80035a10: 03e00008 jr ra +80035a14: 00000000 nop + +80035a18 <ulltoa>: + +char *ulltoa(unsigned long long value, char *str, int base) +{ +80035a18: 27bdffd8 addiu sp,sp,-40 +80035a1c: afbf0024 sw ra,36(sp) +80035a20: afbe0020 sw s8,32(sp) +80035a24: 03a0f021 move s8,sp +80035a28: afc40028 sw a0,40(s8) +80035a2c: afc5002c sw a1,44(s8) +80035a30: afc60030 sw a2,48(s8) +80035a34: afc70034 sw a3,52(s8) + return __ulltoa_internal__(value, str, base, 0, 0); +80035a38: 00001021 move v0,zero +80035a3c: 00001821 move v1,zero +80035a40: afa20018 sw v0,24(sp) +80035a44: afa3001c sw v1,28(sp) +80035a48: afa00010 sw zero,16(sp) +80035a4c: 8fc70034 lw a3,52(s8) +80035a50: 8fc60030 lw a2,48(s8) +80035a54: 8fc40028 lw a0,40(s8) +80035a58: 8fc5002c lw a1,44(s8) +80035a5c: 0c00d5bf jal 800356fc <__ulltoa_internal__> +80035a60: 00000000 nop +} +80035a64: 03c0e821 move sp,s8 +80035a68: 8fbf0024 lw ra,36(sp) +80035a6c: 8fbe0020 lw s8,32(sp) +80035a70: 27bd0028 addiu sp,sp,40 +80035a74: 03e00008 jr ra +80035a78: 00000000 nop + +80035a7c <ultoa>: + +char *ultoa(unsigned long value, char *str, int base) +{ +80035a7c: 27bdffd8 addiu sp,sp,-40 +80035a80: afbf0024 sw ra,36(sp) +80035a84: afbe0020 sw s8,32(sp) +80035a88: 03a0f021 move s8,sp +80035a8c: afc40028 sw a0,40(s8) +80035a90: afc5002c sw a1,44(s8) +80035a94: afc60030 sw a2,48(s8) + return __ulltoa_internal__(value, str, base, 0, (sizeof(long)==8)?0:0xFFFFFFFF); +80035a98: 8fc20028 lw v0,40(s8) +80035a9c: 00000000 nop +80035aa0: 00404021 move t0,v0 +80035aa4: 00004821 move t1,zero +80035aa8: 2402ffff li v0,-1 +80035aac: 00001821 move v1,zero +80035ab0: afa20018 sw v0,24(sp) +80035ab4: afa3001c sw v1,28(sp) +80035ab8: afa00010 sw zero,16(sp) +80035abc: 8fc70030 lw a3,48(s8) +80035ac0: 8fc6002c lw a2,44(s8) +80035ac4: 01002021 move a0,t0 +80035ac8: 01202821 move a1,t1 +80035acc: 0c00d5bf jal 800356fc <__ulltoa_internal__> +80035ad0: 00000000 nop +} +80035ad4: 03c0e821 move sp,s8 +80035ad8: 8fbf0024 lw ra,36(sp) +80035adc: 8fbe0020 lw s8,32(sp) +80035ae0: 27bd0028 addiu sp,sp,40 +80035ae4: 03e00008 jr ra +80035ae8: 00000000 nop + +80035aec <utoa>: + +char *utoa(unsigned int value, char *str, int base) +{ +80035aec: 27bdffd8 addiu sp,sp,-40 +80035af0: afbf0024 sw ra,36(sp) +80035af4: afbe0020 sw s8,32(sp) +80035af8: 03a0f021 move s8,sp +80035afc: afc40028 sw a0,40(s8) +80035b00: afc5002c sw a1,44(s8) +80035b04: afc60030 sw a2,48(s8) + return __ulltoa_internal__(value, str, base, 0, 0xFFFFFFFF); +80035b08: 8fc20028 lw v0,40(s8) +80035b0c: 00000000 nop +80035b10: 00404021 move t0,v0 +80035b14: 00004821 move t1,zero +80035b18: 2402ffff li v0,-1 +80035b1c: 00001821 move v1,zero +80035b20: afa20018 sw v0,24(sp) +80035b24: afa3001c sw v1,28(sp) +80035b28: afa00010 sw zero,16(sp) +80035b2c: 8fc70030 lw a3,48(s8) +80035b30: 8fc6002c lw a2,44(s8) +80035b34: 01002021 move a0,t0 +80035b38: 01202821 move a1,t1 +80035b3c: 0c00d5bf jal 800356fc <__ulltoa_internal__> +80035b40: 00000000 nop +} +80035b44: 03c0e821 move sp,s8 +80035b48: 8fbf0024 lw ra,36(sp) +80035b4c: 8fbe0020 lw s8,32(sp) +80035b50: 27bd0028 addiu sp,sp,40 +80035b54: 03e00008 jr ra +80035b58: 00000000 nop + +80035b5c <lltoa>: + +char *lltoa(long long value, char *str, int base) +{ +80035b5c: 27bdffd8 addiu sp,sp,-40 +80035b60: afbf0024 sw ra,36(sp) +80035b64: afbe0020 sw s8,32(sp) +80035b68: 03a0f021 move s8,sp +80035b6c: afc40028 sw a0,40(s8) +80035b70: afc5002c sw a1,44(s8) +80035b74: afc60030 sw a2,48(s8) +80035b78: afc70034 sw a3,52(s8) + return __ulltoa_internal__((value<0)?-value:value, str, base, value<0, 0); +80035b7c: 8fc20028 lw v0,40(s8) +80035b80: 8fc3002c lw v1,44(s8) +80035b84: 00000000 nop +80035b88: 0461000a bgez v1,80035bb4 <lltoa+0x58> +80035b8c: 00000000 nop +80035b90: 00003021 move a2,zero +80035b94: 00003821 move a3,zero +80035b98: 00c22023 subu a0,a2,v0 +80035b9c: 00c4402b sltu t0,a2,a0 +80035ba0: 00e32823 subu a1,a3,v1 +80035ba4: 00a81023 subu v0,a1,t0 +80035ba8: 00402821 move a1,v0 +80035bac: 00801021 move v0,a0 +80035bb0: 00a01821 move v1,a1 +80035bb4: 00402021 move a0,v0 +80035bb8: 00602821 move a1,v1 +80035bbc: 8fc2002c lw v0,44(s8) +80035bc0: 00000000 nop +80035bc4: 000217c2 srl v0,v0,0x1f +80035bc8: 304200ff andi v0,v0,0xff +80035bcc: 00003021 move a2,zero +80035bd0: 00003821 move a3,zero +80035bd4: afa60018 sw a2,24(sp) +80035bd8: afa7001c sw a3,28(sp) +80035bdc: afa20010 sw v0,16(sp) +80035be0: 8fc70034 lw a3,52(s8) +80035be4: 8fc60030 lw a2,48(s8) +80035be8: 0c00d5bf jal 800356fc <__ulltoa_internal__> +80035bec: 00000000 nop +} +80035bf0: 03c0e821 move sp,s8 +80035bf4: 8fbf0024 lw ra,36(sp) +80035bf8: 8fbe0020 lw s8,32(sp) +80035bfc: 27bd0028 addiu sp,sp,40 +80035c00: 03e00008 jr ra +80035c04: 00000000 nop + +80035c08 <ltoa>: + +char *ltoa(long value, char *str, int base) +{ +80035c08: 27bdffd8 addiu sp,sp,-40 +80035c0c: afbf0024 sw ra,36(sp) +80035c10: afbe0020 sw s8,32(sp) +80035c14: 03a0f021 move s8,sp +80035c18: afc40028 sw a0,40(s8) +80035c1c: afc5002c sw a1,44(s8) +80035c20: afc60030 sw a2,48(s8) + return __ulltoa_internal__((value<0)?-value:value, str, base, value<0, (sizeof(long)==8)?0:0xFFFFFFFF); +80035c24: 8fc20028 lw v0,40(s8) +80035c28: 00000000 nop +80035c2c: 04410002 bgez v0,80035c38 <ltoa+0x30> +80035c30: 00000000 nop +80035c34: 00021023 negu v0,v0 +80035c38: 00404021 move t0,v0 +80035c3c: 000217c3 sra v0,v0,0x1f +80035c40: 00404821 move t1,v0 +80035c44: 8fc20028 lw v0,40(s8) +80035c48: 00000000 nop +80035c4c: 000217c2 srl v0,v0,0x1f +80035c50: 304200ff andi v0,v0,0xff +80035c54: 00402021 move a0,v0 +80035c58: 2402ffff li v0,-1 +80035c5c: 00001821 move v1,zero +80035c60: afa20018 sw v0,24(sp) +80035c64: afa3001c sw v1,28(sp) +80035c68: afa40010 sw a0,16(sp) +80035c6c: 8fc70030 lw a3,48(s8) +80035c70: 8fc6002c lw a2,44(s8) +80035c74: 01002021 move a0,t0 +80035c78: 01202821 move a1,t1 +80035c7c: 0c00d5bf jal 800356fc <__ulltoa_internal__> +80035c80: 00000000 nop +} +80035c84: 03c0e821 move sp,s8 +80035c88: 8fbf0024 lw ra,36(sp) +80035c8c: 8fbe0020 lw s8,32(sp) +80035c90: 27bd0028 addiu sp,sp,40 +80035c94: 03e00008 jr ra +80035c98: 00000000 nop + +80035c9c <itoa>: + +char *itoa(int value, char *str, int base) +{ +80035c9c: 27bdffd8 addiu sp,sp,-40 +80035ca0: afbf0024 sw ra,36(sp) +80035ca4: afbe0020 sw s8,32(sp) +80035ca8: 03a0f021 move s8,sp +80035cac: afc40028 sw a0,40(s8) +80035cb0: afc5002c sw a1,44(s8) +80035cb4: afc60030 sw a2,48(s8) + return __ulltoa_internal__((value<0)?-value:value, str, base, value<0, 0xFFFFFFFF); +80035cb8: 8fc20028 lw v0,40(s8) +80035cbc: 00000000 nop +80035cc0: 04410002 bgez v0,80035ccc <itoa+0x30> +80035cc4: 00000000 nop +80035cc8: 00021023 negu v0,v0 +80035ccc: 00404021 move t0,v0 +80035cd0: 000217c3 sra v0,v0,0x1f +80035cd4: 00404821 move t1,v0 +80035cd8: 8fc20028 lw v0,40(s8) +80035cdc: 00000000 nop +80035ce0: 000217c2 srl v0,v0,0x1f +80035ce4: 304200ff andi v0,v0,0xff +80035ce8: 00402021 move a0,v0 +80035cec: 2402ffff li v0,-1 +80035cf0: 00001821 move v1,zero +80035cf4: afa20018 sw v0,24(sp) +80035cf8: afa3001c sw v1,28(sp) +80035cfc: afa40010 sw a0,16(sp) +80035d00: 8fc70030 lw a3,48(s8) +80035d04: 8fc6002c lw a2,44(s8) +80035d08: 01002021 move a0,t0 +80035d0c: 01202821 move a1,t1 +80035d10: 0c00d5bf jal 800356fc <__ulltoa_internal__> +80035d14: 00000000 nop +} +80035d18: 03c0e821 move sp,s8 +80035d1c: 8fbf0024 lw ra,36(sp) +80035d20: 8fbe0020 lw s8,32(sp) +80035d24: 27bd0028 addiu sp,sp,40 +80035d28: 03e00008 jr ra +80035d2c: 00000000 nop + +80035d30 <abort>: + +void abort(void) +{ +80035d30: 27bdffe8 addiu sp,sp,-24 +80035d34: afbf0014 sw ra,20(sp) +80035d38: afbe0010 sw s8,16(sp) +80035d3c: 03a0f021 move s8,sp + printf("abort(): Abnormal program termination\n"); +80035d40: 3c028004 lui v0,0x8004 +80035d44: 2444fe8c addiu a0,v0,-372 +80035d48: 0c00ed8f jal 8003b63c <printf> +80035d4c: 00000000 nop + exit(1); +80035d50: 24040001 li a0,1 +80035d54: 0c0040e7 jal 8001039c <exit> +80035d58: 00000000 nop +} +80035d5c: 00000000 nop +80035d60: 03c0e821 move sp,s8 +80035d64: 8fbf0014 lw ra,20(sp) +80035d68: 8fbe0010 lw s8,16(sp) +80035d6c: 27bd0018 addiu sp,sp,24 +80035d70: 03e00008 jr ra +80035d74: 00000000 nop + +80035d78 <memcpy>: +#include <stdlib.h> +#include <unistd.h> +#include <ctype.h> + +void *memcpy(void *dst, const void *src, size_t len) +{ +80035d78: 27bdfff0 addiu sp,sp,-16 +80035d7c: afbe000c sw s8,12(sp) +80035d80: 03a0f021 move s8,sp +80035d84: afc40010 sw a0,16(s8) +80035d88: afc50014 sw a1,20(s8) +80035d8c: afc60018 sw a2,24(s8) + void *dst2 = dst; +80035d90: 8fc20010 lw v0,16(s8) +80035d94: 00000000 nop +80035d98: afc20000 sw v0,0(s8) + + while(len--) +80035d9c: 1000000c b 80035dd0 <memcpy+0x58> +80035da0: 00000000 nop + *(((unsigned char*)dst++)) = *(((unsigned char*)src++)); +80035da4: 8fc20010 lw v0,16(s8) +80035da8: 00000000 nop +80035dac: 24430001 addiu v1,v0,1 +80035db0: afc30010 sw v1,16(s8) +80035db4: 8fc30014 lw v1,20(s8) +80035db8: 00000000 nop +80035dbc: 24640001 addiu a0,v1,1 +80035dc0: afc40014 sw a0,20(s8) +80035dc4: 90630000 lbu v1,0(v1) +80035dc8: 00000000 nop +80035dcc: a0430000 sb v1,0(v0) + +void *memcpy(void *dst, const void *src, size_t len) +{ + void *dst2 = dst; + + while(len--) +80035dd0: 8fc20018 lw v0,24(s8) +80035dd4: 00000000 nop +80035dd8: 2443ffff addiu v1,v0,-1 +80035ddc: afc30018 sw v1,24(s8) +80035de0: 1440fff0 bnez v0,80035da4 <memcpy+0x2c> +80035de4: 00000000 nop + *(((unsigned char*)dst++)) = *(((unsigned char*)src++)); + + return dst2; +80035de8: 8fc20000 lw v0,0(s8) +} +80035dec: 03c0e821 move sp,s8 +80035df0: 8fbe000c lw s8,12(sp) +80035df4: 27bd0010 addiu sp,sp,16 +80035df8: 03e00008 jr ra +80035dfc: 00000000 nop + +80035e00 <memccpy>: + +void *memccpy(void *dst, const void *src, int c, size_t len) +{ +80035e00: 27bdfff0 addiu sp,sp,-16 +80035e04: afbe000c sw s8,12(sp) +80035e08: 03a0f021 move s8,sp +80035e0c: afc40010 sw a0,16(s8) +80035e10: afc50014 sw a1,20(s8) +80035e14: afc60018 sw a2,24(s8) +80035e18: afc7001c sw a3,28(s8) + unsigned char c2; + + while(len--) +80035e1c: 10000017 b 80035e7c <memccpy+0x7c> +80035e20: 00000000 nop + { + *(((unsigned char*)dst++)) = ( c2 = *(((unsigned char*)src++)) ); +80035e24: 8fc20010 lw v0,16(s8) +80035e28: 00000000 nop +80035e2c: 24430001 addiu v1,v0,1 +80035e30: afc30010 sw v1,16(s8) +80035e34: 8fc30014 lw v1,20(s8) +80035e38: 00000000 nop +80035e3c: 24640001 addiu a0,v1,1 +80035e40: afc40014 sw a0,20(s8) +80035e44: 90630000 lbu v1,0(v1) +80035e48: 00000000 nop +80035e4c: a3c30000 sb v1,0(s8) +80035e50: 93c30000 lbu v1,0(s8) +80035e54: 00000000 nop +80035e58: a0430000 sb v1,0(v0) + + if(c2 == c) +80035e5c: 93c30000 lbu v1,0(s8) +80035e60: 8fc20018 lw v0,24(s8) +80035e64: 00000000 nop +80035e68: 14620004 bne v1,v0,80035e7c <memccpy+0x7c> +80035e6c: 00000000 nop + return (void*)src; +80035e70: 8fc20014 lw v0,20(s8) +80035e74: 10000008 b 80035e98 <memccpy+0x98> +80035e78: 00000000 nop + +void *memccpy(void *dst, const void *src, int c, size_t len) +{ + unsigned char c2; + + while(len--) +80035e7c: 8fc2001c lw v0,28(s8) +80035e80: 00000000 nop +80035e84: 2443ffff addiu v1,v0,-1 +80035e88: afc3001c sw v1,28(s8) +80035e8c: 1440ffe5 bnez v0,80035e24 <memccpy+0x24> +80035e90: 00000000 nop + + if(c2 == c) + return (void*)src; + } + + return NULL; +80035e94: 00001021 move v0,zero +} +80035e98: 03c0e821 move sp,s8 +80035e9c: 8fbe000c lw s8,12(sp) +80035ea0: 27bd0010 addiu sp,sp,16 +80035ea4: 03e00008 jr ra +80035ea8: 00000000 nop + +80035eac <memset>: + +void *memset(void *dst , char c , size_t n) +{ +80035eac: 27bdfff0 addiu sp,sp,-16 +80035eb0: afbe000c sw s8,12(sp) +80035eb4: 03a0f021 move s8,sp +80035eb8: afc40010 sw a0,16(s8) +80035ebc: 00a01021 move v0,a1 +80035ec0: afc60018 sw a2,24(s8) +80035ec4: a3c20014 sb v0,20(s8) + unsigned char *dstc = (unsigned char*)dst; +80035ec8: 8fc20010 lw v0,16(s8) +80035ecc: 00000000 nop +80035ed0: afc20004 sw v0,4(s8) + int x; + + for(x = 0; x < n; x++) +80035ed4: afc00000 sw zero,0(s8) +80035ed8: 1000000c b 80035f0c <memset+0x60> +80035edc: 00000000 nop + dstc[x] = c; +80035ee0: 8fc20000 lw v0,0(s8) +80035ee4: 8fc30004 lw v1,4(s8) +80035ee8: 00000000 nop +80035eec: 00621021 addu v0,v1,v0 +80035ef0: 93c30014 lbu v1,20(s8) +80035ef4: 00000000 nop +80035ef8: a0430000 sb v1,0(v0) +void *memset(void *dst , char c , size_t n) +{ + unsigned char *dstc = (unsigned char*)dst; + int x; + + for(x = 0; x < n; x++) +80035efc: 8fc20000 lw v0,0(s8) +80035f00: 00000000 nop +80035f04: 24420001 addiu v0,v0,1 +80035f08: afc20000 sw v0,0(s8) +80035f0c: 8fc30000 lw v1,0(s8) +80035f10: 8fc20018 lw v0,24(s8) +80035f14: 00000000 nop +80035f18: 0062102b sltu v0,v1,v0 +80035f1c: 1440fff0 bnez v0,80035ee0 <memset+0x34> +80035f20: 00000000 nop + dstc[x] = c; + + return dst; +80035f24: 8fc20010 lw v0,16(s8) +} +80035f28: 03c0e821 move sp,s8 +80035f2c: 8fbe000c lw s8,12(sp) +80035f30: 27bd0010 addiu sp,sp,16 +80035f34: 03e00008 jr ra +80035f38: 00000000 nop + +80035f3c <memcmp>: + +int memcmp(const void *b1, const void *b2, size_t n) +{ +80035f3c: 27bdffe8 addiu sp,sp,-24 +80035f40: afbe0014 sw s8,20(sp) +80035f44: 03a0f021 move s8,sp +80035f48: afc40018 sw a0,24(s8) +80035f4c: afc5001c sw a1,28(s8) +80035f50: afc60020 sw a2,32(s8) + int x; + unsigned char *bp1 = (unsigned char*)b1; +80035f54: 8fc20018 lw v0,24(s8) +80035f58: 00000000 nop +80035f5c: afc20004 sw v0,4(s8) + unsigned char *bp2 = (unsigned char*)b2; +80035f60: 8fc2001c lw v0,28(s8) +80035f64: 00000000 nop +80035f68: afc20008 sw v0,8(s8) + + for(x = 0; x < n; x++) +80035f6c: afc00000 sw zero,0(s8) +80035f70: 10000022 b 80035ffc <memcmp+0xc0> +80035f74: 00000000 nop + if(bp1[x] != bp2[x]) +80035f78: 8fc20000 lw v0,0(s8) +80035f7c: 8fc30004 lw v1,4(s8) +80035f80: 00000000 nop +80035f84: 00621021 addu v0,v1,v0 +80035f88: 90430000 lbu v1,0(v0) +80035f8c: 8fc20000 lw v0,0(s8) +80035f90: 8fc40008 lw a0,8(s8) +80035f94: 00000000 nop +80035f98: 00821021 addu v0,a0,v0 +80035f9c: 90420000 lbu v0,0(v0) +80035fa0: 00000000 nop +80035fa4: 10620011 beq v1,v0,80035fec <memcmp+0xb0> +80035fa8: 00000000 nop + return (bp1[x] - bp2[x]); +80035fac: 8fc20000 lw v0,0(s8) +80035fb0: 8fc30004 lw v1,4(s8) +80035fb4: 00000000 nop +80035fb8: 00621021 addu v0,v1,v0 +80035fbc: 90420000 lbu v0,0(v0) +80035fc0: 00000000 nop +80035fc4: 00402021 move a0,v0 +80035fc8: 8fc20000 lw v0,0(s8) +80035fcc: 8fc30008 lw v1,8(s8) +80035fd0: 00000000 nop +80035fd4: 00621021 addu v0,v1,v0 +80035fd8: 90420000 lbu v0,0(v0) +80035fdc: 00000000 nop +80035fe0: 00821023 subu v0,a0,v0 +80035fe4: 1000000c b 80036018 <memcmp+0xdc> +80035fe8: 00000000 nop +{ + int x; + unsigned char *bp1 = (unsigned char*)b1; + unsigned char *bp2 = (unsigned char*)b2; + + for(x = 0; x < n; x++) +80035fec: 8fc20000 lw v0,0(s8) +80035ff0: 00000000 nop +80035ff4: 24420001 addiu v0,v0,1 +80035ff8: afc20000 sw v0,0(s8) +80035ffc: 8fc30000 lw v1,0(s8) +80036000: 8fc20020 lw v0,32(s8) +80036004: 00000000 nop +80036008: 0062102b sltu v0,v1,v0 +8003600c: 1440ffda bnez v0,80035f78 <memcmp+0x3c> +80036010: 00000000 nop + if(bp1[x] != bp2[x]) + return (bp1[x] - bp2[x]); + + return 0; +80036014: 00001021 move v0,zero +} +80036018: 03c0e821 move sp,s8 +8003601c: 8fbe0014 lw s8,20(sp) +80036020: 27bd0018 addiu sp,sp,24 +80036024: 03e00008 jr ra +80036028: 00000000 nop + +8003602c <memmove>: + +void *memmove(void *dst, const void *src, size_t len) +{ +8003602c: 27bdfff0 addiu sp,sp,-16 +80036030: afbe000c sw s8,12(sp) +80036034: 03a0f021 move s8,sp +80036038: afc40010 sw a0,16(s8) +8003603c: afc50014 sw a1,20(s8) +80036040: afc60018 sw a2,24(s8) + void *dst2 = dst; +80036044: 8fc20010 lw v0,16(s8) +80036048: 00000000 nop +8003604c: afc20000 sw v0,0(s8) + + dst+=len-1; +80036050: 8fc20018 lw v0,24(s8) +80036054: 00000000 nop +80036058: 2442ffff addiu v0,v0,-1 +8003605c: 8fc30010 lw v1,16(s8) +80036060: 00000000 nop +80036064: 00621021 addu v0,v1,v0 +80036068: afc20010 sw v0,16(s8) + src+=len-1; +8003606c: 8fc20018 lw v0,24(s8) +80036070: 00000000 nop +80036074: 2442ffff addiu v0,v0,-1 +80036078: 8fc30014 lw v1,20(s8) +8003607c: 00000000 nop +80036080: 00621021 addu v0,v1,v0 +80036084: afc20014 sw v0,20(s8) + + while(len--) +80036088: 1000000c b 800360bc <memmove+0x90> +8003608c: 00000000 nop + *(((unsigned char*)dst--)) = *(((unsigned char*)src--)); +80036090: 8fc20010 lw v0,16(s8) +80036094: 00000000 nop +80036098: 2443ffff addiu v1,v0,-1 +8003609c: afc30010 sw v1,16(s8) +800360a0: 8fc30014 lw v1,20(s8) +800360a4: 00000000 nop +800360a8: 2464ffff addiu a0,v1,-1 +800360ac: afc40014 sw a0,20(s8) +800360b0: 90630000 lbu v1,0(v1) +800360b4: 00000000 nop +800360b8: a0430000 sb v1,0(v0) + void *dst2 = dst; + + dst+=len-1; + src+=len-1; + + while(len--) +800360bc: 8fc20018 lw v0,24(s8) +800360c0: 00000000 nop +800360c4: 2443ffff addiu v1,v0,-1 +800360c8: afc30018 sw v1,24(s8) +800360cc: 1440fff0 bnez v0,80036090 <memmove+0x64> +800360d0: 00000000 nop + *(((unsigned char*)dst--)) = *(((unsigned char*)src--)); + + return dst2; +800360d4: 8fc20000 lw v0,0(s8) +} +800360d8: 03c0e821 move sp,s8 +800360dc: 8fbe000c lw s8,12(sp) +800360e0: 27bd0010 addiu sp,sp,16 +800360e4: 03e00008 jr ra +800360e8: 00000000 nop + +800360ec <memchr>: + +void *memchr(void *s , int c , size_t n) +{ +800360ec: 27bdfff8 addiu sp,sp,-8 +800360f0: afbe0004 sw s8,4(sp) +800360f4: 03a0f021 move s8,sp +800360f8: afc40008 sw a0,8(s8) +800360fc: afc5000c sw a1,12(s8) +80036100: afc60010 sw a2,16(s8) + while(n--) +80036104: 10000012 b 80036150 <memchr+0x64> +80036108: 00000000 nop + { + if(*((unsigned char*)s) == (unsigned char)c) +8003610c: 8fc20008 lw v0,8(s8) +80036110: 00000000 nop +80036114: 90420000 lbu v0,0(v0) +80036118: 00000000 nop +8003611c: 00401821 move v1,v0 +80036120: 8fc2000c lw v0,12(s8) +80036124: 00000000 nop +80036128: 304200ff andi v0,v0,0xff +8003612c: 14620004 bne v1,v0,80036140 <memchr+0x54> +80036130: 00000000 nop + return s; +80036134: 8fc20008 lw v0,8(s8) +80036138: 1000000c b 8003616c <memchr+0x80> +8003613c: 00000000 nop + + s++; +80036140: 8fc20008 lw v0,8(s8) +80036144: 00000000 nop +80036148: 24420001 addiu v0,v0,1 +8003614c: afc20008 sw v0,8(s8) + return dst2; +} + +void *memchr(void *s , int c , size_t n) +{ + while(n--) +80036150: 8fc20010 lw v0,16(s8) +80036154: 00000000 nop +80036158: 2443ffff addiu v1,v0,-1 +8003615c: afc30010 sw v1,16(s8) +80036160: 1440ffea bnez v0,8003610c <memchr+0x20> +80036164: 00000000 nop + return s; + + s++; + } + + return NULL; +80036168: 00001021 move v0,zero +} +8003616c: 03c0e821 move sp,s8 +80036170: 8fbe0004 lw s8,4(sp) +80036174: 27bd0008 addiu sp,sp,8 +80036178: 03e00008 jr ra +8003617c: 00000000 nop + +80036180 <strncpy>: + +char *strncpy(char *dst, const char *src, size_t len) +{ +80036180: 27bdfff0 addiu sp,sp,-16 +80036184: afbe000c sw s8,12(sp) +80036188: 03a0f021 move s8,sp +8003618c: afc40010 sw a0,16(s8) +80036190: afc50014 sw a1,20(s8) +80036194: afc60018 sw a2,24(s8) + char *odst=dst; +80036198: 8fc20010 lw v0,16(s8) +8003619c: 00000000 nop +800361a0: afc20000 sw v0,0(s8) + + while(*src && len) +800361a4: 10000010 b 800361e8 <strncpy+0x68> +800361a8: 00000000 nop + { + *(dst++) = *(src++); +800361ac: 8fc20010 lw v0,16(s8) +800361b0: 00000000 nop +800361b4: 24430001 addiu v1,v0,1 +800361b8: afc30010 sw v1,16(s8) +800361bc: 8fc30014 lw v1,20(s8) +800361c0: 00000000 nop +800361c4: 24640001 addiu a0,v1,1 +800361c8: afc40014 sw a0,20(s8) +800361cc: 80630000 lb v1,0(v1) +800361d0: 00000000 nop +800361d4: a0430000 sb v1,0(v0) + len--; +800361d8: 8fc20018 lw v0,24(s8) +800361dc: 00000000 nop +800361e0: 2442ffff addiu v0,v0,-1 +800361e4: afc20018 sw v0,24(s8) + +char *strncpy(char *dst, const char *src, size_t len) +{ + char *odst=dst; + + while(*src && len) +800361e8: 8fc20014 lw v0,20(s8) +800361ec: 00000000 nop +800361f0: 80420000 lb v0,0(v0) +800361f4: 00000000 nop +800361f8: 10400005 beqz v0,80036210 <strncpy+0x90> +800361fc: 00000000 nop +80036200: 8fc20018 lw v0,24(s8) +80036204: 00000000 nop +80036208: 1440ffe8 bnez v0,800361ac <strncpy+0x2c> +8003620c: 00000000 nop + { + *(dst++) = *(src++); + len--; + } + + if(len)*dst = 0; +80036210: 8fc20018 lw v0,24(s8) +80036214: 00000000 nop +80036218: 10400004 beqz v0,8003622c <strncpy+0xac> +8003621c: 00000000 nop +80036220: 8fc20010 lw v0,16(s8) +80036224: 00000000 nop +80036228: a0400000 sb zero,0(v0) + + return odst; +8003622c: 8fc20000 lw v0,0(s8) +} +80036230: 03c0e821 move sp,s8 +80036234: 8fbe000c lw s8,12(sp) +80036238: 27bd0010 addiu sp,sp,16 +8003623c: 03e00008 jr ra +80036240: 00000000 nop + +80036244 <strcpy>: + +char *strcpy(char *dst, const char *src) +{ +80036244: 27bdfff0 addiu sp,sp,-16 +80036248: afbe000c sw s8,12(sp) +8003624c: 03a0f021 move s8,sp +80036250: afc40010 sw a0,16(s8) +80036254: afc50014 sw a1,20(s8) + char *odst = dst; +80036258: 8fc20010 lw v0,16(s8) +8003625c: 00000000 nop +80036260: afc20000 sw v0,0(s8) + + while((*(dst++) = *(src++))); +80036264: 00000000 nop +80036268: 8fc20010 lw v0,16(s8) +8003626c: 00000000 nop +80036270: 24430001 addiu v1,v0,1 +80036274: afc30010 sw v1,16(s8) +80036278: 8fc30014 lw v1,20(s8) +8003627c: 00000000 nop +80036280: 24640001 addiu a0,v1,1 +80036284: afc40014 sw a0,20(s8) +80036288: 80630000 lb v1,0(v1) +8003628c: 00000000 nop +80036290: a0430000 sb v1,0(v0) +80036294: 80420000 lb v0,0(v0) +80036298: 00000000 nop +8003629c: 1440fff2 bnez v0,80036268 <strcpy+0x24> +800362a0: 00000000 nop + return odst; +800362a4: 8fc20000 lw v0,0(s8) +} +800362a8: 03c0e821 move sp,s8 +800362ac: 8fbe000c lw s8,12(sp) +800362b0: 27bd0010 addiu sp,sp,16 +800362b4: 03e00008 jr ra +800362b8: 00000000 nop + +800362bc <strlen>: + +int strlen(const char *str) +{ +800362bc: 27bdfff0 addiu sp,sp,-16 +800362c0: afbe000c sw s8,12(sp) +800362c4: 03a0f021 move s8,sp +800362c8: afc40010 sw a0,16(s8) + int i = 0; +800362cc: afc00000 sw zero,0(s8) + while(*(str++))i++; +800362d0: 10000005 b 800362e8 <strlen+0x2c> +800362d4: 00000000 nop +800362d8: 8fc20000 lw v0,0(s8) +800362dc: 00000000 nop +800362e0: 24420001 addiu v0,v0,1 +800362e4: afc20000 sw v0,0(s8) +800362e8: 8fc20010 lw v0,16(s8) +800362ec: 00000000 nop +800362f0: 24430001 addiu v1,v0,1 +800362f4: afc30010 sw v1,16(s8) +800362f8: 80420000 lb v0,0(v0) +800362fc: 00000000 nop +80036300: 1440fff5 bnez v0,800362d8 <strlen+0x1c> +80036304: 00000000 nop + return i; +80036308: 8fc20000 lw v0,0(s8) +} +8003630c: 03c0e821 move sp,s8 +80036310: 8fbe000c lw s8,12(sp) +80036314: 27bd0010 addiu sp,sp,16 +80036318: 03e00008 jr ra +8003631c: 00000000 nop + +80036320 <strchr>: + +char *strchr(const char *s, int c) +{ +80036320: 27bdffe0 addiu sp,sp,-32 +80036324: afbf001c sw ra,28(sp) +80036328: afbe0018 sw s8,24(sp) +8003632c: 03a0f021 move s8,sp +80036330: afc40020 sw a0,32(s8) +80036334: afc50024 sw a1,36(s8) + int x; + int l = strlen(s); +80036338: 8fc40020 lw a0,32(s8) +8003633c: 0c00d8af jal 800362bc <strlen> +80036340: 00000000 nop +80036344: afc20014 sw v0,20(s8) + + for(x = 0; x <= l; x++) +80036348: afc00010 sw zero,16(s8) +8003634c: 10000016 b 800363a8 <strchr+0x88> +80036350: 00000000 nop + if(s[x] == c) return (char*)&s[x]; +80036354: 8fc20010 lw v0,16(s8) +80036358: 8fc30020 lw v1,32(s8) +8003635c: 00000000 nop +80036360: 00621021 addu v0,v1,v0 +80036364: 80420000 lb v0,0(v0) +80036368: 00000000 nop +8003636c: 00401821 move v1,v0 +80036370: 8fc20024 lw v0,36(s8) +80036374: 00000000 nop +80036378: 14620007 bne v1,v0,80036398 <strchr+0x78> +8003637c: 00000000 nop +80036380: 8fc20010 lw v0,16(s8) +80036384: 8fc30020 lw v1,32(s8) +80036388: 00000000 nop +8003638c: 00621021 addu v0,v1,v0 +80036390: 1000000c b 800363c4 <strchr+0xa4> +80036394: 00000000 nop +char *strchr(const char *s, int c) +{ + int x; + int l = strlen(s); + + for(x = 0; x <= l; x++) +80036398: 8fc20010 lw v0,16(s8) +8003639c: 00000000 nop +800363a0: 24420001 addiu v0,v0,1 +800363a4: afc20010 sw v0,16(s8) +800363a8: 8fc30010 lw v1,16(s8) +800363ac: 8fc20014 lw v0,20(s8) +800363b0: 00000000 nop +800363b4: 0043102a slt v0,v0,v1 +800363b8: 1040ffe6 beqz v0,80036354 <strchr+0x34> +800363bc: 00000000 nop + if(s[x] == c) return (char*)&s[x]; + + return NULL; +800363c0: 00001021 move v0,zero +} +800363c4: 03c0e821 move sp,s8 +800363c8: 8fbf001c lw ra,28(sp) +800363cc: 8fbe0018 lw s8,24(sp) +800363d0: 27bd0020 addiu sp,sp,32 +800363d4: 03e00008 jr ra +800363d8: 00000000 nop + +800363dc <strrchr>: + +char *strrchr(const char *s, int c) +{ +800363dc: 27bdffe0 addiu sp,sp,-32 +800363e0: afbf001c sw ra,28(sp) +800363e4: afbe0018 sw s8,24(sp) +800363e8: 03a0f021 move s8,sp +800363ec: afc40020 sw a0,32(s8) +800363f0: afc50024 sw a1,36(s8) + int x; + int l = strlen(s); +800363f4: 8fc40020 lw a0,32(s8) +800363f8: 0c00d8af jal 800362bc <strlen> +800363fc: 00000000 nop +80036400: afc20014 sw v0,20(s8) + + for(x = l; x>=0; x--) +80036404: 8fc20014 lw v0,20(s8) +80036408: 00000000 nop +8003640c: afc20010 sw v0,16(s8) +80036410: 10000016 b 8003646c <strrchr+0x90> +80036414: 00000000 nop + if(s[x] == c) return (char*)&s[x]; +80036418: 8fc20010 lw v0,16(s8) +8003641c: 8fc30020 lw v1,32(s8) +80036420: 00000000 nop +80036424: 00621021 addu v0,v1,v0 +80036428: 80420000 lb v0,0(v0) +8003642c: 00000000 nop +80036430: 00401821 move v1,v0 +80036434: 8fc20024 lw v0,36(s8) +80036438: 00000000 nop +8003643c: 14620007 bne v1,v0,8003645c <strrchr+0x80> +80036440: 00000000 nop +80036444: 8fc20010 lw v0,16(s8) +80036448: 8fc30020 lw v1,32(s8) +8003644c: 00000000 nop +80036450: 00621021 addu v0,v1,v0 +80036454: 1000000a b 80036480 <strrchr+0xa4> +80036458: 00000000 nop +char *strrchr(const char *s, int c) +{ + int x; + int l = strlen(s); + + for(x = l; x>=0; x--) +8003645c: 8fc20010 lw v0,16(s8) +80036460: 00000000 nop +80036464: 2442ffff addiu v0,v0,-1 +80036468: afc20010 sw v0,16(s8) +8003646c: 8fc20010 lw v0,16(s8) +80036470: 00000000 nop +80036474: 0441ffe8 bgez v0,80036418 <strrchr+0x3c> +80036478: 00000000 nop + if(s[x] == c) return (char*)&s[x]; + + return NULL; +8003647c: 00001021 move v0,zero +} +80036480: 03c0e821 move sp,s8 +80036484: 8fbf001c lw ra,28(sp) +80036488: 8fbe0018 lw s8,24(sp) +8003648c: 27bd0020 addiu sp,sp,32 +80036490: 03e00008 jr ra +80036494: 00000000 nop + +80036498 <strpbrk>: + +char *strpbrk(const char *s, const char *charset) +{ +80036498: 27bdfff0 addiu sp,sp,-16 +8003649c: afbe000c sw s8,12(sp) +800364a0: 03a0f021 move s8,sp +800364a4: afc40010 sw a0,16(s8) +800364a8: afc50014 sw a1,20(s8) + int x,y; + + for(x = 0; s[x] != 0; x++) +800364ac: afc00000 sw zero,0(s8) +800364b0: 10000027 b 80036550 <strpbrk+0xb8> +800364b4: 00000000 nop + for(y = 0; charset[y] != 0; y++) +800364b8: afc00004 sw zero,4(s8) +800364bc: 10000018 b 80036520 <strpbrk+0x88> +800364c0: 00000000 nop + if(s[x] == charset[y]) return (char*)&s[x]; +800364c4: 8fc20000 lw v0,0(s8) +800364c8: 8fc30010 lw v1,16(s8) +800364cc: 00000000 nop +800364d0: 00621021 addu v0,v1,v0 +800364d4: 80430000 lb v1,0(v0) +800364d8: 8fc20004 lw v0,4(s8) +800364dc: 8fc40014 lw a0,20(s8) +800364e0: 00000000 nop +800364e4: 00821021 addu v0,a0,v0 +800364e8: 80420000 lb v0,0(v0) +800364ec: 00000000 nop +800364f0: 14620007 bne v1,v0,80036510 <strpbrk+0x78> +800364f4: 00000000 nop +800364f8: 8fc20000 lw v0,0(s8) +800364fc: 8fc30010 lw v1,16(s8) +80036500: 00000000 nop +80036504: 00621021 addu v0,v1,v0 +80036508: 1000001a b 80036574 <strpbrk+0xdc> +8003650c: 00000000 nop +char *strpbrk(const char *s, const char *charset) +{ + int x,y; + + for(x = 0; s[x] != 0; x++) + for(y = 0; charset[y] != 0; y++) +80036510: 8fc20004 lw v0,4(s8) +80036514: 00000000 nop +80036518: 24420001 addiu v0,v0,1 +8003651c: afc20004 sw v0,4(s8) +80036520: 8fc20004 lw v0,4(s8) +80036524: 8fc30014 lw v1,20(s8) +80036528: 00000000 nop +8003652c: 00621021 addu v0,v1,v0 +80036530: 80420000 lb v0,0(v0) +80036534: 00000000 nop +80036538: 1440ffe2 bnez v0,800364c4 <strpbrk+0x2c> +8003653c: 00000000 nop + +char *strpbrk(const char *s, const char *charset) +{ + int x,y; + + for(x = 0; s[x] != 0; x++) +80036540: 8fc20000 lw v0,0(s8) +80036544: 00000000 nop +80036548: 24420001 addiu v0,v0,1 +8003654c: afc20000 sw v0,0(s8) +80036550: 8fc20000 lw v0,0(s8) +80036554: 8fc30010 lw v1,16(s8) +80036558: 00000000 nop +8003655c: 00621021 addu v0,v1,v0 +80036560: 80420000 lb v0,0(v0) +80036564: 00000000 nop +80036568: 1440ffd3 bnez v0,800364b8 <strpbrk+0x20> +8003656c: 00000000 nop + for(y = 0; charset[y] != 0; y++) + if(s[x] == charset[y]) return (char*)&s[x]; + + return NULL; +80036570: 00001021 move v0,zero +} +80036574: 03c0e821 move sp,s8 +80036578: 8fbe000c lw s8,12(sp) +8003657c: 27bd0010 addiu sp,sp,16 +80036580: 03e00008 jr ra +80036584: 00000000 nop + +80036588 <strstr>: + +char *strstr(const char *big, const char *little) +{ +80036588: 27bdffd8 addiu sp,sp,-40 +8003658c: afbf0024 sw ra,36(sp) +80036590: afbe0020 sw s8,32(sp) +80036594: 03a0f021 move s8,sp +80036598: afc40028 sw a0,40(s8) +8003659c: afc5002c sw a1,44(s8) + int ls = strlen(little); +800365a0: 8fc4002c lw a0,44(s8) +800365a4: 0c00d8af jal 800362bc <strlen> +800365a8: 00000000 nop +800365ac: afc20014 sw v0,20(s8) + int bs = strlen(big); +800365b0: 8fc40028 lw a0,40(s8) +800365b4: 0c00d8af jal 800362bc <strlen> +800365b8: 00000000 nop +800365bc: afc20018 sw v0,24(s8) + int x; + + if(ls == 0) +800365c0: 8fc20014 lw v0,20(s8) +800365c4: 00000000 nop +800365c8: 14400004 bnez v0,800365dc <strstr+0x54> +800365cc: 00000000 nop + return (char*)big; +800365d0: 8fc20028 lw v0,40(s8) +800365d4: 1000002e b 80036690 <strstr+0x108> +800365d8: 00000000 nop + + if(ls > bs) +800365dc: 8fc30014 lw v1,20(s8) +800365e0: 8fc20018 lw v0,24(s8) +800365e4: 00000000 nop +800365e8: 0043102a slt v0,v0,v1 +800365ec: 10400004 beqz v0,80036600 <strstr+0x78> +800365f0: 00000000 nop + return NULL; +800365f4: 00001021 move v0,zero +800365f8: 10000025 b 80036690 <strstr+0x108> +800365fc: 00000000 nop + + for(x = 0; x <= bs-ls; x++) +80036600: afc00010 sw zero,16(s8) +80036604: 10000018 b 80036668 <strstr+0xe0> +80036608: 00000000 nop + if(memcmp(little, &big[x], ls) == 0) +8003660c: 8fc20010 lw v0,16(s8) +80036610: 8fc30028 lw v1,40(s8) +80036614: 00000000 nop +80036618: 00621021 addu v0,v1,v0 +8003661c: 8fc30014 lw v1,20(s8) +80036620: 00000000 nop +80036624: 00603021 move a2,v1 +80036628: 00402821 move a1,v0 +8003662c: 8fc4002c lw a0,44(s8) +80036630: 0c00d7cf jal 80035f3c <memcmp> +80036634: 00000000 nop +80036638: 14400007 bnez v0,80036658 <strstr+0xd0> +8003663c: 00000000 nop + return (char*)&big[x]; +80036640: 8fc20010 lw v0,16(s8) +80036644: 8fc30028 lw v1,40(s8) +80036648: 00000000 nop +8003664c: 00621021 addu v0,v1,v0 +80036650: 1000000f b 80036690 <strstr+0x108> +80036654: 00000000 nop + return (char*)big; + + if(ls > bs) + return NULL; + + for(x = 0; x <= bs-ls; x++) +80036658: 8fc20010 lw v0,16(s8) +8003665c: 00000000 nop +80036660: 24420001 addiu v0,v0,1 +80036664: afc20010 sw v0,16(s8) +80036668: 8fc30018 lw v1,24(s8) +8003666c: 8fc20014 lw v0,20(s8) +80036670: 00000000 nop +80036674: 00621823 subu v1,v1,v0 +80036678: 8fc20010 lw v0,16(s8) +8003667c: 00000000 nop +80036680: 0062102a slt v0,v1,v0 +80036684: 1040ffe1 beqz v0,8003660c <strstr+0x84> +80036688: 00000000 nop + if(memcmp(little, &big[x], ls) == 0) + return (char*)&big[x]; + + return NULL; +8003668c: 00001021 move v0,zero +} +80036690: 03c0e821 move sp,s8 +80036694: 8fbf0024 lw ra,36(sp) +80036698: 8fbe0020 lw s8,32(sp) +8003669c: 27bd0028 addiu sp,sp,40 +800366a0: 03e00008 jr ra +800366a4: 00000000 nop + +800366a8 <strcmp>: + +int strcmp(const char *s1, const char *s2) +{ +800366a8: 27bdfff8 addiu sp,sp,-8 +800366ac: afbe0004 sw s8,4(sp) +800366b0: 03a0f021 move s8,sp +800366b4: afc40008 sw a0,8(s8) +800366b8: afc5000c sw a1,12(s8) + while(*s1 && *s2 && (*s1 == *s2)) +800366bc: 10000009 b 800366e4 <strcmp+0x3c> +800366c0: 00000000 nop + { + s1++; +800366c4: 8fc20008 lw v0,8(s8) +800366c8: 00000000 nop +800366cc: 24420001 addiu v0,v0,1 +800366d0: afc20008 sw v0,8(s8) + s2++; +800366d4: 8fc2000c lw v0,12(s8) +800366d8: 00000000 nop +800366dc: 24420001 addiu v0,v0,1 +800366e0: afc2000c sw v0,12(s8) + return NULL; +} + +int strcmp(const char *s1, const char *s2) +{ + while(*s1 && *s2 && (*s1 == *s2)) +800366e4: 8fc20008 lw v0,8(s8) +800366e8: 00000000 nop +800366ec: 80420000 lb v0,0(v0) +800366f0: 00000000 nop +800366f4: 10400010 beqz v0,80036738 <strcmp+0x90> +800366f8: 00000000 nop +800366fc: 8fc2000c lw v0,12(s8) +80036700: 00000000 nop +80036704: 80420000 lb v0,0(v0) +80036708: 00000000 nop +8003670c: 1040000a beqz v0,80036738 <strcmp+0x90> +80036710: 00000000 nop +80036714: 8fc20008 lw v0,8(s8) +80036718: 00000000 nop +8003671c: 80430000 lb v1,0(v0) +80036720: 8fc2000c lw v0,12(s8) +80036724: 00000000 nop +80036728: 80420000 lb v0,0(v0) +8003672c: 00000000 nop +80036730: 1062ffe4 beq v1,v0,800366c4 <strcmp+0x1c> +80036734: 00000000 nop + { + s1++; + s2++; + } + + return *s1-*s2; +80036738: 8fc20008 lw v0,8(s8) +8003673c: 00000000 nop +80036740: 80420000 lb v0,0(v0) +80036744: 00000000 nop +80036748: 00401821 move v1,v0 +8003674c: 8fc2000c lw v0,12(s8) +80036750: 00000000 nop +80036754: 80420000 lb v0,0(v0) +80036758: 00000000 nop +8003675c: 00621023 subu v0,v1,v0 +} +80036760: 03c0e821 move sp,s8 +80036764: 8fbe0004 lw s8,4(sp) +80036768: 27bd0008 addiu sp,sp,8 +8003676c: 03e00008 jr ra +80036770: 00000000 nop + +80036774 <strncmp>: + +int strncmp(const char *s1, const char *s2, size_t len) +{ +80036774: 27bdfff0 addiu sp,sp,-16 +80036778: afbe000c sw s8,12(sp) +8003677c: 03a0f021 move s8,sp +80036780: afc40010 sw a0,16(s8) +80036784: afc50014 sw a1,20(s8) +80036788: afc60018 sw a2,24(s8) + int p = 0; +8003678c: afc00000 sw zero,0(s8) + + while(*s1 && *s2 && (*s1 == *s2) && p<len) +80036790: 10000013 b 800367e0 <strncmp+0x6c> +80036794: 00000000 nop + { + p++; +80036798: 8fc20000 lw v0,0(s8) +8003679c: 00000000 nop +800367a0: 24420001 addiu v0,v0,1 +800367a4: afc20000 sw v0,0(s8) + + if(p<len) +800367a8: 8fc30000 lw v1,0(s8) +800367ac: 8fc20018 lw v0,24(s8) +800367b0: 00000000 nop +800367b4: 0062102b sltu v0,v1,v0 +800367b8: 10400009 beqz v0,800367e0 <strncmp+0x6c> +800367bc: 00000000 nop + { + s1++; +800367c0: 8fc20010 lw v0,16(s8) +800367c4: 00000000 nop +800367c8: 24420001 addiu v0,v0,1 +800367cc: afc20010 sw v0,16(s8) + s2++; +800367d0: 8fc20014 lw v0,20(s8) +800367d4: 00000000 nop +800367d8: 24420001 addiu v0,v0,1 +800367dc: afc20014 sw v0,20(s8) + +int strncmp(const char *s1, const char *s2, size_t len) +{ + int p = 0; + + while(*s1 && *s2 && (*s1 == *s2) && p<len) +800367e0: 8fc20010 lw v0,16(s8) +800367e4: 00000000 nop +800367e8: 80420000 lb v0,0(v0) +800367ec: 00000000 nop +800367f0: 10400016 beqz v0,8003684c <strncmp+0xd8> +800367f4: 00000000 nop +800367f8: 8fc20014 lw v0,20(s8) +800367fc: 00000000 nop +80036800: 80420000 lb v0,0(v0) +80036804: 00000000 nop +80036808: 10400010 beqz v0,8003684c <strncmp+0xd8> +8003680c: 00000000 nop +80036810: 8fc20010 lw v0,16(s8) +80036814: 00000000 nop +80036818: 80430000 lb v1,0(v0) +8003681c: 8fc20014 lw v0,20(s8) +80036820: 00000000 nop +80036824: 80420000 lb v0,0(v0) +80036828: 00000000 nop +8003682c: 14620007 bne v1,v0,8003684c <strncmp+0xd8> +80036830: 00000000 nop +80036834: 8fc30000 lw v1,0(s8) +80036838: 8fc20018 lw v0,24(s8) +8003683c: 00000000 nop +80036840: 0062102b sltu v0,v1,v0 +80036844: 1440ffd4 bnez v0,80036798 <strncmp+0x24> +80036848: 00000000 nop + s1++; + s2++; + } + } + + return *s1-*s2; +8003684c: 8fc20010 lw v0,16(s8) +80036850: 00000000 nop +80036854: 80420000 lb v0,0(v0) +80036858: 00000000 nop +8003685c: 00401821 move v1,v0 +80036860: 8fc20014 lw v0,20(s8) +80036864: 00000000 nop +80036868: 80420000 lb v0,0(v0) +8003686c: 00000000 nop +80036870: 00621023 subu v0,v1,v0 +} +80036874: 03c0e821 move sp,s8 +80036878: 8fbe000c lw s8,12(sp) +8003687c: 27bd0010 addiu sp,sp,16 +80036880: 03e00008 jr ra +80036884: 00000000 nop + +80036888 <strdup>: + +char *strdup(const char *str) +{ +80036888: 27bdffe0 addiu sp,sp,-32 +8003688c: afbf001c sw ra,28(sp) +80036890: afbe0018 sw s8,24(sp) +80036894: 03a0f021 move s8,sp +80036898: afc40020 sw a0,32(s8) + char *ns = (void*)malloc(strlen(str) + 1); +8003689c: 8fc40020 lw a0,32(s8) +800368a0: 0c00d8af jal 800362bc <strlen> +800368a4: 00000000 nop +800368a8: 24420001 addiu v0,v0,1 +800368ac: 00402021 move a0,v0 +800368b0: 0c00ac10 jal 8002b040 <malloc> +800368b4: 00000000 nop +800368b8: afc20010 sw v0,16(s8) + + if(ns == NULL) +800368bc: 8fc20010 lw v0,16(s8) +800368c0: 00000000 nop +800368c4: 14400004 bnez v0,800368d8 <strdup+0x50> +800368c8: 00000000 nop + return NULL; +800368cc: 00001021 move v0,zero +800368d0: 10000006 b 800368ec <strdup+0x64> +800368d4: 00000000 nop + + strcpy(ns, str); +800368d8: 8fc50020 lw a1,32(s8) +800368dc: 8fc40010 lw a0,16(s8) +800368e0: 0c00d891 jal 80036244 <strcpy> +800368e4: 00000000 nop + return ns; +800368e8: 8fc20010 lw v0,16(s8) +} +800368ec: 03c0e821 move sp,s8 +800368f0: 8fbf001c lw ra,28(sp) +800368f4: 8fbe0018 lw s8,24(sp) +800368f8: 27bd0020 addiu sp,sp,32 +800368fc: 03e00008 jr ra +80036900: 00000000 nop + +80036904 <strndup>: + +char *strndup(const char *str, size_t len) +{ +80036904: 27bdffe0 addiu sp,sp,-32 +80036908: afbf001c sw ra,28(sp) +8003690c: afbe0018 sw s8,24(sp) +80036910: 03a0f021 move s8,sp +80036914: afc40020 sw a0,32(s8) +80036918: afc50024 sw a1,36(s8) + int n=strlen(str); +8003691c: 8fc40020 lw a0,32(s8) +80036920: 0c00d8af jal 800362bc <strlen> +80036924: 00000000 nop +80036928: afc20010 sw v0,16(s8) + char *ns = (void*)malloc((n+1)>len?len:(n+1)); +8003692c: 8fc20010 lw v0,16(s8) +80036930: 00000000 nop +80036934: 24420001 addiu v0,v0,1 +80036938: 8fc30024 lw v1,36(s8) +8003693c: 00000000 nop +80036940: 0062202b sltu a0,v1,v0 +80036944: 10800002 beqz a0,80036950 <strndup+0x4c> +80036948: 00000000 nop +8003694c: 00601021 move v0,v1 +80036950: 00402021 move a0,v0 +80036954: 0c00ac10 jal 8002b040 <malloc> +80036958: 00000000 nop +8003695c: afc20014 sw v0,20(s8) + + if(ns == NULL) +80036960: 8fc20014 lw v0,20(s8) +80036964: 00000000 nop +80036968: 14400004 bnez v0,8003697c <strndup+0x78> +8003696c: 00000000 nop + return NULL; +80036970: 00001021 move v0,zero +80036974: 10000010 b 800369b8 <strndup+0xb4> +80036978: 00000000 nop + + strncpy(ns, str, (n+1)>len?len:(n+1)); +8003697c: 8fc20010 lw v0,16(s8) +80036980: 00000000 nop +80036984: 24420001 addiu v0,v0,1 +80036988: 8fc30024 lw v1,36(s8) +8003698c: 00000000 nop +80036990: 0062202b sltu a0,v1,v0 +80036994: 10800002 beqz a0,800369a0 <strndup+0x9c> +80036998: 00000000 nop +8003699c: 00601021 move v0,v1 +800369a0: 00403021 move a2,v0 +800369a4: 8fc50020 lw a1,32(s8) +800369a8: 8fc40014 lw a0,20(s8) +800369ac: 0c00d860 jal 80036180 <strncpy> +800369b0: 00000000 nop + return ns; +800369b4: 8fc20014 lw v0,20(s8) +} +800369b8: 03c0e821 move sp,s8 +800369bc: 8fbf001c lw ra,28(sp) +800369c0: 8fbe0018 lw s8,24(sp) +800369c4: 27bd0020 addiu sp,sp,32 +800369c8: 03e00008 jr ra +800369cc: 00000000 nop + +800369d0 <strtoll>: + +long long strtoll(const char *nptr, char **endptr, int base) +{ +800369d0: 27bdffd0 addiu sp,sp,-48 +800369d4: afbf002c sw ra,44(sp) +800369d8: afbe0028 sw s8,40(sp) +800369dc: afb10024 sw s1,36(sp) +800369e0: afb00020 sw s0,32(sp) +800369e4: 03a0f021 move s8,sp +800369e8: afc40030 sw a0,48(s8) +800369ec: afc50034 sw a1,52(s8) +800369f0: afc60038 sw a2,56(s8) + int r = 0; +800369f4: afc00010 sw zero,16(s8) + int t = 0; +800369f8: afc00014 sw zero,20(s8) + int n = 0; +800369fc: afc00018 sw zero,24(s8) + + while(*nptr && isspace(*nptr)) +80036a00: 10000005 b 80036a18 <strtoll+0x48> +80036a04: 00000000 nop + nptr++; +80036a08: 8fc20030 lw v0,48(s8) +80036a0c: 00000000 nop +80036a10: 24420001 addiu v0,v0,1 +80036a14: afc20030 sw v0,48(s8) +{ + int r = 0; + int t = 0; + int n = 0; + + while(*nptr && isspace(*nptr)) +80036a18: 8fc20030 lw v0,48(s8) +80036a1c: 00000000 nop +80036a20: 80420000 lb v0,0(v0) +80036a24: 00000000 nop +80036a28: 1040000a beqz v0,80036a54 <strtoll+0x84> +80036a2c: 00000000 nop +80036a30: 8fc20030 lw v0,48(s8) +80036a34: 00000000 nop +80036a38: 80420000 lb v0,0(v0) +80036a3c: 00000000 nop +80036a40: 00402021 move a0,v0 +80036a44: 0c00a934 jal 8002a4d0 <isspace> +80036a48: 00000000 nop +80036a4c: 1440ffee bnez v0,80036a08 <strtoll+0x38> +80036a50: 00000000 nop + nptr++; + + if(*nptr == '-') +80036a54: 8fc20030 lw v0,48(s8) +80036a58: 00000000 nop +80036a5c: 80430000 lb v1,0(v0) +80036a60: 2402002d li v0,45 +80036a64: 14620007 bne v1,v0,80036a84 <strtoll+0xb4> +80036a68: 00000000 nop + { + nptr++; +80036a6c: 8fc20030 lw v0,48(s8) +80036a70: 00000000 nop +80036a74: 24420001 addiu v0,v0,1 +80036a78: afc20030 sw v0,48(s8) + n = 1; +80036a7c: 24020001 li v0,1 +80036a80: afc20018 sw v0,24(s8) + } + + if(base == 0) +80036a84: 8fc20038 lw v0,56(s8) +80036a88: 00000000 nop +80036a8c: 1440000d bnez v0,80036ac4 <strtoll+0xf4> +80036a90: 00000000 nop + { + if(*nptr == '0') +80036a94: 8fc20030 lw v0,48(s8) +80036a98: 00000000 nop +80036a9c: 80430000 lb v1,0(v0) +80036aa0: 24020030 li v0,48 +80036aa4: 14620005 bne v1,v0,80036abc <strtoll+0xec> +80036aa8: 00000000 nop + base = 8; +80036aac: 24020008 li v0,8 +80036ab0: afc20038 sw v0,56(s8) +80036ab4: 10000003 b 80036ac4 <strtoll+0xf4> +80036ab8: 00000000 nop + else + base = 10; +80036abc: 2402000a li v0,10 +80036ac0: afc20038 sw v0,56(s8) + } + + if(!(base >= 2 && base <= 36)) +80036ac4: 8fc20038 lw v0,56(s8) +80036ac8: 00000000 nop +80036acc: 28420002 slti v0,v0,2 +80036ad0: 14400006 bnez v0,80036aec <strtoll+0x11c> +80036ad4: 00000000 nop +80036ad8: 8fc20038 lw v0,56(s8) +80036adc: 00000000 nop +80036ae0: 28420025 slti v0,v0,37 +80036ae4: 14400005 bnez v0,80036afc <strtoll+0x12c> +80036ae8: 00000000 nop + return 0; +80036aec: 00008021 move s0,zero +80036af0: 00008821 move s1,zero +80036af4: 10000084 b 80036d08 <strtoll+0x338> +80036af8: 00000000 nop + + if(base == 16 && *nptr == '0') +80036afc: 8fc30038 lw v1,56(s8) +80036b00: 24020010 li v0,16 +80036b04: 14620061 bne v1,v0,80036c8c <strtoll+0x2bc> +80036b08: 00000000 nop +80036b0c: 8fc20030 lw v0,48(s8) +80036b10: 00000000 nop +80036b14: 80430000 lb v1,0(v0) +80036b18: 24020030 li v0,48 +80036b1c: 1462005b bne v1,v0,80036c8c <strtoll+0x2bc> +80036b20: 00000000 nop + { + if(*(nptr+1) == 'x' || *(nptr+1) == 'X') +80036b24: 8fc20030 lw v0,48(s8) +80036b28: 00000000 nop +80036b2c: 24420001 addiu v0,v0,1 +80036b30: 80430000 lb v1,0(v0) +80036b34: 24020078 li v0,120 +80036b38: 10620008 beq v1,v0,80036b5c <strtoll+0x18c> +80036b3c: 00000000 nop +80036b40: 8fc20030 lw v0,48(s8) +80036b44: 00000000 nop +80036b48: 24420001 addiu v0,v0,1 +80036b4c: 80430000 lb v1,0(v0) +80036b50: 24020058 li v0,88 +80036b54: 1462004d bne v1,v0,80036c8c <strtoll+0x2bc> +80036b58: 00000000 nop + nptr+=2; +80036b5c: 8fc20030 lw v0,48(s8) +80036b60: 00000000 nop +80036b64: 24420002 addiu v0,v0,2 +80036b68: afc20030 sw v0,48(s8) + } + + while(*nptr) +80036b6c: 10000047 b 80036c8c <strtoll+0x2bc> +80036b70: 00000000 nop + { + switch(*nptr) +80036b74: 8fc20030 lw v0,48(s8) +80036b78: 00000000 nop +80036b7c: 80420000 lb v0,0(v0) +80036b80: 00000000 nop +80036b84: 2843005b slti v1,v0,91 +80036b88: 1060000a beqz v1,80036bb4 <strtoll+0x1e4> +80036b8c: 00000000 nop +80036b90: 28430041 slti v1,v0,65 +80036b94: 1060001d beqz v1,80036c0c <strtoll+0x23c> +80036b98: 00000000 nop +80036b9c: 2442ffd0 addiu v0,v0,-48 +80036ba0: 2c42000a sltiu v0,v0,10 +80036ba4: 10400021 beqz v0,80036c2c <strtoll+0x25c> +80036ba8: 00000000 nop +80036bac: 10000007 b 80036bcc <strtoll+0x1fc> +80036bb0: 00000000 nop +80036bb4: 2442ff9f addiu v0,v0,-97 +80036bb8: 2c42001a sltiu v0,v0,26 +80036bbc: 1040001b beqz v0,80036c2c <strtoll+0x25c> +80036bc0: 00000000 nop +80036bc4: 10000009 b 80036bec <strtoll+0x21c> +80036bc8: 00000000 nop + { + case '0'...'9': + t = *nptr - '0'; +80036bcc: 8fc20030 lw v0,48(s8) +80036bd0: 00000000 nop +80036bd4: 80420000 lb v0,0(v0) +80036bd8: 00000000 nop +80036bdc: 2442ffd0 addiu v0,v0,-48 +80036be0: afc20014 sw v0,20(s8) + break; +80036be4: 10000014 b 80036c38 <strtoll+0x268> +80036be8: 00000000 nop + case 'a' ... 'z': + t = (*nptr - 'a') + 10; +80036bec: 8fc20030 lw v0,48(s8) +80036bf0: 00000000 nop +80036bf4: 80420000 lb v0,0(v0) +80036bf8: 00000000 nop +80036bfc: 2442ffa9 addiu v0,v0,-87 +80036c00: afc20014 sw v0,20(s8) + break; +80036c04: 1000000c b 80036c38 <strtoll+0x268> +80036c08: 00000000 nop + case 'A' ... 'Z': + t = (*nptr - 'A') + 10; +80036c0c: 8fc20030 lw v0,48(s8) +80036c10: 00000000 nop +80036c14: 80420000 lb v0,0(v0) +80036c18: 00000000 nop +80036c1c: 2442ffc9 addiu v0,v0,-55 +80036c20: afc20014 sw v0,20(s8) + break; +80036c24: 10000004 b 80036c38 <strtoll+0x268> +80036c28: 00000000 nop + default: + t = 1000; +80036c2c: 240203e8 li v0,1000 +80036c30: afc20014 sw v0,20(s8) + break; +80036c34: 00000000 nop + } + + if(t>=base) +80036c38: 8fc30014 lw v1,20(s8) +80036c3c: 8fc20038 lw v0,56(s8) +80036c40: 00000000 nop +80036c44: 0062102a slt v0,v1,v0 +80036c48: 10400018 beqz v0,80036cac <strtoll+0x2dc> +80036c4c: 00000000 nop + break; + + r*=base; +80036c50: 8fc30010 lw v1,16(s8) +80036c54: 8fc20038 lw v0,56(s8) +80036c58: 00000000 nop +80036c5c: 00620018 mult v1,v0 +80036c60: 00001012 mflo v0 +80036c64: afc20010 sw v0,16(s8) + r+=t; +80036c68: 8fc30010 lw v1,16(s8) +80036c6c: 8fc20014 lw v0,20(s8) +80036c70: 00000000 nop +80036c74: 00621021 addu v0,v1,v0 +80036c78: afc20010 sw v0,16(s8) + nptr++; +80036c7c: 8fc20030 lw v0,48(s8) +80036c80: 00000000 nop +80036c84: 24420001 addiu v0,v0,1 +80036c88: afc20030 sw v0,48(s8) + { + if(*(nptr+1) == 'x' || *(nptr+1) == 'X') + nptr+=2; + } + + while(*nptr) +80036c8c: 8fc20030 lw v0,48(s8) +80036c90: 00000000 nop +80036c94: 80420000 lb v0,0(v0) +80036c98: 00000000 nop +80036c9c: 1440ffb5 bnez v0,80036b74 <strtoll+0x1a4> +80036ca0: 00000000 nop +80036ca4: 10000002 b 80036cb0 <strtoll+0x2e0> +80036ca8: 00000000 nop + t = 1000; + break; + } + + if(t>=base) + break; +80036cac: 00000000 nop + r*=base; + r+=t; + nptr++; + } + + if(endptr)*endptr = (char*)nptr; +80036cb0: 8fc20034 lw v0,52(s8) +80036cb4: 00000000 nop +80036cb8: 10400005 beqz v0,80036cd0 <strtoll+0x300> +80036cbc: 00000000 nop +80036cc0: 8fc20034 lw v0,52(s8) +80036cc4: 8fc30030 lw v1,48(s8) +80036cc8: 00000000 nop +80036ccc: ac430000 sw v1,0(v0) + return n?-r:r; +80036cd0: 8fc20018 lw v0,24(s8) +80036cd4: 00000000 nop +80036cd8: 10400006 beqz v0,80036cf4 <strtoll+0x324> +80036cdc: 00000000 nop +80036ce0: 8fc20010 lw v0,16(s8) +80036ce4: 00000000 nop +80036ce8: 00021023 negu v0,v0 +80036cec: 10000003 b 80036cfc <strtoll+0x32c> +80036cf0: 00000000 nop +80036cf4: 8fc20010 lw v0,16(s8) +80036cf8: 00000000 nop +80036cfc: 00408021 move s0,v0 +80036d00: 000217c3 sra v0,v0,0x1f +80036d04: 00408821 move s1,v0 +80036d08: 02001021 move v0,s0 +80036d0c: 02201821 move v1,s1 +} +80036d10: 03c0e821 move sp,s8 +80036d14: 8fbf002c lw ra,44(sp) +80036d18: 8fbe0028 lw s8,40(sp) +80036d1c: 8fb10024 lw s1,36(sp) +80036d20: 8fb00020 lw s0,32(sp) +80036d24: 27bd0030 addiu sp,sp,48 +80036d28: 03e00008 jr ra +80036d2c: 00000000 nop + +80036d30 <strtol>: + +long strtol(const char *nptr, char **endptr, int base) +{ +80036d30: 27bdffe8 addiu sp,sp,-24 +80036d34: afbf0014 sw ra,20(sp) +80036d38: afbe0010 sw s8,16(sp) +80036d3c: 03a0f021 move s8,sp +80036d40: afc40018 sw a0,24(s8) +80036d44: afc5001c sw a1,28(s8) +80036d48: afc60020 sw a2,32(s8) + return (long)strtoll(nptr, endptr, base); +80036d4c: 8fc60020 lw a2,32(s8) +80036d50: 8fc5001c lw a1,28(s8) +80036d54: 8fc40018 lw a0,24(s8) +80036d58: 0c00da74 jal 800369d0 <strtoll> +80036d5c: 00000000 nop +} +80036d60: 03c0e821 move sp,s8 +80036d64: 8fbf0014 lw ra,20(sp) +80036d68: 8fbe0010 lw s8,16(sp) +80036d6c: 27bd0018 addiu sp,sp,24 +80036d70: 03e00008 jr ra +80036d74: 00000000 nop + +80036d78 <strtod>: + +double strtod(const char *nptr, char **endptr) +{ +80036d78: 27bdff80 addiu sp,sp,-128 +80036d7c: afbf007c sw ra,124(sp) +80036d80: afbe0078 sw s8,120(sp) +80036d84: afb10074 sw s1,116(sp) +80036d88: afb00070 sw s0,112(sp) +80036d8c: 03a0f021 move s8,sp +80036d90: afc40080 sw a0,128(s8) +80036d94: afc50084 sw a1,132(s8) + char strbuf[64]; + int x = 0; +80036d98: afc00010 sw zero,16(s8) + int y; + double i=0, d=0; +80036d9c: afc00028 sw zero,40(s8) +80036da0: afc0002c sw zero,44(s8) +80036da4: afc00018 sw zero,24(s8) +80036da8: afc0001c sw zero,28(s8) + int s=1; +80036dac: 24020001 li v0,1 +80036db0: afc20020 sw v0,32(s8) + + if(*nptr == '-') +80036db4: 8fc20080 lw v0,128(s8) +80036db8: 00000000 nop +80036dbc: 80430000 lb v1,0(v0) +80036dc0: 2402002d li v0,45 +80036dc4: 14620015 bne v1,v0,80036e1c <strtod+0xa4> +80036dc8: 00000000 nop + { + nptr++; +80036dcc: 8fc20080 lw v0,128(s8) +80036dd0: 00000000 nop +80036dd4: 24420001 addiu v0,v0,1 +80036dd8: afc20080 sw v0,128(s8) + s=-1; +80036ddc: 2402ffff li v0,-1 +80036de0: afc20020 sw v0,32(s8) + } + + while(*nptr >= '0' && *nptr <= '9' && x < 18) +80036de4: 1000000d b 80036e1c <strtod+0xa4> +80036de8: 00000000 nop + strbuf[x++] = *(nptr++); +80036dec: 8fc20010 lw v0,16(s8) +80036df0: 00000000 nop +80036df4: 24430001 addiu v1,v0,1 +80036df8: afc30010 sw v1,16(s8) +80036dfc: 8fc30080 lw v1,128(s8) +80036e00: 00000000 nop +80036e04: 24640001 addiu a0,v1,1 +80036e08: afc40080 sw a0,128(s8) +80036e0c: 80630000 lb v1,0(v1) +80036e10: 27c40010 addiu a0,s8,16 +80036e14: 00821021 addu v0,a0,v0 +80036e18: a0430020 sb v1,32(v0) + { + nptr++; + s=-1; + } + + while(*nptr >= '0' && *nptr <= '9' && x < 18) +80036e1c: 8fc20080 lw v0,128(s8) +80036e20: 00000000 nop +80036e24: 80420000 lb v0,0(v0) +80036e28: 00000000 nop +80036e2c: 28420030 slti v0,v0,48 +80036e30: 1440000d bnez v0,80036e68 <strtod+0xf0> +80036e34: 00000000 nop +80036e38: 8fc20080 lw v0,128(s8) +80036e3c: 00000000 nop +80036e40: 80420000 lb v0,0(v0) +80036e44: 00000000 nop +80036e48: 2842003a slti v0,v0,58 +80036e4c: 10400006 beqz v0,80036e68 <strtod+0xf0> +80036e50: 00000000 nop +80036e54: 8fc20010 lw v0,16(s8) +80036e58: 00000000 nop +80036e5c: 28420012 slti v0,v0,18 +80036e60: 1440ffe2 bnez v0,80036dec <strtod+0x74> +80036e64: 00000000 nop + strbuf[x++] = *(nptr++); + + strbuf[x] = 0; +80036e68: 8fc20010 lw v0,16(s8) +80036e6c: 27c30010 addiu v1,s8,16 +80036e70: 00621021 addu v0,v1,v0 +80036e74: a0400020 sb zero,32(v0) + + i = (double)strtoll(strbuf, NULL, 10); +80036e78: 27c20030 addiu v0,s8,48 +80036e7c: 2406000a li a2,10 +80036e80: 00002821 move a1,zero +80036e84: 00402021 move a0,v0 +80036e88: 0c00da74 jal 800369d0 <strtoll> +80036e8c: 00000000 nop +80036e90: 00402021 move a0,v0 +80036e94: 00602821 move a1,v1 +80036e98: 0c00fc9b jal 8003f26c <__floatdidf> +80036e9c: 00000000 nop +80036ea0: afc20028 sw v0,40(s8) +80036ea4: afc3002c sw v1,44(s8) + + if(*nptr == '.') +80036ea8: 8fc20080 lw v0,128(s8) +80036eac: 00000000 nop +80036eb0: 80430000 lb v1,0(v0) +80036eb4: 2402002e li v0,46 +80036eb8: 14620062 bne v1,v0,80037044 <strtod+0x2cc> +80036ebc: 00000000 nop + { + nptr++; +80036ec0: 8fc20080 lw v0,128(s8) +80036ec4: 00000000 nop +80036ec8: 24420001 addiu v0,v0,1 +80036ecc: afc20080 sw v0,128(s8) + x = 0; +80036ed0: afc00010 sw zero,16(s8) + + while(*nptr >= '0' && *nptr <= '9' && x < 7) +80036ed4: 1000000d b 80036f0c <strtod+0x194> +80036ed8: 00000000 nop + strbuf[x++] = *(nptr++); +80036edc: 8fc20010 lw v0,16(s8) +80036ee0: 00000000 nop +80036ee4: 24430001 addiu v1,v0,1 +80036ee8: afc30010 sw v1,16(s8) +80036eec: 8fc30080 lw v1,128(s8) +80036ef0: 00000000 nop +80036ef4: 24640001 addiu a0,v1,1 +80036ef8: afc40080 sw a0,128(s8) +80036efc: 80630000 lb v1,0(v1) +80036f00: 27c40010 addiu a0,s8,16 +80036f04: 00821021 addu v0,a0,v0 +80036f08: a0430020 sb v1,32(v0) + if(*nptr == '.') + { + nptr++; + x = 0; + + while(*nptr >= '0' && *nptr <= '9' && x < 7) +80036f0c: 8fc20080 lw v0,128(s8) +80036f10: 00000000 nop +80036f14: 80420000 lb v0,0(v0) +80036f18: 00000000 nop +80036f1c: 28420030 slti v0,v0,48 +80036f20: 1440000d bnez v0,80036f58 <strtod+0x1e0> +80036f24: 00000000 nop +80036f28: 8fc20080 lw v0,128(s8) +80036f2c: 00000000 nop +80036f30: 80420000 lb v0,0(v0) +80036f34: 00000000 nop +80036f38: 2842003a slti v0,v0,58 +80036f3c: 10400006 beqz v0,80036f58 <strtod+0x1e0> +80036f40: 00000000 nop +80036f44: 8fc20010 lw v0,16(s8) +80036f48: 00000000 nop +80036f4c: 28420007 slti v0,v0,7 +80036f50: 1440ffe2 bnez v0,80036edc <strtod+0x164> +80036f54: 00000000 nop + strbuf[x++] = *(nptr++); + + strbuf[x] = 0; +80036f58: 8fc20010 lw v0,16(s8) +80036f5c: 27c30010 addiu v1,s8,16 +80036f60: 00621021 addu v0,v1,v0 +80036f64: a0400020 sb zero,32(v0) + + if(endptr != NULL) *endptr = (char*)nptr; +80036f68: 8fc20084 lw v0,132(s8) +80036f6c: 00000000 nop +80036f70: 10400005 beqz v0,80036f88 <strtod+0x210> +80036f74: 00000000 nop +80036f78: 8fc20084 lw v0,132(s8) +80036f7c: 8fc30080 lw v1,128(s8) +80036f80: 00000000 nop +80036f84: ac430000 sw v1,0(v0) + + y=1; +80036f88: 24020001 li v0,1 +80036f8c: afc20014 sw v0,20(s8) + + for(x=0;strbuf[x]!=0;x++) +80036f90: afc00010 sw zero,16(s8) +80036f94: 1000000b b 80036fc4 <strtod+0x24c> +80036f98: 00000000 nop + y*=10; +80036f9c: 8fc20014 lw v0,20(s8) +80036fa0: 00000000 nop +80036fa4: 00021040 sll v0,v0,0x1 +80036fa8: 00021880 sll v1,v0,0x2 +80036fac: 00431021 addu v0,v0,v1 +80036fb0: afc20014 sw v0,20(s8) + + if(endptr != NULL) *endptr = (char*)nptr; + + y=1; + + for(x=0;strbuf[x]!=0;x++) +80036fb4: 8fc20010 lw v0,16(s8) +80036fb8: 00000000 nop +80036fbc: 24420001 addiu v0,v0,1 +80036fc0: afc20010 sw v0,16(s8) +80036fc4: 8fc20010 lw v0,16(s8) +80036fc8: 27c30010 addiu v1,s8,16 +80036fcc: 00621021 addu v0,v1,v0 +80036fd0: 80420020 lb v0,32(v0) +80036fd4: 00000000 nop +80036fd8: 1440fff0 bnez v0,80036f9c <strtod+0x224> +80036fdc: 00000000 nop + y*=10; + + d = (double)strtoll(strbuf, NULL, 10); +80036fe0: 27c20030 addiu v0,s8,48 +80036fe4: 2406000a li a2,10 +80036fe8: 00002821 move a1,zero +80036fec: 00402021 move a0,v0 +80036ff0: 0c00da74 jal 800369d0 <strtoll> +80036ff4: 00000000 nop +80036ff8: 00402021 move a0,v0 +80036ffc: 00602821 move a1,v1 +80037000: 0c00fc9b jal 8003f26c <__floatdidf> +80037004: 00000000 nop +80037008: afc20018 sw v0,24(s8) +8003700c: afc3001c sw v1,28(s8) + d /= y; +80037010: 8fc40014 lw a0,20(s8) +80037014: 0c00fc5c jal 8003f170 <__floatsidf> +80037018: 00000000 nop +8003701c: 00403021 move a2,v0 +80037020: 00603821 move a3,v1 +80037024: 8fc40018 lw a0,24(s8) +80037028: 8fc5001c lw a1,28(s8) +8003702c: 0c00f625 jal 8003d894 <__divdf3> +80037030: 00000000 nop +80037034: afc20018 sw v0,24(s8) +80037038: afc3001c sw v1,28(s8) +8003703c: 10000009 b 80037064 <strtod+0x2ec> +80037040: 00000000 nop + } + else + { + if(endptr != NULL) +80037044: 8fc20084 lw v0,132(s8) +80037048: 00000000 nop +8003704c: 10400005 beqz v0,80037064 <strtod+0x2ec> +80037050: 00000000 nop + *endptr = (char*)nptr; +80037054: 8fc20084 lw v0,132(s8) +80037058: 8fc30080 lw v1,128(s8) +8003705c: 00000000 nop +80037060: ac430000 sw v1,0(v0) + } + + return (i + d)*s; +80037064: 8fc60018 lw a2,24(s8) +80037068: 8fc7001c lw a3,28(s8) +8003706c: 8fc40028 lw a0,40(s8) +80037070: 8fc5002c lw a1,44(s8) +80037074: 0c00f3d7 jal 8003cf5c <__adddf3> +80037078: 00000000 nop +8003707c: 00408021 move s0,v0 +80037080: 00608821 move s1,v1 +80037084: 8fc40020 lw a0,32(s8) +80037088: 0c00fc5c jal 8003f170 <__floatsidf> +8003708c: 00000000 nop +80037090: 00403021 move a2,v0 +80037094: 00603821 move a3,v1 +80037098: 02002021 move a0,s0 +8003709c: 02202821 move a1,s1 +800370a0: 0c00f853 jal 8003e14c <__muldf3> +800370a4: 00000000 nop +} +800370a8: 03c0e821 move sp,s8 +800370ac: 8fbf007c lw ra,124(sp) +800370b0: 8fbe0078 lw s8,120(sp) +800370b4: 8fb10074 lw s1,116(sp) +800370b8: 8fb00070 lw s0,112(sp) +800370bc: 27bd0080 addiu sp,sp,128 +800370c0: 03e00008 jr ra +800370c4: 00000000 nop + +800370c8 <strtold>: + +long double strtold(const char *nptr, char **endptr) +{ +800370c8: 27bdffe8 addiu sp,sp,-24 +800370cc: afbf0014 sw ra,20(sp) +800370d0: afbe0010 sw s8,16(sp) +800370d4: 03a0f021 move s8,sp +800370d8: afc40018 sw a0,24(s8) +800370dc: afc5001c sw a1,28(s8) + return (long double)strtod(nptr, endptr); +800370e0: 8fc5001c lw a1,28(s8) +800370e4: 8fc40018 lw a0,24(s8) +800370e8: 0c00db5e jal 80036d78 <strtod> +800370ec: 00000000 nop +} +800370f0: 03c0e821 move sp,s8 +800370f4: 8fbf0014 lw ra,20(sp) +800370f8: 8fbe0010 lw s8,16(sp) +800370fc: 27bd0018 addiu sp,sp,24 +80037100: 03e00008 jr ra +80037104: 00000000 nop + +80037108 <strtof>: + +float strtof(const char *nptr, char **endptr) +{ +80037108: 27bdffe8 addiu sp,sp,-24 +8003710c: afbf0014 sw ra,20(sp) +80037110: afbe0010 sw s8,16(sp) +80037114: 03a0f021 move s8,sp +80037118: afc40018 sw a0,24(s8) +8003711c: afc5001c sw a1,28(s8) + return (float)strtod(nptr, endptr); +80037120: 8fc5001c lw a1,28(s8) +80037124: 8fc40018 lw a0,24(s8) +80037128: 0c00db5e jal 80036d78 <strtod> +8003712c: 00000000 nop +80037130: 00402021 move a0,v0 +80037134: 00602821 move a1,v1 +80037138: 0c00fd34 jal 8003f4d0 <__truncdfsf2> +8003713c: 00000000 nop +} +80037140: 03c0e821 move sp,s8 +80037144: 8fbf0014 lw ra,20(sp) +80037148: 8fbe0010 lw s8,16(sp) +8003714c: 27bd0018 addiu sp,sp,24 +80037150: 03e00008 jr ra +80037154: 00000000 nop + +80037158 <strcat>: + +char *strcat(char *s, const char *append) +{ +80037158: 27bdffe8 addiu sp,sp,-24 +8003715c: afbf0014 sw ra,20(sp) +80037160: afbe0010 sw s8,16(sp) +80037164: 03a0f021 move s8,sp +80037168: afc40018 sw a0,24(s8) +8003716c: afc5001c sw a1,28(s8) + strcpy(&s[strlen(s)], append); +80037170: 8fc40018 lw a0,24(s8) +80037174: 0c00d8af jal 800362bc <strlen> +80037178: 00000000 nop +8003717c: 00401821 move v1,v0 +80037180: 8fc20018 lw v0,24(s8) +80037184: 00000000 nop +80037188: 00431021 addu v0,v0,v1 +8003718c: 8fc5001c lw a1,28(s8) +80037190: 00402021 move a0,v0 +80037194: 0c00d891 jal 80036244 <strcpy> +80037198: 00000000 nop + + return s; +8003719c: 8fc20018 lw v0,24(s8) +} +800371a0: 03c0e821 move sp,s8 +800371a4: 8fbf0014 lw ra,20(sp) +800371a8: 8fbe0010 lw s8,16(sp) +800371ac: 27bd0018 addiu sp,sp,24 +800371b0: 03e00008 jr ra +800371b4: 00000000 nop + +800371b8 <strncat>: + +char *strncat(char *s, const char *append, size_t count) +{ +800371b8: 27bdffe8 addiu sp,sp,-24 +800371bc: afbf0014 sw ra,20(sp) +800371c0: afbe0010 sw s8,16(sp) +800371c4: 03a0f021 move s8,sp +800371c8: afc40018 sw a0,24(s8) +800371cc: afc5001c sw a1,28(s8) +800371d0: afc60020 sw a2,32(s8) + strncpy(&s[strlen(s)], append, count); +800371d4: 8fc40018 lw a0,24(s8) +800371d8: 0c00d8af jal 800362bc <strlen> +800371dc: 00000000 nop +800371e0: 00401821 move v1,v0 +800371e4: 8fc20018 lw v0,24(s8) +800371e8: 00000000 nop +800371ec: 00431021 addu v0,v0,v1 +800371f0: 8fc60020 lw a2,32(s8) +800371f4: 8fc5001c lw a1,28(s8) +800371f8: 00402021 move a0,v0 +800371fc: 0c00d860 jal 80036180 <strncpy> +80037200: 00000000 nop + + return s; +80037204: 8fc20018 lw v0,24(s8) +} +80037208: 03c0e821 move sp,s8 +8003720c: 8fbf0014 lw ra,20(sp) +80037210: 8fbe0010 lw s8,16(sp) +80037214: 27bd0018 addiu sp,sp,24 +80037218: 03e00008 jr ra +8003721c: 00000000 nop + +80037220 <strcasecmp>: + +int strcasecmp(const char *s1, const char *s2) +{ +80037220: 27bdffe0 addiu sp,sp,-32 +80037224: afbf001c sw ra,28(sp) +80037228: afbe0018 sw s8,24(sp) +8003722c: afb00014 sw s0,20(sp) +80037230: 03a0f021 move s8,sp +80037234: afc40020 sw a0,32(s8) +80037238: afc50024 sw a1,36(s8) + while(tolower(*s1) && tolower(*s2) && (tolower(*s1) == tolower(*s2))) +8003723c: 10000009 b 80037264 <strcasecmp+0x44> +80037240: 00000000 nop + { + s1++; +80037244: 8fc20020 lw v0,32(s8) +80037248: 00000000 nop +8003724c: 24420001 addiu v0,v0,1 +80037250: afc20020 sw v0,32(s8) + s2++; +80037254: 8fc20024 lw v0,36(s8) +80037258: 00000000 nop +8003725c: 24420001 addiu v0,v0,1 +80037260: afc20024 sw v0,36(s8) + return s; +} + +int strcasecmp(const char *s1, const char *s2) +{ + while(tolower(*s1) && tolower(*s2) && (tolower(*s1) == tolower(*s2))) +80037264: 8fc20020 lw v0,32(s8) +80037268: 00000000 nop +8003726c: 80420000 lb v0,0(v0) +80037270: 00000000 nop +80037274: 00402021 move a0,v0 +80037278: 0c00a5eb jal 800297ac <tolower> +8003727c: 00000000 nop +80037280: 1040001b beqz v0,800372f0 <strcasecmp+0xd0> +80037284: 00000000 nop +80037288: 8fc20024 lw v0,36(s8) +8003728c: 00000000 nop +80037290: 80420000 lb v0,0(v0) +80037294: 00000000 nop +80037298: 00402021 move a0,v0 +8003729c: 0c00a5eb jal 800297ac <tolower> +800372a0: 00000000 nop +800372a4: 10400012 beqz v0,800372f0 <strcasecmp+0xd0> +800372a8: 00000000 nop +800372ac: 8fc20020 lw v0,32(s8) +800372b0: 00000000 nop +800372b4: 80420000 lb v0,0(v0) +800372b8: 00000000 nop +800372bc: 00402021 move a0,v0 +800372c0: 0c00a5eb jal 800297ac <tolower> +800372c4: 00000000 nop +800372c8: 00408021 move s0,v0 +800372cc: 8fc20024 lw v0,36(s8) +800372d0: 00000000 nop +800372d4: 80420000 lb v0,0(v0) +800372d8: 00000000 nop +800372dc: 00402021 move a0,v0 +800372e0: 0c00a5eb jal 800297ac <tolower> +800372e4: 00000000 nop +800372e8: 1202ffd6 beq s0,v0,80037244 <strcasecmp+0x24> +800372ec: 00000000 nop + { + s1++; + s2++; + } + + return tolower(*s1)-tolower(*s2); +800372f0: 8fc20020 lw v0,32(s8) +800372f4: 00000000 nop +800372f8: 80420000 lb v0,0(v0) +800372fc: 00000000 nop +80037300: 00402021 move a0,v0 +80037304: 0c00a5eb jal 800297ac <tolower> +80037308: 00000000 nop +8003730c: 00408021 move s0,v0 +80037310: 8fc20024 lw v0,36(s8) +80037314: 00000000 nop +80037318: 80420000 lb v0,0(v0) +8003731c: 00000000 nop +80037320: 00402021 move a0,v0 +80037324: 0c00a5eb jal 800297ac <tolower> +80037328: 00000000 nop +8003732c: 02021023 subu v0,s0,v0 +} +80037330: 03c0e821 move sp,s8 +80037334: 8fbf001c lw ra,28(sp) +80037338: 8fbe0018 lw s8,24(sp) +8003733c: 8fb00014 lw s0,20(sp) +80037340: 27bd0020 addiu sp,sp,32 +80037344: 03e00008 jr ra +80037348: 00000000 nop + +8003734c <strncasecmp>: + +int strncasecmp(const char *s1, const char *s2, size_t len) +{ +8003734c: 27bdffd8 addiu sp,sp,-40 +80037350: afbf0024 sw ra,36(sp) +80037354: afbe0020 sw s8,32(sp) +80037358: afb0001c sw s0,28(sp) +8003735c: 03a0f021 move s8,sp +80037360: afc40028 sw a0,40(s8) +80037364: afc5002c sw a1,44(s8) +80037368: afc60030 sw a2,48(s8) + int p = 0; +8003736c: afc00010 sw zero,16(s8) + + while(tolower(*s1) && tolower(*s2) && (tolower(*s1) == tolower(*s2)) && p<len) +80037370: 10000013 b 800373c0 <strncasecmp+0x74> +80037374: 00000000 nop + { + p++; +80037378: 8fc20010 lw v0,16(s8) +8003737c: 00000000 nop +80037380: 24420001 addiu v0,v0,1 +80037384: afc20010 sw v0,16(s8) + + if(p<len) +80037388: 8fc30010 lw v1,16(s8) +8003738c: 8fc20030 lw v0,48(s8) +80037390: 00000000 nop +80037394: 0062102b sltu v0,v1,v0 +80037398: 10400009 beqz v0,800373c0 <strncasecmp+0x74> +8003739c: 00000000 nop + { + s1++; +800373a0: 8fc20028 lw v0,40(s8) +800373a4: 00000000 nop +800373a8: 24420001 addiu v0,v0,1 +800373ac: afc20028 sw v0,40(s8) + s2++; +800373b0: 8fc2002c lw v0,44(s8) +800373b4: 00000000 nop +800373b8: 24420001 addiu v0,v0,1 +800373bc: afc2002c sw v0,44(s8) + +int strncasecmp(const char *s1, const char *s2, size_t len) +{ + int p = 0; + + while(tolower(*s1) && tolower(*s2) && (tolower(*s1) == tolower(*s2)) && p<len) +800373c0: 8fc20028 lw v0,40(s8) +800373c4: 00000000 nop +800373c8: 80420000 lb v0,0(v0) +800373cc: 00000000 nop +800373d0: 00402021 move a0,v0 +800373d4: 0c00a5eb jal 800297ac <tolower> +800373d8: 00000000 nop +800373dc: 10400021 beqz v0,80037464 <strncasecmp+0x118> +800373e0: 00000000 nop +800373e4: 8fc2002c lw v0,44(s8) +800373e8: 00000000 nop +800373ec: 80420000 lb v0,0(v0) +800373f0: 00000000 nop +800373f4: 00402021 move a0,v0 +800373f8: 0c00a5eb jal 800297ac <tolower> +800373fc: 00000000 nop +80037400: 10400018 beqz v0,80037464 <strncasecmp+0x118> +80037404: 00000000 nop +80037408: 8fc20028 lw v0,40(s8) +8003740c: 00000000 nop +80037410: 80420000 lb v0,0(v0) +80037414: 00000000 nop +80037418: 00402021 move a0,v0 +8003741c: 0c00a5eb jal 800297ac <tolower> +80037420: 00000000 nop +80037424: 00408021 move s0,v0 +80037428: 8fc2002c lw v0,44(s8) +8003742c: 00000000 nop +80037430: 80420000 lb v0,0(v0) +80037434: 00000000 nop +80037438: 00402021 move a0,v0 +8003743c: 0c00a5eb jal 800297ac <tolower> +80037440: 00000000 nop +80037444: 16020007 bne s0,v0,80037464 <strncasecmp+0x118> +80037448: 00000000 nop +8003744c: 8fc30010 lw v1,16(s8) +80037450: 8fc20030 lw v0,48(s8) +80037454: 00000000 nop +80037458: 0062102b sltu v0,v1,v0 +8003745c: 1440ffc6 bnez v0,80037378 <strncasecmp+0x2c> +80037460: 00000000 nop + s1++; + s2++; + } + } + + return tolower(*s1)-tolower(*s2); +80037464: 8fc20028 lw v0,40(s8) +80037468: 00000000 nop +8003746c: 80420000 lb v0,0(v0) +80037470: 00000000 nop +80037474: 00402021 move a0,v0 +80037478: 0c00a5eb jal 800297ac <tolower> +8003747c: 00000000 nop +80037480: 00408021 move s0,v0 +80037484: 8fc2002c lw v0,44(s8) +80037488: 00000000 nop +8003748c: 80420000 lb v0,0(v0) +80037490: 00000000 nop +80037494: 00402021 move a0,v0 +80037498: 0c00a5eb jal 800297ac <tolower> +8003749c: 00000000 nop +800374a0: 02021023 subu v0,s0,v0 +} +800374a4: 03c0e821 move sp,s8 +800374a8: 8fbf0024 lw ra,36(sp) +800374ac: 8fbe0020 lw s8,32(sp) +800374b0: 8fb0001c lw s0,28(sp) +800374b4: 27bd0028 addiu sp,sp,40 +800374b8: 03e00008 jr ra +800374bc: 00000000 nop + +800374c0 <stricmp>: + +int stricmp(const char *s1, const char *s2) +{ +800374c0: 27bdffe8 addiu sp,sp,-24 +800374c4: afbf0014 sw ra,20(sp) +800374c8: afbe0010 sw s8,16(sp) +800374cc: 03a0f021 move s8,sp +800374d0: afc40018 sw a0,24(s8) +800374d4: afc5001c sw a1,28(s8) + return strcasecmp(s1,s2); +800374d8: 8fc5001c lw a1,28(s8) +800374dc: 8fc40018 lw a0,24(s8) +800374e0: 0c00dc88 jal 80037220 <strcasecmp> +800374e4: 00000000 nop +} +800374e8: 03c0e821 move sp,s8 +800374ec: 8fbf0014 lw ra,20(sp) +800374f0: 8fbe0010 lw s8,16(sp) +800374f4: 27bd0018 addiu sp,sp,24 +800374f8: 03e00008 jr ra +800374fc: 00000000 nop + +80037500 <strnicmp>: + +int strnicmp(const char *s1, const char *s2, size_t len) +{ +80037500: 27bdffe8 addiu sp,sp,-24 +80037504: afbf0014 sw ra,20(sp) +80037508: afbe0010 sw s8,16(sp) +8003750c: 03a0f021 move s8,sp +80037510: afc40018 sw a0,24(s8) +80037514: afc5001c sw a1,28(s8) +80037518: afc60020 sw a2,32(s8) + return strncasecmp(s1, s2, len); +8003751c: 8fc60020 lw a2,32(s8) +80037520: 8fc5001c lw a1,28(s8) +80037524: 8fc40018 lw a0,24(s8) +80037528: 0c00dcd3 jal 8003734c <strncasecmp> +8003752c: 00000000 nop +} +80037530: 03c0e821 move sp,s8 +80037534: 8fbf0014 lw ra,20(sp) +80037538: 8fbe0010 lw s8,16(sp) +8003753c: 27bd0018 addiu sp,sp,24 +80037540: 03e00008 jr ra +80037544: 00000000 nop + +80037548 <strsep>: + +//static char *strtok_string; + +char *strsep(char **stringp, const char *delim) +{ +80037548: 27bdffe8 addiu sp,sp,-24 +8003754c: afbe0014 sw s8,20(sp) +80037550: 03a0f021 move s8,sp +80037554: afc40018 sw a0,24(s8) +80037558: afc5001c sw a1,28(s8) + //int x,y; + char *old = *stringp; +8003755c: 8fc20018 lw v0,24(s8) +80037560: 00000000 nop +80037564: 8c420000 lw v0,0(v0) +80037568: 00000000 nop +8003756c: afc20004 sw v0,4(s8) + const char *s; + int ok = 0; +80037570: afc00000 sw zero,0(s8) + + while(**stringp && !ok) +80037574: 1000002f b 80037634 <strsep+0xec> +80037578: 00000000 nop + { + s = delim; +8003757c: 8fc2001c lw v0,28(s8) +80037580: 00000000 nop +80037584: afc20008 sw v0,8(s8) + + while(*delim) +80037588: 10000019 b 800375f0 <strsep+0xa8> +8003758c: 00000000 nop + { + if(**stringp == *delim) +80037590: 8fc20018 lw v0,24(s8) +80037594: 00000000 nop +80037598: 8c420000 lw v0,0(v0) +8003759c: 00000000 nop +800375a0: 80430000 lb v1,0(v0) +800375a4: 8fc2001c lw v0,28(s8) +800375a8: 00000000 nop +800375ac: 80420000 lb v0,0(v0) +800375b0: 00000000 nop +800375b4: 1462000a bne v1,v0,800375e0 <strsep+0x98> +800375b8: 00000000 nop + { + **stringp = 0; +800375bc: 8fc20018 lw v0,24(s8) +800375c0: 00000000 nop +800375c4: 8c420000 lw v0,0(v0) +800375c8: 00000000 nop +800375cc: a0400000 sb zero,0(v0) + ok = 1; +800375d0: 24020001 li v0,1 +800375d4: afc20000 sw v0,0(s8) + break; +800375d8: 1000000b b 80037608 <strsep+0xc0> +800375dc: 00000000 nop + } + + delim++; +800375e0: 8fc2001c lw v0,28(s8) +800375e4: 00000000 nop +800375e8: 24420001 addiu v0,v0,1 +800375ec: afc2001c sw v0,28(s8) + + while(**stringp && !ok) + { + s = delim; + + while(*delim) +800375f0: 8fc2001c lw v0,28(s8) +800375f4: 00000000 nop +800375f8: 80420000 lb v0,0(v0) +800375fc: 00000000 nop +80037600: 1440ffe3 bnez v0,80037590 <strsep+0x48> +80037604: 00000000 nop + } + + delim++; + } + + delim = s; +80037608: 8fc20008 lw v0,8(s8) +8003760c: 00000000 nop +80037610: afc2001c sw v0,28(s8) + + *stringp+=1; +80037614: 8fc20018 lw v0,24(s8) +80037618: 00000000 nop +8003761c: 8c420000 lw v0,0(v0) +80037620: 00000000 nop +80037624: 24430001 addiu v1,v0,1 +80037628: 8fc20018 lw v0,24(s8) +8003762c: 00000000 nop +80037630: ac430000 sw v1,0(v0) + //int x,y; + char *old = *stringp; + const char *s; + int ok = 0; + + while(**stringp && !ok) +80037634: 8fc20018 lw v0,24(s8) +80037638: 00000000 nop +8003763c: 8c420000 lw v0,0(v0) +80037640: 00000000 nop +80037644: 80420000 lb v0,0(v0) +80037648: 00000000 nop +8003764c: 10400005 beqz v0,80037664 <strsep+0x11c> +80037650: 00000000 nop +80037654: 8fc20000 lw v0,0(s8) +80037658: 00000000 nop +8003765c: 1040ffc7 beqz v0,8003757c <strsep+0x34> +80037660: 00000000 nop + delim = s; + + *stringp+=1; + } + + if(!ok)*stringp = NULL; +80037664: 8fc20000 lw v0,0(s8) +80037668: 00000000 nop +8003766c: 14400004 bnez v0,80037680 <strsep+0x138> +80037670: 00000000 nop +80037674: 8fc20018 lw v0,24(s8) +80037678: 00000000 nop +8003767c: ac400000 sw zero,0(v0) + + return old; +80037680: 8fc20004 lw v0,4(s8) +} +80037684: 03c0e821 move sp,s8 +80037688: 8fbe0014 lw s8,20(sp) +8003768c: 27bd0018 addiu sp,sp,24 +80037690: 03e00008 jr ra +80037694: 00000000 nop + +80037698 <strtok_r>: + +char* strtok_r( + char *str, + const char *delim, + char **nextp) +{ +80037698: 27bdffe0 addiu sp,sp,-32 +8003769c: afbf001c sw ra,28(sp) +800376a0: afbe0018 sw s8,24(sp) +800376a4: 03a0f021 move s8,sp +800376a8: afc40020 sw a0,32(s8) +800376ac: afc50024 sw a1,36(s8) +800376b0: afc60028 sw a2,40(s8) + char *ret; + + if (str == NULL) +800376b4: 8fc20020 lw v0,32(s8) +800376b8: 00000000 nop +800376bc: 14400006 bnez v0,800376d8 <strtok_r+0x40> +800376c0: 00000000 nop + { + str = *nextp; +800376c4: 8fc20028 lw v0,40(s8) +800376c8: 00000000 nop +800376cc: 8c420000 lw v0,0(v0) +800376d0: 00000000 nop +800376d4: afc20020 sw v0,32(s8) + } + + str += strspn(str, delim); +800376d8: 8fc50024 lw a1,36(s8) +800376dc: 8fc40020 lw a0,32(s8) +800376e0: 0c00dea0 jal 80037a80 <strspn> +800376e4: 00000000 nop +800376e8: 00401821 move v1,v0 +800376ec: 8fc20020 lw v0,32(s8) +800376f0: 00000000 nop +800376f4: 00431021 addu v0,v0,v1 +800376f8: afc20020 sw v0,32(s8) + + if (*str == '\0') +800376fc: 8fc20020 lw v0,32(s8) +80037700: 00000000 nop +80037704: 80420000 lb v0,0(v0) +80037708: 00000000 nop +8003770c: 14400004 bnez v0,80037720 <strtok_r+0x88> +80037710: 00000000 nop + { + return NULL; +80037714: 00001021 move v0,zero +80037718: 1000001d b 80037790 <strtok_r+0xf8> +8003771c: 00000000 nop + } + + ret = str; +80037720: 8fc20020 lw v0,32(s8) +80037724: 00000000 nop +80037728: afc20010 sw v0,16(s8) + + str += strcspn(str, delim); +8003772c: 8fc50024 lw a1,36(s8) +80037730: 8fc40020 lw a0,32(s8) +80037734: 0c00dee2 jal 80037b88 <strcspn> +80037738: 00000000 nop +8003773c: 00401821 move v1,v0 +80037740: 8fc20020 lw v0,32(s8) +80037744: 00000000 nop +80037748: 00431021 addu v0,v0,v1 +8003774c: afc20020 sw v0,32(s8) + + if (*str) +80037750: 8fc20020 lw v0,32(s8) +80037754: 00000000 nop +80037758: 80420000 lb v0,0(v0) +8003775c: 00000000 nop +80037760: 10400006 beqz v0,8003777c <strtok_r+0xe4> +80037764: 00000000 nop + { + *str++ = '\0'; +80037768: 8fc20020 lw v0,32(s8) +8003776c: 00000000 nop +80037770: 24430001 addiu v1,v0,1 +80037774: afc30020 sw v1,32(s8) +80037778: a0400000 sb zero,0(v0) + } + + *nextp = str; +8003777c: 8fc20028 lw v0,40(s8) +80037780: 8fc30020 lw v1,32(s8) +80037784: 00000000 nop +80037788: ac430000 sw v1,0(v0) + + return ret; +8003778c: 8fc20010 lw v0,16(s8) +} +80037790: 03c0e821 move sp,s8 +80037794: 8fbf001c lw ra,28(sp) +80037798: 8fbe0018 lw s8,24(sp) +8003779c: 27bd0020 addiu sp,sp,32 +800377a0: 03e00008 jr ra +800377a4: 00000000 nop + +800377a8 <strtok>: + +char *strtok(char *str, const char *sep) +{ +800377a8: 27bdffe0 addiu sp,sp,-32 +800377ac: afbf001c sw ra,28(sp) +800377b0: afbe0018 sw s8,24(sp) +800377b4: 03a0f021 move s8,sp +800377b8: afc40020 sw a0,32(s8) +800377bc: afc50024 sw a1,36(s8) + static char *strtok_string; + static int strtok_len; + static int strtok_pos; + //int strtok_oldpos = 0; + + if(str != NULL) +800377c0: 8fc20020 lw v0,32(s8) +800377c4: 00000000 nop +800377c8: 1040007c beqz v0,800379bc <strtok+0x214> +800377cc: 00000000 nop + { + strtok_string = str; +800377d0: 3c028007 lui v0,0x8007 +800377d4: 8fc30020 lw v1,32(s8) +800377d8: 00000000 nop +800377dc: ac431d0c sw v1,7436(v0) + strtok_len = strlen(str); +800377e0: 8fc40020 lw a0,32(s8) +800377e4: 0c00d8af jal 800362bc <strlen> +800377e8: 00000000 nop +800377ec: 00401821 move v1,v0 +800377f0: 3c028007 lui v0,0x8007 +800377f4: ac431d10 sw v1,7440(v0) + + for(x = 0; x < strtok_len; x++) +800377f8: afc00010 sw zero,16(s8) +800377fc: 1000002a b 800378a8 <strtok+0x100> +80037800: 00000000 nop + { + for(y = 0; sep[y] != 0; y++) +80037804: afc00014 sw zero,20(s8) +80037808: 1000001b b 80037878 <strtok+0xd0> +8003780c: 00000000 nop + { + if(strtok_string[x] == sep[y]) +80037810: 3c028007 lui v0,0x8007 +80037814: 8c431d0c lw v1,7436(v0) +80037818: 8fc20010 lw v0,16(s8) +8003781c: 00000000 nop +80037820: 00621021 addu v0,v1,v0 +80037824: 80430000 lb v1,0(v0) +80037828: 8fc20014 lw v0,20(s8) +8003782c: 8fc40024 lw a0,36(s8) +80037830: 00000000 nop +80037834: 00821021 addu v0,a0,v0 +80037838: 80420000 lb v0,0(v0) +8003783c: 00000000 nop +80037840: 14620009 bne v1,v0,80037868 <strtok+0xc0> +80037844: 00000000 nop + { + strtok_string[x] = 0; +80037848: 3c028007 lui v0,0x8007 +8003784c: 8c431d0c lw v1,7436(v0) +80037850: 8fc20010 lw v0,16(s8) +80037854: 00000000 nop +80037858: 00621021 addu v0,v1,v0 +8003785c: a0400000 sb zero,0(v0) + break; +80037860: 1000000d b 80037898 <strtok+0xf0> +80037864: 00000000 nop + strtok_string = str; + strtok_len = strlen(str); + + for(x = 0; x < strtok_len; x++) + { + for(y = 0; sep[y] != 0; y++) +80037868: 8fc20014 lw v0,20(s8) +8003786c: 00000000 nop +80037870: 24420001 addiu v0,v0,1 +80037874: afc20014 sw v0,20(s8) +80037878: 8fc20014 lw v0,20(s8) +8003787c: 8fc30024 lw v1,36(s8) +80037880: 00000000 nop +80037884: 00621021 addu v0,v1,v0 +80037888: 80420000 lb v0,0(v0) +8003788c: 00000000 nop +80037890: 1440ffdf bnez v0,80037810 <strtok+0x68> +80037894: 00000000 nop + if(str != NULL) + { + strtok_string = str; + strtok_len = strlen(str); + + for(x = 0; x < strtok_len; x++) +80037898: 8fc20010 lw v0,16(s8) +8003789c: 00000000 nop +800378a0: 24420001 addiu v0,v0,1 +800378a4: afc20010 sw v0,16(s8) +800378a8: 3c028007 lui v0,0x8007 +800378ac: 8c421d10 lw v0,7440(v0) +800378b0: 8fc30010 lw v1,16(s8) +800378b4: 00000000 nop +800378b8: 0062102a slt v0,v1,v0 +800378bc: 1440ffd1 bnez v0,80037804 <strtok+0x5c> +800378c0: 00000000 nop + break; + } + } + } + + strtok_pos = 0; +800378c4: 3c028007 lui v0,0x8007 +800378c8: ac401d14 sw zero,7444(v0) + + while(strtok_pos < strtok_len) +800378cc: 10000019 b 80037934 <strtok+0x18c> +800378d0: 00000000 nop + { + if(strtok_string[strtok_pos]) +800378d4: 3c028007 lui v0,0x8007 +800378d8: 8c421d0c lw v0,7436(v0) +800378dc: 3c038007 lui v1,0x8007 +800378e0: 8c631d14 lw v1,7444(v1) +800378e4: 00000000 nop +800378e8: 00431021 addu v0,v0,v1 +800378ec: 80420000 lb v0,0(v0) +800378f0: 00000000 nop +800378f4: 10400009 beqz v0,8003791c <strtok+0x174> +800378f8: 00000000 nop + return &strtok_string[strtok_pos]; +800378fc: 3c028007 lui v0,0x8007 +80037900: 8c421d0c lw v0,7436(v0) +80037904: 3c038007 lui v1,0x8007 +80037908: 8c631d14 lw v1,7444(v1) +8003790c: 00000000 nop +80037910: 00431021 addu v0,v0,v1 +80037914: 10000054 b 80037a68 <strtok+0x2c0> +80037918: 00000000 nop + + strtok_pos++; +8003791c: 3c028007 lui v0,0x8007 +80037920: 8c421d14 lw v0,7444(v0) +80037924: 00000000 nop +80037928: 24430001 addiu v1,v0,1 +8003792c: 3c028007 lui v0,0x8007 +80037930: ac431d14 sw v1,7444(v0) + } + } + + strtok_pos = 0; + + while(strtok_pos < strtok_len) +80037934: 3c028007 lui v0,0x8007 +80037938: 8c431d14 lw v1,7444(v0) +8003793c: 3c028007 lui v0,0x8007 +80037940: 8c421d10 lw v0,7440(v0) +80037944: 00000000 nop +80037948: 0062102a slt v0,v1,v0 +8003794c: 1440ffe1 bnez v0,800378d4 <strtok+0x12c> +80037950: 00000000 nop + + strtok_pos++; + } + } + + while(strtok_pos < strtok_len) +80037954: 10000019 b 800379bc <strtok+0x214> +80037958: 00000000 nop + { + if(!strtok_string[strtok_pos]) +8003795c: 3c028007 lui v0,0x8007 +80037960: 8c421d0c lw v0,7436(v0) +80037964: 3c038007 lui v1,0x8007 +80037968: 8c631d14 lw v1,7444(v1) +8003796c: 00000000 nop +80037970: 00431021 addu v0,v0,v1 +80037974: 80420000 lb v0,0(v0) +80037978: 00000000 nop +8003797c: 14400009 bnez v0,800379a4 <strtok+0x1fc> +80037980: 00000000 nop + { + strtok_pos++; +80037984: 3c028007 lui v0,0x8007 +80037988: 8c421d14 lw v0,7444(v0) +8003798c: 00000000 nop +80037990: 24430001 addiu v1,v0,1 +80037994: 3c028007 lui v0,0x8007 +80037998: ac431d14 sw v1,7444(v0) + break; +8003799c: 1000000f b 800379dc <strtok+0x234> +800379a0: 00000000 nop + } + + strtok_pos++; +800379a4: 3c028007 lui v0,0x8007 +800379a8: 8c421d14 lw v0,7444(v0) +800379ac: 00000000 nop +800379b0: 24430001 addiu v1,v0,1 +800379b4: 3c028007 lui v0,0x8007 +800379b8: ac431d14 sw v1,7444(v0) + + strtok_pos++; + } + } + + while(strtok_pos < strtok_len) +800379bc: 3c028007 lui v0,0x8007 +800379c0: 8c431d14 lw v1,7444(v0) +800379c4: 3c028007 lui v0,0x8007 +800379c8: 8c421d10 lw v0,7440(v0) +800379cc: 00000000 nop +800379d0: 0062102a slt v0,v1,v0 +800379d4: 1440ffe1 bnez v0,8003795c <strtok+0x1b4> +800379d8: 00000000 nop + } + + strtok_pos++; + } + + while(strtok_pos < strtok_len) +800379dc: 10000019 b 80037a44 <strtok+0x29c> +800379e0: 00000000 nop + { + + if(strtok_string[strtok_pos]) +800379e4: 3c028007 lui v0,0x8007 +800379e8: 8c421d0c lw v0,7436(v0) +800379ec: 3c038007 lui v1,0x8007 +800379f0: 8c631d14 lw v1,7444(v1) +800379f4: 00000000 nop +800379f8: 00431021 addu v0,v0,v1 +800379fc: 80420000 lb v0,0(v0) +80037a00: 00000000 nop +80037a04: 10400009 beqz v0,80037a2c <strtok+0x284> +80037a08: 00000000 nop + return &strtok_string[strtok_pos]; +80037a0c: 3c028007 lui v0,0x8007 +80037a10: 8c421d0c lw v0,7436(v0) +80037a14: 3c038007 lui v1,0x8007 +80037a18: 8c631d14 lw v1,7444(v1) +80037a1c: 00000000 nop +80037a20: 00431021 addu v0,v0,v1 +80037a24: 10000010 b 80037a68 <strtok+0x2c0> +80037a28: 00000000 nop + + strtok_pos++; +80037a2c: 3c028007 lui v0,0x8007 +80037a30: 8c421d14 lw v0,7444(v0) +80037a34: 00000000 nop +80037a38: 24430001 addiu v1,v0,1 +80037a3c: 3c028007 lui v0,0x8007 +80037a40: ac431d14 sw v1,7444(v0) + } + + strtok_pos++; + } + + while(strtok_pos < strtok_len) +80037a44: 3c028007 lui v0,0x8007 +80037a48: 8c431d14 lw v1,7444(v0) +80037a4c: 3c028007 lui v0,0x8007 +80037a50: 8c421d10 lw v0,7440(v0) +80037a54: 00000000 nop +80037a58: 0062102a slt v0,v1,v0 +80037a5c: 1440ffe1 bnez v0,800379e4 <strtok+0x23c> +80037a60: 00000000 nop + return &strtok_string[strtok_pos]; + + strtok_pos++; + } + + return NULL; +80037a64: 00001021 move v0,zero +} +80037a68: 03c0e821 move sp,s8 +80037a6c: 8fbf001c lw ra,28(sp) +80037a70: 8fbe0018 lw s8,24(sp) +80037a74: 27bd0020 addiu sp,sp,32 +80037a78: 03e00008 jr ra +80037a7c: 00000000 nop + +80037a80 <strspn>: + +int strspn(const char *s, const char *charset) +{ +80037a80: 27bdffe8 addiu sp,sp,-24 +80037a84: afbe0014 sw s8,20(sp) +80037a88: 03a0f021 move s8,sp +80037a8c: afc40018 sw a0,24(s8) +80037a90: afc5001c sw a1,28(s8) + int x, y; + int appears; + + for(x = 0; s[x] != 0; x++) +80037a94: afc00000 sw zero,0(s8) +80037a98: 1000002a b 80037b44 <strspn+0xc4> +80037a9c: 00000000 nop + { + appears = 0; +80037aa0: afc00008 sw zero,8(s8) + + for(y = 0; charset[y] != 0; y++) +80037aa4: afc00004 sw zero,4(s8) +80037aa8: 10000016 b 80037b04 <strspn+0x84> +80037aac: 00000000 nop + { + if(s[x] == charset[y]) +80037ab0: 8fc20000 lw v0,0(s8) +80037ab4: 8fc30018 lw v1,24(s8) +80037ab8: 00000000 nop +80037abc: 00621021 addu v0,v1,v0 +80037ac0: 80430000 lb v1,0(v0) +80037ac4: 8fc20004 lw v0,4(s8) +80037ac8: 8fc4001c lw a0,28(s8) +80037acc: 00000000 nop +80037ad0: 00821021 addu v0,a0,v0 +80037ad4: 80420000 lb v0,0(v0) +80037ad8: 00000000 nop +80037adc: 14620005 bne v1,v0,80037af4 <strspn+0x74> +80037ae0: 00000000 nop + { + appears = 1; +80037ae4: 24020001 li v0,1 +80037ae8: afc20008 sw v0,8(s8) + break; +80037aec: 1000000d b 80037b24 <strspn+0xa4> +80037af0: 00000000 nop + + for(x = 0; s[x] != 0; x++) + { + appears = 0; + + for(y = 0; charset[y] != 0; y++) +80037af4: 8fc20004 lw v0,4(s8) +80037af8: 00000000 nop +80037afc: 24420001 addiu v0,v0,1 +80037b00: afc20004 sw v0,4(s8) +80037b04: 8fc20004 lw v0,4(s8) +80037b08: 8fc3001c lw v1,28(s8) +80037b0c: 00000000 nop +80037b10: 00621021 addu v0,v1,v0 +80037b14: 80420000 lb v0,0(v0) +80037b18: 00000000 nop +80037b1c: 1440ffe4 bnez v0,80037ab0 <strspn+0x30> +80037b20: 00000000 nop + appears = 1; + break; + } + } + + if(!appears)break; +80037b24: 8fc20008 lw v0,8(s8) +80037b28: 00000000 nop +80037b2c: 1040000f beqz v0,80037b6c <strspn+0xec> +80037b30: 00000000 nop +int strspn(const char *s, const char *charset) +{ + int x, y; + int appears; + + for(x = 0; s[x] != 0; x++) +80037b34: 8fc20000 lw v0,0(s8) +80037b38: 00000000 nop +80037b3c: 24420001 addiu v0,v0,1 +80037b40: afc20000 sw v0,0(s8) +80037b44: 8fc20000 lw v0,0(s8) +80037b48: 8fc30018 lw v1,24(s8) +80037b4c: 00000000 nop +80037b50: 00621021 addu v0,v1,v0 +80037b54: 80420000 lb v0,0(v0) +80037b58: 00000000 nop +80037b5c: 1440ffd0 bnez v0,80037aa0 <strspn+0x20> +80037b60: 00000000 nop +80037b64: 10000002 b 80037b70 <strspn+0xf0> +80037b68: 00000000 nop + appears = 1; + break; + } + } + + if(!appears)break; +80037b6c: 00000000 nop + } + + return x; +80037b70: 8fc20000 lw v0,0(s8) +} +80037b74: 03c0e821 move sp,s8 +80037b78: 8fbe0014 lw s8,20(sp) +80037b7c: 27bd0018 addiu sp,sp,24 +80037b80: 03e00008 jr ra +80037b84: 00000000 nop + +80037b88 <strcspn>: + +int strcspn(const char *s, const char *charset) +{ +80037b88: 27bdffe8 addiu sp,sp,-24 +80037b8c: afbe0014 sw s8,20(sp) +80037b90: 03a0f021 move s8,sp +80037b94: afc40018 sw a0,24(s8) +80037b98: afc5001c sw a1,28(s8) + int x, y; + int appears; + + for(x = 0; s[x] != 0; x++) +80037b9c: afc00000 sw zero,0(s8) +80037ba0: 1000002a b 80037c4c <strcspn+0xc4> +80037ba4: 00000000 nop + { + appears = 0; +80037ba8: afc00008 sw zero,8(s8) + + for(y = 0; charset[y] != 0; y++) +80037bac: afc00004 sw zero,4(s8) +80037bb0: 10000016 b 80037c0c <strcspn+0x84> +80037bb4: 00000000 nop + { + if(s[x] == charset[y]) +80037bb8: 8fc20000 lw v0,0(s8) +80037bbc: 8fc30018 lw v1,24(s8) +80037bc0: 00000000 nop +80037bc4: 00621021 addu v0,v1,v0 +80037bc8: 80430000 lb v1,0(v0) +80037bcc: 8fc20004 lw v0,4(s8) +80037bd0: 8fc4001c lw a0,28(s8) +80037bd4: 00000000 nop +80037bd8: 00821021 addu v0,a0,v0 +80037bdc: 80420000 lb v0,0(v0) +80037be0: 00000000 nop +80037be4: 14620005 bne v1,v0,80037bfc <strcspn+0x74> +80037be8: 00000000 nop + { + appears = 1; +80037bec: 24020001 li v0,1 +80037bf0: afc20008 sw v0,8(s8) + break; +80037bf4: 1000000d b 80037c2c <strcspn+0xa4> +80037bf8: 00000000 nop + + for(x = 0; s[x] != 0; x++) + { + appears = 0; + + for(y = 0; charset[y] != 0; y++) +80037bfc: 8fc20004 lw v0,4(s8) +80037c00: 00000000 nop +80037c04: 24420001 addiu v0,v0,1 +80037c08: afc20004 sw v0,4(s8) +80037c0c: 8fc20004 lw v0,4(s8) +80037c10: 8fc3001c lw v1,28(s8) +80037c14: 00000000 nop +80037c18: 00621021 addu v0,v1,v0 +80037c1c: 80420000 lb v0,0(v0) +80037c20: 00000000 nop +80037c24: 1440ffe4 bnez v0,80037bb8 <strcspn+0x30> +80037c28: 00000000 nop + appears = 1; + break; + } + } + + if(appears)break; +80037c2c: 8fc20008 lw v0,8(s8) +80037c30: 00000000 nop +80037c34: 1440000f bnez v0,80037c74 <strcspn+0xec> +80037c38: 00000000 nop +int strcspn(const char *s, const char *charset) +{ + int x, y; + int appears; + + for(x = 0; s[x] != 0; x++) +80037c3c: 8fc20000 lw v0,0(s8) +80037c40: 00000000 nop +80037c44: 24420001 addiu v0,v0,1 +80037c48: afc20000 sw v0,0(s8) +80037c4c: 8fc20000 lw v0,0(s8) +80037c50: 8fc30018 lw v1,24(s8) +80037c54: 00000000 nop +80037c58: 00621021 addu v0,v1,v0 +80037c5c: 80420000 lb v0,0(v0) +80037c60: 00000000 nop +80037c64: 1440ffd0 bnez v0,80037ba8 <strcspn+0x20> +80037c68: 00000000 nop +80037c6c: 10000002 b 80037c78 <strcspn+0xf0> +80037c70: 00000000 nop + appears = 1; + break; + } + } + + if(appears)break; +80037c74: 00000000 nop + } + + return x; +80037c78: 8fc20000 lw v0,0(s8) +} +80037c7c: 03c0e821 move sp,s8 +80037c80: 8fbe0014 lw s8,20(sp) +80037c84: 27bd0018 addiu sp,sp,24 +80037c88: 03e00008 jr ra +80037c8c: 00000000 nop + +80037c90 <strlwr>: + +char *strlwr(char *string) +{ +80037c90: 27bdffe0 addiu sp,sp,-32 +80037c94: afbf001c sw ra,28(sp) +80037c98: afbe0018 sw s8,24(sp) +80037c9c: 03a0f021 move s8,sp +80037ca0: afc40020 sw a0,32(s8) + char *old = string; +80037ca4: 8fc20020 lw v0,32(s8) +80037ca8: 00000000 nop +80037cac: afc20010 sw v0,16(s8) + + while(*string) +80037cb0: 10000011 b 80037cf8 <strlwr+0x68> +80037cb4: 00000000 nop + { + *string = tolower(*string); +80037cb8: 8fc20020 lw v0,32(s8) +80037cbc: 00000000 nop +80037cc0: 80420000 lb v0,0(v0) +80037cc4: 00000000 nop +80037cc8: 00402021 move a0,v0 +80037ccc: 0c00a5eb jal 800297ac <tolower> +80037cd0: 00000000 nop +80037cd4: 00021e00 sll v1,v0,0x18 +80037cd8: 00031e03 sra v1,v1,0x18 +80037cdc: 8fc20020 lw v0,32(s8) +80037ce0: 00000000 nop +80037ce4: a0430000 sb v1,0(v0) + string++; +80037ce8: 8fc20020 lw v0,32(s8) +80037cec: 00000000 nop +80037cf0: 24420001 addiu v0,v0,1 +80037cf4: afc20020 sw v0,32(s8) + +char *strlwr(char *string) +{ + char *old = string; + + while(*string) +80037cf8: 8fc20020 lw v0,32(s8) +80037cfc: 00000000 nop +80037d00: 80420000 lb v0,0(v0) +80037d04: 00000000 nop +80037d08: 1440ffeb bnez v0,80037cb8 <strlwr+0x28> +80037d0c: 00000000 nop + { + *string = tolower(*string); + string++; + } + + return old; +80037d10: 8fc20010 lw v0,16(s8) +} +80037d14: 03c0e821 move sp,s8 +80037d18: 8fbf001c lw ra,28(sp) +80037d1c: 8fbe0018 lw s8,24(sp) +80037d20: 27bd0020 addiu sp,sp,32 +80037d24: 03e00008 jr ra +80037d28: 00000000 nop + +80037d2c <strupr>: + +char *strupr(char *string) +{ +80037d2c: 27bdffe0 addiu sp,sp,-32 +80037d30: afbf001c sw ra,28(sp) +80037d34: afbe0018 sw s8,24(sp) +80037d38: 03a0f021 move s8,sp +80037d3c: afc40020 sw a0,32(s8) + char *old = string; +80037d40: 8fc20020 lw v0,32(s8) +80037d44: 00000000 nop +80037d48: afc20010 sw v0,16(s8) + + while(*string) +80037d4c: 10000011 b 80037d94 <strupr+0x68> +80037d50: 00000000 nop + { + *string = toupper(*string); +80037d54: 8fc20020 lw v0,32(s8) +80037d58: 00000000 nop +80037d5c: 80420000 lb v0,0(v0) +80037d60: 00000000 nop +80037d64: 00402021 move a0,v0 +80037d68: 0c00a5d2 jal 80029748 <toupper> +80037d6c: 00000000 nop +80037d70: 00021e00 sll v1,v0,0x18 +80037d74: 00031e03 sra v1,v1,0x18 +80037d78: 8fc20020 lw v0,32(s8) +80037d7c: 00000000 nop +80037d80: a0430000 sb v1,0(v0) + string++; +80037d84: 8fc20020 lw v0,32(s8) +80037d88: 00000000 nop +80037d8c: 24420001 addiu v0,v0,1 +80037d90: afc20020 sw v0,32(s8) + +char *strupr(char *string) +{ + char *old = string; + + while(*string) +80037d94: 8fc20020 lw v0,32(s8) +80037d98: 00000000 nop +80037d9c: 80420000 lb v0,0(v0) +80037da0: 00000000 nop +80037da4: 1440ffeb bnez v0,80037d54 <strupr+0x28> +80037da8: 00000000 nop + { + *string = toupper(*string); + string++; + } + + return old; +80037dac: 8fc20010 lw v0,16(s8) +} +80037db0: 03c0e821 move sp,s8 +80037db4: 8fbf001c lw ra,28(sp) +80037db8: 8fbe0018 lw s8,24(sp) +80037dbc: 27bd0020 addiu sp,sp,32 +80037dc0: 03e00008 jr ra +80037dc4: 00000000 nop + +80037dc8 <atoi>: + +int atoi(const char *string) +{ +80037dc8: 27bdffe8 addiu sp,sp,-24 +80037dcc: afbf0014 sw ra,20(sp) +80037dd0: afbe0010 sw s8,16(sp) +80037dd4: 03a0f021 move s8,sp +80037dd8: afc40018 sw a0,24(s8) + return (int)strtol(string, NULL, 10); +80037ddc: 2406000a li a2,10 +80037de0: 00002821 move a1,zero +80037de4: 8fc40018 lw a0,24(s8) +80037de8: 0c00db4c jal 80036d30 <strtol> +80037dec: 00000000 nop +} +80037df0: 03c0e821 move sp,s8 +80037df4: 8fbf0014 lw ra,20(sp) +80037df8: 8fbe0010 lw s8,16(sp) +80037dfc: 27bd0018 addiu sp,sp,24 +80037e00: 03e00008 jr ra +80037e04: 00000000 nop + +80037e08 <atol>: + +long atol(const char *string) +{ +80037e08: 27bdffe8 addiu sp,sp,-24 +80037e0c: afbf0014 sw ra,20(sp) +80037e10: afbe0010 sw s8,16(sp) +80037e14: 03a0f021 move s8,sp +80037e18: afc40018 sw a0,24(s8) + return strtol(string, NULL, 10); +80037e1c: 2406000a li a2,10 +80037e20: 00002821 move a1,zero +80037e24: 8fc40018 lw a0,24(s8) +80037e28: 0c00db4c jal 80036d30 <strtol> +80037e2c: 00000000 nop +} +80037e30: 03c0e821 move sp,s8 +80037e34: 8fbf0014 lw ra,20(sp) +80037e38: 8fbe0010 lw s8,16(sp) +80037e3c: 27bd0018 addiu sp,sp,24 +80037e40: 03e00008 jr ra +80037e44: 00000000 nop + +80037e48 <strnlen>: + +int strnlen(const char *s, size_t maxlen) +{ +80037e48: 27bdfff0 addiu sp,sp,-16 +80037e4c: afbe000c sw s8,12(sp) +80037e50: 03a0f021 move s8,sp +80037e54: afc40010 sw a0,16(s8) +80037e58: afc50014 sw a1,20(s8) + int l=0; +80037e5c: afc00000 sw zero,0(s8) + + while(*(s++) && l<maxlen) +80037e60: 10000005 b 80037e78 <strnlen+0x30> +80037e64: 00000000 nop + l++; +80037e68: 8fc20000 lw v0,0(s8) +80037e6c: 00000000 nop +80037e70: 24420001 addiu v0,v0,1 +80037e74: afc20000 sw v0,0(s8) + +int strnlen(const char *s, size_t maxlen) +{ + int l=0; + + while(*(s++) && l<maxlen) +80037e78: 8fc20010 lw v0,16(s8) +80037e7c: 00000000 nop +80037e80: 24430001 addiu v1,v0,1 +80037e84: afc30010 sw v1,16(s8) +80037e88: 80420000 lb v0,0(v0) +80037e8c: 00000000 nop +80037e90: 10400007 beqz v0,80037eb0 <strnlen+0x68> +80037e94: 00000000 nop +80037e98: 8fc30000 lw v1,0(s8) +80037e9c: 8fc20014 lw v0,20(s8) +80037ea0: 00000000 nop +80037ea4: 0062102b sltu v0,v1,v0 +80037ea8: 1440ffef bnez v0,80037e68 <strnlen+0x20> +80037eac: 00000000 nop + l++; + + return l; +80037eb0: 8fc20000 lw v0,0(s8) +} +80037eb4: 03c0e821 move sp,s8 +80037eb8: 8fbe000c lw s8,12(sp) +80037ebc: 27bd0010 addiu sp,sp,16 +80037ec0: 03e00008 jr ra +80037ec4: 00000000 nop + +80037ec8 <memrchr>: + +void *memrchr(void *b, int c, size_t len) +{ +80037ec8: 27bdfff0 addiu sp,sp,-16 +80037ecc: afbe000c sw s8,12(sp) +80037ed0: 03a0f021 move s8,sp +80037ed4: afc40010 sw a0,16(s8) +80037ed8: afc50014 sw a1,20(s8) +80037edc: afc60018 sw a2,24(s8) + int i = len - 1; +80037ee0: 8fc20018 lw v0,24(s8) +80037ee4: 00000000 nop +80037ee8: 2442ffff addiu v0,v0,-1 +80037eec: afc20000 sw v0,0(s8) + unsigned char *p = b; +80037ef0: 8fc20010 lw v0,16(s8) +80037ef4: 00000000 nop +80037ef8: afc20004 sw v0,4(s8) + + for(i = len - 1; p[i] != (unsigned char)c && i >= 0;i--); +80037efc: 8fc20018 lw v0,24(s8) +80037f00: 00000000 nop +80037f04: 2442ffff addiu v0,v0,-1 +80037f08: afc20000 sw v0,0(s8) +80037f0c: 10000005 b 80037f24 <memrchr+0x5c> +80037f10: 00000000 nop +80037f14: 8fc20000 lw v0,0(s8) +80037f18: 00000000 nop +80037f1c: 2442ffff addiu v0,v0,-1 +80037f20: afc20000 sw v0,0(s8) +80037f24: 8fc20000 lw v0,0(s8) +80037f28: 8fc30004 lw v1,4(s8) +80037f2c: 00000000 nop +80037f30: 00621021 addu v0,v1,v0 +80037f34: 90420000 lbu v0,0(v0) +80037f38: 00000000 nop +80037f3c: 00401821 move v1,v0 +80037f40: 8fc20014 lw v0,20(s8) +80037f44: 00000000 nop +80037f48: 304200ff andi v0,v0,0xff +80037f4c: 10620005 beq v1,v0,80037f64 <memrchr+0x9c> +80037f50: 00000000 nop +80037f54: 8fc20000 lw v0,0(s8) +80037f58: 00000000 nop +80037f5c: 0441ffed bgez v0,80037f14 <memrchr+0x4c> +80037f60: 00000000 nop + + return (i>=0)?&p[i]:NULL; +80037f64: 8fc20000 lw v0,0(s8) +80037f68: 00000000 nop +80037f6c: 04400007 bltz v0,80037f8c <memrchr+0xc4> +80037f70: 00000000 nop +80037f74: 8fc20000 lw v0,0(s8) +80037f78: 8fc30004 lw v1,4(s8) +80037f7c: 00000000 nop +80037f80: 00621021 addu v0,v1,v0 +80037f84: 10000002 b 80037f90 <memrchr+0xc8> +80037f88: 00000000 nop +80037f8c: 00001021 move v0,zero +} +80037f90: 03c0e821 move sp,s8 +80037f94: 8fbe000c lw s8,12(sp) +80037f98: 27bd0010 addiu sp,sp,16 +80037f9c: 03e00008 jr ra +80037fa0: 00000000 nop + +80037fa4 <stpcpy>: + +char *stpcpy(char *dst, const char *src) +{ +80037fa4: 27bdfff8 addiu sp,sp,-8 +80037fa8: afbe0004 sw s8,4(sp) +80037fac: 03a0f021 move s8,sp +80037fb0: afc40008 sw a0,8(s8) +80037fb4: afc5000c sw a1,12(s8) + do + { + *(dst++) = *src; +80037fb8: 8fc20008 lw v0,8(s8) +80037fbc: 00000000 nop +80037fc0: 24430001 addiu v1,v0,1 +80037fc4: afc30008 sw v1,8(s8) +80037fc8: 8fc3000c lw v1,12(s8) +80037fcc: 00000000 nop +80037fd0: 80630000 lb v1,0(v1) +80037fd4: 00000000 nop +80037fd8: a0430000 sb v1,0(v0) + }while(*(src++)); +80037fdc: 8fc2000c lw v0,12(s8) +80037fe0: 00000000 nop +80037fe4: 24430001 addiu v1,v0,1 +80037fe8: afc3000c sw v1,12(s8) +80037fec: 80420000 lb v0,0(v0) +80037ff0: 00000000 nop +80037ff4: 1440fff0 bnez v0,80037fb8 <stpcpy+0x14> +80037ff8: 00000000 nop + + return dst-1; +80037ffc: 8fc20008 lw v0,8(s8) +80038000: 00000000 nop +80038004: 2442ffff addiu v0,v0,-1 +} +80038008: 03c0e821 move sp,s8 +8003800c: 8fbe0004 lw s8,4(sp) +80038010: 27bd0008 addiu sp,sp,8 +80038014: 03e00008 jr ra +80038018: 00000000 nop + +8003801c <stpncpy>: + +char *stpncpy(char *dst, const char *src, int len) +{ +8003801c: 27bdfff0 addiu sp,sp,-16 +80038020: afbe000c sw s8,12(sp) +80038024: 03a0f021 move s8,sp +80038028: afc40010 sw a0,16(s8) +8003802c: afc50014 sw a1,20(s8) +80038030: afc60018 sw a2,24(s8) + int c = 0; +80038034: afc00000 sw zero,0(s8) + + do + { + if(c < len) +80038038: 8fc30000 lw v1,0(s8) +8003803c: 8fc20018 lw v0,24(s8) +80038040: 00000000 nop +80038044: 0062102a slt v0,v1,v0 +80038048: 1040000a beqz v0,80038074 <stpncpy+0x58> +8003804c: 00000000 nop + *(dst++) = *src; +80038050: 8fc20010 lw v0,16(s8) +80038054: 00000000 nop +80038058: 24430001 addiu v1,v0,1 +8003805c: afc30010 sw v1,16(s8) +80038060: 8fc30014 lw v1,20(s8) +80038064: 00000000 nop +80038068: 80630000 lb v1,0(v1) +8003806c: 00000000 nop +80038070: a0430000 sb v1,0(v0) + + c++; +80038074: 8fc20000 lw v0,0(s8) +80038078: 00000000 nop +8003807c: 24420001 addiu v0,v0,1 +80038080: afc20000 sw v0,0(s8) + }while(*(src++) && c < len); +80038084: 8fc20014 lw v0,20(s8) +80038088: 00000000 nop +8003808c: 24430001 addiu v1,v0,1 +80038090: afc30014 sw v1,20(s8) +80038094: 80420000 lb v0,0(v0) +80038098: 00000000 nop +8003809c: 10400007 beqz v0,800380bc <stpncpy+0xa0> +800380a0: 00000000 nop +800380a4: 8fc30000 lw v1,0(s8) +800380a8: 8fc20018 lw v0,24(s8) +800380ac: 00000000 nop +800380b0: 0062102a slt v0,v1,v0 +800380b4: 1440ffe0 bnez v0,80038038 <stpncpy+0x1c> +800380b8: 00000000 nop + + return dst-1; +800380bc: 8fc20010 lw v0,16(s8) +800380c0: 00000000 nop +800380c4: 2442ffff addiu v0,v0,-1 +} +800380c8: 03c0e821 move sp,s8 +800380cc: 8fbe000c lw s8,12(sp) +800380d0: 27bd0010 addiu sp,sp,16 +800380d4: 03e00008 jr ra +800380d8: 00000000 nop + +800380dc <strcasestr>: + +char *strcasestr(const char *big, const char *little) +{ +800380dc: 27bdffd0 addiu sp,sp,-48 +800380e0: afbf002c sw ra,44(sp) +800380e4: afbe0028 sw s8,40(sp) +800380e8: afb00024 sw s0,36(sp) +800380ec: 03a0f021 move s8,sp +800380f0: afc40030 sw a0,48(s8) +800380f4: afc50034 sw a1,52(s8) + while(*big) +800380f8: 10000038 b 800381dc <strcasestr+0x100> +800380fc: 00000000 nop + { + const char *pbig = big; +80038100: 8fc20030 lw v0,48(s8) +80038104: 00000000 nop +80038108: afc20010 sw v0,16(s8) + const char *plittle = little; +8003810c: 8fc20034 lw v0,52(s8) +80038110: 00000000 nop +80038114: afc20014 sw v0,20(s8) + int ok = 1; +80038118: 24020001 li v0,1 +8003811c: afc20018 sw v0,24(s8) + + while(*pbig) +80038120: 1000001d b 80038198 <strcasestr+0xbc> +80038124: 00000000 nop + { + if(tolower(*pbig) != tolower(*plittle)) +80038128: 8fc20010 lw v0,16(s8) +8003812c: 00000000 nop +80038130: 80420000 lb v0,0(v0) +80038134: 00000000 nop +80038138: 00402021 move a0,v0 +8003813c: 0c00a5eb jal 800297ac <tolower> +80038140: 00000000 nop +80038144: 00408021 move s0,v0 +80038148: 8fc20014 lw v0,20(s8) +8003814c: 00000000 nop +80038150: 80420000 lb v0,0(v0) +80038154: 00000000 nop +80038158: 00402021 move a0,v0 +8003815c: 0c00a5eb jal 800297ac <tolower> +80038160: 00000000 nop +80038164: 12020004 beq s0,v0,80038178 <strcasestr+0x9c> +80038168: 00000000 nop + { + ok = 0; +8003816c: afc00018 sw zero,24(s8) + break; +80038170: 1000000f b 800381b0 <strcasestr+0xd4> +80038174: 00000000 nop + } + + pbig++; +80038178: 8fc20010 lw v0,16(s8) +8003817c: 00000000 nop +80038180: 24420001 addiu v0,v0,1 +80038184: afc20010 sw v0,16(s8) + plittle++; +80038188: 8fc20014 lw v0,20(s8) +8003818c: 00000000 nop +80038190: 24420001 addiu v0,v0,1 +80038194: afc20014 sw v0,20(s8) + { + const char *pbig = big; + const char *plittle = little; + int ok = 1; + + while(*pbig) +80038198: 8fc20010 lw v0,16(s8) +8003819c: 00000000 nop +800381a0: 80420000 lb v0,0(v0) +800381a4: 00000000 nop +800381a8: 1440ffdf bnez v0,80038128 <strcasestr+0x4c> +800381ac: 00000000 nop + + pbig++; + plittle++; + } + + if(ok) +800381b0: 8fc20018 lw v0,24(s8) +800381b4: 00000000 nop +800381b8: 10400004 beqz v0,800381cc <strcasestr+0xf0> +800381bc: 00000000 nop + return (char*)big; +800381c0: 8fc20030 lw v0,48(s8) +800381c4: 1000000c b 800381f8 <strcasestr+0x11c> +800381c8: 00000000 nop + + big++; +800381cc: 8fc20030 lw v0,48(s8) +800381d0: 00000000 nop +800381d4: 24420001 addiu v0,v0,1 +800381d8: afc20030 sw v0,48(s8) + return dst-1; +} + +char *strcasestr(const char *big, const char *little) +{ + while(*big) +800381dc: 8fc20030 lw v0,48(s8) +800381e0: 00000000 nop +800381e4: 80420000 lb v0,0(v0) +800381e8: 00000000 nop +800381ec: 1440ffc4 bnez v0,80038100 <strcasestr+0x24> +800381f0: 00000000 nop + return (char*)big; + + big++; + } + + return NULL; +800381f4: 00001021 move v0,zero +} +800381f8: 03c0e821 move sp,s8 +800381fc: 8fbf002c lw ra,44(sp) +80038200: 8fbe0028 lw s8,40(sp) +80038204: 8fb00024 lw s0,36(sp) +80038208: 27bd0030 addiu sp,sp,48 +8003820c: 03e00008 jr ra +80038210: 00000000 nop + +80038214 <strlcpy>: + +int strlcpy(char *dst, const char *src, size_t size) +{ +80038214: 27bdffe0 addiu sp,sp,-32 +80038218: afbf001c sw ra,28(sp) +8003821c: afbe0018 sw s8,24(sp) +80038220: 03a0f021 move s8,sp +80038224: afc40020 sw a0,32(s8) +80038228: afc50024 sw a1,36(s8) +8003822c: afc60028 sw a2,40(s8) + char *src_end = memchr((void*)src, '\0', size); +80038230: 8fc60028 lw a2,40(s8) +80038234: 00002821 move a1,zero +80038238: 8fc40024 lw a0,36(s8) +8003823c: 0c00d83b jal 800360ec <memchr> +80038240: 00000000 nop +80038244: afc20010 sw v0,16(s8) + + if(src_end == NULL) +80038248: 8fc20010 lw v0,16(s8) +8003824c: 00000000 nop +80038250: 14400004 bnez v0,80038264 <strlcpy+0x50> +80038254: 00000000 nop + return 0; +80038258: 00001021 move v0,zero +8003825c: 1000000e b 80038298 <strlcpy+0x84> +80038260: 00000000 nop + + memcpy(dst, src, src_end - src); +80038264: 8fc30010 lw v1,16(s8) +80038268: 8fc20024 lw v0,36(s8) +8003826c: 00000000 nop +80038270: 00621023 subu v0,v1,v0 +80038274: 00403021 move a2,v0 +80038278: 8fc50024 lw a1,36(s8) +8003827c: 8fc40020 lw a0,32(s8) +80038280: 0c00d75e jal 80035d78 <memcpy> +80038284: 00000000 nop + + return (src_end - src); +80038288: 8fc30010 lw v1,16(s8) +8003828c: 8fc20024 lw v0,36(s8) +80038290: 00000000 nop +80038294: 00621023 subu v0,v1,v0 +} +80038298: 03c0e821 move sp,s8 +8003829c: 8fbf001c lw ra,28(sp) +800382a0: 8fbe0018 lw s8,24(sp) +800382a4: 27bd0020 addiu sp,sp,32 +800382a8: 03e00008 jr ra +800382ac: 00000000 nop + +800382b0 <strlcat>: + +int strlcat(char *dst, const char *src, size_t size) +{ +800382b0: 27bdffd8 addiu sp,sp,-40 +800382b4: afbf0024 sw ra,36(sp) +800382b8: afbe0020 sw s8,32(sp) +800382bc: 03a0f021 move s8,sp +800382c0: afc40028 sw a0,40(s8) +800382c4: afc5002c sw a1,44(s8) +800382c8: afc60030 sw a2,48(s8) + int dstl = strlen(dst); +800382cc: 8fc40028 lw a0,40(s8) +800382d0: 0c00d8af jal 800362bc <strlen> +800382d4: 00000000 nop +800382d8: afc20014 sw v0,20(s8) + char *q = dst + dstl; +800382dc: 8fc20014 lw v0,20(s8) +800382e0: 8fc30028 lw v1,40(s8) +800382e4: 00000000 nop +800382e8: 00621021 addu v0,v1,v0 +800382ec: afc20018 sw v0,24(s8) + int real_size = size; +800382f0: 8fc20030 lw v0,48(s8) +800382f4: 00000000 nop +800382f8: afc20010 sw v0,16(s8) + + if(memchr((void*)src, '\0', size)) +800382fc: 8fc60030 lw a2,48(s8) +80038300: 00002821 move a1,zero +80038304: 8fc4002c lw a0,44(s8) +80038308: 0c00d83b jal 800360ec <memchr> +8003830c: 00000000 nop +80038310: 10400005 beqz v0,80038328 <strlcat+0x78> +80038314: 00000000 nop + real_size = strlen(src); +80038318: 8fc4002c lw a0,44(s8) +8003831c: 0c00d8af jal 800362bc <strlen> +80038320: 00000000 nop +80038324: afc20010 sw v0,16(s8) + + memcpy(q, src, real_size-dstl-1); +80038328: 8fc30010 lw v1,16(s8) +8003832c: 8fc20014 lw v0,20(s8) +80038330: 00000000 nop +80038334: 00621023 subu v0,v1,v0 +80038338: 2442ffff addiu v0,v0,-1 +8003833c: 00403021 move a2,v0 +80038340: 8fc5002c lw a1,44(s8) +80038344: 8fc40018 lw a0,24(s8) +80038348: 0c00d75e jal 80035d78 <memcpy> +8003834c: 00000000 nop + if(real_size != size) q[real_size-dstl-1] = '\0'; +80038350: 8fc30010 lw v1,16(s8) +80038354: 8fc20030 lw v0,48(s8) +80038358: 00000000 nop +8003835c: 1062000a beq v1,v0,80038388 <strlcat+0xd8> +80038360: 00000000 nop +80038364: 8fc30010 lw v1,16(s8) +80038368: 8fc20014 lw v0,20(s8) +8003836c: 00000000 nop +80038370: 00621023 subu v0,v1,v0 +80038374: 2442ffff addiu v0,v0,-1 +80038378: 8fc30018 lw v1,24(s8) +8003837c: 00000000 nop +80038380: 00621021 addu v0,v1,v0 +80038384: a0400000 sb zero,0(v0) + + return size-dstl; +80038388: 8fc20014 lw v0,20(s8) +8003838c: 8fc30030 lw v1,48(s8) +80038390: 00000000 nop +80038394: 00621023 subu v0,v1,v0 +} +80038398: 03c0e821 move sp,s8 +8003839c: 8fbf0024 lw ra,36(sp) +800383a0: 8fbe0020 lw s8,32(sp) +800383a4: 27bd0028 addiu sp,sp,40 +800383a8: 03e00008 jr ra +800383ac: 00000000 nop + +800383b0 <memmem>: + +void *memmem(const void *big, size_t big_len, const void *little, + size_t little_len) +{ +800383b0: 27bdffe0 addiu sp,sp,-32 +800383b4: afbe001c sw s8,28(sp) +800383b8: 03a0f021 move s8,sp +800383bc: afc40020 sw a0,32(s8) +800383c0: afc50024 sw a1,36(s8) +800383c4: afc60028 sw a2,40(s8) +800383c8: afc7002c sw a3,44(s8) + int i, j, l; + unsigned char *bigp = (unsigned char*)big; +800383cc: 8fc20020 lw v0,32(s8) +800383d0: 00000000 nop +800383d4: afc20008 sw v0,8(s8) + unsigned char *littlep = (unsigned char*)little; +800383d8: 8fc20028 lw v0,40(s8) +800383dc: 00000000 nop +800383e0: afc2000c sw v0,12(s8) + + for(i = 0, l = (int)(big_len - little_len); i <= l; i++, bigp++) +800383e4: afc00000 sw zero,0(s8) +800383e8: 8fc30024 lw v1,36(s8) +800383ec: 8fc2002c lw v0,44(s8) +800383f0: 00000000 nop +800383f4: 00621023 subu v0,v1,v0 +800383f8: afc20010 sw v0,16(s8) +800383fc: 1000002e b 800384b8 <memmem+0x108> +80038400: 00000000 nop + { + for(j = 0; j < little_len; j++) +80038404: afc00004 sw zero,4(s8) +80038408: 10000012 b 80038454 <memmem+0xa4> +8003840c: 00000000 nop + { + if(littlep[j] != bigp[j]) +80038410: 8fc20004 lw v0,4(s8) +80038414: 8fc3000c lw v1,12(s8) +80038418: 00000000 nop +8003841c: 00621021 addu v0,v1,v0 +80038420: 90430000 lbu v1,0(v0) +80038424: 8fc20004 lw v0,4(s8) +80038428: 8fc40008 lw a0,8(s8) +8003842c: 00000000 nop +80038430: 00821021 addu v0,a0,v0 +80038434: 90420000 lbu v0,0(v0) +80038438: 00000000 nop +8003843c: 1462000d bne v1,v0,80038474 <memmem+0xc4> +80038440: 00000000 nop + unsigned char *bigp = (unsigned char*)big; + unsigned char *littlep = (unsigned char*)little; + + for(i = 0, l = (int)(big_len - little_len); i <= l; i++, bigp++) + { + for(j = 0; j < little_len; j++) +80038444: 8fc20004 lw v0,4(s8) +80038448: 00000000 nop +8003844c: 24420001 addiu v0,v0,1 +80038450: afc20004 sw v0,4(s8) +80038454: 8fc30004 lw v1,4(s8) +80038458: 8fc2002c lw v0,44(s8) +8003845c: 00000000 nop +80038460: 0062102b sltu v0,v1,v0 +80038464: 1440ffea bnez v0,80038410 <memmem+0x60> +80038468: 00000000 nop +8003846c: 10000002 b 80038478 <memmem+0xc8> +80038470: 00000000 nop + { + if(littlep[j] != bigp[j]) + break; +80038474: 00000000 nop + } + + if(j == little_len) +80038478: 8fc30004 lw v1,4(s8) +8003847c: 8fc2002c lw v0,44(s8) +80038480: 00000000 nop +80038484: 14620004 bne v1,v0,80038498 <memmem+0xe8> +80038488: 00000000 nop + return bigp; +8003848c: 8fc20008 lw v0,8(s8) +80038490: 10000010 b 800384d4 <memmem+0x124> +80038494: 00000000 nop +{ + int i, j, l; + unsigned char *bigp = (unsigned char*)big; + unsigned char *littlep = (unsigned char*)little; + + for(i = 0, l = (int)(big_len - little_len); i <= l; i++, bigp++) +80038498: 8fc20000 lw v0,0(s8) +8003849c: 00000000 nop +800384a0: 24420001 addiu v0,v0,1 +800384a4: afc20000 sw v0,0(s8) +800384a8: 8fc20008 lw v0,8(s8) +800384ac: 00000000 nop +800384b0: 24420001 addiu v0,v0,1 +800384b4: afc20008 sw v0,8(s8) +800384b8: 8fc30000 lw v1,0(s8) +800384bc: 8fc20010 lw v0,16(s8) +800384c0: 00000000 nop +800384c4: 0043102a slt v0,v0,v1 +800384c8: 1040ffce beqz v0,80038404 <memmem+0x54> +800384cc: 00000000 nop + + if(j == little_len) + return bigp; + } + + return NULL; +800384d0: 00001021 move v0,zero +} +800384d4: 03c0e821 move sp,s8 +800384d8: 8fbe001c lw s8,28(sp) +800384dc: 27bd0020 addiu sp,sp,32 +800384e0: 03e00008 jr ra +800384e4: 00000000 nop + +800384e8 <get_arg_in_size>: + SPRINTF_SIZE_LONG, + SPRINTF_SIZE_LONG_LONG, +}; + +static unsigned int get_arg_in_size(int size, unsigned long long *arg, unsigned int check_sign) +{ +800384e8: 27bdffd8 addiu sp,sp,-40 +800384ec: afbe0024 sw s8,36(sp) +800384f0: afb50020 sw s5,32(sp) +800384f4: afb4001c sw s4,28(sp) +800384f8: afb30018 sw s3,24(sp) +800384fc: afb20014 sw s2,20(sp) +80038500: afb10010 sw s1,16(sp) +80038504: afb0000c sw s0,12(sp) +80038508: 03a0f021 move s8,sp +8003850c: afc40028 sw a0,40(s8) +80038510: afc5002c sw a1,44(s8) +80038514: afc60030 sw a2,48(s8) + int s = 0; +80038518: afc00000 sw zero,0(s8) + + switch(size) +8003851c: 8fc40028 lw a0,40(s8) +80038520: 00000000 nop +80038524: 2c840005 sltiu a0,a0,5 +80038528: 108000dc beqz a0,8003889c <get_arg_in_size+0x3b4> +8003852c: 00000000 nop +80038530: 8fc40028 lw a0,40(s8) +80038534: 00000000 nop +80038538: 00042880 sll a1,a0,0x2 +8003853c: 3c048004 lui a0,0x8004 +80038540: 2484feb4 addiu a0,a0,-332 +80038544: 00a42021 addu a0,a1,a0 +80038548: 8c840000 lw a0,0(a0) +8003854c: 00000000 nop +80038550: 00800008 jr a0 +80038554: 00000000 nop + { + case SPRINTF_SIZE_CHAR: + *arg &= 0xff; +80038558: 8fc2002c lw v0,44(s8) +8003855c: 00000000 nop +80038560: 8c430004 lw v1,4(v0) +80038564: 8c420000 lw v0,0(v0) +80038568: 00000000 nop +8003856c: 305400ff andi s4,v0,0xff +80038570: 30750000 andi s5,v1,0x0 +80038574: 8fc2002c lw v0,44(s8) +80038578: 00000000 nop +8003857c: ac540000 sw s4,0(v0) +80038580: ac550004 sw s5,4(v0) + + if(check_sign) +80038584: 8fc20030 lw v0,48(s8) +80038588: 00000000 nop +8003858c: 104000b9 beqz v0,80038874 <get_arg_in_size+0x38c> +80038590: 00000000 nop + { + if(*arg & (1<<7)) +80038594: 8fc2002c lw v0,44(s8) +80038598: 00000000 nop +8003859c: 8c430004 lw v1,4(v0) +800385a0: 8c420000 lw v0,0(v0) +800385a4: 00000000 nop +800385a8: 304a0080 andi t2,v0,0x80 +800385ac: 306b0000 andi t3,v1,0x0 +800385b0: 01401021 move v0,t2 +800385b4: 004b1025 or v0,v0,t3 +800385b8: 104000ae beqz v0,80038874 <get_arg_in_size+0x38c> +800385bc: 00000000 nop + { + *arg |= 0xffffff00; +800385c0: 8fc2002c lw v0,44(s8) +800385c4: 00000000 nop +800385c8: 8c430004 lw v1,4(v0) +800385cc: 8c420000 lw v0,0(v0) +800385d0: 2404ff00 li a0,-256 +800385d4: 00449025 or s2,v0,a0 +800385d8: 34730000 ori s3,v1,0x0 +800385dc: 8fc2002c lw v0,44(s8) +800385e0: 00000000 nop +800385e4: ac520000 sw s2,0(v0) +800385e8: ac530004 sw s3,4(v0) + *arg = ~(*arg - 1); +800385ec: 8fc2002c lw v0,44(s8) +800385f0: 00000000 nop +800385f4: 8c460000 lw a2,0(v0) +800385f8: 8c470004 lw a3,4(v0) +800385fc: 00002021 move a0,zero +80038600: 00002821 move a1,zero +80038604: 00861023 subu v0,a0,a2 +80038608: 0082402b sltu t0,a0,v0 +8003860c: 00a71823 subu v1,a1,a3 +80038610: 00682023 subu a0,v1,t0 +80038614: 00801821 move v1,a0 +80038618: 8fc4002c lw a0,44(s8) +8003861c: 00000000 nop +80038620: ac820000 sw v0,0(a0) +80038624: ac830004 sw v1,4(a0) + s = 1; +80038628: 24020001 li v0,1 +8003862c: afc20000 sw v0,0(s8) + } + } + break; +80038630: 10000090 b 80038874 <get_arg_in_size+0x38c> +80038634: 00000000 nop + case SPRINTF_SIZE_SHORT: + *arg &= 0xffff; +80038638: 8fc2002c lw v0,44(s8) +8003863c: 00000000 nop +80038640: 8c430004 lw v1,4(v0) +80038644: 8c420000 lw v0,0(v0) +80038648: 00000000 nop +8003864c: 3050ffff andi s0,v0,0xffff +80038650: 30710000 andi s1,v1,0x0 +80038654: 8fc2002c lw v0,44(s8) +80038658: 00000000 nop +8003865c: ac500000 sw s0,0(v0) +80038660: ac510004 sw s1,4(v0) + + if(check_sign) +80038664: 8fc20030 lw v0,48(s8) +80038668: 00000000 nop +8003866c: 10400084 beqz v0,80038880 <get_arg_in_size+0x398> +80038670: 00000000 nop + { + if(*arg & (1<<15)) +80038674: 8fc2002c lw v0,44(s8) +80038678: 00000000 nop +8003867c: 8c430004 lw v1,4(v0) +80038680: 8c420000 lw v0,0(v0) +80038684: 00000000 nop +80038688: 30488000 andi t0,v0,0x8000 +8003868c: 30690000 andi t1,v1,0x0 +80038690: 01001021 move v0,t0 +80038694: 00491025 or v0,v0,t1 +80038698: 10400079 beqz v0,80038880 <get_arg_in_size+0x398> +8003869c: 00000000 nop + { + *arg |= 0xffff0000; +800386a0: 8fc2002c lw v0,44(s8) +800386a4: 00000000 nop +800386a8: 8c430004 lw v1,4(v0) +800386ac: 8c420000 lw v0,0(v0) +800386b0: 3c04ffff lui a0,0xffff +800386b4: 0044c025 or t8,v0,a0 +800386b8: 34790000 ori t9,v1,0x0 +800386bc: 8fc2002c lw v0,44(s8) +800386c0: 00000000 nop +800386c4: ac580000 sw t8,0(v0) +800386c8: ac590004 sw t9,4(v0) + *arg = ~(*arg - 1); +800386cc: 8fc2002c lw v0,44(s8) +800386d0: 00000000 nop +800386d4: 8c460000 lw a2,0(v0) +800386d8: 8c470004 lw a3,4(v0) +800386dc: 00002021 move a0,zero +800386e0: 00002821 move a1,zero +800386e4: 00861023 subu v0,a0,a2 +800386e8: 0082402b sltu t0,a0,v0 +800386ec: 00a71823 subu v1,a1,a3 +800386f0: 00682023 subu a0,v1,t0 +800386f4: 00801821 move v1,a0 +800386f8: 8fc4002c lw a0,44(s8) +800386fc: 00000000 nop +80038700: ac820000 sw v0,0(a0) +80038704: ac830004 sw v1,4(a0) + s = 1; +80038708: 24020001 li v0,1 +8003870c: afc20000 sw v0,0(s8) + } + } + break; +80038710: 1000005b b 80038880 <get_arg_in_size+0x398> +80038714: 00000000 nop + +// sizeof(long) == sizeof(int) on 32bit, so this will suffice for the psx + + case SPRINTF_SIZE_INT: + case SPRINTF_SIZE_LONG: + *arg &= 0xffffffff; +80038718: 8fc4002c lw a0,44(s8) +8003871c: 00000000 nop +80038720: 8c850004 lw a1,4(a0) +80038724: 8c840000 lw a0,0(a0) +80038728: 2406ffff li a2,-1 +8003872c: 00867024 and t6,a0,a2 +80038730: 30af0000 andi t7,a1,0x0 +80038734: 8fc4002c lw a0,44(s8) +80038738: 00000000 nop +8003873c: ac8e0000 sw t6,0(a0) +80038740: ac8f0004 sw t7,4(a0) + + if(check_sign) +80038744: 8fc40030 lw a0,48(s8) +80038748: 00000000 nop +8003874c: 1080004f beqz a0,8003888c <get_arg_in_size+0x3a4> +80038750: 00000000 nop + { + if(*arg & (1<<31)) +80038754: 8fc4002c lw a0,44(s8) +80038758: 00000000 nop +8003875c: 8c850004 lw a1,4(a0) +80038760: 8c840000 lw a0,0(a0) +80038764: 3c068000 lui a2,0x8000 +80038768: 00861024 and v0,a0,a2 +8003876c: 2406ffff li a2,-1 +80038770: 00a61824 and v1,a1,a2 +80038774: 00402021 move a0,v0 +80038778: 00832025 or a0,a0,v1 +8003877c: 10800043 beqz a0,8003888c <get_arg_in_size+0x3a4> +80038780: 00000000 nop + { + *arg |= (long long)0xffffffff00000000; +80038784: 8fc2002c lw v0,44(s8) +80038788: 00000000 nop +8003878c: 8c430004 lw v1,4(v0) +80038790: 8c420000 lw v0,0(v0) +80038794: 00000000 nop +80038798: 344c0000 ori t4,v0,0x0 +8003879c: 2404ffff li a0,-1 +800387a0: 00646825 or t5,v1,a0 +800387a4: 8fc2002c lw v0,44(s8) +800387a8: 00000000 nop +800387ac: ac4c0000 sw t4,0(v0) +800387b0: ac4d0004 sw t5,4(v0) + *arg = ~(*arg - 1); +800387b4: 8fc2002c lw v0,44(s8) +800387b8: 00000000 nop +800387bc: 8c460000 lw a2,0(v0) +800387c0: 8c470004 lw a3,4(v0) +800387c4: 00002021 move a0,zero +800387c8: 00002821 move a1,zero +800387cc: 00861023 subu v0,a0,a2 +800387d0: 0082402b sltu t0,a0,v0 +800387d4: 00a71823 subu v1,a1,a3 +800387d8: 00682023 subu a0,v1,t0 +800387dc: 00801821 move v1,a0 +800387e0: 8fc4002c lw a0,44(s8) +800387e4: 00000000 nop +800387e8: ac820000 sw v0,0(a0) +800387ec: ac830004 sw v1,4(a0) + s = 1; +800387f0: 24020001 li v0,1 +800387f4: afc20000 sw v0,0(s8) + } + } + break; +800387f8: 10000024 b 8003888c <get_arg_in_size+0x3a4> +800387fc: 00000000 nop + + case SPRINTF_SIZE_LONG_LONG: + if(check_sign) +80038800: 8fc20030 lw v0,48(s8) +80038804: 00000000 nop +80038808: 10400023 beqz v0,80038898 <get_arg_in_size+0x3b0> +8003880c: 00000000 nop + { + if(*arg & ((long long)1<<63)) +80038810: 8fc2002c lw v0,44(s8) +80038814: 00000000 nop +80038818: 8c430004 lw v1,4(v0) +8003881c: 8c420000 lw v0,0(v0) +80038820: 0461001d bgez v1,80038898 <get_arg_in_size+0x3b0> +80038824: 00000000 nop + { + *arg = ~(*arg - 1); +80038828: 8fc2002c lw v0,44(s8) +8003882c: 00000000 nop +80038830: 8c460000 lw a2,0(v0) +80038834: 8c470004 lw a3,4(v0) +80038838: 00002021 move a0,zero +8003883c: 00002821 move a1,zero +80038840: 00861023 subu v0,a0,a2 +80038844: 0082402b sltu t0,a0,v0 +80038848: 00a71823 subu v1,a1,a3 +8003884c: 00682023 subu a0,v1,t0 +80038850: 00801821 move v1,a0 +80038854: 8fc4002c lw a0,44(s8) +80038858: 00000000 nop +8003885c: ac820000 sw v0,0(a0) +80038860: ac830004 sw v1,4(a0) + s = 1; +80038864: 24020001 li v0,1 +80038868: afc20000 sw v0,0(s8) + } + } + break; +8003886c: 1000000a b 80038898 <get_arg_in_size+0x3b0> +80038870: 00000000 nop + *arg |= 0xffffff00; + *arg = ~(*arg - 1); + s = 1; + } + } + break; +80038874: 00000000 nop +80038878: 10000008 b 8003889c <get_arg_in_size+0x3b4> +8003887c: 00000000 nop + *arg |= 0xffff0000; + *arg = ~(*arg - 1); + s = 1; + } + } + break; +80038880: 00000000 nop +80038884: 10000005 b 8003889c <get_arg_in_size+0x3b4> +80038888: 00000000 nop + *arg |= (long long)0xffffffff00000000; + *arg = ~(*arg - 1); + s = 1; + } + } + break; +8003888c: 00000000 nop +80038890: 10000002 b 8003889c <get_arg_in_size+0x3b4> +80038894: 00000000 nop + { + *arg = ~(*arg - 1); + s = 1; + } + } + break; +80038898: 00000000 nop + } + + return s; +8003889c: 8fc20000 lw v0,0(s8) +} +800388a0: 03c0e821 move sp,s8 +800388a4: 8fbe0024 lw s8,36(sp) +800388a8: 8fb50020 lw s5,32(sp) +800388ac: 8fb4001c lw s4,28(sp) +800388b0: 8fb30018 lw s3,24(sp) +800388b4: 8fb20014 lw s2,20(sp) +800388b8: 8fb10010 lw s1,16(sp) +800388bc: 8fb0000c lw s0,12(sp) +800388c0: 27bd0028 addiu sp,sp,40 +800388c4: 03e00008 jr ra +800388c8: 00000000 nop + +800388cc <libc_ulltoa>: + +static int libc_ulltoa(unsigned long long i, char *dst, int n, int nopad) +{ +800388cc: 27bdffb0 addiu sp,sp,-80 +800388d0: afbf004c sw ra,76(sp) +800388d4: afbe0048 sw s8,72(sp) +800388d8: afb30044 sw s3,68(sp) +800388dc: afb20040 sw s2,64(sp) +800388e0: afb1003c sw s1,60(sp) +800388e4: afb00038 sw s0,56(sp) +800388e8: 03a0f021 move s8,sp +800388ec: afc40050 sw a0,80(s8) +800388f0: afc50054 sw a1,84(s8) +800388f4: afc60058 sw a2,88(s8) +800388f8: afc7005c sw a3,92(s8) + int x, y; + unsigned long long a, b; + int empty_digit = 1; +800388fc: 24020001 li v0,1 +80038900: afc20020 sw v0,32(s8) + int sp=0; +80038904: afc00024 sw zero,36(s8) + int n2=0; +80038908: afc00028 sw zero,40(s8) + + if(n<=0) +8003890c: 8fc2005c lw v0,92(s8) +80038910: 00000000 nop +80038914: 1c400004 bgtz v0,80038928 <libc_ulltoa+0x5c> +80038918: 00000000 nop + return 0; +8003891c: 00001021 move v0,zero +80038920: 10000088 b 80038b44 <libc_ulltoa+0x278> +80038924: 00000000 nop + + for(x=18;x>=0;x--) +80038928: 24020012 li v0,18 +8003892c: afc20010 sw v0,16(s8) +80038930: 1000007a b 80038b1c <libc_ulltoa+0x250> +80038934: 00000000 nop + { + a = 1; +80038938: 24020001 li v0,1 +8003893c: 00001821 move v1,zero +80038940: afc20018 sw v0,24(s8) +80038944: afc3001c sw v1,28(s8) + for(y = 0; y<x; y++) +80038948: afc00014 sw zero,20(s8) +8003894c: 10000018 b 800389b0 <libc_ulltoa+0xe4> +80038950: 00000000 nop + a *= 10; +80038954: 8fc20018 lw v0,24(s8) +80038958: 8fc3001c lw v1,28(s8) +8003895c: 000227c2 srl a0,v0,0x1f +80038960: 00039840 sll s3,v1,0x1 +80038964: 00939825 or s3,a0,s3 +80038968: 00029040 sll s2,v0,0x1 +8003896c: 02401021 move v0,s2 +80038970: 02601821 move v1,s3 +80038974: 00022782 srl a0,v0,0x1e +80038978: 00038880 sll s1,v1,0x2 +8003897c: 00918825 or s1,a0,s1 +80038980: 00028080 sll s0,v0,0x2 +80038984: 00502021 addu a0,v0,s0 +80038988: 0082302b sltu a2,a0,v0 +8003898c: 00712821 addu a1,v1,s1 +80038990: 00c51021 addu v0,a2,a1 +80038994: 00402821 move a1,v0 +80038998: afc40018 sw a0,24(s8) +8003899c: afc5001c sw a1,28(s8) + return 0; + + for(x=18;x>=0;x--) + { + a = 1; + for(y = 0; y<x; y++) +800389a0: 8fc20014 lw v0,20(s8) +800389a4: 00000000 nop +800389a8: 24420001 addiu v0,v0,1 +800389ac: afc20014 sw v0,20(s8) +800389b0: 8fc30014 lw v1,20(s8) +800389b4: 8fc20010 lw v0,16(s8) +800389b8: 00000000 nop +800389bc: 0062102a slt v0,v1,v0 +800389c0: 1440ffe4 bnez v0,80038954 <libc_ulltoa+0x88> +800389c4: 00000000 nop + a *= 10; + + b = (i/a); +800389c8: 8fc60018 lw a2,24(s8) +800389cc: 8fc7001c lw a3,28(s8) +800389d0: 8fc40050 lw a0,80(s8) +800389d4: 8fc50054 lw a1,84(s8) +800389d8: 0c00f0ae jal 8003c2b8 <__udivdi3> +800389dc: 00000000 nop +800389e0: afc20030 sw v0,48(s8) +800389e4: afc30034 sw v1,52(s8) + + if(b>=1) +800389e8: 8fc20030 lw v0,48(s8) +800389ec: 8fc30034 lw v1,52(s8) +800389f0: 00000000 nop +800389f4: 00431025 or v0,v0,v1 +800389f8: 10400002 beqz v0,80038a04 <libc_ulltoa+0x138> +800389fc: 00000000 nop + empty_digit = 0; +80038a00: afc00020 sw zero,32(s8) + + if(empty_digit == 0 || x == 0 || nopad == 1) +80038a04: 8fc20020 lw v0,32(s8) +80038a08: 00000000 nop +80038a0c: 10400009 beqz v0,80038a34 <libc_ulltoa+0x168> +80038a10: 00000000 nop +80038a14: 8fc20010 lw v0,16(s8) +80038a18: 00000000 nop +80038a1c: 10400005 beqz v0,80038a34 <libc_ulltoa+0x168> +80038a20: 00000000 nop +80038a24: 8fc30060 lw v1,96(s8) +80038a28: 24020001 li v0,1 +80038a2c: 14620037 bne v1,v0,80038b0c <libc_ulltoa+0x240> +80038a30: 00000000 nop + { + i -= b*a; +80038a34: 8fc30034 lw v1,52(s8) +80038a38: 8fc20018 lw v0,24(s8) +80038a3c: 00000000 nop +80038a40: 00620018 mult v1,v0 +80038a44: 00001012 mflo v0 +80038a48: 8fc4001c lw a0,28(s8) +80038a4c: 8fc30030 lw v1,48(s8) +80038a50: 00000000 nop +80038a54: 00830018 mult a0,v1 +80038a58: 00001812 mflo v1 +80038a5c: 00431021 addu v0,v0,v1 +80038a60: 8fc40030 lw a0,48(s8) +80038a64: 8fc30018 lw v1,24(s8) +80038a68: 00000000 nop +80038a6c: 00830019 multu a0,v1 +80038a70: 00002012 mflo a0 +80038a74: 00002810 mfhi a1 +80038a78: 00451021 addu v0,v0,a1 +80038a7c: 00402821 move a1,v0 +80038a80: 8fc60050 lw a2,80(s8) +80038a84: 8fc70054 lw a3,84(s8) +80038a88: 00c41023 subu v0,a2,a0 +80038a8c: 00c2402b sltu t0,a2,v0 +80038a90: 00e51823 subu v1,a3,a1 +80038a94: 00682023 subu a0,v1,t0 +80038a98: 00801821 move v1,a0 +80038a9c: afc20050 sw v0,80(s8) +80038aa0: afc30054 sw v1,84(s8) + + //put_in_string(string, ssz, b + '0', string_pos++); + if(n2!=(n-1)) +80038aa4: 8fc2005c lw v0,92(s8) +80038aa8: 00000000 nop +80038aac: 2443ffff addiu v1,v0,-1 +80038ab0: 8fc20028 lw v0,40(s8) +80038ab4: 00000000 nop +80038ab8: 10620014 beq v1,v0,80038b0c <libc_ulltoa+0x240> +80038abc: 00000000 nop + { + //printf("n2=%d\n",n2); + dst[sp++] = b + '0'; +80038ac0: 8fc20024 lw v0,36(s8) +80038ac4: 00000000 nop +80038ac8: 24430001 addiu v1,v0,1 +80038acc: afc30024 sw v1,36(s8) +80038ad0: 00401821 move v1,v0 +80038ad4: 8fc20058 lw v0,88(s8) +80038ad8: 00000000 nop +80038adc: 00431021 addu v0,v0,v1 +80038ae0: 93c30030 lbu v1,48(s8) +80038ae4: 00000000 nop +80038ae8: 24630030 addiu v1,v1,48 +80038aec: 306300ff andi v1,v1,0xff +80038af0: 00031e00 sll v1,v1,0x18 +80038af4: 00031e03 sra v1,v1,0x18 +80038af8: a0430000 sb v1,0(v0) + n2++; +80038afc: 8fc20028 lw v0,40(s8) +80038b00: 00000000 nop +80038b04: 24420001 addiu v0,v0,1 +80038b08: afc20028 sw v0,40(s8) + int n2=0; + + if(n<=0) + return 0; + + for(x=18;x>=0;x--) +80038b0c: 8fc20010 lw v0,16(s8) +80038b10: 00000000 nop +80038b14: 2442ffff addiu v0,v0,-1 +80038b18: afc20010 sw v0,16(s8) +80038b1c: 8fc20010 lw v0,16(s8) +80038b20: 00000000 nop +80038b24: 0441ff84 bgez v0,80038938 <libc_ulltoa+0x6c> +80038b28: 00000000 nop + n2++; + } + } + } + + dst[sp] = 0; +80038b2c: 8fc20024 lw v0,36(s8) +80038b30: 8fc30058 lw v1,88(s8) +80038b34: 00000000 nop +80038b38: 00621021 addu v0,v1,v0 +80038b3c: a0400000 sb zero,0(v0) + + return n2; +80038b40: 8fc20028 lw v0,40(s8) +} +80038b44: 03c0e821 move sp,s8 +80038b48: 8fbf004c lw ra,76(sp) +80038b4c: 8fbe0048 lw s8,72(sp) +80038b50: 8fb30044 lw s3,68(sp) +80038b54: 8fb20040 lw s2,64(sp) +80038b58: 8fb1003c lw s1,60(sp) +80038b5c: 8fb00038 lw s0,56(sp) +80038b60: 27bd0050 addiu sp,sp,80 +80038b64: 03e00008 jr ra +80038b68: 00000000 nop + +80038b6c <libc_double_to_string>: + } + } +}*/ + +static void libc_double_to_string(double fl, char *dst, int n, int prec) +{ +80038b6c: 27bdff80 addiu sp,sp,-128 +80038b70: afbf007c sw ra,124(sp) +80038b74: afbe0078 sw s8,120(sp) +80038b78: afb70074 sw s7,116(sp) +80038b7c: afb60070 sw s6,112(sp) +80038b80: afb5006c sw s5,108(sp) +80038b84: afb40068 sw s4,104(sp) +80038b88: afb30064 sw s3,100(sp) +80038b8c: afb20060 sw s2,96(sp) +80038b90: afb1005c sw s1,92(sp) +80038b94: afb00058 sw s0,88(sp) +80038b98: 03a0f021 move s8,sp +80038b9c: afc40080 sw a0,128(s8) +80038ba0: afc50084 sw a1,132(s8) +80038ba4: afc60088 sw a2,136(s8) +80038ba8: afc7008c sw a3,140(s8) + unsigned long long *p = (unsigned long long *)&fl; +80038bac: 27c20080 addiu v0,s8,128 +80038bb0: afc20034 sw v0,52(s8) + unsigned long long i = 0; +80038bb4: 00001021 move v0,zero +80038bb8: 00001821 move v1,zero +80038bbc: afc20018 sw v0,24(s8) +80038bc0: afc3001c sw v1,28(s8) + unsigned long long f = 0; +80038bc4: 00001021 move v0,zero +80038bc8: 00001821 move v1,zero +80038bcc: afc20020 sw v0,32(s8) +80038bd0: afc30024 sw v1,36(s8) + unsigned long long m, s; + long long e; + int x; + unsigned long long z; + + s = *p >> 63; +80038bd4: 8fc20034 lw v0,52(s8) +80038bd8: 00000000 nop +80038bdc: 8c430004 lw v1,4(v0) +80038be0: 8c420000 lw v0,0(v0) +80038be4: 000317c2 srl v0,v1,0x1f +80038be8: afc20038 sw v0,56(s8) +80038bec: afc0003c sw zero,60(s8) + + e = (*p >> 52) & 0x7ff; +80038bf0: 8fc20034 lw v0,52(s8) +80038bf4: 00000000 nop +80038bf8: 8c430004 lw v1,4(v0) +80038bfc: 8c420000 lw v0,0(v0) +80038c00: 00034502 srl t0,v1,0x14 +80038c04: 00004821 move t1,zero +80038c08: 01001021 move v0,t0 +80038c0c: 01201821 move v1,t1 +80038c10: 304407ff andi a0,v0,0x7ff +80038c14: afc40028 sw a0,40(s8) +80038c18: 30620000 andi v0,v1,0x0 +80038c1c: afc2002c sw v0,44(s8) + //printf("%d\n", e); + + m = *p & 0xfffffffffffff; +80038c20: 8fc20034 lw v0,52(s8) +80038c24: 00000000 nop +80038c28: 8c430004 lw v1,4(v0) +80038c2c: 8c420000 lw v0,0(v0) +80038c30: 2404ffff li a0,-1 +80038c34: 00442024 and a0,v0,a0 +80038c38: afc40040 sw a0,64(s8) +80038c3c: 3c04000f lui a0,0xf +80038c40: 3484ffff ori a0,a0,0xffff +80038c44: 00641024 and v0,v1,a0 +80038c48: afc20044 sw v0,68(s8) + + for(x=0;x<52;x++) +80038c4c: afc00030 sw zero,48(s8) +80038c50: 10000032 b 80038d1c <libc_double_to_string+0x1b0> +80038c54: 00000000 nop + if(m&((unsigned long long)1<<(52-x))) putchar('1'); else putchar('0'); +80038c58: 24030034 li v1,52 +80038c5c: 8fc20030 lw v0,48(s8) +80038c60: 00000000 nop +80038c64: 00621023 subu v0,v1,v0 +80038c68: 30430020 andi v1,v0,0x20 +80038c6c: 10600007 beqz v1,80038c8c <libc_double_to_string+0x120> +80038c70: 00000000 nop +80038c74: 8fc30044 lw v1,68(s8) +80038c78: 00000000 nop +80038c7c: 00439006 srlv s2,v1,v0 +80038c80: 00009821 move s3,zero +80038c84: 1000000e b 80038cc0 <libc_double_to_string+0x154> +80038c88: 00000000 nop +80038c8c: 8fc30044 lw v1,68(s8) +80038c90: 00000000 nop +80038c94: 00032040 sll a0,v1,0x1 +80038c98: 2403ffff li v1,-1 +80038c9c: 00431826 xor v1,v0,v1 +80038ca0: 00641804 sllv v1,a0,v1 +80038ca4: 8fc40040 lw a0,64(s8) +80038ca8: 00000000 nop +80038cac: 00449006 srlv s2,a0,v0 +80038cb0: 00729025 or s2,v1,s2 +80038cb4: 8fc30044 lw v1,68(s8) +80038cb8: 00000000 nop +80038cbc: 00439806 srlv s3,v1,v0 +80038cc0: 32420001 andi v0,s2,0x1 +80038cc4: afc20050 sw v0,80(s8) +80038cc8: 32620000 andi v0,s3,0x0 +80038ccc: afc20054 sw v0,84(s8) +80038cd0: 8fc40050 lw a0,80(s8) +80038cd4: 8fc50054 lw a1,84(s8) +80038cd8: 00801021 move v0,a0 +80038cdc: 00a01821 move v1,a1 +80038ce0: 00431025 or v0,v0,v1 +80038ce4: 10400006 beqz v0,80038d00 <libc_double_to_string+0x194> +80038ce8: 00000000 nop +80038cec: 24040031 li a0,49 +80038cf0: 0c00aa06 jal 8002a818 <putchar> +80038cf4: 00000000 nop +80038cf8: 10000004 b 80038d0c <libc_double_to_string+0x1a0> +80038cfc: 00000000 nop +80038d00: 24040030 li a0,48 +80038d04: 0c00aa06 jal 8002a818 <putchar> +80038d08: 00000000 nop + e = (*p >> 52) & 0x7ff; + //printf("%d\n", e); + + m = *p & 0xfffffffffffff; + + for(x=0;x<52;x++) +80038d0c: 8fc20030 lw v0,48(s8) +80038d10: 00000000 nop +80038d14: 24420001 addiu v0,v0,1 +80038d18: afc20030 sw v0,48(s8) +80038d1c: 8fc20030 lw v0,48(s8) +80038d20: 00000000 nop +80038d24: 28420034 slti v0,v0,52 +80038d28: 1440ffcb bnez v0,80038c58 <libc_double_to_string+0xec> +80038d2c: 00000000 nop + if(m&((unsigned long long)1<<(52-x))) putchar('1'); else putchar('0'); + + if(e == 255 && m == 0) // Infinity +80038d30: 8fc30028 lw v1,40(s8) +80038d34: 240200ff li v0,255 +80038d38: 14620025 bne v1,v0,80038dd0 <libc_double_to_string+0x264> +80038d3c: 00000000 nop +80038d40: 8fc2002c lw v0,44(s8) +80038d44: 00000000 nop +80038d48: 14400021 bnez v0,80038dd0 <libc_double_to_string+0x264> +80038d4c: 00000000 nop +80038d50: 8fc20040 lw v0,64(s8) +80038d54: 8fc30044 lw v1,68(s8) +80038d58: 00000000 nop +80038d5c: 00431025 or v0,v0,v1 +80038d60: 1440001b bnez v0,80038dd0 <libc_double_to_string+0x264> +80038d64: 00000000 nop + { + if(s) strncpy(dst, "-inf", n); +80038d68: 8fc20038 lw v0,56(s8) +80038d6c: 8fc3003c lw v1,60(s8) +80038d70: 00000000 nop +80038d74: 00431025 or v0,v0,v1 +80038d78: 1040000b beqz v0,80038da8 <libc_double_to_string+0x23c> +80038d7c: 00000000 nop +80038d80: 8fc2008c lw v0,140(s8) +80038d84: 00000000 nop +80038d88: 00403021 move a2,v0 +80038d8c: 3c028004 lui v0,0x8004 +80038d90: 2445fec8 addiu a1,v0,-312 +80038d94: 8fc40088 lw a0,136(s8) +80038d98: 0c00d860 jal 80036180 <strncpy> +80038d9c: 00000000 nop +80038da0: 1000010b b 800391d0 <libc_double_to_string+0x664> +80038da4: 00000000 nop + else strncpy(dst, "inf", n); +80038da8: 8fc2008c lw v0,140(s8) +80038dac: 00000000 nop +80038db0: 00403021 move a2,v0 +80038db4: 3c028004 lui v0,0x8004 +80038db8: 2445fed0 addiu a1,v0,-304 +80038dbc: 8fc40088 lw a0,136(s8) +80038dc0: 0c00d860 jal 80036180 <strncpy> +80038dc4: 00000000 nop + for(x=0;x<52;x++) + if(m&((unsigned long long)1<<(52-x))) putchar('1'); else putchar('0'); + + if(e == 255 && m == 0) // Infinity + { + if(s) strncpy(dst, "-inf", n); +80038dc8: 10000101 b 800391d0 <libc_double_to_string+0x664> +80038dcc: 00000000 nop + else strncpy(dst, "inf", n); + }else if(e == 255 && m != 0) // NaN +80038dd0: 8fc30028 lw v1,40(s8) +80038dd4: 240200ff li v0,255 +80038dd8: 14620015 bne v1,v0,80038e30 <libc_double_to_string+0x2c4> +80038ddc: 00000000 nop +80038de0: 8fc2002c lw v0,44(s8) +80038de4: 00000000 nop +80038de8: 14400011 bnez v0,80038e30 <libc_double_to_string+0x2c4> +80038dec: 00000000 nop +80038df0: 8fc20040 lw v0,64(s8) +80038df4: 8fc30044 lw v1,68(s8) +80038df8: 00000000 nop +80038dfc: 00431025 or v0,v0,v1 +80038e00: 1040000b beqz v0,80038e30 <libc_double_to_string+0x2c4> +80038e04: 00000000 nop + { + strncpy(dst, "nan", n); +80038e08: 8fc2008c lw v0,140(s8) +80038e0c: 00000000 nop +80038e10: 00403021 move a2,v0 +80038e14: 3c028004 lui v0,0x8004 +80038e18: 2445fed4 addiu a1,v0,-300 +80038e1c: 8fc40088 lw a0,136(s8) +80038e20: 0c00d860 jal 80036180 <strncpy> +80038e24: 00000000 nop +80038e28: 100000e9 b 800391d0 <libc_double_to_string+0x664> +80038e2c: 00000000 nop + } + else + { + e -= 1023; +80038e30: 8fc40028 lw a0,40(s8) +80038e34: 8fc5002c lw a1,44(s8) +80038e38: 2406fc01 li a2,-1023 +80038e3c: 2407ffff li a3,-1 +80038e40: 00861021 addu v0,a0,a2 +80038e44: 0044402b sltu t0,v0,a0 +80038e48: 00a71821 addu v1,a1,a3 +80038e4c: 01032021 addu a0,t0,v1 +80038e50: 00801821 move v1,a0 +80038e54: afc20028 sw v0,40(s8) +80038e58: afc3002c sw v1,44(s8) + m |= (unsigned long long)1<<52; +80038e5c: 8fc20040 lw v0,64(s8) +80038e60: 00000000 nop +80038e64: 34420000 ori v0,v0,0x0 +80038e68: afc20040 sw v0,64(s8) +80038e6c: 8fc30044 lw v1,68(s8) +80038e70: 3c020010 lui v0,0x10 +80038e74: 00621025 or v0,v1,v0 +80038e78: afc20044 sw v0,68(s8) + + for(x = 52; x >= 0; x--) +80038e7c: 24020034 li v0,52 +80038e80: afc20030 sw v0,48(s8) +80038e84: 10000085 b 8003909c <libc_double_to_string+0x530> +80038e88: 00000000 nop + { + if(m & ((unsigned long long)1<<x)) +80038e8c: 8fc20030 lw v0,48(s8) +80038e90: 00000000 nop +80038e94: 30420020 andi v0,v0,0x20 +80038e98: 10400008 beqz v0,80038ebc <libc_double_to_string+0x350> +80038e9c: 00000000 nop +80038ea0: 8fc30044 lw v1,68(s8) +80038ea4: 8fc20030 lw v0,48(s8) +80038ea8: 00000000 nop +80038eac: 00438006 srlv s0,v1,v0 +80038eb0: 00008821 move s1,zero +80038eb4: 10000011 b 80038efc <libc_double_to_string+0x390> +80038eb8: 00000000 nop +80038ebc: 8fc20044 lw v0,68(s8) +80038ec0: 00000000 nop +80038ec4: 00021840 sll v1,v0,0x1 +80038ec8: 8fc40030 lw a0,48(s8) +80038ecc: 2402ffff li v0,-1 +80038ed0: 00821026 xor v0,a0,v0 +80038ed4: 00431004 sllv v0,v1,v0 +80038ed8: 8fc40040 lw a0,64(s8) +80038edc: 8fc30030 lw v1,48(s8) +80038ee0: 00000000 nop +80038ee4: 00648006 srlv s0,a0,v1 +80038ee8: 00508025 or s0,v0,s0 +80038eec: 8fc30044 lw v1,68(s8) +80038ef0: 8fc20030 lw v0,48(s8) +80038ef4: 00000000 nop +80038ef8: 00438806 srlv s1,v1,v0 +80038efc: 32160001 andi s6,s0,0x1 +80038f00: 32370000 andi s7,s1,0x0 +80038f04: 02c01021 move v0,s6 +80038f08: 00571025 or v0,v0,s7 +80038f0c: 10400054 beqz v0,80039060 <libc_double_to_string+0x4f4> +80038f10: 00000000 nop + { + if(e >= 0) +80038f14: 8fc2002c lw v0,44(s8) +80038f18: 00000000 nop +80038f1c: 04400024 bltz v0,80038fb0 <libc_double_to_string+0x444> +80038f20: 00000000 nop + { + z = (long long)1<<e; +80038f24: 8fc20028 lw v0,40(s8) +80038f28: 00000000 nop +80038f2c: 30430020 andi v1,v0,0x20 +80038f30: 10600006 beqz v1,80038f4c <libc_double_to_string+0x3e0> +80038f34: 00000000 nop +80038f38: 24030001 li v1,1 +80038f3c: 0043a804 sllv s5,v1,v0 +80038f40: 0000a021 move s4,zero +80038f44: 1000000b b 80038f74 <libc_double_to_string+0x408> +80038f48: 00000000 nop +80038f4c: 24030001 li v1,1 +80038f50: 00032042 srl a0,v1,0x1 +80038f54: 2403ffff li v1,-1 +80038f58: 00431826 xor v1,v0,v1 +80038f5c: 00641806 srlv v1,a0,v1 +80038f60: 00002021 move a0,zero +80038f64: 0044a804 sllv s5,a0,v0 +80038f68: 0075a825 or s5,v1,s5 +80038f6c: 24030001 li v1,1 +80038f70: 0043a004 sllv s4,v1,v0 +80038f74: afd40048 sw s4,72(s8) +80038f78: afd5004c sw s5,76(s8) + + i+=z; +80038f7c: 8fc40018 lw a0,24(s8) +80038f80: 8fc5001c lw a1,28(s8) +80038f84: 8fc60048 lw a2,72(s8) +80038f88: 8fc7004c lw a3,76(s8) +80038f8c: 00861021 addu v0,a0,a2 +80038f90: 0044402b sltu t0,v0,a0 +80038f94: 00a71821 addu v1,a1,a3 +80038f98: 01032021 addu a0,t0,v1 +80038f9c: 00801821 move v1,a0 +80038fa0: afc20018 sw v0,24(s8) +80038fa4: afc3001c sw v1,28(s8) +80038fa8: 1000002d b 80039060 <libc_double_to_string+0x4f4> +80038fac: 00000000 nop + } + else + { + z = 5000000000000000000; +80038fb0: 3c0244f4 lui v0,0x44f4 +80038fb4: 3c034563 lui v1,0x4563 +80038fb8: 34639182 ori v1,v1,0x9182 +80038fbc: afc20048 sw v0,72(s8) +80038fc0: afc3004c sw v1,76(s8) + z >>= -(e + 1); +80038fc4: 8fc20028 lw v0,40(s8) +80038fc8: 00000000 nop +80038fcc: 00021027 nor v0,zero,v0 +80038fd0: 30430020 andi v1,v0,0x20 +80038fd4: 10600008 beqz v1,80038ff8 <libc_double_to_string+0x48c> +80038fd8: 00000000 nop +80038fdc: 8fc3004c lw v1,76(s8) +80038fe0: 00000000 nop +80038fe4: 00431006 srlv v0,v1,v0 +80038fe8: afc20048 sw v0,72(s8) +80038fec: afc0004c sw zero,76(s8) +80038ff0: 10000010 b 80039034 <libc_double_to_string+0x4c8> +80038ff4: 00000000 nop +80038ff8: 8fc3004c lw v1,76(s8) +80038ffc: 00000000 nop +80039000: 00032040 sll a0,v1,0x1 +80039004: 2403ffff li v1,-1 +80039008: 00431826 xor v1,v0,v1 +8003900c: 00641804 sllv v1,a0,v1 +80039010: 8fc40048 lw a0,72(s8) +80039014: 00000000 nop +80039018: 00442006 srlv a0,a0,v0 +8003901c: 00831825 or v1,a0,v1 +80039020: afc30048 sw v1,72(s8) +80039024: 8fc3004c lw v1,76(s8) +80039028: 00000000 nop +8003902c: 00431006 srlv v0,v1,v0 +80039030: afc2004c sw v0,76(s8) + + f+=z; +80039034: 8fc40020 lw a0,32(s8) +80039038: 8fc50024 lw a1,36(s8) +8003903c: 8fc60048 lw a2,72(s8) +80039040: 8fc7004c lw a3,76(s8) +80039044: 00861021 addu v0,a0,a2 +80039048: 0044402b sltu t0,v0,a0 +8003904c: 00a71821 addu v1,a1,a3 +80039050: 01032021 addu a0,t0,v1 +80039054: 00801821 move v1,a0 +80039058: afc20020 sw v0,32(s8) +8003905c: afc30024 sw v1,36(s8) + } + } + e--; +80039060: 8fc40028 lw a0,40(s8) +80039064: 8fc5002c lw a1,44(s8) +80039068: 2406ffff li a2,-1 +8003906c: 2407ffff li a3,-1 +80039070: 00861021 addu v0,a0,a2 +80039074: 0044402b sltu t0,v0,a0 +80039078: 00a71821 addu v1,a1,a3 +8003907c: 01032021 addu a0,t0,v1 +80039080: 00801821 move v1,a0 +80039084: afc20028 sw v0,40(s8) +80039088: afc3002c sw v1,44(s8) + else + { + e -= 1023; + m |= (unsigned long long)1<<52; + + for(x = 52; x >= 0; x--) +8003908c: 8fc20030 lw v0,48(s8) +80039090: 00000000 nop +80039094: 2442ffff addiu v0,v0,-1 +80039098: afc20030 sw v0,48(s8) +8003909c: 8fc20030 lw v0,48(s8) +800390a0: 00000000 nop +800390a4: 0441ff79 bgez v0,80038e8c <libc_double_to_string+0x320> +800390a8: 00000000 nop + } + } + e--; + } + + if(s && (n>0)) +800390ac: 8fc20038 lw v0,56(s8) +800390b0: 8fc3003c lw v1,60(s8) +800390b4: 00000000 nop +800390b8: 00431025 or v0,v0,v1 +800390bc: 1040000f beqz v0,800390fc <libc_double_to_string+0x590> +800390c0: 00000000 nop +800390c4: 8fc2008c lw v0,140(s8) +800390c8: 00000000 nop +800390cc: 1840000b blez v0,800390fc <libc_double_to_string+0x590> +800390d0: 00000000 nop + { + *(dst++) = '-'; +800390d4: 8fc20088 lw v0,136(s8) +800390d8: 00000000 nop +800390dc: 24430001 addiu v1,v0,1 +800390e0: afc30088 sw v1,136(s8) +800390e4: 2403002d li v1,45 +800390e8: a0430000 sb v1,0(v0) + n--; +800390ec: 8fc2008c lw v0,140(s8) +800390f0: 00000000 nop +800390f4: 2442ffff addiu v0,v0,-1 +800390f8: afc2008c sw v0,140(s8) + } + + x = libc_ulltoa(i, dst, n, 0); +800390fc: afa00010 sw zero,16(sp) +80039100: 8fc7008c lw a3,140(s8) +80039104: 8fc60088 lw a2,136(s8) +80039108: 8fc40018 lw a0,24(s8) +8003910c: 8fc5001c lw a1,28(s8) +80039110: 0c00e233 jal 800388cc <libc_ulltoa> +80039114: 00000000 nop +80039118: afc20030 sw v0,48(s8) + n-=x+1; +8003911c: 8fc20030 lw v0,48(s8) +80039120: 00000000 nop +80039124: 00021027 nor v0,zero,v0 +80039128: 8fc3008c lw v1,140(s8) +8003912c: 00000000 nop +80039130: 00621021 addu v0,v1,v0 +80039134: afc2008c sw v0,140(s8) + dst+=x; +80039138: 8fc20030 lw v0,48(s8) +8003913c: 8fc30088 lw v1,136(s8) +80039140: 00000000 nop +80039144: 00621021 addu v0,v1,v0 +80039148: afc20088 sw v0,136(s8) + + dprintf("N = %d\n", n); + + if(n>0) +8003914c: 8fc2008c lw v0,140(s8) +80039150: 00000000 nop +80039154: 1840001e blez v0,800391d0 <libc_double_to_string+0x664> +80039158: 00000000 nop + { + *(dst++) = '.'; +8003915c: 8fc20088 lw v0,136(s8) +80039160: 00000000 nop +80039164: 24430001 addiu v1,v0,1 +80039168: afc30088 sw v1,136(s8) +8003916c: 2403002e li v1,46 +80039170: a0430000 sb v1,0(v0) + + if(n>0) +80039174: 8fc2008c lw v0,140(s8) +80039178: 00000000 nop +8003917c: 18400014 blez v0,800391d0 <libc_double_to_string+0x664> +80039180: 00000000 nop + libc_ulltoa(f, dst, (n<(prec+1))?n:(prec+1), 1); +80039184: 8fc20090 lw v0,144(s8) +80039188: 00000000 nop +8003918c: 24420001 addiu v0,v0,1 +80039190: 8fc3008c lw v1,140(s8) +80039194: 00000000 nop +80039198: 0062202a slt a0,v1,v0 +8003919c: 10800002 beqz a0,800391a8 <libc_double_to_string+0x63c> +800391a0: 00000000 nop +800391a4: 00601021 move v0,v1 +800391a8: 24030001 li v1,1 +800391ac: afa30010 sw v1,16(sp) +800391b0: 00403821 move a3,v0 +800391b4: 8fc60088 lw a2,136(s8) +800391b8: 8fc40020 lw a0,32(s8) +800391bc: 8fc50024 lw a1,36(s8) +800391c0: 0c00e233 jal 800388cc <libc_ulltoa> +800391c4: 00000000 nop + } + } +} +800391c8: 10000001 b 800391d0 <libc_double_to_string+0x664> +800391cc: 00000000 nop +800391d0: 00000000 nop +800391d4: 03c0e821 move sp,s8 +800391d8: 8fbf007c lw ra,124(sp) +800391dc: 8fbe0078 lw s8,120(sp) +800391e0: 8fb70074 lw s7,116(sp) +800391e4: 8fb60070 lw s6,112(sp) +800391e8: 8fb5006c lw s5,108(sp) +800391ec: 8fb40068 lw s4,104(sp) +800391f0: 8fb30064 lw s3,100(sp) +800391f4: 8fb20060 lw s2,96(sp) +800391f8: 8fb1005c lw s1,92(sp) +800391fc: 8fb00058 lw s0,88(sp) +80039200: 27bd0080 addiu sp,sp,128 +80039204: 03e00008 jr ra +80039208: 00000000 nop + +8003920c <__vsnprintf_internal>: + +static char libc_sprintf_floatbuf[64]; + +static int __vsnprintf_internal(char *string, size_t size, const char *fmt, va_list ap, int (put_in_string(char *string, unsigned int sz, char c, int pos))) +{ +8003920c: 27bdfef8 addiu sp,sp,-264 +80039210: afbf0104 sw ra,260(sp) +80039214: afbe0100 sw s8,256(sp) +80039218: afb700fc sw s7,252(sp) +8003921c: afb600f8 sw s6,248(sp) +80039220: afb500f4 sw s5,244(sp) +80039224: afb400f0 sw s4,240(sp) +80039228: afb300ec sw s3,236(sp) +8003922c: afb200e8 sw s2,232(sp) +80039230: afb100e4 sw s1,228(sp) +80039234: afb000e0 sw s0,224(sp) +80039238: 03a0f021 move s8,sp +8003923c: afc40108 sw a0,264(s8) +80039240: afc5010c sw a1,268(s8) +80039244: afc60110 sw a2,272(s8) +80039248: afc70114 sw a3,276(s8) + int string_pos,fmt_pos; + int l; + unsigned long long arg; + char *argcp; + char *argcp_tmp; + int directive_coming = 0; +8003924c: afc00028 sw zero,40(s8) + int flags = 0; +80039250: afc0002c sw zero,44(s8) + int argsize = 2; // int +80039254: 24020002 li v0,2 +80039258: afc20030 sw v0,48(s8) + int x, y; + unsigned long long a, b; + int empty_digit; + int ssz = size - 1; +8003925c: 8fc2010c lw v0,268(s8) +80039260: 00000000 nop +80039264: 2442ffff addiu v0,v0,-1 +80039268: afc2004c sw v0,76(s8) + int zero_flag_imp = 0; +8003926c: afc00050 sw zero,80(s8) + int pad_quantity = 0; +80039270: afc00054 sw zero,84(s8) + int pad_quantity_f = -1; +80039274: 2402ffff li v0,-1 +80039278: afc20058 sw v0,88(s8) + int last; + + if(size == 0) +8003927c: 8fc2010c lw v0,268(s8) +80039280: 00000000 nop +80039284: 14400002 bnez v0,80039290 <__vsnprintf_internal+0x84> +80039288: 00000000 nop + ssz = 0; +8003928c: afc0004c sw zero,76(s8) + + l = strlen(fmt); +80039290: 8fc40110 lw a0,272(s8) +80039294: 0c00d8af jal 800362bc <strlen> +80039298: 00000000 nop +8003929c: afc20060 sw v0,96(s8) + + string_pos = 0; +800392a0: afc00018 sw zero,24(s8) + + for(fmt_pos=0;fmt_pos<l;fmt_pos++) +800392a4: afc0001c sw zero,28(s8) +800392a8: 10000777 b 8003b088 <__vsnprintf_internal+0x1e7c> +800392ac: 00000000 nop + { + if(directive_coming) +800392b0: 8fc20028 lw v0,40(s8) +800392b4: 00000000 nop +800392b8: 10400743 beqz v0,8003afc8 <__vsnprintf_internal+0x1dbc> +800392bc: 00000000 nop + { + switch(fmt[fmt_pos]) +800392c0: 8fc3001c lw v1,28(s8) +800392c4: 8fc20110 lw v0,272(s8) +800392c8: 00000000 nop +800392cc: 00431021 addu v0,v0,v1 +800392d0: 80420000 lb v0,0(v0) +800392d4: 00000000 nop +800392d8: 2443ffe0 addiu v1,v0,-32 +800392dc: 2c62005b sltiu v0,v1,91 +800392e0: 10400723 beqz v0,8003af70 <__vsnprintf_internal+0x1d64> +800392e4: 00000000 nop +800392e8: 00031880 sll v1,v1,0x2 +800392ec: 3c028004 lui v0,0x8004 +800392f0: 2442fed8 addiu v0,v0,-296 +800392f4: 00621021 addu v0,v1,v0 +800392f8: 8c420000 lw v0,0(v0) +800392fc: 00000000 nop +80039300: 00400008 jr v0 +80039304: 00000000 nop + { + case '%': + put_in_string(string, ssz, '%', string_pos++); +80039308: 8fc4004c lw a0,76(s8) +8003930c: 8fc30018 lw v1,24(s8) +80039310: 00000000 nop +80039314: 24620001 addiu v0,v1,1 +80039318: afc20018 sw v0,24(s8) +8003931c: 8fc20118 lw v0,280(s8) +80039320: 00603821 move a3,v1 +80039324: 24060025 li a2,37 +80039328: 00802821 move a1,a0 +8003932c: 8fc40108 lw a0,264(s8) +80039330: 0040f809 jalr v0 +80039334: 00000000 nop + directive_coming = 0; +80039338: afc00028 sw zero,40(s8) + break; +8003933c: 1000074e b 8003b078 <__vsnprintf_internal+0x1e6c> +80039340: 00000000 nop + case ' ': + flags |= SPRINTF_SPACE_FLAG; +80039344: 8fc2002c lw v0,44(s8) +80039348: 00000000 nop +8003934c: 34420008 ori v0,v0,0x8 +80039350: afc2002c sw v0,44(s8) + break; +80039354: 10000748 b 8003b078 <__vsnprintf_internal+0x1e6c> +80039358: 00000000 nop + case '#': // Specify alternate form + flags |= SPRINTF_ALT_FLAG; +8003935c: 8fc2002c lw v0,44(s8) +80039360: 00000000 nop +80039364: 34420001 ori v0,v0,0x1 +80039368: afc2002c sw v0,44(s8) + break; +8003936c: 10000742 b 8003b078 <__vsnprintf_internal+0x1e6c> +80039370: 00000000 nop + case '+': // Specify sign in signed conversions + flags |= SPRINTF_SIGN_FLAG; +80039374: 8fc2002c lw v0,44(s8) +80039378: 00000000 nop +8003937c: 34420010 ori v0,v0,0x10 +80039380: afc2002c sw v0,44(s8) + break; +80039384: 1000073c b 8003b078 <__vsnprintf_internal+0x1e6c> +80039388: 00000000 nop + case '0': // Padding with zeros... + if(zero_flag_imp == 0) +8003938c: 8fc20050 lw v0,80(s8) +80039390: 00000000 nop +80039394: 14400009 bnez v0,800393bc <__vsnprintf_internal+0x1b0> +80039398: 00000000 nop + { + flags |= SPRINTF_ZERO_FLAG; +8003939c: 8fc2002c lw v0,44(s8) +800393a0: 00000000 nop +800393a4: 34420002 ori v0,v0,0x2 +800393a8: afc2002c sw v0,44(s8) + zero_flag_imp = 1; +800393ac: 24020001 li v0,1 +800393b0: afc20050 sw v0,80(s8) + else + { + pad_quantity *= 10; + //printf("pad_quantity = %d\n", pad_quantity); + } + break; +800393b4: 10000730 b 8003b078 <__vsnprintf_internal+0x1e6c> +800393b8: 00000000 nop + zero_flag_imp = 1; + //printf("Zero padding enabled!\n"); + } + else + { + pad_quantity *= 10; +800393bc: 8fc20054 lw v0,84(s8) +800393c0: 00000000 nop +800393c4: 00401821 move v1,v0 +800393c8: 00031040 sll v0,v1,0x1 +800393cc: 00401821 move v1,v0 +800393d0: 00031080 sll v0,v1,0x2 +800393d4: 00621021 addu v0,v1,v0 +800393d8: afc20054 sw v0,84(s8) + //printf("pad_quantity = %d\n", pad_quantity); + } + break; +800393dc: 10000726 b 8003b078 <__vsnprintf_internal+0x1e6c> +800393e0: 00000000 nop + case '1' ... '9': // '...' cases are a GNU extension, + // but they simplify a lot + + pad_quantity *= 10; +800393e4: 8fc20054 lw v0,84(s8) +800393e8: 00000000 nop +800393ec: 00401821 move v1,v0 +800393f0: 00031040 sll v0,v1,0x1 +800393f4: 00401821 move v1,v0 +800393f8: 00031080 sll v0,v1,0x2 +800393fc: 00621021 addu v0,v1,v0 +80039400: afc20054 sw v0,84(s8) + pad_quantity += fmt[fmt_pos] - '0'; +80039404: 8fc3001c lw v1,28(s8) +80039408: 8fc20110 lw v0,272(s8) +8003940c: 00000000 nop +80039410: 00431021 addu v0,v0,v1 +80039414: 80420000 lb v0,0(v0) +80039418: 00000000 nop +8003941c: 2443ffd0 addiu v1,v0,-48 +80039420: 8fc20054 lw v0,84(s8) +80039424: 00000000 nop +80039428: 00431021 addu v0,v0,v1 +8003942c: afc20054 sw v0,84(s8) + zero_flag_imp = 1; +80039430: 24020001 li v0,1 +80039434: afc20050 sw v0,80(s8) + + //printf("pad_quantity = %d\n", pad_quantity); + break; +80039438: 1000070f b 8003b078 <__vsnprintf_internal+0x1e6c> +8003943c: 00000000 nop + case '-': // Negative field flag + if(flags & SPRINTF_ZERO_FLAG) +80039440: 8fc2002c lw v0,44(s8) +80039444: 00000000 nop +80039448: 30420002 andi v0,v0,0x2 +8003944c: 10400005 beqz v0,80039464 <__vsnprintf_internal+0x258> +80039450: 00000000 nop + flags &= ~SPRINTF_ZERO_FLAG; +80039454: 8fc3002c lw v1,44(s8) +80039458: 2402fffd li v0,-3 +8003945c: 00621024 and v0,v1,v0 +80039460: afc2002c sw v0,44(s8) + + flags |= SPRINTF_NEGFIELD_FLAG; +80039464: 8fc2002c lw v0,44(s8) +80039468: 00000000 nop +8003946c: 34420004 ori v0,v0,0x4 +80039470: afc2002c sw v0,44(s8) + break; +80039474: 10000700 b 8003b078 <__vsnprintf_internal+0x1e6c> +80039478: 00000000 nop + case '.': // Floating point precision + pad_quantity_f = pad_quantity; +8003947c: 8fc20054 lw v0,84(s8) +80039480: 00000000 nop +80039484: afc20058 sw v0,88(s8) + pad_quantity = 0; +80039488: afc00054 sw zero,84(s8) + break; +8003948c: 100006fa b 8003b078 <__vsnprintf_internal+0x1e6c> +80039490: 00000000 nop + case 'h': // Half argument size + if(argsize) argsize--; +80039494: 8fc20030 lw v0,48(s8) +80039498: 00000000 nop +8003949c: 104006f2 beqz v0,8003b068 <__vsnprintf_internal+0x1e5c> +800394a0: 00000000 nop +800394a4: 8fc20030 lw v0,48(s8) +800394a8: 00000000 nop +800394ac: 2442ffff addiu v0,v0,-1 +800394b0: afc20030 sw v0,48(s8) + break; +800394b4: 100006ec b 8003b068 <__vsnprintf_internal+0x1e5c> +800394b8: 00000000 nop + case 'l': // Double argument size + if(argsize < 2) argsize = 2; +800394bc: 8fc20030 lw v0,48(s8) +800394c0: 00000000 nop +800394c4: 28420002 slti v0,v0,2 +800394c8: 10400005 beqz v0,800394e0 <__vsnprintf_internal+0x2d4> +800394cc: 00000000 nop +800394d0: 24020002 li v0,2 +800394d4: afc20030 sw v0,48(s8) + else if(argsize < SPRINTF_SIZE_LONG_LONG) argsize++; + break; +800394d8: 100006e6 b 8003b074 <__vsnprintf_internal+0x1e68> +800394dc: 00000000 nop + case 'h': // Half argument size + if(argsize) argsize--; + break; + case 'l': // Double argument size + if(argsize < 2) argsize = 2; + else if(argsize < SPRINTF_SIZE_LONG_LONG) argsize++; +800394e0: 8fc20030 lw v0,48(s8) +800394e4: 00000000 nop +800394e8: 28420004 slti v0,v0,4 +800394ec: 104006e1 beqz v0,8003b074 <__vsnprintf_internal+0x1e68> +800394f0: 00000000 nop +800394f4: 8fc20030 lw v0,48(s8) +800394f8: 00000000 nop +800394fc: 24420001 addiu v0,v0,1 +80039500: afc20030 sw v0,48(s8) + break; +80039504: 100006db b 8003b074 <__vsnprintf_internal+0x1e68> +80039508: 00000000 nop + +// 'j', 't', 'z', 'q' added 2013-10-26 by nextvolume + + case 'j': // Maximum integer size + argsize = SPRINTF_SIZE_LONG_LONG; +8003950c: 24020004 li v0,4 +80039510: afc20030 sw v0,48(s8) + break; +80039514: 100006d8 b 8003b078 <__vsnprintf_internal+0x1e6c> +80039518: 00000000 nop + + case 't': // Size of ptrdiff_t (i.e. long on 32-bit, long long on 64-bit) + argsize = (sizeof(void*)==8)? +8003951c: 24020003 li v0,3 +80039520: afc20030 sw v0,48(s8) + SPRINTF_SIZE_LONG_LONG:SPRINTF_SIZE_LONG; + break; +80039524: 100006d4 b 8003b078 <__vsnprintf_internal+0x1e6c> +80039528: 00000000 nop + + case 'z': // Size of size_t (int) + argsize = SPRINTF_SIZE_INT; +8003952c: 24020002 li v0,2 +80039530: afc20030 sw v0,48(s8) + break; +80039534: 100006d0 b 8003b078 <__vsnprintf_internal+0x1e6c> +80039538: 00000000 nop + + case 'q': // Size of quad_t + argsize = SPRINTF_SIZE_LONG_LONG; +8003953c: 24020004 li v0,4 +80039540: afc20030 sw v0,48(s8) + break; +80039544: 100006cc b 8003b078 <__vsnprintf_internal+0x1e6c> +80039548: 00000000 nop + + case 'd': // signed decimal + case 'i': + empty_digit = 1; +8003954c: 24020001 li v0,1 +80039550: afc20048 sw v0,72(s8) + + //printf("argsize = %d\n", argsize); + + if(argsize < SPRINTF_SIZE_LONG_LONG) +80039554: 8fc20030 lw v0,48(s8) +80039558: 00000000 nop +8003955c: 28420004 slti v0,v0,4 +80039560: 1040000f beqz v0,800395a0 <__vsnprintf_internal+0x394> +80039564: 00000000 nop + arg = (unsigned long long)va_arg(ap, unsigned int); +80039568: 8fc30114 lw v1,276(s8) +8003956c: 00000000 nop +80039570: 24620004 addiu v0,v1,4 +80039574: afc20114 sw v0,276(s8) +80039578: 8c620000 lw v0,0(v1) +8003957c: 00000000 nop +80039580: afc20098 sw v0,152(s8) +80039584: afc0009c sw zero,156(s8) +80039588: 8fc20098 lw v0,152(s8) +8003958c: 8fc3009c lw v1,156(s8) +80039590: afc20070 sw v0,112(s8) +80039594: afc30074 sw v1,116(s8) +80039598: 1000000c b 800395cc <__vsnprintf_internal+0x3c0> +8003959c: 00000000 nop + else + arg = va_arg(ap, unsigned long long); +800395a0: 8fc20114 lw v0,276(s8) +800395a4: 00000000 nop +800395a8: 24430007 addiu v1,v0,7 +800395ac: 2402fff8 li v0,-8 +800395b0: 00621824 and v1,v1,v0 +800395b4: 24620008 addiu v0,v1,8 +800395b8: afc20114 sw v0,276(s8) +800395bc: 8c620000 lw v0,0(v1) +800395c0: 8c630004 lw v1,4(v1) +800395c4: afc20070 sw v0,112(s8) +800395c8: afc30074 sw v1,116(s8) + + if(flags & SPRINTF_SPACE_FLAG) +800395cc: 8fc2002c lw v0,44(s8) +800395d0: 00000000 nop +800395d4: 30420008 andi v0,v0,0x8 +800395d8: 1040000d beqz v0,80039610 <__vsnprintf_internal+0x404> +800395dc: 00000000 nop + put_in_string(string, ssz, ' ', string_pos++); +800395e0: 8fc4004c lw a0,76(s8) +800395e4: 8fc30018 lw v1,24(s8) +800395e8: 00000000 nop +800395ec: 24620001 addiu v0,v1,1 +800395f0: afc20018 sw v0,24(s8) +800395f4: 8fc20118 lw v0,280(s8) +800395f8: 00603821 move a3,v1 +800395fc: 24060020 li a2,32 +80039600: 00802821 move a1,a0 +80039604: 8fc40108 lw a0,264(s8) +80039608: 0040f809 jalr v0 +8003960c: 00000000 nop + + if(get_arg_in_size(argsize, &arg, 1)) +80039610: 27c20070 addiu v0,s8,112 +80039614: 24060001 li a2,1 +80039618: 00402821 move a1,v0 +8003961c: 8fc40030 lw a0,48(s8) +80039620: 0c00e13a jal 800384e8 <get_arg_in_size> +80039624: 00000000 nop +80039628: 10400013 beqz v0,80039678 <__vsnprintf_internal+0x46c> +8003962c: 00000000 nop + { + put_in_string(string, ssz, '-', string_pos++); +80039630: 8fc4004c lw a0,76(s8) +80039634: 8fc30018 lw v1,24(s8) +80039638: 00000000 nop +8003963c: 24620001 addiu v0,v1,1 +80039640: afc20018 sw v0,24(s8) +80039644: 8fc20118 lw v0,280(s8) +80039648: 00603821 move a3,v1 +8003964c: 2406002d li a2,45 +80039650: 00802821 move a1,a0 +80039654: 8fc40108 lw a0,264(s8) +80039658: 0040f809 jalr v0 +8003965c: 00000000 nop + pad_quantity--; +80039660: 8fc20054 lw v0,84(s8) +80039664: 00000000 nop +80039668: 2442ffff addiu v0,v0,-1 +8003966c: afc20054 sw v0,84(s8) +80039670: 10000016 b 800396cc <__vsnprintf_internal+0x4c0> +80039674: 00000000 nop + } + else + { + if(flags & SPRINTF_SIGN_FLAG) +80039678: 8fc2002c lw v0,44(s8) +8003967c: 00000000 nop +80039680: 30420010 andi v0,v0,0x10 +80039684: 10400011 beqz v0,800396cc <__vsnprintf_internal+0x4c0> +80039688: 00000000 nop + { + put_in_string(string, ssz, '+', string_pos++); +8003968c: 8fc4004c lw a0,76(s8) +80039690: 8fc30018 lw v1,24(s8) +80039694: 00000000 nop +80039698: 24620001 addiu v0,v1,1 +8003969c: afc20018 sw v0,24(s8) +800396a0: 8fc20118 lw v0,280(s8) +800396a4: 00603821 move a3,v1 +800396a8: 2406002b li a2,43 +800396ac: 00802821 move a1,a0 +800396b0: 8fc40108 lw a0,264(s8) +800396b4: 0040f809 jalr v0 +800396b8: 00000000 nop + pad_quantity--; +800396bc: 8fc20054 lw v0,84(s8) +800396c0: 00000000 nop +800396c4: 2442ffff addiu v0,v0,-1 +800396c8: afc20054 sw v0,84(s8) + + y *= 10; + } + if(pad_quantity < 0) pad_quantity = 0;*/ + + calculate_real_padding(); +800396cc: 24020001 li v0,1 +800396d0: afc20038 sw v0,56(s8) +800396d4: afc00034 sw zero,52(s8) +800396d8: 1000002a b 80039784 <__vsnprintf_internal+0x578> +800396dc: 00000000 nop +800396e0: 8fc20034 lw v0,52(s8) +800396e4: 00000000 nop +800396e8: 14400007 bnez v0,80039708 <__vsnprintf_internal+0x4fc> +800396ec: 00000000 nop +800396f0: 8fc20054 lw v0,84(s8) +800396f4: 00000000 nop +800396f8: 2442ffff addiu v0,v0,-1 +800396fc: afc20054 sw v0,84(s8) +80039700: 10000014 b 80039754 <__vsnprintf_internal+0x548> +80039704: 00000000 nop +80039708: 8fc40070 lw a0,112(s8) +8003970c: 8fc50074 lw a1,116(s8) +80039710: 8fc20038 lw v0,56(s8) +80039714: 00000000 nop +80039718: afc200a0 sw v0,160(s8) +8003971c: 000217c3 sra v0,v0,0x1f +80039720: afc200a4 sw v0,164(s8) +80039724: 8fc600a0 lw a2,160(s8) +80039728: 8fc700a4 lw a3,164(s8) +8003972c: 0c00f0ae jal 8003c2b8 <__udivdi3> +80039730: 00000000 nop +80039734: 00402021 move a0,v0 +80039738: 00832025 or a0,a0,v1 +8003973c: 10800005 beqz a0,80039754 <__vsnprintf_internal+0x548> +80039740: 00000000 nop +80039744: 8fc20054 lw v0,84(s8) +80039748: 00000000 nop +8003974c: 2442ffff addiu v0,v0,-1 +80039750: afc20054 sw v0,84(s8) +80039754: 8fc20038 lw v0,56(s8) +80039758: 00000000 nop +8003975c: 00401821 move v1,v0 +80039760: 00031040 sll v0,v1,0x1 +80039764: 00401821 move v1,v0 +80039768: 00031080 sll v0,v1,0x2 +8003976c: 00621021 addu v0,v1,v0 +80039770: afc20038 sw v0,56(s8) +80039774: 8fc20034 lw v0,52(s8) +80039778: 00000000 nop +8003977c: 24420001 addiu v0,v0,1 +80039780: afc20034 sw v0,52(s8) +80039784: 8fc20034 lw v0,52(s8) +80039788: 00000000 nop +8003978c: 28420014 slti v0,v0,20 +80039790: 1440ffd3 bnez v0,800396e0 <__vsnprintf_internal+0x4d4> +80039794: 00000000 nop +80039798: 8fc20054 lw v0,84(s8) +8003979c: 00000000 nop +800397a0: 04410002 bgez v0,800397ac <__vsnprintf_internal+0x5a0> +800397a4: 00000000 nop +800397a8: afc00054 sw zero,84(s8) + else + put_in_string(string, ssz, ' ', string_pos++); + } + }*/ + + write_padding(); +800397ac: 8fc2002c lw v0,44(s8) +800397b0: 00000000 nop +800397b4: 30420004 andi v0,v0,0x4 +800397b8: 1440002d bnez v0,80039870 <__vsnprintf_internal+0x664> +800397bc: 00000000 nop +800397c0: afc00034 sw zero,52(s8) +800397c4: 10000024 b 80039858 <__vsnprintf_internal+0x64c> +800397c8: 00000000 nop +800397cc: 8fc2002c lw v0,44(s8) +800397d0: 00000000 nop +800397d4: 30420002 andi v0,v0,0x2 +800397d8: 1040000f beqz v0,80039818 <__vsnprintf_internal+0x60c> +800397dc: 00000000 nop +800397e0: 8fc4004c lw a0,76(s8) +800397e4: 8fc30018 lw v1,24(s8) +800397e8: 00000000 nop +800397ec: 24620001 addiu v0,v1,1 +800397f0: afc20018 sw v0,24(s8) +800397f4: 8fc20118 lw v0,280(s8) +800397f8: 00603821 move a3,v1 +800397fc: 24060030 li a2,48 +80039800: 00802821 move a1,a0 +80039804: 8fc40108 lw a0,264(s8) +80039808: 0040f809 jalr v0 +8003980c: 00000000 nop +80039810: 1000000d b 80039848 <__vsnprintf_internal+0x63c> +80039814: 00000000 nop +80039818: 8fc4004c lw a0,76(s8) +8003981c: 8fc30018 lw v1,24(s8) +80039820: 00000000 nop +80039824: 24620001 addiu v0,v1,1 +80039828: afc20018 sw v0,24(s8) +8003982c: 8fc20118 lw v0,280(s8) +80039830: 00603821 move a3,v1 +80039834: 24060020 li a2,32 +80039838: 00802821 move a1,a0 +8003983c: 8fc40108 lw a0,264(s8) +80039840: 0040f809 jalr v0 +80039844: 00000000 nop +80039848: 8fc20034 lw v0,52(s8) +8003984c: 00000000 nop +80039850: 24420001 addiu v0,v0,1 +80039854: afc20034 sw v0,52(s8) +80039858: 8fc30034 lw v1,52(s8) +8003985c: 8fc20054 lw v0,84(s8) +80039860: 00000000 nop +80039864: 0062102a slt v0,v1,v0 +80039868: 1440ffd8 bnez v0,800397cc <__vsnprintf_internal+0x5c0> +8003986c: 00000000 nop + + for(x=19;x>=0;x--) +80039870: 24020013 li v0,19 +80039874: afc20034 sw v0,52(s8) +80039878: 10000081 b 80039a80 <__vsnprintf_internal+0x874> +8003987c: 00000000 nop + { + a = 1; +80039880: 24020001 li v0,1 +80039884: 00001821 move v1,zero +80039888: afc20040 sw v0,64(s8) +8003988c: afc30044 sw v1,68(s8) + for(y = 0; y<x; y++) +80039890: afc00038 sw zero,56(s8) +80039894: 10000026 b 80039930 <__vsnprintf_internal+0x724> +80039898: 00000000 nop + a *= 10; +8003989c: 8fc20040 lw v0,64(s8) +800398a0: 8fc30044 lw v1,68(s8) +800398a4: 000227c2 srl a0,v0,0x1f +800398a8: 00032840 sll a1,v1,0x1 +800398ac: afc5007c sw a1,124(s8) +800398b0: 8fc5007c lw a1,124(s8) +800398b4: 00000000 nop +800398b8: 00852025 or a0,a0,a1 +800398bc: afc4007c sw a0,124(s8) +800398c0: 00021040 sll v0,v0,0x1 +800398c4: afc20078 sw v0,120(s8) +800398c8: 8fc20078 lw v0,120(s8) +800398cc: 8fc3007c lw v1,124(s8) +800398d0: 00022782 srl a0,v0,0x1e +800398d4: 00032880 sll a1,v1,0x2 +800398d8: afc50084 sw a1,132(s8) +800398dc: 8fc50084 lw a1,132(s8) +800398e0: 00000000 nop +800398e4: 00852025 or a0,a0,a1 +800398e8: afc40084 sw a0,132(s8) +800398ec: 00022080 sll a0,v0,0x2 +800398f0: afc40080 sw a0,128(s8) +800398f4: 8fc80080 lw t0,128(s8) +800398f8: 8fc90084 lw t1,132(s8) +800398fc: 01003021 move a2,t0 +80039900: 00462021 addu a0,v0,a2 +80039904: 0082302b sltu a2,a0,v0 +80039908: 01203821 move a3,t1 +8003990c: 00672821 addu a1,v1,a3 +80039910: 00c51021 addu v0,a2,a1 +80039914: 00402821 move a1,v0 +80039918: afc40040 sw a0,64(s8) +8003991c: afc50044 sw a1,68(s8) + write_padding(); + + for(x=19;x>=0;x--) + { + a = 1; + for(y = 0; y<x; y++) +80039920: 8fc20038 lw v0,56(s8) +80039924: 00000000 nop +80039928: 24420001 addiu v0,v0,1 +8003992c: afc20038 sw v0,56(s8) +80039930: 8fc30038 lw v1,56(s8) +80039934: 8fc20034 lw v0,52(s8) +80039938: 00000000 nop +8003993c: 0062102a slt v0,v1,v0 +80039940: 1440ffd6 bnez v0,8003989c <__vsnprintf_internal+0x690> +80039944: 00000000 nop + a *= 10; + + b = (arg/a); +80039948: 8fc20070 lw v0,112(s8) +8003994c: 8fc30074 lw v1,116(s8) +80039950: 8fc60040 lw a2,64(s8) +80039954: 8fc70044 lw a3,68(s8) +80039958: 00402021 move a0,v0 +8003995c: 00602821 move a1,v1 +80039960: 0c00f0ae jal 8003c2b8 <__udivdi3> +80039964: 00000000 nop +80039968: afc20068 sw v0,104(s8) +8003996c: afc3006c sw v1,108(s8) + + if(b>=1) +80039970: 8fc30068 lw v1,104(s8) +80039974: 8fc2006c lw v0,108(s8) +80039978: 00000000 nop +8003997c: 00621825 or v1,v1,v0 +80039980: 10600002 beqz v1,8003998c <__vsnprintf_internal+0x780> +80039984: 00000000 nop + empty_digit = 0; +80039988: afc00048 sw zero,72(s8) + + if(empty_digit == 0 || x == 0) +8003998c: 8fc20048 lw v0,72(s8) +80039990: 00000000 nop +80039994: 10400005 beqz v0,800399ac <__vsnprintf_internal+0x7a0> +80039998: 00000000 nop +8003999c: 8fc20034 lw v0,52(s8) +800399a0: 00000000 nop +800399a4: 14400032 bnez v0,80039a70 <__vsnprintf_internal+0x864> +800399a8: 00000000 nop + { + arg -= b*a; +800399ac: 8fc80070 lw t0,112(s8) +800399b0: 8fc90074 lw t1,116(s8) +800399b4: 8fc3006c lw v1,108(s8) +800399b8: 8fc20040 lw v0,64(s8) +800399bc: 00000000 nop +800399c0: 00620018 mult v1,v0 +800399c4: 00002012 mflo a0 +800399c8: 8fc30044 lw v1,68(s8) +800399cc: 8fc20068 lw v0,104(s8) +800399d0: 00000000 nop +800399d4: 00620018 mult v1,v0 +800399d8: 00001012 mflo v0 +800399dc: 00822021 addu a0,a0,v0 +800399e0: 8fc30068 lw v1,104(s8) +800399e4: 8fc20040 lw v0,64(s8) +800399e8: 00000000 nop +800399ec: 00620019 multu v1,v0 +800399f0: 00001012 mflo v0 +800399f4: 00001810 mfhi v1 +800399f8: 00832021 addu a0,a0,v1 +800399fc: 00801821 move v1,a0 +80039a00: 01022023 subu a0,t0,v0 +80039a04: 0104302b sltu a2,t0,a0 +80039a08: 01232823 subu a1,t1,v1 +80039a0c: 00a61023 subu v0,a1,a2 +80039a10: 00402821 move a1,v0 +80039a14: 00801021 move v0,a0 +80039a18: 00a01821 move v1,a1 +80039a1c: afc20070 sw v0,112(s8) +80039a20: afc30074 sw v1,116(s8) + + put_in_string(string, ssz, b + '0', string_pos++); +80039a24: 8fc4004c lw a0,76(s8) +80039a28: 93c20068 lbu v0,104(s8) +80039a2c: 00000000 nop +80039a30: 24420030 addiu v0,v0,48 +80039a34: 304200ff andi v0,v0,0xff +80039a38: 00021600 sll v0,v0,0x18 +80039a3c: 00021603 sra v0,v0,0x18 +80039a40: 00402821 move a1,v0 +80039a44: 8fc30018 lw v1,24(s8) +80039a48: 00000000 nop +80039a4c: 24620001 addiu v0,v1,1 +80039a50: afc20018 sw v0,24(s8) +80039a54: 8fc20118 lw v0,280(s8) +80039a58: 00603821 move a3,v1 +80039a5c: 00a03021 move a2,a1 +80039a60: 00802821 move a1,a0 +80039a64: 8fc40108 lw a0,264(s8) +80039a68: 0040f809 jalr v0 +80039a6c: 00000000 nop + } + }*/ + + write_padding(); + + for(x=19;x>=0;x--) +80039a70: 8fc20034 lw v0,52(s8) +80039a74: 00000000 nop +80039a78: 2442ffff addiu v0,v0,-1 +80039a7c: afc20034 sw v0,52(s8) +80039a80: 8fc20034 lw v0,52(s8) +80039a84: 00000000 nop +80039a88: 0441ff7d bgez v0,80039880 <__vsnprintf_internal+0x674> +80039a8c: 00000000 nop + /*if(flags & SPRINTF_NEGFIELD_FLAG) + { + for(x = 0; x < pad_quantity; x++) + put_in_string(string, ssz, ' ', string_pos++); + }*/ + write_neg_padding(); +80039a90: 8fc2002c lw v0,44(s8) +80039a94: 00000000 nop +80039a98: 30420004 andi v0,v0,0x4 +80039a9c: 1040001a beqz v0,80039b08 <__vsnprintf_internal+0x8fc> +80039aa0: 00000000 nop +80039aa4: afc00034 sw zero,52(s8) +80039aa8: 10000011 b 80039af0 <__vsnprintf_internal+0x8e4> +80039aac: 00000000 nop +80039ab0: 8fc4004c lw a0,76(s8) +80039ab4: 8fc30018 lw v1,24(s8) +80039ab8: 00000000 nop +80039abc: 24620001 addiu v0,v1,1 +80039ac0: afc20018 sw v0,24(s8) +80039ac4: 8fc20118 lw v0,280(s8) +80039ac8: 00603821 move a3,v1 +80039acc: 24060020 li a2,32 +80039ad0: 00802821 move a1,a0 +80039ad4: 8fc40108 lw a0,264(s8) +80039ad8: 0040f809 jalr v0 +80039adc: 00000000 nop +80039ae0: 8fc20034 lw v0,52(s8) +80039ae4: 00000000 nop +80039ae8: 24420001 addiu v0,v0,1 +80039aec: afc20034 sw v0,52(s8) +80039af0: 8fc30034 lw v1,52(s8) +80039af4: 8fc20054 lw v0,84(s8) +80039af8: 00000000 nop +80039afc: 0062102a slt v0,v1,v0 +80039b00: 1440ffeb bnez v0,80039ab0 <__vsnprintf_internal+0x8a4> +80039b04: 00000000 nop + + directive_coming = 0; +80039b08: afc00028 sw zero,40(s8) + break; +80039b0c: 1000055a b 8003b078 <__vsnprintf_internal+0x1e6c> +80039b10: 00000000 nop + case 'u': // unsigned decimal + empty_digit = 1; +80039b14: 24020001 li v0,1 +80039b18: afc20048 sw v0,72(s8) + + if(argsize < SPRINTF_SIZE_LONG_LONG) +80039b1c: 8fc20030 lw v0,48(s8) +80039b20: 00000000 nop +80039b24: 28420004 slti v0,v0,4 +80039b28: 1040000f beqz v0,80039b68 <__vsnprintf_internal+0x95c> +80039b2c: 00000000 nop + arg = (unsigned long long)va_arg(ap, unsigned int); +80039b30: 8fc30114 lw v1,276(s8) +80039b34: 00000000 nop +80039b38: 24620004 addiu v0,v1,4 +80039b3c: afc20114 sw v0,276(s8) +80039b40: 8c620000 lw v0,0(v1) +80039b44: 00000000 nop +80039b48: afc200a8 sw v0,168(s8) +80039b4c: afc000ac sw zero,172(s8) +80039b50: 8fc200a8 lw v0,168(s8) +80039b54: 8fc300ac lw v1,172(s8) +80039b58: afc20070 sw v0,112(s8) +80039b5c: afc30074 sw v1,116(s8) +80039b60: 1000000c b 80039b94 <__vsnprintf_internal+0x988> +80039b64: 00000000 nop + else + arg = va_arg(ap, unsigned long long); +80039b68: 8fc20114 lw v0,276(s8) +80039b6c: 00000000 nop +80039b70: 24430007 addiu v1,v0,7 +80039b74: 2402fff8 li v0,-8 +80039b78: 00621824 and v1,v1,v0 +80039b7c: 24620008 addiu v0,v1,8 +80039b80: afc20114 sw v0,276(s8) +80039b84: 8c620000 lw v0,0(v1) +80039b88: 8c630004 lw v1,4(v1) +80039b8c: afc20070 sw v0,112(s8) +80039b90: afc30074 sw v1,116(s8) + + get_arg_in_size(argsize, &arg, 0); +80039b94: 27c20070 addiu v0,s8,112 +80039b98: 00003021 move a2,zero +80039b9c: 00402821 move a1,v0 +80039ba0: 8fc40030 lw a0,48(s8) +80039ba4: 0c00e13a jal 800384e8 <get_arg_in_size> +80039ba8: 00000000 nop + + calculate_real_padding(); +80039bac: 24020001 li v0,1 +80039bb0: afc20038 sw v0,56(s8) +80039bb4: afc00034 sw zero,52(s8) +80039bb8: 1000002a b 80039c64 <__vsnprintf_internal+0xa58> +80039bbc: 00000000 nop +80039bc0: 8fc20034 lw v0,52(s8) +80039bc4: 00000000 nop +80039bc8: 14400007 bnez v0,80039be8 <__vsnprintf_internal+0x9dc> +80039bcc: 00000000 nop +80039bd0: 8fc20054 lw v0,84(s8) +80039bd4: 00000000 nop +80039bd8: 2442ffff addiu v0,v0,-1 +80039bdc: afc20054 sw v0,84(s8) +80039be0: 10000014 b 80039c34 <__vsnprintf_internal+0xa28> +80039be4: 00000000 nop +80039be8: 8fc40070 lw a0,112(s8) +80039bec: 8fc50074 lw a1,116(s8) +80039bf0: 8fc20038 lw v0,56(s8) +80039bf4: 00000000 nop +80039bf8: afc200b0 sw v0,176(s8) +80039bfc: 000217c3 sra v0,v0,0x1f +80039c00: afc200b4 sw v0,180(s8) +80039c04: 8fc600b0 lw a2,176(s8) +80039c08: 8fc700b4 lw a3,180(s8) +80039c0c: 0c00f0ae jal 8003c2b8 <__udivdi3> +80039c10: 00000000 nop +80039c14: 00402021 move a0,v0 +80039c18: 00832025 or a0,a0,v1 +80039c1c: 10800005 beqz a0,80039c34 <__vsnprintf_internal+0xa28> +80039c20: 00000000 nop +80039c24: 8fc20054 lw v0,84(s8) +80039c28: 00000000 nop +80039c2c: 2442ffff addiu v0,v0,-1 +80039c30: afc20054 sw v0,84(s8) +80039c34: 8fc20038 lw v0,56(s8) +80039c38: 00000000 nop +80039c3c: 00401821 move v1,v0 +80039c40: 00031040 sll v0,v1,0x1 +80039c44: 00401821 move v1,v0 +80039c48: 00031080 sll v0,v1,0x2 +80039c4c: 00621021 addu v0,v1,v0 +80039c50: afc20038 sw v0,56(s8) +80039c54: 8fc20034 lw v0,52(s8) +80039c58: 00000000 nop +80039c5c: 24420001 addiu v0,v0,1 +80039c60: afc20034 sw v0,52(s8) +80039c64: 8fc20034 lw v0,52(s8) +80039c68: 00000000 nop +80039c6c: 28420014 slti v0,v0,20 +80039c70: 1440ffd3 bnez v0,80039bc0 <__vsnprintf_internal+0x9b4> +80039c74: 00000000 nop +80039c78: 8fc20054 lw v0,84(s8) +80039c7c: 00000000 nop +80039c80: 04410002 bgez v0,80039c8c <__vsnprintf_internal+0xa80> +80039c84: 00000000 nop +80039c88: afc00054 sw zero,84(s8) + write_padding(); +80039c8c: 8fc2002c lw v0,44(s8) +80039c90: 00000000 nop +80039c94: 30420004 andi v0,v0,0x4 +80039c98: 1440002d bnez v0,80039d50 <__vsnprintf_internal+0xb44> +80039c9c: 00000000 nop +80039ca0: afc00034 sw zero,52(s8) +80039ca4: 10000024 b 80039d38 <__vsnprintf_internal+0xb2c> +80039ca8: 00000000 nop +80039cac: 8fc2002c lw v0,44(s8) +80039cb0: 00000000 nop +80039cb4: 30420002 andi v0,v0,0x2 +80039cb8: 1040000f beqz v0,80039cf8 <__vsnprintf_internal+0xaec> +80039cbc: 00000000 nop +80039cc0: 8fc4004c lw a0,76(s8) +80039cc4: 8fc30018 lw v1,24(s8) +80039cc8: 00000000 nop +80039ccc: 24620001 addiu v0,v1,1 +80039cd0: afc20018 sw v0,24(s8) +80039cd4: 8fc20118 lw v0,280(s8) +80039cd8: 00603821 move a3,v1 +80039cdc: 24060030 li a2,48 +80039ce0: 00802821 move a1,a0 +80039ce4: 8fc40108 lw a0,264(s8) +80039ce8: 0040f809 jalr v0 +80039cec: 00000000 nop +80039cf0: 1000000d b 80039d28 <__vsnprintf_internal+0xb1c> +80039cf4: 00000000 nop +80039cf8: 8fc4004c lw a0,76(s8) +80039cfc: 8fc30018 lw v1,24(s8) +80039d00: 00000000 nop +80039d04: 24620001 addiu v0,v1,1 +80039d08: afc20018 sw v0,24(s8) +80039d0c: 8fc20118 lw v0,280(s8) +80039d10: 00603821 move a3,v1 +80039d14: 24060020 li a2,32 +80039d18: 00802821 move a1,a0 +80039d1c: 8fc40108 lw a0,264(s8) +80039d20: 0040f809 jalr v0 +80039d24: 00000000 nop +80039d28: 8fc20034 lw v0,52(s8) +80039d2c: 00000000 nop +80039d30: 24420001 addiu v0,v0,1 +80039d34: afc20034 sw v0,52(s8) +80039d38: 8fc30034 lw v1,52(s8) +80039d3c: 8fc20054 lw v0,84(s8) +80039d40: 00000000 nop +80039d44: 0062102a slt v0,v1,v0 +80039d48: 1440ffd8 bnez v0,80039cac <__vsnprintf_internal+0xaa0> +80039d4c: 00000000 nop + + for(x=19;x>=0;x--) +80039d50: 24020013 li v0,19 +80039d54: afc20034 sw v0,52(s8) +80039d58: 10000081 b 80039f60 <__vsnprintf_internal+0xd54> +80039d5c: 00000000 nop + { + a = 1; +80039d60: 24020001 li v0,1 +80039d64: 00001821 move v1,zero +80039d68: afc20040 sw v0,64(s8) +80039d6c: afc30044 sw v1,68(s8) + for(y = 0; y<x; y++) +80039d70: afc00038 sw zero,56(s8) +80039d74: 10000026 b 80039e10 <__vsnprintf_internal+0xc04> +80039d78: 00000000 nop + a *= 10; +80039d7c: 8fc20040 lw v0,64(s8) +80039d80: 8fc30044 lw v1,68(s8) +80039d84: 000227c2 srl a0,v0,0x1f +80039d88: 00032840 sll a1,v1,0x1 +80039d8c: afc5008c sw a1,140(s8) +80039d90: 8fc5008c lw a1,140(s8) +80039d94: 00000000 nop +80039d98: 00852025 or a0,a0,a1 +80039d9c: afc4008c sw a0,140(s8) +80039da0: 00021040 sll v0,v0,0x1 +80039da4: afc20088 sw v0,136(s8) +80039da8: 8fc20088 lw v0,136(s8) +80039dac: 8fc3008c lw v1,140(s8) +80039db0: 00022782 srl a0,v0,0x1e +80039db4: 00032880 sll a1,v1,0x2 +80039db8: afc50094 sw a1,148(s8) +80039dbc: 8fc50094 lw a1,148(s8) +80039dc0: 00000000 nop +80039dc4: 00852025 or a0,a0,a1 +80039dc8: afc40094 sw a0,148(s8) +80039dcc: 00022080 sll a0,v0,0x2 +80039dd0: afc40090 sw a0,144(s8) +80039dd4: 8fc80090 lw t0,144(s8) +80039dd8: 8fc90094 lw t1,148(s8) +80039ddc: 01003021 move a2,t0 +80039de0: 00462021 addu a0,v0,a2 +80039de4: 0082302b sltu a2,a0,v0 +80039de8: 01203821 move a3,t1 +80039dec: 00672821 addu a1,v1,a3 +80039df0: 00c51021 addu v0,a2,a1 +80039df4: 00402821 move a1,v0 +80039df8: afc40040 sw a0,64(s8) +80039dfc: afc50044 sw a1,68(s8) + write_padding(); + + for(x=19;x>=0;x--) + { + a = 1; + for(y = 0; y<x; y++) +80039e00: 8fc20038 lw v0,56(s8) +80039e04: 00000000 nop +80039e08: 24420001 addiu v0,v0,1 +80039e0c: afc20038 sw v0,56(s8) +80039e10: 8fc30038 lw v1,56(s8) +80039e14: 8fc20034 lw v0,52(s8) +80039e18: 00000000 nop +80039e1c: 0062102a slt v0,v1,v0 +80039e20: 1440ffd6 bnez v0,80039d7c <__vsnprintf_internal+0xb70> +80039e24: 00000000 nop + a *= 10; + + + + b = (arg/a); +80039e28: 8fc20070 lw v0,112(s8) +80039e2c: 8fc30074 lw v1,116(s8) +80039e30: 8fc60040 lw a2,64(s8) +80039e34: 8fc70044 lw a3,68(s8) +80039e38: 00402021 move a0,v0 +80039e3c: 00602821 move a1,v1 +80039e40: 0c00f0ae jal 8003c2b8 <__udivdi3> +80039e44: 00000000 nop +80039e48: afc20068 sw v0,104(s8) +80039e4c: afc3006c sw v1,108(s8) + + if(b>=1) +80039e50: 8fc30068 lw v1,104(s8) +80039e54: 8fc2006c lw v0,108(s8) +80039e58: 00000000 nop +80039e5c: 00621825 or v1,v1,v0 +80039e60: 10600002 beqz v1,80039e6c <__vsnprintf_internal+0xc60> +80039e64: 00000000 nop + empty_digit = 0; +80039e68: afc00048 sw zero,72(s8) + + if(empty_digit == 0 || x == 0) +80039e6c: 8fc20048 lw v0,72(s8) +80039e70: 00000000 nop +80039e74: 10400005 beqz v0,80039e8c <__vsnprintf_internal+0xc80> +80039e78: 00000000 nop +80039e7c: 8fc20034 lw v0,52(s8) +80039e80: 00000000 nop +80039e84: 14400032 bnez v0,80039f50 <__vsnprintf_internal+0xd44> +80039e88: 00000000 nop + { + arg -= b*a; +80039e8c: 8fc80070 lw t0,112(s8) +80039e90: 8fc90074 lw t1,116(s8) +80039e94: 8fc3006c lw v1,108(s8) +80039e98: 8fc20040 lw v0,64(s8) +80039e9c: 00000000 nop +80039ea0: 00620018 mult v1,v0 +80039ea4: 00002012 mflo a0 +80039ea8: 8fc30044 lw v1,68(s8) +80039eac: 8fc20068 lw v0,104(s8) +80039eb0: 00000000 nop +80039eb4: 00620018 mult v1,v0 +80039eb8: 00001012 mflo v0 +80039ebc: 00822021 addu a0,a0,v0 +80039ec0: 8fc30068 lw v1,104(s8) +80039ec4: 8fc20040 lw v0,64(s8) +80039ec8: 00000000 nop +80039ecc: 00620019 multu v1,v0 +80039ed0: 00001012 mflo v0 +80039ed4: 00001810 mfhi v1 +80039ed8: 00832021 addu a0,a0,v1 +80039edc: 00801821 move v1,a0 +80039ee0: 01022023 subu a0,t0,v0 +80039ee4: 0104302b sltu a2,t0,a0 +80039ee8: 01232823 subu a1,t1,v1 +80039eec: 00a61023 subu v0,a1,a2 +80039ef0: 00402821 move a1,v0 +80039ef4: 00801021 move v0,a0 +80039ef8: 00a01821 move v1,a1 +80039efc: afc20070 sw v0,112(s8) +80039f00: afc30074 sw v1,116(s8) + + put_in_string(string, ssz, b + '0', string_pos++); +80039f04: 8fc4004c lw a0,76(s8) +80039f08: 93c20068 lbu v0,104(s8) +80039f0c: 00000000 nop +80039f10: 24420030 addiu v0,v0,48 +80039f14: 304200ff andi v0,v0,0xff +80039f18: 00021600 sll v0,v0,0x18 +80039f1c: 00021603 sra v0,v0,0x18 +80039f20: 00402821 move a1,v0 +80039f24: 8fc30018 lw v1,24(s8) +80039f28: 00000000 nop +80039f2c: 24620001 addiu v0,v1,1 +80039f30: afc20018 sw v0,24(s8) +80039f34: 8fc20118 lw v0,280(s8) +80039f38: 00603821 move a3,v1 +80039f3c: 00a03021 move a2,a1 +80039f40: 00802821 move a1,a0 +80039f44: 8fc40108 lw a0,264(s8) +80039f48: 0040f809 jalr v0 +80039f4c: 00000000 nop + get_arg_in_size(argsize, &arg, 0); + + calculate_real_padding(); + write_padding(); + + for(x=19;x>=0;x--) +80039f50: 8fc20034 lw v0,52(s8) +80039f54: 00000000 nop +80039f58: 2442ffff addiu v0,v0,-1 +80039f5c: afc20034 sw v0,52(s8) +80039f60: 8fc20034 lw v0,52(s8) +80039f64: 00000000 nop +80039f68: 0441ff7d bgez v0,80039d60 <__vsnprintf_internal+0xb54> +80039f6c: 00000000 nop + + put_in_string(string, ssz, b + '0', string_pos++); + } + } + + write_neg_padding(); +80039f70: 8fc2002c lw v0,44(s8) +80039f74: 00000000 nop +80039f78: 30420004 andi v0,v0,0x4 +80039f7c: 1040001a beqz v0,80039fe8 <__vsnprintf_internal+0xddc> +80039f80: 00000000 nop +80039f84: afc00034 sw zero,52(s8) +80039f88: 10000011 b 80039fd0 <__vsnprintf_internal+0xdc4> +80039f8c: 00000000 nop +80039f90: 8fc4004c lw a0,76(s8) +80039f94: 8fc30018 lw v1,24(s8) +80039f98: 00000000 nop +80039f9c: 24620001 addiu v0,v1,1 +80039fa0: afc20018 sw v0,24(s8) +80039fa4: 8fc20118 lw v0,280(s8) +80039fa8: 00603821 move a3,v1 +80039fac: 24060020 li a2,32 +80039fb0: 00802821 move a1,a0 +80039fb4: 8fc40108 lw a0,264(s8) +80039fb8: 0040f809 jalr v0 +80039fbc: 00000000 nop +80039fc0: 8fc20034 lw v0,52(s8) +80039fc4: 00000000 nop +80039fc8: 24420001 addiu v0,v0,1 +80039fcc: afc20034 sw v0,52(s8) +80039fd0: 8fc30034 lw v1,52(s8) +80039fd4: 8fc20054 lw v0,84(s8) +80039fd8: 00000000 nop +80039fdc: 0062102a slt v0,v1,v0 +80039fe0: 1440ffeb bnez v0,80039f90 <__vsnprintf_internal+0xd84> +80039fe4: 00000000 nop + + directive_coming = 0; +80039fe8: afc00028 sw zero,40(s8) + break; +80039fec: 10000422 b 8003b078 <__vsnprintf_internal+0x1e6c> +80039ff0: 00000000 nop + case 'x': // Hexadecimal + case 'X': // Hexadecimal with big letters + case 'p': // Hexadecimal with small letters with '0x' prefix + empty_digit = 1; +80039ff4: 24020001 li v0,1 +80039ff8: afc20048 sw v0,72(s8) + + if(argsize < SPRINTF_SIZE_LONG_LONG) +80039ffc: 8fc20030 lw v0,48(s8) +8003a000: 00000000 nop +8003a004: 28420004 slti v0,v0,4 +8003a008: 1040000f beqz v0,8003a048 <__vsnprintf_internal+0xe3c> +8003a00c: 00000000 nop + arg = (unsigned long long)va_arg(ap, unsigned int); +8003a010: 8fc30114 lw v1,276(s8) +8003a014: 00000000 nop +8003a018: 24620004 addiu v0,v1,4 +8003a01c: afc20114 sw v0,276(s8) +8003a020: 8c620000 lw v0,0(v1) +8003a024: 00000000 nop +8003a028: afc200b8 sw v0,184(s8) +8003a02c: afc000bc sw zero,188(s8) +8003a030: 8fc200b8 lw v0,184(s8) +8003a034: 8fc300bc lw v1,188(s8) +8003a038: afc20070 sw v0,112(s8) +8003a03c: afc30074 sw v1,116(s8) +8003a040: 1000000c b 8003a074 <__vsnprintf_internal+0xe68> +8003a044: 00000000 nop + else + arg = va_arg(ap, unsigned long long int); +8003a048: 8fc20114 lw v0,276(s8) +8003a04c: 00000000 nop +8003a050: 24430007 addiu v1,v0,7 +8003a054: 2402fff8 li v0,-8 +8003a058: 00621824 and v1,v1,v0 +8003a05c: 24620008 addiu v0,v1,8 +8003a060: afc20114 sw v0,276(s8) +8003a064: 8c620000 lw v0,0(v1) +8003a068: 8c630004 lw v1,4(v1) +8003a06c: afc20070 sw v0,112(s8) +8003a070: afc30074 sw v1,116(s8) + + get_arg_in_size(argsize, &arg, 0); +8003a074: 27c20070 addiu v0,s8,112 +8003a078: 00003021 move a2,zero +8003a07c: 00402821 move a1,v0 +8003a080: 8fc40030 lw a0,48(s8) +8003a084: 0c00e13a jal 800384e8 <get_arg_in_size> +8003a088: 00000000 nop + + if(fmt_pos == 'p') +8003a08c: 8fc3001c lw v1,28(s8) +8003a090: 24020070 li v0,112 +8003a094: 14620005 bne v1,v0,8003a0ac <__vsnprintf_internal+0xea0> +8003a098: 00000000 nop + flags |= SPRINTF_ALT_FLAG; +8003a09c: 8fc2002c lw v0,44(s8) +8003a0a0: 00000000 nop +8003a0a4: 34420001 ori v0,v0,0x1 +8003a0a8: afc2002c sw v0,44(s8) + + if(flags & SPRINTF_ALT_FLAG) +8003a0ac: 8fc2002c lw v0,44(s8) +8003a0b0: 00000000 nop +8003a0b4: 30420001 andi v0,v0,0x1 +8003a0b8: 1040002f beqz v0,8003a178 <__vsnprintf_internal+0xf6c> +8003a0bc: 00000000 nop + { + put_in_string(string, ssz, '0', string_pos++); +8003a0c0: 8fc4004c lw a0,76(s8) +8003a0c4: 8fc30018 lw v1,24(s8) +8003a0c8: 00000000 nop +8003a0cc: 24620001 addiu v0,v1,1 +8003a0d0: afc20018 sw v0,24(s8) +8003a0d4: 8fc20118 lw v0,280(s8) +8003a0d8: 00603821 move a3,v1 +8003a0dc: 24060030 li a2,48 +8003a0e0: 00802821 move a1,a0 +8003a0e4: 8fc40108 lw a0,264(s8) +8003a0e8: 0040f809 jalr v0 +8003a0ec: 00000000 nop + + if(fmt[fmt_pos] == 'X') +8003a0f0: 8fc3001c lw v1,28(s8) +8003a0f4: 8fc20110 lw v0,272(s8) +8003a0f8: 00000000 nop +8003a0fc: 00431021 addu v0,v0,v1 +8003a100: 80430000 lb v1,0(v0) +8003a104: 24020058 li v0,88 +8003a108: 1462000f bne v1,v0,8003a148 <__vsnprintf_internal+0xf3c> +8003a10c: 00000000 nop + put_in_string(string, ssz, 'X', string_pos++); +8003a110: 8fc4004c lw a0,76(s8) +8003a114: 8fc30018 lw v1,24(s8) +8003a118: 00000000 nop +8003a11c: 24620001 addiu v0,v1,1 +8003a120: afc20018 sw v0,24(s8) +8003a124: 8fc20118 lw v0,280(s8) +8003a128: 00603821 move a3,v1 +8003a12c: 24060058 li a2,88 +8003a130: 00802821 move a1,a0 +8003a134: 8fc40108 lw a0,264(s8) +8003a138: 0040f809 jalr v0 +8003a13c: 00000000 nop +8003a140: 1000000d b 8003a178 <__vsnprintf_internal+0xf6c> +8003a144: 00000000 nop + else + put_in_string(string, ssz, 'x', string_pos++); +8003a148: 8fc4004c lw a0,76(s8) +8003a14c: 8fc30018 lw v1,24(s8) +8003a150: 00000000 nop +8003a154: 24620001 addiu v0,v1,1 +8003a158: afc20018 sw v0,24(s8) +8003a15c: 8fc20118 lw v0,280(s8) +8003a160: 00603821 move a3,v1 +8003a164: 24060078 li a2,120 +8003a168: 00802821 move a1,a0 +8003a16c: 8fc40108 lw a0,264(s8) +8003a170: 0040f809 jalr v0 +8003a174: 00000000 nop + } + + calculate_real_padding_hex(); +8003a178: afc0005c sw zero,92(s8) +8003a17c: afc00034 sw zero,52(s8) +8003a180: 10000026 b 8003a21c <__vsnprintf_internal+0x1010> +8003a184: 00000000 nop +8003a188: 8fc40070 lw a0,112(s8) +8003a18c: 8fc50074 lw a1,116(s8) +8003a190: 8fc20034 lw v0,52(s8) +8003a194: 00000000 nop +8003a198: 00021880 sll v1,v0,0x2 +8003a19c: 30620020 andi v0,v1,0x20 +8003a1a0: 10400005 beqz v0,8003a1b8 <__vsnprintf_internal+0xfac> +8003a1a4: 00000000 nop +8003a1a8: 00658006 srlv s0,a1,v1 +8003a1ac: 00008821 move s1,zero +8003a1b0: 10000008 b 8003a1d4 <__vsnprintf_internal+0xfc8> +8003a1b4: 00000000 nop +8003a1b8: 00053040 sll a2,a1,0x1 +8003a1bc: 2402ffff li v0,-1 +8003a1c0: 00621026 xor v0,v1,v0 +8003a1c4: 00461004 sllv v0,a2,v0 +8003a1c8: 00648006 srlv s0,a0,v1 +8003a1cc: 00508025 or s0,v0,s0 +8003a1d0: 00658806 srlv s1,a1,v1 +8003a1d4: 3202000f andi v0,s0,0xf +8003a1d8: afc200c0 sw v0,192(s8) +8003a1dc: 32220000 andi v0,s1,0x0 +8003a1e0: afc200c4 sw v0,196(s8) +8003a1e4: 8fc400c0 lw a0,192(s8) +8003a1e8: 8fc500c4 lw a1,196(s8) +8003a1ec: 00801021 move v0,a0 +8003a1f0: 00a01821 move v1,a1 +8003a1f4: 00431025 or v0,v0,v1 +8003a1f8: 10400004 beqz v0,8003a20c <__vsnprintf_internal+0x1000> +8003a1fc: 00000000 nop +8003a200: 8fc20034 lw v0,52(s8) +8003a204: 00000000 nop +8003a208: afc2005c sw v0,92(s8) +8003a20c: 8fc20034 lw v0,52(s8) +8003a210: 00000000 nop +8003a214: 24420001 addiu v0,v0,1 +8003a218: afc20034 sw v0,52(s8) +8003a21c: 8fc20034 lw v0,52(s8) +8003a220: 00000000 nop +8003a224: 28420010 slti v0,v0,16 +8003a228: 1440ffd7 bnez v0,8003a188 <__vsnprintf_internal+0xf7c> +8003a22c: 00000000 nop +8003a230: 8fc20054 lw v0,84(s8) +8003a234: 00000000 nop +8003a238: 2443ffff addiu v1,v0,-1 +8003a23c: 8fc2005c lw v0,92(s8) +8003a240: 00000000 nop +8003a244: 00621023 subu v0,v1,v0 +8003a248: afc20054 sw v0,84(s8) +8003a24c: 8fc20054 lw v0,84(s8) +8003a250: 00000000 nop +8003a254: 04410002 bgez v0,8003a260 <__vsnprintf_internal+0x1054> +8003a258: 00000000 nop +8003a25c: afc00054 sw zero,84(s8) + write_padding(); +8003a260: 8fc2002c lw v0,44(s8) +8003a264: 00000000 nop +8003a268: 30420004 andi v0,v0,0x4 +8003a26c: 1440002d bnez v0,8003a324 <__vsnprintf_internal+0x1118> +8003a270: 00000000 nop +8003a274: afc00034 sw zero,52(s8) +8003a278: 10000024 b 8003a30c <__vsnprintf_internal+0x1100> +8003a27c: 00000000 nop +8003a280: 8fc2002c lw v0,44(s8) +8003a284: 00000000 nop +8003a288: 30420002 andi v0,v0,0x2 +8003a28c: 1040000f beqz v0,8003a2cc <__vsnprintf_internal+0x10c0> +8003a290: 00000000 nop +8003a294: 8fc4004c lw a0,76(s8) +8003a298: 8fc30018 lw v1,24(s8) +8003a29c: 00000000 nop +8003a2a0: 24620001 addiu v0,v1,1 +8003a2a4: afc20018 sw v0,24(s8) +8003a2a8: 8fc20118 lw v0,280(s8) +8003a2ac: 00603821 move a3,v1 +8003a2b0: 24060030 li a2,48 +8003a2b4: 00802821 move a1,a0 +8003a2b8: 8fc40108 lw a0,264(s8) +8003a2bc: 0040f809 jalr v0 +8003a2c0: 00000000 nop +8003a2c4: 1000000d b 8003a2fc <__vsnprintf_internal+0x10f0> +8003a2c8: 00000000 nop +8003a2cc: 8fc4004c lw a0,76(s8) +8003a2d0: 8fc30018 lw v1,24(s8) +8003a2d4: 00000000 nop +8003a2d8: 24620001 addiu v0,v1,1 +8003a2dc: afc20018 sw v0,24(s8) +8003a2e0: 8fc20118 lw v0,280(s8) +8003a2e4: 00603821 move a3,v1 +8003a2e8: 24060020 li a2,32 +8003a2ec: 00802821 move a1,a0 +8003a2f0: 8fc40108 lw a0,264(s8) +8003a2f4: 0040f809 jalr v0 +8003a2f8: 00000000 nop +8003a2fc: 8fc20034 lw v0,52(s8) +8003a300: 00000000 nop +8003a304: 24420001 addiu v0,v0,1 +8003a308: afc20034 sw v0,52(s8) +8003a30c: 8fc30034 lw v1,52(s8) +8003a310: 8fc20054 lw v0,84(s8) +8003a314: 00000000 nop +8003a318: 0062102a slt v0,v1,v0 +8003a31c: 1440ffd8 bnez v0,8003a280 <__vsnprintf_internal+0x1074> +8003a320: 00000000 nop + + for(x=15;x>=0;x--) +8003a324: 2402000f li v0,15 +8003a328: afc20034 sw v0,52(s8) +8003a32c: 10000085 b 8003a544 <__vsnprintf_internal+0x1338> +8003a330: 00000000 nop + { + y = arg >> (x << 2); +8003a334: 8fc40070 lw a0,112(s8) +8003a338: 8fc50074 lw a1,116(s8) +8003a33c: 8fc20034 lw v0,52(s8) +8003a340: 00000000 nop +8003a344: 00021880 sll v1,v0,0x2 +8003a348: 30620020 andi v0,v1,0x20 +8003a34c: 10400005 beqz v0,8003a364 <__vsnprintf_internal+0x1158> +8003a350: 00000000 nop +8003a354: 00659006 srlv s2,a1,v1 +8003a358: 00009821 move s3,zero +8003a35c: 10000008 b 8003a380 <__vsnprintf_internal+0x1174> +8003a360: 00000000 nop +8003a364: 00053040 sll a2,a1,0x1 +8003a368: 2402ffff li v0,-1 +8003a36c: 00621026 xor v0,v1,v0 +8003a370: 00461004 sllv v0,a2,v0 +8003a374: 00649006 srlv s2,a0,v1 +8003a378: 00529025 or s2,v0,s2 +8003a37c: 00659806 srlv s3,a1,v1 +8003a380: afd20038 sw s2,56(s8) + y &= 0xf; +8003a384: 8fc20038 lw v0,56(s8) +8003a388: 00000000 nop +8003a38c: 3042000f andi v0,v0,0xf +8003a390: afc20038 sw v0,56(s8) + + if(y>=1) +8003a394: 8fc20038 lw v0,56(s8) +8003a398: 00000000 nop +8003a39c: 18400002 blez v0,8003a3a8 <__vsnprintf_internal+0x119c> +8003a3a0: 00000000 nop + empty_digit = 0; +8003a3a4: afc00048 sw zero,72(s8) + + if(empty_digit == 0 || x == 0) +8003a3a8: 8fc20048 lw v0,72(s8) +8003a3ac: 00000000 nop +8003a3b0: 10400005 beqz v0,8003a3c8 <__vsnprintf_internal+0x11bc> +8003a3b4: 00000000 nop +8003a3b8: 8fc20034 lw v0,52(s8) +8003a3bc: 00000000 nop +8003a3c0: 1440005c bnez v0,8003a534 <__vsnprintf_internal+0x1328> +8003a3c4: 00000000 nop + { + if(y>=0 && y<=9) +8003a3c8: 8fc20038 lw v0,56(s8) +8003a3cc: 00000000 nop +8003a3d0: 0440001c bltz v0,8003a444 <__vsnprintf_internal+0x1238> +8003a3d4: 00000000 nop +8003a3d8: 8fc20038 lw v0,56(s8) +8003a3dc: 00000000 nop +8003a3e0: 2842000a slti v0,v0,10 +8003a3e4: 10400017 beqz v0,8003a444 <__vsnprintf_internal+0x1238> +8003a3e8: 00000000 nop + put_in_string(string, ssz, y + '0', string_pos++); +8003a3ec: 8fc4004c lw a0,76(s8) +8003a3f0: 8fc20038 lw v0,56(s8) +8003a3f4: 00000000 nop +8003a3f8: 304200ff andi v0,v0,0xff +8003a3fc: 24420030 addiu v0,v0,48 +8003a400: 304200ff andi v0,v0,0xff +8003a404: 00021600 sll v0,v0,0x18 +8003a408: 00021603 sra v0,v0,0x18 +8003a40c: 00402821 move a1,v0 +8003a410: 8fc30018 lw v1,24(s8) +8003a414: 00000000 nop +8003a418: 24620001 addiu v0,v1,1 +8003a41c: afc20018 sw v0,24(s8) +8003a420: 8fc20118 lw v0,280(s8) +8003a424: 00603821 move a3,v1 +8003a428: 00a03021 move a2,a1 +8003a42c: 00802821 move a1,a0 +8003a430: 8fc40108 lw a0,264(s8) +8003a434: 0040f809 jalr v0 +8003a438: 00000000 nop +8003a43c: 1000003d b 8003a534 <__vsnprintf_internal+0x1328> +8003a440: 00000000 nop + else if(y>=0xA && y<=0xF) +8003a444: 8fc20038 lw v0,56(s8) +8003a448: 00000000 nop +8003a44c: 2842000a slti v0,v0,10 +8003a450: 14400038 bnez v0,8003a534 <__vsnprintf_internal+0x1328> +8003a454: 00000000 nop +8003a458: 8fc20038 lw v0,56(s8) +8003a45c: 00000000 nop +8003a460: 28420010 slti v0,v0,16 +8003a464: 10400033 beqz v0,8003a534 <__vsnprintf_internal+0x1328> +8003a468: 00000000 nop + { + if(fmt[fmt_pos] == 'X') +8003a46c: 8fc3001c lw v1,28(s8) +8003a470: 8fc20110 lw v0,272(s8) +8003a474: 00000000 nop +8003a478: 00431021 addu v0,v0,v1 +8003a47c: 80430000 lb v1,0(v0) +8003a480: 24020058 li v0,88 +8003a484: 14620017 bne v1,v0,8003a4e4 <__vsnprintf_internal+0x12d8> +8003a488: 00000000 nop + put_in_string(string, ssz, (y - 0xa) + 'A', string_pos++); +8003a48c: 8fc4004c lw a0,76(s8) +8003a490: 8fc20038 lw v0,56(s8) +8003a494: 00000000 nop +8003a498: 304200ff andi v0,v0,0xff +8003a49c: 24420037 addiu v0,v0,55 +8003a4a0: 304200ff andi v0,v0,0xff +8003a4a4: 00021600 sll v0,v0,0x18 +8003a4a8: 00021603 sra v0,v0,0x18 +8003a4ac: 00402821 move a1,v0 +8003a4b0: 8fc30018 lw v1,24(s8) +8003a4b4: 00000000 nop +8003a4b8: 24620001 addiu v0,v1,1 +8003a4bc: afc20018 sw v0,24(s8) +8003a4c0: 8fc20118 lw v0,280(s8) +8003a4c4: 00603821 move a3,v1 +8003a4c8: 00a03021 move a2,a1 +8003a4cc: 00802821 move a1,a0 +8003a4d0: 8fc40108 lw a0,264(s8) +8003a4d4: 0040f809 jalr v0 +8003a4d8: 00000000 nop +8003a4dc: 10000015 b 8003a534 <__vsnprintf_internal+0x1328> +8003a4e0: 00000000 nop + else + put_in_string(string, ssz, (y - 0xa) + 'a', string_pos++); +8003a4e4: 8fc4004c lw a0,76(s8) +8003a4e8: 8fc20038 lw v0,56(s8) +8003a4ec: 00000000 nop +8003a4f0: 304200ff andi v0,v0,0xff +8003a4f4: 24420057 addiu v0,v0,87 +8003a4f8: 304200ff andi v0,v0,0xff +8003a4fc: 00021600 sll v0,v0,0x18 +8003a500: 00021603 sra v0,v0,0x18 +8003a504: 00402821 move a1,v0 +8003a508: 8fc30018 lw v1,24(s8) +8003a50c: 00000000 nop +8003a510: 24620001 addiu v0,v1,1 +8003a514: afc20018 sw v0,24(s8) +8003a518: 8fc20118 lw v0,280(s8) +8003a51c: 00603821 move a3,v1 +8003a520: 00a03021 move a2,a1 +8003a524: 00802821 move a1,a0 +8003a528: 8fc40108 lw a0,264(s8) +8003a52c: 0040f809 jalr v0 +8003a530: 00000000 nop + } + + calculate_real_padding_hex(); + write_padding(); + + for(x=15;x>=0;x--) +8003a534: 8fc20034 lw v0,52(s8) +8003a538: 00000000 nop +8003a53c: 2442ffff addiu v0,v0,-1 +8003a540: afc20034 sw v0,52(s8) +8003a544: 8fc20034 lw v0,52(s8) +8003a548: 00000000 nop +8003a54c: 0441ff79 bgez v0,8003a334 <__vsnprintf_internal+0x1128> +8003a550: 00000000 nop + put_in_string(string, ssz, (y - 0xa) + 'a', string_pos++); + } + } + } + + write_neg_padding(); +8003a554: 8fc2002c lw v0,44(s8) +8003a558: 00000000 nop +8003a55c: 30420004 andi v0,v0,0x4 +8003a560: 1040001a beqz v0,8003a5cc <__vsnprintf_internal+0x13c0> +8003a564: 00000000 nop +8003a568: afc00034 sw zero,52(s8) +8003a56c: 10000011 b 8003a5b4 <__vsnprintf_internal+0x13a8> +8003a570: 00000000 nop +8003a574: 8fc4004c lw a0,76(s8) +8003a578: 8fc30018 lw v1,24(s8) +8003a57c: 00000000 nop +8003a580: 24620001 addiu v0,v1,1 +8003a584: afc20018 sw v0,24(s8) +8003a588: 8fc20118 lw v0,280(s8) +8003a58c: 00603821 move a3,v1 +8003a590: 24060020 li a2,32 +8003a594: 00802821 move a1,a0 +8003a598: 8fc40108 lw a0,264(s8) +8003a59c: 0040f809 jalr v0 +8003a5a0: 00000000 nop +8003a5a4: 8fc20034 lw v0,52(s8) +8003a5a8: 00000000 nop +8003a5ac: 24420001 addiu v0,v0,1 +8003a5b0: afc20034 sw v0,52(s8) +8003a5b4: 8fc30034 lw v1,52(s8) +8003a5b8: 8fc20054 lw v0,84(s8) +8003a5bc: 00000000 nop +8003a5c0: 0062102a slt v0,v1,v0 +8003a5c4: 1440ffeb bnez v0,8003a574 <__vsnprintf_internal+0x1368> +8003a5c8: 00000000 nop + + directive_coming = 0; +8003a5cc: afc00028 sw zero,40(s8) + break; +8003a5d0: 100002a9 b 8003b078 <__vsnprintf_internal+0x1e6c> +8003a5d4: 00000000 nop + case 'c': // character + arg = va_arg(ap, int); +8003a5d8: 8fc30114 lw v1,276(s8) +8003a5dc: 00000000 nop +8003a5e0: 24620004 addiu v0,v1,4 +8003a5e4: afc20114 sw v0,276(s8) +8003a5e8: 8c620000 lw v0,0(v1) +8003a5ec: 00000000 nop +8003a5f0: afc200c8 sw v0,200(s8) +8003a5f4: 000217c3 sra v0,v0,0x1f +8003a5f8: afc200cc sw v0,204(s8) +8003a5fc: 8fc200c8 lw v0,200(s8) +8003a600: 8fc300cc lw v1,204(s8) +8003a604: afc20070 sw v0,112(s8) +8003a608: afc30074 sw v1,116(s8) + + put_in_string(string, ssz, arg & 0xff, string_pos++); +8003a60c: 8fc4004c lw a0,76(s8) +8003a610: 8fc20070 lw v0,112(s8) +8003a614: 8fc30074 lw v1,116(s8) +8003a618: 00021600 sll v0,v0,0x18 +8003a61c: 00021603 sra v0,v0,0x18 +8003a620: 00402821 move a1,v0 +8003a624: 8fc30018 lw v1,24(s8) +8003a628: 00000000 nop +8003a62c: 24620001 addiu v0,v1,1 +8003a630: afc20018 sw v0,24(s8) +8003a634: 8fc20118 lw v0,280(s8) +8003a638: 00603821 move a3,v1 +8003a63c: 00a03021 move a2,a1 +8003a640: 00802821 move a1,a0 +8003a644: 8fc40108 lw a0,264(s8) +8003a648: 0040f809 jalr v0 +8003a64c: 00000000 nop + + directive_coming = 0; +8003a650: afc00028 sw zero,40(s8) + break; +8003a654: 10000288 b 8003b078 <__vsnprintf_internal+0x1e6c> +8003a658: 00000000 nop + case 's': // string + argcp = va_arg(ap, char *); +8003a65c: 8fc30114 lw v1,276(s8) +8003a660: 00000000 nop +8003a664: 24620004 addiu v0,v1,4 +8003a668: afc20114 sw v0,276(s8) +8003a66c: 8c620000 lw v0,0(v1) +8003a670: 00000000 nop +8003a674: afc20020 sw v0,32(s8) + argcp_tmp = argcp; +8003a678: 8fc20020 lw v0,32(s8) +8003a67c: 00000000 nop +8003a680: afc20024 sw v0,36(s8) + + if(argcp == NULL) +8003a684: 8fc20020 lw v0,32(s8) +8003a688: 00000000 nop +8003a68c: 14400058 bnez v0,8003a7f0 <__vsnprintf_internal+0x15e4> +8003a690: 00000000 nop + { + // Non standard extension, but supported by Linux and the BSDs. + + put_in_string(string, ssz, '(', string_pos++); +8003a694: 8fc4004c lw a0,76(s8) +8003a698: 8fc30018 lw v1,24(s8) +8003a69c: 00000000 nop +8003a6a0: 24620001 addiu v0,v1,1 +8003a6a4: afc20018 sw v0,24(s8) +8003a6a8: 8fc20118 lw v0,280(s8) +8003a6ac: 00603821 move a3,v1 +8003a6b0: 24060028 li a2,40 +8003a6b4: 00802821 move a1,a0 +8003a6b8: 8fc40108 lw a0,264(s8) +8003a6bc: 0040f809 jalr v0 +8003a6c0: 00000000 nop + put_in_string(string, ssz, 'n', string_pos++); +8003a6c4: 8fc4004c lw a0,76(s8) +8003a6c8: 8fc30018 lw v1,24(s8) +8003a6cc: 00000000 nop +8003a6d0: 24620001 addiu v0,v1,1 +8003a6d4: afc20018 sw v0,24(s8) +8003a6d8: 8fc20118 lw v0,280(s8) +8003a6dc: 00603821 move a3,v1 +8003a6e0: 2406006e li a2,110 +8003a6e4: 00802821 move a1,a0 +8003a6e8: 8fc40108 lw a0,264(s8) +8003a6ec: 0040f809 jalr v0 +8003a6f0: 00000000 nop + put_in_string(string, ssz, 'u', string_pos++); +8003a6f4: 8fc4004c lw a0,76(s8) +8003a6f8: 8fc30018 lw v1,24(s8) +8003a6fc: 00000000 nop +8003a700: 24620001 addiu v0,v1,1 +8003a704: afc20018 sw v0,24(s8) +8003a708: 8fc20118 lw v0,280(s8) +8003a70c: 00603821 move a3,v1 +8003a710: 24060075 li a2,117 +8003a714: 00802821 move a1,a0 +8003a718: 8fc40108 lw a0,264(s8) +8003a71c: 0040f809 jalr v0 +8003a720: 00000000 nop + put_in_string(string, ssz, 'l', string_pos++); +8003a724: 8fc4004c lw a0,76(s8) +8003a728: 8fc30018 lw v1,24(s8) +8003a72c: 00000000 nop +8003a730: 24620001 addiu v0,v1,1 +8003a734: afc20018 sw v0,24(s8) +8003a738: 8fc20118 lw v0,280(s8) +8003a73c: 00603821 move a3,v1 +8003a740: 2406006c li a2,108 +8003a744: 00802821 move a1,a0 +8003a748: 8fc40108 lw a0,264(s8) +8003a74c: 0040f809 jalr v0 +8003a750: 00000000 nop + put_in_string(string, ssz, 'l', string_pos++); +8003a754: 8fc4004c lw a0,76(s8) +8003a758: 8fc30018 lw v1,24(s8) +8003a75c: 00000000 nop +8003a760: 24620001 addiu v0,v1,1 +8003a764: afc20018 sw v0,24(s8) +8003a768: 8fc20118 lw v0,280(s8) +8003a76c: 00603821 move a3,v1 +8003a770: 2406006c li a2,108 +8003a774: 00802821 move a1,a0 +8003a778: 8fc40108 lw a0,264(s8) +8003a77c: 0040f809 jalr v0 +8003a780: 00000000 nop + put_in_string(string, ssz, ')', string_pos++); +8003a784: 8fc4004c lw a0,76(s8) +8003a788: 8fc30018 lw v1,24(s8) +8003a78c: 00000000 nop +8003a790: 24620001 addiu v0,v1,1 +8003a794: afc20018 sw v0,24(s8) +8003a798: 8fc20118 lw v0,280(s8) +8003a79c: 00603821 move a3,v1 +8003a7a0: 24060029 li a2,41 +8003a7a4: 00802821 move a1,a0 +8003a7a8: 8fc40108 lw a0,264(s8) +8003a7ac: 0040f809 jalr v0 +8003a7b0: 00000000 nop + + directive_coming = 0; +8003a7b4: afc00028 sw zero,40(s8) + break; +8003a7b8: 1000022f b 8003b078 <__vsnprintf_internal+0x1e6c> +8003a7bc: 00000000 nop + } + + while(*argcp_tmp) + { + if(pad_quantity > 0) pad_quantity--; +8003a7c0: 8fc20054 lw v0,84(s8) +8003a7c4: 00000000 nop +8003a7c8: 18400005 blez v0,8003a7e0 <__vsnprintf_internal+0x15d4> +8003a7cc: 00000000 nop +8003a7d0: 8fc20054 lw v0,84(s8) +8003a7d4: 00000000 nop +8003a7d8: 2442ffff addiu v0,v0,-1 +8003a7dc: afc20054 sw v0,84(s8) + argcp_tmp++; +8003a7e0: 8fc20024 lw v0,36(s8) +8003a7e4: 00000000 nop +8003a7e8: 24420001 addiu v0,v0,1 +8003a7ec: afc20024 sw v0,36(s8) + + directive_coming = 0; + break; + } + + while(*argcp_tmp) +8003a7f0: 8fc20024 lw v0,36(s8) +8003a7f4: 00000000 nop +8003a7f8: 80420000 lb v0,0(v0) +8003a7fc: 00000000 nop +8003a800: 1440ffef bnez v0,8003a7c0 <__vsnprintf_internal+0x15b4> +8003a804: 00000000 nop + { + if(pad_quantity > 0) pad_quantity--; + argcp_tmp++; + } + + if(!(flags & SPRINTF_NEGFIELD_FLAG)) +8003a808: 8fc2002c lw v0,44(s8) +8003a80c: 00000000 nop +8003a810: 30420004 andi v0,v0,0x4 +8003a814: 1440002e bnez v0,8003a8d0 <__vsnprintf_internal+0x16c4> +8003a818: 00000000 nop + { + while(pad_quantity > 0) +8003a81c: 10000011 b 8003a864 <__vsnprintf_internal+0x1658> +8003a820: 00000000 nop + { + put_in_string(string,ssz, ' ', string_pos++); +8003a824: 8fc4004c lw a0,76(s8) +8003a828: 8fc30018 lw v1,24(s8) +8003a82c: 00000000 nop +8003a830: 24620001 addiu v0,v1,1 +8003a834: afc20018 sw v0,24(s8) +8003a838: 8fc20118 lw v0,280(s8) +8003a83c: 00603821 move a3,v1 +8003a840: 24060020 li a2,32 +8003a844: 00802821 move a1,a0 +8003a848: 8fc40108 lw a0,264(s8) +8003a84c: 0040f809 jalr v0 +8003a850: 00000000 nop + pad_quantity--; +8003a854: 8fc20054 lw v0,84(s8) +8003a858: 00000000 nop +8003a85c: 2442ffff addiu v0,v0,-1 +8003a860: afc20054 sw v0,84(s8) + argcp_tmp++; + } + + if(!(flags & SPRINTF_NEGFIELD_FLAG)) + { + while(pad_quantity > 0) +8003a864: 8fc20054 lw v0,84(s8) +8003a868: 00000000 nop +8003a86c: 1c40ffed bgtz v0,8003a824 <__vsnprintf_internal+0x1618> +8003a870: 00000000 nop + put_in_string(string,ssz, ' ', string_pos++); + pad_quantity--; + } + } + + while(*argcp) +8003a874: 10000016 b 8003a8d0 <__vsnprintf_internal+0x16c4> +8003a878: 00000000 nop + { + put_in_string(string, ssz, *argcp, string_pos++); +8003a87c: 8fc4004c lw a0,76(s8) +8003a880: 8fc20020 lw v0,32(s8) +8003a884: 00000000 nop +8003a888: 80420000 lb v0,0(v0) +8003a88c: 00000000 nop +8003a890: 00402821 move a1,v0 +8003a894: 8fc30018 lw v1,24(s8) +8003a898: 00000000 nop +8003a89c: 24620001 addiu v0,v1,1 +8003a8a0: afc20018 sw v0,24(s8) +8003a8a4: 8fc20118 lw v0,280(s8) +8003a8a8: 00603821 move a3,v1 +8003a8ac: 00a03021 move a2,a1 +8003a8b0: 00802821 move a1,a0 +8003a8b4: 8fc40108 lw a0,264(s8) +8003a8b8: 0040f809 jalr v0 +8003a8bc: 00000000 nop + + argcp++; +8003a8c0: 8fc20020 lw v0,32(s8) +8003a8c4: 00000000 nop +8003a8c8: 24420001 addiu v0,v0,1 +8003a8cc: afc20020 sw v0,32(s8) + put_in_string(string,ssz, ' ', string_pos++); + pad_quantity--; + } + } + + while(*argcp) +8003a8d0: 8fc20020 lw v0,32(s8) +8003a8d4: 00000000 nop +8003a8d8: 80420000 lb v0,0(v0) +8003a8dc: 00000000 nop +8003a8e0: 1440ffe6 bnez v0,8003a87c <__vsnprintf_internal+0x1670> +8003a8e4: 00000000 nop + put_in_string(string, ssz, *argcp, string_pos++); + + argcp++; + } + + if(flags & SPRINTF_NEGFIELD_FLAG) +8003a8e8: 8fc2002c lw v0,44(s8) +8003a8ec: 00000000 nop +8003a8f0: 30420004 andi v0,v0,0x4 +8003a8f4: 10400017 beqz v0,8003a954 <__vsnprintf_internal+0x1748> +8003a8f8: 00000000 nop + { + while(pad_quantity > 0) +8003a8fc: 10000011 b 8003a944 <__vsnprintf_internal+0x1738> +8003a900: 00000000 nop + { + put_in_string(string,ssz, ' ', string_pos++); +8003a904: 8fc4004c lw a0,76(s8) +8003a908: 8fc30018 lw v1,24(s8) +8003a90c: 00000000 nop +8003a910: 24620001 addiu v0,v1,1 +8003a914: afc20018 sw v0,24(s8) +8003a918: 8fc20118 lw v0,280(s8) +8003a91c: 00603821 move a3,v1 +8003a920: 24060020 li a2,32 +8003a924: 00802821 move a1,a0 +8003a928: 8fc40108 lw a0,264(s8) +8003a92c: 0040f809 jalr v0 +8003a930: 00000000 nop + pad_quantity--; +8003a934: 8fc20054 lw v0,84(s8) +8003a938: 00000000 nop +8003a93c: 2442ffff addiu v0,v0,-1 +8003a940: afc20054 sw v0,84(s8) + argcp++; + } + + if(flags & SPRINTF_NEGFIELD_FLAG) + { + while(pad_quantity > 0) +8003a944: 8fc20054 lw v0,84(s8) +8003a948: 00000000 nop +8003a94c: 1c40ffed bgtz v0,8003a904 <__vsnprintf_internal+0x16f8> +8003a950: 00000000 nop + put_in_string(string,ssz, ' ', string_pos++); + pad_quantity--; + } + } + + directive_coming = 0; +8003a954: afc00028 sw zero,40(s8) + break; +8003a958: 100001c7 b 8003b078 <__vsnprintf_internal+0x1e6c> +8003a95c: 00000000 nop + case 'o': // Octal + empty_digit = 1; +8003a960: 24020001 li v0,1 +8003a964: afc20048 sw v0,72(s8) + + if(argsize < SPRINTF_SIZE_LONG_LONG) +8003a968: 8fc20030 lw v0,48(s8) +8003a96c: 00000000 nop +8003a970: 28420004 slti v0,v0,4 +8003a974: 1040000f beqz v0,8003a9b4 <__vsnprintf_internal+0x17a8> +8003a978: 00000000 nop + arg = (unsigned long long)va_arg(ap, unsigned int); +8003a97c: 8fc30114 lw v1,276(s8) +8003a980: 00000000 nop +8003a984: 24620004 addiu v0,v1,4 +8003a988: afc20114 sw v0,276(s8) +8003a98c: 8c620000 lw v0,0(v1) +8003a990: 00000000 nop +8003a994: afc200d0 sw v0,208(s8) +8003a998: afc000d4 sw zero,212(s8) +8003a99c: 8fc200d0 lw v0,208(s8) +8003a9a0: 8fc300d4 lw v1,212(s8) +8003a9a4: afc20070 sw v0,112(s8) +8003a9a8: afc30074 sw v1,116(s8) +8003a9ac: 1000000c b 8003a9e0 <__vsnprintf_internal+0x17d4> +8003a9b0: 00000000 nop + else + arg = va_arg(ap, unsigned long long); +8003a9b4: 8fc20114 lw v0,276(s8) +8003a9b8: 00000000 nop +8003a9bc: 24430007 addiu v1,v0,7 +8003a9c0: 2402fff8 li v0,-8 +8003a9c4: 00621824 and v1,v1,v0 +8003a9c8: 24620008 addiu v0,v1,8 +8003a9cc: afc20114 sw v0,276(s8) +8003a9d0: 8c620000 lw v0,0(v1) +8003a9d4: 8c630004 lw v1,4(v1) +8003a9d8: afc20070 sw v0,112(s8) +8003a9dc: afc30074 sw v1,116(s8) + + for(x=21;x>=0;x--) +8003a9e0: 24020015 li v0,21 +8003a9e4: afc20034 sw v0,52(s8) +8003a9e8: 10000040 b 8003aaec <__vsnprintf_internal+0x18e0> +8003a9ec: 00000000 nop + { + y = arg >> (x * 3); +8003a9f0: 8fc40070 lw a0,112(s8) +8003a9f4: 8fc50074 lw a1,116(s8) +8003a9f8: 8fc30034 lw v1,52(s8) +8003a9fc: 00000000 nop +8003aa00: 00601021 move v0,v1 +8003aa04: 00021040 sll v0,v0,0x1 +8003aa08: 00431821 addu v1,v0,v1 +8003aa0c: 30620020 andi v0,v1,0x20 +8003aa10: 10400005 beqz v0,8003aa28 <__vsnprintf_internal+0x181c> +8003aa14: 00000000 nop +8003aa18: 0065a006 srlv s4,a1,v1 +8003aa1c: 0000a821 move s5,zero +8003aa20: 10000008 b 8003aa44 <__vsnprintf_internal+0x1838> +8003aa24: 00000000 nop +8003aa28: 00053040 sll a2,a1,0x1 +8003aa2c: 2402ffff li v0,-1 +8003aa30: 00621026 xor v0,v1,v0 +8003aa34: 00461004 sllv v0,a2,v0 +8003aa38: 0064a006 srlv s4,a0,v1 +8003aa3c: 0054a025 or s4,v0,s4 +8003aa40: 0065a806 srlv s5,a1,v1 +8003aa44: afd40038 sw s4,56(s8) + y &= 0x7; +8003aa48: 8fc20038 lw v0,56(s8) +8003aa4c: 00000000 nop +8003aa50: 30420007 andi v0,v0,0x7 +8003aa54: afc20038 sw v0,56(s8) + + if(y>=1) +8003aa58: 8fc20038 lw v0,56(s8) +8003aa5c: 00000000 nop +8003aa60: 18400002 blez v0,8003aa6c <__vsnprintf_internal+0x1860> +8003aa64: 00000000 nop + empty_digit = 0; +8003aa68: afc00048 sw zero,72(s8) + + if(empty_digit == 0 || x == 0) +8003aa6c: 8fc20048 lw v0,72(s8) +8003aa70: 00000000 nop +8003aa74: 10400005 beqz v0,8003aa8c <__vsnprintf_internal+0x1880> +8003aa78: 00000000 nop +8003aa7c: 8fc20034 lw v0,52(s8) +8003aa80: 00000000 nop +8003aa84: 14400015 bnez v0,8003aadc <__vsnprintf_internal+0x18d0> +8003aa88: 00000000 nop + put_in_string(string, ssz, y + '0', string_pos++); +8003aa8c: 8fc4004c lw a0,76(s8) +8003aa90: 8fc20038 lw v0,56(s8) +8003aa94: 00000000 nop +8003aa98: 304200ff andi v0,v0,0xff +8003aa9c: 24420030 addiu v0,v0,48 +8003aaa0: 304200ff andi v0,v0,0xff +8003aaa4: 00021600 sll v0,v0,0x18 +8003aaa8: 00021603 sra v0,v0,0x18 +8003aaac: 00402821 move a1,v0 +8003aab0: 8fc30018 lw v1,24(s8) +8003aab4: 00000000 nop +8003aab8: 24620001 addiu v0,v1,1 +8003aabc: afc20018 sw v0,24(s8) +8003aac0: 8fc20118 lw v0,280(s8) +8003aac4: 00603821 move a3,v1 +8003aac8: 00a03021 move a2,a1 +8003aacc: 00802821 move a1,a0 +8003aad0: 8fc40108 lw a0,264(s8) +8003aad4: 0040f809 jalr v0 +8003aad8: 00000000 nop + if(argsize < SPRINTF_SIZE_LONG_LONG) + arg = (unsigned long long)va_arg(ap, unsigned int); + else + arg = va_arg(ap, unsigned long long); + + for(x=21;x>=0;x--) +8003aadc: 8fc20034 lw v0,52(s8) +8003aae0: 00000000 nop +8003aae4: 2442ffff addiu v0,v0,-1 +8003aae8: afc20034 sw v0,52(s8) +8003aaec: 8fc20034 lw v0,52(s8) +8003aaf0: 00000000 nop +8003aaf4: 0441ffbe bgez v0,8003a9f0 <__vsnprintf_internal+0x17e4> +8003aaf8: 00000000 nop + + if(empty_digit == 0 || x == 0) + put_in_string(string, ssz, y + '0', string_pos++); + } + + directive_coming = 0; +8003aafc: afc00028 sw zero,40(s8) + break; +8003ab00: 1000015d b 8003b078 <__vsnprintf_internal+0x1e6c> +8003ab04: 00000000 nop + case '@': // Binary + empty_digit = 1; +8003ab08: 24020001 li v0,1 +8003ab0c: afc20048 sw v0,72(s8) + + if(argsize < SPRINTF_SIZE_LONG_LONG) +8003ab10: 8fc20030 lw v0,48(s8) +8003ab14: 00000000 nop +8003ab18: 28420004 slti v0,v0,4 +8003ab1c: 1040000f beqz v0,8003ab5c <__vsnprintf_internal+0x1950> +8003ab20: 00000000 nop + arg = (unsigned long long)va_arg(ap, unsigned int); +8003ab24: 8fc30114 lw v1,276(s8) +8003ab28: 00000000 nop +8003ab2c: 24620004 addiu v0,v1,4 +8003ab30: afc20114 sw v0,276(s8) +8003ab34: 8c620000 lw v0,0(v1) +8003ab38: 00000000 nop +8003ab3c: afc200d8 sw v0,216(s8) +8003ab40: afc000dc sw zero,220(s8) +8003ab44: 8fc200d8 lw v0,216(s8) +8003ab48: 8fc300dc lw v1,220(s8) +8003ab4c: afc20070 sw v0,112(s8) +8003ab50: afc30074 sw v1,116(s8) +8003ab54: 1000000c b 8003ab88 <__vsnprintf_internal+0x197c> +8003ab58: 00000000 nop + else + arg = va_arg(ap, unsigned long long); +8003ab5c: 8fc20114 lw v0,276(s8) +8003ab60: 00000000 nop +8003ab64: 24430007 addiu v1,v0,7 +8003ab68: 2402fff8 li v0,-8 +8003ab6c: 00621824 and v1,v1,v0 +8003ab70: 24620008 addiu v0,v1,8 +8003ab74: afc20114 sw v0,276(s8) +8003ab78: 8c620000 lw v0,0(v1) +8003ab7c: 8c630004 lw v1,4(v1) +8003ab80: afc20070 sw v0,112(s8) +8003ab84: afc30074 sw v1,116(s8) + + for(x=63;x>=0;x--) +8003ab88: 2402003f li v0,63 +8003ab8c: afc20034 sw v0,52(s8) +8003ab90: 10000044 b 8003aca4 <__vsnprintf_internal+0x1a98> +8003ab94: 00000000 nop + { + y = (arg >> x); +8003ab98: 8fc40070 lw a0,112(s8) +8003ab9c: 8fc50074 lw a1,116(s8) +8003aba0: 8fc20034 lw v0,52(s8) +8003aba4: 00000000 nop +8003aba8: 30420020 andi v0,v0,0x20 +8003abac: 10400007 beqz v0,8003abcc <__vsnprintf_internal+0x19c0> +8003abb0: 00000000 nop +8003abb4: 8fc20034 lw v0,52(s8) +8003abb8: 00000000 nop +8003abbc: 0045b006 srlv s6,a1,v0 +8003abc0: 0000b821 move s7,zero +8003abc4: 1000000d b 8003abfc <__vsnprintf_internal+0x19f0> +8003abc8: 00000000 nop +8003abcc: 00053040 sll a2,a1,0x1 +8003abd0: 8fc30034 lw v1,52(s8) +8003abd4: 2402ffff li v0,-1 +8003abd8: 00621026 xor v0,v1,v0 +8003abdc: 00461804 sllv v1,a2,v0 +8003abe0: 8fc20034 lw v0,52(s8) +8003abe4: 00000000 nop +8003abe8: 0044b006 srlv s6,a0,v0 +8003abec: 0076b025 or s6,v1,s6 +8003abf0: 8fc20034 lw v0,52(s8) +8003abf4: 00000000 nop +8003abf8: 0045b806 srlv s7,a1,v0 +8003abfc: afd60038 sw s6,56(s8) + y &= 1; +8003ac00: 8fc20038 lw v0,56(s8) +8003ac04: 00000000 nop +8003ac08: 30420001 andi v0,v0,0x1 +8003ac0c: afc20038 sw v0,56(s8) + + if(y>=1) +8003ac10: 8fc20038 lw v0,56(s8) +8003ac14: 00000000 nop +8003ac18: 18400002 blez v0,8003ac24 <__vsnprintf_internal+0x1a18> +8003ac1c: 00000000 nop + empty_digit = 0; +8003ac20: afc00048 sw zero,72(s8) + + if(empty_digit == 0 || x == 0) +8003ac24: 8fc20048 lw v0,72(s8) +8003ac28: 00000000 nop +8003ac2c: 10400005 beqz v0,8003ac44 <__vsnprintf_internal+0x1a38> +8003ac30: 00000000 nop +8003ac34: 8fc20034 lw v0,52(s8) +8003ac38: 00000000 nop +8003ac3c: 14400015 bnez v0,8003ac94 <__vsnprintf_internal+0x1a88> +8003ac40: 00000000 nop + put_in_string(string, ssz, y + '0', string_pos++); +8003ac44: 8fc4004c lw a0,76(s8) +8003ac48: 8fc20038 lw v0,56(s8) +8003ac4c: 00000000 nop +8003ac50: 304200ff andi v0,v0,0xff +8003ac54: 24420030 addiu v0,v0,48 +8003ac58: 304200ff andi v0,v0,0xff +8003ac5c: 00021600 sll v0,v0,0x18 +8003ac60: 00021603 sra v0,v0,0x18 +8003ac64: 00402821 move a1,v0 +8003ac68: 8fc30018 lw v1,24(s8) +8003ac6c: 00000000 nop +8003ac70: 24620001 addiu v0,v1,1 +8003ac74: afc20018 sw v0,24(s8) +8003ac78: 8fc20118 lw v0,280(s8) +8003ac7c: 00603821 move a3,v1 +8003ac80: 00a03021 move a2,a1 +8003ac84: 00802821 move a1,a0 +8003ac88: 8fc40108 lw a0,264(s8) +8003ac8c: 0040f809 jalr v0 +8003ac90: 00000000 nop + if(argsize < SPRINTF_SIZE_LONG_LONG) + arg = (unsigned long long)va_arg(ap, unsigned int); + else + arg = va_arg(ap, unsigned long long); + + for(x=63;x>=0;x--) +8003ac94: 8fc20034 lw v0,52(s8) +8003ac98: 00000000 nop +8003ac9c: 2442ffff addiu v0,v0,-1 +8003aca0: afc20034 sw v0,52(s8) +8003aca4: 8fc20034 lw v0,52(s8) +8003aca8: 00000000 nop +8003acac: 0441ffba bgez v0,8003ab98 <__vsnprintf_internal+0x198c> +8003acb0: 00000000 nop + + if(empty_digit == 0 || x == 0) + put_in_string(string, ssz, y + '0', string_pos++); + } + + directive_coming = 0; +8003acb4: afc00028 sw zero,40(s8) + break; +8003acb8: 100000ef b 8003b078 <__vsnprintf_internal+0x1e6c> +8003acbc: 00000000 nop + + case 'f': + if(pad_quantity_f == -1) +8003acc0: 8fc30058 lw v1,88(s8) +8003acc4: 2402ffff li v0,-1 +8003acc8: 14620005 bne v1,v0,8003ace0 <__vsnprintf_internal+0x1ad4> +8003accc: 00000000 nop + pad_quantity_f = 6; +8003acd0: 24020006 li v0,6 +8003acd4: afc20058 sw v0,88(s8) +8003acd8: 1000000a b 8003ad04 <__vsnprintf_internal+0x1af8> +8003acdc: 00000000 nop + else + { + x = pad_quantity_f; +8003ace0: 8fc20058 lw v0,88(s8) +8003ace4: 00000000 nop +8003ace8: afc20034 sw v0,52(s8) + pad_quantity_f = pad_quantity; +8003acec: 8fc20054 lw v0,84(s8) +8003acf0: 00000000 nop +8003acf4: afc20058 sw v0,88(s8) + pad_quantity = x; +8003acf8: 8fc20034 lw v0,52(s8) +8003acfc: 00000000 nop +8003ad00: afc20054 sw v0,84(s8) + } + + dprintf("PRECISION = %d\n", pad_quantity_f); + + libc_double_to_string(va_arg(ap, double), libc_sprintf_floatbuf, 64, pad_quantity_f); +8003ad04: 8fc20114 lw v0,276(s8) +8003ad08: 00000000 nop +8003ad0c: 24430007 addiu v1,v0,7 +8003ad10: 2402fff8 li v0,-8 +8003ad14: 00621824 and v1,v1,v0 +8003ad18: 24620008 addiu v0,v1,8 +8003ad1c: afc20114 sw v0,276(s8) +8003ad20: 8c640000 lw a0,0(v1) +8003ad24: 8c650004 lw a1,4(v1) +8003ad28: 8fc20058 lw v0,88(s8) +8003ad2c: 00000000 nop +8003ad30: afa20010 sw v0,16(sp) +8003ad34: 24070040 li a3,64 +8003ad38: 3c028007 lui v0,0x8007 +8003ad3c: 24468cf8 addiu a2,v0,-29448 +8003ad40: 0c00e2db jal 80038b6c <libc_double_to_string> +8003ad44: 00000000 nop + + // calculate padding + pad_quantity -= strlen(libc_sprintf_floatbuf); +8003ad48: 3c028007 lui v0,0x8007 +8003ad4c: 24448cf8 addiu a0,v0,-29448 +8003ad50: 0c00d8af jal 800362bc <strlen> +8003ad54: 00000000 nop +8003ad58: 00401821 move v1,v0 +8003ad5c: 8fc20054 lw v0,84(s8) +8003ad60: 00000000 nop +8003ad64: 00431023 subu v0,v0,v1 +8003ad68: afc20054 sw v0,84(s8) + + write_padding(); +8003ad6c: 8fc2002c lw v0,44(s8) +8003ad70: 00000000 nop +8003ad74: 30420004 andi v0,v0,0x4 +8003ad78: 1440002d bnez v0,8003ae30 <__vsnprintf_internal+0x1c24> +8003ad7c: 00000000 nop +8003ad80: afc00034 sw zero,52(s8) +8003ad84: 10000024 b 8003ae18 <__vsnprintf_internal+0x1c0c> +8003ad88: 00000000 nop +8003ad8c: 8fc2002c lw v0,44(s8) +8003ad90: 00000000 nop +8003ad94: 30420002 andi v0,v0,0x2 +8003ad98: 1040000f beqz v0,8003add8 <__vsnprintf_internal+0x1bcc> +8003ad9c: 00000000 nop +8003ada0: 8fc4004c lw a0,76(s8) +8003ada4: 8fc30018 lw v1,24(s8) +8003ada8: 00000000 nop +8003adac: 24620001 addiu v0,v1,1 +8003adb0: afc20018 sw v0,24(s8) +8003adb4: 8fc20118 lw v0,280(s8) +8003adb8: 00603821 move a3,v1 +8003adbc: 24060030 li a2,48 +8003adc0: 00802821 move a1,a0 +8003adc4: 8fc40108 lw a0,264(s8) +8003adc8: 0040f809 jalr v0 +8003adcc: 00000000 nop +8003add0: 1000000d b 8003ae08 <__vsnprintf_internal+0x1bfc> +8003add4: 00000000 nop +8003add8: 8fc4004c lw a0,76(s8) +8003addc: 8fc30018 lw v1,24(s8) +8003ade0: 00000000 nop +8003ade4: 24620001 addiu v0,v1,1 +8003ade8: afc20018 sw v0,24(s8) +8003adec: 8fc20118 lw v0,280(s8) +8003adf0: 00603821 move a3,v1 +8003adf4: 24060020 li a2,32 +8003adf8: 00802821 move a1,a0 +8003adfc: 8fc40108 lw a0,264(s8) +8003ae00: 0040f809 jalr v0 +8003ae04: 00000000 nop +8003ae08: 8fc20034 lw v0,52(s8) +8003ae0c: 00000000 nop +8003ae10: 24420001 addiu v0,v0,1 +8003ae14: afc20034 sw v0,52(s8) +8003ae18: 8fc30034 lw v1,52(s8) +8003ae1c: 8fc20054 lw v0,84(s8) +8003ae20: 00000000 nop +8003ae24: 0062102a slt v0,v1,v0 +8003ae28: 1440ffd8 bnez v0,8003ad8c <__vsnprintf_internal+0x1b80> +8003ae2c: 00000000 nop + + for(x=0;libc_sprintf_floatbuf[x]!=0;x++) +8003ae30: afc00034 sw zero,52(s8) +8003ae34: 10000019 b 8003ae9c <__vsnprintf_internal+0x1c90> +8003ae38: 00000000 nop + put_in_string(string, ssz, libc_sprintf_floatbuf[x], string_pos++); +8003ae3c: 8fc4004c lw a0,76(s8) +8003ae40: 3c028007 lui v0,0x8007 +8003ae44: 24438cf8 addiu v1,v0,-29448 +8003ae48: 8fc20034 lw v0,52(s8) +8003ae4c: 00000000 nop +8003ae50: 00621021 addu v0,v1,v0 +8003ae54: 80420000 lb v0,0(v0) +8003ae58: 00000000 nop +8003ae5c: 00402821 move a1,v0 +8003ae60: 8fc30018 lw v1,24(s8) +8003ae64: 00000000 nop +8003ae68: 24620001 addiu v0,v1,1 +8003ae6c: afc20018 sw v0,24(s8) +8003ae70: 8fc20118 lw v0,280(s8) +8003ae74: 00603821 move a3,v1 +8003ae78: 00a03021 move a2,a1 +8003ae7c: 00802821 move a1,a0 +8003ae80: 8fc40108 lw a0,264(s8) +8003ae84: 0040f809 jalr v0 +8003ae88: 00000000 nop + // calculate padding + pad_quantity -= strlen(libc_sprintf_floatbuf); + + write_padding(); + + for(x=0;libc_sprintf_floatbuf[x]!=0;x++) +8003ae8c: 8fc20034 lw v0,52(s8) +8003ae90: 00000000 nop +8003ae94: 24420001 addiu v0,v0,1 +8003ae98: afc20034 sw v0,52(s8) +8003ae9c: 3c028007 lui v0,0x8007 +8003aea0: 24438cf8 addiu v1,v0,-29448 +8003aea4: 8fc20034 lw v0,52(s8) +8003aea8: 00000000 nop +8003aeac: 00621021 addu v0,v1,v0 +8003aeb0: 80420000 lb v0,0(v0) +8003aeb4: 00000000 nop +8003aeb8: 1440ffe0 bnez v0,8003ae3c <__vsnprintf_internal+0x1c30> +8003aebc: 00000000 nop + put_in_string(string, ssz, libc_sprintf_floatbuf[x], string_pos++); + + write_neg_padding(); +8003aec0: 8fc2002c lw v0,44(s8) +8003aec4: 00000000 nop +8003aec8: 30420004 andi v0,v0,0x4 +8003aecc: 1040001a beqz v0,8003af38 <__vsnprintf_internal+0x1d2c> +8003aed0: 00000000 nop +8003aed4: afc00034 sw zero,52(s8) +8003aed8: 10000011 b 8003af20 <__vsnprintf_internal+0x1d14> +8003aedc: 00000000 nop +8003aee0: 8fc4004c lw a0,76(s8) +8003aee4: 8fc30018 lw v1,24(s8) +8003aee8: 00000000 nop +8003aeec: 24620001 addiu v0,v1,1 +8003aef0: afc20018 sw v0,24(s8) +8003aef4: 8fc20118 lw v0,280(s8) +8003aef8: 00603821 move a3,v1 +8003aefc: 24060020 li a2,32 +8003af00: 00802821 move a1,a0 +8003af04: 8fc40108 lw a0,264(s8) +8003af08: 0040f809 jalr v0 +8003af0c: 00000000 nop +8003af10: 8fc20034 lw v0,52(s8) +8003af14: 00000000 nop +8003af18: 24420001 addiu v0,v0,1 +8003af1c: afc20034 sw v0,52(s8) +8003af20: 8fc30034 lw v1,52(s8) +8003af24: 8fc20054 lw v0,84(s8) +8003af28: 00000000 nop +8003af2c: 0062102a slt v0,v1,v0 +8003af30: 1440ffeb bnez v0,8003aee0 <__vsnprintf_internal+0x1cd4> +8003af34: 00000000 nop + + directive_coming = 0; +8003af38: afc00028 sw zero,40(s8) + break; +8003af3c: 1000004e b 8003b078 <__vsnprintf_internal+0x1e6c> +8003af40: 00000000 nop + case 'n': // Number of characters written + *(va_arg(ap,unsigned int*)) = string_pos; +8003af44: 8fc30114 lw v1,276(s8) +8003af48: 00000000 nop +8003af4c: 24620004 addiu v0,v1,4 +8003af50: afc20114 sw v0,276(s8) +8003af54: 8c630000 lw v1,0(v1) +8003af58: 8fc20018 lw v0,24(s8) +8003af5c: 00000000 nop +8003af60: ac620000 sw v0,0(v1) + + directive_coming = 0; +8003af64: afc00028 sw zero,40(s8) + break; +8003af68: 10000043 b 8003b078 <__vsnprintf_internal+0x1e6c> +8003af6c: 00000000 nop + + default: + put_in_string(string, ssz, fmt[fmt_pos], string_pos++); +8003af70: 8fc4004c lw a0,76(s8) +8003af74: 8fc3001c lw v1,28(s8) +8003af78: 8fc20110 lw v0,272(s8) +8003af7c: 00000000 nop +8003af80: 00431021 addu v0,v0,v1 +8003af84: 80420000 lb v0,0(v0) +8003af88: 00000000 nop +8003af8c: 00402821 move a1,v0 +8003af90: 8fc30018 lw v1,24(s8) +8003af94: 00000000 nop +8003af98: 24620001 addiu v0,v1,1 +8003af9c: afc20018 sw v0,24(s8) +8003afa0: 8fc20118 lw v0,280(s8) +8003afa4: 00603821 move a3,v1 +8003afa8: 00a03021 move a2,a1 +8003afac: 00802821 move a1,a0 +8003afb0: 8fc40108 lw a0,264(s8) +8003afb4: 0040f809 jalr v0 +8003afb8: 00000000 nop + directive_coming = 0; +8003afbc: afc00028 sw zero,40(s8) +8003afc0: 1000002d b 8003b078 <__vsnprintf_internal+0x1e6c> +8003afc4: 00000000 nop + } + } + else + { + if(fmt[fmt_pos] == '%') +8003afc8: 8fc3001c lw v1,28(s8) +8003afcc: 8fc20110 lw v0,272(s8) +8003afd0: 00000000 nop +8003afd4: 00431021 addu v0,v0,v1 +8003afd8: 80430000 lb v1,0(v0) +8003afdc: 24020025 li v0,37 +8003afe0: 1462000c bne v1,v0,8003b014 <__vsnprintf_internal+0x1e08> +8003afe4: 00000000 nop + { + directive_coming = 1; +8003afe8: 24020001 li v0,1 +8003afec: afc20028 sw v0,40(s8) + flags = 0; +8003aff0: afc0002c sw zero,44(s8) + argsize = 2; +8003aff4: 24020002 li v0,2 +8003aff8: afc20030 sw v0,48(s8) + pad_quantity = 0; +8003affc: afc00054 sw zero,84(s8) + pad_quantity_f = -1; +8003b000: 2402ffff li v0,-1 +8003b004: afc20058 sw v0,88(s8) + zero_flag_imp = 0; +8003b008: afc00050 sw zero,80(s8) +8003b00c: 1000001a b 8003b078 <__vsnprintf_internal+0x1e6c> +8003b010: 00000000 nop + } + else + { + put_in_string(string, ssz, fmt[fmt_pos], string_pos++); +8003b014: 8fc4004c lw a0,76(s8) +8003b018: 8fc3001c lw v1,28(s8) +8003b01c: 8fc20110 lw v0,272(s8) +8003b020: 00000000 nop +8003b024: 00431021 addu v0,v0,v1 +8003b028: 80420000 lb v0,0(v0) +8003b02c: 00000000 nop +8003b030: 00402821 move a1,v0 +8003b034: 8fc30018 lw v1,24(s8) +8003b038: 00000000 nop +8003b03c: 24620001 addiu v0,v1,1 +8003b040: afc20018 sw v0,24(s8) +8003b044: 8fc20118 lw v0,280(s8) +8003b048: 00603821 move a3,v1 +8003b04c: 00a03021 move a2,a1 +8003b050: 00802821 move a1,a0 +8003b054: 8fc40108 lw a0,264(s8) +8003b058: 0040f809 jalr v0 +8003b05c: 00000000 nop +8003b060: 10000005 b 8003b078 <__vsnprintf_internal+0x1e6c> +8003b064: 00000000 nop + pad_quantity_f = pad_quantity; + pad_quantity = 0; + break; + case 'h': // Half argument size + if(argsize) argsize--; + break; +8003b068: 00000000 nop +8003b06c: 10000002 b 8003b078 <__vsnprintf_internal+0x1e6c> +8003b070: 00000000 nop + case 'l': // Double argument size + if(argsize < 2) argsize = 2; + else if(argsize < SPRINTF_SIZE_LONG_LONG) argsize++; + break; +8003b074: 00000000 nop + + l = strlen(fmt); + + string_pos = 0; + + for(fmt_pos=0;fmt_pos<l;fmt_pos++) +8003b078: 8fc2001c lw v0,28(s8) +8003b07c: 00000000 nop +8003b080: 24420001 addiu v0,v0,1 +8003b084: afc2001c sw v0,28(s8) +8003b088: 8fc3001c lw v1,28(s8) +8003b08c: 8fc20060 lw v0,96(s8) +8003b090: 00000000 nop +8003b094: 0062102a slt v0,v1,v0 +8003b098: 1440f885 bnez v0,800392b0 <__vsnprintf_internal+0xa4> +8003b09c: 00000000 nop + + /*if(((size-1) < string_pos) && (size>0)) + string[size - 1] = 0; + else + string[string_pos] = 0;*/ + put_in_string(string, ssz, '\0', string_pos); +8003b0a0: 8fc3004c lw v1,76(s8) +8003b0a4: 8fc20118 lw v0,280(s8) +8003b0a8: 8fc70018 lw a3,24(s8) +8003b0ac: 00003021 move a2,zero +8003b0b0: 00602821 move a1,v1 +8003b0b4: 8fc40108 lw a0,264(s8) +8003b0b8: 0040f809 jalr v0 +8003b0bc: 00000000 nop + + return string_pos; +8003b0c0: 8fc20018 lw v0,24(s8) +} +8003b0c4: 03c0e821 move sp,s8 +8003b0c8: 8fbf0104 lw ra,260(sp) +8003b0cc: 8fbe0100 lw s8,256(sp) +8003b0d0: 8fb700fc lw s7,252(sp) +8003b0d4: 8fb600f8 lw s6,248(sp) +8003b0d8: 8fb500f4 lw s5,244(sp) +8003b0dc: 8fb400f0 lw s4,240(sp) +8003b0e0: 8fb300ec lw s3,236(sp) +8003b0e4: 8fb200e8 lw s2,232(sp) +8003b0e8: 8fb100e4 lw s1,228(sp) +8003b0ec: 8fb000e0 lw s0,224(sp) +8003b0f0: 27bd0108 addiu sp,sp,264 +8003b0f4: 03e00008 jr ra +8003b0f8: 00000000 nop + +8003b0fc <vsnprintf_put_in_string>: + +static int vsnprintf_put_in_string(char *string, unsigned int sz, char c, int pos) +{ +8003b0fc: 27bdfff8 addiu sp,sp,-8 +8003b100: afbe0004 sw s8,4(sp) +8003b104: 03a0f021 move s8,sp +8003b108: afc40008 sw a0,8(s8) +8003b10c: afc5000c sw a1,12(s8) +8003b110: 00c01021 move v0,a2 +8003b114: afc70014 sw a3,20(s8) +8003b118: a3c20010 sb v0,16(s8) + if(pos>=sz) +8003b11c: 8fc30014 lw v1,20(s8) +8003b120: 8fc2000c lw v0,12(s8) +8003b124: 00000000 nop +8003b128: 0062102b sltu v0,v1,v0 +8003b12c: 14400004 bnez v0,8003b140 <vsnprintf_put_in_string+0x44> +8003b130: 00000000 nop + return 0; +8003b134: 00001021 move v0,zero +8003b138: 10000009 b 8003b160 <vsnprintf_put_in_string+0x64> +8003b13c: 00000000 nop + else + string[pos] = c; +8003b140: 8fc20014 lw v0,20(s8) +8003b144: 8fc30008 lw v1,8(s8) +8003b148: 00000000 nop +8003b14c: 00621021 addu v0,v1,v0 +8003b150: 93c30010 lbu v1,16(s8) +8003b154: 00000000 nop +8003b158: a0430000 sb v1,0(v0) + + return 1; +8003b15c: 24020001 li v0,1 +} +8003b160: 03c0e821 move sp,s8 +8003b164: 8fbe0004 lw s8,4(sp) +8003b168: 27bd0008 addiu sp,sp,8 +8003b16c: 03e00008 jr ra +8003b170: 00000000 nop + +8003b174 <vsnprintf>: + +int vsnprintf(char *string, size_t size, const char *fmt, va_list ap) +{ +8003b174: 27bdffe0 addiu sp,sp,-32 +8003b178: afbf001c sw ra,28(sp) +8003b17c: afbe0018 sw s8,24(sp) +8003b180: 03a0f021 move s8,sp +8003b184: afc40020 sw a0,32(s8) +8003b188: afc50024 sw a1,36(s8) +8003b18c: afc60028 sw a2,40(s8) +8003b190: afc7002c sw a3,44(s8) + return __vsnprintf_internal(string, size, fmt, ap, vsnprintf_put_in_string); +8003b194: 3c028004 lui v0,0x8004 +8003b198: 2442b0fc addiu v0,v0,-20228 +8003b19c: afa20010 sw v0,16(sp) +8003b1a0: 8fc7002c lw a3,44(s8) +8003b1a4: 8fc60028 lw a2,40(s8) +8003b1a8: 8fc50024 lw a1,36(s8) +8003b1ac: 8fc40020 lw a0,32(s8) +8003b1b0: 0c00e483 jal 8003920c <__vsnprintf_internal> +8003b1b4: 00000000 nop +} +8003b1b8: 03c0e821 move sp,s8 +8003b1bc: 8fbf001c lw ra,28(sp) +8003b1c0: 8fbe0018 lw s8,24(sp) +8003b1c4: 27bd0020 addiu sp,sp,32 +8003b1c8: 03e00008 jr ra +8003b1cc: 00000000 nop + +8003b1d0 <sio_put_in_string>: + +static int sio_put_in_string(char *string, unsigned int sz, char c, int pos) +{ +8003b1d0: 27bdffe8 addiu sp,sp,-24 +8003b1d4: afbf0014 sw ra,20(sp) +8003b1d8: afbe0010 sw s8,16(sp) +8003b1dc: 03a0f021 move s8,sp +8003b1e0: afc40018 sw a0,24(s8) +8003b1e4: afc5001c sw a1,28(s8) +8003b1e8: 00c01021 move v0,a2 +8003b1ec: afc70024 sw a3,36(s8) +8003b1f0: a3c20020 sb v0,32(s8) + sio_putchar(c); +8003b1f4: 83c20020 lb v0,32(s8) +8003b1f8: 00000000 nop +8003b1fc: 00402021 move a0,v0 +8003b200: 0c00a9c3 jal 8002a70c <sio_putchar> +8003b204: 00000000 nop + + return 1; +8003b208: 24020001 li v0,1 +} +8003b20c: 03c0e821 move sp,s8 +8003b210: 8fbf0014 lw ra,20(sp) +8003b214: 8fbe0010 lw s8,16(sp) +8003b218: 27bd0018 addiu sp,sp,24 +8003b21c: 03e00008 jr ra +8003b220: 00000000 nop + +8003b224 <sio_vprintf>: + +int sio_vprintf(const char *fmt, va_list ap) +{ +8003b224: 27bdffe0 addiu sp,sp,-32 +8003b228: afbf001c sw ra,28(sp) +8003b22c: afbe0018 sw s8,24(sp) +8003b230: 03a0f021 move s8,sp +8003b234: afc40020 sw a0,32(s8) +8003b238: afc50024 sw a1,36(s8) + return __vsnprintf_internal(NULL, -1, fmt, ap, sio_put_in_string); +8003b23c: 3c028004 lui v0,0x8004 +8003b240: 2442b1d0 addiu v0,v0,-20016 +8003b244: afa20010 sw v0,16(sp) +8003b248: 8fc70024 lw a3,36(s8) +8003b24c: 8fc60020 lw a2,32(s8) +8003b250: 2405ffff li a1,-1 +8003b254: 00002021 move a0,zero +8003b258: 0c00e483 jal 8003920c <__vsnprintf_internal> +8003b25c: 00000000 nop +} +8003b260: 03c0e821 move sp,s8 +8003b264: 8fbf001c lw ra,28(sp) +8003b268: 8fbe0018 lw s8,24(sp) +8003b26c: 27bd0020 addiu sp,sp,32 +8003b270: 03e00008 jr ra +8003b274: 00000000 nop + +8003b278 <out_put_in_string>: + +static int out_put_in_string(char *string, unsigned int sz, char c, int pos) +{ +8003b278: 27bdffe8 addiu sp,sp,-24 +8003b27c: afbf0014 sw ra,20(sp) +8003b280: afbe0010 sw s8,16(sp) +8003b284: 03a0f021 move s8,sp +8003b288: afc40018 sw a0,24(s8) +8003b28c: afc5001c sw a1,28(s8) +8003b290: 00c01021 move v0,a2 +8003b294: afc70024 sw a3,36(s8) +8003b298: a3c20020 sb v0,32(s8) + putchar(c); +8003b29c: 83c20020 lb v0,32(s8) +8003b2a0: 00000000 nop +8003b2a4: 00402021 move a0,v0 +8003b2a8: 0c00aa06 jal 8002a818 <putchar> +8003b2ac: 00000000 nop + + return 1; +8003b2b0: 24020001 li v0,1 +} +8003b2b4: 03c0e821 move sp,s8 +8003b2b8: 8fbf0014 lw ra,20(sp) +8003b2bc: 8fbe0010 lw s8,16(sp) +8003b2c0: 27bd0018 addiu sp,sp,24 +8003b2c4: 03e00008 jr ra +8003b2c8: 00000000 nop + +8003b2cc <vprintf>: + +int vprintf(char *fmt, va_list ap) +{ +8003b2cc: 27bdffe0 addiu sp,sp,-32 +8003b2d0: afbf001c sw ra,28(sp) +8003b2d4: afbe0018 sw s8,24(sp) +8003b2d8: 03a0f021 move s8,sp +8003b2dc: afc40020 sw a0,32(s8) +8003b2e0: afc50024 sw a1,36(s8) + return __vsnprintf_internal(NULL, -1, fmt, ap, out_put_in_string); +8003b2e4: 3c028004 lui v0,0x8004 +8003b2e8: 2442b278 addiu v0,v0,-19848 +8003b2ec: afa20010 sw v0,16(sp) +8003b2f0: 8fc70024 lw a3,36(s8) +8003b2f4: 8fc60020 lw a2,32(s8) +8003b2f8: 2405ffff li a1,-1 +8003b2fc: 00002021 move a0,zero +8003b300: 0c00e483 jal 8003920c <__vsnprintf_internal> +8003b304: 00000000 nop +} +8003b308: 03c0e821 move sp,s8 +8003b30c: 8fbf001c lw ra,28(sp) +8003b310: 8fbe0018 lw s8,24(sp) +8003b314: 27bd0020 addiu sp,sp,32 +8003b318: 03e00008 jr ra +8003b31c: 00000000 nop + +8003b320 <vsprintf>: + +int vsprintf(char *string, const char *fmt, va_list ap) +{ +8003b320: 27bdffe8 addiu sp,sp,-24 +8003b324: afbf0014 sw ra,20(sp) +8003b328: afbe0010 sw s8,16(sp) +8003b32c: 03a0f021 move s8,sp +8003b330: afc40018 sw a0,24(s8) +8003b334: afc5001c sw a1,28(s8) +8003b338: afc60020 sw a2,32(s8) + return vsnprintf(string, 0xffffffff, fmt, ap); +8003b33c: 8fc70020 lw a3,32(s8) +8003b340: 8fc6001c lw a2,28(s8) +8003b344: 2405ffff li a1,-1 +8003b348: 8fc40018 lw a0,24(s8) +8003b34c: 0c00ec5d jal 8003b174 <vsnprintf> +8003b350: 00000000 nop +} +8003b354: 03c0e821 move sp,s8 +8003b358: 8fbf0014 lw ra,20(sp) +8003b35c: 8fbe0010 lw s8,16(sp) +8003b360: 27bd0018 addiu sp,sp,24 +8003b364: 03e00008 jr ra +8003b368: 00000000 nop + +8003b36c <sprintf>: + +int sprintf(char *string, const char *fmt, ...) +{ +8003b36c: 27bdffe0 addiu sp,sp,-32 +8003b370: afbf001c sw ra,28(sp) +8003b374: afbe0018 sw s8,24(sp) +8003b378: 03a0f021 move s8,sp +8003b37c: afc40020 sw a0,32(s8) +8003b380: afc50024 sw a1,36(s8) +8003b384: afc60028 sw a2,40(s8) +8003b388: afc7002c sw a3,44(s8) + int r; + + va_list ap; + + va_start(ap, fmt); +8003b38c: 27c20028 addiu v0,s8,40 +8003b390: afc20014 sw v0,20(s8) + + r = vsprintf(string, fmt, ap); +8003b394: 8fc20014 lw v0,20(s8) +8003b398: 00000000 nop +8003b39c: 00403021 move a2,v0 +8003b3a0: 8fc50024 lw a1,36(s8) +8003b3a4: 8fc40020 lw a0,32(s8) +8003b3a8: 0c00ecc8 jal 8003b320 <vsprintf> +8003b3ac: 00000000 nop +8003b3b0: afc20010 sw v0,16(s8) + + va_end(ap); + + return r; +8003b3b4: 8fc20010 lw v0,16(s8) +} +8003b3b8: 03c0e821 move sp,s8 +8003b3bc: 8fbf001c lw ra,28(sp) +8003b3c0: 8fbe0018 lw s8,24(sp) +8003b3c4: 27bd0020 addiu sp,sp,32 +8003b3c8: 03e00008 jr ra +8003b3cc: 00000000 nop + +8003b3d0 <snprintf>: + +int snprintf(char *string, size_t size, const char *fmt, ...) +{ +8003b3d0: 27bdffe0 addiu sp,sp,-32 +8003b3d4: afbf001c sw ra,28(sp) +8003b3d8: afbe0018 sw s8,24(sp) +8003b3dc: 03a0f021 move s8,sp +8003b3e0: afc40020 sw a0,32(s8) +8003b3e4: afc50024 sw a1,36(s8) +8003b3e8: afc60028 sw a2,40(s8) +8003b3ec: afc7002c sw a3,44(s8) + int r; + + va_list ap; + + va_start(ap, fmt); +8003b3f0: 27c2002c addiu v0,s8,44 +8003b3f4: afc20014 sw v0,20(s8) + + r = vsnprintf(string, size, fmt, ap); +8003b3f8: 8fc20014 lw v0,20(s8) +8003b3fc: 00000000 nop +8003b400: 00403821 move a3,v0 +8003b404: 8fc60028 lw a2,40(s8) +8003b408: 8fc50024 lw a1,36(s8) +8003b40c: 8fc40020 lw a0,32(s8) +8003b410: 0c00ec5d jal 8003b174 <vsnprintf> +8003b414: 00000000 nop +8003b418: afc20010 sw v0,16(s8) + + va_end(ap); + + return r; +8003b41c: 8fc20010 lw v0,16(s8) +} +8003b420: 03c0e821 move sp,s8 +8003b424: 8fbf001c lw ra,28(sp) +8003b428: 8fbe0018 lw s8,24(sp) +8003b42c: 27bd0020 addiu sp,sp,32 +8003b430: 03e00008 jr ra +8003b434: 00000000 nop + +8003b438 <sio_printf>: + +int sio_printf(const char *fmt, ...) +{ +8003b438: 27bdffe0 addiu sp,sp,-32 +8003b43c: afbf001c sw ra,28(sp) +8003b440: afbe0018 sw s8,24(sp) +8003b444: 03a0f021 move s8,sp +8003b448: afc40020 sw a0,32(s8) +8003b44c: afc50024 sw a1,36(s8) +8003b450: afc60028 sw a2,40(s8) +8003b454: afc7002c sw a3,44(s8) + int r; + + va_list ap; + + va_start(ap, fmt); +8003b458: 27c20024 addiu v0,s8,36 +8003b45c: afc20014 sw v0,20(s8) + + r = sio_vprintf(fmt, ap); +8003b460: 8fc20014 lw v0,20(s8) +8003b464: 00000000 nop +8003b468: 00402821 move a1,v0 +8003b46c: 8fc40020 lw a0,32(s8) +8003b470: 0c00ec89 jal 8003b224 <sio_vprintf> +8003b474: 00000000 nop +8003b478: afc20010 sw v0,16(s8) + + va_end(ap); + + return r; +8003b47c: 8fc20010 lw v0,16(s8) +} +8003b480: 03c0e821 move sp,s8 +8003b484: 8fbf001c lw ra,28(sp) +8003b488: 8fbe0018 lw s8,24(sp) +8003b48c: 27bd0020 addiu sp,sp,32 +8003b490: 03e00008 jr ra +8003b494: 00000000 nop + +8003b498 <_internal_cdrom_handler>: +.global _internal_cdrom_handler +.set noat + + +_internal_cdrom_handler: + addi $sp, -112 +8003b498: 23bdff90 afa10000 afa20004 afa30008 ...#............ + sw $at, 0($sp) + sw $v0, 4($sp) + sw $v1, 8($sp) + sw $a0, 12($sp) +8003b4a8: afa4000c afa50010 afa60014 afa70018 ................ + sw $a1, 16($sp) + sw $a2, 20($sp) + sw $a3, 24($sp) + sw $t0, 28($sp) +8003b4b8: afa8001c afa90020 afaa0024 afab0028 .... ...$...(... + sw $t1, 32($sp) + sw $t2, 36($sp) + sw $t3, 40($sp) + sw $t4, 44($sp) +8003b4c8: afac002c afad0030 afae0034 afaf0038 ,...0...4...8... + sw $t5, 48($sp) + sw $t6, 52($sp) + sw $t7, 56($sp) + sw $s0, 60($sp) +8003b4d8: afb0003c afb10040 afb20044 afb30048 <...@...D...H... + sw $s1, 64($sp) + sw $s2, 68($sp) + sw $s3, 72($sp) + sw $s4, 76($sp) +8003b4e8: afb4004c afb50050 afb60054 afb70058 L...P...T...X... + sw $s5, 80($sp) + sw $s6, 84($sp) + sw $s7, 88($sp) + sw $t8, 92($sp) +8003b4f8: afb8005c afb90060 afbc0064 afbe0068 \...`...d...h... + sw $t9, 96($sp) + sw $gp, 100($sp) + sw $s8, 104($sp) + sw $ra, 108($sp) +8003b508: afbf006c 3c081f80 35081074 8d090000 l......<t..5.... + +# Do not run code if cdrom interrupt is not enabled + + li $t0, 0x1f801074 + lw $t1, 0($t0) +8003b518: 00000000 31290004 1120001e 00000000 ......)1.. ..... + andi $t1, $t1, 4 + beq $t1, $zero, cdrom_handler_end + nop +8003b528: 00000000 3c081f80 35081070 8d090000 .......<p..5.... + +# Do not run code if cdrom interrupt is not pending + + li $t0, 0x1f801070 + lw $t1, 0($t0) +8003b538: 00000000 31290004 11200016 00000000 ......)1.. ..... + andi $t1, $t1, 4 + beq $t1, $zero, cdrom_handler_end + nop +8003b548: 00000000 .... + +8003b54c <cdrom_check_direct_cmd>: +# If the CDROM command isn't direct +# (direct = sent by us and not by the BIOS' ISO9660 routines) +# exit and let the BIOS do its work. + +cdrom_check_direct_cmd: + la $t0, cdrom_command_direct +8003b54c: 3c088007 lui t0,0x8007 +8003b550: 25081cc8 addiu t0,t0,7368 + lw $t1, 0($t0) +8003b554: 8d090000 lw t1,0(t0) +8003b558: 00000000 nop + beq $t1, $zero, cdrom_handler_end +8003b55c: 1120000f beqz t1,8003b59c <cdrom_handler_end> +8003b560: 00000000 nop + nop +8003b564: 00000000 nop + +8003b568 <cdrom_fire_user_handler>: + +cdrom_fire_user_handler: + la $t0, cdrom_handler_callback +8003b568: 3c088007 lui t0,0x8007 +8003b56c: 25081d34 addiu t0,t0,7476 + lw $t1, 0($t0) +8003b570: 8d090000 lw t1,0(t0) +8003b574: 00000000 nop + + jalr $t1 +8003b578: 0120f809 jalr t1 +8003b57c: 00000000 nop + nop +8003b580: 00000000 nop + +8003b584 <cdrom_handler_remove_pending>: + +# Remove bit for CDROM interrupt (bit 2) from pending interrupts mask. + +cdrom_handler_remove_pending: + li $t0, 0x1f801070 +8003b584: 3c081f80 lui t0,0x1f80 +8003b588: 35081070 ori t0,t0,0x1070 + lw $t1, 0($t0) +8003b58c: 8d090000 lw t1,0(t0) +8003b590: 00000000 nop + xori $t1, $t1, 4 +8003b594: 39290004 xori t1,t1,0x4 + sw $t1, 0($t0) +8003b598: ad090000 sw t1,0(t0) + +8003b59c <cdrom_handler_end>: + +cdrom_handler_end: + + lw $at, 0($sp) +8003b59c: 8fa10000 lw at,0(sp) + lw $v0, 4($sp) +8003b5a0: 8fa20004 lw v0,4(sp) + lw $v1, 8($sp) +8003b5a4: 8fa30008 lw v1,8(sp) + lw $a0, 12($sp) +8003b5a8: 8fa4000c lw a0,12(sp) + lw $a1, 16($sp) +8003b5ac: 8fa50010 lw a1,16(sp) + lw $a2, 20($sp) +8003b5b0: 8fa60014 lw a2,20(sp) + lw $a3, 24($sp) +8003b5b4: 8fa70018 lw a3,24(sp) + lw $t0, 28($sp) +8003b5b8: 8fa8001c lw t0,28(sp) + lw $t1, 32($sp) +8003b5bc: 8fa90020 lw t1,32(sp) + lw $t2, 36($sp) +8003b5c0: 8faa0024 lw t2,36(sp) + lw $t3, 40($sp) +8003b5c4: 8fab0028 lw t3,40(sp) + lw $t4, 44($sp) +8003b5c8: 8fac002c lw t4,44(sp) + lw $t5, 48($sp) +8003b5cc: 8fad0030 lw t5,48(sp) + lw $t6, 52($sp) +8003b5d0: 8fae0034 lw t6,52(sp) + lw $t7, 56($sp) +8003b5d4: 8faf0038 lw t7,56(sp) + lw $s0, 60($sp) +8003b5d8: 8fb0003c lw s0,60(sp) + lw $s1, 64($sp) +8003b5dc: 8fb10040 lw s1,64(sp) + lw $s2, 68($sp) +8003b5e0: 8fb20044 lw s2,68(sp) + lw $s3, 72($sp) +8003b5e4: 8fb30048 lw s3,72(sp) + lw $s4, 76($sp) +8003b5e8: 8fb4004c lw s4,76(sp) + lw $s5, 80($sp) +8003b5ec: 8fb50050 lw s5,80(sp) + lw $s6, 84($sp) +8003b5f0: 8fb60054 lw s6,84(sp) + lw $s7, 88($sp) +8003b5f4: 8fb70058 lw s7,88(sp) + lw $t8, 92($sp) +8003b5f8: 8fb8005c lw t8,92(sp) + lw $t9, 96($sp) +8003b5fc: 8fb90060 lw t9,96(sp) + lw $gp, 100($sp) +8003b600: 8fbc0064 lw gp,100(sp) + lw $s8, 104($sp) +8003b604: 8fbe0068 lw s8,104(sp) + lw $ra, 108($sp) +8003b608: 8fbf006c lw ra,108(sp) + addi $sp, 112 +8003b60c: 23bd0070 addi sp,sp,112 + jr $ra +8003b610: 03e00008 jr ra +8003b614: 00000000 nop + nop +8003b618: 00000000 nop + +8003b61c <bios_putchar>: +.global printf +.extern __stdio_direction +.extern sio_printf + +bios_putchar: + li $9, 0x3c +8003b61c: 2409003c 08000028 00000000 00000000 <..$(........... + +8003b62c <bios_puts>: + j 0xa0 + nop + +bios_puts: + li $9, 0x3e +8003b62c: 2409003e 08000028 00000000 00000000 >..$(........... + +8003b63c <printf>: + j 0xa0 + nop + +printf: + la $9, __stdio_direction +8003b63c: 3c098007 25291cc0 8d2a0000 00000000 ...<..)%..*..... + lw $10, 0($9) + beq $10, $0, use_bios_printf +8003b64c: 11400005 00000000 00000000 0800ed0e ..@............. + ... + +8003b664 <use_bios_printf>: + nop + j sio_printf + nop +use_bios_printf: + li $9, 0x3f +8003b664: 2409003f li t1,63 + j 0xa0 +8003b668: 08000028 j 800000a0 <__scratchpad+0x608000a0> +8003b66c: 00000000 nop + nop +8003b670: 00000000 nop + +8003b674 <InitHeap>: + +.global InitHeap +.global FlushCache + +InitHeap: + li $9, 0x39 +8003b674: 24090039 08000028 00000000 00000000 9..$(........... + +8003b684 <FlushCache>: + j 0xa0 + nop + +FlushCache: + li $9, 0x44 +8003b684: 24090044 08000028 00000000 00000000 D..$(........... + +8003b694 <GPU_dw>: +.global GPU_cwb +.global SendPrimitive +.global GetGPUStatus + +GPU_dw: + li $9, 0x46 +8003b694: 24090046 08000028 00000000 00000000 F..$(........... + +8003b6a4 <mem2vram>: + j 0xa0 + nop + +mem2vram: + li $9, 0x47 +8003b6a4: 24090047 08000028 00000000 00000000 G..$(........... + +8003b6b4 <ResetEntryInt>: + nop + +.global ResetEntryInt + +ResetEntryInt: + li $9, 0x18 +8003b6b4: 24090018 0800002c 00000000 00000000 ...$,........... + +8003b6c4 <GetKernelDate>: +.global GetKernelDate +.global GetKernelRomVersion +.global GetRamSize + +GetKernelDate: + li $9, 0xb4 +8003b6c4: 240900b4 24040000 08000028 00000000 ...$...$(....... + li $4, 0 + j 0xa0 + nop +8003b6d4: 00000000 .... + +8003b6d8 <GetKernelRomVersion>: + +GetKernelRomVersion: + li $9, 0xb4 +8003b6d8: 240900b4 24040002 08000028 00000000 ...$...$(....... + li $4, 2 + j 0xa0 + nop +8003b6e8: 00000000 .... + +8003b6ec <GetRamSize>: + +GetRamSize: + li $9, 0xb4 +8003b6ec: 240900b4 24040005 08000028 00000000 ...$...$(....... + li $4, 5 + j 0xa0 + nop +8003b6fc: 00000000 .... + +8003b700 <OpenEvent>: +.global WaitEvent +.global TestEvent +.global DeliverEvent + +OpenEvent: + li $9, 0x08 +8003b700: 24090008 0800002c 00000000 00000000 ...$,........... + +8003b710 <EnableEvent>: + j 0xb0 + nop + +EnableEvent: + li $9, 0x0c +8003b710: 2409000c 0800002c 00000000 00000000 ...$,........... + +8003b720 <CloseEvent>: + j 0xb0 + nop + +CloseEvent: + li $9, 0x09 +8003b720: 24090009 0800002c 00000000 00000000 ...$,........... + +8003b730 <DisableEvent>: + j 0xb0 + nop + +DisableEvent: + li $9, 0x0d +8003b730: 2409000d 0800002c 00000000 00000000 ...$,........... + +8003b740 <DeliverEvent>: + j 0xb0 + nop + +DeliverEvent: + li $9, 0x07 +8003b740: 24090007 0800002c 00000000 00000000 ...$,........... + +8003b750 <WaitEvent>: + j 0xb0 + nop + +WaitEvent: + li $9, 0x0a +8003b750: 2409000a 0800002c 00000000 00000000 ...$,........... + +8003b760 <TestEvent>: + j 0xb0 + nop + +TestEvent: + li $9, 0x0b +8003b760: 2409000b 0800002c 00000000 00000000 ...$,........... + +8003b770 <open>: +.global nextfile +.global rename +.global remove + +open: + li $9, 0x32 +8003b770: 24090032 0800002c 00000000 00000000 2..$,........... + +8003b780 <lseek>: + j 0xb0 + nop + +lseek: + li $9, 0x33 +8003b780: 24090033 0800002c 00000000 00000000 3..$,........... + +8003b790 <read>: + j 0xb0 + nop + +read: + li $9, 0x34 +8003b790: 24090034 0800002c 00000000 00000000 4..$,........... + +8003b7a0 <write>: + j 0xb0 + nop + +write: + li $9, 0x35 +8003b7a0: 24090035 0800002c 00000000 00000000 5..$,........... + +8003b7b0 <close>: + j 0xb0 + nop + +close: + li $9, 0x36 +8003b7b0: 24090036 0800002c 00000000 00000000 6..$,........... + +8003b7c0 <cd>: + j 0xb0 + nop + +cd: + li $9, 0x40 +8003b7c0: 24090040 0800002c 00000000 00000000 @..$,........... + +8003b7d0 <firstfile>: + j 0xb0 + nop + +firstfile: + li $9, 0x42 +8003b7d0: 24090042 0800002c 00000000 00000000 B..$,........... + +8003b7e0 <nextfile>: + j 0xb0 + nop + +nextfile: + li $9, 0x43 +8003b7e0: 24090043 0800002c 00000000 00000000 C..$,........... + +8003b7f0 <rename>: + j 0xb0 + nop + +rename: + li $9, 0x44 +8003b7f0: 24090044 0800002c 00000000 00000000 D..$,........... + +8003b800 <remove>: + j 0xb0 + nop + +remove: + li $9, 0x45 +8003b800: 24090045 0800002c 00000000 00000000 E..$,........... + +8003b810 <EnterCriticalSection>: +.global ExitCriticalSection +.global SysEnqIntRP +.global SysDeqIntRP + +EnterCriticalSection: + li $a0, 1 +8003b810: 24040001 0000000c 00000000 03e00008 ...$............ + ... + +8003b828 <ExitCriticalSection>: + nop + jr $ra + nop + +ExitCriticalSection: + li $a0, 2 +8003b828: 24040002 0000000c 00000000 03e00008 ...$............ + ... + +8003b840 <SysEnqIntRP>: + nop + jr $ra + nop + +SysEnqIntRP: + li $9, 0x02 +8003b840: 24090002 08000030 00000000 00000000 ...$0........... + +8003b850 <SysDeqIntRP>: + j 0xc0 + nop + +SysDeqIntRP: + li $9, 0x03 +8003b850: 24090003 08000030 00000000 00000000 ...$0........... + +8003b860 <_96_init>: +.global _96_init +.global _96_remove +.global _bu_init + +_96_init: + li $9, 0x71 +8003b860: 24090071 08000028 00000000 00000000 q..$(........... + +8003b870 <_96_remove>: + j 0xa0 + nop + +_96_remove: + li $9, 0x72 +8003b870: 24090072 08000028 00000000 00000000 r..$(........... + +8003b880 <_bu_init>: + j 0xa0 + nop + +_bu_init: + li $9, 0x70 +8003b880: 24090070 08000028 00000000 00000000 p..$(........... + +8003b890 <LoadExec>: +# Executable loading functions + +.global LoadExec + +LoadExec: + li $9, 0x51 +8003b890: 24090051 08000028 00000000 00000000 Q..$(........... + +8003b8a0 <InitCARD>: +.global _card_read +.global _card_status +.global _new_card + +InitCARD: + li $9, 0x4a +8003b8a0: 2409004a 0800002c 00000000 00000000 J..$,........... + +8003b8b0 <StartCARD>: + j 0xb0 + nop + +StartCARD: + li $9, 0x4b +8003b8b0: 2409004b 0800002c 00000000 00000000 K..$,........... + +8003b8c0 <StopCARD>: + j 0xb0 + nop + +StopCARD: + li $9, 0x4c +8003b8c0: 2409004c 0800002c 00000000 00000000 L..$,........... + +8003b8d0 <_card_info>: + j 0xb0 + nop + +_card_info: + li $9, 0xab +8003b8d0: 240900ab 08000028 00000000 00000000 ...$(........... + +8003b8e0 <_card_load>: + j 0xa0 + nop + +_card_load: + li $9, 0xac +8003b8e0: 240900ac 08000028 00000000 00000000 ...$(........... + +8003b8f0 <_card_auto>: + j 0xa0 + nop + +_card_auto: + li $9, 0xad +8003b8f0: 240900ad 08000028 00000000 00000000 ...$(........... + +8003b900 <_card_write>: + j 0xa0 + nop + +_card_write: + li $9, 0x4e +8003b900: 2409004e 0800002c 00000000 00000000 N..$,........... + +8003b910 <_card_read>: + j 0xb0 + nop + +_card_read: + li $9, 0x4f +8003b910: 2409004f 0800002c 00000000 00000000 O..$,........... + +8003b920 <_new_card>: + j 0xb0 + nop + +_new_card: + li $9, 0x50 +8003b920: 24090050 0800002c 00000000 00000000 P..$,........... + +8003b930 <_card_status>: + j 0xb0 + nop + +_card_status: + li $9, 0x5c +8003b930: 2409005c 0800002c 00000000 00000000 \..$,........... + +8003b940 <PrintInstalledDevices>: +# Device functions + +.global PrintInstalledDevices + +PrintInstalledDevices: + li $9, 0x49 +8003b940: 24090049 0800002c 00000000 00000000 I..$,........... + +8003b950 <BIOSWarmReboot>: + nop + +.global BIOSWarmReboot + +BIOSWarmReboot: + li $9, 0xa0 +8003b950: 240900a0 00000000 08000028 00000000 ...$....(....... + +8003b960 <SetCDROMHandler>: +volatile int __psxsdk_gpu_dma_finished; + +extern void _internal_cdromlib_callback(); + +void SetCDROMHandler(void) +{ +8003b960: 27bdffe8 addiu sp,sp,-24 +8003b964: afbf0014 sw ra,20(sp) +8003b968: afbe0010 sw s8,16(sp) +8003b96c: 03a0f021 move s8,sp + _EXC_cdrom_handler_set = 1; +8003b970: 3c028007 lui v0,0x8007 +8003b974: 24030001 li v1,1 +8003b978: ac431d84 sw v1,7556(v0) + _EXC_cdrom_handler = _internal_cdromlib_callback; +8003b97c: 3c028007 lui v0,0x8007 +8003b980: 3c038003 lui v1,0x8003 +8003b984: 2463ac44 addiu v1,v1,-21436 +8003b988: ac431d80 sw v1,7552(v0) + IMASK = /* VBLANK */ 1 | /* CDROM */ 4 | /* DMA */8; +8003b98c: 3c021f80 lui v0,0x1f80 +8003b990: 34421074 ori v0,v0,0x1074 +8003b994: 2403000d li v1,13 +8003b998: ac430000 sw v1,0(v0) + printf("SetCDROMHandler\n"); +8003b99c: 3c028004 lui v0,0x8004 +8003b9a0: 24440044 addiu a0,v0,68 +8003b9a4: 0c00ed8f jal 8003b63c <printf> +8003b9a8: 00000000 nop +} +8003b9ac: 00000000 nop +8003b9b0: 03c0e821 move sp,s8 +8003b9b4: 8fbf0014 lw ra,20(sp) +8003b9b8: 8fbe0010 lw s8,16(sp) +8003b9bc: 27bd0018 addiu sp,sp,24 +8003b9c0: 03e00008 jr ra +8003b9c4: 00000000 nop + +8003b9c8 <__psxsdk_real_exception_handler>: + +void __psxsdk_real_exception_handler() +{ +8003b9c8: 27bdffd0 addiu sp,sp,-48 +8003b9cc: afbf002c sw ra,44(sp) +8003b9d0: afbe0028 sw s8,40(sp) +8003b9d4: 03a0f021 move s8,sp + unsigned int Cause = get_cop0_register(COP0_CAUSE); +8003b9d8: 2404000d li a0,13 +8003b9dc: 0c00f00c jal 8003c030 <get_cop0_register> +8003b9e0: 00000000 nop +8003b9e4: afc20014 sw v0,20(s8) + unsigned int Cause_excCode = (Cause >> 2) & 31; +8003b9e8: 8fc20014 lw v0,20(s8) +8003b9ec: 00000000 nop +8003b9f0: 00021082 srl v0,v0,0x2 +8003b9f4: 3042001f andi v0,v0,0x1f +8003b9f8: afc20018 sw v0,24(s8) + unsigned int Cause_IP = (Cause >> 8) & 255; +8003b9fc: 8fc20014 lw v0,20(s8) +8003ba00: 00000000 nop +8003ba04: 00021202 srl v0,v0,0x8 +8003ba08: 304200ff andi v0,v0,0xff +8003ba0c: afc2001c sw v0,28(s8) + unsigned int SR = get_cop0_register(COP0_SR); +8003ba10: 2404000c li a0,12 +8003ba14: 0c00f00c jal 8003c030 <get_cop0_register> +8003ba18: 00000000 nop +8003ba1c: afc20020 sw v0,32(s8) + unsigned int SR_IM = (SR >> 8) & 255; +8003ba20: 8fc20020 lw v0,32(s8) +8003ba24: 00000000 nop +8003ba28: 00021202 srl v0,v0,0x8 +8003ba2c: 304200ff andi v0,v0,0xff +8003ba30: afc20024 sw v0,36(s8) +/* unsigned int oldSR = SR; + unsigned int psxIP = IPENDING; + unsigned int psxIM = IMASK; + unsigned int sio_data;*/ + + if(Cause_excCode == 0) // interrupt generated the exception +8003ba34: 8fc20018 lw v0,24(s8) +8003ba38: 00000000 nop +8003ba3c: 14400078 bnez v0,8003bc20 <__psxsdk_real_exception_handler+0x258> +8003ba40: 00000000 nop + break; + } + } + }*/ + + if((Cause_IP & (1<<2)) && (SR_IM & (1<<2))) +8003ba44: 8fc2001c lw v0,28(s8) +8003ba48: 00000000 nop +8003ba4c: 30420004 andi v0,v0,0x4 +8003ba50: 10400073 beqz v0,8003bc20 <__psxsdk_real_exception_handler+0x258> +8003ba54: 00000000 nop +8003ba58: 8fc20024 lw v0,36(s8) +8003ba5c: 00000000 nop +8003ba60: 30420004 andi v0,v0,0x4 +8003ba64: 1040006e beqz v0,8003bc20 <__psxsdk_real_exception_handler+0x258> +8003ba68: 00000000 nop + { + Cause ^= 1<<10; +8003ba6c: 8fc20014 lw v0,20(s8) +8003ba70: 00000000 nop +8003ba74: 38420400 xori v0,v0,0x400 +8003ba78: afc20014 sw v0,20(s8) + set_cop0_register(COP0_CAUSE, Cause); +8003ba7c: 8fc50014 lw a1,20(s8) +8003ba80: 2404000d li a0,13 +8003ba84: 0c00f072 jal 8003c1c8 <set_cop0_register> +8003ba88: 00000000 nop + //SR ^= 1<<10; + //set_cop0_register(COP0_SR, SR); + + //while(IPENDING != 0) + { + for(i = 0; i < 11; i++) +8003ba8c: afc00010 sw zero,16(s8) +8003ba90: 1000005e b 8003bc0c <__psxsdk_real_exception_handler+0x244> +8003ba94: 00000000 nop + { + if(IPENDING & (1<<i)) +8003ba98: 3c021f80 lui v0,0x1f80 +8003ba9c: 34421070 ori v0,v0,0x1070 +8003baa0: 8c420000 lw v0,0(v0) +8003baa4: 24040001 li a0,1 +8003baa8: 8fc30010 lw v1,16(s8) +8003baac: 00000000 nop +8003bab0: 00641804 sllv v1,a0,v1 +8003bab4: 00431024 and v0,v0,v1 +8003bab8: 10400050 beqz v0,8003bbfc <__psxsdk_real_exception_handler+0x234> +8003babc: 00000000 nop +// Very interesting, when reading joypad status the PCSXR emulator sets in IPENDING that IRQ7 is pending even +// if it is not enabled in IMASK! That is insane, but it can be easily worked around. +// So we are going to disable pending bits for IRQs in IPENDING in any case, even if the in IRQ at hand was +// not enabled in IMASK. + + IPENDING ^= 1 << i; +8003bac0: 3c021f80 lui v0,0x1f80 +8003bac4: 34421070 ori v0,v0,0x1070 +8003bac8: 3c031f80 lui v1,0x1f80 +8003bacc: 34631070 ori v1,v1,0x1070 +8003bad0: 8c630000 lw v1,0(v1) +8003bad4: 24050001 li a1,1 +8003bad8: 8fc40010 lw a0,16(s8) +8003badc: 00000000 nop +8003bae0: 00852004 sllv a0,a1,a0 +8003bae4: 00641826 xor v1,v1,a0 +8003bae8: ac430000 sw v1,0(v0) + + if(IMASK & (1<<i)) +8003baec: 3c021f80 lui v0,0x1f80 +8003baf0: 34421074 ori v0,v0,0x1074 +8003baf4: 8c420000 lw v0,0(v0) +8003baf8: 24040001 li a0,1 +8003bafc: 8fc30010 lw v1,16(s8) +8003bb00: 00000000 nop +8003bb04: 00641804 sllv v1,a0,v1 +8003bb08: 00431024 and v0,v0,v1 +8003bb0c: 1040003b beqz v0,8003bbfc <__psxsdk_real_exception_handler+0x234> +8003bb10: 00000000 nop + { + // printf("IM = %x\n", IMASK); + + switch(i) +8003bb14: 8fc20010 lw v0,16(s8) +8003bb18: 00000000 nop +8003bb1c: 2c420009 sltiu v0,v0,9 +8003bb20: 10400036 beqz v0,8003bbfc <__psxsdk_real_exception_handler+0x234> +8003bb24: 00000000 nop +8003bb28: 8fc20010 lw v0,16(s8) +8003bb2c: 00000000 nop +8003bb30: 00021880 sll v1,v0,0x2 +8003bb34: 3c028004 lui v0,0x8004 +8003bb38: 24420058 addiu v0,v0,88 +8003bb3c: 00621021 addu v0,v1,v0 +8003bb40: 8c420000 lw v0,0(v0) +8003bb44: 00000000 nop +8003bb48: 00400008 jr v0 +8003bb4c: 00000000 nop + case 0: // VBLANK + // if(!(GPU_CONTROL_PORT & (1<<0x1c))) + // GPU_CONTROL_PORT = 0x02000000; + + // Execute the user-supplied VBlank handler. + if(_EXC_vblank_handler_set) +8003bb50: 3c028007 lui v0,0x8007 +8003bb54: 8c421d74 lw v0,7540(v0) +8003bb58: 00000000 nop +8003bb5c: 10400020 beqz v0,8003bbe0 <__psxsdk_real_exception_handler+0x218> +8003bb60: 00000000 nop + _EXC_vblank_handler(); +8003bb64: 3c028007 lui v0,0x8007 +8003bb68: 8c421d8c lw v0,7564(v0) +8003bb6c: 00000000 nop +8003bb70: 0040f809 jalr v0 +8003bb74: 00000000 nop + break; +8003bb78: 10000019 b 8003bbe0 <__psxsdk_real_exception_handler+0x218> +8003bb7c: 00000000 nop + case 2: + dprintf("case 2: CDROM?\n"); + if(_EXC_cdrom_handler_set) +8003bb80: 3c028007 lui v0,0x8007 +8003bb84: 8c421d84 lw v0,7556(v0) +8003bb88: 00000000 nop +8003bb8c: 10400017 beqz v0,8003bbec <__psxsdk_real_exception_handler+0x224> +8003bb90: 00000000 nop + _EXC_cdrom_handler(); +8003bb94: 3c028007 lui v0,0x8007 +8003bb98: 8c421d80 lw v0,7552(v0) +8003bb9c: 00000000 nop +8003bba0: 0040f809 jalr v0 +8003bba4: 00000000 nop + break; +8003bba8: 10000010 b 8003bbec <__psxsdk_real_exception_handler+0x224> +8003bbac: 00000000 nop + case 3: // DMA + // Execute the user-supplied DMA handler. + dprintf("INT3\n"); + if(_EXC_dma_handler_set) +8003bbb0: 3c028007 lui v0,0x8007 +8003bbb4: 8c421d78 lw v0,7544(v0) +8003bbb8: 00000000 nop +8003bbbc: 1040000e beqz v0,8003bbf8 <__psxsdk_real_exception_handler+0x230> +8003bbc0: 00000000 nop + _EXC_dma_handler(); +8003bbc4: 3c028007 lui v0,0x8007 +8003bbc8: 8c421d94 lw v0,7572(v0) +8003bbcc: 00000000 nop +8003bbd0: 0040f809 jalr v0 +8003bbd4: 00000000 nop + break; +8003bbd8: 10000007 b 8003bbf8 <__psxsdk_real_exception_handler+0x230> +8003bbdc: 00000000 nop + // GPU_CONTROL_PORT = 0x02000000; + + // Execute the user-supplied VBlank handler. + if(_EXC_vblank_handler_set) + _EXC_vblank_handler(); + break; +8003bbe0: 00000000 nop +8003bbe4: 10000005 b 8003bbfc <__psxsdk_real_exception_handler+0x234> +8003bbe8: 00000000 nop + case 2: + dprintf("case 2: CDROM?\n"); + if(_EXC_cdrom_handler_set) + _EXC_cdrom_handler(); + break; +8003bbec: 00000000 nop +8003bbf0: 10000002 b 8003bbfc <__psxsdk_real_exception_handler+0x234> +8003bbf4: 00000000 nop + case 3: // DMA + // Execute the user-supplied DMA handler. + dprintf("INT3\n"); + if(_EXC_dma_handler_set) + _EXC_dma_handler(); + break; +8003bbf8: 00000000 nop + //SR ^= 1<<10; + //set_cop0_register(COP0_SR, SR); + + //while(IPENDING != 0) + { + for(i = 0; i < 11; i++) +8003bbfc: 8fc20010 lw v0,16(s8) +8003bc00: 00000000 nop +8003bc04: 24420001 addiu v0,v0,1 +8003bc08: afc20010 sw v0,16(s8) +8003bc0c: 8fc20010 lw v0,16(s8) +8003bc10: 00000000 nop +8003bc14: 2842000b slti v0,v0,11 +8003bc18: 1440ff9f bnez v0,8003ba98 <__psxsdk_real_exception_handler+0xd0> +8003bc1c: 00000000 nop + } + } + } + } + } +} +8003bc20: 00000000 nop +8003bc24: 03c0e821 move sp,s8 +8003bc28: 8fbf002c lw ra,44(sp) +8003bc2c: 8fbe0028 lw s8,40(sp) +8003bc30: 27bd0030 addiu sp,sp,48 +8003bc34: 03e00008 jr ra +8003bc38: 00000000 nop + +8003bc3c <__psxsdk_dma_handler>: + +static void __psxsdk_dma_handler() +{ +8003bc3c: 27bdfff0 addiu sp,sp,-16 +8003bc40: afbe000c sw s8,12(sp) +8003bc44: 03a0f021 move s8,sp + unsigned int s_dicr = DICR; +8003bc48: 3c021f80 lui v0,0x1f80 +8003bc4c: 344210f4 ori v0,v0,0x10f4 +8003bc50: 8c420000 lw v0,0(v0) +8003bc54: 00000000 nop +8003bc58: afc20000 sw v0,0(s8) + unsigned char irq = (s_dicr >> 24) & 127; +8003bc5c: 8fc20000 lw v0,0(s8) +8003bc60: 00000000 nop +8003bc64: 00021602 srl v0,v0,0x18 +8003bc68: 304200ff andi v0,v0,0xff +8003bc6c: 3042007f andi v0,v0,0x7f +8003bc70: a3c20004 sb v0,4(s8) + + if(irq & (1<<2)) // GPU +8003bc74: 93c20004 lbu v0,4(s8) +8003bc78: 00000000 nop +8003bc7c: 30420004 andi v0,v0,0x4 +8003bc80: 10400004 beqz v0,8003bc94 <__psxsdk_dma_handler+0x58> +8003bc84: 00000000 nop + __psxsdk_gpu_dma_finished = 1; +8003bc88: 3c028007 lui v0,0x8007 +8003bc8c: 24030001 li v1,1 +8003bc90: ac431d90 sw v1,7568(v0) + + // Acknowledge + DICR = s_dicr; +8003bc94: 3c021f80 lui v0,0x1f80 +8003bc98: 344210f4 ori v0,v0,0x10f4 +8003bc9c: 8fc30000 lw v1,0(s8) +8003bca0: 00000000 nop +8003bca4: ac430000 sw v1,0(v0) + + // Waste some cycles, so that the acknowledgement is reported +// int x; + +// for(x = 0; x < 1000; x++); +} +8003bca8: 00000000 nop +8003bcac: 03c0e821 move sp,s8 +8003bcb0: 8fbe000c lw s8,12(sp) +8003bcb4: 27bd0010 addiu sp,sp,16 +8003bcb8: 03e00008 jr ra +8003bcbc: 00000000 nop + +8003bcc0 <__PSX_Init_NoBios>: + +extern void _internal_cdromlib_callback(); + + void __PSX_Init_NoBios() + { +8003bcc0: 27bdffe8 addiu sp,sp,-24 +8003bcc4: afbf0014 sw ra,20(sp) +8003bcc8: afbe0010 sw s8,16(sp) +8003bccc: 03a0f021 move s8,sp + _EXC_vblank_handler = NULL; +8003bcd0: 3c028007 lui v0,0x8007 +8003bcd4: ac401d8c sw zero,7564(v0) + _EXC_cdrom_handler = _internal_cdromlib_callback; +8003bcd8: 3c028007 lui v0,0x8007 +8003bcdc: 3c038003 lui v1,0x8003 +8003bce0: 2463ac44 addiu v1,v1,-21436 +8003bce4: ac431d80 sw v1,7552(v0) + _EXC_dma_handler = __psxsdk_dma_handler; +8003bce8: 3c028007 lui v0,0x8007 +8003bcec: 3c038004 lui v1,0x8004 +8003bcf0: 2463bc3c addiu v1,v1,-17348 +8003bcf4: ac431d94 sw v1,7572(v0) + _EXC_sio_handler = NULL; +8003bcf8: 3c028007 lui v0,0x8007 +8003bcfc: ac401d88 sw zero,7560(v0) + + _EXC_vblank_handler_set = 0; +8003bd00: 3c028007 lui v0,0x8007 +8003bd04: ac401d74 sw zero,7540(v0) + _EXC_cdrom_handler_set = 1; +8003bd08: 3c028007 lui v0,0x8007 +8003bd0c: 24030001 li v1,1 +8003bd10: ac431d84 sw v1,7556(v0) + _EXC_dma_handler_set = 1; +8003bd14: 3c028007 lui v0,0x8007 +8003bd18: 24030001 li v1,1 +8003bd1c: ac431d78 sw v1,7544(v0) + _EXC_sio_handler_set = 0; +8003bd20: 3c028007 lui v0,0x8007 +8003bd24: ac401d7c sw zero,7548(v0) + + IMASK = 0; // Clear Mask +8003bd28: 3c021f80 lui v0,0x1f80 +8003bd2c: 34421074 ori v0,v0,0x1074 +8003bd30: ac400000 sw zero,0(v0) + IPENDING = 0; // Clear pending interrupts +8003bd34: 3c021f80 lui v0,0x1f80 +8003bd38: 34421070 ori v0,v0,0x1070 +8003bd3c: ac400000 sw zero,0(v0) + +// Disable interrupts + + set_cop0_register(COP0_SR, 0); +8003bd40: 00002821 move a1,zero +8003bd44: 2404000c li a0,12 +8003bd48: 0c00f072 jal 8003c1c8 <set_cop0_register> +8003bd4c: 00000000 nop + +// Change exception vector to point to our exception manager + + *((unsigned int*)0x80000080) = 0x08000000 | ((((unsigned int)__psxsdk_exception_manager)>>2) & 0x3FFFFFF); +8003bd50: 3c028000 lui v0,0x8000 +8003bd54: 34420080 ori v0,v0,0x80 +8003bd58: 3c038004 lui v1,0x8004 +8003bd5c: 2463bdf4 addiu v1,v1,-16908 +8003bd60: 00032082 srl a0,v1,0x2 +8003bd64: 3c0303ff lui v1,0x3ff +8003bd68: 3463ffff ori v1,v1,0xffff +8003bd6c: 00832024 and a0,a0,v1 +8003bd70: 3c030800 lui v1,0x800 +8003bd74: 00831825 or v1,a0,v1 +8003bd78: ac430000 sw v1,0(v0) + *((unsigned int*)0x80000084) = 0; +8003bd7c: 3c028000 lui v0,0x8000 +8003bd80: 34420084 ori v0,v0,0x84 +8003bd84: ac400000 sw zero,0(v0) + + +// Enable interrupt generation, and interrupt 2 (PlayStation Interrupt Controller) + set_cop0_register(COP0_SR, (1<<10) | 1); +8003bd88: 24050401 li a1,1025 +8003bd8c: 2404000c li a0,12 +8003bd90: 0c00f072 jal 8003c1c8 <set_cop0_register> +8003bd94: 00000000 nop + +// Enable VBlank, CDROM and DMA IRQs (on PlayStation Interrupt Controller) + IMASK = 1 | /* CDROM */ 4 | 8; +8003bd98: 3c021f80 lui v0,0x1f80 +8003bd9c: 34421074 ori v0,v0,0x1074 +8003bda0: 2403000d li v1,13 +8003bda4: ac430000 sw v1,0(v0) + +// Set DMA channel priority + DPCR = 0x07654321; +8003bda8: 3c021f80 lui v0,0x1f80 +8003bdac: 344210f0 ori v0,v0,0x10f0 +8003bdb0: 3c030765 lui v1,0x765 +8003bdb4: 34634321 ori v1,v1,0x4321 +8003bdb8: ac430000 sw v1,0(v0) + +// Enable DMA IRQ master, and IRQ generation for DMA channel 2 (GPU) + DICR = (1<<23) | (1<<(16+2)); +8003bdbc: 3c021f80 lui v0,0x1f80 +8003bdc0: 344210f4 ori v0,v0,0x10f4 +8003bdc4: 3c030084 lui v1,0x84 +8003bdc8: ac430000 sw v1,0(v0) + +// Setup variables + __psxsdk_gpu_dma_finished = 1; +8003bdcc: 3c028007 lui v0,0x8007 +8003bdd0: 24030001 li v1,1 +8003bdd4: ac431d90 sw v1,7568(v0) +} +8003bdd8: 00000000 nop +8003bddc: 03c0e821 move sp,s8 +8003bde0: 8fbf0014 lw ra,20(sp) +8003bde4: 8fbe0010 lw s8,16(sp) +8003bde8: 27bd0018 addiu sp,sp,24 +8003bdec: 03e00008 jr ra +8003bdf0: 00000000 nop + +8003bdf4 <__psxsdk_exception_manager>: +__psxsdk_exception_manager: + +# Save registers on stack + +.set noat + addiu $sp, $sp, -112 +8003bdf4: 27bdff90 afa10000 afa20004 afa30008 ...'............ + sw $at, 0($sp) + sw $v0, 4($sp) + sw $v1, 8($sp) + sw $a0, 12($sp) +8003be04: afa4000c afa50010 afa60014 afa70018 ................ + sw $a1, 16($sp) + sw $a2, 20($sp) + sw $a3, 24($sp) + sw $t0, 28($sp) +8003be14: afa8001c afa90020 afaa0024 afab0028 .... ...$...(... + sw $t1, 32($sp) + sw $t2, 36($sp) + sw $t3, 40($sp) + sw $t4, 44($sp) +8003be24: afac002c afad0030 afae0034 afaf0038 ,...0...4...8... + sw $t5, 48($sp) + sw $t6, 52($sp) + sw $t7, 56($sp) + sw $s0, 60($sp) +8003be34: afb0003c afb10040 afb20044 afb30048 <...@...D...H... + sw $s1, 64($sp) + sw $s2, 68($sp) + sw $s3, 72($sp) + sw $s4, 76($sp) +8003be44: afb4004c afb50050 afb60054 afb70058 L...P...T...X... + sw $s5, 80($sp) + sw $s6, 84($sp) + sw $s7, 88($sp) + sw $t8, 92($sp) +8003be54: afb8005c afb90060 afbc0064 afbe0068 \...`...d...h... + sw $t9, 96($sp) + sw $gp, 100($sp) + sw $fp, 104($sp) + sw $ra, 108($sp) +8003be64: afbf006c 0c00ee72 00000000 00000000 l...r........... + nop + +# Load registers from stack + +.set noat + lw $at, 0($sp) +8003be74: 8fa10000 8fa20004 8fa30008 8fa4000c ................ + lw $v0, 4($sp) + lw $v1, 8($sp) + lw $a0, 12($sp) + lw $a1, 16($sp) +8003be84: 8fa50010 8fa60014 8fa70018 8fa8001c ................ + lw $a2, 20($sp) + lw $a3, 24($sp) + lw $t0, 28($sp) + lw $t1, 32($sp) +8003be94: 8fa90020 8faa0024 8fab0028 8fac002c ...$...(...,... + lw $t2, 36($sp) + lw $t3, 40($sp) + lw $t4, 44($sp) + lw $t5, 48($sp) +8003bea4: 8fad0030 8fae0034 8faf0038 8fb0003c 0...4...8...<... + lw $t6, 52($sp) + lw $t7, 56($sp) + lw $s0, 60($sp) + lw $s1, 64($sp) +8003beb4: 8fb10040 8fb20044 8fb30048 8fb4004c @...D...H...L... + lw $s2, 68($sp) + lw $s3, 72($sp) + lw $s4, 76($sp) + lw $s5, 80($sp) +8003bec4: 8fb50050 8fb60054 8fb70058 8fb8005c P...T...X...\... + lw $s6, 84($sp) + lw $s7, 88($sp) + lw $t8, 92($sp) + lw $t9, 96($sp) +8003bed4: 8fb90060 8fbc0064 8fbe0068 8fbf006c `...d...h...l... + lw $gp, 100($sp) + lw $fp, 104($sp) + lw $ra, 108($sp) + addiu $sp, $sp, 112 +8003bee4: 27bd0070 401a7000 00000000 03400008 p..'.p.@......@. +# Get exception return address.. + mfc0 $k0, $14 +# Exit from exception handler +.set noreorder # Do not let the assembler fill the delay slot! + jr $k0 + rfe +8003bef4: 42000010 ...B + +8003bef8 <get_cop_register>: +#include <psx.h> + +unsigned int get_cop_register(unsigned char cop_num, + unsigned char register_num) +{ +8003bef8: 27bdffd0 addiu sp,sp,-48 +8003befc: afbf002c sw ra,44(sp) +8003bf00: afbe0028 sw s8,40(sp) +8003bf04: 03a0f021 move s8,sp +8003bf08: 00801821 move v1,a0 +8003bf0c: 00a01021 move v0,a1 +8003bf10: a3c30030 sb v1,48(s8) +8003bf14: a3c20034 sb v0,52(s8) +// Workaround for MIPS' simplicistic instruction set... + + unsigned int instr[] = +8003bf18: 3c024002 lui v0,0x4002 +8003bf1c: afc20014 sw v0,20(s8) +8003bf20: 3c0203e0 lui v0,0x3e0 +8003bf24: 34420008 ori v0,v0,0x8 +8003bf28: afc20018 sw v0,24(s8) +8003bf2c: afc0001c sw zero,28(s8) +8003bf30: afc00020 sw zero,32(s8) + {0x40020000, // cfc $v0, 0 + 0x03E00008, // jr $ra + 0x00000000, // nop + 0x00000000}; // nop + + int (*rawFunc)() = (void*)instr; +8003bf34: 27c20014 addiu v0,s8,20 +8003bf38: afc20010 sw v0,16(s8) + +// Write coprocessor register number inside instruction + instr[0] |= ( (cop_num & 3) << 26 ) | ( (register_num & 31) << 11 ); +8003bf3c: 8fc20014 lw v0,20(s8) +8003bf40: 93c30030 lbu v1,48(s8) +8003bf44: 00000000 nop +8003bf48: 30630003 andi v1,v1,0x3 +8003bf4c: 00032680 sll a0,v1,0x1a +8003bf50: 93c30034 lbu v1,52(s8) +8003bf54: 00000000 nop +8003bf58: 00031ac0 sll v1,v1,0xb +8003bf5c: 3063ffff andi v1,v1,0xffff +8003bf60: 00831825 or v1,a0,v1 +8003bf64: 00431025 or v0,v0,v1 +8003bf68: afc20014 sw v0,20(s8) + +// Execute modified instruction + return rawFunc(); +8003bf6c: 8fc20010 lw v0,16(s8) +8003bf70: 00000000 nop +8003bf74: 0040f809 jalr v0 +8003bf78: 00000000 nop +} +8003bf7c: 03c0e821 move sp,s8 +8003bf80: 8fbf002c lw ra,44(sp) +8003bf84: 8fbe0028 lw s8,40(sp) +8003bf88: 27bd0030 addiu sp,sp,48 +8003bf8c: 03e00008 jr ra +8003bf90: 00000000 nop + +8003bf94 <get_cop_ctrl_register>: + +unsigned int get_cop_ctrl_register(unsigned char cop_num, + unsigned char register_num) +{ +8003bf94: 27bdffd0 addiu sp,sp,-48 +8003bf98: afbf002c sw ra,44(sp) +8003bf9c: afbe0028 sw s8,40(sp) +8003bfa0: 03a0f021 move s8,sp +8003bfa4: 00801821 move v1,a0 +8003bfa8: 00a01021 move v0,a1 +8003bfac: a3c30030 sb v1,48(s8) +8003bfb0: a3c20034 sb v0,52(s8) +// Workaround for MIPS' simplicistic instruction set... + unsigned int instr[] = +8003bfb4: 3c024042 lui v0,0x4042 +8003bfb8: afc20014 sw v0,20(s8) +8003bfbc: 3c0203e0 lui v0,0x3e0 +8003bfc0: 34420008 ori v0,v0,0x8 +8003bfc4: afc20018 sw v0,24(s8) +8003bfc8: afc0001c sw zero,28(s8) +8003bfcc: afc00020 sw zero,32(s8) + {0x40420000, // mfc $v0, 0 + 0x03E00008, // jr $ra + 0x00000000, // nop + 0x00000000}; // nop + + int (*rawFunc)() = (void*)instr; +8003bfd0: 27c20014 addiu v0,s8,20 +8003bfd4: afc20010 sw v0,16(s8) + +// Write coprocessor register number inside instruction + instr[0] |= ( (cop_num & 3) << 26 ) | ( (register_num & 31) << 11 ); +8003bfd8: 8fc20014 lw v0,20(s8) +8003bfdc: 93c30030 lbu v1,48(s8) +8003bfe0: 00000000 nop +8003bfe4: 30630003 andi v1,v1,0x3 +8003bfe8: 00032680 sll a0,v1,0x1a +8003bfec: 93c30034 lbu v1,52(s8) +8003bff0: 00000000 nop +8003bff4: 00031ac0 sll v1,v1,0xb +8003bff8: 3063ffff andi v1,v1,0xffff +8003bffc: 00831825 or v1,a0,v1 +8003c000: 00431025 or v0,v0,v1 +8003c004: afc20014 sw v0,20(s8) + +// Execute modified instruction + return rawFunc(); +8003c008: 8fc20010 lw v0,16(s8) +8003c00c: 00000000 nop +8003c010: 0040f809 jalr v0 +8003c014: 00000000 nop +} +8003c018: 03c0e821 move sp,s8 +8003c01c: 8fbf002c lw ra,44(sp) +8003c020: 8fbe0028 lw s8,40(sp) +8003c024: 27bd0030 addiu sp,sp,48 +8003c028: 03e00008 jr ra +8003c02c: 00000000 nop + +8003c030 <get_cop0_register>: + +unsigned int get_cop0_register(unsigned char register_num) +{ +8003c030: 27bdffe8 addiu sp,sp,-24 +8003c034: afbf0014 sw ra,20(sp) +8003c038: afbe0010 sw s8,16(sp) +8003c03c: 03a0f021 move s8,sp +8003c040: 00801021 move v0,a0 +8003c044: a3c20018 sb v0,24(s8) + return get_cop_register(0, register_num); +8003c048: 93c20018 lbu v0,24(s8) +8003c04c: 00000000 nop +8003c050: 00402821 move a1,v0 +8003c054: 00002021 move a0,zero +8003c058: 0c00efbe jal 8003bef8 <get_cop_register> +8003c05c: 00000000 nop +} +8003c060: 03c0e821 move sp,s8 +8003c064: 8fbf0014 lw ra,20(sp) +8003c068: 8fbe0010 lw s8,16(sp) +8003c06c: 27bd0018 addiu sp,sp,24 +8003c070: 03e00008 jr ra +8003c074: 00000000 nop + +8003c078 <set_cop_register>: + +void set_cop_register(unsigned char cop_num, + unsigned char register_num, + unsigned int value) +{ +8003c078: 27bdffd0 addiu sp,sp,-48 +8003c07c: afbf002c sw ra,44(sp) +8003c080: afbe0028 sw s8,40(sp) +8003c084: 03a0f021 move s8,sp +8003c088: 00801821 move v1,a0 +8003c08c: 00a01021 move v0,a1 +8003c090: afc60038 sw a2,56(s8) +8003c094: a3c30030 sb v1,48(s8) +8003c098: a3c20034 sb v0,52(s8) +// Workaround for MIPS' simplicistic instruction set... + unsigned int instr[] = +8003c09c: 3c024084 lui v0,0x4084 +8003c0a0: afc20014 sw v0,20(s8) +8003c0a4: 3c0203e0 lui v0,0x3e0 +8003c0a8: 34420008 ori v0,v0,0x8 +8003c0ac: afc20018 sw v0,24(s8) +8003c0b0: afc0001c sw zero,28(s8) +8003c0b4: afc00020 sw zero,32(s8) + {0x40840000, // mtc $a0, 0 + 0x03E00008, // jr $ra + 0x00000000, // nop + 0x00000000}; // nop + + void (*rawFunc)(int value) = (void*)instr; +8003c0b8: 27c20014 addiu v0,s8,20 +8003c0bc: afc20010 sw v0,16(s8) + +// Write coprocessor register number inside instruction + instr[0] |= ( (cop_num & 3) << 26 ) | ( (register_num & 31) << 11 ); +8003c0c0: 8fc20014 lw v0,20(s8) +8003c0c4: 93c30030 lbu v1,48(s8) +8003c0c8: 00000000 nop +8003c0cc: 30630003 andi v1,v1,0x3 +8003c0d0: 00032680 sll a0,v1,0x1a +8003c0d4: 93c30034 lbu v1,52(s8) +8003c0d8: 00000000 nop +8003c0dc: 00031ac0 sll v1,v1,0xb +8003c0e0: 3063ffff andi v1,v1,0xffff +8003c0e4: 00831825 or v1,a0,v1 +8003c0e8: 00431025 or v0,v0,v1 +8003c0ec: afc20014 sw v0,20(s8) + +// Execute modified instruction + rawFunc(value); +8003c0f0: 8fc30038 lw v1,56(s8) +8003c0f4: 8fc20010 lw v0,16(s8) +8003c0f8: 00602021 move a0,v1 +8003c0fc: 0040f809 jalr v0 +8003c100: 00000000 nop +} +8003c104: 00000000 nop +8003c108: 03c0e821 move sp,s8 +8003c10c: 8fbf002c lw ra,44(sp) +8003c110: 8fbe0028 lw s8,40(sp) +8003c114: 27bd0030 addiu sp,sp,48 +8003c118: 03e00008 jr ra +8003c11c: 00000000 nop + +8003c120 <set_cop_ctrl_register>: + +void set_cop_ctrl_register(unsigned char cop_num, + unsigned char register_num, + unsigned int value) +{ +8003c120: 27bdffd0 addiu sp,sp,-48 +8003c124: afbf002c sw ra,44(sp) +8003c128: afbe0028 sw s8,40(sp) +8003c12c: 03a0f021 move s8,sp +8003c130: 00801821 move v1,a0 +8003c134: 00a01021 move v0,a1 +8003c138: afc60038 sw a2,56(s8) +8003c13c: a3c30030 sb v1,48(s8) +8003c140: a3c20034 sb v0,52(s8) +// Workaround for MIPS' simplicistic instruction set... + unsigned int instr[] = +8003c144: 3c0240c4 lui v0,0x40c4 +8003c148: afc20014 sw v0,20(s8) +8003c14c: 3c0203e0 lui v0,0x3e0 +8003c150: 34420008 ori v0,v0,0x8 +8003c154: afc20018 sw v0,24(s8) +8003c158: afc0001c sw zero,28(s8) +8003c15c: afc00020 sw zero,32(s8) + {0x40C40000, // ctc $a0, 0 + 0x03E00008, // jr $ra + 0x00000000, // nop + 0x00000000}; // nop + + void (*rawFunc)(int value) = (void*)instr; +8003c160: 27c20014 addiu v0,s8,20 +8003c164: afc20010 sw v0,16(s8) + +// Write coprocessor register number inside instruction + instr[0] |= ( (cop_num & 3) << 26 ) | ( (register_num & 31) << 11 ); +8003c168: 8fc20014 lw v0,20(s8) +8003c16c: 93c30030 lbu v1,48(s8) +8003c170: 00000000 nop +8003c174: 30630003 andi v1,v1,0x3 +8003c178: 00032680 sll a0,v1,0x1a +8003c17c: 93c30034 lbu v1,52(s8) +8003c180: 00000000 nop +8003c184: 00031ac0 sll v1,v1,0xb +8003c188: 3063ffff andi v1,v1,0xffff +8003c18c: 00831825 or v1,a0,v1 +8003c190: 00431025 or v0,v0,v1 +8003c194: afc20014 sw v0,20(s8) + +// Execute modified instruction + rawFunc(value); +8003c198: 8fc30038 lw v1,56(s8) +8003c19c: 8fc20010 lw v0,16(s8) +8003c1a0: 00602021 move a0,v1 +8003c1a4: 0040f809 jalr v0 +8003c1a8: 00000000 nop +} +8003c1ac: 00000000 nop +8003c1b0: 03c0e821 move sp,s8 +8003c1b4: 8fbf002c lw ra,44(sp) +8003c1b8: 8fbe0028 lw s8,40(sp) +8003c1bc: 27bd0030 addiu sp,sp,48 +8003c1c0: 03e00008 jr ra +8003c1c4: 00000000 nop + +8003c1c8 <set_cop0_register>: + +void set_cop0_register(unsigned char register_num, + unsigned int value) +{ +8003c1c8: 27bdffe8 addiu sp,sp,-24 +8003c1cc: afbf0014 sw ra,20(sp) +8003c1d0: afbe0010 sw s8,16(sp) +8003c1d4: 03a0f021 move s8,sp +8003c1d8: 00801021 move v0,a0 +8003c1dc: afc5001c sw a1,28(s8) +8003c1e0: a3c20018 sb v0,24(s8) + set_cop_register(0, register_num, value); +8003c1e4: 93c20018 lbu v0,24(s8) +8003c1e8: 8fc6001c lw a2,28(s8) +8003c1ec: 00402821 move a1,v0 +8003c1f0: 00002021 move a0,zero +8003c1f4: 0c00f01e jal 8003c078 <set_cop_register> +8003c1f8: 00000000 nop +} +8003c1fc: 00000000 nop +8003c200: 03c0e821 move sp,s8 +8003c204: 8fbf0014 lw ra,20(sp) +8003c208: 8fbe0010 lw s8,16(sp) +8003c20c: 27bd0018 addiu sp,sp,24 +8003c210: 03e00008 jr ra +8003c214: 00000000 nop + +8003c218 <run_cop_instruction>: + +void run_cop_instruction(unsigned char cop_num, + unsigned int operation) +{ +8003c218: 27bdffd0 addiu sp,sp,-48 +8003c21c: afbf002c sw ra,44(sp) +8003c220: afbe0028 sw s8,40(sp) +8003c224: 03a0f021 move s8,sp +8003c228: 00801021 move v0,a0 +8003c22c: afc50034 sw a1,52(s8) +8003c230: a3c20030 sb v0,48(s8) +// Workaround for MIPS' simplicistic instruction set... + unsigned int instr[] = +8003c234: 3c024200 lui v0,0x4200 +8003c238: afc20014 sw v0,20(s8) +8003c23c: 3c0203e0 lui v0,0x3e0 +8003c240: 34420008 ori v0,v0,0x8 +8003c244: afc20018 sw v0,24(s8) +8003c248: afc0001c sw zero,28(s8) +8003c24c: afc00020 sw zero,32(s8) + {0x42000000, // cop 0 + 0x03E00008, // jr $ra + 0x00000000, // nop + 0x00000000}; // nop + + void (*rawFunc)(void) = (void*)instr; +8003c250: 27c20014 addiu v0,s8,20 +8003c254: afc20010 sw v0,16(s8) + +// Write coprocessor register number inside instruction + instr[0] |= ( (cop_num & 3) << 26 ) | (operation & 0x1ffffff); +8003c258: 8fc30014 lw v1,20(s8) +8003c25c: 93c20030 lbu v0,48(s8) +8003c260: 00000000 nop +8003c264: 30420003 andi v0,v0,0x3 +8003c268: 00021680 sll v0,v0,0x1a +8003c26c: 00402821 move a1,v0 +8003c270: 8fc40034 lw a0,52(s8) +8003c274: 3c0201ff lui v0,0x1ff +8003c278: 3442ffff ori v0,v0,0xffff +8003c27c: 00821024 and v0,a0,v0 +8003c280: 00a21025 or v0,a1,v0 +8003c284: 00621025 or v0,v1,v0 +8003c288: afc20014 sw v0,20(s8) + +// Execute modified instruction + rawFunc(); +8003c28c: 8fc20010 lw v0,16(s8) +8003c290: 00000000 nop +8003c294: 0040f809 jalr v0 +8003c298: 00000000 nop +} +8003c29c: 00000000 nop +8003c2a0: 03c0e821 move sp,s8 +8003c2a4: 8fbf002c lw ra,44(sp) +8003c2a8: 8fbe0028 lw s8,40(sp) +8003c2ac: 27bd0030 addiu sp,sp,48 +8003c2b0: 03e00008 jr ra +8003c2b4: 00000000 nop + +8003c2b8 <__udivdi3>: +8003c2b8: 00c04021 move t0,a2 +8003c2bc: 00804821 move t1,a0 +8003c2c0: 14e00053 bnez a3,8003c410 <__udivdi3+0x158> +8003c2c4: 00a05021 move t2,a1 +8003c2c8: 00a6102b sltu v0,a1,a2 +8003c2cc: 1040006e beqz v0,8003c488 <__udivdi3+0x1d0> +8003c2d0: 3c020001 lui v0,0x1 +8003c2d4: 00c2102b sltu v0,a2,v0 +8003c2d8: 10400162 beqz v0,8003c864 <__udivdi3+0x5ac> +8003c2dc: 3c020100 lui v0,0x100 +8003c2e0: 2cc30100 sltiu v1,a2,256 +8003c2e4: 2c630001 sltiu v1,v1,1 +8003c2e8: 000318c0 sll v1,v1,0x3 +8003c2ec: 3c028004 lui v0,0x8004 +8003c2f0: 00663806 srlv a3,a2,v1 +8003c2f4: 2442f818 addiu v0,v0,-2024 +8003c2f8: 00e21021 addu v0,a3,v0 +8003c2fc: 90420000 lbu v0,0(v0) +8003c300: 00000000 nop +8003c304: 00431821 addu v1,v0,v1 +8003c308: 24020020 li v0,32 +8003c30c: 00431023 subu v0,v0,v1 +8003c310: 10400007 beqz v0,8003c330 <__udivdi3+0x78> +8003c314: 00085c02 srl t3,t0,0x10 +8003c318: 00453804 sllv a3,a1,v0 +8003c31c: 00641806 srlv v1,a0,v1 +8003c320: 00464004 sllv t0,a2,v0 +8003c324: 00675025 or t2,v1,a3 +8003c328: 00444804 sllv t1,a0,v0 +8003c32c: 00085c02 srl t3,t0,0x10 +8003c330: 15600002 bnez t3,8003c33c <__udivdi3+0x84> +8003c334: 014b001b divu zero,t2,t3 +8003c338: 0007000d break 0x7 +8003c33c: 3104ffff andi a0,t0,0xffff +8003c340: 00091402 srl v0,t1,0x10 +8003c344: 00001812 mflo v1 +8003c348: 00003010 mfhi a2 +8003c34c: 00063400 sll a2,a2,0x10 +8003c350: 00461025 or v0,v0,a2 +8003c354: 00830018 mult a0,v1 +8003c358: 00002812 mflo a1 +8003c35c: 0045302b sltu a2,v0,a1 +8003c360: 00000000 nop +8003c364: 15600002 bnez t3,8003c370 <__udivdi3+0xb8> +8003c368: 014b001b divu zero,t2,t3 +8003c36c: 0007000d break 0x7 +8003c370: 10c00009 beqz a2,8003c398 <__udivdi3+0xe0> +8003c374: 00000000 nop +8003c378: 00481021 addu v0,v0,t0 +8003c37c: 0048302b sltu a2,v0,t0 +8003c380: 14c00004 bnez a2,8003c394 <__udivdi3+0xdc> +8003c384: 2467ffff addiu a3,v1,-1 +8003c388: 0045302b sltu a2,v0,a1 +8003c38c: 14c0015f bnez a2,8003c90c <__udivdi3+0x654> +8003c390: 2463fffe addiu v1,v1,-2 +8003c394: 00e01821 move v1,a3 +8003c398: 00452823 subu a1,v0,a1 +8003c39c: 3129ffff andi t1,t1,0xffff +8003c3a0: 15600002 bnez t3,8003c3ac <__udivdi3+0xf4> +8003c3a4: 00ab001b divu zero,a1,t3 +8003c3a8: 0007000d break 0x7 +8003c3ac: 00001012 mflo v0 +8003c3b0: 00003010 mfhi a2 +8003c3b4: 00063400 sll a2,a2,0x10 +8003c3b8: 01264825 or t1,t1,a2 +8003c3bc: 00820018 mult a0,v0 +8003c3c0: 00002012 mflo a0 +8003c3c4: 0124302b sltu a2,t1,a0 +8003c3c8: 00000000 nop +8003c3cc: 15600002 bnez t3,8003c3d8 <__udivdi3+0x120> +8003c3d0: 00ab001b divu zero,a1,t3 +8003c3d4: 0007000d break 0x7 +8003c3d8: 10c00008 beqz a2,8003c3fc <__udivdi3+0x144> +8003c3dc: 01094821 addu t1,t0,t1 +8003c3e0: 0128402b sltu t0,t1,t0 +8003c3e4: 15000128 bnez t0,8003c888 <__udivdi3+0x5d0> +8003c3e8: 2445ffff addiu a1,v0,-1 +8003c3ec: 0124482b sltu t1,t1,a0 +8003c3f0: 11200125 beqz t1,8003c888 <__udivdi3+0x5d0> +8003c3f4: 00000000 nop +8003c3f8: 2442fffe addiu v0,v0,-2 +8003c3fc: 00031c00 sll v1,v1,0x10 +8003c400: 00621025 or v0,v1,v0 +8003c404: 00001821 move v1,zero +8003c408: 03e00008 jr ra +8003c40c: 00000000 nop +8003c410: 00a7102b sltu v0,a1,a3 +8003c414: 14400070 bnez v0,8003c5d8 <__udivdi3+0x320> +8003c418: 00001821 move v1,zero +8003c41c: 3c020001 lui v0,0x1 +8003c420: 00e2102b sltu v0,a3,v0 +8003c424: 1440006f bnez v0,8003c5e4 <__udivdi3+0x32c> +8003c428: 2ce80100 sltiu t0,a3,256 +8003c42c: 3c020100 lui v0,0x100 +8003c430: 00e2102b sltu v0,a3,v0 +8003c434: 10400002 beqz v0,8003c440 <__udivdi3+0x188> +8003c438: 24080018 li t0,24 +8003c43c: 24080010 li t0,16 +8003c440: 3c028004 lui v0,0x8004 +8003c444: 01071806 srlv v1,a3,t0 +8003c448: 2442f818 addiu v0,v0,-2024 +8003c44c: 00621021 addu v0,v1,v0 +8003c450: 90430000 lbu v1,0(v0) +8003c454: 240b0020 li t3,32 +8003c458: 00684021 addu t0,v1,t0 +8003c45c: 01685823 subu t3,t3,t0 +8003c460: 1560006c bnez t3,8003c614 <__udivdi3+0x35c> +8003c464: 01061006 srlv v0,a2,t0 +8003c468: 00e5382b sltu a3,a3,a1 +8003c46c: 14e00113 bnez a3,8003c8bc <__udivdi3+0x604> +8003c470: 00000000 nop +8003c474: 0086102b sltu v0,a0,a2 +8003c478: 38420001 xori v0,v0,0x1 +8003c47c: 00001821 move v1,zero +8003c480: 03e00008 jr ra +8003c484: 00000000 nop +8003c488: 14c00008 bnez a2,8003c4ac <__udivdi3+0x1f4> +8003c48c: 0102102b sltu v0,t0,v0 +8003c490: 24020001 li v0,1 +8003c494: 14c00002 bnez a2,8003c4a0 <__udivdi3+0x1e8> +8003c498: 0046001b divu zero,v0,a2 +8003c49c: 0007000d break 0x7 +8003c4a0: 00004012 mflo t0 +8003c4a4: 3c020001 lui v0,0x1 +8003c4a8: 0102102b sltu v0,t0,v0 +8003c4ac: 1440009c bnez v0,8003c720 <__udivdi3+0x468> +8003c4b0: 2d060100 sltiu a2,t0,256 +8003c4b4: 3c020100 lui v0,0x100 +8003c4b8: 0102102b sltu v0,t0,v0 +8003c4bc: 10400002 beqz v0,8003c4c8 <__udivdi3+0x210> +8003c4c0: 24060018 li a2,24 +8003c4c4: 24060010 li a2,16 +8003c4c8: 3c028004 lui v0,0x8004 +8003c4cc: 00c81806 srlv v1,t0,a2 +8003c4d0: 2442f818 addiu v0,v0,-2024 +8003c4d4: 00621021 addu v0,v1,v0 +8003c4d8: 90430000 lbu v1,0(v0) +8003c4dc: 240c0020 li t4,32 +8003c4e0: 00663021 addu a2,v1,a2 +8003c4e4: 01866023 subu t4,t4,a2 +8003c4e8: 15800099 bnez t4,8003c750 <__udivdi3+0x498> +8003c4ec: 00000000 nop +8003c4f0: 00a82823 subu a1,a1,t0 +8003c4f4: 00085402 srl t2,t0,0x10 +8003c4f8: 3104ffff andi a0,t0,0xffff +8003c4fc: 24030001 li v1,1 +8003c500: 15400002 bnez t2,8003c50c <__udivdi3+0x254> +8003c504: 00aa001b divu zero,a1,t2 +8003c508: 0007000d break 0x7 +8003c50c: 00091402 srl v0,t1,0x10 +8003c510: 00003812 mflo a3 +8003c514: 00003010 mfhi a2 +8003c518: 00063400 sll a2,a2,0x10 +8003c51c: 00461025 or v0,v0,a2 +8003c520: 00e40018 mult a3,a0 +8003c524: 00005812 mflo t3 +8003c528: 004b302b sltu a2,v0,t3 +8003c52c: 00000000 nop +8003c530: 15400002 bnez t2,8003c53c <__udivdi3+0x284> +8003c534: 00aa001b divu zero,a1,t2 +8003c538: 0007000d break 0x7 +8003c53c: 10c0000a beqz a2,8003c568 <__udivdi3+0x2b0> +8003c540: 004b2823 subu a1,v0,t3 +8003c544: 00481021 addu v0,v0,t0 +8003c548: 0048282b sltu a1,v0,t0 +8003c54c: 14a00004 bnez a1,8003c560 <__udivdi3+0x2a8> +8003c550: 24e6ffff addiu a2,a3,-1 +8003c554: 004b282b sltu a1,v0,t3 +8003c558: 14a000ea bnez a1,8003c904 <__udivdi3+0x64c> +8003c55c: 24e7fffe addiu a3,a3,-2 +8003c560: 00c03821 move a3,a2 +8003c564: 004b2823 subu a1,v0,t3 +8003c568: 3129ffff andi t1,t1,0xffff +8003c56c: 15400002 bnez t2,8003c578 <__udivdi3+0x2c0> +8003c570: 00aa001b divu zero,a1,t2 +8003c574: 0007000d break 0x7 +8003c578: 00001012 mflo v0 +8003c57c: 00003010 mfhi a2 +8003c580: 00063400 sll a2,a2,0x10 +8003c584: 01264825 or t1,t1,a2 +8003c588: 00440018 mult v0,a0 +8003c58c: 00002012 mflo a0 +8003c590: 0124302b sltu a2,t1,a0 +8003c594: 00000000 nop +8003c598: 15400002 bnez t2,8003c5a4 <__udivdi3+0x2ec> +8003c59c: 00aa001b divu zero,a1,t2 +8003c5a0: 0007000d break 0x7 +8003c5a4: 10c00008 beqz a2,8003c5c8 <__udivdi3+0x310> +8003c5a8: 01094821 addu t1,t0,t1 +8003c5ac: 0128402b sltu t0,t1,t0 +8003c5b0: 150000b1 bnez t0,8003c878 <__udivdi3+0x5c0> +8003c5b4: 2445ffff addiu a1,v0,-1 +8003c5b8: 0124482b sltu t1,t1,a0 +8003c5bc: 112000ae beqz t1,8003c878 <__udivdi3+0x5c0> +8003c5c0: 00000000 nop +8003c5c4: 2442fffe addiu v0,v0,-2 +8003c5c8: 00073c00 sll a3,a3,0x10 +8003c5cc: 00e21025 or v0,a3,v0 +8003c5d0: 03e00008 jr ra +8003c5d4: 00000000 nop +8003c5d8: 00001021 move v0,zero +8003c5dc: 03e00008 jr ra +8003c5e0: 00000000 nop +8003c5e4: 2d080001 sltiu t0,t0,1 +8003c5e8: 000840c0 sll t0,t0,0x3 +8003c5ec: 3c028004 lui v0,0x8004 +8003c5f0: 01071806 srlv v1,a3,t0 +8003c5f4: 2442f818 addiu v0,v0,-2024 +8003c5f8: 00621021 addu v0,v1,v0 +8003c5fc: 90430000 lbu v1,0(v0) +8003c600: 240b0020 li t3,32 +8003c604: 00684021 addu t0,v1,t0 +8003c608: 01685823 subu t3,t3,t0 +8003c60c: 1160ff96 beqz t3,8003c468 <__udivdi3+0x1b0> +8003c610: 01061006 srlv v0,a2,t0 +8003c614: 01673804 sllv a3,a3,t3 +8003c618: 00e23825 or a3,a3,v0 +8003c61c: 01056806 srlv t5,a1,t0 +8003c620: 00076402 srl t4,a3,0x10 +8003c624: 15800002 bnez t4,8003c630 <__udivdi3+0x378> +8003c628: 01ac001b divu zero,t5,t4 +8003c62c: 0007000d break 0x7 +8003c630: 30eeffff andi t6,a3,0xffff +8003c634: 01044006 srlv t0,a0,t0 +8003c638: 01652804 sllv a1,a1,t3 +8003c63c: 01052825 or a1,t0,a1 +8003c640: 00055402 srl t2,a1,0x10 +8003c644: 00001812 mflo v1 +8003c648: 00007810 mfhi t7 +8003c64c: 000f4400 sll t0,t7,0x10 +8003c650: 01484025 or t0,t2,t0 +8003c654: 01c30018 mult t6,v1 +8003c658: 00004812 mflo t1 +8003c65c: 0109102b sltu v0,t0,t1 +8003c660: 00000000 nop +8003c664: 15800002 bnez t4,8003c670 <__udivdi3+0x3b8> +8003c668: 01ac001b divu zero,t5,t4 +8003c66c: 0007000d break 0x7 +8003c670: 10400006 beqz v0,8003c68c <__udivdi3+0x3d4> +8003c674: 01663004 sllv a2,a2,t3 +8003c678: 01074021 addu t0,t0,a3 +8003c67c: 0107102b sltu v0,t0,a3 +8003c680: 10400097 beqz v0,8003c8e0 <__udivdi3+0x628> +8003c684: 246affff addiu t2,v1,-1 +8003c688: 01401821 move v1,t2 +8003c68c: 01094823 subu t1,t0,t1 +8003c690: 30a8ffff andi t0,a1,0xffff +8003c694: 15800002 bnez t4,8003c6a0 <__udivdi3+0x3e8> +8003c698: 012c001b divu zero,t1,t4 +8003c69c: 0007000d break 0x7 +8003c6a0: 00001012 mflo v0 +8003c6a4: 00006810 mfhi t5 +8003c6a8: 000d2c00 sll a1,t5,0x10 +8003c6ac: 01052825 or a1,t0,a1 +8003c6b0: 01c20018 mult t6,v0 +8003c6b4: 00005012 mflo t2 +8003c6b8: 00aa402b sltu t0,a1,t2 +8003c6bc: 00000000 nop +8003c6c0: 15800002 bnez t4,8003c6cc <__udivdi3+0x414> +8003c6c4: 012c001b divu zero,t1,t4 +8003c6c8: 0007000d break 0x7 +8003c6cc: 11000006 beqz t0,8003c6e8 <__udivdi3+0x430> +8003c6d0: 00000000 nop +8003c6d4: 00a72821 addu a1,a1,a3 +8003c6d8: 00a7402b sltu t0,a1,a3 +8003c6dc: 1100007b beqz t0,8003c8cc <__udivdi3+0x614> +8003c6e0: 2449ffff addiu t1,v0,-1 +8003c6e4: 01201021 move v0,t1 +8003c6e8: 00031c00 sll v1,v1,0x10 +8003c6ec: 00621025 or v0,v1,v0 +8003c6f0: 00aa2823 subu a1,a1,t2 +8003c6f4: 00460019 multu v0,a2 +8003c6f8: 00003810 mfhi a3 +8003c6fc: 00a7182b sltu v1,a1,a3 +8003c700: 00003012 mflo a2 +8003c704: 14600066 bnez v1,8003c8a0 <__udivdi3+0x5e8> +8003c708: 00000000 nop +8003c70c: 10a70060 beq a1,a3,8003c890 <__udivdi3+0x5d8> +8003c710: 00000000 nop +8003c714: 00001821 move v1,zero +8003c718: 03e00008 jr ra +8003c71c: 00000000 nop +8003c720: 2cc60001 sltiu a2,a2,1 +8003c724: 000630c0 sll a2,a2,0x3 +8003c728: 3c028004 lui v0,0x8004 +8003c72c: 00c81806 srlv v1,t0,a2 +8003c730: 2442f818 addiu v0,v0,-2024 +8003c734: 00621021 addu v0,v1,v0 +8003c738: 90430000 lbu v1,0(v0) +8003c73c: 240c0020 li t4,32 +8003c740: 00663021 addu a2,v1,a2 +8003c744: 01866023 subu t4,t4,a2 +8003c748: 1180ff69 beqz t4,8003c4f0 <__udivdi3+0x238> +8003c74c: 00000000 nop +8003c750: 01884004 sllv t0,t0,t4 +8003c754: 00c56806 srlv t5,a1,a2 +8003c758: 00085402 srl t2,t0,0x10 +8003c75c: 15400002 bnez t2,8003c768 <__udivdi3+0x4b0> +8003c760: 01aa001b divu zero,t5,t2 +8003c764: 0007000d break 0x7 +8003c768: 310bffff andi t3,t0,0xffff +8003c76c: 01853804 sllv a3,a1,t4 +8003c770: 01844804 sllv t1,a0,t4 +8003c774: 00c43006 srlv a2,a0,a2 +8003c778: 00c73825 or a3,a2,a3 +8003c77c: 00072c02 srl a1,a3,0x10 +8003c780: 00001812 mflo v1 +8003c784: 00001010 mfhi v0 +8003c788: 00021400 sll v0,v0,0x10 +8003c78c: 00a21025 or v0,a1,v0 +8003c790: 00006012 mflo t4 + ... +8003c79c: 01630018 mult t3,v1 +8003c7a0: 00002012 mflo a0 +8003c7a4: 0044182b sltu v1,v0,a0 +8003c7a8: 00000000 nop +8003c7ac: 15400002 bnez t2,8003c7b8 <__udivdi3+0x500> +8003c7b0: 01aa001b divu zero,t5,t2 +8003c7b4: 0007000d break 0x7 +8003c7b8: 1060000a beqz v1,8003c7e4 <__udivdi3+0x52c> +8003c7bc: 00000000 nop +8003c7c0: 00481021 addu v0,v0,t0 +8003c7c4: 0048182b sltu v1,v0,t0 +8003c7c8: 1460004c bnez v1,8003c8fc <__udivdi3+0x644> +8003c7cc: 2585ffff addiu a1,t4,-1 +8003c7d0: 0044182b sltu v1,v0,a0 +8003c7d4: 10600049 beqz v1,8003c8fc <__udivdi3+0x644> +8003c7d8: 00000000 nop +8003c7dc: 258cfffe addiu t4,t4,-2 +8003c7e0: 00481021 addu v0,v0,t0 +8003c7e4: 00442023 subu a0,v0,a0 +8003c7e8: 30e6ffff andi a2,a3,0xffff +8003c7ec: 15400002 bnez t2,8003c7f8 <__udivdi3+0x540> +8003c7f0: 008a001b divu zero,a0,t2 +8003c7f4: 0007000d break 0x7 +8003c7f8: 00001812 mflo v1 +8003c7fc: 00001010 mfhi v0 +8003c800: 00021400 sll v0,v0,0x10 +8003c804: 00c21025 or v0,a2,v0 +8003c808: 01630018 mult t3,v1 +8003c80c: 00002812 mflo a1 +8003c810: 0045302b sltu a2,v0,a1 +8003c814: 00000000 nop +8003c818: 15400002 bnez t2,8003c824 <__udivdi3+0x56c> +8003c81c: 008a001b divu zero,a0,t2 +8003c820: 0007000d break 0x7 +8003c824: 10c0000a beqz a2,8003c850 <__udivdi3+0x598> +8003c828: 00000000 nop +8003c82c: 00481021 addu v0,v0,t0 +8003c830: 0048202b sltu a0,v0,t0 +8003c834: 1480002f bnez a0,8003c8f4 <__udivdi3+0x63c> +8003c838: 2466ffff addiu a2,v1,-1 +8003c83c: 0045202b sltu a0,v0,a1 +8003c840: 1080002c beqz a0,8003c8f4 <__udivdi3+0x63c> +8003c844: 00000000 nop +8003c848: 2463fffe addiu v1,v1,-2 +8003c84c: 00481021 addu v0,v0,t0 +8003c850: 000c6400 sll t4,t4,0x10 +8003c854: 00452823 subu a1,v0,a1 +8003c858: 01831825 or v1,t4,v1 +8003c85c: 1000ff28 b 8003c500 <__udivdi3+0x248> +8003c860: 01602021 move a0,t3 +8003c864: 00c2102b sltu v0,a2,v0 +8003c868: 10400012 beqz v0,8003c8b4 <__udivdi3+0x5fc> +8003c86c: 00000000 nop +8003c870: 1000fe9e b 8003c2ec <__udivdi3+0x34> +8003c874: 24030010 li v1,16 +8003c878: 00a01021 move v0,a1 +8003c87c: 00073c00 sll a3,a3,0x10 +8003c880: 1000ff53 b 8003c5d0 <__udivdi3+0x318> +8003c884: 00e21025 or v0,a3,v0 +8003c888: 1000fedc b 8003c3fc <__udivdi3+0x144> +8003c88c: 00a01021 move v0,a1 +8003c890: 01642004 sllv a0,a0,t3 +8003c894: 0086202b sltu a0,a0,a2 +8003c898: 1080ff9e beqz a0,8003c714 <__udivdi3+0x45c> +8003c89c: 00000000 nop +8003c8a0: 2442ffff addiu v0,v0,-1 +8003c8a4: 1000ff9c b 8003c718 <__udivdi3+0x460> +8003c8a8: 00001821 move v1,zero +8003c8ac: 1000ff06 b 8003c4c8 <__udivdi3+0x210> +8003c8b0: 24060018 li a2,24 +8003c8b4: 1000fe8d b 8003c2ec <__udivdi3+0x34> +8003c8b8: 24030018 li v1,24 +8003c8bc: 00001821 move v1,zero +8003c8c0: 24020001 li v0,1 +8003c8c4: 03e00008 jr ra +8003c8c8: 00000000 nop +8003c8cc: 00aa402b sltu t0,a1,t2 +8003c8d0: 1100ff84 beqz t0,8003c6e4 <__udivdi3+0x42c> +8003c8d4: 2442fffe addiu v0,v0,-2 +8003c8d8: 1000ff83 b 8003c6e8 <__udivdi3+0x430> +8003c8dc: 00a72821 addu a1,a1,a3 +8003c8e0: 0109102b sltu v0,t0,t1 +8003c8e4: 1040ff68 beqz v0,8003c688 <__udivdi3+0x3d0> +8003c8e8: 2463fffe addiu v1,v1,-2 +8003c8ec: 1000ff67 b 8003c68c <__udivdi3+0x3d4> +8003c8f0: 01074021 addu t0,t0,a3 +8003c8f4: 1000ffd6 b 8003c850 <__udivdi3+0x598> +8003c8f8: 00c01821 move v1,a2 +8003c8fc: 1000ffb9 b 8003c7e4 <__udivdi3+0x52c> +8003c900: 00a06021 move t4,a1 +8003c904: 1000ff17 b 8003c564 <__udivdi3+0x2ac> +8003c908: 00481021 addu v0,v0,t0 +8003c90c: 1000fea2 b 8003c398 <__udivdi3+0xe0> +8003c910: 00481021 addu v0,v0,t0 + +8003c914 <__umoddi3>: +8003c914: 00c04021 move t0,a2 +8003c918: 00806821 move t5,a0 +8003c91c: 14e00052 bnez a3,8003ca68 <__umoddi3+0x154> +8003c920: 00a01821 move v1,a1 +8003c924: 00a6102b sltu v0,a1,a2 +8003c928: 10400071 beqz v0,8003caf0 <__umoddi3+0x1dc> +8003c92c: 3c020001 lui v0,0x1 +8003c930: 00c2102b sltu v0,a2,v0 +8003c934: 10400163 beqz v0,8003cec4 <__umoddi3+0x5b0> +8003c938: 3c020100 lui v0,0x100 +8003c93c: 2ccb0100 sltiu t3,a2,256 +8003c940: 2d6b0001 sltiu t3,t3,1 +8003c944: 000b58c0 sll t3,t3,0x3 +8003c948: 3c028004 lui v0,0x8004 +8003c94c: 01663806 srlv a3,a2,t3 +8003c950: 2442f818 addiu v0,v0,-2024 +8003c954: 00e21021 addu v0,a3,v0 +8003c958: 904a0000 lbu t2,0(v0) +8003c95c: 24020020 li v0,32 +8003c960: 014b4821 addu t1,t2,t3 +8003c964: 00495823 subu t3,v0,t1 +8003c968: 11600007 beqz t3,8003c988 <__umoddi3+0x74> +8003c96c: 00086402 srl t4,t0,0x10 +8003c970: 01652804 sllv a1,a1,t3 +8003c974: 01244806 srlv t1,a0,t1 +8003c978: 01664004 sllv t0,a2,t3 +8003c97c: 01251825 or v1,t1,a1 +8003c980: 01646804 sllv t5,a0,t3 +8003c984: 00086402 srl t4,t0,0x10 +8003c988: 15800002 bnez t4,8003c994 <__umoddi3+0x80> +8003c98c: 006c001b divu zero,v1,t4 +8003c990: 0007000d break 0x7 +8003c994: 3106ffff andi a2,t0,0xffff +8003c998: 000d5402 srl t2,t5,0x10 +8003c99c: 00007012 mflo t6 +8003c9a0: 00004810 mfhi t1 +8003c9a4: 00094c00 sll t1,t1,0x10 +8003c9a8: 01495025 or t2,t2,t1 +8003c9ac: 00ce0018 mult a2,t6 +8003c9b0: 00007012 mflo t6 +8003c9b4: 014e782b sltu t7,t2,t6 +8003c9b8: 00000000 nop +8003c9bc: 15800002 bnez t4,8003c9c8 <__umoddi3+0xb4> +8003c9c0: 006c001b divu zero,v1,t4 +8003c9c4: 0007000d break 0x7 +8003c9c8: 11e00009 beqz t7,8003c9f0 <__umoddi3+0xdc> +8003c9cc: 014e4823 subu t1,t2,t6 +8003c9d0: 01485021 addu t2,t2,t0 +8003c9d4: 0148102b sltu v0,t2,t0 +8003c9d8: 14400005 bnez v0,8003c9f0 <__umoddi3+0xdc> +8003c9dc: 014e4823 subu t1,t2,t6 +8003c9e0: 014e102b sltu v0,t2,t6 +8003c9e4: 14400152 bnez v0,8003cf30 <__umoddi3+0x61c> +8003c9e8: 00000000 nop +8003c9ec: 014e4823 subu t1,t2,t6 +8003c9f0: 31a7ffff andi a3,t5,0xffff +8003c9f4: 15800002 bnez t4,8003ca00 <__umoddi3+0xec> +8003c9f8: 012c001b divu zero,t1,t4 +8003c9fc: 0007000d break 0x7 +8003ca00: 00001812 mflo v1 +8003ca04: 00002810 mfhi a1 +8003ca08: 00052c00 sll a1,a1,0x10 +8003ca0c: 00e52825 or a1,a3,a1 +8003ca10: 00c30018 mult a2,v1 +8003ca14: 00001812 mflo v1 +8003ca18: 00a3102b sltu v0,a1,v1 +8003ca1c: 00000000 nop +8003ca20: 15800002 bnez t4,8003ca2c <__umoddi3+0x118> +8003ca24: 012c001b divu zero,t1,t4 +8003ca28: 0007000d break 0x7 +8003ca2c: 10400009 beqz v0,8003ca54 <__umoddi3+0x140> +8003ca30: 00000000 nop +8003ca34: 00a82821 addu a1,a1,t0 +8003ca38: 00a8102b sltu v0,a1,t0 +8003ca3c: 14400005 bnez v0,8003ca54 <__umoddi3+0x140> +8003ca40: 00000000 nop +8003ca44: 00a3102b sltu v0,a1,v1 +8003ca48: 10400002 beqz v0,8003ca54 <__umoddi3+0x140> +8003ca4c: 00000000 nop +8003ca50: 00a82821 addu a1,a1,t0 +8003ca54: 00a31823 subu v1,a1,v1 +8003ca58: 01631006 srlv v0,v1,t3 +8003ca5c: 00001821 move v1,zero +8003ca60: 03e00008 jr ra +8003ca64: 00000000 nop +8003ca68: 00a7102b sltu v0,a1,a3 +8003ca6c: 14400073 bnez v0,8003cc3c <__umoddi3+0x328> +8003ca70: 00801021 move v0,a0 +8003ca74: 3c020001 lui v0,0x1 +8003ca78: 00e2102b sltu v0,a3,v0 +8003ca7c: 14400072 bnez v0,8003cc48 <__umoddi3+0x334> +8003ca80: 2ce80100 sltiu t0,a3,256 +8003ca84: 3c020100 lui v0,0x100 +8003ca88: 00e2102b sltu v0,a3,v0 +8003ca8c: 10400002 beqz v0,8003ca98 <__umoddi3+0x184> +8003ca90: 24080018 li t0,24 +8003ca94: 24080010 li t0,16 +8003ca98: 3c028004 lui v0,0x8004 +8003ca9c: 01074806 srlv t1,a3,t0 +8003caa0: 2442f818 addiu v0,v0,-2024 +8003caa4: 01221021 addu v0,t1,v0 +8003caa8: 90420000 lbu v0,0(v0) +8003caac: 240f0020 li t7,32 +8003cab0: 00481021 addu v0,v0,t0 +8003cab4: 01e27823 subu t7,t7,v0 +8003cab8: 15e0006f bnez t7,8003cc78 <__umoddi3+0x364> +8003cabc: 00000000 nop +8003cac0: 00e5102b sltu v0,a3,a1 +8003cac4: 14400005 bnez v0,8003cadc <__umoddi3+0x1c8> +8003cac8: 00861023 subu v0,a0,a2 +8003cacc: 0086102b sltu v0,a0,a2 +8003cad0: 14400119 bnez v0,8003cf38 <__umoddi3+0x624> +8003cad4: 00000000 nop +8003cad8: 00861023 subu v0,a0,a2 +8003cadc: 00a72823 subu a1,a1,a3 +8003cae0: 0082182b sltu v1,a0,v0 +8003cae4: 00a31823 subu v1,a1,v1 +8003cae8: 03e00008 jr ra +8003caec: 00000000 nop +8003caf0: 14c00008 bnez a2,8003cb14 <__umoddi3+0x200> +8003caf4: 0102102b sltu v0,t0,v0 +8003caf8: 24020001 li v0,1 +8003cafc: 14c00002 bnez a2,8003cb08 <__umoddi3+0x1f4> +8003cb00: 0046001b divu zero,v0,a2 +8003cb04: 0007000d break 0x7 +8003cb08: 00004012 mflo t0 +8003cb0c: 3c020001 lui v0,0x1 +8003cb10: 0102102b sltu v0,t0,v0 +8003cb14: 144000a5 bnez v0,8003cdac <__umoddi3+0x498> +8003cb18: 2d090100 sltiu t1,t0,256 +8003cb1c: 3c020100 lui v0,0x100 +8003cb20: 0102102b sltu v0,t0,v0 +8003cb24: 10400002 beqz v0,8003cb30 <__umoddi3+0x21c> +8003cb28: 24090018 li t1,24 +8003cb2c: 24090010 li t1,16 +8003cb30: 3c028004 lui v0,0x8004 +8003cb34: 01281806 srlv v1,t0,t1 +8003cb38: 2442f818 addiu v0,v0,-2024 +8003cb3c: 00621021 addu v0,v1,v0 +8003cb40: 90460000 lbu a2,0(v0) +8003cb44: 24020020 li v0,32 +8003cb48: 00c94821 addu t1,a2,t1 +8003cb4c: 00495823 subu t3,v0,t1 +8003cb50: 156000a2 bnez t3,8003cddc <__umoddi3+0x4c8> +8003cb54: 00000000 nop +8003cb58: 00a84823 subu t1,a1,t0 +8003cb5c: 00086402 srl t4,t0,0x10 +8003cb60: 3102ffff andi v0,t0,0xffff +8003cb64: 15800002 bnez t4,8003cb70 <__umoddi3+0x25c> +8003cb68: 012c001b divu zero,t1,t4 +8003cb6c: 0007000d break 0x7 +8003cb70: 000d5402 srl t2,t5,0x10 +8003cb74: 00003012 mflo a2 +8003cb78: 00001810 mfhi v1 +8003cb7c: 00031c00 sll v1,v1,0x10 +8003cb80: 01435025 or t2,t2,v1 +8003cb84: 00c20018 mult a2,v0 +8003cb88: 00003012 mflo a2 +8003cb8c: 0146202b sltu a0,t2,a2 +8003cb90: 00000000 nop +8003cb94: 15800002 bnez t4,8003cba0 <__umoddi3+0x28c> +8003cb98: 012c001b divu zero,t1,t4 +8003cb9c: 0007000d break 0x7 +8003cba0: 10800009 beqz a0,8003cbc8 <__umoddi3+0x2b4> +8003cba4: 01464823 subu t1,t2,a2 +8003cba8: 01485021 addu t2,t2,t0 +8003cbac: 0148182b sltu v1,t2,t0 +8003cbb0: 14600005 bnez v1,8003cbc8 <__umoddi3+0x2b4> +8003cbb4: 01464823 subu t1,t2,a2 +8003cbb8: 0146182b sltu v1,t2,a2 +8003cbbc: 146000da bnez v1,8003cf28 <__umoddi3+0x614> +8003cbc0: 00000000 nop +8003cbc4: 01464823 subu t1,t2,a2 +8003cbc8: 31aaffff andi t2,t5,0xffff +8003cbcc: 15800002 bnez t4,8003cbd8 <__umoddi3+0x2c4> +8003cbd0: 012c001b divu zero,t1,t4 +8003cbd4: 0007000d break 0x7 +8003cbd8: 00001812 mflo v1 +8003cbdc: 00003810 mfhi a3 +8003cbe0: 00073c00 sll a3,a3,0x10 +8003cbe4: 00000000 nop +8003cbe8: 00620018 mult v1,v0 +8003cbec: 01471825 or v1,t2,a3 +8003cbf0: 00001012 mflo v0 +8003cbf4: 0062202b sltu a0,v1,v0 +8003cbf8: 00000000 nop +8003cbfc: 15800002 bnez t4,8003cc08 <__umoddi3+0x2f4> +8003cc00: 012c001b divu zero,t1,t4 +8003cc04: 0007000d break 0x7 +8003cc08: 10800008 beqz a0,8003cc2c <__umoddi3+0x318> +8003cc0c: 00000000 nop +8003cc10: 00681821 addu v1,v1,t0 +8003cc14: 0068202b sltu a0,v1,t0 +8003cc18: 14800004 bnez a0,8003cc2c <__umoddi3+0x318> +8003cc1c: 0062202b sltu a0,v1,v0 +8003cc20: 10800002 beqz a0,8003cc2c <__umoddi3+0x318> +8003cc24: 00000000 nop +8003cc28: 00681821 addu v1,v1,t0 +8003cc2c: 00621823 subu v1,v1,v0 +8003cc30: 01631006 srlv v0,v1,t3 +8003cc34: 1000ff8a b 8003ca60 <__umoddi3+0x14c> +8003cc38: 00001821 move v1,zero +8003cc3c: 00a01821 move v1,a1 +8003cc40: 03e00008 jr ra +8003cc44: 00000000 nop +8003cc48: 2d080001 sltiu t0,t0,1 +8003cc4c: 000840c0 sll t0,t0,0x3 +8003cc50: 3c028004 lui v0,0x8004 +8003cc54: 01074806 srlv t1,a3,t0 +8003cc58: 2442f818 addiu v0,v0,-2024 +8003cc5c: 01221021 addu v0,t1,v0 +8003cc60: 90420000 lbu v0,0(v0) +8003cc64: 240f0020 li t7,32 +8003cc68: 00481021 addu v0,v0,t0 +8003cc6c: 01e27823 subu t7,t7,v0 +8003cc70: 11e0ff93 beqz t7,8003cac0 <__umoddi3+0x1ac> +8003cc74: 00000000 nop +8003cc78: 01e73804 sllv a3,a3,t7 +8003cc7c: 00465006 srlv t2,a2,v0 +8003cc80: 00ea5025 or t2,a3,t2 +8003cc84: 0045c806 srlv t9,a1,v0 +8003cc88: 000ac402 srl t8,t2,0x10 +8003cc8c: 17000002 bnez t8,8003cc98 <__umoddi3+0x384> +8003cc90: 0338001b divu zero,t9,t8 +8003cc94: 0007000d break 0x7 +8003cc98: 3143ffff andi v1,t2,0xffff +8003cc9c: 01e53804 sllv a3,a1,t7 +8003cca0: 00444806 srlv t1,a0,v0 +8003cca4: 01274825 or t1,t1,a3 +8003cca8: 00097402 srl t6,t1,0x10 +8003ccac: 01e63804 sllv a3,a2,t7 +8003ccb0: 00005812 mflo t3 +8003ccb4: 00006810 mfhi t5 +8003ccb8: 000d6c00 sll t5,t5,0x10 +8003ccbc: 01cd6825 or t5,t6,t5 +8003ccc0: 006b0018 mult v1,t3 +8003ccc4: 00006012 mflo t4 +8003ccc8: 01ac282b sltu a1,t5,t4 +8003cccc: 00000000 nop +8003ccd0: 17000002 bnez t8,8003ccdc <__umoddi3+0x3c8> +8003ccd4: 0338001b divu zero,t9,t8 +8003ccd8: 0007000d break 0x7 +8003ccdc: 10a00006 beqz a1,8003ccf8 <__umoddi3+0x3e4> +8003cce0: 01e42004 sllv a0,a0,t7 +8003cce4: 01aa6821 addu t5,t5,t2 +8003cce8: 01aa282b sltu a1,t5,t2 +8003ccec: 10a00089 beqz a1,8003cf14 <__umoddi3+0x600> +8003ccf0: 2566ffff addiu a2,t3,-1 +8003ccf4: 00c05821 move t3,a2 +8003ccf8: 01ac6023 subu t4,t5,t4 +8003ccfc: 3129ffff andi t1,t1,0xffff +8003cd00: 17000002 bnez t8,8003cd0c <__umoddi3+0x3f8> +8003cd04: 0198001b divu zero,t4,t8 +8003cd08: 0007000d break 0x7 +8003cd0c: 00002812 mflo a1 +8003cd10: 00004010 mfhi t0 +8003cd14: 00084400 sll t0,t0,0x10 +8003cd18: 01284025 or t0,t1,t0 +8003cd1c: 00650018 mult v1,a1 +8003cd20: 00001812 mflo v1 +8003cd24: 0103302b sltu a2,t0,v1 +8003cd28: 00000000 nop +8003cd2c: 17000002 bnez t8,8003cd38 <__umoddi3+0x424> +8003cd30: 0198001b divu zero,t4,t8 +8003cd34: 0007000d break 0x7 +8003cd38: 10c00006 beqz a2,8003cd54 <__umoddi3+0x440> +8003cd3c: 00000000 nop +8003cd40: 010a4021 addu t0,t0,t2 +8003cd44: 010a302b sltu a2,t0,t2 +8003cd48: 10c0006d beqz a2,8003cf00 <__umoddi3+0x5ec> +8003cd4c: 24a9ffff addiu t1,a1,-1 +8003cd50: 01202821 move a1,t1 +8003cd54: 000b4c00 sll t1,t3,0x10 +8003cd58: 01255825 or t3,t1,a1 +8003cd5c: 01034023 subu t0,t0,v1 +8003cd60: 01670019 multu t3,a3 +8003cd64: 00006810 mfhi t5 +8003cd68: 010d282b sltu a1,t0,t5 +8003cd6c: 00006012 mflo t4 +8003cd70: 14a00059 bnez a1,8003ced8 <__umoddi3+0x5c4> +8003cd74: 00000000 nop +8003cd78: 110d0072 beq t0,t5,8003cf44 <__umoddi3+0x630> +8003cd7c: 00000000 nop +8003cd80: 010d4023 subu t0,t0,t5 +8003cd84: 00003812 mflo a3 +8003cd88: 00873823 subu a3,a0,a3 +8003cd8c: 0087202b sltu a0,a0,a3 +8003cd90: 01044023 subu t0,t0,a0 +8003cd94: 00482004 sllv a0,t0,v0 +8003cd98: 01e73806 srlv a3,a3,t7 +8003cd9c: 00871025 or v0,a0,a3 +8003cda0: 01e81806 srlv v1,t0,t7 +8003cda4: 03e00008 jr ra +8003cda8: 00000000 nop +8003cdac: 2d290001 sltiu t1,t1,1 +8003cdb0: 000948c0 sll t1,t1,0x3 +8003cdb4: 3c028004 lui v0,0x8004 +8003cdb8: 01281806 srlv v1,t0,t1 +8003cdbc: 2442f818 addiu v0,v0,-2024 +8003cdc0: 00621021 addu v0,v1,v0 +8003cdc4: 90460000 lbu a2,0(v0) +8003cdc8: 24020020 li v0,32 +8003cdcc: 00c94821 addu t1,a2,t1 +8003cdd0: 00495823 subu t3,v0,t1 +8003cdd4: 1160ff60 beqz t3,8003cb58 <__umoddi3+0x244> +8003cdd8: 00000000 nop +8003cddc: 01684004 sllv t0,t0,t3 +8003cde0: 01257006 srlv t6,a1,t1 +8003cde4: 00086402 srl t4,t0,0x10 +8003cde8: 15800002 bnez t4,8003cdf4 <__umoddi3+0x4e0> +8003cdec: 01cc001b divu zero,t6,t4 +8003cdf0: 0007000d break 0x7 +8003cdf4: 3102ffff andi v0,t0,0xffff +8003cdf8: 01652804 sllv a1,a1,t3 +8003cdfc: 01244806 srlv t1,a0,t1 +8003ce00: 01254825 or t1,t1,a1 +8003ce04: 00095402 srl t2,t1,0x10 +8003ce08: 00003012 mflo a2 +8003ce0c: 00003810 mfhi a3 +8003ce10: 00073c00 sll a3,a3,0x10 +8003ce14: 01473825 or a3,t2,a3 +8003ce18: 00460018 mult v0,a2 +8003ce1c: 00003012 mflo a2 +8003ce20: 00e6182b sltu v1,a3,a2 +8003ce24: 00000000 nop +8003ce28: 15800002 bnez t4,8003ce34 <__umoddi3+0x520> +8003ce2c: 01cc001b divu zero,t6,t4 +8003ce30: 0007000d break 0x7 +8003ce34: 10600008 beqz v1,8003ce58 <__umoddi3+0x544> +8003ce38: 01646804 sllv t5,a0,t3 +8003ce3c: 00e83821 addu a3,a3,t0 +8003ce40: 00e8182b sltu v1,a3,t0 +8003ce44: 14600004 bnez v1,8003ce58 <__umoddi3+0x544> +8003ce48: 00e6182b sltu v1,a3,a2 +8003ce4c: 10600002 beqz v1,8003ce58 <__umoddi3+0x544> +8003ce50: 00000000 nop +8003ce54: 00e83821 addu a3,a3,t0 +8003ce58: 00e63023 subu a2,a3,a2 +8003ce5c: 312affff andi t2,t1,0xffff +8003ce60: 15800002 bnez t4,8003ce6c <__umoddi3+0x558> +8003ce64: 00cc001b divu zero,a2,t4 +8003ce68: 0007000d break 0x7 +8003ce6c: 00002812 mflo a1 +8003ce70: 00004810 mfhi t1 +8003ce74: 00094c00 sll t1,t1,0x10 +8003ce78: 01495025 or t2,t2,t1 +8003ce7c: 00450018 mult v0,a1 +8003ce80: 00002812 mflo a1 +8003ce84: 0145182b sltu v1,t2,a1 +8003ce88: 00000000 nop +8003ce8c: 15800002 bnez t4,8003ce98 <__umoddi3+0x584> +8003ce90: 00cc001b divu zero,a2,t4 +8003ce94: 0007000d break 0x7 +8003ce98: 10600008 beqz v1,8003cebc <__umoddi3+0x5a8> +8003ce9c: 00000000 nop +8003cea0: 01485021 addu t2,t2,t0 +8003cea4: 0148182b sltu v1,t2,t0 +8003cea8: 14600004 bnez v1,8003cebc <__umoddi3+0x5a8> +8003ceac: 0145182b sltu v1,t2,a1 +8003ceb0: 10600002 beqz v1,8003cebc <__umoddi3+0x5a8> +8003ceb4: 00000000 nop +8003ceb8: 01485021 addu t2,t2,t0 +8003cebc: 1000ff29 b 8003cb64 <__umoddi3+0x250> +8003cec0: 01454823 subu t1,t2,a1 +8003cec4: 00c2102b sltu v0,a2,v0 +8003cec8: 1040000b beqz v0,8003cef8 <__umoddi3+0x5e4> +8003cecc: 00000000 nop +8003ced0: 1000fe9d b 8003c948 <__umoddi3+0x34> +8003ced4: 240b0010 li t3,16 +8003ced8: 01873823 subu a3,t4,a3 +8003cedc: 01aa5023 subu t2,t5,t2 +8003cee0: 0187182b sltu v1,t4,a3 +8003cee4: 01431823 subu v1,t2,v1 +8003cee8: 1000ffa7 b 8003cd88 <__umoddi3+0x474> +8003ceec: 01034023 subu t0,t0,v1 +8003cef0: 1000ff0f b 8003cb30 <__umoddi3+0x21c> +8003cef4: 24090018 li t1,24 +8003cef8: 1000fe93 b 8003c948 <__umoddi3+0x34> +8003cefc: 240b0018 li t3,24 +8003cf00: 0103302b sltu a2,t0,v1 +8003cf04: 10c0ff92 beqz a2,8003cd50 <__umoddi3+0x43c> +8003cf08: 24a5fffe addiu a1,a1,-2 +8003cf0c: 1000ff91 b 8003cd54 <__umoddi3+0x440> +8003cf10: 010a4021 addu t0,t0,t2 +8003cf14: 01ac282b sltu a1,t5,t4 +8003cf18: 10a0ff76 beqz a1,8003ccf4 <__umoddi3+0x3e0> +8003cf1c: 256bfffe addiu t3,t3,-2 +8003cf20: 1000ff75 b 8003ccf8 <__umoddi3+0x3e4> +8003cf24: 01aa6821 addu t5,t5,t2 +8003cf28: 1000ff26 b 8003cbc4 <__umoddi3+0x2b0> +8003cf2c: 01485021 addu t2,t2,t0 +8003cf30: 1000feae b 8003c9ec <__umoddi3+0xd8> +8003cf34: 01485021 addu t2,t2,t0 +8003cf38: 00801021 move v0,a0 +8003cf3c: 03e00008 jr ra +8003cf40: 00000000 nop +8003cf44: 008c182b sltu v1,a0,t4 +8003cf48: 1460ffe3 bnez v1,8003ced8 <__umoddi3+0x5c4> +8003cf4c: 00000000 nop +8003cf50: 00003812 mflo a3 +8003cf54: 1000ff8c b 8003cd88 <__umoddi3+0x474> +8003cf58: 00004021 move t0,zero + +8003cf5c <__adddf3>: +8003cf5c: 3c08000f lui t0,0xf +8003cf60: 3508ffff ori t0,t0,0xffff +8003cf64: 27bdffd8 addiu sp,sp,-40 +8003cf68: 01054824 and t1,t0,a1 +8003cf6c: 01074024 and t0,t0,a3 +8003cf70: 00051502 srl v0,a1,0x14 +8003cf74: 00046742 srl t4,a0,0x1d +8003cf78: 00065f42 srl t3,a2,0x1d +8003cf7c: afb10018 sw s1,24(sp) +8003cf80: 000948c0 sll t1,t1,0x3 +8003cf84: 00075502 srl t2,a3,0x14 +8003cf88: 000840c0 sll t0,t0,0x3 +8003cf8c: 00058fc2 srl s1,a1,0x1f +8003cf90: 00072fc2 srl a1,a3,0x1f +8003cf94: afb00014 sw s0,20(sp) +8003cf98: afbf0024 sw ra,36(sp) +8003cf9c: 305007ff andi s0,v0,0x7ff +8003cfa0: afb30020 sw s3,32(sp) +8003cfa4: afb2001c sw s2,28(sp) +8003cfa8: 012c1025 or v0,t1,t4 +8003cfac: 000420c0 sll a0,a0,0x3 +8003cfb0: 314a07ff andi t2,t2,0x7ff +8003cfb4: 010b4025 or t0,t0,t3 +8003cfb8: 12250071 beq s1,a1,8003d180 <__adddf3+0x224> +8003cfbc: 000630c0 sll a2,a2,0x3 +8003cfc0: 020a4823 subu t1,s0,t2 +8003cfc4: 192000c9 blez t1,8003d2ec <__adddf3+0x390> +8003cfc8: 00000000 nop +8003cfcc: 1540000b bnez t2,8003cffc <__adddf3+0xa0> +8003cfd0: 240307ff li v1,2047 +8003cfd4: 01061825 or v1,t0,a2 +8003cfd8: 1060008e beqz v1,8003d214 <__adddf3+0x2b8> +8003cfdc: 240307ff li v1,2047 +8003cfe0: 2529ffff addiu t1,t1,-1 +8003cfe4: 15200105 bnez t1,8003d3fc <__adddf3+0x4a0> +8003cfe8: 00869023 subu s2,a0,a2 +8003cfec: 00481023 subu v0,v0,t0 +8003cff0: 0092202b sltu a0,a0,s2 +8003cff4: 10000015 b 8003d04c <__adddf3+0xf0> +8003cff8: 00441023 subu v0,v0,a0 +8003cffc: 12030087 beq s0,v1,8003d21c <__adddf3+0x2c0> +8003d000: 3c030080 lui v1,0x80 +8003d004: 01034025 or t0,t0,v1 +8003d008: 29230039 slti v1,t1,57 +8003d00c: 106000e0 beqz v1,8003d390 <__adddf3+0x434> +8003d010: 29230020 slti v1,t1,32 +8003d014: 10600108 beqz v1,8003d438 <__adddf3+0x4dc> +8003d018: 24050020 li a1,32 +8003d01c: 00a92823 subu a1,a1,t1 +8003d020: 01263806 srlv a3,a2,t1 +8003d024: 00a81804 sllv v1,t0,a1 +8003d028: 00a63004 sllv a2,a2,a1 +8003d02c: 00671825 or v1,v1,a3 +8003d030: 0006382b sltu a3,zero,a2 +8003d034: 00673825 or a3,v1,a3 +8003d038: 01284006 srlv t0,t0,t1 +8003d03c: 00879023 subu s2,a0,a3 +8003d040: 00484023 subu t0,v0,t0 +8003d044: 0092202b sltu a0,a0,s2 +8003d048: 01041023 subu v0,t0,a0 +8003d04c: 3c130080 lui s3,0x80 +8003d050: 00531824 and v1,v0,s3 +8003d054: 106000a1 beqz v1,8003d2dc <__adddf3+0x380> +8003d058: 32430007 andi v1,s2,0x7 +8003d05c: 2673ffff addiu s3,s3,-1 +8003d060: 00539824 and s3,v0,s3 +8003d064: 126000b4 beqz s3,8003d338 <__adddf3+0x3dc> +8003d068: 00000000 nop +8003d06c: 0c00a2d8 jal 80028b60 <__clzsi2> +8003d070: 02602021 move a0,s3 +8003d074: 2446fff8 addiu a2,v0,-8 +8003d078: 28c30020 slti v1,a2,32 +8003d07c: 106000b6 beqz v1,8003d358 <__adddf3+0x3fc> +8003d080: 2442ffd8 addiu v0,v0,-40 +8003d084: 00061823 negu v1,a2 +8003d088: 00721806 srlv v1,s2,v1 +8003d08c: 00d31004 sllv v0,s3,a2 +8003d090: 00629825 or s3,v1,v0 +8003d094: 00d0102a slt v0,a2,s0 +8003d098: 144000b3 bnez v0,8003d368 <__adddf3+0x40c> +8003d09c: 00d29004 sllv s2,s2,a2 +8003d0a0: 00d03023 subu a2,a2,s0 +8003d0a4: 24c20001 addiu v0,a2,1 +8003d0a8: 28430020 slti v1,v0,32 +8003d0ac: 106000d7 beqz v1,8003d40c <__adddf3+0x4b0> +8003d0b0: 24030020 li v1,32 +8003d0b4: 24040020 li a0,32 +8003d0b8: 00822023 subu a0,a0,v0 +8003d0bc: 00521806 srlv v1,s2,v0 +8003d0c0: 00923804 sllv a3,s2,a0 +8003d0c4: 00932004 sllv a0,s3,a0 +8003d0c8: 00832025 or a0,a0,v1 +8003d0cc: 0007382b sltu a3,zero,a3 +8003d0d0: 00879025 or s2,a0,a3 +8003d0d4: 00531006 srlv v0,s3,v0 +8003d0d8: 32430007 andi v1,s2,0x7 +8003d0dc: 00008021 move s0,zero +8003d0e0: 10600009 beqz v1,8003d108 <__adddf3+0x1ac> +8003d0e4: 3c030080 lui v1,0x80 +8003d0e8: 3243000f andi v1,s2,0xf +8003d0ec: 24040004 li a0,4 +8003d0f0: 10640004 beq v1,a0,8003d104 <__adddf3+0x1a8> +8003d0f4: 26440004 addiu a0,s2,4 +8003d0f8: 0092382b sltu a3,a0,s2 +8003d0fc: 00471021 addu v0,v0,a3 +8003d100: 00809021 move s2,a0 +8003d104: 3c030080 lui v1,0x80 +8003d108: 00431824 and v1,v0,v1 +8003d10c: 10600062 beqz v1,8003d298 <__adddf3+0x33c> +8003d110: 26060001 addiu a2,s0,1 +8003d114: 240307ff li v1,2047 +8003d118: 10c30099 beq a2,v1,8003d380 <__adddf3+0x424> +8003d11c: 00000000 nop +8003d120: 3c04ff7f lui a0,0xff7f +8003d124: 3484ffff ori a0,a0,0xffff +8003d128: 00441024 and v0,v0,a0 +8003d12c: 00022740 sll a0,v0,0x1d +8003d130: 001238c2 srl a3,s2,0x3 +8003d134: 00021240 sll v0,v0,0x9 +8003d138: 00873825 or a3,a0,a3 +8003d13c: 00022302 srl a0,v0,0xc +8003d140: 30c207ff andi v0,a2,0x7ff +8003d144: 00023500 sll a2,v0,0x14 +8003d148: 3c02000f lui v0,0xf +8003d14c: 3442ffff ori v0,v0,0xffff +8003d150: 8fbf0024 lw ra,36(sp) +8003d154: 00821024 and v0,a0,v0 +8003d158: 00111fc0 sll v1,s1,0x1f +8003d15c: 00461025 or v0,v0,a2 +8003d160: 00431825 or v1,v0,v1 +8003d164: 8fb30020 lw s3,32(sp) +8003d168: 8fb2001c lw s2,28(sp) +8003d16c: 8fb10018 lw s1,24(sp) +8003d170: 8fb00014 lw s0,20(sp) +8003d174: 00e01021 move v0,a3 +8003d178: 03e00008 jr ra +8003d17c: 27bd0028 addiu sp,sp,40 +8003d180: 020a2823 subu a1,s0,t2 +8003d184: 18a00089 blez a1,8003d3ac <__adddf3+0x450> +8003d188: 00000000 nop +8003d18c: 11400034 beqz t2,8003d260 <__adddf3+0x304> +8003d190: 01061825 or v1,t0,a2 +8003d194: 240307ff li v1,2047 +8003d198: 12030020 beq s0,v1,8003d21c <__adddf3+0x2c0> +8003d19c: 3c030080 lui v1,0x80 +8003d1a0: 01034025 or t0,t0,v1 +8003d1a4: 28a30039 slti v1,a1,57 +8003d1a8: 146000cd bnez v1,8003d4e0 <__adddf3+0x584> +8003d1ac: 28a30020 slti v1,a1,32 +8003d1b0: 01063025 or a2,t0,a2 +8003d1b4: 0006382b sltu a3,zero,a2 +8003d1b8: 00004021 move t0,zero +8003d1bc: 00e49021 addu s2,a3,a0 +8003d1c0: 01024021 addu t0,t0,v0 +8003d1c4: 0244202b sltu a0,s2,a0 +8003d1c8: 00881021 addu v0,a0,t0 +8003d1cc: 3c030080 lui v1,0x80 +8003d1d0: 00431824 and v1,v0,v1 +8003d1d4: 10600041 beqz v1,8003d2dc <__adddf3+0x380> +8003d1d8: 32430007 andi v1,s2,0x7 +8003d1dc: 26100001 addiu s0,s0,1 +8003d1e0: 240307ff li v1,2047 +8003d1e4: 120300eb beq s0,v1,8003d594 <__adddf3+0x638> +8003d1e8: 00122042 srl a0,s2,0x1 +8003d1ec: 3c03ff7f lui v1,0xff7f +8003d1f0: 3463ffff ori v1,v1,0xffff +8003d1f4: 00431024 and v0,v0,v1 +8003d1f8: 32470001 andi a3,s2,0x1 +8003d1fc: 00879025 or s2,a0,a3 +8003d200: 00023fc0 sll a3,v0,0x1f +8003d204: 00f29025 or s2,a3,s2 +8003d208: 00021042 srl v0,v0,0x1 +8003d20c: 1000ffb4 b 8003d0e0 <__adddf3+0x184> +8003d210: 32430007 andi v1,s2,0x7 +8003d214: 1603ffbb bne s0,v1,8003d104 <__adddf3+0x1a8> +8003d218: 00809021 move s2,a0 +8003d21c: 00441825 or v1,v0,a0 +8003d220: 1460ffb8 bnez v1,8003d104 <__adddf3+0x1a8> +8003d224: 00809021 move s2,a0 +8003d228: 00003821 move a3,zero +8003d22c: 00671025 or v0,v1,a3 +8003d230: 10400054 beqz v0,8003d384 <__adddf3+0x428> +8003d234: 240207ff li v0,2047 +8003d238: 3c040007 lui a0,0x7 +8003d23c: 3484ffff ori a0,a0,0xffff +8003d240: 00641024 and v0,v1,a0 +8003d244: 00471825 or v1,v0,a3 +8003d248: 14600055 bnez v1,8003d3a0 <__adddf3+0x444> +8003d24c: 00000000 nop +8003d250: 00008821 move s1,zero +8003d254: 240207ff li v0,2047 +8003d258: 1000ffba b 8003d144 <__adddf3+0x1e8> +8003d25c: 2407ffff li a3,-1 +8003d260: 1060ffec beqz v1,8003d214 <__adddf3+0x2b8> +8003d264: 240307ff li v1,2047 +8003d268: 24a5ffff addiu a1,a1,-1 +8003d26c: 14a000b0 bnez a1,8003d530 <__adddf3+0x5d4> +8003d270: 00869021 addu s2,a0,a2 +8003d274: 00481021 addu v0,v0,t0 +8003d278: 0244202b sltu a0,s2,a0 +8003d27c: 1000ffd3 b 8003d1cc <__adddf3+0x270> +8003d280: 00821021 addu v0,a0,v0 +8003d284: 3c02003f lui v0,0x3f +8003d288: 00008821 move s1,zero +8003d28c: 241007ff li s0,2047 +8003d290: 3442ffff ori v0,v0,0xffff +8003d294: 2412fff8 li s2,-8 +8003d298: 00021f40 sll v1,v0,0x1d +8003d29c: 001238c2 srl a3,s2,0x3 +8003d2a0: 00e33825 or a3,a3,v1 +8003d2a4: 000218c2 srl v1,v0,0x3 +8003d2a8: 240207ff li v0,2047 +8003d2ac: 1202ffdf beq s0,v0,8003d22c <__adddf3+0x2d0> +8003d2b0: 00000000 nop +8003d2b4: 3c06000f lui a2,0xf +8003d2b8: 34c6ffff ori a2,a2,0xffff +8003d2bc: 00662024 and a0,v1,a2 +8003d2c0: 1000ffa0 b 8003d144 <__adddf3+0x1e8> +8003d2c4: 320207ff andi v0,s0,0x7ff +8003d2c8: 02471825 or v1,s2,a3 +8003d2cc: 1060012f beqz v1,8003d78c <__adddf3+0x830> +8003d2d0: 00000000 nop +8003d2d4: 00e01021 move v0,a3 +8003d2d8: 32430007 andi v1,s2,0x7 +8003d2dc: 1460ff82 bnez v1,8003d0e8 <__adddf3+0x18c> +8003d2e0: 00021f40 sll v1,v0,0x1d +8003d2e4: 1000ffee b 8003d2a0 <__adddf3+0x344> +8003d2e8: 001238c2 srl a3,s2,0x3 +8003d2ec: 1520005b bnez t1,8003d45c <__adddf3+0x500> +8003d2f0: 26030001 addiu v1,s0,1 +8003d2f4: 306307ff andi v1,v1,0x7ff +8003d2f8: 28630002 slti v1,v1,2 +8003d2fc: 1460009b bnez v1,8003d56c <__adddf3+0x610> +8003d300: 00869023 subu s2,a0,a2 +8003d304: 0092182b sltu v1,a0,s2 +8003d308: 00489823 subu s3,v0,t0 +8003d30c: 02639823 subu s3,s3,v1 +8003d310: 3c030080 lui v1,0x80 +8003d314: 02631824 and v1,s3,v1 +8003d318: 1060006c beqz v1,8003d4cc <__adddf3+0x570> +8003d31c: 02531825 or v1,s2,s3 +8003d320: 00c49023 subu s2,a2,a0 +8003d324: 01021023 subu v0,t0,v0 +8003d328: 00d2302b sltu a2,a2,s2 +8003d32c: 00469823 subu s3,v0,a2 +8003d330: 1660ff4e bnez s3,8003d06c <__adddf3+0x110> +8003d334: 00a08821 move s1,a1 +8003d338: 0c00a2d8 jal 80028b60 <__clzsi2> +8003d33c: 02402021 move a0,s2 +8003d340: 24420020 addiu v0,v0,32 +8003d344: 2446fff8 addiu a2,v0,-8 +8003d348: 28c30020 slti v1,a2,32 +8003d34c: 1460ff4e bnez v1,8003d088 <__adddf3+0x12c> +8003d350: 00061823 negu v1,a2 +8003d354: 2442ffd8 addiu v0,v0,-40 +8003d358: 00529804 sllv s3,s2,v0 +8003d35c: 00d0102a slt v0,a2,s0 +8003d360: 1040ff4f beqz v0,8003d0a0 <__adddf3+0x144> +8003d364: 00009021 move s2,zero +8003d368: 3c02ff7f lui v0,0xff7f +8003d36c: 3442ffff ori v0,v0,0xffff +8003d370: 02068023 subu s0,s0,a2 +8003d374: 02621024 and v0,s3,v0 +8003d378: 1000ff59 b 8003d0e0 <__adddf3+0x184> +8003d37c: 32430007 andi v1,s2,0x7 +8003d380: 240207ff li v0,2047 +8003d384: 00002021 move a0,zero +8003d388: 1000ff6e b 8003d144 <__adddf3+0x1e8> +8003d38c: 00003821 move a3,zero +8003d390: 01063025 or a2,t0,a2 +8003d394: 0006382b sltu a3,zero,a2 +8003d398: 1000ff28 b 8003d03c <__adddf3+0xe0> +8003d39c: 00004021 move t0,zero +8003d3a0: 00402021 move a0,v0 +8003d3a4: 1000ff67 b 8003d144 <__adddf3+0x1e8> +8003d3a8: 240207ff li v0,2047 +8003d3ac: 14a00086 bnez a1,8003d5c8 <__adddf3+0x66c> +8003d3b0: 00000000 nop +8003d3b4: 26050001 addiu a1,s0,1 +8003d3b8: 30a307ff andi v1,a1,0x7ff +8003d3bc: 28630002 slti v1,v1,2 +8003d3c0: 14600063 bnez v1,8003d550 <__adddf3+0x5f4> +8003d3c4: 00000000 nop +8003d3c8: 240307ff li v1,2047 +8003d3cc: 10a30071 beq a1,v1,8003d594 <__adddf3+0x638> +8003d3d0: 00863021 addu a2,a0,a2 +8003d3d4: 00c4202b sltu a0,a2,a0 +8003d3d8: 00481021 addu v0,v0,t0 +8003d3dc: 00821021 addu v0,a0,v0 +8003d3e0: 00023fc0 sll a3,v0,0x1f +8003d3e4: 00063042 srl a2,a2,0x1 +8003d3e8: 00e69025 or s2,a3,a2 +8003d3ec: 00021042 srl v0,v0,0x1 +8003d3f0: 32430007 andi v1,s2,0x7 +8003d3f4: 1000ff3a b 8003d0e0 <__adddf3+0x184> +8003d3f8: 00a08021 move s0,a1 +8003d3fc: 1603ff02 bne s0,v1,8003d008 <__adddf3+0xac> +8003d400: 00441825 or v1,v0,a0 +8003d404: 1000ff86 b 8003d220 <__adddf3+0x2c4> +8003d408: 00000000 nop +8003d40c: 24c6ffe1 addiu a2,a2,-31 +8003d410: 1043004b beq v0,v1,8003d540 <__adddf3+0x5e4> +8003d414: 00d33006 srlv a2,s3,a2 +8003d418: 00023823 negu a3,v0 +8003d41c: 00f33804 sllv a3,s3,a3 +8003d420: 02473825 or a3,s2,a3 +8003d424: 0007382b sltu a3,zero,a3 +8003d428: 00c79025 or s2,a2,a3 +8003d42c: 00001021 move v0,zero +8003d430: 1000ffa9 b 8003d2d8 <__adddf3+0x37c> +8003d434: 00008021 move s0,zero +8003d438: 11250043 beq t1,a1,8003d548 <__adddf3+0x5ec> +8003d43c: 01281806 srlv v1,t0,t1 +8003d440: 00093823 negu a3,t1 +8003d444: 00e83804 sllv a3,t0,a3 +8003d448: 00e63025 or a2,a3,a2 +8003d44c: 0006382b sltu a3,zero,a2 +8003d450: 00673825 or a3,v1,a3 +8003d454: 1000fef9 b 8003d03c <__adddf3+0xe0> +8003d458: 00004021 move t0,zero +8003d45c: 1200002b beqz s0,8003d50c <__adddf3+0x5b0> +8003d460: 00441825 or v1,v0,a0 +8003d464: 240307ff li v1,2047 +8003d468: 114300be beq t2,v1,8003d764 <__adddf3+0x808> +8003d46c: 3c030080 lui v1,0x80 +8003d470: 00094823 negu t1,t1 +8003d474: 00431025 or v0,v0,v1 +8003d478: 29230039 slti v1,t1,57 +8003d47c: 10600077 beqz v1,8003d65c <__adddf3+0x700> +8003d480: 29230020 slti v1,t1,32 +8003d484: 106000c4 beqz v1,8003d798 <__adddf3+0x83c> +8003d488: 24030020 li v1,32 +8003d48c: 240b0020 li t3,32 +8003d490: 01695823 subu t3,t3,t1 +8003d494: 01243806 srlv a3,a0,t1 +8003d498: 01621804 sllv v1,v0,t3 +8003d49c: 01642004 sllv a0,a0,t3 +8003d4a0: 00671825 or v1,v1,a3 +8003d4a4: 0004382b sltu a3,zero,a0 +8003d4a8: 00673825 or a3,v1,a3 +8003d4ac: 01224806 srlv t1,v0,t1 +8003d4b0: 00c79023 subu s2,a2,a3 +8003d4b4: 01094823 subu t1,t0,t1 +8003d4b8: 00d2302b sltu a2,a2,s2 +8003d4bc: 01261023 subu v0,t1,a2 +8003d4c0: 01408021 move s0,t2 +8003d4c4: 1000fee1 b 8003d04c <__adddf3+0xf0> +8003d4c8: 00a08821 move s1,a1 +8003d4cc: 1460fee5 bnez v1,8003d064 <__adddf3+0x108> +8003d4d0: 00003821 move a3,zero +8003d4d4: 00008821 move s1,zero +8003d4d8: 1000ff76 b 8003d2b4 <__adddf3+0x358> +8003d4dc: 00008021 move s0,zero +8003d4e0: 1060002f beqz v1,8003d5a0 <__adddf3+0x644> +8003d4e4: 24090020 li t1,32 +8003d4e8: 01254823 subu t1,t1,a1 +8003d4ec: 00a63806 srlv a3,a2,a1 +8003d4f0: 01281804 sllv v1,t0,t1 +8003d4f4: 01263004 sllv a2,a2,t1 +8003d4f8: 00671825 or v1,v1,a3 +8003d4fc: 0006382b sltu a3,zero,a2 +8003d500: 00673825 or a3,v1,a3 +8003d504: 1000ff2d b 8003d1bc <__adddf3+0x260> +8003d508: 00a84006 srlv t0,t0,a1 +8003d50c: 14600049 bnez v1,8003d634 <__adddf3+0x6d8> +8003d510: 00000000 nop +8003d514: 240207ff li v0,2047 +8003d518: 11420092 beq t2,v0,8003d764 <__adddf3+0x808> +8003d51c: 01001021 move v0,t0 +8003d520: 00c09021 move s2,a2 +8003d524: 01408021 move s0,t2 +8003d528: 1000fef6 b 8003d104 <__adddf3+0x1a8> +8003d52c: 00a08821 move s1,a1 +8003d530: 1603ff1c bne s0,v1,8003d1a4 <__adddf3+0x248> +8003d534: 00441825 or v1,v0,a0 +8003d538: 1000ff39 b 8003d220 <__adddf3+0x2c4> +8003d53c: 00000000 nop +8003d540: 1000ffb7 b 8003d420 <__adddf3+0x4c4> +8003d544: 00003821 move a3,zero +8003d548: 1000ffbf b 8003d448 <__adddf3+0x4ec> +8003d54c: 00003821 move a3,zero +8003d550: 1600006e bnez s0,8003d70c <__adddf3+0x7b0> +8003d554: 00441825 or v1,v0,a0 +8003d558: 146000a9 bnez v1,8003d800 <__adddf3+0x8a4> +8003d55c: 01061825 or v1,t0,a2 +8003d560: 01001021 move v0,t0 +8003d564: 1000fee7 b 8003d104 <__adddf3+0x1a8> +8003d568: 00c09021 move s2,a2 +8003d56c: 16000021 bnez s0,8003d5f4 <__adddf3+0x698> +8003d570: 00441825 or v1,v0,a0 +8003d574: 14600055 bnez v1,8003d6cc <__adddf3+0x770> +8003d578: 01061825 or v1,t0,a2 +8003d57c: 10600084 beqz v1,8003d790 <__adddf3+0x834> +8003d580: 00003821 move a3,zero +8003d584: 01001021 move v0,t0 +8003d588: 00c09021 move s2,a2 +8003d58c: 1000fedd b 8003d104 <__adddf3+0x1a8> +8003d590: 00a08821 move s1,a1 +8003d594: 00001821 move v1,zero +8003d598: 1000ff24 b 8003d22c <__adddf3+0x2d0> +8003d59c: 00003821 move a3,zero +8003d5a0: 24070020 li a3,32 +8003d5a4: 10a70077 beq a1,a3,8003d784 <__adddf3+0x828> +8003d5a8: 00a81806 srlv v1,t0,a1 +8003d5ac: 00053823 negu a3,a1 +8003d5b0: 00e83804 sllv a3,t0,a3 +8003d5b4: 00e63025 or a2,a3,a2 +8003d5b8: 0006382b sltu a3,zero,a2 +8003d5bc: 00673825 or a3,v1,a3 +8003d5c0: 1000fefe b 8003d1bc <__adddf3+0x260> +8003d5c4: 00004021 move t0,zero +8003d5c8: 16000028 bnez s0,8003d66c <__adddf3+0x710> +8003d5cc: 240307ff li v1,2047 +8003d5d0: 00441825 or v1,v0,a0 +8003d5d4: 14600079 bnez v1,8003d7bc <__adddf3+0x860> +8003d5d8: 00000000 nop +8003d5dc: 240207ff li v0,2047 +8003d5e0: 1142009a beq t2,v0,8003d84c <__adddf3+0x8f0> +8003d5e4: 01001021 move v0,t0 +8003d5e8: 00c09021 move s2,a2 +8003d5ec: 1000fec5 b 8003d104 <__adddf3+0x1a8> +8003d5f0: 01408021 move s0,t2 +8003d5f4: 14600009 bnez v1,8003d61c <__adddf3+0x6c0> +8003d5f8: 00000000 nop +8003d5fc: 01061025 or v0,t0,a2 +8003d600: 10400077 beqz v0,8003d7e0 <__adddf3+0x884> +8003d604: 3c030007 lui v1,0x7 +8003d608: 01001021 move v0,t0 +8003d60c: 00c09021 move s2,a2 +8003d610: 00a08821 move s1,a1 +8003d614: 1000febb b 8003d104 <__adddf3+0x1a8> +8003d618: 241007ff li s0,2047 +8003d61c: 01063025 or a2,t0,a2 +8003d620: 14c00040 bnez a2,8003d724 <__adddf3+0x7c8> +8003d624: 000228c2 srl a1,v0,0x3 +8003d628: 00809021 move s2,a0 +8003d62c: 1000feb5 b 8003d104 <__adddf3+0x1a8> +8003d630: 241007ff li s0,2047 +8003d634: 00094827 nor t1,zero,t1 +8003d638: 15200048 bnez t1,8003d75c <__adddf3+0x800> +8003d63c: 240307ff li v1,2047 +8003d640: 00c49023 subu s2,a2,a0 +8003d644: 01021023 subu v0,t0,v0 +8003d648: 00d2302b sltu a2,a2,s2 +8003d64c: 00461023 subu v0,v0,a2 +8003d650: 01408021 move s0,t2 +8003d654: 1000fe7d b 8003d04c <__adddf3+0xf0> +8003d658: 00a08821 move s1,a1 +8003d65c: 00442025 or a0,v0,a0 +8003d660: 0004382b sltu a3,zero,a0 +8003d664: 1000ff92 b 8003d4b0 <__adddf3+0x554> +8003d668: 00004821 move t1,zero +8003d66c: 11430077 beq t2,v1,8003d84c <__adddf3+0x8f0> +8003d670: 3c030080 lui v1,0x80 +8003d674: 00052823 negu a1,a1 +8003d678: 00431025 or v0,v0,v1 +8003d67c: 28a30039 slti v1,a1,57 +8003d680: 1060005b beqz v1,8003d7f0 <__adddf3+0x894> +8003d684: 28a30020 slti v1,a1,32 +8003d688: 10600075 beqz v1,8003d860 <__adddf3+0x904> +8003d68c: 24030020 li v1,32 +8003d690: 24090020 li t1,32 +8003d694: 01254823 subu t1,t1,a1 +8003d698: 00a43806 srlv a3,a0,a1 +8003d69c: 01221804 sllv v1,v0,t1 +8003d6a0: 01242004 sllv a0,a0,t1 +8003d6a4: 00671825 or v1,v1,a3 +8003d6a8: 0004382b sltu a3,zero,a0 +8003d6ac: 00673825 or a3,v1,a3 +8003d6b0: 00a21006 srlv v0,v0,a1 +8003d6b4: 00e69021 addu s2,a3,a2 +8003d6b8: 00484021 addu t0,v0,t0 +8003d6bc: 0246302b sltu a2,s2,a2 +8003d6c0: 00c81021 addu v0,a2,t0 +8003d6c4: 1000fec1 b 8003d1cc <__adddf3+0x270> +8003d6c8: 01408021 move s0,t2 +8003d6cc: 1060fe8d beqz v1,8003d104 <__adddf3+0x1a8> +8003d6d0: 00809021 move s2,a0 +8003d6d4: 00869023 subu s2,a0,a2 +8003d6d8: 00481823 subu v1,v0,t0 +8003d6dc: 0092382b sltu a3,a0,s2 +8003d6e0: 00673823 subu a3,v1,a3 +8003d6e4: 3c030080 lui v1,0x80 +8003d6e8: 00e31824 and v1,a3,v1 +8003d6ec: 1060fef6 beqz v1,8003d2c8 <__adddf3+0x36c> +8003d6f0: 01021023 subu v0,t0,v0 +8003d6f4: 00c49023 subu s2,a2,a0 +8003d6f8: 00d2302b sltu a2,a2,s2 +8003d6fc: 00461023 subu v0,v0,a2 +8003d700: 32430007 andi v1,s2,0x7 +8003d704: 1000fe76 b 8003d0e0 <__adddf3+0x184> +8003d708: 00a08821 move s1,a1 +8003d70c: 1460ffc3 bnez v1,8003d61c <__adddf3+0x6c0> +8003d710: 00000000 nop +8003d714: 01001021 move v0,t0 +8003d718: 00c09021 move s2,a2 +8003d71c: 1000fe79 b 8003d104 <__adddf3+0x1a8> +8003d720: 241007ff li s0,2047 +8003d724: 000818c2 srl v1,t0,0x3 +8003d728: 00651825 or v1,v1,a1 +8003d72c: 3c060008 lui a2,0x8 +8003d730: 00661824 and v1,v1,a2 +8003d734: 1460fed3 bnez v1,8003d284 <__adddf3+0x328> +8003d738: 00021740 sll v0,v0,0x1d +8003d73c: 000420c2 srl a0,a0,0x3 +8003d740: 00443825 or a3,v0,a0 +8003d744: 000528c0 sll a1,a1,0x3 +8003d748: 00071742 srl v0,a3,0x1d +8003d74c: 00451025 or v0,v0,a1 +8003d750: 000790c0 sll s2,a3,0x3 +8003d754: 1000fe6b b 8003d104 <__adddf3+0x1a8> +8003d758: 241007ff li s0,2047 +8003d75c: 1543ff47 bne t2,v1,8003d47c <__adddf3+0x520> +8003d760: 29230039 slti v1,t1,57 +8003d764: 01061825 or v1,t0,a2 +8003d768: 10600034 beqz v1,8003d83c <__adddf3+0x8e0> +8003d76c: 00003821 move a3,zero +8003d770: 01001021 move v0,t0 +8003d774: 00c09021 move s2,a2 +8003d778: 241007ff li s0,2047 +8003d77c: 1000fe61 b 8003d104 <__adddf3+0x1a8> +8003d780: 00a08821 move s1,a1 +8003d784: 1000ff8b b 8003d5b4 <__adddf3+0x658> +8003d788: 00003821 move a3,zero +8003d78c: 00003821 move a3,zero +8003d790: 1000fec8 b 8003d2b4 <__adddf3+0x358> +8003d794: 00008821 move s1,zero +8003d798: 1123003a beq t1,v1,8003d884 <__adddf3+0x928> +8003d79c: 01223806 srlv a3,v0,t1 +8003d7a0: 00094823 negu t1,t1 +8003d7a4: 01221804 sllv v1,v0,t1 +8003d7a8: 00642025 or a0,v1,a0 +8003d7ac: 0004182b sltu v1,zero,a0 +8003d7b0: 00e33825 or a3,a3,v1 +8003d7b4: 1000ff3e b 8003d4b0 <__adddf3+0x554> +8003d7b8: 00004821 move t1,zero +8003d7bc: 00052827 nor a1,zero,a1 +8003d7c0: 14a00020 bnez a1,8003d844 <__adddf3+0x8e8> +8003d7c4: 240307ff li v1,2047 +8003d7c8: 00869021 addu s2,a0,a2 +8003d7cc: 00481021 addu v0,v0,t0 +8003d7d0: 0246302b sltu a2,s2,a2 +8003d7d4: 00c21021 addu v0,a2,v0 +8003d7d8: 1000fe7c b 8003d1cc <__adddf3+0x270> +8003d7dc: 01408021 move s0,t2 +8003d7e0: 3463ffff ori v1,v1,0xffff +8003d7e4: 2407ffff li a3,-1 +8003d7e8: 1000fe90 b 8003d22c <__adddf3+0x2d0> +8003d7ec: 00008821 move s1,zero +8003d7f0: 00441025 or v0,v0,a0 +8003d7f4: 0002382b sltu a3,zero,v0 +8003d7f8: 1000ffae b 8003d6b4 <__adddf3+0x758> +8003d7fc: 00001021 move v0,zero +8003d800: 1060fe40 beqz v1,8003d104 <__adddf3+0x1a8> +8003d804: 00809021 move s2,a0 +8003d808: 00869021 addu s2,a0,a2 +8003d80c: 00481021 addu v0,v0,t0 +8003d810: 0244202b sltu a0,s2,a0 +8003d814: 00821021 addu v0,a0,v0 +8003d818: 3c030080 lui v1,0x80 +8003d81c: 00431824 and v1,v0,v1 +8003d820: 1060fead beqz v1,8003d2d8 <__adddf3+0x37c> +8003d824: 3c03ff7f lui v1,0xff7f +8003d828: 3463ffff ori v1,v1,0xffff +8003d82c: 00431024 and v0,v0,v1 +8003d830: 24100001 li s0,1 +8003d834: 1000fe2a b 8003d0e0 <__adddf3+0x184> +8003d838: 32430007 andi v1,s2,0x7 +8003d83c: 1000fe7b b 8003d22c <__adddf3+0x2d0> +8003d840: 00a08821 move s1,a1 +8003d844: 1543ff8e bne t2,v1,8003d680 <__adddf3+0x724> +8003d848: 28a30039 slti v1,a1,57 +8003d84c: 01061825 or v1,t0,a2 +8003d850: 1460ffb1 bnez v1,8003d718 <__adddf3+0x7bc> +8003d854: 01001021 move v0,t0 +8003d858: 1000fe74 b 8003d22c <__adddf3+0x2d0> +8003d85c: 00003821 move a3,zero +8003d860: 10a3000a beq a1,v1,8003d88c <__adddf3+0x930> +8003d864: 00a23806 srlv a3,v0,a1 +8003d868: 00052823 negu a1,a1 +8003d86c: 00a21004 sllv v0,v0,a1 +8003d870: 00442025 or a0,v0,a0 +8003d874: 0004102b sltu v0,zero,a0 +8003d878: 00e23825 or a3,a3,v0 +8003d87c: 1000ff8d b 8003d6b4 <__adddf3+0x758> +8003d880: 00001021 move v0,zero +8003d884: 1000ffc8 b 8003d7a8 <__adddf3+0x84c> +8003d888: 00001821 move v1,zero +8003d88c: 1000fff8 b 8003d870 <__adddf3+0x914> +8003d890: 00001021 move v0,zero + +8003d894 <__divdf3>: +8003d894: 27bdffc0 addiu sp,sp,-64 +8003d898: afb5002c sw s5,44(sp) +8003d89c: afb00018 sw s0,24(sp) +8003d8a0: 0005ad02 srl s5,a1,0x14 +8003d8a4: 3c10000f lui s0,0xf +8003d8a8: afb40028 sw s4,40(sp) +8003d8ac: 3610ffff ori s0,s0,0xffff +8003d8b0: 0005a7c2 srl s4,a1,0x1f +8003d8b4: 32b507ff andi s5,s5,0x7ff +8003d8b8: afb70034 sw s7,52(sp) +8003d8bc: afb1001c sw s1,28(sp) +8003d8c0: afbf003c sw ra,60(sp) +8003d8c4: afbe0038 sw s8,56(sp) +8003d8c8: afb60030 sw s6,48(sp) +8003d8cc: afb30024 sw s3,36(sp) +8003d8d0: afb20020 sw s2,32(sp) +8003d8d4: 00808821 move s1,a0 +8003d8d8: 02058024 and s0,s0,a1 +8003d8dc: 12a00078 beqz s5,8003dac0 <__divdf3+0x22c> +8003d8e0: 0280b821 move s7,s4 +8003d8e4: 240207ff li v0,2047 +8003d8e8: 12a20026 beq s5,v0,8003d984 <__divdf3+0xf0> +8003d8ec: 02048825 or s1,s0,a0 +8003d8f0: 3c050010 lui a1,0x10 +8003d8f4: 02058025 or s0,s0,a1 +8003d8f8: 001080c0 sll s0,s0,0x3 +8003d8fc: 00042f42 srl a1,a0,0x1d +8003d900: 00b08025 or s0,a1,s0 +8003d904: 000490c0 sll s2,a0,0x3 +8003d908: 26b5fc01 addiu s5,s5,-1023 +8003d90c: 00009821 move s3,zero +8003d910: 0000f021 move s8,zero +8003d914: 00072d02 srl a1,a3,0x14 +8003d918: 3c11000f lui s1,0xf +8003d91c: 3631ffff ori s1,s1,0xffff +8003d920: 30a507ff andi a1,a1,0x7ff +8003d924: 00c01821 move v1,a2 +8003d928: 02278824 and s1,s1,a3 +8003d92c: 10a00023 beqz a1,8003d9bc <__divdf3+0x128> +8003d930: 0007b7c2 srl s6,a3,0x1f +8003d934: 240207ff li v0,2047 +8003d938: 10a2007a beq a1,v0,8003db24 <__divdf3+0x290> +8003d93c: 3c020010 lui v0,0x10 +8003d940: 02228825 or s1,s1,v0 +8003d944: 001188c0 sll s1,s1,0x3 +8003d948: 00061742 srl v0,a2,0x1d +8003d94c: 00518825 or s1,v0,s1 +8003d950: 000618c0 sll v1,a2,0x3 +8003d954: 24a5fc01 addiu a1,a1,-1023 +8003d958: 00001021 move v0,zero +8003d95c: 00532025 or a0,v0,s3 +8003d960: 00043080 sll a2,a0,0x2 +8003d964: 3c048004 lui a0,0x8004 +8003d968: 2484007c addiu a0,a0,124 +8003d96c: 00862021 addu a0,a0,a2 +8003d970: 8c860000 lw a2,0(a0) +8003d974: 02962026 xor a0,s4,s6 +8003d978: 00803821 move a3,a0 +8003d97c: 00c00008 jr a2 +8003d980: 02a52823 subu a1,s5,a1 +8003d984: 16200077 bnez s1,8003db64 <__divdf3+0x2d0> +8003d988: 00809021 move s2,a0 +8003d98c: 00072d02 srl a1,a3,0x14 +8003d990: 3c11000f lui s1,0xf +8003d994: 3631ffff ori s1,s1,0xffff +8003d998: 30a507ff andi a1,a1,0x7ff +8003d99c: 24130008 li s3,8 +8003d9a0: 00008021 move s0,zero +8003d9a4: 00009021 move s2,zero +8003d9a8: 241e0002 li s8,2 +8003d9ac: 00c01821 move v1,a2 +8003d9b0: 02278824 and s1,s1,a3 +8003d9b4: 14a0ffdf bnez a1,8003d934 <__divdf3+0xa0> +8003d9b8: 0007b7c2 srl s6,a3,0x1f +8003d9bc: 02261025 or v0,s1,a2 +8003d9c0: 1040005f beqz v0,8003db40 <__divdf3+0x2ac> +8003d9c4: 00001821 move v1,zero +8003d9c8: 12200090 beqz s1,8003dc0c <__divdf3+0x378> +8003d9cc: 00c02021 move a0,a2 +8003d9d0: 02202021 move a0,s1 +8003d9d4: 0c00a2d8 jal 80028b60 <__clzsi2> +8003d9d8: afa60010 sw a2,16(sp) +8003d9dc: 8fa60010 lw a2,16(sp) +8003d9e0: 2444fff5 addiu a0,v0,-11 +8003d9e4: 2883001d slti v1,a0,29 +8003d9e8: 10600084 beqz v1,8003dbfc <__divdf3+0x368> +8003d9ec: 00000000 nop +8003d9f0: 2405001d li a1,29 +8003d9f4: 2443fff8 addiu v1,v0,-8 +8003d9f8: 00a42823 subu a1,a1,a0 +8003d9fc: 00718804 sllv s1,s1,v1 +8003da00: 00a62806 srlv a1,a2,a1 +8003da04: 00b18825 or s1,a1,s1 +8003da08: 00661804 sllv v1,a2,v1 +8003da0c: 2405fc02 li a1,-1022 +8003da10: 00a42823 subu a1,a1,a0 +8003da14: 1000ffd1 b 8003d95c <__divdf3+0xc8> +8003da18: 00001021 move v0,zero +8003da1c: 02e03821 move a3,s7 +8003da20: 30e40001 andi a0,a3,0x1 +8003da24: 240307ff li v1,2047 +8003da28: 00002821 move a1,zero +8003da2c: 00009021 move s2,zero +8003da30: 3c10000f lui s0,0xf +8003da34: 3610ffff ori s0,s0,0xffff +8003da38: 00031d00 sll v1,v1,0x14 +8003da3c: 8fbf003c lw ra,60(sp) +8003da40: 00b08024 and s0,a1,s0 +8003da44: 02038025 or s0,s0,v1 +8003da48: 000427c0 sll a0,a0,0x1f +8003da4c: 02041825 or v1,s0,a0 +8003da50: 02401021 move v0,s2 +8003da54: 8fbe0038 lw s8,56(sp) +8003da58: 8fb70034 lw s7,52(sp) +8003da5c: 8fb60030 lw s6,48(sp) +8003da60: 8fb5002c lw s5,44(sp) +8003da64: 8fb40028 lw s4,40(sp) +8003da68: 8fb30024 lw s3,36(sp) +8003da6c: 8fb20020 lw s2,32(sp) +8003da70: 8fb1001c lw s1,28(sp) +8003da74: 8fb00018 lw s0,24(sp) +8003da78: 03e00008 jr ra +8003da7c: 27bd0040 addiu sp,sp,64 +8003da80: 02c0b821 move s7,s6 +8003da84: 02208021 move s0,s1 +8003da88: 00609021 move s2,v1 +8003da8c: 0040f021 move s8,v0 +8003da90: 24020002 li v0,2 +8003da94: 13c2ffe1 beq s8,v0,8003da1c <__divdf3+0x188> +8003da98: 24020003 li v0,3 +8003da9c: 13c201a6 beq s8,v0,8003e138 <__divdf3+0x8a4> +8003daa0: 00000000 nop +8003daa4: 24020001 li v0,1 +8003daa8: 17c20104 bne s8,v0,8003debc <__divdf3+0x628> +8003daac: 02e02021 move a0,s7 +8003dab0: 00001821 move v1,zero +8003dab4: 00002821 move a1,zero +8003dab8: 1000ffdd b 8003da30 <__divdf3+0x19c> +8003dabc: 00009021 move s2,zero +8003dac0: 02041025 or v0,s0,a0 +8003dac4: 10400023 beqz v0,8003db54 <__divdf3+0x2c0> +8003dac8: 24130004 li s3,4 +8003dacc: afa70014 sw a3,20(sp) +8003dad0: 12000057 beqz s0,8003dc30 <__divdf3+0x39c> +8003dad4: afa60010 sw a2,16(sp) +8003dad8: 0c00a2d8 jal 80028b60 <__clzsi2> +8003dadc: 02002021 move a0,s0 +8003dae0: 8fa60010 lw a2,16(sp) +8003dae4: 8fa70014 lw a3,20(sp) +8003dae8: 2443fff5 addiu v1,v0,-11 +8003daec: 2864001d slti a0,v1,29 +8003daf0: 1080004b beqz a0,8003dc20 <__divdf3+0x38c> +8003daf4: 2404001d li a0,29 +8003daf8: 2452fff8 addiu s2,v0,-8 +8003dafc: 00832023 subu a0,a0,v1 +8003db00: 02508004 sllv s0,s0,s2 +8003db04: 00912006 srlv a0,s1,a0 +8003db08: 00908025 or s0,a0,s0 +8003db0c: 02519004 sllv s2,s1,s2 +8003db10: 2405fc02 li a1,-1022 +8003db14: 00a3a823 subu s5,a1,v1 +8003db18: 00009821 move s3,zero +8003db1c: 1000ff7d b 8003d914 <__divdf3+0x80> +8003db20: 0000f021 move s8,zero +8003db24: 02263025 or a2,s1,a2 +8003db28: 14c00008 bnez a2,8003db4c <__divdf3+0x2b8> +8003db2c: 00000000 nop +8003db30: 00008821 move s1,zero +8003db34: 00001821 move v1,zero +8003db38: 1000ff88 b 8003d95c <__divdf3+0xc8> +8003db3c: 24020002 li v0,2 +8003db40: 00008821 move s1,zero +8003db44: 1000ff85 b 8003d95c <__divdf3+0xc8> +8003db48: 24020001 li v0,1 +8003db4c: 1000ff83 b 8003d95c <__divdf3+0xc8> +8003db50: 24020003 li v0,3 +8003db54: 00008021 move s0,zero +8003db58: 00009021 move s2,zero +8003db5c: 1000ff6d b 8003d914 <__divdf3+0x80> +8003db60: 241e0001 li s8,1 +8003db64: 2413000c li s3,12 +8003db68: 1000ff6a b 8003d914 <__divdf3+0x80> +8003db6c: 241e0003 li s8,3 +8003db70: 3c100007 lui s0,0x7 +8003db74: 3610ffff ori s0,s0,0xffff +8003db78: 2412ffff li s2,-1 +8003db7c: 0000b821 move s7,zero +8003db80: 3c05000f lui a1,0xf +8003db84: 34a5ffff ori a1,a1,0xffff +8003db88: 02052824 and a1,s0,a1 +8003db8c: 02e02021 move a0,s7 +8003db90: 1000ffa7 b 8003da30 <__divdf3+0x19c> +8003db94: 240307ff li v1,2047 +8003db98: 0230102b sltu v0,s1,s0 +8003db9c: 1440002d bnez v0,8003dc54 <__divdf3+0x3c0> +8003dba0: 00121042 srl v0,s2,0x1 +8003dba4: 12110028 beq s0,s1,8003dc48 <__divdf3+0x3b4> +8003dba8: 0243102b sltu v0,s2,v1 +8003dbac: 02403021 move a2,s2 +8003dbb0: 24a5ffff addiu a1,a1,-1 +8003dbb4: 1000002b b 8003dc64 <__divdf3+0x3d0> +8003dbb8: 00009021 move s2,zero +8003dbbc: 02118825 or s1,s0,s1 +8003dbc0: 3c050008 lui a1,0x8 +8003dbc4: 02258824 and s1,s1,a1 +8003dbc8: 162000b8 bnez s1,8003deac <__divdf3+0x618> +8003dbcc: 00000000 nop +8003dbd0: 24a5ffff addiu a1,a1,-1 +8003dbd4: 02058024 and s0,s0,a1 +8003dbd8: 02501025 or v0,s2,s0 +8003dbdc: 1440ffe8 bnez v0,8003db80 <__divdf3+0x2ec> +8003dbe0: 00000000 nop +8003dbe4: 3c050007 lui a1,0x7 +8003dbe8: 00002021 move a0,zero +8003dbec: 240307ff li v1,2047 +8003dbf0: 34a5ffff ori a1,a1,0xffff +8003dbf4: 1000ff8e b 8003da30 <__divdf3+0x19c> +8003dbf8: 2412ffff li s2,-1 +8003dbfc: 2442ffd8 addiu v0,v0,-40 +8003dc00: 00468804 sllv s1,a2,v0 +8003dc04: 1000ff81 b 8003da0c <__divdf3+0x178> +8003dc08: 00001821 move v1,zero +8003dc0c: 0c00a2d8 jal 80028b60 <__clzsi2> +8003dc10: afa60010 sw a2,16(sp) +8003dc14: 8fa60010 lw a2,16(sp) +8003dc18: 1000ff71 b 8003d9e0 <__divdf3+0x14c> +8003dc1c: 24420020 addiu v0,v0,32 +8003dc20: 2442ffd8 addiu v0,v0,-40 +8003dc24: 00518004 sllv s0,s1,v0 +8003dc28: 1000ffb9 b 8003db10 <__divdf3+0x27c> +8003dc2c: 00009021 move s2,zero +8003dc30: 0c00a2d8 jal 80028b60 <__clzsi2> +8003dc34: 00000000 nop +8003dc38: 8fa70014 lw a3,20(sp) +8003dc3c: 8fa60010 lw a2,16(sp) +8003dc40: 1000ffa9 b 8003dae8 <__divdf3+0x254> +8003dc44: 24420020 addiu v0,v0,32 +8003dc48: 1440ffd9 bnez v0,8003dbb0 <__divdf3+0x31c> +8003dc4c: 02403021 move a2,s2 +8003dc50: 00121042 srl v0,s2,0x1 +8003dc54: 001037c0 sll a2,s0,0x1f +8003dc58: 00c23025 or a2,a2,v0 +8003dc5c: 00108042 srl s0,s0,0x1 +8003dc60: 001297c0 sll s2,s2,0x1f +8003dc64: 00032602 srl a0,v1,0x18 +8003dc68: 00118a00 sll s1,s1,0x8 +8003dc6c: 02248825 or s1,s1,a0 +8003dc70: 00115402 srl t2,s1,0x10 +8003dc74: 15400002 bnez t2,8003dc80 <__divdf3+0x3ec> +8003dc78: 020a001b divu zero,s0,t2 +8003dc7c: 0007000d break 0x7 +8003dc80: 322bffff andi t3,s1,0xffff +8003dc84: 00064c02 srl t1,a2,0x10 +8003dc88: 00001012 mflo v0 +8003dc8c: 00006010 mfhi t4 +8003dc90: 000c6400 sll t4,t4,0x10 +8003dc94: 012c4025 or t0,t1,t4 +8003dc98: 01620018 mult t3,v0 +8003dc9c: 00008012 mflo s0 +8003dca0: 0110202b sltu a0,t0,s0 +8003dca4: 1080000a beqz a0,8003dcd0 <__divdf3+0x43c> +8003dca8: 00031a00 sll v1,v1,0x8 +8003dcac: 01114021 addu t0,t0,s1 +8003dcb0: 0111202b sltu a0,t0,s1 +8003dcb4: 148000b0 bnez a0,8003df78 <__divdf3+0x6e4> +8003dcb8: 2449ffff addiu t1,v0,-1 +8003dcbc: 0110202b sltu a0,t0,s0 +8003dcc0: 108000ad beqz a0,8003df78 <__divdf3+0x6e4> +8003dcc4: 00000000 nop +8003dcc8: 2442fffe addiu v0,v0,-2 +8003dccc: 01114021 addu t0,t0,s1 +8003dcd0: 01104023 subu t0,t0,s0 +8003dcd4: 15400002 bnez t2,8003dce0 <__divdf3+0x44c> +8003dcd8: 010a001b divu zero,t0,t2 +8003dcdc: 0007000d break 0x7 +8003dce0: 30c6ffff andi a2,a2,0xffff +8003dce4: 00008012 mflo s0 +8003dce8: 00004010 mfhi t0 +8003dcec: 00084400 sll t0,t0,0x10 +8003dcf0: 00c82025 or a0,a2,t0 +8003dcf4: 01700018 mult t3,s0 +8003dcf8: 00006012 mflo t4 +8003dcfc: 008c302b sltu a2,a0,t4 +8003dd00: 10c0000a beqz a2,8003dd2c <__divdf3+0x498> +8003dd04: 00000000 nop +8003dd08: 00912021 addu a0,a0,s1 +8003dd0c: 0091302b sltu a2,a0,s1 +8003dd10: 14c00097 bnez a2,8003df70 <__divdf3+0x6dc> +8003dd14: 2608ffff addiu t0,s0,-1 +8003dd18: 008c302b sltu a2,a0,t4 +8003dd1c: 10c00094 beqz a2,8003df70 <__divdf3+0x6dc> +8003dd20: 00000000 nop +8003dd24: 2610fffe addiu s0,s0,-2 +8003dd28: 00912021 addu a0,a0,s1 +8003dd2c: 00021400 sll v0,v0,0x10 +8003dd30: 00508025 or s0,v0,s0 +8003dd34: 02030019 multu s0,v1 +8003dd38: 008c2023 subu a0,a0,t4 +8003dd3c: 00004810 mfhi t1 +8003dd40: 0089102b sltu v0,a0,t1 +8003dd44: 00004012 mflo t0 +8003dd48: 14400049 bnez v0,8003de70 <__divdf3+0x5dc> +8003dd4c: 01206021 move t4,t1 +8003dd50: 10890045 beq a0,t1,8003de68 <__divdf3+0x5d4> +8003dd54: 0248102b sltu v0,s2,t0 +8003dd58: 00892023 subu a0,a0,t1 +8003dd5c: 02484023 subu t0,s2,t0 +8003dd60: 0248902b sltu s2,s2,t0 +8003dd64: 00922023 subu a0,a0,s2 +8003dd68: 122400af beq s1,a0,8003e028 <__divdf3+0x794> +8003dd6c: 00081402 srl v0,t0,0x10 +8003dd70: 15400002 bnez t2,8003dd7c <__divdf3+0x4e8> +8003dd74: 008a001b divu zero,a0,t2 +8003dd78: 0007000d break 0x7 +8003dd7c: 00002012 mflo a0 +8003dd80: 00003010 mfhi a2 +8003dd84: 00063400 sll a2,a2,0x10 +8003dd88: 00463025 or a2,v0,a2 +8003dd8c: 01640018 mult t3,a0 +8003dd90: 00009012 mflo s2 +8003dd94: 00d2102b sltu v0,a2,s2 +8003dd98: 1040000a beqz v0,8003ddc4 <__divdf3+0x530> +8003dd9c: 00000000 nop +8003dda0: 00d13021 addu a2,a2,s1 +8003dda4: 00d1102b sltu v0,a2,s1 +8003dda8: 144000a1 bnez v0,8003e030 <__divdf3+0x79c> +8003ddac: 2489ffff addiu t1,a0,-1 +8003ddb0: 00d2102b sltu v0,a2,s2 +8003ddb4: 1040009e beqz v0,8003e030 <__divdf3+0x79c> +8003ddb8: 00000000 nop +8003ddbc: 2484fffe addiu a0,a0,-2 +8003ddc0: 00d13021 addu a2,a2,s1 +8003ddc4: 00d23023 subu a2,a2,s2 +8003ddc8: 15400002 bnez t2,8003ddd4 <__divdf3+0x540> +8003ddcc: 00ca001b divu zero,a2,t2 +8003ddd0: 0007000d break 0x7 +8003ddd4: 3109ffff andi t1,t0,0xffff +8003ddd8: 00005012 mflo t2 +8003dddc: 00003010 mfhi a2 +8003dde0: 00063400 sll a2,a2,0x10 +8003dde4: 01264025 or t0,t1,a2 +8003dde8: 016a0018 mult t3,t2 +8003ddec: 00005812 mflo t3 +8003ddf0: 010b102b sltu v0,t0,t3 +8003ddf4: 1040000a beqz v0,8003de20 <__divdf3+0x58c> +8003ddf8: 00000000 nop +8003ddfc: 01114021 addu t0,t0,s1 +8003de00: 0111102b sltu v0,t0,s1 +8003de04: 1440008c bnez v0,8003e038 <__divdf3+0x7a4> +8003de08: 2546ffff addiu a2,t2,-1 +8003de0c: 010b102b sltu v0,t0,t3 +8003de10: 10400089 beqz v0,8003e038 <__divdf3+0x7a4> +8003de14: 00000000 nop +8003de18: 254afffe addiu t2,t2,-2 +8003de1c: 01114021 addu t0,t0,s1 +8003de20: 00042400 sll a0,a0,0x10 +8003de24: 008a9025 or s2,a0,t2 +8003de28: 00720019 multu v1,s2 +8003de2c: 010b4023 subu t0,t0,t3 +8003de30: 00006810 mfhi t5 +8003de34: 010d202b sltu a0,t0,t5 +8003de38: 00006012 mflo t4 +8003de3c: 00003012 mflo a2 +8003de40: 1080003e beqz a0,8003df3c <__divdf3+0x6a8> +8003de44: 01a01021 move v0,t5 +8003de48: 02284021 addu t0,s1,t0 +8003de4c: 0111482b sltu t1,t0,s1 +8003de50: 1120007b beqz t1,8003e040 <__divdf3+0x7ac> +8003de54: 2644ffff addiu a0,s2,-1 +8003de58: 1102004d beq t0,v0,8003df90 <__divdf3+0x6fc> +8003de5c: 00809021 move s2,a0 +8003de60: 10000017 b 8003dec0 <__divdf3+0x62c> +8003de64: 36520001 ori s2,s2,0x1 +8003de68: 10400050 beqz v0,8003dfac <__divdf3+0x718> +8003de6c: 00000000 nop +8003de70: 02439021 addu s2,s2,v1 +8003de74: 0243302b sltu a2,s2,v1 +8003de78: 00d11021 addu v0,a2,s1 +8003de7c: 00442021 addu a0,v0,a0 +8003de80: 0224102b sltu v0,s1,a0 +8003de84: 10400033 beqz v0,8003df54 <__divdf3+0x6c0> +8003de88: 260dffff addiu t5,s0,-1 +8003de8c: 0089102b sltu v0,a0,t1 +8003de90: 1440007b bnez v0,8003e080 <__divdf3+0x7ec> +8003de94: 00000000 nop +8003de98: 11840041 beq t4,a0,8003dfa0 <__divdf3+0x70c> +8003de9c: 0248102b sltu v0,s2,t0 +8003dea0: 00892023 subu a0,a0,t1 +8003dea4: 1000ffad b 8003dd5c <__divdf3+0x4c8> +8003dea8: 01a08021 move s0,t5 +8003deac: 24b0ffff addiu s0,a1,-1 +8003deb0: 2412ffff li s2,-1 +8003deb4: 1000ff32 b 8003db80 <__divdf3+0x2ec> +8003deb8: 0000b821 move s7,zero +8003debc: 02e03821 move a3,s7 +8003dec0: 24a303ff addiu v1,a1,1023 +8003dec4: 1860003b blez v1,8003dfb4 <__divdf3+0x720> +8003dec8: 00000000 nop +8003decc: 32420007 andi v0,s2,0x7 +8003ded0: 10400009 beqz v0,8003def8 <__divdf3+0x664> +8003ded4: 3c020100 lui v0,0x100 +8003ded8: 3242000f andi v0,s2,0xf +8003dedc: 24040004 li a0,4 +8003dee0: 10440004 beq v0,a0,8003def4 <__divdf3+0x660> +8003dee4: 26420004 addiu v0,s2,4 +8003dee8: 0052902b sltu s2,v0,s2 +8003deec: 02128021 addu s0,s0,s2 +8003def0: 00409021 move s2,v0 +8003def4: 3c020100 lui v0,0x100 +8003def8: 02021024 and v0,s0,v0 +8003defc: 10400006 beqz v0,8003df18 <__divdf3+0x684> +8003df00: 286207ff slti v0,v1,2047 +8003df04: 3c02feff lui v0,0xfeff +8003df08: 3442ffff ori v0,v0,0xffff +8003df0c: 02028024 and s0,s0,v0 +8003df10: 24a30400 addiu v1,a1,1024 +8003df14: 286207ff slti v0,v1,2047 +8003df18: 1040fec1 beqz v0,8003da20 <__divdf3+0x18c> +8003df1c: 00101740 sll v0,s0,0x1d +8003df20: 001290c2 srl s2,s2,0x3 +8003df24: 00108240 sll s0,s0,0x9 +8003df28: 00529025 or s2,v0,s2 +8003df2c: 00102b02 srl a1,s0,0xc +8003df30: 306307ff andi v1,v1,0x7ff +8003df34: 1000febe b 8003da30 <__divdf3+0x19c> +8003df38: 30e40001 andi a0,a3,0x1 +8003df3c: 150dffc8 bne t0,t5,8003de60 <__divdf3+0x5cc> +8003df40: 00000000 nop +8003df44: 1180ffde beqz t4,8003dec0 <__divdf3+0x62c> +8003df48: 02284021 addu t0,s1,t0 +8003df4c: 1000ffc0 b 8003de50 <__divdf3+0x5bc> +8003df50: 0111482b sltu t1,t0,s1 +8003df54: 1624ffd2 bne s1,a0,8003dea0 <__divdf3+0x60c> +8003df58: 00000000 nop +8003df5c: 10c0ffcc beqz a2,8003de90 <__divdf3+0x5fc> +8003df60: 0089102b sltu v0,a0,t1 +8003df64: 02292023 subu a0,s1,t1 +8003df68: 1000ff7c b 8003dd5c <__divdf3+0x4c8> +8003df6c: 01a08021 move s0,t5 +8003df70: 1000ff6e b 8003dd2c <__divdf3+0x498> +8003df74: 01008021 move s0,t0 +8003df78: 1000ff55 b 8003dcd0 <__divdf3+0x43c> +8003df7c: 01201021 move v0,t1 +8003df80: 006c602b sltu t4,v1,t4 +8003df84: 15800045 bnez t4,8003e09c <__divdf3+0x808> +8003df88: 00034840 sll t1,v1,0x1 +8003df8c: 00809021 move s2,a0 +8003df90: 1066ffcc beq v1,a2,8003dec4 <__divdf3+0x630> +8003df94: 24a303ff addiu v1,a1,1023 +8003df98: 1000ffca b 8003dec4 <__divdf3+0x630> +8003df9c: 36520001 ori s2,s2,0x1 +8003dfa0: 14400037 bnez v0,8003e080 <__divdf3+0x7ec> +8003dfa4: 00000000 nop +8003dfa8: 01a08021 move s0,t5 +8003dfac: 1000ff6b b 8003dd5c <__divdf3+0x4c8> +8003dfb0: 00002021 move a0,zero +8003dfb4: 1460002a bnez v1,8003e060 <__divdf3+0x7cc> +8003dfb8: 24020001 li v0,1 +8003dfbc: 24030020 li v1,32 +8003dfc0: 00621823 subu v1,v1,v0 +8003dfc4: 00702004 sllv a0,s0,v1 +8003dfc8: 00522806 srlv a1,s2,v0 +8003dfcc: 00721804 sllv v1,s2,v1 +8003dfd0: 0003182b sltu v1,zero,v1 +8003dfd4: 00852025 or a0,a0,a1 +8003dfd8: 00832025 or a0,a0,v1 +8003dfdc: 30830007 andi v1,a0,0x7 +8003dfe0: 10600008 beqz v1,8003e004 <__divdf3+0x770> +8003dfe4: 00501006 srlv v0,s0,v0 +8003dfe8: 3083000f andi v1,a0,0xf +8003dfec: 24050004 li a1,4 +8003dff0: 10650004 beq v1,a1,8003e004 <__divdf3+0x770> +8003dff4: 00801821 move v1,a0 +8003dff8: 24640004 addiu a0,v1,4 +8003dffc: 0083182b sltu v1,a0,v1 +8003e000: 00431021 addu v0,v0,v1 +8003e004: 3c030080 lui v1,0x80 +8003e008: 00431824 and v1,v0,v1 +8003e00c: 1060002a beqz v1,8003e0b8 <__divdf3+0x824> +8003e010: 00000000 nop +8003e014: 24030001 li v1,1 +8003e018: 00002821 move a1,zero +8003e01c: 00009021 move s2,zero +8003e020: 1000fe83 b 8003da30 <__divdf3+0x19c> +8003e024: 30e40001 andi a0,a3,0x1 +8003e028: 1000ffa5 b 8003dec0 <__divdf3+0x62c> +8003e02c: 2412ffff li s2,-1 +8003e030: 1000ff64 b 8003ddc4 <__divdf3+0x530> +8003e034: 01202021 move a0,t1 +8003e038: 1000ff79 b 8003de20 <__divdf3+0x58c> +8003e03c: 00c05021 move t2,a2 +8003e040: 010d482b sltu t1,t0,t5 +8003e044: 15200014 bnez t1,8003e098 <__divdf3+0x804> +8003e048: 00000000 nop +8003e04c: 1048ffcc beq v0,t0,8003df80 <__divdf3+0x6ec> +8003e050: 00000000 nop +8003e054: 00809021 move s2,a0 +8003e058: 1000ff99 b 8003dec0 <__divdf3+0x62c> +8003e05c: 36520001 ori s2,s2,0x1 +8003e060: 00431023 subu v0,v0,v1 +8003e064: 28440039 slti a0,v0,57 +8003e068: 1480001c bnez a0,8003e0dc <__divdf3+0x848> +8003e06c: 30e40001 andi a0,a3,0x1 +8003e070: 00001821 move v1,zero +8003e074: 00002821 move a1,zero +8003e078: 1000fe6d b 8003da30 <__divdf3+0x19c> +8003e07c: 00009021 move s2,zero +8003e080: 02439021 addu s2,s2,v1 +8003e084: 0243302b sltu a2,s2,v1 +8003e088: 00d13021 addu a2,a2,s1 +8003e08c: 00c42021 addu a0,a2,a0 +8003e090: 1000ff31 b 8003dd58 <__divdf3+0x4c4> +8003e094: 2610fffe addiu s0,s0,-2 +8003e098: 00034840 sll t1,v1,0x1 +8003e09c: 0123182b sltu v1,t1,v1 +8003e0a0: 00718821 addu s1,v1,s1 +8003e0a4: 2644fffe addiu a0,s2,-2 +8003e0a8: 01114021 addu t0,t0,s1 +8003e0ac: 1000ff6a b 8003de58 <__divdf3+0x5c4> +8003e0b0: 01201821 move v1,t1 +8003e0b4: 00602021 move a0,v1 +8003e0b8: 00022a40 sll a1,v0,0x9 +8003e0bc: 00052b02 srl a1,a1,0xc +8003e0c0: 00021740 sll v0,v0,0x1d +8003e0c4: 00801821 move v1,a0 +8003e0c8: 000318c2 srl v1,v1,0x3 +8003e0cc: 00629025 or s2,v1,v0 +8003e0d0: 30e40001 andi a0,a3,0x1 +8003e0d4: 1000fe56 b 8003da30 <__divdf3+0x19c> +8003e0d8: 00001821 move v1,zero +8003e0dc: 28440020 slti a0,v0,32 +8003e0e0: 1480ffb6 bnez a0,8003dfbc <__divdf3+0x728> +8003e0e4: 2404ffe1 li a0,-31 +8003e0e8: 00831823 subu v1,a0,v1 +8003e0ec: 24040020 li a0,32 +8003e0f0: 1044000f beq v0,a0,8003e130 <__divdf3+0x89c> +8003e0f4: 00701806 srlv v1,s0,v1 +8003e0f8: 00021023 negu v0,v0 +8003e0fc: 00501004 sllv v0,s0,v0 +8003e100: 00521025 or v0,v0,s2 +8003e104: 0002102b sltu v0,zero,v0 +8003e108: 00621825 or v1,v1,v0 +8003e10c: 30620007 andi v0,v1,0x7 +8003e110: 1040ffed beqz v0,8003e0c8 <__divdf3+0x834> +8003e114: 00002821 move a1,zero +8003e118: 3062000f andi v0,v1,0xf +8003e11c: 24040004 li a0,4 +8003e120: 1044ffe4 beq v0,a0,8003e0b4 <__divdf3+0x820> +8003e124: 00001021 move v0,zero +8003e128: 1000ffb4 b 8003dffc <__divdf3+0x768> +8003e12c: 24640004 addiu a0,v1,4 +8003e130: 1000fff3 b 8003e100 <__divdf3+0x86c> +8003e134: 00001021 move v0,zero +8003e138: 3c050007 lui a1,0x7 +8003e13c: 34a5ffff ori a1,a1,0xffff +8003e140: 02058024 and s0,s0,a1 +8003e144: 1000fea5 b 8003dbdc <__divdf3+0x348> +8003e148: 02501025 or v0,s2,s0 + +8003e14c <__muldf3>: +8003e14c: 27bdffc0 addiu sp,sp,-64 +8003e150: 00054502 srl t0,a1,0x14 +8003e154: afb20020 sw s2,32(sp) +8003e158: afb1001c sw s1,28(sp) +8003e15c: 00809021 move s2,a0 +8003e160: 00808821 move s1,a0 +8003e164: 3c04000f lui a0,0xf +8003e168: afb70034 sw s7,52(sp) +8003e16c: afb40028 sw s4,40(sp) +8003e170: 3484ffff ori a0,a0,0xffff +8003e174: 0005a7c2 srl s4,a1,0x1f +8003e178: 311707ff andi s7,t0,0x7ff +8003e17c: afb60030 sw s6,48(sp) +8003e180: afb5002c sw s5,44(sp) +8003e184: afbf003c sw ra,60(sp) +8003e188: afbe0038 sw s8,56(sp) +8003e18c: afb30024 sw s3,36(sp) +8003e190: afb00018 sw s0,24(sp) +8003e194: 0085b024 and s6,a0,a1 +8003e198: 12e00072 beqz s7,8003e364 <__muldf3+0x218> +8003e19c: 0280a821 move s5,s4 +8003e1a0: 240207ff li v0,2047 +8003e1a4: 12e20029 beq s7,v0,8003e24c <__muldf3+0x100> +8003e1a8: 3c040010 lui a0,0x10 +8003e1ac: 02c42825 or a1,s6,a0 +8003e1b0: 000520c0 sll a0,a1,0x3 +8003e1b4: 00122f42 srl a1,s2,0x1d +8003e1b8: 001288c0 sll s1,s2,0x3 +8003e1bc: 00a4b025 or s6,a1,a0 +8003e1c0: 26f7fc01 addiu s7,s7,-1023 +8003e1c4: 00009021 move s2,zero +8003e1c8: 0000f021 move s8,zero +8003e1cc: 00074d02 srl t1,a3,0x14 +8003e1d0: 3c10000f lui s0,0xf +8003e1d4: 3610ffff ori s0,s0,0xffff +8003e1d8: 312807ff andi t0,t1,0x7ff +8003e1dc: 00c02021 move a0,a2 +8003e1e0: 02078024 and s0,s0,a3 +8003e1e4: 11000028 beqz t0,8003e288 <__muldf3+0x13c> +8003e1e8: 00079fc2 srl s3,a3,0x1f +8003e1ec: 240207ff li v0,2047 +8003e1f0: 11020076 beq t0,v0,8003e3cc <__muldf3+0x280> +8003e1f4: 3c020010 lui v0,0x10 +8003e1f8: 02028025 or s0,s0,v0 +8003e1fc: 001080c0 sll s0,s0,0x3 +8003e200: 00061742 srl v0,a2,0x1d +8003e204: 00508025 or s0,v0,s0 +8003e208: 000620c0 sll a0,a2,0x3 +8003e20c: 2508fc01 addiu t0,t0,-1023 +8003e210: 00001021 move v0,zero +8003e214: 00523025 or a2,v0,s2 +8003e218: 02e84021 addu t0,s7,t0 +8003e21c: 2cc50010 sltiu a1,a2,16 +8003e220: 02931826 xor v1,s4,s3 +8003e224: 10a00092 beqz a1,8003e470 <__muldf3+0x324> +8003e228: 25070001 addiu a3,t0,1 +8003e22c: 3c098004 lui t1,0x8004 +8003e230: 00063080 sll a2,a2,0x2 +8003e234: 252900bc addiu t1,t1,188 +8003e238: 01263021 addu a2,t1,a2 +8003e23c: 8cc50000 lw a1,0(a2) +8003e240: 00000000 nop +8003e244: 00a00008 jr a1 +8003e248: 00000000 nop +8003e24c: 02d29025 or s2,s6,s2 +8003e250: 16400072 bnez s2,8003e41c <__muldf3+0x2d0> +8003e254: 2412000c li s2,12 +8003e258: 00074d02 srl t1,a3,0x14 +8003e25c: 3c10000f lui s0,0xf +8003e260: 3610ffff ori s0,s0,0xffff +8003e264: 312807ff andi t0,t1,0x7ff +8003e268: 24120008 li s2,8 +8003e26c: 0000b021 move s6,zero +8003e270: 00008821 move s1,zero +8003e274: 241e0002 li s8,2 +8003e278: 00c02021 move a0,a2 +8003e27c: 02078024 and s0,s0,a3 +8003e280: 1500ffda bnez t0,8003e1ec <__muldf3+0xa0> +8003e284: 00079fc2 srl s3,a3,0x1f +8003e288: 02061025 or v0,s0,a2 +8003e28c: 1040005a beqz v0,8003e3f8 <__muldf3+0x2ac> +8003e290: 00002021 move a0,zero +8003e294: 120000db beqz s0,8003e604 <__muldf3+0x4b8> +8003e298: 00c02021 move a0,a2 +8003e29c: 02002021 move a0,s0 +8003e2a0: 0c00a2d8 jal 80028b60 <__clzsi2> +8003e2a4: afa60010 sw a2,16(sp) +8003e2a8: 8fa60010 lw a2,16(sp) +8003e2ac: 2448fff5 addiu t0,v0,-11 +8003e2b0: 2903001d slti v1,t0,29 +8003e2b4: 106000cf beqz v1,8003e5f4 <__muldf3+0x4a8> +8003e2b8: 2403001d li v1,29 +8003e2bc: 2444fff8 addiu a0,v0,-8 +8003e2c0: 00681823 subu v1,v1,t0 +8003e2c4: 00908004 sllv s0,s0,a0 +8003e2c8: 00661806 srlv v1,a2,v1 +8003e2cc: 00708025 or s0,v1,s0 +8003e2d0: 00862004 sllv a0,a2,a0 +8003e2d4: 2406fc02 li a2,-1022 +8003e2d8: 00c84023 subu t0,a2,t0 +8003e2dc: 1000ffcd b 8003e214 <__muldf3+0xc8> +8003e2e0: 00001021 move v0,zero +8003e2e4: 02601821 move v1,s3 +8003e2e8: 24050002 li a1,2 +8003e2ec: 1045003e beq v0,a1,8003e3e8 <__muldf3+0x29c> +8003e2f0: 24050003 li a1,3 +8003e2f4: 10450113 beq v0,a1,8003e744 <__muldf3+0x5f8> +8003e2f8: 3c050007 lui a1,0x7 +8003e2fc: 24050001 li a1,1 +8003e300: 1445008d bne v0,a1,8003e538 <__muldf3+0x3ec> +8003e304: 00e04021 move t0,a3 +8003e308: 00008021 move s0,zero +8003e30c: 00002021 move a0,zero +8003e310: 00008821 move s1,zero +8003e314: 00101500 sll v0,s0,0x14 +8003e318: 3c10000f lui s0,0xf +8003e31c: 3610ffff ori s0,s0,0xffff +8003e320: 8fbf003c lw ra,60(sp) +8003e324: 00908024 and s0,a0,s0 +8003e328: 02028025 or s0,s0,v0 +8003e32c: 00031fc0 sll v1,v1,0x1f +8003e330: 02031825 or v1,s0,v1 +8003e334: 02201021 move v0,s1 +8003e338: 8fbe0038 lw s8,56(sp) +8003e33c: 8fb70034 lw s7,52(sp) +8003e340: 8fb60030 lw s6,48(sp) +8003e344: 8fb5002c lw s5,44(sp) +8003e348: 8fb40028 lw s4,40(sp) +8003e34c: 8fb30024 lw s3,36(sp) +8003e350: 8fb20020 lw s2,32(sp) +8003e354: 8fb1001c lw s1,28(sp) +8003e358: 8fb00018 lw s0,24(sp) +8003e35c: 03e00008 jr ra +8003e360: 27bd0040 addiu sp,sp,64 +8003e364: 02d21025 or v0,s6,s2 +8003e368: 10400028 beqz v0,8003e40c <__muldf3+0x2c0> +8003e36c: 00008821 move s1,zero +8003e370: afa70014 sw a3,20(sp) +8003e374: 12c000ab beqz s6,8003e624 <__muldf3+0x4d8> +8003e378: afa60010 sw a2,16(sp) +8003e37c: 0c00a2d8 jal 80028b60 <__clzsi2> +8003e380: 02c02021 move a0,s6 +8003e384: 8fa60010 lw a2,16(sp) +8003e388: 8fa70014 lw a3,20(sp) +8003e38c: 2443fff5 addiu v1,v0,-11 +8003e390: 2864001d slti a0,v1,29 +8003e394: 108000a0 beqz a0,8003e618 <__muldf3+0x4cc> +8003e398: 2445ffd8 addiu a1,v0,-40 +8003e39c: 2408001d li t0,29 +8003e3a0: 2451fff8 addiu s1,v0,-8 +8003e3a4: 01034023 subu t0,t0,v1 +8003e3a8: 02362804 sllv a1,s6,s1 +8003e3ac: 01124006 srlv t0,s2,t0 +8003e3b0: 0105b025 or s6,t0,a1 +8003e3b4: 02328804 sllv s1,s2,s1 +8003e3b8: 2408fc02 li t0,-1022 +8003e3bc: 0103b823 subu s7,t0,v1 +8003e3c0: 00009021 move s2,zero +8003e3c4: 1000ff81 b 8003e1cc <__muldf3+0x80> +8003e3c8: 0000f021 move s8,zero +8003e3cc: 02063025 or a2,s0,a2 +8003e3d0: 14c0000c bnez a2,8003e404 <__muldf3+0x2b8> +8003e3d4: 00000000 nop +8003e3d8: 00008021 move s0,zero +8003e3dc: 00002021 move a0,zero +8003e3e0: 1000ff8c b 8003e214 <__muldf3+0xc8> +8003e3e4: 24020002 li v0,2 +8003e3e8: 241007ff li s0,2047 +8003e3ec: 00002021 move a0,zero +8003e3f0: 1000ffc8 b 8003e314 <__muldf3+0x1c8> +8003e3f4: 00008821 move s1,zero +8003e3f8: 00008021 move s0,zero +8003e3fc: 1000ff85 b 8003e214 <__muldf3+0xc8> +8003e400: 24020001 li v0,1 +8003e404: 1000ff83 b 8003e214 <__muldf3+0xc8> +8003e408: 24020003 li v0,3 +8003e40c: 24120004 li s2,4 +8003e410: 0000b021 move s6,zero +8003e414: 1000ff6d b 8003e1cc <__muldf3+0x80> +8003e418: 241e0001 li s8,1 +8003e41c: 1000ff6b b 8003e1cc <__muldf3+0x80> +8003e420: 241e0003 li s8,3 +8003e424: 3c100007 lui s0,0x7 +8003e428: 3605ffff ori a1,s0,0xffff +8003e42c: 2411ffff li s1,-1 +8003e430: 0000a821 move s5,zero +8003e434: 3c10000f lui s0,0xf +8003e438: 3610ffff ori s0,s0,0xffff +8003e43c: 00b02024 and a0,a1,s0 +8003e440: 32a30001 andi v1,s5,0x1 +8003e444: 1000ffb3 b 8003e314 <__muldf3+0x1c8> +8003e448: 241007ff li s0,2047 +8003e44c: 02c08021 move s0,s6 +8003e450: 02202021 move a0,s1 +8003e454: 1000ffa4 b 8003e2e8 <__muldf3+0x19c> +8003e458: 03c01021 move v0,s8 +8003e45c: 02c08021 move s0,s6 +8003e460: 02202021 move a0,s1 +8003e464: 02801821 move v1,s4 +8003e468: 1000ff9f b 8003e2e8 <__muldf3+0x19c> +8003e46c: 03c01021 move v0,s8 +8003e470: 02300019 multu s1,s0 +8003e474: 00007012 mflo t6 +8003e478: 00007810 mfhi t7 + ... +8003e484: 02240019 multu s1,a0 +8003e488: 00006012 mflo t4 +8003e48c: 00006810 mfhi t5 +8003e490: 01ae5021 addu t2,t5,t6 +8003e494: 014e102b sltu v0,t2,t6 +8003e498: 02160019 multu s0,s6 +8003e49c: 00008012 mflo s0 +8003e4a0: 01f03021 addu a2,t7,s0 +8003e4a4: 00464821 addu t1,v0,a2 +8003e4a8: 00008810 mfhi s1 +8003e4ac: 0122102b sltu v0,t1,v0 +8003e4b0: 00cf302b sltu a2,a2,t7 +8003e4b4: 00960019 multu a0,s6 +8003e4b8: 00c23025 or a2,a2,v0 +8003e4bc: 00d13021 addu a2,a2,s1 +8003e4c0: 3c020100 lui v0,0x100 +8003e4c4: 00002012 mflo a0 +8003e4c8: 01445021 addu t2,t2,a0 +8003e4cc: 0144802b sltu s0,t2,a0 +8003e4d0: 00002810 mfhi a1 +8003e4d4: 01254821 addu t1,t1,a1 +8003e4d8: 0209b021 addu s6,s0,t1 +8003e4dc: 02d0802b sltu s0,s6,s0 +8003e4e0: 0125482b sltu t1,t1,a1 +8003e4e4: 01308025 or s0,t1,s0 +8003e4e8: 00d08021 addu s0,a2,s0 +8003e4ec: 000a8a40 sll s1,t2,0x9 +8003e4f0: 00102a40 sll a1,s0,0x9 +8003e4f4: 022c8825 or s1,s1,t4 +8003e4f8: 001685c2 srl s0,s6,0x17 +8003e4fc: 0011202b sltu a0,zero,s1 +8003e500: 00b08025 or s0,a1,s0 +8003e504: 000a55c2 srl t2,t2,0x17 +8003e508: 008a5025 or t2,a0,t2 +8003e50c: 02021024 and v0,s0,v0 +8003e510: 00162240 sll a0,s6,0x9 +8003e514: 10400008 beqz v0,8003e538 <__muldf3+0x3ec> +8003e518: 01442025 or a0,t2,a0 +8003e51c: 00041042 srl v0,a0,0x1 +8003e520: 30840001 andi a0,a0,0x1 +8003e524: 00102fc0 sll a1,s0,0x1f +8003e528: 00442025 or a0,v0,a0 +8003e52c: 00a42025 or a0,a1,a0 +8003e530: 00108042 srl s0,s0,0x1 +8003e534: 00e04021 move t0,a3 +8003e538: 250203ff addiu v0,t0,1023 +8003e53c: 18400042 blez v0,8003e648 <__muldf3+0x4fc> +8003e540: 00000000 nop +8003e544: 30850007 andi a1,a0,0x7 +8003e548: 10a00009 beqz a1,8003e570 <__muldf3+0x424> +8003e54c: 3c050100 lui a1,0x100 +8003e550: 3085000f andi a1,a0,0xf +8003e554: 24060004 li a2,4 +8003e558: 10a60004 beq a1,a2,8003e56c <__muldf3+0x420> +8003e55c: 24850004 addiu a1,a0,4 +8003e560: 00a4202b sltu a0,a1,a0 +8003e564: 02048021 addu s0,s0,a0 +8003e568: 00a02021 move a0,a1 +8003e56c: 3c050100 lui a1,0x100 +8003e570: 02052824 and a1,s0,a1 +8003e574: 10a00006 beqz a1,8003e590 <__muldf3+0x444> +8003e578: 284507ff slti a1,v0,2047 +8003e57c: 3c02feff lui v0,0xfeff +8003e580: 3442ffff ori v0,v0,0xffff +8003e584: 02028024 and s0,s0,v0 +8003e588: 25020400 addiu v0,t0,1024 +8003e58c: 284507ff slti a1,v0,2047 +8003e590: 10a0ff95 beqz a1,8003e3e8 <__muldf3+0x29c> +8003e594: 00000000 nop +8003e598: 000420c2 srl a0,a0,0x3 +8003e59c: 00108f40 sll s1,s0,0x1d +8003e5a0: 00108240 sll s0,s0,0x9 +8003e5a4: 02248825 or s1,s1,a0 +8003e5a8: 00102302 srl a0,s0,0xc +8003e5ac: 1000ff59 b 8003e314 <__muldf3+0x1c8> +8003e5b0: 305007ff andi s0,v0,0x7ff +8003e5b4: 02d08025 or s0,s6,s0 +8003e5b8: 3c040008 lui a0,0x8 +8003e5bc: 02048024 and s0,s0,a0 +8003e5c0: 1600001e bnez s0,8003e63c <__muldf3+0x4f0> +8003e5c4: 2485ffff addiu a1,a0,-1 +8003e5c8: 2484ffff addiu a0,a0,-1 +8003e5cc: 02c42824 and a1,s6,a0 +8003e5d0: 02251025 or v0,s1,a1 +8003e5d4: 1440ff97 bnez v0,8003e434 <__muldf3+0x2e8> +8003e5d8: 00000000 nop +8003e5dc: 3c040007 lui a0,0x7 +8003e5e0: 00001821 move v1,zero +8003e5e4: 241007ff li s0,2047 +8003e5e8: 3484ffff ori a0,a0,0xffff +8003e5ec: 1000ff49 b 8003e314 <__muldf3+0x1c8> +8003e5f0: 2411ffff li s1,-1 +8003e5f4: 2442ffd8 addiu v0,v0,-40 +8003e5f8: 00468004 sllv s0,a2,v0 +8003e5fc: 1000ff35 b 8003e2d4 <__muldf3+0x188> +8003e600: 00002021 move a0,zero +8003e604: 0c00a2d8 jal 80028b60 <__clzsi2> +8003e608: afa60010 sw a2,16(sp) +8003e60c: 8fa60010 lw a2,16(sp) +8003e610: 1000ff26 b 8003e2ac <__muldf3+0x160> +8003e614: 24420020 addiu v0,v0,32 +8003e618: 00b2b004 sllv s6,s2,a1 +8003e61c: 1000ff66 b 8003e3b8 <__muldf3+0x26c> +8003e620: 00008821 move s1,zero +8003e624: 0c00a2d8 jal 80028b60 <__clzsi2> +8003e628: 02402021 move a0,s2 +8003e62c: 8fa70014 lw a3,20(sp) +8003e630: 8fa60010 lw a2,16(sp) +8003e634: 1000ff55 b 8003e38c <__muldf3+0x240> +8003e638: 24420020 addiu v0,v0,32 +8003e63c: 2411ffff li s1,-1 +8003e640: 1000ff7c b 8003e434 <__muldf3+0x2e8> +8003e644: 0000a821 move s5,zero +8003e648: 1440001b bnez v0,8003e6b8 <__muldf3+0x56c> +8003e64c: 24050001 li a1,1 +8003e650: 24020020 li v0,32 +8003e654: 00451023 subu v0,v0,a1 +8003e658: 00503004 sllv a2,s0,v0 +8003e65c: 00a43806 srlv a3,a0,a1 +8003e660: 00441004 sllv v0,a0,v0 +8003e664: 0002102b sltu v0,zero,v0 +8003e668: 00c73025 or a2,a2,a3 +8003e66c: 00c23025 or a2,a2,v0 +8003e670: 30c20007 andi v0,a2,0x7 +8003e674: 10400008 beqz v0,8003e698 <__muldf3+0x54c> +8003e678: 00b02806 srlv a1,s0,a1 +8003e67c: 30c2000f andi v0,a2,0xf +8003e680: 24040004 li a0,4 +8003e684: 10440004 beq v0,a0,8003e698 <__muldf3+0x54c> +8003e688: 00c01021 move v0,a2 +8003e68c: 24460004 addiu a2,v0,4 +8003e690: 00c2102b sltu v0,a2,v0 +8003e694: 00a22821 addu a1,a1,v0 +8003e698: 3c020080 lui v0,0x80 +8003e69c: 00a21024 and v0,a1,v0 +8003e6a0: 1040001d beqz v0,8003e718 <__muldf3+0x5cc> +8003e6a4: 00000000 nop +8003e6a8: 24100001 li s0,1 +8003e6ac: 00002021 move a0,zero +8003e6b0: 1000ff18 b 8003e314 <__muldf3+0x1c8> +8003e6b4: 00008821 move s1,zero +8003e6b8: 00a22823 subu a1,a1,v0 +8003e6bc: 28a60039 slti a2,a1,57 +8003e6c0: 10c0ff11 beqz a2,8003e308 <__muldf3+0x1bc> +8003e6c4: 28a60020 slti a2,a1,32 +8003e6c8: 14c0ffe1 bnez a2,8003e650 <__muldf3+0x504> +8003e6cc: 2406ffe1 li a2,-31 +8003e6d0: 00c21023 subu v0,a2,v0 +8003e6d4: 00503006 srlv a2,s0,v0 +8003e6d8: 24020020 li v0,32 +8003e6dc: 10a20003 beq a1,v0,8003e6ec <__muldf3+0x5a0> +8003e6e0: 00001021 move v0,zero +8003e6e4: 00051023 negu v0,a1 +8003e6e8: 00501004 sllv v0,s0,v0 +8003e6ec: 00441025 or v0,v0,a0 +8003e6f0: 0002102b sltu v0,zero,v0 +8003e6f4: 00c21025 or v0,a2,v0 +8003e6f8: 30450007 andi a1,v0,0x7 +8003e6fc: 14a0000b bnez a1,8003e72c <__muldf3+0x5e0> +8003e700: 00002021 move a0,zero +8003e704: 000210c2 srl v0,v0,0x3 +8003e708: 00a28825 or s1,a1,v0 +8003e70c: 1000ff01 b 8003e314 <__muldf3+0x1c8> +8003e710: 00008021 move s0,zero +8003e714: 00002821 move a1,zero +8003e718: 00052240 sll a0,a1,0x9 +8003e71c: 00042302 srl a0,a0,0xc +8003e720: 00052f40 sll a1,a1,0x1d +8003e724: 1000fff7 b 8003e704 <__muldf3+0x5b8> +8003e728: 00c01021 move v0,a2 +8003e72c: 3044000f andi a0,v0,0xf +8003e730: 24050004 li a1,4 +8003e734: 1085fff7 beq a0,a1,8003e714 <__muldf3+0x5c8> +8003e738: 00403021 move a2,v0 +8003e73c: 1000ffd3 b 8003e68c <__muldf3+0x540> +8003e740: 00002821 move a1,zero +8003e744: 34a5ffff ori a1,a1,0xffff +8003e748: 02052824 and a1,s0,a1 +8003e74c: 00851025 or v0,a0,a1 +8003e750: 00808821 move s1,a0 +8003e754: 1000ff9f b 8003e5d4 <__muldf3+0x488> +8003e758: 0060a821 move s5,v1 + +8003e75c <__subdf3>: +8003e75c: 3c08000f lui t0,0xf +8003e760: 3508ffff ori t0,t0,0xffff +8003e764: 01054824 and t1,t0,a1 +8003e768: 00075502 srl t2,a3,0x14 +8003e76c: 01074024 and t0,t0,a3 +8003e770: 27bdffd8 addiu sp,sp,-40 +8003e774: 00051502 srl v0,a1,0x14 +8003e778: 00046742 srl t4,a0,0x1d +8003e77c: 00065f42 srl t3,a2,0x1d +8003e780: 000948c0 sll t1,t1,0x3 +8003e784: 000840c0 sll t0,t0,0x3 +8003e788: 314a07ff andi t2,t2,0x7ff +8003e78c: 240307ff li v1,2047 +8003e790: 000420c0 sll a0,a0,0x3 +8003e794: afb10018 sw s1,24(sp) +8003e798: afb00014 sw s0,20(sp) +8003e79c: 305107ff andi s1,v0,0x7ff +8003e7a0: afbf0024 sw ra,36(sp) +8003e7a4: afb30020 sw s3,32(sp) +8003e7a8: afb2001c sw s2,28(sp) +8003e7ac: 000587c2 srl s0,a1,0x1f +8003e7b0: 012c1025 or v0,t1,t4 +8003e7b4: 00073fc2 srl a3,a3,0x1f +8003e7b8: 010b4025 or t0,t0,t3 +8003e7bc: 11430012 beq t2,v1,8003e808 <__subdf3+0xac> +8003e7c0: 000630c0 sll a2,a2,0x3 +8003e7c4: 38e70001 xori a3,a3,0x1 +8003e7c8: 10f00066 beq a3,s0,8003e964 <__subdf3+0x208> +8003e7cc: 022a2823 subu a1,s1,t2 +8003e7d0: 18a000d3 blez a1,8003eb20 <__subdf3+0x3c4> +8003e7d4: 00000000 nop +8003e7d8: 15400010 bnez t2,8003e81c <__subdf3+0xc0> +8003e7dc: 240307ff li v1,2047 +8003e7e0: 01061825 or v1,t0,a2 +8003e7e4: 10600085 beqz v1,8003e9fc <__subdf3+0x2a0> +8003e7e8: 240307ff li v1,2047 +8003e7ec: 24a5ffff addiu a1,a1,-1 +8003e7f0: 14a000ad bnez a1,8003eaa8 <__subdf3+0x34c> +8003e7f4: 00869023 subu s2,a0,a2 +8003e7f8: 00481023 subu v0,v0,t0 +8003e7fc: 0092202b sltu a0,a0,s2 +8003e800: 1000001a b 8003e86c <__subdf3+0x110> +8003e804: 00441023 subu v0,v0,a0 +8003e808: 01061825 or v1,t0,a2 +8003e80c: 1460ffee bnez v1,8003e7c8 <__subdf3+0x6c> +8003e810: 00000000 nop +8003e814: 1000ffec b 8003e7c8 <__subdf3+0x6c> +8003e818: 38e70001 xori a3,a3,0x1 +8003e81c: 122300a4 beq s1,v1,8003eab0 <__subdf3+0x354> +8003e820: 3c030080 lui v1,0x80 +8003e824: 01034025 or t0,t0,v1 +8003e828: 28a30039 slti v1,a1,57 +8003e82c: 106000e6 beqz v1,8003ebc8 <__subdf3+0x46c> +8003e830: 28a30020 slti v1,a1,32 +8003e834: 1060010a beqz v1,8003ec60 <__subdf3+0x504> +8003e838: 24070020 li a3,32 +8003e83c: 00e53823 subu a3,a3,a1 +8003e840: 00a69006 srlv s2,a2,a1 +8003e844: 00e81804 sllv v1,t0,a3 +8003e848: 00e63004 sllv a2,a2,a3 +8003e84c: 00721825 or v1,v1,s2 +8003e850: 0006902b sltu s2,zero,a2 +8003e854: 00729025 or s2,v1,s2 +8003e858: 00a84006 srlv t0,t0,a1 +8003e85c: 00929023 subu s2,a0,s2 +8003e860: 00484023 subu t0,v0,t0 +8003e864: 0092202b sltu a0,a0,s2 +8003e868: 01041023 subu v0,t0,a0 +8003e86c: 3c130080 lui s3,0x80 +8003e870: 00531824 and v1,v0,s3 +8003e874: 106000a6 beqz v1,8003eb10 <__subdf3+0x3b4> +8003e878: 32430007 andi v1,s2,0x7 +8003e87c: 2673ffff addiu s3,s3,-1 +8003e880: 00539824 and s3,v0,s3 +8003e884: 126000b9 beqz s3,8003eb6c <__subdf3+0x410> +8003e888: 00000000 nop +8003e88c: 0c00a2d8 jal 80028b60 <__clzsi2> +8003e890: 02602021 move a0,s3 +8003e894: 2446fff8 addiu a2,v0,-8 +8003e898: 28c30020 slti v1,a2,32 +8003e89c: 106000bb beqz v1,8003eb8c <__subdf3+0x430> +8003e8a0: 2442ffd8 addiu v0,v0,-40 +8003e8a4: 00061823 negu v1,a2 +8003e8a8: 00721806 srlv v1,s2,v1 +8003e8ac: 00d31004 sllv v0,s3,a2 +8003e8b0: 00629825 or s3,v1,v0 +8003e8b4: 00d1102a slt v0,a2,s1 +8003e8b8: 144000b8 bnez v0,8003eb9c <__subdf3+0x440> +8003e8bc: 00d29004 sllv s2,s2,a2 +8003e8c0: 00d13023 subu a2,a2,s1 +8003e8c4: 24c20001 addiu v0,a2,1 +8003e8c8: 28430020 slti v1,v0,32 +8003e8cc: 106000d9 beqz v1,8003ec34 <__subdf3+0x4d8> +8003e8d0: 24030020 li v1,32 +8003e8d4: 00621823 subu v1,v1,v0 +8003e8d8: 00522006 srlv a0,s2,v0 +8003e8dc: 00724004 sllv t0,s2,v1 +8003e8e0: 00731804 sllv v1,s3,v1 +8003e8e4: 00641825 or v1,v1,a0 +8003e8e8: 0008402b sltu t0,zero,t0 +8003e8ec: 00689025 or s2,v1,t0 +8003e8f0: 00531006 srlv v0,s3,v0 +8003e8f4: 32430007 andi v1,s2,0x7 +8003e8f8: 00008821 move s1,zero +8003e8fc: 10600043 beqz v1,8003ea0c <__subdf3+0x2b0> +8003e900: 3c030080 lui v1,0x80 +8003e904: 3243000f andi v1,s2,0xf +8003e908: 24040004 li a0,4 +8003e90c: 1064003e beq v1,a0,8003ea08 <__subdf3+0x2ac> +8003e910: 26430004 addiu v1,s2,4 +8003e914: 0072402b sltu t0,v1,s2 +8003e918: 00481021 addu v0,v0,t0 +8003e91c: 00609021 move s2,v1 +8003e920: 3c030080 lui v1,0x80 +8003e924: 00431824 and v1,v0,v1 +8003e928: 1460003b bnez v1,8003ea18 <__subdf3+0x2bc> +8003e92c: 00000000 nop +8003e930: 00021f40 sll v1,v0,0x1d +8003e934: 001240c2 srl t0,s2,0x3 +8003e938: 01034025 or t0,t0,v1 +8003e93c: 000218c2 srl v1,v0,0x3 +8003e940: 240207ff li v0,2047 +8003e944: 12220060 beq s1,v0,8003eac8 <__subdf3+0x36c> +8003e948: 00000000 nop +8003e94c: 3c06000f lui a2,0xf +8003e950: 34c6ffff ori a2,a2,0xffff +8003e954: 00662024 and a0,v1,a2 +8003e958: 322207ff andi v0,s1,0x7ff +8003e95c: 1000003c b 8003ea50 <__subdf3+0x2f4> +8003e960: 32030001 andi v1,s0,0x1 +8003e964: 022a1823 subu v1,s1,t2 +8003e968: 1860009f blez v1,8003ebe8 <__subdf3+0x48c> +8003e96c: 00000000 nop +8003e970: 11400046 beqz t2,8003ea8c <__subdf3+0x330> +8003e974: 01062825 or a1,t0,a2 +8003e978: 240507ff li a1,2047 +8003e97c: 122500e7 beq s1,a1,8003ed1c <__subdf3+0x5c0> +8003e980: 3c050080 lui a1,0x80 +8003e984: 01054025 or t0,t0,a1 +8003e988: 28650039 slti a1,v1,57 +8003e98c: 14a000e9 bnez a1,8003ed34 <__subdf3+0x5d8> +8003e990: 28650020 slti a1,v1,32 +8003e994: 01063025 or a2,t0,a2 +8003e998: 0006902b sltu s2,zero,a2 +8003e99c: 00004021 move t0,zero +8003e9a0: 02449021 addu s2,s2,a0 +8003e9a4: 01024021 addu t0,t0,v0 +8003e9a8: 0244202b sltu a0,s2,a0 +8003e9ac: 00881021 addu v0,a0,t0 +8003e9b0: 3c030080 lui v1,0x80 +8003e9b4: 00431824 and v1,v0,v1 +8003e9b8: 10600101 beqz v1,8003edc0 <__subdf3+0x664> +8003e9bc: 240307ff li v1,2047 +8003e9c0: 26310001 addiu s1,s1,1 +8003e9c4: 12230109 beq s1,v1,8003edec <__subdf3+0x690> +8003e9c8: 00000000 nop +8003e9cc: 3c03ff7f lui v1,0xff7f +8003e9d0: 3463ffff ori v1,v1,0xffff +8003e9d4: 00431024 and v0,v0,v1 +8003e9d8: 32480001 andi t0,s2,0x1 +8003e9dc: 00121842 srl v1,s2,0x1 +8003e9e0: 00684025 or t0,v1,t0 +8003e9e4: 000297c0 sll s2,v0,0x1f +8003e9e8: 02489025 or s2,s2,t0 +8003e9ec: 00021042 srl v0,v0,0x1 +8003e9f0: 32430007 andi v1,s2,0x7 +8003e9f4: 1000ffc1 b 8003e8fc <__subdf3+0x1a0> +8003e9f8: 00e08021 move s0,a3 +8003e9fc: 1223002d beq s1,v1,8003eab4 <__subdf3+0x358> +8003ea00: 00441825 or v1,v0,a0 +8003ea04: 00809021 move s2,a0 +8003ea08: 3c030080 lui v1,0x80 +8003ea0c: 00431824 and v1,v0,v1 +8003ea10: 1060ffc8 beqz v1,8003e934 <__subdf3+0x1d8> +8003ea14: 00021f40 sll v1,v0,0x1d +8003ea18: 26260001 addiu a2,s1,1 +8003ea1c: 240307ff li v1,2047 +8003ea20: 10c30065 beq a2,v1,8003ebb8 <__subdf3+0x45c> +8003ea24: 32030001 andi v1,s0,0x1 +8003ea28: 3c04ff7f lui a0,0xff7f +8003ea2c: 3484ffff ori a0,a0,0xffff +8003ea30: 00441024 and v0,v0,a0 +8003ea34: 00021f40 sll v1,v0,0x1d +8003ea38: 001240c2 srl t0,s2,0x3 +8003ea3c: 00021240 sll v0,v0,0x9 +8003ea40: 00684025 or t0,v1,t0 +8003ea44: 00022302 srl a0,v0,0xc +8003ea48: 32030001 andi v1,s0,0x1 +8003ea4c: 30c207ff andi v0,a2,0x7ff +8003ea50: 00023500 sll a2,v0,0x14 +8003ea54: 3c02000f lui v0,0xf +8003ea58: 3442ffff ori v0,v0,0xffff +8003ea5c: 8fbf0024 lw ra,36(sp) +8003ea60: 00821024 and v0,a0,v0 +8003ea64: 00461025 or v0,v0,a2 +8003ea68: 00031fc0 sll v1,v1,0x1f +8003ea6c: 00431825 or v1,v0,v1 +8003ea70: 8fb30020 lw s3,32(sp) +8003ea74: 8fb2001c lw s2,28(sp) +8003ea78: 8fb10018 lw s1,24(sp) +8003ea7c: 8fb00014 lw s0,20(sp) +8003ea80: 01001021 move v0,t0 +8003ea84: 03e00008 jr ra +8003ea88: 27bd0028 addiu sp,sp,40 +8003ea8c: 14a0009e bnez a1,8003ed08 <__subdf3+0x5ac> +8003ea90: 2463ffff addiu v1,v1,-1 +8003ea94: 240307ff li v1,2047 +8003ea98: 1623ffdb bne s1,v1,8003ea08 <__subdf3+0x2ac> +8003ea9c: 00809021 move s2,a0 +8003eaa0: 1000009f b 8003ed20 <__subdf3+0x5c4> +8003eaa4: 00441825 or v1,v0,a0 +8003eaa8: 1623ff60 bne s1,v1,8003e82c <__subdf3+0xd0> +8003eaac: 28a30039 slti v1,a1,57 +8003eab0: 00441825 or v1,v0,a0 +8003eab4: 1460ffd4 bnez v1,8003ea08 <__subdf3+0x2ac> +8003eab8: 00809021 move s2,a0 +8003eabc: 02003821 move a3,s0 +8003eac0: 00004021 move t0,zero +8003eac4: 00e08021 move s0,a3 +8003eac8: 00681025 or v0,v1,t0 +8003eacc: 10400039 beqz v0,8003ebb4 <__subdf3+0x458> +8003ead0: 00000000 nop +8003ead4: 3c040007 lui a0,0x7 +8003ead8: 3484ffff ori a0,a0,0xffff +8003eadc: 00641024 and v0,v1,a0 +8003eae0: 00481825 or v1,v0,t0 +8003eae4: 1460003c bnez v1,8003ebd8 <__subdf3+0x47c> +8003eae8: 00000000 nop +8003eaec: 00001821 move v1,zero +8003eaf0: 240207ff li v0,2047 +8003eaf4: 1000ffd6 b 8003ea50 <__subdf3+0x2f4> +8003eaf8: 2408ffff li t0,-1 +8003eafc: 02451825 or v1,s2,a1 +8003eb00: 10600133 beqz v1,8003efd0 <__subdf3+0x874> +8003eb04: 00004021 move t0,zero +8003eb08: 00a01021 move v0,a1 +8003eb0c: 32430007 andi v1,s2,0x7 +8003eb10: 1460ff7c bnez v1,8003e904 <__subdf3+0x1a8> +8003eb14: 00021f40 sll v1,v0,0x1d +8003eb18: 1000ff87 b 8003e938 <__subdf3+0x1dc> +8003eb1c: 001240c2 srl t0,s2,0x3 +8003eb20: 14a00058 bnez a1,8003ec84 <__subdf3+0x528> +8003eb24: 26230001 addiu v1,s1,1 +8003eb28: 306307ff andi v1,v1,0x7ff +8003eb2c: 28630002 slti v1,v1,2 +8003eb30: 146000a5 bnez v1,8003edc8 <__subdf3+0x66c> +8003eb34: 00869023 subu s2,a0,a2 +8003eb38: 0092182b sltu v1,a0,s2 +8003eb3c: 00489823 subu s3,v0,t0 +8003eb40: 02639823 subu s3,s3,v1 +8003eb44: 3c030080 lui v1,0x80 +8003eb48: 02631824 and v1,s3,v1 +8003eb4c: 10600069 beqz v1,8003ecf4 <__subdf3+0x598> +8003eb50: 02531825 or v1,s2,s3 +8003eb54: 00c49023 subu s2,a2,a0 +8003eb58: 01021023 subu v0,t0,v0 +8003eb5c: 00d2302b sltu a2,a2,s2 +8003eb60: 00469823 subu s3,v0,a2 +8003eb64: 1660ff49 bnez s3,8003e88c <__subdf3+0x130> +8003eb68: 00e08021 move s0,a3 +8003eb6c: 0c00a2d8 jal 80028b60 <__clzsi2> +8003eb70: 02402021 move a0,s2 +8003eb74: 24420020 addiu v0,v0,32 +8003eb78: 2446fff8 addiu a2,v0,-8 +8003eb7c: 28c30020 slti v1,a2,32 +8003eb80: 1460ff49 bnez v1,8003e8a8 <__subdf3+0x14c> +8003eb84: 00061823 negu v1,a2 +8003eb88: 2442ffd8 addiu v0,v0,-40 +8003eb8c: 00529804 sllv s3,s2,v0 +8003eb90: 00d1102a slt v0,a2,s1 +8003eb94: 1040ff4a beqz v0,8003e8c0 <__subdf3+0x164> +8003eb98: 00009021 move s2,zero +8003eb9c: 3c02ff7f lui v0,0xff7f +8003eba0: 3442ffff ori v0,v0,0xffff +8003eba4: 02268823 subu s1,s1,a2 +8003eba8: 02621024 and v0,s3,v0 +8003ebac: 1000ff53 b 8003e8fc <__subdf3+0x1a0> +8003ebb0: 32430007 andi v1,s2,0x7 +8003ebb4: 32030001 andi v1,s0,0x1 +8003ebb8: 240207ff li v0,2047 +8003ebbc: 00002021 move a0,zero +8003ebc0: 1000ffa3 b 8003ea50 <__subdf3+0x2f4> +8003ebc4: 00004021 move t0,zero +8003ebc8: 01064025 or t0,t0,a2 +8003ebcc: 0008902b sltu s2,zero,t0 +8003ebd0: 1000ff22 b 8003e85c <__subdf3+0x100> +8003ebd4: 00004021 move t0,zero +8003ebd8: 00402021 move a0,v0 +8003ebdc: 32030001 andi v1,s0,0x1 +8003ebe0: 1000ff9b b 8003ea50 <__subdf3+0x2f4> +8003ebe4: 240207ff li v0,2047 +8003ebe8: 1460008d bnez v1,8003ee20 <__subdf3+0x6c4> +8003ebec: 26250001 addiu a1,s1,1 +8003ebf0: 30a307ff andi v1,a1,0x7ff +8003ebf4: 28630002 slti v1,v1,2 +8003ebf8: 1460006a bnez v1,8003eda4 <__subdf3+0x648> +8003ebfc: 00000000 nop +8003ec00: 240307ff li v1,2047 +8003ec04: 10a30079 beq a1,v1,8003edec <__subdf3+0x690> +8003ec08: 00481021 addu v0,v0,t0 +8003ec0c: 00863021 addu a2,a0,a2 +8003ec10: 00c4202b sltu a0,a2,a0 +8003ec14: 00821021 addu v0,a0,v0 +8003ec18: 000247c0 sll t0,v0,0x1f +8003ec1c: 00063042 srl a2,a2,0x1 +8003ec20: 01069025 or s2,t0,a2 +8003ec24: 00021042 srl v0,v0,0x1 +8003ec28: 32430007 andi v1,s2,0x7 +8003ec2c: 1000ff33 b 8003e8fc <__subdf3+0x1a0> +8003ec30: 00a08821 move s1,a1 +8003ec34: 24c6ffe1 addiu a2,a2,-31 +8003ec38: 10430056 beq v0,v1,8003ed94 <__subdf3+0x638> +8003ec3c: 00d33006 srlv a2,s3,a2 +8003ec40: 00024023 negu t0,v0 +8003ec44: 01134004 sllv t0,s3,t0 +8003ec48: 02484025 or t0,s2,t0 +8003ec4c: 0008402b sltu t0,zero,t0 +8003ec50: 00c89025 or s2,a2,t0 +8003ec54: 00001021 move v0,zero +8003ec58: 1000ffac b 8003eb0c <__subdf3+0x3b0> +8003ec5c: 00008821 move s1,zero +8003ec60: 10a7004e beq a1,a3,8003ed9c <__subdf3+0x640> +8003ec64: 00a81806 srlv v1,t0,a1 +8003ec68: 00059023 negu s2,a1 +8003ec6c: 02489004 sllv s2,t0,s2 +8003ec70: 02463025 or a2,s2,a2 +8003ec74: 0006902b sltu s2,zero,a2 +8003ec78: 00729025 or s2,v1,s2 +8003ec7c: 1000fef7 b 8003e85c <__subdf3+0x100> +8003ec80: 00004021 move t0,zero +8003ec84: 12200036 beqz s1,8003ed60 <__subdf3+0x604> +8003ec88: 00441825 or v1,v0,a0 +8003ec8c: 240307ff li v1,2047 +8003ec90: 114300c5 beq t2,v1,8003efa8 <__subdf3+0x84c> +8003ec94: 3c030080 lui v1,0x80 +8003ec98: 00052823 negu a1,a1 +8003ec9c: 00431025 or v0,v0,v1 +8003eca0: 28a30039 slti v1,a1,57 +8003eca4: 1060007e beqz v1,8003eea0 <__subdf3+0x744> +8003eca8: 28a30020 slti v1,a1,32 +8003ecac: 106000ca beqz v1,8003efd8 <__subdf3+0x87c> +8003ecb0: 24030020 li v1,32 +8003ecb4: 24090020 li t1,32 +8003ecb8: 01254823 subu t1,t1,a1 +8003ecbc: 00a49006 srlv s2,a0,a1 +8003ecc0: 01221804 sllv v1,v0,t1 +8003ecc4: 01242004 sllv a0,a0,t1 +8003ecc8: 00721825 or v1,v1,s2 +8003eccc: 0004902b sltu s2,zero,a0 +8003ecd0: 00729025 or s2,v1,s2 +8003ecd4: 00a21006 srlv v0,v0,a1 +8003ecd8: 00d29023 subu s2,a2,s2 +8003ecdc: 01021023 subu v0,t0,v0 +8003ece0: 00d2302b sltu a2,a2,s2 +8003ece4: 00461023 subu v0,v0,a2 +8003ece8: 01408821 move s1,t2 +8003ecec: 1000fedf b 8003e86c <__subdf3+0x110> +8003ecf0: 00e08021 move s0,a3 +8003ecf4: 1460fee3 bnez v1,8003e884 <__subdf3+0x128> +8003ecf8: 00004021 move t0,zero +8003ecfc: 00008021 move s0,zero +8003ed00: 1000ff12 b 8003e94c <__subdf3+0x1f0> +8003ed04: 00008821 move s1,zero +8003ed08: 1060001e beqz v1,8003ed84 <__subdf3+0x628> +8003ed0c: 00869021 addu s2,a0,a2 +8003ed10: 240507ff li a1,2047 +8003ed14: 1625ff1d bne s1,a1,8003e98c <__subdf3+0x230> +8003ed18: 28650039 slti a1,v1,57 +8003ed1c: 00441825 or v1,v0,a0 +8003ed20: 1460ff39 bnez v1,8003ea08 <__subdf3+0x2ac> +8003ed24: 00809021 move s2,a0 +8003ed28: 00004021 move t0,zero +8003ed2c: 1000ff66 b 8003eac8 <__subdf3+0x36c> +8003ed30: 00e08021 move s0,a3 +8003ed34: 10a00031 beqz a1,8003edfc <__subdf3+0x6a0> +8003ed38: 24090020 li t1,32 +8003ed3c: 01234823 subu t1,t1,v1 +8003ed40: 00669006 srlv s2,a2,v1 +8003ed44: 01282804 sllv a1,t0,t1 +8003ed48: 01263004 sllv a2,a2,t1 +8003ed4c: 00b22825 or a1,a1,s2 +8003ed50: 0006902b sltu s2,zero,a2 +8003ed54: 00b29025 or s2,a1,s2 +8003ed58: 1000ff11 b 8003e9a0 <__subdf3+0x244> +8003ed5c: 00684006 srlv t0,t0,v1 +8003ed60: 1460004a bnez v1,8003ee8c <__subdf3+0x730> +8003ed64: 00000000 nop +8003ed68: 240207ff li v0,2047 +8003ed6c: 1142008e beq t2,v0,8003efa8 <__subdf3+0x84c> +8003ed70: 01001021 move v0,t0 +8003ed74: 00c09021 move s2,a2 +8003ed78: 01408821 move s1,t2 +8003ed7c: 1000ff22 b 8003ea08 <__subdf3+0x2ac> +8003ed80: 00e08021 move s0,a3 +8003ed84: 00481021 addu v0,v0,t0 +8003ed88: 0244202b sltu a0,s2,a0 +8003ed8c: 1000ff08 b 8003e9b0 <__subdf3+0x254> +8003ed90: 00821021 addu v0,a0,v0 +8003ed94: 1000ffac b 8003ec48 <__subdf3+0x4ec> +8003ed98: 00004021 move t0,zero +8003ed9c: 1000ffb4 b 8003ec70 <__subdf3+0x514> +8003eda0: 00009021 move s2,zero +8003eda4: 1620006a bnez s1,8003ef50 <__subdf3+0x7f4> +8003eda8: 00441825 or v1,v0,a0 +8003edac: 146000a4 bnez v1,8003f040 <__subdf3+0x8e4> +8003edb0: 01061825 or v1,t0,a2 +8003edb4: 01001021 move v0,t0 +8003edb8: 1000ff13 b 8003ea08 <__subdf3+0x2ac> +8003edbc: 00c09021 move s2,a2 +8003edc0: 1000ff52 b 8003eb0c <__subdf3+0x3b0> +8003edc4: 00e08021 move s0,a3 +8003edc8: 16200020 bnez s1,8003ee4c <__subdf3+0x6f0> +8003edcc: 00441825 or v1,v0,a0 +8003edd0: 1460004f bnez v1,8003ef10 <__subdf3+0x7b4> +8003edd4: 01061825 or v1,t0,a2 +8003edd8: 1060007c beqz v1,8003efcc <__subdf3+0x870> +8003eddc: 00c09021 move s2,a2 +8003ede0: 01001021 move v0,t0 +8003ede4: 1000ff08 b 8003ea08 <__subdf3+0x2ac> +8003ede8: 00e08021 move s0,a3 +8003edec: 00001821 move v1,zero +8003edf0: 00004021 move t0,zero +8003edf4: 1000ff34 b 8003eac8 <__subdf3+0x36c> +8003edf8: 00e08021 move s0,a3 +8003edfc: 10690071 beq v1,t1,8003efc4 <__subdf3+0x868> +8003ee00: 00682806 srlv a1,t0,v1 +8003ee04: 00039023 negu s2,v1 +8003ee08: 02489004 sllv s2,t0,s2 +8003ee0c: 02463025 or a2,s2,a2 +8003ee10: 0006902b sltu s2,zero,a2 +8003ee14: 00b29025 or s2,a1,s2 +8003ee18: 1000fee1 b 8003e9a0 <__subdf3+0x244> +8003ee1c: 00004021 move t0,zero +8003ee20: 16200023 bnez s1,8003eeb0 <__subdf3+0x754> +8003ee24: 240507ff li a1,2047 +8003ee28: 00442825 or a1,v0,a0 +8003ee2c: 14a00073 bnez a1,8003effc <__subdf3+0x8a0> +8003ee30: 00031827 nor v1,zero,v1 +8003ee34: 240207ff li v0,2047 +8003ee38: 11420098 beq t2,v0,8003f09c <__subdf3+0x940> +8003ee3c: 01001021 move v0,t0 +8003ee40: 00c09021 move s2,a2 +8003ee44: 1000fef0 b 8003ea08 <__subdf3+0x2ac> +8003ee48: 01408821 move s1,t2 +8003ee4c: 14600009 bnez v1,8003ee74 <__subdf3+0x718> +8003ee50: 00000000 nop +8003ee54: 01061025 or v0,t0,a2 +8003ee58: 10400070 beqz v0,8003f01c <__subdf3+0x8c0> +8003ee5c: 3c030007 lui v1,0x7 +8003ee60: 01001021 move v0,t0 +8003ee64: 00c09021 move s2,a2 +8003ee68: 00e08021 move s0,a3 +8003ee6c: 1000fee6 b 8003ea08 <__subdf3+0x2ac> +8003ee70: 241107ff li s1,2047 +8003ee74: 01063025 or a2,t0,a2 +8003ee78: 14c0003b bnez a2,8003ef68 <__subdf3+0x80c> +8003ee7c: 000228c2 srl a1,v0,0x3 +8003ee80: 00809021 move s2,a0 +8003ee84: 1000fee0 b 8003ea08 <__subdf3+0x2ac> +8003ee88: 241107ff li s1,2047 +8003ee8c: 00052827 nor a1,zero,a1 +8003ee90: 14a00043 bnez a1,8003efa0 <__subdf3+0x844> +8003ee94: 240307ff li v1,2047 +8003ee98: 1000ff90 b 8003ecdc <__subdf3+0x580> +8003ee9c: 00c49023 subu s2,a2,a0 +8003eea0: 00441025 or v0,v0,a0 +8003eea4: 0002902b sltu s2,zero,v0 +8003eea8: 1000ff8b b 8003ecd8 <__subdf3+0x57c> +8003eeac: 00001021 move v0,zero +8003eeb0: 1145007a beq t2,a1,8003f09c <__subdf3+0x940> +8003eeb4: 3c050080 lui a1,0x80 +8003eeb8: 00031823 negu v1,v1 +8003eebc: 00451025 or v0,v0,a1 +8003eec0: 28650039 slti a1,v1,57 +8003eec4: 10a0005a beqz a1,8003f030 <__subdf3+0x8d4> +8003eec8: 28650020 slti a1,v1,32 +8003eecc: 10a00078 beqz a1,8003f0b0 <__subdf3+0x954> +8003eed0: 24050020 li a1,32 +8003eed4: 24090020 li t1,32 +8003eed8: 01234823 subu t1,t1,v1 +8003eedc: 00649006 srlv s2,a0,v1 +8003eee0: 01222804 sllv a1,v0,t1 +8003eee4: 01242004 sllv a0,a0,t1 +8003eee8: 00b22825 or a1,a1,s2 +8003eeec: 0004902b sltu s2,zero,a0 +8003eef0: 00b29025 or s2,a1,s2 +8003eef4: 00621006 srlv v0,v0,v1 +8003eef8: 02469021 addu s2,s2,a2 +8003eefc: 00484021 addu t0,v0,t0 +8003ef00: 0246302b sltu a2,s2,a2 +8003ef04: 00c81021 addu v0,a2,t0 +8003ef08: 1000fea9 b 8003e9b0 <__subdf3+0x254> +8003ef0c: 01408821 move s1,t2 +8003ef10: 1060febd beqz v1,8003ea08 <__subdf3+0x2ac> +8003ef14: 00809021 move s2,a0 +8003ef18: 00869023 subu s2,a0,a2 +8003ef1c: 00481823 subu v1,v0,t0 +8003ef20: 0092282b sltu a1,a0,s2 +8003ef24: 00652823 subu a1,v1,a1 +8003ef28: 3c030080 lui v1,0x80 +8003ef2c: 00a31824 and v1,a1,v1 +8003ef30: 1060fef2 beqz v1,8003eafc <__subdf3+0x3a0> +8003ef34: 01021023 subu v0,t0,v0 +8003ef38: 00c49023 subu s2,a2,a0 +8003ef3c: 00d2302b sltu a2,a2,s2 +8003ef40: 00461023 subu v0,v0,a2 +8003ef44: 32430007 andi v1,s2,0x7 +8003ef48: 1000fe6c b 8003e8fc <__subdf3+0x1a0> +8003ef4c: 00e08021 move s0,a3 +8003ef50: 1460ffc8 bnez v1,8003ee74 <__subdf3+0x718> +8003ef54: 00000000 nop +8003ef58: 01001021 move v0,t0 +8003ef5c: 00c09021 move s2,a2 +8003ef60: 1000fea9 b 8003ea08 <__subdf3+0x2ac> +8003ef64: 241107ff li s1,2047 +8003ef68: 000818c2 srl v1,t0,0x3 +8003ef6c: 00651825 or v1,v1,a1 +8003ef70: 3c060008 lui a2,0x8 +8003ef74: 00661824 and v1,v1,a2 +8003ef78: 14600040 bnez v1,8003f07c <__subdf3+0x920> +8003ef7c: 000420c2 srl a0,a0,0x3 +8003ef80: 00021740 sll v0,v0,0x1d +8003ef84: 00444025 or t0,v0,a0 +8003ef88: 000528c0 sll a1,a1,0x3 +8003ef8c: 00081742 srl v0,t0,0x1d +8003ef90: 00451025 or v0,v0,a1 +8003ef94: 000890c0 sll s2,t0,0x3 +8003ef98: 1000fe9b b 8003ea08 <__subdf3+0x2ac> +8003ef9c: 241107ff li s1,2047 +8003efa0: 1543ff40 bne t2,v1,8003eca4 <__subdf3+0x548> +8003efa4: 28a30039 slti v1,a1,57 +8003efa8: 01061825 or v1,t0,a2 +8003efac: 1060ff5e beqz v1,8003ed28 <__subdf3+0x5cc> +8003efb0: 01001021 move v0,t0 +8003efb4: 00c09021 move s2,a2 +8003efb8: 241107ff li s1,2047 +8003efbc: 1000fe92 b 8003ea08 <__subdf3+0x2ac> +8003efc0: 00e08021 move s0,a3 +8003efc4: 1000ff91 b 8003ee0c <__subdf3+0x6b0> +8003efc8: 00009021 move s2,zero +8003efcc: 00004021 move t0,zero +8003efd0: 1000fe5e b 8003e94c <__subdf3+0x1f0> +8003efd4: 00008021 move s0,zero +8003efd8: 10a3003e beq a1,v1,8003f0d4 <__subdf3+0x978> +8003efdc: 00a29006 srlv s2,v0,a1 +8003efe0: 00052823 negu a1,a1 +8003efe4: 00a21004 sllv v0,v0,a1 +8003efe8: 00442025 or a0,v0,a0 +8003efec: 0004102b sltu v0,zero,a0 +8003eff0: 02429025 or s2,s2,v0 +8003eff4: 1000ff38 b 8003ecd8 <__subdf3+0x57c> +8003eff8: 00001021 move v0,zero +8003effc: 14600025 bnez v1,8003f094 <__subdf3+0x938> +8003f000: 240507ff li a1,2047 +8003f004: 00869021 addu s2,a0,a2 +8003f008: 00481021 addu v0,v0,t0 +8003f00c: 0246302b sltu a2,s2,a2 +8003f010: 00c21021 addu v0,a2,v0 +8003f014: 1000fe66 b 8003e9b0 <__subdf3+0x254> +8003f018: 01408821 move s1,t2 +8003f01c: 00003821 move a3,zero +8003f020: 3463ffff ori v1,v1,0xffff +8003f024: 2408ffff li t0,-1 +8003f028: 1000fea7 b 8003eac8 <__subdf3+0x36c> +8003f02c: 00e08021 move s0,a3 +8003f030: 00441025 or v0,v0,a0 +8003f034: 0002902b sltu s2,zero,v0 +8003f038: 1000ffaf b 8003eef8 <__subdf3+0x79c> +8003f03c: 00001021 move v0,zero +8003f040: 1060fe71 beqz v1,8003ea08 <__subdf3+0x2ac> +8003f044: 00809021 move s2,a0 +8003f048: 00869021 addu s2,a0,a2 +8003f04c: 00481021 addu v0,v0,t0 +8003f050: 0244202b sltu a0,s2,a0 +8003f054: 00821021 addu v0,a0,v0 +8003f058: 3c030080 lui v1,0x80 +8003f05c: 00431824 and v1,v0,v1 +8003f060: 1060feaa beqz v1,8003eb0c <__subdf3+0x3b0> +8003f064: 3c03ff7f lui v1,0xff7f +8003f068: 3463ffff ori v1,v1,0xffff +8003f06c: 00431024 and v0,v0,v1 +8003f070: 24110001 li s1,1 +8003f074: 1000fe21 b 8003e8fc <__subdf3+0x1a0> +8003f078: 32430007 andi v1,s2,0x7 +8003f07c: 3c02003f lui v0,0x3f +8003f080: 00008021 move s0,zero +8003f084: 241107ff li s1,2047 +8003f088: 3442ffff ori v0,v0,0xffff +8003f08c: 1000fe28 b 8003e930 <__subdf3+0x1d4> +8003f090: 2412fff8 li s2,-8 +8003f094: 1545ff8b bne t2,a1,8003eec4 <__subdf3+0x768> +8003f098: 28650039 slti a1,v1,57 +8003f09c: 01061825 or v1,t0,a2 +8003f0a0: 1460ffae bnez v1,8003ef5c <__subdf3+0x800> +8003f0a4: 01001021 move v0,t0 +8003f0a8: 1000ff20 b 8003ed2c <__subdf3+0x5d0> +8003f0ac: 00004021 move t0,zero +8003f0b0: 1065000a beq v1,a1,8003f0dc <__subdf3+0x980> +8003f0b4: 00629006 srlv s2,v0,v1 +8003f0b8: 00031823 negu v1,v1 +8003f0bc: 00621004 sllv v0,v0,v1 +8003f0c0: 00442025 or a0,v0,a0 +8003f0c4: 0004102b sltu v0,zero,a0 +8003f0c8: 02429025 or s2,s2,v0 +8003f0cc: 1000ff8a b 8003eef8 <__subdf3+0x79c> +8003f0d0: 00001021 move v0,zero +8003f0d4: 1000ffc4 b 8003efe8 <__subdf3+0x88c> +8003f0d8: 00001021 move v0,zero +8003f0dc: 1000fff8 b 8003f0c0 <__subdf3+0x964> +8003f0e0: 00001021 move v0,zero + +8003f0e4 <__fixdfsi>: +8003f0e4: 00053502 srl a2,a1,0x14 +8003f0e8: 30c607ff andi a2,a2,0x7ff +8003f0ec: 3c03000f lui v1,0xf +8003f0f0: 3463ffff ori v1,v1,0xffff +8003f0f4: 28c703ff slti a3,a2,1023 +8003f0f8: 00651824 and v1,v1,a1 +8003f0fc: 14e00015 bnez a3,8003f154 <__fixdfsi+0x70> +8003f100: 00052fc2 srl a1,a1,0x1f +8003f104: 28c2041e slti v0,a2,1054 +8003f108: 1040000e beqz v0,8003f144 <__fixdfsi+0x60> +8003f10c: 24070433 li a3,1075 +8003f110: 00e63823 subu a3,a3,a2 +8003f114: 3c020010 lui v0,0x10 +8003f118: 28e80020 slti t0,a3,32 +8003f11c: 11000010 beqz t0,8003f160 <__fixdfsi+0x7c> +8003f120: 00621825 or v1,v1,v0 +8003f124: 24c6fbed addiu a2,a2,-1043 +8003f128: 00e41006 srlv v0,a0,a3 +8003f12c: 00c31804 sllv v1,v1,a2 +8003f130: 00621025 or v0,v1,v0 +8003f134: 10a00008 beqz a1,8003f158 <__fixdfsi+0x74> +8003f138: 00000000 nop +8003f13c: 03e00008 jr ra +8003f140: 00021023 negu v0,v0 +8003f144: 3c027fff lui v0,0x7fff +8003f148: 3442ffff ori v0,v0,0xffff +8003f14c: 03e00008 jr ra +8003f150: 00a21021 addu v0,a1,v0 +8003f154: 00001021 move v0,zero +8003f158: 03e00008 jr ra +8003f15c: 00000000 nop +8003f160: 24020413 li v0,1043 +8003f164: 00461023 subu v0,v0,a2 +8003f168: 1000fff2 b 8003f134 <__fixdfsi+0x50> +8003f16c: 00431006 srlv v0,v1,v0 + +8003f170 <__floatsidf>: +8003f170: 27bdffe0 addiu sp,sp,-32 +8003f174: afbf001c sw ra,28(sp) +8003f178: afb10018 sw s1,24(sp) +8003f17c: 1080002a beqz a0,8003f228 <__floatsidf+0xb8> +8003f180: afb00014 sw s0,20(sp) +8003f184: 00808021 move s0,a0 +8003f188: 0480002c bltz a0,8003f23c <__floatsidf+0xcc> +8003f18c: 00048fc2 srl s1,a0,0x1f +8003f190: 0c00a2d8 jal 80028b60 <__clzsi2> +8003f194: 02002021 move a0,s0 +8003f198: 2403041e li v1,1054 +8003f19c: 00621823 subu v1,v1,v0 +8003f1a0: 24050433 li a1,1075 +8003f1a4: 00a32823 subu a1,a1,v1 +8003f1a8: 28a40020 slti a0,a1,32 +8003f1ac: 14800016 bnez a0,8003f208 <__floatsidf+0x98> +8003f1b0: 2404000b li a0,11 +8003f1b4: 24020413 li v0,1043 +8003f1b8: 00431023 subu v0,v0,v1 +8003f1bc: 3c04000f lui a0,0xf +8003f1c0: 00501004 sllv v0,s0,v0 +8003f1c4: 3484ffff ori a0,a0,0xffff +8003f1c8: 00441024 and v0,v0,a0 +8003f1cc: 00008021 move s0,zero +8003f1d0: 306407ff andi a0,v1,0x7ff +8003f1d4: 3c03000f lui v1,0xf +8003f1d8: 3463ffff ori v1,v1,0xffff +8003f1dc: 00431024 and v0,v0,v1 +8003f1e0: 8fbf001c lw ra,28(sp) +8003f1e4: 00042500 sll a0,a0,0x14 +8003f1e8: 00111fc0 sll v1,s1,0x1f +8003f1ec: 00441025 or v0,v0,a0 +8003f1f0: 00431825 or v1,v0,v1 +8003f1f4: 8fb10018 lw s1,24(sp) +8003f1f8: 02001021 move v0,s0 +8003f1fc: 8fb00014 lw s0,20(sp) +8003f200: 03e00008 jr ra +8003f204: 27bd0020 addiu sp,sp,32 +8003f208: 00821023 subu v0,a0,v0 +8003f20c: 3c04000f lui a0,0xf +8003f210: 00501006 srlv v0,s0,v0 +8003f214: 3484ffff ori a0,a0,0xffff +8003f218: 00441024 and v0,v0,a0 +8003f21c: 00b08004 sllv s0,s0,a1 +8003f220: 1000ffec b 8003f1d4 <__floatsidf+0x64> +8003f224: 306407ff andi a0,v1,0x7ff +8003f228: 00008821 move s1,zero +8003f22c: 00002021 move a0,zero +8003f230: 00001021 move v0,zero +8003f234: 1000ffe7 b 8003f1d4 <__floatsidf+0x64> +8003f238: 00008021 move s0,zero +8003f23c: 00048023 negu s0,a0 +8003f240: 0c00a2d8 jal 80028b60 <__clzsi2> +8003f244: 02002021 move a0,s0 +8003f248: 2403041e li v1,1054 +8003f24c: 00621823 subu v1,v1,v0 +8003f250: 24050433 li a1,1075 +8003f254: 00a32823 subu a1,a1,v1 +8003f258: 28a40020 slti a0,a1,32 +8003f25c: 1080ffd5 beqz a0,8003f1b4 <__floatsidf+0x44> +8003f260: 2404000b li a0,11 +8003f264: 1000ffe9 b 8003f20c <__floatsidf+0x9c> +8003f268: 00821023 subu v0,a0,v0 + +8003f26c <__floatdidf>: +8003f26c: 27bdffd8 addiu sp,sp,-40 +8003f270: 00851025 or v0,a0,a1 +8003f274: afbf0024 sw ra,36(sp) +8003f278: afb30020 sw s3,32(sp) +8003f27c: afb2001c sw s2,28(sp) +8003f280: afb10018 sw s1,24(sp) +8003f284: 10400051 beqz v0,8003f3cc <__floatdidf+0x160> +8003f288: afb00014 sw s0,20(sp) +8003f28c: 00808821 move s1,a0 +8003f290: 00a09021 move s2,a1 +8003f294: 04a10005 bgez a1,8003f2ac <__floatdidf+0x40> +8003f298: 000587c2 srl s0,a1,0x1f +8003f29c: 00048823 negu s1,a0 +8003f2a0: 0011302b sltu a2,zero,s1 +8003f2a4: 00052823 negu a1,a1 +8003f2a8: 00a69023 subu s2,a1,a2 +8003f2ac: 12400019 beqz s2,8003f314 <__floatdidf+0xa8> +8003f2b0: 02409821 move s3,s2 +8003f2b4: 0c00a2d8 jal 80028b60 <__clzsi2> +8003f2b8: 02402021 move a0,s2 +8003f2bc: 2403043e li v1,1086 +8003f2c0: 00624023 subu t0,v1,v0 +8003f2c4: 29030434 slti v1,t0,1076 +8003f2c8: 1060001b beqz v1,8003f338 <__floatdidf+0xcc> +8003f2cc: 29030437 slti v1,t0,1079 +8003f2d0: 24070433 li a3,1075 +8003f2d4: 00e83823 subu a3,a3,t0 +8003f2d8: 10e00078 beqz a3,8003f4bc <__floatdidf+0x250> +8003f2dc: 00000000 nop +8003f2e0: 28e30020 slti v1,a3,32 +8003f2e4: 10600060 beqz v1,8003f468 <__floatdidf+0x1fc> +8003f2e8: 2406002b li a2,43 +8003f2ec: 00c21023 subu v0,a2,v0 +8003f2f0: 00511006 srlv v0,s1,v0 +8003f2f4: 00f22804 sllv a1,s2,a3 +8003f2f8: 00451025 or v0,v0,a1 +8003f2fc: 3c05000f lui a1,0xf +8003f300: 34a5ffff ori a1,a1,0xffff +8003f304: 00f18804 sllv s1,s1,a3 +8003f308: 00452824 and a1,v0,a1 +8003f30c: 10000033 b 8003f3dc <__floatdidf+0x170> +8003f310: 310307ff andi v1,t0,0x7ff +8003f314: 0c00a2d8 jal 80028b60 <__clzsi2> +8003f318: 02202021 move a0,s1 +8003f31c: 24420020 addiu v0,v0,32 +8003f320: 2403043e li v1,1086 +8003f324: 00624023 subu t0,v1,v0 +8003f328: 29030434 slti v1,t0,1076 +8003f32c: 1460ffe9 bnez v1,8003f2d4 <__floatdidf+0x68> +8003f330: 24070433 li a3,1075 +8003f334: 29030437 slti v1,t0,1079 +8003f338: 10600038 beqz v1,8003f41c <__floatdidf+0x1b0> +8003f33c: 24060436 li a2,1078 +8003f340: 00c83023 subu a2,a2,t0 +8003f344: 10c00006 beqz a2,8003f360 <__floatdidf+0xf4> +8003f348: 00d22804 sllv a1,s2,a2 +8003f34c: 24130028 li s3,40 +8003f350: 02629823 subu s3,s3,v0 +8003f354: 02713806 srlv a3,s1,s3 +8003f358: 00e59825 or s3,a3,a1 +8003f35c: 00d18804 sllv s1,s1,a2 +8003f360: 3c03ff7f lui v1,0xff7f +8003f364: 3463ffff ori v1,v1,0xffff +8003f368: 32240007 andi a0,s1,0x7 +8003f36c: 10800008 beqz a0,8003f390 <__floatdidf+0x124> +8003f370: 02631824 and v1,s3,v1 +8003f374: 3224000f andi a0,s1,0xf +8003f378: 24050004 li a1,4 +8003f37c: 10850004 beq a0,a1,8003f390 <__floatdidf+0x124> +8003f380: 26240004 addiu a0,s1,4 +8003f384: 0091882b sltu s1,a0,s1 +8003f388: 00711821 addu v1,v1,s1 +8003f38c: 00808821 move s1,a0 +8003f390: 3c040080 lui a0,0x80 +8003f394: 00642024 and a0,v1,a0 +8003f398: 10800005 beqz a0,8003f3b0 <__floatdidf+0x144> +8003f39c: 3c04ff7f lui a0,0xff7f +8003f3a0: 3484ffff ori a0,a0,0xffff +8003f3a4: 2408043f li t0,1087 +8003f3a8: 00641824 and v1,v1,a0 +8003f3ac: 01024023 subu t0,t0,v0 +8003f3b0: 00031740 sll v0,v1,0x1d +8003f3b4: 00032a40 sll a1,v1,0x9 +8003f3b8: 001188c2 srl s1,s1,0x3 +8003f3bc: 00518825 or s1,v0,s1 +8003f3c0: 00052b02 srl a1,a1,0xc +8003f3c4: 10000005 b 8003f3dc <__floatdidf+0x170> +8003f3c8: 310307ff andi v1,t0,0x7ff +8003f3cc: 00008021 move s0,zero +8003f3d0: 00001821 move v1,zero +8003f3d4: 00002821 move a1,zero +8003f3d8: 00008821 move s1,zero +8003f3dc: 3c02000f lui v0,0xf +8003f3e0: 3442ffff ori v0,v0,0xffff +8003f3e4: 00031d00 sll v1,v1,0x14 +8003f3e8: 00a21024 and v0,a1,v0 +8003f3ec: 00432825 or a1,v0,v1 +8003f3f0: 001087c0 sll s0,s0,0x1f +8003f3f4: 8fbf0024 lw ra,36(sp) +8003f3f8: 00b02825 or a1,a1,s0 +8003f3fc: 02201021 move v0,s1 +8003f400: 8fb30020 lw s3,32(sp) +8003f404: 8fb2001c lw s2,28(sp) +8003f408: 8fb10018 lw s1,24(sp) +8003f40c: 8fb00014 lw s0,20(sp) +8003f410: 00a01821 move v1,a1 +8003f414: 03e00008 jr ra +8003f418: 27bd0028 addiu sp,sp,40 +8003f41c: 24130008 li s3,8 +8003f420: 02629823 subu s3,s3,v0 +8003f424: 32630020 andi v1,s3,0x20 +8003f428: 1060001e beqz v1,8003f4a4 <__floatdidf+0x238> +8003f42c: 00121840 sll v1,s2,0x1 +8003f430: 02723006 srlv a2,s2,s3 +8003f434: 00001821 move v1,zero +8003f438: 24040476 li a0,1142 +8003f43c: 00882023 subu a0,a0,t0 +8003f440: 30850020 andi a1,a0,0x20 +8003f444: 10a00011 beqz a1,8003f48c <__floatdidf+0x220> +8003f448: 00112842 srl a1,s1,0x1 +8003f44c: 00912804 sllv a1,s1,a0 +8003f450: 00002021 move a0,zero +8003f454: 00852025 or a0,a0,a1 +8003f458: 0004202b sltu a0,zero,a0 +8003f45c: 00c48825 or s1,a2,a0 +8003f460: 1000ffbf b 8003f360 <__floatdidf+0xf4> +8003f464: 00609821 move s3,v1 +8003f468: 24050413 li a1,1043 +8003f46c: 00a82823 subu a1,a1,t0 +8003f470: 3c02000f lui v0,0xf +8003f474: 00b12804 sllv a1,s1,a1 +8003f478: 3442ffff ori v0,v0,0xffff +8003f47c: 00a22824 and a1,a1,v0 +8003f480: 310307ff andi v1,t0,0x7ff +8003f484: 1000ffd5 b 8003f3dc <__floatdidf+0x170> +8003f488: 00008821 move s1,zero +8003f48c: 00043827 nor a3,zero,a0 +8003f490: 00e53806 srlv a3,a1,a3 +8003f494: 00922804 sllv a1,s2,a0 +8003f498: 00e52825 or a1,a3,a1 +8003f49c: 1000ffed b 8003f454 <__floatdidf+0x1e8> +8003f4a0: 00912004 sllv a0,s1,a0 +8003f4a4: 00132027 nor a0,zero,s3 +8003f4a8: 00831804 sllv v1,v1,a0 +8003f4ac: 02713006 srlv a2,s1,s3 +8003f4b0: 00663025 or a2,v1,a2 +8003f4b4: 1000ffe0 b 8003f438 <__floatdidf+0x1cc> +8003f4b8: 02721806 srlv v1,s2,s3 +8003f4bc: 3c02000f lui v0,0xf +8003f4c0: 3442ffff ori v0,v0,0xffff +8003f4c4: 02422824 and a1,s2,v0 +8003f4c8: 1000ffc4 b 8003f3dc <__floatdidf+0x170> +8003f4cc: 310307ff andi v1,t0,0x7ff + +8003f4d0 <__truncdfsf2>: +8003f4d0: 00053d02 srl a3,a1,0x14 +8003f4d4: 30e707ff andi a3,a3,0x7ff +8003f4d8: 3c02000f lui v0,0xf +8003f4dc: 24e60001 addiu a2,a3,1 +8003f4e0: 3442ffff ori v0,v0,0xffff +8003f4e4: 00451024 and v0,v0,a1 +8003f4e8: 30c607ff andi a2,a2,0x7ff +8003f4ec: 00052fc2 srl a1,a1,0x1f +8003f4f0: 000210c0 sll v0,v0,0x3 +8003f4f4: 00041f42 srl v1,a0,0x1d +8003f4f8: 28c60002 slti a2,a2,2 +8003f4fc: 00a04021 move t0,a1 +8003f500: 00621825 or v1,v1,v0 +8003f504: 14c0003d bnez a2,8003f5fc <__truncdfsf2+0x12c> +8003f508: 000448c0 sll t1,a0,0x3 +8003f50c: 24e2fc80 addiu v0,a3,-896 +8003f510: 284600ff slti a2,v0,255 +8003f514: 10c00049 beqz a2,8003f63c <__truncdfsf2+0x16c> +8003f518: 00000000 nop +8003f51c: 1840001e blez v0,8003f598 <__truncdfsf2+0xc8> +8003f520: 00043180 sll a2,a0,0x6 +8003f524: 0006302b sltu a2,zero,a2 +8003f528: 000318c0 sll v1,v1,0x3 +8003f52c: 00c31825 or v1,a2,v1 +8003f530: 00092742 srl a0,t1,0x1d +8003f534: 00642025 or a0,v1,a0 +8003f538: 30830007 andi v1,a0,0x7 +8003f53c: 10600005 beqz v1,8003f554 <__truncdfsf2+0x84> +8003f540: 3083000f andi v1,a0,0xf +8003f544: 24060004 li a2,4 +8003f548: 10660003 beq v1,a2,8003f558 <__truncdfsf2+0x88> +8003f54c: 3c030400 lui v1,0x400 +8003f550: 24840004 addiu a0,a0,4 +8003f554: 3c030400 lui v1,0x400 +8003f558: 00831824 and v1,a0,v1 +8003f55c: 10600013 beqz v1,8003f5ac <__truncdfsf2+0xdc> +8003f560: 240300ff li v1,255 +8003f564: 24420001 addiu v0,v0,1 +8003f568: 10430034 beq v0,v1,8003f63c <__truncdfsf2+0x16c> +8003f56c: 00042180 sll a0,a0,0x6 +8003f570: 00042242 srl a0,a0,0x9 +8003f574: 304200ff andi v0,v0,0xff +8003f578: 00021dc0 sll v1,v0,0x17 +8003f57c: 3c02007f lui v0,0x7f +8003f580: 3442ffff ori v0,v0,0xffff +8003f584: 00822024 and a0,a0,v0 +8003f588: 00832025 or a0,a0,v1 +8003f58c: 000517c0 sll v0,a1,0x1f +8003f590: 03e00008 jr ra +8003f594: 00821025 or v0,a0,v0 +8003f598: 2844ffe9 slti a0,v0,-23 +8003f59c: 10800041 beqz a0,8003f6a4 <__truncdfsf2+0x1d4> +8003f5a0: 240a001e li t2,30 +8003f5a4: 00001021 move v0,zero +8003f5a8: 24040005 li a0,5 +8003f5ac: 240300ff li v1,255 +8003f5b0: 14430016 bne v0,v1,8003f60c <__truncdfsf2+0x13c> +8003f5b4: 000420c2 srl a0,a0,0x3 +8003f5b8: 10800020 beqz a0,8003f63c <__truncdfsf2+0x16c> +8003f5bc: 3c03003f lui v1,0x3f +8003f5c0: 3463ffff ori v1,v1,0xffff +8003f5c4: 00832024 and a0,a0,v1 +8003f5c8: 14800034 bnez a0,8003f69c <__truncdfsf2+0x1cc> +8003f5cc: 01002821 move a1,t0 +8003f5d0: 240200ff li v0,255 +8003f5d4: 00602021 move a0,v1 +8003f5d8: 00021dc0 sll v1,v0,0x17 +8003f5dc: 3c02007f lui v0,0x7f +8003f5e0: 3442ffff ori v0,v0,0xffff +8003f5e4: 00002821 move a1,zero +8003f5e8: 00822024 and a0,a0,v0 +8003f5ec: 00832025 or a0,a0,v1 +8003f5f0: 000517c0 sll v0,a1,0x1f +8003f5f4: 03e00008 jr ra +8003f5f8: 00821025 or v0,a0,v0 +8003f5fc: 14e00019 bnez a3,8003f664 <__truncdfsf2+0x194> +8003f600: 00692025 or a0,v1,t1 +8003f604: 1480ffe8 bnez a0,8003f5a8 <__truncdfsf2+0xd8> +8003f608: 00001021 move v0,zero +8003f60c: 3c03007f lui v1,0x7f +8003f610: 3463ffff ori v1,v1,0xffff +8003f614: 304200ff andi v0,v0,0xff +8003f618: 00832024 and a0,a0,v1 +8003f61c: 00021dc0 sll v1,v0,0x17 +8003f620: 3c02007f lui v0,0x7f +8003f624: 3442ffff ori v0,v0,0xffff +8003f628: 00822024 and a0,a0,v0 +8003f62c: 00832025 or a0,a0,v1 +8003f630: 000517c0 sll v0,a1,0x1f +8003f634: 03e00008 jr ra +8003f638: 00821025 or v0,a0,v0 +8003f63c: 240200ff li v0,255 +8003f640: 00021dc0 sll v1,v0,0x17 +8003f644: 3c02007f lui v0,0x7f +8003f648: 3442ffff ori v0,v0,0xffff +8003f64c: 00002021 move a0,zero +8003f650: 00822024 and a0,a0,v0 +8003f654: 00832025 or a0,a0,v1 +8003f658: 000517c0 sll v0,a1,0x1f +8003f65c: 03e00008 jr ra +8003f660: 00821025 or v0,a0,v0 +8003f664: 00691025 or v0,v1,t1 +8003f668: 1040fff4 beqz v0,8003f63c <__truncdfsf2+0x16c> +8003f66c: 000318c0 sll v1,v1,0x3 +8003f670: 00092742 srl a0,t1,0x1d +8003f674: 00832025 or a0,a0,v1 +8003f678: 3c0301ff lui v1,0x1ff +8003f67c: 3463fff8 ori v1,v1,0xfff8 +8003f680: 00832024 and a0,a0,v1 +8003f684: 14800015 bnez a0,8003f6dc <__truncdfsf2+0x20c> +8003f688: 00000000 nop +8003f68c: 3c04003f lui a0,0x3f +8003f690: 00004021 move t0,zero +8003f694: 3484ffff ori a0,a0,0xffff +8003f698: 01002821 move a1,t0 +8003f69c: 1000ffb6 b 8003f578 <__truncdfsf2+0xa8> +8003f6a0: 240200ff li v0,255 +8003f6a4: 01425023 subu t2,t2,v0 +8003f6a8: 3c040080 lui a0,0x80 +8003f6ac: 294b0020 slti t3,t2,32 +8003f6b0: 1160000c beqz t3,8003f6e4 <__truncdfsf2+0x214> +8003f6b4: 00641825 or v1,v1,a0 +8003f6b8: 24e6fc82 addiu a2,a3,-894 +8003f6bc: 00c93804 sllv a3,t1,a2 +8003f6c0: 0007382b sltu a3,zero,a3 +8003f6c4: 00c31804 sllv v1,v1,a2 +8003f6c8: 00e33025 or a2,a3,v1 +8003f6cc: 01492006 srlv a0,t1,t2 +8003f6d0: 00c42025 or a0,a2,a0 +8003f6d4: 1000ff98 b 8003f538 <__truncdfsf2+0x68> +8003f6d8: 00001021 move v0,zero +8003f6dc: 1000ff96 b 8003f538 <__truncdfsf2+0x68> +8003f6e0: 240200ff li v0,255 +8003f6e4: 2404fffe li a0,-2 +8003f6e8: 00822023 subu a0,a0,v0 +8003f6ec: 24020020 li v0,32 +8003f6f0: 11420008 beq t2,v0,8003f714 <__truncdfsf2+0x244> +8003f6f4: 00832006 srlv a0,v1,a0 +8003f6f8: 24e7fca2 addiu a3,a3,-862 +8003f6fc: 00e31804 sllv v1,v1,a3 +8003f700: 00691825 or v1,v1,t1 +8003f704: 0003182b sltu v1,zero,v1 +8003f708: 00642025 or a0,v1,a0 +8003f70c: 1000ff8a b 8003f538 <__truncdfsf2+0x68> +8003f710: 00001021 move v0,zero +8003f714: 1000fffa b 8003f700 <__truncdfsf2+0x230> +8003f718: 00001821 move v1,zero + +Disassembly of section .init: + +8003f71c <_init>: +8003f71c: 27bdffe0 addiu sp,sp,-32 +8003f720: afbf0014 sw ra,20(sp) +8003f724: 04110001 bal 8003f72c <_init+0x10> +8003f728: 00000000 nop +8003f72c: 0c008055 jal 80020154 <frame_dummy> +8003f730: 00000000 nop +8003f734: 04110001 bal 8003f73c <_init+0x20> +8003f738: 00000000 nop +8003f73c: 0c00a302 jal 80028c08 <__do_global_ctors_aux> +8003f740: 00000000 nop + +8003f744 <init>: +8003f744: 8fbf0014 lw ra,20(sp) +8003f748: 27bd0020 addiu sp,sp,32 +8003f74c: 03e00008 jr ra +8003f750: 00000000 nop + +Disassembly of section .fini: + +8003f754 <_fini>: +8003f754: 27bdffe0 addiu sp,sp,-32 +8003f758: afbf0014 sw ra,20(sp) +8003f75c: 04110001 bal 8003f764 <_fini+0x10> +8003f760: 00000000 nop +8003f764: 0c008021 jal 80020084 <__do_global_dtors_aux> +8003f768: 00000000 nop + +8003f76c <fini>: +8003f76c: 8fbf0014 lw ra,20(sp) +8003f770: 27bd0020 addiu sp,sp,32 +8003f774: 03e00008 jr ra +8003f778: 00000000 nop diff --git a/Source/Font.c b/Source/Font.c new file mode 100755 index 0000000..0754376 --- /dev/null +++ b/Source/Font.c @@ -0,0 +1,196 @@ +/* *************************************
+ * Includes
+ * *************************************/
+
+#include "Font.h"
+
+/* *************************************
+ * Defines
+ * *************************************/
+
+#define FONT_INTERNAL_TEXT_BUFFER_MAX_SIZE 200
+
+/* *************************************
+ * Local Prototypes
+ * *************************************/
+
+/* *************************************
+ * Local Variables
+ * *************************************/
+
+static char _internal_text[FONT_INTERNAL_TEXT_BUFFER_MAX_SIZE];
+static unsigned char _blend_effect_lum;
+
+bool FontLoadImage(char * strPath, TYPE_FONT * ptrFont)
+{
+ if(GfxSpriteFromFile(strPath, &ptrFont->spr) == false)
+ {
+ return false;
+ }
+
+ ptrFont->spr_w = ptrFont->spr.w;
+ ptrFont->spr_h = ptrFont->spr.h;
+ ptrFont->spr_u = ptrFont->spr.u;
+ ptrFont->spr_v = ptrFont->spr.v;
+
+ //Now set default values to font
+
+ ptrFont->char_w = FONT_DEFAULT_CHAR_SIZE;
+ ptrFont->char_h = FONT_DEFAULT_CHAR_SIZE;
+
+ ptrFont->spr.attribute |= COLORMODE(COLORMODE_4BPP);
+ ptrFont->spr.attribute &= COLORMODE(~(COLORMODE_8BPP | COLORMODE_16BPP | COLORMODE_24BPP));
+ ptrFont->spr.r = NORMAL_LUMINANCE;
+ ptrFont->spr.g = NORMAL_LUMINANCE;
+ ptrFont->spr.b = NORMAL_LUMINANCE;
+
+ //At this point, spr.w and spr.h = real w/h
+ ptrFont->char_per_row = (uint8_t)(ptrFont->spr_w / ptrFont->char_w);
+ ptrFont->max_ch_wrap = 0;
+
+ ptrFont->spr.w = ptrFont->char_w;
+ ptrFont->spr.h = ptrFont->char_h;
+
+ ptrFont->flags = FONT_NOFLAGS;
+
+ ptrFont->init_ch = FONT_DEFAULT_INIT_CHAR;
+
+ dprintf("Sprite CX = %d, sprite CY = %d\n",ptrFont->spr.cx, ptrFont->spr.cy);
+
+ return true;
+}
+
+void FontSetInitChar(TYPE_FONT * ptrFont, char c)
+{
+ ptrFont->init_ch = c;
+}
+
+void FontSetFlags(TYPE_FONT * ptrFont, FONT_FLAGS flags)
+{
+ ptrFont->flags = flags;
+}
+
+void FontSetSize(TYPE_FONT * ptrFont, short size)
+{
+ ptrFont->char_w = size;
+ ptrFont->char_h = size;
+
+ //At this point, spr.w and spr.h = real w/h
+ ptrFont->char_per_row = (uint8_t)(ptrFont->spr_w / ptrFont->char_w);
+ ptrFont->max_ch_wrap = 0;
+
+ ptrFont->spr.w = ptrFont->char_w;
+ ptrFont->spr.h = ptrFont->char_h;
+}
+
+void FontCyclic(void)
+{
+ _blend_effect_lum -= 8;
+}
+
+void FontPrintText(TYPE_FONT * ptrFont, short x, short y, char * str, ...)
+{
+ uint16_t i;
+ uint16_t line_count = 0;
+ int result;
+ short orig_x = x;
+
+ va_list ap;
+
+ if(ptrFont->flags & FONT_1HZ_FLASH)
+ {
+ if(Gfx1HzFlash() == false)
+ {
+ return;
+ }
+ }
+ else if(ptrFont->flags & FONT_2HZ_FLASH)
+ {
+ if(Gfx2HzFlash() == false)
+ {
+ return;
+ }
+ }
+
+ va_start(ap, str);
+
+ result = vsnprintf( _internal_text,
+ FONT_INTERNAL_TEXT_BUFFER_MAX_SIZE,
+ str,
+ ap );
+
+ for(i = 0; i < result ; i++)
+ {
+ char _ch = _internal_text[i];
+
+ if(_ch == '\0')
+ {
+ // End of string
+ break;
+ }
+
+ switch(_ch)
+ {
+ case ' ':
+ x += ptrFont->char_w;
+ continue;
+ case '\n':
+ x = orig_x;
+ y += ptrFont->char_h;
+ break;
+ default:
+ if( (ptrFont->flags & FONT_WRAP_LINE) && (ptrFont->max_ch_wrap != 0) )
+ {
+ if(++line_count >= ptrFont->max_ch_wrap)
+ {
+ line_count = 0;
+ x = orig_x;
+ y += ptrFont->char_h;
+ }
+ }
+
+ ptrFont->spr.x = x;
+ ptrFont->spr.y = y;
+ ptrFont->spr.w = ptrFont->char_w;
+ ptrFont->spr.h = ptrFont->char_h;
+ ptrFont->spr.u = (short)( (_ch - ptrFont->init_ch) % ptrFont->char_per_row) * ptrFont->char_w;
+ ptrFont->spr.u += ptrFont->spr_u; // Add original offset for image
+ ptrFont->spr.v = (short)( (_ch - ptrFont->init_ch) / ptrFont->char_per_row) * ptrFont->char_h;
+ ptrFont->spr.v += ptrFont->spr_v; // Add original offset for image
+
+ if(ptrFont->flags & FONT_BLEND_EFFECT)
+ {
+ ptrFont->spr.r += 8;
+ ptrFont->spr.g += 8;
+ ptrFont->spr.b += 8;
+ }
+ else
+ {
+ ptrFont->spr.r = NORMAL_LUMINANCE;
+ ptrFont->spr.g = NORMAL_LUMINANCE;
+ ptrFont->spr.b = NORMAL_LUMINANCE;
+ }
+ /*dprintf("char_w = %d, char_h = %d, char_per_row = %d, init_ch: %c\n",
+ ptrFont->char_w,
+ ptrFont->char_h,
+ ptrFont->char_per_row,
+ ptrFont->init_ch);
+ dprintf("Char: %c, spr.u = %d, spr.v = %d\n",str[i],ptrFont->spr.u, ptrFont->spr.v);
+ dprintf("Sprite CX = %d, sprite CY = %d\n",ptrFont->spr.cx, ptrFont->spr.cy);*/
+ //dprintf("Sprite rgb={%d,%d,%d}\n",ptrFont->spr.r, ptrFont->spr.g, ptrFont->spr.b);
+
+ GfxSortSprite(&ptrFont->spr);
+ x += ptrFont->char_w;
+ break;
+ }
+ }
+
+ if(ptrFont->flags & FONT_BLEND_EFFECT)
+ {
+ ptrFont->spr.r = _blend_effect_lum;
+ ptrFont->spr.g = _blend_effect_lum;
+ ptrFont->spr.b = _blend_effect_lum;
+ }
+
+ va_end(ap);
+}
diff --git a/Source/Font.h b/Source/Font.h new file mode 100755 index 0000000..73d4645 --- /dev/null +++ b/Source/Font.h @@ -0,0 +1,43 @@ +#ifndef __FONT_HEADER__
+#define __FONT_HEADER__
+
+/* *************************************
+ * Includes
+ * *************************************/
+
+#include "Global_Inc.h"
+#include "System.h"
+#include "Gfx.h"
+#include "GameStructures.h"
+#include <stdarg.h>
+
+/* *************************************
+ * Defines
+ * *************************************/
+
+#define FONT_DEFAULT_CHAR_SIZE 16
+#define FONT_DEFAULT_INIT_CHAR '!'
+
+/* **************************************
+ * Structs and enums *
+ * *************************************/
+
+/* *************************************
+ * Global prototypes
+ * *************************************/
+
+bool FontLoadImage(char * strPath, TYPE_FONT * ptrFont);
+void FontSetSize(TYPE_FONT * ptrFont, short size);
+void FontPrintText(TYPE_FONT *ptrFont, short x, short y, char * str, ...);
+void FontSetInitChar(TYPE_FONT * ptrFont, char c);
+void FontSetFlags(TYPE_FONT * ptrFont, FONT_FLAGS flags);
+void FontCyclic(void);
+
+/* *************************************
+ * Global variables
+ * *************************************/
+
+TYPE_FONT RadioFont;
+TYPE_FONT SmallFont;
+
+#endif //__FONT_HEADER__
diff --git a/Source/Game.c b/Source/Game.c new file mode 100755 index 0000000..88d2b75 --- /dev/null +++ b/Source/Game.c @@ -0,0 +1,1727 @@ +/* ************************************* + * Includes + * *************************************/ + +#include "Game.h" + +/* ************************************* + * Defines + * *************************************/ + +#define GAME_MAX_MAP_SIZE 0x400 +#define GAME_MAX_RUNWAYS 16 +#define GAME_MAX_RWY_LENGTH 16 + +#define MIN_MAP_COLUMNS 8 +#define MAX_MAP_COLUMNS 32 + +#define LEVEL_HEADER_SIZE 64 +#define COLUMNS_PER_TILESET 4 +#define ROWS_PER_TILESET COLUMNS_PER_TILESET +#define LEVEL_MAGIC_NUMBER_SIZE 3 +#define LEVEL_MAGIC_NUMBER_STRING "ATC" +#define LEVEL_TITLE_SIZE 24 +#define TILE_MIRROR_FLAG ( (uint8_t)0x80 ) + +#define GAME_INVALID_TILE_SELECTION ( (uint16_t)0xFFFF ) + +/* ************************************** + * Structs and enums * + * *************************************/ + +enum +{ + TILE_GRASS = 0, + TILE_ASPHALT_WITH_BORDERS, + TILE_WATER, + TILE_ASPHALT, + TILE_HANGAR, + TILE_ILS, + TILE_ATC_TOWER, + TILE_ATC_LOC, + TILE_RWY_MID, + TILE_RWY_START_1, + TILE_RWY_START_2, + TILE_PARKING, + TILE_RESERVED_1, + TILE_TAXIWAY_INTERSECT_GRASS, + TILE_TAXIWAY_GRASS, + TILE_TAXIWAY_CORNER_GRASS, + + LAST_TILE_TILESET1 = TILE_TAXIWAY_CORNER_GRASS +}; + +enum +{ + TILE_HALF_WATER_1 = LAST_TILE_TILESET1 + 1, + TILE_HALF_WATER_2, + TILE_RESERVED_2, + TILE_RESERVED_3, + TILE_AIRPORT_BUILDING, + TILE_PLANE, + TILE_RESERVED_4, + TILE_RESERVED_5, + TILE_RWY_EXIT, + TILE_GATE, + TILE_RESERVED_6, + TILE_RESERVED_7, + TILE_TAXIWAY_CORNER_GRASS_2, + + LAST_TILE_TILESET2 = TILE_TAXIWAY_CORNER_GRASS_2, + + TILE_NOTHING = 0xFF +}; + +enum +{ + MOUSE_W = 8, + MOUSE_H = 8, + MOUSE_X = X_SCREEN_RESOLUTION - (X_SCREEN_RESOLUTION >> 1), + MOUSE_Y = Y_SCREEN_RESOLUTION - (Y_SCREEN_RESOLUTION >> 1), +}; + +/* ************************************* + * Local Prototypes + * *************************************/ + +static void GameInit(void); +static void GameLoadLevel(void); +static bool GamePause(void); +static void GameEmergencyMode(void); +static void GameCalculations(void); +static void GamePlayerHandler(TYPE_PLAYER * ptrPlayer, TYPE_FLIGHT_DATA * ptrFlightData); +static void GamePlayerAddWaypoint(TYPE_PLAYER * ptrPlayer); +static void GamePlayerAddWaypoint_Ex(TYPE_PLAYER * ptrPlayer, uint16_t tile); +static void GameGraphics(void); +static void GameRenderLevel(TYPE_PLAYER * ptrPlayer); +//static void GameLoadPilots(char * strPath); +static void GameClock(void); +static void GameClockFlights(void); +static void GameAircraftState(void); +static void GameActiveAircraft(void); +static void GameStateShowAircraft(TYPE_PLAYER * ptrPlayer, TYPE_FLIGHT_DATA * ptrFlightData); +static void GameFirstLastAircraftIndex(void); +static void GameSelectAircraftFromList(TYPE_PLAYER * ptrPlayer, TYPE_FLIGHT_DATA * ptrFlightData); +static void GameStateSelectRunway(TYPE_PLAYER * ptrPlayer, TYPE_FLIGHT_DATA * ptrFlightData); +static void GameStateSelectTaxiwayRunway(TYPE_PLAYER * ptrPlayer, TYPE_FLIGHT_DATA * ptrFlightData); +static void GameStateSelectTaxiwayParking(TYPE_PLAYER * ptrPlayer, TYPE_FLIGHT_DATA * ptrFlightData); +static void GameStateLockTarget(TYPE_PLAYER * ptrPlayer); +static void GameSelectAircraft(TYPE_PLAYER * ptrPlayer); +static void GameGetRunwayArray(void); +static void GameGetSelectedRunwayArray(uint16_t rwyHeader); +static void GameAssignRunwaytoAircraft(TYPE_PLAYER * ptrPlayer, TYPE_FLIGHT_DATA * ptrFlightData); +static bool GameGuiShowAircraftDataSpecialConditions(TYPE_PLAYER * ptrPlayer); +static uint16_t GameGetTileFromIsoPosition(TYPE_ISOMETRIC_POS * IsoPos); +static bool GamePathToTile(TYPE_PLAYER * ptrPlayer); + +/* ************************************* + * Global Variables + * *************************************/ + +bool GameStartupFlag; + +/* ************************************* + * Local Variables + * *************************************/ + +static GsSprite GameTilesetSpr; +static GsSprite GameTileset2Spr; +static GsSprite GamePlaneSpr; +static GsSprite GameMouseSpr; +static uint16_t GameRwy[GAME_MAX_RUNWAYS]; +static TYPE_FLIGHT_DATA FlightData; +static uint16_t GameRwyArray[GAME_MAX_RWY_LENGTH]; +static uint16_t GameUsedRwy[GAME_MAX_RUNWAYS]; +static uint16_t GameSelectedTile; + +// Instances for player-specific data +TYPE_PLAYER PlayerData[MAX_PLAYERS]; + +static char * GameFileList[] = { "cdrom:\\DATA\\SPRITES\\TILESET1.TIM;1" , + "cdrom:\\DATA\\SPRITES\\TILESET2.TIM;1" , + "cdrom:\\DATA\\LEVELS\\LEVEL1.PLT;1" , + "cdrom:\\DATA\\SPRITES\\GAMEPLN.TIM;1" , + "cdrom:\\DATA\\SPRITES\\PLNBLUE.CLT;1" , + "cdrom:\\DATA\\SPRITES\\MOUSE.TIM;1" }; + +static void * GameFileDest[] = { (GsSprite*)&GameTilesetSpr , + (GsSprite*)&GameTileset2Spr , + (TYPE_FLIGHT_DATA*)&FlightData , + (GsSprite*)&GamePlaneSpr , + NULL , + (GsSprite*)&GameMouseSpr }; + +static char * GameLevelList[] = { "cdrom:\\DATA\\LEVELS\\LEVEL1.LVL;1"}; +static uint8_t GameLevelBuffer[GAME_MAX_MAP_SIZE]; + +static uint8_t GameLevelColumns; +static uint8_t GameLevelSize; + +static char GameLevelTitle[LEVEL_TITLE_SIZE]; + +//Game local time +static uint8_t GameHour; +static uint8_t GameMinutes; + +//Local flag for two-player game mode. Obtained from Menu +static bool TwoPlayersActive; +//Index for first non-idle aircraft on list +static uint8_t firstActiveAircraft; +//Index for last non-idle aircraft on list +static uint8_t lastActiveAircraft; + +void Game(bool two_players) +{ + TwoPlayersActive = two_players; + GameInit(); + + while(1) + { + if(GamePause() == true) + { + // Exit game + break; + } + + GameEmergencyMode(); + + GameCalculations(); + + GameGraphics(); + + if(GameStartupFlag == true) + { + GameStartupFlag = false; + } + } + + EndAnimation(); + + SfxPlayTrack(INTRO_TRACK); +} + +bool GamePause(void) +{ + TYPE_PLAYER * ptrPlayer; + uint8_t i; + bool pause_flag = false; + + if(GameStartupFlag == true) + { + return false; + } + + for(i = 0 ; i < MAX_PLAYERS ; i++) + { + ptrPlayer = &PlayerData[i]; + // Run player-specific functions for each player + if(ptrPlayer->Active == true) + { + //dprintf("Released callback = 0x%08X\n", ptrPlayer->PadKeyReleased_Callback); + if(ptrPlayer->PadKeyReleased_Callback(PAD_START) == true) + { + dprintf("Player %d set pause_flag to true!\n",i); + pause_flag = true; + break; + } + } + } + + if(pause_flag == true) + { + // Blocking function: + // * Returns true if player pointed to by ptrPlayer wants to exit game + // * Returns false if player pointed to by ptrPlayer wants to resume game + return GameGuiPauseDialog(ptrPlayer); + } + + return false; +} + +void GameInit(void) +{ + uint8_t i; + uint32_t track; + + GameStartupFlag = true; + + LoadMenu( GameFileList, + GameFileDest, + sizeof(GameFileList) / sizeof(char*), + sizeof(GameFileDest) /sizeof(void*) ); + + GameLoadLevel(); + + GameGuiInit(); + + memset(GameRwy,0,GAME_MAX_RUNWAYS * sizeof(uint16_t) ); + + memset(GameUsedRwy,0,GAME_MAX_RUNWAYS * sizeof(uint16_t) ); + + PlayerData[PLAYER_ONE].Active = true; + PlayerData[PLAYER_ONE].PadKeyPressed_Callback = &PadOneKeyPressed; + PlayerData[PLAYER_ONE].PadKeyReleased_Callback = &PadOneKeyReleased; + PlayerData[PLAYER_ONE].PadDirectionKeyPressed_Callback = &PadOneDirectionKeyPressed; + PlayerData[PLAYER_ONE].FlightDataPage = 0; + + PlayerData[PLAYER_TWO].Active = TwoPlayersActive? true : false; + + if(PlayerData[PLAYER_TWO].Active == true) + { + PlayerData[PLAYER_TWO].PadKeyPressed_Callback = &PadTwoKeyPressed; + PlayerData[PLAYER_TWO].PadKeyReleased_Callback = &PadTwoKeyReleased; + PlayerData[PLAYER_TWO].PadDirectionKeyPressed_Callback = &PadTwoDirectionKeyPressed; + PlayerData[PLAYER_TWO].FlightDataPage = 0; + + // On 2-player mode, one player controls departure flights and + // other player controls arrival flights. + PlayerData[PLAYER_ONE].FlightDirection = DEPARTURE; + PlayerData[PLAYER_TWO].FlightDirection = ARRIVAL; + } + else + { + PlayerData[PLAYER_ONE].FlightDirection = DEPARTURE | ARRIVAL; + } + + for(i = 0; i < MAX_PLAYERS ; i++) + { + CameraInit(&PlayerData[i]); + PlayerData[i].ShowAircraftData = false; + PlayerData[i].SelectRunway = false; + PlayerData[i].SelectTaxiwayRunway = false; + PlayerData[i].LockTarget = false; + PlayerData[i].SelectedAircraft = 0; + PlayerData[i].FlightDataPage = 0; + memset(&PlayerData[i].Waypoints, 0, sizeof(uint16_t) * PLAYER_MAX_WAYPOINTS); + PlayerData[i].WaypointIdx = 0; + PlayerData[i].LastWaypointIdx = 0; + } + + firstActiveAircraft = 0; + lastActiveAircraft = 0; + + GameMouseSpr.x = MOUSE_X; + GameMouseSpr.y = MOUSE_Y; + GameMouseSpr.w = MOUSE_W; + GameMouseSpr.h = MOUSE_H; + GameMouseSpr.attribute = COLORMODE(COLORMODE_16BPP); + GameMouseSpr.r = NORMAL_LUMINANCE; + GameMouseSpr.g = NORMAL_LUMINANCE; + GameMouseSpr.b = NORMAL_LUMINANCE; + + GameGetRunwayArray(); + + GameSelectedTile = 0; + + AircraftInit(); + + LoadMenuEnd(); + + GfxSetGlobalLuminance(0); + + track = SystemRand(GAMEPLAY_FIRST_TRACK,GAMEPLAY_LAST_TRACK); + + SfxPlayTrack(track); +} + +void GameEmergencyMode(void) +{ + enum + { + ERROR_RECT_X = 32, + ERROR_RECT_W = X_SCREEN_RESOLUTION - (ERROR_RECT_X << 1), + + ERROR_RECT_Y = 16, + ERROR_RECT_H = Y_SCREEN_RESOLUTION - (ERROR_RECT_Y << 1), + + ERROR_RECT_R = 0, + ERROR_RECT_G = 32, + ERROR_RECT_B = NORMAL_LUMINANCE + }; + + GsRectangle errorRct; + + bzero((GsRectangle*)&errorRct, sizeof(GsRectangle)); + + while(SystemGetEmergencyMode() == true) + { + // Pad one has been disconnected during gameplay + // Show an error screen until it is disconnected again. + + GsSortCls(0,0,0); + + errorRct.x = ERROR_RECT_X; + errorRct.w = ERROR_RECT_W; + errorRct.y = ERROR_RECT_Y; + errorRct.h = ERROR_RECT_H; + + errorRct.r = ERROR_RECT_R; + errorRct.g = ERROR_RECT_G; + errorRct.b = ERROR_RECT_B; + + GsSortRectangle(&errorRct); + GfxDrawScene(); + } +} + +void GameCalculations(void) +{ + uint8_t i; + + GameClock(); + GameAircraftState(); + GameActiveAircraft(); + GameFirstLastAircraftIndex(); + AircraftHandler(); + + for(i = 0 ; i < MAX_PLAYERS ; i++) + { + // Run player-specific functions for each player + if(PlayerData[i].Active == true) + { + GamePlayerHandler(&PlayerData[i], &FlightData); + } + } + + if(PadOneKeyReleased(PAD_CIRCLE) == true) + { + for(i = 0; i < FlightData.nAircraft ; i++) + { + /*typedef struct + { + FL_DIR FlightDirection[GAME_MAX_AIRCRAFT]; + char strFlightNumber[GAME_MAX_AIRCRAFT][GAME_MAX_CHARACTERS]; + uint8_t Passengers[GAME_MAX_AIRCRAFT]; + uint8_t Hours[GAME_MAX_AIRCRAFT]; + uint8_t Minutes[GAME_MAX_AIRCRAFT]; + uint8_t Parking[GAME_MAX_AIRCRAFT]; + }TYPE_FLIGHT_DATA;*/ + + dprintf("\n*****************\n"); + dprintf("\tAIRCRAFT %d\n",i); + dprintf("*****************\n"); + + if(FlightData.FlightDirection[i] == ARRIVAL) + { + dprintf("Direction: %s\n","Arrival"); + } + else if(FlightData.FlightDirection[i] == DEPARTURE) + { + dprintf("Direction: %s\n","Arrival"); + } + + dprintf("Time: %d:%d\n",FlightData.Hours[i],FlightData.Minutes[i]); + + dprintf("State: "); + + switch(FlightData.State[i]) + { + case STATE_APPROACH: + dprintf("Approach"); + break; + + case STATE_TAXIING: + dprintf("Taxiing"); + break; + + case STATE_FINAL: + dprintf("Final"); + break; + + case STATE_IDLE: + dprintf("Idle"); + break; + + case STATE_PARKED: + dprintf("Parked"); + break; + + case STATE_LANDED: + dprintf("Landed"); + break; + + case STATE_TAKEOFF: + dprintf("Takeoff"); + break; + + default: + break; + } + dprintf("\n"); + } + + dprintf("Active aircraft: %d\n",FlightData.ActiveAircraft); + } + +} + +void GameFirstLastAircraftIndex(void) +{ + bool first_set = false; + uint8_t i; + + for(i = 0; i < GAME_MAX_AIRCRAFT ; i++) + { + if(FlightData.State[i] != STATE_IDLE) + { + if(first_set == false) + { + firstActiveAircraft = i; + first_set = true; + } + lastActiveAircraft = i; + } + } +} + +uint8_t GameGetFirstActiveAircraft(void) +{ + return firstActiveAircraft; +} + +uint8_t GameGetLastActiveAircraft(void) +{ + return lastActiveAircraft; +} + +void GamePlayerHandler(TYPE_PLAYER * ptrPlayer, TYPE_FLIGHT_DATA * ptrFlightData) +{ + ptrPlayer->SelectedTile = 0; // Reset selected tile if no states + // which use this are currently active. + ptrPlayer->InvalidPath = false; // Do the same thing for "InvalidPath". + + GameStateLockTarget(ptrPlayer); + GameStateSelectRunway(ptrPlayer, ptrFlightData); + GameStateSelectTaxiwayRunway(ptrPlayer, ptrFlightData); + GameStateSelectTaxiwayParking(ptrPlayer, ptrFlightData); + GameStateShowAircraft(ptrPlayer, ptrFlightData); + CameraHandler(ptrPlayer); + GameGuiActiveAircraftList(ptrPlayer, ptrFlightData); + GameGuiActiveAircraftPage(ptrPlayer, ptrFlightData); + GameSelectAircraftFromList(ptrPlayer, ptrFlightData); +} + +void GameClock(void) +{ + if(System1SecondTick() == true) + { + GameMinutes++; + + if(GameMinutes >= 60) + { + GameHour++; + GameMinutes = 0; + } + + if(GameHour >= 24) + { + GameHour = 0; + } + } + + GameClockFlights(); +} + +void GameClockFlights(void) +{ + uint8_t i; + + for(i = 0; i < FlightData.nAircraft ; i++) + { + if(System1SecondTick() == true) + { + if( (FlightData.Minutes[i] == 0) + && + (FlightData.Hours[i] > 0) ) + { + FlightData.Minutes[i] = 60; + FlightData.Hours[i]--; + } + + if(FlightData.Minutes[i] > 0) + { + FlightData.Minutes[i]--; + } + } + } +} + +void GameGraphics(void) +{ + int i; + + while( (GfxIsGPUBusy() == true) + || + (SystemRefreshNeeded() == false) ); + + GsSortCls(0,0,NORMAL_LUMINANCE >> 1); + + if(GfxGetGlobalLuminance() < NORMAL_LUMINANCE) + { + GfxIncreaseGlobalLuminance(1); + } + + for(i = 0; i < MAX_PLAYERS ; i++) + { + if(PlayerData[i].Active == true) + { + GameRenderLevel(&PlayerData[i]); + AircraftRender(&PlayerData[i]); + } + } + + GameGuiAircraftNotificationRequest(&FlightData); + + GameGuiBubble(&FlightData); + + GameGuiClock(GameHour,GameMinutes); + + for(i = 0; i < MAX_PLAYERS ; i++) + { + GameGuiAircraftList(&PlayerData[i], &FlightData); + } + + GfxDrawScene(); +} + +void GameLoadLevel(void) +{ + uint8_t i = 0; + uint8_t * ptrBuffer; + char LevelHeader[LEVEL_MAGIC_NUMBER_SIZE + 1]; + + /* TODO - Very important */ + // Map contents (that means, without header) should be copied to GameLevelBuffer + // Header treatment (magic number, map size, map title...) should be done + // using System's file buffer. + + if(SystemLoadFile(GameLevelList[0]) == false) + { + return; + } + + ptrBuffer = SystemGetBufferAddress(); + + //SystemLoadFileToBuffer(GameLevelList[0],GameLevelBuffer,GAME_MAX_MAP_SIZE); + + memset(LevelHeader,0, LEVEL_MAGIC_NUMBER_SIZE + 1); + + memcpy(LevelHeader,ptrBuffer,LEVEL_MAGIC_NUMBER_SIZE); + + LevelHeader[LEVEL_MAGIC_NUMBER_SIZE] = '\0'; + + dprintf("Level header: %s\n",LevelHeader); + + if(strncmp(LevelHeader,LEVEL_MAGIC_NUMBER_STRING,LEVEL_MAGIC_NUMBER_SIZE) != 0) + { + dprintf("Invalid level header! Read \"%s\" instead of \"ATC\"\n",LevelHeader); + return; + } + + i += LEVEL_MAGIC_NUMBER_SIZE; + + GameLevelColumns = ptrBuffer[i++]; + + dprintf("Level size: %d\n",GameLevelColumns); + + if( (GameLevelColumns < MIN_MAP_COLUMNS) + || + (GameLevelColumns > MAX_MAP_COLUMNS) ) + { + dprintf("Invalid map size! Value: %d\n",GameLevelColumns); + return; + } + + GameLevelSize = GameLevelColumns * GameLevelColumns; + + memset(GameLevelTitle,0,LEVEL_TITLE_SIZE); + + memcpy(GameLevelTitle,&ptrBuffer[i],LEVEL_TITLE_SIZE); + + dprintf("Game level title: %s\n",GameLevelTitle); + + i += LEVEL_TITLE_SIZE; + + memset(GameLevelBuffer,0,GAME_MAX_MAP_SIZE); + + i = LEVEL_HEADER_SIZE; + + memcpy(GameLevelBuffer,&ptrBuffer[i],GameLevelSize); + +} + +char* GetGameLevelTitle(void) +{ + return GameLevelTitle; +} + +void GameAircraftState(void) +{ + uint8_t i; + + for(i = 0; i < FlightData.nAircraft ; i++) + { + if( (FlightData.Hours[i] == 0) + && + (FlightData.Minutes[i] == 0) + && + (FlightData.State[i] == STATE_IDLE) ) + { + if(FlightData.FlightDirection[i] == DEPARTURE) + { + FlightData.State[i] = STATE_PARKED; + } + else if(FlightData.FlightDirection[i] == ARRIVAL) + { + FlightData.State[i] = STATE_APPROACH; + } + + // Create notification request for incoming aircraft + FlightData.NotificationRequest[i] = true; + } + } +} + + +void GameRenderLevel(TYPE_PLAYER * ptrPlayer) +{ + uint16_t i; + uint16_t j; + uint8_t columns = 0; + uint8_t rows = 0; + bool flip_id; + bool used_rwy; + uint8_t aux_id; + GsSprite * ptrTileset; + static unsigned char rwy_sine = 0; + static bool rwy_sine_decrease = false; + TYPE_ISOMETRIC_POS tileIsoPos; + TYPE_CARTESIAN_POS tileCartPos; + + // Prepare runway to be painted in blue if player is on runway selection mode + if(ptrPlayer->SelectRunway == true) + { + GameGetSelectedRunwayArray(GameRwy[ptrPlayer->SelectedRunway]); + /*dprintf("Runway array:\n"); + + for(j = 0; j < GAME_MAX_RWY_LENGTH; j++) + { + dprintf("%d ",GameRwyArray[j]); + } + + dprintf("\n");*/ + } + + for(i = 0 ; i < GameLevelSize; i++) + { + // Flipped tiles have bit 7 enabled + if(GameLevelBuffer[i] & TILE_MIRROR_FLAG) + { + flip_id = true; + aux_id = GameLevelBuffer[i]; + GameLevelBuffer[i] &= ~(TILE_MIRROR_FLAG); + } + else + { + flip_id = false; + } + + if(GameLevelBuffer[i] == TILE_NOTHING) + { + // Skip empty tiles + continue; + } + + if(GameLevelBuffer[i] <= LAST_TILE_TILESET1) + { + // Draw using GameTilesetSpr + ptrTileset = &GameTilesetSpr; + } + else if( (GameLevelBuffer[i] > LAST_TILE_TILESET1) + && + (GameLevelBuffer[i] <= LAST_TILE_TILESET2) ) + { + // Draw using GameTileset2Spr + ptrTileset = &GameTileset2Spr; + } + else + { + ptrTileset = NULL; + + if(flip_id == false) + { + continue; + } + } + + ptrTileset->w = TILE_SIZE; + ptrTileset->h = TILE_SIZE; + + used_rwy = false; + + if( (ptrPlayer->SelectRunway == true) + && + (i != 0) + && + (SystemContains_u16(i, GameRwyArray, GAME_MAX_RWY_LENGTH) == true) ) + { + for(j = 0; j < GAME_MAX_RUNWAYS; j++) + { + if(GameUsedRwy[j] != 0) + { + if(SystemContains_u16(GameUsedRwy[j], GameRwyArray, GAME_MAX_RWY_LENGTH) == true) + { + used_rwy = true; + break; + } + } + } + + if(used_rwy == true) + { + ptrTileset->r = rwy_sine; + ptrTileset->b = NORMAL_LUMINANCE >> 2; + ptrTileset->g = NORMAL_LUMINANCE >> 2; + } + else + { + ptrTileset->r = NORMAL_LUMINANCE >> 2; + ptrTileset->g = NORMAL_LUMINANCE >> 2; + ptrTileset->b = rwy_sine; + } + } + else if( ( (ptrPlayer->SelectTaxiwayParking == true) + || + (ptrPlayer->SelectTaxiwayRunway == true) ) + && + (i != 0) + && + ( (SystemContains_u16(i, ptrPlayer->Waypoints, PLAYER_MAX_WAYPOINTS) == true) + || + (i == ptrPlayer->SelectedTile) ) + && + (ptrPlayer->SelectedTile != GAME_INVALID_TILE_SELECTION) ) + { + if(ptrPlayer->InvalidPath == true) + { + ptrTileset->r = rwy_sine; + ptrTileset->b = NORMAL_LUMINANCE >> 2; + ptrTileset->g = NORMAL_LUMINANCE >> 2; + } + else + { + ptrTileset->r = NORMAL_LUMINANCE >> 2; + ptrTileset->g = NORMAL_LUMINANCE >> 2; + ptrTileset->b = rwy_sine; + } + } + else + { + ptrTileset->r = NORMAL_LUMINANCE; + ptrTileset->g = NORMAL_LUMINANCE; + ptrTileset->b = NORMAL_LUMINANCE; + } + + if(System100msTick() == true) + { + if(rwy_sine_decrease == false) + { + if(rwy_sine < 255) + { + rwy_sine++; + } + else + { + rwy_sine_decrease = true; + } + } + else + { + if(rwy_sine > (NORMAL_LUMINANCE >> 2)) + { + rwy_sine--; + } + else + { + rwy_sine_decrease = false; + } + } + } + + // TODO: Isometric -> Cartesian conversion + tileIsoPos.x = columns << (TILE_SIZE_BIT_SHIFT); + tileIsoPos.y = rows << (TILE_SIZE_BIT_SHIFT); + tileIsoPos.z = 0; + + tileCartPos = GfxIsometricToCartesian(&tileIsoPos); + + ptrTileset->x = tileCartPos.x; + ptrTileset->y = tileCartPos.y; + + // Set coordinate origin to left upper corner + ptrTileset->x -= TILE_SIZE >> 1; + ptrTileset->y -= TILE_SIZE >> 2; + + /*ptrTileset->x = columns << (TILE_SIZE_BIT_SHIFT - 1); + ptrTileset->x -= rows << (TILE_SIZE_BIT_SHIFT - 1); + + ptrTileset->y = rows << (TILE_SIZE_BIT_SHIFT - 2); + ptrTileset->y += columns << (TILE_SIZE_BIT_SHIFT - 2);*/ + + if(columns < GameLevelColumns -1 ) + { + columns++; + } + else + { + rows++; + columns = 0; + } + + if(ptrTileset != NULL) + { + if(flip_id == true) + { + ptrTileset->attribute |= H_FLIP; + } + } + + ptrTileset->u = (short)(GameLevelBuffer[i] % COLUMNS_PER_TILESET)<<TILE_SIZE_BIT_SHIFT; + ptrTileset->v = (short)(GameLevelBuffer[i] / COLUMNS_PER_TILESET)<<TILE_SIZE_BIT_SHIFT; + + if(flip_id == true) + { + flip_id = false; + GameLevelBuffer[i] = aux_id; + } + + // dprintf("Tile %d, attribute 0x%X\n",i,ptrTileset->attribute); + + CameraApplyCoordinatesToSprite(ptrPlayer, ptrTileset); + GfxSortSprite(ptrTileset); + + if(ptrTileset->attribute & H_FLIP) + { + ptrTileset->attribute &= ~(H_FLIP); + } + } + + if( (ptrPlayer->SelectTaxiwayParking == true) + || + (ptrPlayer->SelectTaxiwayRunway == true) ) + { + GfxSortSprite(&GameMouseSpr); + } + + /*if(PadOneKeyReleased(PAD_CROSS) == true) + { + for(i = 0; i < GameLevelSize; i++) + { + dprintf("Tile number %d, ID: %d\n",i,GameLevelBuffer[i]); + } + }*/ +} + +void GameSetTime(uint8_t hour, uint8_t minutes) +{ + GameHour = hour; + GameMinutes = minutes; +} + +void GameActiveAircraft(void) +{ + uint8_t i; + + FlightData.ActiveAircraft = 0; + + for(i = 0 ; i < FlightData.nAircraft ; i++) + { + if(FlightData.State[i] != STATE_IDLE) + { + FlightData.ActiveAircraft++; + } + } +} + +void GameStateShowAircraft(TYPE_PLAYER * ptrPlayer, TYPE_FLIGHT_DATA * ptrFlightData) +{ + if(ptrPlayer->ShowAircraftData == true) + { + if(ptrPlayer->PadKeyReleased_Callback(PAD_TRIANGLE) == true) + { + ptrPlayer->ShowAircraftData = false; + } + else if(ptrPlayer->PadKeyReleased_Callback(PAD_SQUARE) == true) + { + dprintf("Aircraft state = %d. STATE_IDLE = %d\n", + ptrFlightData->State[ptrPlayer->SelectedAircraft], + STATE_IDLE); + + if(ptrFlightData->State[ptrPlayer->SelectedAircraft] != STATE_IDLE) + { + ptrPlayer->LockTarget = true; + ptrPlayer->LockedAircraft = ptrPlayer->SelectedAircraft; + } + } + } + + if(ptrPlayer->PadKeyReleased_Callback(PAD_CIRCLE) == true) + { + if(GameGuiShowAircraftDataSpecialConditions(ptrPlayer) == false) + { + //Invert ptrPlayer->ShowAircraftData value + ptrPlayer->ShowAircraftData = ptrPlayer->ShowAircraftData ? false : true; + } + } +} + +void GameStateLockTarget(TYPE_PLAYER * ptrPlayer) +{ + if(ptrPlayer->LockTarget == true) + { + CameraMoveToIsoPos(ptrPlayer, AircraftGetIsoPos(ptrPlayer->LockedAircraft) ); + + if(ptrPlayer->PadKeyReleased_Callback(PAD_SQUARE) == true) + { + ptrPlayer->LockTarget = false; + ptrPlayer->LockedAircraft = 0; + } + } +} + +void GameStateSelectTaxiwayRunway(TYPE_PLAYER * ptrPlayer, TYPE_FLIGHT_DATA * ptrFlightData) +{ + TYPE_ISOMETRIC_POS IsoPos = CameraGetIsoPos(ptrPlayer); + uint8_t i; + uint16_t target_tile; + + /*dprintf("Camera is pointing to {%d,%d}\n",IsoPos.x, IsoPos.y);*/ + + if(ptrPlayer->SelectTaxiwayRunway == true) + { + // Under this mode, always reset locking target. + ptrPlayer->LockTarget = false; + ptrPlayer->LockedAircraft = 0; + + ptrPlayer->SelectedTile = GameGetTileFromIsoPosition(&IsoPos); + + if(GamePathToTile(ptrPlayer) == false) + { + ptrPlayer->InvalidPath = true; + } + + if(ptrPlayer->PadKeyReleased_Callback(PAD_TRIANGLE) == true) + { + // State exit. + ptrPlayer->SelectTaxiwayRunway = false; + // Clear waypoints array. + memset(ptrPlayer->Waypoints, 0, sizeof(uint16_t) * PLAYER_MAX_WAYPOINTS); + ptrPlayer->WaypointIdx = 0; + ptrPlayer->LastWaypointIdx = 0; + } + else if(ptrPlayer->PadKeyReleased_Callback(PAD_CROSS) == true) + { + if(ptrPlayer->InvalidPath == false) + { + for(i = 0; i < PLAYER_MAX_WAYPOINTS; i++) + { + if(ptrPlayer->Waypoints[i] == 0) + { + break; + } + + ptrPlayer->LastWaypointIdx = i; + } + + target_tile = GameLevelBuffer[ptrPlayer->Waypoints[ptrPlayer->LastWaypointIdx]]; + + if( (target_tile == TILE_RWY_START_1) + || + (target_tile == (TILE_RWY_START_1 | TILE_MIRROR_FLAG) ) + || + (target_tile == TILE_RWY_START_2) + || + (target_tile == (TILE_RWY_START_2 | TILE_MIRROR_FLAG) ) ) + { + // TODO: Assign path to aircraft + AircraftFromFlightDataIndexAddTargets(ptrPlayer->LockedAircraft, ptrPlayer->Waypoints); + dprintf("Added these targets to aircraft %d:\n", ptrPlayer->LockedAircraft); + + for(i = 0; i < PLAYER_MAX_WAYPOINTS; i++) + { + dprintf("%d ",ptrPlayer->Waypoints[i]); + } + + dprintf("\n"); + + ptrPlayer->SelectTaxiwayParking = false; + // Clear waypoints array. + memset(ptrPlayer->Waypoints, 0, sizeof(uint16_t) * PLAYER_MAX_WAYPOINTS); + ptrPlayer->WaypointIdx = 0; + ptrPlayer->LastWaypointIdx = 0; + + ptrFlightData->State[ptrPlayer->LockedAircraft] = STATE_TAXIING; + } + } + } + } +} + +void GameStateSelectTaxiwayParking(TYPE_PLAYER * ptrPlayer, TYPE_FLIGHT_DATA * ptrFlightData) +{ + TYPE_ISOMETRIC_POS IsoPos = CameraGetIsoPos(ptrPlayer); + uint8_t i; + uint16_t target_tile; + + if(ptrPlayer->SelectTaxiwayParking == true) + { + // Under this mode, always reset locking target. + ptrPlayer->LockTarget = false; + ptrPlayer->LockedAircraft = 0; + + ptrPlayer->SelectedTile = GameGetTileFromIsoPosition(&IsoPos); + + if(GamePathToTile(ptrPlayer) == false) + { + ptrPlayer->InvalidPath = true; + } + + if(ptrPlayer->PadKeyReleased_Callback(PAD_TRIANGLE) == true) + { + // State exit. + ptrPlayer->SelectTaxiwayParking = false; + // Clear waypoints array. + memset(ptrPlayer->Waypoints, 0, sizeof(uint16_t) * PLAYER_MAX_WAYPOINTS); + ptrPlayer->WaypointIdx = 0; + ptrPlayer->LastWaypointIdx = 0; + } + else if(ptrPlayer->PadKeyReleased_Callback(PAD_CROSS) == true) + { + if(ptrPlayer->InvalidPath == false) + { + for(i = 0; i < PLAYER_MAX_WAYPOINTS; i++) + { + if(ptrPlayer->Waypoints[i] == 0) + { + break; + } + + ptrPlayer->LastWaypointIdx = i; + } + + target_tile = GameLevelBuffer[ptrPlayer->Waypoints[ptrPlayer->LastWaypointIdx]]; + + dprintf("ptrPlayer->LastWaypointIdx = %d\n", + ptrPlayer->LastWaypointIdx); + + dprintf("target_tile = %d, TILE_PARKING = %d\n", + target_tile, + TILE_PARKING); + + if( (target_tile == TILE_PARKING) + || + (target_tile == (TILE_PARKING | TILE_MIRROR_FLAG) ) ) + { + // TODO: Assign path to aircraft + AircraftFromFlightDataIndexAddTargets(ptrPlayer->LockedAircraft, ptrPlayer->Waypoints); + + dprintf("Added these targets to aircraft %d:\n", ptrPlayer->LockedAircraft); + + for(i = 0; i < PLAYER_MAX_WAYPOINTS; i++) + { + dprintf("%d ",ptrPlayer->Waypoints[i]); + } + + dprintf("\n"); + + ptrPlayer->SelectTaxiwayParking = false; + // Clear waypoints array. + memset(ptrPlayer->Waypoints, 0, sizeof(uint16_t) * PLAYER_MAX_WAYPOINTS); + ptrPlayer->WaypointIdx = 0; + ptrPlayer->LastWaypointIdx = 0; + + ptrFlightData->State[ptrPlayer->LockedAircraft] = STATE_TAXIING; + } + } + } + } +} + +void GameStateSelectRunway(TYPE_PLAYER * ptrPlayer, TYPE_FLIGHT_DATA * ptrFlightData) +{ + uint8_t i; + bool success; + + if(ptrPlayer->SelectRunway == true) + { + // Under this mode, always reset locking target. + ptrPlayer->LockTarget = false; + ptrPlayer->LockedAircraft = 0; + + if(ptrPlayer->PadKeyReleased_Callback(PAD_TRIANGLE) == true) + { + ptrPlayer->SelectRunway = false; + } + else if(ptrPlayer->PadKeyReleased_Callback(PAD_CROSS) == true) + { + ptrPlayer->SelectRunway = false; + + dprintf("ptrPlayer->SelectedRunway = %d\n", GameRwy[ptrPlayer->SelectedRunway]); + if(SystemContains_u16(GameRwy[ptrPlayer->SelectedRunway], GameUsedRwy, GAME_MAX_RUNWAYS) == false) + { + ptrPlayer->SelectRunway = false; + dprintf("Player selected runway %d!\n",GameRwy[ptrPlayer->SelectedRunway]); + + success = false; + + for(i = 0; i < GAME_MAX_RUNWAYS; i++) + { + if(GameUsedRwy[i] == 0) + { + GameAssignRunwaytoAircraft(ptrPlayer, ptrFlightData); + success = true; + GameUsedRwy[i] = GameRwy[ptrPlayer->SelectedRunway]; + break; + } + } + + if(success == false) + { + dprintf("No available runways!\n"); + } + } + } + else if(ptrPlayer->PadKeyReleased_Callback(PAD_LEFT) == true) + { + if(ptrPlayer->SelectedRunway != 0) + { + ptrPlayer->SelectedRunway--; + } + } + else if(ptrPlayer->PadKeyReleased_Callback(PAD_RIGHT) == true) + { + if(ptrPlayer->SelectedRunway < GAME_MAX_RUNWAYS) + { + if(GameRwy[ptrPlayer->SelectedRunway + 1] != 0) + { + ptrPlayer->SelectedRunway++; + } + } + } + } +} + +void GameGetRunwayArray(void) +{ + uint8_t i; + uint8_t j = 0; + + for(i = 0; i < GameLevelSize; i++) + { + if(GameLevelBuffer[i] == TILE_RWY_START_1) + { + if(SystemContains_u8(i, GameLevelBuffer, GAME_MAX_RUNWAYS) == false) + { + GameRwy[j++] = i; + } + } + } + + dprintf("GameRwy = "); + + for(i = 0; i < GAME_MAX_RUNWAYS; i++) + { + if(GameRwy[i] == 0) + { + break; + } + + dprintf("%d ", GameRwy[i]); + } + + dprintf("\n"); +} + +void GameSelectAircraftFromList(TYPE_PLAYER * ptrPlayer, TYPE_FLIGHT_DATA * ptrFlightData) +{ + FL_STATE aircraftState = ptrFlightData->State[ptrPlayer->SelectedAircraft]; + + if(ptrPlayer->ShowAircraftData == true) + { + if(ptrPlayer->PadKeyReleased_Callback(PAD_CROSS) == true) + { + if(ptrPlayer->ActiveAircraft != 0) + { + ptrPlayer->ShowAircraftData = false; + + switch(aircraftState) + { + case STATE_APPROACH: + ptrPlayer->SelectRunway = true; + break; + + case STATE_PARKED: + ptrPlayer->SelectTaxiwayRunway = true; + GameSelectAircraft(ptrPlayer); + break; + + case STATE_LANDED: + ptrPlayer->SelectTaxiwayParking = true; + // Move camera to selected aircraft and add first waypoint. + GameSelectAircraft(ptrPlayer); + break; + + default: + dprintf("Incompatible state %d!\n",aircraftState); + // States remain unchanged + ptrPlayer->SelectRunway = false; + ptrPlayer->SelectTaxiwayRunway = false; + ptrPlayer->ShowAircraftData = true; + break; + } + } + } + } +} + +void GameGetSelectedRunwayArray(uint16_t rwyHeader) +{ + typedef enum t_rwydir + { + RWY_DIR_EAST = 0, + RWY_DIR_WEST, + RWY_DIR_NORTH, + RWY_DIR_SOUTH, + }RWY_DIR; + + static uint16_t last_tile = 0; + static uint8_t i = 0; + static RWY_DIR dir; + + if(rwyHeader != 0) + { + // This function is called recursively. + // Since 0 is not a valid value (it's not allowed to place + // a runway header on first tile), it is used to determine + // when to start creating the array. + memset(GameRwyArray, 0, GAME_MAX_RWY_LENGTH * sizeof(uint16_t)); + last_tile = rwyHeader; + i = 0; + + switch(GameLevelBuffer[rwyHeader]) + { + case TILE_RWY_START_1: + dir = RWY_DIR_EAST; + break; + case TILE_RWY_START_2: + dir = RWY_DIR_WEST; + break; + case TILE_RWY_START_1 | TILE_MIRROR_FLAG: + dir = RWY_DIR_SOUTH; + case TILE_RWY_START_2 | TILE_MIRROR_FLAG: + dir = RWY_DIR_NORTH; + default: + dprintf("Unknown direction for tile %d\n",rwyHeader); + return; + break; + } + } + else + { + if( (GameLevelBuffer[last_tile] == TILE_RWY_START_1) + || + (GameLevelBuffer[last_tile] == TILE_RWY_START_2) + || + (GameLevelBuffer[last_tile] == (TILE_RWY_START_1 | TILE_MIRROR_FLAG) ) + || + (GameLevelBuffer[last_tile] == (TILE_RWY_START_2 | TILE_MIRROR_FLAG) ) ) + { + // Runway end found + GameRwyArray[i++] = last_tile; + return; + } + } + + GameRwyArray[i++] = last_tile; + + switch(dir) + { + case RWY_DIR_EAST: + last_tile++; + break; + case RWY_DIR_WEST: + last_tile--; + case RWY_DIR_NORTH: + last_tile -= GameLevelColumns; + case RWY_DIR_SOUTH: + last_tile += GameLevelColumns; + } + + GameGetSelectedRunwayArray(0); +} + +void GameAssignRunwaytoAircraft(TYPE_PLAYER * ptrPlayer, TYPE_FLIGHT_DATA * ptrFlightData) +{ + uint16_t assignedRwy = GameRwy[ptrPlayer->SelectedRunway]; + uint8_t aircraftIndex = ptrPlayer->SelectedAircraft; + uint16_t rwyExit; + uint32_t i; + uint16_t targets[AIRCRAFT_MAX_TARGETS]; + uint8_t rwyTiles[GAME_MAX_RWY_LENGTH]; + + memset(targets, 0, sizeof(uint16_t) * AIRCRAFT_MAX_TARGETS); + + // Remember that ptrPlayer->SelectedAircraft contains an index to + // be used with ptrFlightData. + + /*typedef enum t_flstate +{ + STATE_IDLE = 0, + STATE_PARKED, + STATE_TAXIING, + STATE_APPROACH, + STATE_FINAL + }FL_STATE;*/ + + dprintf("aircraftIndex = %d\n",aircraftIndex); + + if(ptrFlightData->State[aircraftIndex] == STATE_APPROACH) + { + ptrFlightData->State[aircraftIndex] = STATE_FINAL; + + GameGetSelectedRunwayArray(assignedRwy); + + for(i = 0; i < GAME_MAX_RWY_LENGTH; i++) + { + rwyTiles[i] = GameLevelBuffer[GameRwyArray[i]]; + } + + i = SystemIndexOf_U8((uint8_t)TILE_RWY_EXIT, rwyTiles, 0, GAME_MAX_RWY_LENGTH); + + if(i == -1) + { + dprintf("ERROR: Could not find TILE_RWY_EXIT for runway header %d.\n", assignedRwy); + return; + } + + i = SystemIndexOf_U8((uint8_t)TILE_RWY_EXIT, rwyTiles, i + 1, GAME_MAX_RWY_LENGTH); + + if(i == -1) + { + dprintf("ERROR: Could not find second TILE_RWY_EXIT for runway header %d.\n", assignedRwy); + return; + } + + rwyExit = GameRwyArray[i]; + + targets[0] = assignedRwy; + targets[1] = rwyExit; + + if( AircraftAddNew(ptrFlightData, + aircraftIndex, + targets ) == false) + { + dprintf("Exceeded maximum aircraft number!\n"); + return; + } + } +} + +fix16_t GameGetXFromTile(uint16_t tile) +{ + fix16_t retVal; + + tile %= GameLevelColumns; + + retVal = (fix16_t)(tile << TILE_SIZE_BIT_SHIFT); + + // Always point to tile center + retVal += TILE_SIZE >> 1; + + retVal = fix16_from_int(retVal); + + return retVal; +} + +fix16_t GameGetYFromTile(uint16_t tile) +{ + fix16_t retVal; + + tile /= GameLevelColumns; + + retVal = (fix16_t)(tile << TILE_SIZE_BIT_SHIFT); + + // Always point to tile center + retVal += TILE_SIZE >> 1; + + retVal = fix16_from_int(retVal); + + return retVal; +} + +void GameTargetsReached(uint8_t index) +{ + switch(FlightData.State[index]) + { + case STATE_FINAL: + FlightData.State[index] = STATE_LANDED; + break; + + default: + break; + } +} + +bool GameGuiShowAircraftDataSpecialConditions(TYPE_PLAYER * ptrPlayer) +{ + // Aircraft list data cannot be shown under these conditions. + + if( (ptrPlayer->SelectRunway == true) + || + (ptrPlayer->SelectTaxiwayParking == true) + || + (ptrPlayer->SelectTaxiwayRunway == true) ) + { + return true; + } + + return false; +} + +uint16_t GameGetTileFromIsoPosition(TYPE_ISOMETRIC_POS * IsoPos) +{ + uint16_t tile; + + if( (IsoPos->x < 0) || (IsoPos->y < 0) ) + { + return GAME_INVALID_TILE_SELECTION; // Invalid XYZ position + } + + tile = IsoPos->x >> TILE_SIZE_BIT_SHIFT; + tile += (IsoPos->y >> TILE_SIZE_BIT_SHIFT) * GameLevelColumns; + + /*dprintf("Returning tile %d from position {%d, %d, %d}\n", + tile, + IsoPos->x, + IsoPos->y, + IsoPos->z );*/ + + return tile; +} + +uint8_t GameGetLevelColumns(void) +{ + return GameLevelColumns; +} + +void GamePlayerAddWaypoint(TYPE_PLAYER * ptrPlayer) +{ + GamePlayerAddWaypoint_Ex(ptrPlayer, ptrPlayer->SelectedTile); +} + +void GamePlayerAddWaypoint_Ex(TYPE_PLAYER * ptrPlayer, uint16_t tile) +{ + // "_Ex" function allow selecting a certain tile, whereas the other one + // is a particulare case of "_Ex" for tile = ptrPlayer->SelectedTIle. + + if(ptrPlayer->WaypointIdx >= PLAYER_MAX_WAYPOINTS) + { + dprintf("No available waypoints for this player!\n"); + return; + } + + /*dprintf("Added tile %d to ptrPlayer->Waypoints[%d]\n", + tile, + ptrPlayer->WaypointIdx);*/ + + ptrPlayer->Waypoints[ptrPlayer->WaypointIdx++] = tile; +} + +bool GamePathToTile(TYPE_PLAYER * ptrPlayer) +{ + // Given an input TYPE_PLAYER structure and a selected tile, + // it updates current Waypoints array with all tiles between two points. + // If one of these tiles do not belong to desired tiles (i.e.: grass, + // water, buildings...), then false is returned. + + uint8_t AcceptedTiles[] = { TILE_ASPHALT, TILE_ASPHALT_WITH_BORDERS, + TILE_PARKING, TILE_RWY_START_1, + TILE_RWY_START_2, TILE_RWY_MID, + TILE_RWY_EXIT, TILE_TAXIWAY_CORNER_GRASS, + TILE_TAXIWAY_CORNER_GRASS_2, TILE_TAXIWAY_GRASS, + TILE_TAXIWAY_INTERSECT_GRASS}; + + uint8_t i; + uint8_t j; + + uint16_t x_diff; + uint16_t y_diff; + uint16_t temp_tile; + + if(ptrPlayer->SelectedTile == GAME_INVALID_TILE_SELECTION) + { + return false; + } + + for(i = (ptrPlayer->LastWaypointIdx + 1); i < PLAYER_MAX_WAYPOINTS; i++) + { + ptrPlayer->Waypoints[i] = 0; + } + + ptrPlayer->WaypointIdx = ptrPlayer->LastWaypointIdx + 1; + + x_diff = (uint16_t)abs( (ptrPlayer->SelectedTile % GameLevelColumns) - + (ptrPlayer->Waypoints[ptrPlayer->LastWaypointIdx] % GameLevelColumns) ); + + y_diff = (uint16_t)abs( (ptrPlayer->SelectedTile / GameLevelColumns) - + (ptrPlayer->Waypoints[ptrPlayer->LastWaypointIdx] / GameLevelColumns) ); + + /*dprintf("SelectedTile = %d, ptrPlayer->Waypoints[%d] = %d\n", + ptrPlayer->SelectedTile, + 0, + ptrPlayer->Waypoints[0] ); + + dprintf("X = abs(%d - %d)\n", + ptrPlayer->SelectedTile % GameLevelColumns, + (ptrPlayer->Waypoints[0] % GameLevelColumns) ); + + dprintf("Y = abs(%d - %d)\n", + ptrPlayer->SelectedTile / GameLevelColumns, + (ptrPlayer->Waypoints[0] / GameLevelColumns) ); + + dprintf("Diff = {%d, %d}\n", x_diff, y_diff);*/ + + // At this point, we have to update current waypoints list. + // ptrPlayer->Waypoints[ptrPlayer->WaypointIdx - 1] points to the last inserted point, + // so now we have to determine how many points need to be created. + + temp_tile = ptrPlayer->Waypoints[ptrPlayer->LastWaypointIdx]; + + if(x_diff >= y_diff) + { + while( (x_diff--) > 0) + { + if( (ptrPlayer->SelectedTile % GameLevelColumns) > + (ptrPlayer->Waypoints[ptrPlayer->LastWaypointIdx] % GameLevelColumns) ) + { + temp_tile++; + } + else + { + temp_tile--; + } + + if(SystemContains_u16(temp_tile, ptrPlayer->Waypoints, PLAYER_MAX_WAYPOINTS) == false) + { + GamePlayerAddWaypoint_Ex(ptrPlayer, temp_tile); + } + } + + while( (y_diff--) > 0) + { + if( (ptrPlayer->SelectedTile / GameLevelColumns) > + (ptrPlayer->Waypoints[ptrPlayer->LastWaypointIdx] / GameLevelColumns) ) + { + temp_tile += GameLevelColumns; + } + else + { + temp_tile -= GameLevelColumns; + } + + if(SystemContains_u16(temp_tile, ptrPlayer->Waypoints, PLAYER_MAX_WAYPOINTS) == false) + { + GamePlayerAddWaypoint_Ex(ptrPlayer, temp_tile); + } + } + } + else + { + while( (y_diff--) > 0) + { + if( (ptrPlayer->SelectedTile / GameLevelColumns) > + (ptrPlayer->Waypoints[ptrPlayer->LastWaypointIdx] / GameLevelColumns) ) + { + temp_tile += GameLevelColumns; + } + else + { + temp_tile -= GameLevelColumns; + } + + if(SystemContains_u16(temp_tile, ptrPlayer->Waypoints, PLAYER_MAX_WAYPOINTS) == false) + { + GamePlayerAddWaypoint_Ex(ptrPlayer, temp_tile); + } + } + + while( (x_diff--) > 0) + { + if( (ptrPlayer->SelectedTile % GameLevelColumns) > + (ptrPlayer->Waypoints[ptrPlayer->LastWaypointIdx] % GameLevelColumns) ) + { + temp_tile++; + } + else + { + temp_tile--; + } + + if(SystemContains_u16(temp_tile, ptrPlayer->Waypoints, PLAYER_MAX_WAYPOINTS) == false) + { + GamePlayerAddWaypoint_Ex(ptrPlayer, temp_tile); + } + } + } + + // Now at this point, we have prepared our array. + + for(i = 0; i < PLAYER_MAX_WAYPOINTS; i++) + { + if(ptrPlayer->Waypoints[i] == 0) + { + // We have found empty waypoints. Exit loop + break; + } + + if(SystemContains_u8( GameLevelBuffer[ptrPlayer->Waypoints[i]], + AcceptedTiles, + sizeof(AcceptedTiles) ) == false) + { + // Now try again with mirrored tiles, just in case! + + for(j = 0; j < (sizeof(AcceptedTiles) * sizeof(uint8_t) ); j++) + { + AcceptedTiles[j] |= TILE_MIRROR_FLAG; + } + + if(SystemContains_u8( GameLevelBuffer[ptrPlayer->Waypoints[i]], + AcceptedTiles, + sizeof(AcceptedTiles) ) == false) + { + // Both cases have failed. Return from function. + return false; + } + + // Reverse mirror flag. + + for(j = 0; j < (sizeof(AcceptedTiles) * sizeof(uint8_t) ); j++) + { + AcceptedTiles[j] &= ~(TILE_MIRROR_FLAG); + } + } + } + + return true; +} + +void GameSelectAircraft(TYPE_PLAYER * ptrPlayer) +{ + TYPE_ISOMETRIC_POS IsoPos = AircraftGetIsoPos(ptrPlayer->SelectedAircraft); + + CameraMoveToIsoPos(ptrPlayer, IsoPos); + + ptrPlayer->SelectedTile = GameGetTileFromIsoPosition(&IsoPos); + + GamePlayerAddWaypoint(ptrPlayer); +} diff --git a/Source/Game.h b/Source/Game.h new file mode 100755 index 0000000..8bccf63 --- /dev/null +++ b/Source/Game.h @@ -0,0 +1,48 @@ +#ifndef __GAME_HEADER__ +#define __GAME_HEADER__ + +/* ************************************* + * Includes + * *************************************/ + +#include "Global_Inc.h" +#include "GameStructures.h" +#include "LoadMenu.h" +#include "System.h" +#include "Camera.h" +#include "Aircraft.h" +#include "GameGui.h" + +/* ************************************* + * Defines + * *************************************/ + +#define PLAYER_ONE 0 +#define PLAYER_TWO 1 +#define MAX_PLAYERS (PLAYER_TWO + 1) + +#define TILE_SIZE 64 +#define TILE_SIZE_BIT_SHIFT 6 + +/* ************************************* + * Global variables + * *************************************/ + +extern bool GameStartupFlag; +extern TYPE_PLAYER PlayerData[]; + +/* ************************************* + * Global prototypes + * *************************************/ + +void Game(bool two_players); +char * GetGameLevelTitle(void); +void GameSetTime(uint8_t hour, uint8_t minutes); +uint8_t GameGetFirstActiveAircraft(void); +uint8_t GameGetLastActiveAircraft(void); +uint8_t GameGetLevelColumns(void); +fix16_t GameGetXFromTile(uint16_t tile); +fix16_t GameGetYFromTile(uint16_t tile); +void GameTargetsReached(uint8_t index); + +#endif //__GAME_HEADER__ diff --git a/Source/GameGui.c b/Source/GameGui.c new file mode 100755 index 0000000..47d6c37 --- /dev/null +++ b/Source/GameGui.c @@ -0,0 +1,730 @@ +/* *************************************
+ * Includes
+ * *************************************/
+
+#include "GameGui.h"
+
+/* *************************************
+ * Defines
+ * *************************************/
+
+#define NOTIFICATION_TIMER_LIMIT 5*TIMEBASE_1_SECOND // 5 seconds
+#define BUBBLE_VIBRATION_TIMER_LIMIT TIMEBASE_1_SECOND >> 1 // Half a second
+#define NOTIFICATION_BUFFER_SIZE 200
+#define GAME_GUI_AIRCRAFT_DATA_MAX_PAGE 5
+
+/* **************************************
+ * Structs and enums *
+ * *************************************/
+
+enum
+{
+ PAUSE_DIALOG_X = 92,
+ PAUSE_DIALOG_Y = 28,
+ PAUSE_DIALOG_W = 200,
+ PAUSE_DIALOG_H = 184,
+
+ PAUSE_DIALOG_R0 = 0,
+ PAUSE_DIALOG_R1 = PAUSE_DIALOG_R0,
+ PAUSE_DIALOG_R2 = 0,
+ PAUSE_DIALOG_R3 = PAUSE_DIALOG_R2,
+
+ PAUSE_DIALOG_G0 = NORMAL_LUMINANCE,
+ PAUSE_DIALOG_G1 = PAUSE_DIALOG_G0,
+ PAUSE_DIALOG_G2 = 0,
+ PAUSE_DIALOG_G3 = PAUSE_DIALOG_G2,
+
+ PAUSE_DIALOG_B0 = 40,
+ PAUSE_DIALOG_B1 = PAUSE_DIALOG_B0,
+ PAUSE_DIALOG_B2 = 0,
+ PAUSE_DIALOG_B3 = PAUSE_DIALOG_B2,
+};
+
+enum
+{
+ NOTIFICATION_GSGPOLY4_R0 = 0,
+ NOTIFICATION_GSGPOLY4_R1 = NOTIFICATION_GSGPOLY4_R0,
+ NOTIFICATION_GSGPOLY4_R2 = 0,
+ NOTIFICATION_GSGPOLY4_R3 = NOTIFICATION_GSGPOLY4_R2,
+
+ NOTIFICATION_GSGPOLY4_G0 = NORMAL_LUMINANCE,
+ NOTIFICATION_GSGPOLY4_G1 = NOTIFICATION_GSGPOLY4_G0,
+ NOTIFICATION_GSGPOLY4_G2 = 0,
+ NOTIFICATION_GSGPOLY4_G3 = NOTIFICATION_GSGPOLY4_G2,
+
+ NOTIFICATION_GSGPOLY4_B0 = 40,
+ NOTIFICATION_GSGPOLY4_B1 = NOTIFICATION_GSGPOLY4_B0,
+ NOTIFICATION_GSGPOLY4_B2 = 0,
+ NOTIFICATION_GSGPOLY4_B3 = NOTIFICATION_GSGPOLY4_B2,
+
+ NOTIFICATION_GSGPOLY4_X0 = 16,
+ NOTIFICATION_GSGPOLY4_X1 = X_SCREEN_RESOLUTION - NOTIFICATION_GSGPOLY4_X0 - 16,
+ NOTIFICATION_GSGPOLY4_X2 = NOTIFICATION_GSGPOLY4_X0,
+ NOTIFICATION_GSGPOLY4_X3 = NOTIFICATION_GSGPOLY4_X1,
+
+ NOTIFICATION_GSGPOLY4_Y0 = Y_SCREEN_RESOLUTION - (64 + 8),
+ NOTIFICATION_GSGPOLY4_Y1 = NOTIFICATION_GSGPOLY4_Y0,
+ NOTIFICATION_GSGPOLY4_Y2 = Y_SCREEN_RESOLUTION - 8,
+ NOTIFICATION_GSGPOLY4_Y3 = NOTIFICATION_GSGPOLY4_Y2
+};
+
+enum
+{
+ BUBBLE_SPRITE_X = 298,
+ BUBBLE_SPRITE_Y = 32,
+ BUBBLE_SPRITE_RAND_MIN = -3,
+ BUBBLE_SPRITE_RAND_MAX = 3,
+
+ NOTIFICATION_BUTTON_X = BUBBLE_SPRITE_X + 24,
+ NOTIFICATION_BUTTON_Y = BUBBLE_SPRITE_Y + 16
+};
+
+enum
+{
+ CLOCK_X = 16,
+ CLOCK_Y = 16
+};
+
+enum
+{
+ AIRCRAFT_DATA_GSGPOLY4_R0 = 0,
+ AIRCRAFT_DATA_GSGPOLY4_R1 = AIRCRAFT_DATA_GSGPOLY4_R0,
+ AIRCRAFT_DATA_GSGPOLY4_R2 = 0,
+ AIRCRAFT_DATA_GSGPOLY4_R3 = AIRCRAFT_DATA_GSGPOLY4_R2,
+
+ AIRCRAFT_DATA_GSGPOLY4_G0 = NORMAL_LUMINANCE,
+ AIRCRAFT_DATA_GSGPOLY4_G1 = AIRCRAFT_DATA_GSGPOLY4_G0,
+ AIRCRAFT_DATA_GSGPOLY4_G2 = 0,
+ AIRCRAFT_DATA_GSGPOLY4_G3 = AIRCRAFT_DATA_GSGPOLY4_G2,
+
+ AIRCRAFT_DATA_GSGPOLY4_B0 = 40,
+ AIRCRAFT_DATA_GSGPOLY4_B1 = AIRCRAFT_DATA_GSGPOLY4_B0,
+ AIRCRAFT_DATA_GSGPOLY4_B2 = 0,
+ AIRCRAFT_DATA_GSGPOLY4_B3 = AIRCRAFT_DATA_GSGPOLY4_B2,
+
+ AIRCRAFT_DATA_GSGPOLY4_X0 = (X_SCREEN_RESOLUTION >> 1) - 96,
+ AIRCRAFT_DATA_GSGPOLY4_X1 = (X_SCREEN_RESOLUTION >> 1) + 96,
+ AIRCRAFT_DATA_GSGPOLY4_X2 = AIRCRAFT_DATA_GSGPOLY4_X0,
+ AIRCRAFT_DATA_GSGPOLY4_X3 = AIRCRAFT_DATA_GSGPOLY4_X1,
+
+ AIRCRAFT_DATA_GSGPOLY4_Y0 = (Y_SCREEN_RESOLUTION >> 1) - 96,
+ AIRCRAFT_DATA_GSGPOLY4_Y1 = AIRCRAFT_DATA_GSGPOLY4_Y0,
+ AIRCRAFT_DATA_GSGPOLY4_Y2 = (Y_SCREEN_RESOLUTION >> 1) + 96,
+ AIRCRAFT_DATA_GSGPOLY4_Y3 = AIRCRAFT_DATA_GSGPOLY4_Y2,
+};
+
+enum
+{
+ AIRCRAFT_DATA_FLIGHT_GSGPOLY4_R0 = NORMAL_LUMINANCE,
+ AIRCRAFT_DATA_FLIGHT_GSGPOLY4_R1 = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_R0,
+ AIRCRAFT_DATA_FLIGHT_GSGPOLY4_R2 = 0,
+ AIRCRAFT_DATA_FLIGHT_GSGPOLY4_R3 = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_R2,
+
+ AIRCRAFT_DATA_FLIGHT_GSGPOLY4_G0 = NORMAL_LUMINANCE,
+ AIRCRAFT_DATA_FLIGHT_GSGPOLY4_G1 = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_G0,
+ AIRCRAFT_DATA_FLIGHT_GSGPOLY4_G2 = 0,
+ AIRCRAFT_DATA_FLIGHT_GSGPOLY4_G3 = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_G2,
+
+ AIRCRAFT_DATA_FLIGHT_GSGPOLY4_B0 = NORMAL_LUMINANCE,
+ AIRCRAFT_DATA_FLIGHT_GSGPOLY4_B1 = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_B0,
+ AIRCRAFT_DATA_FLIGHT_GSGPOLY4_B2 = 0,
+ AIRCRAFT_DATA_FLIGHT_GSGPOLY4_B3 = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_B2,
+
+ AIRCRAFT_DATA_FLIGHT_GSGPOLY4_GAP = 8,
+ AIRCRAFT_DATA_FLIGHT_GSGPOLY4_X0 = AIRCRAFT_DATA_GSGPOLY4_X0 + AIRCRAFT_DATA_FLIGHT_GSGPOLY4_GAP,
+ AIRCRAFT_DATA_FLIGHT_GSGPOLY4_X1 = AIRCRAFT_DATA_GSGPOLY4_X1 - AIRCRAFT_DATA_FLIGHT_GSGPOLY4_GAP,
+ AIRCRAFT_DATA_FLIGHT_GSGPOLY4_X2 = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_X0,
+ AIRCRAFT_DATA_FLIGHT_GSGPOLY4_X3 = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_X1,
+
+ AIRCRAFT_DATA_FLIGHT_GSGPOLY4_H = 32,
+ AIRCRAFT_DATA_FLIGHT_GSGPOLY4_Y0 = AIRCRAFT_DATA_GSGPOLY4_Y0 + AIRCRAFT_DATA_FLIGHT_GSGPOLY4_GAP,
+ AIRCRAFT_DATA_FLIGHT_GSGPOLY4_Y1 = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_Y0,
+ AIRCRAFT_DATA_FLIGHT_GSGPOLY4_Y2 = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_Y0 + AIRCRAFT_DATA_FLIGHT_GSGPOLY4_H,
+ AIRCRAFT_DATA_FLIGHT_GSGPOLY4_Y3 = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_Y2
+};
+
+enum
+{
+ AIRCRAFT_DATA_FLIGHT_NUMBER_TEXT_X = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_X0 + AIRCRAFT_DATA_FLIGHT_GSGPOLY4_GAP,
+ AIRCRAFT_DATA_FLIGHT_NUMBER_TEXT_Y = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_Y0 + AIRCRAFT_DATA_FLIGHT_GSGPOLY4_GAP,
+
+ AIRCRAFT_DATA_DIRECTION_X = AIRCRAFT_DATA_FLIGHT_NUMBER_TEXT_X,
+ AIRCRAFT_DATA_DIRECTION_Y = AIRCRAFT_DATA_FLIGHT_NUMBER_TEXT_Y + AIRCRAFT_DATA_FLIGHT_GSGPOLY4_GAP,
+
+ AIRCRAFT_DATA_PASSENGERS_X = AIRCRAFT_DATA_FLIGHT_NUMBER_TEXT_X + 64,
+ AIRCRAFT_DATA_PASSENGERS_Y = AIRCRAFT_DATA_FLIGHT_NUMBER_TEXT_Y
+};
+
+enum
+{
+ AIRCRAFT_DATA_FLIGHT_LEFT_ARROW_X = 96,
+ AIRCRAFT_DATA_FLIGHT_LEFT_ARROW_Y = 112,
+
+ AIRCRAFT_DATA_FLIGHT_LEFT_ARROW_U = 44,
+ AIRCRAFT_DATA_FLIGHT_LEFT_ARROW_V = 48,
+
+ AIRCRAFT_DATA_FLIGHT_RIGHT_ARROW_X = 280,
+ AIRCRAFT_DATA_FLIGHT_RIGHT_ARROW_Y = AIRCRAFT_DATA_FLIGHT_LEFT_ARROW_Y,
+
+ AIRCRAFT_DATA_FLIGHT_RIGHT_ARROW_U = AIRCRAFT_DATA_FLIGHT_LEFT_ARROW_U + 8,
+ AIRCRAFT_DATA_FLIGHT_RIGHT_ARROW_V = 48,
+
+ AIRCRAFT_DATA_FLIGHT_ARROWS_SIZE = 8
+};
+
+enum
+{
+ GAME_GUI_SECOND_DISPLAY_X = 384,
+ GAME_GUI_SECOND_DISPLAY_Y = 256,
+ GAME_GUI_SECOND_DISPLAY_TPAGE = 22,
+};
+
+/* **************************************
+ * Local prototypes *
+ * *************************************/
+
+static void GameGuiPrepareNotificationString(TYPE_FLIGHT_DATA * ptrFlightData, uint8_t offset);
+static void GameGuiShowAircraftData(TYPE_PLAYER * ptrPlayer, TYPE_FLIGHT_DATA * ptrFlightData);
+
+/* **************************************
+ * Local variables *
+ * *************************************/
+
+static GsSprite BubbleSpr;
+static GsGPoly4 NotificationGPoly4;
+static GsGPoly4 AircraftDataGPoly4;
+static GsGPoly4 SelectedAircraftGPoly4;
+static GsSprite ArrowsSpr;
+static GsGPoly4 PauseRect;
+static GsSprite SecondDisplay;
+
+static char * GameFileList[] = {"cdrom:\\DATA\\SPRITES\\BUBBLE.TIM;1" ,
+ "cdrom:\\DATA\\FONTS\\FONT_1.FNT;1" ,
+ "cdrom:\\DATA\\SPRITES\\ARROWS.TIM;1" };
+
+static void * GameFileDest[] = {(GsSprite*)&BubbleSpr ,
+ (TYPE_FONT*)&RadioFont ,
+ (GsSprite*)&ArrowsSpr };
+
+static char strNotificationRequest[NOTIFICATION_BUFFER_SIZE];
+
+void GameGuiInit(void)
+{
+ LoadMenu( GameFileList,
+ GameFileDest,
+ sizeof(GameFileList) / sizeof(char*),
+ sizeof(GameFileDest) /sizeof(void*) );
+
+ PauseRect.x[0] = PAUSE_DIALOG_X;
+ PauseRect.x[1] = PAUSE_DIALOG_X + PAUSE_DIALOG_W;
+ PauseRect.x[2] = PAUSE_DIALOG_X;
+ PauseRect.x[3] = PAUSE_DIALOG_X + PAUSE_DIALOG_W;
+
+ PauseRect.y[0] = PAUSE_DIALOG_Y;
+ PauseRect.y[1] = PAUSE_DIALOG_Y;
+ PauseRect.y[2] = PAUSE_DIALOG_Y + PAUSE_DIALOG_H;
+ PauseRect.y[3] = PAUSE_DIALOG_Y + PAUSE_DIALOG_H;
+
+ PauseRect.r[0] = PAUSE_DIALOG_R0;
+ PauseRect.r[1] = PAUSE_DIALOG_R1;
+ PauseRect.r[2] = PAUSE_DIALOG_R2;
+ PauseRect.r[3] = PAUSE_DIALOG_R3;
+
+ PauseRect.b[0] = PAUSE_DIALOG_B0;
+ PauseRect.b[1] = PAUSE_DIALOG_B1;
+ PauseRect.b[2] = PAUSE_DIALOG_B2;
+ PauseRect.b[3] = PAUSE_DIALOG_B3;
+
+ PauseRect.g[0] = PAUSE_DIALOG_G0;
+ PauseRect.g[1] = PAUSE_DIALOG_G1;
+ PauseRect.g[2] = PAUSE_DIALOG_G2;
+ PauseRect.g[3] = PAUSE_DIALOG_G3;
+
+ PauseRect.attribute |= ENABLE_TRANS | TRANS_MODE(0);
+}
+
+void GameGuiAircraftNotificationRequest(TYPE_FLIGHT_DATA * ptrFlightData)
+{
+ uint8_t i;
+ static uint16_t NotificationTimer;
+ static uint8_t FirstNotification;
+ bool first_entered = true;
+
+ if(GameStartupFlag == true)
+ {
+ // Set initial values to static variables
+ NotificationTimer = 0;
+ FirstNotification = 0;
+ }
+
+ for(i = FirstNotification; i < ptrFlightData->nAircraft ; i++)
+ {
+ if(ptrFlightData->NotificationRequest[i] == true)
+ {
+ // Prepare RGB data and (X,Y) coordinates for notification
+ // request rectangle.
+ NotificationGPoly4.r[0] = NOTIFICATION_GSGPOLY4_R0;
+ NotificationGPoly4.r[1] = NOTIFICATION_GSGPOLY4_R1;
+ NotificationGPoly4.r[2] = NOTIFICATION_GSGPOLY4_R2;
+ NotificationGPoly4.r[3] = NOTIFICATION_GSGPOLY4_R3;
+
+ NotificationGPoly4.g[0] = NOTIFICATION_GSGPOLY4_G0;
+ NotificationGPoly4.g[1] = NOTIFICATION_GSGPOLY4_G1;
+ NotificationGPoly4.g[2] = NOTIFICATION_GSGPOLY4_G2;
+ NotificationGPoly4.g[3] = NOTIFICATION_GSGPOLY4_G3;
+
+ NotificationGPoly4.b[0] = NOTIFICATION_GSGPOLY4_B0;
+ NotificationGPoly4.b[1] = NOTIFICATION_GSGPOLY4_B1;
+ NotificationGPoly4.b[2] = NOTIFICATION_GSGPOLY4_B2;
+ NotificationGPoly4.b[3] = NOTIFICATION_GSGPOLY4_B3;
+
+ NotificationGPoly4.attribute |= ENABLE_TRANS | TRANS_MODE(0);
+
+ NotificationGPoly4.x[0] = NOTIFICATION_GSGPOLY4_X0;
+ NotificationGPoly4.x[1] = NOTIFICATION_GSGPOLY4_X1;
+ NotificationGPoly4.x[2] = NOTIFICATION_GSGPOLY4_X2;
+ NotificationGPoly4.x[3] = NOTIFICATION_GSGPOLY4_X3;
+
+ NotificationGPoly4.y[0] = NOTIFICATION_GSGPOLY4_Y0;
+ NotificationGPoly4.y[1] = NOTIFICATION_GSGPOLY4_Y1;
+ NotificationGPoly4.y[2] = NOTIFICATION_GSGPOLY4_Y2;
+ NotificationGPoly4.y[3] = NOTIFICATION_GSGPOLY4_Y3;
+
+ /* dprintf("Notification timer: %d.\n",NotificationTimer); */
+
+ if(++NotificationTimer >= NOTIFICATION_TIMER_LIMIT)
+ {
+ // Reset timer and notification request for current aircraft
+ FirstNotification = 0;
+ NotificationTimer = 0;
+ ptrFlightData->NotificationRequest[i] = 0;
+ first_entered = true;
+ }
+ else
+ {
+ if(first_entered == true)
+ {
+ // Prepare string for new notification request only once
+ first_entered = false;
+ RadioFont.max_ch_wrap = 18;
+ RadioFont.flags |= FONT_WRAP_LINE;
+ GameGuiPrepareNotificationString(ptrFlightData, i);
+ }
+
+ // Keep information about last aircraft notified...
+ // so that it gets called on next cycle
+ FirstNotification = i;
+ GsSortGPoly4(&NotificationGPoly4);
+ FontPrintText( &RadioFont,
+ NotificationGPoly4.x[0] + 8,
+ NotificationGPoly4.y[0] + 8,
+ strNotificationRequest);
+ }
+
+ break;
+ }
+ }
+}
+
+bool GameGuiPauseDialog(TYPE_PLAYER * ptrPlayer)
+{
+ GfxSaveDisplayData(&SecondDisplay);
+
+ DrawFBRect(0, 0, X_SCREEN_RESOLUTION, VRAM_H, 0, 0, 0);
+
+ while(GfxIsGPUBusy() == true);
+
+ do
+ {
+ if(ptrPlayer->PadKeyReleased_Callback(PAD_CROSS) == true)
+ {
+ return true;
+ }
+
+ GfxSortSprite(&SecondDisplay);
+
+ GsSortGPoly4(&PauseRect);
+
+ GfxDrawScene_Slow();
+
+ }while(ptrPlayer->PadKeyReleased_Callback(PAD_START) == false);
+
+ return false;
+}
+
+void GameGuiActiveAircraftList(TYPE_PLAYER * ptrPlayer, TYPE_FLIGHT_DATA * ptrFlightData)
+{
+ uint8_t i;
+ uint8_t j = 0;
+
+ // Clear all pointers for aircraft data first.
+ // Then, rebuild aircraft list for player.
+ memset(ptrPlayer->ActiveAircraftList, 0, GAME_MAX_AIRCRAFT);
+ ptrPlayer->ActiveAircraft = 0;
+
+ for(i = 0; i < GAME_MAX_AIRCRAFT; i++)
+ {
+ if( (ptrFlightData->State[i] != STATE_IDLE)
+ &&
+ (ptrFlightData->FlightDirection[i] & ptrPlayer->FlightDirection) )
+ {
+ ptrPlayer->ActiveAircraftList[j++] = i;
+ ptrPlayer->ActiveAircraft++;
+ }
+ }
+}
+
+void GameGuiActiveAircraftPage(TYPE_PLAYER * ptrPlayer, TYPE_FLIGHT_DATA * ptrFlightData)
+{
+ while(ptrPlayer->ActiveAircraft < ptrPlayer->SelectedAircraft)
+ {
+ ptrPlayer->SelectedAircraft--;
+ }
+
+ while(ptrPlayer->ActiveAircraft < (uint8_t)(GAME_GUI_AIRCRAFT_DATA_MAX_PAGE * ptrPlayer->FlightDataPage) )
+ {
+ ptrPlayer->FlightDataPage--;
+ }
+
+ if(ptrPlayer->ShowAircraftData == true)
+ {
+ if(ptrPlayer->PadKeyReleased_Callback(PAD_DOWN) == true)
+ {
+ if( ( (ptrPlayer->SelectedAircraft + 1) < ptrPlayer->ActiveAircraft)
+ &&
+ ( (ptrPlayer->SelectedAircraft + 1) < ( (ptrPlayer->FlightDataPage + 1) * GAME_GUI_AIRCRAFT_DATA_MAX_PAGE) ) )
+ {
+ ptrPlayer->SelectedAircraft++;
+ }
+ }
+
+ if(ptrPlayer->PadKeyReleased_Callback(PAD_UP) == true)
+ {
+ if(ptrPlayer->SelectedAircraft > ( (ptrPlayer->FlightDataPage) * GAME_GUI_AIRCRAFT_DATA_MAX_PAGE) )
+ {
+ ptrPlayer->SelectedAircraft--;
+ }
+ }
+
+ if(ptrPlayer->PadKeyReleased_Callback(PAD_RIGHT) == true)
+ {
+ if(ptrPlayer->ActiveAircraft > (GAME_GUI_AIRCRAFT_DATA_MAX_PAGE * (ptrPlayer->FlightDataPage + 1) ) )
+ {
+ ptrPlayer->FlightDataPage++;
+ ptrPlayer->SelectedAircraft = ptrPlayer->FlightDataPage * GAME_GUI_AIRCRAFT_DATA_MAX_PAGE;
+ dprintf("Selected Aircraft = %d\n",ptrPlayer->SelectedAircraft);
+ }
+ }
+
+ if(ptrPlayer->PadKeyReleased_Callback(PAD_LEFT) == true)
+ {
+ if(ptrPlayer->FlightDataPage != 0)
+ {
+ ptrPlayer->FlightDataPage--;
+ ptrPlayer->SelectedAircraft = ptrPlayer->FlightDataPage * GAME_GUI_AIRCRAFT_DATA_MAX_PAGE;
+ dprintf("Selected Aircraft = %d\n",ptrPlayer->SelectedAircraft);
+ }
+ }
+ }
+}
+
+void GameGuiAircraftList(TYPE_PLAYER * ptrPlayer, TYPE_FLIGHT_DATA * ptrFlightData)
+{
+ short y_offset;
+ uint8_t page_aircraft;
+
+ if(ptrPlayer->ShowAircraftData == true)
+ {
+ // Prepare RGB data and (X,Y) coordinates for aircraft
+ // data list request rectangle.
+ AircraftDataGPoly4.r[0] = AIRCRAFT_DATA_GSGPOLY4_R0;
+ AircraftDataGPoly4.r[1] = AIRCRAFT_DATA_GSGPOLY4_R1;
+ AircraftDataGPoly4.r[2] = AIRCRAFT_DATA_GSGPOLY4_R2;
+ AircraftDataGPoly4.r[3] = AIRCRAFT_DATA_GSGPOLY4_R3;
+
+ AircraftDataGPoly4.g[0] = AIRCRAFT_DATA_GSGPOLY4_G0;
+ AircraftDataGPoly4.g[1] = AIRCRAFT_DATA_GSGPOLY4_G1;
+ AircraftDataGPoly4.g[2] = AIRCRAFT_DATA_GSGPOLY4_G2;
+ AircraftDataGPoly4.g[3] = AIRCRAFT_DATA_GSGPOLY4_G3;
+
+ AircraftDataGPoly4.b[0] = AIRCRAFT_DATA_GSGPOLY4_B0;
+ AircraftDataGPoly4.b[1] = AIRCRAFT_DATA_GSGPOLY4_B1;
+ AircraftDataGPoly4.b[2] = AIRCRAFT_DATA_GSGPOLY4_B2;
+ AircraftDataGPoly4.b[3] = AIRCRAFT_DATA_GSGPOLY4_B3;
+
+ AircraftDataGPoly4.attribute |= ENABLE_TRANS | TRANS_MODE(0);
+
+ AircraftDataGPoly4.x[0] = AIRCRAFT_DATA_GSGPOLY4_X0;
+ AircraftDataGPoly4.x[1] = AIRCRAFT_DATA_GSGPOLY4_X1;
+ AircraftDataGPoly4.x[2] = AIRCRAFT_DATA_GSGPOLY4_X2;
+ AircraftDataGPoly4.x[3] = AIRCRAFT_DATA_GSGPOLY4_X3;
+
+ AircraftDataGPoly4.y[0] = AIRCRAFT_DATA_GSGPOLY4_Y0;
+ AircraftDataGPoly4.y[1] = AIRCRAFT_DATA_GSGPOLY4_Y1;
+ AircraftDataGPoly4.y[2] = AIRCRAFT_DATA_GSGPOLY4_Y2;
+ AircraftDataGPoly4.y[3] = AIRCRAFT_DATA_GSGPOLY4_Y3;
+
+ GsSortGPoly4(&AircraftDataGPoly4);
+
+ if(ptrPlayer->ActiveAircraft != 0)
+ {
+ SelectedAircraftGPoly4.r[0] = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_R0;
+ SelectedAircraftGPoly4.r[1] = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_R1;
+ SelectedAircraftGPoly4.r[2] = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_R2;
+ SelectedAircraftGPoly4.r[3] = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_R3;
+
+ SelectedAircraftGPoly4.g[0] = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_G0;
+ SelectedAircraftGPoly4.g[1] = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_G1;
+ SelectedAircraftGPoly4.g[2] = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_G2;
+ SelectedAircraftGPoly4.g[3] = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_G3;
+
+ SelectedAircraftGPoly4.b[0] = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_B0;
+ SelectedAircraftGPoly4.b[1] = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_B1;
+ SelectedAircraftGPoly4.b[2] = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_B2;
+ SelectedAircraftGPoly4.b[3] = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_B3;
+
+ SelectedAircraftGPoly4.attribute |= ENABLE_TRANS | TRANS_MODE(0);
+
+ SelectedAircraftGPoly4.x[0] = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_X0;
+ SelectedAircraftGPoly4.x[1] = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_X1;
+ SelectedAircraftGPoly4.x[2] = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_X2;
+ SelectedAircraftGPoly4.x[3] = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_X3;
+
+ page_aircraft = (ptrPlayer->SelectedAircraft) - (ptrPlayer->FlightDataPage * GAME_GUI_AIRCRAFT_DATA_MAX_PAGE);
+
+ y_offset = (short)(page_aircraft * AIRCRAFT_DATA_FLIGHT_GSGPOLY4_H);
+
+ /*dprintf("ptrPlayer->ActiveAircraft = %d\n",ptrPlayer->ActiveAircraft);
+ dprintf("ptrPlayer->SelectedAircraft = %d\n",ptrPlayer->SelectedAircraft);
+ dprintf("ptrPlayer->FlightDataPage = %d\n",ptrPlayer->FlightDataPage);
+ dprintf("y_offset = %d\n",y_offset);*/
+
+ SelectedAircraftGPoly4.y[0] = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_Y0 + y_offset;
+ SelectedAircraftGPoly4.y[1] = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_Y1 + y_offset;
+ SelectedAircraftGPoly4.y[2] = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_Y2 + y_offset;
+ SelectedAircraftGPoly4.y[3] = AIRCRAFT_DATA_FLIGHT_GSGPOLY4_Y3 + y_offset;
+
+ GsSortGPoly4(&SelectedAircraftGPoly4);
+
+ if(ptrPlayer->ActiveAircraft > (GAME_GUI_AIRCRAFT_DATA_MAX_PAGE * (ptrPlayer->FlightDataPage + 1) ) )
+ {
+ ArrowsSpr.x = AIRCRAFT_DATA_FLIGHT_RIGHT_ARROW_X;
+ ArrowsSpr.y = AIRCRAFT_DATA_FLIGHT_RIGHT_ARROW_Y;
+
+ ArrowsSpr.attribute |= GFX_1HZ_FLASH;
+
+ ArrowsSpr.u = AIRCRAFT_DATA_FLIGHT_RIGHT_ARROW_U;
+ ArrowsSpr.v = AIRCRAFT_DATA_FLIGHT_RIGHT_ARROW_V;
+
+ ArrowsSpr.w = AIRCRAFT_DATA_FLIGHT_ARROWS_SIZE;
+ ArrowsSpr.h = AIRCRAFT_DATA_FLIGHT_ARROWS_SIZE;
+
+ GfxSortSprite(&ArrowsSpr);
+ }
+
+ if(ptrPlayer->FlightDataPage != 0)
+ {
+ ArrowsSpr.x = AIRCRAFT_DATA_FLIGHT_LEFT_ARROW_X;
+ ArrowsSpr.y = AIRCRAFT_DATA_FLIGHT_LEFT_ARROW_Y;
+
+ ArrowsSpr.attribute |= GFX_1HZ_FLASH;
+
+ ArrowsSpr.u = AIRCRAFT_DATA_FLIGHT_LEFT_ARROW_U;
+ ArrowsSpr.v = AIRCRAFT_DATA_FLIGHT_LEFT_ARROW_V;
+
+ ArrowsSpr.w = AIRCRAFT_DATA_FLIGHT_ARROWS_SIZE;
+ ArrowsSpr.h = AIRCRAFT_DATA_FLIGHT_ARROWS_SIZE;
+
+ GfxSortSprite(&ArrowsSpr);
+ }
+
+ GameGuiShowAircraftData(ptrPlayer, ptrFlightData);
+ }
+ else
+ {
+ FontPrintText( &SmallFont,
+ AIRCRAFT_DATA_GSGPOLY4_X0 +
+ ( (AIRCRAFT_DATA_GSGPOLY4_X1 - AIRCRAFT_DATA_GSGPOLY4_X0) >> 1),
+ AIRCRAFT_DATA_GSGPOLY4_Y0 +
+ ( (AIRCRAFT_DATA_GSGPOLY4_Y2 - AIRCRAFT_DATA_GSGPOLY4_Y0) >> 1),
+ "No flights!" );
+ }
+ }
+
+}
+
+void GameGuiBubble(TYPE_FLIGHT_DATA * ptrFlightData)
+{
+ uint8_t i;
+ static uint16_t BubbleVibrationTimer;
+ static uint8_t FirstNotification;
+ bool AtLeastOneEnabled = false;
+
+ if(GameStartupFlag == true)
+ {
+ // Set initial values to static variables
+ BubbleVibrationTimer = 0;
+ FirstNotification = 0;
+ }
+
+ for(i = FirstNotification ; i < ptrFlightData->nAircraft ; i++)
+ {
+ if(ptrFlightData->NotificationRequest[i] != 0)
+ {
+ AtLeastOneEnabled = true;
+
+ BubbleSpr.x = BUBBLE_SPRITE_X;
+ BubbleSpr.y = BUBBLE_SPRITE_Y;
+
+ if(BubbleVibrationTimer >= BUBBLE_VIBRATION_TIMER_LIMIT)
+ {
+ // Reset timer and notification request for current aircraft
+ if(ptrFlightData->NotificationRequest[i] == 0)
+ {
+ FirstNotification = 0;
+ BubbleVibrationTimer = 0;
+ }
+ }
+ else
+ {
+ BubbleSpr.x += SystemRand(BUBBLE_SPRITE_RAND_MIN,BUBBLE_SPRITE_RAND_MAX);
+ BubbleSpr.y += SystemRand(BUBBLE_SPRITE_RAND_MIN,BUBBLE_SPRITE_RAND_MAX);
+
+ // Keep information about last aircraft notified...
+ // so that it gets called on next cycle
+ FirstNotification = i;
+ BubbleVibrationTimer++;
+ }
+
+ GfxSortSprite(&BubbleSpr);
+ FontSetFlags(&SmallFont, FONT_CENTERED);
+ FontPrintText(&SmallFont,BubbleSpr.x + 8 , BubbleSpr.y + 2, "%d", ptrFlightData->ActiveAircraft);
+
+ GfxDrawButton(NOTIFICATION_BUTTON_X, NOTIFICATION_BUTTON_Y, PAD_CIRCLE);
+ break;
+ }
+ }
+
+ if(AtLeastOneEnabled == false)
+ {
+ FirstNotification = 0;
+ BubbleVibrationTimer = 0;
+ }
+ //dprintf("Bubble timer: %d\n",BubbleVibrationTimer);
+}
+
+void GameGuiPrepareNotificationString(TYPE_FLIGHT_DATA * ptrFlightData, uint8_t offset)
+{
+ memset(strNotificationRequest,0,NOTIFICATION_BUFFER_SIZE);
+ strncat( strNotificationRequest,
+ ptrFlightData->strFlightNumber[offset],
+ strlen(ptrFlightData->strFlightNumber[offset]) );
+
+ strcat(strNotificationRequest, " request for ");
+
+ switch(ptrFlightData->FlightDirection[offset])
+ {
+ case DEPARTURE:
+ strcat(strNotificationRequest, "departure");
+ break;
+ case ARRIVAL:
+ strcat(strNotificationRequest, "approach");
+ break;
+ }
+
+ strcat(strNotificationRequest, ".");
+}
+
+void GameGuiClock(uint8_t hour, uint8_t min)
+{
+ static char strClock[6]; // HH:MM + \0 (6 characters needed)
+
+ if(GameStartupFlag || System1SecondTick() == true)
+ {
+ memset(strClock, 0, 6);
+ snprintf(strClock,6,"%02d:%02d",hour, min);
+ }
+
+ RadioFont.flags = FONT_NOFLAGS;
+ RadioFont.max_ch_wrap = 0;
+ FontPrintText(&RadioFont,CLOCK_X,CLOCK_Y,strClock);
+}
+
+void GameGuiShowAircraftData(TYPE_PLAYER * ptrPlayer, TYPE_FLIGHT_DATA * ptrFlightData)
+{
+ uint8_t init_flight = ptrPlayer->FlightDataPage * GAME_GUI_AIRCRAFT_DATA_MAX_PAGE;
+ uint8_t i;
+ uint8_t j;
+
+ FontSetFlags(&SmallFont,FONT_NOFLAGS);
+
+ for(i = init_flight ; i < ptrPlayer->ActiveAircraft ; i++)
+ {
+ j = i - init_flight;
+
+ if(j >= GAME_GUI_AIRCRAFT_DATA_MAX_PAGE)
+ {
+ break;
+ }
+
+ FontPrintText( &SmallFont,
+ AIRCRAFT_DATA_FLIGHT_NUMBER_TEXT_X,
+ AIRCRAFT_DATA_FLIGHT_NUMBER_TEXT_Y + (AIRCRAFT_DATA_FLIGHT_GSGPOLY4_H * j),
+ ptrFlightData->strFlightNumber[i] );
+
+ switch(ptrFlightData->FlightDirection[i])
+ {
+ case ARRIVAL:
+ FontPrintText( &SmallFont,
+ AIRCRAFT_DATA_DIRECTION_X,
+ AIRCRAFT_DATA_DIRECTION_Y + (AIRCRAFT_DATA_FLIGHT_GSGPOLY4_H * j),
+ "Arrival" );
+ break;
+ case DEPARTURE:
+ FontPrintText( &SmallFont,
+ AIRCRAFT_DATA_DIRECTION_X,
+ AIRCRAFT_DATA_DIRECTION_Y + (AIRCRAFT_DATA_FLIGHT_GSGPOLY4_H * j),
+ "Departure" );
+ break;
+ default:
+ break;
+ }
+
+ FontSetFlags(&SmallFont, FONT_2HZ_FLASH);
+
+ switch(ptrFlightData->State[i])
+ {
+ case STATE_FINAL:
+ FontPrintText( &SmallFont,
+ AIRCRAFT_DATA_DIRECTION_X + 64,
+ AIRCRAFT_DATA_DIRECTION_Y + (AIRCRAFT_DATA_FLIGHT_GSGPOLY4_H * j),
+ "Landing" );
+ break;
+
+ case STATE_TAXIING:
+ FontPrintText( &SmallFont,
+ AIRCRAFT_DATA_DIRECTION_X + 64,
+ AIRCRAFT_DATA_DIRECTION_Y + (AIRCRAFT_DATA_FLIGHT_GSGPOLY4_H * j),
+ "Taxiing" );
+ break;
+
+ case STATE_LANDED:
+ FontPrintText( &SmallFont,
+ AIRCRAFT_DATA_DIRECTION_X + 64,
+ AIRCRAFT_DATA_DIRECTION_Y + (AIRCRAFT_DATA_FLIGHT_GSGPOLY4_H * j),
+ "Arrived" );
+ break;
+
+ default:
+ break;
+ }
+
+ FontSetFlags(&SmallFont, FONT_NOFLAGS);
+
+ FontPrintText( &SmallFont,
+ AIRCRAFT_DATA_PASSENGERS_X,
+ AIRCRAFT_DATA_PASSENGERS_Y + (AIRCRAFT_DATA_FLIGHT_GSGPOLY4_H * j),
+ "%d pax.",
+ ptrFlightData->Passengers[i] );
+ }
+}
diff --git a/Source/GameGui.h b/Source/GameGui.h new file mode 100755 index 0000000..fdd2181 --- /dev/null +++ b/Source/GameGui.h @@ -0,0 +1,38 @@ +#ifndef __GAME_GUI_HEADER__
+#define __GAME_GUI_HEADER__
+
+/* *************************************
+ * Includes
+ * *************************************/
+
+#include "Global_Inc.h"
+#include "System.h"
+#include "GameStructures.h"
+#include "Gfx.h"
+
+/* *************************************
+ * Defines
+ * *************************************/
+
+/* *************************************
+ * Structs and enums
+ * *************************************/
+
+/* *************************************
+ * Global variables
+ * *************************************/
+
+/* *************************************
+ * Global prototypes
+ * *************************************/
+
+void GameGuiInit(void);
+bool GameGuiPauseDialog(TYPE_PLAYER * ptrPlayer);
+void GameGuiAircraftNotificationRequest(TYPE_FLIGHT_DATA * ptrFlightData);
+void GameGuiBubble(TYPE_FLIGHT_DATA * ptrFlightData);
+void GameGuiAircraftList(TYPE_PLAYER * ptrPlayer, TYPE_FLIGHT_DATA * ptrFlightData);
+void GameGuiClock(uint8_t hour, uint8_t min);
+void GameGuiActiveAircraftList(TYPE_PLAYER * ptrPlayer, TYPE_FLIGHT_DATA * ptrFlightData);
+void GameGuiActiveAircraftPage(TYPE_PLAYER * ptrPlayer, TYPE_FLIGHT_DATA * ptrFlightData);
+
+#endif //__GAME_GUI_HEADER__
diff --git a/Source/GameStructures.h b/Source/GameStructures.h new file mode 100755 index 0000000..4baa03a --- /dev/null +++ b/Source/GameStructures.h @@ -0,0 +1,206 @@ +#ifndef __GAME_STRUCTURES__HEADER__
+#define __GAME_STRUCTURES__HEADER__
+
+/* *************************************
+ * Defines
+ * *************************************/
+
+#define GAME_MAX_AIRCRAFT 32
+#define GAME_MAX_CHARACTERS 8
+#define CHEAT_ARRAY_SIZE 16
+#define AIRCRAFT_MAX_TARGETS 32
+#define PLAYER_MAX_WAYPOINTS AIRCRAFT_MAX_TARGETS
+
+/* *************************************
+ * Structs and enums
+ * *************************************/
+
+typedef struct t_Camera
+{
+ int32_t X_Offset;
+ int32_t Y_Offset;
+ int8_t X_Speed;
+ int8_t Y_Speed;
+ uint8_t Speed_Timer;
+}TYPE_CAMERA;
+
+typedef enum t_fldir
+{
+ DEPARTURE = 0x01,
+ ARRIVAL = 0x02
+}FL_DIR;
+
+typedef enum t_flstate
+{
+ STATE_IDLE = 0,
+ STATE_PARKED,
+ STATE_TAXIING,
+ STATE_TAKEOFF,
+ STATE_APPROACH,
+ STATE_FINAL,
+ STATE_LANDED
+}FL_STATE;
+
+typedef struct t_isopos
+{
+ short x;
+ short y;
+ short z;
+}TYPE_ISOMETRIC_POS;
+
+typedef struct t_isofix16pos
+{
+ fix16_t x;
+ fix16_t y;
+ fix16_t z;
+}TYPE_ISOMETRIC_FIX16_POS;
+
+typedef struct t_cartpos
+{
+ short x;
+ short y;
+}TYPE_CARTESIAN_POS;
+
+typedef struct t_flightData
+{
+ FL_DIR FlightDirection[GAME_MAX_AIRCRAFT];
+ char strFlightNumber[GAME_MAX_AIRCRAFT][GAME_MAX_CHARACTERS];
+ uint8_t Passengers[GAME_MAX_AIRCRAFT];
+ uint8_t Hours[GAME_MAX_AIRCRAFT];
+ uint8_t Minutes[GAME_MAX_AIRCRAFT];
+ uint8_t Parking[GAME_MAX_AIRCRAFT];
+ uint8_t nAircraft;
+ uint8_t ActiveAircraft;
+ FL_STATE State[GAME_MAX_AIRCRAFT];
+ bool NotificationRequest[GAME_MAX_AIRCRAFT];
+}TYPE_FLIGHT_DATA;
+
+typedef enum t_livery
+{
+ AIRCRAFT_LIVERY_UNKNOWN = 0,
+ AIRCRAFT_LIVERY_0
+}AIRCRAFT_LIVERY;
+
+typedef enum t_direction
+{
+ AIRCRAFT_DIR_NORTH = 0,
+ AIRCRAFT_DIR_SOUTH,
+ AIRCRAFT_DIR_EAST,
+ AIRCRAFT_DIR_WEST
+}AIRCRAFT_DIRECTION;
+
+typedef enum t_aircraftAttitude
+{
+ AIRCRAFT_STATE_NEUTRAL = 0,
+ AIRCRAFT_STATE_UP_5_DEGREES,
+ AIRCRAFT_STATE_UP_15_DEGREES,
+ AIRCRAFT_STATE_DOWN_5_DEGREES,
+}AIRCRAFT_ATTITUDE;
+
+typedef struct t_aircraftData
+{
+ AIRCRAFT_LIVERY Livery;
+ AIRCRAFT_DIRECTION Direction;
+ AIRCRAFT_ATTITUDE Attitude;
+ FL_STATE State;
+ // Target tile (used to calculate direction and movement)
+ uint16_t Target[AIRCRAFT_MAX_TARGETS];
+ uint8_t TargetIdx;
+ // Used to relate TYPE_AIRCRAFT_DATA and TYPE_FLIGHT_DATA
+ uint8_t FlightDataIdx;
+ // Position data (real pos inside map)
+ TYPE_ISOMETRIC_FIX16_POS IsoPos;
+ fix16_t Speed;
+ short TargetSpeed;
+ bool TargetReached;
+}TYPE_AIRCRAFT_DATA;
+
+typedef struct
+{
+ // ## State flags ##
+ // Player is on the game
+ bool Active;
+ // Player requests showing aircraft data menu
+ bool ShowAircraftData;
+ // Player on runway selection mode (when FL_STATE == APPROACH)
+ bool SelectRunway;
+ // Player on taxiway + runway selection mode (when FL_STATE == PARKED)
+ bool SelectTaxiwayRunway;
+ // Player on taxiway + parking selection mode (when FL_STATE == LANDED)
+ bool SelectTaxiwayParking;
+ // Tiles selected by player are not valid for establishing a new path
+ bool InvalidPath;
+ // Player has locked the camera at a determined aircraft
+ bool LockTarget;
+
+ // Stores indexes for player-specific active aircraft
+ uint8_t ActiveAircraftList[GAME_MAX_AIRCRAFT];
+ // Flight direction to be managed by player (see 2-player mode)
+ FL_DIR FlightDirection;
+ // Number of active aircraft for current player (could be not equal to total active aircraft!)
+ uint8_t ActiveAircraft;
+ // When too many aircraft are active, they are separated into different pages
+ uint8_t FlightDataPage;
+ // Selected aircraft on aircraft data list
+ uint8_t SelectedAircraft;
+ // Aircraft being followed by camera
+ uint8_t LockedAircraft;
+ // Index for GameRwy buffer on "Select runway" mode
+ uint16_t SelectedRunway;
+ // Tile pointed to by cursor
+ uint16_t SelectedTile;
+ // Waypoints added to list when player is tracing a path for an aircraft.
+ // For example: when determining path from runway to parking.
+ uint16_t Waypoints[PLAYER_MAX_WAYPOINTS];
+ // Internal index for waypoint management.
+ uint8_t WaypointIdx;
+ // Another internal index to keep last desired selected point by user when defining a path.
+ uint8_t LastWaypointIdx;
+
+ bool (*PadKeyPressed_Callback)(unsigned short);
+ bool (*PadKeyReleased_Callback)(unsigned short);
+ bool (*PadDirectionKeyPressed_Callback)(void);
+ TYPE_CAMERA Camera;
+}TYPE_PLAYER;
+
+typedef enum t_fontflags
+{
+ FONT_NOFLAGS = 0,
+ FONT_CENTERED = 0x01,
+ FONT_WRAP_LINE = 0x02,
+ FONT_BLEND_EFFECT = 0x04,
+ FONT_1HZ_FLASH = 0x08,
+ FONT_2HZ_FLASH = 0x10
+}FONT_FLAGS;
+
+typedef struct t_Font
+{
+ GsSprite spr;
+ short char_w;
+ short char_h;
+ char init_ch;
+ uint8_t char_per_row;
+ uint8_t max_ch_wrap;
+ FONT_FLAGS flags;
+ short spr_w;
+ short spr_h;
+ short spr_u;
+ short spr_v;
+}TYPE_FONT;
+
+typedef struct t_Timer
+{
+ uint32_t time;
+ uint32_t orig_time;
+ bool repeat_flag;
+ bool busy;
+ void (*Timeout_Callback)(void);
+}TYPE_TIMER;
+
+typedef struct t_Cheat
+{
+ unsigned short Combination[CHEAT_ARRAY_SIZE];
+ void (*Callback)(void);
+}TYPE_CHEAT;
+
+#endif // __GAME_STRUCTURES__HEADER__
diff --git a/Source/Gfx.c b/Source/Gfx.c new file mode 100755 index 0000000..a976b00 --- /dev/null +++ b/Source/Gfx.c @@ -0,0 +1,526 @@ +/* ************************************* + * Includes + * *************************************/ + +#include "Gfx.h" + +/* ************************************* + * Defines + * *************************************/ + +#define PRIMITIVE_LIST_SIZE 0x800 +#define DOUBLE_BUFFERING_SWAP_Y 256 +#define UPLOAD_IMAGE_FLAG 1 +#define MAX_LUMINANCE 0xFF +#define ROTATE_BIT_SHIFT 12 + +/* ************************************* + * Structs and enums + * *************************************/ + +enum +{ + BUTTON_SIZE = 16, + + BUTTON_CROSS_U = 48, + BUTTON_CROSS_V = 0, + + BUTTON_SQUARE_U = 0, + BUTTON_SQUARE_V = 0, + + BUTTON_TRIANGLE_U = 32, + BUTTON_TRIANGLE_V = 0, + + BUTTON_CIRCLE_U = 16, + BUTTON_CIRCLE_V = 0, +}; + +enum +{ + GFX_SECOND_DISPLAY_X = 384, + GFX_SECOND_DISPLAY_Y = 256, + GFX_SECOND_DISPLAY_TPAGE = 22 +}; + +/* ************************************* + * Global Variables + * *************************************/ + +GsSprite PSXButtons; + +/* ************************************* + * Local Prototypes + * *************************************/ + +static void GfxSwapBuffers(void); + +/* ************************************* + * Local Variables + * *************************************/ + +//Drawing environment +static GsDrawEnv DrawEnv; +//Display environment +static GsDispEnv DispEnv; +//Primitive list (it contains all the graphical data for the GPU) +static unsigned int prim_list[PRIMITIVE_LIST_SIZE]; +//Tells other modules whether data is being loaded to GPU +static volatile bool gfx_busy; +//Dictates (R,G,B) brigthness to all sprites silently +static uint8_t global_lum; + +void GfxSwapBuffers(void) +{ + if(DrawEnv.h == Y_SCREEN_RESOLUTION) + { + if(DispEnv.y == 0) + { + DispEnv.y = DOUBLE_BUFFERING_SWAP_Y; + DrawEnv.y = 0; + } + else if(DispEnv.y == DOUBLE_BUFFERING_SWAP_Y) + { + DispEnv.y = 0; + DrawEnv.y = DOUBLE_BUFFERING_SWAP_Y; + } + + GsSetDispEnv(&DispEnv); + GsSetDrawEnv(&DrawEnv); + } + +} + + +void GfxInitDrawEnv(void) +{ + DrawEnv.x = 0; + DrawEnv.y = 0; + DrawEnv.draw_on_display = false; + DrawEnv.w = X_SCREEN_RESOLUTION; + DrawEnv.h = Y_SCREEN_RESOLUTION; + + GsSetDrawEnv(&DrawEnv); +} + +void GfxInitDispEnv(void) +{ + DispEnv.x = 0; + DispEnv.y = 0; + + GsSetDispEnv(&DispEnv); +} + +void GfxSetPrimitiveList(void) +{ + GsSetList(prim_list); +} + +void GfxDrawScene_Fast(void) +{ + GfxSwapBuffers(); + FontCyclic(); + GsDrawList(); +} + +void GfxDrawScene(void) +{ + while( (SystemRefreshNeeded() == false) + || + (GsIsDrawing() == true) + || + (SystemDMAReady() == false) ); + + GfxDrawScene_Fast(); + + if(UpdatePads() == false) + { + SystemSetEmergencyMode(true); + } + else + { + SystemSetEmergencyMode(false); + } + + SystemRunTimers(); + + SystemUserTimersHandler(); + + SystemDisableScreenRefresh(); + + MemCardHandler(); + + SystemCheckStack(); +} + +void GfxDrawScene_Slow(void) +{ + GfxDrawScene(); + while(GfxIsGPUBusy() == true); +} + +void GfxSortSprite(GsSprite * spr) +{ + uint8_t aux_r = spr->r; + uint8_t aux_g = spr->g; + uint8_t aux_b = spr->b; + unsigned char aux_tpage = spr->tpage; + short aux_w = spr->w; + short aux_x = spr->x; + bool has_1hz_flash = spr->attribute & GFX_1HZ_FLASH; + bool has_2hz_flash = spr->attribute & GFX_2HZ_FLASH; + + if( (spr->w <= 0) || (spr->h <= 0) ) + { + // Invalid width or heigth + return; + } + + if(GfxIsSpriteInsideScreenArea(spr) == false) + { + return; + } + else if(has_2hz_flash && Gfx2HzFlash() == false) + { + return; + } + + if(global_lum != NORMAL_LUMINANCE) + { + if(spr->r < NORMAL_LUMINANCE - global_lum) + { + spr->r = 0; + } + else + { + spr->r -= NORMAL_LUMINANCE - global_lum; + } + + if(spr->g < NORMAL_LUMINANCE - global_lum) + { + spr->g = 0; + } + else + { + spr->g -= NORMAL_LUMINANCE - global_lum; + } + + if(spr->b < NORMAL_LUMINANCE - global_lum) + { + spr->b = 0; + } + else + { + spr->b -= NORMAL_LUMINANCE - global_lum; + } + } + + if(has_1hz_flash == true) + { + spr->attribute &= ~(GFX_1HZ_FLASH); + } + + if(spr->w > MAX_SIZE_FOR_GSSPRITE) + { + // GsSprites can't be bigger than 256x256, so since display + // resolution is 384x240, it must be split into two primitives. + + spr->w = MAX_SIZE_FOR_GSSPRITE; + GsSortSprite(spr); + + spr->x += MAX_SIZE_FOR_GSSPRITE; + spr->w = X_SCREEN_RESOLUTION - MAX_SIZE_FOR_GSSPRITE; + spr->tpage += MAX_SIZE_FOR_GSSPRITE / GFX_TPAGE_WIDTH; + GsSortSprite(spr); + + // Restore original values after sorting + spr->w = aux_w; + spr->tpage = aux_tpage; + spr->x = aux_x; + } + else + { + GsSortSprite(spr); + } + + if(has_1hz_flash == true) + { + spr->attribute |= GFX_1HZ_FLASH; + } + + spr->r = aux_r; + spr->g = aux_g; + spr->b = aux_b; +} + +uint8_t GfxGetGlobalLuminance(void) +{ + return global_lum; +} + +void GfxSetGlobalLuminance(uint8_t value) +{ + global_lum = value; +} + +void GfxIncreaseGlobalLuminance(int8_t step) +{ + if( ( (global_lum + step) < MAX_LUMINANCE ) + && + ( (global_lum + step) > 0 ) ) + { + global_lum += step; + } + else + { + global_lum = MAX_LUMINANCE; + } +} + +int GfxRotateFromDegrees(int deg) +{ + return deg << ROTATE_BIT_SHIFT; +} + +bool GfxIsGPUBusy(void) +{ + return (GsIsDrawing() || gfx_busy || SystemDMABusy() ); +} + +bool GfxSpriteFromFile(char * fname, GsSprite * spr) +{ + GsImage gsi; + + if(SystemLoadFile(fname) == false) + { + return false; + } + + while(GfxIsGPUBusy() == true); + + gfx_busy = true; + + GsImageFromTim(&gsi,SystemGetBufferAddress() ); + + GsSpriteFromImage(spr,&gsi,UPLOAD_IMAGE_FLAG); + gfx_busy = false; + + return true; +} + +bool GfxCLUTFromFile(char * fname) +{ + GsImage gsi; + + if(SystemLoadFile(fname) == false) + { + return false; + } + + while(GfxIsGPUBusy() == true); + + gfx_busy = true; + + GsImageFromTim(&gsi,SystemGetBufferAddress() ); + + GsUploadCLUT(&gsi); + + gfx_busy = false; + + return true; +} + +bool GfxIsInsideScreenArea(short x, short y, short w, short h) +{ + if( ( (x + w) >= 0) + && + (x < X_SCREEN_RESOLUTION) + && + ( (y + h) >= 0) + && + (y < Y_SCREEN_RESOLUTION) ) + { + return true; + } + + return false; +} + +bool GfxIsSpriteInsideScreenArea(GsSprite * spr) +{ + return GfxIsInsideScreenArea(spr->x, spr->y, spr->w, spr->h); +} + +void GfxDrawButton(short x, short y, unsigned short btn) +{ + static bool first_entered = true; + static short orig_u; + static short orig_v; + + if(first_entered == true) + { + first_entered = false; + orig_u = PSXButtons.u; + orig_v = PSXButtons.v; + } + + PSXButtons.w = BUTTON_SIZE; + PSXButtons.h = BUTTON_SIZE; + + PSXButtons.r = NORMAL_LUMINANCE; + PSXButtons.g = NORMAL_LUMINANCE; + PSXButtons.b = NORMAL_LUMINANCE; + + PSXButtons.x = x; + PSXButtons.y = y; + + switch(btn) + { + case PAD_CROSS: + PSXButtons.u = BUTTON_CROSS_U; + PSXButtons.v = BUTTON_CROSS_V; + break; + + case PAD_SQUARE: + PSXButtons.u = BUTTON_SQUARE_U; + PSXButtons.v = BUTTON_SQUARE_V; + break; + + case PAD_TRIANGLE: + PSXButtons.u = BUTTON_TRIANGLE_U; + PSXButtons.v = BUTTON_TRIANGLE_V; + break; + + case PAD_CIRCLE: + PSXButtons.u = BUTTON_CIRCLE_U; + PSXButtons.v = BUTTON_CIRCLE_V; + break; + + case PAD_L1: + case PAD_L2: + case PAD_R1: + case PAD_R2: + case PAD_SELECT: + case PAD_START: + default: + // Set null width and height so that sprite doesn't get sorted + PSXButtons.w = 0; + PSXButtons.h = 0; + break; + } + + PSXButtons.u += orig_u; + PSXButtons.v += orig_v; + + GfxSortSprite(&PSXButtons); +} + +void GfxSaveDisplayData(GsSprite *spr) +{ + MoveImage( DispEnv.x, + DispEnv.y, + GFX_SECOND_DISPLAY_X, + GFX_SECOND_DISPLAY_Y, + X_SCREEN_RESOLUTION, + Y_SCREEN_RESOLUTION); + + spr->x = 0; + spr->y = 0; + spr->tpage = GFX_SECOND_DISPLAY_TPAGE; + spr->attribute |= COLORMODE(COLORMODE_16BPP); + spr->w = X_SCREEN_RESOLUTION; + spr->h = Y_SCREEN_RESOLUTION; + spr->u = 0; + spr->v = 0; + spr->r = NORMAL_LUMINANCE; + spr->g = NORMAL_LUMINANCE; + spr->b = NORMAL_LUMINANCE; +} + +bool Gfx1HzFlash(void) +{ + static bool show = false; + + if(System1SecondTick() == true) + { + show = show? false:true; + } + + return show; +} + +bool Gfx2HzFlash(void) +{ + static bool show = false; + + if(System500msTick() == true) + { + show = show? false:true; + } + + return show; +} + +bool GfxTPageOffsetFromVRAMPosition(GsSprite * spr, short x, short y) +{ + if( (x >= VRAM_W) || (x < 0) || (y >= VRAM_H) || (y < 0) ) + { + return false; + } + + spr->tpage = x / GFX_TPAGE_WIDTH; + spr->tpage += (short)(VRAM_W / GFX_TPAGE_WIDTH) * (short)(y / GFX_TPAGE_HEIGHT); + + spr->u = (x % GFX_TPAGE_WIDTH); + + if(spr->attribute & COLORMODE(COLORMODE_8BPP)) + { + // On 8bpp images, it looks like U offset needs to be multiplied by 2. + spr->u <<= 1; + } + + spr->v = (y % GFX_TPAGE_HEIGHT); + + //dprintf("Sprite:\n\tTPAGE: %d\n\tU=%d\n\tV=%d\n",spr->tpage,spr->u, spr->v); + + return false; +} + +TYPE_CARTESIAN_POS GfxIsometricToCartesian(TYPE_ISOMETRIC_POS * ptrIsoPos) +{ + TYPE_CARTESIAN_POS retCartPos; + + retCartPos.x = ptrIsoPos->x - (ptrIsoPos->x >> 1); + retCartPos.x -= ptrIsoPos->y >> 1; + + retCartPos.y = ptrIsoPos->y >> 2; + retCartPos.y += ptrIsoPos->x >> 2; + retCartPos.y -= ptrIsoPos->z; + + return retCartPos; +} + +TYPE_CARTESIAN_POS GfxIsometricFix16ToCartesian(TYPE_ISOMETRIC_FIX16_POS * ptrIso16Pos) +{ + TYPE_ISOMETRIC_POS IsoPos; + + IsoPos.x = (short)fix16_to_int(ptrIso16Pos->x); + IsoPos.y = (short)fix16_to_int(ptrIso16Pos->y); + IsoPos.z = (short)fix16_to_int(ptrIso16Pos->z); + + return GfxIsometricToCartesian(&IsoPos); +} + +TYPE_ISOMETRIC_POS GfxCartesianToIsometric(TYPE_CARTESIAN_POS * ptrCartPos) +{ + TYPE_ISOMETRIC_POS IsoPos; + + /*isoX = cartX - cartY; + isoY = (cartX + cartY) / 2;*/ + IsoPos.x = ptrCartPos->x + (ptrCartPos->y << 1); + IsoPos.y = (ptrCartPos->y << 1) - ptrCartPos->x; + + // Explicitely suppose z = 0 + IsoPos.z = 0; + + return IsoPos; +} diff --git a/Source/Gfx.h b/Source/Gfx.h new file mode 100755 index 0000000..b9984ee --- /dev/null +++ b/Source/Gfx.h @@ -0,0 +1,81 @@ +#ifndef __GFX_HEADER__ +#define __GFX_HEADER__ + +/* ************************************* + * Includes + * *************************************/ + +#include "Global_Inc.h" +#include "System.h" +#include "Camera.h" +#include "Pad.h" + +/* ************************************* + * Defines + * *************************************/ + +#define X_SCREEN_RESOLUTION 384 +#define Y_SCREEN_RESOLUTION 240 +#define VRAM_W 1024 +#define VRAM_H 512 +#define MAX_SIZE_FOR_GSSPRITE 256 +#define GFX_TPAGE_WIDTH 64 +#define GFX_TPAGE_HEIGHT 256 +#define GFX_1HZ_FLASH (1<<7) +#define GFX_2HZ_FLASH (1<<8) +#define FULL_LUMINANCE 0xFF + +/* ************************************* + * Global prototypes + * *************************************/ + +void GfxInitDrawEnv(void); +void GfxInitDispEnv(void); +void GfxSetPrimitiveList(void); +// Renders new scene. Use this function unless you know what you are doing! +void GfxDrawScene(void); +// Blocking version. Calls GfxDrawScene() and then adds a while(GfxIsBusy() ) +// after it. +void GfxDrawScene_Slow(void); +// Only renders screen and does not update any pad data or timer data. +// To be used in ISR! +void GfxDrawScene_Fast(void); +// Fills a GsSprite structure with information from a TIM file. +bool GfxSpriteFromFile(char * fname, GsSprite * spr); +// Reportedly, loads CLUT data from a TIM image (image data is discarded) +bool GfxCLUTFromFile(char * fname); +// Returns true if current object is within screen limits, false otherwise. +bool GfxIsInsideScreenArea(short x, short y, short w, short h); +// Function overload for GsSprite structures. +bool GfxIsSpriteInsideScreenArea(GsSprite * spr); +// Used to know whether GPU operation can be done. +bool GfxIsGPUBusy(void); +void GfxSortSprite(GsSprite * spr); +uint8_t GfxGetGlobalLuminance(void); +void GfxSetGlobalLuminance(uint8_t value); +void GfxIncreaseGlobalLuminance(int8_t step); +int GfxRotateFromDegrees(int deg); +void GfxDrawButton(short x, short y, unsigned short btn); +// Sends current display data on a specific VRAM section and fills +// sprite structure pointed to by "spr". +void GfxSaveDisplayData(GsSprite *spr); +TYPE_CARTESIAN_POS GfxIsometricToCartesian(TYPE_ISOMETRIC_POS * ptrIsoPos); +// Function overload for fixed-point 16.16 data type. +TYPE_CARTESIAN_POS GfxIsometricFix16ToCartesian(TYPE_ISOMETRIC_FIX16_POS * ptrIso16Pos); +// Transforms cartesian position to isometric position. Z axis is assumed to be zero! +TYPE_ISOMETRIC_POS GfxCartesianToIsometric(TYPE_CARTESIAN_POS * ptrCartPos); +// Fills GsSprite structure pointed to by "spr" with texture page and U/V +// offset data given a position in VRAM. +bool GfxTPageOffsetFromVRAMPosition(GsSprite * spr, short x, short y); +// Switches between true and false every 1 exact second (used for flashing effects) +bool Gfx1HzFlash(void); +// Switches between true and false every 500 milliseconds (used for flashing effects) +bool Gfx2HzFlash(void); + +/* ************************************* + * Global variables + * *************************************/ + +extern GsSprite PSXButtons; + +#endif //__GFX_HEADER__ diff --git a/Source/Global_Inc.h b/Source/Global_Inc.h new file mode 100755 index 0000000..fd50bb6 --- /dev/null +++ b/Source/Global_Inc.h @@ -0,0 +1,38 @@ +#ifndef __GLOBAL_INC__H__ +#define __GLOBAL_INC__H__ + +/* ************************************* + * Includes + * *************************************/ + +#include <psx.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <types.h> +#include <fixmath.h> + +/* ************************************* + * Defines + * *************************************/ + +#define REFRESH_FREQUENCY 50 //50 Hz PAL / 60 Hz NTSC + +#ifndef bool + typedef enum + { + false = 0, + true = 1 + }bool; +#endif + +#if (PSXSDK_VERSION != 0x0599) +#error "Wrong PSXSDK version! Please use version 0.5.99." +#endif + +/* Test for GCC > 5.2.0 */ +#if ( (__GNUC__ != 5) || (__GNUC_MINOR__ != 2) || (__GNUC_PATCHLEVEL__ != 0) ) +#error "Wrong GCC version! Please use version 5.2.0." +#endif + +#endif // __GLOBAL_INC__H__ diff --git a/Source/LoadMenu.c b/Source/LoadMenu.c new file mode 100755 index 0000000..7c90cba --- /dev/null +++ b/Source/LoadMenu.c @@ -0,0 +1,523 @@ +/* ************************************** + * Includes * + * *************************************/ + +#include "LoadMenu.h" + +/* ************************************** + * Defines * + * *************************************/ + +/* ************************************** + * Structs and enums * + * *************************************/ + +enum +{ + SMALL_FONT_SIZE = 8 +}; + +enum +{ + BG_BLUE_TARGET_VALUE = 0xC0, + BG_WHITE_TARGET_VALUE = /*0x40*/ 0, + BG_INCREASE_STEP = 0x10 +}; + +enum +{ + LOADING_BAR_X = 64, + LOADING_BAR_Y = 200, + LOADING_BAR_N_LINES = 4, + + LOADING_BAR_WIDTH = 256, + LOADING_BAR_HEIGHT = 16, + + LOADING_BAR_LUMINANCE_TARGET = NORMAL_LUMINANCE, + LOADING_BAR_LUMINANCE_STEP = 10 +}; + +enum +{ + LOADING_TITLE_CLUT_X = 384, + LOADING_TITLE_CLUT_Y = 496, + LOADING_TITLE_X = 128, + LOADING_TITLE_Y = 32, + + LOADING_TITLE_U = 0, + LOADING_TITLE_V = 0, + + LOADING_TITLE_LUMINANCE_STEP = 10, + LOADING_TITLE_LUMINANCE_TARGET = NORMAL_LUMINANCE +}; + +enum +{ + PLANE_START_X = 56, + PLANE_START_Y = 200, + + PLANE_U = 0, + PLANE_V = 32, + PLANE_SIZE = 16, + + PLANE_LUMINANCE_STEP = 0x10, + PLANE_LUMINANCE_TARGET_VALUE = NORMAL_LUMINANCE +}; + +/* ************************************* + * Local Prototypes + * *************************************/ + +static void LoadMenuInit(void); +static void ISR_LoadMenuVBlank(void); +static bool LoadMenuISRHasEnded(void); +static bool LoadMenuISRHasStarted(void); +static void LoadMenuLoadFileList( char * fileList[], void * dest[], + uint8_t szFileList, uint8_t szDestList); + +/* ************************************* + * Local Variables + * *************************************/ + +static GsGPoly4 loadMenuBg; +static GsSprite LoadMenuPlaneSpr; +static GsSprite LoadMenuTitleSpr; +static GsLine LoadMenuBarLines[LOADING_BAR_N_LINES]; +static GsRectangle LoadMenuBarRect; + +static char * LoadMenuFiles[] = { "cdrom:\\DATA\\SPRITES\\PLANE.TIM;1", + "cdrom:\\DATA\\SPRITES\\LOADING.TIM;1", + "cdrom:\\DATA\\FONTS\\FONT_2.FNT;1" }; +static void * LoadMenuDest[] = {(GsSprite*)&LoadMenuPlaneSpr, + (GsSprite*)&LoadMenuTitleSpr, + (TYPE_FONT*)&SmallFont }; + +static char * strCurrentFile; + +// Flags to communicate with ISR state +// * startup_flag: background fades in from black to blue. +// * end_flag: tells the background to fade out to black. +// * isr_ended: background has totally faded out to black. +// * isr_started: tells the ISR has finished starting up. +static volatile bool startup_flag; +static volatile bool isr_started; +static volatile bool end_flag; +static volatile bool isr_ended; +// Set to true when LoadMenuInit() has been called, and set to false +// once LoadMenuEnd() is called. +// It's used when multiple modules call LoadMenu() at the same time, +// so load menu does not have to be initialised each time; +static bool load_menu_running; + +void LoadMenuInit(void) +{ + int i; + static bool first_load = false; + + if(first_load == false) + { + first_load = true; + LoadMenuLoadFileList( LoadMenuFiles, + LoadMenuDest, + sizeof(LoadMenuFiles) / sizeof(char*), + sizeof(LoadMenuDest) / sizeof(void*)); + } + + FontSetSize(&SmallFont, SMALL_FONT_SIZE); + + LoadMenuPlaneSpr.r = 0; + LoadMenuPlaneSpr.g = 0; + LoadMenuPlaneSpr.b = 0; + + LoadMenuPlaneSpr.x = PLANE_START_X; + LoadMenuPlaneSpr.y = PLANE_START_Y; + + // "Loading..." title init + + LoadMenuTitleSpr.r = 0; + LoadMenuTitleSpr.g = 0; + LoadMenuTitleSpr.b = 0; + + LoadMenuTitleSpr.x = LOADING_TITLE_X; + LoadMenuTitleSpr.y = LOADING_TITLE_Y; + + LoadMenuTitleSpr.cx = LOADING_TITLE_CLUT_X; + LoadMenuTitleSpr.cy = LOADING_TITLE_CLUT_Y; + LoadMenuTitleSpr.u = LOADING_TITLE_U; + LoadMenuTitleSpr.v = LOADING_TITLE_V; + + startup_flag = true; + isr_started = false; + end_flag = false; + isr_ended = false; + + // Background init + + loadMenuBg.x[0] = 0; + loadMenuBg.x[1] = X_SCREEN_RESOLUTION; + loadMenuBg.x[2] = 0; + loadMenuBg.x[3] = X_SCREEN_RESOLUTION; + + loadMenuBg.y[0] = 0; + loadMenuBg.y[1] = 0; + loadMenuBg.y[2] = Y_SCREEN_RESOLUTION; + loadMenuBg.y[3] = Y_SCREEN_RESOLUTION; + + // Colour components adjustment (default to zero) + for(i = 0; i < 4 ; i++) + { + loadMenuBg.r[i] = 0; + loadMenuBg.g[i] = 0; + loadMenuBg.b[i] = 0; + } + + // "Loading" bar line 0 (up left - up right) + + LoadMenuBarLines[0].x[0] = LOADING_BAR_X; + LoadMenuBarLines[0].x[1] = LOADING_BAR_X + LOADING_BAR_WIDTH; + + LoadMenuBarLines[0].y[0] = LOADING_BAR_Y; + LoadMenuBarLines[0].y[1] = LOADING_BAR_Y; + + // "Loading" bar line 1 (up left - down left) + + LoadMenuBarLines[1].x[0] = LOADING_BAR_X; + LoadMenuBarLines[1].x[1] = LOADING_BAR_X; + + LoadMenuBarLines[1].y[0] = LOADING_BAR_Y; + LoadMenuBarLines[1].y[1] = LOADING_BAR_Y + LOADING_BAR_HEIGHT; + + // "Loading" bar line 2 (down left - down right) + + LoadMenuBarLines[2].x[0] = LOADING_BAR_X; + LoadMenuBarLines[2].x[1] = LOADING_BAR_X + LOADING_BAR_WIDTH; + + LoadMenuBarLines[2].y[0] = LOADING_BAR_Y + LOADING_BAR_HEIGHT; + LoadMenuBarLines[2].y[1] = LOADING_BAR_Y + LOADING_BAR_HEIGHT; + + // "Loading" bar line 3 (up right - down right) + + LoadMenuBarLines[3].x[0] = LOADING_BAR_X + LOADING_BAR_WIDTH; + LoadMenuBarLines[3].x[1] = LOADING_BAR_X + LOADING_BAR_WIDTH; + + LoadMenuBarLines[3].y[0] = LOADING_BAR_Y; + LoadMenuBarLines[3].y[1] = LOADING_BAR_Y + LOADING_BAR_HEIGHT; + + for(i = 0; i < LOADING_BAR_N_LINES ; i++) + { + LoadMenuBarLines[i].r = 0; + LoadMenuBarLines[i].g = 0; + LoadMenuBarLines[i].b = 0; + } + + LoadMenuBarRect.r = 0; + LoadMenuBarRect.g = 0; + LoadMenuBarRect.b = 0; + + // LoadMenuBarRect.attribute |= ENABLE_TRANS | TRANS_MODE(0); + + LoadMenuBarRect.x = LOADING_BAR_X; + LoadMenuBarRect.y = LOADING_BAR_Y; + LoadMenuBarRect.w = 0; + LoadMenuBarRect.h = LOADING_BAR_HEIGHT; + + LoadMenuBarRect.attribute |= ENABLE_TRANS | TRANS_MODE(0); + + load_menu_running = true; + + SmallFont.spr.r = 0; + SmallFont.spr.g = 0; + SmallFont.spr.b = 0; + + GfxSetGlobalLuminance(0); + + SetVBlankHandler(&ISR_LoadMenuVBlank); +} + +void LoadMenuEnd(void) +{ + end_flag = true; + load_menu_running = false; + + while(LoadMenuISRHasEnded() == false); + dprintf("Set default VBlank handler.\n"); + SetVBlankHandler(&ISR_SystemDefaultVBlank); + + GfxSetGlobalLuminance(NORMAL_LUMINANCE); +} + +void ISR_LoadMenuVBlank(void) +{ + uint8_t i; + + if( (SystemIsBusy() == true) || (GfxIsGPUBusy() == true) ) + { + return; + } + + if(startup_flag == true) + { + // "Loading..." text + if(LoadMenuTitleSpr.r < LOADING_TITLE_LUMINANCE_TARGET) + { + LoadMenuTitleSpr.r += LOADING_TITLE_LUMINANCE_STEP; + LoadMenuTitleSpr.g += LOADING_TITLE_LUMINANCE_STEP; + LoadMenuTitleSpr.b += LOADING_TITLE_LUMINANCE_STEP; + } + + if(loadMenuBg.g[0] < BG_WHITE_TARGET_VALUE) + { + loadMenuBg.r[0] += BG_INCREASE_STEP; + loadMenuBg.r[1] += BG_INCREASE_STEP; + + loadMenuBg.g[0] += BG_INCREASE_STEP; + loadMenuBg.g[1] += BG_INCREASE_STEP; + + loadMenuBg.b[0] += BG_INCREASE_STEP; + loadMenuBg.b[1] += BG_INCREASE_STEP; + } + // Blue background + if(loadMenuBg.b[2] < BG_BLUE_TARGET_VALUE) + { + loadMenuBg.b[2] += BG_INCREASE_STEP; + loadMenuBg.b[3] += BG_INCREASE_STEP; + } + + if(LoadMenuBarRect.r < LOADING_BAR_LUMINANCE_TARGET) + { + LoadMenuBarRect.r += LOADING_BAR_LUMINANCE_STEP; + LoadMenuBarRect.g += LOADING_BAR_LUMINANCE_STEP; + LoadMenuBarRect.b += LOADING_BAR_LUMINANCE_STEP; + } + else + { + startup_flag = false; + isr_started = true; + } + + for(i = 0;i < LOADING_BAR_N_LINES ; i++) + { + if(LoadMenuBarLines[i].r < LOADING_BAR_LUMINANCE_TARGET) + { + LoadMenuBarLines[i].r += LOADING_BAR_LUMINANCE_STEP; + LoadMenuBarLines[i].g += LOADING_BAR_LUMINANCE_STEP; + LoadMenuBarLines[i].b += LOADING_BAR_LUMINANCE_STEP; + } + } + + if(LoadMenuPlaneSpr.r < PLANE_LUMINANCE_TARGET_VALUE) + { + LoadMenuPlaneSpr.r += PLANE_LUMINANCE_STEP; + LoadMenuPlaneSpr.g += PLANE_LUMINANCE_STEP; + LoadMenuPlaneSpr.b += PLANE_LUMINANCE_STEP; + } + + } + else if(end_flag == true) + { + LoadMenuTitleSpr.r -= LOADING_TITLE_LUMINANCE_STEP; + LoadMenuTitleSpr.g -= LOADING_TITLE_LUMINANCE_STEP; + LoadMenuTitleSpr.b -= LOADING_TITLE_LUMINANCE_STEP; + + if(loadMenuBg.g[0] > 0) + { + loadMenuBg.r[0] -= BG_INCREASE_STEP; + loadMenuBg.r[1] -= BG_INCREASE_STEP; + + loadMenuBg.g[0] -= BG_INCREASE_STEP; + loadMenuBg.g[1] -= BG_INCREASE_STEP; + + loadMenuBg.b[0] -= BG_INCREASE_STEP; + loadMenuBg.b[1] -= BG_INCREASE_STEP; + } + + if(loadMenuBg.b[2] > 0) + { + loadMenuBg.b[2] -= BG_INCREASE_STEP; + loadMenuBg.b[3] -= BG_INCREASE_STEP; + } + + if(loadMenuBg.b[2] == 0) + { + end_flag = false; + isr_ended = true; + } + + if(LoadMenuPlaneSpr.r > 0) + { + LoadMenuPlaneSpr.r -= PLANE_LUMINANCE_STEP; + LoadMenuPlaneSpr.g -= PLANE_LUMINANCE_STEP; + LoadMenuPlaneSpr.b -= PLANE_LUMINANCE_STEP; + } + + LoadMenuPlaneSpr.x = (PLANE_START_X + LOADING_BAR_WIDTH); + LoadMenuPlaneSpr.y = PLANE_START_Y; + + LoadMenuBarRect.w = LOADING_BAR_WIDTH; + + if(LoadMenuBarRect.r > 0) + { + LoadMenuBarRect.r -= LOADING_BAR_LUMINANCE_STEP; + LoadMenuBarRect.g -= LOADING_BAR_LUMINANCE_STEP; + LoadMenuBarRect.b -= LOADING_BAR_LUMINANCE_STEP; + } + + for(i = 0;i < LOADING_BAR_N_LINES ; i++) + { + if(LoadMenuBarLines[i].r > 0) + { + LoadMenuBarLines[i].r -= LOADING_BAR_LUMINANCE_STEP; + LoadMenuBarLines[i].g -= LOADING_BAR_LUMINANCE_STEP; + LoadMenuBarLines[i].b -= LOADING_BAR_LUMINANCE_STEP; + } + } + } + + GsSortGPoly4(&loadMenuBg); + + GsSortRectangle(&LoadMenuBarRect); + + for(i = 0 ; i < LOADING_BAR_N_LINES ; i++) + { + GsSortLine(&LoadMenuBarLines[i]); + } + + GsSortSprite(&LoadMenuTitleSpr); + + LoadMenuPlaneSpr.w = PLANE_SIZE; + LoadMenuPlaneSpr.h = PLANE_SIZE; + + LoadMenuPlaneSpr.u = PLANE_U; + LoadMenuPlaneSpr.v = PLANE_V; + + GsSortSprite(&LoadMenuPlaneSpr); + + FontSetFlags(&SmallFont, FONT_BLEND_EFFECT); + + FontPrintText( &SmallFont, + LOADING_BAR_X - 8, + LOADING_BAR_Y + LOADING_BAR_HEIGHT + 8, + strCurrentFile ); + + FontSetFlags(&SmallFont, FONT_NOFLAGS); + + GfxDrawScene_Fast(); +} + +bool LoadMenuISRHasEnded(void) +{ + return isr_ended; +} + +bool LoadMenuISRHasStarted(void) +{ + return isr_started; +} + +void LoadMenu( char * fileList[], + void * dest[], + uint8_t szFileList , uint8_t szDestList) +{ + + if(load_menu_running == false) + { + LoadMenuInit(); + + while(LoadMenuISRHasStarted() == false); + } + + LoadMenuLoadFileList(fileList,dest,szFileList,szDestList); + +} + +void LoadMenuLoadFileList( char * fileList[], void * dest[], + uint8_t szFileList, uint8_t szDestList) +{ + char aux_file_name[100]; + char * extension; + short x_increment; + uint8_t fileLoadedCount; + + if(szFileList != szDestList) + { + dprintf("File list size different from dest list size! %d vs %d\n", + szFileList, szDestList); + return; + } + + for(fileLoadedCount = 0; fileLoadedCount < szFileList ; fileLoadedCount++) + { + if(fileList[fileLoadedCount] == NULL) + { + continue; + } + + strCurrentFile = fileList[fileLoadedCount]; + + x_increment = (short)(LOADING_BAR_WIDTH / szFileList); + + // Calculate new X position for loading menu plane sprite. + // This is not calculated on ISR as to avoid longer ISR time. + LoadMenuPlaneSpr.x = (PLANE_START_X + (fileLoadedCount* x_increment) ); + + LoadMenuBarRect.w = fileLoadedCount* x_increment; + + //dprintf("Files %d / %d loaded. New plane X = %d.\n",fileLoadedCount,szFileList,LoadMenuPlaneSpr.x); + + // Backup original file path + strncpy(aux_file_name,fileList[fileLoadedCount],100); + + //We want to get file extension, so split into tokens + strtok(fileList[fileLoadedCount],".;"); + extension = strtok(NULL,".;"); + + dprintf("File extension: .%s\n",extension); + //Restore original file path in order to load file + strncpy(fileList[fileLoadedCount],aux_file_name,100); + + if(strncmp(extension,"TIM",3) == 0) + { + if(GfxSpriteFromFile(fileList[fileLoadedCount], dest[fileLoadedCount]) == false) + { + dprintf("Could not load image file \"%s\"!\n",fileList[fileLoadedCount]); + } + } + else if(strncmp(extension,"CLT",3) == 0) + { + if(dest[fileLoadedCount] != NULL) + { + dprintf("WARNING: File %s linked to non-NULL destination pointer!\n", dest[fileLoadedCount]); + } + + if(GfxCLUTFromFile(fileList[fileLoadedCount]) == false) + { + dprintf("Could not load CLUT file \"%s\"!\n",fileList[fileLoadedCount]); + } + } + else if(strncmp(extension,"VAG",3) == 0) + { + if(SfxUploadSound(fileList[fileLoadedCount], dest[fileLoadedCount]) == false) + { + dprintf("Could not load sound file \"%s\"!\n",fileList[fileLoadedCount]); + } + } + else if(strncmp(extension,"FNT",3) == 0) + { + if(FontLoadImage(fileList[fileLoadedCount], dest[fileLoadedCount]) == false) + { + dprintf("Could not load font file \"%s\"!\n",fileList[fileLoadedCount]); + } + } + else if(strncmp(extension,"PLT",3) == 0) + { + if(PltParserLoadFile(fileList[fileLoadedCount], dest[fileLoadedCount]) == false) + { + dprintf("Could not load pilots file \"%s\"!\n",fileList[fileLoadedCount]); + } + } + else + { + dprintf("LoadMenu does not recognize following extension: %s\n",extension); + } + } +} diff --git a/Source/LoadMenu.h b/Source/LoadMenu.h new file mode 100755 index 0000000..a49219e --- /dev/null +++ b/Source/LoadMenu.h @@ -0,0 +1,28 @@ +#ifndef __LOAD_MENU_HEADER__ +#define __LOAD_MENU_HEADER__ + +/* ************************************* + * Includes + * *************************************/ + +#include "Global_Inc.h" +#include "Gfx.h" +#include "System.h" +#include "PltParser.h" +#include "Font.h" + +/* ************************************* + * Defines + * *************************************/ + +/* ************************************* + * Global prototypes + * *************************************/ + +void LoadMenu( char * fileList[], + void * dest[], + uint8_t szFileList , uint8_t szDestList); + +void LoadMenuEnd(void); + +#endif //__LOAD_MENU_HEADER__ diff --git a/Source/MainMenuBtnAni.c b/Source/MainMenuBtnAni.c new file mode 100755 index 0000000..8f92672 --- /dev/null +++ b/Source/MainMenuBtnAni.c @@ -0,0 +1,75 @@ +/* ************************************* + * Includes + * *************************************/ + +#include "MainMenuBtnAni.h" + +/* ************************************* + * Defines + * *************************************/ + +/* ************************************* + * Global prototypes + * *************************************/ + +/* ************************************* + * Global variables + * *************************************/ + +short MainMenuBtnAni[] = +{ + 0, + 3, + 6, + 9, + 11, + 12, + 13, + 13, + 13, + 13, + 12, + 11, + 10, + 8, + 6, + 5, + 3, + 1, + 0, + 1, + 3, + 3, + 4, + 5, + 5, + 5, + 5, + 5, + 5, + 4, + 4, + 3, + 3, + 2, + 1, + 1, + 0, + 1, + 1, + 1, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 1, + 1, + 1, + 1, + 0 + }; diff --git a/Source/MainMenuBtnAni.h b/Source/MainMenuBtnAni.h new file mode 100755 index 0000000..7741bb4 --- /dev/null +++ b/Source/MainMenuBtnAni.h @@ -0,0 +1,27 @@ +#ifndef __MAINMENUBTN_HEADER__ +#define __MAINMENUBTN_HEADER__ + + +/* ************************************* + * Includes + * *************************************/ + +#include "Global_Inc.h" + +/* ************************************* + * Defines + * *************************************/ + +#define MAIN_MENU_BTN_ANI_SIZE 53 + +/* ************************************* + * Global prototypes + * *************************************/ + +/* ************************************* + * Global variables + * *************************************/ + +extern short MainMenuBtnAni[]; + +#endif // __MAINMENUBTN_HEADER__ diff --git a/Source/Makefile b/Source/Makefile new file mode 100755 index 0000000..3e96e0b --- /dev/null +++ b/Source/Makefile @@ -0,0 +1,119 @@ +CC = psx-gcc +DEFINE= -DFIXMATH_FAST_SIN -D_PAL_MODE_ -DPSXSDK_DEBUG -DNO_CDDA -DNO_INTRO +LIBS= -lfixmath +CC_FLAGS = -Wall -Werror -c -Os +LINKER = psx-gcc + +PROJECT = AIRPORT +PROJECT_DIR = ~/Airport + +ELF2EXE = elf2exe +ELF2EXE_FLAGS = -mark="A homebrew game created with PSXSDK" +LICENSE_FILE = /usr/local/psxsdk/share/licenses/infoeur.dat + +PSXSDK_DIR = /usr/local/psxsdk/bin + +EMULATOR_DIR = ~/pcsxr +EMULATOR = pcsxr.exe +SOUND_INTERFACE = +EMULATOR_FLAGS = -nogui -psxout +OBJ_DIR = Obj +SRC_DIR = . +MUSIC_TRACKS = --track=../Bin/TRACK01.bin --track=../Bin/TRACK02.bin --track=../Bin/TRACK03.bin +FFMPEG = ffmpeg +FFMPEG_DIR = ../Music/ffmpeg/bin +FFMPEG_FLAGS = -f s16le -acodec pcm_s16le + +GNU_SIZE = mipsel-unknown-elf-size + +all: build image clean +#emulator clean + +rebuild: remove build + +build: clean objects levels $(PROJECT).elf $(PROJECT).exe + +objects: $(addprefix $(OBJ_DIR)/,main.o System.o Menu.o Gfx.o Pad.o MainMenuBtnAni.o \ + LoadMenu.o GameGui.o Sfx.o Camera.o EndAnimation.o \ + PSXSDKIntro.o PltParser.o Game.o Font.o MemCard.o \ + Aircraft.o) + +music_objects: $(addprefix ../Music/, TRACK01.bin TRACK02.bin TRACK03.bin) + +remove: + rm -f Obj/*.o + +$(OBJ_DIR)/%.o: $(SRC_DIR)/%.c + $(CC) $< -o $@ $(DEFINE) $(CC_FLAGS) + +$(PROJECT).elf: + $(LINKER) Obj/*.o -o Exe/$(PROJECT).elf $(LIBS) + +$(PROJECT).exe: + $(ELF2EXE) Exe/$(PROJECT).elf Exe/$(PROJECT).exe $(ELF2EXE_FLAGS) + cp Exe/$(PROJECT).exe ../cdimg + +image: + rm -f $(PROJECT).iso $(PROJECT).bin + rm -f $(PROJECT).cue + mkisofs -o $(PROJECT).iso -V $(PROJECT) -sysid PLAYSTATION ../cdimg + mkpsxiso $(PROJECT).iso $(PROJECT).bin $(LICENSE_FILE) $(MUSIC_TRACKS) + mv $(PROJECT).bin ../Bin + mv $(PROJECT).cue ../Bin + rm -f $(PROJECT).cue + rm -f $(PROJECT).iso + $(GNU_SIZE) Exe/$(PROJECT).elf + +emulator: + export PATH=$$PATH:$(EMULATOR_DIR) + $(EMULATOR) -cdfile $(PROJECT_DIR)/Bin/$(PROJECT).bin $(EMULATOR_FLAGS) + +clean: + rm -f $(PROJECT).elf cdimg/$(PROJECT).exe $(PROJECT).bin $(PROJECT).cue cdimg/README.txt + rm -f $(PROJECT).iso $(PROJECT).exe $(PROJECT).elf + +tiles: + rm -f ../cdimg/DATA/SPRITES/*.TIM + rm -f ../cdimg/DATA/FONTS/*.FNT + bmp2tim ../Sprites/PSXDisk.bmp ../cdimg/DATA/SPRITES/PSXDISK.TIM 16 -org=384,0 -mpink + bmp2tim ../Sprites/IntroFnt.bmp ../cdimg/DATA/SPRITES/INTROFNT.TIM 16 -org=384,76 -mpink + bmp2tim ../Sprites/Tileset1.bmp ../cdimg/DATA/SPRITES/TILESET1.TIM 16 -org=384,0 -mpink + bmp2tim ../Sprites/Tileset2.bmp ../cdimg/DATA/SPRITES/TILESET2.TIM 16 -org=640,0 -mpink + bmp2tim ../Sprites/MainMenu.bmp ../cdimg/DATA/SPRITES/MAINMENU.TIM 16 -org=768,384 -mpink + bmp2tim ../Sprites/Loading.bmp ../cdimg/DATA/SPRITES/LOADING.TIM 4 -mpink -org=768,256 -clut=384,496 + bmp2tim ../Sprites/Plane.bmp ../cdimg/DATA/SPRITES/PLANE.TIM 16 -org=768,288 -mpink + bmp2tim ../Sprites/Buttons.bmp ../cdimg/DATA/SPRITES/BUTTONS.TIM 16 -org=784,288 -mpink + bmp2tim ../Sprites/GamePln.bmp ../cdimg/DATA/SPRITES/GAMEPLN.TIM 8 -mpink -org=800,304 -clut=384,497 + bmp2tim ../Sprites/GamePln_Blue.bmp ../cdimg/DATA/SPRITES/PLNBLUE.CLT 8 -mpink -clut=384,501 + bmp2tim ../Sprites/Bubble.bmp ../cdimg/DATA/SPRITES/BUBBLE.TIM 8 -org=848,288 -mpink -clut=384,498 + bmp2tim ../Sprites/Font_1_4bit.bmp ../cdimg/DATA/FONTS/FONT_1.FNT 4 -org=960,256 -mpink -clut=384,500 + bmp2tim ../Sprites/Font_2_4bit.bmp ../cdimg/DATA/FONTS/FONT_2.FNT 4 -org=768,304 -mpink -clut=384,499 + bmp2tim ../Sprites/Arrows.bmp ../cdimg/DATA/SPRITES/ARROWS.TIM 16 -org=812,304 -mpink + bmp2tim ../Sprites/GPL_4bit.bmp ../cdimg/DATA/SPRITES/GPL.TIM 4 -org=384,174 -mpink -clut=384,502 + bmp2tim ../Sprites/OpSrc_8bit.bmp ../cdimg/DATA/SPRITES/OPENSRC.TIM 8 -org=464,0 -mpink -clut=384,503 + bmp2tim ../Sprites/Mouse.bmp ../cdimg/DATA/SPRITES/MOUSE.TIM 16 -org=828,304 -mpink + +sounds: + rm -f ../cdimg/DATA/SOUNDS/*.VAG + wav2vag ../Sounds/Bell.wav ../cdimg/DATA/SOUNDS/BELL.VAG + wav2vag ../Sounds/Accept.wav ../cdimg/DATA/SOUNDS/ACCEPT.VAG + wav2vag ../Sounds/TrayCl.wav ../cdimg/DATA/SOUNDS/TRAYCL.VAG + wav2vag ../Sounds/SpinDisk.wav ../cdimg/DATA/SOUNDS/SPINDISK.VAG + +levels: LEVEL1.LVL LEVEL1.PLT + +%.LVL: + cp ../Levels/$@ ../cdimg/DATA/LEVELS/ + +%.PLT: + cp ../Levels/$@ ../cdimg/DATA/LEVELS + +music: clean_music music_objects + +clean_music: + rm -f ../Music/*.bin + +%.bin: %.mp3 + rm -f ../Bin/$@1 + $(FFMPEG) -i $< $(FFMPEG_FLAGS) $@ + cp ../Music/$@ ../Bin/ diff --git a/Source/MapEditor/.qmake.stash b/Source/MapEditor/.qmake.stash new file mode 100755 index 0000000..58f6061 --- /dev/null +++ b/Source/MapEditor/.qmake.stash @@ -0,0 +1,12 @@ +QMAKE_DEFAULT_INCDIRS = \
+ C:/Qt/Tools/mingw530_32/lib/gcc/i686-w64-mingw32/5.3.0/include \
+ C:/Qt/Tools/mingw530_32/lib/gcc/i686-w64-mingw32/5.3.0/include-fixed \
+ C:/Qt/Tools/mingw530_32/i686-w64-mingw32/include \
+ C:/Qt/Tools/mingw530_32/i686-w64-mingw32/include/c++ \
+ C:/Qt/Tools/mingw530_32/i686-w64-mingw32/include/c++/i686-w64-mingw32 \
+ C:/Qt/Tools/mingw530_32/i686-w64-mingw32/include/c++/backward
+QMAKE_DEFAULT_LIBDIRS = \
+ C:/Qt/Tools/mingw530_32/lib/gcc/i686-w64-mingw32/5.3.0 \
+ C:/Qt/Tools/mingw530_32/lib/gcc \
+ C:/Qt/Tools/mingw530_32/i686-w64-mingw32/lib \
+ C:/Qt/Tools/mingw530_32/lib
diff --git a/Source/MapEditor/Makefile b/Source/MapEditor/Makefile new file mode 100755 index 0000000..fb5d1b1 --- /dev/null +++ b/Source/MapEditor/Makefile @@ -0,0 +1,379 @@ +#############################################################################
+# Makefile for building: MapEditor
+# Generated by qmake (3.0) (Qt 5.7.0)
+# Project: MapEditor.pro
+# Template: app
+# Command: C:\Qt\5.7\mingw53_32\bin\qmake.exe -spec win32-g++ "CONFIG+=qml_debug" "CONFIG+=force_debug_info" "CONFIG+=separate_debug_info" -o Makefile MapEditor.pro
+#############################################################################
+
+MAKEFILE = Makefile
+
+first: release
+install: release-install
+uninstall: release-uninstall
+QMAKE = C:\Qt\5.7\mingw53_32\bin\qmake.exe
+DEL_FILE = del
+CHK_DIR_EXISTS= if not exist
+MKDIR = mkdir
+COPY = copy /y
+COPY_FILE = copy /y
+COPY_DIR = xcopy /s /q /y /i
+INSTALL_FILE = copy /y
+INSTALL_PROGRAM = copy /y
+INSTALL_DIR = xcopy /s /q /y /i
+DEL_FILE = del
+SYMLINK = $(QMAKE) -install ln -f -s
+DEL_DIR = rmdir
+MOVE = move
+SUBTARGETS = \
+ release \
+ debug
+
+
+release: FORCE
+ $(MAKE) -f $(MAKEFILE).Release
+release-make_first: FORCE
+ $(MAKE) -f $(MAKEFILE).Release
+release-all: FORCE
+ $(MAKE) -f $(MAKEFILE).Release all
+release-clean: FORCE
+ $(MAKE) -f $(MAKEFILE).Release clean
+release-distclean: FORCE
+ $(MAKE) -f $(MAKEFILE).Release distclean
+release-install: FORCE
+ $(MAKE) -f $(MAKEFILE).Release install
+release-uninstall: FORCE
+ $(MAKE) -f $(MAKEFILE).Release uninstall
+debug: FORCE
+ $(MAKE) -f $(MAKEFILE).Debug
+debug-make_first: FORCE
+ $(MAKE) -f $(MAKEFILE).Debug
+debug-all: FORCE
+ $(MAKE) -f $(MAKEFILE).Debug all
+debug-clean: FORCE
+ $(MAKE) -f $(MAKEFILE).Debug clean
+debug-distclean: FORCE
+ $(MAKE) -f $(MAKEFILE).Debug distclean
+debug-install: FORCE
+ $(MAKE) -f $(MAKEFILE).Debug install
+debug-uninstall: FORCE
+ $(MAKE) -f $(MAKEFILE).Debug uninstall
+
+Makefile: MapEditor.pro C:/Qt/5.7/mingw53_32/mkspecs/win32-g++/qmake.conf C:/Qt/5.7/mingw53_32/mkspecs/features/spec_pre.prf \
+ C:/Qt/5.7/mingw53_32/mkspecs/qdevice.pri \
+ C:/Qt/5.7/mingw53_32/mkspecs/features/device_config.prf \
+ C:/Qt/5.7/mingw53_32/mkspecs/common/angle.conf \
+ C:/Qt/5.7/mingw53_32/mkspecs/qconfig.pri \
+ C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_3dcore.pri \
+ C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_3dcore_private.pri \
+ C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_3dextras.pri \
+ C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_3dextras_private.pri \
+ C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_3dinput.pri \
+ C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_3dinput_private.pri \
+ C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_3dlogic.pri \
+ C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_3dlogic_private.pri \
+ C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_3dquick.pri \
+ C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_3dquick_private.pri \
+ C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_3dquickextras.pri \
+ C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_3dquickextras_private.pri \
+ C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_3dquickinput.pri \
+ C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_3dquickinput_private.pri \
+ C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_3dquickrender.pri \
+ C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_3dquickrender_private.pri \
+ C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_3drender.pri \
+ C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_3drender_private.pri \
+ C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_axbase.pri \
+ C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_axbase_private.pri \
+ C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_axcontainer.pri \
+ C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_axcontainer_private.pri \
+ C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_axserver.pri \
+ C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_axserver_private.pri \
+ C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_bluetooth.pri \
+ C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_bluetooth_private.pri \
+ C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_bootstrap_private.pri \
+ C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_clucene_private.pri \
+ C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_concurrent.pri \
+ C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_concurrent_private.pri \
+ C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_core.pri \
+ C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_core_private.pri \
+ C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_dbus.pri \
+ C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_dbus_private.pri \
+ C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_designer.pri \
+ C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_designer_private.pri \
+ C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_designercomponents_private.pri \
+ C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_gui.pri \
+ C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_gui_private.pri \
+ C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_help.pri \
+ C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_help_private.pri \
+ C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_location.pri \
+ C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_location_private.pri \
+ C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_multimedia.pri \
+ C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_multimedia_private.pri \
+ C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_multimediawidgets.pri \
+ C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_multimediawidgets_private.pri \
+ C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_network.pri \
+ C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_network_private.pri \
+ C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_nfc.pri \
+ C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_nfc_private.pri \
+ C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_opengl.pri \
+ C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_opengl_private.pri \
+ C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_openglextensions.pri \
+ C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_openglextensions_private.pri \
+ C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_packetprotocol_private.pri \
+ C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_platformsupport_private.pri \
+ C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_positioning.pri \
+ C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_positioning_private.pri \
+ C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_printsupport.pri \
+ C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_printsupport_private.pri \
+ C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_purchasing.pri \
+ C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_purchasing_private.pri \
+ C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_qml.pri \
+ C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_qml_private.pri \
+ C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_qmldebug_private.pri \
+ C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_qmldevtools_private.pri \
+ C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_qmltest.pri \
+ C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_qmltest_private.pri \
+ C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri \
+ C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_quick.pri \
+ C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_quick_private.pri \
+ C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_quickcontrols2.pri \
+ C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_quickcontrols2_private.pri \
+ C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_quickparticles_private.pri \
+ C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_quicktemplates2_private.pri \
+ C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_quickwidgets.pri \
+ C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_quickwidgets_private.pri \
+ C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_scxml.pri \
+ C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_scxml_private.pri \
+ C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_sensors.pri \
+ C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_sensors_private.pri \
+ C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_serialbus.pri \
+ C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_serialbus_private.pri \
+ C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_serialport.pri \
+ C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_serialport_private.pri \
+ C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_sql.pri \
+ C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_sql_private.pri \
+ C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_svg.pri \
+ C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_svg_private.pri \
+ C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_testlib.pri \
+ C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_testlib_private.pri \
+ C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_uiplugin.pri \
+ C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_uitools.pri \
+ C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_uitools_private.pri \
+ C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_webchannel.pri \
+ C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_webchannel_private.pri \
+ C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_websockets.pri \
+ C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_websockets_private.pri \
+ C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_widgets.pri \
+ C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_widgets_private.pri \
+ C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_winextras.pri \
+ C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_winextras_private.pri \
+ C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_xml.pri \
+ C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_xml_private.pri \
+ C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_xmlpatterns.pri \
+ C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_xmlpatterns_private.pri \
+ C:/Qt/5.7/mingw53_32/mkspecs/features/qt_functions.prf \
+ C:/Qt/5.7/mingw53_32/mkspecs/features/qt_config.prf \
+ C:/Qt/5.7/mingw53_32/mkspecs/features/win32/qt_config.prf \
+ C:/Qt/5.7/mingw53_32/mkspecs/win32-g++/qmake.conf \
+ C:/Qt/5.7/mingw53_32/mkspecs/features/spec_post.prf \
+ C:/Qt/5.7/mingw53_32/mkspecs/features/exclusive_builds.prf \
+ C:/Qt/5.7/mingw53_32/mkspecs/features/default_pre.prf \
+ C:/Qt/5.7/mingw53_32/mkspecs/features/win32/default_pre.prf \
+ C:/Qt/5.7/mingw53_32/mkspecs/features/resolve_config.prf \
+ C:/Qt/5.7/mingw53_32/mkspecs/features/exclusive_builds_post.prf \
+ C:/Qt/5.7/mingw53_32/mkspecs/features/default_post.prf \
+ C:/Qt/5.7/mingw53_32/mkspecs/features/qml_debug.prf \
+ C:/Qt/5.7/mingw53_32/mkspecs/features/win32/rtti.prf \
+ C:/Qt/5.7/mingw53_32/mkspecs/features/precompile_header.prf \
+ C:/Qt/5.7/mingw53_32/mkspecs/features/warn_on.prf \
+ C:/Qt/5.7/mingw53_32/mkspecs/features/qt.prf \
+ C:/Qt/5.7/mingw53_32/mkspecs/features/resources.prf \
+ C:/Qt/5.7/mingw53_32/mkspecs/features/moc.prf \
+ C:/Qt/5.7/mingw53_32/mkspecs/features/win32/opengl.prf \
+ C:/Qt/5.7/mingw53_32/mkspecs/features/uic.prf \
+ C:/Qt/5.7/mingw53_32/mkspecs/features/file_copies.prf \
+ C:/Qt/5.7/mingw53_32/mkspecs/features/win32/windows.prf \
+ C:/Qt/5.7/mingw53_32/mkspecs/features/testcase_targets.prf \
+ C:/Qt/5.7/mingw53_32/mkspecs/features/exceptions.prf \
+ C:/Qt/5.7/mingw53_32/mkspecs/features/yacc.prf \
+ C:/Qt/5.7/mingw53_32/mkspecs/features/lex.prf \
+ MapEditor.pro \
+ C:/Qt/5.7/mingw53_32/lib/qtmain.prl \
+ C:/Qt/5.7/mingw53_32/lib/Qt5Widgets.prl \
+ C:/Qt/5.7/mingw53_32/lib/Qt5Gui.prl \
+ C:/Qt/5.7/mingw53_32/lib/Qt5Core.prl
+ $(QMAKE) -spec win32-g++ "CONFIG+=qml_debug" "CONFIG+=force_debug_info" "CONFIG+=separate_debug_info" -o Makefile MapEditor.pro
+C:/Qt/5.7/mingw53_32/mkspecs/features/spec_pre.prf:
+C:/Qt/5.7/mingw53_32/mkspecs/qdevice.pri:
+C:/Qt/5.7/mingw53_32/mkspecs/features/device_config.prf:
+C:/Qt/5.7/mingw53_32/mkspecs/common/angle.conf:
+C:/Qt/5.7/mingw53_32/mkspecs/qconfig.pri:
+C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_3dcore.pri:
+C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_3dcore_private.pri:
+C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_3dextras.pri:
+C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_3dextras_private.pri:
+C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_3dinput.pri:
+C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_3dinput_private.pri:
+C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_3dlogic.pri:
+C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_3dlogic_private.pri:
+C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_3dquick.pri:
+C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_3dquick_private.pri:
+C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_3dquickextras.pri:
+C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_3dquickextras_private.pri:
+C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_3dquickinput.pri:
+C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_3dquickinput_private.pri:
+C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_3dquickrender.pri:
+C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_3dquickrender_private.pri:
+C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_3drender.pri:
+C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_3drender_private.pri:
+C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_axbase.pri:
+C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_axbase_private.pri:
+C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_axcontainer.pri:
+C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_axcontainer_private.pri:
+C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_axserver.pri:
+C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_axserver_private.pri:
+C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_bluetooth.pri:
+C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_bluetooth_private.pri:
+C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_bootstrap_private.pri:
+C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_clucene_private.pri:
+C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_concurrent.pri:
+C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_concurrent_private.pri:
+C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_core.pri:
+C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_core_private.pri:
+C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_dbus.pri:
+C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_dbus_private.pri:
+C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_designer.pri:
+C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_designer_private.pri:
+C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_designercomponents_private.pri:
+C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_gui.pri:
+C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_gui_private.pri:
+C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_help.pri:
+C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_help_private.pri:
+C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_location.pri:
+C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_location_private.pri:
+C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_multimedia.pri:
+C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_multimedia_private.pri:
+C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_multimediawidgets.pri:
+C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_multimediawidgets_private.pri:
+C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_network.pri:
+C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_network_private.pri:
+C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_nfc.pri:
+C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_nfc_private.pri:
+C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_opengl.pri:
+C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_opengl_private.pri:
+C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_openglextensions.pri:
+C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_openglextensions_private.pri:
+C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_packetprotocol_private.pri:
+C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_platformsupport_private.pri:
+C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_positioning.pri:
+C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_positioning_private.pri:
+C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_printsupport.pri:
+C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_printsupport_private.pri:
+C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_purchasing.pri:
+C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_purchasing_private.pri:
+C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_qml.pri:
+C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_qml_private.pri:
+C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_qmldebug_private.pri:
+C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_qmldevtools_private.pri:
+C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_qmltest.pri:
+C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_qmltest_private.pri:
+C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_qtmultimediaquicktools_private.pri:
+C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_quick.pri:
+C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_quick_private.pri:
+C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_quickcontrols2.pri:
+C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_quickcontrols2_private.pri:
+C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_quickparticles_private.pri:
+C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_quicktemplates2_private.pri:
+C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_quickwidgets.pri:
+C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_quickwidgets_private.pri:
+C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_scxml.pri:
+C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_scxml_private.pri:
+C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_sensors.pri:
+C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_sensors_private.pri:
+C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_serialbus.pri:
+C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_serialbus_private.pri:
+C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_serialport.pri:
+C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_serialport_private.pri:
+C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_sql.pri:
+C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_sql_private.pri:
+C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_svg.pri:
+C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_svg_private.pri:
+C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_testlib.pri:
+C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_testlib_private.pri:
+C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_uiplugin.pri:
+C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_uitools.pri:
+C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_uitools_private.pri:
+C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_webchannel.pri:
+C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_webchannel_private.pri:
+C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_websockets.pri:
+C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_websockets_private.pri:
+C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_widgets.pri:
+C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_widgets_private.pri:
+C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_winextras.pri:
+C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_winextras_private.pri:
+C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_xml.pri:
+C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_xml_private.pri:
+C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_xmlpatterns.pri:
+C:/Qt/5.7/mingw53_32/mkspecs/modules/qt_lib_xmlpatterns_private.pri:
+C:/Qt/5.7/mingw53_32/mkspecs/features/qt_functions.prf:
+C:/Qt/5.7/mingw53_32/mkspecs/features/qt_config.prf:
+C:/Qt/5.7/mingw53_32/mkspecs/features/win32/qt_config.prf:
+C:/Qt/5.7/mingw53_32/mkspecs/win32-g++/qmake.conf:
+C:/Qt/5.7/mingw53_32/mkspecs/features/spec_post.prf:
+C:/Qt/5.7/mingw53_32/mkspecs/features/exclusive_builds.prf:
+C:/Qt/5.7/mingw53_32/mkspecs/features/default_pre.prf:
+C:/Qt/5.7/mingw53_32/mkspecs/features/win32/default_pre.prf:
+C:/Qt/5.7/mingw53_32/mkspecs/features/resolve_config.prf:
+C:/Qt/5.7/mingw53_32/mkspecs/features/exclusive_builds_post.prf:
+C:/Qt/5.7/mingw53_32/mkspecs/features/default_post.prf:
+C:/Qt/5.7/mingw53_32/mkspecs/features/qml_debug.prf:
+C:/Qt/5.7/mingw53_32/mkspecs/features/win32/rtti.prf:
+C:/Qt/5.7/mingw53_32/mkspecs/features/precompile_header.prf:
+C:/Qt/5.7/mingw53_32/mkspecs/features/warn_on.prf:
+C:/Qt/5.7/mingw53_32/mkspecs/features/qt.prf:
+C:/Qt/5.7/mingw53_32/mkspecs/features/resources.prf:
+C:/Qt/5.7/mingw53_32/mkspecs/features/moc.prf:
+C:/Qt/5.7/mingw53_32/mkspecs/features/win32/opengl.prf:
+C:/Qt/5.7/mingw53_32/mkspecs/features/uic.prf:
+C:/Qt/5.7/mingw53_32/mkspecs/features/file_copies.prf:
+C:/Qt/5.7/mingw53_32/mkspecs/features/win32/windows.prf:
+C:/Qt/5.7/mingw53_32/mkspecs/features/testcase_targets.prf:
+C:/Qt/5.7/mingw53_32/mkspecs/features/exceptions.prf:
+C:/Qt/5.7/mingw53_32/mkspecs/features/yacc.prf:
+C:/Qt/5.7/mingw53_32/mkspecs/features/lex.prf:
+MapEditor.pro:
+C:/Qt/5.7/mingw53_32/lib/qtmain.prl:
+C:/Qt/5.7/mingw53_32/lib/Qt5Widgets.prl:
+C:/Qt/5.7/mingw53_32/lib/Qt5Gui.prl:
+C:/Qt/5.7/mingw53_32/lib/Qt5Core.prl:
+qmake: FORCE
+ @$(QMAKE) -spec win32-g++ "CONFIG+=qml_debug" "CONFIG+=force_debug_info" "CONFIG+=separate_debug_info" -o Makefile MapEditor.pro
+
+qmake_all: FORCE
+
+make_first: release-make_first debug-make_first FORCE
+all: release-all debug-all FORCE
+clean: release-clean debug-clean FORCE
+distclean: release-distclean debug-distclean FORCE
+ -$(DEL_FILE) Makefile
+ -$(DEL_FILE) .qmake.stash
+
+release-mocclean:
+ $(MAKE) -f $(MAKEFILE).Release mocclean
+debug-mocclean:
+ $(MAKE) -f $(MAKEFILE).Debug mocclean
+mocclean: release-mocclean debug-mocclean
+
+release-mocables:
+ $(MAKE) -f $(MAKEFILE).Release mocables
+debug-mocables:
+ $(MAKE) -f $(MAKEFILE).Debug mocables
+mocables: release-mocables debug-mocables
+
+check: first
+
+benchmark: first
+FORCE:
+
+$(MAKEFILE).Release: Makefile
+$(MAKEFILE).Debug: Makefile
diff --git a/Source/MapEditor/Makefile.Debug b/Source/MapEditor/Makefile.Debug new file mode 100755 index 0000000..4159242 --- /dev/null +++ b/Source/MapEditor/Makefile.Debug @@ -0,0 +1,447 @@ +#############################################################################
+# Makefile for building: MapEditor
+# Generated by qmake (3.0) (Qt 5.7.0)
+# Project: MapEditor.pro
+# Template: app
+#############################################################################
+
+MAKEFILE = Makefile.Debug
+
+####### Compiler, tools and options
+
+CC = gcc
+CXX = g++
+DEFINES = -DUNICODE -DQT_QML_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_NEEDS_QMAIN
+CFLAGS = -pipe -fno-keep-inline-dllexport -g -Wall -Wextra $(DEFINES)
+CXXFLAGS = -pipe -fno-keep-inline-dllexport -g -std=gnu++11 -frtti -Wall -Wextra -fexceptions -mthreads $(DEFINES)
+INCPATH = -I. -IC:\Qt\5.7\mingw53_32\include -IC:\Qt\5.7\mingw53_32\include\QtWidgets -IC:\Qt\5.7\mingw53_32\include\QtGui -IC:\Qt\5.7\mingw53_32\include\QtANGLE -IC:\Qt\5.7\mingw53_32\include\QtCore -Idebug -I. -IC:\Qt\5.7\mingw53_32\mkspecs\win32-g++
+LINKER = g++
+LFLAGS = -Wl,-subsystem,windows -mthreads
+LIBS = -lmingw32 -LC:\Qt\5.7\mingw53_32\lib C:\Qt\5.7\mingw53_32\lib\libqtmaind.a -LC:\utils\postgresql\pgsql\lib -LC:\utils\my_sql\my_sql\lib -lshell32 C:\Qt\5.7\mingw53_32\lib\libQt5Widgetsd.a C:\Qt\5.7\mingw53_32\lib\libQt5Guid.a C:\Qt\5.7\mingw53_32\lib\libQt5Cored.a
+QMAKE = C:\Qt\5.7\mingw53_32\bin\qmake.exe
+IDC = idc
+IDL = midl
+ZIP = zip -r -9
+DEF_FILE =
+RES_FILE =
+COPY = copy /y
+SED = $(QMAKE) -install sed
+COPY_FILE = copy /y
+COPY_DIR = xcopy /s /q /y /i
+DEL_FILE = del
+DEL_DIR = rmdir
+MOVE = move
+CHK_DIR_EXISTS= if not exist
+MKDIR = mkdir
+INSTALL_FILE = copy /y
+INSTALL_PROGRAM = copy /y
+INSTALL_DIR = xcopy /s /q /y /i
+
+####### Output directory
+
+OBJECTS_DIR = debug
+
+####### Files
+
+SOURCES = main.cpp \
+ mainwindow.cpp debug\moc_mainwindow.cpp
+OBJECTS = debug/main.o \
+ debug/mainwindow.o \
+ debug/moc_mainwindow.o
+
+DIST = mainwindow.h main.cpp \
+ mainwindow.cpp
+QMAKE_TARGET = MapEditor
+DESTDIR = debug\ #avoid trailing-slash linebreak
+TARGET = MapEditor.exe
+DESTDIR_TARGET = debug\MapEditor.exe
+
+####### Build rules
+
+first: all
+all: Makefile.Debug $(DESTDIR_TARGET)
+
+$(DESTDIR_TARGET): ui_mainwindow.h $(OBJECTS)
+ $(LINKER) $(LFLAGS) -o $(DESTDIR_TARGET) $(OBJECTS) $(LIBS)
+
+qmake: FORCE
+ @$(QMAKE) -spec win32-g++ "CONFIG+=qml_debug" "CONFIG+=force_debug_info" "CONFIG+=separate_debug_info" -o Makefile.Debug MapEditor.pro
+
+qmake_all: FORCE
+
+dist:
+ $(ZIP) MapEditor.zip $(SOURCES) $(DIST) MapEditor.pro C:\Qt\5.7\mingw53_32\mkspecs\features\spec_pre.prf C:\Qt\5.7\mingw53_32\mkspecs\qdevice.pri C:\Qt\5.7\mingw53_32\mkspecs\features\device_config.prf C:\Qt\5.7\mingw53_32\mkspecs\common\angle.conf C:\Qt\5.7\mingw53_32\mkspecs\qconfig.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_3dcore.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_3dcore_private.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_3dextras.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_3dextras_private.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_3dinput.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_3dinput_private.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_3dlogic.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_3dlogic_private.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_3dquick.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_3dquick_private.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_3dquickextras.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_3dquickextras_private.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_3dquickinput.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_3dquickinput_private.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_3dquickrender.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_3dquickrender_private.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_3drender.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_3drender_private.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_axbase.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_axbase_private.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_axcontainer.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_axcontainer_private.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_axserver.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_axserver_private.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_bluetooth.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_bluetooth_private.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_bootstrap_private.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_clucene_private.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_concurrent.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_concurrent_private.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_core.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_core_private.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_dbus.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_dbus_private.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_designer.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_designer_private.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_designercomponents_private.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_gui.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_gui_private.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_help.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_help_private.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_location.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_location_private.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_multimedia.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_multimedia_private.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_multimediawidgets.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_multimediawidgets_private.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_network.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_network_private.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_nfc.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_nfc_private.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_opengl.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_opengl_private.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_openglextensions.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_openglextensions_private.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_packetprotocol_private.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_platformsupport_private.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_positioning.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_positioning_private.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_printsupport.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_printsupport_private.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_purchasing.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_purchasing_private.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_qml.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_qml_private.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_qmldebug_private.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_qmldevtools_private.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_qmltest.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_qmltest_private.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_qtmultimediaquicktools_private.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_quick.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_quick_private.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_quickcontrols2.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_quickcontrols2_private.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_quickparticles_private.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_quicktemplates2_private.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_quickwidgets.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_quickwidgets_private.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_scxml.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_scxml_private.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_sensors.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_sensors_private.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_serialbus.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_serialbus_private.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_serialport.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_serialport_private.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_sql.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_sql_private.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_svg.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_svg_private.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_testlib.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_testlib_private.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_uiplugin.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_uitools.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_uitools_private.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_webchannel.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_webchannel_private.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_websockets.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_websockets_private.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_widgets.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_widgets_private.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_winextras.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_winextras_private.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_xml.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_xml_private.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_xmlpatterns.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_xmlpatterns_private.pri C:\Qt\5.7\mingw53_32\mkspecs\features\qt_functions.prf C:\Qt\5.7\mingw53_32\mkspecs\features\qt_config.prf C:\Qt\5.7\mingw53_32\mkspecs\features\win32\qt_config.prf C:\Qt\5.7\mingw53_32\mkspecs\win32-g++\qmake.conf C:\Qt\5.7\mingw53_32\mkspecs\features\spec_post.prf .qmake.stash C:\Qt\5.7\mingw53_32\mkspecs\features\exclusive_builds.prf C:\Qt\5.7\mingw53_32\mkspecs\features\default_pre.prf C:\Qt\5.7\mingw53_32\mkspecs\features\win32\default_pre.prf C:\Qt\5.7\mingw53_32\mkspecs\features\resolve_config.prf C:\Qt\5.7\mingw53_32\mkspecs\features\exclusive_builds_post.prf C:\Qt\5.7\mingw53_32\mkspecs\features\default_post.prf C:\Qt\5.7\mingw53_32\mkspecs\features\build_pass.prf C:\Qt\5.7\mingw53_32\mkspecs\features\qml_debug.prf C:\Qt\5.7\mingw53_32\mkspecs\features\win32\rtti.prf C:\Qt\5.7\mingw53_32\mkspecs\features\precompile_header.prf C:\Qt\5.7\mingw53_32\mkspecs\features\warn_on.prf C:\Qt\5.7\mingw53_32\mkspecs\features\qt.prf C:\Qt\5.7\mingw53_32\mkspecs\features\resources.prf C:\Qt\5.7\mingw53_32\mkspecs\features\moc.prf C:\Qt\5.7\mingw53_32\mkspecs\features\win32\opengl.prf C:\Qt\5.7\mingw53_32\mkspecs\features\uic.prf C:\Qt\5.7\mingw53_32\mkspecs\features\file_copies.prf C:\Qt\5.7\mingw53_32\mkspecs\features\win32\windows.prf C:\Qt\5.7\mingw53_32\mkspecs\features\testcase_targets.prf C:\Qt\5.7\mingw53_32\mkspecs\features\exceptions.prf C:\Qt\5.7\mingw53_32\mkspecs\features\yacc.prf C:\Qt\5.7\mingw53_32\mkspecs\features\lex.prf MapEditor.pro C:\Qt\5.7\mingw53_32\lib\qtmaind.prl C:\Qt\5.7\mingw53_32\lib\Qt5Widgetsd.prl C:\Qt\5.7\mingw53_32\lib\Qt5Guid.prl C:\Qt\5.7\mingw53_32\lib\Qt5Cored.prl NO_PCH_SOURCES RESOURCES HEADERS SOURCES OBJECTIVE_SOURCES FORMS YACCSOURCES YACCSOURCES LEXSOURCES
+
+clean: compiler_clean
+ -$(DEL_FILE) debug\main.o debug\mainwindow.o debug\moc_mainwindow.o
+
+distclean: clean
+ -$(DEL_FILE) .qmake.stash
+ -$(DEL_FILE) $(DESTDIR_TARGET)
+ -$(DEL_FILE) Makefile.Debug
+
+mocclean: compiler_moc_header_clean compiler_moc_source_clean
+
+mocables: compiler_moc_header_make_all compiler_moc_source_make_all
+
+check: first
+
+benchmark: first
+
+compiler_no_pch_compiler_make_all:
+compiler_no_pch_compiler_clean:
+compiler_rcc_make_all:
+compiler_rcc_clean:
+compiler_moc_header_make_all: debug/moc_mainwindow.cpp
+compiler_moc_header_clean:
+ -$(DEL_FILE) debug\moc_mainwindow.cpp
+debug/moc_mainwindow.cpp: C:/Qt/5.7/mingw53_32/include/QtWidgets/QMainWindow \
+ C:/Qt/5.7/mingw53_32/include/QtWidgets/qmainwindow.h \
+ C:/Qt/5.7/mingw53_32/include/QtWidgets/qwidget.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qwindowdefs.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qglobal.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qconfig.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qfeatures.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qsystemdetection.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qprocessordetection.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qcompilerdetection.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qtypeinfo.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qtypetraits.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qisenum.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qsysinfo.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qlogging.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qflags.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qatomic.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qbasicatomic.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qatomic_bootstrap.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qgenericatomic.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qatomic_cxx11.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qatomic_msvc.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qglobalstatic.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qmutex.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qnumeric.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qversiontagging.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qobjectdefs.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qnamespace.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qobjectdefs_impl.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qwindowdefs_win.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qobject.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qstring.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qchar.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qbytearray.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qrefcount.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qarraydata.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qstringbuilder.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qlist.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qalgorithms.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qiterator.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qhashfunctions.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qpair.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qbytearraylist.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qstringlist.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qregexp.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qstringmatcher.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qcoreevent.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qscopedpointer.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qmetatype.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qvarlengtharray.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qcontainerfwd.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qobject_impl.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qmargins.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qpaintdevice.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qrect.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qsize.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qpoint.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qpalette.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qcolor.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qrgb.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qrgba64.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qbrush.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qvector.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qmatrix.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qpolygon.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qregion.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qdatastream.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qiodevice.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qline.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qtransform.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qpainterpath.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qimage.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qpixelformat.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qpixmap.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qsharedpointer.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qshareddata.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qhash.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qsharedpointer_impl.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qfont.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qfontmetrics.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qfontinfo.h \
+ C:/Qt/5.7/mingw53_32/include/QtWidgets/qsizepolicy.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qcursor.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qkeysequence.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qevent.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qvariant.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qmap.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qdebug.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qtextstream.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qlocale.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qset.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qcontiguouscache.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qurl.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qurlquery.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qfile.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qfiledevice.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qvector2d.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qtouchdevice.h \
+ C:/Qt/5.7/mingw53_32/include/QtWidgets/qtabwidget.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qicon.h \
+ mainwindow.h \
+ C:/Qt/5.7/mingw53_32/bin/moc.exe
+ C:\Qt\5.7\mingw53_32\bin\moc.exe $(DEFINES) -D__GNUC__ -DWIN32 -IC:/Qt/5.7/mingw53_32/mkspecs/win32-g++ -IC:/cygwin/home/Xavier/Airport/Source/MapEditor -IC:/Qt/5.7/mingw53_32/include -IC:/Qt/5.7/mingw53_32/include/QtWidgets -IC:/Qt/5.7/mingw53_32/include/QtGui -IC:/Qt/5.7/mingw53_32/include/QtANGLE -IC:/Qt/5.7/mingw53_32/include/QtCore -IC:/Qt/Tools/mingw530_32/lib/gcc/i686-w64-mingw32/5.3.0/include -IC:/Qt/Tools/mingw530_32/lib/gcc/i686-w64-mingw32/5.3.0/include-fixed -IC:/Qt/Tools/mingw530_32/i686-w64-mingw32/include -IC:/Qt/Tools/mingw530_32/i686-w64-mingw32/include/c++ -IC:/Qt/Tools/mingw530_32/i686-w64-mingw32/include/c++/i686-w64-mingw32 -IC:/Qt/Tools/mingw530_32/i686-w64-mingw32/include/c++/backward mainwindow.h -o debug\moc_mainwindow.cpp
+
+compiler_moc_source_make_all:
+compiler_moc_source_clean:
+compiler_uic_make_all: ui_mainwindow.h
+compiler_uic_clean:
+ -$(DEL_FILE) ui_mainwindow.h
+ui_mainwindow.h: mainwindow.ui \
+ C:/Qt/5.7/mingw53_32/bin/uic.exe
+ C:\Qt\5.7\mingw53_32\bin\uic.exe mainwindow.ui -o ui_mainwindow.h
+
+compiler_yacc_decl_make_all:
+compiler_yacc_decl_clean:
+compiler_yacc_impl_make_all:
+compiler_yacc_impl_clean:
+compiler_lex_make_all:
+compiler_lex_clean:
+compiler_clean: compiler_moc_header_clean compiler_uic_clean
+
+
+
+####### Compile
+
+debug/main.o: main.cpp mainwindow.h \
+ C:/Qt/5.7/mingw53_32/include/QtWidgets/QMainWindow \
+ C:/Qt/5.7/mingw53_32/include/QtWidgets/qmainwindow.h \
+ C:/Qt/5.7/mingw53_32/include/QtWidgets/qwidget.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qwindowdefs.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qglobal.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qconfig.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qfeatures.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qsystemdetection.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qprocessordetection.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qcompilerdetection.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qtypeinfo.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qtypetraits.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qisenum.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qsysinfo.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qlogging.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qflags.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qatomic.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qbasicatomic.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qatomic_bootstrap.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qgenericatomic.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qatomic_cxx11.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qatomic_msvc.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qglobalstatic.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qmutex.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qnumeric.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qversiontagging.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qobjectdefs.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qnamespace.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qobjectdefs_impl.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qwindowdefs_win.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qobject.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qstring.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qchar.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qbytearray.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qrefcount.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qarraydata.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qstringbuilder.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qlist.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qalgorithms.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qiterator.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qhashfunctions.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qpair.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qbytearraylist.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qstringlist.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qregexp.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qstringmatcher.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qcoreevent.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qscopedpointer.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qmetatype.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qvarlengtharray.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qcontainerfwd.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qobject_impl.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qmargins.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qpaintdevice.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qrect.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qsize.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qpoint.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qpalette.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qcolor.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qrgb.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qrgba64.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qbrush.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qvector.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qmatrix.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qpolygon.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qregion.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qdatastream.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qiodevice.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qline.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qtransform.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qpainterpath.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qimage.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qpixelformat.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qpixmap.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qsharedpointer.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qshareddata.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qhash.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qsharedpointer_impl.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qfont.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qfontmetrics.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qfontinfo.h \
+ C:/Qt/5.7/mingw53_32/include/QtWidgets/qsizepolicy.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qcursor.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qkeysequence.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qevent.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qvariant.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qmap.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qdebug.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qtextstream.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qlocale.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qset.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qcontiguouscache.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qurl.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qurlquery.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qfile.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qfiledevice.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qvector2d.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qtouchdevice.h \
+ C:/Qt/5.7/mingw53_32/include/QtWidgets/qtabwidget.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qicon.h \
+ C:/Qt/5.7/mingw53_32/include/QtWidgets/QApplication \
+ C:/Qt/5.7/mingw53_32/include/QtWidgets/qapplication.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qcoreapplication.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qeventloop.h \
+ C:/Qt/5.7/mingw53_32/include/QtWidgets/qdesktopwidget.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qguiapplication.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qinputmethod.h
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o debug\main.o main.cpp
+
+debug/mainwindow.o: mainwindow.cpp mainwindow.h \
+ C:/Qt/5.7/mingw53_32/include/QtWidgets/QMainWindow \
+ C:/Qt/5.7/mingw53_32/include/QtWidgets/qmainwindow.h \
+ C:/Qt/5.7/mingw53_32/include/QtWidgets/qwidget.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qwindowdefs.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qglobal.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qconfig.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qfeatures.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qsystemdetection.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qprocessordetection.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qcompilerdetection.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qtypeinfo.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qtypetraits.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qisenum.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qsysinfo.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qlogging.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qflags.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qatomic.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qbasicatomic.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qatomic_bootstrap.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qgenericatomic.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qatomic_cxx11.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qatomic_msvc.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qglobalstatic.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qmutex.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qnumeric.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qversiontagging.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qobjectdefs.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qnamespace.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qobjectdefs_impl.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qwindowdefs_win.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qobject.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qstring.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qchar.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qbytearray.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qrefcount.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qarraydata.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qstringbuilder.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qlist.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qalgorithms.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qiterator.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qhashfunctions.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qpair.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qbytearraylist.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qstringlist.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qregexp.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qstringmatcher.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qcoreevent.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qscopedpointer.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qmetatype.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qvarlengtharray.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qcontainerfwd.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qobject_impl.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qmargins.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qpaintdevice.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qrect.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qsize.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qpoint.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qpalette.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qcolor.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qrgb.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qrgba64.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qbrush.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qvector.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qmatrix.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qpolygon.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qregion.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qdatastream.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qiodevice.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qline.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qtransform.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qpainterpath.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qimage.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qpixelformat.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qpixmap.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qsharedpointer.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qshareddata.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qhash.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qsharedpointer_impl.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qfont.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qfontmetrics.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qfontinfo.h \
+ C:/Qt/5.7/mingw53_32/include/QtWidgets/qsizepolicy.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qcursor.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qkeysequence.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qevent.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qvariant.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qmap.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qdebug.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qtextstream.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qlocale.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qset.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qcontiguouscache.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qurl.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qurlquery.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qfile.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qfiledevice.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qvector2d.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qtouchdevice.h \
+ C:/Qt/5.7/mingw53_32/include/QtWidgets/qtabwidget.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qicon.h \
+ ui_mainwindow.h
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o debug\mainwindow.o mainwindow.cpp
+
+debug/moc_mainwindow.o: debug/moc_mainwindow.cpp
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o debug\moc_mainwindow.o debug\moc_mainwindow.cpp
+
+####### Install
+
+install: FORCE
+
+uninstall: FORCE
+
+FORCE:
+
diff --git a/Source/MapEditor/Makefile.Release b/Source/MapEditor/Makefile.Release new file mode 100755 index 0000000..9b37a2b --- /dev/null +++ b/Source/MapEditor/Makefile.Release @@ -0,0 +1,447 @@ +#############################################################################
+# Makefile for building: MapEditor
+# Generated by qmake (3.0) (Qt 5.7.0)
+# Project: MapEditor.pro
+# Template: app
+#############################################################################
+
+MAKEFILE = Makefile.Release
+
+####### Compiler, tools and options
+
+CC = gcc
+CXX = g++
+DEFINES = -DUNICODE -DQT_QML_DEBUG -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_NEEDS_QMAIN
+CFLAGS = -pipe -fno-keep-inline-dllexport -O2 -g -Wall -Wextra $(DEFINES)
+CXXFLAGS = -pipe -fno-keep-inline-dllexport -std=gnu++11 -frtti -Wall -Wextra -fexceptions -mthreads $(DEFINES)
+INCPATH = -I. -IC:\Qt\5.7\mingw53_32\include -IC:\Qt\5.7\mingw53_32\include\QtWidgets -IC:\Qt\5.7\mingw53_32\include\QtGui -IC:\Qt\5.7\mingw53_32\include\QtANGLE -IC:\Qt\5.7\mingw53_32\include\QtCore -Irelease -I. -IC:\Qt\5.7\mingw53_32\mkspecs\win32-g++
+LINKER = g++
+LFLAGS = -Wl,-subsystem,windows -mthreads
+LIBS = -lmingw32 -LC:\Qt\5.7\mingw53_32\lib C:\Qt\5.7\mingw53_32\lib\libqtmain.a -LC:\utils\postgresql\pgsql\lib -LC:\utils\my_sql\my_sql\lib -lshell32 C:\Qt\5.7\mingw53_32\lib\libQt5Widgets.a C:\Qt\5.7\mingw53_32\lib\libQt5Gui.a C:\Qt\5.7\mingw53_32\lib\libQt5Core.a
+QMAKE = C:\Qt\5.7\mingw53_32\bin\qmake.exe
+IDC = idc
+IDL = midl
+ZIP = zip -r -9
+DEF_FILE =
+RES_FILE =
+COPY = copy /y
+SED = $(QMAKE) -install sed
+COPY_FILE = copy /y
+COPY_DIR = xcopy /s /q /y /i
+DEL_FILE = del
+DEL_DIR = rmdir
+MOVE = move
+CHK_DIR_EXISTS= if not exist
+MKDIR = mkdir
+INSTALL_FILE = copy /y
+INSTALL_PROGRAM = copy /y
+INSTALL_DIR = xcopy /s /q /y /i
+
+####### Output directory
+
+OBJECTS_DIR = release
+
+####### Files
+
+SOURCES = main.cpp \
+ mainwindow.cpp release\moc_mainwindow.cpp
+OBJECTS = release/main.o \
+ release/mainwindow.o \
+ release/moc_mainwindow.o
+
+DIST = mainwindow.h main.cpp \
+ mainwindow.cpp
+QMAKE_TARGET = MapEditor
+DESTDIR = release\ #avoid trailing-slash linebreak
+TARGET = MapEditor.exe
+DESTDIR_TARGET = release\MapEditor.exe
+
+####### Build rules
+
+first: all
+all: Makefile.Release $(DESTDIR_TARGET)
+
+$(DESTDIR_TARGET): ui_mainwindow.h $(OBJECTS)
+ $(LINKER) $(LFLAGS) -o $(DESTDIR_TARGET) $(OBJECTS) $(LIBS)
+
+qmake: FORCE
+ @$(QMAKE) -spec win32-g++ "CONFIG+=qml_debug" "CONFIG+=force_debug_info" "CONFIG+=separate_debug_info" -o Makefile.Release MapEditor.pro
+
+qmake_all: FORCE
+
+dist:
+ $(ZIP) MapEditor.zip $(SOURCES) $(DIST) MapEditor.pro C:\Qt\5.7\mingw53_32\mkspecs\features\spec_pre.prf C:\Qt\5.7\mingw53_32\mkspecs\qdevice.pri C:\Qt\5.7\mingw53_32\mkspecs\features\device_config.prf C:\Qt\5.7\mingw53_32\mkspecs\common\angle.conf C:\Qt\5.7\mingw53_32\mkspecs\qconfig.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_3dcore.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_3dcore_private.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_3dextras.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_3dextras_private.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_3dinput.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_3dinput_private.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_3dlogic.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_3dlogic_private.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_3dquick.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_3dquick_private.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_3dquickextras.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_3dquickextras_private.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_3dquickinput.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_3dquickinput_private.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_3dquickrender.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_3dquickrender_private.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_3drender.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_3drender_private.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_axbase.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_axbase_private.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_axcontainer.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_axcontainer_private.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_axserver.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_axserver_private.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_bluetooth.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_bluetooth_private.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_bootstrap_private.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_clucene_private.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_concurrent.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_concurrent_private.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_core.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_core_private.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_dbus.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_dbus_private.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_designer.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_designer_private.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_designercomponents_private.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_gui.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_gui_private.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_help.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_help_private.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_location.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_location_private.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_multimedia.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_multimedia_private.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_multimediawidgets.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_multimediawidgets_private.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_network.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_network_private.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_nfc.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_nfc_private.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_opengl.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_opengl_private.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_openglextensions.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_openglextensions_private.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_packetprotocol_private.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_platformsupport_private.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_positioning.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_positioning_private.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_printsupport.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_printsupport_private.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_purchasing.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_purchasing_private.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_qml.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_qml_private.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_qmldebug_private.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_qmldevtools_private.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_qmltest.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_qmltest_private.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_qtmultimediaquicktools_private.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_quick.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_quick_private.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_quickcontrols2.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_quickcontrols2_private.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_quickparticles_private.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_quicktemplates2_private.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_quickwidgets.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_quickwidgets_private.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_scxml.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_scxml_private.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_sensors.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_sensors_private.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_serialbus.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_serialbus_private.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_serialport.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_serialport_private.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_sql.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_sql_private.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_svg.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_svg_private.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_testlib.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_testlib_private.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_uiplugin.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_uitools.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_uitools_private.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_webchannel.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_webchannel_private.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_websockets.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_websockets_private.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_widgets.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_widgets_private.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_winextras.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_winextras_private.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_xml.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_xml_private.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_xmlpatterns.pri C:\Qt\5.7\mingw53_32\mkspecs\modules\qt_lib_xmlpatterns_private.pri C:\Qt\5.7\mingw53_32\mkspecs\features\qt_functions.prf C:\Qt\5.7\mingw53_32\mkspecs\features\qt_config.prf C:\Qt\5.7\mingw53_32\mkspecs\features\win32\qt_config.prf C:\Qt\5.7\mingw53_32\mkspecs\win32-g++\qmake.conf C:\Qt\5.7\mingw53_32\mkspecs\features\spec_post.prf .qmake.stash C:\Qt\5.7\mingw53_32\mkspecs\features\exclusive_builds.prf C:\Qt\5.7\mingw53_32\mkspecs\features\default_pre.prf C:\Qt\5.7\mingw53_32\mkspecs\features\win32\default_pre.prf C:\Qt\5.7\mingw53_32\mkspecs\features\resolve_config.prf C:\Qt\5.7\mingw53_32\mkspecs\features\exclusive_builds_post.prf C:\Qt\5.7\mingw53_32\mkspecs\features\default_post.prf C:\Qt\5.7\mingw53_32\mkspecs\features\build_pass.prf C:\Qt\5.7\mingw53_32\mkspecs\features\qml_debug.prf C:\Qt\5.7\mingw53_32\mkspecs\features\win32\rtti.prf C:\Qt\5.7\mingw53_32\mkspecs\features\precompile_header.prf C:\Qt\5.7\mingw53_32\mkspecs\features\warn_on.prf C:\Qt\5.7\mingw53_32\mkspecs\features\qt.prf C:\Qt\5.7\mingw53_32\mkspecs\features\resources.prf C:\Qt\5.7\mingw53_32\mkspecs\features\moc.prf C:\Qt\5.7\mingw53_32\mkspecs\features\win32\opengl.prf C:\Qt\5.7\mingw53_32\mkspecs\features\uic.prf C:\Qt\5.7\mingw53_32\mkspecs\features\file_copies.prf C:\Qt\5.7\mingw53_32\mkspecs\features\win32\windows.prf C:\Qt\5.7\mingw53_32\mkspecs\features\testcase_targets.prf C:\Qt\5.7\mingw53_32\mkspecs\features\exceptions.prf C:\Qt\5.7\mingw53_32\mkspecs\features\yacc.prf C:\Qt\5.7\mingw53_32\mkspecs\features\lex.prf MapEditor.pro C:\Qt\5.7\mingw53_32\lib\qtmain.prl C:\Qt\5.7\mingw53_32\lib\Qt5Widgets.prl C:\Qt\5.7\mingw53_32\lib\Qt5Gui.prl C:\Qt\5.7\mingw53_32\lib\Qt5Core.prl NO_PCH_SOURCES RESOURCES HEADERS SOURCES OBJECTIVE_SOURCES FORMS YACCSOURCES YACCSOURCES LEXSOURCES
+
+clean: compiler_clean
+ -$(DEL_FILE) release\main.o release\mainwindow.o release\moc_mainwindow.o
+
+distclean: clean
+ -$(DEL_FILE) .qmake.stash
+ -$(DEL_FILE) $(DESTDIR_TARGET)
+ -$(DEL_FILE) Makefile.Release
+
+mocclean: compiler_moc_header_clean compiler_moc_source_clean
+
+mocables: compiler_moc_header_make_all compiler_moc_source_make_all
+
+check: first
+
+benchmark: first
+
+compiler_no_pch_compiler_make_all:
+compiler_no_pch_compiler_clean:
+compiler_rcc_make_all:
+compiler_rcc_clean:
+compiler_moc_header_make_all: release/moc_mainwindow.cpp
+compiler_moc_header_clean:
+ -$(DEL_FILE) release\moc_mainwindow.cpp
+release/moc_mainwindow.cpp: C:/Qt/5.7/mingw53_32/include/QtWidgets/QMainWindow \
+ C:/Qt/5.7/mingw53_32/include/QtWidgets/qmainwindow.h \
+ C:/Qt/5.7/mingw53_32/include/QtWidgets/qwidget.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qwindowdefs.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qglobal.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qconfig.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qfeatures.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qsystemdetection.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qprocessordetection.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qcompilerdetection.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qtypeinfo.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qtypetraits.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qisenum.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qsysinfo.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qlogging.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qflags.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qatomic.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qbasicatomic.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qatomic_bootstrap.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qgenericatomic.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qatomic_cxx11.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qatomic_msvc.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qglobalstatic.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qmutex.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qnumeric.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qversiontagging.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qobjectdefs.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qnamespace.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qobjectdefs_impl.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qwindowdefs_win.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qobject.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qstring.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qchar.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qbytearray.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qrefcount.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qarraydata.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qstringbuilder.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qlist.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qalgorithms.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qiterator.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qhashfunctions.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qpair.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qbytearraylist.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qstringlist.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qregexp.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qstringmatcher.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qcoreevent.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qscopedpointer.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qmetatype.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qvarlengtharray.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qcontainerfwd.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qobject_impl.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qmargins.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qpaintdevice.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qrect.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qsize.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qpoint.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qpalette.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qcolor.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qrgb.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qrgba64.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qbrush.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qvector.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qmatrix.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qpolygon.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qregion.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qdatastream.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qiodevice.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qline.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qtransform.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qpainterpath.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qimage.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qpixelformat.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qpixmap.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qsharedpointer.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qshareddata.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qhash.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qsharedpointer_impl.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qfont.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qfontmetrics.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qfontinfo.h \
+ C:/Qt/5.7/mingw53_32/include/QtWidgets/qsizepolicy.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qcursor.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qkeysequence.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qevent.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qvariant.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qmap.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qdebug.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qtextstream.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qlocale.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qset.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qcontiguouscache.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qurl.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qurlquery.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qfile.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qfiledevice.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qvector2d.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qtouchdevice.h \
+ C:/Qt/5.7/mingw53_32/include/QtWidgets/qtabwidget.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qicon.h \
+ mainwindow.h \
+ C:/Qt/5.7/mingw53_32/bin/moc.exe
+ C:\Qt\5.7\mingw53_32\bin\moc.exe $(DEFINES) -D__GNUC__ -DWIN32 -IC:/Qt/5.7/mingw53_32/mkspecs/win32-g++ -IC:/cygwin/home/Xavier/Airport/Source/MapEditor -IC:/Qt/5.7/mingw53_32/include -IC:/Qt/5.7/mingw53_32/include/QtWidgets -IC:/Qt/5.7/mingw53_32/include/QtGui -IC:/Qt/5.7/mingw53_32/include/QtANGLE -IC:/Qt/5.7/mingw53_32/include/QtCore -IC:/Qt/Tools/mingw530_32/lib/gcc/i686-w64-mingw32/5.3.0/include -IC:/Qt/Tools/mingw530_32/lib/gcc/i686-w64-mingw32/5.3.0/include-fixed -IC:/Qt/Tools/mingw530_32/i686-w64-mingw32/include -IC:/Qt/Tools/mingw530_32/i686-w64-mingw32/include/c++ -IC:/Qt/Tools/mingw530_32/i686-w64-mingw32/include/c++/i686-w64-mingw32 -IC:/Qt/Tools/mingw530_32/i686-w64-mingw32/include/c++/backward mainwindow.h -o release\moc_mainwindow.cpp
+
+compiler_moc_source_make_all:
+compiler_moc_source_clean:
+compiler_uic_make_all: ui_mainwindow.h
+compiler_uic_clean:
+ -$(DEL_FILE) ui_mainwindow.h
+ui_mainwindow.h: mainwindow.ui \
+ C:/Qt/5.7/mingw53_32/bin/uic.exe
+ C:\Qt\5.7\mingw53_32\bin\uic.exe mainwindow.ui -o ui_mainwindow.h
+
+compiler_yacc_decl_make_all:
+compiler_yacc_decl_clean:
+compiler_yacc_impl_make_all:
+compiler_yacc_impl_clean:
+compiler_lex_make_all:
+compiler_lex_clean:
+compiler_clean: compiler_moc_header_clean compiler_uic_clean
+
+
+
+####### Compile
+
+release/main.o: main.cpp mainwindow.h \
+ C:/Qt/5.7/mingw53_32/include/QtWidgets/QMainWindow \
+ C:/Qt/5.7/mingw53_32/include/QtWidgets/qmainwindow.h \
+ C:/Qt/5.7/mingw53_32/include/QtWidgets/qwidget.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qwindowdefs.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qglobal.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qconfig.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qfeatures.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qsystemdetection.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qprocessordetection.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qcompilerdetection.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qtypeinfo.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qtypetraits.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qisenum.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qsysinfo.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qlogging.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qflags.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qatomic.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qbasicatomic.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qatomic_bootstrap.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qgenericatomic.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qatomic_cxx11.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qatomic_msvc.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qglobalstatic.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qmutex.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qnumeric.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qversiontagging.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qobjectdefs.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qnamespace.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qobjectdefs_impl.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qwindowdefs_win.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qobject.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qstring.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qchar.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qbytearray.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qrefcount.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qarraydata.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qstringbuilder.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qlist.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qalgorithms.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qiterator.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qhashfunctions.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qpair.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qbytearraylist.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qstringlist.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qregexp.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qstringmatcher.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qcoreevent.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qscopedpointer.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qmetatype.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qvarlengtharray.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qcontainerfwd.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qobject_impl.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qmargins.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qpaintdevice.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qrect.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qsize.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qpoint.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qpalette.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qcolor.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qrgb.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qrgba64.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qbrush.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qvector.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qmatrix.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qpolygon.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qregion.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qdatastream.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qiodevice.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qline.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qtransform.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qpainterpath.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qimage.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qpixelformat.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qpixmap.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qsharedpointer.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qshareddata.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qhash.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qsharedpointer_impl.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qfont.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qfontmetrics.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qfontinfo.h \
+ C:/Qt/5.7/mingw53_32/include/QtWidgets/qsizepolicy.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qcursor.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qkeysequence.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qevent.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qvariant.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qmap.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qdebug.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qtextstream.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qlocale.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qset.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qcontiguouscache.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qurl.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qurlquery.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qfile.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qfiledevice.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qvector2d.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qtouchdevice.h \
+ C:/Qt/5.7/mingw53_32/include/QtWidgets/qtabwidget.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qicon.h \
+ C:/Qt/5.7/mingw53_32/include/QtWidgets/QApplication \
+ C:/Qt/5.7/mingw53_32/include/QtWidgets/qapplication.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qcoreapplication.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qeventloop.h \
+ C:/Qt/5.7/mingw53_32/include/QtWidgets/qdesktopwidget.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qguiapplication.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qinputmethod.h
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o release\main.o main.cpp
+
+release/mainwindow.o: mainwindow.cpp mainwindow.h \
+ C:/Qt/5.7/mingw53_32/include/QtWidgets/QMainWindow \
+ C:/Qt/5.7/mingw53_32/include/QtWidgets/qmainwindow.h \
+ C:/Qt/5.7/mingw53_32/include/QtWidgets/qwidget.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qwindowdefs.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qglobal.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qconfig.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qfeatures.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qsystemdetection.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qprocessordetection.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qcompilerdetection.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qtypeinfo.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qtypetraits.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qisenum.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qsysinfo.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qlogging.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qflags.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qatomic.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qbasicatomic.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qatomic_bootstrap.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qgenericatomic.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qatomic_cxx11.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qatomic_msvc.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qglobalstatic.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qmutex.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qnumeric.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qversiontagging.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qobjectdefs.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qnamespace.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qobjectdefs_impl.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qwindowdefs_win.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qobject.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qstring.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qchar.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qbytearray.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qrefcount.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qarraydata.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qstringbuilder.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qlist.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qalgorithms.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qiterator.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qhashfunctions.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qpair.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qbytearraylist.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qstringlist.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qregexp.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qstringmatcher.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qcoreevent.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qscopedpointer.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qmetatype.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qvarlengtharray.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qcontainerfwd.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qobject_impl.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qmargins.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qpaintdevice.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qrect.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qsize.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qpoint.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qpalette.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qcolor.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qrgb.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qrgba64.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qbrush.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qvector.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qmatrix.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qpolygon.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qregion.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qdatastream.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qiodevice.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qline.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qtransform.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qpainterpath.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qimage.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qpixelformat.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qpixmap.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qsharedpointer.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qshareddata.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qhash.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qsharedpointer_impl.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qfont.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qfontmetrics.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qfontinfo.h \
+ C:/Qt/5.7/mingw53_32/include/QtWidgets/qsizepolicy.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qcursor.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qkeysequence.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qevent.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qvariant.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qmap.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qdebug.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qtextstream.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qlocale.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qset.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qcontiguouscache.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qurl.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qurlquery.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qfile.h \
+ C:/Qt/5.7/mingw53_32/include/QtCore/qfiledevice.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qvector2d.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qtouchdevice.h \
+ C:/Qt/5.7/mingw53_32/include/QtWidgets/qtabwidget.h \
+ C:/Qt/5.7/mingw53_32/include/QtGui/qicon.h \
+ ui_mainwindow.h
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o release\mainwindow.o mainwindow.cpp
+
+release/moc_mainwindow.o: release/moc_mainwindow.cpp
+ $(CXX) -c $(CXXFLAGS) $(INCPATH) -o release\moc_mainwindow.o release\moc_mainwindow.cpp
+
+####### Install
+
+install: FORCE
+
+uninstall: FORCE
+
+FORCE:
+
diff --git a/Source/MapEditor/MapEditor.pro b/Source/MapEditor/MapEditor.pro new file mode 100755 index 0000000..3f53ea1 --- /dev/null +++ b/Source/MapEditor/MapEditor.pro @@ -0,0 +1,20 @@ +#-------------------------------------------------
+#
+# Project created by QtCreator 2016-10-29T23:39:18
+#
+#-------------------------------------------------
+
+QT += core gui
+
+greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
+
+TARGET = MapEditor
+TEMPLATE = app
+
+
+SOURCES += main.cpp\
+ mainwindow.cpp
+
+HEADERS += mainwindow.h
+
+FORMS += mainwindow.ui
diff --git a/Source/MapEditor/MapEditor.pro.user b/Source/MapEditor/MapEditor.pro.user new file mode 100755 index 0000000..6ccb145 --- /dev/null +++ b/Source/MapEditor/MapEditor.pro.user @@ -0,0 +1,318 @@ +<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE QtCreatorProject>
+<!-- Written by QtCreator 4.0.3, 2016-11-12T03:25:30. -->
+<qtcreator>
+ <data>
+ <variable>EnvironmentId</variable>
+ <value type="QByteArray">{b7e5565e-6cea-457a-8037-111a3ab036df}</value>
+ </data>
+ <data>
+ <variable>ProjectExplorer.Project.ActiveTarget</variable>
+ <value type="int">0</value>
+ </data>
+ <data>
+ <variable>ProjectExplorer.Project.EditorSettings</variable>
+ <valuemap type="QVariantMap">
+ <value type="bool" key="EditorConfiguration.AutoIndent">true</value>
+ <value type="bool" key="EditorConfiguration.AutoSpacesForTabs">false</value>
+ <value type="bool" key="EditorConfiguration.CamelCaseNavigation">true</value>
+ <valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.0">
+ <value type="QString" key="language">Cpp</value>
+ <valuemap type="QVariantMap" key="value">
+ <value type="QByteArray" key="CurrentPreferences">CppGlobal</value>
+ </valuemap>
+ </valuemap>
+ <valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.1">
+ <value type="QString" key="language">QmlJS</value>
+ <valuemap type="QVariantMap" key="value">
+ <value type="QByteArray" key="CurrentPreferences">QmlJSGlobal</value>
+ </valuemap>
+ </valuemap>
+ <value type="int" key="EditorConfiguration.CodeStyle.Count">2</value>
+ <value type="QByteArray" key="EditorConfiguration.Codec">UTF-8</value>
+ <value type="bool" key="EditorConfiguration.ConstrainTooltips">false</value>
+ <value type="int" key="EditorConfiguration.IndentSize">4</value>
+ <value type="bool" key="EditorConfiguration.KeyboardTooltips">false</value>
+ <value type="int" key="EditorConfiguration.MarginColumn">80</value>
+ <value type="bool" key="EditorConfiguration.MouseHiding">true</value>
+ <value type="bool" key="EditorConfiguration.MouseNavigation">true</value>
+ <value type="int" key="EditorConfiguration.PaddingMode">1</value>
+ <value type="bool" key="EditorConfiguration.ScrollWheelZooming">true</value>
+ <value type="bool" key="EditorConfiguration.ShowMargin">false</value>
+ <value type="int" key="EditorConfiguration.SmartBackspaceBehavior">0</value>
+ <value type="bool" key="EditorConfiguration.SmartSelectionChanging">true</value>
+ <value type="bool" key="EditorConfiguration.SpacesForTabs">true</value>
+ <value type="int" key="EditorConfiguration.TabKeyBehavior">0</value>
+ <value type="int" key="EditorConfiguration.TabSize">8</value>
+ <value type="bool" key="EditorConfiguration.UseGlobal">true</value>
+ <value type="int" key="EditorConfiguration.Utf8BomBehavior">1</value>
+ <value type="bool" key="EditorConfiguration.addFinalNewLine">true</value>
+ <value type="bool" key="EditorConfiguration.cleanIndentation">true</value>
+ <value type="bool" key="EditorConfiguration.cleanWhitespace">true</value>
+ <value type="bool" key="EditorConfiguration.inEntireDocument">false</value>
+ </valuemap>
+ </data>
+ <data>
+ <variable>ProjectExplorer.Project.PluginSettings</variable>
+ <valuemap type="QVariantMap"/>
+ </data>
+ <data>
+ <variable>ProjectExplorer.Project.Target.0</variable>
+ <valuemap type="QVariantMap">
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Desktop Qt 5.7.0 MinGW 32bit</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Desktop Qt 5.7.0 MinGW 32bit</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">qt.57.win32_mingw53_kit</value>
+ <value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">2</value>
+ <value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
+ <value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
+ <valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
+ <value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">C:/cygwin/home/Xavier/Airport/Source/MapEditor</value>
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
+ <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
+ <value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">true</value>
+ <value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
+ <value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
+ <value type="bool" key="QtProjectManager.QMakeBuildStep.SeparateDebugInfo">false</value>
+ <value type="bool" key="QtProjectManager.QMakeBuildStep.UseQtQuickCompiler">false</value>
+ </valuemap>
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
+ <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
+ <valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments"/>
+ <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
+ <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
+ <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
+ </valuemap>
+ <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
+ </valuemap>
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
+ <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
+ <valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments"/>
+ <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
+ <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
+ <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
+ </valuemap>
+ <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
+ </valuemap>
+ <value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
+ <value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
+ <valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Debug</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
+ <value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">2</value>
+ <value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value>
+ </valuemap>
+ <valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.1">
+ <value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">C:/cygwin/home/Xavier/Airport/Source/MapEditor</value>
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
+ <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
+ <value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">false</value>
+ <value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
+ <value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
+ <value type="bool" key="QtProjectManager.QMakeBuildStep.SeparateDebugInfo">false</value>
+ <value type="bool" key="QtProjectManager.QMakeBuildStep.UseQtQuickCompiler">false</value>
+ </valuemap>
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
+ <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
+ <valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments"/>
+ <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
+ <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
+ <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
+ </valuemap>
+ <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
+ </valuemap>
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
+ <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
+ <valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments"/>
+ <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
+ <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
+ <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
+ </valuemap>
+ <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
+ </valuemap>
+ <value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
+ <value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
+ <valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Release</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
+ <value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
+ <value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value>
+ </valuemap>
+ <valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.2">
+ <value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">C:/cygwin/home/Xavier/Airport/Source/MapEditor</value>
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
+ <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">qmake</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
+ <value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">true</value>
+ <value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
+ <value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
+ <value type="bool" key="QtProjectManager.QMakeBuildStep.SeparateDebugInfo">true</value>
+ <value type="bool" key="QtProjectManager.QMakeBuildStep.UseQtQuickCompiler">false</value>
+ </valuemap>
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
+ <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
+ <valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments"/>
+ <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
+ <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
+ <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
+ </valuemap>
+ <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
+ </valuemap>
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
+ <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Make</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
+ <valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.AutomaticallyAddedMakeArguments"/>
+ <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
+ <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
+ <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
+ </valuemap>
+ <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
+ </valuemap>
+ <value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
+ <value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
+ <valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Profile</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
+ <value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
+ <value type="bool" key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild">true</value>
+ </valuemap>
+ <value type="int" key="ProjectExplorer.Target.BuildConfigurationCount">3</value>
+ <valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0">
+ <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
+ <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">0</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deploy</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value>
+ </valuemap>
+ <value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deploy locally</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.DefaultDeployConfiguration</value>
+ </valuemap>
+ <value type="int" key="ProjectExplorer.Target.DeployConfigurationCount">1</value>
+ <valuemap type="QVariantMap" key="ProjectExplorer.Target.PluginSettings"/>
+ <valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0">
+ <value type="bool" key="Analyzer.QmlProfiler.AggregateTraces">false</value>
+ <value type="bool" key="Analyzer.QmlProfiler.FlushEnabled">false</value>
+ <value type="uint" key="Analyzer.QmlProfiler.FlushInterval">1000</value>
+ <value type="QString" key="Analyzer.QmlProfiler.LastTraceFile"></value>
+ <value type="bool" key="Analyzer.QmlProfiler.Settings.UseGlobalSettings">true</value>
+ <valuelist type="QVariantList" key="Analyzer.Valgrind.AddedSuppressionFiles"/>
+ <value type="bool" key="Analyzer.Valgrind.Callgrind.CollectBusEvents">false</value>
+ <value type="bool" key="Analyzer.Valgrind.Callgrind.CollectSystime">false</value>
+ <value type="bool" key="Analyzer.Valgrind.Callgrind.EnableBranchSim">false</value>
+ <value type="bool" key="Analyzer.Valgrind.Callgrind.EnableCacheSim">false</value>
+ <value type="bool" key="Analyzer.Valgrind.Callgrind.EnableEventToolTips">true</value>
+ <value type="double" key="Analyzer.Valgrind.Callgrind.MinimumCostRatio">0.01</value>
+ <value type="double" key="Analyzer.Valgrind.Callgrind.VisualisationMinimumCostRatio">10</value>
+ <value type="bool" key="Analyzer.Valgrind.FilterExternalIssues">true</value>
+ <value type="int" key="Analyzer.Valgrind.LeakCheckOnFinish">1</value>
+ <value type="int" key="Analyzer.Valgrind.NumCallers">25</value>
+ <valuelist type="QVariantList" key="Analyzer.Valgrind.RemovedSuppressionFiles"/>
+ <value type="int" key="Analyzer.Valgrind.SelfModifyingCodeDetection">1</value>
+ <value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value>
+ <value type="bool" key="Analyzer.Valgrind.ShowReachable">false</value>
+ <value type="bool" key="Analyzer.Valgrind.TrackOrigins">true</value>
+ <value type="QString" key="Analyzer.Valgrind.ValgrindExecutable">valgrind</value>
+ <valuelist type="QVariantList" key="Analyzer.Valgrind.VisibleErrorKinds">
+ <value type="int">0</value>
+ <value type="int">1</value>
+ <value type="int">2</value>
+ <value type="int">3</value>
+ <value type="int">4</value>
+ <value type="int">5</value>
+ <value type="int">6</value>
+ <value type="int">7</value>
+ <value type="int">8</value>
+ <value type="int">9</value>
+ <value type="int">10</value>
+ <value type="int">11</value>
+ <value type="int">12</value>
+ <value type="int">13</value>
+ <value type="int">14</value>
+ </valuelist>
+ <value type="int" key="PE.EnvironmentAspect.Base">2</value>
+ <valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">MapEditor</value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
+ <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4RunConfiguration:C:/cygwin/home/Xavier/Airport/Source/MapEditor/MapEditor.pro</value>
+ <value type="bool" key="QmakeProjectManager.QmakeRunConfiguration.UseLibrarySearchPath">true</value>
+ <value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.CommandLineArguments"></value>
+ <value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.ProFile">MapEditor.pro</value>
+ <value type="bool" key="Qt4ProjectManager.Qt4RunConfiguration.UseDyldImageSuffix">false</value>
+ <value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.UserWorkingDirectory"></value>
+ <value type="QString" key="Qt4ProjectManager.Qt4RunConfiguration.UserWorkingDirectory.default">C:/cygwin/home/Xavier/Airport/Source/MapEditor</value>
+ <value type="uint" key="RunConfiguration.QmlDebugServerPort">3768</value>
+ <value type="bool" key="RunConfiguration.UseCppDebugger">false</value>
+ <value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
+ <value type="bool" key="RunConfiguration.UseMultiProcess">false</value>
+ <value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
+ <value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
+ </valuemap>
+ <value type="int" key="ProjectExplorer.Target.RunConfigurationCount">1</value>
+ </valuemap>
+ </data>
+ <data>
+ <variable>ProjectExplorer.Project.TargetCount</variable>
+ <value type="int">1</value>
+ </data>
+ <data>
+ <variable>ProjectExplorer.Project.Updater.FileVersion</variable>
+ <value type="int">18</value>
+ </data>
+ <data>
+ <variable>Version</variable>
+ <value type="int">18</value>
+ </data>
+</qtcreator>
diff --git a/Source/MapEditor/main.cpp b/Source/MapEditor/main.cpp new file mode 100755 index 0000000..aab39bb --- /dev/null +++ b/Source/MapEditor/main.cpp @@ -0,0 +1,11 @@ +#include "mainwindow.h"
+#include <QApplication>
+
+int main(int argc, char *argv[])
+{
+ QApplication a(argc, argv);
+ MainWindow w;
+ w.show();
+
+ return a.exec();
+}
diff --git a/Source/MapEditor/mainwindow.cpp b/Source/MapEditor/mainwindow.cpp new file mode 100755 index 0000000..58c37f6 --- /dev/null +++ b/Source/MapEditor/mainwindow.cpp @@ -0,0 +1,81 @@ +#include "mainwindow.h"
+
+MainWindow::MainWindow(QWidget *parent) :
+ QMainWindow(parent),
+ ui(new Ui::MainWindow)
+{
+ ui->setupUi(this);
+
+ connect(ui->LoadMap_Btn, SIGNAL(released()), this, SLOT(onLoadMap()));
+
+ ui->openGLWidget->
+
+ appSettings();
+}
+
+MainWindow::~MainWindow()
+{
+ delete ui;
+}
+
+void MainWindow::onLoadMap(void)
+{
+ QString path = QFileDialog::getOpenFileName(this,
+ "Open map file",
+ _last_dir,
+ "Map files (*.LVL)");
+
+ QFile f(path);
+
+ if(checkFile(f) == false)
+ {
+ return;
+ }
+
+ QDataStream txt(&f);
+
+
+}
+
+bool MainWindow::checkFile(QFile& f)
+{
+ QFileInfo fi(f);
+
+ if(fi.exists() == false)
+ {
+ return false;
+ }
+
+ if(f.open(QFile::ReadWrite) == false)
+ {
+ return false;
+ }
+
+ QDir d(fi.absoluteFilePath());
+
+ _last_dir = d.absolutePath();
+
+ return true;
+}
+
+void MainWindow::appSettings(void)
+{
+ QSettings set("./settings.ini",QSettings::IniFormat);
+
+ set.beginGroup("app_settings");
+
+ _last_dir = set.value("last_dir").toString();
+
+ set.endGroup();
+}
+
+void MainWindow::closeEvent(QCloseEvent*)
+{
+ QSettings set("./settings.ini",QSettings::IniFormat);
+
+ set.beginGroup("app_settings");
+
+ set.setValue("last_dir",_last_dir);
+
+ set.endGroup();
+}
diff --git a/Source/MapEditor/mainwindow.h b/Source/MapEditor/mainwindow.h new file mode 100755 index 0000000..e8f80d6 --- /dev/null +++ b/Source/MapEditor/mainwindow.h @@ -0,0 +1,34 @@ +#ifndef MAINWINDOW_H
+#define MAINWINDOW_H
+
+#include <QMainWindow>
+#include <QFileDialog>
+#include <QSettings>
+
+#include "ui_mainwindow.h"
+
+namespace Ui {
+class MainWindow;
+}
+
+class MainWindow : public QMainWindow
+{
+ Q_OBJECT
+
+public:
+ explicit MainWindow(QWidget *parent = 0);
+ ~MainWindow();
+ void closeEvent(QCloseEvent*);
+
+private:
+ Ui::MainWindow *ui;
+ bool checkFile(QFile &f);
+ void appSettings(void);
+ QString _last_dir;
+
+protected slots:
+ void onLoadMap(void);
+
+};
+
+#endif // MAINWINDOW_H
diff --git a/Source/MapEditor/mainwindow.ui b/Source/MapEditor/mainwindow.ui new file mode 100755 index 0000000..59d85a2 --- /dev/null +++ b/Source/MapEditor/mainwindow.ui @@ -0,0 +1,107 @@ +<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>MainWindow</class>
+ <widget class="QMainWindow" name="MainWindow">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>501</width>
+ <height>380</height>
+ </rect>
+ </property>
+ <property name="windowTitle">
+ <string>MainWindow</string>
+ </property>
+ <widget class="QWidget" name="centralWidget">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="autoFillBackground">
+ <bool>true</bool>
+ </property>
+ <layout class="QGridLayout" name="gridLayout">
+ <item row="2" column="1">
+ <widget class="QOpenGLWidget" name="openGLWidget">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="0">
+ <layout class="QHBoxLayout" name="horizontalLayout">
+ <item>
+ <widget class="QPushButton" name="LoadMap_Btn">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>Load map</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="SaveMap_Btn">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>Save Map</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item row="2" column="0">
+ <widget class="QTreeWidget" name="treeWidget">
+ <property name="maximumSize">
+ <size>
+ <width>320</width>
+ <height>16777215</height>
+ </size>
+ </property>
+ <column>
+ <property name="text">
+ <string>Items</string>
+ </property>
+ </column>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ <widget class="QMenuBar" name="menuBar">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>501</width>
+ <height>21</height>
+ </rect>
+ </property>
+ </widget>
+ <widget class="QToolBar" name="mainToolBar">
+ <attribute name="toolBarArea">
+ <enum>TopToolBarArea</enum>
+ </attribute>
+ <attribute name="toolBarBreak">
+ <bool>false</bool>
+ </attribute>
+ </widget>
+ <widget class="QStatusBar" name="statusBar"/>
+ </widget>
+ <layoutdefault spacing="6" margin="11"/>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/Source/MapEditor/release/moc_mainwindow.cpp b/Source/MapEditor/release/moc_mainwindow.cpp new file mode 100755 index 0000000..59ffe7e --- /dev/null +++ b/Source/MapEditor/release/moc_mainwindow.cpp @@ -0,0 +1,111 @@ +/****************************************************************************
+** Meta object code from reading C++ file 'mainwindow.h'
+**
+** Created by: The Qt Meta Object Compiler version 67 (Qt 5.7.0)
+**
+** WARNING! All changes made in this file will be lost!
+*****************************************************************************/
+
+#include "../mainwindow.h"
+#include <QtCore/qbytearray.h>
+#include <QtCore/qmetatype.h>
+#if !defined(Q_MOC_OUTPUT_REVISION)
+#error "The header file 'mainwindow.h' doesn't include <QObject>."
+#elif Q_MOC_OUTPUT_REVISION != 67
+#error "This file was generated using the moc from 5.7.0. It"
+#error "cannot be used with the include files from this version of Qt."
+#error "(The moc has changed too much.)"
+#endif
+
+QT_BEGIN_MOC_NAMESPACE
+struct qt_meta_stringdata_MainWindow_t {
+ QByteArrayData data[3];
+ char stringdata0[22];
+};
+#define QT_MOC_LITERAL(idx, ofs, len) \
+ Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET(len, \
+ qptrdiff(offsetof(qt_meta_stringdata_MainWindow_t, stringdata0) + ofs \
+ - idx * sizeof(QByteArrayData)) \
+ )
+static const qt_meta_stringdata_MainWindow_t qt_meta_stringdata_MainWindow = {
+ {
+QT_MOC_LITERAL(0, 0, 10), // "MainWindow"
+QT_MOC_LITERAL(1, 11, 9), // "onLoadMap"
+QT_MOC_LITERAL(2, 21, 0) // ""
+
+ },
+ "MainWindow\0onLoadMap\0"
+};
+#undef QT_MOC_LITERAL
+
+static const uint qt_meta_data_MainWindow[] = {
+
+ // content:
+ 7, // revision
+ 0, // classname
+ 0, 0, // classinfo
+ 1, 14, // methods
+ 0, 0, // properties
+ 0, 0, // enums/sets
+ 0, 0, // constructors
+ 0, // flags
+ 0, // signalCount
+
+ // slots: name, argc, parameters, tag, flags
+ 1, 0, 19, 2, 0x09 /* Protected */,
+
+ // slots: parameters
+ QMetaType::Void,
+
+ 0 // eod
+};
+
+void MainWindow::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a)
+{
+ if (_c == QMetaObject::InvokeMetaMethod) {
+ MainWindow *_t = static_cast<MainWindow *>(_o);
+ Q_UNUSED(_t)
+ switch (_id) {
+ case 0: _t->onLoadMap(); break;
+ default: ;
+ }
+ }
+ Q_UNUSED(_a);
+}
+
+const QMetaObject MainWindow::staticMetaObject = {
+ { &QMainWindow::staticMetaObject, qt_meta_stringdata_MainWindow.data,
+ qt_meta_data_MainWindow, qt_static_metacall, Q_NULLPTR, Q_NULLPTR}
+};
+
+
+const QMetaObject *MainWindow::metaObject() const
+{
+ return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject;
+}
+
+void *MainWindow::qt_metacast(const char *_clname)
+{
+ if (!_clname) return Q_NULLPTR;
+ if (!strcmp(_clname, qt_meta_stringdata_MainWindow.stringdata0))
+ return static_cast<void*>(const_cast< MainWindow*>(this));
+ return QMainWindow::qt_metacast(_clname);
+}
+
+int MainWindow::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
+{
+ _id = QMainWindow::qt_metacall(_c, _id, _a);
+ if (_id < 0)
+ return _id;
+ if (_c == QMetaObject::InvokeMetaMethod) {
+ if (_id < 1)
+ qt_static_metacall(this, _c, _id, _a);
+ _id -= 1;
+ } else if (_c == QMetaObject::RegisterMethodArgumentMetaType) {
+ if (_id < 1)
+ *reinterpret_cast<int*>(_a[0]) = -1;
+ _id -= 1;
+ }
+ return _id;
+}
+QT_END_MOC_NAMESPACE
diff --git a/Source/MapEditor/settings.ini b/Source/MapEditor/settings.ini new file mode 100755 index 0000000..ca3d2c8 --- /dev/null +++ b/Source/MapEditor/settings.ini @@ -0,0 +1,2 @@ +[app_settings]
+last_dir=C:/cygwin/home/Xavier/Airport/Levels/LEVEL1.LVL
diff --git a/Source/MapEditor/ui_mainwindow.h b/Source/MapEditor/ui_mainwindow.h new file mode 100755 index 0000000..0e9c8f1 --- /dev/null +++ b/Source/MapEditor/ui_mainwindow.h @@ -0,0 +1,131 @@ +/********************************************************************************
+** Form generated from reading UI file 'mainwindow.ui'
+**
+** Created by: Qt User Interface Compiler version 5.7.0
+**
+** WARNING! All changes made in this file will be lost when recompiling UI file!
+********************************************************************************/
+
+#ifndef UI_MAINWINDOW_H
+#define UI_MAINWINDOW_H
+
+#include <QtCore/QVariant>
+#include <QtWidgets/QAction>
+#include <QtWidgets/QApplication>
+#include <QtWidgets/QButtonGroup>
+#include <QtWidgets/QGridLayout>
+#include <QtWidgets/QHBoxLayout>
+#include <QtWidgets/QHeaderView>
+#include <QtWidgets/QMainWindow>
+#include <QtWidgets/QMenuBar>
+#include <QtWidgets/QOpenGLWidget>
+#include <QtWidgets/QPushButton>
+#include <QtWidgets/QStatusBar>
+#include <QtWidgets/QToolBar>
+#include <QtWidgets/QTreeWidget>
+#include <QtWidgets/QWidget>
+
+QT_BEGIN_NAMESPACE
+
+class Ui_MainWindow
+{
+public:
+ QWidget *centralWidget;
+ QGridLayout *gridLayout;
+ QOpenGLWidget *openGLWidget;
+ QHBoxLayout *horizontalLayout;
+ QPushButton *LoadMap_Btn;
+ QPushButton *SaveMap_Btn;
+ QTreeWidget *treeWidget;
+ QMenuBar *menuBar;
+ QToolBar *mainToolBar;
+ QStatusBar *statusBar;
+
+ void setupUi(QMainWindow *MainWindow)
+ {
+ if (MainWindow->objectName().isEmpty())
+ MainWindow->setObjectName(QStringLiteral("MainWindow"));
+ MainWindow->resize(501, 380);
+ centralWidget = new QWidget(MainWindow);
+ centralWidget->setObjectName(QStringLiteral("centralWidget"));
+ QSizePolicy sizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
+ sizePolicy.setHorizontalStretch(0);
+ sizePolicy.setVerticalStretch(0);
+ sizePolicy.setHeightForWidth(centralWidget->sizePolicy().hasHeightForWidth());
+ centralWidget->setSizePolicy(sizePolicy);
+ centralWidget->setAutoFillBackground(true);
+ gridLayout = new QGridLayout(centralWidget);
+ gridLayout->setSpacing(6);
+ gridLayout->setContentsMargins(11, 11, 11, 11);
+ gridLayout->setObjectName(QStringLiteral("gridLayout"));
+ openGLWidget = new QOpenGLWidget(centralWidget);
+ openGLWidget->setObjectName(QStringLiteral("openGLWidget"));
+ sizePolicy.setHeightForWidth(openGLWidget->sizePolicy().hasHeightForWidth());
+ openGLWidget->setSizePolicy(sizePolicy);
+
+ gridLayout->addWidget(openGLWidget, 2, 1, 1, 1);
+
+ horizontalLayout = new QHBoxLayout();
+ horizontalLayout->setSpacing(6);
+ horizontalLayout->setObjectName(QStringLiteral("horizontalLayout"));
+ LoadMap_Btn = new QPushButton(centralWidget);
+ LoadMap_Btn->setObjectName(QStringLiteral("LoadMap_Btn"));
+ QSizePolicy sizePolicy1(QSizePolicy::Fixed, QSizePolicy::Fixed);
+ sizePolicy1.setHorizontalStretch(0);
+ sizePolicy1.setVerticalStretch(0);
+ sizePolicy1.setHeightForWidth(LoadMap_Btn->sizePolicy().hasHeightForWidth());
+ LoadMap_Btn->setSizePolicy(sizePolicy1);
+
+ horizontalLayout->addWidget(LoadMap_Btn);
+
+ SaveMap_Btn = new QPushButton(centralWidget);
+ SaveMap_Btn->setObjectName(QStringLiteral("SaveMap_Btn"));
+ sizePolicy1.setHeightForWidth(SaveMap_Btn->sizePolicy().hasHeightForWidth());
+ SaveMap_Btn->setSizePolicy(sizePolicy1);
+
+ horizontalLayout->addWidget(SaveMap_Btn);
+
+
+ gridLayout->addLayout(horizontalLayout, 0, 0, 1, 1);
+
+ treeWidget = new QTreeWidget(centralWidget);
+ treeWidget->setObjectName(QStringLiteral("treeWidget"));
+ treeWidget->setMaximumSize(QSize(320, 16777215));
+
+ gridLayout->addWidget(treeWidget, 2, 0, 1, 1);
+
+ MainWindow->setCentralWidget(centralWidget);
+ menuBar = new QMenuBar(MainWindow);
+ menuBar->setObjectName(QStringLiteral("menuBar"));
+ menuBar->setGeometry(QRect(0, 0, 501, 21));
+ MainWindow->setMenuBar(menuBar);
+ mainToolBar = new QToolBar(MainWindow);
+ mainToolBar->setObjectName(QStringLiteral("mainToolBar"));
+ MainWindow->addToolBar(Qt::TopToolBarArea, mainToolBar);
+ statusBar = new QStatusBar(MainWindow);
+ statusBar->setObjectName(QStringLiteral("statusBar"));
+ MainWindow->setStatusBar(statusBar);
+
+ retranslateUi(MainWindow);
+
+ QMetaObject::connectSlotsByName(MainWindow);
+ } // setupUi
+
+ void retranslateUi(QMainWindow *MainWindow)
+ {
+ MainWindow->setWindowTitle(QApplication::translate("MainWindow", "MainWindow", 0));
+ LoadMap_Btn->setText(QApplication::translate("MainWindow", "Load map", 0));
+ SaveMap_Btn->setText(QApplication::translate("MainWindow", "Save Map", 0));
+ QTreeWidgetItem *___qtreewidgetitem = treeWidget->headerItem();
+ ___qtreewidgetitem->setText(0, QApplication::translate("MainWindow", "Items", 0));
+ } // retranslateUi
+
+};
+
+namespace Ui {
+ class MainWindow: public Ui_MainWindow {};
+} // namespace Ui
+
+QT_END_NAMESPACE
+
+#endif // UI_MAINWINDOW_H
diff --git a/Source/MemCard.c b/Source/MemCard.c new file mode 100755 index 0000000..5050957 --- /dev/null +++ b/Source/MemCard.c @@ -0,0 +1,1172 @@ +/* *************************************
+ * Includes
+ * *************************************/
+
+#include "MemCard.h"
+
+/* *************************************
+ * Defines
+ * *************************************/
+
+#define MEMCARD_SECTOR_SIZE 128
+#define MEMCARD_SECTORS_PER_BLOCK 64
+#define MEMCARD_SECTORS_PER_BLOCK_BITSHIFT 6
+#define MEMCARD_BLOCK_MAX_ICONS 3
+#define MEMCARD_ICON_INDEX_TIME 4
+
+#define MEMCARD_MAXIMUM_SECTOR 511
+
+#define MEMCARD_INVALID_CHECKSUM 0x4E
+#define MEMCARD_CORRECT_RW 0x47
+#define MEMCARD_BAD_SECTOR 0xFF
+
+/* *************************************
+ * Structs and enums
+ * *************************************/
+
+typedef enum t_Sectors
+{
+ TITLE_FRAME = 0,
+ ICON_FRAME_1,
+ ICON_FRAME_2,
+ ICON_FRAME_3,
+ DATA_FRAME,
+}MEMCARD_FILE_SECTORS;
+
+enum
+{
+ MEMCARD_BLOCK_IMAGE_X = 768 ,
+ MEMCARD_BLOCK_IMAGE_Y = 352 ,
+ MEMCARD_BLOCK_CLUT_X = 960 ,
+ MEMCARD_BLOCK_CLUT_Y = 352 ,
+ MEMCARD_BLOCK_CLUT_W = 16 ,
+ MEMCARD_BLOCK_CLUT_H = 1 ,
+ MEMCARD_BLOCK_IMAGE_W = 16 ,
+ MEMCARD_BLOCK_IMAGE_H = 16 ,
+ MEMCARD_BLOCK_IMAGE_W_BITSHIFT = 2,
+ MEMCARD_LOAD_DATA_TEXT_X = 96,
+ MEMCARD_LOAD_DATA_TEXT_Y = 192,
+};
+
+enum
+{
+ MEMCARD_DIALOG_X = 64,
+ MEMCARD_DIALOG_Y = 28,
+ MEMCARD_DIALOG_W = 256,
+ MEMCARD_DIALOG_H = 184,
+
+ MEMCARD_DIALOG_R = 0,
+ MEMCARD_DIALOG_G = 128,
+ MEMCARD_DIALOG_B = 64,
+
+ MEMCARD_DIALOG_GAP_X = 24,
+ MEMCARD_DIALOG_GAP_SLOT = 128
+};
+
+enum
+{
+ MEMCARD_BG_X = 64,
+ MEMCARD_BG_Y = 28,
+ MEMCARD_BG_W = 256,
+ MEMCARD_BG_H = 184,
+
+ MEMCARD_BG_R0 = 0,
+ MEMCARD_BG_R1 = MEMCARD_BG_R0,
+ MEMCARD_BG_R2 = MEMCARD_BG_R0,
+ MEMCARD_BG_R3 = MEMCARD_BG_R0,
+
+ MEMCARD_BG_G0 = 0,
+ MEMCARD_BG_G1 = MEMCARD_BG_G0,
+ MEMCARD_BG_G2 = NORMAL_LUMINANCE,
+ MEMCARD_BG_G3 = MEMCARD_BG_G2,
+
+ MEMCARD_BG_B0 = 0,
+ MEMCARD_BG_B1 = MEMCARD_BG_B0,
+ MEMCARD_BG_B2 = NORMAL_LUMINANCE >> 1,
+ MEMCARD_BG_B3 = MEMCARD_BG_B2
+};
+
+enum
+{
+ MEMCARD_PROGRESS_BAR_X = 86,
+ MEMCARD_PROGRESS_BAR_Y = 148,
+ MEMCARD_PROGRESS_BAR_W = 226,
+ MEMCARD_PROGRESS_BAR_H = 16,
+
+ MEMCARD_PROGRESS_BAR_N_LINES = 4,
+
+ MEMCARD_PROGRESS_BAR_R = NORMAL_LUMINANCE,
+ MEMCARD_PROGRESS_BAR_G = NORMAL_LUMINANCE,
+ MEMCARD_PROGRESS_BAR_B = NORMAL_LUMINANCE
+};
+
+typedef enum t_MemcardProcess
+{
+ MEMCARD_PROCESS_GET_FILENAME = 0,
+ MEMCARD_PROCESS_GET_INITIAL_FRAME,
+ MEMCARD_PROCESS_GET_ICON_FRAME,
+ MEMCARD_PROCESS_UPLOAD_TO_GPU
+}MEMCARD_PROCESS;
+
+typedef struct t_MemCardErrors
+{
+ unsigned char ErrorByte;
+ MEMCARD_SLOTS Slot;
+ MEMCARD_BLOCKS Block;
+ MEMCARD_PROCESS Process;
+}TYPE_MEMCARD_ERRORS;
+
+/* *************************************
+ * Local Prototypes
+ * *************************************/
+
+static bool MemCardGetInitialFrameInfo(TYPE_BLOCK_DATA * ptrBlockData);
+static bool MemCardGetIconFrameInfo(TYPE_BLOCK_DATA * ptrBlockData);
+static bool MemCardGetBlockStateFileName(TYPE_BLOCK_DATA * ptrBlockData);
+static void ISR_MemCardDataHandling(void);
+static bool MemCardReadSector(TYPE_BLOCK_DATA * ptrBlockData, int sector);
+static void MemCardIconIndexHandler(void);
+
+/* *************************************
+ * Local Variables
+ * *************************************/
+
+static uint8_t DataBuffer[MEMCARD_SECTOR_SIZE];
+static TYPE_MEMCARD_ERRORS MemCardErrors;
+static GsSprite SecondDisplay;
+static GsGPoly4 MemCardRect;
+static GsRectangle MemCardProgressBar;
+static GsLine MemCardProgressBarLines[MEMCARD_PROGRESS_BAR_N_LINES];
+static uint8_t IconIndex;
+static MEMCARD_STATUS MemCardStatus[MEMCARD_NUMBER_OF_SLOTS];
+
+// Local variables used to communicate between functions and ISR.
+// Names are pretty self-explanatory.
+static volatile uint8_t TotalBlocks;
+static volatile uint8_t CurrentReadBlock;
+static volatile short ProgressBarXOffset;
+
+/* *************************************
+ * Global Variables
+ * *************************************/
+
+TYPE_BLOCK_DATA MemCardData[MEMCARD_BLOCKS_PER_CARD][MEMCARD_NUMBER_OF_SLOTS];
+
+void MemCardInit(void)
+{
+ TYPE_BLOCK_DATA * ptrBlockData;
+ uint8_t i;
+ uint8_t j;
+
+ for(j = SLOT_ONE; j <= SLOT_TWO; j++)
+ {
+ for(i = BLOCK_1; i <= BLOCK_15; i++)
+ {
+ ptrBlockData = &MemCardData[i - BLOCK_1][j];
+
+ ptrBlockData->IconTPoly.r = NORMAL_LUMINANCE;
+ ptrBlockData->IconTPoly.g = NORMAL_LUMINANCE;
+ ptrBlockData->IconTPoly.b = NORMAL_LUMINANCE;
+ }
+ }
+
+ bzero((TYPE_MEMCARD_ERRORS*)&MemCardErrors, sizeof(TYPE_MEMCARD_ERRORS) );
+}
+
+void ISR_MemCardDataHandling(void)
+{
+
+ uint8_t i;
+
+ if( (GfxIsGPUBusy() == true) || (SystemIsBusy() == true) )
+ {
+ return;
+ }
+
+ // Dim background
+ SecondDisplay.r = NORMAL_LUMINANCE >> 1;
+ SecondDisplay.g = NORMAL_LUMINANCE >> 1;
+ SecondDisplay.b = NORMAL_LUMINANCE >> 1;
+
+ MemCardRect.x[0] = MEMCARD_BG_X;
+ MemCardRect.x[1] = MEMCARD_BG_X + MEMCARD_BG_W;
+ MemCardRect.x[2] = MEMCARD_BG_X;
+ MemCardRect.x[3] = MEMCARD_BG_X + MEMCARD_BG_W;
+
+ MemCardRect.y[0] = MEMCARD_BG_Y;
+ MemCardRect.y[1] = MEMCARD_BG_Y;
+ MemCardRect.y[2] = MEMCARD_BG_Y + MEMCARD_BG_H;
+ MemCardRect.y[3] = MEMCARD_BG_Y + MEMCARD_BG_H;
+
+ MemCardRect.r[0] = MEMCARD_BG_R0;
+ MemCardRect.r[1] = MEMCARD_BG_R1;
+ MemCardRect.r[2] = MEMCARD_BG_R2;
+ MemCardRect.r[3] = MEMCARD_BG_R3;
+
+ MemCardRect.g[0] = MEMCARD_BG_G0;
+ MemCardRect.g[1] = MEMCARD_BG_G1;
+ MemCardRect.g[2] = MEMCARD_BG_G2;
+ MemCardRect.g[3] = MEMCARD_BG_G3;
+
+ MemCardRect.b[0] = MEMCARD_BG_B0;
+ MemCardRect.b[1] = MEMCARD_BG_B1;
+ MemCardRect.b[2] = MEMCARD_BG_B2;
+ MemCardRect.b[3] = MEMCARD_BG_B3;
+
+ MemCardRect.attribute |= ENABLE_TRANS | TRANS_MODE(0);
+
+ // "Loading" bar line 0 (up left - up right)
+
+ MemCardProgressBarLines[0].x[0] = MEMCARD_PROGRESS_BAR_X;
+ MemCardProgressBarLines[0].x[1] = MEMCARD_PROGRESS_BAR_X + MEMCARD_PROGRESS_BAR_W;
+
+ MemCardProgressBarLines[0].y[0] = MEMCARD_PROGRESS_BAR_Y;
+ MemCardProgressBarLines[0].y[1] = MEMCARD_PROGRESS_BAR_Y;
+
+ // "Loading" bar line 1 (up left - down left)
+
+ MemCardProgressBarLines[1].x[0] = MEMCARD_PROGRESS_BAR_X;
+ MemCardProgressBarLines[1].x[1] = MEMCARD_PROGRESS_BAR_X;
+
+ MemCardProgressBarLines[1].y[0] = MEMCARD_PROGRESS_BAR_Y;
+ MemCardProgressBarLines[1].y[1] = MEMCARD_PROGRESS_BAR_Y + MEMCARD_PROGRESS_BAR_H;
+
+ // "Loading" bar line 2 (down left - down right)
+
+ MemCardProgressBarLines[2].x[0] = MEMCARD_PROGRESS_BAR_X;
+ MemCardProgressBarLines[2].x[1] = MEMCARD_PROGRESS_BAR_X + MEMCARD_PROGRESS_BAR_W;
+
+ MemCardProgressBarLines[2].y[0] = MEMCARD_PROGRESS_BAR_Y + MEMCARD_PROGRESS_BAR_H;
+ MemCardProgressBarLines[2].y[1] = MEMCARD_PROGRESS_BAR_Y + MEMCARD_PROGRESS_BAR_H;
+
+ // "Loading" bar line 3 (up right - down right)
+
+ MemCardProgressBarLines[3].x[0] = MEMCARD_PROGRESS_BAR_X + MEMCARD_PROGRESS_BAR_W;
+ MemCardProgressBarLines[3].x[1] = MEMCARD_PROGRESS_BAR_X + MEMCARD_PROGRESS_BAR_W;
+
+ MemCardProgressBarLines[3].y[0] = MEMCARD_PROGRESS_BAR_Y;
+ MemCardProgressBarLines[3].y[1] = MEMCARD_PROGRESS_BAR_Y + MEMCARD_PROGRESS_BAR_H;
+
+ for(i = 0; i < MEMCARD_PROGRESS_BAR_N_LINES; i++)
+ {
+ MemCardProgressBarLines[i].r = NORMAL_LUMINANCE;
+ MemCardProgressBarLines[i].g = NORMAL_LUMINANCE;
+ MemCardProgressBarLines[i].b = NORMAL_LUMINANCE;
+ }
+
+ // Set progress bar attributes
+
+ MemCardProgressBar.x = MEMCARD_PROGRESS_BAR_X;
+ MemCardProgressBar.y = MEMCARD_PROGRESS_BAR_Y;
+
+ MemCardProgressBar.w = ProgressBarXOffset;
+ MemCardProgressBar.h = MEMCARD_PROGRESS_BAR_H;
+
+ MemCardProgressBar.r = MEMCARD_PROGRESS_BAR_R;
+ MemCardProgressBar.g = MEMCARD_PROGRESS_BAR_G;
+ MemCardProgressBar.b = MEMCARD_PROGRESS_BAR_B;
+
+ GfxSortSprite(&SecondDisplay);
+ GsSortGPoly4(&MemCardRect);
+ GsSortRectangle(&MemCardProgressBar);
+
+ for(i = 0; i < MEMCARD_PROGRESS_BAR_N_LINES; i++)
+ {
+ GsSortLine(&MemCardProgressBarLines[i]);
+ }
+
+ FontSetFlags(&SmallFont, FONT_BLEND_EFFECT);
+
+ FontPrintText(&SmallFont, MEMCARD_LOAD_DATA_TEXT_X, MEMCARD_LOAD_DATA_TEXT_Y, "Loading memory card data...");
+
+ FontSetFlags(&SmallFont, FONT_NOFLAGS);
+
+ GfxDrawScene_Fast();
+
+}
+
+void MemCardResetBlockData(TYPE_BLOCK_DATA * ptrBlockData)
+{
+ bzero((TYPE_BLOCK_DATA*)ptrBlockData, sizeof(TYPE_BLOCK_DATA));
+
+ ptrBlockData->BlockCount = FIRST_OR_ONLY_BLOCK;
+
+ IconIndex = 0;
+}
+
+bool MemCardGetBlockInfo( TYPE_BLOCK_DATA * ptrBlockData,
+ MEMCARD_SLOTS slot,
+ MEMCARD_BLOCKS blockNumber )
+{
+ MemCardResetBlockData(ptrBlockData);
+
+ ptrBlockData->Slot = slot;
+ ptrBlockData->Block = blockNumber;
+
+ dprintf("MemCardGetBlockStateFileName...\n");
+
+ if(MemCardGetBlockStateFileName(ptrBlockData) == false)
+ {
+ return false;
+ }
+
+ if(ptrBlockData->BlockCount == EMPTY_BLOCK)
+ {
+ // Stop looking for any other data.
+ return true;
+ }
+
+ dprintf("MemCardGetInitialFrameInfo...\n");
+
+ if(MemCardGetInitialFrameInfo(ptrBlockData) == false)
+ {
+ return false;
+ }
+
+ dprintf("MemCardGetIconFrameInfo...\n");
+
+ if(MemCardGetIconFrameInfo(ptrBlockData) == false)
+ {
+ return false;
+ }
+
+ // We will not get any block data information, we are only interested
+ // in basic info.
+
+ dprintf("MemCardUploadToGPU...\n");
+
+ if(MemCardUploadToGPU(ptrBlockData) == false)
+ {
+ return false;
+ }
+
+ return true;
+}
+
+bool MemCardGetBlockStateFileName(TYPE_BLOCK_DATA * ptrBlockData)
+{
+ int sector = ptrBlockData->Block;
+
+ MemCardErrors.Block = ptrBlockData->Block;
+ MemCardErrors.Slot = ptrBlockData->Slot;
+ MemCardErrors.Process = MEMCARD_PROCESS_GET_FILENAME;
+
+ memset(DataBuffer, 0, MEMCARD_SECTOR_SIZE);
+
+ if(MemCardReadSector(ptrBlockData, sector) == false)
+ {
+ return false;
+ }
+
+ // 00h-03h Block Allocation State
+ dprintf("Block %d, slot %d, allocation state: 0x%02X.\n",
+ ptrBlockData->Block,
+ ptrBlockData->Slot,
+ DataBuffer[0] );
+
+ /* 00000051h - In use ;first-or-only block of a file
+ * 00000052h - In use ;middle block of a file (if 3 or more blocks)
+ * 00000053h - In use ;last block of a file (if 2 or more blocks)
+ * 000000A0h - Free ;freshly formatted
+ * 000000A1h - Free ;deleted (first-or-only block of file)
+ * 000000A2h - Free ;deleted (middle block of file)
+ * 000000A3h - Free ;deleted (last block of file) */
+
+ // Always take into account memory card data is little-endian,
+ // so if using a hex editor, you will read 51000000h.
+
+ switch(DataBuffer[0])
+ {
+ case 0x51:
+ ptrBlockData->BlockCount = FIRST_OR_ONLY_BLOCK;
+ break;
+
+ case 0x52:
+ ptrBlockData->BlockCount = INTERMEDIATE_BLOCK;
+ break;
+
+ case 0x53:
+ ptrBlockData->BlockCount = LAST_BLOCK;
+ break;
+ case 0xA0:
+ case 0xA1:
+ case 0xA2:
+ case 0xA3:
+ ptrBlockData->BlockCount = EMPTY_BLOCK;
+ return true;
+ default:
+ printf("Invalid block allocation state!\n");
+ return false;
+ }
+
+ // 0Ah-1Eh Filename in ASCII, terminated by 00h (max 20 chars, plus ending 00h)
+ // File name is only defined on first block of group (allocation state == 0x51)
+
+ if(ptrBlockData->BlockCount == FIRST_OR_ONLY_BLOCK)
+ {
+ memset(ptrBlockData->FileName, 0 , MEMCARD_FILENAME_SIZE);
+
+ memcpy(ptrBlockData->FileName, &DataBuffer[0x0A], MEMCARD_FILENAME_SIZE);
+
+ dprintf("File name: %s\n", ptrBlockData->FileName);
+ }
+
+ return true;
+}
+
+bool MemCardGetInitialFrameInfo(TYPE_BLOCK_DATA * ptrBlockData)
+{
+ unsigned int i;
+ int sector = ptrBlockData->Block << MEMCARD_SECTORS_PER_BLOCK_BITSHIFT;
+
+ MemCardErrors.Block = ptrBlockData->Block;
+ MemCardErrors.Slot = ptrBlockData->Slot;
+ MemCardErrors.Process = MEMCARD_PROCESS_GET_FILENAME;
+
+ if(ptrBlockData->BlockCount != FIRST_OR_ONLY_BLOCK)
+ {
+ // Icon data is only stored on first block (if game takes more
+ // than one block. Skip this step otherwise.
+
+ // When dealing with intermediate or last blocks of a file,
+ // we use a static pointer which points to first block of a file,
+ // and then image data is copied into other blocks.
+ return true;
+ }
+
+ // Pretty silly operation (TITLE_FRAME = 0), but used for
+ // conceptual purposes and better understanding.
+ sector += TITLE_FRAME;
+
+ memset(DataBuffer, 0, MEMCARD_SECTOR_SIZE);
+
+ if(MemCardReadSector(ptrBlockData, sector) == false)
+ {
+ return false;
+ }
+
+ dprintf("Magic number: '%c' '%c'\n",DataBuffer[0], DataBuffer[1]);
+
+ if(DataBuffer[0] != 'S' || DataBuffer[1] != 'C')
+ {
+ // Invalid magic number.
+ dprintf("Invalid magic number extracted from slot %d, block %d.\n",
+ ptrBlockData->Slot,
+ ptrBlockData->Block);
+
+ return false;
+ }
+
+ /* 02h Icon Display Flag
+ 11h...Icon has 1 frame (static) (same image shown forever)
+ 12h...Icon has 2 frames (animated) (changes every 16 PAL frames)
+ 13h...Icon has 3 frames (animated) (changes every 11 PAL frames)
+ * */
+
+ switch(DataBuffer[2])
+ {
+ case 0x11:
+ ptrBlockData->IconNumber = 1;
+ break;
+
+ case 0x12:
+ ptrBlockData->IconNumber = 2;
+ break;
+
+ case 0x13:
+ ptrBlockData->IconNumber = 3;
+ break;
+
+ default:
+ // Invalid icon display flag! We can't know how many icons
+ // are used.
+ return false;
+ }
+
+ dprintf("Number of icons: %d\n", ptrBlockData->IconNumber);
+
+ // 60h-7Fh Icon 16 Color Palette Data (each entry is 16bit CLUT)
+
+ for(i = 0; i < ptrBlockData->IconNumber; i++)
+ {
+ memcpy(ptrBlockData->CLUT[i],&DataBuffer[0x60], MEMCARD_CLUT_SIZE);
+ }
+
+ return true;
+}
+
+bool MemCardGetIconFrameInfo(TYPE_BLOCK_DATA * ptrBlockData)
+{
+ int initial_sector = ptrBlockData->Block << MEMCARD_SECTORS_PER_BLOCK_BITSHIFT;
+ int sector;
+ unsigned int i;
+ unsigned int j;
+ uint8_t buffer_contents;
+ static TYPE_BLOCK_DATA * ptrReferenceBlock = NULL;
+
+ switch(ptrBlockData->BlockCount)
+ {
+ case EMPTY_BLOCK:
+ // Empty blocks are not of interest. Skip.
+ return true;
+
+ case INTERMEDIATE_BLOCK:
+ case LAST_BLOCK:
+
+ if(ptrReferenceBlock == NULL)
+ {
+ dprintf("No reference memory card block found yet!\n");
+ return false;
+ }
+
+ ptrBlockData->IconNumber = ptrReferenceBlock->IconNumber;
+
+ for(i = 0; i < MEMCARD_NUMBER_OF_ICONS; i++)
+ {
+ memcpy(ptrBlockData->CLUT[i], ptrReferenceBlock->CLUT[i], MEMCARD_CLUT_SIZE);
+ memcpy(ptrBlockData->Icons[i], ptrReferenceBlock->Icons[i], MEMCARD_ICON_SIZE);
+ }
+
+ if(ptrBlockData->BlockCount == LAST_BLOCK)
+ {
+ // Dereference pointer
+ ptrReferenceBlock = NULL;
+ }
+
+ return true;
+ case FIRST_OR_ONLY_BLOCK:
+
+ // Icon Frame(s) (Block 1..15, Frame 1..3) (in first block of file only)
+ for(i = ICON_FRAME_1; i <= ptrBlockData->IconNumber; i++)
+ {
+ dprintf("\tIcon %d out of %d\n",i, ptrBlockData->IconNumber);
+ buffer_contents = 0;
+ sector = initial_sector + i;
+ memset(DataBuffer, 0, MEMCARD_SECTOR_SIZE * sizeof(uint8_t) );
+
+ if(MemCardReadSector(ptrBlockData, sector) == false)
+ {
+ dprintf("Could not read memory sector!\n");
+ return false;
+ }
+
+ memcpy(ptrBlockData->Icons[i - 1 /* ICON_FRAME_# - 1 */], DataBuffer, MEMCARD_SECTOR_SIZE);
+
+ for(j = 0; j < MEMCARD_SECTOR_SIZE; j++)
+ {
+ buffer_contents |= ptrBlockData->Icons[i - 1][j];
+ }
+
+ if(buffer_contents == 0)
+ {
+ // Icon buffer is empty!
+ dprintf("Invalid icon buffer for slot %d, block %d.\n",
+ ptrBlockData->Slot,
+ ptrBlockData->Block);
+
+ return false;
+ }
+ }
+
+ // Use current block as reference if file contains more than one block.
+ ptrReferenceBlock = ptrBlockData;
+
+ return true;
+ }
+
+ dprintf("Unknown error from MemCardGetIconFrameInfo()!\n");
+
+ return false;
+}
+
+bool MemCardUploadToGPU(TYPE_BLOCK_DATA * ptrBlockData)
+{
+ uint8_t i;
+ short x_clut_offset;
+ short y_clut_offset;
+ short x_block_offset;
+ GsImage gs;
+
+ if( (ptrBlockData->IconNumber < 1)
+ ||
+ (ptrBlockData->IconNumber > MEMCARD_NUMBER_OF_ICONS) )
+ {
+ dprintf("Invalid number of icons.\n");
+ return false;
+ }
+
+ for(i = 0; i < ptrBlockData->IconNumber; i++)
+ {
+ gs.pmode = COLORMODE_4BPP;
+ gs.has_clut = 1;
+
+ x_clut_offset = i << 4;
+ y_clut_offset = ptrBlockData->Block - 1;
+
+ gs.clut_x = MEMCARD_BLOCK_CLUT_X + x_clut_offset;
+ gs.clut_y = MEMCARD_BLOCK_CLUT_Y + y_clut_offset + (ptrBlockData->Slot << 4);
+ gs.clut_w = MEMCARD_BLOCK_CLUT_W;
+ gs.clut_h = MEMCARD_BLOCK_CLUT_H;
+
+ dprintf("Gs Clut = {%d,%d,%d,%d}\n",
+ gs.clut_x,
+ gs.clut_y,
+ gs.clut_w,
+ gs.clut_h );
+
+ x_block_offset = MEMCARD_BLOCK_IMAGE_W * (ptrBlockData->Block - 1);
+ x_block_offset *= MEMCARD_BLOCK_MAX_ICONS;
+ x_block_offset >>= MEMCARD_BLOCK_IMAGE_W_BITSHIFT;
+ x_block_offset += i<<MEMCARD_BLOCK_IMAGE_W_BITSHIFT;
+
+ gs.x = MEMCARD_BLOCK_IMAGE_X + x_block_offset;
+ gs.y = MEMCARD_BLOCK_IMAGE_Y + (MEMCARD_BLOCK_IMAGE_H * ptrBlockData->Slot);
+
+ // Dimensions are 16x16 px, but since 4bpp is used, it actually
+ // takes 4x16 px on the framebuffer.
+ gs.w = MEMCARD_BLOCK_IMAGE_W >> MEMCARD_BLOCK_IMAGE_W_BITSHIFT;
+ gs.h = MEMCARD_BLOCK_IMAGE_H;
+
+ gs.clut_data = (uint8_t*)ptrBlockData->CLUT[i];
+ gs.data = (uint8_t*)ptrBlockData->Icons[i];
+
+ GsUploadImage(&gs);
+
+ if(i == 0)
+ {
+ ptrBlockData->IconTPoly.attribute = COLORMODE(COLORMODE_4BPP);
+ ptrBlockData->IconTPoly.tpage = (gs.x / 64) + ((gs.y/256)*16);
+
+ dprintf("\tTPAGE = %d\n", ptrBlockData->IconTPoly.tpage);
+
+ x_block_offset = MEMCARD_BLOCK_IMAGE_W * (ptrBlockData->Block - 1);
+ x_block_offset *= MEMCARD_BLOCK_MAX_ICONS;
+
+ ptrBlockData->IconTPoly.u[0] = MEMCARD_BLOCK_IMAGE_X + x_block_offset;
+ ptrBlockData->IconTPoly.u[1] = ptrBlockData->IconTPoly.u[0] + (gs.w << 2);
+ ptrBlockData->IconTPoly.u[2] = ptrBlockData->IconTPoly.u[0];
+ ptrBlockData->IconTPoly.u[3] = ptrBlockData->IconTPoly.u[1];
+
+ dprintf("\tu = {%d, %d, %d, %d}\n",
+ ptrBlockData->IconTPoly.u[0],
+ ptrBlockData->IconTPoly.u[1],
+ ptrBlockData->IconTPoly.u[2],
+ ptrBlockData->IconTPoly.u[3]);
+
+ ptrBlockData->IconTPoly.v[0] = gs.y % 256;
+ ptrBlockData->IconTPoly.v[1] = ptrBlockData->IconTPoly.v[0];
+ ptrBlockData->IconTPoly.v[2] = (gs.y % 256) + (gs.h);
+ ptrBlockData->IconTPoly.v[3] = ptrBlockData->IconTPoly.v[2];
+
+ dprintf("\tu = {%d, %d, %d, %d}\n",
+ ptrBlockData->IconTPoly.v[0],
+ ptrBlockData->IconTPoly.v[1],
+ ptrBlockData->IconTPoly.v[2],
+ ptrBlockData->IconTPoly.v[3]);
+
+ ptrBlockData->IconTPoly.r = NORMAL_LUMINANCE;
+ ptrBlockData->IconTPoly.g = NORMAL_LUMINANCE;
+ ptrBlockData->IconTPoly.b = NORMAL_LUMINANCE;
+
+ ptrBlockData->IconTPoly.cx = gs.clut_x;
+ ptrBlockData->IconTPoly.cy = gs.clut_y;
+
+ dprintf("\tclut = {%d, %d}\n",
+ ptrBlockData->IconTPoly.cx,
+ ptrBlockData->IconTPoly.cy);
+ }
+ }
+
+ return true;
+}
+
+bool MemCardReadSector(TYPE_BLOCK_DATA * ptrBlockData, int sector)
+{
+ uint8_t result;
+
+ MemCardErrors.Block = ptrBlockData->Block;
+ MemCardErrors.Slot = ptrBlockData->Slot;
+
+ if( (ptrBlockData->Slot != 0)
+ &&
+ (ptrBlockData->Slot != 1) )
+ {
+ MemCardErrors.ErrorByte = 'S';
+
+ dprintf("Incorrect slot %d! Block %d?\n",
+ ptrBlockData->Slot,
+ ptrBlockData->Block);
+
+ return false;
+ }
+
+ if((sector < 0) || (sector > MEMCARD_MAXIMUM_SECTOR))
+ {
+ MemCardErrors.ErrorByte = 'T';
+
+ dprintf("Invalid memory card sector %d. Only values between"
+ " 0 and 511 are allowed!\n", sector);
+ return false;
+ }
+
+ result = McReadSector(ptrBlockData->Slot, sector, DataBuffer);
+
+ // Fill char "MemCardErrors" for further error description.
+ MemCardErrors.ErrorByte = result;
+
+ switch(result)
+ {
+ case '1':
+ case '2':
+ case 'L':
+ case 'M':
+ return false;
+
+ case MEMCARD_INVALID_CHECKSUM:
+ dprintf("Invalid checksum for memory card sector %d"
+ " from block %d, slot %d",
+ sector,
+ ptrBlockData->Block,
+ ptrBlockData->Slot );
+ return false;
+
+ case MEMCARD_BAD_SECTOR:
+ dprintf("Invalid memory card sector %d. Only values between"
+ " 0 and 511 are allowed!\n", sector);
+ return false;
+
+ case MEMCARD_CORRECT_RW:
+ return true;
+
+ default:
+ return false;
+ }
+
+ return true;
+}
+
+bool MemCardGetAllData(void)
+{
+ uint8_t i;
+ uint8_t j;
+
+ PadClearData();
+
+ CurrentReadBlock = 0;
+
+ TotalBlocks = MEMCARD_BLOCKS_PER_CARD * MEMCARD_NUMBER_OF_SLOTS;
+
+ SmallFont.spr.r = 0;
+ SmallFont.spr.g = 0;
+ SmallFont.spr.b = 0;
+
+ GfxSaveDisplayData(&SecondDisplay);
+
+ GfxSetGlobalLuminance(NORMAL_LUMINANCE);
+
+ // ISR_MemCardDataHandling draws a rectangle on top to show
+ // memory card loading progress.
+
+ SetVBlankHandler(&ISR_MemCardDataHandling);
+
+ for(j = SLOT_ONE; j <= SLOT_TWO; j++)
+ {
+ MemCardStatus[j] = McGetStatus(j);
+
+ if(MemCardStatus[j] == MEMCARD_STATUS_UNKNOWN)
+ {
+ // Memcard not connected and/or formatted.
+ continue;
+ }
+
+ for(i = BLOCK_1; i <= BLOCK_15; i++)
+ {
+ ProgressBarXOffset = (short)(CurrentReadBlock *
+ (MEMCARD_PROGRESS_BAR_W /
+ (MEMCARD_BLOCKS_PER_CARD * MEMCARD_NUMBER_OF_SLOTS) ) );
+
+ if(MemCardGetBlockInfo(&MemCardData[i - BLOCK_1][j], j, i) == false)
+ {
+ // Return to normal behaviour if anything fails
+ SetVBlankHandler(&ISR_SystemDefaultVBlank);
+ return false;
+ }
+
+ CurrentReadBlock++;
+ }
+ }
+
+ SetVBlankHandler(&ISR_SystemDefaultVBlank);
+
+ CurrentReadBlock = 0;
+
+ return true;
+}
+
+void MemCardHandler(void)
+{
+ MemCardIconIndexHandler();
+}
+
+void MemCardIconIndexHandler(void)
+{
+ static uint8_t iconTimer = 0;
+
+ if(System100msTick() == true)
+ {
+ if(++iconTimer >= MEMCARD_ICON_INDEX_TIME)
+ {
+ iconTimer = 0;
+
+ if(++IconIndex >= MEMCARD_NUMBER_OF_ICONS)
+ {
+ IconIndex = 0;
+ }
+ }
+ }
+}
+
+void MemCardDrawIcon(TYPE_BLOCK_DATA * ptrBlockData, short x, short y)
+{
+ uint8_t i;
+ // Auxiliar variable to keep original data
+ short orig_u[4];
+ short orig_clut_x;
+ static bool first_access = true;
+
+ if(ptrBlockData->BlockCount == EMPTY_BLOCK)
+ {
+ return;
+ }
+
+ ptrBlockData->IconTPoly.x[0] = x;
+ ptrBlockData->IconTPoly.x[1] = x + MEMCARD_BLOCK_IMAGE_W;
+ ptrBlockData->IconTPoly.x[2] = x;
+ ptrBlockData->IconTPoly.x[3] = ptrBlockData->IconTPoly.x[1];
+
+ ptrBlockData->IconTPoly.y[0] = y;
+ ptrBlockData->IconTPoly.y[1] = ptrBlockData->IconTPoly.y[0];
+ ptrBlockData->IconTPoly.y[2] = y + MEMCARD_BLOCK_IMAGE_H;
+ ptrBlockData->IconTPoly.y[3] = ptrBlockData->IconTPoly.y[2];
+
+ for(i = 0; i < 4; i++)
+ {
+ orig_u[i] = ptrBlockData->IconTPoly.u[i];
+ }
+
+ orig_clut_x = ptrBlockData->IconTPoly.cx;
+
+ if(ptrBlockData->IconNumber >= IconIndex)
+ {
+ ptrBlockData->IconTPoly.u[0] += MEMCARD_BLOCK_IMAGE_W * IconIndex;
+ ptrBlockData->IconTPoly.u[1] = ptrBlockData->IconTPoly.u[0] + MEMCARD_BLOCK_IMAGE_W;
+ ptrBlockData->IconTPoly.u[2] = ptrBlockData->IconTPoly.u[0];
+ ptrBlockData->IconTPoly.u[3] = ptrBlockData->IconTPoly.u[1];
+
+ ptrBlockData->IconTPoly.cx += IconIndex * MEMCARD_BLOCK_CLUT_W;
+ }
+
+ if(first_access == true)
+ {
+ if(IconIndex == 0)
+ {
+ first_access = false;
+
+ dprintf("Icon index: %d\n",IconIndex);
+
+ dprintf("\tU = {%d,%d,%d,%d}\n",
+ ptrBlockData->IconTPoly.u[0],
+ ptrBlockData->IconTPoly.u[1],
+ ptrBlockData->IconTPoly.u[2],
+ ptrBlockData->IconTPoly.u[3]);
+
+
+ dprintf("\tV = {%d,%d,%d,%d}\n",
+ ptrBlockData->IconTPoly.v[0],
+ ptrBlockData->IconTPoly.v[1],
+ ptrBlockData->IconTPoly.v[2],
+ ptrBlockData->IconTPoly.v[3]);
+
+ dprintf("\tBlock number: %d\n",ptrBlockData->Block);
+
+ dprintf("\tBlock count: %d\n",ptrBlockData->BlockCount);
+
+ dprintf("\tX = {%d,%d,%d,%d}\n",
+ ptrBlockData->IconTPoly.x[0],
+ ptrBlockData->IconTPoly.x[1],
+ ptrBlockData->IconTPoly.x[2],
+ ptrBlockData->IconTPoly.x[3]);
+
+ dprintf("\tY = {%d,%d,%d,%d}\n",
+ ptrBlockData->IconTPoly.y[0],
+ ptrBlockData->IconTPoly.y[1],
+ ptrBlockData->IconTPoly.y[2],
+ ptrBlockData->IconTPoly.y[3]);
+
+ dprintf("\tTPAGE = %d\n", ptrBlockData->IconTPoly.tpage);
+ dprintf("\tCLUT = {%d, %d}\n",
+ ptrBlockData->IconTPoly.cx,
+ ptrBlockData->IconTPoly.cy);
+ }
+ }
+
+ GsSortTPoly4(&ptrBlockData->IconTPoly);
+
+ for(i = 0; i < 4; i++)
+ {
+ ptrBlockData->IconTPoly.u[i] = orig_u[i]; // Restore data
+ }
+
+ ptrBlockData->IconTPoly.cx = orig_clut_x;
+}
+
+TYPE_BLOCK_DATA * MemCardShowMap(void)
+{
+ uint8_t i;
+ uint8_t j;
+ uint8_t selectedBlock = BLOCK_1;
+ uint8_t selectedSlot = SLOT_ONE;
+ TYPE_BLOCK_DATA * ptrBlockData;
+ GsRectangle emptyBlockRect;
+ short x;
+ short y;
+ unsigned char orig_r;
+ unsigned char orig_g;
+ unsigned char orig_b;
+ GsRectangle MemCardMapDialog;
+
+ if(MemCardGetAllData() == false)
+ {
+ return false;
+ }
+
+ bzero((GsRectangle*)&MemCardMapDialog, sizeof(GsRectangle));
+ bzero((GsRectangle*)&emptyBlockRect, sizeof(GsRectangle));
+
+ emptyBlockRect.attribute |= ENABLE_TRANS | TRANS_MODE(1);
+
+ MemCardMapDialog.x = MEMCARD_DIALOG_X;
+ MemCardMapDialog.y = MEMCARD_DIALOG_Y;
+ MemCardMapDialog.w = MEMCARD_DIALOG_W;
+ MemCardMapDialog.h = MEMCARD_DIALOG_H;
+
+ MemCardMapDialog.r = MEMCARD_DIALOG_R;
+ MemCardMapDialog.g = MEMCARD_DIALOG_G;
+ MemCardMapDialog.b = MEMCARD_DIALOG_B;
+
+ MemCardMapDialog.attribute |= ENABLE_TRANS | TRANS_MODE(0);
+
+ GfxSetGlobalLuminance(NORMAL_LUMINANCE);
+
+ while(1)
+ {
+ if(PadOneKeyReleased(PAD_TRIANGLE) == true)
+ {
+ break;
+ }
+ else if(PadOneKeyReleased(PAD_CROSS) == true)
+ {
+ return &MemCardData[selectedBlock - BLOCK_1][selectedSlot];
+ }
+ else if(PadOneKeyReleased(PAD_LEFT) == true)
+ {
+ if(selectedSlot == SLOT_TWO)
+ {
+ selectedSlot = SLOT_ONE;
+ }
+ }
+ else if(PadOneKeyReleased(PAD_RIGHT) == true)
+ {
+ if(selectedSlot == SLOT_ONE)
+ {
+ selectedSlot = SLOT_TWO;
+ }
+ }
+ else if(PadOneKeyReleased(PAD_UP) == true)
+ {
+ if(selectedBlock > BLOCK_1)
+ {
+ selectedBlock--;
+ }
+ }
+ else if(PadOneKeyReleased(PAD_DOWN) == true)
+ {
+ if(selectedBlock < BLOCK_15)
+ {
+ selectedBlock++;
+ }
+ }
+
+ // Dim background
+ SecondDisplay.r = NORMAL_LUMINANCE >> 1;
+ SecondDisplay.g = NORMAL_LUMINANCE >> 1;
+ SecondDisplay.b = NORMAL_LUMINANCE >> 1;
+
+ GfxSortSprite(&SecondDisplay);
+
+ GsSortRectangle(&MemCardMapDialog);
+
+ for(j = SLOT_ONE; j <= SLOT_TWO; j++)
+ {
+ if(MemCardStatus[j] == MEMCARD_STATUS_UNKNOWN)
+ {
+ FontSetFlags(&SmallFont, FONT_NOFLAGS);
+
+ x = MEMCARD_DIALOG_X;
+ x += MEMCARD_DIALOG_GAP_SLOT * j;
+
+ y = MEMCARD_DIALOG_Y;
+ y += (short)(MEMCARD_DIALOG_GAP_X << 1);
+ y += MEMCARD_DIALOG_GAP_X;
+
+ x += MEMCARD_DIALOG_GAP_X;
+
+ FontPrintText( &SmallFont,
+ x,
+ y,
+ "Disconnected" );
+ continue;
+ }
+
+ for(i = BLOCK_1; i <= BLOCK_15; i++)
+ {
+ ptrBlockData = &MemCardData[i - BLOCK_1][j];
+
+ x = MEMCARD_DIALOG_X;
+ x += MEMCARD_DIALOG_GAP_SLOT * j;
+ x += ( (i - BLOCK_1) % 3) * MEMCARD_DIALOG_GAP_X;
+ x += MEMCARD_DIALOG_GAP_X;
+
+ y = MEMCARD_DIALOG_Y;
+ y += (short)(MEMCARD_DIALOG_GAP_X * ((i - BLOCK_1) / 3));
+ y += MEMCARD_DIALOG_GAP_X;
+
+ if(ptrBlockData->BlockCount == EMPTY_BLOCK)
+ {
+ emptyBlockRect.x = x;
+ emptyBlockRect.y = y;
+ emptyBlockRect.w = MEMCARD_BLOCK_IMAGE_W;
+ emptyBlockRect.h = MEMCARD_BLOCK_IMAGE_H;
+
+ if( (i == selectedBlock) && (j == selectedSlot) )
+ {
+ emptyBlockRect.r = FULL_LUMINANCE;
+ emptyBlockRect.g = FULL_LUMINANCE;
+ emptyBlockRect.b = FULL_LUMINANCE;
+
+ FontSetFlags(&SmallFont, FONT_NOFLAGS);
+
+ FontPrintText( &SmallFont,
+ MEMCARD_LOAD_DATA_TEXT_X,
+ MEMCARD_LOAD_DATA_TEXT_Y,
+ "Empty block" );
+ }
+ else
+ {
+ emptyBlockRect.r = NORMAL_LUMINANCE >> 1;
+ emptyBlockRect.g = NORMAL_LUMINANCE >> 1;
+ emptyBlockRect.b = NORMAL_LUMINANCE >> 1;
+ }
+
+ GsSortRectangle(&emptyBlockRect);
+
+ continue;
+ }
+
+ orig_r = ptrBlockData->IconTPoly.r;
+ orig_g = ptrBlockData->IconTPoly.g;
+ orig_b = ptrBlockData->IconTPoly.b;
+
+ if( (i == selectedBlock) && (j == selectedSlot) )
+ {
+ ptrBlockData->IconTPoly.r = FULL_LUMINANCE;
+ ptrBlockData->IconTPoly.g = FULL_LUMINANCE;
+ ptrBlockData->IconTPoly.b = FULL_LUMINANCE;
+
+ if(ptrBlockData->BlockCount == FIRST_OR_ONLY_BLOCK)
+ {
+ FontPrintText( &SmallFont,
+ MEMCARD_LOAD_DATA_TEXT_X,
+ MEMCARD_LOAD_DATA_TEXT_Y,
+ (char*)ptrBlockData->FileName );
+ }
+ else if(ptrBlockData->BlockCount == INTERMEDIATE_BLOCK)
+ {
+ FontPrintText( &SmallFont,
+ MEMCARD_LOAD_DATA_TEXT_X,
+ MEMCARD_LOAD_DATA_TEXT_Y,
+ "Intermediate block" );
+ }
+ else if(ptrBlockData->BlockCount == LAST_BLOCK)
+ {
+ FontPrintText( &SmallFont,
+ MEMCARD_LOAD_DATA_TEXT_X,
+ MEMCARD_LOAD_DATA_TEXT_Y,
+ "Last block" );
+ }
+ }
+ else
+ {
+ ptrBlockData->IconTPoly.r = NORMAL_LUMINANCE >> 1;
+ ptrBlockData->IconTPoly.g = NORMAL_LUMINANCE >> 1;
+ ptrBlockData->IconTPoly.b = NORMAL_LUMINANCE >> 1;
+ }
+
+ MemCardDrawIcon(ptrBlockData, x, y);
+
+ ptrBlockData->IconTPoly.r = orig_r;
+ ptrBlockData->IconTPoly.g = orig_g;
+ ptrBlockData->IconTPoly.b = orig_b;
+ }
+ }
+
+ GfxDrawScene_Slow();
+ }
+
+ return NULL;
+}
+
+bool MemCardSaveData(TYPE_BLOCK_DATA * ptrBlockData)
+{
+ uint32_t i;
+ uint32_t sz;
+ int sector = (ptrBlockData->Block << MEMCARD_SECTORS_PER_BLOCK_BITSHIFT) + DATA_FRAME;
+
+ // Always check whether current block is empty or not
+
+ if(ptrBlockData->BlockCount != EMPTY_BLOCK)
+ {
+ if(strncmp((char*)ptrBlockData->FileName, MEMCARD_GAME_FILENAME, MEMCARD_FILENAME_SIZE) != 0)
+ {
+ // Only our own blocks can be overwritten. NEVER overwrite other game blocks!
+ dprintf("I cannot erase blocks from other games!\n");
+ return false;
+ }
+ }
+ else if(ptrBlockData->BlockCount != FIRST_OR_ONLY_BLOCK)
+ {
+ dprintf("Please select first block of block array.\n");
+ return false;
+ }
+ else if(ptrBlockData->Data == NULL)
+ {
+ dprintf("No data on current block!\n");
+ return false;
+ }
+ else if(ptrBlockData->Block == DIRECTORY_BLOCK)
+ {
+ dprintf("Invalid block selected!\n");
+ return false;
+ }
+
+ // After all these checks, now we can save data!
+
+ sz = MEMCARD_FIRST_OR_LAST_DATA_SIZE;
+
+ for(i = 0; i < sz; i++)
+ {
+ McWriteSector(ptrBlockData->Slot, sector + i, &ptrBlockData->Data[i << 7 /* 128 */]);
+ }
+
+ return true;
+}
diff --git a/Source/MemCard.h b/Source/MemCard.h new file mode 100755 index 0000000..a7ddcf8 --- /dev/null +++ b/Source/MemCard.h @@ -0,0 +1,150 @@ +#ifndef __MEMCARD_HEADER__
+#define __MEMCARD_HEADER__
+
+/* *************************************
+ * Includes
+ * *************************************/
+
+#include "Global_Inc.h"
+#include "System.h"
+#include "Pad.h"
+#include "Font.h"
+
+/* *************************************
+ * Defines
+ * *************************************/
+
+/* The memory is split into 16 blocks (of 8 Kbytes each), and each block
+ * is split into 64 sectors (of 128 bytes each). The first block is used
+ * as Directory, the remaining 15 blocks are containing Files, each
+ * file can occupy one or more blocks. */
+
+#define MEMCARD_BLOCKS_PER_CARD 15
+#define MEMCARD_NUMBER_OF_SLOTS 2
+#define MEMCARD_FILENAME_SIZE 21
+#define MEMCARD_NUMBER_OF_ICONS 3
+#define MEMCARD_ICON_SIZE 0x80
+#define MEMCARD_DATA_SIZE 0x80
+#define MEMCARD_CLUT_SIZE 32
+#define MEMCARD_GAME_FILENAME (char*)"XAVI18-18215AIRPORT"
+#define MEMCARD_FIRST_OR_LAST_DATA_SIZE 0x1E00
+#define MEMCARD_INTERMEDIATE_OR_LAST_DATA_SIZE 0x2000
+
+/* *************************************
+ * Structs and enums
+ * *************************************/
+
+typedef enum t_CardBlock
+{
+ SLOT_ONE = 0,
+ SLOT_TWO
+}MEMCARD_SLOTS;
+
+typedef enum t_MCBlocks
+{
+ DIRECTORY_BLOCK = 0,
+ BLOCK_1,
+ BLOCK_2,
+ BLOCK_3,
+ BLOCK_4,
+ BLOCK_5,
+ BLOCK_6,
+ BLOCK_7,
+ BLOCK_8,
+ BLOCK_9,
+ BLOCK_10,
+ BLOCK_11,
+ BLOCK_12,
+ BLOCK_13,
+ BLOCK_14,
+ BLOCK_15,
+}MEMCARD_BLOCKS;
+
+typedef enum t_BlockCount
+{
+ EMPTY_BLOCK = 0,
+ FIRST_OR_ONLY_BLOCK,
+ INTERMEDIATE_BLOCK,
+ LAST_BLOCK
+}MEMCARD_BLOCK_COUNT;
+
+typedef struct t_MemCard
+{
+ MEMCARD_SLOTS Slot;
+ MEMCARD_BLOCKS Block;
+ uint8_t IconNumber; // Possible values : 1 ... 3
+ uint8_t FileName[MEMCARD_FILENAME_SIZE];
+ MEMCARD_BLOCK_COUNT BlockCount; // Look at MEMCARD_BLOCK_COUNT enum
+
+ /*
+ * The first some letters of the filename should indicate the game
+ * to which the file belongs, in case of commercial games this is
+ * conventionally done like so: Two character region code:
+ * "BI"=Japan, "BE"=Europe, "BA"=America
+ * followed by 10 character game code,
+ * in "AAAA-NNNNN" form
+ *
+ * Where the "AAAA" part does imply the region too;
+ * (SLPS/SCPS=Japan, SLUS/SCUS=America, SLES/SCES=Europe)
+ * (SCxS=Made by Sony, SLxS=Licensed by Sony),
+ * followed by up to 8 characters, "abcdefgh"
+ *
+ * (which may identify the file if the game uses multiple files;
+ * this part often contains a random string which seems to be
+ * allowed to contain any chars in range of 20h..7Fh, of course it
+ * shouldn't contain "?" and "*" wildcards).*/
+
+ uint8_t Icons[MEMCARD_NUMBER_OF_ICONS][MEMCARD_ICON_SIZE];
+ uint8_t CLUT[MEMCARD_NUMBER_OF_ICONS][MEMCARD_CLUT_SIZE];
+ uint8_t * Data; // Buffer pointed to by "Data" must be 128 KB or higher!
+ GsTPoly4 IconTPoly;
+}TYPE_BLOCK_DATA;
+
+/* *************************************
+ * Global prototypes
+ * *************************************/
+
+// Inits default values for memory card blocks
+void MemCardInit(void);
+
+// Sets null values to structure pointed to by ptrBlockData.
+void MemCardResetBlockData(TYPE_BLOCK_DATA * ptrBlockData);
+
+// Loads data from all blocks for both slots. Internally, it just calls
+// MemCardGetBlockInfo multiple times and returns its result.
+// All data gets saved into MemCardData (defined below).
+bool MemCardGetAllData(void);
+
+// Fills TYPE_BLOCK_DATA structure with basic info and icons from specific block.
+// Take into account MemCardResetBlockData is automatically called first
+// to flush previous data.
+// If ptrBlockData->IconTPoly != NULL, MemCardUploadToGPU() is called.
+bool MemCardGetBlockInfo( TYPE_BLOCK_DATA * ptrBlockData,
+ MEMCARD_SLOTS slot,
+ MEMCARD_BLOCKS blockNumber );
+
+// Uploads block graphical data to GPU.
+bool MemCardUploadToGPU(TYPE_BLOCK_DATA * ptrBlockData);
+
+// To be called on every frame update (it modifies internal data)
+void MemCardHandler(void);
+
+// Reportedly, it draws icon data from a specified memory card block.
+// If current block is on the middle of a file, block containing icon data
+// is automatically searched when MemCardGetBlockInfo() is called.
+void MemCardDrawIcon(TYPE_BLOCK_DATA * ptrBlockData, short x, short y);
+
+// Loads all memory card data and shows a dialog with all icons and
+// file names.
+TYPE_BLOCK_DATA * MemCardShowMap(void);
+
+// Reportedly, saves data to memory card given input block data.
+bool MemCardSaveData(TYPE_BLOCK_DATA * ptrBlockData);
+
+/* *************************************
+ * Global variables
+ * *************************************/
+
+extern TYPE_BLOCK_DATA MemCardData[MEMCARD_BLOCKS_PER_CARD][MEMCARD_NUMBER_OF_SLOTS];
+
+#endif //__MEMCARD_HEADER__
diff --git a/Source/Menu.c b/Source/Menu.c new file mode 100755 index 0000000..411c276 --- /dev/null +++ b/Source/Menu.c @@ -0,0 +1,492 @@ +/* ************************************** + * Includes * + * *************************************/ + +#include "Menu.h" + +/* ************************************** + * Defines * + * *************************************/ + +#define MAIN_MENU_FILES 1 +#define BUTTON_SIZE 64 +#define SELECTED_BUTTON_LUMINANCE 0xC0 + +/* ************************************** + * Structs and enums * + * *************************************/ + +typedef enum +{ + PLAY_OPTIONS_LEVEL = 0, + ONE_TWO_PLAYERS_LEVEL +}MainMenuLevel; + +enum +{ + MAIN_MENU_PLAY_OPTIONS_LEVEL_BUTTONS = 2, + MAIN_MENU_ONE_TWO_PLAYERS_LEVEL_BUTTONS = 2 +}; + +typedef enum +{ + PLAY_BUTTON_INDEX = 0, + OPTIONS_BUTTON_INDEX, + ONE_PLAYER_BUTTON_INDEX, + TWO_PLAYER_BUTTON_INDEX, + + MAIN_MENU_BUTTONS_MAX +}MMBtn_Index; + +enum +{ + MAIN_MENU_PLAY_BUTTON_X = 92, + MAIN_MENU_PLAY_BUTTON_Y = 92, + + MAIN_MENU_OPTIONS_BUTTON_X = 225, + MAIN_MENU_OPTIONS_BUTTON_Y = 92, + + MAIN_MENU_ONE_PLAYER_BUTTON_X = 92, + MAIN_MENU_ONE_PLAYER_BUTTON_Y = 92, + + MAIN_MENU_TWO_PLAYER_BUTTON_X = 225, + MAIN_MENU_TWO_PLAYER_BUTTON_Y = 92 +}; + +typedef enum +{ + PLAY_BUTTON_U_OFFSET = 0, + PLAY_BUTTON_Y_OFFSET = 64, + + ONE_PLAYER_BUTTON_U_OFFSET = 128, + ONE_PLAYER_BUTTON_Y_OFFSET = 64, + + OPTIONS_BUTTON_U_OFFSET = 64, + OPTIONS_BUTTON_Y_OFFSET = 64, + + TWO_PLAYER_BUTTON_U_OFFSET = 192, + TWO_PLAYER_BUTTON_Y_OFFSET = 64, + + DEFAULT_BUTTON_U_OFFSET = 0, + DEFAULT_BUTTON_V_OFFSET = 128 + +}MMBtn_Offset; + +#pragma pack(1) +typedef struct +{ + MMBtn_Offset offset_u; + MMBtn_Offset offset_v; + + // Timer for absolute, sine-like animation + short timer; + + // Pointer to function executed by pressing the button + void (*f)(); + + MMBtn_Index i; + + bool selected; + bool was_selected; + +}TYPE_MMBtn; +#pragma pack() + +/* ************************************** + * Local prototypes * + * **************************************/ + +static void MainMenuDrawButton(TYPE_MMBtn * btn); +static void PlayMenu(void); +static void OptionsMenu(void); +static void OnePlayerMenu(void); +static void TwoPlayerMenu(void); +static void MainMenuButtonHandler(void); +static void MainMenuRestoreInitValues(void); +static void MenuTestCheat(void); + +/* ************************************** + * Local variables * + * **************************************/ + +static GsSprite MenuSpr; +static SsVag BellSnd; +static SsVag AcceptSnd; +static TYPE_CHEAT TestCheat; +static TYPE_CHEAT StackCheckCheat; + +static char * MainMenuFiles[] = { "cdrom:\\DATA\\SPRITES\\MAINMENU.TIM;1" , + "cdrom:\\DATA\\SOUNDS\\BELL.VAG;1" , + "cdrom:\\DATA\\SOUNDS\\ACCEPT.VAG;1" , + "cdrom:\\DATA\\SPRITES\\PSXDISK.TIM;1" , + "cdrom:\\DATA\\SPRITES\\INTROFNT.TIM;1" , + "cdrom:\\DATA\\SPRITES\\BUTTONS.TIM;1" , + "cdrom:\\DATA\\SPRITES\\GPL.TIM;1" , + "cdrom:\\DATA\\SPRITES\\OPENSRC.TIM;1" , + "cdrom:\\DATA\\SOUNDS\\TRAYCL.VAG;1" , + "cdrom:\\DATA\\SOUNDS\\SPINDISK.VAG;1" }; + +static void * MainMenuDest[] = { (GsSprite*)&MenuSpr , + (SsVag*)&BellSnd , + (SsVag*)&AcceptSnd , + (GsSprite*)&PsxDisk , + (GsSprite*)&PSXSDKIntroFont , + (GsSprite*)&PSXButtons , + (GsSprite*)&GPL_Logo , + (GsSprite*)&OpenSource_Logo , + (SsVag*)&TrayClSnd , + (SsVag*)&SpinDiskSnd }; + +static TYPE_MMBtn MainMenuBtn[MAIN_MENU_BUTTONS_MAX]; +static MainMenuLevel menuLevel; +static MMBtn_Index MainMenuMinimumBtn; + +void PlayMenu(void) +{ + menuLevel = ONE_TWO_PLAYERS_LEVEL; + MainMenuMinimumBtn = ONE_PLAYER_BUTTON_INDEX; + + MainMenuBtn[PLAY_BUTTON_INDEX].selected = false; + MainMenuBtn[PLAY_BUTTON_INDEX].was_selected = false; + MainMenuBtn[PLAY_BUTTON_INDEX].timer = 0; + + MainMenuBtn[OPTIONS_BUTTON_INDEX].selected = false; + MainMenuBtn[OPTIONS_BUTTON_INDEX].was_selected = false; + MainMenuBtn[OPTIONS_BUTTON_INDEX].timer = 0; + + MainMenuBtn[ONE_PLAYER_BUTTON_INDEX].selected = true; + MainMenuBtn[ONE_PLAYER_BUTTON_INDEX].was_selected = false; + MainMenuBtn[ONE_PLAYER_BUTTON_INDEX].timer = 0; + + MainMenuBtn[TWO_PLAYER_BUTTON_INDEX].selected = false; + MainMenuBtn[TWO_PLAYER_BUTTON_INDEX].was_selected = false; + MainMenuBtn[TWO_PLAYER_BUTTON_INDEX].timer = 0; +} + +void OptionsMenu(void) +{ + dprintf("OptionsMenu(void)!\n"); +} + +void OnePlayerMenu(void) +{ + EndAnimation(); + Game(false /* One Player Only */); +} + +void TwoPlayerMenu(void) +{ + EndAnimation(); + Game(true /* Two players */); +} + + +void MainMenuInit(void) +{ + LoadMenu( MainMenuFiles,MainMenuDest, + sizeof(MainMenuFiles) / sizeof(char*) , + sizeof(MainMenuDest) / sizeof(void*) ); + + MainMenuBtn[PLAY_BUTTON_INDEX].offset_u = PLAY_BUTTON_U_OFFSET; + MainMenuBtn[PLAY_BUTTON_INDEX].offset_v = PLAY_BUTTON_Y_OFFSET; + MainMenuBtn[PLAY_BUTTON_INDEX].timer = 0; + MainMenuBtn[PLAY_BUTTON_INDEX].f = &PlayMenu; + MainMenuBtn[PLAY_BUTTON_INDEX].i = PLAY_BUTTON_INDEX; + + MainMenuBtn[OPTIONS_BUTTON_INDEX].offset_u = OPTIONS_BUTTON_U_OFFSET; + MainMenuBtn[OPTIONS_BUTTON_INDEX].offset_v = OPTIONS_BUTTON_Y_OFFSET; + MainMenuBtn[OPTIONS_BUTTON_INDEX].timer = 0; + MainMenuBtn[OPTIONS_BUTTON_INDEX].f = &OptionsMenu; + MainMenuBtn[OPTIONS_BUTTON_INDEX].i = OPTIONS_BUTTON_INDEX; + + MainMenuBtn[ONE_PLAYER_BUTTON_INDEX].offset_u = ONE_PLAYER_BUTTON_U_OFFSET; + MainMenuBtn[ONE_PLAYER_BUTTON_INDEX].offset_v = ONE_PLAYER_BUTTON_Y_OFFSET; + MainMenuBtn[ONE_PLAYER_BUTTON_INDEX].timer = 0; + MainMenuBtn[ONE_PLAYER_BUTTON_INDEX].f = &OnePlayerMenu; + MainMenuBtn[ONE_PLAYER_BUTTON_INDEX].i = ONE_PLAYER_BUTTON_INDEX; + + MainMenuBtn[TWO_PLAYER_BUTTON_INDEX].offset_u = TWO_PLAYER_BUTTON_U_OFFSET; + MainMenuBtn[TWO_PLAYER_BUTTON_INDEX].offset_v = TWO_PLAYER_BUTTON_Y_OFFSET; + MainMenuBtn[TWO_PLAYER_BUTTON_INDEX].timer = 0; + MainMenuBtn[TWO_PLAYER_BUTTON_INDEX].f = &TwoPlayerMenu; + MainMenuBtn[TWO_PLAYER_BUTTON_INDEX].i = TWO_PLAYER_BUTTON_INDEX; + + menuLevel = PLAY_OPTIONS_LEVEL; + + MainMenuMinimumBtn = PLAY_BUTTON_INDEX; + + TestCheat.Callback = &MenuTestCheat; + memset(TestCheat.Combination,0,CHEAT_ARRAY_SIZE); + //memcpy(myarray, (int [5]){a,b,c,d,e}, 5*sizeof(int)); + + memcpy( TestCheat.Combination, + (unsigned short[CHEAT_ARRAY_SIZE]) + { PAD_CIRCLE, PAD_CIRCLE, PAD_CROSS, PAD_TRIANGLE, + PAD_TRIANGLE, PAD_TRIANGLE, 0 , 0 , + 0, 0, 0, 0, + 0, 0, 0, 0 } , sizeof(unsigned short) * CHEAT_ARRAY_SIZE); + + PadAddCheat(&TestCheat); + + StackCheckCheat.Callback = &SystemPrintStackPointerAddress; + memset(StackCheckCheat.Combination, 0, CHEAT_ARRAY_SIZE); + + memcpy( StackCheckCheat.Combination, + (unsigned short[CHEAT_ARRAY_SIZE]) + { PAD_TRIANGLE, PAD_TRIANGLE, PAD_CROSS, PAD_TRIANGLE, + PAD_L1, PAD_R1, 0 , 0 , + 0, 0, 0, 0, + 0, 0, 0, 0 } , sizeof(unsigned short) * CHEAT_ARRAY_SIZE); + + PadAddCheat(&StackCheckCheat); + + LoadMenuEnd(); +} + +void MainMenu(void) +{ + + MainMenuInit(); + + #ifndef NO_INTRO + PSXSDKIntro(); + #endif //PSXSDK_DEBUG + + while(1) + { + MainMenuButtonHandler(); + + switch(menuLevel) + { + case PLAY_OPTIONS_LEVEL: + while(SystemDMAReady() == false); + + GsSortCls(0,0,40); + MainMenuDrawButton(&MainMenuBtn[PLAY_BUTTON_INDEX]); + MainMenuDrawButton(&MainMenuBtn[OPTIONS_BUTTON_INDEX]); + + GfxDrawScene(); + break; + + case ONE_TWO_PLAYERS_LEVEL: + while(SystemDMAReady() == false); + + GsSortCls(0,0,40); + MainMenuDrawButton(&MainMenuBtn[ONE_PLAYER_BUTTON_INDEX]); + MainMenuDrawButton(&MainMenuBtn[TWO_PLAYER_BUTTON_INDEX]); + GfxDrawScene(); + break; + + default: + break; + } + } + +} + +void MainMenuRestoreInitValues(void) +{ + menuLevel = PLAY_OPTIONS_LEVEL; + MainMenuMinimumBtn = PLAY_BUTTON_INDEX; + + MainMenuBtn[PLAY_BUTTON_INDEX].selected = true; + MainMenuBtn[PLAY_BUTTON_INDEX].was_selected = false; + MainMenuBtn[PLAY_BUTTON_INDEX].timer = 0; + + MainMenuBtn[OPTIONS_BUTTON_INDEX].selected = false; + MainMenuBtn[OPTIONS_BUTTON_INDEX].was_selected = false; + MainMenuBtn[OPTIONS_BUTTON_INDEX].timer = 0; + + MainMenuBtn[ONE_PLAYER_BUTTON_INDEX].selected = false; + MainMenuBtn[ONE_PLAYER_BUTTON_INDEX].was_selected = false; + MainMenuBtn[ONE_PLAYER_BUTTON_INDEX].timer = 0; + + MainMenuBtn[TWO_PLAYER_BUTTON_INDEX].selected = false; + MainMenuBtn[TWO_PLAYER_BUTTON_INDEX].was_selected = false; + MainMenuBtn[TWO_PLAYER_BUTTON_INDEX].timer = 0; +} + +void MainMenuButtonHandler(void) +{ + static uint8_t btn_selected = PLAY_BUTTON_INDEX; + static uint8_t previous_btn_selected = 0; + uint8_t max_buttons; + + if(PadOneAnyKeyPressed() == true) + { + if(SystemIsRandSeedSet() == false) + { + SystemSetRandSeed(); + } + } + + if( (PadOneKeyReleased(PAD_CROSS) == true) + || + (PadOneKeyReleased(PAD_TRIANGLE) == true) ) + { + SfxPlaySound(&AcceptSnd); + } + + switch(menuLevel) + { + case PLAY_OPTIONS_LEVEL: + max_buttons = MAIN_MENU_PLAY_OPTIONS_LEVEL_BUTTONS; + break; + + case ONE_TWO_PLAYERS_LEVEL: + max_buttons = MAIN_MENU_ONE_TWO_PLAYERS_LEVEL_BUTTONS; + if(PadOneKeyReleased(PAD_TRIANGLE) == true) + { + menuLevel = PLAY_OPTIONS_LEVEL; + MainMenuMinimumBtn = PLAY_BUTTON_INDEX; + btn_selected = PLAY_BUTTON_INDEX; + } + break; + + default: + max_buttons = 0; + break; + } + + MainMenuBtn[previous_btn_selected].was_selected = MainMenuBtn[previous_btn_selected].selected; + MainMenuBtn[btn_selected].was_selected = MainMenuBtn[btn_selected].selected; + + if(PadOneKeyReleased(PAD_LEFT) && (btn_selected > 0) ) + { + MainMenuBtn[btn_selected].selected = false; + previous_btn_selected = btn_selected; + btn_selected--; + SfxPlaySound(&BellSnd); + } + else if(PadOneKeyReleased(PAD_RIGHT) + && + (btn_selected < (max_buttons - 1 + MainMenuMinimumBtn) ) ) + { + MainMenuBtn[btn_selected].selected = false; + previous_btn_selected = btn_selected; + btn_selected++; + SfxPlaySound(&BellSnd); + } + + if(btn_selected < MainMenuMinimumBtn) + { + btn_selected = MainMenuMinimumBtn; + } + + if(btn_selected > (max_buttons - 1 + MainMenuMinimumBtn) ) + { + // Avoid overflow when going back in menu navigation + btn_selected = (max_buttons - 1 + MainMenuMinimumBtn); + } + + if(PadOneKeyReleased(PAD_CROSS) ) + { + if(menuLevel == ONE_TWO_PLAYERS_LEVEL) + { + MainMenuBtn[btn_selected].f(); + // Once gameplay has finished, turn back to first level + MainMenuRestoreInitValues(); + btn_selected = PLAY_BUTTON_INDEX; + } + else + { + MainMenuBtn[btn_selected].f(); + } + + + + if(menuLevel == ONE_TWO_PLAYERS_LEVEL) + { + btn_selected = PLAY_BUTTON_INDEX; + } + + } + + MainMenuBtn[btn_selected].selected = true; + + +} + +void MainMenuDrawButton(TYPE_MMBtn * btn) +{ + MenuSpr.w = BUTTON_SIZE; + MenuSpr.h = BUTTON_SIZE; + + if(btn->timer < MAIN_MENU_BTN_ANI_SIZE) + { + btn->timer++; + } + + if(btn->selected == true) + { + if(btn->was_selected == false) + { + btn->timer = 0; + } + + MenuSpr.r = SELECTED_BUTTON_LUMINANCE; + MenuSpr.g = SELECTED_BUTTON_LUMINANCE; + MenuSpr.b = SELECTED_BUTTON_LUMINANCE; + } + else + { + MenuSpr.r = NORMAL_LUMINANCE; + MenuSpr.g = NORMAL_LUMINANCE; + MenuSpr.b = NORMAL_LUMINANCE; + } + + MenuSpr.u = DEFAULT_BUTTON_U_OFFSET; + MenuSpr.v = DEFAULT_BUTTON_V_OFFSET; + + switch(btn->i) + { + case PLAY_BUTTON_INDEX: + MenuSpr.x = MAIN_MENU_PLAY_BUTTON_X; + MenuSpr.y = MAIN_MENU_PLAY_BUTTON_Y - MainMenuBtnAni[btn->timer]; + MenuSpr.u += btn->offset_u; + MenuSpr.v += btn->offset_v; + + GsSortSprite(&MenuSpr); + break; + + case OPTIONS_BUTTON_INDEX: + MenuSpr.x = MAIN_MENU_OPTIONS_BUTTON_X; + MenuSpr.y = MAIN_MENU_OPTIONS_BUTTON_Y - MainMenuBtnAni[btn->timer]; + MenuSpr.u += btn->offset_u; + MenuSpr.v += btn->offset_v; + + GsSortSprite(&MenuSpr); + break; + + case ONE_PLAYER_BUTTON_INDEX: + MenuSpr.x = MAIN_MENU_ONE_PLAYER_BUTTON_X; + MenuSpr.y = MAIN_MENU_ONE_PLAYER_BUTTON_Y - MainMenuBtnAni[btn->timer]; + MenuSpr.u += btn->offset_u; + MenuSpr.v += btn->offset_v; + + GsSortSprite(&MenuSpr); + break; + + case TWO_PLAYER_BUTTON_INDEX: + MenuSpr.x = MAIN_MENU_TWO_PLAYER_BUTTON_X; + MenuSpr.y = MAIN_MENU_TWO_PLAYER_BUTTON_Y - MainMenuBtnAni[btn->timer]; + MenuSpr.u += btn->offset_u; + MenuSpr.v += btn->offset_v; + + GsSortSprite(&MenuSpr); + break; + + default: + break; + } + +} + +void MenuTestCheat(void) +{ + if(MemCardShowMap() == false) + { + dprintf("MemCardShowMap() failed!\n"); + return; + } +} diff --git a/Source/Menu.h b/Source/Menu.h new file mode 100755 index 0000000..d8ea301 --- /dev/null +++ b/Source/Menu.h @@ -0,0 +1,29 @@ +#ifndef __MENU_HEADER__ +#define __MENU_HEADER__ + +/* ************************************* + * Includes + * *************************************/ + +#include "Global_Inc.h" +#include "System.h" +#include "Gfx.h" +#include "Sfx.h" +#include "MainMenuBtnAni.h" +#include "LoadMenu.h" +#include "Game.h" +#include "EndAnimation.h" +#include "PSXSDKIntro.h" +#include "MemCard.h" + +/* ************************************* + * Defines + * *************************************/ + +/* ************************************* + * Global prototypes + * *************************************/ + +void MainMenu(void); + +#endif //__MENU_HEADER__ diff --git a/Source/PSXSDKIntro.c b/Source/PSXSDKIntro.c new file mode 100755 index 0000000..9c81132 --- /dev/null +++ b/Source/PSXSDKIntro.c @@ -0,0 +1,486 @@ +/* ************************************* + * Includes + * *************************************/ + +#include "PSXSDKIntro.h" + +/* ************************************* + * Defines + * *************************************/ + +/* ************************************** + * Structs and enums * + * *************************************/ + +enum +{ + PSX_W = 48, + PSX_H = 32, + PSX_U = 30, + PSX_V = 0, + PSX_X = (X_SCREEN_RESOLUTION >> 1) - (PSX_W >> 1), + PSX_Y = (Y_SCREEN_RESOLUTION >> 1) - (PSX_H >> 1), + + DISK_X = PSX_X + 11, + DISK_Y = PSX_Y + 2, + DISK_W = 27, + DISK_H = 27, + DISK_U = 2, + DISK_V = 2, + MAX_DISK_SPIN = 5, + + READER_X = PSX_X + 9, + READER_Y = PSX_Y + 1, + + CLOSED_READER_W = 30, + CLOSED_READER_H = 30, + CLOSED_READER_U = 0, + CLOSED_READER_V = 30, + + OPEN_READER_W = CLOSED_READER_W, + OPEN_READER_H = 15, + OPEN_READER_U = 0, + OPEN_READER_V = (CLOSED_READER_H << 1) + 1, + + TRANSPARENT_CLOSED_READER_W = CLOSED_READER_W, + TRANSPARENT_CLOSED_READER_H = CLOSED_READER_H, + TRANSPARENT_CLOSED_READER_U = CLOSED_READER_W, + TRANSPARENT_CLOSED_READER_V = PSX_H, + + TRANSPARENT_OPEN_READER_W = OPEN_READER_W, + TRANSPARENT_OPEN_READER_H = OPEN_READER_H, + TRANSPARENT_OPEN_READER_U = OPEN_READER_W, + TRANSPARENT_OPEN_READER_V = TRANSPARENT_CLOSED_READER_V + + TRANSPARENT_CLOSED_READER_H +}; + +enum +{ + CLOSE_SHELL_EV_TIM = 50, + DISK_SPIN_EV_TIM = 30, + TEXT_APPEAR_RANDOM_TIM = 100, + TEXT_APPEAR_STRING_TIM = 100, + INTRO_CLOSE_TIM = 100 +}; + +enum +{ + FONT_COLUMNS = 5, + FONT_SIZE_BITSHIFT = 4, + FONT_SIZE = 16, + FONT_TPAGE = 6, + FONT_U = 0, + FONT_V = 76, + FONT_X = 64, + FONT_Y = 144, + FONT_X2 = 88, + FONT_Y2 = 160 +}; + +enum +{ + BG_LUMINANCE_TARGET = NORMAL_LUMINANCE, + BG_LUMINANCE_STEP = 2, +}; + +enum +{ + GPL_LOGO_LUMINANCE_STEP = 1, + GPL_LOGO_LUMINANCE_TARGET = NORMAL_LUMINANCE, + GPL_LOGO_X = 16, + GPL_LOGO_Y = 16 +}; + +enum +{ + OPEN_SOURCE_LOGO_LUMINANCE_STEP = 1, + OPEN_SOURCE_LOGO_LUMINANCE_TARGET = NORMAL_LUMINANCE, + OPEN_SOURCE_LOGO_X = X_SCREEN_RESOLUTION - 64 - 16, + OPEN_SOURCE_LOGO_Y = 16 +}; + +/* ************************************* + * Local Prototypes + * *************************************/ + +static void PSXSDKIntroDrawConsole(void); +static void PSXSDKIntroRunTimers(void); +static void PSXSDKIntroDrawDisk(void); +static void PSXSDKIntroDrawTransCase(void); +static void PSXSDKIntroDrawChar(short x, short y, char ch); + +/* ************************************* + * Local variables + * *************************************/ + +// Events +static bool PSXSDKIntroCloseShellEvent; +static bool PSXSDKIntroCloseShellEventReminder; +static bool PSXSDKIntroSpinDiskEvent; +static bool PSXSDKIntroSpinDiskEventReminder; +static bool PSXSDKIntroRandTextEvent; +static bool PSXSDKIntroRandTextEventReminder; +static bool PSXSDKIntroStringEvent; +static bool PSXSDKIntroClose; + +// Text +static char * strPSXSDKIntro = {"MADE WITH PSXSDK"}; +static char * strPSXSDKIntroAuthor = {"BY NEXTVOLUME"}; + +/* ************************************* + * Global variables + * *************************************/ + +GsSprite PsxDisk; +GsSprite PSXSDKIntroFont; +GsSprite GPL_Logo; +GsSprite OpenSource_Logo; +SsVag TrayClSnd; +SsVag SpinDiskSnd; + +void PSXSDKIntroDrawChar(short x, short y, char ch) +{ + PSXSDKIntroFont.w = FONT_SIZE; + PSXSDKIntroFont.h = FONT_SIZE; + PSXSDKIntroFont.tpage = FONT_TPAGE; + + if( (ch >= 'A') && (ch <= 'Z') ) + { + ch -= 'A'; // Reset offset + + PSXSDKIntroFont.x = x; + PSXSDKIntroFont.y = y; + + PSXSDKIntroFont.u = FONT_U + ( (ch % FONT_COLUMNS) << FONT_SIZE_BITSHIFT); + PSXSDKIntroFont.v = FONT_V + ((short)(ch / FONT_COLUMNS) << FONT_SIZE_BITSHIFT); + + GfxSortSprite(&PSXSDKIntroFont); + } + + if(ch == ' ') + { + return; + } +} + +void PSXSDKIntro(void) +{ + int i; + + PSXSDKIntroCloseShellEvent = false; + PSXSDKIntroCloseShellEventReminder = false; + PSXSDKIntroSpinDiskEvent = false; + PSXSDKIntroSpinDiskEventReminder = false; + PSXSDKIntroRandTextEvent = false; + PSXSDKIntroRandTextEventReminder = false; + PSXSDKIntroStringEvent = false; + PSXSDKIntroClose = false; + + GfxSetGlobalLuminance(NORMAL_LUMINANCE); + + while(1) + { + while(GfxIsGPUBusy() == true); + + if( ( (GfxGetGlobalLuminance() - BG_LUMINANCE_STEP) > 0) + && + (PSXSDKIntroClose == true) ) + { + GfxIncreaseGlobalLuminance(-BG_LUMINANCE_STEP); + } + + if( (GfxGetGlobalLuminance() <= BG_LUMINANCE_STEP) + && + (PSXSDKIntroClose == true) ) + { + break; + } + + GsSortCls(0,0,0); + + for(i = 0; i < strlen(strPSXSDKIntro) ; i++) + { + if( (PSXSDKIntroRandTextEvent == true) + && + (PSXSDKIntroStringEvent == false) ) + { + if(PSXSDKIntroRandTextEventReminder == false) + { + PSXSDKIntroRandTextEventReminder = true; + SfxPlaySound(&SpinDiskSnd); + } + + PSXSDKIntroDrawChar(FONT_X + (i << FONT_SIZE_BITSHIFT),FONT_Y,SystemRand('A','Z')); + + GPL_Logo.r = 0; + GPL_Logo.g = 0; + GPL_Logo.b = 0; + + OpenSource_Logo.r = 0; + OpenSource_Logo.g = 0; + OpenSource_Logo.b = 0; + } + else if( (PSXSDKIntroRandTextEvent == true) + && + (PSXSDKIntroStringEvent == true) ) + { + PSXSDKIntroDrawChar(FONT_X + (i << FONT_SIZE_BITSHIFT),FONT_Y,strPSXSDKIntro[i]); + + if(System100msTick() == true) + { + if(GPL_Logo.r < GPL_LOGO_LUMINANCE_TARGET) + { + GPL_Logo.r += GPL_LOGO_LUMINANCE_STEP; + GPL_Logo.g += GPL_LOGO_LUMINANCE_STEP; + GPL_Logo.b += GPL_LOGO_LUMINANCE_STEP; + } + + GPL_Logo.x = GPL_LOGO_X; + GPL_Logo.y = GPL_LOGO_Y; + + if(OpenSource_Logo.r < OPEN_SOURCE_LOGO_LUMINANCE_TARGET) + { + OpenSource_Logo.r += OPEN_SOURCE_LOGO_LUMINANCE_STEP; + OpenSource_Logo.g += OPEN_SOURCE_LOGO_LUMINANCE_STEP; + OpenSource_Logo.b += OPEN_SOURCE_LOGO_LUMINANCE_STEP; + } + + OpenSource_Logo.x = OPEN_SOURCE_LOGO_X; + OpenSource_Logo.y = OPEN_SOURCE_LOGO_Y; + } + + GfxSortSprite(&GPL_Logo); + GfxSortSprite(&OpenSource_Logo); + } + } + + for(i = 0; i < strlen(strPSXSDKIntroAuthor) ; i++) + { + if( (PSXSDKIntroRandTextEvent == true) + && + (PSXSDKIntroStringEvent == false) ) + { + PSXSDKIntroDrawChar(FONT_X2 + (i << FONT_SIZE_BITSHIFT),FONT_Y2,SystemRand('A','Z')); + } + else if( (PSXSDKIntroRandTextEvent == true) + && + (PSXSDKIntroStringEvent == true) ) + { + PSXSDKIntroDrawChar(FONT_X2 + (i << FONT_SIZE_BITSHIFT),FONT_Y2,strPSXSDKIntroAuthor[i]); + } + } + + PSXSDKIntroDrawConsole(); + + PSXSDKIntroDrawDisk(); + + if(PSXSDKIntroCloseShellEvent == true) + { + if(PSXSDKIntroCloseShellEventReminder == false) + { + PSXSDKIntroCloseShellEventReminder = true; + + SfxPlaySound(&TrayClSnd); + } + + PsxDisk.x = READER_X; + PsxDisk.y = READER_Y; + + PsxDisk.w = CLOSED_READER_W; + PsxDisk.h = CLOSED_READER_H; + + PsxDisk.u = CLOSED_READER_U; + PsxDisk.v = CLOSED_READER_V; + + GfxSortSprite(&PsxDisk); + } + else + { + PsxDisk.x = READER_X; + PsxDisk.y = READER_Y; + + PsxDisk.w = OPEN_READER_W; + PsxDisk.h = OPEN_READER_H; + + PsxDisk.u = OPEN_READER_U; + PsxDisk.v = OPEN_READER_V; + + GfxSortSprite(&PsxDisk); + } + + PSXSDKIntroDrawTransCase(); + + GfxDrawScene(); + + PSXSDKIntroRunTimers(); + } +} + +void PSXSDKIntroRunTimers(void) +{ + static uint16_t intro_timer = 0; + + intro_timer++; + + if( (intro_timer >= CLOSE_SHELL_EV_TIM) + && + (PSXSDKIntroCloseShellEvent == false) ) + { + PSXSDKIntroCloseShellEvent = true; + intro_timer = 0; + } + + if( (intro_timer >= DISK_SPIN_EV_TIM) + && + (PSXSDKIntroCloseShellEvent == true) + && + (PSXSDKIntroSpinDiskEvent == false) ) + { + PSXSDKIntroSpinDiskEvent = true; + intro_timer = 0; + } + + if( (intro_timer >= TEXT_APPEAR_RANDOM_TIM) + && + (PSXSDKIntroCloseShellEvent == true) + && + (PSXSDKIntroSpinDiskEvent == true) + && + (PSXSDKIntroRandTextEvent == false) ) + { + PSXSDKIntroRandTextEvent = true; + intro_timer = 0; + } + + if( (intro_timer >= TEXT_APPEAR_STRING_TIM) + && + (PSXSDKIntroCloseShellEvent == true) + && + (PSXSDKIntroSpinDiskEvent == true) + && + (PSXSDKIntroRandTextEvent == true) + && + (PSXSDKIntroStringEvent == false) ) + { + PSXSDKIntroStringEvent = true; + SfxPlayTrack(INTRO_TRACK); + intro_timer = 0; + } + + if( (intro_timer >= INTRO_CLOSE_TIM) + && + (PSXSDKIntroCloseShellEvent == true) + && + (PSXSDKIntroSpinDiskEvent == true) + && + (PSXSDKIntroRandTextEvent == true) + && + (PSXSDKIntroStringEvent == true) ) + { + PSXSDKIntroClose = true; + intro_timer = 0; + } + + + +} + +void PSXSDKIntroDrawDisk(void) +{ + static int spin_rotate = 0; + static int spin_speed = 0; + + PsxDisk.x = DISK_X; + PsxDisk.y = DISK_Y; + + PsxDisk.w = DISK_W; + PsxDisk.h = DISK_H; + + PsxDisk.u = DISK_U; + PsxDisk.v = DISK_V; + + if(PSXSDKIntroSpinDiskEvent == true) + { + if(PSXSDKIntroSpinDiskEventReminder == false) + { + PSXSDKIntroSpinDiskEventReminder = true; + + //SfxPlaySound(&SpinDiskSnd); + } + + if(spin_speed < MAX_DISK_SPIN) + { + spin_speed++; + } + + if(spin_rotate < GfxRotateFromDegrees(360) ) + { + spin_rotate += GfxRotateFromDegrees(spin_speed++); + } + else + { + spin_rotate = SystemRand(0,GfxRotateFromDegrees(360)); + } + + PsxDisk.rotate = spin_rotate; + PsxDisk.mx = DISK_W >> 1; + PsxDisk.my = DISK_H >> 1; + } + + GfxSortSprite(&PsxDisk); + + PsxDisk.rotate = 0; +} + +void PSXSDKIntroDrawTransCase(void) +{ + /*if(PSXSDKIntroCloseShellEvent == false) + { + PsxDisk.x = READER_X; + PsxDisk.y = READER_Y; + + PsxDisk.w = TRANSPARENT_OPEN_READER_W; + PsxDisk.h = TRANSPARENT_OPEN_READER_H; + + PsxDisk.u = TRANSPARENT_OPEN_READER_U; + PsxDisk.v = TRANSPARENT_OPEN_READER_V; + + PsxDisk.attribute |= ENABLE_TRANS | TRANS_MODE(0); + + GfxSortSprite(&PsxDisk); + + PsxDisk.attribute &= ~(ENABLE_TRANS | TRANS_MODE(0) ); + } + else + { + PsxDisk.x = READER_X; + PsxDisk.y = READER_Y; + + PsxDisk.w = TRANSPARENT_CLOSED_READER_W; + PsxDisk.h = TRANSPARENT_CLOSED_READER_H; + + PsxDisk.u = TRANSPARENT_CLOSED_READER_U; + PsxDisk.v = TRANSPARENT_CLOSED_READER_V; + + PsxDisk.attribute |= ENABLE_TRANS | TRANS_MODE(0); + + GfxSortSprite(&PsxDisk); + + PsxDisk.attribute &= ~(ENABLE_TRANS | TRANS_MODE(0) ); + }*/ + +} + +void PSXSDKIntroDrawConsole(void) +{ + PsxDisk.x = PSX_X; + PsxDisk.y = PSX_Y; + + PsxDisk.w = PSX_W; + PsxDisk.h = PSX_H; + + PsxDisk.u = PSX_U; + PsxDisk.v = PSX_V; + + GfxSortSprite(&PsxDisk); +} diff --git a/Source/PSXSDKIntro.h b/Source/PSXSDKIntro.h new file mode 100755 index 0000000..6dfe09d --- /dev/null +++ b/Source/PSXSDKIntro.h @@ -0,0 +1,33 @@ +#ifndef __PSXSDK_INTRO_HEADER__ +#define __PSXSDK_INTRO_HEADER__ + +/* ************************************* + * Includes + * *************************************/ + +#include "Global_Inc.h" +#include "System.h" +#include "Gfx.h" + +/* ************************************* + * Defines + *************************************/ + +/* ************************************* + * Global prototypes + * *************************************/ + +void PSXSDKIntro(void); + +/* ************************************* + * Global variables + * *************************************/ + +extern GsSprite PsxDisk; +extern GsSprite PSXSDKIntroFont; +extern GsSprite GPL_Logo; +extern GsSprite OpenSource_Logo; +extern SsVag TrayClSnd; +extern SsVag SpinDiskSnd; + +#endif //__PSXSDK_INTRO_HEADER__ diff --git a/Source/Pad.c b/Source/Pad.c new file mode 100755 index 0000000..7fc08a2 --- /dev/null +++ b/Source/Pad.c @@ -0,0 +1,482 @@ +/* ************************************* + * Includes + * *************************************/ + +#include "Pad.h" + +/* ************************************* + * Defines + * *************************************/ + +#define PAD_ONE 0 +#define PAD_TWO 1 +#define PAD_CHEAT_TIMEOUT 2 +#define PAD_MAX_CHEATS 16 + +/* ************************************** + * Structs and enums * + * *************************************/ + +enum +{ + + PAD_CROSS_INDEX = 0, + PAD_SQUARE_INDEX, + PAD_TRIANGLE_INDEX, + PAD_CIRCLE_INDEX, + + PAD_DOWN_INDEX, + PAD_LEFT_INDEX, + PAD_UP_INDEX, + PAD_RIGHT_INDEX, + + PAD_L1_INDEX, + PAD_L2_INDEX, + + PAD_R1_INDEX, + PAD_R2_INDEX, + + NUMBER_OF_KEYS + +}; + + +/* ************************************* + * Local Prototypes + * *************************************/ + +static void PadOneVibrationHandler(void); +static void PadTwoVibrationHandler(void); +static void PadCheatHandler(uint8_t n_pad); +static void PadOneCleanCheatArray(void); +static void PadTwoCleanCheatArray(void); +static psx_pad_state PadOneGetState(void); +uint8_t PadGetKeyIndex(unsigned short key); + +/* ************************************* + * Local Variables + * *************************************/ + +// Pad data +static unsigned short pad1; +static unsigned short pad2; + +// Pad data from previous frame +static unsigned short previous_pad1; +static unsigned short previous_pad2; + +// Vibration timers +static uint16_t pad1_vibration_timer; +static uint16_t pad2_vibration_timer; + +// Vibration strenght data (big motor) +static uint8_t pad1_big_vibration_force; +static uint8_t pad2_big_vibration_force; + +// Vibration strenght data (small motor) +static uint8_t pad1_small_vibration_force; +static uint8_t pad2_small_vibration_force; + +// Timers for each key pressed (used for PadXXKeyRepeat() ) +static uint8_t pad1_keys_repeat[NUMBER_OF_KEYS]; +static uint8_t pad2_keys_repeat[NUMBER_OF_KEYS]; +// These arrays include last 16 buttons pressed by user and keeps them +// for cheating purposes. They are cleaned if no keys are pressed during +// PAD_CHEAT_TIMEOUT seconds. +static unsigned short pad1_cheat_array[CHEAT_ARRAY_SIZE]; +static unsigned short pad2_cheat_array[CHEAT_ARRAY_SIZE]; + +// Pointers to timers which clean padX_cheat_array. +static TYPE_TIMER * pad1_cheat_timer; +static TYPE_TIMER * pad2_cheat_timer; + +static TYPE_CHEAT * cheatsArray[PAD_MAX_CHEATS]; + +psx_pad_state PadOneGetState(void) +{ + psx_pad_state PadOne; + + PSX_PollPad_Fast(PAD_ONE,&PadOne); + + return PadOne; +} + +bool PadOneConnected(void) +{ + psx_pad_state PadOne = PadOneGetState(); + + if(PadOne.status != PAD_STATUS_OK) + { + return false; + } + + return true; +} + +bool PadOneAnyKeyPressed(void) +{ + return (bool)pad1; +} + +bool PadOneDirectionKeyPressed(void) +{ + return ( (PadOneKeyPressed(PAD_UP) == true) + || + (PadOneKeyPressed(PAD_LEFT) == true) + || + (PadOneKeyPressed(PAD_RIGHT) == true) + || + (PadOneKeyPressed(PAD_DOWN) == true) ); +} + +bool PadOneDirectionKeyReleased(void) +{ + return ( (PadOneKeyReleased(PAD_UP) == true) + || + (PadOneKeyReleased(PAD_LEFT) == true) + || + (PadOneKeyReleased(PAD_RIGHT) == true) + || + (PadOneKeyReleased(PAD_DOWN) == true) ); +} + +bool PadTwoDirectionKeyReleased(void) +{ + return ( (PadTwoKeyReleased(PAD_UP) == true) + || + (PadTwoKeyReleased(PAD_LEFT) == true) + || + (PadTwoKeyReleased(PAD_RIGHT) == true) + || + (PadTwoKeyReleased(PAD_DOWN) == true) ); +} + +bool PadTwoDirectionKeyPressed(void) +{ + return ( (PadTwoKeyPressed(PAD_UP) == true) + || + (PadTwoKeyPressed(PAD_LEFT) == true) + || + (PadTwoKeyPressed(PAD_RIGHT) == true) + || + (PadTwoKeyPressed(PAD_DOWN) == true) ); +} + +bool PadTwoAnyKeyPressed(void) +{ + return (bool)pad2; +} + +bool PadOneKeyPressed(unsigned short key) +{ + return (bool)( pad1 & key ); +} + +bool PadTwoKeyPressed(unsigned short key) +{ + return (bool)( pad2 & key ); +} + +bool PadOneKeyRepeat(unsigned short key, uint8_t time) +{ + uint8_t key_index = PadGetKeyIndex(key); + + if(key_index == NUMBER_OF_KEYS) + { + return false; + } + + pad1_keys_repeat[key_index]++; + + if(pad1_keys_repeat[key_index] >= time) + { + pad1_keys_repeat[key_index] = 0; + return true; + } + + return false; +} + +bool PadTwoKeyRepeat(unsigned short key, uint8_t time) +{ + uint8_t key_index = PadGetKeyIndex(key); + + if(key_index == NUMBER_OF_KEYS) + { + return false; + } + + pad2_keys_repeat[key_index]++; + + if(pad2_keys_repeat[key_index] >= time) + { + pad2_keys_repeat[key_index] = 0; + return true; + } + + return false; +} + +void PadOneVibrationHandler(void) +{ + if(PadOneIsVibrationEnabled() == true) + { + pad_enable_vibration(PAD_ONE); + pad_set_vibration(PAD_ONE,pad1_small_vibration_force,pad1_big_vibration_force); + pad1_vibration_timer--; + } +} + +void PadTwoVibrationHandler(void) +{ + if(PadTwoIsVibrationEnabled() == true) + { + pad_enable_vibration(PAD_TWO); + pad_set_vibration(PAD_TWO,pad2_small_vibration_force,pad2_big_vibration_force); + pad2_vibration_timer--; + } +} + +bool PadOneIsVibrationEnabled(void) +{ + return (pad1_vibration_timer & true); +} + +bool PadTwoIsVibrationEnabled(void) +{ + return (pad2_vibration_timer & true); +} + +bool UpdatePads(void) +{ + PadOneVibrationHandler(); + + PadTwoVibrationHandler(); + + PadCheatHandler(PAD_ONE); + + PadCheatHandler(PAD_TWO); + + // Get now-old pad data + previous_pad1 = pad1; + previous_pad2 = pad2; + + PSX_ReadPad(&pad1,&pad2); + + if(PadOneConnected() == false) + { + return false; + } + + return true; +} + +bool PadOneKeyReleased(unsigned short key) +{ + return ( !(pad1 & key) && (previous_pad1 & key) ); +} + +bool PadTwoKeyReleased(unsigned short key) +{ + return ( !(pad2 & key) && (previous_pad2 & key) ); +} + +uint8_t PadGetKeyIndex(unsigned short key) +{ + switch(key) + { + case PAD_CROSS: + return PAD_CROSS_INDEX; + break; + + case PAD_SQUARE: + return PAD_SQUARE_INDEX; + break; + + case PAD_TRIANGLE: + return PAD_TRIANGLE_INDEX; + break; + + case PAD_CIRCLE: + return PAD_CIRCLE_INDEX; + break; + + case PAD_DOWN: + return PAD_DOWN_INDEX; + break; + + case PAD_LEFT: + return PAD_LEFT_INDEX; + break; + + case PAD_UP: + return PAD_UP_INDEX; + break; + + case PAD_RIGHT: + return PAD_RIGHT_INDEX; + break; + + case PAD_L1: + return PAD_L1_INDEX; + break; + + case PAD_R1: + return PAD_R1_INDEX; + break; + + case PAD_L2: + return PAD_L2_INDEX; + break; + + case PAD_R2: + return PAD_R2_INDEX; + break; + + default: + return NUMBER_OF_KEYS; + break; + } +} + +unsigned short * PadOneGetAddress(void) +{ + return &pad1; +} + +void PadClearData(void) +{ + pad1 = 0; + pad2 = 0; + + previous_pad1 = 0; + previous_pad2 = 0; +} + +void PadInit(void) +{ + pad1_cheat_timer = SystemCreateTimer(PAD_CHEAT_TIMEOUT,true /* Repeat flag */,&PadOneCleanCheatArray); + pad2_cheat_timer = SystemCreateTimer(PAD_CHEAT_TIMEOUT,true /* Repeat flag */,&PadTwoCleanCheatArray); + memset(cheatsArray,0, sizeof(TYPE_CHEAT) * PAD_MAX_CHEATS); +} + +void PadCheatHandler(uint8_t n_pad) +{ + unsigned short available_keys[12] = { PAD_LEFT, PAD_RIGHT, PAD_UP, PAD_DOWN, + PAD_L2, PAD_R2, PAD_L1, PAD_R1, + PAD_TRIANGLE, PAD_CIRCLE, PAD_CROSS, PAD_SQUARE }; + + uint8_t i; + uint8_t keys_released = 0; + unsigned short key; + uint8_t j; + bool (*released_callback)(unsigned short); + void (*clean_callback)(void); + bool success = false; + unsigned short * cheat_array; + TYPE_TIMER * timer; + + switch(n_pad) + { + case PAD_ONE: + released_callback = &PadOneKeyReleased; + cheat_array = pad1_cheat_array; + clean_callback = &PadOneCleanCheatArray; + timer = pad1_cheat_timer; + break; + + case PAD_TWO: + released_callback = &PadTwoKeyReleased; + cheat_array = pad2_cheat_array; + clean_callback = &PadTwoCleanCheatArray; + timer = pad2_cheat_timer; + break; + + default: + dprintf("Invalid pad called for PadCheatHandler()!\n"); + return; + } + + for(i = 0; i < PAD_MAX_CHEATS; i++) + { + if(cheatsArray[i] != NULL) + { + if(SystemArrayCompare(cheat_array, cheatsArray[i]->Combination, CHEAT_ARRAY_SIZE) == true) + { + if(cheatsArray[i]->Callback != NULL) + { + if(clean_callback != NULL) + { + clean_callback(); + } + + cheatsArray[i]->Callback(); + + return; + } + } + } + } + + for(i = 0; i < sizeof(available_keys) / sizeof(unsigned short); i++) + { + if(released_callback(available_keys[i]) == true) + { + SystemTimerRestart(timer); + key = available_keys[i]; + keys_released++; + } + } + + if(keys_released != 1) + { + return; + } + + // Check for full array (return success = true if an empty array + // element was found. + for(j = 0; j < CHEAT_ARRAY_SIZE; j++) + { + if(cheat_array[j] == 0) + { + success = true; + break; + } + } + + if(success == false) + { + if(clean_callback != NULL) + { + // Overrun + clean_callback(); + } + } + + cheat_array[j] = key; +} + +bool PadAddCheat(TYPE_CHEAT * cheat) +{ + static uint8_t idx = 0; + + if(idx >= PAD_MAX_CHEATS) + { + dprintf("Maximum number of cheats exceeded!\n"); + return false; + } + + cheatsArray[idx++] = cheat; + + return true; +} + +void PadOneCleanCheatArray(void) +{ + memset(pad1_cheat_array,0,sizeof(unsigned short) * CHEAT_ARRAY_SIZE); +} + +void PadTwoCleanCheatArray(void) +{ + memset(pad2_cheat_array,0,sizeof(unsigned short) * CHEAT_ARRAY_SIZE); +} diff --git a/Source/Pad.h b/Source/Pad.h new file mode 100755 index 0000000..3e0ff69 --- /dev/null +++ b/Source/Pad.h @@ -0,0 +1,54 @@ +#ifndef __PAD_HEADER__ +#define __PAD_HEADER__ + +/* ************************************* + * Includes + * *************************************/ + +#include "Global_Inc.h" +#include "System.h" +#include "GameStructures.h" + +/* ************************************* + * Defines + * *************************************/ + +#define PAD_ALWAYS_REPEAT 1 + +/* ************************************* + * Global prototypes + * *************************************/ + +void PadInit(void); +void PadClearData(void); + +bool PadOneConnected(void); + +bool PadOneAnyKeyPressed(void); +bool PadTwoAnyKeyPressed(void); + +bool PadOneKeyPressed(unsigned short key); +bool PadTwoKeyPressed(unsigned short key); + +bool PadOneKeyRepeat(unsigned short key, uint8_t time); +bool PadTwoKeyRepeat(unsigned short key, uint8_t time); + +bool PadOneKeyReleased(unsigned short key); +bool PadTwoKeyReleased(unsigned short key); + +bool PadOneDirectionKeyPressed(void); +bool PadTwoDirectionKeyPressed(void); + +bool PadOneDirectionKeyReleased(void); +bool PadTwoDirectionKeyReleased(void); + +bool UpdatePads(void); +bool PadOneIsVibrationEnabled(void); +bool PadTwoIsVibrationEnabled(void); + +bool PadAddCheat(TYPE_CHEAT * cheat); + +// Experimental (to be removed) +unsigned short * PadOneGetAddress(void); + +#endif //__PAD_HEADER__ diff --git a/Source/PltParser.c b/Source/PltParser.c new file mode 100755 index 0000000..fe59e91 --- /dev/null +++ b/Source/PltParser.c @@ -0,0 +1,251 @@ +/* ************************************* + * Includes + * *************************************/ + +#include "PltParser.h" + +/* ************************************* + * Defines + * *************************************/ + +#define PLT_BUFFER_SIZE 0x2800 +#define LINE_MAX 100 + +/* ************************************** + * Structs and enums * + * *************************************/ + +enum +{ + DEPARTURE_ARRIVAL_INDEX = 0, + FLIGHT_NUMBER_INDEX, + PASSENGERS_INDEX, + HOURS_MINUTES_INDEX, + PARKING_INDEX +}; + +enum +{ + PLT_HOUR_MINUTE_CHARACTERS = 2, + PLT_FIRST_LINE_CHARACTERS = 5, + PLT_COLON_POSITION = 2 +}; + +/* ************************************* + * Local Variables + * *************************************/ + +static char strPltBuffer[PLT_BUFFER_SIZE]; + +/* ************************************* + * Local Prototypes + * *************************************/ +static void PltParserResetBuffers(TYPE_FLIGHT_DATA * ptrFlightData); + +bool PltParserLoadFile(char * strPath, TYPE_FLIGHT_DATA * ptrFlightData) +{ + uint8_t i; + uint8_t j; + uint8_t aircraftIndex; + bool first_line_read = false; + char * buffer; + char lineBuffer[LINE_MAX]; + char * lineBufferPtr; + char * pltBufferSavePtr; + char strHour[PLT_HOUR_MINUTE_CHARACTERS]; + char strMinutes[PLT_HOUR_MINUTE_CHARACTERS]; + + if(SystemLoadFileToBuffer(strPath,(uint8_t*)strPltBuffer,PLT_BUFFER_SIZE) == false) + { + dprintf("Error loading file %s!\n",strPath); + return false; + } + + PltParserResetBuffers(ptrFlightData); + + // Now, buffer shall be read from line to line + + buffer = strtok_r(strPltBuffer,"\n",&pltBufferSavePtr); + + aircraftIndex = 0; + + while(buffer != NULL) + { + if(buffer[0] == '#') + { + // Comment line + buffer = strtok_r(NULL,"\n",&pltBufferSavePtr); + continue; + } + + if(first_line_read == false) + { + // First (non-comment) line should indicate level time + // i.e.: 10:30, or 22:45 + first_line_read = true; + + if(strlen(buffer) != PLT_FIRST_LINE_CHARACTERS) + { + // Format should always be HH:MM (5 characters) + // Treat any other combination as possible error + return false; + } + + if(buffer[PLT_COLON_POSITION] != ':') + { + // Check whether time format is HH:MM + return false; + } + + j = 0; + + for(i = 0; i < PLT_FIRST_LINE_CHARACTERS ; i++) + { + if(i == PLT_COLON_POSITION) + { + j = 0; + buffer = strtok(NULL,"\n"); + continue; + } + else if(i < PLT_COLON_POSITION) + { + strHour[j++] = buffer[i]; + } + else + { + strMinutes[j++] = buffer[i]; + } + } + + GameSetTime((uint8_t)atoi(strHour),(uint8_t)atoi(strMinutes) ); + dprintf("Game time set to %.2d:%.2d.\n",(uint8_t)atoi(strHour),(uint8_t)atoi(strMinutes) ); + } + else + { + // File header (initial game time) has already been read + strncpy(lineBuffer, buffer, LINE_MAX); + + lineBufferPtr = strtok(lineBuffer,";"); + + i = 0; + + dprintf("New line read: %s\n",buffer); + + while(lineBufferPtr != NULL) + { + /* + * enum + { + DEPARTURE_ARRIVAL_INDEX = 0, + FLIGHT_NUMBER_INDEX, + PASSENGERS_INDEX, + HOURS_MINUTES_INDEX, + PARKING_INDEX + };*/ + switch(i) + { + case DEPARTURE_ARRIVAL_INDEX: + + if(strncmp(lineBufferPtr,"DEPARTURE",strlen("DEPARTURE") ) == 0) + { + ptrFlightData->FlightDirection[aircraftIndex] = DEPARTURE; + dprintf("Aircraft %d set to DEPARTURE.\n",aircraftIndex); + } + else if(strncmp(lineBufferPtr,"ARRIVAL",strlen("ARRIVAL") ) == 0) + { + ptrFlightData->FlightDirection[aircraftIndex] = ARRIVAL; + dprintf("Aircraft %d set to ARRIVAL.\n",aircraftIndex); + } + else + { + dprintf("Flight direction is not correct!\n"); + } + break; + + case FLIGHT_NUMBER_INDEX: + strncpy(ptrFlightData->strFlightNumber[aircraftIndex],lineBufferPtr,GAME_MAX_CHARACTERS); + ptrFlightData->strFlightNumber[aircraftIndex][GAME_MAX_CHARACTERS - 1] = '\0'; + dprintf("Aircraft %d flight number set to %s.\n",aircraftIndex,ptrFlightData->strFlightNumber[aircraftIndex]); + break; + + case PASSENGERS_INDEX: + ptrFlightData->Passengers[aircraftIndex] = atoi(lineBufferPtr); + dprintf("Aircraft %d passengers set to %d.\n",aircraftIndex,ptrFlightData->Passengers[aircraftIndex]); + break; + + case PARKING_INDEX: + if(ptrFlightData->FlightDirection[aircraftIndex] == DEPARTURE) + { + ptrFlightData->Parking[aircraftIndex] = atoi(lineBufferPtr); + } + else + { + ptrFlightData->Parking[aircraftIndex] = 0; + } + dprintf("Aircraft %d parking set to %d.\n",aircraftIndex,ptrFlightData->Parking[aircraftIndex]); + break; + + case HOURS_MINUTES_INDEX: + if( strlen(lineBufferPtr) != strlen("HH:MM") ) + { + dprintf("Hour minute format is not correct!\n"); + break; + } + + // Copy hour + strHour[0] = lineBufferPtr[0]; + strHour[1] = lineBufferPtr[1]; + // Copy minutes + strMinutes[0] = lineBufferPtr[3]; + strMinutes[1] = lineBufferPtr[4]; + + ptrFlightData->Hours[aircraftIndex] = (uint8_t)atoi(strHour); + ptrFlightData->Minutes[aircraftIndex] = (uint8_t)atoi(strMinutes); + + dprintf("Aircraft %d time set to %.2d:%.2d.\n", aircraftIndex, + ptrFlightData->Hours[aircraftIndex], + ptrFlightData->Minutes[aircraftIndex] ); + break; + + + default: + break; + } + + lineBufferPtr = strtok(NULL,";"); + i++; + } + + ptrFlightData->State[aircraftIndex] = STATE_IDLE; + ptrFlightData->NotificationRequest[aircraftIndex] = false; + aircraftIndex++; + } + + buffer = strtok_r(NULL,"\n",&pltBufferSavePtr); + } + + ptrFlightData->nAircraft = aircraftIndex; //Set total number of aircraft used + ptrFlightData->ActiveAircraft = 0; + + dprintf("Number of aircraft parsed: %d\n",ptrFlightData->nAircraft); + + return true; +} + +void PltParserResetBuffers(TYPE_FLIGHT_DATA * ptrFlightData) +{ + uint8_t i; + + for(i = 0; i < GAME_MAX_AIRCRAFT ; i++) + { + memset(ptrFlightData->strFlightNumber[i],'\0',GAME_MAX_CHARACTERS); + } + + memset(ptrFlightData->FlightDirection,DEPARTURE,GAME_MAX_AIRCRAFT); + memset(ptrFlightData->Passengers,0,GAME_MAX_AIRCRAFT); + memset(ptrFlightData->Hours,0,GAME_MAX_AIRCRAFT); + memset(ptrFlightData->Minutes,0,GAME_MAX_AIRCRAFT); + memset(ptrFlightData->State,STATE_IDLE,GAME_MAX_AIRCRAFT); + memset(ptrFlightData->NotificationRequest,0,GAME_MAX_AIRCRAFT); + memset(ptrFlightData->Parking,0,GAME_MAX_AIRCRAFT); +} diff --git a/Source/PltParser.h b/Source/PltParser.h new file mode 100755 index 0000000..f7bf78d --- /dev/null +++ b/Source/PltParser.h @@ -0,0 +1,30 @@ +#ifndef __PLT_PARSER__ +#define __PLT_PARSER__ + +/* ************************************* + * Includes + * *************************************/ + +#include "Global_Inc.h" +#include "System.h" +#include "GameStructures.h" + +/* ************************************* + * Defines + * *************************************/ + +/* ************************************** + * Structs and enums * + * *************************************/ + +/* ************************************* + * Global prototypes + * *************************************/ + +bool PltParserLoadFile(char * strPath, TYPE_FLIGHT_DATA * ptrFlightData); + +/* ************************************* + * Global variables + * *************************************/ + +#endif //__PLT_PARSER__ diff --git a/Source/Sfx.c b/Source/Sfx.c new file mode 100755 index 0000000..260c7a5 --- /dev/null +++ b/Source/Sfx.c @@ -0,0 +1,85 @@ +/* ************************************* + * Includes + * *************************************/ + +#include "Sfx.h" + +/* ************************************* + * Defines + * *************************************/ + +#define MAX_VOLUME SPU_MAXVOL +#define SILENT 0 + +#define NUMBER_OF_VOICES 24 + +/* ************************************* + * Local Prototypes + * *************************************/ + +/* ************************************* + * Local Variables + * *************************************/ + +static uint8_t voiceIndex = 0; + +void SfxPlaySound(SsVag * sound) +{ + SsPlayVag(sound, sound->cur_voice, MAX_VOLUME, MAX_VOLUME); +} + +bool SfxUploadSound(char * file_path, SsVag * vag) +{ + if(SystemLoadFile(file_path) == false) + { + return false; + } + + if(voiceIndex < NUMBER_OF_VOICES) + { + SsReadVag(vag,SystemGetBufferAddress()); + + SsUploadVag(vag); + + vag->cur_voice = voiceIndex; + voiceIndex++; + } + else + { + dprintf("Maximum number of SPU voices exceeded!\n"); + return false; //Maximum voices exceeded + } + + return true; +} + +void SfxPlayTrack(MUSIC_TRACKS track) +{ +#ifndef NO_CDDA + SsCdVol(0x7FFF,0x7FFF); + SsEnableCd(); + CdPlayTrack(track); + dprintf("Track number %d playing...\n",track); +#endif // NO_CDDA +} + +void SfxStopMusic(void) +{ +#ifndef NO_CDDA + uint64_t timer = SystemGetGlobalTimer(); + uint16_t CDVol = 0x7FFF; + uint8_t time_step = 5; + + while (CDVol > 0x3F) + { + CDVol>>=1; + SsCdVol(CDVol,CDVol); + + while(SystemGetGlobalTimer() < (timer + time_step) ); + + timer = SystemGetGlobalTimer(); + } + + CdSendCommand(CdlMute,0); +#endif +} diff --git a/Source/Sfx.h b/Source/Sfx.h new file mode 100755 index 0000000..1e5025b --- /dev/null +++ b/Source/Sfx.h @@ -0,0 +1,37 @@ +#ifndef __SFX_HEADER__ +#define __SFX_HEADER__ + +/* ************************************* + * Includes + * *************************************/ + +#include "Global_Inc.h" +#include "System.h" + +/* ************************************* + * Defines + * *************************************/ + + /* ************************************* + * Structs and enums + * *************************************/ + +typedef enum t_musicTracks +{ + INTRO_TRACK = 2, + GAMEPLAY_TRACK1 = 3, + GAMEPLAY_TRACK2 = 4, + GAMEPLAY_FIRST_TRACK = GAMEPLAY_TRACK1, + GAMEPLAY_LAST_TRACK = GAMEPLAY_TRACK2 +}MUSIC_TRACKS; + +/* ************************************* + * Global prototypes + * *************************************/ + +void SfxPlaySound(SsVag * sound); +bool SfxUploadSound(char * file_path, SsVag * vag); +void SfxPlayTrack(MUSIC_TRACKS track); +void SfxStopMusic(void); + +#endif //__SFX_HEADER__ diff --git a/Source/System.c b/Source/System.c new file mode 100755 index 0000000..b158004 --- /dev/null +++ b/Source/System.c @@ -0,0 +1,517 @@ +/* ************************************* + * Includes + * *************************************/ + +#include "System.h" + +/* ************************************* + * Defines + * *************************************/ + +#define FILE_BUFFER_SIZE 0x20014 +#define SYSTEM_MAX_TIMERS 16 + +#define END_STACK_PATTERN (uint32_t) 0x18022015 +#define BEGIN_STACK_ADDRESS (uint32_t*) 0x801FFF00 +#define STACK_SIZE 0x1000 + +/* ************************************* + * Local Prototypes + * *************************************/ + +static void SystemCheckTimer(bool * timer, uint64_t * last_timer, uint8_t step); +static void SystemSetStackPattern(void); + +/* ************************************* + * Local Variables + * *************************************/ + +//Buffer to store any kind of files. It supports files up to 128 kB +static uint8_t file_buffer[FILE_BUFFER_SIZE]; +//Global timer (called by interrupt) +static volatile uint64_t global_timer; +//Tells whether rand seed has been set +static bool rand_seed; +//Screen refresh flag (called by interrupt) +static volatile bool refresh_needed; +//Timers +static bool one_second_timer; +static bool hundred_ms_timer; +static bool five_hundred_ms_timer; +//Emergency mode flag. Toggled on pad connected/disconnected +static bool emergency_mode; +//Critical section is entered (i.e.: when accessing fopen() or other BIOS functions +static bool system_busy; +//Timer array. +static TYPE_TIMER timer_array[SYSTEM_MAX_TIMERS]; + +/* ************************************* + * @name: void SystemInit(void) + * @date: 19/05/2016 + * @author: Xavier Del Campo + * @brief: + * *************************************/ + +void SystemInit(void) +{ + //Reset global timer + global_timer = 0; + //Reset 1 second timer + one_second_timer = 0; + //PSXSDK init + PSX_InitEx(PSX_INIT_SAVESTATE | PSX_INIT_CD); + //Graphics init + GsInit(); + //Clear VRAM + GsClearMem(); + //Set Video Resolution +#ifdef _PAL_MODE_ + GsSetVideoMode(X_SCREEN_RESOLUTION, Y_SCREEN_RESOLUTION, VMODE_PAL); +#else + GsSetVideoMode(X_SCREEN_RESOLUTION, Y_SCREEN_RESOLUTION, VMODE_NTSC); +#endif //_PAL_MODE_ + //SPU init + SsInit(); + //Reset all user-handled timers + SystemResetTimers(); + //Pads init + PadInit(); + //Set Drawing Environment + GfxInitDrawEnv(); + //Set Display Environment + GfxInitDispEnv(); + //Set VBlank Handler for screen refresh + SetVBlankHandler(&ISR_SystemDefaultVBlank); + //Set Primitive List + GfxSetPrimitiveList(); + // Init memory card + MemCardInit(); + //Initial value for system_busy + system_busy = false; + + GfxSetGlobalLuminance(NORMAL_LUMINANCE); + + SystemSetStackPattern(); + + SetRCnt(RCntCNT2,0xFFFF,RCntSC); + StartRCnt(RCntCNT2); +} + +void SystemSetRandSeed(void) +{ + if(rand_seed == false) + { + rand_seed = true; + //Set random seed using global timer as reference + srand((unsigned int)global_timer); + + dprintf("Seed used: %d\n",(unsigned int)global_timer); + } +} + +bool SystemIsRandSeedSet(void) +{ + return rand_seed; +} + +bool SystemDMAReady(void) +{ + return (*((unsigned int*)0x1F801814) & 1<<28); +} + +bool SystemDMABusy(void) +{ + return !SystemDMAReady(); +} + +bool SystemRefreshNeeded(void) +{ + return refresh_needed; +} + +void ISR_SystemDefaultVBlank(void) +{ + refresh_needed = true; + SystemIncreaseGlobalTimer(); +} + +void SystemIncreaseGlobalTimer(void) +{ + global_timer++; +} + +uint64_t SystemGetGlobalTimer(void) +{ + return global_timer; +} + +void SystemDisableScreenRefresh(void) +{ + refresh_needed = false; +} + +bool System1SecondTick(void) +{ + return one_second_timer; +} + +bool System100msTick(void) +{ + return hundred_ms_timer; +} + +bool System500msTick(void) +{ + return five_hundred_ms_timer; +} + +void SystemRunTimers(void) +{ + static uint64_t last_one_second_tick; + static uint64_t last_100_ms_tick; + static uint64_t last_500_ms_tick; + + SystemCheckTimer(&one_second_timer, &last_one_second_tick, REFRESH_FREQUENCY); + +#ifdef _PAL_MODE_ + SystemCheckTimer(&hundred_ms_timer, &last_100_ms_tick, 2 /* 2 * 50 ms = 100 ms */); + SystemCheckTimer(&five_hundred_ms_timer, &last_500_ms_tick, 10 /* 10 * 50 ms = 500 ms */); +#else + SystemCheckTimer(&hundred_ms_timer, &last_100_ms_tick, 3); +#endif //VMODE_PAL + +} + +void SystemCheckTimer(bool * timer, uint64_t * last_timer, uint8_t step) +{ + if(*timer == true) + { + *timer = false; + *last_timer = global_timer; + } + + if(global_timer >= (*last_timer + step) ) + { + *timer = true; + } +} + +bool SystemLoadFileToBuffer(char * fname, uint8_t * buffer, uint32_t szBuffer) +{ + FILE *f; + int32_t size; + + if(fname == NULL) + { + dprintf("SystemLoadFile: NULL fname!\n"); + return false; + } + + memset(buffer,0,szBuffer); + + system_busy = true; + f = fopen(fname, "r"); + + if(f == NULL) + { + dprintf("SystemLoadFile: file could not be found!\n"); + //File couldn't be found + return false; + } + + fseek(f, 0, SEEK_END); + + size = ftell(f); + + if(size > szBuffer) + { + dprintf("SystemLoadFile: Exceeds file buffer size (%d bytes)\n",size); + //Bigger than 128 kB (buffer's max size) + return false; + } + + fseek(f, 0, SEEK_SET); //f->pos = 0; + + fread(buffer, sizeof(char), size, f); + + fclose(f); + + system_busy = false; + + dprintf("File \"%s\" loaded successfully!\n",fname); + + return true; +} + +bool SystemLoadFile(char *fname) +{ + return SystemLoadFileToBuffer(fname,file_buffer,sizeof(file_buffer)); +} + +uint8_t * SystemGetBufferAddress(void) +{ + return file_buffer; +} + +void SystemWaitCycles(uint32_t cycles) +{ + uint64_t currentTime = global_timer; + + while(global_timer < (currentTime + cycles) ); +} + +uint32_t SystemRand(uint32_t min, uint32_t max) +{ + return rand() % (max - min + 1) + min; +} + +void SystemSetEmergencyMode(bool value) +{ + emergency_mode = value; +} + +bool SystemGetEmergencyMode(void) +{ + return emergency_mode; +} + +bool SystemIsBusy(void) +{ + return system_busy; +} + +bool SystemContains_u8(uint8_t value, uint8_t * buffer, size_t sz) +{ + size_t i = 0; + + for(i = 0; i < sz; i++) + { + if(buffer[i] == value) + { + return true; + } + } + + return false; +} + +bool SystemContains_u16(uint16_t value, uint16_t * buffer, size_t sz) +{ + size_t i = 0; + + for(i = 0; i < sz; i++) + { + if(buffer[i] == value) + { + return true; + } + } + + return false; +} + +TYPE_TIMER * SystemCreateTimer(uint32_t seconds, bool rf, void (*timer_callback)(void) ) +{ + bool success = false; + uint8_t i; + + if(seconds == 0) + { + dprintf("Cannot create timer with time == 0!\n"); + return NULL; + } + + for(i = 0; i < SYSTEM_MAX_TIMERS; i++) + { + if(timer_array[i].busy == false) + { + timer_array[i].Timeout_Callback = timer_callback; + timer_array[i].time = seconds; + timer_array[i].orig_time = seconds; + timer_array[i].repeat_flag = rf; + timer_array[i].busy = true; + success = true; + break; + } + } + + if(success == false) + { + dprintf("Could not find any free timer!\n"); + return NULL; + } + + return &timer_array[i]; +} + +void SystemResetTimers(void) +{ + uint8_t i; + + for(i = 0; i < SYSTEM_MAX_TIMERS; i++) + { + timer_array[i].Timeout_Callback = NULL; + timer_array[i].busy = false; + timer_array[i].repeat_flag = false; + timer_array[i].time = 0; + timer_array[i].orig_time = 0; + } +} + +void SystemUserTimersHandler(void) +{ + uint8_t i; + + for(i = 0; i < SYSTEM_MAX_TIMERS; i++) + { + if(timer_array[i].busy == true) + { + if(System1SecondTick() == true) + { + timer_array[i].time--; + + if(timer_array[i].time == 0) + { + timer_array[i].Timeout_Callback(); + + if(timer_array[i].repeat_flag == true) + { + timer_array[i].time = timer_array[i].orig_time; + } + else + { + // Clean timer data + timer_array[i].busy = false; + timer_array[i].orig_time = 0; + timer_array[i].Timeout_Callback = NULL; + } + } + } + } + } +} + +void SystemTimerRestart(TYPE_TIMER * timer) +{ + timer->time = timer->orig_time; +} + +void SystemTimerRemove(TYPE_TIMER * timer) +{ + timer->time = 0; + timer->orig_time = 0; + timer->Timeout_Callback = NULL; + timer->busy = false; + timer->repeat_flag = false; +} + +bool SystemArrayCompare(unsigned short * arr1, unsigned short * arr2, size_t sz) +{ + size_t i; + + for(i = 0; i < sz; i++) + { + if(arr1[i] != arr2[i]) + { + return false; + } + } + + return true; +} + +void SystemPrintStackPointerAddress(void) +{ +#ifdef PSXSDK_DEBUG // Used to avoid unused variable warning + void * ptr = NULL; + fix16_t used_bytes = fix16_from_int((int)((void*)BEGIN_STACK_ADDRESS - (void*)&ptr)); + fix16_t stackPercent = fix16_sdiv(used_bytes,fix16_from_int((int)STACK_SIZE)); + + stackPercent = fix16_smul(stackPercent, fix16_from_int((int)100)); + + dprintf("stackPercent: %d\n", stackPercent); + + dprintf("Stack begin pointer: 0x%08X\n" + "Stack pointer address: 0x%08X\n" + "Used %d%% of stack size.\n" + "\tUsed bytes: %d\n", + (void*)BEGIN_STACK_ADDRESS, + (void*)&ptr, + fix16_to_int(stackPercent), + fix16_to_int(used_bytes) ); +#endif // PSXSDK_DEBUG + +} + +void SystemCheckStack(void) +{ + uint32_t * ptrStack = BEGIN_STACK_ADDRESS; + uint32_t data; + + ptrStack -= STACK_SIZE; + data = (*ptrStack); + + if(data != END_STACK_PATTERN) + { + dprintf("Stack overflow?\n"); + + while(1); + } +} + +void SystemSetStackPattern(void) +{ + uint32_t * ptrStack = BEGIN_STACK_ADDRESS; + + ptrStack -= STACK_SIZE; + + *ptrStack = END_STACK_PATTERN; +} + +int32_t SystemIndexOfStringArray(char * str, char ** array) +{ + int32_t i; + + for(i = 0; array[i] != NULL; i++) + { + dprintf("String to find: %s\nEntry: %s\n", str, array[i]); + + if(strcmp(str, array[i]) == 0) + { + dprintf("Match! Returning index %d...\n", i); + return i; + } + } + + return -1; +} + +int32_t SystemIndexOf_U16(uint16_t value, uint16_t * array, uint32_t sz) +{ + int32_t i; + + for(i = 0; i < sz; i++) + { + if(value == array[i]) + { + return i; + } + } + + return -1; +} + +int32_t SystemIndexOf_U8(uint8_t value, uint8_t * array, uint32_t from, uint32_t sz) +{ + int32_t i; + + for(i = from; i < sz; i++) + { + if(value == array[i]) + { + return i; + } + } + + return -1; +} diff --git a/Source/System.h b/Source/System.h new file mode 100755 index 0000000..cbb22ea --- /dev/null +++ b/Source/System.h @@ -0,0 +1,102 @@ +#ifndef __SYSTEM_HEADER__ +#define __SYSTEM_HEADER__ + +/* ************************************** + * Includes * + * **************************************/ + +#include "Global_Inc.h" +#include "Menu.h" +#include "Gfx.h" +#include "MemCard.h" + +/* ************************************** + * Defines * + * **************************************/ + +#define TIMEBASE_1_SECOND REFRESH_FREQUENCY +#define TIMEBASE_1_MINUTE TIMEBASE_1_SECOND * 60 + +/* ************************************** + * Global Prototypes * + * **************************************/ + +// Calls PSXSDK init routines +void SystemInit(void); +// Sets default VSync (only sets flag to true and increases global_timer) +void ISR_SystemDefaultVBlank(void); +// Calls srand() using current global_timer value as seed +void SystemSetRandSeed(void); +// Returns VSync flag value +bool SystemRefreshNeeded(void); +// Tells whether CPU->GPU DMA transfer is ready +bool SystemDMAReady(void); +// Tells whether CPU->GPU DMA transfer is busy +bool SystemDMABusy(void); +// Loads a file into system's internal buffer +bool SystemLoadFile(char *fname); +// Loads a file into desired buffer +bool SystemLoadFileToBuffer(char * fname, uint8_t * buffer, uint32_t szBuffer); +// Clears VSync flag after each frame +void SystemDisableScreenRefresh(void); +// Returns file buffer address +uint8_t * SystemGetBufferAddress(void); +// Tells whether srand() has been called using a pseudo-random value +bool SystemIsRandSeedSet(void); +// Stops program flow during X cycles +void SystemWaitCycles(uint32_t cycles); +// To be called from GfxDrawScene after each cycle +void SystemRunTimers(void); +// 1 cycle-length flag with a frequency of 1 Hz +bool System1SecondTick(void); +// 1 cycle-length flag with a frequency of 2 Hz +bool System500msTick(void); +// 1 cycle-length flag with a frequency of 10 Hz +bool System100msTick(void); +// Returns random value between given minimum and maximum values +uint32_t SystemRand(uint32_t min, uint32_t max); +// Increases global timer by 1 step +void SystemIncreaseGlobalTimer(void); +// Sets value to emergency mode flag +void SystemSetEmergencyMode(bool value); +// Returns emergency mode flag state +bool SystemGetEmergencyMode(void); +// (Experimental) +uint64_t SystemGetGlobalTimer(void); +// Returns whether critical section of code is being entered +bool SystemIsBusy(void); +// Returns whether indicated value is contained inside buffer +bool SystemContains_u8(uint8_t value, uint8_t * buffer, size_t sz); +// Overload for uint16_t +bool SystemContains_u16(uint16_t value, uint16_t * buffer, size_t sz); +// Creates a timer instance wiht a determined value and associates it to a callback +// Once time expires, callback is automatically called right after GfxDrawScene(). +TYPE_TIMER * SystemCreateTimer(uint32_t seconds, bool rf, void (*timer_callback)(void) ); +// Reportedly, sets all timer data to zero. +void SystemResetTimers(void); +// To be called every cycle (i.e.: inside GfxDrawScene() ). +void SystemUserTimersHandler(void); +// Sets timer remaining time to initial value. +void SystemTimerRestart(TYPE_TIMER * timer); +// Flushes a timer pointed to by timer. +void SystemTimerRemove(TYPE_TIMER * timer); +// Compares two arrays of unsigned short type. +bool SystemArrayCompare(unsigned short * arr1, unsigned short * arr2, size_t sz); +// Prints stack pointer address using dprintf() +void SystemPrintStackPointerAddress(void); +// Checks if a 32-bit pattern set at the end of the stack has been +// accidentally modified by program flow. +void SystemCheckStack(void); +// Looks for string "str" inside a string array pointed to by "array". +// Returns index inside string array on success, -1 if not found. +int32_t SystemIndexOfStringArray(char * str, char ** array); +// Function overload for uint16_t data type. +int32_t SystemIndexOf_U16(uint16_t value, uint16_t * array, uint32_t sz); +// Function overload for uint8_t data type. +int32_t SystemIndexOf_U8(uint8_t value, uint8_t * array, uint32_t from, uint32_t sz); + +/* ************************************** + * Global Variables * + * **************************************/ + +#endif //__SYSTEM_HEADER__ diff --git a/Source/main.c b/Source/main.c new file mode 100755 index 0000000..083daa0 --- /dev/null +++ b/Source/main.c @@ -0,0 +1,27 @@ +/* ************************************* + * Includes + * *************************************/ + +#include "Global_Inc.h" +#include "Menu.h" +#include "System.h" + +/* ************************************* + * Defines + * *************************************/ + +/* ************************************* + * Local Prototypes + * *************************************/ + +int main(void) +{ + + //System initialization + SystemInit(); + + MainMenu(); + + return 0; + +} |
