commit e105a1c

Devine Lu Linvega  ·  2025-10-18 14:45:03 +0000 UTC
parent 66f4577
Improved core
4 files changed,  +283, -281
+166, -166
  1@@ -1,169 +1,169 @@
  2-a002 ab80 0637 a00b 8560 0313 a001 2580
  3-1037 a003 1716 1c20 000a a002 7860 0990
  4+a002 a780 0637 a00b 8060 030e a001 2580
  5+1037 a003 1716 1c20 000a a002 7460 098b
  6 a001 0f17 00a0 0217 160b 2000 1d80 1216
  7-a02f 0081 80fb 1389 2000 0ca0 0b50 a000
  8-00a0 029c 6009 3403 1100 a001 5040 ffbf
  9+a03f 0081 80fb 1389 2000 0ca0 0b4b a000
 10+00a0 0298 6009 2f03 1100 a001 5040 ffbf
 11 a002 1716 0b20 0007 8012 1660 000b 00a0
 12-0000 6000 3260 0180 00a0 5f30 8180 fb13
 13-8920 000c a00b 50a0 0030 a002 9c60 08fb
 14+0000 6000 2e60 017b 00a0 7f40 8180 fb13
 15+8920 000c a00b 4ba0 0040 a002 9860 08f6
 16 0311 6c94 0620 0003 0222 6c60 ffdb 2140
 17-fff1 8019 176c 2180 a837 a000 0180 aa37
 18-6002 30a0 0000 800f 1620 001c a001 cc80
 19-ac37 80a3 1620 0012 9d20 000c a00b 59a0
 20-0000 a002 a160 08b3 226c 2180 0060 020c
 21-40ff d380 0f33 800e 13a0 01e0 8002 376c
 22-0000 0100 0100 0000 0100 0100 0100 0000
 23-0001 f300 a00a df60 08b6 8020 60ff 93a0
 24-0030 6008 aba0 0ae9 6008 a5a0 09dc 3426
 25-a001 0039 6008 a8a0 0aee 6008 93a0 0030
 26-80a8 37a0 0001 80aa 37a0 0100 2680 bd33
 27-a001 e880 0237 a001 f380 ae37 21aa 20ff
 28-eb22 22a0 02a6 60ff 3aa0 0030 80a8 37a0
 29-07ca 34a0 348b a000 0280 aa37 2680 ae37
 30-a000 0338 2660 07e7 a439 80aa 3724 80ae
 31-37aa 20ff e122 226c 7573 6167 653a 2064
 32-7269 6662 6c69 6d2e 726f 6d20 696e 2e74
 33-616c 206f 7574 2e72 6f6d 0a00 5061 7468
 34-0046 696c 6500 2e73 796d 0000 4472 6966
 35-626c 696d 0a55 786e 7461 6c20 4173 7365
 36-6d62 6c65 720a 4279 2044 6576 696e 6520
 37-4c75 204c 696e 7665 6761 0a31 3820 5365
 38-7020 3230 3235 0000 8047 32a0 0378 2920
 39-000c a00b 7da0 0b82 a00b 4060 077d 8031
 40-32a0 0399 2920 000c a00b 7da0 0b82 a00b
 41-2e60 0767 800f 1620 0010 6005 c180 0f16
 42-2000 07a0 800f 1740 04b9 6c90 2000 0222
 43-6ca0 0352 2ca0 0352 80f7 336c a003 7880
 44-f033 a001 3313 6ca0 0399 80e5 33a0 0049
 45-136c 6006 e920 062b 6001 e320 0610 9060
 46-00f5 a11d 2000 0e22 2660 0343 a11d 2003
 47-8a22 4001 6021 342c c000 3426 a029 0029
 48-2000 03c0 0159 a028 0029 2000 0141 cfc0
 49-e753 8000 0820 ff9d 6cc0 00b4 a07d 0029
 50-2000 11c0 0159 cf20 000a 8000 6003 3222
 51-4240 ff81 cf80 0008 2000 0ba0 0060 6003
 52-1180 2060 031b 34a0 7b00 2920 0001 41c0
 53-c853 6ca0 6018 13a0 0060 116c 0680 200a
 54-2000 0a02 a000 6060 ff41 40ff e6a0 0060
 55-8106 808f 0b20 0009 a00b 50a0 0b34 6006
 56-7680 eb13 316c a000 9081 0680 bf0b 2000
 57-09a0 0b50 a00b 2060 065d 80eb 1331 6ca0
 58-90e5 1394 802f 0820 0009 9460 ffd8 2194
 59-20ff f022 80d1 1280 0313 6c21 a000 c813
 60-802f 60ff c194 0620 0006 0222 a000 906c
 61-60ff b321 40ff ee0f a004 fe94 cf08 2000
 62-0ca0 0003 3894 20ff f222 a0ff ff42 6c22
 63-6c22 4001 c922 40fe c360 0070 6003 c440
 64-056d 6000 6760 03bb 4005 6060 005e 2660
 65-ff8d 4002 8660 ffa3 4002 8080 8060 051e
 66-6000 4960 0411 4005 1580 8060 0510 6000
 67-3b60 03f5 4005 0780 a060 0502 6000 2d60
 68-03ef 4004 f560 0024 8020 4004 e760 001c
 69-8040 4004 df80 6040 04da 6000 0f40 0494
 70-6000 0940 047d 6000 0340 01a3 2194 8020
 71-0a20 0009 a00b 59a0 0b34 4005 7a6c 7c04
 72-7924 0482 4004 8b26 0495 2c04 9b5f 04a0
 73-2e04 a92d 04ae 3b04 b73d 04bc 2104 cd3f
 74-04c5 2304 da22 04e0 7d04 717e 0196 2804
 75-7529 046f 5b04 6f5d 046f 2504 e600 2660
 76-000e 8000 090f 26a0 0618 6005 0c4f 1d6c
 77-e01f 00a0 05b8 a4a0 0003 2460 0502 2000
 78-0f41 a000 0338 9420 ffec 2222 6280 006c
 79-225c b4a0 4c49 2880 701f 0f5d a000 0338
 80-9480 210b 2000 2e94 8032 0920 0005 c020
 81-4000 1d94 8072 0920 0005 c040 4000 1194
 82-806b 0920 0005 c080 4000 0522 4280 006c
 83-5d21 40ff cb22 4f6c 4c49 5449 4e43 504f
 84-504e 4950 5357 5052 4f54 4455 504f 5652
 85-4551 554e 4551 4754 484c 5448 4a4d 504a
 86-434e 4a53 5253 5448 4c44 5a53 545a 4c44
 87-5253 5452 4c44 4153 5441 4445 4944 454f
 88-4144 4453 5542 4d55 4c44 4956 414e 444f
 89-5241 454f 5253 4654 4252 4b00 2280 0081
 90-80fb 1306 a01b 8ba1 80fa 3315 0680 041f
 91-6003 c004 6003 bc80 1833 a006 506c 80e4
 92-32a0 0001 3994 60ff e360 00cf 80d6 336c
 93-cebb 2e2e 0060 03e6 2000 1594 60fd f821
 94-1d20 000c 9480 7b08 2000 0560 fed0 0c6c
 95-a00b 59a0 0b34 4003 fe94 807b 0820 ff9c
 96-9480 2f08 20fd b494 8026 0820 fdad 6c60
 97-ffc3 2660 0019 211d 2000 7626 6000 b221
 98-1d20 006d 6000 2b80 0060 0035 40fc 982f
 99-802f 32a0 0b8b a820 0011 26ef 6003 9a20
