* Include directives are now moved to .c instead of .h, as it should really be...

* Makefile now rebuilds needed targets on modified header files.
* Some more work on GameEmergencyMode().
* Initial work on PSX mouse auto detection.
* Prototypes for RCNT2 I_MASK bit handling.
This commit is contained in:
XaviDCR92 2017-08-06 04:17:09 +02:00
parent 153f078ec2
commit 8700a329d0
29 changed files with 229 additions and 109 deletions

View File

@ -3,6 +3,9 @@
* *************************************/
#include "Aircraft.h"
#include "System.h"
#include "Game.h"
#include "Camera.h"
/* *************************************
* Defines

View File

@ -6,10 +6,8 @@
* *************************************/
#include "Global_Inc.h"
#include "System.h"
#include "GameStructures.h"
/* *************************************
* Global prototypes
* *************************************/

View File

@ -3,6 +3,9 @@
* *************************************/
#include "Camera.h"
#include "Game.h"
#include "System.h"
#include "Pad.h"
/* *************************************
* Defines

View File

@ -6,10 +6,7 @@
* *************************************/
#include "Global_Inc.h"
#include "System.h"
#include "Pad.h"
#include "GameStructures.h"
#include "Game.h"
/* *************************************
* Defines

View File

@ -3,6 +3,9 @@
* *************************************/
#include "EndAnimation.h"
#include "Global_Inc.h"
#include "Gfx.h"
#include "Sfx.h"
/* *************************************
* Defines

View File

@ -5,9 +5,6 @@
* Includes *
* **************************************/
#include "Global_Inc.h"
#include "Gfx.h"
/* **************************************
* Defines *
* **************************************/

View File

