30

But what's about pieces of code by 04BA6E, 04BDBA, 04CD6E, 04D28A, 04DB40 and 04E1D6 addresses?
avatar

31

By the way, since we ingaged in disassembly reverse engineering, is there a MIPS3 assembly languange specialists here? I need them to make a RE of Xenosaga Episode II disassembly, and after that to create a Shaman King role\combat system on the base of Xenosaga Episode II role\combat system RE results.

Here is the IDA Pro file with a SLUS_208.92 disassembly code - I supposed, the PS2 files with a names of such format is a functional analogue of EXE files on PC.
avatar

32

Also I think, It's worth to borrow some future SK role/combat system elements from Pokemon Gold/Silver/Crystal (Unfortunately, I didn't learn yet, how to disassemble the whole GBC rom file - not only the ROM bank which is accessible at this moment. Does anybody here know how to do it?) and from Doom RPG mobile game (the decompiled Java source files are taken using DJ Java Decompiler).
avatar

33

After I'm tired to wait an answer to my question for a few months, I decided to continue the KoF '94 disassembly research by myself:

04BA6E: 4DF9 0010 FD96 lea $10fd96.l, A6 ; P1_CURRENT value moving to A6 04BA74: 4EBA 019E jsr ($19e,PC) ; ($4bc14) 04BA78: 4E71 nop 04BA7A: 082C 0000 00C9 btst #$0, ($c9,A4) 04BA80: 6700 0014 beq $4ba96 ; if 1st bit of ((initial A4 value+$c9)^1)+$c9 value is equal to 0 then end the subroutine ahead of time 04BA84: 4EBA 004C jsr ($4c,PC) ; ($4bad2) ; else goto $4bad2 subroutine 04BA88: 4E71 nop 04BA8A: 4EBA 01BA jsr ($1ba,PC) ; ($4bc46) 04BA8E: 4E71 nop 04BA90: 4EBA 0218 jsr ($218,PC) ; ($4bcaa) 04BA94: 4E71 nop 04BA96: 4E75 rts04BC14: 082D 0003 39F5 btst #$3, ($39f5,A5) 04BC1A: 6700 0028 beq $4bc44 ; if 4th bit of $39f5 + A5 value is equal to 0 then end subroutine ahead of time 04BC1E: 082D 0002 39F6 btst #$2, ($39f6,A5) 04BC24: 6700 001E beq $4bc44 ; else if 3rd bit of $39f6 + A5 value is equal to 0 then end subroutine ahead of time 04BC28: 0A2C 0001 00C9 eori.b #$1, ($c9,A4) ; else (A4+$c9)^1 04BC2E: 302C 00CC move.w ($cc,A4), D0 ; D0=((initial A4 value+$c9)^1)+$cc 04BC32: 322C 00CE move.w ($ce,A4), D1 ; D1=((initial A4 value+$c9)^1)+$ce 04BC36: 343C 0007 move.w #$7, D2 ; D2=7 04BC3A: 363C 0006 move.w #$6, D3 ; D3=6 04BC3E: 4EB9 0000 5FEA jsr $5fea.l 04BC44: 4E75 rts04BAD2: 102D 39CD move.b ($39cd,A5), D0 ; D0=A5+$39cd 04BAD6: 0240 000F andi.w #$f, D0 04BADA: 41FA 0354 lea ($354,PC) ; ($4be30), A0 ; A0=$ff02 04BADE: 4E71 nop 04BAE0: 7200 moveq #$0, D1 ; D1=0 04BAE2: 1230 0000 move.b (A0,D0.w), D1 ; D1=$ff02+(A5+$39cd) 04BAE6: 6B00 0022 bmi $4bb0a ; if $ff02+(A5+$39cd) is negative then end the subroutine ahead of time 04BAEA: D241 add.w D1, D1 04BAEC: D241 add.w D1, D1 ; else D1=($ff02+(A5+$39cd))*4 04BAEE: 41FA 001C lea ($1c,PC) ; ($4bb0c), A0 ; A0=(swapped value of (((((A4+$c9)^1)+$cc)<<5)+D1+#$7002) + #$f20)|#$2c 04BAF2: 4E71 nop 04BAF4: 082D 0002 39F5 btst #$2, ($39f5,A5) 04BAFA: 6700 0008 beq $4bb04 ; if 3rd bit of (A5+$39f5) value is equal to 0 then skip the next 2 operations 04BAFE: 41FA 001C lea ($1c,PC) ; ($4bb1c), A0 ; else A0=(swapped value of (((((initial A4 value+$c9)^1)+$cc)<<5)+D1+#$7002) + #$f20)|#$7c 04BB02: 4E71 nop 04BB04: 2070 1000 movea.l (A0,D1.w), A0 ; A0=((swapped value of (((((initial A4 value+$c9)^1)+$cc)<<5)+D1+#$7002) + #$f20)|#$7c)+(($ff02+(A5+$39cd))*4) 04BB08: 4E90 jsr (A0) ; goto $((swapped value of (((((initial A4 value+$c9)^1)+$cc)<<5)+D1+#$7002) + #$f20)|#$7c)+(($ff02+(A5+$39cd))*4) 04BB0A: 4E75 rts04BC46: 082D 0004 39CD btst #$4, ($39cd,A5) 04BC4C: 6700 0038 beq $4bc86 ; if 5th bit of A5+$39cd value is equal to 0 then goto $4bc86 subroutine 04BC50: 0C2C 0005 00D0 cmpi.b #$5, ($d0,A4) 04BC56: 6200 002C bhi $4bc84 ; if A4+$d0>5 then end the subroutine ahead of time 04BC5A: 422C 00C9 clr.b ($c9,A4) ; else [A4+$c9] value=0 04BC5E: 7000 moveq #$0, D0 ; D0=0 04BC60: 102C 00D0 move.b ($d0,A4), D0 ; D0=A4+$d0 04BC64: 5200 addq.b #1, D0 ; D0=A4+$d0+#1 04BC66: 01EC 00C9 bset D0, ($c9,A4) ; (A4+$d0+#1)th bit of A4+$c9 value is equal to 1 04BC6A: 302C 00CC move.w ($cc,A4), D0 ; D0=A4+$cc 04BC6E: 322C 00CE move.w ($ce,A4), D1 ; D1=A4+$ce 04BC72: 343C 0007 move.w #$7, D2 ; D2=7 04BC76: 363C 0006 move.w #$6, D3 ; D3=6 04BC7A: 4EB9 0000 5FEA jsr $5fea.l 04BC80: 422D 39CD clr.b ($39cd,A5) ; [A5+$39cd] value=0 04BC84: 4E75 rts04BCAA: 082C 0000 00C9 btst #$0, ($c9,A4) 04BCB0: 6700 0088 beq $4bd3a ; if 1st bit of A4+$c9 value is equal to 0 then end the subroutine ahead of time 04BCB4: 396C 00CC 00D4 move.w ($cc,A4), ($d4,A4) ; A4+$d4 value = A4+$cc value 04BCBA: 396C 00CE 00D6 move.w ($ce,A4), ($d6,A4) ; A4+$d6 value = A4+$ce value 04BCC0: 302C 00D4 move.w ($d4,A4), D0 ; D0=A4+$cc value 04BCC4: 322C 00D6 move.w ($d6,A4), D1 ; D1=A4+$ce value 04BCC8: 4EB9 0000 5FDE jsr $5fde.l 04BCCE: 207C 0006 E87A movea.l #$6e87a, A0 ; A0=#$6e87a 04BCD4: 303C 0F00 move.w #$f00, D0 ; lowest word of swapped (([A4+$cc] value<<5)+[A4+$ce] value+#$7002) value=#$f00 04BCD8: 223C 0020 0000 move.l #$200000, D1 ; D1=#$200000 04BCDE: 4EB9 0000 5F0C jsr $5f0c.l 04BCE4: 546C 00D6 addq.w #2, ($d6,A4) ; [A4+$d6] value+2 04BCE8: 7E03 moveq #$3, D7 ; D7=3 04BCEA: 7C00 moveq #$0, D6 ; D6=0 04BCEC: 7A00 moveq #$0, D5 ; D5=0 04BCEE: 1A2C 00C8 move.b ($c8,A4), D5 ; D5=[A4+$c8] value 04BCF2: 302C 00D4 move.w ($d4,A4), D0 ; D0=[A4+$d4] value 04BCF6: 322C 00D6 move.w ($d6,A4), D1 ; D1=[A4+$d6] value 04BCFA: 4EB9 0000 5FDE jsr $5fde.l 04BD00: 303C 0F00 move.w #$f00, D0 ; lowest word of swapped (([A4+$d4] value<<5)+[A4+$d6] value+#$7002) value=#$f00 04BD04: BC2C 00D1 cmp.b ($d1,A4), D6 04BD08: 6600 0006 bne $4bd10 ; if [A4+$d1] value !=0 then skip next operation 04BD0C: 0040 8000 ori.w #$8000, D0 ; else (swapped (([A4+$d4] value<<5)+[A4+$d6] value+#$7002) value)|#$8000 04BD10: 7800 moveq #$0, D4 ; D4=0 04BD12: 1805 move.b D5, D4 ; D4=[A4+$c8] value 04BD14: D844 add.w D4, D4 04BD16: D844 add.w D4, D4 ; D4=([A4+$c8] value)*4 04BD18: 41FA 0022 lea ($22,PC) ; ($4bd3c), A0 04BD1C: 4E71 nop 04BD1E: 2070 4000 movea.l (A0,D4.w), A0 ; A0=$4bd3c value+(([A4+$c8] value)*4) 04BD22: 223C 0020 0000 move.l #$200000, D1 ; D1=#$200000 04BD28: 4EB9 0000 5F0C jsr $5f0c.l 04BD2E: 526C 00D6 addq.w #1, ($d6,A4) ; [A4+$d6] value+1 04BD32: 5205 addq.b #1, D5 ; [A4+$c8] value+1 04BD34: 5206 addq.b #1, D6 ; D6=0+1=1 04BD36: 51CF FFBA dbra D7, $4bcf2 ; D7-1=3-1 ; if D7 <> 0 jump back to $4bcf2 04BD3A: 4E75 rts005FEA: 4EBA FFF2 jsr (-$e,PC) ; ($5fde) 005FEE: 303C 0F20 move.w #$f20, D0 ; lowest D0 word=#$f20 005FF2: 2800 move.l D0, D4 ; D4=swapped value of (((((initial A4 value+$c9)^1)+$cc)<<5)+D1+#$7002) + #$f20 005FF4: 223C 0020 0000 move.l #$200000, D1 ; D1=#$200000 005FFA: 7C00 moveq #$0, D6 ; D6=0 005FFC: 3A02 move.w D2, D5 ; D5=7 005FFE: 23C0 003C 0000 move.l D0, $3c0000.l ; sending swapped value of (((((initial A4 value+$c9)^1)+$cc)<<5)+D1+#$7002) + #$f20 to REG_VRAMADDR 006004: D081 add.l D1, D0 ; D0=swapped value of (((((initial A4 value+$c9)^1)+$cc)<<5)+D1+#$7002) + #$f20+#$200000 006006: 51CD FFF6 dbra D5, $5ffe ; D5-1=4, jump back to $5ffe because D5 <> 0 00600A: 2004 move.l D4, D0 ; D0=swapped value of (((((initial A4 value+$c9)^1)+$cc)<<5)+D1+#$7002) + #$f20 00600C: 0686 0001 0000 addi.l #$10000, D6 ; D6=#$10000 006012: D086 add.l D6, D0 ; D0=(swapped value of (((((initial A4 value+$c9)^1)+$cc)<<5)+D1+#$7002) + #$f20)+#$10000 006014: 51CB FFE6 dbra D3, $5ffc ; D3-1=5, jump back to $5ffc because D3 <> 0 006018: 4E75 rts005FDE: EB48 lsl.w #5, D0 ; D0=(((A4+$c9)^1)+$cc)<<5 005FE0: D041 add.w D1, D0 ; D0=((((A4+$c9)^1)+$cc)<<5)+D1 005FE2: 0640 7002 addi.w #$7002, D0 ; D0=((((A4+$c9)^1)+$cc)<<5)+D1+#$7002 005FE6: 4840 swap D0 005FE8: 4E75 rts04BE30: FF02 dc.w $ff02; opcode 111104BB0C: 0004 BB2C ori.b #$2c, D404BB1C: 0004 BB7C ori.b #$7c, D404BC86: 082D 0005 39CD btst #$5, ($39cd,A5) 04BC8C: 6700 0004 beq $4bc92 04BC90: 4E75 rts 04BC92: 082D 0006 39CD btst #$6, ($39cd,A5) 04BC98: 6700 0004 beq $4bc9e 04BC9C: 4E75 rts 04BC9E: 082D 0007 39CD btst #$7, ($39cd,A5) 04BCA4: 6700 0002 beq $4bca8 04BCA8: 4E75 rts005FDE: EB48 lsl.w #5, D0 005FE0: D041 add.w D1, D0 005FE2: 0640 7002 addi.w #$7002, D0 005FE6: 4840 swap D0 005FE8: 4E75 rts005F0C: 1018 move.b (A0)+, D0 ; read byte, inc A0 005F0E: 0C00 00FF cmpi.b #-$1, D0 ; -1 = 0xff 005F12: 6700 000C beq $5f20 ; if D0=#$ff then end the subroutine 005F16: 23C0 003C 0000 move.l D0, $3c0000.l ; else REG_VRAMADDR=D0 005F1C: D081 add.l D1, D0 ; D0=[(A0)+]+#$200000 005F1E: 60EC bra $5f0c ; return to start of subroutine 005F20: 4E75 rts
avatar

34

04BDBA: 4DF9 0010 FD96 lea $10fd96.l, A6 ; P1_CURRENT value moving to A6 04BDC0: 4EBA 0034 jsr ($34,PC) ; ($4bdf6) 04BDC4: 4E71 nop 04BDC6: 4EBA 0570 jsr ($570,PC) ; ($4c338) 04BDCA: 4E71 nop 04BDCC: 4EBA 0730 jsr ($730,PC) ; ($4c4fe) 04BDD0: 4E71 nop 04BDD2: 4EBA 052A jsr ($52a,PC) ; ($4c2fe) 04BDD6: 4E71 nop 04BDD8: 4E75 rts04BDF6: 102D 39CD move.b ($39cd,A5), D0 04BDFA: 0240 000F andi.w #$f, D0 ; D0=([A5+$39cd] value)&#$f 04BDFE: 41FA 0030 lea ($30,PC) ; ($4be30), A0 04BE02: 4E71 nop 04BE04: 7200 moveq #$0, D1 04BE06: 1230 0000 move.b (A0,D0.w), D1 ; D1=[$4be30]+(([A5+$39cd] value)&#$f) 04BE0A: 6B00 0022 bmi $4be2e ; if [$4be30]+(([A5+$39cd] value)&#$f) is negative then end the subroutine ahead of time 04BE0E: D241 add.w D1, D1 04BE10: D241 add.w D1, D1 ; else D1=([$4be30]+(([A5+$39cd] value)&#$f))*4 04BE12: 41FA 002C lea ($2c,PC) ; ($4be40), A0 04BE16: 4E71 nop 04BE18: 082D 0002 39F5 btst #$2, ($39f5,A5) 04BE1E: 6700 0008 beq $4be28 ; is 3rd bit of [A5+$39f5] value is equal to 0 then goto 4be28 subroutine 04BE22: 41FA 002C lea ($2c,PC) ; ($4be50), A0 04BE26: 4E71 nop 04BE28: 2070 1000 movea.l (A0,D1.w), A0 ; A0=[$4be50] value+(([$4be30]+(([A5+$39cd] value)&#$f))*4) 04BE2C: 4E90 jsr (A0) ; goto [[$4be50] value+(([$4be30]+(([A5+$39cd] value)&#$f))*4)] subroutine 04BE2E: 4E75 rts04C338: 082D 0000 39F5 btst #$0, ($39f5,A5) 04C33E: 6600 006E bne $4c3ae ; if 1st bit of [A5+$39f5] value is equal to 1 then goto $4c3ae subroutine 04C342: 082D 0004 39CD btst #$4, ($39cd,A5) 04C348: 6700 0012 beq $4c35c ; if 5th bit of [A5+$39cd] value is equal to 0 then goto $4c35c subroutine 04C34C: 206C 00C0 movea.l ($c0,A4), A0 ; A0=A4+$c0 04C350: 7000 moveq #$0, D0 ; D0=0 04C352: 102C 00D0 move.b ($d0,A4), D0 ; D0=[A4+$d0] value 04C356: 5230 0000 addq.b #1, (A0,D0.w) ; D0=[A4+$d0] value+[A4+$c0] value+1 04C35A: 4E75 rts04C2FE: 082D 0003 39F5 btst #$3, ($39f5,A5) 04C304: 6700 0030 beq $4c336 ; if 4th bit of [A5+$39f5] is equal to 0 then end the subroutine ahead of time 04C308: 082D 0002 39F6 btst #$2, ($39f6,A5) 04C30E: 6700 0026 beq $4c336 ; if 3rd bit of [A5+$39f6] is equal to 0 then end the subroutine ahead of time 04C312: 206C 0084 movea.l ($84,A4), A0 ; A0=[A4+$84] 04C316: 4228 00C9 clr.b ($c9,A0) ; [A4+$14D] value=0 04C31A: 0028 0001 00C9 ori.b #$1, ($c9,A0) ; [A4+$14D] value|1=0|1=1 Why it was need to zeroize [A4+$14D] value and to spend "or" opation over it after that, if this address is not used further? 04C320: 302C 00CC move.w ($cc,A4), D0 ; D0=[A4+$cc] value 04C324: 322C 00CE move.w ($ce,A4), D1 ; D1=[A4+$ce] value 04C328: 343C 0014 move.w #$14, D2 ; D2=#$14 04C32C: 363C 0012 move.w #$12, D3 ; D3=#$12 04C330: 4EB9 0000 5FEA jsr $5fea.l 04C336: 4E75 rts04BE28: 2070 1000 movea.l (A0,D1.w), A0 ; A0=[$4be40] value+(([$4be30]+(([A5+$39cd] value)&#$f))*4) 04BE2C: 4E90 jsr (A0) ; goto [[$4be40] value+(([$4be30]+(([A5+$39cd] value)&#$f))*4)] subroutine 04BE2E: 4E75 rts04C3AE: 082D 0001 39F6 btst #$1, ($39f6,A5) 04C3B4: 6700 0026 beq $4c3dc ; if 2nd bit of [A5+$39f6] value is equal to 0 then goto $4c3dc subroutine 04C3B8: 06AC 0000 5000 00C0 addi.l #$5000, ($c0,A4) ; [A4+$c0] value+#$5000 04C3C0: 522C 0070 addq.b #1, ($70,A4) 04C3C4: 0C2C 0019 0070 cmpi.b #$19, ($70,A4) 04C3CA: 6300 008E bls $4c45a ; if [A4+$70] value+1<=19 then end the subroutine ahead of time... by jumping to the [b]rts[/b] in another subroutine. Who knows why? 04C3CE: 532C 0070 subq.b #1, ($70,A4) ; else restore old [A4+$70] value which that memory section had before 04C3B8 step. 04C3D2: 04AC 0000 5000 00C0 subi.l #$5000, ($c0,A4) ; [A4+$c0] value-#$5000 04C3DA: 4E75 rts04C35C: 082D 0005 39CD btst #$5, ($39cd,A5) 04C362: 6700 0012 beq $4c376 ; if 6th bit of [A5+$39cd] value is equal to 0 then goto $4c376 subroutine 04C366: 206C 00C0 movea.l ($c0,A4), A0 ; A0=A4+$c0 04C36A: 7000 moveq #$0, D0 ; D0=0 04C36C: 102C 00D0 move.b ($d0,A4), D0 ; D0=[A4+$d0] value 04C370: 5330 0000 subq.b #1, (A0,D0.w) ; D0=[A4+$d0] value+[A4+$c0] value-1 04C374: 4E75 rts04C3DC: 082D 0003 39F6 btst #$3, ($39f6,A5) 04C3E2: 6700 0020 beq $4c404 ; if 4th bit of [A5+$39f6] value is equal to 0 then goto $4c404 subroutine 04C3E6: 04AC 0000 5000 00C0 subi.l #$5000, ($c0,A4) ; [A4+$c0] value-#$5000 04C3EE: 532C 0070 subq.b #1, ($70,A4) ; 04C3F2: 6400 0066 bcc $4c45a ; if [A4+$70] value >=1 then end the subroutine ahead of time... by jumping to the [b]rts[/b] in another subroutine. Who knows why? 04C3F6: 522C 0070 addq.b #1, ($70,A4) ; else restore old [A4+$70] value which that memory section had before 04C3EE step. 04C3FA: 06AC 0000 5000 00C0 addi.l #$5000, ($c0,A4) ; [A4+$c0] value+#$5000 04C402: 4E75 rts04C45A: 4E75 rts04C376: 082D 0006 39CD btst #$6, ($39cd,A5) 04C37C: 6700 0014 beq $4c392 ; if 7th bit of [A5+$39cd] value is equal to 0 then goto $4c392 subroutine 04C380: 206C 00C0 movea.l ($c0,A4), A0 ; A0=A4+$c0 04C384: 7000 moveq #$0, D0 ; D0=0 04C386: 102C 00D0 move.b ($d0,A4), D0 ; D0=[A4+$d0] value 04C38A: 0630 0010 0000 addi.b #$10, (A0,D0.w) ; D0=[A4+$d0] value+[A4+$c0] value+#$10 04C390: 4E75 rts04C404: 082D 0004 39CD btst #$4, ($39cd,A5) 04C40A: 6700 0008 beq $4c414 ; if 5th bit of [A5+$39cd] value is equal to 0 then goto $4c414 subroutine 04C40E: 522C 00C6 addq.b #1, ($c6,A4) ; [A4+$c6] value+1 04C412: 4E75 rts04C392: 082D 0007 39CD btst #$7, ($39cd,A5) 04C398: 6700 0012 beq $4c3ac ; if 8th bit of [A5+$39cd] value is equal to 0 then end the subroutine ahead of time 04C39C: 206C 00C0 movea.l ($c0,A4), A0 ; else A0=A4+$c0 04C3A0: 7000 moveq #$0, D0 ; D0=0 04C3A2: 102C 00D0 move.b ($d0,A4), D0 ; D0=[A4+$d0] value 04C3A6: 0430 0010 0000 subi.b #$10, (A0,D0.w) ; D0=[A4+$d0] value+[A4+$c0] value-#$10 04C3AC: 4E75 rts04C414: 082D 0005 39CD btst #$5, ($39cd,A5) 04C41A: 6700 0016 beq $4c432 ; if 6th bit of [A5+$39cd] value is equal to 0 then goto $4c432 subroutine 04C41E: 522C 00C5 addq.b #1, ($c5,A4) 04C422: 0C2C 0004 00C5 cmpi.b #$4, ($c5,A4) 04C428: 6300 0006 bls $4c430 ; if [A4+$c5] value+1 <=#$4 then end the subroutine ahead of time 04C42C: 422C 00C5 clr.b ($c5,A4) ; else [A4+$c5] value=0 04C430: 4E75 rts04C432: 082D 0006 39CD btst #$6, ($39cd,A5) 04C438: 6700 0016 beq $4c450 ; if 7th bit of [A5+$39cd] value is equal to 0 then goto $4c450 subroutine 04C43C: 522C 00C4 addq.b #1, ($c4,A4) 04C440: 0C2C 0019 00C4 cmpi.b #$19, ($c4,A4) 04C446: 6300 0006 bls $4c44e ; if [A4+$c4] value+1 <=#$19 then end the subroutine ahead of time 04C44A: 422C 00C4 clr.b ($c4,A4) ; else [A4+$c4] value=0 04C44E: 4E75 rts04C450: 082D 0007 39CD btst #$7, ($39cd,A5) 04C456: 6700 0004 beq $4c45c ; if 8th bit of [A5+$39cd] value is equal to 0 then goto $4c45c subroutine 04C45A: 4E75 rts 04C45C: 082D 0002 39F6 btst #$2, ($39f6,A5) 04C462: 6700 000A beq $4c46e ; if 3rd bit of [A5+$39f6] value is equal to 0 then goto $4c46e subroutine 04C466: 4EBA 0056 jsr ($56,PC) ; ($4c4be) 04C46A: 4E71 nop 04C46C: 4E75 rts 04C46E: 082D 0004 39E3 btst #$4, ($39e3,A5) 04C474: 6700 0008 beq $4c47e ; if 5th bit of [A5+$39e3] value is equal to 0 then goto $4c47e subroutine 04C478: 532C 00C6 subq.b #1, ($c6,A4) ; [A4+$c6] value-1 04C47C: 4E75 rts 04C47E: 082D 0005 39E3 btst #$5, ($39e3,A5) 04C484: 6700 0012 beq $4c498 ; if 6th bit of [A5+$39e3] value is equal to 0 then goto $4c498 subroutine 04C488: 532C 00C5 subq.b #1, ($c5,A4) 04C48C: 6400 0008 bcc $4c496 ; if [A4+$c5] value >=1 then end the subroutine ahead of time 04C490: 197C 0004 00C5 move.b #$4, ($c5,A4) ; else [A4+$c5] value=4 04C496: 4E75 rts 04C498: 082D 0006 39E3 btst #$6, ($39e3,A5) 04C49E: 6700 0012 beq $4c4b2 ; if 7th bit of [A5+$39e3] value is equal to 0 then goto $4c4b2 subroutine 04C4A2: 532C 00C4 subq.b #1, ($c4,A4) 04C4A6: 6400 0008 bcc $4c4b0 ; if [A4+$c4] value >=1 then end the subroutine ahead of time 04C4AA: 197C 0019 00C4 move.b #$19, ($c4,A4) ; else [A4+$c5] value=#$19 04C4B0: 4E75 rts 04C4B2: 082D 0007 39E3 btst #$7, ($39e3,A5) 04C4B8: 6700 0002 beq $4c4bc ; if 8th bit of [A5+$39e3] value is equal to 0 then goto $4c4bc subroutine 04C4BC: 4E75 rts04C4BE: 4EBA 0014 jsr ($14,PC) ; ($4c4d4) ; skip to next subroutine right after start of this one 04C4C2: 4E71 nop 04C4C4: 2040 movea.l D0, A0 ; A0=((#$201000+(([A4+$c4] value)*#$5000))+(([A4+$c5] value)*#$1000))+(([A4+$c6] value)<<4) 04C4C6: 226C 00C0 movea.l ($c0,A4), A1 04C4CA: 700F moveq #$f, D0 ; D0=#$f 04C4CC: 12D8 move.b (A0)+, (A1)+ ; [A4+$c1] value=[((#$201000+(([A4+$c4] value)*#$5000))+(([A4+$c5] value)*#$1000))+(([A4+$c6] value)<<4)+1] value 04C4CE: 51C8 FFFC dbra D0, $4c4cc ; D0-1, if D0 <> 0 jump back to $4c4cc 04C4D2: 4E75 rts 04C4D4: 203C 0020 1000 move.l #$201000, D0 ; D0=#$201000 04C4DA: 7200 moveq #$0, D1 ; D1=#$0 04C4DC: 122C 00C4 move.b ($c4,A4), D1 04C4E0: C2FC 5000 mulu.w #$5000, D1 ; D1=([A4+$c4] value)*#$5000 04C4E4: D081 add.l D1, D0 ; D0=#$201000+(([A4+$c4] value)*#$5000) 04C4E6: 7200 moveq #$0, D1 ; D1=0 04C4E8: 122C 00C5 move.b ($c5,A4), D1 04C4EC: C2FC 1000 mulu.w #$1000, D1 ; D1=([A4+$c5] value)*#$1000 04C4F0: D081 add.l D1, D0 ; D0=(#$201000+(([A4+$c4] value)*#$5000))+(([A4+$c5] value)*#$1000) 04C4F2: 7200 moveq #$0, D1 ; D1=0 04C4F4: 122C 00C6 move.b ($c6,A4), D1 04C4F8: E989 lsl.l #4, D1 ; D1=([A4+$c6] value)<<4 04C4FA: D081 add.l D1, D0 ; D0=((#$201000+(([A4+$c4] value)*#$5000))+(([A4+$c5] value)*#$1000))+(([A4+$c6] value)<<4) 04C4FC: 4E75 rts
avatar

35

The 04C4FE subroutine turned out to be too large piece of code, so I had to shatter it by three parts.

