From d9cb4bd8afac225c243ac235d68576c387b50dd0 Mon Sep 17 00:00:00 2001 From: Quinn Dunki Date: Sun, 28 May 2017 11:55:20 -0700 Subject: [PATCH] Optimization and fleshing out of demo app --- graphics.s | 73 +++++++++++++++++++++++++++ hisprite.dsk | Bin 143360 -> 143360 bytes hisprite.s | 82 +++++++++++++++++++++--------- spriteBuffers.s | 131 ++++++++++++++++++++++++++++++++++++++++-------- 4 files changed, 242 insertions(+), 44 deletions(-) diff --git a/graphics.s b/graphics.s index 347a9c3..6a7425d 100644 --- a/graphics.s +++ b/graphics.s @@ -187,6 +187,79 @@ restoreBackground_smc5: rts +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; BlackRect +; PARAM0: X pos +; PARAM1: Y pos +; +; Assumes 4-byte-wide, 8px-high sprites +; +BlackRect: + SAVE_AX + lda #0 + pha + +blackRect_loop: + clc + pla + pha + adc PARAM1 ; Calculate Y line + tax + + lda HGRROWS_H1,x ; Compute hires row + sta blackRect_smc0+2 + sta blackRect_smc1+2 + sta blackRect_smc2+2 + sta blackRect_smc3+2 + sta blackRect_smc4+2 + sta blackRect_smc5+2 + lda HGRROWS_L,x + sta blackRect_smc0+1 + sta blackRect_smc1+1 + sta blackRect_smc2+1 + sta blackRect_smc3+1 + sta blackRect_smc4+1 + sta blackRect_smc5+1 + + ldx PARAM0 ; Compute hires column + lda DIV7_2,x + tax + +blackRect_smc0: + stz $2000,x + inx + +blackRect_smc1: + stz $2000,x + inx + +blackRect_smc2: + stz $2000,x + inx + +blackRect_smc3: + stz $2000,x + inx + +blackRect_smc4: + stz $2000,x + inx + +blackRect_smc5: + stz $2000,x + + pla + inc + pha + + cmp #8 + bne blackRect_loop + + pla + RESTORE_AX + rts + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; LinearFill ; A: Byte value to fill diff --git a/hisprite.dsk b/hisprite.dsk index 5c929fdfb5e42da88533572c5eb9e68b1aa74185..5c51cb8265cdd0e3dcf7c4b6018480da04f1f4c0 100644 GIT binary patch delta 2484 zcmbtVT})F~9KW~Uf>RW$z;$?|agZ`L2-7AL2absqFhVA>j|}fQj?>G~C1fMZK3kSF z(T77)&v-B{uBiyzZjCgH*&J4hiA&kT23fL)%?Fajh3#z*?!l&X=bYAr-rl=zS(E;A za?bDn{r~-MaK#l|am`JXSNy(NxVgKoTo8U06n6OXaygtNqGc@L`}vhA$E|~>KM1N5 z>ZRe?H?EJ|IrGEWdv8uVlZ&TAHOcd@hpML>Hxh7G>kn6_G!GLZ6{*x}5rW^FzVs?$CEn?tQ$C2*iFAltVY7*T=571tJzdz)^?!WJMtB2LY=qNgd`cOZ58NG%8 z8bZV9EE+{)=w0+78b={?9$^$ly>DkT?H}2!o{mh$*O{?*H>a(hA)BSX%a%U!tlhq? zC2j3GD6YMA(!QqdON(xcXte~yGcgBpjEF}YapI~8fdfVyA zh~74KuW_j-KWVz=?$a-f7nntv2}2#4eF+4!8qiziwoEPRvoJ}vmqo>sb+e@O>Cn(B z*gch!`Lh;HYoB7n~z}Zp=X0<_ArGJc~dA^c(zL5fS zspqCMFAY5N+2xC$os44Rh(q*|&-s5rbUymBvyvzT~|*f&&HXwG#qcdKZ;w05S(o5aYb z*JI!H5(s9sh=fch#WhVWa(1zJQz>H-<_XACGV4aZOj4LzW9ziY9~qx>>-tY`iX!GM nHMg>k@diHVtA1k`=aefZb<>pVRZ+D0dKcI3#nHb3F4~me delta 2247 zcmbtVZ%9*76u+Cbe^IV7YAW?ItSGbyD~PC!9Fqnr6o!brJA2#Giuzj7hV&|eYuL>X z{h?&8*fZa*>D!x1jd2+F{?7UR&bjBDg-2}R z5nE^TB4=?nXe!vT9DvV2=0CdcEb_IMxuTXQZr^=kYH?AjSvs1mt5uHK6^m!Mu!GQy1I92%j5#$N=JcCV8qSOd<(M^1>Y)kPLP{34xUk9G4 ziCUfw`_8=xybX*5zaJZKupZAjvG$~ayPhRgi*}RQgd3x+I2^U_{-`+oyZjCQoBjd+ zxPMciCU7P2QlZL#@*3vgqHE3d>iO2fZMv1%bc)hd03Jmvk~iqZoTi{ZkL zJ3RP7^&Y$@R>Z|ch-nE#>me$Fs079=NjJ`qyNl}T(ItqQA!>!_Hbm_Z#UXoJbP*y1 z(RGM!K@@?AXdYMNJJ&^khm{q*5wO=V*tX#YkS;sNM@RaGzQ~ci&7UB4cNB&sDia{R zhlzgK5l?n2YJT#OqUN=ky7E+O8(`LwyrZbL~ z^Ybo)nyXuL308ueS+eJ~9LbM8+(Hc?qgn28a z`jKGmynuBg)vW#&S9R(p25*_i3G>>lAFJ6|S~_#n#;|f~j8<@cdSy(vQ|J~p!>u-k zOK0&XW=_Kpp^Ow$kjw}%?X%HPO{{^;$uu!}mYv0F7U{CDWUnD{&8e9d`wb8G6l15k zH#B|aQL>R|Al3n2eAIZ|Xc09SSF4ZhyFbBc$UJ#V#L~(sFbIH8_2@f=oz&>MU_yon zV-#hANP9Pt6MrAWobacoX-!6njl(souilzoy};6WoG>qaYo@cX&d5}D(Hf~tbfS2^ zB16p@+_EZ#DB&Y88$|1`|3zeA3GqMPIdo2MNwSZtol4xG*93xUHoX%yf6>-u{5eCJ gApEh(0S@_hM2aRu3`z=lJ{c({^K5z^du}@Y7qN)wx&QzG diff --git a/hisprite.s b/hisprite.s index 50fec2e..cd0d990 100644 --- a/hisprite.s +++ b/hisprite.s @@ -30,6 +30,10 @@ SCRATCH1 = $1a SPRITEPTR_L = $1b SPRITEPTR_H = $1c +MAXSPRITEINDEX = 19 ; Sprite count - 1 +MAXPOSX = 127 ; This demo doesn't wanna do 16 bit math +MAXPOSY = 127 + ; Macros .macro BLITBYTE xPos,yPos,addr lda #xPos @@ -99,11 +103,11 @@ renderLoop: sta PARAM0 ; Calculate sprite background buffer location - lda BG_BUFFERS,x - sta PARAM2 - lda BG_BUFFERS+1,x - sta PARAM3 - jsr SaveBackground +; lda BG_BUFFERS,x +; sta PARAM2 +; lda BG_BUFFERS+1,x +; sta PARAM3 +; jsr SaveBackground jsr BOXW_MAG @@ -113,11 +117,10 @@ renderLoop: jmp renderLoop restartList: - lda #9 + lda #MAXSPRITEINDEX sta spriteNum jsr delayShort - jsr delayShort ; Background restore backgroundLoop: @@ -142,11 +145,12 @@ backgroundLoop: sta PARAM0 ; Calculate sprite background buffer location - lda BG_BUFFERS,x - sta PARAM2 - lda BG_BUFFERS+1,x - sta PARAM3 - jsr RestoreBackground +;lda BG_BUFFERS,x +; sta PARAM2 +; lda BG_BUFFERS+1,x +; sta PARAM3 +; jsr RestoreBackground + jsr BlackRect ; Next sprite dec spriteNum @@ -154,7 +158,7 @@ backgroundLoop: jmp backgroundLoop backgroundRestartList: - lda #9 + lda #MAXSPRITEINDEX sta spriteNum movementLoop: @@ -167,26 +171,56 @@ movementLoop: lda META_BUFFERS,x sta SPRITEPTR_L - ; Adjust X coordinate + ; Apply X velocity to X coordinate + clc ldy #0 lda (SPRITEPTR_L),y - inc - inc - cmp #132 - beq resetX + ldy #2 + adc (SPRITEPTR_L),y + bmi flipX + cmp #MAXPOSX + bpl flipX -storeAndContinue: + ; Store the new X + ldy #0 sta (SPRITEPTR_L),y + +adjustY: + ; Apply Y velocity to Y coordinate + clc + ldy #1 + lda (SPRITEPTR_L),y + ldy #3 + adc (SPRITEPTR_L),y + bmi flipY + cmp #MAXPOSY + bpl flipY + + ; Store the new Y + ldy #1 + sta (SPRITEPTR_L),y + +continueMovementList: dec spriteNum bmi movementRestartList jmp movementLoop -resetX: - lda #0 - bra storeAndContinue +flipX: + lda (SPRITEPTR_L),y + eor #$ff + inc + sta (SPRITEPTR_L),y + bra adjustY + +flipY: + lda (SPRITEPTR_L),y + eor #$ff + inc + sta (SPRITEPTR_L),y + bra continueMovementList movementRestartList: - lda #9 + lda #MAXSPRITEINDEX sta spriteNum jmp renderLoop @@ -223,7 +257,7 @@ delayShortInner: spriteNum: - .byte 9 + .byte MAXSPRITEINDEX bgFilename: .byte "KOL",0 diff --git a/spriteBuffers.s b/spriteBuffers.s index 2801039..ee883d0 100644 --- a/spriteBuffers.s +++ b/spriteBuffers.s @@ -28,46 +28,137 @@ META_BUFFERS: .addr metaBuffer7 .addr metaBuffer8 .addr metaBuffer9 + .addr metaBuffer10 + .addr metaBuffer11 + .addr metaBuffer12 + .addr metaBuffer13 + .addr metaBuffer14 + .addr metaBuffer15 + .addr metaBuffer16 + .addr metaBuffer17 + .addr metaBuffer18 + .addr metaBuffer19 metaBuffer0: - .byte 0 ; X pos - .byte 0 ; Y pos + .byte 80 ; X pos + .byte 116 ; Y pos + .byte -1 ; X vec + .byte -3 ; Y vec metaBuffer1: - .byte 0 ; X pos - .byte 10 ; Y pos + .byte 64 ; X pos + .byte 126 ; Y pos + .byte 4 ; X vec + .byte 3 ; Y vec metaBuffer2: - .byte 0 ; X pos - .byte 20 ; Y pos + .byte 42 ; X pos + .byte 67 ; Y pos + .byte -3 ; X vec + .byte -3 ; Y vec metaBuffer3: - .byte 0 ; X pos - .byte 30 ; Y pos + .byte 72 ; X pos + .byte 70 ; Y pos + .byte -3 ; X vec + .byte 5 ; Y vec metaBuffer4: - .byte 0 ; X pos - .byte 40 ; Y pos + .byte 75 ; X pos + .byte 49 ; Y pos + .byte -5 ; X vec + .byte 3 ; Y vec metaBuffer5: - .byte 0 ; X pos - .byte 50 ; Y pos + .byte 42 ; X pos + .byte 101 ; Y pos + .byte 4 ; X vec + .byte 2 ; Y vec metaBuffer6: - .byte 0 ; X pos - .byte 60 ; Y pos + .byte 40 ; X pos + .byte 74 ; Y pos + .byte 4 ; X vec + .byte -5 ; Y vec metaBuffer7: - .byte 0 ; X pos - .byte 70 ; Y pos + .byte 71 ; X pos + .byte 58 ; Y pos + .byte 5 ; X vec + .byte 5 ; Y vec metaBuffer8: - .byte 0 ; X pos - .byte 80 ; Y pos + .byte 20 ; X pos + .byte 51 ; Y pos + .byte -5 ; X vec + .byte 3 ; Y vec metaBuffer9: - .byte 0 ; X pos - .byte 90 ; Y pos + .byte 74 ; X pos + .byte 61 ; Y pos + .byte 1 ; X vec + .byte -2 ; Y vec + +metaBuffer10: + .byte 115 ; X pos + .byte 86 ; Y pos + .byte 5 ; X vec + .byte -2 ; Y vec + +metaBuffer11: + .byte 104 ; X pos + .byte 53 ; Y pos + .byte -5 ; X vec + .byte 1 ; Y vec + +metaBuffer12: + .byte 21 ; X pos + .byte 2 ; Y pos + .byte 1 ; X vec + .byte 3 ; Y vec + +metaBuffer13: + .byte 2 ; X pos + .byte 127 ; Y pos + .byte 1 ; X vec + .byte -5 ; Y vec + +metaBuffer14: + .byte 97 ; X pos + .byte 123 ; Y pos + .byte 1 ; X vec + .byte -5 ; Y vec + +metaBuffer15: + .byte 5 ; X pos + .byte 12 ; Y pos + .byte 1 ; X vec + .byte -1 ; Y vec + +metaBuffer16: + .byte 4 ; X pos + .byte 40 ; Y pos + .byte -3 ; X vec + .byte 4 ; Y vec + +metaBuffer17: + .byte 43 ; X pos + .byte 67 ; Y pos + .byte 4 ; X vec + .byte -1 ; Y vec + +metaBuffer18: + .byte 105 ; X pos + .byte 43 ; Y pos + .byte -1 ; X vec + .byte -2 ; Y vec + +metaBuffer19: + .byte 75 ; X pos + .byte 4 ; Y pos + .byte -3 ; X vec + .byte -5 ; Y vec + bgBuffer0: .repeat 48