From 634bdd884e2abd8845b920fa04917a7e0daa1c28 Mon Sep 17 00:00:00 2001 From: John Bintz Date: Sun, 22 Sep 2024 06:39:50 -0400 Subject: [PATCH] Clean out that stab at targeted cleanups I needed to write way more code to get that working right --- bun.c | 37 ------- main.c | 266 ++---------------------------------------------- system/system.s | 18 ++-- 3 files changed, 18 insertions(+), 303 deletions(-) diff --git a/bun.c b/bun.c index f4b593d..6c3f7c1 100644 --- a/bun.c +++ b/bun.c @@ -419,42 +419,5 @@ void renderBunFrame( hasBunClear[bunRenderer->activeScreenBufferDetails->currentBuffer] = 1; } -void calculateNeededRedrawRanges( - int frame, - uint16_t redrawRanges[BUN_COUNT][4] -) { - int i, sx, sy, ex, ey, tmp; - - int thisFrame = frame % FRAMES_FOR_SCREEN; - int lastFrame = (frame + FRAMES_FOR_SCREEN - 1) % FRAMES_FOR_SCREEN; - - for (i = 0; i < BUN_COUNT; ++i) { - sx = allBunPositionsByFrame[lastFrame][i][0]; - if ( - allBunPositionsByFrame[lastFrame][i][1] < - allBunPositionsByFrame[thisFrame][i][1] - ) { - sy = allBunPositionsByFrame[lastFrame][i][1]; - ey = allBunPositionsByFrame[thisFrame][i][1] + COOL_BUN_HEIGHT; - } else { - sy = allBunPositionsByFrame[thisFrame][i][1]; - ey = allBunPositionsByFrame[lastFrame][i][1] + COOL_BUN_HEIGHT; - } - - ex = allBunPositionsByFrame[thisFrame][i][0] + COOL_BUN_WIDTH; - - if (sx > ex) { - tmp = sx; - sx = ex; - ex = tmp; - } - - redrawRanges[i][0] = sx; - redrawRanges[i][1] = sy; - redrawRanges[i][2] = ex; - redrawRanges[i][3] = ey; - } -} - void teardownBunRenderer() { } diff --git a/main.c b/main.c index 0e80fbe..83e81f9 100644 --- a/main.c +++ b/main.c @@ -94,6 +94,7 @@ void renderTopaz(void) { } } +#define MOSTLY_TOPAZ_TOP_BOTTOM_CROP (30) void renderMostlyTopaz(void) { int plane; @@ -110,15 +111,15 @@ void renderMostlyTopaz(void) { custom.bltcon1 = 0; custom.bltafwm = 0xffff; custom.bltalwm = 0xffff; - custom.bltapt = MaskBitplane + (30 * TOPAZ_WIDTH_BYTES); - custom.bltbpt = bltbpt + (30 * TOPAZ_WIDTH_BYTES); - custom.bltcpt = 30 * screenDefinition.byteWidth + activeScreenBufferDetails.planes[plane] + 8; - custom.bltdpt = 30 * screenDefinition.byteWidth + activeScreenBufferDetails.planes[plane] + 8; + custom.bltapt = MaskBitplane + (MOSTLY_TOPAZ_TOP_BOTTOM_CROP * TOPAZ_WIDTH_BYTES); + custom.bltbpt = bltbpt + (MOSTLY_TOPAZ_TOP_BOTTOM_CROP * TOPAZ_WIDTH_BYTES); + custom.bltcpt = MOSTLY_TOPAZ_TOP_BOTTOM_CROP * screenDefinition.byteWidth + activeScreenBufferDetails.planes[plane] + 8; + custom.bltdpt = MOSTLY_TOPAZ_TOP_BOTTOM_CROP * screenDefinition.byteWidth + activeScreenBufferDetails.planes[plane] + 8; custom.bltamod = 0; custom.bltbmod = 0; custom.bltcmod = bltcmod; custom.bltdmod = bltcmod; - custom.bltsize = BLTSIZE(TOPAZ_WIDTH_WORDS, 196); + custom.bltsize = BLTSIZE(TOPAZ_WIDTH_WORDS, 256 - MOSTLY_TOPAZ_TOP_BOTTOM_CROP * 2); bltbpt += TOPAZ_WIDTH_BYTES * 256; @@ -213,189 +214,13 @@ void buildCopperlist(void) { endCopperlist(currentCopperlist); } -uint16_t renderPartialAreas[BUN_COUNT][5]; - -void calculateTopazRenderPartialAreas( - uint16_t redrawRanges[BUN_COUNT][4] -) { - int topazX; - uint16_t i, width, height, screenX; - - for (i = 0; i < BUN_COUNT; ++i) { - renderPartialAreas[i][0] = 0; - - if (redrawRanges[i][2] - redrawRanges[i][0] < TOPAZ_WIDTH_PIXELS) { - if ( - (redrawRanges[i][2] > 64 && redrawRanges[i][0] < (64 + TOPAZ_WIDTH_PIXELS)) || - (redrawRanges[i][0] < (64 + TOPAZ_WIDTH_PIXELS) && redrawRanges[i][2] > 64) - ) { - width = redrawRanges[i][2] - redrawRanges[i][0] + 16; - height = redrawRanges[i][3] - redrawRanges[i][1]; - topazX = redrawRanges[i][0] - 64; - screenX = redrawRanges[i][0]; - - if (topazX < 0) { - //printf("Too far left, adjusting...\n"); - topazX += 16; - screenX += 16; - width -= 16; - } - - if (topazX + width > 64 + TOPAZ_WIDTH_PIXELS) { - //printf("Too far right, adjusting...\n"); - width -= 16; - } - - renderPartialAreas[i][0] = width; - renderPartialAreas[i][1] = height; - renderPartialAreas[i][2] = topazX; - renderPartialAreas[i][3] = screenX; - renderPartialAreas[i][4] = redrawRanges[i][1]; - } - } - } -} - -void calculateTopazRenderPartialBlitterSettings() { - uint16_t bltapt, bltcpt, bltamod, bltcmod, bltsize; - int i; - - for (i = 0; i < BUN_COUNT; ++i) { - if (renderPartialAreas[i][0] == 0) continue; - bltapt = renderPartialAreas[i][4] * TOPAZ_WIDTH_BYTES + (renderPartialAreas[i][2] >> 4) * 2; - bltcpt = renderPartialAreas[i][4] * screenDefinition.byteWidth + (renderPartialAreas[i][3] >> 4) * 2; - - printf("%d, %d\n", screenDefinition.byteWidth, renderPartialAreas[i][0]); - - bltamod = TOPAZ_WIDTH_BYTES - (renderPartialAreas[i][0] >> 4) * 2; - bltcmod = screenDefinition.byteWidth - (renderPartialAreas[i][0] >> 4) * 2; - - bltsize = BLTSIZE((renderPartialAreas[i][0] >> 4), renderPartialAreas[i][1]); - - renderPartialAreas[i][0] = bltapt; - renderPartialAreas[i][1] = bltcpt; - renderPartialAreas[i][2] = bltamod; - renderPartialAreas[i][3] = bltcmod; - renderPartialAreas[i][4] = bltsize; - } -} - -void renderTopazPartials( - uint16_t redrawRanges[BUN_COUNT][4] -) { - int plane, i, topazX, screenX; - - uint16_t bltcon0; - uint16_t bltamod, bltbmod, bltcmod, bltdmod; - uint16_t width, height, bltsize; - uint32_t bltapt, bltbpt, bltcpt, bltdpt; - - bltcon0 = 0xca + (1 << 8) + (1 << 9) + (1 << 10) + (1 << 11); - - WaitTOF(); - - for (i = 0; i < BUN_COUNT; ++i) { - if (redrawRanges[i][2] - redrawRanges[i][0] < TOPAZ_WIDTH_PIXELS) { - if ( - (redrawRanges[i][2] > 64 && redrawRanges[i][0] < (64 + TOPAZ_WIDTH_PIXELS)) || - (redrawRanges[i][0] < (64 + TOPAZ_WIDTH_PIXELS) && redrawRanges[i][2] > 64) - ) { - width = redrawRanges[i][2] - redrawRanges[i][0] + 16; - height = redrawRanges[i][3] - redrawRanges[i][1]; - topazX = redrawRanges[i][0] - 64; - screenX = redrawRanges[i][0]; - - if (topazX < 0) { - //printf("Too far left, adjusting...\n"); - topazX += 16; - screenX += 16; - width -= 16; - } - - if (topazX + width > 64 + TOPAZ_WIDTH_PIXELS) { - //printf("Too far right, adjusting...\n"); - width -= 16; - } - - bltapt = redrawRanges[i][1] * TOPAZ_WIDTH_BYTES + (topazX >> 4) * 2; - bltbpt = bltapt; - bltcpt = redrawRanges[i][1] * screenDefinition.byteWidth + (screenX >> 4) * 2; - bltdpt = bltcpt; - - bltamod = TOPAZ_WIDTH_BYTES - (width >> 4) * 2; - bltbmod = bltamod; - bltcmod = screenDefinition.byteWidth - (width >> 4) * 2; - bltdmod = bltcmod; - - bltsize = BLTSIZE((width >> 4), height); - /* - - printf( - "Coords: %d, %d -> %d, %d\n", - redrawRanges[i][0], - redrawRanges[i][1], - redrawRanges[i][2], - redrawRanges[i][3] - ); - - printf("topazX: %d\n", topazX); - printf("width: %d\n", width); - - printf("MaskBitplane: %d\n", MaskBitplane); - printf("TopazBitplanes: %d\n", TopazBitplanes); - printf("ActiveScreenBuffer Plane 0: %d\n", activeScreenBufferDetails.planes[0]); - - printf("BLTAPT: %d\n", bltapt); - printf("BLTAPT src: %d\n", bltapt + (uint32_t)MaskBitplane); - printf("BLTBPT: %d\n", bltbpt); - printf("BLTBPT src: %d\n", bltbpt + (uint32_t)TopazBitplanes); - printf("BLTCPT: %d\n", bltcpt); - printf("BLTCPT src: %d\n", bltcpt + (uint32_t)activeScreenBufferDetails.planes[0] + 8); - printf("BLTDPT: %d\n", bltdpt); - printf("BLTDPT src: %d\n", bltdpt + (uint32_t)activeScreenBufferDetails.planes[0] + 8); - - printf("BLTAMOD: %d\n", bltamod); - printf("BLTBMOD: %d\n", bltbmod); - printf("BLTCMOD: %d\n", bltcmod); - printf("BLTDMOD: %d\n", bltdmod); - - printf("BLTSIZE: %d, %d\n", (width >> 4), height); -*/ - - bltapt += (uint32_t)MaskBitplane; - bltbpt += (uint32_t)TopazBitplanes; - - for (plane = 0; plane < 2; ++plane) { - custom.bltcon0 = bltcon0; - custom.bltcon1 = 0; - custom.bltafwm = 0xffff; - custom.bltalwm = 0xffff; - custom.bltapt = bltapt; - custom.bltbpt = bltbpt + (plane * TOPAZ_WIDTH_BYTES * 256); - custom.bltcpt = bltcpt + activeScreenBufferDetails.planes[plane]; - custom.bltdpt = bltdpt + activeScreenBufferDetails.planes[plane]; - custom.bltamod = bltamod; - custom.bltbmod = bltbmod; - custom.bltcmod = bltcmod; - custom.bltdmod = bltdmod; - custom.bltsize = bltsize; - - WaitBlit(); - } - - break; - } - } - } -} - static struct MsgPort *keyboardMessagePort = NULL; static struct IOStdReq *keyboardIO = NULL; static struct Interrupt keyboardInterrupt; extern far ULONG keyboardPressed; -extern struct InputEvent * __asm stupidKeyboardHandler( +extern struct InputEvent * __asm KeyboardHandler( register __a0 struct InputEvent *input, register __a1 APTR id ); @@ -416,7 +241,7 @@ void setupKeyboard(void) { keyboardInterrupt.is_Node.ln_Type = NT_INTERRUPT; keyboardInterrupt.is_Node.ln_Pri = 100; keyboardInterrupt.is_Node.ln_Name = (STRPTR)"cool bun"; - keyboardInterrupt.is_Code = (void (*)())&stupidKeyboardHandler; + keyboardInterrupt.is_Code = (void (*)())&KeyboardHandler; keyboardIO->io_Data = (void *)&keyboardInterrupt; keyboardIO->io_Command = IND_ADDHANDLER; @@ -449,62 +274,6 @@ int main(void) { struct BunRenderer bunRenderer; uint16_t redrawRanges[BUN_COUNT][4]; - /* - - allocateDoubleBufferedScreenMemory( - &screenDefinition, - &activeScreenBufferDetails, - SCREEN_WIDTH, - SCREEN_HEIGHT, - 3 - ); - - setupBunRenderer( - &bunRenderer, - &screenDefinition, - &activeScreenBufferDetails - ); - - calculateNeededRedrawRanges(i, redrawRanges); - calculateTopazRenderPartialAreas(redrawRanges); - - printf("********\n"); - - for (i = 0; i < BUN_COUNT; ++i) { - if (renderPartialAreas[i][0] == 0) continue; - - printf( - "%d, %d, %d, %d, %d\n", - renderPartialAreas[i][0], - renderPartialAreas[i][1], - renderPartialAreas[i][2], - renderPartialAreas[i][3], - renderPartialAreas[i][4] - ); - } - - calculateTopazRenderPartialBlitterSettings(); - - printf("********\n"); - - for (i = 0; i < BUN_COUNT; ++i) { - if (renderPartialAreas[i][0] == 0) continue; - - printf( - "%d, %d, %d, %d, %x\n", - renderPartialAreas[i][0], - renderPartialAreas[i][1], - renderPartialAreas[i][2], - renderPartialAreas[i][3], - renderPartialAreas[i][4] - ); - } - - teardownScreen(&screenDefinition); - - return 0; -*/ - printf("\nCool bun blitter, copper, and sprite demo by John Bintz\n"); printf("\n"); printf("This is my first real go at writing graphics code for the Amiga.\n"); @@ -543,8 +312,6 @@ int main(void) { buildCopperlist(); - - /* copperlist debugging for (i = 0; i < 20; ++i) { @@ -581,32 +348,17 @@ int main(void) { swapCurrentScreenBuffer(&screenDefinition, &activeScreenBufferDetails); - clearCurrentBuns(&bunRenderer); renderBunFrame(i, &bunRenderer); - - /* - calculateNeededRedrawRanges(i, redrawRanges); - renderTopazPartials(redrawRanges); - */ renderMostlyTopaz(); - //WaitTOF(); - - updateDisplayInCopperList( &screenDefinition, &activeScreenBufferDetails, copperlistBitplanePointers ); - //WaitBOF(100); - - //WaitTOF(); - - if (keyboardPressed) { - i++; - } + if (keyboardPressed) break; if ((ciaa.ciapra >> 6) != 3) break; i++; diff --git a/system/system.s b/system/system.s index 5bbffe1..e746532 100644 --- a/system/system.s +++ b/system/system.s @@ -9,7 +9,7 @@ XDEF _endCopperlist XDEF _myWaitBlit XDEF _WaitBOF - XDEF _stupidKeyboardHandler + XDEF _KeyboardHandler XDEF _keyboardPressed @@ -82,14 +82,14 @@ SOFFSET SET SOFFSET+(8*4) ; @register A0 struct InputEvent * ; @register A1 extra data about the event ; @output D0 The value of A0 -_stupidKeyboardHandler: +_KeyboardHandler: ; @stack [RA,A0,current node] MOVE.L A0,-(SP) MOVE.L #0,-(SP) -_stupidKeyboardHandler_CheckLoop: +_KeyboardHandler_CheckLoop: CMP.B #IECLASS_RAWKEY,ie_Class(A0) - BNE.S _stupidKeyboardHandler_NextEvent + BNE.S _KeyboardHandler_NextEvent MOVE.W ie_Code(A0),D0 AND.W #IECODE_UP_PREFIX,D0 @@ -100,12 +100,12 @@ _stupidKeyboardHandler_CheckLoop: ; else: ; change the A0 in the stack above it TST.L (SP) - BNE.S _stupidKeyboardHandler_hasLastEvent + BNE.S _KeyboardHandler_hasLastEvent MOVE.L (A0),4(SP) - BRA.S _stupidKeyboardHandler_NextEvent + BRA.S _KeyboardHandler_NextEvent -_stupidKeyboardHandler_hasLastEvent: +_KeyboardHandler_hasLastEvent: ; put the next event in the first pointer of the ; last event MOVE.L A1,-(SP) @@ -113,14 +113,14 @@ _stupidKeyboardHandler_hasLastEvent: MOVE.L (A0),(A1) MOVE.L (SP)+,A1 -_stupidKeyboardHandler_NextEvent: +_KeyboardHandler_NextEvent: ; next event is in first long of struct MOVE.L (A0),D0 ; store current node in stack MOVE.L A0,(SP) MOVE.L D0,A0 - BNE.S _stupidKeyboardHandler_CheckLoop + BNE.S _KeyboardHandler_CheckLoop MOVE.L (SP)+,D0 MOVE.L (SP)+,D0 RTS