@ -3,6 +3,9 @@
* *************************************/
#include "Font.h"
#include "System.h"
#include "Gfx.h"
#include <stdarg.h>
/* *************************************
* Defines

View File

@ -6,10 +6,7 @@
* *************************************/
#include "Global_Inc.h"
#include "System.h"
#include "Gfx.h"
#include "GameStructures.h"
#include <stdarg.h>
/* *************************************
* Defines

View File

@ -3,6 +3,14 @@
* *************************************/
#include "Game.h"
#include "LoadMenu.h"
#include "System.h"
#include "Camera.h"
#include "Aircraft.h"
#include "GameGui.h"
#include "EndAnimation.h"
#include "Sfx.h"
#include "Pad.h"
/* *************************************
* Defines
@ -574,6 +582,10 @@ void GameBuildingsInit(void)
void GameEmergencyMode(void)
{
uint8_t i;
bool (*PadXConnected[MAX_PLAYERS])(void) = { [PLAYER_ONE] = &PadOneConnected,
[PLAYER_TWO] = &PadTwoConnected };
enum
{
ERROR_RECT_X = 32,
@ -587,28 +599,38 @@ void GameEmergencyMode(void)
ERROR_RECT_B = NORMAL_LUMINANCE
};
GsRectangle errorRct;
bzero((GsRectangle*)&errorRct, sizeof(GsRectangle));
while(SystemGetEmergencyMode() == true)
{
GsRectangle errorRct = {.x = ERROR_RECT_X,
.w = ERROR_RECT_W,
.y = ERROR_RECT_Y,
.h = ERROR_RECT_H,
.r = ERROR_RECT_R,
.g = ERROR_RECT_G,
.b = ERROR_RECT_B };
// 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();
for(i = 0; i < MAX_PLAYERS; i++)
{
TYPE_PLAYER* ptrPlayer = &PlayerData[i];
if(ptrPlayer->Active == true)
{
if(PadXConnected[i]() == false)
{
FontPrintText(&SmallFont, 48, 48 + (i << 5), "Pad %d disconnected", i);
SystemSetEmergencyMode(true);
}
}
}
GfxDrawScene_Slow();
}
}
@ -1980,17 +2002,12 @@ void GameGetSelectedRunwayArray(uint16_t rwyHeader, uint16_t* rwyArray, size_t s
}
}
DEBUG_PRINT_VAR(i);
//DEBUG_PRINT_VAR(i);
rwyArray[i++] = last_tile;
DEBUG_PRINT_VAR(rwyArray[i -1]);
//DEBUG_PRINT_VAR(rwyArray[i -1]);
if(i >= GAME_MAX_RWY_LENGTH)
{
while(1);
}
switch(dir)
{
case RWY_DIR_EAST:

View File

@ -7,11 +7,6 @@
#include "Global_Inc.h"
#include "GameStructures.h"
#include "LoadMenu.h"
#include "System.h"
#include "Camera.h"
#include "Aircraft.h"
#include "GameGui.h"
/* *************************************
* Defines

View File

@ -3,6 +3,10 @@
* *************************************/
#include "GameGui.h"
#include "System.h"
#include "Gfx.h"
#include "Game.h"
#include "LoadMenu.h"
/* *************************************
* Defines

View File

@ -6,10 +6,7 @@
* *************************************/
#include "Global_Inc.h"
#include "System.h"
#include "GameStructures.h"
#include "Gfx.h"
#include "Game.h"
/* *************************************
* Defines

View File

@ -3,6 +3,10 @@
* *************************************/
#include "Gfx.h"
#include "System.h"
#include "Camera.h"
#include "Pad.h"
#include "Game.h"
/* *************************************
* Defines

View File

@ -6,9 +6,7 @@
* *************************************/
#include "Global_Inc.h"
#include "System.h"
#include "Camera.h"
#include "Pad.h"
#include "GameStructures.h"
/* *************************************
* Defines

View File

@ -3,6 +3,11 @@
* *************************************/
#include "LoadMenu.h"
#include "Gfx.h"
#include "System.h"
#include "PltParser.h"
#include "Font.h"
#include "Sfx.h"
/* **************************************
* Defines *

View File

@ -6,10 +6,6 @@
* *************************************/
#include "Global_Inc.h"
#include "Gfx.h"
#include "System.h"
#include "PltParser.h"
#include "Font.h"
/* *************************************
* Defines

View File

@ -3,10 +3,12 @@ DEFINE= -DFIXMATH_FAST_SIN -D_PAL_MODE_
DEFINE += -DPSXSDK_DEBUG
DEFINE += -DNO_CDDA
DEFINE += -DNO_INTRO
DEFINE += -DSERIAL_INTERFACE
#DEFINE += -DSERIAL_INTERFACE
PSXSDK_PATH = /usr/local/psxsdk
LIBS= -lfixmath
CC_FLAGS = -Wall -Werror -c -Os -Wfatal-errors
LINKER = psx-gcc
PATH := $(PATH):$(PSXSDK_PATH)/bin/
PROJECT = AIRPORT
PROJECT_DIR = ~/Airport
@ -30,34 +32,39 @@ 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 \
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 Serial.o)
DEPS = $(OBJECTS:.o=.d)
all: levels image
rebuild: clean all
build: $(PROJECT).exe
objects: $(OBJECTS)
-include $(DEPS)
music_objects: $(addprefix ../Music/, TRACK01.bin TRACK02.bin TRACK03.bin)
remove:
clean:
rm -f Obj/*.o
$(OBJ_DIR)/%.o: $(SRC_DIR)/%.c
$(CC) $< -o $@ $(DEFINE) $(CC_FLAGS)
$(OBJ_DIR)/%.o: $(SRC_DIR)/%.c $(OBJ_DIR)/%.d
$(CC) $< -o $@ $(DEFINE) $(CC_FLAGS) -MMD
$(PROJECT).elf:
$(PROJECT).elf: objects
$(LINKER) Obj/*.o -o Exe/$(PROJECT).elf $(LIBS) -Wl,--gc-sections
$(PROJECT).exe:
$(PROJECT).exe: $(PROJECT).elf
$(ELF2EXE) Exe/$(PROJECT).elf Exe/$(PROJECT).exe $(ELF2EXE_FLAGS)
cp Exe/$(PROJECT).exe ../cdimg
image:
image: build
rm -f $(PROJECT).iso $(PROJECT).bin
rm -f $(PROJECT).cue
mkisofs -o $(PROJECT).iso -V $(PROJECT) -sysid PLAYSTATION ../cdimg
@ -72,7 +79,7 @@ emulator:
export PATH=$$PATH:$(EMULATOR_DIR)
$(EMULATOR) -cdfile $(PROJECT_DIR)/Bin/$(PROJECT).bin $(EMULATOR_FLAGS)
clean:
remove_elf_iso:
rm -f $(PROJECT).elf cdimg/$(PROJECT).exe $(PROJECT).bin $(PROJECT).cue cdimg/README.txt
rm -f $(PROJECT).iso $(PROJECT).exe $(PROJECT).elf

View File

@ -3,6 +3,9 @@
* *************************************/
#include "MemCard.h"
#include "System.h"
#include "Pad.h"
#include "Font.h"
/* *************************************
* Defines

View File

@ -6,9 +6,6 @@
* *************************************/
#include "Global_Inc.h"
#include "System.h"
#include "Pad.h"
#include "Font.h"
/* *************************************
* Defines

View File

@ -3,6 +3,18 @@
* *************************************/
#include "Menu.h"
#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"
#include "Serial.h"
#include "Pad.h"
/* **************************************
* Defines *

View File

@ -5,18 +5,6 @@
* 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"
#include "Serial.h"
/* *************************************
* Defines
* *************************************/

