From 87de52a0f884938ee0d0881d30f88f3a41cac0be Mon Sep 17 00:00:00 2001 From: mightymax Date: Tue, 9 Jan 2007 10:18:17 +0000 Subject: [PATCH] added WINDOW_x registers to prepare window clipping --- desmume/src/GPU.c | 24 ++++++++++++++++++++++-- desmume/src/GPU.h | 34 +++++++++++++++++++++++++++++++++- 2 files changed, 55 insertions(+), 3 deletions(-) diff --git a/desmume/src/GPU.c b/desmume/src/GPU.c index 3d0f09c78..3d8568c3d 100644 --- a/desmume/src/GPU.c +++ b/desmume/src/GPU.c @@ -557,6 +557,26 @@ void GPU_setMOSAIC(GPU *gpu, u16 v) gpu->MOSAIC = v ; } +void GPU_setWINDOW_XDIM(GPU *gpu, u16 v, u8 num) +{ + gpu->WINDOW_XDIM[num] = v ; +} + +void GPU_setWINDOW_YDIM(GPU *gpu, u16 v, u8 num) +{ + gpu->WINDOW_YDIM[num] = v ; +} + +void GPU_setWINDOW_INCNT(GPU *gpu, u16 v) +{ + gpu->WINDOW_INCNT.val = v ; +} + +void GPU_setWINDOW_OUTCNT(GPU *gpu, u16 v) +{ + gpu->WINDOW_OUTCNT.val = v ; +} + #ifndef min #define min(a,b) (((a)<(b))?(a):(b)) #endif @@ -702,7 +722,7 @@ INLINE void renderline_textBG(GPU * gpu, u8 num, u8 * DST, u16 X, u16 Y, u16 LG) line += 3 - ((xoff&7)>>1); for(; x < xfin; ) { // XXX - if ((pt % mw) == 0) { /* only update the color we draw every n mw pixels */ + if ((pt % mw) == 0) { /* only update the color we draw every mw pixels */ if (pt & 1) { save = (*line) & 0xF ; } else { @@ -725,7 +745,7 @@ INLINE void renderline_textBG(GPU * gpu, u8 num, u8 * DST, u16 X, u16 Y, u16 LG) u8 pt = 0 ; u8 save = 0; line += ((xoff&7)>>1); - + for(; x < xfin; ) { // XXX if (!(pt % mw)) { /* only update the color we draw every n mw pixels */ diff --git a/desmume/src/GPU.h b/desmume/src/GPU.h index 3ebc1a898..182287ec2 100644 --- a/desmume/src/GPU.h +++ b/desmume/src/GPU.h @@ -121,6 +121,28 @@ typedef struct unsigned attr3:16; } _OAM_; +typedef union windowcnt_t +{ + struct + { +/* 0*/ unsigned WIN0_BG0_Enable:1; +/* 1*/ unsigned WIN0_BG1_Enable:1; +/* 2*/ unsigned WIN0_BG2_Enable:1; +/* 3*/ unsigned WIN0_BG3_Enable:1; +/* 4*/ unsigned WIN0_OBJ_Enabble:1; +/* 5*/ unsigned WIN0_Effect_Enable:1; +/* 6*/ unsigned :2; +/* 8*/ unsigned WIN1_BG0_Enable:1; +/* 9*/ unsigned WIN1_BG1_Enable:1; +/*10*/ unsigned WIN1_BG2_Enable:1; +/*11*/ unsigned WIN1_BG3_Enable:1; +/*12*/ unsigned WIN1_OBJ_Enabble:1; +/*13*/ unsigned WIN1_Effect_Enable:1; +/*14*/ unsigned :2; + } bitfield ; + unsigned short val ; +} windowcnt_t ; + typedef struct { u16 attr0; @@ -185,7 +207,12 @@ struct _GPU u16 BLDALPHA ; u16 BLDY ; u16 MOSAIC ; - + + u16 WINDOW_XDIM[2] ; + u16 WINDOW_YDIM[2] ; + windowcnt_t WINDOW_INCNT ; + windowcnt_t WINDOW_OUTCNT ; + void (*spriteRender)(GPU * gpu, u16 l, u8 * dst, u8 * prioTab); }; @@ -328,6 +355,11 @@ void GPU_setBLDALPHA(GPU *gpu, u16 v) ; void GPU_setBLDY(GPU *gpu, u16 v) ; void GPU_setMOSAIC(GPU *gpu, u16 v) ; +void GPU_setWINDOW_XDIM(GPU *gpu, u16 v, u8 num) ; +void GPU_setWINDOW_YDIM(GPU *gpu, u16 v, u8 num) ; +void GPU_setWINDOW_INCNT(GPU *gpu, u16 v) ; +void GPU_setWINDOW_INCNT(GPU *gpu, u16 v) ; + void GPU_remove(GPU *, u8 num); void GPU_addBack(GPU *, u8 num);