Ad a):
The GFX9000 can only be checked by reading/writing some of the registers
of the V9990 via IN/OUT ports. There's no specific ID register available
(as opposed to the V9938/58 both of which have an ID), but you could use
any readable + writable register.
For example: write &HA5 to R#0 (port &H60) and then read R#0 again. If
the read value is &HA5 the V9990 is present.
The drawback of this is that any device that has a readable + writable
register at port &H60 will be recognized as V9990. So it might be better
to use a V9990 specific register, like its status register. For example:
10 OUT &H67,1: ' (release software reset and use overscan mode: MCS=1)
20 A=INP (&H65): ' read V9990 status register
30 A=A AND &H04: ' only read MCS bit (Master Clock Select)
40 IF A<>4 THEN 100: ' MCS=0? Then no V9990 present
50 OUT &H67,0: ' (use non-overscan mode: MCS=0)
60 A=INP (&H65)
70 A=A AND &H04
80 IF A<>0 THEN 100: ' MCS=1? Then no V9990 present
90 PRINT "V9990 found": END
100 PRINT "V9990 not found": END
Another option is to use the V9990 interrupt system (e.g. its line
interrupt). If the interrupt doens't occur within a specific time, the
V9990 is not present.
The interrupt system is the safest way of detection, as the chance is
very very small that some other device has an identical interrupt
system. But I think that the MCS test should be sufficient.
But again, this is not a 'standard' or something. The V9990 has no
standard option for detection.
Ad b):
Very difficult. The Video9000 doesn't have any registers, except for one
at port &H6F. However, this is only a writable register. Reading port
&H6F will always return &HFF.
Because a Video9000 without its RGB input connected to some video source
acts exactly like a GFX9000, the Video9000 can't be detected at all when
the RGB input isn't connected. A non-present video signal overrules the
register &H6F settings completely and the Video9000 can't be accessed in
fact.
Only if the RGB input cable is connected to the MSX computer, the
Video9000 can be detected in a few, rather difficult ways. I only give
the ideas:
One could set the V9938/58 at 60Hz and the V9990 at 50Hz. Then you wait
for a V9990 frame-interrupt (which occurs at the end of each frame
cycle). If this interrupt doesn't occur within 1/50 of a second, the
Video9000 is present, because the V9938/58 is resetting the V9990 frame
cycle, before it has reached the end, and so no interrupt occurs. If an
interrupt is noticed, the Video9000 isn't present.
Another possibility is to make the V9938/58 screen some colour (not
black or white) and digitize this for a short moment (a few screen lines
is sufficient). Then, read the contents of the V9990 VRAM and see if
indeed the V9938/58 colour has been digitized.
I prefer the interrupt type of detection. It's easier to realize and can
be performed with both the V9938/58 and the V9990 screen display
switched off.
Again, this only works if the RGB input connector (SCART or DIN) is
connected to the RGB output of the computer. Detection without the RGB
cable connected to the MSX is not possible.
Ad c):
The official way is to read the OPL4 wavetable register 2. Bits 5-7
contains the OPL4 identification. See OPL4 manual page 14 for more
information.
Nevertheless, Moonblaster for Moonsound doesn't use this option, and
just writes a value to some readable + writable register, recalls this
value and compares it with the original written value. However, this can
be cheated by a device that as a readable + writable register located at
the same port number. Moonblaster is not detecting as it should be.
Using the OPL4 ID is preferred.
Ad d):
The Sunrise IDE interface can be detected by reading the Flash-ROM.
There should be some ID in the Bios. Ask Jon for more information or
perhaps it's mentioned in the IDEtech.txt file.
The other harddisk interfaces I don't know enough about them. So I don't
know. For the BERT interface ask Hans Oranje, for the Novaxis ask Henrik
Gilvad.
Ad e):
I don't know anything about ESE-RAM, so I'm not able to answer the
question for this device.
Greetings
Koen
****
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/)
****