IMD 1.16: 16/08/2007 16:31:59 user group 51-75  M68UGL3 0201061377USER-GROUP-LIBRARY \lx€ˆ�˜ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿUG54S SA\ÅUG62S SA¨ÅUG70S SAÅMDOSOV0 SY\òDIR CMðòMDOSOV4 SYˆòUG58S SAÜÅUG66S SA˜ÅUG74S SA<ÅMDOS SYòMDOSOV6 SY˜òUG51S SAÅUG55S SA ÅUG63S SAÀÅUG71S SAÅMDOSOV1 SYlòUG59S SA(ÅUG67S SA¤ÅUG75S SA\ÅMDOSOV3 SY€òMDOSER SY åBACKUP CM°òUG52S SA$ÅUG53S SAHÅUG60S SADÅUG61S SA„ÅMDOSOV5 SY�òUG56S SA°ÅUG64S SAØÅUG72S SA$ÅCOPY CMÔrUG57S SAÔÅUG65S SAÅUG69S SA°ÅUG73S SA,ÅMDOSOV2 SYxòUG68S SA¨Å|½èu½ëÀΠ¦u—æ+.ĦHYHY‹É×—¦wæv—׿z¦{67îx߆S6†è6~èm†?— ~èS@€?@Ù0201£ÿ� €CN0 LP0 DK0MDOSER SY �0¦æÀ‚Îÿ¡&á'LŒÿ/&ñ0®431¯5¦X%;Á€$*÷DÎzîÿU0¦6¦æî2½T06ç3ç3Ä„ï6;Æ!½b~ÍþnWþn·¹oùõ»ûáä£Ô%(4]_fo|…�™Ù  ¿³µýb¯±¿\lr„…†�¢£¤´ÁÕÛáAD÷½¿"ggggÍ}üý*26…'Ɔ}ÿO&Æ*†760Ʀ6 Z&ùþÿünþn�î§�#Z&õ9� î¡&�Z&ó90îî¦0îl&l90îl&l9† §Z&ú9�A%6‹¥29�0%6‹Æ2%„9«§$l9@«§%j96hiJ&ù296dfJ&ù29ÿ$Œ®&ÁP+ÆO?'ÿ&Î ?% ¦æî?.' 9Á 'ïÆ? ?6 ¶üô…'� 29…'ú¶üõ„�'÷ ä� �¶üõ¶üõ9O½ð¶üô…'ù9ö*Äß÷* Æ ŒÆÿ$ á&ûÿ&Î ?$~Îæ Ê ç æ¦0ç§æ¦9Æ ŒÆÿI á&ûÿKÎE?$Ú~Î0¦æ9ÿ ö ¶ 90§ç90æ§çæ¦ç§~÷_0�§ç h0«6Šû§é¤§29_?&?.06§2§ç C0 6Šû§â Ù0á&¡9ÿ ñ &± 90gf90hi9† 440æçJ&ø0榧 ç ¦æ6¦290¦ æ §ç† æç J&ø110 Þ†€…OÎèi †€…OÎè�ÿIÄ×Î߯670îæ¦îß×—½$–�1'2�4'.�8'*�9'& 320îÖç$…€'90¦æ€Âî§çÆ? ?0j'ÕæÎ‚Á&Ö–?.Y$½èu V×—½èx~9Ö–?*ÎÑ?/%éÆ†Ñ ã÷6¶Š€·29þÿÿúŽÿŠ~èþÿúŒ*' Œ'Žÿн ¾ Îfÿÿ¶Š€·Î ÿ½è"½èu½èS|½èu~ûDK9LPFCRSCP`CNmHRzr –Á€¦1€ *Q€{e€ W T Q N�S¦*"¦ª' ¦"æ!¡â$½%3l&lî æ &¦ª&¦ §¦§îç�l&l¦"æ!¡â$�E0î11n0î~†‚Œ†AÿoèÄ' æÅ 'Å' ÆŒÆ ç9Ä?„À§�Äþæ ë¦"æ!  â' Æ ŒÆŒÆ ç 9�&ð†€¥' ¦æ â+æ¦æ�ÿÂÿ+Ùæ â&æ +ÍÄ|Ë$~)æ ¶6¶6î?240?31111½ö¶ç§†þ6L6î¦*5�i¦+`32P@$Z«é�€7Â3$O_§ç† ?(?!�I% ¦Š§~C~+„|‹_?3?*67�) â*0l&ll&l¶ö‹€É¡&˜á&”11~&0î 0îîî9î¦æ�ë§ç Ä|Ë?3?+?$�à§ç~Cî?2�Í6¦æ ÄHYHY0«É1674î�½æ ¦0+?Œ?31111�§¦ æ§ç¦æ¡ â +§ æç l&l 9    }�¦* |ÿS½ð6]3&l½ð f0îîî9~è~  U Rz )&}ÿ* †V· )�H†7�F� $9�ц § 1Îÿ ' ¶üôG$÷öüõÄ 9 9†W· )}ÿ*�†7 ¶üý„_·üô†� 0î11n†~ù϶üý„?·üô†½ð}ÿ&�¯�­ ÛW~ K~ e~ ‚~ ‚�~˜Á & }ÿ*Î]À &ý9� µ|ÿb}ÿ*�²†0�°†�¬† ¨†�¤ÿb}ÿ*“�˜†9½ðÆO��Z&û ‚�ËÆ2O�„Z&û† ½ð�§ Ï    ½ëÌ$0îî ½ëÀ0î11nÄ&~ „÷  V$ý]&óæÄ×½èu0î ö Ä!' m&†§ Y½ Ì‹HHH0î§ ì0�'l >0î¦ö Ä!„ø�°'‹ ]'~ ˆ†]&¡&ö Ä'~ €} &~ Œ~ $§_½  ¦„HHHHî?(ÿ †ÿ¡&÷ ÿ  •m&~ ö Á&þ ÿ 0îÿ Î Æ?ö Á'B_9Á &Æ ?'¦æ0î¤ ¨ &äè& Æ~ ÿ 0îÿ Æ Î ?'~ ö ÄD'¦~ ”þ ÆÀå '~ œÆ†ÿ?0îÆ½  îÿ 0î†ÿ§§?"$Æ ? ?ö ¶ ç§~ ”ö Ä!'~ „&\0îö ' çþ ÿ 0îö Á@'o o ooo?!]'Á'?Á';Æ ? ?_�Bÿ þ ÿ Î Æ?Æ0î�*ö Á'~ ”Æ 9Æ úÆ öÆ òÆ îÆ êÆ æÆ âÿ ÷ æ¦îÿ „øDDD · Î } &? ?þ 9Æ ÷  _÷ · æÀ%*_¶ ù Yz &äVFFFFÄÁ#ÀÁ "GY9÷JîÿOÄ' V$ý]'~ RöJÄ(&ööJ*Åx&íÅ'éÆ0·`¶J…@&"?$ Á&~ cÆ ? ?†¤ &~ g¦ „�&õ½ sþTîxÿV½ øöV¶WþX?)ÿXþV½ ª$~ kþXöJÄ'†?(ÿZ½ Ì%çöJÄ' þZ_?]&ÖöJÄ'böJÅ&8Å'þ\ þO½ “ÿK½5½ Õ}a&ŽÿŠ ¾Z¶KöL76¶^ö_76~èmþ\ÿÿþVÿÿþZÿÿ½'½5ÎÿÿúÎðó ´½ Õ½èm¶VöW0î§ç¶\ö]§çÖÁ0&_9 9Æ0î¶O§¶P§ 9Æ íÆ éÆ åÆ ᦠæ îÿT·R÷Sö`ÎQ?þTîzÿ\9?$þV?/$11 ÏþX?&?/%ó9aöJÅ8& Å'ö¶ ö¶|a?-9ö ¶ ?.90î¶`—þRßþT¦u‹„ø—îvßþVß9þTîv'# ÿXÎX†?þT¦u'‹„øJ»Y·Y$|X911~ gÎÿoŒÿc' ö9öJ*þÿÿúþÿÿø½'9èS>ÿ7÷=Á#IÎ9½ÎÿœÿnÎÿÜÿ pþ{'½ËÎj?'Á &þÿœ¼9&íþlÆçÎÿž Î=ÿ7·Æÿ Î�_HY?)îö=?#ÿ3Îÿ�Æ çÆ*ççÿ5þ7ö='>Á&æ¦Îܽ–Š0·êÖ–Îð½þ3¦�'_�\'0þ5§ÿ5þ3ÿ3 á}>&Ü|>¦ÎPm'С&æ~o ïÿ3¦Î?m'¶¡'Æ?' ò|4&|3æîÿi½h ˜þ5†§Î *­ Îÿ�½ð$½ð! 9þ5ÿ;þ7ÿ9ÆÎ9?þ;†.§ÿ;ÆÎ9?þ7æþ;†:§çÿ5þ9ÿ79þ7ÿ9þ5»6·6$|5¶:Á&ö9½9½9þ7¦9·:G»8·8$|7 Å0î ÿ7~Æ6�26� §2�§9DDDD„‹0�9#‹90 †1Æ3í8 "#$ % &  ' ( )*+,-. ÀINVALID MESSAGE \3 AT \8UNIF. I/O ERROR-STATUS=\3 AT \8PROM I/O ERROR-STATUS=\3 AT XXXX ON DRIVE X-PSN XXXX0MDOSOV SY�ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÃÿsý~Õö/ ~Þö1 ~çö3 ~ðö5ÿg0¦€§¦‚§¦Î_…\€$û÷u¦H·„·�Îæ¦÷·¶6ÎõÆ@?% 2·0æî ~ù†V— ½èS          ½6½6½6½6½6½6½6½6½6½6­ ì~Á  ½>½>½>½>½>  ½F½F Îÿ{ÿ‡966Î~966Î&~A66Î+~I66Î-~Q229 ½N¿ vÎ ‚†M§¡'ù ÿ þÿúÿþÿøÿÎ*ÿÿúÎúÿÿø¾ †/ηü|üÿ xÎõÆ?%(æ ¦ þ x§çŒ&ßÎ z?Î Æ?Î z?¾ v9†V— ½èS�µÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅ € ÃÃ~á~á½6½6½6½6½6½6½6½6ÿPæ÷Oî'ƆнÉ$~Í ÿRÎR†?þR Î ÿRþÿWþPî ';½ îÿYZ†9þR ÿ]Î]†?_þ]½É$~ÕþY½ã?'ÿ_ÿg Îÿ_ ÿgÎÿUöOÎT?þ_'~¶ÿa½Š&.%,þ_ÿeÎÿ[½¹%½Š& % þ[ÿ[ ë½È ½È~ë½¹$È~ëÿcab½Š%'þPÆå &Îÿ_~xþaÿa¼R'½¹$Ö Ûþa&~ÑöR¶S?&½É$ þPî&éþaÿRþPm &m 'Æå ' þg¼c'~Ñþcÿ_þRÿ[½Šêçþ_ÿ_þ[ ÿ[&éöOÎT?þPî &þWÆ€O?ZþWçþc?1?1ÿU ÿUöOÎT?þWm+ øÿ]þc¼g'KþRÿ[_† ½É$÷[·\¶\?,ÿRþcÿY?)ÿcö\þY½õþ]ç§ÿ] îÿgþR&¸~=þ] ÿ]î½ã÷[† & þ]ÿ] –·a_þR?&½É$¶S·a¶aþR?,ÿRþc?(ÿcö[ûaþY½õþ]ç§~ÍÎÿÿÿeþWÿYîög¶h½É&^þg½ãXXZþe?'ÿ_½bÊ€þ]ç§öOÎT?þPî &öU¶VþPç § _9þPög¶hç§öe¶fç§ö_¶`ç § Û½ãXXþe?'ÿeþY~FÆ 9Æ úÆ öÆ òÆ îÆ êÿPæ÷OþÿWþPî &~ɽÆtÎmÿkþWÿiÎi?þPîŒÿÿ'~ÒþPæ÷]ÄøTTTÁ-Á#~ÙU÷VöOÎT?ö]ÄXXXXþW?'¦�ÿ'~ÝÆ€þWO?þPî ÿUöOÎT?þPo o Îmm*~�ÿ]ÎÿUöOÎT?þ]î* öOÎT?~�½ã÷Rÿ_½Š%Säçþ_ÿ_öRZ÷R&æþ]ÿ] Á?0?0ÿ[þWÿ]þ]î*~ͽãR÷Sÿ_þRö[¶\½É%R?.÷[·\þ]ÿ]þ[&ǽþPæ¦Ê€þ]ç§ÿ]þWƆt?)¼]' þ]oo äöOÎT?þY~{½öSð\¶\þ_?(½õþYç§þ_ö\½õþ]ç§ÿ]~ö_¶`νÉ$9� þW?( å9ÄTFVFVD6YYYO FZ,ü29þ_ÿ_Ɔÿ½É9þ[öa¶b½É$ þ[ÿaþeÿc9½bÄ|WW\7½bÄ?%39ZXX7½bÄ?%3O?*9þ]öW¶X?-½bÎm?)ÿY9ƆнÉ$11~ÉÿUöOÎT?þWÆm+ \Á: /õ11~ÉÁ'÷9ÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅ€ Ãý6½6~ï~ù~W~@~u~o~r90îî¦90êç9½S0oƽp]'Á'd�*&Æ�à�Ö�.&PÆ‚½p]' �*&Æ�Ê�À�:&† 0î?ÆÁ½p† 0î?�£0æ90î î¦�;'� ' 0î l&lî¦9Æ�u ¼�#'zÆ€½é ‘„?6½BÅ€&� 'õÅ@'?$ @?%Ä?0îî]'§Z0½T�¡?%äŠ0 äÄ?')760á'î î?0¦î ?23�*& ½B?$ù?$õ†*190î6?29ƽé0î†?ƈ½p~6Á'-þ ¶ öÿ?-?&0 5?&þ?) ö ¶ ?/%(ö¶?/$!ö¶ ÿ0m& ¶‹öÉç§_ŒÆŒÆ2W9¦ …@&-„� $*¦?%$¦ ?%þÿ;î'?/'þ; ì~ ~~þ;î'ðÿ=þ;îŒDK&~þ=¦J0îæ Ä%Zþ=]'† ?(Z ÷ÿ=î'»þ=oo¦…€' 0¦æþ=§ç¶>ö=0î§ ç¦ Š@§ ¦„?Ч Æ0¦îç9ÆŒÆŒÆ í0îæ Äþ=¦·?¦ $ à † ?(z?&ð Ù~Å6¦ …@'¦…'¦ „¿§ ?2îoo?3oo Æ ÆŒÆ 2ç9ÆŒÆÿŒÆÿì÷'~»… '~¾„�&~¾ñ|ñ¦„·ï�'�'�'~Á¦…&ñ榧çîô¦…'|ôþìæ ¦ Áÿ&�ÿ&o o î …'sôîÿê­ì$~Äþ즄?Š@§}î&~¶ï�'~ó}î*~–ðþì¦æî½É%mæþìl&lÁ &}ô/%}ñ& |ð†±ð&Ͻ¨ 0}ñ& }ð'7½¨%"3¶ï�&¶î' Á & ½÷ ¶ò·ò½~$~µ~(óƽ~$6~µ¶ï�&%}î' þìîæÁ '!}ô,þìŒ &æ Å ' � $~µ½÷%ø~Ê}î&|ó ¶ï�&ôöòP½~9ó}ô.Æ ½~%Æ ½~% }ô.ƽ~9ÆE}î+ ÆH}î'ÆDó½~$~µòO}î+þìæ¦î ?.]'~Ç�ÿ$ùL»ò·òó}î&|ó ¶ï�'ô½~%B}î*~Ï~}ó'7ÄðTTTT�½˜3% Ä�þê½ã9Ê0Á:%Ë9öððÊ€ó ÉþìæŒÆŒÆ ŒÆ ŒÆŒÖŒÆÁ' 7þê­ì3þìç]' 9€Xÿÿ~~½>½>½>Æ _÷Bÿ@îÿ>þ@Æå'~/†¤�&~1† ¥&÷½a$~<CIþ@æ¦ç§}B&†¤�'�'�'~8~}Eþ>†D¥'|Dþ@æÁ - ÁZ.½k$~<½%_ Æ÷F½€$~@}D'ZÁ& ½÷'ÝM&ZJþ@ç§C?%æ½k$Å~<Á&½ê~CÁ&(½ê%êþ@îÿGþ@æ¦þG?/'™æÿG½k%É åÎLá'…¶S¡&ôÁ &8þ@îç}D'}F&½ñ ½ê$~<}I'~@}C'~I½Uþ@o_9½6'Á&|I]*Ä'÷GÆ ½zG' ô½~–½€$~@}B'ÁH' ½6' ÁE&|I ÁD'½à ÖJ}B&tþ@†¤�&i†·E½Ë%¾½Ø÷K&~Q}I'Á&ô}B'Á&ëzK' ½Ë%—½ؽ î½Ë%нØ}J&̽€%äÁ &÷þ@æ¦á&¡'m&jj~;†ÿ •0îç] 9ÆÆ ½U ïÆ ÷Æ ó}B&Æ êÆ æÆ âÆ Þ7þ>î­@39þ>î­@9þ@†@ª„§þ>î­ @9þ@†€ª„¿ é½€%%½à�"$1111~QXXXX÷¶½€% ½à�%æû¶ 9À0%Ëé% Ë*Ë%Ë 9}E+½€9½‹9¶J·J97Á &½a39Æ ½k%Æ ½k9þ@æ¦î?/9þ@æ¦î}E&M&ZJ½É97½%3ç½bþ@ç§9†·C39þ>†¥9 ÿ € ÿÿ½>½>~~X~ØÿN†¥'~Bæ¦ ÷P·Q†¤�&þPî­ NþN†ª§o_9þP†¥'ᆥ' þN† ¥'~ÄþN†¤�'�'�&¼?8'¸~:þN†@¥' Dæ ¦ Áÿ&�ÿ'8æ¦&]'/î?/')þNæ!¦"î?/%o ÷þN† ª§?†ß¤§]'~:þNoo†¥&~,î Œÿÿ&QþN†À¥'~F¦·Ræ îÿV„øDDD�-�#~JT·UÎS?öRÄXXXXþV?'†ÿÆ?þNæ ÎS?þNÆ ?'?"%~,0îç] 9Æ ôÆ ðÆ ìîÆå&0îo_90î?&\æÄøTTTÁ-RÁ# LÔ÷Õæ þÿÖÎÓ?0îæÄXXXXþÖ?'æÁÿ''ÿÔ0îÆ ?'ÿÖÎÔ6Æ ?20î?90îç 9Æ õÆ ñÄ&~Ï÷îÿ ¦·0îîÿ Ä' „æÄ&Ûþ Æ?$~Ó½ìÿöÄ'Mþ ¦ æ„Äÿ· ÷þ ¦ æ·÷„Äÿ± '~Ûñ&øöÄ&þ¶ö§ ç öÎ?_9Æþ ?%~×þ öÄ' ¶ö§ çÆ ?'ÿþ ?'ÿÎÆ?öÎ?þÆ ½ßþ Æ@?%!öÎ?þ†ÿ¡&ƽß~eÆ 9Æ úÆ öÆ ò†ÿ?öÎ?9¦îÿ„HHHH?(ÄøVVV÷9"€(ss~y½FÿrÆå&~#†@¥ &~'“îÿtþr†¥'¦„�'~Kþt†€¥&.~+½Wo_9þt†¥'þr†?¤§†¤�'�&~~|“ àþt† ¥&~/½aþt†¥&~�þrÆ ?'Æ?$Á'Æ ? ?þr†¤�&~~3þr†¤�' †€¥'~G†÷¤§oo†ÿ§ § §§ooîÿwþræ îÿyÎv?þyæ*~7¦þrç §þyÆ:m+Z&÷~7æ¦Äþrç§~¶}“'~¶½W?6'~øm 'Æ ?'ÿwþrîÿyÆ Îw?&þrîÿwþrÆ ?'ÿyÆÎw?~¶þrî¦ þr§?'üÁ 'øÁ '¦ «þt†@¥&~/½aþr¦„§„�&þt†¥&† †þræÄø6§2�'�'�& þtÆå&~KþtÆå&~’þrÆ ?'Æ?$Á&~;Á&~?Á&~CÆ ? ?þr†ª§~C�' �'�'~K}“'~¶þrîÿ�þrîÿ‘þrÆ ?'?$þrç§?%Æ?'?$þrç§½W?7ö�¶�ç§ö‘¶’ç§m&~¹†ª§~þt†¥&~+†`¤�`&½a~0îç] 9Æ ôÆ ðÆ ìÆ èÆ äÆ àÆ ÜÆ ØÆ ÔÆ ÐÆ ÌÆ ÈÆ Äþr†ï¤§9þtî­r$11~O9$€Xss½F~y~‘A‘ƒ¨§ö:@ ÿÿ€°°#÷vQ "01040177"/ ) :1 0,LXO=ROMDIAG:1 1 XO=PUTRC:1 ,MAP:1,ABS:1,OVLY:1,FINI:1 sEND CHAIN¶HHHHC„ð´'Æ1~w? $Æ0 õþŸÿ|þ“ ÿ“΂æÊ ç?'Æ ×þ|ÿŸ½ç? %ÑΧ¦�@'C�\&ÿ|0æî�$§� ']'Z ñ¶„·0¦¦î9Æ)~wÿ~þ|¦ÿ|þ~9¦�*'.�.'*½W�J't�C'f�L'_ÿ€½^�S&~Êÿ‚½^�T'%Æ2 ¹6ö~'Χ? 2�.&4ÎŽ? ? $~©½ð #6¶·“ö¶ô€´�þ‚?/  ½ä2~Ѷ„·~ óÿ‚|½äþ§Œ@L&õΧ½W¼‚&ê Ò¶ö´€ô�º~ú·÷ ¸O †6΂æÄßç?&%2M' ¶~&Χ? þ|ÿ|þ€ÿxÎw_?Χ9Á &4¶'Æ3~w¶+Æ4 ô¶ƒŠ·ƒÎÿÿÿ�΂?& ?&΄? ~y~ÇÆ?'ÿ|þ|ÿ|Î|6½Ž2&þ~9Æ ? þÿŒÎ‚???ooÆ0+(� # €+ �.‹ ÿ|7Æxy~Z&÷»·3Z&Ò9&€pýý~ Î!_Æ?έoßþ_Î!Z?þ!]îÿ!0¼&%þ!]î ÿ!3¼&Îÿ!_Î!Œÿ!aÆÎ!_?' †RŒ†I— ½èS úÆ? ¶�ÿ'~ †U~ HÎ ¦ …@'ÎE¦ …@' þ{'3Îj? ,Î ?%È?%ÄÆêçÎE?%·?%³Îj?%¬?%¨Î!*? †=·3ήÆO? ? _÷3÷¶„·έßþÿ!6Î!:ÿ!8†0§§ÎCMÿ!CÎ!6?]&*þ!6ßþÆÎ!:?Á'†Á'†Á'†Á'† ? ~ Î!S? Æ€?#¶Š€·~  MDOS . !f!åWHAT?!f!cý½N ÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅ (€ 0B�COMMAND�SYNTAX�ERROR 05�NAME�REQUIRED 06�\0�DOES�NOT�EXIST 08�\0�DUPLICATE�FILE�NAME 1B�FILE�NAME�NOT�FOUND 1A�DUPLICATE�FILE�NAME 0D�OPTION�CONFLICT 30�CHAIN�ABORTED�--�BREAK�KEY 31�CHAIN�ABORTED�--�SYSTEM�ERROR�STATUS�WORD 1C�FILE�IS�DELETE�PROTECTED 24�DEVICE�NOT�READY�AT�\8 0E�INVALID�TYPE�OF�OBJECT�FILE 0F�INVALID�LOAD�ADDRESS 13�INVALID�FILE�TYPE 1E�CONFLICTING�FILE�TYPES 1F�\0�HAS�INVALID�FILE�TYPE 27�INVALID�DATA�TRANSFER�TYPE�AT�\8 22�DEVICE�ALREADY�RESERVED�AT�\8 23�DEVICE�NOT�RESERVED�AT�\8 25�FILE�NOT�OPEN�OR�ALREADY�OPEN�AT�\8 26�END�OF�FILE�AT�\8 29�BUFFER�OVERFLOW�AT�\8 2A�CHECKSUM�ERROR�AT�\8 15�LOGICAL�SECTOR�NUMBER�OUT�OF�RANGE 07�ILLEGAL�FILE�NAME 2B�FILE�IS�WRITE�PROTECTED�AT�\8 20�\0�IS�WRITE�PROTECTED 09�NO�SUCH�DEVICE 04�ILLEGAL�DRIVE�NUMBER 12�INVALID�EXECUTION�ADDRESS 0A�INVALID�DEVICE 11�INVALID�RIB 1D�TOO�MANY�SOURCE�FILES 16�ILLEGAL�START/END�SPECIFICATIONS 17�ILLEGAL�PAGE�FORMAT 14�FILE�EXHAUSTED�BEFORE�LINE�FOUND 28�END�OF�MEDIA�AT�\8 18�ILLEGAL�LINE�NUMBER�OR�RANGE 19�LINE�NUMBER�ENTERED�BEFORE�SOURCE�FILE 02�DIRECTORY�SPACE�FULL 03�DISK�SPACE�FULL 10�NOT�ENOUGH�SEGMENT�DESCRIPTOR�SPACE 2C�INVALID�DIRECTORY�ENTRY�NO.�AT�\8 2D�CANNOT�DE-ALLOCATE�ALL�SPACE-DIRECTORY�ENTRY�EXISTS�AT�\8 2E�RECORD�LENGTH�TOO�LONG�AT�\8 0C�INTERNAL�SYSTEM�ERROR�AT�\8 21�INVALID�SCALL 2F�CHAIN�OVERLAY�CANNOT�BE�FOUND�OR�LOADED 32�CHAIN�ABORTED�--�ILLEGAL�OPERATOR 33�CHAIN�ABORTED�--�UNDEFINED�LABEL 34�CHAIN�ABORTED�--�PREMATURE�END�OF�FILE ÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅ ,€ h! $0200 _"¤"·"¾g"°"È)1#  "u_"Œ"Ž"ç SYNTAX ERRORSYSTEM SECTOR COPY/VERIFY ERRORDIRECTORY READ/WRITE ERRORSOURCE FILE COPY ERROROBJECT FILE CREATION COPY ERRORCANNOT DELETE DUPLICATE NAMEDRIVE 1 SCRATCH? APPEND TO DRIVE 1?DISK NAME: DATE(MMDDYY): USER NAME: NO FILES TO COPYDELETE FILE NOS.: NEW NAME: STARTING TO COPY FILESINSUFFICIENT MEMORYENTER FILE COPY SELECTION COMMANDS: SAVE (S), DELETE (D), PRINT (P), QUIT (Q), NO MORE (CR)S, D, P, Q, (CR):.  NOT FOUND .SECTOR  OFFSET DR0- DR1-COPYING . - DUPLICATION: IS IT TO BE COPIED? NOT COPIEDCOPYINGMDOS SY OV0OV1OV2OV3OV4OV5OV6ER Ž ˆÎ OÆ?Þþ¦� 'ù� '$�;&ñ¦ßYÎ$С' Œ$ú&ô :î­ÞY â11–!+Î!a�&Î!s½.ôÎ Æ? ¦�Y'?O—)L—1–!.~$ú~&úÆ ? ~/þ–!&õJ—!9–!&íL ö–!&æ† î†š — 9†€ ÷|%9|#†—(9|&9|"9|$9–'&»z'ÆÎ#ÿ ¹Î ¹~-+–'&¦|'Æ Î"ù é $z $:A$‚C$ŠD$‘I$•L$™N$¡R${S$¥U$©V$sY$­Z$Âþ–$&΀½-öß9ß7ß/ßQþßMÆ??$„€HYI—O×PÞO}!*DV—O×P„DVF›NÙM×S—T_†?/"f–!+½. Îß*Îß,½&(Îß*Îß,½&(%>ÞMßQ|-Æ7½&(3%.Z&ö–$'-Îß*ÞOß,κÖ,–-?-$?)ß,ÎßY½&(ÞY&è~/î~/ä~/ÖÖO–PTFTF—[—\ÎßYß*Îß,Þ9¦ÆHZ&ü—;Æ×?Î$Zÿ%ÊÎ$“ÿ%ÌÎ%ÊÆ?†.·$›þ$bÿ$œ9Ö++Î$Zÿ%ÊÎ%Üÿ%ÌÎ%Ê?&–,*O J'þ$b¼%ä ¶$b±%ä9Î%Òÿ%ÊÎ$¡ÿ%ÌÎ%ÊÆ?Æ.¶$fÎ$¡H%çŒ$¦&õ¶$f„ª§9–!…&? 9z-&†<—-Æ�?49?2Î%æ† Z'§ ø†§Î%æ?5?390 $Å%DDRIVE : DISK I.D. : . !WDSCN0 *NO SDW'S* NO DIRECTORY ENTRY FOUND TOTAL NUMBER OF SECTORS : /$ TOTAL DIRECTORY ENTRIES SHOWN : /$ NO TERMINATOR FOUND IN FILE'S R.I.B. ]'/l&lÿ&êþ&ꦄ� #‹‹0m&jjî§þ&ê� Z&Ýþ&ê96†dfJ&ù29]&~'„l&l÷'—ÿ'™Î'…ÿ'”†·'˜þ'™¦æÎ'�oîà¢%Î'�l ñë©Î'�67¦‹0æ 'Z&ü§32Î'�l&ll&lj ,Ãïî¦Î'�î m&jjî§Î'�l&lj&Þþ'™O9'èd †«Š§‹Æ$†0§ Z&ì9ÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅ  A€ NAM RDR 1.B *LOADER FOR MOTOROLA FORMAT HEX TAPE *USING DIGITRONICS 2500 READER. *20 NOV 1975 D L KAUFMAN ORG $1E00 OPT O BASE EQU $ACF8 PIACR1 EQU BASE+1 PIACR2 EQU BASE+3 PIADRA EQU BASE *DATA DIR REG A DATA CHAN. PIADRB EQU BASE+2 *DATA DIR REG B ******************STROBE PB7,RDR RUN PB0 INIT CLR A STA A PIACR1 STA A PIACR2 STA A PIADRA STA A HDFLG STA A FLG1 LDS #$1FFF LDA A #$01 STA A PIADRB LDA A #$34 *CR1 OUTPUT DATA REG SELECTED STA A PIACR1 STA A PIACR2 JSR CRLF CHAR1 JSR GTCHR *HEAD OF BLOCK DISPATCH ACC B HAS A *CHAR NON NUL/RUBOUT NON DEVICE CONTROL * HEAD CMP B #'S BEQ STRTC CMP B #$0D *CAR RET BEQ RTN CMP B #$0A *LF BEQ RTN JSR FAULT *NOT BLOCK START RTN JSR GTCHR BRA HEAD STRTC JSR GTCHR *GET RECORD TYPE CHAR CMP B #'0 BEQ HDR CMP B #'1 BEQ DATAR CMP B #'9 BEQ EOFR JSR FAULT *UNKNOWN RECORD TYPE  SPC 2 *HEADER RECORD HDFLG FCB $00 HDR INC HDFLG JSR BYTEC JSR SIZE HDR1 JSR RDFRA TST BYTE BEQ HDR2 JSR TYPBYT BRA HDR1 HDR2 JMP CHAR1 *GET A NEW BLOCK *EOF RECORD EOFR CLR HDFLG JSR BYTEC JSR SIZE JSR RDFRA JMP QUIT SPC 2 *DATA RECORD BLOCK DATAR TST HDFLG BEQ DATAR2 JSR BYTEC JSR SIZE DATAR1 JSR RDFRA TST BYTE BEQ DATEND STA B 0,X INX BRA DATAR1 DATAR2 BSR FAULT *NEVER SAW START BLOCK DATEND JMP CHAR1 *HALT PROGRAM QUIT LDA B #$07 BSR CRLF BRA FL FAULT LDA B #'? FL JSR TYPBYT BRA * SPC 2 *TYPE CHAR IN B ON TTY *PRESERVES A AND B TYPBYT PSH B TYPB1 LDA B $FCF4 BIT B #$02 BEQ TYPB1 PUL B STA B $FCF5 RTS *CARRIAGE RETURN LINE FEED CRLF PSH B LDA B #$0D BSR TYPBYT LDA B #$0A  BSR TYPBYT PUL B RTS *STORE BYTE COUNT IN BYTE, INITIALIZE * PARTSU AND CHECKSUM BYTEC CLR PARTSU CLR CKSUM JSR GTCHR JSR ASCBIN JSR GTCHR JSR ASCBIN STA B BYTE RTS PARTSU RMB $1 CKSUM RMB $1 BYTE RMB $1 SPC 2 *CONVERT ASCII HEX 7BIT CHAR *IN ACC B TO BINARY IN B AND PARTSU *ADD TO CKSUM ASCBIN CMP B #$30 BLT FAULT CMP B #$40 BLT ASC1 CMP B #$47 BGE FAULT ADD B #$09 ASC1 AND B #$0F TST FLG1 BNE ASC2  INC FLG1 ASL B ASL B ASL B ASL B STA B PARTSU RTS ASC2 ADD B PARTSU STA B PARTSU ADD B CKSUM STA B CKSUM LDA B PARTSU CLR FLG1 RTS FLG1 RMB $1 *2ND FRAME FLAG SPC 2 *STORE ADDRESS SIZE IN INDEX REG *AND SIZREG,SIZREG+1 SIZE JSR RDFRA STA B SIZREG JSR RDFRA STA B SIZREG+1 LDX SIZREG RTS SIZREG RMB $2 *READ A 2 CHAR FRAME FROM TAPE *UPDATE BYTE COUNT & CHECKSUM RDFRA JSR GTCHR JSR ASCBIN JSR GTCHR RDF11 JSR ASCBIN DEC BYTE BEQ CHEKSM *LAST BYTE RDFR1 RTS *NOT LAST CHEKSM INC CKSUM BNE CKER  RTS CKER JSR FAULT *PARITY ERROR SPC 2 *GET ONE CHAR FROM TAPE TO ACC B *IGNORE NULLS AND RUBOUTS *AND X  ON ,XOFF,PUNON,PUNOFF GTCHR INC PIADRB GTCH0 LDA A PIADRB BMI GTCH0 *LOOP TO FEED SPACE GTCH1 LDA A PIADRB  BPL GTCH1 *LOOP TIL FEED HOLE DEC PIADRB *STOP READER LDA B PIADRA COM B AND B #$7F *DROP PARITY BEQ ENDCH *NULL TRY NEXT CMP B #$7F BEQ ENDCH *RUBOUT CMP B #$11 *XON BEQ ENDCH CMP B #$12 *PUNON  BEQ ENDCH CMP B #$13 *XOFF BEQ ENDCH CMP B #$14 *PUNOFF BEQ ENDCH DONE RTS ENDCH BRA GTCHR *TRY FOR NEXT CHAR PATCH RMB 1 STAK EQU $1FFF-PATCH END ÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅ I€"�NAM�MISCAN �OPT�O,NOG *�"MISSIONARIES�AND�CANNIBALS"�GAME *�ORIGINAL�PROGRAM�BY�PHILIP�N.�THEURER *�REV.�1.0�BY�MOTOROLA�MICROSYSTEMS�NOVEMBER�25,�1976 *�STARTING�ADDRESS:�0100 �SPC�1 �ORG�$0000 MISA�RMB�1 MISB�RMB�1 CANA�RMB�1 CANB�RMB�1 MISAT�RMB�1 MISBT�RMB�1 CANAT�RMB�1 CANBT�RMB�1 TRIP�RMB�1 COUNT1�RMB�1 COUNT2�RMB�1 COUNT3�RMB�1 COUNT4�RMB�1 �SPC�1 INCHNP�EQU�$F015 OUTCH�EQU�$F018 PCRLF�EQU�$F021 PDATA�EQU�$F024 PSPACE�EQU�$F02A �SPC�1 �ORG�$0100 BEGIN�LDX�#INTRO�PRINT�INSTRUCTIONS BEGIN1�JSR�PDATA BEGIN2�LDA�A�#3 �STA�A�MISA �STA�A�CANA �CLR�A �STA�A�MISB �STA�A�CANB �STA�A�TRIP �SPC�1 GAME�JSR�P2SP �JSR�P2SP �JMP�RIVER �SPC�1 CONTIN�JSR�PCRLF �TST�TRIP �BNE�RGHTAR �LDA�A�#'< �BRA�F1 �SPC�1 RGHTAR�LDA�A�#'> F1�JSR�OUTCH �JSR�OUTCH �LDX�MISA�STORE�LAST�LINE�VALUES �STX�MISAT �LDX�CANA �STX�CANAT �LDA�A�#2 �STA�A�COUNT2 �STA�A�COUNT3 LOOP�JSR�INCHNP �CMP�A�#'M �BEQ�F2 �CMP�A�#'C �BEQ�F3 �CMP�A�#'E �BEQ�F4 �LDX�#CR2LF �CMP�A�#'R �BEQ�BEGIN1 �CMP�A�#'I �BEQ�BEGIN �BRA�ERRORR �SPC�1 F4�DEC�COUNT3 �BNE�F5 �BRA�ERRORR �SPC�1 F2�TST�TRIP�MOVE�MISSIONARY �BNE�ODDMIS �TST�MISB �BNE�MISBNZ �BRA�ERRORR�NO�MISSIONARY�B,�ERROR �SPC�1 MISBNZ�DEC�MISB�MOVE�LEFT�IF�TRIP�FLAG�0 �INC�MISA �BRA�F5 �SPC�1 ODDMIS�TST�MISA �BNE�MISANZ ERRORR�JMP�ERROR�NO�MISSIONARY�A,�ERROR �SPC�1 MISANZ�DEC�MISA�MOVE�RIGHT�IF�TRIP�FLAG�NOT�0 �INC�MISB �BRA�F5 �SPC�1 F3�TST�TRIP�MOVE�CANNIBAL �BNE�ODDCAN �TST�CANB �BNE�CANBNZ �BRA�ERRORR�NO�CANNIBAL�B,�ERROR �SPC�1 CANBNZ�DEC�CANB�MOVE�LEFT �INC�CANA �BRA�F5 �SPC�1 ODDCAN�TST�CANA �BNE�CANANZ �BRA�ERRORR�NO�CANNIBAL�A,�ERROR �SPC�1 CANANZ�DEC�CANA�MOVE�RIGHT �INC�CANB F5�DEC�COUNT2 �BNE�LOOP RIVER�LDA�A�#10 �STA�A�COUNT1 �LDA�A�#$20 SLOOP�BSR�OUTCHR �DEC�COUNT1 �BNE�SLOOP �LDA�A�CANA�PRNT�CANA�VALUE �BSR�ONC �LDA�A�#'C �BSR�OC2S �LDA�A�MISA�PRINT�MISA�VALUE �BSR�ONC �LDA�A�#'M �BSR�OC2S �LDA�A�#16 �STA�A�COUNT1 F6�TST�TRIP �BNE�RGHTPT �LDA�A�#'< �BSR�OUTCHR �BRA�F7 �SPC�1 OUTCHR�JMP�OUTCH �SPC�1 RGHTPT�LDA�A�#'> �BSR�OUTCHR F7�DEC�COUNT1 �BNE�F6 �BSR�P2SP �LDA�A�CANB�PRINT�CANB�VALUE �BSR�ONC �LDA�A�#'C �BSR�OC2S �LDA�A�MISB�PRINT�MISB�VALUE �BSR�ONC �LDA�A�#'M �BSR�OUTCHR �TST�MISA�MISA�AND�CANA�=‚0??? �BNE�F9 �TST�CANA �BNE�F9 �BRA�CONGTR�YES�WIN �SPC�1 F9�LDA�A�CANA�IS�CANA�>�MISA? �CMP�A�MISA �BLE�F10 �TST�MISA�MISA�NOT�0? �BEQ�F10 �BRA�BURN�YES�LOSE �SPC�1 F10�LDA�A�CANB�IS�CANB�>�MISB �CMP�A�MISB �BLE�F11 �TST�MISB�MISB�NOT�0? �BEQ�F11 �BRA�BURN�YES�LOSE �SPC�1 F11  �COM�TRIP�COMPLEMENT�TRIP�FLAG �JMP�CONTIN �SPC�3 *SUBROUTINES �SPC�1 OC2S�BSR�OUTCHR P2SP�JSR�PSPACE �JSR�PSPACE �RTS �SPC�1 ONC�ORA�A�#$30 �BSR�OUTCHR �RTS �SPC�1 ERROR�LDA�A�#'? �BSR�OUTCHR �LDA�A�#7�BELL �BSR�OUTCHR �LDX�MISAT�RESTORE�VALUE�TO �STX�MISA�PREVIOUS�TRIP �LDX�CANAT �STX�CANA �JMP�CONTIN �SPC�1 BURN�LDX�#LOSE�PRINT�LOSE�MSG �JSR�PDATA �JMP�BEGIN2 �SPC�1 CONGTR�LDX�#WIN�PRINT�WIN�MSG �JSR�PDATA WAIT�JSR�INCHNP �CMP�A�#'I �BNE�WAIT �JMP�BEGIN �SPC�3 *MESSAGES �SPC�1 INTRO�FCB�$A,$A,$A,$A �FCC�"MISSIONARIES�AND�CANNIBALS" �FCB�$D,$A,$A,$A,0 �FCC�"ƒTHREE�MISSIONARIES�AND�THREE�" �FCC�"CANNIBALS�ARE�TRAVELING�TOGETHER" �FCB�$D,$A,,0 �FCC�"AND�COME�UPON�THE�GREAT�UGAHNA�" �FCC�"RIVER�WHICH�THEY�MUST�CROSS.‚UN-" �FCB�$D,$A,,0 �FCC�"FORTUNATELY�THEY�HAVE�ONLY�ONE�B" �FCC�"OAT�AND�IT�CAN�ONLY�HOLD�TWO�PEOPLE." �FCB�$D,$A,,0 �FCC�"TO�FURTHER�COMPLICATE�MATTERS," �FCC�"�THE�CANNIBALS�ARE�UNCIVILIZED�AND" �FCB�$D,$A,,0 �FCC�"WILL�EAT�THE�MISSIONARIES�IF�AT" �FCC�"�ANY�TIME�THEY�OUTNUMBER�THEM." �FCB�$D,$A,,0 �FCC�"ƒYOUR�MISSION�IS�TO�MOVE�ALL�THE�" �FCC�"CANNIBALS�AND�MISSIONARIES�ACROSS" �FCB�$D,$A,,0 �FCC�"THE�RIVER�WITHOUT�HAVING�ANY�OF�" �FCC�"THE�MISSIONARIES�DEVOURED�BY�THE" �FCB�$D,$A,,0 �FCC�"CANNIBALS.‚ARROWS�WILL�SHOW�WHICH" �FCC�"�WAY�THE�BOAT�IS�READY�TO�SAIL." �FCB�$D,$A,,0 �FCC�"TYPE�AN�'M'�TO�PLACE�A�MISSIONARY" �FCC�"�IN�THE�BOAT,�A�'C'�TO�PLACE�A" �FCB�$D,$A,,0 �FCC�"CANNIBAL�IN�THE�BOAT,�OR�AN�'E'�TO" �FCC�"�LEAVE�AN�EMPTY�SEAT.‚TO�RESTART" �FCB�$D,$A,,0 �FCC�"THE�GAME�TYPE�AN�'R',�OR�TO�HAVE�" �FCC�"THE�INSTRUCTIONS�REPRINTED�TYPE�AN�'I'" �FCB�$D,$A,,0 �FCC�"GOOD�LUCK!" CR2LF�FCB�$D,$A,$A,4 WIN�FCC�"ƒCONGRATULATIONS�SMART�ALEC.�" �FCC�"�CANNIBALS�ALL�OVER�THE�WORLD�WILL" �FCB�$D,$A,,0 �FCC�"STARVE�BECAUSE�OF�YOU!!!" �FCB�$D,$A,$A,4 LOSE�FCC�"ƒI�CAN�SEE�THAT�YOU�ARE�DOING" �FCC�"�YOUR�PART�FOR�ZERO�POPULATION" �FCB�$D,$A,,0 �FCC�"GROWTH." �FCB�$D,$A,$A,0 �FCC�"BURP!!!!" �FCB�7,$D,$A,$A,4 �SPC�1 �END R€ 100 NAM DUMP  110 OPT M=MDUMP  120 OPT O=ODUMP  130 OPT SYMBOL  140 * MEMORY DUMP FOR USE WITH MIKBUG.  150 * PGM LOADS INTO RAM AT $0200.  160 * CONTENTS OF A048,A049 ARE CHANGED  170 * TO $0200 (BEGINNING ADDR FOR DUMP).  180 * AFTER LOADING, PRESS "G" TO GO  190 * TO DUMP ROUTINE.  200 * IN RESPONSE TO "A?" TYPE IN START  210 * AND END ADDRESSES IN HEX.  220 * FORMAT IS AAAA M0 M1 M2 ... ME MF  230 ORG $0200  240 SDUMP LDAA #'A PRINT A?  250 JSR OUTCH  260 LDAA #'?  270 JSR OUTCH  280 JSR BADDR FETCH START & END ADDR  290 STX LOADD  300 LDAA #'   310 JSR OUTCH  320 JSR BADDR  330 STX HIADD  340 NLINE LDAA #$0D PRINT CR & LINE FEED  350 JSR OUTCH  360 LDX #$8000 DELAY .25 SEC  370 DLY1 DEX  380 BNE DLY1  390 LDAA #$0A  400 JSR OUTCH  410 LDX #LOADD PRINT ADDRESS  420 JSR OUT4HS  430 NBYTE LDX LOADD PRINT BYTE  440 JSR OUT2HS  450 * NOTE THAT X REG HAS BEEN INCREMENTED  460 CP  X HIADD CHECK FOR END OF JOB  470 BEQ EOJOB  480 STX LOADD  490 LDAA LOADD+1 CHECK FOR END OF LINE  500 ANDA #$0F  510 BNE NBYTE  520 BRA NLINE  530 EOJOB JSR OUT2HS PRINT LAST BYTE  540 LDAA #$0D  550 JSR OUTCH  560 LDX #$8000 DELAY .25 SEC  570 DLY2 DEX  580 BNE DLY2  590 LDAA #$0A  600 JSR OUTCH  610 SWI RETURN TO MIKBUG  620 LOADD RMB 2  630 HIADD RMB 2  640 BADDR EQU $E047 INPUT HEX ADDRESS  650 OUTCH EQU $E075 PRINT ASCII CHARACTER  660 OUT4HS EQU $E0C8 PRINT 4 HEX CHAR & SPACE  670 OUT2HS EQU $E0CA PRINT 2 HEX CHAR & SPACE  680 ORG $A048 TARGET PC IN MIKBUG RAM  690 FDB $0200 START ADDR (SDUMP)  700 * PGM IS RELOCATABLE BY CHANGING ORG STMT  710 * AT LINE 230 AND FDB STMT AT LINE 690.  720 END  730 MON  ÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅ@W€@�NAM�KEY-XY *�REV.�1.0�BY�MOTOROLA�MICROSYSTEMS�APRIL�1977 * * *�KEYBOARD�TO�X-Y�RECORDER�CHARACTER�CONVERSION * *�AUTHOR:�R.�SLIVJANOVSKI *�COMPANY:�SCHERING�CORP.,�BLOOMFIELD,�N.J. *�DATE:�JULY�1975 *�COMPUTER:�M6800 *�LANGUAGE:�ASSEMBLY *�VERSION:�PARALLEL�KEYBOARD�INTERFACE�(PIFLAG=0) *�SERIAL�KEYBOARD�INTERFACE�(PIFLAG=1) * *�PROGRAM�ACCEPTS�ASCII�CODED�CHARACTER�FROM�THE *�KEYBOARD�AND�TRANSLATES�IT�INTO�SERIES�OF *�X-Y�DISPLACEMENT�SEGMENTS,�FORMING�THE�SHAPE *�OF�ENTERED�CHARACTER�ON�X-Y�RECORDER * *�MINIMUM�CONFIGURATION: *�(1)�MC6800�MPU *�(2)�MC6871A�CLOCK *�(3)�MC1455�TIMER�-�POWER-ON�RESTART *�(4)�MCM6830L�ROM�(2)�-�PROGRAM�STORAGE *�(5)�MCM6810L-1�RAM�-�STACK�AND�WORKING�STORAGE *�(6)�MC6820�OR�MC6850�-�KEYBOARD�INTERFACE *�(7)�MC6820�PIA�2�-�X-Y�RECORDER�INTERFACE *�(8)�8-BIT�D/A�CONVERTER�(2) *�(9)�CURRENT�LOOP�INTERFACE�(SERIAL�ONLY) * *�ACCEPTABLE�CHARACTERS�IN�ASCII�SEQUENCE: *…!�"�(�)�+�,�-�.�/�0�1�2�3�4�5�6�7�8�9�:�;�= *…A�B�C�D�E�F�G�H�I�J�K�L�M�N�O�P�Q�R�S�T�U�V *…W�X�Y�Z * *�SPECIAL�FUNCTIONS: *„(1)�PEN�POSITIONING�COMMANDS *Œ1.�TOP„-�TYPE�"[" *Œ2.�BOTTOM�-�TYPE�"]" *Œ3.�LEFTƒ-�TYPE�"\" *Œ4.�RIGHT‚-�PRESS�SPACE�BAR *„(2)�CHARACTER�SIZE�MODIFICATION *Œ-�TYPE�"@"�FOLLOWED�BY�TWO�DIGIT *ŽHEXADECIMAL�NUMBER�REPRESENTING *ŽDESIRED�SIZE�OF�THE�CHARACTER *„(3)�PLOTTING�SPEED�MODIFICATION *Œ-�TYPE�"#"�FOLLOWED�BY�FOUR�DIGIT *ŽHEXADECIMAL�NUMBER�REPRESENTING *ŽDESIRED�DELAY�DURATION�IN *ŽEIGHT�MICROSECONDS�INCREMENTS * �SPC�2 * * *�CHARACTER�SUBROUTINE�POINTERS * * �SPC�1 �ORG�$6000 �OPT�NOG �SPC�2 CSPNT‚EQU�* �FDB�SPA,EXCL,QUOT,DELC,DUMMY,DUMMY,DUMMY,DUMMY �FDB�LP,RP,DUMMY,PLUS,COMMA,MINUS,PERD,SLASH �FDB�ZERO,ONE,TWO,THREE,FOUR,FIVE,SIX,SEVEN �FDB�EIGHT,NINE,COLON,SEMCL,LP,EQUAL,RP,DUMMY �FDB�SIZE,ACH,BCH,C,D,E,F,G �FDB�H,I,J,K,L,M,N,O �FDB�P,Q,R,S,T,U,V,W �FDB�XCH,Y,Z �FDB�VERUPˆ"[" �FDB�BACKSP‡"\" �FDB�VERDNˆ"]" �SPC�2 * * *�CHARACTER�SUBROUTINES * * SPA�FDB�H3,H1,RET  EXCL�FDB�PEND,PENU,V1,PEND,V1,PENU,S7,RET QUOT�FDB�V1,PEND,V1,PENU,H1,PEND,V2,PENU,S3,RET DELC�FDB�DELC1,RET LP�FDB�H1,PEND,S4,S1,PENU,S7,RET RP�FDB�PEND,S1,S4,PENU,S9,RET PLUS�FDB�H1,PEND,V3,PENU,S2,PEND,H3,PENU,S3,RET COMMA�FDB�PEND,V2,PENU,S1,RET MINUS�FDB�V1,PEND,H3,PENU,S3,RET PERD�FDB�PEND,PENU,H1,RET SLASH�FDB�PEND,S10,PENU,S7,RET ZERO�FDB�PEND,S10,H4,V4,H3,V3,PENU,S7,RET ONE�FDB�V1,PEND,S1,V4,PENU,H1,RET TWO�FDB�V3,PEND,H3,V2,H2,S2,H3,PENU,H1,RET THREE�FDB�PEND,H3,V3,H4,PENU,S3,PEND,H1,PENU,S3,RET FOUR�FDB�H3,PEND,V3,PENU,H4,PEND,V2,H3,PENU,S3,RET FIVE�FDB�PEND,H3,S4,H2,V1,H3,PENU,S7,RET SIX�FDB�V1,PEND,H3,V2,H4,V3,H3,PENU,S7,RET SEVEN�FDB�PEND,S10,H4,PENU,S9,H1,RET EIGHT�FDB�V1,PEND,H3,V2,H4,V3,H3,V2,PENU,S3,RET NINE�FDB�PEND,H3,V3,H4,V2,H3,PENU,S3,RET COLON�FDB�PEND,PENU,V3,PEND,PENU,S7,RET SEMCL�FDB�PEND,V2,PENU,V3,PEND,PENU,S3,RET EQUAL�FDB�PEND,H3,PENU,V1,PEND,H4,PENU,S6,H1,RET SIZE�FDB�CHSIZ,RET ACH�FDB�PEND,V3,H3,V4,PENU,V1,PEND,H4,PENU,S6,H1,RET BCH�FDB�S1,PEND,S1,H4,V4,H3,V1,H4,PENU,S6,H1,RET C�FDB�S10,PEND,H2,S2,S3,H1,PENU,H1,RET D�FDB�PEND,H1,S1,S4,H2,V4,PENU,H3,H1,RET E�FDB�H3,PEND,H4,V3,H3,PENU,S5,PEND,H1,PENU,S6,RET F�FDB�PEND,V3,H3,PENU,S5,PEND,H1,PENU,S6,RET G�FDB�S1,PEND,H1,V2,H4,V3,H3,PENU,S7,RET H�FDB�PEND,V3,PENU,V2,PEND,H3,PENU,V1,PEND �FDB�V4,PENU,H1,RET I�FDB�PEND,V3,PENU,S7,RET J�FDB�V1,PEND,V2,H3,V3,PENU,S7,RET K�FDB�PEND,V3,PENU,H3,PEND,S5,S6,PENU,H1,RET L�FDB�V3,PEND,V4,H3,PENU,H1,RET M�FDB�PEND,V3,S3,S1,V4,PENU,H1,RET N�FDB�PEND,V3,S9,V3,PENU,S7,RET O�FDB�PEND,H3,V3,H4,V4,PENU,H3,H1,RET P�FDB�PEND,V3,H3,V2,H4,PENU,S6,H1,RET Q�FDB�H3,PEND,V3,H4,V4,H3,S4,PENU,S6,RET R�FDB�PEND,V3,H3,V2,H4,PENU,H1,PEND,S3,PENU,H1,RET S�FDB�PEND,H3,V1,H4,V1,H3,PENU,S7,RET T�FDB�H1,PEND,V3,PENU,H2,PEND,H3,PENU,S7,RET U�FDB�V3,PEND,V4,H3,V3,PENU,S7,RET V�FDB�V3,PEND,S7,S8,PENU,S7,RET W�FDB�V3,PEND,V4,S1,S3,V3,PENU,S7,RET XCH�FDB�PEND,S10,PENU,H4,PEND,S9,PENU,H1,RET Y�FDB�H1,PEND,V1,S4,PENU,S3,PEND,S1,PENU,S7,RET Z�FDB�H3,PEND,H4,S10,H4,PENU,S9,H1,RET VERUP�FDB�V3,V1,RET BACKSP�FDB�H4,H2,RET VERDN�FDB�V4,V2,RET DUMMY�FDB�RET �SPC�2 * * *�SEGMENT�SUBROUTINES * * PIADA�EQU�$8008 PIACA�EQU�$8009 PIADB�EQU�$800A PIACB�EQU�$800B * PIAKBD�EQU�$8010 PIAKBC�EQU�$8011 * CHSZ�EQU�$42 XMEM�EQU�$44 YMEM�EQU�$46 DELD�EQU�$48 PIFLAG�EQU�0�0=>PARALLEL,�1=>�SERIAL�INTERFACE * �ORG�$6400 �SPC�2 DEL�LDX�DELD�DELAY�AFTER�EACH�MOVEMENT �DEX�OF�THE�PEN �BNE�*-1�(DEFAULT�-�APPROX.�360�MILISECONDS) �RTS * OUT�STA�A�XMEM�OUTPUT�NEW�PEN�COORDINATES �STA�B�YMEM �STA�A�PIADA �STA�B�PIADB �BSR�DEL �RTS * PEND�LDA�A�#$3E�PEN�DOWN �STA�A�PIACA�SET�CRA3�(CA2�GOES�HIGH) �BSR�DEL �RTS * PENU�LDA�A�#$36�PEN�UP �STA�A�PIACA�CLEAR�CRA3�(CA2�GOES�LOW) �BSR�DEL �RTS * * H13�ADD�A�XMEM H131�LDA�B�YMEM �BRA�OUT H24�SUB�A�XMEM �NEG�A �BRA�H131 V13�ADD�B�YMEM V131�LDA�A�XMEM �BRA�OUT V24�SUB�B�YMEM �NEG�B �BRA�V131 S110�TAB S1101�ADD�A�XMEM S1102�ADD�B�YMEM �BRA�OUT S25�SUB�A�XMEM �NEG�A S251�SUB�B�YMEM �NEG�B �BRA�OUT S39�TAB S3679�ADD�A�XMEM �BRA�S251 * H1�LDA�A�CHSZ �BRA�H13 H2�LDA�A�CHSZ �BRA�H24 V1�LDA�B�CHSZ �BRA�V13 V2�LDA�B�CHSZ �BRA�V24 S1�LDA�A�CHSZ �BRA�S110 S2�LDA�A�CHSZ �TAB �BRA�S25 S3�LDA�A�CHSZ �BRA�S39 S4�LDA�A�CHSZ �TAB �SUB�A�XMEM �NEG�A �BRA�S1102 V3�LDA�B�CHSZ �ASL�B �BRA�V13 H3�LDA�A�CHSZ �ASL�A �BRA�H13 V4�LDA�B�CHSZ �ASL�B �BRA�V24 H4�LDA�A�CHSZ �ASL�A �BRA�H24 S5�LDA�A�CHS Z �TAB �ASL�A �BRA�S25 S6�LDA�A�CHSZ �TAB �ASL�A �BRA�S3679 S7�LDA�A�CHSZ �TAB �ASL�B �BRA�S3679 S8�LDA�A�CHSZ �TAB �ASL�B �BRA�S1101 S9�LDA�A�CHSZ �ASL�A �BRA�S39 S10�LDA�A�CHSZ �ASL�A �JMP�S110 RET�INS �INS �RTI �SPC�2 * * *�CHANGE�CHARACTER�SIZE�("@"�TYPED) CHSIZ�BSR�FORMB �STA�A�CHSZ �BRA�OUT1 *�CHANGE�DELAY�DURATION�("#"�TYPED) DELC1�BSR�FORMB �STA�A�DELD �BSR�FORMB �STA�A�DELD+1 �BRA�OUT1 *�FORM�THE�BYTE�FROM�TWO�HEXADECIMAL�CHARACTERS *�ENTERED�FROM�THE�KEYBOARD �IFNE�PIFLAG FORMB�LDAA�#$0D�DISABLE�RECEIVE�INTERRUPT ‚STAA�ACIAC �ENDC �IFEQ�PIFLAG FORMB�LDA�A�#$06�DISABLE�RECEIVE�INTERRUPT�FROM�PIA �STAA�PIAKBC �ENDC �BSR�INHEX �ASL�A �ASL�A �ASL�A �ASL�A �TAB �BSR�INHEX �ABA �RTS�RETURN�WITH�THE�BYTE�IN�REGISTER�A *�INPUT�HEXADECIMAL�CHARACTER�FROM�THE�KEYBOARD �IFNE�PIFLAG INHEX�LDAA�ACIAC �ASRA �BCC�INHEX �LDAA�ACIAD�INPUT�CHAR �STAA�ACIAD�ECHO�IT �ENDC �IFEQ�PIFLAG INHEX�LDA�A�PIAKBC �ASL�A �BCC�INHEX�WAIT�FOR�"IRQA1" �LDA�A�PIAKBD�INPUT�A�CHARACTER �ENDC �SUB�A�#$30 �BMI�PEXIT�NOT�HEX �CMP�A�#$09 �BLE�EXIT �CMP�A�#$11 �BMI�PEXIT�NOT�HEX �CMPA�#$16 �BGT�PEXIT�NOT�HEX �SUBA�#7 EXIT�RTS PEXIT�INS �INS �INS �INS �IFNE�PIFLAG OUT1�LDAA�#$8D�ENABLE�INTERRUPTS �STAA�ACIAC �ENDC �IFEQ�PIFLAG OUT1�LDA�A�#$07�ENABLE�RECEIVE�INTERRUPT �STA�A�PIAKBC�FROM�PIA �ENDC �RTS �SPC�2 * * *�KEYBOARD�TO�X-Y�RECORDER * *�MAIN�PROGRAM * * STACK�EQU�$3F * START�LDS�#STACK�INITIALIZE�STACK�POINTER �IFNE�PIFLAG �LDAA�#$03�RESET�ACIA �S7AA�ACIAC �ENDC �COM�PIADA�ALL�BITS�OF�PIA2�SIDE�A�-�OUTPUT �COM�PIADB�ALL�BITS�OF�PIA2�SIDE�B�-�OUTPUT �LDA�A�#$36�CA2�FOLLOWS�CRA3 �STA�A�PIACA�INITIALY�ZERO�-�PEN�UP �STA�A�PIACB�SAME�FOR�CB2 �CLR�PIADA�SET�X�AND�Y�DISPLACEMENT�INITIALY �CLR�PIADB�TO�ZERO �CLR�XMEM �CLR�YMEM �LDA�A�#5�SET�UP�DEFAULT�CHARACTER�SIZE �STA�A�CHSZ �LDX�#$AFFF�SET�UP�DEFAULT�DELAY�DURATION �STX�DELD *�PIA1�CHARACTERISTICS: *†-�POSITIVE�TRANSITION�ON�CA1�SETS�CRA-7�HIGH *†-�IRQA�ENABLED �IFNE�PIFLAG �LDAA�#$8D �STAA�ACIA�C �ENDC �IFEQ�PIFLAG �LDA�A�#$07 �STA�A�PIAKBC �ENDC * �CLI�ENABLE�INTERRUPTS �WAI�WAIT�FOR�INTERRUPT�LOOP �BRA�*-1 �SPC�2 * * *�KEYBOARD�TO�X-Y�RECORDER * *�INTERRUPT�SERVICE�ROUTINE * * POINTR�EQU�$4A SAVEX�EQU�$4C * INTRPT�EQU�* �IFNE�PIFLAG �LDAB�ACIAD �STAB�ACIAD �ENDC �IFEQ�PIFLAG �LDAB�PIAKBD �ENDC �CMP�B�#$20�VALID�CHARACTER�RANGES�FROM �BLT�RETURN�$20�(SPACE)�TO�$5D�("]") �CMP�B�#$5D �BGT�RETURN �SUB�B�#$20�FORM�THE�POINTER�TO�CHARACTER �ASL�B�SUBROUTINE�ADDRESSES �LDX�#CSPNT�MAINTAIN�POSITION�INDEPENDENT�CODE �STX�POINTR �ADD�B�POINTR+1 �BCC�SKIP �INC�POINTR SKIP�STA�B�POINTR+1 �LDX�POINTR �LDX�0,X�GET�THE�CHARACTER�SUBROUTINE�ADDRESS �STX�SAVEX�SAVE�IT LOOP�LDX�0,X�GET�THE�SEGMENT�SUBROUTINE�ADDRESS �JSR�0,X�EXECUTE�THE�SEGMENT�SUBROUTINE �LDX�SAVEX �INX�ACCESS�NEXT�SEGMENT�SUBROUTINE �INX �STX�SAVEX �BRA�LOOP RETURN�RTI�INVALID�CHARACTER�RETURN �SPC�2 * * *�INTERRUPT�MEMORY�ASSIGNMENT * * �ORG�$67F8 �SPC�2 �FDB�INTRPT�HARDWARE �FDB�INTRPT�SOFTWARE �FDB�START�NMI �FDB�START�RESTART �SPC�5 �END /* ÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅ  h€ �NAM�CRCC �OPT�O BUFFER�EQU�$0000�START�OF�BUFFER EBUF�EQU�$0010�END�OF�BUFFER POL�EQU�$94�POLYNOMIAL�FOR�CASSETTE�CRCC�CHECKING �SPC�2 * * �ORG�$00FC�MEMORY�LOCATIONS XTEMP�RMB�2�TEMPORARY�X�STORAGE CR�RMB�1�CRCC�CHECK�CHARACTER�STORAGE TEMP�RMB�1�TEMPORARY�STORAGE * * * �ORG�$0100 SCRCC�PSH�B�STORE�PRESENT�VALUES �PSH�A �STX�XTEMP �CLR�CR�CLEAR�CR�INITIALLY �LDX�#BUFFER�BEGINNING�OF�DATA�BUFFER S1�LDA�A�0,X�DATA�WORD �STA�A�TEMP�DATA�WORD�TO�TEMP �LDA�A�#$80�ACCA�POINTS�TO�BIT�TO�BE�INTERROGATED SCR1�ASL�CR�SHIFT�0�INTO�LOW�CR,SHIFT�HIGH�CR�TO�CY �BIT�A�TEMP�IS�CURRENT�BIT�0�OR�1 �BEQ�SCR2�IF�EQ,�CURRENT�BIT�=0 �BCS�NOCHA�BIT=1,FEEDBACK�FROM�CRCC=1,NO�CHANGE�TO�CR �BRA�CHANG�BIT=1,FEEDBACK�=0,CHANGE�CR SCR2�BCC�NOCHA�BIT=0,FEEDBACK=0,�NO�CHANGE�TO�CR CHANG�LDA�B�#POL�BIT=0,FEEDBACK=2,FEEDBACK=0 �EOR�B�CR�DO�EXCLUSIVE�OR�WITH�CR �STA�B�CR NOCHA�LSR�A�INTERROGATE�NEXT�BIT �BNE�SCR1 �INX�WORD�FINISHED,GO�TO�NEXT�WORD �CPX�#EBUF�IS�BUFFER�DONE? �BNE�S1 �PUL�A�FINISHED,�RESTORE�VALUES �PUL�B �LDX�XTEMP �RTS�RETURN�TO�CALLING�ROUTINE * * * *TEST�PROGRAM�WILL�CALCULATE�CR�FOR�LOCATING�0000-000F *TAKE�CR�AND�PUT�IT�AT�END�OF�BUFFER(0010)THEN�CHANGE *THE�SCRCC�PROGRAM�TO�ALLOW�FOR�ONE�MORE�WORD�IN�THE *BUFFER�THEN�CALCULATE�THE�CR�FOR�THE�ENLARGED�BUFFER. *AT�THE�END�OF�THIS�PROCEDURE,�CR�AND�ACCA=0�INDICATING *A�CORRECT�CRCC TEST�LDS�#$007F �BSR�SCRCC�CALCULATE�CR�FOR�LOCATIONS�0-F �LDA�A�CR�PUT�CR�AT�END�OF�BUFFER �LDX�#EBUF �STA�A�0,X �INC�NOCHA+6�INCREASE�VALUE�OF�EBUFFER�IN�PROGRAM �BSR�SCRCC �DEC�NOCHA+6�RESTORE�VALUE�OF�EBUFFER�IN�PROGRAM �LDA�A�CR �SWI�SET�BREAKPOINT�ERROR�IN�EXORCISOR�FOR�EXAMINATION �END ÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅ l€�NAM�DECODE *‚REV.�1.0�BY�MOTOROLA�MICROSYSTEMS�APRIL�1977 �OPT�O,NOG XBUG�EQU�$F564 AFLG�EQU�$80 BFLG�EQU�$40 IMMFLG�EQU�$20 BRFLG�EQU�$10 E4FLG�EQU�$08 E2FLG�EQU�$04 XFLG�EQU�$06 * �ORG�$2000 BEGIN�BSR�CRLF �BSR�CRLF �LDX�#MSG1 �BSR�PLMSG �LDX�#ADDR �BSR�INHEX �LDX�#MSG2 �BSR�PLMSG �LDX�#ENDAD �BSR�INHEX �TST�B �BNE�*+5 �JMP�XBUG �BSR�CRLF TEST�JSR�CRLF �LDX�#ADDR �LDA�A�0,X �LDA�B�1,X �SUB�B�3,X �SBC�A�2,X �BCS�START �BRA�BEGIN PLMSG�JMP�$F024 INHEX�JMP�$F00F OUT4HS�JMP�$F01E OUT2HS�JMP�$F01B CRLF�JMP�$F021 START�BSR�OUT4HS �LDX�ADDR �BSR�OUT2HS �LDX�ADDR �LDA�A�0,X �STA�A�BYTE1 �LDX�1,X �STX�BYTE2 �CLR�B �CMP�A�#$8D �BNE�Z1 �LDA�A�#$21 Z1‚EOR�A�#$20 �BIT�A�#$F0 �BNE�Z15 �PAGE �JMP�LK2 Z15�EOR�A�#$12 �BIT�A�#$FB �BNE�Z2 �ORA�B�#AFLG Z2�EOR�A�#$01 �BIT�A�#$FB �BNE�Z3 �ORA�B�#BFLG Z3�EOR�A�#$33 �BIT�A�#$C0 �BEQ�LK1 �EOR�A�#$40 �BIT�A�#$F0 �BNE�Z4 �ORA�B�#AFLG Z4�EOR�A�#$10 �BIT�A�#$F0 �BNE�Z5 �ORA�B�#BFLG Z5�EOR�A�#$30 �BIT�A�#$30 �BNE�Z6 �ORA�B�#XFLG Z6�EOR�A�#$10 �BIT�A�#$30 �BNE�Z7 �ORA�B�#E4FLG Z7�EOR�A�#$70 �BMI�TOP �AND�A�#$4F LK1�LDX�#TABLE1 LK1A�CMP�A�0,X �BEQ�FOUND �INX �INX �INX �INX �CPX�#ENTBL1 �BNE�LK1A FOUND�LDA�A�1,X � STA�A�CHAR1 �LDX�2,X �STX�CHAR2 �BRA�PRINT TOP�EOR�A�#$0C �BIT�A�#$0C �BEQ�ODD �ORA�B�#BFLG �BIT�A�#$40 �BNE�*+4 �ORA�B�#AFLG �BIT�A�#$30 �BNE�*+4 �ORA�B�#IMMFLG �AND�A�#$8F BACK�EOR�A�#$0C �ORA�B�#E2FLG �AND�A�#$CF �BRA�LK1 ODD�BIT�A�#$3D �BNE�*+6 �ORA�B�#E4FLG �ORA�B�#IMMFLG �BRA�BACK LK2�ORA�B�#BRFLG �LDX�#TABLE2 �ASL�A �AND�A�#$1E �STA�A�PNT1 �FCB�$EE PNT1�FCB�$00 �STX�CHAR2 �LDA�A�#'B �STA�A�CHAR1 PRINT�LDX�#BYTE2 �BSR�INCAD �BIT�B�#$08 �BEQ�NOT4 �JSR�OUT4HS �BSR�INCAD �BSR�INCAD �BRA�ARG INCAD�INC�ADDR+1 �BNE�*+5 �INC�ADDR �RTS SPACE�PSH�A �BSR�OUTS �PUL�A �DEC�A �BNE�SPACE �RTS OUTS�JMP�$F02A PMESS�JMP�$F027 NOT4�BIT�B�#$14 �BNE�OVER �LDA�A�#$5 �BSR�SPACE �BRA�ARG OVER�BSR�INCAD �JSR�OUT2HS �LDA�A�#$02 �BSR�SPACE ARG�LDA�A�#$07 �BSR�SPACE �LDX�#CHAR1 �BSR�PMESS �PAGE �ROL�B �BCS�PRNA �BMI�PRNB IMM�ROL�B �ROL�B �BCS�PRNIMM �BMI�BRANCH ETEST�LDX�#BYTE2 �ROL�B �ROL�B �BCS�P4D �ROL�B �BMI�PRNX �BCC�OUT P2D�LDA�A�#$24 �BSR�OUCH �JSR�OUT2HS �TST�B �BMI�PRNX1 OUT�JMP�TEST OUCH�JMP�$F018 PRNA�LDA�A�#'A �BSR�OUCH �BSR�OUTS �BRA�IMM PRNB�LDA�A�#'B �BRA�PRNA+2 PRNIMM�LDA�A�#$23 �BSR�OUCH �BRA�ETEST P4D�LDA�A�#$24 �BSR�OUCH �JSR�OUT4HS �BRA�OUT PRNX�LDA�A�0,X �CMP�A�#$09 �BHI�P2D �ORA�A�#$30 �BSR�OUCH PRNX1�LDA�A�#$2C �BSR�OUCH �LDA�A�#$58 �BSR�OUCH �BRA�OUT BRANCH�LDA�A�#$8 �ASR�BYTE2 �ROR�BYTE3 �DEC�A �BNE�BRANCH+2 �LDX�#ADDR �LDA�A�0,X �LDA�B�1,X �ADD�B�6,X �ADC�A�5,X �PAGE �STA�A�5,X �STA�B�6,X �LDX�#BYTE2 �BRA�P4D TABLE1�FCB�$01 �FCC�3,NOP �FCB�$06 �FCC�3,TAP �FCB�$07 �FCC�3,TPA �FCB�$08 �FCC�3,INX �FCB�$09 �FCC�3,DEX �FCB�$0A �FCC�3,CLV �FCB�$0B �FCC�3,SEV �FCB�$0C �FCC�3,CLC �FCB�$0D �FCC�3,SEC �FCB�$0E �FCC�3,CLI �FCB�$0F �FCC�3,SEI �FCB�$10 �FCC�3,SBA �FCB�$11 �FCC�3,CBA �FCB�$16 �FCC�3,TAB �FCB�$17 �FCC�3,TBA �FCB�$19 �FCC�3,DAA �FCB�$1B �FCC�3,ABA �FCB�$30 �FCC�3,TSX �FCB�$31 �FCC�3,INS �FCB�$32 �FCC�3,PUL �FCB�$33 �FCC�3,PUL �FCB�$34 �FCC�3,DES �FCB�$35 �FCC�3,TXS �FCB�$36 �FCC�3,PSH �FCB�$37 �FCC�3,PSH �PAGE �FCB�$39 �FCC�3,RTS �FCB�$3B �FCC�3,RTI �FCB�$3E �FCC�3,WAI �FCB�$3F �FCC�3,SWI �FCB�$40 �FCC�3,NEG �FCB�$43 �FCC�3,COM �FCB�$44 �FCC�3,LSR �FCB�$46 �FCC�3,ROR �FCB�$47 �FCC�3,ASR �FCB�$48 �FCC�3,ASL �FCB�$49 �FCC�3,ROL �FCB�$4A �FCC�3,DEC �FCB�$4C �FCC�3,INC �FCB�$4D �FCC�3,TST �FCB�$4E �FCC�3,JMP �FCB�$4F �FCC�3,CLR �FCB�$80 �FCC�3,SUB �FCB�$81 �FCC�3,CMP �FCB�$82 �FCC�3,SBC �FCB�$84 �FCC�3,AND �FCB�$85 �FCC�3,BIT �FCB�$86 �FCC�3,LDA �FCB�$87 �FCC�3,STA �FCB�$88 �FCC�3,EOR �FCB�$89 �FCC�3,ADC �FCB�$8A �FCC�3,ORA �FCB�$8B �FCC�3,ADD �PAGE �FCB�$8C �FCC�3,CPX �FCB�$8D �FCC�3,JSR �FCB�$8E �FCC�3,LDS �FCB�$8F �FCC�3,STS �FCB�$CE �FCC�3,LDX �FCB�$CF �FCC�3,STX ENTBL1�FCB�$00 �FCC�3,*** TABLE2�FCC�'RASRHILSCCCSNEEQ' �FCC�'VCVSPLMIGELTGTLE' MSG1�FCC�'BEGIN:�' �FCB�4 MSG2�FCC�'END:�' �FCB�4 ADDR�RMB�2 ENDAD�RMB�2 BYTE1�RMB�1 BYTE2�RMB�1 BYTE3�RMB�1 CHAR1�RMB�1 CHAR2�RMB�1 CHAR3�RMB�1 �FCB�$20,$04 �END ÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅ u€* *�PRTMSG *�PRINTS�A�MESSAGE�BY�NUMBER.‚WHEN�CALLED, *�X�SHOULD�CONTAIN�THE�LOCATION�OF�THE *�MESSAGE�TABLE,�AND�B�SHOULD�CONTAIN�THE *�MESSAGE�NUMBER,�A�NON-NEGATIVE�INTERGER. *�IN�THE�MESSAGE�TABLE,�A�MESSAGE�IS *�TERMINATED�BY�THE�#�SYMBOL.‚ *�THE�TABLE�MUST�BE�TERMINATED�BY�##. *�IF�THE�MESSAGE�IS�OUTPUT,�B�RETURNS *�WITH�O;�OTHERWISE�-1. * �SPC�2 PRTMSG�CLC TSTNR�TSTB�IS�THIS�THE�MESSAGE? �BNE�SKIP1 MSGCHR�LDAA�X �CMPA�#$23�#�IS�END�OF�MESSAGE. �BNE�OUTIT �RTS�RETURN�O�IN�B. OUTIT�JSR�OUTPRC �INX �BRA�MSGCHR SKIP2�INX SKIP1�LDAA�#$23 �CMPA�X �BNE�SKIP2 �SBCB�#1�DECREMENT�MESSAGE�NUMBER. �INX �CMPA�X�##�IS�STOPPER. �BNE�TSTNR �LDAB�#-1�RETURN�-1�IN�B. �RTS * OUTPRC�EQU�$E1D1 �END ÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅHw€I�NAM�DISKFILE�TRANSFER�9/13/76 **************************************************** *REVISION�1.0 *THIS�PROG.�SUPERCEDES�"DISKFILE�TRANSFER�4/21/76"�* *²* *²* *B.�W.�SAUNDERS¤* *SPRAGUE�ELECTRIC�CO.ž* *87�MARSHALL�ST.£* *NORTH�ADAMS,�MA.�01247œ* *²* *²* *THE�PURPOSE�OF�THIS�PROGRAM�IS�TO�GIVE�EXORCISER‚* *USERS�WITH�SINGLE�DRIVE�UNIT�EXORDISKS�THE�CAPA-‚* *BILITY�TO�COPY�FILES�FROM�ONE�DISKETTE�TO�ANOTHER�* *WITHOUT�USING�PAPER�TAPE�OR�CASSETTE�AS�AN�INTER-�* *MEDIATE�MEDIUM.£* *²* *THE�MAXIMUM�FILE�SIZE�WHICH�CAN�BE�TRANSFERRED„* *IS�123�SECTORS�(007B�HEX).‚THIS�SIZE�IS�BASED�ON�* *A�MINIMUM�USER�MEMORY�OF�16K�BYTES�CONTIGUOUS…* *FROM�0000�TO�3FFF.‚FOR�LARGER�OR�SMALLER�USER„* *MEMORIES,�THE�PROGRAM�MAY�BE�READILY�CHANGED†* *USING�THE�MAID�EXAMINE�AND�CHANGE�MEMORY�FUNC-„* *TION.‚TO�ALTER�THE�PROGRAM�SOLVE�THE�FOLLOWINGƒ* *EQUATION�(ALL�VALUES�IN�HEXADECIMAL):�* *²* *‚(USER'S�MEMORY�SIZE�-�0280)/0080�=�XXXX‰* *²* *THEN�USE�THE�MAID�EXAMINE�AND�CHANGE�MEMORY�DATA‚* *FUNCTION�TO�PLACE�THE�RESULT�IN�LOCATIONS�008E„* *(MSB)�AND�0094�(LSB).‚THE�MAXIMUM�POSSIBLE�FILE‚* *SIZE�ALLOWING�65K�OF�RAM,�LESS�THE�AREA�OCCUPIED‚* *BY�THE�EXBUG�AND�FDOS-II�RESIDENT�FIRMWARE�IS…* *459�SECTORS�(01CB�HEX).›* *²* *²* *TO�EXECUTE:‚LOAD,�FITROš* *�GO�TO�MAID›* *�TYPE�50;Gœ* *²* *TO�EXIT:�(1)�PRESS�"ABORT"˜* *‰(2)�PRESS�"RESTART"–* **************************************************** �PAGE **************************************************** *‹DESCRIPTION�OF�OPERATION�* **************************************************** *²* *(1)�THE�USER�INITIATES�PROGRAM�EXECUTION�USING�THE* *MAID�"GO�TO"�FUNCTION.œ* *²* *(2)�THE�PROGRAM�PROMPTS�THE�USER�TO�ENTER�A�5…* *CHARACTER�FILENAME�BY�PRINTING�"FILENAME:�".†* *²* *(3)�THE�USER�THEN�ENTERS�THE�FULL�5�CHARACTER…* *FILENAME,�INCLUDING�TRAILING�SPACES.‚IF�AN�ERROR�* *IS�MADE�ENTERING�THE�FILENAME,�THE�USER�SHOULD„* *PRESS�THE�"ABORT"�OR�"RESTART"�SWITCH�AND�RESTART�*� *THE�PROGRAM.¦* *²* *(4)�IMMEDIATELY�AFTER�THE�5TH�CHARACTER�IS�TYPED�A* *CR,�LF,�NULL�IS�SENT�TO�THE�TERMINAL�AND�A�6.8�SEC* *TIME�DELAY�OCCURS.‚THE�TIME�DELAY�ALLOWS�THE�DISK* *TO�COME�UP�TO�SPEED.ž* *²* *(5)�THE�PROGRAM�THEN�SEARCHES�THE�FILE�DIRECTORY‚*  *OF�THE�DISKETTE�IN�THE�DRIVE�UNIT�FOR�THE�FILENAME* *IF�THE�FILENAME�IS�NOT�FOUND,�"NSF"�(NO�SUCH�FILE)* *IS�TYPED�AND�THE�PROGRAM�RETURNS�TO�STEP�(2).…* *²* *(6)�IF�THE�FILENAME�IS�FOUND,�THE�FILESIZE�IS…* *CHECKED�TO�DETERMINE�IF�THE�FILE�WILL�FIT�INTO�THE* *USER'S�MEMORY.‚IF�THE�FILE�IS�TOO�LARGE�"FTL"„* *(FILE�TOO�LARGE)�IS�TYPED�AND�THE�PROGRAM�RETURNS�* *TO�STEP�(2).¦* *²* *(7)�IF�THE�FILE�IS�NOT�TOO�LARGE,�THE�FILE�IS�READ* *INTO�MEMORY.¦* *²* *(8)�THE�PROGRAM�NOW�PROMPTS�THE�USER�TO�PLACE�THE�* *DISKETTE�TO�WHICH�IT�IS�DESIRED�TO�COPY�THE�FILE‚* *(THE�TARGET�DISKETTE)�IN�THE�DRIVE�UNIT�BY�TYPING�* *"CHNGE�DSKS-TYPE�RETURN"�(EXCHANGE�DISKETTES-TYPE�* *RETURN).ª* *²* *(9)�AFTER�THE�DISKETTES�ARE�SWITCHED,�THE�USER„* *SHOULD�PRESS�THE�"RETURN"�KEY.‚IF�THE�USER‡* *PRESSES�ANY�OTHER�KEY,�THE�PROGRAM�RETURNS�TO…* *STEP�(8).©* *²* *(10)�WHEN�THE�"RETURN"�KEY�IS�PRESSED,�A�CR,�LF,‚* *NULL�IS�GENERATED,�AND�A�6.8�SECOND�TIME�DELAY„* *OCCURS.‚THE�PROGRAM�SEARCHES�THE�FILE�DIRECTORY‚* *OF�THE�TARGET�DISKETTE�FOR�THE�FILENAME.‚IF�THE‚* *FILENAME�IS�FOUND,�"DFN"�(DUPLICATE�FILE�NAME)�IS�* *TYPED�AND�THE�PROGRAM�RETURNS�TO�STEP�(8)‰* **************************************************** �PAGE **************************************************** *(11)�IF�THE�FILENAME�IS�NOT�FOUND,�THE�FILE�SIZE‚* *IS�CHECKED�TO�DETERMINE�IF�THE�FILE�WILL�FIT�INTO�* *THE�TARGET�DISKETTE.‚IF�THE�FILE�IS�TOO�LARGE,ƒ* *"NR"�(NO�ROOM)�IS�TYPED�AND�THE�PROGRAM�RETURNS�TO* *STEP�(8).©* *²* *(12)�IF�THE�FILE�IS�NOT�TOO�LARGE,�THE�FILE�IS„* *WRITTEN�TO�THE�TARGET�DISKETTE,�THE�FILE�DIRECTORY* *IS�UPDATED,�AND�THE�PROGRAM�RETURNS�TO�STEP�(2).‚* **************************************************** �PAGE �OPT�O,NOG �ORG�$4 **************************************************** *�DISK�PARAMETERS“* **************************************************** ISIZE�RMB�2�IFILE�SIZE ITRK�RMB�1�IFILE�TRACK ISCTR�RMB�1�IFILE�SECTOR ICNTR�RMB�1�IFILE�BUFFER�COUNTER OSIZE�RMB�2�OFILE�SIZE OTRK�RMB�1�OFILE�TRACK OSCTR�RMB�1�OFILE�SECTOR OCNTR�RMB�1�OFILE�BUFFER�COUNTER **************************************************** *ˆEXBUG�&�EDOS�RESIDENT�SUBROUTINES‰* **************************************************** RI�EQU�$E91B�FDOS�RI�ROUTINE WRT�EQU�$E98E�FDOS�WRT�ROUTINE PDATA�EQU�$FA33�EXBUG�I/O�ROUTINES PDATA1�EQU�$FA35 PCRLF�EQU�$FA41 INCHP�EQU�$FAA0 **************************************************** *�VARIABLE�STORAGE�&�TEXTŽ* **************************************************** FSIZE�RMB�2�FILE�SIZE ATTR�RMB�1�FILE�ATTRIBUTES SCTR�RMB�1�FILE�DIRECTORY�SECTOR�# SAVEX�RMB�2�TEMPORARY�-X-�STORAGE FLNM�RMB�2�TEMP�X�STORAGE�USED BUFF�RMB�2�BY�SEARCH�ROUTINE PNTR�RMB�2�FILE�DIRECTORY�POINTER FLNAME�RMB�5�FILE�NAME INPUT1�FCC�/FILENAME:�/�TTY�OUTPUTS �FCB�$04 NOFILE�FCC�/NSF/ �FCB�$04 CHDISK�FCC�/CHNGE�DSKS-TYPE�RETURN/ �FCB�$04 DUPFIL�FCC�/DFN/ �FCB�$04 TOOBIG�FCC�/FTL/ �FCB�$04 NOROOM�FCC�/NR/ �FCB�$04 BUFF1�EQU�$200�FILE�DIRECTORY�BUFFER BUFF2�EQU�$280�FILE�BUFFER AECHO�EQU�$FF53�USED�BY�EXBUG�INCHP�ROUTINE �PAGE **************************************************** *ŽDISK�FILE�TRANSFER’* **************************************************** �ORG�$50 �CLR�AECHO INPUT2�LDX�#INPUT1�PRINT�"FILE�NAME:�" �JSR�PDATA �LDX�#FLNAME�INPUT�5�CHARACTER�FILENAME R0�JSR�INCHP �STAA�0,X �INX �CPX�#FLNAME+5 �BNE�R0 �JSR�PCRLF �JSR�SEARCH� SEARCH�FD�FOR�FILE�NAME �TSTA�FILE�NAME�FOUND�? �BEQ�RDFILE�YES-CONTINUE �LDX�#NOFILE�NO-PRINT�"NSF" �JSR�PDATA1 �BRA�INPUT2�RETURN�TO�INPUT RDFILE�LDAA�5,X�READ�ATTRIBUTES �STAA�ATTR�STORE�FOR�LATER�USE �LDAA�6,X�OPEN�INPUT�FILE �STAA�ITRK �LDAA�7,X �DECA �STAA�ISCTR �LDX�8,X �STX�ISIZE �STX�FSIZE�STORE�FILE�SIZE�FOR�LATER�USE �LDAA�FSIZE�FILE�TOO�LARGE�FOR�BUFFER�? �CMPA�#$00 �BHI�L1 �LDAA�FSIZE+1 �CMPA�#$7C �BHI�L1 �BRA�L2 L1�LDX�#TOOBIG�YES-PRINT�"FTL" �JSR�PDATA1 �BRA�INPUT2�RETURN�TO�INPUT L2�LDX�#BUFF2�NO-READ�FILE�INTO�RAM �JSR�DISKRD INPUT3�LDX�#CHDISK�PRINT�"CHANGE�DISKS- �JSR�PDATA�TYPE�RETURN" �JSR�INCHP�INPUT�RESPONSE �CMPA�#$0D�RESPONSE�=�CR�? �BEQ�GO2�YES-CONTINUE �BRA�INPUT3�N0-GET�ANOTHER�RESPONSE GO2�JSR�PCRLF �JSR�SEARCH�SEARCH�FD�FOR�FILE�NAME �TSTA�FILE�NAME�FOUND�? �BNE�GO3�NO-CONTINUE �LDX�#DUPFIL�YES-PRINT�"DFN" �JSR�PDATA �BRA�INPUT3�RETURN�TO�CHANGE GO3�LDAA�FLNAME�UPDATE�FD�WITH�FILENAME �STAA�0,X �LDAA�FLNAME+1 �STAA�1,X �LDAA�FLNAME+2 �STAA�2,X �LDAA�FLNAME+3 �STAA�3,X �LDAA�FLNAME+4 �STAA�4,X �LDAA�ATTR�OPEN�OUTPUT�FILE�TO �STAA�5,X�WRITE�FILE�TO�DISK, �LDAA�FSIZE�ALSO�UPDATE�FILE� �STAA�8,X�DIRECTORY �LDAA�FSIZE+1 �STAA�9,X �LDAB�6,X �STAB�OTRK �LDAA�7,X �STAA�OSCTR �LDX�8,X �DEX �STX�OSIZE TB3�INCA�IS�THERE�ENOUGH�ROOM�ON �CMPA�#26�DISK�FOR�THIS�FILE�? �BLS�TB1 �INCB �CMPB�#76 �BLS�TB2 �LDX�#NOROOM�NO-PRINT�"NR" �JSR�PDATA �BRA�INPUT3 TB2�LDAA�#1 TB1�DEX �BNE�TB3 �LDX�#BUFF2�YES-WRITE�FILE�TO�DISK �BSR�DISKWT �LDAA�OSCTR�SAVE�NEXT�AVAILABLE�STARTING �PSHA�TRACK�&�SECTOR�DATA�ON�STACK �LDAA�OTRK �PSHA �LDX�PNTR�IS�THIS�LAST�ENTRY�IN�THIS �CPX�#BUFF1+110�SECTOR�OF�FD�? �BNE�EOFDUD�NO-WRITE�EOF�DATA�IN�NEXT�FCB �CLR�OTRK�YES-WRITE�THIS�SECTOR�TO �INC�SCTR�FD,�WRITE�EOF�DATA�IN�FIRST �LDAA�SCTR�FCB�OF�NEXT�SECTOR �STAA�OSCTR �LDX�#1 �STX�OSIZE �LDX�#BUFF1 �BSR�DISKWT �LDX�#BUFF1-11 EOFDUD�LDAB�#11�WRITE�EOF�CHARACTERS�AND EOF1�INX�DATA�IN�FD �DECB �BNE�EOF1 �LDAB�#5 �LDAA�#'* EOF2�STAA�0,X �INX �DECB �BNE�EOF2 �LDAA�#$FF �STAA�0,X �PULA� �STAA�1,X �PULA �STAA�2,X �CLR�OTRK �INC�SCTR �LDAA�SCTR �STAA�OSCTR �LDX�#1 �STX�OSIZE �LDX�#BUFF1�WRITE�FD�TO�DISK �BSR�DISKWT �JMP�INPUT2 �PAGE **************************************************** *DISKWT�WRITES�THE�OUTPUT�FILE�DEFINED�BY�OTRK,„* *OSCTR,�OSIZE�AND�STARTING�AT�-X-.‘* **************************************************** DISKWT�CLR�OCNTR OBYTE�LDAA�0,X �STX�SAVEX �JSR�WRT �LDX�SAVEX �INX �TST�OSIZE �BNE�OBYTE �TST�OSIZE+1 �BNE�OBYTE �RTS **************************************************** *DISKRD�READS�THE�INPUT�FILE�DEFINED�BY�ITRK,�ISCTR* *AND�ISIZE.‚THE�FILE�IS�STORED�BEGINNING�AT�-X-.‚* **************************************************** DISKRD�CLR�ICNTR IBYTE�STX�SAVEX �JSR�RI �BCS�RET �LDX�SAVEX �STAA�0,X �INX �BRA�IBYTE RET�RTS �PAGE **************************************************** *SEARCH�SEARCHES�THE�FILE�DIRECTORY�OF�THE�DISKETTE* *IN�THE�DRIVE�UNIT�FOR�-FLNAME-.‚IF�FILENAME�ISƒ* *FOUND�SEARCH�RETURNS�-X-�=�1ST�BYTE�OF�FCB,�ANDƒ* *-A-�=�0.‚IF�FILENAME�IS�NOT�FOUND,�SEARCH�RETURNS* *PNTR�=�-X-�=�1ST�BYTE�OF�NEXT�VACANT�FCB�,�-A-�=�1* **************************************************** SEARCH�BSR�TIMER �LDAA�#2 �STAA�SCTR CP009�CLR�ITRK �LDX�#2 �STX�ISIZE �INC�SCTR �LDAA�SCTR �STAA�ISCTR �LDX�#BUFF1 �BSR�DISKRD �LDX�#FLNAME �STX�FLNM �LDX�#BUFF1 CP002�LDAB�#5 CP010�LDAA�0,X � INX �STX�BUFF �LDX�FLNM �CMPA�0,X �BNE�CP001 �INX �STX�FLNM �LDX�BUFF �DECB �BNE�CP010 �BSR�CP003 �CLRA �RTS CP001�LDX�#FLNAME �STX�FLNM �LDX�BUFF CP004‚DECB �BEQ�CP006 CP005�INX �CMPB�#$FB �BNE�CP004 �CPX�#BUFF1+121 �BNE�CP002 �BRA�CP009 CP006�LDAA�#$FF �CMPA�0,X �BNE�CP005 �BSR�CP003 �STX�PNTR �LDAA�#1 �RTS CP003�LDAB�#5 CP008�DEX �DECB �BNE�CP008 �RTS �SPC�2 **************************************************** *TIMER�CAUSES�A�TIME�DELAY�OF�APPROX.�6.8�SECS…* **************************************************** TIMER�LDAA�#13 OTIME�LDX�#0 ITIME�DEX �BNE�ITIME �DECA �BNE�OTIME �RTS * �END ÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅŠ€ NAM QLOAD * * VERSION 1.0 5 APRIL 1976 * * QUICK LOAD FOR EXORCISER * DOES NOT TURN READER OFF AFTER EACH RECORD * * WILL LOAD ANY EXORCISER FORMAT TAPE ON ANY * TERMINAL WITH AUTOMATIC READER CONTROL WITH THE * FOLLOWING RESTRICTIONS: * IT SKIPS S0 RECORDS * IT STOPS ON S9 RECORDS * SOME GARBAGE CHARACTERS MAY BE PRINTED UPON *  RETURN TO EXBUG OR FOLLOWING THE BKPT * ERROR MESSAGE. THESE CHARACTERS WERE * BEING RECEIVED FROM THE TAPE WHEN IT WAS * TURNED OFF * AT 1200 BAUD IT WILL LOSE THE CASSETTE BLOCK * FOLLOWING AN S9 RECORD IF IT IS RESTARTED * WITHOUT REPOSITIONING THE TAPE * CAN LOAD A CONTINUOUS FORMAT CASSETTE BUT *  WILL LOSE THE REMAINING DATA FOLLOWING * THE S9 IN THE BLOCK * SHOULD NOT LOAD OVER LOADER * * PRINTS BKPT ERROR MESSAGE IF MEMORY DID NOT * CHANGE OR A CHECKSUM ERROR OCCURRED * IF NO CHANGE ERROR: * A=DATA TO BE STORED * B=00 * X=ADDRESS WHERE DATA WAS TO BE STORED * IF CHECKSUM ERROR: * A=CHECKSUM CHAR FROM TAPE * B=CHECKSUM RESULT(+1) FROM RECORD * X=LAST LOCATION LOADED * * START QLOAD BY TYPING 24;G IN MAID * * WITH TI 733 ASR AT 1200 BAUD IT LOADS: * CO-RESIDENT EDITOR IN 1 MINUTE * CO-RESIDENT ASSEMBLER IN 2:20 MINUTES * OPT O * XSTACK EQU $FF8A EXBUG STACK AREA OCHAR EQU $F9CF OUTPUT CHAR-NO NUL PAD OUTCH EQU $F018 OUTPUT CHAR-PAD NULS AECHO EQU $FF53 INPUT ECHO FLAG INCHNP EQU $F015 INPUT CHAR-NO PARITY EXBUG EQU $F564 EXBUG ENTRY CBCDHX EQU $F006 CONVERT ASCII TO HEX  PAGE ORG $20 TEMP RMB 2 BUILD ADDRESS HERE CKSM RMB 1 CHECKSUM STORAGE COUNT RMB 1 BYTE COUNT STORAGE SPC 2 * START QLOAD HERE QLOAD LDS #XSTACK INITIALIZE STACK LDAA #$11 TURN READER ON JSR OCHAR LOAD3 INC AECHO GET CHAR JSR INCHNP CMPA #'S BNE LOAD3 NOT S INC AECHO HAVE S-GET NEXT CHAR JSR INCHNP CMPA #'9 BEQ LOAD9 STOP IF EOF RECORD CMPA #'1 BNE LOAD3 HEADER OR INVALID SECOND CHAR BSR RDBYTE HAVE DATA RCRD-GET BYTE COUNT STAA CKSM INITIALIZE CHECKSUM DECA ADJUST BYTE COUNT STAA COUNT SAVE IT BSR RDBYTE GET ADDRESS STAA TEMP BSR RDBYTE STAA TEMP+1 LDX TEMP DEX ADJUST ADDRESS FOR LOAD LOOP LOAD5 INX INC ADDRESS LDAA COUNT CHECK BYTE COUNT BEQ LOAD7 DONE BSR RDBYTE  NOT DONE-GET DATA BYTE STAA X STORE IT CMPA X DID IT STORE? BEQ LOAD5 YES CLRB NO-PUT FLAG IN B ACC BRA LOAD8 GO STOP TAPE AND PRINT ERROR LOAD7 BSR RDBYTE GET CHECKSUM INC CKSM INC CHECKSUM BEQ LOAD3 CHECKSUM GOOD LOAD8 PSHA SAVE A ACC LDAA #$13 CHECKSUM BAD-STOP TAPE JSR OUTCH PULA RESTORE A ACC SWI GENERATE BKPT ERROR MESSAGE LOAD9 LDAA #$13 DONE-STOP TAPE JSR OCHAR JMP EXBUG GO TO EXBUG PAGE * RDBYTE BSR RDHEX GET 4 MSB OF BYTE ASLA SHIFT TO 4 MSB  ASLA ASLA ASLA TAB SAVE THEM BSR RDHEX GET 4 LSB OF BYTE ABA COMBINE MSB AND LSB TAB PUT IN B ACC ALSO ADDB CKSM UPDATE CHECKSUM STAB CKSM DEC COUNT DEC BYTE COUNT RTS * RDHEX INC AECHO GET CHAR JSR INCHNP JMP CBCDHX CONVERT TO HEX * END ÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅ<‘€;�NAM�M2RIO �OPT�O,S *‚NAM:�M2RIO‚VER:�1.3‚DAT:�05-07-76‚CMP:�M6800 * *ƒSYS:M68RES * *ƒDES:THIS�IS�THE�M6800�RESIDENT�I/O�PACKAGE *‡FOR�USE�WITH�THE�RESIDENT�EDITOR�1.3�AND *‡RESIDENT�ASSEMBLER�1.3�UTILIZING *‡MINIBUG�II�AND�EVAL�MODULE�II * *ƒREV:0 * *ƒNOTE:�FOR�USE�WITH�ASM�1.2�AND�EDT�1.2 *‰ASTART�EQU�$8F4�ASM1.2�START *‰ESTART�EQU�$1641�EDT1.2�START * *- �SPC�2 �SPC�4 *‚*************************************** *‚*************************************** * *‚THIS�IS�THE�I/O�DRIVER�REGION *‚THE�FOLLOWING�DRIVER�ROUTINES�ARE�REQUIRED: * *‚CI‚CONSOLE�DEVICE�INPUT�ROUTINE.�RETURNS�WITH *†INPUT�CHARACTER�IN�A-REGISTER.�DOES�NOT *†ECHO�CHARACTER * *‚CIE�CONSOLE�DEVICE�INPUT�ROUTINE.�SAME�AS�CI *†BUT�ECHOS�CHARACTER. * *‚CO‚CONSOLE�OUTPUT�ROUTINE.�OUTPUTS�CHARACTER *†IN�A-REGISTER. * *‚POC�PUNCH�DEVICE�OUTPUT�CHARACTER�ROUTINE. *†OUTPUTS�CHARACTER�IN�A-REGISTER.�TURNS *†PUNCH�ON. * *‚POR�PUNCH�DEVICE�OUTPUT�RECORD�ROUTINE. *†OUTPUTS�CHARACTER�STRING�POINTED�TO�BY *†X�REGISTER�AND�TERMINATED�BY�$04.�TURNS *†PUNCH�ON�AND�OFF. * *‚RIC�READER�DEVICE�INPUT�CHARACTER�ROUTINE. *†READS�RECORD�INTO�BUFFER�IF�BUFFER�EMPTY. *†RETURNS�WITH�NEXT�CHARACTER�FROM�BUFFER�IN *†A-REGISTER�IF�NO�TIME�OUT�OCCURRED,�AND *†ALSO�RESETS�CARRY.�IF�TIME�OUT�OCCURRED, *†CARRY�IS�SET�AND�A-REGISTER�CONTAINS�$1A. *†TURNS�PUNCH�OFF�BEFORE�READING.�CARRIAGE *†RETURN�ENDS�RECORD. * *‚RIR�READER�DEVICE�INPUT�RECORD�ROUTINE.�READS *†RECORD�INTO�BUFFER.�TURNS�PUNCH�OFF *†BEFORE�READING.�CARRIAGE�RETURN�ENDS *†RECORD. * *‚********************************************** *‚********************************************** �SPC�4 *�MINIBUG�EQUATES INCHNP�EQU�$E11F�MINIBUG�CHARACTER�INPUT OUTCH‚EQU�$E108�OUTPUT�CHAR PDATAM�EQU�$E130�MINIBUG�PDATA1 AECHO�EQU�$A00C�INCHNP�NO�ECHO�FLAG MTTYDI�EQU�$8009†TTY�DATA�IN MTTYDO�EQU�$8009†TTY�DATA�OUT MTTYSI�EQU�$8008†TTY�STATUS�IN MTTYSO�EQU�$8008†TTY�STATUS�OUT SBIT�EQU�$A019�STOP�BIT�CONTROL�FOR�ACIA MINBUG�EQU�$E040�MINIBUG�ENTRY�POINT �SPC�5 *‚ASSEMBLER�AND�ED�TOR�ENTRY�LOCATIONS �SPC�1 ASTART�EQU�$304�ASSEMBLER�1.3�ENTRY�POINT ESTART�EQU�$1610�EDITOR�1.3�ENTRY�POINT �SPC�5 �ORG�$F0 *‚I/O�FLAG�AND�STORAGE�AREA RCEMT�RMB�1�READ�BUFFER�EMPTY�FLAG R CGCPT�RMB�2�READ�GET�CHAR�POINTER NTIMEO�RMB�1�RIR�NO�TIME�OUT�FLAG PNCH�RMB�1�PUNCH�ON�FLAG IOSVX1�RMB�2�SAVE�X�REG IOSVX2�RMB�2�SAVE�X� �SPC�4 �ORG�$100 *‚I/O�JUMP�TABLE ASM�JMP�ASTART�ENTER�ASSEMBLER ED�JMP�ESTART�ENTER�EDITOR XIOINT�JMP�INXIO�INITIALIZE�IO XPOC�JMP�POC�PUNCH�OUTPUT�-�CHAR XPOR�JMP�POR�PUNCH�OUTPUT�-�RECORD XRIC�JMP�RIC�READER�INPUT�-�CHAR XRIR�JMP�RIR�READER�INPUT�-�RECORD XCO�JMP�CO�CONSOLE�OUTPUT XCI�JMP�CI�CONSOLE�INPUT�-�NO�ECHO XCIE�JMP�CIE�CONSOLE�INPUT�-�ECHO XDATA�JMP�PDATA�PRINT�CR�LF�DATA�STRING XDATA1�JMP�PDATA1�PRINT�DATA�STRING XCRLF�JMP�PCRLF�PRINT�CR�LF XLEAD�JMP�LEAD�PUNCH�LEADER-TRAILER XNCHON�JMP�PNCHON�TURN�PUNCH�ON XNCHOF�JMP�PNCHOF�TURN�PUNCH�OFF XBUG�JMP�MINBUG�ENTER�MINIBUG XHEAD�JMP�XDATA�PRINT�ASSEMBLY�HEADING XLINE�JMP�XDATA1�PRINT�ASSEMBLY�LINE JUMP1�JMP�*�RESERVED�JUMP�LOCATION JUMP2�JMP�*�RESERVED�JUMP�LOCATION �SPC�4 *‚SUBROUTINE�TO�INITIALIZE�IO�FLAGS INXIO�EQU�* �CLR�RCEMT�READ�BUFFER�EMPTY �CLR�PNCH�PUNCH�IS�OFF ‚CLR�NTIMEO�TIME�OUT �RTS �SPC�5 *‚SUBROUTINE�TO�INPUT�CHARACTER�FROM�CONSOLE CI�EQU�*�CONSOLE�INPUT �SEC �ROL�AECHO �BRA�CI1 CIE�CLR�AECHO CI1�JSR�INCHNP�MINIBUG�CHARACTER�INPUT ***�STRIP�CHARACTERS�FROM�INPUT�*** �LDX�#NCHAR CI2�CMP�A�X�BAD�CHAR? �BEQ�CI1�YES�-�IGNORE�CHAR �INX�NO-KEEP�CHECKING �CPX�#ENCHAR�DONE? �BNE�CI2�NO *********************************** �RTS �SPC�5 *‚SUBROUTINE�TO�OUTPUT�CHARACTER�TO�CONSOLE CO�EQU�* �CMPA�#$09�TAB? �BNE�CO1�NOT�TAB �LDAA�#$20�CHANGE�TAB�TO�SPACE CO1�CMP�A�#$D�C/R? �BNE�CO2�NO �BRA�XCRLF�YES-OUTPUT�CR�LF CO2�JSR�OUTCH�OUTPUT�CHAR CO4�RTS �SPC�4 *‚SUBROUTINE�TO�PUNCH�5�INCHES�OF�BLANK�TAPE LEAD�EQU�* ‚LDAB�#50�5�IN=50�CHARS LEAD1�CLRA ‚BSR�XPOC�PUNCH�NULL ‚DECB ‚BNE�LEAD1�NOT�DONE ‚BRA�XNCHOF�TURN�PUNCH�OFF �SPC�5 *‚SUBROUTINE�TO�PUNCH�CHARACTER POC�EQU�* �BSR�XNCHON�TURN�PUNCH�ON �BRA�XCO �SPC�5 *‚SUBROUTNE�TO�PUNCH�DATA�STRING POR�EQU�* �BSR�XNCHON�TURN�PUNCH�ON �JSR�PDATA1�PUNCH�DATA�STRING �BRA�XNCHOF�TURN�PUNCH�OFF �SPC�5 *‚SUBROUTINE�TO�READ�RECORD�-�CHARACTER�ORIENTED RIC�EQU�* �TST�RCEMT�BUFFER�EMPTY? �BNE�RIR19�NO-GET�NEXT�CHAR �CLR�NTIMEO�YES-RESET�NTIMEO�FLAG �BRA�RIR3�READ�RECORD �SPC�2 *‚SUBROUTINE�TO�READ�RECORD�-�RECORD�ORIENTED RIR�INC�NTIMEO�SET�NTIMEO�FLAG RIR3�LDX�#RCBUF�FILL�BUFFER�WITH�CR'S �LDAA�#$D RIR71�STAA�X �INX �CPX�#RCBUF+72�DONE? �BNE�RIR71�NO-KEEP�FILLING ‚TST�PNCH�YES-PUNCH�ON? �BEQ�RDR�NO-GO�TEST�SPEED �JSR�XNCHOF�YES-TURN�PUNCH�OFF �SPC�1 �SPC�1 �SPC�1 RDRƒLDAA�SBIT�READER�RELAY�ON �ORA�A�#$40 �STAA�MTTYSO �SPC�1 �LDAA�#$11�DC1�READER�ON �JSR�OUTCH �SPC�1 RDR09�EQU�* �LDX�#RCBUF�READ�RECORD�INTO�BUFFER RDR11�SEC �JSR�INCT�INPUT�CHAR �SPC�1 �STAA�X�STORE�CHAR �BCS�RDR31�TIME�OUT-STOP�READING �CMPA�#$D�C/R? �BEQ�RDR31�YES-STOP�READING ‚SPC�1 �CPX�#RCBUF+71�BUFFER�FULL? �BEQ�RDR11�YES-SKIP�REST�OF�RECORD �INX �BRA�RDR11�GET�NEXT�CHAR RDR31�EQU�* �CLR�NTIMEO�RESET�NTIMEO�FLAG �LDAA�SBIT�READER�RELAY�OFF ‚STAA�MTTYSO ‚LDAA�#$13�READER�OFF ‚JSR�OUTCH �LDX�#FOUR0�OUTPUT�4�NULLS �JSR�PDATAM� �SPC�1 �INC�RCEMT�SET�BUFFER�NOT�EMPTY �LDX�#RCBUF�INZ�GET�CHAR�POINTER �STX�RCGCPT �SPC�1 RIR19�LDX�RCGCPT�GET�NEXT�CHAR †LDAA�X�(A)�CHAR ‚INX�INC�GET�CHAR�POINTER �STX�RCGCPT�SAVE�GET�CHAR�POINTER �CMPA�#$1A�END�OF�TEXT? �BEQ�RIR33�YES �CMPA�#$D�CR? �BNE�RIR31�NOT�C/R RIR33�CLR�RCEMT�SET�BUFFER�EMPTY RIR31�RTS �SPC�5 *‚SUBROUTINE�TO�TURN�PUNCH�ON PNCH ON�EQU�* �TST�PNCH�PUNCH�ALREADY�ON? �BNE�P20�YES-RETURN �PSH�A�NO-SAVE�A�REG �INC�PNCH�SET�PUNCH�ON�FLAG �LDAA�SBIT �CMPA�#$15�30�CPS? �BNE�P10 �LDAA�#$10 �BSR�OCHAR�ATTENTION�RDC �LDAA�#'0�TURN�PRINTER�OFF �JSR�OCHAR P10�EQU�* ***�SEND�RUBOUT�BEFORE�PUNCH�ON�**************** �LDA�A�#$7F �BSR�OCHAR ********************************************* �LDAA�#$12�TURN�TTY�PUNCH�ON �BSR�OCHAR�OUTPUT�CHAR �PUL�A�RESTORE�A�REG P20�RTS �SPC�4 *‚SUBROUTINE�TO�TURN�PUNCH�OFF PNCHOF�EQU�* �LDAA�#$14�TURN�TTY�PUNCH�OFF �BSR�OCHAR�OUTPUT�CHAR �LDAA�SBIT �CMPA�#$15�30�CPS? �BNE�PUN325�NO �LDAA�#$10 �BSR�OCHAR�ATT.�RDC �LDAA�#'9�TI�PRINTER�ON �BSR�OCHAR PUN325�EQU�* �CLR�PNCH�RESET�PUNCH�ON�FLAG �RTS �SPC�5 * *�SUBROUTINE�TO�PRINT�OR�PUNCH�DATA�STRING *�POINTED�TO�BY�X�REG * PDATA�BSR�PCRLF�PRINT�CR/LF PDATA1�LDAA�X �CMPA�#4 �BEQ�PDATA9�STOP�ON�EOT �BSR�OCHAR �INX �BRA�PDATA1 PDATA9�RTS �SPC�2 PCRLF�STX�IOSVX2 �LDX�#CRLFƒCR�LF†STRING �BSR�PDATA1 �LDX�IOSVX2 �RTS �SPC�5 * *�SUBROUTINE�TO�OUTPUT�CHAR�IN�A�REG *�IF�CR�,�FOLLOW�WITH�4�NULLS * OCHAR�STX�IOSVX1 �JSR�OUTCH�OUTPUT�CHAR �CMPA�#$D�IS�IT�CR? �BNE�OCHAR9�NO �LDX�#FOUR0 �JSR�PDATAM�MINIBUG�PDATA OCHAR9�LDX�IOSVX1 �RTS �SPC�4 *‚SUBROUTINE�TO�READ�CHARACTER�-�NO�PARITY INCT�EQU�* ‚STX�IOSVX1�SAVE�X�REG INCT2�TST�NTIMEO�WANT�TIME�OUT�TEST? �BEQ�INCT3�YES �JSR�XCI�NO-USE�CI�ROUTINE �BRA�INCT6�GO�CHECK�CHAR INCT3�LDX�#$FF00�SET�TIME�OUT�COUNTER INCT5�DEX ‚BEQ�INCT9�TIME�OUT �LDAA�MTTYSI �ASRA �BCC�INCT5�NOT�READY �LDAA�MTTYDI�INPUT�DATA �ANDA�#$7F�REMOVE�PARITY INCT6�LDX�#NCHAR�IGNORE�CHARS CCHK�CMP�A�X �BEQ�INCT2�BAD�CHAR �INX �CPX�#ENCHAR�DONE? �BNE�CCHK�NO �CMP�A�#$09�TAB? �BNE�INCT7�NO �LDA�A�#$20�YES-CHANGE�TO�SPACE INCT7�LDX�IOSVX1�RESTORE�X�REG �CLC�CLEAR�CARRY-NO�TIME�OUT �RTS �SPC�1 INCT9�LDAA�#$1A�TIME�OUT �LDX�IOSVX1�RESTORE�X�REG �SEC�SET�TIME�OUT�BIT �RTS �SPC�5 *‚CHARACTERS�STRIPPED�FROM�INPUT: *‚NULL,�RUBOUT,�LINE�FEED,�DC1,�DC2,�DC3,�DC4 NCHAR�FCB�0,$7F,$0A,$11,$12,$13,$14 ENCHAR�EQU�* CRLFƒFCB�$D,$A,4 FOUR0�FCB�0,0,0,0,4 �SPC�5 *‚PUT�READER�BUFFER�JUST�BEFORE�$300 RCBUF�EQU�$300-73 �SPC�5 �END ÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅ ¡€SRTTST: PROCEDURE OPTIONS (MAIN) $ OPT P,MEM ! ! THIS IS THE TEST PROGRAM FOR THE MPL VERSION ! OF A MODIFIED SHELL SORT. AT THE REVISION LEVEL ! OF THE CURRENT COMPILER THE PROGRAM REQUIRES HEX ! 28C BYTES OF MEMORY FOR THE SORT SUB. ! ! WRITTEN BY JOEL BONEY FOR MOTOROLA INC. JAN 76. ! ! ! THE TEST PROGRAM TAKES 75 MSEC TO SORT THE BUFFER ! THIS IS QUITE AWHILE. TIME COULD BE SAVED BY ! USING THE PTR MODE. ! ! ! DUE TO THE FACT THAT REVISIONS MAY OCCUR TO THE ! MPL COMPILER IT WILL BE NECESSARY FOR THE ! USER TO GET THE ASSEMBLY LISTING TO BE ABLE   ! TO SIMULATE THIS TEST. ! !------------------------------- ! THIS PROCEDURE TESTS THE CORE SORT (CSORT) ! SUBROUTINE. DECLARE SIZE BINARY (1) INITIAL (14) !BUFFER SIZE DECLARE ESIZE BINARY (1) INITIAL(2) !ENTRY SIZE DECLARE SFLAG !SORTED FLAG DECLARE SBUF(14) BINARY (2) INITIAL (17,21,13,8,500, 23,16,12,0,-5,73,62,1,28) !TEST BUFFER ! EXECUTABLE COST START: CALL CSORT (SIZE,ESIZE,SFLAG) IF SFLAG EQ 0 THEN GO TO BAD CALL CSORT (SIZE,ESIZE,SFLAG) !ALREADY SORTED  IF SFLAG NE 0 THEN GO TO BAD2 OKAY: GO TO OKAY ! HERE WHEN UNSORTED DATA WAS NOT SORTED BAD: GO TO BAD ! HERE WHEN SORTED DATA WAS SORTED BAD2: GO TO BAD2 END SRTTST  $PAGE CSORT: PROCEDURE (BUFSIZ,ENSIZ,IFLAG) ! ! BINARY (2) CORE SORT ! ! THIS SUBROUTINE SORTS A CORE BUFFER STORED IN ARRAY ! NAMED SBUF OF LENGTH BUFSIZ AND ENTRY SIZE ENSIZ. ! BUFSIZ MUST BE LESS THAN 256 ! SBUF CAN BE BINARY (1) OR (2). ! ENTRIES ARE CONSIDERED TO BE MULTIPLE PRECISION ! NUMBERS OR ASCII STRINGS AND ARE SORTED FROM ! MSB TO LSB ! ! ! BUFSIZ=CORE BUFFER SIZE (BINARY (1)) ! ENSIZ= SIZE OF EACH INDIVIDUAL ENTRY (BINARY (1)) ! IFLAG= SET TO NON ZERO IF SOMETHING WAS SORTED ! SET TO 0 IF NO SORT RESULTED ! ! JOEL BONEY FOR MOTOROLA INC. JAN 76 ! DECLARE M,NO,IFLAG,K,J,I,II,IIM,NUM,LOCFLG DECLARE CTR,PTR1,PTR2,BUFSIZ,ENSIZ,LENSIZ  DECLARE ITEMP BINARY (2) !EXECUTABLE CODE CSRTA: M=BUFSIZ/ENSIZ !ENTRIES/ BUFFER NO=M  !UNCHANGING COPY OF M LOCFLG=0 !USE A LOCAL FLAG FOR SPEED LENSIZ=ENSIZ !START OF BIG SORT LOOP BIGLOP: M=M%-1; !DIVIDE M BY 2 IF M EQ 0 THEN GO TO OUT  K=NO-M !NBR OF VALUES NOT IN M AREA CAT: DO J=1 TO K !COMPARE M VALUES TO ALL K'S  !AND ORDER I=J !INIT INDEX CKREST: II=(I-1)*LENSIZ+1 !CALCULATE ARRAY SUBSCRIPT IIM=(I+M-1)*LENSIZ+1 !OTHER IS M AWAY CSRTB: DO NUM=1 TO LENSIZ  !COMPARE ALL CHARS PTR1=II+NUM-1 PTR2=IIM+NUM-1 IF SBUF (PTR1)SBUF(PTR2) THEN GO TO SWAP END CSRTB SWAP: LOCFLG=LOCFLG+1  !SET SORTED FLAG CSRTC: DO CTR=1 TO LENSIZ !SWAP THE ENTRIES ITEMP=SBUF(II) !SAVE FIRST  SBUF(II)=SBUF(IIM) !MOVE 2ND TO 1ST SBUF(IIM)=ITEMP !MOVE FIRST TO 2ND  II=II+1 IIM=IIM+1 END CSRTC I=I-M !DO WE NEED TO GO BACK UP  IF I GE 1 THEN GO TO CKREST !CHECK WITH ONES ABOVE SKIP: END CAT !NO, DO NEXT ENTRY  GO TO BIGLOP !DO NEXT ITERATIOON OUT: IFLAG=LOCFLG !COPY LOCAL FLAG TO GLOBAL RET URN END CSORT BEÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅŪ€�NAM�CLOCK �OPT�NOG HOURS�RMB�1 MINS�RMB�1 SECS�RMB�1 STRMSG�FCC�'SET�TIME�HH:MM:SS' ERRM�FCC�'INPUT�ERR' SEA�FDB�SECS‚ADDRESS�OF�SECONDS MEA�FDB�MINS‚ADDRESS�OF�MINUTES HEA�FDB�HOURS‚ADDRESS�OF�HOURS ERR�FDB�ERRM‚ADDRESS�OF�ERROR�MESSAGE �ORG�$100 START�JSR�CLRCRT‚ERASE�THE�CRT�DISPLAY FIXIT�LDX�#STRMSG‚POINT�TO�START�UP�MESSAGE �LDAB�#$00‚SET�CHARACTER�COUNTER LOOP�LDAA�X‚GET�CHARACTER �JSR�OUTEEE‚WRITE�IT�TO�TERMINAL �INX‰POINT�TO�CHARACTER �INCB‰COUNT�CHARACTERS �CMPB�#$11‚COUNTER=ZERO? �BLT�LOOP‚BRANCH�IF�NOT �JSR�GETCHR‚GO�GET�HOURS �STAA�HOURS‚SET�HOURS �JSR�INEEE‚GO�GET�COLON �CMPA�#$3A‚IS�IT�A�COLON? �BNE�ERRMSG‚ERROR�IF�NOT �JSR�GETCHR‚GO�GET�MINUTES �STAA�MINS‚SET�MINUTES �JSR�INEEE‚GO�GET�COLON �CMPA�#$3A‚IS�IT�A�COLON? �BNE�ERRMSG‚ERROR�IF�NOT �JSR�GETCHR‚GO�GET�SECONDS �STAA�SECS‚SET�SECONDS �JSR�CLRCRT‚CLEAR�THE�SCREEN �LDAA‚HOURS‚GET�HOURS �CMPA�#$24‚HOURS�GREATER�THAN�24? �BHI�ERRMSG‚IF�TRUE-�ERROR TIMIT�JSR�DELAY‚GO�DELAY�FOR�ONE�SECOND �LDX�SEA‚POINT�TO�SECONDS �LDAB�#$59‚SET�MODULUS-1 �JSR�COUNT‚COUNT�SECONDS �BVC�SHOW‚GO�DISPLAY�TIME �LDX�MEA‚ �LDAB�#$59‚GET�MOD-1 �JSR�COUNT‚COUNT�MINUTES �BVC�SHOW �LDX�HEA‚POINT�TO�HOURS �LDAB�#$24 �JSR�COUNT‚COUNT�HOURS SHOW�LDX�HEA‚DISPLAY�HOURS �JSR�DISPLY �LDAA�#$3A‚DISPLAY�COLON �JSR�OUTEEE‚WRITE�TO�CONTROL�TERMINAL �LDX�MEA‚POINT�TO�MINUTES �JSR�DISPLY‚DISPLAY�MINUTES �LDAA�#$3A�DISPLAY�COLON �JSR�OUTEEE �LDX�SEA‚POINT�TO�SECONDS �JSR�DISPLY‚DISPLAY�SECONDS �BRA�TIMIT‚GO�BACK�AND�TIME�ANOTHER�SECOND �ORG�$176‚170-175�IS�PATCH�SPACE CLRCRT�LDAA�#$10‚HOME�UP�TO�CLEAR�CRT�SCREEN �JSR�OUTEEE �LDAA�#$16‚ERASE�TO�EOF �JSR�OUTEEE �RTS *�GET�INPUT GETCHR�JSR�INEEE‚READ�FIRST�CHARACTER �ASLAŽLEFT�JUSTIFY�FIRST�CHARACTER �ASLA �ASLA �ASLA �TAB �JSR�INEEE �EORA�#$30‚REMOVE�ASCII�PREFIX�OF�2ND�CHAR. �ABA �CMPA�#$59‚CHECK�FOR�SIZE�ERROR �BHI�ERRMSG‚ON�ERROR-�BRANCH �RTS *�OUTPUT�AN�ERROR�MESSAGE ERRMSG�LDX�ERR‚POINT�TO�MESSAGE �LDAB�#$0C‚SET�LOOP�COUNTER ERLOOP�LDAA�X‚GET�CHARACTER �JSR�OUTEEE‚WRITE�IT �INX‰POINT�TO�NEXT�CHARACTER �DECBˆCOUNT�LOOPS �CMPB�#$0‚FINISHED? �BGT�ERLOOP‚NO-DO�THE�LOOP�AGAIN �JMP�FIXIT *�DELAY�LOOP-�ADJUST�BY�CHANGING�LOOP�COUNT�VALUE DELAY�LDX�#$BB00‚LOOP�COUNTER DLOOP�TST�X �DEX �CPX�#$0000 �BNE�DLOOP �RTS *�VARIABLE�MODULUS�COUNTER COUNT�LDAA�X‚GET�VALUE �ADDA�#1‚INCREMENT�IT �DAA„MAKE�IT�BCD�FORM �STAA�X �CBA„COMPARE�WITH�MOD-1 �CLV�RESET�OVERFLOW� �BLE�NSAME‚,LE.�MOD-1? �CLR�X�NO-�.GT.�SET�TO�ZERO �SEV…SET�OVERFLOW NSAME�RTS �NOP *FORMAT�THE�DISPLAY DISPLY�CPX�HEA‚DISPLAYING�HOURS? �BNE�NOTHRS‚NO �JSR�OUTEEE NOTHRS�LDAA�X‚ELSE�CONVERT�TO�ASCII �LSRA‡RIGHT�JUSTIFY�HI�ORDER�DIGIT �LSRA �LSRA �LSRA �ORAA�#$30‚TACK�ON�PREFIX �JSR�OUTEEE‚WRITE�TO�TERMINAL �LDAA�X‚GET �LO�ORDER�DIGIT �ANDA�#$0F �ORAA�#$30‚PREFIX�IT �JSR�OUTEEE‚WITE�TO�TERMINAL �RTS OUTEEE�EQU�$E1D1 INEEE�EQU�$E1AC �END ÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅŰ€�NAM�TTYI0 * *�THIS�IS�A�I/O�ROUTINE�DESIGNED�TO�LOAD�&�DUMP *�THE�CONTENTS�OF�A�USER�DEFINED�BUFFER�TO�THE *�TELETYPE. * *�IT�USES�2�BUFFERS�DEFINED�IN�THE�CALLING�PROGRAM * *�ACCUM�A-�CONTAINS�A�FLAG�1=INPUT *�0=OUTPUT * *�BBUF-CONTAINS�HEX�REPRESENTATION�OF�OBJECT�BUFFER * *�CBUF-�IS�THE�OBJECT�BUFFER�TO�BE�DUMPED * *�THE�TWO�BUFFERS�ARE�IN�CONTIGUOUS�STORAGE * *�THE�CALL�TO�TTYIO�SHOULD�BRANCH�TO�$9010 * * *�WRITTEN�BY�W.�D.�PIERCE�6�F.�E.�CARDEN *�STARTED�9-16-75 * * �ORG�$9010 �OPT‚O=TTYOBJ �OPT�SYMBOL OPTN�EQU�$9000 SIZ�EQU�$9001 ACIAC�EQU�$8008�ACIA�CONTROL�LOCATION ACIAD�EQU�$8009�ACIA�DATA�LOCATION COUNT�EQU�$9002 TEMP�EQU�$9003 INDXA�EQU�$9004 * �NOP �NOP �NOP �STA�A�OPTN�STORE�OPTION�CODE �LDA�A�0,X �STA�A�SIZ�STORE�BUFFER�SIZE �CMP�A�#$00 �BEQ�JMPX �JMP�CONTA JMPX‚JMP�ENDC CONTA‚CLR�COUNT�CLEAR�COUNTER �LDA�A�OPTN�CHECK�FOR�INPUT�OR�OUTPUT�O �CMP�A�#$00 �BEQ�OUTPT ERROR�NOP �LDA�B�#$3F�(?)=(00111111) �JSR�DOUT �JMP�INPUT DOUT�LDA�A�ACIAC�MAIN�OUTPUT�ROUTINE �LSR�A �LSR�A �BCC�DOUT �STA�B�ACIAD �RTS INPUT�NOP�INPUT�ROUTINE �STX�INDXA �INX LOOP�LDA�A�ACIAC �TAB �AND�B�#$70�(01110000)=ERROR�FLAGS �BNE�ERROR�ERROR�CHECK �ROR�A �BCC�LOOP�CHECK�IF�A�CHAR.�IS�IN �LDA�A�ACIAD �AND�A�#$7F �STA�A�TEMP �TAB �JSR�DOUT�ECHO�BACK �LDA�A�TEMP �CMP�A�#$5F�)BACK�ARROW)�=CHAR.�DELETE �BEQ�BKSPC �CMP�A�#$18�(CNTL+X)=LINE�DELETE �BEQ�REST �CMP�A�#$0D�(CR)=END�OF�INPUT �BEQ‚ENDB �STA�A�0,X �INX �INC�COUNT �LDA�A�COUNT �CMP�A�SIZ�CHECK�IF�BUFFER�IS�FULL �BEQ�ENDC �JMP�LOOP BKSPC�DEX�DELETE�LAST�CHAR. �DEC�COUNT �JMP�LOOP * REST�DEX�LINE�DELETE �DEC�COUNT �LDA�A�COUNT �CMP�A�#$00 �BNE�REST�CHECK�IF�RESET�IS�COMPLETE �LDA�B�#$0D�C/R �JSR�DOUT �LDA�B�#$0A�L/F �JSR�DOUT �JMP�LOOP * OUTPT�INX�OUTPUT�ROUTINE LOOP1�LDA�B�0,X �JSR�DOUT �INX �INC�COUNT �LDA�A�COUNT �CMP�A�SIZ�CHECK�IF�BUFFER�HAS�BEEN�DU �BEQ�ENDC �JMP�LOOP1 * * ENDB�LDX�INDXA�RESET�BUFFER�SIZE �LDA�A�COUNT �STA�A�0,X �LDA�B�#$A �JSR�DOUT �RTS * ENDC�LDA�B�#$0D �JSR�DOUT �LDA�B�#$0A �JSR�DOUT �RTS �PAGE * *�INPUT�ROUTINE * *USAGE:�IN�THE�CALLING�PROGRAM�THE�FOLLOWING *ˆIS�INSERTED; * *�INPUT�EQU�$910C‚(AT�THE�START�OF�CALLING�PROGRAM) * * *�LDX�#NAM�(TO�USE�INPUT) *�JSR�INPUT * * *NAM�RMB�1�(THE�INPUT�BUFFER) *�RMB�72 * *�WRITTEN�BY�W.D.�PIERCE�&�F.�E.�CARDEN *�STARTED�9-18-75 * �ORG�$910A TTYIO�EQU�$9010 TEMP2�RMB�2 �LDA�A�#72 �STA�A�0,X �LDA�A�#$01 �JSR�TTYIO �RTS �PAGE * *�OUTPUT�ROUTINE * *�USAGE:�IN�THE�CALLING�PROGRAM�THE�FOLLOWING *ˆIS�INSERTED; * *�OUTPUT�EQU�$90F0‚(AT�THE�START�OF�THE�CALLING�PROG) * * *�LDX�#NAM‚(TO�USE�OUTPUT) *�JSR�OUTPUT * * *�NAM�FCB�NN�(WHERE�NN�IS�THE�SIZE�OF�THE�OUTPUT�BUFFER) *…FCC�/‚OUTPUT�BUFFER‚/ * *�WRITTEN�BY�W.D.�PIERCE�&�F.E.�CARDEN *�STARTED�9-18-75 * �ORG�$90F0 �LDA�A�#$00 �JSR�TTYIO �RTS �END PAGE ÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅ (¶€(�NAM�GRAPH *�THIS�PROGRAM�GENERATES�A�GRAPH�OF�SEVEN *�PARAMETERS�PLOTTED�AGAINST�AN�INDEX�NUMBER. *�SPACE�MUST�BE�ALLOTTED�IN�RAM�FOR�THIS *�TEMPORARY�STORAGE�AND�THE�STARTING�LOCATION� *�MUST�BE�ENTERED�PRIOR�TO�THE�DATA�TAKING *�RUN�IN�LOCATION�GRPHIR�H�&�L.ƒTHE�LOCATIONS� *�OF�THE�SEVEN�PARAMETERS�AND�THE�INDEX� *�PARAMETER�MUST�BE�LOCATED�BY�AN�EQUATE� *�DIRECTIVE.‚EACH�8�BIT�PARAMETER�IS�PLOTTED� *�AT�1/4�RESOLUTION�BY�AN�APLHABETIC�CHARACTER� *�AND�WHERE�TWO�CHARACTER�LOCATIONS�COINCIDE� *�THE�LETTER�CLOSEST�TO�A�WILL�BE�PRINTED.� *�THE�DATA�LOAD�ROUTING,�GRPHIN,�IS�CALLED� *�IN�THE�MAIN�PROGRAM�AT�THE�DESIRED�POINT�OF� *�DATA�COLLECTION.�A�PROGRAM�REENTRY�ROUTINE� *�WITH�THREE�CHOICES�IS�CALLED�UP�AT�THE�END� *�OF�THE�GRAPH.‚THE�INDEX�NUMBER�IS�CONVERTED� *�TO�DECIMAL�AND�PRINTED�AT�THE�BEGINNING�OF *�EACH�LINE. �SPC�2 �OPT�O,NOG �ORG�$1000 �SPC�1 *�LABEL�LIST �SPC�1 GRPHIR�EQU�$0D INDEX�EQU�$0C NUM3�EQU�$0B NUM2�EQU�$0A NUM1�EQU�$09 PARAM1�EQU�20 PARAM2�EQU�21 PARAM3�EQU�22 PARAM4�EQU�23 PARAM5�EQU�24 PARAM6�EQU�25 PARAM7�EQU�26 DATA�EQU�$100 DATAF�EQU�$0F VALCNT�EQU�$10 �SPC�2 *�THIS�PROGRAM�TAKES�THREE�EIGHT�BIT� *�BINARY�NUMBERS�AND�CONVERTS�THEM *�INTO�THREE�THREE�DIGIT�BCD�NUMBERS. *�BINARY�NUMBERS�IN�NUM1,�NUM2,�NUM3.� *�BCD�NUMBERS�AT�00,03,06.� �SPC�1 HEXDEC�LDAA�NUM1…BIN�NUM1�TO�ACC�A� �LDX�#0�RESET�DIGIT�PNTR� �BSR�HNDRDS ‚LDAA�NUM2ŒBIN�NUM2�TO�ACC�A� �BSR�HNDRDS �LDAA�NUM3�BIN�NUM3�TO�ACC�A� �BSR�HNDRDS �RTS HNDRDS�CLRBŒCLEAR�CNTR� SBL7�STAB�0,XŠSTORE�CNTR�VALUE�HUNDREDS� �SUBA�#100 �BCS�TENS �INCB� �BRA�SBL7 TENS�ADDA�#100 �INX �CLRB SBL8�STAB�0,XŠSTORE�CNTR�VALUE�TENS� �SUBA�#10 �BCS�UNITS �INCB �BRA�SBL8 UNITS�ADDA�#10 �INX �CLRB� SBLG�STAB�0,XŠSTORE�CNTR�VALUE�UNITS� �SUBA�#1 �BCS�SBL10 �INCB �BRA�SBLG SBL10�INX �RTSŽRETURN� �SPC2 *�DIAGNOSTIC�OUTPUT�ROUTINE� *�GRAPHICAL�DATA�LOAD� �SPC�2� GRPHIN�LDAA�INDEX…INDEX�NUM�(HEX)� �LDX�GRPHIR�DATA�LOCATION�TO�IR� �STAA�0,X† �INX� �LDAA�PARAM1 �STAA�0,X� �INX� �LDAA�PARAM2 �STAA�0,X� �INX� �LDAA�PARAM3 �STAA�0,X� �INX �LDAA�PARAM4 �STAA�0,X �INX �LDAA�PARAM5 �STAA�0,X �INX �LDAA�PARAM6 �STAA�0,X �INX �LDAA�PARAM7 �STAA�0,X �INX �STX�GRPHIR �RTS �SPC�2� *�THIS�ROUTINE�GENERATES�A�GRAPHICAL�OUTPUT *�ON�A�TERMINAL�KEYBOARD‚ *�IT�INCLUDES�ROUTINES *�FOR�INTERFACING�WITH�THE‚EXBUG�PROGRAM *�KBD�ROUTINE�AND�TABLES�OF�TEXT�CHARACTERS. �SPC�1 CR�EQU�$0D LF�EQU�$0A �SPC�1 GRAPH�LDAA�#CR”C.R.� �JSR�PRNTCH� �LDAA�#LF”L.F.� �JSR�PRNTCH� �JSR�PRNTCH� �LDX�#HDRTBLŽHEADER�TABLE�START�TO�PNTR� �JSR�PRNTCH“PRINT�HEADER� �LDX�#DATA‚DATA�TABLE�START� NEWLIN�LDAA�0,X �BEQ�LPUG17…LAST�DATA�TEST� �STX�GRPHIR� �JSR�HEXDEC+2 �LDX�GRPHIR� �LDAA�$00 �JSR�PRNTNU“MSD�PDC� �LDAA�$01 �JSR�PRNTNU“ISD�PDC� �LDAA�$02 �JSR�PRNTNU“LSD�PDC� �INX �LDAA�#$20”LOAD�SPACE� �BSR�PRINT”TYPE�2�SPACES� �BSR�PRINT �CLR�VALCNT…LOAD�VALUE�CNTR� LPUG1�LDX�GRPHIR� �INX� �CLR�DATAF� �LDAA�#'A…LOAD�CHAR. �BSR�SEARCH…FIND�1ST�PARAM� �LDAA�#'B‡....�=�VALUE�CNTR� �BSR�SEARCH �LDAA�#'C �BSR�SEARCH �LDAA�#'D �BSR�SEARCH �LDAA�#'E �BSR�SEARCH �LDAA�#'F �BSR�SEARCH �LDAA�#'G �BSR�SEARCH �TST�DATAF �BNE�LPUG5� �BSR�DOTS LPUG5�INC�VALCNT“INCR�VALUE�COUNTER� �LDAA�VALCNT…VALCNT�OVERFLOW�? �CMPA�#$42 �BNE�LPUG1 �BSR�LINE �CPX�#$0300‡LAST� DATA�LOC.?� �BEQ�LPUG17� �CPX�#$0500� �BNE�NEWLIN� LPUG17�LDX�#MSG1•MSG1� �BSR�PRNTCH TYPIN�JSR�$FA8B�EXBUG�KBD�INPUT� �CMPA�#$47”GRAPH?� �BNE�LPUG18 �BSR�LINE �JMP�ENTRY1ƒUSER�PROGRAM‚ LPUG18�CMPA�#$52”NEW�RUN?� �BNE�LPUG3 �BSR�LINE �JMP�NEWRUNƒUSER�PROGRAM LPUG3�CMPA�#'W�WAIT?� �BNE�LPUG4 �BSR�LINE �JMP�WAITƒUSER�PROGRAM LPUG4�CMPA�#'X…EXBUG?� �BNE�LPUG4A �BSR�LINE �SWI LPUG4A�BRA�TYPIN LINE�LDAA�#CR �BSR�PRINT �LDAA�#LF �BSR�PRINT �RTS PRINT�JSR�$F9DC �RTS �SPC�1 SEARCH�LDAB�0,X…NEW�PARAM�VALUE� �LSRB…DIVIDE�BY�4� �LSRB �TST�DATAF…CHAR.�WRITTEN? �BNE�LPUG6 �CMPB�VALCNT…VALUE�=�VALCNT?� �BNE�LPUG6 �COM�DATAF…SET�DATAF� �BSR�PRINT…PRINT�CHAR� LPUG6�INX �RTS �SPC�1 *�NUMBER�ALREADY�LOCATED�IN�ACC�A� PRNTNU�LDAB�#$30ŽCONVERSION�TO�ASCII� �ABA �BSR�PRINT �RTS PRNTCH�LDAA�00,XŽFETCH�CHARACTER� �CMPA�#'~•END�OF�TABLE?�"�~�"� �BEQ�ENDTAB �BSR�PRINT”PRINT� �INXšINCR�CHAR�CNTR� �BRA�PRNTCH� ENDTAB�RTS �SPC�1 DOTS�LDAB�VALCNT� LPUG14�CMPB�#$00ŽZEROTH�DOT?� �BEQ�LPUG12 �SUBB�#$05 �BCC�LPUG14�COUNT�NEG� �LDAA�#$20–SPACE� �BSR�PRINT �BRA�LPUG16 LPUG12�LDAA�#'.�PRINT�DOT� �BSR�PRINT LPUG16�RTS �SPC�2� *�THIS�SUBROUTINE�CLEARS�THE�MEMORY�LOCATIONS�WHICH� *�ARE�TO�BE�USED�FOR�THE�DIAGNOSTIC�ROUTINE�GRAPH� �SPC2� CLRDAT�LDX�#$0100‚1ST�DATA�LOCATION� LPUG1N�CLR�00,X� �INX� �CPX�#$0500ƒLAST�DATA�LOCATION� �BEQ�LPUG20� �BRA�LPUG1N� LPUG20�RTS� �SPC�2 �SPC�1 *�TABLES� �SPC�1 MSG1�FCB�,CR,LF, �FCC�/G�=�GRAPH/ �FCB�,CR,LF, �FCC�/W�=�WAIT�FOR�NEW�RUN/ �FCB�,CR,LF, �FCC�/R�=�NEW�RUN/ �FCB�,CR,LF, �FCC�/X�=�EXBUG/ �FCB�,CR,LF, �FCC�/DO�NEXT�?ƒ/ �FCB�,'~, �RTS �SPC�1 HDRTBL�FCB�,CR,LF,LF, �FCC�/‚A�=�PARAM1/ �FCB�,CR,LF, �FCC�/‚B�=�PARAM2/ �FCB�,CR,LF, �FCC�/‚C�=�PARAM3/ �FCB�,CR,LF, �FCC�/‚D�=�PARAM4/ �FCB�,CR,LF, �FCC�/‚E�=�PARAM5/ �FCB�,CR,LF, �FCC�/‚F�=�PARAM6/ �FCB�,CR,LF, �FCC�/‚G�=�PARAM7/ �FCB�,CR,LF,LF,'~, �RTS �SPC�1 �SPC�5 ********** *�USER�SUPPLIED�ROUTINES: *‚ENTRY1 *‚NEWRUN *‚WAIT *� ********** �SPC�1 ENTRY1�EQU�* NEWRUN�EQU�* WAIT�EQU�* �BRA�* �SPC�3 �END ÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅ|Áá€��NAM�MICROƒMICROBASIC * * *ˆ******VERSION�1.3�******* * *‰BY�ROBERT�H�UITERWYK,�TAMPA,FLORIDA * *THIS�PROGRAM�ASSUMES�THAT�THE *MOTOROLA�MIKBUG�ROM�IS�INSTALLED *AND�THAT�ITS�ASSOCIATED�128�BYTE *RAM�IS�ALSO�PRESENT *THE�SP�AND�XSTACK�WILL�HAVE�TO *BE�MOVED�IF�THIS�IS�NOT�THE�CASE �SPC�5 *SAVE�FIRST�$20�BYTES�FOR *FUTURE�DISK�USE �OPT�NOG �ORG�$20 INDEX1�FDB�$0000 INDEX2�FDB�$0000 INDEX3�FDB�$0000 INDEX4�FDB�$0000 SAVESP�FDB�$0000 NEXTBA�FDB�END WORKBA�FDB�END SOURCE�FDB�END *TO�BE�CHANGED�AT�PROGRAMMERS�OPTION PACKLN�FDB�$0000 HIGHLN�FDB�$0000 BASPNT�FDB�$0000 BASLIN�FDB�$0000 PUSHTX�FDB�$0000 XSTACK�FDB�$A07F RNDVAL�FDB�$0000 DIMPNT�FDB�$0000 DIMCAL�FDB�$0000 PRCNT�FCB�0 MAXLIN�FCB�72 BACKSP�FCB�$0F CANCEL�FCB�$18 MEMEND�FDB�$1FFF �SPC�2 ARRTAB�FDB�$0000 KEYWD�FDB�$0000 TSIGN�FCB�0 NCMPR�FCB�0 TNUMB�FCB�0 ANUMB�FCB�0 BNUMB�FCB�0 AESTK�FDB�ASTACK FORPNT�FDB�FORSTK VARPNT�FDB�VARTAB  SBRPNT�FDB�SBRSTK SBRSTK�RMB�16 FORSTK�RMB�48 DIMVAR�FDB�VARTAB �SPC�2 �ORG�$00AC BUFNXT�FDB�$00B0 ENDBUF�FDB�$00B0 �ORG�$00B0 BUFFER�RMB�$50‚I/O�BUFFER�=�80�DECIMAL �SPC�2 �ORG�$0100 PROGM�JMP�START VARTAB�RMB�78 �FCB�$1E COMMAN�FCC�/RUN/ �FCB�$1E �FDB�RUN �FCC�/LIST/ �FCB�$1E �FDB�CLIST �FCC�/NEW/ �FCB�$1E �FDB�START �FCC�/PAT/ �FCB�$1E �FDB�PATCH GOLIST�FCC�/GOSUB/ �FCB�$1E �FDB�GOSUB �FCC�/GOTO/ �FCB�$1E �FDB�GOTO �FCC�/GO�TO/ �FCB�$1E �FDB�GOTO �FCC�/SIZE/ �FCB�$1E �FDB�SIZE �FCC�/THEN/ �FCB�$1E �FDB�IF2 �FCC�/PRINT/ �FCB�$1E �FDB�PRINT �FCC�/LET/ �FCB�$1E �FDB�LET �FCC�/INPUT/ �FCB�$1E �FDB�INPUT �FCC�/IF/ �FCB�$1E �FDB�IF �FCC�/END/ �FCB�$1E �FDB�READY �FCC�/RETURN/ �FCB�$1E �FDB�RETURN �FCC�/DIM/ �FCB�$1E �FDB�DIM �FCC�/FOR/ �FCB�$1E �FDB�FOR �FCC�/NEXT/ �FCB�$1E �FDB�NEXT �FCC�/REM/ �FCB�$1E �FDB�REMARK PAUMSG�FCC�/PAUSE/ �FCB�$1E �FDB�PAUSE �FCB�$20 COMEND�FCB�$1E IMPLET�FDB�LET �RMB�60 ASTACK�EQU�*-1 �SPC�2 RDYMSG�FCB�$0D �FCB�$0A �FCB�$15 �FCB�$0A �FCB�$15 �FCC�/READY/ �FCB�$1E PROMPT�FCB�$23 �FCB�$11 �FCB�$1E �FCB�$1E PGCNTL�FCB�$10 �FCB�$16 �FCB�$1E �FCB�$1E �FCB�$1E ERRMS1�FCC�/ERROR#�/ �FCB�$1E ERRMS2�FCC�/�IN�LINE�/ �FCB�$1E �SPC�2 *ALL�PURPOSE�KEYBD�ROUTINE KEYBD�LDAA�#$3F‚OUTPUT�"?" �BSR�OUTCH *SUBROUTINE�ENTRY�WITHOOUT�"?" KEYBD0�LDX�#BUFFER‚START�OF�KEYBD�ROUTINE �LDAB�#10 KEYBD1�BSR�INCH‚GET�A�CHARACTER �CMPA�#$00 �BNE�KEYB11 �DECB �BNE�KEYBD1 KEYB10�JMP�READY KEYB11�CMPA�CANCEL �BEQ�DEL �CMPA�#$0D‚IS�IT�C/R? �BEQ�IEXIT�IF�SO�EXIT KEYBD2�CMPA�#$0A‚IS�IT�LF �BEQ�KEYBD1‚IF�SO�IGNORE �CMPA�#$15 �BEQ�KEYBD1 �CMPA�#$13 �BEQ�KEYBD1 KEYB55�CMPA�BACKSP �BNE�KEYBD3‚IF�NOT,CONTINUE �CPX�#BUFFER‚IS�IT�FIRST�CHARACTER? �BEQ�KEYBD1‚IF�SO,�JUST�RELOOP �DEX‚OTHERWISE,�BACKSPACE �BRA�KEYBD1‚AND�THEN�RELOOP KEYBD3�CPX�#BUFFER+71 �BEQ�KEYBD1‚IF�SO,IGNORE�AND�RELOOP �STAA�0,X �INX �BRA�KEYBD1 DEL�BSR�CRLF CNTLIN�LDX�#PROMPT �BSR�OUTNCR �BRA�KEYBD0 IEXIT�LDAA�#$1E �STAA�X �STX�ENDBUF �BSR�CRLF �RTS �SPC�1 OUTCH�BSR�BREAK �JMP�OUTEEE OUTEEE�EQU�$E1D1 �SPC�1 INCH�JMP�INEEE �SPC�1 BREAK�JMP�BREAK1 BREAK1�PSHA �LDAA�PIAD PIAD�EQU�$8004 �BMI�BREAK2 �JMP�READY BREAK2�PULA �RTS INEEE�EQU�$E1AC �SPC�2 *UNIVERSAL�OUTPUT�ROUTINE OUTPUT�EQU�* �BSR�OUTNCR �BRA�CRLF OUTPU2�BSR�OUTCH OUTPU3�INX OUTNCR�LDAA�0,X �CMPA�#$1E �BNE�OUTPU2 �RTS CRLF�BSR�PUSHX �LDX�#CRLFST �BSR�OUTNCR �BSR�PULLX �RTS CRLFST�FCB�$13 �FCB�$0D �FCB�$0A �FCB�$15 �FCB�$00,$00 CREND�FCB�$1E,$FF,$FF �FCB�$1E‚RS PUSHX�STX�PUSHTX �LDX�XSTACK �DEX �DEX �STX�XSTACK �PSHA �LDAA�PUSHTX �STAA�0,X �LDAA�PUSHTX+1 �STAA�1,X �PULA �LDX�PUSHTX �RTS PULLX�LDX�XSTACK �LDX�0,X �INC�XSTACK+1 �INC�XSTACK+1 �RTS �SPC�5 STORE�PSHA �PSHB �BSR�PUSHX �JSR�PULLAE �LDX�AESTK �INX �INX �STX�AESTK �DEX �LDX�0,X �STAA�0,X �STAB�1,X �BSR�PULLX �PULB �PULA �RTS �SPC�5 IND�BSR�PUSHX �PSHA �PSHB �LDX�AESTK �INX �INX �STX�AESTK �DEX �LDX�0,X �LDAA�0,X �LDAB�1,X �JSR�PUSHAE �PULB �PULA �BSR�PULLX �RTS �SPC�5 LIST�LDX�NEXTBA �STX�WORKBA �LDX�SOURCE �BRA�LIST1 LIST0�LDX�INDEX3 LIST1�CPX�WORKBA �BEQ�LEXIT �BSR�OUTLIN �INX‚SKIP�OVER�THE�04�AT�END�OF�LINE �BRA�LIST1 LEXIT�RTS �SPC�5 OUTLIN�LDAA�0,X �CLR�PRCNT �INX �LDAB�0,X �INX �CLR�TSIGN �JSR�PRN0 �BSR�PRINSP OUTLI1�LDAA�0,X �INX �BSR�PUSHX �LDX�#COMMAN �STX�KEYWD �STAA�KEYWD+1 �LDX�KEYWD �DEX OUTLI2�DEX �LDAA�0,X �CMPA�#$1E �BNE�OUTLI2 �INX �INX �INX �JSR�OUTNCR �JSR�PULLX �JMP�OUTPUT �SPC�2 PRI NSP�PSHA �LDAA�#$20 �JSR�OUTCH �PULA �RTS �SPC�5 RANDOM�INX �INX �LDAA�0,X �CMPA�#'D �BNE�TSTVER �JSR�PUSHX �LDAA�RNDVAL �LDAB�RNDVAL+1 �LDX�#0000 RAND1�ADCB�1,X �ADCA�0,X �INX �INX �CPX�#RNDVAL �BNE�RAND1 �ANDA�#$7F �STAA�RNDVAL �STAB�RNDVAL+1 �STX�INDEX1 �LDAA�INDEX1 �LDAB�INDEX1+1 �JMP�TSTV9 TSTV�JSR�SKIPSP �JSR�BREAK �JSR�TSTLTR �BCC�TSTV1 �RTS TSTV1�CMPA�#'R �BNE�TSTV2 �LDAB�1,X �CMPB�#'N �BEQ�RANDOM TSTV2�JSR�PUSHX �SUBA�#$40 �STAA�VARPNT+1 �ASLA �ADDA�VARPNT+1 �STAA�VARPNT+1 �LDX�VARPNT �LDAA�VARPNT �LDAB�VARPNT+1 �TST�2,X �BNE�TSTV20 �JMP�TSTV9 TSTV20�LDX�0,X �STX�DIMPNT �INX �INX �STX�DIMCAL �JSR�PULLX �JSR�INXSKP �CMPA�#'( �BEQ�TSTV22 TSTVER�JMP�DBLLTR TSTV22�INX �JSR�EXPR �JSR�PUSHX �JSR�PULLAE �TSTA �BEQ�TSTV3 SUBER1�JMP�SUBERR TSTV3�LDX�DIMPNT �TSTB �BEQ�SUBER1 �CMPB�0,X �BHI�SUBER1 �LDAA�1,X �STAA�ANUMB �BEQ�TST666 �LDX�DIMCAL TSTV4�DECB �BEQ�TSTV6 �LDAA�ANUMB TSTV5�INX �INX �DECA �BNE�TSTV5 �BRA�TSTV4 TSTV6�STX�DIMCAL �JSR�PULLX �JSR�SKIPSP �CMPA�#', �BNE�TSTVER �INX �JSR�EXPR �JSR�PUSHX �JSR�PULLAE �TSTA �BNE�SUBER1 �LDX�DIMPNT �TSTB �BEQ�SUBER1 �CMPB�1,X �BHI�SUBER1 TST666�LDX�DIMCAL TSTV7�INX �INX �DECB �BNE�TSTV7 �DEX �DEX �STX�DIMCAL �JSR�PULLX �JSR�SKIPSP TSTV8�CMPA�#') �BNE�TSTVER �JSR�PUSHX �LDAA�DIMCAL �LDAB�DIMCAL+1 TSTV9�JSR�PULLX �INX �JSR�PUSHAE �CLC �RTS TSTLTR�CMPA�#$41 �BMI�NONO �CMPA�#$5A �BLE�YESNO �SPC�2 TESTNO�CMPA�#$30 �BMI�NONO �CMPA�#$39 �BLE�YESNO NONO�SEC �RTS YESNO�CLC �RTS �SPC�5 PULPSH�BSR�PULLAE �SPC�1 PUSHAE�STS�SAVESP �LDS�AESTK �PSHB �PSHA �STS�AESTK �LDS�SAVESP �RTS �SPC�2 PULLAE�STS�SAVESP �LDS�AESTK �PULA �PULB �STS�AESTK �LDS�SAVESP �RTS �SPC�2 FACT�JSR�SKIPSP �JSR�TSTV �BCS�FACT0 �JSR�IND �RTS FACT0�JSR�TSTN �BCS�FACT1 �RTS FACT1�CMPA�#'( �BNE�FACT2 �INX �BSR�EXPR �JSR�SKIPSP �CMPA�#') �BNE�FACT2 �INX �RTS FACT2�LDAB�#13 �JMP�ERROR �SPC�5 TERM�BSR�FACT TERM0�JSR�SKIPSP �CMPA�#'* �BNE�TERM1 �INX �BSR�FACT �BSR�MPY �BRA�TERM0 TERM1�CMPA�#'/ �BNE�TERM2 �INX �BSR�FACT �JSR�DIV �BRA�TERM0 TERM2�RTS �SPC�5 EXPR�JSR�SKIPSP �CMPA�#'- �BNE�EXPR0 �INX �BSR�TERM �JSR�NEG �BRA�EXPR1 EXPR0�CMPA�#'+ �BNE�EXPR00 �INX EXPR00�BSR�TERM EXPR1�JSR�SKIPSP �CMPA�#'+ �BNE�EXPR2 �INX �BSR�TERM �JSR�ADD �BRA�EXPR1 EXPR2�CMPA�#'- �BNE�EXPR3 �INX �BSR�TERM �JSR�SUB �BRA�EXPR1 EXPR3�RTS �SPC�5 MPY�BSR�MDSIGN �LDAA�#15 �STAA�0,X �CLRB �CLRA MPY4�LSR�3,X �ROR�4,X �BCC�MPY5 �ADDB�2,X �ADCA�1,X �BCC�MPY5 MPYERR�LDAB�#2 �JMP�ERROR MPY5�ASL�2,X �ROL�1,X �DEC�0,X �BNE�MPY4 �TSTA �BMI�MPYERR �TST�TSIGN �BPL�MPY6 �JSR�NEGAB MPY6�STAB�4,X �STAA�3,X �JSR�PULLX �RTS �SPC�5 MDSIGN�JSR�PUSHX �CLRA �LDX�AESTK �TST�1,X �BPL�MDS2 �BSR�NEG �LDAA�#$80 MDS2�INX �INX �STX�AESTK �TST�1,X �BPL�MDS3 �BSR�NEG �ADDA�#$80 MDS3�STAA�TSIGN �DEX �DEX �RTS �SPC�5 DIV�BSR�MDSIGN �TST�1,X �BNE�DIV33 �TST�2,X �BNE�DIV33 �LDAB�#8 �JMP�ERROR DIV33�LDAA�#1 DIV4�INCA �ASL�2,X �ROL�1,X �BMI�DIV5 �CMPA�#17 �BNE�DIV4 DIV5�STAA�0,X �LDAA�3,X �LDAB�4,X �CLR�3,X �CLR�4,X DIV163�SUBB�2,X �SBCA�1,X �BCC�DIV165 �ADDB�2,X �ADCA�1,X �CLC �BRA�DIV167 DIV165�SEC DIV167�ROL�4,X �ROL�3,X �LSR�1,X �ROR�2,X �DEC�0,X �BNE�DIV163 �TST�TSIGN �BPL�DIV169 �BSR�NEG DIV169�JSR�PULLX �RTS �SPC�5 NEG�PSHA �PSHB �JSR�PULLAE �BSR�NEGAB �JSR�PUSHAE �PULB �PULA �RTS �SPC�2 NEGAB�COMA �COMB �ADDB�#1 �ADCA�#0 �RTS �SPC�5 SUB�BSR�NEG �SPC�2 ADD�JSR�PULLAE ADD1�STAB�BNUMB �STAA�ANUMB �JSR�PULLAE �ADDB�BNUMB �ADCA�A  NUMB �JSR�PUSHAE �CLC �RTS �SPC�2 FINDNO�LDAA�HIGHLN �LDAB�HIGHLN+1 �SUBB�PACKLN+1 �SBCA�PACKLN �BCS�HIBALL FINDN1�LDX�SOURCE FIND0�JSR�PULPSH �SUBB�1,X �SBCA�0,X �BCS�FIND3 �BNE�FIND1 �TSTB �BEQ�FIND4 FIND1�INX FIND2�BSR�INXSKP �CMPA�#$1E �BNE�FIND2 �INX �CPX�NEXTBA �BNE�FIND0 HIBALL�LDX�NEXTBA FIND3�SEC FIND4�STX�WORKBA �JSR�PULLAE �RTS �SPC�2 SKIPSP�LDAA�0,X �CMPA�#$20 �BNE�SKIPEX INXSKP�INX �BRA�SKIPSP SKIPEX�RTS �SPC�2 LINENO�JSR�INTSTN �BCC�LINE1 �LDAB�#7 �JMP�ERROR LINE1�JSR�PULPSH �STAA�PACKLN �STAB�PACKLN+1 �STX�BUFNXT �RTS �SPC�2 NXTLIN�LDX�BASPNT NXTLI2�LDAA�0,X �INX �CMPA�#$1E �BNE�NXTLI2 �STX�BASLIN �RTS �SPC�2 CCODE�BSR�SKIPSP �STX�INDEX4 �STS�SAVESP �LDX�#COMMAN-1 LOOP3�LDS�INDEX4 �DES LOOP4�INX �PULA �LDAB�0,X �CMPB�#$1E �BEQ�LOOP7 �CBA �BEQ�LOOP4 LOOP5�INX �CPX�#COMEND �BEQ�CCEXIT �LDAB�0,X �CMPB�#$1E �BNE�LOOP5 LOOP6�INX �INX �BRA�LOOP3 LOOP7�INX �STS�BUFNXT �STS�BASPNT LOOP8�LDS�SAVESP �RTS CCEXIT�LDS�SAVESP �LDX�#IMPLET �RTS �SPC�2 �SPC�5 *START�OF�MAIN�PROGRAM * * START�LDX�SOURCE�SET�TO�FIRST�BASIC�LOCATION �STX�NEXTBA �STX�WORKBA �STX�ARRTAB �DEX �CLRA START2�INX �STAA�0,X �CPX�MEMEND �BNE�START2 START1�CLRA �STAA�PACKLN �STAA�PACKLN+1 �STAA�PRCNT �LDX�PACKLN �STX�HIGHLN READY�LDS�#$A045 �LDX�#RDYMSG �JSR�OUTPUT NEWLIN�LDS�#$A045 �LDX�#$A07F �STX�XSTACK �CLR�PRCNT NEWL3�JSR�CNTLIN �LDX�#BUFFER �JSR�SKIPSP �STX�BUFNXT �JSR�TESTNO �BCS�LOOP2 �JMP�NUMBER LOOP2�CMPA�#$1E �BEQ�NEWLIN �JSR�CCODE �LDX�0,X �JMP�0,X �SPC�5 ERROR�LDS�#$A045 �JSR�CRLF �LDX�#ERRMS1 �JSR�OUTNCR �CLRA �JSR�PUSHAE �JSR�PRN �LDX�#ERRMS2 �JSR�OUTNCR �CLRB �LDAA�BASLIN �BEQ�ERROR2 �LDX�BASLIN �LDAA�0,X �LDAB�1,X ERROR2�JSR�PRN0 �JSR�CRLF �BRA�READY �SPC�5 RUN�LDX�SOURCE‚WITH�TEXT�BUFFER�POINTER �STX�BASLIN �LDX�#SBRSTK �STX�SBRPNT �LDX�#FORSTK �STX�FORPNT �LDX�#$A07F �STX�XSTACK �LDX�NEXTBA �STX�ARRTAB �CLRA �DEX RUN1�INX �STAA�0,X �CPX�MEMEND �BNE�RUN1 �LDX�#VARTAB �LDAB�#78 RUN2�STAA�0,X �INX �DECB �BNE�RUN2 �JMP�BASIC �SPC�5 CLIST�LDX�#PGCNTL �JSR�OUTPUT �LDX�BASPNT CLIST1�JSR�SKIPSP �CMPA�#$1E �BEQ�CLIST4 �JSR�INTSTN �STX�BASPNT �JSR�FINDN1 �STX�INDEX3 �LDX�BASPNT �PSHA �JSR�SKIPSP �CMPA�#$1E �PULA �BNE�CLIST2 �JSR�PUSHAE �BRA�CLIST3 CLIST2�INX �JSR�INTSTN CLIST3�CLRA �LDAB�#1 �JSR�ADD1 �JSR�FINDN1 �JSR�LIST0 �BRA�CLIST5 CLIST4�JSR�LIST CLIST5�JMP�REMARK �NOP �SPC�2 PATCH�JSR�NXTLIN �LDX�#BASIC �STX�$A046 �LDS�#$A040 �STS�SP SP�EQU�$A008‚IN�MIKBUG�RAM �JMP�CONTRL CONTRL�EQU�$E0E3‚INMIKBUG �SPC�2 NUMBER�JSR�LINENO NUM1�JSR�FINDNO �BCC�DELREP *�YOU�HAVE�IDENTICAL�NUMBER�AND�U�MUST�DELETE�AND�INSERT �LDX�WORKBA �CPX�NEXTBA �BEQ�CAPPEN‚IF�AT�END�FILE *�YOU�MERELY�APPEND *�OTHERWISE�JUST�INSERT�AND�RETURN �BSR�INSERT �BRA�NEXIT DELREP�LDX�BUFNXT‚GET�FIRST�CHARACTER�AFTER�LINENO �JSR�SKIPSP �CMPA�#$1E�IS�FIRST�CHARACTER�RS �BNE�REPLAC‚IF�NOT�YOU�ARE�REPLACING�LINE �LDX�NEXTBA �CPX�SOURCE �BEQ�NEXIT �BSR�DELETE‚OTHERWISE�ONLY�DELETE�AND�RETURN �BRA�NEXIT REPLAC�BSR�DELETE �BSR�INSERT NEXIT�JMP�NEWLIN CAPPEN�BSR�INSERT �LDX�PACKLN‚AND�MAKE�THIS�LINE�NEW�HIGH�LINE�NO �STX�HIGHLN �BRA�NEXIT �SPC�2 DELETE�STS�SAVESP �LDX�WORKBA �LDS�NEXTBA �LDAB�#2 �INX �INX �DES �DES DEL2�LDAA�0,X �DES �INX �INCB �CMPA�#$1E‚IF�NOT�RS,DO�IT�AGAIN �BNE�DEL2 �STS�NEXTBA‚STACK�WAS�DECREMENTED�BY�#�OF�CHA�IN�LINE �STS�ARRTAB �LDX�WORKBA �STAB�DEL5+1‚THIS�PUTS�REAL�OFFSET� *�IN�AT�OBJECT�TIME DEL4�CPX�NEXTBA!  �BEQ�DELEX DEL5�LDAA�0,X �STAA�0,X‚HONEST�0�OFFSET �INX �BRA�DEL4 DELEX�LDS�SAVESP �RTS �SPC�2 INSERT�LDX�BUFNXT �JSR�CCODE INS1�STX�KEYWD �LDAB�ENDBUF+1 �SUBB�BUFNXT+1 �ADDB�#$04 �STAB�OFFSET+1‚THE�DUMMY�OFFSETS�BELOW �ADDB�NEXTBA+1 �LDAA�#$00 �ADCA�NEXTBA �CMPA�MEMEND �BHI�OVERFL �STAB�NEXTBA+1 �STAA�NEXTBA‚THIS�INCREMENTS�NEXTBA�FOR�OFFSET�AMOUNT �LDX�NEXTBA �STX�ARRTAB INS2�CPX�WORKBA �BEQ�BUFWRT �DEX �LDAA�0,X OFFSET�STAA�0,X‚FALSE�OFFSET �BRA�INS2 BUFWRT�LDX�WORKBA‚WE�HAVE�OPENED�HOLE,NOW�CAN�INSERT *THE�KEYBD�BUFFER �STS�SAVESP �LDAA�PACKLN �STAA�0,X �INX �LDAA�PACKLN+1 �STAA�0,X �INX �LDAA�KEYWD+1 �STAA�0,X �INX �LDS�BUFNXT �DES BUF3�PULA �STAA�0,X �INX �CMPA�#$1E �BNE�BUF3 �LDS�SAVESP �RTS OVERFL�LDAB�#14 �JMP�ERROR �SPC�5 BASIC�LDX�BASLIN �CPX�NEXTBA �BNE�BASIC1 BASIC0�JMP�READY BASIC1�TST�BASLIN �BEQ�BASIC0 �INX �INX �LDAA�0,X �INX �STX�BASPNT �LDX�#COMMAN �STX�KEYWD �STAA�KEYWD+1 �LDX�#ASTACK �STX�AESTK �LDX�KEYWD �LDX�0,X BASIC2�JMP�0,X �SPC�5 GOSUB�LDX�BASLIN �STX�INDEX1 �JSR�NXTLIN �LDX�SBRPNT �CPX�#SBRSTK+16 �BNE�GOSUB1 �LDAB�#9 �JMP�ERROR GOSUB1�LDAA�BASLIN �STAA�0,X �INX �LDAA�BASLIN+1 �STAA�0,X �INX �STX�SBRPNT �LDX�INDEX1 �STX�BASLIN GOTO�LDX�BASPNT �JSR�EXPR �JSR�FINDN1 �BCC�GOTO2 �LDAB�#7 �JMP�ERROR GOTO2�STX�BASLIN �BRA�BASIC �SPC�5 RETURN�LDX�SBRPNT �CPX�#SBRSTK �BNE�RETUR1 �LDAB�#10 �JMP�ERROR RETUR1�DEX �DEX �STX�SBRPNT �LDX�0,X �STX�BASLIN �BRA�BASIC �SPC�5 �SPC�5 PAUSE�LDX�#PAUMSG �JSR�OUTNCR �JSR�PRINSP �LDX�BASLIN �LDAA�0,X �INX �LDAB�0,X �INX �JSR�PRN0 PAUSE1�JSR�INCH �CMPA�#$0D �BNE�PAUSE1 �JSR�CRLF PAUSE2�JMP�REMARK �SPC�5 INPUT�LDAA�BASPNT �BNE�INPUT0 �LDAB�#12 �BRA�INPERR INPUT0�JSR�KEYBD �LDX�#BUFFER �STX�BUFNXT �LDX�BASPNT INPUT1�JSR�TSTV �BCS�INPEX �STX�BASPNT �LDX�BUFNXT INPUT2�BSR�INNUM �BCC�INPUT4 �DEX �LDAA�0,X �CMPA�#$1E �BEQ�INPUT3 �LDAB�#2 INPERR�JMP�ERROR INPUT3‚JSR�KEYBD �LDX�#BUFFER �BRA�INPUT2 INPUT4�JSR�STORE �INX �STX�BUFNXT �LDX�BASPNT �JSR�SKIPSP �INX �CMPA�#', �BEQ�INPUT1 INPEX�DEX �CLR�PRCNT �CMPA�#$1E �BEQ�PAUSE2 DBLLTR�LDAB�#3 �JMP�ERROR �SPC�5 TSTN�BSR�INTSTN �BCS�TSTN0 �JSR�PULLAE �TSTA �BPL�TSTN1 TSTN0�SEC �RTS TSTN1�JSR�PUSHAE �RTS �SPC�2 INNUM�JSR�SKIPSP �STAA�TSIGN �INX �CMPA�#'- �BEQ�INNUM0 �DEX INTSTN�CLR�TSIGN INNUM0�JSR�SKIPSP �JSR�TESTNO �BCC�INNUM1 �RTS INNUM1�DEX �CLRA �CLRB INNUM2�INX �PSHA �LDAA�0,X �JSR�TESTNO �BCS�INNEX �SUBA�#$30 �STAA�TNUMB �PULA �ASLB �ROLA �BCS�INNERR �STAB�BNUMB �STAA�ANUMB �ASLB �ROLA �BCS�INNERR �ASLB �ROLA �BCS�INNERR �ADDB�BNUMB �ADCA�ANUMB �BCS�INNERR �ADDB�TNUMB �ADCA�#0 �BCC�INNUM2 INNERR�LDAB�#2 �JMP�ERROR INNEX�PULA �TST�TSIGN �BEQ�INNEX2 �JSR�NEGAB INNEX2�JSR�PUSHAE �CLC �RTS �SPC�2 PRINT�LDX�BASPNT PRINT0�JSR�SKIPSP �CMPA�#'" �BNE�PRINT4 �INX PRINT1�LDAA�0,X �INX �CMPA�#'" �BEQ�PRIN88 �CMPA�#$1E �BNE�PRINT2 �LDAB�#4 �BRA�PRINTE PRINT2�JSR�OUTCH �JSR�ENLINE �BRA�PRINT1 PRINT4�CMPA�#$1E �BNE�PRINT6 �DEX �LDAA�0,X �INX �CMPA�#'; �BEQ�PRINT5 �JSR�CRLF �CLR�PRCNT PRINT5�INX �STX�BASLIN �JMP�BASIC PRINT6�CMPA�#'T �BNE�PRINT8 �LDAB�1,X �CMPB�#'A �BNE�PRINT8 �INX �INX �LDAA�0,X �CMPA�#'B �BEQ�PRINT7 �LDAB�#11 PRINTE�JMP�ERROR PRINT7�INX �JSR�EXPR �JSR�PULLAE �SUBB�PRCNT �BLS�PRIN88 PRIN77�JSR�PRINSP �BSR�ENLINE �DECB �BNE�PRIN77 �BRA�PRIN88 PRINT8�JSR�EXPR �JSR�PRN PRIN88�JSR�SKIPSP �CMPA�#', �BNE�PRIN99 �INX PRLOOP�LDAA�PRCNT �TAB �ANDB�#$F8 �SBA �BEQ�PRI999 �JSR�PRINS" P �BSR�ENLINE �BRA�PRLOOP PRIN99�CMPA�#'; �BNE�PREND �INX PRI999�JMP�PRINT0 PREND�CMPA�#$1E �BEQ�PRINT4 �LDAB�#6 �BRA�PRINTE �SPC�5 ENLINE�PSHA �LDAA�PRCNT �INCA �CMPA�MAXLIN �BNE�ENLEXT �JSR�CRLF �CLRA ENLEXT�STAA�PRCNT �PULA �RTS �SPC�5 PRN�JSR�PRINSP �BSR�ENLINE �LDAA�#$FF �STAA�TSIGN �JSR�PULLAE �TSTA �BPL�PRN0 �JSR�NEGAB �PSHA �LDAA�#'- �JSR�OUTCH �BSR�ENLINE �PULA PRN0�JSR�PUSHX �LDX�#KIOK PRN1�CLR�TNUMB PRN2�SUBB�1,X �SBCA�0,X �BCS�PRN5 �INC�TNUMB �BRA�PRN2 PRN5�ADDB�1,X �ADCA�0,X �PSHA �LDAA�TNUMB �BNE�PRN6 �CPX�#KIOK+8 �BEQ�PRN6 �TST�TSIGN �BNE�PRN7 PRN6�ADDA�#$30 �CLR�TSIGN �JSR�OUTCH �BSR�ENLINE PRN7�PULA �INX �INX �CPX�#KIOK+10 �BNE�PRN1 �JSR�PULLX �RTS �SPC�1 KIOK�FDB�10000 �FDB�1000 �FDB�100 �FDB�10 �FDB�1 �SPC�5 LET�LDX�BASPNT �JSR�TSTV �BCC�LET1 LET0�LDAB�#12 LET00�JMP�ERROR LET1�JSR�SKIPSP �INX �CMPA�#'= �BEQ�LET3 LET2�LDAB�#6 �BRA�LET00 LET3�JSR�EXPR �CMPA�#$1E �BNE�LET2 �JSR�STORE �BRA�REMARK �SPC�5 SIZE�LDAB�ARRTAB+1 �LDAA�ARRTAB �SUBB�SOURCE+1 �SBCA�SOURCE �JSR�PRN0 �JSR�PRINSP �LDAB�MEMEND+1 �LDAA�MEMEND �SUBB�ARRTAB+1 �SBCA�ARRTAB �JSR�PRN0 �JSR�CRLF REMARK�JSR�NXTLIN �JMP�BASIC �SPC�5 DIM�LDX�BASPNT DIM1�JSR�SKIPSP �JSR�TSTLTR �BCC�DIM111 �JMP�DIMEX DIM111�SUBA�#$40 �STAA�DIMVAR+1 �ASLA �ADDA�DIMVAR+1 �STAA�DIMVAR+1 �JSR�PUSHX �LDX�DIMVAR �TST�0,X �BNE�DIMERR �TST�1,X �BNE�DIMERR �TST�2,X �BNE�DIMERR �LDAA�ARRTAB+1 �STAA�1,X �LDAA�ARRTAB �STAA�0,X �STAA�2,X �JSR�PULLX �JSR�INXSKP �CMPA�#'( �BEQ�DIM2 DIMERR�LDAB�#5 DIMER1�JMP�ERROR DIM2�INX �JSR�EXPR �JSR�PULPSH �TSTB �BEQ�SUBERR �TSTA �BEQ�DIM3 SUBERR�LDAB�#15 �BRA�DIMER1 DIM3�BSR�STRSUB �LDAA�0,X �CMPA�#', �BNE�DIM6 �INX �JSR�EXPR �JSR�PULPSH �TSTB �BEQ�SUBERR �TSTA �BNE�SUBERR �BSR�STRSUB �JSR�MPY DIM6�CLRA �LDAB�#2 �JSR�PUSHAE �JSR�MPY �LDAA�0,X �CMPA�#') �BNE�DIMERR �INX �LDAB�ARRTAB+1 �LDAA�ARRTAB �JSR�ADD1 �CLRA �LDAB�#2 �JSR�ADD1 �JSR�PULLAE �CMPA�MEMEND �BLS�DIM7 �JMP�OVERFL DIM7�STAA�ARRTAB �STAB�ARRTAB+1 �JSR�SKIPSP �CMPA�#', �BNE�DIMEX �INX �JMP�DIM1 DIMEX�CMPA�#$1E �BNE�DIMERR �JMP�REMARK �SPC�2 STRSUB�JSR�PUSHX �LDX�DIMVAR �LDX�0,X STRSU2�TST�0,X �BEQ�STRSU3 �INX �BRA�STRSU2 STRSU3�STAB�0,X �JSR�PULLX �RTS �SPC�5 FOR�LDX�BASPNT �JSR�TSTV �BCC�FOR1 �JMP�LET0‚ERROR�JUMP FOR1�STX�BASPNT �JSR�PULPSH �LDX�FORPNT �CPX�#FORSTK+48 �BNE�FOR11 �LDAB�#16 �JMP�ERROR FOR11�STAA�0,X �INX �STAB�0,X �INX �STX�FORPNT �LDX�BASPNT �JSR�SKIPSP �INX �CMPA�#'= �BEQ�FOR3 FOR2�JMP�LET2‚ERROR�JUMP FOR3�JSR�EXPR �JSR�STORE �INX �CMPA�#'T �BNE�FOR2 �LDAA�0,X �INX �CMPA�#'O �BNE�FOR2 �JSR�EXPR �JSR�PULLAE �STX�BASPNT �LDX�FORPNT �STAA�0,X �INX �STAB�0,X �INX �STX�FORPNT �LDX�BASPNT �LDAA�0,X �CMPA�#$1E FOR8�BNE�FOR2‚ERROR�JUMP �INX �STX�BASLIN �LDX�FORPNT �LDAA�BASLIN �STAA�0,X �INX �LDAB�BASLIN+1 �STAB�0,X �INX �STX�FORPNT �JMP�BASIC �SPC�5 NEXT�LDX�BASPNT �JSR�TSTV �BCC�NEXT1 �JMP�LET0‚ERROR�JUMP NEXT1�JSR�SKIPSP �CMPA�#$1E �BNE�FOR8‚ERROR�JUMP �INX �STX�BASLIN �LDX�#FORSTK �JSR�PULPSH NEXT2�CPX�FORPNT �BEQ�NEXT6 �CMPA�0,X �BNE�NEXT5 �CMPB�1,X �BNE�NEXT5 �JSR�IND �JSR�PULPSH �SUBB�3,X �SBCA�2,X �BCS�NEXT4 �STX�FORPNT NEXT3�JMP�BASIC NEXT4�JSR�PULLAE �ADDB�#1 �ADCA�#0 �JSR�PUSHX �LDX�0,X �STAA�0,X �STAB�1,X �JSR�PULLX �LDX�4,X �STX�BASLIN �BRA�NEXT3‚EXIT NEXT5�INX �INX �INX �INX �INX �INX �BRA�NEXT2 NEXT6�LDAB�#17 �JMP�ERROR �SPC�5 IF�LDX�BASPNT �JSR�EXPR �BSR�RELOP �STAA�NCMPR �JSR�EXPR �STX�BASPNT �BSR�CMP# R �BCC�IF2 �JMP�REMARK IF2�LDX�BASPNT �JSR�CCODE �LDX�0,X �JMP�0,X �SPC�2 RELOP�JSR�SKIPSP �INX �CMPA�#'= �BNE�RELOP0 �LDAA�#0ƒ= �RTS RELOP0�LDAB�0,X �CMPA�#'< �BNE�RELOP4 �CMPB�#'= �BNE�RELOP1 �INX �LDAA�#2ƒ<= �RTS RELOP1�CMPB�#'> �BNE�RELOP3 RELOP2�INX �LDAA�#3‚<> �RTS RELOP3�LDAA�#1‚< �RTS RELOP4�CMPA�#'> �BEQ�REL44 �LDAB�#6 �JMP�ERROR REL44�CMPB�#'= �BNE�RELOP5 �INX �LDAA�#5ƒ>= �RTS RELOP5�CMPB�#'< �BEQ�RELOP2 �LDAA�#4ƒ> �RTS �SPC�5 CMPR�LDAA�NCMPR �ASLA �ASLA �STAA�FUNNY+1 �LDX�#CMPR1 �JSR�SUB �JSR�PULLAE �TSTA FUNNY�JMP�0,X‚OFFSET�GETS�CHANGED CMPR1�BEQ�MAYEQ �BRA�NOCMPR �BMI�OKCMPR �BRA�NOCMPR �BMI�OKCMPR �BRA�CMPR1 �BNE�OKCMPR �BRA�MYNTEQ �BEQ�MYNTEQ �BMI�NOCMPR �BPL�OKCMPR NOCMPR�SEC �RTS OKCMPR�CLC �RTS MAYEQ�TSTB �BEQ�OKCMPR �BRA�NOCMPR MYNTEQ�TSTB �BNE�OKCMPR �BRA�NOCMPR �SPC�2 �SPC�2 END�EQU�* �ORG�$A048 �FDB�PROGM �END ÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅæ€ ‡NAM†INTERFACE * *†IEEE�INTERFACE�PROGRAM * *†PROGRAMER‡G.L.EVANS *†LOCATIONˆTHE�POLYTECHNIC�OF�THE�SOUTH�BANK *†DATEŒ27-9-'76 *†SYSTEMŠDEC�10.FORTRAN�CROSS�ASSEMBLER * * PIACRA�EQU†$800B PIACRB�EQU†$8009 PIADRA�EQU†$800A PIADRB�EQU†$8008 ‡ORG†$10 BEGIN‚CLRA‹SET�UP�THE�PIA ‡STAA…PIACRA ‡STAA…PIACRB ‡LDAA…#$80 ‡STAA…PIADRA ‡LDAA…#$F0 ‡STAA…PIADRB ‡LDAA…#$04 ‡STAA…PIACRA ‡STAA…PIACRB�PIA�IS�SET�UP ‡LDAA…#$80 ‡STAA…PIADRA�SET�DAV�HIGH�(INACTIVE) BUSIP1�LDAA…PIADRA ‡BITA…#$03ƒTEST�FOR�NRFD�AND�NDAC�HIGH ‡BEQ†BUSIP1�BRANCH�IF�BOTH�INACTIVE ‡CLRAŒ# ‡STAA…PIADRB�# ‡LDAA…#$80ƒ# ‡STAA…PIADRB�#�BEGIN�CONVERSION�PULSE PERIPH�LDAA…PIADRB ‡ANDA…#$01ƒCHECK�FOR�END�OF�CONVERSION ‡BNE†PERIPH�! BUSIP2�LDAA…PIADRA ‡BITA…#$01ƒCHECK�IF�READY�FOR�DATA ‡BEQ†BUSIP2�BRANCH�BACK�IF�NOT ‡CLRA ‡STAA…PIADRA�SET�DAV�LOW�(ACTIVE) BUSIP3�LDAA…PIADRA ‡BITA…#$02ƒCHECK�IF�DATA�ACCEPTED�YET ‡BEQ†BUSIP3�BRANCH�BACK�IF�NOT ‡LDAA…#$80 ‡STAA…PIADRA�SET�DAV�HIGH ‡BRA†BUSIP1�BRANCH�BACK�FOR�NEXT�CHARACTER * *NOTE:- *†DAV†DATA�AVAILABLE�FROM�IEEE�BUSS *†NRFD…IEEE�BUSS�NOT�READY�FOR�DATA *†NDAC…DATA�NOT�YET�ACCEPTED�BY�IEEE�BUSS * *†THESE�LINES�ARE�ALL�ACTIVE�LOW ‡END ÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅé€* THIS PROGRAM IS AVAILABLE ON PAPER TAPE ONLY. ÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅ$ ê€ NAM GRAY/BIN OPT O ORG $100 SPC 2 ****************************************** * GRAY CODE TO BINARY CONVERSION  * * 16 BIT ACCURACY - REENTRANT CODE * ****************************************** SPC 2 GRYBIN PSHA PSHB  LDAA #$0F PSHA TSX LDAA 2,X G2 LSRA RORB EORA 2,X EORB 1,X DEC 0,X BNE G2 INS INS INS RTS SPC 2 END ÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅLì€L NAM P2708 OPT O,NOG * ************************************************ * * STARTING ADDRESS OF THE PROGRAM IS $400.  * * * PROGRAM / USER CONVERSATION * * PROM LOADER * * FILE NAME = XYZ * PROM ADDRESS = NN00 * * . * * PROM PROGRAMMER * * % (PP LO PROMPT) * * * XYZ IS THE NAME OF THE OBJECT FILE FOLLOWED BY * A CARRIAGE RETURN * NN00 IS THE STARTING ADDRESS OF THE PROM FOLLOWED BY * BY A CARRIAGE RETURN * * THE ADDRESSES IN THE OBJECT FILE ARE CONVERTED TO * (ADDRESS - NN00 + 1000). * DATABYTES WITH CONVERTED ADDRESSES FROM 1000 THRU * 1FFF ARE LOADED. * * IF THE OBJECT FILE IS LOADED CORRECTLY, THE * MOTOROLA PROMPROGRAMMER PP LO IS STARTED. * * CODE FOR 1ST 2708: 1000 - 13FF * CODE FOR 2ND 2708: 1400 - 17FF * CODE FOR 3RD 2708: 1800 - 1BFF * CODE FOR 4TH 2708: 1C00 - 1FFF * * * * THE OBJECT FILE OBJ OF THE FOLLOWING PROGRAM * HAS TO BE MERGED WITH PP LO AS FOLLOWS: * * MERGE,P2708,PP LO,OBJ * * THEN PP LO HAS TO NEW COMMANDS: * * %L START PROM LOADER TO LOAD * NEXT OBJECT FILE * %D START EDOS-II * ********************************************* PAGE ORG $400 * START LDS #$FFF JSR RESET INITIALIZE FLOPPY DISK JSR TEXT FCC /__PROM LOADER__@/ FN LDS #$FFF JSR TEXT FCC /_FILE NAME = @/ LDAA #' SPACE STAA A1 A1 - A5 ARE FILLED WITH STAA A2 SPACE CODE STAA A3 STAA A4 STAA A5  CLR UNIT UNIT IS PRESET TO 0 LDX #A1 X POINTER TO A1 * *INPUT FILE NAME * INPUT JSR INCH INPUT CHARACTER CMPA #$7F CHARACTER IS RUBOUT ? BNE L1 NO RUBO LDAA #'< YES, JSR OUTCH OUTPUT < BRA FN RETURN TO FN L1 CMPA #': CHARACTER IS : ? BEQ RU YES, READ UNIT NUMBER CMPA #$D NO; CHARACTER IS CR ? BEQ IFR YES, INPUT FILE NAME READY CPX #UNIT NO, X POINTER TO UNIT ? BEQ INPUT YES, MORE THEN 5 CHARACTERS STAA 0,X NO, STORE CHARACTER INX INCREMENT POINTER BRA INPUT INPUT NEXT CHARACTER * * RU CLRB READ UNIT NUMBER RU1 JSR INCH INPUT CHARACTER CMPA #$7F CHARA% CTER IS RUBOUT ? BEQ RUBO YES CMPA #$D NO, CHARACTER IS CR ? BEQ IFR YES, INPUT FILE NAME READY TSTB NO; B=0 ?  BNE RU1 NO, WAIT FOR CR CMPA #'3 TEST FOR 0,1,2, AND 3 BGT QM ILLEGAL CHARACTER SUBA #'0 BMI QM ILLEGAL CHARACTER RORA SHIFT BITS 0 AND 1 RORA INTO POSITIONS 6 AND 7 RORA ANDA #$C0 CLEAR BITS 0 THRU 5 STAA UNIT UNIT NUMBER IN BITS 6,7 INCB B=1, UNIT NUMBER STORED BRA RU1 WAIT FOR CR * QM JSR TEXT OUTPUT QUESTION MARKS FCC /???_@/ BRA FN RETURN TO FN * *INPUT FILENAME READY * IFR JSR CRLF CARRIAGE RETURN, LINE FEED LDX #$30 INITIALIZE FOR DIRECTORY STX ISIZE CLR ITRK TRACK 0 CLR ICNTR COUNTER = 0 LDAA #3 SECTOR 4 (-1) AND ADDA UNIT UNIT NUMBER  STAA ISCTR * RSECT LDAA #128 READ SECTOR STAA CNT CNT=128 LDX #BB BEGIN BUFFER STX SX SX BUFFER POINTER RBYTE JSR RI READ BYTE FROM DISK LDX SX STAA 0,X STORE BYTE IN BUFFER INX INCREMENT BUFFER POINTER STX SX DEC CNT 128 BYTES ? BNE RBYTE NO, READ NEXT BYTE LDAB #11 YES, B=11 LDX #BB X BUFFER POINTER * *SEARCH FILE NAME IN DIRECTORY * TEST LDAA 5,X READ ATTRIBUTE CMPA #$80 DELETED FILE ? BNE TEST1 NO NEXT DECB LAST FCB IN SECTOR ?  BEQ RSECT YES, READ NEXT SECTOR STX SX NO, INCREMENT X BY 11 LDAA SX+1 ADDA #11 STAA SX+1 LDAA #0 ADCA SX  STAA SX LDX SX BRA TEST NEXT FCB * TEST1 CMPA #$FF END OF DIRECTORY ? BEQ QM YES, FILE NOT FOUND * *COMPARE FILENAME WITH NAME IN DIRECTORY * LDAA 0,X CMPA A1 FIRST CHARACTER = A1 ? BNE NEXT NO, NEXT FCB LDAA 1,X CMPA A2 SECOND CHARACTER = A2 ? BNE NEXT NO, NEXT FCB LDAA 2,X CMPA A3 THIRD CHARACTER = A3 ? BNE NEXT NO, NEXT FCB LDAA 3,X CMPA A4 FOURTH CHARACTER = A4 ? BNE NEXT NO, NEXT FCB LDAA 4,X CMPA A5 FIFTH CHARACTER = A5 ? BNE NEXT NO, NEXT FCB * *INITIALIZE FOR READING FILE * LDAA 6,X TRACK NUMBER STAA ITRK LDAA UNIT UNIT NUMBER ADDA 7,X + SECTOR NUMBER DECA - 1 STAA ISCTR CLR ICNTR CLEAR COUNTER LDX 8,X SIZE STX ISIZE * *INPUT FIRST ADDRESS OF PROM * PA1 JSR TEXT FCC /PROM ADDRESS = @/ CLRA CLRB PA2 PSHA JSR INCH INPUT CHARACTER CMPA #$D CARRIAGE RETURN ? BEQ LOAD YES CMPA #'0 NO, TEST FOR HEX DIGIT BLT PA4 IL@FGL CHARACTER CMPA #'9 BLE PA3  CMPA #'A BLT PA4 ILLEGAL CHARACTER CMPA #'F BGT PA4 ILLEGAL CHARACTER ADDA #9 PA3 ANDA #$F CLEAR BITS 4 THRU 7 STAA PROMA TEMPORARY STORAGE PULA MULTIPLY OLD ADDRESS ASLA BY 16 ROLB ASLA ROLB ASLA ROLB ASLA  ROLB ADDA PROMA ADD NEW DIGIT BRA PA2 INPUT NEXT DIGIT PA4 LDAA #'? ILLEGAL CHARACTER JSR OUTCH OUTPUT ? AND  JSR CRLF CARRIAGE RETURN, LINE FEED INS ADJUST STACK POINTER BRA PA1 * *LOAD HEX FILE * *ADRESSES OF THE FILE ARE CONVERTED IN *(ADDRESS-PROMA+1000) *MAX. 4K DATA BYTES ARE STORED IN *LOCATIONS 1000-1FFF * LOAD INS ADJUST STACKPOINTER STAB PROMA FIRST ADDRESS OF PROM CLR PROMA+1 LS BYTE = 0 JSR CRLF CARRIAGE RETURN, LINE FEED LDX #$1000 X POINTER TO BUFFER RAM LDAA #$01 FILLER (NOP) FILL STAA 0,X FILL BUFFER WITH FILLER INX CPX #$2000 BUFFER FILLED & ? BNE FILL NO STAA CKSUM CHECKSUM NOT 0 LOAD1 JSR IN INPUT BYTE FROM DISK CMPA #'S ASCII S ? BNE LOAD1 NO, GET NEXT BYTE JSR IN YES, INPUT BYTE FROM DISK CMPA #'9 ASCII 9 ? BNE LOAD2 NO LDAA #'. YES, S9 MARK JSR OUTCH  OUTPUT . BRA LOAD1 READ NEXT BYTE LOAD2 CMPA #'1 ASCII 1 ? BNE LOAD1 NO, READ NEXT BYTE CLR CKSUM YES, S1 MARK, CLEAR CKSUM JSR BYTE READ BYTECOUNT SUBA #2 SUBTRACT 2 STAA BYTECT STORE # OF BYTES -2 JSR BYTE READ MS ADDRESS BYTE STAA ADR JSR BYTE READ LS ADDRESS BYTE STAA ADR+1 LOAD3 JSR BYTE READ BYTE DEC BYTECT LAST BYTE ? BEQ LOAD4 YES LDX ADR NO, COMPUTE ADDRESS STX SX SAVE X INX INCREMENT ADR STX ADR LDAB SX B = MS BYTE SX SUBB PROMA - MS BYTE PROMADDRESS ADDB #$10 +10 (HEX) CMPB #$1F B HIGHER THEN 1F (HEX) ? BHI LOAD3 YES, DON'T STORE DATA  CMPB #$F B HIGHER THEN F (HEX) ? BLS LOAD3 DON'T STORE DATA STAB SX STORE MS BYTE ADDRESS LDX SX STAA 0,X STORE DATA CMPA 0,X DATA STORED CORRECTLY ? BEQ LOAD3 YES, GET NEXT BYTE JSR TEXT NO FCC /_CAN'T LOAD RAM@/ JMP FN RETURN TO FN LOAD4 INC CKSUM CHECKSUM OK ? BEQ LOAD1 YES, NEXT LINE LOAD5 JSR TEXT NO FCC /_CHECKSUM ERROR@/ JMP FN RETURN TO FN * *READ BYTE FROM DISK AND TEST *FOR END OF FILE * IN JSR RI READ BYTE, END OF FILE ? BCS IN1 YES RTS NO, RETURN FROM SUBROUTINE IN1 INS ADJUST STACK POINTER INS TST CKSUM CHECKSUM=0 ? BNE LOAD5 NO, CHECKSUM ERROR JSR TEXT YES FCC /__PROM PROGRAMMER_@/ JMP $20 START PP LO * * BYTE BSR INHEX INPUT HEX DIGIT ASLA (MS BITS) ASLA ASLA ASLA PSHA BSR INHEX INPUT HEX DIGIT PULB (LS BITS) ABA FORM BYTE TAB ADDB CKSUM ADD BYTD TO CHECKSUM STAB CKSUM RTS RETURN FROM SUBROUTINE * * INHEX BSR IN INPUT BYTE FROM DISK CMPA #'0 TEST FOR HEX DIGIT BLT FE ILLEGAL CHARACTER CMPA #'9 BLE INHEX1 CMPA #'A BLT FE ILLEGAL CHARACTER CMPA #'F BGT FE ILLEGAL CHARACTER ADDA #9 INHEX1 ANDA #$F CLEAR BITS 4 THRU 7 RTS RETURN FROM SUBROUTINE FE JSR TEXT ILLEGAL CHARACTER FCC /_FORMAT ERROR_@/ JMP FN RETURN TO FN * * A1 RMB 1 1ST CHARACTER FILE NAME A2 RMB 1 2ND CHARACTER FILE NAME A3 RMB 1 3RD CHARACTER FILE NAME A4 RMB 1 4TH CHARACTER FILE NAME A5 RMB 1 5TH CHARACTER FILE NAME UNIT RMB 1 UNIT NUMBER SX RMB 2 TEMPORARY STORAGE X CNT RMB 1 COUNTER ADR RMB 2 ADDRESS CKSUM RMB 1 CHECKSUM BYTECT RMB 1 BYTECOUNT PROMA RMB 2 PROMADDRESS BB RMB 128 128 BUFFER LOCATIONS * * RESET EQU $E806 OUTCH EQU $F9DC INCH EQU $FAA0 ISIZE EQU $4 ITRK EQU $6 ISCTR EQU $7 ICNTR EQU $8 RI EQU $E809 * * *TEXT ROUTINE, * _ = CARRIAGE RETURN, LINE FEED * @ = END OF TEXT * *MAX. 254 CHARACTERS * *A, B, AND X ARE SAVED * TEXT STX TXTSX SAVE X TSX X POINTER TO RETURNADDRESS STX TXTRP SAVE X FOR RETURN PSHA SAVE A AND B PSHB LDX 0,X X = DATAPOINTER CLRB B = COUNTER TEXT1 LDAA 0,X GET CHARACTER INCB INCREMENT COUNTER INX INCREMENT DATAPOINTER CMPA #'@ END OF TEXT ? BEQ TEXT3 YES CMPA #'_ NO, CRLF ? BNE TEXT2 NO BSR CRLF YES BRA TEXT1 GET NEXT CHARACTER * *'  CRLF LDAA #$A OUTPUT CARRIAGE RETURN, JSR $F9DC LINE FEED LDAA #$D JSR $F9DC CLRA JMP $F9DC * * TEXT2 JSR $F9DC OUTPUT CHARACTER BRA TEXT1 GET NEXT CHARACTER TEXT3 CLRA COMPUTE RETURN ADDRESS LDX TXTRP ADDB 1,X ADCA 0,X STAA 0,X STAB 1,X PULB RESTORE B, A, AND X PULA LDX TXTSX RTS RETURN FROM SUBROUTINE TXTSX RMB 2  TXTRP RMB 2 * * *EXTENSION OF PP LO *TEST FOR L AND D COMMANDS * CHLD JSR $AE SUBROUTINE IN PP LO CMPA #'L A = ASCII L ? BNE CHLD1 NO JMP START YES, START LOADER CHLD1 CMPA #'D A = ASCII D ? BNE CHLD3 NO JSR CRLF YES, 2 CRLF'S JSR CRLF LDS #$FF8A INITIALIZE STACK LDX #0 CHLD2 INX DELAY LOOP BNE CHLD2 JMP $E800 START EDOS CHLD3 RTS RETURN TO PP LO * * *PATCH ON PP LO * JSR $AE IS REPLACED BY JSR CHLD * ORG $6B JSR CHLD * END  ÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅ € �NAM�EIA�TO�ASCII� �OPT�O,S� ENDLOC�EQU�$1FFD� OUTCH�EQU�$0227� INCT�EQU�$023D� PNCHON�EQU�$01EF� LEAD�EQU�$0139� PNCHOF�EQU�$0204� TEMP1�EQU�$1FFF� TBLADX�EQU�$1E88� PIASB�EQU�$8007� �ORG�$1E00� TABLE�FCB�$20� �FCC�:123456789?*??&?0/STUVWXYZ:� �FCB�$08� �FCC�:,??:� �FCB�$09� �FCC�:?-JKLMNOPQR?%????+ABCDEFGHI#.!??:‚ �FCB�$7F� �FCB�$0D� �LDS�#$1F00�SET�STACK�POINTER� �LDAA�#$FF� �STAA�$026F�MODIFY�"INCT"�DO�NOT�CLEAR�PARITY� �STAA�$02A1�MODIFY�"NCHAR"�DO�NOT�IGNORE�NULL� �STAA�$02A2�DO�NOT�IGNORE�$7F� �STAA�$02A3�DO�NOT�IGNORE�$0A� �STAA�$02A4�DO�NOT�IGNORE�$11� �STAA�$02A5�DO�NOT�IGNORE�$12� �STAA�$02A6�DO�NOT�IGNOER�$13� �STAA�$02A7�DO�NOT�IGNORE�$14� �LDAA�#$3C� �STAA�PIASB�SUPPRESS�ECHO,�READER�RELAY�ON �LDX�#$2000�START�OF�BUFFER� �LDAA�#$11� �JSR�OUTCH�READER�ON� MORIN�JSR�INCT�INPUT�CHARACTER� �STAA�TEMP1� �TPA� �PSHA‚SAVE�STATUS�REG� �LDAA�TEMP1�RECALL�CHARACTER �PSHA‚STORE�CHARACTER� �LSRA‚ELIMINATE�EIA�PARITY�BIT �ANDA�#$70� �STAA�TEMP1�STORE�HIGH�HALF�OF�EIA�CHAR� *WITH�PARITY�REMOVED �PULA‚RECALL�ORIGINAL�CHAR �ANDA�#$0F�SEPARATE�LOW�HALF�OF�EIA�CHAR �ORAA�TEMP1�COMBINE�HALVES �STAA�TBLADX� �LDAA�TABLE� *TBLADX�=�LAST�BYTE�OF�THE�PREVIOUS�INSRUCTION �STAA�TEMP1�RESTORE�STATUS�REG �PULA� �TAP� �LDAA�TEMP1� �STAA�X� �INX� �BCC�MORIN�GET�NEXT�CHARACTER� �STX�ENDLOC� �LDAA�#$13� �JSR�OUTCH�READER�OFF� �LDAA�#$7F�RESTORE�"INCT"�TO�ORIG�CONFIG� �STAA�$026F� �STAA�$02A2‚RESTORE�"NCHAR"�TO�ORIGINAL� �LDAA�#$00� �STAA�$02A1� �LDAA�#$0A� �STAA�$02A3� �LDAA�#$11� �STAA�$02A4� �LDAA�#$12� �STAA�$02A5� �LDAA�#$13� �STAA�$02A6� �LDAA�#$14� �STAA�$02A7� �LDX�#$2000�START�OF�BUFFER� �LDAA�#$39�MODIFY�"LEAD"�NOT�SHUT�OFF�PNCH� �STAA�$0141� �JSR�PNCHON� �JSR�LEAD� MOROUT�LDAA�X� �JSR�OUTCH� �INX �CPX�ENDLOC� �BNE�MOROUT� �JSR�LEAD� �JSR�PNCHOF �END ÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅ( €0010�*�TELEPHONE�DIALER�PROGRAM�USING�THE�MEK�6800D1 0020�*�EVALUATION�KIT. 0030�* 0040�* 0050�*�DIALING�RELAY�IS�NORMALLY�CLOSED�AND�IN�SERIES�WITH 0060�*�THE�TELEPHONE.‚DIAL�PULSES�(NEGATIVE�GOING)�OUT�OF 0070�*�PA0�WILL�OPEN�THE�RELAY. 0080�*�IN�ORDER�TO�DIAL,�REMOVE�THE�PHONE�FROM�THE�HOOK�AND 0090�*�PUSH�G. 0100�* 0110�* 0120�* 0130�* 0140�* 0150†ORG�0000 0160†LDS�#$00FF…*SET�STACK�POINTER 0170†JMP�OUTPUT 0180�* 0190�*20�MSEC.�DELAY�SUBROUTINE 0200�* 0210�DELAY…PSHA 0220†PSHB 0230†TPA 0240†PSHA 0250†LDAB�#$0D 0260�LUP2�LDAA�#$FF 0270�LUP1�DECA 0280†BNE�LUP1 0290†DECB 0300†BNE�LUP2 0310†PULA 0320†TAP 0330†PULB 0340†PULA 0350†RTS 0360�* 0370�*�SET�UP�OUTPUT�PORT�AT�$8008�(PA0) 0380�* 0390�OUTPUT�LDAA�#$01 0400†STAA�IOA1 0410†LDAA�#$04 0420†STAA�CRA1 0430�* 0440�*�TOM�BENZIE�AND�PAUL�SCHMITT 0450�* 0460�*�DIALING�PROGRAM�FOLLOWS: 0470�*�NUMBERS�ARE�SELECTED�FROM�TABLE. 0480�*�1�THRU�9�ARE�NORMAL,�0�IS�A�10 0490�*�A�ZERO�ENDS�THE�DIALING 0500�* 0510�* 0520�* 0530�* 0540�*�HOLD�4�SECONDS�FOR�A�DIAL�TONE 0550�* 0560�TONE…INC�IOA1…*CLOSE�RELAY 0570†LDAA�#100 0580�TONE1�JSR�DELAY 0590†DECA 0600†BNE�TONE1 0610†LDAA�#100 0620�TONE2�JSR�DELAY 0630†DECA 0640†BNE�TONE2 0650�* 0660�* 0670�*�DIALING�ROUTINE�FOLLOWS 0680�* 0690�* 0700�DIAL�LDX�#TABLE…*X�POINTS�TO 0710�*“*BEGINNING�OF�TABLE 0720�DIAL1�LDAA�Xˆ*LOAD�FIRST�DIGIT 0730�DIAL2�DEC�IOA1†*�60�MSEC�DELAY�OPEN 0740‡LDAB�#3 0750�DIAL3�JSR�DELAY 0760‡DECB 0770‡BNE�DIAL3 0780‡INC�IOA1†*40�MSEC.�DELAY�CLOSED 0790‡LDAB�#2 0800�DIAL4�JSR�DELAY 0810‡DECB 0820‡BNE�DIAL4 0830‡DECA 0840‡BNE�DIAL2 0850‡LDAB�#30‡*INTER�DIGIT�DELAYƒ600�MSEC 0860�DIAL5�JSR�DELAY 0870‡DEC�B 0880‡BNE�DIAL5 0890‡INXŒTEST�NEXT�DIGIT�FOR�ZERO 0900�* 0910‡TST�X 0920‡BNE�DIAL1†*NEXT�DIGIT�IF�NOT�ZERO�BRANCH 0930�* 0940�* 0950�*END�OF�DIALING�SEQUENCE 0960�* 0970�* 0980�HOLD…BRA�HOLD„*HOLD�OFF�HOOK�STATUS 0990�* 1000�* 1030�*TELEPHONE�NUMBER�IS�STORED�STARTING�AT�LOCATION�"TABLE". 1040�* 1050�*THE�EXAMPLE�TELEPHONE�NUMBER�IS�320-8218. 1060�* 1070�* 1080�*�A�ZERO�IN�THE�LAST�BYTE�ENDS�THE�DIALING. 1090�* 1100�* 1110�TABLE…FCB�3,2,10,8,2,1,8,0 1120�* 1130�IOA1�EQU�$8008 1140�CRA1�EQU�$8009 1150†ORG�$A048 1160†FDB�0000‡*�PROGRAM�START�VECTOR 1180†END ÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅ €�NAM�ISQRT ********************************************************* *�THIS�SUBROUTINE�CALCULATES�THE�INTEGER *�SQUARE�ROOT�OF�ANY�POSITIVE�NUMBER�UP *�TO�255�DECIMAL.‚ENTER�WITH�NUMBER�IN *�ACCUMULATOR�A,�RESULT�WILL�BE�RETURNED *�IN�ACCUMULATOR�A.‚B�AND�CC�REGISTERS *�ARE�AFFECTED.‚PROGRAM�IS�RELOCATABLE. * *�PROGRAMMED�BY�DON�L.�JACKSON�11/27/76 *************************************************************** �SPC�1 �ORG�$2100 ISQRT�LDA�B�#$FF ISQRT2�ADD�B�#2 �SBA �BCC�ISQRT2 �TBA �LSR�A �RTS �SPC�1 �END�ISQRT ) ÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅ €  NAM MUSIC OPT NOP,S ORG 0 REPLAY CLR $8005 CLEAR CRA-2 BIT INC $8004 INCR DATA DIRECTION REG  COM $8005 SET CRA-2 BIT LDS #TEMP POINT TO FIRST NOTE -1 NUNOTE LDX #$08FF TIME PER NOTE PUL B PULL NEXT NOTE FROM STACK TSTB HAS LAST NOTE BEEN PLAYED? BEQ REPLAY IF NOT, CONTINUE STAB TEMP STORE NOTE-CODE TONLUP INCA TOGGLES OUTPUT WHEN STORED LDAB TEMP GET NOTE-CODE COUNT DEX HOLD TONE FOR AWHILE BEQ NUNOTE LONG ENOUGH YET? DECB BNE COUNT STAA $8004 TOGGLES OUTPUT BRA TONLUP TEMP RMB 1 FCB $53,$42,$53,$42,$53,$42,$53,$42,$53 FCB $42,$53,$42,$37,$42,$37,$42,$37,$42,$37,$42 FCB $22,$2B,$22,$2B,$20,$29,$20,$29 FCB $20,$29,$20,$29,$20,$29,$20,$29,$20 FCB $29,$20,$29,$20,$29,$20,$29,$20,$29 FCB $20,$29,$2B,$37,$2B,$37,$24,$2B,$24 FCB $2B,$29,$37,$29,$37,$42,$37,$42,$37 FCB $42,$37,$42,$37,$3A,$46,$3A,$46,$3E FCB $4A,$3E,$4A,$3E,$4A,$3E,$4A,$3E,$4A FCB $3E,$4A,$3E,$4A,$3E,$4A,$3E,$4A,$3E FCB $4A,$3E,$4A,$3E,$4A,$3E,$58,$3E,$58 FCB $3E,$58,$3E,$58,$3E,$58,$3E FCB $58,$37,$4A,$37,$4A,$37,$4A,$37,$4A FCB $31,$3E,$31,$3E,$2B,$37,$2B,$37,$2B FCB $37,$2B,$37,$2B,$37,$2B,$37,$2B,$37 FCB $2B,$37,$2B,$37,$2B,$37,$2B,$37,$2B  FCB $37,$31,$3E,$31,$3E,$37,$42,$37,$42 FCB $3A,$46,$3A,$46,$3E,$4A,$3E,$4A,$3E FCB $4A,$3E,$4A,$24,$3E,$24,$3E,$29,$42 FCB $29,$42,$29,$42,$29,$42,$29,$42,$29 FCB $42,$29,$42,$29,$42,$2B,$31,$37,$3E FCB $42,$4A,$00 END ÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅ€�NAM�FLOAD� �OPT�O,NOG �ORG�$2500 �JMP�SRCH �JMP�LOAD�FOR�LOAD�FUNCTION �JMP�VERF�FOR�VERIFY�FUNCTION SRCH�LDX�#SMSG�FRO�SEARCH�MODE �JSR�PRNTCR �LDA�A�#$FF�FOR�SEARCH�FUNCTION �STA�A�MODEFG�SAVE�MODE �BRA�LOAD1 LOAD�LDX�#LMSG�FOR�LOAD�MODE �JSR�PRNTCR �CLR�MODEFG �BRA�START VERF�LDX�#VMSG�FOR�VERIFY�MODE �JSR�PRNTCR �LDA�A�#1�FOR�VERIFY �STA�A�MODEFG �CLR�ERRFG�FOR�ERRORS START�LDX�#$FB85�LOAD�SINGLE�/�CONTINOUS�MESSAGE �JSR�PRNT�PRINT�MESSAGE �JSR�KEYBRD�GET�KEYBOARD�CHARACTER �STA�A�SFLAG�SAVE�IT �CMP�A�#'S�IS�IT�AN�S �BEQ�LOAD1�YES�CONTINUE �CMP�A�#'C�IS�IT�A�C �BNE�START�NO�PRINT�MESSAGE�AGAIN LOAD1�JSR�CRLF�PRINT�CRLF LOAD4�JSR�RECORD�GET�RECORD�FROM�TAPE �LDA�A�TYPE�WHICH�TYPE�RECORD�IS�IT? �CMP�A�#'0�IS�IT�A�HEADER? �BNE�LOAD2�NO� �LDA�A�BYTECT�YES�A�HEADER�GET�BYTECT �LDX�#BYTECT�POINTER�TO�INPUT�BUFFER LOAD3�INX �DEC�A�AT�LAST�CHARACTER? �BNE�LOAD3�NO �LDA�A�#$04�LOAD�STOP�* CODE�FOR�PRINTER �STA�A�0,X�SAVE�IT �LDX�#INBUF�LOAD�FILE�NAME �JSR�PRNTCR�PRINT�NAME �JSR�CKSMOK�CKECKSUM�OK? �TST�MODEFG�WHAT�MODE �BPL�LOAD4�IF�LOAD�OR�VERIFY SRCH1�LDX�#SRCHM�IN�SEARCH�MODE �JSR�PRNTCR�PRINT�MESSAGE �JSR�KEYBRD�GET�CHARACTER �CMP�A�#'C�WAS�IT�A�C�FOR�CONTINUE �BEQ�LOAD4�TRY�AGAIN �CMP�A�#'L�WAS�IT�A�L�FOR�LOAD �BEQ�LOAD�YES�WAS�LOAD �CMP�A�#'V�WAS�IT�A�V�FOR�VERIFY? �BEQ�VERF �BRA�SRCH1�TRY�ANOTHER�MESSAGE LOAD2�TST�MODEFG�WHAT�MODE? �BMI�LOAD4�IF�SEARCH�MODE �JSR�CKSMOK�CHECK�SUM�OK? �LDA�A�TYPE�GET�TYPE�RECORD �CMP�A�#'1�IS�IT�DATA? �BEQ�LOAD5�YES �CMP�A�#'9�IS�IT�END�OF�FILE�RECORD? �BNE�LOAD4�NO�GET�ANOTHER�RECORD �LDA�A�SFLAG�LOAD�SINGLE/CONTINOUS�FLAG �CMP�A�#'C�IS�IT�CONTINOUS �BEQ�LOAD4�YES�TRY�AGAIN �JMP�EXEC�NO�EXIT�TO�EXBUG LOAD5�LDA�A�BYTECT�GST�BYTECOUNT �SUB�A�#$03�ACCOUNT�FOR�ADDRESS�AND�BYTE�COUNT �STA�A�BYTECT �LDX�#INBUF�GET�INPUT�POINTER �STX�INPTR�SAVE�IT �LDX�INBUF-2�GET�ADDRESS LOAD6�STX�OUTPTR�SAVE�OUTPPUT�ADDRESS �LDA�A�OUTPTR�GET�ADDRESS �AND�A�#$0F�GET�RID�OF�HIGH�ADDRESS �ORA�A�#$30�INTO�$3000�RANGE �STA�A�OUTPTR�SAVE�NEW�ADDRESS �LDX�INPTR�LOAD�INPTR �LDA�A�0,X�GET�WORD �INX�SET�UP�FOR�NEXT�ONE �STX�INPTR�SAVE�NEW�ADDRESS �LDX�OUTPTR�LOAD�ADDRESS�TO�WRITE �TST�MODEFG�IS�IT�VERIFY�OR�LOAD �BEQ�LOAD8�FOR�LOAD �CMP�A�0,X�WAS�IT�SAME�AS�MEMORY? �BEQ�CONT�YES�CONTINUE �PSH�A�SAVE�BYTE �STX�OUTPTR�SAVE�OUTPTR �TST�ERRFG�ANY�ERRORS? �BNE�VERF1�YES�DON'T�PRINT�HEADER �SEC �ROL�ERRFG�SET�ERROR�FLAG �LDX�#ERRMSG�GET�ERROR�MESSAGE �JSR�PRNTCR�PRINT�MESSAGE VERF1�LDX�#OUTPTR�GETT�MEMORY�ADDRESS �JSR�CRLF�PRINT�CRLF �JSR�PWDSP�PRINT�ADDRESS �LDX�OUTPTR�LOAD�MEMORY�ADDRRESS �JSR�PBTSP�PRINT�BYTE �TSX�GET�WORNG�TAPE�WORD �JSR�PBTSP�PRINT�IT �PUL�A�RESTORE�STACK �LDX�OUTPTR�REESTORE�OUTPTR �BRA�CONT�CONTINUE LOAD8�STA�A�0,X�WRITE�IT �CMP�A�0,X�IS�IT�SAME? �BNE�ERROR�NO�ERROR CONT�INX�SET�UP�FOR�NEXT�OUTPUT �DEC�BYTECT�AM�I�DONE? �BNE�LOAD6�NO�NOT�DONE �JMP�LOAD4�GET�ANOTHER�RRECORD ERROR�JMP�LDERRO�PRINT�LOAD�ERROR�MESSAGE CKSMOK�TST�CKSM�WAS�IT�OK? �BEQ�CKSM1�YEES�OK �LDX�#CKSMM �JSR�PRNTCR�PRINT�MESSAGE �LDX�#INBUF-2�LOAD�ADDRESS�THAT�STARTED �JSR�PWDSP�PRINT�WORNG�ADDRESS CKSM1�RTS CKSMM�FCC�/CKSM�ERROR�/ �FCB�07,04 SMSG�FCC�/SEARCH�MODE/ �FCB�04 VMSG�FCC�/VERIFY�MODE‚/ �FCB�04 LMSG�FCC�/LOAD�MODE‚/ �FCB�04 MODEFG�EQU�$FF5A ERRFG�EQU�$FF61 SRCHM�EQU�$FB4A ERRMSG�EQU�$FB6B PBTSP�EQU�$FA24 PWDSP�EQU�$FA22 LDERRO�EQU�$F89B PRNT�EQU�$FA35 EXEC�EQU�$F5DC PRNTCR�EQU�$FA33 KEYBRD�EQU�$FA4E SFLAG�EQU�$FF58 CRLF�EQU�$FA41 RECORD�EQU�$F8A4 TYPE�EQU�$FF8C BYTECT�EQU�$FF8D CKSM�EQU�$FF8B INBUF�EQU�$FF90 OUTPTR�EQU�$FF56 INPTR�EQU�$FF08 �END ÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅ5€310 NAM FUNCTN 20 ARG EQU $80 ARG ADRESS 25 FLOPT EQU $2800 HEX FLOAT PT ADRESS 30 ADD EQU+  FLOPT 40 SUB EQU FLOPT+2 50 MUL EQU FLOPT+4 60 DIV EQU FLOPT+6 70 EXP EQU ARG 80 OPT O 90 ORG $2500 100 *EXP(ARG)********** 110 *ARG=4 BYTES 120 *HEXADECIMAL FLOATING POINT FORMAT 130 *USING HEX FLOAT POINT SUBROUTS 140 *FORM:ARG+0=SIGN(MANT)/EXP(2'S COMPL) 150 * ARG+1=A.16EXP-1 + B.16EXP-2+ 160 * ARG+2=C.16EXP-3 + D.16EXP-4+ 170 * ARG+3=E.16EXP-5 + F.16EXP-6 180 *RESULT IN ARG+12 190 *ARG IS CHANGED 220 EXPNT CLRB B=X**2 COUNTER 230 LDAA EXP 240 PSHA SAVE SIGN 250 ANDA #$7F 260 PSHA SAVE EXP-SIGN 270 ANDA #$40 280 PULA 290 BEQ POSEX 300 ORAA #$80 REAL 2'S COMPL FORM 310 TSTM CMPA #$FE 320 BLE CALCU 330 ADDB #4 EXP>$FE (-2) 340 DECA 350 BRA TSTM 360 POSEX ADDB #4 370 DECA 380 BPL POSEX 390 BRA TSTM 400 CALCU STAA EXP EXP<= -2 410 PULA 420 TSTA NEG ARG? 430 BMI GOCAL 440 LDAA EXP 450 ANDA #$7F 460 STAA EXP 470 GOCAL PSHB SAVE X**2 CNTR! 500 BSR AD1X (1+X) 540 BSR QUADR (1+X)**2 550 JSR ADD 560 FDB ARG+12 (1+X)**2+1 570 FDB EINS 580 FDB ARG+12 590 LDX #ARG 610 LSR 13,X ((1+X)**2+1)/2 620 ROR 14,X 630 ROR 15,X 680 DEFLA PULB PUL X**2 COUNTR 690 DECB INFLATION 700 BPL DFLW 710 RTS 720 DFLW PSHB 730 BSR QUADR 740 BRA DEFLA 750 QUADR LDX ARG+12 (ARG+12)**2 770 STX ARG+8 780 LDX ARG+14 800 STX ARG+10 810 JSR MUL 820 FDB ARG+12 830 FDB ARG+8 840 FDB ARG+12 850 RTS 860 AD1X JSR ADD 1+X 870 FDB ARG 880 FDB EINS 890 FDB ARG+12 900 RTS 910 *LOGARITHMUS NATURALIS***** 920 *LN (ARG) 930 *HEX FLOAT POINT FORM 940 *RESULT IN ARG+12 950 *MISTAKE: OVERFLOW-BIT=1! ARG UNCHANGED 960 *LOGNAT IS USING SUBROUTINES OF EXPNT!!! 1000 LOGNAT LDAA EXP FUNCTION LN(ARG) 1010 BPL GDA 1020 MIST SEV MISTAKE 1040 RTS 1041 GDA LDX #ARG+1 1042 LDAB #3 1043 TSTON TST 0,X ARG=0?-->MISTAKE 1044 BNE GOOD 1045 INX 1046 DECB 1047 BNE TSTON 1048 BRA MIST 1050 GOOD LDX #ARG 1060 LDAB #4 1070 LDAA 1,X MSBYTE (ARG) 1080 ANDA #$F0 1090 BNE ANOT0 16**EXP-1 NOT ZERO? 1100 VIERM ASL 3,X HEX FORMAT TO BINARY 1110 ROL 2,X 1120 ROL 1,X 1130 DECB 1140 BNE VIERM 1150 LDAA 0,X 1160 BEQ MEX 1170 D, EC 0,X 1180 BRA GOOD 1190 MEX LDAA #$3F 1200 STAA 0,X 1210 BRA GOOD 1220 TSTEX PSHA EXP NEG? 1230 LDAA 0,X 1240 ANDA #$40 1250 PULA 1260 RTS 1270 ANOT0 LDAA 0,X 1280 BSR TSTEX 1290 BEQ PLEX 1300 ORAA #$80 FORM 2'S COMPL 1310 NEGA 1320 PLEX ASLA EXP MULT 4,TO BECOME N 1330 ASLA 1340 LDAB 1,X  MSBYTE (ARG) 1350 WTRS BSR TSTEX 1360 BEQ DECRE 1370 INCA NEG EXP->INC EXP 1380 BRA SHFTB 1390 DECRE DECA POS EXP->DEC EXP 1400 SHFTB ASLB 1410 BCC WTRS 1420 BSR TSTEX 1430 BEQ NRDY 2'S EXP=N 1440 NEGA 1450 NRDY PSHA SAVE N! 1460 LDAA #$80 SET 2**N,MSBYTE (ARG) 1470 STAA 5,X 1480 LDAA 0,X SET EXP (ARG)=EXP(2**N) 1490 STAA 4,X 1500 CLR 6,X 1510 CLR 7,X 1520 LDAA 1,X DEFINE MSBIT(ARG) 1530 S2EX BMI CLCLT 1540 LSR 5,X 1550 ASLA 1560 BRA S2EX 1570 CLCLT JSR DIV EQUATION (8) 1580 FDB ARG+4 2**N 1590 FDB ARG ARG 1600 FDB ARG M=X/2**N 1610  JSR SUB 1620 FDB ARG M 1630 FDB EINS 1640 FDB ARG+4 M-1 1650 JSR AD1X M+1 1660 JSR DIV 1670 FDB ARG+12 M+1 1680 FDB ARG+4 M-1 1690 FDB ARG+12 Z=(M-1)(M+1) 1700 LDX ARG+12 SAVE Z 1710 STX ARG+4 1720 LDX ARG+14 1730 STX ARG+6 1740 JSR QUADR Z**2 1750 JSR DIV 1760 FDB DREI 1770 FDB ARG+12 1780 FDB ARG Z**2/3 1790 JSR AD1X 1800 JSR MUL 1810 FDB ARG+4 1+Z**2/3 1820 FDB ARG+12 Z 1830 FDB ARG+8 Z(1+Z**2/3) 1840 JSR MUL 1850 FDB ZWEI 1860 FDB ARG+8 - " - 1870 FDB ARG+4 LN(M) 1880 PULA N(2'S EX) IN 2'S CMPL! 1890 LDX #ARG 1900 TSTA 1910 BMI NMIN 1920 LDAB #2 1930 BRA COMM 1940 NMIN NEGA 1950 LDAB #$82 1960 COMM STAB 0,X EXP N 1970 STAA 1,X ARG N 1980 CLR 2,X 1990 CLR 3,X 2000 JSR MUL 2010 FDB ARG N 2020 FDB LN2 0,6931471 2030 FDB ARG+12 2040 JSR ADD 2050 FDB ARG+4 LN(M) 2060 FDB ARG+12 N.LN2 2070 FDB ARG+12 2080 RTS 2200 EINS FDB $110,0 2210 ZWEI FDB $120,0 2220 DREI FDB $130,0 2230 LN2 FDB $B1,$7200 2300 END 2320 MON  ÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅ- ÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅåååååååååååååååååååååååå. åååååååååååååååååååååååååå/ åååååååååååååååååååååååååå0 åååååååååååååååååååååååååå1 åååååååååååååååååååååååååå2 åååååååååååååååååååååååååå3 åååååååååååååååååååååååååå4 åååååååååååååååååååååååååå5 åååååååååååååååååååååååååå6 åååååååååååååååååååååååååå7 åååååååååååååååååååååååååå8 åååååååååååååååååååååååååå9 åååååååååååååååååååååååååå: åååååååååååååååååååååååååå; åååååååååååååååååååååååååå< åååååååååååååååååååååååååå= åååååååååååååååååååååååååå> åååååååååååååååååååååååååå? åååååååååååååååååååååååååå@ ååååååååååååååååååååååååååA ååååååååååååååååååååååååååB ååååååååååååååååååååååååååC ååååååååååååååååååååååååååD ååååååååååååååååååååååååååE ååååååååååååååååååååååååååF ååååååååååååååååååååååååååG ååååååååååååååååååååååååååH ååååååååååååååååååååååååååI ååååååååååååååååååååååååååJ ååååååååååååååååååååååååååK ååååååååååååååååååååååååååL åååååååååååååååååååååååååå