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 rts
0201A4: 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 rts
020208: 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 rts
020E90: 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 rts
020DE6: 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