ijor, on Mon Mar 19, 2012 8:36 AM, said:
Warp executes code from HW I/O space. This is specifically not supported by Steem. The same "protection" affects one or two other titles. There is (at least) one more bug in Steem, inaccurate CPU emulation, that prevents Warp to run.
Blood Money exposes two slightly different Steem bugs related to wrong handling of bus and address error exceptions.
Right.
Here is what I found so far: Warp writes $60 to PSG reg. Then jumps there ($FF8800) . On real HW then $60FF executes, what makes address error .
In Steem it executes $6060 and jumps, but then makes address or bus error (don't remember at moment which exactly). But address/bus error is not perfect emulated.
So, at least 2 errors.
Blood Money: first error is by jsr (a6) with odd a6. Address error has 2x PC on top of stack instead 1 . Additionally FC bits on stack bottom by address/bus error are not correct always.
Then comes bus error when code writes to $400000 - similar errors in emulation.
I set correct values on stack, according to tests on real STE. And reached loading of third sector, but it loads likely in wrong area . Maybe because some bad value still on stack, maybe there is some DMA emul. problem too ?
It seems that FC (function code) bits are not well emulated in Steem. What may be biggest problem in all this.
I don't think that intention of programmers was to prevent running in emulators (which did not exist around 1990). But to confuse crackers, tracing SW.