Image Map Image Map
Results 1 to 10 of 10

Thread: More on Exidy Sorcerer disk images.

  1. #1

    Default More on Exidy Sorcerer disk images.

    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
    www.binarydinosaurs.co.uk - UK home computer history
    Where RIFA capacitors come to die
    facebook.com/binarydinosaurs

  2. #2
    Join Date
    Mar 2013
    Location
    Chaffee, MO
    Posts
    1,144

    Default

    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

  3. #3

    Default

    YES!

    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

    Thanks Larry!
    www.binarydinosaurs.co.uk - UK home computer history
    Where RIFA capacitors come to die
    facebook.com/binarydinosaurs

  4. #4

    Default

    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

    This makes me very happy indeed, though I suspect there's only 2 others currently in the world who will be impressed.
    www.binarydinosaurs.co.uk - UK home computer history
    Where RIFA capacitors come to die
    facebook.com/binarydinosaurs

  5. #5
    Join Date
    Mar 2013
    Location
    Chaffee, MO
    Posts
    1,144

    Default

    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

  6. #6

    Default

    Quote Originally Posted by Witchy View Post
    This makes me very happy indeed, though I suspect there's only 2 others currently in the world who will be impressed.
    Hahaha. I'm impressed, even though I only understand 1/2 of what's been discussed. (:

    Tez
    ------------------------------------------------
    My vintage collection: https://classic-computers.org.nz/collection/
    My vintage activities blog: https://www.classic-computers.org.nz/blog/
    Twitter: @classiccomputNZ ; YouTube Videos: (click here)


  7. #7

    Default



    I've done an extended writeup on the processes involved - http://binarydinosaurs.co.uk/Museum/Exidy

    *edit* Larry I've grabbed the text of your OCR'd document so I'll check it later.
    www.binarydinosaurs.co.uk - UK home computer history
    Where RIFA capacitors come to die
    facebook.com/binarydinosaurs

  8. #8
    Join Date
    Mar 2013
    Location
    Chaffee, MO
    Posts
    1,144

    Default

    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 by ldkraemer; January 21st, 2019 at 02:34 PM. Reason: typo's

  9. #9
    Join Date
    May 2018
    Location
    Melbourne, Australia
    Posts
    129

    Default

    Quote Originally Posted by Witchy View Post
    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
    But ... how is it that the skew table for Exidy soft-sector format is the one that works for your Micropolis hard-sector format?

  10. #10

    Default

    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?!
    www.binarydinosaurs.co.uk - UK home computer history
    Where RIFA capacitors come to die
    facebook.com/binarydinosaurs

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •