NEXT TEXT BLOCK SUB R4,R3 ;GET OFFSET FROM TOP OF TEXT AREA ADD #TXTBK1,R3 MOV DDm÷ Àå ,$ DQ$÷ 4o÷ îÀåwÎþ÷ x Ddò,H÷ ØóU€þÿÀåñ÷ ^DQ$÷ üSÄàï~Z� MOV #64.,TXTCNT ;WANT TO WRITE ONLY ONE SECTOR MOVB #1,TXTR.W ;WRITE MOV #TXTLS h÷#*v2ø î ÷ ÕÄ÷ n ÷ ‚ ñµ ÷ ~ *š2÷å à D÷Ê Ä ÷ ä¾­ 7² 1-<*¾2´†t  R3,TXTPTR ;ACTUAL POINTER TO NEXT OPEN TEXT WORD TXTO50: TST (SP)+ ;POP SAVED PC RTS PC ,lÀåäD÷ êJQ$Dd÷  ÀåØ÷ ,†,�&D÷ Ì;Q$Dd„åÀåÊDQ$÷  47›, ˜~Ò� T,-(SP) EMT DISCIO ;WRITE OUT FINAL TEXT SECTOR MOV #207,@TRAILPOINTER ;[RTS PC] IN°Ä÷ $ ñµ÷ 0ôµ‡*â2ôÕñÕ÷ ÷å € D÷ ¶^*3‘÷ �÷ `Š÷? æ< ˆ7 @  .PAGE LPCALL: ;COMMON ROUTINE TO MAKE EMT TO LINE PRINTER MOV #MAPLST,-(SP) EMT ´¶ Àå7 Ž W-· ‚ DDdÄe7W,Ø~ ÷mœ ž 7 – Àå©É¥¦É¥£ Ë-,üh “ ÷ "÷eX  ~J�TO FINAL TRAILER WRD MOV #TRALST,-(SP) ;LIST FOR TRAILER EMT DISCIO ;WRITE OUT FINAL TRAÀ,Ae**37: Àe 7 8 .†œœW Á òµÙ*N3 0 0  Ä„ C ðü ÷`ö 7 0r3ø ݵ  LPRNTR ;LINE PRINTER RTS PC ; ******************************************************************÷ –Ö Ä÷ ÜÄ÷ �. ÔÄ÷ Ì÷@>÷•/æ: ˆÿ‡0 æH Ã: (H ,Fˆ÷*§~Â�ILER SECTOR MOV TRSCSV,TXTSEC ;INIT TO READ IN FIRST TRAILER SECTOR CLRB TXTR.W ;READ  Ãì ð0lÑ0Í÷z?œ¤*œ3÷ 0À,A7 ¾ Àe 7 ¾ N†œÁ 'W **À3óæ@&'ˆÃ@÷ ÷• ** ; SUBROUTINE "BINARY TO OCTAL ASCII CONVERSION" ; INPUT: R4 = BINARY NUMBER ;  7Šæ: ˆÀ € Àe!ŠÀ€ &ï : ˜0jÁø� Áe!ŠÁ� @àÁÐÀp PÈ ·Š×æ: •/~:‘ MOV #TXTLST,-(SP) EMT DISCIO ;READ FIRST TRAILER SECTOR MOV TRAPC,R0 . ¼“*ä3÷•M ÷@F÷ ÚÙæ¸?&'ˆ÷š?2÷ f*4ÆÏæå?&'ˆÃô?÷ ¸DÃû?÷ }*,4ªB R3 = DESTINATION END ADDRESS ; R2 = ITERATION LENGTH (IF ENTER @"B2ONTA") BIN2OC: MOp *: ã,’ˆÄ÷¶Î7ŠÃæ: ˆÀv œW s¤: v ñ.¶W p — jò‹ð ¶~²‘!;BYTES IN PROGRAM PLUS TRAILER ASR R0 ;# WORDS ADD #LEDWDS+PHDSZE,R0 ;TOTAL WORDS"‚ A w`. Ä* Ã@÷ ”÷à?î÷ ‚­d*P4÷- * ÷@Ú÷ n÷D@ÐæH@&'ˆ÷ \Ç*t4Àe 7  õ‡÷6?˜æ< ˆÀØ À € #V #6,R2 ;INIT ITERATION LENGTH (NORMAL 6 CHARS) B2ONTA: ;ENTER HERE WHEN PRE-SETTING ITERATION LENGTH $ cw w³”f�";}¸G(;}¸Gn,ÜÃV W!TsœW!Lsň¨%>~*’& FROM TOP OF HEADER CLRB R0 ;GETTING # OF PAGES SWAB R0 ;# CORE "PAGES" -1'ÀE€€ ú*˜4€ € € € € € 7à 7Ê À À À À À À À 7œ*¼4²$7° 7 ´ ÷Š ÷v<ª ÷z ’÷€Ž‰*à4÷x x ( MOVB R4,-(R3) ;ALSO LOOP RETURN FOR NEXT OCTAL DIGIT BICB #370,(R3) ;LEAVE ONLY LEAST SI) V ˆ,ÅíN… s æ)ˆó‹A±�ñÀþ’è€ 49»"$ÀU€11Š1б•*Å~¢’+ INC R0 ;# OF CORE PAGES MOV R0,-(SP) ;SAVE FOR USE BELOW MOV PRSI,÷‚@t ÷�>€ ÷ FT÷ :[kúV*5÷n 7 l À !÷ DÂ^ —  z&5ø4B*(5Ö5´5ø4Ä ÷ À÷ 82@Bà Âå-GNIFICANT THREE BITS BISB #060,(R3) ;CHANGE TO ASCII CODE ASR R4 ;BEGIN SHIFTING .Á 1 . 49 €` «:<}�H£É2Úï,>À Â7Š7÷€ æ: ˆ÷ âç/M~“0ZE,R1 ASR R1 ;WORDS IN PGM ONLY ADD #LEDWDS+PHDSZE,R1 ;# WORDS IN PGM PLUS HEADE1öÂEï*L5üÿ Ž`‡B”*�C”ã(÷ Ãm Å — v*p5÷ Ú — Ë z‚5¤56(6@6Z6t6Œ6¨6Ì6å*”5ø6(6Ê2Z62FOR NEXT OCTAL DIGIT BIC #100000,R4 ;PREVENT SIGN PROPAGATION ASR R4 ASR R4 3 : Œ.bw·ø·Š÷æ: ˆ÷ Ê ¤7 ã÷P”: &P,ˆæ ˆˆ„ „ „ „ „4Ô~’“5R CLRB R1 ;256 WORDS/PAGE [PDP-11/20] SWAB R1 ;# PAGES -1 (EXCLUDING TRAIL6t6Œ6w†Ä÷ JÄ÷ B° ‚*¸5ÂeÂe · ¬ 톗¢øÂå·” Ž÷ t ލ*Ü5(7˜ ˜ À R”ü7 † ÷ @ÿ¬ø7 DEC R2 ;MORE ASCII DIGITS TO GO? BGT B2ONTA ;BACK FOR MORE RTS PC 8 „ &÷ T&æ¦f&™  Î,¬MÖ €�‚ƒ„…ĘÄmžÔ ‡×-´"ƒ= $"•,9\~ ”;ER) INC R1 ;# PAGES (EXCLUDING TRAILER) SUB R1,R0 ;# PAGES FREE TO RELEASE AX÷ *6t †÷l ‚Ä÷ àDDm÷ Àåà*$6 DQ$÷ 4o÷ îÀåwÎþ÷ x DdÇ*H6÷ ØóU€< ;ASCII BUFFER FILLED: RETURN ; ******************************************************************** ERRPRT: =ÐÄ÷ ‡&À,7 Œ‡€Îe‡ð¥¹ ,¡0ôÀe ò#û0-÷€‡&]À,6>ã~‚”?ŠšŠš¦Šš ±Œ:E*Ššæº›ˆæ°›ˆæÒ›ˆæì›æº›ˆæÞ›æ°›ç*®šˆæ œæÒ›ˆæ€œæº›ˆæº›ˆ@FTER RELOCAT'N SWAB R1 BISB R0,R1 ;BYTE 0 = # PAGES TO RELEASE... MOV #TXTBK1,A ;ERROR MESSAGE PRINTING ROUTINE ; R4 ALREADY INITED WITH BINARY ERROR NUMBER MOV #ERRNUM+2,R3 B *,‰, ÀF7 Z‡€‡# 0- ð¥Ù,@ €Îe‡Àe é÷ ºÿ‡ô¥ûÎe‡qCkDæ*œæ°›‡,Òšˆæ°›ˆ÷µ@M0ˆæœ.ˆÖ áæœ/ˆæÄ›+*øšˆæú›æÄ›ˆ÷•”÷ ¾÷•ˆ÷~€"*›÷-ER0 MOV R1,(R0)+ ;...BYTE 1 = FIRST FREE PAGE MOV #240,(R0) ;NOP KEEPS BOUNDARY @ MULTIPF ;LAST CHAR IN ASCII BUFFER MOV #3,R2 ;A 3-CHAR MESSAGE NUMBERR JSR PC,B2ONTA ;USEG,d ÷ ¦ÿ‡Îe‡&À÷e ø:,ˆ ÷ <ÿ€‡w ÿÄÖ÷ V÷e Ì÷e Ö”,¬H~ú”Iªò÷þr朜æÄ›ˆæÄ›ˆÀ¬œÂã*@›^'‚ †‚ ÃÁ¬ž&fæ"ˆÁeÑ• Ó.d›Â à óÑ• Ñ• Á嬞w*æJLE OF 4. INCB TXTR.W ;WRITE MOV #TXTLST,-(SP) EMT DISCIO ;WRITE OUT MK SECONDARY ENTRY POINT TO CONVERSION MOV #ERRMSG,TTYBUF ;INIT FOR PRINTING ERROR MESSAGE MOV #TTYLSL ”””÷ ÿw ôþ‡w âþĦÄe 7!¢ †U,Ð ­ #‚ô‡2-ðƒ7!~‚÷e vÓ,ô &fÀ„Áe Mó~r•N¤œæÒ›ˆæÒ› *Œ›ˆÂ Ü÷µ@ÈæÒ›ˆæÄ›ˆæÄ›ˆ�`*°›EEEEæ*Ô›OODIFIED FIRST TRAILER BLOCK .PAGE ;NOW DEFINE A "ROS" FILE FOR THE LOAD MODULE, OUTPUT IT, AND INIT ; THE NECESSPT,-(SP) EMT TTYOUT ;REQUEST MESSAGE EMT EXIT ;CURRENTLY ALL ERRORS TERMINATE LOQ ‚�€‡!!!!!õ, w †þÁ @`� 7 V†B ýøw tþ‡“2< ÷ 7 À7*7· ÷Rz~ê•S€M€MÅ*ø› œÄ›ú›TœPÛTARY TABLES TO RUN THE FILE AS AN OVERLAY TASK. MOV #30,R4 ;INIT ERROR NUMBER MOV BGNSEC,TXTUADER .PAGE TTYLST: .WORD 1 ;TELETYPE I/O LIST .BYTE 0,2 ;DEVICE: TTY #1; CALVe÷þ î¬ *þ »,f Îe‡÷ ÌÿM÷dò×-Øþ ‡÷ êóæ †dþ & ë,W~b–!€œOCTAL DUMP V001A # "œœ¬œ„¬ž•ŠšÕYSEC ;SET TO READ IN TASK HEADER INFO CLRB TXTR.W ;READ MOV #TXTLST,-(SP) EMT ZL TYPE: SUSPEND .WORD 0 ;I/O COMPLETE .BYTE 0,0 ;ERROR,LEVEL .WORD [Š ˆ÷ –>· ä÷倸À´Áþ à÷d¼kþ $d,,® Á 7žä?¤®õ· ¨÷5¢ò”Ћ#Š\‰~Ú–]þÿÀåñ÷ ^DQ$÷ üSÄàÄ*l6ÀåäD÷ êJQ$Dd÷  ÀåØ÷ ,[*�6&D÷ Ì;Q$Dd„åÀåÊDQ$÷  47^ DISCIO ;READ IN FIRST SECTOR MOV #LEDWDS*2+TXTBK1,R0 ;POINTER TO FIRST WORD OF HEADER MO_ 0,0 ;RESERVED TTYBUF: .WORD 0 ;DATA BUFFER OBJLST: .WORD 1 ;OBJECT MODULE R`,Ò BÁåwt”Â`Á ü‚Š7h@À5Ãe,ö X0”þÿà ü@À ÅHÎe‡Ä÷ àÄH, ÷ Øa~R—bp*´6¶ Àå7 Ž W-· ‚ DDdÄe7,*Ø6~ ÷mœ ž 7 – Àå©É¥¦É¥£ Ë*ü6h “ ÷ "÷ecVB HTASK(R0),R1 ;TASK # CMP R1,#TASMAX ;WITHIN LIMITS? BGT LDER30 ;OUTSIDE TASdEAD LIST .BYTE 1,2 ;DISC: SUSPEND .WORD 0 .BYTE 0,3 ;ERR TASK, DISC eÄ÷ Ð÷eHÃBÓw`÷ „ýÄí8$)Ø,> × Ì‡æH ˆ· 8ÃŒ÷‡÷mø÷mÌH Œðf˜~Ê—gX ÷ –Ö Ä÷ ÜÄ÷ e, 7ÔÄ÷ Ì÷@>÷•/æ:<ˆÿ‡0 æH<8*F7ˆ÷* 7Šæ:<ˆÀ € Àe!ŠÀ€ &hK LIMITS CMP R1,#OVTMIN BLT LDER30 MOV HPRIOR(R0),R2 ;PRIORITY CMP R2,#iREQUEST PRIORITY OBJERR: .WORD 0,0 ;ERROR WORD, RESERVED .WORD OBJHED ;DATA BUFFER MAj,b æîÄ„#‡Äe€„#)‡÷•åæ: ˆÂ $: †.† ƒƒ ÃE€ƒ ƒ ƒ ƒ ƒ ƒ ÄÃm²÷È7нæ: îk ~B˜l”.j7Áø� Áe!ŠÁ� @àÁÐÀp8À Â7Š7÷€ æ:<ˆ÷ âŒ,b8w·ø·Š÷æ:<ˆwIFIED BLE LDER32 LODL10: CMP R1,TASKS ;TASKS = MAX[TASKS,TASKNO] BLE LODL20 MOx.WORD 0 ;DATA BUFFER: CHOSEN DURING RUN TXTLST: .WORD 1 ;LIST FOR TRANSFERS TO/FROM TEXT Ayh 6, p  p c,B b ~z¶~ª™{÷ Ê ¤7 ã÷P?”‹*ˆ8æ< ˆˆ„ „ „ „ „ „ &÷ T&æ¦f&>*¬8MÖ €�‚ƒ„…ĘÄmžÔ ‡×-´"Eƒâ|V R1,TASKS LODL20: MOV #DFLIST,R3 ;POINTER TO "DEFINE" LIST MOV HSTACK(R0),R5 ;FILE I.D. }REA .BYTE 1,2 ;DISC; SUSPEND .WORD 0 .BYTE 0,3 ;ERROR,LEVEL ~€b ~Óf x ð í p lp €>~"š€*Ð8Ä÷ ‡&À,A7 Œ‡€Îe‡ð¥^.ô8Àe ò#û0-÷€‡&]À,AÛ*9ÀF7 � CMP R5,#NDISCS+$SYSFL;MUST BE GREATER THAN SYSTEM RESERVED BLE LDER35 ;FILE I.D. ILLEGAL ‚ .WORD 0,0 ;RESERVED .WORD TXTHED ;ALWAYS R/W FROM/TO TEXT AREA TRALST: .WORD 1 ƒ€i þ Þ ~]~€@™  Î,  ROSLOD „Å~šš…Z‡€‡# 0- ð¥®*@9€Îe‡Àe é÷ ºÿ‡ô¥ûÎe‡F*d9÷ ¦ÿ‡Îe‡&À÷e †MOV R5,6(R3) ;LOAD FILE I.D. INTO LIST MOVB HSTATS(R0),R5 ;REQUESTED FILE TYPE CMP R5,#‡ ;LIST FOR TRAILER .BYTE 1,2 ;DISC,SUSPEND .WORD 0 .BYTE 0,3 ˆIIA # ROSLOD PASS #ö,01 END  ROSLOD PASS #2 BEGIN ô,T ROSLOD PASS #2 END ERRO‰M~›Šø*ˆ9÷ <ÿ€‡w ÿÄÖ÷ V÷e Ì÷e Ö”è*¬9”””÷ ÿw ôþ‡w âþĦÄe 7!¢ †**Ð9­ #‹$OVTYP ;IS IT LEGAL FOR AN OVERLAY? BNE LDER36 ;NO MOV R5,8.(R3) ;LOAD INTO "DEŒ ;ERROR;LEVEL .WORD 0,0 .WORD TRAHED ;DATA BUFFER .PAGE DFLIST: .WORD 1 �R # ¶ x _ z`,z **** ROSLOD LOAD MAP **** A),ž******ŽÔ~Š›�‚ô‡2-ðƒ7!~‚÷e vÓÚ*ô9&fÀ„Áe  ‚�€‡!!!!!õæ*:w †þÁ @`� 7 V†B ýøw tþ‡�FINE FILE" LIST MOV TRASEC,R5 ;# OF FINAL SECTOR WRITTEN SUB BGNSEC,R5 ;GET # OF SECTOR‘ ;"DEFINE FILE" LIST .BYTE 0,0 ;ERROR,ERRTSK .WORD 0 ;IFD: RETURNED’**** MODULE TITLE: "" SEÍ%ÂCTION ENTRY OFFSET SIZE TOTALM àú,à<“\”h0<:÷ 7 À7*7· ÷e÷þ=îQ*f:Îe‡÷ ÌÿM÷d@ò×-Øþ=‡÷ êóæ<Ë*Š:ˆ÷ –•S -1 INC R5 ;# OF SECTORS IN FILE MOV R5,10.(R3) ;# OF SECTORS TO DEFINE – IF CORE DIRECTORY .WORD 0 ;FILE I.D. .WORD 0 ;FILE TYPE .WORD 0 —>  , !******V#(**** UNDEFINED REFERENCES ˜~œ™>· ä÷倸À´Áþ=à÷d@¼à*®:Á 7žä?¤®õ· ¨÷5¢ò”Ћ#_*Ò:BÁåwt”Â`Á ü‚Š7h@À5š MOV R3,-(SP) EMT DEFINE ;GO GET FILE DEFINED TSTB 2(R3) ;ERROR? BN› ;# SECTORS IN FILE ; ******************************************************************** TXTHED: œG D•,Du"hb�ã~zœžÃ:*ö:X0”þÿà ü@À ÅHÎe‡Ä÷ àÄ*;÷ ØÄ÷ Ð÷eHÃBÓw`÷ „ýÄí8$)­*>;× Ì>‡ŸE LDER33 ;YES MOVB R2,TPRTY(R1) ;PRIORITY MOV 6(R3),IFD(R1) ;INIT FILE I.D.  ;HEADER FOR TEXT SAVE BUFFER READ/WRITE OPERATIONS .WORD BTCHID ;FILE I.D. FOR BATCH FILE .BYTE ¡ "¶"Œ+ ,¨ó¢k~òœ£æH<ˆ· 8ÃŒ>÷‡÷mø÷m_*b;æîÄ„#‡Äe€„#)‡÷•åæ:<ˆg,†;ƒƒ ÃE€ƒ ƒ ƒ ƒ ƒ ƒ ÄÃm²÷È7н¤ MOV 4(R3),R0 ;IFD WORD BEQ LODL25 ;NO IFD RETURNED: LEAVE FILE I.D. BIS #1¥ 0 ;RELATIVE SECTOR TXTR.W: .BYTE 0 ;TEXT READ/WRITE BYTE .WORD 0,0,0 TXTSEC: .W¦§ó~j�¨æ:<“.¬;ˆÄ Ä Ä Ä Ä Ä Ä 7¼ƒáÃep<÷²Ö ‡æ,<Á,Ô;ˆ‡Â#‘ËÅøËÕ0„ ÄE€„ „  ô‡Ãw?£*ú;©00000,R0 ;SHOW IFD RATHER THAN FILE I.D. MOV R0,IFD(R1) ;USE RATHER THAN FILE I.D. LODL25: CLRB TSªORD 0 ;RELATIVE SECTOR TO READ/WRIOTE TEXT TXTCNT: .WORD 0 ;# WORDS TO TRANSFER EACH TIME «¬z~â�­÷ Úÿ÷h?æ< ˆˆ½*<p=º*B<b<~>®TAT(R1) ;TASK STATUS CLRB IOSTAT(R1) MOVB (SP)+,BSIZE(R1) ;INIT # "PAGES" IN OVERLAY AS¯TXTBK1: .=.+128. ;FIRST TEXT SAVE BLOCK TXTBK2: .=.+128. ;SECOND TEXT SAVE BLOCK ; ******°±~Zž²€uf<Mp=€€>~>€@n* ? ROSLOD IIA # R³L R1 ;NOW A WORD INDEX CLR HEADER(R1) ;SHOW READY TO RUN MOV BGNSEC,R0 ´************************************************************** OBJHED: ;HEADER FOR READING OBJECT MODULES ¶‰~Òž·OSLOD PASS #Ë*0?1 END  ROSLOD PASS #2 BEGIN É*T? ROSLOD PASS #2 END ERROR # ‹x?¸;INIT RELATIVE READ SECTOR # CLR R1 ;INIT RELATIVE WRITE SECTOR MOV 6(R3),R2 ;W¹.WORD BTCHID ;FILE I.D. FOR BATCH FILE .BYTE 0 ;RELATIVE SECTOR .BYTE 0 ºÑÁ‚Ð*Œr·£É  ·­»·­°Ñ BÆeÛ*°r�‚¦÷ (Ž-ô ¶-ï¶- é*ÔrêÆe»‡ÿÿÿÿÿÿÿÿªŸÆ¦)ÅÅeL{~JŸ Îxÿ ‡ ¡N N Í ÃŠüÍ ÷ <ÂåÂ%!÷ ,„c¼ 4*z? **** ROSLOD LOAD MAP **** Aþ*ž?********** MODULE TITLE: "" SE¢#Â?CTION ENTR½RITE FILE I.D. LODL30: CLRB TXTR.W ;SET TO READ MOV R0,TXTSEC ;SET UP READ SECTOR MO¾ ;READ/WRITE FLAG .WORD 0,0,0 OBJSEC: .WORD 0 ;RELATIVE SECTOR NUMBER .WORD 12¿Æe ˆšæ ¦ƒÅöEÀÿ¼*ørà à ÃÃEàÿöÅ… … … ÅEàÿv‡…Ã�²*s;Õ`Ã�1Õ`Ã�*Í`Í%<Íå<µ þÿå%ÀÍ À‹ëéÑ�øÃh‹ŠË‹þ€ÃœÀ`ÃEÿ ‡·$Í ÄÍ ÃÄPÇ÷ êÿÍ �DŸÀ‹â„ †¿Ä LÀŸ÷ê÷õwZÿÁÂê‰ É‹þ€ÁY OFFSET SIZE TOTAL"*à?<> â*@ !******+ÂV #BTCHID,TXTHED ;SET UP READ I.D. MOV #TXTLST,-(SP) EMT DISCIO ;READ A SECTOR Ã8. ;ALWAYS READ IN TWO SECTORS OBJBK1: .=.+128. ;FIRST BLOCK FOR OBJECT DATA OBJBK2: .=.+128. ÄI*@sÍåŽ Ã�ÜEtÎ ÎàÎÎ Î Î ö¶ €*ds¶ ŽUŽU°‡¦ö†Œ&÷à|Œ×-”DtÊ*ˆs†€ðErœŸ· îÿõpÿÈhÉÆ!(@**** UNDEFINED REFERENCES *D@J h@Ç TST TXTLST+8. ;ERROR? BNE LDER34 MOV R1,TXTSEC ;SET UP WRITE SECTOR MOÈ ;SECOND BLOCK FOR OBJECT DATA ; ******************************************************************** TRÉÈ Èe÷et?p6 m*¬sÈ €¦öDŒw tä€÷à4ŒÈ%x,ÐsÈ%ÿÿÅÁtBA  ûJÉ6 Êv;v;ºCî{ ±Œ:“v;ûÿûÿPðŠ[*Œ{EË7"AŒ*,E @€€@–,PE÷à”ºÆ,EæÌV R2,TXTHED ;WRITE FILE I.D. INCB TXTR.W ;SET TO WRITE MOV #TXTLST,-(SP) ÍAHED: ;HEADER FOR TRAILER WRITES .WORD BTCHID ;FILE I.D. FOR BATCH FILE .BYTE 0 TRARÎw JäG,ösÁtÅ ïøðUòtttttOtgFtGÿs*\t&€ÏE *°{  ˆ;i*Ô{ ˆ;Š[æŽ{ˆæ¦{æ*ø{ˆæÐšºæ˜º"vE÷ ¸&·�º·Šº÷ T'÷NX»÷€»Ã$’E÷P]„º÷à€º÷”Wtº÷àpº÷Ìu�º*°E÷àŒºÁ€÷êIpºwnºÑ EMT DISCIO ;WRITE A SECTOR TST TXTLST+8. ;ERROR? BNE LDER34 CMPB Ò.W: .BYTE 1 ;ALWAYS WRITE FROM TRAILER AREA .WORD 0,0,0 TRASEC: .WORD 0 ;TRAILERÓö˜‹ <†—-‡€÷à~‹*€t7�Ðÿ·�Ëÿ÷Âÿ6 ðw šã€Àe6,¤tàT‹ üÿ× 0‚÷•�ÿ÷mHüÁ5Ô\~æŽ{ˆæ|~æŽ{ˆæŽ{ˆæ‚;æ¦{�,|ˆæ¦{ˆ÷ Ží7�•ÿæ”~æŽ{ˆæŽ{ˆæ‚;S,B|æ¦{ˆæ¦{ˆ÷ dí7 kÿ÷ nÕ÷¨Gjºwhº÷NU°º_ ÔE÷ ¬º÷ Z÷ |÷ z/÷ 4÷ êÔ$îE÷ Â=÷ @DÁñ•k_1ŠK_Á ñdX*_~ F      Ö(R0)+,(R1)+ ;BUMP BOTH SECTOR NUMBERS CMP R0,TRASEC ;HAVE WE PASSED LAST SECTOR? BLE LODL× SECTOR NUMBER .WORD 64. ;WRITE ONE SECTOR AT A TIME TRAILBLOCK: .=.+128. ;TRAILER BUILDØ·Š}ÿ0,Êt· :ü³ Et‡ÂœEtæÀFt à ”Daû„`ÃVtÈ.ðt÷à‹‹÷tÿÓµ÷eÿ“�K�6 w (ãÅÙç7�iÿæ,h|æŽ{ˆæŽ{ˆæ‚;æ¦{ˆæ¦{ˆ7 î¾÷¥Yú¾5*Ž|· â¾æ¦{ˆæ¾{ˆæÈ{ˆ7 &ÿ7 ,ÿ7 2ÿé*²|ÚwX`Fpÿ€àˆà�à˜à à¨à°àÐFtÿ„àŒà”àœà¤à¬à´à® Frÿ‚àŠà’àšà¢àªà²à¼"Fvÿ†àŽà–àžà¦à®à¶àšÛ30 ;MORE SECTORS TO GO .PAGE MOV #ND2MSG,TTYBUF ;"PASS 2 END" MESSAGE MOV #TTYÜ AREA: OUTPUT WHEN FULL .PAGE IDMSG: IDEND-.-4 ;# CHARS IN I.D. MESSAGE .WORD 0 Ý,uÖ ¡±æØŠ÷àÒŠÆå VÖ €$ÁXtÙ(>uÎ5ÁSt& H” H” H”¦)€�.*`uÀ®o7DúÁ%Þw(À�ξÀå0� Îe‡æ¨~æŽ{ˆ*Ö|æŽ{ˆ‡÷Ö{”¾÷ìþæÐ{æ¾{ˆæ¾{ˆÿ*ú|7 €¾w í÷ÌþæÐ{æÈ{ˆß"$F6FBFNFZFfFrF~FŠFB2FBFNFZFfFrF~FŠF–Fá4FNFZFfFrF~FŠF–F¢F*6F3ZFàLST,-(SP) EMT TTYOUT EMT EXIT ;****** E N D O F L O A D E R****** LDER36: INC á .BYTE CR .ASCII "ROSLOD IIA" .BYTE CR,'# IDEND: .EVEN ; **********************************â Á ýÀöoÁ1øoà Á Á S(„uúÀ(pÁ1˜)pÁ ü÷•ÿÿžú÷•ÿÿ¹þ7Š•ú®¦u7 bþ÷t^þ÷tdþC¶u7 Pþ÷’þãæÈ{ˆ· `¾Ï,}w ðð÷ N¾w‚7 N¾÷šþ¢þ÷”þ¦þ÷à{4¾�*D}æÚ{æ¾{ˆæ¾{ˆ7 &¾w ¶ó÷ê{¾æä{W*h}äFN3ZFFN3ZFFN*ZF3ZFFN3ZFFN3ZFFNñ~F3ZFFN3ZFFN@å R4 ;ILLEGAL FILE TYPE LDER35: INC R4 ;ILLEGAL FILE I.D. LDER34: INC R4 ;Fæ********************************** ND1MSG: ND1END-.-4 ;# CHARS IN "END 1" MESSAGE .WORD 0 ç7 �þ÷Žþ‡œ Ìu¦æØuwŽø¦æäuw\ú¬*æww Jà€� D”ÄE€ÿÄå@!!­* xà à à Åà èæÈ{ˆæÈ{ˆ· ¾w –óÀˆ;ÁŠ[Âð$}*Œ}w²‚ ú÷ æ½ · à½÷e4þ÷e8þw”ÿ½,°}÷e þ×-þ÷ûÿ¸½wÿæé*BF0[FêL0[FêL0[FêL2*fF0[FêL0[FêL0[FêLŠF0[FêLêILE SECTOR TRANSFER ERROR LDER33: INC R4 ;"DEFINE FILE" ERROR LDER32: INC R4 ;MAX XEQ ENTë .BYTE CR .ASCII "ROSLOD PASS #1 END" .BYTE CR ND1END: .EVEN ; **********************************ìà CaaŠíÐÂéw àŽŽ‡Z,.xÄe! ÄeåÄe Äß Ýw àß3*Tx€�ÂÄœx Ì ‡ã… ûÅ‹íø~æŽ{ˆ7 þ¦*Ö}÷þæÚ{æ¾{ˆæÚ{æÈ{ˆæÈ{ˆæ¾{H*ú}ˆæÈ{ˆæŽ{ˆæŽ{ˆwÜýÿ b½€· ^½ø*~î0[FêLô*NF3\FŠN3\FŠN3\FŠN4*rF3\FŠN3\FŠN3\FŠN–FïRY ERROR FOR T/S TASK LDER31: INC R4 ;PRIORITY OUTSIDE LIMITS LDER30: MOV R4,-(SP) ;TASK # OUTSð********************************** PAS2MG: PAS2ND-.-4 ;# CHARS IN "PASS 2" MESSAGE .WORD 0 .BYTE ñW¡ˆ*xxÅe ÅeÅe Åe Q‘Ô ÂŠèÂãÄg œx@(p*¢xßU ê êß ê÷xÿ�ÿ÷•B›7Šnºò…÷e0X½÷�T½¤æ´~æŽ{ˆw˜ÿ÷ûÿ:½Õ $*B~…· 4½w�þæÒ~æŽ{ˆwvÿ D‘f~ECTAPE COPY V001A jó3\FŠN3\FŠNœZFÿÿÿÿÿÿÿÿV^FM_FL`FKôIDE LIMITS JSR PC,ERRPRT ;GO PRINT ERROR AND EXIT .PAGE REGSAV: MOV R4,-(SP) ;R5 PUSHõ CR .ASCII "ROSLOD PASS #2 BEGIN" .BYTE CR PAS2ND: .EVEN ; ****************************************ö*ÆxÅÅe°×-zÅe ÷Š�·ŠT÷xÿ`ª*êx÷xÿ^×-V÷E?JÄFÃÃes÷ æÃ*yÃeX÷ À.÷*|~ORIGINAL ON UNIT COPY To* ~O UNIT ????  *** I/O *Ä~ERROR, UNIT øaFJbFIcFHdFGeFFfFùED BY "JSR" MOV R3,-(SP) ;SAVE REST... MOV R2,-(SP) MOV R1,-(SP) MOV ú**************************** ND2MSG: ND2END-.-4 .WORD 0 .BYTE CR .ASCII "ROSLOD PASS #2 ENû÷ ~÷e€$ìýUÀ7ª*2yÁ� � ÁEüÿ}À À À À À À =f*VyÄôÃÃe÷ ŒÃÃeì÷ ÀÃÃežýIü  *** UNRECOVERA„è~BLE COPY ERROR ¡ø~ COPY COMPLETED '#VERIFY COPY ýEgFDhFCiF:jF9lFþ R0,-(SP) JMP (R5) ;...AND RTN REGPOP: ;RESTORE RGS TST (SP)+ ;PÿD" .BYTE CR ND2END: .EVEN .PAGE ERRMSG: ERNEND-.-4 ;# CHARS IN ERROR MESSAGE .W *zyýÀÿýý‹ý€ÀÀe‚÷ · ¶Þ÷*žyªÃÃeîÁ÷ @ÃeÓ  ÃeÁ õž*ÂyÁÁeÈ_êß (Y OR N)? ¡î{� 7*nF!"’FvFnFpFrFtFvFxFzF OP UNNEEDED R5 MOV (SP)+,R0 ;RESTORE OTHERS... MOV (SP)+,R1 MOV (SP)+,R2  ORD 0 .BYTE CR .ASCII "ERROR # " ERRNUM: .BYTE 0,0,0 .BYTE CR ERNEND: .EVEN ; **** Áÿ êßêß êý€÷ jß÷ +*æyf‡Ö w°þÂ#‘ËÅø& ÷’P· LN · .* zFN · @N – †ËÕ€ËÕ0„ ÄE€„ „  äM  |F~F€FÇŠF‚F„F†FˆFŠFŒFŽF�F’F”FëžF–F˜FšFœFžF F¢F¤F¦F¨F ²FªF¬F*~Fw ²÷ ® ÷ Z÷ è MOV (SP)+,R3 MOV (SP)+,R4 RTS R5 ;...AND RTN ; **************************** **************************************************************** HEDING: .WORD END01-4-. .WORD 0 .B *.z‡ßêß÷ÿ êßêß êý€‡ Rz-SÅÃÔÏÒ--< ez¾--ÃÏÒÅ----<Ýwz¾ÀêÄêÂêÆ ñ‹^F)·•b¹¬0*¢Fw ˜Ž‡œ&& && ÷ ¼Ö ,ñ*ÆFˆ ë¬çw fö� ¹& ÷ ”wŠ" **************************************** GETPC: ;LOAD R4 W/ REL ADDR OF CURRENT TEXT ELEMENT MOV CURPC, YTE FF .ASCII "**** ROSLOD LOAD MAP **** .BYTE LF,LF END01: .EVEN .PAGE MODULE: .WORD  êÈê0ÿ4ÿ2ÿ6ÿ8ÿÐ*�{�‚„‡ˆ �‹À�Ž                 !"£¡*´{$¥¦'(©ª+¬-.¯0±²3´56·¸9:»<½¾?ÀABÃDÅÆG   *êF±Š^F5jFñ‹]FЀñ•]F·•ü¸÷ 4Êw (÷ {.G$ÍÄ÷ Î÷ \ñ‹_Fº±Š_F5lFñ‹]F³€1Š]F .6Gãw øÀ R4 ;PC @ TEXT BLOCK START ADD OFFSET,R4 ;OFFSET SPECIFIED WITH RLD COMMAND TST (R4)+  END03-4-. .WORD 0 .ASCII "**********" .BYTE LF .ASCII 'MODULE TITLE: "' TITLE: *Ø{HÉÊKÌMNÏPÑÒSÔUVרYZÛ\ÝÞ_'ABÃDÅÆGHÉÊK*ü{ÌMNÏPÑÒSÔUVרYZ     �‚„‡ˆ ‹À   ÿ* |              F  FüÁwÔþÀ6FHÀe  ZF*^GúÀ]FŠ vFüÀ]FÂÿÿ�� ^FüŠ `Fk*‚GüÀiFP� jFüÀvFÁnFPÑ W vF ;SINCE PC INCREMENTS AFTER FETCH RTS PC ; ********************************************************** .BYTE 0,0,0,0,0,0,'",LF .ASCII "SECTION" .BYTE HT .ASCII "ENTRY" .BYTE HT                          ¹*D|                       .<(+ ¦       R*h|  !$ª©» -¯        Þ¬¥ ¾?          :£ù ûw š .¦G‡‰Á�P¸ÁEðÿEÅ ÷ Àñ‹fFD2Fô•·•0¸«*ÎGñ•`FDœeFÄ |æG1ŠfFw,HI(I4IBI\I¹ òGnI ********** SYMOVF: ;CHECK FOR SYMBOL TABLE OVERFLOW CMP USYME,#LSDEND-BPSYM BLOS SYMOV1  .ASCII "OFFSET" .BYTE HT .ASCII "SIZE" .BYTE HT .ASCII "TOTAL" END03: .EVE *Œ|À'½" ABÃDÅÆGHÉ       ÊKÌMNÏPÑÒ      œ*°|  SÔUVרYZ       \  ÛÝ           ABÃ[*Ô|DÅÆGHÉ      (R4)+ JSR PC,SYMOVF ;OVERFLOW? JSR R5,REGPOP ;RESTORE RTS PC .PAG |IŠIžI¦I¸IÆIÒI±ŠaFW¬aFH‚* H@jF ´  -m=�"F­ ’,0Hý• "Fñ• eFwÂf2F÷ ¤%Ö =ŠF=ŠF! ;NOT YET AT END LDER26: MOV #26,R4 ;OVERFLOW: "TH-TH-THAT'S ALL, FOLKS!" JSR PC,ERRPRT SY" N .PAGE SECT: .WORD END04-4-. .WORD 0 .BYTE '< SECNAM: .BYTE 0,0,0,0,0,0 #  ÊKÌMNÏPÑÒ        SÔUVר?ø|YZ      0±²3´56·¸9      ­*¶}ŠƒŠƒŠƒuÚ}E INPTRH: ;INSERT AN ENTRY ALPHABETICALLY INTO CURRENT SECTION ;OF LSD. R4 POINTS TO CANDIDATE EN% Ù,VH œ&& æ& ÷ Ö œÄñ‹]F,|H ÷ z¬ & œ & ÷ RÖ w ’*¢Hø w & MOV1: RTS PC .PAGE SRMODN: ;SEARCH DEFINED SECTION OF LSD FOR A MODULE NAME ; INPUT: R' .BYTE '>,HT,HT SECVAL: .BYTE 0,0,0,0,0,0,HT SECSIZ: .BYTE 0,0,0,0,0,0,HT CUMSIZ: .BYTE 0,0,0,0,0,0 END04: .EVEN ( Šƒ*Ä}PÒ€PÒ€PÒ€PT è}Ò€8 Î}§Ð}TRY. JSR R5,REGSAV MOV R4,R2 ;NEED R4 BELOW MOV PTSECT,R4 ;PTR TO BE* ”œ ôŠ[_ Â÷ j1Š]F÷ ,ÆH²nF %nFÄånF·•·±Š]F5jF’,ìH 1Š^F%nF·•·5lF÷ 4w¤1Š+ 4 POINTS TO RAD50 NAME ; OUTPUT: R4 POINTS TO NAME IN LSD (IF FOUND) ; R4 UNCHANGED IF, ; ******************************************************************** .PAGE ENTRY: .WORD END05-4-. - ¤*Ò} L/P 1 PARITY ERROR L/P 1 8ö}NOT READY÷~ L/P 1 ABORTED~0}GIN OF CURRENT SECTION INPT01: ADD #BPSYM,R4 ;NEXT (POSSIBLE) SECTION ENTRY ;[SKIP/ _FñŠ]FB.I·•è¶÷±ŠaFf2F÷ Ì$Ö ïñ•eF1ŠaFôý• "Fi.:Iñ•eFâñ‹hFý• "Fñ•eFØ1ŠhFý•U"F0 NOT FOUND ; CALL: JSR PC,SRMODN ; BR A ;FOUND ; B1 .WORD 0 .BYTE ' ,HT .ASCII " " MFLAG: .BYTE 0 ;PLACE TO PUT POSSIBLE "M" FLA2 ´}8~¼~@Ð*~&f¦æ&f€ ÷ ¨ 7¬”ÿ*<~Ä0÷ T…„ƒ‚�€Ž‡œ— €`~ FIRST ONE: IT IS SECTION'S NAME]. CMP R4,SYME ;DID WE REACH END OF DEFINED SYMBOLS? BHIS IN4 ,bIñ•eF±ŠaFÌý•^"Fñ•eFö}œcF"Fñ•eFc*ˆIﱊaFý• "Fñ• eFå1ŠeFwhþý• "F¤*¬I1ŠaFñ• eF5 R B ;NOT FOUND MOV R0,-(SP) ;SAVE IT MOV #LSDBGN,R0 ;START OF LSD SRMOD1: 6 G .ASCII " " GLOBAL: .BYTE 0,0,0,0,0,0,' ,' ; GLBVAL: .BYTE 0,0,0,0,0,0 END05: .EVEN 7 ÂÉ I*j~Ä çÄ ä÷ ºÄ¬Æ€.E @.EóÄ È*Ž~ñÃHEà ó¥.EñóæþÿßàþÿÈ *:}ö*²~2}PT02 ;YES: STICK IT IN NOW. CMPB FLAGS+1(R4),#GENTRY ;IS NEXT A GLOBAL SYMBOL ENTRY? BNE 9 §ý• "Fñ• eF 1ŠaF@lFwÒ*ÐIrþñ‹iFw&ÿý•"FñŠiFwÿ‰Á�¶ÁEðÿ¬,ôIEÅ D0Fô•@lF Ê €f2Fæ÷ : CMP R0,SYME ;REACHED END OF DEFINES? BLO SRMOD2 ;NOT YET MOV (SP)+,R0 ;N; .PAGE UNDHED: .WORD END06-4-. .WORD 0 .ASCII /**********/ .BYTE LF,LF .ASCII < ÄRàÄHà´Š[_0 ó } Ÿþÿð¥p,Ö~ð öþÿ…„ƒ‚�€& ÷ ‚áwxäH*ü~0£ˆ ŸþÿÄ™Ÿþÿó}s INPT02 ;NO: SECTION HAS ENDED: INSERT HERE. ; IT IS STILL IN THIS SECTION: COMPARE WILL DETERMINE ALPHABETIC ORD> \#ä*JÖ DŸ F+ÄÅ€¡|¡ n¡ *¡-œ*>JƒÃeƒl¡.ñ‹bFB¦ÎEÀ–,I² u*bJ ‘Ê €Ê5? OT FOUND! ADD #2,(SP) ;ALTER RETURN FOR "NOT FOUND" RTS PC SRMOD2: CMPB #OBJMN,FLAGS+1@ "UNDEFINED REFERENCES" .BYTE LF END06: .EVEN ; **************************************************************A }3"}q, 3 }3 $}³*}s&}3 &}3 (}÷ Â�{*Fñ Â|÷ Ð÷ & »‰ ߀þÿÂ*}[*j€ER CMP (R4),(R2) ;FIRST HALF-WORDS: BHI INPT02 ;NEW ONE IS LATER ALPHATETICALLY: C @Ä =‘"FC0Fó•Ê5@ *†J@w"Ä• ñ•eFîý•^"Fñ•eF2 ïÒ*ªJò äò Ê Þ�à ñ‹bF ±ŠbFÄ•\ñ•eFD (R0);THIS ENGRY AN OBJ MOD NAME? BEQ SRMOD3 ;YES: IS NAME SAME? SRMOD4: ADD #BPSYM,R0 ;NOT AE ****** UNDDEF: .WORD 6 .WORD 0 UNDNAM: .BYTE ,,,,, ;SIX CHARS IN NAME OF UNDEFINED REF F }Á}÷ ä÷ ÖÉ Â|wòÂ�{ú,Ž÷ ’÷ æMæþÿÂ*}ßàþÿ2}„Äe}*´2}ÈŸþÿÄ }ôŠ[_& BLO INPT01 ;NEW ONE IS EARLIER: KEEP LOOKING CMP 2(R4),2(R2) ;1ST HALVES EQUAL: COMPARE 2H ü.ÎJñ’cFÐÄ’Î1ŠbF²  ‘1‘cFÄ•\ñ•eFÁñ‹dFš,öJÀ±ŠdFf2F÷ ì"Ö ¸½ŠF½=‘"Fñ• eFf0Fw.K÷ Ð"Ö I N OJB MOD BR SRMOD1 SRMOD3: CMP (R4),(R0) ;FIRST HALF-NAME MATCH? BNE SRMOD4 J .PAGE ASWICH: .WORD 0 ;SWITCH FOR IGNORING "ASECTS" BC: .WORD 0 ;BYTE COUNT BGNSECK ÷ .€¬É*Ø æ }& ÷ ãÖ fæû "}ƒ…Â*}í*üÂ÷ 2Äò }Ò Ä ú)€} ÷ ²* €¶ND HALVES BLOS INPT01 ;STILL LOWER: TRY AGAIN INPT02: ;TIME TO INSERT ENTRY INTO LSD M ²Ä•=‘"Fñ•eFò€÷ >È 6·•º´ø*DKœ8w Þù5Á W<.E4ñ5€.E<Aœ.Ep�,hK ¬,¬(œ— N ;NO CMP 2(R4),2(R0) ;YES: SECOND HALF-NAME MATCH? BNE SRMOD4 ;NO ; FOUND! O : .WORD 0 ;BEGIN SECTOR FOR BUILDING LOAD MODULE BLKPTR: .WORD 0 ;POINTER TO CURRENT PLACE INP ð ·s}3"}³*}3 }3 $}f*D€Â�{s&}Â|3 &}3 (}÷ Æ÷ ð÷ M»*h€÷ æ3 }æÄ}÷ šÖ M³ (}ó%CMP R4,PTROBJ ;IF INSERTING BELOW OBJ MOD POINTER... BHI INPT03 ADD #BPSYM,PTROBJ ;...MUR &0Š Ã~f*ŽK ÄÜ0‘ ´Š[_Cà Ń`0 ‡ˆ ·•L´ñ*²Kð‡ð‡ð‡ð‡ð,ÖKS MOV R0,R4 ;NOW POINTS TO LSD ENTRY MOV (SP)+,R0 RTS PC .PAGE PTGLOB: T INPUT BLOCK BLOCK1: 0 ;FLAG FOR FIRST BLOCK IN MODULE CURPC: .WORD 0 ;CURRENT VALUE OF RELATIVE "PCU (}÷ ì*Œ€¢÷ À÷ èMæÒ}÷ ®ñwðþæê}÷ Y*°€œ÷ œ3 (}ÄÄ}&ôÒ€æ<÷ Ö MCý.Ô€fST ADVANCE IT ALONG WITH OTHERS INPT03: BR INSY01 ;GO INSERT AT R4 .PAGE UNSQUISH: ;MAKE A HOW ‡ñ5@.EìAHE°÷ >÷ Š<vF4vF·•´ì,üK‡&÷ &÷ rnFünF4nFÀenF4vF³*"L·•س€‡fÁ Á �`D`Ä �‡X ;SEARCH LSD FOR A GLOBAL NAME (NOT OBJ MOD) ;THE SECRET TO THE LOADER'S CONTROL SECTION ABILITY LIES HERE. ; IF THE SY " DIRSEC: .WORD 0 ;NEXT AVAILABLE DIRECTORY SECTOR MODCNT: .WORD 0 ;COUNT OF # OF MODULES TZ Á}Â*}€}÷ rÖ …Ä.}Ë÷ Z³ (}Ú*ü€×,(}´æ<÷ ÒÖ ‡ðÖ …÷ |o, �wvþæ&ff& À~Å$}AaÁeLE IN TABLE. R4 POINTS TO DESIRED HOLE LOC'N MOV R0,-(SP) MOV R1,-(SP) MOV USYME,R0 \ ‚ñ•`Fñ‹iF*FLCD4Fô•ð1ŠgFñ‹]F1ŠeF@jF 4 *jL�¡ ñ• eF=‘"Ff2FæýÕ@FÂ,ŽL] ECTION IS ONE OF THE NAMED ONES, IT APPEARS ONLY ONCE IN THE ; LSD, AND THUS HAS ONLY ONE BASE TO LOAD PROGRAMS FROM. THE UN^ O LINK NAMCTR: 0 ;COUNTER FOR NAMES INPUT FROM TTY NAMPTR: 0 ;POINTER TO NAMES IN INPUT LIST OFFSET: 0 _ s!&}93 ,}ç*F� DÔ! 3 ~ ³ ,} Ä% 3 ~ ÷ ,,j�RÄ• ÷ J … s!&}äÀ5Е s$}Àì~¶ ;START @ TOP ENTRY... MOV R0,R1 ADD #BPSYM,R1 ;...AND EXPAND UPWARD UNSQ01: CMP R0a ÷ ä Ö J@lF 3 1ŠdF1ŠbFñ•eFDŸ F,´LÄAË5@Ä =‘Ff0FæÝñ•iFñ• eF*ÚLý•"Ff4FæðÏw F Ã�b NAMED ; C-SECTS, HOWEVER, ARE DETECTED AS 6 BLANKS, AND ARE MADE UNIQUE TO ; EACH OBJECT MODULE BY LIMITING THE SEARCH TO Tc ;KEEPS OFFSET FROM BEGIN OF LOAD MODULE ONEZRO: .BYTE 1,0 PRSIZE: .WORD 0 ;CURRENT PROGRAM SIZE PTROBJd *��„ Ö …�€Ö ‡Ä … ÷ îÎ5÷â *´�Å îÄÙ¶ 6 & „`“3 ~Ž Ö ‡|*Ø� 4ƒW 1ƒ,R4 ;ARE WE DOWN TO DESIRED LOC'N YET? BHI UNSQ02 ;NOT YET: MOVE ANOTHER ONE MOV (SP)+,R1 f iù³ŠfFÅÅ AŸ"F*þL7ŠYùóŠ`Fwüó‹]F@jF@lFðk."M÷þø÷üø7 úøœÄ ô5@.EsHE ò5€.E¿g HE CURRENT OBJECT MODULE ; AREA IN THE LSD. ; INPUT: R4=PRT TO RAD50 NAME ; OUTPUT: R4=PTR TO LSD ENTRY IF FOh : .WORD 0 ;POINTER TO CURRENT OBJ MOD ENTRY IN LSD PTR1.0: .WORD 0 ;POINTER FOR DETECTING ONEi  ÿŸ.†W ÿŸ+†À5(Á5%Ö*ü�D „ „ ÄeÿŸD ‚ ñŸ‚ð¥ Ö* ‚!ƒ!õŸ†Ä5  ‡ð¥ùÄæ MOV (SP)+,R0 RTS PC UNSQ02: MOV -(R0),-(R1) ;BLOCK MOVE MOV -(R0),-(R1) MOk *JMlò5.Ehô5 .E„êôU .E=ŠF=ŠFÍ,nM�œ.Ep� w°ø÷ ¶B   ÂevFÅ Å @ÀenF-*”MÅevFÄ÷ l UND ; CALL: JSR PC,PTGLOB ; BR A ;NOT FOUND ; BR B m -ZERO SEQUENC PTSECT: .WORD 0 ;POINTER TO CURRENT SECTION NAME IN LSD SECTCT: .WORD 0 ;SECn *D‚‡Ä‡Ä‡ß@ê‡Äê& Ä5 Ä5õ*h‚Ä5Ö ‡– ‡Ö ‡ó Ð} 3.} R*Œ‚ ê÷ šúßV -(R0),-(R1) MOV -(R0),-(R1) MOV -(R0),-(R1) BR UNSQ01 ; ****************p Ú:JÒ  Ä ÷·•H²÷ }.¸MÀñ‹]F!ñœ]F]Fñœ^F^Fñœ_F_F EÅ µjFjFR,àMµlFlF·•²æ÷ Jþƒó•ÿÿ]F3Š^F3Š_Fq ;FOUND MOV R0,-(SP) ;SAVE IT MOV (R4),R0 ;IS THIS THE SPECIAL... r TOR COUNTER WHEN READING IN A MODULE SYME: .WORD 0 ;NEXT OPENING IN LSD FOR DEFINED SYMBOL TRAILPOINTER: s ê êß0}êßÈêÄÄ}Ê*°‚ôÒ€&æ<÷ Ö ‡fÄ~ÅÅ ý‡.Ô‚ÀåÄÄ Ä Ä Äeƒ0ð0ŠÈ&÷ **************************************************** SQUISH: ;REMOVE ENTRY POINTED TO BY R4 FROM THE UNDEF'D TABLE u ·•ø±›.Nõ}�"Ff2Fæ÷ ^Ö 3ŠfFw  ‡ó‹gFﳊgF..N÷ ê×-ì÷æ$F÷ ,‡w ê Á� øEÅ =ŠF.v BIS 2(R4),R0 ;...CASE OF 6 BLANKS? BEQ PTGL01 ;YES: START AT CURRENT OBJ MOD MOV w .WORD 0 ;NEXT SPACE IN TRAILER BLOCK TRAPC: .WORD 0 ;TRAILER "PC" TRSCSV: .WORD 0 x ‚Ãk*ü‚…À~‡ÃwÃwøÿÃwðÿÃ* ƒÅÀ~@aAa… !Å ý@Á}…Â*}wjüY.0ƒ ê‡f JSR R5,REGSAV MOV R4,R0 MOV #BPSYM,R1 ;ELEMENT SIZE ADD R1,R0 z *VN±ŠhF7Šü÷@lFðý•^"Fñ•eFw È ‡õ*zN¦ö�~±÷Õàv±‡f&Á�Ê÷Á � ±ŠiF„�÷žN‡„{ #LSDBGN,R0 ;NO: BEGIN @ BEGINNING OF SYMBOL TABLE BR PTGL02 PTGL01: MOV PTROBJ,R0 ;CURRENT O| ;SAVE OF INITIAL TRAILER SECTOR TSWICH: 0 ;SWICH USED TO DIRECT FLOW AFTER TEXT OUTPUT TXTBC: .WORD 0 }  ÅÅ Â`üBa…‡„fŶ}­*Xƒæþÿßàþÿõ 5 Ÿþÿf÷ Ã…Ž¤ð*|ƒ‡Ÿþÿ…Ž´‡1 ‡· <ú‡7 6ú‡ ;STAYS ONE ELEMENT ABOVE R1 ASR R1 ;USE BELOW AS COUNTER SQUI01: CMP R0,USYME   N¢Nù¬N¢N¤N¦N¨NªN¬N®N°N7¶N¢N¬Nÿÿÿÿÿÿ ¼Né€ BJ MOD PTGL02: CMP R0,USYME ;END? BLO PTGL03 ;NOT YET MOV (SP)+,R0 ;NOT� ;BYTE COUNT OF DATA IN CURRENT TEXT TXTORG: .WORD 0 ;CURRENT PC AT BEGIN OF RESIDENT TEXT TXTPTR: .WOR‚ & œ* ƒÎ & & & ÷ ÌÛÖ ‡ ß\€ßà‚÷ z ăŒþ÷ fÿÀ}Á}B  ü‡‡*Þƒæþÿßàþÿþ% ;REACHED TOP OF TABLE? BHIS SQUI04 ;YES: EXIT SQUI02: MOV R1,R2 ;COUNTER=# WORDS PER SYMBO„  ¾Nç ÀNÿÿÿë ÁNç ÂNæ ÃNåÄNÆNÑ*FO@… FOUND! RTS PC PTGL03: CMP (R4),(R0) ;FIRST HALF-NAME MATCH? BNE PTGL04 ;NO † D 0 ;POINTER TO CURRENT OPEN SLOT IN TEXT USYME: .WORD 0 ;NEXT SLOT IN LSD FOR UNDEFINED SY‡ f…µ…Ÿþÿ'(„Ž6 ‡Ÿþÿwdéöeþ„6 ‡¡&<„Pd‰<„F„P„Z„›V„L SQUI03: MOV (R0)+,(R4)+ ;BLOCK TRANSFER DEC R2 BGT SQUI03 ;STILL IN BLOCK ‰ �*j�k�pjO( xQFOŠ ~Q0ÿõ €Q2ÿñŠ CMP 2(R4),2(R0) ;2ND HALF-NAME MATCH? BNE PTGL04 ;NO ;MATCH! CMPB #OBJMN‹ MBOL ; ******************************************************************** NAMBUF: .=MAXNAM*8.+. ;BUFFER HOŒ F„T„b„p„› ^„`„pþpþ1b„rþrþ+d„tþtþ%*f„ CR 1 ERROR BR SQUI01 SQUI04: JSR R5,REGPOP RTS PC .PAGE NXTMOD: ;ROUTINE SETS UP PARAMETŽ  ‚Q4ÿí „Q6ÿé †Q8ÿå'ˆQˆQBWd‡˜Q¦ ¨Qÿÿ� ,FLAGS+1(R0) ;FILTER OUT OBJ MOD NAMES BEQ PTGL04 MOV R0,R4 ;NOW POINTS TO FOUND NAME IN� LDS OBJ MODULE RAD50 NAMES... ;...AND SECTOR INFORMATION FOR EACH MODULE. USES FOUR WORDS PER MODULE. TMPBUF: .WORD 0,‘ CR 1 SPUR INT –*Š„f¦æ&f� ¶ 6 @ ÷ ºBœü*®„ ³ ^„Ä ŸþÿÄÄ Ä ERS TO READ NEXT OBJ MODULE DEC NAMCTR ;MORE MODULES? BLT NXTM30 ;NO MORE: TAKE "“ ªQ*®Q&À@&À€& f¦æ&f�¶g.ÒQ 1 Àæ®÷à®É i·®€ Dœ7!2óG*úQ_‚Ä ” LSD MOV (SP)+,R0 ;UNSAVE ADD #2,(SP) ;"GOOD" RETURN RTS PC ;NO MATCH • 0,0 ;TEMPORARY CONVERSION BUFFER ASCDAT: .WORD MAXNAM*7 ;TTY INPUT BUFFER FOR COMMAND STRING INPCNT: .W– *Ò„1…„ƒ‚�€´‡ÄBÀ€.E @.Eìæ,ö„Ä êÃHEà ó¥.EñóæþÿßàþÿÉ Ó{,„¼*…s,„÷ èÙDONE" EXIT CLR BLOCK1 ;FLAGS FIRST BLOCK IN MODULE MOV NAMPTR,R0 MOV 4(R0),OB˜ .EÅÅŠYÅ€ BœT— Q€ BœÊ*RMµ  NJ€ D E€ÃE€× ,?€ ­d.BR‡9‚W¬51 4 @À ¸Næ™ PTGL04: ADD #BPSYM,R0 ;NEXT LSD ENTRY BR PTGL02 ;TRY AGAIN .PAGE GETSEC: š ORD 0 ;ACTUAL CHARACTER COUNT LSDBGN: ;"LOADER SYMBOL DIRECTORY": WRITES OVER UNNEEDED BUFFER › ÄÞÙ´Š[_1 0 ó .„&Ÿ„*@…þÿñ¥÷ ¾Ù¤…„ƒ‚�€¤‡n,d…æþÿ€ ¶ ¶ …„ƒ‚�& ætcwJSEC ;START SECTOR # MOV 6(R0),SECTCT ;SECTOR COUNT INC SECTCT ;WANT ONE EXTRA SECT� š­÷à”­p*jRµ ÀN†µ�ÀN ƒ`kK÷ Œ  ñÐ ³Š[_�$ŽR° ºN5ŠÁN·b­¤QñüþñBW´,¬Rfæîþ÷ Àž ;GET POINTER TO SECTION NAME ; INPUT: R4 POINTS TO RAD50 NAME ; OUTPUT: R4 POINTS TO NAMED SECTION IN LSD (IŸ .=.+2000 ;RESERVE SPACE FOR SYMBOL TABLE LSDEND = . ;END OF LOADER SYMBOL DIRECTOR  ðÚH,Š…³ .„Ÿþÿ30„ó 8„ ñ‹óNŠ8„óN�8„ *°…÷ ¶Á*„Äæf„÷ fó´$„Å<„õúˆf@*Ô…æ<÷ þOR ON LAST READ ADD #8.,NAMPTR ;ADVANCE TO NEXT NAME MOV #OBJBK2,BLKPTR ;INIT BLOCK POINTER ¢ Ö w<w@·8­w@wt¶NÆ*ÒRÁþp¼ND ô óM�ÂHþ2 þP-Âe ê*öRúÅ BxQÀ  Àå �ƒ ûÀe 1Ð ò £ F FOUND) ; CALL: JSR PC,GETSEC ; BR A ;NOT FOUND ; BR B ;FOUND ¤ Y .END ¥ Ö ¯‰ ó .„æv„÷ 6Mó 4„6*ø…ß5@pþ/MÀpþ÷ þMw"À5€ûÀ5]*†@À5ó3&„À<„ðˆ&æ÷  ýTO FORCE FIRST READ ADD #2,(SP) ;BUMP TO TAKE "GOOD" EXIT NXTM30: RTS PC .PAGE § ¥*SÀƒlD tÄN… ôô@ôÕ@€*>S +wèw惜QÃE€ÿñ ÌÂeþP÷ v*bSÀ ñ�— ¨ JSR PC,PTGLOB ;CAN NAME BE FOUND IN LSD? GETS01: RTS PC ;NO: ERROR RETURN CMPB © ª Ö I*@†ßE@pþM3 4„ó 6„Á*„÷ 3 6„Mæþÿ]*d†ÀÂýÁÄýñ´ý÷ æý± W"Rñ Q*ˆ†Pßàþÿ ;"NEXT BLOCK": SUBROUTINE READS IN SECTORS UNTIL ; AT LEAST ONE BYTE OF NEXT BLOCK IS IN UPPER HALF O¬ ÂåôÕ€ úÀ ÷.†SÀ `‚`ÂeFOÊ åÀ×õ• ÂNõ• ÃNÅ =€Qo"®S= €Q=‚QÀ= †Q=„Qý „Q†­ #SECTN,FLAGS+1(R4) ;YES: IS IT A SECTION NAME? BNE GETS01 ;NO:ERR EXIT ADD #2,(SP) ® ¯ ·”ý÷*„ŽýŸþÿÄŒýÈð¥b*¬†ð¥@ ƒ ÿŸ†¦G.Іæ&fÈ …„ƒ‚Ä && ÷ þÛÖ Ä F THE ; TWO-SECTOR BUFFER. ONE ADDITIONAL SECTOR IS READ AFTER ; THE FINAL SECTOR IN THE MODU± $ÊS} †QÀ ú‚œzQÂUAµ¾NC¤Qóºýf*èS½~Q… õ‹ÁN �w´ ‰ ÷ |‰ ·ö«ùñ¥Z* T …„ƒ‚�€² ;"GOOD" RETURN RTS PC ; ******************************************************************** SRGLOB: ´ ôŠ[_�*ø†&÷ y ßEApþ3 .„æT„÷ üüÖ M�u*‡@ ÷ @30„÷ <M0•ó \„Hó („N*@‡Á0„ÁeLE TO FORCE THE LAST BLOCK ; INTO THE UPPER HALF. NXTB90: JSR PC,NXTMOD ;INIT FOR NEXT MODULE AND ¶ Ö ‡5ЦQ‡…„ƒ‚Î*0T�€ÎÆ«& ÷ . w2�‘€ôµÂd*TTôÅ€ŸÂù€œÀE€ÿ7 :ýSñ5@ !d· ;SEARCH LSD FOR A GLOBAL & RETURN ITS FINAL VALUE IN R4 ; INPUT: R4=ADDR OF BLOBAL NAME (RAD50) ; OUTPUTTION NAME .WORD LODD20 ;(2) INTERNAL SYMBOL (IGNORE) .WORD LODD20 ;(3) TRANSFER ADDR¹ Ál$„ÂX„  -Äb„Ä *d‡Ä Ä Ä ³ X„MÄb„ ÑÄ Ñóe$„ó („Ž,ˆ‡ó1�îÄb„Ä Ä Ä Ä ÑÄ ‘óe$„READ A BLOCK BR NXTB80 ;NO MORE MODULES NXTBLK: MOV #ONEZRO,PTR1.0 ;INIT PTR TO [1] » *xTô‹%´€À À À À À À 4Àeœ*œT 4ô‹ò‹€ñ5À - ‡´r*ÀTáÀ ‡ ¼ : R4=VALUE OF GLOBAL JSR PC,PTGLOB ;SEARCH FOR NAME RTS PC ;NOT FOUND ESS (IGNORE) .WORD LODE40 ;(4) GLOBAL SYMBOL ; ********************************************************¾ ó („+.®‡àÀ1ÚÉ^b„óe$„3 X„ó („M³ $„×,$„¨.Ö‡Äb„! ³ :„*! ! +! ó („Æ*þ‡ CMP BLKPTR,#OBJBK2 ;ARE WE INTO LOWER SECTOR? BLO NXTB30 ;NO-NEW READ NOT NEEDED NXTB10: À ÷ `2 ƒƒlm €l~*äT €m 44 ÀeÍÀ¯*U‡À ‡À ‡ñ5€ ÀÀ *_ø  Á MOV VALF(R4),R4 ;FOUND: GET VALUE ADD #2,(SP) ;"GOOD" RETURN RTS PC ; ******************** LDER13: MOV #13,R4 ;FIRST MODULE BLOCK NOT "GSD" JSR PC,ERRPRT LDER14: MOV #1à ¸Âd„Âl8„Á0„ÁeÁl$„¡’ó („ªÁ*„ñ7,"ˆ³ 4„MÀ*„ð‹óNŠ8„³ 6„—óN�8„û*HˆùÀ*„ð‹óN‹8„ðóNŒ ;LOOP HERE FOR SUCCESSIVE SECTOR READS DEC SECTCT ;ANY MORE SECTORS IN MODULE? BLT Å .,Uw@ÿf� � � � � � À5?� @�‡‰æªªµ,TU÷प…ÅEðÿõ‹¦Q·”ªw@õ•ÁNÅ C¤QX*zUó"üÆ ************************************************************ INUSYM: ;INSERT AN ENTRY IN UNDEFINED SECTION OF LSD ; 4,R4 ;FIRST ENTRY IN GSD NOT OBJ MOD NAME JSR PC,ERRPRT LDER15: MOV #15,R4 ;ILLEGAL GSD EÈ 8„ì Á%(†?,lˆW ÿŸ%†Bœ— ñ%†ñ%ÿŸÀ%à*’ˆ† ÿŸ †   `— ÿŸ†Ä ‡„ „ „ }NXTB90 ;NO MORE: GO INIT FOR NEXT MODULE ;YES - READ NEXT SECTOR--- MOV #OBJLST,-(SP) ;DISÊ ·zªA¼ND ý5€~Qwôµ@*žUdô‹€wöW¬& NÜ & ÷ . Ö Âs*ÂU@¶ND¸NCœà Ä``… æ"ª÷àªË INPUT: R4 POINTING TO ".REF" ENTRY IN GSD MOV R0,-(SP) ;SAVE IT MOV USYME,R0 NTRY DECLARATION JSR PC,ERRPRT LODC19: JMP LODF00 ;END OF READING FIRST PASS OVER OBJ MODS Í 0¶ˆ„ „ øÄ õCÀ`„ÀU3&„æf„÷ Nó´$„à*àˆñúˆ; `„fæ<÷ êúÖ ‡CûEA`„â*‰û5`„C READ LIST EMT DISCIO ;****READ NEXT SECTOR**** TST OBJERR ;READ ERROR? Ï c/,æUäÉÐ ‚ µ  NúÂÿÿµ�ÀN BÜ òŠ[_{. V·î©W¬fù …@À ÷àÔ©ð ºN€¤QÉ&4VñÐ MOV (R4)+,(R0)+ ;MOVE IN THE UNDEFINED MOV (R4)+,(R0)+ ;SYMBOL ENTRY MOV (R4)+,(R0)+ .PAGE ;****************PROCESSING FOR INDIVIDUAL G S D ENTRIES************** ; ON ENTRY TO EACH ROUTINE, R1 AND R4 POÒ ó $„ì…Á*„ñw>ý…w*ýn.(‰„fÅF„æþÿßàþÿõ 5 Ÿþÿf÷ .½.P‰…ޤ‡Ÿþÿ…Ž´‡1 ‡3 BNE LDER01 ;YES INC OBJSEC ;BUMP SECTOR # FOR NEXT TIME SUB #128.,BLKPTR Ô ¢Qõ‹ÁN �ð ºN €·²©w^·ª©w*TV5ЦQ‡· ©w°ý·˜©ôÅ@Bœ €À À €*xV`‚`BmÄNÊ V÷ ÚýÀ R@… u¬ÀNÕ MOV (R4)+,(R0)+ ADD #BPSYM,USYME ;BUMP POINTER JSR PC,SYMOVF ;OVERFLOW? INT TO CANDIDATE ENTRY ;*******MODULE NAME******** LODE00: JSR PC,SRMODN ;SEARCH FOR MODULE NAME × $„3 4„s 2„p*x‰3 X„ó :„À0„ �  s\„3 &„ó.„’,œ‰Á<„fæ<÷ 4úñˆÖ ³(„ûA`„‡û 0„;SHIFT POINTER BACK TO TOP SECTOR AREA NXTB30: ;PREPARE TO FIND NEXT BLOCK START MOV BLKPTR,R0 Ù w¦ý¤*œVw.üôµòw ˆù w Œë@€ ý52~Q…*ÀVý5ð†QðŠÂN ý~QB¾N‚ ÂEüÿ w÷*äVÂüÀ ÷ Ú MOV (SP)+,R0 ;O.K. RTS PC .PAGE INSYME: ;INSERT AN ENTRY IN DEFINED SECTION BR LDER16 ;NOT UNIQUE MOV SYME,PTROBJ ;POINTER TO NEW MODULE NAME IN LSD JSR Ü .‰ßÀF„"Úðì‰p &æT„÷ .úÖ ÷ ½Ú*ꉇ ñd‰Ä0„ô¥ñ À*„ðì*Š…3 MOV #OBJBK2,R1 ;TOP OF LOWER AREA SUB R0,R1 ;# BYTES REMAINING IN TOP SECTOR BR Þ ŽB”Q2rœ2r~Q$Wr†Q ¦÷ \t~Qt†Qý~Q9.&WôÅÀwzþ… ÷ Fõ‹ÁNøÅ w~þB@Å °Š¦Qß OF LSD ; R4 POINTS TO THE ENTRY (E.G., IN GSD) ; ADJUST POINTERS SYME & USYME JSR R5,REGSAV PC,INSYME ;GO INSERT ENTRY INTO LSD BR LODD20 ; ****************************************************á $„wDü3 :„³ 6„…wü· ú‡7 ¾"2Šú‡ßà…˜ßàš7 äù÷*„àù‡*NŠ 12345678 &=':>@9 0/ST¸ NXTB44 ;AVOID RESET "PTR1.0" IN CASE OF BLOCK BOUNDARY ; SEARCH FOR A "1-0" SEQUENCE TO START NEXT BLOCK NXTB40: MOã &NWð•ÿÿÁNA¼ND ðŠÃN ý~Q¦æ2úo*nW÷ Ö °À ·1fœ& f& ÷ ìÖ È’W‡‡*”Wä MOV R4,R2 MOV SYME,R4 INSY01: JSR PC,UNSQUISH ;MAKE A HOLE AT SYME ADD #BPSYM**************** LDER16: MOV #16,R4 ;MODULE NAME NOT UNIQUE JSR PC,ERRPRT .PAGE ;*æ *rŠUVWXY _,(%\"Z -JKLMNOP.*–ŠQ $*];^R ! -*ºŠ V #ONEZRO,PTR1.0 ;INIT PTR TO [1] NXTB44: DEC R1 ;END OF TOP BLOCK YET? BLT NXTB10 è æ &€¶6À ˜À  Z‚6ÂWF¸W€ ùÀW|_:aìbHa@bÎW„avmðmrs´s™ØW~FGð\~\‡é ,SYME ;BUMP BOTH POINTERS ADD #BPSYM,USYME MOV (R2)+,(R4)+ ;MOVE IN THE ENTRY MOV ******SECTION NAME******** LODE20: JSR PC,PTGLOB ;SEARCH FOR IT IN LSD BR LODE22 ë +ABCDEFGH .)[<#q*ÞŠI ? ø*‹ È ;YES - GO READ NEXT SECTOR CMPB (R0)+,@PTR1.0 ;IS NEXT BYTE A MATCH FOR SEQUENCE? BNE NXTB40 í âWì]ô]p^¾QŠ„1ìW~ u�öWuX— XæwPxhî (R2)+,(R4)+ MOV (R2)+,(R4)+ MOV (R2)+,(R4)+ JSR PC,SYMOVF ;OVERFLOW? ;NOT FOUND - GO INSERT IT BITB #UNDEF,FLAGS(R1);IS IT DEFINED? BNE LODE24 ;YES -(BYPASS UNð *&‹ ¤*J‹ 12345678 :#@'="9 `*n‹0/STUVWXY , ;NO MATCH - KEEP LOOKING INC PTR1.0 ;MATCH: BUMP TO NEXT BYTE IN CODE BIT #1,PTR1.0 ò XƒXÀÂWÐ àÀWÐ  Xøƒ‡ 4X&æ¦f&M…@XÖ €�‚ƒ„…úó JSR R5,REGPOP ;RESTORE RTS PC .PAGE INPTRH: ;INSERT AN ENTRY ALPHABETICALLY INTODEF WORK) JSR PC,SQUISH ;NO: REMOVE FROM UNDEF AREA SUB #BPSYM,USYME ;AND ADJUST UNDEF PTõ % >?Z -JKL­*’‹MNOPQ !$*); R  stuvwxj*¶‹y z &ABCDEFGH `.é ;HAVE BOTH [1] AND [0] BEEN TESTED? BNE NXTB44 ;NO - CHECK FOR [0] .PAGE ; YE÷  ¤NX€+NX‰æ& æ & ÷ Ö wJ›*dXY2u*ˆXø CURRENT SECTION ;OF LSD. R4 POINTS TO CANDIDATE ENTRY. JSR R5,REGSAV MOV R4,RR LODE22: MOV R1,R4 ;INSERT NEW SECTION NAME INTO LSD MOV SYME,PTSECT ;POINTER TO SECTION ú *Ú‹<(+|I   abcdefgh u*þ‹i jklmnopq r å*"Œ  A! A [1-0] SEQUENCE HAS BEEN FOUND: NOW PROCESS BLOCK MOVB (R0)+,R1 ;BLOCK'S BYTE COUNT TSTB ü õ*¬XÑ*ÐXý 2 ;NEED R4 BELOW MOV PTSECT,R4 ;PTR TO BEGIN OF CURRENT SECTION INPT01: ADD #BPSYM,R4 NAME IN LSD JSR PC,INSYME ;INSERT NEW NAME IN LSD BR LODD20 LODE24: ;SECTION NAMÿ \()[] ò*FŒ þ@ñòóôõö÷øyz{|}~ù123456789:;’*jŒ<=>?ðaâãäåæçèiàklmnoé!"#$%&'()*+,-./ª(R0)+ ;UPPER BYTE OF BC MUST BE ZERO BNE LDER02 MOV R0,R5 ;SAVE POINTER TO FIRST ­ôXŸ ÚXÁ*FZ&jZ ;NEXT (POSSIBLE) SECTION ENTRY ;[SKIP FIRST ONE: IT IS SECTION'S NAME]. CMP R4,SE FOUND ALREADY DEFINED IN LSD CMPB FLAGS+1(R4),#SECTN ;IS IT A SECTION NAME,TOO? BNE LDER17  *ŽŒ`ÑÒÓÔÕÖרYZ[\]^_ÙС¢£<*²Œ¤¥¦§¨ ª«¬­®¯©ábcdefgh êëìíîïPÁÂÃÄÅÆÇ *ÖŒÈIJKLMNOÉ DATA BYTE ; NOW WANT TO COMPUTE CHECKSUM TO VERIFY CORRECT READ: MOV R1,R2 ;INIT CHECKSUM,  pZˆZ AC: V ˆZ ? ¡�Z ILL CMD! öžZ  YME ;DID WE REACH END OF DEFINED SYMBOLS? BHIS INPT02 ;YES: STICK IT IN NOW. CMPB FL ;NO - DOUBLE DEFINITION ERROR MOV R4,PTSECT ;SECTION NAME POINTER TO ORIG ENTRY CMP VA  À�‚ƒ„…†‡ˆ€Š‹Ý*úŒŒ�Ž�‰ABCDEFGHÊËÌÍÎÏj‘’“”•–—˜�š›œ�žŸX*�™QRSTUVWXÚÛÜÝÞßp±²³´µ¶·¸°º»¼½¾¿¹qrssWHICH INCLUDES BC SUB #4,R1 ;REDUCE BC TO ELIM "1-0" AND BC WORDS MOV R1,BC ;S ILL PAR! Ù¬ZNON-QUIESCENT ý*àX  Y]äX AGS+1(R4),#GENTRY ;IS NEXT A GLOBAL SYMBOL ENTRY? BNE INPT02 ;NO: SECTION HAS ENDED: INSERT HERE. LR(R4),VALR(R1) ;COMPARE SECTION SIZES BHIS LODD20 ;ORIG WAS BIGGER: LEAVE IT MOV VALR *B�tuvwx0úûüýþÿ@ñòóôõö÷ø@P~}zn|ù@@@@@@@*f�@@@@@@@@ðaâãäåæçè@@kMl±@é@@@@@@@@@@@*Š�@@@@ ÑÒÓÔÕÖ×AVE BYTE COUNT OF DATA ONLY NXTB50: MOVB (R0)+,R3 ;EXTRACT NEXT BYTE ADD R3,R2 ;ACCUM CHECK ÿÿENüZDS[QU[XX [TMö[¾&úXDT(\REØYTYZCR"ZLP4ZEX÷~Z8£YæFZ÷ \í÷€,÷TZ$ò&.YæFZ÷ Òí÷  ; IT IS STILL IN THIS SECTION: COMPARE WILL DETERMINE ALPHABETIC ORDER CMP (R4),(R2) ;FIRST HALF-WORDS: (R1),VALR(R4) ;REPLACE WITH NEW BIGGER SIZE BR LODD20 ; ********************************************** Ø@@[\µ^jÙ@@@@@@@@@@@@@@@-*®�Z@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@NÁÂÃì*Ò�ÄÅÆÇÈ@@K�´L;É@@@@@@@@@ @@o@@@@@@@SUM DEC R1 ;MORE DATA BYTES TO ADD IN? ;BYTE COUNT INCLUDES CHECK ÷%7 ’ÿ÷ Žÿú*NY÷ŠÿæÚX÷ "�Ö ÀàX$È ü€wÖÛrYæpZ÷ í÷Ô÷TZÌæ†Y7 Ðæ BHI INPT02 ;NEW ONE IS LATER ALPHATETICALLY: BLO INPT01 ;NEW ONE IS EARLIER: KEEP ********************** LDER17: MOV #17,R4 ;SECTION NAME CONFLICT W/GLB OR MOD NAME JSR PC,ERRPR *ö�@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@R*Ž@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@->Ž@@@@@@@@@@@@SUM BYTE... BGE NXTB50 ;SO GO BACK FOR ONE EXTRA BYTE AT END INCB R2 ;CHECKSU FZ÷ ví÷ ¸ëÅVZÄ,œYDÄå�Ä ÃæXS# Ó Ë û÷�Z˜æFZ÷ ¼ìg*ÂY×Ë ÓÕ Û Å Ñ÷žZ|ñW¥,Ä ! LOOKING CMP 2(R4),2(R2) ;1ST HALVES EQUAL: COMPARE 2ND HALVES BLOS INPT01 ;STILL LOWERT .PAGE ;*******GLOBAL SYMBOL******** (HERE AT LAST...) LODE40: BITB #UNDEF,FLAGS(R1);REF OR DEF?  @@@@.ÈŽ÷.q¢ÿ÷8q&q÷–ÿ÷•ÿÿx 7Šr wÆ÷q„ÿa*ðŽw È7tÆdŽÄc™Ãs™w ¦ 7^w ìw õ,�>Ä�M ITSELF INCLUDES THE "1" @BEGIN BNE LDER03 ;CHECKSUM ERROR MOV R0,BLKPTR ;ADVANCE B *æY ‚÷ ØÅ 7!8ëÄ ôE .E‡ ‡W¥,ûq. ZW£LW£Cõ÷ 0‡÷ v)‡w¥¦ìW£Té÷ ø/á2Z‡w¥ô¥ã : TRY AGAIN INPT02: ;TIME TO INSERT ENTRY INTO LSD CMP R4,PTROBJ ;IF INSERTING BELOW OBJ MOD POINBEQ LODE50 ;REF JSR PC,PTGLOB ;DEF - SEE IF IT IS ALREADY IN LSD BR LODE44 " \ÿŒŒŒ7‘Úp7Š0 ÷•ÿÿ, ÷àÚp÷¢•Òpö*:�wæÆ.ÿ& ÷ ÿæäpæÞp÷•@pà DV*^�÷‹ü A „ &DCƒcà ÷Ú w LK PTR-READY FOR NEXT BLOCK MOV R5,R0 ;RESET LOCAL PTR TO FIRST DATA BYTE BIT #1,R0 $ W£Tà÷ L)‡ *¾Zæ7 ôÿ7 òÿ7 ðÿaÃÄZc™Ä ýæ¾ZùâZ÷ ˜„Ö  ƒ‡h*òZ<[T[Š[œ[ Á% TER... BHI INPT03 ADD #BPSYM,PTROBJ ;...MUST ADVANCE IT ALONG WITH OTHERS INPT03: BR INSY01 ;NOT FOUND BITB #UNDEF,FLAGS(R4);FOUND: IS IT ALREADY DEFINED? BEQ LODE42 ;NO: GO REMOVE' 2w ΄™*‚�·ŠÜ w ð  '  7ŠÈ Ä´ „ ‚ ¦P*¦�&w ¶„‚À•\w ¶wXw ºw ö�Ä .Ê�øf ;IS ADDR OF FIRST DATA BYTE ODD? BEQ NXTB70 ;EVEN: NO RELOCATION NEEDED MOV BC,R3 ) ÁÁW¥,2`,[Ä 0!-‚÷  ÿÅ )!&7!Ü#ÂƤyôZ 0<[÷༤ô¥K_4ŠK_·¬¤‡÷तô‹K_­K_´* ;GO INSERT AT R4 .PAGE UNSQUISH: ;MAKE A HOLE IN TABLE. R4 POINTS TO DESIRED HOLE LOC'N MO IT FROM UNDEF AREA BISB #DBLDEF,FLAGS(R4) ;FLAG OLD ONE AS A DOUBLER BISB #DBLDEF,FLAGS(R1) , w |÷•t €w „7Š€ wtwhw ŒÄ�™*ò�  Ä%­™û‚ÀEøÿÄ ÄedŽ‚ whÄå–™÷ÀÐ*�6 Á_™÷ æÀ=w F·Š6 À�/ ;NEED TO MOVE ALL BYTES BACK ONE NXTB60: MOVB (R0)+,-2(R0) ;SHIFT BYTE BACK ONE DEC R3 . $f[ ·’¤÷¬ZàþæFZ÷ ë ‡ô•K_Å&„[·v¤‡&& & & ÷ æÖ ñè&÷ â‡{,¤[ HH:MM:SS / V R0,-(SP) MOV R1,-(SP) MOV USYME,R0 ;START @ TOP ENTRY... MOV R0,R1 ;ALSO FLAG NEW ONE BR LODE44 ;BYPASS REMOVAL LODE42: JSR PC,SQUISH ;REMOVE FROM UNDEFIN1 w :À�( w q*:�2À�! w *À w "w *  7� w ß*^�7�þw 7Šø7�óÀR™Á_™÷ JÄÔ‡*‚�w ;MORE BYTES TO MOVE? BGT NXTB60 ;YES MOV R5,R0 DEC R0 ;NOW POI3 MM/DD/YY ±[ *Ê[´[·[Å[Â[¿[�Ä÷ æþÅ &ÅeÀ õIœ*î[ ưÿ‡·ªÿW¥, !ôÀ÷ Æÿ÷ JŒ4 ADD #BPSYM,R1 ;...AND EXPAND UPWARD UNSQ01: CMP R0,R4 ;ARE WE DOWN TO DESIRED LOC'N YET? BHI ED TABLE SUB #BPSYM,USYME ;AND ADJUST ITS POINTER LODE44: MOV R1,R4 ;AGAIN POINT TO INPUT ENTR6 ð7ŠØ  wèw (‚b‚ ‚ ·®wúw ,*¦�‚øw �A�Á � � B`ï÷ r÷%„m*Ê�€…Ö w|÷‹„û 7ŠtwNTS TO FIRST DATA BYTE NXTB70: MOV BC,R5 ;INIT R5 WITH DATA BYTE COUNT ADD #2,(SP) ;BUMP 8 *\Ö ì‡À uÁÈ[¬[w*·xÿW¥, !|,6\ÛÀ÷ ”ÿ÷ RæÀuÁÎ[º[ÅÈ æ¦[­(\\÷ �DÔ�Dÿ9 UNSQ02 ;NOT YET: MOVE ANOTHER ONE MOV (SP)+,R1 MOV (SP)+,R0 RTS PC UNSQ02: MOV Y JSR PC,INPTRH ;INSERT IT ALPHABETICALLY IN THIS SECT'N ;IF IT WAS DOUBLY DEFINED, BOTH ENTRIES ARE FLAG; r÷•ÿÿj¸*î�wh·Šg ÄEøÿÄ 7‚Žpwh÷‹P §*‘ÄEøÿÄ Ã t‚ŽPà õôÿÿ‚ŽIw É*6‘Û×-FOR "GOOD" RETURN NXTB80: RTS PC ; ******************************************************************** LDER01: MO= Ô�AÿÅ õÅ ·ÞýæFZ÷ ê‡�*~\æ w °û�¶ Ñ‹À D”Ä¥ À È*¢\ùD”Äå0�¡ ‚CÂà à Â`‚`a…À œ> -(R0),-(R1) ;BLOCK MOVE MOV -(R0),-(R1) MOV -(R0),-(R1) MOV -(R0),-(R1) GED AS SUCH. THE FIRST ;ENTRY WILL BE USED AS THE REF'D VALUE. THE MAP WILL SHOW ALL OF THEM. BR LODD20 ; * @ ÉÂ% w ’ ÿÿÀ=w Àp*Z‘òÁê7Ä 킎À=w øÀÀe0ö*~‘w ìÀ,w äÂ%ÀÀ@w ~kV #1,R4 ;OBJ MODULE BLOCK READ ERROR JSR PC,ERRPRT LDER02: MOV #2,R4 ;BLOCK BYTE COB &Æ\ïñ¥-úÿ v6 w bû‡6ú\*æ\'èd w @û„…Àæ\Ä �Õ•+Á•{* ]  â€d ÁC MOV -(R0),-(R1) BR UNSQ01 ; ******************************************************************** * * GLOBAL REF * * * LODE50: JSR PC,PTGLOB ;IS IT IN LSD ALREADY? BR LODE52 ;NOT FOUND: INSEE ÷‹¾O*¢‘ÄØüÂeÀ=÷–w ´@w XwºüwÖ*Æ‘’·Š¬w¢À=w – w ü ÿÿÀdÀ*ê‘w *AUNT ERROR JSR PC,ERRPRT LDER03: MOV #3,R4 ;OBJ MOD BLOCK CHECKSUM ERROR JSR PC,ERRG 0B`•�È ôÄe0 ‘¶ .]w û–%‡Õ•- äÒ‹å± P]à\.D]ÿÿ·ôÿ·îÿ·èÿ·êÿ· Þÿ÷ H SQUISH: ;REMOVE ENTRY POINTED TO BY R4 FROM THE UNDEF'D TABLE JSR R5,REGSAV MOV R4,R0 RT IT BR LODD20 ;FOUND: NO NEED TO DO ANYTHING LODE52: JSR PC,INUSYM ;INSERT AS AN UNDEFINEJ Àe0w vÀ,w næH÷BÀFR*’w ·6-À ÷.27삎,€ â÷*2’÷‹( ÀBüÄ:üÃ8üw Ö÷üðPRT .PAGE ; " T R A P U T " ; SUBROUTINE PUTS AN "ADD R1,LOC" TWO-WORD INSTRUCTION IN THE TASK ; TRAILER,L  ê*l]÷ xæ÷ þæÆÿæÄÿÅ®]ľÿüÿ¹$�]·¸ÿÆxf&æ¦f&ê÷ÄöX*®]÷àJ¢÷ Œÿ�€�M MOV #BPSYM,R1 ;ELEMENT SIZE ADD R1,R0 ;STAYS ONE ELEMENT ABOVE R1 ASR R1D BR LODD20 .PAGE ;NOW ALL OBJ MODULES HAVE BEEN PASSED OVER ONCE, ALL ; GSD'O À?’*V’w 7 îw ò7Šø7Šó7Š     w ¢*z’À%0 ‚À%7‡ÀEøÿÄ Ä Ä `‚ ð 1 �™1,ž’� W Ö† TO BE EXECUTED WHEN THE LOAD MODULE IS READ INTO CORE PRIOR ; TO TASK EXECUTION, THUS EFFECTING DYNAMIC RELOCTTION. THE SUBQ ‚ƒ„…÷ ÷ rÿ®Ò]Ævÿ÷ ’í÷ êwŠÐê]÷øÿ‡ùô]æ¢æ÷ l7 æÿwlqR ;USE BELOW AS COUNTER SQUI01: CMP R0,USYME ;REACHED TOP OF TABLE? BHIS SQUI04 S HAVE BEEN PROCESSED, AND THE LOADER'S SYMBOL DIRECTORY ; (LSD) HAS BEEN CONSTRUCTED. NOW THE LSD MUST BE PASSED OVER T ø÷‹Ì ÷‹©Äm¼7ŠºÁ yÄ’ƒÄ’ü’ ““h“ê�•x“’�t“Γ Ø’ò�B”ޔДà“^•¤�¬�Ö� ‘ *ì’œ‘È‘,’J’Б�Z�ROUTINE ; CALCULATES THE PROPER DISPLACEMENT BETWEEN THE INSTRUCITON AND "LOC", ; THE WORD IN THE TEXT NEEDING DYNAMIC RELV *^^ÿÿì^^) ERROR XXXXXª#,^ SXXXXX SXXXXX SXXXXX SXXXXX å*J^&^-^4^;^B^·W ;YES: EXIT SQUI02: MOV R1,R2 ;COUNTER=# WORDS PER SYMBOL SQUI03: MOV (R0)+,(R4)+ ;BLOCK TRANSFER ; TO ASSIGN LOAD MODULE RELATIVE ADDRESSES TO ALL GLOBAL SYMBOLS, ; AND SECTION BASES ASSIGNED. THE LOAD MAP WY >�ƒ·ŠZ7ŠU´÷<*“D ÷2 7.7(÷% Ä„ ò*4“î‡ÀÀŸw Ô÷%‹À•=w ÀŸö—OCATION. THE FORMULA FOR THE ; DISPLACEMENT BETWEEN THE "ADD" INSTRUCTION AND ITS OBJECT IN THE LOAD ; TEXT IS: [ øÿŽw Îù¦Åêÿ*n^ w Àù…æ‚¡÷à|¡Í €ÿw|ÿ· zÿµ.’^·f¡w ¤ùއ� ø7 ®ÿÅ\ÿ'wVÿ÷^Pÿ0\ DEC R2 BGT SQUI03 ;STILL IN BLOCK BR SQUI01 SQUI04: JSR R5,REGPOP ILL THEN BE PRINTED, ; SHOWING LOAD MODULE RELATIVE ADDRESSES, MULTIPLY DEFINED SYMBOLS ; ACCOMPANIED BY A "M" F^ *X“w À• w wúþ÷ ÈwêþwÞþ·ŠÞ÷ Ði*|“ù÷ ²÷ Ð÷ÄÀ7ŠÄ÷m¶¶÷²²w -* “¬æ¦÷  DISPL = CURPC + OFFSET - TRAPC ; THIS DISPLACEMENT IS NEGATIVE, SINCE ALL REFERENCES FROM THE TRAILER ; WILL BE ` ,º^·@¡ÄJ^f&÷ &þÌ ú÷• RÿÅå Íæ^ã,à^÷ šç÷ nÿׇ· fÿæ ¡÷à¡Ö÷ÿÿ ÿ·ø ‘_‡ a RTS PC .PAGE NXTMOD: ;ROUTINE SETS UP PARAMETERS TO READ NEXT OBJ MODULE DEC NAMCTR LAG. LODF00: ;END OF PASS 1 MOV #ND1MSG,TTYBUF ;INIT TO PRINT "END PASS 1" ON TTY MOV #Tc Àžw ®·”Ö%À/w ô*Ä“¨¯À\ú÷ zÔ÷ \÷íppÜÀ®™Ä à Ú*è“… L‡Å Äe’ŽÂ  ! ŽB†Ô ù! Ž=‚�BACKWARD. TRAPUT: ;SUBROUTINE TO BUILD TRAILER ADD #4,TRAPC ;ADVANCE TO NEXT OPEN CELL AFTER Te "_ÿÿÿÿÿÿs_$_&_(_*_,_._0_2_4_6_ô._8_:_<_>_@_B_¸("_f ;MORE MODULES? BLT NXTM30 ;NO MORE: TAKE "DONE" EXIT CLR BLOCK1 ;FLAGS FIRSTTYLST,-(SP) EMT TTYOUT CLR PRSIZE ;INIT PROGRAM LOAD SIZE MOV #LSDBGN,R0 h . ”L® !6‚4’Ž4 ¤Ž¤ À®™!ž‚4’Žà*4”ô¶Ž4 ¤ŽÔ ô÷%À w à Åí*X”ôÅ Å @HIS 1. MOV TRAILPOINTER,R3 ;NEXT OPEN TRAILER SLOT MOV #60167,(R3)+ ;"ADD R1,A" INSTRUCTION j V*|_f¦æ&×þÿ&  „Ý6 Ä `7¡rÿ]‚ß•y* _àþÿô‹K_ ­K_Vô‹[_RöÿÿÄ *_k BLOCK IN MODULE MOV NAMPTR,R0 MOV 4(R0),OBJSEC ;START SECTOR # MOV 6(R0),SECTCT ;INIT PTR TO LSD MOV R0,PTROBJ ;...AND TO CURRENT OBJ MODULE BR LODF20 LODF10: ADD #Bm w ´@€ ‡À%€ÿ À%÷ Òw #*|”š· ÊwÜýwÈý�  à ù÷²ÂÜùÄS* ”ÖùD · Ôù¼‚€Á &C@AƒEPA&f JSR PC,GETPC ;GET VALUE OF CURRENT LOAD OFFSET SUB TRAPC,R4 ;CALC BACKWARD DISPLACEMENT o Ö*Ä_„ ô•K_ß�þÿ���k_W Á•r*è_r� ß•àþÿÊ 4Á ¹_±_ô•K_4Š[_2* `2 ² Ö p ;SECTOR COUNT INC SECTCT ;WANT ONE EXTRA SECTOR ON LAST READ ADD #8.,NAMPTR ;ADVANPSYM,R0 ;NEXT ENTRY LODF20: CMP R0,SYME ;END OF LSD? BHIS LODF90 ;YES: EXIT LOOP r ¦>*Ä”æw „€w ’À/w –€w :ƒ‚�„w “*è”ÐÒ Û åƒ`ƒ ƒ Å ßÀEÿ�¯À € € Ç, •€` Õ÷‹H CMP -(R4),-(R4) ;SINCE "PC" IS ADVANCED, BUT "TRAPC" NOT MOV R4,(R3)+ ;STICK IT BEHIND "t ß�þÿ„ƒ‚�÷ Âýö ¹*0`¶Æe‡öþÿ¶Æeæ÷ *w ò*T`Ž Ž Ž Ž Ž Ž Ž 6 ¶Ö¦¶¶†u CE TO NEXT NAME MOV #OBJBK2,BLKPTR ;INIT BLOCK POINTER TO FORCE FIRST READ ADD #2,(SP) ;B MOVB FLAGS+1(R0),R1 ;ENTRY TYPE MOVB FLAGS(R0),R2 ;QUALITIES FLAG CMPB R1,#GENTRY w ·à µ÷•8… °‡Å wFù÷•àÌjn*2•w ¢7Š÷U4ù÷‹÷E(ùw T76æ".V•ùæù÷‹ü‘À�òÀ‹� ‹à p¤ŽADD" ; NOW SEE IF BUFFER IS FULL, AND WRITE IT OUT IF SO: CMP R3,#TRAILBLOCK+64. ;AT END YET? y *x`æ—þÿß•àþÿ÷ „þR7 ~þŸ•þÿæ¦f�Ÿ*œ`vÂdþ ‚*_²� 6 ²€6–*À` „Ü×þÿß•z UMP TO TAKE "GOOD" EXIT NXTM30: RTS PC .PAGE ;"NEXT BLOCK": SUBROUTINE READS IN SECTORS UNTI;GLOBAL SYMBOL? BEQ LODF50 ;YES DEC R1 ;SECTION NAME? BNE LODF10| ÷•à€jC*~•w V×­ÔÖ÷‹ÊÓ÷•àhj·Š¿÷UÔø×A*¢•·Ìø·Êø÷•ª7¸÷‹¡¾w @÷‹´ø€Å�…*Æ•¬øÅ� BLO TRAP20 ;NOT YET MOV #TRALST,-(SP) ;LIST FOR WRITING TRAILER EMT DISCIO ~ àþÿÆ>þ&À07 ’À X.ä`À 2 7 ÊÁ ô•K_ß�þÿ‡ô•K_Ù* a€œ À Ä <"_*_0*__0*_"_ß�þÿ‡ L ; AT LEAST ONE BYTE OF NEXT BLOCK IS IN UPPER HALF OF THE ; TWO-SECTOR BUFFER. ONE ADDITION ;NO: GET NEXT ENTRY .PAGE ;*******SECTION NAME: MAKE ITS SIZE EVEN, STORE ITS BASE VALUE, SET PTR ; � ¨ø¯ŒŒŒŒw‘"jÅ’ø÷‹t�å wÍ*ꕆøÄt!’ŽÄ Ä úw ¼w JÄt™Ãu™w 4,–ž@÷eZø%Ä•t’Ž7‘2ô ¤Žª INC TRASEC ;BUMP TRAILER SECTOR COUNT MOV #TRAILBLOCK,R3 ;PREPARE TO RESET POINTER TRAP20: ƒ Ÿ•u*0aþÿŽŽŽ‡æ—þÿ& ÷ (ÿw,ß•àþÿÀºýh*Ta ÜÈ1ŠK_7 ¦ý7  7 |ü0 ÆœýŠç*xaþÿwöñŠK_„ AL SECTOR IS READ AFTER ; THE FINAL SECTOR IN THE MODULE TO FORCE THE LAST BLOCK ; INTO THE UPP TO THIS SECTION, AND INCREMENT THE TOTAL PROGRAM SIZE. BITB #ABSREL,R2 ;ABSOLUTE OR RELOCATABLE? † ô¤ŽA*4–w „ÀBw .À�Àe`€ w À;w ÷d*X–ðÄ�ú’Žw úwîû·â·ü÷ÆpŽf&Œ*|–æ¦f MOV R3,TRAILPOINTER ;NEW POINTER RTS PC .PAGE ; " T X T O U T " ; ("TXTBC" MAYˆ ù&f¦ €ÝK7 xýH‚æ—þÿÃ&œaß•àþÿœK_Á y¬a$b$b¼aÒaüaüa$b$bÏ,¼aŸ“þÿ&÷ zß•àþÿÖ *Á6ý1 7 .ý7 (‰ ER HALF. NXTB90: JSR PC,NXTMOD ;INIT FOR NEXT MODULE AND READ A BLOCK BR NXTB80 ;NO MORE M BNE LODF30 ;REL CLR VALR(R0) ;ABS: SET SIZE... CLR BASE(R0) ;...AND ‹ æÌæ €Ö ·Â�‚ƒ„…ÆÒ÷æG. –°€Ä4’޶Žüü’ŽÄ Ä ÷…÷�°h™÷�®h”ñ,È–7Фh7Фh÷‹ hý€…w r÷‹”hý€÷5 BE ZERO, WHICH INDICATES "CURPC" HAS BEEN SET TO A NEW ; VALUE BY AN RLD COMMAND. IF THE NEW PC STILL FALLS WITHIN BLOCK #� .âa7 ü�Áe Æ"ýffffffð•K_Â�>bI* bW"Âåø1f÷ 8üŸ•þÿ‚�€W*.bއcŽ ODULES NXTBLK: MOV #ONEZRO,PTR1.0 ;INIT PTR TO [1] CMP BLKPTR,#OBJBK2 ;ARE WE INTO LOWER SECTOBASE = 0 BR LODF40 LODF30: ;RELOCATABLE SECTION MOV VALR(R0),R3 ;SECTION SIZE � ˆh÷‹‚hË*î–ý€÷�gzh÷�bxh…÷‹V  <¶Ž’Ž„ „ !”*—ø…ÃÄþÿ÷%&Ãå„ À&Äe@*6— 1, ; NO TRANSFER WILL OCCUR. IF THE NEW PC IS INTO THE SECOND BLOCK, OR ; OUTSIDE THE TWO BLOCKS, BOTH BLOCKS WILL BE WRIT’ 2bw ðõæ—þÿ €ÝKp*Rb7 ¸üH‚À *_€ ß•àþÿœK_Âå 8 ±*vb*6ð•K_Ÿ“þÿBœ  ƒ"_+C ÄÓ R? BLO NXTB30 ;NO-NEW READ NOT NEEDED NXTB10: ;LOOP HERE FOR SUCCESSIVE SECTOR READS MOV R3,R4 ASR R4 ADC R3 ;MAKE SIZE EVEN MOV PRSIZE,BASE(R0) ;SET B• N @ Ä üÀe0w &à óÀ• Ö Á‚ŽÀ¨*Z—ÿÿ …÷‹hý€7�þg…÷‹ògl*~—ý€À�îgÀE€ÿÀ¥÷‹Ð  TEN OUT, AND THE ; APPROPRIATE NEW TWO BLOCKS WILL BE READ IN. IN MANY CASES THIS WILL ; MEAN THAT A PARTIALLY-WRITTEN TEXT— û *šb%ß•àþÿW"ò "_ r"_ ò"__²`_�*¾bL2_É1 0ŠK_Ÿ•þÿvw ^õl*âb‡… … … õ˜ DEC SECTCT ;ANY MORE SECTORS IN MODULE? BLT NXTB90 ;NO MORE: GO INIT FOR NEXT MODULE ASE OF NEW SECTION ADD R3,PRSIZE ;SUM UP TOTAL SIZE (& END OF THIS SECT) LODF40: MOV R0,PTSECT š w Ðÿí÷‹­*¢—¾À¥ ç…Ä ã‡•w ¶ÿú×­´g• À•^Ü*Æ—w ¤ÿÀ•Uw œÿÆdŽw€ú… ÷ÿÿn÷ÿÿjU*ê—  BLOCK #2 WILL BE WRITTEN TO DISC, ; ONLY TO BE READ BACK IN AGAIN INTO BLOCK #1. IN THIS WAY, ; WE CAN BUFFER OUR TEXT OUTœ f¦æ&×þÿ&  „Ý17¡üú*c.‚ß•àþÿ­K_)ô•K_Ä *_„ Ê �œ ˜**cÁ ¹_±_´ŠK_ß�þÿ¶ „ƒ‚�ö � ;YES - READ NEXT SECTOR--- MOV #OBJLST,-(SP) ;DISC READ LIST EMT DISCIO ;****READ ;POINTER TO NEW SECTION BR LODF10 ;GET NEXT ENTRY ;*******GLOBAL ENTRY POINT LODF50: BIŸ ‚7,‚ŽX‚ÁR삎Á-P‚Ð ðÀDI*˜…w@€ 78À ô÷%(!ùƒ… �„ U,2˜ú ÷%‚??‘‡Ã ONE SECTOR AT A TIME, AND PROTECT THE ; INTEGRITY OF OUR NEWLY CREATED TEXT.) TXTOUT: ;SUBROUTINE TO OUTPUT ACCU¡ o*Ncއö—þÿæ÷ ýwŽ Ž Ž 6 äÛ*rcŠþÿ7 ôÿ÷ Œûl÷ dúiÄ„ûÄ  Ã÷ L*–cØÿíÂ`ò "_¢ NEXT SECTOR**** TST OBJERR ;READ ERROR? BNE LDER01 ;YES INC OBJSEC TB #ABSREL,R2 ;ABS OR REL? BEQ LODF60 ;ABS MOV PTSECT,R3 ;POINTER TO CURRENT ¤ ™Ã€™à*X˜Ä~™w Nÿ…÷%öw ªþ…÷Ú77B*|˜Ðw ZÿÀ Àe0w àþÀ,w Øþæ²÷¬¶* ˜À°MULATED TEXT IF BUFFER IS FULL ADD TXTBC,CURPC ;BUMP LOC'N CTR TO BGN OF NXT TEXT BLOCK ADD TXTB¦ !÷—!,Eáß•àþÿ÷ é.ºc´ÿÛ�"_wFûr"_²_òe"__ EÜW­K_»*âc7 $ûŠþÿ×w‘ûµŠK_‚ ·�û·ûɧ ;BUMP SECTOR # FOR NEXT TIME SUB #128.,BLKPTR ;SHIFT POINTER BACK TO TOP SECTOR AREA .PAGE SECTION MOV BASE(R3),BASE(R0) ;SECTION BASE ADD VALR(R0),BASE(R0) ;CALC OFFSET FROM LO© w pþ· ÷ÊœÀÆ…ÀÀ÷ºŒÓI*ĘÄýÿ C”Ã¥ Ã¥$ × A‡Ãå ÃåÃå-.è˜ Ãå    ¦  ‚eÂ`„ ä�‡C,TXTPTR ;ALSO BUMP POINTER IN LOCAL TEXT BLOCK MOV CURPC,-(SP) ;SAVE FOR WORK BELOW MOV TXTO« ñ *d@œÀEÿÀ @`ÀeB·æ·Jÿ& E**dfB ·Ò·6ÿF€ 6 vœ "*Nd�‚ƒ„…¬ NXTB30: ;PREPARE TO FIND NEXT BLOCK START MOV BLKPTR,R0 MOV #OBJBK2,R1 ;TOP OF LOWEAD MOD BASE BR LODF10 ;NEXT LODF60: MOV VALR(R0),BASE(R0) ;HAS ABS VALUE BR ® ÅýÿÂF™–*™ ‡€âƒ ûË× Ãe ÃeÃe Ô4™Ãe Ñ�Ò … è€Ð ‡@(Ä*N™RG,R4 ;PC VALUE @ BGN OF RESIDENT TEXT CMP (SP),R4 ;IS NEW PC BELOW TEXT IN BLOCK ONE? BL° þ7 ¦ú7 ¤ú7 ¢ú7 ÿÀžúÖ.rdÀ 0 "_ð"__0`_ÀåöÀÁ 1 *_ð•K_ù&šd0Š[_0Šk_á À ôÀÁ>bÙÀ ü‡± R AREA SUB R0,R1 ;# BYTES REMAINING IN TOP SECTOR BR NXTB44 ;AVOID RESET "PTR1.0" IN CASE LODF10 .PAGE ;NOW ALL ENTRY POINTS AND SECTION BASES HAVE BEEN ;RELOCATED WITH ³ ODT-11R V00š r™2ABEí*z™ *;/\ $G _<^,OWEBP@>SRC-FI!XASež™PMCFRBùO TXTO10 ;YES - REPLACE TEXT ADD #128.,R4 ;PC OF FIRST BYTE IN SECOND TEXT BLOCK CMµ ¥*ºdÂÀ Á_ ƒ W"Áqød*_&Þd¹*_¹e0œ)ek_0ŠK_á À  ð‡6e‘þdÒe|f.gØg„h´¶ OF BLOCK BOUNDARY ; SEARCH FOR A "1-0" SEQUENCE TO START NEXT BLOCK NXTB40: MOV #ONEZRO,PTR1.0 ;INIT PTR TO [RESPECT TO PROGRAM BASE ZERO. ;NOW TIME TO PRINT THE LOAD MAP. LODF90: MOV #HEDING,MAPBUF ;P®™­*dŽÿÿÿÿÿÿ∎ÿÿÿÿÿÿÿÿÿÿãbERP (SP),R4 ;NEW PC IS ABOVE BLOCK1:IS IT BELOW BK2? BLO TXTO50 ;YES - NO NEED TO WRITE OR REAº e"iÈipjkžkde¬eHfòf¤gNhžeúh˜i>jæjæjÁ(eæjì6eÊe2» 1] NXTB44: DEC R1 ;END OF TOP BLOCK YET? BGE NXTB46 ;NOT YET - KEEP GOING MORINT HEADING JSR PC,LPCALL ;GO ASK FOR LINE PRINTER MOV #LSDBGN,R0 CLR PRSIZE REL ADDR OF CURRENT TEXT ELEMENT MOV CURPC,R4 ;PC @ TEXT BLOCK START ADD OFFSET,R4 ;OFFD .PAGE TXTO10: ;HERE TO WRITE CURRENT TEXT OUT AND READ NEW TEXT IN--- MOVB #1,TXTR.W ¿ ç*¬eºe TASK # 2 æ¬e ˆÂÐeˆ6Òeff2¬*HfÀ V R0,BLKPTR ;UPDATE FOR PROPER PLACE IN NEW BLOCK BR NXTB10 ;...AND GO MOVE NEXT BLOCK UP ;INIT CUMULATIVE LOAD MODULE SIZE BR LODG20 LODG10: ADD #BPSYM,R0 ;NEXT ENTRY LODG20: CMP SET SPECIFIED WITH RLD COMMAND TST (R4)+ ;SINCE PC INCREMENTS AFTER FETCH RTS PC ; **;WRITE MOV #TXTLST,-(SP) EMT DISCIO ;WRITE OUT CURRENT RESIDENT TEXT MOV (SP)Ä Vf TASK # 3 æHf ˆêlfæ& & & ˆÖ ˆ”|fg2U*òfg TAÅ NXTB46: CMPB (R0)+,@PTR1.0 ;IS NEXT BYTE A MATCH FOR SEQUENCE? BNE NXTB40 ;NO MATCH - KEEP LOOKING R0,SYME ;END OF LSD? BHIS LODH10 ;YES: EXIT LOOP MOVB FLAGS+1(R0),R1 ;ENTRY TYP****************************************************************** SYMOVF: ;CHECK FOR SYMBOL TABLE OVERFLOW ,R3 ;NEW "CURPC" ASR R3 ;NOW GET SECTOR FOR NEW PC BIC #100000,R3 ;SUPPRESÉ SK # 4 æòf ˆêgæ& & æˆÖ æˆñ$.gÂg2ï*¤g²g TASK # Ê INC PTR1.0 ;MATCH: BUMP TO NEXT BYTE IN CODE BIT #1,PTR1.0 ;HAVE BOTH [1] AND [0] BE BEQ LODG30 ;OBJ MOD NAME DEC R1 BEQ LODG40 ;SECTION NAME CMP USYME,#LSDEND-BPSYM BLOS SYMOV1 ;NOT YET AT END LDER26: MOV #26,R4 ;OVERFLOW: "THS EXTENDED SIGN ASR R3 ASR R3 ASR R3 ASR R3 ASR R3 Î 5 æ¤g ˆÑÈgæ& & & ˆÖ õÍØglh2™*Nh\h TASK # 6 æNh ˆÏÏ EEN TESTED? BNE NXTB44 ;NO - CHECK FOR [0] .PAGE ; YEA! A [1-0] SEQUENCE HAS BEEN CMP R1,#3 ;ENTRY? BNE LODG10 ;NO: IGNORE MOV #GLOBAL,-(SP) ;YES:***PR-TH-THAT'S ALL, FOLKS!" JSR PC,ERRPRT SYMOV1: RTS PC .PAGE SRMODN: ;SEARCH DEFINED SECTASR R3 MOV R3,R4 ;SAVE NEW SECTOR (RELATIVE TO TEXT BGN) ADD BGNSEC,R3 ;SECTOR Ó rhæ& & æˆÖ ôU„hi2?*úhi TASK # 7 æúh ˆÉÔ FOUND: NOW PROCESS BLOCK MOVB (R0)+,R1 ;BLOCK'S BYTE COUNT TSTB (R0)+ ;UPPER BYTE OFINT ENTRY NAME & VALUE*** MOV R0,-(SP) EMT R50UNP ;RAD50 UNPACK MOV 10(R0),RION OF LSD FOR A MODULE NAME ; INPUT: R4 POINTS TO RAD50 NAME ; OUTPUT: R4 POINTS TO NAME IN RELATIVE TO BEGIN OF BATCH FILE MOV R3,TXTSEC ;SET FOR UPCOMING READ & SUBSQNT WRITES CLRB TXØ  iˆûè"i¶i2*˜i¦i TASK # 8 æ˜i ˆì¼iæ& ˆÖ ÷Ù BC MUST BE ZERO BNE LDER02 MOV R0,R5 ;SAVE POINTER TO FIRST DATA BYTE ; NOW WANT4 ;GLOBAL'S VALUE RELATIVE TO LOAD BASE 0. MOV #GLBVAL+6,R3 ;END OF ASCII BUFFER JSR PC,BINLSD (IF FOUND) ; R4 UNCHANGED IF NOT FOUND ; CALL: JSR PC,SRMODN ; TR.W ;PREPARE FOR NEW TEXT READ MOV #TXTLST,-(SP) EMT DISCIO ;READ IN NEW TEXT Ý 2Èi\j2 ²*>jLj TASK # 9 æ>j ˆöbjææˆÖ ö¾pjÞ TO COMPUTE CHECKSUM TO VERIFY CORRECT READ: MOV R1,R2 ;INIT CHECKSUM, WHICH INCLUDES BC SU2OC ;CONVERT BINARY TO OCTAL ASCII MOVB #' ,MFLAG ;INIT "M" FLAG POSITION WITH SPACE BITB BR A ;FOUND ; BR B ;NOT FOUND MOV R0,-(SP) ;SAVE IT ASL R4 ;NOW GET PC AT BEGIN OF NEW TEXT ASL R4 ASL R4 ASL R4 â k2 _*æjôj TASK # 10 ææj ˆö kæˆÖ ˆ~kŠk2 .ã B #4,R1 ;REDUCE BC TO ELIM "1-0" AND BC WORDS MOV R1,BC ;SAVE BYTE COUNT OF DATA ONLY FLAGS(R0),#DBLDEF ;WAS THIS SYMBOL MULTIPLY DEFIND BEQ LODG25 MOVB #'M,MFLAG ;YES: SET TO MOV #LSDBGN,R0 ;START OF LSD SRMOD1: CMP R0,SYME ;REACHED END OF DEFINES? BLO SRMO ASL R4 ASL R4 ASL R4 MOV R4,TXTORG ;NEW BEGIN PC MOV (Sç Šk7  € ·  ˆú¶žkl2 $l7  � ·  æ æˆÖ õ-*2lÀè NXTB50: MOVB (R0)+,R3 ;EXTRACT NEXT BYTE ADD R3,R2 ;ACCUM CHECKSUM DEC R1 FLAG ENTRY IN MAP LODG25: MOV #ENTRY,MAPBUF ;SET UP TO PRINT ENTRY LINE JSR PC,LPCALL BR D2 ;NOT YET MOV (SP)+,R0 ;NOT FOUND! ADD #2,(SP) ;ALTER RETURN FOR "NOT FOUP),R3 ;PC FOR BEGIN OF NEXT TEXT BLOCK SUB R4,R3 ;GET OFFSET FROM TOP OF TEXT AREA ADì \lÂÃàƒ Ò— ú‡7 „À7dÚ*Vl7l‡÷þÿv÷Eàÿp·j·d· ^÷ ”ò¼*zlþæ†ò÷ þôºl—"ÂÆl—"í ;MORE DATA BYTES TO ADD IN? ;BYTE COUNT INCLUDES CHECKSUM BYTE... BGE LODG10 ;NEXT .PAGE LODG30: ;***PRINT OBJECT MODULE'S NAME*** MOV #TITLE,-(SP) ND" RTS PC SRMOD2: CMPB #OBJMN,FLAGS+1(R0);THIS ENGRY AN OBJ MOD NAME? BEQ SRMOD3 ;YESD #TXTBK1,R3 MOV R3,TXTPTR ;ACTUAL POINTER TO NEXT OPEN TEXT WORD TXTO50: TST (SP)+ ;POPñ & ¦ *žl’$Ò�dòŠÒ.Ò(Ê ÷ ¤ñwºöZbÂlZX.Úlßîlßà÷ò NXTB50 ;SO GO BACK FOR ONE EXTRA BYTE AT END INCB R2 ;CHECKSUM ITSELF INCLUDES THE "1" @BEG MOV R0,-(SP) EMT R50UNP ;UNPACK MODULE'S NAME MOV #MODULE,MAPBUF ;INIT TO PRINT: IS NAME SAME? SRMOD4: ADD #BPSYM,R0 ;NOT AN OJB MOD BR SRMOD1 SRMOD3: CMP (R4),(R0) ;F SAVED PC RTS PC .PAGE LPCALL: ;COMMON ROUTINE TO MAKE EMT TO LINE PRINTER MOV ö ~‡ßm·n·!òƒÆò*mw .ë· ZÀF& Fü‡·Nþßîlß´*&m@fÿÆ:À F¨ Fü‚÷(.÷ *æjmÕ÷ IN BNE LDER03 ;CHECKSUM ERROR MOV R0,BLKPTR ;ADVANCE BLK PTR-READY FOR NEXT BLOCK MODULE NAME & HEADING JSR PC,LPCALL ;GO PRINT IT BR LODG10 ;NEXT LODG40: IRST HALF-NAME MATCH? BNE SRMOD4 ;NO CMP 2(R4),2(R0) ;YES: SECOND HALF-NAME MATCH? #MAPLST,-(SP) EMT LPRNTR ;LINE PRINTER RTS PC ; ************************************û *Jm÷ "ñ×'xÿÿÿwØw âêÆ[¬nm*vmæ„’÷à~’&×-&Öo‚€È ÷e?Uü MOV R5,R0 ;RESET LOCAL PTR TO FIRST DATA BYTE BIT #1,R0 ;IS ADDR OF FIRST DATA B ;***PRINT PROGRAM SECTION NAME*** MOV #SECNAM,-(SP) MOV R0,-(SP) EMT R50UNP BNE SRMOD4 ;NO ; FOUND! MOV R0,R4 ;NOW POINTS TO LSD ENTRY MOV (S******************************** ; SUBROUTINE "BINARY TO OCTAL ASCII CONVERSION" ; INPUT: R4 = BI *šmð �6 °È €¶Èeø¬ë*¾mÿÿôîð�>ñ¶ö:a÷•[¶üÿÇ*âm÷ŠSû& Æå  YTE ODD? BEQ NXTB70 ;EVEN: NO RELOCATION NEEDED MOV BC,R3 ;NEED TO MOVE ALL BYTE ;UNPACK SECTION NAME MOV 10(R0),R4 MOV #SECVAL+6,R3 JSR PC,BIN2OC ;CONVERT BINP)+,R0 RTS PC .PAGE PTGLOB: ;SEARCH LSD FOR A GLOBAL NAME (NOT OBJ MOD) ;THE SECRET TO THENARY NUMBER ; R3 = DESTINATION END ADDRESS ; R2 = ITERATION LENGTH (IF E Û¦ö’÷à’w 2ê€Ã*nÈ%ð•ÿÿÈ%ÿÿœÁEðÿÁ Cw Û.*n·  ÁeØoBA  ûJ³øoÉ6 w  S BACK ONE NXTB60: MOVB (R0)+,-2(R0) ;SHIFT BYTE BACK ONE DEC R3 ;MORE BYTES TO MOVE? ARY TO OCTAL ASCII MOV 6(R0),R1 ;SECTION SIZE MOV R1,R4 MOV #SECSIZ+6,R3 LOADER'S CONTROL SECTION ABILITY LIES HERE. ; IF THE SECTION IS ONE OF THE NAMED ONES, IT APPEARS ONLY ONCE IN THE ; LSD, ANTER @"B2ONTA") BIN2OC: MOV #6,R2 ;INIT ITERATION LENGTH (NORMAL 6 CHARS) B2ONTA: ;ENTER HERE WHEN îé *Rn0œp)p€ ð‹p"$·ŠÐô‰À:÷å­*vn2ȬÿÿôœÁEðÿW íÁ 9øo–.šn1øo æ7 BGT NXTB60 ;YES MOV R5,R0 DEC R0 ;NOW POINTS TO FIRST DATA BYTE NXTB70 JSR PC,BIN2OC ;CONVERT BINARY TO OCTAL ASCII MOV R1,R2 ASR R2 ADC R1 ND THUS HAS ONLY ONE BASE TO LOAD PROGRAMS FROM. THE UNNAMED ; C-SECTS, HOWEVER, ARE DETECTED AS 6 BLANKS, AND ARE MADE UNI PRE-SETTING ITERATION LENGTH MOVB R4,-(R3) ;ALSO LOOP RETURN FOR NEXT OCTAL DIGIT BICB #370,( X‘ ðŠ)pÔÀ À À fÁØo`÷à<‘*Ân7�vBABW¬ÿùñŠöCEqœ<*ænJ°øoÉ…7‘œó‹æœ : MOV BC,R5 ;INIT R5 WITH DATA BYTE COUNT ADD #2,(SP) ;BUMP FOR "GOOD" RETURN NXTB80: RT ;MAKE MODULE SIZE EVEN ADD R1,PRSIZE ;ACCUMULATE LOAD MODULE SIZE MOV PRSIZE,R4 QUE TO ; EACH OBJECT MODULE BY LIMITING THE SEARCH TO THE CURRENT OBJECT MODULE ; AREA IN THE LSD. ; INPUT: R4=PRT R3) ;LEAVE ONLY LEAST SIGNIFICANT THREE BITS BISB #060,(R3) ;CHANGE TO ASCII CODE ASR R4 & ‹°* o€÷ Üó & Â5@Î& ÷ XðÖ ÂŒ€Ó ÂŒN*.o€ûÜÓ$ÂŒ€&&fû …„€A¶÷“¹*Roè÷ æ« S PC ; ******************************************************************** LDER01: MOV #1,R4 ;OBJ MOD MOV #CUMSIZ+6,R3 JSR PC,BIN2OC ;CONVERT IT TO OCTAL ASCII MOV #SECT,MAPBUF TO RAD50 NAME ; OUTPUT: R4=PTR TO LSD ENTRY IF FOUND ; CALL: JSR PC,PTGLOB ; BR A ;BEGIN SHIFTING FOR NEXT OCTAL DIGIT BIC #100000,R4 ;PREVENT SIGN PROPAGATION ASR  ÁØo`BA¥W,ÿúJ°øoÁ*voÉ÷ Àñ—ÀØoÁ÷àn�Ð Á üÿ šo÷Š˜wúþwî®oµ ULE BLOCK READ ERROR JSR PC,ERRPRT LDER02: MOV #2,R4 ;BLOCK BYTE COUNT ERROR JSR PCJSR PC,LPCALL ;PRINT SECTION NAME,BASE,SIZE,& CUM SIZE BR LODG10 ;NEXT .PAGE LODH ;NOT FOUND ; BR B ;FOUND MOV R0,-(SP) ;SAVE IT R4 ASR R4 DEC R2 ;MORE ASCII DIGITS TO GO? BGT B2ONTA ;BACK FO &Øo’&øorpdË ,ERRPRT LDER03: MOV #3,R4 ;OBJ MOD BLOCK CHECKSUM ERROR JSR PC,ERRPRT .PAGE ; 10: ;END OF PRINTING DEFINEDS: NOW PRINT UNDEFINEDS, IF ANY CMP SYME,USYME ;ANY UNDEFINEDS? MOV (R4),R0 ;IS THIS THE SPECIAL... BIS 2(R4),R0 ;...CASE OF 6 BLANKS? BEQ PTGLR MORE RTS PC ;ASCII BUFFER FILLED: RETURN ; **************************************************# (pdº 9pL>pI,@p7Š"÷ Ä@÷¼÷ ¶:· °7fÁ¨îñ‹_à$ " T R A P U T " ; SUBROUTINE PUTS AN "ADD R1,LOC" TWO-WORD INSTRUCTION IN THE TASK ; TRAILER, TO BE EXECUTED WHEN THE LOAD BEQ LODH30 ;NO: GO TO MESSAGE MOV #UNDHED,MAPBUF JSR PC,LPCALL ;PRINT HEADING 01 ;YES: START AT CURRENT OBJ MOD MOV #LSDBGN,R0 ;NO: BEGIN @ BEGINNING OF SYMBOL TABLE BR****************** ERRPRT: ;ERROR MESSAGE PRINTING ROUTINE ; R4 ALREADY INITED WITH BINARY ERROR NUMBER ( ,fp)×-œî�‰À�îð•K_7|�÷ z�÷àr�!*Œp÷•Ô& æ®]¦Á B"_¹_±_±"_ÿ*°p9 _‚�) MODULE IS READ INTO CORE PRIOR ; TO TASK EXECUTION, THUS EFFECTING DYNAMIC RELOCTTION. THE SUBROUTINE ; CALCULATES THE PRO MOV #UNDDEF,MAPBUF ;SET UP TO PRINT FROM UNDEFINED BUF LODH20: MOV #UNDNAM,-(SP) MOV R0,-(SP) PTGL02 PTGL01: MOV PTROBJ,R0 ;CURRENT OBJ MOD PTGL02: CMP R0,USYME ;END? BLO PTGL03 MOV #ERRNUM+2,R3 ;LAST CHAR IN ASCII BUFFER MOV #3,R2 ;A 3-CHAR MESSAGE NUMBERR - �æHî÷ Àð& ætc÷Š„7Šu*Ôp˜&fÀRtЕ<ˆŠ¢<9·Š€ŠˆŠ¢<23*øpŠˆŠ¢-Šˆ "ÁPP�P�ˆŠ÷•. PER DISPLACEMENT BETWEEN THE INSTRUCITON AND "LOC", ; THE WORD IN THE TEXT NEEDING DYNAMIC RELOCATION. THE FORMULA FOR THE EMT R50UNP ;CONVERT TO ASCII JSR PC,LPCALL ;GO PRINT IT ADD #BPSYM,R0 ;NOT YET MOV (SP)+,R0 ;NOT FOUND! RTS PC PTGL03: CMP (R4),(R0) ;FIRST H JSR PC,B2ONTA ;USE SECONDARY ENTRY POINT TO CONVERSION MOV #ERRMSG,TTYBUF ;INIT FOR PRINTING ERROR M2 �*q)÷mäÿȵ· Úÿ·Š ÁXt@”‰Šp¢EtÜ*@q É•¡Š÷tÀ÷µ÷e²�€·Š÷*dqµ‰–%3 ; DISPLACEMENT BETWEEN THE "ADD" INSTRUCTION AND ITS OBJECT IN THE LOAD ; TEXT IS: DISPL = CURPC + OF ;BUMP TO NEXT ENTRY CMP R0,USYME ;REACHED END? BLO LODH20 LODH30: ;NOW PRIALF-NAME MATCH? BNE PTGL04 ;NO CMP 2(R4),2(R0) ;2ND HALF-NAME MATCH? BNE ESSAGE MOV #TTYLST,-(SP) EMT TTYOUT ;REQUEST MESSAGE EMT EXIT ;CUR7 !À˜G7~Ž&÷ ^*ˆq·£Í< ·­¿7·­´2÷àVŽÆeŸ*¬q"ß2 È7>ŽB €f÷ ¿8 FSET - TRAPC ; THIS DISPLACEMENT IS NEGATIVE, SINCE ALL REFERENCES FROM THE TRAILER ; WILL BE BACKWARD. TRAPUT: NT "PASS 2" ON TTY MOV #PAS2MG,TTYBUF MOV #TTYLST,-(SP) EMT TTYOUT ;PRINT MES PTGL04 ;NO ;MATCH! CMPB #OBJMN,FLAGS+1(R0) ;FILTER OUT OBJ MOD NAMES BEQ PTGL04 RENTLY ALL ERRORS TERMINATE LOADER .PAGE TTYLST: .WORD 1 ;TELETYPE I/O LIST .BYTE 0,2 < .Ðq÷ DÑ &÷ –Ö Â‹ ¦�& &  €NÑ & ÷ „í�.øqÖ Â º€yܶÆe÷àî�÷•ÿÿEw”ë÷àÞ�¯* rÀö= ;SUBROUTINE TO BUILD TRAILER ADD #4,TRAPC ;ADVANCE TO NEXT OPEN CELL AFTER THIS 1. MOV TRAILPSAGE ; ******************************************************************** .PAGE ;PASS 1 IS N MOV R0,R4 ;NOW POINTS TO FOUND NAME IN LSD MOV (SP)+,R0 ;UNSAVE ADD #2,(SP ;DEVICE: TTY #1; CALL TYPE: SUSPEND .WORD 0 ;I/O COMPLETE .BYTE 0,0 µò÷åîÈð5ô7Â�&÷ ¢!*Drð5ðE÷ —-?ö�ð—-u*hr ö�ã·­Ú¶ Î Î�‚OINTER,R3 ;NEXT OPEN TRAILER SLOT MOV #60167,(R3)+ ;"ADD R1,A" INSTRUCTION JSR PC,GETPC OW COMPLETED. NOW BEGIN PASS 2 TO FORM THE ;LOAD MODULE ITSELF, COMPLETE WITH HEADER & TRAILER. ;THE) ;"GOOD" RETURN RTS PC ;NO MATCH PTGL04: ADD #BPSYM,R0 ;NEXT LSD ENTRY BR PT .TITLE TEST1 .GLOBL A,B,C,D MOV #A,B MOV #A,B MOV #A,B MO¯›"ì)m €#@ J ›#?B ›EN 6-CHAR NUMBERS MOV #4000,@#LPCMD ;PRINT! TST @#LPCSR ;DONE? BPL .-4 .TITLE TEST2 .GLOBL A,B,C,D MOV #A,B MOV #A,B MOV #A,B MOINITIAL TRAILER SECTOR TSWICH: 0 ;SWICH USED TO DIRECT FLOW AFTER TEXT OUTPUT TXTBC: .WORD 0 ;BYTE CV #A,B MOV #A,B MOV #A,B MOV #A,B MOV #A,B MOV #A,B ;ERROR WORD, RESERVED .WORD OBJHED ;DATA BUFFER MAPLST: .WORD 1 ;LIST FOR LOAD M ;NOT YET DEC LINCNT ;MORE LINES? BGT NXTLIN ;YES DEC SECNT V #A,B MOV #A,B MOV #A,B MOV #A,B MOV #A,B MOV #A,B OUNT OF DATA IN CURRENT TEXT TXTORG: .WORD 0 ;CURRENT PC AT BEGIN OF RESIDENT TEXT TXTPTR: .WORD 0 MOV #A,B MOV #A,B MOV #A,B MOV #A,B MOV #A,B MOV #A,BAP .BYTE 3,2 ;LINE PRINTER,SUSPEND .WORD 0 ;I/O COMPLETE .BYTE 0, ;DOES HE WANT ANOTHER SECTOR/BLOCK? BLE .+4 ;ALL DONE. RTS PC ;RET MOV #A,B MOV #A,B MOV #A,B MOV #A,B MOV #A,B MOV #A,B ;POINTER TO CURRENT OPEN SLOT IN TEXT USYME: .WORD 0 ;NEXT SLOT IN LSD FOR UNDEFINED SYMBOL ; MOV #A,B MOV #A,B MOV #A,B MOV #A,B MOV #A,B MOV 0 ;ERROR,LEVEL .WORD 0,0 ;RESERVED MAPBUF: .WORD 0 ;DATA BUFFER: CHOSEN DURN FOR ANOTHER ONE TST (SP)+ JMP START ;GO BACK AND WAIT FOR ANOTHER SEQUENCE MOV #A,B MOV #A,B MOV #A,B MOV #A,B MOV #A,B MOV ******************************************************************** NAMBUF: .=MAXNAM*8.+. ;BUFFER HOLDS OBJ MOD #A,B MOV #A,B MOV #A,B MOV #A,B MOV #A,B MOV #A,B URING RUN TXTLST: .WORD 1 ;LIST FOR TRANSFERS TO/FROM TEXT AREA .BYTE 1,2 ;DISC; S.PAGE BIN2OCT: ;BINARY TO ASCII CONVERSION - WITH PARITY MOV #6,R2 ;CONVERT SIX CHARS BIN050 #A,B MOV #A,B MOV #A,B MOV #A,B MOV #A,B MOV #A,B ULE RAD50 NAMES... ;...AND SECTOR INFORMATION FOR EACH MODULE. USES FOUR WORDS PER MODULE. TMPBUF: .WORD 0,0,0 MOV #A,B MOV #A,B MOV #A,B MOV #A,B CLR 123456 CLR 123456USPEND .WORD 0 .BYTE 0,3 ;ERROR,LEVEL .WORD 0,0 ;RESERVED : MOVB R4,-(R3) ;PUT NEXT DIGIT IN ASCII BUFFER BICB #370,(R3) ;ISOLATE ONLY THIS OCTAL DIGIT MOV #A,B MOV #A,B MOV #A,B MOV #A,B CLR 123456 CLR 123456 ;TEMPORARY CONVERSION BUFFER ASCDAT: .WORD MAXNAM*7 ;TTY INPUT BUFFER FOR COMMAND STRING INPCNT: .WORD 0 CLR 123456 CLR 123456 CLR 123456 CLR 123456 CLR 123456 .WORD TXTHED ;ALWAYS R/W FROM/TO TEXT AREA TRALST: .WORD 1 ;LIST FOR TRAILER .BYTE CLR -(SP) ;WILL ACCUM PARITY MOVB (R3),TMP ;WANT TO COUNT BITS ASR TMP CLR 123456 CLR 123456 CLR 123456 CLR 123456 CLR 123456 ;ACTUAL CHARACTER COUNT LSDBGN: ;"LOADER SYMBOL DIRECTORY": WRITES OVER UNNEEDED BUFFER .=.+2 CLR 123456 CLR 123456 CLR 123456 MOV #C,D MOV #C,D MOV 1,2 ;DISC,SUSPEND .WORD 0 .BYTE 0,3 ;ERROR;LEVEL .WORD 0,0 ADC (SP) ASR TMP ADC (SP) ASR TMP ADC (SP) ASR CLR 123456 CLR 123456 MOV #C,D MOV #C,D MOV #C,D MOV 000 ;RESERVE SPACE FOR SYMBOL TABLE LSDEND = . ;END OF LOADER SYMBOL DIRECTORY #C,D MOV #C,D MOV #C,D MOV #C,D MOV #C,D MOV #C,D .WORD TRAHED ;DATA BUFFER .PAGE TXTHED: ;HEADER FOR TEXT SAVE BUFFER READ/WRITE OPERATIONS (SP)+ ;SEE IF BIT COUNT WAS EVEN OR ODD BCC BIN100 ;WAS EVEN: PARITY BIT NOT NEEDED #C,D MOV #C,D MOV #C,D MOV #C,D MOV #C,D MOV #C,D MO .END MOV #C,D MOV #C,D MOV #C,D MOV #C,D MOV #C,D MOV #C,D .WORD BTCHID ;FILE I.D. FOR BATCH FILE .BYTE 0 ;RELATIVE SECTOR TXTR.W: .BYTE BISB #200,(R3) ;MAKE EVEN BY SETTING PARITY BIT BIN100: BISB #060,(R3) ;MAKE CHARACTER ASCII ASR V #C,D MOV #C,D MOV #C,D MOV #C,D MOV #C,D MOV #C,D R4,TXTORG ;NEW BEGIN PC MOV (SP),R3 ;PC FOR BEGIN OF NEXT TEXT BLOCK SUB R4,R3 MOV #C,D MOV #C,D MOV #C,D MOV #C,D MOV #C,D MOV #C0 ;TEXT READ/WRITE BYTE .WORD 0,0,0 TXTSEC: .WORD 0 ;RELATIVE SECTOR TO READ/WRIOT R4 ;SHIFT FOR NEXT OCTAL DIGIT BIC #100000,R4 ;PREVENT SIGN PROPAGATION ASR MOV #C,D MOV #C,D MOV #C,D MOV #C,D MOV #C,D CLR 1234 ;GET OFFSET FROM TOP OF TEXT AREA ADD #TXTBK1,R3 MOV R3,TXTPTR ;ACTUAL POINTER TO NEXT OP,D CLR 123456 CLR 123456 CLR 123456 CLR 123456 CLR 123456 E TEXT TXTCNT: .WORD 0 ;# WORDS TO TRANSFER EACH TIME TXTBK1: .=.+128. ;FIRST TEXT SAVE BLOR4 ASR R4 DEC R2 ;MORE ASCII DIGITS TO GO? BGT BIN050 ;BACK FOR 56 CLR 123456 CLR 123456 CLR 123456 CLR 123456 CLR 123456 EN TEXT WORD TXTO50: TST (SP)+ ;POP SAVED PC RTS PC .PAGE LPCALL: ;COMMON ROUT CLR 123456 CLR 123456 CLR 123456 CLR 123456 CLR 123456 A: CK TXTBK2: .=.+128. ;SECOND TEXT SAVE BLOCK ; **********************************************************MORE RTS PC PRTHED: MOV R3,@#LPADDR ;INIT PRINTER TO PRINT MOV #-9.,@#LPWC CLR 123456 CLR 123456 CLR 123456 CLR 123456 .PAGE .CSECT INE TO MAKE EMT TO LINE PRINTER MOV #MAPLST,-(SP) EMT LPRNTR ;LINE PRINTER RTS 11 B: 22 .PAGE .CSECT ABCDEF MOV #A,B MOV #A,B MOV #A,B ********** OBJHED: ;HEADER FOR READING OBJECT MODULES .WORD BTCHID ;FILE I.D. FOR BATCH FILE ;WORD COUNT MOV #4000,@#LPCMD ;PRINT! TST @#LPCSR ;DONE? BPL .-4 ABCDEF MOV #A,B MOV #A,B MOV #A,B MOV #A,B MOV #A,B PC ; ******************************************************************** ; SUBROUTINE "BINARY TO OCTAL ASCI MOV #A,B MOV #A,B MOV #A,B MOV #A,B MOV #A,B MOV #A,B .BYTE 0 ;RELATIVE SECTOR .BYTE 0 ;READ/WRITE FLAG .WORD 0,0,0 OB ;NOT YET RTS PC .PAGE ADRESS: .WORD 0 KEY: .WORD 0 ;DEVICE SELECTION KEY LIMOV #A,B MOV #A,B MOV #A,B MOV #A,B MOV #A,B MOV #A,B I CONVERSION" ; INPUT: R4 = BINARY NUMBER ; R3 = DESTINATION END ADDRESS ; MOV #A,B MOV #A,B MOV #A,B MOV #A,B MOV #A,B MOV JSEC: .WORD 0 ;RELATIVE SECTOR NUMBER .WORD 128. ;ALWAYS READ IN TWO SECTORS OBJBK1NCNT: .WORD 0 SECNT: .WORD 0 ;# OF SECTORS TO PRINT SECTOR: .WORD 0 ;CURRENT SECTOR BEIN MOV #A,B MOV #A,B MOV #A,B MOV #A,B MOV #A,B MOV #A R2 = ITERATION LENGTH (IF ENTER @"B2ONTA") BIN2OC: MOV #6,R2 ;INIT ITERATION LENGTH ( #A,B MOV #A,B MOV #A,B MOV #A,B MOV #A,B MOV #A,B : .=.+128. ;FIRST BLOCK FOR OBJECT DATA OBJBK2: .=.+128. ;SECOND BLOCK FOR OBJECT DATA ; G DUMPED TMP: .WORD 0 HEDBUF: .BYTE '-,'S,'E+200,'C+200,'T+200,'O+200,'R+200,'-,'- DISCID: .BYTE 0,'< SECNUM: .=,B MOV #A,B MOV #A,B MOV #A,B CLR 123456 CLR 123456 NORMAL 6 CHARS) B2ONTA: ;ENTER HERE WHEN PRE-SETTING ITERATION LENGTH MOVB R4,-(R3) ;ALSO LOOP RCLR 123456 CLR 123456 CLR 123456 CLR 123456 CLR 123456 CLR ******************************************************************** TRAHED: ;HEADER FOR TRAILER WRITES .W.+6 .BYTE '>+200 MEMBUF: .BYTE '-,'-,'C+200,'O+200,'R+200,'E+200,'-,'-,'-,'-,'< MEMADR: .=.+6 .BYTCLR 123456 CLR 123456 CLR 123456 CLR 123456 CLR 123456 CLR ETURN FOR NEXT OCTAL DIGIT BICB #370,(R3) ;LEAVE ONLY LEAST SIGNIFICANT THREE BITS BISB #060,(R3 123456 CLR 123456 CLR 123456 CLR 123456 CLR 123456 MOV #C,DORD BTCHID ;FILE I.D. FOR BATCH FILE .BYTE 0 TRAR.W: .BYTE 0 ;READ/WRITE .WE '>+200 DSCTAB: ;TABLE OF DISC ADDRESSES FOR BOTH DISCS ; FOR DDC DISC: .WORD 165300 123456 CLR 123456 CLR 123456 MOV #C,D MOV #C,D MOV #C,D ) ;CHANGE TO ASCII CODE ASR R4 ;BEGIN SHIFTING FOR NEXT OCTAL DIGIT BIC #100000, MOV #C,D MOV #C,D MOV #C,D MOV #C,D MOV #C,D MOV ORD 0,0,0 TRASEC: .WORD 0 ;TRAILER SECTOR NUMBER .WORD 64. ;WRITE ONE SECTOR AT A T ;DISC CONTROL STATUS AND COMMAND REG .WORD 165304 ;DISC MEMORY ADDRESS REG .WORD 165302 MOV #C,D MOV #C,D MOV #C,D MOV #C,D MOV #C,D MOV #CR4 ;PREVENT SIGN PROPAGATION ASR R4 ASR R4 DEC R2 ;MORE ASCII DIGITS #C,D MOV #C,D MOV #C,D MOV #C,D MOV #C,D MOV #C,D IME TRAILBLOCK: .=.+128. ;TRAILER BUILD AREA: OUTPUT WHEN FULL .PAGE IDMSG: IDEND-.-4 ;DISC WORD COUNT .WORD 165306 ;DISC ADDRESS REG .WORD 165310 ;DISC ERROR REGISTER,D MOV #C,D MOV #C,D MOV #C,D MOV #C,D MOV #C,D MOV TO GO? BGT B2ONTA ;BACK FOR MORE RTS PC ;ASCII BUFFER FILLED: RETURN ; MOV #C,D MOV #C,D MOV #C,D MOV #C,D MOV #C,D MOV #C,D ;# CHARS IN I.D. MESSAGE .WORD 0 .BYTE CR .ASCII "ROSLOD IIA" .BYTE CR IDEN ; FOR RF-11 DISC: .WORD 177460 ;DISC CONTROL STATUS AND COMMAND REG .WORD 177464 #C,D MOV #C,D MOV #C,D MOV #C,D MOV #C,D MOV #C,D ******************************************************************** ERRPRT: ;ERROR MESSAGE PRINTING ROUTINE ; MOV #C,D MOV #C,D MOV #C,D MOV #C,D MOV #C,D MOV #CD: .EVEN ; ******************************************************************** ND1MSG: ND1END-.-4 ;# CHA ;DISC MEMORY ADDRESS REG .WORD 177462 ;DISC WORD COUNT .WORD 177466 ;DISC ADDRESS MOV #C,D MOV #C,D MOV #C,D MOV #C,D MOV #C,D MOV #C,D R4 ALREADY INITED WITH BINARY ERROR NUMBER MOV #ERRNUM+2,R3 ;LAST CHAR IN ASCII BUFFER MOV ,D MOV #C,D MOV #C,D MOV #C,D MOV #C,D MOV #C,D MOV RS IN "END 1" MESSAGE .WORD 0 .BYTE CR .ASCII "ROSLOD PASS #1 END" .BYTE CR ND1EREG .WORD 177470 ;DISC ADDRESS EXTENSION REG LPBUF: .=.+132. DSCBUF: .=.+128. ;DATE: 22-MAR-72 MOV #C,D MOV #C,D MOV #C,D MOV #C,D .END #3,R2 ;A 3-CHAR MESSAGE NUMBERR JSR PC,B2ONTA ;USE SECONDARY ENTRY POINT TO CONVERSION #C,D C: 33 D: 44 .END ND: .EVEN ; ******************************************************************** PAS2MG: PAS2ND-.-4 ;# CHARS IN "P; M W KLEIN .END START MOV #ERRMSG,TTYBUF ;INIT FOR PRINTING ERROR MESSAGE MOV #TTYLST,-(SP) EMT TTYOUT ;REQASS 2" MESSAGE .WORD 0 .BYTE CR .ASCII "ROSLOD PASS #2 BEGIN" .BYTE CR PAS2ND: .EED TEXT.) TXTOUT: ;SUBROUTINE TO OUTPUT ACCUMULATED TEXT IF BUFFER IS FULL ADD TXTBC,CURPC ;BUMP UEST MESSAGE EMT EXIT ;CURRENTLY ALL ERRORS TERMINATE LOADER .PAGE TTYLST: .WORD 1 VEN ; ******************************************************************** ND2MSG: ND2END-.-4 .WORD 0 LOC'N CTR TO BGN OF NXT TEXT BLOCK ADD TXTBC,TXTPTR ;ALSO BUMP POINTER IN LOCAL TEXT BLOCK MOV CU ;TELETYPE I/O LIST .BYTE 0,2 ;DEVICE: TTY #1; CALL TYPE: SUSPEND .WORD 0 .BYTE CR .ASCII "ROSLOD PASS #2 END" .BYTE CR ND2END: .EVEN .PAGE ERRMSG: ERNEND-.-4 RPC,-(SP) ;SAVE FOR WORK BELOW MOV TXTORG,R4 ;PC VALUE @ BGN OF RESIDENT TEXT MOV R4,R3 ;I/O COMPLETE .BYTE 0,0 ;ERROR,LEVEL .WORD 0,0 ;RESERVED TTYBUF: .WORD ;# CHARS IN ERROR MESSAGE .WORD 0 .BYTE CR .ASCII "ERROR # " ERRNUM: .BYTE 0, ;SAVE ALSO FOR CALCS BELOW CMP (SP),R4 ;IS NEW PC BELOW TEXT IN BLOCK ONE? BLO TXTO0 ;DATA BUFFER OBJLST: .WORD 1 ;OBJECT MODULE READ LIST .BYTE 1,2 ;DISBEQ . ;STICK HERE FOR OPERATOR INTERVENTION MOVB #'B,DISCID ;INIT I.D. PRINT OF "B" FOR DD0,0 .BYTE CR ERNEND: .EVEN ; ******************************************************************** HEDING: ODT-11R V002ABEU~˜077 *;/\ $G _<^,OWEBP@>SRC-FI!XASPMCFRB10 ;YES - REPLACE TEXT ADD #128.,R4 ;PC OF FIRST BYTE IN SECOND TEXT BLOCK CMP (SP)C: SUSPEND .WORD 0 .BYTE 0,3 ;ERR TASK, DISC REQUEST PRIORITY OBJERR: .WORD 0,0 C DISC CLRB DSWICH ;PREPARE PGM FOR USING "DDC" DISC MOV PC,R5 ;R5 IS USED AS PTR TO T.WORD END01-4-. .WORD 0 .BYTE FF .ASCII "**** ROSLOD LOAD MAP **** .BYTE LF,LF !~ˆ˜w÷ V#÷Ff¤æryˆ÷ ¢÷¡KšæÒyæryˆ7 „·ŠË÷ „÷¡K|÷pæÒyæryˆ ‰Èæ~×-v † ×-„‡Î|Îå‘ÑÑZÑRўѤ Â4‘‘BÑÃ,÷ &'†,üÿó5 ÑÊeÈeĉ÷å êÃe ç"‰÷‹øw„ 7lüÿöÑòBÑÈÖ&Îe,üÿ "‰÷‹Êé7lüÿÌÑÈÈeÈe "‰÷‹®Û7´w²÷Æ÷-–’r‰ww÷ ì æy¦ˆˆæy¦ˆˆ÷ ð‰À"y÷‹Ð&ˆÈ &ˆÀry÷‹»&ˆæÒy&ˆÈ &ˆ7Šn7Š‚7Š’7Š¢7Š‹7 ¼7Š„7ŠU7Šg7ŠK7Šj7Šg7Šm7Šj7Šg7Šg7Šd7Ša7Š^7Š[7ŠX7ŠV7Š„7Š�7ŠK7ŠHw÷ ì æy¦ˆˆæy¦ˆˆ÷ ð‰À"y÷‹Ð&ˆÈ &ˆÀry÷‹»&ˆæÒy&ˆÈ &ˆ7Šn7Š‚7Š’7Š¢7Š‹7 ¼7Š„7ŠU7Šg7ŠK7Šj7Šg7Šm7Šj7Šg7Šg7Šd7Ša7Š^7Š[7ŠX7ŠV7Š„7Š�7ŠK7ŠH7ŠE7Š=7ŠD7ŠB7Š*7Š$7Š!æyˆ÷”æšyæyˆæyˆ÷Œæ¨yæyˆæêhæ!ˆÀw‰Àw‰wDww æB!ˆ·*÷(Hÿ æzy/ˆ÷ 6·Š Î%Z‰– ‡÷&æ€y/ˆ·ŠƒÎ%Z‰– ‡\‰÷‹Þ7ŠØ·ŠÕ? Ô÷Ðüæ†y/ˆ÷ ž – ‡V‰÷‹µw:‰÷ ÌÀÒyÈ ÁÄyPHw~æ@!ˆæÐŽåÎe·0wxwÀ¾7¾7 ¸+†ð%¯ð5ww æB!ˆ·*÷(Hÿ æzy/ˆ÷ 6·Š Î%Z‰– ‡÷&æ€y/ˆ·ŠƒÎ%Z‰– ‡\‰÷‹Þ7ŠØ·ŠÕ? Ô÷Ðüæ†y/ˆ÷ ž – ‡V‰÷‹µw:‰÷ ÌÀÒyÈ ÁÄyPHw~æ@!ˆæÐŽåÎe·0wxwÀ¾7¾7 ¸+†ð%¯ð5 ð ðEð¯ðE ðUHð•0 0 Àe ÛððU0 ô÷‹–·Š�wò7Šˆ÷-FFwJ÷•V÷\@À.767 6Àe 7 ?†œœÁ¥ôÁ¥Á¥íµ Ãð0lá0ݵ 0 0 æƒ ƒC ÷`Î÷‹ØðÂ÷`¼÷à¶ð²7°¼÷‹Å7Š¿÷휴÷m²®÷‹wÀ¾7¾7 ¸+†ð%¯ð5 ð ðEð¯ðE ðUHð•0 0 Àe ÛððU0 ô÷‹–·Š�wò7Šˆ÷-FFwJ÷•V÷\@À.767 6Àe 7 ?†œœÁ¥ôÁ¥Á¥íµ Ãð0lá0ݵ 0 0 æƒ ƒC ÷`Î÷‹ØðÂ÷`¼÷à¶ð²7°¼÷‹Å7Š¿÷휴÷m²®÷‹  7Ššæ Îí„·„·zw6ÿ÷-Œr†·Š¡÷‹x÷°÷‹‚÷‹} ÀÄ:{*‰7’Ä6{0‰L‰7.Ä:{6‰N‰7mt÷‹EÄ@{0‰L‰7 ÄD{6‰N‰7m\÷îøÀHÁ{‰ÀòÁ{‰ÀüÁ-{‰w4 w‰w‰÷‹ý/f‰÷L{æL{æ,yˆ‰ðµ@ÿÿÉ¥<‰ñ¥>‰ðµ@ÿÿBÈåÂ¥,æ�“ÖÝyÂ¥‰÷‹£‰‡÷‹¦‰Ö÷%¢À°$Ñ ÷ ’Ê÷%Š÷‚–7 ~7Šr‰ÊÈåðDÁe�— P‰Â zÞfèfgÀfXg¬g0‰„÷ìô.‰ã@‰÷‹é ‰ðµ@ÿÿ¶É¥÷w ÿ¯,‰ôµ ‰÷å ²„÷ª¤.‰6­F7”2-,†´(÷‹¶·Š±Â@{ ÷‹©7Š£·Šˆ÷‹‚¡Â6{ÃdÒÒÔ æ�|7ŠxÖ‹‘â5Ž·ŠVwÿòµ%,‰ôµ‰÷å „b‰ì7nfÁý}‰Áö}À‰�Àî}‰ÀÂ& &ÀDÔ,‰w¸þ„2‰ÍwÃ.÷wÃ.÷À"ÂÂeÁ¨E÷‹Ûp!"Î Ãe ÷‹ÉÂewÌÂec÷‹³ÀeÀe ÃÌÁbEàÁeEÜÎ E!#Î Ãe ÷‹yÂeÂe=÷‹gÀeÀe ÀÁEºÁeE (´÷‹=7”\÷µV7”Q÷¥K÷¥C à ÉɵÅà‹Ã1a(È÷,Ä wÿ÷‡wwœ‰·Ü²æ"yˆ·Šâ÷ €÷xQx÷læ¶yæ"yˆæ`cæ!ˆÀ‚~‰Àìz‰Âe · r †ƒœÁ~× P‰Ã {gÀVÀ-P.&À~‰‰Àf~‰€7ŠOð5Àe 7 (÷‡Á~‰Ñ• Ñ• ÷J&À~÷‹‰‰€Àe 7 ô݇æêhæ!ˆ‰÷‹ùwwœ‰·Ü²æ"yˆ·Šâ÷ €÷xQx÷læ¶yæ"yˆæ`cæ!ˆÀ‚~‰Àìz‰Âe · r †ƒœÁ~× P‰Ã {gÀVÀ-P.&À~‰‰Àf~‰€7ŠOð5Àe 7 (÷‡Á~‰Ñ• Ñ• ÷J&À~÷‹‰‰€Àe 7 ô݇æêhæ!ˆ‰÷‹ù7Šæ"yˆæ"yˆ‡$gbgŠgŠgŒgÆâæÀ~‰ÑMOÑDUÑLEÑ• €‰÷ØÑ• Ñ• À~‰×,g$gˆÀ”~‰„Ñ•<€‰Ñ•>Ñ• €‰Ñ• €‰÷”ÝB‰Ñ• €‰Ñ• €‰÷xÏw÷‹ÿf‰7 âðµ@ÿÿwJÉ¥<‰ñ¥>‰ÂžÑ ‘$ ‰"7ŠÈ&‰ÈåBðµ@ÿÿsÂ%BÂ%mÂ%· ŒÂ%ê÷•l¦)w÷‹ÿf‰7 âðµ@ÿÿwJÉ¥<‰ñ¥>‰ÂžÑ ‘$ ‰"7ŠÈ&‰ÈåBðµ@ÿÿsÂ%BÂ%mÂ%· ŒÂ%ê÷•l¦)wæ,y ˆÖ €·Š‚÷‹E‰ðµ@ÿÿ7ŠnÉ¥ôwÊwºÀ Á‰Àø~‰÷v& æpæ,y¦ˆˆ—‰™Â^z¦ ÒåÈåÒä¦Ñ È R”ü7Šà&‰BÈåðµ@ÿÿÂ%9Â%/Â%· ÎÂ%è÷•®+w¬Â–ÂeÂe · €†—¢øÂå·zæ�‹ÖÝq ÷ Ž÷‹�ã‰w”‰w˜þ÷•`·oN(‰÷¥Pƒ‚Ä@Å>ÕþÿÌeÕ”Œ Ê ü&f"‰÷‹w¢ 7w�€–%Â�— P‰Â zøgZfôfPgZfwÀÒÁÐÈÉ"‰÷‹´wÀÒÁÐÈÉ"‰÷‹´w@ ÷ :7ŠÕæry¦ˆˆæy¦ˆˆæy¦ˆˆw„ABLE OF DISC ADDRESSES ADD #DSCTAB-.,R5 ;NOW AT TOP OF TABLE CMP KEY,#2 ;WAS DDC DISC SEa~™ ;T/W .WORD START .WORD 0 ;INIT .WORD 0 ;MAX XEQ  ;BC TO ZERO? BLT LODK30 ;YES MOVB (R1)+,(R2)+ ;TRANSFER ANOTHER BYTE BR E ADD R1,R0 ;STAYS ONE ELEMENT ABOVE R1 ASR R1 ;USE BELOW AS COUNTER SQLECTED? BEQ HALT2 ;YES: NO FURTHER WORK NEEDED ADD #10.,R5 ;RF-11 DISC: USE UPPERè~x™ .BYTE STSIZE ;STACK SIZE (WORDS) .BYTE PRIOR ;PRIORITY .WORD 0 LODK20 ;BACK FOR MORE LODK30: CLR TSWICH ;INDICATE FIRST TXT BLCOK JSR PC,NXTBLK 01: CMP R0,USYME ;REACHED TOP OF TABLE? BHIS SQUI04 ;YES: EXIT SQUI02: MOV R1,R2 HALF OF TABLE DECB DISCID ;PRINT "A" FOR RF-11 INCB DSWICH ;SET SWITCH TO GO THRU Sp~ð™ ;TIMER .WORD 0 ;ARG .BYTE 0 ;STATUS .BYTE TASKNO ;T;NEXT BLOCK BR LDER21 ;FINAL BLOCK OUGHT TO BE MODULE END CMP #RLDCMD,R2 ;RLD?  ;COUNTER=# WORDS PER SYMBOL SQUI03: MOV (R0)+,(R4)+ ;BLOCK TRANSFER DEC R2 BGT SQUI03HIFT LOGIC HALT2: HALT ;NOW WAIT FOR ADDRESS SELECTION MOV @#SWR,ADRESS ;DISC OR MEMORY: SAVE ø~hšK NUMBER .WORD 0 ;STACK .WORD -1 ;BOTTOM STACK WORD: HOPE IT'S NEVER CHANGED  BEQ LODJ28 ;YES CMP #TXTCMD,R2 ;TXT? BEQ LODK50 ;YES CM ;STILL IN BLOCK BR SQUI01 SQUI04: JSR R5,REGPOP RTS PC .PAGE NXTMOD: HALT ;WAIT FOR KEY-IN OF SECTOR/BLOCK COUNT MOV @#SWR,SECNT ;SAVE IT CMP KEY,~àš .=STSIZE*2+.-2 .PAGE ;FIRST PRINT IDENTIFICATION ON TTY TO OPEN DIALOGUE: START: ;TASK BEGIN FOR TH #MODEND,R2 ;MODULE END? BNE LODK30 ;NO - IGNORE ANYTHING ELSE LODK40: ;TEXT FOLLOW ;ROUTINE SETS UP PARAMETERS TO READ NEXT OBJ MODULE DEC NAMCTR ;MORE MODULES? BLT NX#3 ;WAS MEMORY SELECTED? BNE DISC ;NO BIC #77,ADRESS ;ALWAYS DUMP IN BLOC~X›LOADER MOV #IDMSG,TTYBUF ;INIT FOR INITIAL I.D. MESSAGE MOV #TTYLST,-(SP) EMT TTYO BY MODULE - END MOV #2,TSWICH ;PUT OUT TEXT: THEN GET NEW MODULE BR LODJ60 ;GO OU30 ;NO MORE: TAKE "DONE" EXIT CLR BLOCK1 ;FLAGS FIRST BLOCK IN MODULE MOV NAMPTRKS OF 64 WORDS .PAGE PRTMEM: MOV ADRESS,R4 MOV PC,R3 ADD #MEMADR+6-.,R3 JSŽ~Л ;PRINT ON TTY ; NOW INPUT COMMAND STRING MOV #ASCDAT,TTYBUF ;INIT FOR INPUT OF COMMAND STRING UT TEXT LODK50: ;TEXT FOLLOWED BY TEXT MOV #1,TSWICH ;INDICATE MORE TEXT AFTER OUTPUT THIS 1.0 MOV 4(R0),OBJSEC ;START SECTOR # MOV 6(R0),SECTCT ;SECTOR COUNT INC SECTCTR PC,BIN2OCT ;CONVERT MEM ADDRESS TO PRINT IT MOV PC,R3 ADD #MEMBUF-.,R3 JSR ~Hœ MOV #TTYLST,-(SP) EMT TTYIN ;INPUT ENTIRE COMMAND STRING MOV #ASCDAT-1,R0  BR LODJ60 ;GO OUTPUT UN-MODIFIED TEXT BLOCK ; **************************************************** ;WANT ONE EXTRA SECTOR ON LAST READ ADD #8.,NAMPTR ;ADVANCE TO NEXT NAME MOV #OBJBKPC,PRTHED ;GO PRINT MEMORY ADDRESS OF BLOCK MOV ADRESS,R0 ;PREPARE TO ... JSR PC,FILLB�~ÀœNIT POINTER TO NAMES BUFFER MOV #NAMBUF,R1 ;FILL W/RAD50 FORMS OF MODULE NAMES MOV INPCNT,R************** LDER21: MOV #21,R4 ;FINAL MODULE BLOCK NOT MODULE END JSR PC,ERRPRT .PBLKPTR ;INIT BLOCK POINTER TO FORCE FIRST READ ADD #2,(SP) ;BUMP TO TAKE "GOOD" EXIT NXTM30: RTS F ;...CONVERT BINARY TO ASCII AND PRINT IT ADD #200,ADRESS ;IF MORE TO DO, BUMP ADDRESS... BR%~8� ;ACTUAL # OF CHARS RECEIVED LODA10: MOV #TMPBUF+6,R3 ;POINTER TO TMPY BFR FOR CONVERSION MOV #"E LODJ30: CMD1: ;INTERNAL SYMBOL: ADD SECTION BASE TO LOCAL OFFSET - ;"ADD BIAS" INSTRUCTION INTO TRAILPC .PAGE ;"NEXT BLOCK": SUBROUTINE READS IN SECTORS UNTIL ; AT LEAST ONE BYTE OF PRTMEM ;...AND CONTINUE .PAGE DISC: ;HERE TO DUMP FROM DISC BIS #400,@(R5) ¬~°�,-(R3) ;CLEAR BFR W/ BLANKS MOV #" ,-(R3) MOV #" ,-(R3) LODA20: INC R0 ;B MOV (R1)+,R4 ;LOCAL VALUE ADD BASE(R5),R4 ;CALC OFFSET FROM LOAD MODULE BASE EXT BLOCK IS IN UPPER HALF OF THE ; TWO-SECTOR BUFFER. ONE ADDITIONAL SECTOR IS READ AFTER ; ;DCS - DISC CLEAR MOV ADRESS,R0 MOV R0,SECTOR ;SAVE IT FOR PRINTOUT DSWICH: BR .+4P LIST POINTER TO NEXT CHAR DEC R2 ;ANY MORE CHARS? BLT LODA30 ;NO: GO TO FV R4,(R3)+ ;PUT ALTERED WORD INTO TEXT JSR PC,TRAPUT ;"ADD" INTO TRAILER SUB #4THE FINAL SECTOR IN THE MODULE TO FORCE THE LAST BLOCK ; INTO THE UPPER HALF. NXTB90: JSR PC,NXTMOD 2 ;USE RF-11 DISC IF INCREMENTED BR SETDAR ;...ELSE USE "DDC" DISC MOV R0,R1 ~(žAL CONVERSION OR TO EXIT CMPB (R0),#', ;COMMA ENDS FIELD BEQ LODA30 ;END OF FIELD 0 ;BC BR LODJ99 LODJ32: CMD2: ;GLOBAL RELOCATION: OFFSET FROM LOAD BASE INTO TEXT -  ;INIT FOR NEXT MODULE AND READ A BLOCK BR NXTB80 ;NO MORE MODULES NXTBLK: CMP BLKP ;NEED TO SPLIT IT UP SWAB R1 ;FIRST GET EXTENSION BITS ASR R1 ASR »~ ž CMP R3,#TMPBUF+5 ;TMP BUF FULL? (ONLY 1ST SIX CHARS USED) BHI LODA20 ;FULL: IGNORE REST ;"ADD" INTO TRAILER MOV R1,R4 ;POINTS TO GLOBAL NAME CMP (R1)+,(R1)+ ;BUMP PT,#OBJBK2 ;ARE WE INTO LOWER SECTOR? BLO NXTB30 ;NO-NEW READ NOT NEEDED NXTB10: ;LOOP HERE F R1 BIC #-3-1,R1 ;ISOLATE THE TWO EXTENSION BITS MOV R1,@10(R5) ;...AND FEED IT TO THEC~Ÿ‡ÿÿÿÿÿÿÿÿªŸÆ¦)ÅÅeL Îxÿ ‡ ¡N N Í ÃŠüÍ ÷ <ÂåÂ%F CHARS TO COMMA MOVB (R0),(R3)+ ;XFER CHAR TO TMP BUF BR LODA20 .PAGE LODA30: PAST NAME JSR PC,SRGLOB ;SEARCH FOR NAME IN LSD BR LDER22 ;GLOBAL SYMBOL SEARCH  SUCCESSIVE SECTOR READS DEC SECTCT ;ANY MORE SECTORS IN MODULE? BLT NXTB90 ;NO DISC - DAE ASL R0 ;LEFT-JUSTIFY LOW TEN ADDRESS BITS ASL R0 ASL R0 !÷ ,„cÍ À‹ëéÑ�"v�ŸøÃh‹ŠË‹þ€ÃœÀ`ÃEÿ ‡·$Í ÄÍ ÃÄPÇ÷ êÿÍ À‹â„ †¿Ä LÀŸ÷ê÷õwZÿÁV #TMPBUF,-(SP) MOV R1,-(SP) EMT R50PAK ;CONVERT TO RADIX-50 MOV (R1)+,ILURE MOV R4,(R3)+ ;PUT ALTERED WORD INTO TEXT JSR PC,TRAPUT ;PUT "ADD" INTO TRAILERE: GO INIT FOR NEXT MODULE ;YES - READ NEXT SECTOR--- MOV #OBJLST,-(SP) ;DISC READ LIST ASL R0 ASL R0 ASL R0 SETDAR: MOV R0,@6(R5) ;OUTPUT SECTOR NUMBER TO DISC ADDR RÂê‰ É‹þ€rœŸ· îÿõpÿüCº ;CHECK CONVERTED NAME... BIS (R1)+,R3 ;...FOR ALL NULLS BEQ LODB10 ;ALL N SUB #6,R0 ;BC LODJ99: JMP LODJ20 ;COMMON RETURN (GET NEXT RLD COMMAND) LODJ34: CMEMT DISCIO ;****READ NEXT SECTOR**** TST OBJERR ;READ ERROR? BNE LDER01 EG .PAGE PRTSEC: ;NOW PRINT SECTOR HEADING MOV SECTOR,R4 MOV PC,R3 * ; INPUT TO GETELT IS: * ; R5 = ADDRESS OF COMMUNICATIONS BLOCKLS: END OF INPUT LINE REACHED LODA40: CMP (R1)+,(R1)+ ;LEAVE ROOM FOR FOUR WORDS PER ENTRY BR LODA10: ;INTERNAL DISPLACED RELOCATION: ;DISPLACEMENT FROM CURRENT PC INTO TEST - ;"SUB BIAS ;YES INC OBJSEC ;BUMP SECTOR # FOR NEXT TIME SUB #128.,BLKPTR ;SHIFT POINTER BACK ADD #SECNUM+6-.,R3 JSR PC,BIN2OCT ;CONVERT SECTOR # TO PARITY ASCII MOV PC,R3 AD * ; SECTOR ZERO IN THE ZBUF * ; DISKIO LIST SE ;...AND GO TO FETCH ANOTHER NAME ; ******************************************************************** LODB10INSTRUCTION INTO TRAILER JSR PC,GETPC ;CURRENT OFFSET FROM LOAD BASE NEG R4 ADD  TOP SECTOR AREA NXTB30: ;PREPARE TO FIND NEXT BLOCK START MOV BLKPTR,R0 MOV #OBJBK2,R1D #HEDBUF-.,R3 JSR PC,PRTHED ; NOW PRINT ONE SECTOR'S WORTH --- MOV PC,R3 ADTUP FOR ROS FILE * ; *  ;ALL NAMES NOW CONVERTED TO RAD50 MOV #NAMBUF,R0 ;INIT POINTER TO LIST OF RAD50 NAMES SU(R1)+,R4 ;FORM (L-(.+2)) MOV R4,(R3)+ ;PUT ALTERED WORD INTO TEXT JSR PC,TRAPUT  ;TOP OF LOWER AREA SUB R0,R1 ;# BYTES REMAINING IN TOP SECTOR ; SEARCH FOR A "1-0" SEQUENCD #DSCBUF-.,R3 MOV R3,@2(R5) ;CURRENT MEMORY ADDRESS REGISTER MOV #-64.,@4(R5) ;DISC WO; OUTPUT FROM GETELT IS: * ; R3 = SECTOR # CONTAINING SPECIED ELEMENTS DI #NAMBUF+4,R1 ;#BYTES IN CONVERTED LIST ASR R1 ;#WORDS ASR R1 ASR  ;"ADD" INTO TRAILER BIS #100000,-2(R3) ;CHANGE IT TO A "SUB" INSTR SUB #4,R0 ;BC TO START NEXT BLOCK NXTB40: MOV #ONEZRO,PTR1.0 ;INIT PTR TO [1] NXTB44: DEC R1 ;END OF TOP BLOCK YERD COUNT: ONE SECTOR MOV #5,@(R5) ;DCS - READ! TSTB @(R5) ;DCS - READY? BPRECTORY ENTRY * ; R2 = ADDRESS OF LAST CELL IN LAST EXAMED BUFFER (ZBUF OR ABUF) * ; R0 = ADDRESS IN BUFFERR1 ;#NAMES CONVERTEDTO RADIX-50 MOV R1,MODCNT ;SAVE IT: # OBJ MODULES TO LINK .PAG BR LODJ99 ;NEXT .PAGE LODJ36: CMD4: ;GLOBAL DISPLACED RELOCATION: ;DIS BLT NXTB10 ;YES - GO READ NEXT SECTOR CMPB (R0)+,@PTR1.0 ;IS NEXT BYTE A MATCH FOR SEQUL .-4 ;NOT YET MOV PC,R0 ADD #DSCBUF-.,R0 ;POINTER TO BINARY BUFFER JS OF STATUS BYTE OF ENTRY IF FOUND * ; = 0 IF ELEMENT NOT FOUND * ;  ; NOW CHECK BATCH DIRECTORY FOR EACH NAME ENTERED LODB20: DEC R1 ;COUNT DOWN # OF NAMES ACEMENT FROM CURRENT PC INTO TEXT ;NO TRAILER ELEMENT JSR PC,GETPC ;GET PC NOW CE? BNE NXTB40 ;NO MATCH - KEEP LOOKING INC PTR1.0 ;MATCH: BUMP TO NEXT BYTE INR PC,FILLBF INC SECTOR BR PRTSEC .PAGE FILLBF: MOV #4,LINCNT ;PRINT FOUR Z STATUS BIT SET IFF ELEMENT NOT FOUND * ; ABUF CONTAINS SECTOR WITH THE ELEMENT'S DIRECTORY ENT LODC10 ;DONE:EXIT LOOP:ALL NAMES WERE FOUND MOV #-1,OBJSEC ;START W/ RELATIVE SECTOR ZERO  MOV R4,R3 ;SAVE IT MOV R1,R4 ;PTR TO GLOBAL NAME CMP (R1)+,(R1)+ ;BODE BIT #1,PTR1.0 ;HAVE BOTH [1] AND [0] BEEN TESTED? BNE NXTB44 ;NO - CHECK FOR LINES OF 16 WORDS EACH NXTLIN: MOV PC,R3 ;PRINT NEXT LINE ADD #LPBUF+6-.,R3 ;ASCII BUFFER TRY (UNLESS* ; ENTRY FOUND IN SECTOR 0. * ; DB30: INC OBJSEC ;BUMP SECTOR # MOV #OBJLST,-(SP) EMT DISCIO ;DISCIO: DIRECP PAST NAME JSR PC,SRGLOB ;SEARCH FOR GLOBAL BR LDER22 ;GLOBAL SYMBOL SEARCH FAIL] .PAGE ; YEA! A [1-0] SEQUENCE HAS BEEN FOUND: NOW PROCESS BLOCK MOVB (R0)+,R1 ;BLO MOV #16.,R1 ;# WORDS PER LINE CVRT: MOV (R0)+,R4 ;NEXT BINARY WORD JSR PC,BIN2OCT * ; SUBROUTINES USED: DISKBF * ; RY SECTOR TST OBJERR ;CHECK FOR ERROR BNE LDER10 ;YES: ERR OUT MOV E SUB R3,R4 ;GET DISPLACEMENT MOV R4,(R3)+ ;PUT ALTERED WORD INTO TEXT 'S BYTE COUNT TSTB (R0)+ ;UPPER BYTE OF BC MUST BE ZERO BNE LDER02 MOV R0,R ;CONVERT IT TO PARITY ASCII ADD #6,R3 ;GET TO END OF CURRENT ASCII MOV #120240,(R3) * ; ALL UNUSED REGISTERS ARE PRESERVED. #8.,R3 ;INIT COUNT OF ENTRIES IN THIS SECTOR MOV #OBJBK1,R4 ;...AND POINTER TO SECTOR DATA SUB #6,R0 ;BC BR LODJ99 ;NEXT RLD LODJ38: CMD5: ;GLOBAL ADDITIVE RELOCATION:  ;SAVE POINTER TO FIRST DATA BYTE ; NOW WANT TO COMPUTE CHECKSUM TO VERIFY CORRECT READ: MOV + ;INSERT A DOUBLE SPACE ADD #6,R3 ;GET IT READY FOR NEXT CONVERSION DEC R1 * ; * ;********************************************* TST OBJSEC ;IS THIS THE 1ST SECTOR (RELATIVE ZERO)? BNE LODB50 ;NO: BYPASS INIT OF ENTR ;PUT SUM OF CONSTANT & GLOBAL (OFFSET::0) INTO TEXT; ;PUT "ADD" INTO TRAILER MOV R1,R2 ;INIT CHECKSUM, WHICH INCLUDES BC SUB #4,R1 ;REDUCE BC TO ELIM "1-0" AND BC WORDS ;MORE WORDS IN THIS LINE? BGT CVRT ;CONVERT NEXT WORD ; BUFFER NOW FULL: TIME TO PRINT ************************** GETELT =. ; ENTRY POINT MOV #ZBUF+8.+FID,R0 ; PUT ADDRESS OF ECOUNT TST (R4)+ ;SKIP BATCH FILE I.D. MOVB (R4),R2 ;# ENTRIES IN DIRECTORY (+1),R4 ;PTR TO GLOBAL NAME JSR PC,SRGLOB ;SEARCH LSD FOR IT BR LDER22 ;GLO MOV R1,BC ;SAVE BYTE COUNT OF DATA ONLY NXTB50: MOVB (R0)+,R3 ;EXTRACT NEXT BYTE AD MOV PC,R1 ADD #LPBUF-.,R1 MOV R1,@#LPADDR MOV #-63.,@#LPWC ;PRINT SIXTENTRY 1, SECTOR 0 IN R0 MOV #ZBFEND,R2 ; ADDRESS OF LAST WORD IN BUFFER CLR R3 ; SE TST (R4)+ ;SKIP SECOND WORD MOV (R4)+,DIRSEC ;NEXT FREE DIRECTORY SECTOR MOL SYMBOL SEARCH FAILURE CMP (R1)+,(R1)+ ;BUMP PAST GLOBAL TO CONSTANT ADD (R1)+,R4 ;C R3,R2 ;ACCUM CHECKSUM DEC R1 ;MORE DATA BYTES TO ADD IN? DEC R1 EN 6-CHAR NUMBERS MOV #4000,@#LPCMD ;PRINT! TST @#LPCSR ;DONE? BPL .-4 CTOR # OF SEARCH GETA10: CMP (R0)+,BFELN1(R5); DOES FIRST TRIAD MATCH? BNE GETA20 ; NO CM (R4)+,BGNSEC ;NEXT FREE BATCH ELEMENT SECTOR SUB #8.,R4 ;RESET SO NEXT INSTRUCTION WILL WORK ST + XSYM MOV R4,(R3)+ ;PUT ALTERED WORD INTO TEXT JSR PC,TRAPUT ;"ADD" INTO TRAILE ;BYTE COUNT INCLUDES CHECKSUM BYTE BGE NXTB50 ;SO GO BACK FOR ONE EXTRA BYTE AT END IN ;NOT YET DEC LINCNT ;MORE LINES? BGT NXTLIN ;YES DEC SECNT P (R0)+,BFELN2(R5); YES. DOES SECOND TRIAD? BNE GETA30 ; NO. CMPB 1(R0),BFTYPE(R5); YELODB40: ADD #16.,R4 ;ADVANCE POINTER TO NEXT ENTRY DEC R2 ;MORE ENTRIES TO C SUB #6,R0 ;BC BR LODJ99 ;NEXT RLD LODJ40: CMD6: ;GLOBAL ADDITIVE DISPL R2 ;CHECKSUM ITSELF INCLUDES THE "1" @BEGIN BNE LDER03 ;CHECKSUM ERROR MOV ;DOES HE WANT ANOTHER SECTOR/BLOCK? BLE .+4 ;ALL DONE. RTS PC ;RETS. DOES TYPE? BNE GETA30 ; NO RTS PC ; YES - ALL DONE RETURN TO USER. GETA20CK? BEQ LDER11 ;EXHAUSTED: NO SUCH NAME FOUND DEC R3 ;DONE W/ THIS SECTOR? ED: ;SUM OF CONST & GLOBAL, LESS CURRENT OFFSET, TO FORM ;DISPLACEMENT TO PUT INTO TEXT;  R0,BLKPTR ;ADVANCE BLK PTR-READY FOR NEXT BLOCK MOV R5,R0 ;RESET LOCAL PTR TO FIRST DATA BYTURN FOR ANOTHER ONE TST (SP)+ JMP START ;GO BACK AND WAIT FOR ANOTHER SEQUENCE : TST (R0)+ ; INCREMENT R0 BY 2 GETA30: ADD #6,(R0) ; ADD 6 TO R0-NOW POINTS TO NEXT ENTRY  BEQ LODB30 ;YES: GO GET NEXT SECTOR IN DIRECTORY LODB50: CMP (R0),(R4) ;INPUT NAME :VS: DIR ;NO TRAILER ELEMENT JSR PC,GETPC ;PC NOW MOV R4,-(SP) ;SAVE IT  BIT #1,R0 ;IS ADDR OF FIRST DATA BYTE ODD? BEQ NXTB70 ;EVEN: NO RELOCATION NEE.PAGE BIN2OCT: ;BINARY TO ASCII CONVERSION - WITH PARITY MOV #6,R2 ;CONVERT SIX CHARS BIN050 CMP R0,R2 ; OR ARE WE OUT OF THE BUFFER? BLO GETA10 ; NOPE. PROCEED WITH SEARCH TORY NAME BNE LODB40 ;NO MATCH CMP 2(R0),2(R4) ;CHECK SECOND WORD BNE  MOV R1,R4 ;GLOBAL NAME PTR JSR PC,SRGLOB ;SEARCH FOR NAME IN LSD BR LDERD MOV BC,R5 ;NEED TO MOVE ALL BYTES BACK ONE NXTB60: MOVB (R0)+,-2(R0) ;SHIFT BYTE BACK ONE : MOVB R4,-(R3) ;PUT NEXT DIGIT IN ASCII BUFFER BICB #370,(R3) ;ISOLATE ONLY THIS OCTAL DIGIT MOV #ABUF+BHEAD+DNAME1 1 YUP. SET R0=ADD OF FIRST ENTRY ; IN ABUF DB40 ;NO MATCH CMP (R0)+,(R0)+ ;MATCH! GET PAST NAME IN "NAMBUF" MOV 14(R4),(R0)+  ;GLOBAL SYMBOL SEARCH FAILURE CMP (R1)+,(R1)+ ;BUMP PAST NAME TO CONST ADD (R1)+,R4 DEC R5 ;MORE BYTES TO MOVE? BGT NXTB60 ;YES NXTB70: MOV BC,R5 ;I CLR -(SP) ;WILL ACCUM PARITY MOVB (R3),TMP ;WANT TO COUNT BITS ASR TMP MOV #ABFEND,R2 ; SET R2 = ADDRESS OF ABUF LAST WORD INC R3 ; ADD 1 TO R3 (SECTOR COUNTER ;... START SECTOR... MOV 16(R4),(R0)+ ;... AND LENGTH, TO INTERNAL DIRECTORY BR LODB20  ;C+XSYM SUB (SP)+,R4 ;C+XSYM-PC= DISPLACEMENT MOV R4,(R3)+ ;PUT ALTERED WORD T R5 WITH DATA BYTE COUNT ADD #2,(SP) ;BUMP FOR "GOOD" RETURN NXTB80: RTS PC ; ************** ADC (SP) ASR TMP ADC (SP) ASR TMP ADC (SP) ASR CMP R3,#DIRMAX ; HAVE WE CHECKED ALL SECTORS BLT GETA50 ; NOT YET CLR ;GO GET NEXT NAME .PAGE LDER10: MOV #10,R4 ;DISC READ ERROR: BATCH DIRECTORY JSR PC,ETO TEXT SUB #8.,R0 ;BC BR LODJ99 ;NEXT RLD .PAGE LODJ42: CMD7: **************************************************** LDER01: MOV #1,R4 ;OBJ MODULE BLOCK READ ERROR (SP)+ ;SEE IF BIT COUNT WAS EVEN OR ODD BCC BIN100 ;WAS EVEN: PARITY BIT NOT NEEDED R0 ; YES. R0 = 0 SINCE NOTHING FOUND RTS PC ; RETURN GETA50: MOV #ABUF,DSKADD PRT LDER11: MOV #11,R4 ;"BFUP" DIRECTORY SEARCH FAILURE JSR PC,ERRPRT ; ******************;SET CURRENT PC AND POINT TO NEW SECTION ;IF .ASECT, THE CONSTANT WILL BE THE NEW PC, AND ITS JSR PC,ERRPRT LDER02: MOV #2,R4 ;BLOCK BYTE COUNT ERROR JSR PC,ERRPRT LDER03: MOV #3BISB #200,(R3) ;MAKE EVEN BY SETTING PARITY BIT BIN100: BISB #060,(R3) ;MAKE CHARACTER ASCII ASR ; SET BUFFER ADDRESS FOR TRANSFER MOVB #RFUN,AFUN ; SET STATUS FOR READ MOV R3,DSKSEC ; ************************************************ LODC10: ; ALL NAMES FOUND IN DIRECTORY. NOW PROCEED WITH PASS 1. ;BASE WILL BE ZERO. ;IF .CSECT, THE CONSTANT WILL REPRESENT THE OFFSET FROM ;THAT SE4 ;OBJ MOD BLOCK CHECKSUM ERROR JSR PC,ERRPRT .PAGE ; " T R A P U T " ; SUBROUTI R4 ;SHIFT FOR NEXT OCTAL DIGIT BIC #100000,R4 ;PREVENT SIGN PROPAGATION ASR SET SECTOR # JSR PC,DISKBF ; GO READ SECTOR BNE BFERDK ; DISK ERROR BR  CLR (R0) ;FLAG END OF NAMES LIST MOV #NAMBUF,NAMPTR ;POINTER TO LIST OF MODULE NAMES ION'S BASE. MOV R1,R4 ;PTR TO SECT NAME SOUGHT CMP (R1)+,(R1)+ ;BUMP TO CONSTANT  PUTS AN "ADD R1,LOC" TWO-WORD INSTRUCTION IN THE TASK ; TRAILER, TO BE EXECUTED WHEN THE LOAD MODULE IS READ INTO CORE PRIR4 ASR R4 DEC R2 ;MORE ASCII DIGITS TO GO? BGT BIN050 ;BACK FOR GETA10 ; GO PROCESS THIS BUFFER .PAGE ; THIS SUBROUTINE, FILECK, IS USED BY ALL BFUP ENTRY POINTS TO: ;  MOV MODCNT,NAMCTR ;# OF MODULES IN LIST MOV #LSDBGN,SYME ;INIT PTR TO DEFINED SYMBOLS  JSR PC,GETSEC ;SEARCH FOR SECTION NAME IN LSD BR LDER23 ;NOT FOUND MOV  ; TO TASK EXECUTION, THUS EFFECTING DYNAMIC RELOCTTION. THE SUBROUTINE ; CALCULATES THE PROPER DISPLACEMENT BETWEEN THEMORE RTS PC PRTHED: MOV R3,@#LPADDR ;INIT PRINTER TO PRINT MOV #-9.,@#LPWC 1) INSURE THAT BFUP IS AVAILABL FOR USE ; 2* READ SECTOR 0 INTO ZBUF, THUS INSURING THAT THE SPECIFIED ; V #LSDBGN,USYME ;INIT PTR TO UNDEFINED SYMBOLS .PAGE LODC20: ;LOOP HERE FOR SUCCESSIVE OBJECT MODUL,PTSECT ;PERM PTR TO SECT NAME IN LSD... MOV R4,R5 ;...ALSO CURRENT PTR SUB #4,R0 NSTRUCITON AND "LOC", ; THE WORD IN THE TEXT NEEDING DYNAMIC RELOCATION. THE FORMULA FOR THE ; DISPLACEMENT BETWEEN THE;WORD COUNT MOV #4000,@#LPCMD ;PRINT! TST @#LPCSR ;DONE? BPL .-4 ROS FILE IS DEFINED IN ROS. ; 3) SETING THE STATUS BITS & ROTO 1 IF THE FILE HAS NOT BEEN ; INITIALIZED A JSR PC,NXTMOD ;INIT FOR NEXT OBJ MODULE BR LODC19 ;DONE WITH ALL OBJ MODULES LO ;BC (MORE BELOW) ; CONTINUE AS IN "CMD8" LODJ44: CMD8: ;MODIFICATION TO PC: ".=.+C" ;BADD" INSTRUCTION AND ITS OBJECT IN THE LOAD ; TEXT IS: DISPL = CURPC + OFFSET - TRAPC ; THIS DISPLAC ;NOT YET RTS PC .PAGE ADRESS: .WORD 0 KEY: .WORD 0 ;DEVICE SELECTION KEY LIS A BFUP FILE. IF THE FILE IS INITIALIZED, RO ; IS SET TO 0 AND THE STATUS BITE ARE SET ACCORDINGLY. ; ERROR EXIT30: JSR PC,NXTBLK ;GET NEXT BLOCK BR LODC19 ;DONE WITH ALL OBJECT BLOCKS LODD00: P PC BY ADDING NEW CONST TO CURRENT PGM SECT BASE MOV BASE(R5),R4 ;CURRENT SECTION'S BASE ADD ENT IS NEGATIVE, SINCE ALL REFERENCES FROM THE TRAILER ; WILL BE BACKWARD. TRAPUT: ;SUBROUTINE TO BUILD TRAILERNCNT: .WORD 0 SECNT: .WORD 0 ;# OF SECTORS TO PRINT SECTOR: .WORD 0 ;CURRENT SECTOR BEINS ARE TAKEN IF ITEMS 1 OR 2 ARE NOT CORRECT. ; ONLY REGISTER R0 IS USED AND NOT RESTORED. ; FILECK =. ;HERE TO PROCESS SUCCESSIVE GSD BLOCKS ; R0 POINTS TO FIRST DATA BYTE IN BLOCK ; R5 CONTAINS BYTE COUNT OF D(R1)+,R4 ;ADD CONSTANT TO BASE VALUE MOV R4,CURPC ;NEW VALUE OF NEXT TEXT BLOCK'S BASE  ADD #4,TRAPC ;ADVANCE TO NEXT OPEN CELL AFTER THIS 1. MOV TRAILPOINTER,R3 ;NEXT OPEN TRAILERG DUMPED TMP: .WORD 0 HEDBUF: .BYTE '-,'S,'E+200,'C+200,'T+200,'O+200,'R+200,'-,'- DISCID: .BYTE 0,'< SECNUM: .= ; ENTRY POINT CLR (R5) ; CLEAR BFUP COM BLOCKS ERROR WORD TSTB BFBUSY ; IS BFUA BYTES TST BLOCK1 ;IS THIS FIRST BLOCK IN MODULE? BEQ LODD10 ;YES  ;(AS OFFSET FROM LOAD MODULE'S BASE) TST (SP)+ ;POP CURRENT COMMAND CLLOT MOV #60167,(R3)+ ;"ADD R1,A" INSTRUCTION JSR PC,GETPC ;GET VALUE OF CURRENT LOAD O.+6 .BYTE '>+200 MEMBUF: .BYTE '-,'-,'C+200,'O+200,'R+200,'E+200,'-,'-,'-,'-,'< MEMADR: .=.+6 .BYTP IN USE BNE BFER08 ; YES - ERROR INCB BFBUSY ; SET BFUP BUSY FLAG MOVB C (R0) ;IS THIS A GSD BLOCK? BEQ LODD20 ;YES: PROCEED DEC (R0)  TXTBC ;AVOID ALTERING NEW [CURPC] IN "TXTOUT" SUB #4,R0 ;2 WDS FOR CMD8; 4 WDS FOR CMDSET SUB TRAPC,R4 ;CALC BACKWARD DISPLACEMENT MOV R4,(R3)+ ;STICK IT BEHIND "ADD" E '>+200 DSCTAB: ;TABLE OF DISC ADDRESSES FOR BOTH DISCS ; FOR DDC DISC: .WORD 165302 #RFUN,ZFUN ; SET SECTOR 0 FOR READ MOV 2(R5),ABUF ; MOV 2(R5),ZBUF ; SET BOTH BUF;IS IT GSD END? BEQ LODC20 ;YES: GET NEXT OBJ MODULE CMP (R0),#4 ;IS IT MODULE  ; PC COMMANDS MUST BE LAST IN RLD BLE LODJ99 ;DONE: O.K. ; IF NOT DONE, THEN NEXT COMMAND MUST AL NOW SEE IF BUFFER IS FULL, AND WRITE IT OUT IF SO: CMP R3,#TRAILBLOCK+64. ;AT END YET? BL ;DISC CONTROL STATUS AND COMMAND REG .WORD 165300 ;DISC MEMORY ADDRESS REG .WORD 165304 FERS WITH FILE ID. MOV #ZBUFF,R0 ; GET ADDRESS OF BUFFER FOR SECTOR ZERO MOV R0,DSKADD D? BEQ LODC20 ;YES: GET NEXT MODULE BR LODC30 ;NO: GET NEXT BLOCK LODD10:  BE PC TYPE CMPB #PCMD1,(R1) ;IS NEXT COMMAND "PC DEFINITION"? BEQ LODJ99 ;YES: O.K. TRAP20 ;NOT YET MOV #TRALST,-(SP) ;LIST FOR WRITING TRAILER EMT DISCIO IN ;DISC WORD COUNT .WORD 165306 ;DISC ADDRESS REG .WORD 165310 ;DISC ERROR REGISTER; SET BUFFER ADDRESS FOR TRANSFER JSR PC,DISKBF ; READ IN SECTOR 0 CMP #7,DSKERR ; WAS C BLOCK1 ;INDICATE FIRST BLOCK PROCESSED DEC (R0) ;CHECK THAT IT IS GSD BNE  CMPB #PCMD2,(R1) ;IS IT "PC MODIFICATION"? BEQ LODJ99 ;YES: O.K. .PAGE LO TRASEC ;BUMP TRAILER SECTOR COUNT MOV #TRAILBLOCK,R3 ;PREPARE TO RESET POINTER TRAP20: ; FOR RF-11 DISC: .WORD 177460 ;DISC CONTROL STATUS AND COMMAND REG .WORD 177464 THIS A REAL ROS FILE? BEQ FLCK10 ; NO DISK I/O ERROR - ALL IS AOK. BEQ BFER01 ;  LDER13 ;NOT GSD BEGIN TSTB FLAGS+1(R0) ;ENTRY TYPE BNE LDER14 ;FIRST ENTRY46: CMD9: ;SET PROGRAM LIMITS CLR (R3)+ ;FIRST TEXT WORD: RELATIVE ZERO MOV PRSIZE,(MOV R3,TRAILPOINTER ;NEW POINTER RTS PC .PAGE ; " T X T O U T " ; ("TXTBC" MAY BE ZE ;DISC MEMORY ADDRESS REG .WORD 177462 ;DISC WORD COUNT .WORD 177466 ;DISC ADDRESS NO. BR BFERDK ; YES. THEREFORE A REAL I/O ERROR. FLCK10: CMP 12.(R0),(PC)+ ; LET'S SEE IF THIOT MODULE NAME LODD20: ;HERE FOR EACH SUCCESSIVE ENTRY UNTIL BLOCK END CMP -(R5),(R0)+ ;BUMP BC) ;SECOND WORD: TOP OF PROGRAM INC (R3)+ ;MAKE FIRST AVAILABLE BYTE JSR PC,TRAPUT , WHICH INDICATES "CURPC" HAS BEEN SET TO A NEW ; VALUE BY AN RLD COMMAND. IF THE NEW PC STILL FALLS WITHIN BLOCK #1, ; REG .WORD 177470 ;DISC ADDRESS EXTENSION REG LPBUF: .=.+132. DSCBUF: .=.+128. ;DATE: 22-MAR-72 S IS A BFUP FILE? .RAD50 /.BF/ ; FIRST WORD OF FLAG BNE FLCK30 ; NOT BFUP FILE  PTR PAST GSD COMMAND SUB #8.,R5 ;BLOCK END? BLT LODC30 ;YES: GO GET NEXT ONE  ;CAUSE BIAS TO BE ADDED TO BOTH WORDS ADD #2,OFFSET JSR PC,TRAPUT BR LODJ99 ;  TRANSFER WILL OCCUR. IF THE NEW PC IS INTO THE SECOND BLOCK, OR ; OUTSIDE THE TWO BLOCKS, BOTH BLOCKS WILL BE WRITTEN OU; M W KLEIN .END START CMP 14.(R0),(PC)+ ; FIRST WORD OK - IS THE SECOND? .RAD50 /UP./ ; SECOND WORD OF FLAG.  MOVB FLAGS+1(R0),R2 ;ENTRY TYPE CMPB R2,#GSDMAX ;IS IT LEGAL? BGT LDER15 ******************************************************************* LDER22: TST (SP)+ ;POP SAVED PC  AND THE ; APPROPRIATE NEW TWO BLOCKS WILL BE READ IN. IN MANY CASES THIS WILL ; MEAN THAT A PARTIALLY-WRITTEN TEXT BLOCK4~Pvw Jà€� D”ÄE€ÿ BNE FLCK30 ; NOT A BFUP FILE CLR R0 ; IT IS A BFUP FILE SET R0 & STATUS BITS ;NO MOV R0,R1 ;ENTRY POINTER ADD #8.,R0 ;NEXT ENTRY MOV R1,R4  MOV #22,R4 ;GLOBAL SYMBOL SEARCH FIALURE JSR PC,ERRPRT LDER23: MOV #23,R4 ;SEC2 WILL BE WRITTEN TO DISC, ; ONLY TO BE READ BACK IN AGAIN INTO BLOCK #1. IN THIS WAY, ; WE CAN BUFFER OUR TEXT OUT ONE SÄå@!!à à à Åà à CaaŠíÐÂéw àŽŽ‡÷~ÈvÄe! ÄeåÄe Äß Ýw à߀�ÂÄ6w Ì ‡ã RTS PC ; RETURN FLCK30: MOV #1,R0 ; SET R0 AND STATUS BITS - NOT BFUP RTS PC  ;SECONDARY POINTER USED BY VARIOUS RTNES ASL R2 ;BYTE INDEX JMP @GSDTAB(R2) ON NAME SEARCH FAILURE JSR PC,ERRPRT LDER24: MOV #24,R4 ;FATAL ERROR: PC CMD NOT LAST IN RLD ŒTOR AT A TIME, AND PROTECT THE ; INTEGRITY OF OUR NEWLY CREATED TEXT.) TXTOUT: ;SUBROUTINE TO OUTPUT ACCUMULATEŒûÅ‹W¡Åe ÅeÅe Åe Q‘Ô ÂŠèÂãÄ@(ßU î~@wê êß ê÷xÿ�ÿ÷•B›7ŠnÅÅe°×-zÅe ÷Š�·ŠŒ ;FILE RETURN. .PAGE ;*********************************************************************** ; Œ .PAGE GSDTAB: .WORD LODE00 ;(0) OBJ MOD NAME .WORD LODE20 ;(1) SECTION NAME Œ JSR PC,ERRPRT .PAGE LODL00: ;NOW DONE WITH PASS 2: OUTPUT ANY REMAINING TEXT, THEN ; ŒTEXT IF BUFFER IS FULL ADD TXTBC,CURPC ;BUMP LOC'N CTR TO BGN OF NXT TEXT BLOCK ADD TXTBC,TXTPŒ÷xÿ`÷xÿ^×-V÷E?JÄFÃÃes÷ æÃÃeX÷ À.÷ ~—~¸w÷e€$ìýUÀ7Á� � ÁEüÿ}À À À Œ * ; DISKBF IS AN INTERNAL SUBROUTINE USED BY BFUP TO DO DISK IŒ .WORD LODD20 ;(2) INTERNAL SYMBOL (IGNORE) .WORD LODD20 ;(3) TRANSFER ADDRESS (IGNORE) Œ OUTPUT THE TRAILER. FIX UP MONITOR TASK TABLES; EXIT. MOV #64.,TXTCNT ;WANT TO WRITE ONLY ONE SECTORŒ ;ALSO BUMP POINTER IN LOCAL TEXT BLOCK MOV CURPC,-(SP) ;SAVE FOR WORK BELOW MOV TXTORG,R4 ŒÀ À =ÄôÃÃe÷ ŒÃÃeì÷ ÀÃÃežýýÀÿýý‹ý€ÀÀe‚÷ ã~0x· ¶Þ÷ªÃÃeîÁ÷ @ÃeÓ  ÃeŒ USING * ; THE EMT DISCIO. IT PUSHS THE LIST ADDRESS ON THE STACK, USES THE EMT* ; AND, ON RETURN, CHECKS THE STATUS.Œ .WORD LODE40 ;(4) GLOBAL SYMBOL ; ******************************************************************** Œ JSR PC,TXTO10 ;GO WRITE OUT FINAL TEXT SECTOR MOV #207,@TRAILPOINTER ;[RTS PC] INTO FŒ ;PC VALUE @ BGN OF RESIDENT TEXT MOV R4,R3 ;SAVE ALSO FOR CALCS BELOW CMP (SP),R4 ŒõÁÁeÈ_êßÁÿ êßêß êý€÷ jß÷ f‡Ö w°þÂ#‘ËÅø& ÷’P· LN · FN ~¨x· @N – †ËÕ€ËÕ0„ ÄE€„ „  äŒNON-ZERO STATUS WILL CAUSE THE * ; THE ERROR STATUS TO BE SET IN THE COMMUNICATIONS BLOCK * ; ŒER13: MOV #13,R4 ;FIRST MODULE BLOCK NOT "GSD" JSR PC,ERRPRT LDER14: MOV #14,R4 ;FŒAL TRAILER WRD MOV #TRALST,-(SP) ;LIST FOR TRAILER EMT DISCIO ;WRITE OUT FINAL TRAILERŒ ;IS NEW PC BELOW TEXT IN BLOCK ONE? BLO TXTO10 ;YES - REPLACE TEXT ADD #128.,R4 Œßêß÷ÿ êßêß êý€‡-SÅÃÔÏÒ--<¾--ÃÏÒÅ----<¾ÀêÂêÄêÆêÈê0ÿ4ÿ~ y2ÿ6ÿ8ÿŒ * ; THE LINKAGE IS 'JSR PC,DISKBF'. ŒST ENTRY IN GSD NOT OBJ MOD NAME JSR PC,ERRPRT LDER15: MOV #15,R4 ;ILLEGAL GSD ENTRY DECLARATIONŒECTOR MOV TRSCSV,TXTSEC ;INIT TO READ IN FIRST TRAILER SECTOR CLRB TXTR.W ;READ Œ ;PC OF FIRST BYTE IN SECOND TEXT BLOCK CMP (SP),R4 ;NEW PC IS ABOVE BLOCK1:IS IT BELOW BK2? ŒK~˜yŒ * ; * ;*******************************************Œ JSR PC,ERRPRT LODC19: JMP LODF00 ;END OF READING FIRST PASS OVER OBJ MODS .PAGE ;***Œ MOV #TXTLST,-(SP) EMT DISCIO ;READ FIRST TRAILER SECTOR MOV TRAPC,R0 ;BYTŒO TXTO50 ;YES - NO NEED TO WRITE OR READ .PAGE TXTO10: ;HERE TO WRITE CURRENT TEXT OUT AND Œp~zŒ************************** DISKBF =. ; ENTRY POINT MOV #DISKLST,-(SP) ; PUSH DISK I/O Œ***********PROCESSING FOR INDIVIDUAL G S D ENTRIES************** ; ON ENTRY TO EACH ROUTINE, R1 AND R4 POINT TO CANDIDATEŒ IN PROGRAM PLUS TRAILER ASR R0 ;# WORDS ADD #3+PHDSZE,R0 ;TOTAL WORDS FROM TOP OFŒAD NEW TEXT IN--- MOVB #1,TXTR.W ;WRITE MOV #TXTLST,-(SP) EMT DISCIO Œ�‚„‡ˆ �‹À�Ž                 !"£$¥¦'(©ª+¬-.¯0±²3´56·¸9:»<½¾?ÀABÃDÅÆGHÉÊKÌMNÏPÑÒSÔUVרYZÛ\ݱ~ˆzŒST ADDRESS EMT $DSKIO ; USE EMT BISB DSKERR,1(R5) ; SET DISK T/O STATUS BITS INTO UPPEŒNTRY ;*******MODULE NAME******** LODE00: JSR PC,SRMODN ;SEARCH FOR MODULE NAME BR LDŒEADER CLRB R0 ;GETTING # OF PAGES SWAB R0 ;# CORE "PAGES" MOV ŒRITE OUT CURRENT RESIDENT TEXT ASR R3 ;NOW GET SECTOR FOR NEW PC BIC #100000,R3 Œ'ABÃDÅÆGHÉÊKÌMNÏPÑÒSÔUVרYZ     �‚„‡ˆ ‹À                                                              .<(+ ¦     7ŒBYT Œ16 ;NOT UNIQUE MOV SYME,PTROBJ ;POINTER TO NEW MODULE NAME IN LSD JSR PC,INSYME Œ PRSIZE,R1 ASR R1 ;WORDS IN PGM ONLY ADD #3+PHDSZE,R1 ;#WORDS IN PGM PLUS HEADERŒUPPRESS EXTENDED SIGN ASR R3 ASR R3 ASR R3 ASR R3 ASR R3 Œ~{    !$ª©» -¯        Þ¬¥ ¾?          :£À'½" ABÃDÅÆGHÉ       ÊKÌMNÏPÑÒ        SÔUVרYZ       \  ÛÝ           ABÃDÅŒRROR # " ERRNUM: .BYTE 0,0,0 .BYTE CR ERNEND: .EVEN ; **************************************************Œ;GO INSERT ENTRY INTO LSD BR LODD20 ; ********************************************************************Œ CLRB R1 SWAB R1 ;# PAGES EXCLUDING TRAILER SUB R1,R0 ;# PAGES FREŒ MOV R3,R4 ;SAVE NEW SECTOR (RELATIVE TO TEXT BGN) ADD BGNSEC,R3 ;SECTOR RELATIVE TO ŒHÉ    ¨~x{   ÊKÌMNÏPÑÒ        SÔUVרYZ      0±²3´56·¸9      Œ**************** HEDING: .WORD END01-4-. .WORD 0 .BYTE FF .ASCII "**** ROSLOD LOAD MAŒ LDER16: MOV #16,R4 ;MODULE NAME NOT UNIQUE JSR PC,ERRPRT .PAGE ;*******SECTION NAŒTO RELEASE AFTER RELOCAT'N MOVB R0,TXTBK1 ;LOAD INTO INDEX BYTE AT TOP OF TRAILER MOVB R1,TXTŒGIN OF BATCH FILE MOV R3,TXTSEC ;SET FOR UPCOMING READ & SUBSQNT WRITES CLRB TXTR.W Œ/~ð{Œ**** END01: .EVEN .PAGE MODULE: .WORD END03-4-. .WORD 0 .ASCII 'MODULE TITLE: "' Œ******** LODE20: JSR PC,PTGLOB ;SEARCH FOR IT IN LSD BR LODE22 ;NOT FOUND - GO Œ1+1 ;UPPER TRAILER INDEX TO FIRST FREE PAGE INCB TXTR.W ;WRITE MOV #TXTLST,-(SP) Œ;PREPARE FOR NEW TEXT READ MOV #TXTLST,-(SP) EMT DISCIO ;READ IN NEW TEXT ASL Œ$‚Pl2~h| L/P 1 PARITY ERROR L/P 1 NOT READY L/P 1 ABORTEDÊ{N|&f¦æ&f€ŒTLE: .BYTE 0,0,0,0,0,0,'",LF .ASCII "SECTION ENTRY OFFSET SIZE" .BYTE LF END03: .EVEN ŒSERT IT BITB #UNDEF,FLAGS(R1);IS IT DEFINED? BNE LODE24 ;YES -(BYPASS UNDEF WORK) Œ EMT DISCIO EMT EXIT ;****** E N D O F L O A D E R****** .PAGE REGSAV: MOV Œ R4 ;NOW GET PC AT BEGIN OF NEW TEXT ASL R4 ASL R4 ASL R4 ASL Œ ÷ ¨ 7¬”ÿÄ0÷ ~à|T…„ƒ‚�€Ž‡œ— ÂÉ Ä çÄ ä÷ ºÄ¬Æ_:} @ÈCóÄ ñÃâCà Œ.PAGE SECT: .WORD END04-4-. .WORD 0 .BYTE '< SECNAM: .BYTE 0,0,0,0,0,0 .BYTE '>Œ JSR PC,SQUISH ;NO: REMOVE FROM UNDEF AREA SUB #BPSYM,USYME ;AND ADJUST UNDEF PTR LODE22: MOŒR4,-(SP) ;R5 PUSHED BY "JSR" MOV R3,-(SP) ;SAVE REST... MOV R2,-(SP) MOV Œ R4 ASL R4 ASL R4 MOV R4,TXTORG ;NEW BEGIN PC MOV (SP),R3 ŒÈCñóæþÿßàþÿÈ *:´{2´{ÄRàÄ~X}Hà´Šõ]0 ó ª{ Ÿþÿð¥ð öþÿ…„ƒ‚�€& ÷ ‚áwxä0£ˆ ŸŒT SECVAL: .BYTE 0,0,0,0,0,0,HT SECSIZ: .BYTE 0,0,0,0,0,0,HT CUMSIZ: .BYTE 0,0,0,0,0,0 END04: .EVEN ; ******Œ R1,R4 ;INSERT NEW SECTION NAME INTO LSD MOV SYME,PTSECT ;POINTER TO SECTION NAME IN LSD Œ R1,-(SP) MOV R0,-(SP) JMP (R5) ;...AND RTN REGPOP: ;RESTORE RGS Œ;PC FOR BEGIN OF NEXT TEXT BLOCK SUB R4,R3 ;GET OFFSET FROM TOP OF TEXT AREA ADD #TXTBKŒÄ™Ÿþÿóª{s¬{3¼{3 º{3 ¾{³Ä{sÀ{Z~Ð}3 À{3 Â{÷ Â*zñ ªz÷ Ð÷ & »‰ ߀þÿÂÄ{€®{Á¬{÷ äŒ************************************************************ ENTRY: .WORD END05-4-. .WORD 0 .BYTŒ JSR PC,INSYME ;INSERT NEW NAME IN LSD BR LODD20 LODE24: ;SECTION NAME FOUND ALREADY ŒT (SP)+ ;POP UNNEEDED R5 MOV (SP)+,R0 ;RESTORE OTHERS... MOV (SP)+,R1 ŒR3 MOV R3,TXTPTR ;ACTUAL POINTER TO NEXT OPEN TEXT WORD TXTO50: TST (SP)+ ;POP SAVED PC Œ÷ ÖÉ ÂªzwòÂ*z÷ ’÷ æMæþÿÂÄ{ßàþÿ2®{R~H~„Äe®{2´{ÈŸþÿĺ{ôŠõ]÷ ”�¬ æº{& ÷ Œ HT MFLAG: .BYTE 0 ;PLACE TO PUT POSSIBLE "M" FLAG GLOBAL: .BYTE 0,0,0,0,0,0,' GLBVAL: .BYTE 0,0,ŒFINED IN LSD CMPB FLAGS+1(R4),#SECTN ;IS IT A SECTION NAME,TOO? BNE LDER17 ;NO - DOUBŒMOV (SP)+,R2 MOV (SP)+,R3 MOV (SP)+,R4 RTS R5 ;...AND RTN ; **Œ RTS PC .PAGE LPCALL: ;COMMON ROUTINE TO MAKE EMT TO LINE PRINTER MOV #MAPLST,-(SPŒÖ fæû ¼{ƒ…ÂÄ{Â÷ 2Äò ®{Ò Ä ú)€®{ ÷ ¶ð ~À~ ·s¬{3¼{³Ä{3 º{3 ¾{Â*zsÀ{ªz3 À{Œ0,0,0 END05: .EVEN .PAGE UNDHED: .WORD END06-4-. .WORD 0 .ASCII /**********/ Œ DEFINITION ERROR MOV R4,PTSECT ;SECTION NAME POINTER TO ORIG ENTRY CMP VALR(R4),VALR(R1) Œ**************************************************************** GETPC: ;LOAD R4 W/ REL ADDR OF CURRENT TEXT ELEMEŒ EMT LPRNTR ;LINE PRINTER RTS PC ; ************************************************ŒÂ{÷ Æ÷ ð÷ M÷ æ3 ª{æ^|÷ šÖ M³ Â{ó%Â{÷ ¢÷ À÷ èMæl|÷ ~8®ñwðþæ„|÷ œ÷ œ3 Â{Ä^|&ôlŒ.BYTE LF,LF .ASCII "UNDEFINED REFERENCES" .BYTE LF END06: .EVEN ; ****************************Œ ;COMPARE SECTION SIZES BHIS LODD20 ;ORIG WAS BIGGER: LEAVE IT MOV VALR(R1),VALR(R4) Œ MOV CURPC,R4 ;PC @ TEXT BLOCK START ADD OFFSET,R4 ;OFFSET SPECIFIED WITH RLD COMMANDŒ****************** ; SUBROUTINE "BINARY TO OCTAL ASCII CONVERSION" ; INPUT: R4 = BINARY NUMBER Œ<÷ Ö MCfÁ¬{ÂÄ{€®{÷ rÖ …ÄÈ{Ë÷ Z³ Â{×,Â{´æ<÷ ÒÖ ‡ð~°Ö …÷ |wvþæ&ff& À®|ž{Œ************************************** UNDDEF: .WORD 6 .WORD 0 UNDNAM: .BYTE ,,,,, ;SIX CHARSŒ ;REPLACE WITH NEW BIGGER SIZE BR LODD20 ; **************************************************************Œ RTS PC ; ******************************************************************** SYMOVF: ;CHECK FOR SŒ; R3 = DESTINATION END ADDRESS ; R2 = ITERATION LENGTH (IF ENTER @"B2ONTŒÁes!À{93 Æ{ DÔ! 3 ®| ³ Æ{ Ä% 3 ®| ÷ RÄ• ÷ J … s!À{äÀ5Е s¾{Àì,~(€®|„ Ö …�€Ö ‡Ä  ŒN NAME OF UNDEFINED REF .PAGE BC: .WORD 0 ;BYTE COUNT BGNSEC: .WORD 0 ;BEGŒ**** LDER17: MOV #17,R4 ;SECTION NAME CONFLICT W/GLB OR MOD NAME JSR PC,ERRPRT .PAGŒBOL TABLE OVERFLOW CMP USYME,#LSDEND-BPSYM BLOS SYMOV1 ;NOT YET AT END MOV Œ) BIN2OC: MOV #6,R2 ;INIT ITERATION LENGTH (NORMAL 6 CHARS) B2ONTA: ;ENTER HERE WHEN PRE-SETTINGŒîÎ5÷áÅ îÄÙ¶ 6 & „`“3 °|Ž Ö ‡ 4ƒW 1ƒ ÿŸ.†W ÿŸ+†À5(Á5%D „ „ �~ €ÄeÿŸD ‚ ñŸ‚𥌠SECTOR FOR BUILDING LOAD MODULE BLKPTR: .WORD 0 ;POINTER TO CURRENT PLACE IN INPUT BLOCK BLOCK1: 0 Œ ;*******GLOBAL SYMBOL******** (HERE AT LAST...) LODE40: BITB #UNDEF,FLAGS(R1);REF OR DEF? BEQ LODE50 Œ6,R4 ;OVERFLOW: "TH-TH-THAT'S ALL, FOLKS!" JSR PC,ERRPRT SYMOV1: RTS PC .PAGE SRMODNŒTERATION LENGTH MOVB R4,-(R3) ;ALSO LOOP RETURN FOR NEXT OCTAL DIGIT BICB #370,(R3) ;LŒ !ƒ!õŸ†Ä5  ‡ð¥ùćććß@ê‡Äê& Ä5 Ä5Ä5Ö ‡– ‡Ö ‡~�ó j| 3ŒLAG FOR FIRST BLOCK IN MODULE CURPC: .WORD 0 ;CURRENT VALUE OF RELATIVE "PC" DIRSEC: .WORD 0 Œ ;REF JSR PC,PTGLOB ;DEF - SEE IF IT IS ALREADY IN LSD BR LODE44 ;NOT FOUND Œ ;SEARCH DEFINED SECTION OF LSD FOR A MODULE NAME ; INPUT: R4 POINTS TO RAD50 NAME ; ŒVE ONLY LEAST SIGNIFICANT THREE BITS BISB #060,(R3) ;CHANGE TO ASCII CODE ASR R4 Œ  ê÷ šúß ê êßÊ{êßÈêÄ^|ôl&æ<÷ Ö ‡fÄ®|ÅÅ ýÀåÄÄ Ä Ä Äež�0ð0ŠÈt~��Œ ;NEXT AVAILABLE DIRECTORY SECTOR MODCNT: .WORD 0 ;COUNT OF # OF MODULES TO LINK NAMCTR: 0 ;COUNTŒ BITB #UNDEF,FLAGS(R4);FOUND: IS IT ALREADY DEFINED? BEQ LODE42 ;NO: GO REMOVE IT FROM UNDEF AŒUTPUT: R4 POINTS TO NAME IN LSD (IF FOUND) ; R4 UNCHANGED IF NOT FOUND ; CALL: JSRŒ;BEGIN SHIFTING FOR NEXT OCTAL DIGIT BIC #100000,R4 ;PREVENT SIGN PROPAGATION ASR R4 Œ÷ ‚Ã…À®|‡ÃwÅÀ®|@aAa… !Å ý@Á¬{…ÂÄ{wjü ê‡f  ÅÅ Â`üBa…‡„fÅP|æþÿßàþÿõ 5 ŸÖŒ FOR NAMES INPUT FROM TTY NAMPTR: 0 ;POINTER TO NAMES IN INPUT LIST OFFSET: 0 ;KEEPS OFFSET FROM BEGIN OF LOŒA BISB #DBLDEF,FLAGS(R4) ;FLAG OLD ONE AS A DOUBLER BISB #DBLDEF,FLAGS(R1) ;ALSO FLAG NŒC,SRMODN ; BR A ;FOUND ; BR B ;NOT FOUND MOV ŒASR R4 DEC R2 ;MORE ASCII DIGITS TO GO? BGT B2ONTA ;BACK FOR MORE Œ~‚þÿf÷ Ã…Ž¤‡Ÿþÿ…Ž´‡1 ‡· <ú‡7 6ú‡& œÎ & & & ÷ ÌÛÖ ‡ ßö}€ßà‚÷ Œþ÷ fÿÀ®{Á´{B  ü‡‡Œ MODULE ONEZRO: .BYTE 1,0 PRSIZE: .WORD 0 ;CURRENT PROGRAM SIZE PTROBJ: .WORD 0 ;POIŒ ONE BR LODE44 ;BYPASS REMOVAL LODE42: JSR PC,SQUISH ;REMOVE FROM UNDEFINED TABLE Œ R0,-(SP) ;SAVE IT MOV #LSDBGN,R0 ;START OF LSD SRMOD1: CMP R0,SYME ;REACHED END OF Œ RTS PC ;ASCII BUFFER FILLED: RETURN ; **************************************************************ŒþÿßàÀ~€‚þÿþ% f…µ…ŸþÿŽ6 ‡Ÿþÿwdéöeþ¢‚6 ‡Pþ‡ŒER TO CURRENT OBJ MOD ENTRY IN LSD PTR1.0: .WORD 0 ;POINTER FOR DETECTING ONE-ZERO SEQUENC PTSECT: .WORD ŒSUB #BPSYM,USYME ;AND ADJUST ITS POINTER LODE44: MOV R1,R4 ;AGAIN POINT TO INPUT ENTRY JSR ŒFINES? BLO SRMOD2 ;NOT YET MOV (SP)+,R0 ;NOT FOUND! ADD #2,(SP) Œ**** ERRPRT: ;ERROR MESSAGE PRINTING ROUTINE ; R4 ALREADY INITED WITH BINARY ERROR NUMBER MOV ŒÖ‚à‚î‚ü‚ ƒ©~ø‚pþrþtþ CR 1 ERROR CR 1 SPUR INT f¦æ&f� ¶ 6 @ ÷ ºBœ ³ ø‚Ä Œ0 ;POINTER TO CURRENT SECTION NAME IN LSD SECTCT: .WORD 0 ;SECTOR COUNTER WHEN READING IN A Œ PC,INPTRH ;INSERT IT ALPHABETICALLY IN THIS SECT'N ;IF IT WAS DOUBLY DEFINED, BOTH ENTRIES ARE FLAGGED AS SUCH. THEŒ ;ALTER RETURN FOR "NOT FOUND" RTS PC SRMOD2: CMPB #OBJMN,FLAGS+1(R0);THIS ENGRY AN OBJ MOD NAME? Œ #ERRNUM+2,R3 ;LAST CHAR IN ASCII BUFFER MOV #3,R2 ;A 3-CHAR MESSAGE NUMBERR JSR PCŒþÿÄÄ Ä 1~pƒ…„ƒ‚�€´‡ÄBÀ€ÈC @ÈCìÄ êÃâCà ó¥ÈCñóæþÿßàþÿÉ Ó{Æ‚sÆ‚÷ èÙÄÞÙ´Šõ]ŒDULE SYME: .WORD 0 ;NEXT OPENING IN LSD FOR DEFINED SYMBOL TRAILPOINTER: .WORD 0 ;NEXT SPACE ŒIRST ;ENTRY WILL BE USED AS THE REF'D VALUE. THE MAP WILL SHOW ALL OF THEM. BR LODD20 ; * * * GLOBAL REF *ŒBEQ SRMOD3 ;YES: IS NAME SAME? SRMOD4: ADD #BPSYM,R0 ;NOT AN OJB MOD BR SRMOD1 SRMOŒ2ONTA ;USE SECONDARY ENTRY POINT TO CONVERSION MOV #ERRMSG,TTYBUF ;INIT FOR PRINTING ERROR MESSAGE Œ 0 ó È‚&Ÿþÿñ¥÷ ¾Ùú~胤…„ƒ‚�€¤‡æþÿ€ ¶ ¶ …„ƒ‚�& æbwðÚ³ È‚Ÿþÿ3Ê‚ó Ò‚ ñ‹Œ TRAILER BLOCK TRAPC: .WORD 0 ;TRAILER "PC" TRSCSV: .WORD 0 ;SAVE OF INITIAL TRAILER SECŒ * LODE50: JSR PC,PTGLOB ;IS IT IN LSD ALREADY? BR LODE52 ;NOT FOUND: INSERT IT Œ: CMP (R4),(R0) ;FIRST HALF-NAME MATCH? BNE SRMOD4 ;NO CMP 2(R4),2(R0) ;YŒ MOV #TTYLST,-(SP) EMT TTYOUT ;REQUEST MESSAGE EMT EXIT ;CURRENTLY ALL EŒóèˆÒ‚óè‹Ò‚÷ ¶ÁĂĿƒ÷ fó´a~`„¾‚ÅÖ‚õ”‡fæ<÷ þÖ ¯‰ ó È‚æƒ÷ 6Mó ΂ß5@pþ/MÀpþ÷ þŒR TSWICH: 0 ;SWICH USED TO DIRECT FLOW AFTER TEXT OUTPUT TXTBC: .WORD 0 ;BYTE COUNT OF DATA IN CURŒ LODD20 ;FOUND: NO NEED TO DO ANYTHING LODE52: JSR PC,INUSYM ;INSERT AS AN UNDEFINED BR Œ: SECOND HALF-NAME MATCH? BNE SRMOD4 ;NO ; FOUND! MOV R0,R4 ;NOW POINTS TOŒORS TERMINATE LOADER .PAGE TTYLST: .WORD 1 ;TELETYPE I/O LIST .BYTE 0,2 ;DŒw"À5€ûÀ5@À5ó3À‚ÀÖ‚ð\‡&æ÷  ý«~Ø„Ö ßE@pþM3 ΂ó ЂÁÄ‚÷ 3 ЂMæþÿÀÂýÁÄýñ´ý÷ æý± ŒNT TEXT TXTORG: .WORD 0 ;CURRENT PC AT BEGIN OF RESIDENT TEXT TXTPTR: .WORD 0 ;POINTER TŒ LODD20 .PAGE ;NOW ALL OBJ MODULES HAVE BEEN PASSED OVER ONCE, ALL ; GSD'S HAVE BEEN PROCŒSD ENTRY MOV (SP)+,R0 RTS PC .PAGE PTGLOB: ;SEARCH LSD FOR A GLOBAL NAME (NOT OŒICE: TTY #1; CALL TYPE: SUSPEND .WORD 0 ;I/O COMPLETE .BYTE 0,0 ;ERROR,LEVŒRñ Pßàþÿ·”ý÷Ä‚ŽýŸþÿÄŒýÈð¥ð¥Â~P…@ ƒ ÿŸ†¦æ&fÈ …„ƒ‚Ä && ÷ þÛŒCURRENT OPEN SLOT IN TEXT USYME: .WORD 0 ;NEXT SLOT IN LSD FOR UNDEFINED SYMBOL ; ******************ŒSED, AND THE LOADER'S SYMBOL DIRECTORY ; (LSD) HAS BEEN CONSTRUCTED. NOW THE LSD MUST BE PASSED OVER ; TO ASSŒ MOD) ;THE SECRET TO THE LOADER'S CONTROL SECTION ABILITY LIES HERE. ; IF THE SECTION IS ONE OF THE NAMED ONES, IT APPEŒ .WORD 0,0 ;RESERVED TTYBUF: .WORD 0 ;DATA BUFFER OBJLST: .WORD 1 ŒÄ ôŠõ]&÷ fz ßEApþ3 È‚æî‚÷ üüÖ M�@ ÷ @3Ê‚÷ <°~È…M0•ó ö‚Hó ‚ÁÊ‚ÁeÁl¾‚Âò‚  -Œ************************************************ NAMBUF: .=MAXNAM*8.+. ;BUFFER HOLDS OBJ MODULE RAD50 NAMES... ŒN LOAD MODULE RELATIVE ADDRESSES TO ALL GLOBAL SYMBOLS, ; AND SECTION BASES ASSIGNED. THE LOAD MAP WILL THEN BE PRINŒS ONLY ONCE IN THE ; LSD, AND THUS HAS ONLY ONE BASE TO LOAD PROGRAMS FROM. THE UNNAMED ; C-SECTS, HOWEVER, ARE DETECTEDŒ;OBJECT MODULE READ LIST .BYTE 1,2 ;DISC: SUSPEND .WORD 0 OBJERR: .BYTE 0,0 Œü‚Ä Ä Ä Ä ³ ò‚MÄü‚ ÑÄ Ñóe¾‚ó ‚ó1�îÄü‚Ä Ä Ä Ä ÑÄ ‘óe~@†¾‚ó ‚àÀ1ÚÉ^ü‚óe¾‚3 ò‚ó ‚M³ Œ;...AND SECTOR INFORMATION FOR EACH MODULE. USES FOUR WORDS PER MODULE. TMPBUF: .WORD 0,0,0 ;TEMPORARY CONVEŒD, ; SHOWING LOAD MODULE RELATIVE ADDRESSES, MULTIPLY DEFINED SYMBOLS ; ACCOMPANIED BY A "M" FLAG. LODF00: ŒS 6 BLANKS, AND ARE MADE UNIQUE TO ; EACH OBJECT MODULE BY LIMITING THE SEARCH TO THE CURRENT OBJECT MODULE ; AREA IN THE ŒORD 0,0 .WORD OBJHED ;DATA BUFFER MAPLST: .WORD 1 ;LIST FOR LOAD MAP .BŒ×,¾‚Äü‚! ³ Ô‚*! ! +! ó ‚¸Âþ‚ÂlÒ‚ÁÊ‚ÁeÁl¾‚¡’ó ‚ªÁá~¸†Ä‚ñ³ ΂MÀÄ‚ð‹óèˆÒ‚³ ŒION BUFFER ASCDAT: .WORD MAXNAM*7 ;TTY INPUT BUFFER FOR COMMAND STRING INPCNT: .WORD 0 ;ACTUAL Œ ;END OF PASS 1 MOV #ND1MSG,TTYBUF ;INIT TO PRINT "END PASS 1" ON TTY MOV #TTYLST,-(SP) ŒD. ; INPUT: R4=PRT TO RAD50 NAME ; OUTPUT: R4=PTR TO LSD ENTRY IF FOUND ; CALL: JSR PC,PTGLOŒE 3,2 ;LINE PRINTER,SUSPEND .WORD 0 ;I/O COMPLETE .BYTE 0,0 Œ—óè‹Ò‚ùÀÄ‚ð‹óè‰Ò‚ðóèŠÒ‚ì Á%(†W ÿŸ%†Bœ— ñ%†ñ%ÿŸÀ%† ~0‡ÿŸ †   `— ÿŸ†Ä ŒARACTER COUNT LSDBGN: ;"LOADER SYMBOL DIRECTORY": WRITES OVER UNNEEDED BUFFER .=.+2000 Œ EMT TTYOUT CLR PRSIZE ;INIT PROGRAM LOAD SIZE MOV #LSDBGN,R0 ;INIT PTR TO LŒ ; BR A ;NOT FOUND ; BR B ;FOUND MOV R0,-ŒRROR,LEVEL .WORD 0,0 ;RESERVED MAPBUF: .WORD 0 ;DATA BUFFER: CHOSEN DURING RUN Œ„ „ „ „ „ øÄ õCÀú‚ÀU3À‚æƒ÷ N󴾂ñ”‡; ú‚fæ<÷ êúÖ ‡CûEAú‚û5ú‚ ó :~¨‡¾‚ì…ÁÄ‚ñŒESERVE SPACE FOR SYMBOL TABLE LSDEND = . ;END OF LOADER SYMBOL DIRECTORY .END Œ MOV R0,PTROBJ ;...AND TO CURRENT OBJ MODULE BR LODF20 LODF10: ADD #BPSYM,R0 ;NŒP) ;SAVE IT MOV (R4),R0 ;IS THIS THE SPECIAL... BIS 2(R4),R0 ;...CASE OF 6 ŒTLST: .WORD 1 ;LIST FOR TRANSFERS TO/FROM TEXT AREA .BYTE 1,2 ;DISC; SUSPEND Œ>ý…w*ý„fÅà‚æþÿßàþÿõ 5 Ÿþÿf÷ .½…ޤ‡Ÿþÿ…Ž´‡1 ‡3 ¾‚3 ΂s Ì‚3 ò‚ó Ô‚ÀÊ‚,~ ˆ � Œ ; INDEX MODE ADDRESSING SYNT05:    ; PARENTHETICAL EXPRESSION PROCESSED  JSR PC, PARSEP ; CALL PARENTHEŒT ENTRY LODF20: CMP R0,SYME ;END OF LSD? BHIS LODF90 ;YES: EXIT LOOP MOVB FLŒANKS? BEQ PTGL01 ;YES: START AT CURRENT OBJ MOD MOV #LSDBGN,R0 ;NO: BEGIN @ BEGINNIŒ.WORD 0 .BYTE 0,0 ;ERROR,LEVEL .WORD 0,0 ;RESERVED .WORD TXTHEDŒsö‚3 À‚óÈ‚ÁÖ‚fæ<÷ 4úñ\‡Ö ³‚ûAú‚‡û Ê‚ßÀà‚"Úð†ˆp &æî‚÷ .úÖ ÷ ½‡ ñþ‡ÄÊ‚ô¥d~˜ˆŒS SEPARATOR  BNE  SYNT06  ; A PARENTHESIS WAS FOUND SYNT15: INCB  QERROR  ; THE FIELD HAS TERMINATEŒS+1(R0),R1 ;ENTRY TYPE MOVB FLAGS(R0),R2 ;QUALITIES FLAG CMPB R1,#GENTRY ;GLOBAL SYMBOL? Œ OF SYMBOL TABLE BR PTGL02 PTGL01: MOV PTROBJ,R0 ;CURRENT OBJ MOD PTGL02: CMP R0,USYME Œ ;ALWAYS R/W FROM/TO TEXT AREA TRALST: .WORD 1 ;LIST FOR TRAILER .BYTE 1,2 Œñ ÀÄ‚ð…3¾‚wDü3 Ô‚³ Ђ…wü· ú‡7 ú‡ßz„˜ßàš7 äù÷Ä‚àù‡ 12345678 &=':>@9 0/STUVWXጠ;  BR  IMMMDR  ; IMMEDIATE ADDRESSING  BR  SYNT0B  ; DETERMINE ADDRESSING SYNT06: BGT  SYNT07 Œ BEQ LODF50 ;YES DEC R1 ;SECTION NAME? BNE LODF10 ;NO: GŒND? BLO PTGL03 ;NOT YET MOV (SP)+,R0 ;NOT FOUND! RTS PC PTGL03: CMŒ;DISC,SUSPEND .WORD 0 .BYTE 0,0 ;ERROR;LEVEL .WORD 0,0 .WORD TRAHŒ~‰Y _,(%\"Z -JKLMNOPQ $*];^R ! +ABCDEFGH .)[<#I Œ ; LEFT PARENTHESIS FOUND  INCB  QERROR  ; RIGHT PARENTHESIS FOUND SYNT07:   ; CALL AUTO INC.;DEC.Œ NEXT ENTRY .PAGE ;*******SECTION NAME: MAKE ITS SIZE EVEN, STORE ITS BASE VALUE, SET PTR ; TO THIS SEŒ (R4),(R0) ;FIRST HALF-NAME MATCH? BNE PTGL04 ;NO CMP 2(R4),2(R0) ;2ND HALŒ ;DATA BUFFER .PAGE TXTHED: ;HEADER FOR TEXT SAVE BUFFER READ/WRITE OPERATIONS .WORD Œ ~ˆ‰? 1234567ŒETERMINATOR  ; OPEN SUBROUTINE AUTO INCREMENT;DECREMENT DETERMINATOR   ; THIS SUBROUTINE VERIFIES THAT THE SAVED ŒION, AND INCREMENT THE TOTAL PROGRAM SIZE. BITB #ABSREL,R2 ;ABSOLUTE OR RELOCATABLE? BNE LODFŒNAME MATCH? BNE PTGL04 ;NO ;MATCH! CMPB #OBJMN,FLAGS+1(R0) ;FILTER OUT OBJ MOD NAMES ŒBTCHID ;FILE I.D. FOR BATCH FILE .BYTE 0 ;RELATIVE SECTOR TXTR.W: .BYTE 0 Œ:#@'="9 1~Š 0/STUVWXY ,% >?Z -JKLMNOPQ !$*); R  stuvwxy z Œ ; TERMINATOR CODE IS FOR EITHER A + OR A   ; - CHARACTER. IF SO, THEN VERIFY THAT THIS   ; IS THE SOLEŒ ;REL CLR VALR(R0) ;ABS: SET SIZE... CLR BASE(R0) ;...AND BASE = 0 Œ BEQ PTGL04 MOV R0,R4 ;NOW POINTS TO FOUND NAME IN LSD MOV (SP)+,R0 ;UŒ;TEXT READ/WRITE BYTE .WORD 0,0,0 TXTSEC: .WORD 0 ;RELATIVE SECTOR TO READ/WRIOTE TEXT TXTCNTŒ &ABCDEFGH `.<(+|Ä~xŠI   abcdefgh i jklmnopq r  \()[] ŒDDRESSING INDICATOR PRESENT.   ; THEN APPROPRIATELY SET THE OPERATOR SEEN   ; VARIABLE.    ; INPUT ŒBR LODF40 LODF30: ;RELOCATABLE SECTION MOV VALR(R0),R3 ;SECTION SIZE MOV R3,R4 ŒAVE ADD #2,(SP) ;"GOOD" RETURN RTS PC ;NO MATCH PTGL04: ADD #BPSYM,R0 ;NEXT Œ.WORD 0 ;# WORDS TO TRANSFER EACH TIME TXTBK1: .=.+128. ;FIRST TEXT SAVE BLOCK TXTBK2: .=Œ þ@ñòóôõö÷)~ðŠøyz{|}~ù123456789:;<=>?ðaâãäåæçèiàklmnoé!"#$%&'()*+,-./`ÑÒÓÔÕÖרYZ[\]^_ÙŒ CONTAINS THE EFFECTIVE    ;  TERMINATOR CODE    ; OUTPUT CONDITION CODED RESULTS    ;  Œ ASR R4 ADC R3 ;MAKE SIZE EVEN MOV PRSIZE,BASE(R0) ;SET BASE OF NEW SECTIŒŒ÷’*÷Œ$÷†÷€÷z÷t ÷l÷fþ÷`ø÷Zò÷Tì÷Næ÷FÞ÷@Ø÷:Ò÷4Ì÷.Æ÷(À÷ ¸÷Œ÷¬÷¦÷ ÷÷úÿ’÷ôÿŒ÷îÿ†÷èÿ€÷âÿz÷Üÿt÷Ôÿl÷Îÿf÷Èÿ`÷ÂÿZ÷¼ÿT÷¶ÿN÷®ÿF÷¨ÿ@÷¢ÿ:÷œÿ4÷Œ÷�ÿ(÷ˆÿ ÷‚ÿ÷|ÿ÷vÿ÷pÿ÷jÿŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒŒ.Û}Ø�¯”(€@h|€ h~s&“Î(XÀhThV¯”÷æ,÷|x÷|r÷|l÷|f÷|`÷|Z| ||||$|k,$÷|T÷|N÷|H÷|B÷|<÷|6Ò| ||||$|k,H÷|0÷|*÷|$÷|÷|÷|†| ||||$|k,l÷| ÷|÷|÷|ú÷|ô÷|î=| ||||$|k,�÷|è÷|â÷|Ü÷|Ö÷|Ð÷|Êô| ||||$|k,´7 .§7 .§7 .§7 .§7 .§7 .§7 .§7 .§7 .§V*.§ .§.§.§.§.§.§".§&.§sØ7 .§÷TV÷TV÷TVÈ:.§ “ÎT “ÎV “ÎT“ÎV “ÎT“ÎV(î÷TV÷TV÷TVÌ6 “ÎT“ÎV “ÎT“ÎV “ÎT“ÎV"÷TV÷TV÷TV¹6 “ÎT“ÎV “ÎT“ÎV “ÎT“ÎV"÷TV÷TV÷TV§6 “ÎT“ÎV “ÎT“ÎV “ÎT“ÎV"$÷TV÷TV÷TV•6 “ÎT“ÎV “ÎT“ÎV “ÎT“ÎV"6÷TV÷TV÷TVƒ6 “ÎT“ÎV “ÎT“ÎV “ÎT“ÎV"H÷TV÷TV7 .§7 .§û. “ÎT“ÎV “ÎT“ÎV.§.§?,\7 .§7 .§7 .§7 .§7 .§7 .§7 .§7 .§ ¨..§ .§.§.§.§.§.§".§“Îæ÷|~÷|~÷|~Ê6 |~ |~ |~2÷|~÷|~÷|~¸6 |~ |~ |~2$÷|~÷|~÷|~¦6 |~ |~ |~26÷|~÷|~÷|~”6 |~ |~ |~2H÷|~÷|~÷|~‚6 |~ |~ |~2Z÷|~÷|~÷|~p6 |~ |~ |~2l÷|~÷|~7 .§7 .§8. |~ |~.§.§Ÿ.€7 .§7 .§7 .§7 .§7 .§7 .§7 .§7 .§÷T°�*.§ .§.§.§.§.§.§".§&Tõ,¦÷Tª÷T¤÷Tž÷T˜÷T’÷TŒBT TTTT$T[,Ê÷T†÷T€÷Tz÷Tt÷Tn÷ThöT TTTT$T[,î÷Tb÷T\÷TV÷TP÷TJ÷TDªT TTTT$T[,÷T>÷T8÷T2÷T,÷T&÷T ]T TTTT$T[*6÷T÷T÷T÷T÷T$1T TTTTÙó.Û}‚¯”@@€ @À@*&@(x“Î(T¯”|÷æ÷÷÷¾6@€  @€ @€ à÷÷÷¬6@€  @€ @€ à$÷÷÷š6@€  @€ @€ à6÷÷÷ˆ6@€  @€ @€ àH÷÷÷v6@€  @€ @€ àZ÷÷÷d6@€  @€ @€ àl÷÷÷R6@€  @€ @€ à~÷÷÷@6@€  @€ @€ à�÷÷÷.6@€  @€ @€ à¢÷÷÷6@€  @€ @€ à,´7 .§7 .§7 .§7 .§7 .§7 .§7 .§7 .§7 .§V*.§ .§.§.§.§.§.§".§&.§sØ÷÷÷æ6À ÀÀ•ê÷÷÷Ô6À ÀÀ•ü÷÷÷Â6À ÀÀ•÷÷÷¯6À ÀÀ• ÷÷÷�6À ÀÀ•2÷÷÷‹6À ÀÀ•D÷÷7 .§7 .§W.À À.§.§á(X7 .§7 .§7 .§7 .§7 .§7 .§7 .§7 .§Ë..§ .§.§.§.§.§.§".§“Îæ÷÷÷¾6@€  @€ @€ à÷÷÷¬6@€  @€ @€ à$÷÷÷š6@€  @€ @€ à6÷÷÷ˆ6@€  @€ @€ àH÷÷÷v6@€  @€ @€ àZ÷÷÷d6@€  @€ @€ àl÷÷7 .§7 .§0.@€  @€ .§.§.€7 .§7 .§7 .§7 .§7 .§7 .§7 .§7 .§÷’6.§ .§.§.§.§.§.§".§&À(!¦÷÷÷6À ÀÀ•¸÷÷÷6À ÀÀ•Ê÷÷÷ô6À ÀÀ•Ü÷÷÷â6À ÀÀ•î÷÷÷Ð6À ÀÀ•÷÷÷½6À ÀÀ•÷÷÷«6À ÀÀ•$÷÷÷™6À ÀÀ•6÷÷÷‡6À ÀÀ•H÷÷‡&À ÀÁó €€ * ü<ûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿý<ûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ<ûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ{ï½÷Þ{ï½÷Þ{ï½÷Þ{ï½÷ÖZk­µÖZk­µÖZk­µÖZk­µÖZk­µÖZk­µÖZkŒ1ÆcŒ1ÆcŒ1ÆcŒ1ÿ<ûþÿÿÿ?ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ<ûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