* Added some comments on Game.c.

* Some performance optimizations on Game.c (removed unneeded "for" loops).
* Timer 2 is now handler (ISR still not working).
* SYSTEM.CNF: EVENT parameter increased to 7.
This commit is contained in:
XaviDCR92 2017-08-09 22:51:15 +02:00
parent 8700a329d0
commit b807ee7ca5
6 changed files with 230 additions and 70 deletions

View File

@ -11,9 +11,19 @@ ARRIVAL;PHX2015;100;00:10;0;360
ARRIVAL;PHX2016;100;00:40;0;360
ARRIVAL;PHX2017;100;00:50;0;360
ARRIVAL;PHX2018;100;01:40;0;360
ARRIVAL;PHX2018;100;01:20;0;360
ARRIVAL;PHX2018;100;02:00;0;360
ARRIVAL;PHX2019;100;01:20;0;360
ARRIVAL;PHX2020;100;02:00;0;360
ARRIVAL;PHX2021;100;00:05;0;360
ARRIVAL;PHX2022;100;00:15;0;360
ARRIVAL;PHX2023;100;00:45;0;360
ARRIVAL;PHX2024;100;01:45;0;360
ARRIVAL;PHX2025;100;01:20;0;360
ARRIVAL;PHX2026;100;01:10;0;360
DEPARTURE;PHX1000;100;00:05;19;180
DEPARTURE;PHX1001;100;00:15;19;180
DEPARTURE;PHX1002;100;00:30;19;180
DEPARTURE;PHX1003;100;00:45;19;180
DEPARTURE;PHX1004;100;01:10;19;180
DEPARTURE;PHX1280;100;01:30;19;180
DEPARTURE;PHX1332;100;00:50;21;180
DEPARTURE;PHX1333;100;01:00;19;180

View File

@ -1077,6 +1077,26 @@ char* GetGameLevelTitle(void)
return GameLevelTitle;
}
/* ******************************************************************************************
*
* @name: void GameAircraftState(uint8_t i)
*
* @author: Xavier Del Campo
*
* @param:
* TYPE_PLAYER* ptrPlayer:
* Pointer to a player structure
*
*
* @brief:
* Draws all tiles depending on GameLevelBuffer configuration.
*
* @remarks:
* Tiles are usually rendered with normal RGB values unless parking/runway is busy
* or ptrPlayer->InvalidPath == true.
*
* ******************************************************************************************/
void GameAircraftState(uint8_t i)
{
uint16_t target[2] = {0};
@ -1166,6 +1186,26 @@ void GameAircraftState(uint8_t i)
}
}
/* ******************************************************************************************
*
* @name: void GameRenderLevel(TYPE_PLAYER* ptrPlayer)
*
* @author: Xavier Del Campo
*
* @param:
* TYPE_PLAYER* ptrPlayer:
* Pointer to a player structure
*
*
* @brief:
* Draws all tiles depending on GameLevelBuffer configuration.
*
* @remarks:
* Tiles are usually rendered with normal RGB values unless parking/runway is busy
* or ptrPlayer->InvalidPath == true.
*
* ******************************************************************************************/
void GameRenderLevel(TYPE_PLAYER* ptrPlayer)
{
uint16_t i;
@ -1173,7 +1213,7 @@ void GameRenderLevel(TYPE_PLAYER* ptrPlayer)
uint8_t columns = 0;
uint8_t rows = 0;
bool flip_id;
bool used_rwy;
bool used_rwy = SystemContains_u16(ptrPlayer->RwyArray[0], GameUsedRwy, GAME_MAX_RUNWAYS);
uint8_t aux_id;
GsSprite * ptrTileset;
const uint8_t rwy_sine_step = 24;
@ -1181,11 +1221,14 @@ void GameRenderLevel(TYPE_PLAYER* ptrPlayer)
static bool rwy_sine_decrease = false;
TYPE_ISOMETRIC_POS tileIsoPos;
TYPE_CARTESIAN_POS tileCartPos;
uint16_t init_timer_value = 0;
uint16_t end_timer_value = 0;
// Prepare runway to be painted in blue if player is on runway selection mode
if(ptrPlayer->SelectRunway == true)
{
GameGetSelectedRunwayArray(GameRwy[ptrPlayer->SelectedRunway], ptrPlayer->RwyArray, sizeof(ptrPlayer->RwyArray));
/*Serial_printf("Runway array:\n");
for(j = 0; j < GAME_MAX_RWY_LENGTH; j++)
@ -1312,8 +1355,6 @@ void GameRenderLevel(TYPE_PLAYER* ptrPlayer)
{
continue;
}
used_rwy = false;
ptrTileset->r = NORMAL_LUMINANCE;
ptrTileset->g = NORMAL_LUMINANCE;
@ -1325,17 +1366,6 @@ void GameRenderLevel(TYPE_PLAYER* ptrPlayer)
&&
(SystemContains_u16(i, ptrPlayer->RwyArray, GAME_MAX_RWY_LENGTH) == true) )
{
for(j = 0; j < GAME_MAX_RUNWAYS; j++)
{
if(GameUsedRwy[j] != 0)
{
if(SystemContains_u16(GameUsedRwy[j], ptrPlayer->RwyArray, GAME_MAX_RWY_LENGTH) == true)
{
used_rwy = true;
break;
}
}
}
if(used_rwy == true)
{
@ -1382,32 +1412,11 @@ void GameRenderLevel(TYPE_PLAYER* ptrPlayer)
(CurrentTile == TILE_RWY_HOLDING_POINT_2) ) )
{
bool bHoldingRwyBusy = false;
for(j = 0; j < FlightData.nAircraft; j++)
{
uint16_t* targets = AircraftGetTargets(j);
uint16_t aircraftTile = AircraftGetTileFromFlightDataIndex(j);
uint16_t lastTarget = 0;
uint8_t k;
for(k = 0; k < AIRCRAFT_MAX_TARGETS; k++)
{
if(targets[k] == 0)
{
break;
}
init_timer_value = GetRCnt(2);
lastTarget = targets[k];
}
if( (i == aircraftTile)
||
(i == lastTarget) )
{
bHoldingRwyBusy = true;
break;
}
}
end_timer_value = GetRCnt(2);
if(bHoldingRwyBusy == true)
{
@ -1484,14 +1493,55 @@ void GameRenderLevel(TYPE_PLAYER* ptrPlayer)
ptrTileset->attribute &= ~(H_FLIP);
}
}
dprintf("GameRenderLevel execution time = %d\t"
"end_timer_value = 0x%04X\tinit_timer_value = 0x%04X\n",
end_timer_value - init_timer_value,
end_timer_value,
init_timer_value );
}
/* *******************************************************************
*
* @name: void GameSetTime(uint8_t hour, uint8_t minutes)
*
* @author: Xavier Del Campo
*
* @brief:
* Reportedly, it sets game time to specified hour and minutes.
*
*
* @remarks:
* To be used on GameInit() after PLT file parsing.
*
* *******************************************************************/
void GameSetTime(uint8_t hour, uint8_t minutes)
{
GameHour = hour;
GameMinutes = minutes;
}
/* *******************************************************************
*
* @name: void GameActiveAircraft(uint8_t i)
*
* @author: Xavier Del Campo
*
* @param:
* uint8_t i:
* Index from FlightData array.
*
* @brief:
* On each game cycle, FlightData.ActiveAircraft is set to 0 and
* number of active aircraft is recalculated.
*
* @remarks:
* Called ciclically from GameCalculations(). This function is
* executed GAME_MAX_AIRCRAFT times on each cycle.
*
* *******************************************************************/
void GameActiveAircraft(uint8_t i)
{
// Reset iterator when i == 0.
@ -1507,6 +1557,29 @@ void GameActiveAircraft(uint8_t i)
}
}
/* ******************************************************************************************
*
* @name: void GameStateShowAircraft(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA* ptrFlightData)
*
* @author: Xavier Del Campo
*
* @param:
* TYPE_PLAYER* ptrPlayer:
* Pointer to a player structure
*
* TYPE_FLIGH_DATA* ptrFlightData:
* In the end, pointer to FlightData data table, which contains
* information about all available flights.
*
* @brief:
* Handles ptrPlayer->ShowAircraftData state.
*
*
* @remarks:
* Called ciclically from GamePlayerHandler().
*
* ******************************************************************************************/
void GameStateShowAircraft(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA* ptrFlightData)
{
if(ptrPlayer->ShowAircraftData == true)
@ -1527,6 +1600,29 @@ void GameStateShowAircraft(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA* ptrFlightDa
}
}
/* ******************************************************************************************
*
* @name: void GameStateLockTarget(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA* ptrFlightData)
*
* @author: Xavier Del Campo
*
* @param:
* TYPE_PLAYER* ptrPlayer:
* Pointer to a player structure
*
* TYPE_FLIGH_DATA* ptrFlightData:
* In the end, pointer to FlightData data table, which contains
* information about all available flights.
*
* @brief:
* Handles ptrPlayer->LockTarget state.
*
*
* @remarks:
* Called ciclically from GamePlayerHandler().
*
******************************************************************************************/
void GameStateLockTarget(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA* ptrFlightData)
{
uint8_t AircraftIdx = ptrPlayer->FlightDataSelectedAircraft;
@ -1572,6 +1668,29 @@ void GameStateLockTarget(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA* ptrFlightData
}
}
/* ******************************************************************************************
*
* @name: void GameStateSelectTaxiwayRunway(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA* ptrFlightData)
*
* @author: Xavier Del Campo
*
* @param:
* TYPE_PLAYER* ptrPlayer:
* Pointer to a player structure
*
* TYPE_FLIGH_DATA* ptrFlightData:
* In the end, pointer to FlightData data table, which contains
* information about all available flights.
*
* @brief:
* Handler for ptrPlayer->SelectTaxiwayRunway.
*
*
* @remarks:
* Called ciclically from GamePlayerHandler().
*
* ******************************************************************************************/
void GameStateSelectTaxiwayRunway(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA* ptrFlightData)
{
TYPE_ISOMETRIC_POS IsoPos = CameraGetIsoPos(ptrPlayer);
@ -1757,6 +1876,8 @@ void GameStateSelectRunway(TYPE_PLAYER* ptrPlayer, TYPE_FLIGHT_DATA* ptrFlightDa
// Under this mode, always reset locking target.
ptrPlayer->LockTarget = false;
ptrPlayer->LockedAircraft = FLIGHT_DATA_INVALID_IDX;
GameGetSelectedRunwayArray(GameRwy[ptrPlayer->SelectedRunway], ptrPlayer->RwyArray, sizeof(ptrPlayer->RwyArray));
CameraMoveToIsoPos(ptrPlayer, IsoPos);

View File

@ -39,13 +39,9 @@ OBJECTS = $(addprefix $(OBJ_DIR)/,main.o System.o Menu.o Gfx.o Pad.o MainMenuBtn
DEPS = $(OBJECTS:.o=.d)
all: levels image
build: levels $(PROJECT).bin
rebuild: clean all
build: $(PROJECT).exe
objects: $(OBJECTS)
rebuild: clean build
-include $(DEPS)
@ -57,24 +53,27 @@ clean:
$(OBJ_DIR)/%.o: $(SRC_DIR)/%.c $(OBJ_DIR)/%.d
$(CC) $< -o $@ $(DEFINE) $(CC_FLAGS) -MMD
$(PROJECT).elf: objects
$(PROJECT).elf: $(OBJECTS)
$(LINKER) Obj/*.o -o Exe/$(PROJECT).elf $(LIBS) -Wl,--gc-sections
$(PROJECT).iso: $(PROJECT).exe
# rm -f $@
mkisofs -o $(PROJECT).iso -V $(PROJECT) -sysid PLAYSTATION ../cdimg
$(PROJECT).bin: $(PROJECT).iso
rm -f $@
rm -f $(PROJECT).cue
mkpsxiso $(PROJECT).iso $(PROJECT).bin $(LICENSE_FILE) $(MUSIC_TRACKS)
# $(PROJECT).cue is automatically generated by mkpsxiso
rm -f $^
mv $@ ../Bin
mv $(PROJECT).cue ../Bin
$(GNU_SIZE) Exe/$(PROJECT).elf
$(PROJECT).exe: $(PROJECT).elf
$(ELF2EXE) Exe/$(PROJECT).elf Exe/$(PROJECT).exe $(ELF2EXE_FLAGS)
cp Exe/$(PROJECT).exe ../cdimg
image: build
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)

View File

@ -27,6 +27,7 @@
static void SystemCheckTimer(bool* timer, uint64_t* last_timer, uint8_t step);
static void SystemSetStackPattern(void);
static void ISR_RootCounter2(void);
/* *************************************
* Local Variables
@ -117,13 +118,26 @@ void SystemInit(void)
SystemSetStackPattern();
SetRCnt(RCntCNT2,0xFFFF,RCntSC);
StartRCnt(RCntCNT2);
//SetRCntHandler(&ISR_RootCounter2, 2, 0xA560);
Serial_printf("Begin SetRCntHandler\n");
SetRCntHandler(&ISR_RootCounter2, 2, 0xFFFF);
Serial_printf("End SetRCntHandler\n");
SystemEnableRCnt2Interrupt();
}
static volatile uint16_t u16_0_01seconds_cnt;
void ISR_RootCounter2(void)
{
Serial_printf("YO\n");
u16_0_01seconds_cnt++;
}
/* *******************************************************************
*
* @name: void SystemInit(void)
* @name: void SystemSetRandSeed(void)
*
* @author: Xavier Del Campo
*
@ -1178,8 +1192,8 @@ void SystemDevMenu(void)
DEVMENU_PAD2_RAW_DATA_TEXT_X = DEVMENU_PAD2_ID_TEXT_X,
DEVMENU_PAD2_RAW_DATA_TEXT_Y = DEVMENU_PAD2_ID_TEXT_Y + DEVMENU_TEXT_GAP,
DEVMENU_ROOTCNT0_TEXT_X = DEVMENU_PAD2_RAW_DATA_TEXT_X,
DEVMENU_ROOTCNT0_TEXT_Y = DEVMENU_PAD2_RAW_DATA_TEXT_Y + DEVMENU_TEXT_GAP,
DEVMENU_ROOTCNT2_TEXT_X = DEVMENU_PAD2_RAW_DATA_TEXT_X,
DEVMENU_ROOTCNT2_TEXT_Y = DEVMENU_PAD2_RAW_DATA_TEXT_Y + DEVMENU_TEXT_GAP,
};
if(devmenu_flag == true)
@ -1243,10 +1257,16 @@ void SystemDevMenu(void)
"Pad2 raw data = 0x%04X",
PadTwoGetRawData() );
/*FontPrintText( &SmallFont,
DEVMENU_ROOTCNT2_TEXT_X,
DEVMENU_ROOTCNT2_TEXT_Y,
"Timer2 = 0x%04X",
GetRCnt(2) );*/
FontPrintText( &SmallFont,
DEVMENU_ROOTCNT0_TEXT_X,
DEVMENU_ROOTCNT0_TEXT_Y,
"Timer0 = 0x%04X",
(uint16_t)((*(uint32_t*)0x1F801100) & 0x00FF) );
DEVMENU_ROOTCNT2_TEXT_X,
DEVMENU_ROOTCNT2_TEXT_Y,
"Timer2 = 0x%04X, timer2 = 0x%04X",
u16_0_01seconds_cnt, GetRCnt(2) );
}
}

View File

@ -11,9 +11,19 @@ ARRIVAL;PHX2015;100;00:10;0;360
ARRIVAL;PHX2016;100;00:40;0;360
ARRIVAL;PHX2017;100;00:50;0;360
ARRIVAL;PHX2018;100;01:40;0;360
ARRIVAL;PHX2018;100;01:20;0;360
ARRIVAL;PHX2018;100;02:00;0;360
ARRIVAL;PHX2019;100;01:20;0;360
ARRIVAL;PHX2020;100;02:00;0;360
ARRIVAL;PHX2021;100;00:05;0;360
ARRIVAL;PHX2022;100;00:15;0;360
ARRIVAL;PHX2023;100;00:45;0;360
ARRIVAL;PHX2024;100;01:45;0;360
ARRIVAL;PHX2025;100;01:20;0;360
ARRIVAL;PHX2026;100;01:10;0;360
DEPARTURE;PHX1000;100;00:05;19;180
DEPARTURE;PHX1001;100;00:15;19;180
DEPARTURE;PHX1002;100;00:30;19;180
DEPARTURE;PHX1003;100;00:45;19;180
DEPARTURE;PHX1004;100;01:10;19;180
DEPARTURE;PHX1280;100;01:30;19;180
DEPARTURE;PHX1332;100;00:50;21;180
DEPARTURE;PHX1333;100;01:00;19;180

View File

@ -1,4 +1,4 @@
BOOT = cdrom:\AIRPORT.EXE;1
TCB = 4
EVENT = 6
EVENT = 7
STACK = 801FF800