• Please review our updated Terms and Rules here

Preserving and exploring Intellec MDS floppy disks

gotcha

Experienced Member
Joined
Mar 7, 2023
Messages
64
Location
Grenoble, French Alps
Hello,

I've dumped a Intellec 8" single sided floppy disk today and I realized that the conversion tool I usually use (HxCFloppyEmulator) is not able to decode the image.
Searching on the net, it appears that these floppies may be encoded as M2FM.

Are you aware of modern tools able to convert a flux format (SCP or other) to a more exploitable format like IMD for instance ?
 
Last edited:
I just came across what seems to do what I need https://github.com/brouhaha/fluxtoimd

It starts from KryoFlux Stream files rather than SCP, and I can easily convert my SCP to this format.
Nevertheless, in my case, it doesn't work out of the box. I have errors that I don't yet understand.

Are there other alternatives to decode raw MDS floppy images ?
 
Last edited:
I don't remember if John finished the decoder in Applesauce. You can always ask him on his discord channel.
Related, I discovered the SMS FWD-8006 multibus board supported Intel MMFM format, one of the few boards
that ever did.
 
Gotcha,
I sent you a DM with a lot of information, and request for a copy of your Image to
test.

I also added the libdsk and Flashfloppy/Definitions to the github site's code as ISSUE.
You will need to add the libdsk definitions to your .libdskrc file, and add the cpmtools
definitions to your cpmtools ~/path/to/your/diskdefs file. then you will need to copy that to the
/usr/local/share file (for Linux).


Linux Terminal code:
Code:
sudo cp ~/path/to/diskdefs/diskdefs /usr/local/share


Larry
 
Last edited:
I don't remember if John finished the decoder in Applesauce. You can always ask him on his discord channel.
Related, I discovered the SMS FWD-8006 multibus board supported Intel MMFM format, one of the few boards
that ever did.
Applesauce should be able to read Intel M2FM format with no issues. Unless senility is setting in, I recall reading both Intel and DEC RX02 M2FM using the device.
 
I just came across what seems to do what I need https://github.com/brouhaha/fluxtoimd

It starts from KryoFlux Stream files rather than SCP, and I can easily convert my SCP to this format.
Nevertheless, in my case, it doesn't work out of the box. I have errors that I don't yet understand.

Are there other alternatives to decode raw MDS floppy images ?
IMD has no notion of flux encoding beyond FM and MFM, so converting the KF stream gets you to something that's unlikely to be useful.
 
For me, the main purpose of creating IMD files is to provide the sector content, along with useful formating information (number of tracks, number of sector per track, interleaving etc...) and sectors in error.

Some information will be missing in the metadata if we want a true preservation format for Intellec/MDS (for instance the 'mode value' indeed only refers to FM and MFM).
But if we want to extract data from the floppy disk, like files, I have the feeling that IMD is still a good format, even for Intellec/MDS floppy disks.
 
Last edited:
Hi Gotcha

As already mentioned, you can find relevant information by contacting the Google Group intel_devsys.

The utilities to handle a series of M2FM 'raw' files (one per track) are the work of Mark Ogden. You can find his disktools at ogdenpm on github. flux2imd takes the 77 'raw' files (or a zip containing these files) and outputs an image in Dunfield's ImageDisk format. unidsk decodes the IMD file and outputs the files/data.

flux2imd builds on the earlier version by brouhaha (Eric Smith).

The 'raw' files can be created with Greaseweazle ('raw' format which corresponds to the Kryoflux format) or Kryoflux. Possibly others such as AppleSauce.

Bear in mind that all Intel 'M2FM' disks are single sided. M2FM is a double density format.

Also, bear in mind that Intel MDS disks in single density encoding CAN be read with conventional disk imaging tools, such as ImageDisk.
 
I searched my Stash of CP/M Files and found a Directory of MDS-800 that has the SSSD and SSDD
*" floppy files along with a ZIPPED file of several images. That list is as follows:

