aboutsummaryrefslogtreecommitdiff
path: root/Source
diff options
context:
space:
mode:
authorXavier Del Campo <xavi.dcr@gmail.com>2017-02-04 14:49:08 +0100
committerXavier Del Campo <xavi.dcr@gmail.com>2017-02-04 14:49:08 +0100
commit189ecf754d0c8131464bfdff98fb56e7752556b1 (patch)
tree89e7d02128bbc7b2d3f5c19a3da14ec14291982a /Source
downloadairport-189ecf754d0c8131464bfdff98fb56e7752556b1.tar.gz
Initial commit
Diffstat (limited to 'Source')
-rwxr-xr-xSource/Aircraft.c372
-rwxr-xr-xSource/Aircraft.h28
-rwxr-xr-xSource/Camera.c201
-rwxr-xr-xSource/Camera.h28
-rwxr-xr-xSource/EndAnimation.c235
-rwxr-xr-xSource/EndAnimation.h25
-rw-r--r--Source/Exe/AIRPORT.s52108
-rwxr-xr-xSource/Font.c196
-rwxr-xr-xSource/Font.h43
-rwxr-xr-xSource/Game.c1727
-rwxr-xr-xSource/Game.h48
-rwxr-xr-xSource/GameGui.c730
-rwxr-xr-xSource/GameGui.h38
-rwxr-xr-xSource/GameStructures.h206
-rwxr-xr-xSource/Gfx.c526
-rwxr-xr-xSource/Gfx.h81
-rwxr-xr-xSource/Global_Inc.h38
-rwxr-xr-xSource/LoadMenu.c523
-rwxr-xr-xSource/LoadMenu.h28
-rwxr-xr-xSource/MainMenuBtnAni.c75
-rwxr-xr-xSource/MainMenuBtnAni.h27
-rwxr-xr-xSource/Makefile119
-rwxr-xr-xSource/MapEditor/.qmake.stash12
-rwxr-xr-xSource/MapEditor/Makefile379
-rwxr-xr-xSource/MapEditor/Makefile.Debug447
-rwxr-xr-xSource/MapEditor/Makefile.Release447
-rwxr-xr-xSource/MapEditor/MapEditor.pro20
-rwxr-xr-xSource/MapEditor/MapEditor.pro.user318
-rwxr-xr-xSource/MapEditor/main.cpp11
-rwxr-xr-xSource/MapEditor/mainwindow.cpp81
-rwxr-xr-xSource/MapEditor/mainwindow.h34
-rwxr-xr-xSource/MapEditor/mainwindow.ui107
-rwxr-xr-xSource/MapEditor/release/moc_mainwindow.cpp111
-rwxr-xr-xSource/MapEditor/settings.ini2
-rwxr-xr-xSource/MapEditor/ui_mainwindow.h131
-rwxr-xr-xSource/MemCard.c1172
-rwxr-xr-xSource/MemCard.h150
-rwxr-xr-xSource/Menu.c492
-rwxr-xr-xSource/Menu.h29
-rwxr-xr-xSource/PSXSDKIntro.c486
-rwxr-xr-xSource/PSXSDKIntro.h33
-rwxr-xr-xSource/Pad.c482
-rwxr-xr-xSource/Pad.h54
-rwxr-xr-xSource/PltParser.c251
-rwxr-xr-xSource/PltParser.h30
-rwxr-xr-xSource/Sfx.c85
-rwxr-xr-xSource/Sfx.h37
-rwxr-xr-xSource/System.c517
-rwxr-xr-xSource/System.h102
-rwxr-xr-xSource/main.c27
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;
+
+}