IMD 1.16: 16/08/2007 16:30:25 user group 26-50  M68UGL2 0201061377USER-GROUP-LIBRARY \lx€ˆ˜ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿàÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿUG38S SA|ÅUG46S SA$ÅMDOSOV0 SY\òDIR CMðòMDOSOV4 SYˆòMDOS SYòUG31S SAhÅMDOSOV6 SY˜òUG27S SAÅUG35S SAPÅUG43S SAôÅCOPY SA¸EUG39S SA„ÅUG47S SADÅMDOSOV1 SYlòMDOSOV3 SY€òMDOSER SY åUG32S SAtÅUG40S SA”ÅBACKUP CM°òUG28S SA ÅUG29S SA¼ÅUG33S SA8ÅUG36S SAXÅUG37S SA\ÅUG41S SA´ÅUG44S SAøÅMDOSOV5 SYòUG45S SA ÅUG48S SAxÅCOPY CMÔrUG49S SAôÅMDOSOV2 SYxòUG30S SA4ÅUG26S SAÅUG34S SADÅUG42S SAÜÅUG50S 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&ú9A%6‹¥290%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'24'.8'*9'& 320îÖç$…€'90¦æ€Âî§çÆ? ?0j'ÕæÎ‚Á&Ö–?.Y$½èu V×—½èx~9Ö–?*ÎÑ?/%éÆ†Ñ ã÷6¶Š€·29þÿÿúŽÿŠ~èþÿúŒ*' Œ'Žÿн ¾ Îfÿÿ¶Š€·Î ÿ½è"½èu½èS|½èu~ûDK9LPFCRSCP`CNmHRzr –Á€¦1€ *Q€{e€ W T Q NS¦*"¦ª' ¦"æ!¡â$½%3l&lî æ &¦ª&¦ §¦§îçl&l¦"æ!¡â$E0î11n0î~†‚Œ†AÿoèÄ' æÅ 'Å' ÆŒÆ ç9Ä?„À§Äþæ ë¦"æ!  â' Æ ŒÆŒÆ ç 9&ð†€¥' ¦æ â+æ¦æÿÂÿ+Ùæ â&æ +ÍÄ|Ë$~)æ ¶6¶6î?240?31111½ö¶ç§†þ6L6î¦*5i¦+`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†7F $9ц § 1Îÿ ' ¶üôG$÷öüõÄ 9 9†W· )}ÿ*†7 ¶üý„_·üô† 0î11n†~ù϶üý„?·üô†½ð}ÿ&¯­ ÛW~ K~ e~ ‚~ ‚~˜Á & }ÿ*Î]À &ý9 µ|ÿb}ÿ*²†0°†¬† ¨†¤ÿb}ÿ*“˜†9½ðÆOZ&û ‚ËÆ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~Æ626 §2§9DDDD„‹09#‹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¦*'..'*½WJ'tC'fL'_ÿ€½^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 ÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅ (€ 0BCOMMANDSYNTAXERROR 05NAMEREQUIRED 06\0DOESNOTEXIST 08\0DUPLICATEFILENAME 1BFILENAMENOTFOUND 1ADUPLICATEFILENAME 0DOPTIONCONFLICT 30CHAINABORTED--BREAKKEY 31CHAINABORTED--SYSTEMERRORSTATUSWORD 1CFILEISDELETEPROTECTED 24DEVICENOTREADYAT\8 0EINVALIDTYPEOFOBJECTFILE 0FINVALIDLOADADDRESS 13INVALIDFILETYPE 1ECONFLICTINGFILETYPES 1F\0HASINVALIDFILETYPE 27INVALIDDATATRANSFERTYPEAT\8 22DEVICEALREADYRESERVEDAT\8 23DEVICENOTRESERVEDAT\8 25FILENOTOPENORALREADYOPENAT\8 26ENDOFFILEAT\8 29BUFFEROVERFLOWAT\8 2ACHECKSUMERRORAT\8 15LOGICALSECTORNUMBEROUTOFRANGE 07ILLEGALFILENAME 2BFILEISWRITEPROTECTEDAT\8 20\0ISWRITEPROTECTED 09NOSUCHDEVICE 04ILLEGALDRIVENUMBER 12INVALIDEXECUTIONADDRESS 0AINVALIDDEVICE 11INVALIDRIB 1DTOOMANYSOURCEFILES 16ILLEGALSTART/ENDSPECIFICATIONS 17ILLEGALPAGEFORMAT 14FILEEXHAUSTEDBEFORELINEFOUND 28ENDOFMEDIAAT\8 18ILLEGALLINENUMBERORRANGE 19LINENUMBERENTEREDBEFORESOURCEFILE 02DIRECTORYSPACEFULL 03DISKSPACEFULL 10NOTENOUGHSEGMENTDESCRIPTORSPACE 2CINVALIDDIRECTORYENTRYNO.AT\8 2DCANNOTDE-ALLOCATEALLSPACE-DIRECTORYENTRYEXISTSAT\8 2ERECORDLENGTHTOOLONGAT\8 0CINTERNALSYSTEMERRORAT\8 21INVALIDSCALL 2FCHAINOVERLAYCANNOTBEFOUNDORLOADED 32CHAINABORTED--ILLEGALOPERATOR 33CHAINABORTED--UNDEFINEDLABEL 34CHAINABORTED--PREMATUREENDOFFILE ÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅ ,€ 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ÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅ  |Aa€Š NAM FLOAT OPT O,LLEN=80,CREF GET OBJECT TAPE ORG $B00 ** * FLOATING POINT PACKAGE * * 4 SUBROUTINES CURRENTLY EXIST. THEY ARE: * FLOATING ADD (FPADD) * FLOATING SUBTRACT (FPSUB) * FLOATING MULTIPLY (FPMUL) * FLOATING DIVIDE (FPDIV) * * GENERAL CALLING SEQUENCE * JSR FPXXX * FDB ARG1 ADDR OF ARG1 * FDB ARG2  ADDR OF ARG2 * FDB RESULT ADDR OF RESULT * ---- RETURN * * THE ARGS ARE IN THE FORMAT: *  BYTE 0 BIT 7 =SIGN OF FRACTION * BIT 6-0 =EXPONENT(2'S COMP) * BYTE 1-3 FRACTION (MAGNITUDE FORM) * * * ALL REGISTERS INCLUDING THE X-REG ARE DESTROYED * RESULT MAY BE THE SAME ADDR. AS ARG1 OR ARG2 *  THE V BIT WILL BE SET IF OVERFLOW * OCCURED. (DIV BY 0 IS OVFL) * * CODE TYPE: REENTRANT,NO STORAGE (ROM) *  POSITION INDEPENDENT * * * IF THE PROGRAM IS TO BE RAN AT AN ADDRESS * OTHER THAN $B00 IT CAN BE REASSEMBLED * OR, SINCE IT IS POSITION INDEPENDENT, * JUST MOVED. IF MOVED THE ENTRIES ARE AT: * ADD NEWORG * SUB NEWORG+2 * MUL NEWORG+4 * DIV NEWORG+6 * * IF SOMEONE WERE BRAVE ENOUGH TO CONVERT THIS * THIS TO A ROM IT COULD BE GIVEN ANY ADDRESS * AND ENTERED VIA THE ENTRIES LISTED ABOVE * * * STACK SIZE: 24 BYTES * * PROGRAM SIZE: 35F BYTES * * REPRESENTATIVE TIME: ADD 1900 USEC * SUBTRACT 2000 USEC *  MULTIPLY 3200 USEC * DIVIDE 6600 USEC * * DURING EXECUTION OF THE OPTIONS THE X-REG POINTS TO * TO A BLOCK OF DATA PUT ON THE STACK BY THE FRONT * END HANDLER. THEFORMAT OF THIS DATA IS: * BYTE 0 SCRATCH * BYTE 1 OVERFLOW INDICATOR * BYTES 2-6 RESULT * BYTES 7-11 ARG2 * BYTES 12-16 ARG1 * BYTES 17-18 PC OF CALLER * * THE EXTRA BYTE ADDED TO EACH ARG * AND RESULT IS USED TO MAINTAIN * ACCURACY AND IS REFERED TO AS * THE OVERFLOW BYTE. * * WRITTEN BY JOEL BONEY FOR MOTOROLA SPD. SEPT 75 * REVISED 2-28-77 - REV 1  * * REVISION :1 * ************************************************************ * * START VECTORS * FPADD BRA ADDGO FPSUB BRA SUBGO FPMUL BRA MULGO FPDIV BRA DIVGO * * ********** *MULTIPLY ARG1*ARG2=RESULT (CODE 0) ********** MULGO CLR B SET CODE = 0 BRA FPARG GO JOIN MUTUAL PROCESSING ********** * DIVIDE ARG2/ARG1=RESULT ********** DIVGO LDA B #1 SET CIODE=1 BRA FPARG GO JOIN MUTUAL PROCESSING ********** * ADD ARG1+ARG2=RESULT ********** ADDGO LDA B #2 SET CIDE=2 BRA FPARG GO JOIN MUTUAL PROCESSING *********** * SUB ARG1-ARG2=RESULT ********** SUBGO LDA B #3 SET CODE =3 * * HERE TO GET ARGS FROM USER CALLING SEQUENCE * AND TO RESERVE SCRATCH ON THE STACK * * FPARG TSX GET LOC OF STACK IN X LDX 0,X GET ADDR OF CALLING SEQUENCE LDX 0,X GET ADDR OF ARG1 CLR A CLEAR OVERFLOW BYTE PSH A LDA A 3,X PUSH ARG1 PSH A LDA A 2,X PSH A LDA A 1,X PSH A LDA A 0,X PSH A TSX USE STACK PTR TO GET BACK ADD  R OF ARGS LDX 5,X TO PC LDX 2,X GET ADDR OF ARG2 CLR A EXTRA BYTE PSH A LDA A 3,X PUSH ARG2 PSH A LDA A 2,X PSH A LDA A 1,X PSH A LDA A 0,X PSH A CLR A CLEAR SOME SPACE FOR RESULT PSH A AND SCRATCH PSH A PSH A PSH A PSH A PSH A PSH A TSX GET FINAL X (AT BASE OF DATA) * FIND OUT WHAT THE CALL WAS (CODE IN B) TST B MULT? BEQ MULSUB BRANCH IF SO CMP B #1 DIV? BEQ DVSUB1 BRANCH IF SO * MUST BE ADD OR SUB WHICH START OUT THE SAME BRA ADSUB1 GO TO ADD SUB * * HERE WHEN PROCESSING IS COMPLETED. PULL RESULT * FROM STACK AND PUT IT WHERE THE USER * POINTED * * FPOUT TST 6,X SHOULD WE ROUND? BPL X015 NO INC 5,X INCR AND GENERATE BNE X015 CARRIES INC 4,X BNE X015 INC 3,X BNE X015 CARRY OUT OF UPPER? LDA A #4 SEC SET CARRY TO SHIFT IN ONES X014 ROR 3,X YES,SHIFT 4 RIGHT ROR 4,X ROR 5,X ROR 6,X CLC DEC A BNE X014 ASL 2,X INCR EXPONENT ROR 0,X INC 2,X INC 2,X  BVS FPOVF1 BRANCH ON EXP OVF ROL 0,X ROR 2,X X015 INS PUL B GET OVFL FLAG IN B LDX 17,X GET ADDR OF CALLING SEQ  LDX 4,X GET ADDR OF RESULT PUL A STA A 0,X PULL RESULT PUL A STA A 1,X PUL A STA A 2,X PUL A STA A 3,X LDA A #11 POP EVERYTHING ELSE X020 INS DEC A BNE X020 TSX GET STACK UP LDX 0,X GET RETURN PC INS CLEAN STACK INS TST B BEQ X030 DID WE HAVE OVFL SEV YES,SET OVF BIT X030 JMP 6,X RETURN * PIC BRANCHES FPOVF1 BRA FPOVF PIC BRANCH DVSUB1 BRA DVSUB2 ADSUB1 BRA ADSUB2 PAGE * *----------------------------------------------------------- * * MULTIPLY ARG1*ARG2=RESULT * *---------------------------------------------------------- * ARG1 EQU 12 ARG2 EQU 7 RESULT EQU 2 * FPOUT2 BRA FPOUT PIC BRANCH MULSUB LDA A #ARG1 NORMALIZE ARG1 BSR NORMX1 LDA A #ARG2 NORMALIZE ARG2 BSR NORMX1 * FPM20 LDA A #25 LOOP CTR (NBR BITS+1) STA A 0,X CLEAR RESULT FRACTION CLR B (B HOLDS THE LSB FOR SPEED AND MEMORY) FPM30 ROR 13,X SHIFT ARG1 RIGHT ONE BIT ROR 14,X ROR 15,X DEC 0,X DONE 24 BITS? BEQ FPM40 YES BCC FPM35 NO, WAS SHIFTED BIT IN ARG1 SET? ADD B 10,X YES, ADD IN ARG2 LSB LDA A 4,X ADD IN ARG2 MIIDDLE BIT ADC A 9,X  STA A 4,X LDA A 3,X ADD IN ARG2 MSB ADC A 8,X STA A 3,X FPM35 ROR 3,X SHIFT RESULT RIGHT ROR 4,X ROR B ROR 6,X SAVE SHIFT OUT IN OVERGLOW BRA FPM30 * * HERE WHEN MULT COMPLETE. ADD EXPONENTS * FPM40 STA B 5,X PUT BACK LSB  LDA A 12,X GET SIGN OF RESULT TAB SAVE IN B TOO EOR B 7,X AND B #$80 CLR 0,X CLEAR LOCAL OVF FLAG ASL A GET EXPONENT IN ARITHMETIC FORM ASL 7,X ADD A 7,X ADD EXPONENTS FPM45 BVS FPMOVF BRANCH IF EXPONENT OVERFLOW CLC FIX EXPONENT ROR A FPM37 ABA ADD IN SIGN STA A 2,X LDA A #RESULT NORMALIZE ANS BSR NORMX1 TST 0,X LOCAL OVF SET? BEQ FPOUT2 NO INC 2,X YES INCR EXP * PIC BRANCHES ADSUB2 BRA ADDSUB * UNDER OR OVERFLOW FPMOVF BPL FPUND UNDERFLOW? PSH A NO LDA A 3,X GET ANS BIT A #$F0 IS IT NORMALIZED? PUL A BNE FPOVF YES,NORMALIZING WONT HELP THE OVERFLOW CMP A #$80 WOULD A NORMALIZE HELP? BNE FPOVF NO LDA A #$3F SET EXP MAX STA A 0,X SET LOCAL OVFL BRA FPM37 NORMX1 BRA NO  RMX2 PIC BRANCH DVSUB2 BRA DVSUB3 FPOUT1 BRA FPOUT2 * * HERE ON RESULT OVERFLOW * FPOVF AND B #$80 MASK OUT SIGN ORA B #$3F SET EXPONENT MAX LDA A #$FF INC 1,X SET OVERFLOW BRA FPMU10 * HERE ON UNDERFLOW FPUND CLR B CLR A SET EXPONENT AND FRACTION = 0 FPMU10 STA A 3,X SET RESULT FRACTION STA A 4,X STA A 5,X CLR 6,X STA B 2,X SET RESULT EXP BRA FPOUT1 HANG IT UP FPM456 BRA FPM45 PAGE * *---------------------------------------------------------- * ADD ARG1+ ARG2=RESULT * SUB ARG1-ARG2=RESULT *--------------------------------------------------------- ADDSUB PSH B PUSH ADD-SUB CODE * * NORMALIZE ARGS LDA A #ARG1 BSR NORMX2 LDA A #ARG2 BSR NORMX2 LDA A #8 STA A 0,X DONT SHIFT TOO MANY TIMES LDA A 12,X GET ARG1 EXP ASL A LEFT JUSTIFY IT LDA B 7,X GET ARG2 EXP ASL B FPA05 DEC 0,X TOO MANY SHIFTS BLT FPA25 BRANCH IF SO CBA COMPARE EXP1 TO EXP2 BEQ FPA30 EQUAL,PROCEED WITH THE ADD * SHIFT ARG WITH THE SMALLER EXP RIGHT 4 BITS BGT FPA20 ARG1 EXP IS BIGGER * ARG1 IS SMALLER BSR FPAS1 SHIFT ARG1 4 BITS BSR FPAS1 BSR FPAS1  BSR FPAS1 ADD A #2 BUMP EXP1 BRA FPA05 TRY AGAIN *ARG2 IS SMALLER FPA20 BSR FPAS2 SHIFT ARG2 4 BITS BSR FPAS2  BSR FPAS2 BSR FPAS2 ADD B #2 BUMP EXPONENT AND TRY AGAIN BRA FPA05 * HERE TO SHIFT ARG1 1 BIT RIGHT FPAS1 CLC SHIFT IN 0 SINCE ITS POS ROR 13,X ROR 14,X ROR 15,X ROR 16,X RTS * HERE TO SHIFT ARG2 1 BIT RIGHT FPAS2 CLC SHIFT IN 0 SINCE ITS POS ROR 8,X ROR 9,X ROR 10,X ROR 11,X RTS FPA25 CBA WHEN DIFF IS LARGE BGT FPA30 PICK UP THE BIG EXPONENT TBA BRA FPA30 * PIC BRANCHES FPOUT3 BRA FPOUT1 BRANCH FOR PIC DVSUB3 BRA DVSUB4 NORMX2 BRA NORMX3 FPUND5 BRA FPUND FPM455 BRA FPM456 FPOVF3 BRA FPOVF * * HERE ON EQUAL EXPONENTS * FPA30 STA A 2,X SAVE NEW EXPONENT IN RESULT BSR FPAS1 MAKE ROOM FOR SIGNS IN FRACTIONS BSR FPAS2 LDA A 12,X IS ARG1 NEGATIVE? BPL FPA40 NO LDA A #ARG1 YES , GO COMPLEMENT BSR COMX1 FPA40 LDA A 7,X IS ARG2 NEGATIVE? BPL FPA50 NO LDA A #ARG2 YES GO COMPLEMENT BSR COMX1 FPA50 PUL A GET ADD-SUB CODE CMP A #2 WHICH ONE BNE FPS10 SUB * HERE TO ADD TWO QUADRUPLE ARGS LDA A 16,X ARG1+ ADD A 11,X ARG2= STA A 6,X RESULT * LDA A 15,X LSB ADC A 10,X STA A 5,X * LDA A 14,X MIDDLE ADC A 9,X STA A 4,X * LDA A 13,X MSB ADC A 8,X * DID ANSWER OVERFLOW? FPA55 BVC FPA60 NO STA A 3,X SAVE MSB LDA A #4 CTR ROR 3,X BRING IN LOST BIT 1ST TIME BRA FPA58 FPA57 ASR 3,X SIGN EXTEND FPA58 ROR 4,X ROR 5,X ROR 6,X DEC A DONE 4 BITS BNE FPA57 NO INC 2,X INCR EXPONENET INC 2,X BVC FPA61 BRANCH ON NO OVERFLOW ROL 3,X SET OVERFLOW AND EXIT FPA59 ROR B FPOVF2 BRA FPOVF3 OVERFLOW * PIC BRANCHES FPA80 BRA FPOUT3 NORMX3 BRA NORMX4 DVSUB4 BRA DVSUB5 FPUND4 BRA FPUND5 FPM454 BRA FPM455 * FPA60 STA A 3,X SAVE MSB FPA61 TST 3,X IS RESULT NEGATIVE? CLC CLEAR C BPL FPA70 POSITIVE RESULT LDA A #RESULT BSR COMX1 NEGATIVE, COMPLEMENT IT SEC SET TO SHIFT IN MINUS BVS FPA59 TOO BIG TO COMPL FPA70 ROR 2,X SHIFT IN SIGN ROL 6,X MOVE SIGN BACK INTO EXP ROL 5,X ROL 4,X ROL 3,X LDA A 3,X IS  RESULT NORMALIZED? BIT A #$F0 BNE FPA80 YES LDA A #RESULT NO,GO NORMALIZE BSR NORMX BRA FPA80 DONE,EXIT * NORMX4 BRA NORMX DVSUB5 BRA DVSUB6 FPUND3 BRA FPUND4 FPM453 BRA FPM454 COMX1 BRA COMX * * HERE TO SUBTRACT TWO QUADRUPLE ARGS * FPS10 LDA A 16,X ARG1- SUB A 11,X ARG2= STA A 6,X RESULT * LDA A 15,X LSB SBC A 10,X STA A 5,X * LDA A 14,X MIDDLE SBC A 9,X STA A 4,X * LDA A 13,X MSB SBC A 8,X BCS FPS20 COMPLEMENT THE CARRY BIT SEC BRA FPA55 FPS20 CLC BRA FPA55 GO CHECK OVERFLOW AND NORMALIZE FPOVF4 BRA FPOVF2 PAGE * *------------ * * GENERALIZED NORMALIZE ROUTIE. CALL: * JSR NORMX * WHERE A CONTAINS OFFSET TO ARG FROM NORMAL X (0-64) * ALL REGS EXCEPT X ARE DESTROYED * V IS SET IF UNDERFLOW WOULD OCCUR IF NBR * WERE NORMALIZED * Z IS SET IF ARG = 0 * *----------- * NORMX PSH A PUSH X OFFSET CLR B CLEAR Z,V WORD NL1 INX BUMP X BY ONE DEC A DONE N TIMES BNE NL1 BRANCH IF NOT * DO NORMALIZE LDA A 1,X CHECK FOR ZERO FRACTION ORA A 2,X ORA A 3,X ORA A 4,X BEQ NRMZRO DONT TRY TO NORM. ZERO ASL 0,X SAVE SIGN IN B WITH OFFSET ROL B ALSO DBL EXP NRM01 LDA A 1,X BIT A #$F0 NORMALIZED YET? BNE NRMOUT YES DEC 0,X BVS NRMOVF STOP IF NEXT SHIFT WILL CAUSE UNDERFLOW DEC 0,X BSR NRMSH4 SHIFT FRACT 4 BITS BRA NRM01 TRY AGAIN NRMOVF INC 0,X RESTORE EXP ORA B #4 OVF BIT AFTER SHIFT NRMOUT ROR B ROR 0,X PUT SIGN BACK ON NRMXIT PUL A GET X OFFSET NRMLP DEX DEC A BNE NRMLP TPA GET CURRENT STATUS ANDA #$10 SAVE INTERUPT STATUS ABA ADD B TO STATUS  TAP RTS RETURN * SUB TO SHIFT TRIPLE BYTE LEFT 4 BITS NRMSH4 LDA A #4 NSHLOP ASL 4,X ROL 3,X ROL 2,X ROL 1,X  DEC A BNE NSHLOP RTS NRMZRO LDA B #4 SET Z BIT CLR 0,X CLEAR EXPONENT BRA NRMXIT EXIT * PIC BRANCHES DVSUB6 BRA DIVSUB FPUND2 BRA FPUND3 FPM452 BRA FPM453 FPOVF5 BRA FPOVF4 PAGE * *------------ * * GENERALIZED TWOS COMPLEMENT ROUTINE. CALL: * JSR COMX * WHERE A CONTAINS OFFSET TO ARG FROM PRESENT X (0-64) * REGGISTERS ARE LOST * *------------- * COMX TAB SAVE OFFSET IN B TOO COM10 INX DEC A REPOSITION X TO ARG BNE COM10 TPA SAVE CALLER'S CC -V=0 COM 1,X DO 1'S COMPLEMENT COM 2,X COM 3,X COM 4,X INC 4,X MAKE 2'S COMPLEMENT BNE COMOUT GENERATE CARRIES AS LONG AS NEEDED INC 3,X BNE COMOUT INC 2,X BNE COMOUT INC 1,X BVS COMXX CANT COMP 80 00 00 00 COMYY TPA SAVE CONDITION CODE COMOUT DEX FIX X DEC B BNE COMOUT TAP PUT CONDITIONS IN RTS EXIT,RETURN * PIC BRANCHES DIVSTP BRA FPOVF4 NORMX5 BRA NORMX FPOVF6 BRA FPOVF5 FPM451 BRA FPM452 FPUND1 BRA FPUND2 * * * HERE TO SEE IF WE CAN SHIFT THIS SO WE * CAN COMPLEMENT IT. COMXX LDA A #4 SHIFT 4 BITS RIGHT COM22 CLC ROR 1,X ROR 2,X ROR 3,X ROR 4,X DEC A DONE? BNE COM22 INC 0,X INCR EXPONENT INC 0,X BRA COMYY JOIN ABOVE PAGE * *--------------------------------------------------- * * DIVIDE ARG2/ARG1 =RESULT * *------------------------------------------------ * *  DIVSUB LDA A #ARG2 NORMALIZE DIVIDEND BSR NORMX5 LDA A #ARG1 NORMALIZE DIVISOR BSR NORMX5 BVS DIVSTP DIVISOR TOO S MALL BEQ DIVSTP DIV BY ZERO IS A NONO * FORCE ARG2 LT ARG1 SO ALGORITHM CAN WORK * MAKE DIVIDEND (ARG2) SMALLER IN FRACTION * AND LARGER IN EXP FPD15 LDA A #5 DO 5 SHIFTS ON ARG2 FPD20 LSR 8,X ROR 9,X ROR 10,X ROR 11,X DEC A BNE FPD20 * DIVIDE DIVISOR FRACTION BY 2 TO * FACILITATE THE ALGORITHM LSR 13,X ROR 14,X ROR 15,X ROR 16,X  * * HERE TO ACTUALLY DIVIDE THE FRACTIONS * LDA B 11,X GET OVF BYTE OF DIVIDEND LDA A #29 29 BITS TO DO WITH OVF FPD40 PSH A SAVE CTR ASL B SHIFT DIVIDEND LEFT ONE BIT ROL 10,X ROL 9,X ROL 8,X ASL 6,X SHIFT RESULT LEFT ONE BIT  ROL 5,X ROL 4,X ROL 3,X * DO A DBL SUBTRACT. IF THE RESULT IS POS SET * BIT IN RESULT. IF NEG ADD DIVISOR BACK * AND SET RESULT BIT = 0 SUB B 16,X DIVIDEND-DIVISOR * LDA A 10,X LSB SBC A 15,X STA A 10,X * LDA A 9,X MIDDLE SBC A 14,X STA A 9,X * LDA A 8,X MSB SBC A 13,X STA A 8,X * IF CARRY NOT SET SET QUOTIENT BIT * AND CONTINUE BCC FPD55 BRA FPD50 * PIC BRANCHES FPUND0 BRA FPUND1 FPM450 BRA FPM451 FPOVF7 BRA FPOVF6 * IF CARRY IS SET ADD DIVISOR BACK * AND CONTINUE FPD50 ADD B 16,X DO DBL ADD * LDA A 10,X LSB ADC A 15,X STA A 10,X * LDA A 9,X MIDDLE ADC A 14,X STA A 9,X * LDA A 8,X MSB ADC A 13,X STA A 8,X BRA FPD60 GO TO CONTINUE * * HERE TO SET BIT IN QUOTIENT * FPD55 INC 6,X SET IT * FPD60 PUL A PULL LOOP CTR DEC A GONE 28 TIMES? BNE FPD40 NO * LEFT JUSTIFY RESULT * SINCE WE ONLY DIVIDED 28 TIMES WE NEED TO SHIFT * UP 4 BITS BUT SINCE WE RIGHT SHIFTED THE DIVISOR * 3 IS THE MAGIC NUMBER LDA A #3 SHIFT RESULT UP 3 BITS FPD62 ASL 6,X ROL 5,X ROL 4,X ROL 3,X DEC A BNE FPD62 * * HERE TO SUB EXPONENTS (EXP2-EXP1) * ALSO CALCULATE SIGN AND ADJUST EXP * TO REFLECT ORIGINAL SHIFT OF THE * DIVIDEND * LDA A 7,X EXP2 TAB SAVE IN B FOR SIGN CALC EOR B 12,X EXCLUSIVE OR WITH ARG1 AND B #$80 EXTRACT SIGN CLR 0,X CLEAR LOCAL OVERFLOW ASL A DBL EXP2 ASL 12,X DBL EXP1 SUB A 12,X EXP2-EXP1 BVC FPD70 BRANCH ON NO OVERFLOW BPL FPD80 UNDERFLOW BRA FPOVF7 DEFINITE OVERFLOW * MAKE UP FOR ORIGINAL SHIFT OF ARG2 BY ADDING TO EXP * THE EXPONENT FPD70 ADD A #2 FPD75 BRA FPM450 GO CHECK FOR OVFL'S ETC * HERE ON POTENTIAL UNDERFLOW * SEE IF THE ADJUST WOULD HELP ANY FPD80 ADD A #2 AN OVFL NOW MEANS YES BVS FPD85 BRA FPUND0 DEFINITE UNDERFLOW FPD85 CLV RESET OVERFLOW BRA FPD75 GO EXIT PAGE * *--------------- * TEST FOR FLOATING PACKAGE *--------------- * * C A U T I O N ! ! * THE TEST PROGRAM IS NOT * POSITION INDEPENDENT AND CANNOT * BE MOVED WITHOUT REASSEMBLING. * * * THE TESTS ARE RAN BY ASSIGNING VALUES * TO VAL1 AND VAL2. BREAKS CAN THEN * BE SET AT THE BVS FOLLOWING EACH * SUBROUTINE CALL AND ANS BE PRINTED * OUT. * * SOME SAMPLE VALUES ARE: * NBR EXP FRACTION * .500 00 80 00 00 * .250  00 40 00 00 * .125 00 20 00 00 * .750 00 C0 00 00 * -.500 80 80 00 00 * 8.000  01 80 00 00 * 4.000 01 40 00 00 * 1.000 01 10 00 00 * -8.000 81 80 00 00 * 0.000   00 00 00 00 * 0.999 00 FF FF FF * * * DONT RE-EXECUTE THE CODE THAT MOVES * THE PROGRAM IF SEVERAL PASSES ARE * MADE THRU THE TEST. START SUBSEQUENT * PASSES AT 'ADDTST'. * ORG $100 FPTST LDS #STACK SET THE STACK LDX #$0AC0 MOVE THE SUB FROM CAT LDA A $40,X $0B00 TO $0AC0 TO STA A 0,X PROVE ITS REALLY PIC INX CPX #$0EC0 BNE CAT * * EQUATES SO WE CAN ENTER THE MOVED PRG * BY USING MNUEMONICS. * ADDIT EQU $AC0 SUBIT EQU $AC2 MULIT EQU $AC4 DIVIT EQU $AC6 * VAL1+VAL2=ANS ADDTST JSR ADDIT FPADD FDB VAL1 FDB VAL2 FDB ANS BVS OVER1 * VAL1-VAL2=ANS SUBTST JSR SUBIT FPSUB FDB VAL1 FDB VAL2 FDB ANS BVS OVER2 * VAL1*VAL2=ANS MULTST JSR MULIT FPMUL FDB VAL1 FDB VAL2 FDB ANS BVS OVER3 * VAL2/VAL1=ANS DIVTST JSR DIVIT FPDIV FDB VAL1 FDB VAL2 FDB ANS BVS OVER4 BRA * DONE *HERE ON OVERFLOWS OVER1 BRA * OVERFLOW ON ADD OVER2 BRA * OVERFLOW ON SUB OVER3 BRA * OVERFLOW ON MUL OVER4 BRA * OVERFLOW ON DIV * * INPUT ARGS * VAL1 FDB 0,0 VAL2 FDB 0,0 * * ANSWER * ANS FDB 0,0 * * STACK * BOTSTK RMB 50 STACK RMB 1 END MON ! d€ NAMRANDOM * *REV.1.0 * *GENERATESA(PSUEDO)RANDOMSEQUENCEOF16BIT *BINARYNUMBERSR(N)USINGALINEARCONGRUENTIAL *SEQUENCEOFTHEFORM:R(N+1)=(R(N)*A+C)MOD2**16 *WHEREA=2**11+2**2+1‚AND‚C=$3619. * *CAUTION:‚IFAK-BITRANDOMNUMBERISNEEDEDAS *OPPOSEDTOA16BITRANDOMNUMBER,USETHE‚MOST *SIGNIFICANTKBITS(THELEASTSIGNIFICANTKBITS *ARENOTASRANDOM). * *REFERENCE:‚DONALDEKNUTH,"THEARTOFCOMPUTER *PROGRAMMING"VOLUMEII,ADDISONWESLEYPUBLISHING *COMPANY,1969. * *THERANDOMNUMBERGENERATORISWRITTENASASUB- *ROUTINECALLED"RNDGENWHICHISREENTRANTANDMAY *BESTOREDINRAMORROM.‚TWOBYTESOFRAMARE *REQUIREDTOSTORETHECURRENT16BITRANDOMVALUE. * *REGISTERSUSED:A,B,C,X * *INPUT:‚THECURRENT16BITRANDOMNUMBERWHICHIS *STOREDASTWOBYTESATRAMADDRESSESZ(MOST *SIGNIFICANTBYTE)ANDZ+1(LEASTSIGNIFICANTBYTE). *THEINDEXREGISTERXMUSTCONTAINTHEADDRESSZ. * *OUTPUT:ANEW16BITRANDOM‚NUMBERWITHTHEMOST *SIGNIFICANTBYTESTOREDINRAMLOCATIONXAND *ACCUMULATORAANDTHELEASTSIGNIFICANTBYTESTORED *INRAMLOCATIONZ+1ANDACCUMULATORB.‚THEINDEX *REGISTERXWILLSTILLCONTAINTHEADDRESSZ. * *CALLINGSEQUENCE+ *“LDX‚#RNDADDƒRANDOM#STORE *“JSR‚RNDGEN * *PROGRAMSTORAGE:‚24BYTES * *EXECUTIONTIME(1MHZMPUCLK):‚56MICROSECONDS * * * ORG$0000 RNDADDRMB2RANDOMNUMBERSTORAGE * * ORG$0400 RNDGENLDAA1,XCOMPUTE(R(N)*2**9)MOD2**16 ASLA ADDA0,XADDR(N)TORESULT LDAB1,X ASLBMULTIPLYBY2**2 ROLA ASLB ROLA ADDB1,XADDR(N)TORESULT ADCA0,X ADDB#$19ADDOFFSETC=$3619 ADCA#$36 STAA0,XSTORENEWRANDOMNUMBER STAB1,XINLOCATIONRNDADD. RTSRETURNTOMAIN END ÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅ h€ NAM PROMDP OPT O OPT NOG * PROM SOURCE GEN ORG $0E00 * * STARTING ADDR OF PGM IS $E00. * PGM WILL PROMPT BLOC AND ELOC * FOR BEGIN AND END DUMP LOCATIONS * RESPECTIVELY. * RESPOND TO EACH BY TYPING A * 4-DIGIT HEX ADDRESS; * CTL/U WILL RESTART PGM. * PGM WILL PAUSE FOR PUNCH TURN-ON. * TYPE IN A DUMP FORMAT CONTROL * CHARACTER (NOT ECHOED) TO BEGIN * DUMP. * CHARACTER M WILL SUPPRESS LEADER * AND TERMINATOR. * CHARACTER N WILL SUPPRESS LEADER * ONLY. * ANY OTHER LEGAL KBD ACTION WILL GENERATE * A DUMP WITH BOTH LEADER AND TERMINATOR. * AT END OF DUMP PROGRAM WILL PAUSE AGAIN * FOR PUNCH TURN-OFF; CTL/U WILL RESTART PGM. * ANY OTHER KBD ACTION WILL CAUSE A RETURN TO EXBUG. * ACCS EQU $FCF4 ACDA EQU ACCS+1 STACK EQU *-1 EXBG EQU $F4D8 * ENTR LDAA #$B1 ENTRY POINT-SET I/O STAA ACCS RENT LDS #STACK SET UP STACK POINTER LDAB #$8 GET DUMP PARAMETERS LDX #HDR1 JSR TYPO GET ADDR OF FIRST LDX #CAD JSR INAD LDAB #$8 LDX #HDR2 JSR TYPO GET ADDR OF LAST LDX #ENDA JSR INAD JSR CRLF JSR INNE WAIT FOR ANY KBD ACTION STAA WORK CMPA #'N BEQ LINE BYPASS LEADER CMPA #'M BEQ LINE BYPASS LEADER JSR LDR BEGIN DUMP LINE LDAA CAD ANDA #3 JSR HFMT TBA BSR OUCH LDAA CAD+1 JSR HFMT BSR OUCH TBA BSR OUCH LDAA #$20 SPACE BSR OUCH LDX CAD LDAA 0,X JSR HFMT BSR OUCH TBA BSR OUCH JSR CRLF INX STX CAD DEX CPX ENDA BNE LINE LDAA WORK CMPA #'M BEQ PAU BYPASS TERMINATOR LDAB #3 LDX #SLSH BSR TYPO JSR LDR PAU JSR INNE WAIT FOR KBD ACTN CMPA #$15 CTL/U? BNE EXIT JMP RENT EXIT JMP EXBG EXIT TO EXBUG * * OUCH PSHB OUTPUT CHAR TO TTY OCH1 LDAB ACCS ASRB ASRB BCC OCH1 TX NOT RDY STAA ACDA PULB RTS * TYPO LDAA 0,X BSR OUCH INX DECB BNE TYPO RTS * INAD BSR INBY STAA 0,X BSR INBY STAA 1,X RTS * INBY BSR INHX ASLA ASLA ASLA ASLA STAA WORK BSR INHX ORAA WORK RTS * INHX BSR INNE INPUT A HEX DIGIT BSR OUCH ECHO CHARACTER CMPA #'0 BMI ABOT CHECK IF ERROR TEST CMPA #'9 BLE INH1 CMPA #'A BMI ABOT CMPA #'F BGT ABOT SUBA #7 INH1 ANDA #$F TRUNCATE TO 4 BITS RTS * ABOT CMPA #$15 CTL/U? BNE IGN JMP RENT YES,REDO IGN LDAA #$3F PRINT ? BSR OUCH BRA INHX * LDR LDAB #$30 OUTPUT LEADER CLRA NULL BSR OUCH DECB BGT NULL RTS * CRLF LDAA #$D OUTPUT CR/LF BSR OUCH LDAA #$A LINE FEED BSR OUCH RTS * INNE LDAA ACCS INPUT WITH NO ECHO ASRA BCC INNE RX NOT RDY LDAA ACDA INPUT ANDA #$7F MASK OFF MSB RTS * HFMT TAB FORMAT TO ASCII(A=MSB,B=LSB) ANDB #$F TRUNCATE TO 4 BITS LSRA LSRA LSRA LSRA  ADDA #'0 ASCII BIAS CMPA #'9 BLE HD2 ADDA #7 HD2 ADDB #'0 CMPB #'9 BLE HDX ADDB #7 HDX RTS * TADS RMB 2 TEMP ADDR STORE WORK RMB 1 HDR1 FCB $D,$A FCC /BLOC / HDR2 FCB $D,$A FCC /ELOC / CAD RMB 2 CURRENT ADDR ENDA RMB 2 END ADDR SLSH FCB $2F,$D,$A TERM CHAR END  ÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅto€uNAMMPURLT OPTL,P,O,NOG *MPUTEKISAREALTIMEOPERATINGSYSTEMDESIGNED *TORUNONTHEMOTOROLAM6800MICROPROCESSOR *WITHATLEAST2KOFMEMORY.‚ITSTABLESARE *CURRENTLYSETUPTOHANDLENINETEENTASKS. SPC1 *WRITTENBY:STEVEB.KITTLESON‚RM563‚962-2607 *DATE:‚8/25/75 SPC2 SPC2 *TORUNEXEC: *„SETREGISTERSASFOLLOWS: *†CC‚BR‚AR‚XR„PC *†FF‚00‚00‚0000‚0100 *„SETSWITCH(ADDEDBYUSER)ONEVAL.MODULETO *ˆ"MPUECHOINPUT" *„TYPEGONTTY SPC2 SFREGAEQU$2DSPECIALFUNCTIONREGADR ITRAD1EQU$41INTERRUPTREGADRFORSTA1 ITRAD2EQU$B1INTERRUPTREGADRFORSTA2 SPC2 ORG$8004 PIA1ADRMB1PIA1ASIDEDATA PIA1ACRMB1PIA1ASIDECONTROL PIA1BDRMB1PIA1BSIDEDATA PIA1BCRMB1PIA1BSIDECONTROL ORG$8008 PIA2ADRMB1PIA2ASIDEDATA PIA2ACRMB1PIA2ASIDECONTROL PIA2BDRMB1PIA2BSIDEDATA PIA2BCRMB1PIA2BSIDECONTROL PIA2EQUPIA2AD ADRBUSEQUPIA2BD DATBUSEQUPIA2AD SPC2 ORG$0 SPC1 *THISTABLEMUSTBEPATCHEDWITHTASKADDRESS SPC1 *…TASKSTARTADDRESSTABLE *…FIRST8ITEMSAREFORINTERUPTHANDLERS TSAFDBTURNOF„0- FDBTURNOF1- FDBTURNOF2- FDBTURNOF3- FDBTURNOF4- FDBTURNOF„5- FDBTURNOF„6- FDBTURNOF„7- FDBTURNOF8- FDBECHO9-ECHOINPUTTASK FDBCTRLA10-CTRL+ATASK(EXAMPLE) FDBTURNOF11- FDBTURNOF12- FDBTURNOF13- FDBTURNOF14- FDBTURNOF15- FDBTURNOF16- FDBTURNOF17- FDBTURNOF18- FDBTURNOF19-FILLER‚DONOTUSE SPC2 *TASKSTATUSTABLE†B7-B0 *…INIT:00010000INDXBY:TASK# SPC1 *…BITŠFUNCTION *…---Š-------- * *†7‹NOTUSED=0 *†6‹NOTUSED=0 *†5‹WAITINGFORCRTINPUTFLAG=1 *†4‹TASKINACTIVEFLAG=1 *†3‹XFERINPROGRESS(TAPEORCRT)=1 *†2‹WAITINGFORCRTHANDLERFLAG=1 *†1‹WAITINGFORTAPEHANDLERFLAG=1 *†0‹SUSPENDFLAG=1 SPC1 TSRMB20TASKSTATUSTABLE SPC2 *STATIONSWAITINGFORSERVICETABLE‚B7-B0 *…INIT:11111111‚INDXBY:TASK# SPC1 *…BIT‰FUNCTION *…---‰-------- * *†7ŠNOTUSED=1 *†6ŠNOTUSED=1 *†5ŠNOTUSED=1 *†4ŠNOTUSED=1 *†3ŠSTATION4WAITING=0 *†2ŠSTATION3WAITING=0 *†1ŠSTATION2WAITING=0 *†0ŠSTATION1WAITING=0 SPC1 SWFSRMB20STATIONSWAITINGFORSERVICE NOTSKSEQUSWFS-TSNUMBEROFTASKS SPC2 *STATIONINSERVICETABLE‚B7-B0 *‡INIT:00000000‚INDXBY:TASK# SPC1 *…BIT‰FUNCTION *…---‰-------- * *†7ŠNOTUSED=0 *†6ŠNOTUSED=0 *†5ŠNOTUSED=0 *†4ŠNOTUSED=0 *†3ŠSTATION4INSERVICE=1 *†2ŠSTATION3INSERVICE=1 *†1ŠSTATION2INSERVICE=1 *†0ŠSTATION1INSERVICE=1 SPC1 SISRMB20STATIONINSERVICE SPC2 *BITMAPTABLE SPC1 B7EQU‚%10000000 B6EQU‚%01000000 B5EQU‚%00100000 B4EQU‚%00010000 B3EQU‚%00001000 B2EQU‚%00000100 B1EQU‚%00000010 B0EQU‚%00000001 SPC1 TRARMB40TASKRESTARTADDRESS CTPRMB2CURRENTTASKPOINTER DSFRMB1DIDSOMETHINGFLAG SPCFNCRMB1SPECIALFUNCTIONSVALUE SAVXRMB2 STAMSKRMB1STATIONNO.MASK MSGADRRMB2ADROFOUTPUTMESSAGE MSGTSKRMB2TASKNO.REQUESTINGMSG BITCNTRMB1CHARBITCOUNT OUTCHRRMB1OU TPUTCHAR NUCHRFRMB1NEWCHARFLAG INCHARRMB1INPUTCHAR TSKBUFRMB2TASKCHARBUFFERADR CHRBFRMB1CHARBUFFLAG1=FULL0=EMPTY TSKWOIRMB2TASKWAITINGONINPUT HLDBUFRMB1CHARHOLDINGBUFFER INXTMPRMB2INDEXTEMPORARY OUTPIPRMB1OUTPUTINPROGRESSFLAG1=N00=YES INPTIPRMB1INPUTINPROGRESSFLAG‚DITTO ECOSRGRMB1ECHOSTRING FCB$07,$04TONEANDEOM SAVBRMB1 SAVARMB1 RMB30STACKAREA STACKRMB11STLOCOFSTACK PAGE *ƒNAM‚INIT SPC1 ORG$100 SPC2 *HERETOINITIALIZEAFTERLOADING SPC2 *SETUPSTACKPOINTER SPC1 INITLDS#STACK LDX#PIA1ADX-REG=ADRPIA1A LDAA0,XCLEARCA1BIT CLR1,XCLEARPIA1ACONTROL LDAA#%00000001SETPIA1ADATADIR STAA0,X LDAA#%00000101SETPIA1ACONTROL STAA1,X CLR3,XCLEARPIA1BCONTROL LDAA#%00000101SETPIA1BDIR STAA2,X LDAA#%00110100SETPIA1BCONTROL STAA3,X LDAA#4SETBITTIMERFORFULLTIME STAA2,X LDX#PIA2ADX-REG=PIA2ADR COM0,XSETASIDEDDRASOUTPUTS LDAA#%00011111SETPIA2ASIDECONTROL STAA1,X COM2,XSETBSIDEDDRASOUTPUTS LDAA#%00101100SETPIA2BSIDECONTROL STAA3,X SPC1 SPC1 *SETUPINITIALTASKSTATIONTABLE SPC1 LDX#TS LDAA#%00010000 LDAB#20 BSRSETUP SPC2 *SETUPINITIALSTATIONSWAITINGFORSERVICETABLE SPC1 LDX#SWFS LDAA#%11111111 LDAB#20 BSRSETUP SPC2 *CLEAROTHERTABLESANDFLAGS SPC1 LDX#SIS CLRA LDAB#OUTPIP-SIS BSRSETUP SPC2 *INITIALIZEI/OFLAGS SPC1 INCA STAAOUTPIP STAAINPTIP SPC2 SPC2 *SETUPINTERRUPTADR SPC1 LDX#NTRUPT STX$A000 CLI JMPQUSRCH SPC2 *ROUTINETOSETMEMORYLOCATIONS *…XR-1STADR *…BR-NO.OFITEMS *…AR-SETUPVALUE SPC1 SETUPSTAA0,X INX DECB BGTSETUP RTS SPC2 *ƒNAMQUSRCH SPC1 ORG$180 QUSRCHJMPQ1 TSKRTNJMPQ2 SPC1 Q1LDXCTPX-REG=CURRENTTASKPOINTER QULOOPLDAATS,XFETCHCURRENTTASKSTATUS BEQXTASKIFCLEAR-RUNIT NXTTSKINXIFNOT-CHECKNEXTTASK CPX#NOTSKSƒALLTASKSCHECKED? BNEQULOOPNO-CONTINUECHECKING CLRCTP+1YES-CLEARCURRENTTASKPTR LDAADSFBEENBUSY? BNECLRDSFYES-CHECKFORMORE WAIOTHERWISE,WAITFORINTR CLRDSFCLRDSF BRAQUSRCHSEARCHQUEUEAGAIN SPC2 *HERETOSTARTORRESTARTATASK SPC2 XTASKINCDSFSETDIDSOMETHINGFLAG STXCTPSETCURRENTTASKPOINTER STXINXTMPDOUBLETASKPOINTER ASLINXTMP+1ININXTMP LDAASIS,XISTHISARESTART BNERESTRTƒYES CLRA‚A-REG=0 SEC‚SETCARRY ROLAMOVEITINTOA-REG STALOPBITASWFS,XANDAGAINSTSTAWAIFLAG BEQSETSTAFOUNDAWAISTA ASLACHECKNEXTSTATION BRASTALOP SETSTASTAASIS,XSETSTATIONINSERVICE LDXINXTMPXR=POINTERTOTSA LDXTSA,XXR=TASKSTARTADR JMP0,XRUNTASK RESTRTLDXINXTMP‚X-REG=POINTERTORESADR LDXTRA,XX-REG=RESTARTADR JMP0,XLETTASKDOITSTHING Q2CLI ‚LDXCTPX-REG=CURRENTTASKPOINTER BRANXTTSKCONTINUEQUEUESEARCH PAGE *ƒNAM‚TURNON SPC1 ORG$200 SPC1 *HERETOTURNONATASK SPC2 *…CALLINGSEQƒLDXTSK# *“LDABSTA#MASK11111101=STA2 *“JSRTURNON SPC2 TURNONLDAATS,XFETCHTASKSTATUS BITA#%00010000IFTASKISALREADYON... BEQTRN2SETSWFSBIT ANDA#$EFCLEARINACTIVEBIT STAATS,XSTORETASKSTATUS TRN2ANDBSWFS,XSETSTATIONWAIFORSERVICE STABSWFS,XSTORESTAWAIFLAG RTSRETURN SPC2 *ƒNAMTURNOF SPC1 ORG$24 0 SPC1 *HERETOTURNOFFATASK *TASKATURNSITSELFOFF SPC2 *…CALLINGSEQƒJMPTURNOF SPC2 TURNOFSEI LDXCTPX-REG=TASK# LDAASWFS,XFETCHSTAWAIFLAG ORAASIS,XSETSTADONE STAASWFS,XSTORESTAWAIFLAG CLRSIS,XCLEARSTAINSERVICEFLAG COMACHECKFOROTHERSTAWAI BNETOUTYES-RETURNTOEXEC LDAATS,XNO-FETCHTASKSTATUSWORD ORAA#$10SETINACTIVEBIT STAATS,XSTORETASKSTATUS TOUTJMPTSKRTNBACKTOEXEC SPC2 *‚NAMTRNOFF ORG$25A *HEREFORTASKATOTURNOFFTASKB *RETURNTOTASKA SPC1 *†JSRTRNOFF *†XR=TASKTOTURNOFF SPC1 TRNOFFSEI LDAASWFS,X ORAASIS,X STAASWFS,X CLRSIS,X COMA BNEOUT1 LDAATS,X ORAA#$10 STAATS,X OUT1CLI RTS PAGE *ƒNAMGIVEUP SPC1 ORG$280 SPC1 *HERETOGIVECONTROLBACKTOEXECTEMP. SPC2 *…CALLINGSEQƒJSRGIVEUPORJMPGIVEUP SPC2 GIVEUPPULAFETCHHIRESTARTADR PULBFETCHLORESTARTADR LDXCTPX-REG=TASK# STXINXTMP ASLINXTMP+1 LDXINXTMP STAATRA,XSTORERESTARTADR STABTRA+1,X JMPTSKRTNBACKTOEXEC SPC2 *ƒNAM‚NTRUPT SPC1 ORG$2C0 SPC1 *HEREINRESPONSETOINTERRUPT SPC2 *…I/OGETSIMMEDIATEATTENTION *…OTHERSGETFLAGSETINEXECTABLE SPC2 NTRUPTLDAAPIA1ACCHECKFORCRTINPUT BITA#%10000000STARTBITDETECTED? BEQNOTINNO-CHECKIOTIMER BITA#%00000001YES-INPUTALLOWED? BNEVEC1‚YES-GOGETIT NOTINLDAAPIA1BCFETCHBSIDECTRL BITA#%00000011IOTIMERALLOWED? BEQNOTIONO-CHECKOTHERINTRS BITA#%10000000YES-ISITIOTIMER BNEVEC2 BRANOTIO SPC2 *VECTORSTOI/OROUTINES SPC1 VEC1JMPCRTIN VEC2JMPBITTMR SPC2 *HEREIFINTERRUPTNOTCRTI/O SPC2 ********************************************************* *USER'SINTERRUPTHANDLERGOESHERE NOTIONOP *********************************************************** SPC2 *HERETODECODEINTERRUPTS *TURNONINTRHANDLERTASKS SPC2 *…A-REGHASINTRREGCONTENTS SPC2 LDX#0SETTASK#PTR LDABSTAMSK COMBSTAMASKEX:STA2=11111101 DECOD3ROLA BCCFLGTSKCHECKFORSERVICEREQUEST DECOD2INXNEXTTASK CPX#88POSSIBLECHECKEDYET? BNEDECOD3NO-CHECKANOTHER RTI SPC2 FLGTSKPSHAGOTURNONATASK PSHB STXSAVX JSRTURNON PULB PULA LDXSAVX BRADECOD2 SPC2 *ƒNAMMSGREG SPC1 ORG$380 MSGREQJMPMSG1 MSGOUTJMPMSG2 SPC1 *HERETOPROCESSCRTOUTPUT *†JSRMSGREQ *…LOADADROFMSGINX-REG *…JSRMSGOUT SPC2 MSG1SEI LDAAOUTPIPFETCHOUTPUTINPROGRESSFLAG ANDAINPTIPANDWITHINPUTINPRGSFLAG BEQNOTAVLBUSY-RESETTOCOMEBACKLATER RTS NOTAVLLDXCTPX-REG=TASK# LDAATS,XFETCHTASKSTATUS ORAA#%00000100SETWAITINGFORCRTFLAG STAATS,X *TRYAGAINLATERWITHMSGREQ TSXSP+1->XR LDAA0,XGETHIRTNADR LDAB1,XGETLORTNADR SUBB#3DECRTNADRBY3 SBCA#0 STAA0,XSTORERTNADR->STACK STAB1,X JMPGIVEUPGIVEUPCTRLTOEXEC *‹RETURNWILLBETOTASKTHAT *ŒMADECRTMSGREQUESTATJSRMSGREQ SPC1 *HERETOOUTPUTAMSGONCRT SPC2 *…ADROFMSGINX-REG SPC2 MSG2STXMSGADRSAVEMSGADR CLROUTPIPSETXFERINPROGRESS LDXCTPXREG=TASK# LDAATS,XFETCHTASKSTATUS ORAA#%00001000SETXFERINPROGRESS STAATS,X STXMSGTSKSAVEREQTASK# LDAA#$01SETNEWCHARFLAG STAANUCHRF LDX#PIA1AD INC2,XRESETTIMER DEC2,X LDAA2,XCLEARCB1FLAG LDAA#$37ENABLE CB1INTR STAA3,X JSRGIVEUPBACKTOEXEC SPC2 *EXECRETURNSHEREAFTERMSGISCOMPLETE SPC2 *…LOOKFORANOTHERTASKWAITINGFORCRT SPC2 LDXMSGTSK INX MSGSRHLDAATS,X BITA#%00000100 BNERESWAIFOUNDATASKWAITING CPXMSGTSK BEQCOMPLT INX CPX#NOTSKS BNEMSGSRH LDX#0 BRAMSGSRH RESWAIANDA#%11111011RESETWAITINGONCRT STAATS,X COMPLTINCOUTPIPRESETOUTPIP RTSRETURNTOCALLINGTASK SPC2 *‚NAM‚BITTMR SPC1 ORG$400 SPC1 *HEREONCB1-BITTIMER-INTERRUPT SPC2 BITTMRLDX#PIA1AD INC2,XRESETTIMER DEC2,X LDAA2,XCLEARCB1INTRFLAG LDAAINPTIPFETCHINPUTFLAG BEQBITINPBRANCHFORINPUT SPC2 *HERETOPROCESSOUTPUTMESSAGE SPC2 LDAANUCHRFFETCHNEWCHARFLAG BNENUCHRBRANCHONNEWCHAR LDABBITCNTFETCHBITCOUNT BLEMRKOUTBRANCHTOMARKOUTPUTATENDOFCHAR LDAAOUTCHRFETCHCHAR STAA0,XSENDLSBTODATALINE RORA‚SHIFTNEXTBITINTOLSB STAAOUTCHRSAVECHARFORNEXTTIME DECCNTDECBDECREMENTBITCOUNT STABBITCNT RTI SPC1 MRKOUTLDAA#$01MARKCOMLINE STAA0,X TSTBCHECKCOUNT BEQDECCNTOUTPUT1MOREMARK STAANUCHRFRESETNEWCHARFLAG RTI SPC1 NUCHRLDXMSGADRFETCHCHARADR LDAA0,XFETCHCHAR INXINCCHARADR STXMSGADR CHKEOMCMPA#$04CHDBDORENDOFMESSAGE BEQTHTSALBRANCHONEOM CLRPIA1ADSPACECOMLINE STAAOUTCHRSTORECHAR LDAA#8RESETBITCOUNT STAABITCNT CLRNUCHRFRESETNEWCHARFLAG RTI SPC1 THTSALLDXMSGTSKFETCHTASKNO. LDAATS,XFETCHTASKSTATUS ANDA#%11110111RESETXFERINPROCESSFLAG STAATS,X LDX#PIA1AD LDAA#%00110100DISABLECB1INTR STAA3,X RTI SPC1 BITINPJMPBITIN  SPC2 *ƒNAM‚CRTIN SPC1 ORG$480 SPC1 *HERETOSERVICECA1-CRTINPUT-INTERRUPT SPC2 CRTINCLRINPTIPSETINPUTINPROCESSBUSY LDAA#%00000100DISABLECA1INTR STAAPIA1AC LDX#PIA1AD CLR2,XSETTIMERFORHALFBITTIME INC2,XRESETTIMER DEC2,X LDAA2,XCLEARCB1INTRFLAG LDAA#$37 STAA3,XENABLECB1INTR INCNUCHRF LDAAOUTPIPCHECKFOROUTPUTINPROGRESS BNEX1BRANCHIFNOT SECMARKCOMOUTLINE ROL0,X LDXMSGTSK LDAATS,XRESETXFERINPROGRESS ANDA#%11110111 STAATS,X X1RTI SPC2 *ƒNAM‚BITIN SPC1 ORG$4C0 SPC1 *HERETOSERVICEBITTIMERDURINGCRTINPUT SPC2 BITINLDX#PIA1AD LDAANUCHRFFETCHNEWCHARFLAG BEQBITIN2NOTNEWCHAR LDAA#4SETTIMERFORFULLBITTIME STAA2,X INC2,XRESETTIMER DEC2,X LDAA2,XCLEARCB1INTRFLAG LDAA#8SETBITCNT STAABITCNT CLRINCHARCLEARINPUTCHAR CLRNUCHRFRESETNEWCHARFLAG RTI SPC1 *HERETOBUILDBITINTOCHAR SPC1 BITIN2LDAABITCNT BLEBITIN3BRANCHFORMARKS SECMARKOUTPUT ROL0,XSHIFTINPUTBITINTOCARRY LDABINCHARFETCHINCHAR RORBSHIFTBITINTOINCHAR STABINCHAR BITIN4DECBITCNTDECREMENTBITCNT RTI SPC1 BITIN3BEQBITIN4RETURN-IGNORESTOPBIT LDX#09ECHOTASK#TOXR LDAB#$FESTA1FORINPUTECHO JSRTURNONTURNONECHOTASK LDX#PIA1AD LDAA0,XCLEARCA1INTRFLAG LDAA#$05ENABLECA1INTR STAA1,X LDAA#$34DISABLECB1INTR(TIMER) STAA3,X INCINPTIPCLEARINPUTINPROGRESS RTI SPC2 *ƒNAM‚WAITFI SPC1 ORG$540 SPC1 *HERETOGIVEUPCONTROLANDWAITFORINPUT SPC2 *…X-REG=CHARBUFFERADR *…BSRWAITFI SPC2 WAITFILDAACHRBFFETCHCHARBUFFERFLA G BEQEMPTY CLRCHRBF LDAAHLDBUFPUTCHARINUSERSBUFFER STAA0,X RTS EMPTYSTXTSKBUFSAVEBUFFERADR LDXCTP STXTSKWOISAVETASKNO. LDAATS,X ORAA#%00100000SETWAITONINPUTFLAG STAATS,X JMPGIVEUP SPC2 *ƒNAMECHO SPC1 ORG$580 SPC1 *TASK9-ECHOANDDECODECRTINPUT SPC2 ECHOJSRMSGREQGETMSGHANDLER LDAAINCHARFETCHCHAR STAAECOSRGSTOREINECHOSTRING LDX#ECOSRGOUTPUTMSG JSRMSGOUT LDAAINCHAR ANDA#$7F STAAINCHAR BRAECHO2 SPC2 *HEREIFATASKISWAITINGFORINPUT SPC2 ECHO1LDXTSKBUFFETCHTASKBUFFERADR LDAAINCHAR STAA0,XSTORECHARINTASKBUF CLRCHRBFCLEARBUFFERFULLFLAG LDXTSKWOI LDAATS,XRESETTASKWAITINGFORINPUTFLAG ANDA#%11011111 STAATS,X BRAEXTECO SPC2 SPC2 ECHO2LDAAINCHARCHECKCONTROLBLOCK CMPA#%01 BLTECHO3 CMPA#$06 BGTECHO3 SPC2 *HEREIFITISACONTROLCHAR *TURNOFFANYTASKWFI SPC1 LDXTSKWOI CPX#$0000 BEQCC LDAATS,X ANDA#%11011111RESETTASKWAITINGFORINPUTFLAG STAATS,X JSRTRNOFF CCLDAAINCHAR ADDA#09MAKEPOINTERTOCONTROLTASK STAATSKWOI+1 LDXTSKWOI CLRTSKWOI CLRTSKWOI+1 LDAB#$FESTA1MASK JSRTURNON BRAEXTECO SPC2 *HERETOSAVECHARUNTILSOMEBODYWANTSIT SPC2 ECHO3LDAATSKWOI+1CHECKFORTASKWOI BNEECHO1 LDAAINCHAR STAAHLDBUFSAVECHAR INCCHRBF‚SETFLAG EXTECOJMPTURNOF SPC2 *EXAMPLECONTROLTASK-TASK#10 SPC1 *THISTASKISSTARTEDBYTHEEXECINRESPONSE *TOACTRLATYPEDONTHETTY.‚ITPRINTSA *MESSAGETOTHEOPERATOR. SPC1 ORG$0600 SPC1 CTRLAJSRMSGREQREQUESTMESSAGEHANDLER SPC1 *CONTROLRETURNSHEREWHENMSGHANDLERREADY LDX#MSGXR=ADROFMSG JSRMSGOUTOUTPUTMESSAGE SPC1 *CONTROLRETURNSHEREAFTERMSGCOMPLETE *OTHERTASKSMAYRUNWHILEMSGISTYPED JMPTURNOFTURNOFFTHISTASK-BACKTOEXEC SPC1 MSGFCB$0D,$0ACR-LF FCC/THISISAREAL-TIMERESPONSE/ FCC/TOACONTROLCHARACTER/ FCB$0D,$0ACR-LF FCC/OTHERTASKSCANRUN/ FCC/WHILETHISMESSAGEISPRINTING/ FCB$0D,$0A,$04$04TERMINATESMSG END ÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅ0€1NAMBLKJCK *BLACKJACKREV1.5RICKSTERLINGQUADEIGHTELEC.8/16/76 * *NOTETOUSERS,THEREISATIMERINCORPORATEDIN *THISPROGRAM.ITISUSEDTOGENERATEDELAYSDURING *PLAYWHENOPERATINGAT9600BAUD.THOSEOFYOUWHO *AREUSINGSLOWERBAUDRATESMAYWISHTODELETETHIS *FUNCTION. OPTO,NOG DLRTOTEQU$309 PLRTOTEQU$30A DLRSAVEQU$305 PLRSAVEQU$306 PLRACEEQU$307 DLRACEEQU$308 SAVEXEQU$300 DKPNTREQU$302 FLAGEQU$304 RANDNOEQU$100 TEMPEQU$104 DECKEQU$105 ORG$1000 *INITIALIZESTACKPOINTERPRINTMESSAGE *CLEARSCORECLEARCARDMEMORY STARTLDAA#$39 STAA$FCF4 LDS#$FF0 LDX#SHUF JSRPRINT LDX#$3030 STXPLRSCR STXDLRSCR CLRDLRTOT CLRPLRTOT *JUMPTOSHUFFLEROUTINEREPEATUNTIL *KEYPUSHED LOOPCJSRSHUFLE+6 LDAA$FCF4 ASRA BCCLOOPC LDAA$FCF5 LDX#DECK STXDKPNTR *PLAYSTARTSHERE,ALLTEMPREGISTERSARE *CLEARED START1CLR FLAG JSRSCORE CLRPLRACE CLRDLRACE CLRDLRSAV CLRPLRSAV JSRTIME LDX#OVRLY JSRPRINT START2JSRDEAL JSRSCALE JSRPLRCRD JSROUTCD LDX#SPACE JSRPRINT JSRDEAL JSRSCALE JSRDLRCRD LDABFLAG BEQFIRST STAATEMP BRASECOND FIRSTJSROUTCD SECONDLDAA#$A JSRCOUT LDAA#$D JSRCOUT INCFLAG LDAAFLAG CMPA#2 BNESTART2 LDAAPLRSAV CMPA#22 BNENEX1 LDAA#12 STAAPLRSAV DECPLRACE NEX1CMPA#21 BNECKDLR LDX#PLRBKJ JSRPRINT INCPLRTOT JMPSTART1 COUTEQU*CHARATOROUTPUTROUTINE PSHBSAVEBREGISTER LDAB$FCF4CONTROLREG ASRB ASRB BCCCOUT+1 STAA$FCF5OUTPUTCHAR CLRB DECB BNE*-1 PULBRESTOREBREG RTS SCORETSTDLRTOT BEQNEXT1 CLRDLRTOT LDX#DLRSCR BSRBCDADD NEXT1TSTPLRTOT BEQOUT7 CLRPLRTOT LDX#PLRSCR BSRBCDADD OUT7RTS BCDADDLDAA1,X LDABX ANDA#$F ANDB#$F ASLB ASLB ASLB ASLB ABA ADDA#1 DAA TAB ANDB#$F ADDB#$30 STAB1,X LSRA LSRA LSRA LSRA ADDA#$30 STAAX RTS TIMECLRA TIMELLDX#$0000THISVALUEMAYBEADJ.FORDIFFERENTTIMEOUT LOOPTINX BNELOOPT INCA CMPA#5THISVALUEMAYBEADJ.FORDIFFERENTTIMEOUT BNETIMEL RTS CKDLRLDAADLRSAV CMPA#22 BNENEX2 LDAA#12 STAADLRSAV DECDLRACE NEX2CMPA#21 BNEHIT1 LDX#DWNCDM JSRPRINT LDAATEMP JSROUTCD LDX#DLRBKJ JSRPRINT INCDLRTOT JMPSTART1 HIT1LDX#HITMES JSRPRINT JSRCIN CMPA#$31 BEQHIT2 JMPDLRNXT HIT2JSRDEAL JSRSCALE JSRPLRCRD JSROUTCD LDAAPLRSAV CMPA#21 BHIBUST1 BRAHIT1 BUST1LDAAPLRACE BEQBUST1A DECPLRACE LDAAPLRSAV SUBA#10 STAAPLRSAV BRAHIT1 BUST1ALDX#DWNCDM JSRPRINT LDAATEMP JSROUTCD LDX#BUST JSRPRINT BRADLRWIN DLRNXTLDX#DWNCDM JSRPRINT LDAATEMP JSROUTCD LDAA#$A JSRCOUT LDAA#$D JSRCOUT DLRNX2LDAADLRSAV CMPA#16 BHISTOP LDX#SPC18 JSRPRINT JSRDEAL JSRSCALE JSRDLRCRD JSROUTCD BRADLRNX2 SCALETAB ANDB#$F INCB CMPB#1 BEQACE CMPB#10 BHITENS RTS ACELDAB#11 RTS TENSLDAB#10 RTS STOPCMPA#21 BHIBUST2 CMPAPLRSAV BHIDLRWIN BEQPUSH PLRWLDX#PLRWIN JSRPRINT INCPLRTOT BRAOUT5 DLRWINLDX#DLRWMS JSRPRINT INCDLRTOT OUT5JMPSTART1 BUST2LDAADLRACE BEQBUST2A DECDLRACE LDAADLRSAV SUBA#10 STAADLRSAV BRADLRNX2 BUST2ALDX#BUST JSRPRINT BRAPLRW PUSHLDX#PUSHM JSRPRINT BRAOUT5 JMPSTART1 OUTCDPSHA ANDA#$F TAB ABA ABA ABA ABA CLRB LDX#CARD STXSAVEX ADDASAVEX+1 ADCBSAVEX STAASAVEX+1 STABSAVEX LDXSAVEX LDAB#5 BSRPRINK LDAA#'/ JSRCOUT PULA ANDA#$30 LSRA LDX#SUIT CLRB STXSAVEX ADDASAVEX+1 ADCBSAVEX STAASAVEX+1 STABSAVEX LDXSAVEX LDAB#8 JSRPRINK RTS PRINKLDAAX JSRCOUT INX DECB BNEPRINK RTS DEALLDXDKPNTR CPX#DECK+52 BNEDECKOK LDX#SHUF2 JSRPRINT INS INS JMPLOOPC DECKOKLDXDKPNTR LDAAX INCDKPNTR+1 RTS PLRCRDCMPB#11 BNEPLRCR1 INCPLRACE PLRCR1ADDBPLRSAV STABPLRSAV RTS DLRCRDCMPB#11 BNEDLRCR1 INCDLRACE DLRCR1ADDBDLRSAV STABDLRSAV RTS SPACEFCC4, FCB$4 CARDFCC'‚ACE‚TWOTHREEFOURFIVE‚SIXSEVEN' FCC'EIGHTNINE‚TENJACKQUEENKING' SUITFCC'SPADES‚HEARTS‚CLUBSƒDIAMONDS' HITMESFCB$A,$D FCB$3F,$1A,$4 BUSTFCB$A,$D,$7 FCC'BUST' FCB,$4 SPC18FCB$A,$D FCC'DEALERDRAWSA„' FCB$4 PLRWINFCB$A,$D,$7 FCC'YOUWIN' FCB$A,$D,$4 DLRWMSFCB$A,$D,$7 FCC'DEALER WINS' FCB$A,$D,$4 PLRBKJFCB$A,$D FCC'BLACKJACK„YOUƒWIN!!' FCB$4 DLRBKJFCB$A,$D FCC'BLACKJACK„I„WIN!!!' FCB$4 PUSHMFCB$A,$D,$7 FCC'PUSH' FCB$4 DWNCDMFCB$A,$D FCC'MYDOWNCARDWAS‚' FCB$4 CINEQU* LDAA$FCF4 ASRA BCCCIN LDAA$FCF5 ANDA#$7F RTS *THISSUB-ROUTINEGENERATESA52CARDDECK SHUFLE‚LDX#SHUF2 JSRPRINT JSRINIT LOOP4JSRRANDOM JSRCHECK JSRLOAD BCCLOOP4 RTS *THISISA32BITRANDOM(PSEUDO)NUMBERGENERATOR *4.29X10^9STATES RANDOM‚LDAARANDNO+3 ORAARANDNO+2 ORAARANDNO+1 ORAARANDNO BNESKIPIFZEROENTERALL1'S COMRANDNO+3 SKIPLDAARANDNO+3 LSRA LSRA LSRA EORARANDNO+3 ASRA ASRA RORRANDNO RORRANDNO+1 RORRANDNO+2 RORRANDNO+3 RTS *MODULO52MASK CHECK‚LDAARANDNO EORARANDNO+1 EORARANDNO+2 EORARANDNO+3 TAB ANDA#$F CMPA#12 BLEOK SUBA#13 OKANDB#$30 ABA RTS *SUBROUTINETOLOADDECKFROMRANDOM#GEN. LOAD‚LDX#DECK LOOP2LDABX BMIENT CBA BEQOUTNG INX CPX#DECK+52 BEQOUTOK BRALOOP2 ENTSTAAX OUTNGCPX#DECK+51 BEQOUTOK CLC RTS OUTOKSEC RTS SHUFFCB$06,06,$0C,,,,,,$A,$D FCC'THISISMOTOROLABLACKJACK......' FCC'.........TRYYOURLUCK.....!' FCB$D,$A FCB6,7 FCC'DEALERMUSTHITON16ORLESSAND' FCC'STANDON17.' FCB$D,$A,,,,, FCC'ACESCOUNT1OR11,FACECARDS' FCC'COUNTTEN.' FCB$D,$A,,,,, FCC'BLACKJACKWITHACEANDAFACECARD' FCC'ORTEN' FCB$D,$A,,,,, FCC'TIESCOUNTASAPUSHNOWINNER.' FCB$D,$A,,,,, FCC'DURINGPLAYTYPE1FORAHIT,0TO' FCC'STANDPAT' FCB$D,$A,,,,, SHUF2FCB$D,$A,6,2,, FCC'SHUFFLENOWINPROGRESS.............' FCC'TYPEANYKEYTOHALTANDDEAL' FCB6,1 FCB$D,$A,,,,, FCB$4 PRINTEQU* LDAAX CMPA#$4 BNENOTEND RTS NOTENDJSRCOUT INX BRAPRINT INITEQU*INITIALIZEDECKFORLOAD *ROUTINE,ALLCARDSEQUALFF LDX#DECK LDAA#$FF LOOP7STAAX INX CPX#DECK+52 BNELOOP7 RTS OVRLYFCB$0C,,, FCB$D,$A,,,,, FCC4, FCC'PLAYER' FCC13, FCC'DEALER' FCB$D,$A,,, FCC6, PLRSCRRMB2 FCC17, DLRSCRRMB2 FCB$D,$A,$A,$4 END MON ÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅš€  NAM BINBCD OPT MEM OPT S SPC 1 ********** * THIS ROUTINE CONVERTS A 16-BIT UNSIGNED BINARY * NUMBER TO A PACKED 5-DIGIT (3 BYTE) BCD * EQUIVALENT. REV. 1.0 10/18/75 * AUTHOR: DON L. JACKSON, MOTOROLA SPD M/D BB102 ********** SPC 1 ORG $0 BIN1 RMB 1 *MS BYTE OF BINARY NUMBER BIN0 RMB 1 *LS BYTE OF BINARY NUMBER DEC2 RMB 1 *MS 1 DIGIT OF BCD RESULT DEC1 RMB 1 * 2 DIGITS OF BCD RESULT DEC0 RMB 1 *LS 2 DIGITS OF BCD RESULT SPC 1 CONB7 FCB $28,1,,$64,,,$32,,,$16,,0 CONB15 FCB $68,$27,3,$84,$63,1,$92,$81,0 FCB ,$56,2,0 ORG $500 BINBCD CLR A *CLEAR THE STA A DEC1 * RESULT STA A DEC2 * AREA SPC 1 LDA B BIN0 AND B #$F *SAVE 4 LSB ABA *ADD TO ACC A DAA *DECIMAL ADJUST STA A DEC0 *STORE IN ANSWER LSD SPC 1 LDX #CONB7-3 LDA B BIN0 *LOAD LOWEST 8 BITS AND B #$F0 *SAVE 4 MSB OF LOWEST BYTE BSR BI TSR LDX #CONB15-3 LDA B BIN1 *LOAD HIGHEST 8 BITS BITSR INX *SET X TO CONSTANT INX INX ASL B *SHIFT BIT TO CARRY BCC NEXTB *BRANCH IF BIT IS ZERO BSR ADDSR *ADD CONSTANT IF NOT ZERO NEXTB TST B BNE BITSR *DO NEXT BIT IF ANY REMAIN RTS SPC 1 ADDSR LDA A DEC0 *ADD CONSTANT TO RESULT ADD A 0,X * SUBROUTINE. DAA STA A DEC0 LDA A DEC1 ADC A 1,X DAA STA A DEC1 LDA A DEC2 ADC A 2,X DAA STA A DEC2 RTS MON |@½€ÂNAMMATHPAK * * *‡VERSION1.0 * * *‡LASTACCESSDATE:‚27OCTOBER1975 * * *‡WRITTENBY:‚RAYMONDH.NAUGLE *”MOTOROLA,INC.,SPD *”2626S.HARDY *”TEMPE,ARIZONA *”(602)244-4182 *”DI-TEL222-4182 * * *‡THISISAGROUPOF8MULTIPLE-PRECISION *‡BCDARITHMETICSUBROUTINES: * *‡1.ƒINTEGERADDITION * *‡2.ƒINTEGERSUBTRACTION * *‡3.ƒINTEGERMULTIPLICATION * *‡4.ƒINTEGERDIVISION * *‡5.ƒFLOATINGPOINTADDITION * *‡6.ƒFLOATINGPOINTSUBTRACTION * *‡7.ƒFLOATINGPOINTMULTIPLICATION * *‡8.ƒFLOATINGPOINTDIVISION * *‡INCLUDEDISASUBROUTINETOMOVETHE *‡NUMBERSTOBEOPERATEDONINTOANDOUTOF *‡THERAMLOCATIONSUSEDASSCRATCHPAD. * *‡ALSOFORFLOATINGPOINTNUMBERSA *‡SUBROUTINEISINCLUDEDTODELETETHE *‡LEADINGZEROSANDADJUSTTHEEXPONENT *‡ACCORDINGLY. PAGE *‡NUMBERDEFINITION: * *‡-INTEGER * *ŽDDDDD. * *‡WHEREDCONTAINSTWODECIMALDIGITS(BCD). *‡THENUMBEROFD'SINANUMBERISDEPENDENT *‡ONTHENUMBERASSIGNEDTONDANDNDD *‡DURINGASSEMBLY.‚THEDECIMALPOINTIS *‡ASSUMEDTOBEAFTERTHELASTD,RIGHT *‡HANDJUSTIFICATION. * *‡-FLOATINGPOINT * *ŽAB.DDDDD * *‡WHEREABCONTAINSTHEEXPONENTANDSIGNS *‡OFTHEEXPONENTANDNUMBER.‚THEDECIMAL *‡POINTISASSUMEDTOPRECEEDTHENUMBER. *‡EACHDCONTAINSTWODECIMALDIGITS(BCD). *‡AGAINTHENUMBEROFD'SISDEPENDENTON *‡THEVALUEASSIGNEDTONDANDNDDDURING *‡THEASSEMBLYOFTHESUBROUTINES. * *ŽA=76543210ƒ(BITNUMBERS) * *‡BIT7ISTHESIGNBITOFTHENUMBER. *0=+,1=-. *‡BIT6ISTHESIGNBITOFTHEEXPONENT. *0=+,1=-. *‡BIT5ISTHEERROR/ZEROBIT.‚INTHESE *SUBROUTINESTHISBITISUSEDTO *INDICATEIFTHENUMBERISEQUALTO *ZEROBUTINFURTHERSUBROUTINESIT *COULDBEUSEDTOINDICATEERROR, *SUCHASADIVIDEBYZEROOPERATION. *‡BIT4ISTHEOVERFLOWOFTHEEXPONENT. *IFTHEEXPONENTSHOULDOVERFLOWTHIS *BITWILLBESET,CLEAROTHERWISE. *‡BITS3,2,1,0CONTAINTHEUPPERDIGITOF *THETHREEDECIMALDIGITEXPONENT. * *ŽB * *‡BCONTAINSTHELOWERTWODECIMALDIGITSOF *‡THEEXPONENT. PAGE *‡BCDARITHMETICOPERATIONS * *‡INPUTS: * *‡-INTEGER * *‡THETWONUMBERSTOBEOPERATEDONARE *‡TOBEPLACEDINTHEAANDCREGISTERS. * *‡-FLOATINGPOINT * *‡THETWONUMBERSTOBEOPERATEDONARE *‡TOBEPLACEDINTHEAANDCREGISTERS. *‡THEEXPONENTOCCUPIESTHEFIRSTTWOBYTES *‡OFTHEREGISTER.‚THENUMBEROCCUPIESTHE *‡REMAINDEROFTHEREGISTERANDTHEFIRST *‡TWOBYTESOFTHEFOLLOWINGREGISTER. * *‡OUTPUTS: * *‡-INTEGER * *‡THEANSWERISLOCATEDINTHEEREGISTER. *‡THEAREGISTERALSORETURNSWITHITS *‡ORIGINALVALUE.‚THISFEATUREMAYBEUSED *‡FORMAKINGLOOKUPTABLES. * *‡-FLOATINGPOINT * *‡THEANSWERISLOCATEDINTHEDREGISTER. *‡THEEXPONENT ISINTHEFIRSTTWOBYTES *‡FOLLOWEDBYTHENUMBERINTHEREMAINDER *‡OFTHEREGISTERANDTHEFIRSTTWOBYTES *‡OFTHEEREGISTER.‚THENUMBERENTEREDIN *‡THEAREGISTERALSOISRETURNEDWITHTHE *‡ORIGINALVALUE,USEFULINMAKINGLOOKUP *‡TABLES. PAGE OPTO ORG$0 *ƒBYCHANGINGTHEFOLLOWINGTWONUMBERS *ƒTHEPRECISIONOFTHESUBROUTINESMAY *ƒBEALTERED.‚THENUMBERENTEREDSHOULD *ƒBEANEVENNUMBER. NDEQU10NUMBEROFDIGITS NDDEQU$10NUMBEROFDIGITS *ƒTHEASSEMBLERCALCULATESTHEREQUIREDNUMBER *ƒOFBYTESFORTHENUMBEROFDIGITSENTERED NBEQUND/2THISISTHENUMBEROFBYTES *ƒTHEFOLLOWINGDEFINESTHERAMLOCATIONS *ƒNEEDEDTOOPERATETHESUBROUTINES. *ƒTHEORDERSHOULDNOTBECHANGED. EXP2RMB2STORAGEFORFLOATINGEXP.#2 EXP1RMB2STORAGEFORFLOATINGEXP.#1 AREGRMBNBENTERFIRSTNUMBERHERE BREGRMBNBSCRATCH CREGRMBNBENTERSECONDNUMBERHERE DREGRMBNBFLOATINGPOINTANSWER EREGRMBNBINTERGERANSWER RMB2BUFFERFORFLOATINGPOINT ADRSAVRMB2ADDRESSPOINTER EXPSAVRMB2EXPONENTSCRATCH COUNTRRMB1COUNTER ADRTORMB2MOVEADDRESSTO ADRFMRMB2MOVEADDRESSFROM ORG$1000 PAGE *„THISSUBROUTINEMOVESANUMBERFROMMEMORYTO *‚THEAORCREGISTER.‚ALSOTHISWILLMOVETHE *‚DOREREGISTERTOSOMELOCATIONINMEMORY. * *„THISSUBROUTINEISENTEREDBYLOADINGTHE *‚INDEXREGISTERWITHTHEBEGININGMEMORYLOCATION *‚ANDGOINGTOTHEAPPROPRIATEENTRYPOINT. * *„THEENTRYPOINTLABELSUSEDHEREARE *„ASFOLLOWS: * *„-THEFIRSTLETTERINDICATESTHETYPEOF *†NUMBERBEINGMOVED- *ˆIFORINTEGER *ˆFFORFLOATINGPOINT * *„-THESECONDLETTERINDICATESDIRECTIONOF *†MOVEMENT- *ˆTISFORMOVINGANUMBERTO *ŠTHEREGISTERS *ˆFISFORMOVINGANUMBERFROM *ŠTHEREGISTERS * *„-THEFOLLOWINGFOURLETTERSINDICATETHE *†REGISTERINVOLVEDINTHEMOVE. ITAREGLDAB#NBNUMBEROFBYTESTOMOVE BRA*+4 FTAREGLDAB#NB+2NUMBEROFBYTESTOMOVE STXADRFMSAVEADDRESSFROM LDX#AREG STXADRTOSAVEADDRESSTO BRAMOVERGOTOMOVER ITCREGLDAB#NBNUMBEROFBYTESTOMOVE BRA*+4 FTCREGLDAB#NB+2NUMBEROFBYTESTOMOVE STXADRFMSAVEADDRESSFROM LDX#CREG STXADRTOSAVEADDRESSTO BRAMOVERGOTOMOVER IFEREGLDAB#NBNUMBEROFBYTESTOMOVE STXADRTOSAVEADDRESSTO LDX#EREG STXADRFMSAVEADDRESSFROM BRAMOVERGOTOMOVER FFDREGLDAB#NB+2NUMBEROFBYTESTOMOVE STXADRTOSAVEADDRESSTO LDX#DREG STXADRFMSAVEADDRESSFROM MOVERLDXADRFMMOVEDATAFROMLOCATION LDAA0,XPOINTEDATBYADRFM INXTOLOCATIONPOINTEDAT STXADRFMBYADRTO LDXADRTO* STAA0,X* INX* STXADRTO* DECB* BNEMOVERMOVERFINISHED? RTSRETURN.MOVEFINISHED!!! *ƒTHISSUBROUTINEADDSTWOUNSIGNED *ƒINTEGERNUMBERS *…1STNUMBERINTHEAREGISTER *…2NDNUMBERINTHECREGISTER *ƒTHEANSWERISINTHEEREGISTER. *ƒIFANYOVERFLOWOCCUREDWHILEADDINGTHENUMBERS *ƒITWILLBEPLACEDINLOCATIONEREG-1 ADDLDX#BREG LDAB#NB CLC ADD10DEXADDITIONLOOP LDAA0,X* ADCA2*NB,X* DAA* STAA4*NB,X* DECB* BNEADD10* STABEREG-1 BCCADD20ADDITIONOVERFLOW? INCEREG-1YES,ADDTONUMBERSTRING ADD20LDX#EREG-1 ADD30DEXCLEARDREGISTER STAB0,X* CPX#DREG* BNEADD30* RTSRETURN.ADDITIONFINISHED!!! *ƒTHISSUBROUTINESUBTRACTSTWOUNSIGNED *ƒINTEGERNUMBERS *…1STNUMBERINAREGISTER *…2NDNUMBERINCREGI STER *ƒTHEANSWERISINTHEEREGISTERINMAGNITUDE *ƒFORM.IFTHENUMBERINTHECREGISTERIS *ƒLARGERTHANTHENUMBERINTHEAREGISTER *ƒAFLAGWILLBESETINTHEMSBOF *ƒLOCATIONDREGINDICATINGANEGATIVEANSWER. SUBLDX#CREG LDAB#NB SUB10DEXSETUPCREGFORSUBTRACT LDAA#$999'SCOMPLIMENTFORM SUBANB,X* STAANB,X* DECB* BNESUB10* LDAB#NB SEC SUB20DEXADD10'SCOMPLIMENT LDAA0,XOFCREGTOAREG ADCA2*NB,X* DAA* STAA4*NB,X* DECB* BNESUB20* BCSSUB40WASALARGERTHANC? LDX#EREG+NBNO,CWASLARGERTHANA LDAB#NB SUB30DEXFIND9'SCOMPLIMENT LDAA#$99OFANSWER SUBA0,X* STAA0,X* DECB* BNESUB30* LDAB#NB SEC SUB35DEXADD1TO9'SCOMPLIMENT LDAA#00TOFORM10'SCOMPLIMENT ADCANB,XANSWERINMAGNITUDEFORM DAA* STAANB,X* DECB* BNESUB35* LDAA#$80SETSIGNFLAG STAA0,X* CLRA LDAB#NB-1 BRASUB50 SUB40LDX#DREGYES,AWASLARGERTHANC LDAB#NB-1 CLRA STAA0,X SUB50INXCLEARDREGISTER STAA0,X* DECB* BNESUB50* RTSRETURN.SUBTRACTFINISHED!!! *ƒTHISSUBROUTINEMULTIPLIESTWOUNSIGNED *ƒINTEGERNUMBERS *…1STNUMBERINAREGISTER *…2NDNUMBERINCREGISTER *ƒTHEANSWERISINTHEEREGISTER. *ƒIFANYOVERFLOWOCCURSWHENMULTIPLYING *ƒITWILLBELOCATEDINTHEDREGISTER. MULLDX#EREGCLEARANSWERLOCATION--- LDAB#2*NBDREGISTERANDEREGISTER CLRA* MUL05DEX* STAANB,X* DECB* BNEMUL05CLEARFINISHED? LDAB#NBYES,CLEARBREGISTER MUL10DEX* STAA0,X* DECB* BNEMUL10CLEARFINISHED? MUL15DEXYES,MULTIPLICATIONLOOP CPX#AREG-1* BNEMUL20LOOPFINISHED? RTSRETURN.MULTIPLYFINISHED!!! MUL20STXADRSAVCHECKRIGHTDIGIT LDAB0,X* ANDB#$0F* BEQMUL30RIGHTDIGITCLEAR? MUL25BSRMUL45NO,ADDB,CREGTOD,EREG DECB BNEMUL25ISADDITIONFINISHED? MUL30BSRMUL55YES,MOVEB,CREG4BITSLEFT LDAB0,XCHECKLEFTDIGIT ANDB#$F0* BEQMUL40LEFTDIGITCLEAR? LSRBNO,SHIFTCOUNTER4BITS LSRB* LSRB* LSRB* MUL35BSRMUL45ADDB,CREGTOD,EREG DECB BNEMUL35ISADDITIONFINISHED? MUL40BSRMUL55YES,SHIFTB,CREG4BITSLEFT BRAMUL15GOTOTOPOFSUBROUTINE MUL45CLCADDITIONSUBROUTINE: MUL50LDAA2*NB,XADDB,CREGTOD,EREG ADCA4*NB,X* DAA* STAA4*NB,X* DEX* CPX#AREG-NB-1 BNEMUL50ADDITIONFINISHED? LDXADRSAVYES RTSRETURN.ADDFINISHED MUL55LDAA#$044BITSHIFTSUBROUTINE: MUL60LDAB#2*NBSHIFTB,CREGONEBIT LDX#DREGTOTHELEFT CLC* MUL65DEX* ROL0,X* DECB* BNEMUL65BITSHIFTINGFINISHED? DECAYES BNEMUL604BITSHIFTINGFINISHED? LDXADRSAVYES RTSRETURN.‚SHIFTFINISHED *‚THISSUBROUTINEADDSTWOSIGNEDFLOATING *‚POINTNUMBERS *„1STNUMBERINTHEAREGISTER *„2NDNUMBERINTHECREGISTER *‚(THEEXPONENTISPLACEDINTHEFIRSTTWO *‚BYTESOFEACHREGISTERFOLLOWEDBYTHE *‚DEFINEDNUMBEROFBYTESOFTHENUMBER) *‚THEANSWERISINTHEDREGISTER. *‚IFTHETWONUMBERSHAVETHESAMESIGNTHEY *‚WILLBEADDED.‚IFTHETWONUMBERSHAVEOPPOSITE *‚SIGNSTHENUMBERSWILLBESUBRACTED. FADDLDX#AREG JSRPAKPACKAREGISTER LDX#CREG JSRPAKPACKCREGISTER LDX#AREG-2POSITIONAREGISTER LDAB#NB+2* FADD01LDAA2,X* STAA0,X* INX* DECB* BNEFADD01* LDXCREGSAVEEXPONENTOFCREGISTER STXEXP2* LDX#CREGPOSITIONCRE GISTER LDAB#NB* FADD02LDAA2,X* STAA0,X* INX* DECB* BNEFADD02* LDX#AREGSAVEAREGISTER LDAB#NB* FADD03LDAA0,X* STAANB,X* INX* DECB* BNEFADD03* LDAAEXP1 ANDA#$20 BEQFADD04ISAREG=0 JMPFADD20YES,MOVECREGTOANS.LOC. FADD04LDAAEXP2NO ANDA#$20 BEQFADD06ISCREG=0 JMPFADD16YES,MOVEAREGTOANS.LOC. FADD06LDAAEXP1NO,FINDSIGNSOFEXPONENTS ANDA#$40DETERMINETHEOFFSET STAACOUNTROFTHENUMBERS LDABEXP2* ANDB#$40* CBA* BEQFADD08EXPONENTSIGNS? LDAAEXP2--DIFFERENT--- ANDA#$1FADDEXPONENTS STAAEXPSAVTODETERMINEOFFSET LDABEXP1* ANDB#$1F* LDAAEXP2+1* ADDAEXP1+1* DAA* STAAEXPSAV+1* TBA* ADCAEXPSAV* DAA* STAAEXPSAV* BRAFADD12EXPSAV&+1CONTAINOFFSET FADD08CLRCOUNTR--SAMEEXPONENTSIGNS--- LDAAEXP1FINDDIFFERENCEOFEXPS. ANDA#$1FSUBRTACTEXPOFCREG STAAEXPSAVFROMEXPOFAREG LDAA#$99(ADD10'SCOMPLIMENTOFCREG) LDABEXP2* ANDB#$1F* SBA* TAB* LDAA#$99* SUBAEXP2+1* SEC* ADCAEXP1+1* DAA* STAAEXPSAV+1* TBA* ADCAEXPSAV* DAA* STAAEXPSAV* BCSFADD10WASAREGEXPONENTLARGER? LDAA#$99NO,SUBTRACTEXPOFAREG INCCOUNTRFROMEXPOFCREG TAB(10'SCOMPLIMENTOFEXP) SUBBEXPSAV* SUBAEXPSAV+1* ADDA#$01* DAA* STAAEXPSAV+1* TBA* ADCA#$00* DAA* STAAEXPSAVOFFSETINEXPSAV&+1 FADD10LDAAEXP1CHANGELARGERNUMBER ANDA#$40POINTERISNEGATIVE BEQFADD12EXPONENTS DECCOUNTR FADD12LDAAEXPSAVCHECKFORADJUSTMENTRANGE BNEFADD14* LDAAEXPSAV+1 CMPA#NDDARENUMBERSIN BLTFADD26RANGEOFADJUSTMENT? FADD14LDAACOUNTRNO,MOVENUMBERTOANS.LOC. BNEFADD20WHICHNUMBERISLARGER? FADD16LDX#AREG-2AREGISTER LDAB#NB+2 FADD18LDAA0,XMOVETOANSWERLOCATION STAA3*NB+2,X* INX* DECB* BNEFADD18* BRAFADD24GOTOEND FADD20LDXEXP2CREGISTER STXDREG LDX#CREG LDAB#NB FADD22LDAA0,XMOVETOANSWERLOCATION STAANB+2,X* INX* DECB* BNEFADD22* FADD24JMPFADD72GOTOEND FADD26LDX#AREGADJUSTSMALLERNUMBER LDAACOUNTR BNEFADD30AREGISTERLARGER? LDX#CREGYES,ADJUSTCREGISTER FADD30STXADRSAVADJUSTINGINDEXSTORED LDAAEXPSAV+1 LSRA BCCFADD36ODDNUMBEROFSHIFTS? LDAA#$04YES FADD32LDAB#NBSHIFTNUMBERRIGHT4BITS LDXADRSAV* CLC* FADD34ROR0,X* INX* DECB* BNEFADD34* DECA* BNEFADD32* DECEXPSAV+1 FADD36LDAAEXPSAV+1 BEQFADD42ADJUSTINGFINISHED? FADD38LDXADRSAVNO,EVENNUMBEROFDIGIT LDAB#NB-1SHIFTING(BYTESHIFTING) FADD40DEXSHIFTRIGHTONEBYTE LDAANB-1,X* STAANB,X* DECB* BNEFADD40* CLRNB-1,X LDAA#$98SUBTRACT2FROMSHIFTCOUNT ADDAEXPSAV+1* DAA* STAAEXPSAV+1* BNEFADD38FINISHEDSHIFTING? FADD42LDX#EXP2YES LDAACOUNTRUSEEXPONENTOFLARGER BNEFADD44NUMBERANDSIGNOFNUMBER LDX#EXP1INATHEREGISTER. FADD44LDAA0,XIFTHENUMBERSHAVETHESAME ANDA#$5FSIGNTHETWONUMBERSWILLBE LDABEXP1ADDED.‚IFTHETWONUMBERS ANDB#$80HAVEOPPOSITESIGNSTHE ABANUMBERSWILLBESUBTRACTED. STAAEXPSAVIFCREGISLARGERAFLAG LDAA1,XATLOCATIONDREG STAAEXPSAV+1WILLBESET(SUBTRACTION) LDAAEXP1IFTHESIGNSOFTHE EORAEXP2NUMBERSARESAME--ADD ANDA#$80DIFFERENT--SUBTR ACT BEQFADD54GOTOSUBROUTINES JSRSUB***SUBTRACTION*** LDAADREGGETEXPONENT EORAEXPSAVINCLUDESIGNCHANGE(IFANY) STAADREG* LDAAEXPSAV+1* STAADREG+1* LDX#DREG LDAB#NB FADD50LDAANB,XMOVETOANSWERLOCATION STAA2,X* INX* DECB* BNEFADD50* LDX#DREG JSRPAKPACKANSWER. JMPFADD72GOTOEND FADD54JSRADD***ADDITION*** LDAAEREG-1 BNEFADD60DIDOPERATIONOVERFLOW? LDXEXPSAVNOOVERFLOW STXDREG LDX#DREG LDAB#NB BRAFADD50 FADD60LDAAEXPSAVYES,OVERFLOW ANDA#$40 BNEFADD64SIGNOFEXPONENT? LDAAEXPSAVPOSITIVE TAB ANDA#$1F STAADREG ANDB#$C0 STABEXPSAV LDAAEXPSAV+1 ADDA#$02ADD2TOTHEEXPONENT DAA STAADREG+1 LDAA#$00 ADCADREG DAA TAB ANDA#$1FKEEPOVERFLOWOFEXPONENT ANDB#$20IFPRESENT LSRB ABA LDABEXPSAV BRAFADD68 FADD64LDAAEXPSAVNEGATIVEEXPONENT TAB ANDA#$1F STAADREG ANDB#$C0 LDAAEXPSAV+1 ADDA#$98SUBTRACT2FROMEXP. DAA STAADREG+1 LDAA#$99 ADCADREG DAA BCSFADD68WASEXP=-1OR-0? LDAA#$02YESSUBTRACTORIGINAL SUBAEXPSAV+1NUMBERFROM2TOOBTAIN STAADREG+1CORRECTNUMBER CLRA ANDB#$80CLEARSIGNBIT FADD68ABA STAADREG LDX#DREG LDAB#NB FADD70LDAANB-1,XMOVETOANSWERLOCATION STAA2,X* INX* DECB* BNEFADD70* FADD72LDXEXP1RESTOREAREGISTER STXAREG* LDX#AREG* LDAB#NB* FADD74LDAANB,X* STAA2,X* INX* DECB* BNEFADD74* LDX#DREG JSRPAKPACKANSWER. RTSRETURN. *‚THISSUBROUTINESUBTRACTSTWOSIGNEDFLOATING *‚POINTNUMBERS. *„1STNUMBERINTHEAREGISTER *„2NDNUMBERINTHECREGISTER *‚(THEEXPONENTISPLACEDINTHEFIRSTTWO *‚BYTESOFEACHREGISTERFOLLOWEDBYTHE *‚DEFINEDNUMBEROFBYTESOFTHENUMBER) *‚THEANSWERISINTHEDREGISTER. *‚IFTHETWONUMBERSHAVETHESAMESIGNTHEY *‚WILLBESUBTRACTED.‚IFTHETWONUMBERSHAVE *‚OPPOSITESIGNSTHENUMBERSWILLBEADDED. FSUBLDAA#$80CHANGESIGNOFCREG EORACREGANDJUMPTOADDITION STAACREGSUBROUTINE JMPFADD *ƒTHISSUBROUTINEMULTIPLIESTWOSIGNED *ƒFLOATINGPOINTNUMBERS. *…1STNUMBERINTHEAREGISTER *…2NDNUMBERINTHECREGISTER *ƒ(THEEXPONENTISPLACEDINTHEFIRSTTWO *ƒBYTESOFEACHREGISTERFOLLOWEDBYTHE *ƒDEFINEDNUMBEROFBYTESOFTHENUMBER) *ƒTHEANSWERISINTHEDREGISTER. FMULLDX#AREG JSRPAKPACKAREGISTER LDX#CREG JSRPAKPACKCREGISTER LDXCREG STXEXP2SAVEEXPOFCREGISTER LDX#AREG-2MOVEAREGISTERINTOPOSITION LDAB#NB+2* FMUL10LDAA2,X* STAA0,X* INX* DECB* BNEFMUL10* LDAB#NBMOVECREGISTERINTOPOSITION FMUL20LDAANB+2,X* STAANB,X* INX* DECB* BNEFMUL20* JSRMUL***MULTIPLICATION*** LDX#DREGMOVEANSWER(BOTHBYTES) LDAB#2*NBRIGHTTWOBYTES FMUL30DEX* LDAA2*NB,X* STAA2*NB+2,X* DECB* BNEFMUL30* LDAB#NB+2RESTOREAREGISTER FMUL40DEX* LDAA0,X* STAA2,X* DECB* BNEFMUL40* LDAAEXP1 EORAEXP2 ANDA#$40 BEQFMUL50SIGNSOFEXPONENTS? LDABEXP2OPPOSITESIGNS-- ANDB#$1FSUBTRACTCREGEXP LDAA#$99FROMAREGEXP SBA* STAADREG* LDAA#$99* SUBAEXP2+1* SEC* ADCAEXP1+1* DAA* STAADREG+1* LDAAEXP1* ANDA#$1F* ADCADREG* DAA* BCSFMUL60WASAREGEXPLARGER? LDAA#$99NO,CREGEXPLARGER TABFIND10'SCOMPLIMENTOFEXP SUBB DREG* SUBADREG+1* ADDA#$01* DAA* STAADREG+1* TBA* ADCA#$00* DAA* LDABEXP2* ANDB#$40SIGNOFEXP2(CREG) ABA* BRAFMUL70BRANCHTOFINISH FMUL50LDABEXP2SAMESIGNS ANDB#$1FADDEXPONENTS STAAEXPSAV* LDAAEXP2+1* CLC* ADCAEXP1+1* DAA* STAADREG+1* LDAAEXP1* ANDA#$1F* ADCAEXPSAV* DAA* FMUL60LDABEXP1SIGNOFEXP1(AREG) ANDB#$40* ABA* FMUL70LDABEXP1GETSIGNOFANSWER EORBEXP2MULTIPLYSIGNS ANDB#$80SIGNOFANSWERINSERTED ABA STAADREG LDX#DREG JSRPAKPACKANSWER RTSRETURN.MULTIPLICATIONFINISHED!!! *ƒTHISSUBROUTINEPACKSTHEFLOATINGPOINTING *ƒNUMBERTOTHELEFTDELETINGTHELEADINGZEROS *ƒANDADJUSTINGTHEEXPONENTACCORDINGLY. *ƒENTRYINTOTHISSUBROUTINEREQUIRESONLYTHE *ƒINDEXREGISTERBEINITIALIZED.‚THEINDEX *ƒREGISTERISTOCONTAINTHEADDRESSOFTHEFIRST *ƒBYTEOFTHEFLOATINGPOINTNUMBER(THEA *ƒPORTIONOFTHEEXPONENTASDESCRIBEDIN *ƒNUMBERDEFINITION) PAKSTXADRSAVSAVEADDRESSPOINTER LDAA0,XSAVEM.S.DIGITAND ANDA#$1FOVERFLOWOFEXP. STAAEXPSAV* CLRCOUNTR PAK05LDXADRSAV LDAA2,X BNEPAK15DOUBLEDIGITZERO? LDAB#NB-1-YES PAK10LDAA3,XMOVENUMBERLEFTTWODIGITS STAA2,X*(1BYTE) INX* DECB* BNEPAK10* CLR2,XCLEARLASTBYTE LDAACOUNTRADDTWOTOCOUNTER ADDA#$02* DAA* STAACOUNTR* CMPA#NDD BLTPAK05NUMBEROFDIGITSEXCEEDED? LDAA#$20-YES,SETERRORFLAG LDXADRSAV* STAA0,X* CLR1,X RTSRETURN.NUMBER=ZERO!!! PAK15LDABCOUNTR BEQPAK30ADJUSTEXPONENT? LDAA0,X-YES ANDA#$40 BEQPAK20SIGNOFEXPONENT-- LDAA1,XNEGATIVE ABA‚ADDCOUNTERTOEXPONENT DAA* STAA1,X* LDAA#0* ADCAEXPSAV* DAA* TAB* ANDA#$1F* ANDB#$20OVERFLOWMARKER LSRB* ABA* STAAEXPSAV BRAPAK30 PAK20LDAA#$99POSITIVEEXPONENT SBASUBTRACTCOUNTERFROMEXP. SEC* ADCA1,X* DAA* TAB* LDAA#$99* ADCAEXPSAV* DAA* BCCPAK25NUMBERERROR? STAAEXPSAVNO,SAVEEXPONENT STAB1,X* LDABCOUNTR* BRAPAK30* PAK25LDAA#$99SUBTRACTEXPONENTFROM SUBAEXPSAVCOUNTER TAB* LDAA#$99* SUBA1,X* SEC* ADCACOUNTR* DAA* STAA1,X* TBA* ADCA#$00* DAA* STAAEXPSAVSAVE LDAA0,XCHANGEEXPONENT'SSIGN ORAA#$40* STAA0,X* PAK30LDAA2,X ANDA#$F0 BNEPAK45FIRSTDIGITZERO? LDAA#$01-YES STAACOUNTR LDAA#$04ROTATENUMBER1DIGIT PAK35LDAB#NB* LDXADRSAV* CLC* PAK40DEX* ROLNB+2,X* DECB BNEPAK40* DECA* BNEPAK35* LDXADRSAV JMPPAK15ADJUSTEXPONENT PAK45LDAA0,XGETSIGNOFNUMBERANDEXPONENT ANDA#$C0* ORAAEXPSAVADDEXPONENT STAA0,XSAVEEXPONENT RTSRETURN.‚NUMBERPACKED!!! *‚THISSUBROUTINEDIVIDESTWOUNSIGNED *‚INTEGERNUMBERS *„1STNUMBERINTHECREGISTER *„2NDNUMBERINTHEAREGISTER *‚THEANSWER(C/A)ISINTHEEREGISTER. *‚THENUMBERINTHEAREGISTER(DIVISOR) *‚ISUNCHANGED. DIVLDX#EREG LDAB#2*NB CLRA DIV04DEXCLEARD,EREGISTERS STAANB,X* DECB* BNEDIV04* LDAB#NB DIV08DEXCLEARBREGISTER STAA0,X* DECB* BNEDIV08* CLRAREG-1 LDAA#$04 DIV12LDAB#NB+1SHIFTDIVISORLEFT LDX#BREG4BITS(1DIGIT) CLC* DIV16DEX* ROL0,X* DECB* BNEDIV16* DECA* BNEDIV12* LDAA#4*NBINITIALIZESHIFT STAACOUNTRCOUNTER DIV 20BSRDIV6010'SCOMPOFA DIV24BSRDIV72ADDA&BREGISTERS BCCDIV28TOOMUCH? INCEREG+NB-1NO.ADD1TONUMBER BRADIV24 DIV28BSRDIV6010'SCOMPOFA DECCOUNTR BEQDIV40OPERATIONFINISHED? BSRDIV72NO,ADDA&BREGISTERS LDAA#$04SHIFTB,C,D,E DIV32LDAB#4*NBREGISTERSLEFT LDX#EREG4BITS(1DIGIT) CLC* DIV36DEX* ROLNB,X* DECB* BNEDIV36* DECA* BNEDIV32* BRADIV20 DIV40LDAA#$04RESTOREAREGISTER DIV44LDAB#NB+1* LDX#AREG-1* DIV48ROR0,X* INX* DECB* BNEDIV48* DECA* BNEDIV44* DIV52LDAB#NBSETUPANSWER STABCOUNTRFORINTEGEROUTPUT LDX#EREGSHIFTD&EREGISTERS DIV56DEX* LDAA0,X* LDABNB,X* STAANB,X* STAB0,X* DECCOUNTR* BNEDIV56* RTSRETURN.DIVISIONFINISHED!!! DIV60LDAB#NB+110'SCOMPLIMENTOF LDX#AREG-1AREGISTER DIV64LDAA#$999'SCOMP SUBA0,X* STAA0,X* INX* DECB* BNEDIV64* SEC10'SCOMPLIMENT(9'S+1) LDAB#NB+1* DIV68DEX* LDAA#$00* ADCA0,X* DAA* STAA0,X* DECB* BNEDIV68* RTSRETURN.COMPLIMENTFINISHED. DIV72LDAB#NB+1ADDA&BREGISTERS LDX#BREG* CLC* DIV76DEX* LDAA0,X* ADCANB+1,X* DAA* STAANB+1,X* DECB* BNEDIV76* RTSRETURN.‚ADDFINISHED. *‚THISSUBROUTINEDIVIDESTWOSIGNED *‚FLOATINGPOINTNUMBERS. *„1STNUMBERISINTHECREGISTER *„2NDNUMBERISINTHEAREGISTER *‚THEANSWER(C/A)ISINTHEDREGISTER.THE *‚NUMBERINTHEAREGISTERISRETAINED. FDIVLDX#AREG JSRPAKPACKAREGISTER LDAAAREG ANDA#$20CHECKAREGISTER BEQFDIV04AREGISTEREQUALTOZERO? SWIYES,ERROR:DIVISIONBYZERO!!! FDIV04LDX#CREG JSRPAKPACKCREGISTER LDXAREG STXEXPSAVSAVEAEXPONENT LDXCREG STXEXP2SAVECEXPONENT LDX#AREGMOVEAREGISTER LDAB#NBINTOPOSITION FDIV08LDAA2,X* STAA0,X* INX* DECB* BNEFDIV08* LDAB#NBMOVECREGISTER FDIV12LDAANB+2,XINTOPOSITION STAANB,X* INX* DECB* BNEFDIV12* JSRDIVDIVIDENUMBERS!!! LDX#BREGRESTOREAREGISTER LDAB#NB* FDIV16DEX* LDAA0,X* STAA2,X* DECB* BNEFDIV16* LDXEXPSAVANDTHEAEXPONENT STXAREG* STXEXP1 LDX#EREG-1MOVEANSWERINTOPOSITION LDAB#NB* FDIV20LDAA0,X* STAA2,X* DEX* DECB* BNEFDIV20* LDAA2*NB,X BEQFDIV32ANSWERLESSTHANONE? STAA2,XNO,ADD2TOCEXPONENT LDX#EREGMOVEANSWER1BYTERIGHT LDAB#NB* FDIV22LDAA0,X* STAA1,X* DEX* DECB* BNEFDIV22* LDAAEXP2 ANDA#$40 BNEFDIV24SIGNOFCEXPONENT? LDAAEXP2POSITIVE TAB* ANDA#$1F(AHASNUMBER) STAADREG* ANDB#$C0(BHASSIGNS) STABEXP2* LDAAEXP2+1 ADDA#$02ADD2TOTHECEXPONENT DAA STAADREG+1 LDAA#$00 ADCADREG DAA TAB ANDA#$1FKEEPOVERFLOWOFEXPONENT ANDB#$20IFPRESENT LSRB* ABA* LDABEXP2 BRAFDIV28 FDIV24LDAAEXP2NEGATIVEEXPONENT TAB(SUBTRACT2FROMEXPONTENT) ANDA#$1F STAADREG ANDB#$C0 LDAAEXP2+1 ADDA#$98ADD-2TOEXPONENT DAA STAADREG+1 LDAA#$99 ADCADREG DAA BCSFDIV28WASEXP=-1OR-0? LDAA#$02YES,SUBTRACTORIGINAL SUBAEXP2+1NUMBERFROM2TOOBTAIN STAADREG+1CORRECTNUMBER CLRA ANDB#$80CLEARSIGNBIT FDIV28ABA STAAEXP2 LDAADREG+1 STAAEXP2+1 FDIV32LDAAEXP1 EORA#$40 STAAEXP1CHANGESIGNOFAEXPONENT EORAEXP2 ANDA#$40 BEQ FDIV36SIGNSOFEXPONENTS? LDABEXP2OPPOSITESIGNS ANDB#$1FSUBTRACTCREGEXPFROM LDAA#$99AREGEXP SBA* STAADREG* LDAA#$99* SUBAEXP2+1* SEC* ADCAEXP1+1* DAA* STAADREG+1* LDAAEXP1* ANDA#$1F* ADCADREG* DAA* BCSFDIV40WASAREGEXPLARGER? LDAA#$99NO,CREGEXPWASLARGER TABFIND10'SCOMPLEMENTOFEXP SUBBDREG SUBADREG+1 ADDA#$01 DAA STAADREG+1 TBA ADCA#$00 DAA LDABEXP2 ANDB#$40SIGNOFCREGISTER ABA BRAFDIV44 FDIV36LDABEXP2SAMESIGNS ANDB#$1FADDEXPONENTS STAAEXPSAV* LDAAEXP2+1* CLC* ADCAEXP1+1* DAA* STAADREG+1* LDAAEXP1* ANDA#$1F* ADCAEXPSAV* DAA* TABRETAINOVERFLOW,IFANY ANDA#$1F* ANDB#$20* LSRB* ABA* FDIV40LDABEXP1SIGNOFAREGISTER ANDB#$40* ABA* FDIV44LDABEXP1GETSIGNOFANSWER EORBEXP2(MULTIPLYSIGNS) ANDB#$80SIGNOFANSWERINSERTED ABA STAADREG LDX#DREG JSRPAKPACKANSWER RTSRETURN.DIVISIONFINISHED!!! PAGE *ƒTHISISADEMONSTRATIONPROGRAMTO *ƒILLISTRATETHEUSEOFTHESUBROUTINES. ORG$2000 STARTLDS#$27FF LDX#NUM1 JSRITAREGLOADAREGISTERWITHNUM1 LDX#NUM2 JSRITCREGLOADCREGISTERWITHNUM2 JSRADDINTEGERADDTHETWONUMBERS LDX#NUM3 JSRIFEREGSAVEANSWERATNUM3 LDX#NUM2 JSRITCREGRELOADCREGISTER JSRSUBINTEGERSUBTRACT LDX#NUM4 JSRIFEREGSAVEANSWERINNUM4 LDX#NUM2 JSRITCREGRELOADCREGISTER JSRMULINTEGERMULTIPLY LDX#NUM5 JSRIFEREGSAVEANSWERINNUM5 LDX#NUM6 JSRFTAREGLOADAREGISTERFROMNUM6 LDX#NUM7 JSRFTCREGLOADCREGISTER JSRFADDADDFLOATINGPOINT LDX#NUM8 JSRFFDREGSAVEANSWER LDX#NUM7 JSRFTCREGRELOADCREGISTER JSRFSUBSUBTRACTFLOATINGPOINT LDX#NUM9 JSRFFDREGSAVEANSWER LDX#NUM7 JSRFTCREGRELOADCREGISTER JSRFMULMULTIPLYFLOATINGPOINT LDX#NUM10 JSRFFDREG SWIRETURNTOCONSOLE PAGE NUM1FCB$00,$00,$00,$25,$032,503 NUM2FCB$00,$00,$00,$04,$50450 NUM3RMBNBANSWER=0000002953. NUM4RMBNBANSWER=0000002053. NUM5RMBNBANSWER=0001126350. NUM6FCB%00000000,$03,$43,$00,$00,$00,$00430. NUM7FCB%01000000,$01,$25,$00,$00,$00,$00.025 NUM8RMBNB+2ANSWER=00034300250000 NUM9RMBNB+2ANSWER=00034299750000 NUM10RMBNB+2ANSWER=00021075000000 END MON ΀ NAMKEYSUBKEYBOARDINTERRUPTSUB *REV1.0BYMOTOROLAMICROSYSTEMSMARCH1977 OPTS OPTO ORG$6 KBUFF‚RMB1 ORG$1200 DLSUB‚EQU$1300 ERSUB‚EQU$1400 JSRDLSUBGOTODLSUB FDB12WAIT12MSECFORBOUNCEDELAY FCB1LOOKFORAONE FCB0THROUGHTHISMASK FDB0INLOCATIONZERO LDAA$4000READASIDEPIA STAAKBUFFSTOREINKEYBOARDBUFFER JSRDLSUBGOTODLSUB FDB60000WAITFORAMINUTEFCB0LOOKFORAZERO FCB$1FONALLKEYS FDB$4000ATASIDEPIA TSTASEEIFTIMEOUTOCCURED BNE*+5BRANCHIFNOT JSRERSUBGOTOERRORSUBIFTIMEOUT RTIRETURNTOMAINPROGRAM END NAMDLSUB ORG0000 OPT0 OPTS RMB1 RMB1 RMB1 RMB1 RMB1 ORG$1300 PULA STAATEMP PULB STAATEMP+1 ADDB#6 ADCA#0 PSHB PSHA LDXTEMP LDA0,X LDAB1,X COMA NEGB BNE*+3 INCA STAACONT-1 STABCONT LDAA#$E9 STAAD0ONT LDAB2,X LDAA3,X LDX4,  X BRADLTST PSHA LDAA#$E7 STAAD0ONT PULA BITA0,X BEQDGLIT BITA0,X BEQDLTST BRA*+8 BITA0,X BNEDLTST BRAZTST BITB#1 BEQDLINC BRAYDOUT BITB#1 BEQYDOUT INCD0ONT BNEDLTST INCCONT BNEDLSTRT INCCONT-1 BNEDLSTRT CLRA RTS LDAA#1 RTS ÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÑ€NAMOFFSETLOAD *REV4/2/76LAG *MIKADAPTION *POSITIVEOFFSET(MSBHEX)INA014(OR00) *NEGATIVEOFFSET(MSBHEX)INA015(OR00) * *MIKBUGEQUATES * BYTEEQU$E055 BYTECTEQU$A00B CKSMEQU$A00A CONTRLEQU$E0E3 INEEEEQU$E1AC NEGOFFEQU$A015 OUTEEEEQU$E101 POSOFFEQU$A014 PIASBEQU$8007PIA ORG$0200PROGSTART LOADOLDAA#$3C STAAPIASBREADERON LDAA#@21 JSROUTEEEOUTPUTCHAR LOADAJSRINEEEINPUTCHAR CMPA#'S BNELOADA1STCHARNOT"S" JSRINEEE CMPA#'9 BEQLOADD2NDCHAR"9" CMPA#'1 BNELOADA2NDCHARNOT"1" CLRCKSMZEROCHECKSUM JSRBYTEREAD2FRAMES SUBA#2 STAABYTECTSETBYTECOUNT JSRBYTEREAD2FRAMES ADDAPOSOFFADD+OFFSET SUBANEGOFFSUB-OFFSET STAAXHI LOADBJSRBYTEREAD2FRAMES STAAXLOW LDXXHI(X)OFFSET"NEW"ADDRESS JSRBYTEREAD2FRAMES DECBYTECTDECREMENTBYTECOUNT BEQLOADCZEROBYTECOUNT STAAXSTOREINPUTDATA INX BRALOADB LOADCINCCKSMINCREMENTCHECKSUM BEQLOADACHECKSUMOK LDAA#'?CHECKSUMERROR JSROUTEEEPRINTQUESTIONMARK LOADDJMPCONTRLMIKBUGCONTROL END ÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÔ€ STX $0 DES TSX CLR $0,X COM $0,X BA1 LDX $04 STX $06 JSR $FFAF STAA $02 LDAA $07 PSHA LDAA $02  TSTA BNE BA1 TSTB BNE BA1 LDX $00 BA5 PULA TSTA BPL BA3 RTS BA3 CMPA #09 BLE BA4 ADDA #07 BA4 ADDA #30 STAA $00,X INX BRA BA5 LDX #0010 SETUP BASE (=16) STX $04 LDAB #00 SETUP CONSTANT TO CONVERT LDAA #38 LDX #0900 POINT TO OUTPUT AREA JSR $0800 BINARY TO ASCII BRA * END END EÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÖ€*‚SOURCECODENOTSUPPLIEDTOMOTOROLAMICROSYSTEMSBY *‚JOHNM.BILLINGS. ! ÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅ×€OUT2HSEQU$E0CAADDRESSOFMIKBUGROUTINE PDATA1EQU$E07E CRLFEQU$0D0A ELEQU$15ERASETOENDOFLINE SBYTEEQU$04 AHOLDFCB0 BHOLDRMB1 TESTOBEQU* LDAAAHOLDGETINITIALASCIICODE ALOOP1EQU*ASCIITOBAUDOTLOOP STAAAHOLDSAVEASCIICHARACTER LDX#AIDPOINTTOASCIIID JSRPDATA1PRINT LDX#AHOLDPOINTTOASCIICODE JSROUT2HSOUTPUTTOTVTINHEX LDAAAHOLD JSRABAUDBRTOCONVERSIONROUTINE STAABHOLDSTOREBAUDOTCODE ORAB#$30CHANGESHIFTCODETOCHARACTER STABSHCODESTOREINFIELD LDX#BIDPOINTTOBAUDOTID JSRPDATA1PRINT LDX#BHOLDPOINTTOBAUDOTCHAR JSROUT2HSPRINT LDX#SHIFTPOINTTOSHIFTFIELD JSRPDATA1PRINT LDAAAHOLDRELOADASCIICHARACTER INCAGETNEXTASCIICODE BNEALOOP1LOOPUNTILCYCLECOMPLETE SWIRETURNTOMIKBUG AID‚FDBCRLF FCBEL FCC2,AS FCC2,CI FCC2,I FCC2,-- FCC2,-- FCBSBYTE BIDFCC2,BA FCC2,UD FCC2,OT FCC2,-- FCC2,-- FCBSBYTE SHIFTFCC2,SH FCC2,IF FCC2,T- FCC2,-- SHCODERMB1 CRLFELEQU* PAGE FDBCRLF FCBEL FCBSBYTE ABAUDEQU* ANDA#$7FSTRIPOFFPARITYBIT LDX#CODTBLPOINTTOTABLE CLRBZEROOUTB SUBA#7SUBTRACTNULLS BMISTILBDINVALIDCODE BEQNEEDLPBYPASSLOOP CMPA#LAST1ISTHISCODEINFIRSTTABLE? BLTGINDEXBRIFYES LDX#CTABLEPOINTTO2NDTABLE SUBA#25SUBTRACTNULLS BMISTILBDINVALIDCODE BEQNEEDLPBYPASSLOOP CMPA#LAST2ISTHISCODEIN2NDTABLE? BGENOTFNDBRIFNO GINDEXEQU* DEXPOINT INCATO ALOOPEQU*THE INXPROPER DECABYTE BNEALOOPINTABLE NEEDLPEQU* LDAA0,XLOADINTOA ASLATRANSFER ROLBSHIFT ROLACODE ROLBFROM LSRAATO LSRAB RTSRETURN NOTFNDEQU* SUBA#32SUBTRACTHEX'20' CMPA#LAST2CHECKFORLOWERCASECHARS BGESTILBDBRIFNOTFOUND CMPA#$20CHECKFORLOWERCASEALPHACHAR BGTGINDEXBRIFFOUND STILBDEQU* LDAB#2SETSHIFTCODETO2(DONT-CARE) CLRAZEROOUTA RTSRETURN PAGE CODTBLEQU* FCB$45BEL(ASCIIH'07) FCB$80NULL(ASCIIH'08) FCB$80NULL(ASCIIH'09) FCB$82LF(ASCIIH'0A) FCB$80NULL(ASCIIH'0B) FCB$80NULL(ASCIIH'0C) FCB$88CR(ASCIIH'0D) LAST1EQU*-CODTBL CTABLEEQU* FCB$84SPACE(ASCIIH'20) FCB$4D!(ASCIIH'21) FCB$51"(ASCIIH'22) FCB$54#(ASCIIH'23) FCB$49$(ASCIIH'24) FCB$80NULL(ASCIIH'25) FCB$5A&(ASCIIH'26) FCB$4B'(ASCIIH'27) FCB$4F((ASCIIH'28) FCB$52)(ASCIIH'29) FCB$80NULL(ASCIIH'2A) FCB$80NULL(ASCIIH'2B) FCB$4C'(ASCIIH'2C) FCB$43-(ASCIIH'2D) FCB$5C.(ASCIIH'3E) FCB$5D/(ASCIIH'2F) FCB$560(ASCIIH'30) FCB$571(ASCIIH'31) FCB$532(ASCIIH'32) FCB$413(ASCIIH'33) FCB$4A4(ASCIIH'34) FCB$505(ASCIIH'35) FCB$556(ASCIIH'36) FCB$477(ASCIIH'37) FCB$468(ASCIIH'38) FCB$589(ASCIIH'39) FCB$4E:(ASCIIH'3A) FCB$5E;(ASCIIH'3B) FCB$80NUL(ASCIIH'3C) FCB$80NUL(ASCIIH'3D) FCB$80NUL(ASCIIH'3E) FCB$59?(ASCIIH'3F) FCB$80NUL" (ASCIIH'40) FCB$03A(ASCIIH'41) FCB$19B(ASCIIH'42) FCB$0EC(ASCIIH'43) FCB$09D(ASCIIH'44) FCB$01E(ASCIIH'45) FCB$0DF(ASCIIH'46) FCB$1AG(ASCIIH'47) PAGE FCB$14H(ASCIIH'48) FCB$06I(ASCIIH'49) FCB$0BJ(ASCIIH'4A) FCB$0FK(ASCIIH'4B) FCB$12L(ASCIIH'4C) FCB$1CM(ASCIIH'4D) FCB$0CN(ASCIIH'4E) FCB$18O(ASCIIH'4F) FCB$16P(ASCIIH'50) FCB$17Q(ASCIIH'51) FCB$0AR(ASCIIH'52) FCB$05S(ASCIIH'53) FCB$10T(ASCIIH'54) FCB$07U(ASCIIH'55) FCB$1EV(ASCIIH'56) FCB$13W(ASCIIH'57) FCB$1DX(ASCIIH'58) FCB$15Y(ASCIIH'59) FCB$11Z(ASCIIH'5A) LAST2EQU*-CTABLE END ÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅ߀NAMTXTSTG OPTNOP,S * *ROUTINETXTSTGINPUTSASTRINGOFCHARACTERS *FROMANASCIIKEYBOARDUNTILTHEEOT(CTRL/D) *DELIMITERISENCOUNTERED.‚THEROUTINETHEN *REPEATEDLY'ECHOES')OUTPUTS)THEAS-BUILT *TEXTSTRING.‚MIKBUGROMROUTINESINEEEAND *PDATA1AREUSED. *THEPCRATA048/A049MUSTBESETTOTHE *STARTADDRESSOFTHEPROGRAM. * PDATA1EQU$E07E INEEEEQU$E1AC * STARTEQU* LDX#TXTPTR.POINTERTOTEXTSTRING *BUILDAREAINIXR LOOP1EQU* JSRINEEE.GOTOMIKBUGCHAR.INPUTR STAA0,X.STOREINPUTCHAR.INTEXT INX.INCREMENTIXR(POINTER) CMPA#4.WASITANEOT?(CTRL/D) BNELOOP1.NO,GOBACKFORANOTHER *INPUTCHARACTER *OTHERWISE,FALLTHRU *TOPRINTCONTINUOUSLY. * LOOP2EQU* LDX#TXTPTR.POINTERTOTEXTSTRING JSRPDATA1.GOTOMIKBUGPRINTROUTINE BRALOOP2.REPEATPRINT * TXTPTREQU*.STARTOFTEXTSTRING *BUILDAREA * END  ဠNAMDUMPHC *REV.1.0BYMOTOROLAMICROSYSTEMSAPRIL1977 ORG$200 OPTO DUMPABSRDUMPA1TTYCONTROL BRADUMPAR1 DUMPBBRADUMPB1CALLEDASSUBROUTINE PDATA1EQU$E07EPRINTSTRING OUTEEEEQU$E1D1PRINTCHAR OUT2HSEQU$E0CAPRINT2HEX OUT4HSEQU$E0CBPRINT4HEX OUTSPEQU$E0CCPRINTASPACE BADDREQU$E047GET4HEXINTOA00C INEEEEQU$E1ACGETACHAR MCLEQU$E19DC/RL/FETC DUMPA1LDAA#$54TPRINT JSROUTEEETITLE- ‚LDAA#$49I ‚JSROUTEEE ‚LDAA#$54T ‚JSROUTEEE ‚LDAA#$4CL ‚JSROUTEEE ‚LDAA#$45E ‚JSROUTEEE ‚LDAA#$2D ‚JSROUTEEE INLOOPJSRINEEEGETCHAR ‚CMPA#$04ISITEOT? ‚BNEINLOOPNO,LOOP ‚LDX#MCLC/RLFETC ‚JSRPDATA1 ‚JSRBADDRGETSTART ‚LDX$A00C ‚STX$A002STORE ‚JSROUTSPSPACE ‚JSRBADDRGETEND ‚LDX$A00C ‚STX$A004STORE DUMPB1LDX#MCLCR/LF ‚JSRPDATA1 ‚LDAA$1016BYTES/LINE ‚STAA$A018 ‚LDX$A002START ‚STX$A014TOLINESTARTS ‚STX$A016CHARSTART NEWLINLDX#MCLC/RLFETC ‚JSRPDATA1 ‚LDX#$A014POINTTOADDRESS ‚JSROUT4HSPRINT ‚JSROUTSPSPACE ‚LDAB$A018BYTES/LN LOOP1LDX$A014 ‚JSROUT2HSPRINTHEX ‚DEXDECX ‚CPX$A004 ‚BEQSPAC3 ‚INXX=X+1 ‚STX$A014STOR ‚DECBB=# B+1 ‚BNELOOP1LINENOTDONE PRTCHRJSROUTSPSPACE ‚LDAB$A018BYTES/LN LOOP2LDX$A016 ‚LDAA0,XCHARTOA ‚NOP ‚BSROUTCH ‚LDX$A016RELOAD ‚CPX$A004 ‚BEQENDGOTOEND ‚INXNEXTCHAR ‚STX$A016STOREIT ‚DECBISLINEDONE ‚BNELOOP2NO ‚BRANEWLINYES ENDLDX#MCLSKIP ‚JSRPDATA1VP ‚LDX#MCL3 ‚JSRPDATA1LINES ‚LDX#MCL ‚JSRPDATA1 ‚RTSRETURN OUTCHCMPA#$20<30 ‚BCCOKCYES LDPRDLDAA#$2E.LOAD OKCCMPA#$60<60 ‚BCCLDPRDNG. ‚JSROUTEEEPUTCHAR ‚RTSRETURN SPAC3DECBDECB1EXTRA ‚BLEPRTCHRX=XEND LOOP3JSROUTSPSPACE3 ‚JSROUTSP ‚JSROUTSP ‚DECBB=B-1 ‚BGTLOOP3KEEPLOOPING ‚BRAPRTCHR ‚END ÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅå€*REV.1.0BYMOTOROLAMICROSYSTEMSAPRIL1977 OPTNOG HMSGFCC/HANGMAN!/ GCNTFCB0GUESSCOUNTER REG1FCB0REGISTER1 REG2FCB0REGISTER2 DCNTFCB0DASHCOUNTER WPTRFDB0WORDPOINTER WBUFRMB8WORDBUFFER GBUFFCB$2D FCB$2D,$2D,$2D,$2D,$2D,$2D,$2DGUESSBUFFER STOREXRMB2STOREX LETTERRMB1LETTER SW1FDB0SW1 SW2FDB0SW2 SW3FDB0SW3 PRINTEQU$E07E GETEQU$E1AC STOPEQU$E0E3 SWITCHLDABSW1SWITCHTWOBLOCKS STABSW1+4 LDABSW1+1 STABSW1+5 LDABSW1+2 STABSW1 LDABSW1+3 STABSW1+1 LDABSW1+4 STABSW1+2 LDABSW1+5 STABSW1+3 ‚RTS DOMSGFCC/DOYOUWANTANEWWORD?/ TMSGFCC/THANKSFORPLAYING!/ GMSGFCC/GUESSALETTER:/ IMSGFCC/INCORRECTGUESS!/ GOMSGFCC/GOOD.YOUNOWHAVE:/ CMSGFCC/CONGRATULATIONS!/ STARTLDAA#1 STAAGCNTGUESSESCOUNTER LDXWTAB STXWPTR NUGAMELDX#DOMSGDO"MSG JSRPRINT REPLYJSRGETREPLY CMPA#'N BEQTHANKS CMPA#'Y BNEREPLY JSRCHANGE BRAGUESS THANKSLDX#TMSG"THANKS"MSG JSRPRINT JMPSTOP GUESSLDX#GMSG"GUESS"MSG JSRPRINT JSRGETREPLY STAALETTER CLRB LDX#WBUFWORDBUFFER CMPARECMPA0,X BNEMATCH INCB8,X STAA8,XGUESSBUFFER MATCHINX LDAA0,XNEXTCHAR CMPA#0 BEQFINAL CPX#GBUFLASTWORDBFR BEQFINAL LDAALETTER BRACMPARE FINALCMPB#0 BEQWRONG LDX#GOMSG"GOOD"MSG JSRPRINT CLRA STAADCNTZERODASHCOUNTER LDX#WBUFWORDBFR READGBLDAA8,XGUESSBFR CMPA#$2D BNEPRNTGB LDABDASHESCOUNTER INCB STABDASHESCTR PRNTGBLDAA8,XGUESSBFR JSRPRINT INX LDAA0,XWORDBFR CMPA#0 BEQENDTWO CPX#GBUFFORLASTWRDBFR BEQENDTWO BRAREADGB ENDTWOLDX#DCNTDASHCTR LDAB0,X BNEGUESS LDX#CMSG"CONGRAT"MSG JSRPRINT WAITLDX#$FFFF WAIT1DEX BNEWAIT1 JMPNUGAME WRONGLDX#IMSG"INCORRECT"MSG JSRPRINT LDABGCNT INCB STABGCNT STABREG1REGISTER1 LDAA#8 SBA STAAREG2REGISTER2 PRNTHMLDX#HMSGHANGMAN STXSTOREX PRTAGNLDXSTOREX LDAA0,X JSRPRINT INX STXSTOREX LDABREG1 DECB STABREG1 BNEPRTAGN LDABREG2REGISTER2 BNEDASHES JMPNUGAME DASHESLDAA#$2D JSRPRINT LDABREG2 DECB STABREG2 BNEDASHES JMPGUESS CHANGELDX#GBUFGUESSBUFR LDAB#08 LDAA#$2D DASHFLSTAA0,X INX DECB BNEDASHFL ZEROESLDX#WBUFWORDBFR LDAB#8 CLRA ZERO2STAA0,X INX DECB BNEZERO2 LDX#WPTRWORDPOINTER LDAA0,XWORDTABLE BNEAHEAD LDX#WTABWORDTBLFIRSTADDR STXWPTRWORDPOINTER AHEADSTXSW1 LDX#WBUFWORDBFR STX$ SW2 LOADLDXSW1 LOAD2LDAA0,X BEQNXWORD JSRSWITCH LDXSW1 STAA0,X INX STXSW1 JSRSWITCH LDXSW1 INX STXSW1 BRALOAD2 NXWORDINX STXWPTRWORDPTR RANDOMLDXGCNTGUESSCOUNTER LDAA0,X DECA STAA0,X BNEZEROES RTSGUESS WTABEQU* FCC/HELLO/ FCB0 FCC/FORENOON/ FCB0 FCC/ROULETTE/ FCB0 FCC/MISHMASH/ FCB0 FCC/BUREAU/ FCB0 FCC/ARRIVE/ FCB0 FCC/FRINGE/ FCB0 FCC/PONTOON/ FCB0 FCC/BANANA/ FCB0 FCC/KUMQUAT/ FCB0 FCC/DROWSE/ FCB0 FCC/SUBSONIC/ FCB0 FCC/ZOOM/ FCB0 FCC/TATTOO/ FCB0 FCC/QUIZ/ FCB0 FCC/GUERILLA/ FCB0 FCC/CASCADE/ FCB0 FCC/PROTOCOL/ FCB0 FCC/EXCEPT/ FCB0 FCC/IMPART/ FCB0 FCC/LEGION/ FCB0 FCC/NIBBLE/ FCB0 FCC/UNIVERSE/ FCB0 FCC/XENON/ FCB0 FCC/JELLY/ FCB0 FCC/VARIABLE/ FCB0 FCC/OPPOSITE/ FCB0 FCC/ENRAGE/ FCB0 FCC/WEB/ FCB0 FCC/REGRET/ FCB0 FCC/HOLLOW/ FCB0 FCC/MIDST/ FCB0 FCC/COYOTE/ FCB0 FCC/LYRE/ FCB0 FCC/AARDVARK/ FCB0 FCC/SAND/ FCB0 FCC/PAUSE/ FCB0 FCC/ICEBERG/ FCB0 FCC/FASTEN/ FCB0 FCC/BEETLE/ FCB0 FCC/KETTLE/ FCB0 FCC/DAUGHTER/ FCB0 FCC/ZIP/ FCB0 FCC/TREMOR/ FCB0 FCC/GERANIUM/ FCB0 FCC/CLUB/ FCB0 FCC/ECONOMY/ FCB0 FCC/ALPHA/ FCB0 FCC/JACKAL/ FCB0 FCC/NYMPH/ FCB0 FCC/OCEAN/ FCB0 FCC/QUACK/ FCB0 FCC/PYGMY/ FCB0 FCC/DYE/ FCB0 FCC/LAVENDER/ FCB0 FCC/SLY/ FCB0ENDOFTABLE END $í€%NAMFDISK *REV.1.0BYMOTOROLAMICROSYSTEMSAPRIL1977 SPC1 *BY:HERVETIREFORD *…MOTOROLASEMICONDUCTORPRODUCTS SPC3 *------------------------------------------ *THEFOLLOWINGPROGRAMALLOWSTHEUSERTO *DUMPTHECONTENTSOFMEMORYONTOAN *EDOS2STRUCTUREDDISKETTEINTHEMOTOROLA *DEFINEDFORMAT(S0,S1,S9). SPC1 *ITISASSUMEDTHAT: * *ƒ1-THEUSER'SCODEISOUTSIDETHEFIRST *†KOFMEMORYSINCETHEDUMPPROGRAM *†RESIDESINTHISAREA.SHOULDTHEUSER'S *†PROGRAMBEINTHISAREA,ONECANRECO- *†VERFROMTHISSITUATIONBYMERELYSHIF- *†TINGTHEUSER'SCODEUSINGTHESWITCHES *†THATARELOCATEDONTHEEDGEOFTHEME- *†MORYCARDSANDTHENLOADTHEDUMPPGM. * *ƒ2-THEOBJECTCODEISOUTPUTTEDTOTHE *†DISKETTEINTHEDRIVEUNIT0. * *ƒ3-THEDIALOGBETWEENTHEUSERANDTHE *†DUMPPROGRAMISTHESAMEASWHENINI- *†TIATINGTHEEXBUGPUNCHROUTINE.NOTE *†THATTHEHEADERISUSEDASFILENAMEFOR *†THEOBJECTCODETHATISGENERATED. * *ƒ4-PGMSTARTINGADDRESS=100. PAGE OPTO SPC1 *TEMPORARYEDOSSTORAGE SPC1 ISIZEEQU$4 ITRKEQU6 ISCTREQU7 ICNTREQU8 OSIZEEQU$9 OTRKEQU11 OSCTREQU12 OCNTREQU13 TISIZEEQU15 SPC1 *EDOSUTILITYROUTINES SPC1 RIEQU$E809 WRTEQU$E80C SPC1 *FILEDIRECTORYSTORAGEAREA SPC1 ORG$100 JMPSTART SPC1 BUF1RMB128 SPC1 *EXBUGEQUATES BEGENDEQU$F003 BUFEQU$FF8D INCHNPEQU$F015 BEGAEQU$FF0A TWEQU$FF5A ENDAEQU$FF0C MCONTEQU$FF58 TEMPEQU$FF07 CHEXLEQU$F009 CHEXREQU$F00C PDATAEQU$F024 SPC2 XTEMPRMB2 XTEMP3RMB2 STEMPRMB2 SPC1 SPC1 STARTLDS#STACKINITLZSTACKPOINTER LDX#TEXT1 JSRPDATA LDX#24 STXISIZEPREPARETOREA% DFROMDISK CLRITRK LDAA#3 STAAISCTR SPC1 *READFILEDIRCTORYINTOBUF1 SPC1 LOOP3‚CLRICNTR LDAB#128 LDX#BUF1 LOOPSTXXTEMP PSHB JSRRI BCSNTFND LDXXTEMP STAAX INX PULB DECB BNELOOP SPC1 *SEARCHBUF1FORANATTRIBUTEOF$FF SPC1 LDX#BUF1 LOOP2LDAA5,X CMPA#$FF BEQFOUND2 LDAB#11 LOOP1INX DECB BNELOOP1 CPX#BUF1+121 BNELOOP2 BRALOOP3 SPC1 *SENDMESSAGE"NOROOM"",THEN *REENTEREXBUG--------------- SPC1 NTFND‚LDX#MESSAG JSRPDATA JMP$F564 SPC1 *COMPUTEREMAININGSIZE *WHEREOBJECTFILEISTOSTORE------ SPC1 FOUND2STXXTEMP LDAA#$4C LDAB6,X STABOTRK SBA STAAOSIZE LDAA7,X STAAOSCTR LDX#$19 CLRB FND2ADDAOSIZE ADCB#0 DEX BNEFND2 ADDA#$18 ADCB#0 SUBAOSCTR SBCB#0 BNEFND3 TSTA BEQNTFND SPC1 *PREPARESTORAGEOFOBJECTFILEONDISKETTE-- SPC1 FND3STABOSIZE STAAOSIZE+1 STABTISIZE STAATISIZE+1 SPC1 *GENERATEOBJECTFILE-THISROUTINEIS *SIMILARTOTHEEXBUGPUNCH *PROGRAMEXCEPTTHATDATAISSENT *TOTHEDISKETTE----------------------- SPC1 FNCHEJSRBEGEND FNCHLDX#MHDR JSRPDATA LDX#BUF PH31JSRINCHNP CMPA#$20 BLTPH33 CMPA#$61 BLTPH35 PH33LDAA#$20 PH35STAAX INX CPX#BUF+6 BNEPH31 LDAB#$83 LDX#MTAPE3 JSRFDATA1 LDX#BUF PH41JSRFUNT2 CPX#BUF+6 BNEPH41 COMB PSHB TSX BSRFUNT2 PULB LDXBEGA STXTW FUN11LDAAENDA+1 SUBATW+1 LDABENDA SBCBTW BNEFUN22 CMPA#24 BCSFUN23 FUN22LDAA#23 FUN23ADDA#4 STAAMCONT SUBA#3 STAATEMP LDX#MTAPE1 BSRFDATA1 CLRB LDX#MCONT BSRFUNT2 LDX#TW BSRFUNT2 BSRFUNT2 LDXTW FUN32BSRFUNT2 DECTEMP BNEFUN32 STXTW COMB PSHB TSX BSRFUNT2 PULB LDXTW DEX CPXENDA BNEFUN11 LDX#MTAPE2 BSRFDATA1 BRAUPDAT SPC1 FUNT2STXXTEMP3 ADDBX PSHB LDAAX JSRCHEXL JSRWRT LDXXTEMP3 LDAAX JSRCHEXR JSRWRT LDXXTEMP3 INX PULB FDATA9‚RTS SPC1 FDATA1LDAAX CMPA#4 BEQFDATA9 STXXTEMP3 JSRWRT LDXXTEMP3 INX BRAFDATA1 SPC1 *UPDATEFILEDIRECTORYINBUF1. *INCLUDEFILENAME---------- SPC1 FILLCLRA JSRWRT UPDATLDABOCNTR BNEFILL UPDAT2LDABTISIZE LDAATISIZE+1 SUBAOSIZE+1 SBCBOSIZE ADDA#1 ADCB#0 LDXXTEMP STAB8,X STAA9,X CLR5,X STSSTEMP LDS#BUF-1 LDAB#5 LOOP5PULA STAAX INX DECB BNELOOP5 LDSSTEMP LDXISIZE DEX STXOSIZE LDAAOTRK PSHA CLROTRK LDAAOSCTR PSHA LDAAISCTR STAAOSCTR LDXXTEMP LDAB#11 LOOP7INX DECB BNELOOP7 CPX#BUF1+121 BNEUPDAT4 BSRWRTBUF LDX#BUF1 UPDAT4LDAA#$FF STAA5,X PULA STAA7,X PULA STAA6,X BSRWRTBUF JMP$F564 SPC1 *WRITEUPDATEDDIRECTORYTOTHEFILE *DIRECTORYAREAOFTHEDISKETTE---- SPC1 WRTBUF‚LDX#BUF1 LOOP6LDAAX STXXTEMP JSRWRT LDXXTEMP INX CPX#BUF1+128 BNELOOP6 RTS SPC1 OPTNOGENERATE MESSAG‚FCC/NOROOM/ FCB$0D,$0A,$20,$20,4 SPC1 TEXT1‚FCC/MEMORYDUMPONDISKETTE/ FCB$0D,$0A,4 MHDRFCC/HDR=X/ FCB4 MTAPE1FCB$D,$A,0,'S,'1,4 MTAPE2‚FCB$0D,$0A,0 FCC/S9030000FC/ FCB$D,4 MTAPE3FCB$D,$A,$0 FCC/S00B00005820/ FCB4 SPC1 STACKEQU*+30 SPC2 END ÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅ& ÷€ NAM TAPVRF SPC 2 * AUTHOR: BERNARD RIGAUD * MOTOROLA SEMICONDUCTOR PRODUCTS SPC 1 * THIS PROGRAM ALLOWS TO CHECK PAPER TAPE COPIES * OF ANY FORMAT WITH THE MOTOROLA H/S READER. * * AFTER PRINTING THE CHARACTER '= THE PROGRAM * WAITS FOR A COMMAND: * M (MASTER) READS ORIGINAL PAPER TAPE, COMPUTES * AND PRINTS CHECKSUM. * C (COPY) READS COPIES, COMPUTES AND PRINTS * CHECKSUM, COMPARES IT WITH MASTER * CHECKSUM AND PRINTS A MESSAGE. * X (EXBUG) RETURN TO EXBUG. * * REMARK: * TO AVOID ERRONEOUS COMPARISONS, THE ENDS OF * ORIGINAL TAPE AND OF ITS COPY HAVE TO BE CUT * IN THE SAME WAY. SPC 1 * STARTING ADDRESS: $100 SPC 2 OPT O,NOG SPC 1  PCRLF EQU $F021 PDATA1 EQU $F027 OUTCH EQU $F018 INCHNP EQU $F015 EXBUG EQU $F564 GETC EQU $EB02 OUT4HS EQU $F01E  SPC 1 ORG $100 SPC 1 * * GET COMMANDS * BEGIN EQU * LDS #*-1 BEG0 JSR PCRLF LDA A #'= JSR OUTCH PRINT = JSR INCHNP GET COMMAND CMP A #'M M? BEQ MASTER CMP A #'C C? BEQ COPY CMP A #'X X? BNE BEG0 WRONG COMMAND JMP EXBUG * * M COMMAND * MASTER EQU * LDX #0 CLEAR CHECKSUM BSR CLEAR M1 JSR GETC GET CHARACTER FROM TAPE BCS M3 END OF TAPE LDX #3 BSR ADDIT ADD CHARACTER TO CHECKSUM BRA M1 M3 LDX #0 BSR PRTCKS PRINT CHECKSUM BRA BEG0 * * SUBROUTINE TO CLEAR 4 MEMORY LOATIONS * CLEAR EQU * LDA B #4 COUNT 4 LOCATIONS CL0 CLR X CLEAR MEMORY  INX DEC B BNE CL0 RTS * * SUBROUTINE TO UPDATE CHECKSUM * ADDIT EQU * LDA B #4 COUNTER CLC ADD0 ADC A X ADD AND STORE STA A X IN MEMORY LDA A #0 DEX DEC B BNE ADD0 RTS * * C COMMAND * COPY EQU * LDX #4 CLEAR CHECKSUM BSR CLEAR C1 JSR GETC GET CHARACTER FROM TAPE BCS C3 END OF TAPE LDX #7 BSR ADDIT ADD CHAR. TO COPY CHECKSUM BRA C1 C3 LDX #4 JSR PRTCKS PRINT COPY-CHECKSUM SPC 1 COMP EQU * COMPARE CHECKSUMS LDA B #4 COUNTER  LDX #0 COM1 LDA A X CMP A 4,X COMPARE ONE BYTE BNE WRGMES NOT EQUAL INX DEC B BNE COM1 SPC 1 GDMES LDX #MSSOK CHECKSUMS EQUAL BRA MES0 PRINT /O.K./ SPC 1 WRGMES LDX #MSSWRG CHECKSUMS NOT EQUAL MES0 JSR PDATA1 PRINT /WRONG COPY/ JMP BEG0 * * SUBROUTINE TO PRINT CHECKSUM * PRTCKS EQU * LDA A #$20 JSR OUTCH PRINT SPACE JSR OUT4HS PRINT 4 CHARACTERS + SPACE JMP OUT4HS * * MESSAGES * MSSOK FCC /O.K./ FCB 4 SPC 1 MSSWRG FCC /WRONG COPY/ FCB 4 SPC 3 END ÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅý€*THISPROGRAMISAVAILABLEONPAPERTAPEONLY. '  NAM MEMOVE * M.MEITIN * MOTOROLA INC * * THIS PROGRAM REASSEMBLES A BLOCK OF CODE FROM * ONE LOCATION IN MEMORY TO ANOTHER WITHOUT THE * NEED TO REASSEMBLE SOURCE PRO$þ€$ NAM TOWER OPT P,O,NOG * * * PROGRAM TO CALCULATE THE MOVES FOR THE 'TOWERS * OF HANOI ' PROBLEM. THE EXERCISER IS THE * TARGET DEVICE. THE PROGRAM EMPLOYEES RECURSION. * ( A SUBROUTINE CALLS ITSELF). THIS IS ACOMP- * LISHED BY PUTTING AND KEEPING THE VARIABLES * ON THE STACK. GENERALLY THE X-REG POINTS * TO A PLACE ON THE STACK SUCH THAT: * 0,X = PC HIGH * 1,X = PC LOW * 2,X = K * 3,X = J * 4,X = I * 5,X = N (NBR OF DISCS) * * * SOME OF THE COMMENTS RELATE TO THE HIGHER LEVEL * LANGUAGE 'PASCAL'. THE PROGRAM WAS PATTERNED * AFTER A PASCAL PRG. * * BY JOEL BONEY FOR MOTOROLA INC. - MAR 15 1976 * * PDATA EQU $FA33 EXBUG PRINT DATA ROUTINE INCHNP EQU $FAA0 EXBUG INPUT CHAR ROURINE ORG $1000 * MAIN LDS #$FFF SET STACK BSR GETN GO GET NBR OF DISCS * CALL TH(N,I,J,K) PSHA PUT N ON STACK LDAA #1 I=1 PSHA INCA  J=2 PSHA INCA K=3 PSHA BSR TH INITIAL CALL LDX #EOMSG ALL DONE MSG JSR PDATA JMP MAIN * * SUBROUTINE TO SOLVE THE TOWERS * TH TSX  GET CURRENT PTR TO STACK LDAA 5,X GET N * IF N=1 THEN PRINT N GOES FROM I TO J. CMPA #1 BNE ELSE BSR NGOSIJ PRINT MSG BRA OUT SKIP ELSE * ELSE CALL TH(N-1,I,K,J) ELSE DECA  N=N-1 PSHA LDAA 4,X I PSHA LDAA 2,X SWAP K FOR J PSHA  LDAA 3,X SWAP J FOR K PSHA BSR TH RECURSIVE CALL 1 TSX GET NEW PT ON STACK * WRITE N GOES FROM I TO J BSR NGOSIJ * CALL TH(N=1,K,J,I) LDAA 5,X N=N-1 DECA  PSHA LDAA 2,X SWAP K FOR I PSHA LDAA 3,X J PSHA LDAA 4,X  SWAP I FOR K PSHA BSR TH RECURSIVE CALL 2 TSX GET NEW PTR ON STACK * END  OUT INS POP OFF PREVIOUS ARGS INS INS INS INS INS LDX 0,X JMP 0,X DO RTS THIS WAY * * * SUBROUTINE TO GET N AND PRINT HEADER * * GETN LDX #MSG2  PRINT HEADER JSR PDATA JSR INCHNP GET ANS SUBA #$30 MAKE ASCII INTO NBR BLS GETN VALID? CMPA #9 BHI GETN VALID? RTS * * * SUBROUTINE TO PRINT 'N' GOES FROM 'I' TO 'J' * * NGOSIJ LDAB #$30 ASCII NBR BIAS LDAA 5,X GET N ABA MAKE ASCII  STAA LITN LITERAL N LDAA 4,X ABA STAA LITI LITERAL I LDAA 3,X (  ABA STAA LITJ LITERAL J STX TEMP LDX #LITN PRINT OUT MSG JSR PDATA  LDX TEMP RTS TEMP RMB 2 * N GOES FROM I TO J MSG LITN RMB 1 FCC ' GOES FROM ' LITI RMB 1 FCC ' TO ' LITJ RMB 1 FCB $04 * ALL DONE MSG EOMSG FCC 'EVERYONE IS ON TWO. ALL DONE.'  FCB $0A,$04 * HEADER MSG AND GET NBR OF DISCS * MSG2 FCB $0A,$0A,$0A FCC 'THIS PROGRAM SOLVES THE TOWER OF HANOI PROBLEM.' FCC ' THE TOWER OF HANOI PROBLEM' FCB $0D,$0A FCC 'REQUIRES MOVEMENT OF N DISCS FROM ONE PEG TO ANOTHER' FCC ' USING A 3RD PEG. ' FCB $0D,$0A FCC 'DISCS ON THE ORIGIN ARE STORED FROM BOTTOM TO TOP ' FCC 'IN DECREASING SIZE.' FCB $0D,$0A FCC 'THE RULES ARE:' FCB $0A,$0D FCC ' ONLY ONE DISC CAN BE MOVED AT A TIME.' FCB $0A,$0D  FCC ' YOU CAN NOT PUT A BIGGER DISC ON A SMALLER ONE.' FCB $0D,$0A FCC ' THE DISCS ON THE DESTINATION PEG MUST BE IN ' FCC 'DECREASING ORDER ON COMPLETION.' FCB $0D,$0A,$0A FCC 'EXAMPLE: ' FCB $0D,$0A FCC ' ! !  !' FCB $0D,$0A FCC ' ! ! !' FCB $0D,$0A FCC '1 XXX ! !' FCB $0D,$0A FCC '2 XXXXX ! !' FCB $0D,$0A FCC '3 XXXXXXX ! !' FCB $0D,$0A FCC '---------- --------- ---------' FCB $0D,$0A FCC ' 1 2 3' FCB $0D,$0A,$0A FCC 'PROBLEM IS TO MOVE DISCS 1,2,3 FROM PEG 1 TO 2 USING' FCC 'PEG 3 AS INTERMEDIARY.' FCB $0A,$0A,$0D,$0A FCC 'TYPE IN NUMBER OF DISCS TO BE SOLVED:' FCB 4  END MON ÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅ€*‚SOURCECODENOTSUPPLIEDTOMOTOROLAMICROSYSTEMSBY *‚N.J.BURZINSKI. ÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅ €NAMCVTBLS-C4/6/76 *FILE20,C-3CONVERSIONTABLES *TWOPASSASSEMBLY(WDS,171BYTES,MS) ORG$8040CONVERSIONTABLES *ENTERWITHTABLE#INACCAB7,B6 *&XVALUEINCOUNT,COUNT+1 *RETURNWITHYINCOUNT,COUNT+1 *SUBROUTINECALLED+MPY8 ************** *ESTABLISHCONVERSIONTABLES ************** CVTBLSBRACVTBL1DATAGUARD TABLE1FDB000000-ELEMENTSFOR... FDB004031-WATTMETTERCONVERSION FDB010292-(YNVALUES) FDB017903- FDB026364- FDB035575- FDB045796- FDB057527- FDB071238- FDB086969- FDB1039110- TABLE2FDB00-ELEMENTSFOR... FDB01-THERMOCOUPLECONVERSION FDB02-(YNVALUES) FDB0) 3- FDB04- FDB05- FDB06- FDB07- FDB08- FDB09- FDB010- TABLE3FDB00-ELEMENTSFOR... FDB01-DCTORMSCONVERSION FDB02-(YNVALUES) FDB03- FDB04- FDB05- FDB06- FDB07- FDB08- FDB09- FDB010- TABLESFDBTABLE1TABLE1ADDRESS FDBTABLE2 FDBTABLE3 TBLSHBEQUTABLES/256TABLESHIBYTE TBTEMPEQUTBLSHB*256 TBLSLBEQUTABLES-TBTEMPTABLESLOBYTE CVTBL1CLRTEMP1 LDAB#TBLSHBTABLESHIBYTETOTEMP0 STABTEMP0 ASLAMOVETABLE#FROMACCA... ROLTEMP1B7,B6TOTEMP1 ROLTEMP1 ASLTEMP1MULTIPLYBY2 LDXTEMP0XH=TABLESHB,XL=TABLE#*2 *TBLSLB-2,XPOINTSTOTABLEADDRESS... *WHEREXH=TBLSHB,XL=TABLE#*2 LDXTBLSLB-2,XTABLEBASEADD.INXREG STXTEMP0 LDAACOUNTHIBYTE LDABCOUNT+1LOBYTE LSRA RORB LSRA/4GIVESTABLEELEMENT# RORB STABSAVEB((X-XN)/4)=SMALLA/4 ASLA2*ELEMENT# ADDATEMP1ADD2*ELEMENT#TOXL STAATEMP1 LDAATEMP0 ADCA#0ADDCARRYTOXH STAATEMP0 LDXTEMP0POINTSTOTABLEELEMENTYN STXSAVEX LDAA2,XY(N+1)LOBYTE LDAB3,X SUBB1,XY(N+1)-YN SBCA0,XY(N+1)-YN-C=DELTAY LSRA/8TOSCALEDELTAY... RORBTO<8BITSFULLSCALE LSRA RORB LSRA RORB LDAASAVEBRESTORESMALLA/4 JSRMPY8ATIMESB=A,B LSRA/32 RORB LSRA RORB LSRA RORB LSRA RORB LSRA RORB STAATEMP0STOREPRODUCTAS... STABTEMP1SMALLB LDXSAVEXRESTOREYNPOINTER LDAA0,XLOADYN LDAB1,X ADDBTEMP1FORMY=YN+SMALLB ADCATEMP0 STAACOUNT STABCOUNT+1 RTS PAGE *FILE16,C-15,8B*8B=16BMULTIPLY *TWOPASSASSEMBLY(373WDS,27BYTES,MS) *ATIMESB,RESULTINA,B MPY8STABTEMP1MULTIPLICAND STAATEMP0MULTIPLIER LDAA#8 STAATEMP3 CLRA CLRB MPY81ASLBSHIFTRESULTLEFT ROLA ASLTEMP1TESTNEXTMSBOFMPYCAND BCCMPY82 ADDBTEMP0ADDMULTIPLIERTORESULT ADCA#0 MPY82DECTEMP3DECREMENTBITCOUNT BNEMPY81COUNTNOTZERO RTS PAGE *FILE19,C-3TESTCONVERSIONTABLES *ONEPASSASSEMBLY *THISROUTINETESTSTHECONVERSIONTABLES *ROUTINEBYSTACKINGYVALUESCORRESPONDING *TOX=N*256,FORN=1TO40.THEDATASTACK *BEGINSAT128,WITHXH(N=1). ‚ORG$1 *VARIABLESUSED: TEMP0RMB1 TEMP1RMB1 TEMP3RMB1 TEMP4RMB1 COUNTRMB2 SAVEBRMB1 SAVEXRMB2 SAVESPRMB2 SAVSP1RMB2 ORG$8000 *EXECUTEPROGRAMBYENTERINGMAID;SET *BREAKPOINTATBRA*INSTRUCTION,THEN;G. TCVTBLLDS#207SP=127+80=207 STSSAVSP1INITIALIZEDATAPOINTER LDAA#40INITIALIZECOUNTTO10,240 STAATEMP4 LDAA#$7FINITIALIZESUBROUTINESTACK TCTBL1STSSAVESPSAVESUBROUTINESTACK LDSSAVSP1LOADDATAPOINTER LDAATEMP4LOADNEWINPUTCOUNT STAACOUNT CLRCOUNT+1INPUTCOUNTLOWBYTE LDAA#01000000BTABLE#=1INB7,B6 JSRCVTBLSCALLCONVERSIONTABLES LDAACOUNTSTACKRESULT PSHA LDAACOUNT+1 PSHA STSSAVSP1SAVEDATASTACKPOINTER LDSSAVESPRESTORESUBROUTINEPOINTER DECTEMP4SUBTRACT256FROMINPUTCOUNT BNETCTBL1CONVERTANOTHERVALUE BRA*EXORCISERBREAKPOINT ORG$83FE FDB$8000SETRESTARTVECTORFOREXOR. END ÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅ* 1€/00000‚NAMAETX.1 00010*NAM:AETX.1ƒVERSION1ƒ01-17-76ƒCMP:M6800 00020* 00030*PGR:CHRISGRANTƒORG:MARTINMARIETTA,DENVER 00040* 00050*SYS:M68RES 00060* 00070*DES:THISEDITOR/ASSEMBLERINTERNALTRANSFER 00080*†ROUTINEISUSEDWITHTHECO-RESIDENT 00090*†EDITOR/ASSEMBLER.‚ITALLOWSTHEEDIT 00100*†BUFFERTOBEACCESSEDDIRECTLYBYTHE 00110*†ASSEMBLERWITHOUTEXTERNALTAPETRANSFERS. 00120* 00130*†EXBUGUTILIZATION 00140* 00150*REV:NONE 00160* 00170‚OPTOUTPUTTAPE 00180‚OPTNOG 00190* 00200* 00210‚SPC4 00220**************************************************** 00230**************************************************** 00240*‘INSTRUCTIONS 00250* 00260*TOTRANSFERFROMEDITORTOASSEMBLER 00270*„ENTERCONTROLA 00280* 00290*TOTRANSFERFROMASSEMBLERTOEDITOR 00300*„ENTERCONTROLE 00310* 00320*EDITBUFFERISLOCATEDFROMENDOFPROGRAM 00330*„TO$37FF. 00340*„TOCHANGEBEGINNINGADDRESS,REDEFINE"BEGED" 00350*„TOCHANGEENDINGADDRESS,REDEFINE"ENDED" 00360* 00370*ASSEMBLERSYMBOLTABLEISLOCATEDFROM$3800 00380*„TO$3FFF,ALLOWINGDEFINITIONOF256SYMBOLS. 00390*„TOCHANGEBEGINNINGADDRESS,REDEFINE"BEGAS" 00400*„TOCHANGEENDINGADDRESS,REDEFINE"ENDAS" 00410* 00420*WHENTHEASSEMBLERISENTEREDBYSETTINGTHE 00430*„PROGRAMCOUNTERTO$0100ANDTHEEDITORIS 00440*„ENTEREDVIATHEPCAT$0103,THEASSEMBLER 00450*„ANDEDITORWILLFUNCTIONASDESCRIBEDINTHE 00460*„SOFTWARESUPPLEMENT.‚THISROUTINEWILLTAKE 00470*„CONTROLWHENPROGRAMTRANSFERISINITIATED 00480*„BY"CTRLA"OR"CTRLE" 00490* 00500*THISPROGRAMMUSTBELOADEDAFTERLOADINGTHE 00510*„ASSEMBLER/EDITORBECAUSESEVERALOFTHEIR 00520*„INSTRUCTIONSARECHANGEDBYAETX.1 00530* 00540*DONOTUSETHEEDITORANDASSEMBLEROVERWRITE 00550*„OPTIONSWHENUSINGTHISROUTINE 00560* 00570**************************************************** 00580**************************************************** 00590‚SPC4 00600*THEFOLLOWINGSECTIONMODIFIESTHEC0-RESIDENT 00610*„EDITOR/ASSEMBLERSOFTWARE 00620**************************************************** 00625‚SPC1 00630‚ORG$EC 00640UPDEXRMB2 00650DWNDEXRMB2 00660‚ORG$100 00670ASMJMPASENT 00680EDJMPEDENT 00690‚ORG$118 00700XCIJMPMCI 00710XCIEJMPMCIE 00720‚ORG$1E9 00730‚FDBRDRBYP 00740‚ORG$210 00750‚FDBRDRBYP 00760‚ORG$27D 00770‚FDBTRANSC 00780‚ORG$301 00790‚FDBENDAS 00800‚ORG$905 00810‚FDBBEGAS 00820‚ORG$9BB 00830‚FDBBEGAS 00840‚ORG$94D 00850‚FDBEBINZ 00860‚ORG$12E9 00870‚FDBBEGAS 00880‚ORG$1738 00890‚FDBBEGED 00900‚ORG$1741 00910END1CPX#ENDED 00920‚BNEEND1-3 00930**************************************************** 00940‚SPC4 00950‚ORG$1D06 00955‚SPC4 00960*EDITORPROGRAMCOUNTERENTRYPOINT 00965‚SPC1 00970EDENTCLRMODE 00980‚JMPESTART 00985‚SPC4 00990*ASSEMBLERPROGRAMCOUNTERENTRYPOINT 00995‚SPC1 01000ASENTLDAA#1 01010‚STAAMODE 01020‚JMPASTART 01025‚SPC4 01030*CONSOLEINPUTROUTINES:CHECKFOR"CTRLA" 01040*„AND"CTRLE"ANDINITIATETRANSFER 01045‚SPC1 01050MCIJSRCI 01060MCI1CMPA#1CONTROLA? 01070‚BEQMCI2YES,CHECKMODE 01080‚CMPA#5NO,CONTROLE? 01090‚BEQMCI3YES,CHECK+ MODE 01100‚RTS 01110MCI2PSHB 01120‚LDABMODE 01130‚RORB 01140‚PULB 01150‚BCCASTRANINEDITORMODE? 01160‚RTSNO,RETURN 01170MCI3PSHB 01180‚LDABMODE 01190‚RORB 01200‚PULB 01210‚BCSEDTRANINASSEMBLERMODE? 01220‚RTSNO,RETURN 01230MCIEJSRCIE 01240‚BRAMCI1 01245‚SPC4 01250*INITIALIZEEDITBUFFERPOINTER 01255‚SPC1 01260EBINZSTXSAVXSAVEX-REG 01270‚LDX#BEGED+1 01280‚STXEBUFPT 01290‚LDXSAVXRESTOREX-REG 01300‚JMPASMSG 01305‚SPC4 01310*BYPASSTAPEREADERCOMMANDS 01315‚SPC1 01320RDRBYPPSHASAVEACC-A 01330‚LDAAMODE 01340‚CMPA#$81E-TO-ATRANSFERMODE? 01350‚PULARESTOREACC-A 01360‚BNERDBY1NO,CONTINUE 01370‚RTSYES,BYPASS 01380RDBY1JMPOUTCH 01385‚SPC4 01390*ASTRANSAVESTHEEDITORSCRATCHAREA 01400*„BEFOREENTERINGTHEASSEMBLER 01405‚SPC1 01410ASTRANLDAB#$81 01420‚STABMODEUPDATE 01430‚LDX#TSTK 01440‚STXUPDEX 01450‚LDX#$3D 01460ASTR1BMIASTR2MOVECOMPLETE 01470‚LDAA$20,X 01480‚DEX 01490‚STXDWNDEX 01500‚LDXUPDEX 01510‚STAAX 01520‚DEX 01530‚STXUPDEX 01540‚LDXDWNDEX 01550‚BRAASTR1 01560ASTR2JMPASTART 01565‚SPC4 01570*EDTRANRESTORESTHEEDITORSCRATCHAREA 01580*„MOVEDDURINGTRANSFERTOASSEMBLER. 01590*„EDITORTHENENTEREDW/OINITIALIZATION. 01595‚SPC1 01600EDTRANLDAB#$81 01610‚CMPBMODE 01620‚BNEEDTR3 01630‚DECB 01640‚STABMODEUPDATE 01650‚LDX#$3D 01660‚STXDWNDEX 01670‚LDX#TSTK 01680EDTR1LDAAX 01690‚DEX 01700‚STXUPDEX 01710‚LDXDWNDEX 01720‚STAA$20,X 01730‚DEX 01740‚STXDWNDEX 01750‚BMIEDTR2MOVECOMPLETE 01760‚LDXUPDEX 01770‚BRAEDTR1 01780EDTR2JMPPROMPTNON-INZEDITORINPUT 01790EDTR3JMPESTARTEDITORINPUT 01795‚SPC4 01800*TRANSCCHECKSTHEMODEFORINTERNALEDITBUFFER 01810*„TOASSEMBLERTRANSFER.‚IFINTERNALTRANSFER 01820*„BITISSETTHERECORDISREADFROMEDITBUFFER 01830*„RATHERTHANTAPE 01835‚SPC1 01840TRANSCLDAAMODE 01850‚CMPA#$81INTTRANSFERMODE? 01860‚BEQTRAN1YES,INPUTFROMEDITBUFFER 01870‚JMPCI 01880TRAN1LDXEBUFPTEDITBUFFERPOINTER 01890‚LDAAXINPUTCHAR 01900‚CMPA#$FFENDOFTEXT? 01910‚BEQTRAN2YES,EXITPASS 01920‚INXINCREMENTBUFFERPOINTER 01930‚STXEBUFPT 01940‚RTS 01950TRAN2LDAA#$D 01960‚RTS 01965‚SPC4 01970MODERMB1 01980SAVXRMB2 01990EBUFPTRMB2EDITBUFFERPOINTER 02000‚RMB$3E 02010TSTKEQU*-1TOPSAVEDBUFFERSTACK 02020BEGASEQU$3800SYMBOLTABLEBEGINS 02030ENDASEQU$3FFFSYMBOLTABLEENDS 02040BEGEDEQUTSTK+1EDITBUFFERBEGINS 02050ENDEDEQU$37FFEDITBUFFERENDS 02060ESTARTEQU$1641EDITORSTART 02070ASTARTEQU$8F4ASSEMBLERSTART 02071‚SPC1 02072*FORMIKBUGUSETHEFOLLOWINGVALUES 02073*CI-$14D 02074*CIE-$14D 02075*OUTCH-$221 02076‚SPC1 02080CIEQU$14CCONSOLEINPUT 02090CIEEQU$14FCONSOLEINPUT/ECHO 02100PROMPTEQU$1673NON-INZEDITORENTRY 02110OUTCHEQU$F018 02120ASMSGEQU$11E 02130‚END ÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅ, y€x‡NAMBIORTM * * *ˆTHEFOLLOWINGPROGRAMCOMPUTESTHEBIORHYTHS *ˆFORDATAINPUTTHROUGHTHETELETYPE,AND *ˆDISPLAYSTHERESULTINACHARTTYPEDOUT *ˆONTHETTY.VARIABLESUSEDINTHEPROCESS *ˆAREEXPLAINEDBELOW. * *VARIABLELIST: * *ˆNUMDAH,NUMDAL-ADDRESSOFLISTOFDAYSINMONTH *ˆNMMDYL-ADDRESSOFLISTOFDAYSLEFT *’INTHEYEARFROMENDOFEACHMONTH *‰BINBYL-BIRTHYEARINBINARY *ˆBINMON-BIRTHMONTHINBINARY *ˆBINTAD-BINARYTARGETMONTH *ˆPHIS-PHASEOFPHYSICALCYCLE *ˆEMOR-PHASEOFEMOTIONALCYCLE *ˆINTR-PHASEOFINTELLECTUALCYCLE *ˆLOOKU,LOOKL-INDEXADDRESSINTO *“POSITIONARRAYS *ˆPHYSU,PHYSL-ADDRESSOFPOSITIONARRAY *“FORPHYSICALCYCLE *‰EMOTU,EMOTL-ADDRESSOFPOSITIONARRAY *’FOREMOTIONALCYCLE *ˆINTEU,INTEL-ADDRESSOFPOSITIONARRAY *’FORINTELLECTUALCYCLE. *ˆBINNUM-BINARYNUMBEROFDAYSTOBEPLOTTED *ˆBMON-BIRTHMONTHINBCD *ˆBDAY-BIRTHDAYINBCD *ˆBYR-BIRTHYEARINBCD *ˆDMON-TARGETMONTHINBCD *ˆDDAY-TARGETDAYINBCD *ˆDYR-TARGETYEARINBCD *ˆNODAYS-LENTHOFPLOTINBCD(DAYS) *ˆBINBD-BINARYBIRTHDAY *ˆTOTALH,TOTALL-LIFESPANINDAYS *ˆTEMP-TEMPORARYSTORAGELOCATION *ˆPHYPRINTLOCATIONOFPHYS.VALUE *ˆEMOPRT-PRINTLOCATIONOFEMOT.VALUE *ˆINTPRT-PRINTLOCATIONOFINTELL.VALUE *ˆXKDVSR-DIVISORINXKDVNDROUTINE *ˆXKDVND-DIVIDEND *ˆXKQUOT-QUOTIENTINDIVIDEROUTINE *†XKDSPL-AMOUNTREMAINDERISSHIFTED *ˆDAYMON-ARRAYOFDAYSINEACHMONTH *ˆDAYYRE-ARRAYOFDAYSLEFTYEAR *’FROMENDOFEACHMONTH * * *ˆTHESEVARIABLESRESIDEINTHEBASE *ˆPAGEOFMEMORYASASSEMBLEDBELOW: * * ORG$80 FLAGRMB1 NUMDAHƒFCB‡0 NUMDALƒFCB‡0 NMDYH„FCB‡0 NMDYL„FCB‡13 BINBYLƒRMB‡1 BINMONƒRMB‡1 BINTADƒRMB‡1 PHISRMB‡1 EMOR…RMB‡1 INTR…RMB‡1 LOOKU„RMB‡1 LOOKL„RMB‡1 PHYSL„FCB„39 PHYSU„FCB‡0 EMOTL„FCB‡62 EMOTU„FCB‡0 INTEL„FCB‡90 INTEUFCB0 BINNUMƒRMB‡1 BMON…RMB‡3 BDAY…RMB‡3 BYR†RMB‡2 DMON…RMB‡3 DDAY‚RMB‡3 DYR†RMB‡2 NODAYSƒRMB‡2 BINBD„RMB‡1 TOTALHƒRMB‡1 TOTALLRMBŠ1 TEMP…RMB‡1 PHYPRTƒRMB‡1 EMOPRTƒRMB‡1 INTPRTƒRMB‡1 BINDYLRMB1 * ‰ORG‡$F9 XKDVSRƒRMB‡1 XKDVNDƒRMB‡1 ‰RMB‡1 XKQUOTƒRMB1† ‰RMB‡1 XKDSPLƒRMB‡1 ORG$00 DAYMONƒFCB0,31,28,31,30,31,30,31,31,30,31,30,31 DAYYREFCB0,0 ‰FCB‡78,1 ‰FCB‡50,1 ‰FCB‡20,1 ‰FCB„245,0 ‰FCB‡214,0 ‰FCB‡184,0 ‰FCB‡153,0 ‰FCB‡122,0 ˆFCB‡92,0 ‰FCB‡61,0 ‰FCB‡31,0 ‰FCB‡0,0 * * * ‰FCB…25,32,38,43,47,49,50,49 ‰FCB‡45,41,35,28,23,15,9,5,1,0 ‰FCB‡1,3,7,12,18 * * ‡FCB‡25,31,36,41,45,48,49,50 ‰FCB‡49,48,45,41,36,31,25,19 ‰FCB‡14,9,5,2,1,0,1,2,5,9,14,19 * * ‰FCB‡25,30,34,39,42,45,48,49,50,50 ‰FCB‡47,44,41,37,32,27,23,18,13 …FCB‡9,6,3,1,0,0,1,2,5,8,11 ‰FCB‡16,20 * * * * * *ˆTHISINITIALPROMPTROUTINEEXPLAINS *ˆBIORHYTHMSANDASKSFORPERTINENT *ˆDATANEEDEDTOPLOTEACHCYCLE. *ˆTHESUBROUTINESCALLEDARE: *’INCH *’OUTCH *’PROM *’ENTER * * STACKEQU511ENDOFSTACK ‰ORG‡512 STARTLDS#STACK INCH…EQU‡$F012 OUTCH„EQU‡$F018 *…INITIATEPROMPTROUTINE * KD‡LDAB†#79 ‰LDX‡#PROMPTƒOUTPUT"DOYOUWISH...# ‰JSR…PROM * * ‰JSR‡INCH ANDA#$7F CMPA#$59 BNENOLIST LIST…LDAB†#232 †LDX‡#INTROD ‰JSR‡PROM ‰LDAB†#240 ‰LDX‡#INTRO2 ‰JSR‡PROM ‰LDAB†#128 ‰LDX‡#INTRO3 ‰JSR‡PROM NOLISTƒLDAB†#111-  †LDX‡#DTEINPƒPROMPTFORBIRTHDATE ‰JSR‡PROM ‰LDAB†#8 ‰LDX‡#BMON…ENTERBIRTHDATEINBUFFER ‰JSR‡ENTER * * ‰LDAB†#62 ‰LDX‡#BEGIN„PROMPTFORTARGETDATE ‰JSR‡PROM ** * ‰LDAB†#8 ‰LDX‡#DMON…STORRETARGETDA@ ‰JSR‡ENTER * * ‰LDAB†#62‡PROMPTFORLENGTHOFPLOT ‰LDX‡#HMDAYS ‰JSR‡PROM * * ‰LDAB†#2 ‰LDX‡#NODAYSƒSTORELENGTHOFPLOT JSRENTER * * ‰LDAB†#67‡TYPESEXPLANATIONOFCHART ‰LDX‡#CHART ‰JSR‡PROM * * * *ˆTHISROUTINECOMPUTESTHELIFESPANINDAYS. *ˆTHEACCUMULATIONADDSINORDER,1)THE *ˆDAYSLEFTINTHEBIRTHMONTH,2)THEDAYS *ˆLEFTINTHEBIRTHYEAR,3)THEDAYSIN *ˆEACHYEARFROMTHEBIRTHYEARTOTHETARGET *ˆYEAR,4)THEDAYSINTHETARGETYEARTOTARGET *ˆMONTH,AND5)THEDAYSINTHETARGETMONTHTO *ˆTHETARGETDAY.‚THELIFESPANISKEPTIN *ˆTOTALHANDTOTALL.‚ALLLEAPYEARSARE *ˆDULYACCOUNTEDFOR. *ˆSUBROUTINEUSEDIS: *’BINAR * ‰CLR‡TOTALLRESETTOTALLIFESPAN ‰CLR‡TOTALH CLRFLAG******* LDXBYR******* CPXDYR******* BNENEQ*** INCFLAG******* NEQLDAABMONFINDNUMBEROFDAYSIN ŠLDAB†BMON+1„BIRTHMONTH ‰CMPA„#0 ‰BEQ‡RST ‰ADDB†#10‡CONVERTSBCDMONTH-BINARY RST†STAB†NUMDAL ‡LDX‡NUMDAH ‰LDAA†0,X‡ACCUMAHASDAYSINBIRTHMON LDABBDAYTHEBCDBIRTHDATE CMPB#0ISCONVERTEDINTO BEQOVR4 ‰CMPB†#1…INACCUMBAND ‰BEQ‡OVR1†STOREDINBINBD ‰CMPB†#2 ‰BEQ‡OVR2 †LDAB†BDAY+1 ‰ADDB†#30 ‰BRA‡OVR OVR4…LDAB†BDAY+1 ‰BRA‡OVR OVR1…LDAB†BDAY+1 ‰ADDB†#10 ‰BRA‡OVR OVR2…LDAB†BDAY+1 ‰ADDBƒ#20 OVR†STAB†BINBD * * ‰SUBA†BINBD…DAYSINBIRTHMONTH-BDAY ‰BMI†CORREC„NEGOCCRUSINFEB,LEAPYR ‰STAA†TOTALL ‰BRA‡LEFYEA CORRECƒCLR‡TOTALL LEFYEA‚LDAA†NUMDAL„THEDAYSLEFTINYEAR ‰ROLAAREADDEDTOTOTAL ‰ADDA†#13†LIFESPAN,BY ‰STAA†NMDYL…INDEXINGINTO ‰LDX‡NMDYH…ARRAYTHRUU ‰LDAA†0,X†NMDYH&NMDYL ‰INX ‰LDAB†0,X ‰ADDA†TOTALL ‰ADCB†TOTALH ˆSTAA†TOTALL ‰STAB†TOTALH LDAA#1******* CMPAFLAG******* BNENEQ1******* LDAA#109 LDAB#1HI&LOBYTESOF365 SUBATOTALL SBCBTOTALHSUB#OFDAYSFROM365 COMA COMB ADDA#1 ADCB#0 STAATOTALL STABTOTALH BRATARDAT******* NEQ1LDX#DYR ‰JSR‡BINAR ‰STAA„BINDYL„TARGETYR.TOBINARY ‰LDX‡#BYR ‰JSR‡BINAR ‰STAA†BINBYL ‰ANDA†#$03†MASKLOWEST2BITSOFBY ‰BNE‡FINI ‰LDAA†NUMDAL„TESTFORPASTFEB+ ˆCMPA†#2 ‰BGT‡FINI ‰LDAA†#1 ‰LDAB†#0 ‰ADDA†TOTALL ˆADCB†TOTALH ‰STAA†TOTALL ‰STAB†TOTALH FINI…LDAA†BINBYL„INCR1YE ‰ADDA†#1 ‰STAA†BINBYL ‰CMPA†BINDYL ‰BNE‡CONT ˆBRA‡TARDAT * * CONT…LDAA†#$6D†ADD365TOTOTAL ‰LDAB†#1 ‰ADDA†TOTALL ˆADCB†TOTALH ‰STAA†TOTALL ‰STAB†TOTALH ‰LDAA†BINBYL„CHECKFOR‚LEAPYAR ‰ANDA†#$03 ‰BNE‡CO ‰LDAA†#1 ‰LDAB†#0 ‰ADDA…TOTALL„ADD1DAYIFLEAPYR ‰ADCB†TOTALH ‰STAA†TOTALL ‰STAB†TOTALH CO‡BRA‡FINI†BRANHBACK TARDATƒLDAA†DMON ‰LDAB†DMON+1„TARGETMONTHISLODED ‡CMPA†#0 ‰BEQ‡OUT ‰ADDB†#10 OUT†STAB†BINMONSTOREBINARYTARGETMONTH * * ‰LDAA†#1 OTA†CMPA†BINMON ‰BEQ‡DAYCO ‰STAA†NUMDAL ‡LDX‡NUMDAH ‰LDAB†0,X ‰ADDB†TOTALL ‰STAB†TOTALL ‰LDAB†#0 †ADCB†TOTALH ‰STAB†TOTALH ‰INCA ‰BRA‡OTA * * DAYCO„LDX„#DDAY…CONVRTBCDTARGETTOBINARY ‰JSR‡BINAR ‰STAA†BINTAD * * ‰ADDAƒTOTALL ‰STAA†TOTALL ‰LDAA†#0 ‰ADCA†TOTALH ‰STAA†TOTALH„ADDAAYSTO‚TOTAL * * ‰LDAA†BINDYL ‰ANDA†#03 ‰BNE‡NXT ‰LDABƒBINMON„CORRECTSFORLEAPYR ‰CMPB†#2 ‰BLE‡NXT ‰LDAA†#1 ‰ADDA†. TOTALL ‰STAA†TOTALL ‰LDAA†#0 ‰ADCA†TOTALH ‰STAA†TOTALH * *ˆTHISROUTINECOMPUTESTHEPHASEOFTHETHREE *ˆCYCLESUSINGSUBROUTINESRMDRANDXKDIVD.THE *…RESULTSARESCALEDANDSTOREDINABUFFERFOR *ˆPRINTOUT. * * * NXT†LDAA†#23 ‰JSR†RMDR ‰STAA†PHIS ‰ADDA†PHYSL…THEPHASEOFEACHCYCLE ‰STAA†LOOKL…ISCALCULATED ‰LDAA†#0 ‰ADCA†PHYSU ‰STAA†LOOKU ‰LDX‡LOOKU ˆLDAA†0,X ‰STAA†PHYPRT„PHIS,EMOR,ANDINTRHOLD ‰LDAA†#28‡THEREMAINDEROFDIVIDING ˆJSR‡RMDR†LIFESPANBYNO.OFDAYS ‰STAA†EMOR†INEACHCYCLE. ‰ADDA†EMOTL ‰STAA†LOOKL ‰LDAA†#0 ‰ADCA†EMOTU ‰STAA†LOOKU ‰LDX„LOOKU ‰LDAA†0,X ‰STAA†EMOPRT ** ** * ‰LDAA†#33 ‰JSR„RMDR ‰STAA†INTR†THEINTELLECTUALDATA ‰ADDA†INTEL…ISUPDATEDTHRULOOKUP †STAA†LOOKL…ROUTINE ‰LDAA†#0 ‰ADCA†INTEU ‰STAA†LOOKU ‰LDX†LOOKU ‰LDAA†0,X ‰STAA†INTPRT ‰LDX‡#NODAYS ‰JSR‡BINAR †STAA†BINNUM ** * *ˆTHISSECTIONSEQUENCESTHEOUTPUTOFDATA *ˆINACHARTFORMATONTTY.SUBROUTINES *ˆCALLEDAREDATEO,WHICHTYPESA *ˆPROPERLYFORMATTEDDATE,ANDPLOT,WHICH *ˆTYPESTHE‚POINTSINEACHCYCLE. * * * * ‰LDAB†#142†OUTPUTEXPLANATIONOFPLOT ‰LDX…#DATI ‰JSR‡PROM PO‡JSR‡DATEO…OUTPUTDATA ‰JSR‡PLOT ‰DEC‡BINNUM ‰LDAA†#0 ‰CMPA†BINNUM ‰BEQ‡PLOTO ‰LDAA†BINTAD ‰INCAŽTHEDATETOBEPLOTTED ‰STAA†BINTAD„ISINCREMENTEDANDTESTED ‰LDAB…BINMON„FORPROPERDAY,MONTH ‰STAB†NUMDAL„ANDYEARCIONVENTIONS ‰LDX‡NUMDAH ‰LDAB†0,X ‰STAB†TEMP ‰CMPA†TEMP ‰BGT‡TEST TRTB…LDAA†DDAY+1„INCR.BCDTARGET ‰ADDA†#1ˆDAY ‰DAA‘DECIMALADJUST ‰CMPA†#$0F†RESULT ‡BGE‡ADDV ‰STAA†DDAY+1 ‰BRA‡CONTIN PLOTO„JMP‡PLOTOV * *†TESTLOOKSFORFEBRUARYOFLEAPYEAR *ˆANDADDSDAYACCORDINGLY. * TEST…LDAB†#2 ‰CMPB„BINMON ‰BEQ‡FEBR TRTN…LDAB†#1 ‰STAB†BINTAD„RESETDAYTO1 ‰STAB†DDAY+1 ‰CLR‡DDAY ‰INC‡BINMON ‰LDAB†#13 ‰CMPB†BINMON ‰BEQ‡RSETM ‰LDAA†DMON+1 ‰ADDA†#1 ‰DAA ‰CMPA†#$0F ‰BGE†ADDR ‰STAA†DMON+1 ‰BRA‡CONTIN ADDR…ANDA†#$0F ‰STAA†DMON+1 ˆINC‡DMON ‰BRA‡CONTIN RSETM„LDAA†#1 ‰STAA†BINMON ‰STAA†DMON+1 ‰CLR‡DMON ‰INC‡BINDYL„ADD1YYRTOBHNTARGETYR ‰LDAA†DYR+1 ˆADDA†#1 ‰DAA ‰CMPA†#$0F†TESTFORCARRY ‰BLT‡FINAL ˆANDA†#$0F ‰INC‡DYR FINAL„STAA†DYR+1 ‰BRA‡CONTIN * * FEBR…LDAA†BINDYL ‰ANDA†#$03 ‰CMPA†#0 ‰BNE‡TRTN ‰LDAA†BINTAD ‚CMPA†#29 ‰BEQ‡TRTB ‰CMPA†#30 ‰BGE‡TRTN ‰BRA‡CONTIN ADDVƒANDA†#$0F ‰STAA†DDAY+1 ‰INC‡DDAY ‰BRA‡CONTIN * * * *ˆNEXTTHEP,E,ANDIDATAISUPDATED *ˆBYINCRIMNTINGEACHPHASENUMBER *ˆANDINDEXINGINTOTHEPROPERPOSITION *ˆARRAYTOGETTHELOCATIONOFPOINT *ˆONTHEPLOT. * * CONTINƒLDAA†PHIS ‰INCAISLIMITHITINPHYSICAL ‰STAA†PHIS†CYCLE ‰CMPA†#23‡IFSORESETPHASE ‰BNE‡NORST ‰CLRA ‰CLR‡PHIS NORST„ADDA†PHYSL…INDEXINTOARRAY ˆSTAA†LOOKL ‰LDAA†#0 ‰ADCA†PHYSU…PUTVALUEINPRINTBUFFER ˆSTAA†LOOKU ‰LDX‡LOOKU ‰LDAA†0,X ‰STAA†PHYPRT * * * ‰LDAA†EMOR ‰INCA ‰STAA†EMOR ‰CMPA†#28‡CHECKFORLIMITINEMOTIONAL ‰BNE‡NORT†CYCLE ‰CLRA ‰CLR‡EMOR†RESETIFHIT NORT…ADDA†EMOTL ‰STAA†LOOKL…LOOKUPDISPLAYVALUE ‰LDAA†#0 ‰ADCA†EMOTU ‰STAA†LOOKU ‰LDX‡LOOKU ‰LDAA†0,X ‰STAA†EMOPRT * * * ‰LDAA†INTR†LIMITHITORINTELLCYCLE? ‰INCA ‰STAA†INTR†RESETIFNEEDED ‰CMPA†#33 ‰BNE‡NORS ‰CLRA ‰CLR‡INTR†LOOKUPVSLUEANDRETRIEVE NORS…ADDA†INTEL…FORPRINTOUT ‰STAA†LOOKL ‰LDAA†#0 ‰ADCA†INTEU ‰STAA†LOOKU ‰LDX†LOOKU ‰LDAA†0,X ‰STAA†INTPRT/  ‰JMP‡POˆGOTOPPRRNTROUTINE * * * * *ˆREQUESTANOTHERDATEORTERMINATE PLOTOVƒLDAB†#1 ‰LDAA†#$0D ‰JSR‡OUTCH ‰LDAA†#$0A LFO†JSR‡OUTCH ‰DECB ‰CMPB…#0 ‰BGT‡LFO ANOTLDAB#$1E ‰LDX‡#ANOTHR ‰JSR‡PROM ‰JSR‡INCH ANDA#$7F CMPA#$4E BNEKD1 SWI KD1†JMP‡KD * * * *ˆSUBROUTINESUSED‚INTHEMAINLLINEARELISTED *ˆINTHEFOLLOWINGCODE. * * * *œBINAR BINAR„LDAB†0,X ‰INX‘BINARCONVERTSBCDCODE ‰LDAA†0,X‡STOREDATVALUEININDEXREG TAK†CMPB†#0ˆ(MSDIGIT)ANDINDEX+1 ‰BLE‡TASK†(LSDIGIT)INTOBINARYVALUE ‰ADDA†#10‡STOREDINACCUMA ‰DECB ‰BRA‡TAK TASK…RTS * * * * * *œPROM PROM…LDAA†0,X‡PROMOUTPUTSACHARACTERSTRING PR‡JSR‡OUTCH…ONTHETTY,WITHTHEADDRESSOF ‰INX‘THESTRINGINTHEINDEXREG ‰DECBANDTHENO.OFBYTESIN ‰BNE‡PROM†ACCUMB ‰RTS * * * * * *œENTER ENTER„JSR‡INCH†ENTERSTORESACHARACTERSTRING ‰ANDA†#$0F‡FROMTHETTYATLOCATION ‰STAA†0,X‡STARTINGATVALUEININDEXREG. ‰INX‘ANDENDINGNBYTESLATGER ‰DECBWHERENISHELDINACCUMB ‰BNE‡ENTER ‰RTS * * * * * *œDATEO DATEO„LDAA†#$0D†DATEOPRINTSTHEDATESTOREDATDMON ‰JSR‡OUTCH…WITHSLASHESBETWEENTHEDAY ‰LDAA†#$0A†ANDMONTHANDMONTHANDYEAR ‰JSR‡OUTCH ‰LDAB†#0 ‰LDX‡#DMON BAK†LDAA†0,X ‰ADDA†#$30 ‰JSR‡OUTCH BAKO…INX ‰INCB ‰CMPB†#2 ‰BEQ‡SLASH ‰CMPB†#8 ‰BEQ‡LAST ‰CMPB†#5 ‰BEQ‡SLASH ‰BRA‡BAK SLASH„LDAA†#$2F ‰JSR‡OUTCH ‰BRA‡BAKO LAST…LDAB†#6 ‰LDAA†#$20†SPACEOVER6SPACES ‰JSR‡OUTCH ‰DECB ‰BEQ‡RTRN ‰BRA‡LAST+1 RTRN…RTS * * * * * *œPLOT PLOT…LDAB†#0ˆPLOTOUTPUTSTHEPOSITOIN ‰CMPB†#51‡OFTHETHREECYCLESON ‰BEQ‡QUIT†AGRAPHTHRUTHETTY ‰CMPB†PHYPRT†VALIDPOSITIONSARE ‰BEQ‡PPRT†0THRYUGH50,ANDEACH ‰CMPB†EMOPRT„LOOPTHRUTHECODECHECKS ‰BEQ‡EPRT†THESTOREDVALUESAGAINST ‰CMPB†INTPRT„THECURRENTTTYPRINT ‰BEQ‡IPRT†POSITION.IFAMATCH ‰CMPB†#25‡OCCURSTHEPROPERLETTER ‰BEQ‡PERPRT„ISPRINTED,IFNOTASPECE ‰LDAA†#$20†ISOUTPUT. ‰JSR‡OUTCH ‰INCB ‰BRA‡PLOT+1 * * PPRT…LDAA†#$50 ‰JSR‡OUTCH ‰INCB ‰BRA‡PLOT+1 IPRT…LDAA†#$49 ‰JSR‡OUTCH ‰INCB ‰BRA‡PLOT+1 EPRT…LDAA†#$45 ‰JSR‡OUTCH ‰INCB ‰BRA‡PLOT+1 PERPRTƒLDAA†#$2E ‰JSR‡OUTCH ‰INCB ‰BRA‡PLOT+1 QUIT…LDAA†#$0 ‰JSR‡OUTCH ‰LDAA†#$0 ‰JSR‡OUTCH ‰JSR‡OUTCH ‰RTS * * * * * *œRMDR RMDR…STAA†XKDVSR„RMDRPROPERLYFORMATSENTRYOF ‰LDAA†TOTALH„VARIABVLESTOXKDIVDTO ‰LDAB†TOTALL„OBTAINTHEVALUEOFTBE ‰STAA†XKDVND„REMAINDERINTHE ‰STAB†XKDVND+1‚DIVISION: ‰JSR‡XKDIVD‡LIFESPAN/DAYSPERCYCLE *œFOREACHOFTHE3CYCLES ‰LDAA†XKDVND„ANDSHIFTSTHESCALED ‰LDAB†XKDSPL„REMAINDERBEFORE BITSFTƒCMPB†#0ˆRETURNINGTOCALLING ‰BEQ‡OUPUT…ROUTINE ‰RORA ‰DECB ‰BRA‡BITSFT OUPUT„RTS * * * * * * * * * * *œXKDIVD XKDIVDƒLDAB†#8ˆXKDIVDISADIVIDEROUTINE ‰CLR‡XKQUOT„FROMTHEMOTOROLA ‰CLR‡XKQUOT+1‚APPLICATIONSMAINUAL DVDLPOƒINCBWHICHDIVIDESXKDVND ‰CMPB†#16‡BYXKDIVSRTO ‰BGT‡DVDERR„PRODUCEXKQWUOTAND ‰ASL‡XKDVSR„XKQUOT+1,ANDTHE ‰BCC‡DVDLPO„REMAINDER,WHICH ‰STAB†XKDSPL„ISHELDIN ‰ROR‡XKDVSR„XKDVNDAFTER *œCOMPLETIONOFTHE *œROUUTINE,SHIFTED ‰LDAA†XKDVND„LEFTNPLACES DVDLP1ƒCMPA†XKDVSR„WHERENISXKDSPL ‰BCS‡DVNSUB DVDLP2ƒSEC ‰ROL‡XKQUOT+1 ‰ROL‡XKQUOT ‰SUBA†XKDVSR ‰STAA†XKDVND ‰BRA‡DVSHFT DVNSUBƒCLC ‰ROL‡XKQUOT+1 ‰ROL‡XKQUOT DVSHFTƒDECB ‰BEQ‡DVDEND ‰CLC ‰ROL‡XKDVND+1 ‰ROL‡XKDVND ‰0 LDAA†XKDVND ‰BCS‡DVDLP2 ‰BRA‡DVDLP1 DVDERRƒLDX‡#$FFFF ‰STX‡XKQUOT DVDENDƒLDAB†XKDSPL ‰SUBB†#9 ‰CMPB†#4 ‰BCS‡DVDLP3 ‰SUBB†#4 DVDLP3ƒSTAB†XKDSPL * ‰RTS * * * *ˆTHEFOLLOWINGARETHEPROMPTMESSAGES *ˆTHATAREOUTPUTONTHETTYDURING *ˆTHEPROGRAM. * ‰ORGˆ2000 INTRODƒFCB‡$0D,$0A ‰FCC‡25, ‰FCC‡/BIORHYTHM/ ‰FCB‡$0D,$0A,$0D,$0A ‰FCC‡/THEPURPOSEOFBIORHYTHMISTO/ ‰FCC‡/PREDICTAPHYSICAL,/ ‰FCB‡$0D,$0A ‰FCC‡/EMOTIONALANDINTELLECTUALPATTERN/ ‰FCC‡/THATINDICATESYOUR/ ‰FCB‡$0D,$0A ‰FCC‡/UPANDDOWNDAYSFORANYPERIOD/ ‰FCC‡/OFTIME.BIORHYTHMCAN/ ‰FCB‡$0D,$0A ‰FCC‡/SHOWWHICHDAYSWEREGOODOR/ INTRO2ƒFCC‡/BADFORYOUBEGINNINGWITH/ ‰FCB‡$0D,$0A ‰FCC‡/YOURBIRTH.ITCANALSOSHOW/ ‰FCC‡/YOUWHICHFUTURE/ ‰FCB‡$0D,$0A ‰FCC‡/DAYSWILLBEGOODORBADFORYOU./ ‰FCB‡$0D,$0A ‰FCC‡/THESEPREDICTIONSAREBASEDON/ ‰FCC‡/SCIENTIFIC/ ‰FCB‡$0D,$0A ‰FCC‡/STUDIESTODETERMINEWHYACCIDENTS/ ‰FCC‡/OCCUR.ITWASLEARNED/ ‰FCB‡$0D,$0A FCC/THROUGHTHESESTUDIESTHATA/ INTRO3ƒFCC‡/PHYSICALCYCLEOCCURSEVERY/ ‰FCB‡$0D,$0A ‰FCC‡/23DAYS,ANEMOTIONALCYCLE/ ‰FCC‡/OCCURS/ ‰FCC‡/EVERY28DAYS,ANDAN/ ‰FCB‡$0D,$0A ‰FCC‡/INTELLECTUALCYCLEOCCURS/ ‰FCC‡/EVERY33DAYS./ * * PROMPTƒFCB‡$0D,$0A ‰FCC‡/DOYOUWISHANINTRODUCTION/ ‰FCC‡/TOBIORHYTHMS?TYPEY/ ‰FCC‡/FORYES,ORNFORNO./ ‰FCB‡$0D,$0A ‰FCC‡/?/ * * DTEINPƒFCB‡$0D,$0A,$0D,$0A ‰FCC‡/PLEASETYPEYOURBIRTHDATE/ ‰FCC‡/USINGTHEFOLLOWINGFORMAT:/ ‰FCB‡$0D,$0A ‰FCC‡/MM,DD,YY‚EXAMPLE;JANUARY/ ‰FCC‡/17,1942/ ‰FCC‡/=01,17,42/ ‰FCB‡$0D,$0A ‰FCC‡/?/ * * BEGIN„FCB‡$0D,$0A ‰FCC‡/ATWHATDATEAREYOUINTERESTED/ ‰FCC‡/INBEGINNINGBIORHYTHM?/ ‰FCB‡$0D,$0A ‰FCC‡/?/ * * HMDAYSƒFCB‡$0D,$0A ‰FCC‡/HOWMANYDAYSDOYOUWISHTO/ ‰FCC‡/HAVEPLOTTED?/ ‰FCC‡/(01THRU99)/ ‰FCB‡$0D,$0A ‰FCC‡/?/ * * CHART„FCB‡$0D,$0A FCC/PHYSICALCYCLE=P/ ‰FCB‡$0D,$0A ‰FCC‡/EMOTIONALCYCLE=E/ ‰FCB‡$0D,$0A ‰FCC‡/INTELLECTUALCYCLE=I/ ‰FCB‡$0D,$0A * * DATI…FCB‡$0D,$0A ‰FCC‡13,DATE ‰FCC‡22,DOWN ‰FCC‡28,CRITICAL ‰FCC‡5,UP ‰FCB‡$0D,$0A ‰FCC‡/Œ/ ‰FCC‡/------------/ ‰FCC‡/------------/ ‰FCC‡/------------/ ‰FCC‡/------------/ ‰FCC‡/--------/ ANOTHRƒFCB‡$0D,$0A ‰FCC‡/DOYOUWISHANOTHERCHART?/ ‰FCB‡$0D,$0A ENDSTART ÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅ =€NAMTRACE *REV1.1BYMOTOROLAMICROSYSTEMSAPRIL1977 ORG$100 SPC2 TRACESTAALABEL3*SAVAR STABLABEL4*SAVBR TPA STAALABEL5*SAVCCR STXLABEL6*SAVXR TSX LDX0,X*GETPC STXLABEL1*TEMPPC LDX#LABEL1*PCTOXR JSR$E0C8*PRINTPC JSR$E0CA*PRINTAR JSR$E0CA*PRINTBR LDAA#$0D*CR JSR$E1D1 LDAA#$A*LF JSR$E1D1 LDAALABEL5*RESTORECCRTAP LDABLABEL4*RESTOREBR LDXLABEL6*RESTOREXR LDAALABEL3*RESTOREAR PSHA*SAVEARONSTACK LDAALABEL5 TAP*RESTORECCR PULA*RESTOREAR RTS LABEL1RMB1 LABEL2RMB1 LABEL3RMB1 LABEL4RMB1 LABEL5RMB1 LABEL6RMB1 LABEL7RMB1 SPC5 OR1 G$200 * *TESTPROGRAMFORTRACE * LDX#$ABCD*LOADXRWITHABCD LDAA#$FF*LOADARWITHFF LDAB#00*LOADBRWITH00 JSRTRACE*JMPTOTRACE LDAA#00*LOADARWITH00 LDAB#$FF*LOADBRWITHFF JSRTRACE*JMPTOTRACE SWI*DISPLAYREGISTERSAFTERTRACE END ÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅ}@5`€³‡NAM‚TSTFPP * * *†24BITREENTRANTFLOATINGPOINTPACKAGE * *†WITHAUXILIARYCONTROL/TESTPROGRAM * * *†PROGRAMMER: * *†DR.BENTOND.WEATHERS *†SANGAMOELECTRICCOMPANY *†BOX‚3347 *†SPRINGFIELD,ILLINOIS62714 * *†217/544-6411EXT591 * ‡ORG‚$0”DEFINITIONOFMEMORYADDRESSESINRAM A1…RMB‚3•RESERVE3BYTESOFRAM A2…RMB‚3•RESERVETHREEBYTESOFRAM PSH4T1RMB‚2•WORKINGLOCATIONFORPSH4 PSH4T2RMB‚2•WORKINGLOCATIONFORPSH4 L1…RMB‚1‹LOOPCOUNTER L2…RMB‚1‹LOOPCOUNTER A3…RMB‚3‹HOLDSMAINCOPYOFARG1 ROUADDRMB‚2‹HOLDSSUBROUTINEADDRESS * INCHƒEQU‚$FA8B‘SUBROUTINEADDRESS OUTCH‚EQU‚$F9DC‘SUBROUTINEADDRESS ‡PAGE * * *†MAINCONTROLPROGRAMFORTESTING *ˆTHEFLOATINGPOINTPACKAGE * * ‡ORG‚$8500 ‡LDS‚#$FF’INITIALIZESTACKPOINTER * *†MAINTESTINGLOOP * LOOPƒJSR‚QUERY‘NEWLINE,QMONTTY ‡LDAA#'O“OUTPUT'O' ‡JSR‚OUTCH ‡LDAA#'C“OUTPUT'C' ‡JSR‚OUTCH ‡JSR‚INCH’GETOPERATIONCODE * *†SEVENWAYBRANCH * ‡CMPA#'1“TESTFOR'1' ‡BEQ‚ADD ‡CMPA#'2“TESTFOR'2' ‡BEQ‚SUB ‡CMPA#'3“TESTFOR'3' ‡BEQ‚MUL ‡CMPA#'4“TESTFOR'4' ‡BEQ‚DIV ‡CMPA#'5“TESTFOR'5' ‡BEQ‚FLOAT ‡CMPA#'6“TESTFOR'6' ‡BEQ‚IFIX ‡CMPA#'7“TESTFOR'7' ‡BEQ‚NEGATE ‡CMPA#'8‰TESTFOR'8' ‡BEQ‚CLEAR * ‡LDAA#'X“INVALIDOP-CODE,OUTPUT'X' ‡JSR‚OUTCH ‡BRA‚LOOP’GOGETNEXTOP-CODE * ADD„JSR‚SETUP2 ‡LDX‚#FPPADD…LOADADDRESSINTOINDEXREG ‡BRA‚PRINT * SUB„JSR‚SETUP2 ‡LDX‚#FPPSUB…LOADADDRESS ‡BRA‚PRINT * MUL„JSR‚SETUP2 ‡LDX‚#FPPMUL ‡BRA‚PRINT * DIV„JSR‚SETUP2 ‡LDX‚#FPPDIV ‡BRA‚PRINT * FLOAT‚JSR‚QUERY ‡LDAA#A2 ‡JSR‚READ3B ‡LDAA#A1 ‡LDAB#A2 ‡JSR‚FPPFLT ‡BRA‚PRIN1 * IFIXƒJSR‚SETUP1 ‡JSR‚FPPFIXFLOATINGPOINTTOINTEGER ‡LDAA#'ŠOUTPUTBLANKCHARACTER ‡JSR‚OUTCH ‡LDAA#A1 ‡JSR‚WRIT3B ‡JMP‚LOOP * NEGATEJSR‚SETUP1 ‡JSR‚FPPNEGFLOATINGPOINTNEGATE ‡BRA‚PRIN1 * CLEAR‚LDAA#A1 ‡JSR‚FPPCLR ‡BRA‚PRIN1 * *†EXECUTIONREPETITIONLOOP PRINT‚STX‚ROUADD†SAVETHESUBROUTINEADDRESS ‡LDAA#A3 ‡LDAB#A1 ‡JSR‚FPPCPY†A3=A1 * *†INITIALIZEOUTSIDELOOP * ‡LDAA#2 ‡STAAL1 LOOP1‚DEC‚L1ŠSTARTOFOUTSIDELOOP ‡BNE‚LOOPA ‡BRA‚PRIN1‡GETOUTOFEXECUTIONLOOP * *†INITIALIZEINNERLOOP * LOOPA‚LDAA#2 ‡STAAL2 LOOP2‚DEC‚L2ŠDECREMENTINNERLOOPCOUNTER ‡BNE‚LOOPB ‡BRA‚LOOP1‡INNERLOOPDONESOBACKTOOUTERLOOP * *†EXECUTIONSECTION * LOOPB‚LDAA#A1 ‡LDAB#A3 ‡JSR‚FPPCPY†A1=A3 ‡LDAA#A1 ‡LDAB#A2 ‡LDX‚ROUADD†SETUPROUTINEADDRESS ‡JSR‚0,X ‡BRA‚LOOP2 * *†PRINTRESULTS * PRIN1‚JSR‚NEWLIN ‡LDAA#A1“SETUPADDRESSOFRESULTS ‡JSR‚WRIT3BPRINTRESULTS ‡LDAA#' ‡JS2 R‚OUTCH ‡LDAA#A1 ‡JSR‚FPST’PRINTRESULTINDECIMALFORMAT ‡JMP‚LOOP’GOGETNEXTOP-CODE ‡PAGE * * *†SETUP1,SETUP2 * * SETUP1JSR‚QUERY ‡LDAA#A2 ‡JSR‚STFP ‡LDAA#A2 ‡JSR‚WRIT3B ‡BRA‚SUREG‘SETUPPOINTERSINREG'S * SETUP2JSR‚QUERY‘NEWLINE,QMONTTY ‡LDAA#A1“ARG1TOA1 ‡JSR‚STFP ‡LDAA#A1 ‡JSR‚WRIT3B ‡JSR‚QUERY ‡LDAA#A2“ARG2TOA2 ‡JSR‚STFP ‡LDAA#A2 ‡JSR‚WRIT3B SUREG‚LDAA#A1“SETUPADDRESSINAREG ‡LDAB#A2“SETUPADDRESSINBREG ‡RTS˜RETURN * * *†READ3CONSECUTIVEBYTES(6CHARACTERS) *†ONENTRYTHESTORAGEADDRESSISINTHEAREG *†CHARACTERTOHEXCONVERSIONISPERFORMEDANDTHE *†BYTESPUTAWAY. * READ3BPSHA—PUTTHEMEMORYADDRESSONTHESTACK ‡CLRA ‡PSHA * *†SETUPTHEOUTERLOOPTOGOFROM3TO1 * ‡LDAA#3 ‡PSHA READ31LDAA#2”SETUPINNERLOOPTOGOTWICE ‡PSHA ‡CLRB—USEBREGTOMERGEHEXCHARACTERS READ32JSR‚INCH’GETCHARACTERFROMTTY ‡CMPA#'0“ISCHRCODELTASC'0' ‡BLT‚READ33YES ‡CMPA#'9“ISCHRCODEGTASC'9' ‡BGT‚READ33YES ‡SUBA#'0“SUBTRACTCODEFORASC'0' ‡BRA‚READ34GOTOMERGESECTION READ33CMPA#'A“ISCHARCODELTASC'A' ‡BLT‚READ35YES,INVALIDCHARACTER ‡CMPA#'F“ISCHARCODEGTASC'F' ‡BGT‚READ35YES,INVALIDCODE ‡SUBA#'A“SUBTRACTCODEFORASC'A' ‡ADDA#10“ADD10 READ34ASLB—MERGEAREGWITHBREG ‡ASLB ‡ASLB ‡ASLB ‡ABA˜MERGE ‡TAB˜PUTRESULTINBREG ‡TSX˜INDEXREGTOTOPOFSTACK ‡DEC‚0,X“DECREMENTINNERLOOPCOUNTER ‡TST0,X”ISINNERLOOPCNTRPOS? ‡BGT‚READ32YES,CONTINUELOOPING * *†PUTTHECHARACTERAWAY * ‡LDX‚2,X“GETADDRESSOFFTHESTACK ‡STAB0,X“STOREMERGEDRESULT ‡TSX˜INDESTOTOPOFSTACK ‡INC‚3,X“INCLSBOFMEMORYADDRESS ‡INS˜REMOVEINNERLOOPCNTRFRMSTACK ‡DEC‚1,X‰DECREMENTOUTERLOOPCOUNTER ‡TST‚1,X‰ISOUTERLOOPCNTRPOSITIVE ‡BGT‚READ31YES,GOGETNEXTBYTE ‡INS˜CLEANUPSTACK ‡INS ‡INS ‡RTS˜RETURN * *†INVALIDCHARACTER * READ35LDAA#'X“OUTPUTAN'X'CHARACTER ‡JSR‚OUTCH ‡BRA‚READ32REREADCHARACTER * * *†WRITETHREECONSECUTIVEBYTES * * WRIT3BPSHA—PUSHDATAPOINTERONTOSTACK ‡CLRA ‡PSHA ‡LDAA#3”SETOUTERLOOPTOGO3TIMES ‡PSHA ‡DES˜ALLOCATESPACEONSTACKFORL2CNTR WRIT31TSX˜INDEXTOTOPOFSTACK ‡LDX‚2,X“GETDATAPOINTER ‡LDAB0,X“DATATOBREG ‡TSX˜INDEXTOTOPOFSTACK ‡INC‚3,X“INCREMENTBYTEPONNTER ‡LDAA#1”INNERLOOPINITIALIZATION ‡STAA0,X * WRIT32TBA˜UNPACKFOURBITS,BREGTOAREG ‡TST‚0,X“ISINNERLOOPEQUALTOZERO? ‡BEQ‚WRIT35YES,SKIPSHIFTOPERATION ‡LSRA—LOGICSHIFTRIGHTFOURTIMES ‡LSRA ‡LSRA ‡LSRA WRIT35ANDA#15“MASKOUT4MOSTSIGNIFICANTBITS *†UNPACKINGCOMPLETE ‡CMPA#10“IS4-BITFIELDLT10? ‡BLT‚WRIT33YES(DIGIT0-9) ‡SUBA#10“NO(LETTERA-F) ‡ADDA#'A“ADDASCII'A'CODETORESULT ‡BRA‚WRIT34GOTOOUTPUTSECTION WRIT33ADDA#'0“ADDASCII'0'CODETORESULT WRIT34JSR‚OUTCH‘OUTPUTCHARACTER ‡TSX˜INDEXTOTOPOFSTACK ‡DEC‚0,X“INNERLOOPTEST ‡TST‚0,X“ISINNRLOOPCNTRGE0? ‡BGE‚WRIT32YES,CONTINUEWITHLOOP ‡DEC‚1,X“OUTERLOOPTEST ‡TST‚1,X“ISOUTERLOOPCNTRGT0? ‡BGT‚WRIT31YES,GETNEXTBYTE ‡INS˜CLEANUPSTACK ‡INS ‡INS ‡INS ‡RTS˜RETURN * * *†QUERYSUBROUTINE * * QUERY‚JSR‚NEWLINCAUSETTYTOSPACETONEWLINE ‡LDAA#'?“OUTPUTQUESTIONMARK ‡JSR‚OUTCH ‡RTS * * *†NEWLINE * * NEWLINLDAA#13“OUTPUTCARRIAGERETURN ‡JSR‚OUTCH ‡LDAA#10“OUTPUTLINEFEED ‡JSR‚OUTCH ‡RTS˜RETURN ‡PAGE * * *†STRINGTOFLOATINGPOINTROUTINE * * STFPƒPSHA—PUSHDATAADDRESSO3 NTOSTACK ‡CLRA ‡PSHA ‡PSHA—STFPDP=0(DECPNTFLAG) ‡PSHA—STFPSG=0(NEGATIVESIGNFLAG) ‡LDX‚#0 ‡JSR‚PSH4’STFPA1=0.0 ‡LDX‚#$4000 ‡LDAA#1 ‡JSR‚PSH4’STFPA2=1.0 ‡JSR‚PSH4’STFPA3=??? ‡LDX‚#$5000 ‡LDAA#4 ‡JSR‚PSH4’STFPA4=10.0 ‡TSX˜INDEXPOINTSTOTOPOFSTACK * *†STACKOFFSETDEFINITIONS * STFPA4EQU‚1 STFPA3EQU‚5 STFPA2EQU‚9 STFPA1EQU‚13 STFPSGEQU‚16”NEGATIVESIGNFLAG STFPDPEQU‚17”DECIMALPOINTFLAG STFPRSEQU‚18”RESULTADDRESS * *†CHARACTERPROCESSINGLOOP * STFP1‚JSR‚INCH’GETACHARACTERINTOAREG ‡CMPA#$A“LINEFEEDCHARACTER ‡BEQ‚STFP4‘YES ‡CMPA#'-“MINUSSIGN ‡BNE‚STFP2‘NO ‡INC‚STFPSG,XŽYES,SETNEGATIVESIGNFLAG ‡BRA‚STFP1 STFP2‚CMPA#'.“DECIMALPOINT ‡BNE‚STFP3‘NO ‡INC‚STFPDP,XŽSETDECIMALPOINTFLAG ‡BRA‚STFP1 STFP3‚CMPA#$40ˆ$40ISCODEFOR10 ‡BPL‚STFP1 ‡CMPA#'0 ‡BMI‚STFP1 * *†DIGITDETECTED * ‡SUBA#'0“SUBTRACTCODEFORZERO ‡STAASTFPA3+1,XŒSTOREINTEGERINA3 ‡CLR‚STFPA3,X ‡LDAASTFPA3-1,X ‡TAB ‡JSR‚FPPFLTA3=FLOAT(A3) ‡TSX˜RESTOREINDEX ‡LDAASTFPA1-1,X ‡LDABSTFPA4-1,X ‡JSR‚FPPMULA1=A1*10.0 ‡TSX ‡LDAASTFPA1-1,X ‡LDABSTFPA3-1,X ‡JSR‚FPPADDA1=A1+A3 ‡TSX ‡TST‚STFPDP,XŽISDECIMALPOINTFLAGSET ‡BLE‚STFP1‘NO ‡LDAASTFPA2-1,XŒYES,CALCULATEPWROF10. ‡LDABSTFPA4-1,X ‡JSR‚FPPMULA2=A2*10. ‡TSX ‡BRA‚STFP1 * *†CLEANUP * STFP4‚LDAASTFPA1-1,X ‡LDABSTFPA2-1,X ‡JSR‚FPPDIVA1=A1/A2 ‡TSX ‡TST‚STFPSG,X ‡BEQ‚STFP5 ‡LDAASTFPA1-1,XŒSIGNFLAGSET ‡TAB ‡JSR‚FPPNEGA1=-A1 ‡TSX STFP5‚LDAASTFPA1,XŽMOVETORESULTAREA ‡LDABSTFPA1+1,X ‡LDX‚STFPRS,X ‡STAA0,X ‡STAB1,X ‡TSX ‡LDAASTFPA1+2,X ‡LDX‚STFPRS,X ‡STAA2,X ‡LDAA#20 STFP6‚INS ‡DECA ‡BGT‚STFP6‘LOOPTOCLEANUPTHESTACK ‡RTS ‡PAGE * * *†FLOATINGPOINTTOSTRINGCONVERSIONROUTINE * * FPSTƒPSHA—VALUEADDRESSONTOSTACK ‡CLRA ‡PSHA ‡TSX˜INDEXTOTOPOFSTACK ‡LDAA#5 ‡PSHASD=5 ‡PSHADP=5 ‡LDX‚0,X“GETVALUEONTOTHESTACK ‡LDAA2,X“EXPONENTINTOTHEAREG ‡LDX‚0,X“MANTISSAINTOTHEINDEXREG ‡JSR‚PSH4’A1=INPUTVALUE ‡LDX‚#$5000 ‡LDAA#4 ‡JSR‚PSH4’A2=10. ‡LDX‚#$4E20 ‡LDAA#14 ‡JSR‚PSH4ˆA3=10000. ‡LDX‚#$61A8 ‡LDAA#$11 ‡JSR‚PSH4ˆA4=100000. ‡JSR‚PSH4’A5=SCRATCH ‡TSXŽRESTOREINDEX * *†STACKOFFSETDEFINITIONS * FPSTA5EQU‚1 FPSTA4EQU‚5 FPSTA3EQU‚9 FPSTA2EQU‚13 FPSTA1EQU‚17 FPSTDPEQU‚20 FPSTSDEQU‚21 FPSTVLEQU‚22 * ‡TST‚FPSTA1,XŽTESTINPUTVALUE ‡BEQ‚FPST1‘BRANCHIFZERO ‡BMI‚FPST2‘BRANCHIFNEGATIVE ‡BRA‚FPST3‘NUMBERISREADYTOBESCALED * *†ZEROVALUE * FPST1‚LDAA#'0“PRINTASINGLEZERO ‡JSR‚OUTCH ‡JMP‚FPST10GOCLEANUPSTACK * *†NEGATIVENUMBER * FPST2‚LDAA#'-“PRINTMINUSSIGN ‡JSR‚OUTCH ‡LDAAFPSTA1-1,X ‡TAB ‡JSR‚FPPNEGA1=-A1 ‡TSX * *†NORMALIZINGLOOP * FPST3‚LDAAFPSTA1-1,X ‡LDABFPSTA3-1,X ‡JSR‚FPPCMPTEST(A1-10000.) ‡TSX˜RESETINDEX ‡BPL‚FPST4‘BRANCHIFZEROORPOSITIVE ‡LDAAFPSTA1-1,X ‡LDABFPSTA2-1,X ‡JSR‚FPPMULA1=A1*10. ‡TSX ‡DEC‚FPSTDP,XŽDP=DP-1 ‡BRA‚FPST3‘CONTINUELOOP * FPST4‚LDAAFPSTA1-1,X ‡LDABFPSTA4-1,X ‡JSR‚FPPCMPTEST(A1-100000.) ‡TSX ‡BMI‚FPST5‘BRANCHIFNEGATIVE ‡LDAAFPSTA1-1,X ‡LDABFPSTA2-1,X ‡JSR‚FPPDIVA1=A1/10. ‡TSX ‡INC‚FPSTDP,XŽDP=DP+1 ‡BRA‚FPST4‘CONTINUELOOP * *†TESTTOSEEIFDPANDLEADINGZEROSARENEEDED * FPST5‚TST‚FPSTDP,XŽISDPCNTNEGATIVE ‡BPL‚FPST7‘NO ‡LDAA#'.“OUTPUTDECIMALPOINT ‡JSR‚OUTCH FPST6‚LDAA#'0“OUTPUTLEADINGZEROS ‡JSR‚OUTCH ‡INC‚FPSTDP,X ‡BMI‚FPST6 ‡LDAA#$FF’RESETDPCNTTONEGATIVEVALUE ‡STAAFPSTDP,X * *†LOOPTOPRINTFIVESIGNIFICANTDI4 GITS * FPST7‚DEC‚FPSTSD,XŽSD=SD-1 ‡BMI‚FPST9‘GETOUTIF5SDHAVEGONE ‡TST‚FPSTDP,XŽSHOULDDECIMALBEOUTPUT? ‡BNE‚FPST8‘NO ‡LDAA#'.“OUTPUTDECIMALPOINT ‡JSR‚OUTCH FPST8‚DEC‚FPSTDP,XŽDP=DP-1 ‡LDAAFPSTA5-1,XŒDATASINK ‡LDABFPSTA1-1,XŒDATASOURCE ‡JSR‚FPPCPYA5=A1 ‡TSX ‡LDAAFPSTA5-1,X ‡LDABFPSTA3-1,X ‡JSR‚FPPDIVA5=A5/A3 ‡TSX ‡LDAAFPSTA5-1,X ‡TAB ‡JSR‚FPPFIXA5=IFIX(A5) ‡TSX ‡LDAAFPSTA5+1,XŒOUTPUTDIGIT ‡ADDA#'0“ADDCHARACTERCODEFORZERO ‡JSR‚OUTCH ‡LDAAFPSTA5-1,X ‡TAB ‡JSR‚FPPFLTA5=FLOAT(A5) ‡TSX ‡LDAAFPSTA5-1,X ‡LDABFPSTA3-1,X ‡JSR‚FPPMULA5=A5*A3 ‡TSX ‡LDAAFPSTA1-1,X ‡LDABFPSTA5-1,X ‡JSR‚FPPSUBA1=A1-A5 ‡TSX ‡LDAAFPSTA3-1,X ‡LDABFPSTA2-1,X ‡JSR‚FPPDIVA3=A3/10. ‡TSX ‡JMP‚FPST7‘CONTINUELOOP * *†OUTPUTTRAILINGZEROS,IFNECESSARY * FPST9‚TST‚FPSTDP,XŽARETRAILINGZEROSREQUIRED? ‡BLE‚FPST10NO ‡DEC‚FPSTDP,X ‡LDAA#'0“OUTPUTZERO ‡JSR‚OUTCH ‡BRA‚FPST9‘CONTINUELOOP * *†CLEANUPSECTION * FPST10LDAA#24 FPST11INS˜INCREMENTSTACKPOINTER ‡DECA—DECREMENTCOUNT ‡BGT‚FPST11CONTINUEWHILECOUNTISPOSITIVE ‡RTS˜RETURNTOCALL ‡PAGE * *†ROUTINETOPUSHFOURBYTESONTHESTACK.‚NOTREENTRANT. *†PUSHESEXPONENT(FROMAREG),LSBYTE,MSBYTEOFMANTISSA *†FOLLOWEDBYAPOINTERTOMSBYTEOFTHEMANTISSA * PSH4ƒSTX‚PSH4T1SAVETHEMANTISSA ‡TSX˜INDEXTOTOPOFSTACK ‡LDX‚0,X“RETURNADDRESSTOINDEX ‡STX‚PSH4T2SAVETHERETURNADDRESS ‡INS˜BACKUPTHESTACK ‡INS ‡PSHA—PUSHEXPONENTONTOSTACK ‡LDAAPSH4T1+1ŽLSBYTEOFMANTISSA ‡PSHA—ONTOTHESTACK ‡LDAAPSH4T1MSBYTEOFMANTISSAONTOTHESTACK ‡PSHA ‡TSX˜INDEXTOTOPOFSTACK ‡STX‚PSH4T1TRANSFERPOINTERTOMEMORY ‡LDAAPSH4T1+1ŽGETLSBYTEOFPOINTER ‡PSHA—PUSHONTOSTACK ‡LDX‚PSH4T2GETTHERETURNADDRESS ‡JMP‚0,X“RETURNTOCALL ‡PAGE * * *†FLOATINGPOINTCOMPARE * *†THISPROGRAMISNOTREENTRANT.‚TOMAKEITREENTRANT,THE *†INTERRUPTSYSTEMMUSTBEDISABLEDWHENTHEMEMORYADDRESS *†PSH4T1ISBEINGUSED. * FPPCMPPSHA—COPYFIRSTARGUMENTONTOSTACK ‡CLRA ‡PSHA ‡TSX ‡LDX‚0,X ‡LDAA2,X ‡PSHA ‡LDAA1,X ‡PSHA ‡LDAA0,X ‡PSHA ‡TSX ‡STX‚PSH4T1INDEXTOSCRATCHMEMORY ‡LDAAPSH4T1+1ŽGET8BITADDRESSBACKTOAREG *†BREGSETUPBYCALLINGPROGRAM,ANDNOTDISTURBED ‡JSR‚FPPSUBDESTRUCTIVESUBTRACT ‡TSX ‡LDAA0,X“MSBOFMANTISSATOAREG ‡INS˜CLEANUPSTACK ‡INS ‡INS ‡INS ‡INS ‡TSTA—SETSTATUSBITSFORRESULT ‡RTS˜RETURN ‡PAGE * * *†COPYFLOATINGPOINTWORD * * FPPCPYPSHB—SOURCEADDRESSONTOSTACK ‡CLRB ‡PSHB ‡PSHA—PUSHSINKADDRESSONTOSTACK ‡PSHB ‡TSX ‡LDX‚2,X“SOURCEADDRINTOX ‡LDAA0,X“MANTIXSAINTOAANDBREG ‡LDAB1,X ‡TSX˜NOW,TRANSMITMANTISSA ‡LDX‚0,X ‡STAA0,X ‡STAB1,X ‡TSX˜NOWGETEXPONENT ‡LDX‚2,X ‡LDAA2,X ‡TSX ‡LDX‚0,X ‡STAA2,X ‡INS ‡INS ‡INS ‡INS ‡RTS˜RETURNTOCALL ‡PAGE * *†FLOATINGPOINTNUMBERCONSISTSOF3CONSECUTIVEBYTES *ˆBYTE0-MSBYTEOF16BIT2'SCOMPLEMENTMANTISSA *ˆBYTE1-LSBYTEOFMANTISSA *ˆBYTE2-8BIT2'SCOMPLEMENTBINARYEXPONENT * * * *†FLOATINGPOINTSUBTRACT * * FPPSUBJSR‚FPPASUSETUPARGS ‡TSX˜SETINDEXTOTOPOFSTACK ‡INX˜SETINDEXTOARG2 ‡INX ‡INX ‡INX ‡INX ‡INX ‡JSR‚FPPNE1NEGATEARGUMENT2 ‡BRA‚FPPAD0 * * *†BASICNEGATIONROUTINE * * FPPNE1PSHA—SAVEAREG ‡PSHB—SAVEBREG ‡LDAA0,X“MANTISSATOAANDBREG'X ‡LDAB1,X ‡COMA—TAKETWO'SCOMPLEMENT ‡NEGB ‡BCS‚FPPNE2 ‡INCA FPPNE2CMPA#$80’CHECKFORSPECIALCASE$8000 ‡BNE‚FPPNE3 ‡CMPB#$00 ‡BNE‚FPPNE3 5 ‡CLC˜SPECIALCASEFOUND,CLEARCARRY ‡RORA—SHIFTMANTISSARIGHT ‡RORB ‡INC‚2,X“INCREMENTEXPONENT FPPNE3STAA0,X“STORERESULTS ‡STAB1,X ‡PULB—RESTOREBREG ‡PULA—RESTOREAREG ‡RTS˜RETURN ‡PAGE * * *†SUBROUTINEFORROUNDING,ANDFOROVERFLOWNORMALIZATION * * *†ONENTRY,ANON-ZEROBREGMEANSROUNDINGISREQUIRED * FPPRNDTSTBISROUNDINGREQUIRED? ‡BEQ‚FPPRN9†NO,SORETURN FPPRN1TST‚0,X‰YES,ISNUMBERPOSIBIVEORNEGATIVE? ‡BPL‚FPPRN2†NUMBERISPOSITIVEORZERO ‡TST‚1,X‰NUMBERISNEGATIVE,ISLSBZERO? ‡BEQ‚FPPRN3†YES ‡DEC‚1,X‰NO(NOBORROWGENERATED) ‡RTSŽRETURN FPPRN3DEC‚1,X‰BORROWWILLBEGENERATED ‡DEC‚0,X‰SODECREMENTMSBALSO ‡BRA‚FPPRN4†GOCHECKFOROVERFLOW FPPRN2INC‚1,X‰NUMBERISPOSITIVESOROUNDUP ‡BNE‚FPPRN9†GETOUTSINCETHEREISNOCARRY ‡INC‚0,X‰CARRYSET,SOINCRMTMSB FPPRN4BVC‚FPPRN9†CHKFOROVFLW,GETOUTIFCLEAR * *†OVERFLOWHANDLINGENTRYPOINT * FPPOVFINC‚2,X‰INCREMENTEXPONENT ‡TST‚0,X‰POSORNEGOVFLW,CARRY=0 ‡BMI‚FPPRN5†BRANCHFORPOSITIVEOVERFLOW ‡SECŽNEGATIVEOVERFLOWSOSETCARRY FPPRN5ROR‚0,X‰ROTATERIGHTMSBOFMANTISSA ‡ROR‚1,X‰ROTATERIGHTLSBOFMANTISSA ‡BCS‚FPPRN1†SEEIFFURTHERROUNDINGREQUIRED FPPRN9RTSŽRETURNTOCALL ‡PAGE * * *†FLOATINGPOINTADDITION * * FPPADDJSR‚FPPASUSETUPARGUMENTSONSTACK FPPAD0TSX‚SETINDEXTOTOPOFSTACK ‡TST‚FPPAR2,XŽISARG2ZERO? ‡BEQ‚FPPMO0YES,RETURNARG1 ‡TST‚FPPAR1,XŽNO,ISARG1ZERO ‡BEQ‚FPPRT2YES,RETURNARG2 ‡LDAAFPPAR1+2,XŒFORMDIFFERENCEOFEXPONENTS ‡SUBAFPPAR2+2,X ‡STAAFPPEXD,XŽPUTITONTHESTACK ‡CMPA#15“ISDIFFGT15? ‡BGT‚FPPMO0YES,RETURNARG1 ‡CMPA#0-15‘NO,ISDIFFLT-15? ‡BLT‚FPPRT2YES,RETURNARG2 ‡TSTA—NO,ISARG2GTARG1? ‡BGT‚FPPAD1†SETINDEXTOARG2ONSTACK ‡BEQ‚FPPAD2EXPONENTSAREEQUAL ‡INX ‡INX ‡INX ‡INX ‡INX ‡NEGA FPPAD1INX˜ADJUSTINDEXTOARGUMENTTOBESHIFTED ‡INX ‡INX ‡INX ‡INX ‡INX ‡BRA‚FPPSFTSHIFTSMALLERARGUMENT FPPAD2TSX˜RESTOREINDEXTOTOPOFSTACK * *†ADDITIONOFMANTISSAS * ‡LDAAFPPAR1+2,X ‡STAAFPPRES+2,XŒSTORETHEEXPONENT ‡LDAAFPPAR1+1,X ‡ADDAFPPAR2+1,X ‡STAAFPPRES+1,XŒSTORELSBOFMANTISSA ‡LDABFPPAR1,X„ADDMSBOFMANTISSAS,USEBREG ‡ADCBFPPAR2,X ‡TPAŽSAVEVINTHAREG ‡STABFPPRES,X„STORETHERESULT ‡TAPŽRESTORETHEVBIT ‡BVC‚FPPNOR†NORMALIZEIFNOOVERFLOW ‡INXŽSETINDEXTORESULT ‡INX ‡INX ‡JSR‚FPPOVF†GOTOOVERFLOW-ROUNDINGROUTINE ‡TSXŽRESTOREINDEXREG ‡BRA‚FPPNOR†GOTONORMALIZATIONROUTINE * *†RETURNARGUMENT2ASRESULT * FPPRT2LDAAFPPAR2,XŽMOVE3BYTESTOFPPRESONSTACK ‡STAAFPPRES,X ‡LDAAFPPAR2+1,X ‡STAAFPPRES+1,X ‡LDAAFPPAR2+2,X ‡STAAFPPRES+2,X ‡BRA‚FPPMOVMOVERESULTTOARG1MEMORYLOCATION * *†ROUTINETOSHIFTMANTISSARIGHTANDADJUSTEXPONENT * *†AREGISTERCONTAINSSHIFTCOUNT,ANDINDEXPOINTSTOQUANTITY *ˆTOBEADJUSTED * FPPSFTCLRBSETBTOINDICATENOROUNDING FPPSF1TSTASEEIFFURTHERSHIFTINGREQUIRED ‡BEQ‚FPPSF2†NONEREQUIRED,SOGOTOROUNDINGSECTION ‡DECA—DECREMENTCOUNT ‡INC‚2,X“INCREMENTEXPONENT ‡ASR‚0,X“ARITHSHIFTRIGHMSBOFMANTISSA ‡ROR‚1,X“ROTATERIGHTLSBOFMANTISSA ‡BCC‚FPPSFT†SETBREGACCORDINGTOSTATEOFCARRYBIT ‡LDAB#1 ‡BRA‚FPPSF1†CONTINUELOOP FPPSF2JSR‚FPPRND†SEEIFROUNDINGREQUIRED ‡BRA‚FPPAD2†GETOUTOFTHISROUTINE * FPPMO0BRA‚FPPMO1DUMMYTOEXTENDBRANCHINGRANGE * ‡PAGE * *†NORMALIZATIONROUTINE(SHIFTMANTISSALEFTUNTILTWOMS *ˆBITSAREDIFFERE6 NT.‚DONOTNORMALIZEZERORESULT) * FPPNORTST‚FPPRES,XŽISMSBOFMANTISSAZERO ‡BNE‚FPPNO1NO,SONORMALIZE ‡TST‚FPPRES+1,XŒISLSBOFMANTISSAZERO? ‡BEQ‚FPPMOVYES,DONOTNORMALIZE * *†STARTOFREGULARNORMALIZATION * FPPNO1LDAAFPPRES,XŽISSIGNBITCLEAR? ‡BGE‚FPPNO2YES,CHECKFORBIT6SET ‡ROLA—NO,ISBIT6CLEAR ‡BMI‚FPPNO3†NO,GOTOSHIFTLEFTROUTINE ‡BRA‚FPPMOV†YES,NORMALIZATIONCOMPLETE FPPNO2ROLA—SIGNBITCLEAR,ISBIT6SET? ‡BMI‚FPPMOV†YES,NORMALIZATIONCOMPLETE * *†ROUTINETOSHIFTRESULTLEFTONEPLACE * FPPNO3ASL‚FPPRES+1,X ‡ROL‚FPPRES,XŽROTATELEFTMSBOFMANTISSA ‡DEC‚FPPRES+2,XŒDECREMENTEXPONENT ‡BRA‚FPPNO1BACKTOSTARTOFLOOP * * *†MOVERESULTFROMSTACKINTOMEMORY * FPPMOVLDAAFPPRES,X ‡LDABFPPRES+1,X ‡LDX‚FPPPA1,X ‡STAA0,X ‡STAB1,X ‡TSX ‡LDAAFPPRES+2,X ‡LDX‚FPPPA1,X ‡STAA2,X * *†CLEANUPSTACK * FPPMO1LDAA#FPPRTN+2 FPPMO2INS˜INCREMENTSTACKPOINTER ‡DECA—DECREMENTCOUNT ‡BGT‚FPPMO2LOOPTEST ‡RTS˜RETURNFROMSUBROUTINE ‡PAGE * * *†FLOATINGPOINTMULTIPLY * * FPPMULJSR‚FPPASUSETUPARGUMENTSONSTACK ‡TSX˜SETINDEXTOTOPOFSTACK ‡JSR‚FPPSMDPROCESSARGUMENTS ‡TSX˜SETINDEXTOTOPOFSTACK ‡STABFPPSGN,XŽSTORETHESIGNFLAG ‡LDAAFPPAR1+2,XŒADDEXPONENTSAND ‡ADDAFPPAR2+2,XŒSTOREINTHE ‡DECAADJSTEXPONENTTOACCOUNTFORSHIFTWHICHFOLLOW ‡STAAFPPCRY,X„SAVETHERESULTEXPONENTONSTACK * *†MULTIPLYMANTISSAS * ‡ASL‚FPPAR2+1,X ‡ROL‚FPPAR2,X„ROTATEARG2TOSAVEABITOFSIGNIFICANCE ‡CLR‚FPPAR1+2,X‚CLEAR3RDBYTEOFARG1 ‡CLR‚FPPRES,X„CLEARRESULTLOCATION(24BITACCUMULATOR) ‡CLR‚FPPRES+1,X ‡CLR‚FPPRES+2,X ‡LDAA#15“INITIALIZETHE ‡STAAFPPCNT,XŽLOOPCOUNT FPPMU1ASL‚FPPAR2+1,XŒSHIFTARG2MANTISSALEFT ‡ROL‚FPPAR2,XŽISCARRYSET? ‡BCC‚FPPMU2NO,SKIPADDOPERATION ‡LDAAFPPRES+2,X ‡ADDAFPPAR1+2,X ‡STAAFPPRES+2,X ‡LDAAFPPRES+1,X ‡ADCAFPPAR1+1,X ‡STAAFPPRES+1,X ‡LDAAFPPRES,X ‡ADCAFPPAR1,X ‡STAAFPPRES,X FPPMU2LSR‚FPPAR1,XŽSHIFTARG1MANTISSARIGHT ‡ROR‚FPPAR1+1,X ‡ROR‚FPPAR1+2,X ‡DEC‚FPPCNT,XŽDECREMENTLOOPCOUNT ‡TST‚FPPCNT,XŽISLOOPFINISHED? ‡BGT‚FPPMU1NO,GOBACKTOSTARTOFLOOP ‡TST‚FPPRES,X„ISSIGNBITSET? ‡BLE‚FPPMU8†YES,ORPOSSIBLYZERORESULT FPPMU3DEC‚FPPCRY,X„DECREMENTEXPONENT ‡ASL‚FPPRES+2,X‚SHIFTRESULTMANTISSALEFT ‡ROL‚FPPRES+1,X ‡ROL‚FPPRES,X ‡BPL‚FPPMU3†CONTINUEUNTILSIGNBITSET FPPMU8LDAAFPPCRY,X„MOVEEXPONENT ‡STAAFPPRES+2,X FPPMU6TST‚FPPRES,X„CHECKFORZERORESULT ‡BPL‚FPPMU7†SKIPOVERFLOWOPERATIONFORZERORESULT ‡INXŽADJUSTFOROVFLW,ANDROUNDRESULT ‡INXŽSETINDEXTOFPPRES ‡INX ‡JSR‚FPPOVF†CALLOVERFLOWROUTINE ‡TSX FPPMU7TST‚FPPSGN,XŽISTHERESULTNEGATIVE? ‡BEQ‚FPPMU4NO,SKIPCOMPLEMENTINGOPERATION ‡INX˜YES,NEGATERESULT ‡INX ‡INX˜INDEXTOFPPRES ‡JSR‚FPPNE1NEGATIONROUTINE ‡TSX˜RESTOREINDEX FPPMU4JMPFPPNOR‘GOTONORMALIZINGROUTINE ‡PAGE * * *†FLOATINGPOINTDIVIDE * * FPPDIVJSR‚FPPASUSETUPARGSONSTACK ‡TSX˜INDEXTOTOPOFSTACK ‡TST‚FPPAR2,XŽISDIVISORZERO? ‡BEQ‚FPPZDVYES,PROCESSSPECIALCASE ‡JSR‚FPPSMDPROCESSARGS1&2 ‡TSX˜SETINDEXTOTOPOFSTACK ‡STABFPPSGN,XŽSTORETHESIGNFLAG ‡LDAAFPPAR1+2,XŒFORMDIFFERENCEOFEXPONENTS ‡SUBAFPPAR2+2,X ‡STAAFPPRES+2,XŒPUTEXPONENTAWAY ‡LDAA#16“INITIALIZETHE ‡STAAFPPCNT,XŽLOOPCOUNTER * *†LOGICTOMAKESURE16BITSOFQUOTIENTARECOMPUTED * ‡LDAAFPPAR1,X„COMPUTEDIFFERENCEFOUNDFIRSTTIMEAROUNDLOOP ‡LD7 ABFPPAR1+1,X ‡SUBBFPPAR2+1,X ‡SBCAFPPAR2,X ‡TSTAISREMAINDERNEGATIVE? ‡BPL‚FPPDI4†NO,LEADINGBITIS1 ‡ASL‚FPPAR1+1,X‚YES,LEADINGBITISZERO ‡ROL‚FPPAR1,X„SOSHIFTNUMERATORMANTISSALEFTONEPLACE ‡DEC‚FPPRES+2,X‚DECREMENTEXPONENTOFRESULT * *†MAINDIVISIONLOOP * FPPDI1LDAAFPPAR1,XŽLOADREMAINDER ‡LDABFPPAR1+1,XŒWHICHSTARTSASTHENUMERATOR ‡SUBBFPPAR2+1,XŒSUBTRACTDIVISOR ‡SBCAFPPAR2,X ‡TSTA—ISREMAINDERNEGATIVE?(CARRY=0) ‡BLT‚FPPDI2YES,CARRYISCLEAR,SKIP FPPDI4SECŽNO,SETCARRY FPPDI2ROL‚FPPRES+1,XŒSHIFTCARRYBIT ‡ROL‚FPPRES,XŽINTOTHEQUOTIENT ‡TSTA—ISREMAINDERNEGATIVE? ‡BLT‚FPPDI3YES,GOSHIFTOLDREMLEFT ‡STAAFPPAR1,XŽNO,SOSTORENEWREMAINDER ‡STABFPPAR1+1,X FPPDI3ASL‚FPPAR1+1,XŒSHIFTOLDREMAINDERLEFT ‡ROL‚FPPAR1,X ‡DEC‚FPPCNT,XŽLOOPTEST ‡TST‚FPPCNT,X ‡BGT‚FPPDI1CONTINUELOOPING ‡JMP‚FPPMU6 * FPPZDVLDAA#127’ZERODIVISION,SETQTOMAX ‡STAAFPPRES,XŽPOSITIVEVALUE ‡STAAFPPRES+2,X ‡LDAA#$FF ‡STAAFPPRES+1,X ‡JMP‚FPPMOV ‡PAGE * *†PROCESSTWOARGUMENTS * FPPSMDCLRB—CLEARTHESIGNINDICATOR ‡INX˜SETINDEXTOARG2 ‡INX ‡INX ‡INX ‡INX ‡INX ‡JSR‚FPPPARPROCESSARGUMENT2 ‡INX˜SETINDEXTOARG1 ‡INX ‡INX ‡INX ‡INX ‡JSR‚FPPPARPROCESSARGUMENT1 ‡RTS˜RETURN * *†SUBROUTINETOPROCESSMULARGS * *†INDEXPOINTSTOFPARGUMENT * FPPPARTST‚0,X“ISARGNEGATIVE ‡BGE‚FPPPA0NO,SKIPSIGNCHANGE ‡COMB—COMPLEMENTTHERESULTSIGN ‡JSR‚FPPNE1NEGATEARGUMENT FPPPA0RTSŽRETURN * *†ROUTINETOSETUPARGUMENTSONTHESTACK * *†AREGCONTAINSPOINTERTOARG1 *†BREGCONTAINSPOINTERTOARG2 * *†THEBREGWILLBEUSEDTOCONTROLTHETWOPASSLOOP * FPPASUPSHA—LSBOFADDRESSONTOSTACK ‡CLRA—CLEARAREGISTER ‡PSHA—MSBOFARGADDRESSONTOSTACK ‡TSX˜LOADADDRESSOFARGINTOX ‡LDX‚0,X ‡LDAA2,X“ARGEXPONENTONTOSTACK ‡PSHA ‡LDAA1,X“LSBOFARGMANTISSAONTOSTACK ‡PSHA ‡LDAA0,X“MSBOFARGMANTISSAONTOTHESTACK ‡PSHA ‡TSTB—ISTHEBREGCLEAR? ‡BEQ‚FPPAS2YES,EXITFROMLOOP ‡TBA˜NO,MOVEBREGTOAREG ‡CLRB—CLEARBREGTOINDICATELOOPTERMINATI ‡BRA‚FPPASUREPEATSEQUENCEFORARG2 FPPAS2DES˜LEAVESIX‚ADDITIONALPOSITIONSONSTA ‡DES ‡DES ‡DES ‡DES ‡DES ‡TSX˜SETINDEXTOTOPOFSTACK ‡LDX‚FPPRTN,X ‡JMP‚0,X“RETURN(RTSCANNOTBEUSEDHERE) * *†STACKLOCATIONSYMBOLS * FPPCNTEQU‚0•LOOPCOUNTER FPPCRYEQU‚FPPCNT+1ŽCARRYINDICATOR FPPSGNEQUFPPCRY+1PRODUCT(QUOTIENT)SIGN FPPEXDEQU‚FPPSGNEXPONENTDIFFERENCE FPPRESEQU‚FPPEXD+1ŽRESULTOFOPERATION FPPAR2EQU‚FPPRES+3ŽARG2(DATA) FPPPA2EQU‚FPPAR2+3ŽARG2(POINTER) FPPAR1EQU‚FPPPA2+2ŽARG1(DATA) FPPPA1EQU‚FPPAR1+3ŽARG1(POINTER) FPPRTNEQU‚FPPPA1+2ŽRETURNADDRESS * * *†FLOAT * * FPPFLTJSR‚FPPASUSETUPARGS ‡TSX˜SETINDEXTOTOPOFSTACK ‡LDAA#15“15TOTHEAREG ‡STAAFPPRES+2,XŒSETTHERESULTEXPONENT ‡LDAAFPPAR2,XŽMOVEMANTISSA ‡STAAFPPRES,X ‡LDAAFPPAR2+1,X ‡STAAFPPRES+1,X ‡JMP‚FPPNORGOTONORMALIZINGSECTION * * *†IFIX * * FPPFIXJSR‚FPPASUSETUPARGS ‡TSX˜SETUPINDEXTOTOPOFSTACK ‡LDAAFPPAR2+2,XŒGETEXPONENTINTOAREG FPPFI1CMPA#15“COMPAREEXPONENTWITH15 ‡BEQ‚FPPFI3EQUAL ‡BGT‚FPPFI2LESSTHAN *†EXPONENTISLESSTHAN15SOSHIFTRIGHT ‡INCA—INCREMENTEXPONENT ‡ASR‚FPPAR2,XŽSHIFTMANTISSARIGHT ‡ROR‚FPPAR2+1,X ‡BRA‚FPPFI1CONTINUELOOPING *†EXPONENTGREATERTHAN15SOSHIFTLEFT(ERROR) FPPFI2DECA ‡ASL‚FPPAR2+1,XŒSHIFTMANTISSALEFT ‡ROL‚FPPAR2,X ‡BRA‚FPPFI1CONTI8 NUELOOPING *†EXPONENTEQUALTO15SOSHIFTISCOMPLETE FPPFI3LDAAFPPAR2,XŽTRANSFERRESULTS ‡LDABFPPAR2+1,X ‡LDX‚FPPPA1,X ‡STAA0,X ‡STAB1,X ‡JMP‚FPPMO1GOCLEANUPSTACK * * *†FLOATINGPOINTNEGATE * * FPPNEGJSR‚FPPASUSETUPARGUMENTS ‡TSX˜SETINDEXTOTOPOFSTACK ‡INX˜SETINDEXTOARG2 ‡INX ‡INX ‡INX ‡INX ‡INX ‡JSR‚FPPNE1 ‡TSX˜INDEXTOTOPOFSTACK ‡JMP‚FPPRT2RETURNARG2 * * *†FLOATINGPOINTCLEAR * * FPPCLRPSHA—PUTADDRESSONTOSTACK ‡CLRA ‡PSHA ‡TSX˜INDEXTOTOPOFSTACK ‡LDX‚0,X“GETADDRESSINTOINDEXREG ‡CLR‚0,X“CLEARTHREECONSECUTIVEBYTES ‡CLR‚1,X CLR2,X INSCLEANUPSTACK ‡INS ‡RTS˜RETURN ‡END :: ÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅÅ1n€1NAMBLKJCK *BLACKJACKREV1.5RICKSTERLINGQUADEIGHTELEC.8/16/76 * *NOTETOUSERS,THEREISATIMERINCORPORATEDIN *THISPROGRAM.ITISUSEDTOGENERATEDELAYSDURING *PLAYWHENOPERATINGAT9600BAUD.THOSEOFYOUWHO *AREUSINGSLOWERBAUDRATESMAYWISHTODELETETHIS *FUNCTION. OPTO,NOG DLRTOTEQU$309 PLRTOTEQU$30A DLRSAVEQU$305 PLRSAVEQU$306 PLRACEEQU$307 DLRACEEQU$308 SAVEXEQU$300 DKPNTREQU$302 FLAGEQU$304 RANDNOEQU$100 TEMPEQU$104 DECKEQU$105 ORG$1000 *INITIALIZESTACKPOINTERPRINTMESSAGE *CLEARSCORECLEARCARDMEMORY STARTLDAA#$39 STAA$FCF4 LDS#$FF0 LDX#SHUF JSRPRINT LDX#$3030 STXPLRSCR STXDLRSCR CLRDLRTOT CLRPLRTOT *JUMPTOSHUFFLEROUTINEREPEATUNTIL *KEYPUSHED LOOPCJSRSHUFLE+6 LDAA$FCF4 ASRA BCCLOOPC LDAA$FCF5 LDX#DECK STXDKPNTR *PLAYSTARTSHERE,ALLTEMPREGISTERSARE *CLEARED START1CLRFLAG JSRSCORE CLRPLRACE CLRDLRACE CLRDLRSAV CLRPLRSAV JSRTIME LDX#OVRLY JSRPRINT START2JSRDEAL JSRSCALE JSRPLRCRD JSROUTCD LDX#SPACE JSRPRINT JSRDEAL JSRSCALE JSRDLRCRD LDABFLAG BEQFIRST STAATEMP BRASECOND FIRSTJSROUTCD SECONDLDAA#$A JSRCOUT LDAA#$D JSRCOUT INCFLAG LDAAFLAG CMPA#2 BNESTART2 LDAAPLRSAV CMPA#22 BNENEX1 LDAA#12 STAAPLRSAV DECPLRACE NEX1CMPA#21 BNECKDLR LDX#PLRBKJ JSRPRINT INCPLRTOT JMPSTART1 COUTEQU*CHARATOROUTPUTROUTINE PSHBSAVEBREGISTER LDAB$FCF4CONTROLREG ASRB ASRB BCCCOUT+1 STAA$FCF5OUTPUTCHAR CLRB DECB BNE*-1 PULBRESTOREBREG RTS SCORETSTDLRTOT BEQNEXT1 CLRDLRTOT LDX#DLRSCR BSRBCDADD NEXT1TSTPLRTOT BEQOUT7 CLRPLRTOT LDX#PLRSCR BSRBCDADD OUT7RTS BCDADDLDAA1,X LDABX ANDA#$F ANDB#$F ASLB ASLB ASLB ASLB ABA ADDA#1 DAA TAB ANDB#$F ADDB#$30 STAB1,X LSRA LSRA LSRA LSRA ADDA#$30 STAAX RTS TIMECLRA TIMELLDX#$0000THISVALUEMAYBEADJ.FORDIFFERENTTIMEOUT LOOPTINX BNELOOPT INCA CMPA#5THISVALUEMAYBEADJ.FORDIFFERENTTIMEOUT BNETIMEL RTS CKDLRLDAADLRSAV CMPA#22 BNENEX2 LDAA#12 STAADLRSAV DECDLRACE NEX2CMPA#21 BNEHIT1 LDX#DWNCDM JSRPRINT LDAATEMP J9 SROUTCD LDX#DLRBKJ JSRPRINT INCDLRTOT JMPSTART1 HIT1LDX#HITMES JSRPRINT JSRCIN CMPA#$31 BEQHIT2 JMPDLRNXT HIT2JSRDEAL JSRSCALE JSRPLRCRD JSROUTCD LDAAPLRSAV CMPA#21 BHIBUST1 BRAHIT1 BUST1LDAAPLRACE BEQBUST1A DECPLRACE LDAAPLRSAV SUBA#10 STAAPLRSAV BRAHIT1 BUST1ALDX#DWNCDM JSRPRINT LDAATEMP JSROUTCD LDX#BUST JSRPRINT BRADLRWIN DLRNXTLDX#DWNCDM JSRPRINT LDAATEMP JSROUTCD LDAA#$A JSRCOUT LDAA#$D JSRCOUT DLRNX2LDAADLRSAV CMPA#16 BHISTOP LDX#SPC18 JSRPRINT JSRDEAL JSRSCALE JSRDLRCRD JSROUTCD BRADLRNX2 SCALETAB ANDB#$F INCB CMPB#1 BEQACE CMPB#10 BHITENS RTS ACELDAB#11 RTS TENSLDAB#10 RTS STOPCMPA#21 BHIBUST2 CMPAPLRSAV BHIDLRWIN BEQPUSH PLRWLDX#PLRWIN JSRPRINT INCPLRTOT BRAOUT5 DLRWINLDX#DLRWMS JSRPRINT INCDLRTOT OUT5JMPSTART1 BUST2LDAADLRACE BEQBUST2A DECDLRACE LDAADLRSAV SUBA#10 STAADLRSAV BRADLRNX2 BUST2ALDX#BUST JSRPRINT BRAPLRW PUSHLDX#PUSHM JSRPRINT BRAOUT5 JMPSTART1 OUTCDPSHA ANDA#$F TAB ABA ABA ABA ABA CLRB LDX#CARD STXSAVEX ADDASAVEX+1 ADCBSAVEX STAASAVEX+1 STABSAVEX LDXSAVEX LDAB#5 BSRPRINK LDAA#'/ JSRCOUT PULA ANDA#$30 LSRA LDX#SUIT CLRB STXSAVEX ADDASAVEX+1 ADCBSAVEX STAASAVEX+1 STABSAVEX LDXSAVEX LDAB#8 JSRPRINK RTS PRINKLDAAX JSRCOUT INX DECB BNEPRINK RTS DEALLDXDKPNTR CPX#DECK+52 BNEDECKOK LDX#SHUF2 JSRPRINT INS INS JMPLOOPC DECKOKLDXDKPNTR LDAAX INCDKPNTR+1 RTS PLRCRDCMPB#11 BNEPLRCR1 INCPLRACE PLRCR1ADDBPLRSAV STABPLRSAV RTS DLRCRDCMPB#11 BNEDLRCR1 INCDLRACE DLRCR1ADDBDLRSAV STABDLRSAV RTS SPACEFCC4, FCB$4 CARDFCC'‚ACE‚TWOTHREEFOURFIVE‚SIXSEVEN' FCC'EIGHTNINE‚TENJACKQUEENKING' SUITFCC'SPADES‚HEARTS‚CLUBSƒDIAMONDS' HITMESFCB$A,$D FCB$3F,$1A,$4 BUSTFCB$A,$D,$7 FCC'BUST' FCB,$4 SPC18FCB$A,$D FCC'DEALERDRAWSA„' FCB$4 PLRWINFCB$A,$D,$7 FCC'YOUWIN' FCB$A,$D,$4 DLRWMSFCB$A,$D,$7 FCC'DEALERWINS' FCB$A,$D,$4 PLRBKJFCB$A,$D FCC'BLACKJACK„YOUƒWIN!!' FCB$4 DLRBKJFCB$A,$D FCC'BLACKJACK„I„WIN!!!' FCB$4 PUSHMFCB$A,$D,$7 FCC'PUSH' FCB$4 DWNCDMFCB$A,$D FCC'MYDOWNCARDWAS‚' FCB$4 CINEQU* LDAA$FCF4 ASRA BCCCIN LDAA$FCF5 ANDA#$7F RTS *THISSUB-ROUTINEGENERATESA52CARDDECK SHUFLE‚LDX#SHUF2 JSRPRINT JSRINIT LOOP4JSRRANDOM JSRCHECK JSRLOAD BCCLOOP4 RTS *THISISA32BITRANDOM(PSEUDO)NUMBERGENERATOR *4.29X10^9STATES RANDOM‚LDAARANDNO+3 ORAARANDNO+2 ORAARANDNO+1 ORAARANDNO BNESKIPIFZEROENTERALL1'S COMRANDNO+3 SKIPLDAARANDNO+3 LSRA LSRA LSRA EORARANDNO+3 ASRA ASRA RORRANDNO RORRANDNO+1 RORRANDNO+2 RORRANDNO+3 RTS *MODULO52MASK CHECK‚LDAARANDNO EORARANDNO+1 EORARANDNO+2 EORARANDNO+3 TAB ANDA#$F CMPA#12 BLEOK SUBA#13 OKANDB#$30 ABA RTS *SUBROUTINETOLOADDECKFROMRANDOM#GEN. LOAD‚LDX#DECK LOOP2LDABX BMIENT CBA BEQOUTNG INX CPX#DECK+52 BEQOUTOK BRALOOP2 ENTSTAAX OUTNGCPX#DECK+51 BEQOUTOK CLC RTS OUTOKSEC RTS SHUFFCB$06,06,$0C,,,,,,$A,$D FCC'THISISMOTOROLABLACKJACK......' FCC'.........TRYYOURLUCK.....!' FCB$D,$A FCB6,7 FCC'DEALERMUSTHITON16ORLESSAND' FCC'STANDON: 17.' FCB$D,$A,,,,, FCC'ACESCOUNT1OR11,FACECARDS' FCC'COUNTTEN.' FCB$D,$A,,,,, FCC'BLACKJACKWITHACEANDAFACECARD' FCC'ORTEN' FCB$D,$A,,,,, FCC'TIESCOUNTASAPUSHNOWINNER.' FCB$D,$A,,,,, FCC'DURINGPLAYTYPE1FORAHIT,0TO' FCC'STANDPAT' FCB$D,$A,,,,, SHUF2FCB$D,$A,6,2,, FCC'SHUFFLENOWINPROGRESS.............' FCC'TYPEANYKEYTOHALTANDDEAL' FCB6,1 FCB$D,$A,,,,, FCB$4 PRINTEQU* LDAAX CMPA#$4 BNENOTEND RTS NOTENDJSRCOUT INX BRAPRINT INITEQU*INITIALIZEDECKFORLOAD *ROUTINE,ALLCARDSEQUALFF LDX#DECK LDAA#$FF LOOP7STAAX INX CPX#DECK+52 BNELOOP7 RTS OVRLYFCB$0C,,, FCB$D,$A,,,,, FCC4, FCC'PLAYER' FCC13, FCC'DEALER' FCB$D,$A,,, FCC6, PLRSCRRMB2 FCC17, DLRSCRRMB2 FCB$D,$A,$A,$4 END MON ååååååååååååååååååå; åååååååååååååååååååååååååå< åååååååååååååååååååååååååå= åååååååååååååååååååååååååå> åååååååååååååååååååååååååå? åååååååååååååååååååååååååå@ ååååååååååååååååååååååååååA ååååååååååååååååååååååååååB ååååååååååååååååååååååååååC ååååååååååååååååååååååååååD ååååååååååååååååååååååååååE ååååååååååååååååååååååååååF ååååååååååååååååååååååååååG ååååååååååååååååååååååååååH ååååååååååååååååååååååååååI ååååååååååååååååååååååååååJ ååååååååååååååååååååååååååK ååååååååååååååååååååååååååL åååååååååååååååååååååååååå