Changeset 516ff92 in mainline for kernel/genarch/src/fb/fb.c
- Timestamp:
- 2009-01-31T21:27:18Z (16 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 4863e50b
- Parents:
- 96a2e45
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/genarch/src/fb/fb.c
r96a2e45 r516ff92 185 185 * 186 186 */ 187 static void logo_hide( void)187 static void logo_hide(bool silent) 188 188 { 189 189 ylogo = 0; 190 190 ytrim = yres; 191 191 rowtrim = rows; 192 fb_redraw(); 192 if (!silent) 193 fb_redraw(); 193 194 } 194 195 … … 197 198 * 198 199 */ 199 static void glyph_draw(uint8_t glyph, unsigned int col, unsigned int row )200 static void glyph_draw(uint8_t glyph, unsigned int col, unsigned int row, bool silent) 200 201 { 201 202 unsigned int x = COL2X(col); … … 204 205 205 206 if (y >= ytrim) 206 logo_hide( );207 logo_hide(silent); 207 208 208 209 backbuf[BB_POS(col, row)] = glyph; 209 210 210 for (yd = 0; yd < FONT_SCANLINES; yd++) 211 memcpy(&fb_addr[FB_POS(x, y + yd + ylogo)], 212 &glyphs[GLYPH_POS(glyph, yd)], glyphscanline); 211 if (!silent) { 212 for (yd = 0; yd < FONT_SCANLINES; yd++) 213 memcpy(&fb_addr[FB_POS(x, y + yd + ylogo)], 214 &glyphs[GLYPH_POS(glyph, yd)], glyphscanline); 215 } 213 216 } 214 217 … … 218 221 * 219 222 */ 220 static void screen_scroll( void)223 static void screen_scroll(bool silent) 221 224 { 222 225 if (ylogo > 0) { 223 logo_hide( );226 logo_hide(silent); 224 227 return; 225 228 } 226 229 227 unsigned int row; 228 229 for (row = 0; row < rows; row++) { 230 unsigned int y = ROW2Y(row); 231 unsigned int yd; 230 if (!silent) { 231 unsigned int row; 232 232 233 for ( yd = 0; yd < FONT_SCANLINES; yd++) {234 unsigned int x;235 unsigned int col;233 for (row = 0; row < rows; row++) { 234 unsigned int y = ROW2Y(row); 235 unsigned int yd; 236 236 237 for ( col = 0, x = 0; col < cols; col++,238 x += FONT_WIDTH) {239 u int8_t glyph;237 for (yd = 0; yd < FONT_SCANLINES; yd++) { 238 unsigned int x; 239 unsigned int col; 240 240 241 if (row < rows - 1) { 242 if (backbuf[BB_POS(col, row)] == 243 backbuf[BB_POS(col, row + 1)]) 244 continue; 241 for (col = 0, x = 0; col < cols; col++, 242 x += FONT_WIDTH) { 243 uint8_t glyph; 245 244 246 glyph = backbuf[BB_POS(col, row + 1)]; 247 } else 248 glyph = 0; 249 250 memcpy(&fb_addr[FB_POS(x, y + yd)], 251 &glyphs[GLYPH_POS(glyph, yd)], 252 glyphscanline); 245 if (row < rows - 1) { 246 if (backbuf[BB_POS(col, row)] == 247 backbuf[BB_POS(col, row + 1)]) 248 continue; 249 250 glyph = backbuf[BB_POS(col, row + 1)]; 251 } else 252 glyph = 0; 253 254 memcpy(&fb_addr[FB_POS(x, y + yd)], 255 &glyphs[GLYPH_POS(glyph, yd)], 256 glyphscanline); 257 } 253 258 } 254 259 } … … 260 265 261 266 262 static void cursor_put( void)263 { 264 glyph_draw(CURSOR, position % cols, position / cols );265 } 266 267 268 static void cursor_remove( void)269 { 270 glyph_draw(0, position % cols, position / cols );267 static void cursor_put(bool silent) 268 { 269 glyph_draw(CURSOR, position % cols, position / cols, silent); 270 } 271 272 273 static void cursor_remove(bool silent) 274 { 275 glyph_draw(0, position % cols, position / cols, silent); 271 276 } 272 277 … … 277 282 * 278 283 */ 279 static void fb_putchar(chardev_t *dev, char ch )284 static void fb_putchar(chardev_t *dev, char ch, bool silent) 280 285 { 281 286 spinlock_lock(&fb_lock); … … 283 288 switch (ch) { 284 289 case '\n': 285 cursor_remove( );290 cursor_remove(silent); 286 291 position += cols; 287 292 position -= position % cols; 288 293 break; 289 294 case '\r': 290 cursor_remove( );295 cursor_remove(silent); 291 296 position -= position % cols; 292 297 break; 293 298 case '\b': 294 cursor_remove( );299 cursor_remove(silent); 295 300 if (position % cols) 296 301 position--; 297 302 break; 298 303 case '\t': 299 cursor_remove( );304 cursor_remove(silent); 300 305 do { 301 306 glyph_draw((uint8_t) ' ', position % cols, 302 position / cols );307 position / cols, silent); 303 308 position++; 304 309 } while ((position % 8) && (position < cols * rows)); 305 310 break; 306 311 default: 307 glyph_draw((uint8_t) ch, position % cols, position / cols); 312 glyph_draw((uint8_t) ch, position % cols, 313 position / cols, silent); 308 314 position++; 309 315 } … … 311 317 if (position >= cols * rows) { 312 318 position -= cols; 313 screen_scroll( );314 } 315 316 cursor_put( );319 screen_scroll(silent); 320 } 321 322 cursor_put(silent); 317 323 318 324 spinlock_unlock(&fb_lock);
Note:
See TracChangeset
for help on using the changeset viewer.