Ö· Ö· Ò Ç¶ º º ½Ó Ó½ ÓÄ TECNICAL REFERENCE MANUAL CONTENTS List of Registers i Chapter 1 About This Manual 1 1.1 Purpose 1 1.2 Who Can Use This Manual 1 1.3 Conventions Used In This Manual 1 Chapter 2 Overview 3 2.1 Introduction 3 2.2 Possible Applications 3 2.3 Hardware Description 4 2.4 Hardware Component Differences 5 2.5 Software Description 5 2.5.1 ROM Firmware 5 2.5.2 Control Program Software 6 2.5.3 Host Interface Software 6 2.5.4 Host Support Software 6 Chapter 3 Host PC Hardware Interface 7 3.1 Introduction 7 3.2 Dual Port RAM General Information 7 3.3 ACL, ACL II(+), ACL IIR(+) 7 3.4 ACL 16 and ACL 16+ 10 3.4.1 Tri-Port RAM 10 3.4.2 Host Registers 11 3.5 ACL MC 16 3.5.1 Memory-Mapped Register 16 3.5.2 POS Registers 16 ACL Family Technical Reference Manual manual part number: 650057-03 c 1993 Star Gate Technologies, Inc. All brand and product names are trademarks or registered trademarks of their respective companies. CONTENTS (cont.) Chapter 4 ACL Family Control Program 20 4.1 Introduction 20 4.2 Dual Port RAM Interface 20 4.3 Global Control Block 21 4.4 Channel Control Blocks 34 4.5 Buffer Area 67 4.5.1 Transmitting Characters 67 4.5.2 Receiving Characters 67 4.5.3 Communication Errors 68 4.5.4 Configuring Parameters 69 4.5.5 Service Requests 70 4.5.6 Interrupt Handling 70 Chapter 5 Reset and Download Procedures 73 5.1 ACL, ACL II(+), ACL IIR(+), and ACL MC Boards 73 5.1.1 ACL, ACL II(+), ACL IIR(+), 5.1.2 and ACL MC ROM 73 5.1.3 ACL, ACL II(+), ACL IIR(+), and 5.1.4 ACL MC Defined Values 78 5.1.3 ACL, ACL II(+), ACL IIR(+), 5.1.4 and ACL MC Reset Procedure 79 5.1.4 ACL, ACL II(+), ACL IIR(+), 5.1.5 and ACL MC Download Procedure 80 5.2 ACL MC Block Load Procedure 82 5.3 ACL 16 and ACL 16+ Reset and Download 5.4 Procedure 83 CONTENTS (cont.) Chapter 6 ACL Family Processor Hardware Interface 87 6.1 Introduction 87 6.2 ACL Board 87 6.2.1 ACL Board Memory Space 87 6.2.2 ACL Board I/O Registers 89 6.2.3 ACL Board Interrupts 93 6.3 ACL II(+) Board 93 6.3.1 ACL II(+) Memory Space 93 6.3.2 ACL II(+) I/O Registers 96 6.3.3 ACL II(+) Interrupts 99 6.4 ACL IIR(+) Board 100 6.4.1 ACL IIR(+) Memory Space 100 6.4.2 ACL IIR(+) I/O Registers 102 6.4.3 ACL IIR(+) Interrupts 104 6.5 ACL MC Board 105 6.5.1 ACL MC Memory Space 105 6.5.2 ACL MC I/O Registers 107 6.5.3 ACL MC Interrupts 109 6.6 ACL 16(+) Board 109 6.6.1 ACL 16(+) Memory Space 109 6.6.2 ACL 16(+) Microprocessor Memory 109 6.6.3 ACL 16(+) Tri-Port Memory 112 6.6.4 ACL 16(+) I/O Registers 112 6.6.5 ACL 16(+) Interrupts 117 6.7 Control Program Development (ACL, ACL II(+), ACL IIR(+), and ACL MC Only) 118 6.8 Control Program Development(ACL 16 and ACL 16+ Only) 119 Appendix Glossary of Terms, Acronyms and Abbreviations 121 Customer Assistance 125 Index 126 List of Registers ACL, ACL II(+), ACL IIR(+) Map Register 8 Megabyte Map Register 9 Board ID Register 11 Board Control Register 12 Board Status Register 14 ACL 16(+) Map Register 15 IRQ Reset Register 16 ACL MC POS Registers 0 and 1 17 ACL MC POS Register 2 18 ACL MC POS Register 3 18 ACL MC POS Register 4 19 ACL MC POS Register 5 19 Global Command Word 23 Global Status Word 24 Global Service Request 25 Available Buffer Space Remaining 25 Board Type 26 ACL Family Control Program Version 26 Channel Control Block Count 27 Channel Control Block Offset 27 Channel Control Block Size 28 Global Command Word 2 28 Global Status Word 2 29 Communication Error Service Request 29 Inptut Buffer Service Request 30 Output Buffer Service Request 31 Modem Status Change Service Request 32 Channel Command Service Request 33 Baud Rate 37 Data Format 41 Line Protocol 43 Input Buffer Size 48 Output Buffer Size 49 Input Buffer Trigger Rate 50 Output Buffer Low Water Mark 50 IXON Characters 51 List of Registers (cont.) Input Buffer High Water Mark 51 Input Buffer Low Water Mark 52 Channel Command 52 Channel Status 55 Input Buffer Starting Address 55 Input Buffer Ending Address 56 Output Buffer Starting Address 56 Output Buffer Ending Address 56 Next Character to Input Buffer 57 Next Character from Input Buffer 57 Next Character to Output Buffer 58 Next Character from Output Buffer 58 Communication Error Status 59 Bad Character Pointer 59 Modem Control 60 Modem Status 61 Blocking Status 62 Character Received Flag 63 IXOFF Characters 64 Channel Status 2 65 Error/Strip Character 66 Status Word 74 Command Word 75 Error Word 76 Download Buffer Start 77 Board Type 77 ACL Input Port Register 90 ACL Output Port Register 90 ACL Control Register 90 Handshake Register (Write) 92 Handshake Register (Read) 92 ACL II(+) Input Port Register (2681) 97 ACL II(+) Output Port Register (2681) 97 ACL II(+) Control Register 97 DTE Select Register 98 DCE Select Register 99 ACL IIR(+) Input Port Register (2681) 103 ACL IIR(+) Output Port Register (2681) 103 ACL IIR(+) Control Register 104 ACL MC Input Port Register 108 List of Registers (cont.) ACL MC Control Register 108 DTR Register 109 RXSTAT Register 114 TXSTAT Register 115 CHxySTR Register 115 IOWREN Register 116 DTRWR Register 117 RTSWR Register 117 Chapter 1 About This Manual 1.1 Purpose This technical reference manual provides technical information needed to write software for the ACL (Advanced Communication Link) family of intelligent communications adapters from Star Gate Technologies, Incorporated. 1.2 Who Can Use This Manual This manual is designed for users experienced in programming software interfaces between applications programs and communications hardware. A working knowledge of the following topics is assumed: Asynchronous communication protocols. PC architecture and operation. 1.3 Conventions Used In This Manual This manual uses the following conventions: "local RAM" refers to "scratch RAM" "map register" refers to "latch register" To be consistent with programming usage, ports are numbered from 0 to 15 instead of 1 to 16. When discussing the dual port RAM, addresses are referenced relative to the dual port base starting address. This is because dual port RAM can be located in many different areas of memory. For example, if you select D0000H as the starting address of the dual port RAM, then the address of the Global Status Word would actually be D0002H. Three different numbering systems appear in this manual: binary, hexadecimal, and decimal. Each numbering system is used in its conventional context. Binary notation is used to represent bit values. An example is shown below. Bit 5 4 3 Parity Type x x 0 No Parity. 0 0 1 Generate and check Odd Parity. 0 1 1 Generate and check Even Parity. 1 0 1 Generate and check Mark Parity. 1 1 1 Generate and check Space Parity. Hexadecimal notation is used to identify memory addresses and command codes. Hexadecimal numbers are always followed by "H". For example: 06H, 10H, 0AH. Decimal notation is used in its usual context. For example: 4 boards, 3 seconds. A cleared bit has a value of 0. A set bit has a value of 1. The term "character time" refers to the time required to transmit one character. Chapter 2 Overview 2.1 Introduction The ACL family is a line of intelligent communication adapters that add serial ports to ISA and Micro ChannelTM computer systems. Each adapter has an on-board microprocessor to relieve the computer system of much of the processing necessary to support those ports. The family consists of the: ACL, ACL II, ACL IIR, ACL 16, ACL II+, ACL IIR+, and ACL 16+ for the ISA bus. ACL MC for the Micro Channel bus. These adapters are, for the most part, functionally compatible with one another. Any differences among the adapters will be discussed in this manual. 2.2 Possible Applications The ACL family adapters' versatility makes them useful for a wide range of data communication applications. For example, they may be used for data collection, process control, and interfacing to printers, scanners, modems, scales, terminals, bar code readers, burglar alarm sensors and laboratory instrumentation. With additional programming, an ACL family adapter can also: Perform line discipline functions such as local terminal emulations and character conversions. Perform file-oriented algorithms such as data compacting on an interchannel basis. For example, a file can be received through one port, processed, and then re- transmitted through the same, different, or multiple ports simultaneously. Reconcile format differences without host computer intervention. This makes it appear as if one device is directly compatible with another system even though the actual format is different. For example, an intelligent repeater may convert ASCII to EBCDIC. 2.3 Hardware Description The main hardware components of the ACL family board are the microprocessor, UARTs, dual port RAM, local ROM and local RAM. The microprocessor is the key component of an ACL family Board. Its main function is to transfer data from the host PC to the UARTs, and to transfer received data from the UARTs to the host PC. The other components of an ACL family board support this function. The UARTs (Universal Asynchronous Receiver Transmitters) are devices which convert the on-board microprocessor's parallel data into serial data for the EIA-232 interface. UARTs also receive serial EIA-232 data and convert it to parallel data for the on- board microprocessor. The dual port RAM is the interface between the on-board microprocessor and the host PC. The local ROM contains both the startup code for the on- board microprocessor and the code to download Arograms from the host PC. There is no ROM on the ACL 16 or the ACL 16+. The local RAM is the storage location for the program that is downloaded from the host PC. The local RAM is also used for temporary data storage. 2.4 Hardware Component Differences The basic differences among the ACL family boards are summarized in the next table. Detailed information about the boards is given in chapter 6. TABLE 2.1 - Hardware Component Differences Board Bus Micro Max Number Type Processor UARTs Connector of Channels ACL PC 8088 (8 MHz) 2681 DB-25 8 ACL II ISA 80188 (12 MHz) 2681 DB-25 8 ACL II+ ISA 80188 (16 MHz) 26C92 DB-25 8 ACL IIR ISA 80188 (12 MHz) 2681 RJ-12 8 ACL IIR+ ISA 80188 (16 MHz) 26C92 RJ-12 8 ACL 16 ISA 80186(2) (10 Mhz) 2692 DB-25/RJ-12 16 ACL 16+ ISA 80186(2) (16 MHz) 26C92 DB-25/RJ-12 16 ACL MC MC 80186 (10 MHz) 2698 DB-25 8 ACL MC+ MC 80186(20 Mhz) 2681* DB-25/DB9 8 2.5 Software Description Four types of software enable the ACL family boards to function: (1) ROM firmware, (2) control program software, (3) host interface software, and (4) host support software. 2.5.1 ROM Firmware ROM firmware is the program that is burned into ROM. The program is executed by the on-board microprocessor. The Star Gate-supplied ACL family ROM contains code for processor startup, power-on self-testing, and program downloading from the host PC. It does not contain code for transmitting and receiving data. The information needed to write custom ROM firmware is in chapter 6. NOTE The ACL 16 and the ACL 16+ do not have ROMs. 2.5.2 Control Program Software Control program software is downloaded from the host PC and executed by the on-board microprocessor. Star Gate Technologies provides the ACL family control program as the standard program to be downloaded to the board to handle communication. The information needed to write custom control program software is in chapter 6. 2.5.3 Host Interface Software Host interface software (also known as a device driver) is executed by the host PC. It transfers data from the host to the ACL family board, and from the ACL family board to the host. Various device drivers are available from Star Gate Technologies. The information needed to write custom host interface software is in chapters 3 and 4. 2.5.4 Host Support Software Host support software, which is executed on the host PC, includes programs for downloading and board configuration. The information needed to write custom host support software is in chapters 3, 4, and 5. NOTE If you are planning to support more than one type of ACL family adapter, it is practical to write one piece of host system software to support all types of adapters. Star Gate Technologies typically supports all adapters with the same device driver. Chapter 3 Host PC Hardware Interface 3.1 Introduction This chapter covers the ACL family hardware that can be accessed by the host PC. 3.2 Dual Port RAM General Information The dual port RAM is the interface between the host microprocessor and the on-board microprocessor. This memory is called dual-ported because both microprocessors can access it in order to communicate information between each other. The dual port RAM's structure and use are determined by the software executing on the on-board microprocessor. The ACL family control program uses the structure and protocol defined in chapter 4 to communicate with the host PC. The ACL family ROM firmware uses the structure and protocol defined in chapter 5 to communicate with the host PC. 3.3 ACL, ACL II(+), ACL IIR(+) The ACL, ACL II, ACL IIR, ACL II+ and ACL IIR+ boards have a Map Register. The ACL II, ACL II+, ACL IIR, and ACL IIR+ also have a Megabyte Map Register. These registers are used to enable and select the address of the dual port RAM. ACL, ACL II(+), ACL IIR(+) Map Register (Write Only) Offset: 000H Bit 7 6 5 4 3 2 1 0 ÚÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ÀÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÙ This register selects the dual port RAM address mapping. It also allows for enabling, disabling, and reset. NOTE If you are configuring the Megabyte Map Register, be sure to set it before you enable the dual port RAM through the Map Register. Switches on each ACL family adapter are used to locate this register at one of four address locations. The addresses are usually 200H, 300H, 600H or 700H. Other addresses are possible with special PALs. Please refer to each adapter's User's Guide for switch settings. Bit 0 Dual Port RAM Enable Setting this bit to "1" enables the dual port RAM. Clearing it to "0" disables the dual port RAM. NOTE The memory space used by the dual port RAM can be shared by multiple boards. To do this, enable the dual port RAM on the board you wish to access, and then disable it when you have completed accessing it. Bit 1 ACL Family Processor Reset Setting this bit to "1" invokes a hardware reset of the board. Set this bit to "1" for at least 100 milliseconds before setting it back to "0" to make sure that the processor resets. This bit is implemented in ACL family boards Rev. 3 and higher, and in all ACL II, ACL IIR, ACL II+ and ACL IIR+ boards. Bits 7-2 Address Lines A19-A14 These bits select address lines A19-A14 for the dual port RAM. For 64K byte dual ports, only A19-A16 are used, and A15-A14 should be written as zeros (0). Megabyte Map Register (Write Only) Offset: 0004H Bit 7 6 5 4 3 2 1 0 ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄ¿ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÙ This register selects the megabyte of memory where the dual port RAM will be mapped. This register defaults to all zeros, which maps the dual port RAM to the first megabyte of memory. The I/O address of this register is offset by four bytes from the Map Register. For example, if the Map Register is located at 200H, then the Megabyte Map Register is located at 204H. Bits 3-0 Address Lines A23-A20 These bits select address lines A23-A20 for the dual port RAM. CAUTION In systems that have a memory cache enabled, the dual port RAM should only be mapped to within the address range of 0A0000H to 0FFFFFH. Examples To map the dual port RAM to 0D0000H and enable it, write a 0 to the Megabyte Map Register (an optional step). Then, write D1H to the Map Register. To map the dual port RAM to 800000H and enable it, first write 8 to the Megabyte Map Register. Then, write 1 to the Map Register. To map a 16K dual port RAM to 0D4000H and enable it, write 0 to the Megabyte Map Register (an optional step). Then, write D5H to the Map Register. To disable the dual port RAM, write 0 to the Map Register. To reset the ACL family microprocessor, write 2 to the Map Register and wait at least 100 milliseconds. Then, write 0 to the Map Register. 3.4 ACL 16 and ACL 16+ 3.4.1 Tri-Port RAM The operation of the tri-port RAM in the ACL 16 and the ACL 16+ boards is similar to the dual port operation in the ACL II family with two major exceptions. These exceptions are: The insertion of wait states is under program control from the host PC side through the Board Control Register. The Block Select bits must be programmed in order to access the appropriate memory range. NOTE Even though the RAM is physically tri-ported, the RAM actually functions as a dual port because the host cannot be mapped to both the main board and the daughter board at the same time. 3.4.2 Host Registers The ACL 16 and ACL 16+ have four I/O registers which can be accessed by the host PC for both status and control: (1) Board ID register (2) Board Control Register (3) Board Status Register (4) Map Register These registers are a byte wide, and their base addresses are determined by the I/O decode PAL and the switch settings. Please refer to the ACL 16 User's Guide or the ACL 16+ User's Guide for instructions on setting switches. Board ID Register (Read Only) Offset: 0000H ACL 16 Bit 7 6 5 4 3 2 1 0 ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ ³ A1H ³ ³ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ACL 16+ Bit 7 6 5 4 3 2 1 0 ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ ³ A2H ³ ³ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ This register contains the value A1H on the ACL 16 board and A2H on the ACL 16+ board. Because the ACL 16 and ACL 16+ have no ROM, the host system must read the Board ID register to verify if an ACL 16 or ACL 16+ is resident in the host system. Switch Block SW1 on the ACL 16 and ACL 16+ main board is used to locate this register at one of four address locations: 200H, 300H, 600H or 700H. Other addresses are possible with special PALs. Please refer to the ACL 16 User's Guide or the ACL 16+ User's Guide for instructions on setting switches. Board Control Register (Write Only) Offset: 0000H Bit 7 6 5 4 3 2 1 0 ÚÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ÀÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÙ The host uses the Board Control Register to select and enable the tri-port RAM block in order to set the number of wait states and to control the processor mode. Bit 0 Block Select The main board and the daughter board each have 32KB of the tri- port RAM, but there is only a 16KB window to the host for each board. This bit selects which 16KB block of the tri-port RAM assigned to the main board or daughter board is mapped to the host's window. None of Star Gate's software products have used the upper 16KB tri-port RAM block. Clearing this bit to 0 selects the lower tri-port RAM block (0000H - 3FFFH). Setting this bit to 1 selects the upper tri-port RAM block (4000H - 7FFFH). This bit has a different definition in the download mode. See section 5.3 for more information. Bit 1 Tri-Port Select Clearing this bit to 0 selects the main board's range of the tri-port RAM. Setting this bit to 1 selects the daughter board's range of the tri-port RAM. This bit has a different definition in the download mode. See section 5.3 for more information. Bits 4-2 Wait States These bits define the number of wait states inserted for each host access of the tri-port RAM. The number of wait states defaults to 0 and should not be changed. Bit 4 3 2 Wait States 0 0 0 0 0 0 1 1 1 1 1 7 Bit 5 Main Board Mode Clearing this bit to 0 places the main board in the download mode. This holds the main procesor in the reset state and forces the main board local RAM to overlay the tri-port RAM for the download operation. Setting this bit to 1 sets the main board and processor to normal operation. Bit 6 Daughter Board Mode Clearing this it to 0 places the daughter board in the download mode. This holds the daughter processor in the reset state and forces the daughter board local RAM to overlay the tri-port RAM for the download operation. Setting this bit to 1 sets the daughter board and processor to normal operation. Bit 7 Tri-Port Enable Setting this bit to 1 enables the tri-port RAM. Clearing this bit to 0 disables the tri-port RAM. Board Status Register (Read Only) Offset: 0001H Bit 7 6 5 4 3 2 1 0 ÚÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄ¿ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ÀÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÙ Once the Board ID Register is found at a particular I/O address, this register should be read to determine the hardware configuration of the board. Bit 0 Daughter Board Present This bit is cleared to 0 when the daughter board is present. This bit is set to 1 when the daughter board is not present. Bit 1 Main Board Ready This bit is cleared to 0 when the main processor sets its ready bit. This bit is set to 1 when the main processor has not set its ready bit. This bit is reset to 1 when the main board is placed in the download mode. Bit 2 Daughter Board Ready This bit is cleared to 0 when the daughter processor sets its ready bit. This bit is set to 1 when the daughter processor has not set its ready bit. This bit is reset to 1 when the daughter board is placed in the download mode. Bits 4-3 Main Board Handshake Configuration These bits return the handshake configuration of the main board. Bit 4 3 Configuration 0 0 Illegal Configuration 0 1 RJ11 Partial Handshakes 1 0 DB25 Full Handshakes 1 1 RJ11 No Handshakes Bits 6-5 Daughter Board Handshake Configuration These bits return the handshake configuration of the daughter board. Bit 6 5 Configuration 0 0 Illegal Configuration 0 1 RJ11 Partial Handshakes 1 0 DB25 Full Handshakes 1 1 RJ11 No Handshakes Bit 7 Interrupt Enable State This bit is set to 1 when the interrupt is enabled. This bit is cleared to 0 when the interrupt is disabled. ACL 16(+) Map Register (Write Only) Offset: 0001H Bit 7 6 5 4 3 2 1 0 ÚÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄ¿ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ÀÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÙ This register selects the tri-port RAM address mapping and also enables and disables interrupts. Bit 0 Interrupt Enable Setting this bit to 1 enables interrupts from the board. Clearing this bit to 0 disables interrupts from the board. Bits 7-2 Address Lines A19-A14 These bits select address lines A19-A14 for the tri-port RAM. 3.5 ACL MC The ACL MC board has no standard I/O registers. It does, however, contain several Programmable Option Select (POS) registers. The ACL MC board also contains a memory-mapped IRQ Reset Register. The ACL MC board contains an 8K byte dual port RAM. The dual port RAM address of the ACL MC is selected by the configuration program contained on the PS/2 reference diskette. The dual port RAM is always enabled. NOTE There is no way for the host PC software to reset the ACL MC CPU. However, the board can be reset by a warm boot ( in DOS). 3.5.1 Memory-Mapped Register IRQ Reset Register Dual Port Offset: 1FF8H Bit 7 0 ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ ³ Undefined ³ ³ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ The IRQ Reset Register is a memory-mapped register at offset 1FF8H through 1FFFH in the dual port RAM. Data read from this area is undefined. To reset the IRQ line, interrupt service routines must read from offset 1FF8H in the dual port RAM at the start of their processing. 3.5.2 POS Registers POS registers permit the system's Power-On Self-Test to identify and enable the adapter, as well as configure the dual port RAM address and IRQ level. CAUTION Star Gate recommends that the POS registers be configured only by the Power-On Self-Test. Direct use of the POS registers by application programs could cause improper operation or compatibility problems. Refer to the PS/2 Technical Reference Manual for more information on POS registers. ACL MC POS Registers 0 and 1(Read Only) I/O Address: 100H & 101H POS Register 0 Bit 7 0 ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ ³ E1H ³ ³ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ POS Register 1 Bit 7 0 ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ ³ 67h ³ ³ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ These registers return the ACL MC Adapter Identification (67E1H). POS Register 0 returns the least significant byte (E1H), and POS Register 1 returns the most significant byte (67H). ACL MC POS Register 2 I/O Address: 102Hz Bit 7 6 5 4 3 2 1 0 ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ ³ ³ ³ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ Bit 0 Adapter Enable Setting this bit to 1 enables the adapter. Clearing this bit to 0 disables the adapter. Bits 4-1 Address Lines A23-A20 These bits select address lines A23-A20 for the dual port RAM. ACL MC POS Register 3 I/O Address: 103H Bit 7 6 5 4 3 2 1 0 Bits 7-1 Address Lines A19-A13 These bits select address lines A19-A13 for the dual port RAM. ACL MC POS Register 4 I/O Address: 104H Bit 7 0 ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ ³ ³ ³ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ This register is undefined. ACL MC POS Register 5 I/O Address: 105H Bit 7 6 5 4 3 2 1 0 ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ ³ ³ ³ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ Bits 2-0 IRQ Level These bits select the IRQ Level and are defined as follows: Bit 2 1 0 IRQ Level 0 0 0 IRQ3 0 0 1 IRQ4 0 1 0 IRQ5 0 1 1 IRQ7 1 0 0 IRQ9 1 0 1 IRQ10 1 1 0 IRQ11 1 1 1 IRQ12 Bit 3 IRQ Enable Setting this bit to 1 enables the IRQ. Clearing this bit to 0 disables the IRQ. Chapter 4 ACL Family Control Program 4.1 Introduction The ACL family control program is the standard control program software provided by Star Gate Technologies. It contains the code necessary to carry out the main functions of the ACL family: transmitting and receiving data. Each type of ACL family adapter has a separate but functionally compatible control program. The following table lists the ACL family adapters with their control program filenames. Board Type Control Program Filename ACL ACL.CP ACL II ACL2.CP ACL II+ ACL2.CP ACL IIR ACL2R.CP ACL IIR+ ACL2R.CP ACL 16 ACL16.CP ACL 16+ ACL16.CP ACL MC ACLMC.CP The ACL family developer's disk contains the DOS utility program ACLLOAD.EXE that will download a control program to any ACL family board. The source code for ACLLOAD.EXE is also contained on the ACL family developer's disk. 4.2 Dual Port RAM Interface The ACL family control program and the host interface program communicate through the dual port RAM. This chapter describes the structure of this interface and its theory of operation. The ACL 16 and ACL 16+ use tri-ported RAM which is described in chapter 6, section 6.6.3. The ACL family control program logically divides the dual port RAM into three sections: Global Control Block Channel Control Blocks Buffer Area 4.3 Global Control Block The Global Control Block (GCB) contains command fields and data which apply to the ACL family adapter in general. Table 4.1 lists the fields making up the Global Control Block. TABLE 4.1 - Global Control Block Fields GCB Offset Field Description Access 0000H Global Command Word (R/W) 0002H Global Status Word (RO) 0004H Global Service Request (X) 0006H Available Buffer Space Remaining (RO) 0008H Board Type (RO) 000AH ACL Family Control Program Version (RO) 000CH Channel Control Block Count (RO) 000EH Channel Control Block Offset (RO) 0010H Channel Control Block Size (RO) 0012H Global Command Word 2 (R/W) 0014H Global Status Word 2 (RO) 0016H Communication Error Service Request (X) 0018H input Buffer Service Request (X) 001AH Output Buffer Service Request (X) 001CH Modem Status Change Service Request (X) 001EH Channel Command Service Request (X) NOTES 1. Offsets are from the base address of the Global Control Block. The base address of the Global Control Block is the same as the base address that was selected for the dual port RAM. 2. The different access types are: (RO) Read Only (R/W) Read and Write (X) Exchange The fields with an access type of (X) are Service Request fields. See section 4.5.5 for further information on these fields. Global Command Word (R/W) GCB Offset: 0000H Bit 15 0 ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ ³ ³ ³ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ The host interface program uses the Global Command Word to issue commands to the ACL family control program. Write the desired command to this field, wait for the field to return to 0000H, and then check the Global Status Word for any errors. Global Command 0000H: Ready After the ACL family control program has been downloaded and its initialization has been completed, the program enters the Normal Operating Mode and writes a 0000H to the Global Command Word. In this mode, characters can be transmitted and received, channels can be configured, and commands can be issued to the ACL family control program. Global Command 0001H: Diagnostic Mode Diagnostic Mode is not currently implemented by the ACL family control program. Global Command 0002H: Reset Reset stops the ACL family control program and restarts the resident firmware. This command deletes the ACL family control program from the local RAM and prepares the adapter for another download. This is a software-only reset; no hardware is reset by this command. Global Status Word (RO) GCB Offset: 0002H Bit 15 0 ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ ³ ³ ³ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ The host interface uses the Global Status Word to find out the current status of the ACL family control program and related hardware. Global Status 0000H: Ready Ready means that the ACL family control program is in the Normal Operating Mode and that no errors have occurred. Global Status 0001H: Stopped Stopped means that the ACL family control program has stopped because of an unexpected error. Global Status 0002H: Dual Port RAM Error Dual Port RAM Error means that the ACL family control program detected an error in the dual port memory during initialization. Global Status 0003H: Invalid Command Invalid Command means that an invalid command was placed in the Global Command Word. Global Status 0004H: Busy Busy is placed in the Status Word by the ACL family control program while it is initializing. After it has initialized, the ACL family control program enters the Normal Operating Mode and places a 0000H in the Status Word to indicate that it is ready. Global Service Request (X) GCB Offset: 0004H Bit 7 6 5 4 3 2 1 0 ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ ³ ³ ³ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ Bit 15 14 13 12 11 10 9 8 ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ ³ ³ ³ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ The Global Service Request is used to indicate the channels which request service. Each time any of the five service request conditions occur, the bit corresponding to the channel is set. The five service request conditions are discussed in section 4.5.5. For all eight-port boards, bits 15-8 are always cleared to 0. Available Buffer Space Remaining (RO) GCB Offset: 0006H Bit 15 0 ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ ³ ³ ³ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ This field shows the amount of buffer space available for input and output buffers. The Available Buffer Space Remaining word is updated after each configuration. ACL MC only This field represents the amount of intermediate buffer space available. If this word has a value of FFFFH, more than 64K bytes of space are available. Board Type (RO) GCB Offset: 0008H Bit 15 0 ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ ³ ³ ³ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ Value Board Type 0000H ACL Board 0001H ACL II Board 0002H ACL IIR Board 0004H ACL MC Board 0005H ACL 16 Board 0007H ACL II+ 0008H ACL IIR+ 0009H ACL 16+ ACL Family Control Program Version (RO) GCB Offset: 000AH Bit 7 4 3 0 ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ ³ ³ ³ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ Bit 15 12 11 8 ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ ³ ³ ³ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ This field shows the ACL family control program version in use. The version level is encoded into the field as follows: version WX.YX is encoded as WXYZH, where W, X, Y and Z represent hexadecimal digits. For example, version 4.56 would be encoded as 0456H. Channel Control Block Count (RO) GCB Offset: 000CH Bit 15 0 ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ ³ ³ ³ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ This field shows the number of channel control blocks set up by the control program. This number does not necessarily reflect the number of ports on the board. On a four-port board, the control program still sets up eight control blocks, but channels 4-7 will have a non-functional UART indicated in the Channel Status Word of the Channel Control Block. Channel Control Block Offset (RO) GCB Offset: 000EH Bit 15 0 ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ ³ ³ ³ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ This field contains the offset of the first Channel Control Block (CCB) from the base of the dual ported memory. This is necessary because future revisions may change the size of the GCB. Use this field to determine the base address of the first CCB. Channel Control Block Size (RO) GCB Offset: 0010H Bit 15 0 ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ ³ ³ ³ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ This field contains the size of each Channel Control Block (CCB). This is necessary because future revisions may change the size of the CCB. Use this word to determine the base addresses of the remaining CCBs. Global Command Word 2 (R/W) GCB Offset: 0012H Bit 7 1 0 ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ ³ ³ ³ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ Bit 15 8 ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ ³ ³ ³ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ The Global Command Word 2 is used by the application to give additional commands to the control program. Bit 0 Interrupt Acknowledge Setting this bit to "1" informs the ACL family control program that the host interface program is ready to accept another interrupt. Global Status Word 2 (RO) GCB Offset: 0014H Bit 15 0 ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ ³ ³ ³ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ The Global Status Word 2 is used to inform the host interface program of additional status of the control program. Global Status Word 2 0000H: Ready Ready is currently the only value returned by the ACL family control program. This field is set to 0000H at startup and after the ACL family control program has processed an interrupt acknowledge. Communication Error Service Request (X) GCB Offset: 0016H Bit 7 6 5 4 3 2 1 0 ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ ³ ³ ³ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ Bit 15 14 13 12 11 10 9 8 ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ ³ ³ ³ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ This field is used to inform the host interface program which channels require servicing due to communication errors. The bit corresponding to the requesting channel is set each time a break is received or an overrun error, parity error, or framing error occurs. For all eight-port boards, bits 15-8 are always cleared to 0. Input Buffer Service Request (X) GCB Offset: 0018H Bit 7 6 5 4 3 2 1 0 ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ ³ ³ ³ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ Bit 15 14 13 12 11 10 9 8 ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ ³ ³ ³ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ This field is used to inform the host interface program which channels require servicing due to an input buffer condition. The bit corresponding to the requesting channel is set each time one of these conditions occur: The number of characters specified by the trigger rate has been received. The most recent character was received more than 4 character times in the past. The input buffer fills up. For all eight-port boards, bits 15-8 are always cleared to 0. Output Buffer Service Request (X) GCB Offset: 001AH Bit 7 6 5 4 3 2 1 0 ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ ³ ³ ³ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ Bit 15 14 13 12 11 10 9 8 ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ ³ ³ ³ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ This field is used to inform the application program which channels require servicing due to an output buffer condition. The bit corresponding to the requesting channel is set each time the output buffer is empty or at the low water mark. For all eight-port boards, bits 15-8 are always cleared to 0. Modem Status Change Service Request (X) GCB Offset: 001CH Bit 7 6 5 4 3 2 1 0 ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ ³ ³ ³ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ Bit 15 14 13 12 11 10 9 8 ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ ³ ³ ³ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ This field is used to inform the application program which channels require servicing due to a modem status change. The bit corresponding to the requesting channel is set each time the modem status changes. For all eight-port boards, bits 15-8 are always cleared to 0. Channel Command Service Request (X) GCB Offset: 001EH Bit 7 6 5 4 3 2 1 0 ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ ³ ³ ³ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ Bit 15 14 13 12 11 10 9 8 ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ ³ ³ ³ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ This field is used to inform the application program which channels require servicing due to the completion of a channel command. The bit corresponding to the requesting channel is set each time a channel command is completed successfully or unsuccessfully. For all eight-port boards, bits 15-8 are always cleared to 0. 4.4. Channel Control Blocks The Channel Control Blocks (CCB) are subdivided into fields which reflect the status of a particular channel. CCBs contain channel-specific data and command words. Certain CCB fields can cause the ACL family board to perform specific operations. There is one CCB for each of the channels supported by the adapter. Since future revisions of the ACL family control program may enlarge the size of the GCB or CCBs, we have devised a method to make upgrading the control program easier. Currently defined fields will always remain fixed relative to the base of their control blocks. Any field added in the future will be added after the current ones. In the GCB, the Channel Control Block Offset field contains the offset of the first Channel Control Block from the base of the dual port RAM. Use this word to determine the base address of the first CCB. The Channel Control Block Count field of the GCB contains the number of Channel Control Blocks set up by the ACL family control program. The Channel Control Block Size field of the GCB contains the size of each Channel Control Block. Use this word to determine the base addresses of the remaining CCBs. After downloading, a set of default configuration parameters is established. The CCB default parameter values are: TABLE 4.2 - Channel Control Block Default Parameters Baud Rate 9600 Bits Per Character 8 Number of Stop Bits 1 Parity Type None Line Protocol None Input Buffer Size 448 (8K dual port) 960 (16K dual port) 4032 (64K dual port) 2048 for ACL MC only Output Buffer Size 448 (8K dual port) 960 (16K dual port) 4032 (64K dual port) 2048 for ACL MC only Input Buffer Trigger Rate 0 (Every Character) Output Buffer Low Water 0 (Empty) Input Buffer High Water 928 (16K) or 4000 (64K) Input Buffer Low Water 896 (16K) or 3968 (64K) ACL MC only The ACL MC control program uses a double buffering scheme to transmit and receive characters. The first buffer is the standard circular buffer in the dual port RAM; the second is an intermediate buffer in the local RAM. The dual port buffers are of fixed size and fixed location. The Input Buffer Size and Output Buffer Size fields in the CCBs reflect the intermediate buffer sizes, not the dual port buffer sizes. The Input/Output Starting/Ending Address fields are set at initialization and always remain the same. TABLE 4.3 - Control Program Channel Control Block Definition CCB Offset Field Description Access 0000H Baud Rate (R/W) 0002H Data Format (R/W) 0004H Line Protocol (R/W) 0006H Input Buffer Size (R/W) 0008H Output Buffer Size (R/W) 000AH Input Buffer Trigger Rate (R/W) 000CH Output Buffer Low Water Mark (R/W) 000EH IXON Characters (R/W) 0010H Input Buffer High Water Mark (R/W) 0012H Input Buffer Low Water Mark (R/W) 0014H Channel Command (R/W) 0016H Channel Status (R/W) 0018H Input Buffer Starting Address (RO) 001AH Input Buffer Ending Address (RO) 001CH Output Buffer Starting Address (RO) 001EH Output Buffer Ending Address (RO) 0020H Next Character to Input Buffer (RO) 0022H Next Character from Input Buffer (R/W) 0024H Next Character to Output Buffer (R/W) 0026H Next Character from Output Buffer (RO) 0028H Communication Error Status (X) 002AH Bad Character Pointer (R/W) 002CH Modem Control (R/W) 002EH Modem Status (RO) 0030H Blocking Status (RO) 0032H Character Received Flag (R/W) 0034H IXOFF Characters (R/W) 0036H Channel Status 2 (RO) 0038H Error/Strip Character ACL MC Only (R/W) NOTES 1. Offsets are from the base of the specific Channel Control Block. 2. The different access types are: (RO) Read Only (R/W) Read and Write (X) Exchange The field with an access type of (X) is the Communication Error Status field. This field must be updated by both the host PC and the ACL family processor. To avoid the possibility of losing a Communication Error Status bit, the host PC must access and clear the field using the XCHG (assembler) instruction with the register operand cleared to zero. Baud Rate (R/W) CCB Offset: 0000H Bit 15 0 ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ ³ ³ ³ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ This field defines a baud rate for the receiver and transmitter in the corresponding ACL family board channel. NOTES 1. Because decimal values can not be directly represented in the Baud Rate field, it is necessary to use the value 134 in the field in order to program the baud rate 134.5. 2. For ACL family control programs before version 4.35, 19.2K baud is not available. ACL, ACL II, ACL IIR, ACL 16, ACL MC only There are two sets of possible baud rates for each of these boards. Table 4.4 represents these two sets as two columns. TABLE 4.4 - ACL Family Non-Plus Boards Baud Rate Sets Row# Column 1 Column 2 0 50 75 1 110* 110* 2 134.5* 134.5* 3 200 150 4 300* 300* 5 600* 600* 6 1200* 1200* 7 1050 2000 8 2400* 2400* 9 4800* 4800* 10 7200 1800 11 9600* 9600* 12 38.4K ------ 13 19.2K* 19.2K* The control program does not specify a column when one of these baud rates is selected. When the control program selects a baud rate for a channel, it selects a row and sometimes a column. According to Table 4.4, the control program must select row 7 and column 1 to select 1050 baud. However, to select 9600 baud, the control program only selects row 11 because both columns are 9600 baud at row 11. A problem arises when you set one channel to a baud rate from one column, and then set the channel it's paired with to a different baud rate in the other column. (Channel 1 is paired with channel 2, channel 3 is paired with channel 4, etc.) Suppose you first set channel 1 to 200 baud, and then set channel 2 to 1800 baud. The control program first selects row 3 and column 1 for channel 1. The control program then selects row 10 and column 2 for channel 2. However, this switches channel 1's baud rate selection to column 2, while the original row selection remains the same. Channel 1's baud rate changes to 150 from the 200 you originally set it at. To avoid this problem, follow these guidelines: 1. For a channel and its pair, select the same baud rate or different baud rates from the same column. 2. If you need a baud rate from one column and a different baud rate from the other column, configure the baud rates on channels that are not paired together. For example, configure channel 2 for 1050 baud and configure channel 3 for 4800 baud. ACL II+, ACL IIR+, ACL 16+ only There are four sets of possible baud rates for each DUART. Table 4.5 represents these four sets as four columns. Two columns are under group 1, and two columns are under group 2. TABLE 4.5 - ACL Family Plus Boards Baud Rate Sets Group 1 Group 2 Row # Column 1 Column 2 Column 1 Column 2 0 50 75 ------ ------ 1 110* 110* ------ ------ 2 134.5* 134.5* ------ ------ 3 200 150 ------ ------ 4 300* 300* ------ ------ 5 600* 600* ------ ------ 6 1200* 1200* ------ ------ 7 1050 2000 ------ ------ 8 2400* 2400* ------ ------ 9 4800* 4800* ------ ------ 10 7200 1800 ------ ------ 11 9600* 9600* ------ 57.6K 12 38.4K ------ ------ 115.2K 13 19.2K* 19.2K* ------ ------ When the control program selects a baud rate for a channel, it selects a group, a column (sometimes), and a row, in that order. According to Table 4.5, the control program must select group 1, column 1, and row 7 to select 1050 baud. However, to select 9600 baud, the control program only selects group 1 and row 11 because both columns in group 1 are 9600 baud at row 11. A problem arises when you set one channel of a DUART to a baud rate from one group and column, and then set the other channel to a different baud rate in another group and/or column. Suppose you first set channel 1 of a DUART to 115.2K baud, and then set channel 2 to 7200 baud. The control program first selects group 2, column 2, and row 12 for channel 1. The control program then selects group 1, column 1, and row 10 for channel 2. This switches the DUART to group 1 and column 1, while keeping the row selections the same. This changes channel 1's baud rate from 115.2K to 38.4K. The control program does not specify a column when one of these baud rates is selected. To avoid this problem, follow these guidelines: 1. For both channels in a DUART, select the same baud rate or different baud rates from the same group and column. 2. If you need a baud rate from one group and column, and a different baud rate from another group and/or column, configure one baud rate on one channel of a DUART, and configure the other baud rate on a channel of another DUART. 3. Column 1 of group 2 is never used. Because the baud rate is stored as an unsigned word value in this field, the highest value that can be represented directly is 65535. Due to this limitation, it is necessary for the control program to perform a translation for a higher baud rate. Use the following table to program a higher baud rate: Actual Baud Rate Baud Rate Field Value in CCB 115200 FF01H Data Format (R/W) CCB Offset: 0002H Bit 7 6 5 4 3 2 1 0 ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ ³ ³ ³ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ Bit 15 9 8 ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ ³ ³ ³ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ This field defines the number of data bits, number of stop bits, parity type, and channel mode of the corresponding channel. Bits 1-0 Number of Data Bits Defines the number of data bits in each transmitted or received character. Bit 1 0 Number of Data Bits 0 0 5 Bits 0 1 6 Bits 1 0 7 Bits 1 1 8 Bits Bit 2 Number of Stop Bits Clearing to "0" generates and checks 1 stop bit. Setting "1" generates and checks 2 stop bits. Bits 5-3 Parity Type Defines the parity generated and checked. Bit 5 4 3 Parity Type x x 0 No Parity 0 0 1 Generate and Check Odd Parity 0 1 1 Generate and Check Even Parity 1 0 1 Generate and Check Mark Parity 1 1 1 Generate and Check Space Parity Bits 7-6 Channel Mode Each channel can operate in one of four modes. Bit 7 6 Mode 0 0 Normal 0 1 Automatic Echo 1 0 Local Loopback 1 1 Remote Loopback In the Normal mode, the transmitter and receiver operate independently. In the Automatic Echo mode, received data is retransmitted. Received data is sent to the ACL family processor, but the ACL family CPU-to-transmitter link is disabled. In the Local Loopback mode, the transmitter is internally connected to the receiver. The transmitter output is held in the mark state. In the Remote Loopback mode, received data is retransmitted. Received data is not sent to the ACL family processor, and the ACL family CPU-to-transmitter link is disabled. Bit 8 Error Reporting Type Clearing this bit to 0 causes the control program to report communication errors and to substitute a value of FFH (or the upper byte value of the Error/Strip Character field of the ACL MC board) in the dual port input buffer for the erroneous character. Setting this bit to 1 causes the control program to report communication errors and to place the erroneous received character in the dual port input buffer. See section 4.5.3 for a complete explanation of the error-handling procedure. Bits 15-9 Reserved (0) These bits are always cleared to 0. Line Protocol (R/W) CCB Offset: 0004H Bit 7 6 5 4 3 2 1 0 ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ ³ ³ ³ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ Bit 15 14 13 12 11 10 9 8 ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ ³ ³ ³ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ This field defines the line protocol used for the UART. Bit 0 IXON This bit enables start/stop output control. When the ACL family adapter receives the XOFF character, it stops sending data on that channel until the XON character is received. Then transmission is resumed. To select the XON/XOFF characters for control, place the hex codes of the desired characters in the upper and lower byte of the IXON Characters field of the CCB. Bit 1 IXANY Use of this protocol requires that IXON also be enabled. When the ACL family adapter receives the XOFF character, it stops sending data on that channel. Once transmission is suspended, any character received on that channel will cause character transmission to resume if this bit is set. As with the IXON protocol, place the XON/XOFF characters used for control in the IXON Characters field. If none are specified, the default is XON = 11H and XOFF = 13H. Bit 2 IXOFF Setting this bit transmits start/stop characters. When the input buffer reaches the mark set by the Input Buffer High Water Mark field, the character defined as XOFF is transmitted. This signals the remote device to stop sending characters. After the input buffer level is emptied to below the value set by the Input Buffer Low Water Mark, the character defined as XON is transmitted. This signals the remote device to resume sending characters. To select the XON/XOFF characters for control, place the hex codes of the desired characters in the upper and lower byte of the IXOFF Characters field. If none are specified, the default is XON = 11H and XOFF = 13H. Bit 3 CTS Controls Transmitter Setting this bit specifies that the transmitter will respond to the state of the CTS handshake line. This function is implemented in the UART hardware. When the CTS line is asserted, the transmitter is enabled to transmit characters. When the CTS line is negated, the transmitter is disabled and will not transmit any characters. Bit 4 Receiver Controls RTS (DTR) Setting this bit specifies that the UART hardware controls the RTS line. RTS is always asserted, except when the UART input FIFO fills up. The blocking status is not updated by this protocol. If Modem Control/Status is enabled, the RTS bit in the Modem Control field of the CCB must be set for this protocol to assert RTS. NOTE This function is not supported by the ACL 16 or the ACL 16+ boards. Bit 5 Transmitter Controls RTS Setting this bit specifies that the transmitter will control the RTS handshake line. Setting this bit causes the RTS line to be negated automatically one bit time after the characters in both the transmitter shift register and the holding register are completely transmitted. Bit 6 Input Buffer Controls RTS Setting this bit specifies that the receiver will control the RTS handshake line. When this protocol is active, the ACL family control program will assert the RTS line until the Input Buffer High Water Mark is reached. At that time the RTS line will be negated. The RTS line will be asserted once again only after the number of characters in the input buffer falls below the Input Buffer Low Water Mark. This protocol is implemented in the ACL family control program. The blocking status is updated when this protocol is used. Bit 7 Enable Modem Control/Status Setting this bit makes the following functions available through the dual port: Direct control of the DTR and RTS handshake lines. Ability to send Break streams. Ability to read the status of the CTS, DSR, RI, and DCD handshake lines. These capabilities are provided through the use of the Modem Control and the Modem Status fields of the CCB. Bit 8 DTE/DCE Select For the ACL II and the ACL II+ only: Clearing this bit to "0" selects DTE configuration for the channel. Setting this bit to "1" selects DCE configuration for the channel. Bit 9 Disable EIA-232 For the ACL II and the ACL II+ only: Clearing this bit to "0" enables the EIA-232 drivers and receivers on the channel. Setting this bit to "1" disables the EIA-232 drivers and receivers. NOTE The ACL II and ACL II+ are initialized with this bit set to "1", disabling the EIA-232 drivers and receivers. This bit must be cleared to "0", and the channel must be configured before you can use the channel. Bit 10 EIA-485 Enable For the ACL, ACL II, and ACL MC boards equipped with EIA-485 external connection panels: Setting this bit specifies that the DTR output will be controlled by the transmission of data from the port. When data is placed in the output buffer for the channel, the control program will assert DTR prior to transmitting any data. When all data in the output buffer has been transmitted, DTR will be negated. Bit 11 Disable EIA-485 Always Listen By default, when an EIA-485 external connection panel is being used, any data transmitted by a port will be received by every port connected to the EIA-485 line, including the transmitting port. Setting this bit causes the control program to disable the receiver before it begins transmitting data and re-enable the receiver when it completes transmitting data. This bit is only active when bit 10 (EIA-485 Enable) is set. Bit 12 Character Strip Enable (ACL MC only) This bit is applicable only to the ACL MC board. Setting this bit to 1 enables stripping of the character located in CCB offset 38H (Error/Strip Character field) from the input stream. Clearing this bit to 0 prevents character-stripping. Bits 15-13 Reserved (0) These bits are always cleared to 0. Input Buffer Size (R/W) CCB Offset: 0006H Bit 15 0 ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ ³ ³ ³ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ For all boards except the ACL MC, this field determines the number of bytes of the dual port RAM allocated for receiving characters. A minimum value of 0002H is required to use a channel; the upper bound is limited only by the amount of dual port RAM available. The value of this field should not be changed while any channel is transmitting or receiving data because characters will be lost. ACL MC only This field determines the number of bytes of local RAM allocated to the Intermediate Input Buffer. Each character received requires two bytes of intermediate input buffer space. Therefore, specify Input Buffer Size as twice the number of characters which need to be buffered at one time. A minimum value of 16 is required to use a channel. The upper bound is limited by the amount of buffer space remaining. This can be found in the Available Buffer Space Remaining field in the GCB. This value must be a multiple of 16. If it is not, the next higher multiple of 16 will be used. If a value of 0 is specified, then the current Input Buffer size is returned after configuration is complete. If a value greater than the Available Buffer Space Remaining is specified, then the maximum allowed buffer size is used, and this value is returned after configuration is complete. Output Buffer Size (R/W) CCB Offset: 0008H Bit 15 0 ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ ³ ³ ³ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ For all boards other than the ACL MC, this field determines the number of bytes of the dual port RAM allocated for transmitting characters. A minimum value of 0002H is required to use a channel; the upper bound is limited only by the amount of dual port RAM available. The value of this field should not be changed while any channel is transmitting or receiving data because characters will be lost. ACL MC only This field allocates the number of bytes of local RAM to the Intermediate Output Buffer. A minimum value of 16 is required to use a channel. The upper bound is limited by the amount of buffer space remaining. The amount of buffer space can be found in the Available Buffer Space Remaining word in the GCB. This value must be a multiple of 16. If it is not, the next higher multiple of 16 will be used. If a value of 0 is specified, then the current Output Buffer size is returned after configuration is complete. If a value greater than the Available Buffer Space Remaining is specified, then the maximum allowed buffer size is used, and this value is returned after configuration is complete. Input Buffer Trigger Rate (R/W) CCB Offset: 000AH Bit 15 0 ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ ³ ³ ³ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ This field defines the number of characters that must be received before the host PC is alerted to a service request. A service request will also be indicated if any characters were received, and the most recent character was received more than four character times in the past. The maximum value is 32767. If interrupts from the ACL family board are disabled, the Input Buffer Service Request word of the GCB will still be updated. A value of 0 will indicate a service request on each character received. Output Buffer Low Water Mark (R/W) CCB Offset: 000CH Bit 15 0 ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ ³ ³ ³ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ This field defines the number of characters that must be left in the output buffer for the host PC to be alerted to a service request. If interrupts from the ACL family are disabled, the Output Buffer Service Request field of the GCB will still be updated. IXON Characters (R/W) CCB Offset: 000EH Bit 7 0 ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ ³ ³ ³ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ Bit 15 8 ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ ³ ³ ³ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ When IXON is enabled in the Line Protocol field, the IXON Characters field determines the characters that, when received, start or stop output. These values are used in conjunction with the IXON and IXANY protocols described earlier in the Line Protocol field description. If both bytes are zero, the default XON (11H) and XOFF (13H) values are used. Input Buffer High Water Mark (R/W) CCB Offset: 0010H Bit 15 0 ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ ³ ³ ³ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ This field defines the number of characters that need to be in the input buffer for an XOFF to be transmitted (IXOFF line protocol) or for RTS to be negated (Input Buffer Controls RTS line protocol). This value must be less than the Input Buffer Size. If both the Input Buffer High Water Mark and Low Water Mark are zero, this value defaults to 32 characters less than the Input Buffer Size. Input Buffer Low Water Mark (R/W) CCB Offset: 0012H Bit 15 0 ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ ³ ³ ³ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ This field defines the number of characters that need to be left in the input buffer for an XON to be transmitted (IXOFF line protocol) or for RTS to be asserted (Input Buffer Controls RTS line protocol). This value must be less than the Input Buffer High Water Mark value. If both the Input Buffer High Water Mark and Low Water Mark are zero, this value defaults to 64 characters less than the Input Buffer Size. Channel Command (R/W) CCB Offset: 0014H Bit 7 6 5 4 3 2 1 0 ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ ³ ³ ³ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ Bit 15 8 ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ ³ ³ ³ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ Setting one or multiple bits in this field to "1" sends the specified commands to the ACL family control program. The ACL family control program will then perform the commands specified on the channel, write a status value into the Channel Status field, and write a 0000H into the Channel Command field. Bit 0 Configure Channel and UART Setting this bit causes these parameters to be configured: Baud Rate Data Format Line Protocol Input Buffer Size Output Buffer Size IXON Characters Output Buffer Low Water Mark Input Buffer Trigger Rate Input Buffer High Water Mark Input Buffer Low Water Mark Modem Control IXOFF Characters This command does not reset the input and output buffer pointers unless either buffer size changes. In this case, both pointers on every channel are reset. The Modem Control field is read, and the Modem Control Lines are set accordingly when this command is wissued. Bit 1 Configure Channel (Not UART) Setting this bit causes these parameters to be configured: Input Buffer Size Output Buffer Size IXON Characters Output Buffer Low Water Mark Input Buffer Trigger Rate Input Buffer High Water Mark Input Buffer Low Water Mark Modem Control IXOFF Characters This command does not reset the input and output buffer pointers unless either buffer size changes. In this case, both pointers on every channel are reset. The Modem Control field is read, and the Modem Control Lines are set accordingly when this command is issued. Bit 2 Flush Input Buffer Setting this bit causes both input buffer pointers to be set to the Input Buffer Starting Address. Bit 3 Flush Output Buffer Setting this bit causes both output buffer pointers to be set to the Output Buffer Starting Address. Bit 4 Enable Receiver Setting this bit causes this channel's receiver to be enabled. This allows it to receive characters. Bit 5 Disable Receiver Setting this bit causes this channel's receiver to be disabled. This inhibits it from receiving any characters. Bit 6 Enable Transmitter Setting this bit causes this channel's transmitter to be enabled. This allows it to send characters. Bit 7 Disable Transmitter Setting this bit causes this channel's transmitter to be disabled. This inhibits it from sending any characters. Channel Status (R/W) CCB Offset: 0016H Bit 15 0 ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ ³ ³ ³ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ This field reports the status of the last command which was executed by setting bits in the Channel Command field. Possible values are: Value Definition 0000H No Error 0001H Invalid Baud Rate 0002H Invalid Data Format 0003H Invalid Line Protocol 0004H Invalid Input Buffer Size 0005H Invalid Output Buffer Size 0006H Invalid Input Buffer Trigger Rate 0007H Invalid Output Buffer Low Water Mark 0008H Invalid XON/XOFF Characters 0009H Invalid Input Buffer High Water Mark 000AH Invalid Input Buffer Low Water Mark 000BH Non-functional UART Input Buffer Starting Address (RO) CCB Offset: 0018H Bit 15 0 ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ ³ ³ ³ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ This field contains the address of the start of the input buffer. This address is relative to the base of the dual port. Input Buffer Ending Address (RO) CCB Offset: 001AH Bit 15 0 ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ ³ ³ ³ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ This field contains the address of the end of the input buffer. This address is relative to the base of the dual port. Output Buffer Starting Address (RO) CCB Offset: 001CH Bit 15 0 ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ ³ ³ ³ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ This field contains the address of the start of the output buffer. This address is relative to the base of the dual port. Output Buffer Ending Address (RO) CCB Offset: 001Eh Bit 15 0 ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ ³ ³ ³ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ This field contains the address of the end of the output buffer. This address is relative to the base of the dual port. Next Character to Input Buffer (RO) CCB Offset: 0020H Bit 15 0 ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ ³ ³ ³ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ This field contains the address of the next available space in the input buffer. This address is relative to the base address of the dual port. Each time the ACL family adapter receives a character, it is placed at this location, and this pointer is incremented by one. The input buffer is a circular buffer. When the pointer reaches the end of the buffer, the next character will be wrapped around to the start. The ACL family control program performs this task automatically. Refer to section 4.5.2 for more information on receiving characters. Next Character from Input Buffer (R/W) CCB Offset: 0022H Bit 15 0 ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ ³ ³ ³ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ This field contains the address of the next character to be read from the input buffer. This address is relative to the base address of the dual port. The host interface program must increment this pointer after reading the character in the input buffer. When this pointer reaches the end of the input buffer, it must be wrapped around to the start by the host interface program. This pointer should always be logically at or behind the Next Character to Input Buffer. When the two pointers are equal, there are no characters in the input buffer. Refer to section 4.5.2 for details on receiving characters. Next Character to Output Buffer (R/W) CCB Offset: 0024H Bit 15 0 ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ ³ ³ ³ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ This field contains the address of the next available space in the output buffer. This address is relative to the base address of the dual port. The host interface program must increment this pointer after placing a character in the output buffer. This pointer should always be logically at or ahead of the Next Character from Output Buffer. When the two pointers are equal, there are no characters in the output buffer. When the Next Character to Output Buffer pointer reaches the end of the Output Buffer, it must be wrapped around to the start by the host interface program. The host interface program must make sure that this pointer does not wrap around and overtake the Next Character from Output Buffer pointer because this will cause characters to be lost. Refer to section 4.5.1 for more information on transmitting characters. Next Character from Output Buffer (RO) CCB Offset: 0026H Bit 15 0 ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ ³ ³ ³ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ This field contains the address of the next character to be read from the output buffer. This address is relative to the base of the dual port. The ACL family control program increments this pointer after reading the character from the output buffer. Also, the ACL family control program will wrap the pointer around to the start when it reaches the end of the output buffer. Refer to section 4.5.1 for more information on transmitting characters. Communication Error Status (X) CCB Offset: 0028H Bit 7 6 5 4 3 2 1 0 ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ ³ ³ ³ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ Bit 15 8 ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ ³ ³ ³ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ This field contains a bit pattern of all of the communication errors which have occurred since the last time the application cleared it. Bad Character Pointer (R/W) CCB Offset: 002AH Bit 15 0 ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ ³ ³ ³ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ This field contains the address of the first occurrence of an error in the input buffer. This address is relative to the base address of the dual port. After reading this field, the host interface program should reset it to zero. The ACL family control program will not update this field unless it has been cleared to zero. Modem Control (R/W) CCB Offset: 002CH Bit 7 6 5 4 3 2 1 0 ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ ³ ³ ³ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ Bit 15 8 ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ ³ ³ ³ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ When the Modem Control/Status bit of the Line Protocol field is set, the ACL family control program continually monitors the Modem Control field. Any change to this field will be immediately acted upon. This field is also read and used when a Configure Channel command (Bit 0 or 1 of the Channel Command field) is executed. ACL II and ACL II+ only In DCE mode, Bit 0 controls the DSR output pin, and Bit 1 controls the CTS output pin. ACL IIR, ACL IIR+, ACL 16 and ACL 16+ with three handshake line only DTR is not connected and is ignored. ACL 16 and ACL 16+ with no handshake only Uses none of these bits. Modem Status (RO) CCB Offset: 002EH Bit 7 6 5 4 3 2 1 0 ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ ³ ³ ³ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ Bit 15 8 ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ ³ ³ ³ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ When the Modem Control/Status bit of the Line Protocol field is enabled, this field is continuously updated by the ACL family control program. Any change to the modem status lines will be immediately acted on. This field is also updated when a Configure Channel command (bit 0 or 1 of the Channel Command field) is executed. ACL II and ACL II+ only RI is not connected; bit 2 is always 0. Also, in DCE mode, the DTR input pin is reported in bit 3, the RTS input pin is reported in bit 0, and bit 1 is always 0. ACL IIR, ACL IIR+ and ACL 16+ with three handshakes only DSR and RI are not connected. Bits 1 and 2 are always 0. ACL MC only The DSR input pin is reported in bit 3. RI and DCD are not connected. Bits 1 and 2 are always 0. ACL 16 and ACL 16+ with no handshakes only These boards use none of these bits. Blocking Status (RO) CCB Offset: 0030H Bit 7 6 5 4 3 2 1 0 ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ ³ ³ ³ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ Bit 15 8 ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ ³ ³ ³ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ This field reflects the current blocking state of the channel. NOTE Bit 3 is updated only when the Modem Control/Status bit of the Line Protocol field is enabled. Bit 5 is updated only when the Input Buffer Controls RTS bit of the Line Protocol field is enabled. Character Received Flag (R/W) CCB Offset: 0032H Bit 15 0 ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ ³ ³ ³ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ This field is set to FFFFH on every character that is received on this channel. This field can be used by the host interface program to check if characters have been received. To ensure that the flag reflects the correct state, the host interface program should use the following procedure to access and update the flag. 1. Read the Character Received Flag field. If the flag is zero, no characters are available, and you should exit this procedure. 2. Read all the characters that are available and update the Next Character from Input Buffer field following the procedure given in section 4.5.2. 3. Clear the Character Received Flag field. 4. Check if the Next Character from Input Buffer field and Next Character to Input Buffer field are equal. If these fields are equal, no characters are available, and you should exit this procedure. If the fields are not equal, more characters are available, and you should go to step #2. IXOFF Characters (R/W) CCB Offset: 0034H Bit 7 0 ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ ³ ³ ³ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ Bit 15 0 ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ ³ ³ ³ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ When IXOFF is enabled in the Line Protocol field, the IXOFF Characters field selects the characters that are transmitted to start or stop the remote transmitter. As described in the Line Protocol field description, these values are used in conjunction with the IXOFF protocol. If both bytes are zero, the default XON (11H) and XOFF (13H) values are used. Channel Status 2 (RO) CCB Offset: 0036H Bit 7 1 0 ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ ³ ³ ³ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ Bit 15 8 ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ ³ ³ ³ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ This field reflects the current status of the channel. Bit 0 Output Buffer Not Empty This bit is set to 1 when the Output Buffer is not empty (contains characters) or when the UART is in the process of transmitting characters (transmitter is not empty). This bit is cleared to 0 only when the Output Buffer is empty and the UART is not transmitting characters. Since the ACL MC uses an Intermediate Output Buffer, this bit reflects the state of the Output Buffer, Intermediate Output Buffer, and the UART on the ACL MC board. Error/Strip Character (R/W) CCB Offset: 0038H Bit 7 0 ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ ³ ³ ³ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ Bit 15 8 ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ ³ ³ ³ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ Only the ACL MC has this field. Bits 7-0 Strip Character These bits represent the character to be stripped. When Character Strip Enable (bit 12 of the Line Protocol field) is set, all occurrences of this character are stripped from the input stream. Bits 15-8 Error Replacement Character These bits represent the value which is substituted in the dual port input buffer for an erroneous received character if bit 8 of the Data Format field is cleared to 0. This value defaults to FFH. 4.5 Buffer Area The input and output buffers for the channels are used to transfer characters from the ACL family board to the host and to transfer characters from the host to the ACL family board. 4.5.1 Transmitting Characters To transmit a character to a channel, the character must be written to the output buffer of the appropriate channel. Do this by using the Next Character to Output Buffer value as a pointer to identify the next empty location in the output buffer. Place the character into that location and increment the Next Character to Output Buffer by one. After the pointer has been incremented to the upper bound of the output buffer, it must be wrapped around to the beginning. This is necessary because the output buffer is circular. To do this, compare the pointer with the Output Buffer Ending Address value. If the Next Character to Output Buffer value is greater than the Output Buffer Ending Address, set the pointer equal to the Output Buffer Starting Address. The ACL family control program uses the Next Character from Output Buffer pointer to keep track of transmitted characters. In situations where large amounts of data are being transmitted, the Next Character to Output Buffer pointer may possibly overtake the Next Character from Output Buffer pointer. This may occur because characters can be transferred to memory much faster than they can be transmitted from the UART. The host interface program must check that the Next Character to Output Buffer pointer does not overrun the Next Character from Output Buffer pointer. Otherwise, characters will be lost. 4.5.2 Receiving Characters Characters are available when the values of the Next Character from Input Buffer and of the Next Character to Input Buffer are not equal. Once this condition is detected, characters may be retrieved using the procedure described below. To read a character, use the Next Character from Input Buffer value as a pointer. This word is a pointer to the next available character. After reading the character, increment the Next Character from Input Buffer pointer by one to point to the next character. This process is necessary because the ACL family control program uses the offset value to ensure that characters which have not been read are not overwritten by newly received characters. After the pointer has been incremented to the upper bound of the input buffer, it must be wrapped around to the beginning. This is necessary because the input buffer is a circular buffer. To do this, compare the pointer with the Input Buffer Ending Address value. If the Next Character from Input Buffer value is greater than the Input Buffer Ending Address value, set the pointer equal to the Input Buffer Starting Address value. This procedure of reading and updating the pointer may continue until the Next Character from Input Buffer value equals the Next Character to Input Buffer value. This will occur only when the input buffer is empty. 4.5.3 Communication Errors When the ACL family control program detects that it has received an erroneous character, the following steps are taken. 1. If bit 8 of the Data Format field of the Channel Control Block is cleared to 0, the value FFH (or the upper byte value of the Error/ Strip Character field of the ACL MC board) is substituted in the dual port input buffer for the erroneous character. If the bit is set to 1, no substitution is made, and the erroneous character is placed in the dual port input buffer. 2. If the Bad Character Pointer field is 0, the ACL family control program updates it with the input buffer address of the bad character. 3. The ACL family control program sets the appropriate bit in the Communication Error Status field. 4. The Communication Error Service Request field of the Global Control Block is updated. 5. The Global Service Request field of the GCB is updated. 6. The Next Character to Input Buffer pointer is updated. 7. If enabled, an interrupt is generated. The procedure that the host interface program should use to detect and handle communication errors is as follows: 1. Read characters as described in section 4.5.2. 2. If the Bad Character Pointer field and the Next Character from Input Buffer field are equal, then the character is bad. 3. Read the Communication Error Status field and clear it to 0. 4. Set the Bad Character Pointer field to 0. There are some limitations with the current implementation of communication error-handling. 1. Error status is not available on individual characters since it is cumulative. 2. There is no way to determine if all FFH or other error replacement characters are in the input buffer because of communication errors. 4.5.4 Configuring Parameters When the ACL family control program is downloaded, each channel is initialized to the default configuration parameters. These parameters may be changed in the following way. 1. Write the new configuration parameters into the appropriate Channel Control Block. 2. Set the Channel Command field for the desired configuration type. 3. Wait for the Channel Command field to return to 0000H. After the Channel Command field returns to 0000H, check the Channel Status word for any errors. If an error has occurred, the Channel Status field will contain the error code. 4.5.5 Service Requests Service Requests are important conditions that the ACL family control program detects and notifies the host PC about. When the ACL family control program detects that one of the service request conditions has occurred, the following steps are taken: 1. The condition causing the service request is completely handled by the ACL family control program,including updating pointer and status fields. 2. The corresponding Service Request field in the GCB is updated. 3. The Global Service Request field is updated. 4. If enabled, an interrupt is generated. The Service Request fields need to be updated by both the ACL family processor and the host PC. This may potentially cause a service request bit to be lost. To avoid this problem, the host PC must access and clear the field using the XCHG instruction with the Register Operand cleared to zero. An example segment of code is given below: mov ax, 0D0000H ;assume dual port seg= D000H mov es, ax ;es points to dual port seg sub ax, ax ;zero out ax xchg ax, es:[GlobSR] ;get global service bits in ax ;and zero out global service bits It is possible that a service request bit could be set without the condition actually existing. Before handling the service requests indicated by the Service Request fields, always check the pointer and status fields of the channel. 4.5.6 Interrupt Handling It is possible to have the ACL family control program interrupt the host PC when a service request condition occurs. Interrupts are enabled by setting the Interrupt Acknowledge Bit in the Global Command Word 2 field of the Global Control Block. If the ACL family control program had made any service requests prior to setting this bit, an interrupt will be generated when it is set. All ACL MC control programs and version 4.34 and later of the ACL family control program allow multiple ACL family boards to share the same IRQ line. The Interrupt Acknowledge Bit in Global Command Word 2 must be set on all ACL family boards sharing an IRQ line before any of them will be able to generate an interrupt. It is possible that extra interrupts might be generated by the ACL family control program. Make sure your interrupt handler can handle this condition. NOTE On ACL family control program versions before 4.34 and ACL MC control program versions before 4.17: Once the ACL family control program interrupts the host PC, no more interrupts will be generated until the Interrupt Acknowledge Bit is set again in Global Command Word 2. Always set the Interrupt Acknowledge Bit in your interrupt service routine. If any service requests occur after an interrupt has been generated, the service request fields in the GCB will continue to be updated, but another interrupt will not be generated until the interrupt is acknowledged. The following is pseudo code for a typical interrupt handler: GLOBAL VARIABLE OnBoard; PROC IntHandler LOCAL VARIABLE SaveBoard; Enable interrupts; Save registers on stack; SaveBoard := OnBoard; /* save current ACL family board */ FOR each ACL family board sharing interrupt /* enable new ACL family board dual port */ Disable interrupts; Disable OnBoard dual port; /* skip on ACL MC */ Enable new ACL family board dual port; /* skip on ACL MC */ OnBoard := new ACL family board; Enable interrupts; /* reset MC hardware IRQ line */ Read from offset 1FF8h in dual port; /* ACL MC only */ Read from offset 3FF8H in dual port; /* re-enable ACL family control program interrupts */ Set Interrupt Acknowledge Bit in Global Command 2; /* check service requests & service them */ IF Global Service Request != 0 THEN Global Service Request := 0; Use the XCHG instruction as described in section 4.5.5 to access and clear all service request fields; Service all the requests that were indicated; ENDIF END FOR /* re-enable saved board dual port */ Disable interrupts; Disable OnBoard dual port; /* skip on ACL MC */ Enable SaveBoard dual port; /* skip on ACL MC */ OnBoard := SaveBoard; /* interrupt handler completion & exit */ Send non-specific EOI to interrupt controller; Restore registers from stack; Return from interrupt; END PROC Chapter 5 Reset and Download Procedures 5.1 ACL, ACL II(+), ACL IIR(+), and ACL MC Boards 5.1.1 ACL, ACL II(+), ACL IIR(+), and ACL MC ROM The ACL family ROM is provided on all the boards in the ACL family except the ACL 16 and the ACL 16+. The ROM is different for each type of board, but all are functionally compatible. Whenever an ACL family board is reset, the ACL family ROM performs an integrity test of the dual ported memory. The test on the ACL board fills the first 16K bytes of the dual port with FFFFH and confirms it. It then fills the first 16K bytes of the dual port with 0000H and confirms it. The test on the ACL II(+), ACL IIR(+), and ACL MC boards sets the first word of the dual port to FFFFH, tests the local RAM and dual port, fills the dual port with 0000H, puts the board type in offset 8, and finally sets the first word of the dual port to 0000H. The ACL family ROM then enters its Normal Operating Mode. The firmware logically divides the dual ported memory into partitions. The structure of the dual ported memory is shown in Table 5.1. TABLE 5.1 - ACL Family ROM Dual Ported Memory Map Dual Port Offset Field Description (Access) 0000H Status Word (RO) 0002H Command Word (R/W) 0004H Error Word (RO) 0006H Download Buffer Start (R/W) 0008H Board Type (RO) RO = Read Only, R/W = Read and Write Status Word r DP Offset: 0000H Bit 15 0 ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ ³ ³ ³ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ The Status Word is used to inform the host PC program of the current status of the ACL family ROM. Status Word 0000H: Ready Ready means that the ACL family ROM is in its Normal Operating Mode. Status Word 0001H: Stopped Stopped means that the ACL family ROM has stopped executing due to an unrecoverable error. Status Word 0010H: Next Block (ACL MC Only) Next Block means that the ACL MC download ROM has successfully copied the previous block into the local RAM and is prepared for the next block. Status Word FFFFH: Busy Busy is placed in the Status Word by the ACL family download ROM while it is initializing. After it has initialized, the ACL family ROM enters into its Normal Operating Mode and places a 0000H in the Status Word to indicate that it is ready. Command Word (R/W) DP Offset: 0002H Bit 15 0 The Command Word is used by the host PC program to issue commands to the ACL family ROM. To issue a command to the ACL family ROM, place the value of the command in the Command Word and then wait for the Command Word to return to 0000H. After the Command Word returns to 0000H, check the Error Word for any errors. Command Word 0000H: Ready Ready means that the ACL family ROM is ready to accept a command. Command Word 0001H: Load Program The Load Program command causes the ACL family ROM to relocate the contents of a standard .EXE file from the download buffer to the local RAM. Command Word 0002H: Execute Program The Execute Program command starts the execution of the downloaded program. Command Word 0010H: Reset (ACL MC Only) The Reset command reinitializes the state of the ACL MC ROM. This does not restart the ROM. Command Word 0011H: Block Load (ACL MC Only) The Block Load command causes the ACL MC download ROM to relocate the next block of the program placed in the download buffer into the local RAM. Error Word r DP Offset: 0004H Bit 15 0 ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ ³ ³ ³ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ The Error Word is used to inform the host PC program of any errors found by the ACL family ROM. Error Word 0000H: No Errors No Errors means that no errors have been detected by the ACL family ROM. Error Word 0001H: Dual Port Memory Error Dual Port Memory Error means that the ACL family download ROM has detected an error in the dual port memory. Error Word 0002H: Invalid File Format Invalid File Format means that the contents of the download buffer was not a valid .EXE file. Error Word 0003H: Program Too Large Program Too Large means that the .EXE file in the download buffer was too large to fit into the local RAM. Error Word 0004H: Invalid Command Invalid Command means that an invalid command was placed in the Command Word. Download Buffer Start (R/W) DP Offset: 0006H Bit 15 0 ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ ³ ³ ³ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ This field is the start of the download buffer. Use the download buffer to store the contents of a standard .EXE file which is downloaded onto the ACL family board. Board Type (RO) DP Offset: 0008H Bit 15 0 ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ ³ ³ ³ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ Whenever the ACL family board resets, the ACL family ROM places the board type value into this field to show the type of board. This field is overwritten when a program is placed in the download buffer. Board Type Definition 0000H ACL Board 0001H ACL II Board 0002H ACL IIR Board 0004H ACL MC Board 0007H ACL II+ Board 0008H ACL IIR+ Board 5.1.2 ACL, ACL II(+), ACL IIR(+), and ACL MC Defined Values This section contains tables of values that are used in the reset and download procedures described in sections 5.1.3 through 5.2. BLOCK SIZE = 4096 (1000H) PROCEDURE RETURN VALUES: SUCCESS 0 BADFILEERR 4 ACCESSERR 1 TOOBIGERR 5 RESETERR 2 LOADERR 6 FILEERR 3 EXECERR 7 DUAL PORT COMMAND AND STATUS VALUES: ACL FAMILY ROM: OFFSET 0 OFFSET 2 OFFSET 4 Status Word Command Word Error Word (romstat) (romcmd) (romerr) READY 0 READY 0 OK 0 STOPPED 1 LOAD 1 ROMRAMERR 1 ROMBUSY -1 GO 2 BADFILE 2 TOOBIG 3 NEXTBLOCK 10H ROMRESET 10H ROMBADCMD 4 BLOCKLOAD 11H NODL 5 ACL FAMILY CONTROL PROGRAM: OFFSET 0 OFFSET 2 Command Word Status Word (cpcmd) (cpstat) READY 0 READY 0 DIAG 1 STOPPED 1 RESET 2 CPRAMERR 2 CPBADCMD 3 CPBUSY 4 5.1.3 ACL, ACL II(+), ACL IIR(+), and ACL MC Reset Procedure This section contains the procedure for resetting an ACL family board in pseudo code form. This procedure works with all the boards in the ACL family except the ACL 16 and the ACL 16+. This procedure takes into account all the details of timing with the boards, and it should be followed to guarantee that the board resets. When this procedure is completed, the ACL family ROM will execute on the ACL family board. /* this procedure will work with or without hardware reset */ PROC resetacl Enable dual port; /* skip this on ACL MC */ /* check if dual port enabled */ romstat := 0; IF romstat != 0 THEN RETURN (ACCESSERR); /* see if rom is in control by issuing a bad command */ romcmd := 0BADC HEX; REPEAT for .1 sec IF romcmd = 0 THEN BREAK; END REPT IF (romcmd = 0) AND (romerr = ROMBADCMD) THEN romerr := 0; RETURN (SUCCESS); ENDIF cpcmd = RESET; /* reset ctrl prog in case h/w reset not present */ Do hardware reset; /* SKIP THIS ON ACL MC */ Wait .1 sec; /* let reset take effect */ Enable dual port; /* wait for dual port to be tested */ REPEAT for 10 sec IF romstat = 0 THEN BREAK; END REPT IF romstate != 0 THEN RETURN (RESETERR); /* wait for original ROM to fill dp with zeroes */ REPEAT for 10 sec IF offset 3FFE hex = 0 THEN BREAK; END REPT IF offset 3FFE hex != 0 THEN RETURN (RESETERR); /* see if rom responds by sending a bad command */ Wait .1 sec; /* let original rom check first word */ romcmd :=0BADC hex; REPEAT for 10 sec /* wait for original rom to check for zeroes */ IF romcmd = 0 THEN BREAK; END REPT IF (romcmd = 0) AND (romerr = ROMBADCMD) THEN romerr := 0; RETURN (SUCCESS); ELSE RETURN (RESETERR); ENDIF END PROC 5.1.4 ACL, ACL II(+), ACL IIR(+), and ACL MC Download Procedure This section contains a pseudo code procedure for downloading a program to an ACL family board (except the ACL 16 and the ACL 16+) and starting its execution. The procedure assumes that the board has been reset to an ACL family ROM. This download procedure works with the ACL MC if the program to be downloaded is less than 8K bytes. To download a program that is larger than 8K bytes to the ACL MC, use the procedure described in section 5.2. /* this procedure assumes that ACL family product has been reset to rom */ PROC loadacl Copy .exe file into dual port starting at offset 6; /* relocate .exe file into local ram */ romcmd := LOAD; REPEAT for 10 sec IF romcmd = 0 THEN BREAK; END REPT IF romcmd != 0 THEN RETURN(LOADERR); IF romerr != 0 THEN CASE romerr OF BAD FILE: RETURN(BADFILEERR); TOOBIG: RETURN(TOOBIGERR); ELSE RETURN(LOADERR); END CASE ENDIF /* execute control prog */ romcmd := GO; Wait .1 sec; /* let GO take effect */ REPEAT for 10 sec IF cpstat = 0 THEN BREAK; END REPT IF cpstat != 0 THEN RETURN(EXECERR); /* see if control prog responds by sending bad command */ cpcmd := 0BADC hex; REPEAT for .1 sec IF cpcmd = 0 THEN BREAK; END REPT IF (cpcmd = 0) AND (cpstat = CPBADCMD) THEN cpstat := 0; RETURN(SUCCESS); ELSE RETURN(EXECERR); ENDIF END PROC 5.2 ACL MC Block Load Procedure Because the ACL MC has only an 8K dual port, a protocol for downloading large programs in 4K byte blocks was implemented in the ACL MC ROM. This section contains a pseudo code procedure for downloading a program to the ACL MC board using this block load protocol. The procedure assumes that the board has been reset to the ACL MC ROM. This procedure only works with the ACL MC. /* this procedure assumes that ACL MC has been reset to rom */ PROC blkload Copy first BLOCK SIZE of .exe file into dual port starting at offset 6; /* relocate block into local ram */ romcmd := BLOCKLOAD; REPEAT for 10 sec IF romcmd = 0 THEN BREAK; END REPT IF romcmd != 0 THEN RETURN(LOADERR); IF romerr != 0 THEN CASE romerr OF BADFILE: RETURN(BADFILEERR); TOOBIG: RETURN(TOOBIGERR); ELSE RETURN(LOADERR); END CASE ENDIF WHILE !EOF IF romstat != NEXTBLOCK THEN RETURN(LOADERR); Copy next BLOCK SIZE of .exe file to offset 6; /* relocate block into local ram */ romcmd := BLOCKLOAD; REPEAT for 10 sec IF romcmd = 0 THEN BREAK; END REPT IF romcmd != 0 THEN RETURN(LOADERR); ENDWHILE IF romstat != READY THEN RETURN (LOADERR); /* execute control prog */ romcmd := GO: Wait .1 sec; /* let GO take effect */ REPEAT for 10 sec IF cpstat =0 THEN BREAK; END REPT IF cpstat != 0 THEN RETURN (EXEXERR); /* see if control prog responds by sending bad command */ cpcmd := 0BADC hex; REPEAT for .1 sec IF cpcmd = 0 THEN BREAK; END REPT IF (cpcmd = 0) AND (cpstat = CPBADCMD) THEN cpstat := 0; RETURN (SUCCESS); ELSE RETURN (EXECERR); ENDIF END PROC 5.3 ACL 16 and ACL 16+ Reset and Download Procedure Because neither the ACL 16 nor the ACL 16+ contains an onboard ROM, a different method of downloading programs is required. This section contains a pseudo code procedure for downloading a program to one of these boards and starting its execution. At power-on, the 80C186 is statically held in reset. This disables the tri-port memory and forces the tri-port address buffers to point toward the procesor's memory array and the daughter card memory. Other default conditions at power-on include: Wait State generator cleared to 0 wait states. See the Board Control Register section in chapter 3 for further information. Block Select bits at 0,0. See the Board Control Register section in chapter 3 for further information. In order to download to the board, use the following procedure: 1. Program the tri-port start address. 2. Program the Block Select bits to map to the appropriate section of processor memory. 3. Enable the tri-port memory. NOTE Although the tri-port memory is addressed, the processor's local RAM will actually be accessed. As long as the processor is held in reset, its memory will overlay the tri-port memory. The Block Select bits will determine the start address of the 16K block being accessed. They are as follows: BKSEL 1 BKSEL0 Local RAM Range (hexadecimal) Low High 0 0 0000-3FFF F0000-F3FFF 0 1 4000-7FFF F4000-F7FFF 1 0 8000-BFFF F8000-FBFFF 1 1 C000-FFFF FC000-FFFFF NOTE The mapping for downloading is different from the mapping for tri-port operation. Once the setup for download is ready, the tri-port is enabled so transfers may begin. When download is completed, the tri-port should be disabled to avoid any possible conflicts with the processor coming out of reset. To remove the reset condition, write a "1" to the appropriate bit(s) of the Board Control Register. To find out when the 80C186 is finished with its initialization program(s), the host program should monitor the Ready bits of the Board Status Register. See chapter 3 for information on these registers. The default hardware setup for download allows simultaneous download of the same program to both the main board and the daughter board. Both memory ranges are identically mapped and overlay the tri-port; operation is restricted to write-only. NOTE The standard ACL 16.CP file provided by Star Gate is in Intel hex format. If you intend to download this file, you will have to convert it to a memory image before copying it into the local RAM. For the following code, assume that: bdid is the ACL 16 or ACL 16+ Board ID Register contents. bdstat is the ACL 16 or ACL 16+ Board Status Register contents. bdctl is the ACL 16 or ACL 16+ Board Control Register contents. /* this procedure downloads to the ACL 16 or ACL 16+ board */ PROC loadacl16 IF bdid != A1H (A2H for ACL 16+) THEN /* board not found */ RETURN (NOBOARD); ENDIF IF bdstat != current hardware configuration /* configuration or hardware error */ RETURN(CONFIGERR); ENDIF memadr := desired dual port address; /* clear the entire local RAM area (4 blocks) */ FOR block_select := 0 TO 3 DO /* enable dual port, put board into download state, select number of wait states, select memory block */ bdctl := 80H + # wait states + block_select; FILL entire block (16kb) with 0; ENDFOR COPY data into the board's local RAM (select block as needed); /* enable the board for execution */ bdctl := E0H + # wait states + block_select; /* wait for board to report that it's ready */ REPEAT for 10 seconds IF both RDY bits of bdstat = 0 THEN BREAK; END REPT ELSE /* board not ready error */ RETURN(NOTRDYERR) ENDIF ENDPROC Chapter 6 ACL Family Processor Hardware Interface 6.1 Introduction This chapter contains information on the hardware that can be accessed by the ACL family microprocessor. You will need this information if you are writing custom ROM firmware or control program software for an ACL family product. For further information on the ACL family microprocessor, refer to the Intel iAPX 86/88, 186/188 Programmer's Reference. 6.2 ACL Board 6.2.1 ACL Board Memory Space The ACL board was the first member of the ACL family. It has a standard PC bus interface because it was designed to be used in either a PC or an AT. It has an 8 MHz 8088 microprocessor. A detailed block diagram of the ACL board is given in Figure 6.1. The memory map for the ACL CPU is shown in Table 6.1. TABLE 6.1 - ACL Memory Map Segment Address Local RAM 00000H to 01FFFH (8K) or 07FFFH (32K) Dual Port RAM 10000H to 13FFFH (16K) or 1FFFFH (64K) Local ROM FC000H to FFFFFH(16K) Local RAM is located at the bottom of the ACL family microprocessor memory space and can be accessed only by this microprocessor. This RAM can be used to store data or programs for execution. The standard use of this RAM by Star Gate is to store and execute the downloaded control program. Dual port RAM is located in the middle of the ACL family microprocessor memory space. This memory can be accessed by both the ACL family microprocessor and the host microprocessor. Local ROM is located at the top of the ACL family microprocessor memory space and can be accessed only by the ACL family microprocessor. The local ROM can be replaced by one you create. In developing ROM firmware for the ACL board, note that the Intel 8088 microprocessor used by the ACL board resets to FFFF0. Your ROM should have startup code at this location. For the ACL board, the addresses of these memory segments are fixed by the hardware. 6.2.2 ACL Board I/O Registers The I/O registers can be accessed only by an ACL board microprocessor, not by the host PC. These registers allow a board to control and to receive status from various aspects of the hardware. On the ACL board, the addresses of these registers are fixed by the hardware. The I/O register map is shown in Table 6.2. TABLE 6.2 - ACL I/O Register Map I/O Register Address DUART 1 1C0H DUART 2 140H DUART 3 100H DUART 4 0C0H Control Register 080H Handshake Register 040H The ACL's UART devices are 2681 dual asynchronous receiver transmitters. These UARTs can be accessed (through I/O registers) only by the ACL board microprocessor, not by the host PC. For more information, refer to the 2681 data sheet. In addition to what is given by the 2681 DUART data sheet, you may need to know the bit formats of the Input and Output Port Registers. ACL Input Port Register Bit 7 6 5 4 3 2 1 0 ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ ³ ³ ³ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ACL Output Port Register Bit 7 6 5 4 3 2 1 0 ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ ³ ³ ³ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ACL Control Register (Write Only) I/O Address 080H Bit 7 6 5 4 3 2 1 0 ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ ³ ³ ³ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ The Control Register is used to control various functions of the hardware. Bit 0 Interrupt Request to Host PC ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ ³ ³ ³ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ Setting this bit to "1" creates a "high" state in the interrupt request logic. Clearing this bit to "0" creates a "low" state in the interrupt request logic. A transition from "low" to "high" in the interrupt request logic generates an interrupt to the host PC. Bit 1 Interrupt Enable Setting this bit to "1" tri-states the interrupt request line and thereby disables interrupt generation. Clearing this bit to "0" enables the interrupt request logic to follow the state of bit 0. Bit 2 Local RAM Size Select Setting this bit to "1" enables the local RAM as 32K. Clearing this bit to "0" enables the local RAM as 8K. Do not attempt to change this bit if your program is executing from the local RAM. Bits 4-3 Local ROM Size Select Setting these bits to the values listed below enables the corresponding local ROM Size. Bit 4 3 Local ROM Size 0 0 16K 0 1 32K 1 0 N/A 1 1 64K Bit 5 Dual Port RAM Size Select Clearing this bit to "0" enables 16K of dual port RAM. Setting this bit to "1" enables 64K of dual port RAM. Bits 7-6 Reserved (0) The Handshake Register is used to read the state of the DSR, DCD, and RI handshake signals on a particular port. To read the state of the signals, first write the number of the ports to this register. Then read this register to determine their state according to the definition below. This register also returns the state of the interrupt request line. Handshake Register (Write) I/O Address 040H Bit 7 6 5 4 3 2 1 0 ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ ³ ³ ³ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ Bits 2-0 Handshake Channel Select Bit 2 1 0 Channel 0 0 0 0 0 0 1 1 0 1 0 2 0 1 1 3 1 0 0 4 1 0 1 5 1 1 0 6 1 1 1 7 Handshake Register (Read) I/O Address 040H Bit 7 6 5 4 3 2 1 0 ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ ³ ³ ³ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ Bit 0 DSR for Selected Channel A "0" means that the DSR is asserted. A "1" means that the DSR is negated. Bit 1 DCD for Selected Channel A "0" means that the DCD is asserted. A "1" means that the DCD is negated. Bit 2 RI for Selected Channel A "0" means that the RI is asserted. A "1" means that the RI is negated. Bit 3 Interrupt Request Feedback Bit A "0" means that no interrupt request is being sent to the host PC. A "1" means that an interrupt request is being sent to the host PC. Bits 4-7 Reserved (0) 6.2.3 ACL Board Interrupts The UARTs on the ACL board are capable of interrupting the ACL board microprocessor. The first pair of UARTs interrupts the microprocessor with INT0, the second with INT1, the third with INT2, and the fourth with INT3. 6.3 ACL II(+) Board 6.3.1 ACL II(+) Memory Space The ACL II and the ACL II+ are the next generation of the ACL family. They have a faster (12 MHz for the ACL II and 16MHz for the ACL II+) 80188 processor and an ISA bus interface. These boards also allow the ports to be configured as either DTE or DCE through software. A detailed block diagram of the ACL II(+) board is given in Figure 6.2. The memory map for the CPU is shown in Table 6.3. TABLE 6.3 - ACL II(+) Memory Map Segment Address Local RAM 00000H to 07FFFH(32K) Dual Port RAM 40000H to 43FFFH (16K) or 4FFFFH (64K) Local ROM FC000H to FFFFFH (16K) Local RAM is located at the bottom of the ACL family microprocessor memory space and can only be accessed by this microprocessor. This RAM can be used to store programs for execution or to store data. The standard use of this RAM by Star Gate is to store and execute the downloaded control program. Dual port RAM is located in the middle of the ACL family microprocessor memory space. This memory can be accessed by both the ACL family microprocessor and the host microprocessor. Local ROM is located at the top of the ACL family microprocessor memory space and can be accessed only by the ACL family microprocessor. The local ROM can be replaced by one you create. In developing ROM firmware for the ACL II(+) board, note that the Intel 80188 microprocessor used by the ACL II(+) boards resets to FFFF0. Your ROM should have startup code at this location. The CPU's Chip Select Unit controls these memory segments. For more information on the CPU and its Chip Select Unit, refer to the Intel iAPX 86/88, 186/188 Programmer's Reference. The local ROM is controlled by Upper Memory Chip Selects, the local RAM is controlled by Lower Memory Chip Selects, and the dual port RAM is controlled by the Mid-Range Chip Selects. The standard ACL family ROM initializes the Chip Select Unit to appropriate values. If you are writing ROM firmware, you will need to initialize the Chip Select Unit. Control programs do not need to modify these values. 6.3.2 ACL II(+) I/O Registers The I/O registers can be accessed only by an ACL II(+) board microprocessor, not by the host PC. These registers allow a board to control and to receive status from various aspects of the hardware. The I/O register map is shown in Table 6.4. TABLE 6.4 - ACL II(+) I/O Register Map I/O Register Address DUART 1 400H DUART 2 480H DUART 3 500H DUART 4 580H Control Register 700H DTE Select Register 600H DCE Select Register 680H The I/O addresses of these registers are controlled by the CPU's Chip Select Unit. The standard ACL family ROM initializes the Chip Select Unit to appropriate values. If you are writing ROM firmware, you will need to initialize the Chip Select Unit. Control programs do not need to modify these values. For more information, refer to the Intel iAPX 86/88, 186/188 Programmer's Reference. The ACL II(+) UARTs can be accessed (through I/O registers) only by the ACL II(+) board microprocessor, not by the host PC. The ACL II+ board uses 2692 UARTs. Please refer to the Signetics 2692 data sheets for UART register descriptions. The UART devices on the ACL II board are the same 2681 DUARTs that are used on the ACL board. For more information regarding these UARTs, refer to the 2681 data sheet. In addition to the information given in the 2681 DUART data sheet, it may be necessary to know the bit formats of the Input and Output Port Registers. ACL II(+) Input Port Register (2681) Bit 7 6 5 4 3 2 1 0 ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ ³ ³ ³ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ACL II(+) Output Port Register (2681) Bit 7 6 5 4 3 2 1 0 ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ ³ ³ ³ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ACL II(+) Control Register (Write Only) I/O Address 0700H Bit 7 6 5 4 3 2 1 0 ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ ³ ³ ³ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ The Control Register is used to control various functions of the hardware. Bit 0 Interrupt Request to Host PC Setting this bit to "1" creates a "high" state in the interrupt request Logic. Clearing this bit to "0" creates a "low" state in the interrupt request logic. A transition from "low" to "high" in the interrupt request logic generates an interrupt to the host PC. Bit 1 Interrupt Enable Setting this bit to "1" tri-states the interrupt request line and thereby disables interrupt generation. Clearing this bit to "0" enables the interrupt request logic to follow the state of bit 0. Bits 4-2 Reserved (0) Bit 5 Dual Port RAM Size Clearing this bit to "0" enables 64K of dual port RAM. Setting this bit to "1" enables 16K of dual port RAM. Because all current boards contain 64K, this bit should be cleared to 0. This bit, though not currently used, will be used when a 16K dual port version is released. Bits 7-6 Reserved (0) DTE Select Register I/O Address 600H Bit 7 6 5 4 3 2 1 0 ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ ³ ³ ³ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ Setting the corresponding bit in this register selects DTE configuration for the port. DCE Select Register I/O Address 680H Bit 7 6 5 4 3 2 1 0 ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ ³ ³ ³ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ Setting the corresponding bit in this register selects DCE configuration for the port. In DCE mode, the: DTR bit controls the DSR output pin RTS bit controls the CTS output pin DTR input pin is reported in the DSR Bit RTS input pin is reported in the CTS Bit DCD input pin is reported in the DCD Bit. 6.3.3 ACL II(+) Interrupts The UARTs on the ACL II board are capable of interrupting the ACL II board microprocessor. The first pair of UARTs interrupts the processor with INT0, the second with INT1, the third with INT2, and the fourth with INT3. In addition, the ACL II board (as well as the ACL II+ board) has three timers integrated into its microprocessor which can be configured to interrupt the CPU. Please refer to the Intel iAPX 86/88, 186/188 Programmer's Reference for more information. 6.4 ACL IIR(+) Board 6.4.1 ACL IIR(+) Memory Space The ACL IIR and the ACL IIR+ boards are identical to the ACL II(+), except that RJ-12 connectors are mounted on the boards instead of an external panel being used. In addition, DTE/DCE is not software selectable with the ACL IIR(+) board. A detailed block diagram of the ACL IIR(+) board is given in Figure 6.3. The memory map for the CPU is given in Table 6.5. TABLE 6.5 - ACL IIR(+) Memory Map Segment Address Local RAM 00000H to 07FFFH(32K) Dual Port RAM 40000H to 43FFFH (16K) or 4FFFFH (64K) Local ROM FC000H to FFFFFH(16K) Local RAM is located at the bottom of the ACL family microprocessor memory space and can only be accessed by this microprocessor. This RAM can be used to store programs for execution or to store data. The standard use of this RAM by Star Gate is to store and execute the downloaded control program. Dual port RAM is located in the middle of the ACL family microprocessor memory space. This memory can be accessed by both the ACL family microprocessor and the host microprocessor. Local ROM is located at the top of the ACL family microprocessor memory space and can be accessed only by the ACL family microprocessor. The local ROM can be replaced by one you create. In developing ROM firmware for the ACL IIR(+) boards, note that the Intel 80188 microprocessor used by the ACL IIR(+) boards resets to FFFF0. Your ROM should have startup code at this location. The CPU's Chip Select Unit controls these memory segments. For more information on the CPU and its Chip Select Unit, refer to the Intel iAPX 86/88, 186/188 Programmer's Reference. The local ROM is controlled by Upper Memory Chip Selects, the local RAM is controlled by Lower Memory Chip Selects, and the dual port RAM is controlled by the Mid-Range Chip Selects. The standard ACL family ROM initializes the Chip Select Unit to appropriate values. If you are writing ROM firmware, you will need to initialize the Chip Select Unit. Control programs do not need to modify these values. 6.4.2 ACL IIR(+) I/O Registers The I/O registers can be accessed only by an ACL IIR(+) board microprocessor, not by the host PC. These registers allow a board to control and to receive status from various aspects of the hardware. The I/O register map is shown in Table 6.6. TABLE 6.6 - ACL IIR(+) I/O Register Map I/O Register Address DUART 1 400H DUART 2 480H DUART 3 500H DUART 4 580H Control Register 700H The I/O addresses of these registers are controlled by the CPU's Chip Select Unit. The standard ACL family ROM initializes the Chip Select Unit to appropriate values. If you are writing ROM firmware, you will need to initialize the Chip Select Unit. Control programs do not need to modify these values. For more information, refer to the Intel iAPX 86/88, 186/188 Programmer's Reference. The ACL IIR(+) UARTs can be accessed (through I/O registers) only by the ACL IIR(+) board microprocessor, not by the host PC. The ACL IIR+ board uses 2692 UARTs. Please refer to the Signetics 2692 data sheets for UART register descriptions. The UART devices on the ACL IIR board are the same 2681 DUARTs that are used on the ACL board. For more information regarding the use of this device, refer to the 2681 data sheet. In addition to the information given in the 2681 DUART data sheet, it may be necessary to know the bit formats of the Input and Output Port Registers. ACL IIR(+) Input Port Register (2681) Bit 7 6 5 4 3 2 1 0 ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ ³ ³ ³ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ACL IIR(+) Output Port Register (2681) Bit 7 6 5 4 3 2 1 0 ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ ³ ³ ³ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ACL IIR(+) Control Register (Write Only) I/O Address 700H Bit 7 6 5 4 3 2 1 0 ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ ³ ³ ³ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ The Control Register is used to control various functions of the hardware. Bit 0 Interrupt Request to Host PC Setting this bit to "1" creates a "high" state in the interrupt request logic. Clearing this bit to "0" creates a "low" state in the interrupt request logic. A transition from "low" to "high" in the interrupt request logic generates an interrupt to the host PC. Bit 1 Interrupt Enable Setting this bit to "1" tri-states the interrupt request line and thereby disables interrupt generation. Clearing this bit to "0" enables the interrupt request logic to follow the state of bit 0. Bits 4-2 Reserved (0) Bit 5 Dual Port RAM Size Clearing this bit to "0" enables 64K of dual port RAM. Setting this bit to "1" enables 16K of dual port RAM. Bits 7-6 Reserved (0) 6.4.3 ACL IIR(+) Interrupts The UARTs on the ACL IIR are capable of interrupting the ACL IIR processor. The first pair of UARTs interrupts the processor with INT0, the second with INT1, the third with INT2, and the fourth with INT3. In addition, the ACL IIR board (as well as the ACL IIR+ board) has three timers integrated into its microprocessor which can be configured to interrupt the CPU. Please refer to the Intel iAPX 86/88, 186/188 Programmer's Reference for more information. 6.5 ACL MC Board 6.5.1 ACL MC Memory Space The ACL MC was designed for the Micro Channel Bus and uses a 10 MHz 80186 processor. A detailed block diagram of the ACL MC board is given in Figure 6.4. The memory map for the CPU is given in Table 6.7. TABLE 6.7 - ACL MC Memory Map Segment Address Local RAM 00000H to 1FFFFH (128K) Dual Port RAM 84000H to 85FFFH (8K) Local ROM FC000H to FFFFFH (16K) Local RAM is located at the bottom of the ACL family microprocessor memory space, and it can be accessed only by this microprocessor. This RAM can be used to store data or programs for execution. The standard use of this RAM by Star Gate is to store and execute the downloaded control program. Dual port RAM is located in the middle of the ACL family microprocessor memory space. This memory can be accessed by both the ACL family microprocessor and the host microprocessor. Local ROM is located at the top of the ACL family microprocessor memory space, and it can be accessed only by The ACL family microprocessor. The local ROM can be replaced by one you create. In developing ROM firmware for the ACL MC board, note that the Intel 80186 microprocessor used by the ACL MC board resets to FFFF0. Your ROM should have startup code at this location. The CPU's Chip Select Unit controls these memory segments. For more information on the CPU and its Chip Select Unit, refer to the Intel iAPX 86/88, 186/188 Programmer's Reference. The local ROM is controlled by Upper Memory Chip Selects, the local RAM is controlled by Lower Memory Chip Selects, and the dual port RAM is controlled by the Mid-Range Chip Selects. The standard ACL family ROM initializes the Chip Select Unit to appropriate values. If you are writing ROM firmware, you will need to initialize the Chip Select Unit. Control programs do not need to modify these values. 6.5.2 ACL MC I/O Registers The I/O registers can be accessed only by an ACL MC board microprocessor, not by the host PC. These registers allow a board to control and to receive status from various aspects of the hardware. The I/O register map is shown in Table 6.8. TABLE 6.8 - ACL MC I/O Register Map I/O Register Address DUART 1 400H DUART 2 420H DUART 3 440H DUART 4 460H Control Register 600H DTR Register 480H The I/O addresses of these registers are controlled by the CPU's Chip Select Unit. The standard ACL family ROM initializes the Chip Select Unit to appropriate values. If you are writing ROM firmware, you will need to initialize the Chip Select Unit. Control programs do not need to modify these values. For more information, refer to the Intel iAPX 86/88, 186/188 Programmer's Reference. The ACL MC UARTs can be accessed (through I/O registers) only by the ACL MC board microprocessor, not by the host PC. The UART device used on the ACL MC is the 2698 octal asynchronous receiver transmitter. This UART is functionally compatible with the 2681 UART with a few subtle differences. For more information regarding this device, refer to the 2698 data sheet. In addition to the information given in the 2698 data sheet, it may be necessary to know the bit formats of the Input Port Register. ACL MC Input Port Register Bit 7 6 5 4 3 2 1 0 ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ ³ ³ ³ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ACL MC Control Register (Write Only) I/O Address 600H Bit 7 6 5 4 3 2 1 0 ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ ³ ³ ³ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ The Control Register is used to generate an interrupt to the host PC. Bit 0 Interrupt Request to host PC Clearing this bit to "0" generates an interrupt request to the host PC. Setting this bit to "1" clears the interrupt request. Bits 7-1 Not Used DTR Register I/O Address 480H Bit 7 6 5 4 3 2 1 0 Setting the corresponding bit to "1" in this register negates the DTR line on the port. Clearing the corresponding bit to "0" in this register asserts the DTR line on the port. 6.5.3 ACL MC Interrupts The UARTs on the ACL MC board are capable of interrupting the ACL MC microprocessor. The first pair of UARTs interrupts the processor with INT0, the second with INT1, the third with INT2, and the fourth with INT3. In addition, the ACL MC board has three timers integrated into its microprocessor which can be configured to interrupt the CPU. Please refer to the Intel iAPX 86/88, 186/188 Programmer's Reference for more information. 6.6 ACL 16(+) Board 6.6.1 ACL 16(+) Memory Space The ACL 16 and the ACL 16+ each have a main board and a daughter board. Each main and daughter board has a 12 MHz (16 MHz for the ACL 16+) 80186 processor. Detailed block diagrams of these boards are given in Figures 6.5A and 6.5B. 6.6.2 ACL 16(+) Microprocessor Memory The main processor memory is 64K bytes of local RAM organized as 32K x 16. This memory can be accessed only by the ACL 16(+) microprocessor. Since there is no ROM, you must download the control program before enabling the processor(s). Once the processor(s) are operational, the main memory is accessed in both the high memory range (F0000H - FFFFFH) controlled by the Upper Chip Select and the low memory range (00000H - 0FFFFH) controlled by the Lower Chip Select. Both control registers must be programmed for the desired memory partition. Also, each should be programmed for 0 wait state/internal ready operation. 6.6.3 ACL 16(+) Tri-Port Memory The ACL 16(+) physically has 64K bytes of tri-ported memory. Each board CPU can access 32K bytes of tri-ported memory. The mapping is hard-wired so that even if the daughter board is not present in the system, the main board can access only 32K. However, since the host processor can access only 16K, operation is restricted to 16K bytes per board. This 16K block may reside on any 16K boundary in the real address space. The real address space is below F000:FFFFH. The processor mapping for this memory is identical for both boards through the programming of the appropriate processor's Memory Chip Select (MCS) register for block size (32K), start address (4000:0000H) controlled by MCS0, and wait state generation (0/external ready). Both word and byte operations are acceptable. The external wait state generator is not programmable; it is currently hard-wired to provide on wait state after access is granted. 6.6.4 ACL 16(+) I/O Registers The I/O on both the ACL 16(+) main board and the daughter board are mapped identically. Therefore, only one board control program needs to be written. The I/O on each board consists of four 2692 DUARTs and nine registers. The I/O register map is shown in Table 6.9. TABLE 6.9 - ACL 16(+) I/O Register Map I/O Register Address DUART1 400H DUART2 480H DUART3 500H DUART4 540H Control Register 600H DTR Register 602H RTS Register 604H Receive Status Register 600H Transmit Status Register 602H Handshake Status 12 Register 604H Handshake Status 34 Register 606H Handshake Status 56 Register 608H Handshake Status 78 Register 60AH The DUARTs can be accessed only by the board microprocessor, not by the host PC. Each DUART is accessed through its own Peripheral Chip Select (PCS) line. The registers are controlled with a single PCS select, and they are further refined by three to eight decoders. The absolute mapping of the I/O is a software function. Therefore, only the relevant offset information and register bit definitions will be described in detail. In general, all I/O is a byte wide (D0 - D7) and, therefore, requires that all operations be performed on even (word) boundaries. Also, the control register must be programmed for one wait state and internal ready. The major chip selects and relevant offsets are listed next. Communication Ports 0 and 1 - PCS0 Communication Ports 2 and 3 - PCS1 Communication Ports 4 and 5 - PCS2 Communication Ports 6 and 7 - PCS3 Please refer to the Signetics 2692 data sheets for UART register descriptions. The I/O registers are controlled by PCS4, A1, A2, A3 and the appropriate read or write strobe. TABLE 6.10 - ACL 16(+) Read Only Registers I/O Register Address Function RXSTAT 600H Provides bit wise status of the UART's received data register TXSTAT 602H Provides bit wise status of the UART's transmitter register ready CH01STR 604H Provides handshake status for Ports 0 and 1 CH23STR 606H Provides handshake status for Ports 2 and 3 CH45STR 608H Provides handshake status for Ports 4 and 5 CH67STR 60AH Provides handshake status for Ports 6 and 7 RXSTAT Register I/O Address 600H Bit 7 6 5 4 3 2 1 0 A "0" bit in this register signifies that a character has been received on the corresponding channel. TXSTAT Register I/O Address 602H Bit 7 6 5 4 3 2 1 0 ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ ³ ³ ³ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ A "0" bit in this register signifies that the transmitter is ready on the corresponding channel. CHxySTR Register Bit 7 6 5 4 3 2 1 0 ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ ³ ³ ³ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ xy refers to: Channels 0 and 1, Channels 2 and 3, Channels 4 and 5, or Channels 6 and 7. When a bit is "0", the handshake line is asserted. When a bit is "1", the handshake line is negated. The phrase "Active low, then transition high" means that the bit, which is normally "1" when inactive, goes to "0" when active. It then automatically transitions back to "1" again. TABLE 6.11 - ACL 16(+) Write Only Registers Register I/O Function Address IOWREN 600H 3 bits of miscellaneous I/O: Ready, Interrupt, and Interrupt Enable DTRWR 602H Provides bit-wise DTR control output RTSWR 604H Provides bit-wise RTS control output IOWREN Register I/O Address 600H Bit 7 6 5 4 3 2 1 0 ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ ³ ³ ³ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ Bit 0 Ready Setting this bit to "1" clears the appropriate ready bit in the Board Status Register to indicate that the processor is ready. Clearing this bit to "0" sets the appropriate ready bit in the board status register to indicate that the processor is not ready. Bit 1 Interrupt Enable Clearing this bit to "0" tri-states the interrupt request line and thereby disables interrupt generation. Setting this bit to "1" enables the interrupt request logic to follow the state of bit 2. Bit 2 Interrupt Level Clearing this bit to "0" creates a "high" state in the interrupt request logic. Setting this bit to "1" creates a "low" state in the interrupt request logic. A transition from "low" to "high" in the interrupt request logic generates an interrupt to the host PC. NOTE The interrupt enable is gated by IRQEN in the memory. both must be true to generate an interrupt to the system. DTRWR Register I/O Address 602H Bit 7 6 5 4 3 2 1 0 ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ ³ ³ ³ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ Clearing the corresponding bit to "0" in the DTR register asserts the DTR line on the port. Setting the bit to "1" negates the DTR line. RTSWR Register I/O Address 604H Bit 7 6 5 4 3 2 1 0 ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ ³ ³ ³ ³ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ Clearing the corresponding bit to "0" in the RTS register asserts the RTS line on the port. Setting the bit to "1" negates the RTS line. 6.6.5 ACL 16(+) Interrupts The UARTs on the ACL 16 board are capable of interrupting the ACL 16 microprocessor. The ACL 16 has one interrupt (INT0) which is the OR'ed INTRN output of the four 2692 DUARTs. In addition, the ACL 16 board (as well as the ACL 16+ board) has three timers integrated into its microprocessor which can be configured to interrupt the CPU. Please refer to the Intel iAPX 86/88, 186/188 Programmer's Reference for more information. 6.7 Control Program Development (ACL, ACL II(+), ACL IIR(+), and ACL MC Only) Control program software is stored in the local RAM by an ACL family ROM. The program is loaded at 00400H. This leaves the interrupt vector table empty, which allows the control program to use interrupts if desired. If there are any relocation table items, they are relocated to the load address of 00400H. Before execution begins, the ROM firmware sets the stack segment (SS) and stack pointer (SP) to the values defined in the .EXE file header. The downloaded control program then receives control using a far jump instruction. The effective address of the JMP instruction is 0040:IP, where IP is the value defined for the instruction pointer (IP) in the .EXE file header. While the ability to download programs allows you to use standard DOS program development tools to develop a control program for the ACL family adapters, consider these subtle differences: There is no DOS, BIOS, or any other operating system execution on the adapter. Do not make any DOS or BIOS calls using INT instructions because these vectors are not initialized. The download utility does not build a Program Segment Prefix as DOS does. The downloaded program should not attempt to access anything which would normally be contained in this area. The standard high level language (C, BASIC, Pascal, etc.) run-time start-up cannot be linked into your program. Do not attempt to return to DOS or to the ROM firmware if the downloaded program completes execution or detects errors. To exit your downloaded program, disable interrupts and perform a far jump to the processor reset vector at FFFF0. The ACL family ROM contains the board-type ID word at memory address FFFFCH. If you are writing software for more than one kind of ACL product, note that the downloaded program can use this word to find out onto which type of board it has been downloaded. 6.8 Control Program Development (ACL 16 and ACL 16+ Only) When developing a control program for the ACL 16(+), keep these details in mind: Each of these boards uses Intel 80186 microprocessors. These processors reset to FFFF0. Your downloaded control program should have startup code at this location. The 80186 microprocessors require that the Chip Select Unit be initialized. Memory and I/O Register Addresses on both the ACL 16(+) main board and the daughter board are identical. Therefore, you only need to write one control program. Downloaded software is stored in the local RAM of the ACL 16(+). It is best to start your program at 00400H. This leaves the interrupt vector table empty. The user's code is completely responsible for all initialization of the 80186 microprocessor and all peripheral devices. This includes (but is not restricted to) the following: Initializing the stack by setting the stack segment (SS) and the stack pointer (SP). Initializing the Chip Select Unit. Initializing the Peripheral Chip Select lines. Initializing any interrupt vectors which may be used. Initializing on-chip peripheral devices (i.e., timers, dma, etc.). While the ability to download programs allows you to use standard DOS program development tools to develop control programs for the ACL 16(+), consider these subtle differences: There is no DOS, BIOS, or any other operating system execution on the adapter. Do not make any DOS or BIOS calls using INT instructions because these vectors are not initialized. Do not attempt to return to DOS if the control program completes execution or detects errors. The standard high level language (C, BASIC, Pascal, etc.) run-time start-up cannot be linked into your program. The download programs supplied by Star Gate Technologies require the control program be in Intel hex format or Tektronix extended Tekhex format. Appendix A Glossary of Terms, Acronyms and Abbreviations This section explains the terms, acronyms, and abbreviations used in this manual. The EIA-232 control signals are discussed from the standard DTE point of view. A ASCII - American standard code for information interchange. B bit time - The time required to transmit one bit. C CCB (Channel Control Blocks) - a section of the dual port memory which contains the data that applies to a particular channel. character time - The time required to transmit one character. cleared - A bit which is "cleared" has a value of 0. CPU - Central Processing Unit. CTS (Clear To Send) - an EIA-232 control signal input to DTE pin 5 from the modem in response to the DTE's Request to Send signal (RTS). It tells the DTE it may start transmitting. D DCD (Data Carrier Detect) - an EIA-232 control signal input to DTE pin 8 which indicates that the DTE device is receiving a signal from the modem. Its uses vary, but on a DTE it is frequently used to disable data reception. It is also called Received Line Signal Detector (RLSD) or Carrier Detect (CD). DCE (Data Communications Equipment) - In common usage, this term is synonymous with modem. It refers to equipment that provides the functions needed to establish, maintain, and terminate a connection and perform the signal conversion and coding required for communication between DTE and the telephone line or data circuit. DSR (Data Set Ready) - an EIA-232 modem interface control signal input on DTE pin 6. The modem sends this signal to the DTE to indicate that the modem is connected to the telephone circuit. It is usually a prerequisite for the DTE issuing a RTS. DTE (Data Terminal Equipment) - refers to equipment (such as terminals and computer ports) serving as the data source, data sink, or both. DTR (Data Terminal Ready) - an EIA-232 modem interface control signal output from pin 20. The DTE sends this signal to the modem to indicate that the DTE is ready for data transmission and to request that the modem be connected to the telephone circuit. Dual port RAM - The interface between the host processor and the ACL family processor. This memory can be read from and written to both the host processor and the ACL family processor. DUART (Dual Universal Asynchronous Receiver Transmitter) - a device which converts parallel data from the ACL family processor to serial EIA- 232 data. It also receives serial EIA-232 data and converts it to parallel data for the ACL family processor. E EBCDIC - Extended Binary Coded Decimal Interchange Code. EIA-232-C - Electronic Industries Association's (EIA) recommended standard 232 Revision C (1969). It specifies the interface between data terminal equipment and data communications equipment employing serial binary data interchange. G GCB (Global Control Block) - a section of the dual port memory which contains data that applies to the ACL family adapter in general. H H - Hexadecimal I I/O - Input/Output. IRQ - Interrupt request. ISA (Industry Standard Architecture) - refers to the type of bus used by an IBM PC/XT, PC/AT, and 286- or 386- AT-compatibles. K K - kilo (thousand). A kilobyte is 1024 bytes. L Local RAM - The RAM (Random Access Memory) that is accessible only by the ACL family processor. Local ROM - The ROM (Read Only Memory) that is accessible only by the ACL family processor. It is typically located on an EPROM (Erasable Programmable Read Only Memory) device. LSB - Least Significant Bit M Map Register - The register that selects the dual port RAM address mapping. MSB - Most significant bit. P PC - Personal computer. R RAM - Random Access Memory. RI (Ring Indicator) - an EIA-232 interface signal sent from the modem to pin 22 of the DTE. It indicates that an incoming call is present. ROM - Read Only Memory. RxD (Received Data) - an EIA-232 data signal input on pin 3 of the DTE. This signal is the data transmitted by the modem. RTS (Request To Send) - an EIA-232 interface signal output from pin 4 of the DTE. This signal indicates that the DTE has data to transmit. S Set - A bit which is "set" has a value of 1. Synchronous Transmission - Transmission in which bits or characters are sent at a fixed rate. Transmitting and receiving devices are synchronized via precise timing signals, and control is usually supplied by software using special ASCII symbols to frame data. T TxD (Transmitted data) - an EIA-232 signal output from pin 2 of the DTE. Tri-Port RAM - The interface between the host processor and the ACL16 main board processor and daughter board processor. This memory can be read from and written to both the host processor and the ACL 16 processors. U UART (Universal Asynchronous Receiver Transmitter) - a device which converts parallel data from the ACL family processor to serial EIA-232 data. It also receives serial EIA-232 data and converts it to parallel data for the ACL family processor. X XON (Transmitter On) - a control character used for flow control. XOFF (Transmitter Off) - a control character used for flow control. INDEX ACL, block diagram, 88 board-specific hardware notes, 87-93 channel control block notes, 37-38, 46 control register, 90-91 handshake register, 92 interrupts, 93 I/O register map, 89 map register, 8-9 memory map, 87 microprocessor, 87 ROM firmware development, 89 UART registers, 90 ACL II(+), block diagram, 94 board-specific hardware notes, 93-99 channel control block notes, 37-40, 45-46, 60-61 control register, 97-98 DCE select register, 99 DTE select register, 98 interrupts, 99 I/O register map, 96 map register, 8-9 memory map, 93 microprocessor, 93 ROM firmware development, 95 UART registers, 97 ACL IIR(+), block diagram, 101 board-specific hardware notes, 100-104 channel control block notes, 37-40, 60-61 control register, 104 interrupts, 104 I/O register map, 102 map register, 8-9 memory map, 100 microprocessor, 100 ROM firmware development, 102 UART registers, 103 INDEX (cont.) ACL MC, block diagram, 106 board-specific hardware notes, 105-109 channel control block notes, 37-38, 46-49, 61, 65-66 control register, 108 DTR register, 109 global control block notes, 25 interrupts, 109 I/O register map, 107 memory map, 105 microprocessor, 105 POS registers, 17-19 ROM firmware development, 105, 107 UART registers, 108 ACL 16(+), block diagram, 110-111 board-specific hardware notes, 109-117 channel control block notes, 37-40, 60-61 interrupts, 117 I/O registers, 11-15 board ID, 11-12 board control, 12-13 board status, 14-15 CHxySTR, 115 DTRWR, 117 I/O, 112-114 IOWREN, 116-117 RTSWR, 117 read only, 114 RXSTAT, 114 TXSTAT, 115 tri-port memory, 10, 112 write only, 116 microprocessor memory, 109, 112 UARTs, 113 applications, types possible, 3 INDEX (cont.) control program, buffer area, 67-72 communication errors, 68 configuring parameters, 69 interrupt handling, 70 receiving characters, 67 service requests, 70 transmitting characters, 67 development, 118 development for ACL 16(+), 119-120 dual port RAM, description, 7 interface with control program, 20 Channel Control blocks, 37-66 Bad Character Pointer 002AH, 59 Baud Rate 0000H, 37 Blocking Status 0030H, 62 Channel Command 0014H, 52 Channel Status 0016H, 55 Channel Status 2 0036H, 65 Character Received Flag 0032H, 63 Communication Error Status 0028H, 59 Data Format 0002H, 41 Error/Strip Character 0038H (ACL MC only), 66 Input Buffer Ending Address 001AH, 56 Imput Buffer High Water Mark 0010H, 51 Input Buffer Low Water Mark 0012H, 52 Input Buffer Size 0006H, 48 Input Buffer Starting Address 0018H, 55 Input Buffer Trigger Rate 000AH, 50 IXOFF Characters 0034H, 64 IXON Characters 000EH, 51 Line Protocol 0004H, 43 Modem Control 002CH, 60 Modem Status 002EH, 61 Next Character to Input Buffer 0020H, 57 Next Character from Input Buffer 0022H, 57 Next Character to Output Buffer 0024H, 58 Next Character from Output Buffer 0026H, 58 Output Buffer Ending Address 001EH, 56 Index (cont.) Channel Control Blocks, Output Buffer Low Water Mark 000CH, 50 Output Buffer Size 0008H, 49 Output Buffer Starting Address 001CH, 56 Global Control Blocks, 23-33 ACL Family Control Program Version 000AH, 26 Available Buffer Space Remaining 0006H, 25 Board Type 0008H, 26 Channel Command Service Request 001EH, 33 Channel Control Block Count 000CH, 27 Channel Control Block Offset 000EH, 27 Channel Control Block Size 0010H, 28 Communication Error Service Request 0016H, 29 Global Command Word 0000H, 23 Global Status Word 0002H, 24 Global Service Request 0004H, 25 Global Command Word 2 0012H, 23 Global Status Word 2 0014H, 29 Input Buffer Service Request 0018H, 30 Modem Status Change Service Request 001CH, 32 Output Buffer Service Request 001AH, 31 customer assistance, 125 device driver, description, 6 download, defined values, 78 procedure, 80-81 procedure for ACL MC, 82-83 procedure for ACL 16(+), 83-86 downloaded software, description, 6 glossary, 121-124 hardware, description, 4 help line, 125 local ROM, description, 4, 73 board type 0008H, 77 command word 0002H, 75 download buffer start 0006H, 77 error word 0004H, 76 status word 0000H, 74 local RAM, description, 4 INDEX (cont.) host interface software, description, 6 host support software, description, 6 POS registers, 16-19 reset, defined values, 78 procedure, 79-80 procedure for ACL 16(+), 83-86 ROM firmware, description, 5 Technical Support, 125 triport RAM, 10, 112 ¿ ³ ³ ³ Ù