************************** *** ESTIENNE Sebastien *** *** 2004 *** ************************** *** Function moveHero *** moveHero movem.l D0/A0-A1,-(A7) ; on empile move.l 20(A7),A0 ; recup @ plateau move.l 16(A7),A1 ; recup @ hero coord move.b 24(A7),D0 ; met tche mvt hero ds D0 cmpi.b #left,D0 ; touche gauche? beq sleft ; va a sleft cmpi.b #right,D0 ; touche droite? beq sright ; va a sright cmpi.b #up,D0 ; touche haut ? beq sup ; va a sup cmpi.b #down,D0 ; touche bas ? beq sdown ; va a sdown bra smoveHero sleft move.l A0,-(A7) ; empile A0=@plateau move.l A1,-(A7) ; empile A1=@herodata bsr mvLeft ; appel de mvLeft add.l #8,A7 ; on depile bra smoveHero ; on fini sright move.l A0,-(A7) ; idem... move.l A1,-(A7) bsr mvRight add.l #8,A7 bra smoveHero sup move.l A0,-(A7) move.l A1,-(A7) bsr mvUp add.l #8,A7 bra smoveHero sdown move.l A0,-(A7) move.l A1,-(A7) bsr mvDown add.l #8,A7 bra smoveHero smoveHero movem.l (A7)+,D0/A0-A1 ; on depile rts fmoveHero *** Function mvUp *** mvUp movem.l D0-D2/A0-A1,-(A7) ; on empile move.l 28(A7),A0 ; recup @ plateau move.l 24(A7),A1 ; recup @ herodata clr.l D0 ; raz de D0 (av ds plateau) move.b (A1)+,D1 ; met heroy ds D1 move.b (A1),D2 ; met herox ds D2 sub.l #1,A1 sub.l #1,D1 ; ligne au dessus add.b D1,D0 ; met heroy ds D0 mulu.l #80,D0 ; mult par 80 D0 add.l D2,D0 ; aj herox a D0 sub.l #81,D0 ; correc du au decalage adda.l D0,A0 ; se pos a @ au-dessus hero btst.b #7,(A0) ; test si case mur bne smvUp ; fin on avance pas move.l A1,-(A7) ; empile plateau move.l A0,-(A7) ; empile herodata bsr updateKeys ; maj clefs bsr updateTrap ; maj pièges bsr updateLife ; maj vies add.l #8,A7 ; on depile move.l A0,-(A7) ; empile plateau bsr hourglass ; maj sablier add.l #4,A7 ; on depile bset.b #0,(A0) ; mise a 1=depl hero move.l D2,-(A7) ; empile herox move.l D1,-(A7) ; empile heroy bsr setCursor ; appel de setCursor add.l #8,A7 ; on depile move.b (A0),-(A7) ; empile A0 bsr lDisplay ; appel de local Display add.l #2,A7 ; on depile adda.l #80,A0 ; se pos anc @ hero bclr.b #0,(A0) ; met bit a 0=eff hero move.b D1,(A1) ; met a jour heroy add.l #1,D1 ; ligne au-dessous(hero) move.l D2,-(A7) ; empile herox move.l D1,-(A7) ; empile heroy bsr setCursor ; appel de setCursor add.l #8,A7 ; on depile move.b (A0),-(A7) ; empile A0 bsr lDisplay ; appel de local Display add.l #2,A7 ; on depile sub.l #80,A0 smvUp movem.l (A7)+,D0-D2/A0-A1 ; on depile rts fmvUp *** Function mvDown *** mvDown movem.l D0-D2/A0-A1,-(A7) ; on empile move.l 28(A7),A0 ; recup @ plateau move.l 24(A7),A1 ; recup @ hero data clr.l D0 ; raz de D0 move.b (A1)+,D1 ; met heroy ds D1 move.b (A1),D2 ; met herox ds D2 sub.l #1,A1 add.l #1,D1 ; ligne au-dessous add.b D1,D0 ; met heroy ds D0 mulu.l #80,D0 ; mult par 80 D0 add.l D2,D0 ; aj herox a D0 sub.l #81,D0 ; correc du au decalage adda.l D0,A0 ; se pos a @ au-dessous btst.b #7,(A0) ; test si case mur bne smvDown ; fin on avance pas move.l A1,-(A7) ; empile herodata move.l A0,-(A7) ; empile plateau bsr updateKeys ; maj clefs bsr updateTrap ; maj pieges bsr updateLife ; maj vies add.l #8,A7 ; on depile move.l A0,-(A7) ; empile plateau bsr hourglass ; maj sablier add.l #4,A7 ; on depile bset.b #0,(A0) ; mise a 1=depl hero move.l D2,-(A7) ; empile herox move.l D1,-(A7) ; empile heroy bsr setCursor ; appel de setCursor add.l #8,A7 ; on depile move.b (A0),-(A7) ; empile A0 bsr lDisplay ; appel de local Display add.l #2,A7 ; on depile sub.l #80,A0 ; se pos anc @ hero bclr.b #0,(A0) ; met bit a 0=eff hero move.b D1,(A1) ; met a jour heroy sub.l #1,D1 ; ligne au-dessus(hero) move.l D2,-(A7) ; empile herox move.l D1,-(A7) ; empile heroy bsr setCursor ; appel de setCursor add.l #8,A7 ; on depile move.b (A0),-(A7) ; empile A0 bsr lDisplay ; appel de local Display add.l #2,A7 ; on depile add.l #80,A0 smvDown movem.l (A7)+,D0-D2/A0-A1 ; on depile rts fmvDown *** Function mvLeft *** mvLeft movem.l D0-D2/A0-A1,-(A7) ; on empile move.l 28(A7),A0 ; recup @ plateau move.l 24(A7),A1 ; recup @ hero data clr.l D0 ; raz de D0 move.b (A1)+,D1 ; met heroy ds D1 move.b (A1),D2 ; met herox ds D2 sub.l #1,A1 sub.l #1,D2 ; colonne a gauche add.b D1,D0 ; met heroy ds D0 mulu.l #80,D0 ; mult par 80 D0 add.l D2,D0 ; aj herox ds D0 sub.l #81,D0 ; correc du au decalage adda.l D0,A0 ; se pos a @ audessus btst.b #7,(A0) ; test si case mur bne smvLeft ; fin on avance pas move.l A1,-(A7) ; empile herodata move.l A0,-(A7) ; empile plateau bsr updateKeys ; maj clefs bsr updateTrap ; maj pieges bsr updateLife ; maj vies add.l #8,A7 ; on depile move.l A0,-(A7) ; empile plateau bsr hourglass ; maj sablier add.l #4,A7 ; on depile bset.b #0,(A0) ; mise a 1=depl hero move.l D2,-(A7) ; empile herox move.l D1,-(A7) ; empile heroy bsr setCursor ; appel de setCursor add.l #8,A7 ; on depile move.b (A0),-(A7) ; empile A0 bsr lDisplay ; appel de local Display add.l #2,A7 ; on depile add.l #1,A0 ; se pos anc @ hero bclr.b #0,(A0) ; met bit a 0=eff hero add.l #1,A1 move.b D2,(A1) ; met a jour herox sub.l #1,A1 add.l #1,D2 ; colonne de droite (hero) move.l D2,-(A7) ; empile herox move.l D1,-(A7) ; empile heroy bsr setCursor ; appel de setCursor add.l #8,A7 ; on depile move.b (A0),-(A7) ; empile A0 bsr lDisplay ; appel de local Display add.l #2,A7 ; on depile sub.l #1,A0 smvLeft movem.l (A7)+,D0-D2/A0-A1 ; on depile rts fmvLeft *** Function mvRight *** mvRight movem.l D0-D2/A0-A1,-(A7) ; on empile move.l 28(A7),A0 ; recup @ plateau move.l 24(A7),A1 ; recup @ hero data clr.l D0 ; raz de D0 move.b (A1)+,D1 ; met heroy ds D1 move.b (A1),D2 ; met herox ds D2 sub.l #1,A1 add.l #1,D2 ; colonne a droite add.b D1,D0 ; met heroy ds D0 mulu.l #80,D0 ; mult par 80 D0 add.l D2,D0 ; aj herox a D2 sub.l #81,D0 ; correc du au decalage adda.l D0,A0 ; se pos a @ audessus btst.b #7,(A0) ; test si case mur bne smvRight ; fin on avance pas move.l A1,-(A7) ; empile herodata move.l A0,-(A7) ; empile plateau bsr updateKeys ; maj clefs bsr updateTrap ; maj pieges bsr updateLife ; maj vies add.l #8,A7 ; on depile move.l A0,-(A7) ; empile plateau bsr hourglass ; maj sablier add.l #4,A7 ; on depile bset.b #0,(A0) ; mise a 1=depl hero move.l D2,-(A7) ; empile herox move.l D1,-(A7) ; empile heroy bsr setCursor ; appel de setCursor add.l #8,A7 ; on depile move.b (A0),-(A7) ; empile A0 bsr lDisplay ; appel de local Display add.l #2,A7 ; on depile sub.l #1,A0 ; se pos anc @ hero bclr.b #0,(A0) ; met bit a 0=eff hero add.l #1,A1 move.b D2,(A1) ; met a jour herox sub.l #1,A1 sub.l #1,D2 ; colonne de gauche (hero) move.l D2,-(A7) ; empile herox move.l D1,-(A7) ; empile heroy bsr setCursor ; appel de setCursor add.l #8,A7 ; on depile move.b (A0),-(A7) ; empile A0 bsr lDisplay ; appel de local Display add.l #2,A7 ; on depile add.l #1,A0 smvRight movem.l (A7)+,D0-D2/A0-A1 ; on depile rts fmvRight