Using BSNES (0.60) I've managed to track down what's happening, though I haven't yet figured out why.
After 240 bytes have been transfered (it always happens after 240 bytes regardless of what block size I use) the value that the SPC writes to Port0 fails to get mirrored on the SNES side, so the S-CPU gets stuck in an infinite loop waiting for the SPC to mirror the last value written by the S-CPU.
Here's a trace done with BSNES. I've replaced the SPC output with the actual instructions, since the BSNES debugger only outputs NOPs for the SPC for some reason. The block size I used here was $E0, so that's why Y=$10 when it freezes ($E0+$10 = $F0 = 240 bytes).
Code: Select all
..ffe4 inc y A:ff X:01 Y:0e SP:01ef YA:0eff NvpbhizC
00848d cpy #$00e0 A:000e X:fecf Y:000f S:1ff9 D:0000 DB:00 NvMxdIzC V:230 H:1116
008490 beq $84ab [0084ab] A:000e X:fecf Y:000f S:1ff9 D:0000 DB:00 NvMxdIzc V:230 H:1140
..ffe5 bne $ffda A:ff X:01 Y:0f SP:01ef YA:0fff nvpbhizC
008492 lda [$fd],y [7f00f1] A:000e X:fecf Y:000f S:1ff9 D:0000 DB:00 NvMxdIzc V:230 H:1156
008494 sta $2141 [002141] A:0031 X:fecf Y:000f S:1ff9 D:0000 DB:00 nvMxdIzc V:230 H:1204
008497 tya A:0031 X:fecf Y:000f S:1ff9 D:0000 DB:00 nvMxdIzc V:230 H:1234
..ffda cmp y,Port0 A:ff X:01 Y:0f SP:01ef YA:0fff nvpbhizC
008498 sta $2140 [002140] A:000f X:fecf Y:000f S:1ff9 D:0000 DB:00 nvMxdIzc V:230 H:1248
00849b sta $f1 [0000f1] A:000f X:fecf Y:000f S:1ff9 D:0000 DB:00 nvMxdIzc V:230 H:1278
..ffdc bne $ffe9 A:ff X:01 Y:0f SP:01ef YA:0fff nvpbhiZC
00849d lda $2140 [002140] A:000f X:fecf Y:000f S:1ff9 D:0000 DB:00 nvMxdIzc V:230 H:1302
0084a0 cmp $f1 [0000f1] A:000e X:fecf Y:000f S:1ff9 D:0000 DB:00 nvMxdIzc V:230 H:1332
..ffde mov a,Port1 A:ff X:01 Y:0f SP:01ef YA:0fff nvpbhiZC
0084a2 bne $849d [00849d] A:000e X:fecf Y:000f S:1ff9 D:0000 DB:00 NvMxdIzc V:230 H:1356
00849d lda $2140 [002140] A:000e X:fecf Y:000f S:1ff9 D:0000 DB:00 NvMxdIzc V:231 H: 14
..ffe0 mov Port0,y A:31 X:01 Y:0f SP:01ef YA:0f31 nvpbhizC
0084a0 cmp $f1 [0000f1] A:000e X:fecf Y:000f S:1ff9 D:0000 DB:00 nvMxdIzc V:231 H: 44
0084a2 bne $849d [00849d] A:000e X:fecf Y:000f S:1ff9 D:0000 DB:00 NvMxdIzc V:231 H: 68
00849d lda $2140 [002140] A:000e X:fecf Y:000f S:1ff9 D:0000 DB:00 NvMxdIzc V:231 H: 90
0084a0 cmp $f1 [0000f1] A:000e X:fecf Y:000f S:1ff9 D:0000 DB:00 nvMxdIzc V:231 H: 120
..ffe2 mov [DestAddr]+y,a A:31 X:01 Y:0f SP:01ef YA:0f31 nvpbhizC
0084a2 bne $849d [00849d] A:000e X:fecf Y:000f S:1ff9 D:0000 DB:00 NvMxdIzc V:231 H: 144
00849d lda $2140 [002140] A:000e X:fecf Y:000f S:1ff9 D:0000 DB:00 NvMxdIzc V:231 H: 166
0084a0 cmp $f1 [0000f1] A:000e X:fecf Y:000f S:1ff9 D:0000 DB:00 nvMxdIzc V:231 H: 196
0084a2 bne $849d [00849d] A:000e X:fecf Y:000f S:1ff9 D:0000 DB:00 NvMxdIzc V:231 H: 220
00849d lda $2140 [002140] A:000e X:fecf Y:000f S:1ff9 D:0000 DB:00 NvMxdIzc V:231 H: 242
..ffe4 inc y A:31 X:01 Y:0f SP:01ef YA:0f31 nvpbhizC
0084a0 cmp $f1 [0000f1] A:000e X:fecf Y:000f S:1ff9 D:0000 DB:00 nvMxdIzc V:231 H: 272
0084a2 bne $849d [00849d] A:000e X:fecf Y:000f S:1ff9 D:0000 DB:00 NvMxdIzc V:231 H: 296
..ffe5 bne $ffda A:31 X:01 Y:10 SP:01ef YA:1031 nvpbhizC
00849d lda $2140 [002140] A:000e X:fecf Y:000f S:1ff9 D:0000 DB:00 NvMxdIzc V:231 H: 318
0084a0 cmp $f1 [0000f1] A:000e X:fecf Y:000f S:1ff9 D:0000 DB:00 nvMxdIzc V:231 H: 348
As you can see on the line
..ffe0 mov Port0,y A:31 X:01 Y:0f SP:01ef YA:0f31 nvpbhizC, the SPC actually writes $0f to Port0, but the S-CPU still keeps getting $0e when reading Port0 after that no matter how many times it tries.