devmiyax / yabause

Yabause is a Sega Saturn emulator and took over as Yaba Sanshiro
http://www.uoyabause.org
GNU General Public License v2.0
207 stars 34 forks source link

sakatusu slow on SnapDragon deviceds #912

Open devmiyax opened 1 year ago

devmiyax commented 1 year ago

SH2 dma done in VBlank-in

02-25 09:43:32.130 16851 17663 D yabause : ***** VIN *****
02-25 09:43:32.131 16851 17682 D yabause : Vdp1DrawEnd
02-25 09:43:32.134 16851 17682 D yabause : VBlankIN(40) IMS=FFFFFF7C at frame 2020:225
02-25 09:43:32.134 16851 17682 D yabause : **** VIN(T) *****
02-25 09:43:32.143 16851 17663 D yabause : Read EDSR 3 line = 225
02-25 09:43:32.143 16851 17663 D yabause : [VDP1] Write VBE=1 line = 225
02-25 09:43:32.143 16851 17663 D yabause : [VDP1] Write FBCR 3 line = 225 @ 0601519E
02-25 09:43:32.144 16851 17663 D yabause : BiosHandleFunc 45
02-25 09:43:32.144 16851 17663 D yabause : BiosGetSh2Interrupt
02-25 09:43:32.144 16851 17663 D yabause : BiosHandleFunc 40
02-25 09:43:32.144 16851 17663 D yabause : BiosSetScuInterrupt. vector = 4B, func = 0600D806
02-25 09:43:32.144 16851 17663 D yabause : BiosHandleFunc 44
02-25 09:43:32.144 16851 17663 D yabause : BiosSetSh2Interrupt
02-25 09:43:32.144 16851 17663 D yabause : [SCU] SucDmaExec src=060EE000,dst=25C00000,size=53248, ra:4/wa:2 flame=2020:231
02-25 09:43:32.144 16851 17663 D yabause : BiosHandleFunc 50
02-25 09:43:32.144 16851 17663 D yabause : BiosSetScuInterruptMask
02-25 09:43:32.144 16851 17663 D yabause : IMS = FFFFFF7C PC=340 frame=2020:231
02-25 09:43:32.144 16851 17663 D yabause : IST = from 2885 to 2804 PC=340 frame=2020:231
02-25 09:43:32.144 16851 17663 D yabause : [SCU] SucDmaExec src=060EE100,dst=25C00100,size=52992, ra:4/wa:2 flame=2020:231
02-25 09:43:32.144 16851 17663 D yabause : [SCU] SucDmaExec src=060EEC60,dst=25C00C60,size=50080, ra:4/wa:2 flame=2020:231
02-25 09:43:32.144 16851 17663 D yabause : [SCU] SucDmaExec src=060EF7A0,dst=25C017A0,size=47200, ra:4/wa:2 flame=2020:231
02-25 09:43:32.144 16851 17663 D yabause : [SH2-M] DMA 0 CHCR Write: CHCR=0x5601(type=1) SAR=0x06027000 DAR=0x25f80000 TCR=0x0090
02-25 09:43:32.144 16851 17663 D yabause : [SH2-M] 0 DMA Exec 0 CHCR=0x5601(type=1) SAR=0x06027000 DAR=0x25f80000 TCR=0x0090 line=231 cpu_cycle_a=100
02-25 09:43:32.144 16851 17663 D yabause : [SH2-M] 0 DMATransfer src=06027000,dst=25F80000,144 type:1 cycle:270
02-25 09:43:32.144 16851 17663 D yabause : [SH2-M] 176 DMATransfer src=06027044,dst=25F80044,110 type:1 cycle:273
02-25 09:43:32.144 16851 17663 D yabause : [SCU] SucDmaExec src=060F0300,dst=25C02300,size=44288, ra:4/wa:2 flame=2020:231
02-25 09:43:32.144 16851 17663 D yabause : [SH2-M] 272 DMATransfer src=06027088,dst=25F80088,76 type:1 cycle:273
02-25 09:43:32.144 16851 17663 D yabause : [SCU] SucDmaExec src=060F0E60,dst=25C02E60,size=41376, ra:4/wa:2 flame=2020:232
02-25 09:43:32.144 16851 17663 D yabause : [SH2-M] 140 DMATransfer src=060270CE,dst=25F800CE,41 type:1 cycle:273
02-25 09:43:32.144 16851 17663 D yabause : [SCU] SucDmaExec src=060F19C0,dst=25C039C0,size=38464, ra:4/wa:2 flame=2020:232
02-25 09:43:32.144 16851 17663 D yabause : [SH2-M] 136 DMATransfer src=06027112,dst=25F80112,7 type:1 cycle:273
02-25 09:43:32.144 16851 17663 D yabause : [SH2-M] 136 DMA finished SAR:0x06027120, DAR:0x25F80120, TCR:0x00000000
02-25 09:43:32.145 16851 17663 D yabause : [SCU] SucDmaExec src=060F2520,dst=25C04520,size=35552, ra:4/wa:2 flame=2020:232
02-25 09:43:32.145 16851 17663 D yabause : [SCU] SucDmaExec src=060F3080,dst=25C05080,size=32640, ra:4/wa:2 flame=2020:232
02-25 09:43:32.145 16851 17663 D yabause : [SCU] SucDmaExec src=060F3BC0,dst=25C05BC0,size=29760, ra:4/wa:2 flame=2020:232
02-25 09:43:32.145 16851 17663 D yabause : [SCU] SucDmaExec src=060F4720,dst=25C06720,size=26848, ra:4/wa:2 flame=2020:232
02-25 09:43:32.145 16851 17663 D yabause : [SCU] SucDmaExec src=060F5280,dst=25C07280,size=23936, ra:4/wa:2 flame=2020:232
02-25 09:43:32.145 16851 17663 D yabause : [SCU] SucDmaExec src=060F5DE0,dst=25C07DE0,size=21024, ra:4/wa:2 flame=2020:232
02-25 09:43:32.145 16851 17663 D yabause : [SCU] SucDmaExec src=060F6940,dst=25C08940,size=18112, ra:4/wa:2 flame=2020:232
02-25 09:43:32.145 16851 17663 D yabause : [SCU] SucDmaExec src=060F74A0,dst=25C094A0,size=15200, ra:4/wa:2 flame=2020:232
02-25 09:43:32.146 16851 17663 D yabause : [SCU] SucDmaExec src=060F7FE0,dst=25C09FE0,size=12320, ra:4/wa:2 flame=2020:233
02-25 09:43:32.146 16851 17663 D yabause : [SCU] SucDmaExec src=060F8B40,dst=25C0AB40,size=9408, ra:4/wa:2 flame=2020:233
02-25 09:43:32.146 16851 17663 D yabause : [SCU] SucDmaExec src=060F96A0,dst=25C0B6A0,size=6496, ra:4/wa:2 flame=2020:233
02-25 09:43:32.146 16851 17663 D yabause : [SCU] SucDmaExec src=060FA200,dst=25C0C200,size=3584, ra:4/wa:2 flame=2020:233
02-25 09:43:32.146 16851 17663 D yabause : [SCU] SucDmaExec src=060FAD60,dst=25C0CD60,size=672, ra:4/wa:2 flame=2020:233
devmiyax commented 1 year ago