Code:
Fortran-80 Compiler & Runtime Libs V2.0        SD    9500028-02
Fortran-80 Runtime Library V2.0            SD    9500030-02
MCS-86 Software Utilities            SD    9500032-03
PL/M-86 Compiler                SD    9500033-03
ICE-86 V1.2                    SD    9500038-03

ISIS-II Diskette Operating System        DD    9700003-05
PROM Programming Software V2.0                 DD    9700018-03
Universal PROM Mapper V3.2            DD    9700018-05
Intellec Series-II Confidence Test V1.1        DD    9700023-02
Fortran-80 Compiler & Runtime Libs V2.0        DD    9700028-02
Fortran-80 Compiler & Runtime Libs V2.2        DD    9700028-04
MCS-86 Software Support Package    V2.0        DD    9700030-03
MCS-86 ASM86 V2.1                      DD    9700030-06
ICE-86 V1.2                    DD    9700034-03
Multi-ICE Software                          DD    9700046-02
CREDIT CRT-Based Text Editor V1.0        DD    9700049-01

ISIS-II Operating System V4.1 /
        8080/85 Macro Assembler V4.0        DD    123564-001
ICE-85 V2.4                    SD    162107-001
  (Note: Disk seems a bit off. Tracks 1-76 report themselves
         as 0-75)
ICE-85 V2.4                    DD    162108-001

I used the following Definitions for cpmtools and libdsk:
Code:
# cpmtools
Intel MDS/22 - SSDD 8" - 128 x 52
diskdef mds-dd
seclen 128
tracks 77
sectrk 52
blocksize 2048
maxdir 128
skew 0
# skew 6
boottrk 2
os 2.2
end

# libdsk
[mds-dd]
description = Intel MDS/22 - SSDD 8" - 128 x 52
cylinders = 77
heads = 1
secsize = 128
sectors = 52
secbase = 1
datarate = HD

# Flashfloppy/GOTEK
[mds-dd]
cyls = 77
heads = 1
secs = 52
interleave = 6
bps = 128
id = 1
rpm = 360
rate = 125
mode = fm
iam = no

# Intel MDS/22 - SSDD 8" - 128 x 26
diskdef mds-sd
seclen 128
tracks 77
sectrk 26
blocksize 1024
maxdir 64
skew 0
# skew 6
boottrk 2
os 2.2
end

#libdsk
[mds-sd]
description = Intel MDS/22 - SSSD 8" - 128 x 26
cylinders = 77
heads = 1
secsize = 128
sectors = 26
secbase = 1
datarate = HD

# Flashfloppy/GOTEK Definition
[mds-sd]
cyls = 77
heads = 1
secs = 26
interleave = 6
bps = 128
id = 1
rpm = 360
rate = 125
mode = fm
iam = no

I can create an *IMD using libdsk's dskconv.

Code:
$ dskconv -itype raw -otype imd -format mds-dd 9700018-05.img 9700018-05.imd

