Casio_asm/CASIO_fxlib/bin/getkey.s

107 lines
1.4 KiB
ArmAsm

.export _getkey
.export _system_menu
_getkey:
sts.l pr, @-r15
mov.l r12, @-r15
mov.l r13, @-r15
; Getting some free space and storing stack addresses for later.
add #-4, r15
mov r15, r12 ; column
add #-4, r15
mov r15, r13 ; row
add #-4, r15
mov r15, r1 ; keycode
mov r12, r4 ; column
mov r13, r5 ; row
mov #0, r6 ; type_of_waiting
mov #0, r7 ; timeout_period
; Pushing the following arguments to the stack. (in order !)
mov.l r1, @-r15 ; keycode
mov #1, r2
mov.l r2, @-r15 ; menu
; Calling subfunction.
mov.l syscall_table, r1
mov.l getkeywait, r0
jsr @r1
nop
; Retrieving keycode.
mov.l @r12, r0
shll8 r0
mov.l @r13, r1
or r1, r0
add #20, r15
; Returning.
mov.l @r15+, r13
mov.l @r15+, r12
lds.l @r15+, pr
rts
nop
_system_menu:
sts.l pr, @-r15
add #-4, r15
; Putting the matrix code in the key buffer.
mov r15, r4
mov.w matrixcode_menu, r2
mov.w r2, @r4
mov.l syscall_table, r1
mov.l putmatrixcode, r0
jsr @r1
nop
; Calling getkeywait().
mov r15, r4
add #-4, r15
mov r15, r5
add #-4, r15
mov r15, r1
mov #2, r6
mov #0, r7
mov.l r1, @-r15
mov #0, r2
mov.l r2, @-r15
mov.l syscall_table, r1
mov.l getkeywait, r0
jsr @r1
nop
add #20, r15
lds.l @r15+, pr
rts
nop
.align 4
syscall_table:
.data.l h'80010070
getkeywait:
.data.l h'0247
getkey:
.data.l h'090f
putmatrixcode:
.data.l h'024f
putkeycode:
.data.l h'0910
keycode_menu:
.data.l d'30003
matrixcode_menu:
.data.w h'0308
.end