Bad SH2 dma is done after VBlank out

02-25 09:46:29.255  5600  6158 D yabause : ***** VIN *****
02-25 09:46:29.257  5600  6168 D yabause : Vdp1DrawEnd
02-25 09:46:29.259  5600  6168 D yabause : VBlankIN(40) IMS=FFFFFF7C at frame 3019:225
02-25 09:46:29.259  5600  6168 D yabause : **** VIN(T) *****
02-25 09:46:29.260  5600  6158 D yabause : Read EDSR 3 line = 225
02-25 09:46:29.260  5600  6158 D yabause : [VDP1] Write VBE=1 line = 225
02-25 09:46:29.260  5600  6158 D yabause : [VDP1] Write FBCR 3 line = 225 @ 060151AA
02-25 09:46:29.260  5600  6158 D yabause : BiosHandleFunc 45
02-25 09:46:29.260  5600  6158 D yabause : BiosGetSh2Interrupt
02-25 09:46:29.260  5600  6158 D yabause : BiosHandleFunc 40
02-25 09:46:29.260  5600  6158 D yabause : BiosSetScuInterrupt. vector = 4B, func = 0600D806
02-25 09:46:29.260  5600  6158 D yabause : BiosHandleFunc 44
02-25 09:46:29.260  5600  6158 D yabause : BiosSetSh2Interrupt
02-25 09:46:29.260  5600  6158 D yabause : [SCU] SucDmaExec src=060EE000,dst=25C00000,size=53248, ra:4/wa:2 flame=3019:231
02-25 09:46:29.260  5600  6158 D yabause : BiosHandleFunc 50
02-25 09:46:29.260  5600  6158 D yabause : BiosSetScuInterruptMask
02-25 09:46:29.260  5600  6158 D yabause : IMS = FFFFFF7C PC=340 frame=3019:231
02-25 09:46:29.260  5600  6158 D yabause : IST = from 2885 to 2804 PC=340 frame=3019:231
02-25 09:46:29.260  5600  6158 D yabause : [SCU] SucDmaExec src=060EE100,dst=25C00100,size=52992, ra:4/wa:2 flame=3019:231
02-25 09:46:29.260  5600  6158 D yabause : [SCU] SucDmaExec src=060EEC60,dst=25C00C60,size=50080, ra:4/wa:2 flame=3019:231
02-25 09:46:29.260  5600  6158 D yabause : [SCU] SucDmaExec src=060EF7C0,dst=25C017C0,size=47168, ra:4/wa:2 flame=3019:231
02-25 09:46:29.261  5600  6158 D yabause : [SCU] SucDmaExec src=060F0320,dst=25C02320,size=44256, ra:4/wa:2 flame=3019:231
02-25 09:46:29.261  5600  6158 D yabause : [SCU] SucDmaExec src=060F0E60,dst=25C02E60,size=41376, ra:4/wa:2 flame=3019:232
02-25 09:46:29.261  5600  6158 D yabause : [SCU] SucDmaExec src=060F19C0,dst=25C039C0,size=38464, ra:4/wa:2 flame=3019:232
02-25 09:46:29.261  5600  6158 D yabause : [SCU] SucDmaExec src=060F2520,dst=25C04520,size=35552, ra:4/wa:2 flame=3019:232
02-25 09:46:29.261  5600  6158 D yabause : [SCU] SucDmaExec src=060F3080,dst=25C05080,size=32640, ra:4/wa:2 flame=3019:232
02-25 09:46:29.261  5600  6158 D yabause : [SCU] SucDmaExec src=060F3BE0,dst=25C05BE0,size=29728, ra:4/wa:2 flame=3019:232
02-25 09:46:29.261  5600  6158 D yabause : [SCU] SucDmaExec src=060F4740,dst=25C06740,size=26816, ra:4/wa:2 flame=3019:232
02-25 09:46:29.261  5600  6158 D yabause : [SCU] SucDmaExec src=060F5280,dst=25C07280,size=23936, ra:4/wa:2 flame=3019:232
02-25 09:46:29.261  5600  6158 D yabause : [SCU] SucDmaExec src=060F5DE0,dst=25C07DE0,size=21024, ra:4/wa:2 flame=3019:232
02-25 09:46:29.262  5600  6158 D yabause : [SCU] SucDmaExec src=060F6940,dst=25C08940,size=18112, ra:4/wa:2 flame=3019:232
02-25 09:46:29.262  5600  6158 D yabause : [SCU] SucDmaExec src=060F74A0,dst=25C094A0,size=15200, ra:4/wa:2 flame=3019:232
02-25 09:46:29.262  5600  6158 D yabause : [SCU] SucDmaExec src=060F8000,dst=25C0A000,size=12288, ra:4/wa:2 flame=3019:233
02-25 09:46:29.262  5600  6158 D yabause : [SCU] SucDmaExec src=060F8B60,dst=25C0AB60,size=9376, ra:4/wa:2 flame=3019:233
02-25 09:46:29.262  5600  6158 D yabause : [SCU] SucDmaExec src=060F96A0,dst=25C0B6A0,size=6496, ra:4/wa:2 flame=3019:233
02-25 09:46:29.262  5600  6158 D yabause : [SCU] SucDmaExec src=060FA200,dst=25C0C200,size=3584, ra:4/wa:2 flame=3019:233
02-25 09:46:29.262  5600  6158 D yabause : [SCU] SucDmaExec src=060FAD60,dst=25C0CD60,size=672, ra:4/wa:2 flame=3019:233
02-25 09:46:29.262  5600  6158 D yabause : ***** VOUT 3019 *****
02-25 09:46:29.262  5600  6158 D yabause : VBlankOUT(41) IMS=FFFFFF7C at frame 3019:263
02-25 09:46:29.262  5600  6158 D yabause : [SH2-M] DMA 0 CHCR Write: CHCR=0x5601(type=1) SAR=0x06027000 DAR=0x25f80000 TCR=0x0090
02-25 09:46:29.262  5600  6158 D yabause : [SH2-M] 152 DMA Exec 0 CHCR=0x5601(type=1) SAR=0x06027000 DAR=0x25f80000 TCR=0x0090 line=1 cpu_cycle_a=100
02-25 09:46:29.262  5600  6158 D yabause : [SH2-M] 152 DMATransfer src=06027000,dst=25F80000,144 type:1 cycle:270
02-25 09:46:29.263  5600  6158 D yabause : [SH2-M] 184 DMATransfer src=06027044,dst=25F80044,110 type:1 cycle:273
02-25 09:46:29.263  5600  6158 D yabause : [SH2-M] 272 DMATransfer src=06027088,dst=25F80088,76 type:1 cycle:273
02-25 09:46:29.263  5600  6158 D yabause : [SH2-M] 140 DMATransfer src=060270CE,dst=25F800CE,41 type:1 cycle:270
02-25 09:46:29.263  5600  6158 D yabause : [SH2-M] 132 DMATransfer src=06027110,dst=25F80110,8 type:1 cycle:273
02-25 09:46:29.263  5600  6158 D yabause : [SH2-M] 132 DMA finished SAR:0x06027120, DAR:0x25F80120, TCR:0x00000000
devmiyax commented 1 year ago

