New tool chain reordered the global arrays for the high score values and the champion's initials, therefore I packed them into a struct to prevent further annoyances.

This commit is contained in:
Christian Kroll 2012-03-23 23:21:46 +00:00
parent 6f084a5923
commit 6743221e8e
3 changed files with 36 additions and 28 deletions

View File

@ -8,11 +8,8 @@
#include "../../compat/eeprom.h" #include "../../compat/eeprom.h"
#include "highscore.h" #include "highscore.h"
// global array for the high score
uint16_t tetris_highscore[TETRIS_HISCORE_END] EEMEM;
// global array for the champion's initials tetris_highscore_table_t g_highScoreTable EEMEM;
uint16_t tetris_highscore_name[TETRIS_HISCORE_END] EEMEM;
uint16_t tetris_highscore_inputName(void) uint16_t tetris_highscore_inputName(void)
@ -95,11 +92,11 @@ uint16_t tetris_highscore_inputName(void)
} }
uint16_t tetris_highscore_retrieveHighscore(tetris_highscore_index_t nIndex) uint16_t tetris_highscore_retrieveHighScore(tetris_highscore_index_t nIndex)
{ {
uint16_t nHighscore = uint16_t nHighScore =
eeprom_read_word(&tetris_highscore[nIndex]); eeprom_read_word(&g_highScoreTable.nHighScore[nIndex]);
// a score of 65535 is most likely caused by uninitialized EEPROM addresses // a score of 65535 is most likely caused by uninitialized EEPROM addresses
return nHighscore == UINT16_MAX ? 0 : nHighscore; return nHighScore == UINT16_MAX ? 0 : nHighScore;
} }

View File

@ -8,7 +8,7 @@
/** /**
* indexes for different tetris variants * indexes for different tetris variants
*/ */
enum tetris_highscore_index enum tetris_highscore_index_e
{ {
TETRIS_HISCORE_TETRIS, /**< high score index for the standard variant */ TETRIS_HISCORE_TETRIS, /**< high score index for the standard variant */
TETRIS_HISCORE_BASTET, /**< high score index for the bastet variant */ TETRIS_HISCORE_BASTET, /**< high score index for the bastet variant */
@ -23,10 +23,21 @@ enum tetris_highscore_index
#endif #endif
// global array for the high score /**
extern uint16_t tetris_highscore[TETRIS_HISCORE_END] EEMEM; * type for global high score table
// global array for the champion's initials */
extern uint16_t tetris_highscore_name[TETRIS_HISCORE_END] EEMEM; typedef struct tetris_highscore_table_s
{
uint16_t nHighScoreName[TETRIS_HISCORE_END]; /**< champions' initials */
uint16_t nHighScore[TETRIS_HISCORE_END]; /**< actual high scores */
}
tetris_highscore_table_t;
/**
* the actual high score table
*/
extern tetris_highscore_table_t g_highScoreTable EEMEM;
/** /**
@ -41,7 +52,7 @@ uint16_t tetris_highscore_inputName(void);
* @param nIndex the variant dependent index of the high score * @param nIndex the variant dependent index of the high score
* @return the high score * @return the high score
*/ */
uint16_t tetris_highscore_retrieveHighscore(tetris_highscore_index_t nIndex); uint16_t tetris_highscore_retrieveHighScore(tetris_highscore_index_t nIndex);
/** /**
@ -50,12 +61,12 @@ uint16_t tetris_highscore_retrieveHighscore(tetris_highscore_index_t nIndex);
* @param nHighscoreName the high score * @param nHighscoreName the high score
*/ */
inline static inline static
void tetris_highscore_saveHighscore(tetris_highscore_index_t nIndex, void tetris_highscore_saveHighScore(tetris_highscore_index_t nIndex,
uint16_t nHighscore) uint16_t nHighScore)
{ {
if (nHighscore > tetris_highscore_retrieveHighscore(nIndex)) if (nHighScore > tetris_highscore_retrieveHighScore(nIndex))
{ {
eeprom_write_word(&tetris_highscore[nIndex], nHighscore); eeprom_write_word(&g_highScoreTable.nHighScore[nIndex], nHighScore);
} }
} }
@ -66,12 +77,12 @@ void tetris_highscore_saveHighscore(tetris_highscore_index_t nIndex,
* @return the initials of the champion packed into a uint16_t * @return the initials of the champion packed into a uint16_t
*/ */
inline static inline static
uint16_t tetris_highscore_retrieveHighscoreName(tetris_highscore_index_t nIdx) uint16_t tetris_highscore_retrieveHighScoreName(tetris_highscore_index_t nIdx)
{ {
uint16_t nHighscoreName = uint16_t nHighScoreName =
eeprom_read_word(&tetris_highscore_name[nIdx]); eeprom_read_word(&g_highScoreTable.nHighScoreName[nIdx]);
return nHighscoreName; return nHighScoreName;
} }
@ -81,10 +92,10 @@ uint16_t tetris_highscore_retrieveHighscoreName(tetris_highscore_index_t nIdx)
* @param nHighscoreName the initials of the champion packed into a uint16_t * @param nHighscoreName the initials of the champion packed into a uint16_t
*/ */
inline static inline static
void tetris_highscore_saveHighscoreName(tetris_highscore_index_t nIndex, void tetris_highscore_saveHighScoreName(tetris_highscore_index_t nIndex,
uint16_t nHighscoreName) uint16_t nHighscoreName)
{ {
eeprom_write_word(&tetris_highscore_name[nIndex], nHighscoreName); eeprom_write_word(&g_highScoreTable.nHighScoreName[nIndex], nHighscoreName);
} }

View File

@ -31,9 +31,9 @@ void tetris_main(tetris_variant_t const *const pVariantMethods)
tetris_highscore_index_t nHighscoreIndex = tetris_highscore_index_t nHighscoreIndex =
pVariantMethods->getHighscoreIndex(pVariantData); pVariantMethods->getHighscoreIndex(pVariantData);
uint16_t nHighscore = uint16_t nHighscore =
tetris_highscore_retrieveHighscore(nHighscoreIndex); tetris_highscore_retrieveHighScore(nHighscoreIndex);
uint16_t nHighscoreName = uint16_t nHighscoreName =
tetris_highscore_retrieveHighscoreName(nHighscoreIndex); tetris_highscore_retrieveHighScoreName(nHighscoreIndex);
// the view only monitors the variant data and the bucket object for the // the view only monitors the variant data and the bucket object for the
// game status so we must put information like the next piece or the current // game status so we must put information like the next piece or the current
@ -195,8 +195,8 @@ void tetris_main(tetris_variant_t const *const pVariantMethods)
{ {
nHighscore = nScore; nHighscore = nScore;
nHighscoreName = tetris_highscore_inputName(); nHighscoreName = tetris_highscore_inputName();
tetris_highscore_saveHighscore(nHighscoreIndex, nHighscore); tetris_highscore_saveHighScore(nHighscoreIndex, nHighscore);
tetris_highscore_saveHighscoreName(nHighscoreIndex, nHighscoreName); tetris_highscore_saveHighScoreName(nHighscoreIndex, nHighscoreName);
} }
// cleanup // cleanup