ASMB,R,L,C HED REAL-TIME, DOS, AND IOMEC/DOS WRITE LOAD/GO DISK FILE * * NAME: %WRIT * SOURCE: 92068-18004 * RELOC: PART OF 92067-16268 AND 92067-16035 * PGMR: R.A.G. * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1980. 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 %WRIT,7 92068-1X004 REV.2013 771116 ENT %WRIT,%WRIF ENT %WBUF EXT EXEC EXT $OPSY SPC 1 SPC 1 * PURPOSE: * THIS ROUTINE WRITES RELOCATABLE RECORDS ON DISK. SPC 1 * USES: * THIS ROUTINE IS USED BY COMPILERS TO WRITE THE RELOCATABLE * RECORDS IT PRODUCES ON A DOS, DOS-M, DOS-III, OR RTE * DISC BASED SYSTEM. IN DOS SYSTEMS, THE AREA OF THE DISC IS * CALLED THE "JBIN". IN RTE SYSTEMS, THIS AREA IS CALLED THE * "LG" AREA. THE FORMAT ON DISC IS SAME AS PAPER TAPE FORMAT. SPC 1 * CALLED: * ASSEMBLY ONLY * JSB %WRIT (ALL INITIALIZATION DONE BY SYSTEM) * DEF *+3 * DEF BUFFR FIRST WORD ADDRESS OF WRITE BUFFER * DEF RLEN ADDRESS OF NUMBER OF WORDS TO WRITE * P+4 * * ASSEMBLY ONLY * JSB %WRIF POST ANY PARTIAL RECORD IN MEMORY * P+1 SPC 1 * ERRORS: * IN DOS, DOS-M, DOS-III SYSTEMS THE MESSAGE "JBIN OVF" WILL * APPEAR ON LOGICAL UNIT ONE, IF THE THE JBIN OVERFLOWS. * IN RTE, THE SYSTEM WILL ABORT THE CALLING PROGRAM WITH * AN "IO06" ERROR IF THE "LG" AREA WAS NOT DEFINED, OR * AN "IO09" ERROR IF THE "LG" AREA OVERFLOWS. SPC 1 * NOTES: * "NAM" RELOCATABLE RECORDS MUST ALWAYS START ON A SECTOR BOUNDRY, * THEREFORE, WHENEVER AN "END" RELOCATABLE RECORD IS WRITTEN, THE * ENTRY POINT " %WRIF " MUST BE CALLED TO POST ANY PARTIAL RECORD * STILL IN MEMORY ONTO THE DISK. SPC 1 * THIS ROUTINE COULD BE SHORTEN TO ABOUT 404(8) SPC 1 WROVF CCA LDB O101 ADDR OF JBINS= 101B JSB EXEC SET JBINS=-1 DEF *+2 DEF .M19 -19 JSB EXEC DEF *+5 DEF M2OR2 DEF .1 LUN=1 FOR SYSTEM TTY DEF OVMES FWA OF MESSAGE DEF .M8 -8 FOR 8 CHARS. JMP %WRIF,I EXIT OVMES ASC 4,JBIN OVF .WRIN NOP DOS1 JMP RTEIN * LDA DM8 * STA N LDA 102B JBINC CLB SZA,RSS ANY JBIN TRACKS ? JMP WROVF NO,OVERFLOW ERROR LSL 8 * CLE,ELA * ELB,CLE LSL 8 - SHIFT TRACK NO INTO B * ISZ N * JMP *-3 ALF,ALF (A) = SECTOR NO STB TRACK CLB ALWAYS EVEN JMP DOSC1 RTEIN LDA 1766B LGOC= CURRENT LOAD/GO CODEWORD LDB M2OR2 SSA INB STB WLUN LUN=2 IF SIGN=0, =3 OTHERWISE ALF,ALF RAL AND O377 STA TRACK SET TRACK NO. LDA 1766B LGOC= CURRENT LOAD/GO CODE-WORD AND O177 STA B DOSC1 STA SECTR SET SECTOR NO. LDA MSIZE SLB CHECK IF ODD SECTOR IN RTE ARS YES, DIVIDE SECTOR TO 64 WORDS STA BCOUN SECTOR-BUFFER COUNT = -64 CMA,INA SET THE SECTOR SIZE STA PSIZE MAY BE 64 OR 128 WORDS IF RTE LDA BFWA STA BFRAD SET SECTOR BUFFER ADDR = FWA BFR JMP .WRIN,I *%WRIF OUTPUTS THE WRITE-BUFFER TO THE CURRENT SECTOR *ON DISK, UPDATES THE CURRENT SECTOR NO. *%WRIF IS USUALLY CALLED AT THE END OF EACH SUBPROGRAM OUTPUT. SPC 1 %WRIF NOP DOS2 JMP RTEIF LDA 101B JBINS CPA DM1 NO JBIN LEFT ? (DUM GUY) JMP %WRIF,I YES,EXIT. RTEIF CCA CHECK HOW MANY SECTORS TO POST ADA BCOUN ADA PSIZE A=# WORDS WRITTEN -1 IOR O77 MIRGE IN 63 SSA,INA CHECK IF ANY & BUMP JMP %WRIF,I NONE, JUST RETURN STA SSIZE EITHER 64 OR 128 CLA STA BFRAD,I 0 FOR END OF SUBPROGRAM JSB EXEC WRITE SECTOR DEF *+7 DEF M2OR2 CODE FOR WRITE CDOS DEF WLUN LUN BFWA DEF %WBUF FWA OF BUFFER DEF SSIZE 64 OR 128 WORDS DEF TRACK TRACK NO DEF SECTR SECTOR NO DOS3 JMP RTEFC * LDA DM8 * STA N LDA 102B LGOC WORD INA ISZ SECTR BUMP SECTOR LDB SECTR CPB 116B NO OF SECTORS IN TRACK CLB,RSS JMP WRIF2 RRL 8 * CLE,SSA * CCE * ELB RRL 8 - TRACK NO TO B * ELA * ISZ N * JMP *-5 WRIF1 ADB DM1 STB TRACK NEW TRACK NO JSB EXEC STATUS REQUEST DEF *+5 DEF .16 CODE = 16 DEF .1 1 TRACK DEF TRACK STARTING TRACK NO. DEF STRAK ACTUAL GOOD TRACK RETURNED LDA STRAK SZA,RSS OVERFLOW ? JMP WROVF YES * LDB DM8 * STB N LDB TRACK CPB STRAK GOOD TRACK ? CLA,RSS JMP WRIF1 NO, TRY NEXT LOWER TRACK CPB RTRAK WORK TRACK ? JMP WROVF YES,OVERFLOW RRR 8 * CLE,ERB * ERA RRR 8 - TRACK TO UPPER A * ISZ N * JMP *-3 WRIF2 LDB O102 ADDR OF JBINC JSB EXEC SET JFILC = TRACK,O (AT 125B) DEF *+2 DEF .M19 -19 RTEFC JSB .WRIN RE-INITIALIZE FOR NEXT WRITE JMP %WRIF,I EXIT SPC 1 RTRAK EQU 267B SSIZE NOP O77 OCT 77 O101 OCT 101 *DM8 DEC -8 O377 OCT 377 O177 OCT 177 DM1 DEC -1 O102 OCT 102 SPC 1 %WRIT NOP LDA %WRIT,I STA EXIT SET RETURN ADR STA %WRIF ALSO FOR WROVF INITI JMP INITL INITIALIZE AT 1ST ENTRY DOS4 JMP WRIT1 RTE LDA 101B JBINS CPA DM1 NO JBIN LEFT ? JMP EXIT,I YES,EXIT WRIT1 ISZ %WRIT LDA %WRIT LDA 0,I RAL,CLE,SLA,ERA TEST I-BIT AND CLEAR JMP *-2 STA WBFAD SOURCE-BUFFER FWA ISZ %WRIT LDA %WRIT,I LDA 0,I CMA,INA STA COUNT SET COUNT WMOVE LDA WBFAD,I STA BFRAD,I MOVE WORD ISZ BFRAD POINTERS ISZ BCOUN BUMP SECTOR-BUFFER COUNT RSS JSB %WRIF END OF BUFFER, WRITE SECTOR ISZ WBFAD BUMP ISZ COUNT BUMP COUNTER JMP WMOVE CONTINUE TRANSFER JMP EXIT,I READY, EXIT SPC 1 EXIT NOP RETURN ADDR STRAK NOP TEMP FOR NEXT GOOD TRACK PSIZE DEC 64 MSIZE DEC -64 .M19 DEC -19 .16 DEC 16 .1 EQU 54B .M8 EQU 43B M2OR2 DEC 2 *N NOP WLUN NOP LUN TRACK NOP CURRENT TRACK NO SECTR NOP CURRENT SECTOR NO BFRAD NOP CURRENT ADDR IN WRITE-BUFFER WBFAD NOP CURRENT SOURCE-BUFFER ADDR COUNT NOP TRANSFER COUNT %WBUF BSS 128 ORG %WBUF+64 I DON'T WHY THIS IS AN ENTRY POINT INITL CLA NOP TO AVOID 2ND ENTRY STA INITI LDA $OPSY FIND OUT WHAT SYSTEM, DOS,DOSM,RTE SSA RTE = -1 OR -2 JMP RWRIN RTE LDB TDM2 DISC WRITE = -2 IN DOS-DOSM STB M2OR2 LDB TO55 GET OCT 55 STB CDOS LU FOR DISC IS ON BASE PAGE CLB TURN INTO DOS CODE STB DOS1 STB DOS2 STB DOS3 STB DOS4 LDB PSIZE DEC 64 SZA SEE IF DOS OR DOSM? RWRIN LDB TD128 CHANGE TO 128 WORD SECTORS STB PSIZE CMB,INB STB MSIZE JSB .WRIN SET UP TRACK/SECTOR ADDRESS JMP INITI+1 CONTINUE PROCESSING SPC 1 TO55 OCT 55 TD128 DEC 128 TDM2 DEC -2 SPC 1 ORR BCOUN NOP DON'T MOVE, YOU BE SORRY B EQU 1 END * *