gbasys
diff src/gfx.c @ 8:047c61960005
- added bg2 matrix support
- changed some stupid const pointers to register addresses to hardcoded compile-time defines
author | John Tsiombikas <nuclear@member.fsf.org> |
---|---|
date | Sun, 22 Jun 2014 06:26:11 +0300 |
parents | f77381b12726 |
children | 85f219fcdc82 |
line diff
1.1 --- a/src/gfx.c Tue Sep 04 05:05:50 2012 +0300 1.2 +++ b/src/gfx.c Sun Jun 22 06:26:11 2014 +0300 1.3 @@ -35,8 +35,13 @@ 1.4 #define BG2_ENABLE 0x400 1.5 #define BG3_ENABLE 0x800 1.6 1.7 -static volatile unsigned short *reg_disp_ctl = (void*)0x4000000; 1.8 -static volatile unsigned short *reg_vcount = (void*)0x4000006; 1.9 +#define REG_DISPCTL (*(unsigned short*)0x4000000) 1.10 +#define REG_VCOUNT (*(unsigned short*)0x4000006) 1.11 + 1.12 +#define REG_BG2PA (*(short*)0x4000020) 1.13 +#define REG_BG2PB (*(short*)0x4000022) 1.14 +#define REG_BG2PC (*(short*)0x4000024) 1.15 +#define REG_BG2PD (*(short*)0x4000026) 1.16 1.17 static unsigned short *paladdr = (void*)0x5000000; 1.18 1.19 @@ -49,8 +54,8 @@ 1.20 struct pixel_buffer *front_buffer = &fbuf; 1.21 struct pixel_buffer *back_buffer = &bbuf; 1.22 1.23 -#define show_page(n) ((n) ? (*reg_disp_ctl |= FRAME_SEL_BIT) : (*reg_disp_ctl &= ~FRAME_SEL_BIT)) 1.24 -#define swap_page() (*reg_disp_ctl ^= FRAME_SEL_BIT) 1.25 +#define show_page(n) ((n) ? (REG_DISPCTL |= FRAME_SEL_BIT) : (REG_DISPCTL &= ~FRAME_SEL_BIT)) 1.26 +#define swap_page() (REG_DISPCTL ^= FRAME_SEL_BIT) 1.27 1.28 int set_video_mode(int mode, int double_buffering) { 1.29 if(mode < 3 || mode > 5) return -1; 1.30 @@ -61,7 +66,7 @@ 1.31 1.32 sizeof_pixel = (mode == 4) ? 1 : 2; 1.33 1.34 - *reg_disp_ctl = mode | BG2_ENABLE; 1.35 + REG_DISPCTL = mode | BG2_ENABLE; 1.36 1.37 show_page(0); 1.38 1.39 @@ -178,6 +183,19 @@ 1.40 paladdr[idx] = RGB(r, g, b); 1.41 } 1.42 1.43 +void set_bg_matrix(int a, int b, int c, int d) 1.44 +{ 1.45 + REG_BG2PA = a; 1.46 + REG_BG2PB = b; 1.47 + REG_BG2PC = c; 1.48 + REG_BG2PD = d; 1.49 +} 1.50 + 1.51 +void set_bg_scale(int x, int y) 1.52 +{ 1.53 + set_bg_matrix(x, 0, 0, y); 1.54 +} 1.55 + 1.56 void draw_line(int x1, int y1, int x2, int y2, unsigned short col, struct pixel_buffer *pbuf) { 1.57 int dx, dy, dx2, dy2; 1.58 int x_inc, y_inc;