On Wed, Dec 14, 2016 at 2:08 AM, Alexis Kotlowy
<thrashbarg at kaput.homeunix.org> 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