https://github.com/akkartik/mu/blob/main/316colors.subx
1
2
3
4 == code
5
6
7 color-rgb:
8
9 55/push-ebp
10 89/<- %ebp 4/r32/esp
11
12 50/push-eax
13 56/push-esi
14
15 8b/-> *(ebp+8) 6/r32/esi
16
17 81 7/subop/compare %esi 0x100/imm32
18 {
19 7c/jump-if-< break/disp8
20 (abort "invalid color")
21 }
22
23 b8/copy-to-eax Colors-rgb/imm32
24 8b/-> *(eax+esi<<2+4) 6/r32/esi
25
26 89/<- %eax 6/r32/esi
27 25/and-eax-with 0xff/imm32
28 89/<- %ecx 0/r32/eax
29
30 89/<- %eax 6/r32/esi
31 c1 5/subop/shift-right-logical %eax 8/imm8
32 25/and-eax-with 0xff/imm32
33 89/<- %edx 0/r32/eax
34
35 89/<- %eax 6/r32/esi
36 c1 5/subop/shift-right-logical %eax 0x10/imm8
37 89/<- %ebx 0/r32/eax
38 $colors-rgb:end:
39
40 5e/pop-to-esi
41 58/pop-to-eax
42
43 89/<- %esp 5/r32/ebp
44 5d/pop-to-ebp
45 c3/return
46
47 test-color-rgb:
48
49 55/push-ebp
50 89/<- %ebp 4/r32/esp
51
52 (color-rgb 0x10)
53 (check-ints-equal %ecx 0 "F - test-color-rgb/0x10/r")
54 (check-ints-equal %edx 0 "F - test-color-rgb/0x10/g")
55 (check-ints-equal %ebx 0 "F - test-color-rgb/0x10/b")
56 (color-rgb 1)
57 (check-ints-equal %ecx 0 "F - test-color-rgb/1/r")
58 (check-ints-equal %edx 0 "F - test-color-rgb/1/g")
59 (check-ints-equal %ebx 0xaa "F - test-color-rgb/1/b")
60 (color-rgb 0xf)
61 (check-ints-equal %ecx 0xff "F - test-color-rgb/0xf/r")
62 (check-ints-equal %edx 0xff "F - test-color-rgb/0xf/g")
63 (check-ints-equal %ebx 0xff "F - test-color-rgb/0xf/b")
64
65 89/<- %esp 5/r32/ebp
66 5d/pop-to-ebp
67 c3/return
68
69 == data
70
71 Colors-rgb:
72 0x400/imm32
73 00 00 00 00
74 00 00 aa 00
75 00 aa 00 00
76 00 aa aa 00
77 aa 00 00 00
78 aa 00 aa 00
79 aa 55 00 00
80 aa aa aa 00
81 55 55 55 00
82 55 55 ff 00
83 55 ff 55 00
84 55 ff ff 00
85 ff 55 55 00
86 ff 55 ff 00
87 ff ff 55 00
88 ff ff ff 00
89 00 00 00 00
90 14 14 14 00
91 20 20 20 00
92 2c 2c 2c 00
93 38 38 38 00
94 45 45 45 00
95 51 51 51 00
96 61 61 61 00
97 71 71 71 00
98 82 82 82 00
99 92 92 92 00
100 a2 a2 a2 00
101 b6 b6 b6 00
102 cb cb cb 00
103 e3 e3 e3 00
104 ff ff ff 00
105 00 00 ff 00
106 41 00 ff 00
107 7d 00 ff 00
108 be 00 ff 00
109 ff 00 ff 00
110 ff 00 be 00
111 ff 00 7d 00
112 ff 00 41 00
113 ff 00 00 00
114 ff 41 00 00
115 ff 7d 00 00
116 ff be 00 00
117 ff ff 00 00
118 be ff 00 00
119 7d ff 00 00
120 41 ff 00 00
121 00 ff 00 00
122 00 ff 41 00
123 00 ff 7d 00
124 00 ff be 00
125 00 ff ff 00
126 00 be ff 00
127 00 7d ff 00
128 00 41 ff 00
129 7d 7d ff 00
130 9e 7d ff 00
131 be 7d ff 00
132 df 7d ff 00
133 ff 7d ff 00
134 ff 7d df 00
135 ff 7d be 00
136 ff 7d 9e 00
137 ff 7d 7d 00
138 ff 9e 7d 00
139 ff be 7d 00
140 ff df 7d 00
141 ff ff 7d 00
142 df ff 7d 00
143 be ff 7d 00
144 9e ff 7d 00
145 7d ff 7d 00
146 7d ff 9e 00
147 7d ff be 00
148 7d ff df 00
149 7d ff ff 00
150 7d df ff 00
151 7d be ff 00
152 7d 9e ff 00
153 b6 b6 ff 00
154 c7 b6 ff 00
155 db b6 ff 00
156 eb b6 ff 00
157 ff b6 ff 00
158 ff b6 eb 00
159 ff b6 db 00
160 ff b6 c7 00
161 ff b6 b6 00
162 ff c7 b6 00
163 ff db b6 00
164 ff eb b6 00
165 ff ff b6 00
166 eb ff b6 00
167 db ff b6 00
168 c7 ff b6 00
169 b6 ff b6 00
170 b6 ff c7 00
171 b6 ff db 00
172 b6 ff eb 00
173 b6 ff ff 00
174 b6 eb ff 00
175 b6 db ff 00
176 b6 c7 ff 00
177 00 00 71 00
178 1c 00 71 00
179 38 00 71 00
180 55 00 71 00
181 71 00 71 00
182 71 00 55 00
183 71 00 38 00
184 71 00 1c 00
185 71 00 00 00
186 71 1c 00 00
187 71 38 00 00
188 71 55 00 00
189 71 71 00 00
190 55 71 00 00
191 38 71 00 00
192 1c 71 00 00
193 00 71 00 00
194 00 71 1c 00
195 00 71 38 00
196 00 71 55 00
197 00 71 71 00
198 00 55 71 00
199 00 38 71 00
200 00 1c 71 00
201 38 38 71 00
202 45 38 71 00
203 55 38 71 00
204 61 38 71 00
205 71 38 71 00
206 71 38 61 00
207 71 38 55 00
208 71 38 45 00
209 71 38 38 00
210 71 45 38 00
211 71 55 38 00
212 71 61 38 00
213 71 71 38 00
214 61 71 38 00
215 55 71 38 00
216 45 71 38 00
217 38 71 38 00
218 38 71 45 00
219 38 71 55 00
220 38 71 61 00
221 38 71 71 00
222 38 61 71 00
223 38 55 71 00
224 38 45 71 00
225 51 51 71 00
226 59 51 71 00
227 61 51 71 00
228 69 51 71 00
229 71 51 71 00
230 71 51 69 00
231 71 51 61 00
232 71 51 59 00
233 71 51 51 00
234 71 59 51 00
235 71 61 51 00
236 71 69 51 00
237 71 71 51 00
238 69 71 51 00
239 61 71 51 00
240 59 71 51 00
241 51 71 51 00
242 51 71 59 00
243 51 71 61 00
244 51 71 69 00
245 51 71 71 00
246 51 69 71 00
247 51 61 71 00
248 51 59 71 00
249 00 00 41 00
250 10 00 41 00
251 20 00 41 00
252 30 00 41 00
253 41 00 41 00
254 41 00 30 00
255 41 00 20 00
256 41 00 10 00
257 41 00 00 00
258 41 10 00 00
259 41 20 00 00
260 41 30 00 00
261 41 41 00 00
262 30 41 00 00
263 20 41 00 00
264 10 41 00 00
265 00 41 00 00
266 00 41 10 00
267 00 41 20 00
268 00 41 30 00
269 00 41 41 00
270 00 30 41 00
271 00 20 41 00
272 00 10 41 00
273 20 20 41 00
274 28 20 41 00
275 30 20 41 00
276 38 20 41 00
277 41 20 41 00
278 41 20 38 00
279 41 20 30 00
280 41 20 28 00
281 41 20 20 00
282 41 28 20 00
283 41 30 20 00
284 41 38 20 00
285 41 41 20 00
286 38 41 20 00
287 30 41 20 00
288 28 41 20 00
289 20 41 20 00
290 20 41 28 00
291 20 41 30 00
292 20 41 38 00
293 20 41 41 00
294 20 38 41 00
295 20 30 41 00
296 20 28 41 00
297 2c 2c 41 00
298 30 2c 41 00
299 34 2c 41 00
300 3c 2c 41 00
301 41 2c 41 00
302 41 2c 3c 00
303 41 2c 34 00
304 41 2c 30 00
305 41 2c 2c 00
306 41 30 2c 00
307 41 34 2c 00
308 41 3c 2c 00
309 41 41 2c 00
310 3c 41 2c 00
311 34 41 2c 00
312 30 41 2c 00
313 2c 41 2c 00
314 2c 41 30 00
315 2c 41 34 00
316 2c 41 3c 00
317 2c 41 41 00
318 2c 3c 41 00
319 2c 34 41 00
320 2c 30 41 00
321 00 00 00 00
322 00 00 00 00
323 00 00 00 00
324 00 00 00 00
325 00 00 00 00
326 00 00 00 00
327 00 00 00 00
328 00 00 00 00