main pita/uxn12 / etc / tests / screen.tal
  1( Screen:
  2	Draws a table of all possible sprite arrangements. )
  3
  4|00 @System &vector $2 &wst $1 &rst $1 &pad $4 &r $2 &g $2 &b $2 &debug $1 &halt $1
  5|20 @Screen &vector $2 &width $2 &height $2 &auto $1 &pad $1 &x $2 &y $2 &addr $2 &pixel $1 &sprite $1
  6|90 @Mouse &vector $2 &x $2 &y $2 &state $1 &chord $1
  7
  8|0000
  9
 10	@center &x $2 &y $2
 11
 12|0100 ( -> )
 13
 14	( vector )
 15	;on-frame .Screen/vector DEO2
 16	( theme )
 17	#f07f .System/r DEO2
 18	#f0e0 .System/g DEO2
 19	#f0c0 .System/b DEO2
 20	( gba screen size 00f0 x 00a0 )
 21	( nds screen size 0100 x 00c0 )
 22	#0100 .Screen/width DEO2
 23	#00b0 .Screen/height DEO2
 24	( find screen center )
 25	.Screen/width DEI2 #01 SFT2 .center/x STZ2
 26	.Screen/height DEI2 #01 SFT2 .center/y STZ2
 27	( draw )
 28	draw-size
 29	draw-sprites
 30	draw-1bpp
 31	draw-2bpp
 32
 33BRK
 34
 35(
 36@|vectors )
 37
 38@on-frame ( -> )
 39
 40	( scroll background )
 41	[ LIT2 &f $2 ] INC2k ,&f STR2
 42		#01 SFT2
 43		#001f AND2
 44		#0040 SUB2
 45			DUP2 .Screen/x DEO2
 46			.Screen/y DEO2
 47	;patt-icn draw-fill
 48
 49	.center/x LDZ2 #0070 SUB2 .Screen/x DEO2
 50	.center/y LDZ2 #0048 SUB2 .Screen/y DEO2
 51	;anim-chr ,&f LDR2 #00ff AND2 #02 SFT #07 AND #40 SFT ADD2 .Screen/addr DEO2
 52	#8f .Screen/sprite DEO
 53
 54	draw-size
 55	draw-sprites
 56	draw-1bpp
 57	draw-2bpp
 58
 59BRK
 60
 61(
 62@|drawing )
 63
 64@draw-sprites ( -- )
 65
 66	( horizontal )
 67	.center/x LDZ2 #0060 SUB2 .Screen/x DEO2
 68	.center/y LDZ2 #0048 SUB2 .Screen/y DEO2
 69	;font-icn .Screen/addr DEO2
 70	#f6 .Screen/auto DEO
 71	#05 .Screen/sprite DEO
 72	( vertical )
 73	.center/x LDZ2 #0070 SUB2 .Screen/x DEO2
 74	.center/y LDZ2 #0038 SUB2 .Screen/y DEO2
 75	;font-icn .Screen/addr DEO2
 76	#f5 .Screen/auto DEO
 77	#05 .Screen/sprite DEO
 78	( table )
 79	#00 .Screen/auto DEO
 80	;preview-chr .Screen/addr DEO2
 81	#00
 82	&loop
 83		( move ) #00 OVR #0f AND #30 SFT
 84			.center/x LDZ2 #0060 SUB2 ADD2 .Screen/x DEO2
 85		( move ) #00 OVR #f0 AND #01 SFT
 86			.center/y LDZ2 #0038 SUB2 ADD2 .Screen/y DEO2
 87		( draw ) DUP .Screen/sprite DEO
 88		INC DUP ?&loop
 89	POP
 90
 91JMP2r
 92
 93@draw-1bpp ( -- )
 94
 95	#1000
 96	&loop
 97		( color ) STHk
 98		( y ) #00 OVR #42 SFT2
 99			.center/y LDZ2 #0038 SUB2 ADD2 STH2
