aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBad Diode <bd@badd10de.dev>2023-08-29 17:37:41 +0200
committerBad Diode <bd@badd10de.dev>2023-08-29 17:37:41 +0200
commit418aa7666a15ad3348633cc822c56a56eee7c4d9 (patch)
treee82b95b85f2ff1d29698844203d624113f5aac5c
parent9dc972fd0cdd9f7cac45aa0d0f30ad8751a8c0d5 (diff)
downloaduxngba-418aa7666a15ad3348633cc822c56a56eee7c4d9.tar.gz
uxngba-418aa7666a15ad3348633cc822c56a56eee7c4d9.zip
Add OPk functions (untested)
-rw-r--r--src/main.c1
-rw-r--r--src/uxn-core.s660
2 files changed, 587 insertions, 74 deletions
diff --git a/src/main.c b/src/main.c
index 084c3ab..9bb38c9 100644
--- a/src/main.c
+++ b/src/main.c
@@ -231,7 +231,6 @@ init_uxn() {
231} 231}
232 232
233// TODO: 233// TODO:
234// - OPk modes
235// - OPrk modes 234// - OPrk modes
236// - Test DEI functions 235// - Test DEI functions
237 236
diff --git a/src/uxn-core.s b/src/uxn-core.s
index 71e73da..c1f28d6 100644
--- a/src/uxn-core.s
+++ b/src/uxn-core.s
@@ -87,6 +87,16 @@ uxn_ret:
87 ldrb \a, [r1, \b] 87 ldrb \a, [r1, \b]
88.endm 88.endm
89 89
90.macro wpeek8 a
91 ldrb \a, [r1, #-1]
92.endm
93
94.macro wpeek16 a, b
95 ldrb \a, [r1, #-1]
96 ldrb \b, [r1, #-2]
97 orr \a, \a, \b, lsl #8
98.endm
99
90.macro rpop8 a 100.macro rpop8 a
91 ldrb \a, [r2, #-1]! 101 ldrb \a, [r2, #-1]!
92.endm 102.endm
@@ -294,69 +304,69 @@ op_table:
294 .word eor2r @ 0x7e 304 .word eor2r @ 0x7e
295 .word sft2r @ 0x7f 305 .word sft2r @ 0x7f
296 .word lit @ 0x80 306 .word lit @ 0x80
297 .word brk @ 0x81 307 .word inck @ 0x81
298 .word brk @ 0x82 308 .word popk @ 0x82
299 .word brk @ 0x83 309 .word nipk @ 0x83
300 .word brk @ 0x84 310 .word swpk @ 0x84
301 .word brk @ 0x85 311 .word rotk @ 0x85
302 .word brk @ 0x86 312 .word dupk @ 0x86
303 .word brk @ 0x87 313 .word ovrk @ 0x87
304 .word brk @ 0x88 314 .word equk @ 0x88
305 .word brk @ 0x89 315 .word neqk @ 0x89
306 .word brk @ 0x8a 316 .word gthk @ 0x8a
307 .word brk @ 0x8b 317 .word lthk @ 0x8b
308 .word brk @ 0x8c 318 .word jmpk @ 0x8c
309 .word brk @ 0x8d 319 .word jcnk @ 0x8d
310 .word brk @ 0x8e 320 .word jsrk @ 0x8e
311 .word brk @ 0x8f 321 .word sthk @ 0x8f
312 .word brk @ 0x90 322 .word ldzk @ 0x90
313 .word brk @ 0x91 323 .word stzk @ 0x91
314 .word brk @ 0x92 324 .word ldrk @ 0x92
315 .word brk @ 0x93 325 .word strk @ 0x93
316 .word brk @ 0x94 326 .word ldak @ 0x94
317 .word brk @ 0x95 327 .word stak @ 0x95
318 .word brk @ 0x96 328 .word deik @ 0x96
319 .word brk @ 0x97 329 .word deok @ 0x97
320 .word brk @ 0x98 330 .word addk @ 0x98
321 .word brk @ 0x99 331 .word subk @ 0x99
322 .word brk @ 0x9a 332 .word mulk @ 0x9a
323 .word brk @ 0x9b 333 .word divk @ 0x9b
324 .word brk @ 0x9c 334 .word andk @ 0x9c
325 .word brk @ 0x9d 335 .word orak @ 0x9d
326 .word brk @ 0x9e 336 .word eork @ 0x9e
327 .word brk @ 0x9f 337 .word sftk @ 0x9f
328 .word lit2 @ 0xa0 338 .word lit2 @ 0xa0
329 .word brk @ 0xa1 339 .word inc2k @ 0xa1
330 .word brk @ 0xa2 340 .word pop2k @ 0xa2
331 .word brk @ 0xa3 341 .word nip2k @ 0xa3
332 .word brk @ 0xa4 342 .word swp2k @ 0xa4
333 .word brk @ 0xa5 343 .word rot2k @ 0xa5
334 .word brk @ 0xa6 344 .word dup2k @ 0xa6
335 .word brk @ 0xa7 345 .word ovr2k @ 0xa7
336 .word brk @ 0xa8 346 .word equ2k @ 0xa8
337 .word brk @ 0xa9 347 .word neq2k @ 0xa9
338 .word brk @ 0xaa 348 .word gth2k @ 0xaa
339 .word brk @ 0xab 349 .word lth2k @ 0xab
340 .word brk @ 0xac 350 .word jmp2k @ 0xac
341 .word brk @ 0xad 351 .word jcn2k @ 0xad
342 .word brk @ 0xae 352 .word jsr2k @ 0xae
343 .word brk @ 0xaf 353 .word sth2k @ 0xaf
344 .word brk @ 0xb0 354 .word ldz2k @ 0xb0
345 .word brk @ 0xb1 355 .word stz2k @ 0xb1
346 .word brk @ 0xb2 356 .word ldr2k @ 0xb2
347 .word brk @ 0xb3 357 .word str2k @ 0xb3
348 .word brk @ 0xb4 358 .word lda2k @ 0xb4
349 .word brk @ 0xb5 359 .word sta2k @ 0xb5
350 .word brk @ 0xb6 360 .word dei2k @ 0xb6
351 .word brk @ 0xb7 361 .word deo2k @ 0xb7
352 .word brk @ 0xb8 362 .word add2k @ 0xb8
353 .word brk @ 0xb9 363 .word sub2k @ 0xb9
354 .word brk @ 0xba 364 .word mul2k @ 0xba
355 .word brk @ 0xbb 365 .word div2k @ 0xbb
356 .word brk @ 0xbc 366 .word and2k @ 0xbc
357 .word brk @ 0xbd 367 .word ora2k @ 0xbd
358 .word brk @ 0xbe 368 .word eor2k @ 0xbe
359 .word brk @ 0xbf 369 .word sft2k @ 0xbf
360 .word litr @ 0xc0 370 .word litr @ 0xc0
361 .word brk @ 0xc1 371 .word brk @ 0xc1
362 .word brk @ 0xc2 372 .word brk @ 0xc2
@@ -430,7 +440,7 @@ dei:
430 wpop8 r3 440 wpop8 r3
431 mov r4, r3, lsr #4 @ idx 441 mov r4, r3, lsr #4 @ idx
432 and r3, #0x0f @ port 442 and r3, #0x0f @ port
433 adr r6, dei_map 443 ldr r6, =dei_map
434 ldr r6, [r6, r4, lsl #2] 444 ldr r6, [r6, r4, lsl #2]
435 stmfd sp!, {r0, r7, lr} 445 stmfd sp!, {r0, r7, lr}
436 adr r0, device_data 446 adr r0, device_data
@@ -449,7 +459,7 @@ dei2:
449 wpop8 r3 459 wpop8 r3
450 mov r4, r3, lsr #4 @ idx 460 mov r4, r3, lsr #4 @ idx
451 and r3, #0x0f @ port 461 and r3, #0x0f @ port
452 adr r6, dei_map 462 ldr r6, =dei_map
453 ldr r6, [r6, r4, lsl #2] 463 ldr r6, [r6, r4, lsl #2]
454 stmfd sp!, {r0, r7, lr} 464 stmfd sp!, {r0, r7, lr}
455 adr r0, device_data 465 adr r0, device_data
@@ -469,7 +479,7 @@ deo:
469 mov r4, r3, lsr #4 @ idx 479 mov r4, r3, lsr #4 @ idx
470 and r3, #0x0f @ port 480 and r3, #0x0f @ port
471 wpop8 r5 @ value 481 wpop8 r5 @ value
472 adr r6, deo_map 482 ldr r6, =deo_map
473 ldr r6, [r6, r4, lsl #2] 483 ldr r6, [r6, r4, lsl #2]
474 stmfd sp!, {r0, r7, lr} 484 stmfd sp!, {r0, r7, lr}
475 adr r0, device_data 485 adr r0, device_data
@@ -489,7 +499,7 @@ deo2:
489 mov r4, r3, lsr #4 @ idx 499 mov r4, r3, lsr #4 @ idx
490 and r3, #0x0f @ port 500 and r3, #0x0f @ port
491 wpop16 r5, r6 @ value 501 wpop16 r5, r6 @ value
492 adr r6, deo_map 502 ldr r6, =deo_map
493 ldr r6, [r6, r4, lsl #2] 503 ldr r6, [r6, r4, lsl #2]
494 stmfd sp!, {r0, r7, lr} 504 stmfd sp!, {r0, r7, lr}
495 adr r0, device_data 505 adr r0, device_data
@@ -505,10 +515,88 @@ deo2:
505 b uxn_decode 515 b uxn_decode
506 516
507deir: 517deir:
518 rpop8 r3
519 mov r4, r3, lsr #4 @ idx
520 and r3, #0x0f @ port
521 ldr r6, =dei_map
522 ldr r6, [r6, r4, lsl #2]
523 stmfd sp!, {r0, r7, lr}
524 adr r0, device_data
525 lsl r4, #4
526 add r0, r4
527 mov r1, r3
528 mov lr, pc
529 bx r6
530 ldr r1, wst_ptr
531 ldr r2, rst_ptr
532 rpush8 r0
533 ldmfd sp!, {r0, r7, lr}
534 b uxn_decode
535
536dei2r:
537 rpop8 r3
538 mov r4, r3, lsr #4 @ idx
539 and r3, #0x0f @ port
540 ldr r6, =dei_map
541 ldr r6, [r6, r4, lsl #2]
542 stmfd sp!, {r0, r7, lr}
543 adr r0, device_data
544 lsl r4, #4
545 add r0, r4
546 mov r1, r3
547 mov lr, pc
548 bx r6
549 ldr r1, wst_ptr
550 ldr r2, rst_ptr
551 rpush16 r0
552 ldmfd sp!, {r0, r7, lr}
553 b uxn_decode
554
555deor:
556 rpop8 r3
557 mov r4, r3, lsr #4 @ idx
558 and r3, #0x0f @ port
559 rpop8 r5 @ value
560 ldr r6, =deo_map
561 ldr r6, [r6, r4, lsl #2]
562 stmfd sp!, {r0, r7, lr}
563 adr r0, device_data
564 lsl r4, #4
565 add r0, r4
566 strb r5, [r0, r3]
567 mov r1, r3
568 mov lr, pc
569 bx r6
570 ldmfd sp!, {r0, r7, lr}
571 ldr r1, wst_ptr
572 ldr r2, rst_ptr
573 b uxn_decode
574
575deo2r:
576 rpop8 r3
577 mov r4, r3, lsr #4 @ idx
578 and r3, #0x0f @ port
579 rpop16 r5, r6 @ value
580 ldr r6, =deo_map
581 ldr r6, [r6, r4, lsl #2]
582 stmfd sp!, {r0, r7, lr}
583 adr r0, device_data
584 lsl r4, #4
585 add r0, r4
586 strh r5, [r0, r3]
587 mov r1, r3
588 mov lr, pc
589 bx r6
590 ldmfd sp!, {r0, r7, lr}
591 ldr r1, wst_ptr
592 ldr r2, rst_ptr
593 b uxn_decode
594
595deik:
508 wpop8 r3 596 wpop8 r3
509 mov r4, r3, lsr #4 @ idx 597 mov r4, r3, lsr #4 @ idx
510 and r3, #0x0f @ port 598 and r3, #0x0f @ port
511 adr r6, dei_map 599 ldr r6, =dei_map
512 ldr r6, [r6, r4, lsl #2] 600 ldr r6, [r6, r4, lsl #2]
513 stmfd sp!, {r0, r7, lr} 601 stmfd sp!, {r0, r7, lr}
514 adr r0, device_data 602 adr r0, device_data
@@ -523,11 +611,11 @@ deir:
523 ldmfd sp!, {r0, r7, lr} 611 ldmfd sp!, {r0, r7, lr}
524 b uxn_decode 612 b uxn_decode
525 613
526dei2r: 614dei2k:
527 wpop8 r3 615 wpop8 r3
528 mov r4, r3, lsr #4 @ idx 616 mov r4, r3, lsr #4 @ idx
529 and r3, #0x0f @ port 617 and r3, #0x0f @ port
530 adr r6, dei_map 618 ldr r6, =dei_map
531 ldr r6, [r6, r4, lsl #2] 619 ldr r6, [r6, r4, lsl #2]
532 stmfd sp!, {r0, r7, lr} 620 stmfd sp!, {r0, r7, lr}
533 adr r0, device_data 621 adr r0, device_data
@@ -542,12 +630,12 @@ dei2r:
542 ldmfd sp!, {r0, r7, lr} 630 ldmfd sp!, {r0, r7, lr}
543 b uxn_decode 631 b uxn_decode
544 632
545deor: 633deok:
546 wpop8 r3 634 wpop8 r3
547 mov r4, r3, lsr #4 @ idx 635 mov r4, r3, lsr #4 @ idx
548 and r3, #0x0f @ port 636 and r3, #0x0f @ port
549 wpop8 r5 @ value 637 wpop8 r5 @ value
550 adr r6, deo_map 638 ldr r6, =deo_map
551 ldr r6, [r6, r4, lsl #2] 639 ldr r6, [r6, r4, lsl #2]
552 stmfd sp!, {r0, r7, lr} 640 stmfd sp!, {r0, r7, lr}
553 adr r0, device_data 641 adr r0, device_data
@@ -562,12 +650,12 @@ deor:
562 ldr r2, rst_ptr 650 ldr r2, rst_ptr
563 b uxn_decode 651 b uxn_decode
564 652
565deo2r: 653deo2k:
566 wpop8 r3 654 wpop8 r3
567 mov r4, r3, lsr #4 @ idx 655 mov r4, r3, lsr #4 @ idx
568 and r3, #0x0f @ port 656 and r3, #0x0f @ port
569 wpop16 r5, r6 @ value 657 wpop16 r5, r6 @ value
570 adr r6, deo_map 658 ldr r6, =deo_map
571 ldr r6, [r6, r4, lsl #2] 659 ldr r6, [r6, r4, lsl #2]
572 stmfd sp!, {r0, r7, lr} 660 stmfd sp!, {r0, r7, lr}
573 adr r0, device_data 661 adr r0, device_data
@@ -711,6 +799,9 @@ lit2r:
711 rpush8 r4 799 rpush8 r4
712 b uxn_decode 800 b uxn_decode
713 801
802.ltorg
803.align 2
804
714inc: 805inc:
715 wpop8 r3 806 wpop8 r3
716 add r3, #1 807 add r3, #1
@@ -1556,3 +1647,426 @@ sft2r:
1556 1647
1557.ltorg 1648.ltorg
1558.align 2 1649.align 2
1650
1651inck:
1652 wpeek8 r3
1653 add r3, #1
1654 wpush8 r3
1655 b uxn_decode
1656
1657inc2k:
1658 wpeek16 r3, r5
1659 add r3, r3, #1
1660 wpush16 r3
1661 b uxn_decode
1662
1663popk:
1664 sub r1, #1
1665 b uxn_decode
1666
1667pop2k:
1668 sub r1, #2
1669 b uxn_decode
1670
1671nipk:
1672 wpeek8 r3
1673 strb r3, [r1, #-1]
1674 b uxn_decode
1675
1676nip2k:
1677 wpeek16 r3, r5
1678 strb r3, [r1, #-1]
1679 lsr r3, #8
1680 strb r3, [r1, #-2]
1681 b uxn_decode
1682
1683swpk:
1684 wpeek8 r3
1685 wpeek8 r4
1686 wpush8 r3
1687 wpush8 r4
1688 b uxn_decode
1689
1690swp2k:
1691 wpeek16 r3, r5
1692 wpeek16 r4, r5
1693 wpush16 r3
1694 wpush16 r4
1695 b uxn_decode
1696
1697rotk:
1698 wpeek8 r5
1699 wpeek8 r4
1700 wpeek8 r3
1701 wpush8 r4
1702 wpush8 r5
1703 wpush8 r3
1704 b uxn_decode
1705
1706rot2k:
1707 wpeek16 r5, r6
1708 wpeek16 r4, r6
1709 wpeek16 r3, r6
1710 wpush16 r4
1711 wpush16 r5
1712 wpush16 r3
1713 b uxn_decode
1714
1715dupk:
1716 wpeek r3, #-1
1717 wpush8 r3
1718 b uxn_decode
1719
1720dup2k:
1721 wpeek r3, #-2
1722 wpeek r4, #-1
1723 wpush8 r3
1724 wpush8 r4
1725 b uxn_decode
1726
1727ovrk:
1728 wpeek r3, #-2
1729 wpush8 r3
1730 b uxn_decode
1731
1732ovr2k:
1733 wpeek r3, #-4
1734 wpeek r4, #-3
1735 wpush8 r3
1736 wpush8 r4
1737 b uxn_decode
1738
1739equk:
1740 wpeek8 r3
1741 wpeek8 r4
1742 sub r3, r4, r3
1743 rsbs r4, r3, #0
1744 adc r4, r4, r3
1745 wpush8 r4
1746 b uxn_decode
1747
1748equ2k:
1749 wpeek16 r3, r5
1750 wpeek16 r4, r5
1751 sub r3, r4, r3
1752 rsbs r4, r3, #0
1753 adc r4, r4, r3
1754 wpush8 r4
1755 b uxn_decode
1756
1757neqk:
1758 wpeek8 r3
1759 wpeek8 r4
1760 subs r3, r4, r3
1761 movne r3, #1
1762 wpush8 r3
1763 b uxn_decode
1764
1765neq2k:
1766 wpeek16 r3, r5
1767 wpeek16 r4, r5
1768 subs r3, r4, r3
1769 movne r3, #1
1770 wpush8 r3
1771 b uxn_decode
1772
1773gthk:
1774 wpeek8 r3
1775 wpeek8 r4
1776 cmp r4, r3
1777 movls r3, #0
1778 movhi r3, #1
1779 wpush8 r3
1780 b uxn_decode
1781
1782gth2k:
1783 wpeek16 r3, r5
1784 wpeek16 r4, r5
1785 cmp r4, r3
1786 movls r3, #0
1787 movhi r3, #1
1788 wpush8 r3
1789 b uxn_decode
1790
1791lthk:
1792 wpeek8 r3
1793 wpeek8 r4
1794 cmp r4, r3
1795 movcs r3, #0
1796 movcc r3, #1
1797 wpush8 r3
1798 b uxn_decode
1799
1800lth2k:
1801 wpeek16 r3, r5
1802 wpeek16 r4, r5
1803 cmp r4, r3
1804 movcs r3, #0
1805 movcc r3, #1
1806 wpush8 r3
1807 b uxn_decode
1808
1809jmpk:
1810 wpop8s r3
1811 add r0, r3
1812 b uxn_decode
1813
1814jmp2k:
1815 wpeek16 r3, r5
1816 mov r0, r7
1817 add r0, r0, r3
1818 b uxn_decode
1819
1820jcnk:
1821 wpop8s r3
1822 wpeek8 r4
1823 cmp r4, #0
1824 addne r0, r3
1825 b uxn_decode
1826
1827jcn2k:
1828 wpeek16 r3, r5
1829 wpeek8 r4
1830 cmp r4, #0
1831 movne r0, r7
1832 cmp r4, #0
1833 addne r0, r0, r3
1834 b uxn_decode
1835
1836jsrk:
1837 mov r3, r0
1838 sub r3, r3, r7
1839 rpush16 r3
1840 wpop8s r3
1841 add r0, r3
1842 b uxn_decode
1843
1844jsr2k:
1845 mov r3, r0
1846 sub r3, r3, r7
1847 wpeek16 r3, r5
1848 mov r0, r7
1849 add r0, r0, r3
1850 b uxn_decode
1851
1852sthk:
1853 wpeek8 r3
1854 rpush8 r3
1855 b uxn_decode
1856
1857sth2k:
1858 wpeek16 r3, r5
1859 rpush16 r3
1860 b uxn_decode
1861
1862ldzk:
1863 wpeek8 r3
1864 zload8 r4, r3
1865 wpush8 r4
1866 b uxn_decode
1867
1868ldz2k:
1869 wpeek8 r3
1870 zload8 r4, r3
1871 wpush8 r4
1872 add r3, #1
1873 zload8 r4, r3
1874 wpush8 r4
1875 b uxn_decode
1876
1877stzk:
1878 wpeek8 r3
1879 wpeek8 r4
1880 zsave8 r4, r3
1881 b uxn_decode
1882
1883stz2k:
1884 wpeek8 r3
1885 wpeek16 r4, r5
1886 zsave16 r4, r3
1887 b uxn_decode
1888
1889ldrk:
1890 wpop8s r4
1891 rload8 r3, r4
1892 wpush8 r3
1893 b uxn_decode
1894
1895ldr2k:
1896 wpop8s r4
1897 rload8 r3, r4
1898 wpush8 r3
1899 add r4, #1
1900 rload8 r3, r4
1901 wpush8 r3
1902 b uxn_decode
1903
1904strk:
1905 wpop8s r4
1906 wpeek8 r3
1907 rsave8 r3, r4
1908 b uxn_decode
1909
1910str2k:
1911 wpop8s r4
1912 wpeek16 r3, r5
1913 rsave16 r3, r4
1914 b uxn_decode
1915
1916ldak:
1917 wpeek16 r4, r5
1918 aload8 r3, r4
1919 wpush8 r3
1920 b uxn_decode
1921
1922lda2k:
1923 wpeek16 r4, r5
1924 aload8 r3, r4
1925 wpush8 r3
1926 add r4, #1
1927 aload8 r3, r4
1928 wpush8 r3
1929 b uxn_decode
1930
1931stak:
1932 wpeek16 r4, r5
1933 wpeek8 r3
1934 asave8 r3, r4
1935 b uxn_decode
1936
1937sta2k:
1938 wpeek16 r4, r5
1939 wpeek16 r3, r5
1940 asave16 r3, r4
1941 b uxn_decode
1942
1943addk:
1944 wpeek8 r3
1945 wpeek8 r4
1946 add r3, r3, r4
1947 wpush8 r3
1948 b uxn_decode
1949
1950add2k:
1951 wpeek16 r3, r5
1952 wpeek16 r4, r5
1953 add r3, r3, r4
1954 wpush16 r3
1955 b uxn_decode
1956
1957subk:
1958 wpeek8 r3
1959 wpeek8 r4
1960 sub r4, r4, r3
1961 wpush8 r4
1962 b uxn_decode
1963
1964sub2k:
1965 wpeek16 r3, r5
1966 wpeek16 r4, r5
1967 sub r3, r4, r3
1968 wpush16 r3
1969 b uxn_decode
1970
1971mulk:
1972 wpeek8 r3
1973 wpeek8 r4
1974 mul r4, r3, r4
1975 wpush8 r4
1976 b uxn_decode
1977
1978mul2k:
1979 wpeek16 r3, r5
1980 wpeek16 r4, r5
1981 mul r3, r4, r3
1982 wpush16 r3
1983 b uxn_decode
1984
1985divk:
1986 wpeek8 r3
1987 wpeek8 r4
1988 push {r0, r1, r2, r7, lr}
1989 mov r1, r3
1990 mov r0, r4
1991 bl __aeabi_uidiv
1992 mov r3, r0
1993 pop {r0, r1, r2, r7, lr}
1994 wpush8 r3
1995 b uxn_decode
1996
1997div2k:
1998 wpeek16 r3, r5
1999 wpeek16 r4, r5
2000 push {r0, r1, r2, r7, lr}
2001 mov r1, r3
2002 mov r0, r4
2003 bl __aeabi_uidiv
2004 mov r3, r0
2005 pop {r0, r1, r2, r7, lr}
2006 wpush16 r3
2007 b uxn_decode
2008
2009andk:
2010 wpeek8 r3
2011 wpeek8 r4
2012 and r3, r3, r4
2013 wpush8 r3
2014 b uxn_decode
2015
2016and2k:
2017 wpeek16 r3, r5
2018 wpeek16 r4, r5
2019 and r3, r3, r4
2020 wpush16 r3
2021 b uxn_decode
2022
2023orak:
2024 wpeek8 r3
2025 wpeek8 r4
2026 orr r3, r3, r4
2027 wpush8 r3
2028 b uxn_decode
2029
2030ora2k:
2031 wpeek16 r3, r5
2032 wpeek16 r4, r5
2033 orr r3, r3, r4
2034 wpush16 r3
2035 b uxn_decode
2036
2037eork:
2038 wpeek8 r3
2039 wpeek8 r4
2040 eor r3, r3, r4
2041 wpush8 r3
2042 b uxn_decode
2043
2044eor2k:
2045 wpeek16 r3, r5
2046 wpeek16 r4, r5
2047 eor r3, r3, r4
2048 wpush16 r3
2049 b uxn_decode
2050
2051sftk:
2052 wpeek8 r4
2053 wpeek8 r3
2054 lsr r5, r4, #4
2055 and r4, #0x0f
2056 lsr r3, r3, r4
2057 lsl r3, r3, r5
2058 wpush8 r3
2059 b uxn_decode
2060
2061sft2k:
2062 wpeek8 r4
2063 wpeek16 r3, r5
2064 lsr r5, r4, #4
2065 and r4, #0x0f
2066 lsr r3, r3, r4
2067 lsl r3, r3, r5
2068 wpush16 r3
2069 b uxn_decode
2070
2071.ltorg
2072.align 2