Jump to content
  • entries
    45
  • comments
    10
  • views
    10,376

Fixing the Bellcom disks


Atari_Ace

522 views

This post is about the Bellcom disks, a large collection of largely public domain software sold out of Canada by Don Bell back in the late 1980s and early 1990s. I became interested in this collection when I downloaded the ABBUC "Atari Pooldisk Two" (it's on archive.org, e.g. https://archive.org/details/cdrom_PoolDisk_Too_disc2, although I believe that's actually disk 1). It was the largest set of disks on that CD (967 images), and contained quite an assortment of software for the Atari. It was also clear when I started examining the disks that parts of the archive had bit rotted.

So let's fight bit rot! The process is as follows:

  1. Identify all disks which are collections of files (largely DOS 2.0/2.5 format disks).
  2. Validate the integrity of the files on each disk by following the next sector links.
  3. When we find a file with integrity issues, look for an alternate source for the file to assist in restoring the data.

The last post outlined the larger parts of steps 1+2 (but omitted the code for brevity). Step three is actually simpler than you'd think. Find a part of the file that isn't bit rotted and is somewhat unique and grep for similar contents on the rest of the Pooldisk archive. There's a number of ways to do that, but given my love of Perl, here's what I've been using, a recurse binary grep routine, just add the read_file from the previous routines.

sub bgrep_dir {
  my ($path, $pattern) = @_;
  my (@dirs, @files);
  opendir my $dh, $path or return;
  for (readdir $dh) {
    push @dirs, $_ if -d "$path/$_" && $_ ne "." && $_ ne "..";
    push @files, $_ if /\.atr$/i;
  }
  foreach my $dir (@dirs) {
    bgrep_dir("$path/$dir", $pattern);
  }
  foreach my $file (@files) {
    my $buff = read_file("$path/$file");
    print "Binary file $path/$file matches\n" if $buff =~ $pattern;
  }
}

sub bgrep {
  my $pattern = shift;
  bgrep_dir('.', qr/$pattern/);
}

bgrep(@ARGV);

Let's start with two disks that have zero sectors where there is another copy of the data in the Bellcom collection.

D112_B.atr: Sector 182 is empty, affecting BBKART.OBJ (BBK Artist).

atr.pl -copy 642.atr 95 D112_B.atr 182 + fix the sector links
 
281.atr: Sector 327 is empty, affecting DBLDECKR.OBJ (Double Decker).
atr.pl -copy 417.atr 664 281.atr 327 + fix the sector links

281.atr

I'll append additional patched images over time to this post (at least 20 images have identifiable issues). But next time we're going to change the patch routine so that we won't usually need to manually fix the sector links.

  • Like 1
  • Thanks 1

0 Comments


Recommended Comments

There are no comments to display.

Guest
Add a comment...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...