diff options
author | Bad Diode <bd@badd10de.dev> | 2023-08-29 18:18:37 +0200 |
---|---|---|
committer | Bad Diode <bd@badd10de.dev> | 2023-08-29 18:18:37 +0200 |
commit | 56c43c1e27fb6cd2c536ce12a199ad69acfd3633 (patch) | |
tree | 72bc42696cbdd3500aaac730bb1ef656245c0ef2 /src/uxn-core.s | |
parent | 4f0a38e9b1d98d07a36499e3024518b7e78f261c (diff) | |
download | uxngba-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.s | 13 |
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 | ||
487 | deo: | 487 | deo: |
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 |