
I use DOSBox with the Imagedisk Ver 1.19 Utilities TD02IMD, IMDA, and IMDU to extract the .RAW and .TXT
files for all the *.TD0, and *.IMD files.

NOTE: some filenames are greater than 8 characters, so I used a script a2.sh to copy the longfilenames
to shorter versions.  This makes the Batch files work corectly.

a2.sh
[code]#!/bin/bash
# Proper header for a Bash script.
# sst <pattern> <path>
# Search for pattern within zip files while recursively searching
# down a directory tree starting from the passed directory path.
#
# examples: ./sst teledisk.exe /home/larry/Downloads
# Wildcards are valid.....
# ./sst "CN-6655*" /home/larry
# ./sst "CN-66*" /home/larry
#
# You may need to add the following test!
# Run as root, of course.
# Insert code here to print error message and exit if not root.
# clear

cp 380Z_Wordstar_3.0.IMD WORDSTR3.IMD
cp 380Z_WRI.IMD WRI.IMD
cp 380Z_UNK_5A.IMD UNK_5A.IMD
cp 380Z_UNK1.IMD UNK1.IMD
cp 380Z_SMILED.IMD SMILED.IMD
cp 380Z_SMILE.IMD SMILE.IMD
cp 380Z_RML_CPM22C.IMD CPM22C.IMD
cp 380Z_QUEST.IMD QUEST.IMD
cp 380Z_MOSAIC.IMD MOSAIC.IMD
cp 380ZMULT.IMD MULT.IMD
cp 380ZDS8.IMD DS8.IMD
cp 380ZDS6B.IMD DS6B.IMD
cp 380ZDS6A.IMD DS6A.IMD
cp 380ZCPME.IMD CPME.IMD
cp 380ZBAS5.IMD BAS5.IMD
cp 380DDWRI.IMD DDWRI.IMD

cp 480Z_PRIMAR.IMD PRIMAR.IMD
cp 480Z_ARROW.IMD ARROW.IMD
cp 480Z_80.IMD 80.IMD
cp 480Z_40.IMD 40.IMD
cp 480ZWELC.IMD WELC.IMD
cp 480ZSYSQ.IMD SYSQ.IMD
cp 480ZSYSD.IMD SYSD.IMD
cp 480ZSYS.IMD SYS.IMD
cp 480ZSSSD.IMD SSSD.IMD
cp 480ZSHRD.IMD SHRD.IMD
cp 480ZSD4.IMD SD4.IMD
cp 480ZSD3.IMD SD3.IMD
cp 480ZSD2.IMD SD2.IMD
cp 480ZSD1.IMD SD1.IMD
cp 480ZDSQD.IMD DSQD.IMD
cp 480ZDSDD.IMD DSDD.IMD
cp 480ZBOOT.IMD BOOT.IMD
cp 480ZBAS.IMD BAS.IMD

echo
echo "exiting the script."
echo

exit # The right and proper method of "exiting" from a script.
[/code]



I used the two Batch files A1.BAT and A2.BAT to process the *.TD0 or *.IMD files and extract
the *.RAW files, along with a *.TXT file.



A1.BAT
[code]
IMDA CPMSTATP.IMD > CPMSTATP.TXT
IMDA CPMCOPY.IMD > CPMCOPY.TXT
 
IMDU CPMSTATP.IMD CPMSTATP.RAW /B /E /D >> CPMSTATP.TXT
IMDU CPMCOPY.IMD CPMCOPY.RAW /B /E /D >> CPMCOPY.TXT
 
 
IMDA BOOT56K.IMD > BOOT56K.TXT
IMDA BOOT31K.IMD > BOOT31K.TXT
 
IMDU BOOT56K.IMD BOOT56K.RAW /B /E /D >> BOOT56K.TXT
IMDU BOOT31K.IMD BOOT31K.RAW /B /E /D >> BOOT31K.TXT
 
 
IMDA BASSG2EP.IMD > BASSG2EP.TXT
IMDA BASISCEP.IMD > BASISCEP.TXT
IMDA BASICETC.IMD > BASICETC.TXT
IMDA BASIC-63.IMD > BASIC-63.TXT
IMDA BASGAMES.IMD > BASGAMES.TXT
IMDA BASGAME1.IMD > BASGAME1.TXT
IMDA BASG2EP.IMD > BASG2EP.TXT