04C4FE: 396C 00CC 00D4 move.w ($cc,A4), ($d4,A4) 04C504: 396C 00CE 00D6 move.w ($ce,A4), ($d6,A4) 04C50A: 302C 00D4 move.w ($d4,A4), D0 ; D0=[A4+$cc] value 04C50E: 322C 00D6 move.w ($d6,A4), D1 ; D1=[A4+$ce] value 04C512: 4EB9 0000 5FDE jsr $5fde.l 04C518: 207C 0006 E7D8 movea.l #$6e7d8, A0 ; A0=#$6e7d8 04C51E: 303C 0F00 move.w #$f00, D0 ; lowest word of D0=#$f00 04C522: 223C 0020 0000 move.l #$200000, D1 ; D1=#$200000 04C528: 4EB9 0000 5F0C jsr $5f0c.l 04C52E: 566C 00D4 addq.w #3, ($d4,A4) 04C532: 302C 00D4 move.w ($d4,A4), D0 ; D0=[A4+$cc] value+3 04C536: 322C 00D6 move.w ($d6,A4), D1 ; D1=[A4+$ce] value 04C53A: 4EB9 0000 5FDE jsr $5fde.l 04C540: 303C 0F00 move.w #$f00, D0 ; lowest word of D0=#$f00 04C544: 122C 0070 move.b ($70,A4), D1 ; D1=[A4+$70] value 04C548: 243C 0020 0000 move.l #$200000, D2 ; D2=#$200000 04C54E: 4EB9 0000 5F60 jsr $5f60.l 04C554: 566C 00D4 addq.w #3, ($d4,A4) ; [A4+$cc] value+6 04C558: 7000 moveq #$0, D0 ; D0=0 04C55A: 102C 0070 move.b ($70,A4), D0 ; D0=[A4+$70] value 04C55E: E948 lsl.w #4, D0 ; D0=[A4+$70] value<<4 04C560: 43F9 0007 BD00 lea $7bd00.l, A1 04C566: D2C0 adda.w D0, A1 ; A1=$7bd00+[[A4+$70] value<<4] 04C568: 302C 00D4 move.w ($d4,A4), D0 ; D0=[A4+$cc] value+6 04C56C: 322C 00D6 move.w ($d6,A4), D1 ; D1=[A4+$ce] value 04C570: 4EB9 0000 5FDE jsr $5fde.l 04C576: 2049 movea.l A1, A0 ; A0=$7bd00+[[A4+$70] value<<4] 04C578: 303C 0F00 move.w #$f00, D0 ; lowest word of D0=#$f00 04C57C: 223C 0020 0000 move.l #$200000, D1 ; D1=#$200000 04C582: 4EB9 0000 5F0C jsr $5f0c.l 04C588: 5D6C 00D4 subq.w #6, ($d4,A4) 04C58C: 526C 00D6 addq.w #1, ($d6,A4) 04C590: 302C 00D4 move.w ($d4,A4), D0 ; lowest word of D0=[A4+$cc] value 04C594: 322C 00D6 move.w ($d6,A4), D1 ; lowest word of D1=[A4+$ce] value+1 04C598: 4EB9 0000 5FDE jsr $5fde.l 04C59E: 207C 0006 E7DC movea.l #$6e7dc, A0 ; A0=[$6e7dc] 04C5A4: 303C 0F00 move.w #$f00, D0 ; lowest word of D0=#$f00 04C5A8: 223C 0020 0000 move.l #$200000, D1 ; D1=#$200000 04C5AE: 4EB9 0000 5F0C jsr $5f0c.l 04C5B4: 5A6C 00D4 addq.w #5, ($d4,A4) 04C5B8: 302C 00D4 move.w ($d4,A4), D0 ; lowest word of D0=[A4+$cc] value+5 04C5BC: 322C 00D6 move.w ($d6,A4), D1 ; lowest word of D1=[A4+$ce] value+1 04C5C0: 4EB9 0000 5FDE jsr $5fde.l 04C5C6: 303C 0F00 move.w #$f00, D0 ; lowest word of D0=#$f00 04C5CA: 122C 00BC move.b ($bc,A4), D1 ; lowest byte of D1=[A4+$bc] value 04C5CE: 243C 0020 0000 move.l #$200000, D2 ; D2=#$200000 04C5D4: 4EB9 0000 5F60 jsr $5f60.l 04C5DA: 566C 00D4 addq.w #3, ($d4,A4) 04C5DE: 302C 00D4 move.w ($d4,A4), D0 ; lowest word of D0=[A4+$cc] value+8 04C5E2: 322C 00D6 move.w ($d6,A4), D1 ; lowest word of D1=[A4+$ce] value+1 04C5E6: 4EB9 0000 5FDE jsr $5fde.l 04C5EC: 207C 0006 E7E2 movea.l #$6e7e2, A0 ; A0=[$6e7e2] 04C5F2: 303C 0F00 move.w #$f00, D0 ; lowest word of D0=#$f00 04C5F6: 223C 0020 0000 move.l #$200000, D1 ; D1=#$200000 04C5FC: 4EB9 0000 5F0C jsr $5f0c.l 04C602: 586C 00D4 addq.w #4, ($d4,A4) 04C606: 302C 00D4 move.w ($d4,A4), D0 ; lowest word of D0=[A4+$cc] value+12 04C60A: 322C 00D6 move.w ($d6,A4), D1 ; lowest word of D1=[A4+$ce] value+1 04C60E: 4EB9 0000 5FDE jsr $5fde.l 04C614: 303C 0F00 move.w #$f00, D0 ; lowest word of D0=#$f00 04C618: 122C 00D1 move.b ($d1,A4), D1 ; lowest byte of D1=[A4+$d1] value 04C61C: 243C 0020 0000 move.l #$200000, D2 ; D2=#$200000 04C622: 4EB9 0000 5F60 jsr $5f60.l 04C628: 046C 000C 00D4 subi.w #$c, ($d4,A4) 04C62E: 546C 00D6 addq.w #2, ($d6,A4) 04C632: 302C 00D4 move.w ($d4,A4), D0 ; lowest word of D0=[A4+$cc] value 04C636: 322C 00D6 move.w ($d6,A4), D1 ; lowest word of D1=[A4+$ce] value+3 04C63A: 4EB9 0000 5FDE jsr $5fde.l 04C640: 207C 0006 E930 movea.l #$6e930, A0 ; A0=[$6e930] 04C646: 303C 0F00 move.w #$f00, D0 ; lowest word of D0=#$f00 04C64A: 223C 0020 0000 move.l #$200000, D1 ; D1=#$200000 04C650: 4EB9 0000 5F0C jsr $5f0c.l 04C656: 526C 00D6 addq.w #1, ($d6,A4) 04C65A: 302C 00D4 move.w ($d4,A4), D0 ; lowest word of D0=[A4+$cc] value 04C65E: 322C 00D6 move.w ($d6,A4), D1 ; lowest word of D1=[A4+$ce] value+4 04C662: 4EB9 0000 5FDE jsr $5fde.l 04C668: 207C 0006 E93A movea.l #$6e93a, A0 ; A0=[$6e93a] 04C66E: 303C 0F00 move.w #$f00, D0 ; lowest word of D0=#$f00 04C672: 223C 0020 0000 move.l #$200000, D1 ; D1=#$200000 04C678: 4EB9 0000 5F0C jsr $5f0c.l 04C67E: 526C 00D6 addq.w #1, ($d6,A4) 04C682: 302C 00D4 move.w ($d4,A4), D0 ; lowest word of D0=[A4+$cc] value 04C686: 322C 00D6 move.w ($d6,A4), D1 ; lowest word of D1=[A4+$ce] value+5 04C68A: 4EB9 0000 5FDE jsr $5fde.l 04C690: 207C 0006 E944 movea.l #$6e944, A0 ; A0=[$6e944] 04C696: 303C 0F00 move.w #$f00, D0 ; lowest word of D0=#$f00 04C69A: 223C 0020 0000 move.l #$200000, D1 ; D1=#$200000 04C6A0: 4EB9 0000 5F0C jsr $5f0c.l 04C6A6: 526C 00D6 addq.w #1, ($d6,A4) 04C6AA: 302C 00D4 move.w ($d4,A4), D0 ; lowest word of D0=[A4+$cc] value 04C6AE: 322C 00D6 move.w ($d6,A4), D1 ; lowest word of D1=[A4+$ce] value+6 04C6B2: 4EB9 0000 5FDE jsr $5fde.l 04C6B8: 207C 0006 E7F2 movea.l #$6e7f2, A0 ; A0=[$6e7f2] 04C6BE: 303C 0F00 move.w #$f00, D0 ; lowest word of D0=#$f00 04C6C2: 223C 0020 0000 move.l #$200000, D1 ; D1=#$200000 04C6C8: 4EB9 0000 5F0C jsr $5f0c.l 04C6CE: 066C 0009 00D4 addi.w #$9, ($d4,A4) 04C6D4: 576C 00D6 subq.w #3, ($d6,A4) 04C6D8: 2C6C 00C0 movea.l ($c0,A4), A6 ; A6=A4+$c0 04C6DC: 7E0F moveq #$f, D7 ; D7=#$f 04C6DE: 7C03 moveq #$3, D6 ; D6=#$3 04C6E0: 7A00 moveq #$0, D5 ; D5=#$0 04C6E2: 302C 00D4 move.w ($d4,A4), D0 ; lowest word of D0=[A4+$cc] value+9 04C6E6: 322C 00D6 move.w ($d6,A4), D1 ; lowest word of D1=[A4+$ce] value+3 04C6EA: 4EB9 0000 5FDE jsr $5fde.l 04C6F0: 303C 0F00 move.w #$f00, D0 ; lowest word of D0=#$f00 04C6F4: BA2C 00D0 cmp.b ($d0,A4), D5 04C6F8: 6600 0006 bne $4c700 ; if [A4+$d0] value=0 then skip next operation 04C6FC: 0040 8000 ori.w #$8000, D0 ; else D0=#$8000|#$f00=#$8f00 04C700: 121E move.b (A6)+, D1 ; D1=(A6) value+1 04C702: 243C 0020 0000 move.l #$200000, D2 ; D2=#$200000 04C708: 4EB9 0000 5F60 jsr $5f60.l 04C70E: 566C 00D4 addq.w #3, ($d4,A4) ; [A4+$d4] value=[A4+$cc] value+12 04C712: 5346 subq.w #1, D6 ; D6-1 04C714: 6A00 000E bpl $4c724 ; if D6>0 then skip to $4c724 04C718: 046C 000C 00D4 subi.w #$c, ($d4,A4) ; else [A4+$d4] value=[A4+$cc] value 04C71E: 526C 00D6 addq.w #1, ($d6,A4) ; [A4+$d6]=[A4+$ce] value+4 04C722: 7C03 moveq #$3, D6 ; D6=3 04C724: 5205 addq.b #1, D5 ; D5+1 04C726: 51CF FFBA dbra D7, $4c6e2 ; D7-1, if D7 <> 0 jump back to $4c6e2 04C72A: 046C 0009 00D4 subi.w #$9, ($d4,A4) 04C730: 526C 00D6 addq.w #1, ($d6,A4) 04C734: 7000 moveq #$0, D0 ; D0=0 04C736: 102D 3A5E move.b ($3a5e,A5), D0 04C73A: D040 add.w D0, D0 04C73C: D040 add.w D0, D0 ; D0=[A5+$3a5e] value*4 04C73E: 41FA 05C0 lea ($5c0,PC) ; ($4cd00), A0 04C742: 4E71 nop 04C744: 2E30 0000 move.l (A0,D0.w), D7 ; D7=([A5+$3a5e] value*4)+[$4cd00] value 04C748: 302C 00D4 move.w ($d4,A4), D0 ; D0=old [A4+$d4] value-9 04C74C: 322C 00D6 move.w ($d6,A4), D1 ; D1=old [A4+$d6] value+1 04C750: 4EB9 0000 5FDE jsr $5fde.l 04C756: 2047 movea.l D7, A0 ; A0=[([A5+$3a5e] value*4)+[$4cd00]] 04C758: 303C 0F00 move.w #$f00, D0 ; lowest word of D0=#$f00 04C75C: 223C 0020 0000 move.l #$200000, D1 ; D1=#$200000 04C762: 4EB9 0000 5F0C jsr $5f0c.l 04C768: 526C 00D6 addq.w #1, ($d6,A4) 04C76C: 302C 00D4 move.w ($d4,A4), D0 ; D0=old [A4+$d4] value-9 04C770: 322C 00D6 move.w ($d6,A4), D1 ; D1=old [A4+$d6] value+2 04C774: 4EB9 0000 5FDE jsr $5fde.l 04C77A: 207C 0006 E7DC movea.l #$6e7dc, A0 ; A0=[$6e7dc] 04C780: 303C 0F00 move.w #$f00, D0 ; lowest word of D0=#$f00 04C784: 223C 0020 0000 move.l #$200000, D1 ; D1=#$200000 04C78A: 4EB9 0000 5F0C jsr $5f0c.l 04C790: 5A6C 00D4 addq.w #5, ($d4,A4) 04C794: 302C 00D4 move.w ($d4,A4), D0 ; D0=old [A4+$d4] value-4 04C798: 322C 00D6 move.w ($d6,A4), D1 ; D1=old [A4+$d6] value+2 04C79C: 4EB9 0000 5FDE jsr $5fde.l 04C7A2: 303C 0F00 move.w #$f00, D0 ; lowest word of D0=#$f00 04C7A6: 122D 3A5F move.b ($3a5f,A5), D1 ; D1=[A5+$3a5f] 04C7AA: 243C 0020 0000 move.l #$200000, D2 ; D2=#$200000 04C7B0: 4EB9 0000 5F60 jsr $5f60.l 04C7B6: 5B6C 00D4 subq.w #5, ($d4,A4) 04C7BA: 526C 00D6 addq.w #1, ($d6,A4) 04C7BE: 302C 00D4 move.w ($d4,A4), D0 ; D0=old [A4+$d4] value-9 04C7C2: 322C 00D6 move.w ($d6,A4), D1 ; D1=old [A4+$d6] value+3 04C7C6: 4EB9 0000 5FDE jsr $5fde.l 04C7CC: 207C 0006 E7E2 movea.l #$6e7e2, A0 ; A0=[$6e7e2] 04C7D2: 303C 0F00 move.w #$f00, D0 ; lowest word of D0=#$f00 04C7D6: 223C 0020 0000 move.l #$200000, D1 ; D1=#$200000 04C7DC: 4EB9 0000 5F0C jsr $5f0c.l 04C7E2: 586C 00D4 addq.w #4, ($d4,A4) 04C7E6: 302C 00D4 move.w ($d4,A4), D0 ; D0=old [A4+$d4] value-5 04C7EA: 322C 00D6 move.w ($d6,A4), D1 ; D1=old [A4+$d6] value+3 04C7EE: 4EB9 0000 5FDE jsr $5fde.l 04C7F4: 303C 0F00 move.w #$f00, D0 ; lowest word of D0=#$f00 04C7F8: 122D 3A61 move.b ($3a61,A5), D1 ; D1=[A5+$3a61] 04C7FC: 243C 0020 0000 move.l #$200000, D204C802: 4EB9 0000 5F60 jsr $5f60.l 04C808: 596C 00D4 subq.w #4, ($d4,A4) 04C80C: 526C 00D6 addq.w #1, ($d6,A4) 04C810: 302C 00D4 move.w ($d4,A4), D0 ; D0=old [A4+$d4] value-9 04C814: 322C 00D6 move.w ($d6,A4), D1 ; D1=old [A4+$d6] value+4 04C818: 4EB9 0000 5FDE jsr $5fde.l 04C81E: 207C 0006 E806 movea.l #$6e806, A0 ; A0=[$6e806] 04C824: 303C 0F00 move.w #$f00, D0 ; lowest word of D0=#$f00 04C828: 223C 0020 0000 move.l #$200000, D1 ; D1=#$200000 04C82E: 4EB9 0000 5F0C jsr $5f0c.l 04C834: 506C 00D4 addq.w #8, ($d4,A4) 04C838: 302C 00D4 move.w ($d4,A4), D0 ; D0=old [A4+$d4] value-1 04C83C: 322C 00D6 move.w ($d6,A4), D1 ; D1=old [A4+$d6] value+4 04C840: 4EB9 0000 5FDE jsr $5fde.l 04C846: 303C 0F00 move.w #$f00, D0 ; lowest word of D0=#$f00 04C84A: 122D 3A62 move.b ($3a62,A5), D1 ; D1=[A5+$3a62] value 04C84E: 243C 0020 0000 move.l #$200000, D2 ; D2=#$200000 04C854: 4EB9 0000 5F60 jsr $5f60.l 04C85A: 516C 00D4 subq.w #8, ($d4,A4) 04C85E: 526C 00D6 addq.w #1, ($d6,A4) 04C862: 302C 00D4 move.w ($d4,A4), D0 ; D0=old [A4+$d4] value-9 04C866: 322C 00D6 move.w ($d6,A4), D1 ; D1=old [A4+$d6] value+4 04C86A: 4EB9 0000 5FDE jsr $5fde.l 04C870: 207C 0006 E810 movea.l #$6e810, A0 ; A0=[$6e810] 04C876: 303C 0F00 move.w #$f00, D0 ; lowest word of D0=#$f00 04C87A: 223C 0020 0000 move.l #$200000, D1 ; D1=#$200000 04C880: 4EB9 0000 5F0C jsr $5f0c.l 04C886: 506C 00D4 addq.w #8, ($d4,A4) 04C88A: 302C 00D4 move.w ($d4,A4), D0 ; D0=old [A4+$d4] value-1 04C88E: 322C 00D6 move.w ($d6,A4), D1 ; D1=old [A4+$d6] value+4 04C892: 4EB9 0000 5FDE jsr $5fde.l 04C898: 303C 0F00 move.w #$f00, D0 ; lowest word of D0=#$f00 04C89C: 122D 3A63 move.b ($3a63,A5), D1 ; D1=[A5+$3a63] value 04C8A0: 243C 0020 0000 move.l #$200000, D2 ; D2=#$200000 04C8A6: 4EB9 0000 5F60 jsr $5f60.l 04C8AC: 516C 00D4 subq.w #8, ($d4,A4) 04C8B0: 526C 00D6 addq.w #1, ($d6,A4) 04C8B4: 302C 00D4 move.w ($d4,A4), D0 ; D0=old [A4+$d4] value-9 04C8B8: 322C 00D6 move.w ($d6,A4), D1 ; D1=old [A4+$d6] value+5 04C8BC: 4EB9 0000 5FDE jsr $5fde.l 04C8C2: 207C 0006 E842 movea.l #$6e842, A0 ; A0=[#$6e842] 04C8C8: 303C 0F00 move.w #$f00, D0 ; lowest word of D0=#$f00 04C8CC: 223C 0020 0000 move.l #$200000, D1 ; D1=#$200000 04C8D2: 4EB9 0000 5F0C jsr $5f0c.l 04C8D8: 066C 000A 00D4 addi.w #$a, ($d4,A4) 04C8DE: 302C 00D4 move.w ($d4,A4), D0 ; D0=old [A4+$d4] value+1 04C8E2: 322C 00D6 move.w ($d6,A4), D1 ; D1=old [A4+$d6] value+5 04C8E6: 4EB9 0000 5FDE jsr $5fde.l 04C8EC: 303C 0F00 move.w #$f00, D0 ; lowest word of D0=#$f00 04C8F0: 122D 3A5A move.b ($3a5a,A5), D1 ; D1=[A5+$3a5a] value 04C8F4: 243C 0020 0000 move.l #$200000, D2 ; D2=#$200000 04C8FA: 4EB9 0000 5F60 jsr $5f60.l 04C900: 046C 000A 00D4 subi.w #$a, ($d4,A4) 04C906: 526C 00D6 addq.w #1, ($d6,A4) 04C90A: 302C 00D4 move.w ($d4,A4), D0 ; D0=old [A4+$d4] value-9 04C90E: 322C 00D6 move.w ($d6,A4), D1 ; D1=old [A4+$d6] value+6 04C912: 4EB9 0000 5FDE jsr $5fde.l 04C918: 207C 0006 E84E movea.l #$6e84e, A0 ; A0=[$6e84e] 04C91E: 303C 0F00 move.w #$f00, D0 ; lowest word of D0=#$f00 04C922: 223C 0020 0000 move.l #$200000, D1 ; D1=#$200000 04C928: 4EB9 0000 5F0C jsr $5f0c.l 04C92E: 066C 000A 00D4 addi.w #$a, ($d4,A4) 04C934: 302C 00D4 move.w ($d4,A4), D0 ; D0=old [A4+$d4] value+1 04C938: 322C 00D6 move.w ($d6,A4), D1 ; D1=old [A4+$d6] value+6 04C93C: 4EB9 0000 5FDE jsr $5fde.l 04C942: 303C 0F00 move.w #$f00, D0 ; lowest word of D0=#$f00 04C946: 122D 3A64 move.b ($3a64,A5), D1 ; D1=[A5+$3a64] value 04C94A: 243C 0020 0000 move.l #$200000, D2 ; D2=#$200000 04C950: 4EB9 0000 5F60 jsr $5f60.l 04C956: 046C 000A 00D4 subi.w #$a, ($d4,A4) 04C95C: 526C 00D6 addq.w #1, ($d6,A4) 04C960: 302C 00D4 move.w ($d4,A4), D0 ; D0=old [A4+$d4] value-9 04C964: 322C 00D6 move.w ($d6,A4), D1 ; D1=old [A4+$d6] value+7 04C968: 4EB9 0000 5FDE jsr $5fde.l 04C96E: 207C 0006 E85A movea.l #$6e85a, A0 ; A0=[$6e85a] 04C974: 303C 0F00 move.w #$f00, D0 ; lowest word of D0=#$f00 04C978: 223C 0020 0000 move.l #$200000, D1 ; D1=#$200000 04C97E: 4EB9 0000 5F0C jsr $5f0c.l 04C984: 5A6C 00D4 addq.w #5, ($d4,A4) 04C988: 302C 00D4 move.w ($d4,A4), D0 ; D0=old [A4+$d4] value-4 04C98C: 322C 00D6 move.w ($d6,A4), D1 ; D1=old [A4+$d6] value+7 04C990: 4EB9 0000 5FDE jsr $5fde.l 04C996: 303C 0F00 move.w #$f00, D0 ; lowest word of D0=#$f00 04C99A: 322D 0118 move.w ($118,A5), D1 ; D1=[A5+$118] value 04C99E: 243C 0020 0000 move.l #$200000, D2 ; D2=#$200000 04C9A4: 4EB9 0000 5F94 jsr $5f94.l 04C9AA: 586C 00D4 addq.w #4, ($d4,A4) 04C9AE: 302C 00D4 move.w ($d4,A4), D0 ; D0=old [A4+$d4] value 04C9B2: 322C 00D6 move.w ($d6,A4), D1 ; D1=old [A4+$d6] value+7 04C9B6: 4EB9 0000 5FDE jsr $5fde.l 04C9BC: 303C 0F00 move.w #$f00, D0 ; lowest word of D0=#$f00 04C9C0: 322D 011A move.w ($11a,A5), D1 ; D1=[A5+$11a] value 04C9C4: 243C 0020 0000 move.l #$200000, D2 ; D2=#$200000 04C9CA: 4EB9 0000 5F94 jsr $5f94.l 04C9D0: 046C 0009 00D4 subi.w #$9, ($d4,A4) 04C9D6: 526C 00D6 addq.w #1, ($d6,A4) 04C9DA: 302C 00D4 move.w ($d4,A4), D0 ; D0=old [A4+$d4] value-9 04C9DE: 322C 00D6 move.w ($d6,A4), D1 ; D1=old [A4+$d6] value+8 04C9E2: 4EB9 0000 5FDE jsr $5fde.l 04C9E8: 207C 0006 E860 movea.l #$6e860, A0 ; A0=[$6e860] 04C9EE: 303C 0F00 move.w #$f00, D0 ; lowest word of D0=#$f00 04C9F2: 223C 0020 0000 move.l #$200000, D1 ; D1=#$200000 04C9F8: 4EB9 0000 5F0C jsr $5f0c.l 04C9FE: 5A6C 00D4 addq.w #5, ($d4,A4) 04CA02: 302C 00D4 move.w ($d4,A4), D0 ; D0=old [A4+$d4] value-4 04CA06: 322C 00D6 move.w ($d6,A4), D1 ; D1=old [A4+$d6] value+8 04CA0A: 4EB9 0000 5FDE jsr $5fde.l 04CA10: 303C 0F00 move.w #$f00, D0 ; lowest word of D0=#$f00 04CA14: 322D 0318 move.w ($318,A5), D1 ; D1=[A5+$318] value 04CA18: 243C 0020 0000 move.l #$200000, D2 ; D2=#$200000 04CA1E: 4EB9 0000 5F94 jsr $5f94.l 04CA24: 586C 00D4 addq.w #4, ($d4,A4) 04CA28: 302C 00D4 move.w ($d4,A4), D0 ; D0=old [A4+$d4] value 04CA2C: 322C 00D6 move.w ($d6,A4), D1 ; D1=old [A4+$d6] value+8 04CA30: 4EB9 0000 5FDE jsr $5fde.l 04CA36: 303C 0F00 move.w #$f00, D0 ; lowest word of D0=#$f00 04CA3A: 322D 031A move.w ($31a,A5), D1 ; D1=[A5+$31a] value 04CA3E: 243C 0020 0000 move.l #$200000, D2 ; D2=#$200000 04CA44: 4EB9 0000 5F94 jsr $5f94.l 04CA4A: 046C 0009 00D4 subi.w #$9, ($d4,A4) 04CA50: 526C 00D6 addq.w #1, ($d6,A4) 04CA54: 302C 00D4 move.w ($d4,A4), D0 ; D0=old [A4+$d4] value-9 04CA58: 322C 00D6 move.w ($d6,A4), D1 ; D1=old [A4+$d6] value+9 04CA5C: 4EB9 0000 5FDE jsr $5fde.l 04CA62: 207C 0006 E866 movea.l #$6e866, A0 ; A0=[$6e866] 04CA68: 303C 0F00 move.w #$f00, D0 ; lowest word of D0=#$f00 04CA6C: 223C 0020 0000 move.l #$200000, D1 ; D1=#$200000 04CA72: 4EB9 0000 5F0C jsr $5f0c.l 04CA78: 5A6C 00D4 addq.w #5, ($d4,A4) 04CA7C: 302C 00D4 move.w ($d4,A4), D0 ; D0=old [A4+$d4] value-4 04CA80: 322C 00D6 move.w ($d6,A4), D1 ; D1=old [A4+$d6] value+9 04CA84: 4EB9 0000 5FDE jsr $5fde.l 04CA8A: 303C 0F00 move.w #$f00, D0 ; lowest word of D0=#$f00 04CA8E: 322D 0120 move.w ($120,A5), D1 ; D1=[A5+$120] 04CA92: 243C 0020 0000 move.l #$200000, D2 ; D2=#$200000 04CA98: 4EB9 0000 5F94 jsr $5f94.l 04CA9E: 586C 00D4 addq.w #4, ($d4,A4) 04CAA2: 302C 00D4 move.w ($d4,A4), D0 ; D0=old [A4+$d4] value 04CAA6: 322C 00D6 move.w ($d6,A4), D1 ; D1=old [A4+$d6] value+9 04CAAA: 4EB9 0000 5FDE jsr $5fde.l 04CAB0: 303C 0F00 move.w #$f00, D0 ; lowest word of D0=#$f00 04CAB4: 322D 0122 move.w ($122,A5), D1 ; D1=[A5+$122] value 04CAB8: 243C 0020 0000 move.l #$200000, D2 ; D2=#$200000 04CABE: 4EB9 0000 5F94 jsr $5f94.l 04CAC4: 046C 0009 00D4 subi.w #$9, ($d4,A4) 04CACA: 526C 00D6 addq.w #1, ($d6,A4) 04CACE: 302C 00D4 move.w ($d4,A4), D0 ; D0=old [A4+$d4] value-9 04CAD2: 322C 00D6 move.w ($d6,A4), D1 ; D1=old [A4+$d6] value+10 04CAD6: 4EB9 0000 5FDE jsr $5fde.l 04CADC: 207C 0006 E86C movea.l #$6e86c, A0 ; A0=[$6e86c] 04CAE2: 303C 0F00 move.w #$f00, D0 ; lowest word of D0=#$f00 04CAE6: 223C 0020 0000 move.l #$200000, D1 ; D1=#$200000 04CAEC: 4EB9 0000 5F0C jsr $5f0c.l 04CAF2: 5A6C 00D4 addq.w #5, ($d4,A4) 04CAF6: 302C 00D4 move.w ($d4,A4), D0 ; D0=old [A4+$d4] value-4 04CAFA: 322C 00D6 move.w ($d6,A4), D1 ; D1=old [A4+$d6] value+10 04CAFE: 4EB9 0000 5FDE jsr $5fde.l 04CB04: 303C 0F00 move.w #$f00, D0 ; lowest word of D0=#$f00 04CB08: 322D 0320 move.w ($320,A5), D1 ; D1=[A5+$320] value 04CB0C: 243C 0020 0000 move.l #$200000, D2 ; D2=#$200000 04CB12: 4EB9 0000 5F94 jsr $5f94.l 04CB18: 586C 00D4 addq.w #4, ($d4,A4) 04CB1C: 302C 00D4 move.w ($d4,A4), D0 ; D0=old [A4+$d4] value 04CB20: 322C 00D6 move.w ($d6,A4), D1 ; D1=old [A4+$d6] value+10 04CB24: 4EB9 0000 5FDE jsr $5fde.l 04CB2A: 303C 0F00 move.w #$f00, D0 ; lowest word of D0=#$f00 04CB2E: 322D 0322 move.w ($322,A5), D1 ; D1=[A5+$322] value 04CB32: 243C 0020 0000 move.l #$200000, D2 ; D2=#$200000 04CB38: 4EB9 0000 5F94 jsr $5f94.l 04CB3E: 586C 00D4 addq.w #4, ($d4,A4) 04CB42: 046C 000A 00D6 subi.w #$a, ($d6,A4) 04CB48: 302C 00D4 move.w ($d4,A4), D0 ; D0=old [A4+$d4] value+4 04CB4C: 322C 00D6 move.w ($d6,A4), D1 ; D1=old [A4+$d6] value 04CB50: 4EB9 0000 5FDE jsr $5fde.l 04CB56: 207C 0006 E7D8 movea.l #$6e7d8, A0 ; A0=[$6e7d8] 04CB5C: 303C 0F00 move.w #$f00, D0 ; lowest word of D0=#$f00 04CB60: 223C 0020 0000 move.l #$200000, D1 ; D1=#$200000 04CB66: 4EB9 0000 5F0C jsr $5f0c.l 04CB6C: 566C 00D4 addq.w #3, ($d4,A4) 04CB70: 302C 00D4 move.w ($d4,A4), D0 ; D0=old [A4+$d4] value+7 04CB74: 322C 00D6 move.w ($d6,A4), D1 ; D1=old [A4+$d6] value 04CB78: 4EB9 0000 5FDE jsr $5fde.l 04CB7E: 303C 0F00 move.w #$f00, D0 ; lowest word of D0=#$f00 04CB82: 122C 00C4 move.b ($c4,A4), D1 ; D1=[A4+$c4] value 04CB86: 243C 0020 0000 move.l #$200000, D2 ; D2=#$200000 04CB8C: 4EB9 0000 5F60 jsr $5f60.l 04CB92: 576C 00D4 subq.w #3, ($d4,A4) 04CB96: 526C 00D6 addq.w #1, ($d6,A4) 04CB9A: 302C 00D4 move.w ($d4,A4), D0 ; D0=old [A4+$d4] value+4 04CB9E: 322C 00D6 move.w ($d6,A4), D1 ; D1=old [A4+$d6] value+1 04CBA2: 4EB9 0000 5FDE jsr $5fde.l 04CBA8: 207C 0006 E7DC movea.l #$6e7dc, A0 ; A0=[$6e7dc] 04CBAE: 303C 0F00 move.w #$f00, D0 ; lowest word of D0=#$f00 04CBB2: 223C 0020 0000 move.l #$200000, D1 ; D1=#$200000 04CBB8: 4EB9 0000 5F0C jsr $5f0c.l 04CBBE: 5A6C 00D4 addq.w #5, ($d4,A4) 04CBC2: 302C 00D4 move.w ($d4,A4), D0 ; D0=old [A4+$d4] value+9 04CBC6: 322C 00D6 move.w ($d6,A4), D1 ; D1=old [A4+$d6] value+1 04CBCA: 4EB9 0000 5FDE jsr $5fde.l 04CBD0: 303C 0F00 move.w #$f00, D0 ; lowest word of D0=#$f00 04CBD4: 122C 00C5 move.b ($c5,A4), D1 ; D1=[A4+$c5] value 04CBD8: 243C 0020 0000 move.l #$200000, D2 ; D2=#$200000 04CBDE: 4EB9 0000 5F60 jsr $5f60.l 04CBE4: 5B6C 00D4 subq.w #5, ($d4,A4) 04CBE8: 526C 00D6 addq.w #1, ($d6,A4) 04CBEC: 302C 00D4 move.w ($d4,A4), D0 ; D0=old [A4+$d4] value+4 04CBF0: 322C 00D6 move.w ($d6,A4), D1 ; D1=old [A4+$d6] value+2 04CBF4: 4EB9 0000 5FDE jsr $5fde.l 04CBFA: 207C 0006 E7E2 movea.l #$6e7e2, A0 ; A0=[$6e7e2]04CC00: 303C 0F00 move.w #$f00, D0 ; lowest word of D0=#$f00 04CC04: 223C 0020 0000 move.l #$200000, D1 ; D1=#$200000 04CC0A: 4EB9 0000 5F0C jsr $5f0c.l 04CC10: 586C 00D4 addq.w #4, ($d4,A4) 04CC14: 302C 00D4 move.w ($d4,A4), D0 ; D0=old [A4+$d4] value+8 04CC18: 322C 00D6 move.w ($d6,A4), D1 ; D1=old [A4+$d6] value+2 04CC1C: 4EB9 0000 5FDE jsr $5fde.l 04CC22: 303C 0F00 move.w #$f00, D0 ; lowest word of D0=#$f00 04CC26: 122C 00C6 move.b ($c6,A4), D1 ; D1=[A4+$c6] value 04CC2A: 243C 0020 0000 move.l #$200000, D2 ; D2=#$200000 04CC30: 4EB9 0000 5F60 jsr $5f60.l 04CC36: 576C 00D4 subq.w #3, ($d4,A4) 04CC3A: 5A6C 00D6 addq.w #5, ($d6,A4) 04CC3E: 302C 00D4 move.w ($d4,A4), D0 ; D0=old [A4+$d4] value+5 04CC42: 322C 00D6 move.w ($d6,A4), D1 ; D1=old [A4+$d6] value+7 04CC46: 4EB9 0000 5FDE jsr $5fde.l 04CC4C: 207C 0006 E872 movea.l #$6e872, A0 ; A0=[$6e872] 04CC52: 303C 0F00 move.w #$f00, D0 ; lowest word of D0=#$f00 04CC56: 223C 0020 0000 move.l #$200000, D1 ; D1=#$200000 04CC5C: 4EB9 0000 5F0C jsr $5f0c.l 04CC62: 302D 0118 move.w ($118,A5), D0 ; D0=[A5+$118] value 04CC66: 906D 0318 sub.w ($318,A5), D0 ; D0=[A5+$118] value-[A5+$318] value 04CC6A: 4EB9 0000 2F94 jsr $2f94.l 04CC70: 1940 00C8 move.b D0, ($c8,A4) ; [A4+$c8] value=([A5+$118] value-[A5+$318] value) or -([A5+$118] value-[A5+$318] value) 04CC74: 566C 00D4 addq.w #3, ($d4,A4) 04CC78: 302C 00D4 move.w ($d4,A4), D0 ; D0=old [A4+$d4] value+8 04CC7C: 322C 00D6 move.w ($d6,A4), D1 ; D1=old [A4+$d6] value+7 04CC80: 4EB9 0000 5FDE jsr $5fde.l 04CC86: 303C 0F00 move.w #$f00, D0 ; lowest word of D0=#$f00 04CC8A: 122C 00C8 move.b ($c8,A4), D1 ; D1=[A4+$c8] value 04CC8E: 243C 0020 0000 move.l #$200000, D2 ; D2=#$200000 04CC94: 4EB9 0000 5F60 jsr $5f60.l 04CC9A: 576C 00D4 subq.w #3, ($d4,A4) 04CC9E: 546C 00D6 addq.w #2, ($d6,A4) 04CCA2: 302C 00D4 move.w ($d4,A4), D0 ; D0=old [A4+$d4] value+5 04CCA6: 322C 00D6 move.w ($d6,A4), D1 ; D1=old [A4+$d6] value+9 04CCAA: 4EB9 0000 5FDE jsr $5fde.l 04CCB0: 207C 0006 E876 movea.l #$6e876, A0 ; A0=[$6e876] 04CCB6: 303C 0F00 move.w #$f00, D0 ; lowest word of D0=#$f00 04CCBA: 223C 0020 0000 move.l #$200000, D1 ; D1=#$200000 04CCC0: 4EB9 0000 5F0C jsr $5f0c.l 04CCC6: 302D 0120 move.w ($120,A5), D0 ; D0=[A5+$120] value 04CCCA: 906D 0320 sub.w ($320,A5), D0 ; D0=[A5+$120] value-[A5+$320] value 04CCCE: 4EB9 0000 2F94 jsr $2f94.l 04CCD4: 1940 00C8 move.b D0, ($c8,A4) ; [A4+$c8] value=([A5+$120] value-[A5+$320] value) or -([A5+$120] value-[A5+$320] value) 04CCD8: 566C 00D4 addq.w #3, ($d4,A4) 04CCDC: 302C 00D4 move.w ($d4,A4), D0 ; D0=old [A4+$d4] value+8 04CCE0: 322C 00D6 move.w ($d6,A4), D1 ; D1=old [A4+$d6] value+9 04CCE4: 4EB9 0000 5FDE jsr $5fde.l 04CCEA: 303C 0F00 move.w #$f00, D0 ; lowest word of D0=#$f00 04CCEE: 122C 00C8 move.b ($c8,A4), D1 ; D1=[A4+$c8] value 04CCF2: 243C 0020 0000 move.l #$200000, D2 ; D2=#$200000 04CCF8: 4EB9 0000 5F60 jsr $5f60.l 04CCFE: 4E75 rts
avatar

36

005F60: 1601 move.b D1, D3 ; D3=[A4+$70] value 005F62: 0241 00F0 andi.w #$f0, D1 005F66: E809 lsr.b #4, D1 ; D1=([A4+$70] value&#$f0)<<4 005F68: 103B 101A move.b ($1a,PC,D1.w), D0 ; lowest byte of D0=(([A4+$70] value&#$f0)<<4)+PC+$1a 005F6C: 23C0 003C 0000 move.l D0, $3c0000.l ; send (high 2 bytes of swapped (((old [A4+$d4] value+3)<<5)+[A4+$d6] value+#$7002)+#$f00+((([A4+$70] value&#$f0)<<4)+PC+$1a)) value to REG_VRAMADDR 005F72: 0243 000F andi.w #$f, D3 005F76: 103B 300C move.b ($c,PC,D3.w), D0 ; lowest byte of D0=([A4+$70] value&3)+PC+$c 005F7A: D082 add.l D2, D0 ; D0=(high 2 bytes of swapped (((old [A4+$d4] value+3)<<5)+[A4+$d6] value+#$7002)+#$f00+(([A4+$70] value&3)+PC+$c))+#$200000 005F7C: 23C0 003C 0000 move.l D0, $3c0000.l ; send ((high 2 bytes of swapped (((old [A4+$d4] value+3)<<5)+[A4+$d6] value+#$7002)+#$f00+(([A4+$70] value&3)+PC+$c))+#$200000) value to REG_VRAMADDR 005F82: 4E75 rts005F94: 3601 move.w D1, D3 ; D3=[A5+$118] value 005F96: E049 lsr.w #8, D1 ; D1=[A5+$118] value>>8 005F98: E809 lsr.b #4, D1 ; lowest byte of D1=(lowest byte of [A5+$118] value)>>12 005F9A: 103B 10E8 move.b (-$18,PC,D1.w), D0 ; lowest byte of D0=high byte of ([A5+$118] value>>8)+((lowest byte of [A5+$118] value)>>12)+PC-$18 005F9E: 23C0 003C 0000 move.l D0, $3c0000.l ; send (high byte of ([A5+$118] value>>8)+((lowest byte of [A5+$118] value)>>12)+PC-$18) to REG_VRAMADDR 005FA4: 3203 move.w D3, D1 ; D1=[A5+$118] value 005FA6: 0241 0F00 andi.w #$f00, D1 ; D1=[A5+$118] value&#$f00 005FAA: E049 lsr.w #8, D1 ; D1=([A5+$118] value&#$f00)>>8 005FAC: 103B 10D6 move.b (-$2a,PC,D1.w), D0 ; D0=(([A5+$118] value&#$f00)>>8)+PC-$2a 005FB0: D082 add.l D2, D0 ; D0=(([A5+$118] value&#$f00)>>8)+PC-$2a+#$200000 005FB2: 23C0 003C 0000 move.l D0, $3c0000.l ; send ((([A5+$118] value&#$f00)>>8)+PC-$2a+#$200000) to REG_VRAMADDR 005FB8: 3203 move.w D3, D1 ; D1=[A5+$118] value 005FBA: 0241 00F0 andi.w #$f0, D1 ; D1=[A5+$118] value&#$f0 005FBE: E809 lsr.b #4, D1 ; D1=([A5+$118] value&#$f0)>>4 005FC0: 103B 10C2 move.b (-$3e,PC,D1.w), D0 ; D0=(([A5+$118] value&#$f0)>>4)+PC-$3e 005FC4: D082 add.l D2, D0 ; D0=(([A5+$118] value&#$f0)>>4)+PC-$3e+#$200000 005FC6: 23C0 003C 0000 move.l D0, $3c0000.l ; send ((([A5+$118] value&#$f0)>>4)+PC-$3e+#$200000) to REG_VRAMADDR 005FCC: 0243 000F andi.w #$f, D3 005FD0: 103B 30B2 move.b (-$4e,PC,D3.w), D0 ; D0=([A5+$118] value&#$f)+PC-$4e 005FD4: D082 add.l D2, D0 ; D0=([A5+$118] value&#$f)+PC-$4e+#$200000 005FD6: 23C0 003C 0000 move.l D0, $3c0000.l ; send (([A5+$118] value&#$f)+PC-$4e+#$200000) to REG_VRAMADDR 005FDC: 4E75 rts002F94: 4A40 tst.w D0 002F96: 6A02 bpl $2f9a 002F98: 4440 neg.w D0 002F9A: 4E75 rts
avatar

37

