commit 1df396f

Devine Lu Linvega  ·  2025-09-26 21:26:28 +0000 UTC
parent 4be5c22
faster core(uxn11)
3 files changed,  +197, -201
+165, -163
  1@@ -1,167 +1,169 @@
  2-a002 7e80 0637 a00b 6660 02e5 a001 2580
  3-1037 a003 1716 1c20 000a a002 4b60 096e
  4+a002 ab80 0637 a00b 8960 0313 a001 2580
  5+1037 a003 1716 1c20 000a a002 7860 0994
  6 a001 0f17 00a0 0217 160b 2000 1d80 1216
  7-a02f 0081 80fb 1389 2000 0ca0 0b2e a000
  8-00a0 026f 6009 1203 1100 a001 5040 ffbf
  9+a02f 0081 80fb 1389 2000 0ca0 0b54 a000
 10+00a0 029c 6009 3803 1100 a001 5040 ffbf
 11 a002 1716 0b20 0007 8012 1660 000b 00a0
 12-0000 6000 3260 0152 00a0 5f30 8180 fb13
 13-8920 000c a00b 2ea0 0030 a002 6f60 08d9
 14+0000 6000 3260 0180 00a0 5f30 8180 fb13
 15+8920 000c a00b 54a0 0030 a002 9c60 08ff
 16 0311 6c94 0620 0003 0222 6c60 ffdb 2140
 17 fff1 8019 176c 2180 a837 a000 0180 aa37
 18-6002 02a0 0000 800f 1620 001c a001 cc80
 19-ac37 80a3 1620 0012 9d20 000c a00b 37a0
 20-0000 a002 7460 0891 226c 2180 0060 01de
 21-40ff d3a0 0abd 6008 b580 2060 ffb4 a000
 22-3060 08aa a00a c760 08a4 a001 0026 a001
 23-0039 6008 a8a0 0acc 6008 93a0 0030 80a8
 24-37a0 0100 3980 aa37 a07d 6c80 ae37 a002
 25-7960 ff6f a080 0f16 0920 002e a000 3080
 26-a837 a007 9c34 a034 6ca0 0002 80aa 3726
 27-80ae 37a0 0003 3826 6007 f2a4 3980 aa37
 28-2480 ae37 aa20 ffe1 2222 6c75 7361 6765
 29-3a20 6472 6966 626c 696d 2e72 6f6d 2069
 30-6e2e 7461 6c20 6f75 742e 726f 6d0a 0050
 31-6174 6800 4669 6c65 002e 7379 6d00 0044
 32-7269 6662 6c69 6d0a 5578 6e74 616c 2041
 33-7373 656d 626c 6572 0a42 7920 4465 7669
 34-6e65 204c 7520 4c69 6e76 6567 610a 3920
 35-4175 6720 3230 3235 0000 8047 32a0 034a
 36-2920 000c a00b 5ea0 0b63 a00b 1e60 0789
 37-8031 32a0 036b 2920 000c a00b 5ea0 0b63
 38-a00b 0c60 0773 800f 1620 0010 6005 c180
 39-0f16 2000 07a0 800f 1740 04b9 6c90 2000
 40-0222 6ca0 0324 2ca0 0324 80f7 336c a003
 41-4a80 f033 a001 3313 6ca0 036b 80e5 33a0
 42-0049 136c 6006 f520 062b 6001 e320 0610
 43-9060 00f5 a11d 2000 0e22 2660 0343 a11d
 44-2003 8a22 4001 6021 342c c000 3426 a029
 45-0029 2000 03c0 0159 a028 0029 2000 0141
 46-cfc0 e753 8000 0820 ff9d 6cc0 00b4 a07d
 47-0029 2000 11c0 0159 cf20 000a 8000 6003
 48-3222 4240 ff81 cf80 0008 2000 0ba0 0060
 49-6003 1180 2060 031b 34a0 7b00 2920 0001
 50-41c0 c853 6ca0 6018 13a0 0060 116c 0680
 51-200a 2000 0a02 a000 6060 ff41 40ff e6a0
 52-0060 8106 808f 0b20 0009 a00b 2ea0 0b12
 53-6006 8280 eb13 316c a000 9081 0680 bf0b
 54-2000 09a0 0b2e a00a fe60 0669 80eb 1331
 55-6ca0 90e5 1394 802f 0820 0009 9460 ffd8
 56-2194 20ff f022 80d1 1280 0313 6c21 a000
 57-c813 802f 60ff c194 0620 0006 0222 a000
 58-906c 60ff b321 40ff ee0f a004 d094 cf08
 59-2000 0ca0 0003 3894 20ff f222 a0ff ff42
 60-6c22 6c22 4001 c922 40fe c360 0070 6003
 61-c440 0579 6000 6760 03bb 4005 6c60 005e
 62-2660 ff8d 4002 8660 ffa3 4002 8080 8060
 63-051e 6000 4960 0411 4005 1580 8060 0510
 64-6000 3b60 03f5 4005 0780 a060 0502 6000
 65-2d60 03ef 4004 f560 0024 8020 4004 e760
 66-001c 8040 4004 df80 6040 04da 6000 0f40
 67-0494 6000 0940 047d 6000 0340 01a3 2194
 68-8020 0a20 0009 a00b 37a0 0b12 4005 866c
 69-7c04 4b24 0454 4004 5d26 0467 2c04 6d5f
 70-0472 2e04 7b2d 0480 3b04 893d 048e 2104
 71-9f3f 0497 2304 ac22 04b2 7d04 437e 0196
 72-2804 4729 0441 5b04 415d 0441 2504 b800
 73-2660 000e 8000 090f 26a0 05ea 6005 184f
 74-1d6c e01f 00a0 058a a4a0 0003 2460 050e
 75-2000 0f41 a000 0338 9420 ffec 2222 6280
 76-006c 225c b4a0 4c49 2880 701f 0f5d a000
 77-0338 9480 210b 2000 2e94 8032 0920 0005
 78-c020 4000 1d94 8072 0920 0005 c040 4000
 79-1194 806b 0920 0005 c080 4000 0522 4280
 80-006c 5d21 40ff cb22 4f6c 4c49 5449 4e43
 81-504f 504e 4950 5357 5052 4f54 4455 504f
 82-5652 4551 554e 4551 4754 484c 5448 4a4d
 83-504a 434e 4a53 5253 5448 4c44 5a53 545a
 84-4c44 5253 5452 4c44 4153 5441 4445 4944
 85-454f 4144 4453 5542 4d55 4c44 4956 414e
 86-444f 5241 454f 5253 4654 4252 4b00 2280
 87-0081 80fb 1306 a01b 6ca1 80fa 3315 0680
 88-041f 6003 cc04 6003 c880 1833 a006 226c
 89-80e4 32a0 0001 3994 60ff e360 00cf 80d6
 90-336c cebb 2e2e 0060 03f2 2000 1594 60fd
 91-f821 1d20 000c 9480 7b08 2000 0560 fed0
 92-0c6c a00b 37a0 0b12 4004 0a94 807b 0820
 93-ff9c 9480 2f08 20fd b494 8026 0820 fdad
 94-6c60 ffc3 2660 0019 211d 2000 7626 6000
 95-b221 1d20 006d 6000 2b80 0060 0035 40fc
 96-982f 802f 32a0 0b6c a820 0011 26ef 6003
 97-a620 000d 6003 9660 0393 40ff eb22 a0ff
 98-ff23 626c 9406 2000 0302 226c 6000 0421
 99-40ff f1a0 0b6c a126 a01b 6c2b 2000 09a0
