.asciz "PRG" stmfd sp!,{r0-r12,lr} GoDeb: mov r10,#0xc0000010 ldr r10,[r10] adr r2,ImgNb ldr r0,[r2] add r0,#4 cmp r0,#60 moveq r0,#0 str r0,[r2] adr r11,ImOffset add r11,r0 ldr r11,[r11] add r11,pc sub r11,#60 mov r0,#38400 afflp: ldr r2,[r11],#4 str r2,[r10],#4 subs r0,#1 bne afflp mov r1,#3 mov r2,#0 bl CaseEff bl Quadrill MainLp: bl WAITKEY cmp r12,#73 bleq Bas cmp r12,#71 bleq Haut cmp r12,#30 bleq Droite cmp r12,#26 bleq Gauche cmp r12,#74 beq FinPrg cmp r12,#76 beq GoDeb cmp r12,#86 bne MainLp MELANGE: adr r0,V900e0010 ldr r0,[r0] adr r8,Random ldr r9,[r8] wn0k_lp: ldm r0,{r3-r6} add r9,#1 orr r3,r3,r4 orr r4,r5,r6 orrs r3,r3,r4 bne wn0k_lp str r9,[r8] and r9,#0b11111111 adr r7,ImOffset ldr r7,[r7] add r7,r9 mov r12,#0 MixLp: ldrb r12,[r7],#1 and r12,#0b11 cmp r12,#0 bne PBas cmp r2,#3 beq PBas cmp r11,#1 movne r11,r12 blne Bas PBas: cmp r12,#1 bne PHaut cmp r2,#0 beq PHaut cmp r11,#0 movne r11,r12 blne Haut PHaut: cmp r12,#2 bne PDroi cmp r1,#3 beq PDroi cmp r11,#3 movne r11,r12 blne Droite PDroi: cmp r12,#3 bne PGau cmp r1,#0 beq PGau cmp r11,#2 movne r11,r12 blne Gauche PGau: adr r0,V900e0010 ldr r0,[r0] ldm r0,{r3-r6} orr r3,r3,r4 orr r4,r5,r6 orrs r3,r3,r4 beq MixLp b MainLp FinPrg: ldmfd sp!,{r0-r12,pc} @______________________________________________ .align Random: .long 0 ImgNb: .long 0 ImOffset: .long Image01,Image02,Image03,Image04,Image05,Image06 .long Image07,Image08,Image09,Image10,Image11,Image12 .long Image13,Image14,Image15 @______________________________________________ WAITKEY: stmfd sp!,{r0,r3-r11,lr} @ CS: r12 = code "clavier" entre 1 et 88 adr r0,V900e0010 ldr r0,[r0] adr r8,Random ldr r9,[r8] wnok_lp: ldm r0,{r3-r6} add r9,#1 orr r3,r3,r4 orr r4,r5,r6 orrs r3,r3,r4 bne wnok_lp wk_lp: ldm r0,{r3-r6} add r9,#1 orr r3,r3,r4 orr r4,r5,r6 orrs r3,r3,r4 beq wk_lp mov r3,#0 mov r4,#8 key_lp: mov r11,#0 add r9,#1 ldrh r11,[r0],#2 clz r11,r11 rsbs r11,r11,#32 addne r12,r11,r3 add r3,#11 subs r4,#1 bne key_lp str r9,[r8] ldmfd sp!,{r0,r3-r11,pc} .align V900e0010: .long 0x900e0010 @_____________________________________________________________________ AffCase: stmfd sp!,{r0-r12,lr} @ CE: r12 = position ecran adr r0,Dummy mov r5,#60 afht_lp: mov r4,#40 aflrg_lp: ldr r3,[r0],#4 str r3,[r12],#4 subs r4,#1 bne aflrg_lp add r12,#480 subs r5,#1 bne afht_lp ldmfd sp!,{r0-r12,pc} @_____________________________________________________________________ Gauche: stmfd sp!,{r0,r3-r12,lr} cmp r1,#0 beq PasGau sub r1,#1 bl CaseMemo mov r12,#0xc0000010 ldr r12,[r12] mov r3,#160 mla r12,r1,r3,r12 mov r5,#38400 mla r12,r2,r5,r12 mov r10,#10 KontG: bl EffVertiG add r12,#16 bl AffCase bl WaitVSync subs r10,#1 bne KontG PasGau: ldmfd sp!,{r0,r3-r12,pc} @_____________________________________________________________________ Droite: stmfd sp!,{r0,r3-r12,lr} cmp r1,#3 beq PasDroi add r1,#1 bl CaseMemo mov r12,#0xc0000010 ldr r12,[r12] mov r3,#160 mla r12,r1,r3,r12 mov r5,#38400 mla r12,r2,r5,r12 mov r10,#10 KontD: bl EffVertiD sub r12,#16 bl AffCase bl WaitVSync subs r10,#1 bne KontD PasDroi: ldmfd sp!,{r0,r3-r12,pc} @_____________________________________________________________________ Bas: stmfd sp!,{r0,r3-r12,lr} cmp r2,#3 beq PasBas add r2,#1 bl CaseMemo mov r12,#0xc0000010 ldr r12,[r12] mov r3,#160 mla r12,r1,r3,r12 mov r5,#38400 mla r12,r2,r5,r12 ldr r9,=#3840 mov r10,#10 KontB: bl EffHorizB sub r12,r9 bl AffCase bl WaitVSync subs r10,#1 bne KontB PasBas: ldmfd sp!,{r0,r3-r12,pc} @_____________________________________________________________________ Haut: stmfd sp!,{r0,r3-r12,lr} cmp r2,#0 beq PasHau sub r2,#1 bl CaseMemo mov r12,#0xc0000010 ldr r12,[r12] mov r3,#160 mla r12,r1,r3,r12 mov r5,#38400 mla r12,r2,r5,r12 ldr r9,=#3840 mov r10,#10 KontH: bl EffHorizH add r12,r9 bl AffCase bl WaitVSync subs r10,#1 bne KontH PasHau: ldmfd sp!,{r0,r3-r12,pc} @_____________________________________________________________________ EffVertiG: stmfd sp!,{r0-r12,lr} @ CE: r12 = position ecran mov r0,r12 mov r3,#0 mov r5,#60 efVtG_lp: mov r4,#4 efVlG_lp: str r3,[r0],#4 subs r4,#1 bne efVlG_lp add r0,#624 subs r5,#1 bne efVtG_lp ldmfd sp!,{r0-r12,pc} @_____________________________________________________________________ EffVertiD: stmfd sp!,{r0-r12,lr} @ CE: r12 = position ecran add r0,r12,#144 mov r3,#0 mov r5,#60 efVtD_lp: mov r4,#4 efVlD_lp: str r3,[r0],#4 subs r4,#1 bne efVlD_lp add r0,#624 subs r5,#1 bne efVtD_lp ldmfd sp!,{r0-r12,pc} @_____________________________________________________________________ EffHorizH: stmfd sp!,{r0-r12,lr} @ CE: r12 = position ecran mov r0,r12 mov r3,#0 mov r5,#6 efhob_lp: mov r4,#40 eflab_lp: str r3,[r0],#4 subs r4,#1 bne eflab_lp add r0,#480 subs r5,#1 bne efhob_lp ldmfd sp!,{r0-r12,pc} @_____________________________________________________________________ EffHorizB: stmfd sp!,{r0-r12,lr} @ CE: r12 = position ecran ldr r11,=#34560 add r0,r12,r11 mov r3,#0 mov r5,#6 efht_lp: mov r4,#40 eflrg_lp: str r3,[r0],#4 subs r4,#1 bne eflrg_lp add r0,#480 subs r5,#1 bne efht_lp ldmfd sp!,{r0-r12,pc} @_____________________________________________________________________ CaseEff: stmfd sp!,{r0,r3-r12,lr} mov r12,#0xc0000010 ldr r12,[r12] mov r3,#160 mla r12,r1,r3,r12 mov r5,#38400 mla r12,r2,r5,r12 mov r0,#0 mov r5,#60 cbef_lp: mov r4,#40 cblef_lp: str r0,[r12],#4 subs r4,#1 bne cblef_lp add r12,#480 subs r5,#1 bne cbef_lp ldmfd sp!,{r0,r3-r12,pc} @_____________________________________________________________________ CaseMemo: stmfd sp!,{r0,r3-r12,lr} mov r12,#0xc0000010 ldr r12,[r12] mov r3,#160 mla r12,r1,r3,r12 mov r5,#38400 mla r12,r2,r5,r12 adr r0,Dummy mov r5,#60 cbht_lp: mov r4,#40 cblrg_lp: ldr r3,[r12],#4 str r3,[r0],#4 subs r4,#1 bne cblrg_lp add r12,#480 subs r5,#1 bne cbht_lp ldmfd sp!,{r0,r3-r12,pc} @_____________________________________________________________________ Quadrill: stmfd sp!,{r0-r12,lr} mov r6,#0xc0000010 ldr r0,[r6] mov r4,#640 mov r5,#59 mul r4,r5,r4 mov r3,#4 mov r1,#0 Quatreh: mov r2,#160 Hori_lp: str r1,[r0],#4 subs r2,#1 bne Hori_lp add r0,r4 subs r3,#1 bne Quatreh ldr r6,[r6] mov r3,#4 Quatrev: mov r0,r6 mov r2,#240 Verti_lp: strh r1,[r0] add r0,#640 subs r2,#1 bne Verti_lp add r6,#160 subs r3,#1 bne Quatrev ldmfd sp!,{r0-r12,pc} @_____________________________________________________________________ WaitVSync: stmfd sp!,{r0-r1,lr} mov r0,#0xC0000008 str r0,[r0,#32] wvs_lp: ldr r1,[r0,#24] ands r1,r0 beq wvs_lp ldmfd sp!,{r0-r1,pc} @_____________________________________________________________________ .align Dummy: .incbin "dummy.bin" .align Image01: .incbin "samuel-scrimshaw-76649.bmp",70 Image02: .incbin "amos-bar-zeev.bmp",70 Image03: .incbin "andrew-pons-57133.bmp",70 Image04: .incbin "benjamin-combs-27619.bmp",70 Image05: .incbin "harald-hofer-214964.bmp",70 Image06: .incbin "hisu-lee-38286.bmp",70 Image07: .incbin "john-cobb-14128.bmp",70 Image08: .incbin "jonatan-pie-117073.bmp",70 Image09: .incbin "lechon-kirb-25696.bmp",70 Image10: .incbin "matthew-henry-115712.bmp",70 Image11: .incbin "matt-jones-67226.bmp",70 Image12: .incbin "mike-wilson-140883.bmp",70 Image13: .incbin "nasa-43567.bmp",70 Image14: .incbin "nasa-43979.bmp",70 Image15: .incbin "roksolana-zasiadko-31346.bmp",70