IMDU BASSG2EP.IMD BASSG2EP.RAW /B /E /D >> BASSG2EP.TXT
IMDU BASISCEP.IMD BASISCEP.RAW /B /E /D >> BASISCEP.TXT
IMDU BASICETC.IMD BASICETC.RAW /B /E /D >> BASICETC.TXT
IMDU BASIC-63.IMD BASIC-63.RAW /B /E /D >> BASIC-63.TXT
IMDU BASGAMES.IMD BASGAMES.RAW /B /E /D >> BASGAMES.TXT
IMDU BASGAME1.IMD BASGAME1.RAW /B /E /D >> BASGAME1.TXT
IMDU BASG2EP.IMD BASG2EP.RAW /B /E /D >> BASG2EP.TXT
 

IMDA ASSEMBLE.IMD > ASSEMBLE.TXT
 
IMDU ASSEMBLE.IMD ASSEMBLE.RAW /B /E /D >> ASSEMBLE.TXT
 
 
IMDA ARROWCN.IMD > ARROWCN.TXT
IMDA ARROW.IMD > ARROW.TXT
 
IMDU ARROWCN.IMD ARROWCN.RAW /B /E /D >> ARROWCN.TXT
IMDU ARROW.IMD ARROW.RAW /B /E /D >> ARROW.TXT
[/code]



A2.BAT
[code]
IMDA ALEVN5.IMD  > ALEVN5.TXT
IMDA ALEVN4.IMD  > ALEVN4.TXT
IMDA ALEVN3.IMD  > ALEVN3.TXT
IMDA ALEVN2.IMD  > ALEVN2.TXT
IMDA ALEVN1.IMD  > ALEVN1.TXT
IMDA ALEVCN2.IMD > ALEVCN2.TXT
 
IMDU ALEVN5.IMD ALEVN5.RAW /B /E /D >> ALEVN5.TXT
IMDU ALEVN4.IMD ALEVN4.RAW /B /E /D >> ALEVN4.TXT
IMDU ALEVN3.IMD ALEVN3.RAW /B /E /D >> ALEVN3.TXT
IMDU ALEVN2.IMD ALEVN2.RAW /B /E /D >> ALEVN2.TXT
IMDU ALEVN1.IMD ALEVN1.RAW /B /E /D >> ALEVN1.TXT
IMDU ALEVCN2.IMD ALEVCN2.RAW /B /E /D >> ALEVCN2.TXT
 

 
IMDA AIRBORNE.IMD > AIRBORNE.TXT

IMDU AIRBORNE.IMD AIRBORNE.RAW /B /E /D >> AIRBORNE.TXT
 
 
IMDA ACORN2.IMD > ACORN2.TXT
IMDA ACORN1.IMD > ACORN1.TXT
 
IMDU ACORN2.IMD ACORN2.RAW /B /E /D >> ACORN2.TXT
IMDU ACORN1.IMD ACORN1.RAW /B /E /D >> ACORN1.TXT


IMDA 56KCPM1.IMD > 56KCPM1.TXT
 
IMDU 56KCPM1.IMD 56KCPM1.RAW /B /E /D >> 56KCPM1.TXT
 
echo off
REM the Leading Chars 480Z & 480Z_ (1st 4 files)  were removed for ease of conversion by DOSBox.

REM 480Z_PRIMAR.IMD
REM 480Z_ARROW.IMD
REM 480Z_80.IMD
REM 480Z_40.IMD
REM 480ZWELC.IMD
REM 480ZSYSQ.IMD
REM 480ZSYSD.IMD
REM 480ZSYS.IMD
REM 480ZSSSD.IMD
REM 480ZSHRD.IMD
REM 480ZSD4.IMD
REM 480ZSD3.IMD
REM 480ZSD2.IMD
REM 480ZSD1.IMD
REM 480ZDSQD.IMD
REM 480ZDSDD.IMD
REM 480ZBOOT.IMD
REM 480ZBAS.IMD
 
echo on 

IMDA PRIMAR.IMD > PRIMAR.TXT
IMDA ARROW.IMD > ARROW.TXT
IMDA 80.IMD > 80.TXT
IMDA 40.IMD > 40.TXT
IMDA WELC.IMD > WELC.TXT
IMDA SYSQ.IMD > SYSQ.TXT
IMDA SYSD.IMD > SYSD.TXT
IMDA SYS.IMD > SYS.TXT
IMDA SSSD.IMD > SSSD.TXT
IMDA SHRD.IMD > SHRD.TXT
IMDA SD4.IMD > SD4.TXT
IMDA SD3.IMD > SD3.TXT
IMDA SD2.IMD > SD2.TXT
IMDA SD1.IMD > SD1.TXT
IMDA DSQD.IMD > DSQD.TXT
IMDA DSDD.IMD > DSDD.TXT
IMDA BOOT.IMD > BOOT.IMD
IMDA BAS.IMD > BAS.TXT


