aboutsummaryrefslogtreecommitdiff
path: root/arm9/source/devices/screen.h
diff options
context:
space:
mode:
Diffstat (limited to 'arm9/source/devices/screen.h')
-rw-r--r--arm9/source/devices/screen.h100
1 files changed, 49 insertions, 51 deletions
diff --git a/arm9/source/devices/screen.h b/arm9/source/devices/screen.h
index 1ff58e5..48411b7 100644
--- a/arm9/source/devices/screen.h
+++ b/arm9/source/devices/screen.h
@@ -1,70 +1,68 @@
#ifndef SCREEN_H_
#define SCREEN_H_
+ #include "../bang.h"
+
+
+ // Dimension constants.
#define PIXELS_WIDTH 256
#define PIXELS_HEIGHT 192
- #define PIXELS_SIZE 49152
+ #define PIXELS_COUNT (PIXELS_WIDTH*PIXELS_HEIGHT)
#define TILES_WIDTH 32
#define TILES_HEIGHT 24
- #define TILES_SIZE 768
- #define TILES_MEM 24576 // size of a screen layer in bytes
+ #define TILES_COUNT (TILES_WIDTH*TILES_HEIGHT)
+ #define LAYER_MEM (TILES_COUNT*32)
- #define BG_SLOT_VIS 0 // tile base for visible background tiles
- #define FG_SLOT_VIS 2 // tile base for visible foreground tiles
- #define BG_SLOT 4 // tile base for background tiles
- #define FG_SLOT 6 // tile base for foreground tiles
- #define MAP_SLOT 12 // map base for tile map
+ // VRAM addresses.
+ #define BG_SLOT_FRONT 0 // Tile base for background tiles in the front buffer
+ #define FG_SLOT_FRONT 2 // Tile base for foreground tiles in the front buffer
+ #define BG_SLOT_BACK 4 // Tile base for background tiles in the back buffer
+ #define FG_SLOT_BACK 6 // Tile base for foreground tiles in the back buffer
+ #define MAP_SLOT 12 // Map base for tile map
+ // Sprite buffer for the screen device.
typedef struct {
- u8 mem[16]; // buffer memory
- u8 p; // buffer pointer
- u8 sprite[8][8]; // transformed sprite
- bool cached; // true if sprite has been transformed
- u8 draw; // the cached draw byte
+ u8 mem[16]; // Buffer memory
+ u8 p; // Buffer pointer
+ u8 sprite[8][8]; // Cached transformed sprite
+ u8 draw; // Cached draw byte
+ bool cached; // A transformed sprite has been cached
} SpriteBuffer;
+ // Hardware screen on the NDS.
typedef struct {
- u16 *bgv, *fgv; // visible tile memory
- u16 *bg, *fg; // buffered tile memory
- u16 *map; // tile map (never changes)
- u16 *palv; // visible colour palette
- u16 pal[16]; // buffered colour palette
- } Screen;
+ u16 *bgv, *fgv; // Visible tile memory (front buffer)
+ u16 *bg, *fg; // Buffered tile memory (back buffer)
+ u16 *map; // Tile map (never changes)
+ u16 *palv; // Visible colour palette (front buffer)
+ u16 pal[16]; // Buffered colour palette (back buffer)
+ } NDSScreen;
+ // Bedrock screen device.
typedef struct {
- u16 x,y; // cursor position
- u16 px,py; // previous cursor position
- u16 colours; // sprite colours
- SpriteBuffer sprite; // sprite buffer
- u16 palette_write; // palette write cache
- u16 palette[16]; // palette as RGB15 colours
- Screen *nds; // NDS VRAM pointers
- bool wake; // wake flag
- bool dirty; // dirty flag
+ u16 x,y; // Current cursor position
+ u16 px,py; // Previous cursor position
+ u16 selected; // Selected sprite colours
+ SpriteBuffer sprite; // Sprite buffer
+ u16 colour; // Palette colour write cache
+ u16 pal[16]; // Palette as RGB15 colours
+ NDSScreen *nds; // Pointer to hardware screen to draw to.
+ bool wake; // Wake flag
+ bool dirty; // Dirty flag
} ScreenDevice;
- void init_screens(void);
- void scr_make_main(ScreenDevice *scr);
- void scr_make_sub(ScreenDevice *scr);
- void scr_unmake(ScreenDevice *scr);
-
- void set_palette_high(ScreenDevice *scr, u8 high);
- void set_palette_low(ScreenDevice *scr, u8 low);
- void draw_pixel(u16 *layer, u16 x, u16 y, u8 colour);
- void fill_layer(u16 *layer, u8 colour);
- void erase_screen(Screen *nds);
- void flip_buffer(Screen *nds);
- void black_screen(Screen *nds);
-
- void scr_draw_pixel( ScreenDevice *scr, u16 *layer, u8 draw);
- void scr_draw_sprite(ScreenDevice *scr, u16 *layer, u8 draw);
- void scr_fill_layer( ScreenDevice *scr, u16 *layer, u8 draw);
- void scr_draw_line( ScreenDevice *scr, u16 *layer, u8 draw);
- void scr_draw_rect( ScreenDevice *scr, u16 *layer, u8 draw);
-
- void draw_dispatch(ScreenDevice *scr, u8 draw);
- void move_cursor(ScreenDevice *scr, u8 move);
-
- void push_sprite(SpriteBuffer *b, u8 row);
+ // Functions.
+ void init_nds_screens(void);
+ // Methods.
+ void screen_reset(ScreenDevice *screen);
+ void ndsscreen_flip_buffers(NDSScreen *nds);
+ void ndsscreen_clear(NDSScreen *nds);
+ void spritebuf_push(SpriteBuffer *b, u8 row);
+ void screen_map_to_none(ScreenDevice *screen);
+ void screen_map_to_main(ScreenDevice *screen);
+ void screen_map_to_sub(ScreenDevice *screen);
+ void screen_commit_colour(ScreenDevice *screen);
+ void screen_move_cursor(ScreenDevice *screen, u8 move);
+ void screen_draw(ScreenDevice *screen, u8 draw);
#endif