; UPDATE 1 TO THE QUICK AND DIRTY PF - ITS STILL WITH USE. 6/21/72 .TITLE PFTRAP .REF TTICSR,TTIDBR,ERRTYP,PUSHR,POPR,IPL,STACK .DEF PFSIPL PFSIPL =. MOV #PFAIL,@#24 MOV #340,@#26 MOV #1,PFMES RTS PC PFAIL =. MOV #AUTO,@#24 MOV SP,SP1 CMP SP,STACK BLOS PF05 MOV STACK,SP PF05: JSR R5,PUSHR INC PFCNT MOV #TTICSR,R0 ; UPDATE 3 17 DEC 1971 OFF IDTASK.004 ; UPDATE 2 14 DEC 1971 OFF IDTASK.003 ; UPDATE 1 8 DEC 71 OFF IDTASK.002 .TITLE IDTASK ; QUEUE =1. ; SUSPND =2. ; UNSPND =3. ; EXIT =4. ; FRETSK =5. ; ABORT =6. ; TTYOUT =11. ; RES =50. ; SETS SIZE OF TASK STACKS .P; UPDATE 1 16 MAR 1972 FIX ERROR MESSAGE .TITLE PSTRAP ; PSTP ;***********************************************************************PSTP ; P S T R A P *PSTP ; *PSTP ; PROGRAM IDENTIFICATION: PSTRAP *PSTP ; ; UPDATE: 16-JUN-72 ROSLOD.S72 ; ORIGIN: 11-MAY-72 ROSLOD.S71 ; ******************************************************************** ; * * ; * ****************** 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 * ; * "MXOBJ" OBJECT MODULES WHICH ARE STORED IN THE PF10: MOV @(R0)+,-(SP) CMP R0,#TTIDBR BLO PF10 .IFNZ $CORAL ; ONLY IF HAVE B3 CORE ALLOCATOR MOV #162020,R0 MOV (R0)+,-(SP) MOV (R0)+,-(SP) MOV (R0) ,-(SP) MOV #162040,R0 PF15: MOV (R0)+,-(SP) CMP R0,#162076 BLOS PF15 .ENDC MOV SP,SP2 PF20: HALT BR PF20 AUTO =. MOV #PFAIL,@#24 MOV SP2, AGE .DEF IDTASK ; .REF HEADER,TPRTY,TASKS,TSTAT; IDTASK =. ; SET UP HEADER AND TPRTY FOR 10 TASKS MOV #1,R2 ; PUT A 1 IN HERE FOR USE BELOW MOV #NOTASK,R0 ; GET NUMBER OF TASKS TO DOO MOV #TASKS,R1 ; UPDATE IF NECESSARY THE CURRENT MAX CMP R0,(R1) ; TASK NUMBER IN THE SYSTEM. BLOS IDT01 ; MOV R0,(R1) ; IDT01: CMP (R *PSTP ; PURPOSE: PROVIDES HANDLING OF THE UNUSED PROCESSOR TRAPS: *PSTP ; BUS ERROR TRAP ( 4) *PSTP ; RESERVED INSTRUCTION TRAP (10) *PSTP ; TRACE TRAP (20) *PSTP ; *PSTP ; USAGE: WHEN ONE OF THE UNUSED TRAPS IS ACTIVATED, CONTROL *PSTP ; IS PASSED TO TH BATCH FILE ON * ; * DISC.. "MXOBJ" IS A SYSGEN PARAMETER. 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. * ; * ALTHOUGH ALL SYMBOLS WITH ABSOLUTE VALUES, WHETHER BY VIRTUE OF* ; * APPEARING IN AN "ASECT" OR DUE TO AN ABSOLUTE EQUATE, WILL BE * ; * REFERENCED CORRECTLY, TEXT IN ABSOLUTE SECTIONS WILL NOT BE * ; * LOADED. THIS IS BECAUSE THE MODULES A SP .IFNZ $CORAL ; ONLY IF HAVE B3 CORE ALLOCATOR MOV #162100,R0 AU05: MOV (SP)+,-(R0) CMP R0,#162040 BHI AU05 MOV #162026,R0 MOV (SP)+,-(R0) MOV (SP)+,-(R0) MOV (SP)+,-(R0) .ENDC MOV #TTIDBR,R0 AU10: MOV (SP)+,@-(R0) CMP R0,#TTICSR BHI AU10 MOV @SP1,PFMES+4 MOV PFCNT,PFMES+6 MOV #PFMES,-(SP)1),#TASMAX ; TO MANY TASKS IN SYSTEM? BLE IDT05 ; BRANCH IF OK. HALT ; BAD BAD IDT05: MOV #NOTASK+NOTASK,R1 ; IDT10: MOV TASKAD-2(R1),HEADER(R1) ; SET HEADER ADDRESS IN TABLE MOV R2,@HEADER(R1) ; INSURE THAT ALL THREAD WORDS ARE 1 MOV R2,@LISTAD(R1) ; MAKE SURE ALL I/O THREAD WORDS OK. MOVB TASKPY-1(R0),TPRTY(R0) ; SET TASK'S PRIORITY LEVEL CLRB TSTAT(R0) ; SET TASKS ASE ENTRY POINT 'PSTRAP' WHERE THE ERROR *PSTP ; IS PROCESSED. THE TRANSFER IS ACCOMPOLISHED BY *PSTP ; PLACING 'PSTRAP'S' ADDRESS IN THE TRAP AT SYSTEM *PSTP ; INITALIZATION VIA THE ENTRY POINT 'PSTIPL'. THE *PSTP ; LINKAGE IS: *PSTP ; *PSTP ; PSTIPL - JSR PC,PSTIPL *PSRE RUN-TIME RELOCATABLE, * ; * AND NO GUARANTEE CAN BE MADE THAT THE SPECIFIED MEMORY * ; * LOCATIONS WILL BE FREE AT LOAD TIME. * ; * "CSECTS", BOTH BLANK AND NAMED, ARE 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) * ; * EXPRESSED AS A RELATIVE OFFSET FROM THE BASE OF THE LOAD MODULE* ; * OBVIOUSLY, THE ABSOLUTE LOAD V JSR PC,ERRTYP MOV #STLBIT!TIMBIT!TODBIT,@#CLKENB ; TURN ON THE CLOCKS MOV #200,@#165400 ; RESET THE PUSHBUTTON BR AU20 ; NEVER USE IPL CMP @#177570,#177777 BNE AU20 JMP IPL AU20: JSR R5,POPR MOV SP1,SP RTI PFCNT: .WORD 0 SP1: .WORD 0 SP2: .WORD 0 PFMES: .WORD 1,91.,0,0,0,0 .END  READY TST -(R1) ; DECREMENT WORD POINTER DEC R0 ; DECREMENT BYTE POINTER CMP R0,R2 ; IS INDEX DOWN TO 1 YET? WE DON'T DO IT BNE IDT10 ; LOOP FOR MORE RTS PC ; GO HOME TASKAD: .WORD 0 ; TASK 1 NOT HERE .WORD HEAD2 ; .WORD HEAD3 ; .WORD HEAD4 ; .WORD HEAD5 ; .WORD HEADTP ; *PSTP ; PSTRAP - TRAP VIA LOCATION 4, 10, OR 20. *PSTP ; *PSTP ; PSTP ; THE SYSGEN PARAMETER '$PST' IS USED TO CONTROL ROS HANDLING OF PSTP ; A PROCESSOR TRAP VIA EITHER AN ERROR TRAP(4 & 10) OR AN UNUSED PSTP ; TRAP(20). ALUES 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, AND MULTIPLE GLOBAL * ; * SYMBOL DEFINITIONS WILL BE FLAGGED WITH AN "M". * ; * WHEN LOADING TASKS, "ROSLOD" UPDATES THE MONITOR'S TASK TABLES * ; * TO ALLOW THE NEW PROGRAM TO BE QUEUED AND EXECUTED. * ; * FURTURE RELEASES OF "R; UPDATE 6/22/72 CORLOD.S04 ; UPDATE 05-MAY-72 CORLOD.S03 ; UPDATE 5/5/72 CORLOD.S02 ; UPDATE 5/3/72 CORLOD.S01 .TITLE CORLOD .IFNZ $BATCH ;*********************************************************************** ;* * ;* USED BY LOADER TO LINK OVERLAY TASKS WITH RESIDENT * ;* CORE LOCATIONS. 6 ; .WORD HEAD7 ; .WORD HEAD8 ; .WORD HEAD9 ; .WORD HEAD10 ; .WORD HEAD11 ; .WORD HEAD12 ; LISTAD: .WORD 0 ; LIST FOR TASK 1 .WORD LIST2 ; .WORD LIST3 ; .WORD LIST4 ; .WORD LIST5 ; .WORD LIST6 ; .WORD LIST7 ; .W PSTP ; IT IS ONLY EVALUATED IF THE TRAP OCCURES FROM A TASK. IN THAT PSTP ; CASE, IF $PST=1, A JSR PC,UPST WILL BE EXECUTED. NO OTHER PSTP ; ACTION WILL BE TAKEN. IF $DST=0, THE STANDARD ROS PROCEEDURE PSTP ; WILL BE FOLLOWED. IF $PST=-1, THE STANDARD ROS PROCEEDURE WILL PSTP ; BE FOLLOWED AFTER WHICH, A JSR PC,UPST WILL BE EXECUTED. PSTP ; THE PS WILL BE AT THE LEVEL PRIOR TO THE TRAP WHEN THE JSR PSTP ; OSLOD" WILL ALLOW LIBRARY SEARCHES AND * ; * * ; * VERSION:007.001 * ; * DATE: 11-MAY-72 * ; * PROGRAMMER: 52 * ; * * ; ******************************************************************** .TITLE ROSL * ;* * ;*********************************************************************** ; .DEF CORLOD,CORTBL .REF TSTAT,GTIME,GDATE,SDATE,STIME,TASKS,HEADER .REF IFD,DOD,FSTAT,PHYDEV,NODREQ,CMPTMR .REF CPRSIP,FINIT,PFRITE,FILE .REF CDSRCH,CDILST,DQFRST,DQLAST,NDPRTY,HPRIRQ,CALLED .REF DIHA50,FMFRST,FMLAST,FNEXT,AULIST,DIOA65,IOSTAT .REF NOFMRQ,FMACTV,ORD LIST8 ; .WORD LIST9 ; .WORD LIST10 ; .WORD LIST10 ; LIST 11 AND 12 DON'T EXIST .WORD LIST10 ; TASKPY: .BYTE 0 ; .BYTE 1 ; .BYTE 2 ; .BYTE 2 ; .BYTE 2 ; .BYTE 2 ; .BYTE 1 ; .BYTE 3 ; .BYTE 3  IS EXECUTED. PSTP ; *PSTP ; PROGRAMMER: 53 *PSTP ; VERSION: 0 *PSTP ; CATALOGUE NUMBER: *PSTP ; *PSTP ;*******************************************OD .DEF LODHED .REF PPTAB,TASKS,TPRTY,TSTAT,IOSTAT,HEADER,BSIZE,IFD .REF PFRITE,$TKFLS ;SECONDARY INPUT PARAMETERS: ; TASMAX,NPRIOR,OVTMIN,MAXID1,NDISCS,$SYSFL,$OVTYP,ARG,$BCHID ; $LSDSZ,$MXOBJ,$PS001 THRU $PS016,PRIP01 THRU PRIP16 ; $RLDNO,PRIBKG .PAGE ; THE FOLLOWING DEFINE MEANINGS OF BITS IN LOWER "FLAG BYTE": DBLDEF = 4 ;SINGLE/MULTIPLE DEFINITION (0/1) UNDEF = 10 ;UNDEFINED/DFLMB00,COMPID .REF $TKFLS,TPRTY,PUSHR,POPR,BSIZE,PPTAB .REF CRDON,LPON,CRDOFF,LPOFF,LOGMAX ; .PAGE CORLOD = . MOV (SP),-(SP) MOV #CORTBL,2.(SP) ; PUT ADDRESS ON STACK FOR ROSLOD RTS PC ; CORTBL = . .RAD50 /TST/ .RAD50 /AT / .WORD TSTAT .RAD50 /GTI/ .RAD50 /ME / .WORD GTIME .RAD50 /GDA/ .RAD50 /TE / .WORD GDAT ; .BYTE 3 ; .BYTE 7. ; .BYTE 8. ; NOTASK =.-TASKPY ; NUMBER OF TASK TO SET UP FOR .EVEN .PAGE .CSECT TASK2 ; HEAD2 =. ; .WORD 1 ; THREAD WORD .WORD EN2 ; ENTRY POINT .WORD 0 ; INITIAL ENTRY POUNT .WORD 0 ; MAX TIME .BYTE RES ****************************PSTP .PAGE PSTP .DEF PSTIPL ; PSTP ; PSTP PSTIPL =. ; INITLAZATION ENTRY POINT PSTP MOV #PSTRAP,R0 ; GET ADDRESS OF TRAP HANDLER. PSTP MOV #4,R2 ; GET ADDRESS OF FIRST TRAP PSTP EFINED (0/1) ABSREL = 40 ;ABSOLUTE/RELATIVE (0/1) INTGLB = 100 ;INTERNAL/GLOBAL TXTCMD = 3 ;COMMAND TO BEGIN A TEXT BLOCK RLDCMD = 4 ;COMMAND FOR " RLD" BLOCK MODEND = 6 ;MODULE END COMMAND PCMD1 = 7 ;RLD COMMAND TO SET PC PCMD2 = 10 ;RLD COMMAND TO BUMP CURRENT PC ; FOLLOWING ARE ENTRY-TYPE COMMANDS: OBJMN = 0 ;OBJECT MO!E .RAD50 /SDA/ .RAD50 /TE / .WORD SDATE .RAD50 /STI/ .RAD50 /ME / .WORD STIME .RAD50 /TAS/ .RAD50 /KS / .WORD TASKS .RAD50 /HEA/ .RAD50 /DER/ .WORD HEADER .RAD50 /IFD/ .RAD50 / / .WORD IFD .RAD50 /DOD/ .RAD50 / / .WORD DOD .RAD50 /FST/ .RAD50 /AT / .WORD FSTAT " ; ST SIZE .BYTE 1 ; PRIORTY .WORD 0 ; CURRENT TIMER .IFNZ ARG ; .WORD 0 ; PASSED ARGUMENT .ENDC .BYTE 0 ; CPU STATUS .BYTE 2 ; TASK NUMBER .WORD 0 ; STACK POINTER .=.+RES+RES ; TASK STACK AREA LIST2 =. ; .WORD 1 ; TREAD WORD .BYTE 0 #MOV #340,R3 ; PUT BASIC CPU LEVEL IN R3 PSTP PSTI10: MOV R0,(R2)+ ; SET ADDRES FOR TRANSFER PSTP INC R3 ; INC CPU TO GET CODE PSTP MOV R3,(R2)+ ; SET TRAP CPU LEVEL PSTP CMP R2,#36 ; DONE YET? PSTP BLO PSTI10 ; NO. PSTP CLR $PSTCT ; CLEAR THE COUNTE$DULE NAME SECTN = 1 ;SECTION NAME GENTRY = 4 ;GLOBAL ENTRY POINT DECLARATION ; FOLLOWING ARE OFFSET VALUES FOR WORDS WITHIN ENTRIES FLAGS = 4 ;DESCRIPTOR FLAGS VALR = 6 ;SYMBOL'S RELATIVE VALUE BASE = 8. ;SECTION'S BASE (OFFSET FROM LOAD BASE) VALF = 8. ;SYMBOL'S FINAL VALUE (OFFSET FROM LOAD BASE) ; FOLLOWING ARE EMT INDICES FOR THE "BFUP" ROUTINES BFIN% .RAD50 /PHY/ .RAD50 /DEV/ .WORD PHYDEV .RAD50 /NOD/ .RAD50 /REQ/ .WORD NODREQ .RAD50 /CMP/ .RAD50 /TMR/ .WORD CMPTMR .RAD50 /CPR/ .RAD50 /SIP/ .WORD CPRSIP .RAD50 /FIN/ .RAD50 /IT / .WORD FINIT .RAD50 /PFR/ .RAD50 /ITE/ .WORD PFRITE .RAD50 /FIL/ .RAD50 /E / .WORD FILE .RAD50& ; DEVICE (TTY) .BYTE 2 ; EXIT TYPE .WORD 0 ; .BYTE 0 ; ERROR RETURN TASK NUMBER .BYTE 0 ; I/O PRIORITY LEVEL .WORD 0,0 ; RESERVED .WORD DATA2 ; BUFFER ADD DATA2 =. ; .WORD 12. ; NO. CHARACTERS IN MESSAGE .WORD 0 ; RESERVED .ASCII /TASK / ; .ASCII 'R USED FOR # OF TRAPS PSTP MOV #1,R0 ; PUT A 1 IN REG FOR RESETTING I/O PSTP MOV R0,PSMES1 ; THREAD WORDS. PSTP MOV R0,PSMES2 ; PSTP RTS PC ; RETURN TO CALLER PSTP .PAGE PSTP .DEF $PSTCT,$OLDPS,$PCSAV,$TCODE ; PSTP .REF (IT = 36 BFENTR = 37 BFOPEN = 40 BFCLOS = 41 ; FOLLOWING ARE MISCELLANEOUS DEFINITIONS BTCHID = $BCHID ;BATCH FILE I.D. BPSYM = 10. ;NUMBER OF BYTES PER SYMBOL ENTRY GSDMAX = 4 ;MAX GSD COMMAND ALLOWED HT = 11 ;HORIZONTAL TAB LF = 12 ;LINE FEED FF = 14 ;FORM FEED CR = 15 ;CARRIAGE RETURN EXIT = 4 ) /CDS/ .RAD50 /RCH/ .WORD CDSRCH .RAD50 /CDI/ .RAD50 /LST/ .WORD CDILST .RAD50 /DQF/ .RAD50 /RST/ .WORD DQFRST .RAD50 /DQL/ .RAD50 /AST/ .WORD DQLAST .RAD50 /NDP/ .RAD50 /RTY/ .WORD NDPRTY .RAD50 /HPR/ .RAD50 /IRQ/ .WORD HPRIRQ .RAD50 /CAL/ .RAD50 /LED/ .WORD CALLED .RAD50 /DIH*/# 2/ ; .BYTE 40,15 ; ; EN2 =. ; MOV #LIST2,-(SP) ; EMT TTYOUT ; GO PRINT MESSAGE EMT EXIT ; .PAGE .CSECT TASK3 ; HEAD3 =. ; .WORD 1 ; THREAD WORD .WORD EN3 ; ENTRY POUNT .WORD 0 ; INITIAL ENTRY POUNT .WORD 0 ; MAX TIME+ ACTIVE,DSPTCH ; PSTP .IFLE $PST ; INCLUDE IFF ROS TRAP HANDLER USED. PSTP .REF $CTASK,LERTYP,ABORT ; PSTP .ENDC PSTP .IFNZ $PST ; INCLUDE IFF USER TRAP HANDLER USED. PSTP .REF UPST ; REFERENCE THE ENTRY POINT PSTP .ENDC , ;EMT FOR CALL TO MONITOR EXIT TTYOUT = 13 ;EMT FOR CALL TO TELETYPE OUTPUT TTYIN = 14 ;EMT FOR TELETYPE INPUT BINASC = 16 ;EMT FOR BINARY-TO-ASCII DISCIO = 23 ;EMT FOR DISC I/O ROUTINE LPRNTR = 25 ;EMT FOR LINE PRINTER NOCKPT = 30 ;EMT FOR NO CHECKPOINT ROUTINE GETIME = 31 ;EMT FOR GET TIME GEDATE = 32 ;EMT FOR GET DATE -/ .RAD50 /A50/ .WORD DIHA50 .RAD50 /FMF/ .RAD50 /RST/ .WORD FMFRST .RAD50 /FML/ .RAD50 /AST/ .WORD FMLAST .RAD50 /FNE/ .RAD50 /XT / .WORD FNEXT .RAD50 /AUL/ .RAD50 /IST/ .WORD AULIST .RAD50 /DIO/ .RAD50 /A65/ .WORD DIOA65 .RAD50 /IOS/ .RAD50 /TAT/ .WORD IOSTAT .RAD50 /NOF/ . .BYTE RES ; ST SIZE .BYTE 2 ; PRIORTY .WORD 0 ; CURRENT TIMER .IFNZ ARG ; .WORD 0 ; PASSED ARGUMENT .ENDC .BYTE 0 ; CPU STATUS .BYTE 3 ; TASK NUMBER .WORD 0 ; STACK POINTER .=.+RES+RES ; TASK STACK AREA LIST3 =. ; .WORD 1 ; / PSTP PSTRAP =. ; TRAP ENTRY POINT PSTP MOV @#PS,$TCODE ; GET NEW PS PSTP BIC #177740,$TCODE ; LEAVE JUST CONDITION CODES. PSTP MOV (SP)+,$PCSAV ; GET PC OF TRAP (BEFORE) PSTP MOV (SP)+,$OLDPS ; GET PS OF TRAP (BEFORE) PSTP INC $PSTCT ; COUNT NUMBER OF TRAPS. PSTP TST ACTI0R50PAK = 46 ;EMT FOR RADIX-50 PACK ROUTINE R50UNP = 47 ;EMT FOR RADIX-50 UNPACK DEFINE = 51 ;EMT FOR "DEFINE FILE" DELETE = 52 ;EMT FOR "DELETE FILE" CORLOD = 56 ;EMT TO GET ADDR OF MONTOR REF TABLE STSIZE = 100. ;STACK SIZE (WORDS) PHDSZE = 15. ;"PROGRAM HEADER SIZE": # OF WORDS LEDWDS = 3 ;# WDS INSERTED IN FRONT OF PROGRAM BY LOADER LDBYTS = 1 .RAD50 /MRQ/ .WORD NOFMRQ .RAD50 /FMA/ .RAD50 /CTV/ .WORD FMACTV .RAD50 /FLM/ .RAD50 /B00/ .WORD FLMB00 .RAD50 /COM/ .RAD50 /PID/ .WORD COMPID .RAD50 /$TK/ .RAD50 /FLS/ .WORD $TKFLS .RAD50 /TPR/ .RAD50 /TY / .WORD TPRTY .RAD50 /PUS/ .RAD50 /HR / .WORD PUSHR .RAD50 /POP/ 2TREAD WORD .BYTE 0 ; DEVICE (TTY) .BYTE 2 ; EXIT TYPE .WORD 0 ; .BYTE 0 ; ERROR RETURN TASK NUMBER .BYTE 0 ; I/O PRIORITY LEVEL .WORD 0,0 ; RESERVED .WORD DATA3 ; BUFFER ADD DATA3 =. ; .WORD 12. ; NO. CHARACTERS IN MESSAGE .WORD 0 ; RESERVED .ASCII /TASK 3VE ; TASK OR ROS? PSTP BNE PSTB00 ; BRANCH IF TASK PSTP PSHALT: HALT ; HALT IF ROS SINCE ROS IS, BY PSTP BR PSHALT ; DEFINITION, ERROR FREE. PSTP PSTB00 =. ; HERE IF A TASK. PSTP .IFLE $PST ; INCLUDE IFF ROS TRAP HANDLER USED. PSTP MOV $CTASK,-(SP) ; PUSH TASK# ON STACK FOR ABOR4 LEDWDS*2 ;(# BYTES INSERTED) .PAGE ;FOLLOWING ARE INDEX VALUES TO THE TASK HEADER HMAXEQ = 6 ;TASK MAX EXECUTION TIME WORD HPRIOR = 9. ;TASK PRIORITY WORD HSTATS = ARG*2+14 ;HEADER STATUS BYTE HTASK = HSTATS+1 ;HEADER TASK NUMBER BYTE HSTACK = HTASK+1 ;TASK STACK WORD ; PROGRAM HEADER LODHED: ;HEADER FOR "ROSLOD" .WORD 1 ;T/W .WORD LODA5.RAD50 /R / .WORD POPR .RAD50 /BSI/ .RAD50 /ZE / .WORD BSIZE .RAD50 /PPT/ .RAD50 /AB / .WORD PPTAB .RAD50 /CRD/ .RAD50 /ON / .WORD CRDON .RAD50 /LPO/ .RAD50 /N / .WORD LPON .RAD50 /CRD/ .RAD50 /OFF/ .WORD CRDOFF .RAD50 /LPO/ .RAD50 /FF / .WORD LPOFF .RAD50 /LOG/ .RAD50 /M6 / ; .ASCII /# 3/ ; .BYTE 40,15 ; ; EN3 =. ; MOV #LIST3,-(SP) ; EMT TTYOUT ; GO PRINT MESSAGE MOV #2,-(SP) ; QUEUE TASK 2 .IFNZ DPRTY ; ONLY IF WE HAVE DYNAMIC PRIORITIES CLR -(SP) ; .ENDC .IFNZ ARG ; ONLY IF WE HAVE AN ARGUMENT PASSED. CLR -(SP) ; .ENDC 7T PSTP JSR PC,ABORT ; ABORT THE TASK. PSTP MOV #PSMES1,R2 ; THEN NEED TO SET UP MESSAGES, IF ANY.PSTP CMP (R2),#1 ; BLOCK #1 FREE? PSTP BEQ PSTB10 ; YES. PSTP MOV #PSMES2,R2 ; NO. IS BLOCK #2 FREE? PSTP CMP (R2),#1 ; PSTP BNE PSTC00 G00 ;BEGIN OF LOADER .WORD 0 ;INIT .WORD 0 ;MAX XEQ .BYTE STSIZE ;STACK SIZE (WORDS) .BYTE PRIBKG ;PRIORITY .WORD 0 ;TIMER .WORD 0 ;ARG .BYTE $OVTYP ;STATUS (INIT W/ FILE TYPE .BYTE $RLDNO ;TASK NUMBER .WORD 0 ;STACK .WORD 201 ;INIT BOTTOM OF STACK W/FILE I.D. AX/ .WORD LOGMAX ; ; .WORD -1. ; END OF TABLE ; .ENDC .END E CLR -(SP) ; EMT QUEUE ; TST (SP)+ ; EMT EXIT ; .PAGE .CSECT TASK4 ; HEAD4 =. ; .WORD 1 ; THREAD WORD .WORD EN4 ; ENTRY POINT .WORD 0 ; INITIAL ENTRY POUNT .WORD 0 ; MAX TIME .BYTE RES ; ST SIZE .BYTE 2 F ; NO. PSTP PSTB10: CLR -(SP) ; SET CPU LEVEL FOR 'LERTYP' TO RETURN PSTP MOV R2,-(SP) ; TO. ALSO PUSH ADDRESS OF MODULE. PSTP CMP (R2)+,(R2)+ ; MOVE R2 TO ARG #1 OF ERROR MODULE PSTP MOVB $CTASK,(R2)+ ; PUT TASK # IN FIRST ARG. PSTP CLRB (R2)+ ; CLEAR UPPER BYTE PSTP MOV $TCODE,(R2)+ ; PUT ERROR CODE IN SECOND ARG. ""DDDDDDD """"""""""""""@DD"""""ADDB CepP} 8C S8+ gpP8Zr\M|}B*\M{} 5epQHXL,$Da ͋,L w:B8 ` 5 &  E >w   f5eU@  [*   & * G &( 8L'4e Q$ BBB"   U@ U e  "U%Gef. U U Bb 0 * B.&0 M &0 & I; PRIORTY .WORD 0 ; CURRENT TIMER .IFNZ ARG ; .WORD 0 ; PASSED ARGUMENT .ENDC .BYTE 0 ; CPU STATUS .BYTE 4 ; TASK NUMBER .WORD 0 ; STACK POINTER .=.+RES+RES ; TASK STACK AREA LIST4 =. ; .WORD 1 ; TREAD WORD .BYTE 0 ; DEVICE (TTY) .BYTE 2 J PSTP MOV $PCSAV,(R2)+ ; PUT ADDRESS OF TRAP IN THIRD ARG. PSTP MOV $PSTCT,(R2) ; PUT # OF ERRORS IN FOURTH ARG. PSTP JSR PC,LERTYP ; PSTP PSTC00 =. ; HERE WHEN MESSAGE, IF ANY, IS DONE. PSTP .ENDC PSTP .IFNZ $PST ; INCLUDE IFF USER TRAP HANDLER USED. PSTP .IFG $PST K.=STSIZE*2+.-2 .PAGE ;FIRST PRINT IDENTIFICATION ON TTY TO OPEN DIALOGUE: LODA00: ;TASK BEGIN FOR THE LOADER EMT NOCKPT ;SET TASK NON-CHECKPOINTABLE MOV #$BCHID,BFBLK1+2 ;INIT BATCH I.D. FILE MOV #$BCHID,TXTHED ;INIT IN CASE RE-RUN MOV #400,BFSTAT ;SET TO "TYPE" = LOAD MODULE MOV #LODNAM,-(SP) ;WILL CONVERT ASCII OF LOAD ELEMENT NAME MOV #BFNAME,-(SP) ;TO RAD50 FOR "BFUP" CALL EML; UPDATE 2 TO PFTRAP 6/26/72 IGNOR TO FAST INTERRUPTS ; UPDATE 1 TO THE QUICK AND DIRTY PF - ITS STILL WITH USE. 6/21/72 .TITLE PFTRAP .REF TTICSR,TTIDBR,ERRTYP,PUSHR,POPR,IPL,STACK .DEF PFSIPL PFSIPL =. MOV #PFAIL,@#24 MOV #340,@#26 MOV #1,PFMES RTS PC PFAIL =. MOV #PFRTI,@#24 MOV SP,SP1 CMP SP,STACK BLOS PF05 MOV STACK,SP PF05: JSM ; EXIT TYPE .WORD 0 ; .BYTE 0 ; ERROR RETURN TASK NUMBER .BYTE 0 ; I/O PRIORITY LEVEL .WORD 0,0 ; RESERVED .WORD DATA4 ; BUFFER ADD DATA4 =. ; .WORD 12. ; NO. CHARACTERS IN MESSAGE .WORD 0 ; RESERVED .ASCII /TASK / ; .ASCII /# 4/ ; .BYTE 40,15 N; ONLY INCLUDE IF ONLY USER ROUTINE PSTP TST (SP)+ ; GET RID OF PC FROM STACK PSTP MOVB (SP)+,@#PS ; RESET CPU LEVEL TO THAT BEFORE TRAP PSTP .ENDC PSTP JSR PC,UPST ; TRANSFER TO THE USERS ROUTINE PSTP .ENDC PSTP JMP DSPTCH ; FINALLY FINISH UP. PSOT R50PAK MOV #BFBLK1,-(SP) EMT BFCLOS ;CLOSE IN CASE IT WAS LEFT OPEN MOV #IDMSG,TTYBUF ;INIT FOR INITIAL I.D. MESSAGE MOV #TTYLST,-(SP) EMT TTYOUT ;PRINT ON TTY ; NOW INPUT COMMAND STRING MOV #ASCDAT,TTYBUF ;INIT FOR INPUT OF COMMAND STRING MOV #TTYLST,-(SP) EMT TTYIN ;INPUT ENTIRE COMMAND STRING MOV #ASCDAT+4-1,R0 ;INIT POINTER TO NAMES BUFFER PR R5,PUSHR INC PFCNT MOV #TTICSR,R0 PF10: MOV @(R0)+,-(SP) CMP R0,#TTIDBR BLO PF10 .IFNZ $CORAL ; ONLY IF HAVE B3 CORE ALLOCATOR MOV #162020,R0 MOV (R0)+,-(SP) MOV (R0)+,-(SP) MOV (R0) ,-(SP) MOV #162040,R0 PF15: MOV (R0)+,-(SP) CMP R0,#162076 BLOS PF15 .ENDC MOV SP,SP2 MOV #AUTO,@#24 PFQ ; ; EN4 =. ; MOV #LIST4,-(SP) ; EMT TTYOUT ; GO PRINT MESSAGE MOV #2,-(SP) ; QUEUE TASK 2 .IFNZ DPRTY ; ONLY IF WE HAVE DYNAMIC PRIORITIES CLR -(SP) ; .ENDC .IFNZ ARG ; ONLY IF WE HAVE AN ARGUMENT PASSED. CLR -(SP) ; .ENDC MOV #1,-(SP) ; EMT QUEUE ; RTP .IFLE $PST ; INCLUDE IFF ROS TRAP HANDLER USED. PSTP PSMES1: .WORD 1 ; ERROR BLOCK #1. THREAD WORD. PSTP .WORD 90. ; ERROR NUMBER PSTP .WORD 0,0,0,0 ; FOUR ARGUMENTS PSTP PSMES2: .WORD 1 ; ERROR BLOCK #2. THREAD WORD PSTP .WORD 90. ; ERROR NUMBER PSTP .WORD 0,0,0,0 ; FOURS MOV #NAMBUF,R1 ;FILL W/RAD50 FORMS OF MODULE NAMES MOV INPCNT,R2 ;ACTUAL # OF CHARS RECEIVED BNE LODA10 EMT EXIT ;MUST TYPE AT LEAST ONE CHAR .PAGE LODA10: MOV #TMPBUF+6,R3 ;POINTER TO TMPY BFR FOR CONVERSION MOV #" ,-(R3) ;CLEAR BFR W/ BLANKS MOV #" ,-(R3) MOV #" ,-(R3) LODA20: INC R0 ;BUMP LIST POINTER TO NEXT CHAR DEC R2 T20: HALT BR PF20 AUTO =. MOV #PFRTI,@#24 MOV SP2,SP .IFNZ $CORAL ; ONLY IF HAVE B3 CORE ALLOCATOR MOV #162100,R0 AU05: MOV (SP)+,-(R0) CMP R0,#162040 BHI AU05 MOV #162026,R0 MOV (SP)+,-(R0) MOV (SP)+,-(R0) MOV (SP)+,-(R0) .ENDC MOV #TTIDBR,R0 AU10: MOV (SP)+,@-(R0) CMP R0,#TTICSR BHI UTST (SP)+ ; MOV #2,-(SP) ; EMT ABORT ; BR EN4 ; .PAGE .CSECT TASK5 ; HEAD5 =. ; .WORD 1 ; THREAD WORD .WORD EN5 ; ENTRY POINT .WORD 0 ; INITIAL ENTRY POUNT .WORD 0 ; MAX TIME .BYTE RES ; ST SIZE .BYTE 2 ; PRIOV ARGUMENTS PSTP .ENDC PSTP $PSTCT: .WORD 0 ; TOTAL NUMBER OF TRAPS PSTP $OLDPS: .WORD 0 ; SAVE PS FROM BEFORE THE TRAP PSTP $PCSAV: .WORD 0 ; SAVE PC FROM BEFORE THE TRAP PSTP $TCODE: .WORD 0 ; TYPE OF TRAP. THE CODE IS: PSTP ; 1 = BUS ERROR (4) PSTP W ;ANY MORE CHARS? BLT LODA30 ;NO: GO TO FINAL CONVERSION OR TO EXIT CMPB (R0),#', ;COMMA ENDS FIELD BEQ LODA30 ;END OF FIELD CMP R3,#TMPBUF+5 ;TMP BUF FULL? (ONLY 1ST SIX CHARS USED) BHI LODA20 ;FULL: IGNORE REST OF CHARS TO COMMA MOVB (R0),(R3)+ ;XFER CHAR TO TMP BUF BR LODA20 .PAGE LODA30: MOV #TMPBUF,-(SP) MOV R1,-(SP) EMT XAU10 MOV @SP1,PFMES+4 MOV PFCNT,PFMES+6 MOV #PFMES,-(SP) JSR PC,ERRTYP MOV #STLBIT!TIMBIT!TODBIT,@#CLKENB ; TURN ON THE CLOCKS MOV #200,@#165400 ; RESET THE PUSHBUTTON BR AU20 ; NEVER USE IPL CMP @#177570,#177777 BNE AU20 JMP IPL AU20: JSR R5,POPR MOV SP1,SP MOV #PFAIL,@#24 PFRTI: RTI PFCNT: .WORD 0 SP1: .WORD YRTY .WORD 0 ; CURRENT TIMER .IFNZ ARG ; .WORD 0 ; PASSED ARGUMENT .ENDC .BYTE 0 ; CPU STATUS .BYTE 5 ; TASK NUMBER .WORD 0 ; STACK POINTER .=.+RES+RES ; TASK STACK AREA LIST5 =. ; .WORD 1 ; TREAD WORD .BYTE 0 ; DEVICE (TTY) .BYTE 2 Z ; 2 = RESERVED INSTRUSTION (10) PSTP ; 3 = DEBUG (14) PSTP ; 4 = IOT (20) PSTP ; 5 = POWER FAIL/RESTART (24) PSTP ; 6 = EMT (30) PSTP ; 7 = 'TRAP' (34) PSTP .END ; [ 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 ; ******************************************************************** ;"NAMBUF" STRUCTURE: NAME/NAME/START SECTOR/# OF SECTORS LODB10: 0 SP2: .WORD 0 PFMES: .WORD 1,91.,0,0,0,0 .END ] ; EXIT TYPE .WORD 0 ; .BYTE 0 ; ERROR RETURN TASK NUMBER .BYTE 0 ; I/O PRIORITY LEVEL .WORD 0,0 ; RESERVED .WORD DATA5 ; BUFFER ADD DATA5 =. ; .WORD 12. ; NO. CHARACTERS IN MESSAGE .WORD 0 ; RESERVED .ASCII /TASK / ; .ASCII /# 5/ ; .BYTE 40,15 ; PSTP _;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 CLR BFSTAT ;STATUS AND TYPE: FREE AND OBJECT MODULE LODB20: DEC R1 ;# NAMES BLT LODC10` ; FOLLOWING ARE MISCELLANEOUS DEFINITIONS BTCHID = $BCHID ;BATCH FILE I.D. BPSYM = 10. ;NUMBER OF BYTES PER SYMBOL ENTRY GSDMAX = 4 ;MAX GSD COMMAND ALLOWED HT = 11 ;HORIZONTAL TAB LF = 12 ;LINE FEED FF = 14 ;FORM FEED CR = 15 ;CARRIAGE RETURN EXIT = 4 ;EMT FOR CALL TO MONITOR EXIT TTYIN = 14 a ; EN5 =. ; MOV #LIST5,-(SP) ; EMT TTYOUT ; GO PRINT MESSAGE MOV #2,-(SP) ; QUEUE TASK 2 .IFNZ DPRTY ; ONLY IF WE HAVE DYNAMIC PRIORITIES CLR -(SP) ; .ENDC .IFNZ ARG ; ONLY IF WE HAVE AN ARGUMENT PASSED. CLR -(SP) ; .ENDC CLR -(SP) ; EMT QUEUE ; TST b; UPDATE 4-29-72(#2) ROSLOD.S56 ; UPDATE 4-29-72 ROSLOD ; UPDATE 4-28-72,(#2) ROSLOD ; UPADATE 4-28-72 ROSLOD ; UPDATE 4-27-72 ROSLOD ; ******************************************************************** ; * * ; * ****************** R O S L O D ******************* ; * THIS IS THE ON-LINE LINKING LOADER FOR THE "ROS II" SYSTEM * ; * TO Bc ;GOOD EXIT: ALL DONE MOV (R0)+,BFNAME ;LOAD LIST WITH NEXT REQUESTED NAME MOV (R0)+,BFNAME+2 MOV #BFBLK1,-(SP) EMT BFOPEN ;LOOK FOR MODULE AND OPEN IT TST BFBLK1 ;WAS IT THERE? BNE LDER11 ;NOT FOUND: ABORT MOV BFSECT,(R0)+ ;FILL LOADER'S LIST WITH SECTOR INFO MOV BFSIZE,(R0)+ BR LODB20 .PAGE LDER11: MOV #11,R4 ;"BFUP" DId ;EMT FOR TELETYPE INPUT TTYOUT = 13 ;EMT FOR CALL TO TELETYPE OUTPUT BINASC = 16 ;EMT FOR BINARY-TO-ASCII DISCIO = 23 ;EMT FOR DISC I/O ROUTINE LPRNTR = 25 ;EMT FOR LINE PRINTER GETIME = 31 ;EMT FOR GET TIME GEDATE = 32 ;EMT FOR GET DATE R50PAK = 46 ;EMT FOR RADIX-50 PACK ROUTINE R50UNP = 47 ;EMT FOR RADIX-50 UNPACK DEFINE = e (SP)+ ; BR EN5 ; .PAGE .CSECT TASK6 ; HEAD6 =. ; .WORD 1 ; THREAD WORD .WORD EN6 ; ENTRY POINT .WORD 0 ; INITIAL ENTRY POUNT .WORD 0 ; MAX TIME .BYTE RES ; ST SIZE .BYTE 2 ; PRIORTY .WORD 0 ; CURRENT TIMER .IFNZ ARG fE RUN ON THE PDP-11/20. THIS VERSION WILL LINK UP TO * ; * "MXOBJ" OBJECT MODULES WHICH ARE STORED IN THE BATCH FILE ON * ; * DISC.. "MXOBJ" IS A SYSGEN PARAMETER. 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. * ; * ALTHOUGH ALL SYMBOLS WITH ABSOLUTE VALUES, WHETHER BY VIRTUE OF* ; * APPEARING IN AN "ASECT" OR DUE TO AN ABSOLUTE EQUATE, WILL BE * ; gRECTORY SEARCH FAILURE JSR PC,ERRPRT ; ******************************************************************** 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 h51 ;EMT FOR "DEFINE FILE" DELETE = 52 ;EMT FOR "DELETE FILE" CORLOD = 56 ;EMT TO GET ADDR OF MONTOR REF TABLE STSIZE = 100. ;STACK SIZE (WORDS) PHDSZE = 30. ;"PROGRAM HEADER SIZE": # OF WORDS LEDWDS = 3 ;# WDS INSERTED IN FRONT OF PROGRAM BY LOADER LDBYTS = LEDWDS*2 ;(# BYTES INSERTED) ;FOLLOWING ARE INDEX VALUES TO THE TASK HEADER HMAXEQ = 6 ;TASK MAX EXECUTIOi ; .WORD 0 ; PASSED ARGUMENT .ENDC .BYTE 0 ; CPU STATUS .BYTE 6 ; TASK NUMBER .WORD 0 ; STACK POINTER .=.+RES+RES ; TASK STACK AREA LIST6 =. ; .WORD 1 ; TREAD WORD .BYTE 0 ; DEVICE (TTY) .BYTE 2 ; EXIT TYPE .WORD 0 ; .BYTE 0 j* REFERENCED CORRECTLY, TEXT IN ABSOLUTE SECTIONS WILL NOT BE * ; * LOADED. THIS IS BECAUSE THE MODULES ARE RUN-TIME RELOCATABLE, * ; * AND NO GUARANTEE CAN BE MADE THAT THE SPECIFIED MEMORY * ; * LOCATIONS WILL BE FREE AT LOAD TIME. * ; * "CSECTS", BOTH BLANK AND NAMED, ARE 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)kOBJECT MODULES JSR PC,NXTMOD ;INIT FOR NEXT OBJ MODULE 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 lN TIME WORD HPRIOR = 9. ;TASK PRIORITY WORD HSTATS = ARG*2+14 ;HEADER STATUS BYTE HTASK = HSTATS+1 ;HEADER TASK NUMBER BYTE HSTACK = HTASK+1 ;TASK STACK WORD ; PROGRAM HEADER LODHED: ;HEADER FOR "ROSLOD" .WORD 1 ;T/W .WORD LODA00 ;BEGIN OF LOADER .WORD 0 ;INIT .WORD 0 ;MAX XEQ .BYTE STSIZE ;STACK SIZE (WORm ; ERROR RETURN TASK NUMBER .BYTE 0 ; I/O PRIORITY LEVEL .WORD 0,0 ; RESERVED .WORD DATA6 ; BUFFER ADD DATA6 =. ; .WORD 12. ; NO. CHARACTERS IN MESSAGE .WORD 0 ; RESERVED .ASCII /TASK / ; .ASCII /# 6/ ; .BYTE 40,15 ; ; EN6 =. ; MOV #LIST6,-(SP) ; n * ; * 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, AND MULTIPLE GLOBAL * ; * SYMBOL DEFINITIONS WILL BE FLAGGED WITH AN "M". * ; * WHEN LOADING TASKS, "ROSLOD" UPDATES THE MONITOR'S TASo DEC (R0) ;IS THIS A GSD BLOCK? BEQ LODD15 ;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 pDS) .BYTE PRIBKG ;PRIORITY .WORD 0 ;TIMER .WORD 0 ;ARG .BYTE $OVTYP ;STATUS (INIT W/ FILE TYPE .BYTE $RLDNO ;TASK NUMBER .WORD 0 ;STACK .WORD 201 ;INIT BOTTOM OF STACK W/FILE I.D. .=STSIZE*2+.-2 .PAGE ;FIRST PRINT IDENTIFICATION ON TTY TO OPEN DIALOGUE: LODA00: ;TASK BEGIN FOR THE LOADER MOV #$BCHID,BFBLq EMT TTYOUT ; GO PRINT MESSAGE MOV #2,-(SP) ; QUEUE TASK 2 .IFNZ DPRTY ; ONLY IF WE HAVE DYNAMIC PRIORITIES CLR -(SP) ; .ENDC .IFNZ ARG ; ONLY IF WE HAVE AN ARGUMENT PASSED. CLR -(SP) ; .ENDC MOV #1,-(SP) ; EMT QUEUE ; TST (SP)+ ; BR EN6 ; .PAGrK TABLES * ; * TO ALLOW THE NEW PROGRAM TO BE QUEUED AND EXECUTED. * ; * FURTURE RELEASES OF "ROSLOD" WILL ALLOW LIBRARY SEARCHES AND * ; * * ; * VERSION:005.001 * ; * DATE: 24-APR-72 * ; * * ; **************************************************s LDER13 ;NOT GSD BEGIN TSTB FLAGS+3(R0) ;FIRST ENTRY'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 tK1+2 ;INIT BATCH I.D. FILE MOV #$BCHID,TXTHED ;INIT IN CASE RE-RUN MOV #400,BFSTAT ;SET TO "TYPE" = LOAD MODULE MOV #LODNAM,-(SP) ;WILL CONVERT ASCII OF LOAD ELEMENT NAME MOV #BFNAME,-(SP) ;TO RAD50 FOR "BFUP" CALL EMT R50PAK MOV #BFBLK1,-(SP) EMT BFCLOS ;CLOSE IN CASE IT WAS LEFT OPEN MOV #IDMSG,TTYBUF ;INIT FOR INITIAL I.D. MESSAGE MOV #TTYLST,-(SP) EMT uE .CSECT TASK7 ; HEAD7 =. ; .WORD 1 ; THREAD WORD .WORD EN7 ; ENTRY POINY .WORD 0 ; INITIAL ENTRY POUNT .WORD 0 ; MAX TIME .BYTE RES ; ST SIZE .BYTE 1 ; PRIORTY .WORD 0 ; CURRENT TIMER .IFNZ ARG ; .WORD 0 ; PASSED ARGUMENT .ENDv****************** .TITLE ROSLOD .DEF LODHED .REF PPTAB,TASKS,TPRTY,TSTAT,IOSTAT,HEADER,BSIZE,IFD ;SECONDARY INPUT PARAMETERS: ; TASMAX,NPRIOR,OVTMIN,MAXID1,NDISCS,$SYSFL,$OVTYP,ARG,$BCHID ; $LSDSZ,$MXOBJ,$PS001 THRU $PS016,PRIP01 THRU PRIP16 ; $RLDNO,PRIBKG .PAGE ; THE FOLLOWING DEFINE MEANINGS OF BITS IN LOWER "FLAG BYTE": DBLDEF = 4 ;SINGLE/MULTIPLE DEFINITION (0/1) UNDEF = 10 ;Uw ;NO MOV R0,R1 ;ENTRY POINTER ADD #8.,R0 ;NEXT ENTRY MOV R1,R4 ;SECONDARY POINTER USED BY VARIOUS RTNES ASL R2 ;BYTE INDEX TO WORD 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 (Ix TTYOUT ;PRINT ON TTY ; NOW INPUT COMMAND STRING MOV #ASCDAT,TTYBUF ;INIT FOR INPUT OF COMMAND STRING MOV #TTYLST,-(SP) EMT TTYIN ;INPUT ENTIRE COMMAND STRING MOV #ASCDAT+4-1,R0 ;INIT POINTER TO NAMES BUFFER MOV #NAMBUF,R1 ;FILL W/RAD50 FORMS OF MODULE NAMES MOV INPCNT,R2 ;ACTUAL # OF CHARS RECEIVED BNE LODA10 EMT EXIT ;MUST TYPE AT LEAST ONE CHAR yC .BYTE 0 ; CPU STATUS .BYTE 7 ; TASK NUMBER .WORD 0 ; STACK POINTER .=.+RES+RES ; TASK STACK AREA LIST7 =. ; .WORD 1 ; TREAD WORD .BYTE 0 ; DEVICE (TTY) .BYTE 2 ; EXIT TYPE .WORD 0 ; .BYTE 0 ; ERROR RETURN TASK NUMBER .BYTE 0 ; I/O zNDEFINED/DEFINED (0/1) ABSREL = 40 ;ABSOLUTE/RELATIVE (0/1) TXTCMD = 3 ;COMMAND TO BEGIN A TEXT BLOCK RLDCMD = 4 ;COMMAND FOR " RLD" BLOCK MODEND = 6 ;MODULE END COMMAND PCMD1 = 7 ;RLD COMMAND TO SET PC PCMD2 = 10 ;RLD COMMAND TO BUMP CURRENT PC ; FOLLOWING ARE ENTRY-TYPE COMMANDS: OBJMN = 0 ;OBJECT MODULE NAME SECTN = 1 {GNORE) .WORD LODE40 ;(4) GLOBAL SYMBOL ; ******************************************************************** 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 | .PAGE LODA10: MOV #TMPBUF+6,R3 ;POINTER TO TMPY BFR FOR CONVERSION MOV #" ,-(R3) ;CLEAR BFR W/ BLANKS MOV #" ,-(R3) MOV #" ,-(R3) LODA20: INC R0 ;BUMP LIST POINTER TO NEXT CHAR DEC R2 ;ANY MORE CHARS? BLT LODA30 ;NO: GO TO FINAL CONVERSION OR TO EXIT CMPB (R0),#', ;COMMA ENDS FIELD BEQ LODA30 ;END OF FIELD CMP R3,#TMPBUF}PRIORITY LEVEL .WORD 0,0 ; RESERVED .WORD DATA7 ; BUFFER ADD DATA7 =. ; .WORD 12. ; NO. CHARACTERS IN MESSAGE .WORD 0 ; RESERVED .ASCII /TASK / ; .ASCII /# 7/ ; .BYTE 40,15 ; ; EN7 =. ; MOV #LIST7,-(SP) ; EMT TTYOUT ; GO PRINT MESSAGE EMT SUSPND ~ ;SECTION NAME GENTRY = 4 ;GLOBAL ENTRY POINT DECLARATION ; FOLLOWING ARE OFFSET VALUES FOR WORDS WITHIN ENTRIES FLAGS = 4 ;DESCRIPTOR FLAGS VALR = 6 ;SYMBOL'S RELATIVE VALUE BASE = 8. ;SECTION'S BASE (OFFSET FROM LOAD BASE) VALF = 8. ;SYMBOL'S FINAL VALUE (OFFSET FROM LOAD BASE) ; FOLLOWING ARE EMT INDICES FOR THE "BFUP" ROUTINES BFINIT = 36 BFENTR = 37 BF;****************PROCESSING FOR INDIVIDUAL G S D ENTRIES************** ; ON ENTRY TO EACH ROUTINE, 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 ; ******************************************************************** +5 ;TMP BUF FULL? (ONLY 1ST SIX CHARS USED) BHI LODA20 ;FULL: IGNORE REST OF CHARS TO COMMA MOVB (R0),(R3)+ ;XFER CHAR TO TMP BUF BR LODA20 .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 ; BR EN7 ; .PAGE .CSECT TASK8 ; HEAD8 =. ; .WORD 1 ; THREAD WORD .WORD EN8 ; ENTRY POINT .WORD 0 ; INITIAL ENTRY POUNT .WORD 0 ; MAX TIME .BYTE RES ; ST SIZE .BYTE 2 ; PRIORTY .WORD 0 ; CURRENT TIMER .IFNZ ARG ; OPEN = 40 BFCLOS = 41 ; FOLLOWING ARE MISCELLANEOUS DEFINITIONS BTCHID = $BCHID ;BATCH FILE I.D. BPSYM = 10. ;NUMBER OF BYTES PER SYMBOL ENTRY GSDMAX = 4 ;MAX GSD COMMAND ALLOWED HT = 11 ;HORIZONTAL TAB LF = 12 ;LINE FEED FF = 14 ;FORM FEED CR = 15 ;CARRIAGE RETURN EXIT = 4 ;EMT FOR CALL TO MONITOR LDER16: MOV #16+100000,R4 ;MODULE NAME NOT UNIQUE JSR PC,ERRPRT ;PRINT ERROR AND RETURN BR LODC20 ;IGNORE THIS MODULE AND GET NEXT ONE .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: RLODA40: CMP (R1)+,(R1)+ ;LEAVE ROOM FOR FOUR WORDS PER ENTRY BR LODA10 ;...AND GO TO FETCH ANOTHER NAME ; ******************************************************************** ;"NAMBUF" STRUCTURE: NAME/NAME/START SECTOR/# OF SECTORS 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 .WORD 0 ; PASSED ARGUMENT .ENDC .BYTE 0 ; CPU STATUS .BYTE 8. ; TASK NUMBER .WORD 0 ; STACK POINTER .=.+RES+RES ; TASK STACK AREA LIST8 =. ; .WORD 1 ; TREAD WORD .BYTE 0 ; DEVICE (TTY) .BYTE 2 ; EXIT TYPE .WORD 0 ; .BYTE 0 EXIT TTYIN = 14 ;EMT FOR TELETYPE INPUT TTYOUT = 13 ;EMT FOR CALL TO TELETYPE OUTPUT DISCIO = 23 ;EMT FOR DISC I/O ROUTINE LPRNTR = 25 ;EMT FOR LINE PRINTER R50PAK = 46 ;EMT FOR RADIX-50 PACK ROUTINE R50UNP = 47 ;EMT FOR RADIX-50 UNPACK DEFINE = 51 ;EMT FOR "DEFINE FILE" STSIZE = 100. ;STACK SIZE (WORDS) PHDSZE = 30. EMOVE FROM UNDEF AREA LODE22: MOV R1,R4 ;INSERT NEW SECTION NAME INTO LSD MOV SYME,PTSECT ;POINTER TO SECTION 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 R1 ASR R1 ;#NAMES CONVERTEDTO RADIX-50 MOV R1,MODCNT ;SAVE IT: # OBJ MODULES TO LINK .PAGE CLR BFSTAT ;STATUS AND TYPE MOV #BFBLK1,-(SP) EMT BFINIT ;INIT IF NOT ALREADY DONE TST BFBLK1 ;ERROR? BNE LDER10 LODB20: DEC R1 ;# NAMES BLT LODC10 ;GOOD EXIT: ALL DONE MOV (R0)+,BFNAME ;LOAD LIST WITH NEXT REQ; ERROR RETURN TASK NUMBER .BYTE 0 ; I/O PRIORITY LEVEL .WORD 0,0 ; RESERVED .WORD DATA8 ; BUFEER ADD DATA8 =. ; .WORD 12. ; NO. CHARACTERS IN MESSAGE .WORD 0 ; RESERVED .ASCII /TASK / ; .ASCII /# 8/ ; .BYTE 40,15 ; ; EN8 =. ; MOV #LIST8,-(SP) ; EMT ;"PROGRAM HEADER SIZE": # OF WORDS LEDWDS = 3 ;# WDS INSERTED IN FRONT OF PROGRAM BY LOADER LDBYTS = LEDWDS*2 ;(# BYTES INSERTED) ;FOLLOWING ARE INDEX VALUES TO THE TASK HEADER HMAXEQ = 6 ;TASK MAX EXECUTION TIME WORD HPRIOR = 9. ;TASK PRIORITY WORD HSTATS = ARG*2+14 ;HEADER STATUS BYTE HTASK = HSTATS+1 ;HEADER TASK NUMBER BYTE HSTACK = HTASK+1 ;TASK STACK WORD .PAGE ; CMP VALR(R4),VALR(R1) ;COMPARE SECTION SIZES BHIS LODD20 ;ORIG WAS BIGGER: LEAVE IT MOV VALR(R1),VALR(R4) ;REPLACE WITH NEW BIGGER SIZE BR LODD20 ; ******************************************************************** LDER17: MOV #17,R4 ;SECTION NAME CONFLICT W/GLOBAL SYMBOL JSR PC,ERRPRT .PAGE ;*******GLOBAL SYMBOL******** (HERE AT LAST...) LODE40: BITB #UNDEF,FLAGS(R1);REF OR DEF? UESTED NAME MOV (R0)+,BFNAME+2 MOV #BFBLK1,-(SP) EMT BFOPEN ;LOOK FOR MODULE AND OPEN IT TST BFBLK1 ;WAS IT THERE? BNE LDER11 ;NOT FOUND: ABORT MOV BFSECT,(R0)+ ;FILL LOADER'S LIST WITH SECTOR INFO MOV BFSIZE,(R0)+ BR LODB20 .PAGE LDER10: MOV #10,R4 ;"BFINIT" ERROR JSR PC,ERRPRT LDER11: MOV #11,R4 ;"BFUP" DIRECTORY SE TTYOUT ; GO PRINT MESSAGE MOV #7,-(SP) ; CLR -(SP) ; EMT UNSPND ; TST (SP)+ ; BR EN8 ; .PAGE .CSECT TASK9 ; HEAD9 =. ; .WORD 1 ; THREAD WORD .WORD EN9 ; ENTRY POINT .WORD 0 ; INITIAL ENTRY POUNT .WORD 0 ; MAX TIME PROGRAM HEADER LODHED: ;HEADER FOR "ROSLOD" .WORD 1 ;T/W .WORD LODA00 ;BEGIN OF LOADER .WORD 0 ;INIT .WORD 0 ;MAX XEQ .BYTE STSIZE ;STACK SIZE (WORDS) .BYTE PRIBKG ;PRIORITY .WORD 0 ;TIMER .WORD 0 ;ARG .BYTE $OVTYP ;STATUS (INIT W/ FILE TYPE .BYTE $RLDNO ;TASK NUMBER BEQ LODE50 ;REF JSR PC,PTGLOB ;DEF - SEE IF IT IS ALREADY IN LSD BR LODE44 ;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 UNDEFINARCH FAILURE JSR PC,ERRPRT ; ******************************************************************** 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 MOD .BYTE RES ; ST SIZE .BYTE 2 ; PRIORTY .WORD 0 ; CURRENT TIMER .IFNZ ARG ; .WORD 0 ; PASSED ARGUMENT .ENDC .BYTE 0 ; CPU STATUS .BYTE 9. ; TASK NUMBER .WORD 0 ; STACK POINTER .=.+RES+RES ; TASK STACK AREA LIST9 =. ; .WORD 1 ; .WORD 0 ;STACK .WORD 201 ;INIT BOTTOM OF STACK W/FILE I.D. .=STSIZE*2+.-2 .PAGE ;FIRST PRINT IDENTIFICATION ON TTY TO OPEN DIALOGUE: LODA00: ;TASK BEGIN FOR THE LOADER MOV #$BCHID,BFBLK1+2 ;INIT BATCH I.D. FILE MOV #$BCHID,TXTHED ;INIT IN CASE RE-RUN MOV #400,BFSTAT ;SET TO "TYPE" = LOAD MODULE MOV LODTMP,BFNAME ;INIT ELEMENT NAME... MOV LODTMP+2,BFNAME+2 ED TABLE LODE44: MOV R1,R4 ;AGAIN POINT TO INPUT ENTRY 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 ANULES JSR PC,NXTMOD ;INIT FOR NEXT OBJ MODULE 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 TREAD WORD .BYTE 0 ; DEVICE (TTY) .BYTE 2 ; EXIT TYPE .WORD 0 ; .BYTE 0 ; ERROR RETURN TASK NUMBER .BYTE 0 ; I/O PRIORITY LEVEL .WORD 0,0 ; RESERVED .WORD DATA9 ; BUFFER ADD DATA9 =. ; .WORD 12. ; NO. CHARACTERS IN MESSAGE .WORD 0 ; RESERVED .ASCII /TASK ;...TO TEMPORARY LOAD MODULE NAME MOV #BFBLK1,-(SP) EMT BFCLOS ;CLOSE IN CASE IT WAS LEFT OPEN MOV #IDMSG,TTYBUF ;INIT FOR INITIAL I.D. MESSAGE MOV #TTYLST,-(SP) EMT TTYOUT ;PRINT ON TTY ; NOW INPUT COMMAND STRING MOV #ASCDAT,TTYBUF ;INIT FOR INPUT OF COMMAND STRING MOV #TTYLST,-(SP) EMT TTYIN ;INPUT ENTIRE COMMAND STRING MOV #ASCDAT+4-1,R0 ;INIT POYTHING LODE52: JSR PC,INUSYM ;INSERT AS AN UNDEFINED BR 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, (R0) ;IS THIS A GSD BLOCK? BEQ LODD15 ;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 / ; .ASCII /# 9/ ; .BYTE 40,15 ; ; EN9 =. ; MOV #LIST9,-(SP) ; EMT TTYOUT ; GO PRINT MESSAGE MOV #7,-(SP) ; MOV #1,-(SP) ; EMT UNSPND ; TST (SP)+ ; BR EN9 ; .PAGE .CSECT TASK10 ; HEAD10 =. ; .WORD 1 INTER TO NAMES BUFFER MOV #NAMBUF,R1 ;FILL W/RAD50 FORMS OF MODULE NAMES MOV INPCNT,R2 ;ACTUAL # OF CHARS RECEIVED BNE LODA10 EMT EXIT ;MUST TYPE AT LEAST ONE CHAR LODA10: MOV #TMPBUF+6,R3 ;POINTER TO TMPY BFR FOR CONVERSION MOV #" ,-(R3) ;CLEAR BFR W/ BLANKS MOV #" ,-(R3) MOV #" ,-(R3) LODA20: INC R0 ;BUMP LIST POINTER TO NEXT CHAR DEC R2 MULTIPLY DEFINED SYMBOLS ; ACCOMPANIED BY A "M" FLAG. LODF00: ;END OF PASS 1 ; NOW WE MUST CREATE A SECOND ABSOLUTE SECTION: <. MON.>, WHICH WILL ; CONTAIN ANY VALID MONITOR REFERENCES. THE UNDEFINEDS ARE SCANNED ; FOR ANY MATCHES WITH ANY OF THE SYMBOLS IN THE RESIDENT MONITOR ; SYMBOL TABLE. THESE ARE PUT INTO <. MON.> AND GIVEN THE VALUE ; SHOWN IN THE MONITOR TABLE. MOV #LSDBGN,R4 ;PTR TO SYMBOL TABLE ADD #BPSYM,R4 ;SKIP FIRST MO ;NOT GSD BEGIN TSTB FLAGS+3(R0) ;FIRST ENTRY'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 ; THREAD WORD .WORD EN10 ; ENTRY POINT .WORD 0 ; INITIAL ENTRY POUNT .WORD 0 ; MAX TIME .BYTE RES ; ST SIZE .BYTE 2 ; PRIORTY .WORD 0 ; CURRENT TIMER .IFNZ ARG ; .WORD 0 ; PASSED ARGUMENT .ENDC .BYTE 0 ; CPU STATUS .BYTE 10. ; TASK NUMBER ;ANY MORE CHARS? BLT LODA30 ;NO: GO TO FINAL CONVERSION OR TO EXIT CMPB (R0),#', ;COMMA ENDS FIELD BEQ LODA30 ;END OF FIELD CMP R3,#TMPBUF+5 ;TMP BUF FULL? (ONLY 1ST SIX CHARS USED) BHI LODA20 ;FULL: IGNORE REST OF CHARS TO COMMA MOVB (R0),(R3)+ ;XFER CHAR TO TMP BUF BR LODA20 .PAGE LODA30: MOV #TMPBUF,-(SP) MOV R1,-(SP) EMDULE NAME LODF01: ADD #BPSYM,R4 ;SKIP <. ABS.> AND SUBSEQUENT ENTRIES CMPB #GENTRY,FLAGS+1(R4) ;IS THIS ANOTHER "ABS" SYMBOL? BEQ LODF01 ;YES - KEEP ADVANCING JSR PC,UNSQUISH ;MAKE A HOLE HER FOR <. MON.> SECTION MOV R4,PTSECT ;POINTER TO CURRENT SECTION MOV MONSEC,(R4)+ ;MOVE IN NAME MOV MONSEC+2,(R4)+ MOV #SECTN*400+UNDEF,(R4)+ ;SET FLAG: ABSOLUTE SECTION NAME EM MOV R0,R1 ;ENTRY POINTER ADD #8.,R0 ;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 .WORD 0 ; STACK POINTER .=.+RES+RES ; TASK STACK AREA LIST10 =. ; .WORD 1 ; TREAD WORD .BYTE 0 ; DEVICE (TTY) .BYTE 2 ; EXIT TYPE .WORD 0 ; .BYTE 0 ; ERROR RETURN TASK NUMBER .BYTE 0 ; I/O PRIORITY LEVEL .WORD 0,0 ; RESERVED .WORD DATA10 ; BUT 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 ; ******************************************************************** ;"NAMBUF" STRUCTURE: NAME/NAME/START SECTOR/# OF SECTORS LODB10: T CORLOD ;RETURNS WITH... MOV (SP)+,R2 ;...POINTER TO TABLE OF MONITOR REFS MOV SYME,R4 ;POINTER TO BEGIN OF UNDEFINEDS BR LODF03 ;AVOID FIRST "ADD" LODF02: ADD #BPSYM,R4 ;GET TO NEXT UNDEFINED LODF03: CMP R4,USYME ;EXHAUSTED UNDEFINEDS? BEQ LODF09 ;YES MOV R2,R3 ;INIT TEMP PTR TO MONITOR SYMBOLS LODF04: CMP (R3),#-1 ;EXHAUSTED MONITOR SYMBOLS? LODE40 ;(4) GLOBAL SYMBOL ; ******************************************************************** 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 ;****************PROCESSFFER ADD DATA10 =. ; .WORD 12. ; NO. CHARACTERS IN MESSAGE .WORD 0 ; RESERVED .ASCII /TASK / ; .ASCII /# 10/ ; .BYTE 40,15 ; ; EN10 =. ; MOV #LIST10,-(SP) ; EMT TTYOUT ; GO PRINT MESSAGE MOV #7,-(SP) ; EMT FRETSK ; EITHER DEQUEUE OR DEACTIVATE TASK #7. TST ;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 CLR BFSTAT ;STATUS AND TYPE MOV #BFBLK1,-(SP) EMT BFINIT ;INIT IF NOT ALREADY BEQ LODF02 ;YES: GET NEXT UNDEFINED CMP (R3),(R4) ;DO FIRST 3 CHARS IN NAME MATCH? BNE LODF05 CMP 2(R3),2(R4) ;FINAL 3 CHARS? BEQ LODF06 ;MATCH! LODF05: ADD #6,R3 ;BUMP TO NEXT MON SYMBOL BR LODF04 LODF06: MOV #GENTRY*400+UNDEF+INTGLB,FLAGS(R4) ;ABS-DEFINED-GLOBAL MOV 4(R3),VALR(R4) ;LOAD SYMBOL VALUE INTO LSD MOV R4,R0 ;XFER SOURCE POINTER ING FOR INDIVIDUAL G S D ENTRIES************** ; ON ENTRY TO EACH ROUTINE, 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+10 (SP)+ ; EMT EXIT .PAGE .CSECT TASK11 ; HEAD11 =. ; .WORD 1 ; THREAD WORD .WORD EN11 ; ENTRY POINT .WORD 0 ; INITIAL ENTRY POUNT .WORD 0 ; MAX TIME .BYTE RES ; ST SIZE .BYTE 7 ; PRIORTY .WORD 0 ; CURRENT TIMER .IFNZ ARG ; DONE TST BFBLK1 ;ERROR? BNE LDER10 LODB20: DEC R1 ;# NAMES BLT LODC10 ;GOOD EXIT: ALL DONE MOV (R0)+,BFNAME ;LOAD LIST WITH NEXT REQUESTED NAME MOV (R0)+,BFNAME+2 MOV #BFBLK1,-(SP) EMT BFOPEN ;LOOK FOR MODULE AND OPEN IT TST BFBLK1 ;WAS IT THERE? BNE LDER11 ;NOT FOUND: ABORT MOV BFSECT,(R0)+ ;FILL LOADER MOV #OBJBK1,R1 ;USE AS TMPY BUFFER MOV (R0)+,(R1)+ ;XFER TO TEMP BUFFER MOV (R0)+,(R1)+ MOV (R0)+,(R1)+ MOV (R0)+,(R1)+ MOV (R0)+,(R1)+ JSR PC,SQUISH ;REMOVE ENTRY FROM UNDEFINEDS MOV #OBJBK1,R4 JSR PC,INPTRH ;PUT IT IN THE <. MON.> SECTION MOV R0,R4 ;NEW POINTER TO UNDEFINEDS BR LODF03 ;MORE LODF09: CLR PRSIZE0000,R4 ;MODULE NAME NOT UNIQUE JSR PC,ERRPRT ;PRINT ERROR AND RETURN BR LODC20 ;IGNORE THIS MODULE AND GET NEXT ONE .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 .WORD 0 ; PASSED ARGUMENT .ENDC .BYTE 0 ; CPU STATUS .BYTE 11. ; TASK NUMBER .WORD 0 ; STACK POINTER .=.+RES+RES ; TASK STACK AREA ; EN11 =. ; CLR CN11 ; CLR R0 ; EN11A: INC R0 ; INC CN11 ; CLR R1 ; EMT SUSPND 'S LIST WITH SECTOR INFO MOV BFSIZE,(R0)+ BR LODB20 .PAGE LDER10: MOV #10,R4 ;"BFINIT" ERROR JSR PC,ERRPRT LDER11: MOV #11,R4 ;"BFUP" DIRECTORY SEARCH FAILURE JSR PC,ERRPRT ; ******************************************************************** LODC10: ; ALL NAMES FOUND IN DIRECTORY. NOW PROCEED WITH PASS 1. MOV #NAMBUF,NAMPTR ;POINTER TO LIST OF MODULE NAMES MOV MODCNT,N ;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),R1 ;ENTRY TYPE MOVB FLAGS(R0),R2 ;QUALITIES FLAG CMPB R1,#GENTRY ;GLOBAL SYMBOL? BEQ LODF50 ;YES DE LODE22: MOV R1,R4 ;INSERT NEW SECTION NAME INTO LSD MOV SYME,PTSECT ;POINTER TO SECTION 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),VAL; BR EN11A ; CN11: .WORD 0 ; .PAGE .CSECT TASK12 ; HEAD12 =. ; .WORD 1 ; THREAD WORD .WORD EN12 ; ENTRY POINT .WORD 0 ; INITIAL ENTRY POUNT .WORD 0 ; MAX TIME .BYTE RES ; ST SIZE .BYTE 8. ; PRIORTY .WORD 0 ; CURRENT TIMER .IFNAMCTR ;# 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 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 C 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 CLR VALR(R0) ;ABS: SET SIZE... CLR BASE(R0) ;...AND BASE = 0 BR LODF40 LODF30: ;RELOCATABLE SECTION R(R1) ;COMPARE SECTION SIZES BHIS LODD20 ;ORIG WAS BIGGER: LEAVE IT MOV VALR(R1),VALR(R4) ;REPLACE WITH NEW BIGGER SIZE BR LODD20 ; ******************************************************************** LDER17: MOV #17,R4 ;SECTION NAME CONFLICT W/GLOBAL SYMBOL JSR PC,ERRPRT .PAGE ;*******GLOBAL SYMBOL******** (HERE AT LAST...) LODE40: BITB #UNDEF,FLAGS(R1);REF OR DEF? BEQ LODE50 Z ARG ; .WORD 0 ; PASSED ARGUMENT .ENDC .BYTE 0 ; CPU STATUS .BYTE 12. ; TASK NUMBER .WORD 0 ; STACK POINTER .=.+RES+RES ; TASK STACK AREA ; EN12 =. ; CLR CN12 ; CLR R1 ; EN12A: INC R1 ; INC CN12 ; CLR R0 ; 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 ;YES: PROCEED DEC (R0) ;IS IT GSD END? BEQ LODC20 ;YES: GET NEXT OBJ MODULE CMP (R0),#4 ;IS IT MODULE END? BEQ LODC20 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 LODF10 ;GET NEXT ENTRY ;*******GLOBAL ENTRY POINT LODF50: BITB #ABSREL,R2 ;ABS OR REL? BEQ LODF60 ;ABS ;REF JSR PC,PTGLOB ;DEF - SEE IF IT IS ALREADY IN LSD BR LODE44 ;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 LODE44: MOV MOV #11.,-(SP) ; MOV #1,-(SP) ; EMT UNSPND ; TST (SP)+ ; BR EN12A ; CN12: .WORD 0 ; .END ; ;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 ENTRY'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 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 ;NOW ALL ENTRY POINTS AND SECTION BASES HAVE BEEN ;RELOCATED WITH RESPECT TO PROGRAM BASE ZERO. ;NOW TIME TO PRINT THE LOAD MAP. LO R1,R4 ;AGAIN POINT TO INPUT ENTRY 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 I.N IRSHA C;# 4 .-D-ENID G:MSID E AG.P L UL FENWHT PUUT OA:RE ALDUI BERILRA;T 8.12.+.= : CKLOLBAITR E IM T AATR TOEC SNE OTERI;W . 64 D OR.W ERMBNUR TOEC SERILRA;T 0 D OR.W: ECASTR 0 0,0, D OR.W A RE AERILRA TOMFRE ITWRS AYLW;A 1 E YT.B: .WARTR 0 E YT.B E IL FCHAT BOR FD.I.E IL;F IDCHBT D OR.W ESITWRR LEAITRR FOR DEEA;H : EDAHTR ************************************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.,R0 ;NEXT ENTRY MOV R1,R4 ;SECONDARY POINTER USED BY VARIOUS RTNES ASL R2 ;BYTE INDEX JMP @GSDTAB(R2) .PAGE GSDTAB: .WORD LODE00DF90: MOV #ND1MSG,TTYBUF ;INIT TO PRINT "END PASS 1" ON TTY MOV #TTYLST,-(SP) EMT TTYOUT ; NOW FILL PRINT BUFFER W/CURRENT DATE AND TIME. ; THE DATA RETURNED FROM THE "GET" SUBROUTINES IS LEFT ON THE ; STACK TO BE POPPED BY THE "BINASC" ROUTINE. MOV #TMPBUF+4,R0 MOV #YEAR,R1 MOV #3,R2 EMT GEDATE LODF92: MOV #TMPBUF,-(SP) EMT BINASC ;CONVERT DATE TO ASCII PC,INUSYM ;INSERT AS AN UNDEFINED BR 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******************************** ; A AT DCTJEOBR FOK OCBLD ONEC;S 8.12.+.=: K2JBOB TADAT ECBJ OOR FCKLO BSTIR;F 8.12.+.=: K1JBOB S ORCTSEO TWN IADRES AYLW;A 8.12 D OR.W R BEUM NORCTSEE IVATEL;R 0 D OR.W: ECJSOB 0 0,0, D OR.W AGFLE ITWRD/EA;R 0 E YT.B ORCTSEE IVATEL;R 0 E YT.B E IL FCHAT BOR FD.I.E IL;F IDCHBT D OR.W ESULOD MCTJEOBG INADRER FOR DEEA;H G ;(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 ; ******************************************************************** LDER13: MOV #13,R4 ;FIRST MODULE BLOCK NOT "GSD" JSR PC,ERRPRT LDER14: MOV #14,R4 ;FIRST ENTRY IN GSD NOT OBJ MOD NAME JS MOV (R0),(R1) ;TRANSFER CHARS TO PRINT BUFFER CMP -(R1),-(R1) ;POINT TO NEXT PRINT BUFFER SPACE DEC R2 ;DO FOR THREE VALUES BGT LODF92 EMT GETIME MOV #TMPBUF,-(SP) EMT BINASC MOV (R0),HOUR MOV #TMPBUF,-(SP) EMT BINASC MOV (R0),MINUTE MOV #HEDING,MAPBUF ;PRINT HEADING JSR PC,LPCALL ;GO ASK FOR LINE PRINTER ; ACCOMPANIED BY A "M" FLAG. LODF00: ;END OF PASS 1 ; NOW WE MUST CREATE A SECOND ABSOLUTE SECTION: <. MON.>, WHICH WILL ; CONTAIN ANY VALID MONITOR REFERENCES. THE UNDEFINEDS ARE SCANNED ; FOR ANY MATCHES WITH ANY OF THE SYMBOLS IN THE RESIDENT MONITOR ; SYMBOL TABLE. THESE ARE PUT INTO <. MON.> AND GIVEN THE VALUE ; SHOWN IN THE MONITOR TABLE. MOV #LSDBGN,R4 ;PTR TO SYMBOL TABLE ADD #BPSYM,R4 ;SKIP FIRST MODULE NAME LODF01: ADD : EDJHOB ******************************************************************** ; K OCBLE AV SXTTED ONEC;S 8.12.+.=: K2TBTX CKLO BVESAT EX TSTIR;F 8.12.+.=: K1TBTX METIH AC EERSFANTRO TDSOR W;# 0 D OR.W: NTTCTX XTTEE OTRI/WADREO TORCTSEE IVATEL;R 0 D OR.W: ECTSTX 0 0,0, D OR.W E YT BTERI/WADRET EX;T 0 E YT.B: .WTRTX ORCTSEE IVATEL;R 0 E YT.B E IL FCHAT BOR FD.I.E IL;F IDCR 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 ROUTINE, R1 AND R4 POINT TO CANDIDATE ENTRY ;*******MODULE NAME******** LODE00: JSR PC,SRMODN ;SEARCH FOR MODULE NAME BR LDER16 ;NOT UNIQUE MOV SYME,PTR 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 LODH10 ;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: IGNOR #BPSYM,R4 ;SKIP <. ABS.> AND SUBSEQUENT ENTRIES CMPB #GENTRY,FLAGS+1(R4) ;IS THIS ANOTHER "ABS" SYMBOL? BEQ LODF01 ;YES - KEEP ADVANCING JSR PC,UNSQUISH ;MAKE A HOLE HER FOR <. MON.> SECTION MOV R4,PTSECT ;POINTER TO CURRENT SECTION MOV MONSEC,(R4)+ ;MOVE IN NAME MOV MONSEC+2,(R4)+ MOV #SECTN*400+UNDEF,(R4)+ ;SET FLAG: ABSOLUTE SECTION NAME EMT CORLOD ;RCHBT D OR.W NSIOATEROPE ITWRD/EA RERFFBUE AV SXTTER FOR DEEA;H : EDTHTX E AG.P ******************************************************************** ; LEFIN IRSTOEC S;# 0 D OR.W PETYE IL;F 0 D OR.W D.I.E IL;F 0 D OR.W RYTOECIR DRECOF IEDRNTURE: FD;I 0 D OR.W K TSRR,EORRR;E 0 0, E YT.B T IS LE"IL FNEFIDE;" 1 D OR.W: STLIDF * ****************?OBJ ;POINTER TO NEW MODULE NAME IN LSD JSR PC,INSYME ;GO INSERT ENTRY INTO LSD BR LODD20 ; ******************************************************************** LDER16: MOV #16+100000,R4 ;MODULE NAME NOT UNIQUE JSR PC,ERRPRT ;PRINT ERROR AND RETURN BR LODC20 ;IGNORE THIS MODULE AND GET NEXT ONE .PAGE ;*******SECTION NAME******** LODE20: JSR PC,PTGLOB ;SEARCH FOR IT IN LSD E 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. MOV #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 ETURNS WITH... MOV (SP)+,R2 ;...POINTER TO TABLE OF MONITOR REFS MOV SYME,R4 ;POINTER TO BEGIN OF UNDEFINEDS BR LODF03 ;AVOID FIRST "ADD" LODF02: ADD #BPSYM,R4 ;GET TO NEXT UNDEFINED LODF03: CMP R4,USYME ;EXHAUSTED UNDEFINEDS? BEQ LODF09 ;YES MOV R2,R3 ;INIT TEMP PTR TO MONITOR SYMBOLS LODF04: CMP (R3),#-1 ;EXHAUSTED MONITOR SYMBOLS? BEQ LODF02 ************************************************** ; S)ORCTSEF O(#H GTEN LNTMELE;E 0 D OR.W: ZESIBF ) VETILAREE IL(FR TOEC SRTTA SNTMELE;E 0 D OR.W: CTSEBF E YP TNTMELE;E 0 E YT.B: PETYBF S TUTA SNTMELE;E 0 E YT.B: ATSTBF 0 0, D OR.W: MENABF # E IL;F 0 D OR.W D OR WORRR;E 0 D OR.W: K1BLBF T IS LP"FU"B ; * ****************************************************************** ; ERFFBUA AT;D; 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 SECTION NAME IN LSD JSR PC,INSYME ;INSERT NEW NAME IN LSD BR LODD20 LODE24: 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: ;***PRINT 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 LODG ;YES: GET NEXT UNDEFINED CMP (R3),(R4) ;DO FIRST 3 CHARS IN NAME MATCH? BNE LODF05 CMP 2(R3),2(R4) ;FINAL 3 CHARS? BEQ LODF06 ;MATCH! LODF05: ADD #6,R3 ;BUMP TO NEXT MON SYMBOL BR LODF04 LODF06: MOV #GENTRY*400+UNDEF+INTGLB,FLAGS(R4) ;ABS-DEFINED-GLOBAL MOV 4(R3),VALR(R4) ;LOAD SYMBOL VALUE INTO LSD JSR PC,INPTRH ;INSERT ENTRY INTO <. MON.> SECTION... EDAHTR D OR.W EDRVSERED,OR WORRR;E 0 0, D OR.W: RRAETR ELEV;LORRR;E 3 0, E YT.B 0 D OR.W D ENSPSUC,IS;D 2 1, E YT.B R LEAITRR FOT IS;L 1 D OR.W: STALTR E AG.P A RE AXTTEO /TOMFRW R/S AYLW;A EDTHTX D OR.W EDRVSERED,OR WORRR;E 0 0, D OR.W: RRTETX ELEV,LORRR;E 3 0, E YT.B 0 D OR.W NDPEUS SC;IS;D 2 1, E YT.B A RE A7 ;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 VALR(R1),VALR(R4) ;REPLACE WITH NEW BIGGER SIZE BR LODD20 ; ********************************10 ;NEXT LODG40: ;***PRINT PROGRAM SECTION NAME*** MOV #SECNAM,-(SP) MOV R0,-(SP) EMT R50UNP ;UNPACK SECTION NAME MOV 10(R0),R4 MOV #SECVAL+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 JSR PC,SQUISH ;...AND REMOVE IT FROM THE UNDEFINEDS BR LODF02 ;LOOK FOR MORE UNDEFINEDS TO RESOLVE LODF09: 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),R1 ;ENTXTTEM RO/FTOS ERSFANTRR FOT IS;L 1 D OR.W: STTLTX * ****************************************************************** ; N RUG INUR DENOSCH: ERFFBUA AT;D 0 D OR.W: UFPBMA D VEERES;R 0 0, D OR.W ELEV,LORRR;E 0 0, E YT.B E ETPLOM C/O;I 0 D OR.W D ENSPSUR,TEINPRE IN;L 2 3, E YT.B AP MADLOR FOT IS;L 1 D OR.W: STPLMA * ****************************************************3************************************ LDER17: MOV #17,R4 ;SECTION NAME CONFLICT W/GLOBAL SYMBOL 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 ;NOT FOUND BITB #UNDEF,FLAGS(R4);FOUND: IS IT ALREADY DEFINED? BEQ LODE42 ;NO: GO 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 OCTAL 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 R0,USYME RY 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 ************** ; ERFFBUA AT;D EDJHOB D OR.W D VEERES RD,OR WORRR;E 0 0, D OR.W: RRJEOB TYRIIOPRT ESQUREC IS DK,AS TRR;E 3 0, E YT.B 0 D OR.W NDPEUS SC:IS;D 2 1, E YT.B STLID EA RLEDUMOT ECBJ;O 1 D OR.W: STJLOB ******************************************************************** ; ERFFBUA AT;D 0 D OR.W: UFYBTT D VEERES;R 0 0, D OR.W ELEV,LORRR;E 0 0, /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 JSR PC,INPTRH ;INSERT IT ALPHABETICALLY IN THIS SECT'N ;IF IT WAS DOUBLY DEFINED, BOTH ENTRIES ARE FLAG;ANY UNDEFINEDS? BEQ LODH30 ;NO: GO TO MESSAGE LDER04: MOV #4+100000,R4 ;"UNDEFINED GLOBALS" JSR PC,ERRPRT ;PRINT MESSAGE AND RETURN MOV #UNDHED,MAPBUF JSR PC,LPCALL ;PRINT HEADING MOV #UNDDEF,MAPBUF ;SET UP TO PRINT FROM UNDEFINED BUF LODH20: MOV #UNDNAM,-(SP) MOV R0,-(SP) EMT R50UNP ;CONVERT TO ASCII JSR PC,LPCALL ;GO PRINT IT ADD #BPS 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 LODFE YT.B E ETPLOM C/O;I 0 D OR.W D ENSPSU: PETYL AL C1; #TY TE:ICEV;D 2 0, E YT.B STLIO I/E YPETEL;T 1 D OR.W: STYLTT CEENQUSE" SELO"CA VIT XI;E 28DLLO P JM: 10RPER D TEESQUREN URET;R PC S RT N URET RSTUEEQ ROT NID D #ORRR;E 10RPER L BP R4H IT WESOD CET SND ARETOES;R P POEG,RR5 R JS GESAES MSTUEEQ;R UTYOTT T EM ) SP-(T,LSTY#T V MO +GED 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 LODD20 .PAGE ;NOW ALL OBJ MODULES HAVE BEEN PASSED OVER ONCE, ALL ; GSD'S HAVEYM,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 ; ******************************************************************** .PAGE ;PASS 1 IS NOW COMPLETED. NOW BEGIN PASS 2 TO FORM THE ;LOAD MODULE ITSELF, COMPLETE WITH HEADER AND TRAILER. 10 ;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 ;NOW ALL EGESAES MORRR ENGTIINPRR FOT NI;I UFYBTTG,MSRR#E V MO ONSIERNVCOO TNTOI PRYNT ERYDAONEC SSE;U A NT2O,BPC R JS R ERMBNUE AGSSMER HA-C 3;A 2 ,R#3 V MO ERFFBUI CIASN IARCHT AS;L R33,M+NURR#E V MO RNTUREE WSECAN ;I V SAEG,RR5 R JS .ITEXL IL WSEEL; ERLLCAO TRNTUREL IL WT,SES ISB MIF ; ERMBNUR ROERY ARIN BTHWID TENI IDYEALR AR4 ; E INUTROG INNTRI PGESAES MORRR;E : RTRPER ****************************' 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: ;END OF PASS 1 MOV #ND1MSG,TTYBUF ;INIT TO PRINT "END PASS 1" ON TTY MOV #TTYLST,-(SP) ;THE METHOD IS SHOWN IN STEPS AS FOLLOWS: ;1) OPEN A TEMPORARY ELEMENT IN THE BATCH FILE AREA ;2) BUFFER IN ONE TEXT BLOCK AT A TIME FROM OBJ MODULES ;3) MODIFY RELOCATABLE CODE KEYED IN ASSOC'D RLD BLOCKS ;4) BUFFER MODIFIED TEXT OUT TO TEMPORARY LOAD MODULE ;5) CREATE TRAILER FOR RELOCATING AT RUN TIME ;6) FILL IN THE HEADER AND TRAILER POINTERS ;7) DEFINE A ROS FILE AND TNTRY POINTS AND SECTION BASES HAVE BEEN ;RELOCATED WITH RESPECT TO PROGRAM BASE ZERO. ;NOW TIME TO PRINT THE LOAD MAP. LODF90: MOV #ND1MSG,TTYBUF ;INIT TO PRINT "END PASS 1" ON TTY MOV #TTYLST,-(SP) EMT TTYOUT ; NOW FILL PRINT BUFFER W/CURRENT DATE AND TIME. ; THE DATA RETURNED FROM THE "GET" SUBROUTINES IS LEFT ON THE ; STACK TO BE POPPED BY THE "BINASC" ROUTINE. MOV #TMPBUF+4,R0 **************************************** ; RNTURE: EDLLFIR FEUF BIISC;A PC S RT REMOR FOK AC;B TAONB2 T BG ? GOO TTSGIDII CIASE OR;M R2 C DE R4 R AS R4 R AS N IOATAGOPPRN IG SNTVERE;P R40,0000#1 C BI ITIG DALCT OXTNER FOG INFTHI SINEG;B R4 R AS E OD CIISC ATOE NGHA;C ) R3,(60#0 SBBI TSBIE RETHT ANICIFGNSIT ASLEY NL OVEEA;L ) R3,(70#3 CBBI # 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),R1 ;ENTRY TYPE MOVB FLAGS(R0),R2 ;QUALITIES FLAG CMPB R1,#GENTRY ;GLOBAL SYMBOL? RANSFER LOAD MODULE TO IT ;8) MAKE APPROPRIATE CHECKS ON TASK DATA IN HEADER... ; ...AND INIT APPROPRIATE MONITOR TABLES FOR TASK ;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 ADD #LDBYTS,R0 ;ACCOUNT FOR WORDS PRECEDING HEADER DEC R0 ;GETMOV #YEAR,R1 MOV #3,R2 JSR PC,GEDATE LODF92: MOV #TMPBUF,-(SP) EMT BINASC ;CONVERT DATE TO ASCII MOV (R0),(R1) ;TRANSFER CHARS TO PRINT BUFFER CMP -(R1),-(R1) ;POINT TO NEXT PRINT BUFFER SPACE DEC R2 ;DO FOR THREE VALUES BGT LODF92 JSR PC,GETIME MOV #TMPBUF,-(SP) EMT BINASC MOV (R0),HOUR MOV #TMPBUF,-(SP ITIG DALCT OXTNER FON URET ROPLOO LS;A 3)(R,-R4 VBMO H GTEN LONTIRATE INGTIET-SRE PENWHE ER HERNT;E : TAONB2 ) RSHA C 6ALRMNO (THNGLEN IOATERITT NI;I 2 ,R#6 V MO: OCN2BI R BEUM NRYNABI= 4 R ; 1 S+ESDRADD ENN IOATINSTDE= 3 R ; ) A"NT2O"B @ERNT EIF (THNGLEN IOATERIT= 2 R T:PUIN ; " ONSIERNVCOI CIASL TAOCO TRYNABI "NETIOUBRSU ; **************************************************** 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 CLR VALR(R0) ;ABS: SET SIZE... CLR BASE(R0) ;...AND BASE = 0 BR ADDRESS OF HIGHEST BYTE LOADED ASR R0 BIC #100000,R0 ASR R0 ASR R0 ASR R0 ASR R0 ASR R0 ASR R0 ;PGM BYTES/128=# WHOLE SECTORS FOR PRGM INC R0 ;GET TO BEGIN OF NEXT SECTOR AFTER PGM MOV R0,R1 ;FIRST SECTOR FOR TRAILER ASL R0 ASL R0 ASL R0 ASL R0 ASL R0 ASL R0 ) EMT BINASC MOV (R0),MINUTE 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 LODH10 ;YES: EXIT LOOP MOVB FLAGS+1(R0),R1 ;ENTRY TYPE BEQ LODG30 ;O**************** ; PC S RT R TEINPRE IN;L TRRNLP T EM ) SP-(T,LSAP#M V MO R TEINPRE IN LTOT EME AK MTOE INUTRON MOOM;C : LLCALP E AG.P PC S RT C PEDAV SOP;P + P)(S T TS RDWOT EX TENOPT EX NTOR TEINPOL UACT;A R PTXT,TR3 V MO R31,BKXT#T D AD A RE AXTTEF OOP TOMFRT SEFF OET;G 3 ,RR4 B SU CKLO BXTTET EX NOFN GIBER FOC ;P 3 ,RP)(S V MO E NGHA 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 LODF10 ;GET NEXT ENTRY ;*******GLOBAL ENTRY POINT LODF50: BITB #ABSREL,R2 ;ABS OR ASL R0 ;NOW HAVE RELATIVE PC FOR TRAILER START CMP (R0)+,(R0)+ ;ALLOW FOR 2-WORD TRAILER HEADER MOV R0,TRAPC ;INIT PERMANENT FOLLOWER OF TRAILER PC MOV R0,TRAPCSAVE ;SAVE IT FOR USE AT [LODK30] SUB #LDBYTS+4,R0 ;TRAILER START AS OFFSET FROM RELOC ZERO MOV R0,TXTBK1 ;PUT IN FIRST WORD OF LOAD MODULE CLR TXTORG ;PC @ BEGIN OF CURRENT TEXT BUFFER CLR HIGHPC BJ 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. MOV #GLBVAL+6,R3 ;END OF ASCII BUFFER JSR PC,BIN2OC ;CONVERT BINARY TO OCTAL ASCII CPCA F OSECAN I",TRTPTX "TELACUAL-CRES AYLW;A : 40TOTX C PINEG BEW;N G ORXT,TR4 V MO R4 L AS R4 L AS R4 L AS R4 L AS R4 L AS R4 L AS XTTEW NEF OINEG BATC PET GOW;N R4 L AS T"LSXT"TTHWIE ITWRR OADREO ;G O TIEX,TPC R JS ADRET EX TEW NOR FREPARE;P .WTRTX RBCL S TERI WNTSQUB S &ADREG INOMPC UOR FET;S C SEXT,TR3 V MO E IL FCHATREL? 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 ;NOW ALL ENTRY POINTS AND SECTION BASES HAVE BEEN ;RELOCATED WITH RESPECT TO PROGRAM BASE ZERO. ;INIT MEMORY OF HIGHEST PC MOV #LDBYTS,CURPC ;ALLOW FOR LEAD WORDS INSERTED BY LOADER MOV #LDBYTS+TXTBK1,TXTPTR ;...ALSO FOR TEXT POINTER MOV #128.,TXTCNT ;INIT FOR TWO-SECTOR TEXT TRANSFERS MOV #LODNAM,-(SP) ;MUST CONVERT LOAD ELEMENT NAME... MOV #BFNAME,-(SP) ;...TO RAD50 EMT R50PAK MOVB #1,BFTYPE ;TYPE = LOAD MODULE MOV #BFBLK1,-(SP) EMT BFENTR ;CREATE TE 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: ;***PRINT OBJECT MODULE'S NAME*** MOV #TITLE,-(SP) MOV R0,-(SP) EMT R50UNP BOFN GIBEO TVETILARER TOEC;S 3 ,RCTSEBF D AD ) GN BXTTEO TVETILARE (ORCTSEW NEE AV;S 4 ,RR3 V MO R3 R AS R3 R AS R3 R AS R3 R AS R3 R AS R3 R AS N IG SEDNDTEEXS ESPRUP;S R30,0000#1 C BI PCW NER FOR TOEC SET GOW;N R3 R AS C"RPCU "EW;N 3 ,RP)(S V MO T"LSXT"TTHWIE ITWRR OADREO ;G O TIEX,TPC R JS TERI;W W R.XT,T#1  ;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 LODH10 ;YES: EXIT LOOP MOVB FLAGS+1(R0),R1 ;ENTRY TYPE BEQ LODG30 ;OBJ MMP ELEMENT FOR LOAD MODULE TST BFBLK1 ;ERR? BNE LDER07 MOV BFSECT,R0 ;START SECTOR FOR ELEMENT W-R-T ROS FILE MOV R0,TXTSEC ;INIT REL SECT # FOR TEXT WRITES ADD R0,R1 ;GET FIRST TRAILER SECTOR MOV R1,TRASEC ;INIT IT MOV R1,TRSCSV ;...AND REMEMEBER IT FOR LATER MOV MODCNT,NAMCTR ;RE-INIT COUNTER FOR # OF OBJECT MODULES MOV #NAMBUF,NAMPTR ;RE-IN ;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 #SECVAL+6,R3 JSR PC,BIN2OC ;CONVERT BINARY TO OCTAL ASCII MOV 6(R0),R1 ;SEC VBMO - --INT EX TEW NADRED ANT OUT EX TNTREUR CTERI WTOE ER;H : 10TOTX E AG.P METIS HI TEDEDNER FENSRA TNO: ES;Y 40TOTX O BL 2? #BKW LOBET IIS: #1K BLE OVABC PEW;N 3 ,RP)(S P CM K COBLD ONEC SINE YT BSTIR FOFC ;P R3.,28#1 D AD T EX TCELAEP R -ES;Y 10TOTX O BL ? NE OCKLO BINT EX TOWEL BPCW NES ;I 4 ,RP)(S P CM R FENSRA TNOF OSECAN IPCUR C @R4P EE;K 3 ,RR4 V MO OD 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. MOV #GLBVAL+6,R3 ;END OF ASCII BUFFER JSR PC,BIN2OC ;CONVERT BINARY TO OCTAL ASCII IT 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 LODJ50 ;FOUND A "MODULE-END" BLOCK BR LODK10 ;"TEXT" BLOCK BR LODJ18 ;"RLD" BLOTION 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 OCTAL ASCII MOV #SECT,MAPBUF JSR PC,LPCALL ;PRINT SECTION NAME,BASE,SIZE,& CUM SI XTTET ENIDES ROFN BG@ E LUVAC ;P 4 ,RRGTOTX V MO OWEL BRKWOR FOE AV;S ) SP-(C,RPCU V MO CKLO BXTTET NXF OGN BTOR CTN C'LOP UM;B C RPCUC,TBTX D AD LLFUS IERFFBUF IXTTED TELAMUCUACT PUUT OTOE INUTROUB;S : UTTOTX ) T.EX TEDATRE CLYEW NUR OOFY ITGRTEIN; HE TCTTERO PND AE,IM T AATR TOEC SNE OUT OXTTER OUR FEUF BAN CWE; Y,WAS HI TIN 1. #CKLO BTOINN AIAGN ICKBAD EA RBEO TLYON; C,IS DTON TEITWRE BLLWI2 #CKLO BXTTEN TEITWRY-LLIARTPAA T HA T 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: ;***PRINT OBJECT MODULE'S NAME*** MOV #TITLE,-(SP) MOV R0,-(SP) EMT R50UNP CK BR LODJ12 ;"ISD" BLOCK: IGNORE LODJ18: MOV #3,TSWICH ;RLD! SET FLAG TO SHOW NOT FOLLOWING TXT LODJ20: ;PROCESS NEXT COMMAND IN RLD BLOCK TST R0 ;IS RLD BC EXHAUSTED? BGT LODJ22 ;NO - CONTINUE LODJ60: ;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: ZE BR LODG10 ;NEXT .PAGE LODH10: ;END OF PRINTING DEFINEDS: NOW PRINT UNDEFINEDS, IF ANY CMP R0,USYME ;ANY UNDEFINEDS? BEQ LODH30 ;NO: GO TO MESSAGE LDER04: MOV #4+100000,R4 ;"UNDEFINED GLOBALS" JSR PC,ERRPRT ;PRINT MESSAGE AND RETURN MOV #UNDHED,MAPBUF JSR PC,LPCALL ;PRINT HEADING MOV #UNDDEF,MAPBUF ;SET UP TO PRINT FROM UNDEFINED BUF LODH20: MOANME; LLWIS HI TESAS CNYMAN I. IND EA RBEL IL WKSOCBLO TWW NEE ATRIOPPRAP; HE TND AT,OUN TEITWRE BLLWIS CKLO BTHBO, KSOCBLO TWE THE IDTSOU; R OK,OCBLD ONEC SHE TTOINS IPCW NEE THF I. URCC OLLWIR FENSRA TNO; 1, #CKLO BINTHWIS LLFAL ILSTC PEW NHE TIF D.ANMMCOD RLN ABYE LUVA; W NEA O TET SENBES HA" PCUR"CS TECADIINH ICWH, ROZEE BAY MC"TBTX("; " T U O T X T " ; E AG.P T EX TTHWIR ROERO CIIS;D T PRRR,EPC R JS 4 ,R#5 V MO: 05ERLD PC S RT  ;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 #SECVAL+6,R3 JSR PC,BIN2OC ;CONVERT BINARY TO OCTAL ASCII MOV 6(R0),R1 ;SECTION ;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 ;BYTE TO WORD INDEX JMP @LODJ69(R2) .PAGE 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: TEV #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 ; ******************************************************************** 05ERLD E BN S?ORRR ENY;A RRTETX T TS T EX TTHWIE ITWRR OADREO ;G IOSCDI T EM ) SP-(T,LSXT#T V MO: IOXTTE ******************************************************************** ; R LEAL CUR OTON URET RENTHL IL WCHHI;W E AGSSMET INPR: ROZET NOS WAE YT BERPP;U 25ERLD BR ROZEE BTOD HAE YT BERPP;U 10TPTX Q BE R4 ABSW: 20TPTX PC S RT: 10TPTX TEBYR PEUPD OA;L  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 OCTAL ASCII MOV #SECT,MAPBUF JSR PC,LPCALL ;PRINT SECTION NAME,BASE,SIZE,& CUM SIZE XT 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 ; ******************************************************************* LDER07:MOV #7,R4 ;"BFENTR" ERROR JSR PC,ERRPRT LDER12: MOV #12,R4 ;MAX T-JUMP TABLE INDEX EXCEEDED JSR PC,ERRPRT GETBLK: ;SUBROUTINE TO GET A NON-GSD BLOCK. KEEPS FETCHING BLOCKS  .PAGE ;PASS 1 IS NOW COMPLETED. NOW BEGIN PASS 2 TO FORM THE ;LOAD MODULE ITSELF, COMPLETE WITH HEADER AND TRAILER. ;THE METHOD IS SHOWN IN STEPS AS FOLLOWS: ;1) OPEN A TEMPORARY ELEMENT IN THE BATCH FILE AREA ;2) BUFFER IN ONE TEXT BLOCK AT A TIME FROM OBJ MODULES ;3) MODIFY RELOCATABLE CODE KEYED IN ASSOC'D RLD BLOCKS ;4) BUFFER MODIFIED TEXT OUT TO TEMPORARY LOAD MODULE )+R3,(R4 VBMO R4 ABSW E YT;B 20TPTX I BM NDMAOM;C R2 T TS T EX TTOINE YT BSTIR FCELA;P )+R3,(R4 VBMO . TSBI8 W LORFVE OOT NID DTEBYD KEIN L ARESUE BTOE AD MISK ECCH ; . XTTEO NT IRDWOR OTEBYD KEIN LUT PTOE INUTROUB;S : UTTPTX E AG.P T PRRR,EPC R JS T"LSRA"TH IT WIOSCDIN IORRR;E 4 ,R#6 V MO: 06ERLD PC S RT IOSCDIN IRR;E 06ERLD E BN  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 LDER04: MOV #4+100000,R4 ;"UNDEFINED GLOBALS" JSR PC,ERRPRT ;PRINT MESSAGE AND RETURN MOV #UNDHED,MAPBUF JSR PC,LPCALL ;PRINT HEADING MOV #UNDDEF,MAPBUF ;SET UP TO PRINT FROM UNDEFINED BUF LODH20: MOV  ;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 ;INSTEAD MIS-INTERPRET THEM FOR ONE OF THE LEGAL ONES. JSR PC,NXTBLK ;GET NEXT OBJECT MODULE BLOCK BR  ;5) CREATE TRAILER FOR RELOCATING AT RUN TIME ;6) FILL IN THE HEADER AND TRAILER POINTERS ;7) DEFINE A ROS FILE AND TRANSFER LOAD MODULE TO IT ;8) MAKE APPROPRIATE CHECKS ON TASK DATA IN HEADER... ; ...AND INIT APPROPRIATE MONITOR TABLES FOR TASK ;THESE OPERATIONS ARE DONE A SECTOR AT A TIME, TO ;CONSERVE PROGRAM BUFFER SPACE. ; FIRST MUST INIT TRAILER AND OTHER POINTERS.. RRAETR T TS T IS LERILRA TTHWIE ITWRD/EA;R IOSCDI T EM R LEAITRR FOT IS;L ) SP-(T,LSRA#T V MO CKLO BILRA THE TOMFRO/ TTERI WORD EA RTOE INUTROUB;S O:LIAITR PC S RT ERNTOI PEW;NR TEINPOILRA,TR3 V MO: 30APTR R TEINPOT SEREO TREPARE;P R3K,OCBLILRA#T V MO R BEUM NORCTSER LEAITRP UM;B ECASTR C IN: 20APTR CKLO BERILRA TNTREUR CUT OTERI;W IOILRA,TPC R JS ET YOT;N 30APTR O BL  #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 ; ********************************************************************  LODJ98 ;NO MORE BLOCKS: EXIT PASS 2 MOV R0,R1 ;POINTER TO DATA MOV R5,R0 ;BYTE COUNT MOV (R1)+,R2 ;GET BLOCK COMMAND SUB #2,R0 ;COUNT OFF TWO BYTES FOR COMMAND SUB #2,R2 ;DISCARD COMMANDS BELOW 3. BLE GETBLK ;IGNORE THEM AND GET NEXT BLOCK BIC #-3-1,R2 ;CHANGE 4 (MND=4+2) TO ZERO ASL R2 ;BYTE TO WORD INDEX . 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 R0 ASR R0 ASR R0 ;PGM BYTES/128=# WHOLE SECTORS FOR PRGM INC R0 ;GET TO BEGIN OF NEXT SECTOR AFTER PGM MOV R0,R1 ;FIRST SECTOR FOR TRAILER ASL R0 ? ET YCKLO BOFD ENT ;A . 28+1CKLOLBAITR,#R3 P CM O: SIFT OUT ITERI WND AL,UL FISR FEUF BIFE SEW NO ; D"AD "NDHIBET ICKTI;S )+R3,(R4 V MO OT NC"APTR "UT BD,CEANDV AIS" PC "CEIN;S 4 ,R#2 B SU T ENEMACPLIS DRDWACKBAC AL;C R4C,APTR B SU T SEFF OADLOT ENRRCUF OUEAL VET;G PCET,GPC R JS R LEAITRO NT IONTIUCTRNS IEDCKTA SUT;P + 3)(R+,P)(S V MO T LO SERILRA TENOPT EX;N3 ,RERNTOILPAITR V MO.PAGE ;PASS 1 IS NOW COMPLETED. NOW BEGIN PASS 2 TO FORM THE ;LOAD MODULE ITSELF, COMPLETE WITH HEADER AND TRAILER. ;THE METHOD IS SHOWN IN STEPS AS FOLLOWS: ;1) OPEN A TEMPORARY ELEMENT IN THE BATCH FILE AREA ;2) BUFFER IN ONE TEXT BLOCK AT A TIME FROM OBJ MODULES ;3) MODIFY RELOCATABLE CODE KEYED IN ASSOC'D RLD BLOCKS ;4) BUFFER MODIFIED TEXT OUT TO TEMPORARY LOAD MODULE  ADD R2,(SP) ;BUMP RTN ADDR APPROPRIATELY RTS PC .PAGE ; ******************************************************************** LODJ22: ;PROCESS NEXT RLD COMMAND MOV #ABSREL,ABSVAL ;INIT TO RELOCATABLE. (SEE [PTGLOB] MOVB (R1)+,R2 ;GET RLD COMMAND (NEGATIVE IF BYTE RELOC MOV R2,R4 ;WILL USE UNSIGNED COMMAND FOR INDEX BIC #-177-1,R4 ;LEAVE ONLY COMMAND: NO SIGN MOVB (R ASL R0 ASL R0 ASL R0 ASL R0 ASL R0 ASL R0 ;NOW HAVE RELATIVE PC FOR TRAILER START CMP (R0)+,(R0)+ ;ALLOW FOR 2-WORD TRAILER HEADER MOV R0,TRAPC ;INIT PERMANENT FOLLOWER OF TRAILER PC MOV R0,TRAPCSAVE ;SAVE IT FOR USE AT [LODK30] SUB #LDBYTS+4,R0 ;TRAILER START AS OFFSET FROM RELOC ZERO MOV R0,TXTBK1 ;PUT IN FIRST WORD OF LOAD MODULE 1.S HI TERFT ALLCEN PE OXTNEO TCEANDV;A PCRA,T#4 D AD: 10APTR E AG.P " UTTPTX "TOR O",UTDPAD;" ",UTBPSU "TOR HEIT EDEMAS WAL AL;C PC S RT T PRRR,EPC R JS ORRR EONTICALOREE YT;B 4 ,R0000105+#2 V MO: 25ERLD ONTIUCTRNS IEDCKTA SOP;P + P)(S T TS R LEAITRO TDD ATOY KA OD:OR;W 10APTR L BP ? NDMAOM CE"YT"BA S HI TAS;W R2 T TS : 05APTR N UR ;5) CREATE TRAILER FOR RELOCATING AT RUN TIME ;6) FILL IN THE HEADER AND TRAILER POINTERS ;7) DEFINE A ROS FILE AND TRANSFER LOAD MODULE TO IT ;8) MAKE APPROPRIATE CHECKS ON TASK DATA IN HEADER... ; ...AND INIT APPROPRIATE MONITOR TABLES FOR TASK ;THESE OPERATIONS ARE DONE A SECTOR AT A TIME, TO ;CONSERVE PROGRAM BUFFER SPACE. ; FIRST MUST INIT TRAILER AND OTHER POINTERS... 1)+,R3 ;OFFSET FROM TEXT COMMAND BEQ LODJ24 ;ZERO OFFSET IS A DUMMY SUB #4,R3 ;ADJ OFFSET DUE TO "TXT" CMD & "PC" WORD 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 R4,#CMDMAX ;IS COMMAND WITHIN LEGAL RANGE? BGT LDER20 ;ILLEGAL COMMAND TS CLR TXTORG ;PC @ BEGIN OF CURRENT TEXT BUFFER CLR HIGHPC ;INIT MEMORY OF HIGHEST PC MOV #LDBYTS,CURPC ;ALLOW FOR LEAD WORDS INSERTED BY LOADER MOV #LDBYTS+TXTBK1,TXTPTR ;...ALSO FOR TEXT POINTER MOV #128.,TXTCNT ;INIT FOR TWO-SECTOR TEXT TRANSFERS MOV #LODNAM,-(SP) ;MUST CONVERT LOAD ELEMENT NAME... MOV #BFNAME,-(SP) ;...TO RAD50 EMT R50PAK MOVB #1,BFTYPE ET R &ONTIUCTRNS IEDCKTA SOP PSO..;. PC S RT . ..LSBALO GTELUSOABR FOR LEAITRO ;N + P)(S T TS TEBYA S ESNL UERILRA TDO: ES;Y 05APTR E BN ? LEABATOCEL ROLMBSYS HI;T ALSVAB T TS T EX TTOIND OR WEDERLT AUT PSTIR;F T PUXT,TPC R JS ERILRA TLDUI BTOE INUTROUB;S : UTAPTR N IOCTRUSTIN" OC,LR1D AD "CKTA;S P)(S,-6701#6 V MO: UTDPAD UTAPTR BR N IOCTRUSTIN" OC,LR1B SU "CKTA;S ) SP-(7, 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 R0 ASR R0 ASR R0 ;PGM BYTES/128=# WHOLE SECTORS FOR PRGM INC R0 ;GET TO BEGIN OF NEXT SECTOR AFTER PGM MOV R0,R1 ;FIRST SECTOR FOR TRAILER ASL R0 T ASWICH ;SET TO IGNORE "ASECTS"? BEQ LODJ26 ;NO - O.K. TO GO THROUGH CMP R4,#7 ;ALLOWED TO PROCESS TYPE 7 "PC" CMD ONLY BNE LODJ60 ;IGNORE REST OF RLD BLOCK LODJ26: ASL R4 ;MAKE WORD INDEX JMP @LODJ29(R4) ;GO TO PROPER COMMAND ROUTINE .PAGE LODJ29: .WORD LDER20,CMD1,CMD2,CMD3,CMD4,CMD5,CMD6,CMD7,CMD8,CMD9 .WORD CMD2,LDER20,CMD4,CMD5,CMD6 ;THESE ARE .CSECT COMMAND ;TYPE = LOAD MODULE MOV #BFBLK1,-(SP) EMT BFENTR ;CREATE TEMP ELEMENT FOR LOAD MODULE TST BFBLK1 ;ERR? BNE LDER07 MOV BFSECT,R0 ;START SECTOR FOR ELEMENT W-R-T ROS FILE MOV R0,TXTSEC ;INIT REL SECT # FOR TEXT WRITES ADD R0,R1 ;GET FIRST TRAILER SECTOR MOV R1,TRASEC ;INIT IT MOV R1,TRSCSV ;...AND REMEMEBER IT FOR LATER MOV 1660#1 V MO: UTBPSU . RDWACKBAE BLLWI; ERILRA THE TOMFRS CEENEREF RLL ACEIN SE,IVATEG NIST ENEMACPLIS DISTH; PCRA T -ETFSOF+ C RPCU= L SPDI S: IXTTE; D OA LHE TINT ECBJ OTS IND AONTIUCTRNS ID"AD "HE TENWEET BNTMECELASPDI; E THR FOA ULRMFOE TH N.IOATOCEL RICAMYN DNGDIEE NXTTEE THN IRDWOE TH; , C"LO "ND AONITUCTRNS IHE TENWEET BNTMECELASPDIR PERO PHE TESATULLCCA; E INUTROUB SHE T. ONTICTLOREC MINADYG INCTFEEFS HU TN,IOUTECEXK AS TTO; ORRI PRECOO NT IADRES ILEDUMOASL R0 ASL R0 ASL R0 ASL R0 ASL R0 ASL R0 ;NOW HAVE RELATIVE PC FOR TRAILER START CMP (R0)+,(R0)+ ;ALLOW FOR 2-WORD TRAILER HEADER MOV R0,TRAPC ;INIT PERMANENT FOLLOWER OF TRAILER PC SUB #LDBYTS+4,R0 ;TRAILER START AS OFFSET FROM RELOC ZERO MOV R0,TXTBK1 ;PUT IN FIRST WORD OF LOAD MODULE CLR TXTORG ;PC @ BEGIN OF CURRENT TEXT BUFFS CMDMAX = .-LODJ29/2-1 LODJ98: JMP LODL00 ;END OF PASS 2: GO WRITE LOAD FILE ; ******************************************************************* LDER20: MOV #20,R4 ;ILLEGAL TEXT-MODIFICATION COMMAND 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 ;CURRENT MODULE NAME IN LSD  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 LODJ50 ;FOUND A "MODULE-END" D OA LHE TENWHD TECUXE EBEO TR,LEAITR; SKTAE THN IONTIUCTRNS IRDWOO-TW" OC,LR1D AD "ANS UT PNETIOUBRSU; " T U P A R T " ; E AG.P T PRRR,EPC R JS R ROERM SUCKHE CCKLO BOD MBJ;O 4 ,R#3 V MO: 03ERLD T PRRR,EPC R JS R ROERT UNCOE YT BCKLO;B 4 ,R#2 V MO: 02ERLD T PRRR,EPC R JS ORRR EADREK OCBLE ULOD MBJ;O 4 ,R#1 V MO: 01ERLD ******************************************************************** ; PC S RT: 80"ER MOV #LDBYTS,CURPC ;ALLOW FOR LEAD WORDS INSERTED BY LOADER MOV #LDBYTS+TXTBK1,TXTPTR ;...ALSO FOR TEXT POINTER MOV #128.,TXTCNT ;INIT FOR TWO-SECTOR TEXT TRANSFERS MOV LODTMP,BFNAME ;INIT BFUP NAME FOR OUTPUT LOAD MOD MOV LODTMP+2,BFNAME+2 MOVB #1,BFTYPE ;TYPE = LOAD MODULE MOV #BFBLK1,-(SP) EMT BFENTR ;CREATE TEMP ELEMENT FOR LOAD MODULE TST BFBLK1 # 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 BR LODJ10 $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: ;DONE WITH BLOCK: OUTPUT TEXT, IF ANTBNX N URET RD"OO"GR FOP UM;B ) SP,(#2 D AD T UNCOE YT BTADAH IT WR5T NI;I 5 ,RBC V MO: 70TBNX TEBYA AT DSTIR FTOS NTOI POW;N R0 C DE 0 ,RR5 V MO ES;Y 60TBNX T BG E?OV MTOS TEBYE OR;M R3 C DE NE OCKBAE YT BFTHI;S 0)(R-2+,0)(R VBMO: 60TBNX NE OCKBAS TEBYL ALE OV MTOD EE;N 3 ,RBC V MO D DEEE NONTICALOREO NN:VE;E 70TBNX Q BE D?ODE YT BTADAT RSFI&;ERR? BNE LDER07 MOV BFSECT,R0 ;START SECTOR FOR ELEMENT W-R-T ROS FILE MOV R0,TXTSEC ;INIT REL SECT # FOR TEXT WRITES ADD R0,R1 ;GET FIRST TRAILER SECTOR MOV R1,TRASEC ;INIT IT MOV R1,TRSCSV ;...AND REMEMEBER IT FOR LATER MOV MODCNT,NAMCTR ;RE-INIT COUNTER FOR # OF OBJECT MODULES MOV #NAMBUF,NAMPTR ;RE-INIT POINTER TO MODULE NAMES MOV #TRAILBLOCK+4,TR';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 SUB #2,R0 ;ADJUST BYTE COUNT... (Y, 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 LODJ69: ;"TSWICH" JUMP TABLE F ODRADS ;I 0 ,R#1 T BI E YT BTADAT RSFIO TTR PALOC LETES;R 0 ,RR5 V MO K OCBLT EX NOR FDYEA-RTR PLK BCEANDV;A R PTLK,BR0 V MO R ROERM SUCKHE;C 03ERLD E BN INEG@B" "1E THS DELUNC ILFSEITM SUCKHE;C R2 CBIN D ENT ATEBYA TREXE ONR FOK AC BGOO ;S 50TBNX E BG . ..TEBYM SUCKHE CESUDCLINT UNCOE YT;B ? IND ADO TESYT BTADAE OR;M R1 C DE *AILPOINTER ;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 LODJ50 ;FOUND A "MODULE-END" BLOCK BR LODK10 ;"TEXT" BLOCK BR LODJ18 ;"RLD" BLOCK BR LODJ12 ;"ISD" BLOCK: IGNORE + TST (R1)+ ;...AND POINTER FOR "PC" AS 1ST TXT WORD 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 ; "HIGHPC" REMEMBERS THE HIGHEST VALUE OF PC INTO WHICH TEXT HAS ; BEEN LOADED. IF THE CURRENT TEX, 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 ; ******************************************************************* LDER07:MOV #7,R4 ;"BFENTR" ERROR JSR PC,ERRPRT LDER ND.E Y ORCTREDIL BOYM SERADLOF OND;E . = NDDELS E BLTAL BOYM SOR FCEPA SVEERES;R +.*2SZSD$L.=.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: ;DONE WITH BLOCK: OUTPUT TEXT, IF ANY, AND CONTINUE JSR PC,TXTOUT ;GO OUTPUT TEXT, IF BUFFER IS FULL... ; ;...OR IF "CURPC" WAS CHANGED LODJ/T BLOCK HAS ANY TEXT BELOW ; THIS UPPER BOUND, THE TRAILER MUST BE SCANNED FOR ANY POSSIBLE ; RELOCATING INSTRUCTIONS AFFECTING THIS AREA. ANY SUCH ; INSTRUCTIONS MUST BE VOIDED, SINCE NEW TEXT IS BEING LOADED. ; THE VOIDING IS ACCOMPLISHED BY REPLACING THE "ADD" OR "SUB" ; INSTRUCTION WITH A "BR .+4" INSTRUCTION LODK30: MOV CURPC,R0 MOV R0,R1 ADD TXTBC,R1 DEC R1 ;UPPER BOUND OF CURRENT TEXT BLOCK CMP 012: MOV #12,R4 ;MAX T-JUMP 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 COM 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 *7BJXO$M 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 . .+*8BJXO$M.=: UFMBNA ******************************************************************** ; OLMB266: ;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 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 LODJ503 R0,HIGHPC BHI LODK35 ;CURRENT TEXT IS ABOVE ANY PREVIOUS MOV TRASEC,-(SP) ;SAVE NUMBER OF CURRENT TRAILER SECTOR MOV TRSCSV,R5 ;NUMBER OF FIRST TRAILER SECTOR MOV TRAPCSAVE,R4 ;PC OF FIRST RELOCATION INSTRUCTION CMP R5,(SP) ;FIRST TRAILER SECTOR STILL BEING BUILT? BEQ LODK32 ;AVOID R/W IF SO LODK31: JSR PC,TRAILIO ;WRITE OUT CURRENT SECTOR CLRB TRAR.W 4MANDS ABOVE [6], BUT WILL ;INSTEAD 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 SUB #2,R0 ;COUNT OFF TWO BYTES FOR COMMAND SUB #2,R2 ;DISCARD COMMANDS BELOW 3. BLE SYD 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 "ERILRA;T 0 D OR.W C:APTR CKLO BERILRA TINE ACSPT EX;N 0D OR.W : ERNT6 ;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 ; ******************************************************************* LDER07:MOV #7,R4 ;"BFENTR" ERROR JSR PC,ERRPRT LDER12: MOV #12,R4 ;MAX T-JUMP TABLE INDEX EXCEEDED JSR PC,ERRPRT GETBLK: ;SUBROUTINE TO GET A NON-GSD BLOCK. KEEPS FETCHING BLOC7;READ MOV R5,TRASEC JSR PC,TRAILIO ;READ IN (NEXT) SECTOR INCB TRAR.W ;PREPARE FOR WRITE LODK32: MOV #TRAILBLOCK+2,R3 ;PTR TO LOCAL BUFFER LODK33: MOV R4,R2 ;VALUE OF PC IN TRAILER (AFTER FETCH) ADD (R3),R2 ;RELATIVE ADDRESSING TO TEXT WORD CMP R2,R0 ;DOES IT FALL WITHIN CURRENT TEXT RANGE? BLO LODK34 ;BELOW IT CMP R2,R1 BHI LODK348GETBLK ;IGNORE THEM AND GET NEXT 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 (NEGATIVE IF BYTE RELOC MOV R2,R4 ;WILL USE UNSIGNEDOILPAITR L BOYM SEDINEF DOR FSD LING INENOPT EX;N 0 D OR.W : MESY LEDUMOA N INGDIEA RENWHR TEUNCOR TOEC;S 0 D OR.W: CTCTSE D LSN IMENAN IOCTSET ENRRCUO TERNTOI;P 0 D OR.W: CTSEPT C ENQUSEO ER-ZNE ONGTIECET DOR FERNTOI;P 0 D OR.W: .0R1PT SD LINY TREND MOJ OBT ENRRCUO TERNTOI;P 0 D OR.W: BJROPT E IZ SAMGRRO PNTREUR;C 0 D OR.W: ZESIPR 0 1, E YT.B: ROEZON E ULOD MADLOF OINEG BOMFRT SEFF OPSEE;K 0 : ET:KS ;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 ;INSTEAD MIS-INTERPRET THEM FOR ONE OF THE LEGAL ONES. JSR PC,NXTBLK ;GET NEXT OBJECT MODULE BLOCK ; ;ABOVE IT MOV #401,-2(R3) ;VOID WITH "BR .+4" INSTRUCTION LODK34: CMP (R3)+,(R3)+ ;BUMP BOTH BUFFER POINTER... CMP (R4)+,(R4)+ ;...AND TRAILER PC CMP R3,#TRAILBLOCK+126. ;REACHED END OF BUFFER? BLOS LODK33 ;NOT YET INC R5 ;ADVANCE TO NEXT SECTOR CMP R5,(SP) ;IF SECTOR JUST FINISHED WAS THE SECTOR ; THAT WAS BEING CREATED WHEN WE ENTERED, LEAVE IT IN CORE. < COMMAND FOR INDEX BIC #-177-1,R4 ;LEAVE ONLY COMMAND: NO SIGN MOVB (R1)+,R3 ;OFFSET FROM TEXT COMMAND BEQ LODJ24 ;ZERO OFFSET IS A DUMMY SUB #4,R3 ;ADJ OFFSET DUE TO "TXT" CMD & "PC" WORD 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 R4,#CMDMAXFSOF T IS LUTNP IINS MENAO TERNTOI;P 0 : TRMPNA Y TTM RO FUTNP IESAM NOR FERNTOU;C 0 : TRMCNA T ENEMELY ARORMPTER DEOA LOFE AM;N " MP"T 50AD.R " OD"L 50AD.R: MPDTLO NKLIO TESULOD MOF# F ONTOU;C 0 D OR.W: NTDCMO " PC "VETILAREF OUEAL VNTREUR;C 0 D OR.W C:RPCU E ULOD MINK OCBLT RSFIR FOG LA;F 0 : K1OCBL CKLO BUTNP IINE ACPLT ENRRCUO TERNTOI;P 0 D OR.W: TRKPBL T UNCOE YT;B 0 D OR.W : BC " TSECAS "> 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 SUB #2,R0 ;COUNT OFF TWO BYTES FOR COMMAND SUB #2,R2 ;DISCARD COMMANDS BELOW 3. BLE GETBLK ;IGNORE THEM AND GET NEXT BLOCK BIC #-3-1,R2 ;CHANGE 4 (MND=4+2) TO ZERO ASL R2 ;CHANGE TO BYT? BLE LODK31 ;ELSE WRITE IT OUT AND READ NEXT ONE IN TST (SP)+ ;POP SAVE OF CURRENT SECTOR # LODK35: CMP R1,HIGHPC ;SEE IF WE MUST UPDATE HIGHEST PC BLOS LODK36 MOV R1,HIGHPC LODK36: CLR TSWICH ;INDICATE FIRST TXT BLCOK JSR PC,GETBLK ;GET NEXT NON-GSD BLOCK BR LODK40 ;"MODULE-END" BR LODK50 ;"TEXT" BR LODK38 ;"RLD" @ ;IS COMMAND WITHIN LEGAL RANGE? BGT LDER20 ;ILLEGAL COMMAND TST ASWICH ;SET TO IGNORE "ASECTS"? BEQ LODJ26 ;NO - O.K. TO GO THROUGH CMP R4,#7 ;ALLOWED TO PROCESS TYPE 7 "PC" CMD ONLY BNE LODJ60 ;IGNORE REST OF RLD BLOCK LODJ26: ASL R4 ;MAKE WORD INDEX JMP @LODJ29(R4) ;GO TO PROPER COMMAND ROUTINE .PAGE LODJ29: .WORD LDER20,CMD1,CMD2,CMD3,NGRINOIGR FOH TCWI;S 0 D OR.W: CHWIAS OLMBSYT ENRRCUR FOG LA FOCEL/RBS;A 0 D OR.W: ALSVAB E AG.P F RED NEFIDEUNF OMENAN IRSHA CIX;S , ,,,, E YT.B: AMDNUN 0 D OR.W 6 D OR.W: EFDDUN ******************************************************************** ; N VE.E 6:D0EN LF E YT.B S"CEENEREF REDINEFND"U IISC.A F ,LLF E YT.B */********/* IISC.A 0 D OR.W . 4-6-D0EN D OR.W: EDDHUN E AG.P BE INDEX ADD R2,(SP) ;BUMP RTN ADDR APPROPRIATELY RTS PC .PAGE ; ******************************************************************** LODJ22: ;PROCESS NEXT RLD COMMAND MOVB (R1)+,R2 ;GET RLD COMMAND (NEGATIVE IF BYTE RELOC MOV R2,R4 ;WILL USE UNSIGNED COMMAND FOR INDEX BIC #-177-1,R4 ;LEAVE ONLY COMMAND: NO SIGN MOVB (R1)+,R3 ;OFFSET FROM TEXT COMMAND BEQ C BR LODK36 ;ISD: IGNORE LODK38: JMP LODJ22 LODK40: ;TEXT FOLLOWED BY MODULE - END MOV #2,TSWICH ;PUT OUT TEXT: THEN GET NEW MODULE BR LODK52 ;GO OUTPUT TEXT LODK50: ;TEXT FOLLOWED BY TEXT MOV #1,TSWICH ;INDICATE MORE TEXT AFTER OUTPUT THIS 1. LODK52: JMP LODJ60 ;GO OUTPUT UN-MODIFIED TEXT BLOCK ; ******************************************************************** LDER21: MOV DCMD4,CMD5,CMD6,CMD7,CMD8,CMD9 .WORD CMD2,LDER17,CMD4,CMD5,CMD6 ;THESE ARE .CSECT COMMANDS CMDMAX = .-LODJ29/2-1 LODJ98: JMP LODL00 ;END OF PASS 2: GO WRITE LOAD FILE ; ******************************************************************* LDER20: MOV #20,R4 ;ILLEGAL TEXT-MODIFICATION COMMAND JSR PC,ERRPRT .PAGE LODJ50: ;MODULE-END BLOCK FOUND: ;MOVE MODULE POINTER "PTROBJ" TO NEXT MODULE NAME IN LSD; N VE.E 5:D0EN 0 0,0,0,0,0, E YT.B: ALBVGL ; ,'' 0,0,0,0,0,0, E YT.B: ALOBGL " " IISC.A G LA FM" "LEIBSSPOT PUO TCELA;P 0 E YT.B G:LAMF " " IISC.A T ,H' E YT.B 0 D OR.W . 4-5-D0EN D OR.W Y:TREN E AG.P ******************************************************************** ; N VE.E 4:D0EN 0 0,0,0,0,0, E YT.B: IZMSCU HT0,0,0,0,0,0, E YT.B: IZCSSE HT0,0,0,0,0,0, E YT.B: ALCVSE HTT,,H'> E YT.B FLODJ24 ;ZERO OFFSET IS A DUMMY SUB #4,R3 ;ADJ OFFSET DUE TO "TXT" CMD & "PC" WORD 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 R4,#CMDMAX ;IS COMMAND WITHIN LEGAL RANGE? BGT LDER20 ;ILLEGAL COMMAND TST ASWICH ;SET TO IGNORE "ASECTS"? BEG #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 JSR PC,ADDPUT ;PUT WORD IN TEXT AND "ADD" INTO TRAILER SUB #4,R0 ;BC BR LODJ99 LODJ32: CMD2: ;GLOBAL RELOCATION: H ;THEN BRING IN NEXT OBJECT MODULE MOV PTROBJ,R2 ;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 0 0,0,0,0,0, E YT.B: AMCNSE '< E YT.B 0 D OR.W . 4-4-D0EN D OR.W : CTSE E AG.P N VE.E 3:D0EN " ALOT"T IISC.A HT E YT.B E"IZ"S IISC.A HT E YT.B T"SEFF"O IISC.A HT E YT.B " RYNT"E IISC.A T ,HHT E YT.B " ONTIEC"S IISC.A F ,L']0,0,0,0,0,0, E YT.B E:TLTI [" E:TLTIE ULOD"M IISC.A LF E YT.B *"********"* IISC.A 0 D OR.W . 4-3-D0EN D OR.W: LEJQ LODJ26 ;NO - O.K. TO GO THROUGH CMP R4,#7 ;ALLOWED TO PROCESS TYPE 7 "PC" CMD ONLY BNE LODJ60 ;IGNORE REST OF RLD BLOCK LODJ26: ASL R4 ;MAKE WORD INDEX JMP @LODJ29(R4) ;GO TO PROPER COMMAND ROUTINE .PAGE 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 LODJ98: JMP LODL00KOFFSET FROM LOAD BASE INTO TEXT - ;"ADD" INTO TRAILER (SUPPRESSED IF GLOBAL IS ABSOLUTE) MOV R1,R4 ;POINTS TO GLOBAL NAME CMP (R1)+,(R1)+ ;BUMP PTR PAST NAME JSR PC,SRGLOB ;SEARCH FOR NAME IN LSD JSR PC,ADDPUT ;PUT WORD IN TEXT AND "ADD" INTO TRAILER SUB #6,R0 ;BC LODJ99: JMP LODJ20 ;COMMON RETURN (GET NEXT RLD COMMAND) LODJ34: CMD3: ;INTERNAL DISPLACED RELOCATION: L MOV R2,PTROBJ ;POINTER TO NEXT OBJ MOD ENTRY IN LSD 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 DUMO E AG.P N VE.E 1:D0EN F ,LLF E YT.B ****P MAD OA LODSLRO* **"* IISC.A FF E YT.B 0 D OR.W . 4-1-D0EN D OR.W: NGDIHE ******************************************************************** ; N VE.E: NDNEER CR E YT.B 0 0,0, E YT.B: UMRNER " #ORRR"E IISC.A CR E YT.B 0 D OR.W E AGSSMER ROERN IRSHA C;# -4-.NDNEER: SGRMER E AG.P N VE.E: ND2END CR E YT.B D"EN2 #SSPAD LOOSN ;END OF PASS 2: GO WRITE LOAD FILE ; ******************************************************************* LDER20: MOV #20,R4 ;ILLEGAL TEXT-MODIFICATION COMMAND 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 ;CURRENT MODULE NAME IN LSD ADD #5,R2 ;POINT TO FLAGS BYTE LOO ;DISPLACEMENT FROM CURRENT PC INTO TEST - ;"SUB BIAS" INSTRUCTION INTO TRAILER JSR PC,GETPCR ;GET PC AS OFFSET FROM RELOCATABLE ZERO NEG R4 ADD (R1)+,R4 ;FORM (L-(.+2)) JSR PC,SUBPUT ;PUT WORD IN TEXT AND "SUB" INTO TRAILER SUB #4,R0 ;BC BR LODJ99 ;NEXT .PAGE LODJ36: CMD4: ;GLOBAL DISPLACED RELOCATION: ;DISPLACEMENT FRP LODJ12 ;YES: GO GET NEXT BLOCK SUB #2,R0 ;ADJUST BYTE COUNT... TST (R1)+ ;...AND POINTER FOR "PC" AS 1ST TXT WORD 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 ; "HIG"R IISC.A CR E YT.B 0 D OR.W -4-.ND2END: SG2MND ******************************************************************** ; N VE.E: NDS2PA CR E YT.B N"GIBE2 #SSPAD LOOS"R IISC.A CR E YT.B 0 D OR.W GESAES M2"S AS"PN IRSHA C;# -4-.NDS2PA: MGS2PA ******************************************************************** ; N VE.E: ND1END CR E YT.B D"EN1 #SSPAD LOOS"R IISC.A CR E YT.B 0 D OR.W RDJ52: 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 BR LODJ10 ;INIT FOR NEXT MODULE .PAGE LODK10: SOM CURRENT PC INTO TEXT ;"SUB" IN TRAILER ONLY IF GLOBAL IS ABSOLUTE; I.E., MONITOR SYMB JSR PC,GETPCR ;GET PC AS OFFSET FROM RELOCATABLE ZERO MOV R4,R5 ;SAVE IT MOV R1,R4 ;PTR TO GLOBAL NAME CMP (R1)+,(R1)+ ;BUMP PAST NAME JSR PC,SRGLOB ;SEARCH FOR GLOBAL SUB R5,R4 ;GET DISPLACEMENT SUB #ABSREL,ABSVAL ;INVERT SENSE OF ABSOLUTE FLAG JSR PC,SUBTHPC" REMEMBERS THE HIGHEST VALUE OF PC INTO WHICH TEXT HAS ; BEEN LOADED. IF THE CURRENT TEXT BLOCK HAS ANY TEXT BELOW ; THIS UPPER BOUND, THE TRAILER MUST BE SCANNED FOR ANY POSSIBLE ; RELOCATING INSTRUCTIONS AFFECTING THIS AREA. ANY SUCH ; INSTRUCTIONS MUST BE VOIDED, SINCE NEW TEXT IS BEING LOADED. ; THE VOIDING IS ACCOMPLISHED BY REPLACING THE "ADD" OR "SUB" ; INSTRUCTION WITH A "BR .+4" INSTRUCTION LODK30: MOV CURPC,R0 MOV R0,R1 E AGSSME" 1ND"EN IRSHA C;# -4-.ND1END: SG1MND ******************************************************************** ; N VE.E D:ENID # ,'CR E YT.B " IA ID LOOS"R IISC.A CR E YT.B 0 D OR.W GESAES MD.I.N IRSHA C;# 4 .-D-ENID G:MSID E AG.P L UL FENWHT PUUT OA:RE ALDUI BERILRA;T 8.12.+.= : CKLOLBAITR E IM T AATR TOEC SNE OTERI;W . 64 D OR.W ERMBNUR TOEC SERILRA;T 0 D V;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 SUB #2,R0 ;ADJUST BYTE COUNT... TST (R1)+ ;...AND POINTER FOR "PC" AWPUT ;INSERT "SUB" ONLY IF ABSOLUTE SUB #6,R0 ;BC BR LODJ99 ;NEXT RLD LODJ38: CMD5: ;GLOBAL ADDITIVE RELOCATION: ;PUT SUM OF CONSTANT & GLOBAL (OFFSET::0) INTO TEXT; ;"ADD" INTO TRAILER (SUPPRESSED IF GLOBAL IS ABSOLUTE) MOV R1,R4 ;PTR TO GLOBAL NAME JSR PC,SRGLOB ;SEARCH LSD FOR IT CMP (R1)+,(R1)+ ;BUMP PAST GLOBAL TO CONSTANT ADD (R1)+,R4 X ADD TXTBC,R1 DEC R1 ;UPPER BOUND OF CURRENT TEXT BLOCK CMP R0,HIGHPC BHI LODK35 ;CURRENT TEXT IS ABOVE ANY PREVIOUS MOV TRASEC,-(SP) ;SAVE NUMBER OF CURRENT TRAILER SECTOR MOV TRSCSV,R5 ;NUMBER OF FIRST TRAILER SECTOR MOV TRAPCSAVE,R4 ;PC OF FIRST RELOCATION INSTRUCTION CMP R5,(SP) ;FIRST TRAILER SECTOR STILL BEING BUILT? BEQ LODK32 ;AVOID R/WOR.W: ECASTR 0 0,0, D OR.W A RE AERILRA TOMFRE ITWRS AYLW;A 1 E YT.B: .WARTR 0 E YT.B E IL FCHAT BOR FD.I.E IL;F IDCHBT D OR.W ESITWRR LEAITRR FOR DEEA;H : EDAHTR ******************************************************************** ; A AT DCTJEOBR FOK OCBLD ONEC;S 8.12.+.=: K2JBOB TADAT ECBJ OOR FCKLO BSTIR;F 8.12.+.=: K1JBOB S ORCTSEO TWN IADRES AYLW;A 8.12 D OR.W R BEUM NORCTSEZS 1ST TXT WORD 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 LODK40 ;"MODULE-END" [ ;CONST + XSYM JSR PC,ADDPUT ;PUT WORD IN TEXT AND "ADD" INTO TRAILER SUB #8.,R0 ;BC BR LODJ99 ;NEXT RLD LODJ40: CMD6: ;GLOBAL ADDITIVE DISPLACED: ;SUM OF CONST & GLOBAL, LESS CURRENT OFFSET, TO FORM ;DISPLACEMENT TO PUT INTO TEXT; ;"SUB" IN TRAILER ONLY IF GLOBAL IS ABSOLUTE; I.E., MONITOR SYMB JSR PC,GETPCR ;GET PC AS OFFSET FROM RELOCATABLE ZERO MOV \ IF SO LODK31: JSR PC,TRAILIO ;WRITE OUT CURRENT SECTOR CLRB TRAR.W ;READ MOV R5,TRASEC JSR PC,TRAILIO ;READ IN (NEXT) SECTOR INCB TRAR.W ;PREPARE FOR WRITE LODK32: MOV #TRAILBLOCK+2,R3 ;PTR TO LOCAL BUFFER LODK33: MOV R4,R2 ;VALUE OF PC IN TRAILER (AFTER FETCH) ADD (R3),R2 ;RELATIVE ADDRESSING TO TEXT WORD CMP R2,R0 ;DOES IT FALL WITHIN CURRENT TEXE IVATEL;R 0 D OR.W: ECJSOB 0 0,0, D OR.W AGFLE ITWRD/EA;R 0 E YT.B ORCTSEE IVATEL;R 0 E YT.B E IL FCHAT BOR FD.I.E IL;F IDCHBT D OR.W ESULOD MCTJEOBG INADRER FOR DEEA;H : EDJHOB ******************************************************************** ; K OCBLE AV SXTTED ONEC;S 8.12.+.=: K2TBTX CKLO BVESAT EX TSTIR;F 8.12.+.=: K1TBTX METIH AC EERSFANTRO TDSOR W;# ^ 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 LODK52 ;GO OUTPUT TEXT LODK50: ;TEXT FOLLOWED BY TEXT MOV #1,TSWICH ;INDICATE MORE TEXT AFTER OUTPUT THIS 1. LODK52: JMP LODJ60 ;GO OUTPUT UN-MODIFIED TEXT BLOCK ; ******************************_R4,R5 ;SAVE IT MOV R1,R4 ;GLOBAL NAME PTR JSR PC,SRGLOB ;SEARCH FOR NAME IN LSD CMP (R1)+,(R1)+ ;BUMP PAST NAME TO CONST ADD (R1)+,R4 ;C+XSYM SUB R5,R4 ;C+XSYM-PC= DISPLACEMENT SUB #ABSREL,ABSVAL ;INVERT SENSE OF ABSOLUTE FLAG JSR PC,SUBPUT ;INSERT "SUB" ONLY IF ABSOLUTE SUB #8.,R0 ;BC BR LODJ99 ;NEXT RLD LODJ42`T RANGE? BLO LODK34 ;BELOW IT CMP R2,R1 BHI LODK34 ;ABOVE IT MOV #401,-2(R3) ;VOID WITH "BR .+4" INSTRUCTION LODK34: CMP (R3)+,(R3)+ ;BUMP BOTH BUFFER POINTER... CMP (R4)+,(R4)+ ;...AND TRAILER PC CMP R3,#TRAILBLOCK+126. ;REACHED END OF BUFFER? BLOS LODK33 ;NOT YET INC R5 ;ADVANCE TO NEXT SECTOR CMP R5,(SP) ;IF SECTOR 0 D OR.W: NTTCTX XTTEE OTRI/WADREO TORCTSEE IVATEL;R 0 D OR.W: ECTSTX 0 0,0, D OR.W E YT BTERI/WADRET EX;T 0 E YT.B: .WTRTX ORCTSEE IVATEL;R 0 E YT.B E IL FCHAT BOR FD.I.E IL;F IDCHBT D OR.W NSIOATEROPE ITWRD/EA RERFFBUE AV SXTTER FOR DEEA;H : EDTHTX E AG.P ******************************************************************** ; LEFIN IRSTOEC S;# 0 D OR.W PETYE IL;Fb************************************** 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 JSR PC,ADDPUT ;PUT WORD IN TEXT AND "ADD" INTO TRAILER SUB #4,R0 ;BC c: CMD7: ;SET CURRENT PC AND POINT TO NEW SECTION ;IF .ASECT, THE CONSTANT WILL BE THE NEW PC, AND ITS ;BASE WILL BE ZERO. ;IF .CSECT, THE CONSTANT WILL REPRESENT THE OFFSET FROM ;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 d JUST FINISHED WAS THE SECTOR ; THAT WAS BEING CREATED WHEN WE ENTERED, LEAVE IT IN CORE. BLE LODK31 ;ELSE WRITE IT OUT AND READ NEXT ONE IN TST (SP)+ ;POP SAVE OF CURRENT SECTOR # LODK35: CMP R1,HIGHPC ;SEE IF WE MUST UPDATE HIGHEST PC BLOS LODK36 MOV R1,HIGHPC LODK36: CLR TSWICH ;INDICATE FIRST TXT BLCOK JSR PC,GETBLK ;GET NEXT NON-GSD BLOCK BR LODK40 0 D OR.W D.I.E IL;F 0 D OR.W RYTOECIR DRECOF IEDRNTURE: FD;I 0 D OR.W K TSRR,EORRR;E 0 0, E YT.B T IS LE"IL FNEFIDE;" 1 D OR.W: STLIDF * ****************************************************************** ; S)ORCTSEF O(#H GTEN LNTMELE;E 0 D OR.W: ZESIBF ) VETILAREE IL(FR TOEC SRTTA SNTMELE;E 0 D OR.W: CTSEBF E YP TNTMELE;E 0 E YT.B: PETYBF S TUf 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 JSR PC,ADDPUT ;PUT WORD IN TEXT AND "ADD" INTO TRAILER SUB #6,R0 ;BC LODJ99: JMP LODJ20 ;COMMON RETURN (GET NEXT RLD COMMAND) LODJ34: CMD3: ;INTERNAL g 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 THIS AN "ASECT"? BNE LODJ44 ;NO-O.K. TO CONTINUE INC ASWICH ;SET TO FORCE IGNORE OF ALL "ASECT" TEXT ; CONTINUE AS IN "CMD8" .PAGE LODJ44: CMD8: ;MODIFICATION TO PC: ".=.+C" ;Bh;"MODULE-END" BR LODK50 ;"TEXT" BR LODK38 ;"RLD" BR LODK30 ;ISD: IGNORE LODK38: JMP LODJ22 LODK40: ;TEXT FOLLOWED BY MODULE - END MOV #2,TSWICH ;PUT OUT TEXT: THEN GET NEW MODULE BR LODK52 ;GO OUTPUT TEXT LODK50: ;TEXT FOLLOWED BY TEXT MOV #1,TSWICH ;INDICATE MORE TEXT AFTER OUTPUT THIS 1. LODK52: JMP LODJ60 ;GO OUTPUT UN-MODIFIED TEXTA SNTMELE;E 0 E YT.B: ATSTBF 0 0, D OR.W: MENABF # E IL;F 0 D OR.W D OR WORRR;E 0 D OR.W: K1BLBF T IS LP"FU"B ; * ****************************************************************** ; ERFFBUA AT;D EDAHTR D OR.W EDRVSERED,OR WORRR;E 0 0, D OR.W: RRAETR ELEV;LORRR;E 3 0, E YT.B 0 D OR.W D ENSPSUC,IS;D 2 1, E YT.B R LEAITRR FOT IS;L 1 D OR.WjDISPLACED RELOCATION: ;DISPLACEMENT FROM CURRENT PC INTO TEST - ;"SUB BIAS" INSTRUCTION INTO TRAILER JSR PC,GETPCR ;GET PC AS OFFSET FROM RELOCATABLE ZERO NEG R4 ADD (R1)+,R4 ;FORM (L-(.+2)) JSR PC,SUBPUT ;PUT WORD IN TEXT AND "SUB" INTO TRAILER SUB #4,R0 ;BC BR LODJ99 ;NEXT .PAGE LODJ36: CMD4: ;GLOBAL DISPLACED RELOCATION: kUMP 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 #LDBYTS,R4 ;KEEP OFFSET DUE TO INSERTED LEADER WRDS MOV R4,CURPC ;NEW VALUE OF NEXT TEXT BLOCK'S BASE ;(AS OFFSET FROM LOAD MODULE'S BASE) CLR TXTBC ;AVOID ALTERING NEW [CURPC] IN "TXTOUT" SUB #4,R0 ;2 WDS FOR CMD8;lT 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 JSR PC,ADDPUT ;PUT WORD IN TEXT AND "ADD" INTO TRAILER : STALTR E AG.P A RE AXTTEO /TOMFRW R/S AYLW;A EDTHTX D OR.W EDRVSERED,OR WORRR;E 0 0, D OR.W: RRTETX ELEV,LORRR;E 3 0, E YT.B 0 D OR.W NDPEUS SC;IS;D 2 1, E YT.B A RE AXTTEM RO/FTOS ERSFANTRR FOT IS;L 1 D OR.W: STTLTX * ****************************************************************** ; N RUG INUR DENOSCH: ERFFBUA AT;D 0 D OR.W: UFPBMA D VEERES;R 0 0, D OR.W n ;DISPLACEMENT FROM CURRENT PC INTO TEXT ;NO TRAILER ELEMENT JSR PC,GETPCR ;GET PC AS OFFSET FROM RELOCATABLE ZERO MOV R4,R5 ;SAVE IT MOV R1,R4 ;PTR TO GLOBAL NAME CMP (R1)+,(R1)+ ;BUMP PAST NAME JSR PC,SRGLOB ;SEARCH FOR GLOBAL SUB R5,R4 ;GET DISPLACEMENT JSR PC,TXTPUT ;PUT ALTERED WORD INTO TEXT SUB #6,R0 ;BC o 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 COMMAND "PC DEFINITION"? BEQ LODJ99 ;YES: O.K. CMPB #PCMD2,(R1) ;IS IT "PC MODIFICATION"? BEQ LODJ99 ;YES: O.K. BR LDER24 ;PC COMMAND NOT LAST IN RLD .PAGE LODJ46: CMD9: ;SET PROGRAM LIMITS CLR R4 p 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 JSR PC,ADDPUT ;PUT WORD IN TEXT AND "ADD" INTO TRAILER SUB #6,R0 ;BC LODJ99: JMP LODJ20 ;COMMON RETURN (GET NEXT ELEV,LORRR;E 0 0, E YT.B E ETPLOM C/O;I 0 D OR.W D ENSPSUR,TEINPRE IN;L 2 3, E YT.B AP MADLOR FOT IS;L 1 D OR.W: STPLMA * ****************************************************************** ; ERFFBUA AT;D EDJHOB D OR.W D VEERES RD,OR WORRR;E 0 0, D OR.W: RRJEOB TYRIIOPRT ESQUREC IS DK,AS TRR;E 3 0, E YT.B 0 D OR.W NDPEUS SC:IS;D 2 1, E YTr BR LODJ99 ;NEXT RLD LODJ38: CMD5: ;GLOBAL ADDITIVE RELOCATION: ;PUT SUM OF CONSTANT & GLOBAL (OFFSET::0) INTO TEXT; ;PUT "ADD" INTO TRAILER MOV R1,R4 ;PTR TO GLOBAL NAME JSR PC,SRGLOB ;SEARCH LSD FOR IT CMP (R1)+,(R1)+ ;BUMP PAST GLOBAL TO CONSTANT ADD (R1)+,R4 ;CONST + XSYM JSR PC,ADDPUT ;PUT WORD IN TEXT AND "ADD" INTO TRAILER SUB s ;LOW PROGRAM (RELATIVE) ADDRESS JSR PC,ADDPUT ;PUT IT IN TEXT AND AN "ADD" IN TRAILER ADD #2,OFFSET ;BUMP TO NEXT TEXT WORD MOV PRSIZE,R4 ;FIRST AVAILABLE ADDRESS ABOVE PROGRAM JSR PC,ADDPUT ;STICK IT IN,TOO, WITH TRAILER "ADD" BR LODJ99 ; ******************************************************************* LDER23: MOV #23,R4 ;SECTION NAME SEARCH FAILURE JSR PC,ERRPRT t RLD COMMAND) LODJ34: CMD3: ;INTERNAL DISPLACED RELOCATION: ;DISPLACEMENT FROM CURRENT PC INTO TEST - ;"SUB BIAS" INSTRUCTION INTO TRAILER JSR PC,GETPCR ;GET PC AS OFFSET FROM RELOCATABLE ZERO NEG R4 ADD (R1)+,R4 ;FORM (L-(.+2)) JSR PC,SUBPUT ;PUT WORD IN TEXT AND "SUB" INTO TRAILER SUB #4,R0 ;BC BR LODJ99 ;NEXT .PAGE LODJ36: CMD4: .B STLID EA RLEDUMOT ECBJ;O 1 D OR.W: STJLOB ******************************************************************** ; ERFFBUA AT;D 0 D OR.W: UFYBTT D VEERES;R 0 0, D OR.W ELEV,LORRR;E 0 0, E YT.B E ETPLOM C/O;I 0 D OR.W D ENSPSU: PETYL AL C1; #TY TE:ICEV;D 2 0, E YT.B STLIO I/E YPETEL;T 1 D OR.W: STYLTT E AG.P CEENQUSE" SELO"CA VIT XI;E 28DLLOv #8.,R0 ;BC BR LODJ99 ;NEXT RLD LODJ40: CMD6: ;GLOBAL ADDITIVE DISPLACED: ;SUM OF CONST & GLOBAL, LESS CURRENT OFFSET, TO FORM ;DISPLACEMENT TO PUT INTO TEXT; ;NO TRAILER ELEMENT JSR PC,GETPCR ;GET PC AS OFFSET FROM RELOCATABLE ZERO MOV R4,R5 ;SAVE IT MOV R1,R4 ;GLOBAL NAME PTR JSR PC,SRGLOB ;SEARCH FOR NAME IN LSD CMP wLDER24: MOV #24,R4 ;FATAL ERROR: PC CMD NOT LAST IN RLD JSR PC,ERRPRT .PAGE LODL00: ;NOW DONE WITH PASS 2: OUTPUT ANY REMAINING TEXT, THEN ; OUTPUT THE TRAILER. FIX UP MONITOR TASK TABLES; EXIT. MOV #64.,TXTCNT ;WANT TO WRITE ONLY ONE SECTOR MOVB #1,TXTR.W ;WRITE JSR PC,TEXTIO ;GO READ OR WRITE WITH"TXTLST" MOV #207,@TRAILPOINTER ;[RTS PC] INTO FINAL TRAILER WRD x ;GLOBAL DISPLACED RELOCATION: ;DISPLACEMENT FROM CURRENT PC INTO TEXT ;NO TRAILER ELEMENT JSR PC,GETPCR ;GET PC AS OFFSET FROM RELOCATABLE ZERO MOV R4,R5 ;SAVE IT MOV R1,R4 ;PTR TO GLOBAL NAME CMP (R1)+,(R1)+ ;BUMP PAST NAME JSR PC,SRGLOB ;SEARCH FOR GLOBAL SUB R5,R4 ;GET DISPLACEMENT JSR PC,TXTPUT ;PUT ALTERED WORD INTO T P JM: 10RPER D TEESQUREN URET;R PC S RT N URET RSTUEEQ ROT NID D #ORRR;E 10RPER L BP R4H IT WESOD CET SND ARETOES;R P POEG,RR5 R JS GESAES MSTUEEQ;R UTYOTT T EM ) SP-(T,LSTY#T V MO GESAES MORRR ENGTIINPRR FOT NI;I UFYBTTG,MSRR#E V MO ONSIERNVCOO TNTOI PRYNT ERYDAONEC SSE;U A NT2O,BPC R JS R ERMBNUE AGSSMER HA-C 3;A 2 ,R#3 V MO ERFFBUI CIASN IARCHT AS;L z (R1)+,(R1)+ ;BUMP PAST NAME TO CONST ADD (R1)+,R4 ;C+XSYM SUB R5,R4 ;C+XSYM-PC= DISPLACEMENT JSR PC,TXTPUT ;PUT ALTERED WORD INTO TEXT SUB #8.,R0 ;BC BR LODJ99 ;NEXT RLD .PAGE LODJ42: CMD7: ;SET CURRENT PC AND POINT TO NEW SECTION ;IF .ASECT, THE CONSTANT WILL BE THE NEW PC, AND ITS ;BASE WILL BE ZERO. ;IF .CSECT, THE CO{ JSR PC,TRAILIO ;WRITE OUT FINAL TRAILER SECTOR MOV TRSCSV,TXTSEC ;INIT TO READ IN FIRST TRAILER SECTOR CLRB TXTR.W ;READ JSR PC,TEXTIO ;GO READ OR WRITE WITH"TXTLST" .PAGE 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 SWAB R0 |EXT SUB #6,R0 ;BC BR LODJ99 ;NEXT RLD LODJ38: CMD5: ;GLOBAL ADDITIVE RELOCATION: ;PUT SUM OF CONSTANT & GLOBAL (OFFSET::0) INTO TEXT; ;PUT "ADD" INTO TRAILER MOV R1,R4 ;PTR TO GLOBAL NAME JSR PC,SRGLOB ;SEARCH LSD FOR IT CMP (R1)+,(R1)+ ;BUMP PAST GLOBAL TO CONSTANT ADD (R1)+,R4 ;CONST + XSYM JSR PC,ADDPUT ;PUT WORD IN R33,M+NURR#E V MO RNTUREE WSECAN ;I V SAEG,RR5 R JS .ITEXL IL WSEEL; ERLLCAO TRNTUREL IL WT,SES ISB MIF ; ERMBNUR ROERY ARIN BTHWID TENI IDYEALR AR4 ; E INUTROG INNTRI PGESAES MORRR;E : RTRPER ******************************************************************** ; RNTURE: EDLLFIR FEUF BIISC;A PC S RT REMOR FOK AC;B TAONB2 T BG ? GOO TTSGIDII CIASE OR;M R2 C DE R4 R AS~NSTANT WILL REPRESENT THE OFFSET FROM ;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" ;# 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 ;# P TEXT AND "ADD" INTO TRAILER SUB #8.,R0 ;BC BR LODJ99 ;NEXT RLD LODJ40: CMD6: ;GLOBAL ADDITIVE DISPLACED: ;SUM OF CONST & GLOBAL, LESS CURRENT OFFSET, TO FORM ;DISPLACEMENT TO PUT INTO TEXT; ;NO TRAILER ELEMENT JSR PC,GETPCR ;GET PC AS OFFSET FROM RELOCATABLE ZERO MOV R4,R5 ;SAVE IT MOV R1,R4 ;GLOBAL NAME PTR JSR PC,SRGLOB R4 R AS N IOATAGOPPRN IG SNTVERE;P R40,0000#1 C BI ITIG DALCT OXTNER FOG INFTHI SINEG;B R4 R AS E OD CIISC ATOE NGHA;C ) R3,(60#0 SBBI TSBIE RETHT ANICIFGNSIT ASLEY NL OVEEA;L ) R3,(70#3 CBBI ITIG DALCT OXTNER FON URET ROPLOO LS;A 3)(R,-R4 VBMO H GTEN LONTIRATE INGTIET-SRE PENWHE ER HERNT;E : TAONB2 ) RSHA C 6ALRMNO (THNGLEN IOATERITT NI;I 2 ,R#6 V MO: OCN2BI R BEUM N SWITCH: PREPARE CMP 4(R5),#410 ;IS THIS AN "ASECT"? BNE LODJ44 ;NO-O.K. TO CONTINUE INC ASWICH ;SET TO FORCE IGNORE OF ALL "ASECT" TEXT ; CONTINUE AS IN "CMD8" .PAGE 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 #LDBYTAGES FREE TO RELEASE AFTER RELOCAT'N SWAB R1 BISB R0,R1 ;BYTE 0 = # PAGES TO RELEASE... MOV #TXTBK1,R0 MOV R1,(R0)+ ;...BYTE 1 = FIRST FREE PAGE MOV #240,(R0) ;NOP KEEPS BOUNDARY @ MULTIPLE OF 4. INCB TXTR.W ;WRITE JSR PC,TEXTIO ;GO READ OR WRITE WITH"TXTLST" .PAGE ;NOW DEFINE A "ROS" FILE FOR THE LOAD MODULE, OUTPUT IT, AND INIT ; THE NECESSARY TABLES TO RUN THE FILE ;SEARCH FOR NAME IN LSD CMP (R1)+,(R1)+ ;BUMP PAST NAME TO CONST ADD (R1)+,R4 ;C+XSYM SUB R5,R4 ;C+XSYM-PC= DISPLACEMENT JSR PC,TXTPUT ;PUT ALTERED WORD INTO TEXT SUB #8.,R0 ;BC BR LODJ99 ;NEXT RLD .PAGE LODJ42: CMD7: ;SET CURRENT PC AND POINT TO NEW SECTION ;IF .ASECT, THE CONSTANT WILL BE THE NEW PC, AND ITS ;BASE WILL BRYNABI= 4 R ; 1 S+ESDRADD ENN IOATINSTDE= 3 R ; ) A"NT2O"B @ERNT EIF (THNGLEN IOATERIT= 2 R T:PUIN ; " ONSIERNVCOI CIASL TAOCO TRYNABI "NETIOUBRSU ; ******************************************************************** ; PC S RT R TEINPRE IN;L TRRNLP T EM ) SP-(T,LSAP#M V MO R TEINPRE IN LTOT EME AK MTOE INUTRON MOOM;C : LLCALP E AG.P PC S RT C PEDS,R4 ;KEEP OFFSET DUE TO INSERTED LEADER WRDS MOV R4,-(SP) ;SAVE NEW PC CMP R4,CURPC ;SEE IF PC IS BEING SET BACKWARDS BHIS LODJ45 ;FORWARDS: O.K. MOV #27+100000,R4 JSR PC,ERRPRT ;MESSAGE AND RETURN LODJ45: MOV (SP)+,CURPC ;UPDATE CURRENT PC ;(AS OFFSET FROM LOAD MODULE'S BASE) CLR TXTBC ;AVOID ALTERING NEW [CURPC] IN "TXTOUT" SUB  AS AN OVERLAY TASK. ; FIRST,MAKE ALL NECESSARY CHECKS BEFORE CREATING TASK: MOV #30,R4 ;INIT ERROR NUMBER MOV BFSECT,TXTSEC ;SET TO READ IN TASK HEADER INFO CLRB TXTR.W ;READ JSR PC,TEXTIO ;GO READ OR WRITE WITH"TXTLST" MOVB HEDBGN+HTASK,R1 ;TASK # CMP R1,#TASMAX ;WITHIN LIMITS? BGT LDER30 ;OUTSIDE TASK LIMITS CMP R1,#OVTMIN BLT LDER30E ZERO. ;IF .CSECT, THE CONSTANT WILL REPRESENT THE OFFSET FROM ;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 BELOAV SOP;P + P)(S T TS RDWOT EX TENOPT EX NTOR TEINPOL UACT;A R PTXT,TR3 V MO R31,BKXT#T D AD A RE AXTTEF OOP TOMFRT SEFF OET;G 3 ,RR4 B SU CKLO BXTTET EX NOFN GIBER FOC ;P 3 ,RP)(S V MO E NGHA CPCA F OSECAN I",TRTPTX "TELACUAL-CRES AYLW;A : 40TOTX C PINEG BEW;N G ORXT,TR4 V MO R4 L AS R4 L AS R4 L AS R4 L AS R4 L AS R4 L AS  #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 COMMAND "PC DEFINITION"? BEQ LODJ99 ;YES: O.K. CMPB #PCMD2,(R1) ;IS IT "PC MODIFICATION"? BEQ LODJ99 ;YES: O.K. BR LDER24 ;PC COMMAND NOT LAST IN RLD .PAGE LODJ46: CMD9: ;SET PRO MOVB HEDBGN+HPRIOR,R2 ;PRIORITY CMP R2,#NPRIOR ;PRIORITY LEGAL? BGT LDER31 ;ILLEGAL PRIORITY TSTB PPTAB(R2) ;IS THIS A TIME-SLICE PRIORITY? BLE LODL04 ;NO TST HEDBGN+HMAXEQ ;YES - EXECUTION TIME MUST BE SPECIFIED BLE LDER32 LODL04: ;NOW CHECK FOR PROGRAM SIZE AND SET ACCORDINGLY MOV TRASEC,R0 ;# OF FINAL SECTOR WRITTEN SUB BFSECT,R0 W) CLR ASWICH ;"ASECT" SWITCH: PREPARE CMP 4(R5),#410 ;IS THIS AN "ASECT"? BNE LODJ44 ;NO-O.K. TO CONTINUE INC ASWICH ;SET TO FORCE IGNORE OF ALL "ASECT" TEXT ; CONTINUE AS IN "CMD8" .PAGE 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 CON XTTEW NEF OINEG BATC PET GOW;N R4 L AS T"LSXT"TTHWIE ITWRR OADREO ;G O TIEX,TPC R JS ADRET EX TEW NOR FREPARE;P .WTRTX RBCL S TERI WNTSQUB S &ADREG INOMPC UOR FET;S C SEXT,TR3 V MO E IL FCHAT BOFN GIBEO TVETILARER TOEC;S 3 ,RCTSEBF D AD ) GN BXTTEO TVETILARE (ORCTSEW NEE AV;S 4 ,RR3 V MO R3 R AS R3 R AS R3 R AS R3 R AS R3 R AS{GRAM LIMITS CLR (R3)+ ;FIRST TEXT WORD: RELATIVE ZERO MOV PRSIZE,(R3) ;SECOND WORD: TOP OF PROGRAM INC (R3)+ ;MAKE FIRST AVAILABLE BYTE JSR PC,TRAPUT ;CAUSE BIAS TO BE ADDED TO BOTH WORDS ADD #2,OFFSET JSR PC,TRAPUT BR LODJ99 ; ******************************************************************* LDER06: MOV #6,R4 ;ERROR IN DISCIO WITH "TRALST" JSR  ;GET # OF PROGRAM SECTORS - 1 INC R0 ;# OF SECTORS IN FINAL FILE BIT #3,R0 ;IS # OF SECTORS A MULTIPLE OF 4? BNE LODL06 ;NO INC (SP) ;YES:NEED ONE EXTRA "PAGE" FOR SPILLOVER ;...FROM FINAL SECTOR, DUE TO "PHDSZE" WORDS AT BEGIN OF ALLOCATED AREA ;...WHICH ARE NOT RESIDENT ON THE DISC. LODL06: ASL R2 ;GET WORD INDEX TO BLOCK-SIZE TABLE MOV BSZTAB-2(R2),R3 ;GSTANT TO BASE VALUE ADD #LDBYTS,R4 ;KEEP OFFSET DUE TO INSERTED LEADER WRDS MOV R4,CURPC ;NEW VALUE OF NEXT TEXT BLOCK'S BASE ;(AS OFFSET FROM LOAD MODULE'S BASE) 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 TYP R3 R AS N IG SEDNDTEEXS ESPRUP;S R30,0000#1 C BI PCW NER FOR TOEC SET GOW;N R3 R AS C"RPCU "EW;N 3 ,RP)(S V MO T"LSXT"TTHWIE ITWRR OADREO ;G O TIEX,TPC R JS TERI;W W R.XT,T#1 VBMO - --INT EX TEW NADRED ANT OUT EX TNTREUR CTERI WTOE ER;H : 10TOTX E AG.P METIS HI TEDEDNER FENSRA TNO: ES;Y 40TOTX O BL 2? #BKW LOBET IIS: #1K BLE OVABC PEW;N 3 ,RP)wPC,ERRPRT LDER23: MOV #23,R4 ;SECTION NAME SEARCH FAILURE JSR PC,ERRPRT LDER24: MOV #24,R4 ;FATAL ERROR: PC CMD NOT LAST IN RLD JSR PC,ERRPRT .PAGE LODL00: ;NOW DONE WITH PASS 2: OUTPUT ANY REMAINING TEXT, THEN ; OUTPUT THE TRAILER. FIX UP MONITOR TASK TABLES; EXIT. MOV #64.,TXTCNT ;WANT TO WRITE ONLY ONE SECTOR MOVB #1,TXTR.W ;WRITE JSR PC,TEXTIO ;GO READET MAX ALLOWED # OF "PAGES" W/SIGN MOV R3,R5 ;SAVE FOR SIGN BIC #100000,R3 ;LEAVE ONLY # OF PAGES CMP (SP),R3 ;ACTUAL PROGRAM SIZE :: MAX ALLOWED BGT LDER34 ;# "PAGES" NEEDED TOO LARGE FOR PRIORITY TST R5 ;IS THIS PRIORITY "DYNAMIC"? BMI LODL20 ;YES: LEAVE AT ACTUAL SIZE MOV R3,(SP) ;REPLACE WITH MAX SIZE FOR FIXED PART'N LODL20: MOV HEDBGN+HSTACK+E CMPB #PCMD1,(R1) ;IS NEXT COMMAND "PC DEFINITION"? BEQ LODJ99 ;YES: O.K. CMPB #PCMD2,(R1) ;IS IT "PC MODIFICATION"? BEQ LODJ99 ;YES: O.K. BR LDER24 ;PC COMMAND NOT LAST IN RLD .PAGE LODJ46: CMD9: ;SET PROGRAM LIMITS CLR (R3)+ ;FIRST TEXT WORD: RELATIVE ZERO MOV PRSIZE,(R3) ;SECOND WORD: TOP OF PROGRAM INC (R3)+ ;MAKE FIRST AV(S P CM K COBLD ONEC SINE YT BSTIR FOFC ;P R3.,28#1 D AD T EX TCELAEP R -ES;Y 10TOTX O BL ? NE OCKLO BINT EX TOWEL BPCW NES ;I 4 ,RP)(S P CM R FENSRA TNOF OSECAN IPCUR C @R4P EE;K 3 ,RR4 V MO XTTET ENIDES ROFN BG@ E LUVAC ;P 4 ,RRGTOTX V MO OWEL BRKWOR FOE AV;S ) SP-(C,RPCU V MO CKLO BXTTET NXF OGN BTOR CTN C'LOP UM;B C RPCUC,TBTX D AD LLFUS IERFFBUF IXTTED TELAMUs OR WRITE WITH"TXTLST" MOV #207,@TRAILPOINTER ;[RTS PC] INTO FINAL TRAILER WRD MOV #TRALST,-(SP) ;LIST FOR TRAILER EMT DISCIO ;WRITE OUT FINAL TRAILER SECTOR TST TRAERR BNE LDER06 ;ERR IN DISCIO MOV TRSCSV,TXTSEC ;INIT TO READ IN FIRST TRAILER SECTOR CLRB TXTR.W ;READ JSR PC,TEXTIO ;GO READ OR WRITE WITH"TXTLST" .PAGE MOV TRAPC,R02,R5 ;FILE I.D. CMP R5,#NDISCS+$SYSFL;MUST BE GREATER THAN SYSTEM RESERVED BLE LDER35 ;FILE I.D. ILLEGAL CMP R5,#MAXID1 ;I.D. MUST BE <= MAX ALLOWED BGT LDER35 MOV R5,DFLIST+6 ;LOAD FILE I.D. INTO LIST MOVB HEDBGN+HSTATS,R5 ;REQUESTED FILE TYPE BIC #-177-1,R5 ;RID OF EXTENDED SIGN CMP R5,#$OVTYP ;IS IT LEGAL FOR AN OVERLAY? BEQ LODL22 ;YES AILABLE BYTE JSR PC,TRAPUT ;CAUSE BIAS TO BE ADDED TO BOTH WORDS ADD #2,OFFSET JSR PC,TRAPUT BR LODJ99 ; ******************************************************************* LDER23: MOV #23,R4 ;SECTION NAME SEARCH FAILURE JSR PC,ERRPRT LDER24: MOV #24,R4 ;FATAL ERROR: PC CMD NOT LAST IN RLD JSR PC,ERRPRT .PAGE LODL00: ;NOW DONE WITH PASS 2: OUTPUT ANY REMAINING TECUACT PUUT OTOE INUTROUB;S : UTTOTX ) T.EX TEDATRE CLYEW NUR OOFY ITGRTEIN; HE TCTTERO PND AE,IM T AATR TOEC SNE OUT OXTTER OUR FEUF BAN CWE; Y,WAS HI TIN 1. #CKLO BTOINN AIAGN ICKBAD EA RBEO TLYON; C,IS DTON TEITWRE BLLWI2 #CKLO BXTTEN TEITWRY-LLIARTPAA T HA TANME; LLWIS HI TESAS CNYMAN I. IND EA RBEL IL WKSOCBLO TWW NEE ATRIOPPRAP; HE TND AT,OUN TEITWRE BLLWIS CKLO BTHBO, KSOCBLO TWE THE IDTSOU; R OK,OCBLD ONEC SHE TTOINS IPCW NEE THF I. URCC OLLWIR FENSRA TNO; 1, #CKLOo ;BYTES IN PROGRAM PLUS TRAILER ASR R0 ;# WORDS ADD #LEDWDS+PHDSZE,R0 ;TOTAL WORDS FROM TOP OF HEADER CLRB R0 ;GETTING # OF PAGES SWAB 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 HEA LDER37: INC R4 ;ILLEGAL FILE TYPE LDER36: INC R4 ;"DELETE" ERROR LDER35: INC R4 ;ILLEGAL FILE I.D. LDER34: INC R4 ;PROGRAM SIZE TOO BIG FOR PRIORITY LDER33: INC R4 ;"DEFINE FILE" ERROR LDER32: INC R4 ;MAX XEQ ENTRY ERROR FOR T/S TASK LDER31: INC R4 ;PRIORITY OUTSIDE LIMITS LDER30: ;TASK # OUTSIDE LIMITS JSR PC,ERRPRT ;GO PRINT ERROR ANXT, THEN ; OUTPUT THE TRAILER. FIX UP MONITOR TASK TABLES; EXIT. MOV #64.,TXTCNT ;WANT TO WRITE ONLY ONE SECTOR MOVB #1,TXTR.W ;WRITE JSR PC,TEXTIO ;GO READ OR WRITE WITH"TXTLST" MOV #207,@TRAILPOINTER ;[RTS PC] INTO FINAL TRAILER WRD JSR PC,TRAILIO ;WRITE OUT FINAL TRAILER SECTOR MOV TRSCSV,TXTSEC ;INIT TO READ IN FIRST TRAILER SECTOR CLRB TXTR.W ;READ BINTHWIS LLFAL ILSTC PEW NHE TIF D.ANMMCOD RLN ABYE LUVA; W NEA O TET SENBES HA" PCUR"CS TECADIINH ICWH, ROZEE BAY MC"TBTX("; " T U O T X T " ; E AG.P T EX TTHWIR ROERO CIIS;D T PRRR,EPC R JS 4 ,R#5 V MO: 05ERLD PC S RT 05ERLD E BN S?ORRR ENY;A RRTETX T TS T EX TTHWIE ITWRR OADREO ;G IOSCDI T EM ) SP-(T,LSXT#T V MO: IOXTTE ************************************************************kDER CLRB R1 ;256 WORDS/PAGE [PDP-11/20] SWAB R1 ;# PAGES -1 (EXCLUDING TRAILER) INC R1 ;# PAGES (EXCLUDING TRAILER) SUB R1,R0 ;# PAGES FREE TO RELEASE AFTER RELOCAT'N SWAB R1 BISB R0,R1 ;BYTE 0 = # PAGES TO RELEASE... MOV #TXTBK1,R0 MOV R1,(R0)+ ;...BYTE 1 = FIRST FREE PAGE MOV #240,(R0) ;NOP KEEPS BOUNDARY @ MULTIPLE OD EXIT .PAGE LODL22: ;READY TO "DEFINE" ROS FILE MOVB HEDBGN+HSTATS,DFLIST+8. ;LOAD FILE TYPE INTO LIST MOV R0,DFLIST+10. ;# OF SECTORS TO DEFINE MOV #DFLIST,-(SP) ; ******** EMT DELETE ;FIRST TRY TO DELETE FILE ; ******** MOVB DFLIST+2,R3 ;ERROR BYTE BEQ LODL24 ;O.K. CMP #9.,R3 ;THIS ERROR IS O.K. BNE LDER36 ;ANY OTHER I JSR PC,TEXTIO ;GO READ OR WRITE WITH"TXTLST" .PAGE 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 SWAB R0 ;# CORE "PAGES" -1 INC R0 ;# OF CORE PAGES MOV R0,-(SP) ;SAVE FOR USE BELOW MOV PRSIZE,R1 ASR ******** ; R LEAL CUR OTON URET RENTHL IL WCHHI;W E AGSSMET INPR: ROZET NOS WAE YT BERPP;U 25ERLD BR ROZEE BTOD HAE YT BERPP;U 10TPTX Q BE R4 ABSW: 20TPTX PC S RT: 10TPTX TEBYR PEUPD OA;L )+R3,(R4 VBMO R4 ABSW E YT;B 20TPTX I BM NDMAOM;C R2 T TS T EX TTOINE YT BSTIR FCELA;P )+R3,(R4 VBMO . TSBI8 W LORFVE OOT NID DTEBYD KEgF 4. INCB TXTR.W ;WRITE JSR PC,TEXTIO ;GO READ OR WRITE WITH"TXTLST" .PAGE ;NOW DEFINE A "ROS" FILE FOR THE LOAD MODULE, OUTPUT IT, AND INIT ; THE NECESSARY TABLES TO RUN THE FILE AS AN OVERLAY TASK. MOV #30,R4 ;INIT ERROR NUMBER MOV BFSECT,TXTSEC ;SET TO READ IN TASK HEADER INFO CLRB TXTR.W ;READ JSR PC,TEXTIO ;GO READ OR WRITE WITH"TXTLST" MOV #LDBYTS+TXTBK1,R0 S AN ERROR LODL24: MOV #DFLIST,-(SP) ; ******** EMT DEFINE ;GO GET FILE DEFINED ; ******** TSTB DFLIST+2 ;ERROR? BNE LDER33 ;YES .PAGE ;*************** NOW TRANSFER BATCH ELEMENT TO THE ROS FILE************* JSR R5,REGSAV ;NEED TABLE POINTERS BELOW MOV BFSECT,R0 ;INIT RELATIVE READ SECTOR # CLR R1 ;INIT RELATIVE WRITE SECTOR MOV DFLI 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 ;# PAGES FREE TO RELEASE AFTER RELOCAT'N SWAB R1 BISB R0,R1 ;BYTE 0 = # PAGES TO RELEASE... MOV #TXTBK1,R0 MOV R1,(R0)+IN L ARESUE BTOE AD MISK ECCH ; . XTTEO NT IRDWOR OTEBYD KEIN LUT PTOE INUTROUB;S : UTTPTX E AG.P PC S RT ERNTOI PEW;NR TEINPOILRA,TR3 V MO: 30APTR R TEINPOT SEREO TREPARE;P R3K,OCBLILRA#T V MO NTOU CORCTSER LEAITRP UM;B ECASTR C IN: 20APTR 06ERLD P JM ORRR ESCDIO ;N 20APTR Q BE RRAETR T TS IOSCDI T EM R LEAITRG INITWRR FOT IS;L ) SP-(T,LSRA#T V MO ET YOT;N c ;POINTER TO FIRST WORD OF HEADER MOVB HTASK(R0),R1 ;TASK # CMP R1,#TASMAX ;WITHIN LIMITS? BGT LDER30 ;OUTSIDE TASK LIMITS CMP R1,#OVTMIN BLT LDER30 MOVB HPRIOR(R0),R2 ;PRIORITY CMP R2,#NPRIOR ;PRIORITY LEGAL? BGT LDER31 ;ILLEGAL PRIORITY TSTB PPTAB(R2) ;IS THIS A TIME-SLICE PRIORITY? BLE LODL04 ;NO TST HMAXEQST+6,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. JSR PC,TEXTIO ;GO READ OR WRITE WITH"TXTLST" MOV R1,TXTSEC ;SET UP WRITE SECTOR MOV R2,TXTHED ;WRITE FILE I.D. INCB TXTR.W ;SET TO WRITE JSR PC,TEXTIO ;GO READ OR WRITE WITH"TXTLST" CMPB (R0)+,(R1)+ ;BUMP BOTH SECTO ;...BYTE 1 = FIRST FREE PAGE MOV #240,(R0) ;NOP KEEPS BOUNDARY @ MULTIPLE OF 4. INCB TXTR.W ;WRITE JSR PC,TEXTIO ;GO READ OR WRITE WITH"TXTLST" .PAGE ;NOW DEFINE A "ROS" FILE FOR THE LOAD MODULE, OUTPUT IT, AND INIT ; THE NECESSARY TABLES TO RUN THE FILE AS AN OVERLAY TASK. ; FIRST,MAKE ALL NECESSARY CHECKS BEFORE CREATING TASK: HEDBGN = TXTBK1+LDBYTS ;FIRST WORD OF TASK HEADER IN BUFFER MOV 30APTR O BL ? ET YCKLO BOFD ENT ;A . 28+1CKLOLBAITR,#R3 P CM O: SIFT OUT ITERI WND AL,UL FISR FEUF BIFE SEW NO ; D"AD "NDHIBET ICKTI;S )+R3,(R4 V MO OT NC"APTR "UT BD,CEANDV AIS" PC "CEIN;S 4 ,R#2 B SU T ENEMACPLIS DRDWACKBAC AL;C R4C,APTR B SU T SEFF OADLOT ENRRCUF OUEAL VET;G PCET,GPC R JS R LEAITRO NT IONTIUCTRNS IEDCKTA SUT;P + 3)(R+,P)(S V MO T LO SERILRA TENOPT EX;N3 ,R_(R0) ;YES - EXECUTION TIME MUST BE SPECIFIED BLE LDER32 LODL04: ;NOW CHECK FOR PROGRAM SIZE AND SET ACCORDINGLY ASL R2 ;GET WORD INDEX TO BLOCK-SIZE TABLE MOV BSZTAB(R2),R3 ;GET MAX ALLOWED # OF "PAGES" W/SIGN MOV R3,R5 ;SAVE FOR SIGN BIC #100000,R3 ;LEAVE ONLY # OF PAGES CMP (SP),R3 ;ACTUAL PROGRAM SIZE :: MAX ALLOWED BGT LDER34 ;# "PAGES" NEEDED TOO R NUMBERS CMP R0,TRASEC ;HAVE WE PASSED LAST SECTOR? BLE LODL30 ;MORE SECTORS TO GO MOV R1,BFSIZE ;# OF SECTORS USED UP IN LOAD MODULE .PAGE ;************** NOW INIT ALL RELEVANT TASK AND PRIORITY TABLES ********* JSR R5,REGPOP ;RESTORE TABLE POINTERS ASR R2 ;PRIORITY WAS SHIFTED ABOVE MOVB R2,TPRTY(R1) ;PRIORITY CLRB TSTAT(R1) ;TASK STATUS CL #30,R4 ;INIT ERROR NUMBER MOV BFSECT,TXTSEC ;SET TO READ IN TASK HEADER INFO CLRB TXTR.W ;READ JSR PC,TEXTIO ;GO READ OR WRITE WITH"TXTLST" MOVB HEDBGN+HTASK,R1 ;TASK # CMP R1,#TASMAX ;WITHIN LIMITS? BGT LDER30 ;OUTSIDE TASK LIMITS CMP R1,#OVTMIN BLT LDER30 MOVB HEDBGN+HPRIOR,R2 ;PRIORITY CMP R2,#NPRIOR ;PRIORITY LEGAL? ERNTOILPAITR V MO 1.S HI TERFT ALLCEN PE OXTNEO TCEANDV;A PCRA,T#4 D AD: 10APTR E AG.P " UTTPTX "TOR O",UTDPAD;" ",UTBPSU "TOR HEIT EDEMAS WAL AL;C PC S RT T PRRR,EPC R JS ORRR EONTICALOREE YT;B 4 ,R0000105+#2 V MO: 25ERLD ONTIUCTRNS IEDCKTA SOP;P + P)(S T TS R LEAITRO TDD ATOY KA OD:OR;W 10APTR L BP ? NDMAOM CE"YT"BA S HI TAS;W R2 T TS [LARGE FOR PRIORITY TST R5 ;IS THIS PRIORITY "DYNAMIC"? BMI LODL10 ;YES: LEAVE AT ACTUAL SIZE MOV R3,(SP) ;REPLACE WITH MAX SIZE FOR FIXED PART'N LODL10: CMP R1,TASKS ;TASKS = MAX[TASKS,TASKNO] BLE LODL20 MOV R1,TASKS LODL20: MOV #DFLIST,R3 ;POINTER TO "DEFINE" LIST MOV HSTACK+2(R0),R5 ;FILE I.D. CMP R5,#NDISCS+$SYSFL;MUST BE GREATER THAN SYSTEM RESERVED RB IOSTAT(R1) MOVB (SP)+,BSIZE(R1) ;INIT # "PAGES" IN OVERLAY ASL R1 ;NOW A WORD INDEX MOV DFLIST+6,R0 ;INIT FILE I.D. TSTB DFLIST+8. ;WAS AN IFD REQUESTED? BPL LODL25 ;NO: LEAVE AS FILE I.D. MOV DFLIST+4,R0 ;YES: REPLACE WITH IFD FOR CORE DIRECT'Y BIS #100000,R0 ;FLAG AS AN IFD LODL25: MOV R0,IFD(R1) ;PUT ONE OR THE OTHER IN THE TABLE CLR HEADER(R BGT LDER31 ;ILLEGAL PRIORITY TSTB PPTAB(R2) ;IS THIS A TIME-SLICE PRIORITY? BLE LODL04 ;NO TST HEDBGN+HMAXEQ ;YES - EXECUTION TIME MUST BE SPECIFIED BLE LDER32 LODL04: ;NOW CHECK FOR PROGRAM SIZE AND SET ACCORDINGLY ASL R2 ;GET WORD INDEX TO BLOCK-SIZE TABLE MOV BSZTAB(R2),R3 ;GET MAX ALLOWED # OF "PAGES" W/SIGN MOV R3,R5 ;SAVE FOR SIGN : 05APTR N URET R &ONTIUCTRNS IEDCKTA SOP PSO..;. PC S RT . ..LSBALO GTELUSOABR FOR LEAITRO ;N + P)(S T TS TEBYA S ESNL UERILRA TDO: ES;Y 05APTR E BN ? LEABATOCEL ROLMBSYS HI;T ALSVAB T TS T EX TTOIND OR WEDERLT AUT PSTIR;F T PUXT,TPC R JS ERILRA TLDUI BTOE INUTROUB;S : UTAPTR N IOCTRUSTIN" OC,LR1D AD "CKTA;S P)(S,-6701#6 V MO: UTDPAD UTAPTR BR N IOCTRUSTIN" OC,LR1B WBLE LDER35 ;FILE I.D. ILLEGAL CMP R5,#MAXID1 ;I.D. MUST BE <= MAX ALLOWED BGT LDER35 MOV R5,6(R3) ;LOAD FILE I.D. INTO LIST MOVB HSTATS(R0),R5 ;REQUESTED FILE TYPE BIC #-177-1,R5 ;RID OF EXTENDED SIGN CMP R5,#$OVTYP ;IS IT LEGAL FOR AN OVERLAY? BEQ LODL22 ;YES LDER36: INC R4 ;ILLEGAL FILE TYPE LDER35: INC R4 ;ILLEGAL FILE I.D. LDER1) ;SHOW TASK IS READY TO RUN ASR R1 ;RETURN TO BYTE INDEX CMP R1,TASKS ;TASKS = MAX[TASKS,TASKNO] BLE LODL26 MOV R1,TASKS LODL26: MOV #$TKFLS,-(SP) ;MUST WRITE OUT CURRENT VERSION OF JSR PC,PFRITE ;TASK TABLES, SINCE WE UPDATED THEM LODL28: ;COMMON EXIT POINT: BE SURE TO CLOSE ALL OPEN "BFUP" ELELMENTS ; (LIST IS ALREADY INITED TO CLOSE THE LOAD MODULE.) MOV MODCNT,R0 ;# OF  BIC #100000,R3 ;LEAVE ONLY # OF PAGES CMP (SP),R3 ;ACTUAL PROGRAM SIZE :: MAX ALLOWED BGT LDER34 ;# "PAGES" NEEDED TOO LARGE FOR PRIORITY TST R5 ;IS THIS PRIORITY "DYNAMIC"? BMI LODL10 ;YES: LEAVE AT ACTUAL SIZE MOV R3,(SP) ;REPLACE WITH MAX SIZE FOR FIXED PART'N LODL10: CMP R1,TASKS ;TASKS = MAX[TASKS,TASKNO] BLE LODL20 MOV R1,TASKS LODL20: SU "CKTA;S ) SP-(7,1660#1 V MO: UTBPSU . RDWACKBAE BLLWI; ERILRA THE TOMFRS CEENEREF RLL ACEIN SE,IVATEG NIST ENEMACPLIS DISTH; PCRA T -ETFSOF+ C RPCU= L SPDI S: IXTTE; D OA LHE TINT ECBJ OTS IND AONTIUCTRNS ID"AD "HE TENWEET BNTMECELASPDI; E THR FOA ULRMFOE TH N.IOATOCEL RICAMYN DNGDIEE NXTTEE THN IRDWOE TH; , C"LO "ND AONITUCTRNS IHE TENWEET BNTMECELASPDIR PERO PHE TESATULLCCA; E INUTROUB SHE T. ONTICTLOREC MINADYG INCTFEEFS HU TN,IOUTECEXK AS TTO; ORRI PRECOS34: INC R4 ;PROGRAM SIZE TOO BIG FOR PRIORITY 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 JSR PC,ERRPRT ;GO PRINT ERROR AND EXIT .PAGE LODL22: ;READY TO "DEFINE" ROS FILE MOVB HSTATS(R0),8.(R3) ;LOAD FILE TYPE INTO LIST MOV TRASOBJECT MODULE ELEMENTS TO CLOSE MOV #NAMBUF,R1 ;LIST OF MODULE NAMES LODL40: MOV #BFBLK1,-(SP) EMT BFCLOS ;CLOSE LOAD MODULE FIRST, THEN OBJ MODS CLR BFSTAT ;TYPE = OBJECT MODULE MOV (R1)+,BFNAME ;FILL LIST WITH NEXT OBJ MODULE NAME MOV (R1)+,BFNAME+2 CMP (R1)+,(R1)+ ;BUMP PAST SECTOR INFO IN LIST DEC R0 ;MORE? BGE LODL40 .PAGE MOV MOV HEDBGN+HSTACK+2,R5 ;FILE I.D. CMP R5,#NDISCS+$SYSFL;MUST BE GREATER THAN SYSTEM RESERVED BLE LDER35 ;FILE I.D. ILLEGAL CMP R5,#MAXID1 ;I.D. MUST BE <= MAX ALLOWED BGT LDER35 MOV R5,DFLIST+6 ;LOAD FILE I.D. INTO LIST MOVB HEDBGN+HSTATS,R5 ;REQUESTED FILE TYPE BIC #-177-1,R5 ;RID OF EXTENDED SIGN CMP R5,#$OVTYP ;IS IT LEGAL FOR AN OVERLAY? BEQ O NT IADRES ILEDUMOD OA LHE TENWHD TECUXE EBEO TR,LEAITR; SKTAE THN IONTIUCTRNS IRDWOO-TW" OC,LR1D AD "ANS UT PNETIOUBRSU; " T U P A R T " ; E AG.P T PRRR,EPC R JS R ROERM SUCKHE CCKLO BOD MBJ;O 4 ,R#3 V MO: 03ERLD T PRRR,EPC R JS R ROERT UNCOE YT BCKLO;B 4 ,R#2 V MO: 02ERLD T PRRR,EPC R JS ORRR EADREK OCBLE ULOD MBJ;O 4 ,R#1 V MO: 01ERLD ********************************************************************OEC,R5 ;# OF FINAL SECTOR WRITTEN SUB BFSECT,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 ASR R2 ;PRIORITY WAS SHIFTED ABOVE MOVB R2,TPRTY(R1) ;PRIORITY  #ND2MSG,TTYBUF ;"PASS 2 END" MESSAGE MOV #TTYLST,-(SP) EMT TTYOUT EMT EXIT ;****** E N D O F L O A D E R****** BSZTAB: ;TABLE OF MAX ALLOWABLE BLOCK OR "PAGE" SIZES ; FOR EACH PRIORITY. THE SIGN BIT IS SET IF THE PRIORITY IS ; DYNAMIC, I.E., NOT FIXED NOR TIME-SLICE. THEIR PARTITIONS ARE ; FIXED IN SIZE, AND THEY MUST REQUEST THE MAXIMUM SIZE WHENEVER ; THEY ARE LOADED INTO MEMORY. .WORD ND.E Y ORCTREDIL BOYM SERADLOF OND;E . = NDDELS E BLTAL BOYM SOR FCEPA SVEERES;R +.*2SZSD$L.= 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 *7BJXO$M D OR.W: ATCDAS ERFFBUN IORSVEON CRYRAPOEM;T 0 0,0, D OR.W: UFPBTM E.ULOD MER PDSOR WURFOS SE U. ; PC S RT: 80TBNX N URET RD"OO"GR FOP UM;B ) SP,(#2 D AD T UNCOE YT BTADAH IT WR5T NI;I 5 ,RBC V MO: 70TBNX TEBYA AT DSTIR FTOS NTOI POW;N R0 C DE 0 ,RR5 V MO ES;Y 60TBNX T BG E?OV MTOS TEBYE OR;M R3 C DE NE OCKBAE YT BFTHI;S 0)(R-2+,0)(R VBMO: 60TBNX NE OCKBAS TEBYL ALE OV MTOD EE;N 3 ,RBC V MO D DEEE NONTICALOREO NN:VE;E 70TBNX Q BE K CLRB TSTAT(R1) ;TASK STATUS CLRB IOSTAT(R1) MOVB (SP)+,BSIZE(R1) ;INIT # "PAGES" IN OVERLAY ASL R1 ;NOW A WORD INDEX MOV 6(R3),IFD(R1) ;INIT FILE I.D. TSTB HSTATS(R0) ;WAS AN IFD REQUESTED? BPL LODL25 ;NO IFD RETURNED: LEAVE FILE I.D. MOV 4(R3),R0 ;IFD WORD BIS #100000,R0 ;SHOW IFD RATHER THAN FILE I.D. MOV R0,IFD(R1) ;USE RATPRIP01&100000!$PS001 .WORD PRIP02&100000!$PS002 .WORD PRIP03&100000!$PS003 .WORD PRIP04&100000!$PS004 .WORD PRIP05&100000!$PS005 .WORD PRIP06&100000!$PS006 .WORD PRIP07&100000!$PS007 .WORD PRIP08&100000!$PS008 .WORD PRIP09&100000!$PS009 .WORD PRIP10&100000!$PS010 .WORD PRIP11&100000!$PS011 .WORD PRIP12&100000!$PS012 .WORD PRIP13&100000!$PS013 .WORD PRIP14&100000!$PLEDUMOH AC EOR FONTIMAORNF IORCTSED AN..;. . ..ESAM N50AD RLEDUMOJ OBS LDHOR FEUF;B . .+*8BJXO$M.=: 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 ECIRHD?ODE YT BTADAT RSFIF ODRADS ;I 0 ,R#1 T BI E YT BTADAT RSFIO TTR PALOC LETES;R 0 ,RR5 V MO K OCBLT EX NOR FDYEA-RTR PLK BCEANDV;A R PTLK,BR0 V MO R ROERM SUCKHE;C 03ERLD E BN INEG@B" "1E THS DELUNC ILFSEITM SUCKHE;C R2 CBIN D ENT ATEBYA TREXE ONR FOK AC BGOO ;S 50TBNX E BG . ..TEBYM SUCKHE CESUDCLINT UNCOE YT;B ? IND ADO TESYT BTADAE OR;M G ND.E Y ORCTREDIL BOYM SERADLOF OND;E . = NDDELS E BLTAL BOYM SOR FCEPA SVEERES;R +.*2SZSD$L.= R FEUF BEDEDNEUNR VE OESS014 .WORD PRIP15&100000!$PS015 .WORD PRIP16&100000!$PS016 .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 ND.E Y ORCTREDIL BOYM SERADLOF OND;E . R1 C DE M SUCKHE CUMCC;A 2 ,RR3 D AD TEBYT EX NCTRAXT;E R3+,0)(R VBMO: 50TBNX Y NL OTADAF ONTOU CTEBYE AV;S C ,BR1 V MO S RDWOC BND A0"1- "IMELO TBCE UCED;R 1 ,R#4 B SU C BESUDCLINH ICWH, UMKSECCHT NI;I 2 ,RR1 V MO D:EA RCTREOR CFYRIVEO TUMKSECCHE UTMPCOO TNTWAW NO ; TEBYA AT DSTIR FTOR TEINPOE AV;S 5 ,RR0 V MO 02ERLD E BN ROZEE BSTMUC BOFE CITWR: Y"ORCTREDIL BOYM SERADLO;" : GNDBLS T UNCOR TEACARCHL UACT;A 0 D OR.W: NTPCIN NGRISTD ANMMCOR FOR FEUF BUTNP ITY;T *7BJXO$M 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 . .+*8BJXO$M.=: UFMBNA ******************************************************************** ; OLMBSYD NEFIDEUNR FOD LSN IOTSLT EX;NB MOV (SP)+,R3 MOV (SP)+,R4 RTS R5 ;...AND RTN ; ******************************************************************** GETPCR: ;RETURNS WITH PC AS OFFSET FROM RELOCATABLE ZERO MOV #-LDBYTS+2,R4 ;ACCOUNT FOR LEAD WORDS ALREADY IN CURPC BR GETPC1 GETPC: ;RETURN WITH OFFSET FROM LOAD MODULE BASE ZERO MOV #2,R4 ;SINCE PC INCREMENTS AFTER FETCH GETPC1: ADD CURPC,R4 ;PC @ TE= NDDELS E BLTAL BOYM SOR FCEPA SVEERES;R +.*2SZSD$L.= 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 *7BJXO$M 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 . .+*8BJXO$M.=: UFMBNA ************@YT BERPP;U + 0)(R TBTS T UNCOE YT B'SCKLO;B R1+,0)(R VBMO CKLO BSSCERO POW ND:UNFON EE BAS HCEENQUSE] -0[1A A!YE ; E AG.P ] [0R FOK ECCH- O ;N 44TBNX E BN ? EDSTTEN EE B0] [ND A1] [THBOE AV;H 0 1.TR,P#1 T BI E OD CINE YT BXTNEO TMPBU: CHAT;M .0R1PT C IN NGKIOO LEPKE- H TCMAO ;N 40TBNX E BN ? CEENQUSER FOH TCMAA E YT BXTNES ;I 0 1.TR@P+,0)(R PBCM: 46TBNX P UCKLO? 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 CTRUSTINR LEAITRT RSFIF OPCR FOY OREM;M 0 D OR.WE:AVCSAPTR " PC "ERILRA;T 0 D OR.W C:APTR CKLO BERILRA>XT BLOCK START ADD OFFSET,R4 ;OFFSET SPECIFIED WITH RLD COMMAND RTS PC ; ******************************************************************** SYMOVF: ;CHECK FOR SYMBOL TABLE OVERFLOW CMP USYME,#LSDEND-BPSYM BHI LDER26 ;SYMBOL TABLE END REACHED RTS PC LDER26: MOV #26,R4 ;OVERFLOW: "TH-TH-THAT'S ALL, FOLKS!" JSR PC,ERRPRT .PAGE SRMODN: ;SEARCH DEFINED SECTION OF LSD******************************************************** ; 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 CTRUSTINR LEAITRT RSFIF OPCR FO< BXTNEE OV MGOD AN..;. 10TBNX BR K OCBLW NEN ICELA PEROPPRR FOE ATPD;U R PTLK,BR0 V MO G INGOP EE K -ET YOT;N 46TBNX E BG T?YEK OCBLP TOF OND;E R1 C DE: 44TBNX 1] [TOR PTT NI;I .0R1PTO,ZRNE#O V MO: 40TBNX K OCBLT EX NRTTA STOE NCUEEQ S0"1- " AOR FCHARSE ; RYDAUNBOK OCBLF OSECAN I0"1.TR"PT SERED OIAV ;44TBNX BR ORCTSEP TON INGNIAIEM RESYT B;# 1 ,RR0 B SU EAARR WELOF OOP;T ; TINE ACSPT EX;N 0D OR.W : ERNTOILPAITR L BOYM SEDINEF DOR FSD LING INENOPT EX;N 0 D OR.W : MESY LEDUMOA N INGDIEA RENWHR TEUNCOR TOEC;S 0 D OR.W: CTCTSE D LSN IMENAN IOCTSET ENRRCUO TERNTOI;P 0 D OR.W: CTSEPT C ENQUSEO ER-ZNE ONGTIECET DOR FERNTOI;P 0 D OR.W: .0R1PT SD LINY TREND MOJ OBT ENRRCUO TERNTOI;P 0 D OR.W: BJROPT E IZ SAMGRRO PNTREUR;C 0 D OR.W: ZESIPR 0 1, E YT.B: ROEZON E ULOD MADLO: 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: 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 ;NOTY OREM;M 0 D OR.WE:AVCSAPTR " PC "ERILRA;T 0 D OR.W C:APTR CKLO BERILRA TINE ACSPT EX;N 0D OR.W : ERNTOILPAITR L BOYM SEDINEF DOR FSD LING INENOPT EX;N 0 D OR.W : MESY LEDUMOA N INGDIEA RENWHR TEUNCOR TOEC;S 0 D OR.W: CTCTSE D LSN IMENAN IOCTSET ENRRCUO TERNTOI;P 0 D OR.W: CTSEPT C ENQUSEO ER-ZNE ONGTIECET DOR FERNTOI;P 0 D OR.W: .0R1PT SD LINY TREND MOJ OBT ENRRCUO TERNTOI;P 0 D OR8 R12,BKBJ#O V MO 0 ,RTRKPBL V MO T ARSTK OCBLT EX NNDFIO TREPARE;P : 30TBNX E AG.P EAARR TOEC SOP TTOK AC BERNTOI PFTHI;S TRKPBL.,28#1 B SU METIT EX NOR F #ORCTSEP UM;B ECJSOB C IN ES;Y 01ERLD E BN R?ROERD EA;R RRJEOB T TS * **R*TOEC SXTNED EA*R**;* IOSCDI T EM T IS LADREC IS;D ) SP-(T,LSBJ#O V MO --R-TOEC SXTNED EA R -ES;Y LEDUMOT EX NOR F7F OINEG BOMFRT SEFF OPSEE;K 0 : ETFSOF T IS LUTNP IINS MENAO TERNTOI;P 0 : TRMPNA Y TTM RO FUTNP IESAM NOR FERNTOU;C 0 : TRMCNA / N./O 50AD.R N IOCTSES CEENEREF RORITON MOFE AM;N / M/. 50AD.R: ECNSMO NKLIO TESULOD MOF# F ONTOU;C 0 D OR.W: NTDCMO XTTEW/D DEOA LSSREDD ASTHEIG HRSBEEMEM;R 0 D OR.W: PCGHHI " PC "VETILAREF OUEAL VNTREUR;C 0 D OR.W C:RPCU E ULOD MINK OCBLT RSFIR FOG LA;F 0 : K1OCBL CKLO BUTNP IIN6 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? 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.W: BJROPT E IZ SAMGRRO PNTREUR;C 0 D OR.W: ZESIPR 0 1, E YT.B: ROEZON E ULOD MADLOF OINEG BOMFRT SEFF OPSEE;K 0 : ETFSOF T IS LUTNP IINS MENAO TERNTOI;P 0 : TRMPNA Y TTM RO FUTNP IESAM NOR FERNTOU;C 0 : TRMCNA NKLIO TESULOD MOF# F ONTOU;C 0 D OR.W: NTDCMO / N./O 50AD.R N IOCTSES CEENEREF RORITON MOFE AM;N / M/. 50AD.R: ECNSMO XTTEW/D DEOA LSSREDD ASTHEIG HRSBEEMEM;R 0 D OR.W: PCGHHI " PC "VETILAREF OUEAL VNTRE4ITINO G: REMOO ;N 90TBNX T BL E?ULOD MINS ORCTSEE OR MNY;A CTCTSE C DE DSEA RORCTSEE IVSSCEUC SOR FREHEP OO;L : 10TBNX D DEEE NOT NADREW NEO-;N 30TBNX O BL R?TOEC SEROW LTOINE WRE;A K2JBOB,#TRKPBL P CM 1] [TOR PTT NI;I .0R1PTO,ZRNE#O V MO : LKTBNX ESULOD MREMOO ;N 80TBNX BR CKLO B AADRED ANE ULOD MXTNER FOT NI;I D MOXT,NPC R JS: 90TBNX F.AL HERPP UHE TTOIN ; 3E ACPLT ENRRCUO TERNTOI;P 0 D OR.W: TRKPBL T UNCOE YT;B 0 D OR.W : BC " TSECAS "NGRINOIGR FOH TCWI;S 0 D OR.W: CHWIAS OLMBSYT ENRRCUR FOG LA FOCEL/RBS;A 0 D OR.W: ALSVAB ERFFBUN IERADHEK AS TOFD OR WSTIR;F S YTDB+LK1TBTX = GNDBHE E AG.P F RED NEFIDEUNF OMENAN IRSHA CIX;S , ,,,, E YT.B: AMDNUN 0 D OR.W 6 D OR.W: EFDDUN ******************************************************************** ; 2 ;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) ;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 MODULEUR;C 0 D OR.W C:RPCU E ULOD MINK OCBLT RSFIR FOG LA;F 0 : K1OCBL CKLO BUTNP IINE ACPLT ENRRCUO TERNTOI;P 0 D OR.W: TRKPBL T UNCOE YT;B 0 D OR.W : BC " TSECAS "NGRINOIGR FOH TCWI;S 0 D OR.W: CHWIAS OLMBSYT ENRRCUR FOG LA FOCEL/RBS;A 0 D OR.W: ALSVAB E AG.P F RED NEFIDEUNF OMENAN IRSHA CIX;S , ,,,, E YT.B: AMDNUN 0 D OR.W 6 D OR.W: EFDDUN ******************************************0 CKLO BSTLAE THE RCFOO TLEDUMOE THN IORCTSEL NAFIE TH ; R TEAFD EA RISR TOEC SALONTIDIADE ON R.FEUF BORCTSEO-TW ; E THF OLFHAR PEUPN IISK OCBLT EX NOFE YT BNE OSTEA LAT ; L TIUNS ORCTSEN IDSEA RNETIOUBRSU ":CKLO BXTNE;" E AG.P PC S RT: 30TMNX T XI ED"OO"GE AK TTOP UM;B ) SP,(#2 D AD D EA RSTIR FCEOR FTOR TEINPOK OCBLT NI;I TRKPBL2,BKBJ#O V MO E AM NXTNEO TCEANDV;A TRMPNA.,#8 D AD /N VE.E 6:D0EN LF E YT.B " ESNCREFERED VEOLESNR"U IISC.A F ,LLF E YT.B */********/* IISC.A 0 D OR.W . 4-6-D0EN D OR.W: EDDHUN E AG.P N VE.E 5:D0EN 0 0,0,0,0,0, E YT.B: ALBVGL ; ,'' 0,0,0,0,0,0, E YT.B: ALOBGL " " IISC.A G LA FM" "LEIBSSPOT PUO TCELA;P 0 E YT.B G:LAMF " " IISC.A T ,H' E YT.B 0 D OR.W . 4-5-D0EN D OR.W Y:TREN E AG.P ********************. 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 ; 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************************** ; N VE.E 6:D0EN LF E YT.B " ESNCREFERED VEOLESNR"U IISC.A F ,LLF E YT.B */********/* IISC.A 0 D OR.W . 4-6-D0EN D OR.W: EDDHUN E AG.P N VE.E 5:D0EN 0 0,0,0,0,0, E YT.B: ALBVGL ; ,'' 0,0,0,0,0,0, E YT.B: ALOBGL " " IISC.A G LA FM" "LEIBSSPOT PUO TCELA;P 0 E YT.B G:LAMF " " IISC.A T ,H' E YT.B 0 D OR.W . 4-5-D0EN D OR.W Y:TREN E AG.P, D EA RSTLAN OORCTSEA TREXE ONT AN;W CTCTSE C IN T UNCOR TOEC;S CTCTSE),R06( V MO # R TOEC SRTTA;S ECJSOB),R04( V MO 0 ,RTRMPNA V MO LEDUMON ICKLO BSTIR FGSLA;F K1OCBL R CL ITEX" NEDO "KETA: REMOO ;N 30TMNX T BL S?LEDUMOE OR;M TRMCNA C DE E ULOD MBJ OXTNED EA RTOS ERETAMAR PUPS ET SNETIOU;R : ODTMNX E AG.P PC S RT P POEG,RR5 R JS: 04UISQ 01UI+************************************************ ; N VE.E 4:D0EN 0 0,0,0,0,0, E YT.B: IZMSCU HT0,0,0,0,0,0, E YT.B: IZCSSE HT0,0,0,0,0,0, E YT.B: ALCVSE HTT,,H'> E YT.B 0 0,0,0,0,0, E YT.B: AMCNSE '< E YT.B 0 D OR.W . 4-4-D0EN D OR.W : CTSE E AG.P N VE.E 3:D0EN " ALOT"T IISC.A HT E YT.B E"IZ"S IISC.A HT E YT.B T"SEFF"O IISC.A HT E YT.B " RYNT"E IISC.A T ,HHT E YT.B " ON* 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 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! ******************************************************************** ; N VE.E 4:D0EN 0 0,0,0,0,0, E YT.B: IZMSCU HT0,0,0,0,0,0, E YT.B: IZCSSE HT0,0,0,0,0,0, E YT.B: ALCVSE HTT,,H'> E YT.B 0 0,0,0,0,0, E YT.B: AMCNSE '< E YT.B 0 D OR.W . 4-4-D0EN D OR.W : CTSE E AG.P N VE.E 3:D0EN " ALOT"T IISC.A HT E YT.B E"IZ"S IISC.A HT E YT.B T"SEFF"O IISC.A HT E YT.B " RYNT"E IISC.A (SQ BR K OCBLN ILLTI;S 03UISQ T BG R2 C DE R FENSRA TCKLO;B + 4)(R+,0)(R V MO: 03UISQ L BOYM SER PDSOR W=#ERNTOU;C 2 ,RR1 V MO: 02UISQ ITEX: ES;Y 04UISQ ISBH E?BLTAF OOP TEDCHEA;R MESY,UR0 P CM: 01UISQ R TEUNCOS AOWEL BSE;U R1 R AS 1 RVEBO ANTMELE ENE OYSTA;S 0 ,RR1 D AD E IZ SNTMELE;E 1 ,RYMPS#B V MO 0 ,RR4 V MO V SAEG,RR5 R JS'TIEC"S IISC.A F ,L']0,0,0,0,0,0, E YT.B E:TLTI [": LEIT TNTMELE"E IISC.A LF E YT.B *"********"* IISC.A 0 D OR.W . 4-3-D0EN D OR.W: LEDUMO E AG.P N VE.E 1:D0EN F ,LLF0,0, E YT.B: TENUMI R ,C':0,0, E YT.B : URHO T ,HHT0,0, E YT.B : ARYE R ,C'/0,0, E YT.B Y:DA R ,C'/0,0, E YT.B H:NTMO T ,HHT E YT.B *"** *"] IISC.A ************ **************;* EDOD-CRDHAY TLENRR& CMPB #OBJMN,FLAGS+1(R0) ;FILTER OUT OBJ MOD NAMES BEQ PTGL04 MOV R0,R4 ;NOW POINTS TO FOUND NAME IN LSD MOV 4(R4),R0 ;SYMBOL'S FLAGS BIC #-ABSREL-1,R0 ;ISOLATE ABS/RELOC FLAG MOV R0,ABSVAL ;=0: ABSOLUTE; ELSE RELOCATABLE MOV (SP)+,R0 ;UNSAVE ADD #2,(SP) ;"GOOD" RETURN RTS PC .PAGE ;NO MATCH PTGL04: ADD #BPSYM,R0 ;NEXT LSD ENTRY T ,HHT E YT.B " ONTIEC"S IISC.A F ,L']0,0,0,0,0,0, E YT.B E:TLTI [": LEIT TNTMELE"E IISC.A LF E YT.B *"********"* IISC.A 0 D OR.W . 4-3-D0EN D OR.W: LEDUMO E AG.P N VE.E 1:D0EN F ,LLF0,0, E YT.B: TENUMI R ,C':0,0, E YT.B : URHO T ,HHT0,0, E YT.B : ARYE R ,C'/0,0, E YT.B Y:DA R ,C'/0,0, E YT.B H:NTMO T ,HHT E YT.B *"** *"] IISC.A ************ ****$ E BLTAD F'DEUNE THM RO FR4Y BTOD TEINPOY TRENE OVEM;R : SHUISQ ******************************************************************** ; 01SQUN BR ) R1-(),R0-( V MO ) R1-(),R0-( V MO ) R1-(),R0-( V MO ) R1-(),R0-( V MO E OV MCKLO;B ) R1-(),R0-( V MO: 02SQUN PC S RT R0+,P)(S V MO R1+,P)(S V MO NE OERTHNO AVEMO: ET YOT;N 02SQUN I BH T?YEN C'LOD RESIDEO TWNDOE WRE;A #CUE AM;N P"TMOD"L IISC.A 6 .-.= **********ICAMYN DISE AM NNTMELE EADLON HE WISTHE OVEM R**************;* ICAMYN DBEY LLUANTVE ELLWI- E AM NNTMELE EADLO ;0 0,0, D OR.W: AMDNLO ESYT BOF# N VE EBET US;M ["T ENEMELD OA L****" IISC.A " ****P MAD OA LODSLRO* **"* IISC.A FF E YT.B 0 D OR.W . 4-1-D0EN D OR.W: NGDIHE ******************************************************************** ; N VE.E: NDNEER CR E YT.B 0 0,0, E YT.B" 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 PC ;NO: ERROR RETURN CMPB #SECTN,FLAGS+1(R4) ;YES: IS IT A SECTION NAME? **********;* EDOD-CRDHAY TLENRRCUE AM;N P"TMOD"L IISC.A 6 .-.= **********ICAMYN DISE AM NNTMELE EADLON HE WISTHE OVEM R**************;* ICAMYN DBEY LLUANTVE ELLWI- E AM NNTMELE EADLO ;0 0,0, D OR.W: AMDNLO ESYT BOF# N VE EBET US;M ["T ENEMELD OA L****" IISC.A " ****P MAD OA LODSLRO* **"* IISC.A FF E YT.B 0 D OR.W . 4-1-D0EN D OR.W: NGDIHE ******************************************************************** ; N VE.E: NDNEER CR 4 ,RR0 P CM: 01SQUN D ARPW UNDPAEXD AN..;. 1 ,RYMPS#B D AD 1 ,RR0 V MO . ..RYNT EOP T @RTTA;S R0E,YMUS V MO P)(S,-R1 V MO P)(S,-R0 V MO 'NOC LLEHOD RESIDEO TTSINPO4 RE.BLTAN ILEHOA E AK;M : SHUISQUN E AG.P R4T ARTSEINO ;G 01SYIN BR: 03PTIN S ERTH OTHWIG ONALT ICEANDV ASTMU..;. J OBTR,PYMPS#B D AD 03PTIN I BH ..R.TEINPOD MOJ OBW LOBEG INRTSEINF ;I J OBTR,PR4 P CM : UMRNER " #ORRR"E IISC.A CR E YT.B 0 D OR.W E AGSSMER ROERN IRSHA C;# -4-.NDNEER: SGRMER E AG.P N VE.E: ND2END CR E YT.B D"EN2 #SSPAD LOOS"R IISC.A CR E YT.B 0 D OR.W -4-.ND2END: SG2MND ******************************************************************** ; N VE.E: NDS2PA CR E YT.B N"GIBE2 #SSPAD LOOS"R IISC.A CR E YT.B 0 D OR.W GESAES M2"S AS"PN IRSHA C;#  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 GLOBAL NAME (RAD50) ; OUTPUT: R4=VALUE OF GLOBAL JSR PC,PTGLOB ;SEARCH FOR NAME BR LDER22 ;NAME NOT FOUND IN LSD MOV VALF(R4),R4 ;FOUND: GET VALUE  MOVB DFLIST+2,R3 ;ERROR BYTE BEQ LODL24 ;O.K. CMP #9.,R3 ;THIS ERROR IS O.K. BNE LDER36 ;ANY OTHER IS AN ERROR LODL24: MOV #DFLIST,-(SP) ; ******** EMT DEFINE ;GO GET FILE DEFINED ; ******** TSTB DFLIST+2 ;ERROR? BNE LDER33 ;YES ;*************** NOW TRANSFER BATCH ELEMENT TO THE ROS FILE************* JSR PC,REGSAV ;NEED E YT.B 0 0,0, E YT.B: UMRNER " #ORRR"E IISC.A CR E YT.B 0 D OR.W E AGSSMER ROERN IRSHA C;# -4-.NDNEER: SGRMER E AG.P N VE.E: ND2END CR E YT.B D"EN2 #SSPAD LOOS"R IISC.A CR E YT.B 0 D OR.W -4-.ND2END: SG2MND ******************************************************************** ; N VE.E: NDS2PA CR E YT.B N"GIBE2 #SSPAD LOOS"R IISC.A CR E YT.B 0 D OR.W  -4-.NDS2PA: MGS2PA ******************************************************************** ; N VE.E: ND1END CR E YT.B D"EN1 #SSPAD LOOS"R IISC.A CR E YT.B 0 D OR.W E AGSSME" 1ND"EN IRSHA C;# -4-.ND1END: SG1MND ******************************************************************** ; N VE.E D:ENID # ,'CR E YT.B " IA ID LOOS"R IISC.A CR E YT.B 0 D OR.W GESAES MD.I.N IRSHA C;# 4 .-D-EN 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)+ ;SYMBOL ENTRY MOV (R4)+,(R0)+ MOV (R4)+,(R0)+ ADD #BPSYM,USYME ;BUMP POINTER JSR PC,SYMOVTABLE POINTERS BELOW MOV BFSECT,R0 ;INIT RELATIVE READ SECTOR # CLR R1 ;INIT RELATIVE WRITE SECTOR MOV DFLIST+6,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. JSR PC,TEXTIO ;GO READ OR WRITE WITH"TXTLST" MOV R1,TXTSEC ;SET UP WRITE SECTOR MOV R2,TXTHED ;WRITE FILE GESAES M2"S AS"PN IRSHA C;# -4-.NDS2PA: MGS2PA ******************************************************************** ; N VE.E: ND1END CR E YT.B D"EN1 #SSPAD LOOS"R IISC.A CR E YT.B 0 D OR.W E AGSSME" 1ND"EN IRSHA C;# -4-.ND1END: SG1MND ******************************************************************** ; N VE.E D:ENID # ,'CR E YT.B " IA ID LOOS"R IISC.A CR E YT.B 0 D OR.W GESAES MD.I.N ID G:MSID E AG.P L UL FENWHT PUUT OA:RE ALDUI BERILRA;T 8.12.+.= : CKLOLBAITR E IM T AATR TOEC SNE OTERI;W . 64 D OR.W ERMBNUR TOEC SERILRA;T 0 D OR.W: ECASTR 0 0,0, D OR.W A RE AERILRA TOMFRE ITWRS AYLW;A 1 E YT.B: .WARTR 0 E YT.B E IL FCHAT BOR FD.I.E IL;F IDCHBT D OR.W ESITWRR LEAITRR FOR DEEA;H : EDAHTR ******************************************************************** ; F ;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 HOLE AT SYME MOV (R2)+,(R4)+ ;MOVE IN THE ENTRY MOV (R2)+,(R4)+ MOV (R2)+,(R4)+ MOV (R2)I.D. INCB TXTR.W ;SET TO WRITE JSR PC,TEXTIO ;GO READ OR WRITE WITH"TXTLST" CMPB (R0)+,(R1)+ ;BUMP BOTH SECTOR NUMBERS CMP R0,TRASEC ;HAVE WE PASSED LAST SECTOR? BLE LODL30 ;MORE SECTORS TO GO MOV R1,BFSIZE ;# OF SECTORS USED UP IN LOAD MODULE ;*************** NOW INIT ALL RELEVANT TASK AND PRIOITY TABLES********** JSR PC,REGPOP ;RESTORE TABLE POINTERS ASR IRSHA C;# 4 .-D-ENID G:MSID E AG.P L UL FENWHT PUUT OA:RE ALDUI BERILRA;T 8.12.+.= : CKLOLBAITR E IM T AATR TOEC SNE OTERI;W . 64 D OR.W ERMBNUR TOEC SERILRA;T 0 D OR.W: ECASTR 0 0,0, D OR.W A RE AERILRA TOMFRE ITWRS AYLW;A 1 E YT.B: .WARTR 0 E YT.B E IL FCHAT BOR FD.I.E IL;F IDCHBT D OR.W ESITWRR LEAITRR FOR DEEA;H : EDAHTR **************************************** A AT DCTJEOBR FOK OCBLD ONEC;S 8.12.+.=: K2JBOB TADAT ECBJ OOR FCKLO BSTIR;F 8.12.+.=: K1JBOB S ORCTSEO TWN IADRES AYLW;A 8.12 D OR.W R BEUM NORCTSEE IVATEL;R 0 D OR.W: ECJSOB 0 0,0, D OR.W AGFLE ITWRD/EA;R 0 E YT.B ORCTSEE IVATEL;R 0 E YT.B E IL FCHAT BOR FD.I.E IL;F IDCHBT D OR.W ESULOD MCTJEOBG INADRER FOR DEEA;H : EDJHOB ********************+,(R4)+ JSR PC,SYMOVF ;OVERFLOW? JSR R5,REGPOP ;RESTORE RTS PC ; ******************************************************************** LDER22: MOV #22,R4 ;GLOBAL SYMBOL SEARCH FIALURE JSR PC,ERRPRT .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  R2 ;PRIORITY WAS SHIFTED ABOVE MOVB R2,TPRTY(R1) ;PRIORITY CLRB TSTAT(R1) ;TASK STATUS CLRB IOSTAT(R1) MOVB (SP)+,BSIZE(R1) ;INIT # "PAGES" IN OVERLAY ASL R1 ;NOW A WORD INDEX MOV 6(R3),IFD(R1) ;INIT FILE I.D. TSTB HEDBGN+HSTATS ;WAS AN IFD REQUESTED? BPL LODL25 ;NO IFD RETURNED: LEAVE FILE I.D. MOV 4(R3),R0 ;IFD WORD BIS **************************** ; A AT DCTJEOBR FOK OCBLD ONEC;S 8.12.+.=: K2JBOB TADAT ECBJ OOR FCKLO BSTIR;F 8.12.+.=: K1JBOB S ORCTSEO TWN IADRES AYLW;A 8.12 D OR.W R BEUM NORCTSEE IVATEL;R 0 D OR.W: ECJSOB 0 0,0, D OR.W AGFLE ITWRD/EA;R 0 E YT.B ORCTSEE IVATEL;R 0 E YT.B E IL FCHAT BOR FD.I.E IL;F IDCHBT D OR.W ESULOD MCTJEOBG INADRER FOR DEEA;H ************************************************ ; K OCBLE AV SXTTED ONEC;S 8.12.+.=: K2TBTX CKLO BVESAT EX TSTIR;F 8.12.+.=: K1TBTX METIH AC EERSFANTRO TDSOR W;# 0 D OR.W: NTTCTX XTTEE OTRI/WADREO TORCTSEE IVATEL;R 0 D OR.W: ECTSTX 0 0,0, D OR.W E YT BTERI/WADRET EX;T 0 E YT.B: .WTRTX ORCTSEE IVATEL;R 0 E YT.B E IL FCHAT BOR FD.I.E IL;F IDCHBT D OR.W NSIOATEROPE IT 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 HAS ENDED: INSERT HERE. ; IT IS STILL IN THIS SECTION: COMPA #100000,R0 ;SHOW IFD RATHER THAN FILE I.D. MOV R0,IFD(R1) ;USE RATHER THAN FILE I.D. LODL25: CLR HEADER(R1) ;SHOW READY TO RUN MOV #$TKFLS,-(SP) ;MUST WRITE OUT CURRENT VERSION OF JSR PC,PFRITE ;TASK TABLES, SINCE WE UPDATED THEM LODL28: ;COMMON EXIT POINT: BE SURE TO CLOSE ALL OPEN "BFUP" ELELMENTS ; (LIST IS ALREADY INITED TO CLOSE THE LOAD MODULE.) MOV MODCNT,R0 ;# OF OBJECT MODULE ELEMENTS TO CLOSE : EDJHOB ******************************************************************** ; K OCBLE AV SXTTED ONEC;S 8.12.+.=: K2TBTX CKLO BVESAT EX TSTIR;F 8.12.+.=: K1TBTX METIH AC EERSFANTRO TDSOR W;# 0 D OR.W: NTTCTX XTTEE OTRI/WADREO TORCTSEE IVATEL;R 0 D OR.W: ECTSTX 0 0,0, D OR.W E YT BTERI/WADRET EX;T 0 E YT.B: .WTRTX ORCTSEE IVATEL;R 0 E YT.B E IL FCHAT BOR FD.I.E IL;F IDCHBT WRD/EA RERFFBUE AV SXTTER FOR DEEA;H : EDTHTX E AG.P ******************************************************************** ; LEFIN IRSTOEC S;# 0 D OR.W PETYE IL;F 0 D OR.W D.I.E IL;F 0 D OR.W RYTOECIR DRECOF IEDRNTURE: FD;I 0 D OR.W K TSRR,EORRR;E 0 0, E YT.B T IS LE"IL FNEFIDE;" 1 D OR.W: STLIDF * **************************************************** RE 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 BELOW OBJ MOD POINTER... BHI INPT03 ADD  MOV #NAMBUF,R1 ;LIST OF MODULE NAMES LODL40: MOV #BFBLK1,-(SP) EMT BFCLOS ;CLOSE LOAD MODULE FIRST, THEN OBJ MODS CLR BFSTAT ;TYPE = OBJECT MODULE MOV (R1)+,BFNAME ;FILL LIST WITH NEXT OBJ MODULE NAME MOV (R1)+,BFNAME+2 CMP (R1)+,(R1)+ ;BUMP PAST SECTOR INFO IN LIST DEC R0 ;MORE? BGE LODL40 .PAGE MOV #ND2MSG,TTYBUF ;"PASS 2 END" D OR.W NSIOATEROPE ITWRD/EA RERFFBUE AV SXTTER FOR DEEA;H : EDTHTX E AG.P ******************************************************************** ; LEFIN IRSTOEC S;# 0 D OR.W PETYE IL;F 0 D OR.W D.I.E IL;F 0 D OR.W RYTOECIR DRECOF IEDRNTURE: FD;I 0 D OR.W K TSRR,EORRR;E 0 0, E YT.B T IS LE"IL FNEFIDE;" 1 D OR.W: STLIDF * ********************************** ; S)ORCTSEF O(#H GTEN LNTMELE;E 0 D OR.W: ZESIBF ) VETILAREE IL(FR TOEC SRTTA SNTMELE;E 0 D OR.W: CTSEBF E YP TNTMELE;E 0 E YT.B: PETYBF S TUTA SNTMELE;E 0 E YT.B: ATSTBF 0 0, D OR.W: MENABF # E IL;F 0 D OR.W D OR WORRR;E 0 D OR.W: K1BLBF T IS LP"FU"B ; * ****************************************************************** ; ERFFBUA AT;D EDAHTR D OR.W ED #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? BHI UNSQ02 ;NOT YET: MOVE ANOTHER ONE MOV MESSAGE MOV #TTYLST,-(SP) EMT TTYOUT EMT EXIT ;****** E N D O F L O A D E R****** BSZTAB: ;TABLE OF MAX ALLOWABLE BLOCK OR "PAGE" SIZES ; FOR EACH PRIORITY. THE SIGN BIT IS SET IF THE PRIORITY IS ; DYNAMIC, I.E., NOT FIXED NOR TIME-SLICE. THEIR PARTITIONS ARE ; FIXED IN SIZE, AND THEY MUST REQUEST THE MAXIMUM SIZE WHENEVER ; THEY ARE LOADED INTO MEMORY. .WORD PRIP01&100000!$PS001 .WOR********************************************** ; S)ORCTSEF O(#H GTEN LNTMELE;E 0 D OR.W: ZESIBF ) VETILAREE IL(FR TOEC SRTTA SNTMELE;E 0 D OR.W: CTSEBF E YP TNTMELE;E 0 E YT.B: PETYBF S TUTA SNTMELE;E 0 E YT.B: ATSTBF 0 0, D OR.W: MENABF # E IL;F 0 D OR.W D OR WORRR;E 0 D OR.W: K1BLBF T IS LP"FU"B ; * ****************************************************************** ; ERFFBUA AT;D RVSERED,OR WORRR;E 0 0, D OR.W: RRAETR ELEV;LORRR;E 3 0, E YT.B 0 D OR.W D ENSPSUC,IS;D 2 1, E YT.B R LEAITRR FOT IS;L 1 D OR.W: STALTR E AG.P A RE AXTTEO /TOMFRW R/S AYLW;A EDTHTX D OR.W EDRVSERED,OR WORRR;E 0 0, D OR.W: RRTETX ELEV,LORRR;E 3 0, E YT.B 0 D OR.W NDPEUS SC;IS;D 2 1, E YT.B A RE AXTTEM RO/FTOS ERSFANTRR FOT IS;L  (SP)+,R1 MOV (SP)+,R0 ADD #BPSYM,SYME ;BUMP BOTH POINTERS ADD #BPSYM,USYME 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,REGSAD PRIP02&100000!$PS002 .WORD PRIP03&100000!$PS003 .WORD PRIP04&100000!$PS004 .WORD PRIP05&100000!$PS005 .WORD PRIP06&100000!$PS006 .WORD PRIP07&100000!$PS007 .WORD PRIP08&100000!$PS008 .WORD PRIP09&100000!$PS009 .WORD PRIP10&100000!$PS010 .WORD PRIP11&100000!$PS011 .WORD PRIP12&100000!$PS012 .WORD PRIP13&100000!$PS013 .WORD PRIP14&100000!$PS014 .WORD PRIP15&10000 EDAHTR D OR.W EDRVSERED,OR WORRR;E 0 0, D OR.W: RRAETR ELEV;LORRR;E 3 0, E YT.B 0 D OR.W D ENSPSUC,IS;D 2 1, E YT.B R LEAITRR FOT IS;L 1 D OR.W: STALTR E AG.P A RE AXTTEO /TOMFRW R/S AYLW;A EDTHTX D OR.W EDRVSERED,OR WORRR;E 0 0, D OR.W: RRTETX ELEV,LORRR;E 3 0, E YT.B 0 D OR.W NDPEUS SC;IS;D 2 1, E YT.B A RE AXTTE 1 D OR.W: STTLTX * ****************************************************************** ; N RUG INUR DENOSCH: ERFFBUA AT;D 0 D OR.W: UFPBMA D VEERES;R 0 0, D OR.W ELEV,LORRR;E 0 0, E YT.B E ETPLOM C/O;I 0 D OR.W D ENSPSUR,TEINPRE IN;L 2 3, E YT.B AP MADLOR FOT IS;L 1 D OR.W: STPLMA * ****************************************************************** ; ERFFBUA AT;D V MOV R4,R0 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: JS 0!$PS015 .WORD PRIP16&100000!$PS016 .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 M RO/FTOS ERSFANTRR FOT IS;L 1 D OR.W: STTLTX * ****************************************************************** ; N RUG INUR DENOSCH: ERFFBUA AT;D 0 D OR.W: UFPBMA D VEERES;R 0 0, D OR.W ELEV,LORRR;E 0 0, E YT.B E ETPLOM C/O;I 0 D OR.W D ENSPSUR,TEINPRE IN;L 2 3, E YT.B AP MADLOR FOT IS;L 1 D OR.W: STPLMA * ******************************************************** EDJHOB D OR.W D VEERES RD,OR WORRR;E 0 0, D OR.W: RRJEOB TYRIIOPRT ESQUREC IS DK,AS TRR;E 3 0, E YT.B 0 D OR.W NDPEUS SC:IS;D 2 1, E YT.B STLID EA RLEDUMOT ECBJ;O 1 D OR.W: STJLOB ******************************************************************** ; ERFFBUA AT;D 0 D OR.W: UFYBTT D VEERES;R 0 0, D OR.W ELEV,LORRR;E 0 0, E YT.B E ETPLOM C/O;I R R5,REGPOP SUB #BPSYM,USYME ;ADJUST POINTER TO BEGIN OF UNDEFINEDS 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 SEMOV (SP)+,R4 RTS R5 ;...AND RTN ; ******************************************************************** GETPCR: ;RETURNS WITH PC AS OFFSET FROM RELOCATABLE ZERO MOV #-LDBYTS+2,R4 ;ACCOUNT FOR LEAD WORDS ALREADY IN CURPC BR GETPC1 GETPC: ;RETURN WITH OFFSET FROM LOAD MODULE BASE ZERO MOV #2,R4 ;SINCE PC INCREMENTS AFTER FETCH GETPC1: ADD CURPC,R4 ;PC @ TEXT BLOCK START ADD OF M SUCKHE CUMCC;A 2 ,RR3 D AD TEBYT EX NCTRAXT;E R3+,0)(R VBMO: 50TBNX Y NL OTADAF ONTOU CTEBYE AV;S C ,BR1 V MO S RDWOC BND A0"1- "IMELO TBCE UCED;R 1 ,R#4 B SU C BESUDCLINH ICWH, UMKSECCHT NI;I 2 ,RR1 V MO D:EA RCTREOR CFYRIVEO TUMKSECCHE UTMPCOO TNTWAW NO ; TEBYA AT DSTIR FTOR TEINPOE AV;S 5 ,RR0 V MO 02ERLD E BN ROZEE BSTMUC BOFE YT BERPP;U 0 D OR.W D ENSPSU: PETYL AL C1; #TY TE:ICEV;D 2 0, E YT.B STLIO I/E YPETEL;T 1 D OR.W: STYLTT CEENQUSE" SELO"CA VIT XI;E 28DLLO P JM: 10RPER D TEESQUREN URET;R PC S RT N URET RSTUEEQ ROT NID D #ORRR;E 10RPER L BP R4H IT WESOD CET SND ARETOES;R P POEG,RR5 R JS GESAES MSTUEEQ;R UTYOTT T EM ) SP-(T,LSTY#T V MO GESAES MORRR ENGTIINPRR FOT NI;I UFCTCT ;WANT ONE EXTRA SECTOR ON LAST READ ADD #8.,NAMPTR ;ADVANCE TO NEXT 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 ; FSET,R4 ;OFFSET SPECIFIED WITH RLD COMMAND RTS PC ; ******************************************************************** SYMOVF: ;CHECK FOR SYMBOL TABLE OVERFLOW CMP USYME,#LSDEND-BPSYM BHI LDER26 ;SYMBOL TABLE END REACHED RTS PC LDER26: MOV #26,R4 ;OVERFLOW: "TH-TH-THAT'S ALL, FOLKS!" JSR PC,ERRPRT .PAGE SRMODN: ;SEARCH DEFINED SECTION OF LSD FOR A MODULE NAME ; + 0)(R TBTS T UNCOE YT B'SCKLO;B R1+,0)(R VBMO CKLO BSSCERO POW ND:UNFON EE BAS HCEENQUSE] -0[1A A!YE ; E AG.P ] [0R FOK ECCH- O ;N 44TBNX E BN ? EDSTTEN EE B0] [ND A1] [THBOE AV;H 0 1.TR,P#1 T BI E OD CINE YT BXTNEO TMPBU: CHAT;M .0R1PT C IN NGKIOO LEPKE- H TCMAO ;N 40TBNX E BN ? CEENQUSER FOH TCMAA E YT BXTNES ;I 0 1.TR@P+,0)(R PBCM: 46TBNX P UCKLO BXTNEE OV MGOD AN..YBTTG,MSRR#E V MO ONSIERNVCOO TNTOI PRYNT ERYDAONEC SSE;U A NT2O,BPC R JS R ERMBNUE AGSSMER HA-C 3;A 2 ,R#3 V MO ERFFBUI CIASN IARCHT AS;L R33,M+NURR#E V MO RNTUREE WSECAN ;I V SAEG,RR5 R JS .ITEXL IL WSEEL; ERLLCAO TRNTUREL IL WT,SES ISB MIF ; ERMBNUR ROERY ARIN BTHWID TENI IDYEALR AR4 ; E INUTROG INNTRI PGESAES MORRR;E : RTRPER ****************************************************************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 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 MOD INPUT: R4 POINTS TO RAD50 NAME ; OUTPUT: R4 POINTS TO NAME IN LSD (IF FOUND) ; R4 UNCHANGED IF NOT FOUND ; CALL: 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 ;. 10TBNX BR K OCBLW NEN ICELA PEROPPRR FOE ATPD;U R PTLK,BR0 V MO G INGOP EE K -ET YOT;N 46TBNX E BG T?YEK OCBLP TOF OND;E R1 C DE: 44TBNX 1] [TOR PTT NI;I .0R1PTO,ZRNE#O V MO: 40TBNX K OCBLT EX NRTTA STOE NCUEEQ S0"1- " AOR FCHARSE ; RYDAUNBOK OCBLF OSECAN I0"1.TR"PT SERED OIAV ;44TBNX BR ORCTSEP TON INGNIAIEM RESYT B;# 1 ,RR0 B SU EAARR WELOF OOP;T R12,BKBJ#O V MO**** ; RNTURE: EDLLFIR FEUF BIISC;A PC S RT REMOR FOK AC;B TAONB2 T BG ? GOO TTSGIDII CIASE OR;M R2 C DE R4 R AS R4 R AS N IOATAGOPPRN IG SNTVERE;P R40,0000#1 C BI ITIG DALCT OXTNER FOG INFTHI SINEG;B R4 R AS E OD CIISC ATOE NGHA;C ) R3,(60#0 SBBI TSBIE RETHT ANICIFGNSIT ASLEY NL OVEEA;L ) R3,(70#3 CBBI ITIG DALCT OXTNER FON URET RULE? 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 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  ;NOT FOUND! ADD #2,(SP) ;ALTER RETURN FOR "NOT FOUND" RTS PC SRMOD2: CMPB #OBJMN,FLAGS+1(R0);THIS ENGRY AN OBJ MOD NAME? 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! 0 ,RTRKPBL V MO T ARSTK OCBLT EX NNDFIO TREPARE;P : 30TBNX E AG.P EAARR TOEC SOP TTOK AC BERNTOI PFTHI;S TRKPBL.,28#1 B SU METIT EX NOR F #ORCTSEP UM;B ECJSOB C IN ES;Y 01ERLD E BN R?ROERD EA;R RRJEOB T TS * **R*TOEC SXTNED EA*R**;* IOSCDI T EM T IS LADREC IS;D ) SP-(T,LSBJ#O V MO --R-TOEC SXTNED EA R -ES;Y LEDUMOT EX NOR FITINO G: REMOO ;N OPLOO LS;A 3)(R,-R4 VBMO H GTEN LONTIRATE INGTIET-SRE PENWHE ER HERNT;E : TAONB2 ) RSHA C 6ALRMNO (THNGLEN IOATERITT NI;I 2 ,R#6 V MO: OCN2BI R BEUM NRYNABI= 4 R ; 1 S+ESDRADD ENN IOATINSTDE= 3 R ; ) A"NT2O"B @ERNT EIF (THNGLEN IOATERIT= 2 R T:PUIN ; " ONSIERNVCOI CIASL TAOCO TRYNABI "NETIOUBRSU ; ******************************************************************** ; PC S RT  MOV BLKPTR,R0 MOV #OBJBK2,R1 ;TOP OF LOWER AREA SUB R0,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  MOV R0,R4 ;NOW POINTS TO LSD ENTRY MOV (SP)+,R0 RTS PC .PAGE PTGLOB: ;SEARCH LSD FOR A GLOBAL NAME (NOT OBJ MOD) ;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 CUR 90TBNX T BL E?ULOD MINS ORCTSEE OR MNY;A CTCTSE C DE DSEA RORCTSEE IVSSCEUC SOR FREHEP OO;L : 10TBNX D DEEE NOT NADREW NEO-;N 30TBNX O BL R?TOEC SEROW LTOINE WRE;A K2JBOB,#TRKPBL P CM 1] [TOR PTT NI;I .0R1PTO,ZRNE#O V MO : LKTBNX ESULOD MREMOO ;N 80TBNX BR CKLO B AADRED ANE ULOD MXTNER FOT NI;I D MOXT,NPC R JS: 90TBNX F.AL HERPP UHE TTOIN ; CKLO BSTLAE THE RC R TEINPRE IN;L TRRNLP T EM ) SP-(T,LSAP#M V MO R TEINPRE IN LTOT EME AK MTOE INUTRON MOOM;C : LLCALP E AG.P PC S RT C PEDAV SOP;P + P)(S T TS RDWOT EX TENOPT EX NTOR TEINPOL UACT;A R PTXT,TR3 V MO R31,BKXT#T D AD A RE AXTTEF OOP TOMFRT SEFF OET;G 3 ,RR4 B SU CKLO BXTTET EX NOFN GIBER FOC ;P 3 ,RP)(S V MO E NGHA CPCA F OSECAN I",TRTPTX "TELACUAL# BR NXTB10 ;...AND GO MOVE NEXT BLOCK UP NXTB46: 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 PROCESS BLOCK MOVB (R0)+,R1 ;BLOCK'S$RENT OBJECT MODULE ; AREA IN THE LSD. ; INPUT: R4=PRT TO RAD50 NAME ; OUTPUT: R4=PTR TO LSD ENTRY IF FOUND ; CALL: JSR PC,PTGLOB ; 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,FOO TLEDUMOE THN IORCTSEL NAFIE TH ; R TEAFD EA RISR TOEC SALONTIDIADE ON R.FEUF BORCTSEO-TW ; E THF OLFHAR PEUPN IISK OCBLT EX NOFE YT BNE OSTEA LAT ; L TIUNS ORCTSEN IDSEA RNETIOUBRSU ":CKLO BXTNE;" E AG.P PC S RT: 30TMNX T XI ED"OO"GE AK TTOP UM;B ) SP,(#2 D AD D EA RSTIR FCEOR FTOR TEINPOK OCBLT NI;I TRKPBL2,BKBJ#O V MO E AM NXTNEO TCEANDV;A TRMPNA.,#8 D AD D EA RSTLAN O-CRES AYLW;A : 40TOTX C PINEG BEW;N G ORXT,TR4 V MO R4 L AS R4 L AS R4 L AS R4 L AS R4 L AS R4 L AS XTTEW NEF OINEG BATC PET GOW;N R4 L AS T"LSXT"TTHWIE ITWRR OADREO ;G O TIEX,TPC R JS ADRET EX TEW NOR FREPARE;P .WTRTX RBCL S TERI WNTSQUB S &ADREG INOMPC UOR FET;S C SEXT,TR3 V MO E IL FCHAT BOFN GIBEO TVETILARER TOEC;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)+,R3 ;EXTRACT NEXT BYTE ADD R3,R(R0 ;NO: BEGIN @ BEGINNING OF SYMBOL TABLE BR PTGL02 PTGL01: MOV PTROBJ,R0 ;CURRENT OBJ MOD PTGL02: CMP R0,USYME ;END? BLO 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) ;FILORCTSEA TREXE ONT AN;W CTCTSE C IN T UNCOR TOEC;S CTCTSE),R06( V MO # R TOEC SRTTA;S ECJSOB),R04( V MO 0 ,RTRMPNA V MO LEDUMON ICKLO BSTIR FGSLA;F K1OCBL R CL ITEX" NEDO "KETA: REMOO ;N 30TMNX T BL S?LEDUMOE OR;M TRMCNA C DE E ULOD MBJ OXTNED EA RTOS ERETAMAR PUPS ET SNETIOU;R : ODTMNX E AG.P PC S RT DSNEFIDEUNF OINEG BTOR TEINPOT USDJ;A MESY,UYMPS3 ,RCTSEBF D AD ) GN BXTTEO TVETILARE (ORCTSEW NEE AV;S 4 ,RR3 V MO R3 R AS R3 R AS R3 R AS R3 R AS R3 R AS R3 R AS N IG SEDNDTEEXS ESPRUP;S R30,0000#1 C BI PCW NER FOR TOEC SET GOW;N R3 R AS C"RPCU "EW;N 3 ,RP)(S V MO T"LSXT"TTHWIE ITWRR OADREO ;G O TIEX,TPC R JS TERI;W W R.XT,T#1 VBMO - --INT EX TEW NADRE+2 ;ACCUM CHECKSUM DEC R1 ;MORE DATA BYTES TO ADD IN? ;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 ,TER OUT OBJ MOD NAMES BEQ PTGL04 MOV R0,R4 ;NOW POINTS TO FOUND NAME IN LSD MOV 4(R4),R0 ;SYMBOL'S FLAGS BIC #-ABSREL-1,R0 ;ISOLATE ABS/RELOC FLAG MOV R0,ABSVAL ;=0: ABSOLUTE; ELSE RELOCATABLE MOV (SP)+,R0 ;UNSAVE ADD #2,(SP) ;"GOOD" RETURN RTS PC .PAGE ;NO MATCH PTGL04: ADD #BPSYM,R0 ;NEXT LSD ENTRY BR PTGL02 #B B SU P POEG,RR5 R JS: 04UISQ 01UISQ BR K OCBLN ILLTI;S 03UISQ T BG R2 C DE R FENSRA TCKLO;B + 4)(R+,0)(R V MO: 03UISQ L BOYM SER PDSOR W=#ERNTOU;C 2 ,RR1 V MO: 02UISQ ITEX: ES;Y 04UISQ ISBH E?BLTAF OOP TEDCHEA;R MESY,UR0 P CM: 01UISQ R TEUNCOS AOWEL BSE;U R1 R AS 1 RVEBO ANTMELE ENE OYSTA;S 0 ,RR1 D AD E IZ SNTMELE;E 1 ,RYMPS#B V MOD ANT OUT EX TNTREUR CTERI WTOE ER;H : 10TOTX E AG.P METIS HI TEDEDNER FENSRA TNO: ES;Y 40TOTX O BL 2? #BKW LOBET IIS: #1K BLE OVABC PEW;N 3 ,RP)(S P CM K COBLD ONEC SINE YT BSTIR FOFC ;P R3.,28#1 D AD T EX TCELAEP R -ES;Y 10TOTX O BL ? NE OCKLO BINT EX TOWEL BPCW NES ;I 4 ,RP)(S P CM R FENSRA TNOF OSECAN IPCUR C @R4P EE;K 3 ,RR4 V MO XTTET ENIDES ROFN BG@ E LUVAC ;P/BIT #1,R0 ;IS ADDR OF FIRST DATA BYTE ODD? BEQ NXTB70 ;EVEN: 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) 0;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 PC ;NO: ERROR RETURN CMPB #SECTN,FLAGS+1(R4) ;YES: IS IT A SECTION NAME? BNE GETS01 ;NO:ER 0 ,RR4 V MO V SAEG,RR5 R JS E BLTAD F'DEUNE THM RO FR4Y BTOD TEINPOY TRENE OVEM;R : SHUISQ ******************************************************************** ; 01SQUN BR ) R1-(),R0-( V MO ) R1-(),R0-( V MO ) R1-(),R0-( V MO ) R1-(),R0-( V MO E OV MCKLO;B ) R1-(),R0-( V MO: 02SQUN PC S RT R0+,P)(S V MO R1+,P)(S V MO NE OERTHNO AVEMO: ET YOT;N 02SQUN 4 ,RRGTOTX V MO OWEL BRKWOR FOE AV;S ) SP-(C,RPCU V MO CKLO BXTTET NXF OGN BTOR CTN C'LOP UM;B C RPCUC,TBTX D AD LLFUS IERFFBUF IXTTED TELAMUCUACT PUUT OTOE INUTROUB;S : UTTOTX ) T.EX TEDATRE CLYEW NUR OOFY ITGRTEIN; HE TCTTERO PND AE,IM T AATR TOEC SNE OUT OXTTER OUR FEUF BAN CWE; Y,WAS HI TIN 1. #CKLO BTOINN AIAGN ICKBAD EA RBEO TLYON; C,IS DTON TEITWRE BLLWI2 #CKLO BXTTEN TEITWRY-LLIARTPAA T HA TANME; LLWIS HI TESAS CNYMAN I. IN3 ;BUMP FOR "GOOD" RETURN NXTB80: 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 ; TR4R EXIT ADD #2,(SP) ;"GOOD" RETURN RTS PC ; ******************************************************************** SRGLOB: ;SEARCH LSD FOR A GLOBAL & RETURN ITS FINAL VALUE IN R4 ; INPUT: R4=ADDR OF GLOBAL NAME (RAD50) ; OUTPUT: R4=VALUE OF GLOBAL JSR PC,PTGLOB ;SEARCH FOR NAME BR LDER22 ;NAME NOT FOUND IN LSD MOV VALF(R4),R4 ;FOUND: GET VALUE RTS PC ; ************** I BH T?YEN C'LOD RESIDEO TWNDOE WRE;A 4 ,RR0 P CM: 01SQUN D ARPW UNDPAEXD AN..;. 1 ,RYMPS#B D AD 1 ,RR0 V MO . ..RYNT EOP T @RTTA;S R0E,YMUS V MO P)(S,-R1 V MO P)(S,-R0 V MO 'NOC LLEHOD RESIDEO TTSINPO4 RE.BLTAN ILEHOA E AK;M : SHUISQUN E AG.P R4T ARTSEINO ;G 01SYIN BR: 03PTIN S ERTH OTHWIG ONALT ICEANDV ASTMU..;. J OBTR,PYMPS#B D AD 03PTIN I BH ..R.TEINPOD D EA RBEL IL WKSOCBLO TWW NEE ATRIOPPRAP; HE TND AT,OUN TEITWRE BLLWIS CKLO BTHBO, KSOCBLO TWE THE IDTSOU; R OK,OCBLD ONEC SHE TTOINS IPCW NEE THF I. URCC OLLWIR FENSRA TNO; 1, #CKLO BINTHWIS LLFAL ILSTC PEW NHE TIF D.ANMMCOD RLN ABYE LUVA; W NEA O TET SENBES HA" PCUR"CS TECADIINH ICWH, ROZEE BAY MC"TBTX("; " T U O T X T " ; E AG.P T EX TTHWIR ROERO CIIS;D T PRRR,EPC R JS 4 ,R#5 V MO: 05ERLD PC S RT 05ERLD E BN S?ORRR ENY7AILER, TO BE EXECUTED WHEN THE LOAD MODULE 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 8****************************************************** 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)+ ;SYMBOL ENTRY MOV (R4)+,(R0)+ MOV (R4)+,(R0)+ ADD #BPSYM,USYME ;BUMP POINTER JSR PC,SYMOVF ;OVERFLOW? MOV MOJ OBW LOBEG INRTSEINF ;I J OBTR,PR4 P CM SD LTOINY TRENT ERNS ITOE IM;T : 02PTIN N AIAGY TR: EROW LLLTI;S 01PTIN OSBL S VEAL HND 2REPAOM CL:UAEQS VEAL HST;1 ) R22(),R42( P CM G INOKLOP EE KR:IERLEAS INE OEW;N 01PTIN O BL : LYALICETATPHALR TELAS INE OEW;N 02PTIN I BH S:RDWOF-AL HSTIR;F ) R2,(4)(R P CM ERRD OICETABPHALE INRMTEDEL IL WREPAOM CN:IOCTSES HI TINL ILSTS IIT; E.ER HRTSE;A RRTETX T TS T EX TTHWIE ITWRR OADREO ;G IOSCDI T EM ) SP-(T,LSXT#T V MO: IOXTTE ******************************************************************** ; R LEAL CUR OTON URET RENTHL IL WCHHI;W E AGSSMET INPR: ROZET NOS WAE YT BERPP;U 25ERLD BR ROZEE BTOD HAE YT BERPP;U 10TPTX Q BE R4 ABSW: 20TPTX PC S RT: 10TPTX TEBYR PEUPD OA;L )+R3,(R4 VBMO R4 ;BACKWARD. SUBPUT: MOV #160167,-(SP) ;STACK "SUB R1,LOC" INSTRUCTION BR TRAPUT ADDPUT: MOV #60167,-(SP) ;STACK "ADD R1,LOC" INSTRUCTION TRAPUT: ;SUBROUTINE TO BUILD TRAILER JSR PC,TXTPUT ;FIRST PUT ALTERED WORD INTO TEXT TST ABSVAL ;THIS SYMBOL RELOCATABLE? BNE TRAP05 ;YES: DO TRAILER UNLESS A BYTE TST (SP)+ ;NO TRAILER FOR ABSOLUTE GLOBALS... RTS PC < (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 HOLE AT SYME ADD #BPSYM,SYME ;BUMP BOTH POINTERS ADD #BPSYM,USYME MOV (R2)+,(R4)+ ;MOVE IN THE ENTRY MOV (R2)+,(R4)+ IN: EDND EAS HONTIEC SO:;N 02PTIN E BN ? RYNT EOLMBSYL BALO G AXTNES ;I Y TREN#G),R41(S+AGFL PBCM W.NON IITK ICST: ES;Y 02PTIN ISBH ? LSBOYM SEDINEF DOFD ENH ACREE WID;D E YM,SR4 P CM ].MENAS N'IOCTSES IIT: NE OSTIR FIPSK;[ RYNT EONTIEC SE)BLSIOS(PT EX;N 4 ,RYMPS#B D AD: 01PTIN ONTIEC SNTREUR COFN GIBEO TTR;P 4 ,RCTSEPT V MO OWEL BR4D EE;N 2 ,RR4 V MO ABSW E YT;B 20TPTX I BM NDMAOM;C R2 T TS T EX TTOINE YT BSTIR FCELA;P )+R3,(R4 VBMO . TSBI8 W LORFVE OOT NID DTEBYD KEIN L ARESUE BTOE AD MISK ECCH ; . XTTEO NT IRDWOR OTEBYD KEIN LUT PTOE INUTROUB;S : UTTPTX E AG.P T PRRR,EPC R JS T"LSRA"TH IT WIOSCDIN IORRR;E 4 ,R#6 V MO: 06ERLD PC S RT IOSCDIN IRR;E 06ERLD E BN RRAETR T TS T IS L?;...SO POP STACKED INSTRUCTION & RETURN TRAP05: TST R2 ;WAS THIS A "BYTE" COMMAND? BPL TRAP10 ;WORD: OKAY TO ADD TO TRAILER TST (SP)+ ;POP STACKED INSTRUCTION LDER25: MOV #25+100000,R4 ;BYTE RELOCATION ERROR JSR PC,ERRPRT RTS PC ;CALL WAS MADE EITHER TO "SUBPUT", ;"ADDPUT", OR TO "TXTPUT" .PAGE TRAP10: ADD #4,TRAPC ;ADVANCE TO NE MOV (R2)+,(R4)+ MOV (R2)+,(R4)+ JSR PC,SYMOVF ;OVERFLOW? JSR R5,REGPOP ;RESTORE RTS PC ; ******************************************************************** LDER22: MOV #22,R4 ;GLOBAL SYMBOL SEARCH FIALURE JSR PC,ERRPRT .PAGE INPTRH: ;INSERT AN ENTRY ALPHABETICALLY INTO CURRENT SECTION ;OF LSD. R4 POINTS TO CANDIDATE ENTRY. JSR R5,REGSAV  BNE INPT02 ;NO: SECTION HAS 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 ERILRA TTHWIE ITWRD/EA;R IOSCDI T EM R LEAITRR FOT IS;L ) SP-(T,LSRA#T V MO CKLO BILRA THE TOMFRO/ TTERI WORD EA RTOE INUTROUB;S O:LIAITR PC S RT ERNTOI PEW;NR TEINPOILRA,TR5 V MO: 30APTR R TEINPOT SEREO TREPARE;P R5K,OCBLILRA#T V MO R BEUM NORCTSER LEAITRP UM;B ECASTR C IN: 20APTR CKLO BERILRA TNTREUR CUT OTERI;W IOILRA,TPC R JS ET YOT;N 30APTR O BL ? ET YCKLO BOFD ENT ;A . 28+1XT OPEN CELL AFTER THIS 1. MOV TRAILPOINTER,R5 ;NEXT OPEN TRAILER SLOT MOV (SP)+,(R5)+ ;PUT STACKED INSTRUCTION INTO TRAILER JSR PC,GETPC ;GET VALUE OF CURRENT LOAD OFFSET SUB TRAPC,R4 ;CALC BACKWARD DISPLACEMENT SUB #2,R4 ;SINCE "PC" IS ADVANCED, BUT "TRAPC" NOT MOV R4,(R5)+ ;STICK IT BEHIND "ADD" ; NOW SEE IF BUFFER IS FULL, AND WRITE IT OUT IF SO: CMP R5,#TRAILBLOCK