Browse code

(animation.tal) Minor optimizations

neauoire authored on 09/01/2022 21:07:48
Showing 1 changed files
... ...
@@ -1,15 +1,18 @@
1 1
 ( GUI Animation )
2 2
 
3 3
 %2// { #01 SFT2 }
4
+%AUTO-XADDR  { #05 .Screen/auto DEO }
4 5
 
5 6
 ( devices )
6 7
 
7
-|00 @System     [ &vector $2 &pad    $6 &r      $2 &g     $2 &b      $2 ]
8
-|20 @Screen     [ &vector $2 &width  $2 &height $2 &pad   $2 &x      $2 &y $2 &addr $2 &pixel $1 &sprite $1 ]
8
+|00 @System     &vector $2 &wst      $1 &rst    $1 &eaddr  $2 &ecode  $1 &pad     $1 &r       $2 &g      $2 &b     $2 &debug  $1 &halt $1
9
+|20 @Screen     &vector $2 &width    $2 &height $2 &auto   $1 &pad    $1 &x       $2 &y       $2 &addr   $2 &pixel $1 &sprite $1
9 10
 
10 11
 |0000
11 12
 
12
-@dvd [ &x $2 &y $2 &dx $1 &dy $1 ]
13
+@dvd 
14
+	&x $2 &y $2 
15
+	&dx $1 &dy $1
13 16
 
14 17
 ( program )
15 18
 
... ...
@@ -27,52 +30,54 @@
27 30
 	.Screen/width DEI2 2// .dvd/x STZ2
28 31
 	.Screen/height DEI2 2// .dvd/y STZ2
29 32
 	
33
+	AUTO-XADDR
34
+
30 35
 	#01 ;draw-dvd JSR2
31 36
 	
32 37
 BRK
33 38
 
34 39
 @on-frame ( -> )
35 40
 
36
-	( clear ) #00 ;draw-dvd JSR2
41
+	#00 ;draw-dvd JSR2
42
+
37 43
 	( case: hit-right ) .dvd/x LDZ2 .Screen/width DEI2 #0020 SUB2 EQU2
38 44
 	( case: hit-left ) .dvd/x LDZ2 #0000 EQU2 
39 45
 	#0000 EQU2 ,&no-flipx JCN 
40
-		.dvd/dx LDZ #00 EQU .dvd/dx STZ &no-flipx
46
+		.dvd/dx LDZk #00 EQU SWP STZ &no-flipx
47
+
41 48
 	( case: hit-bottom ) .dvd/y LDZ2 .Screen/height DEI2 #0010 SUB2 EQU2
42 49
 	( case: hit-top ) .dvd/y LDZ2 #0000 EQU2 
43 50
 	#0000 EQU2 ,&no-flipy JCN 
44
-		.dvd/dy LDZ #00 EQU .dvd/dy STZ &no-flipy
51
+		.dvd/dy LDZk #00 EQU SWP STZ &no-flipy
52
+
45 53
 	( incr ) .dvd/x LDZ2 #0001 #00 .dvd/dx LDZ #00 EQU DUP2 ADD2 SUB2 ADD2 .dvd/x STZ2
46 54
 	( incr ) .dvd/y LDZ2 #0001 #00 .dvd/dy LDZ #00 EQU DUP2 ADD2 SUB2 ADD2 .dvd/y STZ2
47
-	( draw ) #01 ;draw-dvd JSR2
55
+
56
+	#01 ;draw-dvd JSR2
48 57
 
49 58
 BRK
50 59
 
51 60
 @draw-dvd ( color -- )
52 61
 	
53
-	( stash ) STH 
62
+	STH
54 63
 	;dvd_icn .Screen/addr DEO2
55
-	[ .dvd/y LDZ2 #0010 ADD2 ] .dvd/y LDZ2 
56
-	&ver
57
-		DUP2 .Screen/y DEO2
58
-		[ .dvd/x LDZ2 #0020 ADD2 ] .dvd/x LDZ2 
59
-		&hor
60
-			DUP2 .Screen/x DEO2
61
-			( draw ) STHkr .Screen/sprite DEO
62
-			( next ) .Screen/addr DEI2 #0008 ADD2 .Screen/addr DEO2
63
-			( incr ) #0008 ADD2
64
-			GTH2k ,&hor JCN
65
-		POP2 POP2
66
-		( incr ) #0008 ADD2
67
-		GTH2k ,&ver JCN
68
-	POP2 POP2
69
-	( destroy ) POPr
64
+	.dvd/x LDZ2 .Screen/x DEO2
65
+	.dvd/y LDZ2 .Screen/y DEO2
66
+	#0800
67
+	&loop
68
+		DUP #04 NEQ ,&no-lb JCN
69
+			.Screen/x DEI2k #0020 SUB2 ROT DEO2
70
+			.Screen/y DEI2k #0008 ADD2 ROT DEO2
71
+			&no-lb
72
+		STHkr .Screen/sprite DEO
73
+		INC GTHk ,&loop JCN
74
+	POP2
75
+	POPr
70 76
 
71 77
 JMP2r
72 78
 
73
-@dvd_icn [
79
+@dvd_icn ( 4 x 2 )
74 80
 	001f 3f38 3838 787f 00fe fe7e 7777 e3c3
75 81
 	000f 1f3b 7b77 e7c7 00fc fe8f 8707 0efc
76 82
 	7f00 000f ff7f 0700 0301 00ff f0f8 ff00
77 83
 	8700 00ff 7f7f ff00 f000 00e0 fcfc 8000
78
-]
79 84
\ No newline at end of file