Hi,
Gee, I'm getting started here! (see my response right before
this one).
To be able to use more and/or bigger drives on MSX, there's
essentially 2 things needed:
-System software (like DOS2, disk/CD-ROM drivers and such) that will
allow access to these
-Applications, that allow USE of these (don't forget about this one!)
For any single application, it's not really too hard: if you want to
make a copy-program a la BK, MultiMente or such, then what's
preventing you from just making one, that supports CD-ROM, Gigabyte
HDD's with FAT16 or FAT32 partitions?
You could use standard DOS2 functions for what's supported by DOS2,
and use your own routines for using those CD-ROM & other goodies.
If you want to copy files back and forth between FAT12 and FAT16
partitions, you could use DOS2 routines for accessing the FAT12
partitions (up to 32 MB), and write your own software for accessing
those other drives. If they're not supported by DOS(1 or 2), it won't
access these drives, it won't access these partitions, and you're
free to do that yourself.
What would you need: an understanding of the disk formats used,
like FAT 16, CD-ROM format(s), etc. And some documentation on the
BIOS routines present in the hardware you'd want to support. This
might turn out difficult already, but I'm sure you can find out what
lowlevel sector/device access routines there are in several of those
IDE/SCSI interfaces, and how to use these. So what's holding you
back?
In essence, this comes down to writing, for some part, a disk
operating system. As I said, in essence, you can simply do this, I
wouldn't see any ESSENTIAL problems here.
But, that would surely be a lot of work. And if you do all that,
wouldn't it be easier to incorporate this into those SCSI/IDE
interfaces, to be used by other programs or utilities, like using any
other drive (like loading CD-ROM files from Basic, using something
like BLOAD "K:\DEMO\UTILS\MSX\DOS304\EXAMPLES\SEETHIS.BIN".
(would be nice if you could do it that way).
The problem here really comes down to this: you could just define
some extra system software. Like those lowlevel sector read/write
routines in SCSI/IDE routines; either they already support other
media on this low level already, or it wouldn't be too big a problem
to add support for these ON THIS LEVEL.
But: can you use these as well using any ordinary program (like that
BLOAD from Basic, or any other DOS program)? There's the main
problem.
On the other hand, there's no problem in extending some of that
existing system software either: define some new DOS calls (plenty
of function numbers left!), add some new bits to a bit pattern
returned by a function call, or increase a maximum drive number
somewhere. The main problem here is the same as above: is existing
software gonna use that, or will it remain invisible for those?
In essence, a problem of compatibility: make it compatible with
existing 'standards', and it will mean having to build in
restrictions, so that you won't quite get what you want (like max. 32
MB. partitions on far bigger drives).
Define some new (either semi-compatible or entirely new) stuff, and
many existing software won't 'see' it, won't be able to use it, and
only a very few new programs might support it. In this way, you
wouldn't quite get what you had hoped for either.
I watched some of the discussion earlier here, and I think the most
important thing missing here, is some overview here:
Someone suggested implementing some extra bits on a 'login vector'
returned by a DOS function call. Yes, this login vector IS defined as
16 bit (I know this for a fact), but: are programs gonna take it as
such? If you would make some extra drives this way, and return a more
than 8 drives present answer on a function call, I would say the
real interesting thing is not wheter it's possible, but far more
interesting is, wheter it's any use to do that.
Maybe there are just one or two programs that actually process those
extra bits, where others will just take 8, making an implementation
of these extra bits useless for those programs.
So what I suggest is this:
Instead of diving into all these details too much, why not do some
research, together (on this mailing-list for instance), to determine
all the options for implementing a next-generation disk operating
system for MSX?
For instance: current systems know a 32 MB. partition limit. Instead
of looking right away for how to extend this, why not look first at
how this limit comes about?
I know, it's a 16-bit sector number used in DOS system software,
combined with a 512 byte sector size. What I mean here: how are these
routines used by programs? IF you would modify these routines to
support more than a 16-bit sector number, how would it affect
existing programs? If you would support for instance 32-bit sector
numbers here, how to handle programs that don't support it? If you
would define a 'new' function call for this, what would the practical
use of this be?
When you take file operations: if I'm not mistaken, file offsets are
defined as a 32-bit value in existing DOS function calls. I'd say,
supporting access to normal files, but up to a 4 GB filesize (2^32)
would be a great step forward. If you would implement a 'file
operating system' that will fully support such files sizes using
existing function calls, how will this affect existing programs?
Would this work okay, or would there be all sorts of problems,
created for instance by programs using mixed sector-I/O and file-I/O?
Instead of looking for solutions for some of these details, why not
do some proper research on the general issues here?
What might be REALLY usefull here is this: an overview of the exact
use that several popular or 'essential' EXISTING software makes of
the existing DOS functions. If you know that a particular SET of
programs only uses a particular set of DOS functions (like memory
locations xxx, and function calls yyy/zz), then you also know that
you can continue to use these programs with 'DOS3', if it would
SOMEHOW implement THAT set of function calls & memory locations.
Instead of wasting time to figure out HOW you could do that, you
could first figure out, WHAT would be needed to implement a 'DOS3'.
What functions would HAVE to be implemented, with what things should
it remain compatible, in order to make it any use?
So, on the other hand, support/implementation of what things could be
dropped, without having every existing program stop to operate?
Why this whole story? Well, simple: why bother making a disassembly
of a DOS2 kernel? You know what happens, when you delete a file on
harddisk, don't you? Some special marker is put into the directory
entry that goes with it, that says: 'deleted file', and the FAT
entries (clusters) that were occupied by that file, are converted
from pointing to next parts of that file, back to 'free'.
You know how a FAT12 disk is organised, you know how to read/write
those sectors using low/level I/O routines. So why bother to figure
out, how exactly this is done by DOS2?
All you REALLY need to know, is how to put such a new DOS together in
such a way, that many existing programs can use it. What memory
locations are 'fixed', and which are free to shift to other places,
or not to use at all in this new disk operating system. So all you
REALLY need to know, is how existing programs use the current
systems. How do they determine what's present (DOS1/DOS2)? What
function calls are used? What memory locations are used? What
assumptions are made?
Instead of debugging your entire software collection, I suggest that
all of you, who would like to participate, find out for THEIR OWN
PRODUCTS, or maybe for one or two of their favourite programs, HOW
these things use the disk system: what system locations are used,
what calls are made, what assumptions were made? Check out some
source codes of some of your own stuff, and make a quick list of ANY
system locations used in relation to disk/file-I/O, and ANYthing that
would have to be in such a new disk system, to make your product
work. If you lost the source, get out your debugger! You still know
roughly how your program works, others don't!
Then, drop your results on this mailing-list, or some volunteer that
collects these results, and after a while, you would get a database,
showing how different programs use the disk system. With that, you
could see in one quick look, what the effect would be, when a certain
modification to the disk system would be made. If you would implement
some higher drive numbers somewhere, with this database you could see
in one look, what programs would support those extra drives, and what
programs wouldn't.
And THEN, it would be far easier, to work on any extensions or
modifications of a disk system. You would know up front, what would
be necessary to make programs xxx (choose any set of favourites)
work, and what would be free to change in a new system.
To conclude: my suggestion here, is to focus any efforts here on the
INTERFACE between existing software, and existing disk system
software. What are the essientials here?
Let's forget about the rest of how these programs work, and let's
forget about how all the details are implemented by disk systems (I
mean, those details that are 'internal'). In other words, let's
figure out, how this INTERFACE works, what is 'external'
('fixed'/'standard') and what is 'internal' (free to change as you
wish) ?
Can we do this?
Greetings,
Alwin Henseler ([EMAIL PROTECTED])
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/)
****