; jump over the data, to our entry label jump .entry ; Constant elements are separated by commas $imageBird DC8, "example.bmp", 8 ; string of chars, followed by one byte $soundChoice DC8, "choose1.snd" $yaya DC8, "yaya.bmp" $rabbit DC8, "rabbit.bmp" $someConstant DC32, 12456789 ; Liste des noeuds à appeler $ChoiceObject DC32, 2, .MEDIA_02, .MEDIA_03 ; DVsxx to declare a variable in RAM, followed by the number of elements $MyArray DV8, 10 ; array of 10 bytes $RamData1 DV32, 1 ; one 32-bit integer $ChoiceMem DV32, 10 ; 10 elements for the choices, to be generated ; label definition .entry: ;; comment here should work ; Syscall test: show image and play sound lcons r0, $imageBird ; image name address in ROM located in R0 (null terminated) lcons r1, $soundChoice ; set to 0 if no sound syscall 1 lcons r0, $ChoiceObject jump .media ; no return possible, so a jump is enough ; Generic media choice manager .media: ; Les adresses des différents medias sont dans la stack ; Arguments: ; r0: address d'une structure de type "media choice" ; Local: ; t0: loop counter ; t1: increment 1 ; t2: increment 4 ; t3: current media address .media_loop_start: load t0, @r0, 4 ; Le premier élément est le nombre de choix possibles, t0 = 3 (exemple) lcons t1, 1 lcons t2, 4 mov t3, r0 .media_loop: add t3, t2 ; @++ ; ------- On appelle un autre media node push r0 ; save r0 load r0, @t3, 4 ; r0 = content in ram at address in T4 call r0 pop r0 ; TODO: wait for event sub t0, t1 ; i-- skipnz t0 ; if (r0) goto start_loop; jump .media_loop_start jump .media_loop .MEDIA_02: lcons r0, $yaya ; image name address in ROM located in R0 (null terminated) lcons r1, $soundChoice ; set to 0 if no sound syscall 1 ret .MEDIA_03: lcons r0, $rabbit lcons r1, $soundChoice syscall 1 ret .SYSCALL_TEST: ; syscall test: wait for event lcons r0, 0xFF ; wait for all event, blocking syscall 2 ; We create a stupid loop just for RAM variable testing lcons r0, 4 ; prepare loop: 4 iterations lcons r6, $RamData1 ; store address to R6 store @r6, r0, 4 ; save R0 in RAM lcons r1, 1 .loop: load r0, @r6, 4 ; load this variable sub r0, r1 store @r6, r0, 4 ; save R0 in RAM skipz r0 ; skip loop if R0 == 0 jump .loop mov r0, r2 ; copy R2 into R0 (blank space between , and R2) mov R0,R2 ; copy R2 into R0 (NO blank space between , and R2) halt