<< Previous Message Main Index Next Message >>
<< Previous Message in Thread This Month Next Message in Thread >>
Date   : Thu, 23 Jul 2009 08:39:10 +0100
From   : jgh@... (Jonathan Graham Harston)
Subject: DDOS question - To decode or not decode

"John" wrote:
> Is there any way to 'decode' a disk format using a Beeb?
 
What do you mean by "decode"?
 
If you mean, work out what disk format has been used - yes, very
easily. See http://mdfs.net/Docs/Comp/Disk/Format/DFS. Essentially,
large disks are indicated by the disk size bytes indicating a disk
larger than 256K, and large catalogues are indicated by the start
of sector 2 being eight &AA bytes.
 
> I have some disks which used a DDFS/DDOS filing system and I am not sure if
> they were recorded using Watford or Opus DDOS/DDFS
 
If you mean can you read double-density disks with a single density
controller, then no.
 
> All I have to test is a fairly standard BBC+
 
Ah ha, very useful! A standard B+ has a double density disk
controller, so you will be able to read double-density formatted
disks. If they are not formatting with a DFS filesystem, you will
have to access the data by reading sectors individually with OSWORD
&7F. DFS 2.xx lets you specify the density of the disk to read -
unfortunately that's broken on the Master as the authors didn't
realise the hardware had moved and didn't adjust the firmware to
match.
 
The following routine can be used to perform an OSWORD &7F call
that takes three parameters, such as Write (&4B) and Read (&53),
and a specified density. It requires a standard global control
block with X%=ctrl, Y%=X%DIV256.
 
    DEFFNdisk(addr%,cmd%,drv%,trk%,sec%,num%,den%):LOCAL fs%
    fs%=FNfs:IF fs%<>8:*FX143,18,4
    REPEAT
      X%?0=drv%+den%*24+32:X%!1=addr%:X%?5=3
      X%?6=cmd%:X%?7=trk%:X%?8=sec%:X%?9=num%OR&20
      A%=127:CALL&FFF1:A%=X%?10
    UNTIL A%<>&10:IF fs%<>4:OSCLI"FX143,18,"+STR$ fs%
    =A%
    DEFFNfs:LOCAL A%,E%,Y%:=(USR&FFDA)AND&FF
 
So, result%=FNdisk(mem%, &53, 0, 0, 1, 1) will attempt to read 1
single density sector from track 0, sector 0. result%=FNdisk(mem%,
&53, 0, 0, 1, 2) will attempt to read 1 double density sector from
track 0, sector 0.
 
-- 
J.G.Harston - jgh@...                - mdfs.net/User/JGH
The most perfect world is an imperfect world as the imperfections
give people a reason to strive to change it.
<< Previous Message Main Index Next Message >>
<< Previous Message in Thread This Month Next Message in Thread >>