forked from acco/chti23
54 lines
No EOL
1.3 KiB
ArmAsm
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
|
|
|