04CD6E: 4DF9 0010 FD96 lea $10fd96.l, A6 ; P1_CURRENT value moving to A6 04CD74: 4EBA 0034 jsr ($34,PC) ; ($4cdaa) 04CD78: 4E71 nop 04CD7A: 4EBA 026A jsr ($26a,PC) ; ($4cfe6) 04CD7E: 4E71 nop 04CD80: 4EBA 0348 jsr ($348,PC) ; ($4d0ca) 04CD84: 4E71 nop 04CD86: 4EBA 0224 jsr ($224,PC) ; ($4cfac) 04CD8A: 4E71 nop 04CD8C: 4E75 rts04CDAA: 102D 39CD move.b ($39cd,A5), D0 ; D0=[A5+$39cd] value 04CDAE: 0240 000F andi.w #$f, D0 ; D0=[A5+$39cd] value&#$f 04CDB2: 41FA 0030 lea ($30,PC) ; ($4cde4), A0 04CDB6: 4E71 nop 04CDB8: 7200 moveq #$0, D1 ; D1=0 04CDBA: 1230 0000 move.b (A0,D0.w), D1 ; D1=[$4cde4] value+([A5+$39cd] value&#$f) 04CDBE: 6B00 0022 bmi $4cde2 ; if ([$4cde4] value+([A5+$39cd] value&#$f)) value is negative then end the subroutine ahead of time 04CDC2: D241 add.w D1, D1 04CDC4: D241 add.w D1, D1 ; else D1=([$4cde4] value+([A5+$39cd] value&#$f))*4 04CDC6: 41FA 002C lea ($2c,PC) ; ($4cdf4), A0 04CDCA: 4E71 nop 04CDCC: 082D 0002 39F5 btst #$2, ($39f5,A5) 04CDD2: 6700 0008 beq $4cddc ; if 3rd bit of [A5+$39f5] value is equal to 0, then skip next 2 steps 04CDD6: 41FA 002C lea ($2c,PC) ; ($4ce04), A0 04CDDA: 4E71 nop 04CDDC: 2070 1000 movea.l (A0,D1.w), A0 ; A0=(([$4cde4] value+([A5+$39cd] value&#$f))*4)+[$4cdf4] value or (([$4cde4] value+([A5+$39cd] value&#$f))*4)+[$4ce04] value 04CDE0: 4E90 jsr (A0) 04CDE2: 4E75 rts04CFE6: 082D 0000 39F5 btst #$0, ($39f5,A5) 04CFEC: 6600 006E bne $4d05c ; if 1st bit of [A5+$39f5] value is equal to 1 then goto $4d05c subroutine 04CFF0: 082D 0004 39CD btst #$4, ($39cd,A5) 04CFF6: 6700 0012 beq $4d00a ; else if 5th bit of [A5+$39cd] value is equal to 0 then goto $4d00a subroutine 04CFFA: 206C 00C0 movea.l ($c0,A4), A0 ; A0=[A4+$c0] 04CFFE: 7000 moveq #$0, D0 ; D0=0 04D000: 102C 00D0 move.b ($d0,A4), D0 ; D0=[A4+$d0] value 04D004: 5230 0000 addq.b #1, (A0,D0.w) ; ([A4+$c0] value+[A4+$d0] value)+#1 04D008: 4E75 rts 04D00A: 082D 0005 39CD btst #$5, ($39cd,A5) 04D010: 6700 0012 beq $4d024 ; else if 6th bit of [A5+$39cd] value is equal to 0 then goto $4d024 subroutine 04D014: 206C 00C0 movea.l ($c0,A4), A0 ; A0=[A4+$c0] 04D018: 7000 moveq #$0, D0 ; D0=0 04D01A: 102C 00D0 move.b ($d0,A4), D0 ; D0=[A4+$d0] value 04D01E: 5330 0000 subq.b #1, (A0,D0.w) ; ([A4+$c0] value+[A4+$d0] value)-#1 04D022: 4E75 rts 04D024: 082D 0006 39CD btst #$6, ($39cd,A5) 04D02A: 6700 0014 beq $4d040 ; else if 7th bit of [A5+$39cd] value is equal to 0 then goto $4d040 subroutine 04D02E: 206C 00C0 movea.l ($c0,A4), A0 ; A0=[A4+$c0] 04D032: 7000 moveq #$0, D0 ; D0=0 04D034: 102C 00D0 move.b ($d0,A4), D0 ; D0=[A4+$d0] value 04D038: 0630 0010 0000 addi.b #$10, (A0,D0.w) ; ([A4+$c0] value+[A4+$d0] value)+#$10 04D03E: 4E75 rts 04D040: 082D 0007 39CD btst #$7, ($39cd,A5) 04D046: 6700 0012 beq $4d05a ; else if 8th bit of [A5+$39cd] value is equal to 0 then end the subroutine ahead of time 04D04A: 206C 00C0 movea.l ($c0,A4), A0 ; A0=[A4+$c0] 04D04E: 7000 moveq #$0, D0 ; D0=0 04D050: 102C 00D0 move.b ($d0,A4), D0 ; D0=[A4+$d0] value 04D054: 0430 0010 0000 subi.b #$10, (A0,D0.w) ; ([A4+$c0] value+[A4+$d0] value)-#$10 04D05A: 4E75 rts 04D05C: 082D 0001 39F6 btst #$1, ($39f6,A5) 04D062: 6700 0026 beq $4d08a ; if 2nd bit of [A5+$39f6] value is equal to 0 then goto $4d08a subroutine 04D066: 06AC 0000 0400 00C0 addi.l #$400, ($c0,A4)) ; else [A4+$c0] value+#$400 04D06E: 522C 0070 addq.b #1, ($70,A4) ; [A4+$70] value+1 04D072: 0C2C 0019 0070 cmpi.b #$19, ($70,A4) 04D078: 6300 004E bls $4d0c8 ; if [A4+$70] value<=#$19 then end all subroutines in this quote 04D07C: 532C 0070 subq.b #1, ($70,A4) 04D080: 04AC 0000 0400 00C0 subi.l #$400, ($c0,A4) ; else restore old values of [A4+$c0] and [A4+$70] 04D088: 4E75 rts 04D08A: 082D 0003 39F6 btst #$3, ($39f6,A5) 04D090: 6700 0020 beq $4d0b2 ; if 4th bit of [A5+$39f6] value is equal to 0 then goto $4d0b2 subroutine 04D094: 04AC 0000 0400 00C0 subi.l #$400, ($c0,A4) ; else [A4+$c0] value-#$400 04D09C: 532C 0070 subq.b #1, ($70,A4) ; [A4+$70] value-1 04D0A0: 6400 0026 bcc $4d0c8 ; if [A4+$70] value>=1 then end all subroutines in this quote 04D0A4: 522C 0070 addq.b #1, ($70,A4) 04D0A8: 06AC 0000 0400 00C0 addi.l #$400, ($c0,A4) ; else restore old values of [A4+$c0] and [A4+$70] 04D0B0: 4E75 rts 04D0B2: 082D 0004 39CD btst #$4, ($39cd,A5) 04D0B8: 6700 0004 beq $4d0be ; if 5th bit of [A5+$39cd] value is equal to 0 then goto $4d0be subroutine 04D0BC: 4E75 rts 04D0BE: 082D 0005 39CD btst #$5, ($39cd,A5) 04D0C4: 6700 0002 beq $4d0c8 ; if 5th bit of [A5+$39cd] value is equal to 0 then goto $4d0c8 subroutine 04D0C8: 4E75 rts04D0CA: 396C 00CC 00D4 move.w ($cc,A4), ($d4,A4) 04D0D0: 396C 00CE 00D6 move.w ($ce,A4), ($d6,A4) 04D0D6: 302C 00D4 move.w ($d4,A4), D0 ; D0=[A4+$cc] value 04D0DA: 322C 00D6 move.w ($d6,A4), D1 ; D0=[A4+$ce] value 04D0DE: 4EB9 0000 5FDE jsr $5fde.l 04D0E4: 207C 0006 E7D8 movea.l #$6e7d8, A0 ; A0=[$6e7d8] 04D0EA: 303C 0F00 move.w #$f00, D0 ; D0=#$f00 04D0EE: 223C 0020 0000 move.l #$200000, D1 ; D1=#$200000 04D0F4: 4EB9 0000 5F0C jsr $5f0c.l 04D0FA: 566C 00D4 addq.w #3, ($d4,A4) 04D0FE: 302C 00D4 move.w ($d4,A4), D0 ; D0=[A4+$cc] value+3 04D102: 322C 00D6 move.w ($d6,A4), D1 ; D0=[A4+$ce] value 04D106: 4EB9 0000 5FDE jsr $5fde.l 04D10C: 303C 0F00 move.w #$f00, D0 ; D0=#$f00 04D110: 122C 0070 move.b ($70,A4), D1 ; D1=[A4+$70] value 04D114: 243C 0020 0000 move.l #$200000, D2 ; D2=#$200000 04D11A: 4EB9 0000 5F60 jsr $5f60.l 04D120: 576C 00D4 subq.w #3, ($d4,A4) 04D124: 526C 00D6 addq.w #1, ($d6,A4) 04D128: 7000 moveq #$0, D0 ; D0=0 04D12A: 102C 0070 move.b ($70,A4), D0 ; D0=[A4+$70] value 04D12E: E948 lsl.w #4, D0 ; D0=[A4+$70] value<<4 04D130: 43F9 0007 BD00 lea $7bd00.l, A1 ; A1=[$7bd00] 04D136: D2C0 adda.w D0, A1 ; A1=[$7bd00 +([A4+$70] value<<4)] 04D138: 302C 00D4 move.w ($d4,A4), D0 ; D0=[A4+$cc] value 04D13C: 322C 00D6 move.w ($d6,A4), D1 ; D0=[A4+$ce] value+1 04D140: 4EB9 0000 5FDE jsr $5fde.l 04D146: 2049 movea.l A1, A0 ; A0=[$7bd00 +([A4+$70] value<<4)] 04D148: 303C 0F00 move.w #$f00, D0 ; D0=#$f00 04D14C: 223C 0020 0000 move.l #$200000, D1 ; D1=#$200000 04D152: 4EB9 0000 5F0C jsr $5f0c.l 04D158: 526C 00D6 addq.w #1, ($d6,A4) 04D15C: 302C 00D4 move.w ($d4,A4), D0 ; D0=[A4+$cc] value 04D160: 322C 00D6 move.w ($d6,A4), D1 ; D0=[A4+$ce] value+2 04D164: 4EB9 0000 5FDE jsr $5fde.l 04D16A: 207C 0006 E806 movea.l #$6e806, A0 ; A0=[$6e806] 04D170: 303C 0F00 move.w #$f00, D0 ; D0=#$f00 04D174: 223C 0020 0000 move.l #$200000, D1 ; D1=#$200000 04D17A: 4EB9 0000 5F0C jsr $5f0c.l 04D180: 506C 00D4 addq.w #8, ($d4,A4) 04D184: 302C 00D4 move.w ($d4,A4), D0 ; D0=[A4+$cc] value+8 04D188: 322C 00D6 move.w ($d6,A4), D1 ; D0=[A4+$ce] value+2 04D18C: 4EB9 0000 5FDE jsr $5fde.l 04D192: 303C 0F00 move.w #$f00, D0 ; D0=#$f00 04D196: 122C 00D1 move.b ($d1,A4), D1 ; D1=[A4+$d1] value 04D19A: 243C 0020 0000 move.l #$200000, D2 ; D2=#$200000 04D1A0: 4EB9 0000 5F60 jsr $5f60.l 04D1A6: 046C 0008 00D4 subi.w #$8, ($d4,A4) 04D1AC: 546C 00D6 addq.w #2, ($d6,A4) 04D1B0: 202C 00C0 move.l ($c0,A4), D0 ; D0=[A4+$c0] value 04D1B4: 0240 FC00 andi.w #$fc00, D0 ; D0=[A4+$c0] value&#$fc00 04D1B8: 7200 moveq #$0, D1 ; D1=0 04D1BA: 122C 00D3 move.b ($d3,A4), D1 ; D1=[A4+$d3] value 04D1BE: D241 add.w D1, D1 04D1C0: D241 add.w D1, D1 ; D1=[A4+$d3] value*4 04D1C2: D081 add.l D1, D0 ; D0=([A4+$c0] value&#$fc00)+([A4+$d3] value*4) 04D1C4: 2C40 movea.l D0, A6 ; A6=[([A4+$c0] value&#$fc00)+([A4+$d3] value*4)] 04D1C6: 7E0F moveq #$f, D7 ; D7=#$f 04D1C8: 7C03 moveq #$3, D6 ; D6=#$3 04D1CA: 7A00 moveq #$0, D5 ; D5=0 04D1CC: 7800 moveq #$0, D4 ; D4=0 04D1CE: 302C 00D4 move.w ($d4,A4), D0 ; D0=[A4+$cc] value 04D1D2: 322C 00D6 move.w ($d6,A4), D1 ; D0=[A4+$ce] value+4 04D1D6: 4EB9 0000 5FDE jsr $5fde.l 04D1DC: 303C 0F00 move.w #$f00, D0 ; D0=#$f00 04D1E0: B82C 00D0 cmp.b ($d0,A4), D4 04D1E4: 6600 000E bne $4d1f4 ; if [A4+$d0] value!=0 then skip next 3 steps 04D1E8: BA2C 00D2 cmp.b ($d2,A4), D5 04D1EC: 6600 0006 bne $4d1f4 ; else if [A4+$d2] value!=0 then skip next step 04D1F0: 0040 8000 ori.w #$8000, D0 ; else D0=#$8000|#$f00=#$8f00 04D1F4: 121E move.b (A6)+, D1 ; D1=[([A4+$c0] value&#$fc00)+([A4+$d3] value*4)+1] value 04D1F6: 243C 0020 0000 move.l #$200000, D2 ; D2=#$200000 04D1FC: 4EB9 0000 5F60 jsr $5f60.l 04D202: 566C 00D4 addq.w #3, ($d4,A4) 04D206: 5244 addq.w #1, D4 ; D4=1 04D208: 5346 subq.w #1, D6 ; D6=2 04D20A: 6A00 0012 bpl $4d21e ; Here is begin of the cycle. The next 5 steps will use to be skipped while D6 is positive. 04D20E: 046C 000C 00D4 subi.w #$c, ($d4,A4) 04D214: 526C 00D6 addq.w #1, ($d6,A4) 04D218: 7800 moveq #$0, D4 ; D4=0 04D21A: 5245 addq.w #1, D5 ; D5+1 04D21C: 7C03 moveq #$3, D6 ; D6=3 04D21E: 51CF FFAE dbra D7, $4d1ce ; D7-1, if D7 <> 0 jump back to $4d1ce 04D222: 4E75 rts04CFAC: 082D 0003 39F5 btst #$3, ($39f5,A5) 04CFB2: 6700 0030 beq $4cfe4 ; if 4th bit of [A5+$39f5] value is equal to 0 then end the subroutine ahead of time 04CFB6: 082D 0002 39F6 btst #$2, ($39f6,A5) 04CFBC: 6700 0026 beq $4cfe4 ; if 3rd bit of [A5+$39f6] value is equal to 0 then end the subroutine ahead of time 04CFC0: 206C 0084 movea.l ($84,A4), A0 ; A0=[A4+$84] 04CFC4: 4228 00C9 clr.b ($c9,A0) ; [A0+$c9] value=0 04CFC8: 0028 0001 00C9 ori.b #$1, ($c9,A0) ; [A0+$c9] value=0|1=1 04CFCE: 302C 00CC move.w ($cc,A4), D0 ; D0=[A4+$cc] value 04CFD2: 322C 00CE move.w ($ce,A4), D1 ; D1=[A4+$ce] value 04CFD6: 343C 000F move.w #$f, D2 ; D2=#$f 04CFDA: 363C 0007 move.w #$7, D3 ; D3=#$7 04CFDE: 4EB9 0000 5FEA jsr $5fea.l 04CFE4: 4E75 rts
avatar

38

04D28A: 4DF9 0010 FD96 lea $10fd96.l, A6 ; P1_CURRENT value moving to A6 04D290: 4EBA 0034 jsr ($34,PC) ; ($4d2c6) 04D294: 4E71 nop 04D296: 4EBA 0254 jsr ($254,PC) ; ($4d4ec) 04D29A: 4E71 nop 04D29C: 4EBA 0360 jsr ($360,PC) ; ($4d5fe) 04D2A0: 4E71 nop 04D2A2: 4EBA 020E jsr ($20e,PC) ; ($4d4b2) 04D2A6: 4E71 nop 04D2A8: 4E75 rts04D2C6: 102D 39CD move.b ($39cd,A5), D0 ; D0=[A5+$39cd] value 04D2CA: 0240 000F andi.w #$f, D0 ; D0=[A5+$39cd] value&#$f 04D2CE: 41FA 0030 lea ($30,PC) ; ($4d300), A0 04D2D2: 4E71 nop 04D2D4: 7200 moveq #$0, D1 ; D1=0 04D2D6: 1230 0000 move.b (A0,D0.w), D1 ; D1=([A5+$39cd] value&#$f)+$ff02 04D2DA: 6B00 0022 bmi $4d2fe ; if ([A5+$39cd] value&#$f)+$ff02 is negative then end the subroutime ahead of time 04D2DE: D241 add.w D1, D1 04D2E0: D241 add.w D1, D1 ; else D1=(([A5+$39cd] value&#$f)+$ff02)*4 04D2E2: 41FA 002C lea ($2c,PC) ; ($4d310), A0 04D2E6: 4E71 nop 04D2E8: 082D 0002 39F5 btst #$2, ($39f5,A5) 04D2EE: 6700 0008 beq $4d2f8 ; if 3rd bit of [A5+$39f5] value is equal to 0 then skip next 2 steps 04D2F2: 41FA 002C lea ($2c,PC) ; ($4d320), A0 04D2F6: 4E71 nop 04D2F8: 2070 1000 movea.l (A0,D1.w), A0 ; A0=[((([A5+$39cd] value&#$f)+$ff02)*4)+$4d330] or [((([A5+$39cd] value&#$f)+$ff02)*4)+$4d41a] 04D2FC: 4E90 jsr (A0) 04D2FE: 4E75 rts04D4EC: 082D 0000 39F5 btst #$0, ($39f5,A5) 04D4F2: 6600 0082 bne $4d576 ; if 1st bit of [A5+$39f5] value is equal to 0 the goto $4d576 subroutine 04D4F6: 082D 0004 39CD btst #$4, ($39cd,A5) 04D4FC: 6700 000E beq $4d50c ; if 5th bit of [A5+$39f5] value is equal to 0 then goto $4d50c subroutine 04D500: 4EBA 05AA jsr ($5aa,PC) ; ($4daac) 04D504: 4E71 nop 04D506: 2040 movea.l D0, A0 ; A0=[([A4+$c0] value+[A4+$c4] value)+([A4+$c8] value*[A4+$70] value*#$1a)+([A4+$c8] value*[A4+$d1] value)+[A4+$d0] value] 04D508: 5210 addq.b #1, (A0) ; [([A4+$c0] value+[A4+$c4] value)+([A4+$c8] value*[A4+$70] value*#$1a)+([A4+$c8] value*[A4+$d1] value)+[A4+$d0] value]+1 04D50A: 4E75 rts04D5FE: 396C 00CC 00D4 move.w ($cc,A4), ($d4,A4) 04D604: 396C 00CE 00D6 move.w ($ce,A4), ($d6,A4) 04D60A: 7000 moveq #$0, D0 ; D0=0 04D60C: 102C 00D3 move.b ($d3,A4), D0 ; D0=[A4+$d3] value 04D610: E948 lsl.w #4, D0 ; D0=[A4+$d3] value<<4 04D612: 43F9 0006 E964 lea $6e964.l, A1 ; A1=[$6e964] 04D618: D2C0 adda.w D0, A1 ; A1=[$6e964+([A4+$d3] value<<4)] 04D61A: 302C 00D4 move.w ($d4,A4), D0 ; D0=[A4+$cc] value 04D61E: 322C 00D6 move.w ($d6,A4), D1 ; D1=[A4+$ce] value 04D622: 4EB9 0000 5FDE jsr $5fde.l 04D628: 2049 movea.l A1, A0 ; A0=[$6e964+([A4+$d3] value<<4)] 04D62A: 303C 0F00 move.w #$f00, D0 ; D0=#$f00 04D62E: 223C 0020 0000 move.l #$200000, D1 ; D1=#$200000 04D634: 4EB9 0000 5F0C jsr $5f0c.l 04D63A: 526C 00D6 addq.w #1, ($d6,A4) 04D63E: 302C 00D4 move.w ($d4,A4), D0 ; D0=[A4+$cc] value 04D642: 322C 00D6 move.w ($d6,A4), D1 ; D1=[A4+$ce] value+1 04D646: 207C 0006 E838 movea.l #$6e838, A0 ; A0=[$6e838] 04D64C: 343C 0F00 move.w #$f00, D2 ; D2=#$f00 04D650: 363C 0001 move.w #$1, D3 ; D3=1 04D654: 4EB9 0000 5F22 jsr $5f22.l 04D65A: 586C 00D4 addq.w #4, ($d4,A4) 04D65E: 302C 00D4 move.w ($d4,A4), D0 ; D0=[A4+$cc] value+4 04D662: 322C 00D6 move.w ($d6,A4), D1 ; D1=[A4+$ce] value+1 04D666: 4EB9 0000 5FDE jsr $5fde.l 04D66C: 303C 0F00 move.w #$f00, D0 ; D0=#$f00 04D670: 122C 0071 move.b ($71,A4), D1 ; D1=[A4+$71] value 04D674: 243C 0020 0000 move.l #$200000, D2 ; D2=#$200000 04D67A: 4EB9 0000 5F60 jsr $5f60.l 04D680: 566C 00D4 addq.w #3, ($d4,A4) 04D684: 302C 0070 move.w ($70,A4), D0 ; D0=[A4+$70] value 04D688: E948 lsl.w #4, D0 ; D0=[A4+$70] value<<4 04D68A: 43F9 0007 BD00 lea $7bd00.l, A1 ; A1=[$7bd00] 04D690: D2C0 adda.w D0, A1 ; A1=[$7bd00+([A4+$70] value<<4)] 04D692: 302C 00D4 move.w ($d4,A4), D0 ; D0=[A4+$cc] value+7 04D696: 322C 00D6 move.w ($d6,A4), D1 ; D1=[A4+$ce] value+1 04D69A: 4EB9 0000 5FDE jsr $5fde.l 04D6A0: 2049 movea.l A1, A0 ; A0=[$7bd00+([A4+$70] value<<4)] 04D6A2: 303C 0F00 move.w #$f00, D0 ; D0=#$f00 04D6A6: 223C 0020 0000 move.l #$200000, D1 ; D1=#$200000 04D6AC: 4EB9 0000 5F0C jsr $5f0c.l 04D6B2: 576C 00D4 subq.w #3, ($d4,A4) 04D6B6: 526C 00D6 addq.w #1, ($d6,A4) 04D6BA: 302C 00D4 move.w ($d4,A4), D0 ; D0=[A4+$cc] value+4 04D6BE: 322C 00D6 move.w ($d6,A4), D1 ; D1=[A4+$ce] value+2 04D6C2: 4EB9 0000 5FDE jsr $5fde.l 04D6C8: 303C 0F00 move.w #$f00, D0 ; D0=#$f00 04D6CC: 122C 00D1 move.b ($d1,A4), D1 ; D1=[A4+$d1] value 04D6D0: 243C 0020 0000 move.l #$200000, D2 ; D2=#$200000 04D6D6: 4EB9 0000 5F60 jsr $5f60.l 04D6DC: 566C 00D4 addq.w #3, ($d4,A4) 04D6E0: 7000 moveq #$0, D0 ; D0=0 04D6E2: 102C 00D1 move.b ($d1,A4), D0 ; D0=[A4+$d1] value 04D6E6: E948 lsl.w #4, D0 ; D0=[A4+$d1] value<<4 04D6E8: 43F9 0007 BD00 lea $7bd00.l, A1 ; A1=[$7bd00] 04D6EE: D2C0 adda.w D0, A1 ; A1=[$7bd00+([A4+$d1] value<<4)] 04D6F0: 302C 00D4 move.w ($d4,A4), D0 ; D0=[A4+$cc] value+7 04D6F4: 322C 00D6 move.w ($d6,A4), D1 ; D1=[A4+$ce] value+2 04D6F8: 4EB9 0000 5FDE jsr $5fde.l 04D6FE: 2049 movea.l A1, A0 ; A0=[$7bd00+([A4+$d1] value<<4)] 04D700: 303C 0F00 move.w #$f00, D0 ; D0=#$f00 04D704: 223C 0020 0000 move.l #$200000, D1 ; D1=#$200000 04D70A: 4EB9 0000 5F0C jsr $5f0c.l 04D710: 5F6C 00D4 subq.w #7, ($d4,A4) 04D714: 546C 00D6 addq.w #2, ($d6,A4) 04D718: 302C 00D4 move.w ($d4,A4), D0 ; D0=[A4+$cc] value 04D71C: 322C 00D6 move.w ($d6,A4), D1 ; D1=[A4+$ce] value+4 04D720: 343C 000D move.w #$d, D2 ; D2=#$d 04D724: 363C 0007 move.w #$7, D3 ; D3=7 04D728: 4EB9 0000 5FEA jsr $5fea.l 04D72E: 202C 00C0 move.l ($c0,A4), D0 ; D0=[A4+$c0] value 04D732: D0AC 00C4 add.l ($c4,A4), D0 ; D0=[A4+$c0] value+[A4+$c4] value 04D736: 7200 moveq #$0, D1 ; D1=0 04D738: 122C 00C8 move.b ($c8,A4), D1 ; D1=[A4+$c8] value 04D73C: C2EC 0070 mulu.w ($70,A4), D1 ; D1=[A4+$c8] value*[A4+$70] value 04D740: C2FC 001A mulu.w #$1a, D1 ; D1=[A4+$c8] value*[A4+$70] value*#$1a 04D744: D081 add.l D1, D0 ; D0=([A4+$c0] value+[A4+$c4] value)+([A4+$c8] value*[A4+$70] value*#$1a) 04D746: 7200 moveq #$0, D1 ; D1=0 04D748: 7400 moveq #$0, D2 ; D2=0 04D74A: 122C 00C9 move.b ($c9,A4), D1 ; D1=[A4+$c9] value 04D74E: 142C 00C8 move.b ($c8,A4), D2 ; D2=[A4+$c8] value 04D752: C2C2 mulu.w D2, D1 ; D1=[A4+$c9] value*[A4+$c8] value 04D754: D081 add.l D1, D0 ; D0=([A4+$c0] value+[A4+$c4] value)+([A4+$c8] value*[A4+$70] value*#$1a)+([A4+$c9] value*[A4+$c8] value) 04D756: 2C40 movea.l D0, A6 ; A6=[([A4+$c0] value+[A4+$c4] value)+([A4+$c8] value*[A4+$70] value*#$1a)+([A4+$c9] value*[A4+$c8] value)] 04D758: 7E00 moveq #$0, D7 ; D7=0 04D75A: 1E2C 00C8 move.b ($c8,A4), D7 ; D7=[A4+$c8] value 04D75E: CEFC 0008 mulu.w #$8, D7 ; D7=[A4+$c8] value*8 04D762: 5347 subq.w #1, D7 ; D7=([A4+$c8] value*8)-1 04D764: 1C2C 00C8 move.b ($c8,A4), D6 ; D6=[A4+$c8] value 04D768: 7A00 moveq #$0, D5 ; D5=0 04D76A: 7800 moveq #$0, D4 ; D4=0 04D76C: 302C 00D4 move.w ($d4,A4), D0 ; D0=[A4+$cc] value 04D770: 322C 00D6 move.w ($d6,A4), D1 ; D1=[A4+$ce] value+4 04D774: 4EB9 0000 5FDE jsr $5fde.l 04D77A: 303C 0F00 move.w #$f00, D0 ; D0=#$f00 04D77E: B82C 00D0 cmp.b ($d0,A4), D4 04D782: 6600 000E bne $4d792 ; if [A4+$d0] value!=0 then skip next 3 steps 04D786: BA2C 00D2 cmp.b ($d2,A4), D5 04D78A: 6600 0006 bne $4d792 ; else if [A4+$d2] value!=0 then skip next 1 steps 04D78E: 0040 8000 ori.w #$8000, D0 ; else D0=[A4+$cc] value|#$8000 04D792: 121E move.b (A6)+, D1 ; D1=[([A4+$c0] value+[A4+$c4] value)+([A4+$c8] value*[A4+$70] value*#$1a)+([A4+$c9] value*[A4+$c8] value)]+1 04D794: 243C 0020 0000 move.l #$200000, D2 ; D2=#$200000 04D79A: 4EB9 0000 5F60 jsr $5f60.l 04D7A0: 566C 00D4 addq.w #3, ($d4,A4) 04D7A4: 5244 addq.w #1, D4 ; D4=1 04D7A6: 5306 subq.b #1, D6 ; D6=[A4+$c8] value-1 04D7A8: 6600 001C bne $4d7c6 ; if [A4+$c8] value!=1 then skip to $4d7c6 04D7AC: 7000 moveq #$0, D0 ; else D0=0 04D7AE: 102C 00C8 move.b ($c8,A4), D0 ; D0=[A4+$c8] value 04D7B2: C0FC 0003 mulu.w #$3, D0 ; D0=[A4+$c8] value*3 04D7B6: 916C 00D4 sub.w D0, ($d4,A4) ; ([A4+$cc] value+3)-([A4+$c8] value*3) 04D7BA: 526C 00D6 addq.w #1, ($d6,A4) 04D7BE: 7800 moveq #$0, D4 ; D4=0 04D7C0: 5245 addq.w #1, D5 ; D5=1 04D7C2: 1C2C 00C8 move.b ($c8,A4), D6 ; D6=[A4+$c8] value 04D7C6: 51CF FFA4 dbra D7, $4d76c ; (([A4+$c8] value*8)-1)-1, if ([A4+$c8] value*8)-1<>0 then jump back to $4d76c 04D7CA: 066C 0001 00D6 addi.w #$1, ($d6,A4) 04D7D0: 302C 00D4 move.w ($d4,A4), D0 04D7D4: 322C 00D6 move.w ($d6,A4), D1 ; D1=old [A4+$d6] value+1 04D7D8: 4EB9 0000 5FDE jsr $5fde.l 04D7DE: 207C 0006 E85A movea.l #$6e85a, A0 ; A0=[#$6e85a] 04D7E4: 303C 0F00 move.w #$f00, D0 ; D0=#$f00 04D7E8: 223C 0020 0000 move.l #$200000, D1 ; D1=#$200000 04D7EE: 4EB9 0000 5F0C jsr $5f0c.l 04D7F4: 5A6C 00D4 addq.w #5, ($d4,A4) 04D7F8: 302C 00D4 move.w ($d4,A4), D0 ; D0=old [A4+$d4] value+5 04D7FC: 322C 00D6 move.w ($d6,A4), D1 ; D1=old [A4+$d6] value+1 04D800: 4EB9 0000 5FDE jsr $5fde.l 04D806: 303C 0F00 move.w #$f00, D0 ; D0=#$f00 04D80A: 322D 0118 move.w ($118,A5), D1 ; D1=[A5+$118] value 04D80E: 243C 0020 0000 move.l #$200000, D2 ; D2=#$200000 04D814: 4EB9 0000 5F94 jsr $5f94.l 04D81A: 586C 00D4 addq.w #4, ($d4,A4) 04D81E: 302C 00D4 move.w ($d4,A4), D0 ; D0=old [A4+$d4] value+9 04D822: 322C 00D6 move.w ($d6,A4), D1 ; D1=old [A4+$d6] value+1 04D826: 4EB9 0000 5FDE jsr $5fde.l 04D82C: 303C 0F00 move.w #$f00, D0 ; D0=#$f00 04D830: 322D 011A move.w ($11a,A5), D1 ; D1=[A5+$11a] value 04D834: 243C 0020 0000 move.l #$200000, D2 ; D2=#$200000 04D83A: 4EB9 0000 5F94 jsr $5f94.l 04D840: 046C 0009 00D4 subi.w #$9, ($d4,A4) 04D846: 526C 00D6 addq.w #1, ($d6,A4) 04D84A: 302C 00D4 move.w ($d4,A4), D0 ; D0=old [A4+$d4] value 04D84E: 322C 00D6 move.w ($d6,A4), D1 ; D1=old [A4+$d6] value+2 04D852: 4EB9 0000 5FDE jsr $5fde.l 04D858: 207C 0006 E860 movea.l #$6e860, A0 ; A0=[#$6e860] 04D85E: 303C 0F00 move.w #$f00, D0 ; D0=#$f00 04D862: 223C 0020 0000 move.l #$200000, D1 ; D1=#$200000 04D868: 4EB9 0000 5F0C jsr $5f0c.l 04D86E: 5A6C 00D4 addq.w #5, ($d4,A4) 04D872: 302C 00D4 move.w ($d4,A4), D0 ; D0=old [A4+$d4] value+5 04D876: 322C 00D6 move.w ($d6,A4), D1 ; D1=old [A4+$d6] value+2 04D87A: 4EB9 0000 5FDE jsr $5fde.l 04D880: 303C 0F00 move.w #$f00, D0 ; D0=#$f00 04D884: 322D 0318 move.w ($318,A5), D1 ; D1=[A5+$318] value 04D888: 243C 0020 0000 move.l #$200000, D2 ; D2=#$200000 04D88E: 4EB9 0000 5F94 jsr $5f94.l 04D894: 586C 00D4 addq.w #4, ($d4,A4) 04D898: 302C 00D4 move.w ($d4,A4), D0 ; D0=old [A4+$d4] value+9 04D89C: 322C 00D6 move.w ($d6,A4), D1 ; D1=old [A4+$d6] value+2 04D8A0: 4EB9 0000 5FDE jsr $5fde.l 04D8A6: 303C 0F00 move.w #$f00, D0 ; D0=#$f00 04D8AA: 322D 031A move.w ($31a,A5), D1 ; D1=[A5+$31a] value 04D8AE: 243C 0020 0000 move.l #$200000, D2 ; D2=#$200000 04D8B4: 4EB9 0000 5F94 jsr $5f94.l 04D8BA: 046C 0009 00D4 subi.w #$9, ($d4,A4) 04D8C0: 526C 00D6 addq.w #1, ($d6,A4) 04D8C4: 302C 00D4 move.w ($d4,A4), D0 ; D0=old [A4+$d4] value 04D8C8: 322C 00D6 move.w ($d6,A4), D1 ; D1=old [A4+$d6] value+3 04D8CC: 4EB9 0000 5FDE jsr $5fde.l 04D8D2: 207C 0006 E866 movea.l #$6e866, A0 ; A0=[#$6e866] 04D8D8: 303C 0F00 move.w #$f00, D0 ; D0=#$f00 04D8DC: 223C 0020 0000 move.l #$200000, D1 ; D1=#$200000 04D8E2: 4EB9 0000 5F0C jsr $5f0c.l 04D8E8: 5A6C 00D4 addq.w #5, ($d4,A4) 04D8EC: 302C 00D4 move.w ($d4,A4), D0 ; D0=old [A4+$d4] value+5 04D8F0: 322C 00D6 move.w ($d6,A4), D1 ; D1=old [A4+$d6] value+3 04D8F4: 4EB9 0000 5FDE jsr $5fde.l 04D8FA: 303C 0F00 move.w #$f00, D0 ; D0=#$f00 04D8FE: 322D 0120 move.w ($120,A5), D1 ; D1=[A5+$120] value 04D902: 243C 0020 0000 move.l #$200000, D2 ; D2=#$200000 04D908: 4EB9 0000 5F94 jsr $5f94.l 04D90E: 586C 00D4 addq.w #4, ($d4,A4) 04D912: 302C 00D4 move.w ($d4,A4), D0 ; D0=old [A4+$d4] value+9 04D916: 322C 00D6 move.w ($d6,A4), D1 ; D1=old [A4+$d6] value+3 04D91A: 4EB9 0000 5FDE jsr $5fde.l 04D920: 303C 0F00 move.w #$f00, D0 ; D0=#$f00 04D924: 322D 0122 move.w ($122,A5), D1 ; D1=[A5+$122] value 04D928: 243C 0020 0000 move.l #$200000, D2 ; D2=#$200000 04D92E: 4EB9 0000 5F94 jsr $5f94.l 04D934: 046C 0009 00D4 subi.w #$9, ($d4,A4) 04D93A: 526C 00D6 addq.w #1, ($d6,A4) 04D93E: 302C 00D4 move.w ($d4,A4), D0 ; D0=old [A4+$d4] value 04D942: 322C 00D6 move.w ($d6,A4), D1 ; D1=old [A4+$d6] value+4 04D946: 4EB9 0000 5FDE jsr $5fde.l 04D94C: 207C 0006 E86C movea.l #$6e86c, A0 ; A0=[#$6e86c] 04D952: 303C 0F00 move.w #$f00, D0 ; D0=#$f00 04D956: 223C 0020 0000 move.l #$200000, D1 ; D1=#$200000 04D95C: 4EB9 0000 5F0C jsr $5f0c.l 04D962: 5A6C 00D4 addq.w #5, ($d4,A4) 04D966: 302C 00D4 move.w ($d4,A4), D0 ; D0=old [A4+$d4] value+5 04D96A: 322C 00D6 move.w ($d6,A4), D1 ; D1=old [A4+$d6] value+404D96E: 4EB9 0000 5FDE jsr $5fde.l 04D974: 303C 0F00 move.w #$f00, D0 ; D0=#$f00 04D978: 322D 0320 move.w ($320,A5), D1 ; D1=[A5+$320] value 04D97C: 243C 0020 0000 move.l #$200000, D2 ; D2=#$200000 04D982: 4EB9 0000 5F94 jsr $5f94.l 04D988: 586C 00D4 addq.w #4, ($d4,A4) 04D98C: 302C 00D4 move.w ($d4,A4), D0 ; D0=old [A4+$d4] value+9 04D990: 322C 00D6 move.w ($d6,A4), D1 ; D1=old [A4+$d6] value+4 04D994: 4EB9 0000 5FDE jsr $5fde.l 04D99A: 303C 0F00 move.w #$f00, D0 ; D0=#$f00 04D99E: 322D 0322 move.w ($322,A5), D1 ; D1=[A5+$322] value 04D9A2: 243C 0020 0000 move.l #$200000, D2 ; D2=#$200000 04D9A8: 4EB9 0000 5F94 jsr $5f94.l 04D9AE: 066C 0005 00D4 addi.w #$5, ($d4,A4) 04D9B4: 576C 00D6 subq.w #3, ($d6,A4) 04D9B8: 302C 00D4 move.w ($d4,A4), D0 ; D0=old [A4+$d4] value+14 04D9BC: 322C 00D6 move.w ($d6,A4), D1 ; D1=old [A4+$d6] value+1 04D9C0: 4EB9 0000 5FDE jsr $5fde.l 04D9C6: 207C 0006 E872 movea.l #$6e872, A0 ; A0=[#$6e872] 04D9CC: 303C 0F00 move.w #$f00, D0 ; D0=#$f00 04D9D0: 223C 0020 0000 move.l #$200000, D1 ; D1=#$200000 04D9D6: 4EB9 0000 5F0C jsr $5f0c.l 04D9DC: 302D 0118 move.w ($118,A5), D0 ; D0=[A5+$118] value 04D9E0: 906D 0318 sub.w ($318,A5), D0 ; D0=[A5+$118] value-[A5+$318] value 04D9E4: 4EB9 0000 2F94 jsr $2f94.l 04D9EA: 1940 0050 move.b D0, ($50,A4) ; [A4+$50] value=[A5+$118] value-[A5+$318] value or -([A5+$118] value-[A5+$318] value) 04D9EE: 566C 00D4 addq.w #3, ($d4,A4) 04D9F2: 302C 00D4 move.w ($d4,A4), D0 ; D0=old [A4+$d4] value+17 04D9F6: 322C 00D6 move.w ($d6,A4), D1 ; D1=old [A4+$d6] value+1 04D9FA: 4EB9 0000 5FDE jsr $5fde.l 04DA00: 303C 0F00 move.w #$f00, D0 ; D0=#$f00 04DA04: 122C 0050 move.b ($50,A4), D1 ; D1=[A5+$118] value-[A5+$318] value or -([A5+$118] value-[A5+$318] value) 04DA08: 243C 0020 0000 move.l #$200000, D2 ; D2=#$200000 04DA0E: 4EB9 0000 5F60 jsr $5f60.l 04DA14: 576C 00D4 subq.w #3, ($d4,A4) 04DA18: 546C 00D6 addq.w #2, ($d6,A4) 04DA1C: 302C 00D4 move.w ($d4,A4), D0 ; D0=old [A4+$d4] value+14 04DA20: 322C 00D6 move.w ($d6,A4), D1 ; D1=old [A4+$d6] value+3 04DA24: 4EB9 0000 5FDE jsr $5fde.l 04DA2A: 207C 0006 E876 movea.l #$6e876, A0 ; A0=[#$6e876] 04DA30: 303C 0F00 move.w #$f00, D0 ; D0=#$f00 04DA34: 223C 0020 0000 move.l #$200000, D1 ; D1=#$200000 04DA3A: 4EB9 0000 5F0C jsr $5f0c.l 04DA40: 302D 0120 move.w ($120,A5), D0 ; D0=[A5+$120] value 04DA44: 906D 0320 sub.w ($320,A5), D0 ; D0=[A5+$120] value-[A5+$320] value 04DA48: 4EB9 0000 2F94 jsr $2f94.l 04DA4E: 1940 0050 move.b D0, ($50,A4) ; [A4+$50] value=[A5+$120] value-[A5+$320] value or -([A5+$120] value-[A5+$320] value) 04DA52: 566C 00D4 addq.w #3, ($d4,A4) 04DA56: 302C 00D4 move.w ($d4,A4), D0 ; D0=old [A4+$d4] value+17 04DA5A: 322C 00D6 move.w ($d6,A4), D1 ; D1=old [A4+$d6] value+3 04DA5E: 4EB9 0000 5FDE jsr $5fde.l 04DA64: 303C 0F00 move.w #$f00, D0 ; D0=#$f00 04DA68: 122C 0050 move.b ($50,A4), D1 ; D1=[A5+$120] value-[A5+$320] value or -([A5+$120] value-[A5+$320] value) 04DA6C: 243C 0020 0000 move.l #$200000, D2 ; D2=#$200000 04DA72: 4EB9 0000 5F60 jsr $5f60.l 04DA78: 4E75 rts04D4B2: 082D 0003 39F5 btst #$3, ($39f5,A5) 04D4B8: 6700 0030 beq $4d4ea ; if 4th bit of [A5+$39f5] value is equal to 0 then end the subroutine ahead of time 04D4BC: 082D 0002 39F6 btst #$2, ($39f6,A5) 04D4C2: 6700 0026 beq $4d4ea ; else if 3rd bit of [A5+$39f6] value is equal to 0 then end the subroutine ahead of time 04D4C6: 206C 0084 movea.l ($84,A4), A0 ; else A0=[A4+$84] 04D4CA: 4228 00C9 clr.b ($c9,A0) ; [A4+14D] value=0 04D4CE: 0028 0001 00C9 ori.b #$1, ($c9,A0) ; [A4+14D] value=0|1=1 04D4D4: 302C 00CC move.w ($cc,A4), D0 ; D0=[A4+$cc] value 04D4D8: 322C 00CE move.w ($ce,A4), D1 ; D1=[A4+$ce] value 04D4DC: 343C 0015 move.w #$15, D2 ; D2=#$15 04D4E0: 363C 0010 move.w #$10, D3 ; D3=#$10 04D4E4: 4EB9 0000 5FEA jsr $5fea.l 04D4EA: 4E75 rts04D300: FF02 dc.w $ff02; opcode 111104D310: 0004 D330 ori.b #$30, D404D320: 0004 D41A ori.b #$1a, D404D576: 082D 0004 39CD btst #$4, ($39cd,A5) 04D57C: 6700 0010 beq $4d58e ; if 5th bit of [A5+$39cd] value is equal to 0 then goto $4d58e, else... 04D580: 4EBA 052A jsr ($52a,PC) ; ($4daac) 04D584: 4E71 nop 04D586: 2040 movea.l D0, A0 ; A0=[([A4+$c0] value+[A4+$c4] value)+([A4+$c8] value*[A4+$70] value*#$1a)+([A4+$c8] value*[A4+$d1] value)+[A4+$d0] value] 04D588: 0610 0010 addi.b #$10, (A0) ; [([A4+$c0] value+[A4+$c4] value)+([A4+$c8] value*[A4+$70] value*#$1a)+([A4+$c8] value*[A4+$d1] value)+[A4+$d0] value]+#$10 04D58C: 4E75 rts 04D58E: 082D 0005 39CD btst #$5, ($39cd,A5) 04D594: 6700 0010 beq $4d5a6 ; if 6th bit of [A5+$39cd] value is equal to 0 then goto $4d5a6, else... 04D598: 4EBA 0512 jsr ($512,PC) ; ($4daac) 04D59C: 4E71 nop 04D59E: 2040 movea.l D0, A0 ; A0=[([A4+$c0] value+[A4+$c4] value)+([A4+$c8] value*[A4+$70] value*#$1a)+([A4+$c8] value*[A4+$d1] value)+[A4+$d0] value] 04D5A0: 0410 0010 subi.b #$10, (A0) ; [([A4+$c0] value+[A4+$c4] value)+([A4+$c8] value*[A4+$70] value*#$1a)+([A4+$c8] value*[A4+$d1] value)+[A4+$d0] value]-#$10 04D5A4: 4E75 rts 04D5A6: 082D 0006 39CD btst #$6, ($39cd,A5) 04D5AC: 6700 0018 beq $4d5c6 ; if 7th bit of [A5+$39cd] value is equal to 0 then goto $4d5c6, else... 04D5B0: 4EBA 0046 jsr ($46,PC) ; ($4d5f8) 04D5B4: 4E71 nop 04D5B6: 536C 0070 subq.w #1, ($70,A4) 04D5BA: 6400 0034 bcc $4d5f0 ; if [A4+$70] value>=1 then end the subroutine ahead of time 04D5BE: 397C 0019 0070 move.w #$19, ($70,A4) ; else [A4+$70] value=#$19 04D5C4: 4E75 rts 04D5C6: 082D 0007 39CD btst #$7, ($39cd,A5) 04D5CC: 6700 0022 beq $4d5f0 ; if 8th bit of [A5+$39cd] value is equal to 0 then end the subroutine ahead of time, else... 04D5D0: 4EBA 0020 jsr ($20,PC) ; ($4d5f2) 04D5D4: 4E71 nop 04D5D6: 532C 00D3 subq.b #1, ($d3,A4) 04D5DA: 6400 0008 bcc $4d5e4 ; if [A4+$d3] value>=1 then skip next step 04D5DE: 197C 0007 00D3 move.b #$7, ($d3,A4) ; else [A4+$d3] value=7 04D5E4: 4EBA 0494 jsr ($494,PC) ; ($4da7a) 04D5E8: 4E71 nop 04D5EA: 4EBA 04AC jsr ($4ac,PC) ; ($4da98) 04D5EE: 4E71 nop 04D5F0: 4E75 rts
avatar