NOTE:
RAW formats are of three types RAW, RAWOB, RAWOO (applies to 2 Sided Floppy's).


So, libdsk's commands dsktrans & dskconv come in handy. I've loaded the 9700018-05.IMD in HxC
and it appears as a good image.


The other GITHUB Software should be able to access the NON-CP/M files usinf the isisutils file.

Code:
$ ./isis.py -v 9700018-05.imd
filename   attr length link block
---------- ---- ------ ----------
isis.dir   F..I   3200 (  1,  1)
isis.map   F..I    512 (  2,  1)
isis.t0    F..I   2944 (  0, 24)
isis.lab   F..I   6784 (  0, 25)
upm        .P..  13413 (  2,  6)
upm.ov0    .P.I   2736 (  4,  9)
upm.ov1    .P.I   3193 (  4, 32)
upm.ov2    .P.I   2233 (  5,  6)



Larry
 

Attachments

Last edited:
I'm a bit confused. CP/M was initially developped for MDS-800 as I remember.
But I expect the ISIS system to have its own file system and cpmtools should not help much here right ?

On the other side, dskconv seems to provide the Raw->IMD conversion functionality I'm looking for.
 
Hi Gotcha

There is a difference in the encoding of MFM and M2FM. I'm not aware that cpmtools includes support for M2FM encoding - but it would have no problem with FM disks for an Intel MDS-800 or MDS Series II/III.

The initial release of CP/M was issued on a Single Density 8 inch floppy that was set up to run on the MDS-800 without modification. But that required the Single Density floppy controller in the MDS-800 (iSBC-201). The Double Density controller iSBC-202 could not read or write a single density floppy. The MDS-800 had a large number of slots and could accommodate both types of controller.

Gary Kildall had a long-standing relationship with Intel, which may relate to the choice of the MDS-800 as a platform for CP/M. In the period 1976-78, the MDS-800 offered a very capable machine - at a high price.

The early floppy disks issued by Intel had a Product ID starting with 95xxx-xxx for Single Density and 97xxx-xxx for Double Density. Later disks had a six-digit code from 100000.xxx upwards, where xxx referred to the revision number.
 
But, I expect the ISIS system to have its own file system and cpmtools should not help much here right ?

Correct because the directory layout is different. But, if you had some CP/M Images then cpmtools should
allow you to insert/extract the CP/M Files. But, in this case you will be extracting the files with the
isisutil-Master Perl files. It took me a while to locate them. But, they work with all *.IMD files.
So, you can convert the *.img (which are Sector Dumps or *.RAW) into *.IMD files, and extract all
of the files. Don't forget that HxC will also EXPORT lots of different types of files. It comes in VERY
HANDY at times.

Code:
$ ./isis.py -v 9700018-05.imd
filename   attr length link block
---------- ---- ------ ----------
isis.dir   F..I   3200 (  1,  1)
isis.map   F..I    512 (  2,  1)
isis.t0    F..I   2944 (  0, 24)
isis.lab   F..I   6784 (  0, 25)
upm        .P..  13413 (  2,  6)
upm.ov0    .P.I   2736 (  4,  9)
upm.ov1    .P.I   3193 (  4, 32)
upm.ov2    .P.I   2233 (  5,  6)


Looks like you are 100% ready to do some conversions (.img or .raw to .imd) and then file extractions, if needed.

libdsk by John Elliott did work fine, too.


Larry
 

Attachments

Last edited:
$ man diskconv
$ man dsktrans

$ dskconv --help
$ dsktrans --help

$ dskconv -types
$ dsktrans -types

$ dskconv -formats
$ dsktrans -formats

Will help show all possible commands. This depends on how many definitions are in your
.libdskrc file. You can add any definitions you need/require from HERE.


Larry
 
Well, I think I still need to understand few things :)

