STB T19 PIVOT ROW JSB DDLD DEF T9 FSB T18 JSB DDST TRANSFORM ELEMENT DEF T9 JMP LINV5 SELECT NEXT TERM * DO ELIMINATION OF ROWS IN * IDENTITY MATRIX. START AT * BEGINNING OF ROW AND LEAVE * ELEMENT UNCHANGED WHEN ZERO * IN PIVOTAL ROW. LIN15 LDA T10 ADDRESS OF STA T5 PIVOTAL ROW LDA T3 CMA,INA SET STA T13 COUNTER LIN18 JSB DDLD DEF T5 ISZ T5 ISZ T5 SZA,RSS SKIP IF ZERO SZB JMP *+2 NOT ZERO JMP LIN17 ZERO FMP T7 MULTIPLY BY THE MULTIPLIER STA T18 STB T19 JSB DDLD DEF T11 FSB T18 JSB DDST DEF T11 LIN17 ISZ T11 ISZ T11 ISZ T13 JMP LIN18 SELECT NEXT TERM JMP LINV4 ELIMINATE NEXT ROW * * ********************************************* ***** SUBROUTINE LWHR ***** ********************************************* *SUBROUTINE COMPUTES ADDRESS OF AN ELEMENT * *IN MATRIX GIVEN BY B2. ROW AND COL VALUES * *ARE SUPPLIED IN A,B. ADDRESS IS LEFT IN A * *ENTRY LWHR2 COMPUTES ADDR IN MAT B3 * ********************************************* * LWHR NOP STB T7 SAVE COLUMN # ADA M1 MPY T3 (A-1)*T3 ADA T7 ADA M1 +(B-1) ALS ADA B2 DDR=B2+2((A-1)*T3+(B-1)) JMP LWHR,I LWHR2 NOP STB T7 ADA M1 MPY T3 ADA T7 ADA M1 ALS ADA B3 JMP LWHR2,I * ** **** RETRIEVE AND STORE SUB-PROGRAM PARAMETERS0**** ** * $ENTR NOP STA SORCE LDB $ENTR,I STB DEST CMB,INB ADB $ENTR ADB M2 CMB,INB STB CNTR ISZ $ENTR .LOOP LDA SORCE,I STA DEST,I LDA SORCE ADA M1 STA SORCE ISZ DEST ISZ CNTR JMP .LOOP JMP $ENTR,I SORCE NOP DEST NOP CNTR NOP EXECR NOP GET RECORD FROM CRT/TICKY-TICKY STB BUFFR STA BUFFL LDA EXECR STA RET LDA .1 STA RCODE LDA O401 STA CONWD JMP IEXEC O401 OCT 401 EXECT NOP GET RECORD FROM PHOTO READER STB BUFFR CMA,INA STA BUFFL LDA EXECT STA RET LDA .1 STA RCODE LDA .5 STA CONWD JMP IEXEC EXECS NOP SET END OF TAPE JSB EXEC DEF *+3 DEF .3 DEF CON2 JMP EXECS,I CON2 OCT 000705 * *** ENTER WITH CHARACTER COUNT IN THE 'A' REGISTER *** AND THE BUFFER ADDRESS IN THE 'B' REGISTER. * EXECW NOP WRITE RECORD ON CRT STB BUFFR SSA,RSS CMA,INA STA BUFFL LDA EXECW STA RET LDA .2 STA RCODE LIA 01 AND HALF LDB XIT SSB,RSS JMP *+3 SZA JMP RDYPT LIA 01 AND MNEG SZA LDA .6 SZA,RSS LDA .1 STA CONWD JMP IEXEC * ***(ADDED 7-APR-71) * LPUN NOP SZB JMP LPUN1 LDA D133 STA CNTHO LPUN3 JSB EXEC PUNCH RECORD ON H.S. PUNCH DEF *+5 DEF .2 DEF CON1 DEF BUFR1 DEF .1 ISZ CNTHO JMP LPUN3 JMP LPUN,I CON1 OCT 104 BUFR1 NOP CNTHO NOP LPUN1 STB BUFFR CMA,INA STA BUFFL LDA LPUN STA RET LDA .4 STA CONWD JMP LPUN2 EXECP NOP LIST RECORD ON LINE PRINTER STB BUFFR CMA,INA STA BUFFL LDA EXECP STA RET LDA .6 STA CONWD LPUN2 LDA .2 STA RCODE EXT EXEC IEXEC JSB EXEC DEF *+5 DEF RCODE DEF CONWD BUFFR NOP DEF BUFFL LDA 1 JMP RET,I * * XIT BSS 1 RCODE BSS 1 CONWD BSS 1 BUFFL BSS 1 RET BSS 1 * * ********************************************* * CONSTANTS * ********************************************* * T1 BSS 1 TEMPORARY CONSTANTS T2 BSS 1 T3 BSS 1 T4 BSS 1 T5 BSS 1 T6 BSS 1 T7 BSS 1 T8 BSS 1 T9 BSS 1 T10 BSS 1 T11 BSS 1 T12 BSS 1 T13 BSS 1 T16 DEC +1E-6 ABSOLUTE TOLERANCE T18 BSS 1 T19 BSS 1 LPIV BSS 1 FINIS BSS 700 LWAMA BSS 1 SBUFB BSS 97 SYMTB BSS 64 ** *** PERFORM LDA 1,I ** LDBI NOP LDA B JSB DREAD JMP LDBI,I ** *** PERFORM STA 1,I ** STBI NOP STB TMP2 JSB DSTOR DEF TMP2 JMP STBI,I ** *** PERFORM LDA TEMPS,I ** LDTMP NOP LDA TEMPS JSB DREAD JMP LDTMP,I HED DISK BUFFERING ROUTINES * ************************************************************* **** DISK BUFFER SUBROUTINES ****** ************************************************************* * ADDRESS CONVERSION SUBROUTINE * ENTER WITH ADDRESS IN A REG * ACON NOP CLB STB SCNT SET SECTOR COUNT TO ZERO LDB FTRAK STB TCNT SET TRACK COUNT TO START OF W.A. SSA ADDR > 32767 JSB ERROR NO, ERROR! DIA1 ADA M3072 COMPUTE TRACK ADDR. SSA,RSS JMP INCTR ADA .3072 DIA2 ADA M128 COMPUTE SECTOR ADDR. SSA,RSS JMP INCSC JMP ACON,I * * INCTR ISZ TCNT JMP DIA1 * INCSC ISZ SCNT LDB SCNT CPB SIZE JSB ITRK JMP DIA2 * ITRK NOP ISZ TCNT CLB STB SCNT JMP ITRK,I * * SCNT BSS 1 TCNT BSS 1 TMP BSS 1 .128 EQU B200 .3072 DEC 3072 M128 DEC -128 M3072 DEC -3072 TMP1 BSS 1 TMP2 BSS 2 TMP3 BSS 1 TMP4 BSS 1 TMP5 BSS 1 SIZE BSS 1 # OF SECTORS PER DISK TRACK CW1 OCT 102 * * SUB TO READ INTERMEDIATE CODE FROM DISK BUFFER * READ1 NOP JSB EXEC DEF *+7 DEF .1 DEF CW1 DEF BGNPG,I DEF BFRL DEF TCNT DEF SCNT JMP READ1,I ** * STORE INTERMEDIATE CODE AT VIRTUAL ADDRESS ** DSTOR NOP STB TMP SAVE A AND B STA TMP1 PROGRAM PARAMETERS LDA DSTOR,I LDA 0,I GET VIRTUAL ADDR ISZ DSTOR INCREMENT RETURN (P+2) STA TMP4 SAVE VIRTUAL ADDRESS JSB FNDPG FIND DISK PAGE CORRES. TO ADDR. LDB PGPT1 BOTH CORE PAGES SAME? CPB PGPT2 JMP DBLWR YES, WRITE DATA TO BOTH LDB TMP1 NO, WRITE TO 1 STB 0,I LDB TMP RESTORE (A) & (B) LDA TMP1 JMP DSTOR,I * DBLWR LDA PGPT1 WRITE SAME INFO TO BOTH CMA,INA PAGES ADA TMP4 ADA PG1 LDB TMP1 GET THE DATA STB 0,I STORE IN FIRST PAGE ADA BFRL INCREMENT ADDR TO PAGE 2 STB 0,I STORE IN SECOND PAGE LDB TMP RESTORE (A) & (B) LDA TMP1 JMP DSTOR,I *** ** READ INTERMEDIATE CODEVIRTUAL ADDRESS *** DREAD NOP STB TMP SAVE B STA TMP4 SAVE VIRTUAL ADDR JSB FNDPG FIND DISK PAGE CORRES. TO ADDR. LDA 0,I PICK UP DATA AT VIRTUAL ADDRESS LDB TMP RESTORE B JMP DREAD,I *** ** FIND AND LOAD DISK PAGE CORRESPONDING TO ** VIRTUAL ADDRESS *** FNDPG NOP LDA TMP4 V.A. < END OF IM CODE STORAGE? CMA ADA PBPTR SSA JMP FND2 NO, SET POINTERS FOR PAGE 2 JMP FND1 YES, SET POINTERS FOR PAGE 1 FND3 LDA TMP4 CMA VIRTUAL ADDRESS >= ADA PGPTR BEGINNING OF CURRENT PAGE SSA,RSS JSB SWAP NO, GET PROPER PAGE LDA TMP4 YES, VIRTUAL ADDRESS > CMA END OF CURRENT PAGE? ADA PGPTR ADA BFRL SSA JSB SWAP YES, GET PROPER PAGE LDA PGPTR NO, COMPUTE CMA,INA ADA TMP4 CORE (DISK) BUFFER ADDRESS ADA BGNPG JMP FNDPG,I FND1 LDA PGPT1 STA PGPTR LDA PG1 STA BGNPG LDA PT1 STA PGPT JMP FND3 FND2 LDA PGPT2 STA PGPTR LDA PG2 STA BGNPG LDA PT2 STA PGPT JMP FND3 *** ** FIND AND LOAD DISK PAGES *** SWAP NOP CLA INITIALIZE PAGE POINTER SWP1 STA TMP5 CMA,INA ADA TMP4 VIRTUAL ADDR. > PAGE POINTER? SSA JMP SWP2 NO, EXIT WITH ADDR LDA TMP5 YES, INCREMENT PAGE POINTER ADA BFRL BY BUFFER LENGTH JMP SWP1 CHECK AGAIN SWP2 LDA BFRL DECREMENT PAGE POINTER BY CMA,INA 1 BUFFER LENGTH ADA TMP5 STA TMP5 AND SAVE LDA PGPTR GET ADDRESS OF CURRENT CORE RES PAGE JSB ACON JSB EXEC RETURN TO DISK DEF *+7 DEF .2 DEF CW1 DEF BGNPG,I DEF BFRL DEF TCNT DEF SCNT LDA TMP5 GET ADDRESS OF NEW CORE RES PAGE STA PGPT,I STORE IN POINTER STA PGPTR JSB ACON JSB READ1 FETCH PAGE FROM DISK JMP SWAP,I SVOP1 BSS 2 SVOP2 BSS 2 *************************************** **** SUBROUTINE DISK DOUBLE LOAD******* *************************************** * PERFORM DLD ADR,I * * CALLING SEQUENCE: JSB DDLD * DEF ADR * *************************************** * DDLD NOP LDA DDLD,I GET DISK ADR LDA A,I AND INF REMOVE V.A. BIT STA VA AND SAVE ISZ DDLD INCR RETURN (P+2) JSB DREAD STA SV.LO ISZ VA INCR DISK ADR LDA VA JSB DREAD LDB A LDA SV.LO JMP DDLD,I RETURN * VA BSS 1 SV.LO BSS 1 SPC 4 *********************************************** *****SUBROUTINE DISK DOUBLE STORE************** *********************************************** * * PERFORM DST ADR,I * * CALLING SEQUENCE: JSB DDST * DEF ADR * *********************************************** * DDST NOP DST SVOP1 SAVE OPERAND LDA DDST,I GET DISK ADR LDA A,I AND INF STA VA AND SAVE ISZ DDST INCR RETURN (P+2) LDA SVOP1 JSB DSTOR DEF VA ISZ VA LDA SVOP1+1 JSB DSTOR DEF VA DLD SVOP1 RESTORE (A) & (B) JMP DDST,I ************************************** *** SUBROUTINE FETCH PARAMETER *** *************************************** * * FETCHES PARAMETERS AT ADDRESSES * EITHER ON DISK OR IN CORE * * CALLING SEQUENCE: JSB F/PAR * DEF ADR * * WHERE ADR IS THE ADDRESS OF THE PARAMETER POINTER * *************************************** * F/PAR NOP LDA F/PAR,I ISZ F/PAR LDA A,I STA B GET PARAMETER ADDRESS AND SAVE AND INF STA P/ADR SSB,RSS JMP *+4 JSB DDLD YES, FETCH PAR FROM DISK DEF P/ADR JMP F/PAR,I DLD P/ADR,I FETCH PAR FROM CORE JMP F/PAR,I P/ADR EQU MVTOC * *********************** * SUBROUTINE FLOATING ADD * *********************** * * EXECUTE FAD ADR,I * * ADR= ADDRESS OF 2ND OPERAND. MAY BE * IN CORE OR ON DISK * CALLING SEQUENCE: * * JSB .FAD. * DEF ADR * * IF BIT #15 OF ADR IS SET 2ND * OPERAND IS ASSUMED TO BE ON DISK. * * ********************** .FAD. NOP DST SVOP1 SAVE OPERAND # 1 CLA SELECT ADD OP. JSB ARITH GO DO IT ISZ .FAD. INCREMENT RETURN JMP .FAD.,I * * **************************** * SUBROUTINE FLOATING SUBTRACT * **************************** * * SEE FLOATING ADD FOR DESCRIPTION * * ***************************** * .FSB. NOP DST SVOP1 SAVE OPERAND # 1 LDA .3 SELECT SUBTRACT OP. JSB ARITH GO DO IT ISZ .FSB. INCREMENT RETURN JMP .FSB.,I * * **************************** * SUBROUTINE FLOATING MULTIPLY * **************************** * * SEE FLOATING ADD FOR DESCRIPTION * * **************************** * .FMP. NOP DST SVOP1 SAVE OPERAND # 1 LDA .6 SELECT MULTIPLY OP. JSB ARITH GO DO IT ISZ .FMP. INCREMENT RETURN JMP .FMP.,I * * ************************** * SUBROUTINE FLOATING DIVIDE * ************************** * * SEE FLOATING ADD FOR DESCRIPTION * * *************************** * .FDV. NOP DST SVOP1 SAVE OPERAND # 1 LDA .9 SELECT DIVIDE OP. JSB ARITH GO DO IT ISZ .FDV. INCREMENT RETURN JMP .FDV.,I * * ***************************** * GENERAL ARITHMETIC SUBROUTINE * ***************************** * * EXECUTES AN ARITHMETIC OPERATION BETWEEN * DATA IN THE A & B REGISTERS AND DATA STORED * IN CORE OR ON THE DISK. THE RESULT IS RETURNED * IN THE A & B REGISTERS. * * ****************************** * ARITH NOP ADA .TADR COMPUTE ADDRESS OF ARITH OP. STA OPMOD AND SAVE IT LDA ARITH GET ADDRESS OF ADA M5 PARAMETER LDA A,I ADDRESS LDA A,I SSA,RSS MAT. FLAG SET? JMP ARTH0 NO, PROCESS NORMALLY AND INF YES, 2ND OPERAND IS ON DISK LDA A,I GET PARAMETER ADDRESS JMP ARTH3 GO TO GET 2ND OPERAND ARTH0 LDA A,I GET PARATER ADDRESS SSA,RSS 2ND OPERAND ON DISK JMP ARTH1 NO, FETCH IT FROM CORE ARTH3 JSB FTHOP YES, FETCH IT FROM DISK JMP ARTH2 ARTH1 DLD A,I FETCH 2ND OPERAND FROM CORE ARTH2 DST SVOP2 SAVE TEMPORARILY DLD SVOP1 GET 1ST OPERAND JMP *+1,I GO PERFORM OPERATION OPMOD NOP FAD SVOP2 JMP ARITH,I FSB SVOP2 JMP ARITH,I FMP SVOP2 JMP ARITH,I FDV SVOP2 JMP ARITH,I .TADR DEF OPMOD+1 ** *** FETCH OPERAND FROM DISK TO A AND B ** ** *** ADDRESS OF OPERAND INITIALLY IN A REGISTER ** PERFORMS FOLLOWING OPERATIONS ** STA B ** LDA B,I ** INB ** LDB B,I ** ** ALL ADDRESS RELATE TO DISK BUFFER VIRTUAL ADDRESS ** FTHOP NOP AND INF REMOVE D.A. BIT STA B JSB LDBI STA TMP2 INB JSB LDBI LDB A LDA TMP2 JMP FTHOP,I ** ** LDOP2 NOP LDA BINO2 SSA JMP *+3 LDA A,I JMP LDOP2,I JSB DREAD JMP LDOP2,I END ENTRY