home bbs files messages ]

Forums before death by AOL, social media and spammers... "We can't have nice things"

   comp.sys.apple2      Discussion about Apple II micros      56,720 messages   

[   << oldest   |   < older   |   list   |   newer >   |   newest >>   ]

   Message 55,928 of 56,720   
   Kent Dickey to All   
   Detecting sector order of .dsk images   
   23 Nov 22 22:12:24   
   
   From: kegs@provalid.com   
      
   There was a thread here about detecting the sector ordering of Apple II   
   5.25" .dsk images (unfortunately under Michael Mahon's FASTCIRC post).   
      
   I maintain that .dsk images should always be DOS 3.3 sector order, .do   
   images are always DOS3.3 sector order, and .po images are always ProDOS   
   order.  All images > 140KB are ProDOS order, as well as any unknown extension   
   (so harddrive images and 3.5" 800KB images are always ProDOS order).   
      
   The ease of creation of ProDOS images with tools like Cadius now means   
   people are creating many new images on modern computers.  If they name   
   their image files .dsk (which seems like the "right thing to do"), then   
   they've created new .dsk images in ProDOS order.   
      
   A description of sector order is at the end of this message, feel free to   
   skip it if you know this stuff, or don't care about the details.   
      
   As for detection, Applewin uses a simple easy-to-understand algorithm to   
   determine the sector order of .dsk images:   
      
   A .dsk defaults to DOS 3.3 sector order.  However, if a DOS 3.3 catalog   
   track appears to exist on track $11 by looking at the first 2 bytes of   
   each sector, when assuming the disk is in ProDOS order, then it treats the   
   .dsk image as ProDOS order.  Or, if a ProDOS volume directory appears to be   
   on blocks 2,3,4,5 on track $00 by looking at the first 4 bytes of each   
   block when treated as ProDOS order, then the .dsk is treated as ProDOS order.   
      
   I like this simple check, since it's looking for well-formed disk images   
   with normal catalog tracks.  This makes sense if a main source of the   
   images in ProDOS order is modern tools creating these images.  If an image   
   doesn't look like a normal DOS 3.3 disk or ProDOS (say, no OS at all, like   
   a game would do), then .dsk is always DOS 3.3 sector order.   
      
   But this detection seems to have a problem: if a user mounts a prodos1.dsk   
   created by Cadius in ProDOS order, it will work fine as long as the user   
   keeps using it as a normal disk.  But what if the user then, under   
   emulation, plays a game which wants to format a save disk to save   
   progress on, and picks this prodos1.dsk?  The resulting image probably   
   no longer has a valid catalog.  Applewin will read and write the   
   prodos1.dsk image in ProDOS order since that's what it knows to do for   
   as long as the user runs the game in one session.  But when stopped and   
   restarted later, the .dsk detection routine will now say the prodos1.dsk   
   image is DOS 3.3 order (since it cannot tell), and the saved game is   
   lost.   
      
   So my proposal:  Emulators should support detecting .dsk images as ProDOS,   
   but should use a very simple check like Applewin's.  And if a .dsk image   
   is determined to be ProDOS order, then the emulator should immediately   
   re-write the .dsk image file as DOS 3.3 order.  If the image is write-   
   protected or not writeable, then do nothing.  This solves the misdetection   
   problem of using .dsk images in ProDOS order--.dsk is always DOS 3.3 sector   
   order to the emulator   
      
   Kent   
      
   ----   
      
   As background, Apple II 5.25" disks generally contain 16 sectors of 256-bytes   
   each on 35 tracks.  On the physical disk, these sectors have a physical   
   sector number, counting from 0-15 in order on the disk.  DOS 3.3 knew it   
   could not read adjacent sectors that fast, so it has a table of logical   
   sectors to physical sectors, to try to give it more time to process   
   adjacent logical sectors.  All DOS 3.3 operations are on logical sectors.   
      
   Physical sector: 0 1 2 3 4 5 6 7 8 9 a b c d e f   
   Logical  sector: 0 7 e 6 d 5 c 4 b 3 a 2 9 1 8 f   
      
   This arrangement is great for booting DOS 3.3, where it reads logical sector   
   'f', then 'e', 'd', etc.  Once 'f' is found, 'e' is 3 sectors later, and   
   'd' is 2 sectors after that.  That is about as fast as the DOS 3.3 RWTS can   
   read.  It turns out, DOS 3.3's File Manager is so slow that between   
   reading sectors during LOAD or BLOAD, about half a track passes by while it   
   twiddles its thumbs between each sector.  This is why there are enhanced   
   DOS's which are more efficient.   
      
   ProDOS has a logical 512-byte block.  So it needs to map it's blocks to   
   sectors.  Here's that mapping for 5.25" disks.   
      
            ProDOS   block:   0    1    2    3    4    5    6    7   
   DOS 3.3 physical sector:  0,2  4,6  8,a  c,e  1,3  5,7  9,b  d,f   
   DOS 3.3 logical  sector:  0,e  d,c  b,a  9,8  7,6  5,4  3,2  1,f   
      
   In DOS3.3 sector order, the .do image has DOS 3.3 logical sectors 0...f   
   in ascending order.  This is what users would think is the natural order   
   for sectors since any sector editor would make the disk appear to be in   
   this order.   
      
   In ProDOS block order, a .po image has ProDOS blocks in ascending order 0...7,   
   which works out to DOS 3.3 logical sectors: 0,e,d,c,b,a,9,8,7,6,5,4,3,2,1,f.   
      
   Note the physical sector order does not matter at all for .dsk, .do, or   
   .po images.   
      
   In general, almost all "classic" .dsk images (created more than 20 years ago)   
   are in DOS 3.3 logical sector order since that's what tools of the time   
   generally did.  But now there are various ways to quickly make ProDOS images   
   on modern computers--and if users name their files .dsk, then they are   
   creating .dsk's in ProDOS order.   
      
   --- SoupGate-Win32 v1.05   
    * Origin: you cannot sedate... all the things you hate (1:229/2)   

[   << oldest   |   < older   |   list   |   newer >   |   newest >>   ]


(c) 1994,  bbs@darkrealms.ca