aboutsummaryrefslogtreecommitdiffstats
path: root/src/uxn-core.s
diff options
context:
space:
mode:
Diffstat (limited to 'src/uxn-core.s')
-rw-r--r--src/uxn-core.s2721
1 files changed, 2721 insertions, 0 deletions
diff --git a/src/uxn-core.s b/src/uxn-core.s
new file mode 100644
index 0000000..255bb99
--- /dev/null
+++ b/src/uxn-core.s
@@ -0,0 +1,2721 @@
1.file "uxn-core.s"
2.section .iwram, "ax", %progbits
3.extern uxn_ram
4.align
5
6@
7@ Core variables
8@
9
10.global wst
11wst: .space 256
12.global wst_ptr
13wst_ptr: .word wst
14
15.global rst
16rst: .space 256
17.global rst_ptr
18rst_ptr: .word rst
19
20@ UXN evaluation function.
21@
22@ r0: PC pointer (argument for this function is the offset from UXN RAM).
23@ r1: Stack pointer (wst).
24@ r2: Stack pointer (rst).
25@ r3-r6: Scratch registers.
26@ r7: Ram ptr.
27@
28.global uxn_eval_asm
29uxn_eval_asm:
30 @ Ensure PC is not null.
31 cmp r0, #0
32 bxeq lr
33
34 @ Initialization.
35 push {r4-r7}
36 ldr r1, wst_ptr
37 ldr r2, rst_ptr
38 ldr r7, =uxn_ram
39 add r0, r0, r7
40
41uxn_decode:
42 ldrb r3, [r0], #1 @ current OP value / table index
43
44 @ Decode OP based on table lookup.
45 adr r4, op_table @ decoding table
46 ldr r4, [r4, r3, lsl #2] @ op_table[idx * 4]
47 bx r4 @ op_table[idx * 4]()
48
49uxn_ret:
50 @ Update stack pointers and return.
51 adr r0, wst_ptr
52 str r1, [r0]
53 adr r0, rst_ptr
54 str r2, [r0]
55 pop {r4-r7}
56 bx lr
57
58@
59@ Macros.
60@
61
62.macro next a
63 ldrb \a, [r0], #1
64.endm
65
66.macro wpop8 a
67 ldrb \a, [r1, #-1]!
68.endm
69
70.macro wpop8s a
71 ldrsb \a, [r1, #-1]!
72.endm
73
74.macro wpop16 a, b
75 ldrb \a, [r1, #-1]!
76 ldrb \b, [r1, #-1]!
77 orr \a, \a, \b, lsl #8
78.endm
79
80.macro wpush8 a
81 strb \a, [r1], #1
82.endm
83
84.macro wpush16 a
85 strb \a, [r1, #1]
86 lsr \a, #8
87 strb \a, [r1], #2
88.endm
89
90.macro wpeek8 a, off
91 ldrb \a, [r1, \off]
92.endm
93
94.macro wpeek8s a, off
95 ldrsb \a, [r1, \off]
96.endm
97
98.macro wpeek16 a, b, offa, offb
99 ldrb \a, [r1, \offa]
100 ldrb \b, [r1, \offb]
101 orr \a, \a, \b, lsl #8
102.endm
103
104.macro rpop8 a
105 ldrb \a, [r2, #-1]!
106.endm
107
108.macro rpop8s a
109 ldrsb \a, [r2, #-1]!
110.endm
111
112.macro rpop16 a, b
113 ldrb \a, [r2, #-1]!
114 ldrb \b, [r2, #-1]!
115 orr \a, \a, \b, lsl #8
116.endm
117
118.macro rpush8 a
119 strb \a, [r2], #1
120.endm
121
122.macro rpush16 a
123 strb \a, [r2, #1]
124 lsr \a, #8
125 strb \a, [r2], #2
126.endm
127
128.macro rpeek8 a, off
129 ldrb \a, [r2, \off]
130.endm
131
132.macro rpeek8s a, off
133 ldrsb \a, [r2, \off]
134.endm
135
136.macro rpeek16 a, b, offa, offb
137 ldrb \a, [r2, \offa]
138 ldrb \b, [r2, \offb]
139 orr \a, \a, \b, lsl #8
140.endm
141
142.macro zsave8 a, off
143 strb \a, [r7, \off]
144.endm
145
146.macro zsave16 a, off
147 add \off, r7
148 strb \a, [\off, #1]
149 lsr \a, #8
150 strb \a, [\off]
151.endm
152
153.macro zload8 a, off
154 ldrb \a, [r7, \off]
155.endm
156
157.macro rload8 a, off
158 ldrb \a, [r0, \off]
159.endm
160
161.macro aload8 a, off
162 ldrb \a, [r7, \off]
163.endm
164
165.macro asave8 a, off
166 strb \a, [r7, \off]
167.endm
168
169.macro asave16 a, off
170 add \off, r7
171 strb \a, [\off, #1]
172 lsr \a, #8
173 strb \a, [\off]
174.endm
175
176.macro rsave8 a, off
177 strb \a, [r0, \off]
178.endm
179
180.macro rsave16 a, off
181 adds \off, r0
182 strb \a, [\off, #1]
183 lsr \a, #8
184 strb \a, [\off]
185.endm
186
187@
188@ OP table
189@
190
191op_table:
192 .word brk @ 0x00
193 .word inc @ 0x01
194 .word pop @ 0x02
195 .word nip @ 0x03
196 .word swp @ 0x04
197 .word rot @ 0x05
198 .word dup @ 0x06
199 .word ovr @ 0x07
200 .word equ @ 0x08
201 .word neq @ 0x09
202 .word gth @ 0x0a
203 .word lth @ 0x0b
204 .word jmp @ 0x0c
205 .word jcn @ 0x0d
206 .word jsr @ 0x0e
207 .word sth @ 0x0f
208 .word ldz @ 0x10
209 .word stz @ 0x11
210 .word ldr @ 0x12
211 .word str @ 0x13
212 .word lda @ 0x14
213 .word sta @ 0x15
214 .word dei @ 0x16
215 .word deo @ 0x17
216 .word add @ 0x18
217 .word sub @ 0x19
218 .word mul @ 0x1a
219 .word div @ 0x1b
220 .word and @ 0x1c
221 .word ora @ 0x1d
222 .word eor @ 0x1e
223 .word sft @ 0x1f
224 .word jci @ 0x20
225 .word inc2 @ 0x21
226 .word pop2 @ 0x22
227 .word nip2 @ 0x23
228 .word swp2 @ 0x24
229 .word rot2 @ 0x25
230 .word dup2 @ 0x26
231 .word ovr2 @ 0x27
232 .word equ2 @ 0x28
233 .word neq2 @ 0x29
234 .word gth2 @ 0x2a
235 .word lth2 @ 0x2b
236 .word jmp2 @ 0x2c
237 .word jcn2 @ 0x2d
238 .word jsr2 @ 0x2e
239 .word sth2 @ 0x2f
240 .word ldz2 @ 0x30
241 .word stz2 @ 0x31
242 .word ldr2 @ 0x32
243 .word str2 @ 0x33
244 .word lda2 @ 0x34
245 .word sta2 @ 0x35
246 .word dei2 @ 0x36
247 .word deo2 @ 0x37
248 .word add2 @ 0x38
249 .word sub2 @ 0x39
250 .word mul2 @ 0x3a
251 .word div2 @ 0x3b
252 .word and2 @ 0x3c
253 .word ora2 @ 0x3d
254 .word eor2 @ 0x3e
255 .word sft2 @ 0x3f
256 .word jmi @ 0x40
257 .word incr @ 0x41
258 .word popr @ 0x42
259 .word nipr @ 0x43
260 .word swpr @ 0x44
261 .word rotr @ 0x45
262 .word dupr @ 0x46
263 .word ovrr @ 0x47
264 .word equr @ 0x48
265 .word neqr @ 0x49
266 .word gthr @ 0x4a
267 .word lthr @ 0x4b
268 .word jmpr @ 0x4c
269 .word jcnr @ 0x4d
270 .word jsrr @ 0x4e
271 .word sthr @ 0x4f
272 .word ldzr @ 0x50
273 .word stzr @ 0x51
274 .word ldrr @ 0x52
275 .word strr @ 0x53
276 .word ldar @ 0x54
277 .word star @ 0x55
278 .word deir @ 0x56
279 .word deor @ 0x57
280 .word addr @ 0x58
281 .word subr @ 0x59
282 .word mulr @ 0x5a
283 .word divr @ 0x5b
284 .word andr @ 0x5c
285 .word orar @ 0x5d
286 .word eorr @ 0x5e
287 .word sftr @ 0x5f
288 .word jsi @ 0x60
289 .word inc2r @ 0x61
290 .word pop2r @ 0x62
291 .word nip2r @ 0x63
292 .word swp2r @ 0x64
293 .word rot2r @ 0x65
294 .word dup2r @ 0x66
295 .word ovr2r @ 0x67
296 .word equ2r @ 0x68
297 .word neq2r @ 0x69
298 .word gth2r @ 0x6a
299 .word lth2r @ 0x6b
300 .word jmp2r @ 0x6c
301 .word jcn2r @ 0x6d
302 .word jsr2r @ 0x6e
303 .word sth2r @ 0x6f
304 .word ldz2r @ 0x70
305 .word stz2r @ 0x71
306 .word ldr2r @ 0x72
307 .word str2r @ 0x73
308 .word lda2r @ 0x74
309 .word sta2r @ 0x75
310 .word dei2r @ 0x76
311 .word deo2r @ 0x77
312 .word add2r @ 0x78
313 .word sub2r @ 0x79
314 .word mul2r @ 0x7a
315 .word div2r @ 0x7b
316 .word and2r @ 0x7c
317 .word ora2r @ 0x7d
318 .word eor2r @ 0x7e
319 .word sft2r @ 0x7f
320 .word lit @ 0x80
321 .word inck @ 0x81
322 .word popk @ 0x82
323 .word nipk @ 0x83
324 .word swpk @ 0x84
325 .word rotk @ 0x85
326 .word dupk @ 0x86
327 .word ovrk @ 0x87
328 .word equk @ 0x88
329 .word neqk @ 0x89
330 .word gthk @ 0x8a
331 .word lthk @ 0x8b
332 .word jmpk @ 0x8c
333 .word jcnk @ 0x8d
334 .word jsrk @ 0x8e
335 .word sthk @ 0x8f
336 .word ldzk @ 0x90
337 .word stzk @ 0x91
338 .word ldrk @ 0x92
339 .word strk @ 0x93
340 .word ldak @ 0x94
341 .word stak @ 0x95
342 .word deik @ 0x96
343 .word deok @ 0x97
344 .word addk @ 0x98
345 .word subk @ 0x99
346 .word mulk @ 0x9a
347 .word divk @ 0x9b
348 .word andk @ 0x9c
349 .word orak @ 0x9d
350 .word eork @ 0x9e
351 .word sftk @ 0x9f
352 .word lit2 @ 0xa0
353 .word inc2k @ 0xa1
354 .word pop2k @ 0xa2
355 .word nip2k @ 0xa3
356 .word swp2k @ 0xa4
357 .word rot2k @ 0xa5
358 .word dup2k @ 0xa6
359 .word ovr2k @ 0xa7
360 .word equ2k @ 0xa8
361 .word neq2k @ 0xa9
362 .word gth2k @ 0xaa
363 .word lth2k @ 0xab
364 .word jmp2k @ 0xac
365 .word jcn2k @ 0xad
366 .word jsr2k @ 0xae
367 .word sth2k @ 0xaf
368 .word ldz2k @ 0xb0
369 .word stz2k @ 0xb1
370 .word ldr2k @ 0xb2
371 .word str2k @ 0xb3
372 .word lda2k @ 0xb4
373 .word sta2k @ 0xb5
374 .word dei2k @ 0xb6
375 .word deo2k @ 0xb7
376 .word add2k @ 0xb8
377 .word sub2k @ 0xb9
378 .word mul2k @ 0xba
379 .word div2k @ 0xbb
380 .word and2k @ 0xbc
381 .word ora2k @ 0xbd
382 .word eor2k @ 0xbe
383 .word sft2k @ 0xbf
384 .word litr @ 0xc0
385 .word inckr @ 0xc1
386 .word popkr @ 0xc2
387 .word nipkr @ 0xc3
388 .word swpkr @ 0xc4
389 .word rotkr @ 0xc5
390 .word dupkr @ 0xc6
391 .word ovrkr @ 0xc7
392 .word equkr @ 0xc8
393 .word neqkr @ 0xc9
394 .word gthkr @ 0xca
395 .word lthkr @ 0xcb
396 .word jmpkr @ 0xcc
397 .word jcnkr @ 0xcd
398 .word jsrkr @ 0xce
399 .word sthkr @ 0xcf
400 .word ldzkr @ 0xd0
401 .word stzkr @ 0xd1
402 .word ldrkr @ 0xd2
403 .word strkr @ 0xd3
404 .word ldakr @ 0xd4
405 .word stakr @ 0xd5
406 .word deikr @ 0xd6
407 .word deokr @ 0xd7
408 .word addkr @ 0xd8
409 .word subkr @ 0xd9
410 .word mulkr @ 0xda
411 .word divkr @ 0xdb
412 .word andkr @ 0xdc
413 .word orakr @ 0xdd
414 .word eorkr @ 0xde
415 .word sftkr @ 0xdf
416 .word lit2r @ 0xe0
417 .word inc2kr @ 0xe1
418 .word pop2kr @ 0xe2
419 .word nip2kr @ 0xe3
420 .word swp2kr @ 0xe4
421 .word rot2kr @ 0xe5
422 .word dup2kr @ 0xe6
423 .word ovr2kr @ 0xe7
424 .word equ2kr @ 0xe8
425 .word neq2kr @ 0xe9
426 .word gth2kr @ 0xea
427 .word lth2kr @ 0xeb
428 .word jmp2kr @ 0xec
429 .word jcn2kr @ 0xed
430 .word jsr2kr @ 0xee
431 .word sth2kr @ 0xef
432 .word ldz2kr @ 0xf0
433 .word stz2kr @ 0xf1
434 .word ldr2kr @ 0xf2
435 .word str2kr @ 0xf3
436 .word lda2kr @ 0xf4
437 .word sta2kr @ 0xf5
438 .word dei2kr @ 0xf6
439 .word deo2kr @ 0xf7
440 .word add2kr @ 0xf8
441 .word sub2kr @ 0xf9
442 .word mul2kr @ 0xfa
443 .word div2kr @ 0xfb
444 .word and2kr @ 0xfc
445 .word ora2kr @ 0xfd
446 .word eor2kr @ 0xfe
447 .word sft2kr @ 0xff
448
449@
450@ OP implementations.
451@
452
453dei:
454 wpop8 r3
455 mov r4, r3, lsr #4 @ idx
456 and r3, #0x0f @ port
457 ldr r6, =dei_map
458 ldr r6, [r6, r4, lsl #2]
459 stmfd sp!, {r0, r7, lr}
460 ldr r0, =wst_ptr
461 str r1, [r0]
462 ldr r0, =rst_ptr
463 str r2, [r0]
464 ldr r0, =device_data
465 lsl r4, #4
466 add r0, r4
467 mov r1, r3
468 mov lr, pc
469 bx r6
470 ldr r1, wst_ptr
471 ldr r2, rst_ptr
472 wpush8 r0
473 ldmfd sp!, {r0, r7, lr}
474 b uxn_decode
475
476dei2:
477 wpop8 r3
478 mov r4, r3, lsr #4 @ idx
479 and r3, #0x0f @ port
480 ldr r6, =dei_map
481 ldr r6, [r6, r4, lsl #2]
482 stmfd sp!, {r0, r7, lr}
483 ldr r0, =wst_ptr
484 str r1, [r0]
485 ldr r0, =rst_ptr
486 str r2, [r0]
487 ldr r0, =device_data
488 lsl r4, #4
489 add r0, r4
490 mov r1, r3
491 mov lr, pc
492 bx r6
493 ldr r1, wst_ptr
494 ldr r2, rst_ptr
495 wpush16 r0
496 ldmfd sp!, {r0, r7, lr}
497 b uxn_decode
498
499deo:
500 @ Get args (idx/port/value).
501 wpop8 r3
502 mov r4, r3, lsr #4 @ idx
503 and r3, #0x0f @ port
504 wpop8 r5 @ value
505
506 @ Find current devide.
507 ldr r6, =deo_map
508 ldr r6, [r6, r4, lsl #2]
509
510 @ Save registers that can be affected.
511 stmfd sp!, {r0, r7, lr}
512 ldr r0, =wst_ptr
513 str r1, [r0]
514 ldr r0, =rst_ptr
515 str r2, [r0]
516
517 @ Call the deo function.
518 ldr r0, =device_data
519 lsl r4, #4
520 add r0, r4
521 strb r5, [r0, r3]
522 mov r1, r3
523 mov lr, pc
524 bx r6
525
526 @ Restore saved variables.
527 ldmfd sp!, {r0, r7, lr}
528 ldr r1, wst_ptr
529 ldr r2, rst_ptr
530 b uxn_decode
531
532deo2:
533 @ Get args (idx/port/value).
534 wpop8 r3
535 mov r4, r3, lsr #4 @ idx
536 and r3, #0x0f @ port
537 wpop16 r5, r6 @ value
538
539 @ Find current devide.
540 ldr r6, =deo_map
541 ldr r6, [r6, r4, lsl #2]
542
543 @ Save registers that can be affected.
544 stmfd sp!, {r0, r7, lr}
545 ldr r0, =wst_ptr
546 str r1, [r0]
547 ldr r0, =rst_ptr
548 str r2, [r0]
549
550 @ Call the deo function.
551 ldr r0, =device_data
552 lsl r4, #4
553 add r0, r4
554 mov r1, r3
555 add r3, r0
556 strb r5, [r3, #1]
557 lsr r5, #8
558 strb r5, [r3]
559 mov lr, pc
560 bx r6
561
562 @ Restore saved variables.
563 ldmfd sp!, {r0, r7, lr}
564 ldr r1, wst_ptr
565 ldr r2, rst_ptr
566 b uxn_decode
567
568deir:
569 rpop8 r3
570 mov r4, r3, lsr #4 @ idx
571 and r3, #0x0f @ port
572 ldr r6, =dei_map
573 ldr r6, [r6, r4, lsl #2]
574 stmfd sp!, {r0, r7, lr}
575 ldr r0, =wst_ptr
576 str r1, [r0]
577 ldr r0, =rst_ptr
578 str r2, [r0]
579 ldr r0, =device_data
580 lsl r4, #4
581 add r0, r4
582 mov r1, r3
583 mov lr, pc
584 bx r6
585 ldr r1, wst_ptr
586 ldr r2, rst_ptr
587 rpush8 r0
588 ldmfd sp!, {r0, r7, lr}
589 b uxn_decode
590
591dei2r:
592 rpop8 r3
593 mov r4, r3, lsr #4 @ idx
594 and r3, #0x0f @ port
595 ldr r6, =dei_map
596 ldr r6, [r6, r4, lsl #2]
597 stmfd sp!, {r0, r7, lr}
598 ldr r0, =wst_ptr
599 str r1, [r0]
600 ldr r0, =rst_ptr
601 str r2, [r0]
602 ldr r0, =device_data
603 lsl r4, #4
604 add r0, r4
605 mov r1, r3
606 mov lr, pc
607 bx r6
608 ldr r1, wst_ptr
609 ldr r2, rst_ptr
610 rpush16 r0
611 ldmfd sp!, {r0, r7, lr}
612 b uxn_decode
613
614deor:
615 @ Get args (idx/port/value).
616 rpop8 r3
617 mov r4, r3, lsr #4 @ idx
618 and r3, #0x0f @ port
619 rpop8 r5 @ value
620
621 @ Find current devide.
622 ldr r6, =deo_map
623 ldr r6, [r6, r4, lsl #2]
624
625 @ Save registers that can be affected.
626 stmfd sp!, {r0, r7, lr}
627 ldr r0, =wst_ptr
628 str r1, [r0]
629 ldr r0, =rst_ptr
630 str r2, [r0]
631
632 @ Call the deo function.
633 ldr r0, =device_data
634 lsl r4, #4
635 add r0, r4
636 strb r5, [r0, r3]
637 mov r1, r3
638 mov lr, pc
639 bx r6
640
641 @ Restore saved variables.
642 ldmfd sp!, {r0, r7, lr}
643 ldr r1, wst_ptr
644 ldr r2, rst_ptr
645 b uxn_decode
646
647deo2r:
648 @ Get args (idx/port/value).
649 rpop8 r3
650 mov r4, r3, lsr #4 @ idx
651 and r3, #0x0f @ port
652 rpop16 r5, r6 @ value
653
654 @ Find current devide.
655 ldr r6, =deo_map
656 ldr r6, [r6, r4, lsl #2]
657
658 @ Save registers that can be affected.
659 stmfd sp!, {r0, r7, lr}
660 ldr r0, =wst_ptr
661 str r1, [r0]
662 ldr r0, =rst_ptr
663 str r2, [r0]
664
665 @ Call the deo function.
666 ldr r0, =device_data
667 lsl r4, #4
668 add r0, r4
669 mov r1, r3
670 add r3, r0
671 strb r5, [r3, #1]
672 lsr r5, #8
673 strb r5, [r3]
674 mov lr, pc
675 bx r6
676
677 @ Restore saved variables.
678 ldmfd sp!, {r0, r7, lr}
679 ldr r1, wst_ptr
680 ldr r2, rst_ptr
681 b uxn_decode
682
683deik:
684 wpeek8 r3, #-1
685 mov r4, r3, lsr #4 @ idx
686 and r3, #0x0f @ port
687 ldr r6, =dei_map
688 ldr r6, [r6, r4, lsl #2]
689 stmfd sp!, {r0, r7, lr}
690 ldr r0, =wst_ptr
691 str r1, [r0]
692 ldr r0, =rst_ptr
693 str r2, [r0]
694 ldr r0, =device_data
695 lsl r4, #4
696 add r0, r4
697 mov r1, r3
698 mov lr, pc
699 bx r6
700 ldr r1, wst_ptr
701 ldr r2, rst_ptr
702 wpush8 r0
703 ldmfd sp!, {r0, r7, lr}
704 b uxn_decode
705
706dei2k:
707 wpeek8 r3, #-1
708 mov r4, r3, lsr #4 @ idx
709 and r3, #0x0f @ port
710 ldr r6, =dei_map
711 ldr r6, [r6, r4, lsl #2]
712 stmfd sp!, {r0, r7, lr}
713 ldr r0, =wst_ptr
714 str r1, [r0]
715 ldr r0, =rst_ptr
716 str r2, [r0]
717 ldr r0, =device_data
718 lsl r4, #4
719 add r0, r4
720 mov r1, r3
721 mov lr, pc
722 bx r6
723 ldr r1, wst_ptr
724 ldr r2, rst_ptr
725 wpush16 r0
726 ldmfd sp!, {r0, r7, lr}
727 b uxn_decode
728
729deok:
730 wpeek8 r3, #-1
731 mov r4, r3, lsr #4 @ idx
732 and r3, #0x0f @ port
733 wpeek8 r5, #-2 @ value
734 ldr r6, =deo_map
735 ldr r6, [r6, r4, lsl #2]
736 stmfd sp!, {r0, r7, lr}
737 ldr r0, =wst_ptr
738 str r1, [r0]
739 ldr r0, =rst_ptr
740 str r2, [r0]
741 ldr r0, =device_data
742 lsl r4, #4
743 add r0, r4
744 strb r5, [r0, r3]
745 mov r1, r3
746 mov lr, pc
747 bx r6
748 ldmfd sp!, {r0, r7, lr}
749 ldr r1, wst_ptr
750 ldr r2, rst_ptr
751 b uxn_decode
752
753deo2k:
754 wpeek8 r3, #-1
755 mov r4, r3, lsr #4 @ idx
756 and r3, #0x0f @ port
757 wpeek16 r5, r6, #-2, #-3 @ value
758 ldr r6, =deo_map
759 ldr r6, [r6, r4, lsl #2]
760 stmfd sp!, {r0, r7, lr}
761 ldr r0, =wst_ptr
762 str r1, [r0]
763 ldr r0, =rst_ptr
764 str r2, [r0]
765 ldr r0, =device_data
766 lsl r4, #4
767 add r0, r4
768 mov r1, r3
769 add r3, r0
770 strb r5, [r3, #1]
771 lsr r5, #8
772 strb r5, [r3]
773 mov lr, pc
774 bx r6
775 ldmfd sp!, {r0, r7, lr}
776 ldr r1, wst_ptr
777 ldr r2, rst_ptr
778 b uxn_decode
779
780deikr:
781 rpeek8 r3, #-1
782 mov r4, r3, lsr #4 @ idx
783 and r3, #0x0f @ port
784 ldr r6, =dei_map
785 ldr r6, [r6, r4, lsl #2]
786 stmfd sp!, {r0, r7, lr}
787 ldr r0, =wst_ptr
788 str r1, [r0]
789 ldr r0, =rst_ptr
790 str r2, [r0]
791 ldr r0, =device_data
792 lsl r4, #4
793 add r0, r4
794 mov r1, r3
795 mov lr, pc
796 bx r6
797 ldr r1, wst_ptr
798 ldr r2, rst_ptr
799 rpush8 r0
800 ldmfd sp!, {r0, r7, lr}
801 b uxn_decode
802
803dei2kr:
804 rpeek8 r3, #-1
805 mov r4, r3, lsr #4 @ idx
806 and r3, #0x0f @ port
807 ldr r6, =dei_map
808 ldr r6, [r6, r4, lsl #2]
809 stmfd sp!, {r0, r7, lr}
810 ldr r0, =wst_ptr
811 str r1, [r0]
812 ldr r0, =rst_ptr
813 str r2, [r0]
814 ldr r0, =device_data
815 lsl r4, #4
816 add r0, r4
817 mov r1, r3
818 mov lr, pc
819 bx r6
820 ldr r1, wst_ptr
821 ldr r2, rst_ptr
822 rpush16 r0
823 ldmfd sp!, {r0, r7, lr}
824 b uxn_decode
825
826deokr:
827 rpeek8 r3, #-1
828 mov r4, r3, lsr #4 @ idx
829 and r3, #0x0f @ port
830 rpeek8 r5, #-2 @ value
831 ldr r6, =deo_map
832 ldr r6, [r6, r4, lsl #2]
833 stmfd sp!, {r0, r7, lr}
834 ldr r0, =wst_ptr
835 str r1, [r0]
836 ldr r0, =rst_ptr
837 str r2, [r0]
838 ldr r0, =device_data
839 lsl r4, #4
840 add r0, r4
841 strb r5, [r0, r3]
842 mov r1, r3
843 mov lr, pc
844 bx r6
845 ldmfd sp!, {r0, r7, lr}
846 ldr r1, wst_ptr
847 ldr r2, rst_ptr
848 b uxn_decode
849
850deo2kr:
851 rpeek8 r3, #-1
852 mov r4, r3, lsr #4 @ idx
853 and r3, #0x0f @ port
854 rpeek16 r5, r6, #-2, #-3 @ value
855 ldr r6, =deo_map
856 ldr r6, [r6, r4, lsl #2]
857 stmfd sp!, {r0, r7, lr}
858 ldr r0, =wst_ptr
859 str r1, [r0]
860 ldr r0, =rst_ptr
861 str r2, [r0]
862 ldr r0, =device_data
863 lsl r4, #4
864 add r0, r4
865 mov r1, r3
866 add r3, r0
867 strb r5, [r3, #1]
868 lsr r5, #8
869 strb r5, [r3]
870 mov lr, pc
871 bx r6
872 ldmfd sp!, {r0, r7, lr}
873 ldr r1, wst_ptr
874 ldr r2, rst_ptr
875 b uxn_decode
876
877.ltorg
878.align 2
879
880.global device_data
881device_data:
882 .global device_0
883 device_0: .space 16
884 .global device_1
885 device_1: .space 16
886 .global device_2
887 device_2: .space 16
888 .global device_3
889 device_3: .space 16
890 .global device_4
891 device_4: .space 16
892 .global device_5
893 device_5: .space 16
894 .global device_6
895 device_6: .space 16
896 .global device_7
897 device_7: .space 16
898 .global device_8
899 device_8: .space 16
900 .global device_9
901 device_9: .space 16
902 .global device_a
903 device_a: .space 16
904 .global device_b
905 device_b: .space 16
906 .global device_c
907 device_c: .space 16
908 .global device_d
909 device_d: .space 16
910 .global device_e
911 device_e: .space 16
912 .global device_f
913 device_f: .space 16
914
915.global dei_map
916dei_map:
917 .word uxn_ret
918 .word uxn_ret
919 .word uxn_ret
920 .word uxn_ret
921 .word uxn_ret
922 .word uxn_ret
923 .word uxn_ret
924 .word uxn_ret
925 .word uxn_ret
926 .word uxn_ret
927 .word uxn_ret
928 .word uxn_ret
929 .word uxn_ret
930 .word uxn_ret
931 .word uxn_ret
932 .word uxn_ret
933
934.global deo_map
935deo_map:
936 .word uxn_ret
937 .word uxn_ret
938 .word uxn_ret
939 .word uxn_ret
940 .word uxn_ret
941 .word uxn_ret
942 .word uxn_ret
943 .word uxn_ret
944 .word uxn_ret
945 .word uxn_ret
946 .word uxn_ret
947 .word uxn_ret
948 .word uxn_ret
949 .word uxn_ret
950 .word uxn_ret
951 .word uxn_ret
952
953brk:
954 b uxn_ret
955
956jci:
957 ldrb r5, [r0], #1
958 ldrb r3, [r0], #1
959 orr r3, r3, r5, lsl #8
960 lsl r3, r3, #16
961 asr r3, r3, #16
962 wpop8 r4
963 cmp r4, #0
964 addne r0, r3
965 b uxn_decode
966
967jmi:
968 ldrb r5, [r0], #1
969 ldrb r3, [r0], #1
970 orr r3, r3, r5, lsl #8
971 lsl r3, r3, #16
972 asr r3, r3, #16
973 add r0, r3
974 b uxn_decode
975
976jsi:
977 ldrb r5, [r0], #1
978 ldrb r3, [r0], #1
979 orr r3, r3, r5, lsl #8
980 lsl r3, r3, #16
981 asr r3, r3, #16
982 mov r4, r0
983 rpush16 r4
984 add r0, r3
985 b uxn_decode
986
987lit:
988 next r3
989 wpush8 r3
990 b uxn_decode
991
992lit2:
993 next r3
994 next r4
995 wpush8 r3
996 wpush8 r4
997 b uxn_decode
998
999litr:
1000 next r3
1001 rpush8 r3
1002 b uxn_decode
1003
1004lit2r:
1005 next r3
1006 next r4
1007 rpush8 r3
1008 rpush8 r4
1009 b uxn_decode
1010
1011.ltorg
1012.align 2
1013
1014inc:
1015 wpop8 r3
1016 add r3, #1
1017 wpush8 r3
1018 b uxn_decode
1019
1020inc2:
1021 wpop16 r3, r5
1022 add r3, r3, #1
1023 wpush16 r3
1024 b uxn_decode
1025
1026pop:
1027 sub r1, #1
1028 b uxn_decode
1029
1030pop2:
1031 sub r1, #2
1032 b uxn_decode
1033
1034nip:
1035 wpop8 r3
1036 strb r3, [r1, #-1]
1037 b uxn_decode
1038
1039nip2:
1040 wpop16 r3, r5
1041 strb r3, [r1, #-1]
1042 lsr r3, #8
1043 strb r3, [r1, #-2]
1044 b uxn_decode
1045
1046swp:
1047 wpop8 r3
1048 wpop8 r4
1049 wpush8 r3
1050 wpush8 r4
1051 b uxn_decode
1052
1053swp2:
1054 wpop16 r3, r5
1055 wpop16 r4, r5
1056 wpush16 r3
1057 wpush16 r4
1058 b uxn_decode
1059
1060rot:
1061 wpop8 r5
1062 wpop8 r4
1063 wpop8 r3
1064 wpush8 r4
1065 wpush8 r5
1066 wpush8 r3
1067 b uxn_decode
1068
1069rot2:
1070 wpop16 r5, r6
1071 wpop16 r4, r6
1072 wpop16 r3, r6
1073 wpush16 r4
1074 wpush16 r5
1075 wpush16 r3
1076 b uxn_decode
1077
1078dup:
1079 wpeek8 r3, #-1
1080 wpush8 r3
1081 b uxn_decode
1082
1083dup2:
1084 wpeek8 r3, #-2
1085 wpeek8 r4, #-1
1086 wpush8 r3
1087 wpush8 r4
1088 b uxn_decode
1089
1090ovr:
1091 wpeek8 r3, #-2
1092 wpush8 r3
1093 b uxn_decode
1094
1095ovr2:
1096 wpeek8 r3, #-4
1097 wpeek8 r4, #-3
1098 wpush8 r3
1099 wpush8 r4
1100 b uxn_decode
1101
1102equ:
1103 wpop8 r3
1104 wpop8 r4
1105 sub r3, r4, r3
1106 rsbs r4, r3, #0
1107 adc r4, r4, r3
1108 wpush8 r4
1109 b uxn_decode
1110
1111equ2:
1112 wpop16 r3, r5
1113 wpop16 r4, r5
1114 sub r3, r4, r3
1115 rsbs r4, r3, #0
1116 adc r4, r4, r3
1117 wpush8 r4
1118 b uxn_decode
1119
1120neq:
1121 wpop8 r3
1122 wpop8 r4
1123 subs r3, r4, r3
1124 movne r3, #1
1125 wpush8 r3
1126 b uxn_decode
1127
1128neq2:
1129 wpop16 r3, r5
1130 wpop16 r4, r5
1131 subs r3, r4, r3
1132 movne r3, #1
1133 wpush8 r3
1134 b uxn_decode
1135
1136gth:
1137 wpop8 r3
1138 wpop8 r4
1139 cmp r4, r3
1140 movls r3, #0
1141 movhi r3, #1
1142 wpush8 r3
1143 b uxn_decode
1144
1145gth2:
1146 wpop16 r3, r5
1147 wpop16 r4, r5
1148 cmp r4, r3
1149 movls r3, #0
1150 movhi r3, #1
1151 wpush8 r3
1152 b uxn_decode
1153
1154lth:
1155 wpop8 r3
1156 wpop8 r4
1157 cmp r4, r3
1158 movcs r3, #0
1159 movcc r3, #1
1160 wpush8 r3
1161 b uxn_decode
1162
1163lth2:
1164 wpop16 r3, r5
1165 wpop16 r4, r5
1166 cmp r4, r3
1167 movcs r3, #0
1168 movcc r3, #1
1169 wpush8 r3
1170 b uxn_decode
1171
1172jmp:
1173 wpop8s r3
1174 add r0, r3
1175 b uxn_decode
1176
1177jmp2:
1178 wpop16 r3, r5
1179 mov r0, r7
1180 add r0, r0, r3
1181 b uxn_decode
1182
1183jcn:
1184 wpop8s r3
1185 wpop8 r4
1186 cmp r4, #0
1187 addne r0, r3
1188 b uxn_decode
1189
1190jcn2:
1191 wpop16 r3, r5
1192 wpop8 r4
1193 cmp r4, #0
1194 movne r0, r7
1195 cmp r4, #0
1196 addne r0, r0, r3
1197 b uxn_decode
1198
1199jsr:
1200 mov r3, r0
1201 sub r3, r3, r7
1202 wpop8s r4
1203 rpush16 r3
1204 add r0, r4
1205 b uxn_decode
1206
1207jsr2:
1208 mov r3, r0
1209 sub r3, r3, r7
1210 wpop16 r4, r5
1211 rpush16 r3
1212 mov r0, r7
1213 add r0, r0, r4
1214 b uxn_decode
1215
1216sth:
1217 wpop8 r3
1218 rpush8 r3
1219 b uxn_decode
1220
1221sth2:
1222 wpop16 r3, r5
1223 rpush16 r3
1224 b uxn_decode
1225
1226ldz:
1227 wpop8 r3
1228 zload8 r4, r3
1229 wpush8 r4
1230 b uxn_decode
1231
1232ldz2:
1233 wpop8 r3
1234 zload8 r4, r3
1235 wpush8 r4
1236 add r3, #1
1237 zload8 r4, r3
1238 wpush8 r4
1239 b uxn_decode
1240
1241stz:
1242 wpop8 r3
1243 wpop8 r4
1244 zsave8 r4, r3
1245 b uxn_decode
1246
1247stz2:
1248 wpop8 r3
1249 wpop16 r4, r5
1250 zsave16 r4, r3
1251 b uxn_decode
1252
1253ldr:
1254 wpop8s r4
1255 rload8 r3, r4
1256 wpush8 r3
1257 b uxn_decode
1258
1259ldr2:
1260 wpop8s r4
1261 rload8 r3, r4
1262 wpush8 r3
1263 add r4, #1
1264 rload8 r3, r4
1265 wpush8 r3
1266 b uxn_decode
1267
1268str:
1269 wpop8s r4
1270 wpop8 r3
1271 rsave8 r3, r4
1272 b uxn_decode
1273
1274str2:
1275 wpop8s r4
1276 wpop16 r3, r5
1277 rsave16 r3, r4
1278 b uxn_decode
1279
1280lda:
1281 wpop16 r4, r5
1282 aload8 r3, r4
1283 wpush8 r3
1284 b uxn_decode
1285
1286lda2:
1287 wpop16 r4, r5
1288 aload8 r3, r4
1289 wpush8 r3
1290 add r4, #1
1291 aload8 r3, r4
1292 wpush8 r3
1293 b uxn_decode
1294
1295sta:
1296 wpop16 r4, r5
1297 wpop8 r3
1298 asave8 r3, r4
1299 b uxn_decode
1300
1301sta2:
1302 wpop16 r4, r5
1303 wpop16 r3, r5
1304 asave16 r3, r4
1305 b uxn_decode
1306
1307add:
1308 wpop8 r3
1309 wpop8 r4
1310 add r3, r3, r4
1311 wpush8 r3
1312 b uxn_decode
1313
1314add2:
1315 wpop16 r3, r5
1316 wpop16 r4, r5
1317 add r3, r3, r4
1318 wpush16 r3
1319 b uxn_decode
1320
1321sub:
1322 wpop8 r3
1323 wpop8 r4
1324 sub r4, r4, r3
1325 wpush8 r4
1326 b uxn_decode
1327
1328sub2:
1329 wpop16 r3, r5
1330 wpop16 r4, r5
1331 sub r3, r4, r3
1332 wpush16 r3
1333 b uxn_decode
1334
1335mul:
1336 wpop8 r3
1337 wpop8 r4
1338 mul r4, r3, r4
1339 wpush8 r4
1340 b uxn_decode
1341
1342mul2:
1343 wpop16 r3, r5
1344 wpop16 r4, r5
1345 mul r3, r4, r3
1346 wpush16 r3
1347 b uxn_decode
1348
1349div:
1350 wpop8 r3
1351 wpop8 r4
1352 push {r0, r1, r2, r7, lr}
1353 mov r1, r3
1354 mov r0, r4
1355 bl __aeabi_uidiv
1356 mov r3, r0
1357 pop {r0, r1, r2, r7, lr}
1358 wpush8 r3
1359 b uxn_decode
1360
1361div2:
1362 wpop16 r3, r5
1363 wpop16 r4, r5
1364 push {r0, r1, r2, r7, lr}
1365 mov r1, r3
1366 mov r0, r4
1367 bl __aeabi_uidiv
1368 mov r3, r0
1369 pop {r0, r1, r2, r7, lr}
1370 wpush16 r3
1371 b uxn_decode
1372
1373and:
1374 wpop8 r3
1375 wpop8 r4
1376 and r3, r3, r4
1377 wpush8 r3
1378 b uxn_decode
1379
1380and2:
1381 wpop16 r3, r5
1382 wpop16 r4, r5
1383 and r3, r3, r4
1384 wpush16 r3
1385 b uxn_decode
1386
1387ora:
1388 wpop8 r3
1389 wpop8 r4
1390 orr r3, r3, r4
1391 wpush8 r3
1392 b uxn_decode
1393
1394ora2:
1395 wpop16 r3, r5
1396 wpop16 r4, r5
1397 orr r3, r3, r4
1398 wpush16 r3
1399 b uxn_decode
1400
1401eor:
1402 wpop8 r3
1403 wpop8 r4
1404 eor r3, r3, r4
1405 wpush8 r3
1406 b uxn_decode
1407
1408eor2:
1409 wpop16 r3, r5
1410 wpop16 r4, r5
1411 eor r3, r3, r4
1412 wpush16 r3
1413 b uxn_decode
1414
1415sft:
1416 wpop8 r4
1417 wpop8 r3
1418 lsr r5, r4, #4
1419 and r4, #0x0f
1420 lsr r3, r3, r4
1421 lsl r3, r3, r5
1422 wpush8 r3
1423 b uxn_decode
1424
1425sft2:
1426 wpop8 r4
1427 wpop16 r3, r5
1428 lsr r5, r4, #4
1429 and r4, #0x0f
1430 lsr r3, r3, r4
1431 lsl r3, r3, r5
1432 wpush16 r3
1433 b uxn_decode
1434
1435.ltorg
1436.align 2
1437
1438incr:
1439 rpop8 r3
1440 add r3, #1
1441 rpush8 r3
1442 b uxn_decode
1443
1444inc2r:
1445 rpop16 r3, r5
1446 add r3, r3, #1
1447 rpush16 r3
1448 b uxn_decode
1449
1450popr:
1451 sub r2, #1
1452 b uxn_decode
1453
1454pop2r:
1455 sub r2, #2
1456 b uxn_decode
1457
1458nipr:
1459 rpop8 r3
1460 strb r3, [r2, #-1]
1461 b uxn_decode
1462
1463nip2r:
1464 rpop16 r3, r5
1465 strb r3, [r2, #-1]
1466 lsr r3, #8
1467 strb r3, [r2, #-2]
1468 b uxn_decode
1469
1470swpr:
1471 rpop8 r3
1472 rpop8 r4
1473 rpush8 r3
1474 rpush8 r4
1475 b uxn_decode
1476
1477swp2r:
1478 rpop16 r3, r5
1479 rpop16 r4, r5
1480 rpush16 r3
1481 rpush16 r4
1482 b uxn_decode
1483
1484rotr:
1485 rpop8 r5
1486 rpop8 r4
1487 rpop8 r3
1488 rpush8 r4
1489 rpush8 r5
1490 rpush8 r3
1491 b uxn_decode
1492
1493rot2r:
1494 rpop16 r5, r6
1495 rpop16 r4, r6
1496 rpop16 r3, r6
1497 rpush16 r4
1498 rpush16 r5
1499 rpush16 r3
1500 b uxn_decode
1501
1502dupr:
1503 rpeek8 r3, #-1
1504 rpush8 r3
1505 b uxn_decode
1506
1507dup2r:
1508 rpeek8 r3, #-2
1509 rpeek8 r4, #-1
1510 rpush8 r3
1511 rpush8 r4
1512 b uxn_decode
1513
1514ovrr:
1515 rpeek8 r3, #-2
1516 rpush8 r3
1517 b uxn_decode
1518
1519ovr2r:
1520 rpeek8 r3, #-4
1521 rpeek8 r4, #-3
1522 rpush8 r3
1523 rpush8 r4
1524 b uxn_decode
1525
1526equr:
1527 rpop8 r3
1528 rpop8 r4
1529 sub r3, r4, r3
1530 rsbs r4, r3, #0
1531 adc r4, r4, r3
1532 rpush8 r4
1533 b uxn_decode
1534
1535equ2r:
1536 rpop16 r3, r5
1537 rpop16 r4, r5
1538 sub r3, r4, r3
1539 rsbs r4, r3, #0
1540 adc r4, r4, r3
1541 rpush8 r4
1542 b uxn_decode
1543
1544neqr:
1545 rpop8 r3
1546 rpop8 r4
1547 subs r3, r4, r3
1548 movne r3, #1
1549 rpush8 r3
1550 b uxn_decode
1551
1552neq2r:
1553 rpop16 r3, r5
1554 rpop16 r4, r5
1555 subs r3, r4, r3
1556 movne r3, #1
1557 rpush8 r3
1558 b uxn_decode
1559
1560gthr:
1561 rpop8 r3
1562 rpop8 r4
1563 cmp r4, r3
1564 movls r3, #0
1565 movhi r3, #1
1566 rpush8 r3
1567 b uxn_decode
1568
1569gth2r:
1570 rpop16 r3, r5
1571 rpop16 r4, r5
1572 cmp r4, r3
1573 movls r3, #0
1574 movhi r3, #1
1575 rpush8 r3
1576 b uxn_decode
1577
1578lthr:
1579 rpop8 r3
1580 rpop8 r4
1581 cmp r4, r3
1582 movcs r3, #0
1583 movcc r3, #1
1584 rpush8 r3
1585 b uxn_decode
1586
1587lth2r:
1588 rpop16 r3, r5
1589 rpop16 r4, r5
1590 cmp r4, r3
1591 movcs r3, #0
1592 movcc r3, #1
1593 rpush8 r3
1594 b uxn_decode
1595
1596jmpr:
1597 rpop8s r3
1598 add r0, r3
1599 b uxn_decode
1600
1601jmp2r:
1602 rpop16 r3, r5
1603 mov r0, r7
1604 add r0, r0, r3
1605 b uxn_decode
1606
1607jcnr:
1608 rpop8s r3
1609 rpop8 r4
1610 cmp r4, #0
1611 addne r0, r3
1612 b uxn_decode
1613
1614jcn2r:
1615 rpop16 r3, r5
1616 rpop8 r4
1617 cmp r4, #0
1618 movne r0, r7
1619 cmp r4, #0
1620 addne r0, r0, r3
1621 b uxn_decode
1622
1623jsrr:
1624 mov r3, r0
1625 sub r3, r3, r7
1626 rpop8s r4
1627 rpush16 r3
1628 add r0, r4
1629 b uxn_decode
1630
1631jsr2r:
1632 mov r3, r0
1633 sub r3, r3, r7
1634 rpop16 r4, r5
1635 rpush16 r3
1636 mov r0, r7
1637 add r0, r0, r4
1638 b uxn_decode
1639
1640sthr:
1641 rpop8 r3
1642 wpush8 r3
1643 b uxn_decode
1644
1645sth2r:
1646 rpop16 r3, r5
1647 wpush16 r3
1648 b uxn_decode
1649
1650ldzr:
1651 rpop8 r3
1652 zload8 r4, r3
1653 rpush8 r4
1654 b uxn_decode
1655
1656ldz2r:
1657 rpop8 r3
1658 zload8 r4, r3
1659 rpush8 r4
1660 add r3, #1
1661 zload8 r4, r3
1662 rpush8 r4
1663 b uxn_decode
1664
1665stzr:
1666 rpop8 r3
1667 rpop8 r4
1668 zsave8 r4, r3
1669 b uxn_decode
1670
1671stz2r:
1672 rpop8 r3
1673 rpop16 r4, r5
1674 zsave16 r4, r3
1675 b uxn_decode
1676
1677ldrr:
1678 rpop8s r4
1679 rload8 r3, r4
1680 rpush8 r3
1681 b uxn_decode
1682
1683ldr2r:
1684 rpop8s r4
1685 rload8 r3, r4
1686 rpush8 r3
1687 add r4, #1
1688 rload8 r3, r4
1689 rpush8 r3
1690 b uxn_decode
1691
1692strr:
1693 rpop8s r4
1694 rpop8 r3
1695 rsave8 r3, r4
1696 b uxn_decode
1697
1698str2r:
1699 rpop8s r4
1700 rpop16 r3, r5
1701 rsave16 r3, r4
1702 b uxn_decode
1703
1704ldar:
1705 rpop16 r4, r5
1706 aload8 r3, r4
1707 rpush8 r3
1708 b uxn_decode
1709
1710lda2r:
1711 rpop16 r4, r5
1712 aload8 r3, r4
1713 rpush8 r3
1714 add r4, #1
1715 aload8 r3, r4
1716 rpush8 r3
1717 b uxn_decode
1718
1719star:
1720 rpop16 r4, r5
1721 rpop8 r3
1722 asave8 r3, r4
1723 b uxn_decode
1724
1725sta2r:
1726 rpop16 r4, r5
1727 rpop16 r3, r5
1728 asave16 r3, r4
1729 b uxn_decode
1730
1731addr:
1732 rpop8 r3
1733 rpop8 r4
1734 add r3, r3, r4
1735 rpush8 r3
1736 b uxn_decode
1737
1738add2r:
1739 rpop16 r3, r5
1740 rpop16 r4, r5
1741 add r3, r3, r4
1742 rpush16 r3
1743 b uxn_decode
1744
1745subr:
1746 rpop8 r3
1747 rpop8 r4
1748 sub r4, r4, r3
1749 rpush8 r4
1750 b uxn_decode
1751
1752sub2r:
1753 rpop16 r3, r5
1754 rpop16 r4, r5
1755 sub r3, r4, r3
1756 rpush16 r3
1757 b uxn_decode
1758
1759mulr:
1760 rpop8 r3
1761 rpop8 r4
1762 mul r4, r3, r4
1763 rpush8 r4
1764 b uxn_decode
1765
1766mul2r:
1767 rpop16 r3, r5
1768 rpop16 r4, r5
1769 mul r3, r4, r3
1770 rpush16 r3
1771 b uxn_decode
1772
1773divr:
1774 rpop8 r3
1775 rpop8 r4
1776 push {r0, r1, r2, r7, lr}
1777 mov r1, r3
1778 mov r0, r4
1779 bl __aeabi_uidiv
1780 mov r3, r0
1781 pop {r0, r1, r2, r7, lr}
1782 rpush8 r3
1783 b uxn_decode
1784
1785div2r:
1786 rpop16 r3, r5
1787 rpop16 r4, r5
1788 push {r0, r1, r2, r7, lr}
1789 mov r1, r3
1790 mov r0, r4
1791 bl __aeabi_uidiv
1792 mov r3, r0
1793 pop {r0, r1, r2, r7, lr}
1794 rpush16 r3
1795 b uxn_decode
1796
1797andr:
1798 rpop8 r3
1799 rpop8 r4
1800 and r3, r3, r4
1801 rpush8 r3
1802 b uxn_decode
1803
1804and2r:
1805 rpop16 r3, r5
1806 rpop16 r4, r5
1807 and r3, r3, r4
1808 rpush16 r3
1809 b uxn_decode
1810
1811orar:
1812 rpop8 r3
1813 rpop8 r4
1814 orr r3, r3, r4
1815 rpush8 r3
1816 b uxn_decode
1817
1818ora2r:
1819 rpop16 r3, r5
1820 rpop16 r4, r5
1821 orr r3, r3, r4
1822 rpush16 r3
1823 b uxn_decode
1824
1825eorr:
1826 rpop8 r3
1827 rpop8 r4
1828 eor r3, r3, r4
1829 rpush8 r3
1830 b uxn_decode
1831
1832eor2r:
1833 rpop16 r3, r5
1834 rpop16 r4, r5
1835 eor r3, r3, r4
1836 rpush16 r3
1837 b uxn_decode
1838
1839sftr:
1840 rpop8 r4
1841 rpop8 r3
1842 lsr r5, r4, #4
1843 and r4, #0x0f
1844 lsr r3, r3, r4
1845 lsl r3, r3, r5
1846 rpush8 r3
1847 b uxn_decode
1848
1849sft2r:
1850 rpop8 r4
1851 rpop16 r3, r5
1852 lsr r5, r4, #4
1853 and r4, #0x0f
1854 lsr r3, r3, r4
1855 lsl r3, r3, r5
1856 rpush16 r3
1857 b uxn_decode
1858
1859.ltorg
1860.align 2
1861
1862inck:
1863 wpeek8 r3, #-1
1864 add r3, #1
1865 wpush8 r3
1866 b uxn_decode
1867
1868inc2k:
1869 wpeek16 r3, r5, #-1, #-2
1870 add r3, r3, #1
1871 wpush16 r3
1872 b uxn_decode
1873
1874popk:
1875 b uxn_decode
1876
1877pop2k:
1878 b uxn_decode
1879
1880nipk:
1881 wpeek8 r3, #-1
1882 wpush8 r3
1883 b uxn_decode
1884
1885nip2k:
1886 wpeek16 r3, r5, #-1, #-2
1887 wpush16 r3
1888 b uxn_decode
1889
1890swpk:
1891 wpeek8 r3, #-1
1892 wpeek8 r4, #-2
1893 wpush8 r3
1894 wpush8 r4
1895 b uxn_decode
1896
1897swp2k:
1898 wpeek16 r3, r5, #-1, #-2
1899 wpeek16 r4, r5, #-3, #-4
1900 wpush16 r3
1901 wpush16 r4
1902 b uxn_decode
1903
1904rotk:
1905 wpeek8 r5, #-1
1906 wpeek8 r4, #-2
1907 wpeek8 r3, #-3
1908 wpush8 r4
1909 wpush8 r5
1910 wpush8 r3
1911 b uxn_decode
1912
1913rot2k:
1914 wpeek16 r5, r6, #-1, #-2
1915 wpeek16 r4, r6, #-3, #-4
1916 wpeek16 r3, r6, #-5, #-6
1917 wpush16 r4
1918 wpush16 r5
1919 wpush16 r3
1920 b uxn_decode
1921
1922dupk:
1923 wpeek8 r3, #-1
1924 wpush8 r3
1925 wpush8 r3
1926 b uxn_decode
1927
1928dup2k:
1929 wpeek8 r3, #-2
1930 wpeek8 r4, #-1
1931 wpush8 r3
1932 wpush8 r4
1933 wpush8 r3
1934 wpush8 r4
1935 b uxn_decode
1936
1937ovrk:
1938 wpeek8 r3, #-2
1939 wpeek8 r4, #-1
1940 wpush8 r3
1941 wpush8 r4
1942 wpush8 r3
1943 b uxn_decode
1944
1945ovr2k:
1946 wpeek8 r3, #-4
1947 wpeek8 r4, #-3
1948 wpeek8 r5, #-2
1949 wpeek8 r6, #-1
1950 wpush8 r3
1951 wpush8 r4
1952 wpush8 r5
1953 wpush8 r6
1954 wpush8 r3
1955 wpush8 r4
1956 b uxn_decode
1957
1958equk:
1959 wpeek8 r3, #-1
1960 wpeek8 r4, #-2
1961 sub r3, r4, r3
1962 rsbs r4, r3, #0
1963 adc r4, r4, r3
1964 wpush8 r4
1965 b uxn_decode
1966
1967equ2k:
1968 wpeek16 r3, r5, #-1, #-2
1969 wpeek16 r4, r5, #-3, #-4
1970 sub r3, r4, r3
1971 rsbs r4, r3, #0
1972 adc r4, r4, r3
1973 wpush8 r4
1974 b uxn_decode
1975
1976neqk:
1977 wpeek8 r3, #-1
1978 wpeek8 r4, #-2
1979 subs r3, r4, r3
1980 movne r3, #1
1981 wpush8 r3
1982 b uxn_decode
1983
1984neq2k:
1985 wpeek16 r3, r5, #-1, #-2
1986 wpeek16 r4, r5, #-3, #-4
1987 subs r3, r4, r3
1988 movne r3, #1
1989 wpush8 r3
1990 b uxn_decode
1991
1992gthk:
1993 wpeek8 r3, #-1
1994 wpeek8 r4, #-2
1995 cmp r4, r3
1996 movls r3, #0
1997 movhi r3, #1
1998 wpush8 r3
1999 b uxn_decode
2000
2001gth2k:
2002 wpeek16 r3, r5, #-1, #-2
2003 wpeek16 r4, r5, #-3, #-4
2004 cmp r4, r3
2005 movls r3, #0
2006 movhi r3, #1
2007 wpush8 r3
2008 b uxn_decode
2009
2010lthk:
2011 wpeek8 r3, #-1
2012 wpeek8 r4, #-2
2013 cmp r4, r3
2014 movcs r3, #0
2015 movcc r3, #1
2016 wpush8 r3
2017 b uxn_decode
2018
2019lth2k:
2020 wpeek16 r3, r5, #-1, #-2
2021 wpeek16 r4, r5, #-3, #-4
2022 cmp r4, r3
2023 movcs r3, #0
2024 movcc r3, #1
2025 wpush8 r3
2026 b uxn_decode
2027
2028jmpk:
2029 wpeek8s r3, #-1
2030 add r0, r3
2031 b uxn_decode
2032
2033jmp2k:
2034 wpeek16 r3, r5, #-1, #-2
2035 mov r0, r7
2036 add r0, r0, r3
2037 b uxn_decode
2038
2039jcnk:
2040 wpeek8s r3, #-1
2041 wpeek8 r4, #-2
2042 cmp r4, #0
2043 addne r0, r3
2044 b uxn_decode
2045
2046jcn2k:
2047 wpeek16 r3, r5, #-1, #-2
2048 wpeek8 r4, #-3
2049 cmp r4, #0
2050 movne r0, r7
2051 cmp r4, #0
2052 addne r0, r0, r3
2053 b uxn_decode
2054
2055jsrk:
2056 mov r3, r0
2057 sub r3, r3, r7
2058 wpeek8s r4, #-1
2059 rpush16 r3
2060 add r0, r4
2061 b uxn_decode
2062
2063jsr2k:
2064 mov r3, r0
2065 sub r3, r3, r7
2066 wpeek16 r4, r5, #-1, #-2
2067 rpush16 r3
2068 mov r0, r7
2069 add r0, r0, r4
2070 b uxn_decode
2071
2072sthk:
2073 wpeek8 r3, #-1
2074 rpush8 r3
2075 b uxn_decode
2076
2077sth2k:
2078 wpeek16 r3, r5, #-1, #-2
2079 rpush16 r3
2080 b uxn_decode
2081
2082ldzk:
2083 wpeek8 r3, #-1
2084 zload8 r4, r3
2085 wpush8 r4
2086 b uxn_decode
2087
2088ldz2k:
2089 wpeek8 r3, #-1
2090 zload8 r4, r3
2091 wpush8 r4
2092 add r3, #1
2093 zload8 r4, r3
2094 wpush8 r4
2095 b uxn_decode
2096
2097stzk:
2098 wpeek8 r3, #-1
2099 wpeek8 r4, #-2
2100 zsave8 r4, r3
2101 b uxn_decode
2102
2103stz2k:
2104 wpeek8 r3, #-1
2105 wpeek16 r4, r5, #-2, #-3
2106 zsave16 r4, r3
2107 b uxn_decode
2108
2109ldrk:
2110 wpeek8s r4, #-1
2111 rload8 r3, r4
2112 wpush8 r3
2113 b uxn_decode
2114
2115ldr2k:
2116 wpeek8s r4, #-1
2117 rload8 r3, r4
2118 wpush8 r3
2119 add r4, #1
2120 rload8 r3, r4
2121 wpush8 r3
2122 b uxn_decode
2123
2124strk:
2125 wpeek8s r4, #-1
2126 wpeek8 r3, #-2
2127 rsave8 r3, r4
2128 b uxn_decode
2129
2130str2k:
2131 wpeek8s r4, #-1
2132 wpeek16 r3, r5, #-2, #-3
2133 rsave16 r3, r4
2134 b uxn_decode
2135
2136ldak:
2137 wpeek16 r4, r5, #-1, #-2
2138 aload8 r3, r4
2139 wpush8 r3
2140 b uxn_decode
2141
2142lda2k:
2143 wpeek16 r4, r5, #-1, #-2
2144 aload8 r3, r4
2145 wpush8 r3
2146 add r4, #1
2147 aload8 r3, r4
2148 wpush8 r3
2149 b uxn_decode
2150
2151stak:
2152 wpeek16 r4, r5, #-1, #-2
2153 wpeek8 r3, #-3
2154 asave8 r3, r4
2155 b uxn_decode
2156
2157sta2k:
2158 wpeek16 r4, r5, #-1, #-2
2159 wpeek16 r3, r5, #-3, #-4
2160 asave16 r3, r4
2161 b uxn_decode
2162
2163addk:
2164 wpeek8 r3, #-1
2165 wpeek8 r4, #-2
2166 add r3, r3, r4
2167 wpush8 r3
2168 b uxn_decode
2169
2170add2k:
2171 wpeek16 r3, r5, #-1, #-2
2172 wpeek16 r4, r5, #-3, #-4
2173 add r3, r3, r4
2174 wpush16 r3
2175 b uxn_decode
2176
2177subk:
2178 wpeek8 r3, #-1
2179 wpeek8 r4, #-2
2180 sub r4, r4, r3
2181 wpush8 r4
2182 b uxn_decode
2183
2184sub2k:
2185 wpeek16 r3, r5, #-1, #-2
2186 wpeek16 r4, r5, #-3, #-4
2187 sub r3, r4, r3
2188 wpush16 r3
2189 b uxn_decode
2190
2191mulk:
2192 wpeek8 r3, #-1
2193 wpeek8 r4, #-2
2194 mul r4, r3, r4
2195 wpush8 r4
2196 b uxn_decode
2197
2198mul2k:
2199 wpeek16 r3, r5, #-1, #-2
2200 wpeek16 r4, r5, #-3, #-4
2201 mul r3, r4, r3
2202 wpush16 r3
2203 b uxn_decode
2204
2205divk:
2206 wpeek8 r3, #-1
2207 wpeek8 r4, #-2
2208 push {r0, r1, r2, r7, lr}
2209 mov r1, r3
2210 mov r0, r4
2211 bl __aeabi_uidiv
2212 mov r3, r0
2213 pop {r0, r1, r2, r7, lr}
2214 wpush8 r3
2215 b uxn_decode
2216
2217div2k:
2218 wpeek16 r3, r5, #-1, #-2
2219 wpeek16 r4, r5, #-3, #-4
2220 push {r0, r1, r2, r7, lr}
2221 mov r1, r3
2222 mov r0, r4
2223 bl __aeabi_uidiv
2224 mov r3, r0
2225 pop {r0, r1, r2, r7, lr}
2226 wpush16 r3
2227 b uxn_decode
2228
2229andk:
2230 wpeek8 r3, #-1
2231 wpeek8 r4, #-2
2232 and r3, r3, r4
2233 wpush8 r3
2234 b uxn_decode
2235
2236and2k:
2237 wpeek16 r3, r5, #-1, #-2
2238 wpeek16 r4, r5, #-3, #-4
2239 and r3, r3, r4
2240 wpush16 r3
2241 b uxn_decode
2242
2243orak:
2244 wpeek8 r3, #-1
2245 wpeek8 r4, #-2
2246 orr r3, r3, r4
2247 wpush8 r3
2248 b uxn_decode
2249
2250ora2k:
2251 wpeek16 r3, r5, #-1, #-2
2252 wpeek16 r4, r5, #-3, #-4
2253 orr r3, r3, r4
2254 wpush16 r3
2255 b uxn_decode
2256
2257eork:
2258 wpeek8 r3, #-1
2259 wpeek8 r4, #-2
2260 eor r3, r3, r4
2261 wpush8 r3
2262 b uxn_decode
2263
2264eor2k:
2265 wpeek16 r3, r5, #-1, #-2
2266 wpeek16 r4, r5, #-3, #-4
2267 eor r3, r3, r4
2268 wpush16 r3
2269 b uxn_decode
2270
2271sftk:
2272 wpeek8 r4, #-1
2273 wpeek8 r3, #-2
2274 lsr r5, r4, #4
2275 and r4, #0x0f
2276 lsr r3, r3, r4
2277 lsl r3, r3, r5
2278 wpush8 r3
2279 b uxn_decode
2280
2281sft2k:
2282 wpeek8 r4, #-1
2283 wpeek16 r3, r5, #-2, #-3
2284 lsr r5, r4, #4
2285 and r4, #0x0f
2286 lsr r3, r3, r4
2287 lsl r3, r3, r5
2288 wpush16 r3
2289 b uxn_decode
2290
2291.ltorg
2292.align 2
2293
2294inckr:
2295 rpeek8 r3, #-1
2296 add r3, #1
2297 rpush8 r3
2298 b uxn_decode
2299
2300inc2kr:
2301 rpeek16 r3, r5, #-1, #-2
2302 add r3, r3, #1
2303 rpush16 r3
2304 b uxn_decode
2305
2306popkr:
2307 b uxn_decode
2308
2309pop2kr:
2310 b uxn_decode
2311
2312nipkr:
2313 rpeek8 r3, #-1
2314 wpush8 r3
2315 b uxn_decode
2316
2317nip2kr:
2318 rpeek16 r3, r5, #-1, #-2
2319 rpush16 r3
2320 b uxn_decode
2321
2322swpkr:
2323 rpeek8 r3, #-1
2324 rpeek8 r4, #-2
2325 rpush8 r3
2326 rpush8 r4
2327 b uxn_decode
2328
2329swp2kr:
2330 rpeek16 r3, r5, #-1, #-2
2331 rpeek16 r4, r5, #-3, #-4
2332 rpush16 r3
2333 rpush16 r4
2334 b uxn_decode
2335
2336rotkr:
2337 rpeek8 r5, #-1
2338 rpeek8 r4, #-2
2339 rpeek8 r3, #-3
2340 rpush8 r4
2341 rpush8 r5
2342 rpush8 r3
2343 b uxn_decode
2344
2345rot2kr:
2346 rpeek16 r5, r6, #-1, #-2
2347 rpeek16 r4, r6, #-3, #-4
2348 rpeek16 r3, r6, #-5, #-6
2349 rpush16 r4
2350 rpush16 r5
2351 rpush16 r3
2352 b uxn_decode
2353
2354dupkr:
2355 rpeek8 r3, #-1
2356 rpush8 r3
2357 rpush8 r3
2358 b uxn_decode
2359
2360dup2kr:
2361 rpeek8 r3, #-2
2362 rpeek8 r4, #-1
2363 rpush8 r3
2364 rpush8 r4
2365 rpush8 r3
2366 rpush8 r4
2367 b uxn_decode
2368
2369ovrkr:
2370 rpeek8 r3, #-2
2371 rpeek8 r4, #-1
2372 rpush8 r3
2373 rpush8 r4
2374 rpush8 r3
2375 b uxn_decode
2376
2377ovr2kr:
2378 rpeek8 r3, #-4
2379 rpeek8 r4, #-3
2380 rpeek8 r5, #-2
2381 rpeek8 r6, #-1
2382 rpush8 r3
2383 rpush8 r4
2384 rpush8 r5
2385 rpush8 r6
2386 rpush8 r3
2387 rpush8 r4
2388 b uxn_decode
2389
2390equkr:
2391 rpeek8 r3, #-1
2392 rpeek8 r4, #-2
2393 sub r3, r4, r3
2394 rsbs r4, r3, #0
2395 adc r4, r4, r3
2396 rpush8 r4
2397 b uxn_decode
2398
2399equ2kr:
2400 rpeek16 r3, r5, #-1, #-2
2401 rpeek16 r4, r5, #-3, #-4
2402 sub r3, r4, r3
2403 rsbs r4, r3, #0
2404 adc r4, r4, r3
2405 rpush8 r4
2406 b uxn_decode
2407
2408neqkr:
2409 rpeek8 r3, #-1
2410 rpeek8 r4, #-2
2411 subs r3, r4, r3
2412 movne r3, #1
2413 rpush8 r3
2414 b uxn_decode
2415
2416neq2kr:
2417 rpeek16 r3, r5, #-1, #-2
2418 rpeek16 r4, r5, #-3, #-4
2419 subs r3, r4, r3
2420 movne r3, #1
2421 rpush8 r3
2422 b uxn_decode
2423
2424gthkr:
2425 rpeek8 r3, #-1
2426 rpeek8 r4, #-2
2427 cmp r4, r3
2428 movls r3, #0
2429 movhi r3, #1
2430 rpush8 r3
2431 b uxn_decode
2432
2433gth2kr:
2434 rpeek16 r3, r5, #-1, #-2
2435 rpeek16 r4, r5, #-3, #-4
2436 cmp r4, r3
2437 movls r3, #0
2438 movhi r3, #1
2439 rpush8 r3
2440 b uxn_decode
2441
2442lthkr:
2443 rpeek8 r3, #-1
2444 rpeek8 r4, #-2
2445 cmp r4, r3
2446 movcs r3, #0
2447 movcc r3, #1
2448 rpush8 r3
2449 b uxn_decode
2450
2451lth2kr:
2452 rpeek16 r3, r5, #-1, #-2
2453 rpeek16 r4, r5, #-3, #-4
2454 cmp r4, r3
2455 movcs r3, #0
2456 movcc r3, #1
2457 rpush8 r3
2458 b uxn_decode
2459
2460jmpkr:
2461 rpeek8s r3, #-1
2462 add r0, r3
2463 b uxn_decode
2464
2465jmp2kr:
2466 rpeek16 r3, r5, #-1, #-2
2467 mov r0, r7
2468 add r0, r0, r3
2469 b uxn_decode
2470
2471jcnkr:
2472 rpeek8s r3, #-1
2473 rpeek8 r4, #-2
2474 cmp r4, #0
2475 addne r0, r3
2476 b uxn_decode
2477
2478jcn2kr:
2479 rpeek16 r3, r5, #-1, #-2
2480 rpeek8 r4, #-3
2481 cmp r4, #0
2482 movne r0, r7
2483 cmp r4, #0
2484 addne r0, r0, r3
2485 b uxn_decode
2486
2487jsrkr:
2488 mov r3, r0
2489 sub r3, r3, r7
2490 rpeek8s r4, #-1
2491 rpush16 r3
2492 add r0, r4
2493 b uxn_decode
2494
2495jsr2kr:
2496 mov r3, r0
2497 sub r3, r3, r7
2498 rpeek16 r4, r5, #-1, #-2
2499 rpush16 r3
2500 mov r0, r7
2501 add r0, r0, r4
2502 b uxn_decode
2503
2504sthkr:
2505 rpeek8 r3, #-1
2506 wpush8 r3
2507 b uxn_decode
2508
2509sth2kr:
2510 rpeek16 r3, r5, #-1, #-2
2511 wpush16 r3
2512 b uxn_decode
2513
2514ldzkr:
2515 rpeek8 r3, #-1
2516 zload8 r4, r3
2517 rpush8 r4
2518 b uxn_decode
2519
2520ldz2kr:
2521 rpeek8 r3, #-1
2522 zload8 r4, r3
2523 rpush8 r4
2524 add r3, #1
2525 zload8 r4, r3
2526 rpush8 r4
2527 b uxn_decode
2528
2529stzkr:
2530 rpeek8 r3, #-1
2531 rpeek8 r4, #-2
2532 zsave8 r4, r3
2533 b uxn_decode
2534
2535stz2kr:
2536 rpeek8 r3, #-1
2537 rpeek16 r4, r5, #-2, #-3
2538 zsave16 r4, r3
2539 b uxn_decode
2540
2541ldrkr:
2542 rpeek8s r4, #-1
2543 rload8 r3, r4
2544 rpush8 r3
2545 b uxn_decode
2546
2547ldr2kr:
2548 rpeek8s r4, #-1
2549 rload8 r3, r4
2550 rpush8 r3
2551 add r4, #1
2552 rload8 r3, r4
2553 rpush8 r3
2554 b uxn_decode
2555
2556strkr:
2557 rpeek8s r4, #-1
2558 rpeek8 r3, #-2
2559 rsave8 r3, r4
2560 b uxn_decode
2561
2562str2kr:
2563 rpeek8s r4, #-1
2564 rpeek16 r3, r5, #-1, #-2
2565 rsave16 r3, r4
2566 b uxn_decode
2567
2568ldakr:
2569 rpeek16 r4, r5, #-1, #-2
2570 aload8 r3, r4
2571 rpush8 r3
2572 b uxn_decode
2573
2574lda2kr:
2575 rpeek16 r4, r5, #-1, #-2
2576 aload8 r3, r4
2577 rpush8 r3
2578 add r4, #1
2579 aload8 r3, r4
2580 rpush8 r3
2581 b uxn_decode
2582
2583stakr:
2584 rpeek16 r4, r5, #-1, #-2
2585 rpeek8 r3, #-3
2586 asave8 r3, r4
2587 b uxn_decode
2588
2589sta2kr:
2590 rpeek16 r4, r5, #-1, #-2
2591 rpeek16 r3, r5, #-3, #-4
2592 asave16 r3, r4
2593 b uxn_decode
2594
2595addkr:
2596 rpeek8 r3, #-1
2597 rpeek8 r4, #-2
2598 add r3, r3, r4
2599 rpush8 r3
2600 b uxn_decode
2601
2602add2kr:
2603 rpeek16 r3, r5, #-1, #-2
2604 rpeek16 r4, r5, #-3, #-4
2605 add r3, r3, r4
2606 rpush16 r3
2607 b uxn_decode
2608
2609subkr:
2610 rpeek8 r3, #-1
2611 rpeek8 r4, #-2
2612 sub r4, r4, r3
2613 rpush8 r4
2614 b uxn_decode
2615
2616sub2kr:
2617 rpeek16 r3, r5, #-1, #-2
2618 rpeek16 r4, r5, #-3, #-4
2619 sub r3, r4, r3
2620 rpush16 r3
2621 b uxn_decode
2622
2623mulkr:
2624 rpeek8 r3, #-1
2625 rpeek8 r4, #-2
2626 mul r4, r3, r4
2627 rpush8 r4
2628 b uxn_decode
2629
2630mul2kr:
2631 rpeek16 r3, r5, #-1, #-2
2632 rpeek16 r4, r5, #-3, #-4
2633 mul r3, r4, r3
2634 rpush16 r3
2635 b uxn_decode
2636
2637divkr:
2638 rpeek8 r3, #-1
2639 rpeek8 r4, #-2
2640 push {r0, r1, r2, r7, lr}
2641 mov r1, r3
2642 mov r0, r4
2643 bl __aeabi_uidiv
2644 mov r3, r0
2645 pop {r0, r1, r2, r7, lr}
2646 rpush8 r3
2647 b uxn_decode
2648
2649div2kr:
2650 rpeek16 r3, r5, #-1, #-2
2651 rpeek16 r4, r5, #-3, #-4
2652 push {r0, r1, r2, r7, lr}
2653 mov r1, r3
2654 mov r0, r4
2655 bl __aeabi_uidiv
2656 mov r3, r0
2657 pop {r0, r1, r2, r7, lr}
2658 rpush16 r3
2659 b uxn_decode
2660
2661andkr:
2662 rpeek8 r3, #-1
2663 rpeek8 r4, #-2
2664 and r3, r3, r4
2665 rpush8 r3
2666 b uxn_decode
2667
2668and2kr:
2669 rpeek16 r3, r5, #-1, #-2
2670 rpeek16 r4, r5, #-3, #-4
2671 and r3, r3, r4
2672 rpush16 r3
2673 b uxn_decode
2674
2675orakr:
2676 rpeek8 r3, #-1
2677 rpeek8 r4, #-2
2678 orr r3, r3, r4
2679 rpush8 r3
2680 b uxn_decode
2681
2682ora2kr:
2683 rpeek16 r3, r5, #-1, #-2
2684 rpeek16 r4, r5, #-3, #-4
2685 orr r3, r3, r4
2686 rpush16 r3
2687 b uxn_decode
2688
2689eorkr:
2690 rpeek8 r3, #-1
2691 rpeek8 r4, #-2
2692 eor r3, r3, r4
2693 rpush8 r3
2694 b uxn_decode
2695
2696eor2kr:
2697 rpeek16 r3, r5, #-1, #-2
2698 rpeek16 r4, r5, #-3, #-4
2699 eor r3, r3, r4
2700 rpush16 r3
2701 b uxn_decode
2702
2703sftkr:
2704 rpeek8 r4, #-1
2705 rpeek8 r3, #-2
2706 lsr r5, r4, #4
2707 and r4, #0x0f
2708 lsr r3, r3, r4
2709 lsl r3, r3, r5
2710 rpush8 r3
2711 b uxn_decode
2712
2713sft2kr:
2714 rpeek8 r4, #-1
2715 rpeek16 r3, r5, #-2, #-3
2716 lsr r5, r4, #4
2717 and r4, #0x0f
2718 lsr r3, r3, r4
2719 lsl r3, r3, r5
2720 rpush16 r3
2721 b uxn_decode