static void InitWaveScope() { WORD i, j; BitmapT *bm; for (i = 0; i < 4; i++) { memset(&wavescope.channel[i], 0, sizeof(WaveScopeChanT)); wavescope.channel[i].bm = NewBitmap(64, 64, 1); } for (i = 0; i < 64; i++) { for (j = 0; j < 128; j++) { WORD index = (i << 8) | j; WORD x = (j * (i + 1)) >> 4; wavescope.multab[index] = x; } for (; j < 255; j++) { WORD index = (i << 8) | j; WORD x = ((255 - j) * (i + 1)) >> 4; wavescope.multab[index] = x; } } bm = NewBitmap(64, 32, 1); BlitterLineSetup(bm, 0, LINE_EOR, LINE_ONEDOT); BlitterLine(32, 0, 1, 31); BlitterLine(32, 0, 63, 31); BlitterFill(bm, 0); WaitBlitter(); ((BYTE *)bm->planes[0])[4] = 0x80; wavescope.spans = bm; }
static void Render() { // LONG lines = ReadLineCounter(); { BlitterClear(screen, active); DrawSpans(screen->planes[active]); BlitterFill(screen, active); } // Log("anim: %ld\n", ReadLineCounter() - lines); WaitVBlank(); { WORD n = DEPTH; while (--n >= 0) { WORD i = (active + n + 1 - DEPTH) % (DEPTH + 1); if (i < 0) i += DEPTH + 1; CopInsSet32(bplptr[n], screen->planes[i]); } } active = (active + 1) % (DEPTH + 1); }