ASMB,R,L,C * NAME: OUTAB * SOURCE: 92070-18114 * RELOC: 92070-16114 * PGMR: D.J.W. * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1976. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** * * NAM OUTAB,7 92070-1X114 REV.1941 800108 * * * THE OUTAB ROUTINE IS CALLED TO OUTPUT A WORD TO THE OUTPUT * FILE. IF THE WORD IS A BASE PAGE FIXUP, THE VALUE IS OUTPUT TO * DUMMY BASE PAGE AREA, NOT TO THE FILE. IF THE ADDRESS IS A -1 * THEN OUTAB JUST POSTS THE CURRENT RECORD IN MEMORY TO THE DISC * FILE. * * IF THE CALLER ATTEMPTS TO OUTPUT A WORD BEYOND THE MEMORY * BOUNDRIES OUTAB TRANSFERS DIRECTLY TO E.RRR IN LOAD2 SO * THAT ERROR PROCESSING MAY BE DONE. * * IF AN FMP ERROR RESULTS FROM AN FMP CALL, PRCSS OUTPUTS THE * ERROR TO THE LIST DEVICE AND RETURNS CONTROL TO AB.RT IN THE * LOADER MAIN. * * * CALLING SEQUENCE: JSB OUTAB * DEF RETURN * DEF ABADD ABSOLUTE ADDRESS, B-REG * DEF ABWRD ABSOLUTE WORD, A-REG * * ON RETURN: A-REG = FMP ERROR CODE * ENT ABOUT,AFWA,ARECD,CFWA,CRECD,CUREC ENT OUTAB,OUTBP EXT .MVW,AB.RT,E.RRR,FMPER,I.ERR,MXREC EXT ODCB,OFFBP,ONAMR,OUTBF,PGLWA,READF EXT TH2.L,WRITF * A EQU 0 B EQU 1 * ABADD NOP ABSOLUTE ADDRESS ABWRD NOP ABSOLUTE VALUE * OUTAB NOP STB ABADD SAVE ADDRESS STA ABWRD AND VALUE LDA OUTAB,I GET RETURN ADDRESS STA OUTAB AND SET ASIDE SSB IS THIS A POST ? JMP PSTRC YES CMB IS THE ADDRESS STB A (SAVE NEGATIVE VALUE) ADB CFWA BELOW CURRENT MODULE? SSB,RSS WELL?? JMP OUTA3 YES, COULD BE BP OR MAIN FIXUP * STA B IS THIS LARGER THAN THE LAST WORD AVAIL ? ADB PGLWA SSB JMP OVMEM YES, MEMORY OVERFLOW ERROR * ADA TH2.L BEYOND LAST WORD PUT OUT? INA SSA,RSS WELL?? JMP OUTA2 NO, JUST PUT THE WORD TO AAOUT * * ZERO ANY BSS 'S FOUND IN PROGRAM * OUTA1 CLA ZERO'S LDB TH2.L NEXT ADDRESS CPB ABADD THIS THE ADDRESS TO WRITE? JMP OUTA2 YES GO DO IT * JSB AAOUT ELSE SEND A ZERO JMP OUTA1 NO, CHECK IF ANOTHER NEEDED * * DO NORMAL OUTPUT OF A NORMAL INSTRUCTION * OUTA2 LDA ABWRD GET THE WORD LDB ABADD AND THE ADDRESS JSB AAOUT AND SEND IT JMP OUTAB,I RETURN TO CALLER WITH OR WITHOUT ERROR * OVMEM LDA N3 JMP E.RRR * N3 DEC -3 * * BP ADDRESS OR MAIN FIXUP * OUTA3 STA B ADDRESS NOT IN CURRENT MAIN ADA M2000 IN BP? SSA,RSS WELL?? JMP OUTA6 YES GO DO BASE PAGE FIX * * FIXUP OF A MAIN OF A SEGMENTED PROGRAM * ADB AFWA ABSOLUTE BASE-CURRENT ADDRESS SSB IF ABOVE SEGMENT BASE JMP OUTA4 NO, ADDRESS GOOD LDA ERR02 YES, ILLEGAL RECORD ERROR, IRRECOVERABLE. JMP OUTAB,I OUTPUT LOADER ERROR. * OUTA4 LDA ARTAB SET ADDRESSES FOR AAOUT STA RTAB+1 INA STA RTAB+2 SO IT CAN GET BACK TO THE MAIN LDA ABWRD GET THE WORD LDB ABADD AND THE ADDRESS JSB AAOUT PUT IT OUT LDB CRTAB RESTOR ADDRESSES STB RTAB+1 INB STB RTAB+2 CLA JMP OUTAB,I * * BP FIXUP (NOTE WE DON'T GO TO THE DISC YET ) * OUTA6 LDB ABADD ADB OFFBP GET OFFSET INTO PGM. LDA ABWRD GET THE WORD STA B,I STORE IT IN THE BP CLA JMP OUTAB,I * PSTRC CCA JUST POST THE CURRENT RECORD TO THE DISC JSB ABOUT CLA JMP OUTAB,I HED OUTPUT DUMMY BASE PAGE TO THE FILE * * CALLING SEQUENCE: JSB OUTBP * A-REG = LENGTH * B-REG = ADDRESS DUMMY AREA * * ON RETURN: P+1: GOOD RETURN * BPADR BSS 1 OVFLW BSS 1 O200 OCT 200 O177 OCT 177 COUNT NOP * * OUTBP NOP STB BPADR SAVE STARTING ADDRESS CLB DETERMINE LENGTH TO BE OUTPUT DIV O200 CMA SET NEGATIVE COUNT LENGTH IN BLOCKS STA COUNT STB OVFLW SET OVERFLOW AMOUNT INTO LAST BLOCK LDA CFWA CALCULATE RECORD AT WHICH TO BEGIN CMA,INA ADA TH2.L ADA O177 ALF,ALF RAL AND O377 ADA CRECD STARTING RECORD NUMBER * LOOP JSB ABOUT GET CORRECT RECORD IN MEMORY ISZ COUNT RSS JMP LAST LDA BPADR LDB AOUTB JSB .MVW DEF O200 NOP LDA BPADR ADA O200 STA BPADR LDA CUREC INA JMP LOOP * LAST LDB OVFLW SZB,RSS JMP OUTEX STA TEMP LDA BPADR LDB AOUTB JSB .MVW DEF OVFLW NOP LDA TEMP INA OUTEX STA CRECD * ISZ OUTBP JMP OUTBP,I * M2000 OCT 2000 O377 OCT 377 ERR02 DEC 2 * ARTAB DEF *+1 ADDRESS OF MAIN TRIPLET AFWA NOP ABSOLUTE BASE ARECD NOP CRTAB DEF *+1 NORMAL LOADING BASE ADDRESSES CFWA NOP CRECD NOP * RTAB DEF *+1 FWA DEF CFWA NORMAL SET UP OF RECRD DEF CRECD ABOUT LOAD ADDRESSES SKP * * * CALCULATE RECORD AND WORD * FOR PROGRAM ADDRESS * * * CALLING SEQUENCE: JSB AAOUT * A REG = ABSOLUTE WORD * B REG = CORRESPONDING ADDRESS * AAOUT NOP STA TEMPP SAVE THE ABSOLUTE PROG WORD STB TEMPQ AND ITS PROGRAM ADDRESS LDA FWA,I SUBTRACT FWA OF CMA,INA AREA FROM CURRENT ADA B ADD CURRENT RELOCATION ADDRESS CLB DIV O200 ADA RECRD,I STARTING RECORD NUMBER * JSB ABOUT GET DESIRED RECORD IN MEMORY ADB AOUTB GET ADDRESS OF WORD IN OUTPUT BUFFER LDA TEMPP STA B,I LDA TEMPQ ABSOLUTE LOAD ADDRESS INA STA B SAVE. CMA,INA -SUBTRACK THIS ADDRESS ADA TH2.L FROM CURRENT UPPER BOUND, SSA IF CURRENT IS LARGER, * * SET UP TH2.L HIGH LOAD + 1 !!!!!!!!!!!!!!!!! * STB TH2.L SET NEW ADDRESS JMP AAOUT,I * TEMPP NOP TEMPQ NOP SKP * * OUTPUT ABSOLUTE PROG WORD * * * IF THE CURRENT PROGRAM WORD IS TO BE LOCATED IN A DIFFERENT * RECORD FROM THE CURRENT RECORD, THE CURRENT RECORD IS WRITTEN TO * THE FILE AND THE APPROPRIATE RECORD READ. * * * CALLING SEQUENCE: * A-REG = RECORD TO BE UPDATED * * * RETURN: A CONTAINS THE NON-ZERO ERROR CODE, OR ZERO FOR GOOD RETURN * B REG IS NOT CHANGED. * ABOUT NOP CPA CUREC IS THIS RECORD IN MEMORY NOW? JMP ABOUT,I YES, WE'RE IN LUCK! * * RECORD CURRENTLY IN MEMORY IS NOT THE DESIRED RECORD * STA FLAG CHECK FOR A POST ONLY STA REC STB TEMP JSB WRITF NO, NEED TO WRITE CURRENT ONE DEF *+6 DEF ODCB+0 DEF I.ERR FMP ERROR RETURN AOUTB DEF OUTBF+0 DEF ILL DEF CUREC * SSA IS THERE AN ERROR ? JMP ERR YES, TOO BAD ISZ FLAG WAS THIS A POST ONLY ? RSS JMP ABOUT,I YES, RETURN TO CALLER * LDA REC GET DESIRED RECORD STA CUREC SET NEW CURRENT RECORD STA B CMB,INB IS THIS LARGER THAN ANY READ SO FAR ? ADB MXREC SSB,RSS JMP READ NO, SO READ OLD RECORD STA MXREC YES, SO SET UP NEW MAXIMUM JMP NORED AND SKIP THE FILE READ * READ JSB READF NEED TO READ DESIRED RECORD FROM FILE DEF *+7 DEF ODCB+0 DEF I.ERR FMP ERROR RETURN DEF OUTBF+0 OUTPUT BUFFER DEF ILL LENGTH OF BUFFER DEF LENG LENGTH READ DEF REC RECORD TO BE READ * SSA FMP ERROR ? JMP ERR YES * NORED LDB TEMP JMP ABOUT,I * ERR JSB FMPER DEF ONAMR+0 JMP AB.RT * REC NOP CUREC DEC 1 FLAG BSS 1 TEMP NOP TEMPORARY STORAGE FOR B REGISTER LENG NOP BUFFER LENGTH READ ON FMP CALL ILL OCT 200 LENGTH OF OUTBF END