diff options
author | Ben Bridle <ben@derelict.engineering> | 2024-11-18 14:57:19 +1300 |
---|---|---|
committer | Ben Bridle <ben@derelict.engineering> | 2024-11-18 14:57:19 +1300 |
commit | 722d5509178fa5bdaa488fbbd9196f21377f8775 (patch) | |
tree | 112b39cd80cb8e074d9e71d1def4d8de33c9eefa /arm9/source/devices/screen.h | |
download | bedrock-nds-722d5509178fa5bdaa488fbbd9196f21377f8775.zip |
Initial commit
Diffstat (limited to 'arm9/source/devices/screen.h')
-rw-r--r-- | arm9/source/devices/screen.h | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/arm9/source/devices/screen.h b/arm9/source/devices/screen.h new file mode 100644 index 0000000..a406051 --- /dev/null +++ b/arm9/source/devices/screen.h @@ -0,0 +1,66 @@ +#ifndef SCREEN_H_ + #define SCREEN_H_ + + #define PIXELS_WIDTH 256 + #define PIXELS_HEIGHT 192 + #define PIXELS_SIZE 49152 + #define TILES_WIDTH 32 + #define TILES_HEIGHT 24 + #define TILES_SIZE 768 + #define TILES_MEM 24576 // size of a screen layer in bytes + + #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 + + 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 + } SpriteBuffer; + + typedef struct { + u16 *bgv, *fgv; // visible tile memory + u16 *bg, *fg; // tile memory + u16 *map; // tile map + u16 *pal; // colour palette + } Screen; + + 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 + } ScreenDevice; + + void init_screens(void); + + 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); + +#endif |