On Wed, Dec 14, 2016 at 2:08 AM, Alexis Kotlowy <[email protected]> wrote: > On 14/12/2016 09:19, Ethan Dicks wrote: >> So far, this loop hangs on all three emulators I've tried - simh's >> altairz80, simcpm010 for AmigaDOS, and EMUZ80 for Raspberry Pi. I'm >> guessing none of these environments emulate specific behavior of the >> Refresh register? >> > > Ethan, > > Have you tried running it on ZEMU?
I have not. Thanks for the suggestion. I don't know which emulators might implement the refresh register. > (Windows only unfortunately, but should run under WINE). That's what it will take - I'm 100% UNIX/Linux (well... plus VAX and PDP-11 and Amiga and PET...) > http://www.z80.info/z80emu.htm#EMU_CPU_W32 > > I tried single stepping through it just now and it looks like it's doing > its job, at least as a possible random number generator. Excellent. I expect it should work. > When was this game written? Perhaps it's supposed to lock up on > emulators that don't emulate the Z80 completely? 1979. Emulators weren't a factor then. > Not knowing what the game is, it could be a copy protection routine too. I don't think so. It's just generating a percentage which it's using for probability. > I can't find any information on what the MSB is set to when the > accumulator is loaded with R, and what the Sign flag is set to. The > datasheet says the Sign and Zero flags are changed by the instruction. > If either of these flags are set, the routine enters an infinite loop. Tony Duell pointed that out too. I suspect that this code works for machines that existed at the time, with 16K DRAMs, and might or might not have worked on later machines. A quick scan of InfoWorld links and such and I can't find any S-100 cards with 4164s older than about 1983. I don't think there were many commercially available 64K DRAMs prior to 1982. -ethan
