t¸t¸¼t¸‘Ú*t¸æª»ˆæ´»ˆæÒ»æ´»ˆæC!ˆæÿ¼÷ ÊÏ*˜¸÷q,÷è¼(÷ î÷ Ø÷0,÷&wþ.¼¸‚÷ ÂÀÞ»Åñÿ7Ð $… ù�ì7 ÷\¼Ú.*ä¸& Î�òæ[½æ"ˆ& Î�ãæW½æ"ˆ÷•,ú*¹S÷• I÷• B÷ ®÷X½ª÷ p7’*,¹÷ TÁ^¼ÄùÿÉ Áe„ ú�÷rð÷ý,P¹x÷Y½t÷ :æ€æ¾½æ"ˆ÷Z÷©½VŒ*v¹÷ «fæi½æ"ˆfæl½æ"ˆfæp½µ*š¹æ"ˆ÷•L¿É €÷•CµfÎEðæv½÷ ¤*¾¹f悽<;<;ôƒ´» ±Œ:‡<;ûÿûÿP*P{,*R»EE*v»  N;�*š»@N; P{ æT»ˆæl»è*¾»ˆæ^¾æT»ˆæ|¾æT»ˆæT»ˆæH;æl»',⻈æl»ˆ÷  í7�•ÿ放æT»ˆæT»ˆæH;$,¼æl»ˆæl»ˆ÷ ví7 kÿ÷ €ç7�iÿæ¿©*.¼æT»ˆæT»ˆæH;æl»ˆæl»ˆ7 î~÷¥YK*R¼ú~· â~æl»ˆæ„»ˆæŽ»ˆ7 &ÿ7 ,ÿ7 Ì*v¼2ÿ÷@ÿð¼ð¼<½£„:ý~ð¼æ¿ˆ·*·(æ&¿æ¿ˆŽ‡Â.¦÷ ÖÿÂe€— ž¾Â¾·Âe€" · üŽ‡×¾æ¿ˆ ÄÀêÌÃÆêÅe Ì5úCÌ‹~h½ f÷ žÿQ¤E úÁö „ ÅåÀü†ÅeÀ… … … áÀò æƒ � ÒRÒ< Ä ÷ Xÿó2 úÿÄ€Ba�… Åå<æÎ Q„ † á €#ø–$R :~ཅ ý÷ &ÿ Ê ¦Ò€  üæ÷ ÿ Ò Ò  ÷ øþ濈0ˆg~X¾–¸r*€P ¸÷VÃÃeæÿÄœÄ`�*$Xß Zß“ÁêÁÊÿQ$ÀÈê```BÂEùÿÊ*HÂUA ‡æ$^ ÁÀêÀ¢ÿB� Â5W*l× ‡÷ ¸ÿæ&^ ðU€ ß Âêì7 rÿf8 �æKø æ"ˆf拽æ"ˆ÷• ¯wbwb†*â¹þf攽ƒæ"ˆ×¢0Ó• úf朽æ<*º"ˆ÷• Œf梽æ"ˆ÷• ‚÷• {÷•Æ**º t÷H–÷a½’÷ X€÷ „÷ý€÷ 1*NºFæŽæ¾½æ"ˆ÷f÷©½b÷ ( æ@*rºC!ˆæà½÷ ä÷\8H÷TZ· V÷ ðÀœ*–º&7BÐ Ð ÃÀÿÁ¾É•0 †‰Š· ,� 0ººƒ €Ã5óÑ• Ã5îÐ ìÅ5ÿ÷ì÷νèm*äº÷ ®fæ¾æ"ˆ÷RÐ÷¾Ì÷ ’Åe@Í*»Å-ÚÄ寴æÊæÿ½æ"ˆ÷• Õæ]* ÷ ÿ÷ $ÿw(À�¼~Àå0� ¨*š¼Îe‡æ¨¾æT»ˆæT»ˆ‡÷œ»‚~÷5.¾¼Úþ斻愻ˆæ„»ˆ7 n~w :í÷ºþæ–»º*æ¼æŽ»ˆæŽ»ˆ· N~w ð÷ <~wž7 <~©* ½÷ˆþ�þ÷‚þ”þ÷¦»"~×-vþ?÷zþ÷[,.½~þ栻愻ˆæ„»ˆ7 ~w Ìó÷°»î}檻H*T½æŽ»ˆæŽ»ˆ· à}w ¬óÀN;ÁP{Âà$ú*x½wÈ‚ ú÷ À}· º}÷e þ÷e þ×-þi*œ½BwŒÿ÷e@ìý×-èýB ÷ûÿŠ}×-Úý?*,À½÷Ôýwìþæø¾æT»ˆ7 Èý÷Æý栻愻k.k~о¸@Û~H¿zFÀ¿:<½ v~v~º@v~8}.v~æˆ  7ЉÁ5·Šæˆ ·€æ±*ž~æˆæˆ7væ$æˆæˆÀe€k*Â~Âe À5ÿåæˆ� Á5ÓæˆÃ *æ~à ùÀ2ÿÈÿàÈ‹þ€È ò�_T* 8} ð. . ‘.Jv~ ,»¸Îí²æë½æ"ˆ÷• ©÷• ¢÷• ›÷•*P» |÷• w÷• n÷Gd÷̽`÷ &æ´»Å,t»ˆæ´»ˆæª»ˆ0ˆæ¼»æª»ˆæª»ˆ‡æÆ»,𻿴»ˆæ´»ˆ‡÷ð�M€MÜ»´"À»@€‘Ú N›)ܼ DISK DIRECTORY c*½ UIC T FILNAM.EXT DATE Ó*,½ MODE START DLONG LASTQ P½ PROt]½,²a½ o½.ž s½ f ½ Z潈栻掻ˆæŽ»ˆæ„»ˆæŽ»ˆæT»ˆæT»n*¾ˆw ýÿ &}€· "}…÷e0}÷�}¢æ´¾â,2¾æT»ˆw˜ÿ÷ûÿþ|Õ …· ø|wfþæÒ¾æT»²*X¾ˆwvÿ DECTAPE COPY V01B e*|¾ORIGINAL ON UNIT COPY T/* ¾O UNIT ????  *** I/O Ð*ľERROR, UNIT  *** UNRECOVERADè¾BLE COPY ERROR aø¾ COPY COMPLETED ç#¿VERIFY COPY (Y OR N)? a´»Šš~š~–@š~8}é.š~æˆ  7ŠeÁ5·Š[æˆ 7fæ$e*Â~æˆæˆ·HææˆæˆÀe€ÿ*æ~Âe À5ÿåæˆ� Á5Óæˆ0ˆ * 8} ð. . ‘.Jš~ᮓ®“‚+Ò“4d^A*®“ ”˜À›´Ÿh£¦÷ &æð¨ˆà*Ò“Æ®“æÆ“æ!ˆÀ©Ð‹&.ˆ/ˆÖ Áð¨b*ö“ Âü¨Ã¼“fˆf ˆ–%„æ÷ …& À…*”®“Ð Naüæ@&÷ 耄À aüòF”¤*>”üÿ¦fˆ2 üÿ¦f ˆÖ & æ ¦& f*b” ˆ‹–%À®“7Nÿæfˆfˆ÷5À@ÿ æö †”:ÿÎEÿÎæ‡0ˆKaéfˆ0ˆ* ”ww6wØæ¼©‚ˆ÷‹úæ:¨¦ˆæÿ*Ä”P¨¦ˆ7 䦈沩�ˆæpªfˆÀ*¬&b*è”ÐS fˆ^‰÷µ'å ˆ½ Q ‘½ H ™½ @ ¢½ 7¨½ TOTAL BLOCKS e#ý ******* DISK MAP þé½ =ð½ BLOCKS USED ®¾ BLOCKS FREE ò ¾ À*b¾·|·~÷#¿v÷öÿt·f·df&æA,†¾æZæ*¿æ"ˆ÷e�æ,¿æ"ˆ…Ö Äì¾(*¬¾&æ&¿æ"ˆfæ ¿æ"ˆåòÄÅÚ*о· €•ûƒ„…Ƕ>J&*ô¾zQÒ�QÖAÔA� ˜wL^îY  ,,­4dµz¨* §² qè¯2²s…v°)²å~R°ß±t…p°Õ±*( €%J°ѱ–(±�±ˆ, é°¼R`°n°€¢± *L n°�[±n°HX±n°&X±n° N ±n°Æ*p ÈK ±n°K ±n°à.±n°ˆ,±n°À+±ƒ*” n°è!±n°ð±$°^J°ü¯P‚„°ü¯*¸ ‚|°Þ¯p!H±ׯ}Z°Ö¯x ±Ö¯h°î*Ü ¥¯€%J°‹¯Ì:°i¯È}8±;¯ÌB°;¯8*¡10±j˜xPñ�} €€%@ñ €@ñö*$¡ €À Ñd‰`”zÀ Yz€ À z]*H¡€%ö° zö .TITLE ODT11R ; 14 AUG 1972 . = .+144+26 ;RESERVES SPACE FOR STACK ; ODT-11R. --V004A ; COPYRIGHT 1969,1970,1971,1972 DIGITAL EQUIPMENT CORPORATION R0 = %0 ; REGISTER R1 = %1 ; NAMING R2 = %2 ; CONVENTIONS R3 = %3 R4 = %4 R5 = %5 SP = %6 PC = %7 ST = 177776 ;STATUS REGISTER O.BKP = 16 ;NUMBER OF BREAKPOINTS-1 MULT. BY 2 O.RLR = 16 ;NO. OF RELOC. REGISTERS-1, TIMES 2 O.TVEC = 14 ;TRT VECTOR LOCATION O.RELC = 20 ;NUMBER OF RELOC.REGISTERS(TIMES 2) O.STM = 340 ;PRIORIæÞw– æ¬.ˆ�J* • Q¤É• á•?àHæ*¬¦ˆÎ�^‰7 P7Š**0•÷•7 ’7 ª7 ¨7ŠÁ*¨\‰2 *T•7‘*w(w à ÷t€÷p|Á2¨\‰*x•õà & æ…wLw·ŠÑ÷8Á¨\‰ *œ•Ä7‘à 7Šú7Š+à & æ†w+*À•÷Á¨\‰ôà òwÔþÁ¨\‰Äx*ä•7‘Àà áÁ"¨\‰Ä7‘Ôà & æ„w*–Ê÷(÷‹”÷�!÷•÷‹; æÜ©:*,–ˆ÷§²æ8ªæÜ©ˆ7 ¤ÁÆ©fˆ÷§ˆ™*P–æ*ª·@fˆ7 xw2æBÕ¿Ë‘ T%¿ ô)¿ ð/¿ ýt¸Í° zà óy}Àðñy€»ð•*l¡æyøf€ðæyøÀåy€˜úÀäyøÀãyÓ*�¡`'ûÀãyè&ûÀãy &üÀãyàûÀãyhûõ*´¡ÀãyðüÀây€»ðáy€»ðLy˜ÐyÉ*Ø¡~€¢w´žw²œwK ðœw@8ðõ*ü¡œw€%ðœw ð–w¸‹w±;w@* ¢¿w€ ´s³s€0©s *D¢êr är@ [q`"èY OXè*h¢€%ÀñOXÀñOX ”T€%ò°”Tòÿ*Œ¢°”TpppT@8€ pT€�®S!œS;*°¢€%ó°œSó°@R@8@ TY MASK - STATUS REGISTER O.TBT = 20 ;T-BIT MASK - STATUS REGISTER TRT = 000003 ;TRT INSTRUCTION O.RDB = 177562 ;R DATA BUFFER O.RCSR = 177560 ;R C/SR O.TDB = 177566 ;T DATA BUFFER O.TCSR = 177564 ;T C/SR ; INITIALIZE ODT ; USE O.ODT FOR A NORMAL ENTRY ; USE O.ODT+2 TO RESTART ODT - WIPING OUT ALL BREAKPOINTS ; USE O.ODT+4 TO RE-ENTER (I.E. - FAKE A BREAKPOINT) O.ODT: BR O.STRT ;NORMAL ENTRY BR O.RST ;RESTART O.ENTR: MOV ST,O.UST ;RE-ENTER -- SAVE STATUS MOV O.TVEC+2,ST ;S!ˆÎeȆ·2*t–À Á ÈEÀåù ! ! ! ! wîµ*˜–wìwÔ÷¯7 ‰wÒá wwâ7 �*¼–(÷-,&·7 $´7 ÷-  ¼7 ¹fF*à–/ˆƒÃ5& æƒwà Bò Ä ‡5*—Eõ uÍ ÍÎõÌÅÄ *(—�œÂeÁ æ�â—"â—$Ó¦æ"ˆó*L—Ž€Ì—"PA—"TAÆÒ æ ÀÄ­ËS*p—÷7‘Åô—"37¶·Š³îÁÆ©^‰ÁÜ©^‰Áª *”—É fˆæFªfˆfˆÁì©^‰Áª^‰Á¼©·*¸—^‰Á²©^‰w$¬ªFª^¬ì©Tª N¬@R@�zQÀD Å*Ô¢ µK€ ð³KÀð¦Køf@ð¦Kõ°¥Kg*ø¢€˜ýà¤Kõ°£KðKþà£K Kþà£K09þŸ*£à£Kà8þà£K &ÿ°£Kðÿ°ŠAP˜@Î*@£@¬:s:€ 42}\!ˆˆ*d£`~€%ù°~ù°~rpËÀ %»*ˆ£@  ¬Ø€%÷°Ø÷°Ø ”*¬£!º¤¶¢²€%ñ²ñ²u*У ®¨£¡³Àð;¯*ô£…@ó„@P@ ¿*¤€@µ@‘�@t@ET UP LOCAL STATUS MOV PC,-(SP) ;FAKE THE PC MOV (SP)+,O.UPC MOVB #-1,O.P ;DISALLOW PROCEED CLRB O.S JMP O.BK1 O.STRT: MOV ST,O.UST ;SAVE STATUS ;RUN AT CURRENT STATUS JSR 5,O.SVTT ;SAVE TTY STATUS JSR 0,O.SVR ;SAVE REGISTERS (MAINLY SP) MOV #O.UR0,SP ;SET UP STACK MOV #O.ID,R4 ;TYPE ID MOV #O.IDND,R3 JSR 5,O.TYPE BR O.RST1 O.RST: JSR 0,O.SVR ;SAVE REGISTERS JSR 5,O.REM ;REMOVE ALL BREAKPOINTS JSR 5,O.CLRR ; CLEAR RELOCATION REGISTERS MOVB O.PRI,R4 ;GET ODT PRIORITYªbªµz—*Ü—¬Æ©*ª4d¬Ü©8ª4d PAL11R V007˜A  # ¯*˜wwwNwÔwüwwPwd7Šä¨*2˜7‹ûÀ� À¥üÿÀ¥ûÿ ‰h‰‰÷‹â÷‹Øh*V˜·Š_wð 7 Â7 ÀÕ÷˜p.÷ÈÂN*z˜ÿÕ p7& æ€w¶Á«D‰� Äîª ÂjŒ*ž˜ÃRX‰ ÷87 f7 z‰÷å:ÃJÃí *˜ƒ ƒ ƒ ƒ Ã%þÙ÷‹EÏÁf ƒÁ5¸*æ˜� Àî7üà 7ô7˜÷�Ál* ™ÂÃÞó�À•ÃzÄH‰w* 7‹ø*.™÷‹ç ÁoÀvƒ÷*<¤@o‡@e@ü 0!û P!ë ì*`¤@!É Àv†@É ‚@¬ @� Y*„¤@Y @ ‡@û †@J € D Û*¨¤À @ Àv�@ t�ä€%ô°äô(̤°ä` ã@ £€%€ñ£€ñö*î¨Bað 4dªÆBa›ÿ¬ð¨ü¨î¤ª*©À¶í€ ú6އ ‰*6©&‰� Á Â.©�`w¾ÿæ ©æð¨ˆ*Z©ƒÃåÒE€úÉU€*‰æð¨ˆ÷5À˜ÿ æ÷*~©’ÿÎEÿÎæ‡w”*‰Îe‡LPQARD RORB R4 ;SHIFT RORB R4 ; INTO RORB R4 ; POSITION MOVB R4,ST ;STORE IN STATUS O.RST1: CLRB O.S ;DISABLE SINGLE INSTRUCTION FOR NOW MOVB #-1,O.P ;DISALLOW PROCEED MOV #O.STM,O.TVEC+2 ;STATUS WORD TO TRT VECTOR+2 MOV #O.BRK,O.TVEC ;PC TO TRT VECTOR ; THIS NEXT INSTRUCTION RAISES THE "Z" FLAG BECAUSE ; ITS PURPOSE IN LIFE IS TO BEHAVE DIFFERENTLY ON THE /20 ; AND THE /45 SO WE CAN CHANGE THE RTI WHICH ALSO ; BEHAVES DIFFERENTLY ON THE /20 AND /45 BUT DOESNT RAISE ; THE Z FLAG. CO ¶ ´ƒÁ5� ¦÷ê¼*R™FÿÅ –7Š»Á¯Â”Ó÷•ÿÿ¨7Šh‰h‰Ó*v™À�`À¥üÿ À¥ûÿ‰÷‹¦·Š)wº wº …*š™÷‹� ·Š÷¥ýÿ0åw  ÿÕ,‰û÷Õà*¾™@j‰ØÁ÷µ\ ·ŠéñÕÿ÷¥ýÿø¼*â™Éëwd ÉÕ@‰h‰‰÷‹2·Š¹ Á´*š«D‰÷÷÷Šüw6 Åzª  ÄÑ**š÷ ÎJ‰H‰÷Üw ƒ  ‡@2 úÿ#*Nš r,üÿ “€Â�2 Âåç·}*ršnÀ‡ÁªÃFªd‰À披fˆÀ ú÷Ù*–šbF‰ÀŽÁŒ "v*¢©MBINTU,EEž*Æ©GxðHxðÊ*ê©\M€MÜ€fð*ª¤x€Mô&µW4dl*2ªô&µW4dô&µWö ô&ð*VªµW Nô&µWµz%p:zªË ª PAGE m*ºª€ P•*ު줠ª«*¬ÿî«3#NFUSED? WELL SO ARE WE. CMP PC,#.+4 ;CHECK WHETHER ON /45 OR /20 BEQ O.20 ;EQ MEANS 20, NE MEANS 45 MOV #RTT,O.RTIT ;RESET TO RTT IF ON 45 O.20: JMP O.RALL ;CLEAR BRK PT TABLES ; ;O.CTLC ; ^C PROCESSING. SIMULATE A TTY INTERRUPT ; ; O.CTLC: MOV O.USP,SP ;RESTORE CURRENT STACK CLR -(SP) ;DUMMY STATUS JSR PC,O.CTL1 ;PUSH RETURN ADDR OF INTERR ON STACK BR . ;MONITOR WILL RETURN TO THIS WAIT O.CTL1: MOV 62,-(SP) ;PUSH MONITOR STATUS MOV 60,-(SP) ;PUSH ADDR OF MONITOR ^C ROUTINE M$ ÄH‰À¯Á”Âî*ºšH‰Â4Ã2Áêª ÄîªÌ@X‰ʵ Z‰*ÞšÂå÷Å ÷•!ÃÄC!$@úÿAüÿ*›Â(CH‰×­ì)N‰F‰ÂÚÃØÁêª Äþ*&›îªÌ•`X‰Z‰ÂåúÅå·ŠÏÖÂÀ¯D*J›Á”÷‹ÈÀ ÁžÂÕ Ã|ÂE—H‰N‰÷¾*n›ŠF‰N‰÷€F‰  À• ÄH‰N‰‡§*’›&‰…@úÿAüÿCþÿÄÂBÓÂE—H‰×­DL¶›)N‰F‰`‰ß*À›wwbwvw®wØwwlw‚ ‰÷¡*ä›àªÄÊ´ ÷‹Œ ÷‹ë÷¥ÿÿÊ·Šg’*œ&«¬¾D²ª±€²`³ ¸"¸$¸"°ì·0«ô·‚´Bµ¼v½$³Œ±ö¤ø»^´¾D«ú¤p´^¾¸ª·È· ·ÄºÜ»¿)X« ¥’±R±²(´¾0¾¿¥š¾¿l«p¾ ¥è´Ò´¥ ¥ò¤V²|´<©Æ&€«d²B³V³  m ¬-¬-*¬ PAL11R.OVR ,š¬§Ô¬xÖ¬u*­¶Îå¦Îe"‡b‰wÊ÷÷•ÿÏý7 ºûU*6­Æ®ý7 ˆü7 šü7 ºü7 ¢ü7 Æü7 `ü7 füæ$­ã*Z­æ!ˆæ­& æ!ˆÀ©Ð‹&.ˆ/ˆÖ *'OVB #100,O.RCSR ;ENABLE KYBD INTERRUPT RTI ; O.ALF REXP;NA TYPE N CHARACTERS STARTING AT REXP; ; THEN-- ; ACCEPT A STRING OF ASCII TEXT. STORE IT IN ; SUCCESIVE BYTES STARTING AT THE INDICATED ; LOCATION. TEXT TERMINATED BY COUNT, N. ; OR CR OR LF. ODT PRINTS THE ADDR OF ; THE NEXT AVAILABLE LOCATION IN CORE ; O.ALF: TST R3 ;WAS REXP TYPED? BEQ O.ELF1 ;BR IF NOT TSTB O.SMFD ;WAS ; TYPED? BEQ O.ELF1 ;BR IF NOT, ERROR TST R2 ;IF N NOT TYPED, ASSUME 1 BNE O.ELF4 INC R4 O.ELF4: MOV (÷„÷€87ŠË÷•@®÷‹­·ŠE‰Æm*,œz·x÷‹• Ķ?!fƒÄ5„ ?XÄ*PœNÃÖ¨Â$‰Åˆ«Í­dÍ­rÁì©æD*tœÈ¨fˆ^‰Í­\÷&F‰N‰Ä披æªÝ*˜œ�ˆÄ ø^‰÷•H?¼©·öÊ ¦ˆÍ­�‡*¼œ7Š%ÁªwÜÍ­" Ãbªd‰7Š"‰¦ˆH*àœî^‰�Šw£qæÆˆ÷Ĩ÷ œ ÷Æ©²ö*�÷*ª®÷–�æb¦¦ˆ¦ˆw’æȨ漩*(�ˆæ¼©ˆw END &‰Å^Ä\÷*L�7Š�Åe‰Àå ÷•þÿ„ÅåD!÷‹cä*p�Bͽ*~­÷‹ý*Áð¨fˆf ˆ–%æ÷ |û…æü¨& l*¢­f ˆ„ –%×-Rû÷Hûðæü¨fˆ–%*Æ­Â.©ƒÃåDaúb‰w÷æüæüûˆ¯*ê­×­ü÷­ü�ýb‰L‰b‰wööæÚûæ^*®Ôûˆb‰wèö7 \ü7ŠÙü7ŠÔü7Šsû7Šyû7ŠÆüÉ*2®7Šwû7Šaû7Špû÷•Íü‰�&ÐSÐ æ›*V®Œûˆñµ@b‰wˆöñµ·Š!ûÄ• w*z®Q$BB`@ KËåá• wRü÷•I€üÊ¥ Ç*ž®÷e<VûÊ• 2¡ÿÿŠ”2‘ÿÿ2‘·ü ¤þ„*®À  ·ŠÏú‰À�èûÀe÷‹"ütwÒø*æ®÷‹ü+R4,-(SP) ;SAVE COUNT ;SET UP TO TYPE N CHAR. MOV R5,R4 ;ADDR OF 1ST BYTE IN R4 MOV R5,R3 ;ADDR OF 1ST BYTE IN R3 ADD (SP),R3 ;ADD N TO R3 DEC R3 ;SUB. 1 TO GET LAST ADDR MOV R3,O.XXX ;SAVE LAST ADDR. JSR 5,O.TYPE ;TYPE THE CHARACTERS JSR 5,O.CRLF ;TYPE CR/LF MOV (SP)+,R4 ;RECALL N TO R4 ;NOW ACCEPT INPUT STRING INCB O.SCRN ;ALLOW SPACES VIA O.GET JSR 5,O.GET ;LOOK AT FIRST CH. CMPB R0,#015 ;IS IT A CARR.RET? BEQ O.ELF5 ;IF YES, RETURN TO COMM. DEC. CMPB R0,#012 ;CHK FOR,qõ%(‰÷‹g wŠaÅ0ÄwŠ?÷å*”� *Ý÷ H檈`‰·Šwúÿ wüÿ*¸�wÂðª7Š"&‰…ÁÐÂåÀ¦fæñ*Ü�"ˆÁeÀ ÷� ͵ ñ•R͵ñ•%w*ž͵É•=Ñ C͵͵@ñ•Gæ³*$ž**‰±±Dþÿƒ`$‰ DÝ!X*Hž!ÿÂÃe $‰Íµ@ñ•G*‰÷e&*lž.·Štwêþ(‰wÖþÀʪÈEø ÈeÕ*�ž8 Á.ÁåfQ$Hà æˆ‡ R‰÷ k*´žqæ§   ·Šþ÷•ÿÿðf*Øžw*ÀR‰.ð÷‹ü·Š¥úÀ éw2&‰‰Áx* ¯ «ÂÃô©Ö‹b‰wæõÿÕœû쉰·Š�*.¯oúñÕÿ×-Ìû¯·ŠYú8À ×­<ü·Š�*R¯Eú/ËÆúÉÕ÷‹—û ÉÕ ñ¥ÿñ�…û’*v¯ÉÕV‰×­ü ɵñ¥ÿáñÕÿ±*š¯‰ÞɵÖñ¥ÿôÿ-HúnúÎwÿ÷‹Vû*¾¯€ŠÀe ÷Š*û3÷‹<û‰ ÷‹"ûõ·Š.ûÏ*â¯÷‹ûðb‰wõ÷µû÷‹û×-öù±áf*°×-îù ±Ý äù÷‹æú×b‰wÌô·Š}ùÀ˜ú�**° þÿ‡÷Fú‰wàýb‰w¬ôb‰w¨ôb‰*N°w¤ôb‰w/ LF BNE O.ELF7 ;IF NOT, ACCEPT N CHARACTERS CLRB O.SCRN ;MAKE SPACES INVISIABLE TO O.GET MOV O.XXX,R4 ;IF LINE FEED, OPEN NEXT AVAILABLE CH. INC R4 INC R2 MOV R4,R0 ;PRINT NEXT AVAIL BYTE MOV R2,-(SP) ;SAVE TO AVOID CLOBBERRING MOV R4,-(SP) ;BY O.RORA JSR 5,O.RORA MOV (SP)+,R4 MOV (SP)+,R2 MOVB #'\,R0 ;PRINT BACK SLASH JSR 5,O.FTYP JMP O.BYT O.ELF3: JSR 5,O.GET ;GET NXT CH. O.ELF7: JSR 5,O.CU ;CHK FOR ^U MOVB R0,(R5)+ DEC R4 ;REDUCE COUNT. IS IT ZERO? BEQ O.ELF2 0 æ0¨‰÷‹ð‰þ÷µâÛ*üža^Q À�~Àe € € € &* ŸÖ ·ŠE  q^¨ÐÍÌÍÁ ÔÁ ÒæÛ*DŸ4¨Ñ÷Šƒ·Š7Šy÷‹v»÷Šp¸·Ši‚*hŸ& æ�w‚÷‹Z·ŠTÖ wPÿÀ ‰÷‹ô*ŒŸ÷‹S7 .‡ ERRORS l °Ÿ “*´Ÿww*wfwjw wvw°wŠ÷«3*ØŸÂ@‰·ŠÞ÷òÄŒ±h‰‰>‰·Šwf‰úß*üŸ¬Ã¥ ÃU ºªÊ�f‰Ã¯–}ÃïŽyù  Áþ Áÿ@‰ Ä"¸Ã *6 üû2 ô÷Š˜úêb‰w–ôb‰w~ô7 Ì*r°*úß· $úÜ÷ú÷ú@‰h‰‰b‰÷ Y*–°Vôh‰‰÷ øù ÿ¥,<ú ÿ¥;4úÿ¥ ,ú¢*º°·ŠÝø ÷0úw„ª®ù‰B‰÷ ùæì©ˆ÷å.*Þ°èùÑ w ´ùëÿ¥,ôùÎw$ýb‰÷ ðób‰i*±‡Q$Q$Q$Q$Q$b‰wèóQ$b‰wâób‰wþ*&±Þób‰w¾ób‰wºób‰wºób‰wªó@‰%*J±7ŠWøwâþ÷Êø"ùÿ5Âø¿ ¼ø· ù·Š9ø7‹ü*n±¡ù&‰À•Á¦øÄH‰*‰‰÷•‡ù‡ÍŸTù‡¸*’±×¯Nù`ÿ¥ Dùÿ•?<ù‡Âòª�Ãʪ e*¶±÷ 2øæì©ˆ€ ÷ 3 ;BR IF YES BR O.ELF3 O.ELF2: MOV R5,-(SP) ;PRINT NXT AVAIL LOC: JSR 5,O.CRLF ;CR,LF MOVB #2,O.BW ;FORCE WORD MODE MOV (SP)+,R0 ;THEN, ADDRESS JSR 5,O.RORA ; O.ELF5: CLRB O.SCRN ;MAKE SPACE INVISABLE TO O.GET JMP O.DCD ;RETURN TO COMMAND DECODER O.ELF1: JMP O.ERR ; ; SPECIAL NAME HANDLER ; DEPENDS UPON THE EXPLICIT ORDER OF THE TWO TABLES O.TL AND O.UR0 O.REGT: JSR 5,O.GET ;SPECIAL NAME, GET ONE MORE CHARACTER MOV #O.TL,R4 ;TABLE START ADDRESS O.RSP: CMPB R0,(R4)+ ;IS THI4Âô©ÀÁe÷Švźª<‰÷‹„·Š w¾*Z ž O Ì Î+÷‹V. &‰Ä÷*J‰Ál*~ :Ä&‰÷÷¥ÿÿ,÷ ÄJ‰*¢ ÃÄÁðÂîH‰·Šî*‰·œ¯·Š *Æ ©ÎÎ% ÷‹ì÷¥ÿÿä·Š�P‰À<‰¹*ê ÷‹Î ÷ âO?Š ÷ Ø·Š˜öÁ®Î a™*¡÷Ѝ·ŠIwÞ ÷‹žEÀ߂נ0× 9‘*2¡ÃåÃ¥$Ãå Ã¥.ôÃ¥  Ž*V¡× A× Z × a× z ÃÅ ÿ�4ÃEÀÿ*z¡ÿ�· ·ŠÙ´f‰Å÷ D©Á«D‰ÂH*ž¡«Á®÷6Løæªˆ€ À ñµ@»*Ú±óÿ ñÅ@óÿfòÿÎEÿÎæ‚w,ûB‰ÁåÀ™*þ±yÑ KÀ ‰€¦¢·Üø‡&‰À¬øs*"²Àå&$&`  Šæ¼©ˆæ¼©ˆ7 Šø`‰Àm<*F²‚ø€ à• 7 xøû‚‡É fˆfˆ‡ót²üÿÜ*j²fˆæfˆ3 üÿæfˆ‡&‰Å«wLøŠ ,*޲ ŠÄ’»7ŠxøÃ« Š7 T÷7 `÷7 `÷7ŠÒ÷‰m*²²h‰‰÷‹]øÄâºÌ h‰Ì ·ŠDøÀ ·ŠÑöS*Ö²>‰Ä%âºêÄ%’»Â’ ·ŠµöKŠÄâºÝl*ú²*‰À�ø‡Å-Ð÷÷ Ê÷‹ŠÄ|»ÐÀ 7 ÜöèA*³ÄøºÈ7Šï÷f‰ÿ¥ ´÷ÿ¥7S THE CORRECT CHARACTER? BEQ O.SP ;JUMP IF YES CMP #O.TL+O.LG,R4 ;IS THE SEARCH DONE? BHI O.RSP ;BRANCH IF NOT BIC #177770,R0 ;MASK OFF OCTAL MOV R0,R4 O.SP1: ASL R4 ADD #O.UR0,R4 ;GENERATE ADDRESS INC R2 ;SET FOUND FLAG JMP O.SCAN ;GO FIND NEXT CHARACTER O.SP: SUB #O.TL-7,R4 ;GO FIND NEXT CHARACTER BR O.SP1 ;RETYPE OPENED WORD IN ANSCII (CONVERTED FROM MOD40) O.MOD: MOV O.CAD,R0 ;CALL MOD40 UNPACK MOV #O.ALF1,R1 JSR PC,UNPA00 ;ASCII CHARS GO INTO O.ALF1,2,3 MOV #'=,R0 ;PRIE· ·Œ7ЉB‰÷ ò·*¡æì©ˆ÷åÂf‰á �? ÿ(¸7 7 À¼*æ¡7ŠÙ7ŠÖ7 rÀ¸·žâ ·–Á” e* ¢0 þÿÀåù÷•¥÷ ±´÷Œ:°Àÿÿ7�©Ð*.¢‰÷Œ7 †7 Vw–7 ,7 ¨Àl&Ц*R¢SÐ74Ài‰æDˆæ>ˆÀFÀåè*v¢Ð€ w`æHæFæüf‰·Š@ ‰‘*š¢·ŠÁ·ŠÏÎÝ@ްεöÕÿ·Š©‰d*¾¢·Æ··Ö%¯,÷‹ ÷‹æ·Šƒw�*â¢wŠïɵ×ÿ·ŠoöEÀ•Á¼ÄH‰Aö*£÷‹µ%÷‹°åÿ¤€ÿ/ÊF ¬÷‡·Š×÷óÅ*B³· ž÷÷ŠÎ÷ׯ”÷ ÷‡÷ Š÷·Šº÷‡&‰Á«l*f³ÅȪ É‹� 5À�š÷    ¬«G*г0Š«À ¼ªÉ‹D‰� ÂD÷ÃB÷T‰Í  *®³wcV÷ ÷µR÷ñ÷U€6öÄ�F÷„ „ „ ÄEáÿ7‘U*Ò³B÷*‰À ‡Í èÂòõÃðõT‰À ó  ÃÝ÷a*ö³Ã¥ÿ à à à ÁàöÁàÑ wÈöwÆöß×½òö*´@Û×½êö×ò&‰Å«Ä«  B’ƒ`ŠE *>´à à à æà à ƒeòÔÅeW! «ë`‰&æ´*b´¦f¦v ‡…�‚ƒ„…Ö *‰‡&‰ÀŒ*†´NõÄáw Dõ †‚დ· 6õGNT "=" JSR R5,O.FTYP INCB O.SCRN ;SET FLAG TO ALLOW SPACES MOVB O.ALF1,R0 ;PRINT 1ST CHAR JSR R5,O.FTYP MOVB O.ALF2,R0 ;PRINT 2ND CH JSR R5,O.FTYP MOVB O.ALF3,R0 ;PRINT 3RD CH JSR R5,O.FTYP MOV #' ,R0 ;PRINT SPACE JSR R5,O.FTYP JSR R5,O.GET ;USER MUST NOW TYPE: CMPB R0,#' ;IF CHAR IS LESS THAN SPACE, BLT O.MOD1 ;PREPARE TO ENTER COMMAND DECODER MOVB R0,O.ALF1 ;OTHERWISE READ 3 CHAR JSR R5,O.GET ;2ND CH MOVB R0,O.ALF2 JSR R5,O.GET ;3RD CHAR CLRB O.SCRN ;RESTORE O.GET ""Dˆ """""""""@DDDDD@DDD€ˆˆˆˆˆ€ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆADDB C‘Ú¡K’›#Y`¡K’ ›£„:¡K’›¸¡K’›8}¡K’›8}¡K’  ›4dšé¡K’ �›4dhç¡K“b›t^¨ÔkQ H7›$DÿÿßÝÝÝÝÿÿîîªªªªˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ . = .+O.BKP+4 O.UIN: . = 8ŽO.BKP+4 . = O.TRTC+2 .END O.ODT ;END OF TAPE #4 I|ƒÿÂt÷‹z**£HÙñ¥ÿ‰‰°‰ÉÅ÷‹xÉÉÕ N£ ñ�kÉÕV‰Á@£À@£‡y*h£ww2æþ@‰7Š7ŠÅâªÄô©Ãöª Š0"Œ£ÂzªÀ�üx¥~¥Ò¥¦Â¥<¥ä¥”¥4¦è*¨£T¦l¦n¦€¦Æ¦Ì¦à¦ ‰·ŠWÌ•ÿÿA÷‹ªÁ*Ì£÷÷‹ŸóÌïÀÌåŒ 퇓#ê÷‹§ *ð£Ì5Àÿã(×­8ûÿQ×­0üÿM·Š J ‰÷ %*¤†·Šý ÷‹R÷¥ÿÿJ·Šç÷�;ïi*8¤P‰ú ‰·ŠÏ‰Ó+‰(·ŠÁÍË•‹*\¤ ‰·Š­‰÷ ÌŒ Œ Sÿ¥,âé‰Ô*€¤Jü‡7á0õæ¯*ª´B!ˆÖ w"õ ö · ö‡7á ö7áVõ€ W*δý†*‰ÀìõÈ2öàõà&öà ö‡€Àà€ 7 �*ò´õ7 ö÷ÆõÀ ‡ÀE€„à -úÿ 1-üÿ /*µ7þÿÜô7ìõ€ 7œõê‡ß0ÄåÛ*:µ!ׂ ×&‰Å⪠7жõÄúª & ×¢ïÿ5*^µÍÕ.‰ Á’W îÿ.‰_ ‰Îxô0‰‰‘*‚µwîÂÝhôw²‰·Šô2‰·Šûó<  Ù*¦µÂÕ@0‰w2‰·ŠáóD·ŠÙóæW ÷ÿ@*ʵÎW øÿ µ ·Š·óÂÅÂÕ ‚Õ *îµ÷‹õ ÷�õõ÷¥óÿºô·Š—ó7Šðô0‰.‰KTO NORMAL MOVB R0,O.ALF3 MOV #O.XXX,R0 ;TELL MOD40 TPACK TO PACK MOV #O.ALF1,R1 ;INTO O.XXX JSR PC,PACK00 MOV O.XXX,R4 ;MAKE IT APPEAR AS IF THE MOV #1,R2 ;PACKED # WAS TYPED JMP O.SCAN ;LET COMMAND DECODER DO THE REST O.MOD1: CLRB O.SCRN CLR R4 ;MAKE IT APPEAR CLR R2 ;AS IF NO NUMBERS WERE TYPED IN O.MOD2: JMP O.SCN1 ;TYPED IN ; "BACKARROW" HANDLER - OPEN INDEXED ON THE PC (BACK ARROW) O.ORPC: JSR 5,O.TCLS ;TEST WORD MODE AND CLOSE ADD @R2,R2 ;COMPUTE INC R2 INC R2 ; M巊≠·Š…Í×Ë•7 \7 VNS‹Š *¤¤‹Š·Jw ·Šá‰·Š[NSÿ¥,œÆ.‰÷ â*Ȥ–Sê÷ ŽSÿ¥,„º.‰·Š±wÐþã÷ Œ"*ì¤Ì5Àÿ·Š §æ`æ�ÿ¥#V‰÷r*¥÷ Z ÷ ø ‹Š‹Š÷ÚзŠj–%ÎUh‰.‰i*4¥Ã·X·  ·ŠPŒ÷ .Ì5øÿ·ŠÁ w3*X¥îþ·Š6§ ‰·Š«‰÷ ÌŒ Œ ‡ ‰W*|¥÷‹ò·Š� ‡÷‹Ì5üÿÌEüÿ·Šwc* ¥‡÷‹ƒ#÷%Ü©°÷ ”)椈÷‹Š÷­­*Ä¥=:æ�ˆ÷Ü©ˆ÷8ª„÷‚f÷¥z*è¥wž÷ VN Ú*¶ ‰·Š�ó2‰‰ÐÈ·Šqó‰Ð.‰Á’ ‰ù*6¶ÅθóW îÿ"¦µ@6µwðµq*Z¶wìµ€æ�³�Õi�Õ ͵&÷‹u*~¶ô#ÍÕÍÕÔ 7‘lô÷‹fôP÷•@ô-÷ç*¢¶8ô×­Pôþÿ3÷ *ô/ÍÕ0÷�=ô:ô7Š7ô4‰}*ƶáÍÕ7Ô 7‘*ô÷¥ÿÿ"ô€Îï@óá÷‹ô%÷‹e*ê¶ ô$Îo.óa÷äó�J‰ÄH‰÷•ÒóÍ*·÷•ÊóJ‰ƒÄ·óÁ´ó²óH‰Âöò· ®ó¶*2·Ä�Æó´xª÷e¶óÍÕÍÕ 4‰ÃºªÖ ƒ*V·Â5ÿ·Š;ò·Š ó÷‹±ó0‰×­’ó·Š!ò+O NEW ADDRESS O.PCS: MOV R2,O.CAD ;UPDATE CAD JMP O.OP2A ;GO FINISH UP O.ORAB: JSR 5,O.TCLS ;TEST WORD MODE AND CLOSE MOV @R2,R2 ;GET ABSOLUTE ADDRESS BR O.PCS O.ORRB: JSR 5,O.TCLS ;TEST AND CLOSE MOV @R2,R1 ;COMPUTE NEW ADDRESS MOVB R1,R1 ;EXTEND THE SIGN ASL R1 ;R2=2(@R2) INC R1 ; +2 INC R1 ADD R1,R2 ; +PC BR O.PCS O.TCLS: JSR PC,O.CLSE ;CLOSE CURRENT CELL CMP #2,O.BW ;ONLY WORD MODE ALLOWED BNE O.TCL1 ;BRANCH IF ERROR MOV O.CAD,R2 ;CURRENT ADDRESS IN R2 RTSQ · P÷<7Љ‰w² æRÙ ¦ˆwp½*¦w&‰À„ªŠÀ%œªü÷AŠ    ÄŸÒí*6¦¡+¡-· rf‰ÄŸ¼¡0<¡9B·Š4*Z¦`À5ø· T Äå0÷ Ö÷ øaB A @ ÷m*~¦00áÀ Á  à w€÷íM¤*¢¦wú 23 ‚÷ –· ÷ öwâ÷ ^÷e}*Ʀìõ¡.Ú÷ Ü×· Öµ¡EÑ÷Ø 7Š4*ê¦Ðf‰ÄŸ¡+¡-·Š´f‰ÄŸ¡0 ã*§¡9 Äå0à Ä`à à a·Š–í÷‹Š ÷`*2§†Ã†wHÿÀ ÷ p÷ $û€Ä÷ $榦R*z·*‰÷Š„ó‡Í Í Í Í Í Í .‰7Šfó7 @ó7 >ów.*ž·¶ý¦�ÎEøÿ�Õ‡æ×¢ýÿ×¢ûÿ×¢üÿÎ ^*Â·Î Ö ‡Â& ×¢óÿ×¢ôÿЊŽ ‚ŠÂÂÕ*æ·€Ö ‡ ÀÝ0òÀüñ ÷‹øòÀ ·ŠÛ* ¸“ñ7 äñ‡À€‡‰÷ ćÀ À € &‰Á7ŠÂ*.¸ãò7Šîñ Åô©Äø©Ãäª7Š´ò Š7ŠjòŠ÷‹ã*R¸¼ò 7жò÷‹°ò4·Š¯ò÷‹�òu\h‰‰YÀ�Dò *v¸Àe2Àe9ÀeÀe,Àe÷•v*š¸†ñèÀeÀe6‰àÀ f‰ ÌžÀ õ*¾¸f‰÷ž3ñf‰7ŠBò *Á‹6‰ŠŠ�ŠÀ ÐÆS R5 O.TCL1: TST (SP)+ O.TCL2: JMP O.ERR ;POP A WORD AND SHOW THE ERROR ; PROCESS S - SINGLE INSTRUCTION MODE O.SNGL: TSTB O.SMFD ;DONT REACT IF ; NOT TYPED BEQ O.TCL2 TST R2 ;SEE IF TURN ON OR TURN OFF BNE O.SI1 ;BRANCH IF TURNING IT ON CLRB O.S ;CLEAR THE FLAG JMP O.DCD ;CONTINUE THE SCAN O.SI1: MOVB #-1,O.S ;SET THE FLAG O.SI2: JMP O.DCD ;COMMA PROCESSING. N IN R4 IS THE RELOCATION REGISTER NUMBER ; O.COMM: INCB O.CMFD ;SET "COMMA FOUND" SWITCH TO ON TST R2 ;WAS A NUMBER U*V§f&÷ ¡÷ Å¡÷ ƒmB A @ ‚m*z§A @ �m@ €cÅ ïÄ åÆe÷å· m*ž§Î÷ ÷ Äû†÷e€4×-þÿ0ŠƒÐÊÛ*§BЊÐÁŠÀÝâÀ7 à÷ š÷5ÿÿà÷5¢*æ§Ö÷5ÎC B B A A @ … ‡7$* ¨œwš·˜÷–`‰÷ŠŸü Ì̇¡÷ J· N*.¨„&f¦æ¡÷ 8¡÷ 2&f¦æ÷ ù*R¨÷ ƒeB A @ ‚eA @ �e@ €e‡Ã B A @ ‡¡v¨    ‡*î¨Bað 4dªÆBa›ÿ¬ð¨ü¨î¤ª*©À¶í€ ú6ŽV*â¸Á5ÿÁ5ÿ 6‰f‰¬·�²ð÷¥øñ·ŠP*¹•ð÷‹¬ñ÷­¦ñåñ÷•þÿÞñ*‰÷‹ññ‡·Šëñ÷‹¼**¹âñ*‰ ÷µÒñ÷•Êñ‰‰·Š_ð�*N¹ÂU�À�µñÀ¥ÿ·Š?ðÂUÀ�¢ñÀµ@ Àµ *r¹êÀµ÷• ðÁ‹6‰&‰€�Á�|ñÀ x–¹ï*–¹¢¹º4ºfºvº†º÷‹hñ*÷‹NñÁµ Áµ!Á*º¹Áµ@÷‹6ñS÷•ÿÿ.ñG÷‹æð÷�5ñÞð÷­ *Þ¹-ñÖðD·Šñ Áµ >ÁµÁµ@8 c.÷‹\*º ñÁµÁµ@-Áµ ÷­œðïð&÷‹Öð#P*&º÷ŠÐð7Šˆð ã S÷‹ÔðÁµÁµ ÷‹*Jº®ðWTYPED IN? BEQ O.COM1 ;NO,USE CURRENT BIAS; I.E.,EXIT BIC #177770,R4 ;MAKE SURE THAT N IS LESS THAN 10(8) ASL R4 ;YES, LOCATE RELOC. REGISTER MOV O.RELT(R4),O.BIAS ;PUT BIAS IN O.BIAS O.COM1: JMP O.DCD1 ;GO BACK TO DECODER ;R PROCESSING. SEVERAL POSSIBILITIES- ; A. ;R WAS TYPED. ZERO OUT ALL RELOCATION REGISTERS ; B. ;NR WAS TYPED. ZERO OUT $NR ; C. REXP;NR WAS TYPED. SET $NR TO REXP ; D. NR WAS TYPED, WHILE A WORD WAS OPENED- ; COMPUTE (O.CAD)-($NR) AND PRINT IT ; O.REL: TSTB O.Y‡ ‰*6©&‰� Á Â.©�`w¾ÿæ ©æð¨ˆ*Z©ƒÃåÒE€úÉU€*‰æð¨ˆ÷5À˜ÿ æ÷*~©’ÿÎEÿÎæ‡w”*‰Îe‡LPQARDv*¢©MBINTU,EEž*Æ©GxðHxðÊ*ê©\M€MÜ€fð*ª¤x€Mô&µW4dl*2ªô&µW4dô&µWö ô&ð*VªµW Nô&µWµz%p:zªË ª Z÷‹fð÷­`ðŸð*‰ŠAŠwèýL Cå*‰*nº·Š+ïwüý÷ 8Œ †M`Á û÷ ( Ì îL ™*’º �ÃÍ A B Œ �ã� à ÷À € €u*¶º A€ @ ‡·ŠÓîÂU‡*/#@% ()"'+*Úº-!&; ,:=8‰Àìÿ7Îïs¬âºp€ ø8‰ Ì‹~*þºòÀ× 0× 9 Ã¥.çÌÕ€÷ʼnî& Õ*"»ÃEðÿE¦ÅEÿÎEÿÉ Ê ¦É É É`Ê Ê Še®*F» Ê` ÃE÷ÐUîÌÐ&“ÎE�ÿŽUÌÕp̵ˆ`*j»…�w†îV/·Š1î,8‰€ × 0× 9Ãå*Ž»8‰€ Ã¥$Ãå Ã¥.ò× A¦× Zþ*²» × a [SMFD ;TEST IF A SEMICOLON WAS TYPED BEQ O.REL1 ;NO CASE D TST R2 ;NOTHING OPENED, WAS N TYPED? BEQ O.REL2 ;N NOT TYPED O.REL4: BIC #177770,R4 ;GUARANTEE THAT N<10 ASL R4 ;N TYPED, CASE B OR C. SET $NR. TST R3 ;IF REXP NOT TYPED,CLEAR TO -1 BEQ O.RELA MOV R5,O.RELT(R4) ;IF REXP NOT TYPED, R5=0. CASE B. O.REL5: BR O.H1 ;EXIT TO DECODER O.REL2: TST R3 ;IF REXP TYPED, CASE B OR C WITH N=0 BEQ O.REL3 ;REXP NOT TYPED, N NOT TYPED, CLEAR ALL. BR O.REL4 ;REXP TYPED- N NOT TYPED O] PAGE m*ºª€ P•*Þª®“®“ª«*¬ÿ «3«¬¾D²ª±€²`³ ¸"¸$¸"°ì·0«ô·‚´Bµ¼v½$³Œ±ö¤ø»^´¾D«ú¤p´^¾¸ª·È· ·ÄºÜ»¿)X« ¥’±R±²(´¾0¾¿¥š¾¿l«p¾ ¥è´Ò´¥ ¥ò¤V²|´<©Æ&€«d²B³V³  m ¬-¬-*¬ PAL11R.OVR ,š¬§^× z�ÃÅ ÿ�ïÃEÀÿÿ�ï· ï*‰T*Ö»7�5&‰&ÀÁªÂ ªÃŸòîÄ‚ª‡#‘ë*ú»ËÅøËÕ0„ ÄE€„ „  ô‡&‰Å²îwU% *¼f w¤îDÔ À‰ –©Ê ŠÃD!ß*B¼†•œÒ— ®©ó‡÷`zî÷�VíÅeľíCÂ;*f¼÷‹Šî· †í($‰‰ÀzªÅeC”*мÄE÷‹eî À ÷ŠXî$‰· Ví÷ŠNîÃîÑ*®¼ƒ Ë• Ãe ÷îË• ã• ßÃôíã• ƒ Ë•K*Ò¼ ÷Fäíƒãà Þ÷­¤îí3÷ íÁì©ÃTªR*ö¼d‰÷‹äíW£ Õ‹M•Å u™æ Îež Í•N*½'ææì©ˆ×-_.RELA: MOV #-1,O.RELT(R4) BR O.H1 ;CLEAR RELOCATION REGISTERS. O.REL3: JSR 5,O.CLRR ;CLEAR RELOC REG'S BR O.SI2 ;GO BACK TO SCAN O.REL1: CMP O.BW,#2 ;CASE D, PRINT @O.CAD IN RELATIVE FORM BNE O.TCL2 ;ERROR IF BYTE OPENED CMP #0,R2 ; CHECK IF R BNE O.REL6 ; IF R JSR R5,O.LOC ; THEN FIND BEST N CMP R0,#-1 ;WAS A RELOC REG FOUND? BNE O.REL8 ;BR IF YES. ELSE-- MOV #'=,R0 ;TYPE "=" JSR 5,O.FTYP MOV @O.CAD,R0 ;TYPE ABS. VAL OF CONTENTS BR O.REL9 ;OF OPENED LOC. O.REL8: MOVaÔ¬xÖ¬u*­¶Îå¦Îe"‡b‰wÊ÷÷•ÿÏý7 ºûU*6­Æ®ý7 ˆü7 šü7 ºü7 ¢ü7 Æü7 `ü7 füæ$­ã*Z­æ!ˆæ­& æ!ˆÀ©Ð‹&.ˆ/ˆÖ *~­÷‹ý*Áð¨fˆf ˆ–%æ÷ |û…æü¨& l*¢­f ˆ„ –%×-Rû÷Hûðæü¨fˆ–%*Æ­Â.©ƒÃåDaúb‰w÷æüæüûˆ¯*ê­×­ü÷­ü�ýb‰L‰b‰wööæÚûæ^*®Ôûˆb‰wèö7 \ü7ŠÙü7ŠÔü7Šsû7Šyû7ŠÆüÉ*2®7Šwû7Šaû7Špû÷•Íü‰�&ÐSÐ æ›*V®Œûˆñµ@b‰wˆöbÐì8ÄÊìõªÂ$‰· Ÿ*>½¼ì7 ¶ìæ ªæì©ˆ7ŠŽí7  í÷‹Tì÷­(î$îN*b½÷Šíbí÷eNí7Š:ì`‰&‰Äzª ‰æ�rí÷‹·*†½‰í —".‹÷‹Dí΋4΋/÷%<*ª½*,ïW ̬†÷‹&í%&:‰w.÷%Øîæ`*νš¬æªˆæŠ«æªˆæªˆ,‰÷%ìîN‰¿*ò½@‰÷‹í÷‹àìÐ,‰Ö `‰� Š ŽŠ“&•‹e‹*¾À&‰ÁÖ¬Ñ3ÑÑÑ®ì`‰&‰Å�¤îaw‘Ï*:¾žîáÅeܬÄå UÄå•ÄåÕ`‰£*^¾÷µ@9îÎ2îwzó‡&‰÷fìÄJ‰ÁVìI*‚¾ÂTìÃjëÀÕ€ÄH‰·Šc R0,R4 ; PUT NEW N INTO R4 O.REL6: MOV @O.CAD,R1 ;OPENED VALUE IS THE MINUEND MOV R4,O.TMP1 ; SAVE N ASL R4 ;GET BIAS FROM $NR SUB O.RELT(R4),R1 ;BIAS IS THE SUBTRAHEND MOV #'=,R0 ;TYPE "=" JSR 5,O.FTYP MOV O.TMP1,R0 ; PREPARE INPUTE FOR O.FTYP ADD #60,R0 ; CONVERT N TO ANSCII JSR 5,O.FTYP ; TYPE N MOV #',,R0 ;PREPARE INPUT FOR O.FTYP JSR 5,O.FTYP ; TYPE COMMA CMP #0,R2 ; CHECK IF R BNE O.REL7 ; IF R MOV O.XXY,R0 ; THEN PREPARE INPUT FOR O.CADV O.REL7: MOV R1,R0 ;TYPEeñµ·Š!ûÄ• w*z®Q$BB`@ KËåá• wRü÷•I€üÊ¥ Ç*ž®÷e<VûÊ• 2¡ÿÿŠ”2‘ÿÿ2‘·ü ¤þ„*®À  ·ŠÏú‰À�èûÀe÷‹"ütwÒø*æ®÷‹üð÷‹ü·Š¥úÀ éw2&‰‰Áx* ¯ «ÂÃô©Ö‹b‰wæõÿÕœû쉰·Š�*.¯oúñÕÿ×-Ìû¯·ŠYú8À ×­<ü·Š�*R¯Eú/ËÆúÉÕ÷‹—û ÉÕ ñ¥ÿñ�…û’*v¯ÉÕV‰×­ü ɵñ¥ÿáñÕÿ±*š¯‰ÞɵÖñ¥ÿôÿ-HúnúÎwÿ÷‹Vû*¾¯€ŠÀe ÷Š*û3÷‹<û‰ Hì`‰æÖ¬æªˆæu*¦¾ªˆ‡ÅpëüªÂ¢¬Á ¬æÔ¬À ÷ìƒ*ʾF‰Àš¬Ð5ÐÐÐÐÐPŠ •*î¾ýK�KcËe�b€‡À�žíÀåa7�ÑëÀÌëR$¿‡‹b É’·€í· |í÷­bìâêÎe‡E,­ g THE VALUE (@O.CAD)-($NR) O.REL9: JSR 5,O.CADV BR O.DCD1 ; ;C PROCESSING. ; A. REXP;C WAS TYPED- PRINT THE VALUE OF REXP AND STORE IN $C ; B. ;C WAS TYPED- SAME AS C., BUT REXP=0 BY DEFAULT ; C. NO SEMICOLON HAS BEEN TYPED-REPLACE R4 WITH THE CONTENTS OF $C O.CNS: TSTB O.SMFD ;WAS A SEMICOLON TYPED? BNE O.CNS1 ;REXP TYPED PRIOR TO ; CASE A MOV O.CNST,R4 ;CASE C. REPLACE R4 WITH ($C) MOV #1,R2 BR O.SCAN ;RETURN TO SCAN MORE O.CNS1: MOV #'=,R0 ;PRINT VALUE MOV #2,O.BW JSR 5i÷‹"ûõ·Š.ûÏ*â¯÷‹ûðb‰wõ÷µû÷‹û×-öù±áf*°×-îù ±Ý äù÷‹æú×b‰wÌô·Š}ùÀ˜ú�**° þÿ‡÷Fú‰wàýb‰w¬ôb‰w¨ôb‰*N°w¤ôb‰w ô÷Š˜úêb‰w–ôb‰w~ô7 Ì*r°*úß· $úÜ÷ú÷ú@‰h‰‰b‰÷ Y*–°Vôh‰‰÷ øù ÿ¥,<ú ÿ¥;4úÿ¥ ,ú¢*º°·ŠÝø ÷0úw„ª®ù‰B‰÷ ùæì©ˆ÷å.*Þ°èùÑ w ´ùëÿ¥,ôùÎw$ýb‰÷ ðób‰i*±‡Q$Q$Q$Q$Q$b‰wèóQ$b‰wâób‰wþ*&±Þób‰w¾ób‰wºób‰wºób‰wk,O.FTYP MOV R5,R0 JSR 5,O.CADV MOV R5,O.CNST ;AND STORE IN $C O.H1: O.CNS2: JMP O.DCD ; ;MINUS PROCESSING ; O.MIN: INCB O.MINS ;SET MINUS FOUND SWITCH ON JMP O.DCD1 .EOT ;END OF TAPE #1 ; ;REPRINT LAST OPENED ADDRESS RELATIVELY. ; A. N! WAS TYPED--PRINT N,((O.CAD)-($NR)) ; B. ! WAS TYPED. FIND THE CLOSEST BIAS LESS THAN ; (O.CAD) AND USE ITS "N" -- THEN DO CASE A. ; O.RCMP: MOV #'=,R0 ;FIRST TYPE A "=" JSR 5,O.FTYP ;WAS N TYPED IN? TST R2 ;WAS N TYPED IN? mªó@‰%*J±7ŠWøwâþ÷Êø"ùÿ5Âø¿ ¼ø· ù·Š9ø7‹ü*n±¡ù&‰À•Á¦øÄH‰*‰‰÷•‡ù‡ÍŸTù‡¸*’±×¯Nù`ÿ¥ Dùÿ•?<ù‡Âòª�Ãʪ e*¶±÷ 2øæì©ˆ€ ÷ Løæªˆ€ À ñµ@»*Ú±óÿ ñÅ@óÿfòÿÎEÿÎæ‚w,ûB‰ÁåÀ™*þ±yÑ KÀ ‰€¦¢·Üø‡&‰À¬øs*"²Àå&$&`  Šæ¼©ˆæ¼©ˆ7 Šø`‰Àm<*F²‚ø€ à• 7 xøû‚‡É fˆfˆ‡ót²üÿÜ*j²fˆæfˆ3 üÿæfˆ‡&‰Å«wLøŠ ,*޲ ŠÄ’»7ŠxøÃ« Š7 T÷7 `÷7 `÷7ŠÒ÷‰moBNE O.RCM1 ;BRANCH IF YES JSR 5,O.LOC ;ELSE, FIND BEST N CMP R0,#-1 ;IF REL.REG FOUND, BNE O.RCM2 ; BR; ELSE-- MOV O.CAD,R0 ;PRINT ADDR IN ABS. JSR 5,O.CADV BR O.DCD1 O.RCM2: ADD #060,R0 ;CONVERT N TO ANSCII JSR 5,O.FTYP ;TYPE N MOV #',,R0 ;TYPE COMMA JSR 5,O.FTYP MOV O.BW,-(SP) ;SAVE O.BW MOV #2,O.BW ;ARTIFCIALLY SET MODE FOR WORDS MOV O.XXY,R0 ;TYPE RELATIVE AMOUNT O.RCM3: JSR 5,O.CADV MOV (SP)+,O.BW ;RESTORE MODE BR O.DCD1 ;EXIT TO SCAN ROUTINE O.RCM1: MOV R4,R0 ;q*²²h‰‰÷‹]øÄâºÌ h‰Ì ·ŠDøÀ ·ŠÑöS*Ö²>‰Ä%âºêÄ%’»Â’ ·ŠµöKŠÄâºÝl*ú²*‰À�ø‡Å-Ð÷÷ Ê÷‹ŠÄ|»ÐÀ 7 ÜöèA*³ÄøºÈ7Šï÷f‰ÿ¥ ´÷ÿ¥ ¬÷‡·Š×÷óÅ*B³· ž÷÷ŠÎ÷ׯ”÷ ÷‡÷ Š÷·Šº÷‡&‰Á«l*f³ÅȪ É‹� 5À�š÷    ¬«G*г0Š«À ¼ªÉ‹D‰� ÂD÷ÃB÷T‰Í  *®³wcV÷ ÷µR÷ñ÷U€6öÄ�F÷„ „ „ ÄEáÿ7‘U*Ò³B÷*‰À ‡Í èÂòõÃðõT‰À ó  ÃÝ÷a*ö³Ã¥ÿ à à à ÁàöÁàÑ wÈöwÆöß×½òösGET N. THIS CODE SIMULATES O.LOC ASL R0 ;TIMES 2 FOR INDEXING MOV O.CAD,O.XXY SUB O.RELT(R0),O.XXY ;COMPUTE DIFFERENCE ASR R0 ;RESTORE N. BR O.RCM2 ;PRINT RESULTS ; ;FILL MEMORY WORDS. LIMITS ARE THE SEARCH LIMITS. ; O.FILL: MOV #2,O.BW ;SET MODE TO "OPEN WORD" O.FIL1: TSTB O.SMFD ;DONT REACT UNLESS ";" WAS TYPED BEQ O.ERR ;IF NOT TYPED, ERROR. MOV O.CNST, R0 ;ACTUAL VALUE MOV O.LOW,R4 ;USE SEARCH LIMITS FOR MOV O.HI,R3 ; FILL LIMITS. JSR 5,O.ST BR O.DCD ;EXIT ; ;INITIu*´@Û×½êö×ò&‰Å«Ä«  B’ƒ`ŠE *>´à à à æà à ƒeòÔÅeW! «ë`‰&æ´*b´¦f¦v ‡…�‚ƒ„…Ö *‰‡&‰ÀŒ*†´NõÄáw Dõ †‚დ· 6õü‡7á0õæ¯*ª´B!ˆÖ w"õ ö · ö‡7á ö7áVõ€ W*δý†*‰ÀìõÈ2öàõà&öà ö‡€Àà€ 7 �*ò´õ7 ö÷ÆõÀ ‡ÀE€„à -úÿ 1-üÿ /*µ7þÿÜô7ìõ€ 7œõê‡ß0ÄåÛ*:µ!ׂ ×&‰Å⪠7жõÄúª & ×¢ïÿ5*^µÍÕ.‰ Á’W îÿ.‰_ ‰Îxô0‰‰‘*wALIZE MEMORY BYTES. ; O.INIT: MOV #1,O.BW BR O.FIL1 ;LET O.FILL DO THE WORK ; COMMAND DECODER - ODT11X ; ALL REGISTERS MAY BE USED (R0-R5), O.ERR: MOV #'?,R0 ; ? TO BE TYPED JSR 5,O.FTYP ; OUTPUT ? O.DCD: CLR O.BW ;CLOSE ALL JSR 5,O.CRLS ;TYPE * O.DCD3: CLRB O.SMFD ;SEMICOLON FOUND FLAG CLRB O.CMFD ;COMMA FOUND FLAG CLRB O.MINS ;MINUS SIGN FOUND FLAG O.DCD2: CLR R3 ;R3 IS A SAVE REGISTER FOR R2 CLR R5 ;R5 IS A SAVE REGISTER FOR R4 O.DCD1: CLR R4 ; R4 CONTAIy‚µwîÂÝhôw²‰·Šô2‰·Šûó<  Ù*¦µÂÕ@0‰w2‰·ŠáóD·ŠÙóæW ÷ÿ@*ʵÎW øÿ µ ·Š·óÂÅÂÕ ‚Õ *îµ÷‹õ ÷�õõ÷¥óÿºô·Š—ó7Šðô0‰.‰ Ú*¶ ‰·Š�ó2‰‰ÐÈ·Šqó‰Ð.‰Á’ ‰ù*6¶ÅθóW îÿ"¦µ@6µwðµq*Z¶wìµ€æ�³�Õi�Õ ͵&÷‹u*~¶ô#ÍÕÍÕÔ 7‘lô÷‹fôP÷•@ô-÷ç*¢¶8ô×­Pôþÿ3÷ *ô/ÍÕ0÷�=ô:ô7Š7ô4‰}*ƶáÍÕ7Ô 7‘*ô÷¥ÿÿ"ô€Îï@óá÷‹ô%÷‹e*ê¶ ô${NS THE CONVERTED OCTAL CLR R2 ; R2 IS THE NUMBER FOUND FLAG O.SCAN: JSR 5,O.GET ;GET A CHAR, RETURN IN R0 O.SCN1: CMP #'0,R0 ;COMPARE WITH ASCII 0 BHI O.CLGL ;CHECK LEGALITY IF NON-NUMERIC CMP #'7,R0 ;COMPARE WITH ASCII 7 BLO O.CLGL ;CHECK LEGALITY IF NOT OCTAL BIC #177770,R0 ;CONVERT TO BCD ASL R4 ; MAKE ROOM ASL R4 ; IN ASL R4 ; R4 ADD R0,R4 ;PACK THREE BITS IN R4 INC R2 ;R2 HAS NUMERIC FLAG BR O.SCAN ; AND TRY AGAIN O.CLGL: CLR R1 ;CLEAR INDEX O.LGL1: CMPB R}Îo.óa÷äó�J‰ÄH‰÷•ÒóÍ*·÷•ÊóJ‰ƒÄ·óÁ´ó²óH‰Âöò· ®ó¶*2·Ä�Æó´xª÷e¶óÍÕÍÕ 4‰ÃºªÖ ƒ*V·Â5ÿ·Š;ò·Š ó÷‹±ó0‰×­’ó·Š!ò+*z·*‰÷Š„ó‡Í Í Í Í Í Í .‰7Šfó7 @ó7 >ów.*ž·¶ý¦�ÎEøÿ�Õ‡æ×¢ýÿ×¢ûÿ×¢üÿÎ ^*Â·Î Ö ‡Â& ×¢óÿ×¢ôÿЊŽ ‚ŠÂÂÕ*æ·€Ö ‡ ÀÝ0òÀüñ ÷‹øòÀ ·ŠÛ* ¸“ñ7 äñ‡À€‡‰÷ ćÀ À € &‰Á7ŠÂ*.¸ãò7Šîñ Åô©Äø©Ãäª7Š´ò Š7ŠjòŠ÷‹ã*R¸¼ò 7жò÷‹0,O.LGCH(R1) ;DO THE CODES MATCH? BEQ O.LGL2 ;JUMP IF YES INC R1 ; SET INDEX FOR NEXT SEARCH CMP R1,#O.CLGT ;IS THE SEARCH DONE? BHIS O.ERR ; OOPS! BR O.LGL1 ;RE-LOOP O.LGL2: TSTB O.MINS ;IF MINUS WAS NOT TYPED BEQ O.LGL4 ;DO NOT NEGATE K NEG R4 ;OTHERWISE, TAKE 2'S COMPLEMENT. O.LGL4: TSTB O.CMFD ;IF A COMMA NOT TYPED, BEQ O.LGL3 ;SKIP NEXT INSTRUCTION. ADD O.BIAS,R4 ;OTHERWISE, ADD RELOC. BIAS TO (R4) O.LGL3: CLRB O.MINS ;REINITIALIZE MINUS-TYPED SWITCH FOR NXT SCAN A�°ò4·Š¯ò÷‹�òu\h‰‰YÀ�Dò *v¸Àe2Àe9ÀeÀe,Àe÷•v*š¸†ñèÀeÀe6‰àÀ f‰ ÌžÀ õ*¾¸f‰÷ž3ñf‰7ŠBò *Á‹6‰ŠŠ�ŠÀ ÐÆ*â¸Á5ÿÁ5ÿ 6‰f‰¬·�²ð÷¥øñ·ŠP*¹•ð÷‹¬ñ÷­¦ñåñ÷•þÿÞñ*‰÷‹ññ‡·Šëñ÷‹¼**¹âñ*‰ ÷µÒñ÷•Êñ‰‰·Š_ð�*N¹ÂU�À�µñÀ¥ÿ·Š?ðÂUÀ�¢ñÀµ@ Àµ *r¹êÀµ÷• ðÁ‹6‰&‰€�Á�|ñÀ x–¹ï*–¹¢¹º4ºfºvº†º÷‹hñ*÷‹NñÁµ Áµ!Á*º¹Áµ@÷‹6ñS÷•ÿÿƒSL R1 ;MULTIPLY BY TWO JMP @O.LGDR(R1) ;GO TO PROPER ROUTINE O.LGDR: O.SEMI ; ; SEMICOLON O.WRD ; / OPEN WORD O.BYT ; \ OPEN BYTE -BACK SLASH O.CRET ; CARRIAGE RETURN CLOSE O.REGT ; $ REGISTER OPS O.GO ; G GO TO ADDRESS K O.OP1 ; MODIFY, CLOSE, OPEN NEXT O.ORPC ; "BACKARROW" OPEN RELATED, INDEX - PC (BACK ARROW) O.OLD ; < RETURN TO OLD SEQUENCE AND OPEN O.BACK ; ^ OPEN PREVIOUS (UP ARROW) O.COMM ; , COMMA. SEPERATES REL.REG. FROM INCREMENT O.OFS….ñG÷‹æð÷�5ñÞð÷­ *Þ¹-ñÖðD·Šñ Áµ >ÁµÁµ@8 c.÷‹\*º ñÁµÁµ@-Áµ ÷­œðïð&÷‹Öð#P*&º÷ŠÐð7Šˆð ã S÷‹ÔðÁµÁµ ÷‹*Jº®ð÷‹fð÷­`ðŸð*‰ŠAŠwèýL Cå*‰*nº·Š+ïwüý÷ 8Œ †M`Á û÷ ( Ì îL ™*’º �ÃÍ A B Œ �ã� à ÷À € €u*¶º A€ @ ‡·ŠÓîÂU‡*/#@% ()"'+*Úº-!&; ,:=8‰Àìÿ7Îïs¬âºp€ ø8‰ Ì‹~*þºòÀ× 0× 9 Ã¥.çÌÕ€÷ʼnî& Õ*"»ÃEðÿE¦ÅEÿÎEÿÉ Ê ‡T ; O OFFSET O.WSCH ; W SEARCH WORD O.EFF ; E SEARCH EFFECTIVE ADDRESS O.BKPT ; B BREAKPOINTS O.PROC ; P PROCEED O.ORAB ; @ OPEN RELATED, ABSOLUTE O.ORRB ; > OPEN RELATED, REL. BRANCH O.SNGL ; S SINGLE INSTRUCTION MODE O.REL ; R RELOCATION PROCESSING O.CNS ; C CONSTANT REGISTER PROCESSING O.MIN ; - MINUS, NEGATES NUMBER TYPED IN O.FILL ; F FILL MEMORY WORDS FROM THE CONSTANT REGISTER O.INIT ; I INITIALIZE MEMORY BYTES FROM THE CONSTANT REGISTER O.RCMP ; ! ‰¦É É É`Ê Ê Še®*F» Ê` ÃE÷ÐUîÌÐ&“ÎE�ÿŽUÌÕp̵ˆ`*j»…�w†îV/·Š1î,8‰€ × 0× 9Ãå*Ž»8‰€ Ã¥$Ãå Ã¥.ò× A¦× Zþ*²» × a × z�ÃÅ ÿ�ïÃEÀÿÿ�ï· ï*‰T*Ö»7�5&‰&ÀÁªÂ ªÃŸòîÄ‚ª‡#‘ë*ú»ËÅøËÕ0„ ÄE€„ „  ô‡&‰Å²îwU% *¼f w¤îDÔ À‰ –©Ê ŠÃD!ß*B¼†•œÒ— ®©ó‡÷`zî÷�VíÅeľíCÂ;*f¼÷‹Šî· †í($‰‰ÀzªÅeC”*мÄE÷‹eî À ÷ŠXî$‰· Ví÷Š‹PRINT CURRENT OPENED ADDRESS IN REL. FORM O.MOD ; X RETYPE OPENED CONTENTS, MOD40 O.ALF ; A ACCEPT ASCII INPUT O.CTLC ; ^C EXIT TO MONITOR O.LGL = .-O.LGDR ;LGL MUST EQUAL 2X CHLGT ALWAYS ; SEMI-COLON PROCESSOR O.SEMI: MOV R2,R3 ;A SEMI-COLON HAS BEEN RECEIVED MOV R4,R5 ;NUMERIC FLAG TO R3, CONTENTS TO R5 INCB O.SMFD ;SET SEMICOLON FOUND FLAG CLRB O.CMFD ;RESET COMMA FOUND FLAG BR O.DCD1 ;GO BACK FOR MORE ; PROCESS / AND \ - OPEN WORD OR BYTE ;INPUT - IF R2 IS NON-ZERO A NEW �NîÃîÑ*®¼ƒ Ë• Ãe ÷îË• ã• ßÃôíã• ƒ Ë•K*Ò¼ ÷Fäíƒãà Þ÷­¤îí3÷ íÁì©ÃTªR*ö¼d‰÷‹äíW£ Õ‹M•Å u™æ Îež Í•N*½'ææì©ˆ×-Ðì8ÄÊìõªÂ$‰· Ÿ*>½¼ì7 ¶ìæ ªæì©ˆ7ŠŽí7  í÷‹Tì÷­(î$îN*b½÷Šíbí÷eNí7Š:ì`‰&‰Äzª ‰æ�rí÷‹·*†½‰í —".‹÷‹Dí΋4΋/÷%<*ª½*,ïW ̬†÷‹&í%&:‰w.÷%Øîæ`*νš¬æªˆæŠ«æªˆæªˆ,‰÷%ìîN‰¿*ò½@‰÷‹í÷‹àìÐ,‰Ö `‰� Š ŽŠ“&•�REXP HAS BEEN TYPED IN ;INPUT - -ADDRESS OF WORD TO BE OPENED IS IN R4 O.WRD: MOV #2,O.BW ;OPEN WORD BR O.WB1 O.BYT1: ROL R4 ;GET THE ADDRESS BACK O.BYT: MOV #1,O.BW ;OPEN BYTE O.WB1: TST R2 ;GET VALUE IF R2 IS NON-ZERO BEQ O.WRD1 ;SKIP OTHERWISE - REOPEN PREVIOUS LOCATION MOV R4,O.DOT ;PUT VALUE IN DOT MOV R4,O.CAD ; ALSO IN CAD O.WRD1: CMP #1,O.BW ;CHECK BYTE MODE BEQ O.WRD2 ;JUMP IF BYTE MOV O.CAD,R4 ASR R4 ;MOVE ONE BIT TO CARRY BCS O.BYT1 ;JUMP IF ODD ADDRESS MOV @‹e‹*¾À&‰ÁÖ¬Ñ3ÑÑÑ®ì`‰&‰Å�¤îaw‘Ï*:¾žîáÅeܬÄå UÄå•ÄåÕ`‰£*^¾÷µ@9îÎ2îwzó‡&‰÷fìÄJ‰ÁVìI*‚¾ÂTìÃjëÀÕ€ÄH‰·ŠHì`‰æÖ¬æªˆæu*¦¾ªˆ‡ÅpëüªÂ¢¬Á ¬æÔ¬À ÷ìƒ*ʾF‰Àš¬Ð5ÐÐÐÐÐPŠ •*î¾ýK�KcËe�b€‡À�žíÀåa7�ÑëÀÌëR$¿‡‹b É’·€í· |í÷­bìâêÎe‡EÒ“”“O.CAD,R0 ;GET CONTENTS OF WORD BR O.WRD3 O.WRD2: MOVB @O.CAD,R0 ;GET CONTENTS OF BYTE O.WRD3: JSR 5,O.CADV ;GO GET AND TYPE OUT @CAD CMP #1,O.BW ;CHECK IF BYTE MODE. BNE O.DCD3 ;IF NOT WE'RE DONE. ELSE: MOVB #'=,R0 ;TYP "=" AND THEN THE ASCII BYTE JSR 5,O.FTYP MOVB @O.CAD,R0 JSR 5,O.FTYP MOVB #' ,R0 JSR 5,O.FTYP JMP O.DCD3 ;GO BACK TO DECODER ; PROCESS CARRIAGE RETURN O.CRET: JSR PC,O.CLSE ;CLOSE LOCATION O.DCDA: JMP O.DCD ;RETURN TO DECODER O.ERR3: JMP O.ERR ; INTERMED—IATE HELP ; PROCESS , OPEN NEXT WORD O.OLD: INCB O.SEQ ;SET FLAG TO LATER RESTORE CAD O.OP1: TST O.BW ; RECEIVED O.ERR2: BEQ O.ERR3 ;ERROR IF NOTHING IS OPEN JSR PC,O.CLSE ;CLOSE PRESENT CELL TST O.SEQ ;SHOULD CAD BE RESTORED? BEQ O.OP5 ;BRANCH IF NOT MOV O.DOT,O.CAD ;RESTORE PREVIOUS SEQUENCE CLRB O.SEQ ;RESET FLAG; NO LONGER NEEDED O.OP5: ADD O.BW,O.CAD ;GENERATE NEW ADDRESS O.OP2: MOV O.CAD,O.DOT ;INITIALIZE DOT O.OP2A: JSR 5,O.CRLF ; MOV O.BW,-(SP) ;SAVE B›W MOV #2,O.BW ;SET TO TYPE FULL WORD ADDRESS MOV O.CAD,R0 ;NUMBER TO TYPE JSR 5,O.RORA ; CHECK FORMAT MOV @SP,O.BW ;RESTORE BW CMP #1,(SP)+ ;IS IT BYTE MODE? BEQ O.OP3 ;JUMP IF YES MOV #'/,R0 ;TYPE A / O.OP4: JSR 5,O.FTYP BR O.WRD1 ;GO PROCESS IT O.OP3: MOV #'\,R0 ;TYPE A \ BR O.OP4 ; PROCESS ^, OPEN PREVIOUS WORD O.BACK: TST O.BW ; ^ RECEIVED BEQ O.ERR2 ;ERROR IF NOTHING OPEN JSR PC,O.CLSE SUB O.BW,O.CAD ;GENERATE NEW ADDRESS BR O.OP2 ;GO DO THE REST ; B HANDŸLER - SET AND REMOVE BREAKPOINTS O.BKPT: MOV #O.TRTC,R0 ASL R4 ;MULTIPLY NUMBER BY TWO TST R3 BEQ O.REMB ;IF R3 IS ZERO GO REMOVE BREAKPOINT ASR R5 ;GET ONE BIT TO CARRY BCS O.ERR1 ;BADNESS IF ODD ADDRESS ASL R5 ;RESTORE ONE BIT ADD #O.ADR1,R4 TST R2 BNE O.SET1 ;JUMP IF SPECIFIC CELL O.SET: CMP R0,@R4 ;IS THIS CELL FREE? BEQ O.SET1 ;JUMP IF YES CMP R4,#O.BKP+O.ADR1 ;ARE WE AT THE END OF OUR ROPE BHIS O.ERR1 ;YES, THERE IS NOTHING FREE TST (R4)+ ;INCREMENT BY TWO B£R O.SET O.SET1: CMP R4,#O.BKP+O.ADR1 BHI O.ERR1 ;ERROR IF TOO LARGE MOV R5,@R4 ;SET BREAKPOINT BR O.DCDA ;RETURN O.REMB: TST R2 BEQ O.RALL ;GO REMOVE ALL CMP R4,#O.BKP BHI O.ERR1 ;JUMP IF NUMBER TOO LARGE MOV R0,O.ADR1(R4) ;CLEAR BREAKPOINT CLR O.CT(R4) ;CLEAR COUNT ALSO O.DCDB: BR O.DCDA O.RALL: CLR R4 MOV #O.TRTC,R0 O.RM1: CMP R4,#O.BKP+2 ;ALL DONE? BHI O.DCDA ;JUMP IF YES MOV R0,O.ADR1(R4) ;RESET BKPT MOV #TRT,O.UIN(R4) ;RESET CONTENTS OF TABLE CLR O.CT(R4) ;CLEAR C§OUNT TST (R4)+ ;INCREMENT BY TWO BR O.RM1 ; PROCESS O, COMPUTE OFFSET O.OFST: CMP #2,O.BW ;CHECK WORD MODE BNE O.ERR1 ;ERROR IF NOT CORRECT MODE MOV #' ,R0 ;TYPE ONE BLANK JSR 5,O.FTYP ; AS A SEPARATOR TST R3 ;WAS SEMI-COLON TYPED? BEQ O.ERR1 ;NO, CALL IT AN ERROR O.OF2: SUB O.CAD,R5 ;COMPUTE DEC R5 DEC R5 ; 16 BIT OFFSET MOV R5,R0 JSR 5,O.CADV ;NUMBER IN R0 - WORD MODE MOV R5,R0 ASR R0 ;DIVIDE BY TWO BCS O.OF1 ;ERROR IF ODD CMP #-200,R0 ;COMPARE WITH -200« BGT O.OF1 ;DO NOT TYPE IF OUT OF RANGE CMP #177,R0 ;COMPARE WITH +177 BLT O.OF1 ;DO NOT TYPE IF OUT OF RANGE DEC O.BW ;SET TEMPORARY BYTE MODE JSR 5,O.CADV ;NUMBER IN R0 - BYTE MODE INC O.BW ;RESTORE WORD MODE O.OF1: JMP O.DCD3 ;ALL DONE O.ERR1: JMP O.ERR ;INTERMEDIATE HELP .EOT ;END OF TAPE #2 ; ; SEARCHES - $MSK HAS THE MASK ; $MSK+2 HAS THE FWA ; $MSK+4 HAS THE LWA O.EFF: INC R1 ;SET EFFECTIVE SEARCH BR O.WDS O.WSCH: CLR R1 ;SET WORD SEARCH O.WDS: TST R¯3 ;CHECK FOR OBJECT FOUND BEQ O.ERR1 ;ERROR IF NO OBJECT MOV #2,O.BW ;SET WORD MODE MOV O.MSK+2,R2 ;SET ORIGIN MOV O.MSK,R4 ;SET MASK COM R4 O.WDS2: CMP R2,O.MSK+4 ; IS THE SEARCH ALL DONE? BHI O.DCDB ; YES MOV @R2,R0 ; GET OBJECT TST R1 ;NO BNE O.EFF1 ;BRANCH IF EFFECTIVE SEARCH MOV R0,-(SP) MOV R5,R3 ;EXCLUSIVE OR BIC R5,R0 ; IS DONE BIC (SP)+,R3 ; IN A VERY BIS R0,R3 ; FANCY MANNER HERE BIC R4,R3 ;AND RESULT WITH MASK O.WDS3: BNE O.WDS4 ;RE-LOOP IF NO M³ATCH MOV R4,-(SP) ;REGISTERS R2,R4, AND R5 ARE SAFE MOV R1,-(SP) ;SAVE R1 MOV R2,-(SP) ;SAVE R2 MOV R3,-(SP) JSR 5,O.CRLF MOV R2,R0 ;GET READY TO TYPE JSR 5,O.RORA ; CHECK FORMAT MOV #'/,R0 ;SLASH TO R0 JSR 5,O.FTYP ;TYPE IT MOV @R2,R0 ;GET CONTENTS JSR 5,O.CADV ; TYPE CONTENT MOV (SP)+,R3 MOV (SP)+,R2 ;RESTORE R2 MOV (SP)+,R1 ;RESTORE R1 MOV (SP)+,R4 ; RESTORE R4 ;HAS CTRL/U BEEN STRUCK? JSR R5,O.CU ;CHECK FOR ^U O.WDS4: TST (R2)+ ;INCREMENT TO NEXT CELL AND B·R O.WDS2 ; RETURN O.EFF1: CMP R0,R5 ; IS (X)=K? BEQ O.WDS3 ;TYPE IF EQUAL MOV R0,R3 ;(X) TO R3 ADD R2,R3 ;(X)+X INC R3 INC R3 ;(X)+X+2 CMP R3,R5 ;IS (X)+X+2=K? BEQ O.WDS3 ;BRANCH IF EQUAL BIC #177400,R0 ;WIPE OUT EXTRANEOUS BITS MOVB R0,R0 CCC ASL R0 ;MULTIPLY BY TWO INC R0 INC R0 ADD R2,R0 ;ADD PC CMP R0,R5 ;IS THE RESULT A PROPER REL. BRANCH? BR O.WDS3 ; PROCESS G - GO O.GO: TSTB O.SMFD ;WAS ";" TYPED? BEQ O.ERR1 ;BR IF NOT TYPED TST R3 ;WAS K; »TYPED? BEQ O.ERR1 ; TYPE ? IF NOT MOVB #O.BKP+3,O.P ;CLEAR PROCEED ASR R5 ;CHECK LOW ORDER BIT BCS O.ERR1 ;ERROR IF ODD NUMBER ASL R5 ;RESTORE WORD MOV R5,O.UPC ;SET UP NEW PC MOVB #O.STM,ST ;SET HIGH PRIORITY JSR 5,O.RSTT ;RESTORE TELETYPE O.TBIT: CLRB O.T ;CLEAR BIS #O.TBT,O.UST ; BOTH T-BIT FLAGS TSTB O.S ;SEE IF WE NEED A T BIT BNE O.GO2 ;IF NOT GO NOW BIC #O.TBT,O.UST ;SET TH T BIT O.GO1: JSR 5,O.RSB ;RESTORE BREAKPOINTS O.GO2: JSR 0,O.RSR ;RESTORE REGIS¿TERS MOV O.UST,-(SP) ; AND STATUS MOV O.UPC,-(SP) ; AND PC NOP ; CHANGE TO HALT FOR DEBUGGING MOV O.UST,-(SP) ; MOV IN STATUS FIRST W/O T BIT BIC #O.TBT,(SP) ; SO INTERRUPTS CAN HAPPEN BEFORE MOV (SP)+,ST ; RTT TURNS ON THE T BIT. O.RTIT: RTI ; CHANGED TO RTT WHEN RUNNING ON /45 ; PROCESS P - PROCEED ; ONLY ALLOWED AFTER A BREAKPOINT O.PROC: TSTB O.SMFD ;WAS ";" TYPED? BEQ O.ERR1 ;BR IF NOT TYPED MOVB O.P,R0 TSTB R0 ;CHECK LEGALITY OF PROCEED BLT O.ERR1 ;NOT LÃEGAL TST R2 ;CHECK FOR ILLEGAL COUNT BNE O.ERR1 ;JUMP IF ILLEGAL TST R3 ;WAS COUNT SPECIFIED? BEQ O.PR1 ;NO MOV R5,O.CT(R0) ;YES, PUT AWAY COUNT O.PR1: MOVB #O.STM,ST ;FORCE HIGH PRIORITY JSR 5,O.RSTT ;RESTORE TTY O.C1: CMPB O.P,#O.BKP ;SEE IF A REAL ONE OR A FAKE BGT O.TBIT ;BRANCH IF FAKE TSTB O.S ;SEE IF SINGLE INSTRUCTION MODE BNE O.TBIT ;IF SO EXIT NOW MOVB #O.STM,ST ;SET HIGH PRIORITY INCB O.T ;SET T-BIT FLAG BIS #O.TBT,O.UST ;SET T-BIT BR O.GO2 ; BREAKPOINT HAÇNDLER O.BRK: MOV (SP)+,O.UPC ;PRIORITY IS 7 UPON ENTRY MOV (SP)+,O.UST ;SAVE STATUS AND PC MOVB #O.BKP+3,O.P ;TELL ;P THAT WE CAN CONTINUE O.BK1: JSR 0,O.SVR ;SAVE VARIOUS REGISTERS TSTB O.T ;CHECK FOR T-BIT SET BNE O.TBIT ;JUMP IF SET JSR 5,O.REM ;REMOVE BREAKPOINTS TSTB O.PRI ;CHECK IF PRIORITY BPL O.BK2 ; IS AS SAME AS USER PGM MOVB O.UST,R5 ;PICK UP USER UST IF SO BR O.BK3 O.BK2: MOVB O.PRI,R5 ;OTHERWISE PICK UP ACTUAL PRIORITY CCC ;CLEAR CARRY RORB R5 ;SHIFT LOW ORDEËR BITS RORB R5 ; INTO RORB R5 ; HIGH ORDER RORB R5 ; POSITION O.BK3: BIC #O.TBT,R5 ;CLEAR POSSIBLE T BIT (S/I MODE) MOVB R5,ST ;PUT THE STATUS AWAY WHERE IT BELONGS MOV O.UPC,R5 ;GET PC, IT POINTS TO THE TRT TSTB O.S ;SEE IF IT WAS SINGLE INSTRUCTION FUN BMI O.B4 ;IF SO HANDLE THERE TST -(R5) MOV R5,O.UPC MOV #O.BKP,R4 ;GET A COUNTER O.B1: CMP R5,O.ADR1(R4) ;COMPARE WITH LIST BEQ O.B2 ;JUMP IF FOUND DEC R4 DEC R4 BGE O.B1 ;RE-LOOP UNTIL FOUND JSR 5,O.SVTT ;ÏSAVE TELETYPE STATUS JSR 5,O.CRLF MOV #O.BD,R4 ;ERROR, NOTHING FOUND MOV #O.BD+1,R3 JSR 5,O.TYPE ;OUTPUT "BE" FOR BAD ENTRY MOV R5,R0 ADD #2,O.UPC ;POP OVER THE ADJUSTMENT ABOVE BR O.B3 ; OR CONTINUE O.B4: MOVB #O.BKP+2,R4 ;SET BREAK POINT HIGH + 1 MOV R5,O.ADR1(R4) ;STORE NEXT PC VALUE FOR TYPE OUT BR O.B2 O.B2: MOVB R4,O.P ;ALLOW PROCEED DEC O.CT(R4) BGT O.C1 ;JUMP IF REPEAT MOV #1,O.CT(R4) ;RESET COUNT TO 1 JSR 5,O.SVTT ;SAVE TELETYPE STATUS, R4 IS SAFE MOV #'B,R0 JÓSR 5,O.FTYP ;TYPE "B" MOVB O.P,R0 ;CONVERT BREAKPOINT NUMBER TO ASCII ADD #140,R0 ASR R0 JSR 5,O.FTYP MOV #';,R0 JSR 5,O.FTYP ; TYPE MOV #2,O.BW ; SET WORD MODE MOVB O.P,R4 MOV O.ADR1(R4),R0 ;GET ADDRESS OF BREAK O.B3: JSR 5,O.RORA ; CHECK FORMAT JMP O.DCD ;GO TO DECODER ; SAVE REGISTERS R0-R6 ; INTERNAL STACK O.SVR: MOV (SP)+,O.XXX ;PICK REGISTER FROM STACK AND SAVE MOV SP,O.USP ;SAVE USER STACK ADDRESS MOV #O.USP,SP ;SET TO INTERNAL STACK MOV R5,-(SP) ;SAVE MOV ×R4,-(SP) ; REGISTERS MOV R3,-(SP) ;1 MOV R2,-(SP) ; THRU MOV R1,-(SP) ; 5 MOV O.XXX,-(SP) ;PUT SAVED REGISTER ON STACK TST -(SP) RTS R0 ; RESTORE REGISTERS R0-R6 O.RSR: TST (SP)+ ;POP THE EXTRA CELL MOV (SP)+,O.XXX ;GET R0 FROM STACK MOV (SP)+,R1 ;RESTORE MOV (SP)+,R2 ; REGISTERS MOV (SP)+,R3 ; 1 MOV (SP)+,R4 ; THRU MOV (SP)+,R5 ; 5 MOV O.USP,SP ;RESTORE USER STACK MOV O.XXX,-(SP) ;PUT R0 ON USER STACK RTS R0 ; RESTORE BREAKPOINTS 0-7 O.RSB: MOV #O.BKP,RÛ4 ;RESTORE ALL BREAKPOINTS O.RS1: MOV @O.ADR1(R4),O.UIN(R4) ;SAVE CONTENTS MOV O.TRTC,@O.ADR1(R4) ;REPLACE WITH TRAP DEC R4 DEC R4 BGE O.RS1 ;RE-LOOP UNTIL DONE RTS R5 ; THEN QUIT ; SAVE TELETYPE STATUS O.SVTT: MOVB O.RCSR,O.CSR1 ;SAVE R C/SR MOVB O.TCSR,O.CSR2 ;SAVE T C/SR CLRB O.RCSR ;CLEAR ENABLE AND MAINTENANCE CLRB O.TCSR ; BITS IN BOTH C/SR O.SVT1: TSTB O.TCSR ;LOOP UNTIL READY BIT COMES ON BPL O.SVT1 ;BR IF BIT NOT ON RTS R5 ; RESTORE TELETYPE STATUS O.RSTT:ß JSR 5,O.CRLF TSTB O.TCSR ;WAIT READY BPL .-4 ; ON PRINTER BIT #4000,O.RCSR ;CHECK BUSY FLAG BEQ O.RSE1 ;SKIP READY LOOP IF NOT BUSY TSTB O.RCSR ;WAIT READY BPL .-4 ; ON READER O.RSE1: MOVB O.CSR1,O.RCSR ;RESTORE MOVB O.CSR2,O.TCSR ; THE STATUS REGISTERS RTS R5 ; REMOVE BREAKPOINTS 0-7 ; IN THE OPPOSITE ORDER OF SETTING O.REM: TSTB O.S ;SEE IF SINGLE INSTRUCTION IS GOING BNE O.R2 ;EXIT IF SO CLR R4 ;REMOVE ALL BREAKPOINTS O.R1: MOV O.UIN(R4),@O.ADR1(R4) ;CLEAR BãREAKPOINT INC R4 INC R4 CMP R4,#O.BKP BLE O.R1 ;RE-LOOP UNTIL DONE O.R2: RTS R5 ;THEN QUIT ; TYPE OUT CONTENTS OF WORD OR BYTE WITH ONE TRAILING SPACE ; WORD IS IN R0 O.CADV: MOV #6,R3 ;# OF DIGITS MOV #-2,R4 ;# OF BITS FIRST-3 CMP #1,O.BW ;SEE IF WORD MODE BNE O.SPC ;BRANCH IF SO SUB #3,R3 ;ONLY DO 3 DIGITS INC R4 ;DO 2 BITS FIRST SWAB R0 ;AND TURN R0 AROUND O.SPC: MOV R0,-(SP) ;SAVE R0 O.V0: ADD #3,R4 ;COMPUTE THE NUMBER OF BITS TO DO CLR R0 O.V1: ROL (SP) ;GçET A BIT ROL R0 ;STORE IT AWAY DEC R4 ;DECREMENT COUNTER BGT O.V1 ;LOOP IF MORE BITS NEEDED ADD #'0,R0 ;CONVERT TO ASCII JSR R5,O.FTYP ;TYPE IT DEC R3 ;SEE IF MORE DIGITS TO DO BGT O.V0 ;LOOP IF SO MOVB #' ,R0 ;SET UP FOR TRAILING SPACE TST (SP)+ ;GET RID OF JUNK BR O.FTYP ; ;O.CLRR CLEAR RELOCATION REGS ; I.E., SET THEM TO A HIGH MEM LOC. (-1) ; R1,R0 CLOBBERED ; O.CLRR: MOV #O.RELT,R1 MOV #-1,R0 MOV R0,(R1)+ MOV R0,(R1)+ MOV R0,(R1)+ MOV R0,(R1)+ MOV R0,ë(R1)+ MOV R0,(R1)+ MOV R0,(R1)+ MOV R0,(R1) RTS R5 ; .EOT ;END OF TAPE #3 ; TYPE ONLY ONE CHARACTER (CONTAINED IN R0) O.FTYP: TSTB O.TCSR BPL .-4 MOVB R0,O.TDB O.TYP1: RTS R5 ; GENERAL CHARACTER INPUT ROUTINE -- ODT11X ; CHARACTER INPUT GOES TO R0 O.GET: TSTB O.RCSR ;WAIT FOR BPL .-4 ; INPUT FROM KBD MOVB O.RDB,R0 ;GET CHARACTER - STRIP OFF PARITY BIC #177600,R0 ;STRIP OFF PARITY FROM CHARACTER CMPB #3,R0 ;IS IT ^C? BEQ O.GET1 ;IF SO, DO NOT ECHO TSTB O.SCRN ï;SHOULD WE ECHO ? BNE O.GET2 ;BR IF YES CMPB R0,#012 ;SEE IF A BEQ O.GET1 ;IF SO SAVE THE PAPER O.GET2: JSR 5,O.FTYP ;ECHO CHARACTER BEQ O.GET ;IGNORE NULLS TSTB O.SCRN ;SHOULD WE PASS ON SPACES? BNE O.GET1 ;BR IF YES CMPB #40,R0 ;CHECK FOR SPACES BEQ O.GET ;IGNORE SPACES O.GET1: RTS R5 ; GENERAL CHARACTER OUTPUT ROUTINE - ODT11X ; ADDRESS OF FIRST BYTE IN R4, ; ADDRESS OF LAST BYTE IN R3, (R3)>(R4) O.TYPE: CMP R3,R4 ;CHECK FOR COMPLETION BLO O.TYP1 ; EXIT WóHEN DONE MOVB (R4)+,R0 ;GET A CHARACTER JSR 5,O.FTYP ;TYPE ONE CHARACTER BR O.TYPE ;LOOP UNTIL DONE ; ;CHECKS FOR ^U. IF PRESENT, ECHOS IT ;GOES TO COMMAND DECODER. STACK GETS INITIALIZED O.CU: CMPB O.RDB,#225 ;IS ^U IN TTY BUFFER BNE O.CU1 ;BR TO RETURN IF NOT MOVB #'^,R0 ;ELSE TYPE IT JSR R5,O.FTYP MOVB #'U,R0 JSR R5,O.FTYP MOV #O.UR0,SP ;INT STACK JMP O.DCD O.CU1: RTS 5 ; ;SUBROUTINE TO LOCATE RELOCATION REGISTER NEAREST BUT STILL ;BELOW THE ADDRESS IN O.CAD. RET÷URNS WITH THE REGISTER ;NUMBER IN R0, AND WITH THE DISTANCE BETWEEN THE REGISTER ;AND (O.CAD) IN O.XXY ;IF NO GOOD RELOC. REG. FOUND, R0 WILL = -1 O.LOC: CLR R0 MOV #-1,O.XXX ;INITIALIZE RELOC. REG. INDEX MOV #177777,O.XXY ;INITIALIZE DISTANCE TO A HIGH VALUE O.LOC4: CMP R0,#O.RLR ;ARE WE DONE COMPARING? BHI O.LOC1 ;BRANCH IF DONE CMP O.RELT(R0),O.CAD ;IS CURR. RELOC. BIAS > (O.CAD)? BHI O.LOC2 ;IF SO, BRANCH -- DON'T SUBTRACT, GET NEXT MOV O.CAD,R1 ;OTHERWISE TAKE THE DIFFERENCE SûUB O.RELT(R0),R1 ; OF CURR. RELOC. REG. AND O.CAD CMP O.XXY,R1 ;IS THE RESULT THE SMALLEST SO FAR? BHI O.LOC3 ;BRANCH IF YES (UNSIGNED CONDITIONAL) O.LOC2: TST (R0)+ ;OTHERWISE, BUMP R0 FOR NEXT RELOC. REG. BR O.LOC4 ;LOOP BACK FOR NEXT COMPARISON O.LOC1: MOV O.XXX,R0 ;PUT REG.# IN R0 RTS 5 ;JOB OVER, RETURN O.LOC3: MOV R1,O.XXY ;REMEMBER SMALLEST DIFFERENCE IN O.XXY ASR R0 ;AND ASSOCIATED REGISTER NUMBER MOV R0,O.XXX ; IN O.XXX ASL R0 ;RESTORE R0 TO ORIGINAL VALUE BR O.LOC2 ;GO ÿFO NEXT COMPARISON. ; ; ;SET A SEGMENT OF MEMORY TO A GIVIEN VALUE. (ENTERED VIA R5) ;FIRST WORD OR BYTE ADDRESS IS IN R4, =TO R3 AT EXIT ;LAST WORD OR BYTE ADDRESS IS IN R3 ;BYTE OR WORD VALUE IS IN R0 ;BYTE OR WORD MODE IS SPECIFIED BY O.BW ; O.ST: O.ST2: CMP #1,O.BW ;IF NOT BYTE MODE, ASSUME WORD BEQ O.ST1 ;BRANCH IF BYTE MODE MOV R0,(R4)+ ;DEPOSIT WORD VALUE, BUMP R4 BY 2 O.ST3: CMP R4,R3 ;ARE WE DONE? BLOS O.ST2 ;BRANCH IF NOT DONE RTS 5 ;OTHERWISE EXIT O.ST1: MOVB R0,(R4) ;DEPOSIT BYTE VALUE INC R4 ;BUMP R4 BY 1 BR O.ST3 ;GO TO TEST IF DONE ; CLOSE WORD OR BYTE AND EXIT, ; UPON ENTERING, R2 HAS NUMERIC FLAG, R4 HAS CONTENTS O.CLSE: TST R2 ;IF NO NUMBER WAS TYPED THERE IS BEQ O.CLS1 ;NO CHANGE TO THE OPEN CELL CMP #1,O.BW BEQ O.CLS2 ;JUMP IF BYTE MODE BHI O.CLS1 ;JUMP IF ALREADY CLOSED O.CLS4: MOV R4,@O.CAD ;STORE WORD O.CLS3: BR O.CLS1 O.CLS2: MOVB R4,@O.CAD ;STORE BYTE O.CLS1: RTS PC O.CRLF: MOV #O.CR+1,R3 ;LWA BR O.CRS O.CRLS: MOV #O.CR+2,R3 ;LWA * O.CRS: MOV #O.CR,R4 ;FWA JSR 5,O.TYPE ;TYPE SOMETHING RTS R5 ;SUBROUTINE O.RORA ;FUNCTION: DECIDE IF AN ADDRESS IS ;TO BE PRINTED IN ABSOLUTE OR IN RELATIVE ;FORM. IF THE FLAG O.FORM=0 THEN PRINT ;IN RELATIVE FORM, OTHERWISE PRINT IN ;ABSOLUTE FORM. ;IF THE ADDRESS IS TO BE PRINTED IN RELATIVE ;FORM, ;THEN THE ADDRESS WILL BE PRINTED OUT ;RELATIVE TO A RELOCATION REGISTER NEAREST ;BUT STILL BELOW THE ADDRESS. IF NO SUCH ;RELOCATION REGISTER EXIST THEN THE ;ADDRESS WILL BE PRINTED IN ABSOLUTE FORM ;INPUT: THE ADDRESS TO BE PRINTED IS IN R0. ;DATA SAVED: R0 CONTAINING THE ADDRESS TO BE ;PRINTED, AND LOCATION O.CAD CONTAINING ;THE CURRENT ADDRESS WERE SAVED AND RESTORED. ;CALLED: JSR 5,O.RORA O.RORA: CMP #0,O.FORM ;CHECK FORMAT BEQ O.NOTA ; GO TO O.NOTA IF RELATIVE O.ABS: JSR 5,O.CADV ;PRINT ABSOLUTE ADDRESS RTS R5 O.NOTA: MOV O.CAD,O.TMP1 ;SAVE O.CAD MOV R0,O.TMP2 ;SAVE R0 MOV R0,O.CAD ;PREPARE INPUT FOR O.LOC JSR 5,O.LOC ; FIND BEST N TST R0 ;IF = -1, PRINT IN ABS. BLT O.ABS1 ADD #60,R0 ; CONVERT N TO ANSCII JSR 5,O.FTYP ; TYPE N MOV #',,R0 ; PREPARE INPUT FOR O.FTYP JSR 5,O.FTYP ; TYPE COMMA MOV O.BW,-(SP) ; SAVE O.BW MOV #2,O.BW ;ARTIFICIALLY SET MODE FOR WORDS MOV O.XXY,R0 ;PREPARE INPUT FOR O.CADV JSR 5,O.CADV ;TYPE RELATIVE AMOUNT MOV (SP)+,O.BW ;RESTORE MODE MOV O.TMP1,O.CAD ; RESTORE O.CAD MOV O.TMP2,R0 ; RESTORE R0 RTS R5 O.ABS1: MOV O.TMP2,R0 ;RESTORE R0,CAD BEFORE MOV O.TMP1,O.CAD ;TYPING IN ABSOLUTE BR O.ABS ; ; MOD40 PACK - ENTERED WITH JSR PC, PACK00 ; ; INPUT: R0=ADR OF MOD40 WORD (1 WORD) ; R1=ADR OF ASCII CHARACTERS (3 CHARS) ; ; OUTPUT: R1 POINTS ONE PAST END OF ASCII STRINT ; THE MOD40 WORD IS FORMED AS ; N=C1*40^2+C2*40+C3 ; ; R2,R3,R4 ARE CLOBBERED PACK00: PACK01: MOV #-3,R4 ;LOOP CT. CLR R2 ;0 SUM PACK05: MOVB (R1)+,R3 ;GET NEXT ASCII CHAR. CMPB #' ,R3 BEQ PACK02 ;"BLANK" CMPB #'$,R3 BEQ PACK04 ;"$" CMPB R3,#'A BLO PACK03 ;"." OR "0-9"  SUB #40,R3 ;"A-1" PACK02: SUB #16,R3 PACK03: SUB #11,R3 PACK04: SUB #11,R3 ; MULT R2 BY 40. ASL R2 ;2*R2 ASL R2 ;4*R2 ASL R2 ;8*R2 MOV R2,-(SP) ;STACK 8*R2 ASL R2 ;16.*R2 ASL R2 ;32.*R2 ADD (SP)+,R2 ;40.*R2 ; INCLUDE CURRENT CHARACTER ADD R3,R2 INC R4 ;DONE 3 CHARS? BLT PACK05 ;NO MOV R2,(R0)+ ;YES-STORE MOD40 WORD RTS PC ;EXIT ; ; MOD40 UNPACK - ENTERED VIA JSR PC,UNPA00 ; ; INPUT: R0=ADR OF MOD40 NUMBER (1 WORD) ; R1=ADR OF ASCII STRING (3 BYTES) ; ; OUTPUT: R1 POINTS ONE PAST LAST GENERATED CHARACTER ; ; ; IF N IS THE MOD40 NUMBER, THEN ; N=C1*50 ^ 2+C2*50+C3 ; THUS, N/50^2 IS C1 AND THE REMAINDER IS C2*50+C3 ; THE REMAINDER IS DIVIDED BY 50 TO GET C2 ETC. ; UNPA00: UNPA07: MOV #-3,R5 ;MINOR LOOP COUNT MOV (R0),R0 ;GET MOD40 WORD MOV #COEFF,R2 ;PTR TO COEFFICIENT TABLE UNPA06: CLR R3 ;0 QUOTIENT ; DIVIDE BY COEFFICIENTS UNPA02: CMP R0,(R2) ;DONE WITH DIVIDE? BLO UNPA01 ;YES SUB (R2),R0 ;NO-SUBTRACT COEFF. INC R3 ;ADD 1 TO QUOTIENT BR UNPA02 ; DIVIDE DONE. QUOT IN R3, REMAINDER IN R0 ; CONVERT TO AN ASCII CHARACTER UNPA01: TSTB R3 BEQ UNPA03 ;"BLANK" CMPB R3,#33 BEQ UNPA05 ;"$" BGT UNPA04 ;"." OR "0-9" ADD #40,R3 ;"A-Z" UNPA03: ADD #16,R3 UNPA04: ADD #11,R3 UNPA05: ADD #11,R3 MOVB R3,(R1)+ ;STORE CHARACTER TST (R2)+ ;ADVANCE TO NEXT COEFF. INC R5 ;DONE 3 CHARS? BLT UNPA06 ;NO-DO MORE MOV (SP),R0 ;RESTORE ORIGINAL R0 AND TST (R0)+ ;MOVE TO NEXT WORD RTS PC ; ; COEFF#ICIENT TABLE ; COEFF: +1600. ;40. ^ 2 +40. ;40. ^ 1 +1. ;40. ^ 0 O.BW: .BYTE 0 ; =0 - ALL CLOSED ; =1 - BYTE OPEN, ; =2 - WORD OPEN .EVEN O.CAD: 0 ; CURRENT ADDRESS O.DOT: 0 ; ORIGIN ADDRESS O.XXX: .WORD 0 ;TEMPORARY STORAGE O.XXY: .WORD 0 ;2ND WORD OF TEMPORARY STORAGE O.SEQ: .BYTE 0 ;CHANGE SEQUENCE INDICATOR O.WDFG: .BYTE 0 ;SEARCH FLAG = 1 - EFFECTIVE ; = 0 - WORD O.S: .BYTE 0 ;SINGLE INSTRUCTION FLAG ;0 IF NOT ACTIVE ;-1 IF ACTIVE ' ;NO BREAK BOINTS MAY BE SET WHILE IN ;SINGLE INSTRUCTION MODE O.T: .BYTE 0 ; T-BIT FLAG O.P: .BYTE 0 ;PROCEED FLAG = -2 IF MANUAL ENTRY ; -1 IF NO PROCEED ALLOWED ; 0-7 IF PCEED ALLOWED O.CSR1: .BYTE 0 ;SAVE CELL - R C/SR O.CSR2: .BYTE 0 ;SAVE CELL - T C/SR O.CMFD: .BYTE 0 ;COMMA FOUND SWITCH, =0 NO COMMA FOUND ; =1 COMMA FOUND O.SMFD: .BYTE 0 ;SEMICOLON FOUND SWITCH ;=0 NO SEMICOLON FOUND ;=1 SEMICOLON FOUND O.ALF1: .BYTE 0 O.ALF2: .BYTE 0 O.ALF3: .BYT+E 0 O.SCRN: .BYTE 0 ;FLAG; 1=PASS SPACES ON FROM TTY ;ALSO, IF =1, IS ECHOED O.ID: .BYTE 012 .BYTE 015 .BYTE 177 .ASCII /ODT-11R V004A/ O.IDND=.-1 .EVEN O.BD: .WORD "BE O.BIAS: .WORD 0 ;CURRENT RELOCATION BIAS O.MINS: .BYTE 0 ;MINUS SIGN TYPED (SWITCH) ;0=NO MINUS TYPED; 1=MINUS SIGN TYPED .EVEN O.TMP1: .WORD 0 ;SAVE CELL O.TMP2: .WORD 0 ;SAVE CELL O.CR: .BYTE 015 ; .BYTE 012 ; .BYTE '* ; * O.LGCH: .BYTE '; ; .BYTE '/ ; / .BYTE '\ ; \ (BACK/ SLASH) .BYTE 015 ; CARRIAGE RETURN .BYTE '$ ; $ .BYTE 'G ; G .BYTE 012 ; .BYTE '_ ; _ (BACK ARROW) .BYTE '< ; < .BYTE '^ ; ^ (UP ARROW) .BYTE ', ; , .BYTE 'O ; O .BYTE 'W ; W .BYTE 'E ; E .BYTE 'B ; B .BYTE 'P ; P .BYTE '@ ; @ .BYTE '> ; > .BYTE 'S ; S .BYTE 'R ; R .BYTE 'C ; C .BYTE '- ; - .BYTE 'F ; F .BYTE 'I ; I .BYTE '! ; ! .BYTE 'X ; X .BYTE 'A ; A .BYTE 003 ;CTRL C O.CLGT = .-O.LGCH ;TABLE LENGTH O.TL: .BYTE 'S ;DO3 1 .BYTE 'P ;NOT 2 .BYTE 'M ;CHANGE 3 .BYTE 0 ;THE 4 .BYTE 0 ;ORDER 5 .BYTE 'C ; 6 .BYTE 'F ; 7 .BYTE 'R ; 10 .BYTE 0 ; 11 .BYTE 0 ; 12 .BYTE 0 ; 13 .BYTE 0 ; 14 .BYTE 0 ; 15 .BYTE 0 ; 16 .BYTE 0 ; 17 .BYTE 'B ; 20 O.LG = .-O.TL .EVEN O.TRTC: TRT ;TRACE TRAP PROTOTYPE ;THE ORDER OF THE FOLLOWING ENTRIES IS CRITICAL . = O.ODT-144 ;ODT'S STACK IMMEDIATELY PRECEDES ODT O.UR0: 0 ;USER R0 0 ; R1 0 ;7 R2 0 ; R3 0 ; R4 0 ; R5 O.USP: 0 ;USER SP O.UPC: 0 ;USER PC O.UST: 0 ;USER ST O.PRI: 7 ;ODT PRIORITY O.MSK: 0 ;MASK O.LOW: 0 ;LOW LIMIT O.HI: 0 ;HIGH LIMIT O.CNST: 0 ;CONSTANT REGISTER O.FORM: 0 ; FORMAT REGISTER ; IF $F=0 RELATIVE ADDRESSING ; ABSOLUTE OTHERWISE ;RELOCATION REGISTERS O.RELT: -1,-1,-1,-1,-1,-1,-1,-1 ;INITIALLY SET TO A HIGH ADDR. ; BREAK POINT LISTS, ADR1 = ADDRESS OF BREAKPOINT,CT = COUNT, ; UIN = CONTENTS O.ADR1: . = .+O.BKP+4 O.CT: . = .+O.BKP+4 O.UIN: . = .+O.BKP+4 . = O.TRTC+2 .END O.ODT ;END OF TAPE #4