100-0b2e a00b 0560 038d 80e9 3315 6c60 fcd5
101-6003 5a94 0620 0004 0222 226c 60fc cf21
102-40ff f022 a00b 4ca0 0b0c 4003 6826 6000
103-32a1 1d20 0009 2280 0260 02c9 4000 7ca1
104-2114 8002 1c20 0010 6002 ba27 3521 2194
105-8002 1d05 0515 226c 2222 a00b 4ca0 0afe
106-4003 322f a007 9c34 a034 6c26 a000 0338
107-ef60 0303 2000 0b60 00c1 aa20 ffed 22a0
108-ffff 2362 6c34 2fa0 079c 34a0 346c 2660
109-00a9 34ef 242b 2000 0760 009f aa20 ffee
110-2362 6c26 60ff bca1 1d20 000d 2280 2c32
111-2780 01a0 ffff 6000 0223 6c04 6000 1c60
112-0019 6000 1660 fe9f 2660 fef5 211d 20ff
113-8894 6000 0621 9420 fff7 14a0 346c a126
114-a07c 6c2b 2000 09a0 0b2e a00a f660 02a5
115-80e9 3315 6ca0 079c 34a0 346c a820 0036
116-a121 1480 011c 2000 27b4 a001 0028 2000
117-1f26 a000 0338 9480 4119 801a 0b20 000f
118-a00a d560 02a8 2660 02a4 800a 60f9 a322
119-6000 0840 ffc6 2222 40f9 d8a0 0003 3840
120-022b 26a0 0080 3802 2000 016c a00b 56a0
121-0afe 4002 4060 0204 2001 e360 fe2d 60ff
122-02a1 1d20 0009 a00b 37a0 0aec 6002 2634
123-6c80 1b33 60fe 1460 ff29 a121 af14 8002
124-1c20 0010 2660 017d 6000 1260 000f a000
125-0060 0009 d44f 8001 1d6f 1534 6c04 6000
126-00a0 1c6c a126 a034 6c2b 2000 09a0 0b2e
127-a00a e160 01df 80e9 3315 6ca0 08e4 60ff
128-b003 6ca0 08ec 40ff a8a0 08f3 60ff a2a1
129-1d20 0004 2280 006c 6001 2a60 000e 60ff
130-6103 6ca0 0902 60ff 8860 0119 2121 396c
131-80af 32a0 1c6c a820 0013 26a0 091b 35a6
132-a000 0438 342e a000 0638 40ff e922 226c
133-b460 00f9 a121 3434 a11d 2000 06a0 0b37
134-6000 376c 60ff e923 0340 00a4 60ff e123
135-4000 9960 ffda 2434 60ff b160 000f 0340
136-008e 60ff cb24 3460 ffa2 4000 7f26 a000
137-8038 0220 0001 6ca0 0b56 a000 0026 60fe
138-24a0 0003 3860 fac9 2121 34a0 0003 38a0
139-0aec 4001 2494 6000 5721 9420 fff7 226c
140-60fb df40 004a 6000 ca80 0209 8050 1f80
141-801d 6000 3b60 00c4 8000 0820 001e 6000
142-b206 8002 0920 0008 0260 0092 0340 0020
143-8004 0920 0006 6000 8540 0010 22a0 0b37
144-a00b 1740 00cf 6000 0760 ff17 0460 0000
145-0660 0029 a07c 6c38 1520 0001 6c60 0025
146-0720 0009 a00b 3fa0 0b26 6000 a826 a001
147-eb34 2a20 0002 226c a001 eb35 6ca0 0100
148-a180 fa33 6c80 f632 6c60 fff9 3880 ee33
149-6c80 0f1c 800a 8b20 0005 1980 6118 6c02
150-8030 186c 9480 3019 0680 090a 0c6c 8027
151-1906 800a 1980 050a 0c6c 0280 ff6c e000
152-00c0 407f 60ff ddc0 000f 7821 9420 fff1
153-226f 6ca6 6000 1624 2139 036c 2660 ffc4
154-0120 0005 1480 0008 6c21 40ff f094 2000
155-0221 6c21 40ff f6a6 60ff f224 3924 2f27
156-3824 a820 000c 94d4 4f09 2000 0521 6140
157-fff0 6228 6ca0 0060 2480 0f16 2000 2b60
158-002c 8020 60f7 2b24 6000 23a0 0ade 6000
159-1d60 001a a00a c760 0014 a000 9060 000e
160-800a 60f7 0da0 010f 176c 2222 226c 9406
161-2000 0302 226c 60f6 f921 40ff f1e0 ff00
162-a000 0abb af3a 396f 419d 20ff f322 0380
163-3018 60f6 dd47 58cf 20ff f362 6c41 7373
164-656d 626c 6564 0020 696e 2000 2062 7974
165-6573 2e0a 002d 2d20 556e 7573 6564 3a20
166-0052 6566 6572 656e 6365 7300 5265 6665
167-7265 6e63 6500 5379 6d62 6f6c 7300 5379
168-6d62 6f6c 004d 6163 726f 7300 4d61 6372
169-6f00 4e61 6d65 004e 756d 6265 7200 436f
170-6d6d 656e 7400 5772 6974 696e 6700 6578
171-6365 6564 6564 0069 6e76 616c 6964 0069
172-6e20 7a65 726f 2d70 6167 6500 6475 706c
173-6963 6174 6500 746f 6f20 6661 7200 6f70
174-656e 002e 2e00 5245 5345 54
175+6002 30a0 0000 800f 1620 001c a001 cc80
176+ac37 80a3 1620 0012 9d20 000c a00b 5da0
177+0000 a002 a160 08b7 226c 2180 0060 020c
178+40ff d380 0f33 800e 13a0 01e0 8002 376c
179+0000 0100 0100 0000 0100 0100 0100 0000
180+0001 f300 a00a e360 08ba 8020 60ff 93a0
181+0030 6008 afa0 0aed 6008 a9a0 09e0 3426
182+a001 0039 6008 aca0 0af2 6008 97a0 0030
183+80a8 37a0 0001 80aa 37a0 0100 2680 bd33
184+a001 e880 0237 a001 f380 ae37 21aa 20ff
185+eb22 22a0 02a6 60ff 3aa0 0030 80a8 37a0
186+07ca 34a0 348f a000 0280 aa37 2680 ae37
187+a000 0338 2660 07eb a439 80aa 3724 80ae
188+37aa 20ff e122 226c 7573 6167 653a 2064
189+7269 6662 6c69 6d2e 726f 6d20 696e 2e74
190+616c 206f 7574 2e72 6f6d 0a00 5061 7468
191+0046 696c 6500 2e73 796d 0000 4472 6966
192+626c 696d 0a55 786e 7461 6c20 4173 7365
193+6d62 6c65 720a 4279 2044 6576 696e 6520
194+4c75 204c 696e 7665 6761 0a31 3820 5365
195+7020 3230 3235 0000 8047 32a0 0378 2920
196+000c a00b 81a0 0b86 a00b 4460 0781 8031
197+32a0 0399 2920 000c a00b 81a0 0b86 a00b
198+3260 076b 800f 1620 0010 6005 c180 0f16
199+2000 07a0 800f 1740 04b9 6c90 2000 0222
200+6ca0 0352 2ca0 0352 80f7 336c a003 7880
201+f033 a001 3313 6ca0 0399 80e5 33a0 0049
202+136c 6006 ed20 062b 6001 e320 0610 9060
203+00f5 a11d 2000 0e22 2660 0343 a11d 2003
204+8a22 4001 6021 342c c000 3426 a029 0029
205+2000 03c0 0159 a028 0029 2000 0141 cfc0
206+e753 8000 0820 ff9d 6cc0 00b4 a07d 0029
207+2000 11c0 0159 cf20 000a 8000 6003 3222
208+4240 ff81 cf80 0008 2000 0ba0 0060 6003
209+1180 2060 031b 34a0 7b00 2920 0001 41c0
210+c853 6ca0 6018 13a0 0060 116c 0680 200a
211+2000 0a02 a000 6060 ff41 40ff e6a0 0060
212+8106 808f 0b20 0009 a00b 54a0 0b38 6006
213+7a80 eb13 316c a000 9081 0680 bf0b 2000
214+09a0 0b54 a00b 2460 0661 80eb 1331 6ca0
215+90e5 1394 802f 0820 0009 9460 ffd8 2194
216+20ff f022 80d1 1280 0313 6c21 a000 c813
217+802f 60ff c194 0620 0006 0222 a000 906c
218+60ff b321 40ff ee0f a004 fe94 cf08 2000
219+0ca0 0003 3894 20ff f222 a0ff ff42 6c22
220+6c22 4001 c922 40fe c360 0070 6003 c440
221+0571 6000 6760 03bb 4005 6460 005e 2660
222+ff8d 4002 8660 ffa3 4002 8080 8060 051e
223+6000 4960 0411 4005 1580 8060 0510 6000
224+3b60 03f5 4005 0780 a060 0502 6000 2d60
225+03ef 4004 f560 0024 8020 4004 e760 001c
226+8040 4004 df80 6040 04da 6000 0f40 0494
227+6000 0940 047d 6000 0340 01a3 2194 8020
228+0a20 0009 a00b 5da0 0b38 4005 7e6c 7c04
229+7924 0482 4004 8b26 0495 2c04 9b5f 04a0
230+2e04 a92d 04ae 3b04 b73d 04bc 2104 cd3f
231+04c5 2304 da22 04e0 7d04 717e 0196 2804
232+7529 046f 5b04 6f5d 046f 2504 e600 2660
233+000e 8000 090f 26a0 0618 6005 104f 1d6c
234+e01f 00a0 05b8 a4a0 0003 2460 0506 2000
235+0f41 a000 0338 9420 ffec 2222 6280 006c
236+225c b4a0 4c49 2880 701f 0f5d a000 0338
237+9480 210b 2000 2e94 8032 0920 0005 c020
238+4000 1d94 8072 0920 0005 c040 4000 1194
239+806b 0920 0005 c080 4000 0522 4280 006c
240+5d21 40ff cb22 4f6c 4c49 5449 4e43 504f
241+504e 4950 5357 5052 4f54 4455 504f 5652
242+4551 554e 4551 4754 484c 5448 4a4d 504a
243+434e 4a53 5253 5448 4c44 5a53 545a 4c44
244+5253 5452 4c44 4153 5441 4445 4944 454f
245+4144 4453 5542 4d55 4c44 4956 414e 444f
246+5241 454f 5253 4654 4252 4b00 2280 0081
247+80fb 1306 a01b 8fa1 80fa 3315 0680 041f
248+6003 c404 6003 c080 1833 a006 506c 80e4
249+32a0 0001 3994 60ff e360 00cf 80d6 336c
250+cebb 2e2e 0060 03ea 2000 1594 60fd f821
251+1d20 000c 9480 7b08 2000 0560 fed0 0c6c
252+a00b 5da0 0b38 4004 0294 807b 0820 ff9c
253+9480 2f08 20fd b494 8026 0820 fdad 6c60
254+ffc3 2660 0019 211d 2000 7626 6000 b221
255+1d20 006d 6000 2b80 0060 0035 40fc 982f
256+802f 32a0 0b8f a820 0011 26ef 6003 9e20
257+000d 6003 8e60 038b 40ff eb22 a0ff ff23
258+626c 9406 2000 0302 226c 6000 0421 40ff
259+f1a0 0b8f a126 a01b 8f2b 2000 09a0 0b54
260+a00b 2b60 0385 80e9 3315 6c60 fcd5 6003
261+5294 0620 0004 0222 226c 60fc cf21 40ff
262+f022 a00b 65a0 0b32 4003 6026 6000 32a1
263+1d20 0009 2280 0260 02c1 4000 7ca1 2114
264+8002 1c20 0010 6002 b227 3521 2194 8002
265+1d05 0515 226c 2222 a00b 65a0 0b24 4003
266+2a2f a007 ca34 a034 8f26 a000 0338 ef60
267+02fb 2000 0b60 00c1 aa20 ffed 22a0 ffff
268+2362 6c34 2fa0 07ca 34a0 348f 2660 00a9
269+34ef 242b 2000 0760 009f aa20 ffee 2362
270+6c26 60ff bca1 1d20 000d 2280 2c32 2780
271+01a0 ffff 6000 0223 6c04 6000 1c60 0019
272+6000 1660 fe9f 2660 fef5 211d 20ff 8894
273+6000 0621 9420 fff7 14a0 348f a126 a07c
274+8f2b 2000 09a0 0b54 a00b 1c60 029d 80e9
275+3315 6ca0 07ca 34a0 348f a820 0036 a121
276+1480 011c 2000 27b4 a001 0028 2000 1f26
277+a000 0338 9480 4119 801a 0b20 000f a00a
278+fb60 02a0 2660 029c 800a 60f9 7522 6000
279+0840 ffc6 2222 40f9 cba0 0003 3840 0223
280+26a0 0080 3802 2000 016c a00b 6fa0 0b24
281+4002 3860 01fc 2001 db60 fe2d 60ff 02a1
282+1d20 0009 a00b 5da0 0b12 6002 1e34 6c80
283+1b33 60fe 1460 ff29 a121 af14 8002 1c20
284+0010 2660 0175 6000 1260 000f a000 0060
285+0009 d44f 8001 1d6f 1534 6c04 6000 00a0
286+1c8f a126 a034 8f2b 2000 09a0 0b54 a00b
287+0760 01d7 80e9 3315 6ca0 0912 60ff b003
288+6ca0 091a 40ff a8a0 0921 60ff a2a1 1d20
289+0004 2280 006c 6001 2260 000e 60ff 6103
290+6ca0 0930 60ff 8860 0111 2121 396c 80af
291+32a0 1c8f a820 0013 26a0 0949 35a6 a000
292+0438 342e a000 0638 40ff e922 226c b460
293+00f1 a121 3434 a11d 2000 06a0 0b5d 6000
294+376c 60ff e923 0340 00a4 60ff e123 4000
295+9960 ffda 2434 60ff b160 000f 0340 008e
296+60ff cb24 3460 ffa2 4000 7f26 a000 8038
297+0220 0001 6ca0 0b6f a000 0026 60fe 24a0
298+0003 3860 fac9 2121 34a0 0003 38a0 0b12
299+4001 1c94 6000 5721 9420 fff7 226c 60fb
300+df40 004a 6000 c280 0209 8050 1f80 801d
301+6000 3b60 00bc 8000 0820 001e 6000 aa06
302+8002 0920 0008 0260 008a 0340 0020 8004
303+0920 0006 6000 7d40 0010 22a0 0b5d a00b
304+3d40 00c7 6000 0760 ff17 0460 0000 6000
305+1626 a000 ff2a 2000 0b22 02a0 0b77 a00b
306+4c40 00a7 40f7 fca0 0100 a180 fa33 a1a0
307+0100 2b20 0004 a180 f633 6c80 ea32 6c60
308+fff9 3880 e233 6c80 0f1c 800a 8b20 0005
309+1980 6118 6c02 8030 186c 9480 3019 0680
310+090a 0c6c 8027 1906 800a 1980 050a 0c6c
311+0280 ff6c e000 00c0 407f 60ff ddc0 000f
312+7821 9420 fff1 226f 6ca6 6000 1624 2139
313+036c 2660 ffc4 0120 0005 1480 0008 6c21
314+40ff f094 2000 0221 6c21 40ff f6a6 60ff
315+f224 3924 2f27 3824 a820 000c 94d4 4f09
316+2000 0521 6140 fff0 6228 6ca0 0060 2480
317+0f16 2000 2b60 002c 8020 60f7 0524 6000
318+23a0 0b04 6000 1d60 001a a00a ed60 0014
319+a000 9060 000e 800a 60f6 e7a0 010f 176c
320+2222 226c 9406 2000 0302 226c 60f6 d321
321+40ff f1e0 ff00 a000 0abb af3a 396f 419d
322+20ff f322 0380 3018 60f6 b747 58cf 20ff
323+f362 6c41 7373 656d 626c 6564 0020 696e
324+2000 2062 7974 6573 2e0a 002d 2d20 556e
325+7573 6564 3a20 0052 6566 6572 656e 6365
326+7300 5265 6665 7265 6e63 6500 5379 6d62
327+6f6c 7300 5379 6d62 6f6c 004d 6163 726f
328+7300 4d61 6372 6f00 4e61 6d65 004e 756d
329+6265 7200 436f 6d6d 656e 7400 5772 6974
330+696e 6700 6578 6365 6564 6564 0069 6e76
331+616c 6964 0064 7570 6c69 6361 7465 0074
332+6f6f 2066 6172 007a 6572 6f2d 7061 6765
333+006f 7065 6e00 2e2e 0052 4553 4554 
+31, -36
  1@@ -25,15 +25,10 @@ cc -DNDEBUG -O2 -g0 -s src/uxn11.c -lX11 -lutil -o bin/uxn11
  2 typedef unsigned char Uint8;
  3 typedef unsigned short Uint16;
  4 
  5-typedef struct {
  6-	Uint8 dat[0x100], ptr;
  7-} Stack;
  8-
  9 static XImage *ximage;
 10 static Display *display;
 11 static Window window;
 12-static Uint8 *ram, dev[0x100];
 13-static Stack wst, rst;
 14+static Uint8 *ram, dev[0x100], ptr[2], stk[2][0x100];
 15 
 16 Uint8 emu_dei(const Uint8 port);
 17 void emu_deo(const Uint8 port, const Uint8 value);
 18@@ -57,25 +52,25 @@ void emu_deo(const Uint8 port, const Uint8 value);
 19 	case 0x20|opc: {const int _2=1,_r=0;A B;} break;\
 20 	case 0x40|opc: {const int _2=0,_r=1;A B;} break;\
 21 	case 0x60|opc: {const int _2=1,_r=1;A B;} break;\
 22-	case 0x80|opc: {const int _2=0,_r=0;int k=wst.ptr;A wst.ptr=k;B;} break;\
 23-	case 0xa0|opc: {const int _2=1,_r=0;int k=wst.ptr;A wst.ptr=k;B;} break;\
 24-	case 0xc0|opc: {const int _2=0,_r=1;int k=rst.ptr;A rst.ptr=k;B;} break;\
 25-	case 0xe0|opc: {const int _2=1,_r=1;int k=rst.ptr;A rst.ptr=k;B;} break;\
 26+	case 0x80|opc: {const int _2=0,_r=0;int k=ptr[_r];A ptr[_r]=k;B;} break;\
 27+	case 0xa0|opc: {const int _2=1,_r=0;int k=ptr[_r];A ptr[_r]=k;B;} break;\
 28+	case 0xc0|opc: {const int _2=0,_r=1;int k=ptr[_r];A ptr[_r]=k;B;} break;\
 29+	case 0xe0|opc: {const int _2=1,_r=1;int k=ptr[_r];A ptr[_r]=k;B;} break;\
 30 }
 31 
 32 /* Microcode */
 33 
 34-#define REM if(_r) rst.ptr -= 1 + _2; else wst.ptr -= 1 + _2;
 35+#define REM    ptr[_r] -= 1 + _2;
 36+#define DEC(m) stk[m][--ptr[m]]
 37+#define INC(m) stk[m][ptr[m]++]
 38 #define IMM(o) o = ram[pc] << 8 | ram[pc + 1], pc += 2;
 39 #define MOV(x) { if(_2) pc = x; else pc += (signed char)x; }
 40-#define DEC(s) s.dat[--s.ptr]
 41-#define PO1(o) { if(_r) o = DEC(rst); else o = DEC(wst); }
 42-#define PO2(o) { PO1(o) if(_r) o |= DEC(rst) << 8; else o |= DEC(wst) << 8; }
 43+#define PO1(o) { o = DEC(_r); }
 44+#define PO2(o) { o = DEC(_r) | DEC(_r) << 8; }
 45 #define POx(o) { if(_2) PO2(o) else PO1(o) }
 46 #define GOT(o) { if(_2) PO1(o[1]) PO1(o[0]) }
 47-#define INC(s) s.dat[s.ptr++]
 48-#define RP1(i) { if(_r) INC(wst) = i; else INC(rst) = i; }
 49-#define PU1(i) { if(_r) INC(rst) = i; else INC(wst) = i; }
 50+#define RP1(i) { INC(!_r) = i; }
 51+#define PU1(i) { INC(_r) = i; }
 52 #define PUx(i) { if(_2) { c = (i); PU1(c >> 8) PU1(c) } else PU1(i) }
 53 #define PUT(i) { PU1(i[0]) if(_2) PU1(i[1]) }
 54 #define DEI(i,o) o[0] = emu_dei(i); if(_2) o[1] = emu_dei(i + 1); PUT(o)
 55@@ -86,17 +81,17 @@ void emu_deo(const Uint8 port, const Uint8 value);
 56 static unsigned int
 57 uxn_eval(unsigned short pc)
 58 {
 59-	unsigned int a, b, c, x[2], y[2], z[2], step = 0x8000000;
 60+	unsigned int a, b, c, x[2], y[2], z[2], step = 0x80000000;
 61 	while(step--) {
 62 		switch(ram[pc++]) {
 63 		/* BRK */ case 0x00: return 1;
 64-		/* JCI */ case 0x20: IMM(c) if(DEC(wst)) pc += c; break;
 65+		/* JCI */ case 0x20: IMM(c) if(DEC(0)) pc += c; break;
 66 		/* JMI */ case 0x40: IMM(c) pc += c; break;
 67-		/* JSI */ case 0x60: IMM(c) INC(rst) = pc >> 8, INC(rst) = pc, pc += c; break;
 68-		/* LI2 */ case 0xa0: INC(wst) = ram[pc++]; /* fall-through */
 69-		/* LIT */ case 0x80: INC(wst) = ram[pc++]; break;
 70-		/* L2r */ case 0xe0: INC(rst) = ram[pc++]; /* fall-through */
 71-		/* LIr */ case 0xc0: INC(rst) = ram[pc++]; break;
 72+		/* JSI */ case 0x60: IMM(c) INC(1) = pc >> 8, INC(1) = pc, pc += c; break;
 73+		/* LI2 */ case 0xa0: INC(0) = ram[pc++]; /* fall-through */
 74+		/* LIT */ case 0x80: INC(0) = ram[pc++]; break;
 75+		/* L2r */ case 0xe0: INC(1) = ram[pc++]; /* fall-through */
 76+		/* LIr */ case 0xc0: INC(1) = ram[pc++]; break;
 77 		/* INC */ OPC(0x01,POx(a),PUx(a + 1))
 78 		/* POP */ OPC(0x02,REM,{})
 79 		/* NIP */ OPC(0x03,GOT(x) REM,PUT(x))
 80@@ -130,7 +125,7 @@ uxn_eval(unsigned short pc)
 81 		/* SFT */ OPC(0x1f,PO1(a) POx(b),PUx(b >> (a & 0xf) << (a >> 4)))
 82 		}
 83 	}
 84-	return !fprintf(stdout, "Exhausted cycles limit.\n");
 85+	return 0;
 86 }
 87 
 88 /* clang-format on */
 89@@ -141,13 +136,13 @@ uxn_eval(unsigned short pc)
 90 static char *system_boot_path;
 91 
 92 static void
 93-system_print(const char *name, const Stack *s)
 94+system_print(char *name, int r)
 95 {
 96 	Uint8 i;
 97 	fprintf(stderr, "%s ", name);
 98-	for(i = s->ptr - 8; i != (Uint8)(s->ptr); i++)
 99-		fprintf(stderr, "%02x%c", s->dat[i], i == 0xff ? '|' : ' ');
100-	fprintf(stderr, "<%02x\n", s->ptr);
101+	for(i = ptr[r] - 8; i != ptr[r]; i++)
102+		fprintf(stderr, "%02x%c", stk[r][i], i == 0xff ? '|' : ' ');
103+	fprintf(stderr, "<%02x\n", ptr[r]);
104 }
105 
106 static unsigned int
107@@ -178,7 +173,7 @@ system_reboot(const unsigned int soft)
108 	unsigned int i;
109 	for(i = 0x0; i < 0x100; i++) dev[i] = 0;
110 	for(i = soft ? 0x100 : 0; i < 0x10000; i++) ram[i] = 0;
111-	wst.ptr = rst.ptr = 0;
112+	ptr[0] = ptr[1] = 0;
113 	return system_load(system_boot_path);
114 }
115 
116@@ -959,8 +954,8 @@ emu_dei(const Uint8 port)
117 {
118 	switch(port) {
119 	/* System */
120-	case 0x04: return wst.ptr;
121-	case 0x05: return rst.ptr;
122+	case 0x04: return ptr[0];
123+	case 0x05: return ptr[1];
124 	/* Console */
125 	case CMD_LIVE:
126 	case CMD_EXIT: check_child(); break;
127@@ -997,15 +992,15 @@ emu_deo(const Uint8 port, const Uint8 value)
128 	switch(port) {
129 	/* System */
130 	case 0x03: system_expansion(PEEK2(dev + 2)); return;
131-	case 0x04: wst.ptr = dev[4]; return;
132-	case 0x05: rst.ptr = dev[5]; return;
133+	case 0x04: ptr[0] = dev[4]; return;
134+	case 0x05: ptr[1] = dev[5]; return;
135 	case 0x08:
136 	case 0x09:
137 	case 0x0a:
138 	case 0x0b:
139 	case 0x0c:
140 	case 0x0d: screen_palette(); return;
141-	case 0x0e: system_print("WST", &wst), system_print("RST", &rst); return;
142+	case 0x0e: system_print("WST", 0), system_print("RST", 1); return;
143 	/* Console */
144 	case 0x11: console_vector = PEEK2(&dev[0x10]); return;
145 	case 0x18: fputc(dev[0x18], stdout), fflush(stdout); return;
146@@ -1261,7 +1256,7 @@ main(int argc, char **argv)
147 {
148 	int i = 1;
149 	if(argc == 2 && argv[1][0] == '-' && argv[1][1] == 'v')
150-		return !fprintf(stdout, "Uxn11 - Varvara Emulator, 13 Aug 2025.\n");
151+		return !fprintf(stdout, "Uxn11 - Varvara Emulator, 26 Sep 2025.\n");
152 	else if(argc == 1)
153 		return !fprintf(stdout, "usage: %s [-v] file.rom [args..]\n", argv[0]);
154 	else if(!system_boot(argv[i++], argc > 2))
+1, -2
 1@@ -19,8 +19,7 @@ cc -DNDEBUG -O2 -g0 -s src/uxncli.c -lutil -o bin/uxncli
 2 typedef unsigned char Uint8;
 3 typedef unsigned short Uint16;
 4 
 5-static unsigned char ptr[2], stk[2][0x100];
 6-static Uint8 *ram, dev[0x100];
 7+static Uint8 *ram, dev[0x100], ptr[2], stk[2][0x100];
 8 
 9 Uint8 emu_dei(const Uint8 port);
10 void emu_deo(const Uint8 port, const Uint8 value);