I have a theory but no way to test it. The superfamicom wiki mentions a hazard if both cpus are reading/writing a channel at the same time. All other accesses seem protected by ordering except the main command channel. So if a command is written exactly when the spc reads it, the result may be garbage, leading to a jump to the two highest unpopulated cmdList entries. It would then execute data bytes, eventually hit a brk, and reset itself.
No emulator probably emulates this hazard, though I only checked one bsnes fork source. As for why a reset fixes things, anomie's timing doc says a reset sets a consistent alignment for everything. No mention of the alignment on a cold boot anywhere, so unless someone has better knowledge, the cold boot alignment between the cpu and spc is likely such that it leads to this issue.
So if this theory is correct, the following patch would fix it.
Code:
--- spc700.asm 2018-12-07 17:30:54.711470389 +0200
+++ new 2018-12-07 20:45:41.735369527 +0200
@@ -210,6 +210,8 @@
mainLoop:
lda {CPU0} //read command code, when it is zero (SCMD_NONE), no new command
+ cmp {CPU0}
+ bne mainLoop
+ tay
beq commandDone
sta {CPU0} //set busy flag for CPU by echoing a command code
tay
...which brings me to the testing issues. The code was written for some ancient bass version. The latest bass has changed the syntax completely, making it not at all viable. There's a bass fork with less changed syntax at ARM9's github, but even that version lacks important features the code uses a lot, like local labels; it also has several bugs in its string and hash nall lib. So there's no assembler able to build the code, even with small changes, requiring pretty much a manual rewrite. I don't really feel doing that, especially as then there's issue #2, needing a Borland Windows environment to build the GSS editor with the new code.
Old forum posts say all other assemblers suck. There's a ca65 macro pack newer than those posts, but that would also need a manual rewrite, since there's no spc700 support in da65.
edit: Patch tweak.
edit 2: quote to code tag