R0=%0 R1=%1 R2=%2 R3=%3 R4=%4 R5=%5 SP=%6 PC=%7 ; ******************************************************************** ; * * ; * ****************** R O S L O D ******************* ; * THIS IS THE ON-LINE LINKING LOADER FOR THE "ROS II" SYSTEM * ; * TO BE RUN ON THE PDP-11/20. THIS VERSION WILL LINK UP TO 20 * ; * OBJECT MODULES.(THIS NUMBER MAY BE CHANGED BY RE-ASSEMBLING * ; R0=%0 R1=%1 R2=%2 R3=%3 R4=%4 R5=%5 SP=%6 PC=%7 ; ******************************************************************** ; * * ; * IDENTIFICATION: RAD50P : RADIX-50 PACK SUBROUTINE * ; * * ; * PURPOSE: TO CONVERT A STRING OF SIX ASCIT CHARACTERS * ; * TO TWO PACKED BINARY WORDS IN RAD50 CODE. * ; .z(zh(:,U   xB7n,$e-ze Tx`,Hx^-VE?JFes ,leX . ~e$U7; UPDATE 1 3/17/72 TO IPL2.RAS ; UPDATE 3/13/72 FIX UP IPL2.RAS ; UPDATE 3/13/72 FROM IPL2.S12 TO IPL2.RAS ; UPDATE 3/13/72 IPL.S12 ; UPDATE 2/16/72 IPL2.S11 ; UPDATE 1/19/72 IPL2.S10 ; UPDATE 1/12/72 IPL2.S09 ; UPDATE 12/11/71 IPL.S08 ; UPDATE 12/10/71 IPL.S07 ; UPDATE 12/2/71 IPL.S06 ; UPDATE 11/18/71 IPL.S05 ; UPDATE 11 * THE PROGRAM WITH A NEW VALUE FOR "MAXNAM".) A LOAD MODULE WILL * ; * BE CREATED WHICH IS RELOCATABLE BY EXECUTING AT LOAD TIME A * ; * "TRAILER" PROGRAM ATTACHED TO THE END OF THE MAIN PROGRAM. * ; * BECAUSE THE LOAD MODULE IS RELOCATABLE, NO "ASECT" WILL BE * ; * ALLOWED. NAMED "CSECTS", HOWEVER, WILL BE PROCESSED NORMALLY. * ; * THE LOAD MAP PRINTED AT THE END OF PASS 1 WILL SHOW THE VALUES * ; * OF ALL GLOBAL SYMBOLS (ENTRY POINTS, MODULE AND SECTION NAMES) * * ; * USAGE: CALLING SEQUENCE: * ; * * ; * MOV #ASCBUF,-(SP) ;STACK ADDRESS OF ASCII STRING * ; * MOV #BINBUF,-(SP) ;STACK ADDR OF FIRST BINARY WRD* ; * EMT 38. ;TRAP TO ROUTINE * ; * , E} =|,e e e_,e  &,e @ee , e_   j @,Df w#& P LN C,hFN @N Հ0 E c,  !-S--<# % /15/71 IPL.S04 ; UPDATE 11/12/71 IPL.S03 ; UPDATE 11/11/71 IPL.S02 ; UPDATE 11/10/71 IPL.S01 .TITLE IPL ;*********************************************************************** ;* * ;* INITIAL PROGRAM LOAD WILL INITIALIZE THE ROS SYSTEM AND * ;* THEN EXIT TO DISPATCH. THIS MODULE SHOULD BE EXECUTED * ;* BEFORE ENTERING ROS FOR THE FIRST * ; * EXPRESSED AS A RELATIVE OFFSET FROM THE BASE OF THE LOAD MODULE* ; * OBVIOUSLY, THE ABSOLUTE LOAD VALUES CANNOT BE KNOWN UNTIL THE * ; * MODULE IS RELOCATED AT EXECUTION TIME. IN ADDITON, THE * ; * LOAD MAP WILL SHOW THE ACCUMULATED LOAD MODULE SIZE AT THE * ; * START OF EACH OBJECT MODULE ON THE MAP. WHEN LOADING TASKS, * ; * "ROSLOD" ALSO UPDATES THE MONITOR'S TASK TABLE TO ALLOW THE * ; * NEW PROGRAM TO BE QUEUED AND EXECUTED. FUTURE RELEASE * ; * ON RETURN THE STACK WILL BE CLEARED. THE SET OF CHARACTERS * ; * FOR RAD50 CONSISTS OF THE LETTERS A-Z, THE NUMBERS 0-9,AND * ; * THE TWO SPECIAL CHARACTERS [$] AND [.]. ANY OTHER CHARACTERS * ; * IN THE INPUT STRING WILL BE TREATED AS BLANKS. * ; * DATE: 30-MAR-72 * ; * VERSION:001.002 * ; * ------< 04268 ny TIME. * ;* * ;* PROGRAMMER 51,52,53 AND 54 * ;* DATE 11/9/71 * ;* REVISION ;* REVISION * ;* * ;*********************************************************************** .REF S OF * ; * "ROSLOD" WILL ALLOW LIBRARY SEARCHES AND LOADING OF SEGMENTED * ; * PROGRAMS. * ; * DATE: 07-APR-72 * ; * VERSION:003.001 * ; * * ; ******************************************************************** .TITLE ROSLOD .REF PPTAB,TASKS, * ; * G U L F E L E C T R O N I C S Y S T E M S * ; * * ; ******************************************************************** .TITLE RAD50 .REF PUSHR,POPR .DEF R50UNP,R50PAK .PAGE RAD50PACK: ;CONVERT 6 ASCII CHARS TO 2 BINARY WORDS R50PAK: ;N=1600A+40B+C JSR R5,PUSHR ;SAVE ALL BBBz*BU   xB7n*fe-ze Tx`*x^-VE?JFes <*eX . ~e$U7*Ҝ E} =*e e e*e  L*>e @ee *be_   j g*f wEMTINIT ; FOR EMT INIT .REF LODINIT .DEF IPL,SSTACK,LOGMAX,PHYDEV,ALTDEV .DEF QTIME,DQTIME,SSTACK .IFNZ OVRLAY ; ONLY IF HAVE OVERLAYS .DEF BEGDYN,ENDDYN .ENDC .REF TIMCTL,EMTRAP,CLINIT .REF RQUEST,SAVE,DSPTCH,QIPL,TPRTY,HEADER,INPTHD .REF PFSIPL,PSTIPL .REF TSTAT,DINT .REF PRTINT,KBDINT ;TTYIO PRINTER AND KEYBOARD ;INTTPRTY,TSTAT,IOSTAT,HEADER,BSIZE,IFD .DEF LODINIT ;SECONDARY INPUT PARAMETERS: ; PRIBKG,$RLDNO,TASMAX,NPRIOR,OVTMIN,MAXID1,NDISCS,$SYSFL ; $OVTYP,ARG .PAGE ; THE FOLLOWING DEFINE MEANINGS OF BITS IN LOWER "FLAG BYTE": DBLDEF = 4 ;SINGLE/MULTIPLE DEFINITION (0/1) UNDEF = 10 ;UNDEFINED/DEFINED (0/1) ABSREL = 40 ;ABSOLUTE/RELATIVE (0/1) TXTCMD = 3 ;COMMAND TO BEGIN A TEXT BREGS MOV 16(SP),R0 ;BINARY BUFFER ADDRESS MOV 20(SP),R1 ;ASCII STRING ADDRESS MOV #3*400+3,R2 ;SET MAJOR & MINOR LOOP COUNTS RADP10: CLR R3 ;BINARY SUM RADP20: MOVB (R1)+,R4 ;NEXT ASCII CHAR BIC #-177-1,R4 ;CLEAR POSSIBLE PARITY SUB #100,R4 ;REDUCE ALPHAS TO 1-32 BLE RADP40 ;WAS BELOW [A] CMP R4,#32 ;ABOVE [Z]? BGT RADP90 #& P LN j*FN @N Հ0 E *Ν  H-S--w   f5eU@  [*   & * G &( 8L'4e Q$ BBB"   U@ U e  "U%Gef. U U Bb 0 * B.&0 M &0 & IDA20 .PAGE LODA30: MOV #TMPBUF,-(SP) MOV R1,-(SP) EMT R50PAK ;CONVERT TO RADIX-50 MOV (R1)+,R3 ;CHECK CONVERTED NAME... BIS (R1)+,R3 ;...FOR ALL NULLS BEQ LODB10 ;ALL NULLS: END OF INPUT LINE REACHED LODA40: CMP (R1)+,(R1)+ ;LEAVE ROOM FOR FOUR WORDS PER ENTRY BR LODA10 ;...AND GO TO FETCH ANOTHER NAME ; ****************************************************J MOV #C,D MOV #C,D MOV #C,D MOV #C,D MOV #C,D MOV #C,D MOV #C,D MOV #C,D MOV #C,D MOV #C,D MOV #C,D MOV #C,D MOV #C,D MOV #C,D MOV #C,D MOV #C,D CLR 123456 CLR 123456 CLR 123456 CLR 123456 CLR 123456 CLR 123456 CLR 1234K;# WORDS READ BCC .+4 ;WAS NOT AN ODD NUMBER INC R2 ;DON'T LOSE LAST BYTE CONVRT: ;CONVERT BINARY TO OCTAL ASCII MOV #16.,R3 ;PRINT 8 CELLS PER LINE MOV #OUTDAT,R1 AGAIN: MOV (R0)+,-(SP) ;NEXT BINARY WORD MOV R1,-(SP) ;ASCII LIST POINTER MOV #5,-(SP) ; "BIN2O" EMT 42 ; .CVT FROM BINARY TO OCTAL ASCII ADD #6,R1 L0. /:&"(:,np: ~p :+,-r::"::$",^'  "&f"eѕ  "0  ѕ ѕ "w*HH" $H*H, @H::H: :,&EEEEM**************** LODB10: ;ALL NAMES NOW CONVERTED TO RAD50 MOV #NAMBUF,R0 ;INIT POINTER TO LIST OF RAD50 NAMES SUB #NAMBUF+4,R1 ;#BYTES IN CONVERTED LIST ASR R1 ;#WORDS ASR R1 ASR R1 ;#NAMES CONVERTEDTO RADIX-50 MOV R1,MODCNT ;SAVE IT: # OBJ MODULES TO LINK .PAGE ; NOW CHECK BATCH DIRECTORY FOR EACH NAME ENTERED LODB20: DEC R1 ;COUNT DOWN N56 CLR 123456 CLR 123456 CLR 123456 .PAGE .CSECT ABCDEF MOV #A,B MOV #A,B MOV #A,B MOV #A,B MOV #A,B MOV #A,B MOV #A,B MOV #A,B MOV #A,B MOV #A,B MOV #A,B MOV #A,B MOV #A,B MOV #A,B MOV #A,B MOV #A,B MOV #A,B MOV #A,BO ;BUMP TO BYTE FOLLOWING LAST CHAR MOVB #TAB,(R1)+ ;PUT TABS BETWEEN EACH SIX CHARS DEC R2 ;BLOCK END? BEQ BLKEND ;YEAH DEC R3 ;LINE END? BGT AGAIN ;NO BR LINEND ;SKIP FIRST "LF" BLKEND: MOVB #LF,(R1)+ ;BLOCK END TAKES TWO LINE FEEDS LINEND: MOVB #LF,(R1)+ ;LINE END TAKES ONLY ONE SUB #OUTDAT,R1 ;GET # OF BYTES CONVERTEP,JMM,n :p"$:&p;P #OCTAL DUMP V001A # B "" """S ?Q# OF NAMES BLT LODC10 ;DONE:EXIT LOOP:ALL NAMES WERE FOUND MOV #-1,OBJSEC ;START W/ RELATIVE SECTOR ZERO LODB30: INC OBJSEC ;BUMP SECTOR # MOV #OBJLST,-(SP) EMT DISCIO ;DISCIO: DIRECTORY SECTOR TST OBJERR ;CHECK FOR ERROR BNE LDER10 ;YES: ERR OUT MOV #8.,R3 ;INIT COUNT OF ENTRIES IN THIS SECTOR MOV #OBJBK1,R4 ;...AND POINTER TO SECR MOV #A,B MOV #A,B CLR 123456 CLR 123456 CLR 123456 CLR 123456 CLR 123456 CLR 123456 CLR 123456 CLR 123456 CLR 123456 CLR 123456 MOV #C,D MOV #C,D MOV #C,D MOV #C,D MOV #C,D MOV #C,D MOV #C,D MOV #C,D MOV #C,D MOV #C,D SD MOV R1,OUTABC ;STASH IN OUTPUT BYTE COUNT MOV #OUTBUF,-(SP) MOV #LNKOUT,-(SP) EMT 2 ; .WRITE (TO LP:) MOV #LNKOUT,-(SP) EMT 1 ; .WAIT TST R2 ;WAS BLOCK END REACHED? BNE CONVRT ;NO: GO BACK AND CONVERT SOME MORE EOFTST: BITB #100,INSTAT ;END-OF-FILE? BEQ READ ;GO BACK FOR ANOTHER (POSSIBLE) READUTOR DATA TST OBJSEC ;IS THIS THE 1ST SECTOR (RELATIVE ZERO)? BNE LODB50 ;NO: BYPASS INIT OF ENTRY COUNT TST (R4)+ ;SKIP BATCH FILE I.D. MOVB (R4),R2 ;# ENTRIES IN DIRECTORY (+1) TST (R4)+ ;SKIP SECOND WORD MOV (R4)+,DIRSEC ;NEXT FREE DIRECTORY SECTOR MOV (R4)+,BGNSEC ;NEXT FREE BATCH ELEMENT SECTOR SUB #8.,R4 ;RESET SO NEXT INSTRUCTION WIL MOV #C,D MOV #C,D MOV #C,D MOV #C,D MOV #C,D MOV #C,D MOV #C,D MOV #C,D MOV #C,D MOV #C,D MOV #C,D MOV #C,D MOV #C,D MOV #C,D MOV #C,D MOV #C,D MOV #C,D MOV #C,D MOV #C,D MOV #C,D .END W MOV #LNKOUT,-(SP) EMT 17 ; .CLOSE LINE-PTR TO FLUSH ITS BUFFER MOV #LNKINP,-(SP) EMT 17 ;CLOSE DUMPED DATASET MOV #LNKINP,-(SP) EMT 7 ; .RLSE INPUT FILE DATASET BR PRTSGN ;...AND GO BACK TO REQUEST ANOTHER ONE .PAGE ;COMMAND INPUT LINK BLOCK 0 KBILNK: 0 .RAD50 /KBI/ 1 .RAD50 /KB/ ;COM^.}؁(@h| h~s&(XhThV,|x|r|l|f|`|Z| ||||$|k,$|T|N|H|B|<|6YL WORK LODB40: ADD #16.,R4 ;ADVANCE POINTER TO NEXT ENTRY DEC R2 ;MORE ENTRIES TO CHECK? BEQ LDER11 ;EXHAUSTED: NO SUCH NAME FOUND DEC R3 ;DONE W/ THIS SECTOR? BEQ LODB30 ;YES: GO GET NEXT SECTOR IN DIRECTORY LODB50: CMP (R0),(R4) ;INPUT NAME :VS: DIRECTORY NAME BNE LODB40 ;NO MATCH CMP 2(R0),2(R4) ;CHECK SECOND WORD BNE `.}@@ @@*&@(x(T|6@  @ @ 6@ [MAND OUTPUT LINK BLOCK 0 KBOLNK: 0 .RAD50 /KBO/ 1 .RAD50 /KB/ ; DUMPED FILE INPUT LINK BLOCK 0 LNKINP: 0 ;INPUT LINK BLOCK .RAD50 /DMP/ 3 ;ROOM FOR ONE SWITCH INPDEV: 0 ;ROOM FOR PHYSICAL DEVICE NAME FROM COMMAND STRING ISWCNT: 0 ;# SWITCH WORDS FOLLOWING ISWTCH: 0 ;FIRST TWO CHARS IN SWITCH 0 LNKOUT: 0 ;OUTPUT LINK BLOCK .RAD50 /LP/ 1 .RAD50\   :Q* 0!&!H!b!0!T!&!*$ !H!!0!0!!&!,H &!@M0!. !/:!A*n p!:! ~.* -r":!:!""* ^'  "$&f"eѕ .  ѕ ѕ "$w*"H!H!5*! @H!:!:!p*&!EEEE*J!MM] LODB40 ;NO MATCH CMP (R0)+,(R0)+ ;MATCH! GET PAST NAME IN "NAMBUF" MOV 14(R4),(R0)+ ;... START SECTOR... MOV 16(R4),(R0)+ ;... AND LENGTH, TO INTERNAL DIRECTORY BR LODB20 ;GO GET NEXT NAME .PAGE LDER10: MOV #10,R4 ;DISC READ ERROR: BATCH DIRECTORY JSR PC,ERRPRT LDER11: MOV #11,R4 ;"BFUP" DIRECTORY SEARCH FAILURE JSR PC,ERRPRT ; **********************S?"  j 7 V7 7  7 #7 f7  7  7   G_ /LP/ ;ALWAYS TO LINE PRINTER ;COMMAND INPUT FILENAME BLOCK 0,4 ;OPEN FOR INPUT KBIFIL: ,,,, ;COMMAND OUTPUT FILENAME BLOCK 0,2 ;OPEN FOR OUTPUT KBOFIL: ,,,, 0 4 ;INPUT FILE ALWAYS OPENED FOR INPUT FILINP: 0,0,0 ;SPACE FOR INPUT FILENANME (FROM "ASSIGN" AT KEYBOARD) 0,0,0 ;UIC & PROTECT 0 2 ;PRINT FILE ALWAYS OPENED FOR OUTPUT FILOUT: 0,0,0,0,0 ;NO FILENAME*n! !:!p!e!P!!OCTAL DUMP V001A # '""""$ a********************************************** LODC10: ; ALL NAMES FOUND IN DIRECTORY. NOW PROCEED WITH PASS 1. MOV #NAMBUF,NAMPTR ;POINTER TO LIST OF MODULE NAMES MOV MODCNT,NAMCTR ;# OF MODULES IN LIST MOV #LSDBGN,SYME ;INIT PTR TO DEFINED SYMBOLS MOV #LSDBGN,USYME ;INIT PTR TO UNDEFINED SYMBOLS .PAGE LODC20: ;LOOP HERE FOR SUCCESSIVE OBJECT MODULES JSR PC,NXTMOD ;INIT FOR NEXT OBJ MODULE b| ||||$|k,H|0|*|$|||| ||||$|k,l| |||||=| ||||$|k,||||||| ||||$|k,7 .7 .7 .7 .7 .7 .7 .7 .7 .V*. ......".&.s7 .TVTVTV:. T V TV c FOR LP: RAD.DT: .RAD50 /DT / ; CSI COMMAND BLOCK KBCSCB: KBICSI LNKINP ;WANT SPEC FOR INPUT FILE TO BE DUMPED FILINP ;SAME ; COMMAND INPUT CSI HEADER KBICSI: 2 ;USE "OUTPUT" FIELD ONLY (ACTUALLY FOR INPUT SPEC) ,,,,, ;RESERVE SIX MORE FOR CSI KBIBUF: 80. ;THE COMMAND STRING BUFFER .BYTE 0 ;MODE KBISTA: .BYTE 0 ;STATUS 0 ;ACTUAL BYTE COUNT KBIDATd @ @ $6@  @ @ 66@  @ @ Hv6@  @ @ Zd6@  @ @ lR6@  @e BR LODC19 ;DONE WITH ALL OBJ MODULES LODC30: JSR PC,NXTBLK ;GET NEXT BLOCK BR LODC19 ;DONE WITH ALL OBJECT BLOCKS LODD00: ;HERE TO PROCESS SUCCESSIVE GSD BLOCKS ; R0 POINTS TO FIRST DATA BYTE IN BLOCK ; R5 CONTAINS BYTE COUNT OF DATA BYTES TST BLOCK1 ;IS THIS FIRST BLOCK IN MODULE? BEQ LODD10 ;YES DEC (R0) ;IS THIS A GSD BLOCK? BEQ LODD15 fTV(TVTVTV6 TV TV TV"TVTVTV6 TV TV TV"TVTVTV6 TV TV TV"$TVTVTV6 TV TV TV"6TVTVTV6 TV TV TVg: .=.+80. ;CHARACTERS START HERE ;COMMAND OUTPUT LINE BUFFER KBOBUF: MSGLTH ;MAX BYTES 0 ;MODE AND STATUS MSGLTH ;ACTUAL BYTES .ASCII "OCTAL DUMP V001A" .BYTE 15,12,43,13 MSGLTH = .-KBOBUF-6 ;# BYTES IN MESSAGE .EVEN INPBUF: 0 ;MAX BYTES DEPENDS ON BLOCK SIZE OF DEVICE BEING READ INPMOD: .BYTE 0 ;MODE OF INPUT DETERMINED BY SWITCH INSTAT: .BYTE 0 ;Sh @ ~@6@  @ @ .6@  @ @ 6@  @ @ ,7 .7 .7 .7 .7 .7 .7 .7 .7 .V*. ......".&.s6 i ;YES: PROCEED DEC (R0) ;IS IT GSD END? BEQ LODC20 ;YES: GET NEXT OBJ MODULE CMP (R0),#4 ;IS IT MODULE END? BEQ LODC20 ;YES: GET NEXT MODULE BR LODC30 ;NO: GET NEXT BLOCK LODD10: INC BLOCK1 ;INDICATE FIRST BLOCK PROCESSED DEC (R0) ;CHECK THAT IT IS GSD BNE LDER13 ;NOT GSD BEGIN TSTB FLAGS+3(R0) ;FIRST ENTRYl"HTVTV7 .7 .. TV TV..?,\7 .7 .7 .7 .7 .7 .7 .7 . .. ......".|~|~|~6 |~ |~ |~2|~|~|~6 |~ |~ |~2$|~|~|~6 |~ |~ |~2kTATUS INPABC: 0 ;ACTUAL INPUT BYTE COUNT INPDAT ;ADDR OF INPUT DATA BUFFER OUTBUF: 132. ;MAX BYTES IN PRINT BUFFER .BYTE 6 ;UNFORMATTED ASCII; DUMP MODE OUSTAT: .BYTE 0 ;STATUS OUTABC: 0 ;ACTUAL OUTPUT BYTE COUNT OUTDAT ;OUTPUT DATA BUFFER INPDAT: .=.+512.;INPUT DATA BUFFER: MUST ACCOMMODATE A DECTAPE BLOCK OUTDAT: .=.+132.;OUTPUT DATA BUFFER ; 9-FEB-72 ;M W Kx6 6 6  6 26 m'S TYPE BNE LDER14 ;FIRST ENTRY NOT MODULE NAME LODD15: CMP -(R5),(R0)+ ;BUMP BC & PTR PAST GSD COMMAND LODD20: ;HERE FOR EACH SUCCESSIVE ENTRY UNTIL BLOCK END SUB #8.,R5 ;BLOCK END? BLT LODC30 ;YES: GO GET NEXT ONE MOVB FLAGS+1(R0),R2 ;ENTRY TYPE CMPB R2,#GSDMAX ;IS IT LEGAL? BGT LDER15 ;NO MOV R0,R1 ;ENTRY POINTER ADD #8.,R0AB R2 ;YES: IS SECOND WORD CONVERTED? BNE RADU05 ;NOT YET BR RADP35 ;ALL DONE: RESTORE SAVE REGS & RETURN ;VIA COMMON RETURN COEFF: ;TABLE OF COEFFICIENTS +1600. ;40**2 +40. ;40**1 +1. ;40**0 .END LEIN .END START p6|~|~|~6 |~ |~ |~2H|~|~|~6 |~ |~ |~2Z|~|~|~p6 |~ |~ |~2l|~|~7 .7 .8. |~ |~...7 .7 .7 .7 .7 .7 .7 .7 .T*. ......".&T,Tq ;NEXT ENTRY MOV R1,R4 ;SECONDARY POINTER USED BY VARIOUS RTNES ASL R2 ;BYTE INDEX JMP @GSDTAB(R2) .PAGE GSDTAB: .WORD LODE00 ;(0) OBJ MOD NAME .WORD LODE20 ;(1) SECTION NAME .WORD LODD20 ;(2) INTERNAL SYMBOL (IGNORE) .WORD LODD20 ;(3) TRANSFER ADDRESS (IGNORE) .WORD LODE40 ;(4) GLOBAL SYMBOL ; ******************************rL., ALTERNATE AVAIL ; ; PHYSICAL DEVICE # FOR DECTAPES - 1 CONTROLLER .WORD 2000,2001,2002,2003,2004,2005,2006,2007 ; ; ; ALTERNATE DEVICE TABLE (PARALLEL TO PHYSICAL DEVICE TABLE) ; ALTDEV: .WORD 4,0,0,0,0 .WORD 0,0,0,0,0,0,0,0 ; FOR DECTAPES - 1 CONTROLLER ; ; IPL = . RESET ; SEND INIT PULSE TO ALL DEVICES MOV #340,PSR ; SET CPU LEVEL TO 7 DURING IPL MOV #SSTACK,SP ; SET UP SYSs; ******************************************************************** ; * -------------------- S U P E R ------------------- * ; * ---------------------- D U M P --------------------- * ; * * ; * THIS PROGRAM DUMPS IN OCTAL FROM EITHER DISC OR FROM CORE TO * ; * THE LINE PRINTER. THE CHOICE OF ONE OF THE DISCS OR MEMORY IS * ; * MADE AT RUN TIME BY APPROPRIATE SETTING OF THE CONSOLE SWItTTTTTBT TTTT$T[,TTTzTtTnThT TTTT$T[,TbT\TVTPTJTDT TTTT$T[,T>T8T2T,T&T ]T TTTT$T[*6TTTTT$1T TTTTu************************************** LDER13: MOV #13,R4 ;FIRST MODULE BLOCK NOT "GSD" JSR PC,ERRPRT LDER14: MOV #14,R4 ;FIRST ENTRY IN GSD NOT OBJ MOD NAME JSR PC,ERRPRT LDER15: MOV #15,R4 ;ILLEGAL GSD ENTRY DECLARATION JSR PC,ERRPRT LODC19: JMP LODF00 ;END OF READING FIRST PASS OVER OBJ MODS .PAGE ;****************PROCESSING FOR INDIVIDUAL G S D ENTRIES************** ; ON ENTRY TO EACH RvTEM STACK .IFZ $SAVE-104400 ; ONLY IF ODT IN CORE MOV 14,-(SP) MOV 16,-(SP) .ENDC JSR PC,PSTIPL ; TRAP INIT. .IFZ $SAVE-104400 ; ONLY IF ODT IN CORE MOV (SP)+,16 ; RESTORE ODT'S TRAP MOV (SP)+,14 .ENDC JSR PC,PFSIPL ; FOWER FAIL INIT. ; ; SET UP INTERRUPT AND TRAP VECTORS ; MOV #RQUEST,MPSHBT ; SET UP HANDLER FOR MANUAL PUSHBUTTON wTCHES* ; * * ; * THE PROGRAM IS POSITION-INDEPENDENT AND FREE STANDING. * ; * THUS, IT NEED NOT BE LINKED TO ANY OTHER MODULES, CAN BE LOADED* ; * ANYWHERE IN CORE, AND DOES NOT INTERFACE WITH ANY EXTERNAL * ; * DRIVERS. IT CAN EVEN BE LOADED FROM PAPER TAPE, USING THE * ; * RELOCATING FEATURE OF THE ABSOLUTE LOADER. * ; * yOUTINE, R1 AND R4 POINT TO CANDIDATE ENTRY ;*******MODULE NAME******** LODE00: JSR PC,SRMODN ;SEARCH FOR MODULE NAME BR LDER16 ;NOT UNIQUE MOV SYME,PTROBJ ;POINTER TO NEW MODULE NAME IN LSD JSR PC,INSYME ;GO INSERT ENTRY INTO LSD BR LODD20 ; ******************************************************************** LDER16: MOV #16,R4 ;MODULE NAME NOT UNIQUE JSR PC,ERRPRT z MOV #MPSHLV,MPSHBT+2 MOV #SAVE,SAVTRP ; SET UP SAVE TRAP HANDLER MOV #SAVLEV,SAVTRP+2 MOV #EMTRAP,30 ;INIT EMT TRAP VECTOR MOV #340,32 ;LEVEL 7 MOV #TIMCTL,100 ; INIT CLOCK TO L-F CLOCK INTERRUPT MOV #340,102 .IFGE NTTYS-1 MOV #200,R1 ;INIT INTERRUPT VECTORS FOR MOV #KBDINT,60 ;TTY UNIT 0 MOV R1,62 MOV #PRTINT,64 * ; * TO RUN THIS PROGRAM, BEGIN AT "START". NO HARDWARE INIT IS OR * ; * NEED BE GIVEN. THE ONLY DEVICES THAT ARE RESET ARE THE DISC * ; * AND THE LINE PRINTER. THEY ARE RUN WITH INTERRUPTS DISABLED. * ; * IN THE CASE OF DUMPING FROM MEMORY, NO DISC RESET IS ISSUED. * ; * AT THIS TIME "HOME" THE PRINTER IF TOP-OF-FORM IS DESIRED. * ; * AT THE FIRST "HALT", SELECT ONE OF THE DISCS OR MEMORY: * ; * CONSOLE SWITCHES: =1-->RF-11; =2-->DDC-7~D7 .7 .W. ..(X7 .7 .7 .7 .7 .7 .7 .7 ... ......".6@  @ @ 6@  @ @ $6@  @ @} .PAGE ;*******SECTION NAME******** LODE20: JSR PC,PTGLOB ;SEARCH FOR IT IN LSD BR LODE22 ;NOT FOUND - GO INSERT IT BITB #UNDEF,FLAGS(R1);IS IT DEFINED? BNE LODE24 ;YES -(BYPASS UNDEF WORK) JSR PC,SQUISH ;NO: REMOVE FROM UNDEF AREA SUB #BPSYM,USYME ;AND ADJUST UNDEF PTR LODE22: MOV R1,R4 ;INSERT NEW SECTION NAME INTO LSD MOV SYME,PTSECT ;POINTER TO  MOV R1,66 .ENDC .IFGE NTTYS-2 INC R1 ;INIT INTERRUPT VECTORS FOR MOV #KBDINT,340 ;TTY UNIT 1 MOV R1,342 MOV #PRTINT,344 MOV R1,346 .ENDC .IFG NTTYS-2 XXXXXX ;CREATE ASSY ERROR IF NTTYS .GT. 2 .ENDC .IFNZ NDISCS .IFZ $DDSDC ; ONLY FOR RF-11 DISK MOV #DINT,204 ; SET UP FOR DISC 0 .pphfp@[g4@( v3dhvhj,w  DE@!!/[g4,$  CaaŠw  hfp .He; UPDATE 3/10/72 ROS2.RASM ; UPDATE 2/24/72 ROS2.SYS ; UPDATE 2/16/72 ROS2.SYS ; UPDATE 1/12/72 ROS2.SYS ; UPDATE 1/11/72 ROS2.SYS ; STANDARD REGISTER DEFINITIONS R0 = %0 R1 = %1 R2 = %2 R3 = %3 R4 = %4 R5 = %5 SP = %6 PC = %7 PS = 177776 ; $DEBUG = 1 ; ROS DEBUG SWITCH $SAVE = 10SECTION NAME IN LSD JSR PC,INSYME ;INSERT NEW NAME IN LSD BR LODD20 LODE24: ;SECTION NAME FOUND ALREADY DEFINED IN LSD CMPB FLAGS+1(R4),#SECTN ;IS IT A SECTION NAME,TOO? BNE LDER17 ;NO - DOUBLE DEFINITION ERROR MOV R4,PTSECT ;SECTION NAME POINTER TO ORIG ENTRY CMP VALR(R4),VALR(R1) ;COMPARE SECTION SIZES BHIS LODD20 ;ORIG WAS BIGGER: LEAVE IT MOV VA 66@  @ @ Hv6@  @ @ Zd6@  @ @ l7 .7 .0.@  @ ...7 .7 .7 .7 .7 .7 .7 .7 .6. ......".& MOV #240,206 ; AT INTERRUPT LEVEL 5 .ENDC .IFNZ $DDSDC ; ONLY FOR DDS DISK MOV #DINT,214 ; DISK 0 MOV #240,216 ; AT LEVEL 5 .ENDC .ENDC ; ; XFER TO OTHER INITIALIZATION SUBROUTINES ; JSR PC,TTINIT ;INITIALIZE TTYIO TABLES JSR PC,QIPL ; INITIALIZE QUEUE TABLES JSR PC,CLINIT ;INIT FOR CLOCK ROUTINES JSR PC,EMTINIT 4400 ; USE TRAP INSTR. TO CALL SAVE ; ; ; TASK CONTROL SYSGEN EQUATE CARDS ; NPRIOR = 4 ; NO. OF SOFTWARE PRIORITY LEVELS. PRIBKG = NPRIOR ; PRIORITY OF BACKGROUND .IFLE NPRIOR ; XXXXXXXX ;NPRIOR MUST BE GREATER THAN ZERO .ENDC MXTASK = 20 ; MAX. NUMBER OF CORE TASKS IN SYSTEM. NLTASK = 1 ; LARGEST TASK # OF TASKS LOADED WITH SYSTEM LR(R1),VALR(R4) ;REPLACE WITH NEW BIGGER SIZE BR LODD20 ; ******************************************************************** LDER17: MOV #17,R4 ;SECTION NAME CONFLICT W/GLB OR MOD NAME JSR PC,ERRPRT .PAGE ;*******GLOBAL SYMBOL******** (HERE AT LAST...) LODE40: BITB #UNDEF,FLAGS(R1);REF OR DEF? BEQ LODE50 ;REF JSR PC,PTGLOB ;DEF - SEE IF IT IS ALREADY IN LSD BR LODE44 ! ee  w K([g4,n  ŋW? &,e ee e Q Š@( ; INIT EMT NUMBERS JSR PC,LODINIT .IFG NLP ; ONLY IF HAVE LP JSR PC,LPINIT .ENDC .IFG NCR ; ONLY IF HAVE CARD READER JSR PC,CRINIT .ENDC ; ; SET UP INPUT IN TASK TABLE ; MOV #1,R1 ; SET UP FOR TASK NO. ONE MOVB #NPRIOR-1,TPRTY(R1) ; SET PRIORITY OF INPUT CLRB TSTAT(R1) ; SET QUIESCENT ASL R1 ; TASK W ;NOTE: IF OVERLAYS ARE USED, THEN THE ;FIRST OVERLAY TASK NUMBER IS MXTASK+1 OVTMIN = MXTASK+1 ;FIRST OVERLAY TASK NUMBER OVRLAY = 0 ; NO OVERLAY TASKS. ;0 = NO OVERLAY, 1 = OVERLAY .IFNZ OVRLAY ; MAXOVR = 20 ;MAXIMUM NUMBER OF OVERLAY TASKS .ENDC ;(NOT USED IF OVRLAY = 0) .IFZ OVRLAY ; MAXOVR;NOT FOUND BITB #UNDEF,FLAGS(R4);FOUND: IS IT ALREADY DEFINED? BEQ LODE42 ;NO: GO REMOVE IT FROM UNDEF AREA BISB #DBLDEF,FLAGS(R4) ;FLAG OLD ONE AS A DOUBLER BISB #DBLDEF,FLAGS(R1) ;ALSO FLAG NEW ONE BR LODE44 ;BYPASS REMOVAL LODE42: JSR PC,SQUISH ;REMOVE FROM UNDEFINED TABLE SUB #BPSYM,USYME ;AND ADJUST ITS POINTER LODE44: MOV R1,R4 ;AGAIN POINT TO INPUT ENTRY 312; =3-->MEMORY * ; * (IF SWITCHES ARE =0, PROGRAM WILL ENTER AN INFINITE TIGHT LOOP)* ; * NOW PRESS "CONTINUE". UPON THE NEXT "HALT", SET THE SWITCHES * ; * TO THE NUMBER OF THE SECTOR (FOR DISC) OR THE MEMORY ADDRESS * ; * AT WHICH YOU WISH TO BEGIN DUMPING. (IN THE CASE OF MEMORY, * ; * DUMPING WILL BEGIN AT THE BEGINNING OF THE 64-WORD BLOCK WHICH * ; * CONTAINS THE SELECTED START ADDRESS.) NOW PRESS "CONTINUE". * ; * UPON THE NEXT (THIRD) "HALT", ENTEORD INDEX MOV #INPTHD,HEADER(R1) ; SET HEADER ADDRESS .IFNZ MSGBUF ; ONLY IF DISK MESSAGE BUFFERING ; .REF FILE ; ; SET UP DISCS FILES FOR TTY ; MOV #20.,R1 MOV #FILE,R2 MOV #20,R3 IPLX50: MOV R1,(R2)+ ; SET UP FILE ID MOV R3,(R2)+ ; SET UP START SECTOR MOV #404,(R2)+ ; P=0,DEVICE=1,FILE TYPE=4 MOV #FILESZ,(R2)+ ; SET UP LENGTH = 0 ;SET TO ZERO ONLY IF NO OVERLAYS .ENDC TASMAX = MXTASK+MAXOVR ;MAXIMUM NUMBER OF TASKS (INCL OVERLAYS .IFLE MXTASK ; XXXXXXXX ;MXTASK MUST BE GREATER THAN ZERO .ENDC .IFL NLTASK ; QTAB XXXXXXXX ;NTASK CANNOT BE NEGATIVE .ENDC .IFG NLTASK-MXTASK ; QTAB XXXX JSR PC,INPTRH ;INSERT IT ALPHABETICALLY IN THIS SECT'N ;IF IT WAS DOUBLY DEFINED, BOTH ENTRIES ARE FLAGGED AS SUCH. THE FIRST ;ENTRY WILL BE USED AS THE REF'D VALUE. THE MAP WILL SHOW ALL OF THEM. BR LODD20 ; * * * GLOBAL REF * * * LODE50: JSR PC,PTGLOB ;IS IT IN LSD ALREADY? BR LODE52 ;NOT FOUND: INSERT IT BR LODD20 ;FOUND: NO NEED TO DO ANYTHING LODE52: JSR PC,INUSYM ;INSERT AS AN UNDEFINED BR R INTO THE CONSOLE SWITCHES * ; * THE NUMBER OF CONSECUTIVE DISC SECTORS OR CORE MEMORY BLOCKS * ; * YOU WISH TO DUMP. * ; * PRESS "CONTINUE" AGAIN. SECTORS OR BLOCKS WILL BE PRINTED * ; * UNTIL THE SECTOR/BLOCK COUNT IS EXHAUSTED. THE PROGRAM WILL * ; * THEN JUMP TO ITS "START" TO AWAIT ANOTHER DUMP REQUEST. * ; * * ; * CLR (R2)+ ; CKSAVE = 0 ADD #FILESZ,R3 ; START SECTOR NEXT FILE INC R1 ; BUMP FILE ID CMP R1,#35. ; FINISHED? BLE IPLX50 ; NO .ENDC CLR R0 CLR R1 CLR R2 CLR R3 CLR R4 CLR R5 JMP DSPTCH ; FINISHED WITH IPL-EXECUTE ROS ; ; ; .END XXXX ;NTASK MUST BE <= MXTASK .ENDC ; ; THE FOLLOWING IS A LIST OF PRIORITY PROPERTIES ; +1 = TIME SLICE PRIORITY (CORE OR OVERLAY) ; 0 = FIXED OVERLAY TASK (MAY BE CORE) ; -1 = FREE TASKS (CORE OR DYNAMIC OVERLAY) ; PRIP01 = -1 ; PRIORITY PROPERTY LEVEL 1 PRIP02 = 0 ; PRIORITY PROPERTY LEVEL 2 PRIP03 = 1 ; PRIORITY PROPERTY LEVEL 3 PRIP04 = -1 PR LODD20 .PAGE ;NOW ALL OBJ MODULES HAVE BEEN PASSED OVER ONCE, ALL ; GSD'S HAVE BEEN PROCESSED, AND THE LOADER'S SYMBOL DIRECTORY ; (LSD) HAS BEEN CONSTRUCTED. NOW THE LSD MUST BE PASSED OVER ; TO ASSIGN LOAD MODULE RELATIVE ADDRESSES TO ALL GLOBAL SYMBOLS, ; AND SECTION BASES ASSIGNED. THE LOAD MAP WILL THEN BE PRINTED, ; SHOWING LOAD MODULE RELATIVE ADDRESSES, MULTIPLY DEFINED SYMBOLS ; ACCOMPANIED BY A "M" FLAG. LODF00: * ; * SINCE THE PROGRAM IS COMPLETELY SELF-INITIALIZING, IT CAN BE * ; * KEPT IN CORE PERMANENTLY AND RUN AT ANY TIME, WITH MINIMUM * ; * INTERFERENCE TO OTHER PROGRAMS THAT ARE RESIDENT. * ; ******************************************************************** R0=%0 R1=%1 R2=%2 R3=%3 R4=%4 R5=%5 SP=%6 PC=%7 SWR = 177570 ;SWITCHES LPADDR = 165010 ;PRINTER MEMORY ADDRESS REG IP05 = 0 ; PRIORITY PROPERTY LEVEL 5 PRIP06 = -1 ; PRIORITY PROPERTY LEVEL 6 PRIP07 = 0 ; PRIORITY PROPERTY LEVEL 7 PRIP08 = 1 ; PRIORITY PROPERTY LEVEL 8 PRIP09 = 1 ; PRIORITY PROPERTY LEVEL 9 PRIP10 = 0 ; PRIORITY PROPERTY LEVEL 10 PRIP11 = 0 ; PRIORITY PROPERTY LEVEL 11 PRIP12 = 1 ; PRIORITY PROPERTY LEVEL 12 PRIP13 = ;END OF PASS 1 MOV #ND1MSG,TTYBUF ;INIT TO PRINT "END PASS 1" ON TTY MOV #TTYLST,-(SP) EMT TTYOUT CLR PRSIZE ;INIT PROGRAM LOAD SIZE MOV #LSDBGN,R0 ;INIT PTR TO LSD MOV R0,PTROBJ ;...AND TO CURRENT OBJ MODULE BR LODF20 LODF10: ADD #BPSYM,R0 ;NEXT ENTRY LODF20: CMP R0,SYME ;END OF LSD? BHIS LODF90 ;YES: EXIT LOOP MOVB FLAGS+1(R0),R1LFREG = 165012 ;PRINTER AUTOLINEFEED REG LPWC = 165014 ;PRINTER WORD COUNT REG LPCMD = 165016 ;PRINTER COMMAND REG LPCSR = 165016 ;PRINTER STATUS REG .TITLE SUPDMP .REF SUPDMP SUPDMP: START: BIS #40,@#LPCMD ;PRINTER CLEAR CLR @#LPADDR ;ALSO ITS MEM ADDR REG MOV #1,@#LFREG ;AUTOLINEFEED TO PRINTER HALT ;1ST HALT: WAIT FO(!6 6 6 6 6 -1 ; PRIORITY PROPERTY LEVEL 13 PRIP14 = -1 ; PRIORITY PROPERTY LEVEL 14 PRIP15 = -1 ; PRIORITY PROPERTY LEVEL 15 PRIP16 = 0 ; PRIORITY PROPERTY LEVEL 16 .PAGE ; ; QUEUE SYSGEN EQUATE CARDS ; DPRTY = 1 ;DYNAMIC PRIORITY ASSIGNMENT; IF ; DPRTY = 0, THE ALL TASK PRIORITIES ; WILL BE RETRIEVED FROM TASK TABLE. ; ;ENTRY TYPE MOVB FLAGS(R0),R2 ;QUALITIES FLAG CMPB R1,#GENTRY ;GLOBAL SYMBOL? BEQ LODF50 ;YES DEC R1 ;SECTION NAME? BNE LODF10 ;NO: GET NEXT ENTRY .PAGE ;*******SECTION NAME: MAKE ITS SIZE EVEN, STORE ITS BASE VALUE, SET PTR ; TO THIS SECTION, AND INCREMENT THE TOTAL PROGRAM SIZE. BITB #ABSREL,R2 ;ABSOLUTE OR RELOCATABLE? BNE LODF30 ;REL R DEVICE SELECTION MOV @#SWR,KEY ;DEVICE SELECTION KEY BEQ . ;STICK HERE FOR OPERATOR INTERVENTION MOVB #'B,DISCID ;INIT I.D. PRINT OF "B" FOR DDC DISC CLRB DSWICH ;PREPARE PGM FOR USING "DDC" DISC MOV PC,R5 ;R5 IS USED AS PTR TO TABLE OF DISC ADDRESSES ADD #DSCTAB-.,R5 ;NOW AT TOP OF TABLE CMP KEY,#2 ;WAS DDC DISC SELECTED? BEQ HALT2 ;YES: 6 6 $6 66 H&  IF DPRTY = 1, THEN CALLING PROGRAM ; CAN SELECT PRIORITY. ARG = 1 ;ARGUMENT OPTION; IF ARG = 1, THEN ; THE CALLING PROGRAM CAN PASS AN ; ARGUMENT TO THE QUEUED TASK. RGSAVE = 1 ;REGISTER SAVE OPTION. 1 = SAVE ;REGISTERS, 0 = DON'T SAVE 'EM. ; ; ***** NOTE: IF DPRTY = 0 OR ARG = 0, THEN THE CORRESPONDING ; CLR VALR(R0) ;ABS: SET SIZE... CLR BASE(R0) ;...AND BASE = 0 BR LODF40 LODF30: ;RELOCATABLE SECTION MOV VALR(R0),R3 ;SECTION SIZE MOV R3,R4 ASR R4 ADC R3 ;MAKE SIZE EVEN MOV PRSIZE,BASE(R0) ;SET BASE OF NEW SECTION ADD R3,PRSIZE ;SUM UP TOTAL SIZE (& END OF THIS SECT) LODF40: MOV R0,PTSECT ;POINTER TO NEW SECTION BR NO FURTHER WORK NEEDED ADD #10.,R5 ;RF-11 DISC: USE UPPER HALF OF TABLE DECB DISCID ;PRINT "A" FOR RF-11 INCB DSWICH ;SET SWITCH TO GO THRU SHIFT LOGIC HALT2: HALT ;NOW WAIT FOR ADDRESS SELECTION MOV @#SWR,ADRESS ;DISC OR MEMORY: SAVE HALT ;WAIT FOR KEY-IN OF SECTOR/BLOCK COUNT MOV @#SWR,SECNT ;SAVE IT CMP KEY,#3 ;WAS MEMORY SELECTED? BNE DI ---- ARGUMENT SHOULD BE OMITTED FROM THE CALLING LIST. .IFL DPRTY ; XXXXXXXX ;CREATE ASSEMBLY ERROR IF DPRTY ISNT .ENDC ;ZERO OR ONE. .IFG DPRTY-1 ; XXXXXXXX ; .ENDC ; .IFL ARG ; XXXXXXXX ;CREATE ASSEMBLY ERROR IF ARG IS NO .ENDC ;ZERO OR ONE .IFG ARG-1 ; LODF10 ;GET NEXT ENTRY ;*******GLOBAL ENTRY POINT LODF50: BITB #ABSREL,R2 ;ABS OR REL? BEQ LODF60 ;ABS MOV PTSECT,R3 ;POINTER TO CURRENT SECTION MOV BASE(R3),BASE(R0) ;SECTION BASE ADD VALR(R0),BASE(R0) ;CALC OFFSET FROM LOAD MOD BASE BR LODF10 ;NEXT LODF60: MOV VALR(R0),BASE(R0) ;HAS ABS VALUE BR LODF10 .PAGE ;NOWSC ;NO BIC #77,ADRESS ;ALWAYS DUMP IN BLOCKS OF 64 WORDS .PAGE PRTMEM: MOV ADRESS,R4 MOV PC,R3 ADD #MEMADR+6-.,R3 JSR PC,BIN2OCT ;CONVERT MEM ADDRESS TO PRINT IT MOV PC,R3 ADD #MEMBUF-.,R3 JSR PC,PRTHED ;GO PRINT MEMORY ADDRESS OF BLOCK MOV ADRESS,R0 ;PREPARE TO ... JSR PC,FILLBF ;...CONVERT BINARY TO ASCII AND PRINT IT AD.r\MH@2@49@.:<}@f@;}G@@ ` @(,\My:hO(00 *%2 :<} ` *2";}GO& XXXXXXXX ; .ENDC ; .IFL RGSAVE ; XXXXXXXX ;CAUSE AN ASSEMBLY ERROR IF .ENDC ;RGSAVE ISN'T 0 OR 1 .IFG RGSAVE-1 ; XXXXXXX ; .ENDC ; $ABMES = 1 ; # OF ABORT MESSAGE BUFFERS .IFL $ABMES ; $ABMES MUST BE => 0. XXXXXX ; ALL ENTRY POINTS AND SECTION BASES HAVE BEEN ;RELOCATED WITH RESPECT TO PROGRAM BASE ZERO. ;NOW TIME TO PRINT THE LOAD MAP. LODF90: MOV #HEDING,MAPBUF ;PRINT HEADING JSR PC,LPCALL ;GO ASK FOR LINE PRINTER MOV #LSDBGN,R0 CLR PRSIZE ;INIT CUMULATIVE LOAD MODULE SIZE BR LODG20 LODG10: ADD #BPSYM,R0 ;NEXT ENTRY LODG20: CMP R0,SYME ;END OF LSD? BHIS LOD #200,ADRESS ;IF MORE TO DO, BUMP ADDRESS... BR PRTMEM ;...AND CONTINUE .PAGE DISC: ;HERE TO DUMP FROM DISC BIS #400,@(R5) ;DCS - DISC CLEAR MOV ADRESS,R0 MOV R0,SECTOR ;SAVE IT FOR PRINTOUT DSWICH: BR .+2 ;USE RF-11 DISC IF INCREMENTED BR SETDAR ;...ELSE USE "DDC" DISC MOV R0,R1 ;NEED TO SPLIT IT UP SWAB R1 ;Fd! ;}G0   (  +(]"   ( +"*(.,   , '"8'(":,Rf&CCTQ$ w 5>,v   "~   ~ ,  77e   "4,0$      ABRT .ENDC ; PSTP ; THE SYSGEN PARAMETER '$PST CONTROLS THE EXECUTION PATH*PSTP ; DURING A TASK ERROR. PSTP ; = -1 ROS + USER ROUTINES PSTP ; = 0 ROS PSTP ; = +1 USER PSTP ; DH10 ;YES: EXIT LOOP MOVB FLAGS+1(R0),R1 ;ENTRY TYPE BEQ LODG30 ;OBJ MOD NAME DEC R1 BEQ LODG40 ;SECTION NAME CMP R1,#3 ;ENTRY? BNE LODG10 ;NO: IGNORE MOV #GLOBAL,-(SP) ;YES:***PRINT ENTRY NAME & VALUE*** MOV R0,-(SP) EMT R50UNP ;RAD50 UNPACK MOV 10(R0),R4 ;GLOBAL'S VALUE RELATIVE TO LOAD BASE 0. IRST GET EXTENSION BITS ASR R1 ASR R1 BIC #-3-1,R1 ;ISOLATE THE TWO EXTENSION BITS MOV R1,@10(R5) ;...AND FEED IT TO THE DISC - DAE ASL R0 ;LEFT-JUSTIFY LOW TEN ADDRESS BITS ASL R0 ASL R0 ASL R0 ASL R0 ASL R0 SETDAR: MOV R0,@6(R5) ;OUTPUT SECTOR NUMBER TO DISC ADDR REG .PAGE PRTSEC: ;NOW PRINT SECTOR HEADING ; UPDATE 1 3/17/72 TO IPL2.RAS ; UPDATE 3/13/72 FIX UP IPL2.RAS ; UPDATE 3/13/72 FROM IPL2.S12 TO IPL2.RAS ; UPDATE 3/13/72 IPL.S12 ; UPDATE 2/16/72 IPL2.S11 ; UPDATE 1/19/72 IPL2.S10 ; UPDATE 1/12/72 IPL2.S09 ; UPDATE 12/11/71 IPL.S08 ; UPDATE 12/10/71 IPL.S07 ; UPDATE 12/2/71 IPL.S06 ; UPDATE 11/18/71 IPL.S05 ; UPDATE 11 PSTP $PST = 0 ; PSTP ; PSTP .PAGE ;FOLLOWING ARE SYSGEN PARAMETERS FOR THE TIMER AND CALENDAR ROUTINES ; NORMALLY THE BASE PERIOD FOR THE TIMERS IS THE INTERRUPT PERIOD, AND ; IF THAT PERIOD IS DESIRED FOR USE BY ANY TIMER MODULE, "RESO" MUST BE ; SET TO 1, AND THAT RESOLUTION (ZERO) SPECIFIEMOV #GLBVAL+6,R3 ;END OF ASCII BUFFER JSR PC,BIN2OC ;CONVERT BINARY TO OCTAL ASCII MOVB #' ,MFLAG ;INIT "M" FLAG POSITION WITH SPACE BITB FLAGS(R0),#DBLDEF ;WAS THIS SYMBOL MULTIPLY DEFIND BEQ LODG25 MOVB #'M,MFLAG ;YES: SET TO FLAG ENTRY IN MAP LODG25: MOV #ENTRY,MAPBUF ;SET UP TO PRINT ENTRY LINE JSR PC,LPCALL BR LODG10 ;NEXT .PAGE LODG30: ;***PR MOV SECTOR,R4 MOV PC,R3 ADD #SECNUM+6-.,R3 JSR PC,BIN2OCT ;CONVERT SECTOR # TO PARITY ASCII MOV PC,R3 ADD #HEDBUF-.,R3 JSR PC,PRTHED ; NOW PRINT ONE SECTOR'S WORTH --- MOV PC,R3 ADD #DSCBUF-.,R3 MOV R3,@2(R5) ;CURRENT MEMORY ADDRESS REGISTER MOV #-64.,@4(R5) ;DISC WORD COUNT: ONE SECTOR MOV #5,@(R5) ;DCS - READ! TS/15/71 IPL.S04 ; UPDATE 11/12/71 IPL.S03 ; UPDATE 11/11/71 IPL.S02 ; UPDATE 11/10/71 IPL.S01 .TITLE IPL ;*********************************************************************** ;* * ;* INITIAL PROGRAM LOAD WILL INITIALIZE THE ROS SYSTEM AND * ;* THEN EXIT TO DISPATCH. THIS MODULE SHOULD BE EXECUTED * ;* BEFORE ENTERING ROS FOR THE FIRST D BY THOSE MODULES. ; IF IT IS DESIRED TO MAKE THE BASE PERIOD COARSER THAN THE INTERRUPT ; PERIOD, "$TMBAS" MUST BE SET TO THE DESIRED RATIO OF BASE PERIOD TO ; INTERRUPT PERIOD. $TMBAS = 0 ;DE-SELECT ALTERNATE BASE PERIOD OPTION ; THE FOLLOWING PARAMETERS SPECIFY THE MULTIPLIERS THAT WILL BE LOADED ; INTO THE RESOLUTION COUNTER TABLES FOR DETERMINING THE PERIOD OF EACH ; RESOULTION. THE PERIOD OF A GIVEN RESOLUTION LEVEL DEPENDS ON ALL ; THE PRECEDING LEVELS (WITINT OBJECT MODULE'S NAME*** MOV #TITLE,-(SP) MOV R0,-(SP) EMT R50UNP ;UNPACK MODULE'S NAME MOV #MODULE,MAPBUF ;INIT TO PRINT MODULE NAME & HEADING JSR PC,LPCALL ;GO PRINT IT BR LODG10 ;NEXT LODG40: ;***PRINT PROGRAM SECTION NAME*** MOV #SECNAM,-(SP) MOV R0,-(SP) EMT R50UNP ;UNPACK SECTION NAME MOV 10(R0),R4 MOV #STB @(R5) ;DCS - READY? BPL .-4 ;NOT YET MOV PC,R0 ADD #DSCBUF-.,R0 ;POINTER TO BINARY BUFFER JSR PC,FILLBF INC SECTOR BR PRTSEC .PAGE FILLBF: MOV #4,LINCNT ;PRINT FOUR LINES OF 16 WORDS EACH NXTLIN: MOV PC,R3 ;PRINT NEXT LINE ADD #LPBUF+6-.,R3 ;ASCII BUFFER MOV #16.,R1 ;# WORDS PER LINE CVRT: MOV (R0)+,R4 ;NEXTIME. * ;* * ;* PROGRAMMER 51,52,53 AND 54 * ;* DATE 11/9/71 * ;* REVISION ;* REVISION * ;* * ;*********************************************************************** .REF H LOWER NUMBERS), WHICH ACT AS SUCCESSIVE ; MULTIPLIERS IN COUNTING TO THE GIVEN RESOLUTION LEVEL. ; THUS, FOR "RES4", ITS PERIOD WOULD BE: ; RES4*RES3*RES2*RES1*RES0 --- IN UNITS OF THE BASE PERIOD RES0 = 1 ;1/60 RES1 = 15. ;1/4 RES2 = 2 ;1/2 RES3 = 2 ;1 RES4 = 5 ;5 RES5 = 2 ;10 RES6 = 3 ;30 RES7 = 2 ECVAL+6,R3 JSR PC,BIN2OC ;CONVERT BINARY TO OCTAL ASCII MOV 6(R0),R1 ;SECTION SIZE MOV R1,R4 MOV #SECSIZ+6,R3 JSR PC,BIN2OC ;CONVERT BINARY TO OCTAL ASCII MOV R1,R2 ASR R2 ADC R1 ;MAKE MODULE SIZE EVEN ADD R1,PRSIZE ;ACCUMULATE LOAD MODULE SIZE MOV PRSIZE,R4 MOV #CUMSIZ+6,R3 JSR PC,BIN2OC ;CONVERT IT TO OT BINARY WORD JSR PC,BIN2OCT ;CONVERT IT TO PARITY ASCII ADD #6,R3 ;GET TO END OF CURRENT ASCII MOV #120240,(R3)+ ;INSERT A DOUBLE SPACE ADD #6,R3 ;GET IT READY FOR NEXT CONVERSION DEC R1 ;MORE WORDS IN THIS LINE? BGT CVRT ;CONVERT NEXT WORD ; BUFFER NOW FULL: TIME TO PRINT MOV PC,R1 ADD #LPBUF-.,R1 MOV R1,@#LPADDR EMTINIT ; FOR EMT INIT .REF UTLIPL ; .DEF IPL,SSTACK,LOGMAX,PHYDEV,ALTDEV .DEF QTIME,DQTIME,SSTACK .IFNZ OVRLAY ; ONLY IF HAVE OVERLAYS .DEF BEGDYN,ENDDYN .ENDC .REF TIMCTL,EMTRAP,CLINIT .REF RQUEST,SAVE,DSPTCH,QIPL,TPRTY,HEADER,INPTHD .REF PFSIPL,PSTIPL .REF TSTAT,DINT .REF RASIPL,RCIPL .REF PRTINT,KBDINT ;TTYIO PRINTER AND KEYBOAR;60 RES8 = 3 RES9 = 5 RES10 = 100. RES11 = 2 RES12 = 2 RES13 = 2 RES14 = 2 RES15 = 2 ; IN SYSTEMS WHERE THE BASE PERIOD IS GREATER THAN ONE MILLISECOND, ; "MSECR" WILL NECESSARILY HAVE A PERIOD GREATER THAN ONE MILLISECOND. MSECR = 0 ;NORMALLY 1 MSEC: HERE IS = 16.7 MSECS SECR = 3 ;"RES3" IS THE ONE-SECOND RESOLUTION TRES = SECR ; FOR TIME-SLICE WATCH-DOG IN RPCTAL ASCII MOV #SECT,MAPBUF JSR PC,LPCALL ;PRINT SECTION NAME,BASE,SIZE,& CUM SIZE BR LODG10 ;NEXT .PAGE LODH10: ;END OF PRINTING DEFINEDS: NOW PRINT UNDEFINEDS, IF ANY CMP SYME,USYME ;ANY UNDEFINEDS? BEQ LODH30 ;NO: GO TO MESSAGE MOV #UNDHED,MAPBUF JSR PC,LPCALL ;PRINT HEADING MOV #UNDDEF,MAPBUF ;SET UP TO PRINT FROM UNDEFINED BUF LODH20: MOV MOV #-63.,@#LPWC ;PRINT SIXTEEN 6-CHAR NUMBERS MOV #4000,@#LPCMD ;PRINT! TST @#LPCSR ;DONE? BPL .-4 ;NOT YET DEC LINCNT ;MORE LINES? BGT NXTLIN ;YES DEC SECNT ;DOES HE WANT ANOTHER SECTOR/BLOCK? BLE .+4 ;ALL DONE. RTS PC ;RETURN FOR ANOTHER ONE TST (SP)+ JMP START ;GO BACK AND WAIT D ;INTERRUPT ROUTINES .REF TTINIT ;TTYIO INITIALIZATION SUBROUTINE .IFG NLP ; ONLY IF HAVE LINE PRINTERS .REF LPINIT .ENDC .IFG NCR ; ONLY IF HAVE CARD READERS .REF CRINIT .ENDC ; .CSECT SSTACK = . ; BEGINNING VALUE OF SYSTEM STACK .IFNZ OVRLAY ; ONLY IF HAVE OVERLAYS ; ; THE FOLLOWING AREA IS REOM $NRES = 16. ;USE MAX # OF RESOLUTIONS .IFLE $NRES XXXXXXXX ;$NRES MUST BE FROM 1 TO 16 .ENDC .IFG $NRES-16. XXXXXXXX ;COME ON! MUST BE LESS THAN 17 .ENDC ; THE BASE PERIOD FOR THE TIME-OF-DAY CLOCK, ABORT, AND TIME-SLICE IS ; NORMALLY THE INTERRUPT PERIOD, AS SPECIFIED BY "TICRES". ; IF A MULTIPLIER FOR THIS INTERRUPT IS DESIRED TO PRODUCE A COARSER ; BASE PERIOD, USE THE PARAMETE #UNDNAM,-(SP) MOV R0,-(SP) EMT R50UNP ;CONVERT TO ASCII JSR PC,LPCALL ;GO PRINT IT ADD #BPSYM,R0 ;BUMP TO NEXT ENTRY CMP R0,USYME ;REACHED END? BLO LODH20 LODH30: ;NOW PRINT "PASS 2" ON TTY MOV #PAS2MG,TTYBUF MOV #TTYLST,-(SP) EMT TTYOUT ;PRINT MESSAGE ; ******************************************************************** FOR ANOTHER SEQUENCE .PAGE BIN2OCT: ;BINARY TO ASCII CONVERSION - WITH PARITY MOV #6,R2 ;CONVERT SIX CHARS BIN050: MOVB R4,-(R3) ;PUT NEXT DIGIT IN ASCII BUFFER BICB #370,(R3) ;ISOLATE ONLY THIS OCTAL DIGIT CLR -(SP) ;WILL ACCUM PARITY MOVB (R3),TMP ;WANT TO COUNT BITS ASR TMP ADC (SP) ASR TMP ADC (SP) ASR TMP ADC SERVED FOR THE DYNAMIC CORE POOL ; BEGDYN = . ; RESERVE 3K FOR . = .+6144. ENDDYN = . ; DYNAMIC CORE STORAGE .ENDC PSR = 177776 ; PROCESSOR STATUS REGISTER EQUATE ; ; INTERRUPT VECTOR EQUATES ; MPSHBT = 244 ; MANUAL PUSHBUTTON MPSHLV = 200 ; BR4 FOR MANUAL PUSHBUTTON .IFZ $SAVE-3 ; ONLY IF REAL SAVE (BPT TRAP) SAVTRP = 14 R "$ABMPL" TO SPECIFY THE RATIO DESIRED. TICRES = 60. ;# OF T-O-D CLOCK TICKS PER SECOND $ABMPL = 6 ;CLOCK BASE PERIOD = 1/10 SECOND C1COMD = 177546 ;DEVICE ADDRESS FOR HIGH-SPEED CLOCK C1CBIT = 100 ;BIT TO CONTROL FAST CLOCK INTERRUPT $TMSLC = 1 ;SYSTEM OPTION FOR INCLUDING TIME-SLICING $SWATZ = 20. ;NUMBER OF ENTRIES IN SCHEDULER "WAIT" TABLE $TWATZ = 20. ;WORDS IN TIMER'S "WAIT" TABLE .PAGE ;PASS 1 IS NOW COMPLETED. NOW BEGIN PASS 2 TO FORM THE ;LOAD MODULE ITSELF, COMPLETE WITH HEADER & TRAILER. ;THE METHOD IS TO:1)RESERVE A FILE THE SIZE OF THE LOAD ;MODULE, HAVING PRINTED ITS NAME ON THE LOAD MAP; ;2)SCAN THE OBJECT CODE FOR TEXT BLOCKS; ;3)MODIFY ANY RELOCATABLE CODE INDICATED IN ANY RLD BLOC ;4)CREATE THE TRAILER TO RELOCATE THE MODULE AT RUN TIME ;5 (SP) ASR (SP)+ ;SEE IF BIT COUNT WAS EVEN OR ODD BCC BIN100 ;WAS EVEN: PARITY BIT NOT NEEDED BISB #200,(R3) ;MAKE EVEN BY SETTING PARITY BIT BIN100: BISB #060,(R3) ;MAKE CHARACTER ASCII ASR R4 ;SHIFT FOR NEXT OCTAL DIGIT BIC #100000,R4 ;PREVENT SIGN PROPAGATION ASR R4 ASR R4 DEC R2 ;MORE ASCII DIGITS TO GO? BGT BIN050 ; SAVE TRAP .ENDC .IFZ $SAVE-104400 ; ONLY IF ODT SAVE (TRAP TRAP) SAVTRP = 34 .ENDC SAVLEV = 340 ; SAVE UNDER LOCKOUT ; ; ; PHYSICAL DEVICE TABLE ; LOGMAX: .WORD 12. ; LARGEST VALID LOGICAL DEVICE#. PHYDEV: .WORD 040000 ; TTY UNIT 3, AVAIL, ALTERNATE AVAIL .WORD 000400 ;DISC UNIT 0, AVAIL, NO ALTERNATE .WORD 100000 .WORD 100000 .W .PAGE ; ; NDISCS = 1 ; DISC OPTION AND NUMBER OF CONTROLLERS ; $DDSDC = 0 ;USE RF-11 ; ACTSIZ = 2 .IFL 20.-ACTSIZ XXXXXXXX ; ERROR-ALLOCATE MORE LOCATIONS XXXXXXXX ; FOR AUTHORIZATION CODES .ENDC ; .IFNZ NDISCS DRESDI = 0 ; DISK RES. DIRECTORY .IFL 3-NDISCS XXXXXXXX ; PRESENTLY CODED FOR )FILL IN THE HEADER & TRAILER POINTERS ;6)WRITE OUT THE LOAD MODULE ;THESE OPERATIONS ARE DONE A SECTOR AT A TIME, TO ;CONSERVE PROGRAM BUFFER SPACE. ; FIRST MUST INIT TRAILER AND OTHER POINTERS... MOV PRSIZE,R0 ;TOTAL PROGRAM BYTES DEC R0 ;IN CASE SIZE IS MULTIPLE OF 128 BYTES ASR R0 BIC #100000,R0 ASR R0 ASR R0 ASR R0 ASR ;BACK FOR MORE RTS PC PRTHED: MOV R3,@#LPADDR ;INIT PRINTER TO PRINT MOV #-9.,@#LPWC ;WORD COUNT MOV #4000,@#LPCMD ;PRINT! TST @#LPCSR ;DONE? BPL .-4 ;NOT YET RTS PC .PAGE ADRESS: .WORD 0 KEY: .WORD 0 ;DEVICE SELECTION KEY LINCNT: .WORD 0 SECNT: .WORD 0 ;# OF SECTORS TO PRINT SECTOR: .WORD 0 ;CURRENTORD 040001 ; TTY UNIT 1, AVAIL., ALTERNATE AVAIL ; ; PHYSICAL DEVICE # FOR DECTAPES - 1 CONTROLLER .WORD 2000,2001,2002,2003,2004,2005,2006,2007 ; ; ; ALTERNATE DEVICE TABLE (PARALLEL TO PHYSICAL DEVICE TABLE) ; ALTDEV: .WORD 4,0,0,0,0 .WORD 0,0,0,0,0,0,0,0 ; FOR DECTAPES - 1 CONTROLLER ; ; IPL = . RESET ; SEND INIT PULSE TO ALL DEVICES MOV #340,PSR ; SET CPU LEVEL TO 7 DURING IPL MAX. OF 3 DISCS .ENDC ; NDPRT1 = 3 ; DISK PRI. LEVELS. .IFL NDPRT1-3 XXXXXXXX ; MUST BE AT LEAST THREE .ENDC ; .IFG NDISCS-1 NDPRT2 = 7 ; NO. OF PRIORITY LEVELS IN DISC 2 QUEUES .IFL NDPRT2-3 XXXXXXXX ; MUST BE AT LEAST THREE .ENDC .ENDC ; .IFG NDISCS-2 NDPRT3 = 3 ; NO. OF PRIORITY LEVELS IN DISC 3 R0 ASR R0 ASR R0 ;PGM BYTES/128=# WHOLE SECTORS FOR PRGM INC R0 ;GET TO BEGIN OF NEXT SECTOR AFTER PGM MOV R0,TRASEC ;FIRST SECTOR FOR TRAILER MOV R0,TRSCSV ;SAVE IT FOR RE-READ AT LOADER END ASL R0 ASL R0 ASL R0 ASL R0 ASL R0 ASL R0 ASL R0 ;NOW HAVE RELATIVE PC FOR TRAILER START MOV SECTOR BEING DUMPED TMP: .WORD 0 HEDBUF: .BYTE '-,'S,'E+200,'C+200,'T+200,'O+200,'R+200,'-,'- DISCID: .BYTE 0,'< SECNUM: .=.+6 .BYTE '>+200 MEMBUF: .BYTE '-,'-,'C+200,'O+200,'R+200,'E+200,'-,'-,'-,'-,'< MEMADR: .=.+6 .BYTE '>+200 DSCTAB: ;TABLE OF DISC ADDRESSES FOR BOTH DISCS ; FOR DDC DISC: .WORD 165300 ;DISC CONTROL STATUS AND COMMAND REG .WORD 165304 ;DISC MEMORY ADDRESS REG .WORD 165302 MOV #SSTACK,SP ; SET UP SYSTEM STACK .IFZ $SAVE-104400 ; ONLY IF ODT IN CORE MOV 14,-(SP) MOV 16,-(SP) .ENDC JSR PC,PSTIPL ; TRAP INIT. .IFZ $SAVE-104400 ; ONLY IF ODT IN CORE MOV (SP)+,16 ; RESTORE ODT'S TRAP MOV (SP)+,14 .ENDC JSR PC,PFSIPL ; FOWER FAIL INIT. ; ; SET UP INTERRUPT AND TRAP VECTORS ; MOV #RQUEST,MPSHBT QUEUES .IFL NDPRT3-3 XXXXXXXX ; MUST BE AT LEAST THREE .ENDC .ENDC .IFZ DRESDI NCFILE = 3 ; NO OF CORE RES FILE ID. .ENDC .IFNZ DRESDI NCFILE = NDISCS+40. ; NO. OF CORE RESIDENT ID'S ; ; INCLUDING DOD'S .ENDC ERRPRT = 1 ; PRINT-OUT DISC ERROR MESSAGES OPTION .ENDC CHKPTC = 0 ; CH R0,TXTBK1 ;LOAD FIRST TEXT WORD W/PTR TO TRAIL BLK CMP (R0)+,(R0)+ ;ALLOW FOR 2-WORD TRAILER HEADER MOV R0,TRAPC ;INIT PERMANENT FOLLOWER OF TRAILER PC CLR TXTORG ;PC @ BEGIN OF CURRENT TEXT BUFFER MOV #LEDWDS*2,CURPC ;ALLOW FOR LEAD WORDS INSERTED BY LOADER MOV #LEDWDS*2+TXTBK1,TXTPTR ;...ALSO FOR TEXT POINTER MOV BGNSEC,TXTSEC ;INIT START SECTOR OF TEXT MOV #128.,TXTCNT ;INIT FOR ;DISC WORD COUNT .WORD 165306 ;DISC ADDRESS REG .WORD 165310 ;DISC ERROR REGISTER ; FOR RF-11 DISC: .WORD 177460 ;DISC CONTROL STATUS AND COMMAND REG .WORD 177464 ;DISC MEMORY ADDRESS REG .WORD 177462 ;DISC WORD COUNT .WORD 177466 ;DISC ADDRESS REG .WORD 177470 ;DISC ADDRESS EXTENSION REG LPBUF: .=.+132. DSCBUF: .=.+128. ;DATE: 22-MAR-72 ; SET UP HANDLER FOR MANUAL PUSHBUTTON MOV #MPSHLV,MPSHBT+2 MOV #SAVE,SAVTRP ; SET UP SAVE TRAP HANDLER MOV #SAVLEV,SAVTRP+2 MOV #EMTRAP,30 ;INIT EMT TRAP VECTOR MOV #340,32 ;LEVEL 7 MOV #TIMCTL,100 ; INIT CLOCK TO L-F CLOCK INTERRUPT MOV #340,102 .IFGE NTTYS-1 MOV #200,R1 ;INIT INTERRUPT VECTORS FOR MOV #KBDINT,60 ;TTY UNIT 0 MOV ECKPOINT CAPABILITY OPTION- ; ;******MODEL 45 ONLY FXPART = 1 ; FIXED PARTITION OPTION $SGMNT = 1 ; SEGMENT LOAD OPTION $CPTNO = 2. ; COMPRESS TASK NUMBER $MXFTP = 100. ; LARGEST FILE TYPE .PAGE ; ; TTYIO SYSGEN PARAMETERS ; NTTYS = 1 ; ONLY ONE TTY. ;IN SYSTEM SYSTTY = 0 ;LOGICAL UNIT NO. OTWO-SECTOR TEXT TRANSFERS MOV MODCNT,NAMCTR ;RE-INIT COUNTER FOR # OF OBJECT MODULES MOV #NAMBUF,NAMPTR ;RE-INIT POINTER TO MODULE NAMES MOV #TRAILBLOCK+4,TRAILPOINTER ;INIT TRAILER POINTER .PAGE LODJ10: ;LOOP HERE TO PROCESS SUCCESSIVE OBJ MODULE BLOCKS JSR PC,NXTMOD ;SET UP FOR NEXT OBJECT MODULE BR LODJ98 ;EXIT IF NO MORE LODJ12: JSR PC,GETBLK ;GET NEXT NON-GSD BLOCK BR ; M W KLEIN .END START R1,62 MOV #PRTINT,64 MOV R1,66 .ENDC .IFGE NTTYS-2 INC R1 ;INIT INTERRUPT VECTORS FOR MOV #KBDINT,340 ;TTY UNIT 1 MOV R1,342 MOV #PRTINT,344 MOV R1,346 .ENDC .IFG NTTYS-2 XXXXXX ;CREATE ASSY ERROR IF NTTYS .GT. 2 .ENDC .IFNZ NDISCS .IFZ $DDSDC ; ONLY FOR RF-11 DISK MOV F SYSTEM ;TTY DEVICE MSGBUF = 0 ;MESSAGE BUFFERING OPTION: IF 1, ;DISC MESSAGE BUFFERING VERSION IS ;ASSEMBLED. IF 0, CORE VERSION IS ;ASSEMBLED. DISCUN = 1 ;LOGICAL UNIT NO. OF DISC TO BE USED ;FOR MESSAGE BUFFERING DBUFSZ = 1 ;NO. OF 64 WORD DISC SECTORS ALLOCATED LODJ50 ;FOUND A "MODULE-END" BLOCK BR LODK10 ;"TEXT" BLOCK BR LODJ18 ;"RLD" BLOCK BR LODJ12 ;"ISD" BLOCK: IGNORE LODJ18: MOV #3,TSWICH ;RLD! SET FLAG TO SHOW NOT FOLLOWING TXT CLR TXTBC ;DON'T ALTER "TXTPTR" IN "TXTOUT" LODJ20: ;PROCESS NEXT COMMAND IN RLD BLOCK TST R0 ;IS RLD BC EXHAUSTED? BGT LODJ22 ;NO - CONTINUE LODJ60: zh (6,rr,~, @6 p3 N ,,S,   " 8 P)<,.eD zHn**rHn "*$*&,R   w hN,v  n    ~4, D  7 1-g,t $  0,  #DINT,204 ; SET UP FOR DISC 0 MOV #240,206 ; AT INTERRUPT LEVEL 5 .ENDC .IFNZ $DDSDC ; ONLY FOR DDS DISK MOV #DINT,214 ; DISK 0 MOV #240,216 ; AT LEVEL 5 .ENDC .ENDC ; ; XFER TO OTHER INITIALIZATION SUBROUTINES ; JSR PC,TTINIT ;INITIALIZE TTYIO TABLES JSR PC,QIPL ; INITIALIZE QUEUE TABLES JSR PC,CLINIT ;INIT FOR CLOCK ;FOR BUFFERING OF ONE MESSAGE ON DISC FILESZ = 20*DBUFSZ ;NO. OF SECTORS PER FILE NTRYS = 3 ;NO. OF TRYS TO OUTPUT A CHARACTER ;TO TTY TTOTIM = 15. ;MILLISECOND COUNT FOR TTY ;OUTPUT TIMERS TTITIM = 15. ;SECOND COUNT FOR TTY INPUT/OPERATOR ;RESPONSE TIMERS TTWTIM = 240. ;SECOND COUNT F ;DONE WITH BLOCK: OUTPUT TEXT, IF ANY, AND CONTINUE JSR PC,TXTOUT ;GO OUTPUT TEXT, IF BUFFER IS FULL... ; ;...OR IF "CURPC" WAS CHANGED LODJ66: ;NOW PROCESS NEW BLOCK, IF IT FORCED TEXT OUTPUT MOV TSWICH,R2 ;SWITCH INDICATES INITIATING BLOCK TYPE CMP R2,#TMAX ;IS THIS VALUE LEGAL BGT LDER12 ASL R2 ;MAKE INTO BYTE INDEX JMP @LODJ69(R2) .PAGE  D ,  `  7 @ ,  &,,*7: e 7 8 .W µ,N 0 0   C  ` 772r µ  0l0z *z=, 0,7 e 7 N 'W   ,,&'  .  },M F &'2 !ROUTINES JSR PC,EMTINIT ; INIT EMT NUMBERS JSR PC,RASIPL ; INIT RASM JSR PC,RCIPL ; INIT ROSCOM TEST JSR PC,UTLIPL ; INIT UTILITY TASKS (14. & 15.) .IFG NLP ; ONLY IF HAVE LP JSR PC,LPINIT .ENDC .IFG NCR ; ONLY IF HAVE CARD READER JSR PC,CRINIT .ENDC ; ; SET UP INPUT IN TASK TABLE ; MOV #1,R1 ; SET UPOR WAIT TIMER NWUCH = 5 ;NO. OF CHARS TO BE OUTPUT FOR ;WARMUP OF A TTY UNIT EOMCH = 33 ;ALTERNATE EOM CHAR (ALT KEY) EOMOPT = 0 ;EOM CHAR OPTION WHERE ; 1 = EOM IS FOLLOWED BY CR AND LF ; 0 = NOT FOLLOWED BY CR AND LF EOMPRT = 0 ;EOM PRINT OPTION WHERE ; 1 = EOM IS PRINTED LODJ69: ;"TSWICH" JUMP TABLE LODJ12 ;T=0: TEXT FOLLOWED BY RLD. NO ACTION ON RLD REQUIRED LODK10 ;T=1: TEXT FOLLOWED BY TEXT. PROCESS SECOND TEXT BLK NOW LODJ50 ;T=2: TEXT FOLLOWED BY MODULE END. GET NEXT MODULE NOW LODJ12 ;T=3: LONE RLD (NO PREVIOUS TEXT). GET NEXT BLOCK TMAX = .-LODJ69/2-1 ;MAX ALLOWABLE T-SWITCH VALUE ; ******************************************************************* LDER12: MOV #12,R4 ;MAX T-JUM",&' D 8 $,,B A w`. *   ,P- *  nDH&' \DH,te 7  6  E 6 d, 7 7 7,$7 7  v z  v V,x x t  FT : FOR TASK NO. ONE MOVB #NPRIOR-1,TPRTY(R1) ; SET PRIORITY OF INPUT CLRB TSTAT(R1) ; SET QUIESCENT ASL R1 ; TASK WORD INDEX MOV #INPTHD,HEADER(R1) ; SET HEADER ADDRESS .IFNZ MSGBUF ; ONLY IF DISK MESSAGE BUFFERING ; .REF FILE ; ; SET UP DISCS FILES FOR TTY ; MOV #20.,R1 MOV #FILE,R2 MOV #20,R3 IPLX50: MOV R1,(R2)+ ; SET UP FILE ID ; 0 = EOM IS NOT PRINTED EOLCH = 12 ;CHAR BEING USED FOR END OF LINE ON ;TTY INPUT ECHOCH = 40 ;ECHO CHAR -- CHAR OUTPUT FOR NO ECHO MRCH = 25 ;MESSAGE RESTART CHAR (CONTROL U) LINELN = 72. ;LINE LENGTH: NO. OF CHARS TO BE ;TYPED IN A LINE .PAGE ; ; SYSGEN VALUES FOR LINE PRINTER AND CARD READER ; NLP = 1P TABLE INDEX EXCEEDED JSR PC,ERRPRT GETBLK: ;SUBROUTINE TO GET A NON-GSD BLOCK. KEEPS FETCHING BLOCKS ;UNTIL FINDING A TEXT, RLD, OR MODULE END BLOCK. ;RETURNS TO: RTN+0 FOR MODULE-END; RTN+2 FOR TEXT; ;RTN+4 FOR RLDF RTN+6 FOR ISD. ;IF LAST BLOCK IN LAST MODULE IS NOT TEXT, RLD, OR MND, ;NO RETURN WILL BE MADE, BUT THE EXIT FROM PASS 2 WILL BE MADE. ;ROUTINE WILL NOT REJECT ILLEGAL COMMANDS ABOVE [6], BUT WILL ;I[k ,n 7 l ! D^  z&$&&z,(  82@B ED,L `B*C( m  ,p   z(@Zt.(@Z t"$&,(Ztw J B ( Z t=,ee 톗  t  MOV R3,(R2)+ ; SET UP START SECTOR MOV #404,(R2)+ ; P=0,DEVICE=1,FILE TYPE=4 MOV #FILESZ,(R2)+ ; SET UP LENGTH CLR (R2)+ ; CKSAVE = 0 ADD #FILESZ,R3 ; START SECTOR NEXT FILE INC R1 ; BUMP FILE ID CMP R1,#35. ; FINISHED? BLE IPLX50 ; NO .ENDC CLR R0 CLR R1 CLR R2 CLR R3 CL ; JUST 1 LINE PRINTER ; NCR = 1 ; AND JUST 1 CARD READER NSTEAD MIS-INTERPRET THEM FOR ONE OF THE LEGAL ONES. JSR PC,NXTBLK ;GET NEXT OBJECT MODULE BLOCK BR LODJ98 ;NO MORE BLOCKS: EXIT PASS 2 MOV R0,R1 ;POINTER TO DATA MOV R5,R0 ;BYTE COUNT MOV (R1)+,R2 ;GET BLOCK COMMAND TST -(R0) ;COUNT OFF TWO BYTES FOR COMMAND SUB #2,R2 ;DISCARD COMMANDS BELOW 3. BLE GETBLK ;IGNORE THEM AND GET N,(7  R7 @,t l  DDm  ,$ DQ$ 4o w x Dd,H U ^DQ$ S,lD JQ$Dd  ,,&D ;Q$DdDQ$ 47, 7 W- DDde7W,~ m 7 ɥɥ -,h "eX    . R R4 CLR R5 JMP DSPTCH ; FINISHED WITH IPL-EXECUTE ROS ; ; ; .END ; LITTLE PROGRAM TO READ 8-BIT PAPER TAPE CHARS AND STORE THEM IN CORE. ; THEN READ TAPE AGAIN AND COMPARE WITH STORED IMAGES. ; START PROGRAM AT "START". IF CONSOLE SWITCH #15 IS DOWN, TAPE WILL ; BE BE READ AND STORED INTO CORE. IF IT IS UP, TAPE WILL BE COMPARED. ; IF SWITCH #7 IS UP, PROGRAM WILL HALT AFTER EACH ERROR PRINTOUT. ; PRESS "CONTINUE" TO PROCEED READING. ; IF SWITCH #7 IS DOWN, READING WILL PROCEED WITH NO HALT. R0=%0 R1=%1 R2=%2 R3=%3 R4=%4 R5=%5 SP=%6 PC=%EXT BLOCK BIC #-3-1,R2 ;CHANGE 4 (MND=4+2) TO ZERO ASL R2 ;CHANGE TO BYTE INDEX ADD R2,(SP) ;BUMP RTN ADDR APPROPRIATELY RTS PC .PAGE ; ******************************************************************** LODJ22: ;PROCESS NEXT RLD COMMAND MOVB (R1)+,R2 ;GET RLD COMMAND BMI LDER25 ;IT IS ILLEGAL TO RELOCATE ONLY A BYTE MOVB (R1)+,R3 ;OFFSET  @>/: 0 H : (H ,F* 7:  e! & : 0j e! @p P: p *: ,7: v W s: v .W p j cw wf";}G(;}Gn,V W!TsW!Ls V ,N s )A& :(t 9, p ʋra x,$ C` 0 C ( "ߕ P,Hvߋtߕ vߋtߋxր,lE7 SWR=177570 TKS = 177560 TKB = 177562 TPS = 177564 TPB = 177566 .ASECT BFBGN = 1000 .=130000 START = . MOV #START,SP CLR R5 ;CHECKSUM MEMORY MOV #BFBGN,R1 ;BUFFER BEGIN MOV #TKS,R2 ;TTY READER STATUS REG GETCHR: INC (R2) ;ENABLE READER TSTB (R2) ;DONE? BPL .-2 ;NOT YET FROM TEXT COMMAND BEQ LODJ24 ;ZERO OFFSET IS A DUMMY CMP -(R3),-(R3) ;ADJ OFFSET DUE TO "TXT" CMD AND "PC" WD LODJ24: MOV R3,OFFSET ;NOW IS OFFSET FROM FIRST WORD OF TEXT ADD TXTPTR,R3 ;ACTUAL BUFFER ADDRESS TO LOCATE TEXT MOV PTSECT,R5 ;POINTER TO SECTION ENTRY IN LSD CMP R2,#CMDMAX BGT LDER20 ;ILLEGAL COMMAND TST ASWICH ;SET TO IGNORE "ASECTS"? BEQ  49"$U111 1 . 49 ` :<}H2,> 77 :   : .bw:   7 P: &P,  & T&f&  ,M m -"= $", &,7 ee0  vߋt U MOV @#TKB,R4 ;INPUT CHARACTER ADD R4,R5 ;ACCUM CHECKSUM TST @#SWR ;STORE OR COMPARE? BMI PASS2 ;COMPARE MOVB R4,(R1)+ ;STORE IT BR GETCHR PASS2: ;HERE TO READ TAPE AGAIN AND COMPARE WITH STORED IMAGE. CMPB R4,(R1)+ ;DO COMPARE BEQ GETCHR ;COMPARE IS GOOD DEC R1 ;BACK UP TO BYTE IN ERROR MOV #-BFBG LODJ26 ;NO - O.K. TO GO THROUGH CMP R2,#7 ;ALLOWED TO PROCESS TYPE 7 "PC" CMD ONLY BNE LODJ60 ;IGNORE REST OF RLD BLOCK LODJ26: ASL R2 ;MAKE WORD INDEX JMP @LODJ29(R2) ;GO TO PROPER COMMAND ROUTINE LODJ29: .WORD LDER20,CMD1,CMD2,CMD3,CMD4,CMD5,CMD6,CMD7,CMD8,CMD9 .WORD CMD2,LDER17,CMD4,CMD5,CMD6 ;THESE ARE .CSECT COMMANDS CMDMAX = .-LODJ29/2-1 .PAGE LODJ98: JMP LODL00  ,0e #0-&],6 *,, F7 Z# 0- ,@ ee  eq,d e&e :, <w  Ve e ,  w w e 7! U,  #2-7!~e v, &fe  !!!!!, w  @` 7 V0 :* p ʋra x*$ C` 0 C ( "ߕ U*Hvߋtߕ vߋtߋxր*lEe0  vߋt ZN,R3 ADD R1,R3 INC R3 ;GET # OF OFFENDING BYTE (1 TO N) JSR PC,PRINT CLR R3 BISB (R1)+,R3 ;STORED VALUE OF BYTE JSR PC,PRINT MOV R4,R3 ;TAPE BYTE VALUE JSR PC,PRINT MOVB #15,@#TPB ;C/R TSTB @#TPS BPL .-4 MOVB #12,@#TPB ;LINE FEED TSTB @#TPS BPL .-4 TSTB @#SWR BP ;END OF PASS 2: GO WRITE LOAD FILE ; ******************************************************************* LDER20: MOV #20,R4 ;ILLEGAL TEXT-MODIFICATION COMMAND JSR PC,ERRPRT LDER25: MOV #25,R4 ;NOT ALLOWED TO RELOCATE BYTES JSR PC,ERRPRT .PAGE LODJ50: ;MODULE-END BLOCK FOUND: ;MOVE MODULE POINTER "PTROBJ" TO NEXT MODULE NAME IN LSD; ;THEN BRING IN NEXT OBJECT MODULE MOV PTROBJ,R2 B w t2< 7 7*7 e  * ,f e Md-   d & ,  >  dk $d,, 7? 5Ћ#, Bwt` 7h@5e, X0 @ He H,  eHBw` 8$),>  H L GETCHR HALT BR GETCHR PRINT: MOV #NUM+6,R0 PRINT1: MOV R3,-(SP) BIC #-7-1,(SP) ADD #60,(SP) ;CREATE ASCII FOR OCTAL DIGIT MOVB (SP)+,-(R0) ;FILL LIST ASR R3 ASR R3 ASR R3 CMP R0,#NUM BHI PRINT1 MOV #NUM,R0 PRINT2: MOVB (R0)+,@#TPB TSTB @#TPS BPL .-4 CMP R0,#NUM+12 BLOS PRINT2 ;CURRENT MODULE NAME IN LSD ADD #5,R2 ;POINT TO FLAGS BYTE LODJ52: ADD #BPSYM,R2 ;NEXT ENTRY CMP R2,SYME ;HIT LSD END? BHIS LODJ98 ;*****END OF LSD: NORMAL END OF PASS 2***** CMPB (R2),#OBJMN ;IS THIS ENTRY AN OBJ MOD NAME? BNE LODJ52 ;NO: KEEP LOOKING SUB #5,R2 ;MOVE BACK TO 1ST BYTE OF ENTRY MOV R2,PTROBJ ;POINTER TO NEXT OBJ MOD ENTRY IN LSD 8mmH ,b #e#):  $: .  E m7:  (: 0  7ep  , Lp *, . #0 E w (wB,  h Hh 6, p  RTS PC NUM: 0,0,0,20040,20040,20040 .END BR LODJ10 ;INIT FOR NEXT MODULE .PAGE LODK10: ;TEXT BLOCK ENCOUNTERED: FIRST TRANSFER IT TO INTERNAL ;BUFFER, THEN GET NEXT BLOCK. IF ANOTHER "TXT", OUTPUT FIRST ;ONE. IF AN "RLD", MODIFY TEXT, BUILD TRAILER, THEN OUTPUT TEXT ;IF MODULE END, OUTPUT TEXT BLOCK AND GET ANOTHER MODULE. TST ASWICH ;SWITCH SET TO IGNORE "ASECTS"? BNE LODJ12 ;YES: GO GET NEXT BLOCK CMP -(R0),(R p c,B b ~b ~f x   p lp i   ~]~@  ,  ROSLOD IIA # ROSLOD PASS #,01 END  ROSLOD PASS #2 BEGIN ,T ROSLOD PASS #2 END ERROR #  x _ z`,z **** ROS1)+ ;ADJ BC AND PTR FOR "PC" AS 1ST TXT WRD MOV R0,TXTBC ;SAVE TEXT BLOCK BYTE COUNT MOV TXTPTR,R2 ;CURRENT OPEN CELL IN TEXT SAVE BUFFER LODK20: DEC R0 ;BC TO ZERO? BLT LODK30 ;YES MOVB (R1)+,(R2)+ ;TRANSFER ANOTHER BYTE BR LODK20 ;BACK FOR MORE LODK30: CLR TSWICH ;INDICATE FIRST TXT BLCOK JSR PC,GETBLK ;GET NEXT NON-GSD BLOCK BR LOLOD LOAD MAP **** A),********** MODULE TITLE: "" SE%CTION ENTRY OFFSET SIZE TOTALM ,<>  , !******V#(**** UNDEFINED REFERENCES G D,Du"hb ""+ ,DK40 ;"MODULE-END" BR LODK50 ;"TEXT" BR LODJ22 ;"RLD" BR LODK30 ;ISD: IGNORE LODK40: ;TEXT FOLLOWED BY MODULE - END MOV #2,TSWICH ;PUT OUT TEXT: THEN GET NEW MODULE BR LODJ60 ;GO OUTPUT TEXT LODK50: ;TEXT FOLLOWED BY TEXT MOV #1,TSWICH ;INDICATE MORE TEXT AFTER OUTPUT THIS 1. BR LODJ60 ;GO OUTPUT UN-MODIFIED TEXT BLOCK  ; ******************************************************************** LDER21: MOV #21,R4 ;FINAL MODULE BLOCK NOT MODULE END JSR PC,ERRPRT .PAGE LODJ30: CMD1: ;INTERNAL SYMBOL: ADD SECTION BASE TO LOCAL OFFSET - ;"ADD BIAS" INSTRUCTION INTO TRAILER MOV (R1)+,R4 ;LOCAL VALUE ADD BASE(R5),R4 ;CALC OFFSET FROM LOAD MODULE BASE MOV R4,(R3)+ ;PUT ALTERED WORD INTO TEXT JSR PC,TRA V\\F]P`3V|sVshVVv&wVVV V  V W&f&MW % $WV$W& &  wJ*:WW2*^W *W*WW  PUT ;"ADD" INTO TRAILER SUB #4,R0 ;BC BR LODJ99 LODJ32: CMD2: ;GLOBAL RELOCATION: OFFSET FROM LOAD BASE INTO TEXT - ;"ADD" INTO TRAILER MOV R1,R4 ;POINTS TO GLOBAL NAME CMP (R1)+,(R1)+ ;BUMP PTR PAST NAME JSR PC,SRGLOB ;SEARCH FOR NAME IN LSD BR LDER22 ;GLOBAL SYMBOL SEARCH FAILURE MOV R4,(R3)+ ;PUT ALTERED WORD INTO TEXT JS W*YD&@Y@FY^Y AC:  ^Y ? fY ILL CMD! !tY ILL PAR! YNON-QUIESCENT (*W / WWENYDSYQUYXXYTMZ&WDTZREXTYXCRXLP YEXTY8WY \,*Y$t&XY %7  PR PC,TRAPUT ;PUT "ADD" INTO TRAILER SUB #6,R0 ;BC LODJ99: JMP LODJ20 ;COMMON RETURN (GET NEXT RLD COMMAND) LODJ34: CMD3: ;INTERNAL DISPLACED RELOCATION: ;DISPLACEMENT FROM CURRENT PC INTO TEST - ;"SUB BIAS" INSTRUCTION INTO TRAILER JSR PC,GETPC ;CURRENT OFFSET FROM LOAD BASE NEG R4 ADD (R1)+,R4 ;FORM (L-(.+2)) MOV R4,(R3)+ ;PUT ALTERED WORD IN*$XW " W$ w\HXFY *Yg\X7 Y v ,YE,rXD WS#  fYY *X  tY|W, !\*X 7!8 ED W,.XWLWC 0 v)w0WT /YwWT L) *Y7 7 7 aYc YzY   *YZ*Z`ZrZ W,27,YTO TEXT JSR PC,TRAPUT ;"ADD" INTO TRAILER BIS #100000,-2(R3) ;CHANGE IT TO A "SUB" INSTR SUB #4,R0 ;BC BR LODJ99 ;NEXT .PAGE LODJ36: CMD4: ;GLOBAL DISPLACED RELOCATION: ;DISPLACEMENT FROM CURRENT PC INTO TEXT ;NO TRAILER ELEMENT JSR PC,GETPC ;GET PC NOW MOV R4,R3 ;SAVE IT MOV R1,R4 ;PTR TO GLOBAL NAME  0!- )!&7!#yY50Z!^4!^֥Υ!^!^ $&07  ._ 2 7  !^ߐ!^Z*_ <]^0^]0^]ߐ*`& (w,ߕ**` 1!^7 7 7 |0 =*N`w!^&f K7xH&r`ߕ!^ y`````````,`& zߕ *61 7 .7 (G.`7 e "ffffff!^a();THAT SECTION'S BASE. MOV R1,R4 ;PTR TO SECT NAME SOUGHT CMP (R1)+,(R1)+ ;BUMP TO CONSTANT JSR PC,GETSEC ;SEARCH FOR SECTION NAME IN LSD BR LDER23 ;NOT FOUND MOV R4,PTSECT ;PERM PTR TO SECT NAME IN LSD... MOV R4,R5 ;...ALSO CURRENT PTR SUB #4,R0 ;BC (MORE BELOW) CLR ASWICH ;"ASECT" SWITCH: PREPARE CMP 4(R5),#410 ;IS TH**`W"1f 8*acaw  K*(a7H ^ ߕ!^ 8 2*La*6!^B ]+C *pa%ߕW" ] r] ]]`]*aL2]1 0!^vw ^*a f&×&  17%*a.ߕ!^)!^ ^ E*b ]]!^ߐ  *$b w 6 *Hb,-IS AN "ASECT"? BNE LODJ44 ;NO-O.K. TO CONTINUE INC ASWICH ;SET TO FORCE IGNORE OF ALL "ASECT" TEXT ; CONTINUE AS IN "CMD8" LODJ44: CMD8: ;MODIFICATION TO PC: ".=.+C" ;BUMP PC BY ADDING NEW CONST TO CURRENT PGM SECT BASE MOV BASE(R5),R4 ;CURRENT SECTION'S BASE ADD (R1)+,R4 ;ADD CONSTANT TO BASE VALUE ADD #LEDWDS*2,R4 ;KEEP OFFSET DUE TO INSERTED LEADER WDS MOV R4,C.7 l di   w*lb` ]!!Dߕ k.b]wFr]]e]] EW!^*b7 $w!^  p*b@E @`eBJ& q*cfB 6F 6 v M*$c7 7 7 7 .Hc 0 ]]]0`] 1 ^!^*&pc01^0A^ a Q*c ]  W"qc^&c^c01URPC ;NEW VALUE OF NEXT TEXT BLOCK'S BASE ;(AS OFFSET FROM LOAD MODULE'S BASE) ADD TXTBC,TXTPTR ;HERE SINCE WON'T HAPPEN IN "TXTOUT" CLR TXTBC ;AVOID ALTERING NEW [CURPC] IN "TXTOUT" SUB #4,R0 ;2 WDS FOR CMD8; 4 WDS FOR CMD7 ; PC COMMANDS MUST BE LAST IN RLD BLE LODJ99 ;DONE: O.K. ; IF NOT DONE, THEN NEXT COMMAND MUST ALSO BE PC TYPE CMPB #PCMD1,(R1) ;IS NEXT C20cA^0!^   dcdReffZgcghFiitjicdeezf$gcgnhiiiciC dd2=*dd TASK # 2 d Cdad.kk~kn!*kw . ZD& DNkc*k@f:D D(. *@l* l "'xww [DlA*Ll&-&n e?U*pl 6  e*l>`[*lS& 2*w 2*l%%E Cw.m  e@A EMT DISCIO ;WRITE OUT FINAL TRAILER SECTOR MOV TRSCSV,TXTSEC ;INIT TO READ IN FIRST TRAILER SECTOR CLRB TXTR.W ;READ MOV #TXTLST,-(SP) EMT DISCIO ;READ FIRST TRAILER SECTOR MOV TRAPC,R0 ;BYTES IN PROGRAM PLUS TRAILER ASR R0 ;# WORDS ADD #LEDWDS+PHDSZE,R0 ;TOTAL WORDS FROM TOP OF HEADER CLRB R0 ;GETTING # OF PAGES BnBA  Jn6 w *(m0nn n"$:\*Lm2EW  9n.pm1n 7 n fn`fX*m7vBABWCEqg*mJn70œ& ‹*m & 5@& X Œ Œz*n$Œ&&f A*(n n`BAW,JnB*Ln n   KpnDESWAB R0 ;# CORE "PAGES" -1 INC R0 ;# OF CORE PAGES MOV R0,-(SP) ;SAVE FOR USE BELOW MOV PRSIZE,R1 ASR R1 ;WORDS IN PGM ONLY ADD #LEDWDS+PHDSZE,R1 ;# WORDS IN PGM PLUS HEADER CLRB R1 ;256 WORDS/PAGE [PDP-11/20] SWAB R1 ;# PAGES -1 (EXCLUDING TRAILER) INC R1 ;# PAGES (EXCLUDING TRAILER) SUB R1,R0 Fwwn &n&nndnd owot,o7" @ : 7f]7,q LMUT IT, AND INIT ; THE NECESSARY TABLES TO RUN THE FILE AS AN OVERLAY TASK. MOV #30,R4 ;INIT ERROR NUMBER MOV BGNSEC,TXTSEC ;SET TO READ IN TASK HEADER INFO CLRB TXTR.W ;READ MOV #TXTLST,-(SP) EMT DISCIO ;READ IN FIRST SECTOR MOV #LEDWDS*2+TXTBK1,R0 ;POINTER TO FIRST WORD OF HEADER MOVB HTASK(R0),R1 ;TASK # CMP R1,#TASMAX ;WITHIN LIMITS? BGT LDERN  Ν*bq   Be*q (- -- *qee  E*q E EvÝ*q;`Ý1`Ý*`%<< %u*r ÝÜs   *:r UU&-s*^rE eet?p6 *r nw t^%M,r%rBA  JPQ30 ;OUTSIDE TASK LIMITS CMP R1,#OVTMIN BLT LDER30 MOV HPRIOR(R0),R2 ;PRIORITY CMP R2,#NPRIOR ;PRIORITY LEGAL? BGT LDER31 ;ILLEGAL PRIORITY TSTB PPTAB(R2) ;IS THIS A TIME-SLICE PRIORITY? BLE LODL10 ;NO TST HMAXEQ(R0) ;YES - EXECUTION TIME MUST BE SPECIFIED BLE LDER32 LODL10: CMP R1,TASKS ;TASKS = MAX[TASKS,TASKNO] BLE R6 w J,rr UrrrrrrsG*2s&Œ <-*Vs76 w ea,zs~  0mH5}0,s :sœss Da`,s.s2rӵeK6 w (,s  V $.s(t5)s& H H H)*6tn7D%TULODL20 MOV R1,TASKS LODL20: MOV #DFLIST,R3 ;POINTER TO "DEFINE" LIST MOV HSTACK(R0),R5 ;FILE I.D. CMP R5,#NDISCS+$SYSFL;MUST BE GREATER THAN SYSTEM RESERVED BLE LDER35 ;FILE I.D. ILLEGAL MOV R5,6(R3) ;LOAD FILE I.D. INTO LIST MOVB HSTATS(R0),R5 ;REQUESTED FILE TYPE CMP R5,#$OVTYP ;IS IT LEGAL FOR AN OVERLAY? BNE LDER36 ;NO MOV R5,8.(R3) ;LV n1n (Ztn1n 71|t7 br^rdt7 P7  ttwtw\-*vw J DE@!!*v  CaaŠw ,we! ee  w ^**wrw  ŋW*Nwe ee e Q Š rw@(*xwU   xB7nXYOAD INTO "DEFINE FILE" LIST MOV TRASEC,R5 ;# OF FINAL SECTOR WRITTEN SUB BGNSEC,R5 ;GET # OF SECTORS -1 INC R5 ;# OF SECTORS IN FILE MOV R5,10.(R3) ;# OF SECTORS TO DEFINE MOV R3,-(SP) EMT DEFINE ;GO GET FILE DEFINED TSTB 2(R3) ;ERROR? BNE LDER33 ;YES MOVB R2,TPRTY(R1) ;PRIORITY MOV 6(R3),IFD(R1) ;INIT FILE I.D. Z*we-ze Tx`*wx^-VE?JFes +*weX . ~e$U7*x E} =*,xe e et*Pxe  ;*txe @ee *xe_   j V*xf w#& P LN Y*xFN @N Հ0 E y*\] MOV 4(R3),R0 ;IFD WORD BEQ LODL25 ;NO IFD RETURNED: LEAVE FILE I.D. BIS #100000,R0 ;SHOW IFD RATHER THAN FILE I.D. MOV R0,IFD(R1) ;USE RATHER THAN FILE I.D. LODL25: CLRB TSTAT(R1) ;TASK STATUS CLRB IOSTAT(R1) MOVB (SP)+,BSIZE(R1) ;INIT # "PAGES" IN OVERLAY ASL R1 ;NOW A WORD INDEX CLR HEADER(R1) ;SHOW READY TO RUN MOV BGNSEC,R0 ^y  6(y-S--<8;y------<My04268*fz !"*z$'(+-.03569:{!$-ެ?:$*b{'"`a;INIT RELATIVE READ SECTOR # CLR R1 ;INIT RELATIVE WRITE SECTOR MOV 6(R3),R2 ;WRITE FILE I.D. LODL30: CLRB TXTR.W ;SET TO READ MOV R0,TXTSEC ;SET UP READ SECTOR MOV #BTCHID,TXTHED ;SET UP READ I.D. MOV #TXTLST,-(SP) EMT DISCIO ;READ A SECTOR TST TXTLST+8. ;ERROR? BNE LDER34 MOV R1,TXTSEC ;SET UP WRITE SECTOR MOV bABDGHɠKMNPҠ*{SUVYZ\ݠABÆ*{DGHɠKMNPҠSUVj{YZ03569*|```!|`*|PPPP | ||*| L/P 1 PARITY ERROR L/P 1 c|NOT READY"| L/P 1 ABORTED1|||}}~*|&deR2,TXTHED ;WRITE FILE I.D. INCB TXTR.W ;SET TO WRITE MOV #TXTLST,-(SP) EMT DISCIO ;WRITE A SECTOR TST TXTLST+8. ;ERROR? BNE LDER34 CMPB (R0)+,(R1)+ ;BUMP BOTH SECTOR NUMBERS CMP R0,TRASEC ;HAVE WE PASSED LAST SECTOR? BLE LODL30 ;MORE SECTORS TO GO .PAGE MOV #ND2MSG,TTYBUF ;"PASS 2 END" MESSAGE MOV #TTYLST,-(SP) ff&f  7G*}0 T 6} t*@}   D @D I*d}D D *:{*}2{RHഊ1^0 { ,} & wxs*}0 {s{3{ ,}3 {3 {|s{3 {3 { fzb*~ z  &  |*@~{{   zwhi EMT TTYOUT EMT EXIT ;****** E N D O F L O A D E R****** LDER36: INC R4 ;ILLEGAL FILE TYPE LDER35: INC R4 ;ILLEGAL FILE I.D. LDER34: INC R4 ;FILE SECTOR TRANSFER ERROR LDER33: INC R4 ;"DEFINE FILE" ERROR LDER32: INC R4 ;MAX XEQ ENTRY ERROR FOR T/S TASK LDER31: INC R4 ;PRIORITY OUTSIDE LIMITS LDER30: MOV R4,-(SP) ;TASK # OUTSIDE LIMITS jfz,d~  M|2{e{-*~2{{1^& XL*~ {&  f {|*~ 2 { ){ 5*~ s{3{|3 {3 {m*fzs{z3 {3 {  M*> 3 {|  M {%{ *b  M| w| * 3 {|&<  MC.f{|{ r | Z {lm JSR PC,ERRPRT ;GO PRINT ERROR AND EXIT .PAGE REGSAV: MOV R4,-(SP) ;R5 PUSHED BY "JSR" MOV R3,-(SP) ;SAVE REST... MOV R2,-(SP) MOV R1,-(SP) MOV R0,-(SP) JMP (R5) ;...AND RTN REGPOP: ;RESTORE RGS TST (SP)+ ;POP UNNEEDED R5 MOV (SP)+,R0 ;RESTORE OTHERS... MOV (SP)+,R1 MOV (SP)+,R2 MOV (SP)+,R3 n*,{<    |,wv&ff& |{Aaes!{93 |* D! 3 |  | % 3 |  ,@Rĕ J  s!{5Еs{|e*f   5*  6 & `3 | * 4W 1 .W +5(5%*ҀD eD   *!!5  *@& pq MOV (SP)+,R4 RTS R5 ;...AND RTN ; ******************************************************************** GETPC: ;LOAD R4 W/ REL ADDR OF CURRENT TEXT ELEMENT MOV CURPC,R4 ;PC @ TEXT BLOCK START ADD OFFSET,R4 ;OFFSET SPECIFIED WITH RLD COMMAND TST (R4)+ ;SINCE PC INCREMENTS AFTER FETCH RTS PC ; ******************************************************************** SYMOVF: ;Cr5 5 *>5 | 3| *b   ||K*&<  f|  . eځ00& *ҁ|wwwh*|@aAa ! @{|wj. f  `Baf|*. 5 f Å*R1 <7 6& 3*v & & &  2~tuHECK FOR SYMBOL TABLE OVERFLOW CMP USYME,#LSDEND-BPSYM BLOS SYMOV1 ;NOT YET AT END LDER26: MOV #26,R4 ;OVERFLOW: "TH-TH-THAT'S ALL, FOLKS!" JSR PC,ERRPRT SYMOV1: RTS PC .PAGE SRMODN: ;SEARCH DEFINED SECTION OF LSD FOR A MODULE NAME ; INPUT: R4 POINTS TO RAD50 NAME ; OUTPUT: R4 POINTS TO NAME IN LSD (IF FOUND) ; R4 UNCHANGED IF NOT FOUND ; CALL: v  f{{B  *% fR(؂6 wdeނ6 &P:&0,*8Fr 4:6pp\8rrV:ttP*< CR 1 ERROR CR 1 SPUR INT *`f&f  6 @ B'* 4   X*1BD @Dgxy JSR PC,SRMODN ; BR A ;FOUND ; BR B ;NOT FOUND MOV R0,-(SP) ;SAVE IT MOV #LSDBGN,R0 ;START OF LSD SRMOD1: CMP R0,SYME ;REACHED END OF DEFINES? BLO SRMOD2 ;NOT YET MOV (SP)+,R0 ;NOT FOUND! ADD #2,(SP) ;ALTER RETURN FOR "NOT FOUND" RTS PC SRMOD2: CMPB #OBJMN,FLAGS+1(R0);THIS ENGRY AN OBJ MOD NAME? z,̃ D D {h*s ٴ1^1 0 &1* ,:   & Jbwڞ,` 3  $$x* < fЇfC*<   L 6M *΄5@p/Mp Mw"55*@53& *E@pM3  3 M4|}BEQ SRMOD3 ;YES: IS NAME SAME? SRMOD4: ADD #BPSYM,R0 ;NOT AN OJB MOD BR SRMOD1 SRMOD3: CMP (R4),(R0) ;FIRST HALF-NAME MATCH? BNE SRMOD4 ;NO CMP 2(R4),2(R0) ;YES: SECOND HALF-NAME MATCH? BNE SRMOD4 ;NO ; FOUND! MOV R0,R4 ;NOW POINTS TO LSD ENTRY MOV (SP)+,R0 RTS PC .PAGE PTGLOB: ;SEARCH LSD FOR A GLOBAL NAME (NOT OBJ MOD) ~*:  W"R |*^P*@  r.&f  && 1^*΅& *z EAp3 * M*@ @3 <M0 2H *el.  -8 *:  .M8 e g,^18 e .1^8e3 . M , ;THE SECRET TO THE LOADER'S CONTROL SECTION ABILITY LIES HERE. ; IF THE SECTION IS ONE OF THE NAMED ONES, IT APPEARS ONLY ONCE IN THE ; LSD, AND THUS HAS ONLY ONE BASE TO LOAD PROGRAMS FROM. THE UNNAMED ; C-SECTS, HOWEVER, ARE DETECTED AS 6 BLANKS, AND ARE MADE UNIQUE TO ; EACH OBJECT MODULE BY LIMITING THE SEARCH TO THE CURRENT OBJECT MODULE ; AREA IN THE LSD. ; INPUT: R4=PRT TO RAD50 NAME ; OUTPUT: R4=PTR TO LSD ENTRY IF FOUND ; CALL: JSR PC,PTGLOB ; .8!  *! ! +!  s*Ԇ:lel f, M$ $T*$$ %(A,BW %B %%% *h   `  0  C6U3< N*Ї; 6f< CEA6*ڇ56  w>w*.f 5 BR A ;NOT FOUND ; BR B ;FOUND MOV R0,-(SP) ;SAVE IT MOV (R4),R0 ;IS THIS THE SPECIAL... BIS 2(R4),R0 ;...CASE OF 6 BLANKS? BEQ PTGL01 ;YES: START AT CURRENT OBJ MOD MOV #LSDBGN,R0 ;NO: BEGIN @ BEGINNING OF SYMBOL TABLE BR PTGL02 PTGL01: MOV PTROBJ,R0 ;CURRENT OBJ MOD PTGL02: CMP R0,USYME ;END? BLO  f .p.&1 3 3 s *N3 .    s23 ,rf< 4 A6 "."ˆp &* . * : *3wD3  w 7 l"7 *$ 12345678 &=':>@9 0/ST*HUVWXY _,(%\"Z -JKLMNOPY*lQ $*];^R  PTGL03 ;NOT YET MOV (SP)+,R0 ;NOT FOUND! RTS PC PTGL03: CMP (R4),(R0) ;FIRST HALF-NAME MATCH? BNE PTGL04 ;NO CMP 2(R4),2(R0) ;2ND HALF-NAME MATCH? BNE PTGL04 ;NO ;MATCH! CMPB #OBJMN,FLAGS+1(R0) ;FILTER OUT OBJ MOD NAMES BEQ PTGL04 MOV R0,R4 ;NOW POINTS TO FOUND NAME IN LSD MOV (SP)+,R0 ;UNSAVE ADD #2 ! X* +ABCDEFGH .)[<#*I ? #*؉ * * 12345678 :#@'="9 *D0/STUVWXY ,% >?Z -JKL*hMNOPQ !$*); R  stuvwx*y z &ABCDEFGH `.*<(+|I   abcdefgh *Ԋi jkl,(SP) ;"GOOD" RETURN RTS PC ;NO MATCH PTGL04: ADD #BPSYM,R0 ;NEXT LSD ENTRY BR PTGL02 ;TRY AGAIN .PAGE GETSEC: ;GET POINTER TO SECTION NAME ; INPUT: R4 POINTS TO RAD50 NAME ; OUTPUT: R4 POINTS TO NAMED SECTION IN LSD (IF FOUND) ; CALL: JSR PC,GETSEC ; BR A ;NOT FOUND ; BR B ;FOUND JSR PC,PTGLOB ;CAN NAME BE FOUND IN LSD? GETS01: RTS mnopq r *  \()[] * @yz{|}~123456789:;*@<=>?aiklmno!"#$%&'()*+,-./*d`YZ[\]^_Сg*bcdefgh P5*IJKLMNO *ЋABCDEFGHj*QRSTUVWXpqrs*tuvwx0@@P~}zn|@@@@@@@<*<@@@@@@@@a@@kMl@@ PC ;NO: ERROR RETURN CMPB #SECTN,FLAGS+1(R4) ;YES: IS IT A SECTION NAME? BNE GETS01 ;NO:ERR EXIT ADD #2,(SP) ;"GOOD" RETURN RTS PC ; ******************************************************************** SRGLOB: ;SEARCH LSD FOR A GLOBAL & RETURN ITS FINAL VALUE IN R4 ; INPUT: R4=ADDR OF BLOBAL NAME (RAD50) ; OUTPUT: R4=VALUE OF GLOBAL JSR PC,PTGLOB ;SEARCH FOR NAME @@@@@@@@@@;*`@@@@@@[\^j@@@@@@@@@@@@@@@X*Z@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@N*@@KL;@@@@@@@@@ @@o@@@@@@@?*̌@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@}*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@Y@@@@@@@@@@@@@@@@H.XrbrPrx 7r w:r*ƍw 7t:9Iw  7^w w ,>ĝ\7r70 , rxq*w.& rr@Bq D* RTS PC ;NOT FOUND MOV VALF(R4),R4 ;FOUND: GET VALUE ADD #2,(SP) ;"GOOD" RETURN RTS PC ; ******************************************************************** INUSYM: ;INSERT AN ENTRY IN UNDEFINED SECTION OF LSD ; INPUT: R4 POINTING TO ".REF" ENTRY IN GSD MOV R0,-(SP) ;SAVE IT MOV USYME,R0 MOV (R4)+,(R0)+ ;MOVE IN THE UNDEFINED MOV (R4)+,(R0)+ ;S4 A  &DCc  w 2w *X w  ' 7  {*|&w \w wXw w  1.fw |t w 7 wtwhw st*Ȏ %E e: whl|*6 5 =w F6 / w :( w *2! w * w "w * 7 w  *47w 77(5 J*Xw7  ww (b ww W*|w A B` r%*YMBOL ENTRY MOV (R4)+,(R0)+ MOV (R4)+,(R0)+ ADD #BPSYM,USYME ;BUMP POINTER JSR PC,SYMOVF ;OVERFLOW? MOV (SP)+,R0 ;O.K. RTS PC .PAGE INSYME: ;INSERT AN ENTRY IN DEFINED SECTION OF LSD ; R4 POINTS TO THE ENTRY (E.G., IN GSD) ; ADJUST POINTERS SYME & USYME JSR R5,REGSAV MOV R4,R2 MOV SYME,R4 INSY01: JSR PC,UNSQUISH ;MAKE A  w| 7twrj*ďwhg E 7XpwhP *E tXP XIw K* -% w  =w *07 X=w e0L*Tw ,w %@w ~kz*xe=w @w Xww*w=w  w  d*w *Ae0w v,w nHBF}*w 6- .27X, g*( B:HOLE AT SYME ADD #BPSYM,SYME ;BUMP BOTH POINTERS ADD #BPSYM,USYME MOV (R2)+,(R4)+ ;MOVE IN THE ENTRY MOV (R2)+,(R4)+ MOV (R2)+,(R4)+ MOV (R2)+,(R4)+ JSR PC,SYMOVF ;OVERFLOW? JSR R5,REGPOP ;RESTORE RTS PC .PAGE INPTRH: ;INSERT AN ENTRY ALPHABETICALLY INTO CURRENT SECTION ;OF LSD. R4 POINTS TO CANDIDATE ENTRY. JSR R58w ?*,w 7 w 777     w *P%0 %7E `  1W,t W ֆ m7 yґ>NhJȏd`4z*‘r 0Z7U<*D 2 7.7(%  * w %=w *.w  w w ww *R  7mw X*v,REGSAV MOV R4,R2 ;NEED R4 BELOW MOV PTSECT,R4 ;PTR TO BEGIN OF CURRENT SECTION INPT01: ADD #BPSYM,R4 ;NEXT (POSSIBLE) SECTION ENTRY ;[SKIP FIRST ONE: IT IS SECTION'S NAME]. CMP R4,SYME ;DID WE REACH END OF DEFINED SYMBOLS? BHIS INPT02 ;YES: STICK IT IN NOW. CMPB FLAGS+1(R4),#GENTRY ;IS NEXT A GLOBAL SYMBOL ENTRY? BNE INPT02 ;NO: SECTION Hw %/w *\ z \pp 0* L eh  !vB !v=<.L !64h4 z !4h* 4 z % w  *. @w @ % % w N*R ww  ~*vD  &C@AEPA&fi*w w /w w :w *  ` E ,Ⓚ` AS ENDED: INSERT HERE. ; IT IS STILL IN THIS SECTION: COMPARE WILL DETERMINE ALPHABETIC ORDER CMP (R4),(R2) ;FIRST HALF-WORDS: BHI INPT02 ;NEW ONE IS LATER ALPHATETICALLY: BLO INPT01 ;NEW ONE IS EARLIER: KEEP LOOKING CMP 2(R4),2(R2) ;1ST HALVES EQUAL: COMPARE 2ND HALVES BLOS INPT01 ;STILL LOWER: TRY AGAIN INPT02: ;TIME TO INSERT ENTRY INTO LSD CMP R4,PTROBJ ;IF INSERTING H 8 wFko*w 7U4E(w T76M.,  pzkn*Tw V׭kUA*x7w @ŝ*ŝwLkt w*t!h w w JJKw ,䔞@eZ%ĕth72 zz* w Bw .e` w ;w *.ĝhw wFf& *RfBELOW OBJ MOD POINTER... BHI INPT03 ADD #BPSYM,PTROBJ ;...MUST ADVANCE IT ALONG WITH OTHERS INPT03: BR INSY01 ;GO INSERT AT R4 .PAGE UNSQUISH: ;MAKE A HOLE IN TABLE. R4 POINTS TO DESIRED HOLE LOC'N MOV R0,-(SP) MOV R1,-(SP) MOV USYME,R0 ;START @ TOP ENTRY... MOV R0,R1 ADD #BPSYM,R1 ;...AND EXPAND UPWARD UNSQ01: CMP R0,R4 ;ARE WE DOWN TO DESIRED LOC'N YET?  r.v4hh iiG,7i7iiw ri5ii*ĕgibiV  <h !*%& &el* N @ e0w &  X*0 ,i7(ii*TiE w *x  w ׭h ^*w Uw :w nj*  7,X BHI UNSQ02 ;NOT YET: MOVE ANOTHER ONE MOV (SP)+,R1 MOV (SP)+,R0 RTS PC UNSQ02: MOV -(R0),-(R1) ;BLOCK MOVE MOV -(R0),-(R1) MOV -(R0),-(R1) MOV -(R0),-(R1) MOV -(R0),-(R1) BR UNSQ01 ; ******************************************************************** SQUISH: ;REMOVE ENTRY POINTED TO BY R4 FROM THE UNDEF'D TABLE JSR R5,REGSAV MOV R4,RXRX-P D*䖅w@ 78 %(! , %??UVa*.Tw N%w 77*Rw Z e0w ,w *vw pt* Cå å$ נA X.  e` *  Ëנe ee  e ѐ  @(*$ 0 MOV #BPSYM,R1 ;ELEMENT SIZE ADD R1,R0 ;STAYS ONE ELEMENT ABOVE R1 ASR R1 ;USE BELOW AS COUNTER SQUI01: CMP R0,USYME ;REACHED TOP OF TABLE? BHIS SQUI04 ;YES: EXIT SQUI02: MOV R1,R2 ;COUNTER=# WORDS PER SYMBOL SQUI03: MOV (R0)+,(R4)+ ;BLOCK TRANSFER DEC R2 BGT SQUI03 ;STILL IN BLOCK BR SQUI01 SQUI04: JSR R5,REGPOP ODT-11R V00 H2ABE*P *;/\ $G _<^,OWEBP@>SRC-FI!XAStPMCFRB$*: ^8D} RTS PC .PAGE NXTMOD: ;ROUTINE SETS UP PARAMETERS TO READ NEXT OBJ MODULE DEC NAMCTR ;MORE MODULES? BLT NXTM30 ;NO MORE: TAKE "DONE" EXIT CLR BLOCK1 ;FLAGS FIRST BLOCK IN MODULE MOV NAMPTR,R0 MOV 4(R0),OBJSEC ;START SECTOR # MOV 6(R0),SECTCT ;SECTOR COUNT INC SECTCT ;WANT ONE EXTRA SECTOR ON LAST READ ADD #8.,NAMPTR ;ADVANCE TO YM,USYME MOV (R2)+,(R4)+ ;MOVE IN THE ENTRY MOV (R2)+,(R4)+ MOV (R2)+,(R4)+ MOV (R2)+,(R4)+ JSR PC,SYMOVF ;OVERFLOW? JSR R5,REGPOP ;RESTORE RTS PC .PAGE INPTRH: ;INSERT AN ENTRY ALPHABETICALLY INTO CURRENT SECTION ;OF LSD. R4 POINTS TO CANDIDATE ENTRY. JSR R5,REGSAV MOV R4,R2 ;NEED R4 BELOW MOV PTSECT,R4 iwww`iJ & ;w,]w c(%mͽB_D!  e}7TVND E whhgwZe$ih  ew^"7d\i $ͭwi7ͭ h;H^ hvjNF"^ͭ^fghtͭ\ͭtj$gJT? b?! pr=@7:|_   wlwwwNEXT NAME MOV #OBJBK2,BLKPTR ;INIT BLOCK POINTER TO FORCE FIRST READ ADD #2,(SP) ;BUMP TO TAKE "GOOD" EXIT NXTM30: RTS PC .PAGE ;"NEXT BLOCK": SUBROUTINE READS IN SECTORS UNTIL ; AT LEAST ONE BYTE OF NEXT BLOCK IS IN UPPER HALF OF THE ; TWO-SECTOR BUFFER. ONE ADDITIONAL SECTOR IS READ AFTER ; THE FINAL SECTOR IN THE MODULE TO FORCE THE LAST BLOCK ; INTO THE UPPER HALF.  ;PTR TO BEGIN OF CURRENT SECTION INPT01: ADD #BPSYM,R4 ;NEXT (POSSIBLE) SECTION ENTRY ;[SKIP FIRST ONE: IT IS SECTION'S NAME]. CMP R4,SYME ;DID WE REACH END OF DEFINED SYMBOLS? BHIS INPT02 ;YES: STICK IT IN NOW. CMPB FLAGS+1(R4),#GENTRY ;IS NEXT A GLOBAL SYMBOL ENTRY? BNE INPT02 ;NO: SECTION HAS ENDED: INSERT HERE. ; IT IS STILL IN THIS SECTION: COMPARE WILL DETERMINE ALPHABETwvwbw_   wlwwwwvwbww`FN)V׭HEBCA@NH   F~NFNHEz ՜ZX`̕i iF)׭HC(A@$C!Z ʵX@i i,.HH  F`fvjd@ihl2 r, 2 @   wHJ   tiMNXTB90: JSR PC,NXTMOD ;INIT FOR NEXT MODULE AND READ A BLOCK BR NXTB80 ;NO MORE MODULES NXTBLK: MOV #ONEZRO,PTR1.0 ;INIT PTR TO [1] CMP BLKPTR,#OBJBK2 ;ARE WE INTO LOWER SECTOR? BLO NXTB30 ;NO-NEW READ NOT NEEDED NXTB10: ;LOOP HERE FOR SUCCESSIVE SECTOR READS DEC SECTCT ;ANY MORE SECTORS IN MODULE? BLT NXTB90 ;NO MORE: GO INIT FOR NEXT MODULE ;YES - READ IC ORDER CMP (R4),(R2) ;FIRST HALF-WORDS: BHI INPT02 ;NEW ONE IS LATER ALPHATETICALLY: BLO INPT01 ;NEW ONE IS EARLIER: KEEP LOOKING CMP 2(R4),2(R2) ;1ST HALVES EQUAL: COMPARE 2ND HALVES BLOS INPT01 ;STILL LOWER: TRY AGAIN INPT02: ;TIME TO INSERT ENTRY INTO LSD CMP R4,PTROBJ ;IF INSERTING BELOW OBJ MOD POINTER... BHI INPT03 ADD #BPSYM,PTROBJ ;...MU4 w"Di 0  @d wj \j@,ՠ w0  wX b77 F 5  7$ wHz 77 7 5  f?% D0t7 \7 2 XHd i Dw& 7j .jÕ7 7 wU 77bwNwwINEXT SECTOR--- MOV #OBJLST,-(SP) ;DISC READ LIST EMT DISCIO ;****READ NEXT SECTOR**** TST OBJERR ;READ ERROR? BNE LDER01 ;YES INC OBJSEC ;BUMP SECTOR # FOR NEXT TIME SUB #128.,BLKPTR ;SHIFT POINTER BACK TO TOP SECTOR AREA .PAGE NXTB30: ;PREPARE TO FIND NEXT BLOCK START MOV BLKPTR,R0 MOV #OBJBK2,R1 ;TOP OF LOWER AREA SUB ST ADVANCE IT ALONG WITH OTHERS INPT03: BR INSY01 ;GO INSERT AT R4 .PAGE UNSQUISH: ;MAKE A HOLE IN TABLE. R4 POINTS TO DESIRED HOLE LOC'N MOV R0,-(SP) MOV R1,-(SP) MOV USYME,R0 ;START @ TOP ENTRY... MOV R0,R1 ADD #BPSYM,R1 ;...AND EXPAND UPWARD UNSQ01: CMP R0,R4 ;ARE WE DOWN TO DESIRED LOC'N YET? BHI UNSQ02 ;NOT YET: MOVE ANOTHER ONE MOV (SP)+,R1 MOV wwPww Diw& 7j .jÕ7 7 wU 77bwNwwwwww # B 04V0 1RL1PA 4d2ihk4d$ihkz\iik NNihk^@ihk,w^h^h^i^hff@i h^h^h37"7ĭ  TA"PA""$" e  u E  B w& 5/f7  -7 7 &&-"7 ww wER0,R1 ;# BYTES REMAINING IN TOP SECTOR BR NXTB44 ;AVOID RESET "PTR1.0" IN CASE OF BLOCK BOUNDARY ; SEARCH FOR A "1-0" SEQUENCE TO START NEXT BLOCK NXTB40: MOV #ONEZRO,PTR1.0 ;INIT PTR TO [1] NXTB44: DEC R1 ;END OF TOP BLOCK YET? BGE NXTB46 ;NOT YET - KEEP GOING MOV R0,BLKPTR ;UPDATE FOR PROPER PLACE IN NEW BLOCK BR NXTB10 ;...AND GO MOVE NEXT BLOCK UP NXTB46: CMPB (R0)+,@PTR1.0  (SP)+,R0 RTS PC UNSQ02: MOV -(R0),-(R1) ;BLOCK MOVE MOV -(R0),-(R1) MOV -(R0),-(R1) MOV -(R0),-(R1) MOV -(R0),-(R1) BR UNSQ01 ; ******************************************************************** SQUISH: ;REMOVE ENTRY POINTED TO BY R4 FROM THE UNDEF'D TABLE JSR R5,REGSAV MOV R4,R0 MOV #BPSYM,R1 ;ELEMENT SIZE ADD R1,R0 ;STA7 ww! ! ! ! E 0737e!B*wz7 f8$iffh7 h2ifh 3w&  7\"g 7\gw \g"w&  + 77 \g@w\w&  \2g~rv w w"7 2\*g77 7 7 7L7 ^*kH? ɕQ .k: w'^f P&*kfjih7 Pg:gA ;IS NEXT BYTE A MATCH FOR SEQUENCE? BNE NXTB40 ;NO MATCH - KEEP LOOKING INC PTR1.0 ;MATCH: BUMP TO NEXT BYTE IN CODE BIT #1,PTR1.0 ;HAVE BOTH [1] AND [0] BEEN TESTED? BNE NXTB44 ;NO - CHECK FOR [0] .PAGE ; YEA! A [1-0] SEQUENCE HAS BEEN FOUND: NOW PROCESS BLOCK MOVB (R0)+,R1 ;BLOCK'S BYTE COUNT TSTB (R0)+ ;UPPER BYTE OF BC MUST BE ZERO BNE LDYS ONE ELEMENT ABOVE R1 ASR R1 ;USE BELOW AS COUNTER SQUI01: CMP R0,USYME ;REACHED TOP OF TABLE? BHIS SQUI04 ;YES: EXIT SQUI02: MOV R1,R2 ;COUNTER=# WORDS PER SYMBOL SQUI03: MOV (R0)+,(R4)+ ;BLOCK TRANSFER DEC R2 BGT SQUI03 ;STILL IN BLOCK BR SQUI01 SQUI04: JSR R5,REGPOP RTS PC .PAGE NXTMOD: ;ROUTINE SETS UP PARAMETERS TO READ NEXT Ohw>wwyyry7: @ w=ER02 MOV R0,R5 ;SAVE POINTER TO FIRST DATA BYTE ; NOW WANT TO COMPUTE CHECKSUM TO VERIFY CORRECT READ: MOV R1,R2 ;INIT CHECKSUM, WHICH INCLUDES BC SUB #4,R1 ;REDUCE BC TO ELIM "1-0" AND BC WORDS MOV R1,BC ;SAVE BYTE COUNT OF DATA ONLY NXTB50: MOVB (R0)+,R3 ;EXTRACT NEXT BYTE ADD R3,R2 ;ACCUM CHECKSUM DEC R1 ;MORE DATA BYTES TO ADD IN? BJ MODULE DEC NAMCTR ;MORE MODULES? BLT NXTM30 ;NO MORE: TAKE "DONE" EXIT CLR BLOCK1 ;FLAGS FIRST BLOCK IN MODULE MOV NAMPTR,R0 MOV 4(R0),OBJSEC ;START SECTOR # MOV 6(R0),SECTCT ;SECTOR COUNT INC SECTCT ;WANT ONE EXTRA SECTOR ON LAST READ ADD #8.,NAMPTR ;ADVANCE TO NEXT NAME MOV #OBJBK2,BLKPTR ;INIT BLOCK POINTER TO FORCE FIRST READ ""wZfPgfZfgz P %w7 w"f& Քe>@P(o`ww q݋z eew+% %/%9%@&7R  ^z,yp& v~ wwɥn7@E ,yw)l% %m%B%s@B&7" $ ><ɥJ9 ;BYTE COUNT INCLUDES CHECKSUM BYTE... BGE NXTB50 ;SO GO BACK FOR ONE EXTRA BYTE AT END INCB R2 ;CHECKSUM ITSELF INCLUDES THE "1" @BEGIN BNE LDER03 ;CHECKSUM ERROR MOV R0,BLKPTR ;ADVANCE BLK PTR-READY FOR NEXT BLOCK MOV R5,R0 ;RESET LOCAL PTR TO FIRST DATA BYTE BIT #1,R0 ;IS ADDR OF FIRST DATA BYTE ODD? BEQ NXTB70 ;EVEN: ADD #2,(SP) ;BUMP TO TAKE "GOOD" EXIT NXTM30: RTS PC .PAGE ;"NEXT BLOCK": SUBROUTINE READS IN SECTORS UNTIL ; AT LEAST ONE BYTE OF NEXT BLOCK IS IN UPPER HALF OF THE ; TWO-SECTOR BUFFER. ONE ADDITIONAL SECTOR IS READ AFTER ; THE FINAL SECTOR IN THE MODULE TO FORCE THE LAST BLOCK ; INTO THE UPPER HALF. NXTB90: JSR PC,NXTMOD ;INIT FOR NEXT MODULE AND READ A BLOCK BR w@7 f)l% %m%B%s@B&7" $ ><ɥJw@7 fwx ѕ ѕB ѕ ѕ>ѕ<ѕ~$gg,~ ѕ ѕ ѕLEDUMO~gbg$g"y"y7!h݇7 e~&J ѕ ѕ~(7 e5O7f~~&.P-Vg{ P ~ r ez~!`c"yylxxQ 5 NO RELOCATION NEEDED MOV BC,R3 ;NEED TO MOVE ALL BYTES BACK ONE NXTB60: MOVB (R0)+,-2(R0) ;SHIFT BYTE BACK ONE DEC R3 ;MORE BYTES TO MOVE? BGT NXTB60 ;YES MOV R5,R0 DEC R0 ;NOW POINTS TO FIRST DATA BYTE NXTB70: MOV BC,R5 ;INIT R5 WITH DATA BYTE COUNT ADD #2,(SP) ;BUMP FOR "GOOD" RETURN NXTB80: RTS PC ; ****************************************NXTB80 ;NO MORE MODULES NXTBLK: CMP BLKPTR,#OBJBK2 ;ARE WE INTO LOWER SECTOR? BLO NXTB30 ;NO-NEW READ NOT NEEDED NXTB10: ;LOOP HERE FOR SUCCESSIVE SECTOR READS DEC SECTCT ;ANY MORE SECTORS IN MODULE? BLT NXTB90 ;NO MORE: GO INIT FOR NEXT MODULE ;YES - READ NEXT SECTOR--- MOV #OBJLST,-(SP) ;DISC READ LIST EMT DISCIO ;****READ NEXT SECTOR**** TST "yw!h݇7 e~&J ѕ ѕ~(7 e5O7f~~&.P-Vg{ ~ r ez~!`c"yylxxQ "ywww ,a(1ɵ CKQ7V\7= (EeE eeg=eeye #!E EeEb eecewe e "!pE1**************************** LDER01: MOV #1,R4 ;OBJ MODULE BLOCK READ ERROR JSR PC,ERRPRT LDER02: MOV #2,R4 ;BLOCK BYTE COUNT ERROR JSR PC,ERRPRT LDER03: MOV #3,R4 ;OBJ MOD BLOCK CHECKSUM ERROR JSR PC,ERRPRT .PAGE ; " T R A P U T " ; SUBROUTINE PUTS AN "ADD R1,LOC" TWO-WORD INSTRUCTION IN THE TASK ; TRAILER, TO BE EXECUTED WHEN THE LOAD MODULE IS READ INTO CORE PRIOR ; TO TASK EXECUTION, THUS EF OBJERR ;READ ERROR? BNE LDER01 ;YES INC OBJSEC ;BUMP SECTOR # FOR NEXT TIME SUB #128.,BLKPTR ;SHIFT POINTER BACK TO TOP SECTOR AREA NXTB30: ;PREPARE TO FIND NEXT BLOCK START MOV BLKPTR,R0 MOV #OBJBK2,R1 ;TOP OF LOWER AREA SUB R0,R1 ;# BYTES REMAINING IN TOP SECTOR ; SEARCH FOR A "1-0" SEQUENCE TO START NEXT BLOCK NXTB40: MOV #ONEZRO,PTR1.0 ;INIT PTR TO [1]e"..w2w,D&& }}}fn7b ,%wV5x7| d6{7 @{(,2-7F6.   wɥ@ @.0gXgfgffz P eDr7~7 % %¥yݓ,¥B@><ɥ@-FECTING DYNAMIC RELOCTTION. THE SUBROUTINE ; CALCULATES THE PROPER DISPLACEMENT BETWEEN THE INSTRUCITON AND "LOC", ; THE WORD IN THE TEXT NEEDING DYNAMIC RELOCATION. THE FORMULA FOR THE ; DISPLACEMENT BETWEEN THE "ADD" INSTRUCTION AND ITS OBJECT IN THE LOAD ; TEXT IS: DISPL = CURPC + OFFSET - TRAPC ; THIS DISPLACEMENT IS NEGATIVE, SINCE ALL REFERENCES FROM THE TRAILER ; WILL BE BACKWARD. TRAPUT: ;SUBROUTINE TO BUILD TRAILER ADD #4,TRAPC ;ADV NXTB44: DEC R1 ;END OF TOP BLOCK YET? BLT NXTB10 ;YES - GO READ NEXT SECTOR CMPB (R0)+,@PTR1.0 ;IS NEXT BYTE A MATCH FOR SEQUENCE? BNE NXTB40 ;NO MATCH - KEEP LOOKING INC PTR1.0 ;MATCH: BUMP TO NEXT BYTE IN CODE BIT #1,PTR1.0 ;HAVE BOTH [1] AND [0] BEEN TESTED? BNE NXTB44 ;NO - CHECK FOR [0] .PAGE ; YEA! A [1-0] SEQUENCE HAS BEEN FOUND: NOW PRO,yL{L{f/w4 w-{{{H\7mN6D{ 7L0@{Et7mN6:{.7L06{7*:{}xr-6wz7 m77` 0 0  µ00l  µ?7 e67 67.@\VJFF-7w0 U e0 0 HU EE )ANCE TO NEXT OPEN CELL AFTER THIS 1. MOV TRAILPOINTER,R3 ;NEXT OPEN TRAILER SLOT MOV #60167,(R3)+ ;"ADD R1,A" INSTRUCTION JSR PC,GETPC ;GET VALUE OF CURRENT LOAD OFFSET SUB TRAPC,R4 ;CALC BACKWARD DISPLACEMENT CMP -(R4),-(R4) ;SINCE "PC" IS ADVANCED, BUT "TRAPC" NOT MOV R4,(R3)+ ;STICK IT BEHIND "ADD" ; NOW SEE IF BUFFER IS FULL, AND WRITE IT OUT IF SO: CMP R3,#TRAILBLOCK+64.CESS BLOCK MOVB (R0)+,R1 ;BLOCK'S BYTE COUNT TSTB (R0)+ ;UPPER BYTE OF BC MUST BE ZERO BNE LDER02 MOV R0,R5 ;SAVE POINTER TO FIRST DATA BYTE ; NOW WANT TO COMPUTE CHECKSUM TO VERIFY CORRECT READ: MOV R1,R2 ;INIT CHECKSUM, WHICH INCLUDES BC SUB #4,R1 ;REDUCE BC TO ELIM "1-0" AND BC WORDS MOV R1,BC ;SAVE BYTE COUNT OF DATA ONLY NXTB50: MOVB (R0) 5%+7 7m77``C  0 0  µ00l  µ?7 e67 67.@\VJwFF-7w0 U e0 0 HU EE 5%+7 7wxw0e!@~wHPy y :w  /y? 7\ Z%/y& Z% 6 % ;AT END YET? BLO TRAP20 ;NOT YET MOV #TRALST,-(SP) ;LIST FOR WRITING TRAILER EMT DISCIO INC TRASEC ;BUMP TRAILER SECTOR COUNT MOV #TRAILBLOCK,R3 ;PREPARE TO RESET POINTER TRAP20: MOV R3,TRAILPOINTER ;NEW POINTER RTS PC .PAGE ; " T X T O U T " ; ("TXTBC" MAY BE ZERO, WHICH INDICATES "CURPC" HAS BEEN SET TO A NEW ; VALUE BY AN RLD COMMAND. IF THE NEW PC STILL FA+,R3 ;EXTRACT NEXT BYTE ADD R3,R2 ;ACCUM CHECKSUM DEC R1 ;MORE DATA BYTES TO ADD IN? DEC R1 ;BYTE COUNT INCLUDES CHECKSUM BYTE BGE NXTB50 ;SO GO BACK FOR ONE EXTRA BYTE AT END INCB R2 ;CHECKSUM ITSELF INCLUDES THE "1" @BEGIN BNE LDER03 ;CHECKSUM ERROR MOV R0,BLKPTR ;ADVANCE BLK PTR-READY FOR NEXT BLOCK MOV R5,R0 /zy H(*!Bw5%+7 7wxw0e!@~wHPy y :wV  /y? \ Z%/y& Z% 6 /zy H(*!BwwDwww!hyyyyy!7$7*7B7D7=7E7H7K777V7X7[7^7a7d7g7g7j7m7g7j7g7U777 7777n7& &y&ry& &"y!LLS WITHIN BLOCK #1, ; NO TRANSFER WILL OCCUR. IF THE NEW PC IS INTO THE SECOND BLOCK, OR ; OUTSIDE THE TWO BLOCKS, BOTH BLOCKS WILL BE WRITTEN OUT, AND THE ; APPROPRIATE NEW TWO BLOCKS WILL BE READ IN. IN MANY CASES THIS WILL ; MEAN THAT A PARTIALLY-WRITTEN TEXT BLOCK #2 WILL BE WRITTEN TO DISC, ; ONLY TO BE READ BACK IN AGAIN INTO BLOCK #1. IN THIS WAY, ; WE CAN BUFFER OUR TEXT OUT ONE SECTOR AT A TIME, AND PROTECT THE ; INTEGRITY OF OUR NEWLY CREATED TEXT.) TXTOUT: ;SUBROUTINE TO ;RESET LOCAL PTR TO FIRST DATA BYTE BIT #1,R0 ;IS ADDR OF FIRST DATA BYTE ODD? BEQ NXTB70 ;EVEN: NO RELOCATION NEEDED MOV BC,R5 ;NEED TO MOVE ALL BYTES BACK ONE NXTB60: MOVB (R0)+,-2(R0) ;SHIFT BYTE BACK ONE DEC R5 ;MORE BYTES TO MOVE? BGT NXTB60 ;YES NXTB70: MOV BC,R5 ;INIT R5 WITH DATA BYTE COUNT ADD #2,(SP) ;BUMP FOR "GOOD" RETURN NXTB80:  yy  H7K777V7X7[7^7a7d7g7g7j7m7g7j7K7g7U777 7777n7& &y&ry& &"y yy  wwr-w7" ee7l" ,e&B7l w" e ee 5,'& ,B4 Z|- v-~ ryyp|K 7 ry OUTPUT ACCUMULATED TEXT IF BUFFER IS FULL ADD TXTBC,CURPC ;BUMP LOC'N CTR TO BGN OF NXT TEXT BLOCK ADD TXTBC,TXTPTR ;ALSO BUMP POINTER IN LOCAL TEXT BLOCK MOV CURPC,-(SP) ;SAVE FOR WORK BELOW MOV TXTORG,R4 ;PC VALUE @ BGN OF RESIDENT TEXT CMP (SP),R4 ;IS NEW PC BELOW TEXT IN BLOCK ONE? BLO TXTO10 ;YES - REPLACE TEXT ADD #128.,R4 ;PC OF FIRST BYTE IN SECOND TEXT BLOCK RTS PC ; ******************************************************************** LDER01: MOV #1,R4 ;OBJ MODULE BLOCK READ ERROR JSR PC,ERRPRT LDER02: MOV #2,R4 ;BLOCK BYTE COUNT ERROR JSR PC,ERRPRT LDER03: MOV #3,R4 ;OBJ MOD BLOCK CHECKSUM ERROR JSR PC,ERRPRT .PAGE ; " T R A P U T " ; SUBROUTINE PUTS AN "ADD R1,LOC" TWO-WORD INSTRUCTION IN THE TASK ; TRAILER, TO BE EXECUTED WHEN THE LOAD MODUyK ryFf#V %x M  "ynx3  {*M  x3 x3 xs<{*Px3 ~x 3xx3pxs bm.ZJmZZ2w (.ҝ$&m*q& "Nm"Bm`Ua  `*T ENSCIEQUN-NOb R!PAL FTWGSWHRWQ CMP (SP),R4 ;NEW PC IS ABOVE BLOCK1:IS IT BELOW BK2? BLO TXTO50 ;YES - NO NEED TO WRITE OR READ .PAGE TXTO10: ;HERE TO WRITE CURRENT TEXT OUT AND READ NEW TEXT IN--- MOVB #1,TXTR.W ;WRITE MOV #TXTLST,-(SP) EMT DISCIO ;WRITE OUT CURRENT RESIDENT TEXT MOV (SP),R3 ;NEW "CURPC" ASR R3 ;NOW GET SECTOR FOR NEW PC BIC #100000,R3 ;SUPPRESLE IS READ INTO CORE PRIOR ; TO TASK EXECUTION, THUS EFFECTING DYNAMIC RELOCTTION. THE SUBROUTINE ; CALCULATES THE PROPER DISPLACEMENT BETWEEN THE INSTRUCITON AND "LOC", ; THE WORD IN THE TEXT NEEDING DYNAMIC RELOCATION. THE FORMULA FOR THE ; DISPLACEMENT BETWEEN THE "ADD" INSTRUCTION AND ITS OBJECT IN THE LOAD ; TEXT IS: DISPL = CURPC + OFFSET - TRAPC ; THIS DISPLACEMENT IS NEGATIVE, SINCE ALL REFERENCES FROM THE TRAILER ; WILL BE BACKWARD. TRAPUT: ;SUBROUTINNW~_PW3~_PW30  dG*<ECVDNOCTPOSEUGLAJUUNYJMAPRRAMAEB@G*NFJAJɝ ѝ 6G@ G*~{* rx) rx 2 Z{*xx f & ~x 6{*v m* ^ djpEvl7l*d77   ll* b D!CML IL b ?b  FC: AbS EXTENDED SIGN ASR R3 ASR R3 ASR R3 ASR R3 ASR R3 ASR R3 MOV R3,R4 ;SAVE NEW SECTOR (RELATIVE TO TEXT BGN) ADD BGNSEC,R3 ;SECTOR RELATIVE TO BEGIN OF BATCH FILE MOV R3,TXTSEC ;SET FOR UPCOMING READ & SUBSQNT WRITES CLRB TXTR.W ;PREPARE FOR NEW TEXT READ MOV #TXTLST,-(SP) EMT DISCIO ;READ IN NEW TEXT E TO BUILD TRAILER ADD #4,TRAPC ;ADVANCE TO NEXT OPEN CELL AFTER THIS 1. MOV TRAILPOINTER,R3 ;NEXT OPEN TRAILER SLOT MOV #60167,(R3)+ ;"ADD R1,A" INSTRUCTION JSR PC,GETPC ;GET VALUE OF CURRENT LOAD OFFSET SUB TRAPC,R4 ;CALC BACKWARD DISPLACEMENT MOV R4,(R3)+ ;STICK IT BEHIND "ADD" ; NOW SEE IF BUFFER IS FULL, AND WRITE IT OUT IF SO: CMP R3,#TRAILBLOCK+64. ;AT END YET?pb W~_PW3~_PW3~_PW3fW*~_PW3~_PW3~_PW3BW*]OW0V5 5 5 5bbbF*dz5 t5F }5eF*5#kd7 j  ӕ &[g~xxx2{*rxerx2xM  z,<w   px >j kg0[g0l&Kg*g1 g0`g"g"g ASL R4 ;NOW GET PC AT BEGIN OF NEW TEXT ASL R4 ASL R4 ASL R4 ASL R4 ASL R4 ASL R4 MOV R4,TXTORG ;NEW BEGIN PC MOV (SP),R3 ;PC FOR BEGIN OF NEXT TEXT BLOCK SUB R4,R3 ;GET OFFSET FROM TOP OF TEXT AREA ADD #TXTBK1,R3 MOV R3,TXTPTR ;ACTUAL POINTER TO NEXT OPEN TEXT WORD TXTO50: TST (SP)+ ;POP SAVED PC  BLO TRAP20 ;NOT YET MOV #TRALST,-(SP) ;LIST FOR WRITING TRAILER EMT DISCIO INC TRASEC ;BUMP TRAILER SECTOR COUNT MOV #TRAILBLOCK,R3 ;PREPARE TO RESET POINTER TRAP20: MOV R3,TRAILPOINTER ;NEW POINTER RTS PC .PAGE ; " T X T O U T " ; ("TXTBC" MAY BE ZERO, WHICH INDICATES "CURPC" HAS BEEN SET TO A NEW ; VALUE BY AN RLD COMMAND. IF THE NEW PC STILL FALLS WITHIN BLOCK #0 rl.7 7 7 7 jb&Fb*` `]OW0~W]OW0]OW0]OW0ZW*]OW0]OW0]OW06W*˥n5 F*n5 7e _]F,@7  P7 >76 -fF*rxz*x  &   z*< x3  RTS PC .PAGE LPCALL: ;COMMON ROUTINE TO MAKE EMT TO LINE PRINTER MOV #MAPLST,-(SP) EMT LPRNTR ;LINE PRINTER RTS PC ; ******************************************************************** ; SUBROUTINE "BINARY TO OCTAL ASCII CONVERSION" ; INPUT: R4 = BINARY NUMBER ; R3 = DESTINATION END ADDRESS ; R2 = ITERATION LENGTH (IF ENTER @"B2ONTA") 1, ; NO TRANSFER WILL OCCUR. IF THE NEW PC IS INTO THE SECOND BLOCK, OR ; OUTSIDE THE TWO BLOCKS, BOTH BLOCKS WILL BE WRITTEN OUT, AND THE ; APPROPRIATE NEW TWO BLOCKS WILL BE READ IN. IN MANY CASES THIS WILL ; MEAN THAT A PARTIALLY-WRITTEN TEXT BLOCK #2 WILL BE WRITTEN TO DISC, ; ONLY TO BE READ BACK IN AGAIN INTO BLOCK #1. IN THIS WAY, ; WE CAN BUFFER OUR TEXT OUT ONE SECTOR AT A TIME, AND PROTECT THE ; INTEGRITY OF OUR NEWLY CREATED TEXT.) TXTOUT: ;SUBROUTINE TO OUTPUT ACCUMULATEx3 xsxx3 ~x 3~z, xNl* v 6 F6Z Bf*l*& JnBe@` E@l* `*`*':_NW3:_NW3rW:_NW3:_NW3:_NW3NW*:_NW3:_NW3   '͕ e uBF*r MՋ  W!  BIN2OC: MOV #6,R2 ;INIT ITERATION LENGTH (NORMAL 6 CHARS) B2ONTA: ;ENTER HERE WHEN PRE-SETTING ITERATION LENGTH MOVB R4,-(R3) ;ALSO LOOP RETURN FOR NEXT OCTAL DIGIT BICB #370,(R3) ;LEAVE ONLY LEAST SIGNIFICANT THREE BITS BISB #060,(R3) ;CHANGE TO ASCII CODE ASR R4 ;BEGIN SHIFTING FOR NEXT OCTAL DIGIT BIC #100000,R4 ;PREVENT SIGN PROPAGATION ASR R4 ASR R4D TEXT IF BUFFER IS FULL ADD TXTBC,CURPC ;BUMP LOC'N CTR TO BGN OF NXT TEXT BLOCK ADD TXTBC,TXTPTR ;ALSO BUMP POINTER IN LOCAL TEXT BLOCK MOV CURPC,-(SP) ;SAVE FOR WORK BELOW MOV TXTORG,R4 ;PC VALUE @ BGN OF RESIDENT TEXT MOV R4,R3 ;SAVE ALSO FOR CALCS BELOW CMP (SP),R4 ;IS NEW PC BELOW TEXT IN BLOCK ONE? BLO TXTO10 ;YES - REPLACE TEXT ADD #128.,R4 ;P p6F*& ˕ 㕀 pxsnx 0Zz*w$ &  4z, nx 0[g Kgw$7 k*KgWE g"geg"grFw"gk. ߕ!`*e2ad`*Jw  & & N`#N` NW3*W*RWW~WrWfWZWNWBW(WW~WrWfWZWNWBW6W&W DEC R2 ;MORE ASCII DIGITS TO GO? BGT B2ONTA ;BACK FOR MORE RTS PC ;ASCII BUFFER FILLED: RETURN ; ******************************************************************** ERRPRT: ;ERROR MESSAGE PRINTING ROUTINE ; R4 ALREADY INITED WITH BINARY ERROR NUMBER MOV #ERRNUM+2,R3 ;LAST CHAR IN ASCII BUFFER MOV #3,R2 ;A 3-CHAR MESSAGE NUMBERR JSR PC,B2ONTA ;USEC OF FIRST BYTE IN SECOND TEXT BLOCK CMP (SP),R4 ;NEW PC IS ABOVE BLOCK1:IS IT BELOW BK2? BLO TXTO50 ;YES - NO NEED TO WRITE OR READ .PAGE TXTO10: ;HERE TO WRITE CURRENT TEXT OUT AND READ NEW TEXT IN--- MOVB #1,TXTR.W ;WRITE MOV #TXTLST,-(SP) EMT DISCIO ;WRITE OUT CURRENT RESIDENT TEXT ASR R3 ;NOW GET SECTOR FOR NEW PC BIC #100000,R3 ;SUPPRESS EX~WrWfWZWNWBW6W*WW"˕e E*m˕ D T   E* ECeN5 H E*xx2z*xx:*  2y*| @ 8   y* "g `k*0  ix l 7 rk* 6 w Nk* @`}M&f&4``    SECONDARY ENTRY POINT TO CONVERSION MOV #ERRMSG,TTYBUF ;INIT FOR PRINTING ERROR MESSAGE MOV #TTYLST,-(SP) EMT TTYOUT ;REQUEST MESSAGE EMT EXIT ;CURRENTLY ALL ERRORS TERMINATE LOADER .PAGE TTYLST: .WORD 1 ;TELETYPE I/O LIST .BYTE 0,2 ;DEVICE: TTY #1; CALL TYPE: SUSPEND .WORD 0 ;I/O COMPLETE .BYTE 0,0 ;ERROR,LEVEL .WORD 0,0 TENDED SIGN ASR R3 ASR R3 ASR R3 ASR R3 ASR R3 MOV R3,R4 ;SAVE NEW SECTOR (RELATIVE TO TEXT BGN) ADD BGNSEC,R3 ;SECTOR RELATIVE TO BEGIN OF BATCH FILE MOV R3,TXTSEC ;SET FOR UPCOMING READ & SUBSQNT WRITES CLRB TXTR.W ;PREPARE FOR NEW TEXT READ MOV #TXTLST,-(SP) EMT DISCIO ;READ IN NEW TEXT ASL R4 *`_ _`vWrWtWpW. "CeE*E`$5 D!  5 jE*  D>w*y' T 0y*7  f&f&vy*zz  ߐKggg *k*x *g Kg)   ;RESERVED TTYBUF: .WORD 0 ;DATA BUFFER OBJLST: .WORD 1 ;OBJECT MODULE READ LIST .BYTE 1,2 ;DISC: SUSPEND .WORD 0 .BYTE 0,3 ;ERR TASK, DISC REQUEST PRIORITY OBJERR: .WORD 0,0 ;ERROR WORD, RESERVED .WORD OBJHED ;DATA BUFFER MAPLST: .WORD 1 ;LIST FOR LOAD MAP .BYTE 3,2 ;LINE PRINTER,SUSPEND .WORD 0  ;NOW GET PC AT BEGIN OF NEW TEXT ASL R4 ASL R4 ASL R4 ASL R4 ASL R4 ASL R4 MOV R4,TXTORG ;NEW BEGIN PC MOV (SP),R3 ;PC FOR BEGIN OF NEXT TEXT BLOCK SUB R4,R3 ;GET OFFSET FROM TOP OF TEXT AREA ADD #TXTBK1,R3 MOV R3,TXTPTR ;ACTUAL POINTER TO NEXT OPEN TEXT WORD TXTO50: TST (SP)+ ;POP SAVED PC RTS PC Kgߕ.k*71 & ×& `` VzV0V_luu_zvyhpfe_f~dd_ WD!,W  V*  & ``      V*ep fFE* Օ - fU%2"E*>w~  E 0#D*yxryDTEORAB1 P L/ ^yYADRET NOTy;I/O COMPLETE .BYTE 0,0 ;ERROR,LEVEL .WORD 0,0 ;RESERVED MAPBUF: .WORD 0 ;DATA BUFFER: CHOSEN DURING RUN TXTLST: .WORD 1 ;LIST FOR TRANSFERS TO/FROM TEXT AREA .BYTE 1,2 ;DISC; SUSPEND .WORD 0 .BYTE 0,3 ;ERROR,LEVEL .WORD 0,0 ;RESERVED .WORD TXTHED ;ALWAYS R/W FROM/TO TEXT AREA TRALST: .WORD 1 ;LIST FO .PAGE LPCALL: ;COMMON ROUTINE TO MAKE EMT TO LINE PRINTER MOV #MAPLST,-(SP) EMT LPRNTR ;LINE PRINTER RTS PC ; ******************************************************************** ; SUBROUTINE "BINARY TO OCTAL ASCII CONVERSION" ; INPUT: R4 = BINARY NUMBER ; R3 = DESTINATION END ADDRESS ; R2 = ITERATION LENGTH (IF ENTER @"B2ONTA") BIN2OC: MOV #6,R2 1 P L/ ORRR ETYRIPA1 P L/ 0y* j*T^w vKg01 g2Lj*_g`g"g "gr "g W"ߕ%j*rW_g5&j J.yM,y 0|Fy P0|P0|P0|P"y*C +"g BKg6*vj* 8 Kgߕ *g H7Rj*`K  w 2j_]W &fn_*w YWW^`W@7\WJ_*6 6  RV,0 B C B Da w .V* IN FILE ; ******************************************************************** TXTHED: ;HEADER FOR TEXT SAVE BUFFER READ/WRITE OPERATIONS .WORD BTCHID ;FILE I.D. FOR BATCH FILE .BYTE 0 ;RELATIVE SECTOR TXTR.W: .BYTE 0 ;TEXT READ/WRITE BYTE .WORD 0,0,0 TXTSEC: .WORD 0 ;RELATIVE SECTOR TO READ/WRIOTE TEXT TXTCNT: .WORD 0 ;# WORDS TO TRANSFER EACH TIME TXTBK1: .=.+128.  ;MORE ASCII DIGITS TO GO? BGT B2ONTA ;BACK FOR MORE RTS PC ;ASCII BUFFER FILLED: RETURN ; ******************************************************************** ERRPRT: ;ERROR MESSAGE PRINTING ROUTINE ; R4 ALREADY INITED WITH BINARY ERROR NUMBER MOV #ERRNUM+2,R3 ;LAST CHAR IN ASCII BUFFER MOV #3,R2 ;A 3-CHAR MESSAGE NUMBERR JSR PC,B2ONTA ;USE SECONDARY ENTRY POINT T w v  Da& w V*C7  D*E. śzנaנ ZנnD*Aנ.å $å J JD*8y~~~y*\wlvw`vTv c.j*O8 f1W" j*>jKgffffff" e7 i.W= E w 8 W- "_. ;FIRST TEXT SAVE BLOCK TXTBK2: .=.+128. ;SECOND TEXT SAVE BLOCK ; ******************************************************************** OBJHED: ;HEADER FOR READING OBJECT MODULES .WORD BTCHID ;FILE I.D. FOR BATCH FILE .BYTE 0 ;RELATIVE SECTOR .BYTE 0 ;READ/WRITE FLAG .WORD 0,0,0 OBJSEC: .WORD 0 ;RELATIVE SECTOR NUMBER .WORD 128. ;ALWAYS READ IN TWO SEO CONVERSION MOV #ERRMSG,TTYBUF ;INIT FOR PRINTING ERROR MESSAGE MOV #TTYLST,-(SP) EMT TTYOUT ;REQUEST MESSAGE EMT EXIT ;CURRENTLY ALL ERRORS TERMINATE LOADER .PAGE TTYLST: .WORD 1 ;TELETYPE I/O LIST .BYTE 0,2 ;DEVICE: TTY #1; CALL TYPE: SUSPEND .WORD 0 ;I/O COMPLETE .BYTE 0,0 ;ERROR,LEVEL .WORD 0,0 ;RESERVED n[W[W*w ZW3  &WfW}^. Q Qw TU&TJ0Tw" 0SSf0wU.&8 FjS 9נ 0נ b .1Vw&D*v̵pUE& E ` eD*) `  EP7 >vdt^tb7 .v7 p1p v(0 p1~p  7 .7 1 6* ߕz &i,w$j$jii !CTORS OBJBK1: .=.+128. ;FIRST BLOCK FOR OBJECT DATA OBJBK2: .=.+128. ;SECOND BLOCK FOR OBJECT DATA ; ******************************************************************** TRAHED: ;HEADER FOR TRAILER WRITES .WORD BTCHID ;FILE I.D. FOR BATCH FILE .BYTE 0 TRAR.W: .BYTE 1 ;ALWAYS WRITE FROM TRAILER AREA .WORD 0,0,0 TRASEC: .WORD 0 ;TRAILER SECTOR NUMBER .WORD 64. "TTYBUF: .WORD 0 ;DATA BUFFER OBJLST: .WORD 1 ;OBJECT MODULE READ LIST .BYTE 1,2 ;DISC: SUSPEND .WORD 0 OBJERR: .BYTE 0,0 .WORD 0,0 .WORD OBJHED ;DATA BUFFER MAPLST: .WORD 1 ;LIST FOR LOAD MAP .BYTE 3,2 ;LINE PRINTER,SUSPEND .WORD 0 ;I/O COMPLETE .BYTE 0,0 ;ERROR,LEVEL .WORD 0,0 ;RESERVEii$j$jiy Kgߕi&Hx7K f&SW3RW3QWJ  `W`W^, ^W^W E SWSWRWRWQWQW!QW^.x T   J:0TU*^  Sr7eSS| zU*T  DSVU*0TEE& C*Aŀ.å 9נ0נ̋C*  sCv7 := ,&;C*%D76pu*)H H H &t5$ 0,1,2*M,3 SET SWITCHES=-1 TO RESTORE DISK HMIT WHEN READY: *M DISK ERR,VZYWUW^WYW}WWWYW;*|ZUW W YW1YWwh W*Z1UW YW*le  e$exf&f&% ;WRITE ONE SECTOR AT A TIME TRAILBLOCK: .=.+128. ;TRAILER BUILD AREA: OUTPUT WHEN FULL .PAGE IDMSG: IDEND-.-4 ;# CHARS IN I.D. MESSAGE .WORD 0 .BYTE CR .ASCII "ROSLOD IIA" .BYTE CR,'# IDEND: .EVEN ; ******************************************************************** ND1MSG: ND1END-.-4 ;# CHARS IN "END 1" MESSAGE .WORD 0 .BYTE CR .ASCII "ROSLOD PASS #1 EN&D MAPBUF: .WORD 0 ;DATA BUFFER: CHOSEN DURING RUN TXTLST: .WORD 1 ;LIST FOR TRANSFERS TO/FROM TEXT AREA .BYTE 1,2 ;DISC; SUSPEND .WORD 0 .BYTE 0,0 ;ERROR,LEVEL .WORD 0,0 ;RESERVED .WORD TXTHED ;ALWAYS R/W FROM/TO TEXT AREA TRALST: .WORD 1 ;LIST FOR TRAILER .BYTE 1,2 ;DISC,SUSPEND .WORD 0 .BYTE 0,0 u(t$ V JP u,Kgwxi*B0 7 ( 7 7 Kg1 Ti*`ߕ,w( & 旇0i*= jWe^*ZbWe@ jWe B w pb^,rW=W=U 5h5l>^*S%+N%` a 02U*, 0Tm]P%X%DE%U* |T xT S  6-!'+)" (% #@*/UrC*_(P*eJ *q)mȵ  t@ptD*q ɕte*q%)(oa*? v   Z *?X H ĝL5e - ABORTED DECTMAPE ERROR - ABORTEDN*PJ    8 W YW1UW@`Ww*Zr]Ww&W]WwE,ZE)D" .BYTE CR ND1END: .EVEN ; ******************************************************************** PAS2MG: PAS2ND-.-4 ;# CHARS IN "PASS 2" MESSAGE .WORD 0 .BYTE CR .ASCII "ROSLOD PASS #2 BEGIN" .BYTE CR PAS2ND: .EVEN ; ******************************************************************** ND2MSG: ND2END-.-4 .WORD 0 .BYTE CR .ASCII "ROSLOD PASS #2 END" .BYTE CR ND2END: .EVEN .PAGE * ;ERROR;LEVEL .WORD 0,0 .WORD TRAHED ;DATA BUFFER .PAGE TXTHED: ;HEADER FOR TEXT SAVE BUFFER READ/WRITE OPERATIONS .WORD BTCHID ;FILE I.D. FOR BATCH FILE .BYTE 0 ;RELATIVE SECTOR TXTR.W: .BYTE 0 ;TEXT READ/WRITE BYTE .WORD 0,0,0 TXTSEC: .WORD 0 ;RELATIVE SECTOR TO READ/WRIOTE TEXT TXTCNT: .WORD 0 ;# WORDS TO TRANSFER EACH TIME TXTBK1 _wNC*@  CL wA w 6 Keӵtxu.t`Da  ttœt: Ru,0}ߐ"g*g0g*g0*g"g< i*AKgߐKg  7 2 h. 7  &>n5 2s@5 7 ^.R`W@^W@QWwTWY7]*WA ZW,T T,$RTTTx  0 :, D$W@`W f&W  4 rev  we v7 wv>eG7& ^*r< 72΍e*4r"2 7B f *@ P5 5J*6@ B׭ F*Z@  RM7*BP MRM x 7*fP7  - ERRMSG: ERNEND-.-4 ;# CHARS IN ERROR MESSAGE .WORD 0 .BYTE CR .ASCII "ERROR # " ERRNUM: .BYTE 0,0,0 .BYTE CR ERNEND: .EVEN ; ******************************************************************** HEDING: .WORD END01-4-. .WORD 0 .BYTE FF .ASCII "**** ROSLOD LOAD MAP **** .BYTE LF,LF END01: .EVEN .PAGE MODULE: .WORD END03-4-. .WORD 0 .ASCII "*********.: .=.+128. ;FIRST TEXT SAVE BLOCK TXTBK2: .=.+128. ;SECOND TEXT SAVE BLOCK ; ******************************************************************** OBJHED: ;HEADER FOR READING OBJECT MODULES .WORD BTCHID ;FILE I.D. FOR BATCH FILE .BYTE 0 ;RELATIVE SECTOR .BYTE 0 ;READ/WRITE FLAG .WORD 0,0,0 OBJSEC: .WORD 0 ;RELATIVE SECTOR NUMBER .WORD 128. T*c@R< JRXXXXXX: DSELFI# T, *C*e S  m7 C* $@$ c/@B*5Hm0 ̊,u,-ew 6 7u*-< ߕ× h*6 6 *g dvh*f~7 R ߕxh*ÝRw (WfW]*YW ]W0P < 6 Be.PeM*[ DW+ŀ| n *-*2[el.VWBE,I k*V[ 5*ffff) ERROR XXXXX#,f SXXXXX SXXXXX SXXXXX SXXXXX *Jf&f-f4f;fBf.Xr D &  ‹ & & N & .r yefEw V*r7b7 <7 :wE@*~@Շעעע *@1*" .BYTE LF .ASCII 'MODULE TITLE: "' TITLE: .BYTE 0,0,0,0,0,0,'",LF .ASCII "SECTION" .BYTE HT .ASCII "ENTRY" .BYTE HT .ASCII "OFFSET" .BYTE HT .ASCII "SIZE" .BYTE HT .ASCII "TOTAL" END03: .EVEN .PAGE SECT: .WORD END04-4-. .WORD 0 .BYTE '< SECNAM: .BYTE 0,0,0,0,0,0 .BYTE '>,HT,HT SECVAL: .BYTE 0,0,0,0,0,0,HT SECSIZ: .BYTE 2 ;ALWAYS READ IN TWO SECTORS OBJBK1: .=.+128. ;FIRST BLOCK FOR OBJECT DATA OBJBK2: .=.+128. ;SECOND BLOCK FOR OBJECT DATA ; ******************************************************************** TRAHED: ;HEADER FOR TRAILER WRITES .WORD BTCHID ;FILE I.D. FOR BATCH FILE .BYTE 0 TRAR.W: .BYTE 0 ;READ/WRITE .WORD 0,0,0 TRASEC: .WORD 0 ;TRAILER SECTOR NUMBER .WORD 64. $WfW= @5A],lWDYWVW1XW13 `W@J xTOI VISD ELFID TEESQURE NNC,xT*-H,T Z : ISD ELFID TEESQUREE TH S$25 ;B*=J@!  2B**JnCVCDC$CBBB&t*GtttttttU t~t,~ 6 Th*4& עע Š Հ  W  MM*PRM  `M KnM ] P`.P   =WC$W5@*z[@w. ĕ YW^WYW2 *[   ށ VW VWĕ\YWw *nf w | w| z.ffw  7 \'wVfP(57:& !*r5E -?-50,0,0,0,0,0,HT CUMSIZ: .BYTE 0,0,0,0,0,0 END04: .EVEN ; ******************************************************************** .PAGE ENTRY: .WORD END05-4-. .WORD 0 .BYTE ' ,HT .ASCII " " MFLAG: .BYTE 0 ;PLACE TO PUT POSSIBLE "M" FLAG .ASCII " " GLOBAL: .BYTE 0,0,0,0,0,0,' ,' ; GLBVAL: .BYTE 0,0,0,0,0,0 END05: .EVEN .PAGE UNDHED: .WORD END06-4-. .WORD 0 .ASCII 6 ;WRITE ONE SECTOR AT A TIME TRAILBLOCK: .=.+128. ;TRAILER BUILD AREA: OUTPUT WHEN FULL .PAGE IDMSG: IDEND-.-4 ;# CHARS IN I.D. MESSAGE .WORD 0 .BYTE CR .ASCII "ROSLOD IIA" .BYTE CR IDEND: .EVEN ; ******************************************************************** ND1MSG: ND1END-.-4 ;# CHARS IN "END 1" MESSAGE .WORD 0 .BYTE CR .ASCII "ROSLOD PASS #1 EN w* ee0h*  ],W@&WfW=YW  ^]*4 ^W@YW1QW[W1(WDC:]*]WTW: ISE LUVAC RIMENUE TH S*DELFIC RIMENUN-NOF ST OEDSTUEEQ RONSIERNVCOC RIMENU  ^ vB*   @RB*oUU .B*6 J ABt%Xt, ND.E Y ORCTREDIL BOYM SERADLOF 9/**********/ .BYTE LF,LF .ASCII "UNDEFINED REFERENCES" .BYTE LF END06: .EVEN ; ******************************************************************** UNDDEF: .WORD 6 .WORD 0 UNDNAM: .BYTE ,,,,, ;SIX CHARS IN NAME OF UNDEFINED REF .PAGE ASWICH: .WORD 0 ;SWITCH FOR IGNORING "ASECTS" BC: .WORD 0 ;BYTE COUNT BGNSEC: .WORD 0 ;BEGIN SECTOR FOR BUILDING LOAD MODULE BLKPTR: .WOR:D" .BYTE CR ND1END: .EVEN ; ******************************************************************** PAS2MG: PAS2ND-.-4 ;# CHARS IN "PASS 2" MESSAGE .WORD 0 .BYTE CR .ASCII "ROSLOD PASS #2 BEGIN" .BYTE CR PAS2ND: .EVEN .PAGE ERRMSG: ERNEND-.-4 ;# CHARS IN ERROR MESSAGE .WORD 0 .BYTE CR .ASCII "ERROR # " ERRNUM: .BYTE 0,0,0 .BYTE CR ERNEND: .EVEN ; **************%w  4t*6 p?tee  2 h* [g4Kggg 4 ߕ rg*ZWkgߐKg g* D`` f䢷]*jW4bWebW4bWbWr & &\,ZjW4jW< > 2A@53jS*ThSANSTXI-EON NISD ELFID TEESQURE !DS* ):49S,R O2,,1 NE,, P,SX, (< !  - B* OND;E . = NDDELS E BLTAL BOYM SOR FCEPA SVEERES;R 0020.+.= R FEUF BEDEDNEUNR VE OESITWR: Y"ORCTREDIL BOYM SERADLO;" : GNDBLS T UNCOR TEACARCHL UACT;A 0 D OR.W: NTPCIN NGRISTD ANMMCOR FOR FEUF BUTNP ITY;T *7AMXNMA D OR.W: ATCDAS ERFFBUN IORSVEON CRYRAPOEM;T 0 0,0, D OR.W: UFPBTM E.ULOD MER PDSOR WURFOS SE U. LEDUMOH AC EOR FONTIMAORNF IORCTSED AN..;. . ..ESAM N50AD RLEDUMOJ OBS LDHOR FEUF;B . .+*8AMXN=D 0 ;POINTER TO CURRENT PLACE IN INPUT BLOCK BLOCK1: 0 ;FLAG FOR FIRST BLOCK IN MODULE CURPC: .WORD 0 ;CURRENT VALUE OF RELATIVE "PC" DIRSEC: .WORD 0 ;NEXT AVAILABLE DIRECTORY SECTOR MODCNT: .WORD 0 ;COUNT OF # OF MODULES TO LINK NAMCTR: 0 ;COUNTER FOR NAMES INPUT FROM TTY NAMPTR: 0 ;POINTER TO NAMES IN INPUT LIST OFFSET: 0 ;KEEPS OFFSET FROM BEGIN OF LOAD MODULE ONEZRO: .BYTE 1,0 PRSIZE: .WORD 0 >****************************************************** HEDING: .WORD END01-4-. .WORD 0 .BYTE FF .ASCII "**** ROSLOD LOAD MAP **** END01: .EVEN .PAGE MODULE: .WORD END03-4-. .WORD 0 .ASCII 'MODULE TITLE: "' TITLE: .BYTE 0,0,0,0,0,0,'",LF .ASCII "SECTION ENTRY OFFSET SIZE" .BYTE LF END03: .EVEN .PAGE SECT: .WORD END04-4-. .WORD 0 .BYTE '< SECNAM: .BYTE 0, %A*UD  Et*t-&UU s*p   tÜÝ s**g R[gVKg Kgg*qߕ]r7` 6  & ×&f|g*N\, \*X 0 ` C[g 0 \*^  0LDIE F &ONSIERNVCOY TREN 7S* MA.=: UFMBNA ******************************************************************** ; OLMBSYD NEFIDEUNR FOD LSN IOTSLT EX;N 0 D OR.W E:YMUS T EX TINT LO SENOPT ENRRCUO TERNTOI;P 0 D OR.W: TRTPTX T EX TNTDESIREF OINEG BATC PNTREUR;C 0 D OR.W: RGTOTX T EX TNTREUR CINA AT DOFT UNCOE YT;B 0 D OR.W C:TBTX UTTPOUT EX TERFT AOWFLT ECIR DTOD SE UCHWI;S 0 : CHWITS R TOEC SERILRA TALTINI IOFE AV;S 0 D OR.W: SVSCTR " PC ;CURRENT PROGRAM SIZE PTROBJ: .WORD 0 ;POINTER TO CURRENT OBJ MOD ENTRY IN LSD PTR1.0: .WORD 0 ;POINTER FOR DETECTING ONE-ZERO SEQUENC PTSECT: .WORD 0 ;POINTER TO CURRENT SECTION NAME IN LSD SECTCT: .WORD 0 ;SECTOR COUNTER WHEN READING IN A MODULE SYME: .WORD 0 ;NEXT OPENING IN LSD FOR DEFINED SYMBOL TRAILPOINTER: .WORD 0 ;NEXT SPACE IN TRAILER BLOCK TRAPC: .WORD 0 ;TRAILER "0,0,0,0,0 .BYTE '>,HT SECVAL: .BYTE 0,0,0,0,0,0,HT SECSIZ: .BYTE 0,0,0,0,0,0,HT CUMSIZ: .BYTE 0,0,0,0,0,0 END04: .EVEN ; ******************************************************************** ENTRY: .WORD END05-4-. .WORD 0 .BYTE HT MFLAG: .BYTE 0 ;PLACE TO PUT POSSIBLE "M" FLAG GLOBAL: .BYTE 0,0,0,0,0,0,' GLBVAL: .BYTE 0,0,0,0,0,0 END05: .EVEN .PAGE UNDHED: .WORD END06-4-. .WORD 0 .ASC