************************** *** ESTIENNE Sebastien *** *** 2004 *** ************************** **************************** *** Function delTime *** **************************** delTime movem.l D0-D1/A2,-(A7) ; on empile move.l 16(A7),A2 ; recup tottime move.l #1000000,D0 ; ini D0 cmpi.b #%00000001,dra ; si dernier clef a 1 beq niv1 ; alors branchemt niv1 cmpi.b #%00000011,dra ; si 2 derniers clef a 1 beq niv2 ; alors branchemt niv2 cmpi.b #%00000111,dra ; etc... beq niv3 cmpi.b #%00001111,dra beq niv4 cmpi.b #%00011111,dra beq niv5 cmpi.b #%00111111,dra beq niv6 cmpi.b #%01111111,dra beq niv7 cmpi.b #%11111111,dra beq niv8 niv1 add.l #0,A2 ; va a cette adresse move.b (A2),D1 ; recup val mulu.l D1,D0 ; calcule val µs bra sdelTime ; vers fin niv2 add.l #1,A2 ; etc... move.b (A2),D1 mulu.l D1,D0 bra sdelTime niv3 add.l #2,A2 move.b (A2),D1 mulu.l D1,D0 bra sdelTime niv4 add.l #3,A2 move.b (A2),D1 mulu.l D1,D0 bra sdelTime niv5 add.l #4,A2 move.b (A2),D1 mulu.l D1,D0 bra sdelTime niv6 add.l #5,A2 move.b (A2),D1 mulu.l D1,D0 bra sdelTime niv7 add.l #6,A2 move.b (A2),D1 mulu.l D1,D0 bra sdelTime niv8 add.l #7,A2 move.b (A2),D1 mulu.l D1,D0 sdelTime move.l D0,MC_tt1_cmp ; val du cpt a atteindre movem.l (A7)+,D0-D1/A2 ; on depile rts fdelTime ***************************** *** Function cyclTime *** ***************************** cyclTime movem.l D0-D1/A2,-(A7) ; on empile move.l 16(A7),A2 ; recup trtime move.l #30000,D0 ; ini D0 cmpi.b #%00000001,dra ; si dernier clef a 1 beq tps1 ; alors branchemt tps1 cmpi.b #%00000011,dra ; si 2 derniers clef a 1 beq tps2 ; alors branchemt tps2 cmpi.b #%00000111,dra ; etc... beq tps3 cmpi.b #%00001111,dra beq tps4 cmpi.b #%00011111,dra beq tps5 cmpi.b #%00111111,dra beq tps6 cmpi.b #%01111111,dra beq tps7 cmpi.b #%11111111,dra beq tps8 tps1 add.l #0,A2 ; va a cette adresse move.b (A2),D1 ; recup val mulu.l D1,D0 ; calcule val µs bra scyclTime ; vers fin tps2 add.l #1,A2 ; etc... move.b (A2),D1 mulu.l D1,D0 bra scyclTime tps3 add.l #2,A2 move.b (A2),D1 mulu.l D1,D0 bra scyclTime tps4 add.l #3,A2 move.b (A2),D1 mulu.l D1,D0 bra scyclTime tps5 add.l #4,A2 move.b (A2),D1 mulu.l D1,D0 bra scyclTime tps6 add.l #5,A2 move.b (A2),D1 mulu.l D1,D0 bra scyclTime tps7 add.l #6,A2 move.b (A2),D1 mulu.l D1,D0 bra scyclTime tps8 add.l #7,A2 move.b (A2),D1 mulu.l D1,D0 scyclTime move.l D0,MC_tt2_cmp ; val du cpt a atteindre movem.l (A7)+,D0-D1/A2 ; on depile rts fcyclTime ****************************** *** Function hourglass *** ****************************** hourglass movem.l D0/A0,-(A7) ; on empile move.l 12(A7),A0 ; recup @ plateau courante btst.b #3,(A0) ; test si sablier beq shourglass bclr.b #3,(A0) ; efface sablier du plateau move.b drb,D0 ; recup shema diodes lsr.b #1,D0 ; decalage vers droite add.b #128,D0 ; met a 1 bit 7 move.b D0,drb ; cp shema ds diodes shourglass movem.l (A7)+,D0/A0 ; on depile rts fhourglas ******************************** *** Interruption IT_Game *** ******************************** IT_Game movem.l D0,-(A7) ; on empile move.b drb,D0 ; cp shema diode ds D0 asl.b #1,D0 ; decalage a gauche move.b D0,drb ; copie shema vers diodes bset #3,MC_tt1_icr ; raz du cpt 1 sIT_Game movem.l (A7)+,D0 ; on depile rte ********************************* *** Interruption IT_Cycle *** ********************************* IT_Cycle movem.l D1,-(A7) ; on empile * Hero move move.b SUCC_BUF,-(A7) ; empile car tape move.l A0,-(A7) ; empile @ plateau move.l A1,-(A7) ; empile @ herodata bsr moveHero ; appel fct depl hero add.l #10,A7 ; on depile * Ghost (5) move move.l A0,-(A7) ; empile plateau move.l A1,-(A7) ; empile herodata move.l A2,-(A7) ; empile dataghost bsr gGhost ; appel fct depl ghost add.l #12,A7 ; on depile * Toutes les clef ? suba.l #2,A7 ; reserv un mot move.l A1,-(A7) ; empile @ herodata move.b #nbkeys,-(A7) ; empile nb key tot bsr allKeys ; appel fct verif ttes clefs add.l #6,A7 ; on depile move.b (A7)+,D1 ; recup bool cmpi.b #1,D1 ; cmp res beq akeys ; gagne bra zkeys ; suite akeys move.l #twhite,-(A7) ; empile couleur texte blanc move.l #fblue,-(A7) ; empile couleur fond bleu bsr setColor ; appel de setColor add.l #8,A7 ; on depile bsr clrDisplay ; efface ecran lea sgagne,A2 ; charge chaine move.l A2,-(A7) ; empile chaine bsr putStr ; affiche chaine add.l #4,A7 ; on depile bsr LF ; linde feed bsr CR ; carriage return move.b #1,D0 ; pr quitter bcle infinie bra neteintes ; fin zkeys * Case Ghost = Case Hero ? move.l A1,-(A7) ; empile herodata move.l A2,-(A7) ; empile dataghost bsr ghostHero ; verif meme case add.l #8,A7 ; on depile * hero encore vies ? suba.l #2,A7 ; reserv un mot move.l A1,-(A7) ; empile herodata bsr allLives ; appel fct verif si vies add.l #4,A7 ; on depile move.b (A7)+,D1 ; recup bool cmpi.b #0,D1 ; cmp res beq aLife ; perdu bra zLife ; suite aLife move.l #twhite,-(A7) ; empile couleur texte blanc move.l #fblue,-(A7) ; empile couleur fond bleu bsr setColor ; appel de setColor add.l #8,A7 ; on depile bsr clrDisplay ; efface ecran lea sperdu,A2 ; charge chaine move.l A2,-(A7) ; empile chaine bsr putStr ; affiche chaine add.l #4,A7 ; on depile bsr LF ; line feed bsr CR ; carriage return lea sperdu2,A2 ; charge chaine move.l A2,-(A7) ; empile chaine bsr putStr ; affiche chaine add.l #4,A7 ; on depile bsr LF ; line feed bsr CR ; carriage return move.b #1,D0 ; pr quitter bcle infinie bra neteintes ; fin zLife * diodes eteintes ? move.b drb,D1 ; cp shema diodes cmpi.b #0,D1 ; cmp si tttes eteintes beq eteintes ; perdu bra neteintes ; suite eteintes move.l #twhite,-(A7) ; empile couleur texte blanc move.l #fblue,-(A7) ; empile couleur fond bleu bsr setColor ; appel de setColor add.l #8,A7 ; on depile bsr clrDisplay ; efface l'ecran lea sperdu,A2 ; charge chaine move.l A2,-(A7) ; empile chaine bsr putStr ; affiche chaine add.l #4,A7 ; on depile bsr LF ; line feed bsr CR ; carriage return lea sperdu1,A2 ; charge chaine move.l A2,-(A7) ; empile chaine bsr putStr ; affiche chaine add.l #4,A7 ; on depile bsr LF ; line feed bsr CR ; carriage return move.b #1,D0 ; pr quitter bcle infinie neteintes bset #3,MC_tt2_icr ; raz du cpt 2 movem.l (A7)+,D1 ; on depile rte fIT_Cycle