Good pattern SH2 DMA is done in VBalnk in every frame.

0x06007C92: mov.l r4, @r5 => ここでSH2のDMAを発動 0x06007C90: rts 0x06007C8E: or r3, r4 0x06007C8C: mov.l @r5, r4 0x06007C8A: mov #0x01, r3 0x06007C88: add #0x8C, r5 0x06007C86: shll2 r5 0x06007C84: shll2 r5

0x06007C82: mov r4, r5

0x06004264: mov #0x00, r4 0x06004262: jsr @r2 0x06004260: mov.l @(0x030, pc), r2 ; 0x06004290

0x06007C80: nop 0x06007C7E: rts 0x06007C66: bf 0x06007C7E 0x06007C64: cmp/eq r6, r3 => 0x100 のフラグが立つことを期待 0x06007C62: and r6, r3 0x06007C60: mov.l @(0x024, r4), r3 => R4 06001F80 0x06007C5E: mov.w @(0x07E, pc), r6 ; 0x06007CDC

devmiyax commented 1 year ago

check when (06001F80 + 0x24) is wrtten

devmiyax commented 1 year ago

失敗時はVOUTで06001FA4の書き込みが行われる

IMS = FFFFFF7C PC=340 frame=151:230 IST = from 2885 to 2804 PC=340 frame=151:230 [SCU] SucDmaExec src=060EE100,dst=25C00100,size=52992, ra:4/wa:2 flame=151:230 [SCU] SucDmaExec src=060EEC60,dst=25C00C60,size=50080, ra:4/wa:2 flame=151:230 [SCU] SucDmaExec src=060EF7C0,dst=25C017C0,size=47168, ra:4/wa:2 flame=151:231 [SCU] SucDmaExec src=060F0320,dst=25C02320,size=44256, ra:4/wa:2 flame=151:231 [SCU] SucDmaExec src=060F0E80,dst=25C02E80,size=41344, ra:4/wa:2 flame=151:231 [SCU] SucDmaExec src=060F19E0,dst=25C039E0,size=38432, ra:4/wa:2 flame=151:231 [SCU] SucDmaExec src=060F2520,dst=25C04520,size=35552, ra:4/wa:2 flame=151:231 [SCU] SucDmaExec src=060F3080,dst=25C05080,size=32640, ra:4/wa:2 flame=151:231 [SCU] SucDmaExec src=060F3BE0,dst=25C05BE0,size=29728, ra:4/wa:2 flame=151:231 [SCU] SucDmaExec src=060F4740,dst=25C06740,size=26816, ra:4/wa:2 flame=151:231 [SCU] SucDmaExec src=060F52A0,dst=25C072A0,size=23904, ra:4/wa:2 flame=151:231 [SCU] SucDmaExec src=060F5E00,dst=25C07E00,size=20992, ra:4/wa:2 flame=151:231 [SCU] SucDmaExec src=060F6940,dst=25C08940,size=18112, ra:4/wa:2 flame=151:232 [SCU] SucDmaExec src=060F74A0,dst=25C094A0,size=15200, ra:4/wa:2 flame=151:232 [SCU] SucDmaExec src=060F8000,dst=25C0A000,size=12288, ra:4/wa:2 flame=151:232 [SCU] SucDmaExec src=060F8B60,dst=25C0AB60,size=9376, ra:4/wa:2 flame=151:232 [SCU] SucDmaExec src=060F96C0,dst=25C0B6C0,size=6464, ra:4/wa:2 flame=151:232 [SCU] SucDmaExec src=060FA200,dst=25C0C200,size=3584, ra:4/wa:2 flame=151:232 [SCU] SucDmaExec src=060FAD60,dst=25C0CD60,size=672, ra:4/wa:2 flame=151:232 VOUT 224 [SH2-M] 1799 Cache Write 4 PC=0600425A addr=06001FA4 val=000002FF [SH2-M] 1803+0 Read 4-byte 000002ff from 06001fa4 PC=06007BA4 frame=152:0 [SH2-M] 1814+0 Read 4-byte 000002ff from 06001fa4 PC=06007BBC frame=152:0 [SH2-M] 1823+0 Read 4-byte 000002ff from 06001fa4 PC=06007BD0 frame=152:1 [SH2-M] 1832+0 Read 4-byte 000002ff from 06001fa4 PC=06007BE4 frame=152:1 [SH2-M] 1861+0 Read 4-byte 000002ff from 06001fa4 PC=06007BFE frame=152:1 [SH2-M] 1865+0 Read 4-byte 000002ff from 06001fa4 PC=06007C06 frame=152:1 [SH2-M] 1892+0 Read 4-byte 000002ff from 06001fa4 PC=06007C1C frame=152:1 [SH2-M] 1904+0 Read 4-byte 000002ff from 06001fa4 PC=06007C34 frame=152:1 [SH2-M] 1918+0 Read 4-byte 000002ff from 06001fa4 PC=06007C50 frame=152:1 [SH2-M] 1925+0 Read 4-byte 000002ff from 06001fa4 PC=06007C60 frame=152:1

