Date : Thu, 23 Jul 2009 21:25:52 +0100
From : blip@... (John)
Subject: DDOS question - To decode or not decode /. MSHIFT
Thanks Jonathan / both Andrews
I got some disks read using an old Watford 1.54T I found.
Unfortunately the Beeb started freezing and now emits a constant Beep on
switch on, so I might have some work to do!
>From scouring the internet, the MegaROM does an *MSHIFT but if Andrew H's
suggestion works as well, I am all for it.
Anyone out there able to burn a couple of ROMs at reasonable cost? :)
Regards
John
-----Original Message-----
From: bbc-micro-bounces+blip=blipit.com@...
[mailto:bbc-micro-bounces+blip=blipit.com@...] On Behalf Of
Jonathan Graham Harston
Sent: 23 July 2009 08:39
To: bbc-micro@...
Subject: Re: [BBC-Micro] 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.
_______________________________________________
bbc-micro mailing list
bbc-micro@...
http://lists.cloud9.co.uk/mailman/listinfo/bbc-micro