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