equates.asm



AVOCET SYSTEMS 8085/Z80 ASSEMBLER -  VERSION 1.05M  SERIAL #00411

SOURCE FILE NAME: EQUATES.ASM                                       PAGE  1


                
                
 0000            ;THIS FILE CONTAINS ALL THE EQUATES FOR THE 544 BOARD.
 0000            ;IT ALSO HAS THE POWER ON JUMP TO INITIALIZATION AND
 0000            ;THE INCLUDE FILES FOR THE COMPLETE PROGRAM.
 0000            ;THIS IS THE FILE INVOKED TO ASSEMBLE THE 544 FIRMWARE.
                
                
 0000                           ; ORG 9000H
 0000                           ORG 0
 0000 31FFBF    START:          LXI  SP,0BFFFH          ;SETUP THE STACK
 0003 3EFF                      MVI  A,0FFH             ;TELL THE MASTER
 0005 320080                    STA  8000H              ;CPU WER'E BUSY
 0008 C3390B                    JMP  INIT
                
 000B            
 00D0           DAT0ADD         EQU     0D0H    ; UART DATA PORT ADDRESSES
 00D2           DAT1ADD         EQU     0D2H
 00D4           DAT2ADD         EQU     0D4H
 00D6           DAT3ADD         EQU     0D6H
                
 00D1           STAT0ADD        EQU     0D1H    ; UART STATUS AND COMMAND
 00D3           STAT1ADD        EQU     0D3H    ; PORT ADDRESSES
 00D5           STAT2ADD        EQU     0D5H    
 00D7           STAT3ADD        EQU     0D7H
                
 8600           RCV0BUFF        EQU     8600H   ; RECEIVED MESSAGE CHAR
 8700           RCV1BUFF        EQU     8700H   ; BUFFER ADDRESSES
 8800           RCV2BUFF        EQU     8800H
 8900           RCV3BUFF        EQU     8900H
                
 8200           SND0BUFF        EQU     8200H   ; SEND MESSAGE BUFFER
 8300           SND1BUFF        EQU     8300H   ; ADDRESSES
 8400           SND2BUFF        EQU     8400H
 8500           SND3BUFF        EQU     8500H
                
 8AC0           RCV0FLGS        EQU     8AC0H   ; FLAGS AND POINTERS
 8AE0           RCV1FLGS        EQU     8AE0H   ; FOR MESSAGE RECEIVED
 8B00           RCV2FLGS        EQU     8B00H   
 8B20           RCV3FLGS        EQU     8B20H
                
 8A40           SND0FLGS        EQU     8A40H   ; FLAGS AND POINTERS
 8A60           SND1FLGS        EQU     8A60H   ; FOR MESSAGE SEND
 8A80           SND2FLGS        EQU     8A80H
 8AA0           SND3FLGS        EQU     8AA0H
                
 8A00           RCV4FLGS        EQU     8A00H   ; FLAGS AND POINTERS
 8A20           SND4FLGS        EQU     8A20H   ; FOR BOARD MESSAGES
                
 000B             ;FOLLOWING ARE THE ENABLE/DISABLE MASKS TO BE ANDED
 000B             ;OR ORED TO THE INTERRUPT MASK OF THE PIC TO ENABLE


AVOCET SYSTEMS 8085/Z80 ASSEMBLER -  VERSION 1.05M  SERIAL #00411

SOURCE FILE NAME: EQUATES.ASM                                       PAGE  2


 000B             ;OR DISABLE THE INDIVIDUAL UART SEND OR RECEIVE 
 000B             ;INTERRUPTS.
                
 00FD           CH0SNDEN        EQU     0FDH    ; AND THE ENABLE MASK
 00F7           CH1SNDEN        EQU     0F7H    ; TO THE EXISTING PIC
 00DF           CH2SNDEN        EQU     0DFH    ; MASK TO ENABLE THE
 007F           CH3SNDEN        EQU     07FH    ; INTERRUPT.
                
 00FE           CH0RCVEN        EQU     0FEH      
 00FB           CH1RCVEN        EQU     0FBH
 00EF           CH2RCVEN        EQU     0EFH
 00BF           CH3RCVEN        EQU     0BFH
                
 0002           CH0SNDDIS       EQU     02H     ; OR THE DISABLE MASK
 0008           CH1SNDDIS       EQU     08H     ; TO THE EXISTING PIC
 0020           CH2SNDDIS       EQU     020H    ; MASK TO DISABLE THE
 0080           CH3SNDDIS       EQU     080H    ; INTERRUPT.
                
 0001           CH0RCVDIS       EQU     01H
 0004           CH1RCVDIS       EQU     04H
 0010           CH2RCVDIS       EQU     010H
 0040           CH3RCVDIS       EQU     040H
                
 0020           PICRESET        EQU     20H     ; NON-SPECIFIC PIC
 000B                                           ; ENABLE INTERRUPT 
 000B                                           ; BYTE
 00E6           PICPORT         EQU     0E6H    ; RESET INTERRUPTS ETC.
 000B                                           ; PIC CONTROL PORT
 000B                                           ; ADDRESS
 00E7           PICMASK         EQU     0E7H    ; PIC INTERRUPT ENABLE
 000B                                           ; MASK PORT ADDRESS
                
 000B            ;FOLLOWING ARE THE EQUATES FOR THE MAIN BODY OF
 000B            ;THE FLAG INTERRUPT ROUTINE
                
 8000           BASEADD         EQU     8000H   ; START OF 544 ON-BRD
 000B                                           ; RAM.  A WRITE TO THIS
 000B                                           ; ADDRESS CAUSES A FLAG
 000B                                           ; INTERRUPT.
 8A20           OUT544          EQU     8A20H   ; 544 TO SNDMSG TASK
 000B                                           ; FLAGS & PTRS START
 000B                                           ; ADDRESS
 8A22           ACKNAKFLG       EQU     OUT544 + 2
 000B                                           ; FLAG TO TELL IF CMD
 000B                                           ; TO 544 HAS BEEN 
 000B                                           ; SUCCESSFUL.
 8A20           ACKNAKLOPTR     EQU     OUT544 + 0
 000B                                           ; POINTER TO LOWEST    
 000B                                           ; FULL SLOT
 000B                                           ; IN ACK/NAK MSG QUEUE
 8A21           ACKNAKHIPTR     EQU     OUT544 + 1


AVOCET SYSTEMS 8085/Z80 ASSEMBLER -  VERSION 1.05M  SERIAL #00411

SOURCE FILE NAME: EQUATES.ASM                                       PAGE  3


 000B                                           ; POINTER TO CURRENT 
 000B                                           ; TOP EMPTY SLOT IN
 000B                                           ; ACK/NAK MSG QUEUE
 8B40           ACKNAKQUEUE     EQU     8B40H   ; BOARD ACK NACK INFO
 000B                                           ; QUEUE
                
                
 000B            ; FOLLOWING ARE EQUATES REQUIRED IN ADDITION TO THE
 000B            ; FOREGOING FOR THE INITIALIZE COM CHANNEL ROUTINES.
                
 0036           MODE0BYTE       EQU     36H     ; PIT MODE CMD FOR CH 0
 0076           MODE1BYTE       EQU     76H     ; PIT MODE CMD FOR CH 1
 00B6           MODE2BYTE       EQU     0B6H    ; PIT MODE CMD FOR CH 2
 0036           MODE3BYTE       EQU     36H     ; PIT MODE CMD FOR CH 3
                
 00DB           CH0PIT          EQU     0DBH    ; ADDRESS OF PIT 0
 00DB           CH1PIT          EQU     0DBH    ; SAME
 00DB           CH2PIT          EQU     0DBH    ; SAME
 00DF           CH3PIT          EQU     0DFH    ; ADDRESS OF PIT 1
                
 00D8           CNT0            EQU     0D8H    ; CH 0 CNT LOAD ADD
 00D9           CNT1            EQU     0D9H    ; CH 1 CNT LOAD ADD
 00DA           CNT2            EQU     0DAH    ; CH 2 CNT LOAD ADD
                
 00DC           CNT3            EQU     0DCH    ; CH 3 CNT LOAD ADD
                
 0040           RESETBYTE       EQU     40H     ; UASRT RESET TO CMD
 000B                                           ; MODE BYTE
                
 000B            ; FOLLOWING ARE MORE EQUATES FOR ACKCHK.ASM
                
 8100           OUTBUFFER       EQU     8100H   ; BUFFER FOR ALL MSGS
 000B                                           ; SENT TO MASTER CPU
 001A           ACKNAKID        EQU     26      ; MSG ID FOR ACK OR NAK
 00C0           STROBEHI        EQU     0C0H    ; MASK TO OUTPUT ONE
 000B                                           ; ON SIO LINE WITH SIM
 000B                                           ; INSTRUCTION
 0040           STROBELO        EQU     040H    ; MASK TO OUTPUT ZERO
 000B                                           ; ON SIO LINE WITH SIM
 000B                                           ; INSTRUCTION
                
 000B            ; EQUATES FOR OUTMSG.ASM
                
 8A30           MSGQHIPTR       EQU     8A30H   ; ADDRESS OF POINTER TO 
 000B                                           ; NEXT AVAILABLE SLOT
 000B                                           ; IN MESSAGE QUEUE FOR
 000B                                           ; MESSAGES TO BE SENT TO
 000B                                           ; THE MASTER CPU.
 8A31           MSGQLOPTR       EQU     8A31H
 000B                   
 8A33           OUTCRCLO        EQU     8A33H


AVOCET SYSTEMS 8085/Z80 ASSEMBLER -  VERSION 1.05M  SERIAL #00411

SOURCE FILE NAME: EQUATES.ASM                                       PAGE  4


                
 8A32           OUTCRCHI        EQU     8A32H
                
                
                
 8B60           MSGQUE          EQU     8B60H   ; BASE ADDRESS OF 16 SLOT
 000B                                           ; BY 2 BYTES PER SLOT
 000B                                           ; QUEUE FOR MESSAGES TO
 000B                                           ; BE SENT TO THE MASTER 
 000B                                           ; CPU. FIRST BYTE IN SLOT
 000B                                           ; HOLDS THE CHANNEL NO.
 000B                                           ; OF THE MESSAGE.  THE
 000B                                           ; SECOND BYTE HAS THE 
 000B                                           ; OFFSET INTO THE CHANNEL
 000B                                           ; BUFFER WHERE THE MESSAGE
 000B                                           ; STARTS.
                
 00FF           MSGSENT         EQU     0FFH
                
 001B           MSGSENTID       EQU     027
                
 000B            ; FOLLOWING ARE INITIALIZATION EQUATES
                
 000E           SIMINIT         EQU     0EH     ; ENABLE 5.5 INTERRUPT
                
 0052           ICW1            EQU     52H     ; PIC ICW1 FOR VECTOR
 000B                                           ; TABLE AT nn40H 
 0000           ICW2            EQU     0       ; FOR 0040 VECTOR TABLE
 000B                                           ; START
                ; ICW2          EQU     90H     ; FOR 9040H VECTOR TABLE
 000B                                           ; START
                
                
 000B             ; INIT:               HLT
                
                


AVOCET SYSTEMS 8085/Z80 ASSEMBLER -  VERSION 1.05M  SERIAL #00411

SOURCE FILE NAME: EQUATES.ASM                                       PAGE  5
 VECTORS FOR INTERRRUPT ROUTINES 

                                INCLUDE VECTORS.ASM
                
                
                
 002C           VECTORS:        ORG START + 2CH
                
 002C C31E03                    JMP FLAGINT
                
 0040                           ORG START + 40H
                
 0040 C3A108                    JMP CHAN0RCV
                
 0048                           ORG START + 48H
                
 0048 C32907                    JMP SND0INT
                
 0050                           ORG START + 50H
                
 0050 C33E09                    JMP CHAN1RCV
                
 0058                           ORG START + 58H
                
 0058 C38707                    JMP SND1INT
                
 0060                           ORG START + 60H 
                
 0060 C3DB09                    JMP CHAN2RCV
                
 0068                           ORG START + 68H
                
 0068 C3E507                    JMP SND2INT
                
 0070                           ORG START + 70H
                
 0070 C3780A                    JMP CHAN3RCV
                
 0078                           ORG START + 78H
                
 0078 C34308                    JMP SND3INT
                


AVOCET SYSTEMS 8085/Z80 ASSEMBLER -  VERSION 1.05M  SERIAL #00411

SOURCE FILE NAME: EQUATES.ASM                                       PAGE  6
 MAIN SCAN LOOP ROUTINE 

                                INCLUDE MAINLOOP.ASM
                
 0100                           ORG START + 100H
                
 0100 3A0081    MAIN:           LDA OUTBUFFER
 0103 B7                        ORA A
 0104 C25F02                    JNZ CLN00BFR
 0107 C31701                    JMP ACKCHK 
 010A 3A0081    MAIN1:          LDA OUTBUFFER
 010D B7                        ORA A
 010E C25F02                    JNZ CLN00BFR
 0111 C36301                    JMP CHKMSGS
 0114 C35F02                    JMP CLN00BFR
                


AVOCET SYSTEMS 8085/Z80 ASSEMBLER -  VERSION 1.05M  SERIAL #00411

SOURCE FILE NAME: EQUATES.ASM                                       PAGE  7
 CHECK FOR ACKNOWLEGE MESSAGES TO BE SENT TO MASTER 

                                INCLUDE ACKCHK.ASM
                
                
 0117            ; THIS SECTION OF CODE CHECKS TO SEE IF ANY BOARD COMMAND
 0117            ; ACKS OR NACKS ARE WAITING TO BE SENT TO THE MASTER CPU.
 0117            ; IF ANY ARE WAITING TO BE SENT, IT ASSEMBLES THE MESSAGE 
 0117            ; AND NOTIFIES THE MASTER CPU VIA AN INTERRUPT THAT A
 0117            ; MESSAGE IS WAITING TO BE PICKED UP AT THE OUT BUFFER.
                
                
 0117 3E40      ACKCHK:         MVI A,STROBELO  ; REMOVE OLD MASTER
 0119 30                        SIM             ; INTERRUPT
 011A 21208A                    LXI H,ACKNAKLOPTR ; QUEUE LO PTR
 011D 7E                        MOV A,M         ; GET THE POINTER
 011E 23                        INX H           ; NOW HIPOINTER
 011F BE                        CMP M           ; SEE IF LO & HI SAME
 0120 CA0A01                    JZ MAIN1        ; SAME - NOTHING IN
 0123                                           ; QUEUE
 0123 4F                        MOV C,A         ; NOT SAME - SET UP
 0124                                           ; TO SEND
 0124 0600                      MVI B,0
 0126 C604                      ADI 4           ; NEXT TIME LO PTR
 0128 E61F                      ANI 01FH        ; ONLY 8 * 4 BYTES
 012A                                           ; IN QUEUE
 012A 2B                        DCX H           ; BACK TO LOPTR
 012B 77                        MOV M,A         ; SAVE NEW LO
 012C 21408B                    LXI H,ACKNAKQUEUE ; SET UP FOR MESSAGE
 012F 09                        DAD B           ; ASSEMBLY
 0130 110081                    LXI D,OUTBUFFER ; 
 0133 3EFF                      MVI A,0FFH      ; BUSY BYTE 
 0135 12                        STAX D          ; PUT IN HANDSHAKE 
 0136                                           ; BYTE
 0136 13                        INX D           ; NOW CHANNEL #
 0137 3E04                      MVI A,4         ; 544 BOARD = 4
 0139 12                        STAX D
 013A 13                        INX D           ; MESSAGE COUNT
 013B 3E07                      MVI A,7
 013D 12                        STAX D
 013E 13                        INX D           ; NOW MSG ID
 013F 3E1A                      MVI A,ACKNAKID
 0141 12                        STAX D
 0142 13                        INX D           ; COMMAND BYTE
 0143 7E                        MOV A,M    
 0144 FEFF                      CPI MSGSENT     ; IF CMD BYTE = 0FF
 0146 C24F01                    JNZ CMDBYTE     ; SET MSGID TO
 0149 1B                        DCX D           ; MSGSENTID
 014A 3E1B                      MVI A,MSGSENTID
 014C 12                        STAX D
 014D 13                        INX D
 014E 7E                        MOV A,M
 014F 12        CMDBYTE:        STAX D


AVOCET SYSTEMS 8085/Z80 ASSEMBLER -  VERSION 1.05M  SERIAL #00411

SOURCE FILE NAME: EQUATES.ASM                                       PAGE  8
 CHECK FOR ACKNOWLEGE MESSAGES TO BE SENT TO MASTER 

 0150 13                        INX D           ; NOW CHANNEL COMMANDED
 0151 23                        INX H
 0152 7E                        MOV A,M
 0153 12                        STAX D
 0154 13                        INX D           ; NOW ACK/NAK FLAG
 0155 23                        INX H
 0156 7E                        MOV A,M
 0157 12                        STAX D
 0158 13                        INX D           ; NOW ZERO CRC BYTES
 0159 AF                        XRA A
 015A 12                        STAX D
 015B 13                        INX D
 015C 12                        STAX D
 015D             ;
 015D             ; NOW INTERRUPT THE MASTER CPU
 015D             ;
 015D 3EC0                      MVI A,STROBEHI
 015F 30                        SIM             ; STROBE THE SIO LINE
 0160                                           ; HI TO INTERRUPT THE
 0160                                           ; MASTER CPU
 0160 C30A01                    JMP MAIN1       ; ALL DONE
                
 0163             ; CHKMSGS:    NOP
 0163             ; PROC0CHAN:  NOP


AVOCET SYSTEMS 8085/Z80 ASSEMBLER -  VERSION 1.05M  SERIAL #00411

