+ int i, j, r, g, b, xoffs, yoffs, zoom;
+ unsigned char *fbptr;
+ uint16_t *fbptr16;
+ uint32_t *fbptr32;
+
+ xoffs = COS(time_msec >> 3) * fb_width >> 15;
+ yoffs = SIN(time_msec >> 2) * fb_height >> 16;
+ zoom = (SIN(time_msec >> 5) >> 1) + 65536;
+
+ switch(fb_bpp) {
+ case 15:
+ case 16:
+ fbptr16 = framebuf;
+ for(i=0; i<fb_height; i++) {
+ for(j=0; j<fb_width; j++) {
+ XORRGB(j + xoffs, i + yoffs, zoom, r, g, b);
+ *fbptr16++ = (((r >> 3) << fb_rshift) & fb_rmask) |
+ (((g >> 2) << fb_gshift) & fb_gmask) |
+ (((b >> 3) << fb_bshift) & fb_bmask);
+ }
+ fbptr16 += (fb_pitch >> 1) - fb_width;
+ }
+ break;
+
+ case 24:
+ fbptr = framebuf;
+ for(i=0; i<fb_height; i++) {
+ for(j=0; j<fb_width; j++) {
+ XORRGB(j + xoffs, i + yoffs, zoom, r, g, b);
+ *fbptr++ = r;
+ *fbptr++ = g;
+ *fbptr++ = b;
+ }
+ fbptr += fb_pitch - fb_width * 3;
+ }
+ break;
+
+ case 32:
+ fbptr32 = framebuf;
+ for(i=0; i<fb_height; i++) {
+ for(j=0; j<fb_width; j++) {
+ XORRGB(j + xoffs, i + yoffs, zoom, r, g, b);
+ *fbptr32++ = (((r) << fb_rshift) & fb_rmask) |
+ (((g) << fb_gshift) & fb_gmask) |
+ (((b) << fb_bshift) & fb_bmask);
+ }
+ fbptr32 += (fb_pitch >> 2) - fb_width;
+ }
+ break;
+ }