commit fe0e46b
Devine Lu Linvega
·
2026-06-13 15:50:18 +0000 UTC
parent 954dac9
Took multiplication out of tight loop
3 files changed,
+221,
-237
+39,
-56
1@@ -3,9 +3,7 @@
2 |100
3
4 @on-reset ( -> )
5- ( |
6- | PART 1:
7- |
8+ ( | PART 1:
9 | LIT2: Puts a short on the stack
10 | LIT: Puts a byte on the stack
11 | #06 DEO: Write to metadata ports
12@@ -14,9 +12,7 @@
13 [ LIT2 "kO ] #18 DEO
14 #18 DEO
15 #2018 DEO
16- ( |
17- | PART 2:
18- |
19+ ( | PART 2:
20 | LITr: Put a byte on return stack
21 | STH: Move a byte from working stack to return stack
22 | STH2r: Move a short from return stack to working stack )
23@@ -24,9 +20,7 @@
24 STH2r #18 DEO
25 #18 DEO
26 #2018 DEO
27- ( |
28- | PART 3:
29- |
30+ ( | PART 3:
31 | LIT2r: Put a short on return stack
32 | DUP: Duplicate byte
33 | ADDr: Add bytes on return stack )
34@@ -35,16 +29,12 @@
35 ADDr STH2r #18 DEO
36 #18 DEO
37 #2018 DEO
38- ( |
39- | PART 4:
40- |
41+ ( | PART 4:
42 | JSI: Subroutine to relative short address
43 | JMP2r: Jumps to absolute address on return stack )
44 tests/<print-ok>
45 #2018 DEO
46- ( |
47- | PART 5:
48- |
49+ ( | PART 5:
50 | POP2: Removes a short from the stack
51 | INC2: Increments short on stack
52 | DUP2: Duplicate short
53@@ -52,55 +42,43 @@
54 | JCI: Conditional subroutine to relative short address )
55 ;dict/ok str/<print>
56 #2018 DEO
57- ( |
58- | PART 6:
59- |
60+ ( | PART 6:
61 | JSR2: Jump to subroutine from short pointer
62 | LDAk: Non-destructive load byte from absolute address )
63 { "Ok $1 }
64 STH2r ;str/<print> JSR2 #2018 DEO
65- ( |
66- | PART 7:
67- |
68+ ( | PART 7:
69 | Relative distance bytes )
70 tests/<rel>
71 SWP #18 DEO
72 #18 DEO
73- ( |
74- | PART 8:
75- |
76+ ( | PART 8:
77 | Test every opcode )
78 #1234 #00 STZ2
79- tests/<run>
80- ( |
81- | PART 9:
82- |
83+ ( sentinel ) #1234 LIT2r 5678
84+ ( run tests ) tests/<run>
85+ ( sentinel ) #1234 EQU2 LIT2r 5678 EQU2r STHr AND ;dict/sentinel tests/<print>
86+ ( | PART 9:
87 | Testing that stacks are circular and wrapping
88 | Storing 12 at -1 and 34 at 0 )
89 POP #12 #34 ADD #46 EQU STH
90 POP #1234 ADD #46 EQU STH
91 POP2 #1111 #2222 ADD2 #3333 EQU2 STHr AND STHr AND ;dict/stack-wrap tests/<print>
92 ( restore stack ) #0000 #0000
93- ( |
94- | PART 10:
95- |
96+ ( | PART 10:
97 | Testing RAM wrapping
98 | Storing 12 in 0xffff, and 34 in 0x0000 )
99 #1234 #ffff STA2
100 ( LDA ) #0000 LDA #ffff LDA ADD #46 EQU
101 ( LDA2 ) #ffff LDA2 ADD #46 EQU AND ;dict/ram-wrap tests/<print>
102- ( |
103- | PART 11:
104- |
105+ ( | PART 11:
106 | Testing PC wrapping: split instruction
107 | Storing 80[LIT] in 0xffff, and 55[val8] in 0x0000
108 | Storing 6c[JMP2r] in 0x0001 )
109 #8055 #ffff STA2
110 #6c #01 STZ
111 #ffff JSR2 #55 EQU ;dict/pc-wrap tests/<print>
112- ( |
113- | PART 12:
114- |
115+ ( | PART 12:
116 | Testing PC wrapping: split value after instruction
117 | Storing a0[LIT2] in 0xfffe,
118 | and 0x55[hi-byte] in 0xffff, and 0xaa[lo-byte] in 0x0000
119@@ -108,16 +86,12 @@
120 #a055 #fffe STA2
121 #aa6c #0000 STA2
122 #fffe JSR2 #55aa EQU2 ;dict/pc2-wrap tests/<print>
123- ( |
124- | PART 13:
125- |
126+ ( | PART 13:
127 | Testing that zero-page is wrapping )
128 #5678 #ff STZ2
129 ( LDZ ) #00 LDZ #ff LDZ ADD #ce EQU
130 ( LDZ2 ) #ff LDZ2 ADD #ce EQU AND ;dict/zp-wrap tests/<print>
131- ( |
132- | PART 14:
133- |
134+ ( | PART 14:
135 | Testing that device page is wrapping )
136 #1234 #ff DEO2
137 ( DEI ) #00 DEI #ff DEI ADD #46 EQU
138@@ -143,6 +117,7 @@
139 &zp-wrap "Zer-wrap: 20 $1
140 &dev-wrap "Dev-wrap: 20 $1
141 &opc-test "Opc-test: 20 $1
142+ &sentinel "Sentinel: 20 $1
143
144 (
145 @|Relative Distance Bytes )
146@@ -151,7 +126,7 @@
147 ( name ) "Opctest 0a
148 ( details ) "A 20 "Testing 20 "Program 0a
149 ( author ) "By 20 "Devine 20 "Lu 20 "Linvega 0a
150- ( date ) "18 20 "May 20 "2026 $2
151+ ( date ) "9 20 "Jun 20 "2026 $2
152
153 (
154 @|Tests )
155@@ -303,16 +278,20 @@
156 ( - ) #5602 [ STZ ] #02 LDZ #56 EQU JMP2r
157
158 @op-ldr ( -- pass )
159- ( advance ) [ !{ &u 34 ] }
160+ ( advance ) [ !{ &a 12 ( -128 ) $6e &u 34 } ]
161 ( - ) ,&t LDR #12 EQU
162- ( - ) ,&u LDR #34 EQU AND JMP2r
163- &t 12
164+ ( - ) ,&u LDR #34 EQU AND
165+ ( -128 ) ,&a LDR #12 EQU AND
166+ ( +127 ) ,&b LDR #56 EQU AND [ !{ &t 12 ( +127 ) $77 &b 56 } ] JMP2r
167
168 @op-str ( -- pass )
169- ( advance ) [ !{ &u $1 ] }
170+ ( advance ) [ !{ &a $1 ( -128 ) $63 &u $1 ] }
171 ( - ) #34 ,&t [ STR ] ,&t LDR #34 EQU
172- ( - ) #12 ,&u [ STR ] ,&u LDR #12 EQU AND JMP2r
173- &t $1
174+ ( - ) #12 ,&u [ STR ] ,&u LDR #12 EQU AND
175+ ( -128 ) [ LIT2 56 _&a ] STR
176+ ( +127 ) [ LIT2 56 _&b ] STR
177+ [ !{ &t $1 ( +127 ) $7b &b $1 } ]
178+ ( - check ) ;&a LDA #56 EQU AND ;&b LDA #56 EQU AND JMP2r
179
180 @op-lda ( -- pass )
181 ( - ) ;&value LDA #ef EQU JMP2r
182@@ -455,16 +434,20 @@
183 ( - ) #5678 #04 [ STZ2 ] #04 LDZ2 #5678 EQU2 JMP2r
184
185 @op-ldr2 ( -- pass )
186- ( advance ) [ !{ &u 1234 ] }
187+ ( advance ) [ !{ &a 1234 ( -128 ) $6a &u 3456 } ]
188 ( - ) ,&t LDR2 #1234 EQU2
189- ( - ) ,&u LDR2 #1234 EQU2 AND JMP2r
190- &t 1234
191+ ( - ) ,&u LDR2 #3456 EQU2 AND
192+ ( -128 ) ,&a LDR2 #1234 EQU2 AND
193+ ( +127 ) ,&b LDR2 #5678 EQU2 AND [ !{ &t 1234 ( +127 ) $75 &b 5678 } ] JMP2r
194
195 @op-str2 ( -- pass )
196- ( advance ) [ !{ &u $2 ] }
197+ ( advance ) [ !{ &a $2 ( -128 ) $5b &u $2 ] }
198 ( - ) #1234 ,&t [ STR2 ] ,&t LDR2 #1234 EQU2
199- ( - ) #1234 ,&u [ STR2 ] ,&u LDR2 #1234 EQU2 AND JMP2r
200- &t $2
201+ ( - ) #1234 ,&u [ STR2 ] ,&u LDR2 #1234 EQU2 AND
202+ ( -128 ) #1234 ,&a STR2
203+ ( +127 ) #1234 ,&b STR2
204+ [ !{ &t $2 ( +127 ) $7a &b $2 } ]
205+ ( - check ) ;&a LDA2 #1234 EQU2 AND ;&b LDA2 #1234 EQU2 AND JMP2r
206
207 @op-lda2 ( -- pass )
208 ( - ) ;&t LDA2 #1234 EQU2 JMP2r
+177,
-177
1@@ -1,180 +1,180 @@
2-a001 1f80 0637 a001 6380 1037 a003 1716
3-1c20 000a a002 ff60 0a4a a001 0f17 0000
4+a001 1f80 0637 a001 6480 1037 a003 1716
5+1c20 000a a003 0260 0a47 a001 0f17 0000
6 4472 6966 626c 696d 0a55 786e 7461 6c28
7 3534 4b29 2041 7373 656d 626c 6572 0a42
8 7920 4465 7669 6e65 204c 7520 4c69 6e76
9-6567 610a 3720 4a75 6e20 3230 3236 0001
10-5600 50a0 0217 160b 2000 0780 1216 6000
11-0c00 a001 9740 ff91 a000 0313 6ca0 3f00
12-8180 fb13 8920 000c a00c 03a0 0000 a003
13-2360 0057 0311 6ca0 0217 160b 2000 0780
14-1216 6000 1d00 6001 89a0 0000 6000 5960
15-0186 6009 da20 0005 a080 0f17 00a0 010f
16-1700 a07f 4081 80fb 1389 2000 0ca0 0c03
17-a000 40a0 0323 6000 1203 116c 9406 2000
18-0302 226c 60ff db21 40ff f160 099c 6009
19-6b24 6009 6fa0 0bb3 6009 6960 0966 800a
20-4000 0080 1917 6c21 26a0 0000 2820 000f
21-60ff 6526 a001 7d60 084e 8000 60ff 5e80
22-a837 a000 0180 aa37 6002 45a0 0000 6009
23-5e20 001c a002 5880 ac37 80a3 1620 0016
24-9d20 000c a00c 0ca0 0000 a003 2860 ff9b
25-2280 0a40 0223 2180 0060 021d 40ff cf80
26-0f33 800e 13a0 026c 8002 376c 0000 0100
27-0100 0000 0100 0100 0100 0000 0002 7f00
28-a00b 9260 08d6 a000 4060 08d8 a00b 9c60
29-08d2 a00a 5134 26a0 00ff 3960 08cc a00b
30-a160 08c0 a000 4080 a837 a000 0180 aa37
31-a000 ff21 2680 c133 a002 7480 0237 a002
32-7f80 ae37 a920 ffeb 2222 a003 2d60 ff0c
33-a000 4080 a837 a007 c134 a04d 3ca0 0002
34-80aa 3726 80ae 37a0 0003 3826 6007 e6a4
35-3980 aa37 2480 ae37 aa20 ffe1 2222 6c75
36-7361 6765 3a20 6472 6966 626c 696d 2e72
37-6f6d 2069 6e2e 7461 6c20 6f75 742e 726f
38-6d0a 0050 6174 6800 4669 6c65 002e 7379
39-6d00 a00c 3840 0190 8041 32a0 03b5 2920
40-0009 a00c 30a0 0bf3 6007 df80 2e32 a003
41-f429 2000 09a0 0c30 a00b e160 07cc 6008
42-2e20 000c 6005 f460 0825 2000 0340 04e3
43-6c80 0833 6c90 2000 0222 6ca0 0385 2ca0
44-0385 40ff ec60 073b 2006 6d60 024f 2006
45-5290 6001 66a1 1d20 000d 2260 00a2 a11d
46-2000 c022 4001 d321 342c 22a0 0109 13a0
47-03b5 40ff bc34 26c0 00a0 2800 280f 58a0
48-2900 280f 59cf c0ef 5320 0003 40ff b06c
49-6003 4060 004a 8000 6000 4ba0 03e1 40ff
50-9034 a07b 0029 2000 0aa0 010a 13a0 03f4
51-40ff 7e6c b426 c000 807b 0804 807b 081d
52-0f58 a07d 0028 0f59 cfc0 eb53 2000 0922
53-8000 6000 1140 ff67 6000 0580 2040 0006
54-a004 2640 0642 a00d 3ca1 26a0 1d3c 2b20
55-0009 a00c 03a0 0bda 6006 ef80 e933 156c
56-6003 0daf 80e0 32a0 0d3c 26ef 6006 8c20
57-000e 6006 8060 067d aa20 ffee 22a0 ffff
58-2362 6c23 6000 0960 066b a004 7940 05f8
59-a0c0 2413 a000 c011 6c06 8020 0a20 0016
60-a000 c060 feef 800a 0920 0007 a000 0121
61-80fa 3340 ffda a000 c081 0680 ff0b 2000
62-09a0 0c03 a00b e760 0680 80eb 1331 6ca0
63-0080 8106 80bf 0b20 0009 a00c 03a0 0bd3
64-6006 6780 eb13 316c 26a0 80e4 1394 802f
65-0820 0009 9460 ffd7 2194 20ff f022 80d0
66-1280 0513 4002 7f21 a000 c513 802f 60ff
67-bea0 0080 24a0 04af 4005 6d0f a005 9d94
68-cf08 2000 0ca0 0003 3894 20ff f222 a0ff
69-ff42 6c22 6c22 4001 d040 fe8e 6000 6c40
70-feae 6000 6660 030a 4005 3960 005d 6003
71-0140 052c 6000 5440 ff8e 60ff aa40 0226
72-8080 6004 ee60 0043 6003 e940 04e5 8080
73-6004 e060 0035 6003 cd40 04d7 80a0 6004
74-d260 0027 6003 c740 04c5 6000 1e80 2040
75-04b7 6000 1680 4040 04af 8060 4004 aa60
76-0009 4004 6460 0003 4004 5221 9480 200a
77-2000 09a0 0c0c a00b e740 058e 6c7c 0522
78-2405 2b40 0534 2605 3a2c 0540 5f05 452e
79-054e 2d05 533b 055c 3d05 6121 0572 3f05
80-6a23 057f 2205 857d 0515 7e02 0728 0519
81-2905 135b 0513 5d05 1325 051c 0026 6000
82-0e80 0009 0f26 a006 b760 04ef 4f1d 6ce0
83-1f00 a006 57a4 a000 0324 6004 e720 000f
84-41a0 0003 3894 20ff ec22 2262 8000 6c22
85-5cb4 a04c 4928 8070 1f0f 5da0 0003 3894
86-8021 0b20 002e 9480 3209 2000 05c0 2040
87-001d 9480 7209 2000 05c0 4040 0011 9480
88-6b09 2000 05c0 8040 0005 2242 8000 6c5d
89-2140 ffcb 224f 6c4c 4954 494e 4350 4f50
90-4e49 5053 5750 524f 5444 5550 4f56 5245
91-5155 4e45 5147 5448 4c54 484a 4d50 4a43
92-4e4a 5352 5354 484c 445a 5354 5a4c 4452
93-5354 524c 4441 5354 4144 4549 4445 4f41
94-4444 5355 424d 554c 4449 5641 4e44 4f52
95-4145 4f52 5346 5442 524b 0022 a000 00a1
96-80fa 3326 a00c 3ca1 2180 f933 3560 000e
97-0560 000a 8037 3380 3633 a007 0c6c 0680
98-041f 6003 9304 4003 8f80 d932 26a0 0c3c
99-2920 0009 a00c 0ca0 0bd3 6004 2da0 0002
100-39b4 60ff c860 005e 80ba 336c cebb 2e2e
101-2e2e 0060 03ad 2000 2594 807b 0820 001e
102-9460 fdd7 211d 2000 1560 fd14 211d 2000
103-1660 00a6 211d 2000 0e60 fea1 0c6c a00c
104-0ca0 0be7 4003 e3a0 0c14 a00b e740 03da
105-9480 7b08 20ff 6494 802f 0820 fd89 9480
106-2608 20fd 826c 6000 71a1 1d20 0010 22a0
107-07c1 3460 0253 8002 6002 e140 001d 2326
108-6002 4660 012f 2000 0860 02d0 2735 4001
109-3c22 a00c 14a0 0bd3 4003 8f04 6000 2160
110-001e 6000 1be0 07c1 f480 0060 0012 60ff
111-62a0 07c0 6002 b164 7467 7964 5542 8000
112-a04d 3ca1 26a0 953c 2b20 0009 a00c 03a0
113-0bcb 6003 5580 e933 156c 26c0 0140 0002
114-2141 9420 fffa 224f 800e 13af 80d2 32a0
115-4d3c 26a0 0003 3894 8000 0920 0008 a1ef
116-6002 d820 0011 1480 0004 38a0 0004 38aa
117-20ff dfa0 ffff 2422 2362 6c60 ffbc a11d
118-2000 0d22 809a 3224 8001 a0ff ff40 ff6b
119-236c 6002 8e20 026d 60ff 1560 ff9c 6000
120-6c20 0009 a00c 0ca0 0bd3 6002 dd60 0073
121-3423 6ca0 07c1 34a0 4d3c a820 0037 6000
122-5b20 0027 b4a0 0100 2820 001f 26a0 0004
123-3894 8041 1980 1a0b 2000 0fa0 0baa 6002
124-e326 6002 df80 0a60 f979 22a0 0004 3860
125-0243 40ff c522 2240 f9e6 26a0 0080 3802
126-2000 016c a00c 1ea0 0bd3 4002 7da1 1d20
127-0003 8000 6ca1 2114 8002 1c6c a121 1480
128-011c 6ca1 21af 1480 011d 6f15 6c21 21af
129-1480 021d 6f15 6c80 1733 60fe 7360 ff3b
130-60ff d220 001d 2660 0172 6000 1b60 0018
131-a000 0060 0012 a000 0060 000c a004 8d34
132-6000 0560 ffbd 346c 0460 0000 a01d 3ca1
133-26a0 4d3c 2b20 0009 a00c 03a0 0bb6 6002
134-0980 e933 156c a009 9060 ffab 036c a009
135-9840 ffa3 a009 9f60 ff9d a11d 2000 0422
136-8000 6c60 0116 6000 0e60 ff4e 036c a009
137-ae60 ff83 6001 0521 2139 6c80 af32 a01d
138-3ca8 2000 1326 a00b 0b35 a6a0 0004 3834
139-2ea0 000a 3840 ffe9 2222 6cb4 6000 e5a1
140-2134 60ff 2820 0006 a00c 0c40 016d 346c
141-60ff e823 0340 009b 60ff e023 4000 9060
142-ffd9 2434 60ff b060 000f 0340 0085 60ff
143-ca24 3460 ffa1 4000 7626 a000 8038 0220
144-0001 6ca0 0c1e 4001 3226 a000 0338 34a0
145-cebb 2920 0002 226c a008 f735 6ca0 0a33
146-4000 8560 fc09 4000 4a60 00ce 8002 0980
147-501f 8080 1d60 003b 6000 c880 0008 2000
148-1e60 00b6 0680 0209 2000 0802 6000 9603
149-4000 2080 0409 2000 0660 0089 4000 1022
150-a00c 0ca0 0bec 4001 0160 0007 60ff 1f04
151-6000 0060 0012 0720 000b 2202 a00c 26a0
152-0bfb 4000 e540 f817 a001 00a1 80fa 3326
153-a001 002b 2000 0426 80f6 336c 80ea 326c
154-60ff f938 80e2 336c 2f94 0620 0004 0222
155-626c ef2e 2140 fff1 800f 1c80 0a8b 2000
156-0519 8061 186c 0280 3018 6c94 8030 1906
157-8009 0a0c 6c80 2719 0680 0a19 8005 0a0c
158-6c02 80ff 6ce0 0000 c040 7f60 ffdd c000
159-0f78 2194 20ff f122 6f6c a660 0017 2421
160-3903 6c26 60ff c401 2000 0514 8000 086c
161-2140 fff0 2194 20ff fb21 6c2f 2660 fff5
162-2440 0009 2f27 3824 4000 0221 61a8 2000
163-0794 d44f 0820 fff3 6228 6ca0 0bc1 6000
164-5b60 0060 a00b b360 005a a000 00a1 2134
165-a000 0438 6000 4d26 a000 0838 3424 a000
166-0638 34a0 0003 3840 0019 6000 2f60 0034
167-a00b b360 002e a000 c060 0028 a004 8d34
168-a000 80a0 0b9c 6000 1b60 0018 803a 60f6
169-b260 0016 6000 3380 0a40 f6a7 6000 0580
170-2040 f69f a002 0340 fefe e0ff 00a0 000a
171-bbaf 3a39 6f41 9d20 fff3 2203 8030 1860
172-f681 4758 cf20 fff3 626c a001 0213 6c80
173-006c 4173 7365 6d62 6c65 6400 2069 6e20
174-0020 6279 7465 732e 0a00 2d2d 2055 6e75
175-7365 643a 2000 5265 6665 7265 6e63 6573
176-0052 6566 6572 656e 6365 0053 796d 626f
177-6c73 0053 796d 626f 6c00 4d61 6372 6f73
178-004d 6163 726f 004e 616d 6500 4e75 6d62
179-6572 0043 6f6d 6d65 6e74 0057 7269 7469
180-6e67 0065 7863 6565 6465 6400 696e 7661
181-6c69 6400 6475 706c 6963 6174 6500 746f
182-6f20 6661 7200 7a65 726f 2d70 6167 6500
183-6f70 656e 002e 2e00 546f 7000
184+6567 610a 3131 204a 756e 2032 3032 3600
185+0156 0050 a002 1716 0b20 0007 8012 1660
186+000c 00a0 0198 40ff 90a0 0003 136c a03f
187+0081 80fb 1389 2000 0ca0 0c00 a000 00a0
188+0326 6000 5703 116c a002 1716 0b20 0007
189+8012 1660 001d 0060 018b a000 0060 0059
190+6001 8860 09d6 2000 05a0 800f 1700 a001
191+0f17 00a0 7f40 8180 fb13 8920 000c a00c
192+00a0 0040 a003 2660 0012 0311 6c94 0620
193+0003 0222 6c60 ffdb 2140 fff1 6009 9860
194+0967 2460 096b a00b b060 0965 6009 6280
195+0a40 0000 8019 176c 2126 a000 0028 2000
196+0f60 ff65 26a0 017e 6008 4a80 0060 ff5e
197+80a8 37a0 0001 80aa 3760 0247 a000 0060
198+095a 2000 1ca0 0259 80ac 3780 a316 2000
199+169d 2000 0ca0 0c09 a000 00a0 032b 60ff
200+9b22 800a 4002 2521 8000 6002 1f40 ffcf
201+800f 3380 0e13 a002 6d80 0237 6c00 0001
202+0001 0000 0001 0001 0001 0000 0000 0280
203+00a0 0b8f 6008 d2a0 0040 6008 d4a0 0b99
204+6008 cea0 0a4e 3426 a000 ff39 6008 c8a0
205+0b9e 6008 bca0 0040 80a8 37a0 0001 80aa
206+37a0 00ff 2126 80c1 33a0 0275 8002 37a0
207+0280 80ae 37a9 20ff eb22 22a0 0330 60ff
208+0ca0 0040 80a8 37a0 07c4 34a0 4d39 a000
209+0280 aa37 2680 ae37 a000 0338 9480 0004
210+af80 aa37 2126 80ae 376f 38aa 20ff df22
211+226c 7573 6167 653a 2064 7269 6662 6c69
212+6d2e 726f 6d20 696e 2e74 616c 206f 7574
213+2e72 6f6d 0a00 5061 7468 0046 696c 6500
214+2e73 796d 00a0 0c35 4001 9080 4132 a003
215+b829 2000 09a0 0c2d a00b f060 07d9 802e
216+32a0 03f7 2920 0009 a00c 2da0 0bde 6007
217+c660 0828 2000 0c60 05ee 6008 1f20 0003
218+4004 e16c 8008 336c 9020 0002 226c a003
219+882c a003 8840 ffec 6007 3520 0667 6002
220+4f20 064c 9060 0166 a11d 2000 0d22 6000
221+a2a1 1d20 00c0 2240 01d3 2134 2c22 a001
222+0913 a003 b840 ffbc 3426 c000 a028 0028
223+0f58 a029 0028 0f59 cfc0 ef53 2000 0340
224+ffb0 6c60 0340 6000 4a80 0060 004b a003
225+e440 ff90 34a0 7b00 2920 000a a001 0a13
226+a003 f740 ff7e 6cb4 26c0 0080 7b08 0480
227+7b08 1d0f 58a0 7d00 280f 59cf c0eb 5320
228+0009 2280 0060 0011 40ff 6760 0005 8020
229+4000 06a0 0429 4006 3ca0 0d39 a126 a01d
230+392b 2000 09a0 0c00 a00b d760 06e9 80e9
231+3315 6c60 030d af80 e032 a00d 3926 ef60
232+0686 2000 0e60 067a 6006 77aa 20ff ee22
233+a0ff ff23 626c 2360 0009 6006 65a0 047c
234+4005 f2a0 c024 13a0 00c0 116c 0680 200a
235+2000 16a0 00c0 60fe ef80 0a09 2000 07a0
236+0001 2180 fa33 40ff daa0 00c0 8106 80ff
237+0b20 0009 a00c 00a0 0be4 6006 7a80 eb13
238+316c a000 8081 0680 bf0b 2000 09a0 0c00
239+a00b d060 0661 80eb 1331 6c26 a080 e413
240+9480 2f08 2000 0994 60ff d721 9420 fff0
241+2280 d012 8005 1340 027f 21a0 00c5 1380
242+2f60 ffbe a000 8024 a004 b240 0567 0fa0
243+05a0 94cf 0820 000c a000 0338 9420 fff2
244+22a0 ffff 426c 226c 2240 01d0 40fe 8e60
245+006c 40fe ae60 0066 6003 0840 0533 6000
246+5d60 02ff 4005 2660 0054 40ff 8e60 ffaa
247+4002 2680 8060 04e8 6000 4360 03e3 4004
248+df80 8060 04da 6000 3560 03c7 4004 d180
249+a060 04cc 6000 2760 03c1 4004 bf60 001e
250+8020 4004 b160 0016 8040 4004 a980 6040
251+04a4 6000 0940 045e 6000 0340 044c 2194
252+8020 0a20 0009 a00c 09a0 0be4 4005 886c
253+7c05 2524 052e 4005 3726 053d 2c05 435f
254+0548 2e05 512d 0556 3b05 5f3d 0564 2105
255+753f 056d 2305 8222 0588 7d05 187e 0208
256+2805 1c29 0516 5b05 165d 0516 2505 1f00
257+2660 000e 8000 090f 26a0 06ba 6004 e94f
258+1d6c e01f 00a0 065a a4a0 0003 2460 04e1
259+2000 0f41 a000 0338 9420 ffec 2222 6280
260+006c 225c b4a0 4c49 2880 701f 0f5d a000
261+0338 9480 210b 2000 2e94 8032 0920 0005
262+c020 4000 1d94 8072 0920 0005 c040 4000
263+1194 806b 0920 0005 c080 4000 0522 4280
264+006c 5d21 40ff cb22 4f6c 4c49 5449 4e43
265+504f 504e 4950 5357 5052 4f54 4455 504f
266+5652 4551 554e 4551 4754 484c 5448 4a4d
267+504a 434e 4a53 5253 5448 4c44 5a53 545a
268+4c44 5253 5452 4c44 4153 5441 4445 4944
269+454f 4144 4453 5542 4d55 4c44 4956 414e
270+444f 5241 454f 5253 4654 4252 4b00 22a0
271+0000 a180 fa33 26a0 0c39 a121 80f9 3335
272+6000 0e05 6000 0a80 3733 8036 33a0 070f
273+6c06 8004 1f60 038d 0440 0389 80d9 3226
274+a00c 3929 2000 09a0 0c09 a00b d060 0427
275+a000 0239 b460 ffc8 6000 5e80 ba33 6cce
276+bb2e 2e2e 2e00 6003 a720 0025 9480 7b08
277+2000 1e94 60fd d721 1d20 0015 60fd 1421
278+1d20 0016 6000 a621 1d20 000e 60fe a10c
279+6ca0 0c09 a00b e440 03dd a00c 11a0 0be4
280+4003 d494 807b 0820 ff64 9480 2f08 20fd
281+8994 8026 0820 fd82 6c60 0071 a11d 2000
282+1022 a007 c434 6002 4d80 0260 02db 4000
283+1d23 2660 0240 6001 3020 0008 6002 ca27
284+3540 0136 22a0 0c11 a00b d040 0389 0460
285+0021 6000 1e60 001b e007 c4f4 8000 6000
286+1260 ff62 a007 c360 02ab 6474 6779 6455
287+4280 00a0 4d39 a126 a095 392b 2000 09a0
288+0c00 a00b c860 034f 80e9 3315 6c26 8018
289+3360 02d3 010f 80db 32a0 4d39 26a0 0003
290+3894 cf09 2000 0aa1 a000 0060 02da 2000
291+1622 a000 0338 9480 0004 0138 aa20 ffdc
292+2222 a0ff ff42 6c22 2342 6c60 ffbf a11d
293+2000 0e22 a007 c434 2480 01a0 ffff 40ff
294+6d23 6c60 028a 2002 6960 ff17 60ff 9e60
295+006f 2000 09a0 0c09 a00b d060 02d9 6000
296+6f34 236c a007 c434 a04d 39a1 2114 8001
297+1c20 0027 b4a0 0100 2820 001f 26a0 0004
298+3894 8041 1980 1a0b 2000 0fa0 0ba7 6002
299+e026 6002 dc80 0a60 f97a 22a0 0003 3894
300+8000 0401 38aa 20ff c222 2240 f9e3 26a0
301+0080 3802 2000 016c a00c 1ba0 0bd0 4002
302+76a1 1d20 0003 8000 6ca1 2114 8002 1c6c
303+a121 af14 8001 1d6f 156c 2121 af14 8002
304+1d6f 156c 8017 3360 fe79 60ff 3e60 ffd9
305+2000 1d26 6001 7260 001b 6000 18a0 0000
306+6000 12a0 0000 6000 0ca0 0490 3460 0005
307+60ff bd34 6c04 6000 00a0 1d39 a126 a04d
308+392b 2000 09a0 0c00 a00b b360 0209 80e9
309+3315 6ca0 098d 60ff ab03 6ca0 0995 40ff
310+a3a0 099c 60ff 9da1 1d20 0004 2280 006c
311+6001 1660 000e 60ff 5503 6ca0 09ab 60ff
312+8360 0105 2121 396c 80af 32a0 1d39 a820
313+0013 26a0 0b08 35a6 a000 0438 342e a000
314+0a38 40ff e922 226c b460 00e5 a121 3460
315+ff2f 2000 06a0 0c09 4001 6d34 6c60 ffe8
316+2303 4000 9b60 ffe0 2340 0090 60ff d924
317+3460 ffb0 6000 0f03 4000 8560 ffca 2434
318+60ff a140 0076 26a0 0080 3802 2000 016c
319+a00c 1b40 0132 26a0 0003 3834 a0ce bb29
320+2000 0222 6ca0 08f4 356c a00a 3040 0085
321+60fc 0f40 004a 6000 ce80 0209 8050 1f80
322+801d 6000 3b60 00c8 8000 0820 001e 6000
323+b606 8002 0920 0008 0260 0096 0340 0020
324+8004 0920 0006 6000 8940 0010 22a0 0c09
325+a00b e940 0101 6000 0760 ff1f 0460 0000
326+6000 1207 2000 0b22 02a0 0c23 a00b f840
327+00e5 40f8 1ba0 0100 a180 fa33 26a0 0100
328+2b20 0004 2680 f633 6c80 ea32 6c60 fff9
329+3880 e233 6c2f 9406 2000 0402 2262 6cef
330+2e21 40ff f180 0f1c 800a 8b20 0005 1980
331+6118 6c02 8030 186c 9480 3019 0680 090a
332+0c6c 8027 1906 800a 1980 050a 0c6c 0280
333+ff6c e000 00c0 407f 60ff ddc0 000f 7821
334+9420 fff1 226f 6ca6 6000 1724 2139 036c
335+2660 ffc4 0120 0005 1480 0008 6c21 40ff
336+f021 9420 fffb 216c 2f26 60ff f524 4000
337+092f 2738 2440 0002 2161 a820 0007 94d4
338+4f08 20ff f362 286c a00b be60 005b 6000
339+60a0 0bb0 6000 5aa0 0000 a121 34a0 0004
340+3860 004d 26a0 0008 3834 24a0 0006 3834
341+a000 0438 4000 1960 002f 6000 34a0 0bb0
342+6000 2ea0 00c0 6000 28a0 0490 34a0 0080
343+a00b 9960 001b 6000 1880 3a60 f6b6 6000
344+1660 0033 800a 40f6 ab60 0005 8020 40f6
345+a3a0 0204 40fe fee0 ff00 a000 0abb af3a
346+396f 419d 20ff f322 0380 3018 60f6 8547
347+58cf 20ff f362 6ca0 0102 136c 8000 6c41
348+7373 656d 626c 6564 0020 696e 2000 2062
349+7974 6573 2e0a 002d 2d20 556e 7573 6564
350+3a20 0052 6566 6572 656e 6365 7300 5265
351+6665 7265 6e63 6500 5379 6d62 6f6c 7300
352+5379 6d62 6f6c 004d 6163 726f 7300 4d61
353+6372 6f00 4e61 6d65 004e 756d 6265 7200
354+436f 6d6d 656e 7400 5772 6974 696e 6700
355+6578 6365 6564 6564 0069 6e76 616c 6964
356+0064 7570 6c69 6361 7465 0074 6f6f 2066
357+6172 007a 6572 6f2d 7061 6765 006f 7065
358+6e00 2e2e 0054 6f70 00
+5,
-4
1@@ -508,10 +508,11 @@ screen_deo_sprite(void)
2 const int blend = ctrl & 0xf;
3 const Uint8 opaque_mask = blend % 5;
4 const Uint8 *table = blend_lut[blend][layer >> 6];
5- for(i = 0; i <= rML; i++, x += dx, y += dy, rA += addr_incr) {
6- const Uint16 x0 = x + 8, y0 = y + 8;
7+ const int dy_stride = dy * stride;
8+ int x0 = x + 8, y0 = y + 8, row_offset = y0 * stride;
9+ for(i = 0; i <= rML; i++, x0 += dx, y0 += dy, row_offset += dy_stride, rA += addr_incr) {
10 if(x0 + 8 >= stride || y0 + 8 >= screen_hmar2) continue;
11- Uint8 *dst = screen_layers + y0 * stride + x0;
12+ Uint8 *dst = screen_layers + row_offset + x0;
13 const Uint8 *col = &ram[rA + col_start];
14 for(j = 0; j < 8; j++, dst += stride, col += col_delta) {
15 Uint8 *d = dst;
16@@ -1323,7 +1324,7 @@ main(int argc, char **argv)
17 {
18 int i = 1;
19 if(argc == 2 && argv[1][0] == '-' && argv[1][1] == 'v')
20- return !fprintf(stdout, "%s - Varvara Emulator(80K), 7 Jun 2026.\n", argv[0]);
21+ return !fprintf(stdout, "%s - Varvara Emulator(80K), 13 Jun 2026.\n", argv[0]);
22 else if(argc == 1)
23 return !fprintf(stdout, "usage: %s [-v] file.rom [args..]\n", argv[0]);
24 else if(!system_boot(argv[i++], argc > 2))