INIT - INITIALIZE GT40 MACRO %53A(1152) 11:37 1-Feb-81 Page 1 INIT MAC 13-Apr-76 06:27 TITLE INIT - INITIALIZE GT40 INTERN INIT ; ; THIS SUBROUTINE TRANSFERS A MACRO/11 ; PROGRAM TO THE GT40 VIA THE GT40 ; BOOTSTRAP. NOTE THAT THIS IS AN ; ENCODED SIX BIT TRANSFER ; EXTERN SNDCHR ; 000000 T0=0 000001 T1=1 000016 L=16 000017 P=17 000000' 44 07 0 00 000020' BYTEP: POINT 7,PROGRM 000001' 000000 000000 SAVET1: EXP 0 ; TEMP. STORAGE ; 000002' 334 00 0 00 000000 INIT: SKIPA ; F40 AND 000003' 261 17 0 00 000016 PUSH P,L ; FORTRAN-10 COMPATIBLE 000004' 201 16 0 00 000017' MOVEI L,ARGBLK ; SET UP ARG. POINTER 000005' 201 01 0 00 000377 MOVEI T1,^D255 ; 255 BYTES TO SEND 000006' 134 00 0 00 000000' LOOP: ILDB T0,BYTEP ; GET THE NEXT BYTE 000007' 202 00 0 00 000015' MOVEM T0,CHAR ; AND SAVE IN ARGUMENT 000010' 202 01 0 00 000001' MOVEM T1,SAVET1 ; SAVE COUNT REGISTER 000011' 260 17 0 00 000000* PUSHJ P,SNDCHR ; SEND THE CHARACTER 000012' 200 01 0 00 000001' MOVE T1,SAVET1 ; RESTORE COUNT 000013' 367 01 0 00 000006' SOJG T1,LOOP ; LOOP FOR ALL BYTES 000014' 263 17 0 00 000000 POPJ P, ; RETURN TO FORTRAN 000015' 000000 000000 CHAR: EXP 0 000016' 777777 000000 XWD -1,0 ; ARGUMENT BLOCK 000017' 000000 000015' ARGBLK: EXP CHAR PAGE INIT - INITIALIZE GT40 MACRO %53A(1152) 11:37 1-Feb-81 Page 1-1 INIT MAC 13-Apr-76 06:27 ; THE MACRO/11 HANDLER (GT40 RESIDENT) ; 000020' 766457 546200 PROGRM: EXP 766457546200 000021' 100 100 100 100 100 ASCII '@@@@@@@@PB(@E0?1!U\O=>K#O' 000072' 105 040 041 060 103 000073' 100 121 120 103 077 000074' 107 071 102 116 076 000075' 075 076 113 043 117 000076' 057 075 040 110 134 ASCII '/= H\@% @@@P@F@E0?W @@@@@' 000077' 100 045 040 100 100 000100' 100 120 100 106 100 000101' 105 060 077 127 040 000102' 100 100 100 100 100 PAGE INIT - INITIALIZE GT40 MACRO %53A(1152) 11:37 1-Feb-81 Page 1-2 INIT MAC 13-Apr-76 06:27 ; MACRO/11 SOURCE (GTLOAD.P11) ; .TITLE GTLOAD GT40 LOAD HANDLER ;CHAR=%0 ;CSUM=%1 ;BYTECT=%2 ;LOADDR=%3 ;SP=%6 ;PC=%7 ; ; ;GTIS=175610 ; GT40 INPUT STATUS ;GTIB=175612 ; GT40 INPUT BUFFER ;GTOS=175614 ; GT40 OUTPUT STATUS ;GTOB=175616 ; GT40 OUTPUT BUFFER ; ; ; ; THIS IS THE GT40 RESIDENT HANDLER DURING ; ; A LOAD. THIS PROGRAM WOULD BE LOADED ; ; BY THE GT40 BOOTSTRAP (A SIX BIT LOADER) ; ; THIS IS AN EIGHT HANDLER SO TRANSFER ; ; IS SPEEDED UP. THE SECOND ADVANTAGE OF ; ; THIS HANDLER IS THAT IT RETURNS INFORMATION ; ; ABOUT EACH BLOCK, ALLOWING THE HOST (I.E. PDP 10) ; ; BETTER MONITORING OF BLOCK TRANSFERS ; ; ; .=37534 ; FOR 8K GT40 ; ; ;START: MOV #START,SP ; SET UP STACK ;READY: MOVB #'R,CHAR ; 'R' ; JSR PC,SEND ; FOR READY ;GETBLK: CLR CSUM ; CLEAR THE CHECKSUM ; JSR PC,GET ; GET THE FIRST BYTE ; DEC CHAR ; IF NOT A 1 THEN ; BNE GETBLK ; LOOK FOR START ; JSR PC,GET ; GET THE SECOND BYTE ; TSTB CHAR ; IF NOT A NULL THEN ; BNE GETBLK ; LOOK FOR START ; ; ; ; START PROCESSING A VALID BLOCK ; ; ; JSR PC,GET ; GET LOW ORDER BYTE COUNT ; MOV CHAR,BYTECT ; AND SAVE ; JSR PC,GET ; GET HIGH ORDER BYTE COUNT ; SWAB CHAR ; MAKE HIGH ORDER ; BIS CHAR,BYTECT ; FORM COMPLETE BYTE COUNT ; JSR PC,GET ; GET LOW ORDER LOAD ADDRESS ; MOV CHAR,LOADDR ; AND SAVE ; JSR PC,GET ; GET HIGH ORDER LOAD ADDRESS ; SWAB CHAR ; MAKE HIGH ORDER ; BIS CHAR,LOADDR ; FORM COMPLETE LOAD ADDRESS ; ; ; ; IF BYTECT > 6 THEN INTERMEDIATE BLOCK ; ; IF BYTECT = 6 THEN LAST BLOCK ; ; IF BYTECT < 6 THEN ERROR ; ; ; SUB #6,BYTECT ; UPDATE BYTE COUNT ; BLT ERROR ; BAD COUNT INIT - INITIALIZE GT40 MACRO %53A(1152) 11:37 1-Feb-81 Page 1-3 INIT MAC 13-Apr-76 06:27 ; BEQ LAST ; LAST BLOCK ; ; ; ; PROCESS INTERMEDIATE BLOCK ; ; ;NORMAL: JSR PC,GET ; GET THE NEXT BYTE ; MOVB CHAR,(LOADDR)+ ; SAVE THE BYTE, INCREMENT ADDRESS ; DEC BYTECT ; DECREMENT THE BYTE COUNT ; BGT NORMAL ; AND LOOP FOR ENTIRE BLOCK ; JSR PC,GET ; GET THE CHECKSUM ; TSTB CSUM ; IS CHECKSUM ZERO ; BEQ READY ; IF SO CONTINUE WITH NEXT BLOCK ; ; ; ; CHECKSUM ERROR OR BAD BYTE COUNT ; ; ;ERROR: MOVB #'E,CHAR ; 'E' ; JSR PC,SEND ; FOR ERROR ; BR GETBLK ; TRY THE BLOCK AGAIN ; ; ;LAST: JSR PC,GET ; GET THE CHECKSUM ; TSTB CSUM ; WAS IT GOOD ? ; BNE ERROR ; CHECKSUM ERROR ; ; ; ; SELF START OR HALT ; ; ; BIT #1,LOADDR ; EVEN ADDRESS ? ; BEQ TRANSF ; YES ; MOVB #'H,CHAR ; IF ODD THEN 'H' ; JSR PC,SEND ; FOR HALT ; HALT ;TRANSF: MOVB #'S,CHAR ; EVEN ADDRESS SO 'S' ; JSR PC,SEND ; FOR SELF-START ; JMP @LOADDR ; START USERS PROGRAM PAGE INIT - INITIALIZE GT40 MACRO %53A(1152) 11:37 1-Feb-81 Page 1-4 INIT MAC 13-Apr-76 06:27 ; .PAGE ;GET: TSTB @#GTIS ; TEST STATUS - READY ? ; BPL GET ; WAIT UNTIL READY ; MOVB @#GTIB,CHAR ; GET THE CHARACTER ; BIC #177400,CHAR ; CLEAR THE TOP BYTE ; ADD CHAR,CSUM ; AND ADD INTO CHECKSUM ; RTS PC ; RETURN TO CALLER ; ; ;SEND: BIC #177400,CHAR ; CLEAR TOP BYTE OF CHARACTER ; MOVB CHAR,@#GTOB ; SEND THE CHARACTER ;WAIT: TSTB @#GTOS ; WAIT UNTIL CHARACTER ; BPL WAIT ; HAS BEEN SENT ; RTS PC ; RETURN TO CALLER ; ; ; .END START END NO ERRORS DETECTED PROGRAM BREAK IS 000103 CPU TIME USED 00:00.372 17P CORE USED INIT - INITIALIZE GT40 MACRO %53A(1152) 11:37 1-Feb-81 Page S-1 INIT MAC 13-Apr-76 06:27 SYMBOL TABLE ARGBLK 000017' BYTEP 000000' CHAR 000015' INIT 000002' int L 000016 LOOP 000006' P 000017 PROGRM 000020' SAVET1 000001' SNDCHR 000011' ext T0 000000 T1 000001