diff options
| -rw-r--r-- | fenders.1 | 34 | ||||
| -rw-r--r-- | fenders.c | 30 | ||||
| -rw-r--r-- | fenders.rst | 32 | 
3 files changed, 57 insertions, 39 deletions
@@ -27,7 +27,7 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]  .\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]  .in \\n[rst2man-indent\\n[rst2man-indent-level]]u  .. -.TH "FENDERS" 1 "2024-05-08" "0.2.1" "Urchlay's Atari 8-bit Tools" +.TH "FENDERS" 1 "2024-05-09" "0.2.1" "Urchlay's Atari 8-bit Tools"  .SH NAME  fenders \- Install Fenders 3-sector loader in boot sectors of an ATR image  .\" RST source for fenders(1) man page. Convert with: @@ -63,7 +63,7 @@ Print this help message.  DON\(aqT reboot (coldstart) the Atari if Reset is pressed. The  default is to coldstart.  .TP  .B  \-b -Create \fBinfile\fP as a blank ATR image and update it +Create \fBinfile\fP as a blank single\-density ATR image and update it  in\-place. This option requires \fBaxe\fP to be present on  \fIPATH\fP\&. May not be used when reading standard input.  .TP @@ -145,18 +145,20 @@ When installing the boot loader on a double\-density disk, sector 720 is  sector 720 is either unusable by DOS, or not used unless  the  disk  is  completely full, so this is less of a problem than you might think.  .sp -\fBfenders\fP  and  the  \fBfenders\fP boot\-loader code will work with DOS -2.5 "enhanced density" formatted floppies, but only partially: files -that  use sectors above 720 will not appear in the menu (these are the -same files that DOS 2.5 lists with <> around the filename). -.sp -\fBfenders\fP only works on Atari DOS 2.x and compatible (MyDOS, DOS  XL,  et -al) single\-sided disk images, either single\-density (720 sectors, 90K), -double\-density (720 sectors, 180K), or "1050  enhanced"  density  (1040 -sectors, 130K, although 1050 enhanced density images must be in DOS 2.5 -format, \fInot\fP MyDOS, and see \fBLIMITATIONS\fP below).  Other non\-standard  DOS -formats  such  as SpartaDOS or Atari DOS 3.0 and 4.0 are not supported. -Atari DOS 1.0 may or may not work (untested). +\fBfenders\fP has better compatibility with DOS 2.5 than the original +Atari version. Any files occupying sectors >=720 (the ones with <> +around the name) have their directory status bytes adjusted to make +them look like regular DOS 2.0 files. This allows them to display and +load correctly. The original Atari Fenders installer doesn\(aqt do this, +but the \fBfenders\fP author wrote a BASIC program to do the job, ages +ago. +.sp +\fBfenders\fP only works on Atari DOS 2.x and compatible (MyDOS, DOS XL, +et al) single\-sided disk images, either single\-density (720 sectors, +90K), double\-density (720 sectors, 180K), or "1050  enhanced" density +(1040 sectors, 130K, although 1050 enhanced density images must be in +DOS 2.5 format, \fInot\fP MyDOS). Other incompatible DOS formats such as +SpartaDOS or Atari DOS 1.0/3.0/4.0 are not supported.  .sp  The \fBfenders\fP boot loader source code distributed with \fBfenders\fP  is not the original  source  code  (which  has never been @@ -233,10 +235,6 @@ be used for file storage.  No checking for non\-standard formats (SpartaDOS, DOS 3, MyDOS with  subdirectories, dedicated bootdisks, etc) is done.  .sp -If an "enhanced" 1050 density disk image has the bootloader  installed, -it  won\(aqt  display  the  files  using sectors above 720 (the ones which -would appear as \fI<filename.ext>\fP in the DOS 2.5 directory). -.sp  Actually, the above limitations are a direct result of  the  fact  that  \fBfenders\fP  deals  with the disk image at the "sector" level, and contains  no code that understands the files, directory, or VTOC  on  the  image. @@ -380,9 +380,33 @@ int main(int argc, char **argv) {  	}  	if(dens == SD) { -		/* single density can just use a simple copy loop */ -		while( (c = getc(in)) != EOF ) +		int offs = 0, sectorcount = 0, fixcount = 0; +		/* single density can just use a simple copy loop... except we want +			to make DOS 2.5 extended files visible. <FILE> in the dir listing +			means the status byte is $03, change it to normal file ($42). */ +		while( (c = getc(in)) != EOF ) { +			if(offs == 45569) { /* LSB of number-of-sectors, VTOC offset 1 */ +				sectorcount = c; +			} else if(offs == 45570) { /* MSB of number-of-sectors, VTOC offset 2 */ +				sectorcount |= (c << 8); +				if(sectorcount == 1010) +					fprintf(stderr, SELF ": DOS 2.5 disk detected, fixing extended files.\n"); +			} else if(offs >= 45696 && offs < 46720 && (offs % 16 == 0)) { +				if(sectorcount == 1010 && c == 0x03) { +					c = 0x42; +					fixcount++; +				} +			}  			putc(c, out); +			offs++; +		} +		if(sectorcount == 1010) { +			if(fixcount) +				fprintf(stderr, SELF ": fixed %d extended file%s.\n", +						fixcount, (fixcount == 1 ? "" : "s")); +			else +				fprintf(stderr, SELF ": no extended files to fix.\n"); +		}  	} else {  		/* double density: copy sectors 4-719 as-is... */  		for(c=4; c<720; c++) { @@ -413,8 +437,6 @@ int main(int argc, char **argv) {  			density images. */  		/* TODO: examine directory sectors, look for: -			- DOS 2.5 extended files. Either warn about them, or clear the -			extended flag (which causes the bootloader to load them just fine).  			- MyDOS subdirectories. It's probably best to abort in that case.  			- Non-DOS-compatible disk formats (boot disks, SpartaDOS, Atari  			DOS 3 or 4). diff --git a/fenders.rst b/fenders.rst index fc46798..bc0bc17 100644 --- a/fenders.rst +++ b/fenders.rst @@ -44,7 +44,7 @@ OPTIONS        DON'T reboot (coldstart) the Atari if Reset is pressed. The  default is to coldstart.  -b -      Create **infile** as a blank ATR image and update it +      Create **infile** as a blank single-density ATR image and update it        in-place. This option requires **axe** to be present on        *PATH*. May not be used when reading standard input. @@ -125,18 +125,20 @@ When installing the boot loader on a double-density disk, sector 720 is  sector 720 is either unusable by DOS, or not used unless  the  disk  is  completely full, so this is less of a problem than you might think. -**fenders**  and  the  **fenders** boot-loader code will work with DOS -2.5 "enhanced density" formatted floppies, but only partially: files -that  use sectors above 720 will not appear in the menu (these are the -same files that DOS 2.5 lists with <> around the filename). - -**fenders** only works on Atari DOS 2.x and compatible (MyDOS, DOS  XL,  et -al) single-sided disk images, either single-density (720 sectors, 90K), -double-density (720 sectors, 180K), or "1050  enhanced"  density  (1040 -sectors, 130K, although 1050 enhanced density images must be in DOS 2.5 -format, *not* MyDOS, and see **LIMITATIONS** below).  Other non-standard  DOS -formats  such  as SpartaDOS or Atari DOS 3.0 and 4.0 are not supported. -Atari DOS 1.0 may or may not work (untested). +**fenders** has better compatibility with DOS 2.5 than the original +Atari version. Any files occupying sectors >=720 (the ones with <> +around the name) have their directory status bytes adjusted to make +them look like regular DOS 2.0 files. This allows them to display and +load correctly. The original Atari Fenders installer doesn't do this, +but the **fenders** author wrote a BASIC program to do the job, ages +ago. + +**fenders** only works on Atari DOS 2.x and compatible (MyDOS, DOS XL, +et al) single-sided disk images, either single-density (720 sectors, +90K), double-density (720 sectors, 180K), or "1050  enhanced" density +(1040 sectors, 130K, although 1050 enhanced density images must be in +DOS 2.5 format, *not* MyDOS). Other incompatible DOS formats such as +SpartaDOS or Atari DOS 1.0/3.0/4.0 are not supported.  The **fenders** boot loader source code distributed with **fenders**  is not the original  source  code  (which  has never been @@ -215,10 +217,6 @@ be used for file storage.  No checking for non-standard formats (SpartaDOS, DOS 3, MyDOS with  subdirectories, dedicated bootdisks, etc) is done. -If an "enhanced" 1050 density disk image has the bootloader  installed, -it  won't  display  the  files  using sectors above 720 (the ones which -would appear as *<filename.ext>* in the DOS 2.5 directory). -  Actually, the above limitations are a direct result of  the  fact  that  **fenders**  deals  with the disk image at the "sector" level, and contains  no code that understands the files, directory, or VTOC  on  the  image.  | 
