2023-03-08 12:33:20 +08:00

41 lines
749 B
ArmAsm

.file "key_onoff.c"
.text
.align 2
.global _start
.type _start,function
_start:
mov r0, #0x4000000
ldr r0, [r0, #0x130] @ r0 = read_io(0x4000130)
ldrh r1, [pc, #0x3c] @ r1 = 0x384 key:L+R+D+SEL
ldrh r2, [pc, #0x3a] @ r2 = 0x3ff
and r0, r0, r2 @ r0 = r0 & 0x3ff
ldr r2, [pc, #0x34] @ r2 = static_addr(isOn)
ldrb r3, [r2] @ r3 = *isOn
cmp r0, r1
beq _mark
@ if r0 != key
ands r1, r3, #0x10
andne r3, r3, #0xf
strneb r3, [r2] @ if r3 & 0x10 then *isOn = r3 & 0xf end
_final:
cmp r3, #0
bne _next
bx lr
_mark: @ else // r0 == key
ands r1, r3, #0x10
eoreq r3, r3, #0x11
streqb r3, [r2] @ if r3 & 0x10 == 0 then *isOn = !r3 | 0x10 end
b _final
_const:
.long 0x03ff0384
.long 0
_next:
.long 0xFFFFFFFF