diff options
author | Bad Diode <bd@badd10de.dev> | 2023-08-29 17:37:41 +0200 |
---|---|---|
committer | Bad Diode <bd@badd10de.dev> | 2023-08-29 17:37:41 +0200 |
commit | 418aa7666a15ad3348633cc822c56a56eee7c4d9 (patch) | |
tree | e82b95b85f2ff1d29698844203d624113f5aac5c | |
parent | 9dc972fd0cdd9f7cac45aa0d0f30ad8751a8c0d5 (diff) | |
download | uxngba-418aa7666a15ad3348633cc822c56a56eee7c4d9.tar.gz uxngba-418aa7666a15ad3348633cc822c56a56eee7c4d9.zip |
Add OPk functions (untested)
-rw-r--r-- | src/main.c | 1 | ||||
-rw-r--r-- | src/uxn-core.s | 660 |
2 files changed, 587 insertions, 74 deletions
@@ -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 | ||
507 | deir: | 517 | deir: |
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 | |||
536 | dei2r: | ||
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 | |||
555 | deor: | ||
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 | |||
575 | deo2r: | ||
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 | |||
595 | deik: | ||
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 | ||
526 | dei2r: | 614 | dei2k: |
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 | ||
545 | deor: | 633 | deok: |
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 | ||
565 | deo2r: | 653 | deo2k: |
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 | |||
714 | inc: | 805 | inc: |
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 | |||
1651 | inck: | ||
1652 | wpeek8 r3 | ||
1653 | add r3, #1 | ||
1654 | wpush8 r3 | ||
1655 | b uxn_decode | ||
1656 | |||
1657 | inc2k: | ||
1658 | wpeek16 r3, r5 | ||
1659 | add r3, r3, #1 | ||
1660 | wpush16 r3 | ||
1661 | b uxn_decode | ||
1662 | |||
1663 | popk: | ||
1664 | sub r1, #1 | ||
1665 | b uxn_decode | ||
1666 | |||
1667 | pop2k: | ||
1668 | sub r1, #2 | ||
1669 | b uxn_decode | ||
1670 | |||
1671 | nipk: | ||
1672 | wpeek8 r3 | ||
1673 | strb r3, [r1, #-1] | ||
1674 | b uxn_decode | ||
1675 | |||
1676 | nip2k: | ||
1677 | wpeek16 r3, r5 | ||
1678 | strb r3, [r1, #-1] | ||
1679 | lsr r3, #8 | ||
1680 | strb r3, [r1, #-2] | ||
1681 | b uxn_decode | ||
1682 | |||
1683 | swpk: | ||
1684 | wpeek8 r3 | ||
1685 | wpeek8 r4 | ||
1686 | wpush8 r3 | ||
1687 | wpush8 r4 | ||
1688 | b uxn_decode | ||
1689 | |||
1690 | swp2k: | ||
1691 | wpeek16 r3, r5 | ||
1692 | wpeek16 r4, r5 | ||
1693 | wpush16 r3 | ||
1694 | wpush16 r4 | ||
1695 | b uxn_decode | ||
1696 | |||
1697 | rotk: | ||
1698 | wpeek8 r5 | ||
1699 | wpeek8 r4 | ||
1700 | wpeek8 r3 | ||
1701 | wpush8 r4 | ||
1702 | wpush8 r5 | ||
1703 | wpush8 r3 | ||
1704 | b uxn_decode | ||
1705 | |||
1706 | rot2k: | ||
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 | |||
1715 | dupk: | ||
1716 | wpeek r3, #-1 | ||
1717 | wpush8 r3 | ||
1718 | b uxn_decode | ||
1719 | |||
1720 | dup2k: | ||
1721 | wpeek r3, #-2 | ||
1722 | wpeek r4, #-1 | ||
1723 | wpush8 r3 | ||
1724 | wpush8 r4 | ||
1725 | b uxn_decode | ||
1726 | |||
1727 | ovrk: | ||
1728 | wpeek r3, #-2 | ||
1729 | wpush8 r3 | ||
1730 | b uxn_decode | ||
1731 | |||
1732 | ovr2k: | ||
1733 | wpeek r3, #-4 | ||
1734 | wpeek r4, #-3 | ||
1735 | wpush8 r3 | ||
1736 | wpush8 r4 | ||
1737 | b uxn_decode | ||
1738 | |||
1739 | equk: | ||
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 | |||
1748 | equ2k: | ||
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 | |||
1757 | neqk: | ||
1758 | wpeek8 r3 | ||
1759 | wpeek8 r4 | ||
1760 | subs r3, r4, r3 | ||
1761 | movne r3, #1 | ||
1762 | wpush8 r3 | ||
1763 | b uxn_decode | ||
1764 | |||
1765 | neq2k: | ||
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 | |||
1773 | gthk: | ||
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 | |||
1782 | gth2k: | ||
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 | |||
1791 | lthk: | ||
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 | |||
1800 | lth2k: | ||
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 | |||
1809 | jmpk: | ||
1810 | wpop8s r3 | ||
1811 | add r0, r3 | ||
1812 | b uxn_decode | ||
1813 | |||
1814 | jmp2k: | ||
1815 | wpeek16 r3, r5 | ||
1816 | mov r0, r7 | ||
1817 | add r0, r0, r3 | ||
1818 | b uxn_decode | ||
1819 | |||
1820 | jcnk: | ||
1821 | wpop8s r3 | ||
1822 | wpeek8 r4 | ||
1823 | cmp r4, #0 | ||
1824 | addne r0, r3 | ||
1825 | b uxn_decode | ||
1826 | |||
1827 | jcn2k: | ||
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 | |||
1836 | jsrk: | ||
1837 | mov r3, r0 | ||
1838 | sub r3, r3, r7 | ||
1839 | rpush16 r3 | ||
1840 | wpop8s r3 | ||
1841 | add r0, r3 | ||
1842 | b uxn_decode | ||
1843 | |||
1844 | jsr2k: | ||
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 | |||
1852 | sthk: | ||
1853 | wpeek8 r3 | ||
1854 | rpush8 r3 | ||
1855 | b uxn_decode | ||
1856 | |||
1857 | sth2k: | ||
1858 | wpeek16 r3, r5 | ||
1859 | rpush16 r3 | ||
1860 | b uxn_decode | ||
1861 | |||
1862 | ldzk: | ||
1863 | wpeek8 r3 | ||
1864 | zload8 r4, r3 | ||
1865 | wpush8 r4 | ||
1866 | b uxn_decode | ||
1867 | |||
1868 | ldz2k: | ||
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 | |||
1877 | stzk: | ||
1878 | wpeek8 r3 | ||
1879 | wpeek8 r4 | ||
1880 | zsave8 r4, r3 | ||
1881 | b uxn_decode | ||
1882 | |||
1883 | stz2k: | ||
1884 | wpeek8 r3 | ||
1885 | wpeek16 r4, r5 | ||
1886 | zsave16 r4, r3 | ||
1887 | b uxn_decode | ||
1888 | |||
1889 | ldrk: | ||
1890 | wpop8s r4 | ||
1891 | rload8 r3, r4 | ||
1892 | wpush8 r3 | ||
1893 | b uxn_decode | ||
1894 | |||
1895 | ldr2k: | ||
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 | |||
1904 | strk: | ||
1905 | wpop8s r4 | ||
1906 | wpeek8 r3 | ||
1907 | rsave8 r3, r4 | ||
1908 | b uxn_decode | ||
1909 | |||
1910 | str2k: | ||
1911 | wpop8s r4 | ||
1912 | wpeek16 r3, r5 | ||
1913 | rsave16 r3, r4 | ||
1914 | b uxn_decode | ||
1915 | |||
1916 | ldak: | ||
1917 | wpeek16 r4, r5 | ||
1918 | aload8 r3, r4 | ||
1919 | wpush8 r3 | ||
1920 | b uxn_decode | ||
1921 | |||
1922 | lda2k: | ||
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 | |||
1931 | stak: | ||
1932 | wpeek16 r4, r5 | ||
1933 | wpeek8 r3 | ||
1934 | asave8 r3, r4 | ||
1935 | b uxn_decode | ||
1936 | |||
1937 | sta2k: | ||
1938 | wpeek16 r4, r5 | ||
1939 | wpeek16 r3, r5 | ||
1940 | asave16 r3, r4 | ||
1941 | b uxn_decode | ||
1942 | |||
1943 | addk: | ||
1944 | wpeek8 r3 | ||
1945 | wpeek8 r4 | ||
1946 | add r3, r3, r4 | ||
1947 | wpush8 r3 | ||
1948 | b uxn_decode | ||
1949 | |||
1950 | add2k: | ||
1951 | wpeek16 r3, r5 | ||
1952 | wpeek16 r4, r5 | ||
1953 | add r3, r3, r4 | ||
1954 | wpush16 r3 | ||
1955 | b uxn_decode | ||
1956 | |||
1957 | subk: | ||
1958 | wpeek8 r3 | ||
1959 | wpeek8 r4 | ||
1960 | sub r4, r4, r3 | ||
1961 | wpush8 r4 | ||
1962 | b uxn_decode | ||
1963 | |||
1964 | sub2k: | ||
1965 | wpeek16 r3, r5 | ||
1966 | wpeek16 r4, r5 | ||
1967 | sub r3, r4, r3 | ||
1968 | wpush16 r3 | ||
1969 | b uxn_decode | ||
1970 | |||
1971 | mulk: | ||
1972 | wpeek8 r3 | ||
1973 | wpeek8 r4 | ||
1974 | mul r4, r3, r4 | ||
1975 | wpush8 r4 | ||
1976 | b uxn_decode | ||
1977 | |||
1978 | mul2k: | ||
1979 | wpeek16 r3, r5 | ||
1980 | wpeek16 r4, r5 | ||
1981 | mul r3, r4, r3 | ||
1982 | wpush16 r3 | ||
1983 | b uxn_decode | ||
1984 | |||
1985 | divk: | ||
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 | |||
1997 | div2k: | ||
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 | |||
2009 | andk: | ||
2010 | wpeek8 r3 | ||
2011 | wpeek8 r4 | ||
2012 | and r3, r3, r4 | ||
2013 | wpush8 r3 | ||
2014 | b uxn_decode | ||
2015 | |||
2016 | and2k: | ||
2017 | wpeek16 r3, r5 | ||
2018 | wpeek16 r4, r5 | ||
2019 | and r3, r3, r4 | ||
2020 | wpush16 r3 | ||
2021 | b uxn_decode | ||
2022 | |||
2023 | orak: | ||
2024 | wpeek8 r3 | ||
2025 | wpeek8 r4 | ||
2026 | orr r3, r3, r4 | ||
2027 | wpush8 r3 | ||
2028 | b uxn_decode | ||
2029 | |||
2030 | ora2k: | ||
2031 | wpeek16 r3, r5 | ||
2032 | wpeek16 r4, r5 | ||
2033 | orr r3, r3, r4 | ||
2034 | wpush16 r3 | ||
2035 | b uxn_decode | ||
2036 | |||
2037 | eork: | ||
2038 | wpeek8 r3 | ||
2039 | wpeek8 r4 | ||
2040 | eor r3, r3, r4 | ||
2041 | wpush8 r3 | ||
2042 | b uxn_decode | ||
2043 | |||
2044 | eor2k: | ||
2045 | wpeek16 r3, r5 | ||
2046 | wpeek16 r4, r5 | ||
2047 | eor r3, r3, r4 | ||
2048 | wpush16 r3 | ||
2049 | b uxn_decode | ||
2050 | |||
2051 | sftk: | ||
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 | |||
2061 | sft2k: | ||
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 | ||