> A few of you may recall that I was, some years
ago, working on a
> KA630 emulator [...]
Just out of curiosity, what made you want to tackle
the KA630? I
thought simh already had it covered --
Perhaps it does; perhaps it did, even. When I first started, I _think_
I went and looked and came to the conclusion that simh was identifiably
different from all real hardware VAXen (different SID value or some
such). Perhaps I was mistaken, or perhaps simh has changed in this
respect in the meantime - it's certainly been long enough.
As for why the KA630, it's the VAX implementation I have the most
hardware copies of and the one I know best. It's also a relatively
simple target; for example, the timer hardware (ICCS et al) is about as
rudimentary as it can get and still deserve the name.
As for why do my own implementation, partly because of the above
impression of simh and partly because I have a strong tendency to roll
my own in most cases (a tendency with both positive and negative
aspects, of course). My memory is telling me that simh was difficult
to build for some reason, but that memory is so fuzzy it could very
well be mis-attaching a memory from thing B to (inapproprate) thing A.
I also specifically wanted to do a KA630 simulator accurate enough to
pass the ROM selftests from a real KA630. My impression was that simh
was not faithful at the bug-for-bug level. One of the first things I
ran into was that the KA630 has an instruction prefetch buffer - and
the ROM code depends on being able to execute an instruction out of the
prefetch buffer after turning on MAPEN. I've had to do a number of
such contrivances, things which are (as far as I can tell) not
documented anywhere but which the selftest code depends on. Besides
the prefetch buffer, I've found that the selftest code depends on
sending and receiving characters taking time - and depends on the
apparent fact that, when in loopback, TXCS_RDY is set after, or only a
few instructions before, RXCS_DONE. And that, if both receive and
transmit interrupt conditions are met, the receive interrupt is the one
that's taken. And that the SLU has at least two but no more than four
characters worth of receive FIFO. And that MSER_WRWPAR actually works.
And...you get the idea.
Unfortunately I can't seem to check the simh stuff now. The URL given
on the
trailing-edge.com webpage (sigh!) for modern simh is
https://github.com/simh/simh, which AIUI would lead me to git clone
git://simh.github.com/simh, but
simh.github.com appears to broken, or
behind broken firewalling, or some such: it answers pings but doesn't
answer port-9418 SYNs. Whether it's my misunderstanding of how to
derive the git clone argument or their misbehaving host, I am unable to
clone it at the moment and thus can't look at it.
([...]. I just wanted the personal challenge and fun
of it.)
There's that, too. I greatly enjoy creating software and I've had
great fun hacking on the KA630 simulator so far and expect to enjoy the
further work.
/~\ The ASCII Mouse
\ / Ribbon Campaign
X Against HTML mouse at
rodents-montreal.org
/ \ Email! 7D C8 61 52 5D E7 2D 39 4E F1 31 3E E8 B3 27 4B