#ifndef IS_GAME_H_ #define IS_GAME_H_ #define _VRAM 0x8000 #define _VRAM8000 _VRAM #define _VRAM8800 (_VRAM + 0x800) #define _VRAM9000 (_VRAM + 0x1000) #define _SCRN0 0x9800 #define _SCRN1 0x9c00 #define SCRN_X 160 #define SCRN_Y 144 #define SCRN_X_B 20 #define SCRN_Y_B 18 #define SCRN_VX 256 #define SCRN_VY 256 #define SCRN_VX_B 32 #define SCRN_VY_B 32 #define SCREEN_HEIGHT_TILES 18 #define SCREEN_WIDTH_TILES 20 #define ALLOC_SIZE_FONT 39 #define ALLOC_SIZE_PLAYER 52 #define ALLOC_SIZE_BACKGROUND 32 #define ALLOC_SIZE_ITEMS 20 #define ALLOC_SIZE_MONSTERS 108 #define TILE_INDEX_FONT 0 #define TILE_INDEX_PLAYER ALLOC_SIZE_FONT #define TILE_INDEX_BACKGROUND (ALLOC_SIZE_FONT + ALLOC_SIZE_PLAYER) #define TILE_INDEX_ITEMS \ (ALLOC_SIZE_FONT + ALLOC_SIZE_PLAYER + ALLOC_SIZE_BACKGROUND) #define TILE_INDEX_MONSTERS \ (ALLOC_SIZE_FONT + ALLOC_SIZE_PLAYER + ALLOC_SIZE_BACKGROUND + \ ALLOC_SIZE_ITEMS) #define TILE_SIZE 16 //!< Size of 1 tile in bytes #define VRAM_TILE_PTR(idx) \ ((void*)(_VRAM + \ (idx)*TILE_SIZE)) //!< Compute VRAM pointer for tile section typedef enum { GAME_STATE_TITLE, GAME_STATE_LEVEL, GAME_STATE_MENU, } game_state_t; extern game_state_t game_state; /** * @brief Render the title screen. */ void title(void); /** * @brief Render the current game level. */ void level(void); /** * @brief Enable interrupts. */ void interrupts_enable(void) __preserves_regs(a, b, c, d, e, h, l); /** * @brief Disable interrupts. */ void interrupts_disable(void) __preserves_regs(a, b, c, d, e, h, l); #endif