nemossan@uitec.ac.jp (Sakurao NEMOTO) (12/19/90)
The followings are originated by k.h@mix. Mix is a commercail-BBS in Japan and it's sister-BBS of BIX, in the US. Original author has difficulties to post here, comp.os.minix, thus, I'll post. If you have any comments/ questions, please post here or e-mail me, nemossan@uitec.ac.jp. Please NOT use kdd-labs path, "nemossan@uitec.ac.jp" is enough. ---------------------------------------------------------------------------- SCSI-disk-driver-kit for Minix-1.5-PC This is a document for Direct-Access-SCSI-Device Driver and Minix-1.5. Modification/addition are necessary for such a device as Magnetic-tapes. This is originally made to be used in J3100/J3300, but is also usable in IBM-PC, PC-AT and its compatibles or AX-machines in Japan (which is IBM- compatible and supports Japanese-KANJI). Usage in a different architecured machines, such as NEC-PC9801, needs modification of the sources "scsi.c" and "sdisk.c". The utility program "sdisk.c" is concerned to be usable in MS-DOS, too. ------------------------------------------------------------------ You can freely use this, if NOT COMMERCIAL and PRIVATE-USAGE only. I disclaim all warranties in these NEWSes, try by your own rsik. ------------------------------------------------------------------ [0] contents of this kit 1) readme this file 2) scsi.c source code for SCSI-driver (kernel/scsi.c or kernel/wini.c) 3) sdisk.c source code for operation tool for SCSI-disk (usable under MINIX or MS-DOS) 4) minix.cdif context-diffs for include/minix (unnecessary if replace wini.c) 5) fs.cdif context-diffs for fs (unnecessary if replace wini.c) 6) kernel.cdif context-diffs for kernel [1] supported hardware This is designed to be used with the following hardwares. 1) Builtin SCSI-interface for Toshiba-J3300-Desktops. 2) Combination of SCSI-interface-board by Toshiba and Toshiba-J3100- Laptops. 3) Combination of "SPC-card" (see later) and J3100. 4) Combination of hand-made-SCSI-board (see circuit diagram below) and J3100. Both 3) and 4) resemble eachgether, but 3) means "made according to the document of SPC-card" and 4) means "made according to the circuit- diagram in this kit". "SPC-card" is originally made by "TSURUZO" at Japanese commercial BBS, Nifty, which is sister-BBS of compuserve. And SPC is a kit for SCSI-disks under MS-DOS, and it provides circuit-diagram for hand-made interface and source code of device driver, formatter and partition-maker under MS-DOS. This kit, I have designed to be usable _ALSO_ in the SPC-board. This SPC- board lacks DMA and interruput, which is necessary for multi-process OSs like MINIX, but it will be rather easily added by jumpering, as follows; /DACK (46) of MB89352 <--> -DACK3 (56) of PJ1 DREQ (45) of MB89352 <--> DREQ3 (55) of PJ1 INTR (46) of MB89352 <--> IRQ11 (5) of PJ1. If jumpering is difficult, compile as NOT use DMA/Interrupt, then it can be usable. I/O-port address of this board should be set 0x300. If you want to make hardware by yourselves, refer to the circuit diagram of this kit, it is almost the same as "SPC-card". J31SCSI1 board made by Toshiba is one for adding functions same as builtin SCSI-interface of J-3300 desktops, and it provides additional buffers, DIP-switches for selection of channels for interrupt and DMA, etc, etc, in short, more flexible design. If you want to use this board with the software in this kit, set as follows; a) Setting of SW1: I/O ports ----------------- | o o o o o o | ON Thus I/O port is set at 0x300. | o o | OFF ----------------- 1 2 3 4 5 6 7 8 b) Setting of SW1: DMA-channels and interrupt ----------------- | o o | ON Thus, IRQ11 and DMA-channel 3. | o o o o o o | OFF ----------------- 1 2 3 4 5 6 7 8 [2] Type of installation 1) Machine is J-3300 or J-3100? Hardware construction differ each other, for builtin-SCSI-interface of J-3300, J31SCSI1 I/F-board by Toshiba and the circuit provided by this kit. When using this software in builtin-SCSI-I/F of J-3300-desktops, use the following compile-flag #define J3300 1.2 Dependents on usage of the disk. 2) additional-drive or first-drive? ---- replace kernel/wini.c or not? This is the selection of (a) use as additional disk or (b) usage only SCSI-disk. The former case, both builtin SASI and additional SCSI disks can be accessed at the same time, because we use adding scsi.c as well as conventional kernel/wini.c. In this case, we are necessary to modify files in include, kernel, fs directories, because number of devices, which can be accessed by MINIX increases. This kit provides CDIFFs to achieve these modifications easily. It will be a good example for adding device drivers different from SCSI, where usually manual modifications are necesary. In the latter case, replacement of kernel/wini.c by scsi.c and several minor patchs for kernel-stuff are enough. This is applicable for the case of installing hard-disk-less J3100 or builtin disk is reserved only to MS-DOS and not to use in MINIX. In this case, copy scsi.c as wini.c and use the following compiler flag #define REPLACE 1.3 Dependents on interface (board) 3) use DMA or not? --- mainly for SPC-card This is the selection between usage of DMA or program-I/O. In the case of MINIX, DMA should be used because this is multitask OS, but original SPC- card cannot handle DMA,while DMA can be used only jumpering mentioned above. In case of J31SCSI-card by Toshiba, DMA can be selected by DIP-switchs. When you use DMA, define the following at the compile time; #define DMA DMA-channel is defined as 3, but you can modify the #define statement in scsi.c #define DMA_CHANNEL 3 It should be noticed that hardware of IBM-PC or PC-AT cannot access beyond 64 KB boundary of memory, otherwise system hangs up. In such a case, we should decide not to use DMA or move buffer cashe address, but I have no such experience. Program is coded to cause system-halt when occurred DMA-access beyond 64 KB boundary displaying occurrence of it. 4) use interrupt or not? ---- mainly for SPC-card In Multitask OSs as MINIX, DMA and interrupt should be used, but in case of SPC-card, initially designed for MS-DOS, has no interrupt, and even the hardware can treat interrupt,sometimes it is not usable because of collision with another hardware. If you use interrupt, define the following flag at the compile time, #define INTERRUPT otherwise input/output will be done by busy-wait. Interrupt channel is defined as its default value 11 in the following #define in kernel/const.h #define SCSI_IRQ 11 You can removed _scsi_int() of kernel/mpx.x or _cim_scsi() of kernel/klib.x if you don't use interrupt, but waste of memory amounts little, even they exist. 1.4 Dependents of SCSI-drives. The followings are normally need not to specify. When you met trouble, it may be useful. 5) available "READ CAPACITY" command or not? At compile time of scsi.c, if you specify #define USE_MODESENSE then program gets information about blocksize and disk-capacity utilizing "MODE SENCE" command of SCSI. If not, it uses "READ CAPACITY" commands. If you are using a disk which has no "READ CAPACITY" command, specify this flag, otherwise it is not necesarry. 6) available "GROUP0" command or not? At the compile time of scsi.c, if you define #define GROUP0 program uses "GROUP 0" command instead of "GROUP 1" command to read/write the disk. This is usually unnecessary, but if you use small capacity drive and has only "GROUP 0" command, it is necessary to specify it. 7) necessary to specify block (sector) size or not? At the compile time of scsi.c, if you specify #define BLOCKSIZE 512 or #define BLOCKSIZE 256 then program treats as if block (sector) size is that value. Normally, blocksize (sector size) is obtained by "READ CAPACITY" or "MODE SENCE" command, thus it is not necessary. But if you use primitive drives which can handle only read/write of SCSI interface, it is nenessary to specify it. In such a case, you are necessary to modify sdisk.c, too. 1.5 Options to debugging Scsi.c has further flags for debuggings or studyings as follows. 8) #define C_DRIVER If you specify this flag, I/O access of SCSI-disks are made only scsi.c. It is slower than assembler routine added to kernel/klib.x, but if you specify this, kernel/klib.x can be left unchanged, thus checking algorithms or developing/studying becomes easier. If not specify this, input/output will be done by Direct-Memory-Access through DMA controller or busy wait via _scsi_read()/_scsi_write() in kernel /klib.x. 9) #define DEBUG This is the flag for debugging informations and tracing. [3] outline of installing processes 1) making kernel First step is making a boot-disk which contains kernel with SCSI-driver. This process is different from the condition mentioned above, first is the one where SCSI-drivers only is used and the other is the one where coventional Hard-drive and the SCSI-drive are used at the same time. The former is more simple. 2) Formatting and patitioing of SCSI-disk Normal MINIX-1.5 permits upto 64 MB of one file system, thus larger disk drive more than it should be divided into partitions. Partitioning is made by sdisk, which resembles to fdisk-program of MINIX-1.5 and it performs physical-formatting, media checking of SCSI-disk and making/displaying/ changing of partitions. If you use small sized disk and total area of it is assigned to one file system (mount as /dev/sd0, sd1 etc), partition table is unnecessary. 3) Making device file Make device file of SCSI-drives using mknod or mkfs. Will be shown later. Followings are the more detailed procedures of installation. [4] In case where _ONLY_ SCSI-drive is used In case of no builtin hard-disk or not use hard disk as MINIX-file system, replace kernel/wini.c by scsi.c, and patch by kernel.cdif. "kernel.cdiff" of this kit contains CDIFFs for "Makefile", "const.h", "floppy.c", "klib.x", "main.c", "mpx.x", "protect.c", "proto.h" and "table.c". When you use these codes in 8086-CPUs, such as J3100-SS or J3100-SL, and with SPC-card neither DMA nor interrupt, patches for klib.x, sconst.h, floppy.c are enough. In case of 80286/80386-CPUs, all of the patches should be applied. In case of J3100-SS/J3100-SL, 2HC-formatted (PC-AT-format, 1185.5 kB) floppies can't be read unless usage of already patched kernel to floppy.c, thus, this process should be made by other machines. While in case of 286/386-CPUed J3100/J3300 machines, patching to floppy.c is not necessary, and even patch is done no harm will occur. Example of patching is as follows; # cd kernel # patch <kernel.cdif # cp scsi.c wini.c Then, make active #defines of wini.c copied from scsi.c as #define REPLACE and according to your environment make active several flags as #define J3300 /* make active if J-3300 DeskTops*/ #define DMA /* make active if DMA is available */ #defile INTERRUPT /* make active if interrupt available */ then make new kernel as # make kernel In case of SPC-card, let inactive "#define J3300", "#define DMA" and "#define INTERRUPT" flags. If you have jumpered mentioned above, the latter two-flags can be active, but in this case patching to "mpx.x" is also necessary. In case of J-3300, J31SCSI1-board and the circuit-diagram of this kit, I recommend to specify "#define DMA" and "#define INTERRUPT", but they will work even not specified these flags. Next step is "make image" to get "BOOT DISK", refer to the document of MINIX-1.5. [5] Addition of SCSI-disk To add SCSI-disk besides builtin-hard-disk requires many changes. Processes of adding SCSI-drivers according to this kit is as follows; 1) Patch "include/minix/config.h", "const.h" and "com.h" by "minix.cdif". 2) Patch "fs/const.h" and "table.c" by "fs.cdif". 3) Patch by "kernel.cdif" to kernel/Makefile, kernel/const.h, kernel/floppy.c, kernel/klib.x, kernel/main.c, kernel/mpx.x, kernel/protec.c, kernel/proto.h, kernel/sconst.h. After patches mentioned above, copy "scsi.c" to kernel-directory and compile _ALL_ of fs, kernel and mm. [6] Making device file Major/minor numbers of the device files are as follows; 1) Major number Major number is decided by "include/com.h", "kernel/table.c" and "fs/ table.c". In this kit, numbers are as follows; in case replace wini.c by scsi.c 3 in case adding SCSI besides builtin drive(s) 7. I've adopted 7 in latter case, because as usual I think net* device will not be used. If you need net*-device the number should be changed. 2) Minor number Minor number is decided by "scsi.c", SCSI-driver. Now, it is set as MSB LSB x x x x x x x x bit | | | | | | +---+---+ +-+-+ +---+---+ | | | | | +--- partition: 0 - 7 | +--- LUN: Logical Unit Number of SCSI device (0 - 3) +--- ID: ID of SCSI device (0 - 7) "ID" is a number to distinguish every SCSI-device, and usually set from 0 to 7 by builtin DIP-switches of the apparatus. In many cases 7 is assinged to computer and peripheral devices are assigned to 0, 1, 2... This device driver also assings 7 to SCSI-ID of the computer, so assign from 0 to 6 to the disks. If you have more than one drives, assign independent numbers to the different drives. LUN (Logical Unit Number) is a number to identify sub-device of every SCSI-device and cotrolled by SCSI-controller, and it can be assigned from 0 to 7. But in this device driver, number of it is restricted from 0 to 3. Almost all of SCSI-interfaced builtin drives only 0 is available. Partition number can be used from 0 to 7, but in this device-driver, number 0 is reserved as "whole device" to access whole part of the disk. This system is convenient to operate partition-table within MINIX, or rewriting boot-sectors, but on the other hand, damage on disk will happen by careless access to it. Making of device file will be done by mknod or mkfs. In case of mknod, for examples, following operation may be necessary to use partition 0, 1, 2, 3 and 4 in case of replacing wini.c by scsi.c (major number is 3), # mknod /dev/sd0 b 3 0 0 # mknod /dev/sd0a b 3 1 0 # mknod /dev/sd0b b 3 2 0 # mknod /dev/sd0c b 3 3 0 # mknod /dev/sd0d b 3 4 0 "0" in last column is peculiar to MINIX and specifies blockcount of the device, and to specify "0" means infinite. If you want to precisely define, set appropriate number of them. If you want two disk-drives, following specification may be better; # mknod /dev/sd0 b 3 0 0 # mknod /dev/sd0a b 3 1 0 # mknod /dev/sd0b b 3 2 0 # mknod /dev/sd0c b 3 3 0 # mknod /dev/sd0d b 3 4 0 # mknod /dev/sd1 b 3 32 0 # mknod /dev/sd1a b 3 33 0 # mknod /dev/sd1b b 3 34 0 # mknod /dev/sd1c b 3 35 0 # mknod /dev/sd1d b 3 36 0 This rule of naming specifies the string "sd" as SCSI-disk, and the number follows for ID, final "a", "b", "c" ... specifies paritions. Names of the devices can be allocated freely, but the more the number of devices or partitions the more difficult to decide the names of them. In the case of adding SCSI-disk (major number is 7) and use partition 0, 1, 2, 3, 4, make device file as # mknod /dev/sd0 b 7 0 0 # mknod /dev/sd0a b 7 1 0 # mknod /dev/sd0b b 7 2 0 # mknod /dev/sd0c b 7 3 0 # mknod /dev/sd0d b 7 4 0 If you are using the "ROOT FILE SYSTEM" copied from floppy disk in boot time, you must also copy back or make these device files to floppy ROOT file system. Or you will lose these special files at next boot time. If you make device file by mkfs, at first make "protofile", refer to the Minix-1.5 manual. This is a very useful way to make a new file system. Thus you can use SCSI-disk. Booting up the system, and try # dd if=/dev/sd0 of=/dev/null count=1000 and if access-lamp makes ON and command nomally terminates, almost all of the steps successfully made. If you have missed "mknod"ing of sd0 or setting ID of SCSI-disk or power of the drive is OFF, the system will be hung up. This is the same for the commands mkfs, mount, ..., which access the disk. To avoid this hanging up, insertion of "timeout" function to scsi.c is necessary. I've decided not to install this function because memory is precious in MINIX. I don't know this is the best choice or not. If we specify a name which does not exist in /dev in "mkfs"ing, the curious file will be made at /dev. This, I think, is from bug of "mkfs". [8] making partition-table -- sdisk If you are necessary making partition-table, compile sdisk.c and exec sdisk [-r] [id [lun]] where -r: replace bad blocks at the time of "verify" id: ID of SCSI-device (0--7) default:0 lun: Logical Unit Number of the SCSI-device default:0. In case of normal external adding drive, specify as sdisk or sdisk 0 In MINIX, I/O access of sdisk is made through /dev/mem, thus speed is slow, be patient. And you can not use this program in this way on the _SAME_ SCSI disk in current use. You can execute this operation only on another disk or floppy file system, or in MS-DOS. Otherwise it causes system clush by collision between device driver (scsi.c) and sdisk.c. On the _SAME_ SCSI disk you can only use the type of format sdisk /dev/sd0 which enables you only to read and modify patition table but not to physical format. Changing sdisk.c by "completed" SCSI-driver in /dev/sd*, access will be rather speed up and avoid this problem. But we will not be able to pre- pare SCSI drives without SCSI driver. Starting "sdisk", it will show, at first, total number of blocks of the disk and its block size, then the following menu will be shown 1 show partition table 2 change partition table 3 format disk 4 verify disk q quit select appropriate number. Usually SCSI-disks are shipped after physical formatting, thus item-3 or 4 is unnecessary. Installation of "4 verify disk", here, is not good one, it performs block after block, thus too slow in speed. Modification of it to do several blocks at once, speed up will be easily obtained. Usually item-1, 2 and q are used. If you specify item-2, program asks you block-count or number of starting/ending-blocks, for every partition. Thus specify number_of_blocks<Enter> or number_of_starting_block number_of_ending_block<Enter>. Pressing only <Enter> will make every 32 MB sized partiton from the start. Final partition contains several informations currently not used as well as its check-sum. These may be useful if you make primitively interfaced board which can handle only Read/Write of SCSI. This program is prepared as Xmas-present 1990, so time is limited to deliver, thus I have remained many things to implement or to improve, for example ability of sharing Hard-disk with other OSs. "sdisk.c" can be used in MS-DOS environment if compiled with the -DDOS flag. It contains several functions convenient to make experiments in MINIX or MS-DOS, thus it will be useful for experiments or understanding SCSIs. [9] Structure of partition-table Structure of partition-table is system-dependent. The structure of the table here mentioned is as follows, and its original idea is after takamiti@mix, installer MINIX-1.5 into NEC-PC9801. This intends to future various expansions. struct scsi { struct { unsigned char Mnt_Id; /* currently unused */ unsigned char Sys_Id; /* system identifier*/ unsigned char unused[2]; /* currently unused */ unsigned long ipl; /* IPL positon of sector - unused */ unsigned long start; /* start secter of this partition */ unsigned long last; /* end secter of this partition */ unsigned char name[16]; /* system name */ } part_info[15]; char sc_unused[30]; /* currently unused */ short sc_magic; /* check sum */ } scsi[7]; Total size of the table is 512-bytes, and in the first 480-bytes upto 15 partitions can be described. But in "scsi.c", design of major/minor number limits partition from 0 to 7, and partition-0 means whole disk, thus seven partitions only are used. If you want more, modify major/minor-related part of "scsi.c" as well as #define MAX_PARTITION 8 Mnt_Id and ipl fields are reserved for future to boot from the ROM on SCSI-board, and currently it is set to 0. Sys_Id field is used to indentfy MINIX-system from other OSs, and it uses 0xc0 value for MINIX. Sys_Id for unused partition table is set to 0. In sc_magic field at the final 2-bytes contains sum of former 510 bytes, and they are used to check validity of partition-table at the initialization of the driver. This partition table is placed on the second block of the disk, and first block is reserved to future Initial Program Loader (IPL). You may allow coexistence of other OSs where partition table is placed here, first block. [10] circuit diagram for hand-made interface Here is a sample circuit to use this driver in J-3100 expansion slot. This can also be usable in IBM-PC, XT, AT by very minor changes. Parts List: Universal Board* KEL BB07-15 1 60P Connector* KEL 8801-060-170L 1 40P Connector* KEL 8801-040-170L 1 SCSI CONNECTOR 1 LSI Fujutsu MB89352 1 TTL 74LS688 1 TTL 74LS04 1 TTL 74LS125 1 Xtal oscilator 8MHz 1 Terminator BECKMAN 898-5-R220/330 2 8P DIP Switch 1 Bypass capactor tantalum or ceramic 6 or more The parts marked by '*' are for J-3100 only. (see notes bellow) Sample Layout: +------------------------+ +---------------------------------------+ | KEL | | KEL | +---+ 8801-040-170L +--+ 8801-060-170L +---+ | | PJ2 | | PJ1 | | | +------------------------+ +---------------------------------------+ | | | | | | | | | | +------------------+ | | | 8P DIP SWITCH | | | +------------------+ | | | | | | | | +-------------+ +--------------+ +--------------------+ | | | 74LS125 | | 74LS04 | | 74LS688 | | | +-------------+ +--------------+ +--------------------+ | | +--------------------------------------------------------+ | | | | | | | | | | | MB89352 | | | | | | | | | | | +--------------------------------------------------------+ | | +--------------+ +--------------+ +--------------+ | | | 8MHz Xtal | | TERMINATOR | | TERMINATOR | | | | OSCILATOR | | (REGISTOR) | | (REGISTOR) | | | +--------------+ +--------------+ +--------------+ | | +-----------------------------------------------------------------+ | | | | | +----+ SCSI BUS CONNECTOR +----+ | (CN1) | +-----------------------------------------------------------------+ Circuit Diagram: 74LS688 +----------+ DIP-SW AEN (PJ1-57)---------+01 | +-----+ SA11 (PJ1-22)---------+02 03+--+ o/o +--+ SW1-1 ON SA10 (PJ1-21)---------+04 05+--+ o/o +--+ SW1-2 ON SA9 (PJ1-20)---------+06 07+--+ o/o +--+ SW1-3 OFF Setup for SA8 (PJ1-19)---------+08 09+--+ o/o +--+ SW1-4 OFF base address SA7 (PJ1-17)---------+11 12+--+ o/o +--+ SW1-5 ON to 0x300 SA6 (PJ1-16)---------+13 14+--+ o/o +--+ SW1-6 ON SA5 (PJ1-15)---------+15 16+--+ o/o +--+ SW1-7 ON SA4 (PJ1-14)---------+17 19 18+--+ o/o +--+ SW1-8 ON +----+----+ +-----+ | | +5V --+-- | --+-- GND | | 74LS04 | +-----+------+ +----+ +------+02 48 | MB98352 RESET (PJ1-48)----+1 2+-----------+01 | +----+ | 17+----@----DB0 (CN1-02) SA3 (PJ1-13)---------------------+06 15+----@----DB1 (CN1-04) SA2 (PJ1-12)---------------------+05 14+----@----DB2 (CN1-06) SA1 (PJ1-11)---------------------+04 13+----@----DB3 (CN1-08) SA0 (PJ1-10)---------------------+03 11+----@----DB4 (CN1-10) | 10+----@----DB5 (CN1-12) SD7 (PJ1-40)---------------------+29 08+----@----DB6 (CN1-14) SD6 (PJ1-39)---------------------+28 07+----@----DB7 (CN1-16) SD5 (PJ1-38)---------------------+27 18+----@----DBP (CN1-18) SD4 (PJ1-37)---------------------+26 | SD3 (PJ1-35)---------------------+25 | SD2 (PJ1-34)---------------------+23 42+----@----ATN (CN1-32) SD1 (PJ1-33)---------------------+22 32+----@----BSY (CN1-36) SD0 (PJ1-32)---------------------+21 41+----@----ACK (CN1-38) IRQ11 (PJ2- 5)---------------------+30 31+----@----SRST(CN1-40) DREQ3 (PJ1-55)---------------------+45 38+----@----MSG (CN1-42) -DACK3 (PJ1-56)---------------------+46 34+----@----SEL (CN1-44) -IOR (PJ1-45)---------------------+43 36+----@----C/D (CN1-46) -IOW (PJ1-44)-----------+---------+44 39+----@----REQ (CN1-48) | | 35+----@----I/O (CN1-50) +5V +--+--+ | | --+-- | 1 2+------+19 | +----GND (CN1-20) | + 3+------|20 09+----+----GND (CN1-22) +---+---+ 8MHz +-----+ | 16+----+----GND (CN1-24) 8MHz |VCC | 74LS125 | 33+----+----GND (CN1-24) osc. |GND OUT+-------------------+47 24 40+----+----GND (CN1-28) +---+---+ +-----+------+ +----GND (CN1-30) | | +----GND (CN1-34) --+-- GND --+-- +----GND (CN1-1) GND +----GND (CN1-3) +----GND (CN1-5) +5V +----GND (CN1-7) +5V (PJ1-02)-------------------------+-- +----GND (CN1-9) GND (PJ1-01)-+ '@' meants | +----GND (CN1-11) GND (PJ1-09)-+ pullup 220 ohm +----GND (CN1-13) GND (PJ1-18)-+ | +----GND (CN1-15) GND (PJ1-27)-+ ----@--- == ----+---- +----GND (CN1-17) GND (PJ1-43)-+ | +----GND (CN1-19) GND (PJ1-51)-+ BECKMAN 330 ohm +----GND (CN1-21) GND (PJ1-69)-+ 898-5-R220/330 | +----GND (CN1-23) | or equivalent --+-- | --+-- GND --+-- GND GND Notes: 1) You can use this circuit on IBM-PC/AT by replacing PJ1 and PJ2 assignments as follows. AEN(A11) SA11(A20) SA10(A21) SA9(A22) SA8(A23) SA7(A24) SA6(A25) SA5(A26) SA4(A27) SA3(A28) SA2(A29) SA1(A30) SA0(A31) -IOW(B13) -IOR(B14) SD7(A2) SD6(A3) SD5(A4) SD4(A5) SD3(A6) SD2(A7) SD1(A8) SD0(A9) RESET(B2) IRQ11(D4) +5V(B3,B29,D16) GND(B1,B10,B31,D18) 2) You should use one tantalum or ceramic bypass capacitor for each IC's and terminator's +5V pin. 3) Connect No.3, 5, 9, 11, 13 of LS04 and No.4, 5, 9, 10, 12, 13 of LS125 to VCC (+5V). [11] Introduction to SCSI SCSI is abbreviated from "Small Computer System Interface" and this is the interface between computer(s) and peripheral device(s). Each device is assigned an ID (identify) number from 0 to 7, and this number is set by builtin DIP-switches or software, not to duplicated. Up to 7 peripheral devices can be connected to one or more computer(s) through SCSI-cable in runs as shown. ---------- ---------- ---------- ---------- | SCSI ID0 | | SCSI ID1 | | SCSI ID2 | ... | SCSI ID7 | ---------- ---------- ---------- ---------- *| | | | | |* +---------+ +---------+ +------ -------+ SCSI cable SCSI cable SCSI cable At the both ends of the cables (shown as "*" in the figure), there necessary "terminator" in order to avoid distortion by reflection of signals. The terminator has two types, one is builtin-type, the other is connecter-type, which is used in the hard-disks usualy has two SCSI- receptacles. Maximum total length of the SCSI cable is limited to 6 meters in case of unbalanced type cable commonly used. Every device can contain upto 8 (from No.0 to 7) internal devices, which are managed by its own controller of the device. Internal devices are called Logical Unit Number (LUN), and these can be accessed from other devices in the SCSI interface, thus maximum devices to be connected amounts upto 64. SCSI interface is a extension of SASI hard-disk interface of SUGART co., and standardized as ANSI X.3.131-1986. On extension, floppy-disks, mag- netic-tapes, high-speed-printers, Magneto-Optical-disks (MO-disk), CD-ROMs and other computers as well as hard-disk are taken into account and commands for the following devices are standardized. 1) Direct access devices: floppy, hard-disk, MO-disk 2) Sequential access devices: Magnetic tape 3) printers 4) processers (computers) 5) one-time write, multi-read devices: Optical disk 6) read only devices: CD-ROM But standardization of command is not complete and there are many "vendor unique" commands inherent to devies, thus limitting compatibility between the same devices from other companies. In the SCSI-connected machines, computers are called as "initiator" and the others are called as "target". At first control is started by initiator, then target, peripheral devices, obtain initiative. [12] Literature The followings are the literatures which I have bought at the time of developing this device-driver. 1) ANSI X3.131-1989 After this standard, "Common Command Set" is released, thus expansion of SCSI-standard has been done. 2) User's manual of SCSI-protocol-controller MB89352, by Fujitsu This is the document for main LSI of the hardware treated in this document. To know further hardware-level information, "DATA SHEET" is necessary. (I don't know if English-version of them are available or not.) Further literatures are omitted, because it is written in Japanese Language. If you know better literatures, please let me know them. k.h@NIKKEI-MIX, 1990-12-19 Partialy translated into broken :-) English by Dec 19 '90 (We) nemossan@mix, nemossan@uitec.ac.jp (Description of HardWare circuit diagram is written by original author in English.)