diff src/cs/drivers/drv_app/r2d/lcds/c139/r2d_task_i.c @ 47:502a0a3f6a49

C139 LCD support reinstated in the new way
author Mychaela Falconia <falcon@freecalypso.org>
date Sun, 18 Oct 2020 02:03:10 +0000
parents 4e78acac3d88
children 4221c724c664
line wrap: on
line diff
--- a/src/cs/drivers/drv_app/r2d/lcds/c139/r2d_task_i.c	Sat Oct 17 22:50:15 2020 +0000
+++ b/src/cs/drivers/drv_app/r2d/lcds/c139/r2d_task_i.c	Sun Oct 18 02:03:10 2020 +0000
@@ -39,42 +39,39 @@
 {
 }
 
-static int get_pix_from_sw_fb(UINT32 *fb, UINT16 x, UINT16 y)
-{
-	UINT32 *p, mask;
-	UINT16 yword, ybit;
-
-	/* mirroring */
-	x = R2D_WIDTH - 1 - x;
-	y = R2D_HEIGHT - 1 - y;
-	yword = y >> 5;
-	ybit = y & 31;
-	p = fb + x * R2D_MWHEIGHT + yword;
-	mask = 1 << ybit;
-	if (*p & mask)
-		return(1);
-	else
-		return(0);
-}
-
 void r2d_refresh(void)
 {
-	UINT16 x, y;
-	UINT32 *fb;
+	UINT16 i, j, k;
+	UINT32 v;
+	UINT32 *p;
+	INT16 y1, y2;
 
-	fb = r2d_g_framebuffer->p_memory_words;
+	p=r2d_g_framebuffer->p_memory_words;
+    
+	y1=r2d_update_ul_y; //0
+	y2=r2d_update_br_y; //63
+
+	/* set window area */
+	c139_set_lcd_addr_region(0, 95, y1, y2);
+
+	p=p+y1*R2D_MWWIDTH;
 
-	/* set the LCD up to refresh the 84x48 area */
-	c139_set_lcd_addr_region(6, 89, 8, 55);
-	/* send the pixels */
-	for (y = 0; y < R2D_HEIGHT; y++) {
-		for (x = 0; x < R2D_WIDTH; x++) {
-			if (get_pix_from_sw_fb(fb, x, y))
-				c139_lcd_send_pix(LCD16_COLOR_BLACK);
-			else
-				c139_lcd_send_pix(LCD16_COLOR_WHITE);
-		}
-	}
+	for (i=y1;i<=y2;i++)
+	{
+		for (j = 0; j < R2D_MWWIDTH-1; j++)
+		{
+			v=*p++;
+			for (k=0;k<32;k++)
+			{
+				if (v&1)
+					c139_lcd_send_pix(LCD16_COLOR_BLACK);
+				else
+					c139_lcd_send_pix(LCD16_COLOR_WHITE);
+				v=v>>1;
+			}
+		}	    
+		p++;
+	} 
 
 	r2d_reinit_update_region();
 }