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;