SOURCE FILE NAME: EQUATES.ASM                                       PAGE  9
 CHECK FOR RS-232 MESSAGES TO BE SENT TO MASTER 

                                INCLUDE OUTMSG.ASM
                
                
                
 0163            ; THIS ROUTINE TRANSFERS MESSAGES WAITING IN THE MESSAGE
 0163            ; QUEUE TO THE OUTPUT BUFFER TO THE MASTER CPU.
 0163            ; AFTER TRANSFERING THE MESSAGE IT ADVANCES THE LOPTR
 0163            ; OF THE RECEIVE MESSAGE BUFFER AND CALCULATES THE CRC
 0163            ; FOR THE OUTGOING MESSAGE.  THE CRC, WHICH WILL BE
 0163            ; ZERO FOR AN ERROR FREE MESSAGE, IS THEN PUT IN THE
 0163            ; CRC BYTES OF THE OUTGOING MESSAGE IN PLACE OF THE
 0163            ; TRANSMITTED CRC BYTES.  
 0163            ; AFTER THE MESSAGE IS FORMATTED AND READY, THE MASTER
 0163            ; CPU IS NOTIFIED OF THIS BY MEANS OF THE BUS INTERRUPT
 0163            ; GENERATED BY THE SIO LINE USING SIM INSTRUCTIONS.
                
 0163 3E40      CHKMSGS:        MVI A,STROBELO  ; REMOVE OLD     
 0165 30                        SIM             ; INTERRUPT
 0166 21318A                    LXI H,MSGQLOPTR
 0169 7E                        MOV A,M
 016A 2B                        DCX H
 016B BE                        CMP M
 016C CA5F02                    JZ CLN00BFR     ; LO AND HI PTRS ARE
 016F                                           ; THE SAME - NO MSG
 016F                                           ; IN QUEUE
 016F 23                        INX H
 0170 4F                        MOV C,A         ; SAVE QUEUE PTR FOR
 0171                                           ; ADDRESS CALC
 0171 C602                      ADI 2           ; ADVANCE THE PTR
 0173 E61F                      ANI 01FH        ; 32 BYTES IN QUEUE
 0175 77                        MOV M,A
 0176 21608B                    LXI H,MSGQUE    ; CALC ADDRESS OF 
 0179                                           ; QUEUE SLOT
 0179 0600                      MVI B,0
 017B 09                        DAD B           ; QUEUE SLOT ADDRESS
 017C                                           ; IN HL
 017C 7E                        MOV A,M         ; GET CHANNEL NO.
 017D E5                        PUSH H          ; SAVE QUEUE SLOT  
 017E                                           ; ADDRESS
 017E 07                        RLC             ; CHAN * 2
 017F 4F                        MOV C,A
 0180 218A01                    LXI H,JP4TABLE
 0183 09                        DAD B
 0184 5E                        MOV E,M
 0185 23                        INX H
 0186 56                        MOV D,M
 0187 EB                        XCHG
 0188 D1                        POP D
 0189 E9                        PCHL
                ;
                ;


AVOCET SYSTEMS 8085/Z80 ASSEMBLER -  VERSION 1.05M  SERIAL #00411

SOURCE FILE NAME: EQUATES.ASM                                       PAGE 10
 CHECK FOR RS-232 MESSAGES TO BE SENT TO MASTER 

 018A 9201      JP4TABLE:       DW PROC0
 018C F301                      DW PROC1
 018E 1702                      DW PROC2
 0190 3B02                      DW PROC3
                ;
                ;
 0192 210081    PROC0:          LXI H,OUTBUFFER ; MESSAGE BUFFER TO 
 0195                                           ; MASTER CPU
 0195 3EFF                      MVI A,0FFH      ; SET HANDSHAKE FLAG
 0197 77                        MOV M,A
 0198 23                        INX H           ; SET CHANNEL NO.
 0199 1A                        LDAX D          ; GET NO.
 019A 77                        MOV M,A         ; PUT IN OUTBUFFER
 019B 13                        INX D           ; GET PTR TO START
 019C                                           ; OF MESSAGE IN RCV
 019C 1A                        LDAX D          ; GET PTR
 019D EB                        XCHG            ; SAVE OUT BUFFER  
 019E                                           ; + 1 ADDRESS
 019E 210086                    LXI H,RCV0BUFF  ; SET UP TO CALC 
 01A1                                           ; ADDRESS OF FIRST 
 01A1                                           ; BYTE OF MESSAGE
 01A1 4F                        MOV C,A
 01A2 0600                      MVI B,0
 01A4 09                        DAD B           ; ADDRESS IN HL
 01A5 13                        INX D           ; TO OUTBUFFER + 2
 01A6 46                        MOV B,M         ; GET MSG COUNT
 01A7 C5                        PUSH B          ; MAKE A COPY
 01A8                                           ; OF BC - B HAS 
 01A8                                           ; COUNT AND C HAS
 01A8                                           ; STRT MSG POINTER
 01A8 7E        PROC0LOOP:      MOV A,M         ; TRANSFER MESSAGE
 01A9                                           ; TO OUTBUFFER
 01A9 12                        STAX D
 01AA 2C                        INR L
 01AB 13                        INX D
 01AC 05                        DCR B
 01AD C2A801                    JNZ PROC0LOOP
 01B0 21C18A                    LXI H,RCV0FLGS + 1 ; ADDRESS OF LO RCV
 01B3                                           ; BUFFER POINTER
 01B3 C3B601                    JMP OUTCRC
                
                
                
 01B6 C1        OUTCRC:         POP B           ; GET CNT AND STRT
 01B7                                           ; MSG PTR BACK
 01B7 78                        MOV A,B         ; COUNT IN A
 01B8 81                        ADD C           ; ADD TO PTR
 01B9 77                        MOV M,A         ; SAVE NEW LOPOINTER
 01BA 11338A                    LXI D,OUTCRCLO  ; CLEAR TEMP CRC
 01BD AF                        XRA A           ; AND SET UP FOR
 01BE 12                        STAX D          ; CRC CALC


AVOCET SYSTEMS 8085/Z80 ASSEMBLER -  VERSION 1.05M  SERIAL #00411

SOURCE FILE NAME: EQUATES.ASM                                       PAGE 11
 CHECK FOR RS-232 MESSAGES TO BE SENT TO MASTER 

 01BF 1B                        DCX D
 01C0 12                        STAX D
 01C1 210181                    LXI H,OUTBUFFER + 1
 01C4 78                        MOV A,B         ; CNT IN A
 01C5 0600                      MVI B,0
 01C7 F5        OUT1CRCLOOP:    PUSH PSW        ; SAVE COUNTER
 01C8 23                        INX H           ; INDEX TO NEXT CHARACTER
 01C9                                           ; IN THE BUFFER
 01C9 7E                        MOV A,M         ; GET THE CHARACTER
 01CA E5                        PUSH H          ; SAVE THE CHARACTER POINTER
 01CB EB                        XCHG            ; PTR TO HI CRC BYTE
 01CC                                           ; IN HL
 01CC AE                        XRA M           ; MAKE INDEX
 01CD 4F                        MOV C,A         ; BC = 0,INDEX
 01CE EB                        XCHG            ; SAVE HI CRC BYTE PTR
 01CF 212905                    LXI H,CRCTABLE  ; MAKE ADDRESS OF CRC
 01D2 09                        DAD B           ; TABLE(INDEX*2)
 01D3 09                        DAD B
 01D4 7E                        MOV A,M         ; GET LOOKUP HI
 01D5 EB                        XCHG            ; HI CRC BYTE PTR IN HL
 01D6 23                        INX H           ; NOW LO CRC BYTE PTR
 01D7 AE                        XRA M           ; MAKE NEW HI CRC BYTE
 01D8 2B                        DCX H           ; SAVE HI CRC BYTE
 01D9 77                        MOV M,A
 01DA 13                        INX D           ; GET NEW LO CRC BYTE
 01DB 1A                        LDAX D
 01DC 23                        INX H           ; SAVE LO CRC BYTE
 01DD 77                        MOV M,A
 01DE 2B                        DCX H           ; BACK TO HI PTR
 01DF EB                        XCHG            ; SAVE HI PTR
 01E0 E1                        POP H           ; GET CHARACTER PTR
 01E1 F1                        POP PSW         ; GET COUNTER
 01E2 3D                        DCR A           ; SEE IF DONE
 01E3 C2C701                    JNZ OUT1CRCLOOP ; IF NOT DONE GO AGAIN
                
 01E6 2B                        DCX H           ; PUT NEW CRC IN
 01E7                                           ; OUT BUFFER CRC
 01E7 1A                        LDAX D
 01E8 77                        MOV M,A
 01E9 23                        INX H
 01EA 13                        INX D
 01EB 1A                        LDAX D
 01EC 77                        MOV M,A
 01ED                   ;
 01ED                   ; ALL SET UP - NOW INTERRUPT THE MASTER CPU
 01ED                   ;
 01ED 3EC0                      MVI A,STROBEHI
 01EF 30                        SIM
 01F0 C35F02                    JMP CLN00BFR
                
 01F3             ; MAIN:               NOP


AVOCET SYSTEMS 8085/Z80 ASSEMBLER -  VERSION 1.05M  SERIAL #00411

SOURCE FILE NAME: EQUATES.ASM                                       PAGE 12
 CHECK FOR RS-232 MESSAGES TO BE SENT TO MASTER 

 01F3            ;
                ;
 01F3 210081    PROC1:          LXI H,OUTBUFFER ; MESSAGE BUFFER TO 
 01F6                                           ; MASTER CPU
 01F6 3EFF                      MVI A,0FFH      ; SET HANDSHAKE FLAG
 01F8 77                        MOV M,A
 01F9 23                        INX H           ; SET CHANNEL NO.
 01FA 1A                        LDAX D          ; GET NO.
 01FB 77                        MOV M,A         ; PUT IN OUTBUFFER
 01FC 13                        INX D           ; GET PTR TO START
 01FD                                           ; OF MESSAGE IN RCV
 01FD 1A                        LDAX D          ; GET PTR
 01FE EB                        XCHG            ; SAVE OUT BUFFER  
 01FF                                           ; + 1 ADDRESS
 01FF 210087                    LXI H,RCV1BUFF  ; SET UP TO CALC 
 0202                                           ; ADDRESS OF FIRST 
 0202                                           ; BYTE OF MESSAGE
 0202 4F                        MOV C,A
 0203 0600                      MVI B,0
 0205 09                        DAD B           ; ADDRESS IN HL
 0206 13                        INX D           ; TO OUTBUFFER + 2
 0207 46                        MOV B,M         ; GET MSG COUNT
 0208 C5                        PUSH B          ; MAKE A COPY
 0209                                           ; OF BC - B HAS 
 0209                                           ; COUNT AND C HAS
 0209                                           ; STRT MSG POINTER
 0209 7E        PROC1LOOP:      MOV A,M         ; TRANSFER MESSAGE
 020A                                           ; TO OUTBUFFER
 020A 12                        STAX D
 020B 2C                        INR L
 020C 13                        INX D
 020D 05                        DCR B
 020E C20902                    JNZ PROC1LOOP
 0211 21E18A                    LXI H,RCV1FLGS + 1 ; ADDRESS OF LO RCV
 0214                                           ; BUFFER POINTER
 0214 C3B601                    JMP OUTCRC
                
                
 0217            ;
                ;
 0217 210081    PROC2:          LXI H,OUTBUFFER ; MESSAGE BUFFER TO 
 021A                                           ; MASTER CPU
 021A 3EFF                      MVI A,0FFH      ; SET HANDSHAKE FLAG
 021C 77                        MOV M,A
 021D 23                        INX H           ; SET CHANNEL NO.
 021E 1A                        LDAX D          ; GET NO.
 021F 77                        MOV M,A         ; PUT IN OUTBUFFER
 0220 13                        INX D           ; GET PTR TO START
 0221                                           ; OF MESSAGE IN RCV
 0221 1A                        LDAX D          ; GET PTR
 0222 EB                        XCHG            ; SAVE OUT BUFFER  


AVOCET SYSTEMS 8085/Z80 ASSEMBLER -  VERSION 1.05M  SERIAL #00411

SOURCE FILE NAME: EQUATES.ASM                                       PAGE 13
 CHECK FOR RS-232 MESSAGES TO BE SENT TO MASTER 

 0223                                           ; + 1 ADDRESS
 0223 210088                    LXI H,RCV2BUFF  ; SET UP TO CALC 
 0226                                           ; ADDRESS OF FIRST 
 0226                                           ; BYTE OF MESSAGE
 0226 4F                        MOV C,A
 0227 0600                      MVI B,0
 0229 09                        DAD B           ; ADDRESS IN HL
 022A 13                        INX D           ; TO OUTBUFFER + 2
 022B 46                        MOV B,M         ; GET MSG COUNT
 022C C5                        PUSH B          ; MAKE A COPY
 022D                                           ; OF BC - B HAS 
 022D                                           ; COUNT AND C HAS
 022D                                           ; STRT MSG POINTER
 022D 7E        PROC2LOOP:      MOV A,M         ; TRANSFER MESSAGE
 022E                                           ; TO OUTBUFFER
 022E 12                        STAX D
 022F 2C                        INR L
 0230 13                        INX D
 0231 05                        DCR B
 0232 C22D02                    JNZ PROC2LOOP
 0235 21018B                    LXI H,RCV2FLGS + 1 ; ADDRESS OF LO RCV
 0238                                           ; BUFFER POINTER
 0238 C3B601                    JMP OUTCRC
 023B            ;
 023B            ;
                ;
 023B 210081    PROC3:          LXI H,OUTBUFFER ; MESSAGE BUFFER TO 
 023E                                           ; MASTER CPU
 023E 3EFF                      MVI A,0FFH      ; SET HANDSHAKE FLAG
 0240 77                        MOV M,A
 0241 23                        INX H           ; SET CHANNEL NO.
 0242 1A                        LDAX D          ; GET NO.
 0243 77                        MOV M,A         ; PUT IN OUTBUFFER
 0244 13                        INX D           ; GET PTR TO START
 0245                                           ; OF MESSAGE IN RCV
 0245 1A                        LDAX D          ; GET PTR
 0246 EB                        XCHG            ; SAVE OUT BUFFER  
 0247                                           ; + 1 ADDRESS
 0247 210089                    LXI H,RCV3BUFF  ; SET UP TO CALC 
 024A                                           ; ADDRESS OF FIRST 
 024A                                           ; BYTE OF MESSAGE
 024A 4F                        MOV C,A
 024B 0600                      MVI B,0
 024D 09                        DAD B           ; ADDRESS IN HL
 024E 13                        INX D           ; TO OUTBUFFER + 2
 024F 46                        MOV B,M         ; GET MSG COUNT
 0250 C5                        PUSH B          ; MAKE A COPY
 0251                                           ; OF BC - B HAS 
 0251                                           ; COUNT AND C HAS
 0251                                           ; STRT MSG POINTER
 0251 7E        PROC3LOOP:      MOV A,M         ; TRANSFER MESSAGE


AVOCET SYSTEMS 8085/Z80 ASSEMBLER -  VERSION 1.05M  SERIAL #00411

SOURCE FILE NAME: EQUATES.ASM                                       PAGE 14
 CHECK FOR RS-232 MESSAGES TO BE SENT TO MASTER 

 0252                                           ; TO OUTBUFFER
 0252 12                        STAX D
 0253 2C                        INR L
 0254 13                        INX D
 0255 05                        DCR B
 0256 C25102                    JNZ PROC3LOOP
 0259 21218B                    LXI H,RCV3FLGS + 1 ; ADDRESS OF LO RCV
 025C                                           ; BUFFER POINTER
 025C C3B601                    JMP OUTCRC


AVOCET SYSTEMS 8085/Z80 ASSEMBLER -  VERSION 1.05M  SERIAL #00411

SOURCE FILE NAME: EQUATES.ASM                                       PAGE 15
 ROUTINE TO KEEP THE RCV BUFFERS FROM FILLING WITH JUNK 

                                INCLUDE CLNBFR.ASM
                
                
                
 025F            ; THESE ROUTINES WILL KEEP THE RECIEVE BUFFERS FROM FILLING
 025F            ; UP WITH GARBAGE CHARACTERS TO THE POINT THAT COMMO WIL
 025F            ; BE LOCKED.
                
 025F 21318A    CLN00BFR:       LXI H,MSGQHIPTR + 1
 0262 4E                        MOV C,M         ; GET LO PTR
 0263 2B                        DCX H
 0264 7E                        MOV A,M         ; GET HI PTR
 0265 B9                        CMP C           ; SEE IF LO PTR =
 0266                                           ; HI PTR   
 0266 F3                        DI              ; DON'T LET INTERRUPT
 0267                                           ; CHANGE STRMSG
 0267 CA8602                    JZ  CLN03BFR    ; Q MT - SET LO PTR
 026A                                           ; = STRTMSG
 026A 47                        MOV B,A         ; HI PTR IN B, LO 
 026B                                           ; PTR IN C 
 026B 1600                      MVI D,0         ; CLR D
 026D 21608B    CLN01BFR:       LXI H,MSGQUE    ; SET UP FOR CH 0 MSG
 0270 59                        MOV E,C         ; LO PTR IN E, 0 IN D
 0271 19                        DAD D           ; ADDRESS OF QUE CH #
 0272 7E                        MOV A,M         ; GET CH #
 0273 FE00                      CPI 0           ; SEE IF THIS CH
 0275 CA8C02                    JZ CLN02BFR     ; IS THIS CH, DON'T
 0278                                           ; PLAY WITH PTRS
 0278 79                        MOV A,C         ; LO PTR IN A
 0279 B8                        CMP B           ; SEE IF HI     
 027A CA8602                    JZ CLN03BFR     ; DONE - CH NOT FOUND
 027D                                           ; SO SET PTRS
 027D 0C                        INR C           ; TRY NEXT
 027E 0C                        INR C
 027F 79                        MOV A,C 
 0280 E61F                      ANI 01FH
 0282 4F                        MOV C,A
 0283 C36D02                    JMP CLN01BFR    ; TRY NEXT
                
 0286 3AC58A    CLN03BFR:       LDA RCV0FLGS + 5 ; RESET LO PTR
 0289 32C18A                    STA RCV0FLGS + 1 ; = STRTMSG
 028C FB        CLN02BFR:       EI              ; LET PENDING INTS
 028D 00                        NOP             ; BE SERVICED 
                ;
                ;
                
 028E 21318A    CLN10BFR:       LXI H,MSGQHIPTR + 1
 0291 4E                        MOV C,M         ; GET LO PTR
 0292 2B                        DCX H
 0293 7E                        MOV A,M         ; GET HI PTR
 0294 B9                        CMP C           ; SEE IF LO PTR =


