R0=%0 R1=%1 R2=%2 R3=%3 R4=%4 R5=%5 SP=%6 PC=%7 ; ******************************************************************** ; * * ; * ****************** R O S L O D ******************* ; * THIS IS THE ON-LINE LINKING LOADER FOR THE "ROS II" SYSTEM * ; * TO BE RUN ON THE PDP-11/20. THIS VERSION WILL LINK UP TO 20 * ; * OBJECT MODULES.(THIS NUMBER MAY BE CHANGED BY RE-ASSEMBLING * ; R0=%0 R1=%1 R2=%2 R3=%3 R4=%4 R5=%5 SP=%6 PC=%7 ; ******************************************************************** ; * * ; * IDENTIFICATION: RAD50P : RADIX-50 PACK SUBROUTINE * ; * * ; * PURPOSE: TO CONVERT A STRING OF SIX ASCIT CHARACTERS * ; * TO TWO PACKED BINARY WORDS IN RAD50 CODE. * ; .z¯”(îzh(:÷æ,ßU ê êß ê÷xÿ�ÿ÷•B›7ŠnÏ,$ÅÅe°×-zÅe ÷Š�·ŠT÷xÿ`¿,H÷xÿ^×-V÷E?JÄFÃÃes÷ æÃ,lÃeX÷ À.÷ ~÷e€$ìýUÀ7; UPDATE 1 3/17/72 TO IPL2.RAS ; UPDATE 3/13/72 FIX UP IPL2.RAS ; UPDATE 3/13/72 FROM IPL2.S12 TO IPL2.RAS ; UPDATE 3/13/72 IPL.S12 ; UPDATE 2/16/72 IPL2.S11 ; UPDATE 1/19/72 IPL2.S10 ; UPDATE 1/12/72 IPL2.S09 ; UPDATE 12/11/71 IPL.S08 ; UPDATE 12/10/71 IPL.S07 ; UPDATE 12/2/71 IPL.S06 ; UPDATE 11/18/71 IPL.S05 ; UPDATE 11 * THE PROGRAM WITH A NEW VALUE FOR "MAXNAM".) A LOAD MODULE WILL * ; * BE CREATED WHICH IS RELOCATABLE BY EXECUTING AT LOAD TIME A * ; * "TRAILER" PROGRAM ATTACHED TO THE END OF THE MAIN PROGRAM. * ; * BECAUSE THE LOAD MODULE IS RELOCATABLE, NO "ASECT" WILL BE * ; * ALLOWED. NAMED "CSECTS", HOWEVER, WILL BE PROCESSED NORMALLY. * ; * THE LOAD MAP PRINTED AT THE END OF PASS 1 WILL SHOW THE VALUES * ; * OF ALL GLOBAL SYMBOLS (ENTRY POINTS, MODULE AND SECTION NAMES) * * ; * USAGE: CALLING SEQUENCE: * ; * * ; * MOV #ASCBUF,-(SP) ;STACK ADDRESS OF ASCII STRING * ; * MOV #BINBUF,-(SP) ;STACK ADDR OF FIRST BINARY WRD* ; * EMT 38. ;TRAP TO ROUTINE * ; * À,�Á� � ÁEüÿ}À À À À À À =|,´ÄôÃÃe÷ ŒÃÃeì÷ ÀÃÃežý_,ØýÀÿýý‹ý€ÀÀe‚÷ · ¶Þ÷&,üªÃÃeîÁ÷ @ÃeÓ  ÃeÁ õ´, ÁÁeÈ_êßÁÿ êßêß êý€÷ jß÷ @,Df‡Ö w°þÂ#‘ËÅø& ÷’P· LN · C,hFN · @N – †ËÕ€ËÕ0„ ÄE€„ „  äc,Œ‡ßêß÷ÿ êßêß êý€‡!°-SÅÃÔÏÒ--<# Ã%þ /15/71 IPL.S04 ; UPDATE 11/12/71 IPL.S03 ; UPDATE 11/11/71 IPL.S02 ; UPDATE 11/10/71 IPL.S01 .TITLE IPL ;*********************************************************************** ;* * ;* INITIAL PROGRAM LOAD WILL INITIALIZE THE ROS SYSTEM AND * ;* THEN EXIT TO DISPATCH. THIS MODULE SHOULD BE EXECUTED * ;* BEFORE ENTERING ROS FOR THE FIRST * ; * EXPRESSED AS A RELATIVE OFFSET FROM THE BASE OF THE LOAD MODULE* ; * OBVIOUSLY, THE ABSOLUTE LOAD VALUES CANNOT BE KNOWN UNTIL THE * ; * MODULE IS RELOCATED AT EXECUTION TIME. IN ADDITON, THE * ; * LOAD MAP WILL SHOW THE ACCUMULATED LOAD MODULE SIZE AT THE * ; * START OF EACH OBJECT MODULE ON THE MAP. WHEN LOADING TASKS, * ; * "ROSLOD" ALSO UPDATES THE MONITOR'S TASK TABLE TO ALLOW THE * ; * NEW PROGRAM TO BE QUEUED AND EXECUTED. FUTURE RELEASE * ; * ON RETURN THE STACK WILL BE CLEARED. THE SET OF CHARACTERS * ; * FOR RAD50 CONSISTS OF THE LETTERS A-Z, THE NUMBERS 0-9,AND * ; * THE TWO SPECIAL CHARACTERS [$] AND [.]. ANY OTHER CHARACTERS * ; * IN THE INPUT STRING WILL BE TREATED AS BLANKS. * ; * DATE: 30-MAR-72 * ; * VERSION:001.002 * ; * --ÃÏÒÅ----<ó ÕÕ¾ÀêÄêÂêÆêÈê0ÿ4ÿ2ÿ6ÿ8ÿæ ny îùóTIME. * ;* * ;* PROGRAMMER 51,52,53 AND 54 * ;* DATE 11/9/71 * ;* REVISION ;* REVISION * ;* * ;*********************************************************************** .REF S OF * ; * "ROSLOD" WILL ALLOW LIBRARY SEARCHES AND LOADING OF SEGMENTED * ; * PROGRAMS. * ; * DATE: 07-APR-72 * ; * VERSION:003.001 * ; * * ; ******************************************************************** .TITLE ROSLOD .REF PPTAB,TASKS, * ; * G U L F E L E C T R O N I C S Y S T E M S * ; * * ; ******************************************************************** .TITLE RAD50 .REF PUSHR,POPR .DEF R50UNP,R50PAK .PAGE RAD50PACK: ;CONVERT 6 ASCII CHARS TO 2 BINARY WORDS R50PAK: ;N=1600A+40B+C JSR R5,PUSHR ;SAVE ALL BœBœîBœzŒ*BœßU ê êß ê÷xÿ�ÿ÷•B›7Šnö*fœÅÅe°×-zÅe ÷Š�·ŠT÷xÿ`æ*Šœ÷xÿ^×-V÷E?JÄFÃÃes÷ æÃ<*®œÃeX÷ À.÷ ~÷e€$ìýUÀ7ç*ÒœÁ� � ÁEüÿ}À À À À À À =£*öœÄôÃÃe÷ ŒÃÃeì÷ ÀÃÃežý†*�ýÀÿýý‹ý€ÀÀe‚÷ · ¶Þ÷L*>�ªÃÃeîÁ÷ @ÃeÓ  ÃeÁ õÚ*b�ÁÁeÈ_êßÁÿ êßêß êý€÷ jß÷ g*†�f‡Ö w°þEMTINIT ; FOR EMT INIT .REF LODINIT .DEF IPL,SSTACK,LOGMAX,PHYDEV,ALTDEV .DEF QTIME,DQTIME,SSTACK .IFNZ OVRLAY ; ONLY IF HAVE OVERLAYS .DEF BEGDYN,ENDDYN .ENDC .REF TIMCTL,EMTRAP,CLINIT .REF RQUEST,SAVE,DSPTCH,QIPL,TPRTY,HEADER,INPTHD .REF PFSIPL,PSTIPL .REF TSTAT,DINT .REF PRTINT,KBDINT ;TTYIO PRINTER AND KEYBOARD ;INTTPRTY,TSTAT,IOSTAT,HEADER,BSIZE,IFD .DEF LODINIT ;SECONDARY INPUT PARAMETERS: ; PRIBKG,$RLDNO,TASMAX,NPRIOR,OVTMIN,MAXID1,NDISCS,$SYSFL ; $OVTYP,ARG .PAGE ; THE FOLLOWING DEFINE MEANINGS OF BITS IN LOWER "FLAG BYTE": DBLDEF = 4 ;SINGLE/MULTIPLE DEFINITION (0/1) UNDEF = 10 ;UNDEFINED/DEFINED (0/1) ABSREL = 40 ;ABSOLUTE/RELATIVE (0/1) TXTCMD = 3 ;COMMAND TO BEGIN A TEXT BREGS MOV 16(SP),R0 ;BINARY BUFFER ADDRESS MOV 20(SP),R1 ;ASCII STRING ADDRESS MOV #3*400+3,R2 ;SET MAJOR & MINOR LOOP COUNTS RADP10: CLR R3 ;BINARY SUM RADP20: MOVB (R1)+,R4 ;NEXT ASCII CHAR BIC #-177-1,R4 ;CLEAR POSSIBLE PARITY SUB #100,R4 ;REDUCE ALPHAS TO 1-32 BLE RADP40 ;WAS BELOW [A] CMP R4,#32 ;ABOVE [Z]? BGT RADP90 Â#‘ËÅø& ÷’P· LN · j*ª�FN · @N – †ËÕ€ËÕ0„ ÄE€„ „  äŠ*Î�‡ßêß÷ÿ êßêß êý€‡Hò�-SÅÃÔÏÒ--w†× × ò f€ò5ÀeòU@ò €× [æ*ˆ² ¦¦æ× Ž & *ˆÖ G× ‚&(ˆ°Ì 8�L'ˆ°4e÷ ÌQ$ ô �BBâBä" ± üÿü× ÷ ¬ŒÉU@Ò °ðU€ Æe  Å"U%÷‹äþGæÎeÞþæfÇ.Ö … U¥… … … … U¥Ñ Bb‘â‹Ã 0Š æ*ˆ€�Ö BÃÅ.&0 æM &0 & IDA20 .PAGE LODA30: MOV #TMPBUF,-(SP) MOV R1,-(SP) EMT R50PAK ;CONVERT TO RADIX-50 MOV (R1)+,R3 ;CHECK CONVERTED NAME... BIS (R1)+,R3 ;...FOR ALL NULLS BEQ LODB10 ;ALL NULLS: END OF INPUT LINE REACHED LODA40: CMP (R1)+,(R1)+ ;LEAVE ROOM FOR FOUR WORDS PER ENTRY BR LODA10 ;...AND GO TO FETCH ANOTHER NAME ; ****************************************************J MOV #C,D MOV #C,D MOV #C,D MOV #C,D MOV #C,D MOV #C,D MOV #C,D MOV #C,D MOV #C,D MOV #C,D MOV #C,D MOV #C,D MOV #C,D MOV #C,D MOV #C,D MOV #C,D CLR 123456 CLR 123456 CLR 123456 CLR 123456 CLR 123456 CLR 123456 CLR 1234K;# WORDS READ BCC .+4 ;WAS NOT AN ODD NUMBER INC R2 ;DON'T LOSE LAST BYTE CONVRT: ;CONVERT BINARY TO OCTAL ASCII MOV #16.,R3 ;PRINT 8 CELLS PER LINE MOV #OUTDAT,R1 AGAIN: MOV (R0)+,-(SP) ;NEXT BINARY WORD MOV R1,-(SP) ;ASCII LIST POINTER MOV #5,-(SP) ; "BIN2O" EMT 42 ; .CVT FROM BINARY TO OCTAL ASCII ADD #6,R1 L0ˆæ’.ˆÖ áæŒ/ˆæ:Ü&’"Œ(:õ,nˆæpæ:ˆ÷•”÷ ¾÷•ˆ÷~€‰p :+,’÷-ªò÷þrææ:ˆæ:ˆÀ"“::$"Å,¶^'‚ †‚ ÃÁ"&fæ"ˆÁeÑ•  "¶0Ú à óÑ• Ñ• Áå"w*ææHˆæHÐ" $H*H‡,ˆÂ Ü÷µ@ÈæHˆæ:ˆæ:ˆ�ëH: :Ù,&EEEEM**************** LODB10: ;ALL NAMES NOW CONVERTED TO RAD50 MOV #NAMBUF,R0 ;INIT POINTER TO LIST OF RAD50 NAMES SUB #NAMBUF+4,R1 ;#BYTES IN CONVERTED LIST ASR R1 ;#WORDS ASR R1 ASR R1 ;#NAMES CONVERTEDTO RADIX-50 MOV R1,MODCNT ;SAVE IT: # OBJ MODULES TO LINK .PAGE ; NOW CHECK BATCH DIRECTORY FOR EACH NAME ENTERED LODB20: DEC R1 ;COUNT DOWN N56 CLR 123456 CLR 123456 CLR 123456 .PAGE .CSECT ABCDEF MOV #A,B MOV #A,B MOV #A,B MOV #A,B MOV #A,B MOV #A,B MOV #A,B MOV #A,B MOV #A,B MOV #A,B MOV #A,B MOV #A,B MOV #A,B MOV #A,B MOV #A,B MOV #A,B MOV #A,B MOV #A,BO ;BUMP TO BYTE FOLLOWING LAST CHAR MOVB #TAB,(R1)+ ;PUT TABS BETWEEN EACH SIX CHARS DEC R2 ;BLOCK END? BEQ BLKEND ;YEAH DEC R3 ;LINE END? BGT AGAIN ;NO BR LINEND ;SKIP FIRST "LF" BLKEND: MOVB #LF,(R1)+ ;BLOCK END TAKES TWO LINE FEEDS LINEND: MOVB #LF,(R1)+ ;LINE END TAKES ONLY ONE SUB #OUTDAT,R1 ;GET # OF BYTES CONVERTEP,J€M€Mä,n ’:pà"’$:&p;’Pû öò#öOCTAL DUMP V001A # B Õ"„"ü """S ¦?óQ# OF NAMES BLT LODC10 ;DONE:EXIT LOOP:ALL NAMES WERE FOUND MOV #-1,OBJSEC ;START W/ RELATIVE SECTOR ZERO LODB30: INC OBJSEC ;BUMP SECTOR # MOV #OBJLST,-(SP) EMT DISCIO ;DISCIO: DIRECTORY SECTOR TST OBJERR ;CHECK FOR ERROR BNE LDER10 ;YES: ERR OUT MOV #8.,R3 ;INIT COUNT OF ENTRIES IN THIS SECTOR MOV #OBJBK1,R4 ;...AND POINTER TO SECR MOV #A,B MOV #A,B CLR 123456 CLR 123456 CLR 123456 CLR 123456 CLR 123456 CLR 123456 CLR 123456 CLR 123456 CLR 123456 CLR 123456 MOV #C,D MOV #C,D MOV #C,D MOV #C,D MOV #C,D MOV #C,D MOV #C,D MOV #C,D MOV #C,D MOV #C,D SD MOV R1,OUTABC ;STASH IN OUTPUT BYTE COUNT MOV #OUTBUF,-(SP) MOV #LNKOUT,-(SP) EMT 2 ; .WRITE (TO LP:) MOV #LNKOUT,-(SP) EMT 1 ; .WAIT TST R2 ;WAS BLOCK END REACHED? BNE CONVRT ;NO: GO BACK AND CONVERT SOME MORE EOFTST: BITB #100,INSTAT ;END-OF-FILE? BEQ READ ;GO BACK FOR ANOTHER (POSSIBLE) READUTOR DATA TST OBJSEC ;IS THIS THE 1ST SECTOR (RELATIVE ZERO)? BNE LODB50 ;NO: BYPASS INIT OF ENTRY COUNT TST (R4)+ ;SKIP BATCH FILE I.D. MOVB (R4),R2 ;# ENTRIES IN DIRECTORY (+1) TST (R4)+ ;SKIP SECOND WORD MOV (R4)+,DIRSEC ;NEXT FREE DIRECTORY SECTOR MOV (R4)+,BGNSEC ;NEXT FREE BATCH ELEMENT SECTOR SUB #8.,R4 ;RESET SO NEXT INSTRUCTION WIL MOV #C,D MOV #C,D MOV #C,D MOV #C,D MOV #C,D MOV #C,D MOV #C,D MOV #C,D MOV #C,D MOV #C,D MOV #C,D MOV #C,D MOV #C,D MOV #C,D MOV #C,D MOV #C,D MOV #C,D MOV #C,D MOV #C,D MOV #C,D .END W MOV #LNKOUT,-(SP) EMT 17 ; .CLOSE LINE-PTR TO FLUSH ITS BUFFER MOV #LNKINP,-(SP) EMT 17 ;CLOSE DUMPED DATASET MOV #LNKINP,-(SP) EMT 7 ; .RLSE INPUT FILE DATASET BR PRTSGN ;...AND GO BACK TO REQUEST ANOTHER ONE .PAGE ;COMMAND INPUT LINK BLOCK 0 KBILNK: 0 .RAD50 /KBI/ 1 .RAD50 /KB/ ;COM^.Û}Ø�¯”(€@h|€ h~s&“Î(XÀhThV¯”÷æ,÷|x÷|r÷|l÷|f÷|`÷|Z| ||||$|k,$÷|T÷|N÷|H÷|B÷|<÷|6ÒYL WORK LODB40: ADD #16.,R4 ;ADVANCE POINTER TO NEXT ENTRY DEC R2 ;MORE ENTRIES TO CHECK? BEQ LDER11 ;EXHAUSTED: NO SUCH NAME FOUND DEC R3 ;DONE W/ THIS SECTOR? BEQ LODB30 ;YES: GO GET NEXT SECTOR IN DIRECTORY LODB50: CMP (R0),(R4) ;INPUT NAME :VS: DIRECTORY NAME BNE LODB40 ;NO MATCH CMP 2(R0),2(R4) ;CHECK SECOND WORD BNE `.Û}‚¯”@@€ @À@*&@(x“Î(T¯”|÷æ÷÷÷¾6@€  @€ @€ à÷÷÷¬6@€ [MAND OUTPUT LINK BLOCK 0 KBOLNK: 0 .RAD50 /KBO/ 1 .RAD50 /KB/ ; DUMPED FILE INPUT LINK BLOCK 0 LNKINP: 0 ;INPUT LINK BLOCK .RAD50 /DMP/ 3 ;ROOM FOR ONE SWITCH INPDEV: 0 ;ROOM FOR PHYSICAL DEVICE NAME FROM COMMAND STRING ISWCNT: 0 ;# SWITCH WORDS FOLLOWING ISWTCH: 0 ;FIRST TWO CHARS IN SWITCH 0 LNKOUT: 0 ;OUTPUT LINK BLOCK .RAD50 /LP/ 1 .RAD50\  ¦ ±Œ:Q* æ0!ˆæ&!ˆæH!ˆæb!æ0!ˆæT!æ&!*$ ˆæ€!æH!ˆæö!æ0!ˆæ0!ˆæ !æ&!ª,H ˆæ&!ˆ÷µ@M0ˆæ’!.ˆÖ áæŒ!/ˆæ:!A*n ˆæp!æ:!ˆ÷•”÷ ¾÷•ˆ÷~€.*’ ÷-ªò÷þræ"æ:!ˆæ:!ˆÀ""Âø*¶ ^'‚ †‚ ÃÁ"$&fæ"ˆÁeÑ• Ü.Ú Â à óÑ• Ñ• Áå"$w*æ"æH!ˆæH!5*!ˆÂ Ü÷µ@ÈæH!ˆæ:!ˆæ:!ˆ�p*&!EEEEê*J!€M€M] LODB40 ;NO MATCH CMP (R0)+,(R0)+ ;MATCH! GET PAST NAME IN "NAMBUF" MOV 14(R4),(R0)+ ;... START SECTOR... MOV 16(R4),(R0)+ ;... AND LENGTH, TO INTERNAL DIRECTORY BR LODB20 ;GO GET NEXT NAME .PAGE LDER10: MOV #10,R4 ;DISC READ ERROR: BATCH DIRECTORY JSR PC,ERRPRT LDER11: MOV #11,R4 ;"BFUP" DIRECTORY SEARCH FAILURE JSR PC,ERRPRT ; **********************œS?…"  j ø7 ê•V7 7 ´ÿ ‰7 #7 –ÿfƒ7 àÙêüìû ô7 ÿ£ 7 ÿ¢ Í€ Gø_ /LP/ ;ALWAYS TO LINE PRINTER ;COMMAND INPUT FILENAME BLOCK 0,4 ;OPEN FOR INPUT KBIFIL: ,,,, ;COMMAND OUTPUT FILENAME BLOCK 0,2 ;OPEN FOR OUTPUT KBOFIL: ,,,, 0 4 ;INPUT FILE ALWAYS OPENED FOR INPUT FILINP: 0,0,0 ;SPACE FOR INPUT FILENANME (FROM "ASSIGN" AT KEYBOARD) 0,0,0 ;UIC & PROTECT 0 2 ;PRINT FILE ALWAYS OPENED FOR OUTPUT FILOUT: 0,0,0,0,0 ;NO FILENAMEÉ*n! ’!:!p!e’!Pà!ö!OCTAL DUMP V001A # '"""„"$¡ Ùa********************************************** LODC10: ; ALL NAMES FOUND IN DIRECTORY. NOW PROCEED WITH PASS 1. MOV #NAMBUF,NAMPTR ;POINTER TO LIST OF MODULE NAMES MOV MODCNT,NAMCTR ;# OF MODULES IN LIST MOV #LSDBGN,SYME ;INIT PTR TO DEFINED SYMBOLS MOV #LSDBGN,USYME ;INIT PTR TO UNDEFINED SYMBOLS .PAGE LODC20: ;LOOP HERE FOR SUCCESSIVE OBJECT MODULES JSR PC,NXTMOD ;INIT FOR NEXT OBJ MODULE b| ||||$|k,H÷|0÷|*÷|$÷|÷|÷|†| ||||$|k,l÷| ÷|÷|÷|ú÷|ô÷|î=| ||||$|k,�÷|è÷|â÷|Ü÷|Ö÷|Ð÷|Êô| ||||$|k,´7 .§7 .§7 .§7 .§7 .§7 .§7 .§7 .§7 .§V*.§ .§.§.§.§.§.§".§&.§sØ7 .§÷TV÷TV÷TVÈ:.§ “ÎT “ÎV “ÎT“ÎV “Îc FOR LP: RAD.DT: .RAD50 /DT / ; CSI COMMAND BLOCK KBCSCB: KBICSI LNKINP ;WANT SPEC FOR INPUT FILE TO BE DUMPED FILINP ;SAME ; COMMAND INPUT CSI HEADER KBICSI: 2 ;USE "OUTPUT" FIELD ONLY (ACTUALLY FOR INPUT SPEC) ,,,,, ;RESERVE SIX MORE FOR CSI KBIBUF: 80. ;THE COMMAND STRING BUFFER .BYTE 0 ;MODE KBISTA: .BYTE 0 ;STATUS 0 ;ACTUAL BYTE COUNT KBIDATd @€ @€ à$÷÷÷š6@€  @€ @€ à6÷÷÷ˆ6@€  @€ @€ àH÷÷÷v6@€  @€ @€ àZ÷÷÷d6@€  @€ @€ àl÷÷÷R6@€  @e BR LODC19 ;DONE WITH ALL OBJ MODULES LODC30: JSR PC,NXTBLK ;GET NEXT BLOCK BR LODC19 ;DONE WITH ALL OBJECT BLOCKS LODD00: ;HERE TO PROCESS SUCCESSIVE GSD BLOCKS ; R0 POINTS TO FIRST DATA BYTE IN BLOCK ; R5 CONTAINS BYTE COUNT OF DATA BYTES TST BLOCK1 ;IS THIS FIRST BLOCK IN MODULE? BEQ LODD10 ;YES DEC (R0) ;IS THIS A GSD BLOCK? BEQ LODD15 fT“Î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“ÎVg: .=.+80. ;CHARACTERS START HERE ;COMMAND OUTPUT LINE BUFFER KBOBUF: MSGLTH ;MAX BYTES 0 ;MODE AND STATUS MSGLTH ;ACTUAL BYTES .ASCII "OCTAL DUMP V001A" .BYTE 15,12,43,13 MSGLTH = .-KBOBUF-6 ;# BYTES IN MESSAGE .EVEN INPBUF: 0 ;MAX BYTES DEPENDS ON BLOCK SIZE OF DEVICE BEING READ INPMOD: .BYTE 0 ;MODE OF INPUT DETERMINED BY SWITCH INSTAT: .BYTE 0 ;Sh€ @€ à~÷÷÷@6@€  @€ @€ à�÷÷÷.6@€  @€ @€ à¢÷÷÷6@€  @€ @€ à,´7 .§7 .§7 .§7 .§7 .§7 .§7 .§7 .§7 .§V*.§ .§.§.§.§.§.§".§&.§sØ÷÷÷æ6À Ài ;YES: PROCEED DEC (R0) ;IS IT GSD END? BEQ LODC20 ;YES: GET NEXT OBJ MODULE CMP (R0),#4 ;IS IT MODULE END? BEQ LODC20 ;YES: GET NEXT MODULE BR LODC30 ;NO: GET NEXT BLOCK LODD10: INC BLOCK1 ;INDICATE FIRST BLOCK PROCESSED DEC (R0) ;CHECK THAT IT IS GSD BNE LDER13 ;NOT GSD BEGIN TSTB FLAGS+3(R0) ;FIRST ENTRYl"H÷TV÷TV7 .§7 .§û. “ÎT“ÎV “ÎT“ÎV.§.§?,\7 .§7 .§7 .§7 .§7 .§7 .§7 .§7 .§ ¨..§ .§.§.§.§.§.§".§“Îæ÷|~÷|~÷|~Ê6 |~ |~ |~2÷|~÷|~÷|~¸6 |~ |~ |~2$÷|~÷|~÷|~¦6 |~ |~ |~2kTATUS INPABC: 0 ;ACTUAL INPUT BYTE COUNT INPDAT ;ADDR OF INPUT DATA BUFFER OUTBUF: 132. ;MAX BYTES IN PRINT BUFFER .BYTE 6 ;UNFORMATTED ASCII; DUMP MODE OUSTAT: .BYTE 0 ;STATUS OUTABC: 0 ;ACTUAL OUTPUT BYTE COUNT OUTDAT ;OUTPUT DATA BUFFER INPDAT: .=.+512.;INPUT DATA BUFFER: MUST ACCOMMODATE A DECTAPE BLOCK OUTDAT: .=.+132.;OUTPUT DATA BUFFER ; 9-FEB-72 ;M W KxÀ•ê÷÷÷Ô6À ÀÀ•ü÷÷÷Â6À ÀÀ•÷÷÷¯6À ÀÀ• ÷÷÷�6À ÀÀ•2÷÷÷‹6À ÀÀm'S TYPE BNE LDER14 ;FIRST ENTRY NOT MODULE NAME LODD15: CMP -(R5),(R0)+ ;BUMP BC & PTR PAST GSD COMMAND LODD20: ;HERE FOR EACH SUCCESSIVE ENTRY UNTIL BLOCK END SUB #8.,R5 ;BLOCK END? BLT LODC30 ;YES: GO GET NEXT ONE MOVB FLAGS+1(R0),R2 ;ENTRY TYPE CMPB R2,#GSDMAX ;IS IT LEGAL? BGT LDER15 ;NO MOV R0,R1 ;ENTRY POINTER ADD #8.,R0AB R2 ;YES: IS SECOND WORD CONVERTED? BNE RADU05 ;NOT YET BR RADP35 ;ALL DONE: RESTORE SAVE REGS & RETURN ;VIA COMMON RETURN COEFF: ;TABLE OF COEFFICIENTS +1600. ;40**2 +40. ;40**1 +1. ;40**0 .END LEIN .END START p6÷|~÷|~÷|~”6 |~ |~ |~2H÷|~÷|~÷|~‚6 |~ |~ |~2Z÷|~÷|~÷|~p6 |~ |~ |~2l÷|~÷|~7 .§7 .§8. |~ |~.§.§Ÿ.€7 .§7 .§7 .§7 .§7 .§7 .§7 .§7 .§÷T°�*.§ .§.§.§.§.§.§".§&Tõ,¦÷Tªq ;NEXT ENTRY MOV R1,R4 ;SECONDARY POINTER USED BY VARIOUS RTNES ASL R2 ;BYTE INDEX JMP @GSDTAB(R2) .PAGE GSDTAB: .WORD LODE00 ;(0) OBJ MOD NAME .WORD LODE20 ;(1) SECTION NAME .WORD LODD20 ;(2) INTERNAL SYMBOL (IGNORE) .WORD LODD20 ;(3) TRANSFER ADDRESS (IGNORE) .WORD LODE40 ;(4) GLOBAL SYMBOL ; ******************************rL., ALTERNATE AVAIL ; ; PHYSICAL DEVICE # FOR DECTAPES - 1 CONTROLLER .WORD 2000,2001,2002,2003,2004,2005,2006,2007 ; ; ; ALTERNATE DEVICE TABLE (PARALLEL TO PHYSICAL DEVICE TABLE) ; ALTDEV: .WORD 4,0,0,0,0 .WORD 0,0,0,0,0,0,0,0 ; FOR DECTAPES - 1 CONTROLLER ; ; IPL = . RESET ; SEND INIT PULSE TO ALL DEVICES MOV #340,PSR ; SET CPU LEVEL TO 7 DURING IPL MOV #SSTACK,SP ; SET UP SYSs; ******************************************************************** ; * -------------------- S U P E R ------------------- * ; * ---------------------- D U M P --------------------- * ; * * ; * THIS PROGRAM DUMPS IN OCTAL FROM EITHER DISC OR FROM CORE TO * ; * THE LINE PRINTER. THE CHOICE OF ONE OF THE DISCS OR MEMORY IS * ; * MADE AT RUN TIME BY APPROPRIATE SETTING OF THE CONSOLE SWIt÷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Ùóu************************************** LDER13: MOV #13,R4 ;FIRST MODULE BLOCK NOT "GSD" JSR PC,ERRPRT LDER14: MOV #14,R4 ;FIRST ENTRY IN GSD NOT OBJ MOD NAME JSR PC,ERRPRT LDER15: MOV #15,R4 ;ILLEGAL GSD ENTRY DECLARATION JSR PC,ERRPRT LODC19: JMP LODF00 ;END OF READING FIRST PASS OVER OBJ MODS .PAGE ;****************PROCESSING FOR INDIVIDUAL G S D ENTRIES************** ; ON ENTRY TO EACH RvTEM STACK .IFZ $SAVE-104400 ; ONLY IF ODT IN CORE MOV 14,-(SP) MOV 16,-(SP) .ENDC JSR PC,PSTIPL ; TRAP INIT. .IFZ $SAVE-104400 ; ONLY IF ODT IN CORE MOV (SP)+,16 ; RESTORE ODT'S TRAP MOV (SP)+,14 .ENDC JSR PC,PFSIPL ; FOWER FAIL INIT. ; ; SET UP INTERRUPT AND TRAP VECTORS ; MOV #RQUEST,MPSHBT ; SET UP HANDLER FOR MANUAL PUSHBUTTON wTCHES* ; * * ; * THE PROGRAM IS POSITION-INDEPENDENT AND FREE STANDING. * ; * THUS, IT NEED NOT BE LINKED TO ANY OTHER MODULES, CAN BE LOADED* ; * ANYWHERE IN CORE, AND DOES NOT INTERFACE WITH ANY EXTERNAL * ; * DRIVERS. IT CAN EVEN BE LOADED FROM PAPER TAPE, USING THE * ; * RELOCATING FEATURE OF THE ABSOLUTE LOADER. * ; * yOUTINE, R1 AND R4 POINT TO CANDIDATE ENTRY ;*******MODULE NAME******** LODE00: JSR PC,SRMODN ;SEARCH FOR MODULE NAME BR LDER16 ;NOT UNIQUE MOV SYME,PTROBJ ;POINTER TO NEW MODULE NAME IN LSD JSR PC,INSYME ;GO INSERT ENTRY INTO LSD BR LODD20 ; ******************************************************************** LDER16: MOV #16,R4 ;MODULE NAME NOT UNIQUE JSR PC,ERRPRT z MOV #MPSHLV,MPSHBT+2 MOV #SAVE,SAVTRP ; SET UP SAVE TRAP HANDLER MOV #SAVLEV,SAVTRP+2 MOV #EMTRAP,30 ;INIT EMT TRAP VECTOR MOV #340,32 ;LEVEL 7 MOV #TIMCTL,100 ; INIT CLOCK TO L-F CLOCK INTERRUPT MOV #340,102 .IFGE NTTYS-1 MOV #200,R1 ;INIT INTERRUPT VECTORS FOR MOV #KBDINT,60 ;TTY UNIT 0 MOV R1,62 MOV #PRTINT,64 † * ; * TO RUN THIS PROGRAM, BEGIN AT "START". NO HARDWARE INIT IS OR * ; * NEED BE GIVEN. THE ONLY DEVICES THAT ARE RESET ARE THE DISC * ; * AND THE LINE PRINTER. THEY ARE RUN WITH INTERRUPTS DISABLED. * ; * IN THE CASE OF DUMPING FROM MEMORY, NO DISC RESET IS ISSUED. * ; * AT THIS TIME "HOME" THE PRINTER IF TOP-OF-FORM IS DESIRED. * ; * AT THE FIRST "HALT", SELECT ONE OF THE DISCS OR MEMORY: * ; * CONSOLE SWITCHES: =1-->RF-11; =2-->DDC-7~•D÷÷7 .§7 .§W.À À.§.§á(X7 .§7 .§7 .§7 .§7 .§7 .§7 .§7 .§Ë..§ .§.§.§.§.§.§".§“Îæ÷÷÷¾6@€  @€ @€ à÷÷÷¬6@€  @€ @€ à$÷÷÷š6@€  @€ @} .PAGE ;*******SECTION NAME******** LODE20: JSR PC,PTGLOB ;SEARCH FOR IT IN LSD BR LODE22 ;NOT FOUND - GO INSERT IT BITB #UNDEF,FLAGS(R1);IS IT DEFINED? BNE LODE24 ;YES -(BYPASS UNDEF WORK) JSR PC,SQUISH ;NO: REMOVE FROM UNDEF AREA SUB #BPSYM,USYME ;AND ADJUST UNDEF PTR LODE22: MOV R1,R4 ;INSERT NEW SECTION NAME INTO LSD MOV SYME,PTSECT ;POINTER TO  MOV R1,66 .ENDC .IFGE NTTYS-2 INC R1 ;INIT INTERRUPT VECTORS FOR MOV #KBDINT,340 ;TTY UNIT 1 MOV R1,342 MOV #PRTINT,344 MOV R1,346 .ENDC .IFG NTTYS-2 XXXXXX ;CREATE ASSY ERROR IF NTTYS .GT. 2 .ENDC .IFNZ NDISCS .IFZ $DDSDC ; ONLY FOR RF-11 DISK MOV #DINT,204 ; SET UP FOR DISC 0 ‚.¬pp߯”hf€p@[gÐ4@(¼ v3dhv€…hj¯”‹÷æ,w €� D”ÄE€ÿÄå@!!/[gÐ4,$à à à Åà à CaaŠíÐÂéw ŽŽ‡« hf€p .HÄe€; UPDATE 3/10/72 ROS2.RASM ; UPDATE 2/24/72 ROS2.SYS ; UPDATE 2/16/72 ROS2.SYS ; UPDATE 1/12/72 ROS2.SYS ; UPDATE 1/11/72 ROS2.SYS ; STANDARD REGISTER DEFINITIONS R0 = %0 R1 = %1 R2 = %2 R3 = %3 R4 = %4 R5 = %5 SP = %6 PC = %7 PS = 177776 ; $DEBUG = 1 ; ROS DEBUG SWITCH $SAVE = 10�SECTION NAME IN LSD JSR PC,INSYME ;INSERT NEW NAME IN LSD BR LODD20 LODE24: ;SECTION NAME FOUND ALREADY DEFINED IN LSD CMPB FLAGS+1(R4),#SECTN ;IS IT A SECTION NAME,TOO? BNE LDER17 ;NO - DOUBLE DEFINITION ERROR MOV R4,PTSECT ;SECTION NAME POINTER TO ORIG ENTRY CMP VALR(R4),VALR(R1) ;COMPARE SECTION SIZES BHIS LODD20 ;ORIG WAS BIGGER: LEAVE IT MOV VA“€ à6÷÷÷ˆ6@€  @€ @€ àH÷÷÷v6@€  @€ @€ àZ÷÷÷d6@€  @€ @€ àl÷÷7 .§7 .§0.@€  @€ .§.§.€7 .§7 .§7 .§7 .§7 .§7 .§7 .§7 .§÷’6.§ .§.§.§.§.§.§".§&Àƒ MOV #240,206 ; AT INTERRUPT LEVEL 5 .ENDC .IFNZ $DDSDC ; ONLY FOR DDS DISK MOV #DINT,214 ; DISK 0 MOV #240,216 ; AT LEVEL 5 .ENDC .ENDC ; ; XFER TO OTHER INITIALIZATION SUBROUTINES ; JSR PC,TTINIT ;INITIALIZE TTYIO TABLES JSR PC,QIPL ; INITIALIZE QUEUE TABLES JSR PC,CLINIT ;INIT FOR CLOCK ROUTINES JSR PC,EMTINIT „4400 ; USE TRAP INSTR. TO CALL SAVE ; ; ; TASK CONTROL SYSGEN EQUATE CARDS ; NPRIOR = 4 ; NO. OF SOFTWARE PRIORITY LEVELS. PRIBKG = NPRIOR ; PRIORITY OF BACKGROUND .IFLE NPRIOR ; XXXXXXXX ;NPRIOR MUST BE GREATER THAN ZERO .ENDC MXTASK = 20 ; MAX. NUMBER OF CORE TASKS IN SYSTEM. NLTASK = 1 ; LARGEST TASK # OF TASKS LOADED WITH SYSTEM …LR(R1),VALR(R4) ;REPLACE WITH NEW BIGGER SIZE BR LODD20 ; ******************************************************************** LDER17: MOV #17,R4 ;SECTION NAME CONFLICT W/GLB OR MOD NAME JSR PC,ERRPRT .PAGE ;*******GLOBAL SYMBOL******** (HERE AT LAST...) LODE40: BITB #UNDEF,FLAGS(R1);REF OR DEF? BEQ LODE50 ;REF JSR PC,PTGLOB ;DEF - SEE IF IT IS ALREADY IN LSD BR LODE44 ! ÄeåÄe Äß Ýw K([gÐ4ù,n€�ÂĶ Ì ‡ã… ûÅ‹W¡? ¶&,’Åe ÅeÅe Åe Q‘Ô ÂŠèÂãÄÀ¶@(Éó‡ ; INIT EMT NUMBERS JSR PC,LODINIT .IFG NLP ; ONLY IF HAVE LP JSR PC,LPINIT .ENDC .IFG NCR ; ONLY IF HAVE CARD READER JSR PC,CRINIT .ENDC ; ; SET UP INPUT IN TASK TABLE ; MOV #1,R1 ; SET UP FOR TASK NO. ONE MOVB #NPRIOR-1,TPRTY(R1) ; SET PRIORITY OF INPUT CLRB TSTAT(R1) ; SET QUIESCENT ASL R1 ; TASK Wˆ ;NOTE: IF OVERLAYS ARE USED, THEN THE ;FIRST OVERLAY TASK NUMBER IS MXTASK+1 OVTMIN = MXTASK+1 ;FIRST OVERLAY TASK NUMBER OVRLAY = 0 ; NO OVERLAY TASKS. ;0 = NO OVERLAY, 1 = OVERLAY .IFNZ OVRLAY ; MAXOVR = 20 ;MAXIMUM NUMBER OF OVERLAY TASKS .ENDC ;(NOT USED IF OVRLAY = 0) .IFZ OVRLAY ; MAXOVR‰;NOT FOUND BITB #UNDEF,FLAGS(R4);FOUND: IS IT ALREADY DEFINED? BEQ LODE42 ;NO: GO REMOVE IT FROM UNDEF AREA BISB #DBLDEF,FLAGS(R4) ;FLAG OLD ONE AS A DOUBLER BISB #DBLDEF,FLAGS(R1) ;ALSO FLAG NEW ONE BR LODE44 ;BYPASS REMOVAL LODE42: JSR PC,SQUISH ;REMOVE FROM UNDEFINED TABLE SUB #BPSYM,USYME ;AND ADJUST ITS POINTER LODE44: MOV R1,R4 ;AGAIN POINT TO INPUT ENTRY Š312; =3-->MEMORY * ; * (IF SWITCHES ARE =0, PROGRAM WILL ENTER AN INFINITE TIGHT LOOP)* ; * NOW PRESS "CONTINUE". UPON THE NEXT "HALT", SET THE SWITCHES * ; * TO THE NUMBER OF THE SECTOR (FOR DISC) OR THE MEMORY ADDRESS * ; * AT WHICH YOU WISH TO BEGIN DUMPING. (IN THE CASE OF MEMORY, * ; * DUMPING WILL BEGIN AT THE BEGINNING OF THE 64-WORD BLOCK WHICH * ; * CONTAINS THE SELECTED START ADDRESS.) NOW PRESS "CONTINUE". * ; * UPON THE NEXT (THIRD) "HALT", ENTE‹ORD INDEX MOV #INPTHD,HEADER(R1) ; SET HEADER ADDRESS .IFNZ MSGBUF ; ONLY IF DISK MESSAGE BUFFERING ; .REF FILE ; ; SET UP DISCS FILES FOR TTY ; MOV #20.,R1 MOV #FILE,R2 MOV #20,R3 IPLX50: MOV R1,(R2)+ ; SET UP FILE ID MOV R3,(R2)+ ; SET UP START SECTOR MOV #404,(R2)+ ; P=0,DEVICE=1,FILE TYPE=4 MOV #FILESZ,(R2)+ ; SET UP LENGTH Œ = 0 ;SET TO ZERO ONLY IF NO OVERLAYS .ENDC TASMAX = MXTASK+MAXOVR ;MAXIMUM NUMBER OF TASKS (INCL OVERLAYS .IFLE MXTASK ; XXXXXXXX ;MXTASK MUST BE GREATER THAN ZERO .ENDC .IFL NLTASK ; QTAB XXXXXXXX ;NTASK CANNOT BE NEGATIVE .ENDC .IFG NLTASK-MXTASK ; QTAB XXXX� JSR PC,INPTRH ;INSERT IT ALPHABETICALLY IN THIS SECT'N ;IF IT WAS DOUBLY DEFINED, BOTH ENTRIES ARE FLAGGED AS SUCH. THE FIRST ;ENTRY WILL BE USED AS THE REF'D VALUE. THE MAP WILL SHOW ALL OF THEM. BR LODD20 ; * * * GLOBAL REF * * * LODE50: JSR PC,PTGLOB ;IS IT IN LSD ALREADY? BR LODE52 ;NOT FOUND: INSERT IT BR LODD20 ;FOUND: NO NEED TO DO ANYTHING LODE52: JSR PC,INUSYM ;INSERT AS AN UNDEFINED BR ŽR INTO THE CONSOLE SWITCHES * ; * THE NUMBER OF CONSECUTIVE DISC SECTORS OR CORE MEMORY BLOCKS * ; * YOU WISH TO DUMP. * ; * PRESS "CONTINUE" AGAIN. SECTORS OR BLOCKS WILL BE PRINTED * ; * UNTIL THE SECTOR/BLOCK COUNT IS EXHAUSTED. THE PROGRAM WILL * ; * THEN JUMP TO ITS "START" TO AWAIT ANOTHER DUMP REQUEST. * ; * * ; * �CLR (R2)+ ; CKSAVE = 0 ADD #FILESZ,R3 ; START SECTOR NEXT FILE INC R1 ; BUMP FILE ID CMP R1,#35. ; FINISHED? BLE IPLX50 ; NO .ENDC CLR R0 CLR R1 CLR R2 CLR R3 CLR R4 CLR R5 JMP DSPTCH ; FINISHED WITH IPL-EXECUTE ROS ; ; ; .END �XXXX ;NTASK MUST BE <= MXTASK .ENDC ; ; THE FOLLOWING IS A LIST OF PRIORITY PROPERTIES ; +1 = TIME SLICE PRIORITY (CORE OR OVERLAY) ; 0 = FIXED OVERLAY TASK (MAY BE CORE) ; -1 = FREE TASKS (CORE OR DYNAMIC OVERLAY) ; PRIP01 = -1 ; PRIORITY PROPERTY LEVEL 1 PRIP02 = 0 ; PRIORITY PROPERTY LEVEL 2 PRIP03 = 1 ; PRIORITY PROPERTY LEVEL 3 PRIP04 = -1 PR‘ LODD20 .PAGE ;NOW ALL OBJ MODULES HAVE BEEN PASSED OVER ONCE, ALL ; GSD'S HAVE BEEN PROCESSED, AND THE LOADER'S SYMBOL DIRECTORY ; (LSD) HAS BEEN CONSTRUCTED. NOW THE LSD MUST BE PASSED OVER ; TO ASSIGN LOAD MODULE RELATIVE ADDRESSES TO ALL GLOBAL SYMBOLS, ; AND SECTION BASES ASSIGNED. THE LOAD MAP WILL THEN BE PRINTED, ; SHOWING LOAD MODULE RELATIVE ADDRESSES, MULTIPLY DEFINED SYMBOLS ; ACCOMPANIED BY A "M" FLAG. LODF00: ’ * ; * SINCE THE PROGRAM IS COMPLETELY SELF-INITIALIZING, IT CAN BE * ; * KEPT IN CORE PERMANENTLY AND RUN AT ANY TIME, WITH MINIMUM * ; * INTERFERENCE TO OTHER PROGRAMS THAT ARE RESIDENT. * ; ******************************************************************** R0=%0 R1=%1 R2=%2 R3=%3 R4=%4 R5=%5 SP=%6 PC=%7 SWR = 177570 ;SWITCHES LPADDR = 165010 ;PRINTER MEMORY ADDRESS REG ”IP05 = 0 ; PRIORITY PROPERTY LEVEL 5 PRIP06 = -1 ; PRIORITY PROPERTY LEVEL 6 PRIP07 = 0 ; PRIORITY PROPERTY LEVEL 7 PRIP08 = 1 ; PRIORITY PROPERTY LEVEL 8 PRIP09 = 1 ; PRIORITY PROPERTY LEVEL 9 PRIP10 = 0 ; PRIORITY PROPERTY LEVEL 10 PRIP11 = 0 ; PRIORITY PROPERTY LEVEL 11 PRIP12 = 1 ; PRIORITY PROPERTY LEVEL 12 PRIP13 = • ;END OF PASS 1 MOV #ND1MSG,TTYBUF ;INIT TO PRINT "END PASS 1" ON TTY MOV #TTYLST,-(SP) EMT TTYOUT CLR PRSIZE ;INIT PROGRAM LOAD SIZE MOV #LSDBGN,R0 ;INIT PTR TO LSD MOV R0,PTROBJ ;...AND TO CURRENT OBJ MODULE BR LODF20 LODF10: ADD #BPSYM,R0 ;NEXT ENTRY LODF20: CMP R0,SYME ;END OF LSD? BHIS LODF90 ;YES: EXIT LOOP MOVB FLAGS+1(R0),R1–LFREG = 165012 ;PRINTER AUTOLINEFEED REG LPWC = 165014 ;PRINTER WORD COUNT REG LPCMD = 165016 ;PRINTER COMMAND REG LPCSR = 165016 ;PRINTER STATUS REG .TITLE SUPDMP .REF SUPDMP SUPDMP: START: BIS #40,@#LPCMD ;PRINTER CLEAR CLR @#LPADDR ;ALSO ITS MEM ADDR REG MOV #1,@#LFREG ;AUTOLINEFEED TO PRINTER HALT ;1ST HALT: WAIT FO—(!¦÷÷÷6À ÀÀ•¸÷÷÷6À ÀÀ•Ê÷÷÷ô6À ÀÀ•Ü÷÷÷â6À ÀÀ•î÷÷÷Ð6À ÀÀ˜-1 ; PRIORITY PROPERTY LEVEL 13 PRIP14 = -1 ; PRIORITY PROPERTY LEVEL 14 PRIP15 = -1 ; PRIORITY PROPERTY LEVEL 15 PRIP16 = 0 ; PRIORITY PROPERTY LEVEL 16 .PAGE ; ; QUEUE SYSGEN EQUATE CARDS ; DPRTY = 1 ;DYNAMIC PRIORITY ASSIGNMENT; IF ; DPRTY = 0, THE ALL TASK PRIORITIES ; WILL BE RETRIEVED FROM TASK TABLE. ; ™ ;ENTRY TYPE MOVB FLAGS(R0),R2 ;QUALITIES FLAG CMPB R1,#GENTRY ;GLOBAL SYMBOL? BEQ LODF50 ;YES DEC R1 ;SECTION NAME? BNE LODF10 ;NO: GET NEXT ENTRY .PAGE ;*******SECTION NAME: MAKE ITS SIZE EVEN, STORE ITS BASE VALUE, SET PTR ; TO THIS SECTION, AND INCREMENT THE TOTAL PROGRAM SIZE. BITB #ABSREL,R2 ;ABSOLUTE OR RELOCATABLE? BNE LODF30 ;REL šR DEVICE SELECTION MOV @#SWR,KEY ;DEVICE SELECTION KEY BEQ . ;STICK HERE FOR OPERATOR INTERVENTION MOVB #'B,DISCID ;INIT I.D. PRINT OF "B" FOR DDC DISC CLRB DSWICH ;PREPARE PGM FOR USING "DDC" DISC MOV PC,R5 ;R5 IS USED AS PTR TO TABLE OF DISC ADDRESSES ADD #DSCTAB-.,R5 ;NOW AT TOP OF TABLE CMP KEY,#2 ;WAS DDC DISC SELECTED? BEQ HALT2 ;YES: ›•÷÷÷½6À ÀÀ•÷÷÷«6À ÀÀ•$÷÷÷™6À ÀÀ•6÷÷÷‡6À ÀÀ•H÷÷‡&À ÀÁóœ IF DPRTY = 1, THEN CALLING PROGRAM ; CAN SELECT PRIORITY. ARG = 1 ;ARGUMENT OPTION; IF ARG = 1, THEN ; THE CALLING PROGRAM CAN PASS AN ; ARGUMENT TO THE QUEUED TASK. RGSAVE = 1 ;REGISTER SAVE OPTION. 1 = SAVE ;REGISTERS, 0 = DON'T SAVE 'EM. ; ; ***** NOTE: IF DPRTY = 0 OR ARG = 0, THEN THE CORRESPONDING ; � CLR VALR(R0) ;ABS: SET SIZE... CLR BASE(R0) ;...AND BASE = 0 BR LODF40 LODF30: ;RELOCATABLE SECTION MOV VALR(R0),R3 ;SECTION SIZE MOV R3,R4 ASR R4 ADC R3 ;MAKE SIZE EVEN MOV PRSIZE,BASE(R0) ;SET BASE OF NEW SECTION ADD R3,PRSIZE ;SUM UP TOTAL SIZE (& END OF THIS SECT) LODF40: MOV R0,PTSECT ;POINTER TO NEW SECTION BR žNO FURTHER WORK NEEDED ADD #10.,R5 ;RF-11 DISC: USE UPPER HALF OF TABLE DECB DISCID ;PRINT "A" FOR RF-11 INCB DSWICH ;SET SWITCH TO GO THRU SHIFT LOGIC HALT2: HALT ;NOW WAIT FOR ADDRESS SELECTION MOV @#SWR,ADRESS ;DISC OR MEMORY: SAVE HALT ;WAIT FOR KEY-IN OF SECTOR/BLOCK COUNT MOV @#SWR,SECNT ;SAVE IT CMP KEY,#3 ;WAS MEMORY SELECTED? BNE DI  ---- ARGUMENT SHOULD BE OMITTED FROM THE CALLING LIST. .IFL DPRTY ; XXXXXXXX ;CREATE ASSEMBLY ERROR IF DPRTY ISNT .ENDC ;ZERO OR ONE. .IFG DPRTY-1 ; XXXXXXXX ; .ENDC ; .IFL ARG ; XXXXXXXX ;CREATE ASSEMBLY ERROR IF ARG IS NO .ENDC ;ZERO OR ONE .IFG ARG-1 ; ¡ LODF10 ;GET NEXT ENTRY ;*******GLOBAL ENTRY POINT LODF50: BITB #ABSREL,R2 ;ABS OR REL? BEQ LODF60 ;ABS MOV PTSECT,R3 ;POINTER TO CURRENT SECTION MOV BASE(R3),BASE(R0) ;SECTION BASE ADD VALR(R0),BASE(R0) ;CALC OFFSET FROM LOAD MOD BASE BR LODF10 ;NEXT LODF60: MOV VALR(R0),BASE(R0) ;HAS ABS VALUE BR LODF10 .PAGE ;NOW¢SC ;NO BIC #77,ADRESS ;ALWAYS DUMP IN BLOCKS OF 64 WORDS .PAGE PRTMEM: MOV ADRESS,R4 MOV PC,R3 ADD #MEMADR+6-.,R3 JSR PC,BIN2OCT ;CONVERT MEM ADDRESS TO PRINT IT MOV PC,R3 ADD #MEMBUF-.,R3 JSR PC,PRTHED ;GO PRINT MEMORY ADDRESS OF BLOCK MOV ADRESS,R0 ;PREPARE TO ... JSR PC,FILLBF ;...CONVERT BINARY TO ASCII AND PRINT IT AD£.ër\M¯”�H£@É2Ú@49@·.«:<}@”f�@;}¸G@’è€@ €` @(,\My:h¯”O÷æ(À0Š0Šð•À ð*÷%Û2 «:<} €` ’è€*É2Ú";}¸GO& ¤ XXXXXXXX ; .ENDC ; .IFL RGSAVE ; XXXXXXXX ;CAUSE AN ASSEMBLY ERROR IF .ENDC ;RGSAVE ISN'T 0 OR 1 .IFG RGSAVE-1 ; XXXXXXX ; .ENDC ; $ABMES = 1 ; # OF ABORT MESSAGE BUFFERS .IFL $ABMES ; $ABMES MUST BE => 0. XXXXXX ; ¥ ALL ENTRY POINTS AND SECTION BASES HAVE BEEN ;RELOCATED WITH RESPECT TO PROGRAM BASE ZERO. ;NOW TIME TO PRINT THE LOAD MAP. LODF90: MOV #HEDING,MAPBUF ;PRINT HEADING JSR PC,LPCALL ;GO ASK FOR LINE PRINTER MOV #LSDBGN,R0 CLR PRSIZE ;INIT CUMULATIVE LOAD MODULE SIZE BR LODG20 LODG10: ADD #BPSYM,R0 ;NEXT ENTRY LODG20: CMP R0,SYME ;END OF LSD? BHIS LO¦D #200,ADRESS ;IF MORE TO DO, BUMP ADDRESS... BR PRTMEM ;...AND CONTINUE .PAGE DISC: ;HERE TO DUMP FROM DISC BIS #400,@(R5) ;DCS - DISC CLEAR MOV ADRESS,R0 MOV R0,SECTOR ;SAVE IT FOR PRINTOUT DSWICH: BR .+2 ;USE RF-11 DISC IF INCREMENTED BR SETDAR ;...ELSE USE "DDC" DISC MOV R0,R1 ;NEED TO SPLIT IT UP SWAB R1 ;FÒƒ÷‡dÿÿ! ;}¸Gû0÷  æ ˆ÷( æ ˆÀ+Á‚ÂÃ(]"   ( +"‚*(™.,ã ã ã €  ¢,× '÷‚’õæ"8'(":,Rf&ˆCCTQ$äÀ‚Áå†� � � wêÁ 5>‚†—,v÷ÿÿþ · ú æ ˆ÷ œ "ÃÄ~ ÷ â °  ~ ,šÔ “Ô 7¶7ªÄåÄe à â "ø4,É0¾ô$ ÑÄ÷  Ä ÷  ÷¨ ABRT .ENDC ; PSTP ; THE SYSGEN PARAMETER '$PST CONTROLS THE EXECUTION PATH*PSTP ; DURING A TASK ERROR. PSTP ; = -1 ROS + USER ROUTINES PSTP ; = 0 ROS PSTP ; = +1 USER PSTP ; ©DH10 ;YES: EXIT LOOP MOVB FLAGS+1(R0),R1 ;ENTRY TYPE BEQ LODG30 ;OBJ MOD NAME DEC R1 BEQ LODG40 ;SECTION NAME CMP R1,#3 ;ENTRY? BNE LODG10 ;NO: IGNORE MOV #GLOBAL,-(SP) ;YES:***PRINT ENTRY NAME & VALUE*** MOV R0,-(SP) EMT R50UNP ;RAD50 UNPACK MOV 10(R0),R4 ;GLOBAL'S VALUE RELATIVE TO LOAD BASE 0. ªIRST GET EXTENSION BITS ASR R1 ASR R1 BIC #-3-1,R1 ;ISOLATE THE TWO EXTENSION BITS MOV R1,@10(R5) ;...AND FEED IT TO THE DISC - DAE ASL R0 ;LEFT-JUSTIFY LOW TEN ADDRESS BITS ASL R0 ASL R0 ASL R0 ASL R0 ASL R0 SETDAR: MOV R0,@6(R5) ;OUTPUT SECTOR NUMBER TO DISC ADDR REG .PAGE PRTSEC: ;NOW PRINT SECTOR HEADING «; UPDATE 1 3/17/72 TO IPL2.RAS ; UPDATE 3/13/72 FIX UP IPL2.RAS ; UPDATE 3/13/72 FROM IPL2.S12 TO IPL2.RAS ; UPDATE 3/13/72 IPL.S12 ; UPDATE 2/16/72 IPL2.S11 ; UPDATE 1/19/72 IPL2.S10 ; UPDATE 1/12/72 IPL2.S09 ; UPDATE 12/11/71 IPL.S08 ; UPDATE 12/10/71 IPL.S07 ; UPDATE 12/2/71 IPL.S06 ; UPDATE 11/18/71 IPL.S05 ; UPDATE 11¬ PSTP $PST = 0 ; PSTP ; PSTP .PAGE ;FOLLOWING ARE SYSGEN PARAMETERS FOR THE TIMER AND CALENDAR ROUTINES ; NORMALLY THE BASE PERIOD FOR THE TIMERS IS THE INTERRUPT PERIOD, AND ; IF THAT PERIOD IS DESIRED FOR USE BY ANY TIMER MODULE, "RESO" MUST BE ; SET TO 1, AND THAT RESOLUTION (ZERO) SPECIFIE­MOV #GLBVAL+6,R3 ;END OF ASCII BUFFER JSR PC,BIN2OC ;CONVERT BINARY TO OCTAL ASCII MOVB #' ,MFLAG ;INIT "M" FLAG POSITION WITH SPACE BITB FLAGS(R0),#DBLDEF ;WAS THIS SYMBOL MULTIPLY DEFIND BEQ LODG25 MOVB #'M,MFLAG ;YES: SET TO FLAG ENTRY IN MAP LODG25: MOV #ENTRY,MAPBUF ;SET UP TO PRINT ENTRY LINE JSR PC,LPCALL BR LODG10 ;NEXT .PAGE LODG30: ;***PR® MOV SECTOR,R4 MOV PC,R3 ADD #SECNUM+6-.,R3 JSR PC,BIN2OCT ;CONVERT SECTOR # TO PARITY ASCII MOV PC,R3 ADD #HEDBUF-.,R3 JSR PC,PRTHED ; NOW PRINT ONE SECTOR'S WORTH --- MOV PC,R3 ADD #DSCBUF-.,R3 MOV R3,@2(R5) ;CURRENT MEMORY ADDRESS REGISTER MOV #-64.,@4(R5) ;DISC WORD COUNT: ONE SECTOR MOV #5,@(R5) ;DCS - READ! TS¯/15/71 IPL.S04 ; UPDATE 11/12/71 IPL.S03 ; UPDATE 11/11/71 IPL.S02 ; UPDATE 11/10/71 IPL.S01 .TITLE IPL ;*********************************************************************** ;* * ;* INITIAL PROGRAM LOAD WILL INITIALIZE THE ROS SYSTEM AND * ;* THEN EXIT TO DISPATCH. THIS MODULE SHOULD BE EXECUTED * ;* BEFORE ENTERING ROS FOR THE FIRST °D BY THOSE MODULES. ; IF IT IS DESIRED TO MAKE THE BASE PERIOD COARSER THAN THE INTERRUPT ; PERIOD, "$TMBAS" MUST BE SET TO THE DESIRED RATIO OF BASE PERIOD TO ; INTERRUPT PERIOD. $TMBAS = 0 ;DE-SELECT ALTERNATE BASE PERIOD OPTION ; THE FOLLOWING PARAMETERS SPECIFY THE MULTIPLIERS THAT WILL BE LOADED ; INTO THE RESOLUTION COUNTER TABLES FOR DETERMINING THE PERIOD OF EACH ; RESOULTION. THE PERIOD OF A GIVEN RESOLUTION LEVEL DEPENDS ON ALL ; THE PRECEDING LEVELS (WIT±INT OBJECT MODULE'S NAME*** MOV #TITLE,-(SP) MOV R0,-(SP) EMT R50UNP ;UNPACK MODULE'S NAME MOV #MODULE,MAPBUF ;INIT TO PRINT MODULE NAME & HEADING JSR PC,LPCALL ;GO PRINT IT BR LODG10 ;NEXT LODG40: ;***PRINT PROGRAM SECTION NAME*** MOV #SECNAM,-(SP) MOV R0,-(SP) EMT R50UNP ;UNPACK SECTION NAME MOV 10(R0),R4 MOV #S²TB @(R5) ;DCS - READY? BPL .-4 ;NOT YET MOV PC,R0 ADD #DSCBUF-.,R0 ;POINTER TO BINARY BUFFER JSR PC,FILLBF INC SECTOR BR PRTSEC .PAGE FILLBF: MOV #4,LINCNT ;PRINT FOUR LINES OF 16 WORDS EACH NXTLIN: MOV PC,R3 ;PRINT NEXT LINE ADD #LPBUF+6-.,R3 ;ASCII BUFFER MOV #16.,R1 ;# WORDS PER LINE CVRT: MOV (R0)+,R4 ;NEX³TIME. * ;* * ;* PROGRAMMER 51,52,53 AND 54 * ;* DATE 11/9/71 * ;* REVISION ;* REVISION * ;* * ;*********************************************************************** .REF ´H LOWER NUMBERS), WHICH ACT AS SUCCESSIVE ; MULTIPLIERS IN COUNTING TO THE GIVEN RESOLUTION LEVEL. ; THUS, FOR "RES4", ITS PERIOD WOULD BE: ; RES4*RES3*RES2*RES1*RES0 --- IN UNITS OF THE BASE PERIOD RES0 = 1 ;1/60 RES1 = 15. ;1/4 RES2 = 2 ;1/2 RES3 = 2 ;1 RES4 = 5 ;5 RES5 = 2 ;10 RES6 = 3 ;30 RES7 = 2 µECVAL+6,R3 JSR PC,BIN2OC ;CONVERT BINARY TO OCTAL ASCII MOV 6(R0),R1 ;SECTION SIZE MOV R1,R4 MOV #SECSIZ+6,R3 JSR PC,BIN2OC ;CONVERT BINARY TO OCTAL ASCII MOV R1,R2 ASR R2 ADC R1 ;MAKE MODULE SIZE EVEN ADD R1,PRSIZE ;ACCUMULATE LOAD MODULE SIZE MOV PRSIZE,R4 MOV #CUMSIZ+6,R3 JSR PC,BIN2OC ;CONVERT IT TO O¶T BINARY WORD JSR PC,BIN2OCT ;CONVERT IT TO PARITY ASCII ADD #6,R3 ;GET TO END OF CURRENT ASCII MOV #120240,(R3)+ ;INSERT A DOUBLE SPACE ADD #6,R3 ;GET IT READY FOR NEXT CONVERSION DEC R1 ;MORE WORDS IN THIS LINE? BGT CVRT ;CONVERT NEXT WORD ; BUFFER NOW FULL: TIME TO PRINT MOV PC,R1 ADD #LPBUF-.,R1 MOV R1,@#LPADDR ·EMTINIT ; FOR EMT INIT .REF UTLIPL ; .DEF IPL,SSTACK,LOGMAX,PHYDEV,ALTDEV .DEF QTIME,DQTIME,SSTACK .IFNZ OVRLAY ; ONLY IF HAVE OVERLAYS .DEF BEGDYN,ENDDYN .ENDC .REF TIMCTL,EMTRAP,CLINIT .REF RQUEST,SAVE,DSPTCH,QIPL,TPRTY,HEADER,INPTHD .REF PFSIPL,PSTIPL .REF TSTAT,DINT .REF RASIPL,RCIPL .REF PRTINT,KBDINT ;TTYIO PRINTER AND KEYBOAR¸;60 RES8 = 3 RES9 = 5 RES10 = 100. RES11 = 2 RES12 = 2 RES13 = 2 RES14 = 2 RES15 = 2 ; IN SYSTEMS WHERE THE BASE PERIOD IS GREATER THAN ONE MILLISECOND, ; "MSECR" WILL NECESSARILY HAVE A PERIOD GREATER THAN ONE MILLISECOND. MSECR = 0 ;NORMALLY 1 MSEC: HERE IS = 16.7 MSECS SECR = 3 ;"RES3" IS THE ONE-SECOND RESOLUTION TRES = SECR ; FOR TIME-SLICE WATCH-DOG IN RP¹CTAL ASCII MOV #SECT,MAPBUF JSR PC,LPCALL ;PRINT SECTION NAME,BASE,SIZE,& CUM SIZE BR LODG10 ;NEXT .PAGE LODH10: ;END OF PRINTING DEFINEDS: NOW PRINT UNDEFINEDS, IF ANY CMP SYME,USYME ;ANY UNDEFINEDS? BEQ LODH30 ;NO: GO TO MESSAGE MOV #UNDHED,MAPBUF JSR PC,LPCALL ;PRINT HEADING MOV #UNDDEF,MAPBUF ;SET UP TO PRINT FROM UNDEFINED BUF LODH20: MOV ºMOV #-63.,@#LPWC ;PRINT SIXTEEN 6-CHAR NUMBERS MOV #4000,@#LPCMD ;PRINT! TST @#LPCSR ;DONE? BPL .-4 ;NOT YET DEC LINCNT ;MORE LINES? BGT NXTLIN ;YES DEC SECNT ;DOES HE WANT ANOTHER SECTOR/BLOCK? BLE .+4 ;ALL DONE. RTS PC ;RETURN FOR ANOTHER ONE TST (SP)+ JMP START ;GO BACK AND WAIT »D ;INTERRUPT ROUTINES .REF TTINIT ;TTYIO INITIALIZATION SUBROUTINE .IFG NLP ; ONLY IF HAVE LINE PRINTERS .REF LPINIT .ENDC .IFG NCR ; ONLY IF HAVE CARD READERS .REF CRINIT .ENDC ; .CSECT SSTACK = . ; BEGINNING VALUE OF SYSTEM STACK .IFNZ OVRLAY ; ONLY IF HAVE OVERLAYS ; ; THE FOLLOWING AREA IS RE¼OM $NRES = 16. ;USE MAX # OF RESOLUTIONS .IFLE $NRES XXXXXXXX ;$NRES MUST BE FROM 1 TO 16 .ENDC .IFG $NRES-16. XXXXXXXX ;COME ON! MUST BE LESS THAN 17 .ENDC ; THE BASE PERIOD FOR THE TIME-OF-DAY CLOCK, ABORT, AND TIME-SLICE IS ; NORMALLY THE INTERRUPT PERIOD, AS SPECIFIED BY "TICRES". ; IF A MULTIPLIER FOR THIS INTERRUPT IS DESIRED TO PRODUCE A COARSER ; BASE PERIOD, USE THE PARAMETE½ #UNDNAM,-(SP) MOV R0,-(SP) EMT R50UNP ;CONVERT TO ASCII JSR PC,LPCALL ;GO PRINT IT ADD #BPSYM,R0 ;BUMP TO NEXT ENTRY CMP R0,USYME ;REACHED END? BLO LODH20 LODH30: ;NOW PRINT "PASS 2" ON TTY MOV #PAS2MG,TTYBUF MOV #TTYLST,-(SP) EMT TTYOUT ;PRINT MESSAGE ; ******************************************************************** ¾FOR ANOTHER SEQUENCE .PAGE BIN2OCT: ;BINARY TO ASCII CONVERSION - WITH PARITY MOV #6,R2 ;CONVERT SIX CHARS BIN050: MOVB R4,-(R3) ;PUT NEXT DIGIT IN ASCII BUFFER BICB #370,(R3) ;ISOLATE ONLY THIS OCTAL DIGIT CLR -(SP) ;WILL ACCUM PARITY MOVB (R3),TMP ;WANT TO COUNT BITS ASR TMP ADC (SP) ASR TMP ADC (SP) ASR TMP ADC ¿SERVED FOR THE DYNAMIC CORE POOL ; BEGDYN = . ; RESERVE 3K FOR . = .+6144. ENDDYN = . ; DYNAMIC CORE STORAGE .ENDC PSR = 177776 ; PROCESSOR STATUS REGISTER EQUATE ; ; INTERRUPT VECTOR EQUATES ; MPSHBT = 244 ; MANUAL PUSHBUTTON MPSHLV = 200 ; BR4 FOR MANUAL PUSHBUTTON .IFZ $SAVE-3 ; ONLY IF REAL SAVE (BPT TRAP) SAVTRP = 14 ÀR "$ABMPL" TO SPECIFY THE RATIO DESIRED. TICRES = 60. ;# OF T-O-D CLOCK TICKS PER SECOND $ABMPL = 6 ;CLOCK BASE PERIOD = 1/10 SECOND C1COMD = 177546 ;DEVICE ADDRESS FOR HIGH-SPEED CLOCK C1CBIT = 100 ;BIT TO CONTROL FAST CLOCK INTERRUPT $TMSLC = 1 ;SYSTEM OPTION FOR INCLUDING TIME-SLICING $SWATZ = 20. ;NUMBER OF ENTRIES IN SCHEDULER "WAIT" TABLE $TWATZ = 20. ;WORDS IN TIMER'S "WAIT" TABLE Á .PAGE ;PASS 1 IS NOW COMPLETED. NOW BEGIN PASS 2 TO FORM THE ;LOAD MODULE ITSELF, COMPLETE WITH HEADER & TRAILER. ;THE METHOD IS TO:1)RESERVE A FILE THE SIZE OF THE LOAD ;MODULE, HAVING PRINTED ITS NAME ON THE LOAD MAP; ;2)SCAN THE OBJECT CODE FOR TEXT BLOCKS; ;3)MODIFY ANY RELOCATABLE CODE INDICATED IN ANY RLD BLOC ;4)CREATE THE TRAILER TO RELOCATE THE MODULE AT RUN TIME ;5 (SP) ASR (SP)+ ;SEE IF BIT COUNT WAS EVEN OR ODD BCC BIN100 ;WAS EVEN: PARITY BIT NOT NEEDED BISB #200,(R3) ;MAKE EVEN BY SETTING PARITY BIT BIN100: BISB #060,(R3) ;MAKE CHARACTER ASCII ASR R4 ;SHIFT FOR NEXT OCTAL DIGIT BIC #100000,R4 ;PREVENT SIGN PROPAGATION ASR R4 ASR R4 DEC R2 ;MORE ASCII DIGITS TO GO? BGT BIN050 à ; SAVE TRAP .ENDC .IFZ $SAVE-104400 ; ONLY IF ODT SAVE (TRAP TRAP) SAVTRP = 34 .ENDC SAVLEV = 340 ; SAVE UNDER LOCKOUT ; ; ; PHYSICAL DEVICE TABLE ; LOGMAX: .WORD 12. ; LARGEST VALID LOGICAL DEVICE#. PHYDEV: .WORD 040000 ; TTY UNIT 3, AVAIL, ALTERNATE AVAIL .WORD 000400 ;DISC UNIT 0, AVAIL, NO ALTERNATE .WORD 100000 .WORD 100000 .WÄ .PAGE ; ; NDISCS = 1 ; DISC OPTION AND NUMBER OF CONTROLLERS ; $DDSDC = 0 ;USE RF-11 ; ACTSIZ = 2 .IFL 20.-ACTSIZ XXXXXXXX ; ERROR-ALLOCATE MORE LOCATIONS XXXXXXXX ; FOR AUTHORIZATION CODES .ENDC ; .IFNZ NDISCS DRESDI = 0 ; DISK RES. DIRECTORY .IFL 3-NDISCS XXXXXXXX ; PRESENTLY CODED FOR Å)FILL IN THE HEADER & TRAILER POINTERS ;6)WRITE OUT THE LOAD MODULE ;THESE OPERATIONS ARE DONE A SECTOR AT A TIME, TO ;CONSERVE PROGRAM BUFFER SPACE. ; FIRST MUST INIT TRAILER AND OTHER POINTERS... MOV PRSIZE,R0 ;TOTAL PROGRAM BYTES DEC R0 ;IN CASE SIZE IS MULTIPLE OF 128 BYTES ASR R0 BIC #100000,R0 ASR R0 ASR R0 ASR R0 ASR Æ ;BACK FOR MORE RTS PC PRTHED: MOV R3,@#LPADDR ;INIT PRINTER TO PRINT MOV #-9.,@#LPWC ;WORD COUNT MOV #4000,@#LPCMD ;PRINT! TST @#LPCSR ;DONE? BPL .-4 ;NOT YET RTS PC .PAGE ADRESS: .WORD 0 KEY: .WORD 0 ;DEVICE SELECTION KEY LINCNT: .WORD 0 SECNT: .WORD 0 ;# OF SECTORS TO PRINT SECTOR: .WORD 0 ;CURRENTÇORD 040001 ; TTY UNIT 1, AVAIL., ALTERNATE AVAIL ; ; PHYSICAL DEVICE # FOR DECTAPES - 1 CONTROLLER .WORD 2000,2001,2002,2003,2004,2005,2006,2007 ; ; ; ALTERNATE DEVICE TABLE (PARALLEL TO PHYSICAL DEVICE TABLE) ; ALTDEV: .WORD 4,0,0,0,0 .WORD 0,0,0,0,0,0,0,0 ; FOR DECTAPES - 1 CONTROLLER ; ; IPL = . RESET ; SEND INIT PULSE TO ALL DEVICES MOV #340,PSR ; SET CPU LEVEL TO 7 DURING IPL ÈMAX. OF 3 DISCS .ENDC ; NDPRT1 = 3 ; DISK PRI. LEVELS. .IFL NDPRT1-3 XXXXXXXX ; MUST BE AT LEAST THREE .ENDC ; .IFG NDISCS-1 NDPRT2 = 7 ; NO. OF PRIORITY LEVELS IN DISC 2 QUEUES .IFL NDPRT2-3 XXXXXXXX ; MUST BE AT LEAST THREE .ENDC .ENDC ; .IFG NDISCS-2 NDPRT3 = 3 ; NO. OF PRIORITY LEVELS IN DISC 3É R0 ASR R0 ASR R0 ;PGM BYTES/128=# WHOLE SECTORS FOR PRGM INC R0 ;GET TO BEGIN OF NEXT SECTOR AFTER PGM MOV R0,TRASEC ;FIRST SECTOR FOR TRAILER MOV R0,TRSCSV ;SAVE IT FOR RE-READ AT LOADER END ASL R0 ASL R0 ASL R0 ASL R0 ASL R0 ASL R0 ASL R0 ;NOW HAVE RELATIVE PC FOR TRAILER START MOV Ê SECTOR BEING DUMPED TMP: .WORD 0 HEDBUF: .BYTE '-,'S,'E+200,'C+200,'T+200,'O+200,'R+200,'-,'- DISCID: .BYTE 0,'< SECNUM: .=.+6 .BYTE '>+200 MEMBUF: .BYTE '-,'-,'C+200,'O+200,'R+200,'E+200,'-,'-,'-,'-,'< MEMADR: .=.+6 .BYTE '>+200 DSCTAB: ;TABLE OF DISC ADDRESSES FOR BOTH DISCS ; FOR DDC DISC: .WORD 165300 ;DISC CONTROL STATUS AND COMMAND REG .WORD 165304 ;DISC MEMORY ADDRESS REG .WORD 165302Ë MOV #SSTACK,SP ; SET UP SYSTEM STACK .IFZ $SAVE-104400 ; ONLY IF ODT IN CORE MOV 14,-(SP) MOV 16,-(SP) .ENDC JSR PC,PSTIPL ; TRAP INIT. .IFZ $SAVE-104400 ; ONLY IF ODT IN CORE MOV (SP)+,16 ; RESTORE ODT'S TRAP MOV (SP)+,14 .ENDC JSR PC,PFSIPL ; FOWER FAIL INIT. ; ; SET UP INTERRUPT AND TRAP VECTORS ; MOV #RQUEST,MPSHBT Ì QUEUES .IFL NDPRT3-3 XXXXXXXX ; MUST BE AT LEAST THREE .ENDC .ENDC .IFZ DRESDI NCFILE = 3 ; NO OF CORE RES FILE ID. .ENDC .IFNZ DRESDI NCFILE = NDISCS+40. ; NO. OF CORE RESIDENT ID'S ; ; INCLUDING DOD'S .ENDC ERRPRT = 1 ; PRINT-OUT DISC ERROR MESSAGES OPTION .ENDC CHKPTC = 0 ; CHÍ R0,TXTBK1 ;LOAD FIRST TEXT WORD W/PTR TO TRAIL BLK CMP (R0)+,(R0)+ ;ALLOW FOR 2-WORD TRAILER HEADER MOV R0,TRAPC ;INIT PERMANENT FOLLOWER OF TRAILER PC CLR TXTORG ;PC @ BEGIN OF CURRENT TEXT BUFFER MOV #LEDWDS*2,CURPC ;ALLOW FOR LEAD WORDS INSERTED BY LOADER MOV #LEDWDS*2+TXTBK1,TXTPTR ;...ALSO FOR TEXT POINTER MOV BGNSEC,TXTSEC ;INIT START SECTOR OF TEXT MOV #128.,TXTCNT ;INIT FOR Î ;DISC WORD COUNT .WORD 165306 ;DISC ADDRESS REG .WORD 165310 ;DISC ERROR REGISTER ; FOR RF-11 DISC: .WORD 177460 ;DISC CONTROL STATUS AND COMMAND REG .WORD 177464 ;DISC MEMORY ADDRESS REG .WORD 177462 ;DISC WORD COUNT .WORD 177466 ;DISC ADDRESS REG .WORD 177470 ;DISC ADDRESS EXTENSION REG LPBUF: .=.+132. DSCBUF: .=.+128. ;DATE: 22-MAR-72 Ï; SET UP HANDLER FOR MANUAL PUSHBUTTON MOV #MPSHLV,MPSHBT+2 MOV #SAVE,SAVTRP ; SET UP SAVE TRAP HANDLER MOV #SAVLEV,SAVTRP+2 MOV #EMTRAP,30 ;INIT EMT TRAP VECTOR MOV #340,32 ;LEVEL 7 MOV #TIMCTL,100 ; INIT CLOCK TO L-F CLOCK INTERRUPT MOV #340,102 .IFGE NTTYS-1 MOV #200,R1 ;INIT INTERRUPT VECTORS FOR MOV #KBDINT,60 ;TTY UNIT 0 MOV ÐECKPOINT CAPABILITY OPTION- ; ;******MODEL 45 ONLY FXPART = 1 ; FIXED PARTITION OPTION $SGMNT = 1 ; SEGMENT LOAD OPTION $CPTNO = 2. ; COMPRESS TASK NUMBER $MXFTP = 100. ; LARGEST FILE TYPE .PAGE ; ; TTYIO SYSGEN PARAMETERS ; NTTYS = 1 ; ONLY ONE TTY. ;IN SYSTEM SYSTTY = 0 ;LOGICAL UNIT NO. OÑTWO-SECTOR TEXT TRANSFERS MOV MODCNT,NAMCTR ;RE-INIT COUNTER FOR # OF OBJECT MODULES MOV #NAMBUF,NAMPTR ;RE-INIT POINTER TO MODULE NAMES MOV #TRAILBLOCK+4,TRAILPOINTER ;INIT TRAILER POINTER .PAGE LODJ10: ;LOOP HERE TO PROCESS SUCCESSIVE OBJ MODULE BLOCKS JSR PC,NXTMOD ;SET UP FOR NEXT OBJECT MODULE BR LODJ98 ;EXIT IF NO MORE LODJ12: JSR PC,GETBLK ;GET NEXT NON-GSD BLOCK BR ; M W KLEIN .END START Ó R1,62 MOV #PRTINT,64 MOV R1,66 .ENDC .IFGE NTTYS-2 INC R1 ;INIT INTERRUPT VECTORS FOR MOV #KBDINT,340 ;TTY UNIT 1 MOV R1,342 MOV #PRTINT,344 MOV R1,346 .ENDC .IFG NTTYS-2 XXXXXX ;CREATE ASSY ERROR IF NTTYS .GT. 2 .ENDC .IFNZ NDISCS .IFZ $DDSDC ; ONLY FOR RF-11 DISK MOV ÔF SYSTEM ;TTY DEVICE MSGBUF = 0 ;MESSAGE BUFFERING OPTION: IF 1, ;DISC MESSAGE BUFFERING VERSION IS ;ASSEMBLED. IF 0, CORE VERSION IS ;ASSEMBLED. DISCUN = 1 ;LOGICAL UNIT NO. OF DISC TO BE USED ;FOR MESSAGE BUFFERING DBUFSZ = 1 ;NO. OF 64 WORD DISC SECTORS ALLOCATED Õ LODJ50 ;FOUND A "MODULE-END" BLOCK BR LODK10 ;"TEXT" BLOCK BR LODJ18 ;"RLD" BLOCK BR LODJ12 ;"ISD" BLOCK: IGNORE LODJ18: MOV #3,TSWICH ;RLD! SET FLAG TO SHOW NOT FOLLOWING TXT CLR TXTBC ;DON'T ALTER "TXTPTR" IN "TXTOUT" LODJ20: ;PROCESS NEXT COMMAND IN RLD BLOCK TST R0 ;IS RLD BC EXHAUSTED? BGT LODJ22 ;NO - CONTINUE LODJ60: Ö‚zh (‚6,æ÷rr÷,~÷,ˆ÷ @6÷ p3÷ N� ,,S, È È ó"ðò· 8È ð‹P)Åå<,.眗 ÀeD zHnˆ**ÒrHn ˆ"*$*&Ò¡,RÄ ÷ œ Ä ÷ ” Ä ÷ Œ w¨÷ h÷N,vø î ÷ ÕÄ÷ n ÷ ‚ ñµ ÷ ~4,š÷å à D÷Ê Ä ÷ ä¾­ 7² 1-g,¾´†t°Ä÷ $ ñµ÷ 0ôµ²,âôÕñÕ÷ × #DINT,204 ; SET UP FOR DISC 0 MOV #240,206 ; AT INTERRUPT LEVEL 5 .ENDC .IFNZ $DDSDC ; ONLY FOR DDS DISK MOV #DINT,214 ; DISK 0 MOV #240,216 ; AT LEVEL 5 .ENDC .ENDC ; ; XFER TO OTHER INITIALIZATION SUBROUTINES ; JSR PC,TTINIT ;INITIALIZE TTYIO TABLES JSR PC,QIPL ; INITIALIZE QUEUE TABLES JSR PC,CLINIT ;INIT FOR CLOCK Ø ;FOR BUFFERING OF ONE MESSAGE ON DISC FILESZ = 20*DBUFSZ ;NO. OF SECTORS PER FILE NTRYS = 3 ;NO. OF TRYS TO OUTPUT A CHARACTER ;TO TTY TTOTIM = 15. ;MILLISECOND COUNT FOR TTY ;OUTPUT TIMERS TTITIM = 15. ;SECOND COUNT FOR TTY INPUT/OPERATOR ;RESPONSE TIMERS TTWTIM = 240. ;SECOND COUNT FÙ ;DONE WITH BLOCK: OUTPUT TEXT, IF ANY, AND CONTINUE JSR PC,TXTOUT ;GO OUTPUT TEXT, IF BUFFER IS FULL... ; ;...OR IF "CURPC" WAS CHANGED LODJ66: ;NOW PROCESS NEW BLOCK, IF IT FORCED TEXT OUTPUT MOV TSWICH,R2 ;SWITCH INDICATES INITIATING BLOCK TYPE CMP R2,#TMAX ;IS THIS VALUE LEGAL BGT LDER12 ASL R2 ;MAKE INTO BYTE INDEX JMP @LODJ69(R2) .PAGE Ú÷å € D÷ ¶‰,‘÷ �÷ `Š÷ æ ˆ7 @ À,  &,,*7: Àe 7 8 .†œœW Á òµ,N 0 0  Ä„ C ðü ÷`ö 772rø ݵ Ãì ð0lÑ0Í÷zœÿ *z=,œ÷ 0À,7 ¾ Àe 7 ¾ N†œÁ 'W …  ,©,Àóæ&'ˆÃ÷ ÷• . ¼ },ä÷•M ÷F÷ ÚÙæ¸&'ˆ÷š2÷ !ÛROUTINES JSR PC,EMTINIT ; INIT EMT NUMBERS JSR PC,RASIPL ; INIT RASM JSR PC,RCIPL ; INIT ROSCOM TEST JSR PC,UTLIPL ; INIT UTILITY TASKS (14. & 15.) .IFG NLP ; ONLY IF HAVE LP JSR PC,LPINIT .ENDC .IFG NCR ; ONLY IF HAVE CARD READER JSR PC,CRINIT .ENDC ; ; SET UP INPUT IN TASK TABLE ; MOV #1,R1 ; SET UPÜOR WAIT TIMER NWUCH = 5 ;NO. OF CHARS TO BE OUTPUT FOR ;WARMUP OF A TTY UNIT EOMCH = 33 ;ALTERNATE EOM CHAR (ALT KEY) EOMOPT = 0 ;EOM CHAR OPTION WHERE ; 1 = EOM IS FOLLOWED BY CR AND LF ; 0 = NOT FOLLOWED BY CR AND LF EOMPRT = 0 ;EOM PRINT OPTION WHERE ; 1 = EOM IS PRINTED Ý LODJ69: ;"TSWICH" JUMP TABLE LODJ12 ;T=0: TEXT FOLLOWED BY RLD. NO ACTION ON RLD REQUIRED LODK10 ;T=1: TEXT FOLLOWED BY TEXT. PROCESS SECOND TEXT BLK NOW LODJ50 ;T=2: TEXT FOLLOWED BY MODULE END. GET NEXT MODULE NOW LODJ12 ;T=3: LONE RLD (NO PREVIOUS TEXT). GET NEXT BLOCK TMAX = .-LODJ69/2-1 ;MAX ALLOWABLE T-SWITCH VALUE ; ******************************************************************* LDER12: MOV #12,R4 ;MAX T-JUMÞ¸"š,ÆÏæå&'ˆÃô÷ ¸DÃû÷ 8 åô$û¡,,ªB‚ A w`. Ä* Ã÷ ”÷àî÷ ‚­ïà¶,P÷- * ÷Ú÷ n÷DÐæH&'ˆ÷ \‚DHÈ,tÀe 7  õ‡÷6˜æ ˆÀØ À € ÀE€€ …6 d,˜€ € € € € € 7à 7Ê À À À À À À À 7Ç,¼²$7° 7 ´ ÷Š ÷v ª ÷z ’÷€Žä v V,à÷x x ÷‚t ÷�€ ÷ FT÷ :ß FOR TASK NO. ONE MOVB #NPRIOR-1,TPRTY(R1) ; SET PRIORITY OF INPUT CLRB TSTAT(R1) ; SET QUIESCENT ASL R1 ; TASK WORD INDEX MOV #INPTHD,HEADER(R1) ; SET HEADER ADDRESS .IFNZ MSGBUF ; ONLY IF DISK MESSAGE BUFFERING ; .REF FILE ; ; SET UP DISCS FILES FOR TTY ; MOV #20.,R1 MOV #FILE,R2 MOV #20,R3 IPLX50: MOV R1,(R2)+ ; SET UP FILE IDà ; 0 = EOM IS NOT PRINTED EOLCH = 12 ;CHAR BEING USED FOR END OF LINE ON ;TTY INPUT ECHOCH = 40 ;ECHO CHAR -- CHAR OUTPUT FOR NO ECHO MRCH = 25 ;MESSAGE RESTART CHAR (CONTROL U) LINELN = 72. ;LINE LENGTH: NO. OF CHARS TO BE ;TYPED IN A LINE .PAGE ; ; SYSGEN VALUES FOR LINE PRINTER AND CARD READER ; NLP = 1áP TABLE INDEX EXCEEDED JSR PC,ERRPRT GETBLK: ;SUBROUTINE TO GET A NON-GSD BLOCK. KEEPS FETCHING BLOCKS ;UNTIL FINDING A TEXT, RLD, OR MODULE END BLOCK. ;RETURNS TO: RTN+0 FOR MODULE-END; RTN+2 FOR TEXT; ;RTN+4 FOR RLDF RTN+6 FOR ISD. ;IF LAST BLOCK IN LAST MODULE IS NOT TEXT, RLD, OR MND, ;NO RETURN WILL BE MADE, BUT THE EXIT FROM PASS 2 WILL BE MADE. ;ROUTINE WILL NOT REJECT ILLEGAL COMMANDS ABOVE [6], BUT WILL ;Iâ[kúá ‚��,÷n 7 l À !÷ DÂ^ —  z&øÍ$&&øz,(Ö´øÄ ÷ À÷ 82@Bà ÂåöÂEªÖ´øD,Lüÿ Ž`‡B”*�C”ã(÷ Ãm Å — ¡,p÷ Ú — Ë z‚¤(@ZtŒ¨Ìð.‚¤(@Z t"Œ$¨&Ìõ,”ø(ÊZtŒw†Ä÷ JÄ÷ B° Íø(Ê Z tŒ=,¸ÂeÂe · ¬ 톗¢øÂå·” Ž÷ t ŽÓã MOV R3,(R2)+ ; SET UP START SECTOR MOV #404,(R2)+ ; P=0,DEVICE=1,FILE TYPE=4 MOV #FILESZ,(R2)+ ; SET UP LENGTH CLR (R2)+ ; CKSAVE = 0 ADD #FILESZ,R3 ; START SECTOR NEXT FILE INC R1 ; BUMP FILE ID CMP R1,#35. ; FINISHED? BLE IPLX50 ; NO .ENDC CLR R0 CLR R1 CLR R2 CLR R3 CL ; JUST 1 LINE PRINTER ; NCR = 1 ; AND JUST 1 CARD READER åNSTEAD MIS-INTERPRET THEM FOR ONE OF THE LEGAL ONES. JSR PC,NXTBLK ;GET NEXT OBJECT MODULE BLOCK BR LODJ98 ;NO MORE BLOCKS: EXIT PASS 2 MOV R0,R1 ;POINTER TO DATA MOV R5,R0 ;BYTE COUNT MOV (R1)+,R2 ;GET BLOCK COMMAND TST -(R0) ;COUNT OFF TWO BYTES FOR COMMAND SUB #2,R2 ;DISCARD COMMANDS BELOW 3. BLE GETBLK ;IGNORE THEM AND GET Næ,Ü(7˜ ˜ À R”ü7 † ÷ @ÿ¬ø÷Ë,t †÷l ‚Ä÷ àDDm÷ Àå ,$ DQ$÷ 4o÷ îÀåwÎþ÷ x Ddò,H÷ ØóU€þÿÀåñ÷ ^DQ$÷ üSÄàï,lÀåäD÷ êJQ$Dd÷  ÀåØ÷ ,†,�&D÷ Ì;Q$Dd„åÀåÊDQ$÷  47›,´¶ Àå7 Ž W-· ‚ DDdÄe7W,Ø~ ÷mœ ž 7 – Àå©É¥¦É¥£ Ë-,üh “ ÷ "÷eX ÷ –Ö Ä÷ ÜÄ÷ �. ÔR R4 CLR R5 JMP DSPTCH ; FINISHED WITH IPL-EXECUTE ROS ; ; ; .END è; LITTLE PROGRAM TO READ 8-BIT PAPER TAPE CHARS AND STORE THEM IN CORE. ; THEN READ TAPE AGAIN AND COMPARE WITH STORED IMAGES. ; START PROGRAM AT "START". IF CONSOLE SWITCH #15 IS DOWN, TAPE WILL ; BE BE READ AND STORED INTO CORE. IF IT IS UP, TAPE WILL BE COMPARED. ; IF SWITCH #7 IS UP, PROGRAM WILL HALT AFTER EACH ERROR PRINTOUT. ; PRESS "CONTINUE" TO PROCEED READING. ; IF SWITCH #7 IS DOWN, READING WILL PROCEED WITH NO HALT. R0=%0 R1=%1 R2=%2 R3=%3 R4=%4 R5=%5 SP=%6 PC=%éEXT BLOCK BIC #-3-1,R2 ;CHANGE 4 (MND=4+2) TO ZERO ASL R2 ;CHANGE TO BYTE INDEX ADD R2,(SP) ;BUMP RTN ADDR APPROPRIATELY RTS PC .PAGE ; ******************************************************************** LODJ22: ;PROCESS NEXT RLD COMMAND MOVB (R1)+,R2 ;GET RLD COMMAND BMI LDER25 ;IT IS ILLEGAL TO RELOCATE ONLY A BYTE MOVB (R1)+,R3 ;OFFSET êÄ÷ Ì÷@>÷•/æ: ˆÿ‡0 æH Ã: (H ,Fˆ÷* 7Šæ: ˆÀ € Àe!ŠÀ€ &ï : ˜0jÁø� Áe!ŠÁ� @àÁÐÀp PÈ ·Š×æ: •p *: ã,’ˆÄ÷¶Î7ŠÃæ: ˆÀv œW s¤: v ñ.¶W p — jò‹ð cw w³”f�";}¸G(;}¸Gn,ÜÃV W!TsœW!Lsň¨ V ˆ,ÅíN… s æ)ˆó‹A±�ñë& ±Œ:¯”(¯”t÷比“ °9,°Æ° ÁÂpÿŠ Ê‹þ€Ärÿaß xÿ�‘õÓ,$°¡óÁ ÃþC`ƒ ÷ 0 CÔ÷ (÷ "ß• P,H°vÿß‹tÿý€ß• vÿß‹tÿý€ß‹xÿÖ€ÔÀž°æ—,l°ÎEøÿì7 SWR=177570 TKS = 177560 TKB = 177562 TPS = 177564 TPB = 177566 .ASECT BFBGN = 1000 .=130000 START = . MOV #START,SP CLR R5 ;CHECKSUM MEMORY MOV #BFBGN,R1 ;BUFFER BEGIN MOV #TKS,R2 ;TTY READER STATUS REG GETCHR: INC (R2) ;ENABLE READER TSTB (R2) ;DONE? BPL .-2 ;NOT YET íFROM TEXT COMMAND BEQ LODJ24 ;ZERO OFFSET IS A DUMMY CMP -(R3),-(R3) ;ADJ OFFSET DUE TO "TXT" CMD AND "PC" WD LODJ24: MOV R3,OFFSET ;NOW IS OFFSET FROM FIRST WORD OF TEXT ADD TXTPTR,R3 ;ACTUAL BUFFER ADDRESS TO LOCATE TEXT MOV PTSECT,R5 ;POINTER TO SECTION ENTRY IN LSD CMP R2,#CMDMAX BGT LDER20 ;ILLEGAL COMMAND TST ASWICH ;SET TO IGNORE "ASECTS"? BEQ îÀþ’è€ 49»"$ÀU€11Š1б•Á 1 . 49 €` «:<}�H£É2Úï,>À Â7Š7÷€ æ: ˆ÷ âç : Œ.bw·ø·Š÷æ: ˆ÷ Ê ¤7 ã÷P”: &P,ˆæ ˆˆ„ „ „ „ „ „ &÷ T&æ¦f&™  Î,¬MÖ €�‚ƒ„…ĘÄmžÔ ‡×-´"ƒ= $"•,ÐÄ÷ ‡&À,7 Œ‡€Îe‡ð¥¹Îe0 •ƒ ƒ ƒ  ˜°ô‚À˜°”vÿß‹tÿý€Ñ�° ¢°øƒ‡ Uóð MOV @#TKB,R4 ;INPUT CHARACTER ADD R4,R5 ;ACCUM CHECKSUM TST @#SWR ;STORE OR COMPARE? BMI PASS2 ;COMPARE MOVB R4,(R1)+ ;STORE IT BR GETCHR PASS2: ;HERE TO READ TAPE AGAIN AND COMPARE WITH STORED IMAGE. CMPB R4,(R1)+ ;DO COMPARE BEQ GETCHR ;COMPARE IS GOOD DEC R1 ;BACK UP TO BYTE IN ERROR MOV #-BFBGñ LODJ26 ;NO - O.K. TO GO THROUGH CMP R2,#7 ;ALLOWED TO PROCESS TYPE 7 "PC" CMD ONLY BNE LODJ60 ;IGNORE REST OF RLD BLOCK LODJ26: ASL R2 ;MAKE WORD INDEX JMP @LODJ29(R2) ;GO TO PROPER COMMAND ROUTINE LODJ29: .WORD LDER20,CMD1,CMD2,CMD3,CMD4,CMD5,CMD6,CMD7,CMD8,CMD9 .WORD CMD2,LDER17,CMD4,CMD5,CMD6 ;THESE ARE .CSECT COMMANDS CMDMAX = .-LODJ29/2-1 .PAGE LODJ98: JMP LODL00 ò ,¡0ôÀe ò#û0-÷€‡&]À,6 *,‰, ÀF7 Z‡€‡# 0- ð¥Ù,@ €Îe‡Àe é÷ ºÿ‡ô¥ûÎe‡q,d ÷ ¦ÿ‡Îe‡&À÷e ø:,ˆ ÷ <ÿ€‡w ÿÄÖ÷ V÷e Ì÷e Ö”,¬ ”””÷ ÿw ôþ‡w âþĦÄe 7!¢ †U,Ð ­ #‚ô‡2-ðƒ7!~‚÷e vÓ,ô &fÀ„Áe  ‚�€‡!!!!!õ, w †þÁ @`� 7 V†¿0¿ ±Œ:�*°Æ° ÁÂpÿŠ Ê‹þ€Ärÿaß xÿ�‘õØ*$°¡óÁ ÃþC`ƒ ÷ 0 CÔ÷ (÷ "ß• U*H°vÿß‹tÿý€ß• vÿß‹tÿý€ß‹xÿÖ€ÔÀž°æœ*l°ÎEøÿÎe0 •ƒ ƒ ƒ  ˜°ô‚À˜°”vÿß‹tÿý€Ö�° ¢°øƒ‡ ZøôN,R3 ADD R1,R3 INC R3 ;GET # OF OFFENDING BYTE (1 TO N) JSR PC,PRINT CLR R3 BISB (R1)+,R3 ;STORED VALUE OF BYTE JSR PC,PRINT MOV R4,R3 ;TAPE BYTE VALUE JSR PC,PRINT MOVB #15,@#TPB ;C/R TSTB @#TPS BPL .-4 MOVB #12,@#TPB ;LINE FEED TSTB @#TPS BPL .-4 TSTB @#SWR BPõ ;END OF PASS 2: GO WRITE LOAD FILE ; ******************************************************************* LDER20: MOV #20,R4 ;ILLEGAL TEXT-MODIFICATION COMMAND JSR PC,ERRPRT LDER25: MOV #25,R4 ;NOT ALLOWED TO RELOCATE BYTES JSR PC,ERRPRT .PAGE LODJ50: ;MODULE-END BLOCK FOUND: ;MOVE MODULE POINTER "PTROBJ" TO NEXT MODULE NAME IN LSD; ;THEN BRING IN NEXT OBJECT MODULE MOV PTROBJ,R2 öB ýøw tþ‡“2< ÷ 7 À7*7· ÷e÷þ î¬ *þ »,f Îe‡÷ ÌÿM÷dò×-Øþ ‡÷ êóæ †dþ & ë,Š ˆ÷ –>· ä÷倸À´Áþ à÷d¼kþ $d,,® Á 7žä?¤®õ· ¨÷5¢ò”Ћ#Š,Ò BÁåwt”Â`Á ü‚Š7h@À5Ãe,ö X0”þÿà ü@À ÅHÎe‡Ä÷ àÄH, ÷ ØÄ÷ Ð÷eHÃBÓw`÷ „ýÄí8$)Ø,> × Ì‡æH ˆ·øL GETCHR HALT BR GETCHR PRINT: MOV #NUM+6,R0 PRINT1: MOV R3,-(SP) BIC #-7-1,(SP) ADD #60,(SP) ;CREATE ASCII FOR OCTAL DIGIT MOVB (SP)+,-(R0) ;FILL LIST ASR R3 ASR R3 ASR R3 CMP R0,#NUM BHI PRINT1 MOV #NUM,R0 PRINT2: MOVB (R0)+,@#TPB TSTB @#TPS BPL .-4 CMP R0,#NUM+12 BLOS PRINT2 ù ;CURRENT MODULE NAME IN LSD ADD #5,R2 ;POINT TO FLAGS BYTE LODJ52: ADD #BPSYM,R2 ;NEXT ENTRY CMP R2,SYME ;HIT LSD END? BHIS LODJ98 ;*****END OF LSD: NORMAL END OF PASS 2***** CMPB (R2),#OBJMN ;IS THIS ENTRY AN OBJ MOD NAME? BNE LODJ52 ;NO: KEEP LOOKING SUB #5,R2 ;MOVE BACK TO 1ST BYTE OF ENTRY MOV R2,PTROBJ ;POINTER TO NEXT OBJ MOD ENTRY IN LSD ú 8ÃŒ÷‡÷mø÷mÌH Œð,b æîÄ„#‡Äe€„#)‡÷•åæ: ˆÂ $: †.† ƒƒ ÃE€ƒ ƒ ƒ ƒ ƒ ƒ ÄÃm²÷È7нæ: î (: ‚0¬ ˆÄ Ä Ä Ä Ä Ä Ä 7¼ƒáÃep ÷²Ö ‡æ, Lp *, ï.Ô ˆ‡Â#‘ËÅøËÕ0„ ÄE€„ „  ô‡Ãwþ (wB,ú Â÷ Úÿ÷hæ ˆˆHh 6, p  RTS PC NUM: 0,0,0,20040,20040,20040 .END ý BR LODJ10 ;INIT FOR NEXT MODULE .PAGE LODK10: ;TEXT BLOCK ENCOUNTERED: FIRST TRANSFER IT TO INTERNAL ;BUFFER, THEN GET NEXT BLOCK. IF ANOTHER "TXT", OUTPUT FIRST ;ONE. IF AN "RLD", MODIFY TEXT, BUILD TRAILER, THEN OUTPUT TEXT ;IF MODULE END, OUTPUT TEXT BLOCK AND GET ANOTHER MODULE. TST ASWICH ;SWITCH SET TO IGNORE "ASECTS"? BNE LODJ12 ;YES: GO GET NEXT BLOCK CMP -(R0),(Rþ p c,B b ~€b ~Óf x ð í p lp €€i þ Þ ~]~€@™  Î,  ROSLOD IIA # ROSLOD PASS #ö,01 END  ROSLOD PASS #2 BEGIN ô,T ROSLOD PASS #2 END ERROR # ¶ x _ z`,z **** ROS1)+ ;ADJ BC AND PTR FOR "PC" AS 1ST TXT WRD MOV R0,TXTBC ;SAVE TEXT BLOCK BYTE COUNT MOV TXTPTR,R2 ;CURRENT OPEN CELL IN TEXT SAVE BUFFER LODK20: DEC R0 ;BC TO ZERO? BLT LODK30 ;YES MOVB (R1)+,(R2)+ ;TRANSFER ANOTHER BYTE BR LODK20 ;BACK FOR MORE LODK30: CLR TSWICH ;INDICATE FIRST TXT BLCOK JSR PC,GETBLK ;GET NEXT NON-GSD BLOCK BR LOLOD LOAD MAP **** A),ž********** MODULE TITLE: "" SEÍ%ÂCTION ENTRY OFFSET SIZE TOTALM àú,à<>  , !******V#(**** UNDEFINED REFERENCES G D•,Du"hb "¶"Œ+ ,¨óDK40 ;"MODULE-END" BR LODK50 ;"TEXT" BR LODJ22 ;"RLD" BR LODK30 ;ISD: IGNORE LODK40: ;TEXT FOLLOWED BY MODULE - END MOV #2,TSWICH ;PUT OUT TEXT: THEN GET NEW MODULE BR LODJ60 ;GO OUTPUT TEXT LODK50: ;TEXT FOLLOWED BY TEXT MOV #1,TSWICH ;INDICATE MORE TEXT AFTER OUTPUT THIS 1. BR LODJ60 ;GO OUTPUT UN-MODIFIED TEXT BLOCK  ; ******************************************************************** LDER21: MOV #21,R4 ;FINAL MODULE BLOCK NOT MODULE END JSR PC,ERRPRT .PAGE LODJ30: CMD1: ;INTERNAL SYMBOL: ADD SECTION BASE TO LOCAL OFFSET - ;"ADD BIAS" INSTRUCTION INTO TRAILER MOV (R1)+,R4 ;LOCAL VALUE ADD BASE(R5),R4 ;CALC OFFSET FROM LOAD MODULE BASE MOV R4,(R3)+ ;PUT ALTERED WORD INTO TEXT JSR PC,TRA ¸VÂ\Ê\F]”P`ƒ3ÂVî|ösÌVòshÖVÃàV¼v&wêêV¯ôVÀ˜VÐ à–VÐ  òVøƒ‡¹ W&æ¦f&M°WÖ €�‚ƒ„…% ¤$W€V$W‰æ& æ & ÷ Ö wJÆ*:WêW2Ì*^W *‚Wü*¦WØÊW  PUT ;"ADD" INTO TRAILER SUB #4,R0 ;BC BR LODJ99 LODJ32: CMD2: ;GLOBAL RELOCATION: OFFSET FROM LOAD BASE INTO TEXT - ;"ADD" INTO TRAILER MOV R1,R4 ;POINTS TO GLOBAL NAME CMP (R1)+,(R1)+ ;BUMP PTR PAST NAME JSR PC,SRGLOB ;SEARCH FOR NAME IN LSD BR LDER22 ;GLOBAL SYMBOL SEARCH FAILURE MOV R4,(R3)+ ;PUT ALTERED WORD INTO TEXT JSÊ °Wì*YD&@Y@FY^Y AC: ¬ ^Y ? ÌfY ILL CMD! !tY ILL PAR! ‚YNON-QUIESCENT (*¶W / ÚW‰ºWÿÿENÒYDSÖYQUÜYXXâYTMÌZÃ&ÐWDTþZRE®XTYÚXCRøXLP YEX÷TY8ÓðWæY÷ \í÷€,÷*Y$t&XæY÷ Òí÷ ÷%7 ’ÿ÷ ŽÿPR PC,TRAPUT ;PUT "ADD" INTO TRAILER SUB #6,R0 ;BC LODJ99: JMP LODJ20 ;COMMON RETURN (GET NEXT RLD COMMAND) LODJ34: CMD3: ;INTERNAL DISPLACED RELOCATION: ;DISPLACEMENT FROM CURRENT PC INTO TEST - ;"SUB BIAS" INSTRUCTION INTO TRAILER JSR PC,GETPC ;CURRENT OFFSET FROM LOAD BASE NEG R4 ADD (R1)+,R4 ;FORM (L-(.+2)) MOV R4,(R3)+ ;PUT ALTERED WORD IN*$X÷Šÿæ°W÷ "�Ö À¶W$È ü€wÖ\HXæFY÷ í÷Ô÷*YÌg\X7 ÐæY÷ ví÷ ¸ëÅ,YE,rXDÄå�Ä Ã¼WS# Ó Ë û÷fY˜æY÷ ¼ì*˜X×Ë ÓÕ Û Å Ñ÷tY|ñW¥,Ä !\*¼X ‚÷ ØÅ 7!8ëÄ ôE D‡ ‡W¥,ûÇ.àXW£LW£Cõ÷ 0‡÷ v)‡w¥0§ìW£Té÷ ø/âY‡w¥§ãW£Tà÷ L)‡ *”Yæ7 ôÿ7 òÿ7 ðÿaÚYc™Ä ýæ”Yz¸Y÷ ˜„Ö  ƒ‡“*ÈYZ*Z`ZrZ ÁÁÁW¥,27,ìYTO TEXT JSR PC,TRAPUT ;"ADD" INTO TRAILER BIS #100000,-2(R3) ;CHANGE IT TO A "SUB" INSTR SUB #4,R0 ;BC BR LODJ99 ;NEXT .PAGE LODJ36: CMD4: ;GLOBAL DISPLACED RELOCATION: ;DISPLACEMENT FROM CURRENT PC INTO TEXT ;NO TRAILER ELEMENT JSR PC,GETPC ;GET PC NOW MOV R4,R3 ;SAVE IT MOV R1,R4 ;PTR TO GLOBAL NAME Ä 0!-‚÷  ÿÅ )!&7!Ü#Âð¥yÊY50Z÷àæ¥ô¥!^4Š!^·Ö¥‡÷àÎ¥ô‹!^­!^ $þ&À07 ’À ƒ.º_À 2 7 ÊÁ ô•!^ß�þÿ‡ô•!^Z*â_€œ À Ä <ø]^0^î]0^ø]ß�þÿ‡Ÿ•¦*`þÿŽŽŽ‡æ—þÿ& ÷ (ÿw,ß•àþÿÀºý“**` ÜÈ1Š!^7 ¦ý7  7 |ü0 ÆœýŠ=*N`þÿwöñŠ!^ù&f¦ €ÝK7 xýH‚æ—þÿ&r`ß•àþÿœ!^Á y‚`ú`ú`’`¨`Ò`Ò`ú`ú`¬,’`Ÿ“þÿ&÷ zß•àþÿÖ *Á6ý1 7 .ý7 (G.¸`7 ü�Áe Æ"ýffffffð•!^Â�aÊ();THAT SECTION'S BASE. MOV R1,R4 ;PTR TO SECT NAME SOUGHT CMP (R1)+,(R1)+ ;BUMP TO CONSTANT JSR PC,GETSEC ;SEARCH FOR SECTION NAME IN LSD BR LDER23 ;NOT FOUND MOV R4,PTSECT ;PERM PTR TO SECT NAME IN LSD... MOV R4,R5 ;...ALSO CURRENT PTR SUB #4,R0 ;BC (MORE BELOW) CLR ASWICH ;"ASECT" SWITCH: PREPARE CMP 4(R5),#410 ;IS TH**à`W"Âåø1f÷ 8üŸ•þÿ‚�€ƒ*aއcaw ðõæ—þÿ €ÝKÆ*(a7 ¸üH‚À ^€ ß•àþÿœ!^Âå 8 2*La*6ð•!^Ÿ“þÿBœ  ƒø]+C ÄÃû¢*pa%ß•àþÿW"ò ø] rø] òø]î]²`î]–*”aL2î]É1 0Š!^Ÿ•þÿvw ^õî*¸a‡… … … õf¦æ&×þÿ&  „Ý17¡ü%*Üa.‚ß•àþÿ­!^)ô•!^Ä ^„ Ê �œ E*bÁ ¹î]±î]´Š!^ß�þÿ¶ „ƒ‚�ö *$bއö—þÿæ÷ ýwŽ Ž Ž 6 ä*Hb,-IS AN "ASECT"? BNE LODJ44 ;NO-O.K. TO CONTINUE INC ASWICH ;SET TO FORCE IGNORE OF ALL "ASECT" TEXT ; CONTINUE AS IN "CMD8" LODJ44: CMD8: ;MODIFICATION TO PC: ".=.+C" ;BUMP PC BY ADDING NEW CONST TO CURRENT PGM SECT BASE MOV BASE(R5),R4 ;CURRENT SECTION'S BASE ADD (R1)+,R4 ;ADD CONSTANT TO BASE VALUE ADD #LEDWDS*2,R4 ;KEEP OFFSET DUE TO INSERTED LEADER WDS MOV R4,C.Šþÿ7 ôÿ÷ Œûl÷ dúiÄ„ûÄ  Ã÷ w*lbØÿíÂ`ò ø]!÷—!Dáß•àþÿ÷ k.�b´ÿÛ�ø]wFûrø]²î]òeø]î] EÜW­!^í*¸b7 $ûŠþÿ×w‘ûµŠ!^‚ ·�û·ûÉñ p*Üb@œÀEÿÀ @`ÀeB·æ·Jÿ& q*cfB ·Ò·6ÿF€ 6 vœ M*$c�‚ƒ„…þ7 ¦ú7 ¤ú7 ¢ú7 ÿÀžú.HcÀ 0 ø]ðø]î]0`î]ÀåöÀÁ 1 ^ð•!^*&pc0Š1^0ŠA^á À ôÀÁaÙÀ ü‡Q*�cÂÀ Áä] ƒ W"ÁqÎc^±&´c¹^¹èc01URPC ;NEW VALUE OF NEXT TEXT BLOCK'S BASE ;(AS OFFSET FROM LOAD MODULE'S BASE) ADD TXTBC,TXTPTR ;HERE SINCE WON'T HAPPEN IN "TXTOUT" CLR TXTBC ;AVOID ALTERING NEW [CURPC] IN "TXTOUT" SUB #4,R0 ;2 WDS FOR CMD8; 4 WDS FOR CMD7 ; PC COMMANDS MUST BE LAST IN RLD BLE LODJ99 ;DONE: O.K. ; IF NOT DONE, THEN NEXT COMMAND MUST ALSO BE PC TYPE CMPB #PCMD1,(R1) ;IS NEXT C20œÿcA^0Š!^á À  ð‡ dÀÔc¨dRef®fZg¶ÞcøgžhFiêitjièc‚deÈezf$g¡ôcÐgnhi¼i¼iÄþc¼iC d d2=*‚d�d TASK # 2 æ‚d ˆC¦dˆa¨dƒ.°kßÄkßà÷~‡ßôk·n·!òƒÆòœ*Økw .ë· ZÀòD& öDü‡·NþßÄkßc*ük@fÿÆ:ÀöD¨ òDü‚÷(.÷ *æ@l„* l÷ "ñ×'xÿÿÿwØw âêÆ[×DlA*Ll殓÷ਓ&×-&¬n‚€È ÷e?U*plð �6 °È €¶Èeø¬*”lÿÿôîð�>ñ¶ö`÷•[¶üÿ*¸l÷ŠSû& Æå Û¦ö2“÷à*“w 2ꀘ*ÜlÈ%ð•ÿÿÈ%ÿÿœÁEðÿÁ Cw .m·  Áe@A EMT DISCIO ;WRITE OUT FINAL TRAILER SECTOR MOV TRSCSV,TXTSEC ;INIT TO READ IN FIRST TRAILER SECTOR CLRB TXTR.W ;READ MOV #TXTLST,-(SP) EMT DISCIO ;READ FIRST TRAILER SECTOR MOV TRAPC,R0 ;BYTES IN PROGRAM PLUS TRAILER ASR R0 ;# WORDS ADD #LEDWDS+PHDSZE,R0 ;TOTAL WORDS FROM TOP OF HEADER CLRB R0 ;GETTING # OF PAGES B®nBA  ûJ³ÎnÉ6 w îéŒ*(m0œînÿn€ ð‹în"$·ŠÐô‰À:÷å\*Lm2ȬÿÿôœÁEðÿW íÁ 9Înì.pm1În æ7‚’ ðŠÿnÔÀ À À fÁ®n`÷àf’X*˜m7�vBABW¬ÿùñŠöCEqœg*¼mJ°ÎnÉ…70’œó‹æœ& ‹Û*àm€÷ Üó & Â5@Î& ÷ XðÖ ÂŒ€Ó ÂŒz*n€ûÜÓ$ÂŒ€&&fû …„€A¶÷“ä*(nè÷ æ«Á®n`BA¥W,ÿúJ°ÎnB*LnÉ÷ Àñ—À®nÁ÷à˜‘Ð Á üÿ Kpn÷Š˜DESWAB R0 ;# CORE "PAGES" -1 INC R0 ;# OF CORE PAGES MOV R0,-(SP) ;SAVE FOR USE BELOW MOV PRSIZE,R1 ASR R1 ;WORDS IN PGM ONLY ADD #LEDWDS+PHDSZE,R1 ;# WORDS IN PGM PLUS HEADER CLRB R1 ;256 WORDS/PAGE [PDP-11/20] SWAB R1 ;# PAGES -1 (EXCLUDING TRAILER) INC R1 ;# PAGES (EXCLUDING TRAILER) SUB R1,R0 Fwúþwî„n &®n½&În�înd÷þndæ owot,o7Š"÷ Ä@÷¼÷ ¶:· °7fÁ¨îñ‹é]7,q ö�ã·­ÚLMUT IT, AND INIT ; THE NECESSARY TABLES TO RUN THE FILE AS AN OVERLAY TASK. MOV #30,R4 ;INIT ERROR NUMBER MOV BGNSEC,TXTSEC ;SET TO READ IN TASK HEADER INFO CLRB TXTR.W ;READ MOV #TXTLST,-(SP) EMT DISCIO ;READ IN FIRST SECTOR MOV #LEDWDS*2+TXTBK1,R0 ;POINTER TO FIRST WORD OF HEADER MOVB HTASK(R0),R1 ;TASK # CMP R1,#TASMAX ;WITHIN LIMITS? BGT LDERN¶ Î Î�ÑÁ‚û*bq·£É  ·­»·­°Ñ BÆe*†q�‚¦÷ (Ž-ô ¶-ï¶- *ªqêÆeÆe ˆšæ ¦ƒÅöEÀÿç*Îqà à ÃÃEàÿöÅ… … … ÅEàÿv‡…Ã�Ý*òq;Õ`Ã�1Õ`Ã�*Í`Í%<Íå<µ þÿå%u*rÍåŽ Ã�ÜsÎ ÎàÎÎ Î Î ö¶ Ö*:r¶ ŽUŽU°‡¦ö°�&÷à¦�×-”sÊ*^r†€ðEÈ Èe÷et?p6 ˜*‚rÈ €¦ön�w tä€÷à^�È%M,¦rÈ%ÿÿÅÁìrBA  ûJÉPQ30 ;OUTSIDE TASK LIMITS CMP R1,#OVTMIN BLT LDER30 MOV HPRIOR(R0),R2 ;PRIORITY CMP R2,#NPRIOR ;PRIORITY LEGAL? BGT LDER31 ;ILLEGAL PRIORITY TSTB PPTAB(R2) ;IS THIS A TIME-SLICE PRIORITY? BLE LODL10 ;NO TST HMAXEQ(R0) ;YES - EXECUTION TIME MUST BE SPECIFIED BLE LDER32 LODL10: CMP R1,TASKS ;TASKS = MAX[TASKS,TASKNO] BLE R6 w Jäž,ÌrÁîrÅ ïøðUòærìrîrìròr‚òr“sGÿž*2s&€öÂŒ <†—-‡€÷਌Õ*Vs7�Ðÿ·�Ëÿ÷Âÿ6 ðw šã€Àea,zsà~Œ üÿ× 0‚÷•�ÿ÷mHüÁ5·Š}ÿ0, s· :ü³ s‡ÂœsæÀs à ”Daû„`Ã,sŸ.Æs÷à2Œ‹÷ærÿÓµ÷eÿ“�K�6 w (ãñ,îsÖ ¡±æŒ÷àü‹Æå VÖ €$Á.sÙ(tÎ5Á)s& H” H” H”¦)€�„*6tÀ„n7DúÁ%TULODL20 MOV R1,TASKS LODL20: MOV #DFLIST,R3 ;POINTER TO "DEFINE" LIST MOV HSTACK(R0),R5 ;FILE I.D. CMP R5,#NDISCS+$SYSFL;MUST BE GREATER THAN SYSTEM RESERVED BLE LDER35 ;FILE I.D. ILLEGAL MOV R5,6(R3) ;LOAD FILE I.D. INTO LIST MOVB HSTATS(R0),R5 ;REQUESTED FILE TYPE CMP R5,#$OVTYP ;IS IT LEGAL FOR AN OVERLAY? BNE LDER36 ;NO MOV R5,8.(R3) ;LV Á ýÀÌnÁ1Înà Á Á ÿ(ZtúÀþnÁ1˜ÿnÁ ü÷•ÿÿžú÷•ÿÿ¹þ7Š•ú1|t7 bþ÷ær^þ÷òrdþÆŒt7 Pþ÷’þ7 �þ÷Žþ‡Ç ¢t¦æ®twŽø¦æºtw\ú-*¼vw Jà€� D”ÄE€ÿÄå@!!Ø*àvà à à Åà à CaaŠíÐÂéw àŽŽ‡†,wÄe! ÄeåÄe Äß Ýw àß^**w€�ÂÄrw Ì ‡ã… ûÅ‹W¡Þ*NwÅe ÅeÅe Åe Q‘Ô ÂŠèÂãÄ’ rw@(›*xwßU ê êß ê÷xÿ�ÿ÷•B›7ŠnåXYOAD INTO "DEFINE FILE" LIST MOV TRASEC,R5 ;# OF FINAL SECTOR WRITTEN SUB BGNSEC,R5 ;GET # OF SECTORS -1 INC R5 ;# OF SECTORS IN FILE MOV R5,10.(R3) ;# OF SECTORS TO DEFINE MOV R3,-(SP) EMT DEFINE ;GO GET FILE DEFINED TSTB 2(R3) ;ERROR? BNE LDER33 ;YES MOVB R2,TPRTY(R1) ;PRIORITY MOV 6(R3),IFD(R1) ;INIT FILE I.D. Z*œwÅÅe°×-zÅe ÷Š�·ŠT÷xÿ`Õ*Àw÷xÿ^×-V÷E?JÄFÃÃes÷ æÃ+*äwÃeX÷ À.÷ ~÷e€$ìýUÀ7Ö*xÁ� � ÁEüÿ}À À À À À À =‘*,xÄôÃÃe÷ ŒÃÃeì÷ ÀÃÃežýt*PxýÀÿýý‹ý€ÀÀe‚÷ · ¶Þ÷;*txªÃÃeîÁ÷ @ÃeÓ  ÃeÁ õÉ*˜xÁÁeÈ_êßÁÿ êßêß êý€÷ jß÷ V*¼xf‡Ö w°þÂ#‘ËÅø& ÷’P· LN · Y*àxFN · @N – †ËÕ€ËÕ0„ ÄE€„ „  äy*\] MOV 4(R3),R0 ;IFD WORD BEQ LODL25 ;NO IFD RETURNED: LEAVE FILE I.D. BIS #100000,R0 ;SHOW IFD RATHER THAN FILE I.D. MOV R0,IFD(R1) ;USE RATHER THAN FILE I.D. LODL25: CLRB TSTAT(R1) ;TASK STATUS CLRB IOSTAT(R1) MOVB (SP)+,BSIZE(R1) ;INIT # "PAGES" IN OVERLAY ASL R1 ;NOW A WORD INDEX CLR HEADER(R1) ;SHOW READY TO RUN MOV BGNSEC,R0 ^y‡ßêß÷ÿ êßêß êý€‡6(y-SÅÃÔÏÒ--<8;y¾--ÃÏÒÅ----<My¾ÂêÀêÄêÆêÈê0ÿ4ÿ2ÿ6ÿ8ÿû*fz�‚„‡ˆ �‹À�Ž                 !"£Ì*Šz$¥¦'(©ª+¬-.¯0±²3´56·¸9:»<½¾?ÀABÃDÅÆGK*®zHÉÊKÌMNÏPÑÒSÔUVרYZÛ\ÝÞ_'ABÃDÅÆGHÉÊK0*ÒzÌMNÏPÑÒSÔUVרYZ     �‚„‡ˆ ‹À   **öz                                    å*{                       .<(+ ¦       }*>{  !$ª©» -¯        Þ¬¥ ¾?          :£$*b{À'½"`a;INIT RELATIVE READ SECTOR # CLR R1 ;INIT RELATIVE WRITE SECTOR MOV 6(R3),R2 ;WRITE FILE I.D. LODL30: CLRB TXTR.W ;SET TO READ MOV R0,TXTSEC ;SET UP READ SECTOR MOV #BTCHID,TXTHED ;SET UP READ I.D. MOV #TXTLST,-(SP) EMT DISCIO ;READ A SECTOR TST TXTLST+8. ;ERROR? BNE LDER34 MOV R1,TXTSEC ;SET UP WRITE SECTOR MOV b ABÃDÅÆGHÉ       ÊKÌMNÏPÑÒ      Ç*†{  SÔUVרYZ       \  ÛÝ           ABÆ*ª{DÅÆGHÉ       ÊKÌMNÏPÑÒ        SÔUVרjÎ{YZ      0±²3´56·¸9      Ø*Œ|`‚`‚`‚!°|`‚Õ*š|P¨P¨P¨P ¾|¨Ž ¤|Ò¦|Ï*¨| L/P 1 PARITY ERROR L/P 1 cÌ|NOT READY"Ö| L/P 1 ABORTED1ê||Š|}’}~Ó*î|&deR2,TXTHED ;WRITE FILE I.D. INCB TXTR.W ;SET TO WRITE MOV #TXTLST,-(SP) EMT DISCIO ;WRITE A SECTOR TST TXTLST+8. ;ERROR? BNE LDER34 CMPB (R0)+,(R1)+ ;BUMP BOTH SECTOR NUMBERS CMP R0,TRASEC ;HAVE WE PASSED LAST SECTOR? BLE LODL30 ;MORE SECTORS TO GO .PAGE MOV #ND2MSG,TTYBUF ;"PASS 2 END" MESSAGE MOV #TTYLST,-(SP) ff¦æ&f€ ÷ ¨ 7¬”ÿG*}Ä0÷ T…„ƒ‚�€Ž‡œ— «6}ÂÉ t*@}Ä çÄ ä÷ ºÄ¬Æ€D @DóÄ I*d}ñÃDà ó¥DñóæþÿßàþÿÈ *:ð{£*ˆ}2ð{ÄRàÄHà´Š1^0 ó æ{ Ÿþÿð¥,¬}ð öþÿ…„ƒ‚�€& ÷ ‚áwxäs*Ò}0£ˆ ŸþÿÄ™Ÿþÿóæ{sè{3ø{ ,ö}3 ö{3 ú{³|sü{3 ü{3 þ{÷ Âfzb*~ñ Âæz÷ Ð÷ & »‰ ߀þÿÂ|Ý*@~€ê{Áè{÷ ä÷ ÖÉ Âæzwòhi EMT TTYOUT EMT EXIT ;****** E N D O F L O A D E R****** LDER36: INC R4 ;ILLEGAL FILE TYPE LDER35: INC R4 ;ILLEGAL FILE I.D. LDER34: INC R4 ;FILE SECTOR TRANSFER ERROR LDER33: INC R4 ;"DEFINE FILE" ERROR LDER32: INC R4 ;MAX XEQ ENTRY ERROR FOR T/S TASK LDER31: INC R4 ;PRIORITY OUTSIDE LIMITS LDER30: MOV R4,-(SP) ;TASK # OUTSIDE LIMITS jÂfzÔ,d~÷ ’÷ æMæþÿÂ|ßàþÿ2ê{„Äeê{-*Š~2ð{ÈŸþÿÄö{ôŠ1^&÷ X�¬L*®~ æö{& ÷ ãÖ fæû ø{ƒ…Â|›*Ò~Â÷ 2Äò ê{Ò Ä ú)€ê{ ÷ 5*ö~¶ð ·sè{3ø{³|3 ö{3 ú{m*Âfzsü{Âæz3 ü{3 þ{÷ Æ÷ ð÷ MÁ*>÷ æ3 æ{æš|÷ šÖ M³ þ{ó%þ{÷ Æ*b¢÷ À÷ èMæ¨|÷ ®ñwðþæÀ|÷ Ú*†œ÷ œ3 þ{Äš|&ô¨æ<÷ Ö MCª.ªfÁè{Â|€ê{÷ rÖ …Ä|Ë÷ Z³ þ{lm JSR PC,ERRPRT ;GO PRINT ERROR AND EXIT .PAGE REGSAV: MOV R4,-(SP) ;R5 PUSHED BY "JSR" MOV R3,-(SP) ;SAVE REST... MOV R2,-(SP) MOV R1,-(SP) MOV R0,-(SP) JMP (R5) ;...AND RTN REGPOP: ;RESTORE RGS TST (SP)+ ;POP UNNEEDED R5 MOV (SP)+,R0 ;RESTORE OTHERS... MOV (SP)+,R1 MOV (SP)+,R2 MOV (SP)+,R3 nß*Ò×,þ{´æ<÷ ÒÖ ‡ðÖ …÷ |Æ,öwvþæ&ff& Àê|Åú{AaÁes!ü{93 |Â*€ DÔ! 3 ê| ³ | Ä% 3 ê| ÷ Ú,@€RÄ• ÷ J … s!ü{äÀ5Е sú{Àìê|e*f€„ Ö …�€Ö ‡Ä … ÷ îÎ5÷âË*ЀŠîÄÙ¶ 6 & „`“3 ì|Ž Ö ‡Ó*®€ 4ƒW 1ƒ ÿŸ.†W ÿŸ+†À5(Á5%*Ò€D „ „ ÄeÿŸD ‚ ñŸ‚ð¥ *ö€!ƒ!õŸ†Ä5  ‡ð¥ùÄ*�‡Ä‡Ä‡ß@ê‡Äê& pq MOV (SP)+,R4 RTS R5 ;...AND RTN ; ******************************************************************** GETPC: ;LOAD R4 W/ REL ADDR OF CURRENT TEXT ELEMENT MOV CURPC,R4 ;PC @ TEXT BLOCK START ADD OFFSET,R4 ;OFFSET SPECIFIED WITH RLD COMMAND TST (R4)+ ;SINCE PC INCREMENTS AFTER FETCH RTS PC ; ******************************************************************** SYMOVF: ;CrÄ5 Ä5 *>�Ä5Ö ‡– ‡Ö ‡ó ¦| 3| Ó*b� ê÷ šúß ê êß|êßÈêÄš|K*†�ô¨&æ<÷ Ö ‡fÄê|ÅÅ ý .ª�ÀåÄÄ Ä Ä ÄeÚ�0ð0ŠÈ&÷ ‚ÃÂ*Ò�…Àê|‡ÃwÃwøÿÃwðÿÃh*â�ÅÀê|@aAa… !Å ý@Áè{…Â|wjü.‚ ê‡f  ÅÅ Â`üBa…‡„fÅŒ|*.‚æþÿßàþÿõ 5 Ÿþÿf÷ Ã…Ž¤*R‚‡Ÿþÿ…Ž´‡1 ‡· <ú‡7 6ú‡& œ3*v‚Î & & & ÷ ÌÛÖ ‡ ß2~€ßtuHECK FOR SYMBOL TABLE OVERFLOW CMP USYME,#LSDEND-BPSYM BLOS SYMOV1 ;NOT YET AT END LDER26: MOV #26,R4 ;OVERFLOW: "TH-TH-THAT'S ALL, FOLKS!" JSR PC,ERRPRT SYMOV1: RTS PC .PAGE SRMODN: ;SEARCH DEFINED SECTION OF LSD FOR A MODULE NAME ; INPUT: R4 POINTS TO RAD50 NAME ; OUTPUT: R4 POINTS TO NAME IN LSD (IF FOUND) ; R4 UNCHANGED IF NOT FOUND ; CALL: và‚÷ Ð š‚Œþ÷ fÿÀê{Áð{B  ü‡‡ *´‚æþÿßàþÿþ% f…µ…ŸþÿR(Ø‚Ž6 ‡ŸþÿwdéöeþÞ‚6 ‡ù&ƒP:ˆƒƒ&ƒ0ƒ�,ƒƒ*ƒ8ƒFƒr 4ƒ:6ƒpþpþ\8ƒrþrþV:ƒtþtþP*<ƒ CR 1 ERROR CR 1 SPUR INT Á*`ƒf¦æ&f� ¶ 6 @ ÷ ºBœ'*„ƒ ³ 4ƒÄ ŸþÿÄÄ Ä X*¨ƒ1…„ƒ‚�€´‡ÄBÀ€D @Dìgxy JSR PC,SRMODN ; BR A ;FOUND ; BR B ;NOT FOUND MOV R0,-(SP) ;SAVE IT MOV #LSDBGN,R0 ;START OF LSD SRMOD1: CMP R0,SYME ;REACHED END OF DEFINES? BLO SRMOD2 ;NOT YET MOV (SP)+,R0 ;NOT FOUND! ADD #2,(SP) ;ALTER RETURN FOR "NOT FOUND" RTS PC SRMOD2: CMPB #OBJMN,FLAGS+1(R0);THIS ENGRY AN OBJ MOD NAME? z,ÌƒÄ êÃDà ó¥DñóæþÿßàþÿÉ Ó{ƒh*òƒsƒ÷ èÙÄÞÙ´Š1^1 0 ó ƒ&Ÿ1*„þÿñ¥÷ ¾Ù¤…„ƒ‚�€¤‡™,:„æþÿ€ ¶ ¶ …„ƒ‚�& æJbwðÚž,`„³ ƒŸþÿ3ƒó ƒ ñ‹ó$‰ƒó$Œƒx*†„÷ ¶ÁƒÄæ<ƒ÷ fó´ú‚ŃõЇfC*ª„æ<÷ þÖ ¯‰ ó ƒæLƒ÷ 6Mó ƒâ*΄ß5@pþ/MÀpþ÷ þMw"À5€ûÀ5ˆ*ò„@À5ó3ü‚Àƒð˜‡&æ÷  ýÖ ÷*…ßE@pþM3 ƒó ƒÁƒ÷ 3 ƒMæþÿ4|}BEQ SRMOD3 ;YES: IS NAME SAME? SRMOD4: ADD #BPSYM,R0 ;NOT AN OJB MOD BR SRMOD1 SRMOD3: CMP (R4),(R0) ;FIRST HALF-NAME MATCH? BNE SRMOD4 ;NO CMP 2(R4),2(R0) ;YES: SECOND HALF-NAME MATCH? BNE SRMOD4 ;NO ; FOUND! MOV R0,R4 ;NOW POINTS TO LSD ENTRY MOV (SP)+,R0 RTS PC .PAGE PTGLOB: ;SEARCH LSD FOR A GLOBAL NAME (NOT OBJ MOD) ~*:…ÀÂýÁÄýñ´ý÷ æý± W"Rñ |*^…Pßàþÿ·”ý÷ƒŽýŸþÿÄŒýÈð¥¸*‚…ð¥@ ƒ ÿŸ†¦r.¦…æ&fÈ …„ƒ‚Ä && ÷ þÛÖ Ä ôŠ1^æ*Î…&÷ *z ßEApþ3 ƒæ*ƒ÷ üüÖ M�Ë*ò…@ ÷ @3ƒ÷ <M0•ó 2ƒHó þ‚ü*†ÁƒÁeÁlú‚Â.ƒ  -Ä8ƒÄ ë*:†Ä Ä Ä ³ .ƒMÄ8ƒ ÑÄ Ñóeú‚ó þ‚g,^†ó1�îÄ8ƒÄ Ä Ä Ä ÑÄ ‘óeú‚ó þ‚Ù.„†àÀ1ÚÉ^8ƒóeú‚3 .ƒó þ‚M³ ú‚×,ú‚Ù€� ;THE SECRET TO THE LOADER'S CONTROL SECTION ABILITY LIES HERE. ; IF THE SECTION IS ONE OF THE NAMED ONES, IT APPEARS ONLY ONCE IN THE ; LSD, AND THUS HAS ONLY ONE BASE TO LOAD PROGRAMS FROM. THE UNNAMED ; C-SECTS, HOWEVER, ARE DETECTED AS 6 BLANKS, AND ARE MADE UNIQUE TO ; EACH OBJECT MODULE BY LIMITING THE SEARCH TO THE CURRENT OBJECT MODULE ; AREA IN THE LSD. ; INPUT: R4=PRT TO RAD50 NAME ; OUTPUT: R4=PTR TO LSD ENTRY IF FOUND ; CALL: JSR PC,PTGLOB ; ‚.¬†Ä8ƒ! ³ ƒ*! ! +! ó þ‚s*Ô†¸Â:ƒÂlƒÁƒÁeÁlú‚¡’ó þ‚ªÁƒñf,ø†³ ƒMÀƒð‹ó$‰ƒ³ ƒ—ó$ŒƒT*‡ùÀƒð‹ó$Šƒðó$‹ƒì Á%(†A,B‡W ÿŸ%†Bœ— ñ%†ñ%ÿŸÀ% *h‡† ÿŸ †   `— ÿŸ†Ä ‡„ „ „ ¨0Œ‡„ „ øÄ õCÀ6ƒÀU3ü‚æ<ƒ÷ Nó´ú‚¹*¶‡ñЇ; 6ƒfæ<÷ êúÖ ‡CûEA6ƒŽ*Ú‡û56ƒ ó ú‚ì…Áƒñw>ý…w*ý.þ‡„fŃæþÿßàþÿõ 5„… BR A ;NOT FOUND ; BR B ;FOUND MOV R0,-(SP) ;SAVE IT MOV (R4),R0 ;IS THIS THE SPECIAL... BIS 2(R4),R0 ;...CASE OF 6 BLANKS? BEQ PTGL01 ;YES: START AT CURRENT OBJ MOD MOV #LSDBGN,R0 ;NO: BEGIN @ BEGINNING OF SYMBOL TABLE BR PTGL02 PTGL01: MOV PTROBJ,R0 ;CURRENT OBJ MOD PTGL02: CMP R0,USYME ;END? BLO † Ÿþÿf÷ .½p.&ˆ…ޤ‡Ÿþÿ…Ž´‡1 ‡3 ú‚3 ƒs ƒ*Nˆ3 .ƒó ƒÀƒ �  s2ƒ3 ü‚óƒÀ,rˆÁƒfæ<÷ 4úñ˜‡Ö ³þ‚ûA6ƒ‡û ƒ".˜ˆßÀƒ"Úðˆp &æ*ƒ÷ .úÖ ÷ ½†*Àˆ‡ ñ:ˆÄƒô¥ñ Àƒð˜*䈅3ú‚wDü3 ƒ³ ƒ…wü· ú‡7 l"‰ú‡ß¶„˜ßàš7 äù÷ƒàù‡„*$‰ 12345678 &=':>@9 0/STã*H‰UVWXY _,(%\"Z -JKLMNOPY*l‰Q $*];^R ˆ‰ PTGL03 ;NOT YET MOV (SP)+,R0 ;NOT FOUND! RTS PC PTGL03: CMP (R4),(R0) ;FIRST HALF-NAME MATCH? BNE PTGL04 ;NO CMP 2(R4),2(R0) ;2ND HALF-NAME MATCH? BNE PTGL04 ;NO ;MATCH! CMPB #OBJMN,FLAGS+1(R0) ;FILTER OUT OBJ MOD NAMES BEQ PTGL04 MOV R0,R4 ;NOW POINTS TO FOUND NAME IN LSD MOV (SP)+,R0 ;UNSAVE ADD #2Š ! X*�‰ +ABCDEFGH .)[<#œ*´‰I ? #*؉ ô*ü‰ Ð* Š 12345678 :#@'="9 ‹*DŠ0/STUVWXY ,% >?Z -JKLØ*hŠMNOPQ !$*); R  stuvwx•*ŒŠy z &ABCDEFGH `.*°Š<(+|I   abcdefgh  *ÔŠi jklŒ�,(SP) ;"GOOD" RETURN RTS PC ;NO MATCH PTGL04: ADD #BPSYM,R0 ;NEXT LSD ENTRY BR PTGL02 ;TRY AGAIN .PAGE GETSEC: ;GET POINTER TO SECTION NAME ; INPUT: R4 POINTS TO RAD50 NAME ; OUTPUT: R4 POINTS TO NAMED SECTION IN LSD (IF FOUND) ; CALL: JSR PC,GETSEC ; BR A ;NOT FOUND ; BR B ;FOUND JSR PC,PTGLOB ;CAN NAME BE FOUND IN LSD? GETS01: RTS Žmnopq r *øŠ  \()[] *‹ þ@ñòóôõö÷øyz{|}~ù123456789:;½*@‹<=>?ðaâãäåæçèiàklmnoé!"#$%&'()*+,-./Õ*d‹`ÑÒÓÔÕÖרYZ[\]^_ÙС¢£g*ˆ‹¤¥¦§¨ ª«¬­®¯©ábcdefgh êëìíîïPÁÂÃÄÅÆÇ5*¬‹ÈIJKLMNOÉ À�‚ƒ„…†‡ˆ€Š‹*ЋŒ�Ž�‰ABCDEFGHÊËÌÍÎÏj‘’“”•–—˜�š›œ�žŸƒ*ô‹™QRSTUVWXÚÛÜÝÞßp±²³´µ¶·¸°º»¼½¾¿¹qrsŸ*Œtuvwx0úûüýþÿ@ñòóôõö÷ø@P~}zn|ù@@@@@@@<*<Œ@@@@@@@@ðaâãäåæçè@@kMl±@é@�‘ PC ;NO: ERROR RETURN CMPB #SECTN,FLAGS+1(R4) ;YES: IS IT A SECTION NAME? BNE GETS01 ;NO:ERR EXIT ADD #2,(SP) ;"GOOD" RETURN RTS PC ; ******************************************************************** SRGLOB: ;SEARCH LSD FOR A GLOBAL & RETURN ITS FINAL VALUE IN R4 ; INPUT: R4=ADDR OF BLOBAL NAME (RAD50) ; OUTPUT: R4=VALUE OF GLOBAL JSR PC,PTGLOB ;SEARCH FOR NAME ’@@@@@@@@@@;*`Œ@@@@ ÑÒÓÔÕÖר@@[\µ^jÙ@@@@@@@@@@@@@@@X*„ŒZ@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@NÁÂÃ*¨ŒÄÅÆÇÈ@@K�´L;É@@@@@@@@@ @@o@@@@@@@?*ÌŒ@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@}*ðŒ@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@Y�@@@@@@@@@@@@@@@@H.ž�÷Xr¢ÿ÷brPr÷–ÿ÷•ÿÿx 7Šr wÆ÷:r„ÿà*Æ�w È7tÆ:�Ä9˜ÃI˜w ¦ 7^w ìw ¡,ê�>Ä�\ÿŒŒŒ7‘r7Š0 ÷•ÿÿ, ÷àr÷x”üqÊ*ŽwæÆ.ÿ& ÷ ÿærær÷•@Bqà Dþ*”• RTS PC ;NOT FOUND MOV VALF(R4),R4 ;FOUND: GET VALUE ADD #2,(SP) ;"GOOD" RETURN RTS PC ; ******************************************************************** INUSYM: ;INSERT AN ENTRY IN UNDEFINED SECTION OF LSD ; INPUT: R4 POINTING TO ".REF" ENTRY IN GSD MOV R0,-(SP) ;SAVE IT MOV USYME,R0 MOV (R4)+,(R0)+ ;MOVE IN THE UNDEFINED MOV (R4)+,(R0)+ ;S–4Ž÷‹ü A „ &DCƒcà ÷Ú w 2w ΄Ä*XŽ·ŠÜ w ð  '  7ŠÈ Ä´ „ ‚ ¦{*|Ž&w ¶„‚À•\w ¶wXw ºw ö�Ä 1. Žøfw |÷•t €w „7Š€ wtwhw ŒÄs˜t*ÈŽ  Ä%ƒ˜û‚ÀEøÿÄ Äe:�‚ whÄål˜÷À|*ìŽ6 Á5˜÷ æÀ=w F·Š6 À�/ w :À�( w È*�2À�! w *À w "w *  7� w  *4�7�þw 7Šø7�óÀ(˜Á5˜÷ JÄÔÂ*X�wð7ŠØ  wèw (‚b‚ ‚ ·®wúw W*|�‚øw �A�Á � � B`ï÷ r÷%„˜* �€˜™YMBOL ENTRY MOV (R4)+,(R0)+ MOV (R4)+,(R0)+ ADD #BPSYM,USYME ;BUMP POINTER JSR PC,SYMOVF ;OVERFLOW? MOV (SP)+,R0 ;O.K. RTS PC .PAGE INSYME: ;INSERT AN ENTRY IN DEFINED SECTION OF LSD ; R4 POINTS TO THE ENTRY (E.G., IN GSD) ; ADJUST POINTERS SYME & USYME JSR R5,REGSAV MOV R4,R2 MOV SYME,R4 INSY01: JSR PC,UNSQUISH ;MAKE A š…Ö w|÷‹„û 7Štwr÷•ÿÿjã*Ä�wh·Šg ÄEøÿÄ 7X�pwh÷‹P ý*è�ÄEøÿÄ Ã tX�Pà õôÿÿX�Iw K* �Û×-ÉÂ% w ’ ÿÿÀ=w À›*0�òÁê7Ä íX�À=w øÀÀe0L*T�w ìÀ,w äÂ%ÀÀ@w ~k÷‹¾z*x�ÄØüÂeÀ=÷–w ´@w Xwºüw*œ�’·Š¬w¢À=w – w ü ÿÿÀdë*À�w *AÀe0w vÀ,w næH÷BÀF}*ä�w ·6-À ÷.27ìX�,€ â÷g*‘÷‹( ÀBüÄ:üœ�HOLE AT SYME ADD #BPSYM,SYME ;BUMP BOTH POINTERS ADD #BPSYM,USYME MOV (R2)+,(R4)+ ;MOVE IN THE ENTRY MOV (R2)+,(R4)+ MOV (R2)+,(R4)+ MOV (R2)+,(R4)+ JSR PC,SYMOVF ;OVERFLOW? JSR R5,REGPOP ;RESTORE RTS PC .PAGE INPTRH: ;INSERT AN ENTRY ALPHABETICALLY INTO CURRENT SECTION ;OF LSD. R4 POINTS TO CANDIDATE ENTRY. JSR R5žÃ8üw Ö÷üðÀ?½*,‘w 7 îw ò7Šø7Šó7Š     w Í*P‘À%0 ‚À%7‡ÀEøÿÄ Ä Ä `‚ ð 1 W˜‡,t‘� W Ö†ø÷‹Ì ÷‹©Äm¼7ŠºÁ yš‘Ùš‘Ò‘à‘ê‘>’ÀŽè“N’h�J’¤’鮑È�“d“`“¶’4”z�‚�¬�à�æ*‘r�ž�‘ ‘¦�êŽ0ŽŽƒ·ŠZ7ŠU´÷<•*æ‘D ÷2 7.7(÷% Ä„ * ’î‡ÀÀŸw Ô÷%‹À•=w ÀŸöÂ*.’w À• w wúþ÷ ÈwêþwÞþ·ŠÞ÷ Д*R’ù÷ ²÷ Ð÷ÄÀ7ŠÄ÷m¶¶÷²²w X*v’ ¡,REGSAV MOV R4,R2 ;NEED R4 BELOW MOV PTSECT,R4 ;PTR TO BEGIN OF CURRENT SECTION INPT01: ADD #BPSYM,R4 ;NEXT (POSSIBLE) SECTION ENTRY ;[SKIP FIRST ONE: IT IS SECTION'S NAME]. CMP R4,SYME ;DID WE REACH END OF DEFINED SYMBOLS? BHIS INPT02 ;YES: STICK IT IN NOW. CMPB FLAGS+1(R4),#GENTRY ;IS NEXT A GLOBAL SYMBOL ENTRY? BNE INPT02 ;NO: SECTION H¢¬æ¦÷ Àžw ®·”Ö%À/w *𒍝À\ú÷ zÔ÷ \÷íppÜÀ„˜Ä à 0*¾’… L‡Å Äeh�  !v�B†Ô ù!v�=‚<.â’L® !6‚4h�4 z�¤ À„˜!ž‚4h�¸* “ôŒ�4 z�Ô ô÷%À w à Åí„*.“ôÅ Å @w ´@€ ‡À%€ÿ À%÷ Òw N*R“š· ÊwÜýwÈý�  à ù÷²ÂÜùÄ~*v“ÖùD · Ôù¼‚€Á &C@AƒEPA&f¦i*š“æw „€w ’À/w –€w :ƒ‚�„w ¾*¾“ÐÒ Û åƒ`ƒ ƒ Å ßÀEÿ�¯À € € ò,â“€` ¤¥AS ENDED: INSERT HERE. ; IT IS STILL IN THIS SECTION: COMPARE WILL DETERMINE ALPHABETIC ORDER CMP (R4),(R2) ;FIRST HALF-WORDS: BHI INPT02 ;NEW ONE IS LATER ALPHATETICALLY: BLO INPT01 ;NEW ONE IS EARLIER: KEEP LOOKING CMP 2(R4),2(R2) ;1ST HALVES EQUAL: COMPARE 2ND HALVES BLOS INPT01 ;STILL LOWER: TRY AGAIN INPT02: ;TIME TO INSERT ENTRY INTO LSD CMP R4,PTROBJ ;IF INSERTING ¦Õ÷‹H·à µ÷•8… °‡Å wFù÷•àöko*”w ¢7Š÷U4ù÷‹÷E(ùw T76æM.,”ùæù÷‹ü‘À�òÀ‹� ‹à pz�÷•àªkn*T”w V×­ÔÖ÷‹ÊÓ÷•à’k·Š¿÷UÔø×A*x”·Ìø·Êø÷•ª7¸÷‹¡¾w @÷‹´ø€Å�°*œ”¬øÅ�¨ø¯ŒŒŒŒw‘LkÅ’ø÷‹t�å wÍ*À”†øÄt!h�Ä Ä úw ¼w JÄJ˜ÃK˜w à,䔞@÷eZø%Ä•th�7‘2ô z�ªôz�î* •w „ÀBw .À�Àe`€ w À;w ÷�*.•ðÄ�úh�w úwîû·â·ü÷ÆF�f& *R•æ¦f¨©BELOW OBJ MOD POINTER... BHI INPT03 ADD #BPSYM,PTROBJ ;...MUST ADVANCE IT ALONG WITH OTHERS INPT03: BR INSY01 ;GO INSERT AT R4 .PAGE UNSQUISH: ;MAKE A HOLE IN TABLE. R4 POINTS TO DESIRED HOLE LOC'N MOV R0,-(SP) MOV R1,-(SP) MOV USYME,R0 ;START @ TOP ENTRY... MOV R0,R1 ADD #BPSYM,R1 ;...AND EXPAND UPWARD UNSQ01: CMP R0,R4 ;ARE WE DOWN TO DESIRED LOC'N YET? ªæÌæ €Ö ·Â�‚ƒ„…ÆÒ÷ær.v•°€Ä4h�Œ�üüh�Ä Ä ÷…÷�Úi™÷�Øi”G,ž•7ŠÎi7ŠÎi÷‹Êiý€…w r÷‹¾iý€÷5²i÷‹¬iô*Ä•ý€÷�g¤i÷�b¢i…÷‹V  <Œ�h�„ „ !¿*è•ø…ÃÄþÿ÷%&Ãå„ À&Äel* – N @ Ä üÀe0w &à óÀ• Ö ÁX�Àþ*0–ÿÿ …÷‹,iý€7�(i…÷‹i*T–ý€À�iÀE€ÿÀ¥÷‹Ð  w Ðÿí÷‹¬*x–¾À¥ ç…Ä ã‡•w ¶ÿú×­Þh• À•^Ü*œ–w ¤ÿÀ•Uw œÿÆ:�w€ú… ÷ÿÿn÷ÿÿj«*À–  ‚7,X�¬­ BHI UNSQ02 ;NOT YET: MOVE ANOTHER ONE MOV (SP)+,R1 MOV (SP)+,R0 RTS PC UNSQ02: MOV -(R0),-(R1) ;BLOCK MOVE MOV -(R0),-(R1) MOV -(R0),-(R1) MOV -(R0),-(R1) MOV -(R0),-(R1) BR UNSQ01 ; ******************************************************************** SQUISH: ;REMOVE ENTRY POINTED TO BY R4 FROM THE UNDEF'D TABLE JSR R5,REGSAV MOV R4,R®X‚ÁRìX�Á-P‚Ð ðÀDÊ*ä–…w@€ 78À ô÷%(!ùƒ… �„ �,—ú ÷%‚??‘‡ÃU˜ÃV˜a*.—ÄT˜w Nÿ…÷%öw ªþ…÷Ú77˜*R—Ðw ZÿÀ Àe0w àþÀ,w Øþæ²÷¬á*v—À°w pþ· ÷ÊœÀÆ…ÀÀ÷ºŒÓt*š—Äýÿ C”Ã¥ Ã¥$ × A‡Ãå ÃåÃåX.¾— Ãå    ¦  ‚eÂ`„ ä�‡Åýÿ˜ì*æ— ‡€âƒ ûË× Ãe ÃeÃe  ˜Ãe Ñ�Ò … è€Ð ‡@(ï*$˜ °±0 MOV #BPSYM,R1 ;ELEMENT SIZE ADD R1,R0 ;STAYS ONE ELEMENT ABOVE R1 ASR R1 ;USE BELOW AS COUNTER SQUI01: CMP R0,USYME ;REACHED TOP OF TABLE? BHIS SQUI04 ;YES: EXIT SQUI02: MOV R1,R2 ;COUNTER=# WORDS PER SYMBOL SQUI03: MOV (R0)+,(R4)+ ;BLOCK TRANSFER DEC R2 BGT SQUI03 ;STILL IN BLOCK BR SQUI01 SQUI04: JSR R5,REGPOP ODT-11R V00Å H˜2ABE*P˜ *;/\ $G _<^,OWEBP@>SRC-FI!XAS�t˜PMCFRB$„˜Ø*:�ÿÿÿÿÿÿ ^�ÿÿÿÿÿÿÿÿÿÿ8D}´µ RTS PC .PAGE NXTMOD: ;ROUTINE SETS UP PARAMETERS TO READ NEXT OBJ MODULE DEC NAMCTR ;MORE MODULES? BLT NXTM30 ;NO MORE: TAKE "DONE" EXIT CLR BLOCK1 ;FLAGS FIRST BLOCK IN MODULE MOV NAMPTR,R0 MOV 4(R0),OBJSEC ;START SECTOR # MOV 6(R0),SECTCT ;SECTOR COUNT INC SECTCT ;WANT ONE EXTRA SECTOR ON LAST READ ADD #8.,NAMPTR ;ADVANCE TO ¶YM,USYME MOV (R2)+,(R4)+ ;MOVE IN THE ENTRY MOV (R2)+,(R4)+ MOV (R2)+,(R4)+ MOV (R2)+,(R4)+ JSR PC,SYMOVF ;OVERFLOW? JSR R5,REGPOP ;RESTORE RTS PC .PAGE INPTRH: ;INSERT AN ENTRY ALPHABETICALLY INTO CURRENT SECTION ;OF LSD. R4 POINTS TO CANDIDATE ENTRY. JSR R5,REGSAV MOV R4,R2 ;NEED R4 BELOW MOV PTSECT,R4 äiÂwüÿwúÿw·Š`‰ˆiæJ÷ Ý& ÷;wŠÄ,Å]wŠ c÷‹(‰%õmͽB_÷‹D!Åå€þÿ÷•  Àå‰Åe}7ŠTÄVÅŒND E Òwˆ¬h戬hæÀgæ”wˆ¦ˆ¦Ze戎÷¦$i÷ª¶h÷ ”÷  ¼÷ˆ¾æew£�Š^‰îˆ¦"‰7Šd‰\ià $Í­ÜwiŒ7Š‘Í­ˆ¦Ê ö·¬hÂ;H÷•^‰øÄ ˆ�úhævjæÄN‰F‰"÷^Í­^‰ˆfÀgæÜhÁtÍ­\Í­tjÅ$‰ÂÎgÃJÄT?„ Œb?!¸Ä ‘÷‹p·rƉ=·Š©÷‹¦@÷•Ç7Š:|÷€÷_·ŠÆÿÿ÷¥ç÷‹ „÷‹ ´ ÂĦØ÷ ‰‚wlwwØw®¸¹NEXT NAME MOV #OBJBK2,BLKPTR ;INIT BLOCK POINTER TO FORCE FIRST READ ADD #2,(SP) ;BUMP TO TAKE "GOOD" EXIT NXTM30: RTS PC .PAGE ;"NEXT BLOCK": SUBROUTINE READS IN SECTORS UNTIL ; AT LEAST ONE BYTE OF NEXT BLOCK IS IN UPPER HALF OF THE ; TWO-SECTOR BUFFER. ONE ADDITIONAL SECTOR IS READ AFTER ; THE FINAL SECTOR IN THE MODULE TO FORCE THE LAST BLOCK ; INTO THE UPPER HALF. º ;PTR TO BEGIN OF CURRENT SECTION INPT01: ADD #BPSYM,R4 ;NEXT (POSSIBLE) SECTION ENTRY ;[SKIP FIRST ONE: IT IS SECTION'S NAME]. CMP R4,SYME ;DID WE REACH END OF DEFINED SYMBOLS? BHIS INPT02 ;YES: STICK IT IN NOW. CMPB FLAGS+1(R4),#GENTRY ;IS NEXT A GLOBAL SYMBOL ENTRY? BNE INPT02 ;NO: SECTION HAS ENDED: INSERT HERE. ; IT IS STILL IN THIS SECTION: COMPARE WILL DETERMINE ALPHABETwvwbwŒ÷€÷_·ŠÆÿÿ÷¥ç÷‹ „÷‹ ´ ÂĦØ÷ ‰‚wlwwØw®wvwbww`‰F‰N‰)V×­H‰—ÂEBÓÂÄþÿCüÿAúÿ@…ŒN‰H‰Ä À•  F‰~÷N‰F‰ˆ÷N‰H‰—ÂEzà ÂÕœÁžÀÆ÷‹”Á¯ÀÂÖÍ·ŠÅåúÂåZ‰X‰`Ì•âiÄ ÞiÁÒÃÔÂF‰Œ)þ×­H‰C(ÂüÿAúÿ@$C!ÄüÃ÷•Å÷ÂåZ‰ ʵX‰@ÌâiÄ ÞiÁ,Ã.ÂH‰Â”Á¯ÀH‰Ä  �Á’ÀF‰`÷ŒˆfvjæÀd‰@iÃúhÁ‡Àl·çÂå2 �€Â“ üÿr, úÿ2 @‡ ƒ  wÚ÷H‰J‰Ì ÷Ä  tiMþ¼½NXTB90: JSR PC,NXTMOD ;INIT FOR NEXT MODULE AND READ A BLOCK BR NXTB80 ;NO MORE MODULES NXTBLK: MOV #ONEZRO,PTR1.0 ;INIT PTR TO [1] CMP BLKPTR,#OBJBK2 ;ARE WE INTO LOWER SECTOR? BLO NXTB30 ;NO-NEW READ NOT NEEDED NXTB10: ;LOOP HERE FOR SUCCESSIVE SECTOR READS DEC SECTCT ;ANY MORE SECTORS IN MODULE? BLT NXTB90 ;NO MORE: GO INIT FOR NEXT MODULE ;YES - READ ¾IC ORDER CMP (R4),(R2) ;FIRST HALF-WORDS: BHI INPT02 ;NEW ONE IS LATER ALPHATETICALLY: BLO INPT01 ;NEW ONE IS EARLIER: KEEP LOOKING CMP 2(R4),2(R2) ;1ST HALVES EQUAL: COMPARE 2ND HALVES BLOS INPT01 ;STILL LOWER: TRY AGAIN INPT02: ;TIME TO INSERT ENTRY INTO LSD CMP R4,PTROBJ ;IF INSERTING BELOW OBJ MOD POINTER... BHI INPT03 ADD #BPSYM,PTROBJ ;...MUÅ4 wú÷ŠŒ"÷D‰ùiÁ ³·Š0÷‹‰ ÷ ‰Æ@ÉÕd wjÃÍøýÿ÷¥ÿñÕå·Š \÷µÁ܉j@÷Õû‰,ÿÕ  wé0ýÿ÷¥·Š �÷‹º wŒ÷‹‰ûÿÀ¥üÿÀ¥XÀ�†÷ ‰b7Š¢ÿÿ÷•Ӕ¯Áµ7Š� ÿÅFê÷ � Á5ƒ® °Á á÷‹ý7‹$ wH‰ÄzÃÀ•ýó�ØŒÂÁ ÷�˜7î7à ö7èÀþ� Á5ƒ  fÁÏ?÷‹ÙþÃ%ƒ ƒ ƒ ƒ ÃíDÃ0÷å‰t7 \7 2÷ X‰HÃd âiÄ� D‰ŒÄw€æ& 7j ÿÕÂÈ÷.j’÷Õº7 ¼7 ê wU·ŠÒ÷‹Ü÷‹‰´÷ ‰ûÿÀ¥üÿÀ¥œÀ�÷7‹à7ŠbwNwwúIþÀÁNEXT SECTOR--- MOV #OBJLST,-(SP) ;DISC READ LIST EMT DISCIO ;****READ NEXT SECTOR**** TST OBJERR ;READ ERROR? BNE LDER01 ;YES INC OBJSEC ;BUMP SECTOR # FOR NEXT TIME SUB #128.,BLKPTR ;SHIFT POINTER BACK TO TOP SECTOR AREA .PAGE NXTB30: ;PREPARE TO FIND NEXT BLOCK START MOV BLKPTR,R0 MOV #OBJBK2,R1 ;TOP OF LOWER AREA SUB ÂST ADVANCE IT ALONG WITH OTHERS INPT03: BR INSY01 ;GO INSERT AT R4 .PAGE UNSQUISH: ;MAKE A HOLE IN TABLE. R4 POINTS TO DESIRED HOLE LOC'N MOV R0,-(SP) MOV R1,-(SP) MOV USYME,R0 ;START @ TOP ENTRY... MOV R0,R1 ADD #BPSYM,R1 ;...AND EXPAND UPWARD UNSQ01: CMP R0,R4 ;ARE WE DOWN TO DESIRED LOC'N YET? BHI UNSQ02 ;NOT YET: MOVE ANOTHER ONE MOV (SP)+,R1 MOV wÐwPwwŒÄ� D‰ùiÁÄw€æ& 7j ÿÕÂÈ÷.j’÷Õº7 ¼7 ê wU·ŠÒ÷‹Ü÷‹‰´÷ ‰ûÿÀ¥üÿÀ¥œÀ�÷7‹à7ŠbwNwwúwÐŒwww # B 04V0 1RL1PA 4d2iÌhk4d$i¶hkµz\iik NNiÜhk^@iúhk,w^‰¢hÁ^‰¬hÁ^‰iÁ^‰ÜhÁˆfˆf@iæŒÉ úhÁ^‰ÌhÁ^‰¶hÁî«·Š¶37—"ô±7‘÷·Ä­À æÒ ÆTA—"PA—"Ì€Ž"ˆæ¦Ó—$â—"�âæÁ Âe�œÄ ÅÆõŒÍ uõ E‡Ä ò B èwƒæ& Ã5ƒ/ˆfµþ7 ¸ ÷-7 °7 ³&&÷-"7 Üwwá ÆwEþÄÅR0,R1 ;# BYTES REMAINING IN TOP SECTOR BR NXTB44 ;AVOID RESET "PTR1.0" IN CASE OF BLOCK BOUNDARY ; SEARCH FOR A "1-0" SEQUENCE TO START NEXT BLOCK NXTB40: MOV #ONEZRO,PTR1.0 ;INIT PTR TO [1] NXTB44: DEC R1 ;END OF TOP BLOCK YET? BGE NXTB46 ;NOT YET - KEEP GOING MOV R0,BLKPTR ;UPDATE FOR PROPER PLACE IN NEW BLOCK BR NXTB10 ;...AND GO MOVE NEXT BLOCK UP NXTB46: CMPB (R0)+,@PTR1.0 Æ (SP)+,R0 RTS PC UNSQ02: MOV -(R0),-(R1) ;BLOCK MOVE MOV -(R0),-(R1) MOV -(R0),-(R1) MOV -(R0),-(R1) MOV -(R0),-(R1) BR UNSQ01 ; ******************************************************************** SQUISH: ;REMOVE ENTRY POINTED TO BY R4 FROM THE UNDEF'D TABLE JSR R5,REGSAV MOV R4,R0 MOV #BPSYM,R1 ;ELEMENT SIZE ADD R1,R0 ;STA‰7 ¯÷ÈwŒÞw! ! ! ! ùÀåÈE ÁÀ07Š37Š·†ÈÎe!ˆBæ*wz7 ˆf8·$iæŠf÷ˆf¶hÁ¦7 ˆÌhæ2iæ´f÷ˆÌhæ 3Œ÷•÷�Œ÷‹÷Úw„æ& à Ö7‘Ä\‰"gÁáà ¸7‘Ä\‰gÁÔþwòà ô\‰gÁ÷"w†æ& à + 7Šò7Šà ŒÄ\‰gÁ@÷É·Šw\w…æ& à õ\‰2gÁ~r÷‚v÷à w w"7‘ 2\‰*gÁ7Šª7 ¬7 š7 ÷÷•7ŠL7 ^‰�ÎŒ*kæHà?á• É•Q¤ �.ˆkæ: wææí'÷µ^‰ˆf PÐ&*kÀˆfjiæˆ�¢h戦à7 ˆ¦Pg戦:gæöAþÈÉ ;IS NEXT BYTE A MATCH FOR SEQUENCE? BNE NXTB40 ;NO MATCH - KEEP LOOKING INC PTR1.0 ;MATCH: BUMP TO NEXT BYTE IN CODE BIT #1,PTR1.0 ;HAVE BOTH [1] AND [0] BEEN TESTED? BNE NXTB44 ;NO - CHECK FOR [0] .PAGE ; YEA! A [1-0] SEQUENCE HAS BEEN FOUND: NOW PROCESS BLOCK MOVB (R0)+,R1 ;BLOCK'S BYTE COUNT TSTB (R0)+ ;UPPER BYTE OF BC MUST BE ZERO BNE LDÊYS ONE ELEMENT ABOVE R1 ASR R1 ;USE BELOW AS COUNTER SQUI01: CMP R0,USYME ;REACHED TOP OF TABLE? BHIS SQUI04 ;YES: EXIT SQUI02: MOV R1,R2 ;COUNTER=# WORDS PER SYMBOL SQUI03: MOV (R0)+,(R4)+ ;BLOCK TRANSFER DEC R2 BGT SQUI03 ;STILL IN BLOCK BR SQUI01 SQUI04: JSR R5,REGPOP RTS PC .PAGE NXTMOD: ;ROUTINE SETS UP PARAMETERS TO READ NEXT O÷‹ˆ‚¬hæàw>wŒŒŒŒ„wˆˆ¦y戈¦y戈¦ryæÕ7Š:÷ @ w´=þÌÍER02 MOV R0,R5 ;SAVE POINTER TO FIRST DATA BYTE ; NOW WANT TO COMPUTE CHECKSUM TO VERIFY CORRECT READ: MOV R1,R2 ;INIT CHECKSUM, WHICH INCLUDES BC SUB #4,R1 ;REDUCE BC TO ELIM "1-0" AND BC WORDS MOV R1,BC ;SAVE BYTE COUNT OF DATA ONLY NXTB50: MOVB (R0)+,R3 ;EXTRACT NEXT BYTE ADD R3,R2 ;ACCUM CHECKSUM DEC R1 ;MORE DATA BYTES TO ADD IN? ÎBJ MODULE DEC NAMCTR ;MORE MODULES? BLT NXTM30 ;NO MORE: TAKE "DONE" EXIT CLR BLOCK1 ;FLAGS FIRST BLOCK IN MODULE MOV NAMPTR,R0 MOV 4(R0),OBJSEC ;START SECTOR # MOV 6(R0),SECTCT ;SECTOR COUNT INC SECTCT ;WANT ONE EXTRA SECTOR ON LAST READ ADD #8.,NAMPTR ;ADVANCE TO NEXT NAME MOV #OBJBK2,BLKPTR ;INIT BLOCK POINTER TO FORCE FIRST READ ÷‹"‰ÉÈÐÁÒÀŒ´÷‹"‰ÉÈÐÁÒÀwZfPgôfZføgz P‰— Â�–%€�w7¢ w÷‹"‰f&üÊ Œ Õ”ÌeþÿÕ>Å@Ä‚ƒP÷¥(‰Œ·o`÷•˜þw‰”w‰ã�÷‹Ž÷ qÖÝ‹æ�z·Âåø—¢†€· ÂeÂe–¬w+®÷•èÂ%η Â%/Â%9Â%ÿÿ@ðµŒ&‰à7ŠüR”È Ñ ¦äÒÈåÒå ¦^z™‰—ˆˆ¦,yæpæ& v÷‰ø~À‰Á ÀºwÊwôÉ¥n7Šÿÿ@ðµ‰E÷‹‚ŒÖ ˆ,yæw¦)l÷•êÂ%Œ· Â%mÂ%BÂ%sÿÿ@ðµBÈå&‰È7Љ" ‘$Ñ žÂ>‰ñ¥<‰É¥J9þÐÑ ;BYTE COUNT INCLUDES CHECKSUM BYTE... BGE NXTB50 ;SO GO BACK FOR ONE EXTRA BYTE AT END INCB R2 ;CHECKSUM ITSELF INCLUDES THE "1" @BEGIN BNE LDER03 ;CHECKSUM ERROR MOV R0,BLKPTR ;ADVANCE BLK PTR-READY FOR NEXT BLOCK MOV R5,R0 ;RESET LOCAL PTR TO FIRST DATA BYTE BIT #1,R0 ;IS ADDR OF FIRST DATA BYTE ODD? BEQ NXTB70 ;EVEN:Ò ADD #2,(SP) ;BUMP TO TAKE "GOOD" EXIT NXTM30: RTS PC .PAGE ;"NEXT BLOCK": SUBROUTINE READS IN SECTORS UNTIL ; AT LEAST ONE BYTE OF NEXT BLOCK IS IN UPPER HALF OF THE ; TWO-SECTOR BUFFER. ONE ADDITIONAL SECTOR IS READ AFTER ; THE FINAL SECTOR IN THE MODULE TO FORCE THE LAST BLOCK ; INTO THE UPPER HALF. NXTB90: JSR PC,NXTMOD ;INIT FOR NEXT MODULE AND READ A BLOCK BR wÿÿ@ðµâ7 ‰fÿ÷‹Œ¦)l÷•êÂ%Œ· Â%mÂ%BÂ%sÿÿ@ðµBÈå&‰È7Љ" ‘$Ñ žÂ>‰ñ¥<‰É¥Jwÿÿ@ðµâ7 ‰fÿ÷‹wÏx÷Œ€ Ñ•‰€ Ñ•B‰Ý”÷‰€ Ñ•‰€ Ñ•>Ñ•‰€<Ñ•„‰”~Àˆ$gg×,‰~À Ñ• Ñ•Ø÷‰€ Ñ•LEÑDUÑMOщ~ÀæâÆŒŠgbg$g‡ˆ"yæˆ"yæ7Šù÷‹‰!ˆæêhæ݇ô7 Àe€‰‰÷‹~À&J÷ Ñ• Ñ•‰~Á÷‡(7 Àeð5O7Š€‰f~ÀŒ~À&.PÀ-VÀg{à P‰× ~Áƒœ †r· Âe‰ìzÀ‰‚~À!ˆæ`cæˆ"yæ¶yæl÷xxQ÷€÷ 5þÔÕ NO RELOCATION NEEDED MOV BC,R3 ;NEED TO MOVE ALL BYTES BACK ONE NXTB60: MOVB (R0)+,-2(R0) ;SHIFT BYTE BACK ONE DEC R3 ;MORE BYTES TO MOVE? BGT NXTB60 ;YES MOV R5,R0 DEC R0 ;NOW POINTS TO FIRST DATA BYTE NXTB70: MOV BC,R5 ;INIT R5 WITH DATA BYTE COUNT ADD #2,(SP) ;BUMP FOR "GOOD" RETURN NXTB80: RTS PC ; ****************************************ÖNXTB80 ;NO MORE MODULES NXTBLK: CMP BLKPTR,#OBJBK2 ;ARE WE INTO LOWER SECTOR? BLO NXTB30 ;NO-NEW READ NOT NEEDED NXTB10: ;LOOP HERE FOR SUCCESSIVE SECTOR READS DEC SECTCT ;ANY MORE SECTORS IN MODULE? BLT NXTB90 ;NO MORE: GO INIT FOR NEXT MODULE ;YES - READ NEXT SECTOR--- MOV #OBJLST,-(SP) ;DISC READ LIST EMT DISCIO ;****READ NEXT SECTOR**** TST â·Šˆ"yæ²ÂÜ·‰œwŒù÷‹‰!ˆæêhæ݇ô7 Àe€‰‰÷‹~À&J÷ Ñ• Ñ•‰~Á÷‡(7 Àeð5O7Š€‰f~À‰‰~À&.PÀ-VÀg{Œ× ~Áƒœ †r· Âe‰ìzÀ‰‚~À!ˆæ`cæˆ"yæ¶yæl÷xxQ÷€÷ â·Šˆ"yæ²ÂÜ·‰œww‡÷ÿwÄ ,ŒÈa(1Ãà‹ÅɵÉà C÷¥K÷¥Q7”V÷µ\7”=÷‹´ (EÁeºEÁ€Ã ÀeÀeg÷‹=ÂeÂey÷‹ŒÃeÎ #!EÎ ÜEÁeàEbÁÌà ÀeÀe³÷‹cÂeÌwÂeÉ÷‹ ÃeÎ "!pÛ÷‹E1þØÙ**************************** LDER01: MOV #1,R4 ;OBJ MODULE BLOCK READ ERROR JSR PC,ERRPRT LDER02: MOV #2,R4 ;BLOCK BYTE COUNT ERROR JSR PC,ERRPRT LDER03: MOV #3,R4 ;OBJ MOD BLOCK CHECKSUM ERROR JSR PC,ERRPRT .PAGE ; " T R A P U T " ; SUBROUTINE PUTS AN "ADD R1,LOC" TWO-WORD INSTRUCTION IN THE TASK ; TRAILER, TO BE EXECUTED WHEN THE LOAD MODULE IS READ INTO CORE PRIOR ; TO TASK EXECUTION, THUS EFÚ OBJERR ;READ ERROR? BNE LDER01 ;YES INC OBJSEC ;BUMP SECTOR # FOR NEXT TIME SUB #128.,BLKPTR ;SHIFT POINTER BACK TO TOP SECTOR AREA NXTB30: ;PREPARE TO FIND NEXT BLOCK START MOV BLKPTR,R0 MOV #OBJBK2,R1 ;TOP OF LOWER AREA SUB R0,R1 ;# BYTES REMAINING IN TOP SECTOR ; SEARCH FOR A "1-0" SEQUENCE TO START NEXT BLOCK NXTB40: MOV #ONEZRO,PTR1.0 ;INIT PTR TO [1]¨ÁÂeÂ"À÷.ÃŒ÷.ÃwÍ2‰„¸þw,‰ÔDÀ&& ÂÀ‰î}À�‰Àö}Á‰ý}Áfn7ìb‰„ ÷å‰ôµ,‰%òµÿwV·ŠŽâ5Œx7Š|æ�Ô ÒÒdÃ6{¡‚÷‹ˆ·Š£7Š©÷‹ @{±·Š¶÷‹(´,†2-”7F­6.‰¤ª÷„² ÷å‰ ôµŒ¯ ÿw÷É¥¶ÿÿ@𵉠é÷‹@‰ã.‰ôì÷„0‰¬gXgÀfgèfÞfz P‰— �ÁeDðÈåʉr7Š~7 –‚÷Š÷%Ê’÷ Ñ Œ°À¢÷%Ö‰¦÷‹‡‰£÷‹‰Â¥yÖÝ“æ�,Â¥ÈåBÿÿ@ðµ>‰ñ¥<‰É¥ÿÿ@ðµ-þÜÝFECTING DYNAMIC RELOCTTION. THE SUBROUTINE ; CALCULATES THE PROPER DISPLACEMENT BETWEEN THE INSTRUCITON AND "LOC", ; THE WORD IN THE TEXT NEEDING DYNAMIC RELOCATION. THE FORMULA FOR THE ; DISPLACEMENT BETWEEN THE "ADD" INSTRUCTION AND ITS OBJECT IN THE LOAD ; TEXT IS: DISPL = CURPC + OFFSET - TRAPC ; THIS DISPLACEMENT IS NEGATIVE, SINCE ALL REFERENCES FROM THE TRAILER ; WILL BE BACKWARD. TRAPUT: ;SUBROUTINE TO BUILD TRAILER ADD #4,TRAPC ;ADVÞ NXTB44: DEC R1 ;END OF TOP BLOCK YET? BLT NXTB10 ;YES - GO READ NEXT SECTOR CMPB (R0)+,@PTR1.0 ;IS NEXT BYTE A MATCH FOR SEQUENCE? BNE NXTB40 ;NO MATCH - KEEP LOOKING INC PTR1.0 ;MATCH: BUMP TO NEXT BYTE IN CODE BIT #1,PTR1.0 ;HAVE BOTH [1] AND [0] BEEN TESTED? BNE NXTB44 ;NO - CHECK FOR [0] .PAGE ; YEA! A [1-0] SEQUENCE HAS BEEN FOUND: NOW PRO‰ˆ,yæL{æL{÷f‰/ý÷‹‰Œ‰w4 w‰-{ÁüÀ‰{ÁòÀ‰{ÁHÀøî÷\7mN‰6‰D{Ä 7L‰0‰@{ÄE÷‹t7mN‰6‰:{Ä.7L‰0‰6{Ä’7*‰:{ÄŒ}÷‹‚÷‹°÷x÷‹¡·Š†rŒ÷-6ÿwz·„·„Îí æš7Š  ÷‹®²÷m´œ÷í¿7ŠÅ÷‹¼°7²ð¶÷à¼÷`ÂðØ÷‹ÎŒƒƒ æ0 0  µÝ0á0lðà  µíÁ¥Á¥ôÁ¥œœ?†7 Àe67 67.À@\÷V÷•JŒFF÷-ˆ7Šòw�·Š–÷‹ô0 ðUðÛ Àe0 0 ð•HðU ðE¯ððEð )þàáANCE TO NEXT OPEN CELL AFTER THIS 1. MOV TRAILPOINTER,R3 ;NEXT OPEN TRAILER SLOT MOV #60167,(R3)+ ;"ADD R1,A" INSTRUCTION JSR PC,GETPC ;GET VALUE OF CURRENT LOAD OFFSET SUB TRAPC,R4 ;CALC BACKWARD DISPLACEMENT CMP -(R4),-(R4) ;SINCE "PC" IS ADVANCED, BUT "TRAPC" NOT MOV R4,(R3)+ ;STICK IT BEHIND "ADD" ; NOW SEE IF BUFFER IS FULL, AND WRITE IT OUT IF SO: CMP R3,#TRAILBLOCK+64.âCESS BLOCK MOVB (R0)+,R1 ;BLOCK'S BYTE COUNT TSTB (R0)+ ;UPPER BYTE OF BC MUST BE ZERO BNE LDER02 MOV R0,R5 ;SAVE POINTER TO FIRST DATA BYTE ; NOW WANT TO COMPUTE CHECKSUM TO VERIFY CORRECT READ: MOV R1,R2 ;INIT CHECKSUM, WHICH INCLUDES BC SUB #4,R1 ;REDUCE BC TO ELIM "1-0" AND BC WORDS MOV R1,BC ;SAVE BYTE COUNT OF DATA ONLY NXTB50: MOVB (R0) ð5¯ð%+†¸7 ¾7¾ÀŒ÷‹®²÷m´œ÷í¿7ŠÅ÷‹¼°7²ð¶÷à¼÷`ÂðØ÷‹Î÷`C ƒƒ æ0 0  µÝ0á0lðà  µíŒÁ¥Á¥ôÁ¥œœ?†7 Àe67 67.À@\÷V÷•JwFF÷-ˆ7Šòw�·Š–÷‹ô0 ðUðÛ Àe0 0 ŒHðU ðE¯ððEð ð5¯ð%+†¸7 ¾7¾Àwxw0·ÎeŽåÐæ!ˆ@æ~wHPÄyÁÈ ÒyÀÌ÷ :‰wµŒ‡– ž÷ /ˆ†yæüÐ÷Ô? Õ·ŠØ7ŠÞ÷‹\‰‡– Z‰Î%ƒ·Š/ˆ€yæ&÷‡– Z‰Î% ·Š6÷ %þäå ;AT END YET? BLO TRAP20 ;NOT YET MOV #TRALST,-(SP) ;LIST FOR WRITING TRAILER EMT DISCIO INC TRASEC ;BUMP TRAILER SECTOR COUNT MOV #TRAILBLOCK,R3 ;PREPARE TO RESET POINTER TRAP20: MOV R3,TRAILPOINTER ;NEW POINTER RTS PC .PAGE ; " T X T O U T " ; ("TXTBC" MAY BE ZERO, WHICH INDICATES "CURPC" HAS BEEN SET TO A NEW ; VALUE BY AN RLD COMMAND. IF THE NEW PC STILL FAæ+,R3 ;EXTRACT NEXT BYTE ADD R3,R2 ;ACCUM CHECKSUM DEC R1 ;MORE DATA BYTES TO ADD IN? DEC R1 ;BYTE COUNT INCLUDES CHECKSUM BYTE BGE NXTB50 ;SO GO BACK FOR ONE EXTRA BYTE AT END INCB R2 ;CHECKSUM ITSELF INCLUDES THE "1" @BEGIN BNE LDER03 ;CHECKSUM ERROR MOV R0,BLKPTR ;ADVANCE BLK PTR-READY FOR NEXT BLOCK MOV R5,R0 /ˆzyæ ÿH(÷*·!ˆBæ wŒð5¯ð%+†¸7 ¾7¾Àwxw0·ÎeŽåÐæ!ˆ@æ~wHPÄyÁÈ ÒyÀÌ÷ :‰wµ÷‹V‰‡– ž÷ /ˆ†yæüÐ÷Ô? Õ·ŠØŒÞ÷‹\‰‡– Z‰Î%ƒ·Š/ˆ€yæ&÷‡– Z‰Î% ·Š6÷ /ˆzyæ ÿH(÷*·!ˆBæ wwDw‰wÀ‰wÀ!ˆæêhæˆy挌÷ˆyæˆyæšyæ”÷ˆyæ!7Š$7Š*7ŠB7ŠD7Š=7ŠE7ŠH7ŠK7Š�7Š„7ŠV7ŠX7Š[7Š^7Ša7Šd7Šg7Šg7Šj7Šm7Šg7ŠjŒ7Šg7ŠU7Š„7м7 ‹7Š¢7Š’7Š‚7Šn7Šˆ&È ˆ&Òyæˆ&»÷‹ryÀˆ&È ˆ&Ð÷‹"yÀ!þèéLLS WITHIN BLOCK #1, ; NO TRANSFER WILL OCCUR. IF THE NEW PC IS INTO THE SECOND BLOCK, OR ; OUTSIDE THE TWO BLOCKS, BOTH BLOCKS WILL BE WRITTEN OUT, AND THE ; APPROPRIATE NEW TWO BLOCKS WILL BE READ IN. IN MANY CASES THIS WILL ; MEAN THAT A PARTIALLY-WRITTEN TEXT BLOCK #2 WILL BE WRITTEN TO DISC, ; ONLY TO BE READ BACK IN AGAIN INTO BLOCK #1. IN THIS WAY, ; WE CAN BUFFER OUR TEXT OUT ONE SECTOR AT A TIME, AND PROTECT THE ; INTEGRITY OF OUR NEWLY CREATED TEXT.) TXTOUT: ;SUBROUTINE TOê ;RESET LOCAL PTR TO FIRST DATA BYTE BIT #1,R0 ;IS ADDR OF FIRST DATA BYTE ODD? BEQ NXTB70 ;EVEN: NO RELOCATION NEEDED MOV BC,R5 ;NEED TO MOVE ALL BYTES BACK ONE NXTB60: MOVB (R0)+,-2(R0) ;SHIFT BYTE BACK ONE DEC R5 ;MORE BYTES TO MOVE? BGT NXTB60 ;YES NXTB70: MOV BC,R5 ;INIT R5 WITH DATA BYTE COUNT ADD #2,(SP) ;BUMP FOR "GOOD" RETURN NXTB80: ‰ð÷ ˆˆ¦y戈¦yæ ì÷ ŒH7ŠK7Š�7Š„7ŠV7ŠX7Š[7Š^7Ša7Šd7Šg7Šg7Šj7Šm7Šg7Šj7ŠK7Šg7ŠU7Š„7м7 ‹7Š¢7Š’7Š‚7Šn7Šˆ&È ˆ&Òyæˆ&Œ÷‹ryÀˆ&È ˆ&Ð÷‹"yÀ‰ð÷ ˆˆ¦y戈¦yæ ì÷ wwr‰’–÷-Æ÷²w´7Û®÷‹"‰ ÈeÈeÈÑÌüÿ7léŒ"‰ üÿ,Îe&ÖÈÑBòÑöüÿ7l„ wø÷‹"‰ç Ãeê ÷å‰ÄÈeÊeÑ ó5üÿ,'†&÷ ,ÃÑB‘‘4 ¤ÑžŒÑZÑÑ‘Îå|·„×- †v×-~æÈ ‰ˆryæÒyæp÷|¡K÷„÷ Ë·Š„7 ˆryþìí OUTPUT ACCUMULATED TEXT IF BUFFER IS FULL ADD TXTBC,CURPC ;BUMP LOC'N CTR TO BGN OF NXT TEXT BLOCK ADD TXTBC,TXTPTR ;ALSO BUMP POINTER IN LOCAL TEXT BLOCK MOV CURPC,-(SP) ;SAVE FOR WORK BELOW MOV TXTORG,R4 ;PC VALUE @ BGN OF RESIDENT TEXT CMP (SP),R4 ;IS NEW PC BELOW TEXT IN BLOCK ONE? BLO TXTO10 ;YES - REPLACE TEXT ADD #128.,R4 ;PC OF FIRST BYTE IN SECOND TEXT BLOCK îRTS PC ; ******************************************************************** LDER01: MOV #1,R4 ;OBJ MODULE BLOCK READ ERROR JSR PC,ERRPRT LDER02: MOV #2,R4 ;BLOCK BYTE COUNT ERROR JSR PC,ERRPRT LDER03: MOV #3,R4 ;OBJ MOD BLOCK CHECKSUM ERROR JSR PC,ERRPRT .PAGE ; " T R A P U T " ; SUBROUTINE PUTS AN "ADD R1,LOC" TWO-WORD INSTRUCTION IN THE TASK ; TRAILER, TO BE EXECUTED WHEN THE LOAD MODUæÒyæš¡K÷¢÷ ˆryæ¤Ff÷#V÷ Œó%†x³ MÖ ÷ "yænx3 æ÷ Æ{*øM÷ ð÷ Æ÷ †x3 „x3 ¼Â„xs<¢{*P‚x3 ~x 3ˆx³€x3pxs· Œbm.ÏZJmZZ2þwù÷ Ê(Ò.ÒŠÜùÒ�’$&m*q¦& —"Nm—"BmŒä`Ua ü à`*õT ENSCIEQUN-NO¬b ÑR!PAL ŒFTWGSWHRWÿQÿÿÿÿÿÿÿþðñ CMP (SP),R4 ;NEW PC IS ABOVE BLOCK1:IS IT BELOW BK2? BLO TXTO50 ;YES - NO NEED TO WRITE OR READ .PAGE TXTO10: ;HERE TO WRITE CURRENT TEXT OUT AND READ NEW TEXT IN--- MOVB #1,TXTR.W ;WRITE MOV #TXTLST,-(SP) EMT DISCIO ;WRITE OUT CURRENT RESIDENT TEXT MOV (SP),R3 ;NEW "CURPC" ASR R3 ;NOW GET SECTOR FOR NEW PC BIC #100000,R3 ;SUPPRESòLE IS READ INTO CORE PRIOR ; TO TASK EXECUTION, THUS EFFECTING DYNAMIC RELOCTTION. THE SUBROUTINE ; CALCULATES THE PROPER DISPLACEMENT BETWEEN THE INSTRUCITON AND "LOC", ; THE WORD IN THE TEXT NEEDING DYNAMIC RELOCATION. THE FORMULA FOR THE ; DISPLACEMENT BETWEEN THE "ADD" INSTRUCTION AND ITS OBJECT IN THE LOAD ; TEXT IS: DISPL = CURPC + OFFSET - TRAPC ; THIS DISPLACEMENT IS NEGATIVE, SINCE ALL REFERENCES FROM THE TRAILER ; WILL BE BACKWARD. TRAPUT: ;SUBROUTINNWƒ~_PW3~_PW3Œ0 Ð ŽdG*<€ECVDNOCTPOSEUGLAJUUNYJMAPRRAMAEB@G*ÛNFJAJÉ� Ñ�’ý÷ ‚6G·@÷ G*Œ¶~{*¦÷ rx€)úÄ Ò rxò Ä2÷ ÂZ{*ÚˆxÂ…ƒ€xû æfÖ ¦ï÷ & ~xæ 6{*¬Œvü÷ þùæþm*´ ú÷ ^· d·j·pàÿ÷Evþÿ÷‡l7Þl*Êd7À„7 ú‡— Òƒ àÃÂälÀºl*Œ žb îD!CML IL �b ™ ?ˆb  FC: AˆbþôõS EXTENDED SIGN ASR R3 ASR R3 ASR R3 ASR R3 ASR R3 ASR R3 MOV R3,R4 ;SAVE NEW SECTOR (RELATIVE TO TEXT BGN) ADD BGNSEC,R3 ;SECTOR RELATIVE TO BEGIN OF BATCH FILE MOV R3,TXTSEC ;SET FOR UPCOMING READ & SUBSQNT WRITES CLRB TXTR.W ;PREPARE FOR NEW TEXT READ MOV #TXTLST,-(SP) EMT DISCIO ;READ IN NEW TEXT öE TO BUILD TRAILER ADD #4,TRAPC ;ADVANCE TO NEXT OPEN CELL AFTER THIS 1. MOV TRAILPOINTER,R3 ;NEXT OPEN TRAILER SLOT MOV #60167,(R3)+ ;"ADD R1,A" INSTRUCTION JSR PC,GETPC ;GET VALUE OF CURRENT LOAD OFFSET SUB TRAPC,R4 ;CALC BACKWARD DISPLACEMENT MOV R4,(R3)+ ;STICK IT BEHIND "ADD" ; NOW SEE IF BUFFER IS FULL, AND WRITE IT OUT IF SO: CMP R3,#TRAILBLOCK+64. ;AT END YET?pb ŒŠWä~_PW3~_PW3~_PW3fW*~_PW3~_PW3~_PW3BW*ÛÞ]OW0ŒV5æ÷ ‡5Á÷ „5Á÷ �5Áˆb˜b˜b˜øF*dz5Â÷ t5ÁF÷ }5ÁˆeÔF*5·Š#k÷‹dî7 jî· ú Ó•Œ÷ &[gôŠ~xÄþÿŸÈxx2{*rxÄe„rx2þÿà߈xÂþÿæMæ÷ ’÷ ìz,�<Âòw¼ÂÉ Ö÷ ä÷ pxŒ‡üÀ Ù>jÁÀôÀ á kg0Š[g0Ššl&ÁKgð•*g1 ÁÀöÀåg0`g"gð"gþøù ASL R4 ;NOW GET PC AT BEGIN OF NEW TEXT ASL R4 ASL R4 ASL R4 ASL R4 ASL R4 ASL R4 MOV R4,TXTORG ;NEW BEGIN PC MOV (SP),R3 ;PC FOR BEGIN OF NEXT TEXT BLOCK SUB R4,R3 ;GET OFFSET FROM TOP OF TEXT AREA ADD #TXTBK1,R3 MOV R3,TXTPTR ;ACTUAL POINTER TO NEXT OPEN TEXT WORD TXTO50: TST (SP)+ ;POP SAVED PC ú BLO TRAP20 ;NOT YET MOV #TRALST,-(SP) ;LIST FOR WRITING TRAILER EMT DISCIO INC TRASEC ;BUMP TRAILER SECTOR COUNT MOV #TRAILBLOCK,R3 ;PREPARE TO RESET POINTER TRAP20: MOV R3,TRAILPOINTER ;NEW POINTER RTS PC .PAGE ; " T X T O U T " ; ("TXTBC" MAY BE ZERO, WHICH INDICATES "CURPC" HAS BEEN SET TO A NEW ; VALUE BY AN RLD COMMAND. IF THE NEW PC STILL FALLS WITHIN BLOCK #0 À rl.ΞúÀÿ7 ¢ú7 ¤ú7 ¦ú7 þŒjb&Fb*¹Ú` —ô`¥ŒÞ]OW0~WâÞ]OW0Þ]OW0Þ]OW0ZW*Þ]OW0Þ]OW0Þ]OW06W*ŒË¥n5à þ÷ °F*n5æ†îæ†ö÷ €î7Šòî÷eÆ÷ Àÿæ_ï]ï÷­ŠF,@œî÷‹¶î7 ¼î÷ Pï7 >ï7Š6÷ ÊîÆî÷-fF*Œrx€Èz*úˆxÂþÿ€ß ‰» &÷ Ð÷ ¼Âñ ¤z*å<Â÷ †x3 þüý RTS PC .PAGE LPCALL: ;COMMON ROUTINE TO MAKE EMT TO LINE PRINTER MOV #MAPLST,-(SP) EMT LPRNTR ;LINE PRINTER RTS PC ; ******************************************************************** ; SUBROUTINE "BINARY TO OCTAL ASCII CONVERSION" ; INPUT: R4 = BINARY NUMBER ; R3 = DESTINATION END ADDRESS ; R2 = ITERATION LENGTH (IF ENTER @"B2ONTA") þ1, ; NO TRANSFER WILL OCCUR. IF THE NEW PC IS INTO THE SECOND BLOCK, OR ; OUTSIDE THE TWO BLOCKS, BOTH BLOCKS WILL BE WRITTEN OUT, AND THE ; APPROPRIATE NEW TWO BLOCKS WILL BE READ IN. IN MANY CASES THIS WILL ; MEAN THAT A PARTIALLY-WRITTEN TEXT BLOCK #2 WILL BE WRITTEN TO DISC, ; ONLY TO BE READ BACK IN AGAIN INTO BLOCK #1. IN THIS WAY, ; WE CAN BUFFER OUR TEXT OUT ONE SECTOR AT A TIME, AND PROTECT THE ; INTEGRITY OF OUR NEWLY CREATED TEXT.) TXTOUT: ;SUBROUTINE TO OUTPUT ACCUMULATE„x3 „xsˆx³‚x3 ~x 3~z, €xŒ…„ƒ‚�Nl*™ vœ 6 €F6ÿ·Z· Bf*l*¼& Jÿ·n·BÀe@`À ÿÀE@œl* ŒÐ`*ɬ`*íŒ':_NW3:_NW3rWÎ:_NW3:_NW3:_NW3NW*û:_NW3:_NW3Œú÷ Ö Þî÷ æ'Í•ž Îe æu™BF*rÅ M•Õ‹  W£€ï÷‹!¾ï¿ï÷­ þ BIN2OC: MOV #6,R2 ;INIT ITERATION LENGTH (NORMAL 6 CHARS) B2ONTA: ;ENTER HERE WHEN PRE-SETTING ITERATION LENGTH MOVB R4,-(R3) ;ALSO LOOP RETURN FOR NEXT OCTAL DIGIT BICB #370,(R3) ;LEAVE ONLY LEAST SIGNIFICANT THREE BITS BISB #060,(R3) ;CHANGE TO ASCII CODE ASR R4 ;BEGIN SHIFTING FOR NEXT OCTAL DIGIT BIC #100000,R4 ;PREVENT SIGN PROPAGATION ASR R4 ASR R4D TEXT IF BUFFER IS FULL ADD TXTBC,CURPC ;BUMP LOC'N CTR TO BGN OF NXT TEXT BLOCK ADD TXTBC,TXTPTR ;ALSO BUMP POINTER IN LOCAL TEXT BLOCK MOV CURPC,-(SP) ;SAVE FOR WORK BELOW MOV TXTORG,R4 ;PC VALUE @ BGN OF RESIDENT TEXT MOV R4,R3 ;SAVE ALSO FOR CALCS BELOW CMP (SP),R4 ;IS NEW PC BELOW TEXT IN BLOCK ONE? BLO TXTO10 ;YES - REPLACE TEXT ADD #128.,R4 ;PÞà ƒãpï6F*&÷ Ë•ƒ ã•€ïÃÛ ã•ŒpxsnxóþÿŸ™ÄþÿŸˆ £0Zz*�ñw$î÷ & €�‚ƒ„…þÿö ð 4z,ð¥þÿŸ nxó 0[g´ŠêìÄŒÉû·û·�‚ KgµŠûw‘×þÿŠ$û7 âk*ƒKgW­EÜ g"gòeg²"grFûw"g�Û´ÿºk.÷ þÿàß•á—!÷Œˆ`*e2ad`*“JwÖ ÷ & æ & æ‰N`#€N`¤ ŒNW3*W*R–WŠW~WrWfWZWNWBW(W´ŠW~WrWfWZWNWBW6W&Wþ DEC R2 ;MORE ASCII DIGITS TO GO? BGT B2ONTA ;BACK FOR MORE RTS PC ;ASCII BUFFER FILLED: RETURN ; ******************************************************************** ERRPRT: ;ERROR MESSAGE PRINTING ROUTINE ; R4 ALREADY INITED WITH BINARY ERROR NUMBER MOV #ERRNUM+2,R3 ;LAST CHAR IN ASCII BUFFER MOV #3,R2 ;A 3-CHAR MESSAGE NUMBERR JSR PC,B2ONTA ;USEC OF FIRST BYTE IN SECOND TEXT BLOCK CMP (SP),R4 ;NEW PC IS ABOVE BLOCK1:IS IT BELOW BK2? BLO TXTO50 ;YES - NO NEED TO WRITE OR READ .PAGE TXTO10: ;HERE TO WRITE CURRENT TEXT OUT AND READ NEW TEXT IN--- MOVB #1,TXTR.W ;WRITE MOV #TXTLST,-(SP) EMT DISCIO ;WRITE OUT CURRENT RESIDENT TEXT ASR R3 ;NOW GET SECTOR FOR NEW PC BIC #100000,R3 ;SUPPRESS EX~WrWfWZWNWBW6W*WW"ŒË•Žï÷Ãe úE*mË•ƒ œïÃÚï÷ŠDï· Tï÷ ÿ÷ ìï÷ŠÀ ÖE*é ùï÷‹ÄE”ÂCÅeN5À÷ Hÿ÷ ²E*ŒÄxx2z*¼xx:*È þÿàßþÿæóñó¥Ã 2Ãñìy*|Ä ó@ €8¥Äº÷ ä Äç ÄÈy*ðÉ Œ"gò Â`íØÿ–k*0÷ Ã Ä „ûÄixú÷ lŒû÷ ôÿ7 þÿŠrk*Óä 6 Ž Ž Ž wý÷ æþÿö—‡ŽNk*Œò…„ƒ‚�€Ö @`}M&f¦æ&4`Õ‡øƒ` Ð þ   SECONDARY ENTRY POINT TO CONVERSION MOV #ERRMSG,TTYBUF ;INIT FOR PRINTING ERROR MESSAGE MOV #TTYLST,-(SP) EMT TTYOUT ;REQUEST MESSAGE EMT EXIT ;CURRENTLY ALL ERRORS TERMINATE LOADER .PAGE TTYLST: .WORD 1 ;TELETYPE I/O LIST .BYTE 0,2 ;DEVICE: TTY #1; CALL TYPE: SUSPEND .WORD 0 ;I/O COMPLETE .BYTE 0,0 ;ERROR,LEVEL .WORD 0,0 TENDED SIGN ASR R3 ASR R3 ASR R3 ASR R3 ASR R3 MOV R3,R4 ;SAVE NEW SECTOR (RELATIVE TO TEXT BGN) ADD BGNSEC,R3 ;SECTOR RELATIVE TO BEGIN OF BATCH FILE MOV R3,TXTSEC ;SET FOR UPCOMING READ & SUBSQNT WRITES CLRB TXTR.W ;PREPARE FOR NEW TEXT READ MOV #TXTLST,-(SP) EMT DISCIO ;READ IN NEW TEXT ASL R4 *`…À_àÐ Â_À`ƒŒ•¶à®à¦àžà–àŽà†àvÿW·²àªà¢àšà’àŠà‚àrÿW©´à¬à¤àœà”àŒà„àtÿW˰à¨à à˜à�àˆà€àpÿWŒ.€ï· "ð÷‹ÂCªïÄÅe�ï÷�ðŽE*E÷`ó‡$5— Ò•œ†D!à ŠÊ 5 ¶õjE*Ó÷ ÀÔ D>ðwæýÿ*ŒÂ¾y'— œ‡Ž€�‚ƒ„…T÷ 0Äšy*”ÿ7¬ ¨÷ €f&æ¦f&vy*¸žzzŒö �‚ƒ„ ¶þÿß�Kg´Šg±g¹Á *k*x �œÊ „ *gÄ Kgô•)ýý   ;RESERVED TTYBUF: .WORD 0 ;DATA BUFFER OBJLST: .WORD 1 ;OBJECT MODULE READ LIST .BYTE 1,2 ;DISC: SUSPEND .WORD 0 .BYTE 0,3 ;ERR TASK, DISC REQUEST PRIORITY OBJERR: .WORD 0,0 ;ERROR WORD, RESERVED .WORD OBJHED ;DATA BUFFER MAPLST: .WORD 1 ;LIST FOR LOAD MAP .BYTE 3,2 ;LINE PRINTER,SUSPEND .WORD 0  ;NOW GET PC AT BEGIN OF NEW TEXT ASL R4 ASL R4 ASL R4 ASL R4 ASL R4 ASL R4 MOV R4,TXTORG ;NEW BEGIN PC MOV (SP),R3 ;PC FOR BEGIN OF NEXT TEXT BLOCK SUB R4,R3 ;GET OFFSET FROM TOP OF TEXT AREA ADD #TXTBK1,R3 MOV R3,TXTPTR ;ACTUAL POINTER TO NEXT OPEN TEXT WORD TXTO50: TST (SP)+ ;POP SAVED PC RTS PC Kg­þÿàß•.‚k*òü7¡1„Ý & þÿ×&榌 `�`â VzV0Vø_l¤u¨uî_zvyh�ª‹pfêeä_ßf~dðdÀ_Œ÷‡‡€ WÔû‡D!,W¥ ›€�‚þÿŸ•ö äV*üÖ ¶  ÷ &ý `˜�` ‚ �Ð    ÀV*¬ŒÅepÿ÷ fôïFE*·ðïæüÄ Õ•Ä ðð÷- fU%2"E*>w~ðÅô÷÷ ‡ô „ „ €ÄE„ 0ËÕøËÅ#‘þD*ŒyŽxryD¬TEORAB1 P L/ ^yY�ADRET NOTyùý;I/O COMPLETE .BYTE 0,0 ;ERROR,LEVEL .WORD 0,0 ;RESERVED MAPBUF: .WORD 0 ;DATA BUFFER: CHOSEN DURING RUN TXTLST: .WORD 1 ;LIST FOR TRANSFERS TO/FROM TEXT AREA .BYTE 1,2 ;DISC; SUSPEND .WORD 0 .BYTE 0,3 ;ERROR,LEVEL .WORD 0,0 ;RESERVED .WORD TXTHED ;ALWAYS R/W FROM/TO TEXT AREA TRALST: .WORD 1 ;LIST FO .PAGE LPCALL: ;COMMON ROUTINE TO MAKE EMT TO LINE PRINTER MOV #MAPLST,-(SP) EMT LPRNTR ;LINE PRINTER RTS PC ; ******************************************************************** ; SUBROUTINE "BINARY TO OCTAL ASCII CONVERSION" ; INPUT: R4 = BINARY NUMBER ; R3 = DESTINATION END ADDRESS ; R2 = ITERATION LENGTH (IF ENTER @"B2ONTA") BIN2OC: MOV #6,R2 Þ1 P L/ ORRR ETYRIPA1 P L/ 0y*Œõ… … … ‡âj*T^õw vþÿŸ•Kg0Š1 Ég2L¾j*_g²`g"gò "gr "gò W"þÿàß•%šj*ŒrWØ_g5ÁÀ&jø÷ €ŒJ.yM,y „0|Fy ìP0|P0|P0|P"y*ÌŒÃÄC +"gƒ BœþÿŸ“Kgð•6*vj*™Â 8 ÂåKgœþÿàß•€ *gÀ H‚¸ü7 Rj*`K€Ý  þÿæ—ðõw 2jŒ‡’_÷�„]W±Š� Á Ê÷Á�&f‡‚ à÷ÕŠ ö�¦n_*Ù‡Ôw YWñ•W^ý•ð`W@ü÷7Š\W±ŠJ_*Œ6 6 øÀ RV,0ª÷ B C � B Da…„ƒ w ‡.V*ñý IN FILE ; ******************************************************************** TXTHED: ;HEADER FOR TEXT SAVE BUFFER READ/WRITE OPERATIONS .WORD BTCHID ;FILE I.D. FOR BATCH FILE .BYTE 0 ;RELATIVE SECTOR TXTR.W: .BYTE 0 ;TEXT READ/WRITE BYTE .WORD 0,0,0 TXTSEC: .WORD 0 ;RELATIVE SECTOR TO READ/WRIOTE TEXT TXTCNT: .WORD 0 ;# WORDS TO TRANSFER EACH TIME TXTBK1: .=.+128.  ;MORE ASCII DIGITS TO GO? BGT B2ONTA ;BACK FOR MORE RTS PC ;ASCII BUFFER FILLED: RETURN ; ******************************************************************** ERRPRT: ;ERROR MESSAGE PRINTING ROUTINE ; R4 ALREADY INITED WITH BINARY ERROR NUMBER MOV #ERRNUM+2,R3 ;LAST CHAR IN ASCII BUFFER MOV #3,R2 ;A 3-CHAR MESSAGE NUMBERR JSR PC,B2ONTA ;USE SECONDARY ENTRY POINT T¬Ž w vûÀ � Þ÷  Da…„& w V*ÆŒCñ7�ˆø÷ ñ· ’D*Öñÿ�ÀÿÃE.ñÿ� ÃÅ›z× ža×  Z× ¤nD*øA× ñ.Ã¥ Ãå$Ã¥€ J÷ ÃåJD*Œ8yè~è~è~y*\úwlv榎øw`væ¦Tv ‡Žþ÷�þŒc‡Ž.j*O€�‚þÿŸ•8ü÷ f1øÂåW" j*>j�ÂKgð•ffffff"ýÆ Áe�ü7 âi.ŒW=ŠÅ E øÁ�öw ‡8÷ Wæì÷×-ê÷ "_.íý ;FIRST TEXT SAVE BLOCK TXTBK2: .=.+128. ;SECOND TEXT SAVE BLOCK ; ******************************************************************** OBJHED: ;HEADER FOR READING OBJECT MODULES .WORD BTCHID ;FILE I.D. FOR BATCH FILE .BYTE 0 ;RELATIVE SECTOR .BYTE 0 ;READ/WRITE FLAG .WORD 0,0,0 OBJSEC: .WORD 0 ;RELATIVE SECTOR NUMBER .WORD 128. ;ALWAYS READ IN TWO SEO CONVERSION MOV #ERRMSG,TTYBUF ;INIT FOR PRINTING ERROR MESSAGE MOV #TTYLST,-(SP) EMT TTYOUT ;REQUEST MESSAGE EMT EXIT ;CURRENTLY ALL ERRORS TERMINATE LOADER .PAGE TTYLST: .WORD 1 ;TELETYPE I/O LIST .BYTE 0,2 ;DEVICE: TTY #1; CALL TYPE: SUSPEND .WORD 0 ;I/O COMPLETE .BYTE 0,0 ;ERROR,LEVEL .WORD 0,0 ;RESERVED n[W³Šï[Wó‹‡*w ZW3ŠÖ ò÷ æ&WfW}�õú^.†¡·•Œ ˆøQæ‡ ˆøQæüþw÷ üžT÷ˆêU&°®TæˆJþæ0Tæÿw"÷ 0ü¢S÷ˆ¾Sæf0ÿwÂU.&8÷ FüjS÷Þ„ Ù„…ˆ„þŒ‘9×  0× € b÷ .éð·Š1Vþðw�…&D*vˆÌµpÌÕŽU�ÿÎE&“ÌÐ ñ÷ÐÃE Ê` ŠeD*)Ê Ê É`É É ¦Ê É ÿÎEÿŒ’þ÷Pþ7 >vªdþ¤t÷^þ˜t÷bþ7 .v•ú7йþÿÿ÷•žúÿÿ÷•üÁ ±p1˜Á°pÀú v(0Á Á à €p1Á~pÀýÁ Œ”° 7 .ý7 1 6ýÁ*Ö þÿàß•z÷ &þÿŸ“¼i,w$j$jüiüiéý !CTORS OBJBK1: .=.+128. ;FIRST BLOCK FOR OBJECT DATA OBJBK2: .=.+128. ;SECOND BLOCK FOR OBJECT DATA ; ******************************************************************** TRAHED: ;HEADER FOR TRAILER WRITES .WORD BTCHID ;FILE I.D. FOR BATCH FILE .BYTE 0 TRAR.W: .BYTE 1 ;ALWAYS WRITE FROM TRAILER AREA .WORD 0,0,0 TRASEC: .WORD 0 ;TRAILER SECTOR NUMBER .WORD 64. "TTYBUF: .WORD 0 ;DATA BUFFER OBJLST: .WORD 1 ;OBJECT MODULE READ LIST .BYTE 1,2 ;DISC: SUSPEND .WORD 0 OBJERR: .BYTE 0,0 .WORD 0,0 .WORD OBJHED ;DATA BUFFER MAPLST: .WORD 1 ;LIST FOR LOAD MAP .BYTE 3,2 ;LINE PRINTER,SUSPEND .WORD 0 ;I/O COMPLETE .BYTE 0,0 ;ERROR,LEVEL .WORD 0,0 ;RESERVEÒi¼i$j$j¬iyÁ Kgœþÿàß•œi&³þÿæ—H‚xý7 K€Ý ¦f&ŒSW3ŠRW3ŠQWÿÿó•ƒJþ÷ æ ¡·•`W`WµÔ^, ^W^WµÅ E ÂSWSWñœRWRWñœQWQWñœ!QWñ‹À¬^.x÷ T¡·•÷Ä  Ò J:Œ0T榈žU*ú¬^÷ ýÄ S•rü7ÈeÄSÀäSû|÷ zU*Šü€T÷Ä ÃŒ÷ šüDS÷€„…ˆÔþæVU*ý0TŒ¦EðÿÃE& ÞC*°Añ÷Å€ÌÕæ.Ã¥ 9× 0× ÀñÌ‹ºC* è÷ ø€ sœC¬væñ7ìÿÀ÷ := ,&;–C*Œ%ÁDú76pÀèu*�€¦)H” H” H” &ÛtÁÎ5åý$Œ 0,1,2œ*šM,3 SET SWITCHES=-1 TO RESTORE DISK HʾMIT WHEN READY: Ç*ØM DISK ERRŒ,VZñ•YW±ŠUWÌý•^Wñ•YWö}œWWWñ•YW;*|ZﱊUWý• Wñ• YWå1ŠYWwhþý• W†* Z1ŠUWñ• YWŒâ*le÷ Œæ÷ þæÆÿæÄÿÅ®eľÿüÿ•$�e·¸ÿÆxf&æ¦f&ê÷Ä% ;WRITE ONE SECTOR AT A TIME TRAILBLOCK: .=.+128. ;TRAILER BUILD AREA: OUTPUT WHEN FULL .PAGE IDMSG: IDEND-.-4 ;# CHARS IN I.D. MESSAGE .WORD 0 .BYTE CR .ASCII "ROSLOD IIA" .BYTE CR,'# IDEND: .EVEN ; ******************************************************************** ND1MSG: ND1END-.-4 ;# CHARS IN "END 1" MESSAGE .WORD 0 .BYTE CR .ASCII "ROSLOD PASS #1 EN&D MAPBUF: .WORD 0 ;DATA BUFFER: CHOSEN DURING RUN TXTLST: .WORD 1 ;LIST FOR TRANSFERS TO/FROM TEXT AREA .BYTE 1,2 ;DISC; SUSPEND .WORD 0 .BYTE 0,0 ;ERROR,LEVEL .WORD 0,0 ;RESERVED .WORD TXTHED ;ALWAYS R/W FROM/TO TEXT AREA TRALST: .WORD 1 ;LIST FOR TRAILER .BYTE 1,2 ;DISC,SUSPEND .WORD 0 .BYTE 0,0 Æu(ÙàtÁ$€Ö V ÆåJŠà÷PŠæ±¡Ö  u,ŒKgñŠöwþÿxi*BŠœýÆ0 �ü7 ( 7 ¦ý7 Kg1ŠÈÜ Ti*`ºýÀþÿàß•,w(ÿ÷ & þÿæ—‡ŽŽŽþÿ0i*=Œ÷ ÄjWÅeˆ^*ZbWÀe@Å Å jWÂe   B¶÷ °øw p��œb^,rW=ŠW=Š ôUê„ ô5hò5l>^*Œ¦ÓSÁ%+NÁ%Â`à aÄ Ä Ä0Ãå2U*,× 0Â嘘TÿÀm]PÁ%ÌXÁ%DEÁ%’U* |TÀø÷ þüxT÷ú÷ ýS÷ ÷ Œ6-!'+)" (% #@*/‡ÂU�ñ·ŠÝÄþÍøÀþrC*Äþ_åáý(öP*®e÷àJš÷ Œÿ�€�Œ*¤q)÷mäÿȵ· Úÿ·Š Áàt@”‰Šp¢ÍtD*Èq É•¡Š÷˜tÀ÷µ÷e²�€·Š÷ô*ìqµ‰–%Œ)÷‹ö(Îoˆõa÷êõ�á*Ê?÷ v Ä÷ ¬÷•Ôõ÷•Ìõ÷ Z ƒÄ*î?·XõÁ´õ²õ÷ ‚ÂHõ· ¬õÄ�Äõ´L5÷e¹Œ - ABORTED DECTðüMAPE ERROR - ABORTED¯NŠ*PÀJ‹ ÐÐ   ÷•8ý÷Œý• Wñ• YW 1ŠUW@`Ww¯*ÄZrþñ‹]Ww&ÿý•WñŠ]Wwÿ‰Á�¥ÁEðÿ�,èZE)D" .BYTE CR ND1END: .EVEN ; ******************************************************************** PAS2MG: PAS2ND-.-4 ;# CHARS IN "PASS 2" MESSAGE .WORD 0 .BYTE CR .ASCII "ROSLOD PASS #2 BEGIN" .BYTE CR PAS2ND: .EVEN ; ******************************************************************** ND2MSG: ND2END-.-4 .WORD 0 .BYTE CR .ASCII "ROSLOD PASS #2 END" .BYTE CR ND2END: .EVEN .PAGE * ;ERROR;LEVEL .WORD 0,0 .WORD TRAHED ;DATA BUFFER .PAGE TXTHED: ;HEADER FOR TEXT SAVE BUFFER READ/WRITE OPERATIONS .WORD BTCHID ;FILE I.D. FOR BATCH FILE .BYTE 0 ;RELATIVE SECTOR TXTR.W: .BYTE 0 ;TEXT READ/WRITE BYTE .WORD 0,0,0 TXTSEC: .WORD 0 ;RELATIVE SECTOR TO READ/WRIOTE TEXT TXTCNT: .WORD 0 ;# WORDS TO TRANSFER EACH TIME TXTBK1µñ·ŠèÂþß ÄþÍÆþ_Äþúýw¿ñ·ŠNC*@Ôù÷ î CL æýwAŠŠæù÷ Œ¾ êw 6 K�“�ÿ÷eÓµÿ˜t÷‹€Šà÷xu.ÞtÄ`ûDa”à  ÎtÀæÍtœ‡Ít³ :ü· Ru,0}ÿ·ŠŒ‡þÿß�"g*g0g*g0*g"g<Ä À €œ i*AKgô•‡þÿß�Kgô•Á Ê¢ 7 2À äh.ÐÀ ’7 ¸ À&>þÆþÿŒn€ò5 2s@ô5Ä œúø7 üø÷þø÷^.Rð`W@^W@QWó‹üwTWóŠYù7Šò]*øWAŸÅ ÅZW³ŠŒ,T÷÷ èT,$ýØR÷´TâTÞTxÀ î ñ0Àå þÀ�:Ýý,Å D$Wô•@`W Ê €f&Wæ÷ Œƒ„…÷ 4÷ rÿšÒeÆvÿ÷ ’í÷ êwŠ´êeæšæ÷ v7 wv>þe÷øÿ‡ñŒÀ˜G7ö�&÷ ^*r·£Í< ·­¿7·­´2÷àÎ�ÆeŸ*4r"ß2 È7¶�B €f÷ ¿Œ*@´õÍÕÍÕ ÷ PÃŽ5Ö Â5ÿ·ŠJ*6@×ô·Ššõ÷ B×­�õ·ŠÁô÷ Ðü÷Š€õ‡Í F*Z@Í Í Í Í Í ÷ Œ ýæRM7*BP ˆ÷ÒMýæRM ˆÃxÿ× ÿÿ÷•³ý7Šýæ*fP7Š©ý÷•ý× ÿÿ÷ - ERRMSG: ERNEND-.-4 ;# CHARS IN ERROR MESSAGE .WORD 0 .BYTE CR .ASCII "ERROR # " ERRNUM: .BYTE 0,0,0 .BYTE CR ERNEND: .EVEN ; ******************************************************************** HEDING: .WORD END01-4-. .WORD 0 .BYTE FF .ASCII "**** ROSLOD LOAD MAP **** .BYTE LF,LF END01: .EVEN .PAGE MODULE: .WORD END03-4-. .WORD 0 .ASCII "*********.: .=.+128. ;FIRST TEXT SAVE BLOCK TXTBK2: .=.+128. ;SECOND TEXT SAVE BLOCK ; ******************************************************************** OBJHED: ;HEADER FOR READING OBJECT MODULES .WORD BTCHID ;FILE I.D. FOR BATCH FILE .BYTE 0 ;RELATIVE SECTOR .BYTE 0 ;READ/WRITE FLAG .WORD 0,0,0 OBJSEC: .WORD 0 ;RELATIVE SECTOR NUMBER .WORD 128. ÷ ÄT*c@ýÒR÷<÷ Jý¢R÷XXXXXX: DSELFI# žT,Œ Áµ Áµ*C*e¶ò÷‹ S  ãmò7Š´ò÷Šºò÷‹Ñò�ò÷­ C*» Áµ$@ÁµÁµìò÷‹$ c/@ÁµâB*ŒÁ5Hüm÷�ÿ÷•0‚ × üÿ ÌŠà,u,-Àe€ëw ð6 Âÿ÷Ëÿ·�Ðÿ7�u*‰öŠà÷€‡—-†< ‹öŒß•þÿ×„Ü Àh*†6€² 6 ²�*g‚ dþÂvœh*—�f¦æþÿŸ•~þ7 R„þ÷ þÿàß•þÿæ—xh*ŒÃ�Rw Ïðæ(WfWý•Î]*YW ñ•]Wñ•ÝæÙý0P÷ <÷ 6÷ BÁeþ.ŠPÀeŒM*[Ö DŸW+ÄÅ€¡|¡ n¡ *¡-’*2[ƒÃeƒl¡.ñ‹VWB¦ÎEÀ–,I² k*V[ ‘Ê €Ê5Œ*ffÿÿìff) ERROR XXXXXŠ#,f SXXXXX SXXXXX SXXXXX SXXXXX Ý*Jf&f-f4f;fBf·Œ.Xr÷ DÑ &÷ –Ö Â‹ ¦�& &  €NÑ & ÷ üô‡.€rÖ Â º€yܶÆe÷àf�÷•ÿÿEw ó÷àV�¶*¨rÀöŒ7Šbõ7 <õ7 :õwˆý¦�ÎEøÿ@*~@�Õ‡æ×¢ýÿ×¢ûÿ×¢üÿÎ Î Ö ‡Âæ*¢@1*" .BYTE LF .ASCII 'MODULE TITLE: "' TITLE: .BYTE 0,0,0,0,0,0,'",LF .ASCII "SECTION" .BYTE HT .ASCII "ENTRY" .BYTE HT .ASCII "OFFSET" .BYTE HT .ASCII "SIZE" .BYTE HT .ASCII "TOTAL" END03: .EVEN .PAGE SECT: .WORD END04-4-. .WORD 0 .BYTE '< SECNAM: .BYTE 0,0,0,0,0,0 .BYTE '>,HT,HT SECVAL: .BYTE 0,0,0,0,0,0,HT SECSIZ: .BYTE 2 ;ALWAYS READ IN TWO SECTORS OBJBK1: .=.+128. ;FIRST BLOCK FOR OBJECT DATA OBJBK2: .=.+128. ;SECOND BLOCK FOR OBJECT DATA ; ******************************************************************** TRAHED: ;HEADER FOR TRAILER WRITES .WORD BTCHID ;FILE I.D. FOR BATCH FILE .BYTE 0 TRAR.W: .BYTE 0 ;READ/WRITE .WORD 0,0,0 TRASEC: .WORD 0 ;TRAILER SECTOR NUMBER .WORD 64. $WfW=‘Ä @Ë5AĨ],lWDŸYWñ•VW1ŠXW1Š3 `W@JÖ xŒœTÈOI VISD ELFID TEESQURE NNC,xT*-H,T Z : ISD ELFID TEESQUREE TH ÆS$Œ2Áµ5 Áµ öò·Š;»òó÷­Ãòó÷�Ëò÷‹¾B*ì=óÿÿ÷•Jó÷‹@Áµ!Áµ  Áµ2óšB*÷‹*Jó÷‹nCVCDC$CðB’B†BŒ€&ät*ëGÿÎtߤt–¤tžt tžt˜tòðUøïÅ  tÁ~t,·ÂëŒ~¶¶¦Ö¶ 6 Ž Ž Ž Ž Ž Ž Ž Th*êÕý4& ×¢óÿ×¢ôÿЊŽ ‚ŠÂÂÕ€Ö ‡ ÃŒ ÿW ê · Îüæ÷òM´ü÷ØM¬ü¦*²PæRM ˆˆ æ`Mˆ÷ ¢üò‡KænM ˆ÷  ü] ÖPæ‡`.ÚPÀ  ŒÄ =‘WC$Wó•Ê5@þ*z[@w. Ä• ñ•YWîý•^Wñ•YW2 ï»*ž[ò äò Ê Þ�à ñ‹VW ±ŠVWÄ•\ñ•YWŒøÿŽw Îù¦ÅêÿÐ*nf w Àù…æ‚™÷à|™Í €ÿw|ÿ· zÿ½.’f·f™w ¤ùއ� ø7 ®ÿÅ\ÿ'wVÿ÷fPÿ(Œ÷åîÈð5ô7:�&÷ ¢!*Ìrð5ðE÷ —-?ö�ð—-í50,0,0,0,0,0,HT CUMSIZ: .BYTE 0,0,0,0,0,0 END04: .EVEN ; ******************************************************************** .PAGE ENTRY: .WORD END05-4-. .WORD 0 .BYTE ' ,HT .ASCII " " MFLAG: .BYTE 0 ;PLACE TO PUT POSSIBLE "M" FLAG .ASCII " " GLOBAL: .BYTE 0,0,0,0,0,0,' ,' ; GLBVAL: .BYTE 0,0,0,0,0,0 END05: .EVEN .PAGE UNDHED: .WORD END06-4-. .WORD 0 .ASCII 6 ;WRITE ONE SECTOR AT A TIME TRAILBLOCK: .=.+128. ;TRAILER BUILD AREA: OUTPUT WHEN FULL .PAGE IDMSG: IDEND-.-4 ;# CHARS IN I.D. MESSAGE .WORD 0 .BYTE CR .ASCII "ROSLOD IIA" .BYTE CR IDEND: .EVEN ; ******************************************************************** ND1MSG: ND1END-.-4 ;# CHARS IN "END 1" MESSAGE .WORD 0 .BYTE CR .ASCII "ROSLOD PASS #1 EN w*÷ æÆe¶þÿö‡Æe¶0h*�ö Öý÷ �‚ƒ„þÿŒ‚],©W@ýÕæ&WfW=‘YW ñ• ¡�^]*4 ^W@YW1ŠQWñ‹[W1Šðô•(WDC:]*÷]Wñ‹TWñ•ŒÈ: ISE LUVAC RIMENUE TH ¢S*DðELFIC RIMENUN-NOF ŽST OEDSTUEEQ RONSIERNVCOC RIMENU ŒÀ ^óÁ�€�–ú÷ vB* ÷ Á‹Üò÷•ÀµêÀµ @ÀµˆóÀ�RB*oÂUÉò·ŠÿÀ¥›óÀ�ˆÂUéò·Šû÷ Ôù.B*Œ6 ÉJû ABžtÁÅÿÿÈ%Xt,‚Ñý ND.E Y ORCTREDIL BOYM SERADLOF 9/**********/ .BYTE LF,LF .ASCII "UNDEFINED REFERENCES" .BYTE LF END06: .EVEN ; ******************************************************************** UNDDEF: .WORD 6 .WORD 0 UNDNAM: .BYTE ,,,,, ;SIX CHARS IN NAME OF UNDEFINED REF .PAGE ASWICH: .WORD 0 ;SWITCH FOR IGNORING "ASECTS" BC: .WORD 0 ;BYTE COUNT BGNSEC: .WORD 0 ;BEGIN SECTOR FOR BUILDING LOAD MODULE BLKPTR: .WOR:D" .BYTE CR ND1END: .EVEN ; ******************************************************************** PAS2MG: PAS2ND-.-4 ;# CHARS IN "PASS 2" MESSAGE .WORD 0 .BYTE CR .ASCII "ROSLOD PASS #2 BEGIN" .BYTE CR PAS2ND: .EVEN .PAGE ERRMSG: ERNEND-.-4 ;# CHARS IN ERROR MESSAGE .WORD 0 .BYTE CR .ASCII "ERROR # " ERRNUM: .BYTE 0,0,0 .BYTE CR ERNEND: .EVEN ; **************È%¬‹à÷€ìëw ¼‹ö¦€È 4t*ä6 p?t÷eÈeÈ ŒÖ ²2 h* [g4ŠKgô•g±g¹Á 4Ê þÿàß• r�èg*ZÁ•W kg���þÿß�Kgô•„ Äg*Œ‡�Ä D`�`Á Á f‡€䢷•]*•jW4bWÀebW4bWübWr÷ &÷ &‡ð\,Z£·•jW4jW<Š÷ >÷ °2Aì@ñ5Œ3jS*TéhSÀANSTXI-EON NISD ELFID TEESQURE !DS* ½):49S,R O2,,1 NE,, P,S®X, (Œ<÷ !´ó÷•¼ó÷µ ìù÷ -Îó÷‹×ó·Š B*Íý OND;E . = NDDELS E BLTAL BOYM SOR FCEPA SVEERES;R 0020.+.= R FEUF BEDEDNEUNR VE OESITWR: Y"ORCTREDIL BOYM SERADLO;" : GNDBLS T UNCOR TEACARCHL UACT;A 0 D OR.W: NTPCIN NGRISTD ANMMCOR FOR FEUF BUTNP ITY;T *7AMXNMA D OR.W: ATCDAS ERFFBUN IORSVEON CRYRAPOEM;T 0 0,0, D OR.W: UFPBTM E.ULOD MER PDSOR WURFOS SE U. LEDUMOH AC EOR FONTIMAORNF IORCTSED AN..;. . ..ESAM N50AD RLEDUMOJ OBS LDHOR FEUF;B . .+*8AMXNÌý=D 0 ;POINTER TO CURRENT PLACE IN INPUT BLOCK BLOCK1: 0 ;FLAG FOR FIRST BLOCK IN MODULE CURPC: .WORD 0 ;CURRENT VALUE OF RELATIVE "PC" DIRSEC: .WORD 0 ;NEXT AVAILABLE DIRECTORY SECTOR MODCNT: .WORD 0 ;COUNT OF # OF MODULES TO LINK NAMCTR: 0 ;COUNTER FOR NAMES INPUT FROM TTY NAMPTR: 0 ;POINTER TO NAMES IN INPUT LIST OFFSET: 0 ;KEEPS OFFSET FROM BEGIN OF LOAD MODULE ONEZRO: .BYTE 1,0 PRSIZE: .WORD 0 >****************************************************** HEDING: .WORD END01-4-. .WORD 0 .BYTE FF .ASCII "**** ROSLOD LOAD MAP **** END01: .EVEN .PAGE MODULE: .WORD END03-4-. .WORD 0 .ASCII 'MODULE TITLE: "' TITLE: .BYTE 0,0,0,0,0,0,'",LF .ASCII "SECTION ENTRY OFFSET SIZE" .BYTE LF END03: .EVEN .PAGE SECT: .WORD END04-4-. .WORD 0 .BYTE '< SECNAM: .BYTE 0,û‡Ýó÷‹û÷ Îóþÿ÷•Õó—ó÷­�ó÷‹%ó·ŠæA*Uèó÷¥Dó·�¨‹ ¨÷ ŒðE€†t*ÌÌt”×-ô‹à÷&þ‹ö¦‡°ŽUŽU¶ ìs*p¶ öÎ Î Î ÎÎàÎ ÍtÜÃ�Ž ÍåÈs*ÁŒ*gÄ ÿÿöR[gô‹VKg­ Kgô‹þÿà g*qß•]‚rÿ7¡`Ä 6 „Ý & þÿ×&æ¦f|g*NŒÊ\, ð‡ð‡ð‡ð‡ð¦\*éX£·•ˆ ‡0 ƒ`Åà C[g´Š 0‘ÄÜ ‚\*^Š Ã 0ŠŒLDIE F &ONSIERNVCOY TREN 7S* àÉýMA.=: UFMBNA ******************************************************************** ; OLMBSYD NEFIDEUNR FOD LSN IOTSLT EX;N 0 D OR.W E:YMUS T EX TINT LO SENOPT ENRRCUO TERNTOI;P 0 D OR.W: TRTPTX T EX TNTDESIREF OINEG BATC PNTREUR;C 0 D OR.W: RGTOTX T EX TNTREUR CINA AT DOFT UNCOE YT;B 0 D OR.W C:TBTX UTTPOUT EX TERFT AOWFLT ECIR DTOD SE UCHWI;S 0 : CHWITS R TOEC SERILRA TALTINI IOFE AV;S 0 D OR.W: SVSCTR " PCÈýÄý ;CURRENT PROGRAM SIZE PTROBJ: .WORD 0 ;POINTER TO CURRENT OBJ MOD ENTRY IN LSD PTR1.0: .WORD 0 ;POINTER FOR DETECTING ONE-ZERO SEQUENC PTSECT: .WORD 0 ;POINTER TO CURRENT SECTION NAME IN LSD SECTCT: .WORD 0 ;SECTOR COUNTER WHEN READING IN A MODULE SYME: .WORD 0 ;NEXT OPENING IN LSD FOR DEFINED SYMBOL TRAILPOINTER: .WORD 0 ;NEXT SPACE IN TRAILER BLOCK TRAPC: .WORD 0 ;TRAILER "Ãý0,0,0,0,0 .BYTE '>,HT SECVAL: .BYTE 0,0,0,0,0,0,HT SECSIZ: .BYTE 0,0,0,0,0,0,HT CUMSIZ: .BYTE 0,0,0,0,0,0 END04: .EVEN ; ******************************************************************** ENTRY: .WORD END05-4-. .WORD 0 .BYTE HT MFLAG: .BYTE 0 ;PLACE TO PUT POSSIBLE "M" FLAG GLOBAL: .BYTE 0,0,0,0,0,0,' GLBVAL: .BYTE 0,0,0,0,0,0 END05: .EVEN .PAGE UNDHED: .WORD END06-4-. .WORD 0 .ASC