56Fermer58
VasiliyFamiliyaLe 22/10/2019 à 07:37
02015C: 1039 0010 FD98 move.b $10fd98.l, D0 ; D0=P1_REPEAT value 020162: 7200 moveq #$0, D1 ; D1=0 020164: 122D 900B move.b (-$6ff5,A5), D1 ; D1=[A5-$6ff5] value 020168: 6100 003A bsr $201a4 02016C: 1B41 900B move.b D1, (-$6ff5,A5) ; [A5-$6ff5] value=0, or #$c, or old [A5-$6ff5] value, or some other D1 value 020170: 303C 0331 move.w #$331, D0 ; D0=#$331 020174: 383C 734C move.w #$734c, D4 ; D4=#$734c 020178: 4EB9 0002 0208 jsr $20208.l 02017E: 4E75 rts0201A4: 0240 0003 andi.w #$3, D0 0201A8: 6700 002A beq $201d4 ; if neither UP nor DOWN joypad position is active then end the subroutine 0201AC: 0800 0000 btst #$0, D0 0201B0: 6700 000E beq $201c0 ; else if UP is not active then skip next 4 steps 0201B4: 5301 subq.b #1, D1 0201B6: 6A00 0008 bpl $201c0 ; else if [A5-$6ff5] value-1 is positive then skip next 2 steps 0201BA: 720C moveq #$c, D1 ; else D1=#$c 0201BC: 6000 0016 bra $201d4 ; end the subroutine 0201C0: 0800 0001 btst #$1, D0 0201C4: 6700 000E beq $201d4 ; if DOWN is not active then end the subroutine 0201C8: 5201 addq.b #1, D1 ; else D1=old [A5-$6ff5] value 0201CA: 0C01 000C cmpi.b #$c, D1 0201CE: 6300 0004 bls $201d4 ; if [A5-$6ff5] value<=#$c then end the subroutine 0201D2: 7200 moveq #$0, D1 ; else D1=0 0201D4: 4E75 rts020208: D841 add.w D1, D4 ; D4=D1+#$734c 02020A: 3944 FFFE move.w D4, (-$2,A4) ; [A4-$2] value=D1+#$734c 02020E: 397C 0020 0002 move.w #$20, ($2,A4) ; [A4+$2] value=#$20 020214: 342D 89F8 move.w (-$7608,A5), D2 ; D2=[A5-$7608] value 020218: 0242 000F andi.w #$f, D2 ; D2=[A5-$7608] value&#$f 02021C: E85A ror.w #4, D2 ; D2=([A5-$7608] value&#$f)ROR4 02021E: 8042 or.w D2, D0 ; D0=([A5-$7608] value&#$f)ROR4|#$331 020220: 3400 move.w D0, D2 ; D2=([A5-$7608] value&#$f)ROR4|#$331 020222: 143C 003C move.b #$3c, D2 ; lowest byte of D2=#$3c 020226: 3942 0000 move.w D2, ($0,A4) ; [A4] value=upper byte of (([A5-$7608] value&#$f)ROR4|#$331)+#$3c 02022A: 3940 0000 move.w D0, ($0,A4) ; Now the value of absolutely same address are fully replaced with ([A5-$7608] value&#$f)ROR4|#$331 . Why is it need? What was a sense of previous operation then? 02022E: 143C 0050 move.b #$50, D2 ; D2=#$50 020232: 3942 0000 move.w D2, ($0,A4) ; Now [A4] value is equal to #$50. 020236: 4E75 rts020E90: 082D 0002 8000 btst #$2, (-$8000,A5) 020E96: 6600 0014 bne $20eac ; if 3rd bit of [A5-$8000] value!=0 then skip next 4 steps 020E9A: 082D 0000 89F9 btst #$0, (-$7607,A5) 020EA0: 6700 0074 beq $20f16 ; else if 1st bit of [A5-$7607] value=0 then end the subroutine 020EA4: 522D 8A86 addq.b #1, (-$757a,A5) ; else [A5-$757a] value+1 020EA8: 6000 006C bra $20f16 ; end the subroutine 020EAC: 6100 FF38 bsr $20de6 020EB0: 1039 0010 FD98 move.b $10fd98.l, D0 ; D0=P1_REPEAT value 020EB6: 8039 0010 FD9E or.b $10fd9e.l, D0 ; D0=P1_REPEAT value|P2_REPEAT value 020EBC: 1200 move.b D0, D1 ; D1=P1_REPEAT value|P2_REPEAT value 020EBE: 0240 0030 andi.w #$30, D0 ; D0=(P1_REPEAT value|P2_REPEAT value)&#$30 020EC2: 6700 003E beq $20f02 ; if neither P1 nor P2 A/B buttons is pressed then skip to $20f02 020EC6: 0241 0080 andi.w #$80, D1 ; else D1=(P1_REPEAT value|P2_REPEAT value)&#$80 020ECA: 6700 0036 beq $20f02 ; if neither P1 nor P2 D button is pressed then skip to $20f02 020ECE: 122D 8A7B move.b (-$7585,A5), D1 ; else D1=[A5-$7585] value 020ED2: 822D 8A7D or.b (-$7583,A5), D1 ; D1=[A5-$7585] value|[A5-$7583] value 020ED6: 0C01 00D0 cmpi.b #-$30, D1 020EDA: 6600 0006 bne $20ee2 ; if [A5-$7585] value|[A5-$7583] value!=#-$30 then skip next step 020EDE: 422E 00D3 clr.b ($d3,A6) ; else [A6+$d3] value=0 020EE2: 0800 0005 btst #$5, D0 020EE6: 6700 0006 beq $20eee ; if P1 or P2 B button is pressed then skip next step 020EEA: 522E 00D3 addq.b #1, ($d3,A6) ; else [A6+$d3] value+1 020EEE: 0800 0004 btst #$4, D0 020EF2: 6700 000E beq $20f02 ; if P1 or P2 A button is pressed then skip next 3 steps 020EF6: 532E 00D3 subq.b #1, ($d3,A6) ; else [A6+$d3] value-1 020EFA: 6A00 0006 bpl $20f02 ; if [A6+$d3] value-1 is positive then skip next step 020EFE: 422E 00D3 clr.b ($d3,A6) ; else [A6+$d3] value=0 020F02: 532E 00D2 subq.b #1, ($d2,A6) ; [A6+$d2] value-1 020F06: 6A00 000E bpl $20f16 ; if [A6+$d2] value-1 is positive then end the subroutine 020F0A: 1D6E 00D3 00D2 move.b ($d3,A6), ($d2,A6) ; else [A6+$d2] value=[A6+$d3] value 020F10: 1B6E 00D3 8A86 move.b ($d3,A6), (-$757a,A5) ; else [A5-$757a] value=[A6+$d3] value 020F16: 4E75 rts020DE6: 41F9 0002 0E4A lea $20e4a.l, A0 ; A0=[$20e4a] 020DEC: 397C 70A9 FFFE move.w #$70a9, (-$2,A4) ; [A4-$2] value=#$70a9 020DF2: 397C 0020 0002 move.w #$20, ($2,A4) ; [A4+$2] value=#$20 020DF8: 7E1C moveq #$1c, D7 ; D7=#$1c 020DFA: 303C 4330 move.w #$4330, D0 ; D0=#$4330 020DFE: 1018 move.b (A0)+, D0 ; lowest byte of D0=[$20e4b] value 020E00: 3940 0000 move.w D0, ($0,A4) ; [A4] value=[$20e4b] value 020E04: 51CF FFF8 dbra D7, $20dfe ; D7-1, if D7 <> 0 jump 1 step back 020E08: 43F9 0002 0E68 lea $20e68.l, A1 ; A1=[$20e68] 020E0E: 7E02 moveq #$2, D7 ; D7=2 020E10: 303C 1320 move.w #$1320, D0 ; D0=#$1320 020E14: 7200 moveq #$0, D1 ; D1=0 020E16: 122E 00D3 move.b ($d3,A6), D1 ; D1=[A6+$d3] value 020E1A: 397C 73C9 FFFE move.w #$73c9, (-$2,A4) ; [A4-$2] value=#$73c9 020E20: 3419 move.w (A1)+, D2 ; D2=[$20e69] value 020E22: 7600 moveq #$0, D3 ; D3=0 020E24: 4A07 tst.b D7 020E26: 6600 0006 bne $20e2e ; if D7!=0 then skip next step 020E2A: 303C 4330 move.w #$4330, D0 ; else D0=#$4330 020E2E: 9242 sub.w D2, D1 ; D1=[A6+$d3] value-[$20e69] value 020E30: 6B00 000A bmi $20e3c ; if [A6+$d3] value-[$20e69] value is negative then skip next 3 steps 020E34: 303C 4330 move.w #$4330, D0 ; else D0=#$4330 020E38: 5243 addq.w #1, D3 ; D3=1 020E3A: 60F2 bra $20e2e 020E3C: D242 add.w D2, D1 020E3E: D640 add.w D0, D3 020E40: 3943 0000 move.w D3, ($0,A4) 020E44: 51CF FFDA dbra D7, $20e20 ; D7-1, if D7 <> 0 jump back to $20e20 020E48: 4E75 rts