成功時は VBlank inで行われる

[SCU] SucDmaExec src=060EE100,dst=25C00100,size=52992, ra:4/wa:2 flame=293:230 [SCU] SucDmaExec src=060EEC40,dst=25C00C40,size=50112, ra:4/wa:2 flame=293:230 [SH2-M] 419455 Cache Write 4 PC=0600425A addr=06001FA4 val=000002FF [SH2-M] 419459+0 Read 4-byte 000002ff from 06001fa4 PC=06007BA4 frame=293:230 [SH2-M] 419470+0 Read 4-byte 000002ff from 06001fa4 PC=06007BBC frame=293:230 [SH2-M] 419479+0 Read 4-byte 000002ff from 06001fa4 PC=06007BD0 frame=293:230 [SH2-M] 419488+0 Read 4-byte 000002ff from 06001fa4 PC=06007BE4 frame=293:230 [SH2-M] 419517+0 Read 4-byte 000002ff from 06001fa4 PC=06007BFE frame=293:230 [SH2-M] 419521+0 Read 4-byte 000002ff from 06001fa4 PC=06007C06 frame=293:230 [SH2-M] 419548+0 Read 4-byte 000002ff from 06001fa4 PC=06007C1C frame=293:230 [SH2-M] 419560+0 Read 4-byte 000002ff from 06001fa4 PC=06007C34 frame=293:230 [SH2-M] 419574+0 Read 4-byte 000002ff from 06001fa4 PC=06007C50 frame=293:230 [SH2-M] 419581+0 Read 4-byte 000002ff from 06001fa4 PC=06007C60 frame=293:230 [SH2-M] DMA 0 CHCR Write: CHCR=0x5601(type=1) SAR=0x06027000 DAR=0x25f80000 TCR=0x0090

