linbpq/Strucs.inc

573 lines
15 KiB
PHP

EXCLUDEBITS EQU 0 ; INCLUDE ExcludeList SUPPORT
TNCBUFFLEN EQU 400h
BPQHOSTSTREAMS EQU 64
;BUFFLEN EQU 400 ; ??
MAXAPPLS EQU 32 ; Max Application Commands
ApplOffset EQU 80000 ; Applications string in buffer
C_INFOMSG EQU 85000 ; Info Msg in buffer
ApplStringLen EQU 48 ; Length of each config entry
ALIASLEN EQU 32 ; Max chars in command alias
MHENTRIES EQU 30 ; Entries in MH List
;
; BUFFLEN-4 = L2 POINTER (FOR CLEARING TIMEOUT WHEN ACKMODE USED)
; BUFFLEN-8 = TIMESTAMP
; BUFFLEN-12 = BUFFER ALLOCATED FLAG (ADDR OF ALLOCATING ROUTINE)
;MAXDATA EQU BUFFLEN-16
MAXDIGIS EQU 8
;
; BPQHOST MODE VECTOR STRUC
;
BPQVECSTRUC STRUC
HOSTSESSION DD 0
HOSTFLAGS DB 0 ; ALLOCATED AND STATE CHANGE FLAGS
HOSTAPPLMASK DD 0
HOSTAPPLFLAGS DB 0
HOSTSTREAM DB 0 ; STREAM NUMBER
HOSTTRACEQ DD 0
HOSTHANDLE DD 0 ; HANDLE FOR POSTING MSGS TO
HOSTAPPLNUM DD 0 ; Application Number
STREAMOWNER DD 0 ; PID of Process owning stream
HOSTPGMNAME DB 32 dup (0);
BPQVECSTRUC ENDS
; HOSTFLAGS = Bit 80 = Allocated
; Bit 40 = Disc Request
; Bit 20 = Stay Flag
; Bit 02 and 01 State Change Bits
VECTORLENGTH EQU TYPE BPQVECSTRUC
;
; BASIC LINK LEVEL MESSAGE BUFFER LAYOUT
;
MESSAGE STRUC
MSGCHAIN DD ? ; CHAIN WORD
MSGPORT DB ? ; PORT
MSGLENGTH DW ? ; LENGTH
MSGDEST DB 7 DUP (?) ; DESTINATION
MSGORIGIN DB 7 DUP (?) ; ORIGIN
;
; MAY BE UP TO 56 BYTES OF DIGIS
;
MSGCONTROL DB ? ; CONTROL BYTE
MSGPID DB ? ; PROTOCOL IDENTIFIER
MSGDATA DB ? ; START OF LEVEL 2 MESSAGE
;
MESSAGE ENDS
;
L3MESSAGE STRUC
;
; NETROM LEVEL 3 MESSAGE - WITHOUT L2 INFO
;
L3HEADER DB 7 DUP (?) ; CHAIN, PORT, LENGTH
L3PID DB ? ; PID
L3SRCE DB 7 DUP (?) ; ORIGIN NODE
L3DEST DB 7 DUP (?) ; DEST NODE
L3MONR DB ? ; TX MONITOR FIELD - TO PREVENT MESSAGE GOING
; ROUND THE NETWORK FOR EVER DUE TO ROUTING LOOP
;
; NETROM LEVEL 4 DATA
;
L4INDEX DB ? ; TRANSPORT SESSION INDEX
L4ID DB ? ; TRANSPORT SESSION ID
L4TXNO DB ? ; TRANSMIT SEQUENCE NUMBER
L4RXNO DB ? ; RECEIVE (ACK) SEQ NUMBER
L4FLAGS DB ? ; FRAGMENTATION, ACK/NAK, FLOW CONTROL AND MSG TYPE BITS
L4DATA DB ? ; DATA
L4CALLS DB 14 DUP (?) ; CALLS IN CONNECT REQUEST
L4_BPQ DB ? ; THENODE EXTENDED CONNECT PARAMS
L3MESSAGE ENDS
;
; L4FLAGS DEFINITION
;
L4BUSY EQU 80H ; BNA - DONT SEND ANY MORE
L4NAK EQU 40H ; NEGATIVE RESPONSE FLAG
L4MORE EQU 20H ; MORE DATA FOLLOWS - FRAGMENTATION FLAG
L4CREQ EQU 1 ; CONNECT REQUEST
L4CACK EQU 2 ; CONNECT ACK
L4DREQ EQU 3 ; DISCONNECT REQUEST
L4DACK EQU 4 ; DISCONNECT ACK
L4INFO EQU 5 ; INFORMATION
L4IACK EQU 6 ; INFORMATION ACK
;
; PORT CONTROL TABLE
;
PORTCONTROL STRUC
PORTCALL DB 7 DUP (0)
PORTALIAS DB 7 DUP (0) ; USED FOR UPLINKS ONLY
PORTNUMBER DB ?
PORTPOINTER DD ? ; NEXT IN CHAIN
PORTQUALITY DB ? ; 'STANDARD' QUALITY FOR THIS PORT
PORTRX_Q DD ? ; FRAMES RECEIVED ON THIS PORT
PORTTX_Q DD ? ; FRAMES TO BE SENT ON THIS PORT
PORTTXROUTINE DD ? ; POINTER TO TRANSMIT ROUTINE FOR THIS PORT
PORTRXROUTINE DD ? ; POINTER TO RECEIVE ROUTINE FOR THIS PORT
PORTINITCODE DD ? ; INITIALISATION ROUTINE
PORTTIMERCODE DD ?
PORTCLOSECODE DD ?
PORTTXCHECK DD ? ; OK to Send Check
PORTDESCRIPTION DB 30 DUP (0) ; TEXT DESCRIPTION OF FREQ/SPEED ETC
PORTBBSFLAG DB ? ; NZ MEANS PORT CALL/ALIAS ARE FOR BBS
PORTL3FLAG DB ? ; NZ RESTRICTS OUTGOING L2 CONNECTS
;
; CWID FIELDS
;
CWID DW 9 DUP (0) ; 8 ELEMENTS + FLAG
ELEMENT DW ? ; REMAINING BITS OF CURRENT CHAR
CWPOINTER DD ? ; POINTER TO NEXT CHAR
CWIDTIMER DW ? ; TIME TO NEXT ID
CWSTATE DB ? ; STATE MACHINE FOR CWID
CWTYPE DB ? ; SET TO USE ON/OFF KEYING INSTEAD OF
; FSK (FOR RUH MODEMS)
PORTMINQUAL DB ? ; MIN QUAL TO BRAOCAST ON THIS PORT
; STATS COUNTERS
;
L2DIGIED DD ?
L2FRAMES DD ?
L2FRAMESFORUS DD ?
L2FRAMESSENT DD ?
L2TIMEOUTS DD ?
L2ORUNC DD ? ; OVERRUNS
L2URUNC DD ? ; UNDERRUNS
L1DISCARD DD ? ; FRAMES DISCARDED (UNABLE TO TX DUE TO DCD)
L2FRMRRX DD ?
L2FRMRTX DD ?
RXERRORS DD ? ; RECEIVE ERRORS
L2REJCOUNT DD ? ; REJ FRAMES RECEIVED
L2OUTOFSEQ DD ? ; FRAMES RECEIVED OUT OF SEQUENCE
L2RESEQ DD ? ; FRAMES RESEQUENCED
SENDING DW 0 ; LINK STATUS BITS
ACTIVE DW 0
AVSENDING DB 0 ; LAST MINUTE
AVACTIVE DB 0
PORTTYPE DB 0 ; H/W TYPE
; 0 = ASYNC, 2 = PC120, 4 = DRSI
; 6 = TOSH, 8 = QUAD, 10 = RLC100
; 12 = RLC400 14 = INTERNAL 16 = EXTERNAL ; 18 = i2c
PROTOCOL DB 0 ; PORT PROTOCOL
; 0 = KISS, 2 = NETROM, 4 = BPQKISS
; 6 = HDLC, 8 = L2, 10 = PACTOR
IOBASE DW ? ; CONFIG PARAMS FOR HARDWARE DRIVERS
INTLEVEL DB ? ; FIRST 4 SAME FOR ALL H/W TYPES
BAUDRATE DD ? ; SPEED
CHANNELNUM DB ? ; ON MULTICHANNEL H/W
INTCHAIN DD ? ; POINTER TO NEXT PORT USING THIS LEVEL
PORTWINDOW DB ? ; L2 WINDOW FOR THIS PORT
PORTTXDELAY DW ? ; TX DELAY FOR THIS PORT
PORTPERSISTANCE DB ? ; PERSISTANCE VALUE FOR THIS PORT
FULLDUPLEX DB ? ; FULL DUPLEX IF SET
SOFTDCDFLAG DB ? ; IF SET USE 'SOFT DCD' - IF MODEM CANT GIVE A REAL ONE
PORTSLOTTIME DB ? ; SLOT TIME
PORTTAILTIME DB ? ; TAIL TIME
BBSBANNED DB ? ; SET IF PORT CAN'T ACCEPT L2 CALLS TO BBS CALLSIGN
PORTT1 DB ? ; L2 TIMEOUT
PORTT2 DB ? ; L2 DELAYED ACK TIMER
PORTN2 DB ? ; RETRIES
PORTPACLEN DB ? ; DEFAULT PACLEN FOR INCOMING SESSIONS
PORTINTERRUPT DD ? ; ADDRESS OF INTERRUPT HANDLER
QUAL_ADJUST DB ? ; % REDUCTION IN QUALITY IF ON SAME PORT
PERMITTEDCALLS DD ? ; POINTER TO PERMITED CALLS LIST
PORTUNPROTO DD ? ; POINTER TO UI DEST AND DIGI LIST
PORTDISABLED DB 0 ; PORT TX DISABLE FLAG
DIGIFLAG DB 0 ; ENABLE/DISABLE/UI ONLY
DIGIPORT DB 0 ; CROSSBAND DIGI PORT
DIGIMASK DW 0 ; CROSSBAND DIGI MASK
USERS DB 0 ; MAX USERS ON PORT
KISSFLAGS DB 0 ; KISS SPECIAL MODE BITS
PORTINTERLOCK DB 0 ; TO DEFINE PORTS WHICH CANT TX AT SAME TIME
NODESPACLEN DB 0 ; MAX LENGTH OF 'NODES' MSG
TXPORT DB 0 ; PORT FOR SHARED TX OPERATION
PORTMHEARD DD 0 ; POINTER TO MH DATA
PARAMTIMER DW 0 ; MOVED FROM HW DATA FOR SYSOPH
PORTMAXDIGIS DB 0 ; DIGIS ALLOWED ON THIS PORT
PORTALIAS2 DB 7 DUP (0) ; 2ND ALIAS FOR DIGIPEATING FOR APRS
PORTBCALL DB 7 DUP (0) ; Source for Beacons
PortNoKeepAlive DB 0; ; Default to No Keepalives
PortUIOnly DB 0;
UICAPABLE DB 0; ; Pactor-style port that can do UI
WL2K DB 189 DUP (0) ; WL2K Report Data
PORTIPADDR DD 0;
SerialPortName DD 0 ; Serial Port Name for Unix
XDIGIS DD 0; ; Cross Port Digi Definitions
NormalizeQuality DD 0 ; Normalise Node Qualities
IgnoreUnlocked DD 0 ; Ignore Unlocked Routes
HARDWAREDATA DB 200 DUP (?) ; WORK AREA FOR HARDWARE DRIVERS
PORTCONTROL ENDS
;
; DEFINE MAPPING FOR EXTERNAL DRIVER
;
EXTDATA STRUC
DB HARDWAREDATA DUP (0) ; REMAP HARDWARE INFO
PORT_EXT_ADDR DD ? ; ADDR OF RESIDENT ROUTINE
PORT_DLL_NAME DB 16 DUP (0);
EXTRESTART DB ? ; FLAG FOR DRIVER REINIT
DLLHANDLE DD ?
MAXHOSTMODESESSIONS DD ? ; Max Host Sessions supported (Used for KAM Pactor + ax.25 support)
ATTACHEDSESSIONS DD 27 DUP (0); Owning Sessions for PACTOR, etc
PERMITGATEWAY DD 0 ; Set if ax.25 ports can change callsign (ie SCS, not KAM
SCANCAPABILITIES DD 0 ; Type of scan control Controller supports (None, Simple, Connect Lock)
UI_Q DD 0 ; Unproto Frames for Session Mode Drivers (TRK, etc)
EXTDATA ENDS
IF TYPE EXTDATA GT TYPE PORTCONTROL
.ERR2 TOO MUCH PORT DATA
ENDIF
EXTERNAL EQU 16
L2 EQU 8
;
; CW STATE MACHINE EQUATES
;
dot equ 1b
dash equ 10b
dotspace equ 100b
letterspace equ 1000b
IDPENDING EQU 10000B
;
; LEVEL 2 LINK CONTROL TABLE
;
LINKTABLE STRUC
LINKCALL DB 7 DUP (?) ; CALLSIGN OF STATION
OURCALL DB 7 DUP (?) ; CALLSIGN OF OUR END
DIGIS DB MAXDIGIS*7 DUP (?) ; LEVEL 2 DIGIS IN PATH
LINKPORT DD ? ; PORT POINTER
LINKTYPE DB ? ; 1 = UP, 2= DOWN, 3 = INTERNODE
LINKNR DB ?
LINKNS DB ? ; LEV 2 SEQUENCE COUNTS
LINKWS DB ? ; WINDOW START
LINKOWS DB ? ; OLD (LAST ACKED) WINDOW START
LINKWINDOW DB ? ; LEVEL 2 WINDOW SIZE
L2FLAGS DB ? ; CONTROL BITS
VER1FLAG DB ? ; SET IF OTHER END RUNNING VERSION 1
RX_Q DD ? ; PACKETS RECEIVED ON THIS LINK
TX_Q DD ? ; PACKETS TO SEND
FRAMES DD 8 DUP (?) ; FRAMES WAITING ACK
RXFRAMES DD 8 DUP (?) ; Frames received out of sequence
L2STATE DB ? ; PROCESSING STATE
L2TIMER DW ? ; FRAME RETRY TIMER
L2TIME DB ? ; RETRY TIMER INITIAL VALUE
L2SLOTIM DW ? ; DELAY FOR LINK VALIDATION POLL
L2ACKREQ DB ? ; DELAYED TEXT ACK TIMER
REJTIMER DB ? ; TO TIME OUT REJ IN VERSION 1
LAST_F_TIME DW ? ; TIME LAST R(F) SENT
SDREJF DB ? ; FLAGS FOR FRMR
SDRBYTE DB ? ; SAVED CONTROL BYTE FOR FRMR
SDTSLOT DB ? ; POINTER TO NEXT TXSLOT TO USE
L2RETRIES DB ? ; RETRY COUNTER
SESSACTIVE DB ? ; SET WHEN WE ARE SURE SESSION IS UP
KILLTIMER DW ? ; TIME TO KILL IDLE LINK
CIRCUITPOINTER DD ? ; POINTER TO L4 CIRCUIT TABLE ENTRY
; (IF UP/DOWN)
NEIGHBOUR DD ? ; POINTER TO NEIGHBOUR (IF CROSSLINK)
L2FRAG_Q DD ? ; DEFRAGMENTATION QUEUE
LINKTABLE ENDS
;
; L2FLAGS EQUATES
;
REJSENT EQU 1B ; SET WHEN FIRST REJ IS SENT IN REPLY
; TO AN I(P)
RNRSET EQU 10B ; RNR RECEIVED FROM OTHER END
;DISCPENDING EQU 1000B ; SEND DISC WHEN ALL DATA ACK'ED
RNRSENT EQU 10000B ; WE HAVE SEND RNR
POLLSENT EQU 100000B ; POLL BIT OUTSTANDING
;
; FRMR REJECT FLAGS
;
SDINVC EQU 1B ; INVALID COMMAND
SDNRER EQU 1000B ; INVALID N(R)
TRANSPORTENTRY STRUC
L4USER DB 7 DUP (?) ; CALL OF ORIGINATING USER
L4TARGET DD ? ; POINTER TO TARGET LINK/DEST
L4MYCALL DB 7 DUP (0) ; CALL WE ARE USING
CIRCUITINDEX DB ? ; OUR CIRCUIT INFO
CIRCUITID DB ?
FARINDEX DB ?
FARID DB ? ; OTHER END'S INFO
L4WINDOW DB ? ; WINDOW SIZE
L4WS DB ? ; WINDOW START - NEXT FRAME TO ACK
TXSEQNO DB ?
RXSEQNO DB ? ; TRANSPORT LEVEL SEQUENCE INFO
L4LASTACKED DB ? ; LAST SEQUENCE ACKED
FLAGS DB ? ; TRANSPORT LEVEL FLAGS
NAKBITS DB ? ; NAK & CHOKE BITS TO BE SENT
L4CROSSLINK DD ? ; POINTER TO LINKED L4 SESSION ENTRY
L4CIRCUITTYPE DB ? ; BIT SIGNIFICANT - SEE BELOW
KAMSESSION DB ? ; Session Number on KAM Host Mode TNC
L4TX_Q DD ?
L4RX_Q DD ?
L4HOLD_Q DD ? ; FRAMES WAITING TO BE ACKED
L4RESEQ_Q DD ? ; FRAMES RECEIVED OUT OF SEQUENCE
L4STATE DB ?
L4TIMER DW ?
L4ACKREQ DB ? ; DATA ACK NEEDED
L4RETRIES DB ? ; RETRY COUNTER
L4KILLTIMER DW 0 ; IDLE CIRCUIT TIMER
SESSIONT1 DW 0 ; TIMEOUT FOR SESSIONS FROM HERE
SESSPACLEN DB 0 ; PACLEN FOR THIS SESSION
BADCOMMANDS DB 0 ; SUCCESSIVE BAD COMMANDS
STAYFLAG DB 0 ; STAY CONNECTED FLAG
SPYFLAG DB 0 ; SPY - CONNECT TO NODE VIA BBS CALLSIGN
RTT_SEQ DB 0 ; SEQUENCE NUMBER BEING TIMED
RTT_TIMER DD 0 ; TIME ABOVE SEQUENCE WAS SENT
PASSWORD DW 0 ; AUTHORISATION CODE FOR REMOTE SYSOP
;
SESS_APPLFLAGS DB 0 ; APPL FLAGS FOR THIS SESSION
Authorised_Session DB 0; // Set if Host session from BPQTerminal or BPQMailChat
DUMPPTR DD 0 ; POINTER FOR REMOTE DUMP MODE
PARTCMDBUFFER DD 0 ; Save area for incomplete commmand
Frequency DD 0 ; If known - for CMS Reporting Hz
RMSCall DB 10 DUP (0);
Mode DB 0 ; ditto
UNPROTO DD 0 ; Unproto Mode flag - port number if in unproto mode
UAddrLen DD 0 ;
UADDRESS DB 64 DUP (0); Unproto Address String - Dest + Digis
LISTEN DD 0 ; Listen Mode flag - port number of Listen Mode
APPL DB 16 DUP (0); Set if session initiated by an APPL
L4LIMIT dd 0 ; Idle Timout for this session
TRANSPORTENTRY ENDS
;
; CIRCUITTYPE EQUATES
;
L2LINK EQU 1
SESSION EQU 10B
UPLINK EQU 100B
DOWNLINK EQU 1000B
BPQHOST EQU 100000B
PACTOR EQU 1000000B
;
; FLAGS EQUATES
;
DISCPENDING EQU 1000B ; SEND DISC WHEN ALL DATA ACK'ED
;
; TOP 4 BITS MATCH L4FLAGS BITS - ALSO USED FOR NAKBITS
;
;L4BUSY EQU 80H ; BNA - DONT SEND ANY MORE
;L4NAK EQU 40H ; NEGATIVE RESPONSE FLAG
;L4MORE EQU 20H ; MORE DATA FOLLOWS - FRAGMENTATION FLAG
DEST_LIST STRUC
DEST_CHAIN DD ? ; SORTED LIST CHAIN
DEST_CALL DB 7 DUP (?) ; DESTINATION CALLSIGN (AX25 FORMAT)
DEST_ALIAS DB 6 DUP (?)
DEST_STATE DB ? ; CONTROL BITS - SETTING UP, ACTIVE ETC
DEST_ROUTE DB ? ; CURRENTY ACTIVE DESTINATION
INP3FLAGS DB ?
ROUT1_NEIGHBOUR DD ? ; POINTER TO NEXT NODE IN PATH
ROUT1_QUALITY DB ? ; QUALITY
ROUT1_OBSCOUNT DB ?
db 5 dup (?); Padding
ROUT2_NEIGHBOUR DD ?
ROUT2_QUALITY DB ?
ROUT2_OBSCOUNT DB ?
db 5 dup (?); Padding
ROUT3_NEIGHBOUR DD ?
ROUT3_QUALITY DB ?
ROUT3_OBSCOUNT DB ?
db 5 dup (?); Padding
INPROUT1_NEIGHBOUR DD ?
LastRTT1 DW ?; // Last Value Reported
RTT1 DW ?; // Current
SRTT1 DW ?; // Smoothed RTT
Hops1 DB ?;
INPROUT2_NEIGHBOUR DD ?
LastRTT2 DW ?; // Last Value Reported
RTT2 DW ?; // Current
SRTT2 DW ?; // Smoothed RTT
Hops2 DB ?;
INPROUT3_NEIGHBOUR DD ?
LastRTT3 DW ?; // Last Value Reported
RTT3 DW ?; // Current
SRTT3 DW ?; // Smoothed RTT
Hops3 DB ?;
DEST_Q DD ? ; QUEUE OF FRAMES FOR THIS DESTINATION
DEST_RTT DD ? ; SMOOTHED ROUND TRIP TIMER
DEST_COUNT DD ? ; FRAMES SENT
DEST_LIST ENDS
;
; MODEFLAG DEFINITIONS
;
COMMAND EQU 1B
TRANS EQU 10B
CONV EQU 100B
;
; APPL DEFINITIONS
;
BBSAPPL EQU 1B
HOSTAPPL EQU 10B
SYSOPAPPL EQU 100B
;
; HOSTFLAG DEFINITIONS
;
;HOSTMODE EQU 1B ; PK232 HOSTMODE ENABLED
;HOSTESCBIT EQU 10B ; IN ESCAPE SEQUENCE
;UFQ EQU 100B ; UFQ MODE (IE NOT AA4RE)
;POLLED EQU 1000B ; POLL RECEIVED
;KISSMODE EQU 10000B ; KISS MODE
;KISSESC EQU 100000B ; IN ESCAPE SEQUENCE
;
; APPLFLAGS BITS
;
CMD_TO_APPL EQU 1B ; PASS COMMAND TO APPLICATION
MSG_TO_USER EQU 10B ; SEND 'CONNECTED' TO USER
MSG_TO_APPL EQU 100B ; SEND 'CONECTED' TO APPL
;
; HDLC COMMANDS (WITHOUT P/F)
;
UI EQU 3
SABM EQU 2FH
DISC EQU 43H
DM EQU 0FH
UA EQU 63H
FRMR EQU 87H
RR EQU 1
RNR EQU 5
REJ EQU 9
;
PFBIT EQU 10H ; POLL/FINAL BIT IN CONTROL BYTE
;
; MH DATA AREA
;
;MHSTRUC STRUC
;MHCALL DB 7 DUP (0)
;MHTIME DD 0 ; ? FROM BIOS
;MHDIGI DB 0
;MHFreq DB 12 DUP (0)
;MHLocator DB 6 DUP (0)
;MHSTRUC ENDS
; Application Calls/Alias Supports multiple L4 application calls
APPLCALLS STRUC
APPLCALL DB 7 DUP (0) ; ax.25
APPLALIAS_TEXT DB 10 DUP (0) ; TEXT, WITH APPENDED SPACE
APPLCALL_TEXT DB 10 DUP (0)
APPLALIAS DB 6 DUP (0)
APFiller DB 0
APPLQUAL DW 0
APPNODEPOINTER DD 0 ; Pointer to "NODES" entry for this App (if L4)
APPLCMDNAME DB 13 DUP (0) ; Command to invoke this APPL
APPLHASALIAS DD 0
APPLPORT DD 0 ; Port if Appl has an alias
APPLALIASPTR DD 0 ; Pointer to Alias if defined
APPLCALLS ENDS
; New Style APPL configuration
APPLCONFIG STRUC
ACCommand DB 12 DUP (0);
ACCommandAlias DB 48 DUP (0);
ACApplCall DB 10 DUP (0);
ACApplAlias DB 10 DUP (0);
ACApplQual DD 0
APPLCONFIG ENDS
;
; HARDWARE TYPE EQUATES
;
KISS EQU 0
PC120 EQU 2
DRSI EQU 4
TOSH EQU 6
QUADRAM EQU 8
RLC100 EQU 0AH
RLC400 EQU 0CH
INTERNAL EQU 0EH
EXTERNAL EQU 10H
BAYCOM EQU 12H
PA0HZP EQU 14H