100		( x ) #00 OVR #03 AND #40 SFT2 #0040 ADD2
101			.center/x LDZ2 #0010 SUB2 ADD2
102		STH2r STHr #00 draw-circle
103		INC GTHk ?&loop
104	POP2
105
106JMP2r
107
108@draw-2bpp ( -- )
109
110	#1000
111	&loop
112		( color ) STHk
113		( y ) #00 OVR #42 SFT2
114			.center/y LDZ2 #0008 ADD2 ADD2 STH2
115		( x ) #00 OVR #03 AND #40 SFT2 #0040 ADD2
116			.center/x LDZ2 #0010 SUB2 ADD2
117		STH2r STHr #80 draw-circle
118		INC GTHk ?&loop
119	POP2
120
121JMP2r
122
123@draw-circle ( x* y* color depth -- )
124
125	ADD STH
126	;preview-chr .Screen/addr DEO2
127	.Screen/y DEO2
128	.Screen/x DEO2
129	#01 .Screen/auto DEO
130	STHr .Screen/sprite DEOk
131	#02 .Screen/auto DEO
132	SWP #10 ADD SWP DEOk
133	.Screen/x DEI2k #0008 SUB2 ROT DEO2
134	#01 .Screen/auto DEO
135	SWP #10 ADD SWP DEOk
136	SWP #10 ADD SWP DEO
137
138JMP2r
139
140@draw-fill ( patt* color -- )
141
142	.Screen/addr DEO2
143	[ LIT2 01 -Screen/auto ] DEO
144	.Screen/x DEI2 ,&anchor STR2
145	.Screen/width DEI2 #03 SFT2 NIP #08 ADD ,&x STR
146	.Screen/height DEI2 #03 SFT2 NIP #08 ADD #00
147	&h
148		DUP #02 SFT STH
149		[ LIT &x $1 ] #00
150		&w
151			DUP #02 SFT STHkr ADD #01 AND .Screen/sprite DEO
152			INC GTHk ?&w
153			.Screen/y DEI2k #0008 ADD2 ROT DEO2
154			[ LIT2 &anchor $2 ] .Screen/x DEO2
155		POP2 POPr
156		INC GTHk ?&h
157	POP2
158
159JMP2r
160
161@draw-size ( -- )
162
163	#01 .Screen/auto DEO
164	.center/x LDZ2 #0030 ADD2 .Screen/x DEO2
165	.center/y LDZ2 #0048 SUB2 .Screen/y DEO2
166	.Screen/width DEI2 draw-dec
167	;x-icn .Screen/addr DEO2
168	#01 .Screen/sprite DEO
169	.Screen/height DEI2
170
171@draw-dec ( short* -- )
172
173	#00 ,&z STR
174	#2710 draw-dec/parse
175	#03e8 draw-dec/parse
176	#0064 draw-dec/parse
177	#000a draw-dec/parse
178	NIP
179	&emit
180		DUP [ LIT &z $1 ] EQU ?&skip
181			#ff ,&z STR #00 OVR #30 SFT ;font-icn ADD2 .Screen/addr DEO2
182			#01 .Screen/sprite DEO
183			&skip
184	POP
185
186JMP2r
187	&parse DIV2k DUP ,&emit JSR MUL2 SUB2 JMP2r
188
189(
190@|assets )
191
192@patt-icn [
193	aa55 aa55 aa55 aa55 ]
194@x-icn [
195	0000 0018 1800 0000 ]
196@preview-chr [
197	0f38 675f dfbf bfbf 0007 1820 2344 4848 ]
198@font-icn ( 0-f ) [
199	007c 8282 8282 827c 0030 1010 1010 1010
200	007c 8202 7c80 80fe 007c 8202 1c02 827c
201	000c 1424 4484 fe04 00fe 8080 7c02 827c
202	007c 8280 fc82 827c 007c 8202 1e02 0202
203	007c 8282 7c82 827c 007c 8282 7e02 827c
204	007c 8202 7e82 827e 00fc 8282 fc82 82fc
205	007c 8280 8080 827c 00fc 8282 8282 82fc
206	007c 8280 f080 827c 007c 8280 f080 8080 [
207@anim-chr [
208	0000 0018 1800 0000 c381 0000 0000 81c3 
209	0000 183c 3c18 0000 0000 0000 0000 0000
210	0018 3c7e 7e3c 1800 0000 0000 0000 0000 
211	3c7e ffe7 e7ff 7e3c 0000 0018 1800 0000
212	ffff e7c3 c3e7 ffff 0000 183c 3c18 0000 
213	ffe7 c381 81c3 e7ff 0018 3c7e 7e3c 1800
214	c381 0000 0000 81c3 3c7e ffe7 e7ff 7e3c 
215	0000 0000 0000 0000 ffff e7c3 c3e7 ffff
216	0000 0000 0000 0000 ffe7 c381 81c3 e7ff ]
217