AVOCET SYSTEMS 8085/Z80 ASSEMBLER -  VERSION 1.05M  SERIAL #00411

SOURCE FILE NAME: EQUATES.ASM                                       PAGE 16
 ROUTINE TO KEEP THE RCV BUFFERS FROM FILLING WITH JUNK 

 0295                                           ; HI PTR    
 0295 F3                        DI              ; DON'T LET INTERRUPT
 0296                                           ; CHANGE STRMSG
 0296 CAB502                    JZ  CLN13BFR    ; Q MT - SET LO PTR
 0299                                           ; = STRTMSG
 0299 47                        MOV B,A         ; HI PTR IN B, LO 
 029A                                           ; PTR IN C 
 029A 1600                      MVI D,0         ; CLR D
 029C 21608B    CLN11BFR:       LXI H,MSGQUE    ; SET UP FOR CH 1 MSG
 029F 59                        MOV E,C         ; LO PTR IN E, 0 IN D
 02A0 19                        DAD D           ; ADDRESS OF QUE CH #
 02A1 7E                        MOV A,M         ; GET CH #
 02A2 FE01                      CPI 1           ; SEE IF THIS CH
 02A4 CABB02                    JZ CLN12BFR     ; IS THIS CH, DON'T
 02A7                                           ; PLAY WITH PTRS
 02A7 79                        MOV A,C         ; LO PTR IN A
 02A8 B8                        CMP B           ; SEE IF HI 
 02A9 CAB502                    JZ CLN13BFR     ; DONE - CH NOT FOUND
 02AC                                           ; SO SET PTRS
 02AC 0C                        INR C           ; TRY NEXT
 02AD 0C                        INR C
 02AE 79                        MOV A,C 
 02AF E61F                      ANI 01FH
 02B1 4F                        MOV C,A
 02B2 C39C02                    JMP CLN11BFR    ; TRY NEXT
                
 02B5 3AE58A    CLN13BFR:       LDA RCV1FLGS + 5 ; RESET LO PTR
 02B8 32E18A                    STA RCV1FLGS + 1 ; = STRTMSG
 02BB FB        CLN12BFR:       EI              ; LET PENDING INTS
 02BC 00                        NOP             ; BE SERVICED 
                ;
                ;
                
 02BD 21318A    CLN20BFR:       LXI H,MSGQHIPTR + 1
 02C0 4E                        MOV C,M         ; GET LO PTR
 02C1 2B                        DCX H
 02C2 7E                        MOV A,M         ; GET HI PTR
 02C3 B9                        CMP C           ; SEE IF LO PTR =
 02C4                                           ; HI PTR 
 02C4 F3                        DI              ; DON'T LET INTERRUPT
 02C5                                           ; CHANGE STRMSG
 02C5 CAE402                    JZ  CLN23BFR    ; Q MT - SET LO PTR
 02C8                                           ; = STRTMSG
 02C8 47                        MOV B,A         ; HI PTR IN B, LO 
 02C9                                           ; PTR IN C 
 02C9 1600                      MVI D,0         ; CLR D
 02CB 21608B    CLN21BFR:       LXI H,MSGQUE    ; SET UP FOR CH 2 MSG
 02CE 59                        MOV E,C         ; LO PTR IN E, 0 IN D
 02CF 19                        DAD D           ; ADDRESS OF QUE CH #
 02D0 7E                        MOV A,M         ; GET CH #
 02D1 FE02                      CPI 2           ; SEE IF THIS CH


AVOCET SYSTEMS 8085/Z80 ASSEMBLER -  VERSION 1.05M  SERIAL #00411

SOURCE FILE NAME: EQUATES.ASM                                       PAGE 17
 ROUTINE TO KEEP THE RCV BUFFERS FROM FILLING WITH JUNK 

 02D3 CAEA02                    JZ CLN22BFR     ; IS THIS CH, DON'T
 02D6                                           ; PLAY WITH PTRS
 02D6 79                        MOV A,C         ; LO PTR IN A
 02D7 B8                        CMP B           ; SEE IF HI 
 02D8 CAE402                    JZ CLN23BFR     ; DONE - CH NOT FOUND
 02DB                                           ; SO SET PTRS
 02DB 0C                        INR C           ; TRY NEXT
 02DC 0C                        INR C
 02DD 79                        MOV A,C 
 02DE E61F                      ANI 01FH
 02E0 4F                        MOV C,A
 02E1 C3CB02                    JMP CLN21BFR    ; TRY NEXT
                
 02E4 3A058B    CLN23BFR:       LDA RCV2FLGS + 5 ; RESET LO PTR
 02E7 32018B                    STA RCV2FLGS + 1 ; = STRTMSG
 02EA FB        CLN22BFR:       EI              ; LET PENDING INTS
 02EB 00                        NOP             ; BE SERVICED 
                ;
                ;
                
 02EC 21318A    CLN30BFR:       LXI H,MSGQHIPTR + 1
 02EF 4E                        MOV C,M         ; GET LO PTR
 02F0 2B                        DCX H
 02F1 7E                        MOV A,M         ; GET HI PTR
 02F2 B9                        CMP C           ; SEE IF LO PTR =
 02F3                                           ; HI PTR 
 02F3 F3                        DI              ; DON'T LET INTERRUPT
 02F4                                           ; CHANGE STRMSG
 02F4 CA1303                    JZ  CLN33BFR    ; Q MT - SET LO PTR
 02F7                                           ; = STRTMSG
 02F7 47                        MOV B,A         ; HI PTR IN B, LO 
 02F8                                           ; PTR IN C 
 02F8 1600                      MVI D,0         ; CLR D
 02FA 21608B    CLN31BFR:       LXI H,MSGQUE    ; SET UP FOR CH 3 MSG
 02FD 59                        MOV E,C         ; LO PTR IN E, 0 IN D
 02FE 19                        DAD D           ; ADDRESS OF QUE CH #
 02FF 7E                        MOV A,M         ; GET CH #
 0300 FE03                      CPI 3           ; SEE IF THIS CH
 0302 CA1903                    JZ CLN32BFR     ; IS THIS CH, DON'T
 0305                                           ; PLAY WITH PTRS
 0305 79                        MOV A,C         ; LO PTR IN A
 0306 B8                        CMP B           ; SEE IF HI 
 0307 CA1303                    JZ CLN33BFR     ; DONE - CH NOT FOUND
 030A                                           ; SO SET PTRS
 030A 0C                        INR C           ; TRY NEXT
 030B 0C                        INR C
 030C 79                        MOV A,C 
 030D E61F                      ANI 01FH
 030F 4F                        MOV C,A
 0310 C3FA02                    JMP CLN31BFR    ; TRY NEXT
                


AVOCET SYSTEMS 8085/Z80 ASSEMBLER -  VERSION 1.05M  SERIAL #00411

SOURCE FILE NAME: EQUATES.ASM                                       PAGE 18
 ROUTINE TO KEEP THE RCV BUFFERS FROM FILLING WITH JUNK 

 0313 3A258B    CLN33BFR:       LDA RCV3FLGS + 5 ; RESET LO PTR
 0316 32218B                    STA RCV3FLGS + 1 ; = STRTMSG
 0319 FB        CLN32BFR:       EI              ; LET PENDING INTS
 031A 00                        NOP             ; BE SERVICED 
 031B C30001                    JMP MAIN
                ;


AVOCET SYSTEMS 8085/Z80 ASSEMBLER -  VERSION 1.05M  SERIAL #00411

SOURCE FILE NAME: EQUATES.ASM                                       PAGE 19
 FLAG INTERRUPT MAIN ROUTINE 

                                INCLUDE FLAGINT.ASM
                
                
                
                
 031E            ; THIS SECTION OF CODE DISTRIBUTES THE FLAG INTERRUPTS
 031E            ; ACCORDING TO THE COMMAND SENT BY THE MASTER CPU.
 031E            ; IT ALSO PUTS ACKNOWLEGE OR NEGATIVE ACKNOWLEGE
 031E            ; INFORMATION IN THE ACK/NAK QUEUE TO BE SENT TO THE
 031E            ; MASTER CPU.
                
                
 031E F5        FLAGINT:        PUSH PSW        ; SAVE ALL
 031F C5                        PUSH B
 0320 D5                        PUSH D
 0321 E5                        PUSH H
 0322 210080                    LXI H,BASEADD   ; RESET FLAG INTERRUPT
 0325                                           ; BEFORE ENABLING INTS
 0325 7E                        MOV A,M
 0326 FB                        EI              ; LET COMMO INTERRUPTS
 0327                                           ; STILL RUN
 0327 23                        INX H           ; CMD BYTE ADDRESS
 0328 7E                        MOV A,M         ; GET COMMAND
 0329 FE03                      CPI 3           ; SEE IF VALID COMMAND
 032B F24303                    JP  NACK        ; INVALID COMMAND, SEND
 032E                                           ; NEGATORY, OLD BUDDY.
 032E E5                        PUSH H          ; SAVE CMD BYTE ADDRESS
 032F 213D03                    LXI H,JPTABLE   ; SET UP INDEX TO CMD
 0332                                           ; HANDLERS.
 0332 07                        RLC             ; COMMAND * 2
 0333 4F                        MOV C,A
 0334 0600                      MVI B,0
 0336 09                        DAD B           ; JMP TABLE ADDRESS IN
 0337                                           ; HL
 0337 5E                        MOV E,M
 0338 23                        INX H
 0339 56                        MOV D,M
 033A EB                        XCHG
 033B D1                        POP D
 033C E9                        PCHL            ; GO TO HANDLER
 033D            ;
 033D            ;
 033D            ;
 033D 7E03      JPTABLE:        DW NOP          ; COMMAND HANDLER
 033F 8603                      DW INITCH       ; ADDRESSES
 0341 6104                      DW SNDMSG
 0343            ;
 0343            ;
 0343 3EFF      NACK:           MVI A,0FFH      ; SET ACK/NACK FLAG
 0345                                           ; TO NACK
 0345 32228A                    STA ACKNAKFLG


AVOCET SYSTEMS 8085/Z80 ASSEMBLER -  VERSION 1.05M  SERIAL #00411

SOURCE FILE NAME: EQUATES.ASM                                       PAGE 20
 FLAG INTERRUPT MAIN ROUTINE 

 0348 C34F03                    JMP FLGRET
 034B AF        ACK:            XRA A           ; CLEAR ACK/NACK FLAG
 034C                                           ; TO ACK
 034C 32228A                    STA ACKNAKFLG
 034F 21218A    FLGRET:         LXI H,ACKNAKHIPTR
 0352                                           ; GET THE HI QUEUE PTR
 0352 F3                        DI              ; A LAST CHARACTER 
 0353                                           ; INTERRUPT COULD MESS
 0353                                           ; UP POINTERS
 0353 7E                        MOV A,M
 0354 4F                        MOV C,A         ; SAVE THE PRESENT PTR
 0355 C604                      ADI 4           ; INDEX TO NEXT SLOT
 0357 E61F                      ANI 01FH        ; ONLY 8 SLOTS OF 4
 0359                                           ; BYTES
 0359 2B                        DCX H           ; NOW LO PTR
 035A BE                        CMP M           ; HI PTR + 4 = LOPTR
 035B                                           ; MEANS QUEUE
 035B                                           ; IS FULL - SOMETHING IS
 035B                                           ; REALLY SCREWED UP
 035B CA8103                    JZ FATALFAULT
 035E 23                        INX H           ; BACK TO HI POINTER
 035F 77                        MOV M,A         ; SAVE NEW HI PTR
 0360 FB                        EI              ; DONE WITH POINTERS
                
 0361 21408B                    LXI H,ACKNAKQUEUE
 0364                                           ; ADDRESS OF ACK/NACK
 0364                                           ; MSG QUEUE IN H
 0364 0600                      MVI B,0         ; SETUP QUEUE ADDRESS
 0366 09                        DAD B
 0367 110180                    LXI D,BASEADD + 1
 036A                                           ; COMMAND BYTE ADDRESS
 036A 1A                        LDAX D          ; GET COMMAND BYTE
 036B 77                        MOV M,A         ; COMMAND IN QUEUE
 036C 23                        INX H           ; CHANNEL NO. IN QUEUE
 036D 13                        INX D
 036E 1A                        LDAX D 
 036F 77                        MOV M,A
 0370 23                        INX H           ; SET UP FOR ACK/NAK
 0371                                           ; FLAG INTO QUEUE
 0371 3A228A                    LDA ACKNAKFLG
 0374 77                        MOV M,A
 0375 AF                        XRA A           ; TELL MAIN CPU WE'RE
 0376 320080                    STA BASEADD     ; READY FOR ANOTHER
 0379                                           ; FLAG INTERRUPT.
 0379 E1                        POP H
 037A D1                        POP D
 037B C1                        POP B
 037C F1                        POP PSW
 037D C9                        RET
                
                


AVOCET SYSTEMS 8085/Z80 ASSEMBLER -  VERSION 1.05M  SERIAL #00411

SOURCE FILE NAME: EQUATES.ASM                                       PAGE 21
 FLAG INTERRUPT MAIN ROUTINE 

 037E C34B03    NOP:            JMP ACK         ; DO NOTHING
 0381 00        FATALFAULT:     NOP
 0382 00                        NOP
 0383 00                        NOP
 0384 00                        NOP
 0385 76                        HLT


AVOCET SYSTEMS 8085/Z80 ASSEMBLER -  VERSION 1.05M  SERIAL #00411

SOURCE FILE NAME: EQUATES.ASM                                       PAGE 22
 ROUTINES TO INITIALIZE THE RS-232 PORTS 

                                INCLUDE INITCH.ASM
                
                
 0386            ; THIS FILE CONTAINS THE COM CHANNEL INITIALIZATION
 0386            ; ROUTINES.
                
                
 0386 EB        INITCH:         XCHG            ; COMMAND BYTE ADDRESS
 0387                                           ; IN HL
 0387 23                        INX H           ; NOW CHANNEL NO. BYTE
 0388                                           ; ADDRESS IN HL
 0388 7E                        MOV A,M         ; GET CHANNEL NO.
 0389 FE03                      CPI 3           ; SEE IF VALID CHANNEL
 038B F24303                    JP NACK         ; INVALID CHANNEL -
 038E                                           ; CAN'T SEND.
 038E E5                        PUSH H
 038F 219D03                    LXI H,JP2TABLE  ; SET UP FOR ROUTINE
 0392                                           ; LOOKUP JUMP
 0392 07                        RLC             ; CHAN # * 2
 0393 4F                        MOV C,A         ; 
 0394 0600                      MVI B,0         ; CLEAR HI
 0396 09                        DAD B           ; JMP TABLE + INDEX
 0397 5E                        MOV E,M
 0398 23                        INX H
 0399 56                        MOV D,M
 039A EB                        XCHG
 039B D1                        POP D
 039C E9                        PCHL            ; GO TO RIGHT CHANNEL
                
                
 039D A503      JP2TABLE        DW CH0INIT      ; INITIALIZATION
 039F D403                      DW CH1INIT      ; ROUTINE ADDRESSES.
 03A1 0304                      DW CH2INIT
 03A3 3204                      DW CH3INIT
                
                
 03A5 EB        CH0INIT:        XCHG            ; CH # BYTE ADDRESS
 03A6 23                        INX H           ; NOW PIT FIRST 
 03A7 F3                        DI              ; COUNT BYTE ADDRESS.
 03A8 3E36                      MVI A,MODE0BYTE ; SETUP BAUD RATE
 03AA D3DB                      OUT CH0PIT      ; 
 03AC 7E                        MOV A,M         ; GET FIRST PIT CNT
 03AD                                           ; BYTE
 03AD D3D8                      OUT CNT0        ; PUT IN PIT 
 03AF 23                        INX H           ; PIT SECOND CNT BYTE
 03B0 7E                        MOV A,M
 03B1 D3D8                      OUT CNT0        ; PUT IN PIT 
 03B3 AF                        XRA A           ; CLEAR A
 03B4 D3D1                      OUT STAT0ADD    ; MAKE SURE UART IN
 03B6 D3D1                      OUT STAT0ADD    ; COMMAND MODE.
 03B8 D3D1                      OUT STAT0ADD


AVOCET SYSTEMS 8085/Z80 ASSEMBLER -  VERSION 1.05M  SERIAL #00411

SOURCE FILE NAME: EQUATES.ASM                                       PAGE 23
 ROUTINES TO INITIALIZE THE RS-232 PORTS 

 03BA D3D1                      OUT STAT0ADD
 03BC 3E40                      MVI A,RESETBYTE ; SET TO CMD MODE
 03BE D3D1                      OUT STAT0ADD
 03C0 23                        INX H           ; MODE BYTE ADDRESS
 03C1 7E                        MOV A,M         ; GET MODE BYTE
 03C2 D3D1                      OUT STAT0ADD    ; GIVE COMMAND TO
 03C4                                           ; UART
 03C4 23                        INX H           ; COMMAND
 03C5 7E                        MOV A,M
 03C6 D3D1                      OUT STAT0ADD
 03C8 DBE7                      IN PICMASK      ; ENABLE PIC MASK
 03CA E6FD                      ANI CH0SNDEN    
 03CC E6FE                      ANI CH0RCVEN
 03CE D3E7                      OUT PICMASK
 03D0 FB                        EI
 03D1 C34B03                    JMP ACK         ; ALL DONE
                
                
 03D4            ; CH1INIT:     NOP
 03D4            ; CH2INIT:     NOP
 03D4            ; CH3INIT:     NOP
 03D4            ;
 03D4            ;
                
 03D4 EB        CH1INIT:        XCHG            ; CH # BYTE ADDRESS
 03D5 23                        INX H           ; NOW PIT FIRST 
 03D6 F3                        DI              ; COUNT BYTE ADDRESS.
 03D7 3E76                      MVI A,MODE1BYTE ; SETUP BAUD RATE
 03D9 D3DB                      OUT CH1PIT      ; 
 03DB 7E                        MOV A,M         ; GET FIRST PIT CNT
 03DC                                           ; BYTE
 03DC D3D9                      OUT CNT1        ; PUT IN PIT 
 03DE 23                        INX H           ; PIT SECOND CNT BYTE
 03DF 7E                        MOV A,M
 03E0 D3D9                      OUT CNT1        ; PUT IN PIT 
 03E2 AF                        XRA A           ; CLEAR A
 03E3 D3D3                      OUT STAT1ADD    ; MAKE SURE UART IN
 03E5 D3D3                      OUT STAT1ADD    ; COMMAND MODE.
 03E7 D3D3                      OUT STAT1ADD
 03E9 D3D3                      OUT STAT1ADD
 03EB 3E40                      MVI A,RESETBYTE ; SET TO CMD MODE
 03ED D3D3                      OUT STAT1ADD
 03EF 23                        INX H           ; MODE BYTE ADDRESS
 03F0 7E                        MOV A,M         ; GET MODE BYTE
 03F1 D3D3                      OUT STAT1ADD    ; GIVE COMMAND TO
 03F3                                           ; UART
 03F3 23                        INX H           ; COMMAND
 03F4 7E                        MOV A,M
 03F5 D3D3                      OUT STAT1ADD
 03F7 DBE7                      IN PICMASK      ; ENABLE PIC MASK
 03F9 E6F7                      ANI CH1SNDEN    