100-000d 6003 8a60 0387 40ff eb22 a0ff ff23
101-626c 9406 2000 0302 226c 6000 0421 40ff
102-f1a0 0b8b a126 a01b 8b2b 2000 09a0 0b50
103-a00b 2760 0381 80e9 3315 6c60 fcd5 6003
104-4e94 0620 0004 0222 226c 60fc cf21 40ff
105-f022 a00b 61a0 0b2e 4003 5c26 6000 32a1
106-1d20 0009 2280 0260 02bd 4000 7ca1 2114
107-8002 1c20 0010 6002 ae27 3521 2194 8002
108-1d05 0515 226c 2222 a00b 61a0 0b20 4003
109-262f a007 ca34 a034 8b26 a000 0338 ef60
110-02f7 2000 0b60 00c1 aa20 ffed 22a0 ffff
111-2362 6c34 2fa0 07ca 34a0 348b 2660 00a9
112-34ef 242b 2000 0760 009f aa20 ffee 2362
113-6c26 60ff bca1 1d20 000d 2280 2c32 2780
114-01a0 ffff 6000 0223 6c04 6000 1c60 0019
115-6000 1660 fe9f 2660 fef5 211d 20ff 8894
116-6000 0621 9420 fff7 14a0 348b a126 a07c
117-8b2b 2000 09a0 0b50 a00b 1860 0299 80e9
118-3315 6ca0 07ca 34a0 348b a820 0036 a121
119-1480 011c 2000 27b4 a001 0028 2000 1f26
120-a000 0338 9480 4119 801a 0b20 000f a00a
121-f760 029c 2660 0298 800a 60f9 7522 6000
122-0840 ffc6 2222 40f9 cba0 0003 3840 021f
123-26a0 0080 3802 2000 016c a00b 6ba0 0b20
124-4002 3460 01f8 2001 d760 fe2d 60ff 02a1
125-1d20 0009 a00b 59a0 0b0e 6002 1a34 6c80
126-1b33 60fe 1460 ff29 a121 af14 8002 1c20
127-0010 2660 0171 6000 1260 000f a000 0060
128-0009 d44f 8001 1d6f 1534 6c04 6000 00a0
129-1c8b a126 a034 8b2b 2000 09a0 0b50 a00b
130-0360 01d3 80e9 3315 6ca0 0912 60ff b003
131-6ca0 091a 40ff a8a0 0921 60ff a2a1 1d20
132-0004 2280 006c 6001 1e60 000e 60ff 6103
133-6ca0 0930 60ff 8860 010d 2121 396c 80af
134-32a0 1c8b a820 0013 26a0 0949 35a6 a000
135-0438 342e a000 0638 40ff e922 226c b460
136-00ed a121 3434 a11d 2000 06a0 0b59 6000
137-376c 60ff e923 0340 00a4 60ff e123 4000
138-9960 ffda 2434 60ff b160 000f 0340 008e
139-60ff cb24 3460 ffa2 4000 7f26 a000 8038
140-0220 0001 6ca0 0b6b a000 0026 60fe 24a0
141-0003 3860 fac9 2121 34a0 0003 38a0 0b0e
142-4001 1894 6000 5721 9420 fff7 226c 60fb
143-df40 004a 6000 be80 0209 8050 1f80 801d
144-6000 3b60 00b8 8000 0820 001e 6000 a606
145-8002 0920 0008 0260 0086 0340 0020 8004
146-0920 0006 6000 7940 0010 22a0 0b59 a00b
147-3940 00c3 6000 0760 ff17 0460 0000 6000
148-1207 2000 0b22 02a0 0b73 a00b 4840 00a7
149-40f8 00a0 0100 a180 fa33 a1a0 0100 2b20
150-0004 a180 f633 6c80 ea32 6c60 fff9 3880
151-e233 6c80 0f1c 800a 8b20 0005 1980 6118
152-6c02 8030 186c 9480 3019 0680 090a 0c6c
153-8027 1906 800a 1980 050a 0c6c 0280 ff6c
154-e000 00c0 407f 60ff ddc0 000f 7821 9420
155-fff1 226f 6ca6 6000 1624 2139 036c 2660
156-ffc4 0120 0005 1480 0008 6c21 40ff f094
157-2000 0221 6c21 40ff f6a6 60ff f224 3924
158-2f27 3824 a820 000c 94d4 4f09 2000 0521
159-6140 fff0 6228 6ca0 0060 2480 0f16 2000
160-2b60 002c 8020 60f7 0924 6000 23a0 0b00
161-6000 1d60 001a a00a e960 0014 a000 9060
162-000e 800a 60f6 eba0 010f 176c 2222 226c
163-9406 2000 0302 226c 60f6 d721 40ff f1e0
164-ff00 a000 0abb af3a 396f 419d 20ff f322
165-0380 3018 60f6 bb47 58cf 20ff f362 6c41
166-7373 656d 626c 6564 0020 696e 2000 2062
167-7974 6573 2e0a 002d 2d20 556e 7573 6564
168-3a20 0052 6566 6572 656e 6365 7300 5265
169-6665 7265 6e63 6500 5379 6d62 6f6c 7300
170-5379 6d62 6f6c 004d 6163 726f 7300 4d61
171-6372 6f00 4e61 6d65 004e 756d 6265 7200
172-436f 6d6d 656e 7400 5772 6974 696e 6700
173-6578 6365 6564 6564 0069 6e76 616c 6964
174-0064 7570 6c69 6361 7465 0074 6f6f 2066
175-6172 007a 6572 6f2d 7061 6765 006f 7065
176-6e00 2e2e 0052 4553 4554 
177+fff1 2180 a837 a000 0180 aa37 6002 2fa0
178+0000 800f 1620 001c a001 c880 ac37 80a3
179+1620 0012 9d20 000c a00b 54a0 0000 a002
180+9d60 08b2 226c 2180 0060 020b 40ff d380
181+0f33 800e 13a0 01dc 8002 376c 0000 0100
182+0100 0000 0100 0100 0100 0000 0001 ef00
183+a00a da60 08b5 8020 8019 17a0 0040 6008
184+aaa0 0ae4 6008 a4a0 09d7 3426 a001 0039
185+6008 a7a0 0ae9 6008 92a0 0040 80a8 37a0
186+0001 80aa 37a0 0100 2680 bd33 a001 e480
187+0237 a001 ef80 ae37 21aa 20ff eb22 22a0
188+02a2 60ff 3ea0 0040 80a8 37a0 07c5 34a0
189+3486 a000 0280 aa37 2680 ae37 a000 0338
190+2660 07e6 a439 80aa 3724 80ae 37aa 20ff
191+e122 226c 7573 6167 653a 2064 7269 6662
192+6c69 6d2e 726f 6d20 696e 2e74 616c 206f
193+7574 2e72 6f6d 0a00 5061 7468 0046 696c
194+6500 2e73 796d 0000 4472 6966 626c 696d
195+0a55 786e 7461 6c20 4173 7365 6d62 6c65
196+720a 4279 2044 6576 696e 6520 4c75 204c
197+696e 7665 6761 0a34 204f 6374 2032 3032
198+3500 0080 4732 a003 7329 2000 0ca0 0b78
199+a00b 7da0 0b3b 6007 7d80 3132 a003 9429
200+2000 0ca0 0b78 a00b 7da0 0b29 6007 6780
201+0f16 2000 1060 05c1 800f 1620 0007 a080
202+0f17 4004 b96c 9020 0002 226c a003 4d2c
203+a003 4d80 f733 6ca0 0373 80f0 33a0 0133
204+136c a003 9480 e533 a000 4913 6c60 06e9
205+2006 2b60 01e3 2006 1090 6000 f5a1 1d20
206+000e 2226 6003 43a1 1d20 038a 2240 0160
207+2134 2cc0 0034 26a0 2900 2920 0003 c001
208+59a0 2800 2920 0001 41cf c0e7 5380 0008
209+20ff 9d6c c000 b4a0 7d00 2920 0011 c001
210+59cf 2000 0a80 0060 0332 2242 40ff 81cf
211+8000 0820 000b a000 c060 0311 8020 6003
212+1b34 a07b 0029 2000 0141 c0c8 536c a0c0
213+1813 a000 c011 6c06 8020 0a20 000a 02a0
214+00c0 60ff 4140 ffe6 a000 c081 0680 ff0b
215+2000 09a0 0b4b a00b 2f60 0676 80eb 1331
216+6ca0 0080 8106 80bf 0b20 0009 a00b 4ba0
217+0b1b 6006 5d80 eb13 316c a080 e513 9480
218+2f08 2000 0994 60ff d821 9420 fff0 2280
219+d112 8003 136c 21a0 00c8 1380 2f60 ffc1
220+9406 2000 0602 22a0 0080 6c60 ffb3 2140
221+ffee 0fa0 04f9 94cf 0820 000c a000 0338
222+9420 fff2 22a0 ffff 426c 226c 2240 01c9
223+2240 fec3 6000 7060 03c4 4005 6d60 0067
224+6003 bb40 0560 6000 5e26 60ff 8d40 0286
225+60ff a340 0280 8080 6005 1e60 0049 6004
226+1140 0515 8080 6005 1060 003b 6003 f540
227+0507 80a0 6005 0260 002d 6003 ef40 04f5
228+6000 2480 2040 04e7 6000 1c80 4040 04df
229+8060 4004 da60 000f 4004 9460 0009 4004
230+7d60 0003 4001 a321 9480 200a 2000 09a0
231+0b54 a00b 2f40 057a 6c7c 0474 2404 7d40
232+0486 2604 902c 0496 5f04 9b2e 04a4 2d04
233+a93b 04b2 3d04 b721 04c8 3f04 c023 04d5
234+2204 db7d 046c 7e01 9228 0470 2904 6a5b
235+046a 5d04 6a25 04e1 0026 6000 0e80 0009
236+0f26 a006 1360 050c 4f1d 6ce0 1f00 a005
237+b3a4 a000 0324 6005 0220 000f 41a0 0003
238+3894 20ff ec22 2262 8000 6c22 5cb4 a04c
239+4928 8070 1f0f 5da0 0003 3894 8021 0b20
240+002e 9480 3209 2000 05c0 2040 001d 9480
241+7209 2000 05c0 4040 0011 9480 6b09 2000
242+05c0 8040 0005 2242 8000 6c5d 2140 ffcb
243+224f 6c4c 4954 494e 4350 4f50 4e49 5053
244+5750 524f 5444 5550 4f56 5245 5155 4e45
245+5147 5448 4c54 484a 4d50 4a43 4e4a 5352
246+5354 484c 445a 5354 5a4c 4452 5354 524c
247+4441 5354 4144 4549 4445 4f41 4444 5355
248+424d 554c 4449 5641 4e44 4f52 4145 4f52
249+5346 5442 524b 0022 8000 8180 fb13 06a0
250+1b86 a180 fa33 1506 8004 1f60 03c0 0460
251+03bc 8018 33a0 064b 6c80 e432 a000 0139
252+9460 ffe3 6000 cf80 d633 6cce bb2e 2e00
253+6003 e620 0015 9460 fdf8 211d 2000 0c94
254+807b 0820 0005 60fe d00c 6ca0 0b54 a00b
255+2f40 03fe 9480 7b08 20ff 9c94 802f 0820
256+fdb4 9480 2608 20fd ad6c 60ff c326 6000
257+1921 1d20 0076 2660 00b2 211d 2000 6d60
258+002b 8000 6000 3540 fc98 2f80 2f32 a00b
259+86a8 2000 1126 ef60 039a 2000 0d60 038a
260+6003 8740 ffeb 22a0 ffff 2362 6c94 0620
261+0003 0222 6c60 0004 2140 fff1 a00b 86a1
262+26a0 1b86 2b20 0009 a00b 4ba0 0b22 6003
263+8180 e933 156c 60fc d560 034e 9406 2000
264+0402 2222 6c60 fccf 2140 fff0 22a0 0b5c
265+a00b 2940 035c 2660 0032 a11d 2000 0922
266+8002 6002 bd40 007c a121 1480 021c 2000
267+1060 02ae 2735 2121 9480 021d 0505 1522
268+6c22 22a0 0b5c a00b 1b40 0326 2fa0 07c5
269+34a0 3486 26a0 0003 38ef 6002 f720 000b
270+6000 c1aa 20ff ed22 a0ff ff23 626c 342f
271+a007 c534 a034 8626 6000 a934 ef24 2b20
272+0007 6000 9faa 20ff ee23 626c 2660 ffbc
273+a11d 2000 0d22 802c 3227 8001 a0ff ff60
274+0002 236c 0460 001c 6000 1960 0016 60fe
275+9f26 60fe f521 1d20 ff88 9460 0006 2194
276+20ff f714 a034 86a1 26a0 7c86 2b20 0009
277+a00b 4ba0 0b13 6002 9980 e933 156c a007
278+c534 a034 86a8 2000 36a1 2114 8001 1c20
279+0027 b4a0 0100 2820 001f 26a0 0003 3894
280+8041 1980 1a0b 2000 0fa0 0af2 6002 9c26
281+6002 9880 0a80 1917 2260 0008 40ff c622
282+2240 f9cc a000 0338 4002 1f26 a000 8038
283+0220 0001 6ca0 0b66 a00b 1b40 0234 6001
284+f820 01d7 60fe 2d60 ff02 a11d 2000 09a0
285+0b54 a00b 0960 021a 346c 801b 3360 fe14
286+60ff 29a1 21af 1480 021c 2000 1026 6001
287+7160 0012 6000 0fa0 0000 6000 09d4 4f80
288+011d 6f15 346c 0460 0000 a01c 86a1 26a0
289+3486 2b20 0009 a00b 4ba0 0afe 6001 d380
290+e933 156c a009 0d60 ffb0 036c a009 1540
291+ffa8 a009 1c60 ffa2 a11d 2000 0422 8000
292+6c60 011e 6000 0e60 ff61 036c a009 2b60
293+ff88 6001 0d21 2139 6c80 af32 a01c 86a8
294+2000 1326 a009 4435 a6a0 0004 3834 2ea0
295+0006 3840 ffe9 2222 6cb4 6000 eda1 2134
296+34a1 1d20 0006 a00b 5460 0037 6c60 ffe9
297+2303 4000 a460 ffe1 2340 0099 60ff da24
298+3460 ffb1 6000 0f03 4000 8e60 ffcb 2434
299+60ff a240 007f 26a0 0080 3802 2000 016c
300+a00b 66a0 0000 2660 fe24 a000 0338 60fa
301+c921 2134 a000 0338 a00b 0940 0118 9460
302+0057 2194 20ff f722 6c60 fbdf 4000 4a60
303+00be 8002 0980 501f 8080 1d60 003b 6000
304+b880 0008 2000 1e60 00a6 0680 0209 2000
305+0802 6000 8603 4000 2080 0409 2000 0660
306+0079 4000 1022 a00b 54a0 0b34 4000 c360
307+0007 60ff 1704 6000 0060 0012 0720 000b
308+2202 a00b 6ea0 0b43 4000 a740 f801 a001
309+00a1 80fa 33a1 a001 002b 2000 04a1 80f6
310+336c 80ea 326c 60ff f938 80e2 336c 800f
311+1c80 0a8b 2000 0519 8061 186c 0280 3018
312+6c94 8030 1906 8009 0a0c 6c80 2719 0680
313+0a19 8005 0a0c 6c02 80ff 6ce0 0000 c040
314+7f60 ffdd c000 0f78 2194 20ff f122 6f6c
315+a660 0016 2421 3903 6c26 60ff c401 2000
316+0514 8000 086c 2140 fff0 9420 0002 216c
317+2140 fff6 a660 fff2 2439 242f 2738 24a8
318+2000 0c94 d44f 0920 0005 2161 40ff f062
319+286c a000 c024 800f 1620 002b 6000 2c80
320+2080 1917 2460 0023 a00a fb60 001d 6000
321+1aa0 0ae4 6000 14a0 0080 6000 0e80 0a80
322+1917 a001 0f17 6c22 2222 6c94 0620 0003
323+0222 6c80 1917 2140 fff1 e0ff 00a0 000a
324+bbaf 3a39 6f41 9d20 fff3 2203 8030 1880
325+1917 4758 cf20 fff3 626c 4173 7365 6d62
326+6c65 6400 2069 6e20 0020 6279 7465 732e
327+0a00 2d2d 2055 6e75 7365 643a 2000 5265
328+6665 7265 6e63 6573 0052 6566 6572 656e
329+6365 0053 796d 626f 6c73 0053 796d 626f
330+6c00 4d61 6372 6f73 004d 6163 726f 004e
331+616d 6500 4e75 6d62 6572 0043 6f6d 6d65
332+6e74 0057 7269 7469 6e67 0065 7863 6565
333+6465 6400 696e 7661 6c69 6400 6475 706c
334+6963 6174 6500 746f 6f20 6661 7200 7a65
335+726f 2d70 6167 6500 6f70 656e 002e 2e00
336+5245 5345 54
+1, -1
1@@ -86,7 +86,7 @@ bin/uxn11-debug: src/uxn11.c
2 
3 # Tests
4 
5-tests: bin/test_opcodes.rom bin/system.rom bin/console.rom bin/file.rom bin/uxncli bin/drifblim.rom
6+tests: bin/uxncli bin/drifblim.rom bin/test_opcodes.rom bin/system.rom bin/console.rom bin/file.rom bin/uxncli bin/drifblim.rom
7 
8 bin/test_opcodes.rom: etc/tests/opctest.tal
9 	@ bin/uxncli bin/drifblim.rom etc/tests/opctest.tal bin/test_opcodes.rom
+58, -57
  1@@ -47,81 +47,82 @@ void emu_deo(const Uint8 port, const Uint8 value);
  2 #define PEEK2(d) (*(d) << 8 | (d)[1])
  3 #define POKE2(d, v) { *(d) = (v) >> 8; (d)[1] = (v); }
  4 
  5+#define NEXT if(--cycles) goto step; else return 0;
  6+
  7 #define OPC(opc, A, B) {\
  8-	case 0x00|opc: {const int _2=0,_r=0;A B;} break;\
  9-	case 0x20|opc: {const int _2=1,_r=0;A B;} break;\
 10-	case 0x40|opc: {const int _2=0,_r=1;A B;} break;\
 11-	case 0x60|opc: {const int _2=1,_r=1;A B;} break;\
 12-	case 0x80|opc: {const int _2=0,_r=0;int k=ptr[0];A ptr[0]=k;B;} break;\
 13-	case 0xa0|opc: {const int _2=1,_r=0;int k=ptr[0];A ptr[0]=k;B;} break;\
 14-	case 0xc0|opc: {const int _2=0,_r=1;int k=ptr[1];A ptr[1]=k;B;} break;\
 15-	case 0xe0|opc: {const int _2=1,_r=1;int k=ptr[1];A ptr[1]=k;B;} break;\
 16+	case 0x00|opc: {const int _2=0,_r=0;A B;} NEXT\
 17+	case 0x20|opc: {const int _2=1,_r=0;A B;} NEXT\
 18+	case 0x40|opc: {const int _2=0,_r=1;A B;} NEXT\
 19+	case 0x60|opc: {const int _2=1,_r=1;A B;} NEXT\
 20+	case 0x80|opc: {const int _2=0,_r=0;int k=ptr[0];A ptr[0]=k;B;} NEXT\
 21+	case 0xa0|opc: {const int _2=1,_r=0;int k=ptr[0];A ptr[0]=k;B;} NEXT\
 22+	case 0xc0|opc: {const int _2=0,_r=1;int k=ptr[1];A ptr[1]=k;B;} NEXT\
 23+	case 0xe0|opc: {const int _2=1,_r=1;int k=ptr[1];A ptr[1]=k;B;} NEXT\
 24 }
 25 
 26 #define REM ptr[_r] -= 1 + _2;
 27 #define DEC(m) stk[m][--ptr[m]]
 28 #define INC(m) stk[m][ptr[m]++]
 29-#define IMM(o) { o = ram[pc++] << 8, o |= ram[pc++]; }
 30+#define IMM(r) { r = ram[pc++] << 8, r |= ram[pc++]; }
 31 #define MOV(x) { if(_2) pc = x; else pc += (signed char)x; }
 32 #define PO1(o) o = DEC(_r);
 33 #define PO2(o) { o = DEC(_r), o |= DEC(_r) << 8; }
 34 #define POx(o) if(_2) PO2(o) else PO1(o)
 35 #define GOT(o) if(_2) PO1(o[1]) PO1(o[0])
 36+#define DEO(o,r) emu_deo(o, r[0]); if(_2) emu_deo(o + 1, r[1]);
 37+#define POK(o,r,m) ram[o] = r[0]; if(_2) ram[(o + 1) & m] = r[1];
 38 #define RP1(i) INC(!_r) = i;
 39 #define PU1(i) INC(_r) = i;
 40 #define PUx(i) if(_2) { c = (i); PU1(c >> 8) PU1(c) } else PU1(i)
 41 #define PUT(i) PU1(i[0]) if(_2) PU1(i[1])
 42-#define DEI(i,o) o[0] = emu_dei(i); if(_2) o[1] = emu_dei(i + 1); PUT(o)
 43-#define DEO(i,j) emu_deo(i, j[0]); if(_2) emu_deo(i + 1, j[1]);
 44-#define PEK(i,o,m) o[0] = ram[i]; if(_2) o[1] = ram[(i + 1) & m]; PUT(o)
 45-#define POK(i,j,m) ram[i] = j[0]; if(_2) ram[(i + 1) & m] = j[1];
 46+#define DEI(i,r) r[0] = emu_dei(i); if(_2) r[1] = emu_dei(i + 1); PUT(r)
 47+#define PEK(i,r,m) r[0] = ram[i]; if(_2) r[1] = ram[(i + 1) & m]; PUT(r)
 48 
 49 static unsigned int
 50 uxn_eval(unsigned short pc)
 51 {
 52-	unsigned int a, b, c, x[2], y[2], z[2], step = 0x80000000;
 53-	while(step--) {
 54-		switch(ram[pc++]) {
 55-		/* BRK */ case 0x00: return 1;
 56-		/* JCI */ case 0x20: IMM(c) if(DEC(0)) pc += c; break;
 57-		/* JMI */ case 0x40: IMM(c) pc += c; break;
 58-		/* JSI */ case 0x60: IMM(c) INC(1) = pc >> 8, INC(1) = pc, pc += c; break;
 59-		/* LI2 */ case 0xa0: INC(0) = ram[pc++]; /* fall-through */
 60-		/* LIT */ case 0x80: INC(0) = ram[pc++]; break;
 61-		/* L2r */ case 0xe0: INC(1) = ram[pc++]; /* fall-through */
 62-		/* LIr */ case 0xc0: INC(1) = ram[pc++]; break;
 63-		/* INC */ OPC(0x01,POx(a),PUx(a + 1))
 64-		/* POP */ OPC(0x02,REM,{})
 65-		/* NIP */ OPC(0x03,GOT(x) REM,PUT(x))
 66-		/* SWP */ OPC(0x04,GOT(x) GOT(y),PUT(x) PUT(y))
 67-		/* ROT */ OPC(0x05,GOT(x) GOT(y) GOT(z),PUT(y) PUT(x) PUT(z))
 68-		/* DUP */ OPC(0x06,GOT(x),PUT(x) PUT(x))
 69-		/* OVR */ OPC(0x07,GOT(x) GOT(y),PUT(y) PUT(x) PUT(y))
 70-		/* EQU */ OPC(0x08,POx(a) POx(b),PU1(b == a))
 71-		/* NEQ */ OPC(0x09,POx(a) POx(b),PU1(b != a))
 72-		/* GTH */ OPC(0x0a,POx(a) POx(b),PU1(b > a))
 73-		/* LTH */ OPC(0x0b,POx(a) POx(b),PU1(b < a))
 74-		/* JMP */ OPC(0x0c,POx(a),MOV(a))
 75-		/* JCN */ OPC(0x0d,POx(a) PO1(b),if(b) MOV(a))
 76-		/* JSR */ OPC(0x0e,POx(a),RP1(pc >> 8) RP1(pc) MOV(a))
 77-		/* STH */ OPC(0x0f,GOT(x),RP1(x[0]) if(_2) RP1(x[1]))
 78-		/* LDZ */ OPC(0x10,PO1(a),PEK(a, x, 0xff))
 79-		/* STZ */ OPC(0x11,PO1(a) GOT(y),POK(a, y, 0xff))
 80-		/* LDR */ OPC(0x12,PO1(a),PEK(pc + (signed char)a, x, 0xffff))
 81-		/* STR */ OPC(0x13,PO1(a) GOT(y),POK(pc + (signed char)a, y, 0xffff))
 82-		/* LDA */ OPC(0x14,PO2(a),PEK(a, x, 0xffff))
 83-		/* STA */ OPC(0x15,PO2(a) GOT(y),POK(a, y, 0xffff))
 84-		/* DEI */ OPC(0x16,PO1(a),DEI(a, x))
 85-		/* DEO */ OPC(0x17,PO1(a) GOT(y),DEO(a, y))
 86-		/* ADD */ OPC(0x18,POx(a) POx(b),PUx(b + a))
 87-		/* SUB */ OPC(0x19,POx(a) POx(b),PUx(b - a))
 88-		/* MUL */ OPC(0x1a,POx(a) POx(b),PUx(b * a))
 89-		/* DIV */ OPC(0x1b,POx(a) POx(b),PUx(a ? b / a : 0))
 90-		/* AND */ OPC(0x1c,POx(a) POx(b),PUx(b & a))
 91-		/* ORA */ OPC(0x1d,POx(a) POx(b),PUx(b | a))
 92-		/* EOR */ OPC(0x1e,POx(a) POx(b),PUx(b ^ a))
 93-		/* SFT */ OPC(0x1f,PO1(a) POx(b),PUx(b >> (a & 0xf) << (a >> 4)))
 94-		}
 95+	unsigned int a, b, c, x[2], y[2], z[2], cycles = 0x80000000;
 96+step:
 97+	switch(ram[pc++]) {
 98+	/* BRK */ case 0x00: return 1;
 99+	/* JCI */ case 0x20: if(DEC(0)) { IMM(c) pc += c; } else pc += 2; NEXT
100+	/* JMI */ case 0x40: IMM(c) pc += c; NEXT
101+	/* JSI */ case 0x60: IMM(c) INC(1) = pc >> 8, INC(1) = pc, pc += c; NEXT
102+	/* LI2 */ case 0xa0: INC(0) = ram[pc++]; /* fall-through */
103+	/* LIT */ case 0x80: INC(0) = ram[pc++]; NEXT
104+	/* L2r */ case 0xe0: INC(1) = ram[pc++]; /* fall-through */
105+	/* LIr */ case 0xc0: INC(1) = ram[pc++]; NEXT
106+	/* INC */ OPC(0x01,POx(a),PUx(a + 1))
107+	/* POP */ OPC(0x02,REM,{})
108+	/* NIP */ OPC(0x03,GOT(x) REM,PUT(x))
109+	/* SWP */ OPC(0x04,GOT(x) GOT(y),PUT(x) PUT(y))
110+	/* ROT */ OPC(0x05,GOT(x) GOT(y) GOT(z),PUT(y) PUT(x) PUT(z))
111+	/* DUP */ OPC(0x06,GOT(x),PUT(x) PUT(x))
112+	/* OVR */ OPC(0x07,GOT(x) GOT(y),PUT(y) PUT(x) PUT(y))
113+	/* EQU */ OPC(0x08,POx(a) POx(b),PU1(b == a))
114+	/* NEQ */ OPC(0x09,POx(a) POx(b),PU1(b != a))
115+	/* GTH */ OPC(0x0a,POx(a) POx(b),PU1(b > a))
116+	/* LTH */ OPC(0x0b,POx(a) POx(b),PU1(b < a))
117+	/* JMP */ OPC(0x0c,POx(a),MOV(a))
118+	/* JCN */ OPC(0x0d,POx(a) PO1(b),if(b) MOV(a))
119+	/* JSR */ OPC(0x0e,POx(a),RP1(pc >> 8) RP1(pc) MOV(a))
120+	/* STH */ OPC(0x0f,GOT(x),RP1(x[0]) if(_2) RP1(x[1]))
121+	/* LDZ */ OPC(0x10,PO1(a),PEK(a, x, 0xff))
122+	/* STZ */ OPC(0x11,PO1(a) GOT(y),POK(a, y, 0xff))
123+	/* LDR */ OPC(0x12,PO1(a),PEK(pc + (signed char)a, x, 0xffff))
124+	/* STR */ OPC(0x13,PO1(a) GOT(y),POK(pc + (signed char)a, y, 0xffff))
125+	/* LDA */ OPC(0x14,PO2(a),PEK(a, x, 0xffff))
126+	/* STA */ OPC(0x15,PO2(a) GOT(y),POK(a, y, 0xffff))
127+	/* DEI */ OPC(0x16,PO1(a),DEI(a, x))
128+	/* DEO */ OPC(0x17,PO1(a) GOT(y),DEO(a, y))
129+	/* ADD */ OPC(0x18,POx(a) POx(b),PUx(b + a))
130+	/* SUB */ OPC(0x19,POx(a) POx(b),PUx(b - a))
131+	/* MUL */ OPC(0x1a,POx(a) POx(b),PUx(b * a))
132+	/* DIV */ OPC(0x1b,POx(a) POx(b),PUx(a ? b / a : 0))
133+	/* AND */ OPC(0x1c,POx(a) POx(b),PUx(b & a))
134+	/* ORA */ OPC(0x1d,POx(a) POx(b),PUx(b | a))
135+	/* EOR */ OPC(0x1e,POx(a) POx(b),PUx(b ^ a))
136+	/* SFT */ OPC(0x1f,PO1(a) POx(b),PUx(b >> (a & 0xf) << (a >> 4)))
137 	}
138 	return 0;
139 }
140@@ -1254,7 +1255,7 @@ main(int argc, char **argv)
141 {
142 	int i = 1;
143 	if(argc == 2 && argv[1][0] == '-' && argv[1][1] == 'v')
144-		return !fprintf(stdout, "Uxn11 - Varvara Emulator, 7 Oct 2025.\n");
145+		return !fprintf(stdout, "Uxn11 - Varvara Emulator, 18 Oct 2025.\n");
146 	else if(argc == 1)
147 		return !fprintf(stdout, "usage: %s [-v] file.rom [args..]\n", argv[0]);
148 	else if(!system_boot(argv[i++], argc > 2))
+58, -57
  1@@ -32,81 +32,82 @@ void emu_deo(const Uint8 port, const Uint8 value);
  2 #define PEEK2(d) (*(d) << 8 | (d)[1])
  3 #define POKE2(d, v) { *(d) = (v) >> 8; (d)[1] = (v); }
  4 
  5+#define NEXT if(--cycles) goto step; else return 0;
  6+
  7 #define OPC(opc, A, B) {\
  8-	case 0x00|opc: {const int _2=0,_r=0;A B;} break;\
  9-	case 0x20|opc: {const int _2=1,_r=0;A B;} break;\
 10-	case 0x40|opc: {const int _2=0,_r=1;A B;} break;\
 11-	case 0x60|opc: {const int _2=1,_r=1;A B;} break;\
 12-	case 0x80|opc: {const int _2=0,_r=0;int k=ptr[0];A ptr[0]=k;B;} break;\
 13-	case 0xa0|opc: {const int _2=1,_r=0;int k=ptr[0];A ptr[0]=k;B;} break;\
 14-	case 0xc0|opc: {const int _2=0,_r=1;int k=ptr[1];A ptr[1]=k;B;} break;\
 15-	case 0xe0|opc: {const int _2=1,_r=1;int k=ptr[1];A ptr[1]=k;B;} break;\
 16+	case 0x00|opc: {const int _2=0,_r=0;A B;} NEXT\
 17+	case 0x20|opc: {const int _2=1,_r=0;A B;} NEXT\
 18+	case 0x40|opc: {const int _2=0,_r=1;A B;} NEXT\
 19+	case 0x60|opc: {const int _2=1,_r=1;A B;} NEXT\
 20+	case 0x80|opc: {const int _2=0,_r=0;int k=ptr[0];A ptr[0]=k;B;} NEXT\
 21+	case 0xa0|opc: {const int _2=1,_r=0;int k=ptr[0];A ptr[0]=k;B;} NEXT\
 22+	case 0xc0|opc: {const int _2=0,_r=1;int k=ptr[1];A ptr[1]=k;B;} NEXT\
 23+	case 0xe0|opc: {const int _2=1,_r=1;int k=ptr[1];A ptr[1]=k;B;} NEXT\
 24 }
 25 
 26 #define REM ptr[_r] -= 1 + _2;
 27 #define DEC(m) stk[m][--ptr[m]]
 28 #define INC(m) stk[m][ptr[m]++]
 29-#define IMM(o) { o = ram[pc++] << 8, o |= ram[pc++]; }
 30+#define IMM(r) { r = ram[pc++] << 8, r |= ram[pc++]; }
 31 #define MOV(x) { if(_2) pc = x; else pc += (signed char)x; }
 32 #define PO1(o) o = DEC(_r);
 33 #define PO2(o) { o = DEC(_r), o |= DEC(_r) << 8; }
 34 #define POx(o) if(_2) PO2(o) else PO1(o)
 35 #define GOT(o) if(_2) PO1(o[1]) PO1(o[0])
 36+#define DEO(o,r) emu_deo(o, r[0]); if(_2) emu_deo(o + 1, r[1]);
 37+#define POK(o,r,m) ram[o] = r[0]; if(_2) ram[(o + 1) & m] = r[1];
 38 #define RP1(i) INC(!_r) = i;
 39 #define PU1(i) INC(_r) = i;
 40 #define PUx(i) if(_2) { c = (i); PU1(c >> 8) PU1(c) } else PU1(i)
 41 #define PUT(i) PU1(i[0]) if(_2) PU1(i[1])
 42-#define DEI(i,o) o[0] = emu_dei(i); if(_2) o[1] = emu_dei(i + 1); PUT(o)
 43-#define DEO(i,j) emu_deo(i, j[0]); if(_2) emu_deo(i + 1, j[1]);
 44-#define PEK(i,o,m) o[0] = ram[i]; if(_2) o[1] = ram[(i + 1) & m]; PUT(o)
 45-#define POK(i,j,m) ram[i] = j[0]; if(_2) ram[(i + 1) & m] = j[1];
 46+#define DEI(i,r) r[0] = emu_dei(i); if(_2) r[1] = emu_dei(i + 1); PUT(r)
 47+#define PEK(i,r,m) r[0] = ram[i]; if(_2) r[1] = ram[(i + 1) & m]; PUT(r)
 48 
 49 static unsigned int
 50 uxn_eval(unsigned short pc)
 51 {
 52-	unsigned int a, b, c, x[2], y[2], z[2], step = 0x80000000;
 53-	while(step--) {
 54-		switch(ram[pc++]) {
 55-		/* BRK */ case 0x00: return 1;
 56-		/* JCI */ case 0x20: IMM(c) if(DEC(0)) pc += c; break;
 57-		/* JMI */ case 0x40: IMM(c) pc += c; break;
 58-		/* JSI */ case 0x60: IMM(c) INC(1) = pc >> 8, INC(1) = pc, pc += c; break;
 59-		/* LI2 */ case 0xa0: INC(0) = ram[pc++]; /* fall-through */
 60-		/* LIT */ case 0x80: INC(0) = ram[pc++]; break;
 61-		/* L2r */ case 0xe0: INC(1) = ram[pc++]; /* fall-through */
 62-		/* LIr */ case 0xc0: INC(1) = ram[pc++]; break;
 63-		/* INC */ OPC(0x01,POx(a),PUx(a + 1))
 64-		/* POP */ OPC(0x02,REM,{})
 65-		/* NIP */ OPC(0x03,GOT(x) REM,PUT(x))
 66-		/* SWP */ OPC(0x04,GOT(x) GOT(y),PUT(x) PUT(y))
 67-		/* ROT */ OPC(0x05,GOT(x) GOT(y) GOT(z),PUT(y) PUT(x) PUT(z))
 68-		/* DUP */ OPC(0x06,GOT(x),PUT(x) PUT(x))
 69-		/* OVR */ OPC(0x07,GOT(x) GOT(y),PUT(y) PUT(x) PUT(y))
 70-		/* EQU */ OPC(0x08,POx(a) POx(b),PU1(b == a))
 71-		/* NEQ */ OPC(0x09,POx(a) POx(b),PU1(b != a))
 72-		/* GTH */ OPC(0x0a,POx(a) POx(b),PU1(b > a))
 73-		/* LTH */ OPC(0x0b,POx(a) POx(b),PU1(b < a))
 74-		/* JMP */ OPC(0x0c,POx(a),MOV(a))
 75-		/* JCN */ OPC(0x0d,POx(a) PO1(b),if(b) MOV(a))
 76-		/* JSR */ OPC(0x0e,POx(a),RP1(pc >> 8) RP1(pc) MOV(a))
 77-		/* STH */ OPC(0x0f,GOT(x),RP1(x[0]) if(_2) RP1(x[1]))
 78-		/* LDZ */ OPC(0x10,PO1(a),PEK(a, x, 0xff))
 79-		/* STZ */ OPC(0x11,PO1(a) GOT(y),POK(a, y, 0xff))
 80-		/* LDR */ OPC(0x12,PO1(a),PEK(pc + (signed char)a, x, 0xffff))
 81-		/* STR */ OPC(0x13,PO1(a) GOT(y),POK(pc + (signed char)a, y, 0xffff))
 82-		/* LDA */ OPC(0x14,PO2(a),PEK(a, x, 0xffff))
 83-		/* STA */ OPC(0x15,PO2(a) GOT(y),POK(a, y, 0xffff))
 84-		/* DEI */ OPC(0x16,PO1(a),DEI(a, x))
 85-		/* DEO */ OPC(0x17,PO1(a) GOT(y),DEO(a, y))
 86-		/* ADD */ OPC(0x18,POx(a) POx(b),PUx(b + a))
 87-		/* SUB */ OPC(0x19,POx(a) POx(b),PUx(b - a))
 88-		/* MUL */ OPC(0x1a,POx(a) POx(b),PUx(b * a))
 89-		/* DIV */ OPC(0x1b,POx(a) POx(b),PUx(a ? b / a : 0))
 90-		/* AND */ OPC(0x1c,POx(a) POx(b),PUx(b & a))
 91-		/* ORA */ OPC(0x1d,POx(a) POx(b),PUx(b | a))
 92-		/* EOR */ OPC(0x1e,POx(a) POx(b),PUx(b ^ a))
 93-		/* SFT */ OPC(0x1f,PO1(a) POx(b),PUx(b >> (a & 0xf) << (a >> 4)))
 94-		}
 95+	unsigned int a, b, c, x[2], y[2], z[2], cycles = 0x80000000;
 96+step:
 97+	switch(ram[pc++]) {
 98+	/* BRK */ case 0x00: return 1;
 99+	/* JCI */ case 0x20: if(DEC(0)) { IMM(c) pc += c; } else pc += 2; NEXT
100+	/* JMI */ case 0x40: IMM(c) pc += c; NEXT
101+	/* JSI */ case 0x60: IMM(c) INC(1) = pc >> 8, INC(1) = pc, pc += c; NEXT
102+	/* LI2 */ case 0xa0: INC(0) = ram[pc++]; /* fall-through */
103+	/* LIT */ case 0x80: INC(0) = ram[pc++]; NEXT
104+	/* L2r */ case 0xe0: INC(1) = ram[pc++]; /* fall-through */
105+	/* LIr */ case 0xc0: INC(1) = ram[pc++]; NEXT
106+	/* INC */ OPC(0x01,POx(a),PUx(a + 1))
107+	/* POP */ OPC(0x02,REM,{})
108+	/* NIP */ OPC(0x03,GOT(x) REM,PUT(x))
109+	/* SWP */ OPC(0x04,GOT(x) GOT(y),PUT(x) PUT(y))
110+	/* ROT */ OPC(0x05,GOT(x) GOT(y) GOT(z),PUT(y) PUT(x) PUT(z))
111+	/* DUP */ OPC(0x06,GOT(x),PUT(x) PUT(x))
112+	/* OVR */ OPC(0x07,GOT(x) GOT(y),PUT(y) PUT(x) PUT(y))
113+	/* EQU */ OPC(0x08,POx(a) POx(b),PU1(b == a))
114+	/* NEQ */ OPC(0x09,POx(a) POx(b),PU1(b != a))
115+	/* GTH */ OPC(0x0a,POx(a) POx(b),PU1(b > a))
116+	/* LTH */ OPC(0x0b,POx(a) POx(b),PU1(b < a))
117+	/* JMP */ OPC(0x0c,POx(a),MOV(a))
118+	/* JCN */ OPC(0x0d,POx(a) PO1(b),if(b) MOV(a))
119+	/* JSR */ OPC(0x0e,POx(a),RP1(pc >> 8) RP1(pc) MOV(a))
120+	/* STH */ OPC(0x0f,GOT(x),RP1(x[0]) if(_2) RP1(x[1]))
121+	/* LDZ */ OPC(0x10,PO1(a),PEK(a, x, 0xff))
122+	/* STZ */ OPC(0x11,PO1(a) GOT(y),POK(a, y, 0xff))
123+	/* LDR */ OPC(0x12,PO1(a),PEK(pc + (signed char)a, x, 0xffff))
124+	/* STR */ OPC(0x13,PO1(a) GOT(y),POK(pc + (signed char)a, y, 0xffff))
125+	/* LDA */ OPC(0x14,PO2(a),PEK(a, x, 0xffff))
126+	/* STA */ OPC(0x15,PO2(a) GOT(y),POK(a, y, 0xffff))
127+	/* DEI */ OPC(0x16,PO1(a),DEI(a, x))
128+	/* DEO */ OPC(0x17,PO1(a) GOT(y),DEO(a, y))
129+	/* ADD */ OPC(0x18,POx(a) POx(b),PUx(b + a))
130+	/* SUB */ OPC(0x19,POx(a) POx(b),PUx(b - a))
131+	/* MUL */ OPC(0x1a,POx(a) POx(b),PUx(b * a))
132+	/* DIV */ OPC(0x1b,POx(a) POx(b),PUx(a ? b / a : 0))
133+	/* AND */ OPC(0x1c,POx(a) POx(b),PUx(b & a))
134+	/* ORA */ OPC(0x1d,POx(a) POx(b),PUx(b | a))
135+	/* EOR */ OPC(0x1e,POx(a) POx(b),PUx(b ^ a))
136+	/* SFT */ OPC(0x1f,PO1(a) POx(b),PUx(b >> (a & 0xf) << (a >> 4)))
137 	}
138 	return 0;
139 }
140@@ -689,7 +690,7 @@ main(int argc, char **argv)
141 {
142 	int i = 1;
143 	if(argc == 2 && argv[1][0] == '-' && argv[1][1] == 'v')
144-		return !fprintf(stdout, "Uxn11 - Varvara Emulator(cli), 7 Oct 2025.\n");
145+		return !fprintf(stdout, "Uxn11 - Varvara Emulator(cli), 18 Oct 2025.\n");
146 	else if(argc == 1)
147 		return !fprintf(stdout, "usage: %s [-v] file.rom [args..]\n", argv[0]);
148 	else if(!system_boot(argv[i++], argc > 2))