EEB ; UPDATE: 26-SEP-72 ROSLOD.S82 ;******* ; UPDATE: 25-SEP-72 ROSLOD.S81 [FOR ROS-2/45] ;******* ; UPDATE: 24-SEP-72 ROSLOD.S80 [FOR ROS2/45] ;******* ; UPDATE: 16-JUN-72 ROSLOD.S72 ; ORIGIN: 11-MAY-72 ROSLOD.S71 ; ******************************************************************** ; * * ; * ******************  ; UPDATE 9/30/72 ROSLOD.S83 [ OVERLAY FOR ROS II/45] ;******* ; UPDATE: 26-SEP-72 ROSLOD.S82 ;******* ; UPDATE: 25-SEP-72 ROSLOD.S81 [FOR ROS-2/45] ;******* ; UPDATE: 24-SEP-72 ROSLOD.S80 [FOR ROS2/45] ;******* ; UPDATE: 16-JUN-72 ROSLOD.S72 ; ORIGIN: 11-MAY-72 ROSLOD.S71 ; ******************************************************************** ; * ; UPDATE: 25-SEP-72 ROSLOD.S81 [FOR ROS-2/45] ;******* ; UPDATE: 24-SEP-72 ROSLOD.S80 [FOR ROS2/45] ;******* ; UPDATE: 16-JUN-72 ROSLOD.S72 ; ORIGIN: 11-MAY-72 ROSLOD.S71 ; ******************************************************************** ; * * ; * ****************** R O S L O D ******************* ; * THIS IS THE ON-LINE LINKING D4 003514R CMD5 003554R CMD6 003600R CMD7 003642R CMD8 003706R CMD9 003774R CNT.1 = 165014 CNT.2 = 165014 CNT.3 = 000000 CNT.4 = 000000 CORLOD= 000056 CR = 000015 CRB1.1= 177162 CRB1.2= 177162 CRB1.3= 000000 CRB1.4= 000000 CRB2.1= 177164 CRB2.2= 177164 CRB2.3= 000000 CRB2.4= 000000 CRS.1 = 177160 CRS.2 = 177160 CRS.3 = 000000 CRS.4 = 000000 CRVC.1= 000230 CRVC.2= 000230 CRVC.3= 000000 CRVC.4= 000000 CR1 = 000002 CR2 = 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 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 S * ; * ****************** 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 BATCH FILE ON * ; * DISC.. "MXOBJ" IS A SYSGEN PARAMETER. A LOAD MODULE WILL * ; * BE CREATED WHICH IS RELOCATABLE BY EXECUTING AT LOAD TIME A * ; * "TRA 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 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 "ASE 000002 CR3 = 000000 CR4 = 000000 CUMSIZ 011032R CURPC 011166R DAY 010646R DBLDEF= 000004 DBUFSZ= 000001 DEFINE= 000051 DELETE= 000052 DFLIST 007126R DIRAD1= 000500 DIRLN1= 000052 DISCIO= 000023 DISCUN= 000001 DPRTY = 000001 DRESDI= 000001 DSPLCE 011170R ECHOCH= 000040 END01 010666R END03 010775R END04 011040R END05 011074R END06 011142R ENTRY 011040R EOLCH = 000012 EOMCH = 000033 EOMOPT= 000000 EOMPRT= 000000 ERNEND 01 YMBOLS 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 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 LOILER" 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 ARE RUN-TIME RELOCATABLE, * ; * AND NO GUARANTEE CAN BE MADE THAT THE SPECIFIED MEMORY * ; * LOCATIONS WILL BE FREE AT LOAD TIME. * ; CT" OR DUE TO AN ABSOLUTE EQUATE, WILL BE * ; * 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 GLOBA0541R ERRMSG 010520R ERRNUM 010535R ERRPRT= 006532R ERRP10 006576R EXEBC = 000000 EXIT = 000004 FF = 000014 FILESZ= 000020 FLAGS = 000004 FXPART= 000001 GEDATE= 000032 GENTRY= 000004 GETBLK 003046R GETIME= 000031 GETPC 005024R GETPCR 005012R GETPC1 005030R GETSEC 005266R GETS01 005272R GLBVAL 011066R GLOBAL 011056R GSDMAX= 000004 GSDTAB 001006R HCPUST= 000016 HEADER= ****** G HEDBGN= 007166R HEDING 010542R HEDSIZ= 000100 HICORE= 1177AD 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 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 * ; * * "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 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 L SYMBOLS (ENTRY POINTS, MODULE AND SECTION NAMES) * ; * 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". * ; * WHEN77 HIGHPC 011172R HMAXEQ= 000010 HOUR 010656R HPRIOR= 000005 HSTATS= 000004 HT = 000011 HTASK = 000002 IDEND 010436R IDMSG 010414R IFD = ****** G INEBC = 000000 INPCNT 011520R INPTRH 005432R INPT01 005444R INPT02 005504R INPT03 005520R INSYME 005362R INSY01 005374R INTGLB= 000100 INUSYM 005326R IOSTAT= ****** G LDBYTS= 000006 LDER01 006200R LDER02 006210R LDER03 006220R LDER04 002374R LDER05 006300R LDER07 003026R LDER11 00062 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. * ; * *;******* ; * NOTE: THE .S80 SERIES FOR /45 SUPPRESSES THE TRAILER AND *;******* ; * CAUSES THE FIRST NAMED RELOCATABLE SECTION TO RESET TO *;******* ; * RELOCATABLE ZERO. SPECIAL CODE IS ALSO  * ; * 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. * ; * *;******* ; * NOTE: THE .S80 SERIES FOR /45 SUPPRESSES THE TRAILER AND *;******* ; * CAUSES THE FIRST NAMED RELOCATABLE SEC LOADING TASKS, "ROSLOD" UPDATES THE MONITOR'S TASK TABLES * ; * TO ALLOW THE NEW PROGRAM TO BE QUEUED AND EXECUTED. * ; * *;******* ; * NOTE: THE .S80 SERIES FOR /45 SUPPRESSES THE TRAILER AND *;******* ; * CAUSES THE FIRST NAMED RELOCATABLE SECTION TO RESET TO *;******* ; * RELOCATABLE ZERO. SPECIAL CODE IS ALSO INCLUDED TO COMPENSATE *;******* ; * THE "TPAR'S" IN THE HEADER FOR THE SIZ6R LDER12 003036R LDER13 001020R ROSLOD MACRO V004A PAGE 53+ SYMBOL TABLE LDER14 001030R LDER15 001040R LDER16 001076R LDER17 001204R LDER20 003242R LDER21 003416R LDER22 005422R LDER23 004022R LDER24 004032R LDER25 006250R LDER26 005054R LDER30 004376R LDER31 004374R LDER32 004372R LDER33 004370R LDER34 004366R LDER35 004364R LDER36 004362R LDER37 004360R LEDWDS= 000003 LF = 000012 LFRG.1= 165012 LFRG.2= 16INCLUDED TO COMPENSATE *;******* ; * THE "TPAR'S" IN THE HEADER FOR THE SIZE OF THE HEADER AND FOR *;******* ; * THE 64-WORD BLOCK SIZE OF THE KT-11C RELOCATING UNIT. *;******* ; * * ; * VERSION:007.001 * ; * DATE: 11-MAY-72 * ; * PROGRAMMER: 52 * ; * TION TO RESET TO *;******* ; * RELOCATABLE ZERO. SPECIAL CODE IS ALSO INCLUDED TO COMPENSATE *;******* ; * THE "TPAR'S" IN THE HEADER FOR THE SIZE OF THE HEADER AND FOR *;******* ; * THE 64-WORD BLOCK SIZE OF THE KT-11C RELOCATING UNIT. *;******* ; * * ; * VERSION:007.001 * ; * DATE: 11-MAY-72 * ; * E OF THE HEADER AND FOR *;******* ; * THE 64-WORD BLOCK SIZE OF THE KT-11C RELOCATING UNIT. *;******* ; * *;******* ; * * ; * VERSION:007.001 * ; * DATE: 11-MAY-72 * ; * PROGRAMMER: 52 * ; * 5012 LFRG.3= 000000 LFRG.4= 000000 LINELN= 000110 LODA00 000332R LODA10 000446R LODA20 000466R LODA30 000514R LODA40 000532R LODB10 000536R LODB20 000564R LODC10 000636R LODC19 001050R LODC20 000666R LODC30 000674R LODD00 000702R LODD10 000730R LODD15 000746R LODD20 000750R LODE00 001054R LODE20 001110R LODE22 001132R LODE24 001150R LODE40 001214R LODE42 001260R LODE44 001264R LODE50 001274R LODE52 001304R LODF00 001312R LODF01 0 * ; ******************************************************************** .TITLE ROSLOD .GLOBL LODHED ; .DEF ;******* .GLOBL PPTAB,TASKS,TPRTY,TSTAT,IOSTAT,HEADER,BSIZE,IFD ; .REF ;******* .GLOBL PFRITE,$TKFLS ; .REF ;******* ;SECONDARY INPUT PARAMETERS: ; TASMAX,NPRIOR,OVTMIN,MAXID1,NDISCS,$SYSFL,$OVTYP,ARG,$BCHID ;  PROGRAMMER: 52 * ; * * ; ******************************************************************** .TITLE ROSLOD .GLOBL LODHED ; .DEF ;******* .GLOBL PPTAB,TASKS,TPRTY,TSTAT,IOSTAT,HEADER,BSIZE,IFD ; .REF ;******* .GLOBL PFRITE,$TKFLS ; .REF ;******* ;SECONDARY INPUT PARAM * ; ******************************************************************** .TITLE ROSLOD .GLOBL LODHED ; .DEF ;******* .GLOBL PPTAB,TASKS,TPRTY,TSTAT,IOSTAT,HEADER,BSIZE,IFD ; .REF ;******* .GLOBL PFRITE,$TKFLS ; .REF ;******* ;SECONDARY INPUT PARAMETERS: ; TASMAX,NPRIOR,OVTMIN,MAXID1,NDISCS,$SYSFL,$OVTYP,ARG,$BCHID ; 01322R LODF02 001374R LODF03 001400R LODF04 001410R LODF05 001432R LODF06 001440R LODF09 001514R LODF10 001540R LODF12 001564R LODF20 001570R LODF30 001640R LODF40 001666R LODF50 001674R LODF60 001724R LODF90 001734R LODF91 001760R LODF92 001776R LODG10 002074R LODG12 002120R LODG20 002124R LODG25 002222R LODG30 002236R LODG40 002262R LODHED 000000RG LODH10 002366R LODH20 002424R LODH30 002452R LODJ00 002476R LODJ10 002736R LODJ1! $LSDSZ,$MXOBJ,$PS001 THRU $PS016,PRIP01 THRU PRIP16 ; $RLDNO,PRIBKG SWR = 177570 ;******* ; THE FOLLOWING DEFINE MEANINGS OF BITS IN LOWER "FLAG BYTE": DBLDEF = 4 ;SINGLE/MULTIPLE DEFINITION (0/1) UNDEF = 10 ;UNDEFINED/DEFINED (0/1) ABSREL = 40 ;ABSOLUTE/RELATIVE (0/1) INTGLB = 100 ;INTERNAL/GLOBAL TXTCMD = 3 ;COMMAND T"ETERS: ; TASMAX,NPRIOR,OVTMIN,MAXID1,NDISCS,$SYSFL,$OVTYP,ARG,$BCHID ; $LSDSZ,$MXOBJ,$PS001 THRU $PS016,PRIP01 THRU PRIP16 ; $RLDNO,PRIBKG ; THE FOLLOWING DEFINE MEANINGS OF BITS IN LOWER "FLAG BYTE": DBLDEF = 4 ;SINGLE/MULTIPLE DEFINITION (0/1) UNDEF = 10 ;UNDEFINED/DEFINED (0/1) ABSREL = 40 ;ABSOLUTE/RELATIVE (0/1) INTGLB = 100 ;INTERNAL/GLOBAL TXTCMD = 3 ;COMMAND# $LSDSZ,$MXOBJ,$PS001 THRU $PS016,PRIP01 THRU PRIP16 ; $RLDNO,PRIBKG ;******* SWR = 177570 ;******* .PAGE ; THE FOLLOWING DEFINE MEANINGS OF BITS IN LOWER "FLAG BYTE": DBLDEF = 4 ;SINGLE/MULTIPLE DEFINITION (0/1) UNDEF = 10 ;UNDEFINED/DEFINED (0/1) ABSREL = 40 ;ABSOLUTE/RELATIVE ($2 002744R LODJ18 002760R LODJ20 002766R LODJ22 003106R LODJ24 003134R LODJ26 003172R LODJ29 003200R LODJ30 003426R LODJ32 003446R LODJ34 003472R LODJ36 003514R LODJ38 003554R LODJ40 003600R LODJ42 003642R LODJ44 003706R LODJ45 003754R LODJ46 003774R LODJ50 003252R LODJ52 003262R LODJ60 002772R LODJ66 002776R LODJ69 003016R LODJ98 003236R LODJ99 003466R LODK10 003314R LODK20 003340R LODK36 003350R LODK38 003370R LODK40 003374R LOD%O 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 ;SECTION NAME GENTRY = 4 ;GLOBAL ENTRY POINT DECLARATION ; FOLLOWING ARE OFFSET VALUES FOR & 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 ;SECTION NAME GENTRY = 4 ;GLOBAL ENTRY POINT DECLARATION ; FOLLOWING ARE OFFSET VALUES FO'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 MODULE NAME SECTN = 1 ;SECTION NAME GENTRY(K50 003404R LODK52 003412R LODL00 004042R LODL04 004244R LODL06 004270R LODL20 004316R LODL22 004402R LODL24 004436R LODL25 004620R LODL26 004644R LODL28 004654R LODL30 004470R LODL40 004664R LODNAM 010624R LPBACK= 000001 LPCALL 006464R LPDT.1= 165010 LPDT.2= 165010 LPDT.3= 000000 LPDT.4= 000000 LPINH = 000004 LPMXTM= 000264 LPRNTR= 000025 LPSIZE= 000204 LPVC.1= 000200 LPVC.2= 000200 LPVC.3= 000000 LPVC.4= 000000 LSDBGN 011522R LSDEN)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 BFOPEN = 40 BFCLOS = 41 ; FOLLOWING ARE MISCELLANEOUS DEFINITIONS BTCHID = $BCHID ;BATCH F*R 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 BFOPEN = 40 BFCLOS = 41 ; FOLLOWING ARE MISCELLANEOUS DEFINITIONS BTCHID = $BCHID ;BATCH+ = 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 BFOPEN = 40 BFCLOS = ,D= 015442R MAPBUF 007052R MAPLST 007036R MAXID1= 000764 MAXOVR= 000140 MFLAG 011052R MINUTE 010662R MODCNT 011174R MODEND= 000006 MODULE 010666R MONSEC 011176R MONTH 010642R MRCH = 000025 MSECR = 000000 MSGBUF= 000000 MXTASK= 000020 MXTIME= 000264 NAMBUF 011250R NAMCTR 011202R NAMPTR 011204R NCFILE= 000057 ROSLOD MACRO V004A PAGE 53+ SYMBOL TABLE NCR = 000001 NCRLOC= 000726 NCRWDS= 000353 NDISCS= 000001 NDPRT-ILE 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 TTYOUT = 13 ;EMT FOR CALL TO TELETYPE OUTPUT TTYIN = 14 ;EMT FOR TELETYPE INPUT . 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 TTYOUT = 13 ;EMT FOR CALL TO TELETYPE OUTPUT TTYIN = 14 ;EMT FOR TELETYPE INPU/ 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 EXIT TTYOUT = 13 01= 000005 ND1END 010466R ND1MSG 010436R NEQP01= 000012 NEQP02= 000012 NEQP03= 000012 NEQP04= 000012 NEQP05= 000012 NEQP06= 000012 NEQP07= 000012 NEQP08= 000012 NEQP09= 000012 NEQP10= 000012 NEQP11= 000000 NEQP12= 000000 NEQP13= 000000 NEQP14= 000000 NEQP15= 000000 NEQP16= 000000 NLP = 000001 NLPRTY= 000003 NLTASK= 000001 NOCKPT= 000030 NPRIOR= 000012 NTRYS = 000003 NTTYS = 000002 NWUCH = 000005 NXTBLK 005744R NXTB10 005762R NXTB30 0061 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 R50PAK = 46 ;EMT FOR RADIX-50 PACK ROUTINE R50UNP = 47 ;EMT FOR RADIX-50 UNPACK DEFINE = 51 ;EMT FOR "DE2T 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 R50PAK = 46 ;EMT FOR RADIX-50 PACK ROUTINE R50UNP = 47 ;EMT FOR RADIX-50 UNPACK DEFINE = 51 ;EMT FOR "3 ;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 R50PAK = 46 ;EMT FOR RADIX-50 PACK ROUTINE R54016R NXTB40 006032R NXTB44 006040R NXTB46 006052R NXTB50 006116R NXTB60 006152R NXTB70 006166R NXTB80 006176R NXTB90 005736R NXTMOD 005654R NXTM30 005732R OBJBK1 007576R OBJBK2 007776R OBJERR 007030R OBJHED 007560R OBJLST 007020R OBJMN = 000000 OBJSEC 007572R OFFSET 011206R ONEZRO 011210R OVRLAY= 000001 OVTMIN= 000021 PAS2MG 010466R PAS2ND 010520R PC =%000007 PCMD1 = 000007 PCMD2 = 000010 PFRITE= ****** G PHDSZE= 000072 PPTAB = **5FINE FILE" DELETE = 52 ;EMT FOR "DELETE FILE" CORLOD = 56 ;EMT TO GET ADDR OF MONTOR REF TABLE STSIZE = 100. ;STACK SIZE (WORDS) PHDSZE = 58. ;# WDS AHEAD OF PGM RESERVED FOR "RPOM" ;******* ;...AND BEGINNING ON A 256-WORD BOUNDARY;******* LEDWDS = 3 ;# WDS INSERTED IN FRONT OF PROGRAM BY LOADER LDBYTS = LEDWDS*2 ;(# BYTES INSERTED) ;FOLLOWING ARE INDEX VALUES TO6DEFINE FILE" DELETE = 52 ;EMT FOR "DELETE FILE" CORLOD = 56 ;EMT TO GET ADDR OF MONTOR REF TABLE STSIZE = 100. ;STACK SIZE (WORDS) PHDSZE = 58. ;# WDS AHEAD OF PGM RESERVED FOR "RPOM" ;******* ;...AND BEGINNING ON A 256-WORD BOUNDARY;******* LEDWDS = 3 ;# WDS INSERTED IN FRONT OF PROGRAM BY LOADER LDBYTS = LEDWDS*2 ;(# BYTES INSERTED) ;FOLLOWING ARE INDEX VALUES 70UNP = 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 = 58. ;# WDS AHEAD OF PGM RESERVED FOR "RPOM" ;******* ;...AND BEGINNING ON A 256-WORD BOUNDARY;******* LEDWDS = 3 ;# WDS INSERTED IN FRONT OF PROF**** G PRIBKG= 000012 PRIP01= 177777 PRIP02= 177777 PRIP03= 000001 PRIP04= 000001 PRIP05= 177777 PRIP06= 177777 PRIP07= 177777 PRIP08= 177777 PRIP09= 177777 PRIP10= 177777 PRIP11= 000000 PRIP12= 000001 PRIP13= 177777 PRIP14= 177777 PRIP15= 177777 PRIP16= 000000 PRSIZE 011212R PS = 177776 PTGLOB 005150R PTGL01 005170R PTGL02 005174R PTGL03 005206R PTGL04 005260R PTROBJ 011214R PTR1.0 011216R PTSECT 011220R REGPOP 004774R REGSAV 0047E THE TASK HEADER HMAXEQ = 10 ;TASK MAX EXECUTION TIME WORD ;******* HPRIOR = 5 ;TASK PRIORITY BYTE ;******* HSTATS = 4 ;HEADER STATUS BYTE ;******* HTASK = 2 ;HEADER TASK NUMBER WORD ;******* HEDSIZ = 100 ;BYTES IN HEADER [&INIT LOC'N FOR FILEID;******* HCPUST = 16 ;CPU STATUS STORAGE (AND FILE TYPE INIT);******* FTO THE TASK HEADER HMAXEQ = 10 ;TASK MAX EXECUTION TIME WORD ;******* HPRIOR = 5 ;TASK PRIORITY BYTE ;******* HSTATS = 4 ;HEADER STATUS BYTE ;******* HTASK = 2 ;HEADER TASK NUMBER WORD ;******* HEDSIZ = 100 ;BYTES IN HEADER [&INIT LOC'N FOR FILEID;******* HCPUST = 16 ;CPU STATUS STORAGE (AND FILE TYPE INIT);*******GGRAM BY LOADER LDBYTS = LEDWDS*2 ;(# BYTES INSERTED) .PAGE ;FOLLOWING ARE INDEX VALUES TO THE TASK HEADER HMAXEQ = 10 ;TASK MAX EXECUTION TIME WORD ;******* HPRIOR = 5 ;TASK PRIORITY BYTE ;******* HSTATS = 4 ;HEADER STATUS BYTE ;******* HTASK = 2 ;HEADER TASK NUMBER WORD ;******* HEDSIZ = 100 ;BYTES IN HEAD""""""" """"""""""""""""""""""""""""""""""""""""""""""23333333333333333DDDDDDD@DDDDDDDDDDDDDUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUEADDB Cr\M|Dr\M|Pr\M|:$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 ; 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 J ; PROGRAM HEADER LODHED: ;HEADER FOR "ROSLOD" .WORD 1 ; THREAD WORD FOR TASK .WORD $RLDNO ; TASK NUMBER ******** .BYTE 20 ; MAKE A SYSTEM TASK FOR NOW ******** .BYTE PRIBKG ; TASK PRIORITY ******** .WORD LODA00 ; ENTRY POINT ******** .WORD 0,0 ; EXECUTION TIME $ TIMER CKER [&INIT LOC'N FOR FILEID;******* HCPUST = 16 ;CPU STATUS STORAGE (AND FILE TYPE INIT);******* ; 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 4 011108 75 1 HTT,,H'> E YT.B 11 0 11 0 76 0 111001 5717 0 00  0 00  0 00  6 00110 0 0,0,0,0,0, E YT.B: AMCNSE 00 0 00 0 00 0 031001 5617 < ' TEBY .    4 07  2 001105 75 1 0 RDWO .    0 000000 001104 75 1 -.-404ND E RDWO . T:ECS  6 030006 771003 75 1 50E AG PA 04V0O CRMA ODSLRO E AG.P     5217 N VE.E 3:D0EN    750701 5117 4 11  1 10  3 77100 " ALOT"T IISCMNUMBER .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 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 #LODNELL ******** .WORD STSIZE ; STACK SIZE ******** .WORD $OVTYP ; STATUS AND FILE TYPE FOR LOAD FILE )******* .WORD 0,0 ; ******** .IFNZ $KT11C ; ONLY IF HAVE MEMORY MAN. ******** .WORD 077406 ; PDR0 FOR 4K R/W ACCESS ******** .WORD 0,0,0,0,0,0,0 ; REST OF PDRS ****O ;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 EMT NOCKPT ;SET TASK NON-CHECKPOINTABLE MOV #$BCHID,BFBLK1+2 ;INIT BATCH I.D. FILE MOV #$.A 24 1 17 1 24 1 700701 5017 T H TEBY .    1 01  7 761009 74 1 05 1 660701  E"IZ"S IISC.A 32 1 11 1 23 1 630701 4817 T H TEBY .    1 01  2 761007 74 1 24 1 05 1 23 1 570701  T"SEFF"O IISC.A 06 1 06 1 17 1 540701 4617 T H TEBY .    1 01  3 751005 74 1 31 1 22 1 510701  Y"TREN "I CIAS .  4 12  6 11  5 10  6 741004 74 1 HTT, H TEBY .   1 01  1 QNAM,-(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 TTYOUT ;PRINT ON TTY ; NOW INPUT COMMAND STRING MOV #ASCDAT,TTYBUF ;INIT FOR INPUT OF COMMAND STRING MOV #TTYLST,-(SP) R**** .WORD LODSTK ; PAR0 ******** .WORD 0,0,0,0,0,0,0 ; REST OF PARS ******** .=.+12. ; REST OF TASK HEADER (TO 100) ******** .ENDC ; ******** .CSECT ROSLOD ; FLOAG TO STACT BODY OF PROGRAM ******** LODSTK: .WORD 301 ; FILE ID ******** .=.+SBCHID,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 TTYOUT ;PRINT ON TTY ; NOW INPUT 01  4 741003 74 1 16 1 430701  17 1 11 1 24 1 400701  N"IOCTSE "I CIAS .  3 10  5 10  3 12  5 731002 74 1 12 0 35 1 330701  00 0 00 0 00 0 300701  LF],,',0,0,0,0,0 0 TEBY .: LEITT0 00  0 00  0 00  5 721001 74 1 33 1 240701  40 0 72 0 05 1 210701  14 1 24 1 11 1 160701  24 1 40 0 24 1 130701  16 1 05 1 15 1 100701  [": LEIT TNTMELE"E IISC.A 05 1 14 1 05 1 050701 4017 U 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 .PAGE LODA10: MOV #TMPBUF+6,R3 ;POINTER TO TMPY BFR FOR CONVERSION MOV #" ,-(R3) ;CLEAR BFR W/ BLANKS MOV #" ,-(RVSTSIZE+STSIZE-2 ; RESERVE THE STACK *****''' .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 WCOMMAND 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 .PAGE LODA10: MOV #TMPBUF+6,R3 F L TEBY .    2 01  4 701009 73 1 52 0 030701  52 0 52 0 52 0 000701  52 0 52 0 52 0 750601  *"********"* IISC.A 52 0 52 0 52 0 720601 3817 0 D OR.W   000000 700601 3717 . 4-3-D0EN D OR.W: LEDUMO   030100 660601 3617 9 4GEPA 4A00 VROACMD LOOSR GEPA .      5 73 1 3417 N VE.E 1:D0EN    660601 3317 2 01  5 66100 F ,LLF0,0, E YT.B: TENUMI 12 0 00 0 Y3) 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+5 ;TMP BUF FULL? (ONLY 1ST SIX CHARS USED) BHI LODA20 ;FULL: IGNORE REST OF CHARS TO COMMA MOVB (R0),(R3)+ ;XFER CHAR TO Z#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 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 [ ;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+5 ;TMP BUF FULL? (ONLY 1ST SIX CHARS USED)00 0 620601 3217 5 01  1 66100 R ,C':0,0, E YT.B : URHO 72 0 00 0 00 0 560601 3117 1 01  5 65100 T ,HHT0,0, E YT.B : ARYE 11 0 00 0 00 0 520601 3017 5 01  1 65100 R ,C'/0,0, E YT.B Y:DA 57 0 00 0 00 0 460601 2917 5 01  5 64100 R ,C'/0,0, E YT.B H:NTMO 57 0 00 0 00 0 420601 2817 T ,HHT E YT.B  11 0 11 0 400601 2717 2 05  2 05  2 05  5 63100 " ****] "I CIAS .  2 05  0 04  5 13  ]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 LODA40: CMP (R1)+,(R1)+ ;LEAVE ROOM FOR FOUR WORDS PER ENTRY BR LODA10 ;...AND GO TO FETCH ANOTHER NAME ; ************************^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 .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 _ 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 LODA40: CMP (R1)+,(R1)+ ;LEAVE ROOM FO2 631006 72 1 ************ **************;*     2517 0 12  5 11  4 12  7 62100 D DECOD-AR HLYNTREUR CMENA ; " MPDTLO "I CIAS .  4 10  7 11  4 11  4 621004 72 1 -6=. .    ' 240601  2317 * ********C*MINADYS IMENAT ENEMELD OA LENWHS HI TVEMORE* **************;    2 72 1 ICAMYN DBEY LLUANTVE ELLWI- E AM NNTMELE EADLO ;0 0,0, D OR.W: AMDNLO 000000 000000 000000 240601 2117 3 13  0 04  2 62100a******************************************** ;"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 R1 ASR R1 ;#NAMES CONVERTEDTO RADIX-50 MOV R1,MODCNT ;SAVE IT: # OBJ MODULES TO LINK CLR BFSTAT bLIST 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+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 #TcR 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 R1 ASR R1 ;#NAMES  24 1 16 1 05 1 170601  15 1 05 1 14 1 140601  05 1 40 0 04 1 110601  01 1 17 1 14 1 060601  40 0 52 0 52 0 030601  ESYT BOF# N VE EBET US;M ["T ENEMELD OA L****" IISC.A 52 0 52 0 40 0 000601 2017 2 05  7 57100 2 05  2 05  2 05  4 57100 0 04  0 12  1 10  1 57100 5 11  0 04  4 10  6 56100 1 10  7 11  4 11  3 56100 0 04  4 10  7 11  0 56100 4 11  3 12  7 11  5 55100 2 12  e ;STATUS AND TYPE: FREE AND OBJECT MODULE 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'S LIST WITH SECTOR INFO fMPBUF,-(SP) MOV R1,-(SP) EMT R50PAK ;CONVERT TO RADIX-50 MOV (R1)+,R3 ;CHECK CONVERTED NAME... BIS (R1)+,R3 ;...FOR ALL NULLS BEQ LODB10 ;ALL NULLS: END OF INPUT LINE REACHED LODA40: CMP (R1)+,(R1)+ ;LEAVE ROOM FOR FOUR WORDS PER ENTRY BR LODA10 ;...AND GO TO FETCH ANOTHER NAME ; ******************************************************************** ;"NAMBUF" STRUCTURE: gCONVERTEDTO 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 ;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 0 04  2 05  2 55100 " ****P MAD OA LODSLRO* **"* IISC.A 52 0 52 0 52 0 470501 1917 F F TEBY .    4 01  6 541008 71 1 0 RDWO .    0 000004 541007 71 1 -.-401ND E RDWO .G:INEDH  0 120002 541006 71 1 1517 * ****************************************************************** * ;    4 71 1 ENEV .D:ENRNE   1 541003 71 1 CR E YT.B   15 0 400501 1217 0 0,0, E YT.B: UMRNER 00 0 00 0 00 0 350501 11i MOV BFSIZE,(R0)+ BR LODB20 ;******* 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,NAMCTR ;# OF MODULES IN LIST MOj 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 R1 ASR R1 ;#NAMES CONVERTEDTO RADIX-50 MOV R1,MODCNT ;SAVE IT: # OBJ MODULES TO LINK CLR BFSTAT ;STATUS AND TYPE: FREE AND OBJECT MODULE LODB20: DEC R1 kTHERE? 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" 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 NAMES17 0 04  3 04  3 53100 0 04  2 12  7 11  0 53100 " # R ROER "I CIAS .  2 12  2 12  5 10  5 521000 71 1 CR E YT.B   15 0 240501 0917 0 D OR.W   000000 220501 0817 E AGSSMER ROERN IRSHA C;# -4-.NDNEER: SGRMER   150000 200501 0717 8 4GEPA 4A00 VROACMD LOOSR GEPA .      6 70 1 0517 * ****** ;      mV #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 GSD BLOCKS ; R0 POINTS TO FIRST DAn ;# 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'S LIST WITH SECTOR INFO MOV BFSIZE,(R0)+ BR LODB20 o MOV MODCNT,NAMCTR ;# OF MODULES IN LIST MOV #LSDBGN,SYME ;INIT PTR TO DEFINED SYMBOLS MOV #LSDBGN,USYME ;INIT PTR TO UNDEFINED SYMBOLS .PAGE LODC20: ;LOOP HERE FOR SUCCESSIVE OBJECT MODULES JSR PC,NXTMOD ;INIT FOR NEXT OBJ MODULE BR LODC19 ;DONE WITH ALL OBJ MODULES LODC30: JSR PC,NXTBLK ;GET NEXT BLOCK BR LODC19 ;DONE WITH ALL OBJECT BLOCKS LODD00: ;H4 70 1 0317 * ****************************************************************** * ;    2 70 1 ENEV .D:2NASP   0 521001 70 1 CR E YT.B   15 0 170501 0017 6 11  1 11  5 51100 7 10  5 10  2 10  2 51100 0 04  2 06  3 04  7 50100 0 04  3 12  3 12  4 50100 1 10  0 12  0 04  1 50100 4 10  7 11  4 11  6 47100 " INEG B#2S AS PODSLRO "I CIAS .  3 12  7 11  2 12  3 471009 69 1 CR E YT.B   15 0 7204qTA 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 ;YES: GET NEXT MODULE BR r ;******* 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,NAMCTR ;# OF MODULES IN LIST MOV #LSDBGN,SYME ;INIT PTR TO DEFINED SYMBOLS MOV #LsERE TO PROCESS SUCCESSIVE GSD BLOCKS ; R0 POINTS TO FIRST DATA BYTE IN BLOCK ; R5 CONTAINS BYTE COUNT OF DATA BYTES TST BLOCK1 ;IS THIS FIRST BLOCK IN MODULE? BEQ LODD10 ;YES DEC (R0) ;IS THIS A GSD BLOCK? BEQ LODD15 ;YES: PROCEED DEC (R0) ;IS IT GSD END? BEQ LODC20 ;YES: GET NEXT OBJ MODULE CMP (R0),#4 ;IS IT MODULE END? 01 9816 0 D OR.W   000000 700401 9716 E AGSSME" 2SSPA "INS ARCH# ; 4 .-D-2NAS PG:2MASP  6 020006 461006 69 1 9516 * ****************************************************************** * ;    4 69 1 ENEV .D:END1N   6 461003 69 1 CR E YT.B   15 0 650401 9216 4 10  6 11  5 10  2 46100 0 04  1 06  3 04  7 45100 0 04  3 12  3 12  4 45100 1 10  0 12  0 04  1 45100 4 10  7 11  4 11  6 44100 " ND E#1S uLODC30 ;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 SUB #8.,R5 ;BLOCK END? vSDBGN,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 GSD BLOCKS ; R0 POINTS TO FIRST DATA BYTE IN BLOCK ; R5 CONTAINS BYTE COUNT OF DATA BYTES w BEQ LODC20 ;YES: GET NEXT MODULE BR LODC30 ;NO: GET NEXT BLOCK LODD10: INC BLOCK1 ;INDICATE FIRST BLOCK PROCESSED DEC (R0) ;CHECK THAT IT IS GSD BNE LDER13 ;NOT GSD BEGIN TSTB FLAGS+3(R0) ;FIRST 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 AS PODSLRO "I CIAS .  3 12  7 11  2 12  3 441001 69 1 CR E YT.B   15 0 420401 9016 0 D OR.W   000000 400401 8916 E AGSSME" 1ND"EN IRSHA C;# -4-.ND1END: SG1MND   240000 360401 8816 7 68 1 ******************************************************************** ;     8616 N VE.E D:ENID    360401 8516 # ,'CR E YT.B  43 0 15 0 340401 8416 1 10  1 11  2 43100 1 11  0 04  0 04  7 42100y 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 TO WORD INDEX JMP @GSDTAB(R2) .PAGE GSDTAB: .WORD LODE00 ;(0) OBJ MOD NAME z 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 ;YES: GET NEXT MODULE BR LODC30 ;NO: GET NEXT BLOCK LODD10: INC BLOCK1 {UNTIL BLOCK END SUB #8.,R5 ;BLOCK END? BLT LODC30 ;YES: GO GET NEXT ONE MOVB FLAGS+1(R0),R2 ;ENTRY TYPE CMPB R2,#GSDMAX ;IS IT LEGAL? BGT LDER15 ;NO MOV R0,R1 ;ENTRY POINTER ADD #8.,R0 ;NEXT ENTRY MOV R1,R4 ;SECONDARY POINTER USED BY VARIOUS RTNES ASL R2 ;BYTE INDEX TO WORD INDEX JMP @GSDTAB(R2)  04 1 17 1 14 1 240401  A"II ODSLRO "I CIAS .  3 12  7 11  2 12  1 421003 68 1 CR E YT.B   15 0 200401 8216 0 D OR.W   000000 160401 8116 E AGSSME. .D IINS ARCH# ; -4-.NDDE I: SGDMI  6 010004 411000 68 1 47E AG PA 04V0O CRMA ODSLRO E AG.P     7916 8 67 1 LLFUN HE WUTTPOU: EAARD ILBUR LEAITR ; . 28+1=. . K:OCBLILRAT  ' 140401 140201 7716 6 67 1 METIA } .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 JSR PC,ERRPRT LDER15: MO~ ;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 SUB #8.,R5 ;BLOCK END? BLT LODC30 ;YES: GO GET NEXT ONE MOVB FL .PAGE GSDTAB: .WORD LODE00 ;(0) OBJ MOD NAME .WORD LODE20 ;(1) SECTION NAME .WORD LODD20 ;(2) INTERNAL SYMBOL (IGNORE) .WORD LODD20 ;(3) TRANSFER ADDRESS (IGNORE) .WORD LODE40 ;(4) GLOBAL SYMBOL ; ******************************************************************** LDER13: MOV #13,R4 ;FIRST MODULE BLOCK NOT "GSD" JSR PC,ERRPRT LDER14: MOV #14,R4 ;FIRST ET AORCTSEE ONE ITWR ; 4. 6 RDWO .    0 100002 211005 67 1 ERMBNUR TOEC SERILRA;T 0 D OR.W: ECASTR   000000 100201 7416 0 0,0, D OR.W 000000 000000 000000 020201 7316 A RE AERILRA TOMFRE ITWRS AYLW;A 1 E YT.B: .WARTR   01 0 010201 7216 0 E YT.B   00 0 000201 7116 E IL FCHAT BOR FD.I.E IL;F IDCHBT D OR.W   100000 760101 7016 S TERI WERILRA TOR FERADHE ; D:HERAT  V #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,PTROBJ ;POINTER TO NEW MODUAGS+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 TO WORD INDEX JMP @GSDTAB(R2) .PAGE GSDTAB: .WORD LODE00 ;(0) OBJ MOD NAME .WORD LODE20 ;(1) SECTION NAME .WORD NTRY IN GSD NOT OBJ MOD NAME JSR PC,ERRPRT LDER15: MOV #15,R4 ;ILLEGAL GSD ENTRY DECLARATION JSR PC,ERRPRT LODC19: JMP LODF00 ;END OF READING FIRST PASS OVER OBJ MODS .PAGE ;****************PROCESSING FOR INDIVIDUAL G S D ENTRIES************** ; ON ENTRY TO EACH ROUTINE, R1 AND R4 POINT TO CANDIDATE ENTRY ;*******MODULE NAME******** LODE00: JSR PC,SRMODN ;SEARCH FOR MODULE NAME BR LDER16  760101 6916 8 66 1 ******************************************************************** ;     6716 6 66 1 TADAT ECBJ OOR FCKLO BNDCOSE ; . 28+1=. .2:BKBJO  ' 760101 767700 6516 A AT DCTJEOBR FOK OCBLT RSFI ; . 28+1=. .1:BKBJO  ' 767700 767500 6416 3 66 1 RSTOEC SWO TIND EA RYSWAAL ; . 28 1 RDWO .    0 200004 570702 66 1 ERMBNUR TOEC SVETILARE ; 0 RDWO .C:SEBJO  0 000002 570701 66 1 ,0,0 0 RDLE 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 BR LODE22 ;NLODD20 ;(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 JSR PC,ERRPRT LDER15: MOV #15,R4 ;ILLEGAL GSD ENTRY DECLARATION JSR ;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+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,PTGWO .  0 000000 000000 000004 560700 66 1 AGFLE ITWRD/EA;R 0 E YT.B   00 0 637500 5916 R TOEC SVETILARE ; 0 TEBY .    0 00  2 560708 65 1 LEFIH TCBAR FO. .D ILEFI ; D HITC B RDWO .    0 010000 560707 65 1 ESULOD MCTJEOBG INADRER FOR DEEA;H : EDJHOB    607500 5616 5 65 1 ******************************************************************** ;     5416 3 65 1 CKLO BVESAT EX TNDCOSE ; OT 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 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),#SECPC,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,PTROBJ ;POINTER TO NEW MODULE NAME IN LSD JSR PC,INSYME ;GO INSERT ENTRY INTO LOB ;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 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 . 28+1=. .2:BKXTT  ' 607500 607300 5216 K OCBLE AV SXTTET RSFI ; . 28+1=. .1:BKXTT  ' 607300 607100 5116 0 65 1 METIH AC EERSFANTRO TDSOR W;# 0 D OR.W: NTTCTX   000000 567100 4916 T EX TTEIOWRD/EA RTOR TOEC SVETILARE ; 0 RDWO .C:SEXTT  0 000004 150708 64 1 ,0,0 0 RDWO .  0 000000 000000 000006 140707 64 1 TEBYE ITWRD/EA RXTTE ; 0 TEBY .W:R.XTT  0 00  5 140706 64 1 ORCTSEE IVATEL|TN ;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 ; ******************************************************************** LDER17: MOV #17,R4 ;SECTION NLSD 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 BR LODE22 ;NOT FOUND - GO INSERT IT BITB #UNDEF,FLAGS(R1);IS IT DEFIN 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 ; ************************************************;R 0 E YT.B   00 0 447100 4516 E IL FCHAT BOR FD.I.E IL;F IDCHBT D OR.W   100000 427100 4416 S ONTIRAPE OTERI/WADRER FEUF BVESAT EX TOR FERADHE ; D:HEXTT   2 140703 64 1 46E AG PA 04V0O CRMA ODSLRO E AG.P     4216 1 64 1 ******************************************************************** ;     4016 E IL FINS ORCTSE# ; 0 RDWO .    0 000000 140709 63xAME 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 REMOVE IT FROM UNDEF AREA BISB #DBLDEF,FLAGS(R4) ;FLAG OLD ONE ASED? BNE LODE24 ;YES -(BYPASS UNDEF WORK) JSR PC,SQUISH ;NO: REMOVE 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 ;N******************** 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 REMOVE IT FROM U 1 PETYE IL;F 0 D OR.W   000000 367100 3816 . .D ILEFI ; 0 RDWO .    0 000004 130707 63 1 RYTOECIR DRECOF IEDRNTURE: FD;I 0 D OR.W   000000 327100 3616 K TSRR,EORRR;E 0 0, E YT.B  00 0 00 0 307100 3516 T IS LE"IL FNEFIDE;" 1 D OR.W: STLIDF   010000 267100 3416 3 63 1 ****************************************************************** * ;    2 63 1 t A DOUBLER BISB #DBLDEF,FLAGS(R1) ;ALSO FLAG NEW ONE BR LODE44 ;BYPASS REMOVAL LODE42: JSR PC,SQUISH ;REMOVE FROM UNDEFINED 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 *O - 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 ; ******************************************************************** LDER17: MOV #17,R4 ;SECTION NAME CONFLICT W/GLOBAL SYMBOL JSR PC,ERRPRT .PAGNDEF 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 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 WIS)ORCTSEF O(#H GTEN LNTMELE;E 0 D OR.W: ZESIBF   000000 247100 3116 ) VETILAREE IL(FR TOEC SRTTA SNTMELE;E 0 D OR.W: CTSEBF   000000 227100 3016 E YP TNTMELE;E 0 E YT.B: PETYBF   00 0 217100 2916 S TUTA SNTMELE;E 0 E YT.B: ATSTBF   00 0 207100 2816 0 0, D OR.W: MENABF  000000 000000 147100 2716 # E IL;F 0 D OR.W   000000 127100 2616 D OR WORRR;E 0 D OR.W: p * * 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 HAVE BEEN PROCESSED, AND THE LOADER'S SYMBOL DIRECTORY ; (LSD) HAS BEEN CONSTRUCTED. NOW THE LSD MUST BE PASSED OVER ; TO ASSIGN LOE ;*******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 REMOVE IT FROM UNDEF AREA BISB #DBLDEF,FLAGS(R4) ;FLAG OLD ONE AS A DOUBLER BISB #DBLDEF,FLAGS(R1) ;ALSO FLAG NEW ONELL 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 HAVE BEEN PROCESSED, AND THE LOADER'S SYMBOL DIRECTORY ; (LSD) HAS BEENK1BLBF   000000 107100 2516 T IS LP"FU"B ;     2416 3 62 1 ****************************************************************** * ;    2 62 1 ERFFBUA AT;D EDAHTR D OR.W   6'171006 100701 62 1 EDRVSERED,OR WORRR;E 0 0, D OR.W: RRAETR  000000 000000 027100 2016 L VELER;ROER ; ,3 0 TEBY .   3 00  0 00  0 100709 61 1 0 RDWO .    0 000006 070708 61 1 NDPEUS,SSCDI ; ,2 1 TEBY . lAD 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 ; 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 BR LODE44 ;BYPASS REMOVAL LODE42: JSR PC,SQUISH ;REMOVE FROM UNDEFINED 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? 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 ; 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   2 00  1 00  4 070707 61 1 ERILRA TOR FSTLI ; 1 RDWO .T:LSRAT  1 000002 070706 61 1 45E AG PA 04V0O CRMA ODSLRO E AG.P     1516 4 61 1 EAART EX TTOM/RO F/W RYSWAAL ; D HEXT T RDWO .    ' 427100 707000 1316 D VEERES,RRDWOR ROER ; ,0 0 RDWO .R:ERXTT 0 000000 000004 060702 61 1 ELEV,LORRR;E 3 0, E YT.B  03 0 00 0 627000 1116 0 D OR.W   0000hPUT 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 #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 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 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 SECTOF 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 #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 <. 00 607000 1016 D ENSPSU; SCDI ; ,2 1 TEBY .   2 00  1 00  6 050709 60 1 EAART EX TOMFRO/ TRSFENSRA TOR FSTLI ; 1 RDWO .T:LSXTT  1 000004 050708 60 1 0716 * ****************************************************************** ;     0616 N RUG INUR DENOSCH: ERFFBUA AT;D 0 D OR.W: UFPBMA   000000 527000 0516 D VEERES;R 0 0, D OR.W  000000 000000 467000 0416 L VELER,ROER ; ,0 0 TEBYdSECTION MOV MONSEC,(R4)+ ;MOVE IN NAME MOV MONSEC+2,(R4)+ MOV #SECTN*400+UNDEF,(R4)+ ;SET FLAG: ABSOLUTE SECTION NAME EMT 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 UNDEFINEDION 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 ; 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.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 ;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 .   0 00  0 00  4 040703 60 1 TELEMPCOO I/ ; 0 RDWO .    0 000002 040702 60 1 NDPEUS,SERNTRI PNELI ; ,2 3 TEBY .   2 00  3 00  0 040701 60 1 AP MADLOR FOT IS;L 1 D OR.W: STPLMA   010000 367000 0016 9 59 1 ****************************************************************** * ;    8 59 1 ERFFBUA AT;D EDJHOB D OR.W   0'560704 030707 59 1 EDRVSERE, RDWOR ROER ; ,0 0 RD`S? BEQ LODF09 ;YES MOV R2,R3 ;INIT TEMP PTR TO MONITOR SYMBOLS LODF04: CMP (R3),#-1 ;EXHAUSTED MONITOR SYMBOLS? 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 MOV #LSDBGN,R4 ;PTR TO SYMBOL TABLE ADD #BPSYM,R4 ;SKIP FIRST MODULE 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 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 ;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 WO .R:ERBJO 0 000000 000000 030706 59 1 TYRIIOPRT ESQUREC IS DK,AS TRR;E 3 0, E YT.B  03 0 00 0 267000 9515 0 D OR.W   000000 247000 9415 D ENSPSU: SCDI ; ,2 1 TEBY .   2 00  1 00  2 020703 59 1 STLID EA RLEDUMOT ECBJ;O 1 D OR.W: STJLOB   010000 207000 9215 1 59 1 ******************************************************************** ;     9015 R FEUF BTADA ; 0 RDWO .F:BUTY\ #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 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 MONSEC+2,(R4)+ MOV #SECTN*400+UNDEF,(R4)+ ;SET FLAG: ABSOLUTE SECTION NAME EMT 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 ;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 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 T  0 000006 010709 58 1 EDRVSERE ; ,0 0 RDWO .   0 000000 000002 010708 58 1 ELEV,LORRR;E 0 0, E YT.B  00 0 00 0 107000 8715 E ETPLOM C/O;I 0 D OR.W   000000 067000 8615 D ENSPSU: PETYL AL C1; #TY TE:ICEV;D 2 0, E YT.B  02 0 00 0 047000 8515 T IS L/O IPETYLETE ; 1 RDWO .T:LSTYT  1 000002 000704 58 1 ******;* XPC,INPTRH ;PUT IT IN THE <. MON.> SECTION MOV R0,R4 ;NEW POINTER TO UNDEFINEDS BR LODF03 ;MORE LODF09: CLR PRSIZE ;INIT PROGRAM LOAD SIZE MOVB #1,LODF10 ;INIT SWITCH TO MONITOR FIRST 32 WORDS ;******* MOV #LSDBGN,R0 ;INIT PTR TO LSD MOV R0,PTROBJ ;...AND TO CURRENT OBJ MODULE BR LODF20 LODF10: BR .+2 ;******* ;INIT TEMP PTR TO MONITOR SYMBOLS LODF04: CMP (R3),#-1 ;EXHAUSTED MONITOR SYMBOLS? 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 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 PRSIZE ;INIT PROGRAM LOAD SIZE MOVB #1,LODF10 ;INIT SWITCH TO MONITOR FIRST 32 WORDS ;******* MOV #LSDBGN,R0 ;INIT PTR TO LSD MOV R0,PTROBJ ;...AND TO CURRENT OBJ MODULE BR LODF20 LODF10: BR ND.E '''''')' ; ******** OW NOR FODSLROE RCFO; 0 20.+.= ******** ; Y ORCTREDIL BOYM SERADLOF OND;E . = NDDELS E BLTAL BOYM BR LODF12 ;CLOSED SWITCH SKIPS CHECK OF 1ST 32 WDS;******* CMP PRSIZE,#HEDSIZ ;STILL IN HEADER? ;******* BLT LODF12 ;******* CLR PRSIZE ;RESET AND FORCE BASE OF NEXT SECTION =0;******* CLRB LODF10 ;CLOSE SWITCH ;******* LODF12: ADD #BPSYM,R0 ;NEXT ENTRY ;******* LODF20: CMP 4(R3),VALR(R4) ;LOAD SYMBOL VALUE INTO LSD MOV R4,R0 ;XFER SOURCE POINTER 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,R .+2 ;******* BR LODF12 ;CLOSED SWITCH SKIPS CHECK OF 1ST 32 WDS;******* CMP PRSIZE,#HEDSIZ ;STILL IN HEADER? ;******* BLT LODF12 ;******* CLR PRSIZE ;RESET AND FORCE BASE OF NEXT SECTION =0;******* CLRB LODF10 ;CLOSE SWITCH ;******* LODF12: ADD #BPSYM,R0 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 ************************************PR0,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 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 PRO4 ;NEW POINTER TO UNDEFINEDS BR LODF03 ;MORE LODF09: CLR PRSIZE ;INIT PROGRAM LOAD SIZE MOVB #1,LODF10 ;INIT SWITCH TO MONITOR FIRST 32 WORDS ;******* MOV #LSDBGN,R0 ;INIT PTR TO LSD MOV R0,PTROBJ ;...AND TO CURRENT OBJ MODULE BR LODF20 LODF10: BR .+2 ;******* BR LODF12 ;CLOSED SWITCH SKIPS CHECK OF 1ST 32 ;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 DEC R1 ;SECTION NAME? BNE LODF10 ;NO: GET NEXT ENTRY .PAGE ;*******SECTION NAME: MAKE ITS SIZE EVEN, STORE ITS BASE V******************************** ; 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 FOY OREM;M 0 LGRAM 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 MOV VALR(R0),R3 ;SECTION SIZE ADD #3,R3 ;FORCE EACH SECTION ... ;******* BIC #3,R3 ;...ONTO A DOUBLEWORD BOUNDARY ;******* MOV PRSIZE,B WDS;******* CMP PRSIZE,#HEDSIZ ;STILL IN HEADER? ;******* BLT LODF12 ;******* CLR PRSIZE ;RESET AND FORCE BASE OF NEXT SECTION =0;******* CLRB LODF10 ;CLOSE SWITCH ;******* LODF12: ADD #BPSYM,R0 ;NEXT ENTRY ;******* LODF20: CMP R0,SYME ;END OF LSD? BHIS LODF90 ;YES: EXALUE, 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 MOV VALR(R0),R3 ;SECTION SIZE MOV R3,R4 ASR R4 ADC R3 ;MAKE SIZE EVEN MOV PRSIZE,BASD 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 OR.W: BJROPT E IZ SAMGRROHASE(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 MOV PTSECT,R3 ;POINTER TO CURRENT SECTION MOV BASE(R3),BASE(R0) ;SECTION BASE ADD VALR(R0),BASE(R0) ;CALC OFFSETIT LOOP MOVB FLAGS+1(R0),R1 ;ENTRY TYPE MOVB FLAGS(R0),R2 ;QUALITIES FLAG CMPB R1,#GENTRY ;GLOBAL SYMBOL? BEQ LODF50 ;YES DEC R1 ;SECTION NAME? BNE LODF10 ;NO: GET NEXT ENTRY .PAGE ;*******SECTION NAME: MAKE ITS SIZE EVEN, STORE ITS BASE VALUE, SET PTR ; TO THIS SECTION, AND INCREMENT THE TOTAL PROGRAM SIZE. BITB #ABSREL,R2 ;ABSOLUTE OR RELOCATABLE? E(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 MOV PTSECT,R3 ;POINTER TO CURRENT SECTION MOV BASE(R3),BASE(R0) ;SECTION BASE ADD VALR(R0),BASE(R0) ;CALC OFFSET F PNTREUR;C 0 D OR.W: ZESIPR 0 1, E YT.B: ROEZON ******;* K OCBL" XT"TT ENRRCUF OINEG BTOE IVATEL;R 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 ******;* O ER ZOCEL ROMFRT D 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. LODF90: CMP @#SWR,#100000 ;******* BEQ LODF91 ;SKIP TTY MESSAGE ;*** BNE LODF30 ;REL CLR VALR(R0) ;ABS: SET SIZE... CLR BASE(R0) ;...AND BASE = 0 BR LODF40 LODF30: ;RELOCATABLE SECTION MOV VALR(R0),R3 ;SECTION SIZE ADD #3,R3 ;FORCE EACH SECTION ... ;******* BIC #3,R3 ;...ONTO A DOUBLEWORD BOUNDARY ;******* MOV PRSIZE,BASE(R0) ;SET BASE OF NEW SECTION ADD R3,PRSIZE ;SUMROM 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. LODF90: CMP @#SWR,#100000 ;******* BEQ LODF91 ;SKIP TTY MESSAGE ;*****ENEMACPLIS DC"RPCU;" 0 D OR.W: CEPLDS ******;* ROZEE ULOD MADLOE UTOLBS AOMFRE NCTAIS DALICYSPHL UACT AS: IATTH; " 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 "NGRINOIGR FOH TCWI;S 0 D OR.W: CHWIAS OLMBSYT ENRRCUR FOG LA FOCEL/RBS;A 0 D OR.W: ALSVAB ERFFBU@**** 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. LODF91: ;******* MOV #TMPBUF+4,R0 MOV #YEAR,R1 MOV #3,R2 EMT GEDATE LODF92: MOV 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 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 #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. LODF91: ;******* MOV #TMPBUF+4,R0 MOV #YEAR,R1 MOV #3,R2 EMT GEDATE LODF92: MOV N 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 ******************************************************************** ; 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 ; < #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 EMT GETIME MOV #TMPBUF,-(SP) EMT BINASC MOV (R0),HOUR MOV #TMPBUF,-(SP) EMT BINASC MOV (R0),MINUTE MOV #HEDING,MA: 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. 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" SUBRO #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 EMT GETIME MOV #TMPBUF,-(SP) EMT BINASC MOV (R0),HOUR MOV #TMPBUF,-(SP) EMT BINASC MOV (R0),MINUTE MOV #HEDING,MAPB ,'' 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 0 0,0,0,0,0, E YT.B: AMCNSE '< E YT.B 0 8PBUF ;PRINT HEADING JSR PC,LPCALL ;GO ASK FOR LINE PRINTER MOV #LSDBGN,R0 CLR PRSIZE ;INIT CUMULATIVE LOAD MODULE SIZE MOVB #1,LODG10 ;INIT SWITCH ;******* BR LODG20 LODG10: BR .+2 ;******* BR LODG12 ;******* CMP PRSIZE,#HEDSIZ UTINES IS LEFT ON THE ; STACK TO BE POPPED BY THE "BINASC" ROUTINE. LODF91: ;******* MOV #TMPBUF+4,R0 MOV #YEAR,R1 MOV #3,R2 EMT 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 UF ;PRINT HEADING JSR PC,LPCALL ;GO ASK FOR LINE PRINTER MOV #LSDBGN,R0 CLR PRSIZE ;INIT CUMULATIVE LOAD MODULE SIZE MOVB #1,LODG10 ;INIT SWITCH ;******* BR LODG20 LODG10: BR .+2 ;******* BR LODG12 ;******* CMP PRSIZE,#HEDSIZ 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 [": 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 YT4 ;******* BLT LODG12 ;******* CLR PRSIZE ;******* CLRB LODG10 ;******* LODG12: ADD #BPSYM,R0 ;******* LODG20: CMP R0,SYME ;END OF LSD? BHIS LODH10 ;YES: EXIT LOOP MOVB FLAGS+1(R0),R1 ;ENTRY TYPE BEQ LODG ;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 MOV #LSDBGN,R0 CLR PRSIZE ;INIT CUMULATIVE LOAD MODULE SIZE MOVB #1,LODG10 ;INIT SWITCH ;******* BLT LODG12 ;******* CLR PRSIZE ;******* CLRB LODG10 ;******* LODG12: ADD #BPSYM,R0 ;******* LODG20: CMP R0,SYME ;END OF LSD? BHIS LODH10 ;YES: EXIT LOOP MOVB FLAGS+1(R0),R1 ;ENTRY TYPE BEQ LODG30.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 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 OA030 ;OBJ MOD NAME DEC R1 BEQ LODG40 ;SECTION NAME CMP R1,#3 ;ENTRY? BNE LODG10 ;NO: IGNORE MOV #GLOBAL,-(SP) ;YES:***PRINT ENTRY NAME & VALUE*** MOV R0,-(SP) EMT R50UNP ;RAD50 UNPACK MOV 10(R0),R4 ;GLOBAL'S VALUE RELATIVE TO LOAD BASE 0. MOV #GLBVAL+6,R3 ;END OF ASCII BUFFER JSR PC,BIN2OC ;CONVERT BINARY TO O ;******* BR LODG20 LODG10: BR .+2 ;******* BR LODG12 ;******* CMP PRSIZE,#HEDSIZ ;******* BLT LODG12 ;******* CLR PRSIZE ;******* CLRB LODG10 ;OBJ MOD NAME DEC R1 BEQ LODG40 ;SECTION NAME CMP R1,#3 ;ENTRY? BNE LODG10 ;NO: IGNORE MOV #GLOBAL,-(SP) ;YES:***PRINT ENTRY NAME & VALUE*** MOV R0,-(SP) EMT R50UNP ;RAD50 UNPACK MOV 10(R0),R4 ;GLOBAL'S VALUE RELATIVE TO LOAD BASE 0. MOV #GLBVAL+6,R3 ;END OF ASCII BUFFER JSR PC,BIN2OC ;CONVERT BINARY TO OCT 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: UMRNER " #ORRR"E IISC.A CR E YT.B 0 D OR.W E AGSSMER ROERN IRSHA C;# -4-.NDNEER: SGRMER E AG.P ******;* ****,CTAL ASCII MOVB #' ,MFLAG ;INIT "M" FLAG POSITION WITH SPACE BITB FLAGS(R0),#DBLDEF ;WAS THIS SYMBOL MULTIPLY DEFIND BEQ LODG25 MOVB #'M,MFLAG ;YES: SET TO FLAG ENTRY IN MAP LODG25: MOV #ENTRY,MAPBUF ;SET UP TO PRINT ENTRY LINE JSR PC,LPCALL BR LODG10 ;NEXT .PAGE LODG30: ;***PRINT OBJECT MODULE'S NAME*** MOV #TITLE,-(SP) MOV R0,-(SP) EMT ;******* LODG12: ADD #BPSYM,R0 ;******* 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: IGNORE MOV #GLOBAL,-(SP) ;YES:***PRINT ENAL ASCII MOVB #' ,MFLAG ;INIT "M" FLAG POSITION WITH SPACE BITB FLAGS(R0),#DBLDEF ;WAS THIS SYMBOL MULTIPLY DEFIND BEQ LODG25 MOVB #'M,MFLAG ;YES: SET TO FLAG ENTRY IN MAP LODG25: MOV #ENTRY,MAPBUF ;SET UP TO PRINT ENTRY LINE JSR PC,LPCALL BR LODG10 ;NEXT .PAGE LODG30: ;***PRINT OBJECT MODULE'S NAME*** MOV #TITLE,-(SP) MOV R0,-(SP) EMT **************************************************************** ; 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 E AGSSME" 1ND"EN IRSHA C;# -4-.ND1END: SG1MND ****************( R50UNP ;UNPACK MODULE'S NAME MOV #MODULE,MAPBUF ;INIT TO PRINT MODULE NAME & HEADING JSR PC,LPCALL ;GO PRINT IT BR LODG10 ;NEXT LODG40: ;***PRINT PROGRAM SECTION NAME*** MOV #SECNAM,-(SP) MOV R0,-(SP) EMT R50UNP ;UNPACK SECTION NAME MOV 10(R0),R4 MOV #SECVAL+6,R3 JSR PC,BIN2OC ;CONVERT BINARY TO OCTAL ASCII MOV 6(R0),TRY 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 MOVB #'M,MFLAG ;YES: SET TO FLAG ENTRY R50UNP ;UNPACK MODULE'S NAME MOV #MODULE,MAPBUF ;INIT TO PRINT MODULE NAME & HEADING JSR PC,LPCALL ;GO PRINT IT BR LODG10 ;NEXT LODG40: ;***PRINT PROGRAM SECTION NAME*** MOV #SECNAM,-(SP) MOV R0,-(SP) EMT R50UNP ;UNPACK SECTION NAME MOV 10(R0),R4 MOV #SECVAL+6,R3 JSR PC,BIN2OC ;CONVERT BINARY TO OCTAL ASCII MOV 6(R0),R1**************************************************** ; 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 OR.W: ECASTR 0 0,0, D OR.W A RE AERILRA TOMFRE ITWRS AYLW;A 1 $R1 ;SECTION SIZE MOV R1,R4 MOV #SECSIZ+6,R3 JSR PC,BIN2OC ;CONVERT BINARY TO OCTAL ASCII MOV R1,R2 ASR R2 ADC R1 ;MAKE MODULE SIZE EVEN ADD R1,PRSIZE ;ACCUMULATE LOAD MODULE SIZE MOV PRSIZE,R4 MOV #CUMSIZ+6,R3 JSR PC,BIN2OC ;CONVERT IT TO OCTAL ASCII MOV #SECT,MAPBUF JSR PC,LPCALL ;PRINT SECTION NAME,BASE 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 LODG10 ;NEXT LODG40: ;***PRINT PROGRA ;SECTION SIZE MOV R1,R4 MOV #SECSIZ+6,R3 JSR PC,BIN2OC ;CONVERT BINARY TO OCTAL ASCII MOV R1,R2 ASR R2 ADC R1 ;MAKE MODULE SIZE EVEN ADD R1,PRSIZE ;ACCUMULATE LOAD MODULE SIZE MOV PRSIZE,R4 MOV #CUMSIZ+6,R3 JSR PC,BIN2OC ;CONVERT IT TO OCTAL ASCII MOV #SECT,MAPBUF JSR PC,LPCALL ;PRINT SECTION NAME,BASE,S 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 ,SIZE,& CUM SIZE 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 BUM 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 R2 ADC R1 ;MAKE MODULE SIZE,& CUM SIZE 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 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;# 0 D OR.W: NTTCTX XTTEE OTRI/WADREO TORCTSEE IVATEL;R 0 D ORF LODH20: MOV #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 CMP @#SWR,#100000 ;******* BEQ LODJ00 ;SKIP TTY MSG ;******* MOV IZE 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 ;ANY UNDEFINEDS? BEQ LODH30 ;NO: LODH20: MOV #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 CMP @#SWR,#100000 ;******* BEQ LODJ00 ;SKIP TTY MSG ;******* MOV .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;F 0 D OR.W D.I.E IL;F 0 D OR.W RYTOECIR #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. ;THE METHOD IS SHOWN IN STEPS AS FOLLOWS: ;1) OPEN A TEMPORARY ELEMENT IN THE BATCH FILE AREA ;2) BUFFER IN ONE TEXT BLOCK 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 #BPSYM,R0 ;BUMP TO NEXT ENTRY CMP R0,U#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. ;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 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 ******** ; NDOU.B * ****************************************************************** ; 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 SAT 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 TRANSFER LOAD MODULE TO IT ;8) MAKE APPROPRIATE CHECKS ON TASK DATA IN HEADER... ; ...AND INIT APPROPRIATE MONITOR TABLES FOR TASYME ;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. ;THE METHOD IS SHOWN IN STEPS AS FOLLOWS: 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 TRANSFER LOAD MODULE TO IT ;8) MAKE APPROPRIATE CHECKS ON TASK DATA IN HEADER... ; ...AND INIT APPROPRIATE MONITOR TABLES FOR TASKNTMELE;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 ; * ****************************************************************** ; ******** ; 0 0, D OR.W 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,ISSK ;THESE OPERATIONS ARE DONE A SECTOR AT A TIME, TO ;CONSERVE PROGRAM BUFFER SPACE. ; FIRST MUST INIT TRAILER AND OTHER POINTERS... LODJ00: ;******* MOV PRSIZE,R0 ;TOTAL PROGRAM BYTES ADD #LDBYTS,R0 ;ACCOUNT FOR WORDS PRECEDING HEADER DEC R0 ;GET ADDRESS OF HIGHEST BYTE LOADED ASR R0 BIC #100000,R0 ;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 TRANSFER LOAD MODULE TO IT ;8) MAKE ;THESE OPERATIONS ARE DONE A SECTOR AT A TIME, TO ;CONSERVE PROGRAM BUFFER SPACE. ; FIRST MUST INIT TRAILER AND OTHER POINTERS... LODJ00: ;******* MOV PRSIZE,R0 ;TOTAL PROGRAM BYTES ADD #LDBYTS,R0 ;ACCOUNT FOR WORDS PRECEDING HEADER DEC R0 ;GET ADDRESS OF HIGHEST BYTE LOADED ASR R0 BIC #100000,R0 ;D 2 1, E YT.B R LEAITRR FOT IS;L 1 D OR.W: STALTR ******** ; NDOU.B E AG.P ******** ; 0 0, D OR.W 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 AXT 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 ASL R0 ;NOW HAVE RELATIVE PC FOR TRAILER START CMP 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... LODJ00: ;******* MOV PRSIZE,R0 ;TOTAL PROGRAM BYTES ADD #LDBYTS,R0 ;ACCOUNT FOR WORDS PRECEDING HEADER 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 ASL R0 ;NOW HAVE RELATIVE PC FOR TRAILER START CMP TEM RO/FTOS ERSFANTRR FOT IS;L 1 D OR.W: STTLTX ******** ; NDOU.B * ****************************************************************** ; ******** ; 0 0, D OR.W 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  (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 ;INIT MEMORY OF HIGHEST PC MOV #LDBYTS,CURPC ;ALLOW FOR LEAD WORDDEC R0 ;GET 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)+,(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 ;INIT MEMORY OF HIGHEST PC MOV #LDBYTS,CURPC ;ALLOW FOR LEAD WORDS ENSPSUR,TEINPRE IN;L 2 3, E YT.B AP MADLOR FOT IS;L 1 D OR.W: STPLMA ******** ; NDOU.B * ****************************************************************** ; ******** ; 0 0, D OR.W 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 S INSERTED BY LOADER MOV #LDBYTS,DSPLCE ;INIT DISPLACEMENT CALCULATION FOR HEDER;******* 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 TEMP 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 CLR TXTORG ;PC @ BEGIN OF CURRENT TEXT BUFFER INSERTED BY LOADER MOV #LDBYTS,DSPLCE ;INIT DISPLACEMENT CALCULATION FOR HEDER;******* 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 TEMP E 0 D OR.W NDPEUS SC:IS;D 2 1, E YT.B STLID EA RLEDUMOT ECBJ;O 1 D OR.W: STJLOB ******** ; NDOU.B ******************************************************************** ; ******** ; 0 0, D OR.W 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 ET  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-INIT  CLR HIGHPC ;INIT MEMORY OF HIGHEST PC MOV #LDBYTS,CURPC ;ALLOW FOR LEAD WORDS INSERTED BY LOADER MOV #LDBYTS,DSPLCE ;INIT DISPLACEMENT CALCULATION FOR HEDER;******* 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 LEMENT 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-INIT PPLOM 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 ******** ; NDOU.B ******;* ******;* A RE ACHAT;P 0 10 W LK.B ******;* E AG.P ******;*  POINTER TO MODULE NAMES MOV #TRAILBLOCK+4,TRAILPOINTER ;INIT TRAILER POINTER ;******* 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 ,BFTYPE ;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 OINTER 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" BLOCK 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 UFYBTTG,MSRR#E V MO ONSIERNVCOO TNTOI PRYNT ERYDAONEC SSE;U A NT2O,B ;"TEXT" BLOCK BR LODJ18 ;"RLD" BLOCK 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... ;  MOV MODCNT,NAMCTR ;RE-INIT COUNTER FOR # OF OBJECT MODULES MOV #NAMBUF,NAMPTR ;RE-INIT POINTER TO MODULE NAMES MOV #TRAILBLOCK+4,TRAILPOINTER ;INIT TRAILER POINTER ;******* 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 ;G 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: PC 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 ******************************************************************** ; RNTURE: EDLLFIR FEUF BIISC;A  ;...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 ;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 FOLLOWEET NEXT NON-GSD BLOCK BR LODJ50 ;FOUND A "MODULE-END" BLOCK BR LODK10 ;"TEXT" BLOCK BR LODJ18 ;"RLD" BLOCK BR LODJ12 ;"ISD" BLOCK: IGNORE LODJ18: MOV #3,TSWICH ;RLD! SET FLAG TO SHOW NOT FOLLOWING TXT LODJ20: ;PROCESS NEXT COMMAND IN RLD BLOCK TST R0 ;IS RLD BC EXHAUSTED? BGT LODJ22 ;NO - CONTINUE LODJ60: ;DONE WITH BLOCK: OUTPUT T;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: TEXT F 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 ROPLOO LS;A 3)(R,-R4 VBMO H GTEN LD 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 LDER12: MOV #12,R4 ;MAX T-JUMP TABLE INDEX EXCEEDED JSR PC,ERRPRT GETBLK: ;SEXT, IF ANY, AND CONTINUE JSR PC,TXTOUT ;GO OUTPUT TEXT, IF BUFFER IS FULL... ; ;...OR IF "CURPC" WAS CHANGED LODJ66: ;NOW PROCESS NEW BLOCK, IF IT FORCED TEXT OUTPUT MOV TSWICH,R2 ;SWITCH INDICATES INITIATING BLOCK TYPE CMP R2,#TMAX ;IS THIS VALUE LEGAL BGT LDER12 ASL R2 ;BYTE TO WORD INDEX JMP @LODJ69(R2) .PAGE LODJ69: ;"TSWICH" JUMP TOLLOWED 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 ;UONTIRATE 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 R TEINPRE IN;L TRRNLP T EM UBROUTINE TO GET A NON-GSD BLOCK. KEEPS FETCHING BLOCKS ;UNTIL FINDING A TEXT, RLD, OR MODULE END BLOCK. ;RETURNS TO: RTN+0 FOR MODULE-END; RTN+2 FOR TEXT; ;RTN+4 FOR RLDF RTN+6 FOR ISD. ;IF LAST BLOCK IN LAST MODULE IS NOT TEXT, RLD, OR MND, ;NO RETURN WILL BE MADE, BUT THE EXIT FROM PASS 2 WILL BE MADE. ;ROUTINE WILL NOT REJECT ILLEGAL COMMANDS ABOVE [6], BUT WILL ;INSTEAD MIS-INTERPRET THEM FOR ONE OF THE LEGAL ONES. JSABLE 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 NTIL 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 ) SP-(T,LSAP#M V MO R TEINPRE IN LTOT EME AK MTOE INUTRON MOOM;C : LLCALP E AG.P PC S RT ******;* 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 R3+,P)(S V MO E NGHA CPCA F OSECAN I",TRTPTX "TELACUAL-C!R 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 GETBLK ;IGNORE THEM AND GET NEXT BLOCK BIC #-3-1,R2 ;CHANGE 4 (MND=4+2) TO" LDER12: 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 ILL# 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 RES 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 3 % ZERO ASL R2 ;BYTE TO WORD INDEX 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 &EGAL COMMANDS 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. ' 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 (R1)+,,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 NADRED )#-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,#CMDMAX ;IS COMMAND WITHIN LEGAL RANGE*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 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+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 TST 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 -? 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 LODJ29: .WORD LDER20,CMD1,CMD2,CMD3,CMD4,CMD5,CMD6,CMD7,CMD8,CMD9 .WORD CMD2. (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 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 / 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 LODJ29: .WORD LDER20,CMD1,CMD2,CMD3,CMD4,CMD5,CMD6,CMD7,CMD8,CMD9 .WORD CMD2,LDER20,CMD4,CMD5,CMD6 ;THESE ARE .CSECT COMMANDS CMDMAX = 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. IND 1,LDER20,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; ;THEN BRING IN NEXT OBJECT MODULE MOV 2PTSECT,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"? 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 PROPE3.-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 ADD #5EA 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 ENY;A5 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 MOV R2,PTROBJ ;POINTER TO NEXT OBJ MOD6R COMMAND ROUTINE LODJ29: .WORD LDER20,CMD1,CMD2,CMD3,CMD4,CMD5,CMD6,CMD7,CMD8,CMD9 .WORD CMD2,LDER20,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 7,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 ;INIT FOR NEXT MODUL 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 ******;* PC S RT ******;* T PRRR,EPC R JS ******;* ORRR EONTICALOREE YT;B 4 ,R0000105+#2 9 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 LODJ12 ;YES: GO GET NEXT BLOCK :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 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 SU;E .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... TST (R1)V MO: 25ERLD 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 KEIN L ARESUE BTOE AD MISK ECCH ; . XTTEO NT IRDWOR OTEBYD KEIN LUT PTOE INUTROUB;S : UTTPTX ******;* =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 LODK36 ;YES ;******* MOVB (R1)+,(R2)+ ;TRANSFER ANOTHER BYTE BR LODK20 ;BACK FOR MORE >B #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: ;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 ASWI?+ ;...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 LODK36 ;YES ;******* MOVB (R1)+,(R2)+ ;TRANSFER ANOTHER BYTE BR LODK20 ;BACK FOR MORE ;******* LO : UTDPAD: UTBPSU 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: 80TBNX N URET RD"OO"GR FOP UM;B ) SP,(#2 D AD T UNCOE YT BTADAH IT WR5T NI;IA ;******* 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" BR LODK36 ;ISD: IGNORE LODK38: JMP LODJ22 LODK40: ;TEXT FOLLOWED BY MODULE - END MOV #2,TSWICH ;PUT OUT TEXT: THEN GET NEW MODULE BCH ;SWITCH SET TO IGNORE "ASECTS"? BNE 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 LODK36 ;YES ;******* MOVB CDK36: CLR TSWICH ;INDICATE FIRST TXT BLCOK JSR PC,GETBLK ;GET NEXT NON-GSD BLOCK BR LODK40 ;"MODULE-END" BR LODK50 ;"TEXT" BR LODK38 ;"RLD" 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 FO 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 RSFIF ODRADS ;I 0 ,R#1 T BI E YT BTADAT RSFIO TTR PALOC LETES;R 0 EBR 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 #21,R4 ;FINAL MODULE BLOCK NOT MODULE END JSR PC,ERRPRT .PAGE LODJ30: CMD1: ;INTERNAL SYMBOL: ADD SECTION BASE TO LOCAL OFFSET - ;"ADD BIASF (R1)+,(R2)+ ;TRANSFER ANOTHER BYTE BR LODK20 ;BACK FOR MORE ;******* 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" BR LODK36 ;ISD: IGNORE LODK38: JMP LODJ22 LODK40: GLLOWED BY TEXT MOV #1,TSWICH ;INDICATE MORE TEXT AFTER OUTPUT THIS 1. LODK52: JMP LODJ60 ;GO OUTPUT UN-MODIFIED TEXT BLOCK ; ******************************************************************** LDER21: MOV #21,R4 ;FINAL MODULE BLOCK NOT MODULE END JSR PC,ERRPRT .PAGE LODJ30: CMD1: ;INTERNAL SYMBOL: ADD SECTION BASE TO LOCAL OFFSET - ;"ADD BIAS" INSTRUCTION INTO TRAILER MOV (R1)+,R4 ;LOCAL V,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 M SUCKHE CUMCC;A 2 ,RR3 D AD TEBYT EX NCTRAXT;E R3+,0)(R I" 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: OFFSET FROM LOAD BASE INTO TEXT - ;"ADD" INTO TRAILER (SUPPRESSED IF GLOBAL IS ABSOLUTE) MOV R1,R4 ;POINTS TO GLOBAL NAME CMP (R1)+,(R1)+ J ;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 #21,R4 ;FINAL MODULE BLOCK NOT MODULE END JSR PC,ERRPRT KALUE 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: OFFSET 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 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)(R TBTS T UNCOE YT B'SCKLO;B R1+,0)(R VBMO CKLO BSSCERO POWM ;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: ;DISPLACEMENT FROM CURRENT PC INTO TEST - ;"SUB BIAS" INSTRUCTION INTO TRAILER JSR PC,GETPCR ;GET PC AS OFFSET FROM RELOCATABLE ZERO N .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: OFFSET FROM LOAD BASE INTO TEXT - ;"ADD" INTO TRAILER (SUPPRESSEONAME 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: ;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)) 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..;. 10TBNX BR K OCBLW NEN ICELA PEROPPRR FOE ATPD;U R PTLK,BR0 Q 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 FROM 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,RRD 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: ;DISPLACEMENT FROM CURRENT PC INTO TEST - ;"SUS 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 FROM 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 GLOBALV 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 0 ,RTRKPBL V MO T ARSTK OCBLT EX NNDFIO TREPARE;P : 30TBNX E AGU5 ;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,SUBPUT ;INSERT "SUB" ONLY IF ABSOLUTE SUB #6,R0 ;BC BR LODJ99 ;NEXT RLD LODJ38: CMD5: ;GLOBAL ADDITIVE RELOCATION: ;PUT SVB 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 FROM CURRENT PC INTO TEXT ;"SUB" IN TRAILER ONLY IF GLOBAL IS ABSOLUTE; I.W 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,SUBPUT ;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; ;"AD.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 90TBNX T BL E?ULOD MINS ORCTSEE OR MNY;A CTCTSE C DE YUM 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 ;CONST + XSYM JSR PC,ADDPUT ;PUT WORD IN TEXT AND "ADD" INTO TRAILER SUB #8.,R0 ;BC BR LODJ99 ;NEXT RLD LODJ40: CMD6: ZE., 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,SUBPUT ;INSERT "SUB" ONLY IF ABSOLUTE SUB #6,R0 ;BC [D" 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 ;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 & GLOBDSEA 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 RCFOO TLEDUMOE THN IORCTSEL NAFIE TH ; R TEAFD EA RISR TOEC SALONTIDIADE ON R.] ;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 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 ^ 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 ;CONST + XSYM JSR PC,ADDPUT ;PUT WORD IN TEXT AND "ADD" _AL, 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 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 FEUF BORCTSEO-TW ; E THF OLFHAR PEUPN IISK OCBLT EX NOFE YT BNE OSTEA LAT ; L TIUNS ORCTSEN IDSEA RNETIOUBRSU ":CKLO BXTNE;" '''''*>* 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 OORCTSEA TREXE ONT AN;W a 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 .PAGE ;******* LODJ42: CMD7: ;SET CURRENT PC AND POINT TO NEW SECTION ;IF .ASECT, THE CONSTANT WILL BE THE NEW PbINTO 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 R4,R5 ;SAVE IT MOV R1,R4 ;GLOBAL NAME PTR c ;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: 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 SECT 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,UYMPS#B B SU P POEG,ReC, 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 R4,PTSECT ;PERM PTR TO SECT NAME IN LSD... MOV R4,R5 ;...ALSO CURRENT PTR f 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 .PAGE ;******* LODJ42gION'S BASE. MOV R1,R4 ;PTR TO SECT NAME SOUGHT CMP (R1)+,(R1)+ ;BUMP TO CONSTANT JSR PC,GETSEC ;SEARCH FOR SECTION NAME IN LSD BR LDER23 ;NOT FOUND MOV R4,PTSECT ;PERM PTR TO SECT NAME IN LSD... MOV R4,R5 ;...ALSO CURRENT PTR SUB #4,R0 ;BC (MORE BELOW) CLR ASWICH ;"ASECT" SWITCH: PREPARE CMP 4(R5),#410 ;IS THIS AN "ASER5 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 MO 0 ,RR4 V MO i SUB #4,R0 ;BC (MORE BELOW) CLR ASWICH ;"ASECT" SWITCH: PREPARE CMP 4(R5),#410 ;IS THIS AN "ASECT"? BNE LODJ45 ;NO: GO CHECK CSECT NAMETO SEE IF HEADER;******* INC ASWICH ;SET TO FORCE IGNORE OF ALL "ASECT" TEXT ; CONTINUE AS IN "CMD8" LODJ44: CMD8: ;MODIFICATION TO PC: ".=.+C" ;BUMP PC BY ADDING NEW CONST TO CURRENT PGM SECT BASE MOV BASE(R5),R4 ;CURRENT SECTIj: 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 kCT"? BNE LODJ45 ;NO: GO CHECK CSECT NAMETO SEE IF HEADER;******* 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 DSPLCE,R4 ;MAINTAIN PROPER OFFSET FROM 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 MESY,UYMPS#B D AD S ERNTOI PTHBOP UM;B E YM,SYMPS#B D AD R0+,P)(S V MO R1+,mON'S BASE ADD (R1)+,R4 ;ADD CONSTANT TO BASE VALUE ADD DSPLCE,R4 ;MAINTAIN PROPER OFFSET FROM MODULE BGN ;******* 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:n 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 LODJ45 ;NO: GO CHECK CSECT NAMETO SEE IF HEADER;******* INC ASWICH ;SET TO FORCE IGNORE OF ALL "ASECT" TEXT ; CONTINUE AS IN "CMD8" LODJ44: CMD8: ;MODIFICATION TO PC: ".=.+C" o MODULE BGN ;******* 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 TYPE CMPB #PCMD1,(R1) ;IS NEXT COMMAND "PC DEFINITION"? P)(S V MO NE OERTHNO AVEMO: ET YOT;N 02SQUN 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,PYMq 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 ;******* LODJ45: ;THE FIRST UNNAMED CSECT THAT IS NOT ABSOLUTE IS ;******* r ;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 DSPLCE,R4 ;MAINTAIN PROPER OFFSET FROM MODULE BGN ;******* 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 s 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 ;******* LODJ45: ;THE FIRST UNNAMED CSECT THAT IS NOT ABSOLUTE IS ;******* ;CONSIDERED TO BE THE HEADER. UPON ENCOUNTERING THE FIRST NAMED;******* ;CSECT THAT IS NOT ABSOLUTE, "CURPC" MUST BE CORPS#B D AD 03PTIN I BH ..R.TEINPOD 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 INRMTEDEu ;CONSIDERED TO BE THE HEADER. UPON ENCOUNTERING THE FIRST NAMED;******* ;CSECT THAT IS NOT ABSOLUTE, "CURPC" MUST BE CORRECTED FOR NOT ;******* ;ONLY THE THREE WORDS PRECEEDING THE HEADER, BUT FOR THE HEADER ;******* ;ITSELF, SINCE THE FIRST CSECT BEYOND THE FIRST 100 BYTES IS ;******* ;RELOCATED BACK TO ZERO. "CURPC" IS AN ABSOLUTE PHYSICAL ;******* ;OFFSET FROM LOAD MODULE ZERO, AND MUST NOT BE FOOLED BY THE ;******* ;DUAL RELOCATAv ;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 wRECTED FOR NOT ;******* ;ONLY THE THREE WORDS PRECEEDING THE HEADER, BUT FOR THE HEADER ;******* ;ITSELF, SINCE THE FIRST CSECT BEYOND THE FIRST 100 BYTES IS ;******* ;RELOCATED BACK TO ZERO. "CURPC" IS AN ABSOLUTE PHYSICAL ;******* ;OFFSET FROM LOAD MODULE ZERO, AND MUST NOT BE FOOLED BY THE ;******* ;DUAL RELOCATABLE ZEROES. ;******* MOV (R5),R4 ;FIRST HALF OF NAME ;*L IL WREPAOM CN:IOCTSES HI TINL ILSTS IIT; E.ER HRTSEIN: 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 yBLE ZEROES. ;******* MOV (R5),R4 ;FIRST HALF OF NAME ;******* BIS 2(R5),R4 ;2ND HALF ;******* BEQ LODJ44 ;AN UNNAMED CSECT ;******* MOV #LDBYTS+HEDSIZ,DSPLCE ;ADJUST FOR RESET OF RELOC ZERO ;******* BR LODJ44 ;******* .PAGE LODJ46: CMD9: ;SET PROz ;******* LODJ45: ;THE FIRST UNNAMED CSECT THAT IS NOT ABSOLUTE IS ;******* ;CONSIDERED TO BE THE HEADER. UPON ENCOUNTERING THE FIRST NAMED;******* ;CSECT THAT IS NOT ABSOLUTE, "CURPC" MUST BE CORRECTED FOR NOT ;******* ;ONLY THE THREE WORDS PRECEEDING THE HEADER, BUT FOR THE HEADER ;******* ;ITSELF, SINCE THE FIRST CSECT BEYOND THE FIRST 100 BYTES IS ;******* ;RELOCATED BACK TO ZERO. "CURPC" IS AN ABSOLUTE PHYSICAL ;*{****** BIS 2(R5),R4 ;2ND HALF ;******* BEQ LODJ44 ;AN UNNAMED CSECT ;******* MOV #LDBYTS+HEDSIZ,DSPLCE ;ADJUST FOR RESET OF RELOC ZERO ;******* BR LODJ44 ;******* .PAGE LODJ46: CMD9: ;SET PROGRAM LIMITS CLR R4 ;LOW PROGRAM (RELATIVE) ADDRESS JSR PC,ADDPUT ;PUT IT IN TEXT AND ANV MO OWEL BR4D EE;N 2 ,RR4 V MO V SAEG,RR5 R JS Y.TRENE ATIDNDCAO TTSINPO4 R D.LSF ;O ONTIEC SNTREUR CTOINY LLCATIBEHALP ARYNT EANT ERNS;I : RHPTIN E AG.P T PRRR,EPC R JS E URALFIH RCEA SOLMBSYL BALO;G R42,#2 V MO: 22ERLD ******************************************************************** ; PC S RT RETOES;R P POEG,RR5 R JS W?LORFVE;O F OVYM,SPC R JS }GRAM LIMITS CLR R4 ;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 FAI~****** ;OFFSET FROM LOAD MODULE ZERO, AND MUST NOT BE FOOLED BY THE ;******* ;DUAL RELOCATABLE ZEROES. ;******* MOV (R5),R4 ;FIRST HALF OF NAME ;******* BIS 2(R5),R4 ;2ND HALF ;******* BEQ LODJ44 ;AN UNNAMED CSECT ;******* MOV #LDBYTS+HEDSIZ,DSPLCE ;ADJUST FOR RESET OF RELOC ZERO ;******* BR "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 LDER24: MOV #24,R4 ;FATAL ERROR: PC CMD NOT LAST IN RLD JSR PC,ERRPRT + 4)(R+,2)(R V MO + 4)(R+,2)(R V MO + 4)(R+,2)(R V MO RYNT EHE TINE OV;M + 4)(R+,2)(R V MO MESYT ALEHOA E AK;M H ISQUNS,UPC R JS: 01SYIN 4 ,RMESY V MO 2 ,RR4 V MO V SAEG,RR5 R JS MESY U &MESYS ERNTOI PSTJUAD ; ) SD GIN, G.E. (RYNT EHE TTOS NTOI PR4 ; SD LOFN IOCTSED NEFIDEN IRYNT EANT ERNS;I : MESYIN E AG.P PC S RT . .K;O R0+,P)(S V MO W?LORFVE;OLURE 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 READ OR WRITE WITH"TXTLST" MOV CURPC,R0 ;# BYTES IN  LODJ44 ;******* .PAGE LODJ46: CMD9: ;SET PROGRAM LIMITS CLR R4 ;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 ; **************** .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 CURPC,R0 ;# BYTES IN PROGRAM ;******* ASR R0 ;# WORDS ADD #LEDWDS+PHDSZE,R0 ;TOTAL # WORDS FROM F OVYM,SPC R JS R TEINPOP UM;B MESY,UYMPS#B D AD + 0)(R+,4)(R V MO + 0)(R+,4)(R V MO Y TRENL BOYM;S + 0)(R+,4)(R V MO EDINEFND UHE TINE OV;M + 0)(R+,4)(R V MO R0E,YMUS V MO ITE AV;S P)(S,-R0 V MO SD GINY TREN" EF.R "TOG INNTOI PR4 T:PUIN ; SD LOFN IOCTSED NEFIDEUNN IRYNT EANT ERNS;I : YMUSIN ******************************************************************** ; PC PROGRAM ;******* ASR R0 ;# WORDS ADD #LEDWDS+PHDSZE,R0 ;TOTAL # WORDS FROM TOP OF 1ST PAGE ;******* CLRB R0 ;GETTING # OF PAGES SWAB R0 ;# CORE "PAGES" -1 INC R0 ;# OF CORE PAGES MOV R0,-(SP) ;SAVE FOR USE BELOW ;******* .PAGE ;NOW DEFINE A "ROS" FILE FOR THE LOA*************************************************** 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 TOP OF 1ST PAGE ;******* CLRB R0 ;GETTING # OF PAGES SWAB R0 ;# CORE "PAGES" -1 INC R0 ;# OF CORE PAGES MOV R0,-(SP) ;SAVE FOR USE BELOW ;******* .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 S RT E LUVAT GE: NDOU;F 4 ,R4)(RLFVA V MO SD LIND UNFOT NOE AM;N 22ERLD BR MENAR FOH RCEA;S B LOTG,PPC R JS ALOBGLF OUEAL=VR4: UTTPOU ; 0)D5RA (MENAL BALO GOFR DD=AR4 T:PUIN ; 4 RINE LUVAL NAFIS ITN URET R &ALOBGLA R FOD LSH RCEA;S : OBGLSR ******************************************************************** ; PC S RT RNTURE" ODGO;" ) SP,(#2 D AD ITEXR ERO:;N 01TSGE D MODULE, OUTPUT IT, AND INIT ; THE NECESSARY TABLES TO RUN THE FILE 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" MOV #HEDBGN+24,R0 ;PTR TO "TPDR 0" ;******* MOV #8.,R1  JSR PC,TEXTIO ;GO READ OR WRITE WITH"TXTLST" MOV CURPC,R0 ;# BYTES IN PROGRAM ;******* ASR R0 ;# WORDS ADD #LEDWDS+PHDSZE,R0 ;TOTAL # WORDS FROM TOP OF 1ST PAGE ;******* CLRB R0 ;GETTING # OF PAGES SWAB R0 ;# CORE "PAGES" -1 INC R0 ;# OF CORE PAGES MOV R0,-(SP) ;SAVE FOR USE BELOW 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" MOV #HEDBGN+24,R0 ;PTR TO "TPDR 0" ;******* MOV #8.,R1 ;******* 2$: TST (R0)+ ;******* BEQ E BN ? MENAN IOCTSEA T IIS: ES;Y 4)(R+1GSLA,FTNEC#S PBCM N URET RORRR EO:;N PC S RT: 01TSGE D?LSN INDOU FBEE AM NAN;C B LOTG,PPC R JS D UNFO ; B BR ; D UNFOT NO ; A BR ; ECTSGEC, PR JS : LLCA ; D)UNFOF (ID LSN IONTIEC SEDAM NTOS NTOI PR4: UTTPOU ; E AM N50AD RTOS NTOI PR4 T:PUIN ; MENAN IOCTSEO TERNTOI PET;G : ECTSGE E AG.P INGA ARY;T 02GLPT BR | ;******* 2$: TST (R0)+ ;******* BEQ 4$ ;IGNORE UN-INITED REGISTERS ;******* MOV 16(R0),R3 ;PICK UP CORRESPONDING TPAR ;******* ADD #HEDSIZ,R3 ;ADJUST FOR HEADER SIZE... ;******* CLR R2 ;******* DIV #64.,R2 ;...AND FOR KT-11C BLOCK SIZE  ;******* .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: 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  4$ ;IGNORE UN-INITED REGISTERS ;******* MOV 16(R0),R3 ;PICK UP CORRESPONDING TPAR ;******* ADD #HEDSIZ,R3 ;ADJUST FOR HEADER SIZE... ;******* CLR R2 ;******* DIV #64.,R2 ;...AND FOR KT-11C BLOCK SIZE ;******* MOV R2,16(R0) ;******* 4$: SOB R1,2$ Y TREND LST EX;N 0 ,RYMPS#B D AD: 04GLPT H TCMAO ;N PC S RT RNTURE" ODGO;" ) SP,(#2 D AD E AVNS;U R0+,P)(S V MO E BLTACALOREE LS EE;UTOLBS A0:;= L VABS,AR0 V MO G LA FOCEL/RBS ATELASO;I 0 ,R-1ELSRAB#- C BI S AGFLS L'BOYM;S R0),R44( V MO SD LINE AM NNDOU FTOS NTOI POW;N 4 ,RR0 V MO 04GLPT Q BE S MENAD MOJ OBT OUR TEIL;F 0)(R+1GSLA,FMNBJ#O PBCM x ;******* MOV R2,16(R0) ;******* 4$: SOB R1,2$ ;******* INCB TXTR.W ;WRITE... ;******* JSR PC,TEXTIO ;...HEADER BACK OUT ;******* MOV HEDBGN+HTASK,R1 ;TASK # ;******* CMP R1,#TASMAX ;WITHIN LIMITS? BGT LDER30  #HEDBGN+24,R0 ;PTR TO "TPDR 0" ;******* MOV #8.,R1 ;******* 2$: TST (R0)+ ;******* BEQ 4$ ;IGNORE UN-INITED REGISTERS ;******* MOV 16(R0),R3 ;PICK UP CORRESPONDING TPAR ;******* ADD #HEDSIZ,R3 ;ADJUST FOR HEADER SIZE... ;******* CLR R2  ;******* MOV 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? BGT LDER31 ;ILLEGAL PRIORITY TSTB PPTAB(R2) ;IS THIS A TIME-SLICE PRIORITY? ! CHAT;M O ;N 04GLPT E BN ? CHAT MMENAF-AL HND;2 ) R02(),R42( P CM O ;N 04GLPT E BN ? CHAT MMENAF-AL HSTIR;F ) R0,(4)(R P CM: 03GLPT PC S RT ! NDOU FOT;N R0+,P)(S V MO ET YOT;N 03GLPT O BL ? ND;E MESY,UR0 P CM: 02GLPT OD MBJ ONTREUR;C 0 ,RBJROPT V MO: 01GLPT 02GLPT BR LEAB TOLMBSYF ONGNIINEG B @INEG BO:;N R0N,BGSD#L V MO OD MBJ ONTREUR Ct ;OUTSIDE TASK LIMITS CMP R1,#OVTMIN BLT LDER30 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  ;******* DIV #64.,R2 ;...AND FOR KT-11C BLOCK SIZE ;******* MOV R2,16(R0) ;******* 4$: SOB R1,2$ ;******* INCB TXTR.W ;WRITE... ;******* JSR PC,TEXTIO ;...HEADER BACK OUT ;******* MOV HEDBGN+HTASK,R1 ;TASK #  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 ;GET # OF PROGRAM SECTORS - 1 BR .+4 ;DON'T COUNT 1ST TRAILER SECTOR ;******* INC R0 ;# OF SECTORS IN FINAL FILE BIT #3,R0 ;IS # OF SATT ARST: ES;Y 01GLPT Q BE ? KSANBL6 F OSECA..;. R0),R42( S BI . ..ALCIPE SHE TISTHS ;I 0 ,R4)(R V MO ITE AV;S P)(S,-R0 V MO NDOU;F B BR ; NDOU FOT;N A BR ; B LOTG,PPC R JS L:AL C ; D UNFOF IRYNT ESD LTOR PT4= RT:PUUT O ; E AM N50AD RTOT PR4= RT:PUIN ; D.LSE THN IEAAR; LEDUMOT ECBJ ONTREUR CHE TTOH RCEA SHE TNGTIMILIY BLEDUMOT p TRASEC,R0 ;# OF FINAL SECTOR WRITTEN SUB BFSECT,R0 ;GET # OF PROGRAM SECTORS - 1 BR .+4 ;DON'T COUNT 1ST TRAILER SECTOR ;******* 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  ;******* 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? BGT LDER31 ;ILLEGAL PRIORITY TSTB PPTAB(R2) ;IS THIS A TIME-SLICE PRIORITY? BLE LODL04 ;NO TST HEDBGN+HMAXEQ ;YES - EXECUTION TIME MUST BE SPECTORS 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 ;GET MAX ALLOWED # OF "PAGES" W/SIGN MOV R3,R5 ;SAVE FOR SIGN BIC #100000,R3 ;LEAVE ONLY # OF PAGES ECBJ OCHEA; TOE QUNI UDEMAE ARD AN, KSANBL6 S AEDCTTEDEE AR, EREVOW HS,CTSEC-; D MENAUNE TH M.RO FMSRAOGPRD OA LTOE AS BNE OLYONS HAS HU TND AD,LS; HE TINE NC OLYONS ARPEAPT IS,NE OEDAM NHE TOFE ONS IONTIEC SHE TIF; E.ER HESLIY ITILABN IOCTSEL RONTCOS R'DEOA LHE TTOT REEC SHE;T ) OD MBJ OOT(NE AM NALOBGLA R FOD LSH RCEA;S : OBGLPT E AG.P PC S RT R0+,P)(S V MO RYNT ESD LTOS NTOI POW;N 4 ,RR0 V MO D!UNFO; O ;N D4MOSR l;...WHICH ARE NOT RESIDENT ON THE DISC. LODL06: ASL R2 ;GET WORD INDEX TO BLOCK-SIZE TABLE MOV BSZTAB-2(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 LARGE FOR PRIORITY TST R5 ;IS THIS PRIORITY "DYNAMIC"? ECIFIED BLE LDER32 LODL04: ;NOW CHECK FOR PROGRAM SIZE AND SET ACCORDINGLY MOV TRASEC,R0 ;# OF FINAL SECTOR WRITTEN SUB BFSECT,R0 ;GET # OF PROGRAM SECTORS - 1 BR .+4 ;DON'T COUNT 1ST TRAILER SECTOR ;******* INC R0 ;# OF SECTORS IN FINAL FILE BIT #3,R0 ;IS # OF SECTORS A MULTIPLE OF 4? BNE LODL06 ;NO INC (SP) ;YES 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+HEDSIZ,R5 ;FILE I.D. ;******* CMP R5,#NDISCS+$SYSFL;MUST BE GREATER THAN SYSTEM RESERVED BLE LD E BN ? CHAT MMENAF-AL HNDCOSE: ES;Y ) R02(),R42( P CM O ;N D4MOSR E BN ? CHAT MMENAF-AL HSTIR;F ) R0,(4)(R P CM: D3MOSR D1MOSR BR D MOB OJN AOT;N 0 ,RYMPS#B D AD: D4MOSR ? MESAE AM NIS: ES;Y D3MOSR Q BE E?AM NOD MBJ OANY GRENS HI;T0)(R+1GSLA,FMNBJ#O PBCM: D2MOSR PC S RT " NDOU FOT"NR FON URET RERLT;A ) SP,(#2 D AD ! NDOU FOT;N R0+,P)(S V MO ET YOT;N hBMI LODL20 ;YES: LEAVE AT ACTUAL SIZE MOV R3,(SP) ;REPLACE WITH MAX SIZE FOR FIXED PART'N LODL20: MOV HEDBGN+HEDSIZ,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 MOV HEDBGN+HCPUST,R5: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 ;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 ER35 ;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 MOV HEDBGN+HCPUST,R5;REQUESTED FILE TYPE ;******* BIC #-177-1,R5 ;SUPPRESS IFD REQUEST BIT ;******* CMP R5,#$OVTYP ;IS IT LEGAL FOR AN OVERLAY? BEQ LODL22 ;YES LDER37: INC R4 ;ILLEGAL FILE TYPE LDER36: INC D2MOSR O BL S?NEFIDEF OND EEDCHEA;R E YM,SR0 P CM: D1MOSR D LSF ORTTA;S R0N,BGSD#L V MO ITE AV;S P)(S,-R0 V MO NDOU FOT;N BR B ; NDOU;F AR B ; DNMOSRC, PSR J : LLCA ; NDOU FOT NIFD GEANCHUN4 R ; D)UNFOF (ID LSN IMENAO TTSINPO4 RT:PUUT O ; MENA0 D5RAO TTSINPO4 R: UTNP I ; MENAE ULOD M AOR FSD LOFN d;REQUESTED FILE TYPE ;******* BIC #-177-1,R5 ;SUPPRESS IFD REQUEST BIT ;******* CMP R5,#$OVTYP ;IS IT LEGAL FOR AN OVERLAY? BEQ LODL22 ;YES 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 ;# "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+HEDSIZ,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  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 AND EXIT .PAGE LODL22: ;READY TO "DEFINE" ROS FIOCTSED NEFIDEH RCEA;S : DNMOSR E AG.P T PRRR,EPC R JS " S!LKFO, LL A'SATTHH--TTH "W:LORFVE;O R46,#2 V MO: 26ERLD PC S RT D HEACRED ENE BLTAL BOYM;S 26ERLD I BH M SYBPD-ENSD#LE,YMUS P CM OWFLEROVE BLTAL BOYM SOR FCKHE;C : VFMOSY ******************************************************************** ; PC S RT NDMAOM CLD RTHWID IEIFECSPT SEFF;O 4 ,RETFSOF D AD RTTA SCKLO BXTTE@ C ;P`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 AND EXIT .PAGE LODL22: ;READY TO "DEFINE" ROS FILE MOVB HEDBGN+HCPUST,DFLIST+8. ;LOAD FILE TYPE INTO LIST ;******* MOV R0,DFLIST+10. ;# OF SECTORS TO DEFINE MOV #DFLIST,-(SP) ; ******** EMT  BGT LDER35 MOV R5,DFLIST+6 ;LOAD FILE I.D. INTO LIST MOV HEDBGN+HCPUST,R5;REQUESTED FILE TYPE ;******* BIC #-177-1,R5 ;SUPPRESS IFD REQUEST BIT ;******* CMP R5,#$OVTYP ;IS IT LEGAL FOR AN OVERLAY? BEQ LODL22 ;YES LDER37: INC R4 ;ILLEGAL FILE TYPE LDER36: INC R4 ;"DELETE" ERROR LDER35: INC R4 ;ILLEGAL FILE I.D. LDER34: INILE MOVB HEDBGN+HCPUST,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 IS AN ERROR LODL24: MOV #DFLIST,-(SP) ; R4C,RPCU D AD: C1TPGE CHET FERFT ATSENEMCRINC PCEIN;S 4 ,R#2 V MO ROZEE AS BLEDUMOD OA LOMFRT SEFF OTHWIN URET;R C:TPGE C1TPGE BR ******;*CHET FERFT ANTMERENC IPCE THR FOD AN..;. + 4)(R+,4)(R PBCM ******;* O ER ZLEDUMOD OA LOMFR..;. R4 G NE ******;* ..T.ENEMACPLIS DS"C'RPCU "OR FNTOUCC;A 4 ,RCEPLDS V MO ROZEE BLTACALOREM RO FETFSOFS APCH IT WNSURET;R : CRTPGE ********\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 IS AN ERROR LODL24: MOV #DFLIST,-(SP) ; ******** EMT DEFINE ;GO GET FILE DEFINED ; ******** TSTB DFLIST+2 ;ERROR? BNE LDER33 ;YES .PAGE ;*************** NOW TRANSFER BAC 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 AND EXIT .PAGE LODL22: ;READY TO "DEFINE" ROS FILE MOVB HEDBGN+HCPUST,DFLIST+8. ;LOAD FILE TYPE INTO LIST ;******* MOV ******** 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 DFLIST+6,R2 ;WRITE FILE I.D. LODL30: CLRB TXTR.W************************************************************ ; N RTD AN..;. R5 S RT R4+,P)(S V MO R3+,P)(S V MO R2+,P)(S V MO R1+,P)(S V MO ..S.ERTH ORETOES;R R0+,P)(S V MO R5D DEEENN UOP;P + P)(S T TS GS RRETOES;R : OPGPRE N RTD AN..;. 5)(R P JM P)(S,-R0 V MO P)(S,-R1 V MO P)(S,-R2 V MO . ..STREE AV;S P)(S,-R3 XTCH 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 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 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 IS AN ERROR LODL24: MOV #DFLIST,-(SP) ; ******** EMT DEFINE ;GO GET FILE DEFINED ; ******** TSTB DF ;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 SECTOR NUMBERS CMP R0,TRASEC ;HAVE WEV MO " SR"JY BEDSHPU5 ;R P)(S,-R4 V MO: AVGSRE E AG.P 16S0$P0!0000&116IPPR D OR.W 15S0$P0!0000&115IPPR D OR.W 14S0$P0!0000&114IPPR D OR.W 13S0$P0!0000&113IPPR D OR.W 12S0$P0!0000&112IPPR D OR.W 11S0$P0!0000&111IPPR D OR.W 10S0$P0!0000&110IPPR D OR.W 09S0$P0!0000&109IPPR D OR.W 08S0$P0!0000&108IPPR D OR.W 07S0$P0!0000&107IPPR D OR.W 06S0$P0!0000&106IPPR D OR.W 05S0$P0!T,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 SECTOR NUMBERS CMP R0,TRASEC ;HAVE WE PASSED LAST SECTOR? BLT LODL30 ;MORE SECTORS TO GO ;******* MOV R1,BFSIZE ;# OF SECTORS USED UP IN LOAD MODULE .PAGE ;************** NOW LIST+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 DFLIST+6,R2 ;WRITE FILE I.D. LODL30: CLRB TXTR.W ;SET TO READ MOV R0,TXTSEC ;SET UP READ SECTOR MOV #BTCHI PASSED LAST SECTOR? BLT 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 CLRB IOSTAT(R1) 0000&105IPPR D OR.W 04S0$P0!0000&104IPPR D OR.W 03S0$P0!0000&103IPPR D OR.W 02S0$P0!0000&102IPPR D OR.W 01S0$P0!0000&101IPPR D OR.W Y.OREM MTOIND DEOA LRE AEYTH ; EREVENWHE IZ SUMIMAX MHE TSTUEEQ RSTMUY HE TND AE,IZ SIND XEFI ; RE ANSIOITRTPAR EITH E.ICSLE-IM TOR NEDIX FOT N.,.E IC,MINADY ; ISY ITORRI PHE TIFT SES IIT BGNSIE TH Y.ITORRI PCHEAR FO ; S ZESI" GEPA "ORK OCBLE BLWALOALX MAF OLEAB;T : ABZTBS ******;* PINIT 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 CLRB 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? D,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 SECTOR NUMBERS CMP R0,TRASEC ;HAVE WE PASSED LAST SECTOR? BLT LODL30 ;MORE SECTORS TO GO ;***** 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(R1) ;SHOW TASK IS RE E AG.P ******;* INEG BTOK AC;B 00DALO P JM 40DLLO E BG E?OR;M R0 C DE STLIN IFOINR TOEC SSTPAP UM;B + 1)(R+,1)(R P CM +2MENABF+,1)(R V MO MENAE ULOD MBJ OXTNEH IT WSTLIL IL;F MENABF+,1)(R V MO E ULOD MCTJEOB= E YP;T ATSTBF R CL S OD MBJ OENTH, STIR FLEDUMOD OA LSELO;C OSCLBF T EM L 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(R1) ;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) ;M** 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 CLRB IOSTAT(R1) MOVB (SP)+,BSIZE(R1) ;INIT # "PAGES" IN OVERLAY ASL R1 ;NOW A WORD INADY 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 OBJECT MODULE ELEMENTS T ND.E Y ORCTREDIL BOYM SERADLOF OND;E . = NDDELS E BLTAL BOYM SOR FUST 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 MOV #NAMBUF,R1 ;LIST OF MODULE NAMES LODL40: MOV #BFBLK1,-(SP) EMT BFCLOS ;CLOSE LOAD MODULE FIRST, THEN OBJ MODS CLR BFSTAT ;TYPE = DEX 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(R1) ;SHOW TASK IS READY TO RUN ASR R1 ;RETURN TO BYTE INDEX CMP R1,TASKS O 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 JMP LODA00 ;BACK TO BEGIN CEPA 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 ******************************************DOBJECT 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 JMP LODA00 ;BACK TO BEGIN ;******* .PAGE ;******* BSZTAB: ;TABLE OF MAX ALLOWABLE BLOCK OR "PAGE" SIZES ; FOR EACH PRIORITY. THE SIH;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 OBJECT MODULE ELEMENTS TO CLOSE MOV #NAMBUF,R1 ;LIST OF MODULE NAMES LODL40: MOV #BFBLK1,-(SP)  ;******* .PAGE ;******* 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 .WORD PRIP02&100000!$PS002 ************************** ; 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 FOY OREM;M 0 D OR.W@GN 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 .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&100 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 B .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&100000!$PS015 .WORD PRIPE: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 OR.W: BJROPT E IZ SAMGRRO PNTRE<000!$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&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)UTNP 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;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 P:16&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 MOV (SP)+,R4 RTS UR;C 0 D OR.W: ZESIPR 0 1, E YT.B: ROEZON ******;* K OCBL" XT"TT ENRRCUF OINEG BTOE IVATEL;R 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 ******;* O ER ZOCEL ROMFRT ENEMAC8 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 MOV (SP)+,R4 RTS R5 ;...AND RTN ; ******************************************************************** GETPCR: ;RETURNS WITH PC AS OFFSET FROM RELOCATABLE ZERO MOV DSPLCE,R4 ;ACCNTREUR;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 TINE ACSPT EX;N 0D OR.W : ERNTOILPAITR L BOYM SEDINEF DOR FSD LING INENOPT EX;N 0 D OR.W : MESY LEDUMOA N I6 R5 ;...AND RTN ; ******************************************************************** GETPCR: ;RETURNS WITH PC AS OFFSET FROM RELOCATABLE ZERO MOV #-LDBYTS-100+2,R4 ;ACCOUNT FOR LEAD WORDS IN CURPC... ;******* ;...PLUS 100 BYTES IN INACCESSIBLE HEADER 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 STAPLIS DC"RPCU;" 0 D OR.W: CEPLDS ******;* ROZEE ULOD MADLOE UTOLBS AOMFRE NCTAIS DALICYSPHL UACT AS: IATTH; " 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 "NGRINOIGR FOH TCWI;S 0 D OR.W: CHWIAS OLMBSYT ENRRCUR FOG LA FOCEL/RBS;A 0 D OR.W: ALSVAB ERFFBUN IER4OUNT FOR "CURPC'S" DISPLACEMENT... ;******* NEG R4 ;...FROM LOAD MODULE ZERO ;******* CMPB (R4)+,(R4)+ ;...AND FOR THE PC INCREMENT AFTER FETCH;******* 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 OFFSET,R4 ;OFFSET SPECIFIED WITH RLD COMMAND RTS PC NGDIEA 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 ******;* K OCBL" XT"TT ENRRCUF OINEG BTOE IVATEL;R 0 : ETFSOF T IS LUTNP IINS MENAO TERNTOI;P 0 : TRMPNA Y TTM RO FUTNP I2RT 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 FOR A MODULADHEK 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 ******************************************************************** ; 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 ; ******************************************************************** 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 ; INPUT: R4 POINTS TO RAD50 NAME ; OUTPUT: R4 POINTSESAM 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 ******;* O ER ZOCEL ROMFRT ENEMACPLIS DC"RPCU;" 0 D OR.W: CEPLDS ******;* ROZEE ULOD MADLOE UTOLBS AOMFRE NCTAIS DALICYSPHL UACT AS: IATTH; " PC "VETILAREF OUEAL VNTREUR;C 0 D OR.W C:RPCU E ULOD MINK .E 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 ;NOT YET ,'' 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 0 0,0,0,0,0, E YT.B: AMCNSE '< E YT.B 0 D OR.W, 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 ;NOT FOUND! ADD #2,(SP) ;ALTER RETURN FOR "NOCBLT 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 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 *********************** 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 ;N . 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 [": 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: TE(OT 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! MOV R0,R4 ;NOW POINTS TO LSD ENTRY MOV (S********************************************** ; 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 &O ; 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 MODULE BY LIMITINGNUMI 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 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****$P)+,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 CURRENT OBJECT MODULE ; AREA IN THE LSD. ; INPUT: R4=PRT TO RADOR.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 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 " " 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 OBJ MOD " 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: UMRNER " #ORRR"E IISC.A CR E YT.B 0 D OR.W E AGSSMER ROERN IRSHA C;# -4-.NDNEER: SGRMER E AG.P ******;* ********** 50 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,R0 ;NO: BEGIN @ BEGINNING OF SYMBOL TABLE BR PTGL02RYNT"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 [": 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 ************  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! CMPB #O********************************************************** ; 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 E AGSSME" 1ND"EN IRSHA C;# -4-.ND1END: SG1MND ********************** 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) ;FILTER OUT OBJ MOD NAMES BEQ PTGL04 MOV R0,R4 **************;* 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 ******************************************************************** ; BJMN,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 ;NO MATCH PTGL04: ADD #BPSYM,R0 ;NEXT LSD ENTRY BR PTGL02 ********************************************** ; 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 OR.W: ECASTR 0 0,0, D OR.W A RE AERILRA TOMFRE ITWRS AYLW;A 1 E YT ;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 ;NO MATCH PTGL04: ADD #BPSYM,R0 ;NEXT LSD ENTRY BR PTGL02 ;TRY AGAIN .PAGE GETSEC: ;GET POINTER TO SECTION NAME ; INPU 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: 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;# ;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 .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 T: 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:ERR EXIT ADD #2,(SP) ;"GOOD" RETURN RTS PC ; **** -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-;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 RTS PC ; ******** 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;# 0 D OR.W: NTTCTX XTTEE OTRI/WADREO TORCTSEE IVATEL;R 0 D OR.W: EC**************************************************************** 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 ; ******************************************************************** INUSYM: ;INSERT AN ENTENID 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 ******************************************************************** ************************************************************ 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? TSTX 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;F 0 D OR.W D.I.E IL;F 0 D OR.W RYTOECIR DRECO RY 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 (SP)+,R0 ;O.K. RTS PC .PAGE INSYME: ;INSERT ; 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 ****************** 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)+,(R4)+ JSR PCF 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 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)+,(R4)+ JSR PC,SYMOVF ;OVERFLOW? JSR R5,REGPOP ;RESTORE RTS PC ; ************************************************** ; 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 ,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 MOV PTSECT,R4 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.W: STALTR E AG.P A RE AXTTEO /TOMFRW R/S AYLW;A EDTHTX D OR.W  ******************************************************************** 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 MOV PTSECT,R4 ;PTR TO BEGIN OF CURRENT SECTION INPT01: ADD #BPSYM,R4 ;NEXT (POSSIBLE) SECTION EITWRD/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 * **************************************************;PTR TO BEGIN OF CURRENT SECTION INPT01: ADD #BPSYM,R4 ;NEXT (POSSIBLE) SECTION ENTRY ;[SKIP FIRST ONE: IT IS SECTION'S NAME]. CMP R4,SYME ;DID WE REACH END OF DEFINED SYMBOLS? BHIS INPT02 ;YES: STICK IT IN NOW. CMPB FLAGS+1(R4),#GENTRY ;IS NEXT A GLOBAL SYMBOL ENTRY? BNE INPT02 ;NO: SECTION HAS ENDED: INSERT HERE. ; IT IS STILL IN THIS SECTION: COMPARE WILL DETERMINE ALPHABETICEDRVSERED,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 ELEV,LORRR;E 0 0, E YT.B E ETPLOM C/O;I 0 D OR.W NTRY ;[SKIP FIRST ONE: IT IS SECTION'S NAME]. CMP R4,SYME ;DID WE REACH END OF DEFINED SYMBOLS? BHIS INPT02 ;YES: STICK IT IN NOW. CMPB FLAGS+1(R4),#GENTRY ;IS NEXT A GLOBAL SYMBOL ENTRY? BNE INPT02 ;NO: SECTION HAS ENDED: INSERT HERE. ; IT IS STILL IN THIS SECTION: COMPARE WILL DETERMINE ALPHABETIC ORDER CMP (R4),(R2) ;FIRST HALF-WORDS: BHI INPT02 **************** ; 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  ORDER CMP (R4),(R2) ;FIRST HALF-WORDS: BHI INPT02 ;NEW ONE IS LATER ALPHATETICALLY: BLO INPT01 ;NEW ONE IS EARLIER: KEEP LOOKING CMP 2(R4),2(R2) ;1ST HALVES EQUAL: COMPARE 2ND HALVES BLOS INPT01 ;STILL LOWER: TRY AGAIN INPT02: ;TIME TO INSERT ENTRY INTO LSD CMP R4,PTROBJ ;IF INSERTING BELOW OBJ MOD POINTER... BHI INPT03 ADD #BPSYM,PTROBJ ;...MUST 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 YT.B STLID EA RLEDUMOT ECBJ;O 1 D OR.W: STJLOB ******************** ;NEW ONE IS LATER ALPHATETICALLY: BLO INPT01 ;NEW ONE IS EARLIER: KEEP LOOKING CMP 2(R4),2(R2) ;1ST HALVES EQUAL: COMPARE 2ND HALVES BLOS INPT01 ;STILL LOWER: TRY AGAIN INPT02: ;TIME TO INSERT ENTRY INTO LSD CMP R4,PTROBJ ;IF INSERTING BELOW OBJ MOD POINTER... BHI INPT03 ADD #BPSYM,PTROBJ ;...MUST ADVANCE IT ALONG WITH OTHERS INPT03: BR INSY01 ;GO INSERT AT R4 .PEDRVSERED,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  ADVANCE IT ALONG WITH OTHERS INPT03: BR INSY01 ;GO INSERT AT R4 .PAGE UNSQUISH: ;MAKE A HOLE IN TABLE. R4 POINTS TO DESIRED HOLE LOC'N MOV R0,-(SP) MOV R1,-(SP) MOV USYME,R0 ;START @ TOP ENTRY... MOV R0,R1 ADD #BPSYM,R1 ;...AND EXPAND UPWARD UNSQ01: CMP R0,R4 ;ARE WE DOWN TO DESIRED LOC'N YET? BHI UNSQ02 ;NOT YET: MOVE ANOTHER ONE MOV (SP)+,R1 MOV ************************************************ ; 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 ******;* ******;* A RE ACHAT;P 0 10 W AGE UNSQUISH: ;MAKE A HOLE IN TABLE. R4 POINTS TO DESIRED HOLE LOC'N MOV R0,-(SP) MOV R1,-(SP) MOV USYME,R0 ;START @ TOP ENTRY... MOV R0,R1 ADD #BPSYM,R1 ;...AND EXPAND UPWARD UNSQ01: CMP R0,R4 ;ARE WE DOWN TO DESIRED LOC'N YET? BHI UNSQ02 ;NOT YET: MOVE ANOTHER ONE MOV (SP)+,R1 MOV (SP)+,R0 ADD #BPSYM,SYME ;BUMP BOTH POINTERS ADD #BPSYM,USY 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  (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,REGSAV MOV R4,R0 LK.B ******;* E AG.P ******;* 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 MME RTS PC UNSQ02: MOV -(R0),-(R1) ;BLOCK MOVE MOV -(R0),-(R1) MOV -(R0),-(R1) MOV -(R0),-(R1) MOV -(R0),-(R1) BR UNSQ01 ; ******************************************************************** SQUISH: ;REMOVE ENTRY POINTED TO BY R4 FROM THE UNDEF'D TABLE JSR R5,REGSAV MOV R4,R0 MOV #BPSYM,R1 ;ELEMENT SIZE ADD R1,R0 ;STAYS ONE E 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  MOV #BPSYM,R1 ;ELEMENT SIZE ADD R1,R0 ;STAYS ONE ELEMENT ABOVE R1 ASR R1 ;USE BELOW AS COUNTER SQUI01: CMP R0,USYME ;REACHED TOP OF TABLE? BHIS SQUI04 ;YES: EXIT SQUI02: MOV R1,R2 ;COUNTER=# WORDS PER SYMBOL SQUI03: MOV (R0)+,(R4)+ ;BLOCK TRANSFER DEC R2 BGT SQUI03 ;STILL IN BLOCK BR SQUI01 SQUI04: JSR R5,REGPOP SUORRR 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 ****LEMENT ABOVE R1 ASR R1 ;USE BELOW AS COUNTER SQUI01: CMP R0,USYME ;REACHED TOP OF TABLE? BHIS SQUI04 ;YES: EXIT SQUI02: MOV R1,R2 ;COUNTER=# WORDS PER SYMBOL SQUI03: MOV (R0)+,(R4)+ ;BLOCK TRANSFER DEC R2 BGT SQUI03 ;STILL IN BLOCK BR SQUI01 SQUI04: JSR R5,REGPOP SUB #BPSYM,USYME ;ADJUST POINTER TO BEGIN OF UNDEFINEDS RTS PC .P 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 B #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 SECTCT ;WANT ONE EXTR**************************************************************** ; 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 AGE NXTMOD: ;ROUTINE SETS UP PARAMETERS TO READ NEXT OBJ MODULE DEC NAMCTR ;MORE MODULES? BLT NXTM30 ;NO MORE: TAKE "DONE" EXIT CLR BLOCK1 ;FLAGS FIRST BLOCK IN MODULE MOV NAMPTR,R0 MOV 4(R0),OBJSEC ;START SECTOR # MOV 6(R0),SECTCT ;SECTOR COUNT INC SECTCT ;WANT ONE EXTRA SECTOR ON LAST READ ADD #8.,NAMPTR ;ADVANCE TO NEXT NAME MOV 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 ******************************A 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 ; THE FINAL SECTOR IN THE MODU ) 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 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 ; ****************************! #OBJBK2,BLKPTR ;INIT BLOCK POINTER TO FORCE FIRST READ ADD #2,(SP) ;BUMP TO TAKE "GOOD" EXIT NXTM30: RTS PC >*'*'''' ;"NEXT BLOCK": SUBROUTINE READS IN SECTORS UNTIL ; AT LEAST ONE BYTE OF NEXT BLOCK IS IN UPPER HALF OF THE ; TWO-SECTOR BUFFER. ONE ADDITIONAL SECTOR IS READ AFTER ; THE FINAL SECTOR IN THE MODULE TO FORCE THE LAST BLOCK************************************** ; 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 #LE 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 MODULE? BLT NXTB90**************************************** ; 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 ******;* 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 ******;* % ; 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 MODULE? BLT NXTB90 ;NO MORE: GO IN 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 ; ******************************************************' ;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 MOV BLKPTR,R0 CKLO BXTTET EX NOFN GIBER FOC ;P R3+,P)(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 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 WNT)IT 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 MOV BLKPTR,R0 MOV #OBJBK2,R1************** ; 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 ******;* 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 GIBE+ 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 BR NXTB10 SQUB 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 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 - ;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 BR NXTB10 ;...AND GO MOVE NEXTR FOC ;P R3+,P)(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 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 F/ ;...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 BYTE COUNT TSTB 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)(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 1 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 BYTE COUNT TSTB (R0)+ ;UPPER BET;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 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 TI3 (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,R2 ;ACCUM CHECKSUM 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 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 5YTE 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,R2 ;ACCUM CHECKSUM DEC R1 EX,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)(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 7 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 BIT #1,R0 ;IS 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, #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 9 ;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 BIT #1,R0 ;IS ADDR OF FIRST DATA BYTE OD 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 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 TEITWR;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) ;BUMP FOR "GOOD" RETUR 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 ******************************************************************** ; R LEAL CUR OTON URET RENTHL IL WCHHI;W ******;* PC S RT ******;* =D? 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) ;BUMP FOR "GOOD" RETURN NXTB80: RTS PC ; E 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, #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 ?N 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 SUBPUT: ADDPUT: ;******* TXTPUT: ;SUBROUTINE TO PUT LINKED BY T PRRR,EPC R JS ******;* ORRR EONTICALOREE YT;B 4 ,R0000105+#2 V MO: 25ERLD 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 KEIN L ARESUE BTOE AD MISK ECCH ******************************************************************** 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 SUBPUT: ADDPUT: ;******* TXTPUT: ;SUBROUTINE TO PUT LINKED BYTE OR WORD INTO TEXT. ; 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 ******************************************************************** ; R LEAL CUR OTON URET RENTHL IL WCHHI;W ******;* PC S RT ******;* T PRRR,EPCTE OR WORD INTO TEXT. ; CHECK IS MADE TO BE SURE A LINKED BYTE DID NOT OVERFLOW 8 BITS. MOVB R4,(R3)+ ;PLACE FIRST BYTE INTO TEXT TST R2 ;COMMAND BMI TXTP20 ;BYTE SWAB R4 MOVB R4,(R3)+ ;LOAD UPPER BYTE TXTP10: RTS PC TXTP20: SWAB R4 BEQ TXTP10 ;UPPER BYTE HAD TO BE ZERO LDER25: MOV #25+100000,R4 ;BYTE RELOCATION ERROR ;******* JSR