• Please review our updated Terms and Rules here

More on Exidy Sorcerer disk images.

Witchy

Experienced Member
Joined
Oct 11, 2015
Messages
376
Location
Flatlands, UK
Hi folks,

Yesterday I successfully transferred a disk image from my Sorcerer to a PC then back again onto a new disk so at last I have duplicates of my Lifeboat CP/M 2.2 disk, the original hard sectored version of which started failing on thursday night. I also duplicated my Utilities disk which contains STERM, XMODEM and the utility that's currently doing all the hard work, Dave Dunfield's CPT.

Fortunately when my Virtual Sector Generator arrived (and I assembled it) that CP/M disk was the first thing I copied once I'd found a 1.2MB floppy drive that would work with the Sorcerer, for the record that's currently a Mitsubishi MF504C.

Today I decided to write a utility that would deconstruct the CPT format and hopefully give me an image that I can use with cpmtools. I can now get the following output from a CPT image:

Code:
COMMENT: CPT: Jan 11, 2019

Lifeboat CP/M 2.2 Sorcerer XLT S=0


DPH: 22 B8 21 00 00 00 00 00 C1 B8 95 B8 67 B9 41 B9
DPB: 20 00 04 0F 00 95 00 7F 00 C0 00 10 00 02 00
SPT: 32
START: 0
LAST: 77
X: 01
FLAG: XLT for ALL tracks
TRACK: 0 SECTOR: 0
00 31 97 02 21 00 02 19   22 a2 00 21 fd 00 19 22 |.1..!..."..!..."|
c5 01 21 00 9a 22 6d 02   3e 55 32 40 00 21 03 0f |..!.."m.>U2@.!..|
cd b4 01 2a a2 00 36 61   1e 28 cd ff 01 21 00 10 |...*..6a.(...!..|
cd b4 01 3e 47 32 40 00   31 00 01 2a a2 00 22 00 |...>G2@.1..*..".|
b8 21 00 00 22 bf b8 c3   00 b0 22 6b 02 06 0a c5 |.!.."....."k....|
21 6b 02 e5 46 0e 86 11   97 02 cd 00 00 e1 c1 ca |!k..F...........|
d3 01 05 c2 b9 01 c3 f7   01 e5 11 98 02 1a be c2 |................|
f7 01 2a 6d 02 eb 21 a3   02 cd 15 02 eb 22 6d 02 |..*m..!......"m.|


TRACK: 0 SECTOR: 1
e1 7e c6 03 e6 0f 77 23   35 c2 b9 01 c9 2a a2 00 |.~....w#5....*..|
11 00 fe 19 e9 7e e6 20   3e 60 c2 08 02 07 47 78 |.....~. >`....Gx|
d6 01 b7 c2 0a 02 1d c2   09 02 c9 06 00 7e 12 1a |.............~..|
be c2 25 02 23 13 05 c2   17 02 c9 eb 22 41 00 3e |..%.#......."A.>|
4d 32 40 00 c3 2e 02 00   00 00 00 00 00 00 00 00 |M2@.............|
00 00 00 00 00 00 00 00   00 00 00 00 00 00 00 00 |................|
00 00 00 00 00 00 00 00   00 00 00 00 00 00 00 00 |................|
00 00 00 00 00 00 00 00   00 00 00 00 00 00 00 5f |..............._|


TRACK: 0 SECTOR: 2
01 9a cd d5 9b c3 86 a1   4e 4f 20 53 50 41 43 45 |........NO SPACE|
00 cd 5e 9c c2 09 9c 3a   f0 a1 f5 cd 54 9e cd e9 |..^....:....T...|
9a c2 79 a0 21 cd a1 11   dd a1 06 10 cd 42 9e 2a |..y.!........B.*|
88 9a eb cd 4f 9c fe 3d   ca 3f a0 fe 5f c2 73 a0 |....O..=.?.._.s.|

Thanks to @flibbledeedoo I also discovered as many details about the Sorcerer format that I thought I'd need:

sorcererDiskFormat.jpg

but feeding those fields into diskdefs on my linux box fails to decode the image. Further reading brought up this Skew table for the Sorcerer:

sorcererDiskSkew.jpg

Adding that to diskdefs upsets cpmtools no end:

Code:
cpmls: cpmfs.c:344: readBlock: Assertion `d->skewtab[sect]<d->sectrk' failed.Aborted

This is my current diskdefs for that image:

Code:
# Sorcerer CPT image 5.25" SS DD 77T
diskdef cpt1
tracks 77
seclen 128
sectrk 32
blocksize 2048
maxdir 128
skewtab 11,12,21,22,31,32,9,10,19,20,29,30,7,8,17,18,27,28,5,6,15,16,25,26,3,4,13,14,23,24,1,2
boottrk 2
os 2.2
end

Time to sleep on it I think!

If anyone else wants a go the image is here: http://binarydinosaurs.co.uk/cpm.dsk
 
Witchy,
I took a quick look and it looks like your directory is starting one byte late. Typical Directory entries are at 0x2000.

I use this command to look at your file:
Code:
hexedit witchcpm.dsk

Code:
00002000   02 00 53 59  53 47 45 4E  20 20 43 4F  4D 00 00 00  ..SYSGEN  COM...
00002010   0C 02 00 00  00 00 00 00  00 00 00 00  00 00 00 00  ................
00002020   00 00 4D 4F  56 43 50 4D  20 20 43 4F  4D 00 00 00  ..MOVCPM  COM...
00002030   58 03 04 05  06 07 08 00  00 00 00 00  00 00 00 00  X...............
00002040   00 00 43 4F  4E 46 49 47  20 20 43 4F  4D 00 00 00  ..CONFIG  COM...
00002050   30 09 0A 0B  00 00 00 00  00 00 00 00  00 00 00 00  0...............

So I used dd to trim a byte (first byte in file was 0x00.
Code:
dd if=witchcpm.dsk bs=1 skip=1 of=witcpm1.dsk

Code:
00002000   00 53 59 53  47 45 4E 20  20 43 4F 4D  00 00 00 0C  .SYSGEN  COM....
00002010   02 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  ................
00002020   00 4D 4F 56  43 50 4D 20  20 43 4F 4D  00 00 00 58  .MOVCPM  COM...X
00002030   03 04 05 06  07 08 00 00  00 00 00 00  00 00 00 00  ................
00002040   00 43 4F 4E  46 49 47 20  20 43 4F 4D  00 00 00 30  .CONFIG  COM...0
00002050   09 0A 0B 00  00 00 00 00  00 00 00 00  00 00 00 00  ................
00002060   00 41 53 4D  20 20 20 20  20 C3 4F 4D  00 00 00 40  .ASM     .OM...@
00002070   0C 0D 0E 0F  00 00 00 00  00 00 00 00  00 00 00 00  ................
00002080   00 44 44 54  20 20 20 20  20 43 4F 4D  00 00 00 26  .DDT     COM...&
00002090   10 11 12 00  00 00 00 00  00 00 00 00  00 00 00 00  ................
000020A0   00 44 55 4D  50 20 20 20  20 43 4F 4D  00 00 00 04  .DUMP    COM....
000020B0   13 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  ................
000020C0   00 45 44 20  20 20 20 20  20 43 4F 4D  00 00 00 34  .ED      COM...4
000020D0   14 15 16 17  00 00 00 00  00 00 00 00  00 00 00 00  ................
000020E0   00 4C 4F 41  44 20 20 20  20 43 4F 4D  00 00 00 0E  .LOAD    COM....
000020F0   18 00 00 00  00 00 00 00  00 00 00 00  00 00 00 00  ................
00002100   00 50 49 50  20 20 20 20  20 43 4F 4D  00 00 00 3A  .PIP     COM...:

with these definitions I can get a good directory listing.
Code:
# Exidy Sorcerer - SS/DD, ie: 8" - 128 x 26
# 77 tracks, 1 sides, 16 sectors/track, 256 bytes/sector
# Bytes on the media = 1*77*16*256 = 315392
#
# EXI2  Exidy Sorcerer - SSDD 8" - 256 x 16
diskdef exi2
  seclen 256
  tracks 77
  sectrk 16
  blocksize 2048
  maxdir 64
#  datarate DD       #= Density SD, DD, HD, or ED
#  fm NO             #= Format YES = FM, or NO = MFM
  datarate HD
  fm YES 
  skew 5
# offset 8192       # 0x2000 = 8192
  boottrk 2
  os 2.2
end


# libdsk data below
[exi2]
description = EXI2  Exidy Sorcerer - SSDD 8" - 256 x 16
cylinders = 77
heads = 1
secsize = 256
sectors = 16
secbase = 1
datarate = HD

Code:
cpmls -f exi2 -D witcpm1.dsk
cpmls -f exi2 -T raw,exi2 -D witcpm1.dsk

Code:
     Name    Bytes   Recs  Attr     update             create
------------ ------ ------ ---- -----------------  -----------------
ASM     .COM     8K     64 R  
AUXDCPM .HEX     2K      1    
CONFIG  .COM     6K     48    
CPM47   .COM    10K     80    
DDT     .COM     6K     38    
DUMP    .COM     2K      4    
ED      .COM     8K     52    
EXBASIC .COM    24K    190    
FOO     .        2K      1    
LOAD    .COM     2K     14    
MOVCPM  .COM    12K     88    
SORC    .DOC     2K      9    
SYSGEN  .COM     2K     12    
W       .        2K      1    
XMODEM  .$$$     2K      1    
ZSID    .COM    10K     80    
   16 Files occupying     92K,     206K Free.

I'm assuming the remainder of the file is in correct order and files extract properly, but I didn't try this.
I know it has worked before on the CPMdisk.raw file I have tested with.

Thanks.

Larry
 
YES! :toast2:

Well spotted Larry, my code for extracting the image data missed a byte on something called 'X' which I'd guessed on how big it was based on other fields.

diskdefs needs to be this:

Code:
# Sorcerer CPT image 5.25" SS DD 77Tdiskdef cpt1
tracks 77
seclen 256
sectrk 16
blocksize 2048
maxdir 128
#skewtab 11,12,21,22,31,32,9,10,19,20,29,30,7,8,17,18,27,28,5,6,15,16,25,26,3,4,13,14,23,24,1,2
skew 1
boottrk 2
os 2.2
end

and I can now get listings and pull out (at least) text files - CPM 2.2 Disk:

Code:
     Name    Bytes   Recs  Attr     update             create
------------ ------ ------ ---- -----------------  -----------------
ASM     .COM     8K     64 R  
AUXDCPM .HEX     2K      1    
CONFIG  .COM     6K     48    
COPY    .COM     4K     32    
CPM32   .COM    10K     80    
CPM47   .COM    10K     80    
CPM55   .COM    10K     80    
DDT     .COM     6K     38    
DUMP    .ASM     6K     33    
DUMP    .COM     2K      4    
ED      .COM     8K     52    
EXBASIC .COM    24K    190    
FILECOPY.COM     2K      7    
FOO     .        2K      1    
LOAD    .COM     2K     14    
MEMR    .COM     4K     18    
MEMR    .DOC    10K     67    
MOVCPM  .COM    12K     88    
PIP     .COM     8K     58    
READ-ME .DOC     2K      9    
SAVEUSER.COM     2K      6    
SETCPM  .COM     2K     12    
SORC    .DOC     2K      9    
SORCUSER.ASM    10K     65    
STAT    .COM     6K     41    
SUBMIT  .COM     2K     10    
SYSGEN  .COM     2K     12    
USER    .ASM    12K     81    
W       .        2K      1    
XMODEM  .$$$     2K      1    
XSUB    .COM     2K      6    
ZSID    .COM    10K     80    
   32 Files occupying    184K,     112K Free.


Utilities disk:

Code:
     Name    Bytes   Recs  Attr     update             create
------------ ------ ------ ---- -----------------  -----------------
CPM47   .COM    10K     80    
CPT     .COM     2K      5    
CPT     .HEX     2K     11    
DATAPRIN.COM     6K     34    
DDT     .COM     6K     38    
DPB     .COM     2K      7    
DPB     .HEX     4K     18    
FIREL   .COM     2K     16    
FLOP2PC .COM     4K     19    
HOUNDS  .COM     4K     28    
PLOTTER .COM     2K      8    
PRINDATA.WPF     4K     19    
R-BYTES .WPF     4K     20    
RBEXT   .COM     4K     28    
ROMJUMP .COM     2K      2    
SCREEN  .COM     2K      6    
SOLITA47.COM     8K     60    
SPRINT  .COM     2K      2    
STERM   .COM    14K    104    
STERM12 .COM    14K    110    
SURROU47.COM     8K     64    
XDIR    .COM     2K      3    
XMODEM  .CFG     2K      1    
XMODEM  .COM     4K     32    
XMODEM  .HEX    12K     90    
   25 Files occupying    126K,     170K Free.

and just for giggles I pulled SORCUSER.ASM off the CP/M disk:

Code:
;SORCERER VERSION 1.0


;USER AREA for CP/M2 on Micropolis
;Version 3.4 of Oct 7, 1980


;Copyright (C) 1980 Lifeboat Associates


;This USER AREA is identical to that produced by
;CONFIG.COM Ver 3.x using configurations 0 thru 8.


;It may be used as is or as a prototype for
;your own drivers.  Two pages (512 bytes) are
;available for your custom I/O routines.


;The USER AREA contains a standard CONSOLE driver
;and a PRINTER driver with a choice of handshaking.
;Handshaking may be ETX/ACK, XON/XOFF or NONE.
;Printer may send 0-256 nulls after carrige return.
;The PUNCH and READER routines go to the console.


;The specific console ports and initialization strings
;will depend on the terminal number selected.
;Terminals 0 thru 7 are for specific I/O boards.


;CONFIG terminal #8 will configure for non standard
;console ports when the values for equates "1" thru "8"
;are placed in the data table at 130H together with
;initialization string if needed at "S" and length at "L".


;Type "CONFIG P<cr>" and answer console questions to
;install printer equates "9" thru "J" and init string "S".




;Change MSIZE to the desired CP/M memory size in K.
MSIZE   EQU     47              ;Distribution size


sorcuser.asm

11:30 is a bit early for a beer but **** it, I've been trying to get this running for 6 weeks :mrgreen:

Thanks Larry!
 
Tonight while experimenting on files @exidyboy has extracted I needed a copy of DUMP.COM in the MyZ80 CP/M emulator I use for compiling etc. Rather than download one from the CP/M archive I went over to the linux box holding my Sorcerer images and with cpmtools pulled a version out of the CP/M 2.2 boot disk. Various file transfers got it onto to the Win7 virtual machine running MyZ80 and after a quick import it ran OK :mrgreen:

This makes me very happy indeed, though I suspect there's only 2 others currently in the world who will be impressed.
 
Well, I'm impressed.

I OCR'd the multi-page document, and there are likely errors, but I have checked it twice. Let me know about any
errors you run

Code:
]-------------------------------------------- SCUA:   October 1984.  Vol 84-139
SHEDDING A BIT OF LIGHT ON DISK FORMATS                        Andrew Morland.
=======================================                        ===============
                35, Avenue Chevreul, Bois-Colombes, France. Tel (1) 784.89.56
[Ed: The following is part 1 a series of articles on disk formats which are too
long to publish in one go. The tables will be in the November N/L.]

Ever since I started word processing (1980), I've been trying to get some sense
on the subject of disk compatibility from suppliers ond other people who-ought-
to-know.  I felt then, and I still feel, that if only the manufacturers hadn't
gone out of their way to make things difficult, floppy  disks would be an ideal
medium for communicating large amounts of text over space ond time (eg. to send
my Australian correspondent a machine-readable copy of a patent  I'm drafting
now, so that he can amend it easily in response to Australian  patent  office
objections in, say, three years' time).

For years I was simply fobbed off with  remarks  like  "can't  be done" or "too
messy". But a little information did begin to trickle in. Then one or two firms
started selling programs  to read several formats on this or that  specified
machine.

Mechanical compatibility:
Drives come in various sizes eg. 8"  and  5" which con't read disks for another
size. 5" drives come in three different stepper motor pitches:  48, 96, and 100
tracks per inch (tpi). Some drives are switchable between 48 and 96. The number
of tracks actually used is under software control and is not a direct function
of the drive mechanics, but in general: 35 or 40 tracks means 48 tpi, 80 tracks
means 96 tpi and 77 tracks means 100 tpi. Finally, for  double sided operation,
the drive must have two heads.

Electrical compatibility:
Data is written onto disks in two stages, in a first stage (track formatting) a
lot of blank data is written onto the disk, together with  "sign-posts" marking
the  beginnings and ends of sectors. This is true both of hard  sectored  disks
(the ones with lots of  little holes round the hub) and of soft sectored disks.
In a second stage, the operating systems  writes  and  reads useful data in the
places marked in the track formatting stage.

Different disk controller electronics produce (at least) the following mutually
incompatible kinds of track format:

1) Soft sectoring on the  lines  laid  down  by IBM in about 1970 and generally
   embodied in the Western Digital family of chips;
2) Soft sectoring in any of the various ways devised for CBM, Sirius, or Apple;
3) Hard sector 10 sectors  per  track  (North Star and Vista are similar enough
   for software to get round their mutual incompatibilities); and
4) Micropolis 16 sectors per  track  and  either  48  or 100 tpi. The only soft
   sectored 100 tpi formats I am aware of are used by the Exidy Sorcerer, which
   started in Micropolis hard sector format and then moved on  to  soft  sector
   using the same drives, but a different controller card.

A controller card also needs to be  able  to  control selection of one or other
head of a double-headed drive and to be able to cope  with  single  density  or
double density or both. For simplicity  let's assume  that  there  is  only one
kind  of  single  density recording scheme (FM) and only  one  kind  of  double
density recording scheme (MFM).

Operating system compatibility:
Each operating system has its own idea  of where to store directory information
on a disk, and what kind of information it will use to locate  a file, and as a
side issue, it may encode directory data (eg. DEC RT/11 packs  a  file  name at
six bits per letter).

Skew:
The best way to use a disk is to read or write  an entire track in one go. This
is what the IBM PC does, for instance. However, an entire  track  may  have  6K
bytes or more of data, and a smaller buffer may be  preferred.  The buffer must
be at least one host (ie. on-the-disk) sector long.  Common  sector lengths are
128, 256, 512 and 1024 bytes.  In  between  reading or writing each sector in a
sequence of sectors  the computer needs to do various bits  at  computing,  eg.
transferring  data from an input buffer to where it's needed  in  RAM  or  vice
versa. This takes finite time, during which the disk moves on.  Thus  the  next
sector actually available when the computer is next ready for  disk I/O is not
the  immediately  adjacent sector, but rather the next-sector-but-N.  This  has
lead  to two different schemes for interleaving sectors  round  a  track,  both
schemes being called "skewing".

1)  The sectors round a track are numbered in sequence, but the cunning operating
   system asks the disk controller hardware to work on sectors in a funny order,
   eg. 1, 7, 13, 19, 25, 5, 11, 17, 23, 3, 9, 15, 21, 8, 14,


]-------------------------------------------- SCUA:   October 1984.  Vol 84-140

   20, 26, 6, 12, 18, 24, 4, 10, 16, and 22, instead of 1, 2, 3, ... .

2) The sectors are initially  numbered  in  a  related  higgledy-piggledy order
   round a track by the original track formatting operation   eg.  in the above
   example, the sector numbered 2 would be in 7th place,  the sector numbered 3
   would be in 13th place, and so on. With this second system,  skewing is done
   "once-and-forever"  by  the formatting program, and thereafter the operating
   system just asks for the sector number it first thought of.

Note that the principle of giving sectors  labels  that  do  not  make sense at
first  glance  can be taken to greater lengths: the associated  recorded  track
number  need not match the host track, and sector and/or  track  numbering  can
start at various arbitrary values. Tracks generally start  at 0 for the outside
track,  but  sectors  commonly  start  at 1, with 0 and 81H being  alternatives
mentioned in the tables below.

CP/M variants:
The strength of CP/M is that many of its format  features  are  table-driven so
that each manufacturer can do what it thinks best in disk usage.  The  weakness
is that this gives rise to a lot of not-quite compatible  formats.  Tables  of
relevant information follow, but several words of explanation are needed first.

CP/M provides for a "disk parameter  block"  (DPB)  which  defines  most of the
features a designer needs to be able to modify in order  to  fit  CP/M  to some
specific hardware, eg double sided 48 tpi drives, a double  density  controller
card, and a Winchester hard disk unit. Although floppy  disks are the only kind
of  disk of interest in trying to exchange data, the DPB  table  must  also  be
capable of coping with hard disks, which means that  in  giving "likely" ranges
of values below, I have limited myself to the more likely parameters for floppy
disks only.

SPT is a word defining the number of 128-byte  CP/M  sectors  per  track. These
CP/M sectors are usuaIly bunched into  "host" sectors of 256, 512 or 1024 bytes
per  sector.  The  number  of  bytes  per host sector is an essential  item  of
information for your BIOS,  but does not appear in the  DPB, since CP/M "thinks"
in 128 byte sectors at all times.

Likely values of SPT are: 12H for 5" SD 128 bytes/sector (BPS)
                          14H for 5" SD 256 BPS
                          20H for 5" DD 256 BPS
                          22H for 5" DD 256 BPS
                          24H for 5" DD 256 or 512 BPS
                          28H for 5" DD 512 or 1024 BPS

                          1AH for 8" SD 128 BPS
                          34H for 8" DD 256 BPS
                          (sorry, no examples of 512 BPS)
                          40H for 8" DD 1024 BPS

(One of the common double  sided  schemes  "pretends" that the extra sectors on
the "other" side run on from the sectors on "this" side, in  which case the SPT
number is doubled).

It  should  be possible to write a routine  for  inspecting  an  "alien"  disk,
determining  the  size and number of the host sectors,  and  then  setting  SPT
accordingly. Also, if the sector numbering around  the  track  turns  out to be
skewed, there is a very good chance that no further skew data is required.

BSH and BLM are two single byte values  defining  the SAME quantity, namely the
"block" length. CP/M allocates disk space to files in whole numbers of "blocks"
so half a block length is "wasted" by each file on the disk (on average  in the
long  run,  and assuming that files come in random lengths  that  are  long  in
comparison with the block length). Likely values are as follows:

Block length          BSH  BLM
 1K = 8 CP/M sectors:  03   07
 2K = 16 sectors    :  04   0F
 4K = 32 sectors    :  05   1F

in other words block length in CP/M sectors is equal  to 2 to the power BSH or,
alternatively, it is equal to BLM + 1.

EXM is the extent folding mask. After  blocks, CP/M "thinks" in "extents" which
are chunks 16K bytes long, regardless of block size.  EXM  indicates the number
of  16K  byte  extents  that can be pointed to from a single  directory  entry.
Likely numbers are: 0 means 1 extent, 1 means 2 extents, and 3 means 4 extents;
ie. there are EXM + 1 extents possible into each directory entry; for example,
by using an EXM of 0, where 1 would have been possible, 8 bytes in each entry
could be "reserved", (or wasted, depending on how you look at it).


]-------------------------------------------- SCUA:   October 1984.  Vol 84-141
DSM is a word defining the number of  blocks  on  a given disk, with the blocks
being  numbered  0 thru DSM, ie. there are DSM + 1 blocks  on  the  disk.  This
number  includes  the blocks used by the directory, but does  not  include  the
tracks reserved for the operating system. This number of tracks is given by the
word OFF. Thus:
1)  (BLM + 1)/8 = block size in K bytes
2)  (DSM + 1)(block size)  = Storage in K bytes
3)  OFF + 8 x (Storage in K bytes)/SPT = tracks

DSM has an effect on EXM: if DSM is a one-byte value, then twice as many blocks
can be pointed to in a given 16 byte length of directory than would be possible
if DSM were a two-byte value. Another twist is that each  directory entry must
be capable of pointing to at least one entire extent, which means that 1K byte
blocks can only be used with a disk having a DSM of FF or less.

The  remaining three entries relate to directory  size.  The  directory  always
starts  at  block  0,  and  a  whole number of blocks must be assigned  to  the
directory.  Each  block  assigned  to  the  directory  is  represented   by  a
corresponding 1 bit in the allocation vectors 0 and  1.  Thus  likely values of
AL0 are 80 (for one directory block)  C0  for  2 blocks, E0 for 3 blocks and F0
for 4 blocks. The rest of AL0 and all of AL1 are all zeros on floppy systems.

DRM is the maximum directory entry number (numbering is 0 thru DRM so there are
DRM + 1 directory entries), and CKS  is the number of CP/M directory sectors to
be checked (to make a surreptitiously changed disk  R/O)  and  is thus normally
equal to (DRM + 1)/4. Since there are 4 directory entries to one CP/M sector or
32 entries to 1K bytes, the following values are likely for DRM->CKS:
       AL0      80        C0         E0         F0
Block size   1 block   2 blocks   3 blocks   4 blocks
        1K    1F->08    3F->10     5F->18     7F->20
        2K    3F->10    7F->20     BF->30     FF->40
        4K    7F->20    FF->40    17F->60    1FF->80

Warnings:
Given a defined block size and AL0, DRM may be less than the value given in the
table. Some manufacturers appear to have used this as a way of "reserving" some
of  the  directory  space  on a disk for a little bit of system  that  wouldn't
squeeze into the available system track space.  For example,  Kaypro  appears to
get away with a single system track (OFF = 1) by putting  some  of  the  system
into space "allocated" to the directory. I call this  a  "funny".  Similary CKS
may be smaller than the value expected from DRM, eg. half  the  expected value,
in  order to speed up directory checking at the expense  of  confusion  if  two
disks have identical first directory halves but different  second  halves,  and
are then surreptitiously swapped without doing a  control-C.  One  of  the many
reasons for hard disks being foster than floppies is that  it  is  safe  do  no
directory checking since the medium is fixed.

At first glance that gives an awful  lot of possible formats.  But the number of
likely formats is only "moderately" large, say a few thousand.  Look at it from
a designer's point of view: for a single sided format,  the possible variations
in drive diameter (8" or 5") and in sector size (128, 256, 512, or 1024) give
rise in a slightly roundabout way to about 8 different possible  values for SPT
(say 3 bits of data);  by  convention the number of tracks on a disk is 35, 40,
77, or  80 (two more bits, total  =  5);  block  size  is  "normally"  2K,  but
"abnormally" it may be 1K on a small system or 4K on a big system (one more bit
only, total = 6); the number of system tracks is nearly  always  2  or 3, but 1
and 4 happen often enough to be watched for (2 more  bits   total = 8); and the
directory may 1 to 4 blocks long (2 more bits, total  =  1024). That leaves out
double sided formats, skew, and "funnies".

Double sided formats:
CP/M "expects" only one side, so all  double sided schemes work by "pretending"
that the data on the "other" side of the disk is located in extra sectors or in
extra tracks on "this" side of the disk. With extra  sectors, the SPT number is
double  the equivalent single density number, and the  BIOS  has  to  sort  out
whether the extra sectors are from SPT/2 up (the only kind I've seen with CP/M)
or every other host sector (seen on other operating systems). With extra tracks
several schemes are about: odd tracks on one side even tracks  on  the other is
the most popular; but the first half of the tracks may be on  "this"  side  and
the  second half may be on the 'other" side, in which case the  tracks  on  the
"other" side may be numbered from the outside inwardly (just like "this" side)
or from the inside outwardly.

These various conventions are hinted at in  the  DS column of the tables by sec
for extra sectors, tks for extra tracks,  35+ for tracks  0 to 34 on "this" side
with tracks 35+ on the "other" side counting in the usual direction; 40+ is the
same for a 40 track format, and 79- means counting backwards on the "other" side
of a 40 track system (ie. CP/M's "pretend" track 41 is actually 79-41 = 38,


]-------------------------------------------- SCUA:   October 1984.  Vol 84-142

but on the "other" side).  All  the  above  systems  assume  that the track
format  of  both sides is the same and is conventional,  ie.  track  0  at  the
outside  to track N near the hub and sector numbering 1 to  n  on  each  track.
Other track formats count as "funnies". By convention "this" side is side 0 and
the "other" side is side 1 - jargon can get very confusing!

Skew:
The skew "factor" is quoted as the number of  CP/M 128 bvte sectors between the
first CP/M sector number in the first host sector and  the  first  CP/M  sector
number in the second host sector. The skew factor must therefore  be an integer
multiple of the host sector size in 128 byte units. The  skew  tables  use  the
convention that CP/M sectors are numbered 1 to SPT around a track.

If you want to do lots of different skews,  it  is  cheaper on memory to define
any particular skew with a table of 6 or so bytes  and then calculate the skew,
rather than solemnly listing all the numbers as in the tables,  and then looking
the  skew up. Skew can be calculated using the following arbitrary  data:  skew
factor,  host sector size, SPT, flag for double sided  scheme,  end  correction
(ie. where to pick up  sector numbers on the second circuit round a track), and
CP/M number of first sector per track (an Exidy funny).

Funnies: I've given special columns to three other "funnies":
1) the lowest sector number used by the track format: HP and Lobo use 0 instead
   of 1  while Datavue uses 81H!
2) whether the data needs  inverting  to  make  sense (Superbrain seem to use a
   different data convention from the rest of us);
3) for a double density system: the number of the track on which double density
   starts. I've put "all" instead of "0" to avoid being misleading.  It took me
   some  time  to  get my BIOS to accept double density track 0,  and  I'm  now
   trying to twist its arm to cope with double density starting on track 2.

Remaining "funnies" have a11 been mentioned above with reference to the DPB:
(EXM) maximum extent folding is not essential;
(DRM) more blocks may be allocated to the directory than are actually used by
      the directory· and
(CKS) a reduced number of directory sectors may be checked.


THE TABLES

The  following  tables  are derived from numerous  sources  including  magazine
articles,  manuals for various items of equipment,  and  disassembling  several
BIOS's and programs for doing lots  or formats. The whole point of my doing the
tables  in  the first place was simply to try to get the data  into  consistent
form. I hope the resulting explanation is understandable  (well,  at  least  on
second reading).

I have used an exclamation mark (!) to  flag items I guess are wrong, but there
may be other errors too. Question marks (?) mean that I  think I've interpreted
the relevant source correctly - but I might be quite mistaken.  Underlined  (_)
means I know it's odd, but I'm convinced it's right all  the  same.  Within any
one subdivision, formats are listed in order of increasing DSM.

All the values of your own DPB can  be  deduced by using the above equations on
the   information   given  to  you  by  STAT  when  you  type:  STAT  DSK:<CR>.
Unfortunately this only works on "home" disks,  STAT is not capable of deducing
the DPB of any old "alien" disk you might slot into one of your drives.

Data about:
     skew;
     host sector size and numbering;
     data inversion;
     where double density starts on a double density disk; and
     what scheme is used for access to the "other" side
is rather harder to winkle out.
[Ed: to be continued next month.]


]-------------------------------------------- SCUA:  November 1984.  Vol 84-162
SHEDDING A BIT OF LIGHT ON DISK FORMATS - The Tables.            Andrew Marland.
=====================================================            ===============
[Ed:  This  is part 2 of Andrew's huge article,  the  first  part  being
published  last  month. Please refer to Part 1 for explanations  of  the
various symbols.]


                           SINGLE SIDED 5.25" FORMAT TABLES FOR CP/M
                           -----------------------------------------


5" 48 tpi SS SD - Soft Sectored:

     Parameter :      Hex dump of CP/M disk parameter block (DPB)     :  Skew   :   Capacity  : Host sec: data : double
Name           :  SPT  BSH BLM EXM   DSM    DRM   AL0&1   CKS    OFF  :table  F : blk  dsk tk : size 1st: Inv? : den sid
_______________.______________________________________________________._________._____________._________.______._____.__
Osborne 1      : 14 00  04  0F  01  2D 00  3F 00  80 00  10 00  03 00 : OSB1  4 : 2K   92K 40 :  256  1 :  no  :  SD  SS
TRS-80 1 Omikr.: 12 00  03  07  00  47 00  3F 00  C0 00  10 00  03 00 : TRS1  4 : 1K   72K 35 :  128  1 :  no  :  SD  SS
Cromenco       : 12 00  03  07  00  52 00  3F 00  C0 00  10 00  03 00 : CDOS1 5 : 1K   83K 40 :  128  1 :  no  :  SD  SS
Xerox 820      : 12 00  03  07  00  52 00  1F 00  80 00  08 00  03 00 : CDOS1 5 : 1K   83K 40 :  128  1 :  no  :  SD  SS
Sorcerer Dtrio.: 12 00  03  07  00  54 00  3F 00  C0 00  10 00  02 00 :  0    0 : 1K   85K 40 :  128  1 :  no  :  SD  SS


5" 48 tpi SS DD - Soft Sectored:

     Parameter :      Hex dump of CP/M disk parameter block (DPB)     :  Skew   :   Capacity  : Host sec: data : double
Name           :  SPT  BSH BLM EXM   DSM    DRM   AL0&1   CKS    OFF  :table  F : blk  dsk tk : size 1st: Inv? : den sid
_______________.______________________________________________________._________._____________._________.______._____.__
35 tracks
Aardvark       : 28 00  04  0F  01  51 00  3F 00  80 00  10 00  02 00 : Aard 08 : 2K  164K 35 :  512  1 :  no  :  DD  SS
Superbrain (JR): 28 00  04  0F  01  51 00  3F 00  80 00  10 00  02 00 : Aard 08 : 2K  164K 35 :  512  1 : yes  :  DD  SS
CCS SS DD      : 28 00  03  07  00  9F 00  3F 00  C0 00  10 00  03 00 : CCS  18 : 1K  160K 35 : 1024  1 :  no  :  DD  SS

40 tracks
Sorcerer Exidy : 20 00  04  0F  00  4B 00  7F 00  C0 00  20 00  02 00 :Exidy 0A : 2K  152K 40 :  256  1 :  no  : all  SS
Heath Magnolia : 24 00  04  0F  01  52 00  5F 00  C0 O0  18 00  03 00 :  0    0 : 2K  166K 40 :  512  1 :  no  :  DD  SS
TRS-80 III (MM): 24 00  04  0F  01  54 00  7F 00  C0 00  20 00  02 00 :  0    0 : 2K  170K 40 :  256  1 :  no  : all  SS
Cromenco+Int1T.: 28 00  04  0F  01  5E 90  7F 00  F0 00  20 00  02 00 :Int1T 0C : 2K  190K 40 :  512  1 :  no  :  DD  SS
Morrow         : 28 00  04  0F  01  5E 00  7F 00  C0 00  20 00  02 00 : CCS  18 : 2K  190K 40 : 1024  1 :  no  : all  SS
Sorcerer CData.: 28 00  04  0F  00  5E 00  7F 00  C0 00  20 00  02 00 :CData 08 : 2K  190K 40 :  512  1 :  no  : all  SS
Superbrain 40tk: 28 00  04  0F  01  5E 00  3F 00  80 00  10 00  02 00 : Aard 08 : 2K  190K 40 :  512  1 : yes  :  DD  SS
NEC 8001 PC    : 20 00  03  07  00  97 00  3F 00  C0 00  10 00  02 00 :  0    0 : 1K  152K 40 :  256  1 :  no  :  DD  SS
Zenith Z-100   : 20 00  03  07  00  97 00  7F 00  F0 00  20 00  02 00 :  0    0 : 1K  152K 40 :         :  no  :  DD  SS
Zenith Z-100(!): 20 00  03  07  00  97 00  7F 00  C0 00  20 00  02 00 :  0    0 : 1K  152K 40 :  512  1 :  no  :   1? SS
Zenith Z-90    : 20 00  03  07  00  97 00  7F 00  F0 00  20 00  02 00 :  0    0 : 1K  152K 40 :  256  1 :  no  :  DD  SS
IBM PC CP/M-86 : 20 00  03  07  00  9B 00  3F 00  C0 00  10 00  01 00 :  0    0 : 1K  156K 40 :  512  1 :  no  :  DD  SS
TI Professional: 20 00  03  07  00  9B 00  3F 00  C0 00  10 00  01 00 :  0    0 : 1K  156K 40 :  512  1 :  no  :  DD  SS
Xerox 820 DD   : 22 00  03  07  00  9C 00  3F 00  C0 00  10 00  03 00 :  0    0 : 1K  157K 40 :  256  1 :  no  :  DD  SS
Lobo Max 80    : 24 00  03  07  00  A5 00  3F 00  C0 00  10 00  03 00 :  0    0 : 1K  166K 40 :  256  ? :  no  :  DD  SS
Actrix         : 24 00  03  07  00  AA 00  3F 00  C0 00  10 00  02 00 :Actrx 0C : 1K  171K 40 :  512  1 :  no  :  DD  SS
DEC Robin VT180: 24 00  03  07  00  AA 00  3F 00  C0 00  10 00  02 00 : Aard 08 : 1K  171K 40 :  512  1 :  no  :  DD  SS
Olivetti ETV300: 24 00  03  07  00  AA 00  3F 00  C0 00  10 00  02 00 :Olive 04 : 1K  171K 40 :  256  1 :  no  :   1? SS
Sorcerer Dtrio.: 24 00  03  07  00  AA 00  3F 00  C0 00  10 00  02 00 :  0    0 : 1K  171K 40 :  256  1 :  no  :   1? SS
Osborne 1 (DD) : 28 00  03  07  00  B8 00  3F 00  C0 00  10 00  03 00 :  0    0 : 1K  185K 40 : 1024  1 :  no  :  DD  SS
ATR 8000       : 28 00  03  07  00  BD 00  3F 00  C0 00  10 00  02 00 :  0    0 : 1K  190K 40 :         :  no  :  DD  SS
Cromenco CBOS  : 28 00  03  07  00  BD 00  3F 00  C0 00  10 00  02 00 :  0    0 : 1K  190K 40 :  512  1 :  no  :  DD  SS
Kaypro II      : 28 00  03  07  00  C2 00  3F 00  F0 00  10 00  01 00 :  0    0 : 1K  195K 40 :         :  no  :  DD  SS
TRS-80 4 (Aero): 28 00  03  07  00  C2 00  3F 00  F0 00  10 00  01 00 :  0    0 : 1K  195K 40 :         :  no  :  DD  SS




]-------------------------------------------- SCUA   November 1984.  Vol 84-163

5" 96 and 100 tpi SS DD - Soft and Hard Sectored:

     Parameter :      Hex dump of CP/M disk parameter block (DPB)     :  Skew   :   Capacity  : Host sec: data : double
Name           :  SPT  BSH BLM EXM   DSM    DRM   AL0&1   CKS    OFF  :table  F : blk  dsk tk : size 1st: Inv? : den sid
_______________.______________________________________________________._________._____________._________.______._____.__


71 or 80 tracks & 96 or 100 tpi

Sorc. Exidy  HS: 20 00  04 0F  00  95 00  7F 00  C0 00  20 00  02 00 :Exidy 0A : 2K  300K 77 :  256  1 :  no  :all  SS
Sorc. Microp HS: 20 00  04 0F  00  95 00  7F 00  C0 00  10 00  02 00 :Microp0A : 2K  300K 77 :  256  1 :  no  :all  SS
Sorc. Exidy  SS: 20 00  04 0F  00  95 00  7F 00  C0 00  20 00  02 00 :Exidy 0A : 2K  300K 77 :  256  1 :  no  :all  SS
Sanyo MBC      : 20 00  04 0F  01  9B 00  3F 00  80 00  10 00  02 00 :Sanyo 06 : 2K  312K 80 :  256    :  no  :all? SS
Sorcerer Dtrio.: 24 00  04 0F  01  AE 00  3F 00  80 00  10 00  02 00 :  0    0 : 2K  350K 80 :  256  1 :  no  :  1  SS
Sorcerer CData.: 28 00  04 0F  00  C2 00  7F 00  C0 00  20 00  02 00 :CData 08 : 2K  390K 80 :  512  1 :  no  :all  SS


                                      DOUBLE SIDED 5.25" FORMAT LABELS.FOR CP/M


5" 48 tpi DS SD - Soft Sectored:

     Parameter :      Hex dump of CP/M disk parameter block (DPB)     :  Skew   :   Capacity  : Host sec: data : double
Name           :  SPT  BSH BLM EXM   DSM    DRM   AL0&1   CKS    OFF  :table  F : blk  dsk tk : size 1st: Inv? : den sid
_______________.______________________________________________________._________._____________._________.______._____.__

Sorcerer Dtrio.: 24 00  03  07  00  AA 00  3F 00  CO 00  10 00  02 00 :  0    0 : 1K  171K 40 :  128  1 :  no  : SD   sec
Cromeco        : 12 00  03  07  00  AC 00  3F 00  C0 00  10 00  03 00 : CDOS1 5 : 1K  173K 40 :  128  1 :  n0  : SD   tks

5" 48 tpi DS DD - Soft Sectored:

     Parameter :      Hex dump of CP/M disk parameter block (DPB)     :  Skew   :   Capacity  : Host sec: data : double
Name           :  SPT  BSH BLM EXM   DSM    DRM   AL0&1   CKS    OFF  :table  F : blk  dsk tk : size 1st: Inv? : den sid
_______________.______________________________________________________._________._____________._________.______._____.__

35 tracks
Superbrain QD  : 28 00  04  0F  01  A9 00  3F 00  80 00  10 00  02 00 : Aard 08 : 2K  340K 35 :  512  1 : yes  :  DD  35+
MP-125         : 20 00  03  07  00  FB 00  7F 00  F0 00  20 00  03 00 :  0    0 : 1K  250K 35 :  256  0 :  no  :  DD  tks
Toshiba T100   : 40 00  03  07  00  FF 00  3F 00  C0 00  10 00  03 00 : Tosh 08 : 1K  250K 35 :  256  1 :  no  :  DD  sec

40 tracks:
Datavue        : 50 00  05  1F  03  5E 00  7F 00  80 00  20 00  02 00 :  0    0 : 4K  380K 40 :  512 81 :  no  :  DD  sec
IMS 5000       : 40 00  04  0F  01  97 00  3F 00  80 00  10 00  02 00 : INS  10 : 2K  304K 40 :  256  1 :  no  :  DD  sec
NEC PC-8801A   : 40 00  04  0F  01  97 00  7F 00  C0 00  20 00  02 00 :  0    0 : 2K  304K 40 :  256  1 :  no  :  DD  sec
Zenith Z-100   : 20 00  04  0F  00  9A 00  FF 00  F0 00  40 00  02 00 :  0    O : 2K  310K 40 :  512  1 :  no  :  DD  tks
Sanyo          : 20 00  04  0F  01  9B 00  3F 00  B0 00  10 00  02 00 :Sanyo  6 : 2K  312K 40 :  256  1 :  no  :  DD  tks
IBM PC CP/M-86 : 20 00  04  0F  01  9D 00  3F 00  80 00  10 00  01 00 :  0    0 : 2K  316K 40 :  512  1 :  no  :  DD  79-
TeleVideo(?)   : 48 00  04  0F  01  A5 00  3F 00  80 00  10 00  02 00 :  0    0 : 2K  332K 39!:  256  1 :  no  : all? sec
TeleVideo      : 24 00  04  0F  00  AA 00  3F 00  80 00  10 00  04 00 :  0    0 : 2K  342K 40 :  256  1 :  no  :  DD  tks
Sorcerer Dtrio.: 48 00  04  0F  01  AA 00  3F 00  80 00  10 00  02 00 :  0    0 : 2K  342K 40 :  256  1 :  no  :   1  sec
Actrix DD      : 48 00  04  0F  01  AE 00  3F 00  80 00  10 00  01 00 :Actrx 0C : 2K  350K 40 :  512  1 :  no  :  DD  sec
Otrona Attache : 28 00  04  0F  01  B5 00  7F 00  C0 00  20 00  03 00 :  0    0 : 2K  364K 40 :  512  1 :  no  :  DD  40+
Epson QX-10    : 28 00  04  0F  01  BD 00  7F 00  C0 00  20 00  04 00 :  0    0 : 2K  380K 40 :  512  1 :  no  :  DD  tks
Cromenco CDOS  : 28 00  04  0F  00  C2 00  7F 00  C0 00  20 00  02 00 : CDOS 10 : 2K  390K 40 :  512  1 :  no  :  DD  tks
Cromenco+Int1T : 50 00  04  0F  01  C2 00  7F 00  C0 00  20 00  01 00 :Int1T 0C : 2K  390K 40 :  512  1 :  no  :  DD  sec
MAGIC Computer : 28 00  04  0F  00  C2 00  3F 00  80 00  10 00  02 00 :  0    0 : 2K  390K 40 :  512  1 :  no  :  DD  tks
Morrow         : 28 00  04  0F  01  C2 00  BF 00  E0 00  30 00  02 00 : CCS  10 : 2K  390K 40 :  512  1 :  no  : all? tks


]-------------------------------------------- SCUA:  November 1984.  Vol 84-164

5" 96 and 100 tpi DS DD - Soft sectored:

     Parameter :      Hex dump of CP/M disk parameter block (DPB)     :  Skew   :   Capacity  : Host sec: data : double
Name           :  SPT  BSH BLM EXM   DSM    DRM   AL0&1   CKS    OFF  :table  F : blk  dsk tk : size 1st: Inv? : den sid
_______________.______________________________________________________._________._____________._________.______._____.__
77 or 80 tracks & 96 or 100 tpi
Sorc. Exidy    : 40 00  04  0F  00  2B 01  7F 00  C0 00  20 00  02 00 :Exidy 0A : 2K  600K 77 :  256  1 :  no  : all  sec
Sorcerer Dtrio.: 48 00  04  0F  00  5E 01  7F 00  C0 00  20 00  02 00 :  0    0 : 2K  702K 80 :  256  1 :  no  : all  sec
Sorcerer CData.: 50 00  04  0F  00  85 01  7F 00  C0 00  20 00  02 00 :CData 08 : 2K  780K 80 :  512  1 :  no  : all  sec


                                                 8" FORMAT TABLES FOR CP/M
                                                 -------------------------

     Parameter :      Hex dump of CP/M disk parameter block (DPB)     :  Skew   :   Capacity  : Host sec: data : double
Name           :  SPT  BSH BLM EXM   DSM    DRM   AL0&1   CKS    OFF  :table  F : blk  dsk tk : size 1st: Inv? : den sid
_______________.______________________________________________________._________._____________._________.______._____.__
SSSD
STANDARD (!)   : 1A 00  03  07  00  F2 00  3F 00  C0 00  10 00  02 00 : 8"    6 : 1K  243k 77 :  128  1 :  no  : SD   SS
SSDD
ADD-X CP/M     : 34 00  04  0F  01  F2 00  7F 00  C0 00  20 00  02 00 :  0    0 : 2K  486K 77 :       1 :  no  :  2   SS
Sorcerer Dtrio.: 34 00  04  0F  61  F2 00  3F 00  80 00  10 00  02 00 :  9    0 : 2K  486K 77 :  256  1 :  no  :  1   SS
DSSD
ADD-X CP/M     : 34 00  04  0F  01  F2 00  7F 00  C0 00  20 00  02 00 :  0    0 : 2K  486K 77 :       1 :  no  : SD   sec
Sorcerer Dtrio.: 34 00  04  0F  00  F2 00  3F 00  80 00  10 00  02 00 :  0    0 : 2K  486K 77 :  128  1 :  no :  SD   sec
DSDD
ADD-X CP/M     : 68 00  05  1F  03  F2 00  7F 00  80 00  20 00  02 00 :  0    6 : 4K  972K 77 :       1 :  no  :  2   sec
TRS-80 II exten: 40 00  04  0F  00  2B 01  7F 00  C0 00  20 00  02 00 : TRS? 18 : 2K 1200K 77 : 1024  1 :  no  : all? tks
Sorcerer Dtrio.: 68 00  04  0F  00  E6 01  7F 00  C0 00  20 00  02 00 :  0    0 : 2K  974K 77 :  256  1 :  no  :  1   sec


                                                   SKEW TABLES
                                                   -----------


   128 bytes per sector
   TRS1  = TRS-80             :01 05 09 0D 11
     SPT = 12, F = 4           03 07 0B 0F
                               02 06 0A 0E 12
                               04 08 0C 10   ...   01

   CDOS1 = Cromenco & Xerox   :01 06 0B 10
     SPT = 12, F = 5           03 08 0D 12
                               05 0A 0F
                               02 07 0C 11
                               04 09 0E   ...   01

   8" STANDARD skew table     :01 07 0D 13 19
     SPT = 1A, F = 6           05 0B 11 17
                               03 09 0F 15
                               02 08 0E 14 1A
                               06 0C 12 18
                               04 0A 10 16   ...   01


   256 bytes per sector
   OSB1  = Osborne SD         :01 02  05 06  09 0A  0D 0E  11 12
     SPT = 14, F = 4           03 04  07 08  0B 0C  0F 10  13 14   ...   01

   Olive = Olivetti ETV 300   :01 02  05 06  09 0A  0D 0E  11 12  15 16  19 1A  1D 1E  21 22
     SPT = 24, F = 4           03 04  07 08  0B 0C  0F 10  13 14  17 18  1B 1C  1F 20  23 24   ...   01


]-------------------------------------------- SCUA:  November 1984.  Vol 84-165

   Sanyo = Sanyo MBC          :01 02  07 08  0D 0E  13 14  19 1A  1F 20
     SPT = 20, F = 6           05 06  0B 0C  11 12  17 18  1D 1E
                               03 04  09 0A  0F 10  15 16  1B 1C   ...   01

   Tosh  = Toshiba T100       :01 02  09 0A  11 12  19 1A
     SPT = 40, F = 8           03 04  0B 0C  13 14  1B 1C
                               05 06  0D 0E  15 16  1D 1E
                               07 08  0F 10  17 18  1F 20
                               21 22  29 2A  31 32  39 3A
                               23 24  2B 2C  33 34  3B 3C
                               25 26  2D 2E  35 36  3D 3E
                               27 28  2F 30  37 38  3F 40   ...   01

   Exidy = Exidy Sorcerer     :0B 0C  15 16  1F 20
     SPT = 20, F = A           09 0A  13 14  1D 1E
                               07 08  11 12  1B 1C
                               05 06  0F 10  19 1A
                               03 04  0D 0E  17 18
                               01 02   ...   0B

   Microp = Micropolis        :01 02  0B 0C  15 16
     SPT = 20, F = A           09 0A  13 14  1D 1E
                               07 08  11 12  1B 1C
                               05 06  0F 10  19 1A
                               03 04  0D 0E  17 18   ...   01

   IMS   = IMS 5000           :01 02  11 12  21 22  31 32
     SPT = 40, F = 10          03 04  13 14  23 24  33 34
                               05 06  15 16  25 26  35 36
                               07 08  17 18  27 28  37 38
                               09 0A  19 1A  29 2A  39 3A
                               0B 0C  1B 1C  2B 2C  3B 3C
                               0D 0E  1D 1E  2D 2E  3D 3E
                               0F 10  1F 20  2F 30  3F 40   ...   01


   512 bytes per sector
   DEC   = DEC Robin/VT180    :01 02 03 04  09 0A 0B 0C  11 12 13 14  19 1A 1B 1C  21 22 23 24
     SPT = 24, F = 8           05 06 07 08  0D 0E 0F 10  15 16 17 18  1D 1E 1F 20   ...   01

   Aard  = Aardvark & SuperB  :01 02 03 04  09 0A 0B 0C  11 12 13 14  19 1A 1B 1C  21 22 23 24
     SPT = 28, F = 8           05 06 07 08  0D 0E 0F 10  15 16 17 18  1D 1E 1F 20  25 26 27 28   ...   01

   CData = Sorcerer+Compudata :05 06 07 08  0D 0E 0F 10   15 16 17 18  1D 1E 1F 20  25 26 27 28
     SPT = 28, F = 8           01 02 03 04  09 0A 0B 0C   11 12 13 14  19 1A 1B 1C  21 22 23 24  ...   05

   Actrx = Actrix             :01 02 03 04  0D 0E 0F 10  19 1A 1B 1C
     SPT = 24, F = C           05 06 07 08  11 12 13 14  1D 1E 1F 20
                               09 0A 0B 0C  15 16 17 18  21 22 23 24   ...   01  if Single Sided
     SPT = 48, F = C          :25 26 27 28  31 32 33 34  3D 3E 3F 40
                               29 2A 2B 2C  35 36 37 38  41 42 43 44
                               2D 2E 2F 30  39 3A 3B 3C  45 46 47 48   ...   01  if Double Sided

   IntiT = Cromenco+IntiTerm  :01 02 03 04  0D 0E 0F 10  19 1A 1B 1C
     SPT = 28, F = C           09 0A 0B 0C  15 16 17 18  21 22 23 24
                               05 06 07 08  11 12 13 14  1D 1E 1F 20   ...   01 if Single Sided
     SPT = 50, F = C           29 2A 2B 2C  35 36 37 38  41 42 43 44
                               31 32 33 34  3D 3E 3F 40  49 4A 4B 4C
                               2D 2E 2F 30  39 3A 3B 3C  45 46 47 48   ...   01 if Double Sided


]-------------------------------------------- SCUA:  November 1984.  Vol 84-166


   CDOS  = Cromenco CDOS DD   :01 02 03 04  11 12 13 14  21 22 23 24
     SPT = 28, F = 10          09 0A 0B 0C  19 1A 1B 1C
                               05 06 07 08  15 16 17 18  25 26 27 28
                               0D 0E 0F 10  1D 1E 1F 20   ...   01


   1024 bytes per sector
   CCS   = CCS & Morrow       :01 02 03 04 05 06 07 08   19 1A 1B 1C 1D 1E 1F 20
     SPT = 28, F = 18          09 0A 0B 0C 0D 0E 0F 10   21 22 23 24 25 26 27 28
                               11 12 13 14 15 16 17 18   ...   01

   TRS   = TRS-80 Mod II      :01 02 03 04 05 06 07 08   19 1A 1B 1C 1D 1E 1F 20   31 32 33 34 35 36 37 38
     SPT = 45, F = 18          09 0A 0B 0C 0D 0E 0F 10   21 22 23 24 25 26 27 28   39 3A 3B 3C 3D 3E 3F 40
                               11 12 13 14 15 16 17 18   29 2A 2B 2C 2D 2E 2F 30   ...   01

Perhaps it will help someone.


Larry
 
Witchy,
I had another go at verifying the OCR'd document and found these errors.

Code:
Search for:               Replace with:
ond                       and              ---> Multiple Places
con't                     can't            ---> Multiple Places
bits  at  computing,      bits  of  computing,                ---> One Place

Sorry, my old eyes missed them the previous times.

Larry
 
Last edited:
Hi folks,

Yesterday I successfully transferred a disk image from my Sorcerer to a PC then back again onto a new disk so at last I have duplicates of my Lifeboat CP/M 2.2 disk, the original hard sectored version of which started failing on thursday night. I also duplicated my Utilities disk which contains STERM, XMODEM and the utility that's currently doing all the hard work, Dave Dunfield's CPT.

Fortunately when my Virtual Sector Generator arrived (and I assembled it) that CP/M disk was the first thing I copied once I'd found a 1.2MB floppy drive that would work with the Sorcerer, for the record that's currently a Mitsubishi MF504C.

Today I decided to write a utility that would deconstruct the CPT format and hopefully give me an image that I can use with cpmtools. I can now get the following output from a CPT image:

Code:
COMMENT: CPT: Jan 11, 2019

Lifeboat CP/M 2.2 Sorcerer XLT S=0


DPH: 22 B8 21 00 00 00 00 00 C1 B8 95 B8 67 B9 41 B9
DPB: 20 00 04 0F 00 95 00 7F 00 C0 00 10 00 02 00
SPT: 32
START: 0
LAST: 77
X: 01
FLAG: XLT for ALL tracks
TRACK: 0 SECTOR: 0
00 31 97 02 21 00 02 19   22 a2 00 21 fd 00 19 22 |.1..!..."..!..."|
c5 01 21 00 9a 22 6d 02   3e 55 32 40 00 21 03 0f |..!.."m.>U2@.!..|
cd b4 01 2a a2 00 36 61   1e 28 cd ff 01 21 00 10 |...*..6a.(...!..|
cd b4 01 3e 47 32 40 00   31 00 01 2a a2 00 22 00 |...>G2@.1..*..".|
b8 21 00 00 22 bf b8 c3   00 b0 22 6b 02 06 0a c5 |.!.."....."k....|
21 6b 02 e5 46 0e 86 11   97 02 cd 00 00 e1 c1 ca |!k..F...........|
d3 01 05 c2 b9 01 c3 f7   01 e5 11 98 02 1a be c2 |................|
f7 01 2a 6d 02 eb 21 a3   02 cd 15 02 eb 22 6d 02 |..*m..!......"m.|


TRACK: 0 SECTOR: 1
e1 7e c6 03 e6 0f 77 23   35 c2 b9 01 c9 2a a2 00 |.~....w#5....*..|
11 00 fe 19 e9 7e e6 20   3e 60 c2 08 02 07 47 78 |.....~. >`....Gx|
d6 01 b7 c2 0a 02 1d c2   09 02 c9 06 00 7e 12 1a |.............~..|
be c2 25 02 23 13 05 c2   17 02 c9 eb 22 41 00 3e |..%.#......."A.>|
4d 32 40 00 c3 2e 02 00   00 00 00 00 00 00 00 00 |M2@.............|
00 00 00 00 00 00 00 00   00 00 00 00 00 00 00 00 |................|
00 00 00 00 00 00 00 00   00 00 00 00 00 00 00 00 |................|
00 00 00 00 00 00 00 00   00 00 00 00 00 00 00 5f |..............._|


TRACK: 0 SECTOR: 2
01 9a cd d5 9b c3 86 a1   4e 4f 20 53 50 41 43 45 |........NO SPACE|
00 cd 5e 9c c2 09 9c 3a   f0 a1 f5 cd 54 9e cd e9 |..^....:....T...|
9a c2 79 a0 21 cd a1 11   dd a1 06 10 cd 42 9e 2a |..y.!........B.*|
88 9a eb cd 4f 9c fe 3d   ca 3f a0 fe 5f c2 73 a0 |....O..=.?.._.s.|

Thanks to @flibbledeedoo I also discovered as many details about the Sorcerer format that I thought I'd need:

View attachment 50608

but feeding those fields into diskdefs on my linux box fails to decode the image. Further reading brought up this Skew table for the Sorcerer:

View attachment 50609

Adding that to diskdefs upsets cpmtools no end:

Code:
cpmls: cpmfs.c:344: readBlock: Assertion `d->skewtab[sect]<d->sectrk' failed.Aborted

This is my current diskdefs for that image:

Code:
# Sorcerer CPT image 5.25" SS DD 77T
diskdef cpt1
tracks 77
seclen 128
sectrk 32
blocksize 2048
maxdir 128
skewtab 11,12,21,22,31,32,9,10,19,20,29,30,7,8,17,18,27,28,5,6,15,16,25,26,3,4,13,14,23,24,1,2
boottrk 2
os 2.2
end

Time to sleep on it I think!

If anyone else wants a go the image is here: http://binarydinosaurs.co.uk/cpm.dsk

But ... how is it that the skew table for Exidy soft-sector format is the one that works for your Micropolis hard-sector format?
 
It didn't, if you read further back you'll see that Larry spotted my image was one byte too long because I'd missed that one of the flags was two bytes not one. I got it working after that and posted the results a couple of messages back. Also, how can that be January, where's the year disappearing to?!
 
Back
Top