home *** CD-ROM | disk | FTP | other *** search
- Newsgroups: comp.unix.bsd
- Path: sparky!uunet!spool.mu.edu!yale.edu!qt.cs.utexas.edu!cs.utexas.edu!sun-barr!sh.wide!wnoc-kyo!kuis!kudpc!nucc!nitgw!rokugogw!masuda
- From: masuda@rokugo.co.jp (Yoshihiro Masuda)
- Subject: [386bsd] physicaly formatter for floppy disk
- Message-ID: <1992Nov5.073156.29595@rokugo.co.jp>
- Reply-To: masuda@babel.ics.nitech.ac.jp
- Organization: ROKUGO SYSTEM ELC. Co.,LTD.
- Date: Thu, 5 Nov 1992 07:31:56 GMT
- Lines: 330
-
- Hi!
-
- I managed to make a program to physically format a floppy disk on 386bsd.
-
- It is just a quick hack. There is a possibility that use of this package
- may cause trouble.
-
- So...
-
- USE THIS PACKAGE ON YOUR OWN RISK.
-
- Enjoy!
-
- --
- masuda@rokugo.co.jp
- $BA}ED2BBY(B@$BO;9g%7%9%F%`EE;R9)6H(B
- $B$^$9$@$h$7$R$m(B@$B$m$/$4$&$7$9$F$`$G$s$7$3$&$.$g$&(B
-
- --8<-----------------------
- #! /bin/sh
- # This is a shell archive. Save it in a file, remove anything before
- # this line, and then unpack it by entering "sh file". Note, it may
- # create directories; files and directories will be owned by you and
- # have default permissions.
- #
- # This archive contains:
- #
- # fdformat
- # fdformat/FDFORMAT.change.file
- # fdformat/README.eng
- # fdformat/kernel
- # fdformat/kernel/fdformat.diff
- # fdformat/README.jis
- # fdformat/Makefile
- # fdformat/format.c
- #
- echo c - fdformat
- mkdir fdformat > /dev/null 2>&1
- echo x - fdformat/FDFORMAT.change.file
- sed 's/^X//' >fdformat/FDFORMAT.change.file << 'END-of-fdformat/FDFORMAT.change.file'
- X/sys/sys/ioctl.h
- X FDIOCFORMAT
- X/sys/i386/i386/conf.c
- X device entry
- X/sys/i386/isa/fd.c
- X fdioctl
- X fdintr
- END-of-fdformat/FDFORMAT.change.file
- echo x - fdformat/README.eng
- sed 's/^X//' >fdformat/README.eng << 'END-of-fdformat/README.eng'
- XFIRST OF ALL:
- X
- X 386BSD is an excellent OS. Now we can throw away our good old MS-DOS
- X...almost.
- X
- X It is very sad to find things which we cannot do with 386BSD but can
- Xwith MS-DOS...for example, formatting floppy disks. So first of all I
- Xmade a formatter for formatting floppy disks.
- X
- XCHANGES:
- X
- Xsys/i386/isa/fd.c:
- X Adding fdioctl().
- X Adding formatting process to fdintr().
- X
- Xsys/sys/ioctl.h
- X Adding FDIOCFORMAT and FDIOCM.
- X
- XHOW TO INSTALL:
- X
- X1) Apply patch to kernel, as shown below.
- X
- X # cd /sys
- X # patch -p < fdformat.diff
- X
- X This may be rejected because of the changes applied to i386/
- Xi386/conf.c. In such a case, add fdioctl manually by checking
- X.rej.
- X
- X Make sure ioctl to /dev/rfd* calls fdioctl.
- X
- X2) Add
- X
- X options FDFORMAT
- X
- Xto sys/i386/conf/MYCONFIG.
- X
- X3) Re-configurate kernel as below.
- X
- X # cd /sys/compile/MYCONFIG
- X # make depend
- X # make
- X
- X4) Copy the new kernel to /, as shown below.
- X
- X # mv /386bsd /386bsd.old
- X # cp 386bsd /386bsd
- X
- X5) Make and install fdformat, as shown below.
- X
- X # make
- X # make install
- X
- X6) Reboot.
- X
- X # sync; sync; sync;
- X # fastboot <- or shutdown, halt, whatever you like.
- X
- X Now all the instllation is done.
- X
- XHOW TO USE:
- X
- XUsage: % fdformat [special device]
- X
- X If special device is not specified, you will be asked if you want to
- Xformat /dev/rfd0a. If you choose y, formatting will start.
- X
- X Devices are
- X
- X a: 1.4MB
- X b: 1.2MB
- X c/d: 360KB
- X
- X For more information, see the array in the beginning of i386/isa/fd.c.
- X
- XKNOWN BUGS:
- X
- X1) It is rather slow to read from and write to floppy disks formatted
- Xwith this formatter. Will someone please tell me the correct interlib
- Xand length of GAP3?
- X
- X2) Fdioctl only checks if the device is opened writable.
- X
- X#This means anyone can execute format with ioctl(fd, FDIOCFORMAT, &track).
- X
- X If you think this may cause trouble, try to do with changeing the
- Xpermission for /dev/rfd??.
- X
- X3) This program may format floppy disks when it shouldn't, which can
- Xcause trouble.
- X
- X4) This program can not work well on TOSHIBA J3100SLVW.
- X
- X If you find any other problems, please let me know. You can contact
- Xme at:
- X
- Xmasuda@rokugo.co.jp (Please do not send mail from outside of Japan)
- XTAE00343( (NIFTY serve)
- Xpcs34996 (ascii net)
- X
- END-of-fdformat/README.eng
- echo c - fdformat/kernel
- mkdir fdformat/kernel > /dev/null 2>&1
- echo x - fdformat/kernel/fdformat.diff
- sed 's/^X//' >fdformat/kernel/fdformat.diff << 'END-of-fdformat/kernel/fdformat.diff'
- XOnly in /sys: ROADMAP
- XOnly in /sys: compile
- XOnly in /sys: conf
- XOnly in /sys: ddb
- XOnly in /sys/i386: Makefile
- XOnly in /sys/i386: boot
- XOnly in /sys/i386: conf
- XOnly in /sys/i386/i386: autoconf.c
- Xdiff -c -r ../orig/i386/i386/conf.c /sys/i386/i386/conf.c
- X*** ../orig/i386/i386/conf.c Wed Sep 30 15:50:08 1992
- X--- /sys/i386/i386/conf.c Sun Oct 4 23:50:57 1992
- X***************
- X*** 90,96 ****
- X #include "fd.h"
- X #if NFD > 0
- X int Fdopen(),fdclose(),fdstrategy();
- X! #define fdioctl enxio
- X #define fddump enxio
- X #define fdsize NULL
- X #else
- X--- 90,100 ----
- X #include "fd.h"
- X #if NFD > 0
- X int Fdopen(),fdclose(),fdstrategy();
- X! #ifdef FDFORMAT
- X! int fdioctl();
- X! #else
- X! # define fdioctl nullop
- X! #endif
- X #define fddump enxio
- X #define fdsize NULL
- X #else
- XOnly in /sys/i386/i386: conf.c.orig
- XOnly in /sys/i386/i386: cons.c
- XOnly in /sys/i386/i386: cons.h
- XOnly in /sys/i386/i386: db_disasm.c
- XOnly in /sys/i386/i386: db_interface.c
- XOnly in /sys/i386/i386: db_trace.c
- XOnly in /sys/i386/i386: dkbad.c
- XOnly in /sys/i386/i386: genassym.c
- XOnly in /sys/i386/i386: in_cksum.c
- XOnly in /sys/i386/i386: locore.s
- XOnly in /sys/i386/i386: locore.s.orig
- XOnly in /sys/i386/i386: machdep.c
- XOnly in /sys/i386/i386: math_emu.h
- XOnly in /sys/i386/i386: math_emulate.c
- XOnly in /sys/i386/i386: mem.c
- XOnly in /sys/i386/i386: pmap.c
- XOnly in /sys/i386/i386: swapgeneric.c
- XOnly in /sys/i386/i386: symbols.raw
- XOnly in /sys/i386/i386: sys_machdep.c
- XOnly in /sys/i386/i386: trap.c
- XOnly in /sys/i386/i386: vm_machdep.c
- XOnly in /sys/i386: include
- XOnly in /sys/i386/isa: RCS
- XOnly in /sys/i386/isa: TODO
- XOnly in /sys/i386/isa: as.c
- XOnly in /sys/i386/isa: asreg.h
- XOnly in /sys/i386/isa: clock.c
- XOnly in /sys/i386/isa: com.c
- XOnly in /sys/i386/isa: com.c.rej
- XOnly in /sys/i386/isa: com.old
- XOnly in /sys/i386/isa: comreg.h
- Xdiff -c -r ../orig/i386/isa/fd.c /sys/i386/isa/fd.c
- X*** ../orig/i386/isa/fd.c Fri Oct 2 15:50:26 1992
- X--- /sys/i386/isa/fd.c Sun Oct 4 21:21:15 1992
- X***************
- X*** 53,58 ****
- X--- 53,60 ----
- X #include "i386/isa/rtc.h"
- X #undef NFD
- X #define NFD 2
- X+ #define FDPRI (PZERO+11)
- X+ #define FORMATDEBUG 0 /* turn on this for debub */
- X
- X #define FDUNIT(s) ((s>>3)&1)
- X #define FDTYPE(s) ((s)&7)
- X***************
- X*** 95,100 ****
- X--- 97,122 ----
- X
- X /* state needed for current transfer */
- X static fdc; /* floppy disk controller io base register */
- X+ #ifdef FDFORMAT
- X+ static int fd_unitno;
- X+ static int formatting;
- X+ #include "malloc.h"
- X+ #include "vm/vm.h"
- X+ #include "sys/proc.h"
- X+ struct id_t { char cylin; char head; char sec; char sectype;};
- X+ static struct id_t *id;
- X+ static struct id_t *tid;
- X+ static struct id_t idbuf[1024];
- X+
- X+ static int format_type;
- X+ static int format_head;
- X+ static int format_cylin;
- X+ static char format_sectors[] = {
- X+ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18
- X+ }; /* data base for interleave */
- X+ static int FormatError;
- X+ #endif
- X+
- X int fd_dmachan;
- X static int fd_skip;
- X static int fd_state;
- X***************
- X*** 318,323 ****
- X--- 340,358 ----
- X return (0);
- X }
- X
- X+ int
- X+ in_fdcr()
- X+ {
- X+ return inb(fdc+fdsts);
- X+ }
- X+
- X+ out_fdcr(x)
- X+ int x;
- X+ {
- X+ outb(fdc+fdsts,x);
- X+ return (0);
- X+ }
- X+
- X static fdopenf;
- X /****************************************************************************/
- X /* fdopen/fdclose */
- X***************
- X*** 329,335 ****
- X int unit = FDUNIT(minor(dev));
- X /*int type = FDTYPE(minor(dev));*/
- X int s;
- X!
- X fdopenf = 1;
- X /* check bounds */
- X if (unit >= NFD) return(ENXIO);
- X--- 364,372 ----
- X int unit = FDUNIT(minor(dev));
- X /*int type = FDTYPE(minor(dev));*/
- X int s;
- X! #if 0
- X! if (fdopenf == 1) return(EBUSY);
- X! #endif
- X fdopenf = 1;
- X /* check bounds */
- X if (unit >= NFD) return(ENXIO);
- X***************
- X*** 342,347 ****
- X--- 379,385 ----
- X fdclose(dev, flags)
- X dev_t dev;
- X {
- X+ fdopenf = 0;
- X return(0);
- X }
- X
- X***************
- X*** 434,449 ****
- X unsigned long blknum;
- X struct fd_type *ft;
- X
- X! #ifdef FDTEST
- X printf("state %d, unit %d, dr %d|",fd_state,unit,fd_drive);
- X #endif
- X-
- X if (!fdopenf) return;
- X! dp = &fd_unit[fd_drive].head;
- X! bp = dp->b_actf;
- X! read = bp->b_flags & B_READ;
- X! /*ft = &fd_types[FDTYPE(bp->b_dev)];*/
- --
- masuda@rokugo.co.jp
- $@A}ED2BBY(J@$@O;9g%7%9%F%`EE;R9)6H(J
- $@$^$9$@$h$7$R$m(J@$@$m$/$4$&$7$9$F$`$G$s$7$3$&$.$g$&(J
-