39

04D5F2: 422C 00D0 clr.b ($d0,A4) 04D5F6: 4E75 rts04D5F8: 422C 00D0 clr.b ($d0,A4) 04D5FC: 4E75 rts04DA7A: 7000 moveq #$0, D0 ; D0=0 04DA7C: 7200 moveq #$0, D1 ; D1=0 04DA7E: 102C 00D3 move.b ($d3,A4), D0 ; D0=[A4+$d3] value 04DA82: 41FA 005A lea ($5a,PC) ; ($4dade), A0 04DA86: 4E71 nop 04DA88: 5300 subq.b #1, D0 04DA8A: 6500 0006 bcs $4da92 ; if [A4+$d3] value<1 then skip next 2 steps 04DA8E: D298 add.l (A0)+, D1 ; else D1=[$0a91]=#$42 04DA90: 60F6 bra $4da88 ; here is a begin of cycle, and it will continue till [A4+$d3] value became less than 1 04DA92: 2941 00C4 move.l D1, ($c4,A4) 04DA96: 4E75 rts04DA98: 7000 moveq #$0, D0 ; D0=0 04DA9A: 102C 00D3 move.b ($d3,A4), D0 ; D0=[A4+$d3] value 04DA9E: 41FA 005E lea ($5e,PC) ; ($4dafe), A0 04DAA2: 4E71 nop 04DAA4: 1970 0000 00C8 move.b (A0,D0.w), ($c8,A4) ; [A4+$c8] value=[A4+$d3] value+#$0404 04DAAA: 4E75 rts04DADE: 0000 0A90 ori.b #$90, D0000A90: 4842 swap D204DAFE: 0404 0404 subi.b #$4, D404DAAC: 202C 00C0 move.l ($c0,A4), D0 ; D0=[A4+$c0] value 04DAB0: D0AC 00C4 add.l ($c4,A4), D0 ; D0=[A4+$c0] value+[A4+$c4] value 04DAB4: 7200 moveq #$0, D1 ; D1=0 04DAB6: 122C 00C8 move.b ($c8,A4), D1 ; D1=[A4+$c8] value 04DABA: C2EC 0070 mulu.w ($70,A4), D1 ; D1=[A4+$c8] value*[A4+$70] value 04DABE: C2FC 001A mulu.w #$1a, D1 ; D1=[A4+$c8] value*[A4+$70] value*#$1a 04DAC2: D081 add.l D1, D0 ; D0=([A4+$c0] value+[A4+$c4] value)+([A4+$c8] value*[A4+$70] value*#$1a) 04DAC4: 7200 moveq #$0, D1 ; D1=0 04DAC6: 7400 moveq #$0, D2 ; D2=0 04DAC8: 122C 00C8 move.b ($c8,A4), D1 ; D1=[A4+$c8] value 04DACC: 142C 00D1 move.b ($d1,A4), D2 ; D2=[A4+$d1] value 04DAD0: C2C2 mulu.w D2, D1 ; D1=[A4+$c8] value*[A4+$d1] value 04DAD2: D081 add.l D1, D0 ; D0=([A4+$c0] value+[A4+$c4] value)+([A4+$c8] value*[A4+$70] value*#$1a)+([A4+$c8] value*[A4+$d1] value) 04DAD4: 7200 moveq #$0, D1 ; D1=0 04DAD6: 122C 00D0 move.b ($d0,A4), D1 ; D1=[A4+$d0] value 04DADA: D081 add.l D1, D0 ; D0=([A4+$c0] value+[A4+$c4] value)+([A4+$c8] value*[A4+$70] value*#$1a)+([A4+$c8] value*[A4+$d1] value)+[A4+$d0] value 04DADC: 4E75 rts04D50C: 082D 0005 39CD btst #$5, ($39cd,A5) 04D512: 6700 000E beq $4d522 ; if 6th bit of [A5+$39cd] value is equal to 0 then goto $4d522 subroutine 04D516: 4EBA 0594 jsr ($594,PC) ; ($4daac) 04D51A: 4E71 nop 04D51C: 2040 movea.l D0, A0 ; A0=[([A4+$c0] value+[A4+$c4] value)+([A4+$c8] value*[A4+$70] value*#$1a)+([A4+$c8] value*[A4+$d1] value)+[A4+$d0] value] 04D51E: 5310 subq.b #1, (A0) ; [([A4+$c0] value+[A4+$c4] value)+([A4+$c8] value*[A4+$70] value*#$1a)+([A4+$c8] value*[A4+$d1] value)+[A4+$d0] value]-1 04D520: 4E75 rts 04D522: 082D 0006 39CD btst #$6, ($39cd,A5) 04D528: 6700 001C beq $4d546 ; if 7th bit of [A5+$39cd] value is equal to 0 then goto $4d546 subroutine 04D52C: 4EBA 00CA jsr ($ca,PC) ; ($4d5f8) 04D530: 4E71 nop 04D532: 526C 0070 addq.w #1, ($70,A4) 04D536: 0C6C 0019 0070 cmpi.w #$19, ($70,A4) 04D53C: 6300 0036 bls $4d574 ; if old [A4+$70] value+1<=#$19 then end the subroutine ahead of time 04D540: 426C 0070 clr.w ($70,A4) ; else [A4+$d3] value=0 04D544: 4E75 rts 04D546: 082D 0007 39CD btst #$7, ($39cd,A5) 04D54C: 6700 0026 beq $4d574 ; if 8th bit of [A5+$39cd] is equal to 0 then end the subroutine ahead of time, else... 04D550: 4EBA 00A0 jsr ($a0,PC) ; ($4d5f2) 04D554: 4E71 nop 04D556: 522C 00D3 addq.b #1, ($d3,A4) 04D55A: 0C2C 0007 00D3 cmpi.b #$7, ($d3,A4) 04D560: 6300 0006 bls $4d568 ; if old [A4+$d3] value+1<=7 then skip next step 04D564: 422C 00D3 clr.b ($d3,A4) ; else [A4+$d3] value=0 04D568: 4EBA 0510 jsr ($510,PC) ; ($4da7a) 04D56C: 4E71 nop 04D56E: 4EBA 0528 jsr ($528,PC) ; ($4da98) 04D572: 4E71 nop 04D574: 4E75 rts005F22: 3800 move.w D0, D4 ; D4=[A4+$cc] value 005F24: 3A01 move.w D1, D5 ; D5=[A4+$ce] value+1 005F26: 4EBA 00B6 jsr ($b6,PC) ; ($5fde) 005F2A: 4E71 nop 005F2C: 3002 move.w D2, D0 ; lowest word of swapped (([A4+$cc] value<<5)+([A4+$ce] value+1)+#$7002)=#$f00 005F2E: 1018 move.b (A0)+, D0 ; lowest byte of swapped (([A4+$cc] value<<5)+([A4+$ce] value+1)+#$7002)=[$6e839] value=#$41 005F30: 0C00 00FF cmpi.b #-$1, D0 005F34: 6700 0028 beq $5f5e ; looks like here is a begin of cycle which will be continue till lowest byte of swapped (([A4+$cc] value<<5)+([A4+$ce] value+1)+#$7002) become -1 005F38: 0C00 000D cmpi.b #$d, D0 005F3C: 6600 0012 bne $5f50 ; if lowest byte of swapped (([A4+$cc] value<<5)+([A4+$ce] value+1)+#$7002)!=#$d then skip to $5f50 005F40: DA43 add.w D3, D5 ; else D5=[A4+$ce] value+1+1=[A4+$ce] value+2 005F42: 3004 move.w D4, D0 ; D0=[A4+$cc] value 005F44: 3205 move.w D5, D1 ; D1=[A4+$ce] value+1 005F46: 4EBA 0096 jsr ($96,PC) ; ($5fde) 005F4A: 4E71 nop 005F4C: 3002 move.w D2, D0 ; lowest word of swapped (([A4+$cc] value<<5)+([A4+$ce] value+1)+#$7002)=#$f00 005F4E: 60DE bra $5f2e ; jump back to $5f2e, and lowest byte of D0 will become equal to #$41 again. Is this cycle an infinitive? 005F50: 23C0 003C 0000 move.l D0, $3c0000.l ; send (highest word of swapped (([A4+$cc] value<<5)+([A4+$ce] value+1)+#$7002)+high byte of #$f00+lowest byte) to REG_VRAMADDR 005F56: 0680 0020 0000 addi.l #$200000, D0 ; D0=(highest word of swapped (([A4+$cc] value<<5)+([A4+$ce] value+1)+#$7002)+high byte of #$f00+lowest byte)+#$200000 005F5C: 60D0 bra $5f2e ; jump back to $5f2e, and lowest byte of D0 will become equal to #$41 again. Is this cycle an infinitive? 005F5E: 4E75 rts002F94: 4A40 tst.w D0 002F96: 6A02 bpl $2f9a ; if [A5+$118] value-[A5+$318] value is negative then change its sign 002F98: 4440 neg.w D0 002F9A: 4E75 rts
avatar

40

Hello, It's me again after return from vacation. For now only 2 P1_CURRENT interactions is left in the whole KoF '94 disassembly.

04DB40: 4DF9 0010 FD96 lea $10fd96.l, A6 04DB46: 4EBA 002E jsr ($2e,PC) ; ($4db76) 04DB4A: 4E71 nop 04DB4C: 4EBA 016C jsr ($16c,PC) ; ($4dcba) 04DB50: 4E71 nop 04DB52: 4EBA 012C jsr ($12c,PC) ; ($4dc80) 04DB56: 4E71 nop 04DB58: 4E75 rts04DB76: 102D 39CD move.b ($39cd,A5), D0 ; D0=[A5+$39cd] value 04DB7A: 0240 000F andi.w #$f, D0 ; D0=[A5+$39cd] value&#$f 04DB7E: 41FA 0030 lea ($30,PC) ; ($4dbb0), A0 ; A0=[$4dbb0] 04DB82: 4E71 nop 04DB84: 7200 moveq #$0, D1 ; D1=0 04DB86: 1230 0000 move.b (A0,D0.w), D1 ; D1=[$4dbb0] value+0=[$4dbb0] value 04DB8A: 6B00 0022 bmi $4dbae ; if [$4dbb0] value is negative then end the subroutine ahead of time 04DB8E: D241 add.w D1, D1 04DB90: D241 add.w D1, D1 ; else D1=[$4dbb0] value*4 04DB92: 41FA 002C lea ($2c,PC) ; ($4dbc0), A0 ; A0=[$4dbc0] 04DB96: 4E71 nop 04DB98: 082D 0002 39F5 btst #$2, ($39f5,A5) 04DB9E: 6700 0008 beq $4dba8; if 3rd bit of [A5+$39f5] value is equal to 0 then skip next 2 steps 04DBA2: 41FA 002C lea ($2c,PC) ; ($4dbd0), A0 ; else A0=[$4dbd0] 04DBA6: 4E71 nop 04DBA8: 2070 1000 movea.l (A0,D1.w), A0 ; A0=[$4dbd0+([$4dbb0] value*4)] 04DBAC: 4E90 jsr (A0) ; goto [$4dbd0+([$4dbb0] value*4)] subroutine 04DBAE: 4E75 rts04DCBA: 396C 00CC 00D4 move.w ($cc,A4), ($d4,A4) ; [A4+$d4] value=[A4+$cc] value 04DCC0: 396C 00CE 00D6 move.w ($ce,A4), ($d6,A4) ; [A4+$d6] value=[A4+$ce] value 04DCC6: 7000 moveq #$0, D0 ; D0=0 04DCC8: 102D 3A5E move.b ($3a5e,A5), D0 ; D0=[A5+$3a5e] value 04DCCC: D040 add.w D0, D0 04DCCE: D040 add.w D0, D0 ; D0=[A5+$3a5e] value*4 04DCD0: 41FA F02E lea (-$fd2,PC) ; ($4cd00), A0 ; A0=[$4cd00] 04DCD4: 2E30 0000 move.l (A0,D0.w), D7 ; D7=[$4cd00] value+([A5+$3a5e] value*4) 04DCD8: 302C 00D4 move.w ($d4,A4), D0 ; D0=[A4+$cc] value 04DCDC: 322C 00D6 move.w ($d6,A4), D1 ; D1=[A4+$ce] value 04DCE0: 4EB9 0000 5FDE jsr $5fde.l 04DCE6: 2047 movea.l D7, A0 ; A0=D7 value 04DCE8: 303C 0F00 move.w #$f00, D0 ; lowest word of swapped (([A4+$cc] value<<5)+[A4+$ce] value+#$7002) value=#$f00 04DCEC: 223C 0020 0000 move.l #$200000, D1 ; D1=#$200000 04DCF2: 4EB9 0000 5F0C jsr $5f0c.l 04DCF8: 526C 00D6 addq.w #1, ($d6,A4) 04DCFC: 302C 00D4 move.w ($d4,A4), D0 ; D0=[A4+$cc] value 04DD00: 322C 00D6 move.w ($d6,A4), D1 ; D1=[A4+$ce] value+1 04DD04: 4EB9 0000 5FDE jsr $5fde.l 04DD0A: 207C 0006 E7DC movea.l #$6e7dc, A0 ; A0=[#$6e7dc] 04DD10: 303C 0F00 move.w #$f00, D0 ; lowest word of swapped (([A4+$cc] value<<5)+([A4+$ce] value+1)+#$7002) value=#$f00 04DD14: 223C 0020 0000 move.l #$200000, D1 ; D1=#$200000 04DD1A: 4EB9 0000 5F0C jsr $5f0c.l 04DD20: 5A6C 00D4 addq.w #5, ($d4,A4) 04DD24: 302C 00D4 move.w ($d4,A4), D0 ; D0=[A4+$cc] value+5 04DD28: 322C 00D6 move.w ($d6,A4), D1 ; D1=[A4+$ce] value+1 04DD2C: 4EB9 0000 5FDE jsr $5fde.l 04DD32: 303C 0F00 move.w #$f00, D0 ; lowest word of swapped ((([A4+$cc] value+5)<<5)+([A4+$ce] value+1)+#$7002) value=#$f00 04DD36: 122D 3A5F move.b ($3a5f,A5), D1 ; D1=[A5+$3a5f] value 04DD3A: 243C 0020 0000 move.l #$200000, D2 ; D2=#$200000 04DD40: 4EB9 0000 5F60 jsr $5f60.l 04DD46: 5B6C 00D4 subq.w #5, ($d4,A4) 04DD4A: 526C 00D6 addq.w #1, ($d6,A4) 04DD4E: 302C 00D4 move.w ($d4,A4), D0 ; D0=[A4+$cc] value 04DD52: 322C 00D6 move.w ($d6,A4), D1 ; D1=[A4+$ce] value+2 04DD56: 4EB9 0000 5FDE jsr $5fde.l 04DD5C: 207C 0006 E7E2 movea.l #$6e7e2, A0 ; A0=[#$6e7e2] 04DD62: 303C 0F00 move.w #$f00, D0 ; lowest word of swapped (([A4+$cc] value<<5)+([A4+$ce] value+2)+#$7002) value=#$f00 04DD66: 223C 0020 0000 move.l #$200000, D1 ; D1=#$200000 04DD6C: 4EB9 0000 5F0C jsr $5f0c.l 04DD72: 586C 00D4 addq.w #4, ($d4,A4) 04DD76: 302C 00D4 move.w ($d4,A4), D0 ; D0=[A4+$cc] value+4 04DD7A: 322C 00D6 move.w ($d6,A4), D1 ; D1=[A4+$ce] value+2 04DD7E: 4EB9 0000 5FDE jsr $5fde.l 04DD84: 303C 0F00 move.w #$f00, D0 ; lowest word of swapped ((([A4+$cc] value+4)<<5)+([A4+$ce] value+2)+#$7002) value=#$f00 04DD88: 122D 3A61 move.b ($3a61,A5), D1 ; D1=[A5+$3a61] value 04DD8C: 243C 0020 0000 move.l #$200000, D2 ; D2=#$200000 04DD92: 4EB9 0000 5F60 jsr $5f60.l 04DD98: 596C 00D4 subq.w #4, ($d4,A4) 04DD9C: 526C 00D6 addq.w #1, ($d6,A4) 04DDA0: 302C 00D4 move.w ($d4,A4), D0 ; D0=[A4+$cc] value 04DDA4: 322C 00D6 move.w ($d6,A4), D1 ; D1=[A4+$ce] value+3 04DDA8: 4EB9 0000 5FDE jsr $5fde.l 04DDAE: 207C 0006 E806 movea.l #$6e806, A0 ; A0=[#$6e806] 04DDB4: 303C 0F00 move.w #$f00, D0 ; lowest word of swapped (([A4+$cc] value<<5)+([A4+$ce] value+3)+#$7002) value=#$f00 04DDB8: 223C 0020 0000 move.l #$200000, D1 ; D1=#$200000 04DDBE: 4EB9 0000 5F0C jsr $5f0c.l 04DDC4: 506C 00D4 addq.w #8, ($d4,A4) 04DDC8: 302C 00D4 move.w ($d4,A4), D0 ; D0=[A4+$cc] value+8 04DDCC: 322C 00D6 move.w ($d6,A4), D1 ; D1=[A4+$ce] value+3 04DDD0: 4EB9 0000 5FDE jsr $5fde.l 04DDD6: 303C 0F00 move.w #$f00, D0 ; lowest word of swapped ((([A4+$cc] value+8)<<5)+([A4+$ce] value+3)+#$7002) value=#$f00 04DDDA: 122D 3A62 move.b ($3a62,A5), D1 ; D1=[A5+$3a62] value 04DDDE: 243C 0020 0000 move.l #$200000, D2 ; D2=#$200000 04DDE4: 4EB9 0000 5F60 jsr $5f60.l 04DDEA: 516C 00D4 subq.w #8, ($d4,A4) 04DDEE: 526C 00D6 addq.w #1, ($d6,A4) 04DDF2: 302C 00D4 move.w ($d4,A4), D0 ; D0=[A4+$cc] value 04DDF6: 322C 00D6 move.w ($d6,A4), D1 ; D1=[A4+$ce] value+4 04DDFA: 4EB9 0000 5FDE jsr $5fde.l 04DE00: 207C 0006 E810 movea.l #$6e810, A0 ; A0=[#$6e810] 04DE06: 303C 0F00 move.w #$f00, D0 ; lowest word of swapped (([A4+$cc] value<<5)+([A4+$ce] value+4)+#$7002) value=#$f00 04DE0A: 223C 0020 0000 move.l #$200000, D1 ; D1=#$200000 04DE10: 4EB9 0000 5F0C jsr $5f0c.l 04DE16: 506C 00D4 addq.w #8, ($d4,A4) 04DE1A: 302C 00D4 move.w ($d4,A4), D0 ; D0=[A4+$cc] value+8 04DE1E: 322C 00D6 move.w ($d6,A4), D1 ; D1=[A4+$ce] value+4 04DE22: 4EB9 0000 5FDE jsr $5fde.l 04DE28: 303C 0F00 move.w #$f00, D0 ; lowest word of swapped ((([A4+$cc] value+8)<<5)+([A4+$ce] value+4)+#$7002) value=#$f00 04DE2C: 122D 3A63 move.b ($3a63,A5), D1 ; D1=[A5+$3a63] value 04DE30: 243C 0020 0000 move.l #$200000, D2 ; D2=#$200000 04DE36: 4EB9 0000 5F60 jsr $5f60.l 04DE3C: 516C 00D4 subq.w #8, ($d4,A4) 04DE40: 526C 00D6 addq.w #1, ($d6,A4) 04DE44: 302C 00D4 move.w ($d4,A4), D0 ; D0=[A4+$cc] value 04DE48: 322C 00D6 move.w ($d6,A4), D1 ; D1=[A4+$ce] value+5 04DE4C: 4EB9 0000 5FDE jsr $5fde.l 04DE52: 207C 0006 E842 movea.l #$6e842, A0 ; A0=[#$6e842] 04DE58: 303C 0F00 move.w #$f00, D0 ; lowest word of swapped (([A4+$cc] value<<5)+([A4+$ce] value+5)+#$7002) value=#$f00 04DE5C: 223C 0020 0000 move.l #$200000, D1 ; D1=#$200000 04DE62: 4EB9 0000 5F0C jsr $5f0c.l 04DE68: 066C 000A 00D4 addi.w #$a, ($d4,A4) 04DE6E: 302C 00D4 move.w ($d4,A4), D0 ; D0=[A4+$cc] value+#$a 04DE72: 322C 00D6 move.w ($d6,A4), D1 ; D1=[A4+$ce] value+5 04DE76: 4EB9 0000 5FDE jsr $5fde.l 04DE7C: 303C 0F00 move.w #$f00, D0 ; lowest word of swapped ((([A4+$cc] value+#$a)<<5)+([A4+$ce] value+5)+#$7002) value=#$f00 04DE80: 122D 3A5A move.b ($3a5a,A5), D1 ; D1=[A5+$3a5a] value 04DE84: 243C 0020 0000 move.l #$200000, D2 ; D2=#$200000 04DE8A: 4EB9 0000 5F60 jsr $5f60.l 04DE90: 046C 000A 00D4 subi.w #$a, ($d4,A4) 04DE96: 526C 00D6 addq.w #1, ($d6,A4) 04DE9A: 302C 00D4 move.w ($d4,A4), D0 ; D0=[A4+$cc] value 04DE9E: 322C 00D6 move.w ($d6,A4), D1 ; D1=[A4+$ce] value+6 04DEA2: 4EB9 0000 5FDE jsr $5fde.l 04DEA8: 207C 0006 E84E movea.l #$6e84e, A0 ; A0=[#$6e84e] 04DEAE: 303C 0F00 move.w #$f00, D0 ; lowest word of swapped (([A4+$cc] value<<5)+([A4+$ce] value+6)+#$7002) value=#$f00 04DEB2: 223C 0020 0000 move.l #$200000, D1 ; D1=#$200000 04DEB8: 4EB9 0000 5F0C jsr $5f0c.l 04DEBE: 066C 000A 00D4 addi.w #$a, ($d4,A4) 04DEC4: 302C 00D4 move.w ($d4,A4), D0 ; D0=[A4+$cc] value+#$a 04DEC8: 322C 00D6 move.w ($d6,A4), D1 ; D1=[A4+$ce] value+6 04DECC: 4EB9 0000 5FDE jsr $5fde.l 04DED2: 303C 0F00 move.w #$f00, D0 ; lowest word of swapped ((([A4+$cc] value+#$a)<<5)+([A4+$ce] value+6)+#$7002) value=#$f00 04DED6: 122D 3A64 move.b ($3a64,A5), D1 ; D1=[A5+$3a64] value 04DEDA: 243C 0020 0000 move.l #$200000, D2 ; D2=#$200000 04DEE0: 4EB9 0000 5F60 jsr $5f60.l 04DEE6: 046C 000A 00D4 subi.w #$a, ($d4,A4) 04DEEC: 526C 00D6 addq.w #1, ($d6,A4) 04DEF0: 302C 00D4 move.w ($d4,A4), D0 ; D0=[A4+$cc] value 04DEF4: 322C 00D6 move.w ($d6,A4), D1 ; D1=[A4+$ce] value+7 04DEF8: 4EB9 0000 5FDE jsr $5fde.l 04DEFE: 207C 0006 E85A movea.l #$6e85a, A0 ; A0=[#$6e85a] 04DF04: 303C 0F00 move.w #$f00, D0 ; lowest word of swapped (([A4+$cc] value<<5)+([A4+$ce] value+7)+#$7002) value=#$f00 04DF08: 223C 0020 0000 move.l #$200000, D1 ; D1=#$200000 04DF0E: 4EB9 0000 5F0C jsr $5f0c.l 04DF14: 5A6C 00D4 addq.w #5, ($d4,A4) 04DF18: 302C 00D4 move.w ($d4,A4), D0 ; D0=[A4+$cc] value+5 04DF1C: 322C 00D6 move.w ($d6,A4), D1 ; D1=[A4+$ce] value+7 04DF20: 4EB9 0000 5FDE jsr $5fde.l 04DF26: 303C 0F00 move.w #$f00, D0 ; lowest word of swapped ((([A4+$cc] value+5)<<5)+([A4+$ce] value+7)+#$7002) value=#$f00 04DF2A: 322D 0118 move.w ($118,A5), D1 ; D1=[A5+$118] value 04DF2E: 243C 0020 0000 move.l #$200000, D2 ; D2=#$200000 04DF34: 4EB9 0000 5F94 jsr $5f94.l 04DF3A: 586C 00D4 addq.w #4, ($d4,A4) 04DF3E: 302C 00D4 move.w ($d4,A4), D0 ; D0=[A4+$cc] value+9 04DF42: 322C 00D6 move.w ($d6,A4), D1 ; D1=[A4+$ce] value+7 04DF46: 4EB9 0000 5FDE jsr $5fde.l 04DF4C: 303C 0F00 move.w #$f00, D0 ; lowest word of swapped ((([A4+$cc] value+9)<<5)+([A4+$ce] value+7)+#$7002) value=#$f00 04DF50: 322D 011A move.w ($11a,A5), D1 ; D1=[A5+$11a] value 04DF54: 243C 0020 0000 move.l #$200000, D2 ; D2=#$200000 04DF5A: 4EB9 0000 5F94 jsr $5f94.l 04DF60: 046C 0009 00D4 subi.w #$9, ($d4,A4) 04DF66: 526C 00D6 addq.w #1, ($d6,A4) 04DF6A: 302C 00D4 move.w ($d4,A4), D0 ; D0=[A4+$cc] value 04DF6E: 322C 00D6 move.w ($d6,A4), D1 ; D1=[A4+$ce] value+8 04DF72: 4EB9 0000 5FDE jsr $5fde.l 04DF78: 207C 0006 E860 movea.l #$6e860, A0 ; A0=[#$6e860] 04DF7E: 303C 0F00 move.w #$f00, D0 ; lowest word of swapped (([A4+$cc] value<<5)+([A4+$ce] value+8)+#$7002) value=#$f00 04DF82: 223C 0020 0000 move.l #$200000, D1 ; D1=#$200000
avatar

