Hi! |
A|A
(n n)
\_/
I've been away from this list for a long time (due to personal
problems that are not worth explaining). Anyway, I'm reading the
old EMs (I'm about middle of January, now - yes, there is a lot yet
to go...) But before discussing anything, I have a problem: someone
said the third disk of "Aleste 2" at Funet is corrupted and asked
me my version (I've finished it and it is okay). Unfortunately,
I don't know who asked me it (I have an idea, but I must be sure
before sending a 245KB long file through EM - which will become
far larger when the system will get it into 6 bits). Oh, yes,
he also asked for a working copy of "Vaxol". "Who are you?"
Okay, that's enough about it. Hm... Ah, it is "Cyndi", not
"Cindy", okay? Yes, a comprehensible error (I used to stumble
at it, too). "Old fashioned superstitions..."
I have F-1 Spirit CD. It comes with OGS (Original Game Sound)
of both "F-1 Spirit" and "F-1 Spirit 3D Special". Personally, I
found the "F-1 Spirit" musics far better than the "3D Special".
More details about it can be found in my Page, which contains
data of almost all of my CDs (there are a few not yet catalogued),
including all my MSX and arcade albums. My Page is at
"http://welcome.to/unicorndreams". Unfortunatelly, that album
is not produced for a long time, now. Maybe people can find
used disks, pirate copies or even MP3 (argh!) files of it...
Older subject: someone asked "why not `segment registers'?"
As far as I could read (it comes a point when you cannot bear the
hard language anymore), no one answered to the question (they all
just shout at the poor soul, "BECAUSE IT IS BAAAD...") I think I
can answer better than that. Well, this is the last subject of
this letter, so, if you already know why NOT to use segment
registers, go to the next EM, because you should know, by now,
that the answer is long. Take the popcorn (no salt for me...)
A long time ago, in this same galaxy, IC production was
expensive, because it was the state-of-the-art, experimental,
pure art. It comes that one ought to economize transistors in
its project if it wanted it to be "purchasable". Thus, the
first CPUs were limited to small datum and address buses.
As the hunger for memory grew with improvement of computer
science (and computer geeks in their gadget-filled rooms), the
CPUs got to have more lines in their address buses. New CPUs
appeared every day as the technology made IC manufacturing
cheaper (demand lowers prices, when you remove the politicians
from the game). And each and every CPU was incompatible with
any other one (even in the same IC "family"). One of the
causes for incompatibility was that about the size of the
buses. For example, an instruction that loads a byte from a
direct address won't be the same in a CPU with address bus
of 16 bits and another of 24 bits, like "Load A,(12CFH)"
(16 bits) and "Load A,(0012CFH)" (24 bits - it requires
1 extra byte in the instruction to determine the address).
There were many solutions for this specific problem. One,
adopted by Motorola, was to build the CPU with larger internal
buses, so it could be expanded externally if required (the
68000 family ever had a 32 bits internal structure, though
the external buses could even be 8 bits). Intel solved the
problem earlier, adopting the "segment registers". The segment
register works exactly like the MegaROM or Memory Mapper in
MSX, it selects which memory block will be accessible at a
time. MSX has many memory segment registers, so several blocks
can be made active at the same time. Intel CPUs have one
for the executing program and another for the data they are
accessing. They work like "mobile windows" to the program: it
can only "see" (access) what is in front of a "window" (segment
visibility range).
It would be a wonderful feature if those registers could be
set at any position and with any size, but, of course, that's
not it. The designers didn't use the segment registers to expand
an existing CPU, they used it to create a new CPU, one that
didn't need a large and expensive internal bus (that is, they
used segmentation to solve another problem, the price). So, a
CPU that could only access, for example, 64KB, magically gained
access to a multiple of that value, just like MSX with its
memory expanders. To make the whole thing cheaper, they didn't
allow the registers to be set at any position, but at 16 byte
intervals (that is, the granularity is 16 bytes). In MSX MegaROM,
the granularity may be 8KB or 16KB and in Memory Mapper, always
16KB. "All that!? So why complain about Intel's segmentation?"
Because Intel's CPU was a new one, forged that bad to make it
cheaper, incompatible with any other previous CPU. It was not
necessity, like in MSX, but greed that brought it out of the sands.
Of course, the "maxima culpa" falls upon those that adopted it as
CPU of anything.
"But still, what is the problem with segment registers?"
Simple: no one puts segment registers in something if it is not
planning to remove flexibility of access, or in the short range,
bring trouble to the programmers. If you had a CPU with 64 bits
address bus (internal AND external) AND segment registers, it
would be expensive and undoubtely more flexible than any other
available. But no "maker" will give you that. If there are
segment registers, you can be sure that the granularity won't
be 1 (total freedom of selection). If you have instructions for
"relative address access" (indexes, branches, calls etc.), then
there are very few use for a segment register, even one with
granularity 1. And if someone, for whatever reason in this or
any other world, insists in using segmented access CPUs today
with so many cheap and powerful ones available, all with
linear and fast buses, it should be buried till the knees...
head-over-heels... in the sands of Arrakis!
And then we have MSX. What to do with it? Removing
segmentation would mean destruction of the host, or in other
words, is segmentation essential to MSX? The way it is
today, yes, it is a necessary bad-tasting remedy. With
segmentation, you cannot easily copy data from one segment
to another, but that's the current configuration of most
users' machines (except, maybe, for one or another super
MSX prototype). A party of users doesn't let the Z80 go;
another party would like to through it all away and emulate
everything. I really think both are wrong, at least, partially.
A new MSX, to be worth it, must be compatible with previous
machines (in soft AND hardware), but more than that, it must
allow evolution (or we would be discussing "how to make
MSX4" in the next century). Take a new CPU, a good one (without
segmentation, please, and CMOS technology, not an Intel hybrid)
and "blend" it into an existing MSX. So, by executing a simple
operation, one could shift from one CPU to another (this is the
part the Z80-stickies don't like, to have the Z80 to be "knocked
out", but it must be, and it actually is in turbo R), without
losing control of any PHYSICAL peripheral (this is the part that
the emulator-lovers are disregarding). Thus, all CPUs could access
all resources, concorrently. By the way, if the new MSX would
have to keep an R800 inside or not is a secondary matter, if one
cannot get the original from Japan ASCII, then let it become a
collector's piece (emulate it, why not, if there would be no other
way...) Indeed, if one could make a PERFECT simulator (soft AND
hardware), it wouldn't really be necessary any hardware. Fortunately
for the orthodox users, no simulation is perfect (maybe if one could
simulate each and every transistor of a CPU...). Today, real hardware
IS required (as a programmer, I would curse the makers if random
pixels would flick unexpectedly at reaching an unimplemented function
of an emulator). About MSX, I'm the kind that is only contented with
the plain, simple and undeniable "perfect", anything less than perfect
is just a curious toy (how can someone listen to a poor Sound Blaster
and not wonder "it never sounded that bad in my MSX...") Some toys
may be useful, of course, but that's another story...
... Cyberknight...
<Segmentation fault - Back up often...>
****
MSX Mailinglist. To unsubscribe, send an email to [EMAIL PROTECTED] and put
in the body (not subject) "unsubscribe msx [EMAIL PROTECTED]" (without the
quotes :-) Problems? contact [EMAIL PROTECTED] (www.stack.nl/~wiebe/mailinglist/)
****