View File

@ -3,6 +3,9 @@
* *************************************/
#include "PSXSDKIntro.h"
#include "System.h"
#include "Gfx.h"
#include "Sfx.h"
/* *************************************
* Defines

View File

@ -6,8 +6,6 @@
* *************************************/
#include "Global_Inc.h"
#include "System.h"
#include "Gfx.h"
/* *************************************
* Defines

View File

@ -3,6 +3,7 @@
* *************************************/
#include "Pad.h"
#include "System.h"
/* *************************************
* Defines
@ -12,6 +13,7 @@
#define PAD_TWO 1
#define PAD_CHEAT_TIMEOUT 20 // 2 units * 100 ms/unit = 2000 ms
#define PAD_MAX_CHEATS 16
#define PAD_FLOATING_ID (unsigned char)0xFF
/* **************************************
* Structs and enums *
@ -127,8 +129,10 @@ unsigned char PadTwoGetType(void)
bool PadOneConnected(void)
{
psx_pad_state PadOne = PadOneGetState();
if(PadOne.status != PAD_STATUS_OK)
if( (PadOne.status != PAD_STATUS_OK)
&&
(PadOneGetID() == PAD_FLOATING_ID) )
{
return false;
}
@ -140,7 +144,9 @@ bool PadTwoConnected(void)
{
psx_pad_state PadTwo = PadTwoGetState();
if(PadTwo.status != PAD_STATUS_OK)
if( (PadTwo.status != PAD_STATUS_OK)
&&
(PadTwoGetID() == PAD_FLOATING_ID) )
{
return false;
}
@ -304,7 +310,10 @@ bool PadTwoIsVibrationEnabled(void)
bool UpdatePads(void)
{
PadOneVibrationHandler();
unsigned short adc_mouse;
static unsigned short old_adc_mouse;
PadOneVibrationHandler();
PadTwoVibrationHandler();
@ -315,14 +324,33 @@ bool UpdatePads(void)
// Get now-old pad data
previous_pad1 = pad1;
previous_pad2 = pad2;
PSX_ReadPad(&pad1,&pad2);
if(PadOneGetType() == PADTYPE_MOUSE)
{
PSX_ReadMouse(&pad1, &adc_mouse);
if(old_adc_mouse != adc_mouse)
{
Serial_printf("0%04X\n", adc_mouse);
}
old_adc_mouse = adc_mouse;
}
else
{
PSX_ReadPad(&pad1,&pad2);
}
if(PadOneConnected() == false)
{
return false;
}
if(PadTwoConnected() == false)
{
return false;
}
if(!(previous_pad1 & pad1) )
{
pad1_last_key_single_pressed = pad1;
@ -569,3 +597,13 @@ unsigned short PadTwoGetLastKeySinglePressed(void)
{
return pad2_last_key_single_pressed;
}
unsigned short PadOneGetRawData(void)
{
return pad1;
}
unsigned short PadTwoGetRawData(void)
{
return pad2;
}

View File

@ -6,7 +6,6 @@
* *************************************/
#include "Global_Inc.h"
#include "System.h"
#include "GameStructures.h"
/* *************************************
@ -59,6 +58,9 @@ bool UpdatePads(void);
bool PadOneIsVibrationEnabled(void);
bool PadTwoIsVibrationEnabled(void);
unsigned short PadOneGetRawData(void);
unsigned short PadTwoGetRawData(void);
bool PadAddCheat(TYPE_CHEAT * cheat);
unsigned short* PadGetPlayerOneCheatArray(void);

View File

@ -3,6 +3,8 @@
* *************************************/
#include "PltParser.h"
#include "System.h"
#include "Game.h"
/* *************************************
* Defines

View File

@ -6,7 +6,6 @@
* *************************************/
#include "Global_Inc.h"
#include "System.h"
#include "GameStructures.h"
/* *************************************

View File

@ -3,6 +3,11 @@
* *************************************/
#include "System.h"
#include "Pad.h"
#include "Menu.h"
#include "Gfx.h"
#include "MemCard.h"
#include "EndAnimation.h"
/* *************************************
* Defines
@ -67,9 +72,16 @@ void SystemInit(void)
global_timer = 0;
//Reset 1 second timer
one_second_timer = 0;
//PSXSDK init
//PSX_InitEx(PSX_INIT_SAVESTATE | PSX_INIT_CD);
PSX_InitEx(0);
#ifdef SERIAL_INTERFACE
// PSX_INIT_SAVESTATE | PSX_INIT_CD flags are not needed
// when coming from OpenSend.
PSX_InitEx(0);
#else // SERIAL_INTERFACE
PSX_InitEx(PSX_INIT_SAVESTATE | PSX_INIT_CD);
#endif // SERIAL_INTERFACE
//Graphics init
GsInit();
//Clear VRAM
@ -996,14 +1008,7 @@ int32_t SystemIndexOf_U8(uint8_t value, uint8_t* array, uint32_t from, uint32_t
void SystemCyclicHandler(void)
{
if(UpdatePads() == false)
{
SystemSetEmergencyMode(true);
}
else
{
SystemSetEmergencyMode(false);
}
UpdatePads();
SystemIncreaseGlobalTimer();
@ -1088,8 +1093,37 @@ void SystemReturnToLoader(void)
void SystemDevMenuToggle(void)
{
devmenu_flag = devmenu_flag? false: true;
}
DEBUG_PRINT_VAR(devmenu_flag);
/* ****************************************************************************************
*
* @name void SystemEnableRCnt2Interrupt(void)
*
* @author: Xavier Del Campo
*
* @brief: Enables bit 6 from I_MASK (0x1F801074)/IRQ6 RCNT2 (System clock / 8)
*
* ****************************************************************************************/
void SystemEnableRCnt2Interrupt(void)
{
I_MASK |= 1<<6;
}
/* ****************************************************************************************
*
* @name void SystemDisableRCnt2Interrupt(void)
*
* @author: Xavier Del Campo
*
* @brief: Disables bit 6 from I_MASK (0x1F801074)/IRQ6 RCNT2 (System clock / 8)
*
* ****************************************************************************************/
void SystemDisableRCnt2Interrupt(void)
{
I_MASK &= ~(1<<6);
}
/* ****************************************************************************************
@ -1129,8 +1163,11 @@ void SystemDevMenu(void)
DEVMENU_PAD1_ID_TEXT_X = DEVMENU_PAD1_STATUS_TEXT_X,
DEVMENU_PAD1_ID_TEXT_Y = DEVMENU_PAD1_TYPE_TEXT_Y + DEVMENU_TEXT_GAP,
DEVMENU_PAD2_STATUS_TEXT_X = DEVMENU_PAD1_ID_TEXT_X,
DEVMENU_PAD2_STATUS_TEXT_Y = DEVMENU_PAD1_ID_TEXT_Y + (DEVMENU_TEXT_GAP << 1), // Leave a bigger gap here
DEVMENU_PAD1_RAW_DATA_TEXT_X = DEVMENU_PAD1_ID_TEXT_X,
DEVMENU_PAD1_RAW_DATA_TEXT_Y = DEVMENU_PAD1_ID_TEXT_Y + DEVMENU_TEXT_GAP,
DEVMENU_PAD2_STATUS_TEXT_X = DEVMENU_PAD1_RAW_DATA_TEXT_X,
DEVMENU_PAD2_STATUS_TEXT_Y = DEVMENU_PAD1_RAW_DATA_TEXT_Y + (DEVMENU_TEXT_GAP << 1), // Leave a bigger gap here
DEVMENU_PAD2_TYPE_TEXT_X = DEVMENU_PAD2_STATUS_TEXT_X,
DEVMENU_PAD2_TYPE_TEXT_Y = DEVMENU_PAD2_STATUS_TEXT_Y + DEVMENU_TEXT_GAP,
@ -1138,8 +1175,11 @@ void SystemDevMenu(void)
DEVMENU_PAD2_ID_TEXT_X = DEVMENU_PAD2_TYPE_TEXT_X,
DEVMENU_PAD2_ID_TEXT_Y = DEVMENU_PAD2_TYPE_TEXT_Y + DEVMENU_TEXT_GAP,
DEVMENU_ROOTCNT0_TEXT_X = DEVMENU_PAD2_ID_TEXT_X,
DEVMENU_ROOTCNT0_TEXT_Y = DEVMENU_PAD2_ID_TEXT_Y + DEVMENU_TEXT_GAP,
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,
};
if(devmenu_flag == true)
@ -1173,6 +1213,12 @@ void SystemDevMenu(void)
"Pad1 ID = 0x%02X",
PadOneGetID() );
FontPrintText( &SmallFont,
DEVMENU_PAD1_RAW_DATA_TEXT_X,
DEVMENU_PAD1_RAW_DATA_TEXT_Y,
"Pad1 raw data = 0x%04X",
PadOneGetRawData() );
FontPrintText( &SmallFont,
DEVMENU_PAD2_STATUS_TEXT_X,
DEVMENU_PAD2_STATUS_TEXT_Y,
@ -1191,6 +1237,12 @@ void SystemDevMenu(void)
"Pad2 ID = 0x%02X",
PadTwoGetID() );
FontPrintText( &SmallFont,
DEVMENU_PAD2_RAW_DATA_TEXT_X,
DEVMENU_PAD2_RAW_DATA_TEXT_Y,
"Pad2 raw data = 0x%04X",
PadTwoGetRawData() );
FontPrintText( &SmallFont,
DEVMENU_ROOTCNT0_TEXT_X,
DEVMENU_ROOTCNT0_TEXT_Y,

View File

@ -6,9 +6,7 @@
* **************************************/
#include "Global_Inc.h"
#include "Menu.h"
#include "Gfx.h"
#include "MemCard.h"
#include "GameStructures.h"
/* **************************************
* Defines *
@ -128,9 +126,13 @@ void SystemCyclicHandler(void);
void SystemClearBuffer(void);
void SystemEnableVBlankInterrupt();
void SystemEnableVBlankInterrupt(void);
void SystemDisableVBlankInterrupt();
void SystemDisableVBlankInterrupt(void);
void SystemEnableRCnt2Interrupt(void);
void SystemDisableRCnt2Interrupt(void);
void SystemReturnToLoader(void);