41

04DF88: 4EB9 0000 5F0C jsr $5f0c.l 04DF8E: 5A6C 00D4 addq.w #5, ($d4,A4) 04DF92: 302C 00D4 move.w ($d4,A4), D0 ; D0=[A4+$cc] value+5 04DF96: 322C 00D6 move.w ($d6,A4), D1 ; D1=[A4+$ce] value+8 04DF9A: 4EB9 0000 5FDE jsr $5fde.l 04DFA0: 303C 0F00 move.w #$f00, D0 ; lowest word of swapped ((([A4+$cc] value+5)<<5)+([A4+$ce] value+8)+#$7002) value=#$f00 04DFA4: 322D 0318 move.w ($318,A5), D1 ; D1=[A5+$318] value 04DFA8: 243C 0020 0000 move.l #$200000, D2 ; D2=#$200000 04DFAE: 4EB9 0000 5F94 jsr $5f94.l 04DFB4: 586C 00D4 addq.w #4, ($d4,A4) 04DFB8: 302C 00D4 move.w ($d4,A4), D0 ; D0=[A4+$cc] value+9 04DFBC: 322C 00D6 move.w ($d6,A4), D1 ; D1=[A4+$ce] value+8 04DFC0: 4EB9 0000 5FDE jsr $5fde.l 04DFC6: 303C 0F00 move.w #$f00, D0 ; lowest word of swapped ((([A4+$cc] value+9)<<5)+([A4+$ce] value+8)+#$7002) value=#$f00 04DFCA: 322D 031A move.w ($31a,A5), D1 ; D1=[A5+$31a] value 04DFCE: 243C 0020 0000 move.l #$200000, D2 ; D2=#$200000 04DFD4: 4EB9 0000 5F94 jsr $5f94.l 04DFDA: 046C 0009 00D4 subi.w #$9, ($d4,A4) 04DFE0: 526C 00D6 addq.w #1, ($d6,A4) 04DFE4: 302C 00D4 move.w ($d4,A4), D0 ; D0=[A4+$cc] value 04DFE8: 322C 00D6 move.w ($d6,A4), D1 ; D1=[A4+$ce] value+9 04DFEC: 4EB9 0000 5FDE jsr $5fde.l 04DFF2: 207C 0006 E866 movea.l #$6e866, A0 ; A0=[#$6e866] 04DFF8: 303C 0F00 move.w #$f00, D0 ; lowest word of swapped (([A4+$cc] value<<5)+([A4+$ce] value+9)+#$7002) value=#$f00 04DFFC: 223C 0020 0000 move.l #$200000, D1 ; D1=#$200000 04E002: 4EB9 0000 5F0C jsr $5f0c.l 04E008: 5A6C 00D4 addq.w #5, ($d4,A4) 04E00C: 302C 00D4 move.w ($d4,A4), D0 ; D0=[A4+$cc] value+5 04E010: 322C 00D6 move.w ($d6,A4), D1 ; D1=[A4+$ce] value+9 04E014: 4EB9 0000 5FDE jsr $5fde.l 04E01A: 303C 0F00 move.w #$f00, D0 ; lowest word of swapped ((([A4+$cc] value+5)<<5)+([A4+$ce] value+9)+#$7002) value=#$f00 04E01E: 322D 0120 move.w ($120,A5), D1 ; D1=[A5+$120] value 04E022: 243C 0020 0000 move.l #$200000, D2 ; D2=#$200000 04E028: 4EB9 0000 5F94 jsr $5f94.l 04E02E: 586C 00D4 addq.w #4, ($d4,A4) 04E032: 302C 00D4 move.w ($d4,A4), D0 ; D0=[A4+$cc] value+9 04E036: 322C 00D6 move.w ($d6,A4), D1 ; D1=[A4+$ce] value+9 04E03A: 4EB9 0000 5FDE jsr $5fde.l 04E040: 303C 0F00 move.w #$f00, D0 ; lowest word of swapped ((([A4+$cc] value+9)<<5)+([A4+$ce] value+9)+#$7002) value=#$f00 04E044: 322D 0122 move.w ($122,A5), D1 ; D1=[A5+$122] value 04E048: 243C 0020 0000 move.l #$200000, D2 ; D2=#$200000 04E04E: 4EB9 0000 5F94 jsr $5f94.l 04E054: 046C 0009 00D4 subi.w #$9, ($d4,A4) 04E05A: 526C 00D6 addq.w #1, ($d6,A4) 04E05E: 302C 00D4 move.w ($d4,A4), D0 ; D0=[A4+$cc] value 04E062: 322C 00D6 move.w ($d6,A4), D1 ; D1=[A4+$ce] value+#$a 04E066: 4EB9 0000 5FDE jsr $5fde.l 04E06C: 207C 0006 E86C movea.l #$6e86c, A0 ; A0=[#$6e86c] 04E072: 303C 0F00 move.w #$f00, D0 ; lowest word of swapped (([A4+$cc] value<<5)+([A4+$ce] value+#$a)+#$7002) value=#$f00 04E076: 223C 0020 0000 move.l #$200000, D1 ; D1=#$200000 04E07C: 4EB9 0000 5F0C jsr $5f0c.l 04E082: 5A6C 00D4 addq.w #5, ($d4,A4) 04E086: 302C 00D4 move.w ($d4,A4), D0 ; D0=[A4+$cc] value+5 04E08A: 322C 00D6 move.w ($d6,A4), D1 ; D1=[A4+$ce] value+#$a 04E08E: 4EB9 0000 5FDE jsr $5fde.l 04E094: 303C 0F00 move.w #$f00, D0 ; lowest word of swapped ((([A4+$cc] value+5)<<5)+([A4+$ce] value+#$a)+#$7002) value=#$f00 04E098: 322D 0320 move.w ($320,A5), D1 ; D1=[A5+$320] value 04E09C: 243C 0020 0000 move.l #$200000, D2 ; D2=#$200000 04E0A2: 4EB9 0000 5F94 jsr $5f94.l 04E0A8: 586C 00D4 addq.w #4, ($d4,A4) 04E0AC: 302C 00D4 move.w ($d4,A4), D0 ; D0=[A4+$cc] value+9 04E0B0: 322C 00D6 move.w ($d6,A4), D1 ; D1=[A4+$ce] value+#$a 04E0B4: 4EB9 0000 5FDE jsr $5fde.l 04E0BA: 303C 0F00 move.w #$f00, D0 ; lowest word of swapped ((([A4+$cc] value+9)<<5)+([A4+$ce] value+#$a)+#$7002) value=#$f00 04E0BE: 322D 0322 move.w ($322,A5), D1 ; D1=[A5+$322] value 04E0C2: 243C 0020 0000 move.l #$200000, D2 ; D2=#$200000 04E0C8: 4EB9 0000 5F94 jsr $5f94.l 04E0CE: 5A6C 00D4 addq.w #5, ($d4,A4) 04E0D2: 576C 00D6 subq.w #3, ($d6,A4) 04E0D6: 302C 00D4 move.w ($d4,A4), D0 ; D0=[A4+$cc] value+#$e 04E0DA: 322C 00D6 move.w ($d6,A4), D1 ; D1=[A4+$ce] value+7 04E0DE: 4EB9 0000 5FDE jsr $5fde.l 04E0E4: 207C 0006 E872 movea.l #$6e872, A0 ; A0=[#$6e872] 04E0EA: 303C 0F00 move.w #$f00, D0 ; lowest word of swapped ((([A4+$cc] value+#$e)<<5)+([A4+$ce] value+7)+#$7002) value=#$f00 04E0EE: 223C 0020 0000 move.l #$200000, D1 ; D1=#$200000 04E0F4: 4EB9 0000 5F0C jsr $5f0c.l 04E0FA: 302D 0118 move.w ($118,A5), D0 ; D0=[A5+$118] value 04E0FE: 906D 0318 sub.w ($318,A5), D0 ; D0=[A5+$118] value-[A5+$318] value 04E102: 4EB9 0000 2F94 jsr $2f94.l 04E108: 1940 00C8 move.b D0, ($c8,A4) ; [A4+$c8] value=([A5+$118] value-[A5+$318] value) or -([A5+$118] value-[A5+$318] value) 04E10C: 566C 00D4 addq.w #3, ($d4,A4) 04E110: 302C 00D4 move.w ($d4,A4), D0 ; D0=[A4+$cc] value+#$11 04E114: 322C 00D6 move.w ($d6,A4), D1 ; D1=[A4+$ce] value+7 04E118: 4EB9 0000 5FDE jsr $5fde.l 04E11E: 303C 0F00 move.w #$f00, D0 ; lowest word of swapped ((([A4+$cc] value+#$11)<<5)+([A4+$ce] value+7)+#$7002) value=#$f00 04E122: 122C 00C8 move.b ($c8,A4), D1 ; D1=([A5+$118] value-[A5+$318] value) or -([A5+$118] value-[A5+$318] value) 04E126: 243C 0020 0000 move.l #$200000, D2 ; D2=#$200000 04E12C: 4EB9 0000 5F60 jsr $5f60.l 04E132: 576C 00D4 subq.w #3, ($d4,A4) 04E136: 546C 00D6 addq.w #2, ($d6,A4) 04E13A: 302C 00D4 move.w ($d4,A4), D0 ; D0=[A4+$cc] value+#$e 04E13E: 322C 00D6 move.w ($d6,A4), D1 ; D1=[A4+$ce] value+9 04E142: 4EB9 0000 5FDE jsr $5fde.l 04E148: 207C 0006 E876 movea.l #$6e876, A0 ; A0=[#$6e876] 04E14E: 303C 0F00 move.w #$f00, D0 ; lowest word of swapped ((([A4+$cc] value+#$e)<<5)+([A4+$ce] value+9)+#$7002) value=#$f00 04E152: 223C 0020 0000 move.l #$200000, D1 ; D1=#$200000 04E158: 4EB9 0000 5F0C jsr $5f0c.l 04E15E: 302D 0120 move.w ($120,A5), D0 ; D0=[A5+$120] value 04E162: 906D 0320 sub.w ($320,A5), D0 ; D0=[A5+$120] value-[A5+$320] value 04E166: 4EB9 0000 2F94 jsr $2f94.l 04E16C: 1940 00C8 move.b D0, ($c8,A4) ; [A4+$c8] value=([A5+$120] value-[A5+$320] value) or -([A5+$120] value-[A5+$320] value) 04E170: 566C 00D4 addq.w #3, ($d4,A4) 04E174: 302C 00D4 move.w ($d4,A4), D0 ; D0=[A4+$cc] value+#$11 04E178: 322C 00D6 move.w ($d6,A4), D1 ; D1=[A4+$ce] value+9 04E17C: 4EB9 0000 5FDE jsr $5fde.l 04E182: 303C 0F00 move.w #$f00, D0 ; lowest word of swapped ((([A4+$cc] value+#$11)<<5)+([A4+$ce] value+9)+#$7002) value=#$f00 04E186: 122C 00C8 move.b ($c8,A4), D1 ; D1=([A5+$120] value-[A5+$320] value) or -([A5+$120] value-[A5+$320] value) 04E18A: 243C 0020 0000 move.l #$200000, D2 ; D2=#$200000 04E190: 4EB9 0000 5F60 jsr $5f60.l 04E196: 4E75 rts04DC80: 082D 0003 39F5 btst #$3, ($39f5,A5) 04DC86: 6700 0030 beq $4dcb8 ; if 4th bit of [A5+$39f5] value is equal to 0 then end the subroutine ahead of time 04DC8A: 082D 0002 39F6 btst #$2, ($39f6,A5) 04DC90: 6700 0026 beq $4dcb8 ; if 3rd bit of [A5+$39f6] value is equal to 0 then end the subroutine ahead of time 04DC94: 206C 0084 movea.l ($84,A4), A0 ; A0=[A4+$84] 04DC98: 4228 00C9 clr.b ($c9,A0) ; [A4+$14d] value=0 04DC9C: 0028 0001 00C9 ori.b #$1, ($c9,A0) ; [A4+$14d] value|1=0|1=1 04DCA2: 302C 00CC move.w ($cc,A4), D0 ; D0=[A4+$cc] value 04DCA6: 322C 00CE move.w ($ce,A4), D1 ; D0=[A4+$ce] value 04DCAA: 343C 0012 move.w #$12, D2 ; D2=#$12 04DCAE: 363C 000A move.w #$a, D3 ; D3=#$a 04DCB2: 4EB9 0000 5FEA jsr $5fea.l 04DCB8: 4E75 rts
avatar

42

04E1D6: 4DF9 0010 FD96 lea $10fd96.l, A6 04E1DC: 4EBA 0034 jsr ($34,PC) ; ($4e212) 04E1E0: 4E71 nop 04E1E2: 4EBA 0158 jsr ($158,PC) ; ($4e33c) 04E1E6: 4E71 nop 04E1E8: 4EBA 01F2 jsr ($1f2,PC) ; ($4e3dc) 04E1EC: 4E71 nop 04E1EE: 4EBA 01B2 jsr ($1b2,PC) ; ($4e3a2) 04E1F2: 4E71 nop 04E1F4: 4E75 rts04E212: 102D 39CD move.b ($39cd,A5), D0 ; D0=[A5+$39cd] value 04E216: 0240 000F andi.w #$f, D0 ; D0=[A5+$39cd] value&#$f 04E21A: 41FA 0030 lea ($30,PC) ; ($4e24c), A0 ; A0=[$4e24c] 04E21E: 4E71 nop 04E220: 7200 moveq #$0, D1 ; D1=0 04E222: 1230 0000 move.b (A0,D0.w), D1 ; D1=[$4e24c] value+([A5+$39cd] value&#$f)=ff02+([A5+$39cd] value&#$f) 04E226: 6B00 0022 bmi $4e24a ; if ff02+([A5+$39cd] value&#$f) is negative then end the subroutine ahead of time 04E22A: D241 add.w D1, D1 04E22C: D241 add.w D1, D1 ; else D1=(ff02+([A5+$39cd] value&#$f))*4 04E22E: 41FA 002C lea ($2c,PC) ; ($4e25c), A0 ; A0=[$4e25c] 04E232: 4E71 nop 04E234: 082D 0002 39F5 btst #$2, ($39f5,A5) 04E23A: 6700 0008 beq $4e244 ; if 3rd bit of [A5+$39f5] value is equal to 0 then skip next 2 steps 04E23E: 41FA 002C lea ($2c,PC) ; ($4e26c), A0 ; else A0=[$4e26c] 04E242: 4E71 nop 04E244: 2070 1000 movea.l (A0,D1.w), A0 ; A0=([$4e25c] value+((ff02+([A5+$39cd] value&#$f))*4)) or ([$4e26c] value+((ff02+([A5+$39cd] value&#$f))*4)) 04E248: 4E90 jsr (A0) ; goto [([$4e25c] value+((ff02+([A5+$39cd] value&#$f))*4))] or [([$4e26c] value+((ff02+([A5+$39cd] value&#$f))*4))] subroutine 04E24A: 4E75 rts04E24C: FF02 dc.w $ff02; opcode 111104E33C: 082D 0004 39CD btst #$4, ($39cd,A5) 04E342: 6700 000E beq $4e352 ; if 5th bit of [A5+$39cd] value is equal to 0 then goto $4e352 subroutine 04E346: 4EBA 0020 jsr ($20,PC) ; ($4e368) ; else goto $4e368 subroutine 04E34A: 4E71 nop 04E34C: 7001 moveq #$1, D0 ; D0=1 04E34E: 4E90 jsr (A0) ; if 5th bit of [A5+$39cd] value is not equal to 0 then goto [[$4e37e] value+([A4+$d0] value*4)]=[#$4e386+([A4+$d0] value*4)] subroutine 04E350: 4E75 rts 04E352: 082D 0005 39CD btst #$5, ($39cd,A5) 04E358: 6700 000C beq $4e366 ; if 6th bit of [A5+$39cd] value is equal to 0 then end the subroutine ahead of time 04E35C: 4EBA 000A jsr ($a,PC) ; ($4e368) ; else goto $4e368 subroutine 04E360: 4E71 nop 04E362: 70FF moveq #-$1, D0 ; D0=#-$1 04E364: 4E90 jsr (A0) ; if 6th bit of [A5+$39cd] value is not equal to 0 then goto [[$4e37e] value+([A4+$d0] value*4)]=[#$4e386+([A4+$d0] value*4)] subroutine 04E366: 4E75 rts 04E368: 7000 moveq #$0, D0 ; D0=0 04E36A: 102C 00D0 move.b ($d0,A4), D0 ; D0=[A4+$d0] value 04E36E: D040 add.w D0, D0 04E370: D040 add.w D0, D0 ; D0=[A4+$d0] value*4 04E372: 41FA 000A lea ($a,PC) ; ($4e37e), A0 ; A0=[$4e37e] 04E376: 4E71 nop 04E378: 2070 0000 movea.l (A0,D0.w), A0 ; A0=[[$4e37e] value+([A4+$d0] value*4)]=[#$4e386+([A4+$d0] value*4)] 04E37C: 4E75 rts 04E37E: 0004 E386 ori.b #$86, D4 04E3DC: 396C 00CC 00D4 move.w ($cc,A4), ($d4,A4) ; [A4+$d4] value=[A4+$cc] value 04E3E2: 396C 00CE 00D6 move.w ($ce,A4), ($d6,A4) ; [A4+$d6] value=[A4+$ce] value 04E3E8: 7800 moveq #$0, D4 ; D4=0 04E3EA: 302C 00D4 move.w ($d4,A4), D0 ; D0=[A4+$cc] value 04E3EE: 322C 00D6 move.w ($d6,A4), D1 ; D1=[A4+$ce] value 04E3F2: 4EB9 0000 5FDE jsr $5fde.l 04E3F8: 207C 0006 E842 movea.l #$6e842, A0 ; A0=[#$6e842] 04E3FE: 303C 0F00 move.w #$f00, D0 ; lowest word of swapped (([A4+$cc] value<<5)+[A4+$ce] value+#$7002) value=#$f00 04E402: 223C 0020 0000 move.l #$200000, D1 ; D1=#$200000 04E408: 4EB9 0000 5F0C jsr $5f0c.l 04E40E: 066C 000A 00D4 addi.w #$a, ($d4,A4) 04E414: 302C 00D4 move.w ($d4,A4), D0 ; D0=[A4+$cc] value+#$a 04E418: 322C 00D6 move.w ($d6,A4), D1 ; D1=[A4+$ce] value 04E41C: 4EB9 0000 5FDE jsr $5fde.l 04E422: 303C 0F00 move.w #$f00, D0 ; lowest word of swapped ((([A4+$cc] value+#$a)<<5)+[A4+$ce] value+#$7002) value=#$f00 04E426: B82C 00D0 cmp.b ($d0,A4), D4 04E42A: 6600 0006 bne $4e432 ; if [A4+$d0] value!=0 then skip next step 04E42E: 0040 8000 ori.w #$8000, D0 ; else D0=#$f00|#$8000=#$8f00 04E432: 122D 3A5A move.b ($3a5a,A5), D1 ; D1=[A5+$3a5a] value 04E436: 243C 0020 0000 move.l #$200000, D2 ; D2=#$200000 04E43C: 4EB9 0000 5F60 jsr $5f60.l 04E442: 046C 000A 00D4 subi.w #$a, ($d4,A4) 04E448: 5204 addq.b #1, D4 04E44A: 526C 00D6 addq.w #1, ($d6,A4) 04E44E: 302C 00D4 move.w ($d4,A4), D0 ; D0=[A4+$cc] value 04E452: 322C 00D6 move.w ($d6,A4), D1 ; D1=[A4+$ce] value+1 04E456: 4EB9 0000 5FDE jsr $5fde.l 04E45C: 207C 0006 E958 movea.l #$6e958, A0 ; A0=[#$6e958] 04E462: 303C 0F00 move.w #$f00, D0 ; lowest word of swapped (([A4+$cc] value<<5)+([A4+$ce] value+1)+#$7002) value=#$f00 04E466: 223C 0020 0000 move.l #$200000, D1 ; D1=#$200000 04E46C: 4EB9 0000 5F0C jsr $5f0c.l 04E472: 066C 000A 00D4 addi.w #$a, ($d4,A4) 04E478: 302C 00D4 move.w ($d4,A4), D0 ; D0=[A4+$cc] value+#$a 04E47C: 322C 00D6 move.w ($d6,A4), D1 ; D1=[A4+$ce] value+1 04E480: 4EB9 0000 5FDE jsr $5fde.l 04E486: 303C 0F00 move.w #$f00, D0 ; lowest word of swapped ((([A4+$cc] value+#$a)<<5)+([A4+$ce] value+1)+#$7002) value=#$f00 04E48A: B82C 00D0 cmp.b ($d0,A4), D4 04E48E: 6600 0006 bne $4e496 ; if [A5+$d0] value!=1 then skip next step 04E492: 0040 8000 ori.w #$8000, D0 ; else D0=#$f00|#$8000=#$8f00 04E496: 41ED 0100 lea ($100,A5), A0 ; A0=[A5+$100] 04E49A: 4A28 0130 tst.b ($130,A0) 04E49E: 6A00 0006 bpl $4e4a6 ; if [A5+$230] value is positive then skip next step 04E4A2: 41ED 0300 lea ($300,A5), A0 ; else A0=[A5+$300] 04E4A6: 1228 0168 move.b ($168,A0), D1 ; D1=[A5+$268] value or [A5+$468] value 04E4AA: 243C 0020 0000 move.l #$200000, D2 ; D2=#$200000 04E4B0: 4EB9 0000 5F60 jsr $5f60.l 04E4B6: 4E75 rts04E3A2: 082D 0003 39F5 btst #$3, ($39f5,A5) 04E3A8: 6700 0030 beq $4e3da ; if 4th bit of [A5+$39f5] value is equal to 0 then end the subroutine ahead of time 04E3AC: 082D 0002 39F6 btst #$2, ($39f6,A5) 04E3B2: 6700 0026 beq $4e3da ; if 3rd bit of [A5+$39f6] value is equal to 0 then end the subroutine ahead of time 04E3B6: 206C 0084 movea.l ($84,A4), A0 ; else A0=[A4+$84] 04E3BA: 4228 00C9 clr.b ($c9,A0) ; [A4+$14d] value=0 04E3BE: 0028 0001 00C9 ori.b #$1, ($c9,A0) ; [A4+$14d] value|1=0|1=1 04E3C4: 302C 00CC move.w ($cc,A4), D0 ; D0=[A4+$cc] value 04E3C8: 322C 00CE move.w ($ce,A4), D1 ; D1=[A4+$ce] value 04E3CC: 343C 000B move.w #$b, D2 ; D2=#$b 04E3D0: 363C 0001 move.w #$1, D3 ; D3=1 04E3D4: 4EB9 0000 5FEA jsr $5fea.l 04E3DA: 4E75 rts
avatar

43

While you're analyzing the pieces of P1_CURRENT interaction code, I'll comment the all P1_CHANGE interaction code.

