[comp.sys.atari.st] A hard disk tale

schoepf@DMZRZU71.BITNET (05/27/87)

I'm the proud owner of a hard disk.  I installed three partitions with
10, 6 and 4 MB and worked with them until last week when suddenly the
disk broke down.  What happened?

After three days (and some nights) of work I discovered that the HDX
program wrote bad partition information onto the disk boot sector.
Investigation of other hard disks showed that this seems to happen if
you do not choose one of the partition defaults.

To be more specific: I started from default 4-6-10 and changed it to
10-6-4.  The HDX program correctly computed the new partition sizes,
but did not change the partition start sectors.  This means that
partition #2 started after 4 Megabytes occupying the same space as the
last 6 MB of partition #1.  Needless to say what happened after I
reached the 4 MB limit on #1.

The first sector of every partition is that partition's boot sector
containing the information how it is structured: length of FAT, length
of directory, start of FAT/directory etc.

Overwriting this will confuse BIOS and hard disk driver.  The bios
parameter block you get from BIOS will contain real garbage.  Trying to
access this partition from TOS probably bombs the system.

Even worse: if you start your desktop with a window for this damaged
partition GEM will not even finish booting.

There is *NO* protection at all against errors while your DESKTOP.INF
file is being read and processed by GEM.

OK, so you boot again with a Floppy containing a new DESKTOP.INF..

BUT if you boot from the hard disk you have no chance to delete the
DESKTOP.INF, because to delete it you need the hard disk switched on
and connected before booting, but booting does not work...

You got no chance -- formatting is also impossible.

(How I got out of this CATCH-22 situation? See below!)

THIS IS A VERY BAD BUG.  After some weeks or months of decent work it
jumops at you from behind and you don't know why and how to get away
from it.  There is no documentation how to access the hard disk boot
sector.  (We found it out by disassembling the hard disk driver -- took
half a day of two people's time).

MORAL: Hard disk owners, BEWARE!
       DO NOT CHOOSE YOUR OWN PARTITION SIZES UNTIL THIS IS FIXED!

But what if it really happens?

There is a way around.  You need a floppy with an executable boot
sector that starts GEM.  Then you start the hard disk driver, delete
DESKTOP.INF and/or deinstall the hard disk boot program, etc.  If
everything fails you'll have to reformat the hard disk.

But how do you generate this special boot sector?
Well, there is a XBIOS function...

I include the little assembler program that I used:

********************************CUT HERE***********************
        text
*
*  First: generate boot sector contents in memory
*
        move.w  #1,-(a7)        * make boot sector executable
        move.w  #3,-(a7)        * 2 = single sided, 3 = double sided
        move.l  #$2000000,-(a7) * generate random serial number
        pea     BOOT(pc)        * buffer for boot sector
        move.w  #18,-(a7)       *  18 = PROTOBT
        trap    #14             * XBIOS
        add.l   #14,a7
*
*  Then: write boot sector to disk, side 0, track 0, sector 1
*
        move.w  #1,-(a7)        * count
        move.w  #0,-(a7)        * side
        move.w  #0,-(a7)        * track
        move.w  #1,-(a7)        * sector
        move.w  #0,-(a7)        * device
        clr.l   -(a7)           * filler
        pea     BOOT(pc)        * buffer
        move.w  #9,-(a7)        *  9 = FLOPWR
        trap    #14             * XBIOS
        add.l   #20,a7
*
*  Last: stop running
*
        clr.w   -(a7)
        trap    #1
*
*       BUFFER for boot sector, must be 512 bytes long
*
BOOT
        bra     start(pc)       * bra to start of boot code
        dc.b    0,0,0,0,0,0     *  unused
        ds.b    22              * reserved for disk parameter block
start
        move.l  (a7)+,a5        * prepare for double return
        move.l  (a7)+,a5        *   dito
        pea     null(pc)        * empty environment string
        pea     null(pc)        * no arguments
        pea     null(pc)        * no filename
        move.w  #5,-(a7)        * create basepage
        move.w  #$4b,-(a7)      * Pexec
        trap    #1              * TOS
        add.l   #14,a7
        move.l  d0,a0           * save address of base page
        move.l  $4fe,8(a0)      * fill in GEM's start address
        pea     null(pc)        * no environment
        move.l  a0,-(a7)        * base page address
        pea     null(pc)        * no filename
        move.w  #4,-(a7)        * start program
        move.w  #$4b,-(a7)      * Pexec
        trap    #1              * TOS
        add.l   #14,a7
        jmp     (a5)
null    dc.l    0
*
*   reserve enough space (actually too much, but it doesn't matter)
*
        ds.b    512
        end
***************************CUT HERE**************************

In the hope that nobody else will spend his/her days and nights on
this any more,

    Rainer Schoepf
    <SCHOEPF@DMZRZU71.BITNET>

dyer@atari.UUCP (Landon Dyer) (05/28/87)

in article <8705271449.AA18225@ucbvax.Berkeley.EDU>, schoepf@DMZRZU71.BITNET says:
> 
> 
> I'm the proud owner of a hard disk.  I installed three partitions with
> 10, 6 and 4 MB and worked with them until last week when suddenly the
> disk broke down.  What happened?
> 
> After three days (and some nights) of work I discovered that the HDX
> program wrote bad partition information onto the disk boot sector.
> Investigation of other hard disks showed that this seems to happen if
> you do not choose one of the partition defaults.
>
> [etc...]

Right.  This (serious) bug was fixed a *long* time ago in
Revision 8 of HDX; when you pull down the "About HDX..." menu,
you should see a date of September 29, 1986 (or later).

If you have an earlier version of HDX, or you know friends that
do, get thee hence to your dealer and get an update.
-- 
-Landon Dyer, Atari Corporation	       {sun,amdcad,lll-lcc,imagen}!atari!dyer
The views expressed here do not necessarily reflect those	     SEGMENTS
of Atari or the AI software that has taken over my brain.	      ARE FOR
Yow!  I am waiting for my warranty-expired interrupt!			WORMS