.TITLE OUTPUT SUBROUTINE .SBTTL DOCUMENTATION ; ; AUTHOR: T G KELLY ; DEPARTMENT OF PATHOLOGY ; UNIVERSITY OF SOUTH ALABAMA ; ; DATE: 17-JANUARY-78 ; ; THIS SUBROUTINE TRANSMITS ONE BLOCK (256. WORDS) ; LOCATED IN BUFFER "BUF". A CHECKSUM IS KEPT AND CHECKED ; AT THE END OF EACH BLOCK ; ALL REGISTERS ARE SAFE EXCEPT R0. THE CHECKSUM ERROR IS RETURNED ; IN R0. ; ; SEE VECTOR.MAC FOR FURTHER DOCUMENTATION ; .SBTTL MACRO DEFINITIONS ; .MCALL ..V2..,.REGDEF ..V2.. ;VERSION 2 MACROS .REGDEF ;REGISTER DEFINITIONS ; .MCALL .PRINT,.EXIT ; .MACRO PUSH ARG MOV ARG,-(SP) .ENDM ; .MACRO POP ARG MOV (SP)+,ARG .ENDM ; .SBTTL EQUATES ; RVEC = 300 ;DL RECEIVE VECTOR RBPR = 340 ;INTERRUPT PRIORTY RCSR = 175610 ;RECEIVE STATUS REGISTER RBUF = 175612 ;RECEIVE DATA BUFFER XCSR = 175614 ;TRANSMITTER STATUS REGISTER XBUF = 175616 ;TRANSMITTER DATA BUFFER ; .GLOBL OUTPUT,BUF,XMIT ; .SBTTL MAIN ; OUTPUT: MOV #RINT,@#RVEC ;INSTALL RECEIVE VECTOR MOV #RBPR,@#RVEC+2 ;AND PRIORITY RESEND: MOV #BUF,R0 ;POINTER TO OUTPUT BUFFER CLR CKSUM CLR FLAG MOV #1000,NUMBER ;512.BYTE TRANSFERS TST @#RBUF ;INITIALIZE DONE FLAG BIS #100,@#RCSR ;ENABLE INTERRUPT 1$: INC FLAG ;INDICATE 1 BYTE SENT MOVB (R0),TEMP ADD TEMP,CKSUM MOVB (R0)+,@#XBUF ;SEND BYTE DEC NUMBER BEQ 2$ 3$: TSTB @#XCSR ;TEST TRANSMIT DONE FLAG BPL 3$ BR 1$ MOV #1000,LOOP 2$: TST FLAG ;HAVE WE RECEIVED ALL TRANSMITTED BYTES? BEQ 4$ DEC LOOP ;WAIT A MAXIMUM OF 1000(8) LOOPS BNE 2$ ;FOR FLAG TO BE ZERO BR ERETRN ;TAKE ERROR RETURN 4$: MOV #3,SUMERR TST CKSUM BEQ RETURN ;IF ZERO RETURN TO MAIN PROGRAM DEC SUMERR ;RESEND BUFFER 3 TIMES BEFORE BEQ ERETRN ;FLAGGING ERROR MOV #200,@#XBUF ;SIGNAL ERROR-DATA TO BE RESENT BR RESEND RETURN: CLR R0 ;SIGNAL TRANSMISSION OK JSR R5,XMIT CLR @#RCSR ;DISABLE INTERRUPT CLR R0 ;NO CHECKSUM ERROR RTS R5 ERETRN: .PRINT #ERR1 MOV #1,R0 ;SIGNAL CHECKSUM ERROR RTS R5 ;AND RETURN ERR1: .ASCIZ /CHECKSUM ERROR-THREE ATTEMPTS MADE/ .EVEN FLAG: .WORD 0 CKSUM: .WORD 0 TEMP: .WORD 0 SUMERR: .WORD 0 NUMBER: .WORD 0 LOOP: .WORD 0 ; .SBTTL INTERRUPT SERVICE ROUTINE ; RINT: CLR @#RCSR ;DISABLE INTERRUPT SUB @#RBUF,CKSUM DEC FLAG BIS #100,@#RCSR ;ENABLE INTERRUPT RTI .END