I managed to compile libdsk that I found on github. (https://github.com/lipro-cpm4l/libdsk/).
Nevertheless, I don't find the mds-dd format. dskconv -formats doesn't list it.

Then:
  1. Is the gihub repo (unofficial apparently) out of date ? It doesn't seem so.
  2. or should I add the mds-dd format definition somewhere, but where ?
Also, @ldkraemer, you give a command example taking an already decoded 'raw' file (.img).
In my case, I have per-track kryoflux flux .raw files. Is it supported by dskconv ? which command line option corresponds to it ?
 
Last edited:
gotcha,
I use John's website for the latest Version. https://www.seasip.info/Unix/LibDsk/

To be able to know what definitions you have in cpmtools you also have to generate the
definitions for libdsk. Those have already been done for you, except the latest ones
for your Image were added to the github site. I also copied you in a direct message and
posting here on VCF. Those definitions go into the .libdskrc file which is under your
/home/user/ folder. In my case for Linux it under /home/Larry/.libdskrc

Code:
$ find . -iname '.libdskrc*'
./.libdskrc

I added these to my .libdskrc file.

Code:
# libdsk
[mds-dd]
description = Intel MDS/22 - SSDD 8" - 128 x 52
cylinders = 77
heads = 1
secsize = 128
sectors = 52
secbase = 1
datarate = HD

# libdsk
[mds-sd]
description = Intel MDS/22 - SSSD 8" - 128 x 26
cylinders = 77
heads = 1
secsize = 128
sectors = 26
secbase = 1
datarate = HD

That takes care of libdsk. For cpmtools, where ever you built the code your 'diskdefs" file
goes there. In my case it's /home/larry/Downloads/cpmtools/cpmtools-2.23/diskdefs

You also may have to edit the definition once in a while to get things working correctly.

Cpmtools comes with a lot of definitions, but you will have the mds-sd & mds-dd.
Then you save the file, and for Linux you MUST copy that same file to /usr/local/share/diskdefs.

Once again you will need to copy the cpmtools updates for mds-sd & mds-dd.

Code:
# Intel MDS/22 - SSDD 8" - 128 x 26
diskdef mds-sd
  seclen 128
  tracks 77
  sectrk 26
  blocksize 1024
  maxdir 64
  skew 0
# skew 6 
  boottrk 2
  os 2.2
end

# Intel MDS/22 - SSDD 8" - 128 x 52
diskdef mds-dd
  seclen 128
  tracks 77
  sectrk 52
  blocksize 2048
  maxdir 128
  skew 0
# skew 6
  boottrk 2
  os 2.2
end

I use
Code:
sudo cp diskdefs /usr/local/share

Then cpmtools will work correctly.

In my case, I have per-track kryoflux flux .raw files. Is it supported by dskconv ? which command line option corresponds to it ?

NO, that will not work, but you can use the perl scripts from that previous utility website to process the Kryoflux files to build the file.
It all depends on how you want to do it.


Larry
 
The utilities to handle a series of M2FM 'raw' files (one per track) are the work of Mark Ogden. You can find his disktools at ogdenpm on github. flux2imd takes the 77 'raw' files (or a zip containing these files) and outputs an image in Dunfield's ImageDisk format. unidsk decodes the IMD file and outputs the files/data.

flux2imd builds on the earlier version by brouhaha (Eric Smith).

I managed to convert the Kryoflux raw files to an imd file thanks to this flux2imd tool available in the github repo.
I had to go under Windows for this, but I can survive :)
Code:
flux2imd.exe -f M2FM8-INTEL intellec-copie-emulateurs.zip

I have an issue with few sectors of the image, but these sectors don't contain useful data, so I should be able to extract files with the current IMD file, without to have to re-dump the floppy.

This flux2imd tool looks solid. It doesn't fail on corrupted sectors and provides a good log.


MDS-floppy.jpg
 
Last edited:
Actually, flux2imd not a script, it's a C application:

The original fluxtoimd is a Python script:
 
Now, I'm trying to explore the IMD image with isis.py (under Linux this time), but it unfortunately fails.

It's maybe because 2 sectors are missing in the floppy disk image. These sectors are not needed, but the tool certainly expects a totally clean image.
I'll check tonight if it works better by repairing the IMD image.

Code:
$ ./isis.py -v ../intellec-copie-emulateurs.imd

Traceback (most recent call last):
  File "/mnt/hgfs/VMShare/prebuilt/isisutils-master/./isis.py", line 159, in <module>
    imd = ImageDisk(args.image)
  File "/mnt/hgfs/VMShare/prebuilt/isisutils-master/imagedisk.py", line 116, in __init__
    self.__read_track(f)
  File "/mnt/hgfs/VMShare/prebuilt/isisutils-master/imagedisk.py", line 89, in __read_track
    assert data_type <= 0x08
AssertionError
 
Last edited:
Back
Top