AVOCET SYSTEMS 8085/Z80 ASSEMBLER -  VERSION 1.05M  SERIAL #00411

SOURCE FILE NAME: EQUATES.ASM                                       PAGE 24
 ROUTINES TO INITIALIZE THE RS-232 PORTS 

 03FB E6FB                      ANI CH1RCVEN
 03FD D3E7                      OUT PICMASK
 03FF FB                        EI
 0400 C34B03                    JMP ACK         ; ALL DONE
                
 0403            ;
 0403            ;
                
 0403 EB        CH2INIT:        XCHG            ; CH # BYTE ADDRESS
 0404 23                        INX H           ; NOW PIT FIRST 
 0405 F3                        DI              ; COUNT BYTE ADDRESS.
 0406 3EB6                      MVI A,MODE2BYTE ; SETUP BAUD RATE
 0408 D3DB                      OUT CH2PIT      ; 
 040A 7E                        MOV A,M         ; GET FIRST PIT CNT
 040B                                           ; BYTE
 040B D3DA                      OUT CNT2        ; PUT IN PIT 
 040D 23                        INX H           ; PIT SECOND CNT BYTE
 040E 7E                        MOV A,M
 040F D3DA                      OUT CNT2        ; PUT IN PIT 
 0411 AF                        XRA A           ; CLEAR A
 0412 D3D5                      OUT STAT2ADD    ; MAKE SURE UART IN
 0414 D3D5                      OUT STAT2ADD    ; COMMAND MODE.
 0416 D3D5                      OUT STAT2ADD
 0418 D3D5                      OUT STAT2ADD
 041A 3E40                      MVI A,RESETBYTE ; SET TO CMD MODE
 041C D3D5                      OUT STAT2ADD
 041E 23                        INX H           ; MODE BYTE ADDRESS
 041F 7E                        MOV A,M         ; GET MODE BYTE
 0420 D3D5                      OUT STAT2ADD    ; GIVE COMMAND TO
 0422                                           ; UART
 0422 23                        INX H           ; COMMAND
 0423 7E                        MOV A,M
 0424 D3D5                      OUT STAT2ADD
 0426 DBE7                      IN PICMASK      ; ENABLE PIC MASK
 0428 E6DF                      ANI CH2SNDEN    
 042A E6EF                      ANI CH2RCVEN
 042C D3E7                      OUT PICMASK
 042E FB                        EI
 042F C34B03                    JMP ACK         ; ALL DONE
                
 0432            ;
 0432            ;
                
 0432 EB        CH3INIT:        XCHG            ; CH # BYTE ADDRESS
 0433 23                        INX H           ; NOW PIT FIRST 
 0434 F3                        DI              ; COUNT BYTE ADDRESS.
 0435 3E36                      MVI A,MODE3BYTE ; SETUP BAUD RATE
 0437 D3DF                      OUT CH3PIT      ; 
 0439 7E                        MOV A,M         ; GET FIRST PIT CNT
 043A                                           ; BYTE
 043A D3DC                      OUT CNT3        ; PUT IN PIT 


AVOCET SYSTEMS 8085/Z80 ASSEMBLER -  VERSION 1.05M  SERIAL #00411

SOURCE FILE NAME: EQUATES.ASM                                       PAGE 25
 ROUTINES TO INITIALIZE THE RS-232 PORTS 

 043C 23                        INX H           ; PIT SECOND CNT BYTE
 043D 7E                        MOV A,M
 043E D3DC                      OUT CNT3        ; PUT IN PIT 
 0440 AF                        XRA A           ; CLEAR A
 0441 D3D7                      OUT STAT3ADD    ; MAKE SURE UART IN
 0443 D3D7                      OUT STAT3ADD    ; COMMAND MODE.
 0445 D3D7                      OUT STAT3ADD
 0447 D3D7                      OUT STAT3ADD
 0449 3E40                      MVI A,RESETBYTE ; SET TO CMD MODE
 044B D3D7                      OUT STAT3ADD
 044D 23                        INX H           ; MODE BYTE ADDRESS
 044E 7E                        MOV A,M         ; GET MODE BYTE
 044F D3D7                      OUT STAT3ADD    ; GIVE COMMAND TO
 0451                                           ; UART
 0451 23                        INX H           ; COMMAND
 0452 7E                        MOV A,M
 0453 D3D7                      OUT STAT3ADD
 0455 DBE7                      IN PICMASK      ; ENABLE PIC MASK
 0457 E67F                      ANI CH3SNDEN    
 0459 E6BF                      ANI CH3RCVEN
 045B D3E7                      OUT PICMASK
 045D FB                        EI
 045E C34B03                    JMP ACK         ; ALL DONE
                


AVOCET SYSTEMS 8085/Z80 ASSEMBLER -  VERSION 1.05M  SERIAL #00411

SOURCE FILE NAME: EQUATES.ASM                                       PAGE 26
 ROUTINES TO START SENDING UPON COMMAND OF MASTER 

                                INCLUDE SNDMSG.ASM
                
                
 0461            ; THIS SUBROUTINE CALCULATES THE CRC FOR A MESSAGE
 0461            ; TO BE SENT TO ANOTHER CPU, SETS UP FOR THE TRANSMIT
 0461            ; CHANNEL INTERRUPT ROUTINE, AND STARTS THE TRANSMISSION
 0461            ; BY SENDING THE FIRST CHARACTER.
 0461            ;
 0461            ;
 0461            ; ENTER THIS ROUTINE WITH DE HOLDING A POINTER TOWARD
 0461            ; THE COMMAND BYTE OF THE BOARD INTERRUPT BUFFER.
 0461            ;
 0461            ;
 0461 EB        SNDMSG:         XCHG            ; CMD BYTE POINTER
 0462                                           ; INTO HL
 0462 23                        INX H           ; NOW POINT TOWARD
 0463                                           ; CHANNEL NUMBER
 0463 7E                        MOV A,M         ; GET CHANNEL
 0464 FE04                      CPI 4           ; SEE IF VALID CHANNEL
 0466 F24303                    JP NACK         ; SEND NACK IF NOT
 0469 217604                    LXI H,JP3TABLE  ; SET UP FOR JUMP BY
 046C                                           ; CHANNEL NUMBER
 046C 07                        RLC             ; CHANNEL NO. * 2
 046D 4F                        MOV C,A
 046E 0600                      MVI B,0
 0470 09                        DAD B           ; POINT TOWARD JUMP 
 0471                                           ; ADDRESS
 0471 5E                        MOV E,M
 0472 23                        INX H
 0473 56                        MOV D,M
 0474 EB                        XCHG
 0475 E9                        PCHL            ; NOW JUMP
                ;
 0476 7E04      JP3TABLE:       DW CH0SNDSTRT
 0478 9C04                      DW CH1SNDSTRT
 047A BA04                      DW CH2SNDSTRT
 047C D804                      DW CH3SNDSTRT
                ;
 047E 210082    CH0SNDSTRT:     LXI H,SND0BUFF  ; BUFFER(0) ADDRESS IN HL
 0481 CDF604                    CALL CALCSNDCRC ; CALCULATE THE CRC
 0484 21408A                    LXI H,SND0FLGS  ; SET UP FOR FIRST CHAR
 0487 3E01                      MVI A,1         ; FIRST CHAR COUNT
 0489 77                        MOV M,A
 048A AF                        XRA A           ; CLEAR TWO FLAG
 048B 23                        INX H
 048C 77                        MOV M,A
 048D 3E02                      MVI A,2         ; SEND FIRST CHARACTER
 048F D3D0                      OUT DAT0ADD
 0491 23                        INX H
 0492 7E                        MOV A,M         ; SEE IF LAST MSG DONE
 0493 B7                        ORA A           ; NEW MSG STILL GOES


AVOCET SYSTEMS 8085/Z80 ASSEMBLER -  VERSION 1.05M  SERIAL #00411

SOURCE FILE NAME: EQUATES.ASM                                       PAGE 27
 ROUTINES TO START SENDING UPON COMMAND OF MASTER 

 0494 C24303                    JNZ NACK        ; EVEN IF MISTAKE
 0497 36FF                      MVI M,0FFH      ; SET IN PROGRESS FLAG
 0499 C34B03                    JMP ACK         ; TELL CPU YOU DID IT!
                
 049C            ; CH1SNDSTRT:  NOP
 049C            ; CH2SNDSTRT:  NOP
 049C            ; CH3SNDSTRT:  NOP
                
                ;
 049C 210083    CH1SNDSTRT:     LXI H,SND1BUFF  ; BUFFER(0) ADDRESS IN HL
 049F CDF604                    CALL CALCSNDCRC ; CALCULATE THE CRC
 04A2 21608A                    LXI H,SND1FLGS  ; SET UP FOR FIRST CHAR
 04A5 3E01                      MVI A,1         ; FIRST CHAR COUNT
 04A7 77                        MOV M,A
 04A8 AF                        XRA A           ; CLEAR TWO FLAG
 04A9 23                        INX H
 04AA 77                        MOV M,A
 04AB 3E02                      MVI A,2         ; SEND FIRST CHARACTER
 04AD D3D2                      OUT DAT1ADD
 04AF 23                        INX H
 04B0 7E                        MOV A,M         ; SEE IF LAST MSG DONE
 04B1 B7                        ORA A           ; NEW MSG STILL GOES
 04B2 C24303                    JNZ NACK        ; EVEN IF MISTAKE
 04B5 36FF                      MVI M,0FFH      ; SET IN PROGRESS FLAG
 04B7 C34B03                    JMP ACK         ; TELL CPU YOU DID IT!
                
                
                ;
 04BA 210084    CH2SNDSTRT:     LXI H,SND2BUFF  ; BUFFER(0) ADDRESS IN HL
 04BD CDF604                    CALL CALCSNDCRC ; CALCULATE THE CRC
 04C0 21808A                    LXI H,SND2FLGS  ; SET UP FOR FIRST CHAR
 04C3 3E01                      MVI A,1         ; FIRST CHAR COUNT
 04C5 77                        MOV M,A
 04C6 AF                        XRA A           ; CLEAR TWO FLAG
 04C7 23                        INX H
 04C8 77                        MOV M,A
 04C9 3E02                      MVI A,2         ; SEND FIRST CHARACTER
 04CB D3D4                      OUT DAT2ADD
 04CD 23                        INX H
 04CE 7E                        MOV A,M         ; SEE IF LAST MSG DONE
 04CF B7                        ORA A           ; NEW MSG STILL GOES
 04D0 C24303                    JNZ NACK        ; EVEN IF MISTAKE
 04D3 36FF                      MVI M,0FFH      ; SET IN PROGRESS FLAG
 04D5 C34B03                    JMP ACK         ; TELL CPU YOU DID IT!
                
                
                ;
 04D8 210085    CH3SNDSTRT:     LXI H,SND3BUFF  ; BUFFER(0) ADDRESS IN HL
 04DB CDF604                    CALL CALCSNDCRC ; CALCULATE THE CRC
 04DE 21A08A                    LXI H,SND3FLGS  ; SET UP FOR FIRST CHAR
 04E1 3E01                      MVI A,1         ; FIRST CHAR COUNT


AVOCET SYSTEMS 8085/Z80 ASSEMBLER -  VERSION 1.05M  SERIAL #00411

SOURCE FILE NAME: EQUATES.ASM                                       PAGE 28
 ROUTINES TO START SENDING UPON COMMAND OF MASTER 

 04E3 77                        MOV M,A
 04E4 AF                        XRA A           ; CLEAR TWO FLAG
 04E5 23                        INX H
 04E6 77                        MOV M,A
 04E7 3E02                      MVI A,2         ; SEND FIRST CHARACTER
 04E9 D3D6                      OUT DAT3ADD
 04EB 23                        INX H
 04EC 7E                        MOV A,M         ; SEE IF LAST MSG DONE
 04ED B7                        ORA A           ; NEW MSG STILL GOES
 04EE C24303                    JNZ NACK        ; EVEN IF MISTAKE
 04F1 36FF                      MVI M,0FFH      ; SET IN PROGRESS FLAG
 04F3 C34B03                    JMP ACK         ; TELL CPU YOU DID IT!


AVOCET SYSTEMS 8085/Z80 ASSEMBLER -  VERSION 1.05M  SERIAL #00411

SOURCE FILE NAME: EQUATES.ASM                                       PAGE 29
 ROUTINE TO CALCULATE THE CRC FOR MESSAGE BEING SENT 

                                INCLUDE SNDCRC.ASM
                
                
 04F6            ;     SUBROUTINE TO CALCULATE THE CRC-16 FOR OUTGOING
 04F6            ;     MESSAGES FROM THE 544 BOARD.
 04F6            ;
 04F6            ;     ENTER THIS SUBROUTINE WITH THE BUFFER(0) ADDRESS
 04F6            ;     IN HL.
 04F6            ;
 04F6 3E02      CALCSNDCRC:     MVI A,02        ; SET STX BYTE
 04F8 77                        MOV M,A
 04F9 5D                        MOV E,L         ; MAKE COPY OF BUFFER
 04FA 54                        MOV D,H         ; START ADDRESS
 04FB 23                        INX H           ; POINTER TO COUNT
 04FC                                           ; BYTE
 04FC 4E                        MOV C,M         ; COUNT IN C
 04FD 0600                      MVI B,0         ; SET UP FOR DAD
 04FF 0D                        DCR C           ; HI CRC BYTE POINTER
 0500 0D                        DCR C           ; = BUFFER(1) ADDRESS
 0501                                           ; + COUNT - 2
 0501 09                        DAD B           ; HL = CH CRC BYTE PTR
 0502 AF                        XRA A           ; CLEAR CRC BYTES
 0503 77                        MOV M,A
 0504 23                        INX H           ; LO CRC PTR
 0505 77                        MOV M,A
 0506 2B                        DCX H           ; BACK TO HI CRC PTR
 0507 EB                        XCHG            ; START OF BUFFER 
 0508                                           ; ADDRESS IN HL, HI
 0508                                           ; CRC BYTE POINTER IN DE
 0508 79                        MOV A,C         ; COUNT - 2 IN ACCUM
                
 0509            ; ENTER THIS LOOP WITH HL = POINTER TO BUFFER(0)
 0509            ;                      A = COUNTER = COUNT -2
 0509            ;                      DE = HI CRC BYTE POINTER
 0509            ;                      B = 0
 0509            ;
                
 0509 F5        CRC1SNDLOOP:    PUSH PSW        ; SAVE COUNTER
 050A 23                        INX H           ; INDEX TO NEXT CHARACTER
 050B                                           ; IN THE BUFFER
 050B 7E                        MOV A,M         ; GET THE CHARACTER
 050C E5                        PUSH H          ; SAVE CHARACTER POINTER
 050D EB                        XCHG            ; PTR TO HI CRC BYTE
 050E                                           ; IN HL
 050E AE                        XRA M           ; MAKE INDEX
 050F 4F                        MOV C,A         ; BC = 0,INDEX
 0510 EB                        XCHG            ; SAVE HI CRC BYTE PTR
 0511 212905                    LXI H,CRCTABLE  ; MAKE ADDRESS OF CRC
 0514 09                        DAD B           ; TABLE(2*INDEX)
 0515 09                        DAD B
 0516 7E                        MOV A,M         ; GET LOOKUP HI


AVOCET SYSTEMS 8085/Z80 ASSEMBLER -  VERSION 1.05M  SERIAL #00411

