home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / ENTERPRS / CPM / UTILS / S / TRANS12C.LBR / TRANS-06.INC < prev    next >
Text File  |  2000-06-30  |  3KB  |  127 lines

  1.  
  2.  
  3. procedure FormatMS_DOS;
  4. {type
  5.   str40 = string[40];}
  6.  
  7. var
  8.   Ch:              char;
  9.   I:               integer;
  10.   FormatNumber:    integer;
  11.  
  12. {function Yes(Message: str40): boolean;
  13. begin
  14. write(Message, 'Y or N? ');
  15. readln(Ch);
  16. if (upcase(Ch) = 'Y') then
  17.   Yes := true
  18. else
  19.   Yes := false;
  20. end;}
  21.  
  22.  
  23. type
  24.   User0Command = record   {8502 BIOS function 4, Subfunction 8: }
  25.     Command: byte;        {  Format a diskette                  }
  26.     Par4:    byte;
  27.     Par5:    byte;
  28.     Par6:    byte;
  29.     Par7:    byte;
  30.     Par8:    byte;
  31.     Par9:    byte;
  32.     Par10:   byte;
  33.     Par11:   byte;
  34.     end;
  35.  
  36. const
  37.   FormatCommand: array[0..3] of User0Command =
  38.    ((Command:38; Par4:129; Par5:0; Par6:2; Par7:39;    {MSDOS-1 DS}
  39.      Par8:8; Par9:0; Par10:0; Par11:0),
  40.     (Command:6; Par4:129; Par5:0; Par6:2; Par7:39;     {MSDOS-1 SS}
  41.      Par8:8; Par9:0; Par10:0; Par11:0),
  42.     (Command:38; Par4:129; Par5:0; Par6:2; Par7:39;    {MSDOS-2 DS}
  43.      Par8:9; Par9:0; Par10:0; Par11:0),
  44.     (Command:6; Par4:129; Par5:0; Par6:2; Par7:39;     {MSDOS-2 SS}
  45.      Par8:9; Par9:0; Par10:0; Par11:0));
  46.  
  47. procedure LoadFormatCommand(EntryIndex: integer);
  48. var
  49.   I: integer;
  50. begin
  51. mem[$FD02] := 1;        {DRIVE#: device 8, drive 0}
  52. mem[$FD08] := 1;        {FAST set}
  53. mem[$FE00] := 9;        {@BUFFER: set to command length}
  54. for I := 0 to 8 do
  55.   mem[$FE01 + I] := mem[addr(FormatCommand[EntryIndex]) + I];
  56. end;
  57.  
  58.  
  59. begin   (* FormatMS_DOS *)
  60. if (bdos(CURDSK) <> 0) then
  61.   begin
  62.   writeln('Formatting MS-DOS disks will be done in Drive A.');
  63.   writeln('Insert a scratch CP/M disk in Drive A first, just to log onto it');
  64.   writeln('before proceeding with a blank disk to be formatted.');
  65.   BiosSelect(0, First);
  66.   end;
  67.  
  68. writeln;
  69. writeln('Enter the type of disk to be formatted:');
  70. writeln;
  71. writeln('     1   :   MSDOS-1 DS (8 sec/trk)');
  72. writeln;
  73. writeln('     2   :   MSDOS-1 SS (8 sec/trk)');
  74. writeln;
  75. writeln('     3   :   MSDOS-2 DS (9 sec/trk)');
  76. writeln;
  77. writeln('     4   :   MSDOS-2 SS (9 sec/trk)');
  78. writeln;
  79. writeln;
  80.  
  81. write('Which one (1 - 4)? ');
  82. repeat
  83.   read(KBD, Ch);
  84.   until (Ch in ['1'..'4']);
  85. writeln(Ch);
  86. FormatNumber := ord(Ch) - 49;
  87. FAT[1] := not FormatNumber;         {Disk Type Byte}
  88.  
  89. Stop := false;
  90. writeln;
  91. writeln('   ***   Insert a blank disk to be formatted in drive A now   ***');
  92. write('Type $ to begin formatting. ');
  93. repeat
  94.   read(KBD, Ch);
  95.   until (Ch = '$');
  96. writeln(Ch);
  97.  
  98. LoadFormatCommand(FormatNumber);  {8502 BIOS User function 4, Subfunction 8:}
  99. D := bios3(USERFUN, 4, 0, 0, 8);  { format a disk                           }
  100. Stop := (mem[$FD06] <> 0);        {VICDATA: Disk error status}
  101.  
  102. if Stop then
  103.   writeln('Error Formatting')
  104. else
  105.   begin
  106.   BiosSelect(0, First);      {initiallize drive for disk write}
  107.  
  108.   fillchar(Buffer, 512, 0);
  109.   Buffer[1] := chr(FAT[1]);
  110.   FirstFATSector := 1;
  111.   FATSize := (FormatNumber div 2) + 1;
  112.  
  113.   WriteSector(FirstFATSector, 0, addr(Buffer));
  114.   WriteSector(FirstFATSector + FATSize, 0, addr(Buffer));
  115.  
  116.   writeln;
  117.   if not BiosError then
  118.     writeln('Formatting complete');
  119.   end;
  120.  
  121. Continue;
  122.  
  123. bdos(RESETDSK);
  124. {bdos(LOGDSK, CPM_Drive);}
  125. end;
  126.  
  127.