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);