SOURCE FILE NAME: EQUATES.ASM                                       PAGE 30
 ROUTINE TO CALCULATE THE CRC FOR MESSAGE BEING SENT 

 0517 EB                        XCHG            ; HI CRC BYTE PTR IN HL
 0518 23                        INX H           ; NOW LO CRC BYTE PTR
 0519 AE                        XRA M           ; MAKE NEW HI CRC BYTE 
 051A 2B                        DCX H           ; SAVE HI CRC BYTE
 051B 77                        MOV M,A
 051C 13                        INX D           ; GET NEW LO CRC BYTE
 051D 1A                        LDAX D
 051E 23                        INX H           ; SAVE LO CRC BYTE
 051F 77                        MOV M,A
 0520 2B                        DCX H           ; BACK TO HI PTR
 0521 EB                        XCHG            ; SAVE HI PTR
 0522 E1                        POP H           ; GET CHARACTER POINTER
 0523 F1                        POP PSW         ; GET COUNTER
 0524 3D                        DCR A           ; SEE IF DONE
 0525 C20905                    JNZ CRC1SNDLOOP ; IF NOT DONE GO AGAIN
                
 0528 C9                        RET             ; ALL DONE - GO BACK
                
                                INCLUDE CRCTABLE.ASM
                
 0529           CRCTABLE:
                
                
                
 0529 00008005   DW  0H, 580H, 0F80H, 0A00H, 1B80H, 1E00H, 1400H, 1180H
 0539 80330036   DW  3380H, 3600H, 3C00H, 3980H, 2800H, 2D80H, 2780H, 2200H
 0549 80630066   DW  6380H, 6600H, 6C00H, 6980H, 7800H, 7D80H, 7780H, 7200H
 0559 00508055   DW  5000H, 5580H, 5F80H, 5A00H, 4B80H, 4E00H, 4400H, 4180H
 0569               
 0569 80C300C6   DW  0C380H, 0C600H, 0CC00H, 0C980H, 0D800H, 0DD80H, 0D780H, 0D2
                00H
 0579 00F080F5   DW  0F000H, 0F580H, 0FF80H, 0FA00H, 0EB80H, 0EE00H, 0E400H, 0E1
                80H
 0589 00A080A5   DW  0A000H, 0A580H, 0AF80H, 0AA00H, 0BB80H, 0BE00H, 0B400H, 0B1
                80H
 0599 80930096   DW  9380H, 9600H, 9C00H, 9980H, 8800H, 8D80H, 8780H, 8200H 
                
 05A9 81830186   DW  8381H, 8601H, 8C01H, 8981H, 9801H, 9D81H, 9781H, 9201H
 05B9 01B081B5   DW  0B001H, 0B581H, 0BF81H, 0BA01H, 0AB81H, 0AE01H, 0A401H, 0A1
                81H
 05C9 01E081E5   DW  0E001H, 0E581H, 0EF81H, 0EA01H, 0FB81H, 0FE01H, 0F401H, 0F1
                81H
 05D9 81D301D6   DW  0D381H, 0D601H, 0DC01H, 0D981H, 0C801H, 0CD81H, 0C781H, 0C2
                01H
                
 05E9 01408145   DW  4001H, 4581H, 4F81H, 4A01H, 5B81H, 5E01H, 5401H, 5181H
 05F9 81730176   DW  7381H, 7601H, 7C01H, 7981H, 6801H, 6D81H, 6781H, 6201H
 0609 81230126   DW  2381H, 2601H, 2C01H, 2981H, 3801H, 3D81H, 3781H, 3201H
 0619 01108115   DW  1001H, 1581H, 1F81H, 1A01H, 0B81H, 0E01H, 0401H, 0181H 
                
 0629 83030306   DW  0383H, 0603H, 0C03H, 0983H, 1803H, 1D83H, 1783H, 1203H 


AVOCET SYSTEMS 8085/Z80 ASSEMBLER -  VERSION 1.05M  SERIAL #00411

SOURCE FILE NAME: EQUATES.ASM                                       PAGE 31
 ROUTINE TO CALCULATE THE CRC FOR MESSAGE BEING SENT 

 0639 03308335   DW  3003H, 3583H, 3F83H, 3A03H, 2B83H, 2E03H, 2403H, 2183H
 0649 03608365   DW  6003H, 6583H, 6F83H, 6A03H, 7B83H, 7E03H, 7403H, 7183H
 0659 83530356   DW  5383H, 5603H, 5C03H, 5983H, 4803H, 4D83H, 4783H, 4203H
                
 0669 03C083C5   DW  0C003H, 0C583H, 0CF83H, 0CA03H, 0DB83H, 0DE03H, 0D403H, 0D1
                83H
 0679 83F303F6   DW  0F383H, 0F603H, 0FC03H, 0F983H, 0E803H, 0ED83H, 0E783H, 0E2
                03H 
 0689 83A303A6   DW  0A383H, 0A603H, 0AC03H, 0A983H, 0B803H, 0BD83H, 0B783H, 0B2
                03H
 0699 03908395   DW  9003H, 9583H, 9F83H, 9A03H, 8B83H, 8E03H, 8403H, 8183H
                
 06A9 02808285   DW  8002H, 8582H, 8F82H, 8A02H, 9B82H, 9E02H, 9402H, 9182H
 06B9 82B302B6   DW  0B382H, 0B602H, 0BC02H, 0B982H, 0A802H, 0AD82H, 0A782H, 0A2
                02H
 06C9 82E302E6   DW  0E382H, 0E602H, 0EC02H, 0E982H, 0F802H, 0FD82H, 0F782H, 0F2
                02H
 06D9 02D082D5   DW  0D002H, 0D582H, 0DF82H, 0DA02H, 0CB82H, 0CE02H, 0C402H, 0C1
                82H
                
 06E9 82430246   DW  4382H, 4602H, 4C02H, 4982H, 5802H, 5D82H, 5782H, 5202H
 06F9 02708275   DW  7002H, 7582H, 7F82H, 7A02H, 6B82H, 6E02H, 6402H, 6182H
 0709 02208225   DW  2002H, 2582H, 2F82H, 2A02H, 3B82H, 3E02H, 3402H, 3182H
 0719 82130216   DW  1382H, 1602H, 1C02H, 1982H, 0802H, 0D82H, 0782H, 0202H
                


AVOCET SYSTEMS 8085/Z80 ASSEMBLER -  VERSION 1.05M  SERIAL #00411

SOURCE FILE NAME: EQUATES.ASM                                       PAGE 32
 SEND MESSAGE INTERRUPT HANDLERS 

                                INCLUDE SNDINT.ASM
                
                
                
 0729            ;THIS INCLUDE FILE HAS THE INTERRUPT ROUTINES THAT SEND
 0729            ;THE MESSAGES IN THE SEND MESSAGE BUFFERS.  THE CODE THAT
 0729            ;SETS UP THE MESSAGE MUST SEND THE FIRST CHARACTER (02).
 0729            ;THE TXRDY INTERRUPT FROM THE UART WILL THEN START THE
 0729            ;HANDLER.  ANY 02 IMBEDDED IN THE MESSAGE WILL BE SENT
 0729            ;AS TWO SUCCESSIVE 02's BY THE HANDLER.  AFTER THE 
 0729            ;MESSAGE IS SENT, THE MESSAGE IN PROGRESS FLAG WILL BE
 0729            ;CLEARED, AND THE SEND-DONE FLAG WILL BE SET. 
                
                
 0729 F5        SND0INT:        PUSH PSW                ; SAVE THE ENVIRONMENT
 072A C5                        PUSH B
 072B D5                        PUSH D
 072C E5                        PUSH H
 072D 11408A                    LXI  D,SND0FLGS         ;ADDRESS OF BYTES SENT
 0730                                                   ;COUNT
 0730 210182                    LXI  H,SND0BUFF + 1     ;ADDRESS OF CNT BYTE
 0733                                                   ;IN MESSAGE
 0733 7E                        MOV  A,M                ;COUNT BYTE INTO A
 0734 EB                        XCHG                    ;SUBTRACT COUNTER FROM 
 0735 96                        SUB  M                  ;COUNT 
 0736 FA6207                    JM   SND0DONE           ;CNTR > COUNT MEANS
 0739                                                   ;ALL CHARACTERS SENT
 0739 4E                        MOV  C,M                ;GET COUNTER
 073A EB                        XCHG                    ;SAVE COUNTER ADDRESS
 073B                                                   ;PUT BUFFER ADDRESS + 1
 073B                                                   ;INTO HL
 073B 2B                        DCX  H                  ;START OF BUFFER
 073C 0600                      MVI  B,0                ;CLEAR HI BC
 073E 09                        DAD  B                  ;ADDRESS OF CHARACTER TO
 073F                                                   ;BE SENT IN HL
 073F 7E                        MOV  A,M                ;GET THE CHARACTER
 0740 D3D0                      OUT  DAT0ADD            ;SEND THE CHARACTER
 0742 EB                        XCHG                    ;COUNTER ADDRESS IN HL
 0743 FE02                      CPI  2                  ;SEE IF CHARACTER IS 2 
 0745 C25607                    JNZ  NOT0TWO            ;NO SPECIAL HANDLING
 0748 23                        INX  H                  ;TWO-FLAG ADDRESS IN HL
 0749 7E                        MOV  A,M                ;GET TWO-FLAG
 074A B7                        ORA  A                  ;MAKE CPU FLAGS
 074B C25307                    JNZ  CLR0FLG            ;MEANS IS SECOND TWO
 074E 2F                        CMA                     ;SET TWO-FLAG
 074F 77                        MOV  M,A                ;FIRST TWO,
 0750 C35807                    JMP  SND0RET            ;DON'T INC. COUNTER
 0753 AF        CLR0FLG:        XRA  A                  ;CLEAR TWO-FLAG
 0754 77                        MOV  M,A
 0755 2B                        DCX  H                  ;BACK TO CNTR ADDRESS
 0756 0C        NOT0TWO:        INR  C                  ;SET UP FOR NEXT CHAR


AVOCET SYSTEMS 8085/Z80 ASSEMBLER -  VERSION 1.05M  SERIAL #00411

SOURCE FILE NAME: EQUATES.ASM                                       PAGE 33
SEND MESSAGE INTERRUPT HANDLERS

 0757 71                        MOV  M,C                ;
 0758 3E20      SND0RET:        MVI  A,PICRESET         ;ENABLE PIC INTERRUPTS
 075A D3E6                      OUT  PICPORT
 075C E1                        POP  H                  ;RESTORE THE ENVIRONMENT
 075D D1                        POP  D
 075E C1                        POP  B
 075F F1                        POP  PSW
 0760 FB                        EI                      ;LET THE OTHERS PLAY
 0761 C9                        RET                     ;BACK TO WORK
                
 0762 23        SND0DONE:       INX H                   ;ALL CHARACTERS SENT
 0763 23                        INX H                   ;CLEAR MSG IN PROGRESS
 0764 AF                        XRA A                   ;FLAG
 0765 77                        MOV M,A
 0766 21218A                    LXI H,ACKNAKHIPTR       ; GET THE HI QUEUE PTR
 0769 7E                        MOV A,M                 
 076A 4F                        MOV C,A                 ; SAVE THE PRESENT PTR
 076B C604                      ADI 4                   ; INDEX TO NEXT SLOT
 076D E61F                      ANI 01FH                ; ONLY 8 SLOTS OF
 076F                                                   ; 4 BYTES
 076F 2B                        DCX H                   ; NOW LO POINTER
 0770 BE                        CMP M                   ; HI POINTER +4 = LOPTR
 0771                                                   ; MEANS QUEUE IS FULL
 0771 CA8103                    JZ FATALFAULT
 0774 23                        INX H                   ; BACK TO HI PTR
 0775 77                        MOV M,A                 ; SAVE NEW HI PTR
 0776 21408B                    LXI H,ACKNAKQUEUE       ; ADDRESS OF ACK/NAK
 0779                                                   ; MSG QUEUE IN HL
 0779 0600                      MVI B,0                 ; SETUP SLOT ADDRESS
 077B 09                        DAD B
 077C 36FF                      MVI M,MSGSENT           ;
 077E 23                        INX H
 077F 3600                      MVI M,0                 ; THIS IS CHAN 0
 0781 23                        INX H
 0782 3600                      MVI M,0                 ; MSG SENT SUCCESSFULLY
 0784 C35807                    JMP SND0RET             ; ALL DONE WITH MESSAGE
 0787            ;
 0787            ;
 0787            ;
                
 0787 F5        SND1INT:        PUSH PSW                ; SAVE THE ENVIRONMENT
 0788 C5                        PUSH B
 0789 D5                        PUSH D
 078A E5                        PUSH H
 078B 11608A                    LXI  D,SND1FLGS         ;ADDRESS OF BYTES SENT
 078E                                                   ;COUNT
 078E 210183                    LXI  H,SND1BUFF + 1     ;ADDRESS OF CNT BYTE
 0791                                                   ;IN MESSAGE
 0791 7E                        MOV  A,M                ;COUNT BYTE INTO A
 0792 EB                        XCHG                    ;SUBTRACT COUNTER FROM 
 0793 96                        SUB  M                  ;COUNT 


AVOCET SYSTEMS 8085/Z80 ASSEMBLER -  VERSION 1.05M  SERIAL #00411

SOURCE FILE NAME: EQUATES.ASM                                       PAGE 34
SEND MESSAGE INTERRUPT HANDLERS

 0794 FAC007                    JM   SND1DONE           ;CNTR > COUNT MEANS
 0797                                                   ;ALL CHARACTERS SENT
 0797 4E                        MOV  C,M                ;GET COUNTER
 0798 EB                        XCHG                    ;SAVE COUNTER ADDRESS
 0799                                                   ;PUT BUFFER ADDRESS + 1
 0799                                                   ;INTO HL
 0799 2B                        DCX  H                  ;START OF BUFFER
 079A 0600                      MVI  B,0                ;CLEAR HI BC
 079C 09                        DAD  B                  ;ADDRESS OF CHARACTER TO
 079D                                                   ;BE SENT IN HL
 079D 7E                        MOV  A,M                ;GET THE CHARACTER
 079E D3D2                      OUT  DAT1ADD            ;SEND THE CHARACTER
 07A0 EB                        XCHG                    ;COUNTER ADDRESS IN HL
 07A1 FE02                      CPI  2                  ;SEE IF CHARACTER IS 2 
 07A3 C2B407                    JNZ  NOT1TWO            ;NO SPECIAL HANDLING
 07A6 23                        INX  H                  ;TWO-FLAG ADDRESS IN HL
 07A7 7E                        MOV  A,M                ;GET TWO-FLAG
 07A8 B7                        ORA  A                  ;MAKE CPU FLAGS
 07A9 C2B107                    JNZ  CLR1FLG            ;MEANS IS SECOND TWO
 07AC 2F                        CMA                     ;SET TWO-FLAG
 07AD 77                        MOV  M,A                ;FIRST TWO,
 07AE C3B607                    JMP  SND1RET            ;DON'T INC. COUNTER
 07B1 AF        CLR1FLG:        XRA  A                  ;CLEAR TWO-FLAG
 07B2 77                        MOV  M,A
 07B3 2B                        DCX  H                  ;BACK TO CNTR ADDRESS
 07B4 0C        NOT1TWO:        INR  C                  ;SET UP FOR NEXT CHAR
 07B5 71                        MOV  M,C                ;
 07B6 3E20      SND1RET:        MVI  A,PICRESET         ;ENABLE PIC INTERRUPTS
 07B8 D3E6                      OUT  PICPORT
 07BA E1                        POP  H                  ;RESTORE THE ENVIRONMENT
 07BB D1                        POP  D
 07BC C1                        POP  B
 07BD F1                        POP  PSW
 07BE FB                        EI                      ;LET THE OTHERS PLAY
 07BF C9                        RET                     ;BACK TO WORK
                
 07C0 23        SND1DONE:       INX H                   ;ALL CHARACTERS SENT
 07C1 23                        INX H                   ;CLEAR MSG IN PROGRESS
 07C2 AF                        XRA A                   ;FLAG
 07C3 77                        MOV M,A
 07C4 21218A                    LXI H,ACKNAKHIPTR       ; GET THE HI QUEUE PTR
 07C7 7E                        MOV A,M                 
 07C8 4F                        MOV C,A                 ; SAVE THE PRESENT PTR
 07C9 C604                      ADI 4                   ; INDEX TO NEXT SLOT
 07CB E61F                      ANI 01FH                ; ONLY 8 SLOTS OF
 07CD                                                   ; 4 BYTES
 07CD 2B                        DCX H                   ; NOW LO POINTER
 07CE BE                        CMP M                   ; HI POINTER +4 = LOPTR
 07CF                                                   ; MEANS QUEUE IS FULL
 07CF CA8103                    JZ FATALFAULT
 07D2 23                        INX H                   ; BACK TO HI PTR


AVOCET SYSTEMS 8085/Z80 ASSEMBLER -  VERSION 1.05M  SERIAL #00411

SOURCE FILE NAME: EQUATES.ASM                                       PAGE 35
SEND MESSAGE INTERRUPT HANDLERS

 07D3 77                        MOV M,A                 ; SAVE NEW HI PTR
 07D4 21408B                    LXI H,ACKNAKQUEUE       ; ADDRESS OF ACK/NAK
 07D7                                                   ; MSG QUEUE IN HL
 07D7 0600                      MVI B,0                 ; SETUP SLOT ADDRESS
 07D9 09                        DAD B
 07DA 36FF                      MVI M,MSGSENT           ;
 07DC 23                        INX H
 07DD 3601                      MVI M,1                 ; THIS IS CHAN 1
 07DF 23                        INX H
 07E0 3600                      MVI M,0                 ; MSG SENT SUCCESSFULLY
 07E2 C3B607                    JMP SND1RET             ; ALL DONE WITH MESSAGE
 07E5            ;
 07E5            ;
 07E5            ;
                
 07E5 F5        SND2INT:        PUSH PSW                ; SAVE THE ENVIRONMENT
 07E6 C5                        PUSH B
 07E7 D5                        PUSH D
 07E8 E5                        PUSH H
 07E9 11808A                    LXI  D,SND2FLGS         ;ADDRESS OF BYTES SENT
 07EC                                                   ;COUNT
 07EC 210184                    LXI  H,SND2BUFF + 1     ;ADDRESS OF CNT BYTE
 07EF                                                   ;IN MESSAGE
 07EF 7E                        MOV  A,M                ;COUNT BYTE INTO A
 07F0 EB                        XCHG                    ;SUBTRACT COUNTER FROM 
 07F1 96                        SUB  M                  ;COUNT 
 07F2 FA1E08                    JM   SND2DONE           ;CNTR > COUNT MEANS
 07F5                                                   ;ALL CHARACTERS SENT
 07F5 4E                        MOV  C,M                ;GET COUNTER
 07F6 EB                        XCHG                    ;SAVE COUNTER ADDRESS
 07F7                                                   ;PUT BUFFER ADDRESS + 1
 07F7                                                   ;INTO HL
 07F7 2B                        DCX  H                  ;START OF BUFFER
 07F8 0600                      MVI  B,0                ;CLEAR HI BC
 07FA 09                        DAD  B                  ;ADDRESS OF CHARACTER TO
 07FB                                                   ;BE SENT IN HL
 07FB 7E                        MOV  A,M                ;GET THE CHARACTER
 07FC D3D4                      OUT  DAT2ADD            ;SEND THE CHARACTER
 07FE EB                        XCHG                    ;COUNTER ADDRESS IN HL
 07FF FE02                      CPI  2                  ;SEE IF CHARACTER IS 2 
 0801 C21208                    JNZ  NOT2TWO            ;NO SPECIAL HANDLING
 0804 23                        INX  H                  ;TWO-FLAG ADDRESS IN HL
 0805 7E                        MOV  A,M                ;GET TWO-FLAG
 0806 B7                        ORA  A                  ;MAKE CPU FLAGS
 0807 C20F08                    JNZ  CLR2FLG            ;MEANS IS SECOND TWO
 080A 2F                        CMA                     ;SET TWO-FLAG
 080B 77                        MOV  M,A                ;FIRST TWO,
 080C C31408                    JMP  SND2RET            ;DON'T INC. COUNTER
 080F AF        CLR2FLG:        XRA  A                  ;CLEAR TWO-FLAG
 0810 77                        MOV  M,A
 0811 2B                        DCX  H                  ;BACK TO CNTR ADDRESS


