aboutsummaryrefslogtreecommitdiffstats
path: root/src/uxn-core.s
diff options
context:
space:
mode:
authorBad Diode <bd@badd10de.dev>2023-08-29 18:18:37 +0200
committerBad Diode <bd@badd10de.dev>2023-08-29 18:18:37 +0200
commit56c43c1e27fb6cd2c536ce12a199ad69acfd3633 (patch)
tree72bc42696cbdd3500aaac730bb1ef656245c0ef2 /src/uxn-core.s
parent4f0a38e9b1d98d07a36499e3024518b7e78f261c (diff)
downloaduxngba-56c43c1e27fb6cd2c536ce12a199ad69acfd3633.tar.gz
uxngba-56c43c1e27fb6cd2c536ce12a199ad69acfd3633.zip
Test and fix DEO with (DEI/DEO2 et al still incorrect)
Diffstat (limited to 'src/uxn-core.s')
-rw-r--r--src/uxn-core.s13
1 files changed, 13 insertions, 0 deletions
diff --git a/src/uxn-core.s b/src/uxn-core.s
index 1a365ed..5b20e03 100644
--- a/src/uxn-core.s
+++ b/src/uxn-core.s
@@ -485,13 +485,24 @@ dei2:
485 b uxn_decode 485 b uxn_decode
486 486
487deo: 487deo:
488 @ Get args (idx/port/value).
488 wpop8 r3 489 wpop8 r3
489 mov r4, r3, lsr #4 @ idx 490 mov r4, r3, lsr #4 @ idx
490 and r3, #0x0f @ port 491 and r3, #0x0f @ port
491 wpop8 r5 @ value 492 wpop8 r5 @ value
493
494 @ Find current devide.
492 ldr r6, =deo_map 495 ldr r6, =deo_map
493 ldr r6, [r6, r4, lsl #2] 496 ldr r6, [r6, r4, lsl #2]
497
498 @ Save registers that can be affected.
494 stmfd sp!, {r0, r7, lr} 499 stmfd sp!, {r0, r7, lr}
500 ldr r0, =wst_ptr
501 str r1, [r0]
502 ldr r0, =rst_ptr
503 str r2, [r0]
504
505 @ Call the deo function.
495 ldr r0, =device_data 506 ldr r0, =device_data
496 lsl r4, #4 507 lsl r4, #4
497 add r0, r4 508 add r0, r4
@@ -499,6 +510,8 @@ deo:
499 mov r1, r3 510 mov r1, r3
500 mov lr, pc 511 mov lr, pc
501 bx r6 512 bx r6
513
514 @ Restore saved variables.
502 ldmfd sp!, {r0, r7, lr} 515 ldmfd sp!, {r0, r7, lr}
503 ldr r1, wst_ptr 516 ldr r1, wst_ptr
504 ldr r2, rst_ptr 517 ldr r2, rst_ptr