File: mkdisk.txt

package info (click to toggle)
xtrs 4.9d-3
  • links: PTS, VCS
  • area: contrib
  • in suites: sid
  • size: 5,484 kB
  • sloc: ansic: 72,545; makefile: 1,633; sh: 554; csh: 132
file content (321 lines) | stat: -rw-r--r-- 18,512 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
mkdisk(1)                   General Commands Manual                  mkdisk(1)

Name
       mkdisk  -  make  a  blank  emulated  floppy  or  hard disk for xtrs, or
       add/remove an emulated write-protect tab

Synopsis
       mkdisk -1 [-f] filename

       mkdisk [-3] [-f] filename

       mkdisk -k [-s sides] [-d density] [-8] [-i] [-f] filename

       mkdisk -h [-c cyl] [-s sec] [-g gran] [-d dcyl] [-S] [-f] filename

       mkdisk {-p|-u} {-1|-3|-k|-h} filename

Description
       The mkdisk program is part of the xtrs package.  It  has  two  distinct
       functions:

       +      It  can make a blank (unformatted) emulated floppy or hard drive
              in a file.

       +      With the -p or -u flag, it can turn the write-protect flag on or
              off  for  an  existing  emulated floppy or hard drive file.  See
              xtrs(1) for background information.

       The conventional file extensions are .dsk  for  emulated  floppies  and
       .hdv  for  "HDV" emulated hard drives, but mkdisk does not enforce this
       convention; you can use any filename.  Other extensions sometimes  used
       for emulated floppies are .jv1, .jv3, .8in, and .dmk.

       By  default, when creating disk image files, and if the system's under-
       lying fopen(3) library function supports this ISO C11  feature,  mkdisk
       refuses  to  overwrite  an  existing  file  called  filename.   The  -f
       ("force") option overrides this default, "clobbering" filename.

   Making Emulated Floppies
       With the -1 flag, mkdisk makes an unformatted emulated floppy  of  type
       JV1.  Besides -f, no additional flags are accepted.

       With  the  -3  flag (which is the default and should normally be used),
       mkdisk makes an unformatted emulated floppy of type JV3.   Besides  -f,
       no additional flags are accepted.

       With  the  -k flag, mkdisk makes an unformatted emulated floppy of type
       DMK.  With -k, the optional flags -s, -d, -8, and -i  can  be  used  to
       give the emulated floppy special properties.  Specifying -s1 limits the
       floppy to one side; with -s2 (the default), the floppy can be formatted
       as  either one- or two-sided.  Specifying -d1 limits the floppy to sin-
       gle-density; with -d2 (the default), the floppy  can  be  formatted  in
       either  single-  or double-density.  Specifying -8 allows the floppy to
       be formatted in an emulated 8" drive; by default it will work  properly
       only  in an emulated 5.25" drive.  Setting -s1 or -d1 saves space after
       the floppy is formatted; setting -8 consumes additional space.   Speci-
       fying  -i  activates  a  peculiar feature in some TRS-80 emulators that
       causes each formatted sector to appear to be both single-  and  double-
       density.

   Making Emulated Hard Drives
       With  the -h flag, mkdisk makes an unformatted emulated hard drive with
       cyl cylinders, sec sectors, and gran granules (LDOS  allocation  units)
       per cylinder.  The hard drive will have cylinder number dcyl marked for
       use as its directory.

       You will usually want to use the default values for all  these  parame-
       ters.  The default is 202 cylinders, 256 sectors per cylinder (that is,
       8 heads and 32 sectors per track), and 8 granules per  cylinder.   This
       is the largest hard drive that can be used by all LDOS/LS-DOS operating
       systems without partitioning the drive or patching the FORMAT  command.
       The  details  on what nondefault values are possible vary, depending on
       which of xtrs's two hard drive emulations you are using and which other
       emulators  you  want to be compatible with, and it is probably best not
       to delve into these complexities, but read on if you really want to.

       For cyl, the number of cylinders on the drive,  the  default  value  is
       202,  the  minimum is 3, and the maximum that can be represented in the
       HDV file's header is 256.  You can use 203 cylinders with LDOS and  LS-
       DOS  if  you format the drive with Model 4 LS-DOS; a minor bug in Model
       I/III FORMAT/CMD prevents more than 202 cylinders from being formatted,
       but  the  system can use 203 thereafter.  203 cylinders is the absolute
       maximum for LDOS/LS-DOS  drivers  that  do  not  support  partitioning,
       including  the  emulator-specific  drivers  supplied  with  xtrs  (XTR-
       SHARD/DCT), with Matthew Reed's emulator  (HARD/CMD),  and  with  David
       Keil's emulator (EHARD/DCT).

       In  xtrs  4.1  and  later, and in David Keil's emulator version 6.0 and
       later, a true emulation of Radio Shack's WD1010-based  hard  disk  con-
       troller  is also available, which works with the native drivers for the
       original hardware, such as RSHARDx/DCT and the hard  disk  drivers  for
       NEWDOS  and  CP/M.   In  xtrs, the WD1010 emulation ignores the maximum
       number of cylinders specified in the HDV file's header and  allows  the
       driver  to  format  up  to 65536 cylinders.  This may be useful if your
       drivers support partitioning (but why would anyone want to partition an
       emulated  hard  drive  instead of just making two smaller ones?), or if
       your operating system supports more than 203 cylinders  per  partition.
       Note  that  although  RSHARDx/DCT allows up to 406 cylinders per parti-
       tion, if you use more than 203,  the  maximum  number  of  sectors  per
       cylinder  is limited to 128, so you gain nothing; the maximum size of a
       partition is still the same.

       For sec, the number of sectors per cylinder, the default value is  256,
       the  maximum is 256, and the minimum is 4.  There are some restrictions
       on the values that will work.  For the greatest portability,  choose  a
       value  that  is  divisible  by  32.  With xtrs's XTRSHARD/DCT and David
       Keil's EHARD/DCT, any value is allowed that can be evenly divided  into
       granules; see the next paragraph.  With Matthew Reed's HARD/CMD, if sec
       is greater than 32, it must be divisible by 32.  With the emulation  of
       a real WD1010 in newer versions of xtrs (and probably David Keil's emu-
       lator too), sec must always be divisible by 32, because we always  emu-
       late  a  drive  with 32 sectors per track and from 1 to 8 heads (tracks
       per cylinder).  The RSHARDx/DCT driver assumes that there are always 32
       sectors per track.

       For  gran, the default value is 8, the maximum is 8, and the minimum is
       1.  In addition, it is necessary that sec be evenly divisible by  gran,
       and  that  sec-:-gran  be less than or equal to 32.  This value is used
       only with the emulator-specific drivers listed  above;  it  is  ignored
       when xtrs is using native hardware drivers such as RSHARDx/DCT.

       The maximum size of a hard drive image is controlled by cyl and sec: it
       can be at most cylxsec 256-byte sectors.  The  image  file  starts  out
       small  and  grows as you write to more cylinders.  The allocation effi-
       ciency is controlled by the granule size: LDOS allocates file space  in
       granules.  Therefore (1) gran should always be set as large as possible
       and (2) reducing sec, thereby  making  the  granules  smaller,  reduces
       space  wasted  due  to fragmentation but limits the maximum size of the
       drive.

       Seeing that the maximum unpartitioned drive size is less  than  13  MiB
       and  that  the  maximum granule size is only 8 kiB, wasted space should
       not be much of a concern for most xtrs users.   Therefore  the  default
       parameters  have  been  chosen  to  give you the largest drive possible
       without partitioning.

   Embedding the file name in a hard disk image
       Matthew Reed's hard drive image file format contains an eight-character
       field  for storing the filename of the hard drive image itself.  mkdisk
       simply uses the given filename as  this  within-image  filename.   This
       works best if filename specifies a short file name in the current work-
       ing directory.  Since modern operating systems  permit  filenames  much
       longer  than  eight  characters,  historically versions of mkdisk would
       deliberately "spill" the remaining  characters  of  filename  into  the
       reserved  structure  field  following the filename (see Technical data,
       below).

       There were two problems with the foregoing approach:

       +      Modern versions of the standard C library  such  as  glibc  will
              detect  the  overflow of the destination buffer, emit a lengthy,
              technical, frightening diagnostic, and abort the program immedi-
              ately.  mkdisk itself offered no explanation.

       +      mkdisk  also  did  not  do  any  checking to see if the filename
              string copy might overflow the subsequent buffer,  the  reserved
              area.

       Now,  mkdisk by default writes a truncated (if necessary) copy of file-
       name to the hard disk image file header; a warning diagnostic is  emit-
       ted in that event.

       With the -S option, mkdisk simulates the old behavior, up to the end of
       the reserved area.  In this "spill mode", a warning diagnostic is emit-
       ted  if  spillage  occurs,  and the program aborts with an error if the
       filename is too long to fit in the filename and  reserved  fields  com-
       bined.

       For  maximum  portability  of  your  hard drive images, use only ASCII-
       encoded eight-character filenames in  the  current  working  directory.
       Omit control characters in the range \x00-\x1f and \x7f.  These are not
       "8.3" file names; the "." character, if used, counts toward the  eight-
       character limit.

   Write Protection
       With the -p flag, mkdisk turns on write protection for an existing emu-
       lated floppy or hard drive.  It turns off  all  Unix  write  permission
       bits  on the file, and (except for JV1 floppies) also sets a write-pro-
       tected flag inside the file.

       With the -u flag, mkdisk turns off write  protection  for  an  existing
       emulated  floppy  or hard drive.  It turns on Unix write permissions to
       the file, masked by your current umask and the file's current read per-
       missions.   It  also  clears  a  write-protected  flag  inside the file
       (except on JV1 floppies, which don't have such a flag).

       mkdisk currently does not have code to auto-recognize file formats,  so
       the  -p or -u flag must be accompanied by either -1 (JV1), -3 (JV3), -k
       (DMK), or -h (hard disk) to identify the file format.  There is also no
       checking  for  the  correct file format, so if you give the wrong flag,
       the wrong byte inside your file will be changed.

   Technical data
       The JV1 format is just an array  of  256-byte  sectors,  in  the  order
       (track 0 sector 0, track 0 sector 1, ... track 0 sector 9, track 1 sec-
       tor 0, ...).  It can represent only single-sided, single-density  flop-
       pies.  The directory is assumed to be track 17.

       The  original  JV3  format is documented in the printed manual for Jeff
       Vavasour's commercial Model III/4 emulator.   The  xtrs  implementation
       includes some extensions.

       Full  documentation  for  both  JV1 and JV3 can be found in Common File
       Formats for  Emulated  TRS-80  Floppy  Disks  <http://www.tim-mann.org/
       trs80/dskspec.html>  at  Tim  Mann's  TRS-80 site.  A copy of this HTML
       file is also included in the xtrs distribution.

       The DMK format was documented in a file on David Keil's web  site,  now
       available via the Internet Archive <https://web.archive.org/web/
       20010128070200/http://discover-net.net/~dmkeil/trsdoc.htm#Technical>;
       this  file  is  also included with his emulator.  Some points are worth
       bearing in mind, particularly if you're attempting to work  with  copy-
       protected TRS-80 disks:

       +      If  neither  the single-density nor the ignore-density option is
              set and single-density data is  recorded,  each  single  density
              byte  is  written  twice (i.e., the four bytes 12345678 would be
              written as 1212343456567878).  This ensures  that  when  single-
              and  double-density  sectors  are  mixed, each type occupies the
              correct relative amount of space in the track.

       +      Bit 15 of an IDAM offset is 1 if the sector is double-density, 0
              if  single-density.  Bit 14 is reserved; it currently must be 0.
              The actual offset is in bits 13-0.  These offsets  are  relative
              to  the  start  of  the  track header, they must be in ascending
              order (I hope!!), and an offset of 0 or  0xffff  terminates  the
              list.

       An HDV (hard disk) image has the following format.  This information is
       based on email from Matthew Reed.  There is an initial 256-byte  header
       block,  followed  by an array of sectors.  The geometry of the drive is
       defined in the header block, which looks like this (from reed.h):

       /* Matthew Reed's hard drive format.  Thanks to Matthew for providing
          documentation.  The comments below are copied from his mail
          messages, with some additions. */
       /* $Id: reed.h,v 1.2 2008/06/26 04:39:56 mann Exp $ */

       typedef struct {
           Uchar id1;         /* 0: Identifier #1: 56H */
           Uchar id2;         /* 1: Identifier #2: CBH */
           Uchar ver;         /* 2: Version of format: 10H = version 1.0 */
           Uchar cksum;       /* 3: Simple checksum:
                                    To calculate, add together bytes 0 to 31
                                    of header (excepting byte 3), then XOR
                                    result with 4CH */
           Uchar blks;        /* 4: Number of 256 byte blocks in header:
                                    should be 1 */
           Uchar mb4;         /* 5: Not used, but HDFORMAT sets to 4 */
           Uchar media;       /* 6: Media type: 0 for hard disk */
           Uchar flag1;       /* 7: Flags #1:
                                    bit 7: Write protected: 0 for no, 1 for
                                           yes [xtrshard/dct ignores for now]
                                    bit 6: Must be 0
                                    bit 5 - 0: reserved */
           Uchar flag2;       /* 8: Flags #2: reserved */
           Uchar flag3;       /* 9: Flags #3: reserved */
           Uchar crtr;        /* 10: Created by:
                                     14H = HDFORMAT
                                     42H = xtrs mkdisk
                                     80H = Cervasio xtrshard port to Vavasour
                                           M4 emulator */
           Uchar dfmt;        /* 11: Disk format: 0 = LDOS/LS-DOS */
           Uchar mm;          /* 12: Creation month: mm */
           Uchar dd;          /* 13: Creation day: dd */
           Uchar yy;          /* 14: Creation year: yy (offset from 1900) */
           Uchar res1[12];    /* 15 - 26: reserved */
           Uchar dparm;       /* 27: Disk parameters:
                                     (unused with hard drives)
                                     bit 7: Density: 0 = double, 1 = single
                                     bit 6: Sides: 0 = one side, 1 = 2 sides
                                     bit 5: First sector: 0 if sector 0,
                                            1 if sector 1
                                     bit 4: DAM convention: 0 if normal
                                            (LDOS), 1 if reversed (TRSDOS 1.3)
                                     bit 3 - 0: reserved */
           Uchar cyl;         /* 28: Number of cylinders per disk */
           Uchar sec;         /* 29: Number of sectors per track (floppy);
                                     cyl (hard) */
           Uchar gran;        /* 30: Number of granules per track (floppy);
                                     gran (hard) */
           Uchar dcyl;        /* 31: Directory cylinder [mkdisk sets to 1;
                                     xtrs ignores] */
           char label[32];    /* 32: Volume label: 31 bytes terminated by 0 */
           char filename[8];  /* 64 - 71: 8 characters of filename (without
                                          extension) [Cervasio addition.  xtrs
                                          actually doesn't limit this to 8
                                          chars or strip the extension] */
           Uchar res2[184];   /* 72 - 255: reserved */
       } ReedHardHeader;

Authors
       mkdisk was written by Timothy Mann (see <http://tim-mann.org/>).

       The floppy file formats here called JV1 and JV3 were developed by  Jeff
       Vavasour  for  his  MS-DOS-based  Model  I  and  Model  III/4 emulators
       (respectively).  They have become a de facto  standard  in  the  TRS-80
       emulation  community,  and  much  TRS-80  software  is available on the
       Internet in .dsk format.  Thanks to Jeff for designing and  documenting
       the formats.

       The  format here called DMK was developed by David Keil for his MS-DOS-
       based Model 4 emulator.  This format has the advantage that it can rep-
       resent  essentially  everything  the  original  TRS-80 floppy disk con-
       trollers can write, including all forms of copy protected disk.  Thanks
       to David for designing and documenting this format.

       The  hard  drive  format  was developed by Matthew Reed for his MS-DOS-
       based Model I/III and Model 4 emulators.  I have duplicated his  format
       to  allow  users  to  exchange  HDV  hard drive images between xtrs and
       Matthew's emulators.  Thanks to Matthew for designing  the  format  and
       providing documentation.

See also
       xtrs(1)

       Common  File  Formats for Emulated TRS-80 Floppy Disks <http://www.tim-
       mann.org/trs80/dskspec.html> by Tim Mann; a copy may be locally  avail-
       able with your xtrs installation at /usr/share/doc/xtrs/dskspec.html.

xtrs                              2017-04-16                         mkdisk(1)