AVOCET SYSTEMS 8085/Z80 ASSEMBLER -  VERSION 1.05M  SERIAL #00411

SOURCE FILE NAME: EQUATES.ASM                                       PAGE 36
SEND MESSAGE INTERRUPT HANDLERS

 0812 0C        NOT2TWO:        INR  C                  ;SET UP FOR NEXT CHAR
 0813 71                        MOV  M,C                ;
 0814 3E20      SND2RET:        MVI  A,PICRESET         ;ENABLE PIC INTERRUPTS
 0816 D3E6                      OUT  PICPORT
 0818 E1                        POP  H                  ;RESTORE THE ENVIRONMENT
 0819 D1                        POP  D
 081A C1                        POP  B
 081B F1                        POP  PSW
 081C FB                        EI                      ;LET THE OTHERS PLAY
 081D C9                        RET                     ;BACK TO WORK
                
 081E 23        SND2DONE:       INX H                   ;ALL CHARACTERS SENT
 081F 23                        INX H                   ;CLEAR MSG IN PROGRESS
 0820 AF                        XRA A                   ;FLAG
 0821 77                        MOV M,A
 0822 21218A                    LXI H,ACKNAKHIPTR       ; GET THE HI QUEUE PTR
 0825 7E                        MOV A,M                 
 0826 4F                        MOV C,A                 ; SAVE THE PRESENT PTR
 0827 C604                      ADI 4                   ; INDEX TO NEXT SLOT
 0829 E61F                      ANI 01FH                ; ONLY 8 SLOTS OF
 082B                                                   ; 4 BYTES
 082B 2B                        DCX H                   ; NOW LO POINTER
 082C BE                        CMP M                   ; HI POINTER +4 = LOPTR
 082D                                                   ; MEANS QUEUE IS FULL
 082D CA8103                    JZ FATALFAULT
 0830 23                        INX H                   ; BACK TO HI PTR
 0831 77                        MOV M,A                 ; SAVE NEW HI PTR
 0832 21408B                    LXI H,ACKNAKQUEUE       ; ADDRESS OF ACK/NAK
 0835                                                   ; MSG QUEUE IN HL
 0835 0600                      MVI B,0                 ; SETUP SLOT ADDRESS
 0837 09                        DAD B
 0838 36FF                      MVI M,MSGSENT           ;
 083A 23                        INX H
 083B 3602                      MVI M,2                 ; THIS IS CHAN 2
 083D 23                        INX H
 083E 3600                      MVI M,0                 ; MSG SENT SUCCESSFULLY
 0840 C31408                    JMP SND2RET             ; ALL DONE WITH MESSAGE
 0843            ;
 0843            ;
 0843            ;
                
 0843 F5        SND3INT:        PUSH PSW                ; SAVE THE ENVIRONMENT
 0844 C5                        PUSH B
 0845 D5                        PUSH D
 0846 E5                        PUSH H
 0847 11A08A                    LXI  D,SND3FLGS         ;ADDRESS OF BYTES SENT
 084A                                                   ;COUNT
 084A 210185                    LXI  H,SND3BUFF + 1     ;ADDRESS OF CNT BYTE
 084D                                                   ;IN MESSAGE
 084D 7E                        MOV  A,M                ;COUNT BYTE INTO A
 084E EB                        XCHG                    ;SUBTRACT COUNTER FROM 


AVOCET SYSTEMS 8085/Z80 ASSEMBLER -  VERSION 1.05M  SERIAL #00411

SOURCE FILE NAME: EQUATES.ASM                                       PAGE 37
SEND MESSAGE INTERRUPT HANDLERS

 084F 96                        SUB  M                  ;COUNT 
 0850 FA7C08                    JM   SND3DONE           ;CNTR > COUNT MEANS
 0853                                                   ;ALL CHARACTERS SENT
 0853 4E                        MOV  C,M                ;GET COUNTER
 0854 EB                        XCHG                    ;SAVE COUNTER ADDRESS
 0855                                                   ;PUT BUFFER ADDRESS + 1
 0855                                                   ;INTO HL
 0855 2B                        DCX  H                  ;START OF BUFFER
 0856 0600                      MVI  B,0                ;CLEAR HI BC
 0858 09                        DAD  B                  ;ADDRESS OF CHARACTER TO
 0859                                                   ;BE SENT IN HL
 0859 7E                        MOV  A,M                ;GET THE CHARACTER
 085A D3D6                      OUT  DAT3ADD            ;SEND THE CHARACTER
 085C EB                        XCHG                    ;COUNTER ADDRESS IN HL
 085D FE02                      CPI  2                  ;SEE IF CHARACTER IS 2 
 085F C27008                    JNZ  NOT3TWO            ;NO SPECIAL HANDLING
 0862 23                        INX  H                  ;TWO-FLAG ADDRESS IN HL
 0863 7E                        MOV  A,M                ;GET TWO-FLAG
 0864 B7                        ORA  A                  ;MAKE CPU FLAGS
 0865 C26D08                    JNZ  CLR3FLG            ;MEANS IS SECOND TWO
 0868 2F                        CMA                     ;SET TWO-FLAG
 0869 77                        MOV  M,A                ;FIRST TWO,
 086A C37208                    JMP  SND3RET            ;DON'T INC. COUNTER
 086D AF        CLR3FLG:        XRA  A                  ;CLEAR TWO-FLAG
 086E 77                        MOV  M,A
 086F 2B                        DCX  H                  ;BACK TO CNTR ADDRESS
 0870 0C        NOT3TWO:        INR  C                  ;SET UP FOR NEXT CHAR
 0871 71                        MOV  M,C                ;
 0872 3E20      SND3RET:        MVI  A,PICRESET         ;ENABLE PIC INTERRUPTS
 0874 D3E6                      OUT  PICPORT
 0876 E1                        POP  H                  ;RESTORE THE ENVIRONMENT
 0877 D1                        POP  D
 0878 C1                        POP  B
 0879 F1                        POP  PSW
 087A FB                        EI                      ;LET THE OTHERS PLAY
 087B C9                        RET                     ;BACK TO WORK
                
 087C 23        SND3DONE:       INX H                   ;ALL CHARACTERS SENT
 087D 23                        INX H                   ;CLEAR MSG IN PROGRESS
 087E AF                        XRA A                   ;FLAG
 087F 77                        MOV M,A
 0880 21218A                    LXI H,ACKNAKHIPTR       ; GET THE HI QUEUE PTR
 0883 7E                        MOV A,M                 
 0884 4F                        MOV C,A                 ; SAVE THE PRESENT PTR
 0885 C604                      ADI 4                   ; INDEX TO NEXT SLOT
 0887 E61F                      ANI 01FH                ; ONLY 8 SLOTS OF
 0889                                                   ; 4 BYTES
 0889 2B                        DCX H                   ; NOW LO POINTER
 088A BE                        CMP M                   ; HI POINTER +4 = LOPTR
 088B                                                   ; MEANS QUEUE IS FULL
 088B CA8103                    JZ FATALFAULT


AVOCET SYSTEMS 8085/Z80 ASSEMBLER -  VERSION 1.05M  SERIAL #00411

SOURCE FILE NAME: EQUATES.ASM                                       PAGE 38
SEND MESSAGE INTERRUPT HANDLERS

 088E 23                        INX H                   ; BACK TO HI PTR
 088F 77                        MOV M,A                 ; SAVE NEW HI PTR
 0890 21408B                    LXI H,ACKNAKQUEUE       ; ADDRESS OF ACK/NAK
 0893                                                   ; MSG QUEUE IN HL
 0893 0600                      MVI B,0                 ; SETUP SLOT ADDRESS
 0895 09                        DAD B
 0896 36FF                      MVI M,MSGSENT           ;
 0898 23                        INX H
 0899 3603                      MVI M,3                 ; THIS IS CHAN 3
 089B 23                        INX H
 089C 3600                      MVI M,0                 ; MSG SENT SUCCESSFULLY
 089E C37208                    JMP SND3RET             ; ALL DONE WITH MESSAGE
                


AVOCET SYSTEMS 8085/Z80 ASSEMBLER -  VERSION 1.05M  SERIAL #00411

SOURCE FILE NAME: EQUATES.ASM                                       PAGE 39
 RECEIVE MESSAGE INTERRUPT HANDLERS 

                                INCLUDE ALTRCV.ASM
                
                
                
 08A1            ; THIS FILE CONTAINS THE INTERRUPT HANDLERS FOR THE
 08A1            ; RECEIVE INTERRUPTS OF ALL FOUR CHANNELS OF THE 
 08A1            ; 544 BOARD.  NO ERROR CHECKING IS DONE, SINCE THE 
 08A1            ; CRC CHECK WILL CATCH ALL ERRORS OF THE TYPE THAT
 08A1            ; PARITY OR FRAMING WOULD CATCH.  THESE INTERRUPT
 08A1            ; HANDLERS DISCARD STX's AND LEADER 2's THAT PRECEDE
 08A1            ; VALID CHARACTER TWO's.  ONCE A COMPLETE MESSAGE IS 
 08A1            ; IN THE RECEIVE MESSAGE CIRCULAR QUEUE FOR A CHANNEL,
 08A1            ; THE CHANNEL NO. AND THE POINTER TO THE MESSAGE FIRST
 08A1            ; CHARACTER IS PUT IN MSGQUE FOR TRANSFER TO THE 
 08A1            ; MASTER CPU VIA PROCESS MESSAGE.
                
 08A1 F5        CHAN0RCV:       PUSH PSW        ; SAVE ALL
 08A2 C5                        PUSH B
 08A3 D5                        PUSH D
 08A4 E5                        PUSH H
                
 08A5 3AC68A                    LDA RCV0FLGS + 6 ; SEE IF SYNC FLAG
 08A8                                           ; SET
 08A8 B7                        ORA A
 08A9 CA150B                    JZ UP10DAT      ; KEEP STRTMSG UP TO
 08AC                                           ; DATE SO QUEUE WON'T
 08AC                                           ; FILL UP WITH GARBAGE
                
 08AC DBD0      UP20DAT:        IN DAT0ADD      ; GET THE CHARACTER
 08AE 47                        MOV B,A         ; SAVE THE CHARACTER
 08AF 21C08A                    LXI H,RCV0FLGS
 08B2 7E                        MOV A,M         ; HIPTR IN C & ACCUM
 08B3 4F                        MOV C,A
 08B4 3C                        INR A
 08B5 23                        INX H           ; NOW LOPTR    
 08B6 BE                        CMP M           ; NO ROOM IF HI + 1 = LO
 08B7 CADD08                    JZ G0RCVBACK
 08BA 78                        MOV A,B         ; GET CHAR IN A
 08BB FE02                      CPI 2           ; IS IT A TWO?
 08BD CAE708                    JZ TWO0HNDLR    ; YES - GO SPECIAL
 08C0 23                        INX H           ; NO - WAS LAST 2
 08C1 AF                        XRA A
 08C2 BE                        CMP M           ; SEE IF TWOFLG CLEAR
 08C3 C2F508                    JNZ NEW0MSG     ; THIS IS COUNT CHAR
 08C6 78        LAST20BACK:     MOV A,B         ; CHAR IN ACCUM AGAIN
 08C7 0600                      MVI B,0         ; SET UP TO PUT IN BUFF
 08C9 EB                        XCHG            ; SAVE TWOFLG ADDRESS 
 08CA 210086                    LXI H,RCV0BUFF
 08CD 09                        DAD B           ; CURRENT BUFFER ADDRESS
 08CE                                           ; IN HL
 08CE 77                        MOV M,A         ; PUT CHAR INTO BUFFER


AVOCET SYSTEMS 8085/Z80 ASSEMBLER -  VERSION 1.05M  SERIAL #00411

SOURCE FILE NAME: EQUATES.ASM                                       PAGE 40
 RECEIVE MESSAGE INTERRUPT HANDLERS 

 08CF 79                        MOV A,C         ; INCREMENT HI PTR
 08D0 3C                        INR A
 08D1 32C08A                    STA RCV0FLGS    ; SAVE NEW HI PTR
 08D4 EB                        XCHG            ; FLAGS BACK IN HL
 08D5 23                        INX H           ; ADDRESS OF COUNTER
 08D6 34                        INR M           ; INCREMENT COUNTER
 08D7 7E                        MOV A,M         ; NEW COUNTER IN A
 08D8 23                        INX H           ; ADDRESS OF COUNT
 08D9 BE                        CMP M           ; COMPARE COUNTER & CNT
 08DA CA1909                    JZ EOM0HNDLER   ; CNTR = CNT MEANS
 08DD                                           ; MESSAGE COMPLETE
 08DD 3E20      G0RCVBACK:      MVI A,PICRESET  ; REENABLE THE PIC
 08DF                                           ; INTERRUPTS
 08DF D3E6                      OUT PICPORT
 08E1 E1                        POP H           ; RESTORE
 08E2 D1                        POP D
 08E3 C1                        POP B
 08E4 F1                        POP PSW
 08E5 FB                        EI
 08E6 C9                        RET
                
 08E7 23        TWO0HNDLR:      INX H           ; ADDRESS OF TWOFLG 
 08E8 AF                        XRA A
 08E9 BE                        CMP M           ; WAS LAST A TWO?
 08EA 3E00                      MVI A,0         ; CLEAR TWO FLG
 08EC                                           ; BUT DON'T CHANGE 
 08EC                                           ; STATUS
 08EC 77                        MOV M,A
 08ED C2C608                    JNZ LAST20BACK  ; LAST WAS A TWO -
 08F0                                           ; GO SAVE THIS ONE
 08F0 2F                        CMA             ; LAST WASN'T - SET
 08F1                                           ; TWOFLG
 08F1 77                        MOV M,A
 08F2 C3DD08                    JMP G0RCVBACK   ; DON'T PROCESS FIRST
 08F5                                           ; TWO
                
 08F5 77        NEW0MSG:        MOV M,A         ; CLEAR TWOFLG
 08F6 23                        INX H           ; ADDRESS OF CNTR
 08F7 3C                        INR A           ; SET CNTR = 1
 08F8 77                        MOV M,A
 08F9 23                        INX H           ; ADDRESS OF COUNT
 08FA 70                        MOV M,B         ; CNT = CHAR
 08FB 79                        MOV A,C         ; INCREMENT HIPTR
 08FC 3C                        INR A
 08FD 32C08A                    STA RCV0FLGS
 0900 23                        INX H           ; TO STRTMSG
 0901 71                        MOV M,C         ; CURRENT POINTER INTO
 0902                                           ; STRTMSG
 0902 78                        MOV A,B         ; PUT CHARACTER INTO 
 0903                                           ; BUFFER
 0903 0600                      MVI B,0


AVOCET SYSTEMS 8085/Z80 ASSEMBLER -  VERSION 1.05M  SERIAL #00411

SOURCE FILE NAME: EQUATES.ASM                                       PAGE 41
 RECEIVE MESSAGE INTERRUPT HANDLERS 

 0905 EB                        XCHG
 0906 210086                    LXI H,RCV0BUFF
 0909 09                        DAD B
 090A 77                        MOV M,A
 090B EB                        XCHG            ; CHK SYNC AND INCREMENT
 090C 23                        INX H           ; FAIL COUNT IF THIS
 090D AF                        XRA A           ; IS A RESYNC
 090E BE                        CMP M
 090F 36FF                      MVI M,0FFH      ; SET SYNC FLAG
 0911 CADD08                    JZ G0RCVBACK    
 0914 23                        INX H
 0915 34                        INR M
 0916 C3DD08                    JMP G0RCVBACK   ; READY FOR NEXT
                
 0919 11308A    EOM0HNDLR:      LXI D,MSGQHIPTR ; ADDRESS OF QUEUE HI
 091C                                           ; SLOT POINTER
 091C 1A                        LDAX D          ; GET THE POINTER
 091D 4F                        MOV C,A         ; SAVE IN C FOR ADDRESS
 091E                                           ; CALCULATION
 091E C602                      ADI 2           ; NEW HI POINTER FOR NEXT TIME
 0920 E61F                      ANI 01FH        ; 16 TWO BYTE SLOTS
 0922 1B                        DCX D           ; CHECK AGAINST LO PTR
 0923 EB                        XCHG
 0924 BE                        CMP M           ; 
 0925 CA8103                    JZ FATALFAULT   ; QUEUE FULL SOMETHING 
 0928                                           ; BADLY WRONG
 0928 23                        INX H           ; SAVE NEW POINTER
 0929 77                        MOV M,A
 092A 21608B                    LXI H,MSGQUE    ;
 092D 0600                      MVI B,0
 092F 09                        DAD B           ; HL HAS MESSAGE QUEUE
 0930                                           ; SLOT ADDRESS
 0930 3E00                      MVI A,0         ; THIS IS CHANNEL 0
 0932 77                        MOV M,A         ; PUT IN CHANNEL #
 0933 23                        INX H           ; ADDRESS OF PTR BYTE
 0934 13                        INX D
 0935 1A                        LDAX D
 0936 77                        MOV M,A
 0937 AF                        XRA A           ; CLR SYNC FLAG
 0938 32C68A                    STA RCV0FLGS + 6
 093B C3DD08                    JMP G0RCVBACK   ; ALL DONE
                
 093E             ; FATALFAULT: NOP
 093E            ;
 093E            ;
                
 093E F5        CHAN1RCV:       PUSH PSW        ; SAVE ALL
 093F C5                        PUSH B
 0940 D5                        PUSH D
 0941 E5                        PUSH H
                