03311E: 0839 0004 0010 FD97 btst #$4, $10fd97.l 033126: 6700 0008 beq $33130 ; if (p1e&JOY_A)=0 then skip next 2 steps 03312A: 522C 0073 addq.b #1, ($73,A4) ; else [A4+$73] value+1 03312E: 4E75 rts 033130: 0839 0005 0010 FD97 btst #$5, $10fd97.l 033138: 6700 0008 beq $33142 ; if (p1e&JOY_B)=0 then skip next 2 steps 03313C: 532C 0073 subq.b #1, ($73,A4) ; else [A4+$73] value-1 033140: 4E75 rts 033142: 0839 0006 0010 FD97 btst #$6, $10fd97.l 03314A: 6700 0008 beq $33154 ; if (p1e&JOY_C)=0 then skip next 2 steps 03314E: 522C 0071 addq.b #1, ($71,A4) ; else [A4+$71] value+1 033152: 4E75 rts 033154: 0839 0007 0010 FD97 btst #$7, $10fd97.l 03315C: 6700 0006 beq $33164 ; if (p1e&JOY_D)=0 then end the subroutine 033160: 532C 0071 subq.b #1, ($71,A4) ; else [A4+$71] value-1 033164: 4E75 rts033408: 0839 0004 0010 FD97 btst #$4, $10fd97.l 033410: 6700 000C beq $3341e ; if (p1e&JOY_A)=0 then skip next 2 steps 033414: 06AC 0000 1000 0058 addi.l #$1000, ($58,A4) ; else [A4+$58] value+#$1000 03341C: 4E75 rts 03341E: 0839 0005 0010 FD97 btst #$5, $10fd97.l 033426: 6700 000C beq $33434 ; if (p1e&JOY_B)=0 then skip next 2 steps 03342A: 06AC 0000 0400 005C addi.l #$400, ($5c,A4) ; else [A5+$5c] value+#$400 033432: 4E75 rts 033434: 0839 0006 0010 FD97 btst #$6, $10fd97.l 03343C: 6700 000C beq $3344a ; if (p1e&JOY_C)=0 then skip next 2 steps 033440: 06AC 0000 1000 0064 addi.l #$1000, ($64,A4) ; else [A4+$64] value+#$1000 033448: 4E75 rts 03344A: 0839 0007 0010 FD97 btst #$7, $10fd97.l 033452: 6700 0014 beq $33468 ; if (p1e&JOY_D)=0 then end the subroutine 033456: 526C 0070 addq.w #1, ($70,A4) ; else [A4+$70] value+#1 03345A: 0C6C 0018 0070 cmpi.w #$18, ($70,A4) 033460: 6300 0006 bls $33468 ; if old [A4+$70] value+#1<=#$18 then end the subroutine 033464: 426C 0070 clr.w ($70,A4) ; else [A4+$70] value=0 033468: 4E75 rts 03346A: 0839 0004 0010 FD97 btst #$4, $10fd97.l 033472: 6700 0020 beq $33494 ; if (p1e&JOY_A)=0 then skip next 5 steps 033476: 04AC 0000 1000 0058 subi.l #$1000, ($58,A4) ; [A4+$58] value-#$1000 03347E: 0CAC 0000 1000 0058 cmpi.l #$1000, ($58,A4) 033486: 6400 006E bcc $334f6 ; if old [A4+$58] value-#$1000>=#$1000 then end the subroutine 03348A: 297C 0000 1000 0058 move.l #$1000, ($58,A4) ; else [A4+$58] value=#$1000 033492: 4E75 rts 033494: 0839 0005 0010 FD97 btst #$5, $10fd97.l 03349C: 6700 0020 beq $334be ; if (p1e&JOY_B)=0 then skip next 5 steps 0334A0: 04AC 0000 0400 005C subi.l #$400, ($5c,A4) ; [A4+$5c] value-#$400 0334A8: 0CAC 0000 0400 005C cmpi.l #$400, ($5c,A4) 0334B0: 6400 0044 bcc $334f6 ; if old [A4+$5c] value-#$400>=#$400 then end the subroutine 0334B4: 297C 0000 0400 005C move.l #$400, ($5c,A4) ; else [A4+$5c] value=#$400 0334BC: 4E75 rts 0334BE: 0839 0006 0010 FD97 btst #$6, $10fd97.l 0334C6: 6700 0014 beq $334dc ; if (p1e&JOY_C)=0 then skip next 4 steps 0334CA: 04AC 0000 1000 0064 subi.l #$1000, ($64,A4) 0334D2: 6400 0022 bcc $334f6 ; if [A4+$64] value>=#$1000 then end the subroutine 0334D6: 42AC 0064 clr.l ($64,A4) ; else [A4+$64] value=0 0334DA: 4E75 rts 0334DC: 0839 0007 0010 FD97 btst #$7, $10fd97.l 0334E4: 6700 0010 beq $334f6 ; if (p1e&JOY_D)=0 then end the subroutine 0334E8: 536C 0070 subq.w #1, ($70,A4) 0334EC: 6400 0008 bcc $334f6 ; if [A4+$70] value>=1 then end the subroutine 0334F0: 397C 0018 0070 move.w #$18, ($70,A4) ; else [A4+$70] value=#$18 0334F6: 4E75 rts04AC56: 0839 0004 0010 FD97 btst #$4, $10fd97.l 04AC5E: 6700 0024 beq $4ac84 ; if (p1e&JOY_A)=0 then skip to $4ac84 04AC62: 4EBA 04B4 jsr ($4b4,PC) ; ($4b118) ; else goto $4b118 subroutine 04AC66: 4E71 nop 04AC68: 1E04 move.b D4, D7 04AC6A: 4EBA 0186 jsr ($186,PC) ; ($4adf2) 04AC6E: 4E71 nop 04AC70: 1807 move.b D7, D4 04AC72: 4EBA 04CC jsr ($4cc,PC) ; ($4b140) 04AC76: 4E71 nop 04AC78: 4EBA 0504 jsr ($504,PC) ; ($4b17e) 04AC7C: 4E71 nop 04AC7E: 3081 move.w D1, (A0) 04AC80: 6000 0162 bra $4ade4 04AC84: 0839 0005 0010 FD97 btst #$5, $10fd97.l 04AC8C: 6700 0024 beq $4acb2 ; if (p1e&JOY_B)=0 then skip to $4acb2 04AC90: 4EBA 0486 jsr ($486,PC) ; ($4b118) ; else goto $4b118 subroutine 04AC94: 4E71 nop 04AC96: 1E03 move.b D3, D7 04AC98: 4EBA 0158 jsr ($158,PC) ; ($4adf2) 04AC9C: 4E71 nop 04AC9E: 1607 move.b D7, D3 04ACA0: 4EBA 049E jsr ($49e,PC) ; ($4b140) 04ACA4: 4E71 nop 04ACA6: 4EBA 04D6 jsr ($4d6,PC) ; ($4b17e) 04ACAA: 4E71 nop 04ACAC: 3081 move.w D1, (A0) 04ACAE: 6000 0134 bra $4ade4 04ACB2: 0839 0006 0010 FD97 btst #$6, $10fd97.l 04ACBA: 6700 0024 beq $4ace0 ; if (p1e&JOY_C)=0 then skip to $4ace0 04ACBE: 4EBA 0458 jsr ($458,PC) ; ($4b118) ; else goto $4b118 subroutine 04ACC2: 4E71 nop 04ACC4: 1E02 move.b D2, D7 04ACC6: 4EBA 012A jsr ($12a,PC) ; ($4adf2) 04ACCA: 4E71 nop 04ACCC: 1407 move.b D7, D2 04ACCE: 4EBA 0470 jsr ($470,PC) ; ($4b140) 04ACD2: 4E71 nop 04ACD4: 4EBA 04A8 jsr ($4a8,PC) ; ($4b17e) 04ACD8: 4E71 nop 04ACDA: 3081 move.w D1, (A0) 04ACDC: 6000 0106 bra $4ade4 04ACE0: 0839 0007 0010 FD97 btst #$7, $10fd97.l 04ACE8: 6700 00FA beq $4ade4 ; if (p1e&JOY_D)=0 then end the subroutine 04ACEC: 41F9 0040 0000 lea $400000.l, A0 ; else A0=[$400000] 04ACF2: 7000 moveq #$0, D0 ; D0=0 04ACF4: 102D 5678 move.b ($5678,A5), D0 ; D0=[A5+$5678] value 04ACF8: EB48 lsl.w #5, D0 ; D0=[A5+$5678] value<<5 04ACFA: D1C0 adda.l D0, A0 ; A0=[[A5+$5678] value<<5] 04ACFC: 43ED 567A lea ($567a,A5), A1 ; A1=[A5+$567a] 04AD00: 303C 000F move.w #$f, D0 ; D0=#$f 04AD04: 32D8 move.w (A0)+, (A1)+ ; [A5+$567b] value=[[A5+$5678] value<<5] value 04AD06: 51C8 FFFC dbra D0, $4ad04 ; D0-1, if D0<>0 then jump back to previous step 04AD0A: 6000 00D8 bra $4ade4 ; else if D0=0 then end the subroutine 04AD0E: 0839 0004 0010 FD97 btst #$4, $10fd97.l 04AD16: 6700 0024 beq $4ad3c ; if (p1e&JOY_A)=0 then skip to $4ad3c 04AD1A: 4EBA 03FC jsr ($3fc,PC) ; ($4b118) 04AD1E: 4E71 nop 04AD20: 1E04 move.b D4, D7 04AD22: 4EBA 00DC jsr ($dc,PC) ; ($4ae00) 04AD26: 4E71 nop 04AD28: 1807 move.b D7, D4 04AD2A: 4EBA 0414 jsr ($414,PC) ; ($4b140) 04AD2E: 4E71 nop 04AD30: 4EBA 044C jsr ($44c,PC) ; ($4b17e) 04AD34: 4E71 nop 04AD36: 3081 move.w D1, (A0) 04AD38: 6000 00AA bra $4ade4 04AD3C: 0839 0005 0010 FD97 btst #$5, $10fd97.l 04AD44: 6700 0024 beq $4ad6a ; if (p1e&JOY_B)=0 then skip to $4ad6a 04AD48: 4EBA 03CE jsr ($3ce,PC) ; ($4b118) 04AD4C: 4E71 nop 04AD4E: 1E03 move.b D3, D7 04AD50: 4EBA 00AE jsr ($ae,PC) ; ($4ae00) 04AD54: 4E71 nop 04AD56: 1607 move.b D7, D3 04AD58: 4EBA 03E6 jsr ($3e6,PC) ; ($4b140) 04AD5C: 4E71 nop 04AD5E: 4EBA 041E jsr ($41e,PC) ; ($4b17e) 04AD62: 4E71 nop 04AD64: 3081 move.w D1, (A0) 04AD66: 6000 007C bra $4ade4 04AD6A: 0839 0006 0010 FD97 btst #$6, $10fd97.l 04AD72: 6700 0024 beq $4ad98 ; if (p1e&JOY_C)=0 then skip to $4ad98 04AD76: 4EBA 03A0 jsr ($3a0,PC) ; ($4b118) ; else goto $4b118 subroutine 04AD7A: 4E71 nop 04AD7C: 1E02 move.b D2, D7 ; D7=(([$400000+([A5+$5678] value<<5)+([A5+$5672] value*2)] value&#$f)*2)|((([$400000+([A5+$5678] value<<5)+([A5+$5672] value*2)] value&#$f000)ROL4)&1) 04AD7E: 4EBA 0080 jsr ($80,PC) ; ($4ae00) 04AD82: 4E71 nop 04AD84: 1407 move.b D7, D2 ; D2=((([$400000+([A5+$5678] value<<5)+([A5+$5672] value*2)] value&#$f)*2)|((([$400000+([A5+$5678] value<<5)+([A5+$5672] value*2)] value&#$f000)ROL4)&1))-1 or #$1f 04AD86: 4EBA 03B8 jsr ($3b8,PC) ; ($4b140) 04AD8A: 4E71 nop 04AD8C: 4EBA 03F0 jsr ($3f0,PC) ; ($4b17e) 04AD90: 4E71 nop 04AD92: 3081 move.w D1, (A0) 04AD94: 6000 004E bra $4ade4 04AD98: 0839 0007 0010 FD97 btst #$7, $10fd97.l 04ADA0: 6700 0042 beq $4ade4 ; if (p1e&JOY_D)=0 then end the subroutine 04ADA4: 0A2D 0004 569A eori.b #$4, ($569a,A5) ; else [A5+$569a] value^4 04ADAA: 3B6D 566E 566A move.w ($566e,A5), ($566a,A5) ; [A5+$566a] value=[A5+$566e] value 04ADB0: 3B6D 5670 566C move.w ($5670,A5), ($566c,A5) ; [A5+$566c] value=[A5+$5670] value 04ADB6: 4EBA 04A2 jsr ($4a2,PC) ; ($4b25a) 04ADBA: 4E71 nop 04ADBC: 41FA 05B0 lea ($5b0,PC) ; ($4b36e), A0 04ADC0: 4E71 nop 04ADC2: 303C 8F00 move.w #$8f00, D0 ; lowest word of swapped (([A5+$566e] value<<5)+[A5+$5670] value+#$7002) value=#$8f00 04ADC6: 082D 0002 569A btst #$2, ($569a,A5) 04ADCC: 6600 0006 bne $4add4 ; if 3rd bit of old [A5+$569a] value^4 is not equal to 0 then skip next step 04ADD0: 303C 0F00 move.w #$f00, D0 ; else lowest word of swapped (([A5+$566e] value<<5)+[A5+$5670] value+#$7002) value=#$f00 04ADD4: 223C 0020 0000 move.l #$200000, D1 ; D1=#$200000 04ADDA: 4EBA 04E4 jsr ($4e4,PC) ; ($4b2c0) 04ADDE: 4E71 nop 04ADE0: 6000 0002 bra $4ade4 ; end the subroutine 04ADE4: 4E75 rts04B25A: 302D 566A move.w ($566a,A5), D0 ; D0=[A5+$566e] value 04B25E: EB48 lsl.w #5, D0 ; D0=[A5+$566e] value<<5 04B260: D06D 566C add.w ($566c,A5), D0 ; D0=([A5+$566e] value<<5)+[A5+$5670] value 04B264: 0640 7002 addi.w #$7002, D0 ; D0=([A5+$566e] value<<5)+[A5+$5670] value+#$7002 04B268: 4840 swap D0 04B26A: 4E75 rts04B36E: 5041 addq.w #8, D104B2C0: 1018 move.b (A0)+, D0 ; D0=[$4b36f] value=#$41 at the beginning of cycle 04B2C2: 6B00 000C bmi $4b2d0 04B2C6: 23C0 003C 0000 move.l D0, $3c0000.l ; send D0 to REG_VRAMADDR 04B2CC: D081 add.l D1, D0 ; D0+#$200000 04B2CE: 60F0 bra $4b2c0 ; return to the beginning of cycle 04B2D0: 4E75 rts04B118: 41F9 0040 0000 lea $400000.l, A0 ; A0=[$400000] 04B11E: 7000 moveq #$0, D0 ; D0=0 04B120: 102D 5678 move.b ($5678,A5), D0 ; D0=[A5+$5678] value 04B124: EB48 lsl.w #5, D0 ; D0=[A5+$5678] value<<5 04B126: D1C0 adda.l D0, A0 ; A0=[$400000+([A5+$5678] value<<5)] 04B128: 302D 5672 move.w ($5672,A5), D0 ; D0=[A5+$5672] value 04B12C: D040 add.w D0, D0 ; D0=[A5+$5672] value*2 04B12E: D1C0 adda.l D0, A0 ; A0=[$400000+([A5+$5678] value<<5)+([A5+$5672] value*2)] 04B130: 3210 move.w (A0), D1 ; D1=[$400000+([A5+$5678] value<<5)+([A5+$5672] value*2)] value 04B132: 4EBA FF9C jsr (-$64,PC) ; ($4b0d0) 04B136: 4EBA FFB2 jsr (-$4e,PC) ; ($4b0ea) 04B13A: 4EBA FFC2 jsr (-$3e,PC) ; ($4b0fe) 04B13E: 4E75 rts04B0D0: 3401 move.w D1, D2 ; D2=[$400000+([A5+$5678] value<<5)+([A5+$5672] value*2)] value 04B0D2: 3E01 move.w D1, D7 ; D7=[$400000+([A5+$5678] value<<5)+([A5+$5672] value*2)] value 04B0D4: 0247 F000 andi.w #$f000, D7 ; D7=[$400000+([A5+$5678] value<<5)+([A5+$5672] value*2)] value&#$f000 04B0D8: E95F rol.w #4, D7 ; D7=([$400000+([A5+$5678] value<<5)+([A5+$5672] value*2)] value&#$f000)ROL4 04B0DA: 3A07 move.w D7, D5 ; D5=([$400000+([A5+$5678] value<<5)+([A5+$5672] value*2)] value&#$f000)ROL4 04B0DC: 0245 0001 andi.w #$1, D5 ; D5=(([$400000+([A5+$5678] value<<5)+([A5+$5672] value*2)] value&#$f000)ROL4)&1 04B0E0: 0242 000F andi.w #$f, D2 ; D2=[$400000+([A5+$5678] value<<5)+([A5+$5672] value*2)] value&#$f 04B0E4: D442 add.w D2, D2 ; D2=([$400000+([A5+$5678] value<<5)+([A5+$5672] value*2)] value&#$f)*2 04B0E6: 8445 or.w D5, D2 ; D2=(([$400000+([A5+$5678] value<<5)+([A5+$5672] value*2)] value&#$f)*2)|((([$400000+([A5+$5678] value<<5)+([A5+$5672] value*2)] value&#$f000)ROL4)&1) 04B0E8: 4E75 rts 04B0EA: 3601 move.w D1, D3 ; D3=[$400000+([A5+$5678] value<<5)+([A5+$5672] value*2)] value 04B0EC: 0243 00F0 andi.w #$f0, D3 ; D3=[$400000+([A5+$5678] value<<5)+([A5+$5672] value*2)] value&#$f0 04B0F0: E64B lsr.w #3, D3 ; D3=([$400000+([A5+$5678] value<<5)+([A5+$5672] value*2)] value&#$f0)>>3 04B0F2: E24F lsr.w #1, D7 ; D7=(([$400000+([A5+$5678] value<<5)+([A5+$5672] value*2)] value&#$f000)ROL4)>>1 04B0F4: 3A07 move.w D7, D5 ; D5=(([$400000+([A5+$5678] value<<5)+([A5+$5672] value*2)] value&#$f000)ROL4)>>1 04B0F6: 0245 0001 andi.w #$1, D5 ; D5=((([$400000+([A5+$5678] value<<5)+([A5+$5672] value*2)] value&#$f000)ROL4)>>1)&1 04B0FA: 8645 or.w D5, D3 ; D3=(((([$400000+([A5+$5678] value<<5)+([A5+$5672] value*2)] value&#$f000)ROL4)>>1)&1)|(([$400000+([A5+$5678] value<<5)+([A5+$5672] value*2)] value&#$f0)>>3) 04B0FC: 4E75 rts 04B0FE: 3801 move.w D1, D4 ; D4=[$400000+([A5+$5678] value<<5)+([A5+$5672] value*2)] value 04B100: 0244 0F00 andi.w #$f00, D4 ; D4=[$400000+([A5+$5678] value<<5)+([A5+$5672] value*2)] value&#$f00 04B104: 3F04 move.w D4, -(A7) ; [A7-1] value=[$400000+([A5+$5678] value<<5)+([A5+$5672] value*2)] value&#$f00 04B106: 7800 moveq #$0, D4 ; D4=0 04B108: 181F move.b (A7)+, D4 ; D4=[A7+1] value 04B10A: D844 add.w D4, D4 ; D4=[A7+1] value*2 04B10C: E24F lsr.w #1, D7 ; D7=(([$400000+([A5+$5678] value<<5)+([A5+$5672] value*2)] value&#$f000)ROL4)>>2 04B10E: 3A07 move.w D7, D5 ; D5=(([$400000+([A5+$5678] value<<5)+([A5+$5672] value*2)] value&#$f000)ROL4)>>2 04B110: 0245 0001 andi.w #$1, D5 ; D5=((([$400000+([A5+$5678] value<<5)+([A5+$5672] value*2)] value&#$f000)ROL4)>>2)&1 04B114: 8845 or.w D5, D4 ; D4=(((([$400000+([A5+$5678] value<<5)+([A5+$5672] value*2)] value&#$f000)ROL4)>>2)&1)|([A7+1] value*2) 04B116: 4E75 rts04AE00: 5307 subq.b #1, D7 ; D7=((([$400000+([A5+$5678] value<<5)+([A5+$5672] value*2)] value&#$f)*2)|((([$400000+([A5+$5678] value<<5)+([A5+$5672] value*2)] value&#$f000)ROL4)&1))-1 04AE02: 6A00 0006 bpl $4ae0a ; if ((([$400000+([A5+$5678] value<<5)+([A5+$5672] value*2)] value&#$f)*2)|((([$400000+([A5+$5678] value<<5)+([A5+$5672] value*2)] value&#$f000)ROL4)&1))-1 is positive then end the subroutine 04AE06: 1E3C 001F move.b #$1f, D7 ; else D7=#$1f 04AE0A: 4E75 rts04B140: 3B6D 566E 566A move.w ($566e,A5), ($566a,A5) 04B146: 3B6D 5670 566C move.w ($5670,A5), ($566c,A5) 04B14C: 546D 566A addq.w #2, ($566a,A5) ; [A5+$566e] value+2 04B150: 546D 566C addq.w #2, ($566c,A5) ; [A5+$5670] value+2 04B154: 302D 5672 move.w ($5672,A5), D0 ; D0=[A5+$5672] value 04B158: D16D 566C add.w D0, ($566c,A5) ; [A5+$566c] value=[A5+$5670] value+2+[A5+$5672] value 04B15C: 3E04 move.w D4, D7 ; D7=(((([$400000+([A5+$5678] value<<5)+([A5+$5672] value*2)] value&#$f000)ROL4)>>2)&1)|([A7+1] value*2) 04B15E: 4EBA 005C jsr ($5c,PC) ; ($4b1bc) 04B162: 4E71 nop 04B164: 566D 566A addq.w #3, ($566a,A5) ; [A5+$566a] value=[A5+$566e] value+5 04B168: 3E03 move.w D3, D7 ; D7=(((([$400000+([A5+$5678] value<<5)+([A5+$5672] value*2)] value&#$f000)ROL4)>>1)&1)|(([$400000+([A5+$5678] value<<5)+([A5+$5672] value*2)] value&#$f0)>>3) 04B16A: 4EBA 0050 jsr ($50,PC) ; ($4b1bc) 04B16E: 4E71 nop 04B170: 566D 566A addq.w #3, ($566a,A5) ; [A5+$566a] value=[A5+$566e] value+8 04B174: 3E02 move.w D2, D7 ; D7=((([$400000+([A5+$5678] value<<5)+([A5+$5672] value*2)] value&#$f)*2)|((([$400000+([A5+$5678] value<<5)+([A5+$5672] value*2)] value&#$f000)ROL4)&1))-1 or #$1f 04B176: 4EBA 0044 jsr ($44,PC) ; ($4b1bc) 04B17A: 4E71 nop 04B17C: 4E75 rts04B1BC: 3A2D 566A move.w ($566a,A5), D5 ; D5=[A5+$566e] value+2 04B1C0: EB4D lsl.w #5, D5 ; D5=([A5+$566e] value+2)<<5 04B1C2: DA6D 566C add.w ($566c,A5), D5 ; D5=(([A5+$566e] value+2)<<5)+([A5+$5670] value+2+[A5+$5672] value) 04B1C6: 0645 7002 addi.w #$7002, D5 ; D5=(([A5+$566e] value+2)<<5)+([A5+$5670] value+2+[A5+$5672] value)+#$7002 04B1CA: 4845 swap D5 04B1CC: 4245 clr.w D5 ; lowest word of swapped ((([A5+$566e] value+2)<<5)+([A5+$5670] value+2+[A5+$5672] value)+#$7002) value=0 04B1CE: 3C07 move.w D7, D6 ; D6=(((([$400000+([A5+$5678] value<<5)+([A5+$5672] value*2)] value&#$f000)ROL4)>>2)&1)|([A7+1] value*2) 04B1D0: 0246 00F0 andi.w #$f0, D6 ; D6=((((([$400000+([A5+$5678] value<<5)+([A5+$5672] value*2)] value&#$f000)ROL4)>>2)&1)|([A7+1] value*2))&#$f0 04B1D4: E80E lsr.b #4, D6 ; D6=(((((([$400000+([A5+$5678] value<<5)+([A5+$5672] value*2)] value&#$f000)ROL4)>>2)&1)|([A7+1] value*2))&#$f0)>>4 04B1D6: 1A3B 6022 move.b ($22,PC,D6.w), D5 ; lowest byte of D5=[$04B1FA+((((((([$400000+([A5+$5678] value<<5)+([A5+$5672] value*2)] value&#$f000)ROL4)>>2)&1)|([A7+1] value*2))&#$f0)>>4) value] value 04B1DA: 0045 0F00 ori.w #$f00, D5 ; lowest word of D5=[$04B1FA+((((((([$400000+([A5+$5678] value<<5)+([A5+$5672] value*2)] value&#$f000)ROL4)>>2)&1)|([A7+1] value*2))&#$f0)>>4) value] value|#$f00 04B1DE: 23C5 003C 0000 move.l D5, $3c0000.l ; send D5 value to REG_VRAMADDR 04B1E4: 0247 000F andi.w #$f, D7 ; D7=((((([$400000+([A5+$5678] value<<5)+([A5+$5672] value*2)] value&#$f000)ROL4)>>2)&1)|([A7+1] value*2))&#$f 04B1E8: 1A3B 7010 move.b ($10,PC,D7.w), D5 ; lowest byte of D5=[$04B1FA+(((((([$400000+([A5+$5678] value<<5)+([A5+$5672] value*2)] value&#$f000)ROL4)>>2)&1)|([A7+1] value*2))&#$f) value] value 04B1EC: 0685 0020 0000 addi.l #$200000, D5 ; D5=(high word of swapped ((([A5+$566e] value+2)<<5)+([A5+$5670] value+2+[A5+$5672] value)+#$7002) value+([$04B1FA+((((((([$400000+([A5+$5678] value<<5)+([A5+$5672] value*2)] value&#$f000)ROL4)>>2)&1)|([A7+1] value*2))&#$f0)>>4) value] value|#$f00))+#$200000 04B1F2: 23C5 003C 0000 move.l D5, $3c0000.l ; send D5 value to REG_VRAMADDR 04B1F8: 4E75 rts
avatar

44

