Hi all,
Mark (Zellenrath?) <[EMAIL PROTECTED]> wrote:
> The thing is that this problem we (Mayhem) encountered is a little
> more
> complicated. As Maarten wrote we put RAM on all pages (0000h-FFFFh)
> with our own BIOS and interrupt service routine, so in fact we have
> complete control over the machine. The complication lies within the
> following: in R800 mode the PAUSE key does NOT work, but in Z80 mode
> the PAUSE key DOES work. So while the R800 mode hints at a software
> implementation of the PAUSE key, the Z80 mode on the contrary hints
> at a hardware implementation...
> So disabling the PAUSE key can be achieved by simply activating
> the R800
> mode, but sometimes you do not want this and are forced to use the
> Z80 mode (for instance due to the slowed down VDP access in R800
> mode). To our dismay we weren't able to come up with a solution for
> it - I'll admit, it is bit of personal frustration. Anyway, this is
> why you will get an applause if you do succeed in disabling the
> PAUSE key in Z80 mode on a turboR.
I observed something like this myself once. I think it was when
testing 'beta's' of Logi-Bal. The programmer of this had the glorious
idea of presenting somebody pressing a Turbo-R pause button with the
screen starting to work like a set of shifting puzzle-pieces (to
avoid these people figuring out a solution in "0,0" time used).
As far as I know, this wasn't too difficult (I guess the Turbo-R(s)
used being in R800 mode would match with the above), but on MSX2+
machines, the method used didn't work, despite all programming
efforts.
Looking at MSX's from the hardware-point of view, I know these kinds
of complicated functions (a hardware-pause key for a Z80/R800 might
be complicated) depends on the particular hardware used. Some of you
will know, that most (all?) Japanese-built MSX2+ machines, have the
Z80 built into the MSX-engine (T9769, which also includes clockchip,
memory mapper, PSG, slot mechanism, etc.). This same engine is also
used in the Turbo-R (for the included Z80, and other functions
inside). So every machine that is built around this IC, would either
have such a pause key, or it could be easily put in. For instance the
Sanyo Wavy FD2 I have, didn't have it, but had this engine. So, after
I discovered what pin of this controlled it (I found this in the
Turbo-R (!) service manual), I put a pause key in this Wavy FD2
(really easy, and worked as expected).
I'll put this theory here now:
-These Japanese MSX2+ machines (maybe even some MSX2's?) use the
pause function of this T9769 MSX2+ engine, which uses a
hardware-controlled method, and is really hard to disable.
-On the Turbo-R in R800 mode, it is software-controlled, and can be
disabled by making sure that no BIOS interrupt-routine gets in the
way
-On the Turbo-R in Z80 mode, it uses the same method as with the
MSX2+ machines above, and is really hard to disable again.
That would be a clear explanation of everything we heard so far.
So how does this pause key work on the Turbo-R? I don't know, I never
had a Turbo-R, I bought a 486DX2-66 instead :-(
How does this pause key work on these MSX2+'s? For one thing, it's
hardware-controlled. AND I also never found any BIOS routines reading
the state of such a key from some I/O-port or anything. The fact that
it seems to work just about anywhere, anytime also supports this.
It uses only 1 pin of this T9769 MSX2+ engine (/PAUSE, pin 144, right
next to pin 1). If any of you want, I can put a circuit for it
online, so that anyone can put it in a machine with this MSX2+
engine, if that machine hasn't got a pause key.
The function of this key toggles a 'pause state', and works as
follows: press this pause key, and the system pauses, press it again,
and it works on.
Patriek < [EMAIL PROTECTED]> wrote:
> Although I haven't tested this on my turboR I remember reading that one
> shouldn't keep the PAUSE key pressed too long because memory will become
> corrupt in a few seconds. I don't think any MSX have special refresh
> circuitry.
Nope, if paused, memory IS refreshed properly (I think maybe the Z80
in this MSX2+ engine is simply fed NOP's hardware-wise, letting it
properly perform a refresh function. This will probably work the same
on the Turbo-R (Z80 mode), and in R800 mode, the pause state would be
a software loop, not hurting any memory refresh.
Giovanni dos Reis Nunes <[EMAIL PROTECTED]> wrote:
> I know that SONY HB FS-XDJ (MSX2+) and FS-XmkII (MSX2) has a speed
> controler. I call it "fMSX for MSX" :) Using it you can reduce the
> clock speed (ideal for games).
I might be mistaken, but aren't you talking about RenSha-turbo here?
That would be something controlling the speed of an autofire (also
working with the space bar), but NOT doing anything with CPU clock
speed. In fact, I don't think there are ANY MSX-machines that have
hardware for controlling CPU clock speed built in. Not even the
Turbo-R, this thing doesn't change clock speeds, but changes CPU's
instead...
I did figure out this about this MSX2+ hardware-controlled pause: a
Z80 "DI" instruction seems to disable it (jippie! yes! chaka!). I'm
not QUITE sure, check out this piece of code to make sure:
DI
loop:
(some dummy loop, taking up, say, 1 minute of CPU time)
(no use of ANY other piece of hardware in this loop! No VDP, No
I/O-ports, no memory-mapped I/O use!)
EI
RET
Make your MSX2+ (or Turbo-R in Z80 mode?) enter this loop, and after
say, 5 seconds, press the pause key, wait, say 40-50 seconds, then
press it again (get out your stopwatch).
If this pause function worked anyway, you should still have to wait
some 55 seconds after that for the machine to come out of this loop.
If the DI did disable the pause function, the pressing of the pause
key within the loop would be ignored, and you would come out of this
loop right after the 'planned' amount of CPU time is up.
There is one big problem with this: it seems that there are various
low-level hardware-actions that immediately re-enable the pause
function again:
-any VDP access, EVEN if still in "DI" state (damn..)
-Z80 "EI" instruction (regardless of interrupt routines used)
I'm not quite sure about these things either, and maybe there are
more, you'd have to check these out one by one, for anything you plan
on using during a period with pause disabled.
But you see, it might still be possible...
(hope this helps)
Alwin Henseler ([EMAIL PROTECTED])
http://www.twente.nl/~cce/index.htm (computerclub Enschede)
http://huizen.dds.nl/~alwinh/msx (MSX Tech Doc page)
****
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/)
****