[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Twilight zone?



Hi, y'all!

On Jan 25, 10:12 pm, "mdj" <mdj....@gmail.com> wrote:
> I would guess that the time it did work, the target volume was already
> formatted as a 400k disk. Try formatting your target as single sided
> and give it another go.
> Matt

    Matt, I tried your suggestion but it didn't work.

    One of these days I'll look at the source I created for the Apple 
System Utility program to see if I can figure out why it worked that 
one time.  In the meantime I wrote a program to copy an MFS disk on an 
Apple II.  Source is included below my sig.   Executable and assembly 
language source available on request.

Willi

program copyMFS;
{ Copy a Macintosh File System disk using two 3.5 inch drives on an 
Apple II }

type block = array[0..511] of char;
     track = array[0..7] of block;

var c: char;
    ss, sd, ds, dd, i: integer;
    buff: track;

function key_pressed: boolean;
  begin
    key_pressed := false;
#i KPI:KEYPRESS.INC
  end;

function read_key: char;
  begin
    read_key := ' ';
#i KPI:READKEY.INC
  end;

procedure blockread(slot, drive, bn, count: integer; var b: track);
  begin
#i KPI:BLKRD.INC
  end;

procedure blockwrite(slot, drive, bn, count: integer; var b: track);
  begin
#i KPI:BLKWR.INC
  end;

function getSlot: integer;
  var s: char;
  begin
    write(' slot? ');
    repeat
      repeat
      until key_pressed;
      s := read_key
    until (s >= '1') and (s <= '7');
    writeln(s);
    getSlot := ord(s) - ord('0')
  end;

function getDrive: integer;
  var d: char;
  begin
    write(' drive? ');
    repeat
      repeat
      until key_pressed;
      d := read_key
    until (d = '1') or (d = '2');
    writeln(d);
    getDrive := ord(d) - ord('0')
  end;

begin
  write('Source');
  ss := getSlot;
  write('Source');
  sd := getDrive;
  write('Destination');
  ds := getSlot;
  write('Destination');
  dd := getDrive;
  writeln('Press any key when ready');
  repeat
  until key_pressed;
  c := read_key;
  for i := 0 to 99
    do begin
      blockread(ss, sd, i * 8, 8, buff);
      blockwrite(ds, dd, i * 8, 8, buff)
    end
end.