HRCSR=176510 ; HOST DEVICE NOS HRBUF=176512 HXCSR=176514 HXBUF=176516 TRCSR=177560 ; TERMINAL DEVICE NOS TRBUF=177562 TXCSR=177564 TXBUF=177566 MOV PC,SP ; SET UP SP TO BE BEFORE CODE SUB #2,SP CLR @#HRCSR ; CLEAR DEVICE CSR'S CLR @#HXCSR CLR @#TRCSR CLR @#TXCSR TR:TSTB @#TRCSR ; CHAR READY FROM TERMINAL ? BPL HR HX:TSTB @#HXCSR ; HOST TRANSMITTER READY ? BPL HX MOVB @#TRBUF,@#HXBUF ; TRANSMIT TERMINAL CHAR TO HOST HR:TSTB @#HRCSR ; CHAR READY FROM HOST ? BPL TR JSR PC,HGET ; GET CHAR FROM HOST INTO R0 CMP R0,#1 ; #1 SIGNALS LOAD SEQUENCE BEQ LOAD JSR PC,TPUT ; TRANSMIT HOST CHAR TO TERMINAL BR TR LOAD:CLR R1 ; CHECKSUM JSR PC,HGETW ; READ BYTE COUNT MOV R0,R2 JSR PC,HGETW ; READ LOAD ADDRESS MOV R0,R3 JSR PC,HGETW ; READ START ADDRESS MOV R0,R4 NEXT:JSR PC,HGETB MOVB R0,(R3)+ SOB R2,NEXT ; BYTE COUNT UP ? MOV R1,-(SP) ; SAVE CHECKSUM JSR PC,HGETW ; READ -VE CHECKSUM ADD (SP)+,R0 BEQ OK ; ->OK IF CHECKSUM ZERO MOV #113,R0 ; 'K' JSR PC,TPUT MOV #117,R0 ; 'O' JSR PC,TPUT BR TR OK:MOV #117,R0 ; 'O' JSR PC,TPUT MOV #113,R0 ; 'K' JSR PC,TPUT INC R4 BEQ TR ; NO AUTOMATIC START DEC R4 JMP (R4) ; JUMP TO START ADDRESS HGET:TSTB @#HRCSR ; HOST CHAR READY ? BPL HGET MOV @#HRBUF,R0 ; ANY ERROR BITS WILL SCREW CHECKSUM ! RTS PC TPUT:TSTB @#TXCSR ; TERMINAL TRANSMITTER READY ? BPL TPUT MOV R0,@#TXBUF RTS PC HGETB:JSR PC,HGET SUB #101,R0 ; SUBTRACT 'A' BMI HGETB ; IGNORE UNLESS 'A'<=CHAR<='P' CMP #15,R0 BMI HGETB MOV R0,-(SP) JSR PC,HGET SUB #101,R0 ASL R0 ASL R0 ASL R0 ASL R0 BIS (SP)+,R0 ADD R0,R1 ; ACCUMULATE CHECKSUM RTS PC HGETW:JSR PC,HGETB MOV R0,-(SP) JSR PC,HGETB SWAB R0 BIS (SP)+,R0 RTS PC .END