IMDU PRIMAR.IMD PRIMAR.RAW /B /E /D >> PRIMAR.TXT
IMDU ARROW.IMD ARROW.RAW /B /E /D >> ARROW.TXT
IMDU 80.IMD 80.RAW /B /E /D >> 80.TXT
IMDU 40.IMD 40.RAW /B /E /D >> 40.TXT
IMDU WELC.IMD WELC.RAW /B /E /D >> WELC.TXT
IMDU SYSQ.IMD SYSQ.RAW /B /E /D >> SYSQ.TXT 
IMDU SYSD.IMD SYSD.RAW /B /E /D >> SYSD.TXT
IMDU SYS.IMD SYS.RAW /B /E /D >> SYS.TXT
IMDU SSSD.IMD SSSD.RAW /B /E /D >> SSSD.TXT
IMDU SHRD.IMD SHRD.RAW /B /E /D >> SHRD.TXT
IMDU SD4.IMD SD4.RAW /B /E /D >> SD4.TXT
IMDU SD3.IMD SD3.RAW /B /E /D >> SD3.TXT
IMDU SD2.IMD SD2.RAW /B /E /D >> SD2.TXT
IMDU SD1.IMD SD1.RAW /B /E /D >> SD1.TXT
IMDU DSQD.IMD DSQD.RAW /B /E /D >> DSQD.TXT
IMDU DSDD.IMD DSDD.RAW /B /E /D >> DSDD.TXT
IMDU BOOT.IMD BOOT.RAW /B /E /D >> BOOT.TXT
IMDU BAS.IMD BAS.RAW /B /E /D >> BAS.TXT
 
 
IMDA 47KCPMBA.IMD > 47KCPMBA.TXT

IMDU 47KCPMBA.IMD 47KCPMBA.RAW /B /E /D >> 47KCPMBA.TXT
  
echo off
REM the Leading Chars 380, 380Z & 380Z_ (1st 10 files) were removed for ease of conversion by DOSBox.
REM Remember to actually change the file names to short format.

REM 380Z_Wordstar_3.0.IMD
REM 380Z_WRI.IMD
REM 380Z_UNK_5A.IMD
REM 380Z_UNK1.IMD
REM 380Z_SMILED.IMD
REM 380Z_SMILE.IMD
REM 380Z_RML_CPM22C.IMD
REM 380Z_QUEST.IMD
REM 380Z_MOSAIC.IMD
REM 380Z_ARROW.IMD
REM 380ZMULT.IMD
REM 380ZDS8.IMD
REM 380ZDS6B.IMD
REM 380ZDS6A.IMD
REM 380ZCPME.IMD
REM 380ZBAS5.IMD
REM 380DDWRI.IMD

echo on
  
IMDA WORDSTR3.IMD > WORDSTR3.TXT
IMDA WRI.IMD > WRI.TXT
IMDA UNK_5A.IMD > UNK_5A.TXT
IMDA UNK1.IMD > UNK1.TXT
IMDA SMILED.IMD > SMILED.TXT
IMDA SMILE.IMD > SMILE.TXT
IMDA CPM22C.IMD > CPM22C.TXT
IMDA QUEST.IMD > QUEST.TXT
IMDA MOSAIC.IMD > MOSAIC.TXT
IMDA MULT.IMD > MULT.TXT
IMDA DS8.IMD > DS8.TXT
IMDA DS6B.IMD > DS6B.TXT
IMDA DS6A.IMD > DS6A.TXT
IMDA CPME.IMD > CPME.TXT
IMDA BAS5.IMD > BAS5.TXT
IMDA DDWRI.IMD > DDWRI.TXT

IMDU WORDSTR3.IMD WORDSTR3.RAW /B /E /D >> WORDSTR3.TXT
IMDU WRI.IMD WRI.RAW /B /E /D >> WRI.TXT
IMDU UNK_5A.IMD UNK_5A.RAW /B /E /D >> UNK_5A.TXT
IMDU UNK1.IMD UNK1.RAW /B /E /D >> UNK1.TXT
IMDU SMILED.IMD SMILED.RAW /B /E /D >> SMILED.TXT
IMDU SMILE.IMD SMILE.RAW /B /E /D >> SMILE.TXT
IMDU CPM22C.IMD CPM22C.RAW /B /E /D >> CPM22C.TXT
IMDU QUEST.IMD QUEST.RAW /B /E /D >> QUEST.TXT
IMDU MOSAIC.IMD MOSAIC.RAW /B /E /D >> MOSAIC.TXT
IMDU MULT.IMD MULT.RAW /B /E /D >> MULT.TXT
IMDU DS8.IMD DS8.RAW /B /E /D >> DS8.TXT
IMDU DS6B.IMD DS6B.RAW /B /E /D >> DS6B.TXT
IMDU DS6A.IMD DS6A.RAW /B /E /D >> DS6A.TXT
IMDU CPME.IMD CPME.RAW /B /E /D >> CPME.TXT
IMDU BAS5.IMD BAS5.RAW /B /E /D >> BAS5.TXT
IMDU DDWRI.IMD DDWRI.RAW /B /E /D >> DDWRI.TXT
[/code]



