From 331b76e798fc61c00969ce4439d614606d6fab0a Mon Sep 17 00:00:00 2001 From: John Bintz Date: Thu, 13 Jun 2024 05:55:29 -0400 Subject: [PATCH] start optimizing --- bun.c | 168 ++++++++++++++++++++++++++++++++++++++++++++------------- bun.h | 3 ++ main | Bin 76664 -> 77068 bytes main.c | 5 +- 4 files changed, 139 insertions(+), 37 deletions(-) diff --git a/bun.c b/bun.c index c64c74a..228f8b2 100644 --- a/bun.c +++ b/bun.c @@ -66,41 +66,63 @@ void teardownBun(void) { } } +#define BLITTER_ASCENDING (0) +#define BLITTER_DESCENDING (1) + +struct BunClear { + uint16_t memoryStartOffsetBytes; + uint16_t widthWords; + uint16_t heightRows; + uint8_t direction; +}; + +#define BUN_OFF_RIGHT_SIDE (0) +#define BUN_OFF_LEFT_SIDE (1) +#define BUN_ANYWHERE (2) + +uint8_t *coolbunPlaneStarts[3][2]; + void bun_offRightSide( int plusXValue, int y, struct ScreenSetup *screenSetup, - struct CurrentScreen *currentScreen + struct CurrentScreen *currentScreen, + struct BunClear *bunClear ) { uint8_t i, plane = 0; uint8_t shift = plusXValue & 15; uint8_t wordShift = (plusXValue >> 4); uint16_t bltalwm; + bunClear->memoryStartOffsetBytes = (y * screenSetup->byteWidth) + + screenSetup->byteWidth - COOL_BUN_WIDTH_BYTES + + wordShift * 2; + bunClear->heightRows = COOL_BUN_HEIGHT; + bunClear->widthWords = 2 - wordShift; + bunClear->direction = BLITTER_ASCENDING; + + bltalwm = 0x0000; + for (i = 0; i <= 15 - shift; ++i) { + bltalwm += (1 << (15 - i)); + } + for (plane = 0; plane < 2; ++plane) { custom.bltcon0 = BLTCON0(0xc0, 0, 1, 0, 1, shift); - custom.bltcon1 = BLTCON1(0, shift); + custom.bltcon1 = BLTCON1(bunClear->direction, shift); custom.bltadat = 0xffff; - custom.bltbpt = coolbunArea + - plane * COOL_BUN_PLANE_SIZE; + custom.bltbpt = coolbunPlaneStarts[BUN_OFF_LEFT_SIDE][plane]; custom.bltdpt = currentScreen->planes[plane] + - (y * screenSetup->byteWidth) + - screenSetup->byteWidth - COOL_BUN_WIDTH_BYTES + - wordShift * 2; + bunClear->memoryStartOffsetBytes; custom.bltafwm = 0xffff; - bltalwm = 0x0000; - for (i = 0; i <= 15 - shift; ++i) { - bltalwm += (1 << (15 - i)); - } custom.bltalwm = bltalwm; custom.bltbmod = wordShift * 2; custom.bltdmod = screenSetup->byteWidth - COOL_BUN_WIDTH_BYTES + wordShift * 2; - custom.bltsize = 2 - wordShift + (COOL_BUN_HEIGHT << 6); + custom.bltsize = bunClear->widthWords + (bunClear->heightRows << 6); WaitBlit(); } @@ -110,7 +132,8 @@ void bun_offLeftSide( int minusXValue, int y, struct ScreenSetup *screenSetup, - struct CurrentScreen *currentScreen + struct CurrentScreen *currentScreen, + struct BunClear *bunClear ) { unsigned char plane; uint8_t shift = minusXValue & 15; @@ -121,35 +144,37 @@ void bun_offLeftSide( // y can't be 0 otherwise we will corrupt memory for now if (y == 0) return; + bunClear->memoryStartOffsetBytes = (screenSetup->byteWidth * (y + COOL_BUN_LAST_ROW)) + + 2 - wordShift * 2; + bunClear->heightRows = COOL_BUN_HEIGHT; + bunClear->widthWords = 2 - wordShift; + bunClear->direction = BLITTER_DESCENDING; + + bltalwm = 0x0000; + for (i = 0; i <= 15 - shift; ++i) { + bltalwm += (1 << i); + } + for (plane = 0; plane < 2; ++plane) { // shift left, so descending custom.bltcon0 = BLTCON0(0xc0, 0, 1, 0, 1, shift); - custom.bltcon1 = BLTCON1(1, shift); + custom.bltcon1 = BLTCON1(bunClear->direction, shift); // a has a mask we're shifting custom.bltadat = 0xffff; // b has bun data - custom.bltbpt = coolbunArea + 2 + - COOL_BUN_LAST_ROW_BYTES + - plane * COOL_BUN_PLANE_SIZE; + custom.bltbpt = coolbunPlaneStarts[BUN_OFF_RIGHT_SIDE][plane]; // d is the part on screen - custom.bltdpt = currentScreen->planes[plane] + - (screenSetup->byteWidth * (y + COOL_BUN_LAST_ROW)) + - 2 - - wordShift * 2; + custom.bltdpt = currentScreen->planes[plane] + bunClear->memoryStartOffsetBytes; custom.bltafwm = 0xffff; - bltalwm = 0x0000; - for (i = 0; i <= 15 - shift; ++i) { - bltalwm += (1 << i); - } custom.bltalwm = bltalwm; custom.bltbmod = wordShift * 2; custom.bltdmod = screenSetup->byteWidth - 4 + wordShift * 2; - custom.bltsize = 2 - wordShift + (COOL_BUN_HEIGHT << 6); + custom.bltsize = bunClear->widthWords + (bunClear->heightRows << 6); WaitBlit(); } @@ -159,24 +184,31 @@ void bun_anywhere( int x, int y, struct ScreenSetup *screenSetup, - struct CurrentScreen *currentScreen + struct CurrentScreen *currentScreen, + struct BunClear *bunClear ) { uint8_t plane; uint8_t shift = x & 15; uint8_t needsExtraWord = shift != 0; + bunClear->memoryStartOffsetBytes = WORD_ALIGNED_BYTE_POSITION(screenSetup->width, x, y); + + bunClear->heightRows = COOL_BUN_HEIGHT; + bunClear->widthWords = 2 + needsExtraWord; + bunClear->direction = BLITTER_ASCENDING; + for (plane = 0; plane < 2; ++plane) { // if we extend the bun area by a word, we only need one write // buns will never interfere with a background so they don't need a mask // they do need the scratch area though custom.bltcon0 = BLTCON0(0xc0, 0, 1, 0, 1, shift); - custom.bltcon1 = BLTCON1(0, shift); + custom.bltcon1 = BLTCON1(bunClear->direction, shift); custom.bltadat = 0xffff; - custom.bltbpt = coolbunArea + plane * COOL_BUN_PLANE_SIZE; + custom.bltbpt = coolbunPlaneStarts[BUN_ANYWHERE][plane]; custom.bltdpt = currentScreen->planes[plane] + - WORD_ALIGNED_BYTE_POSITION(screenSetup->width, x, y); + bunClear->memoryStartOffsetBytes; // custom.bltdpt = screenSetup.memoryStart; custom.bltafwm = 0xffff; @@ -188,7 +220,7 @@ void bun_anywhere( custom.bltbmod = -(needsExtraWord * 2); custom.bltdmod = screenSetup->byteWidth - COOL_BUN_WIDTH_BYTES - (needsExtraWord * 2); - custom.bltsize = (2 + needsExtraWord) + (COOL_BUN_HEIGHT << 6); + custom.bltsize = bunClear->widthWords + (bunClear->heightRows << 6); WaitBlit(); } @@ -198,7 +230,8 @@ void renderBun( int x, int y, struct ScreenSetup *screenSetup, - struct CurrentScreen *currentScreen + struct CurrentScreen *currentScreen, + struct BunClear *bunClear ) { /** * Conditions that will cause the program to crash if met. If your bun @@ -212,11 +245,29 @@ void renderBun( if (y > screenSetup->height- COOL_BUN_HEIGHT - 1) return; if (x < 0) { - bun_offLeftSide(-x, y, screenSetup, currentScreen); + bun_offLeftSide( + -x, + y, + screenSetup, + currentScreen, + bunClear + ); } else if (x > screenSetup->width - COOL_BUN_WIDTH) { - bun_offRightSide(x - (screenSetup->width - COOL_BUN_WIDTH), y, screenSetup, currentScreen); + bun_offRightSide( + x - (screenSetup->width - COOL_BUN_WIDTH), + y, + screenSetup, + currentScreen, + bunClear + ); } else { - bun_anywhere(x, y, screenSetup, currentScreen); + bun_anywhere( + x, + y, + screenSetup, + currentScreen, + bunClear + ); } } @@ -286,6 +337,18 @@ void buildBunAngleAdjustments() { } } +void precalculeBunRenderInfo(void) { + int plane; + + for (plane = 0; plane < 2; ++plane) { + coolbunPlaneStarts[BUN_OFF_LEFT_SIDE][plane] = coolbunArea + plane * COOL_BUN_PLANE_SIZE; + coolbunPlaneStarts[BUN_ANYWHERE][plane] = coolbunArea + plane * COOL_BUN_PLANE_SIZE; + coolbunPlaneStarts[BUN_OFF_RIGHT_SIDE][plane] = coolbunArea + 2 + + COOL_BUN_LAST_ROW_BYTES + + plane * COOL_BUN_PLANE_SIZE; + } +} + void setupBunRenderer( struct BunRenderer *bunRenderer, struct ScreenSetup *screenSetup, @@ -296,6 +359,36 @@ void setupBunRenderer( setupBun(); buildBunAngleAdjustments(); calculateAllBunPositions(screenSetup); + precalculeBunRenderInfo(); +} + +int hasBunClear[2] = {0,0}; +struct BunClear bunClearForScreen[2][BUN_COUNT]; + +void clearCurrentBuns( + struct BunRenderer *bunRenderer +) { + int bun, plane; + struct BunClear *currentBunClear; + + if (!hasBunClear[bunRenderer->currentScreen->currentBuffer]) return; + + for (bun = 0; bun < BUN_COUNT; ++bun) { + currentBunClear = &bunClearForScreen[bunRenderer->currentScreen->currentBuffer][bun]; + + for (plane = 0; plane < 2; ++plane) { + custom.bltcon0 = 0xc0 + (1 << 8); + custom.bltcon1 = BLTCON1(currentBunClear->direction, 0); + custom.bltadat = 0x0000; + custom.bltafwm = 0xffff; + custom.bltalwm = 0xffff; + custom.bltdpt = bunRenderer->currentScreen->planes[plane] + + currentBunClear->memoryStartOffsetBytes; + custom.bltdmod = bunRenderer->screenSetup->byteWidth - (currentBunClear->widthWords * 2); + custom.bltsize = currentBunClear->widthWords + (currentBunClear->heightRows << 6); + WaitBlit(); + } + } } void renderBunFrame( @@ -311,9 +404,12 @@ void renderBunFrame( allBunPositionsByFrame[frame][bun][0], allBunPositionsByFrame[frame][bun][1], bunRenderer->screenSetup, - bunRenderer->currentScreen + bunRenderer->currentScreen, + &bunClearForScreen[bunRenderer->currentScreen->currentBuffer][bun] ); } + + hasBunClear[bunRenderer->currentScreen->currentBuffer] = 1; } void teardownBunRenderer() { diff --git a/bun.h b/bun.h index b780f92..f5d5602 100644 --- a/bun.h +++ b/bun.h @@ -20,5 +20,8 @@ void renderBunFrame( int frame, struct BunRenderer * ); +void clearCurrentBuns( + struct BunRenderer * +); void teardownBunRenderer(void); #endif diff --git a/main b/main index 6f276b984adeffda2c7e0840515d0f8503bb41c6..ee124a79616b3e38ebfde0708000b6b750eae649 100755 GIT binary patch delta 5621 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 diff --git a/main.c b/main.c index bfa9ee9..70c3793 100644 --- a/main.c +++ b/main.c @@ -180,6 +180,9 @@ int main(void) { while (1) { swapCurrentScreenBuffer(&screenSetup, ¤tScreen); + clearCurrentBuns(&bunRenderer); + + /* for (plane = 0; plane < 2; ++plane) { custom.bltcon0 = 0xc0 + (1 << 8); custom.bltcon1 = 0; @@ -191,6 +194,7 @@ int main(void) { custom.bltsize = screenSetup.byteWidth / 2 + (screenSetup.height << 6); WaitBlit(); } + */ renderBunFrame(i, &bunRenderer); @@ -228,7 +232,6 @@ int main(void) { WaitTOF(); - //WaitTOF(); if ((ciaa.ciapra >> 6) != 3) break;