uxn

Varvara Ordinator, written in ANSI C(SDL2)
git clone https://git.eamoncaddigan.net/uxn.git
Log | Files | Refs | README | LICENSE

commit 17e6d4df227fcb925d5b44975fd0f639009471ee
parent 362dee8b1b36646ecf9cda47989bd0e0ce254f33
Author: Devine Lu Linvega <aliceffekt@gmail.com>
Date:   Mon, 15 Jan 2024 08:41:54 -0800

(bunnymark) Optimizations

Diffstat:
Mprojects/examples/demos/bunnymark.tal | 98+++++++++++++++++++++++++++++++++++++++++--------------------------------------
1 file changed, 51 insertions(+), 47 deletions(-)

diff --git a/projects/examples/demos/bunnymark.tal b/projects/examples/demos/bunnymark.tal @@ -45,22 +45,56 @@ .Mouse/state DEI ( ) DUP #01 NEQ ?{ add-bunny } ( ) #02 LTH ?{ remove-bunny } + ( | clear ) + #0000 DUP2 .Screen/x DEO2 + .Screen/y DEO2 + [ LIT2 80 -Screen/pixel ] DEO ;sprite/length LDA2 #0000 &loop ( -- ) EQU2k ?&bail - DUP2 draw-bunny INC2 !&loop + DUP2 <draw-bunny> + INC2 !&loop &bail ( -- ) POP2 POP2 BRK -@draw-bunny ( idx -- ) - ( compute the offset to the beginning of this bunny's data ) #30 SFT2 ;sprite/array ADD2 - ( clear the old sprite location ) - ( top ) LDA2k #05 SFT2 .Screen/x DEO2 - INC2k INC2 LDA2 #05 SFT2 .Screen/y DEO2 - <clear-sprite> - ( move the sprite by its velocity ) LDA2k OVR2 #0004 ADD2 LDA2 ADD2 OVR2 STA2 +@add-bunny ( -- ) + ;sprite/length LDA2 + ( | cap bunny count at 65535 ) + DUP2 #ffff EQU2 ?&bail + ( | compute the offset to the beginning of this new bunny's data ) + DUP2 #30 SFT2 ;sprite/array ADD2 + ( | populate the new bunny's x/y/xvel/yvel with random values ) + #00 rand OVR2 STA2 + rand #1f AND rand OVR2 INC2 INC2 STA2 + #00 rand #7f AND OVR2 #0004 ADD2 STA2 + #00 rand #7f AND OVR2 #0006 ADD2 STA2 + ( | pop ptr to bunny data ) + POP2 + ( | write new increased array length ) + INC2 DUP2 ;sprite/length STA2 + ( | update label ) + STH2k #0028 #0008 STH2r <draw-dec> + &bail ( pop sprite/length ) + POP2 JMP2r + +@remove-bunny ( -- ) + ;sprite/length LDA2 + ( don't let length go below 0 ) ORAk #00 EQU ?&bail + #0001 SUB2 DUP2 ;sprite/length STA2 + ( update label ) STH2k #0028 #0008 STH2r <draw-dec> + &bail POP2 JMP2r + +( +@|drawing ) + +@<draw-bunny> ( idx -- ) + ( | compute the offset to the beginning of this bunny's data ) + #30 SFT2 ;sprite/array ADD2 + ( | move the sprite by its velocity ) + LDA2k OVR2 #0004 ADD2 LDA2 ADD2 OVR2 STA2 INC2k INC2 LDA2 OVR2 #0006 ADD2 LDA2 ADD2 OVR2 INC2 INC2 STA2 - ( check for right wall collision + bounce x ) DUP2 #0004 ADD2 LDA2 #0f SFT2 #0001 EQU2 ?&skip-max-x + ( | check for right wall collision + bounce x ) + DUP2 #0004 ADD2 LDA2 #0f SFT2 #0001 EQU2 ?&skip-max-x LDA2k #05 SFT2 #0008 ADD2 .Screen/width DEI2 LTH2 ?&skip-max-x DUP2 #0004 ADD2 LDA2 #ffff MUL2 OVR2 #0004 ADD2 STA2 &skip-max-x ( check for left wall collision + bounce x ) @@ -68,7 +102,7 @@ DUP2 #0004 ADD2 LDA2 #ffff MUL2 OVR2 #0004 ADD2 STA2 &skip-min-x ( check for bottom wall collision + bounce y ) DUP2 #0006 ADD2 LDA2 #0f SFT2 #0001 EQU2 ?&skip-max-y - INC2k INC2 LDA2 #05 SFT2 #0008 ADD2 .Screen/height DEI2 LTH2 ?&skip-max-y + INC2k INC2 LDA2 #05 SFT2 #0010 ADD2 .Screen/height DEI2 LTH2 ?&skip-max-y DUP2 #0006 ADD2 LDA2 #ffff MUL2 OVR2 #0006 ADD2 STA2 !&skip-gravity &skip-max-y ( check for top wall collision + bounce x ) @@ -86,27 +120,6 @@ [ LIT2 00 -Screen/auto ] DEO JMP2r -@<clear-sprite> ( -- ) - ;fill-icn .Screen/addr DEO2 - [ LIT2 11 -Screen/auto ] DEO - [ LIT2 00 -Screen/sprite ] DEO - [ LIT2 00 -Screen/auto ] DEO - JMP2r - -@add-bunny ( -- ) - ;sprite/length LDA2 - ( cap bunny count at 65535 ) DUP2 #ffff EQU2 ?&bail - ( compute the offset to the beginning of this new bunny's data ) DUP2 #30 SFT2 ;sprite/array ADD2 - ( populate the new bunny's x/y/xvel/yvel with random values ) #00 [ rand ] OVR2 STA2 - [ rand #1f AND ] [ rand ] OVR2 INC2 INC2 STA2 - #00 [ rand #7f AND ] OVR2 #0004 ADD2 STA2 - #00 [ rand #7f AND ] OVR2 #0006 ADD2 STA2 - ( pop ptr to bunny data ) POP2 - ( write new increased array length ) INC2 DUP2 ;sprite/length STA2 - ( update label ) STH2k #0028 #0008 STH2r <draw-dec> - &bail ( pop sprite/length ) - POP2 JMP2r - @<draw-str> ( x* y* text* color -- ) ,&t STR [ LIT2 01 -Screen/auto ] DEO @@ -120,9 +133,9 @@ [ LIT2 01 -Screen/auto ] DEO SWP2 .Screen/y DEO2 SWP2 .Screen/x DEO2 - #2710 DIV2k DUP2 NIP <draw-digit> - MUL2 SUB2 #03e8 DIV2k DUP2 NIP <draw-digit> - MUL2 SUB2 #0064 DIV2k DUP2 NIP <draw-digit> + #2710 DIV2k DUP <draw-digit> + MUL2 SUB2 #03e8 DIV2k DUP <draw-digit> + MUL2 SUB2 #0064 DIV2k DUP <draw-digit> MUL2 SUB2 NIP #0a DIVk DUP <draw-digit> MUL SUB <draw-digit> [ LIT2 00 -Screen/auto ] DEO @@ -130,20 +143,9 @@ @<draw-digit> ( num -- ) #30 SFT #00 SWP ;font/num ADD2 .Screen/addr DEO2 - #41 .Screen/sprite DEO + [ LIT2 41 -Screen/sprite ] DEO JMP2r -@remove-bunny ( -- ) - ;sprite/length LDA2 - ( don't let length go below 0 ) ORAk #00 EQU ?&bail - ( clear the old sprite location ) DUP2 #0001 SUB2 #30 SFT2 ;sprite/array ADD2 - ( top ) LDA2k #05 SFT2 .Screen/x DEO2 - INC2k INC2 LDA2 #05 SFT2 .Screen/y DEO2 - ( clear ) <clear-sprite> - POP2 #0001 SUB2 DUP2 ;sprite/length STA2 - ( update label ) STH2k #0028 #0008 STH2r <draw-dec> - &bail POP2 JMP2r - ( @|random ) @@ -205,7 +207,9 @@ @bunny-chr [ 2466 6600 2424 003c 4200 007e 7e7e 7e7e 1818 3c3c 1800 0000 ff66 4242 667e 4242 ] - ( beginning of sprite pixel data + array ) + +( +@|memory ) @sprite &length $2 &array &x 0600 &y 0500 &xvel 0060 &yvel 0010