home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Oakland CPM Archive
/
oakcpm.iso
/
cpm
/
ampro
/
aan-8801.tzt
/
AAN-8801.TXT
Wrap
Text File
|
1988-01-31
|
39KB
|
774 lines
--------------------------------------
AMPRO COMPUTERS, INC. APPLICATION NOTE
--------------------------------------
Number: #AAN-8801 Date: January 5, 1988 Author: R. Lehrbaum
Title: Using a SCSI port for generalized I/O.
Product(s): Little Board/Z80, Little Board/186, Little Board/PC
Abstract: If the SCSI bus is not required for connection to "normal" SCSI
devices, it can be used as an I/O port, and even as an I/O bus.
This ap note explains how this is done.
-------------------------------------------------------------------------------
SCSI CATCHES ON!
----------------
Over the past two years, the Small Computer System Interface ("SCSI") has
begun to be included as a standard feature in the microcomputer products of
both system manufacturers (such as Apple) and board manufacturers (such as
AMPRO). This is a result of three factors:
(1) SCSI has finally been approved by the American National Standards
Institute (ANSI X3.131).
(2) Single chip SCSI interface IC's such as the NCR 5380 have become common
and inexpensive. (The 5380 already has at least five alternate sources.)
(3) Hard disk drives such as the Seagate 225N and tape drives such as the
Teac MT2ST are now available with "embedded" SCSI controllers.
Thanks to the ease of integration and very low cost of including a SCSI
interface (due to devices like the 5380), designers of microcomputer products
(systems and boards) now routinely include a SCSI bus controller.
ANOTHER WAY TO USE A SCSI PORT
------------------------------
In a lot of data acquisition and control or embedded microcomputer
applications, the SCSI port may go unused. If your system's SCSI bus is not
required for "normal" SCSI device connection, you may be able to use the SCSI
interface port as a generalized I/O interface instead.
The ability of a SCSI interface to be used for other types of I/O depends
entirely on the hardware that is being used to generate the SCSI bus signals.
Some SCSI interface IC's are quite "intelligent", while others are relatively
"dumb". In general, because the dumb SCSI IC's require lower level control by
the system CPU, they provide more direct CPU control over each of the SCSI
interface signals than do the smarter IC's. Therefore, the dumber the SCSI
IC, the more likely it is to be useful as a programmable I/O port. On the
other hand, some of the smarter SCSI IC's are too specialized to allow this
flexibility.
This application note discusses the use of a 5380 SCSI controller IC as a
generalized I/O interface. The 5380 offers nearly total control over the 17
signals which comprise the SCSI bus. Although the 5380 was not designed to
serve as a general purpose I/O port, it has several important features which
make it well suited for this purpose:
o Open collector output buffers, with 48 mA current sink capability
o Schmidt-trigger conditioning on input buffers
o Simple CPU bus interface with DMA logic
o Seventeen software controlled I/O signals
o Handshake and interrupt logic (usable in some applications)
INSIDE THE 5380
---------------
The 5380 has 17 bidirectional I/O lines, which may be used as inputs or
outputs under software control. It also offers several more advanced features
including interrupts, request/acknowledge handshaking, and DMA support. These
advanced features are intended specifically for SCSI, so they are not very
flexible; however you may find one or more of them useful in a particular
application.
To fully understand the 5380 SCSI Protocol Controller device, you should
obtain a copy of the NCR 5380 Design Manual, available for a nominal charge
from NCR (see reference below). In this ap note, we will only focus on the
simple I/O functions.
Within the 5380 are eight readable and eight writable internal ports, normally
addressed as eight consecutive I/O addresses. What follows next is a brief
description of the function of each of the 5380's internal registers. The I/O
addresses indicated are the normal offsets from the 5380's base address in
your system. Note that all of the SCSI bus signals (at the 5380 IC's pins)
are "active low," so the actual bus voltage levels are opposite to the
contents of the corresponding bits in the 5380 registers.
SCSI Data Register (00, read/write): Writing to this register in the
5380 sets the state of the SCSI bus data lines (DB0 through DB7),
providing that the "Assert Data Bus" bit of the Initiator Command
Register is set. If you write to this register when the Assert Data Bus
bit is not set, the register will hold your data but not assert it on the
SCSI bus until the Assert Data Bus bit (in the Initiator Command
Register) is set at a later time. The SCSI Data Register's data bits are
assigned as follows:
Bit 7 6 5 4 3 2 1 Bit 0
+-------+-------+-------+-------+-------+-------+-------+-------+
: DB7 : DB6 : DB5 : DB4 : DB3 : DB2 : DB1 : DB0 :
+-------+-------+-------+-------+-------+-------+-------+-------+
SCSI Data Register
When you read this I/O port, the value obtained represents the current
state of the SCSI bus data lines, DB0 through DB7, except that the actual
voltages on the bus lines are inverted relative to the contents of this
register.
Initiator Command Register (01, read/write): This register is primarily
used to control the 5380's SCSI bus interface when the chip is in the
Initiator role. Most functions are also available in the Target role.
Two of the bits of this register have different uses when the register is
read or written, so two charts are given. These are as follows:
Bit 7 6 5 4 3 2 1 Bit 0
+-------+-------+-------+-------+-------+-------+-------+-------+
:Assert : Arb in: Lost :Assert :Assert :Assert :Assert :Assert :
: RST : Prog : Arb : ACK : BSY : SEL : ATN : Data :
+-------+-------+-------+-------+-------+-------+-------+-------+
Initiator Command Register -- Read Usage
Bit 7 6 5 4 3 2 1 Bit 0
+-------+-------+-------+-------+-------+-------+-------+-------+
:Assert : Test : Diff :Assert :Assert :Assert :Assert :Assert :
: RST : Mode : En : ACK : BSY : SEL : ATN : Data :
+-------+-------+-------+-------+-------+-------+-------+-------+
Initiator Command Register -- Write Usage
As you have probably guessed, the Initiator Command Register allows you
to control the state of the RST, ACK, BSY, SEL, and ATN bus signals, and
also to control whether the 5380 places its data on the SCSI bus or not.
Notice that bits 6 and 5 differ according to whether you are reading or
writing this register. (Refer to the 5380 Design Manual for details on
the use of these bits.)
Here are three restrictions in using these bits to control the SCSI bus:
(1) The 5380 must be in Initiator Mode (Mode Register, bit 6) to be able
to set the SCSI control bits ACK and ATN active on the SCSI bus.
(2) If the 5380 is in Initiator Mode (Mode Register, bit 6), then the
data bus will not be asserted by the Assert Data Bus bit (Bit 0)
unless the SCSI bus I/O signal is false (output from Initiator) and
the SCSI bus control signals C/D, I/O, and MSG all match the contents
of the Assert bits in the Target Command Register.
(3) When the Assert RST bit is set, the resulting RST signal on the SCSI
bus clears all of the 5380's internal registers! (Not a very useful
general purpose signal, is it?)
Mode Register (02, read/write): This register contains many control
signals governing operation of the 5380. It allows you to place the chip
in either Initiator or Target mode, and provides control over DMA and
arbitration functions, parity, etc.
Bit 7 6 5 4 3 2 1 Bit 0
+-------+-------+-------+-------+-------+-------+-------+-------+
:Block : Target: Enable:Enable :Enable :Monitor: DMA : Arbi- :
:Mode : Mode : Parity:Parity : EOP : BSY : Mode : trate :
:DMA : : Check :Int : Int : : : :
+-------+-------+-------+-------+-------+-------+-------+-------+
Mode Register
This ap note will not cover the use of the bits regarding DMA, parity,
arbitration, and interrupts, as these are not required for basic
operation of the SCSI interface. Bit 6 is the most interesting bit of
this register, because it determines whether the 5380 is in Target Mode
or Initiator Mode.
Target Command Register (03, read/write): This register provides control
over the bus phase control bits: REQ, MSG, C/D, and I/O, as follows:
Bit 7 6 5 4 3 2 1 Bit 0
+-------+-------+-------+-------+-------+-------+-------+-------+
: : : : : Assert: Assert: Assert: Assert:
: : : : : REQ : MSG : C/D : I/O :
+-------+-------+-------+-------+-------+-------+-------+-------+
Target Command Register
These bits can only be asserted by the 5380 if the "Target Mode" bit in
the Mode Register is set. In Initiator mode, these bits have a different
purpose. In Initiator Mode, the states of the Assert MSG, Assert C/D,
and Assert I/O bits must match the actual state of the bus (which can be
read in the Current SCSI Bus Status Register), for data to be placed on
the SCSI bus even if the Assert Data Bus bit of the Initiator Command
Register is set. Also, in Initiator Mode, if the Assert MSG, C/D, and
I/O bits do match the bus state, then the "Phase Match" bit in the Bus
and Status Register will be set.
Select Enable Register (04, write): This write-only register is used as
a mask in Target Mode operation to allow the 5380's built-in selection
response logic to generate an interrupt. Refer to the 5380 Design Manual
for more info.
Bit 7 6 5 4 3 2 1 Bit 0
+-------+-------+-------+-------+-------+-------+-------+-------+
: DB7 : DB6 : DB5 : DB4 : DB3 : DB2 : DB1 : DB0 :
+-------+-------+-------+-------+-------+-------+-------+-------+
Select Enable Register
Current SCSI Bus Status Register (04, read): This read-only register
allows you to read the current state of eight control signals on the SCSI
bus. The bits are utilized as follows:
Bit 7 6 5 4 3 2 1 Bit 0
+-------+-------+-------+-------+-------+-------+-------+-------+
: RST : BSY : REQ : MSG : C/D : I/O : SEL : DBP :
+-------+-------+-------+-------+-------+-------+-------+-------+
Current SCSI Bus Status Register
DMA Control Ports (05-07, write): These are not registers but rather are
used as control signals by the 5380's internal DMA logic. A write
operation to one of these three I/O addresses is used as a trigger to
begin the corresponding DMA mode (Send, Target Receive, or Initiator
Receive). Refer to the 5380 Design Manual for more information on the
use of DMA.
Bus and Status Register (05, read): This read-only register allows you
to read two SCSI bus signals -- ATN and ACK -- which are not included in
the Current SCSI Bus Status Register. In addition, six 5380 status flags
which are associated with the optional use of interrupts are read through
this register. The bits of this register are utilized as follows:
Bit 7 6 5 4 3 2 1 Bit 0
+-------+-------+-------+-------+-------+-------+-------+-------+
: End : DMA : Parity:Inter- : Phase : Busy : ATN : ATN :
: of :Request: Error : rupt : Match : Error : : :
: DMA : : :Request: : : : :
+-------+-------+-------+-------+-------+-------+-------+-------+
Bus and Status Register
As mentioned above, the use of DMA and interrupts is not covered in this
ap note. The "Phase Match" bit is handy, in that it shows in a single
bit whether the SCSI bus phase matches the settings of the Assert bits
(MSG, C/D, and I/O) in the Target Command Register. The Phase Match bit
is only meaningful, however, when the 5380 is in its Initiator Mode
("Target Mode" bit = 0).
The Busy Error bit is set if the Monitor Busy bit in the Mode Register
has been set and if the SCSI bus BSY signal becomes false. If this
occurs, the 5380 output drivers all become disabled.
Latched Data Register (06, read): Reading this register returns the
latched -- not current -- state of the SCSI data lines. Data is latched
either during a DMA Target Receive operation when ACK (pin 14) goes
active, or during a DMA Initiator Receive when REQ (pin 20) goes active.
The DMA Mode bit in the Mode Register must be set before data can be
latched in this register. This register may also be read under DMA
control using the 5380's DMA control lines. The contents of this
register are:
Bit 7 6 5 4 3 2 1 Bit 0
+-------+-------+-------+-------+-------+-------+-------+-------+
: DB7 : DB6 : DB5 : DB4 : DB3 : DB2 : DB1 : DB0 :
+-------+-------+-------+-------+-------+-------+-------+-------+
Latched Data Register
Reset Parity Interrupt (07, read): A read of this address is used as a
trigger to clear a parity error interrupt.
SIMPLE I/O
----------
As indicated above, the 5380 has two operating modes -- Initiator Mode and
Target Mode -- and in Initiator Mode several constraints govern whether or not
data from the 5380 can be placed on the SCSI bus signals. If the 5380 is used
in the Target mode, however, these constraints are not applicable.
Consequently, the 5380's Target mode results in more flexible operation for
simple programmable digital I/O.
The 5380 is placed in Target mode by writing 40h to its Mode Register. Once
in Target mode, fourteen of the chip's SCSI bus I/O signals can be used as
bidirectional lines with either input or output capability, and two additional
lines can be used as input-only lines. Table 1 gives the breakdown.
Table 1. 5380 Target Mode Usage
5380 Register Signals Function
-------------------------- ---------------- ------------
SCSI Data Register DB0-DB7 Bidirectional
Target Command Register I/O,C/D,MSG,REQ Bidirectional
Initiator Command Register BSY,SEL Bidirectional
Initiator Command Register ACK,ATN Input only
As indicated in Table 1, ACK and ATN are inputs only in the 5380's Target Mode
of operation. All of the other SCSI signals except RST can be used as either
inputs or outputs. RST is unique in that it clears all of the registers
within the 5380 whenever it becomes active for any reason (including being set
by the 5380 itself!). In most applications you will probably want to avoid
using the RST signal entirely -- but be sure it is terminated along with the
other I/O interface signals.
The data lines (DB0-DB7) are only enabled as outputs when bit 0 ("Assert Data
Bus") of the Initiator Command Register is a 1. However, the state of the
DB0-DB7 lines can be read whether the Assert Data Bus bit is true (1) or not.
Since the data lines are Open Collector, they can be switched from output to
input functions simply by writing all 0's to the SCSI Data Register. (The
chip's outputs are inverted, so setting a data bit to 0 turns the output
driver off.)
It is also possible to utilize the 5380's internal interrupt, REQ/ACK, and DMA
support logic. For example, one 5380 user has taken advantage of the chip's
handshake and interrupt functions to monitor the data transmitted by a
computer's Centronics printer port, using the 5380 as an interrupting 8-bit
input port.
In many 5380-based SCSI systems, there are additional input signals intended
for the reading of SCSI Initiator ID jumpers. For example on the AMPRO Little
Board single board computers, up to eight additional input bits are available
in this manner if the 5380 is not being used as a SCSI port. If available,
these extra input signals can be used to augment the signals provided by the
5380, thereby adding up to eight additional input lines.
Along the same lines, don't overlook an unused parallel printer port as a
source of eight more buffered outputs and one or more output and input
handshake signals.
As you can see, a 5380 SCSI interface provides quite a few I/O signals. The 48
mA output drive capacity allows long wire lengths, and also can be used to
drive both mechanical and solid state relays.
Example 1 -- Using Opto-22 I/O Modules.
Opto-22 manufactures several types of "Mounting Racks" into which you can plug
optically isolated input and output modules. Each module functions as either
a single input bit or a single output bit, and the modules are available in
both AC and DC versions. Voltages of up to 240 volts DC or AC can be switched
or sensed, and the modules provide 4,000 volts isolation!
Opto-22's Mounting Racks hold either 4, 8, 16, or 24 optically isolated
modules, and have model numbers PB4, PB8, PB16, and PB24, respectively. Since
the 5380 provides a maximum of sixteen interface signals (as shown in Table
1), a single 5380 could interface with up to 16 such I/O modules, using a PB16
Mounting Rack.
To interface a 5380 with the Mounting Rack's optically isolated input or
output modules, simply connect each SCSI bus signal (from the 5380) to an
appropriate pin on the Mounting Rack's edgecard connector. This can be done
by constructing a custom "scramble-wired" cable, or you can use a small
customizable adapter card made by Opto-22 for this purpose, the Model UCA3.
The UCA3 can accept a 50-pin header edgecard connector from the SCSI side, and
plugs directly into the Opto-22 Mounting Rack. The UCA3 has user-programmed
connection between the input and output bus sides -- that is, it provides two
50-pin headers with wire-wrap posts which you wire to suit your needs.
The Opto-22 Mounting Rack can accommodate a mixture of input and output
modules on the same rack. It is even possible to have a combination of input
and output modules connected to the eight SCSI data lines (DB0-DB7) at the
same time. To allow some of the data lines to function as inputs while others
function as outputs (at the same time), keep the Assert Data Bus bit in the
5380's Initiator Command Register active at all times, and write 0's to any
bits in the SCSI Data Register that are to be used as inputs. Because the
5380's outputs are open collector (and active low), a bit which is a 0 will
not drive the bus at all, leaving the corresponding data line free to be
driven by an input module.
CONTROLLING AN IC
-----------------
Using the signals illustrated in Table 1 creatively, you can even hook them up
directly to other IC's. You can redefine any signal as any desired function.
For example, some signals can function as address signals, others as control
signals, still others as data signals.
Many IC's are not too fussy about timings as long as minimum setup and hold
times are provided. Using a technique known as "bit banging", you can easily
satisfy a device's setup and hold requirements.
Example 2 -- Interfacing to a Typical LSI Device.
As an example, a typical LSI device (such as a UART) might be interfaced to a
5380 as shown in Table 2.
Table 2. LSI Device Interface
Device Pin Function SCSI Signal Used
---------- ---------------------------- -----------------
D0-D7 Data in/out -DB0 through -DB7
A0,A1,A2 Internal register addressing -I/O,-C/D,-MSG
-RD,-WR Read and write (active low) -SEL,-BSY
-CS Chip select (active low) -REQ
Before going on, a word about logic levels. The SCSI bus uses active low
logic levels (i.e., a "0" is the high voltage level and a "1" is the low
voltage level). Assuming that the LSI device is "normal", it probably
requires active high data and address inputs, but active low control signals
(-RD,-WR,-CS). Since the 5380 will make everything active low, the data and
address values written to the 5380's registers must be inverted prior to
writing to such a device.
In this example, the following sequence might be used for writing to a
register within the LSI device:
(1) Write a 40h to the Mode Register, to place the 5380 in Target Mode.
(2) Invert the LSI device register address, and then write it to the I/O,
C/D, and MSG bits in the Target Command Register while also setting the
REQ bit (chip select) to 1.
(3) Invert the data to be written, and then write it to the SCSI Data
Register.
(4) Enable data output by writing an 01h ("assert data bus") to the
Initiator Command Register.
(5) Turn on the -WR signal by writing an 05h ("REQ" with "assert data bus")
to the Initiator Command Register.
(6) Remove the -WR signal by once again writing an 01h to the Initiator
Command Register. This provides write data hold time.
(7) Remove the chip select and address by writing 00h to the Target Command
Register.
(8) Disable data output by writing 00h to the Initiator Command Register.
You will want to modify this procedure slightly, based on the actual
requirements of the particular LSI device you need to control. A similar
process is used to read the device.
SYNTHESIZING A BUS
------------------
Another interesting and potentially powerful use of a 5380 SCSI interface is
in mimicking the functions of a bus. Although you can't expect to generate
anything as complex as a Multibus or VME bus, there are several simple I/O-
oriented buses which can be synthesized adequately using just the 5380 and a
scramble-wired cable between the 5380 and the bus cards or backplane. Two bus
interface examples follow.
Example 3 -- Interfacing to the "A-Bus"
Alpha Products Co. has developed a series of small, low cost data acquisition
and control cards based on a bus called the "A-Bus". The A-Bus is easily
generated by a 5380 SCSI controller IC. A scramble wired cable or small
adapter card (available from Alpha Products) is all that is needed, to connect
between a 5380 and one or more A-Bus cards.
A-Bus cards currently available from Alpha Products include: analog-to-
digital converters, digital I/O, stepper motor controllers, relay outputs,
optically isolated inputs, and prototype cards for custom interfaces. A five
slot A-Bus motherboard is also available, and multiple motherboards can be
daisy-chained, so quite a few A-Bus I/O cards can be connected to a single
5380 SCSI interface.
Table 3 gives the recommended signal mapping between the 5380's SCSI interface
and the A-Bus backplane signals. Alpha Products offers a small adapter card
which provides this interconnection, or you can wire a cable to do this
yourself.
It is essential that you provide termination on the SCSI/A-Bus bus, since the
5380 has open collector outputs. If you don't, you will get unreliable
results! However, the A-Bus devices are not designed to drive the 220/330 ohm
pullup/pulldown termination normally used on the SCSI bus. Therefore, you
must replace the SCSI bus termination networks with higher resistance
terminators. For example, you might replace the pullup/pulldown networks with
1K pullup devices instead.
Table 3. SCSI/A-Bus Interface
A-Bus Signal Pin Function SCSI Signal Pin
------------ --- -------------------- ----------- ---
+12 Volts 1 not used; no connect
-12 Volts 2 not used; no connect
GROUND 3 Signal Ground GROUND odd
+5 Volts 4 not used; no connect
INTERRUPT 5 not used; no connect
D0 7 Data in/out (LSB) -DB0 2
D1 8 Data in/out -DB1 4
D2 9 Data in/out -DB2 6
D3 10 Data in/out -DB3 8
D4 11 Data in/out -DB4 10
D5 12 Data in/out -DB5 12
D6 13 Data in/out -DB6 14
D7 14 Data in/out (MSB) -DB7 16
A0 15 Address (LSB) -I/O 50
A1 16 Address -C/D 46
A2 17 Address -MSG 42
A3 18 Address (MSB) -REQ 48
-IN 19 Read Strobe -SEL 44
-OUT 20 Write Strobe -BSY 36
ENABLE 0-3 21-24 not used; ground GROUND odd
Although there are not enough 5380 output signals to generate the four A-Bus
"Enable" signals, the implementation shown in Table 3 is sufficient to select
as many as sixteen A-Bus cards. If the Enable lines are required, you might
consider pressing an unused parallel port (e.g. Centronics printer port) into
service.
The following two software listings contain typical assembly language code
which can be used to write to an Alpha products RE-140 relay output card, and
read from an Alpha Products IN-141 optically isolated digital input card.
Listing 1. Relay Output Card Interface
; **************************************************************************
; This is a demo of the Alpha products relay output card
; using their SCSI adapter. The code is meant to run on
; an AMPRO Little Board/Z80 Z80-based single board system.
;
; Written 12/01/87 by Rick Lehrbaum
;
; Equates:
;
MODE$REG EQU 22H ;Bit 6 used to put in target mode.
TARGET$BIT EQU 40H ;Value to write to MODE
ADDRESS$REG EQU 23H ;Lower four bits used as A0-A3. Inverted.
DATA$REG EQU 20H ;Eight bits of data. Inverted.
CONTROL$REG EQU 21H ;Used to control data transfer, as follows:
; BIT 7 6 5 4 3 2 1 0
; : : +------ ASSERT DATA BUS when = 1
; : +------------ READ STROBE when = 1
; +--------------- WRITE STROBE when = 1
; Based on these definitions, the read/write functions can use these values:
ASSERT$BIT EQU 01H ;Assert data bus. Write to CONTROL.
WRITE$BIT EQU 08H ;Assert write strobe. Write to CONTROL.
READ$BIT EQU 04H ;Assert read strobe. Write to CONTROL.
;
ORG 100H
;
INIT:
; Initialize the 5380 interface
LXI SP,1000H ;Set stack pointer
XRA A
OUT CONTROL$REG ;Disable all strobes and data bus
MVI A,TARGET$BIT
OUT MODE$REG ;Place 5380 in target mode
JMP PROGRAM
;
WRITE:
; Writes the data byte in Register C to the I/O card at
; the address in Register B
MOV A,B ;Get the address from B
CMA ;Invert it
OUT ADDRESS$REG ;Put the address on the bus
MOV A,C ;Get the data from C
CMA ;Invert it
OUT DATA$REG ;Write it to the data port
MVI A,ASSERT$BIT
OUT CONTROL$REG ;Assert the data bus
MVI A,ASSERT$BIT OR WRITE$BIT
OUT CONTROL$REG ;Assert the write strobe
MVI A,ASSERT$BIT
OUT CONTROL$REG ;Clear the write strobe
XRA A
OUT CONTROL$REG ;Release the data bus
RET
;
PROGRAM:
; This a simple sample program intended for the relay output card.
; It switches each relay on in sequence, and loops indefinitely.
LXI B,0001
LOOP:
CALL WRITE
CALL DELAY
LXI B,0002
CALL WRITE
MOV A,C
RAL
MOV C,A
JMP LOOP ; Loops forever
;
DELAY:
; Delays approximately 1 second.
LXI H,0
DEL01:
DCX H
MOV A,H
ORI 0
JNZ DEL01
MOV A,L
ORI 0
JNZ DEL01
RET
;
END
; **************************************************************************
Listing 2. Opto-Isolated Input Card Interface
; **************************************************************************
; This is a demo of the Alpha products optically isolated input
; card using the Alpha Products SCSI adapter. The code is meant to
; run on an AMPRO Little Board/Z80 Z80-based single board system.
;
; This demo must be run from DDT or used as a subroutine by another
; program.
;
; Written 12/03/87 by Rick Lehrbaum
;
; Equates:
;
MODE$REG EQU 22H ;Bit 6 used to put in target mode.
TARGET$BIT EQU 40H ;Value to write to MODE
ADDRESS$REG EQU 23H ;Lower four bits used as A0-A3. Inverted.
DATA$REG EQU 20H ;Eight bits of data. Inverted.
CONTROL$REG EQU 21H ;Used to control data transfer, as follows:
; BIT 7 6 5 4 3 2 1 0
; : : +------ ASSERT DATA BUS when = 1
; : +------------ READ STROBE when = 1
; +--------------- WRITE STROBE when = 1
; Based on these definitions, the read/write functions can use these values:
ASSERT$BIT EQU 01H ;Assert data bus. Write to CONTROL.
WRITE$BIT EQU 08H ;Assert write strobe. Write to CONTROL.
READ$BIT EQU 04H ;Assert read strobe. Write to CONTROL.
;
ORG 100H
;
INIT:
; Initialize the 5380 interface
LXI SP,1000H ;Set stack pointer
XRA A
OUT CONTROL$REG ;Disable all strobes and data bus
MVI A,TARGET$BIT
OUT MODE$REG ;Place the 5380 in target mode
READ:
; Reads the data byte from the I/O card at the address in Register B
; and returns the data in register C
MOV A,B ;Get the address from B
CMA ;Invert it
OUT ADDRESS$REG ;Put the address on the bus
MVI A,READ$BIT
OUT CONTROL$REG ;Assert the read strobe
IN DATA$REG ;Read the data
CMA ;Invert it
MOV C,A
XRA A
OUT CONTROL$REG ;Clear the read strobe
RET
END
; **************************************************************************
Example 4 -- Interfacing to the Opto-22 "PAMUX" Bus
Another example of a simple I/O bus which can be easily synthesized by a 5380
SCSI controller is the Opto-22 "PAMUX" bus. Like the Alpha Products A-Bus,
the Opto-22 PAMUX bus is a simple parallel I/O bus with data, address, and
read and write control signals. Opto-22 offers an assortment of PAMUX analog
and digital I/O mounting racks. Up to 16 PAMUX mounting racks can be daisy-
chained on a single PAMUX ribbon cable bus, and each PAMUX mounting rack can
hold up to 32 I/O input or output modules, resulting in up to 512 I/O points.
As with the Alpha Products A-Bus, all that is required to tie a 5380 SCSI bus
to the PAMUX bus is a scramble-wired 50 conductor cable. A suggested wiring
scheme is given in Table 4. The Opto-22 Model UCA3 "kludge card" can be used
to make the bus-to-bus conversion, as described in Example 1.
Table 4. PAMUX/SCSI Interface
PAMUX Signal Pin Function SCSI Signal Pin
------------ --- ----------------- ----------- ---
D0 47 Data in/out (LSB) -DB0 2
D1 45 Data in/out -DB1 4
D2 43 Data in/out -DB2 6
D3 41 Data in/out -DB3 8
D4 39 Data in/out -DB4 10
D5 37 Data in/out -DB5 12
D6 35 Data in/out -DB6 14
D7 33 Data in/out (MSB) -DB7 16
A0 1 Address (LSB) -I/O 50
A1 3 Address -C/D 46
A2 5 Address -MSG 42
A3 7 Address (MSB) -REQ 48
A4 9 not used, tie low GROUND odd
A5 11 not used, tie low GROUND odd
WRITE 13 Write Strobe -BSY 36
READ 15 Read Strobe -SEL 44
RST 49 not used, tie low GROUND odd
GROUND even Signal Ground GROUND odd
Although there are not enough 5380 output signals to generate all six PAMUX
address signals, the implementation shown in Table 3 is sufficient to select
up to 128 I/O points (32 I/O's on up to four PAMUX mounting racks). If more
address lines are required, they may be able to be provided by an unused
parallel port (e.g. Centronics printer port) into service. Be sure to ground
A4 and A5 in your adapter cable (or on the UCA3).
The software routines needed to interface with the PAMUX modules are similar
to those indicated in Example 3 for the A-Bus.
Here are a few differences from the A-Bus example:
(1) The PAMUX module bits can individually be inputs or outputs. As
mentioned in Example 1, you can support a mixture of input and output
modules in the same 8-bit group by writing 0's to the bits in the 5380's
SCSI Data Register bits that are to be used as inputs so that those bits
on the data bus are free to be driven by the PAMUX input modules.
(2) The PAMUX bus is designed to be terminated with 180/390 ohm
pullup/pulldown terminators. This is too heavy a termination for the
5380, so do not use the standard PAMUX "TERM1" terminator. Instead, use
a standard SCSI termination (220/330 ohms) on at least one end -- and
preferably both ends -- of the SCSI/PAMUX bus.
(3) All signals on the PAMUX bus are "active high", while all those of the
SCSI bus are "active low". This means that everything must be inverted,
including ADDRESS, DATA, and CONTROL SIGNALS. Consequently, the normal
state of the SEL and BSY bits would need to be 1's, rather than 0's, in
the 5380's Initiator Command Register. One or the other of those bits
in the 5380 is then set to a 0 to generate a READ or WRITE strobe.
(4) Opto-22 recommends a 2 microsecond minimum duration for the WRITE
strobe, and that you delay for at least 2 microseconds from the setting
of the READ strobe prior to reading input data.
THE SCSI/IOP ALTERNATIVE
------------------------
It is important to remember that all of the techniques of using the 5380 as a
generalized I/O port discussed in this ap note assume that the 5380 is not
going to be used for normal SCSI peripheral device connection as well. This
means that if you plan to use a SCSI hard disk, tape drive, bubble drive,
optical drive, RAM disk, or any other such SCSI device, you cannot also use
the bus for simple digital I/O or to interface with an I/O bus such as the
Alpha Products A-Bus or the Opto-22 PAMUX bus.
A unique device, available from AMPRO Computers Inc., does allow the SCSI bus
to be used to add data acquisition and control devices along with normal SCSI
devices. The SCSI/IOP is a card which acts like a "legal" SCSI target device,
and inplements an STD Bus device interface. A SCSI/IOP can be used with a
single STD Bus I/O card, to add an individual function such as analog or
digital I/O, or the SCSI/IOP can plug directly into an STD Bus backplane if
multiple STD Bus I/O cards are required. The Z80A microprocessor on the
SCSI/IOP can also be used to run tasks autonomously, so the SCSI/IOP can even
add improved real time performance and multi-tasking to an non-real-time, and
single-tasking disk operating systems such as PC-DOS and CP/M.
REFERENCES
----------
The following companies were mentioned in this application note:
NCR Microelectronics Division
1635 Aeroplaza Drive
Colorado Springs, CO 80916
Phone: (303) 596-5612
(800) 525-2252
OPTO-22
15461 Springdale St.
Huntington Beach, CA 92649
Phone: (714) 891-5861
(800) 854-8851
ALPHA PRODUCTS CO.
242 West Avenue
Darien, CT 06820
Phone: (203) 656-1806
AMPRO COMPUTERS, INC.
1130 Mtn. View Alviso Rd.
Sunnyvale, CA 94089
Phone: (408) 734-2800
-------------------------------------------------------------------------------
* * * COPYRIGHT (C) 1988, AMPRO COMPUTERS INC. -- ALL RIGHTS RESERVED * * *
-------------------------------------------------------------------------------