1 /OS8 SABR ASSEMBLER OVERLAY ***SPATCH.07***
14 /COPYRIGHT (C) 1974,1975
15 /DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS.
19 /THIS SOFTWARE IS FURNISHED UNDER A LICENSE FOR USE ONLY ON A
20 /SINGLE COMPUTER SYSTEM AND MAY BE COPIED ONLY WITH THE INCLU-
21 /SION OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE, OR ANT OTHER
22 /COPIES THEREOF, MAY NOT BR PROVIDED OR OTHERWISE MADE AVAILABLE
23 /TO ANY OTHER PERSON EXCEPT FOR USE ON SUCH SYSTEM AND TO ONE WHO
24 /AGREES TO THESE LICENSE TERMS. TITLE TO AND OWNERSHIP OF THE
25 /SOFTWARE SHALL AT ALL TIMES REMAIN IN DEC.
28 /THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT
29 /NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL
30 /EQUIPMRNT COROPATION.
32 /DEC ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS
33 /SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DEC.
41 /FIXES TO SPATCH FOR V18 J.K. 1975
43 / .CHANGED USE OF 17645 SO /N CAN BE PASSED TO LOADER
44 / BIT 0 OF 17645 INDICATES THAT SABR WAS CHAINED
46 / .ALLOW TWO PAGE OUTPUT HANDLER
49 /SABR ASSEMBLER, LIKE 8K FORTRAN UNDER OS/8, RUNS
50 /IN FIELD 1 WITH ITS TABLES IN FIELD 0.
53 /MODIFIED SO THAT SABR WILL, AT RUN TIME, DETERMINE IF THE USER
54 /SPECIFIED I/O DEVICES REQUIRE TWO PAGE HANDLERS, AND IF SO
55 /SABR WILL ALLOCATE SPACE FOR THEM. ALSO IF ALL I/O IS DONE VIA THE
56 /SYSTEM DEVICE, SABR WILL NOT RESERVE ANY SPACE FOR I/O HANDLERS
57 /SPACE FOR TWO PAGE HANDLERS IS MADE BY SHRINKING THE INPUT
58 /BUFFERS-CURRENTLY 4 PAGES-TO 2 PAGES. B.CLOGHER 10/71
67 CORE1=6200 /UPPER CORE LIMIT OF OCCURRENCE TABLE(VARIES WITH I/O HANDLERS NEEDED!!)
68 SABR=201 /SABR V17 FIRST LOC AFTER "JMS I IOINIT"
70 SERROR=JMS I 177/SABR V17
88 INBUF=6200 /6200-7177 OR 6600-7177
94 \f *30 /CCL PATCH; GOES HERE AS A HACK
108 *200 /INITIALIZATION - GETS DESTROYED DURING SABR EXECUTION
110 START, ISZ I [FSWITC /SKIPS SINCE FSWITC=-1. ENTRY FROM "R SABR"
111 FSTART, JMP CCLKLG /ENTRY FROM 8K FORTRAN VIA "RUN SABR" MONITOR CALL
112 CLA CMA /USED AS TEM. BY SUBR. DNUM
113 DCA I [FSWITC /USED AS TEM. BY SUBR. DNUM
115 JMS I [7700 /CALL I/O MONITOR
116 10 /AND ASK IT TO STICK AROUND
120 2302 /.SB ASSUMED EXTENSION
125 SNA CLA /IS /F SWITCH ON?
126 DCA I [FSWITC /NO - ZERO OUT FSWITC
131 SETCOR, ISZ I [FDSW /SET DELETE SWITCH
133 JMS I [7700 /CALL I/O MONITOR--LOCK IT IN
136 TAD I [MOFILE /CHECK FIRST TWO OUT DEV. SPECS.--NEED 2 PAGE HNDLR?
138 JMP OSYS /NO OUTPUT OR SYS DEV.
139 JMP TWOPAG /NEED TWO-PAGE HANDLER
140 DONE, TAD I [MOFILE+5 /1 PAGE HNDLR-LOOK AT 2ND OUT DEV.
144 TAD PTEM2 /ARE BOTH OUT DEVS. SYS: OR NOT THERE?
145 SZA CLA /IF SO-ALLOT 0 PAGES FOR OUTPUT HANDLER
146 TAD [-200 /NO-ALLOT 1 PAGE FOR HANDLER
147 DONE1, DCA OPGES /-SIZE OF OUT HANDLER NEEDED
148 INLP, TAD I TEM /NOW LOOP THRU 9 POSSIBLE INPUT SPECS.
150 JMP ISYS /INPUT NOT THERE OR SYS DEV.
151 JMP TWOPG /TWO PAGE HANDLER NEEDED
152 ILP1, ISZ TEM /ONE-MOVE PTR TO NEXT
154 ISZ CNT1 /DONE ALL 9?
156 TAD TEM3 /YES-ARE ALL INPUTS FROM SYS OR NOT THERE?
157 SZA CLA /IF SO-DON'T SAVE ROOM FOR INPUT HANDLER
158 TAD [-200 /NO-NEED ONE PAGE FOR HANDLER
159 IDONE, DCA IPGES /STORE AS SIZE OF INPUT HANDLER
162 TAD [400 /NEED MORE THAN A TOTAL OF 2 PAGES FOR HANDLERS?
166 DCA I [INREC1 /YES-ADJUST INPUT ROUTINE FOR ONLY 2 PAGE BUFFERS
171 TAD [6600 /RESET ADDRESS OF INPUT BUFFER
174 NOTWO, TAD [6200 /RESET UPPER CORE LIM. OF OCCURRANCE TABLE
180 SPA CLA /MORE THAN ONE PAGE OUT HNDLR NEEDED?
183 TAD I [INBFPT /ADJUST HANDLER FETCH FOR TWO PAGE HANDLER
184 CDF 10 /BACK TO DATA FIELD 1
186 CMA /PROPAGATE CHANGES INTO MAIN PART OF SABR
195 SPA CLA /MORE THAN ONE PAGE FOR INPUT HNDLR?
196 IAC /YES-ADJUST IN HNDLR FETCH ROUTINE
197 TAD I [CLOC2 /(CONTAINS START ADDRESS OF CORE FOR IN HNDLR.)
199 DCA I [ADEVN /STORE FOR HNDLR FETCH ROUTINE
204 JMP ILP1 /INPUT SPEC. NOT THERE OR SYS DEV.
205 TWOPG, TAD [-200 /INPUT SPEC-NEEDS TWO PAGES
207 TWOPAG, TAD [-200 /OUT HNDLR NEEDS TWO PAGES
209 OSYS, ISZ PTEM2 /OUT HNDLR NOT NEEDED OR SYS. DEVICE
213 /ROUTINE TO CHECK DEVICE SPECS. LEFT BY COMMAND DECODER AND SEE
214 /IF WE NEED ANY TWO PAGE HANDLERS. ALSO CHECK IF ALL I/O IS FROM
215 /SYS DEVICE IN WHICH WE DON'T HAVE TO SAVE ROOM FOR ANY HANDLERS
216 /RETN. TO CALL + 1 IF DON'T NEED ROOM FOR ANY HANDLER
217 /RETN. TO CALL + 2 IF NEED 2 PAGES FOR HANDLER
218 /RETN. TO CALL + 3 IF NEED 1 PAGE FOR HANDLER
226 JMP I DNUM /NO-TREAT LIKE SYS. DEV
227 TAD [DVHNDL-1 /CHECK IF THIS HANDLER CO-RESIDENT WITH SYS.(TD8/E--UNIT 1)
231 SZL CLA /IS ENTRY PT. ABOVE 7600??
232 JMP I DNUM /YES-JUST LIKE SYS DEV.
234 TAD [SDVHND-1 /NO-PICK UP TABLE WD WHICH TELLS IF 2 PAGE HNDLR.
238 SMA CLA /BIT 0=1? I.E. DOES IT NEED TWO PAGES?
239 ISZ DNUM /NO-NORMAL RETN. TO CALL+3--NEED 1 PAGE
240 \f JMP I DNUM /YES-RETN. TO CALL+2--NEED 2 PAGES
247 LCHK, TAD I [MPARAM+1
255 SZA CLA /OR IF THERE IS NO LISTING OUTPUT FILE
257 TAD [PRS5&177+5200 /SPEED UP SYMBOL TABLE SORT
260 DCA I [SYMXX /AND PRINT "U" MESSAGE FOR UNDEFINEDS
264 TAD I [MOFILE+4 /GET EXTENSION OF BINARY OUTPUT
266 TAD [2214 /NO - SET TO .RL
270 TAD [1423 /SIMILIARLY SET LISTING EXTENSION TO .LS
274 SNA CLA /BINARY OUTPUT?
277 JMS I [TSTNTR /YES - OPEN IT
280 NOBNOT, TAD [MOFILE+1
282 ISZ I [OUTINH /INHIBIT OUTPUT
283 YESBOT, TAD I [MOFILE+5
289 AND [41 /"L" OR "G" FLAGS ON?
294 CLA IAC /DEVICE "SYS"
299 0 /LENGTH GOES HERE AND IS IGNORED
300 JMP NOLODR /COULDN'T FIND IT
307 NOLOAD, JMS I [OPENFL /OPEN FIRST INPUT FILE WHILE MONITOR STILL IN CORE
310 STSABR, SABR /FIRST LOC IN SABR AFTER "INITIAL DIALOGUE"
313 LOADER, TEXT /LOADERSV/
314 \f *1100 /FILE OPENER - RESIDES IN PART OF THE OLD SABR INPUT BUFFER
319 SNA /IS THERE ANOTHER INPUT FILE?
320 JMP I (ERROR+1 /ERROR - NO END STATEMENT IN PROGRAM
323 AND (17 /EXTRACT DEVICE NUMBER
329 TAD I FILPTR /GET STARTING BLOCK #
331 DCA I (INREC /STORE IT AWAY
334 AND (7760 /EXTRACT LENGTH
335 SZA /LENGTH OF 256 IMPLIES MAY BE LARGER
338 RTR /GET LENGTH AS A NORMAL NEGATIVE NUMBER
339 DCA I (INCNT /STORE THAT AWAY TOO
343 JMS I (MINCOR /GET MONITOR
344 TAD ADEVN /THIS LOC. SET UP BY INITIALIZATION ROUTINE
350 ADEVNO, 5600 /FORCE HANDLER INTO PAGE 5600
351 JMP I (DELERR /GIVE S ERROR
354 JMS I (MOUCOR /GET MONITOR OUT
356 DCA I (INCHCT /FORCE BUFFER LOAD ON FIRST READ
362 ADEVN, 0 /SET UP BY INIT. ROUTINE-PAGE ADDR. OF IN HNDLR
374 MINXIT, 0 /RESTORE CALLING FIELDS
389 ERROR, TAD E7500 /MAKE SABR ERROR "B"
391 JMS MOUCOR /KICK MONITOR OUT
393 DCA I EPASS /SET PASS=0 SO ERROR WILL PRINT
403 SPAUSE, 0 /"PAUSE" STATEMENT PATCH
407 DCA I (FILPTR /RESET FILE POINTER IF CALLED FROM FORTRAN
408 JMS I (OPENFL /OPEN NEXT FILE
411 FSWITC, -1 /AS ADVERTISED
413 DELETE, TAD I (MPARAM
414 RTR /PUT "K" SWITCH IN LINK
420 DCA I (JSBITS /MARK "DON'T CARE IF MONITOR AREA DESTROYED" BITS
422 SZL SNA CLA /DELETE ONLY IF CALLED FROM FORTRAN WITH
423 JMP NODLET /"K" SWITCH(IN LINK) ZERO
425 CLA IAC /DEVICE "SYS"
428 4 /CLOSE - USED AS DELETE
429 NAME /NAME FOR CLOSE PROCESSOR
430 0 /NO BLOCKS - WILL BE DELETED
433 SNA CLA /WAS A LOADER BLOCK STORED
438 SZA CLA /IF WE USED THE TELETYPE ROUTINE,
439 JMP GETOUT /THEN THERE WAS AN ERROR
454 GETOUT, TAD I (SYSTEM
462 DELERR, TAD (1700 /GIVE A "S" ERROR
466 NAME, 0617;2224;2216;2415
473 400 /OR 200 IF NEED TWO PAGE HANDLERS-REDUCE BUFFER SIZE TO MAKE ROOM
479 INREC1, ISZ INREC /OR 0000 IF TWO PAGE HANDLERS-SINCE IN BUFFER IS 1/2 SIZE
487 CLSMBE, 0 /SUBR TO CLOSE OUTPUT FILE IF ONE EXISTS
492 CIF 0 /IN CASE WE DIDN'T CLOSE IT
494 \f *7400 /END OF PASS CRAP AND INPUT ROUTINE
496 PASEND, ISZ I (PASS /BUMP PASS COUNTER
497 LSTFLG, JMP SBSYMT /ZERO IF LISTING FILE EXISTS
498 JMS I (CLSMBE /CLOSE BINARY FILE
500 JMS I (TSTNTR /ENTER LISTING FILE
505 DCA I (FILPTR /RESET FILE POINTER TO BEGINNING
506 JMS I (OPENFL /AND OPEN FIRST FILE
507 /IF CALLED FROM FORTRAN WE DONT HAVE TO DO THIS
508 /BECAUSE OF THE PECULIAR NATURE OF FORTRAN OUTPUT
509 JMS I (MOUCOR /KICK MONITOR OUT
512 P200, AND P40 /MASK OUT "S" SWITCH
513 DCA I (OUTINH /INTO "OUTPUT INHIBIT" FLAG
514 JMS I (SYMPRT /PRINT SYMBOL TABLE UNDER CONTROL OF /S
515 DCA I (OUTINH /ZERO FLAG FOR LISTING
516 TAD I (MPARAM+1 /SYMPRT RETURNS WITH DATA FIELD=10
519 SNL CLA /"N" FLAG IS IN THE LINK
520 JMP I (ENDRSM /HE WANTS A LISTING - GO GET IT
522 JMS I (CLSMBE /CLOSE OUTPUT FILE
523 JMP I (DELETE /DELETE FORTRN.TM AND CHAIN OR RETURN
527 DCA I (PUNCH /INHIBIT ALL FUTURE OUTPUT
528 JMS I (SYMPRT /CHECK SYMTAB FOR UNDEFINEDS
530 ISZ I (JSBITS /SET "DON'T CARE ABOUT USR CORE" FLAG
531 JMP SBREND /NOW GO CLOSE BINARY OUTPUT FILE AND RETURN
540 JMP I (7600 /EXIT TO MONITOR IF ^C TYPED
545 DCA INCNT /RETURN HERE ON EOF
546 INRD1, ISZ INCNT /SET TO 0000 IF 2 PAGE HANDLERS FORCE INPT. BUFF. TO 1/2 SIZE
583 TAD (145 /CHECK FOR ^Z
585 JMP INRD /^Z ON INPUT MEANS GO TO NEXT FILE
595 \f *6400 /OUTPUT ROUTINE INTERFACE - CANT GO PAST 6423
600 OUCRET, JMP I OUCHAR /DOUBLES AS OFF-PAGE RETURN
616 *6457 /LOADS OVER OLD SABR INITIALIZATION ROUTINE
617 TSTNTR, 0 /CALLED FROM FIELD 0
624 TAD OUHND /THIS LOC. IS SET UP AT INIT. TIME
629 13 /RESET OUTPUT DEVICE
630 TAD ODEVNO /LOAD OUTPUT DEVICE
636 DCA ENAME /POINTS TO FILE NAME
637 DCA OULNGT /ZERO CLOSING LENGTH
638 TAD ODEVNO /LOAD DEVICE NUMBER AND REQUESTED LENGTH
641 ENAME, 0 /POINTER INTO COMMAND DECODER AREA GOES HERE
643 ELENGT, 0 /"0 LENGTH" MEANS AS LARGE A SPACE AS POSSIBLE
644 JMP F2ERR /COULDN'T ENTER FILE - MAYBE BAD DIRECTORY
645 TAD ENAME /GET STARTING BLOCK #
646 DCA OUTREC /STORE IT AWAY
647 JMS OUSPTR /INITIALIZE OUTPUT ROUTINE
662 POUBUF, 1200 /REMAINDER OF OLD SABR INPUT BUFFER
672 TAD OUT232 /PUT A ^Z IN THE OUTPUT FILE
677 JMP .-4 /FILL REMAINDER OF BUFFER WITH ZEROS
686 JMP F2ERR /ERROR ON CLOSE
692 OUHND, 0 /SET UP AT INIT. TIME TO ALLOW 2 PAGE HNDLR
694 *6610 /OUTPUT ROUTINE - CANT GO PAST 6661
733 \f /PATCHES TO SABR TO HOOK INTO THESE WONDERFUL ROUTINES
734 *4574 /OLD "INITR" ROUTINE AREA - 4 LOCATIONS LONG
735 SYMPRT, 0 /INTERMEDIATE ROUTINE TO PRINT SYMBOL TABLE
736 JMS I PRSYMP /CALL SABR'S ROUTINE
738 JMP I SYMPRT /BUT RETURN TO FIELD 0
740 *4641 /CODE IN THIS SECTION CAN'T GO PAST 4704
741 FETCH, 0 /REPLACES ROUTINE IN SABR OF SAME NAME
747 LDRCT, 7700 /FOR LEADER-TRAILER ROUTINE ON SAME PAGE
749 USYMFG, 0 /ROUTINE TO GIVE UNDEFINED SYMBOL MESSAGES WHEN
750 JMS I CTYPE /NO SYMBOL TABLE IS REQUESTED
751 SYMXX, JMP I USYMFG /ZEROED IF CHECKING FOR UNDEFINEDS
753 DCA I PLLFS /SET UP SABR CELLS SO THAT ERROR ROUTINE WILL
754 DCA LINE /PRINT THE NAME OF THE UNDEFINED SYMBOL
755 TAD U2300 /FUDGE FOR "U" ERROR MESSAGE - UNFORTUNATELY,
756 JMP I .+1 /THIS MESSAGE IS INSTANTLY FATAL - SERVES HIM RIGHT
758 PLLFS, LLFS /RANDOM LOCATION IN SABR
761 TDUMMY, 0 /DUMMY OUTPUT ROUTINE
763 JMP I TDUMMY /AS DUMMY AS YOU CAN GET
765 *6133 /PATCH TO SYMBOL TABLE PRINTER TO USE ABOVE
766 JMS I 6177 /THIS REPLACES A "JMS I CTYPE"
768 USYMFG /LUCKILY THERE WAS A LOCATION FREE
770 *3665 /REWRITE OF OCTAL TYPEOUT ROUTINE TO
771 DCA TEM1 /NOT KEEP INFORMATION IN THE LINK ACROSS
772 TAD M4 /A CALL TO THE OUTPUT ROUTINE
783 *4317 /"PAUSE" PROCESSOR
784 CLA /REPLACES CLA HLT
787 *4332 /PATCHES TO INITIALIZATION ROUTINE
789 NOP /TWO USELESS CARRIAGE RETURN - LINE FEED PAIRS
792 NOP /DON'T JMS I 4372 'CAUSE WE HAVE CHANGED 4372!
794 *4372 /MORE "PAUSE" FUDGE
797 *4715 /ALTER COUNT ON LEADER-TRAILER
800 *561 /"END" STMT PROCESSOR
802 JMP I PEND /END OF PASS 1
806 NOP /ELIMINATE HALT AT END OF PASS 1
808 *570 /STILL MORE ON "END"
810 JMP I SEND /END OF PASS 2
812 *576 /THERE ARE (WERE) TWO WHOLE FREE LOCATIONS IN THIS PAGE!
816 *2761 /FATAL ERROR HALT IN ERROR ROUTINE
818 JMP I 166 /166 = LITERAL 7600
820 *4003 /LISTING ROUTINE
821 SKP CLA /ALWAYS PUT LISTING ON "PUNCH"
823 *PUNCH /POINTER TO PUNCH ROUTINE
824 OUCHAR /POINTER TO MY PUNCH ROUTINE
844 TITLE, TEXT /SABR V18A /