At this point it's a matter of locating the correct CP/M Definition from the 455+ Definitions.

[code]
# 22DISK
BEGIN RML1  Research Machines Limited 380Z - 128 x 16
DENSITY FM, LOW
CYLINDERS 40 SIDES 1 SECTORS 16,128
SIDE1 0 1,4,7,10,13,16,3,6,9,12,15,2,5,8,11,14
BSH 3 BLM 7 EXM 0 DSM 74 DRM 63 AL0 0C0H AL1 0 OFS 3
END

# cpmtools
# RML1  Research Machines Limited 380Z - 128 x 16
diskdef rml1
  seclen 128
  tracks 40
  sectrk 16
  blocksize 1024
  maxdir 64
  skew 3
  boottrk 3
  os 2.2
end

# libdsk
[rml1]
description = RML1  Research Machines Limited 380Z - 128 x 16
cylinders = 40
heads = 1
secsize = 128
sectors = 16
secbase = 1
datarate = SD

# Flashfloppy/GOTEK
[rml1]
cyls = 40
heads = 1
secs = 16
interleave = 3
bps = 128
id = 1
#rpm = 360
rpm = 300
rate = 125
mode = fm
iam = no


# 22DISK
BEGIN RML2  Research Machines 380Z Side 2 - DSSD 48 tpi 5.25" - 128 x 16
DENSITY FM, LOW
CYLINDERS 40 SIDES 2 SECTORS 16,128
SIDE1 0 1,4,7,10,13,16,3,6,9,12,15,2,5,8,11,14
SIDE2 0 1,4,7,10,13,16,3,6,9,12,15,2,5,8,11,14
ORDER EAGLE
BSH 3 BLM 7 EXM 0 DSM 74 DRM 63 AL0 0C0H AL1 0 OFS 43
END

# cpmtools
# RML2  Research Machines 380Z Side 2 - DSSD 48 tpi 5.25" - 128 x 16
diskdef rml2
  seclen 128
  tracks 80
  sectrk 16
  blocksize 1024
  maxdir 64
  skew 3
  boottrk 43
  os 2.2
end

# libdsk
[rml2]
description = RML2  Research Machines 380Z Side 2 - DSSD 48 tpi 5.25" - 128 x 16
sides = eagle
cylinders = 80
heads = 2
secsize = 128
sectors = 16
secbase = 1
datarate = SD

# Flashfloppy/GOTEK
[rml2]
cyls = 80
heads = 2
secs = 16
interleave = 3
bps = 128
id = 1
#rpm = 360
rpm = 300
rate = 125
mode = fm
iam = no


# Definitions included with cpmtools
# Research Machines 380Z/480Z 5.25" "Single Density" or "MDS" format.
# All tracks are formatted FM 16x128.
diskdef rm-sd
  seclen 128
  tracks 40
  sectrk 16
  blocksize 1024
  maxdir 64
  skew 3
  boottrk 3
  os 2.2
end

# Research Machines 380Z/480Z 5.25" "Double Density" or "MD" format.
# Track 0 is formatted FM 16x128; 1+ are MFM 9x512.
# If you're working with an image file, make sure that track 0 is
# padded to be the same size as the other tracks.
diskdef rm-dd
  seclen 512
  tracks 40
  sectrk 9
  blocksize 1024
  maxdir 64
#  skew 5
  skew 1
#  boottrk 3     27680
  offset 27648
  boottrk 0
  os 2.2
end

# Research Machines 380Z/480Z 5.25" "Quad Density" or "MQ" format.
# Track 0 is formatted FM 16x128; 1+ are MFM 9x512.
diskdef rm-qd
  seclen 512
  tracks 80
  sectrk 9
  blocksize 2048
  maxdir 128
  skew 5
  boottrk 3
  os 2.2
end

[/code]


A good directory listing was inserted into each *.TXT file for each floppy Image.

More cpmtools, libdsk, Flashfloppy/GOTEK, and DREM definitions are on GITHUB.

https://github.com/ldkraemer/CPM-Floppy-Definitions



Larry
ldkraemer@gmail.com





   