04B17E: 3A02 move.w D2, D5 ; D5=((([$400000+([A5+$5678] value<<5)+([A5+$5672] value*2)] value&#$f)*2)|((([$400000+([A5+$5678] value<<5)+([A5+$5672] value*2)] value&#$f000)ROL4)&1))-1 or #$1f 04B180: E24A lsr.w #1, D2 ; D2=(((([$400000+([A5+$5678] value<<5)+([A5+$5672] value*2)] value&#$f)*2)|((([$400000+([A5+$5678] value<<5)+([A5+$5672] value*2)] value&#$f000)ROL4)&1))-1)>>1 or #$f 04B182: 0245 0001 andi.w #$1, D5 ; D5=(((([$400000+([A5+$5678] value<<5)+([A5+$5672] value*2)] value&#$f)*2)|((([$400000+([A5+$5678] value<<5)+([A5+$5672] value*2)] value&#$f000)ROL4)&1))-1)&1 or #$1 04B186: 6704 beq $4b18c ; if (((([$400000+([A5+$5678] value<<5)+([A5+$5672] value*2)] value&#$f)*2)|((([$400000+([A5+$5678] value<<5)+([A5+$5672] value*2)] value&#$f000)ROL4)&1))-1)&1=0 (i. e D5 value is even) then skip next step 04B188: 0042 1000 ori.w #$1000, D2 ; else D2=((((([$400000+([A5+$5678] value<<5)+([A5+$5672] value*2)] value&#$f)*2)|((([$400000+([A5+$5678] value<<5)+([A5+$5672] value*2)] value&#$f000)ROL4)&1))-1)>>1) |#$1000 or D2=#$100f 04B18C: 3A03 move.w D3, D5 ; D5=(((([$400000+([A5+$5678] value<<5)+([A5+$5672] value*2)] value&#$f000)ROL4)>>1)&1)|(([$400000+([A5+$5678] value<<5)+([A5+$5672] value*2)] value&#$f0)>>3) 04B18E: 0243 001E andi.w #$1e, D3 ; D3=((((([$400000+([A5+$5678] value<<5)+([A5+$5672] value*2)] value&#$f000)ROL4)>>1)&1)|(([$400000+([A5+$5678] value<<5)+([A5+$5672] value*2)] value&#$f0)>>3))&#$1e 04B192: E74B lsl.w #3, D3 ; D3=(((((([$400000+([A5+$5678] value<<5)+([A5+$5672] value*2)] value&#$f000)ROL4)>>1)&1)|(([$400000+([A5+$5678] value<<5)+([A5+$5672] value*2)] value&#$f0)>>3))&#$1e)<<3 04B194: 0245 0001 andi.w #$1, D5 ; D5=((((([$400000+([A5+$5678] value<<5)+([A5+$5672] value*2)] value&#$f000)ROL4)>>1)&1)|(([$400000+([A5+$5678] value<<5)+([A5+$5672] value*2)] value&#$f0)>>3))&1 04B198: 6704 beq $4b19e ; if ((((([$400000+([A5+$5678] value<<5)+([A5+$5672] value*2)] value&#$f000)ROL4)>>1)&1)|(([$400000+([A5+$5678] value<<5)+([A5+$5672] value*2)] value&#$f0)>>3)) is even then skip next step 04B19A: 0043 2000 ori.w #$2000, D3 ; else D3=((((((([$400000+([A5+$5678] value<<5)+([A5+$5672] value*2)] value&#$f000)ROL4)>>1)&1)|(([$400000+([A5+$5678] value<<5)+([A5+$5672] value*2)] value&#$f0)>>3))&#$1e)<<3)|#$2000 04B19E: 3A04 move.w D4, D5 ; D5=(((([$400000+([A5+$5678] value<<5)+([A5+$5672] value*2)] value&#$f000)ROL4)>>2)&1)|([A7+1] value*2) 04B1A0: 0244 001E andi.w #$1e, D4 ; D4=((((([$400000+([A5+$5678] value<<5)+([A5+$5672] value*2)] value&#$f000)ROL4)>>2)&1)|([A7+1] value*2))&#$1e 04B1A4: EF4C lsl.w #7, D4 ; D4=(((((([$400000+([A5+$5678] value<<5)+([A5+$5672] value*2)] value&#$f000)ROL4)>>2)&1)|([A7+1] value*2))&#$1e)<<7 04B1A6: 0245 0001 andi.w #$1, D5 ; D5=((((([$400000+([A5+$5678] value<<5)+([A5+$5672] value*2)] value&#$f000)ROL4)>>2)&1)|([A7+1] value*2))&1 04B1AA: 6700 0006 beq $4b1b2 ; if (((([$400000+([A5+$5678] value<<5)+([A5+$5672] value*2)] value&#$f000)ROL4)>>2)&1)|([A7+1] value*2) is even then skip next step 04B1AE: 0044 4000 ori.w #$4000, D4 ; else D4=((((((([$400000+([A5+$5678] value<<5)+([A5+$5672] value*2)] value&#$f000)ROL4)>>2)&1)|([A7+1] value*2))&#$1e)<<7)|#$4000 04B1B2: 7200 moveq #$0, D1 ; D1=0 04B1B4: 8242 or.w D2, D1 04B1B6: 8243 or.w D3, D1 04B1B8: 8244 or.w D4, D1 04B1BA: 4E75 rts04ADF2: 5207 addq.b #1, D7 04ADF4: 0C07 0020 cmpi.b #$20, D7 04ADF8: 6500 0004 bcs $4adfe ; if (old D2\D3\D4 value+1)<#$20 then end the subroutine, else D7 lowest byte=0 04ADFC: 4207 clr.b D7 04ADFE: 4E75 rts
avatar

45

Awaiting an answers from you, I decided to analyse the Samurai Shodown (first game of series) disassembly for a while:

000FBA: 1039 0010 FD96 move.b $10fd96.l, D0 ; D0=P1_CURRENT value 000FC0: 122D 8A7B move.b (-$7585,A5), D1 ; D1=[A5-$7585] value 000FC4: 1B40 8A7B move.b D0, (-$7585,A5) ; [A5-$7585] value=P1_CURRENT value 000FC8: B101 eor.b D0, D1 ; D1=P1_CURRENT value^old [A5-$7585] value 000FCA: C200 and.b D0, D1 ; D1=(P1_CURRENT value^old [A5-$7585] value)&P1_CURRENT value 000FCC: 1B41 8A7C move.b D1, (-$7584,A5) ; [A5-$7584] value=(P1_CURRENT value^old [A5-$7585] value)&P1_CURRENT value 000FD0: 1039 0010 FD9C move.b $10fd9c.l, D0 ; D0=P2_CURRENT value 000FD6: 122D 8A7D move.b (-$7583,A5), D1 ; D1=[A5-$7583] value 000FDA: 1B40 8A7D move.b D0, (-$7583,A5) ; [A5-$7583] value=P2_CURRENT value 000FDE: B101 eor.b D0, D1 ; D1=P2_CURRENT value^old [A5-$7583] value 000FE0: C200 and.b D0, D1 ; D1=(P2_CURRENT value^old [A5-$7583] value)&P2_CURRENT value 000FE2: 1B41 8A7E move.b D1, (-$7582,A5) ; [A5-$7582] value=(P2_CURRENT value^old [A5-$7583] value)&P2_CURRENT value 000FE6: 4EB9 0002 0118 jsr $20118.l ; How is it possible? There is no such subroitine in samsho disassembly. This address is a middle of $20116 code string. 000FEC: 422D 8AB1 clr.b (-$754f,A5) ; [A5-$754f] value=0 000FF0: 2B7C 0010 1080 89FA move.l #$101080, (-$7606,A5) ; [A5-$7606] value=#$101080 000FF8: 41ED 9040 lea (-$6fc0,A5), A0 ; A0=[A5-$6fc0] 000FFC: 203C 0010 2000 move.l #$102000, D0 ; D0=#$102000 001002: 3140 0002 move.w D0, ($2,A0) ; [A5-$6fbe] value=#$102000 001006: 41ED A000 lea (-$6000,A5), A0 ; A0=[A5-$6000] 00100A: 203C 0010 1040 move.l #$101040, D0 ; D0=#$101040 001010: 3140 0000 move.w D0, ($0,A0) ; [A5-$6000] value=#$101040 001014: 317C FFFF 0004 move.w #$ffff, ($4,A0) ; [A5-$5ffc] value=#$ffff 00101A: 4DED E142 lea (-$1ebe,A5), A6 ; A6=[A5-$1ebe] 00101E: 4EBA 16C4 jsr ($16c4,PC) ; ($26e4) 001022: 4DED E182 lea (-$1e7e,A5), A6 ; A6=[A5-$1e7e] 001026: 4EBA 1728 jsr ($1728,PC) ; ($2750) 00102A: 422D 8AB7 clr.b (-$7549,A5) ; [A5-$7549] value=0 00102E: 4DED A142 lea (-$5ebe,A5), A6 ; A6=[A5-$5ebe] 001032: 4A6E 002E tst.w ($2e,A6) 001036: 6700 0006 beq $103e ; if [A5-$5e90] value=0 then skip next step 00103A: 536E 002E subq.w #1, ($2e,A6) ; else [A5-$5e90] value-1 00103E: 2F0E move.l A6, -(A7) ; [A7-1]=[A5-$5ebe] 001040: 206E 0000 movea.l ($0,A6), A0 ; A0=[A5-$5ebe] 001044: 4E90 jsr (A0) ; goto [A5-$5ebe] subroutine 001046: 2C5F movea.l (A7)+, A6 ; A6=[A7+1] 001048: 7000 moveq #$0, D0 ; D0=0 00104A: 102E 0051 move.b ($51,A6), D0 ; D0=[A7+$52] value 00104E: 6700 000C beq $105c ; if [A7+$52] value=0 then skip next 4 steps 001052: D040 add.w D0, D0 001054: D040 add.w D0, D0 ; else D0=[A7+$52] value*4 001056: 207B 002A movea.l ($2a,PC,D0.w), A0 ; A0=[$1082+([A7+$52] value*4)] 00105A: 4E90 jsr (A0) ; goto [$1082+([A7+$52] value*4)] subroutine 00105C: 4EB9 0000 4510 jsr $4510.l 001062: 522D 8AB7 addq.b #1, (-$7549,A5) ; [A5-$7549] value+1 001066: 0C6E FFFF 0008 cmpi.w #-$1, ($8,A6) 00106C: 6700 000E beq $107c ; if [A7+9] value=-1 then end the cycle 001070: 200E move.l A6, D0 ; D0=[A7+1] value 001072: 302E 0006 move.w ($6,A6), D0 ; lowest word of D0 value=[A7+7] value 001076: 2C40 movea.l D0, A6 ; A6=[high word of [A7+1] value+[A7+7] value] 001078: 4EFA FFB8 jmp (-$48,PC) ; ($1032) 00107C: 4EBA 0AA8 jsr ($aa8,PC) ; ($1b26) 001080: 4E75 rts020116: 0000 082D ori.b #$2d, D0 02011A: 0006 8000 ori.b #$0, D6 02011E: 6700 003A beq $2015a ; if D6|0=0 => D6=0 then end the subroutine 020122: 1B79 0010 FD96 8A7B move.b $10fd96.l, (-$7585,A5) ; else send P1_CURRENT to [A5-$7585] 02012A: 1039 0010 FD98 move.b $10fd98.l, D0 ; send P1_REPEAT to D0 020130: 0240 00F0 andi.w #$f0, D0 ; D0=P1_REPEAT&#$f0 020134: 8039 0010 FD97 or.b $10fd97.l, D0 ; D0=(P1_REPEAT&#$f0)|P1_CHANGE 02013A: 1B40 8A7C move.b D0, (-$7584,A5) ; [A5-$7584] value=(P1_REPEAT&#$f0)|P1_CHANGE 02013E: 1B79 0010 FD9C 8A7D move.b $10fd9c.l, (-$7583,A5) ; send P2_CURRENT to [A5-$7583] 020146: 1039 0010 FD9E move.b $10fd9e.l, D0 ; send P2_REPEAT to D0 02014C: 0240 00F0 andi.w #$f0, D0 ; D0=P2_REPEAT&#$f0 020150: 8039 0010 FD9D or.b $10fd9d.l, D0 ; D0=(P2_REPEAT&#$f0)|P2_CHANGE 020156: 1B40 8A7E move.b D0, (-$7582,A5) ; [A5-$7582] value=(P2_REPEAT&#$f0)|P2_CHANGE 02015A: 4E75 rts0026E4: 7000 moveq #$0, D0 ; D0=0 0026E6: 102E 001B move.b ($1b,A6), D0 ; D0=[A5-$1ea3] value 0026EA: 6700 0062 beq $274e ; if [A5-$1ea3] value=0 then end the subroutine 0026EE: E548 lsl.w #2, D0 ; else D0=[A5-$1ea3] value<<2 0026F0: 43F9 0004 C000 lea $4c000.l, A1 ; A1=[$4c000] 0026F6: 2271 0000 movea.l (A1,D0.w), A1 ; A1=[$4c000+([A5-$1ea3] value<<2)] 0026FA: 422E 001B clr.b ($1b,A6) ; [A5-$1ea3] value=0 0026FE: 302E 000C move.w ($c,A6), D0 ; D0=[A5-$1eb2] value 002702: 5240 addq.w #1, D0 ; D0=[A5-$1eb2] value+1 002704: C0FC 0040 mulu.w #$40, D0 ; D0=([A5-$1eb2] value+1)*#$40 002708: 7827 moveq #$27, D4 ; D4=#$27 00270A: 7C16 moveq #$16, D6 ; D6=#$16 00270C: 7A02 moveq #$2, D5 ; D5=#$2 00270E: 49F9 003C 0002 lea $3c0002.l, A4 ; send REG_VRAMRW to A4 002714: 522D 8A77 addq.b #1, (-$7589,A5) ; [A5-$7589] value+1 002718: 397C 0001 0002 move.w #$1, ($2,A4) ; REG_VRAMMOD value=1 00271E: 0640 0012 addi.w #$12, D0 ; D0=(([A5-$1eb2] value+1)*#$40)+#$12 002722: 3940 FFFE move.w D0, (-$2,A4) ; send D0 value to REG_VRAMADDR 002726: 3E06 move.w D6, D7 ; D7=#$16 002728: 3899 move.w (A1)+, (A4) ; REG_VRAMRW value=[$4c001+([A5-$1ea3] value<<2)] 00272A: 3899 move.w (A1)+, (A4) ; REG_VRAMRW value=[$4c002+([A5-$1ea3] value<<2)] 00272C: 51CF FFFA dbra D7, $2728 ; D7-1, if D7 <> 0 then skip 1 step back 002730: 0440 0012 subi.w #$12, D0 ; D0=([A5-$1eb2] value+1)*#$40 002734: 3940 FFFE move.w D0, (-$2,A4) ; send D0 value to REG_VRAMADDR 002738: 3E05 move.w D5, D7 ; D7=#$2 00273A: 3899 move.w (A1)+, (A4) ; REG_VRAMRW value=[$4c003+([A5-$1ea3] value<<2)] 00273C: 3899 move.w (A1)+, (A4) ; REG_VRAMRW value=[$4c004+([A5-$1ea3] value<<2)] 00273E: 51CF FFFA dbra D7, $273a ; D7-1, if D7 <> 0 then skip 1 step back 002742: 0640 0040 addi.w #$40, D0 ; D0=(([A5-$1eb2] value+1)*#$40)+#$40 002746: 51CC FFD6 dbra D4, $271e ; D4-1, if D4 <> 0 then jump back to $271e 00274A: 532D 8A77 subq.b #1, (-$7589,A5) ; [A5-$7589] value-1 00274E: 4E75 rts 002750: 7000 moveq #$0, D0 ; D0=0 002752: 102E 001B move.b ($1b,A6), D0 ; D0=[A5-$1e63] value 002756: 6700 004A beq $27a2 ; if [A5-$1e63] value=0 then end the subroutine 00275A: E548 lsl.w #2, D0 ; else D0=[A5-$1e63] value<<2 00275C: 43F9 0004 C000 lea $4c000.l, A1 ; A1=[$4c000] 002762: 2271 0000 movea.l (A1,D0.w), A1 ; A1=[$4c000+([A5-$1e63] value<<2)] 002766: 422E 001B clr.b ($1b,A6) ; [A5-$1e63] value=0 00276A: 302E 000C move.w ($c,A6), D0 ; D0=[A5-$1e72] value 00276E: 5240 addq.w #1, D0 ; D0=[A5-$1e72] value+1 002770: C0FC 0040 mulu.w #$40, D0 ; D0=([A5-$1e72] value+1)*#$40 002774: 7827 moveq #$27, D4 ; D4=#$27 002776: 7C19 moveq #$19, D6 ; D6=#$19 002778: 49F9 003C 0002 lea $3c0002.l, A4 ; send REG_VRAMRW to A4 00277E: 522D 8A77 addq.b #1, (-$7589,A5) ; [A5-$7589] value+1 002782: 397C 0001 0002 move.w #$1, ($2,A4) ; REG_VRAMMOD value=1 002788: 3940 FFFE move.w D0, (-$2,A4) ; send D0 value to REG_VRAMADDR 00278C: 3E06 move.w D6, D7 ; D7=#$19 00278E: 3899 move.w (A1)+, (A4) ; REG_VRAMRW value=[$4c001+([A5-$1e63] value<<2)] 002790: 3899 move.w (A1)+, (A4) ; REG_VRAMRW value=[$4c002+([A5-$1e63] value<<2)] 002792: 51CF FFFA dbra D7, $278e ; D7-1, if D7 <> 0 then skip 1 step back 002796: 0640 0040 addi.w #$40, D0 ; D0=(([A5-$1e72] value+1)*#$40)+#$40 00279A: 51CC FFEC dbra D4, $2788 ; D4-1, if D4 <> 0 then skip back to $2788 00279E: 532D 8A77 subq.b #1, (-$7589,A5) ; [A5-$7589] value-1 0027A2: 4E75 rts004510: 522D 8A83 addq.b #1, (-$757d,A5) ; [A5-$757d] value+1 004514: 7000 moveq #$0, D0 ; D0=0 004516: 102E 0055 move.b ($55,A6), D0 ; D0=[A7+$56] value 00451A: 6700 0082 beq $459e ; if [A7+$56] value=0 then goto $459e subroutine 00451E: 6B00 0020 bmi $4540 ; else if [A7+$56] value is negative then goto $4540 subroutine 004522: 0240 000F andi.w #$f, D0 ; else D0=[A7+$56] value&#$f 004526: D040 add.w D0, D0 ; D0=([A7+$56] value&#$f)*2 004528: 1D7B 007A 0058 move.b ($7a,PC,D0.w), ($58,A6) ; [A7+$59] value=[$45a4+(([A7+$56] value&#$f)*2)] value 00452E: 1D7B 0075 0059 move.b ($75,PC,D0.w), ($59,A6) ; [A7+$5a] value=[$45a5+(([A7+$56] value&#$f)*2)] value 004534: 002E 0080 0055 ori.b #$80, ($55,A6) ; [A7+$56] value|#$80 00453A: 1D7C 0004 0057 move.b #$4, ($57,A6) ; [A7+$58] value=4 004540: 1B7C 0001 8AB1 move.b #$1, (-$754f,A5) ; [A5-$754f] value=1 004546: 532E 0057 subq.b #1, ($57,A6) ; [A7+$58] value=3 00454A: 022E 0003 0057 andi.b #$3, ($57,A6) ; [A7+$58] value&3=3&3=3 004550: 7000 moveq #$0, D0 ; D0=0 004552: 102E 0056 move.b ($56,A6), D0 ; D0=[A7+$57] value 004556: D040 add.w D0, D0 004558: D040 add.w D0, D0 ; D0=[A7+$57] value*4 00455A: 802E 0057 or.b ($57,A6), D0 ; D0=([A7+$57] value*4)|[A7+$58] value 00455E: D040 add.w D0, D0 004560: D040 add.w D0, D0 ; D0=(([A7+$57] value*4)|[A7+$58] value)*4 004562: 287B 0050 movea.l ($50,PC,D0.w), A4 ; A4=[$45b4+((([A7+$57] value*4)|[A7+$58] value)*4)] 004566: 7000 moveq #$0, D0 ; D0=0 004568: 301C move.w (A4)+, D0 ; D0=[$45b5+((([A7+$57] value*4)|[A7+$58] value)*4)] value 00456A: 0C40 FFFF cmpi.w #-$1, D0 00456E: 6700 000A beq $457a ; if [$45b5+((([A7+$57] value*4)|[A7+$58] value)*4)] value=-1 then skip next 2 steps 004572: 4EBA 0838 jsr ($838,PC) ; ($4dac) 004576: 4EFA FFEE jmp (-$12,PC) ; ($4566) 00457A: 4A2E 0057 tst.b ($57,A6) 00457E: 6600 001E bne $459e ; if [A7+$58] value!=0 then skip to $459e 004582: 72FE moveq #-$2, D1 ; else D1=-2 004584: 102E 0059 move.b ($59,A6), D0 ; D0=[A7+$5a] value 004588: B02E 0058 cmp.b ($58,A6), D0 00458C: 6B00 000C bmi $459a ; if [A7+$5a] value - [A7+$59] value is negative => [A7+$59] value>[A7+$5a] value then skip to $459a 004590: 6600 0006 bne $4598 ; else if [A7+$5a] value - [A7+$59] value!=0 then skip next step 004594: 422E 0055 clr.b ($55,A6) ; else [A7+$56] value=0 004598: 7202 moveq #$2, D1 ; D1=2 00459A: D32E 0058 add.b D1, ($58,A6) ; [A7+$59] value+2 00459E: 532D 8A83 subq.b #1, (-$757d,A5) ; [A5-$757d] value-1 0045A2: 4E75 rts004DAC: 122E 0055 move.b ($55,A6), D1 ; D1=old [A7+$56] value|#$80 004DB0: E849 lsr.w #4, D1 ; D1=(old [A7+$56] value|#$80)>>4 004DB2: 0241 0007 andi.w #$7, D1 ; D1=((old [A7+$56] value|#$80)>>4)&7 004DB6: D241 add.w D1, D1 004DB8: D241 add.w D1, D1 ; D1=(((old [A7+$56] value|#$80)>>4)&7)*4 004DBA: 2ABB 10DC move.l (-$24,PC,D1.w), (A5) ; (A5) value=[$4d98+((((old [A7+$56] value|#$80)>>4)&7)*4)] value 004DBE: 323C 000F move.w #$f, D1 ; D1=#$f 004DC2: 41ED 6C00 lea ($6c00,A5), A0 ; A0=[A5+$6c00] 004DC6: 2070 0000 movea.l (A0,D0.w), A0 ; A0=[A5+$6c00+[$45b5+((([A7+$57] value*4)|[A7+$58] value)*4)] value] 004DCA: 226D 8500 movea.l (-$7b00,A5), A1 ; A1=[A5-$7b00] 004DCE: B3FC 0010 06C8 cmpa.l #$1006c8, A1 004DD4: 6200 006E bhi $4e44 ; if [A5-$7b00]>#$1006c8 then goto $4e44 subroutine 004DD8: E748 lsl.w #3, D0 ; D0=([$45b5+((([A7+$57] value*4)|[A7+$58] value)*4)] value)<<3 004DDA: 0680 0040 0000 addi.l #$400000, D0 ; D0=(([$45b5+((([A7+$57] value*4)|[A7+$58] value)*4)] value)<<3)+#$400000 004DE0: 22C0 move.l D0, (A1)+ ; [A5-$7aff] value=(([$45b5+((([A7+$57] value*4)|[A7+$58] value)*4)] value)<<3)+#$400000 004DE2: 32C1 move.w D1, (A1)+ ; [A5-$7afe] value=#$f 004DE4: 102E 0058 move.b ($58,A6), D0 ; D0=[A7+$59] value 004DE8: 2A15 move.l (A5), D5 ; D5=[$4d98+((((old [A7+$56] value|#$80)>>4)&7)*4)] value 004DEA: 45F9 0000 4E46 lea $4e46.l, A2 ; A2=[$4e46] 004DF0: 3418 move.w (A0)+, D2 ; D2=[A5+$6c01+[$45b5+((([A7+$57] value*4)|[A7+$58] value)*4)] value] value 004DF2: 3C02 move.w D2, D6 ; D6=[A5+$6c01+[$45b5+((([A7+$57] value*4)|[A7+$58] value)*4)] value] value 004DF4: E95E rol.w #4, D6 ; D6=[A5+$6c01+[$45b5+((([A7+$57] value*4)|[A7+$58] value)*4)] value] valueROL4 004DF6: 7600 moveq #$0, D3 ; D3=0 004DF8: 7802 moveq #$2, D4 ; D4=2 004DFA: 3F02 move.w D2, -(A7) ; [A7-1] value=[A5+$6c01+[$45b5+((([A7+$57] value*4)|[A7+$58] value)*4)] value] value 004DFC: 0242 000F andi.w #$f, D2 ; D2=([A5+$6c01+[$45b5+((([A7+$57] value*4)|[A7+$58] value)*4)] value] value)&#$f 004E00: E24E lsr.w #1, D6 ; D6=([A5+$6c01+[$45b5+((([A7+$57] value*4)|[A7+$58] value)*4)] value] valueROL4)>>1 004E02: E352 roxl.w #1, D2 ; D2=(([A5+$6c01+[$45b5+((([A7+$57] value*4)|[A7+$58] value)*4)] value] value)&#$f)ROXL1 004E04: B405 cmp.b D5, D2 004E06: 6A00 0010 bpl $4e18 ; if ((([A5+$6c01+[$45b5+((([A7+$57] value*4)|[A7+$58] value)*4)] value] value)&#$f)ROXL1) value-[$4d98+((((old [A7+$56] value|#$80)>>4)&7)*4)] value is positive then goto $4e18 004E0A: D400 add.b D0, D2 ; else D2=((([A5+$6c01+[$45b5+((([A7+$57] value*4)|[A7+$58] value)*4)] value] value)&#$f)ROXL1)+[A7+$59] value 004E0C: B405 cmp.b D5, D2 004E0E: 6B00 0012 bmi $4e22 ; if (((([A5+$6c01+[$45b5+((([A7+$57] value*4)|[A7+$58] value)*4)] value] value)&#$f)ROXL1)+[A7+$59] value)-[$4d98+((((old [A7+$56] value|#$80)>>4)&7)*4)] value is negative then goto $4e22 004E12: 1405 move.b D5, D2 ; else D2=[$4d98+((((old [A7+$56] value|#$80)>>4)&7)*4)] value 004E14: 4EFA 000C jmp ($c,PC) ; ($4e22) 004E18: 9400 sub.b D0, D2 ; D2=((([A5+$6c01+[$45b5+((([A7+$57] value*4)|[A7+$58] value)*4)] value] value)&#$f)ROXL1)-[A7+$59] value 004E1A: B405 cmp.b D5, D2 004E1C: 6A00 0004 bpl $4e22 ; if (((([A5+$6c01+[$45b5+((([A7+$57] value*4)|[A7+$58] value)*4)] value] value)&#$f)ROXL1)-[A7+$59] value)-[$4d98+((((old [A7+$56] value|#$80)>>4)&7)*4)] value is positive then skip next step 004E20: 1405 move.b D5, D2 ; else D2=[$4d98+((((old [A7+$56] value|#$80)>>4)&7)*4)] value 004E22: E34A lsl.w #1, D2 ; D2=([$4d98+((((old [A7+$56] value|#$80)>>4)&7)*4)] value)<<1 or (((([A5+$6c01+[$45b5+((([A7+$57] value*4)|[A7+$58] value)*4)] value] value)&#$f)ROXL1)-[A7+$59] value)<<1 or (((([A5+$6c01+[$45b5+((([A7+$57] value*4)|[A7+$58] value)*4)] value] value)&#$f)ROXL1)+[A7+$59] value)<<1 004E24: 8672 2000 or.w (A2,D2.w), D3 ; D3=([$4e46]value+(([$4d98+((((old [A7+$56] value|#$80)>>4)&7)*4)] value)<<1))|0 or ([$4e46]value+((((([A5+$6c01+[$45b5+((([A7+$57] value*4)|[A7+$58] value)*4)] value] value)&#$f)ROXL1)-[A7+$59] value)<<1))|0 or ([$4e46]value+((((([A5+$6c01+[$45b5+((([A7+$57] value*4)|[A7+$58] value)*4)] value] value)&#$f)ROXL1)+[A7+$59] value)<<1))|0 004E28: D5FC 0000 0040 adda.l #$40, A2 ; [$4e46] value+#$40 004E2E: 341F move.w (A7)+, D2 ; D2=[A7+1] value 004E30: E84A lsr.w #4, D2 ; D2=[A7+1] value>>4 004E32: E08D lsr.l #8, D5 ; D5=[$4d98+((((old [A7+$56] value|#$80)>>4)&7)*4)] value>>8 004E34: 51CC FFC4 dbra D4, $4dfa ; D4-1, if D4 <> 0 jump back to $4dfa 004E38: 32C3 move.w D3, (A1)+ ; [A5-$7afd] value=0 004E3A: 51C9 FFAC dbra D1, $4de8 ; D1-1, if D1 <> 0 jump back to $4de8 004E3E: 4291 clr.l (A1) 004E40: 2B49 8500 move.l A1, (-$7b00,A5) ; [A5-$7b00] value=0 004E44: 4E75 rts
avatar

46

001B26: 102D 8A85 move.b (-$757b,A5), D0 ; D0=[A5-$757b] value 001B2A: 6700 0004 beq $1b30 ; if [A5-$757b] value=0 then goto $1b30 subroutine 001B2E: 4E75 rts 001B30: 522D 8A77 addq.b #1, (-$7589,A5) ; [A5-$7589] value+1 001B34: 522D 8A80 addq.b #1, (-$7580,A5) ; [A5-$7580] value+1 001B38: 3A3C 0032 move.w #$32, D5 ; D5=#$32 001B3C: 082D 0000 8A80 btst #$0, (-$7580,A5) 001B42: 6700 0006 beq $1b4a ; if 1st bit of [A5-$7580] value=0 => if (old [A5-$7580] value+1) is even then skip next step 001B46: 3A3C 00BE move.w #$be, D5 ; else D5=#$be 001B4A: 3B45 89FE move.w D5, (-$7602,A5) ; [A5-$7602] value=#$32 or #$be 001B4E: 41ED 8764 lea (-$789c,A5), A0 ; A0=[A5-$789c] 001B52: 082D 0000 8A80 btst #$0, (-$7580,A5) 001B58: 6700 000E beq $1b68 ; if (old [A5-$7580] value+1) is even then skip next 5 steps 001B5C: 7200 moveq #$0, D1 ; else D1=0 001B5E: 303C 0045 move.w #$45, D0 ; D0=#$45 001B62: 20C1 move.l D1, (A0)+ ; [A5-$789b] value=0 001B64: 51C8 FFFC dbra D0, $1b62 ; D0-1, if D0 <> 0 then skip to previous step 001B68: 49F9 003C 0002 lea $3c0002.l, A4 ; send REG_VRAMRW to A4 001B6E: 4DED 9040 lea (-$6fc0,A5), A6 ; A6=[A5-$6fc0] 001B72: 200E move.l A6, D0 ; D0=[A5-$6fc0] value 001B74: 302E 0002 move.w ($2,A6), D0 ; lowest word of D0=[A5-$6fbe] value 001B78: 2C40 movea.l D0, A6 ; [A5-$6fc0] value=high word of [A5-$6fc0] value+[A5-$6fbe] value 001B7A: 0C6E FFFF 0004 cmpi.w #-$1, ($4,A6) 001B80: 6700 0018 beq $1b9a ; if [A5-$6fbc] value=-1 then skip next 6 steps 001B84: 4EB9 0000 1BB6 jsr $1bb6.l 001B8A: 4EB9 0000 1ED8 jsr $1ed8.l 001B90: DA6E 0006 add.w ($6,A6), D5 ; D5=[A5-$6fba] value 001B94: 5245 addq.w #1, D5 ; D5=[A5-$6fba] value+1 001B96: 4EFA FFDA jmp (-$26,PC) ; ($1b72) 001B9A: 303C 0148 move.w #$148, D0 ; D0=#$148 001B9E: 9045 sub.w D5, D0 ; D0=#$148-([A5-$6fba] value+1) 001BA0: DA45 add.w D5, D5 ; D5=([A5-$6fba] value+1)*2 001BA2: 41ED 8700 lea (-$7900,A5), A0 ; A0=[A5-$7900] 001BA6: D0C5 adda.w D5, A0 ; A0=[A5-$7900]+(([A5-$6fba] value+1)*2) 001BA8: 7200 moveq #$0, D1 ; D1=0 001BAA: 30C1 move.w D1, (A0)+ 001BAC: 51C8 FFFC dbra D0, $1baa ; D0-1, if D0 <> 0 jump back to previous step 001BB0: 532D 8A77 subq.b #1, (-$7589,A5) ; [A5-$7589] value-1 001BB4: 4E75 rts001BB6: 397C 0001 0002 move.w #$1, ($2,A4) ; REG_VRAMMOD value=1 001BBC: 41F9 0004 C2DC lea $4c2dc.l, A0 ; A0=[$4c2dc] 001BC2: 3E2E 0006 move.w ($6,A6), D7 ; D7=[A5-$6fba] value 001BC6: 3C2E 0008 move.w ($8,A6), D6 ; D6=[A5-$6fb8] value 001BCA: 7000 moveq #$0, D0 ; D0=0 001BCC: 102E 001E move.b ($1e,A6), D0 ; D0=[A5-$6fa2] value 001BD0: D040 add.w D0, D0 001BD2: D040 add.w D0, D0 ; D0=([A5-$6fa2] value)*4 001BD4: 2070 0000 movea.l (A0,D0.w), A0 ; A0=[$4c2dc+(([A5-$6fa2] value)*4)] 001BD8: 302E 0018 move.w ($18,A6), D0 ; D0=[A5-$6fa8] value 001BDC: D040 add.w D0, D0 001BDE: D040 add.w D0, D0 ; D0=([A5-$6fa8] value)*4 001BE0: 7400 moveq #$0, D2 ; D2=0 001BE2: 1430 0000 move.b (A0,D0.w), D2 ; D2=[[$4c2dc+(([A5-$6fa2] value)*4)]+(([A5-$6fa8] value)*4)] value 001BE6: 2030 0000 move.l (A0,D0.w), D0 ; D0=[[$4c2dc+(([A5-$6fa2] value)*4)]+(([A5-$6fa8] value)*4)] value 001BEA: 0280 00FF FFFF andi.l #$ffffff, D0 ; D0=[[$4c2dc+(([A5-$6fa2] value)*4)]+(([A5-$6fa8] value)*4)] value&#$ffffff 001BF0: 2040 movea.l D0, A0 ; A0=[[[$4c2dc+(([A5-$6fa2] value)*4)]+(([A5-$6fa8] value)*4)] value&#$ffffff] 001BF2: 3D58 000A move.w (A0)+, ($a,A6) ; [A5-$6fb6] value=[([[$4c2dc+(([A5-$6fa2] value)*4)]+(([A5-$6fa8] value)*4)] value&#$ffffff)+1] value 001BF6: 3D58 000C move.w (A0)+, ($c,A6) ; [A5-$6fb4] value=[([[$4c2dc+(([A5-$6fa2] value)*4)]+(([A5-$6fa8] value)*4)] value&#$ffffff)+2] value 001BFA: 1218 move.b (A0)+, D1 ; D1=[([[$4c2dc+(([A5-$6fa2] value)*4)]+(([A5-$6fa8] value)*4)] value&#$ffffff)+3] value 001BFC: D22E 001D add.b ($1d,A6), D1 ; D1=[([[$4c2dc+(([A5-$6fa2] value)*4)]+(([A5-$6fa8] value)*4)] value&#$ffffff)+3] value+[A5-$6fa3] value 001C00: 6400 0004 bcc $1c06 ; if C flag=0 then skip next step 001C04: 7205 moveq #$5, D1 ; else D1=5 001C06: 1A81 move.b D1, (A5) ; lowest byte of (A5) value=[([[$4c2dc+(([A5-$6fa2] value)*4)]+(([A5-$6fa8] value)*4)] value&#$ffffff)+3] value+[A5-$6fa3] value or 5 001C08: 3215 move.w (A5), D1 ; D1=high byte of [$4d98+((((old [A7+$56] value|#$80)>>4)&7)*4)] value lowest word+[([[$4c2dc+(([A5-$6fa2] value)*4)]+(([A5-$6fa8] value)*4)] value&#$ffffff)+3] value+[A5-$6fa3] value or D1=high byte of [$4d98+((((old [A7+$56] value|#$80)>>4)&7)*4)] value lowest word+5 001C0A: 4201 clr.b D1 ; lowest byte of D1=0 001C0C: 47FA 02C6 lea ($2c6,PC) ; ($1ed4), A3 001C10: 3605 move.w D5, D3 ; D3=#$32 or #$be 001C12: 4A2E 001C tst.b ($1c,A6) 001C16: 6700 0008 beq $1c20 ; if [A5-$6fa4] value=0 then skip next 3 steps 001C1A: 5241 addq.w #1, D1 ; D1=high byte of [$4d98+((((old [A7+$56] value|#$80)>>4)&7)*4)] value lowest word+[([[$4c2dc+(([A5-$6fa2] value)*4)]+(([A5-$6fa8] value)*4)] value&#$ffffff)+3] value+[A5-$6fa3] value+1 or D1=high byte of [$4d98+((((old [A7+$56] value|#$80)>>4)&7)*4)] value lowest word+6 001C1C: 544B addq.w #2, A3 ; [$1ed4] value+2 001C1E: D647 add.w D7, D3 ; D3=[A5-$6fba] value+#$32 or [A5-$6fba] value+#$be 001C20: ED4B lsl.w #6, D3 ; D3=([A5-$6fba] value+#$32)<<6 or ([A5-$6fba] value+#$be)<<6 001C22: 0643 0040 addi.w #$40, D3 ; D3=(([A5-$6fba] value+#$32)<<6)+#$40 or (([A5-$6fba] value+#$be)<<6)+#$40 001C26: 102E 001B move.b ($1b,A6), D0 ; D0=[A5-$6fa5] value 001C2A: 6700 0010 beq $1c3c ; if [A5-$6fa5] value=0 then skip next 4 steps 001C2E: 0240 00F0 andi.w #$f0, D0 ; else D0=[A5-$6fa5] value&#$f0 001C32: 8046 or.w D6, D0 ; D0=([A5-$6fa5] value&#$f0)|[A5-$6fb8] value 001C34: 45F9 0000 1CBC lea $1cbc.l, A2 ; A2=[$1cbc] 001C3A: D4C0 adda.w D0, A2 ; A2=[$1cbc]+(([A5-$6fa5] value&#$f0)|[A5-$6fb8] value) 001C3C: 4845 swap D5 ; D5=#$320000+lowest word of ([$4d98+((((old [A7+$56] value|#$80)>>4)&7)*4)] value>>8) value or D5=#$be0000+lowest word of ([$4d98+((((old [A7+$56] value|#$80)>>4)&7)*4)] value>>8) value 001C3E: D442 add.w D2, D2 001C40: D442 add.w D2, D2 ; D2=[[$4c2dc+(([A5-$6fa2] value)*4)]+(([A5-$6fa8] value)*4)] value*4 001C42: 227B 2008 movea.l ($8,PC,D2.w), A1 ; A1=[$1c4c+([[$4c2dc+(([A5-$6fa2] value)*4)]+(([A5-$6fa8] value)*4)] value*4)] 001C46: 4E91 jsr (A1) 001C48: 4845 swap D5 001C4A: 4E75 rts
avatar

47

001ED8: 397C 0001 0002 move.w #$1, ($2,A4) ; REG_VRAMMOD value=1 001EDE: 3005 move.w D5, D0 ; D0=(lowest word of ([$4d98+((((old [A7+$56] value|#$80)>>4)&7)*4)] value>>8) value*#$10000)+#$32 or D0=(lowest word of ([$4d98+((((old [A7+$56] value|#$80)>>4)&7)*4)] value>>8) value*#$10000)+#$be 001EE0: D040 add.w D0, D0 ; D0=((lowest word of ([$4d98+((((old [A7+$56] value|#$80)>>4)&7)*4)] value>>8) value*#$10000)+#$32)*2 or D0=((lowest word of ([$4d98+((((old [A7+$56] value|#$80)>>4)&7)*4)] value>>8) value*#$10000)+#$be)*2 001EE2: 47ED 8700 lea (-$7900,A5), A3 ; A3=[A5-$7900] 001EE6: D6C0 adda.w D0, A3 ; A3=[A5-$7900]+(((lowest word of ([$4d98+((((old [A7+$56] value|#$80)>>4)&7)*4)] value>>8) value*#$10000)+#$32)*2) or A3=[A5-$7900]+(((lowest word of ([$4d98+((((old [A7+$56] value|#$80)>>4)&7)*4)] value>>8) value*#$10000)+#$be)*2) 001EE8: 382E 0006 move.w ($6,A6), D4 ; D4=[A5-$6fba] value 001EEC: 322E 000C move.w ($c,A6), D1 ; D1=[A5-$6fb4] value 001EF0: 102E 001B move.b ($1b,A6), D0 ; D0=[A5-$6fa5] value 001EF4: 6700 000C beq $1f02 ; if [A5-$6fa5] value=0 then skip next 4 steps 001EF8: 0240 00FF andi.w #$ff, D0 ; else D0=[A5-$6fa5] value&#$ff 001EFC: C1C1 muls.w D1, D0 ; D0=([A5-$6fa5] value&#$ff)*[A5-$6fb4] value 001EFE: E088 lsr.l #8, D0 ; D0=(([A5-$6fa5] value&#$ff)*[A5-$6fb4] value)>>8 001F00: 9240 sub.w D0, D1 ; D1=[A5-$6fb4] value-((([A5-$6fa5] value&#$ff)*[A5-$6fb4] value)>>8) 001F02: 302E 0012 move.w ($12,A6), D0 ; D0=[A5-$6fae] value 001F06: 9041 sub.w D1, D0 ; D0=[A5-$6fae] value-([A5-$6fb4] value-((([A5-$6fa5] value&#$ff)*[A5-$6fb4] value)>>8)) 001F08: 4440 neg.w D0 ; D0=-([A5-$6fae] value-([A5-$6fb4] value-((([A5-$6fa5] value&#$ff)*[A5-$6fb4] value)>>8))) 001F0A: EF48 lsl.w #7, D0 ; D0=-([A5-$6fae] value-([A5-$6fb4] value-((([A5-$6fa5] value&#$ff)*[A5-$6fb4] value)>>8)))<<7 001F0C: 806E 0008 or.w ($8,A6), D0 ; D0=(-([A5-$6fae] value-([A5-$6fb4] value-((([A5-$6fa5] value&#$ff)*[A5-$6fb4] value)>>8)))<<7)|[A5-$6fb8] value 001F10: 5240 addq.w #1, D0 ; D0=((-([A5-$6fae] value-([A5-$6fb4] value-((([A5-$6fa5] value&#$ff)*[A5-$6fb4] value)>>8)))<<7)|[A5-$6fb8] value)+1 001F12: 36C0 move.w D0, (A3)+ ; [A5-$78ff] value=((-([A5-$6fae] value-([A5-$6fb4] value-((([A5-$6fa5] value&#$ff)*[A5-$6fb4] value)>>8)))<<7)|[A5-$6fb8] value)+1 001F14: 3004 move.w D4, D0 ; D0=[A5-$6fba] value 001F16: 5340 subq.w #1, D0 ; D0=[A5-$6fba] value-1 001F18: 6B00 000C bmi $1f26 ; if [A5-$6fba] value-1 is negative then skip next 4 steps 001F1C: 323C 0040 move.w #$40, D1 ; else D1=#$40 001F20: 36C1 move.w D1, (A3)+ ; [A5-$78fe] value=[A5-$6fb4] value-((([A5-$6fa5] value&#$ff)*[A5-$6fb4] value)>>8) or [A5-$78fe] value=#$40 001F22: 51C8 FFFC dbra D0, $1f20 ; D0-1, if D0 <> 0 jump back to previous step 001F26: 303C 8401 move.w #$8401, D0 ; D0=#$8401 001F2A: D045 add.w D5, D0 ; D0=(lowest word of ([$4d98+((((old [A7+$56] value|#$80)>>4)&7)*4)] value>>8) value*#$10000)+#$8433 or D0=(lowest word of ([$4d98+((((old [A7+$56] value|#$80)>>4)&7)*4)] value>>8) value*#$10000)+#$84bf 001F2C: 3940 FFFE move.w D0, (-$2,A4) ; send D0 to REG_VRAMADDR 001F30: 322E 000A move.w ($a,A6), D1 ; D1=[A5-$6fb6] value 001F34: 4A2E 001C tst.b ($1c,A6) 001F38: 6700 000E beq $1f48 ; if [A5-$6fa4]=0 then skip next 5 steps 001F3C: 302E 0006 move.w ($6,A6), D0 ; else D0=[A5-$6fba] value 001F40: 5240 addq.w #1, D0 ; D0=[A5-$6fba] value+1 001F42: E948 lsl.w #4, D0 ; D0=([A5-$6fba] value+1)<<4 001F44: 9041 sub.w D1, D0 ; D0=(([A5-$6fba] value+1)<<4)-[A5-$6fb6] value 001F46: 3200 move.w D0, D1 ; D1=(([A5-$6fba] value+1)<<4)-[A5-$6fb6] value 001F48: 102E 001A move.b ($1a,A6), D0 ; D0=[A5-$6fa6] value 001F4C: 6700 000C beq $1f5a ; if [A5-$6fa6] value=0 then skip next 4 steps 001F50: 0240 00FF andi.w #$ff, D0 ; else D0=[A5-$6fa6] value&#$ff 001F54: C1C1 muls.w D1, D0 ; D0=([A5-$6fa6] value&#$ff)*[A5-$6fb6] value or D0=([A5-$6fa6] value&#$ff)*((([A5-$6fba] value+1)<<4)-[A5-$6fb6] value) 001F56: E088 lsr.l #8, D0 ; D0=(([A5-$6fa6] value&#$ff)*[A5-$6fb6] value)>>8 or D0=(([A5-$6fa6] value&#$ff)*((([A5-$6fba] value+1)<<4)-[A5-$6fb6] value))>>8 001F58: 9240 sub.w D0, D1 ; D1=[A5-$6fb6] value-((([A5-$6fa6] value&#$ff)*[A5-$6fb6] value)>>8) or D1=[A5-$6fb6] value-((([A5-$6fa6] value&#$ff)*((([A5-$6fba] value+1)<<4)-[A5-$6fb6] value))>>8) or D1=((([A5-$6fba] value+1)<<4)-[A5-$6fb6] value)-((([A5-$6fa6] value&#$ff)*[A5-$6fb6] value)>>8) or D1=((([A5-$6fba] value+1)<<4)-[A5-$6fb6] value)-((([A5-$6fa6] value&#$ff)*((([A5-$6fba] value+1)<<4)-[A5-$6fb6] value))>>8) 001F5A: 302E 0010 move.w ($10,A6), D0 ; D0=[A5-$6fb0] value 001F5E: 9041 sub.w D1, D0 ; D0=[A5-$6fb0] value-([A5-$6fb6] value-((([A5-$6fa6] value&#$ff)*[A5-$6fb6] value)>>8)) or D0=[A5-$6fb0] value-([A5-$6fb6] value-((([A5-$6fa6] value&#$ff)*((([A5-$6fba] value+1)<<4)-[A5-$6fb6] value))>>8)) or D0=[A5-$6fb0] value-(((([A5-$6fba] value+1)<<4)-[A5-$6fb6] value)-((([A5-$6fa6] value&#$ff)*[A5-$6fb6] value)>>8)) or D0=[A5-$6fb0] value-(((([A5-$6fba] value+1)<<4)-[A5-$6fb6] value)-((([A5-$6fa6] value&#$ff)*((([A5-$6fba] value+1)<<4)-[A5-$6fb6] value))>>8)) or D0=[A5-$6fb0] value-((([A5-$6fba] value+1)<<4)-[A5-$6fb6] value), or... 001F60: EF48 lsl.w #7, D0 001F62: 3880 move.w D0, (A4) 001F64: 4A6E 001A tst.w ($1a,A6) 001F68: 6700 000A beq $1f74 ; if [A5-$6fa6] value=0 then skip next steps 001F6C: 4EBA 001E jsr ($1e,PC) ; ($1f8c) 001F70: 4EFA 0018 jmp ($18,PC) ; ($1f8a) 001F74: 303C 8001 move.w #$8001, D0 ; D0=#$8001 001F78: D045 add.w D5, D0 ; D0=(lowest word of ([$4d98+((((old [A7+$56] value|#$80)>>4)&7)*4)] value>>8) value*#$10000)+#$8033 or D0=(lowest word of ([$4d98+((((old [A7+$56] value|#$80)>>4)&7)*4)] value>>8) value*#$10000)+#$80bf 001F7A: 3940 FFFE move.w D0, (-$2,A4) 001F7E: 3004 move.w D4, D0 ; D0=[A5-$6fba] value 001F80: 323C 0FFF move.w #$fff, D1 ; D1=#$fff 001F84: 3881 move.w D1, (A4) 001F86: 51C8 FFFC dbra D0, $1f84 ; D0-1, if D0 <> 0 jump back to previous step 001F8A: 4E75 rts
avatar

48

001F8C: 303C 8001 move.w #$8001, D0 ; D0=#$8001 001F90: D045 add.w D5, D0 ; D0=(lowest word of ([$4d98+((((old [A7+$56] value|#$80)>>4)&7)*4)] value>>8) value*#$10000)+#$8033 or D0=(lowest word of ([$4d98+((((old [A7+$56] value|#$80)>>4)&7)*4)] value>>8) value*#$10000)+#$80bf 001F92: 3940 FFFE move.w D0, (-$2,A4) ; send D0 to REG_VRAMADDR 001F96: 3E04 move.w D4, D7 ; D7=[A5-$6fba] value 001F98: 7000 moveq #$0, D0 ; D0=0 001F9A: 102E 001A move.b ($1a,A6), D0 ; D0=[A5-$6fa6] value 001F9E: E948 lsl.w #4, D0 ; D0=[A5-$6fa6] value<<4 001FA0: 3400 move.w D0, D2 ; D2=[A5-$6fa6] value<<4 001FA2: 142E 001B move.b ($1b,A6), D2 ; lowest byte of D2=[A5-$6fa5] value 001FA6: 0A42 0FFF eori.w #$fff, D2 ; D2=(high byte of ([A5-$6fa6] value<<4) value+lowest byte of [A5-$6fa5] value)^#$fff 001FAA: 7200 moveq #$0, D1 ; D1=0 001FAC: 3602 move.w D2, D3 ; D3=(high byte of ([A5-$6fa6] value<<4) value+lowest byte of [A5-$6fa5] value)^#$fff 001FAE: D200 add.b D0, D1 ; D1=[A5-$6fa6] value<<4 001FB0: 6400 0006 bcc $1fb8 ; if C flag=0 then skip next step 001FB4: 0443 0100 subi.w #$100, D3 ; else D3=((high byte of ([A5-$6fa6] value<<4) value+lowest byte of [A5-$6fa5] value)^#$fff)-#$100 001FB8: 3883 move.w D3, (A4) 001FBA: 51CF FFF0 dbra D7, $1fac ; D7-1, if D7 <> 0 jump back to $1fac 001FBE: 4E75 rts
avatar

49

02D46A: 1039 0010 FD97 move.b $10fd97.l, D0 ; D0=P1_CHANGE value 02D470: 4A2D 8A00 tst.b (-$7600,A5) 02D474: 6700 0008 beq $2d47e ; if [A5-$7600] value=0 then skip next step 02D478: 1039 0010 FD9D move.b $10fd9d.l, D0 ; else D0=P2_CHANGE value 02D47E: 0800 0005 btst #$5, D0 02D482: 6700 001E beq $2d4a2 ; if (p1e&JOY_B) or (p2e&JOY_B) then skip to $2d4a2 02D486: 4A2E 001A tst.b ($1a,A6) 02D48A: 6700 0016 beq $2d4a2 ; else if [A6+$1a] value=0 then skip to $2d4a2 02D48E: 532E 001A subq.b #1, ($1a,A6) ; else [A6+$1a] value-1 02D492: 7200 moveq #$0, D1 ; D1=0 02D494: 122E 001A move.b ($1a,A6), D1 ; D1=[A6+$1a] value 02D498: 41EE 0016 lea ($16,A6), A0 ; A0=[A6+$16] 02D49C: 11BC 0025 1000 move.b #$25, (A0,D1.w) ; [A6+$16+([A6+$1a] value)] value=#$25 02D4A2: 0800 0004 btst #$4, D0 02D4A6: 6700 007C beq $2d524 ; if (p1e&JOY_A) or (p2e&JOY_A) then skip to $2d524 02D4AA: 303C 01F4 move.w #$1f4, D0 ; else D0=#$1f4 02D4AE: 4EB9 0002 B7F4 jsr $2b7f4.l 02D4B4: 41EE 0016 lea ($16,A6), A0 ; A0=[A6+$16] 02D4B8: 7000 moveq #$0, D0 ; D0=0 02D4BA: 102E 001A move.b ($1a,A6), D0 ; D0=[A6+$1a] value 02D4BE: 7200 moveq #$0, D1 ; D1=0 02D4C0: 122E 001B move.b ($1b,A6), D1 ; D1=[A6+$1b] value 02D4C4: 1181 0000 move.b D1, (A0,D0.w) ; [A6+$16+([A6+$1a] value)] value=[A6+$1b] value 02D4C8: 522E 001A addq.b #1, ($1a,A6) ; [A6+$1a] value+1 02D4CC: 0C2E 0003 001A cmpi.b #$3, ($1a,A6) 02D4D2: 6600 0050 bne $2d524 ; if old [A6+$1a] value+1!=0 then skip to $2d524 02D4D6: 4EBA FF1E jsr (-$e2,PC) ; ($2d3f6) 02D4DA: 6B00 0040 bmi $2d51c ; if D0 value&D0 value is negative then skip to $2d51c 02D4DE: 5340 subq.w #1, D0 ; else D0=(old D0 value&old D0 value)-1 02D4E0: 6B00 0028 bmi $2d50a ; if (old D0 value&old D0 value)-1 is negative then skip to $2d50a 02D4E4: 43ED 804E lea (-$7fb2,A5), A1 ; else A1=[A5-$7fb2] 02D4E8: 45ED 803E lea (-$7fc2,A5), A2 ; A2=[A5-$7fc2] 02D4EC: 236A 0000 0000 move.l ($0,A2), ($0,A1) ; [A5-$7fb2] value=[A5-$7fc2] value 02D4F2: 236A 0004 0004 move.l ($4,A2), ($4,A1) ; [A5-$7fb6] value=[A5-$7fc6] value 02D4F8: 136A 0008 0008 move.b ($8,A2), ($8,A1) ; [A5-$7fbe] value=[A5-$7fce] value 02D4FE: 92FC 0010 suba.w #$10, A1 ; A1=[A5-$7fa2] 02D502: 94FC 0010 suba.w #$10, A2 ; A2=[A5-$7fb2] 02D506: 51C8 FFE4 dbra D0, $2d4ec ; D0-1, if D0 <> 0 jump 4 steps back 02D50A: 216E 0016 0004 move.l ($16,A6), ($4,A0) ; [A0+$4] value=[A6+$16] value 02D510: 216E 0000 0000 move.l ($0,A6), ($0,A0) ; [A0] value=[A6] value 02D516: 116D 8A93 0008 move.b (-$756d,A5), ($8,A0) ; [A0+$8] value=[A5-$756d] value 02D51C: 526E 0010 addq.w #1, ($10,A6) ; [A6+$10] value+1 02D520: 4EFA 002E jmp ($2e,PC) ; ($2d550) 02D524: 303C 002A move.w #$2a, D0 ; D0=#$2a 02D528: D02D 8A00 add.b (-$7600,A5), D0 ; D0=#$2a+[A5-$7600] value 02D52C: 4EB9 0000 41AA jsr $41aa.l 02D532: 303C 1300 move.w #$1300, D0 ; D0=#$1300 02D536: 4EBA 001A jsr ($1a,PC) ; ($2d552) 02D53A: 322D 89F8 move.w (-$7608,A5), D1 ; D1=[A5-$7608] value 02D53E: 7000 moveq #$0, D0 ; D0=0 02D540: 0241 0010 andi.w #$10, D1 ; D1=[A5-$7608] value&#$10 02D544: 6600 0006 bne $2d54c ; if [A5-$7608] value&#$10!=0 then skip next step 02D548: 303C 1300 move.w #$1300, D0 ; else D0=#$1300 02D54C: 4EBA 0056 jsr ($56,PC) ; ($2d5a4) 02D550: 4E75 rts02B7F4: D040 add.w D0, D0 ; D0=#$1f4*2=#$3e8 02B7F6: 3B7B 001E 7102 move.w ($1e,PC,D0.w), ($7102,A5) ; [A5+$7102] value=[$2bbfe] value=#$0 02B7FC: 2F08 move.l A0, -(A7) ; [A7-1]=A0 initial address or [A6+$16] 02B7FE: 41ED 7000 lea ($7000,A5), A0 ; A0=[A5+$7000] 02B802: 7000 moveq #$0, D0 ; D0=0 02B804: 102D 7104 move.b ($7104,A5), D0 ; D0=[A5+$7104] value 02B808: 31AD 7102 0000 move.w ($7102,A5), (A0,D0.w) ; [A5+$7000+([A5+$7104] value)] value=#$0 02B80E: 542D 7104 addq.b #2, ($7104,A5) ; [A5+$7104] value+2 02B812: 205F movea.l (A7)+, A0 ; A0=[old A7 address] 02B814: 4E75 rts02D3F6: 41F9 000F FFFE lea $ffffe.l, A0 ; A0=[$ffffe] 02D3FC: 7004 moveq #$4, D0 ; D0=4 02D3FE: 72FF moveq #-$1, D1 ; D1=-1 02D400: 242E 0000 move.l ($0,A6), D2 ; D2=[A6] value 02D404: 5241 addq.w #1, D1 ; D1=0 02D406: D0FC 0010 adda.w #$10, A0 ; A0=[$ffffe]+#$10 02D40A: B4A8 0000 cmp.l ($0,A0), D2 02D40E: 52C8 FFF4 dbhi D0, $2d404 ; D0-1, if [A6] value>([$ffffe]+#$10) value then skip 2 steps back 02D412: C040 and.w D0, D0 ; I don't understand why it's need to make an AND operation with two same numbers because result value will have no differences from previous value 02D414: 4E75 rts0041AA: C040 and.w D0, D0 ; I don't understand why it's need to make an AND operation with two same numbers because result value will have no differences from previous value 0041AC: 6B00 004C bmi $41fa 0041B0: 522D 8A79 addq.b #1, (-$7587,A5) ; [A5-$7587] value+1 0041B4: E548 lsl.w #2, D0 ; D0=((#$2a+[A5-$7600] value)&(#$2a+[A5-$7600] value))<<4 0041B6: 41F9 0004 C5E0 lea $4c5e0.l, A0 ; A0=[$4c5e0] 0041BC: 4A39 0010 FD83 tst.b $10fd83.l 0041C2: 6700 0008 beq $41cc ; if BIOS_COUNTRY_CODE is Japanese then goto skip next step 0041C6: 41F9 0004 CDF2 lea $4cdf2.l, A0 ; else A0=[$4cdf2] 0041CC: 2070 0000 movea.l (A0,D0.w), A0 ; A0=[$4c5e0+(((#$2a+[A5-$7600] value)&(#$2a+[A5-$7600] value))<<4) value] or A0=[$4cdf2+(((#$2a+[A5-$7600] value)&(#$2a+[A5-$7600] value))<<4) value] 0041D0: 226D 8100 movea.l (-$7f00,A5), A1 ; A1=[$[A5-$7f00] value] 0041D4: 32D8 move.w (A0)+, (A1)+ ; [$[A5-$7f00] value+1] value=[$4c5e1+(((#$2a+[A5-$7600] value)&(#$2a+[A5-$7600] value))<<4) value] value or [$[A5-$7f00] value+1] value=[$4cdf3+(((#$2a+[A5-$7600] value)&(#$2a+[A5-$7600] value))<<4) value] value 0041D6: 6700 0016 beq $41ee ; if [$[A5-$7f00] value+1] value=0 then skip to $41ee 0041DA: 1018 move.b (A0)+, D0 ; else D0=[$4c5e2+(((#$2a+[A5-$7600] value)&(#$2a+[A5-$7600] value))<<4) value] value or D0=[$4cdf4+(((#$2a+[A5-$7600] value)&(#$2a+[A5-$7600] value))<<4) value] value 0041DC: E148 lsl.w #8, D0 ; D0=[$4c5e2+(((#$2a+[A5-$7600] value)&(#$2a+[A5-$7600] value))<<4) value] value<<8 or D0=[$4cdf4+(((#$2a+[A5-$7600] value)&(#$2a+[A5-$7600] value))<<4) value] value<<8 0041DE: 7200 moveq #$0, D1 ; D1=0 0041E0: 1218 move.b (A0)+, D1 ; D1=[$4c5e3+(((#$2a+[A5-$7600] value)&(#$2a+[A5-$7600] value))<<4) value] value or D1=[$4cdf5+(((#$2a+[A5-$7600] value)&(#$2a+[A5-$7600] value))<<4) value] value 0041E2: 32C1 move.w D1, (A1)+ ; [$[A5-$7f00] value+2] value=[$4c5e3+(((#$2a+[A5-$7600] value)&(#$2a+[A5-$7600] value))<<4) value] value or [$[A5-$7f00] value+2] value=[$4cdf5+(((#$2a+[A5-$7600] value)&(#$2a+[A5-$7600] value))<<4) value] value 0041E4: 3298 move.w (A0)+, (A1) ; [$[A5-$7f00] value+2] value=[$4c5e4+(((#$2a+[A5-$7600] value)&(#$2a+[A5-$7600] value))<<4) value] value or [$[A5-$7f00] value+2] value=[$4cdf6+(((#$2a+[A5-$7600] value)&(#$2a+[A5-$7600] value))<<4) value] value 0041E6: 8159 or.w D0, (A1)+ ; [$[A5-$7f00] value+3] value=old [$[A5-$7f00] value+3] value|([$4c5e2+(((#$2a+[A5-$7600] value)&(#$2a+[A5-$7600] value))<<4) value] value<<8) or [$[A5-$7f00] value+3] value=old [$[A5-$7f00] value+3] value|([$4cdf4+(((#$2a+[A5-$7600] value)&(#$2a+[A5-$7600] value))<<4) value] value<<8) 0041E8: 51C9 FFFA dbra D1, $41e4 ; D1-1, if D1 <> 0 jump 1 step back 0041EC: 60E6 bra $41d4 0041EE: 5549 subq.w #2, A1 0041F0: 2B49 8100 move.l A1, (-$7f00,A5) ; [A5-$7f00] value=(old A1 address)-2 0041F4: 532D 8A79 subq.b #1, (-$7587,A5) ; [A5-$7587] value-1 0041F8: 4E75 rts0041FA: 522D 8A79 addq.b #1, (-$7587,A5) ; [A5-$7587] value+1 0041FE: E548 lsl.w #2, D0 ; D0=((#$2a+[A5-$7600] value)&(#$2a+[A5-$7600] value))<<2 004200: 41F9 0004 C5E0 lea $4c5e0.l, A0 ; A0=[$4c5e0] 004206: 2070 0000 movea.l (A0,D0.w), A0 ; A0=[$4c5e0+(((#$2a+[A5-$7600] value)&(#$2a+[A5-$7600] value))<<2)] 00420A: 226D 8100 movea.l (-$7f00,A5), A1 ; A1=[A5-$7f00] 00420E: 32D8 move.w (A0)+, (A1)+ ; [A5-$7eff] value=[$4c5e1+(((#$2a+[A5-$7600] value)&(#$2a+[A5-$7600] value))<<2)] value 004210: 6700 0016 beq $4228 ; if [A5-$7eff] value=0 then skip to $4228 004214: 3218 move.w (A0)+, D1 ; else D1=[$4c5e2+(((#$2a+[A5-$7600] value)&(#$2a+[A5-$7600] value))<<2)] value 004216: 0241 00FF andi.w #$ff, D1 ; D1=[$4c5e2+(((#$2a+[A5-$7600] value)&(#$2a+[A5-$7600] value))<<2)] value&#$ff 00421A: 32C1 move.w D1, (A1)+ ; [A5-$7efe] value=[$4c5e2+(((#$2a+[A5-$7600] value)&(#$2a+[A5-$7600] value))<<2)] value&#$ff 00421C: 32FC 0320 move.w #$320, (A1)+ ; [A5-$7efd] value=#$320 004220: 5448 addq.w #2, A0 ; A0=[$4c5e4+(((#$2a+[A5-$7600] value)&(#$2a+[A5-$7600] value))<<2)] 004222: 51C9 FFF8 dbra D1, $421c ; D1-1, if D1 <> 0 jump 1 step back 004226: 60E6 bra $420e 004228: 5549 subq.w #2, A1 00422A: 2B49 8100 move.l A1, (-$7f00,A5) ; [A5-$7f00] value=[old A1 address]-2 00422E: 532D 8A79 subq.b #1, (-$7587,A5) ; [A5-$7587] value-1 004232: 4E75 rts
avatar

50

02D552: 522D 8A79 addq.b #1, (-$7587,A5) ; [A5-$7587] value+1 02D556: 7C02 moveq #$2, D6 ; D6=2 02D558: 43EE 0016 lea ($16,A6), A1 ; A1=[A6+$16] 02D55C: 2479 0010 0100 movea.l $100100.l, A2 ; A2=[$100100] 02D562: 7200 moveq #$0, D1 ; D1=0 02D564: 1231 6000 move.b (A1,D6.w), D1 ; D1=[A6+$18] value 02D568: 41F9 0002 D604 lea $2d604.l, A0 ; A0=[$2d604] 02D56E: 1030 1000 move.b (A0,D1.w), D0 ; D0=[$2d604+([A6+$18] value)] value 02D572: 41FA 0084 lea ($84,PC) ; ($2d5f8), A0 02D576: 4A2D 8A00 tst.b (-$7600,A5) 02D57A: 6700 0006 beq $2d582 ; if [A5-$7600] value=0 then skip next step 02D57E: D0FC 0006 adda.w #$6, A0 ; A0=[$2d5fe] 02D582: 3206 move.w D6, D1 ; D1=2 02D584: D241 add.w D1, D1 ; D1=4 02D586: D0C1 adda.w D1, A0 ; A0=[$2d602] 02D588: 3210 move.w (A0), D1 ; D1=[$2d602] value=#$73e3 02D58A: 34C1 move.w D1, (A2)+ ; [$100101] value=#$73e3 02D58C: 34FC 0000 move.w #$0, (A2)+ ; [$100102] value=0 02D590: 34C0 move.w D0, (A2)+ ; [$100103] value=[$2d604+([A6+$18] value)] value 02D592: 51CE FFCE dbra D6, $2d562 ; D6-1, if D1 <> 0 jump back to $2d562 02D596: 23CA 0010 0100 move.l A2, $100100.l ; [$100100] value=#$100109 02D59C: 4252 clr.w (A2) ; [#$100109] value=0 02D59E: 532D 8A79 subq.b #1, (-$7587,A5) ; [A5-$7587] value-1 02D5A2: 4E75 rts02D5A4: 522D 8A79 addq.b #1, (-$7587,A5) ; [A5-$7587] value+1 02D5A8: C040 and.w D0, D0 ; D0=0&0=0 or #$1300&#$1300=#$1300 02D5AA: 6600 000A bne $2d5b6 ; if D0=#$1300 then skip next 2 steps 02D5AE: 303C 1320 move.w #$1320, D0 ; else D0=#$1320 02D5B2: 4EFA 000C jmp ($c,PC) ; ($2d5c0) 02D5B6: 7200 moveq #$0, D1 ; D1=0 02D5B8: 122E 001B move.b ($1b,A6), D1 ; D1=[A6+$1b] value 02D5BC: 103B 1046 move.b ($46,PC,D1.w), D0 ; lowest byte of D0=[$2d604+[A6+$1b] value] value 02D5C0: 41FA 0036 lea ($36,PC) ; ($2d5f8), A0 ; A0=[$2d5f8] 02D5C4: 4A2D 8A00 tst.b (-$7600,A5) 02D5C8: 6700 0006 beq $2d5d0 ; if [A5-$7600] value=0 then skip next step 02D5CC: D0FC 0006 adda.w #$6, A0 ; else A0=[$2d5fe] 02D5D0: 7200 moveq #$0, D1 ; D1=0 02D5D2: 122E 001A move.b ($1a,A6), D1 ; D1=[A6+$1a] value 02D5D6: D241 add.w D1, D1 ; D1=[A6+$1a] value*2 02D5D8: D0C1 adda.w D1, A0 ; A0=[$2d5f8+([A6+$1a] value*2)] or [$2d5fe+([A6+$1a] value*2)] 02D5DA: 3210 move.w (A0), D1 ; D1=[$2d5f8+([A6+$1a] value*2)] value or [$2d5fe+([A6+$1a] value*2)] value 02D5DC: 2079 0010 0100 movea.l $100100.l, A0 ; A0=[$100100] 02D5E2: 30C1 move.w D1, (A0)+ ; [$100101] value=[$2d5f8+([A6+$1a] value*2)] value or [$100101] value=[$2d5fe+([A6+$1a] value*2)] value 02D5E4: 30FC 0000 move.w #$0, (A0)+ ; [$100102] value=0 02D5E8: 30C0 move.w D0, (A0)+ ; [$100103] value=#$1300+[$2d604+[A6+$1b] value] value or [$100103] value=#$1320 02D5EA: 23C8 0010 0100 move.l A0, $100100.l ; [$100100] value=#$100103 02D5F0: 4250 clr.w (A0) ; [$100103] value=0 02D5F2: 532D 8A79 subq.b #1, (-$7587,A5) ; [A5-$7587] value-1 02D5F6: 4E75 rts
avatar

51

I want ask anybody here - if exist a special MAME builds with more advanced debugger? I need an a NeoGeo debugger with a various functions which may be very useful for reverse engineering - for example, RAM search like in FCEUX, or remembering of all earlier CPU steps and also back rewinding to one of the previous steps which you need; or something like that.
avatar

52

01F83C: 1039 0010 FD98 move.b $10fd98.l, D0 ; D0=P1_REPEAT value 01F842: 8039 0010 FD9E or.b $10fd9e.l, D0 ; D0=P1_REPEAT value|P2_REPEAT value 01F848: 0240 000F andi.w #$f, D0 ; D0=(P1_REPEAT value|P2_REPEAT value)&#$f 01F84C: 6700 002C beq $1f87a ; if (P1_REPEAT value|P2_REPEAT value)&#$f=0 => neither P1 stick nor P2 stick is active then end the subroutine 01F850: D040 add.w D0, D0 ; else D0=((P1_REPEAT value|P2_REPEAT value)&#$f)*2 01F852: D430 0000 add.b (A0,D0.w), D2 ; D2+[A0+$(((P1_REPEAT value|P2_REPEAT value)&#$f)*2)] value 01F856: 6B00 0022 bmi $1f87a ; if old D2 value+[A0+$(((P1_REPEAT value|P2_REPEAT value)&#$f)*2)] value is negative then end the subroutine 01F85A: 0C02 0011 cmpi.b #$11, D2 01F85E: 6700 001A beq $1f87a ; else if old D2 value+[A0+$(((P1_REPEAT value|P2_REPEAT value)&#$f)*2)] value=#$11 then end the subroutine 01F862: D630 0001 add.b ($1,A0,D0.w), D3 ; else D3+[(A0+1)+(((P1_REPEAT value|P2_REPEAT value)&#$f)*2)] value 01F866: 6B00 0012 bmi $1f87a ; if old D3 value+[(A0+1)+(((P1_REPEAT value|P2_REPEAT value)&#$f)*2)] value is negative then end the subroutine 01F86A: 0C03 000A cmpi.b #$a, D3 01F86E: 6700 000A beq $1f87a ; else if old D3 value+[(A0+1)+(((P1_REPEAT value|P2_REPEAT value)&#$f)*2)] value=#$a then end the subroutine 01F872: 1B42 8D10 move.b D2, (-$72f0,A5) ; else D2=[A5-$72f0] value 01F876: 1B43 8D11 move.b D3, (-$72ef,A5) ; else D3=[A5-$72ef] value 01F87A: 4E75 rts
avatar

53

01F884: 1039 0010 FD98 move.b $10fd98.l, D0 ; D0=P1_REPEAT value 01F88A: 8039 0010 FD9E or.b $10fd9e.l, D0 ; D0=P1_REPEAT value|P2_REPEAT value 01F890: 0240 00F0 andi.w #$f0, D0 ; D0=(P1_REPEAT value|P2_REPEAT value)&#$f0 01F894: 6700 003C beq $1f8d2 ; if (P1_REPEAT value|P2_REPEAT value)&#$f0=0 => neither P1 A/B/C/D buttons nor P2 A/B/C/D buttons is pressed then end the subroutine 01F898: 4A03 tst.b D3 01F89A: 6600 000C bne $1f8a8 ; if D3!=0 then skip next 2 steps 01F89E: 4EB9 0001 F8D4 jsr $1f8d4.l 01F8A4: 6000 002C bra $1f8d2 01F8A8: 0C03 0001 cmpi.b #$1, D3 01F8AC: 6600 000C bne $1f8ba ; if D3!=1 then skip next 2 steps 01F8B0: 4EB9 0001 F8F6 jsr $1f8f6.l 01F8B6: 6000 001A bra $1f8d2 01F8BA: 0C02 0010 cmpi.b #$10, D2 01F8BE: 6600 000C bne $1f8cc ; if D2!=#$10 then skip next 2 steps 01F8C2: 4EB9 0001 F92C jsr $1f92c.l 01F8C8: 6000 0008 bra $1f8d2 01F8CC: 4EB9 0001 F982 jsr $1f982.l 01F8D2: 4E75 rts01F8D4: 0800 0004 btst #$4, D0 01F8D8: 6700 001A beq $1f8f4 ; if 5th bit of ((P1_REPEAT value|P2_REPEAT value)&#$f0) value=0 then end the subroutine 01F8DC: 422D 8D12 clr.b (-$72ee,A5) ; else [A5-$72ee] value=0 01F8E0: 062D 0001 8D13 addi.b #$1, (-$72ed,A5) ; [A5-$72ed] value+1 01F8E6: 0C2D 000D 8D13 cmpi.b #$d, (-$72ed,A5) 01F8EC: 6600 0006 bne $1f8f4 ; if old [A5-$72ed] value+1!=#$d then end the subroutine 01F8F0: 422D 8D13 clr.b (-$72ed,A5) ; else [A5-$72ed]=0 01F8F4: 4E75 rts01F8F6: 0800 0004 btst #$4, D0 01F8FA: 6700 0008 beq $1f904 ; if 5th bit of ((P1_REPEAT value|P2_REPEAT value)&#$f0) value=0 then skip next step 01F8FE: 062D 0001 8D12 addi.b #$1, (-$72ee,A5) ; else [A5-$72ee]+1 01F904: 7000 moveq #$0, D0 ; D0=0 01F906: 102D 8D13 move.b (-$72ed,A5), D0 ; D0=[A5-$72ed] value 01F90A: 41F9 0002 427C lea $2427c.l, A0 ; A0=[$2427c] 01F910: E548 lsl.w #2, D0 ; D0=[A5-$72ed] value<<2 01F912: 2070 0000 movea.l (A0,D0.w), A0 ; A0=[$2427c+([A5-$72ed] value<<2)] 01F916: 7000 moveq #$0, D0 ; D0=0 01F918: 102D 8D12 move.b (-$72ee,A5), D0 ; D0=[A5-$72ee] value 01F91C: E548 lsl.w #2, D0 ; D0=[A5-$72ee] value<<2 01F91E: 2030 0000 move.l (A0,D0.w), D0 ; D0=[($2427c+([A5-$72ed] value<<2))+([A5-$72ee] value<<2)] value 01F922: 6600 0006 bne $1f92a ; if [($2427c+([A5-$72ed] value<<2))+([A5-$72ee] value<<2)] value!=0 then skip next step 01F926: 422D 8D12 clr.b (-$72ee,A5) ; else [A5-$72ee] value=0 01F92A: 4E75 rts01F92C: 7200 moveq #$0, D1 ; D1=0 01F92E: 122D 8D13 move.b (-$72ed,A5), D1 ; D1=[A5-$72ed] value 01F932: 41F9 0002 427C lea $2427c.l, A0 ; A0=[$2427c] 01F938: E549 lsl.w #2, D1 ; D1=[A5-$72ed] value<<2 01F93A: 2070 1000 movea.l (A0,D1.w), A0 ; A0=[$2427c+([A5-$72ed] value<<2)] 01F93E: 7200 moveq #$0, D1 ; D1=0 01F940: 122D 8D12 move.b (-$72ee,A5), D1 ; D1=[A5-$72ee] value 01F944: E549 lsl.w #2, D1 ; D1=[A5-$72ee] value<<2 01F946: 2230 1000 move.l (A0,D1.w), D1 ; D1=[($2427c+([A5-$72ed] value<<2))+([A5-$72ee] value<<2)] value 01F94A: 0281 7FFF FFFF andi.l #$7fffffff, D1 ; D1=[($2427c+([A5-$72ed] value<<2))+([A5-$72ee] value<<2)] value&#$7fffffff 01F950: 2041 movea.l D1, A0 ; A0=[[($2427c+([A5-$72ed] value<<2))+([A5-$72ee] value<<2)] value&#$7fffffff] 01F952: 7200 moveq #$0, D1 ; D1=0 01F954: 122D 8D11 move.b (-$72ef,A5), D1 ; D1=[A5-$72ef] value 01F958: 0401 0002 subi.b #$2, D1 ; D1=[A5-$72ef] value-2 01F95C: E549 lsl.w #2, D1 ; D1=([A5-$72ef] value-2)<<2 01F95E: D0C1 adda.w D1, A0 ; A0=[([($2427c+([A5-$72ed] value<<2))+([A5-$72ee] value<<2)] value&#$7fffffff)+(([A5-$72ef] value-2)<<2)] 01F960: 5448 addq.w #2, A0 ; A0=[([($2427c+([A5-$72ed] value<<2))+([A5-$72ee] value<<2)] value&#$7fffffff)+(([A5-$72ef] value-2)<<2)+2] 01F962: D1FC 0000 0000 adda.l #$0, A0 ; A0=[([($2427c+([A5-$72ed] value<<2))+([A5-$72ee] value<<2)] value&#$7fffffff)+(([A5-$72ef] value-2)<<2)+2] 01F968: 0800 0004 btst #$4, D0 01F96C: 6700 0006 beq $1f974 ; if 5th bit of ((P1_REPEAT value|P2_REPEAT value)&#$f0) value=0 then skip next step 01F970: 0410 0001 subi.b #$1, (A0) ; else [([($2427c+([A5-$72ed] value<<2))+([A5-$72ee] value<<2)] value&#$7fffffff)+(([A5-$72ef] value-2)<<2)+2] value-1 01F974: 0800 0005 btst #$5, D0 01F978: 6700 0006 beq $1f980 ; if 6th bit of ((P1_REPEAT value|P2_REPEAT value)&#$f0) value=0 then end the subroutine 01F97C: 0610 0001 addi.b #$1, (A0) ; else [([($2427c+([A5-$72ed] value<<2))+([A5-$72ee] value<<2)] value&#$7fffffff)+(([A5-$72ef] value-2)<<2)+2] value+1 01F980: 4E75 rts01F982: 0800 0004 btst #$4, D0 01F986: 6700 0052 beq $1f9da ; if 5th bit of ((P1_REPEAT value|P2_REPEAT value)&#$f0) value=0 then end the subroutine 01F98A: 206D 8A0A movea.l (-$75f6,A5), A0 ; else A0=[[A5-$75f6] value] 01F98E: 7200 moveq #$0, D1 ; D1=0 01F990: 122D 8D13 move.b (-$72ed,A5), D1 ; D1=[A5-$72ed] value 01F994: 41F9 0002 427C lea $2427c.l, A0 ; A0=[$2427c] 01F99A: E549 lsl.w #2, D1 ; D1=[A5-$72ed] value<<2 01F99C: 2070 1000 movea.l (A0,D1.w), A0 ; A0=[$2427c+([A5-$72ed] value<<2)] 01F9A0: 7200 moveq #$0, D1 ; D1=0 01F9A2: 122D 8D12 move.b (-$72ee,A5), D1 ; D1=[A5-$72ee] value 01F9A6: E549 lsl.w #2, D1 ; D1=[A5-$72ee] value<<2 01F9A8: 2230 1000 move.l (A0,D1.w), D1 ; D1=[($2427c+([A5-$72ed] value<<2))+([A5-$72ee] value<<2)] value 01F9AC: 0281 7FFF FFFF andi.l #$7fffffff, D1 ; D1=[($2427c+([A5-$72ed] value<<2))+([A5-$72ee] value<<2)] value&#$7fffffff 01F9B2: 2041 movea.l D1, A0 ; A0=[[($2427c+([A5-$72ed] value<<2))+([A5-$72ee] value<<2)] value&#$7fffffff] 01F9B4: 7200 moveq #$0, D1 ; D1=0 01F9B6: 122D 8D11 move.b (-$72ef,A5), D1 ; D1=[A5-$72ef] value 01F9BA: 0401 0002 subi.b #$2, D1 ; D1=[A5-$72ef] value-2 01F9BE: E549 lsl.w #2, D1 ; D1=([A5-$72ef] value-2)<<2 01F9C0: D0C1 adda.w D1, A0 ; A0=[([($2427c+([A5-$72ed] value<<2))+([A5-$72ee] value<<2)] value&#$7fffffff)+(([A5-$72ef] value-2)<<2)] 01F9C2: 3210 move.w (A0), D1 ; D1=[([($2427c+([A5-$72ed] value<<2))+([A5-$72ee] value<<2)] value&#$7fffffff)+(([A5-$72ef] value-2)<<2)] value 01F9C4: D1FC 0000 0000 adda.l #$0, A0 ; A0=[([($2427c+([A5-$72ed] value<<2))+([A5-$72ee] value<<2)] value&#$7fffffff)+(([A5-$72ef] value-2)<<2)] 01F9CA: 363C 8000 move.w #$8000, D3 ; D3=#$8000 01F9CE: 7400 moveq #$0, D2 ; D2=0 01F9D0: 142D 8D10 move.b (-$72f0,A5), D2 ; D2=[A5-$72f0] value 01F9D4: E46B lsr.w D2, D3 ; D3=#$8000>>[A5-$72f0] value 01F9D6: B741 eor.w D3, D1 ; D1=[([($2427c+([A5-$72ed] value<<2))+([A5-$72ee] value<<2)] value&#$7fffffff)+(([A5-$72ef] value-2)<<2)] value^(#$8000>>[A5-$72f0] value) 01F9D8: 3081 move.w D1, (A0) ; [([($2427c+([A5-$72ed] value<<2))+([A5-$72ee] value<<2)] value&#$7fffffff)+(([A5-$72ef] value-2)<<2)] value=[([($2427c+([A5-$72ed] value<<2))+([A5-$72ee] value<<2)] value&#$7fffffff)+(([A5-$72ef] value-2)<<2)] value^(#$8000>>[A5-$72f0] value) 01F9DA: 4E75 rts
avatar

54

01FE98: 43F9 0002 00D8 lea $200d8.l, A1 ; A1=[$200d8] 01FE9E: 1039 0010 FD98 move.b $10fd98.l, D0 ; D0=P1_REPEAT value 01FEA4: 8039 0010 FD9E or.b $10fd9e.l, D0 ; D0=P1_REPEAT value|P2_REPEAT value 01FEAA: 0240 000F andi.w #$f, D0 ; D0=(P1_REPEAT value|P2_REPEAT value)&#$f 01FEAE: 6700 005A beq $1ff0a ; if (P1_REPEAT value|P2_REPEAT value)&#$f=0 => neither P1 stick nor P2 stick is active then end the subroutine 01FEB2: 322D 8D00 move.w (-$7300,A5), D1 ; D1=[A5-$7300] value 01FEB6: 342D 8D02 move.w (-$72fe,A5), D2 ; D2=[A5-$72fe] value 01FEBA: 41ED 8D02 lea (-$72fe,A5), A0 ; A0=[A5-$72fe] 01FEBE: 3A2D 8D0A move.w (-$72f6,A5), D5 ; D5=[A5-$72f6] value 01FEC2: 0C6D 0001 8D00 cmpi.w #$1, (-$7300,A5) 01FEC8: 6300 000E bls $1fed8 ; if [A5-$7300] value<=1 then skip next 3 steps 01FECC: 342D 8D04 move.w (-$72fc,A5), D2 ; D2=[A5-$72fc] value 01FED0: 41ED 8D04 lea (-$72fc,A5), A0 ; A0=[A5-$72fc] 01FED4: 3A2D 8D0C move.w (-$72f4,A5), D5 ; D5=[A5-$72f4] value 01FED8: 7800 moveq #$0, D4 ; D4=0 01FEDA: D040 add.w D0, D0 ; D0=((P1_REPEAT value|P2_REPEAT value)&#$f)*2 01FEDC: 1631 0000 move.b (A1,D0.w), D3 ; D3=[$200d8+(((P1_REPEAT value|P2_REPEAT value)&#$f)*2)] value 01FEE0: 1831 0001 move.b ($1,A1,D0.w), D4 ; D4=[$200d9+(((P1_REPEAT value|P2_REPEAT value)&#$f)*2)] value 01FEE4: 4883 ext.w D3 01FEE6: 4884 ext.w D4 01FEE8: D641 add.w D1, D3 ; D3=[$200d8+(((P1_REPEAT value|P2_REPEAT value)&#$f)*2)] value+[A5-$7300] value 01FEEA: 0243 0003 andi.w #$3, D3 ; D3=([$200d8+(((P1_REPEAT value|P2_REPEAT value)&#$f)*2)] value+[A5-$7300] value)&3 01FEEE: D842 add.w D2, D4 ; D4=[$200d9+(((P1_REPEAT value|P2_REPEAT value)&#$f)*2)] value+[A5-$72fe] value or D4=[$200d9+(((P1_REPEAT value|P2_REPEAT value)&#$f)*2)] value+[A5-$72fc] value 01FEF0: 6A00 000A bpl $1fefc ; if ([$200d9+(((P1_REPEAT value|P2_REPEAT value)&#$f)*2)] value+[A5-$72fe] value) or ([$200d9+(((P1_REPEAT value|P2_REPEAT value)&#$f)*2)] value+[A5-$72fc] value) is positive then skip next 2 steps 01FEF4: 383C 0000 move.w #$0, D4 ; else D4=0 01FEF8: 6000 000A bra $1ff04 01FEFC: B845 cmp.w D5, D4 01FEFE: 6500 0004 bcs $1ff04 ; if C flag=1 as a result of ([$200d9+(((P1_REPEAT value|P2_REPEAT value)&#$f)*2)] value+[A5-$72fe] value)-[A5-$72f6] value, or ([$200d9+(((P1_REPEAT value|P2_REPEAT value)&#$f)*2)] value+[A5-$72fc] value)-[A5-$72f6] value, or ([$200d9+(((P1_REPEAT value|P2_REPEAT value)&#$f)*2)] value+[A5-$72fe] value)-[A5-$72f4] value, or ([$200d9+(((P1_REPEAT value|P2_REPEAT value)&#$f)*2)] value+[A5-$72fc] value)-[A5-$72f4] value then skip next step 01FF02: 3810 move.w (A0), D4 ; else D4=[A5-$72fe] value or [A5-$72fc] value 01FF04: 3B43 8D00 move.w D3, (-$7300,A5) ; [A5-$7300] value=([$200d8+(((P1_REPEAT value|P2_REPEAT value)&#$f)*2)] value+old [A5-$7300] value)&3 01FF08: 3084 move.w D4, (A0) 01FF0A: 4E75 rts
avatar

55

What's going on it this thread... ?

thumb_jackie-chan-wtf-meme-generator-imgflip-48728215.png

56

HPMAN (./55):
What's going on it this thread... ?

thumb_jackie-chan-wtf-meme-generator-imgflip-48728215.png

Nothing new - I still try to learn what processes are happening after successful attack on enemy in kof94 and samsho - how the point of hitmark appearance are being calculated, what tiles the hitmark sprites conist of, what palletes these sprites uses, and how the random selection of punch/kick/something other attack SFX ID works.
avatar

57

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
avatar

58

02D416: 536E 0014 subq.w #1, ($14,A6) 02D41A: 6700 00BA beq $2d4d6 ; if [A6+$14] value-1=0 then skip to $2d4d6 (see by some posts above) 02D41E: 1039 0010 FD98 move.b $10fd98.l, D0 ; else D0=P1_REPEAT value 02D424: 4A2D 8A00 tst.b (-$7600,A5) 02D428: 6700 0008 beq $2d432 ; if [A5-$7600] value=0 then skip next step 02D42C: 1039 0010 FD9E move.b $10fd9e.l, D0 ; else D0=P2_REPEAT value 02D432: 0240 000C andi.w #$c, D0 ; D0=P1\2_REPEAT value&#$c 02D436: 6700 002E beq $2d466 ; if neither P1 nor P2 LEFT/RIGHT joypad position is active then skip to $2d466 02D43A: E448 lsr.w #2, D0 ; D0=(P1\2_REPEAT value&#$c)>>2 02D43C: 0240 0002 andi.w #$2, D0 ; D0=((P1\2_REPEAT value&#$c)>>2)&2 02D440: 0640 FFFF addi.w #-$1, D0 ; D0=(((P1\2_REPEAT value&#$c)>>2)&2)-1 02D444: D02E 001B add.b ($1b,A6), D0 ; D0=((((P1\2_REPEAT value&#$c)>>2)&2)-1)+[A6+$1b] value 02D448: 6A00 0004 bpl $2d44e ; if (((((P1\2_REPEAT value&#$c)>>2)&2)-1)+[A6+$1b] value) value is positive then skip next step 02D44C: 7025 moveq #$25, D0 ; else D0=#$25 02D44E: 0C00 0026 cmpi.b #$26, D0 02D452: 6B00 0004 bmi $2d458 ; if (((((P1\2_REPEAT value&#$c)>>2)&2)-1)+[A6+$1b] value)-#$26 is negative then skip next step 02D456: 7000 moveq #$0, D0 ; else D0=0 02D458: 1D40 001B move.b D0, ($1b,A6) ; [A6+$1b] value=0 or ((((P1\2_REPEAT value&#$c)>>2)&2)-1)+[A6+$1b] value 02D45C: 303C 01F5 move.w #$1f5, D0 ; D0=#$1f5 02D460: 4EB9 0002 B7F4 jsr $2b7f4.l 02D466: 303C 0000 move.w #$0, D0 ; D0=0 <See the code starting from 02D46A further.>
avatar

59

Hi everybody, I finally returned after long absence. As I already said earlier, for Shaman King project role\combat system development I going to make a full reverse engineering of many various RPGs disassembly code to "look under cowling" of this games and learn, how its combat events code are structured on the inside, how calculations of hit chance and/or damage value during attack and of many other things are work. I deceded to begin my research from Pokemon Gold game for GBC.
The ASM file by this link will use to get an updates periodically. If I'll find anything interesting in disassembly, I'll signal to you about it right.
avatar

60

I have some sudden problem - at the latest time I stopped my research at $68b string, where "jp $6545 ($A545 actually, given that switchable ROM bank №2 is selected)" command is located. But if you will look at the strings starting by $A545, you'll see that it's unclear is it a real code or just data section.
avatar