156885Sakito /* 256885Sakito * Copyright (c) 1992 OMRON Corporation. 356885Sakito * Copyright (c) 1992 The Regents of the University of California. 456885Sakito * All rights reserved. 556885Sakito * 656885Sakito * This code is derived from software contributed to Berkeley by 756885Sakito * OMRON Corporation. 856885Sakito * 956885Sakito * %sccs.include.redist.c% 1056885Sakito * 11*57218Sakito * @(#)bmd.c 7.3 (Berkeley) 12/19/92 1256885Sakito */ 1356885Sakito /* 1456885Sakito 1556885Sakito * bmd.c --- Bitmap-Display raw-level driver routines 1656885Sakito * 1756885Sakito * by A.Fujita, SEP-09-1992 1856885Sakito */ 1956885Sakito 2056885Sakito 2157108Sakito #include <sys/param.h> 2257108Sakito #include <sys/systm.h> 2356885Sakito 2456885Sakito extern u_short bmdfont[][20]; 2556885Sakito 2656885Sakito #define isprint(c) ( c < 0x20 ? 0 : 1) 2756885Sakito 2856885Sakito /* 2956885Sakito * Width & Hight 3056885Sakito */ 3156885Sakito 3256885Sakito #define PB_WIDTH 2048 /* Plane Width (Bit) */ 3356885Sakito #define PB_HIGHT 1024 /* Plane Hight (Bit) */ 3456885Sakito #define PL_WIDTH 64 /* Plane Width (long) */ 3556885Sakito #define PS_WIDTH 128 /* Plane Width (long) */ 3656885Sakito #define P_WIDTH 256 /* Plane Width (Byte) */ 3756885Sakito 3856885Sakito #define SB_WIDTH 1280 /* Screen Width (Bit) */ 3956885Sakito #define SB_HIGHT 1024 /* Screen Hight (Bit) */ 4056885Sakito #define SL_WIDTH 40 /* Screen Width (Long) */ 4156885Sakito #define S_WIDTH 160 /* Screen Width (Byte) */ 4256885Sakito 4356885Sakito #define FB_WIDTH 12 /* Font Width (Bit) */ 4456885Sakito #define FB_HIGHT 20 /* Font Hight (Bit) */ 4556885Sakito 4656885Sakito 4756885Sakito #define NEXT_LINE(addr) ( addr + (PL_WIDTH * FB_HIGHT) ) 4856885Sakito #define SKIP_NEXT_LINE(addr) ( addr += (PL_WIDTH - SL_WIDTH) ) 4956885Sakito 5056885Sakito 5156885Sakito void bmd_add_new_line(); 5256885Sakito 5356885Sakito void bmd_draw_char(); 5456885Sakito void bmd_reverse_char(); 5556885Sakito void bmd_erase_char(); 5656885Sakito void bmd_erase_screen(); 5756885Sakito void bmd_scroll_screen(); 5856885Sakito 5956885Sakito 6056885Sakito struct bmd_linec { 6156885Sakito struct bmd_linec *bl_next; 6256885Sakito struct bmd_linec *bl_prev; 6356885Sakito int bl_col; 6456885Sakito int bl_end; 6556885Sakito u_char bl_line[128]; 6656885Sakito }; 6756885Sakito 6856885Sakito struct bmd_softc { 6956885Sakito int bc_stat; 7056885Sakito char *bc_raddr; 7156885Sakito char *bc_waddr; 7256885Sakito int bc_xmin; 7356885Sakito int bc_xmax; 7456885Sakito int bc_ymin; 7556885Sakito int bc_ymax; 7656885Sakito int bc_col; 7756885Sakito int bc_row; 7856885Sakito struct bmd_linec *bc_bl; 7956885Sakito char bc_escseq[8]; 8056885Sakito char *bc_esc; 8156885Sakito void (*bc_escape)(); 8256885Sakito }; 8356885Sakito 8456885Sakito #define STAT_NORMAL 0x0000 8556885Sakito #define STAT_ESCAPE 0x0001 8656885Sakito #define STAT_INSERT 0x0100 8756885Sakito 8856885Sakito struct bmd_softc bmd_softc; 8956885Sakito struct bmd_linec bmd_linec[52]; 9056885Sakito 9156885Sakito void bmd_escape(); 9256885Sakito void bmd_escape_0(); 9356885Sakito void bmd_escape_1(); 9456885Sakito 9556885Sakito 9656885Sakito /* 9756885Sakito * Escape-Sequence 9856885Sakito */ 9956885Sakito 10056885Sakito void 10156885Sakito bmd_escape(c) 10256885Sakito int c; 10356885Sakito { 10456885Sakito register struct bmd_softc *bp = &bmd_softc; 10556885Sakito 10656885Sakito switch (c) { 10756885Sakito 10856885Sakito case '[': 10956885Sakito bp->bc_escape = bmd_escape_0; 11056885Sakito break; 11156885Sakito 11256885Sakito default: 11356885Sakito bp->bc_stat &= ~STAT_ESCAPE; 11456885Sakito bp->bc_esc = &bp->bc_escseq[0]; 11556885Sakito bp->bc_escape = bmd_escape; 11656885Sakito break; 11756885Sakito } 11856885Sakito } 11956885Sakito 12056885Sakito void 12156885Sakito bmd_escape_0(c) 12256885Sakito int c; 12356885Sakito { 12456885Sakito register struct bmd_softc *bp = &bmd_softc; 12556885Sakito register struct bmd_linec *bq = bp->bc_bl; 12656885Sakito 12756885Sakito switch (c) { 12856885Sakito 12956885Sakito case 'A': 13056885Sakito if (bp->bc_row > bp->bc_ymin) { 13156885Sakito bp->bc_row--; 13256885Sakito } 13356885Sakito break; 13456885Sakito 13556885Sakito case 'C': 13656885Sakito if (bq->bl_col < bp->bc_xmax - 1) { 13756885Sakito bq->bl_col++; 13856885Sakito } 13956885Sakito break; 14056885Sakito 14156885Sakito case 'K': 14256885Sakito if (bq->bl_col < bp->bc_xmax) { 14356885Sakito register int col; 14456885Sakito for (col = bq->bl_col; col < bp->bc_xmax; col++) 14556885Sakito bmd_erase_char(bp->bc_raddr, 14656885Sakito bp->bc_waddr, 14756885Sakito col, bp->bc_row); 14856885Sakito } 14956885Sakito bq->bl_end = bq->bl_col; 15056885Sakito break; 15156885Sakito 15256885Sakito case 'H': 15356885Sakito bq->bl_col = bq->bl_end = bp->bc_xmin; 15456885Sakito bp->bc_row = bp->bc_ymin; 15556885Sakito break; 15656885Sakito 15756885Sakito default: 15856885Sakito /* 15956885Sakito *bp->bc_esc++ = c; 16056885Sakito bp->bc_escape = bmd_escape_1; 16156885Sakito return; 16256885Sakito */ 16356885Sakito break; 16456885Sakito } 16556885Sakito 16656885Sakito bp->bc_stat &= ~STAT_ESCAPE; 16756885Sakito bp->bc_esc = &bp->bc_escseq[0]; 16856885Sakito bp->bc_escape = bmd_escape; 16956885Sakito } 17056885Sakito 17156885Sakito void 17256885Sakito bmd_escape_1(c) 17356885Sakito int c; 17456885Sakito { 17556885Sakito register struct bmd_softc *bp = &bmd_softc; 17656885Sakito register struct bmd_linec *bq = bp->bc_bl; 17756885Sakito register int col = 0, row = 0; 17856885Sakito register char *p; 17956885Sakito 18056885Sakito switch (c) { 18156885Sakito 18256885Sakito case 'J': 18356885Sakito bp->bc_stat &= ~STAT_ESCAPE; 18456885Sakito bp->bc_esc = &bp->bc_escseq[0]; 18556885Sakito bp->bc_escape = bmd_escape; 18656885Sakito break; 18756885Sakito 18856885Sakito case 'H': 18956885Sakito for (p = &bp->bc_escseq[0]; *p != ';'; p++) 19056885Sakito row = (row * 10) + (*p - 0x30); 19156885Sakito p++; 19256885Sakito for (p = &bp->bc_escseq[0]; p != bp->bc_esc; p++) 19356885Sakito col = (col * 10) + (*p - 0x30); 19456885Sakito 19556885Sakito bq->bl_col = col + bp->bc_xmin; 19656885Sakito bp->bc_row = row + bp->bc_ymin; 19756885Sakito 19856885Sakito bp->bc_stat &= ~STAT_ESCAPE; 19956885Sakito bp->bc_esc = &bp->bc_escseq[0]; 20056885Sakito bp->bc_escape = bmd_escape; 20156885Sakito break; 20256885Sakito 20356885Sakito default: 20456885Sakito *bp->bc_esc++ = c; 20556885Sakito break; 20656885Sakito } 20756885Sakito } 20856885Sakito 20956885Sakito 21056885Sakito /* 21156885Sakito * Entry Routine 21256885Sakito */ 21356885Sakito 21456885Sakito bmdinit() 21556885Sakito { 21656885Sakito register struct bmd_softc *bp = &bmd_softc; 21756885Sakito register struct bmd_linec *bq; 21856885Sakito register int i; 21956885Sakito 220*57218Sakito bp->bc_raddr = (char *) 0xB10C0008; /* plane-0 hardware address */ 221*57218Sakito bp->bc_waddr = (char *) 0xB1080008; /* common bitmap hardware address */ 222*57218Sakito 22356885Sakito /* 22456885Sakito * adjust plane position 22556885Sakito */ 22656885Sakito 227*57218Sakito fb_adjust(7, -27); 22856885Sakito 22956885Sakito bp->bc_stat = STAT_NORMAL; 23056885Sakito 23156885Sakito bp->bc_xmin = 8; 23256885Sakito bp->bc_xmax = 96; 23356885Sakito bp->bc_ymin = 2; 23456885Sakito bp->bc_ymax = 48; 23556885Sakito 23656885Sakito bp->bc_row = bp->bc_ymin; 23756885Sakito 23856885Sakito for (i = bp->bc_ymin; i < bp->bc_ymax; i++) { 23956885Sakito bmd_linec[i].bl_next = &bmd_linec[i+1]; 24056885Sakito bmd_linec[i].bl_prev = &bmd_linec[i-1]; 24156885Sakito } 24256885Sakito bmd_linec[bp->bc_ymax-1].bl_next = &bmd_linec[bp->bc_ymin]; 24356885Sakito bmd_linec[bp->bc_ymin].bl_prev = &bmd_linec[bp->bc_ymax-1]; 24456885Sakito 24556885Sakito bq = bp->bc_bl = &bmd_linec[bp->bc_ymin]; 24656885Sakito bq->bl_col = bq->bl_end = bp->bc_xmin; 24756885Sakito 24856885Sakito bp->bc_col = bp->bc_xmin; 24956885Sakito 25056885Sakito bp->bc_esc = &bp->bc_escseq[0]; 25156885Sakito bp->bc_escape = bmd_escape; 25256885Sakito 25356885Sakito bmd_erase_screen((u_long *) bp->bc_waddr); /* clear screen */ 25456885Sakito 25556885Sakito /* turn on cursole */ 25656885Sakito bmd_reverse_char(bp->bc_raddr, 25756885Sakito bp->bc_waddr, 25856885Sakito bq->bl_col, bp->bc_row); 25956885Sakito } 26056885Sakito 26156885Sakito bmdputc(c) 26256885Sakito register int c; 26356885Sakito { 26456885Sakito register struct bmd_softc *bp = &bmd_softc; 26556885Sakito register struct bmd_linec *bq = bp->bc_bl; 26656885Sakito register int i; 26756885Sakito 26856885Sakito c &= 0x7F; 26956885Sakito /* turn off cursole */ 27056885Sakito bmd_reverse_char(bp->bc_raddr, 27156885Sakito bp->bc_waddr, 27256885Sakito bq->bl_col, bp->bc_row); 27356885Sakito /* do escape-sequence */ 27456885Sakito if (bp->bc_stat & STAT_ESCAPE) { 27556885Sakito *bp->bc_esc++ = c; 27656885Sakito (*bp->bc_escape)(c); 27756885Sakito goto done; 27856885Sakito } 27956885Sakito 28056885Sakito if (isprint(c)) { 28156885Sakito bmd_draw_char(bp->bc_raddr, bp->bc_waddr, 28256885Sakito bq->bl_col, bp->bc_row, c); 28356885Sakito bq->bl_col++; 28456885Sakito bq->bl_end++; 28556885Sakito if (bq->bl_col >= bp->bc_xmax) { 28656885Sakito bq->bl_col = bq->bl_end = bp->bc_xmin; 28756885Sakito bp->bc_row++; 28856885Sakito if (bp->bc_row >= bp->bc_ymax) { 28956885Sakito bmd_scroll_screen((u_long *) bp->bc_raddr, 29056885Sakito (u_long *) bp->bc_waddr, 29156885Sakito bp->bc_xmin, bp->bc_xmax, 29256885Sakito bp->bc_ymin, bp->bc_ymax); 29356885Sakito 29456885Sakito bp->bc_row = bp->bc_ymax - 1; 29556885Sakito } 29656885Sakito } 29756885Sakito } else { 29856885Sakito switch (c) { 29956885Sakito case 0x08: /* BS */ 30056885Sakito if (bq->bl_col > bp->bc_xmin) { 30156885Sakito bq->bl_col--; 30256885Sakito } 30356885Sakito break; 30456885Sakito 30556885Sakito case 0x09: /* HT */ 30656885Sakito case 0x0B: /* VT */ 30756885Sakito i = ((bq->bl_col / 8) + 1) * 8; 30856885Sakito if (i < bp->bc_xmax) { 30956885Sakito bq->bl_col = bq->bl_end = i; 31056885Sakito } 31156885Sakito break; 31256885Sakito 31356885Sakito case 0x0A: /* NL */ 31456885Sakito bp->bc_row++; 31556885Sakito if (bp->bc_row >= bp->bc_ymax) { 31656885Sakito bmd_scroll_screen((u_long *) bp->bc_raddr, 31756885Sakito (u_long *) bp->bc_waddr, 31856885Sakito bp->bc_xmin, bp->bc_xmax, 31956885Sakito bp->bc_ymin, bp->bc_ymax); 32056885Sakito 32156885Sakito bp->bc_row = bp->bc_ymax - 1; 32256885Sakito } 32356885Sakito break; 32456885Sakito 32556885Sakito case 0x0D: /* CR */ 32656885Sakito bq->bl_col = bp->bc_xmin; 32756885Sakito break; 32856885Sakito 32956885Sakito case 0x1b: /* ESC */ 33056885Sakito bp->bc_stat |= STAT_ESCAPE; 33156885Sakito *bp->bc_esc++ = 0x1b; 33256885Sakito break; 33356885Sakito 33456885Sakito case 0x7F: /* DEL */ 33556885Sakito if (bq->bl_col > bp->bc_xmin) { 33656885Sakito bq->bl_col--; 33756885Sakito bmd_erase_char(bp->bc_raddr, 33856885Sakito bp->bc_waddr, 33956885Sakito bq->bl_col, bp->bc_row); 34056885Sakito } 34156885Sakito break; 34256885Sakito 34356885Sakito default: 34456885Sakito break; 34556885Sakito } 34656885Sakito } 34756885Sakito 34856885Sakito done: 34956885Sakito /* turn on cursole */ 35056885Sakito bmd_reverse_char(bp->bc_raddr, 35156885Sakito bp->bc_waddr, 35256885Sakito bq->bl_col, bp->bc_row); 35356885Sakito 35456885Sakito return(c); 35556885Sakito } 35656885Sakito 35756885Sakito bmdclear() 35856885Sakito { 35956885Sakito register struct bmd_softc *bp = &bmd_softc; 36056885Sakito register struct bmd_linec *bq = bp->bc_bl; 36156885Sakito 36256885Sakito bmd_erase_screen((u_long *) bp->bc_waddr); /* clear screen */ 36356885Sakito 36456885Sakito bq->bl_col = bq->bl_end = bp->bc_xmin; 36556885Sakito bp->bc_row = bp->bc_ymin; 36656885Sakito 36756885Sakito bmd_reverse_char(bp->bc_raddr, 36856885Sakito bp->bc_waddr, 36956885Sakito bq->bl_col, bp->bc_row); /* turn on cursole */ 37056885Sakito } 37156885Sakito 37256885Sakito 37356885Sakito /* 37456885Sakito * 37556885Sakito */ 37656885Sakito 37756885Sakito void 37856885Sakito bmd_add_new_line() 37956885Sakito { 38056885Sakito } 38156885Sakito 38256885Sakito 38356885Sakito /* 38456885Sakito * charactor operation routines 38556885Sakito */ 38656885Sakito 38756885Sakito void 38856885Sakito bmd_draw_char(raddr, waddr, col, row, c) 38956885Sakito char *raddr; 39056885Sakito char *waddr; 39156885Sakito int col; 39256885Sakito int row; 39356885Sakito int c; 39456885Sakito { 39556885Sakito volatile register u_short *p, *q, *fp; 39656885Sakito volatile register u_long *lp, *lq; 39756885Sakito register int i; 39856885Sakito 39956885Sakito fp = &bmdfont[c][0]; 40056885Sakito 40156885Sakito switch (col % 4) { 40256885Sakito 40356885Sakito case 0: 40456885Sakito p = (u_short *) ( raddr + (( row * FB_HIGHT ) << 8 ) + (( col / 4 ) * 6 )); 40556885Sakito q = (u_short *) ( waddr + (( row * FB_HIGHT ) << 8 ) + (( col / 4 ) * 6 )); 40656885Sakito for (i = 0; i < FB_HIGHT; i++) { 40756885Sakito *q = (*p & 0x000F) | (*fp & 0xFFF0); 40856885Sakito p += 128; 40956885Sakito q += 128; 41056885Sakito fp++; 41156885Sakito } 41256885Sakito break; 41356885Sakito 41456885Sakito case 1: 41556885Sakito lp = (u_long *) ( raddr + (( row * FB_HIGHT ) << 8 ) + (( col / 4 ) * 6 )); 41656885Sakito lq = (u_long *) ( waddr + (( row * FB_HIGHT ) << 8 ) + (( col / 4 ) * 6 )); 41756885Sakito for (i = 0; i < FB_HIGHT; i++) { 41856885Sakito *lq = (*lp & 0xFFF000FF) | ((u_long)(*fp & 0xFFF0) << 4); 41956885Sakito lp += 64; 42056885Sakito lq += 64; 42156885Sakito fp++; 42256885Sakito } 42356885Sakito break; 42456885Sakito 42556885Sakito case 2: 42656885Sakito lp = (u_long *) ( raddr + (( row * FB_HIGHT ) << 8 ) + (( col / 4 ) * 6 ) + 2 ); 42756885Sakito lq = (u_long *) ( waddr + (( row * FB_HIGHT ) << 8 ) + (( col / 4 ) * 6 ) + 2 ); 42856885Sakito for (i = 0; i < FB_HIGHT; i++) { 42956885Sakito *lq = (*lp & 0xFF000FFF) | ((u_long)(*fp & 0xFFF0) << 8); 43056885Sakito lp += 64; 43156885Sakito lq += 64; 43256885Sakito fp++; 43356885Sakito } 43456885Sakito break; 43556885Sakito 43656885Sakito case 3: 43756885Sakito p = (u_short *) ( raddr + (( row * FB_HIGHT ) << 8 ) + (( col / 4 ) * 6 ) + 4 ); 43856885Sakito q = (u_short *) ( waddr + (( row * FB_HIGHT ) << 8 ) + (( col / 4 ) * 6 ) + 4 ); 43956885Sakito for (i = 0; i < FB_HIGHT; i++) { 44056885Sakito *q = (*p & 0xF000) | ((*fp & 0xFFF0) >> 4); 44156885Sakito p += 128; 44256885Sakito q += 128; 44356885Sakito fp++; 44456885Sakito } 44556885Sakito break; 44656885Sakito 44756885Sakito default: 44856885Sakito break; 44956885Sakito } 45056885Sakito } 45156885Sakito 45256885Sakito void 45356885Sakito bmd_reverse_char(raddr, waddr, col, row) 45456885Sakito char *raddr; 45556885Sakito char *waddr; 45656885Sakito int col; 45756885Sakito int row; 45856885Sakito { 45956885Sakito volatile register u_short *p, *q, us; 46056885Sakito volatile register u_long *lp, *lq, ul; 46156885Sakito register int i; 46256885Sakito 46356885Sakito switch (col%4) { 46456885Sakito 46556885Sakito case 0: 46656885Sakito p = (u_short *) ( raddr + (( row * FB_HIGHT ) << 8 ) + (( col / 4 ) * 6 )); 46756885Sakito q = (u_short *) ( waddr + (( row * FB_HIGHT ) << 8 ) + (( col / 4 ) * 6 )); 46856885Sakito for (i = 0; i < FB_HIGHT; i++) { 46956885Sakito *q = (*p & 0x000F) | (~(*p) & 0xFFF0); 47056885Sakito p += 128; 47156885Sakito q += 128; 47256885Sakito } 47356885Sakito break; 47456885Sakito 47556885Sakito case 1: 47656885Sakito lp = (u_long *) ( raddr + (( row * FB_HIGHT ) << 8 ) + (( col / 4 ) * 6 )); 47756885Sakito lq = (u_long *) ( waddr + (( row * FB_HIGHT ) << 8 ) + (( col / 4 ) * 6 )); 47856885Sakito for (i = 0; i < FB_HIGHT; i++) { 47956885Sakito *lq = (*lp & 0xFFF000FF) | (~(*lp) & 0x000FFF00); 48056885Sakito lp += 64; 48156885Sakito lq += 64; 48256885Sakito } 48356885Sakito break; 48456885Sakito 48556885Sakito case 2: 48656885Sakito lp = (u_long *) ( raddr + (( row * FB_HIGHT ) << 8 ) + (( col / 4 ) * 6 ) + 2 ); 48756885Sakito lq = (u_long *) ( waddr + (( row * FB_HIGHT ) << 8 ) + (( col / 4 ) * 6 ) + 2 ); 48856885Sakito for (i = 0; i < FB_HIGHT; i++) { 48956885Sakito *lq = (*lp & 0xFF000FFF) | (~(*lp) & 0x00FFF000); 49056885Sakito lp += 64; 49156885Sakito lq += 64; 49256885Sakito } 49356885Sakito break; 49456885Sakito 49556885Sakito case 3: 49656885Sakito p = (u_short *) ( raddr + (( row * FB_HIGHT ) << 8 ) + (( col / 4 ) * 6 ) + 4 ); 49756885Sakito q = (u_short *) ( waddr + (( row * FB_HIGHT ) << 8 ) + (( col / 4 ) * 6 ) + 4 ); 49856885Sakito for (i = 0; i < FB_HIGHT; i++) { 49956885Sakito *q = (*p & 0xF000) | (~(*p) & 0x0FFF); 50056885Sakito p += 128; 50156885Sakito q += 128; 50256885Sakito } 50356885Sakito break; 50456885Sakito 50556885Sakito default: 50656885Sakito break; 50756885Sakito } 50856885Sakito } 50956885Sakito 51056885Sakito void 51156885Sakito bmd_erase_char(raddr, waddr, col, row) 51256885Sakito char *raddr; 51356885Sakito char *waddr; 51456885Sakito int col; 51556885Sakito int row; 51656885Sakito { 51756885Sakito bmd_draw_char(raddr, waddr, col, row, 0); 51856885Sakito 51956885Sakito return; 52056885Sakito } 52156885Sakito 52256885Sakito 52356885Sakito /* 52456885Sakito * screen operation routines 52556885Sakito */ 52656885Sakito 52756885Sakito void 52856885Sakito bmd_erase_screen(lp) 52956885Sakito volatile register u_long *lp; 53056885Sakito { 53156885Sakito register int i, j; 53256885Sakito 53356885Sakito for (i = 0; i < SB_HIGHT; i++) { 53456885Sakito for (j = 0; j < SL_WIDTH; j++) 53556885Sakito *lp++ = 0; 53656885Sakito SKIP_NEXT_LINE(lp); 53756885Sakito } 53856885Sakito 53956885Sakito return; 54056885Sakito } 54156885Sakito 54256885Sakito void 54356885Sakito bmd_scroll_screen(lp, lq, xmin, xmax, ymin, ymax) 54456885Sakito volatile register u_long *lp; 54556885Sakito volatile register u_long *lq; 54656885Sakito int xmin, xmax, ymin, ymax; 54756885Sakito { 54856885Sakito register int i, j; 54956885Sakito 55056885Sakito lp += ((PL_WIDTH * FB_HIGHT) * (ymin + 1)); 55156885Sakito lq += ((PL_WIDTH * FB_HIGHT) * ymin); 55256885Sakito 55356885Sakito for (i = 0; i < ((ymax - ymin -1) * FB_HIGHT); i++) { 55456885Sakito for (j = 0; j < SL_WIDTH; j++) { 55556885Sakito *lq++ = *lp++; 55656885Sakito } 55756885Sakito lp += (PL_WIDTH - SL_WIDTH); 55856885Sakito lq += (PL_WIDTH - SL_WIDTH); 55956885Sakito } 56056885Sakito 56156885Sakito for (i = 0; i < FB_HIGHT; i++) { 56256885Sakito for (j = 0; j < SL_WIDTH; j++) { 56356885Sakito *lq++ = 0; 56456885Sakito } 56556885Sakito lq += (PL_WIDTH - SL_WIDTH); 56656885Sakito } 56756885Sakito 56856885Sakito } 569