devmiyax commented 1 year ago

0x06004258: mov.l @(0x034, pc), r3 ; 0x0600428C 0x06004256: mov.w @(0x02A, pc), r2 ; 0x06004280 0x06004254: mov.l r3, @(0x028, r15) 0x06004252: mov r3, r5 0x06004250: mov.l r2, @(0x024, r15) 0x0600424E: mov #0x00, r3 0x0600424C: mov.w @(0x032, pc), r2 ; 0x0600427E 0x0600424A: mov.l r3, @(0x020, r15) 0x06004248: mov.w @(0x034, pc), r3 ; 0x0600427C 0x06004246: mov.l r14, @(0x01C, r15) 0x06004244: mov.l r14, @(0x018, r15) 0x06004242: mov.l r2, @(0x014, r15) 0x06004240: mov.l @r15, r2 0x0600423E: mov.l r3, @(0x010, r15) 0x0600423C: mov.l @(0x004, r15), r3 0x0600423A: add #0x0C, r4 0x06004238: mov.l r2, @(0x00C, r15) 0x06004236: mov r15, r4 0x06004234: mov.l @(0x008, r15), r2

0x06007BA2: mov.l r5, @r6 0x06007BA0: rts 0x06007B9E: and r2, r5 0x06007B9C: mov #0xFD, r2 0x06007B9A: bf 0x06007BA0 0x06007B98: cmp/eq r7, r2 0x06007B96: and r7, r2 0x06007B94: mov.l @(0x008, r4), r2 <== 0x06001FA8 + 0x08 0x06007B92: and r3, r5 0x06007B90: mov #0xFB, r3 0x06007B8E: mov #0x04, r7

devmiyax commented 1 year ago

失敗時は 0x0603A090 には到達しているが、06017EEAには到達していない

devmiyax commented 1 year ago

image

devmiyax commented 1 year ago

Bad 060146F4 0x060147B4 = 06016706

devmiyax commented 1 year ago

Some one write 0x060166b6 at 0x060147B4

devmiyax commented 1 year ago

J. League Pro Soccer Club o Tsukurou! (Japan).chd OK J. League Pro Soccer Club o Tsukurou! 2 (Japan) (1M).chd OK J. League Pro Soccer Club o Tsukurou! 2 (Japan) (3M).chd OK J. League Pro Soccer Club o Tsukurou! 2 (Japan) (4M).chd OK J. League Pro Soccer Club o Tsukurou! 2 (Japan) (Rev C) (32M).chd BAD J. League Pro Soccer Club o Tsukurou! 2 (Japan) (Rev D) (41M).chd BAD