DiskImageInterlacer.java

Including authentic errors (‘interlace’ rather than ‘interleave’) and typos.

/**
 * 
 */
package uk.bl.dpt.bbc;

import java.io.DataOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.RandomAccessFile;

/**
 * 
 * Using BACKUP, form here http://mdfs.net/Apps/DiskTools/
 * 
 * We find retrieved images that do not make emulators happy. So, looking here
 * 
 *  - http://www.8bs.com/filecon.htm#dit
 *  - http://mdfs.net/Docs/Books/HADFSMan/Chap5.htm
 *  
 * Implies that raw images from BACKUP are not interlaced, but DSD files are expected to be.
 * 
 * Therefore, we re-interlace them, like this...
 * 
 * @author AnJackson
 *
 */
public class DiskImageInterlacer {

    /**
     * @param args
     * @throws IOException 
     */
    public static void main(String[] args) throws IOException {
        interlaceImage("input/DISK01_DSD", "output/DISK01.DSD" );
        interlaceImage("input/DISK02_DSD", "output/DISK02.DSD" );
        interlaceImage("input/DISK03_DSD", "output/DISK03.DSD" );
        interlaceImage("input/DISK04_DSD", "output/DISK04.DSD" );
        interlaceImage("input/DISK05_DSD", "output/DISK05.DSD" );
//        interlaceImage("input/DISK06_DSD", "output/DISK06.DSD" );
        interlaceImage("input/DISK07_DSD", "output/DISK07.DSD" );
        interlaceImage("input/DISK08_DSD", "output/DISK08.DSD" );
        interlaceImage("input/DISK09_DSD", "output/DISK09.DSD" );
        interlaceImage("input/DISK10_DSD", "output/DISK10.DSD" );
        interlaceImage("input/DISK11_DSD", "output/DISK11.DSD" );
        interlaceImage("input/DISK12_DSD", "output/DISK12.DSD" );
        interlaceImage("input/DISK13_DSD", "output/DISK13.DSD" );
        interlaceImage("input/DISK14_DSD", "output/DISK14.DSD" );
        interlaceImage("input/DISK15_DSD", "output/DISK15.DSD" );
        interlaceImage("input/ELITE_DSD", "output/ELITE.DSD" );
    }
    
    /**
     * @param inputImage
     * @param outputImage
     * @throws IOException
     */
    public static void interlaceImage( String inputImage, String outputImage ) throws IOException {
        System.out.println("Converting "+inputImage+" to "+outputImage);
        RandomAccessFile in = new RandomAccessFile( inputImage, "r");
        int sectorSize = 256*10;
        int sideSize = sectorSize*80;
        int diskSize = sideSize*2;
        if( (int)in.length() != diskSize ) {
            System.out.println("Wrong size.");
            return;
        }
        byte[] tempId = new byte[diskSize];
        in.read(tempId, 0, diskSize);
        in.close();

        DataOutputStream out = new DataOutputStream(new FileOutputStream( outputImage ));
        for( int t = 0; t < 80; t++ ) {
            for( int s = 0; s < 2; s++ ) {
                out.write(tempId, s*sideSize + sectorSize*t, sectorSize);
            }
        }
        out.close();
    }

}

Download

Click here to download this source file.

Creative Commons Licence
Keeping Codes
by Andrew N. Jackson
comments powered by Disqus