AVOCET SYSTEMS 8085/Z80 ASSEMBLER -  VERSION 1.05M  SERIAL #00411

SOURCE FILE NAME: EQUATES.ASM                                       PAGE 42
 RECEIVE MESSAGE INTERRUPT HANDLERS 

 0942 3AE68A                    LDA RCV1FLGS + 6 ; SEE IF SYNC FLAG
 0945                                           ; SET
 0945 B7                        ORA A
 0946 CA1E0B                    JZ UP11DAT      ; KEEP STRTMSG UP TO
 0949                                           ; DATE SO QUEUE WON'T
 0949                                           ; FILL UP WITH GARBAGE
 0949 DBD2      UP21DAT:        IN DAT1ADD      ; GET THE CHARACTER
 094B 47                        MOV B,A         ; SAVE THE CHARACTER
 094C 21E08A                    LXI H,RCV1FLGS
 094F 7E                        MOV A,M         ; HIPTR IN C & ACCUM
 0950 4F                        MOV C,A
 0951 3C                        INR A
 0952 23                        INX H           ; NOW LOPTR    
 0953 BE                        CMP M           ; NO ROOM IF HI + 1 = LO
 0954 CA7A09                    JZ G1RCVBACK
 0957 78                        MOV A,B         ; GET CHAR IN A
 0958 FE02                      CPI 2           ; IS IT A TWO?
 095A CA8409                    JZ TWO1HNDLR    ; YES - GO SPECIAL
 095D 23                        INX H           ; NO - WAS LAST 2
 095E AF                        XRA A
 095F BE                        CMP M           ; SEE IF TWOFLG CLEAR
 0960 C29209                    JNZ NEW1MSG     ; THIS IS COUNT CHAR
 0963 78        LAST21BACK:     MOV A,B         ; CHAR IN ACCUM AGAIN
 0964 0600                      MVI B,0         ; SET UP TO PUT IN BUFF
 0966 EB                        XCHG            ; SAVE TWOFLG ADDRESS 
 0967 210087                    LXI H,RCV1BUFF
 096A 09                        DAD B           ; CURRENT BUFFER ADDRESS
 096B                                           ; IN HL
 096B 77                        MOV M,A         ; PUT CHAR INTO BUFFER
 096C 79                        MOV A,C         ; INCREMENT HI PTR
 096D 3C                        INR A
 096E 32E08A                    STA RCV1FLGS    ; SAVE NEW HI PTR
 0971 EB                        XCHG            ; FLAGS BACK IN HL
 0972 23                        INX H           ; ADDRESS OF COUNTER
 0973 34                        INR M           ; INCREMENT COUNTER
 0974 7E                        MOV A,M         ; NEW COUNTER IN A
 0975 23                        INX H           ; ADDRESS OF COUNT
 0976 BE                        CMP M           ; COMPARE COUNTER & CNT
 0977 CAB609                    JZ EOM1HNDLER   ; CNTR = CNT MEANS
 097A                                           ; MESSAGE COMPLETE
 097A 3E20      G1RCVBACK:      MVI A,PICRESET  ; REENABLE THE PIC
 097C                                           ; INTERRUPTS
 097C D3E6                      OUT PICPORT
 097E E1                        POP H           ; RESTORE
 097F D1                        POP D
 0980 C1                        POP B
 0981 F1                        POP PSW
 0982 FB                        EI
 0983 C9                        RET
                
 0984 23        TWO1HNDLR:      INX H           ; ADDRESS OF TWOFLG 


AVOCET SYSTEMS 8085/Z80 ASSEMBLER -  VERSION 1.05M  SERIAL #00411

SOURCE FILE NAME: EQUATES.ASM                                       PAGE 43
 RECEIVE MESSAGE INTERRUPT HANDLERS 

 0985 AF                        XRA A
 0986 BE                        CMP M           ; WAS LAST A TWO?
 0987 3E00                      MVI A,0         ; CLEAR TWO FLG
 0989                                           ; BUT DON'T CHANGE 
 0989                                           ; STATUS
 0989 77                        MOV M,A
 098A C26309                    JNZ LAST21BACK  ; LAST WAS A TWO -
 098D                                           ; GO SAVE THIS ONE
 098D 2F                        CMA             ; LAST WASN'T - SET
 098E                                           ; TWOFLG
 098E 77                        MOV M,A
 098F C37A09                    JMP G1RCVBACK   ; DON'T PROCESS FIRST
 0992                                           ; TWO
                
 0992 77        NEW1MSG:        MOV M,A         ; CLEAR TWOFLG
 0993 23                        INX H           ; ADDRESS OF CNTR
 0994 3C                        INR A           ; SET CNTR = 1
 0995 77                        MOV M,A
 0996 23                        INX H           ; ADDRESS OF COUNT
 0997 70                        MOV M,B         ; CNT = CHAR
 0998 79                        MOV A,C         ; INCREMENT HIPTR
 0999 3C                        INR A
 099A 32E08A                    STA RCV1FLGS
 099D 23                        INX H           ; TO STRTMSG
 099E 71                        MOV M,C         ; CURRENT POINTER INTO
 099F                                           ; STRTMSG
 099F 78                        MOV A,B         ; PUT CHARACTER INTO 
 09A0                                           ; BUFFER
 09A0 0600                      MVI B,0
 09A2 EB                        XCHG
 09A3 210087                    LXI H,RCV1BUFF
 09A6 09                        DAD B
 09A7 77                        MOV M,A
 09A8 EB                        XCHG            ; CHK SYNC AND INCREMENT
 09A9 23                        INX H           ; FAIL COUNT IF THIS
 09AA AF                        XRA A           ; IS A RESYNC
 09AB BE                        CMP M
 09AC 36FF                      MVI M,0FFH      ; SET SYNC FLAG
 09AE CA7A09                    JZ G1RCVBACK    
 09B1 23                        INX H
 09B2 34                        INR M
 09B3 C37A09                    JMP G1RCVBACK   ; READY FOR NEXT
                
 09B6 11308A    EOM1HNDLR:      LXI D,MSGQHIPTR ; ADDRESS OF QUEUE HI
 09B9                                           ; SLOT POINTER
 09B9 1A                        LDAX D          ; GET THE POINTER
 09BA 4F                        MOV C,A         ; SAVE IN C FOR ADDRESS
 09BB                                           ; CALCULATION
 09BB C602                      ADI 2           ; NEW HI POINTER FOR NEXT TIME
 09BD E61F                      ANI 01FH        ; 16 TWO BYTE SLOTS
 09BF 1B                        DCX D           ; CHECK AGAINST LO PTR


AVOCET SYSTEMS 8085/Z80 ASSEMBLER -  VERSION 1.05M  SERIAL #00411

SOURCE FILE NAME: EQUATES.ASM                                       PAGE 44
 RECEIVE MESSAGE INTERRUPT HANDLERS 

 09C0 EB                        XCHG
 09C1 BE                        CMP M           ; 
 09C2 CA8103                    JZ FATALFAULT   ; QUEUE FULL SOMETHING 
 09C5                                           ; BADLY WRONG
 09C5 23                        INX H           ; SAVE NEW POINTER
 09C6 77                        MOV M,A
 09C7 21608B                    LXI H,MSGQUE    ;
 09CA 0600                      MVI B,0
 09CC 09                        DAD B           ; HL HAS MESSAGE QUEUE
 09CD                                           ; SLOT ADDRESS
 09CD 3E01                      MVI A,1         ; THIS IS CHANNEL 1
 09CF 77                        MOV M,A         ; PUT IN CHANNEL #
 09D0 23                        INX H           ; ADDRESS OF PTR BYTE
 09D1 13                        INX D
 09D2 1A                        LDAX D
 09D3 77                        MOV M,A
 09D4 AF                        XRA A           ; CLR SYNC FLAG
 09D5 32E68A                    STA RCV1FLGS + 6
 09D8 C37A09                    JMP G1RCVBACK   ; ALL DONE
 09DB            ;
 09DB            ;
                
 09DB F5        CHAN2RCV:       PUSH PSW        ; SAVE ALL
 09DC C5                        PUSH B
 09DD D5                        PUSH D
 09DE E5                        PUSH H
                
 09DF 3A068B                    LDA RCV2FLGS + 6 ; SEE IF SYNC FLAG
 09E2                                           ; SET
 09E2 B7                        ORA A
 09E3 CA270B                    JZ UP12DAT      ; KEEP STRTMSG UP TO
 09E6                                           ; DATE SO QUEUE WON'T
 09E6                                           ; FILL UP WITH GARBAGE
 09E6 DBD4      UP22DAT:        IN DAT2ADD      ; GET THE CHARACTER
 09E8 47                        MOV B,A         ; SAVE THE CHARACTER
 09E9 21008B                    LXI H,RCV2FLGS
 09EC 7E                        MOV A,M         ; HIPTR IN C & ACCUM
 09ED 4F                        MOV C,A
 09EE 3C                        INR A
 09EF 23                        INX H           ; NOW LOPTR    
 09F0 BE                        CMP M           ; NO ROOM IF HI + 1 = LO
 09F1 CA170A                    JZ G2RCVBACK
 09F4 78                        MOV A,B         ; GET CHAR IN A
 09F5 FE02                      CPI 2           ; IS IT A TWO?
 09F7 CA210A                    JZ TWO2HNDLR    ; YES - GO SPECIAL
 09FA 23                        INX H           ; NO - WAS LAST 2
 09FB AF                        XRA A
 09FC BE                        CMP M           ; SEE IF TWOFLG CLEAR
 09FD C22F0A                    JNZ NEW2MSG     ; THIS IS COUNT CHAR
 0A00 78        LAST22BACK:     MOV A,B         ; CHAR IN ACCUM AGAIN
 0A01 0600                      MVI B,0         ; SET UP TO PUT IN BUFF


AVOCET SYSTEMS 8085/Z80 ASSEMBLER -  VERSION 1.05M  SERIAL #00411

SOURCE FILE NAME: EQUATES.ASM                                       PAGE 45
 RECEIVE MESSAGE INTERRUPT HANDLERS 

 0A03 EB                        XCHG            ; SAVE TWOFLG ADDRESS 
 0A04 210088                    LXI H,RCV2BUFF
 0A07 09                        DAD B           ; CURRENT BUFFER ADDRESS
 0A08                                   ; IN HL
 0A08 77                        MOV M,A         ; PUT CHAR INTO BUFFER
 0A09 79                        MOV A,C         ; INCREMENT HI PTR
 0A0A 3C                        INR A
 0A0B 32008B                    STA RCV2FLGS    ; SAVE NEW HI PTR
 0A0E EB                        XCHG            ; FLAGS BACK IN HL
 0A0F 23                        INX H           ; ADDRESS OF COUNTER
 0A10 34                        INR M           ; INCREMENT COUNTER
 0A11 7E                        MOV A,M         ; NEW COUNTER IN A
 0A12 23                        INX H           ; ADDRESS OF COUNT
 0A13 BE                        CMP M           ; COMPARE COUNTER & CNT
 0A14 CA530A                    JZ EOM2HNDLER   ; CNTR = CNT MEANS
 0A17                                           ; MESSAGE COMPLETE
 0A17 3E20      G2RCVBACK:      MVI A,PICRESET  ; REENABLE THE PIC
 0A19                                           ; INTERRUPTS
 0A19 D3E6                      OUT PICPORT
 0A1B E1                        POP H           ; RESTORE
 0A1C D1                        POP D
 0A1D C1                        POP B
 0A1E F1                        POP PSW
 0A1F FB                        EI
 0A20 C9                        RET
                
 0A21 23        TWO2HNDLR:      INX H           ; ADDRESS OF TWOFLG 
 0A22 AF                        XRA A
 0A23 BE                        CMP M           ; WAS LAST A TWO?
 0A24 3E00                      MVI A,0         ; CLEAR TWO FLG
 0A26                                           ; BUT DON'T CHANGE 
 0A26                                           ; STATUS
 0A26 77                        MOV M,A
 0A27 C2000A                    JNZ LAST22BACK  ; LAST WAS A TWO -
 0A2A                                           ; GO SAVE THIS ONE
 0A2A 2F                        CMA             ; LAST WASN'T - SET
 0A2B                                           ; TWOFLG
 0A2B 77                        MOV M,A
 0A2C C3170A                    JMP G2RCVBACK   ; DON'T PROCESS FIRST
 0A2F                                           ; TWO
                
 0A2F 77        NEW2MSG:        MOV M,A         ; CLEAR TWOFLG
 0A30 23                        INX H           ; ADDRESS OF CNTR
 0A31 3C                        INR A           ; SET CNTR = 1
 0A32 77                        MOV M,A
 0A33 23                        INX H           ; ADDRESS OF COUNT
 0A34 70                        MOV M,B         ; CNT = CHAR
 0A35 79                        MOV A,C         ; INCREMENT HIPTR
 0A36 3C                        INR A
 0A37 32008B                    STA RCV2FLGS
 0A3A 23                        INX H           ; TO STRTMSG


AVOCET SYSTEMS 8085/Z80 ASSEMBLER -  VERSION 1.05M  SERIAL #00411

SOURCE FILE NAME: EQUATES.ASM                                       PAGE 46
 RECEIVE MESSAGE INTERRUPT HANDLERS 

 0A3B 71                        MOV M,C         ; CURRENT POINTER INTO
 0A3C                                           ; STRTMSG
 0A3C 78                        MOV A,B         ; PUT CHARACTER INTO 
 0A3D                                           ; BUFFER
 0A3D 0600                      MVI B,0
 0A3F EB                        XCHG
 0A40 210088                    LXI H,RCV2BUFF
 0A43 09                        DAD B
 0A44 77                        MOV M,A
 0A45 EB                        XCHG            ; CHK SYNC AND INCREMENT
 0A46 23                        INX H           ; FAIL COUNT IF THIS
 0A47 AF                        XRA A           ; IS A RESYNC
 0A48 BE                        CMP M
 0A49 36FF                      MVI M,0FFH      ; SET SYNC FLAG
 0A4B CA170A                    JZ G2RCVBACK    
 0A4E 23                        INX H
 0A4F 34                        INR M
 0A50 C3170A                    JMP G2RCVBACK   ; READY FOR NEXT
                
 0A53 11308A    EOM2HNDLR:      LXI D,MSGQHIPTR ; ADDRESS OF QUEUE HI
 0A56                                           ; SLOT POINTER
 0A56 1A                        LDAX D          ; GET THE POINTER
 0A57 4F                        MOV C,A         ; SAVE IN C FOR ADDRESS
 0A58                                           ; CALCULATION
 0A58 C602                      ADI 2           ; NEW HI POINTER FOR NEXT TIME
 0A5A E61F                      ANI 01FH        ; 16 TWO BYTE SLOTS
 0A5C 1B                        DCX D           ; CHECK AGAINST LO PTR
 0A5D EB                        XCHG
 0A5E BE                        CMP M           ; 
 0A5F CA8103                    JZ FATALFAULT   ; QUEUE FULL SOMETHING 
 0A62                                           ; BADLY WRONG
 0A62 23                        INX H           ; SAVE NEW POINTER
 0A63 77                        MOV M,A
 0A64 21608B                    LXI H,MSGQUE    ;
 0A67 0600                      MVI B,0
 0A69 09                        DAD B           ; HL HAS MESSAGE QUEUE
 0A6A                                           ; SLOT ADDRESS
 0A6A 3E02                      MVI A,2         ; THIS IS CHANNEL 2
 0A6C 77                        MOV M,A         ; PUT IN CHANNEL #
 0A6D 23                        INX H           ; ADDRESS OF PTR BYTE
 0A6E 13                        INX D
 0A6F 1A                        LDAX D
 0A70 77                        MOV M,A
 0A71 AF                        XRA A           ; CLR SYNC FLAG
 0A72 32068B                    STA RCV2FLGS + 6
 0A75 C3170A                    JMP G2RCVBACK   ; ALL DONE
 0A78            ;
 0A78            ;
                
 0A78 F5        CHAN3RCV:       PUSH PSW        ; SAVE ALL
 0A79 C5                        PUSH B


AVOCET SYSTEMS 8085/Z80 ASSEMBLER -  VERSION 1.05M  SERIAL #00411

SOURCE FILE NAME: EQUATES.ASM                                       PAGE 47
 RECEIVE MESSAGE INTERRUPT HANDLERS 

 0A7A D5                        PUSH D
 0A7B E5                        PUSH H
                
 0A7C 3A268B                    LDA RCV3FLGS + 6 ; SEE IF SYNC FLAG
 0A7F                                           ; SET
 0A7F B7                        ORA A
 0A80 CA300B                    JZ UP13DAT      ; KEEP STRTMSG UP TO
 0A83                                           ; DATE SO QUEUE WON'T
 0A83                                           ; FILL UP WITH GARBAGE
 0A83 DBD6      UP23DAT:        IN DAT3ADD      ; GET THE CHARACTER
 0A85 47                        MOV B,A         ; SAVE THE CHARACTER
 0A86 21208B                    LXI H,RCV3FLGS
 0A89 7E                        MOV A,M         ; HIPTR IN C & ACCUM
 0A8A 4F                        MOV C,A
 0A8B 3C                        INR A
 0A8C 23                        INX H           ; NOW LOPTR    
 0A8D BE                        CMP M           ; NO ROOM IF HI + 1 = LO
 0A8E CAB40A                    JZ G3RCVBACK
 0A91 78                        MOV A,B         ; GET CHAR IN A
 0A92 FE02                      CPI 2           ; IS IT A TWO?
 0A94 CABE0A                    JZ TWO3HNDLR    ; YES - GO SPECIAL
 0A97 23                        INX H           ; NO - WAS LAST 2
 0A98 AF                        XRA A
 0A99 BE                        CMP M           ; SEE IF TWOFLG CLEAR
 0A9A C2CC0A                    JNZ NEW3MSG     ; THIS IS COUNT CHAR
 0A9D 78        LAST23BACK:     MOV A,B         ; CHAR IN ACCUM AGAIN
 0A9E 0600                      MVI B,0         ; SET UP TO PUT IN BUFF
 0AA0 EB                        XCHG            ; SAVE TWOFLG ADDRESS 
 0AA1 210089                    LXI H,RCV3BUFF
 0AA4 09                        DAD B           ; CURRENT BUFFER ADDRESS
 0AA5                                           ; IN HL
 0AA5 77                        MOV M,A         ; PUT CHAR INTO BUFFER
 0AA6 79                        MOV A,C         ; INCREMENT HI PTR
 0AA7 3C                        INR A
 0AA8 32208B                    STA RCV3FLGS    ; SAVE NEW HI PTR
 0AAB EB                        XCHG            ; FLAGS BACK IN HL
 0AAC 23                        INX H           ; ADDRESS OF COUNTER
 0AAD 34                        INR M           ; INCREMENT COUNTER
 0AAE 7E                        MOV A,M         ; NEW COUNTER IN A
 0AAF 23                        INX H           ; ADDRESS OF COUNT
 0AB0 BE                        CMP M           ; COMPARE COUNTER & CNT
 0AB1 CAF00A                    JZ EOM3HNDLER   ; CNTR = CNT MEANS
 0AB4                                           ; MESSAGE COMPLETE
 0AB4 3E20      G3RCVBACK:      MVI A,PICRESET  ; REENABLE THE PIC
 0AB6                                           ; INTERRUPTS
 0AB6 D3E6                      OUT PICPORT
 0AB8 E1                        POP H           ; RESTORE
 0AB9 D1                        POP D
 0ABA C1                        POP B
 0ABB F1                        POP PSW
 0ABC FB                        EI


