diff options
author | Bad Diode <bd@badd10de.dev> | 2023-08-29 14:46:50 +0200 |
---|---|---|
committer | Bad Diode <bd@badd10de.dev> | 2023-08-29 14:46:50 +0200 |
commit | 261fffa6e9772efd1c7648f7d11b4da3e19cf5dd (patch) | |
tree | b2ecad33d279108ebd58c7ea2deced69a3aa216b /src/uxn-core.s | |
parent | b1b6d258cd8b2dae16815ff239bc9db353e170aa (diff) | |
download | uxngba-261fffa6e9772efd1c7648f7d11b4da3e19cf5dd.tar.gz uxngba-261fffa6e9772efd1c7648f7d11b4da3e19cf5dd.zip |
Add initial implementation of DEO/DEO2
Diffstat (limited to 'src/uxn-core.s')
-rw-r--r-- | src/uxn-core.s | 77 |
1 files changed, 73 insertions, 4 deletions
diff --git a/src/uxn-core.s b/src/uxn-core.s index d32f303..c73d44c 100644 --- a/src/uxn-core.s +++ b/src/uxn-core.s | |||
@@ -17,16 +17,16 @@ rst: .space 256 | |||
17 | .global rst_ptr | 17 | .global rst_ptr |
18 | rst_ptr: .word rst | 18 | rst_ptr: .word rst |
19 | 19 | ||
20 | .global io_ports | 20 | .global device_data |
21 | io_ports: .space 256 | 21 | device_data: .space 256 |
22 | 22 | ||
23 | @ UXN evaluation function. | 23 | @ UXN evaluation function. |
24 | @ | 24 | @ |
25 | @ r0: PC pointer (argument is offset from RAM). | 25 | @ r0: PC pointer (argument for this function is the offset from UXN RAM). |
26 | @ r1: Stack pointer (wst). | 26 | @ r1: Stack pointer (wst). |
27 | @ r2: Stack pointer (rst). | 27 | @ r2: Stack pointer (rst). |
28 | @ r7: Ram ptr. | ||
29 | @ r3-r6: Scratch registers. | 28 | @ r3-r6: Scratch registers. |
29 | @ r7: Ram ptr. | ||
30 | @ | 30 | @ |
31 | .global uxn_eval_asm | 31 | .global uxn_eval_asm |
32 | uxn_eval_asm: | 32 | uxn_eval_asm: |
@@ -155,7 +155,10 @@ uxn_ret: | |||
155 | strb \a, [\off] | 155 | strb \a, [\off] |
156 | .endm | 156 | .endm |
157 | 157 | ||
158 | @ | ||
158 | @ OP table | 159 | @ OP table |
160 | @ | ||
161 | |||
159 | op_table: | 162 | op_table: |
160 | .word brk @ 0x00 | 163 | .word brk @ 0x00 |
161 | .word inc @ 0x01 | 164 | .word inc @ 0x01 |
@@ -769,16 +772,82 @@ sta2: | |||
769 | asave16 r3, r4 | 772 | asave16 r3, r4 |
770 | b uxn_decode | 773 | b uxn_decode |
771 | 774 | ||
775 | .global dei_map | ||
776 | dei_map: | ||
777 | .word uxn_ret | ||
778 | .word uxn_ret | ||
779 | .word uxn_ret | ||
780 | .word uxn_ret | ||
781 | .word uxn_ret | ||
782 | .word uxn_ret | ||
783 | .word uxn_ret | ||
784 | .word uxn_ret | ||
785 | .word uxn_ret | ||
786 | .word uxn_ret | ||
787 | .word uxn_ret | ||
788 | .word uxn_ret | ||
789 | .word uxn_ret | ||
790 | .word uxn_ret | ||
791 | .word uxn_ret | ||
792 | .word uxn_ret | ||
793 | |||
772 | dei: | 794 | dei: |
773 | b uxn_decode | 795 | b uxn_decode |
774 | 796 | ||
775 | dei2: | 797 | dei2: |
776 | b uxn_decode | 798 | b uxn_decode |
777 | 799 | ||
800 | .global deo_map | ||
801 | deo_map: | ||
802 | .word uxn_ret | ||
803 | .word uxn_ret | ||
804 | .word uxn_ret | ||
805 | .word uxn_ret | ||
806 | .word uxn_ret | ||
807 | .word uxn_ret | ||
808 | .word uxn_ret | ||
809 | .word uxn_ret | ||
810 | .word uxn_ret | ||
811 | .word uxn_ret | ||
812 | .word uxn_ret | ||
813 | .word uxn_ret | ||
814 | .word uxn_ret | ||
815 | .word uxn_ret | ||
816 | .word uxn_ret | ||
817 | .word uxn_ret | ||
818 | |||
778 | deo: | 819 | deo: |
820 | wpop8 r3 | ||
821 | mov r4, r3, lsr #4 @ idx | ||
822 | and r3, #0x0f @ port | ||
823 | wpop8 r5 @ value | ||
824 | adr r6, deo_map | ||
825 | ldr r6, [r6, r4, lsl #2] | ||
826 | stmfd sp!, {r0, r7, lr} | ||
827 | mov r0, r3 | ||
828 | mov r1, r5 | ||
829 | mov lr, pc | ||
830 | bx r6 | ||
831 | ldmfd sp!, {r0, r7, lr} | ||
832 | ldr r1, wst_ptr | ||
833 | ldr r2, rst_ptr | ||
779 | b uxn_decode | 834 | b uxn_decode |
780 | 835 | ||
781 | deo2: | 836 | deo2: |
837 | wpop8 r3 | ||
838 | mov r4, r3, lsr #4 @ idx | ||
839 | and r3, #0x0f @ port | ||
840 | wpop16 r5, r6 @ value | ||
841 | adr r6, deo_map | ||
842 | ldr r6, [r6, r4, lsl #2] | ||
843 | stmfd sp!, {r0, r7, lr} | ||
844 | mov r0, r3 | ||
845 | mov r1, r5 | ||
846 | mov lr, pc | ||
847 | bx r6 | ||
848 | ldmfd sp!, {r0, r7, lr} | ||
849 | ldr r1, wst_ptr | ||
850 | ldr r2, rst_ptr | ||
782 | b uxn_decode | 851 | b uxn_decode |
783 | 852 | ||
784 | add: | 853 | add: |