<> <> <> <> <> <<>> <<>> <<>> <> <<>> <> << o Maximum transmission length = 20 meters/bus; 2m/device; Star or Linear network. o Maximum number of devices/bus = 15; 1 talker/14 listeners. o Maximum data rate = 1Mbps for short paths; ~300 Kbps typical; device limited. o Signals: 8 data/8 control simultaneously active. o Data Transfer: byte serial bit parallel, asynchronous, with 3-wire handshake. o Only one controller may be active at once. The sytem controller is the master.>> <> <<>> DIRECTORY Rope; GPIB: DEFINITIONS = BEGIN <> <<>> <> StatusFlag: TYPE = { DAV, -- Data Valid NRFD, -- Not Ready For Data NDAC, -- NOT Data Accepted IFC, -- Interface Cleared SRQ, -- Service Request REN, -- Remote Enable EOI, -- End or Identify ATN -- Attention [switch Command/Data modes] }; maxWriteBuffer: NAT = 512+5; maxReadBuffer: NAT = 512+5; StatusVec: TYPE = ARRAY StatusFlag OF BOOL; SRQLabels: TYPE = ARRAY StatusFlag OF Rope.ROPE; <> <<>> goToLocal: CHAR = 001C; -- GTL selectedDeviceClear: CHAR = 004C; -- SDC parallelPollConfigure: CHAR = 005C; -- PPC groupExecuteTrigger: CHAR = 010C; -- GET takeControl: CHAR = 011C; -- TCT localLockout: CHAR = 021C; -- LLO devicesClear: CHAR = 024C; -- DCL parallelPollUnconfigure: CHAR = 025C; -- PPU serialPollEnable: CHAR = 030C; -- SPE serialPollDisable: CHAR = 031C; -- SPD parallelPollEnable: SecondaryCommand = 140C; -- PPE parallelPollDisable: SecondaryCommand = 160C; -- PPD <<>> <> ListenAddress: TYPE = CHAR [040C..077C]; UnListen: ListenAddress = 077C; TalkAddress: TYPE = CHAR [100C..137C]; UnTalk: TalkAddress = 137C; SecondaryCommand: TYPE = CHAR [100C..177C]; FORMAT: TYPE = {F0, F1, F2, F3, F4, F5}; PrimaryAddress: TYPE = CHAR [040C..137C]; DeviceAddr: TYPE = NAT [0..31); Terminator: TYPE = {CR, LF, EOI}; <> <> Command: PROC [sendMsg: Rope.ROPE]; DevicesClear: PROC[]; GoToLocal: PROC[]; GroupExecuteTrigger: PROC[]; InterfaceClear: PROC[]; LocalLockout: PROC[]; RemoteEnable: PROC[]; <> SelectedDeviceClear: PROC [device: DeviceAddr]; SelectedGoToLocal: PROC [device: DeviceAddr]; SelectedGroupEnableTrigger: PROC [device: DeviceAddr]; SelectedRemoteEnable: PROC [device: DeviceAddr]; <<>> <> ParallelPollConfigure: PROC [device: DeviceAddr]; ParallelPollUnconfigure: PROC[]; SelectedParallelPollConfigure: PROC [device: DeviceAddr]; SelectedParallelPollUnconfigure: PROC [device: DeviceAddr]; <> PollDevice: PROC [device: DeviceAddr, labels: SRQLabels]; ReadDevice: PROC [device: DeviceAddr, terminator: Terminator _ EOI] RETURNS [recvMsg: Rope.ROPE, end: BOOL]; <> ReadOnInterrupt: PROC [device: DeviceAddr, recvMsg: Rope.ROPE, labels: SRQLabels]; SelectedReadSerialPoll: PROC [device: DeviceAddr] RETURNS [statusByte: CHAR]; ReadStatusByte: PROC [device: DeviceAddr] RETURNS [char: CHAR]; <> WriteDevice: PROC [device: DeviceAddr, sendMsg: Rope.ROPE]; WriteDeviceBuffered: PROC [device: DeviceAddr, sendMsg: Rope.ROPE, hold: BOOL]; <> <> InitializeController: PROC RETURNS [open: BOOL]; FinalizeController: PROC; SRQAsserted: PROC RETURNS [asserted: BOOL]; <> WriteDeviceInitial: PROC [device: DeviceAddr, sendMsg: Rope.ROPE]; <<-- Sends the string without asserting EOI.>> WriteDeviceContinued: PROC [device: DeviceAddr, sendMsg: Rope.ROPE, last: BOOL]; <<-- Sends the string without the initial stuff.>> WriteDeviceBlock: UNSAFE PROC [device: DeviceAddr, lp: LONG POINTER TO WORD, -- For Lupine -- quadWordCnt: CARDINAL, last: BOOL]; <<-- Sends the bytes pointed to by lp, the total bytes count must be a multiple of 8.>> WriteDMABlock: UNSAFE PROC [device: DeviceAddr, multiBusAddress: LONG POINTER TO WORD, -- For Lupine -- byteCnt: CARDINAL, last: BOOL]; <<-- Sends the bytes pointed to by multiBusAddress from the MultiBus Memory card in the busmaster. >> ReadDeviceInitial: PROC [device: GPIB.DeviceAddr]; <> <<>> ReadDMABlock: UNSAFE PROC [device: GPIB.DeviceAddr, multiBusAddress: LONG POINTER TO WORD, -- For Lupine -- byteCnt: CARDINAL, last: BOOL _ FALSE]; <<-- Takes the bytes from the device and writes them into the area pointed to by multiBusAddress on the MultiBus Memory card in the busmaster. >> ReadDMADone: PROC [device: GPIB.DeviceAddr]; <> <<>> CheckDMADone: PROC RETURNS [BOOL]; <> END.