aboutsummaryrefslogtreecommitdiffstats
path: root/src/uxn-core.s
diff options
context:
space:
mode:
authorBad Diode <bd@badd10de.dev>2023-08-29 14:46:50 +0200
committerBad Diode <bd@badd10de.dev>2023-08-29 14:46:50 +0200
commit261fffa6e9772efd1c7648f7d11b4da3e19cf5dd (patch)
treeb2ecad33d279108ebd58c7ea2deced69a3aa216b /src/uxn-core.s
parentb1b6d258cd8b2dae16815ff239bc9db353e170aa (diff)
downloaduxngba-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.s77
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
18rst_ptr: .word rst 18rst_ptr: .word rst
19 19
20.global io_ports 20.global device_data
21io_ports: .space 256 21device_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
32uxn_eval_asm: 32uxn_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
159op_table: 162op_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
776dei_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
772dei: 794dei:
773 b uxn_decode 795 b uxn_decode
774 796
775dei2: 797dei2:
776 b uxn_decode 798 b uxn_decode
777 799
800.global deo_map
801deo_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
778deo: 819deo:
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
781deo2: 836deo2:
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
784add: 853add: