chti23_grpe_genty_pitault/soft/PjtKEIL_StepSon/Src/GestionSon.s

54 lines
No EOL
1.3 KiB
ArmAsm

PRESERVE8
THUMB
; ====================== zone de réservation de données, ======================================
;Section RAM (read only) :
area mesdata,data,readonly
IMPORT LongueurSon
IMPORT Son
;Section RAM (read write):
area maram,data,readwrite
IndexSon DCW 0
SortieSon DCW 0
EXPORT SortieSon
; ===============================================================================================
EXPORT CallbackSon
;Section ROM code (read only) :
area moncode,code,readonly
; écrire le code ici
CallbackSon proc
ldr r0, =IndexSon ; r0 = &IndexSon
ldrh r1, [r0] ; r1 = IndexSon
ldr r2, =LongueurSon ; r2 = &LongueurSon
ldr r3, [r2] ; r3 = LongueurSon
cmp r1, r3
blt NoReset
mov r1, #0 ; si IndexSon >= LongueurSon alors IndexSon = 0
NoReset
ldr r3, =Son ; r3 = &Son
ldrsh r2, [r3, r1, LSL#1] ; r2 = Son[IndexSon]
add r2, #0x8000 ; translater de [-32768;32767] à [0;65535]
mov r7, #720 ; r7 car pas besoin de le sauvegarder
mul r2, r7 ; on veut passer r2 de [0;65535] à [0;719], on multiplie par 720 puis LSR de 16 pour eviter une instruction de division
lsr r2, #16
add r1, #1 ; r1 = IndexSon + 1
str r1, [r0] ; IndexSon++;
ldr r0, =SortieSon ; r0 = &SortieSon
strh r2, [r0] ; SortieSon = ce qu'on veut
bx lr
ENDP
END