AVOCET SYSTEMS 8085/Z80 ASSEMBLER -  VERSION 1.05M  SERIAL #00411

SOURCE FILE NAME: EQUATES.ASM                                       PAGE 48
 RECEIVE MESSAGE INTERRUPT HANDLERS 

 0ABD C9                        RET
                
 0ABE 23        TWO3HNDLR:      INX H           ; ADDRESS OF TWOFLG 
 0ABF AF                        XRA A
 0AC0 BE                        CMP M           ; WAS LAST A TWO?
 0AC1 3E00                      MVI A,0         ; CLEAR TWO FLG
 0AC3                                           ; BUT DON'T CHANGE 
 0AC3                                           ; STATUS
 0AC3 77                        MOV M,A
 0AC4 C29D0A                    JNZ LAST23BACK  ; LAST WAS A TWO -
 0AC7                                           ; GO SAVE THIS ONE
 0AC7 2F                        CMA             ; LAST WASN'T - SET
 0AC8                                           ; TWOFLG
 0AC8 77                        MOV M,A
 0AC9 C3B40A                    JMP G3RCVBACK   ; DON'T PROCESS FIRST
 0ACC                                           ; TWO
                
 0ACC 77        NEW3MSG:        MOV M,A         ; CLEAR TWOFLG
 0ACD 23                        INX H           ; ADDRESS OF CNTR
 0ACE 3C                        INR A           ; SET CNTR = 1
 0ACF 77                        MOV M,A
 0AD0 23                        INX H           ; ADDRESS OF COUNT
 0AD1 70                        MOV M,B         ; CNT = CHAR
 0AD2 79                        MOV A,C         ; INCREMENT HIPTR
 0AD3 3C                        INR A
 0AD4 32208B                    STA RCV3FLGS
 0AD7 23                        INX H           ; TO STRTMSG
 0AD8 71                        MOV M,C         ; CURRENT POINTER INTO
 0AD9                                           ; STRTMSG
 0AD9 78                        MOV A,B         ; PUT CHARACTER INTO 
 0ADA                                           ; BUFFER
 0ADA 0600                      MVI B,0
 0ADC EB                        XCHG
 0ADD 210089                    LXI H,RCV3BUFF
 0AE0 09                        DAD B
 0AE1 77                        MOV M,A
 0AE2 EB                        XCHG            ; CHK SYNC AND INCREMENT
 0AE3 23                        INX H           ; FAIL COUNT IF THIS
 0AE4 AF                        XRA A           ; IS A RESYNC
 0AE5 BE                        CMP M
 0AE6 36FF                      MVI M,0FFH      ; SET SYNC FLAG
 0AE8 CAB40A                    JZ G3RCVBACK    
 0AEB 23                        INX H
 0AEC 34                        INR M
 0AED C3B40A                    JMP G3RCVBACK   ; READY FOR NEXT
                
 0AF0 11308A    EOM3HNDLR:      LXI D,MSGQHIPTR ; ADDRESS OF QUEUE HI
 0AF3                                           ; SLOT POINTER
 0AF3 1A                        LDAX D          ; GET THE POINTER
 0AF4 4F                        MOV C,A         ; SAVE IN C FOR ADDRESS
 0AF5                                           ; CALCULATION


AVOCET SYSTEMS 8085/Z80 ASSEMBLER -  VERSION 1.05M  SERIAL #00411

SOURCE FILE NAME: EQUATES.ASM                                       PAGE 49
 RECEIVE MESSAGE INTERRUPT HANDLERS 

 0AF5 C602                      ADI 2           ; NEW HI POINTER FOR NEXT TIME
 0AF7 E61F                      ANI 01FH        ; 16 TWO BYTE SLOTS
 0AF9 1B                        DCX D           ; CHECK AGAINST LO PTR
 0AFA EB                        XCHG
 0AFB BE                        CMP M           ; 
 0AFC CA8103                    JZ FATALFAULT   ; QUEUE FULL SOMETHING 
 0AFF                                           ; BADLY WRONG
 0AFF 23                        INX H           ; SAVE NEW POINTER
 0B00 77                        MOV M,A
 0B01 21608B                    LXI H,MSGQUE    ;
 0B04 0600                      MVI B,0
 0B06 09                        DAD B           ; HL HAS MESSAGE QUEUE
 0B07                                           ; SLOT ADDRESS
 0B07 3E03                      MVI A,3         ; THIS IS CHANNEL 3
 0B09 77                        MOV M,A         ; PUT IN CHANNEL #
 0B0A 23                        INX H           ; ADDRESS OF PTR BYTE
 0B0B 13                        INX D
 0B0C 1A                        LDAX D
 0B0D 77                        MOV M,A
 0B0E AF                        XRA A           ; CLR SYNC FLAG
 0B0F 32268B                    STA RCV3FLGS + 6
 0B12 C3B40A                    JMP G3RCVBACK   ; ALL DONE
                
                
 0B15 3AC08A    UP10DAT:        LDA RCV0FLGS
 0B18 32C58A                    STA RCV0FLGS + 5
 0B1B C3AC08                    JMP UP20DAT 
                
 0B1E 3AE08A    UP11DAT:        LDA RCV1FLGS
 0B21 32E58A                    STA RCV1FLGS + 5
 0B24 C34909                    JMP UP21DAT
                
 0B27 3A008B    UP12DAT:        LDA RCV2FLGS
 0B2A 32058B                    STA RCV2FLGS + 5
 0B2D C3E609                    JMP UP22DAT 
                
 0B30 3A208B    UP13DAT:        LDA RCV3FLGS
 0B33 32258B                    STA RCV3FLGS +5
 0B36 C3830A                    JMP UP23DAT


AVOCET SYSTEMS 8085/Z80 ASSEMBLER -  VERSION 1.05M  SERIAL #00411

SOURCE FILE NAME: EQUATES.ASM                                       PAGE 50
 544 BOARD INITIALIZATION ROUTINE 

                                INCLUDE INIT.ASM
                
                
                
                
 0B39            ; PREVENT MASTER FROM INTERRUPTING UNTIL THRU DONE
 0B39            ; INITIALIZING
                
 0B39 3A0080    INIT:           LDA BASEADD
 0B3C 3EFF                      MVI A,0FFH
 0B3E 320080                    STA BASEADD
 0B41 320081                    STA OUTBUFFER
 0B44 3E40                      MVI A,STROBELO
 0B46 30                        SIM
                
 0B47                   ;INITIALIZE INTERRUPT 5.5 ( FLAGINT )
                
 0B47 3E0E                      MVI A,SIMINIT   ;ENABLE 5.5 INT
 0B49 30                        SIM
                
 0B4A                   ; INITIALIZE PPI
 0B4A 3E41                      MVI A,41H
 0B4C D3E8                      OUT 0E8H
 0B4E 3EC0                      MVI A,0C0H
 0B50 D3E9                      OUT 0E9H
                
 0B52                   ; INITIALIZE PIC
                
 0B52 3E52                      MVI A,ICW1
 0B54 D3E6                      OUT PICPORT
                
 0B56 3E00                      MVI A,ICW2
 0B58 D3E7                      OUT PICMASK
                
 0B5A 3EFF                      MVI A,0FFH
 0B5C D3E7                      OUT PICMASK
                
 0B5E 3E20                      MVI A,PICRESET
 0B60 D3E6                      OUT PICPORT
                
 0B62                   ; INITIALIZE FLAGS AND POINTERS
                
 0B62 AF                        XRA A
 0B63 320182                    STA SND0BUFF + 1
 0B66 320183                    STA SND1BUFF + 1
 0B69 320184                    STA SND2BUFF + 1
 0B6C 320185                    STA SND3BUFF + 1
                
 0B6F 32208A                    STA OUT544
 0B72 32218A                    STA OUT544 + 1
 0B75 32308A                    STA MSGQHIPTR


AVOCET SYSTEMS 8085/Z80 ASSEMBLER -  VERSION 1.05M  SERIAL #00411

SOURCE FILE NAME: EQUATES.ASM                                       PAGE 51
 544 BOARD INITIALIZATION ROUTINE 

 0B78 32318A                    STA MSGQLOPTR
                
 0B7B 3E01                      MVI A,1
 0B7D 32408A                    STA SND0FLGS
 0B80 32608A                    STA SND1FLGS
 0B83 32808A                    STA SND2FLGS
 0B86 32A08A                    STA SND3FLGS
                
 0B89 AF                        XRA A
 0B8A 32418A                    STA SND0FLGS + 1
 0B8D 32428A                    STA SND0FLGS + 2
 0B90 32618A                    STA SND1FLGS + 1
 0B93 32628A                    STA SND1FLGS + 2
 0B96 32818A                    STA SND2FLGS + 1
 0B99 32828A                    STA SND2FLGS + 2
 0B9C 32A18A                    STA SND3FLGS + 1
 0B9F 32A28A                    STA SND3FLGS + 2
                
 0BA2 32C08A                    STA RCV0FLGS
 0BA5 32C18A                    STA RCV0FLGS + 1
 0BA8 32C28A                    STA RCV0FLGS + 2
 0BAB 32C58A                    STA RCV0FLGS + 5
 0BAE 32C68A                    STA RCV0FLGS + 6
 0BB1 32C78A                    STA RCV0FLGS + 7
                
 0BB4 32E08A                    STA RCV1FLGS
 0BB7 32E18A                    STA RCV1FLGS + 1
 0BBA 32E28A                    STA RCV1FLGS + 2
 0BBD 32E58A                    STA RCV1FLGS + 5
 0BC0 32E68A                    STA RCV1FLGS + 6
 0BC3 32E78A                    STA RCV1FLGS + 7
 0BC6                           
 0BC6 32008B                    STA RCV2FLGS
 0BC9 32018B                    STA RCV2FLGS + 1
 0BCC 32028B                    STA RCV2FLGS + 2
 0BCF 32058B                    STA RCV2FLGS + 5
 0BD2 32068B                    STA RCV2FLGS + 6
 0BD5 32078B                    STA RCV2FLGS + 7
                
 0BD8 32208B                    STA RCV3FLGS
 0BDB 32218B                    STA RCV3FLGS + 1
 0BDE 32228B                    STA RCV3FLGS + 2
 0BE1 32258B                    STA RCV3FLGS + 5
 0BE4 32268B                    STA RCV3FLGS + 6
 0BE7 32278B                    STA RCV3FLGS + 7
                
 0BEA 320080                    STA BASEADD     ; TELL THE MASTER CPU WER'E
 0BED 320081                    STA OUTBUFFER   ; READY TO GO TO WORK
                
 0BF0 FB                        EI
                


AVOCET SYSTEMS 8085/Z80 ASSEMBLER -  VERSION 1.05M  SERIAL #00411

SOURCE FILE NAME: EQUATES.ASM                                       PAGE 52
 544 BOARD INITIALIZATION ROUTINE 

 0BF1 C30001                    JMP MAIN
                
 0000                           END


AVOCET SYSTEMS 8085/Z80 ASSEMBLER -  VERSION 1.05M  SERIAL #00411

SOURCE FILE NAME: EQUATES.ASM                                       PAGE 53
---- SYMBOL TABLE ----

ACK      034B          CLN21BFR 02CB          MSGQHIPT 8A30
ACKCHK   0117          CLN22BFR 02EA          MSGQLOPT 8A31
ACKNAKFL 8A22          CLN23BFR 02E4          MSGQUE   8B60
ACKNAKHI 8A21          CLN30BFR 02EC          MSGSENT  00FF
ACKNAKID 001A          CLN31BFR 02FA          MSGSENTI 001B
ACKNAKLO 8A20          CLN32BFR 0319          NACK     0343
ACKNAKQU 8B40          CLN33BFR 0313          NEW0MSG  08F5
BASEADD  8000          CLR0FLG  0753          NEW1MSG  0992
CALCSNDC 04F6          CLR1FLG  07B1          NEW2MSG  0A2F
CH0INIT  03A5          CLR2FLG  080F          NEW3MSG  0ACC
CH0PIT   00DB          CLR3FLG  086D          NOP      037E
CH0RCVDI 0001          CMDBYTE  014F          NOT0TWO  0756
CH0RCVEN 00FE          CNT0     00D8          NOT1TWO  07B4
CH0SNDDI 0002          CNT1     00D9          NOT2TWO  0812
CH0SNDEN 00FD          CNT2     00DA          NOT3TWO  0870
CH0SNDST 047E          CNT3     00DC          OUT1CRCL 01C7
CH1INIT  03D4          CRC1SNDL 0509          OUT544   8A20
CH1PIT   00DB          CRCTABLE 0529          OUTBUFFE 8100
CH1RCVDI 0004          DAT0ADD  00D0          OUTCRC   01B6
CH1RCVEN 00FB          DAT1ADD  00D2          OUTCRCHI 8A32
CH1SNDDI 0008          DAT2ADD  00D4          OUTCRCLO 8A33
CH1SNDEN 00F7          DAT3ADD  00D6          PICMASK  00E7
CH1SNDST 049C          EOM0HNDL 0919          PICPORT  00E6
CH2INIT  0403          EOM1HNDL 09B6          PICRESET 0020
CH2PIT   00DB          EOM2HNDL 0A53          PROC0    0192
CH2RCVDI 0010          EOM3HNDL 0AF0          PROC0LOO 01A8
CH2RCVEN 00EF          FATALFAU 0381          PROC1    01F3
CH2SNDDI 0020          FLAGINT  031E          PROC1LOO 0209
CH2SNDEN 00DF          FLGRET   034F          PROC2    0217
CH2SNDST 04BA          G0RCVBAC 08DD          PROC2LOO 022D
CH3INIT  0432          G1RCVBAC 097A          PROC3    023B
CH3PIT   00DF          G2RCVBAC 0A17          PROC3LOO 0251
CH3RCVDI 0040          G3RCVBAC 0AB4          RCV0BUFF 8600
CH3RCVEN 00BF          ICW1     0052          RCV0FLGS 8AC0
CH3SNDDI 0080          ICW2     0000          RCV1BUFF 8700
CH3SNDEN 007F          INIT     0B39          RCV1FLGS 8AE0
CH3SNDST 04D8          INITCH   0386          RCV2BUFF 8800
CHAN0RCV 08A1          JP2TABLE 039D          RCV2FLGS 8B00
CHAN1RCV 093E          JP3TABLE 0476          RCV3BUFF 8900
CHAN2RCV 09DB          JP4TABLE 018A          RCV3FLGS 8B20
CHAN3RCV 0A78          JPTABLE  033D          RCV4FLGS 8A00
CHKMSGS  0163          LAST20BA 08C6          RESETBYT 0040
CLN00BFR 025F          LAST21BA 0963          SIMINIT  000E
CLN01BFR 026D          LAST22BA 0A00          SND0BUFF 8200
CLN02BFR 028C          LAST23BA 0A9D          SND0DONE 0762
CLN03BFR 0286          MAIN     0100          SND0FLGS 8A40
CLN10BFR 028E          MAIN1    010A          SND0INT  0729
CLN11BFR 029C          MODE0BYT 0036          SND0RET  0758
CLN12BFR 02BB          MODE1BYT 0076          SND1BUFF 8300
CLN13BFR 02B5          MODE2BYT 00B6          SND1DONE 07C0
CLN20BFR 02BD          MODE3BYT 0036          SND1FLGS 8A60


AVOCET SYSTEMS 8085/Z80 ASSEMBLER -  VERSION 1.05M  SERIAL #00411

SOURCE FILE NAME: EQUATES.ASM                                       PAGE 54
---- SYMBOL TABLE ----

SND1INT  0787          SND4FLGS 8A20          TWO3HNDL 0ABE
SND1RET  07B6          SNDMSG   0461          UP10DAT  0B15
SND2BUFF 8400          START    0000          UP11DAT  0B1E
SND2DONE 081E          STAT0ADD 00D1          UP12DAT  0B27
SND2FLGS 8A80          STAT1ADD 00D3          UP13DAT  0B30
SND2INT  07E5          STAT2ADD 00D5          UP20DAT  08AC
SND2RET  0814          STAT3ADD 00D7          UP21DAT  0949
SND3BUFF 8500          STROBEHI 00C0          UP22DAT  09E6
SND3DONE 087C          STROBELO 0040          UP23DAT  0A83
SND3FLGS 8AA0          TWO0HNDL 08E7          VECTORS  000B
SND3INT  0843          TWO1HNDL 0984          
SND3RET  0872          TWO2HNDL 0A21          
                
***** NO ERRORS DETECTED *****
0B6          SND1DONE 07C0