²<ÆÈLU ǰL­ ¦!©…/ {°Lj©Ù…©…¢ Ls Ð&)ßLÖ)LÖ €Ð @Ð)¿LÖ Ð )ïLÖ Ð)û… °L­ ½Ÿ'É,Ðöè† L‰©…:…9…;¨¥7�S'¥8ÉÐØH òµh öµ­=ÆJJJJ�î¹­9¹Ð7¢ÿšØ _¶©> æµ­�¸¬‚¸ êµ ®9¹ðä¹:¹Éa� É{°)_™:¹ÈÊÐ슙:¹�ݹ š· !¶�Þ¹ ›¶Ðd­ß¹ð©Ð.©ª�ä¹ ½¹ðÙ¹¹ÐèÈÐòè½¹Ðúèîä¹­ä¹ÉÐß­ä¹ m乪轌¸¼�¸�⹌㹭…¸H­„¸Hlâ¹ *¶ ›¶­º¹8é ß¹ÐL² ×µ¬å¹¹:¹ð É ð h¶ÈÐñ©? æµL² ›¶ ¡·© ͺ¹ÐÍ¹Р©?  ™¹¹ˆÐú U¶0V­î¹�í¹ ×µ b¶©: æµ­æ¹ )`¨È¢¹( h¶Èèà ð à Ðð©. h¶L³ îµÐ �¶ ¶�æ¹0Îí¹ð´ äµ äµL³` 4L¶· ›¶ÐW ”¶ ¡· U¶0O Ö·¬Ý¹¹:¹É Ð< ›¶Ð7­ß¹ðÍê¹ð 8éÍÞ¹Ð%­ê¹Ð ­ê¹�ß¹©�ɹ ¡· U¶ Ö· �¶L¶ >Ð *¶LÁ² 4L¶·© �ô¹Œõ¹ û·Ðz�é¹ é¹ðr ›¶Ðm Ö· ”¶ û·®º¹à ð �ô¹Œõ¹À�S é· ¡· ¶ �¶ ¶0E @¶0D­õ¹mé¹�é¹­ô¹¬õ¹�ë¹Œì¹ ÌÄ �¶ ¶Ð'­ë¹¬ì¹i€�ÈðÌé¹ÐÜ �¶ þµ0`LÁ² Ð  UРbР L¶· ›¶É Р ¶· àµH ×µh)_ÉYÐÑ ¡·L ¶ ›¶Ð0 =¶02 ×µ O¶ð 0"¢½(Éð h¶ îµÐ®ç¹èë0Þ¢ `LÁ² )Р4L¶· Ë· ›¶Ðì Ö· ”¶ û·®º¹à ð Ï· é· =¶0Ø­ë¹¬ì¹ %¶ O¶Ð ¹ÄLå´0¾Lš· û·®º¹à ðLlµLhµ­º¹É Э߹ð 8é�Þ¹ öµL°²­Â¹É ðLϵ¢½Ú¹�¹Ê÷ =¶L̵ Ë· %¶ O¶Ð ¹Ä͇¸�̈¸�ë°̈¸�äðâ š· O¶ðl0j© �ÁµŒÂµ *¶ ›¶­ß¹�¹¹¢ �¶­ß¹�ɹ ŒÙ¹¢ ½¹¹�Ê÷è¹:¹ðÉ ðÈÐô©�(¹:¹�)ðèÈî(Ðñ ×µ š· ­Þ¹ öµL² *¶LÁ² JL¶·© 浩 ТÐC© ¢Ð=¢ Ð9¢ Ð5¢ Ð1¢Ð-¢Ð)¢Ð%¢Ð!¢Ð �¶¢Ð¢Ð¢Ð¢Ð ¢Ð¢Ð¢L­ß¹ð8éÍÞ¹ð­Þ¹Löµ ¡·©�Ù¹ �¶ úµ�æ¹` �¶L¶ �¶ ¶�æ¹` ×µ !¶iAŽç¹Œè¹ ðH­;Æ æµh @ æµ­:Æ æµ¬è¹®ç¹`­Š¸¬‹¸`­ß¹�ê¹`¢ŠH©�ß¹¬Ý¹ h·Œå¹ð )Hȹ:¹É:ð hˆ­Þ¹�¹¹h�ß¹�¹¹È©�ä¹ u·ðèÉ*Щ?�¹¹Ð�¹¹ÈÎä¹Ðæ u·ðÈÐøè© �¹¹Îä¹Ðõ¹:¹H©�ä¹hÉ.Ð#È u·ðèÉ*Щ?�¹¹Ð�¹¹ÈÎä¹Ðæ u·ðÈÐøè© �¹¹Îä¹Ðõ©�ä¹è©�¹¹Îä¹ÐõŒÝ¹©�ä¹h¨¢ ȹ¹¹É?Ðîä¹ÊÐò­ä¹`¹:¹ðÉ ÐÈÐô`¹:¹ðÉ �ðÉ=ðÉ.ðÉ:ð É;ðÉ<ðÉ>`LÁ²©( L%¶©�¹¹­ß¹ð8éÍÞ¹ðLöµŒè¹ ×µ¬è¹¹¥¸ð h¶ÈÐõ`© �빌ì¹`¢½¹¹¼É¹�ɹ˜�¹¹Êð`¢½É¹�¹¹Ê÷­ê¹�ß¹`© �ï¹ ›¶­ß¹Ðg�ð¹�ñ¹¨¹º¹É$Щ�ï¹Èȹ¹¹É ðN £Ä� ­Ä°Aé¢ìï¹Ð8)H­ð¹�ò¹­ñ¹�ó¹®ï¹­ð¹mò¹�ð¹­ñ¹mó¹�ñ¹°ÊÐéhmð¹�ð¹�²îñ¹Ð­LÁ²­Â¹É Ðö­ð¹¬ñ¹`L8¹L¬²L²L¹¹LÞ²L¾³L[´L{´LZ³Lø´L¼´LµÿNO SPACECAN NOT CLOSEALL FILES (Y/N)?READ ERRORNOT FOUNDFILE EXISTSLOAD ERRORCAN NOT OPENWRITE ERRORDIR SAVE ERA TYPE REN GO LOAD 0$INVALID CHARACTER - EXPECTING = FOR ORG$SOURCE LINE TOO LONG$DIVIDE BY ZERO IN EXPRESSION$SYMBOL TABLE OVERFLOW$ÔÐËǰ¬Â¾ºµ‰ƒ ¡º¶BYTWORPAGENDOPTGCOMYM LADCANDASLØ�šÅ�àÅŒ›ÅŒáÅŽœÅà$°P½VÅð©ÿ�™Å 뼩�¡Å­œÅ mœÅªè½xº¼yº�¤ÅŒ¥Å­æÄH­åÄH­šÅ¬›Ål¤Å��ÅŒžÅ­¡Åð  ‘­­Å�šÅ ½,™Å 뼩�™Å¬žÅ­�Å`LìºLݼLÃLÆLÆLÆL�ÂL!»L,»LÒÂL‡ÃL�ÂL-ÆL4½L½L±¿Lì¿LÀL<»L¤»LD»LÉ»L³ÀL‚»L4»L0»Lû¼L%»Lo¿L8»LäºLèºLüºL»L»L3Æ�—Å`­—Å`,™Å 뼩�™ÅLÆ 0Æ�ÉÅŒÊÅŽËÅŠ)€¨­ÉÅ`­ËÅ)¨­ÊÅ`­n½¬o½`­`­ØÅ¬ÙÅ`�`­®Å`­¯Å`­°Å` ½© LÀ ½ ‘¿­¹ÅͺÅ�É€ð©`¢ ïÀÉÐô�¹Å ƒÁ­´Å µÅЩ` bÀ ®¾ <  ¿©` ½ © À0© ‘© ¢ ‚À© Àì` ½ © À0¢ éÁ¬³Å­UÅ‘ B© Àé` ½  ‘¿­¹ÅÉ€�©` ƒÁ©�ÝÅ­´Å µÅðL¬¼©�ÝÅ­“ÅHÉð¨ˆ,Äň±�´ÅÈ©,Äű�µÅ­´Å�©Å�«Å­µÅ�ªÅ�¬Å­«ÅÍÏÅЬ¬ÅÌÐÅðî«ÅÐî¬Å­©Å ªÅðÐ ­©Å ªÅШð0­©ÅÐΪÅΩŭ©Å¬ªÅ S¿Ð ­©Å¬ªÅL…¼­«Å¬¬Å S¿Ð©­«Å¬¬Å�´ÅŒµÅ µÅÐh©`­´Å g¿h¨­´Å‘­µÅÈ,ÄÅ‘ bÀ ®¾ K®¹ÅìºÅ�莺ÅÊàÐ  ¿¢ ïÀÉÐ ©ÿ�¹Å  ¿©` � ÃÂ�H Ãh`¢µ¼àÅ�àÅ”Êó`¥¤…„L$Æ­šÅÍ®Åðì�®ÅLG½ ±ð8é)�šÅ­®Å�­Å±�¡Å˜‘ ½`©�®Å�¯Å©( …„ û¼­®ÅÉ� n­èĬéÄ ÒÂLìº Æ�n½Œo½ o½ðã  ¹ÿÿ™Ïň÷­ÕŨi�ÈŹ�Å�ÇÅ­ÖÅ�ÅÅ­×ÅJnÅÅJnÅÅ�ÆÅ©�ÄÅ­ÐÅðˆ8nÄŹŠÅ�ÞÅ8©ùŠÅ�ßÅ®®Å½‚Å-¯ÅÐ ½‚Å ¯Å�¯ÅLн` -­ÏÅ�ÌÅ­ÐÅ¢JnÌÅÊÐù�ÍÅîÌÅÐîÍÅ­ØÅ¬ÙÅ…„ ©‘æÐæ­ÌÅÐÎÍÅÎÌÅ­ÌÅ ÍÅÐã­ÅÅ�ÌÅ­ÆÅ®ÈÅJnÌÅÊÐù�ÍÅîÌÅÐîÍÅŽ´Å޵ŭ´Å¬µÅ g¿î´ÅÐîµÅ­ÌÅÐÎÍÅÎÌÅ­ÌÅ ÍÅÐÜ €¾ ÝÁ¢ "Á0¬³Å±Éåðð¢ éÁLg¾` Æ­ÓŬÔÅLÆ­²Å�µÅ­±ÅNµÅjNµÅj�»Å�´Å­µÅ�¼Å©�¶Å¢ŽÎÅŽ¦ÅŽ§ÅŽ¨Å­´ÅͦŭµÅí§Å­¶Åí¨Å�!­¦ÅmÑÅ�¦Å­§ÅmÒÅ�§Å�î¨ÅèÐÑîÎÅL¼¾ÊàÿÐÎÎÅŠmÓŪ­ÎÅmÔōРÆ8­¦ÅíÑÅ�¦Å­§ÅíÒÅ�§Å8­´Åí¦Åª­µÅí§Å¨Š 3ÆL!ÆH„ FjˆÐúmØÅ…¥mÙÅ…h)ª½zÅ` 3¿1`àð 3¿Iÿ1‘` 3¿‘`®®Å½‚Å °Å�°Å`© qˆú`®®Å½‚Å-°Å`  ±�¹Å ±�ºÅ`®¹Å芠 ‘­ºÅ ‘` ½ À02© ³Å¨±ª˜)¨Š‘˜ ³Å¨È˜)Ðë  ­”ÅÑð ‘©€�  ‘­½Å` ½ À0 ‡¿Ð  ±H˜ ³Å¨hÑn’Å ~À­½Å` ½© H ÝÁ €¾h�·Å¢Ž¸Å "Á07®·Å¬¸Åî¸Å±À Ð�”ÅH˜ ³Å¨hQ-ßÅðÐÔÉ?ð H˜ ³Å¨hÑÐÅÊÐÏ­½Å`®ÈÅ´Å.µÅ.¶ÅÊÐô­ÇÅ-¹Å ´Å�´Å`© ¢�·ÅηÅŠm·Å¨À ðÀÐ,’Å ±H­·Å ³Å¨h‘ηÅÛ Œ¾LB ½ Â¥H¥H­ëĬìÄ…„© Àh…h…­½Å0  ©‘ÈÀ!Ðù8n’Å ~À­½Å`Ž Å ï¿0*  ±i)ð‘ À ­ ÅÐ ¶ÀLÁ ´¿©` ‘¿©`ŠHî±ÅÐî²Å­ÖÅͱŭ×Åí²Å°hªLÝÁ­±Å)�½Å �³ÅðhªLaÁ Œ¾ <Âhª eÁ­½Å`,ÚÅ0úÊÐ |¿ ÇÁ‘` |¿ ÇÁÑðäLo¿®ÈÅ­¹ÅJÊÐü�´Å8©íÈŪ  ±-ÞÅJ*ÊÐüm´Å,ÄÅ i�“Ũ±�´ÅÈ©,Äű�µÅ`H­»ÅmÛÅ…­¼ÅmÜÅ…  h`©ÿ�±Å�²Å�½Å`­³Åi¨ŒÂÅŠH±�ÃÅÈ €Â ÃÅð €Â¨­ÃÅ Y¿hª¬ÂÅȘ)ÐØ` ‡¿ð n­îĬïÄ ÒÂL캮®Å½‚ÅIÿ-°Å�°Å` 'ÆLQ¢ eÁ©Ð­ÝÅ *ÆÉðæ n­ñĬòÄ Ò �ÂÉ ðLìºLiÄ­ôĬõÄ Ò­®ÅiALÃUUUU©,ÄűŒÂÅ`­–ÅH©�–ÅhÐ Æ`­–ÅÐ Æ)ÿð ÆÉÐ ÆÉÐL캩`�–Å©ÿ`É ð É ðÉ ðÉ `�ÛŒܠ¹ÿÿÉ$ð ÈŒ¾Å ì¾ÅÐí`,—Å ,ÀÅ0H Æh` ðH­;Æ 4é^ îÂh @ ,í:ÆL4ÃÉ Ð © ,í˜Å)Ðô`H �Âh îÂH,ÀÅ0 Æhî˜ÅÉ °&Í9Æð!ΘÅÍ7ÆÐΘÅ0`É ð Í>ÆðÍ?ÆÐ©�˜Å`© ,é î­•Å͘Åðí­9Æ 4ÃLvé ‘ŒŸÅ­˜Å�•Å �¬ŸÅÉ ÐLfÄÉÐ^Àðë±H 8±é‘hΟÅÉ °@É Ð08nÀÅ­˜Å�ÁÅ là sÄ­˜ÅH8­ÁÅí˜Å�ÁÅÀÅ “ÄÎÁÅÐøh�˜ÅL–í:Æ �Ä­;Æ �Ä “ÄL–ÃÉÐ ­—ÅIÿ�—ÅL–ÃÉÐ lí8Æ 4ÃL‡ÃÉÐ là sÄL–ÃÈ‘HŒŸÅ ˜q‘h þ¬ŸÅ±ÉÐ  ±ÉÐL캠±ˆÑ°L–é L,é ,é L,íŸÅ�¿Å©HhοÅÐ`¨È˜H± þÂL|ÄÉ �­7ÆH 4é 4ÃhL4ÃÉ0�É:�8` £Ä�úÉA�õÉG`­ë¹¬ì¹i€�ë¹�ÈŒì¹`­ë¹¬ì¹�ÛÄŒÜÄ¢½ÿÿ�(è÷`LKºLDÅLUÅLúÄLÅL4ÅLÏÅÿ - R/O$ - BAD SECTOR TO IGNORE -- TO ABORT$ PEM ERROR ON $ - INVALID DRIVE$å€@  @€?XO1E XQRERR 0LaÆL³ÆL.ÇL„ÇLßÇLuÈêê`êê`LÉLæÈLÉLôÈLûÈL#ÉL6É©`¢€`êê` (  C64 52K DOS/65 2.15 SIM 3.02 çÿ© …Ï© Òÿ© Òÿ© Òÿ©“ Òÿ© Òÿ©(�¶Í©B Æ [È¢ŽºÍŽ»Í½­Æ�èàÐõ©(  ûÈ­­ÌL²LÆLº¢ÿšØ©(�¸Í©�(Ç æÈ©�*Ç© ²�,ÇŒ-Ç­(Ǭ)Ç É­*Ǭ+Ç ôÈ­,Ǭ-Ç ûÈ #É)ÿÐ0θÍð"­,Çi€�,Ç�î-Çî*Ç­*ÇÉ"ÐÁ©�*Çî(Çз­­Ì�ÀÍL�Ælüÿ²­¯ÌÐ1 ÖÇ­�)ð­°ÌÐ ­²ÌI�²Ì©�°Ì­¶ÍÉ:ð É=ðͱÌЩ�¯Ì`H  ¢2ÊÐýˆÐø ÖÇhͶÍÐæ�±ÌÉ@ðß©ÿÐÝ©…Ì .Ç)ÿðù©�¯Ì­²Ì�µÍ­�)ð©�µÍ­�)ð©�µÍ­±Ì mµÍª½µÌÉ€�© H©…Ì© Òÿ©� Òÿh` Ÿÿ¥Å�¶Í`H­AÆ)ÐNh :ÈÉ Ð©“ÐCÉЩ� Òÿ© Òÿ©�Ð1É Ð©Ð)É Ð 6È©‘ÐÉðÉЩ’ÐÉðÉð É � É€°Hh Òÿ`ÉA�É[� Éa�É{°)_` `ÉA�øÉ`°ò €`�bÈŒcÈ­ÿÿð ßÇîbÈÐóîcÈLaÈ`H­AÆ)ЭAÆ)Ðh :ÈL‘Èh PÈHh�³Ì­³ÌÉ ð¢ Éÿ° ­³Ì ÒÿLÌÿÉÐ ºÈ�à©ÿ�³Ì`  ÒÈ­AÆ)ðó¢ Éÿ© Òÿ © Ãÿ©¢ ºÿ© ½ÿLÀÿ)�­Ì ª½ ɼ É`�¾ÍŒ¿Í`�ÒÍŒÓÍ`�¼ÍŒ½Í`‘ÌŸÌ®­Ì½ÉÉ`­®ÌÐ�ºÍ`¢Ž»ÍèŽÎÍŽÍÍèŽÏÍLÊ�ÏÍ ÉЩ�ÏÍ¢ŽÎÍ­ÏÍÉÐ$®­Ì½É�»ÍŽÇÍ­¼Í¬½Í�ÈÍŒÉÍ­¾Í¬¿Í�ÊÍŒËÍ­»Íðyλͭ­ÌÍÇÍÐn­ÈÍͼÍÐf­ÉÍͽÍÐ^­ÊÍ;ÍÐV­ËÍÍ¿ÍÐNîÊÍÐîËÍ­­Ì ª½ ɼ É�ÁÉŒÂÉ ¢¹ÿÿ�ÐÍÈèàÐô­ÊÍÍÐÍ­ËÍíÑÍ�©�ÊÍ�ËÍîÈÍÐîÉÍ©�ÍÍ𢎻ÍèŽÍÍ ÉЩ�ÍÍ©�ÌÍ­¾Í¬¿Í�ÅÍŒÆÍ ÉJªð NÆÍnÅÍÊÐ÷­ºÍH莺Íhð0­­ÌÍÀÍÐ ­ÁÍͼÍЭÂÍͽÍЭÅÍÍÃÍЭÆÍÍÄÍð9­®Ìð Ë­­Ì�ÀÍ­¼Í¬½Í�ÁÍŒÂÍ­ÅͬÆÍ�ÃÍŒÄÍ­ÍÍð )Ë [Ë�ÌÍ©�®Ì©�ùÊ�úÊ ÉðkªÊŠ-¾Íªð­ùÊi€�ùÊ­úÊi�úÊÊÐì©mùÊ�ùÊ©ÎmúÊ�úÊ­ùÊ�Ë­úÊ�Ë­ÒÍ�öÊ�Ë­ÓÍ�÷Ê�Ë ®ÎÍÐ莮̹ÿÿ™ÿÿˆ÷0 ¹ÿÿ™ÿÿˆ÷­ÏÍÉÐ ­ÌÍÐ�®Ì Ë­ÌÍ` )Ë �Ë�ÌÍ`­ÀÍi�ÔÍ­ÁÍ�ÕÍîÕÍ­ÕÍÉ�îÕÍ­ÃÍ�×Í`­ÀÍÍ´Ìð�´Ì (Ì` LË©1 ±Ë qÌ¢ Ïÿ�ÎèÐ÷Ž³Ì Ìÿ­³Ì` (ÌL„Ë LË ‡Ì ½Ì ÒÿèˆÐö Ìÿ aÌÐà Ìÿ |Ì¢½Î ÒÿèÐ÷ Ìÿ©2�Ì­ÕÍ ÌŽ Ì� Ì­×Í ÌŽ Ì�Ì©�³Ì ‡Ì  ½Ì ÒÿèˆÐö Ìÿ aÌð γÌð (ÌLÑË©�³Ì Ìÿ­³Ì`©ÿÐòU1:2 0 TT SS #B-P 2 0 IØ¢08é �è°ùi:`© Ãÿ©®ÔÍ  ºÿ©¢ Ì ½ÿ Àÿ© Ãÿ©®ÔÍ  ºÿ©¢ Ì ½ÿLÀÿ (Ì¢ Æÿ°ö ÏÿÉ0` CÌ¢ Æÿ°ö` CÌ¢ Éÿ°ö` (Ì¢ Éÿ°ö¢`‡"?ÙÍû͇"?êÍ Î@ ††‡‡€€��‚‚ƒƒ„„……33#3wWWaAA44$4zZZsSSeEE55%5rRRdDD66&6cCCfFFtTTxXX77'7yYYgGG88({bBBhHHuUUvVV99)}iII jJJ 000mMM kKK oOOnNN++++pPPlLL ----..>}::[{@@@`,,<{\\\|****;;]}====^^^~//?\11!1____22"2 qQQwˆw”ÿÿÿÿ¦´ÿïÿÿÿÿÿÿÿ÷ëÿÿ"ÿª¿ÿÿÿÿúÿþÿÿ@ïî÷?ÿÿÿýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿiÿ·ÿÿÿEÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÿÿÿ@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿwÿÿÿw5ÿÿÿÿÿÿÿÿ ÿÿÿÿww”ÿÿÿ}$µÿÿÿÿÿÿÿÿÿ÷ëÿÿ ÿ ¿ÿÿÿÿÿÿÿÿÿaÿÿ÷=%ÿÿÿýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûÿÿûÿûûûûûiÿšÿûÿ@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿúÿþýúÿþ@ÿÿÿÿÿÿúÿÿÿßÿÿÿßßÿÿÿ€ÿßÿÿÿÿÿÿÿßÿÛÿÿ ßÿÿÿŒÿˆÿÔûÿÿݤ¸ÿÿÿÿÿÿßßÿÿëÿÿ ÿª¿ûÿÿÿúÿþÿûHûúû9@ÿÿÿýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿiÿžÿÿÿEÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿþýþÿþ@ÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿ€ÿÿÿÿÿÿŸÿÿÿÿÿÿÿÿ ÿÿÿÿŒ÷ˆÿ”ÿÿÿߦ¼ÿÿÿÿÿÿÿÿÿ÷ëÿÿ ÿª¿ÿÿÿÿþÿþÿÿaÿþ÷=lÿÿÿýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûÿÿÿÿÿÿÿÿÿiÿœÿÿÿDÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿúýþÿþ@ÿÿÿÿÿÿþÿÿÿßÿÿÿßßÿÿÿ€ÿ_ÿÿÿÿ]ÿÿÿßÿßÿÿßÿÿÿŒÿˆÿÿÿÿÝ„œÿÿÿÿÿÿßßÿÿëÿÿÿˆ¿ÿÿÿÿúÿþÿÿHÿþÿÿÿÿýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûÿûûÿûûûûûiÿÒûûÿ@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿúÿúýòÿþ@ÿÿÿÿÿÿúÿÿÿßÿÿÿßßÿÿÿ€ÿ×ÿÿÿ÷ÿÿÿßÿÛÿÿßÿÿÿˆ÷ˆ÷ÐûÿÿÝ€�ÿÿÿÿÿÿßßÿ÷ëÿÿÿˆ¿ûÿÿÿúÿþÿû@ûúó@ÿÿÿýÿÿÿÿÿÿÿÿÿÿ÷ÿÿÿÿÿûÿÿÿÿÿÿÿÿÿiÿ”ÿÿÿDÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿþýöÿþ@ÿÿÿþÿÿþKKKKC64S302 ASM€012489:;<=>?@ABCOPY COMDEBUG COMFILESTATBAS&SYSGEN COM: ALLOC COMEDIT COM#COMPILE COMM !"#$RUN COMV%&'()*+,-./C64S302 ASM~CKLMNOPQRSTUVWXYMAKECOM COM3åFILESTATINT67COMPARE COM5ASM COM3DEFGHIJC64B211 ASM Z[C64L210 ASM\]^_ååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååL(COPYRIGHT (C) 2008 - RICHARD A. LEARY­¬�°Œ±�éŒê¢½_ •Êø8­°å … �… ­±å … �…8¥ å…¥ å… ±¨¢˜=H ]O ðÊÐô¼W 'È0/ȱªÈ±Å°ÅÐä� HŠeªhe‘ˆŠ‘ æÐæˆÐ÷ð¶­�=�Ax©þ ÿ…„ ¬ ð"±�®ȱ�¯­†‘ˆ­…‘©p  ¢ ÿÿL ž ±ÉLðÉlÐ Ì ž LÇ ÿŒù©ƒ  Læ Ì ¬ ðÖв ±‘ æÐææ Ðæ 8¥é…°ÆÐߥ i… �æl  ‡ÿ  ÿÿÿþ ÿÿ IRQ/BRK VECTOR SET$CAN NOT SET IRQ/BRK VECTOR$ ±ªÈ±…†ˆ` ±H˜‘±Ð©ÿ‘ÑÐh‘©ÿ`h‘©`æÐæ`l°( © ÍÐÍ𢠩?ÝðÊÐøðL× F ®ëš ö©-  2 ®³ðê¹´Éa� É{°)_™´ÈÊÐ슙´¨ ƒ�ÚðÉÉIÐ Ù L' ÉXðL: È ƒð}�úÈ ƒÐL×É=ðL× 9­õÉðL×­úÉ*Ð âLò ­ÙðL×¢ ­úÙˆðÀ°èÈÈÀÐðL×àð ­Ø�èLò È­Øð ÉðL×¹ˆ�عˆIÿ-ì Ø�좽�ð èÐõ­ç `­æ [­è [­é [­ê [­ë [¢­ì H©�© RhÊÐñL' 9®õ­ÚÉRÐ à�L× F L' ÉDÐ5ŠÐ hmÜ�Ö­Ýi�×L‡ ÉÐ ’L[ ÉÐ' F … Ÿ iL' ÉSÐ/ŠðÉÐ ’ ÊL' ÉðL× … g­Ø Û ¹­Ù ÛL' ÉFÐ(àðL×­ÙÐø x g­Ø Û ¹ ïð ¬°íL' ÉLÐ3ŠðÉÐ ’ ?�ã +ÎãÐøL' ÉðL× … Ÿ + ¬°øL' ÉGðLÖ ŠÐL¼ ÉÐ âL¼ ÉÐ2­Ö ×ð ­Ö¬×�æŒç,ù0 ’ a Ûð �ñ =¢ EL¼ ÉðL×­Ô Õð ­Ô¬Õ�æŒç,ù0, … a Ûð �ñ =¢ E a ’ Ûð �ò =¢ E¬ê®ëš­çH­æH­ìH®é­è@L' ¢ © �ÊÐúè  ƒÈ ƒðT)�ȹ´É:ðˆˆ©�ȹ´ð6É.ð �ð1�Èèà Ðé¢ ¹´ðÉ.Ðȹ´ð �ð�Èèà Ðí ƒÐÊð`Lש¢ �Êà Ðø ÉÿÐL×¢½|ÝÐÊõ© mØ�ܘmÙ�ݨ­ÜHɘéh°L× ­Ü¬Ýi€�Ü�ÈŒÝ͘í€�L× ÉÐ ­Ü¬ÝL‹ ÉðL× ­Ü¬Ý8é€�ܰˆŒÝH˜ `h ` `©€�á �â g ëÉ$ðbÉð^É;Ðñ ðU�ã �Ý mØ�ÜH­ÝmÙ�ݨhHɘéh°L×mã�È͘í€�L×  Û ¹ÎãÐò  Lñ ­Ý `­ÜL` ¬�[ a­Ü¬Ý�،٠ö l ÿ Û [ ¹ ïð ¬�­Ü-ÿÐå ’ Û)É!°©.  ¹ ïð ¬� ­Ü-ÿÐÝð¨` ö l ÿ©�ä�å©�ã a Û [ (É ð*É.ð Éa�É{°)_ *�L×ÎãÐÞ g­ä Û ¹LÊL¹¢½ð èÐõ` 8 '�ÜŒÝ`  a Û¨J� J°É"ð) €Jª½ž°JJJJ)Р€©ª½â�ü)�û˜)�ª˜ àŠð J�JJ ˆÐúȈÐòH©¹�Û Û `¢ ÌûÈ�ê¢À�ñh¨¹ü�ý¹<�þ© þ.ý*ˆÐöi¿ ÊÐê ¢àЬûð­üÉ詹�Û Û° `ˆÐëü�½ï ½õð ÊÐÌ` +ªèÐȘ `ŠL` ö l©- ¢ ÿÊÐú`­û8¬ÝªˆmÜ�È`©�õ ÁÈ ƒð/�øîõÉ,ðí *°ȹ´ð�øÉ,ðÛÉ Ðê ƒð �øÉ,ðËL×­øÉ,ÐîõLÁ¹´ðÉ ÐÈÐô`¹´ð(É �%ð"É?ðÉ*ðÉ=ðÉ_ðÉ.ðÉ:ð É;ðÉ<ðÉ>`L×¢Ø.Ù.Ö.×.Ô.ÕÊÐë­ä�Ø­å�ÙŽäŽå`®á ðÉðLש�(KKKK©ªŽáîá½()`©�ä�å  ë *°­ä`L×É00"É:0 ÉA0ÉGi ****¢*.ä.å°ÊÐô`8`) 0É:0iLHJJJJ RhLR­Ý `­ÜL`­Ô¬Õ�ÜŒÝ`­Ö¬×�ÜŒÝ`­Ø¬Ù�ÜŒÝ`­Ø¬Ù�ÖŒ×`­ÖÍÜ­×íÝ`îÜÐîÝ`­ÜÐÎÝÎÜ`îÖÐî×` ö©? L' ­Ø¬Ù�æŒç`­Ü Ý`© © Щ HŽöŒ÷ ,¬÷®öh`©( ¢Ð¢Ð¢© L:¢Ð)¢Ð­‚¬ƒ¢ l° g©LÛ­Ü�í­Ý�îÊè©ÿ�ó` `Lÿ©­�Û`©��Û` g¢  zÈ¢¹óð½í�ܽî�ݹñ Û©™ó`HŠHº½)Ðhªh(l®hªh(�èŽéŒêh�ìh�æh�纎ëØ8­æé�æ°Îç­óð­æ¬çÍíÐÌîð­ôð%­æ¬çÍïÐÌðÐ m­æ¬ç�ÜŒÝ 8Lò ­æi�æ�îç­çH­æH­ìH®é¬ê­èL¦­=ÿ`­<ÿ8é` ;É!°©¢ÐÉA°©¢Ð©¢�Žÿ` Fª ?8é �©ÊÐø8é` ² —ÿAXYSN€V@BDIZC@EÐ@ 0"E3Ð@ @E3Ð@ @E³Ð@ "D3ÐŒD"D3ÐŒDš"D3Ð@ "D3Ð@ bx©!�‚YM‘’†J…�¬©¬£¨¤Ùؤ¤Š#rem basic-e/65 file status routine for dos/65 rem Yes, I know it is slow but it sure is easier to write rem released: 13 August 1981 rem last revision: 5 October 1981 rem mod for Version 1.2 rem 17 October 1982 rem mod for Version 2.0 rem 28 december 1985 rem eliminated redo path rem 22 may 1996 rem modified for DOS/65 2.14 rem corrected major logic errors rem 4 april 2008 rem modified for c64 screen rem constant definitions tea=2048 pem=tea+9 sim=tea+12 a.reg=tea+15 y.reg=tea+16 x.reg=tea+17 dfl.buf=296 e5=229 rem set up block size array dim blk.size$(5) blk.size$(0)="1KB " blk.size$(1)="2KB " blk.size$(2)="4KB " blk.size$(3)="8KB " blk.size$(4)="16KB " rem set up extent mask table dim exm(5) exm(0)=0 exm(1)=1 exm(2)=3 exm(3)=7 exm(4)=15 a=dfl.buf gosub 9030 rem set buffer to default poke x.reg,25 rem get default dfl.drv=call(pem) and 255 input "What drive";a$ gosub 9060 rem convert to uppercase if (a$<]‹¡�Š#�‹¡)®i¨#$S#$S¡[[¥i$$®®¨­)|œmœ¥i)S„4¥i# ØbZH&b”ˆTDÈThDè”´„t´(ntôÌJrò¤Šª¢¢tttrDh²2²"&&rrˆÈÄÊ&HDD¢ÈCOM NEXT ADDRESS= * A X Y S NV?BDIZC �`ÿ NEXT ADDRESS= * A X Y S NV?BDIZC �`ÿ0F611C9000A0D ;180D88D009ADB414ACB5144C620DC901F0034CAE1120F40EADB4140A8A ;180DA0ACB51438E9808DB414B004888CB51448982037116820371109D9 ;180DB820EA1160A9808DB9140A8DBA14203E1220C210C924F062C90AAA ;180DD01AF05EC93BD0F120E710F0558DBB1420E7108DB51420E7100C5E ;180DE8186DB0148DB41448ADB5146DB1148DB514A86848C90098E90B93 ;180E000268B0034CAE11186DBB149001C8CD561398ED571390034C08FF ;180E18AE1120E71020B314209011CEBB14D0F220E71020E7104CC80A5D ;180E300D20F40EADB514203711ADB4144C3711208311905B2038120775 ;180E48AD;dos/65 system interface module (sim) ;for C64 and SYSGEN 2.15 ;version 3.02 ;based on my S-100 6502 SIM 3.01 and both BIOS65.ASM & BIOS80.ASM ;for the C64 CP/M cartridge. ;released: 24 march 2008 ;last revision: ; 5 april 2008 ; corrected linefeed character ; changed to 40 char per line ; changed to 25 lines per screen ; made iotype initialized to 1 & in fixed location ; eliminated use of data in conout ; corrected error near end of conin ; added jsr clall at cold boot start ; forced function keys to return space ; corrected error in read code after la3f ; corrected & added drive select logic ; increased to 10 pages ; modified console in & out for delete & bs ; changed key code for DEL ; removed conin test for BS ; modified warm boot to use full sim deblocking ; corrected one entry in key code table for "=" ; corrected track numbering ; reduced allocation map to 17 bytes (8*17=136) ; changed CDB entries & conout code ; 6 april 2008 ; increased to 52K ;base add8­é)€…­é … 8¥é…¥ é… ¥i…¥ i … ©?¢ ÝÐL0 ÝÐL0 ÊÐí© ÍÐÍÐL0 †ÍÐÍ ÐÆ¢ ½�º $0½�Û �ü ÊÐê­�Û �ü ­�º Š¢ �Û �ü �º Êà Ðò¢©$�ã ÊÐú & ùL0 !  !  L0 ! ùL0 ©… < q $ö ! þL0 +  ¢ ½ü �ë ÊÐ÷ !  `¢L¢L¢L¢L¢L¢L¢L¢L©Û  `©º  `©ü  `©¥  ¢ L©  …„¥¤  &  ðL0 Æ`¥i€…�æÅÐڥŠÐÔ`©  …„¥¤  ¥ÅÐ¥ÅÐ` ! ðL0 ¥i€…�ØæÐÔDOS Error - Aborting$à° :݈Ðëûà�½îß Ûݽôßð ÛÝÊÐÌ` ܪèÐȘ :ÝŠL:Ý ÐÝ FÝ©- ÛÝ¢ ÙÝÊÐú`­úKKKKL(COPYRIGHT (C) 2008 - RICHARD A. LEARY¬ŒÐ ŒÓ ŒÖ ŒÙ ŒÜ Œä Œß ¢©•èà.Ðùº†,8­é…&­é…'©�  { ¢ …! � Á …¢ &ÊÐù¥¤8é…*˜é…+F+f*©… … S Á …(¢(&)ÊÐù­Že(�Ž­�e)��8¥íŽ…¥í�…¥*ÍŽ¥+í�°©N L» 8¥é…¥é…© …„ ª © …„ ª ? o ©Ö  { ÉA�ÉI°)8é… ȹ’Ð ¥ Ñ …„Ð ©2  { L  ±…ȱ… ȱ…ȱ…©¨ Ý …-¥)ð ¥)€i€…�æ8¥é�Ž¥é��­Ž¢N�jÊÐùi… ¢¥ è8åð°ø† Êä° Î ©€ …„ ñ Æ Ðù ^ ¦,š¥!LÑ ©   { L¬ ©¢ e ÊÐûe `LLLL!L$L3© *)ÿÐ`©n L» ¥¤ Ô æÐ楤 …"„#¥- …$„%¥$¤% × ¥¤ Ú à ¥i€…�ææ$Ðæ%¥"ÐÆ#Æ"¥"#ÐÐ`©×  { Ü °©€ …„… „© …„  °`© L» ©�  { Ü °)© %… „¥&¤'…„¥¤Iÿ…˜Iÿ…æÐæ  °`Lh  ±¨¢˜=ô ]û ðÊÐô¼ 'È0/ȱªÈ±É&°ÉÐà� HŠeªhe‘ˆŠ‘ æÐæˆÐ÷ð¶`  ‡ÿ  ÿÿÿþ©�  ƒ © P  ®‘ð¹’Éa� É{°)_™’ÈÊÐ슙’¨ ² ð`©½  { L É0�É:�`8`©S  { G �$É1� )ª… ȹ’І … ` G � )… ȹ’Ð`©½  { LZ ©¦  { G �3É7°/É0ð+ª)… ȹ’ G �à1ÐÉ6�°à6ÐÉ5° )… ȹ’Ð`©½  { L— ¢ © �ÊÐúè¹’)�ȹ’É:ðˆˆ©�ȹ’ð ¿ ð�Èèà Ðí¹’ÐÊð`8`©¢ �Êà Ðø¢½Œ �Ê÷ f L° ©€… ì �L° É$ðaÉð]É;Ðì  ðT…  …  e…H¥e…¨hHÅ ˜åh°L° e�È8鰈Řå�L°   ‘æÐæÆÐï   LA `8`¹’ðÉ ÐÈÐô`¹’ð$É �!ðÉ?ðÉ*ðÉ=ðÉ.ðÉ:ð É;ðÉ<ðÉ>`©`¦ j ð L ©�(©ª†æ½()`8`©……  ° ì ° ( °¥`É00 É:0 ÉA0ÉGi ****¢*&&°ÊÐö`8`© H†„ w ¤¦h`©( ¢Ð#¢Ð¢© L‰ ¢Ð¢Ð¢ Ð ¢Ð©� ¢ LKIMSYSGEN VERSION 2.15-S$ ENTER MEMORY SIZE IN DECIMAL K BYTES (K=1024) $ ENTER DRIVE AND NAME FIELD FOR BOOT .KIM FILE $ ILLEGAL FILE NAME, BAD DATA OR ILLEGAL ADDRESS IN INPUT FILE - ABORTING$ ENTER SIM LENGTH IN DECIMAL PAGES (PAGE=256) (1 TO 99) $ ENTER DRIVE AND NAME FIELD FOR SIM .KIM FILE $ILLEGAL INPUT - REENTER $ INSERT DISKETTE THEN ENTER DESTINATION DRIVE (A-H) $ NOT ENOUGH SYSTEM TRACKS - ABORTING$ INVALID DRIVE - TRY AGAIN$ SYSTEM IS TOO LONG - ABORTING$ ERROR DURING WRITE - ABORTING$ i…�æÊÔ0É¥)ð ­�¯­>ÿ œL­  Ð „+ ǰL ž¥6ð[]† ¦+ ¥&™S'àÐ¥%È™S'¥) ÐàÐ ¥%ð ¤+©¦!Lÿ¤+© ¶ ¦ ä(𰽟'É,ð É ðLþL1 ‡† ǰ¡L!©Ð½Ÿ'…€É'ðÉ"Ð ä!Ф+Àð© H h¤+¦=Lÿ†  ¦ ‡† �L#½Ÿ'ŀЦ ‡† °Œ½Ÿ'Å€Ð…É �É�©™S'ÈLU ǰL­ ¦!©…/ {°Lj©Ù…©…¢ Ls Ð&)ßLÖ)LÖ €Ð @Ð)¿LÖ Ð )ïLÖ Ð)û… °L­ ½Ÿ'É,Ðöè† L‰©…:…9…;¨¥7�S'¥8ÉÐØH òh ö­=%JJJJ�î­9Ð7¢ÿšØ _©> æ­�¬‚ ê ®9ðä¹:Éa� É{°)_™:ÈÊÐ슙:�Ý š !�Þ ›Ðd­ßð©Ð.©ª�ä ½ðÙ¹ÐèÈÐòè½Ðúèîä­äÉÐß­ä mäªè½Œ¼��âŒã­…H­„Hlâ * ›­º8é ßÐL ׬å¹:ð É ð hÈÐñ©? æL › ¡© ͺÐÍÂÐ ©?  ™¹ˆÐú U0V­î�í × b©: æ­æ )`¨È¢¹( hÈèà ð à Ðð©. hL îÐ � �æ0Îíð´ ä äL` 4L¶ ›ÐW ” ¡ U0O ֬ݹ:É Ð< ›Ð7­ßðÍêð 8éÍÞÐ%­êÐ ­ê�ß©�É ¡ U Ö �L >Ð *LÁ 4L¶© �ôŒõ ûÐz�é éðr ›Ðm Ö ” û®ºà ð �ôŒõÀ�S é ¡  � 0E @0D­õmé�é­ô¬õ�ëŒì Ì# � Ð'­ë¬ìi€�ÈðÌéÐÜ � þ0`LÁ Ð  UРbР L¶ ›É Р ¶ àH ×h)_ÉYÐÑ ¡L  ›Ð0 =02 × Oð 0"¢½(Éð h îЮçèë0Þ¢ `LÁ )Р4L¶ Ë ›Ðì Ö ” û®ºà ð Ï é =0Ø­ë¬ì % OÐ ¹#Lå0¾Lš û®ºà ðLlLh­ºÉ Эßð 8é�Þ öL°­ÂÉ ðLÏ¢½Ú�ÂÊ÷ =LÌ Ë % OÐ ¹#͇�̈�ë°̈�äðâ š Oðl0j© �ÁŒÂ * ›­ß�¹¢ �­ß�É ŒÙ¢ ½¹�Ê÷è¹:ðÉ ðÈÐô©�(¹:�)ðèÈî(Ðñ × š ­Þ öL *LÁ JL¶© æ© Ð¢ÐC© ¢Ð=¢ Ð9¢ Ð5¢ Ð1¢Ð-¢Ð)¢Ð%¢Ð!¢Ð �¢Ð¢Ð¢Ð¢Ð ¢Ð¢Ð¢L­ßð8éÍÞð­ÞLö ¡©�Ù � ú�æ` �L � �æ` × !iAŽçŒè Ã!°H­;% æh @ æ­:% æ¬è®ç`­Š¬‹`­ß�ê`¢ŠH©�ß¬Ý hŒåð )Hȹ:É:ð hˆ­Þ�¹h�ß�¹È©�ä uðèÉ*Щ?�¹Ð�¹ÈÎäÐæ uðÈÐøè© �¹ÎäÐõ¹:H©�ähÉ.Ð#È uðèÉ*Щ?�¹Ð�¹ÈÎäÐæ uðÈÐøè© �¹ÎäÐõ©�äè©�¹ÎäÐõŒÝ©�äh¨¢ ȹ¹É?ÐîäÊÐò­ä`¹:ðÉ ÐÈÐô`¹:ðÉ �ðÉ=ðÉ.ðÉ:ð É;ðÉ<ðÉ>`LÁ©( L%©�¹­ßð8éÍÞðLöŒè ׬蹥ð hÈÐõ`© �ëŒì`¢½¹¼É�ɘ�¹Êð`¢½É�¹Ê÷­ê�ß`© �ïKKKK ›­ßÐg�ð�ñ¨¹ºÉ$Щ�ïÈȹ¹É ðN £#� ­#°Aé¢ìïÐ8)H­ð�ò­ñ�ó®ï­ðmò�ð­ñmó�ñ°ÊÐéhmð�ð�²îñЭLÁ­ÂÉ Ðö­ð¬ñ`L8L¬LL¹LÞL¾L[L{LZLøL¼LÿNO SPACECAN NOT CLOSEALL FILES (Y/N)?READ ERRORNOT FOUNDFILE EXISTSLOAD ERRORCAN NOT OPENWRITE ERRORDIR SAVE ERA TYPE REN GO LOAD 0$INVALID CHARACTER - EXPECTING = FOR ORG$SOURCE LINE TOO LONG$DIVIDE BY ZERO IN EXPRESSION$SYMBOL TABLE OVERFLOW$ÔÐËǰ¬Â¾ºµ‰ƒ ¡º¶BYTWORPAGENDOPTGCOMYM LADCANDASLØ�š$�à$Œ›$Œá$Žœ$à$°P½V$ð©ÿ�™$ ë©�¡$­œ$ mœ$ªè½x¼y�¤$Œ¥$­æ#H­å#H­š$¬›$l¤$��$Œž$­¡$ð  ‘­­$�š$ ,™$ ë©�™$¬ž$­�$`LìLÝL"L%L%L%L�!L!L,LÒ!L‡"L�!L-%L4LL±LìLL<L¤LDLÉL³L‚L4L0LûL%LoL8LäLèLüLLL3%�—$`­—$`,™$ ë©�™$L% 0%�É$ŒÊ$ŽË$Š)€¨­É$`­Ë$)¨­Ê$`­n¬o`­`­Ø$¬Ù$`�`­®$`­¯$`­°$` © L  ‘­¹$ͺ$�É€ð©`¢ ïÉÐô�¹$ ƒ ­´$ µ$Щ` b ® %ðÍ?%Щ�˜$`© ,"© î!­•$͘$ðí­9% 4"Lv"© ‘ŒŸ$­˜$�•$ �!¬Ÿ$É ÐLf#ÉÐ^Àðë±H 8±é‘hΟ$É °@É Ð08nÀ$­˜$�Á$ l" s#­˜$H8­Á$í˜$�Á$À$ “#ÎÁ$Ðøh�˜$L–"­:% �#­;% �# “#L–"ÉÐ ­—$Iÿ�—$L–"ÉÐ l"­8% 4"L‡"ÉÐ l" s#L–"È‘HŒŸ$ ˜q‘h þ!¬Ÿ$±ÉÐ  ±ÉÐLì ±ˆÑ°L–"© L,"© ,"© L,"­Ÿ$�¿$©Hhο$Ð`¨È˜H± þ!L|#É �­7%H 4"© 4"hL4"É0�É:�8` £#�úÉA�õÉG`­ë¬ìi€�ë�ÈŒì`­ë¬ì�Û#ŒÜ#¢½ÿÿ�(è÷`LKLD$LU$Lú#L$L4$LÏ$ÿ - R/O$ - BAD SECTOR TO IGNORE -- TO ABORT$ PEM ERROR ON $ - INVALID DRIVE$å€@  @€?XO1E XQRERR 0â  ž(2063)x©6… çÿ©¢  ºÿ© ½ÿ Àÿ©¢  ºÿ©¢Þ  ½ÿ Àÿ ´ Ïÿ�ßèÐ÷8­ßé€�d­àé�eîá ´ Ïÿ�ÿÿèð õà€ÐñÎáð=ÐêÎáð6îÜ­ÜÉ:Ð ©0�Ü©1�Û­ÜÉ7ЭÛÉ1Щ0�Ü© �Û©2�ÙîeЬl⢠Éÿ¢  ½Ò ÒÿèˆÐö Ìÿ¢ Æÿ¢`U1:2 0 1 0 #KK"A") or (a$>"H") \ then \ print "Illegal drive": \ stop a=asc(a$)-65 poke x.reg,13 rem reset system dummy=call(pem) gosub 9000 rem set drive to a track=peek(dcb.addr+4)+peek(dcb.addr+5)*256 rem find number \ system tracks sector=0 n=0 max.dir=peek(dcb.addr+7)+peek(dcb.addr+8)*256 rem find dir \ length num.dir=max.dir+1 dim name.ext$(num.dir),extent(num.dir),records(num.dir) blk.code=peek(dcb.addr+6) exm.index=blk.code if peek(dcb.addr+1) <> 0 then exm.index=exm.index-1 num.sec=peek(dcb.addr+2)+peek(dcb.addr+3)*256 rem first read directory into arrays for i=0 to int(max.dir/4) gosub 9010 rem set track high=int(sector/256) poke a.reg,sector-high*256 poke y.reg,high poke x.reg,51 dummy=call(sim) rem translate sector gosub 9020 rem then set it gosub 9040 rem read sector for j=0 to 3 dir.start=dfl.buf+(j*32) if peek(dir.start)<>e5 \ then \ n=n+1: \ gosub 8000 rem build array entr¢ …­… ¢ ¥ É Ð¥8é)¢… ¢" …„ ±i… ……ȱi… …… ±…¢ …„©… … … z ¤ ¦ ±=† Щ0Ð ¥ ÐÆ Æ ©1 � ¥ÐÆÆ¥ðæ ¥ ÉÐΩ… æ Ðæ¥ )о z Lb z z ï© � ¥ ª½™ ¼š ¢ ©£  ¢ ©…¥¤… „ 冀  ¢ ¥¢L¢8¥ é… ¥ é'… è°ñ¥ i… ¥ i'… ÊðŠ… t ¢8¥ éè… ¥ é… è°ñ¥ iè… ¥ i… h ¢8¥ éd… ¥ é… è°ñ¥ id… h ¢8¥ é è°ûi … h ¥ Lt Êð†Ð¥ðŠ 0 � `© � © ¢L€@ 1$2$4$8$16$Ž � ’ ” – K BLOCKS FREE OF $ TOTAL$EAC142EAD14CAD0EBADBC148DB014ADBD140B57 ;1810B88DB1148EBC148EBD1460AEB914101720F611F00EC901F0030AD3 ;1810D04CAE11A91A8D2801A900AA8EB914EEB914BD2801297F60A90A7C ;1810E8008DBC148DBD1420F21020C210200111B004ADBC14604CAE099C ;18110011C9303022C93A300BC941301AC94710161869092A2A2A2A067F ;181118A2042A2EBC142EBD14B004CAD0F4603860290F0930C93A3008EC ;181130031869074CD811484A4A4A4A202911684C2911ADB5142037069E ;18114811ADB4144C3711ADAC14ACAD148DB4148CB51460ADAE14AC0A8A ;181160AF148DB4148CB51460ADB014ACB1148DB4148L(COPYRIGHT (C) 2008 - RICHARD A. LEARY¢©•èà6Ðù©¬  ­�• ¢: “ ….¢; “ …/¢9 “ …0¢8 “ …1¢7 “ …2 U…58­¬é… …°ˆ„!„ ˜‘ ¥ÐÆÆ­É ÐLx­É ðLx­H©�h…Ð¥5…æÆ­…Ð¦è†Æ �©® …„©® …„©���'¢ ½�)Ê÷¥Åð Z© ¢ 0 ©ç  Ld¥ Z©  Щ  :ÐLx©±   ° ©¦  k©)  +¥Åð Z©)  +©©  k©)  +©)  :ÐLd© �®"©¯ "…„¥¤…„©…L­ ©ð©Ð©H©Þ  h ª½]¼^ ©Ù  ¥ · ° ¢ÿš† è† ©… z¥ …*©? #ЩĠ ©­  ©�  ©q  Lµ ©E #Ð — Ld©H #Ð — ¥¦†…LÄ¥ÉIðLæ ¢­fŠХ Ðʆ êÐLÚ ¥ðôÉÐ ‰ ß©… é –L! ÉÐ ‰ ß©… ïL! ÉÐ? z ©¯ÅÐ ©"ÅÐ ‰ L! f ¥…3  ±É ðÜÉ ðÁ f 8¥3å…3 z Æ3ÐùL! É Ð ƒL! ﴃ ÐL! É ðÉ ÐL! É �L! · L! © …¦ Ð · ÔL! ¥Éð ƒLµ ©O 1ÐLÄ¥ÉRðLe ©… ² êð¦à �L€ ]L © …¦ÊÐ ¢½�çÊÐ÷ð ¦à ° ]L* ©�ó�ô�©ç  ЩLŠ ©€… ¾…Éð ÔLS Lµ ©Q 1Ð ©)  +Ld "¥É-Ð ©… z¥É#Ð æ zL� U� f ÚЩ…¥ÉBÐ¥Iÿ…©¯ "…„¥¤…„ jLµ ÉCÐ ‘ jLµ ÉDÐ ‘ –Lµ ÉKÐ é –Lµ ÉLÐ eLµ ÉTÐ ïLµ É Ð¦ Ц*àÐ e " ïLµ $0 ÚðL„ ¥ÉAÐ/¥¤…„¥¤…„ j ÚÐæ íð üLI ©… jLµ ÉFÐ š íÐLµ æLe ÉMÐ5¦ Ð1©ÿ… ¥Ð¦ÊÐ ßæ î¦ �®É Ðò¥ … ©… ¥¤…$„%Lµ ÉSÐ- š   íÐLµ æ8¥å+…°Æ¦+ä°ä½J… ÔèÐñÉWÐ �Lµ ÉXÐq � ÚÐ �©  +Lµ �©  +©  :ÐLx 饤…,„-¥Å,¥å-� ±, ðæ,Ðëæ-Ðç$0© ðL: ©  5ðLx©  #Lµ ÉÐLµ L„ ©ÿ…4 ‰ ß©… ïF4`¥2 û © û ¥2Lû © · ¥1Lû ½ÿ` ª @Éð gLš Lƒ æL�© · © É °>É ð4É ð8É ð ÉÐ`H¥/É � ù LÜ û h @ ù ¥.Lû © ù ¥)Ðõ`©ÿ…© æ$4`¢L¢L¢ LH˜H ° h¨hL ¢ Éÿ`¢ Éÿ`¢L¢L¢L¢ Éÿ`¢L¢ Ð` ©ÿ`¢L¢L¢L¥ Z©  +¥5 ZL ° ©Â  ©)  # ° Ld©���(…`¥ Z©. L_©® …„`¥ Z©( L_¦ ²©ç  0ð©`ª†æ½(`¥`©……`©ÿ……` ÚÐ` ù©ÿ`¥ÐÆÆ`æÐæ`¥ÐÆÆ`æÐæ`¥ÐÆÆ`©ÿ… „ˆ„`¥Å¥å`¥Å¥å`¥É®¥é� ´ ±ÉÐ`æÐæ`¥ æ¦æ�ç` $ .�` ±‘ Lp 7�` ±‘ Lƒ $ .�` Lœ 7�` L¨ ©¥ Z©…¥¤ _©  0ðLx ©‘L©¥i€…�æÆÐÓL©¦H �©  5ðLxª†hæ�.`©® …„`¢½)�9Ê÷`ÅÐ ­fÉÐ¥ `H #ðh` ° h û ©º    æH ° hÉY`¥É0°`É:°)8`` ß U°`H¥ …"¥*…#¢&ÊÐù¥e"…¥e#…he…�æ zLi êÐ`É Ð © … © …ÉÐL„ ÂL ¦¥�Jè†àd�Lˆ `¥Å¥å�Lˆ ¥ ‘L î…ÉÐ`É ð`¦ `¥Åñ  ž(2063)x©6… çÿ©¢  ºÿ© ½ÿ Àÿ©¢  ºÿ©¢Û  ½ÿ Àÿ ´ Ïÿ�ÜèÐ÷8­Üé€�d­Ýé�eîÞ ´ Ïÿ�ÿÿèð õà€ÐñÎÞð=ÐêÎÞð6îÙ­ÙÉ:Ð ©0�Ù©1�Ø­ÙÉ7ЭØÉ1Щ0�Ù© �Ø©2�ÖîeЬlߢ Éÿ¢  ½Ï ÒÿèˆÐö¢ Æÿ¢`U1:2 0 1 0 #KKK¥å�Lˆ @ÉÐLß ‘ É ÐÞ`¥ Z8¥é®…"¥é…#¢F#f"ÊÐùä"Ð` ¥¤ _©)  5ðLx¥i€…�æÆ"ÐÞL¦à®Ð ¦à"ÐH h ‘æÐæ`8¥é®)ð© gLƒ ©)  #ÐLx©¦  k ¥ Z¢½�)Ê÷©)  B ©©  k¥ Z©) LBÉa�É{°8`` Ú�)_`¥ ð/ GðL€ ¦ ä �¥$%ð¥$ÐÆ%Æ$¥$%ÐL€ ¢† æ ½®`$ L$ ©… ©* · ©e ¢ © · ©…… ©¦ ìfЩÿ… (Щ �gæ ½g` éLj…"„# ±"™2ˆø` î æ…`© … Ô© …LÔ$0*¥¤…„8¥å…¥å…� ¥ɯ¥é"°©¯ "…„`¥¤…„¥e…¥e…° ¥Å ¥å!�¥¤…„`$K¦¤†„èÐȆ„ ¥ÅÐ¥ÅÐ ¥ÐÆÆ`±É ð æÐáæLÿ¥ÐÆÆÐí¥ÐéæÐæ`¦¤†„àЈʆ„æÐ栥ɮХÉ"Ð¥ÐÆÆæÐæ`¥ÐÆÆ±É Ð×¥ÐÆÆÐÍ¥ÐÉæÐæ`©…©¯ "…„¥¤…„ j ÚÐæ íð!¥Å¥å� ßð  ±H ghÉ Ðáðڥťå�`©ÿ…Lj RÐ`L€ é©ÿ… $ ¥¤…&„'L ¥¤…&„'¥&ÐÆ'Æ& ±&É Ð¥ð ° ¥¤…&„'¥Å&¥å'°` ±&H · hæ&Ðæ'É Ðâ GðÝL€ ¥¤…(„)¥(Å¥)å�L—æ(Ðæ)¥(¤)…„ ¹JÑ(ÐÜæÐæÈÄ+Ðî¥ÐÆÆ j©`©ÿ`©…  ¥…+`BAK$$$EDIT - VERSION 2.03-A $COMMAND SUMMARY - s is sign - n is number [type # for max] sn to move right [s=+] or left [s=-] n lines and type line nA to Append n lines sB to move to Beginning [s=+] or end [s=-] snC to move n Characters right or left$ snD to Delete n characters right or left E to Exit nFstring to Find nth occurence of string H to return to Head of file I to Insert text snK to Kill n lines right or left snL to move n lines right or left$ nM to do Macro n times O to restart with Original file Q to Quit without altering file Rname to Read library file nSstring1[ctl-z]string2 to Substitute string2 for string1 snT to type n lines right or left$ nW to Write n lines nX to store n lines in temp buffer $NEW FILE$-(Y/N)?$PEM FILE ERROR (FULL?)$ AT $BREAK - $DESTINATION FILE EXISTS$MEMORY BUFFER FULL$LIBRARY FILE ERROR$CAN NOT DO COMMAND SPECIFIED TIMES$UNRECOGNIZED COMMAND$%Hÿ€LIBX$$$$$$$LIBLIB11203910ADF514C9010A32 ;180A90F0034CD711ADFA14C92AD00620E2114CF20AADD914F0034C0B91 ;180AA8D711A200A000ADFA14D98813F00EC008B001E8C8C8C016D00CB8 ;180AC0F04CD711E004F009ADD8149DE8144CF20AC8ADD814F00DC90D84 ;180AD801F0034CD711B988138DD814B9881349FF2DEC140DD8148D0B3E ;180AF0EC14A200BD8F14F006200112E8D0F5ADE714206011ADE6140BCA ;180B08205B12ADE814205B12ADE914205B12ADEA14205B12ADEB140909 ;180B20205B12A208ADEC140A48A9009002A90120521168CAD0F14C0920 ;180B38270A203910AEF514ADDA14C952D00DE00290034CD7112046094E y next j sector=sector+1 if sector=num.sec then \ sector=0 : \ track=track+1 next i print "There are ";n;"entries in the directory" n.files=n rem combine entries for i=1 to n-1 if name.ext$(i)="" \ then goto 2000 for j=i+1 to n if name.ext$(i)=name.ext$(j) \ then \ name.ext$(j)="": \ n.files=n.files-1: \ extent(i)=extent(i)+extent(j): \ records(i)=records(i)+records(j) next j 2000 next i print "consisting of ";n.files;"files" print heading$="NAME EX RECORDS" print heading$ print for i=1 to n name$=name.ext$(i) if name$<>"" \ then \ print tab(1);name$;tab(14);extent(i);tab(17);\ records(i) next i print poke x.reg,27 map.addr=call(pem) rem allocation map address total=0 num.alloc.byt=int((peek(dcb.addr)+peek(dcb.addr+1)*256)/8) for i=0 to num.alloc.byt byte=peek(map.addr+i) for j=1 to 8 byte=byte*2 if byte>255 \ then \ total=total+1: \ byte=byte-256 next j next i print total;blk.size$(blk.code);"blocks allocated of "; num.blocks=peek(dcb.addr)+peek(dcb.addr+1)*256 print num.blocks+1 gosub 9050 rem restore default stop rem subroutines 8000 rem extract directory entry and stuff in array name$="" for k=1 to 8 char$=chr$(peek(dir.start+k)) if char$<>" " \ then name$=name$+char$ next k name$=name$+"." for k=9 to 11 char$=chr$(peek(dir.start+k)) if char$<>" " \ then name$=name$+char$ nò  ž(2063)x©6… çÿ©¢  ºÿ© ½ÿ Àÿ©¢  ºÿ©¢æ  ½ÿ Àÿ ¼ Ïÿ�çèÐ÷ Ìÿ8­çé€�g­èé�hîé ¼ Ïÿ�ÿÿèð õà€ÐñÎéðBÐêÎéð;îä­äÉ:Ð ©0�ä©1�ã­äÉ7ЭãÉ1Щ0�ä© �ã©2�áîgЬîhЧlê¢ Éÿ¢  ½Ú ÒÿèˆÐö Ìÿ¢ Æÿ¢`U1:2 0 1 0 #KKext k name.ext$(n)=name$ extents=(peek(dir.start+12) and exm(exm.index)) + 1 extent(n)=extents records(n)=0 for l=1 to extents if l < extents \ then records(n)=records(n)+128 if l = extents \ then records(n)=records(n)+peek(dir.start+15) next l return 9000 rem set drive to value in a poke a.reg,a poke x.reg,14 dummy=call(pem) poke x.reg,34 dcb.addr=call(pem) return 9010 rem set track to value in track high=int(track/256) poke a.reg,track-high*256 poke x.reg,30 poke y.reg,high dummy=call(sim) return 9020 rem set sector to value in registers poke x.reg,33 dummy=call(sim) return 9030 rem set buffer to value in a high=int(a/256) if high>255 \ then \ print "Illegal buffer address": \ gosub 9050: \ stop poke y.reg,high poke a.reg,a-high*256 poke x.reg,36 dummy=call(sim) return 9040 rem read sector into buffer poke x.reg,39 if call(sim) and 255 \ then \ print "Directory read error!": \ gosub 9050: \ stop return 9050 rem restore default drive a=dfl.drv gosub 9000 return 9060 rem get left digit and make uppercase a$=left$(a$,1) if (a$>="a") and (a$<="z") \ then a$=chr$(asc(a$)-32) return end 00490F168A8B9FC138DFD14B93C148DFE14A900A0050E0B89 ;180FB8FE142EFD142A88D0F669BF200112CAD0EA201E10A206E0030B60 ;180FD0D01AACFB14F015ADFC14C9E8A9B98DDB1420DB14B01D20600D49 ;180FE81188D0EB0EFC14900EBDEF13200112BDF513F003200112CA0AC6 ;181000D0CC60202B10AAELºCOPYRIGHT - RICHARD A. LEARY - 2008© L©  .L© O© LO© ,.0¢L¢LÉ Ð >æ/¥/)Ðõ`H @æ/hÉ ð`©…/`…S„T©…U¢/8¥Sé…S¥Té'…Tè°ñ¥Si…S¥Ti'…T æ¥Séè…S¥Té…Tè°ñ¥Siè…S¥Ti…T æ¥Séd…S¥Té…Tè°ñ¥Sid…S æ¥Sé …Sè°÷i …S æ©0SLO© $U0à0ð©ÿ…UŠ O¢/8`� Œ ­ÿÿÉ$Ð` Oî Ððî L ©£ - üL¢½¹-�ÊÐ÷ŽŽŽ'©j 0¢ ¢ &0`©½ -L ¢ -0`L ,.`¢½� .Ê÷èŽ.Ž.Ž*.¢ -¢ -L `©� .�.…�.…`,.`©ê 0¢ ¢ -ðL ©j 0¢L¦2 H ” h¢†2æ2�ê0`¢ &É�L `¢Q© �j1ÊàÿÐø`¥0¤1 p¥4 O© O©…¦½j1 Oæ¥Å3�ððî 4 Ö ©:…4` p Ð¥ ÉТ½Ó-�j0Ê÷è†5 j … ¦6àR°è†6¥ �j1¥ É Ðæ0Ðæ1¦6ʆ3­.ð ã ©…6¥ É ð`© … `¦5½j0`æ5©…5 É ÉЩÿ` j … É ðå©`  É ðùÉðõ`¥ É\ð`  É ÐùLŽ …8¥6…7æ7æ7¥ Éð¥ É ð š  L½ ,þ-C,.0 ã æÐæ©? O©- O©- OÆ7ð 0©- OLì ©^ O 4¥8 ª½Z-¼[- ü 4©�.L„ ,ý- ¢½�*.ÊÐ÷ " ©….…/…0…1…6 Ö ©€…5©:…4­+.É$ÐD¢½+.èÉ ð: ÿÉAÐŒÿ-ðíÉCÐŒ.ðäÉEÐŒ.ðÛÉFÐŒ.ðÒ ÉBÐŒ.ðÇÉDÐÃŒ.ð¾©�.LŽ $.`榥 •e )?… à°`©ÿ….` — LŽ — L ¥ É0�É:°©ÿ`©`¥ Éa�É{°©ÿ`©`¥ É.Щÿ`©` Ñ -.Ð`¥ )_… ` í Ñ ð`¥ ÉA�É[°©ÿ`©` ý ð` Á ð`Lá Á Ð` » L% ¥ É Ð Ž ©….`¦;½÷.…@½/…C½·.…LŠ ª½w/¼x/…F„G½7/¼8/…O„P¦<½÷.…B½/…E½·.…NŠ ª½w/¼x/…J„K½7/¼8/…Q„R¦=½÷.…A½/…D½·.…MŠ ª½w/¼x/…H„I`H¥; ªh�w/˜�x/`H¥ Q © 2 Q…F„G ® ©  ,.0`©�. ¥g‘eÈ¥h‘e`…‚„ƒ©2 È © ô ©…„ ±‚Å„� ¤„±‚ ô æ„Lv$. ˜ Lr©Lô ©. ô ©  ©1 È ¥; ?ð &ÉÐ QL/©……¥Å…� ¦…µ &æ…LÀ©$ &æpÐæq¥p¤qL/,.¥CÉ1Щ+Lô ©,Lô ¥CÉ1ð©$Lô ¥@ÉJÐ`©#Lô ¥BÉ ð`¥J¤K…g„h ¥g¤h ¼ ÆN¥N Ú QL8¥BÉ Ð¥J¤K…g„h ÅDð© « L©¤DÀ1ЩEN)ð© « ¥NJ Ú ÆE¥ELÎ ¥BÉ Ð¥Nð© « © ô ¥O¤P…g„h QL/¥E)ð© « ¥B ô ¥E)@ð©2LÎ ©1LÎ ,ý-0`¥= / œ Q ¥D ö© 2¦BèŠLÔ …x­þ--ÿ-𩌠- ü¥x  p 4 ? ¥x ª°½� ½�Lÿÿ½� ½�L PPQ†ääPPPPPPPPPPPPPPPPPPPPPPPP�–P¤¯´P¹PÄPÏPí½ P!P,7PPINS„ä£u±·Ü™êñööûû  ™·Þã P )<a·““·PPP˜Ö´PîîºÆäPùù P&22P,ääPääP7<KPd zo]w�•ŸPPPPƃPÆ«ÌÑÖ>C`¥; ?ð' @ð QÅrÐÄsð© « LJ¥r¤s © 2LJ©*…4LJ©:…4LJ ¬ðL`¥BÉð`¥J¤KL8 —Ð`¥ALô © L ©]L —Ð`© Lô ½Ð`© Lô ¬Ð`¥CÉ1Ð¥ALô ¥Ai ô ©1LÎ ¬Ð`©¤CÀ1ð©Lô —Ð`©Lô ½Ð`©0Lô —Ð`©Lô —Ð`©Lô —Ð`©Lô ¥@Éð©Lô ¥F¤GLA¥DLÎ ¥;L,.© « ä¥J¤K…g„h ÅBð© « Q A©! ô ©LÔ ¥< ?ð &Éð© « © Ô ¥g¤hL¼ 6¥Q¤R…O„PLu 6L¥; ?ЩL« ¥g¤h æ ¥g¤h ® ©  &Là ¥  ¥CJJ)Là © Ld©L © LÔ © LÔ ©L ©L ©LÔ  ±e…gȱe…h¥@J�© ô Q A© ô ¥@J� Q 8© ô © ô ¥@J�-© ô ©¨ 8© ô ©  8©8 ô © ô ©  8©9 ô © ô ©7 ô  ±eHȱe¨h / ¥r‘eÈ¥s‘e`©6 ô  ±eHȱe¨h / ¥r‘eÈ¥s‘e`©ÿ�.8¥eé…e…y¤f°ˆ„f„z ±y)‘y© éæi`©LÔ  ±e…gȱe…h Q 8©  ©. ô ©¨L/©Ll©[ ô ©^ ô ò QL/© l©6 ô LŽ¥DÉ2Щ « ©7 ô LŽ ¬Ð`¥J¤K…g„h¥A 2 © ô © ô ©Ll©6 ô Ž¥; EH¥C Î ¥g¤h ¼ ,ý-0hLghð© « ¥r¤sL©LÔ ¥< ¥EÉ1Щ « ¥F¤G A©-Lô ©¨L8 ä¥J¤K…g„h`¥< Eð ,ý-© « © 2,ý- Q  Q 8© Ô ¥g¤hL¼ ¥CÉ2Ð Ñ©[ ô ©@Lô ,. ©> ô ©�.`©' ô ©…` äL©? ô ©�.`©4Lô ©ÿ�.©[ ô ©&Lô ©ÿ�.©[ ô © ô ©[ ô ©%Lô ,.`©5Lô z©Ll … Q 8©` ô © ô L] ©L ¦BèŠLÔ ©ÿ… ©…`©1ÅDÐÅCðLÑ©[ ô © ô ©[ ô ©(Lô ©Lô ©Lô ,ý-3©�ý-¥ið © « ©…i©* ô ¥r¤si�È)ü /¥¤ / QL/¥ É ð  L© ô © ô ” N ¥¤ p©’ - ü 4L©/Lô ©MLô ¥9¤: ª˜*¨Ši«�l˜i$�m¢ kHè k¨h`½ÿÿ`¥9¤:iW�€˜i'��­ÿÿ `æ;¥;É ð`©L« $> ˜ ©…>`¦?�÷/è†?àe°`©L« \ ±L ¢©•èà†Ðù©ÿ�ý-�.©:…4©€…5©Ø - ü 4 ±,ý-0,þ-0Lï©ÿ…>�.©y …9„:©ÿ…;©…?�×.,.Ô©xÅ9©å:°LÛ …¥; ª¥9�·/¥:�¸/ H…X„Y “ oeX…Z˜eY…[¥ZÐÆ[ÆZ¥ZÅX¥[åY�´¥Xiÿ…_¥Yi…` ±_Å ÐW¥?¦;�×.¢†^µ Ÿæ^¦^ä�óðñ¦;¥ �·.¥ �/¥X …_¥Y*…`¥_iã…_¥`i …` ±_…9ȱ_…:©ÿ…>¥Z¤[…X„YLÒ¥XÅZÐ ¥YÅ[Щ « æXÐæYLK©½Å9©å:�Ls o…X8¥;åX…<¨È„=8¥9é½ Ü,.0Lâ¥<…; H…X„Y¦;½×.…?Š ª½·/…Z½¸/…[¢†]¦X½c …\ðÅZÐ¥[ð æXÐçæYL'¥X …_¥Y*…`¥_i«…_¥`i#…` ±_…9ȱ_…:9Щ�.L ©¯Å9©å:�U H…X„Y “¢†]¥XiÌ…_¥Yi…` ±_…\ð Å ð æXÐßæYL‡¥X …_¥Y*…`¥_i}…_¥`i"…` ±_…9ȱ_…:L  … oH¥; ªh�·/˜�¸/ H…9„:L ©ÿ�. ±©ÿ�þ-Lâ1 124561  124561245664 412456 4112 12456  11#$%&(*+,-.01341 4 4  !)!$+ ! !! ! ! !!'!)!!  #$%&(*+,-.034#$%&(*+,-.0344  "   1 "4 412 "  " !!!!!'!!!!!  4  " 4    7i / "$&(bdfgrt.!?    #/7ceij' cj(>JJ¿ÿ�þýFIK!ÿ�þý!ÿ�þý*�ÿ�þý�ÿ!ÿ�þý÷&O@ G  "H}~R&J€QTU�E.Ü‚ƒ ¾ßàßàHJ ßàöøßàôßàùüßà%'ßà<ßàßà$ßà% ßà=ßà>?S  "H}~R&J€QTU�û  "H}~R&J€QTU�-|z {  °±±±NM##²''³´´´´´()õ+µ,L11ç22ê33ë44è55é¶¶¶79ì:í;îB4D,E+F-H(LL)MM5NNÛTT8UUU·WWPXX*YY6[]]9^^ _A`Baa¸c¹ººe:::fhú»»ij¼mÝnÞoÁpqsu½vvvvvvvvåwwæx"¡G©ª¨ÇÆÈÚ ÉbPZ—˜\›SVšJ–Kœ’“”•™ROQI.§¦âáäã A œªDCBA œˆDCBB œ–DCBTBL ˜òDEVICE �ËDFLBUF (DMAADR �ÉENDMVE šòERFLAG �ÃFILHST šIFLASH ÌGETMSG ˜JGETSPT ™©HCOM ›HITKO K ›/HOME ™HOMED ™ HSTACT �±HSTBUF ž.HSTDSK �·HSTSEC �ºHSTTRK �¸HSTWRT œ¥INTTBL –ªIOSTAT IOTYPE –AKEY ÿŸKEYTBL œ¬KYBDMD = œ©KYCHAR �­LA3F ›RLA49 ÿ  ž(2063)x©6… çÿ©¢  ºÿ© ½ÿ Àÿ©¢  ºÿ©¢õ  ½ÿ Àÿ Ë Ïÿ�öèÐ÷ Ìÿ¢­ö�^­÷�_½v �ÿÿè÷îóÎø­öi€��­÷i�ø Ë Ïÿ�ÿÿè÷Îøð:ŠÐïîó­óÉ:Ð ©0�ó©1�ò­óÉ7ЭòÉ1Щ0�ó© �ò©2�ðî‚Lz çÿlù¢ Éÿ¢  ½é ÒÿèˆÐö Ìÿ¢ Æÿ¢`U1:2 0 1 0 #®­…‡†ˆ„‹ŒŠðï1@@0@@0@@0ñrót£<ò?Ê=/ ¤‰Å¬lkÌA«į$#gÍ‘ÎÒ¥��ŽÏŸ�3d ¢ÐÕ8>ž�ÑC0D6ËCØÔÓÃÖ×"$  ¨ !"#$%-/02<=>?@$BCCCCCEFYZZZ[\Y%]^_`aaabcdgldddosvz~d‚…dddˆd‹ddŽŽ�$‘§¨$º»¼¼½½½¿ÀÁÉË  #&),/3579;=?ACFILOSVY\^adfhkmptvy{}�ƒ…‡‰’•ÀÙ2/7!Ù;2ÙÙ2 $$%%''))+++++---22555577BBCCDDEEFFHHHHHHHHHIJKLLMMMNNOPQRSSTTUVVWXXYZZ[]]^__``abbcccffggghhiijjllmnnopqqsttvvxxyyz{|}~                 #'(+7Uaceiju <(+*)-,=/;>:#^IFTOGOONOREQLTGTLEGENEFORLETREMDIMDEFNOTANDTANSINCOSSQRTABLOGLENFREATNABSEXPINTENDPOSRNDSGNASCVALXORSUBPEEKPOKETHENREADGOTOELSENEXTSTOPDATAFILECHR$MID$STEPSTR$CALLSINHPRINTINPUTGOSUBCLOSELEFT$RETURNRIGHT$REMARKRESTORERANDOMIZE    HEFIJNTLGAKBOCDQX! P)&$"%(c#RU'WYZ-,+*S.V03%v¶Ïáèè 5EJMNNAFGFADUPLICATE LABELS OR SYNCHRONIZATION ERROR$IDENTIFIER IN DIM PREVIOUSLY DEFINED$PREDEFINED FUNCTION NAME PREVIOUSLY DEFINED$FOR LOOP INDEX NOT SIMPLE FLOATING POINT VARIABLE$INCORRECT NUMBER OF PARAMETERS IN FUNCTION REFERENCE$INVALID PARAMETER TYPE IN FUNCTION REFERENCE$UNDEFINED FUNCTION$INVALID CHARACTER$EXPRESSION IN IF STATEMENT NOT FLOATING POINT$ILLEGAL FLOATING POINT FORMAT$SUBSCRIPTED VARIABLE NOT PREVIOUSLY DIMENSIONED$ARRAY NAME USED AS SIMPLE VARAIBLE$STRING EXPRESSION NOT ALLOWED$MIXED MODE (STRING - FLOATING) EXPRESSION$NEXT VARIABLE DOES NOT MATCH FOR$NO PRODUCTION EXISTS$NEXT STATEMENT WITHOUT MATCHING FOR$INCORRECT NUMBER OF SUBSCRIPTS$COMPILER STACK OVERFLOW$SYMBOL TABLE OVERFLOW$UNDEFINED LABEL$VARC TABLE OVERFLOW$UNTERMINATED STRING$INVALID TYPE IN FILE IDENTIFIER$FOR WITHOUT MATCHING NEXT$&*P*u*¡*Ó*+5+H+Z+ˆ+¦+Ö+ù+,A,b,w,›,º,Ò,è,ø, - -@-PROD $ ERRORS DETECTED$DISK ERROR - ABORTING $BASNO SOURCE - ABORTING $END BASIC-E/65 COMPILER - VERSION 2.03-A$INT Ò,è,ø, - -@-PROD $ ERRORS DETECTED$DISK ERROR - ABORTING $BASNO SOURCE - ABORTING $END BASIC-E/65 COMPILER - VERSION 2.03-A$#¾È Âø ɯ<É:ˆO=_ÕþÒZ!µF!©V#fjQ̓ÂEÑ!º^#Vo&)~#FÉÑÍÇÀÅÍÛxÁÀ·°Gy¿Éѯ<ÉàÃÃnÃ8ë!’~þڢͅ6~44O!� s#rÉõ!‘~þ Ú¿6Í…^4ñ!mw!wpÉ!’~·ÂÞÍ…!É55N!� N#fiÉÍÏëÍÏÉo&)^#fkL½0LpLvLzL�COPYRIGHT - RICHARD A. LEARY - 2008Éa�É{°)_`©ÿ�`N`­¬® �ŒŽ`­�¤­�£­¬ ÿÿ�ŒŽ`¥j¤k…`„a¤i¦hЈʆn„o¥bi`…d…p¤c�È„e„q¥b¤c…^„_i…\�È„]`©: 0….„/mc…,˜md…-8¥fé:ª¥gé0¨Š |8¥påf…6¥qåg…7¢¥f¤g ¶¥d¤e…r„s 8­é‘rÈ­é‘r© ‘rÈÀÐù ±rHȱr¨h…r„s ˜‘rÈ‘rÈ¥d‘rÈ¥e‘r` ¯ è¢P©�é/ÊÐúL'©? ;© ;©y / J $­{/ÉÐ F©z /…„®z/è© �z/`8¥ézÍz/�©`©ÿ` R­A¬B…`„a© ÊL;+ænÐæo¥nÅb¥oåc�©L¸ ±n`æÐæ ±`­CÐ(©PÍD°©L¸ i®D�z/É Ð ] ðâ©L¸ ±`ÉÐLé ÉÐLÏ `©�D ô �0 É ðö­CÐ ©z /�EŒFLr ÉÐ ¥¤�EŒFLr ÉÐ ¥n¤o�EŒF­0 É"ð©,�1 L™ ©"�1 ­CðîEÐîF ô �0 ­0 Í1 ðÉ ð îD ô �0 L™ ­1 É"Ð ô �0 É,ðÉ ÐòL‚ 2 ­D i K…„iÐÈ….„/­E¬F…,„-­D  | ¥‘\È¥‘\© ñ ­D‘` 2 ®Dð­E¬F !¥\¤] ÁL�­CÉÐLº  ˜‘\` ©‘ˆû` !±u` !‘u` D )` D LI D )þLI D J)` D )ùLI D LI D €LI D **)` $¥‘uÈ¥‘u`¥wxЩL¸¦w¤xè†`ÐÈ„a­6¬7…\„]­8¬9…^„_¥ÅХŀð D  I ¥ÐÆÆ ‹ L;+ wÐLs ƒ ÐL— : s   ±ui‘u` N ð5 D )ð  ±uð8é‘u D )û I €ð©L¸ \ ƒ ð k L> : ¥¤€…„`æÐæ¥Åy¥åz°©`©ÿ`­: ;Щ`©ÿ`H ] ðî<Ðî=­:Í<­;í=°©L¸ G ð  d Ð ƒ ð ä   ±u8é‘uh ‘LT  ±\Éð�© L¸` ² ª½ê/…u½ë/…vuЩ L¸ ±\ ª½0…w½0…x`¥u¤vi&…�È„€i€…y� îÀ�©�Ä�𢎲�èŽÄ� ö˜Ð©�Ä�©�Ã�­µ�¬¶��¼�Œ½� ö˜Jªð N½�n¼�ÊÐ÷­±�H莱�hð0­¤œÍ·�Ð ­¸�ͳ�Э¹�Í´�Э¼�ͺ�Э½�Í»�ð9­¥œð ›­¤œ�·�­³�¬´��¸�Œ¹�­¼�¬½��º�Œ»�­Ä�ð › R›�Ã�©�¥œ©�âš�ãš ö˜ðkªÊŠ-µ�ªð­âši€�âš­ãši�ãšÊÐì©.mâš�âš©žmãš�ãš­âš�êš­ãš�ëš­É��ßš�íš­Ê�� àš�îš ®Å�Ð莥œ¹ÿÿ™ÿÿˆ÷0 ¹ÿÿ™ÿÿˆ÷­Æ�ÉÐ ­Ã�Ð�¥œ ›­Ã�` › x›�Ã�`­·�i�Ë�­¸�¬¹��Ì�ŒÍ�îÌ�ÐîÍ�­Ì�Éðñ­º�¬»��Î��Ï�`­·�Í«œð�«œ œ` C›©1 ¨› hœ¢ Ïÿ�.žèÐ÷Žªœ Ìÿ­ªœ` œL{› C› ~œ ½œ ÒÿèˆÐö Ìÿ XœÐà Ìÿ sœ¢½.ž ÒÿèÐ÷ Ìÿ©2�û›­Ì� œŽœ�œ­Î� œŽœ�œ©�ªœ ~œ   ½ú› ÒÿèˆÐö Ìÿ Xœð Ϊœð œLÈ›©�ªœ Ìÿ­ªœ`©ÿÐòU1:2 0 TT SS #B-P 2 0 IØ¢08é �è°ùi:`© Ãÿ©®Ë�  ºÿ©¢ œ ½ÿ Àÿ© Ãÿ©®Ë�  ºÿ©¢ œ ½ÿLÀÿ œ¢ Æÿ°ö ÏÿÉ0` :œ¢ Æÿ°ö` :œ¢ Éÿ°ö` œ¢ Éÿ°ö¢`‡"?Ð�ž‡"?ï�ž@ ††‡‡€€��‚‚ƒƒ„„…… 33#3wWWaAA44$4zZZsSSeEE55%5rRRdDD66&6cCCfFFtTTxXX77'7yYYgGG88({bBBhHHuUUvVV99)}iII jJJ 000mMM kKK oOOnNN++++pPPlLL ----..>}::[{@@@`,,<{\\\|****;;]};===^^^~//?\11!1____22"2 qQQ ÏD65SPT �ÇDATÈ„z "±u�:ȱu�;ȱu…ȱu… ž Œ?±uЭ@L/ 8é¢ ¢" … „  ± Ð  ± ð8n?` e ‰ö© L¸`É �+ð)É=ð%É_ð!É.ðÉ:ðÉ;ðÉ<ðÉ>ð Éð É*ðÉ?ð`©L¸©�” ¢èè½ê/ë/ÐöŽ’ ©¦  K…u„v®’ �ê/˜�ë/¥u¤vi&…�È„€ ž  © ‘uˆÐû±\…ȱ\… ȱÉ:Ð)ˆ± eÉA�šÉI°–)ˆ‘u±8é�“ ¥i…�æ L ±�“ ­“ É �© �“ æÐæ ©ÿ�• î• ¬• ± eÉ.ðÌ“ ° È ^ ‘uL0î• î” ¬• Ì“ °± e¬” ^ ‘uLM N : ¥u¦vè $‘uÈŠ‘u R ±\ªÈ±\ #‘uˆŠ‘uLR¥\¤]�6Œ7¥^¤_�8Œ9` Â ë ©�<�=©ÿ�>LR ] ЩL¸ $Ð Ùð©L¸ 8±\é‘\ȱ\é‘\ { k  ­:¬;…2„3  –)e¤€�ȪЈʆ„ ‹ `¥3),?)? `�¿ `  ±uÅ4ÐȱuÅ5ð n©L¸  ¥4‘uÈ¥5‘u N ­¿  ‘uLR2&3&4&5` G ð  ä d Ð ä  ±ÉÐ —  ±`æ Ðæ `�“ªÐ ,,>0©, k L±©�> ±\… ȱ\… ˆ± �•­“ÐΕLÒ©" k Œ©�”­•Í”� ± É"ЩL¸ k Œî”LÚ­“ð©" k ÎLR ë  n©L¸¥u¤vLè¢èà�ð`ŠH ª½ê/…u½ë/…vuð hªL$ " $ 4LH¥^¤_ ¸h)ÐL © ñ …„ ±Hȱ¨h ¥ð* ±ªÈ±¨ŠÐˆÊ†„8 ±é‘ÉÐ ±Hȱ¨h è 8é°ˆ…„ ¥ðQ ±ÉÿÐ@æÐæ±i KH˜ ‘\…/ˆh‘\….¥¤…,„- ±i | ±\ªÈ±\¨ŠÐˆÊ†„ ±i‘¥\¤]…,„- ….„/Lr© �JŒK {¥\¤]�LŒM¥^¤_�NŒO©�P ±`ÍP�/ i�È…2„3­J¬K –�JŒK ‘\È­K‘\ RîPLB­L¬M…\„]­N¬O…^„_ ±`i �Q­J¬K «mQ�È K�LŒM…„ ±`‘˜È‘©�P ±`ÍP�¥i…�æ ±\‘ȱ\‘ RîPLÅ ‚ ­L‘\È­M‘\`¥i…�æ` …„ R �RŒS ±�T©�P­TÍP�+ R þ ±…2ȱ…3  –mR�R˜mS�SîPL) þ ­RÑÈ­Sñ�©L¸­R¬S «eª˜e¨Šiª�Ș ‘\ˆŠ‘\` e`ª˜ea¨ŠÐˆÊ†`„aLR ð –LR RLR { …`„a` ±\` É)Ð` Lè�éŒê êÐ`­ÿÿ`)ð  ¹æ‘\ˆø`¨‘\`�©L¸` $Ð 3ð LR  Üi�G ÿ  Ü�HmG�I ÿ­I  K…„….„/ ±^…,ȱ^…-­Gˆ | ±\…,ȱ\…-æ,Ðæ-¥mG….¤�È„/­H  | Î R Π¥‘\È¥‘\®IÊŠˆ‘©ÿLñ Î RLΠ±\i` $ð ¥\¤]…„LÒ ±\…ȱ\… 3ð ¥^¤_…„Lí ±^…ȱ^… ±�¶Œµ­¶͵�( ±Ñ° ¤©`𠤩`æÐææÐæîµL÷ ¤©`�-¢Ž0ÉÐ B ÙÐ ð©L¸ Ô ±\�0 R ÙÐ  ÜÍ0� ð R Π˜‘\È‘\` Ô  Ü8í0�1 Ñ\°­-ÉÐ ­1i‘\L®­1‘\­-Ð �.Œ/LöÉÐ m1�ÈŒ/8 ñ\�.°Î/Lö m0�È8é°ˆ�.Œ/­.¬/…,„- ­  K…„….„/ ­  | ±\‘ R Π¥‘\È¥‘\©ÿLñ© ;© ,0¢L¢LH˜H¢ Ð æ„Ðæ…LMh¨h¢ L¥u¤v¢L¥u¤v¢L¥u¤v¢L¥u¤v¢L¥u¤v¢L¥u¤v¢ L‰¥¤€¢L¢ L�UŒV¥p¤q…"„#©�Y�Z¥"#ðo ±"ÐZ ±"ªÈ±"¨8Šå"ª˜å#¨8Šé°ˆ�]Œ^mY�Y˜mZ�Z­U Vð%­U¬Vi�È�[Œ\­]Í[­^í\�¥"¤#` ±"ªÈ±"†"…#L­U Vð©L¸­Y¬Z`�UŒV VÐ`­U ¬…"„# ©‘"­U¬Vi�Èe"…&˜e#…' ±"‘&ȱ"‘& ±"Hȱ"¨hi�È…(„) ¥&‘"‘(È¥'‘"‘( ©‘&¥&i…&�æ' ¥"‘&È¥#‘&­U¬V…6„7¥"i…"�æ#¤#¢ ¶¥"¤#`8é… �W°ˆ„!ŒX ©‘ 4¥ i… �æ! ± Hȱ ¨h… „!!Ð` ± ð` 4¥ ¤!�WŒX` ± …*ȱ …+±*ˆ*Ð` ±*ð` ±*‘ Hȱ*‘ ¨hi…*�È„+ ¥ ‘*È¥!‘*` ±,‘.ˆù`�_Œ` ­_ `Ð`­_ÐÎ`Î_±,‘.æ,Ðæ-æ.ÐÞæ/L„„ƒ &ƒ &ƒ¤ƒ`�Όϥ6ÐÆ7Æ6¥6%7ÉÿÐ`ŽÿÿîÎÐçîÏL¼ ª½/¼ / §¥lmð©X + §¥l¤mi�È © @© L@� Œ ©� ¢/8­ é� ­ é'� è°í­ i� ­ i'�   ­ éè� ­ é� è°í­ iè� ­ i�   ­ éd� ­ é� è°í­ id�   ­ é � è°õi �   ©0 L@© , 0 à0ð©ÿ� Š @¢/8`H ©D + §h ÛLH ©M + §hLÛ ±\0©`©ÿ` ±^0©`©ÿ` )‘\` ±^‘\ˆù` ±\‘^ˆù` ±\ð©`©ÿ` ±^ð©`©ÿ` ±\È\ð©`©ÿ` ±^È^ð©`©ÿ` ±\ª±^‘\Š‘^ˆó`¥^¤_…\„]8é…^°Æ_Åb¥_åc�`8¥dé…^¤e°ˆ„_`æ`Ðæa`¥\¤]…^„_i…\�È„]Åd˜åe°`¥b¤c…\„]`…{¥dÅ{„{¥eå{©ÿ�©`…|„} ±|ªÈ±|¨Š ¥Ð ±|…~ȱ|ˆ~*~*ª¥fe~‘|ÈŠeg‘|`¥\¤] ¸ …,„-¥\¤]….„/Lr ±^Hȱ^¨h` ±\Hȱ\¨h` ±`Hȱ`¨h` 4©…t` q °!­Ì/É Ð ¢ÿè½Í/�Ì/Ð÷¢è½Ë/ÐúŽË/© �Ë/ ©Ë‘\È©/‘\` ±\…ȱ\…ð%Œ` ±Í`�¬`± ;æt©ƒÅt° $î`Ls`…0„1©…4…5 ¥2J� ¥4e0…4¥5e1…5f5f4f3f2ˆÐã¥2¤3` q©®   x � î ±\ ‘\ ±\ˆ‘\`¥^¤_Lò¥\¤] ä . ©…Q…O¢$LʆK¥@¤A Á ¥L‘B`¥^¤_L ¥\¤] ä ±@…L¢˜†K¥LIÿ*©…Q…O y¥@¤ALÁ rLx q¥^¤_ ] x ð R©` Ùð R©` R©`¥\¤]Lä¥\¤]LÁ¥^¤_Lä¥^¤_LÁ$?© Ê ¹ª‘\ˆøÈ„?„Q„P„O`ÿÿÿ€‘COø”t#÷”t$„ ��IÛ�5ó€€€1r�8ª;€5óƒIÛ�€€?ÇR˜5Dzh(±Fþy`'ÿüdÿÿö€Vª€v"ð‚8ª@t”.@w.Opzˆn|* æ~ªªPÿÿ�€�†׺‡™&d‡#4X†¥]àƒIÚx;×J{„n|/Áþ}š1t}Z=„~‘È~L»äªªl� …M„L¢�8†K©…N…Q…OL~¥OIÿ…O¥LIÿ…L¥MIÿ…M¥NIÿ…N¥QIÿ…QæQÐ æNÐæMÐæL`¥Kð ¥O*©ÿ°©`…B„C ð ¥N‘Bˆ¥M‘Bˆ¥O %L‘Bˆ¥K‘B„Q`…@„A ±@…Nˆ±@…Mˆ±@…O €…Lˆ±@…K„Q`…@„A ±@…Uˆ±@…Tˆ±@…VEO…[¥V €…Sˆ±@…R`¥V…O¥U…N¥T…M¥S…L¥R…K©…Q` ð¥O…V¥N…U¥M…T¥L…S¥K…R©…Q` ¥OIÿ…OEV…[LHL›¢W´„Q´”´”¤P”i0ìðê騥Q°Hµ)€V•vvhjÈÐì`…B„C ±BȪÐL³±BEOL·äKбB €ÅLÐȱBÅMÐ È©ÅQ±BåNÐ`¥O�IÿL¹H©Ú / Áh…LIÿ*¢ˆ†K©…M…N…Q  9729 WBOOT L^–L°–L+—L�—LÜ—L^˜êê`êê`L™LϘLë˜LݘLä˜L ™L™©`¢€`êê` ^(  C64 DOS/65 2.15 SIM 3.01D çÿ© …Ï© Òÿ© Òÿ© Òÿ©“ Òÿ© Òÿ©(�­�©B – D˜¢Ž±�޲�½ª–�èàÐõ©(  䘭¤œL‚L–LŠ¢ÿšØ©(�¯�©�%— Ϙ©�'—© ‚�)—Œ*—­%—¬&—  똭'—¬(— ݘ­)—¬*— ä˜ ™)ÿÐ0ί�ð"­)—i€�)—�î*—î'—­'—É"ÐÁ©�'—î%—з­¤œ�·�LŠ–lüÿ‚­¦œÐ1 Ó—­�)𭧜Р­©œI�©œ©�§œ­­�É:ð É=ðͨœÐ©�¦œ`H  ¢2ÊÐýˆÐø Ó—hÍ­�Ðæ�¨œÉ@ðß©ÿÐÝ©…Ì +—)ÿðù©�¦œ­©œ�¬�­�)ð©�¬�­�)ð©�¬�­¨œ m¬�ª½¬œÉ€�© H©…Ì© Òÿ©� Òÿh` Ÿÿ¥Å�­�`H­A–)Ð:h #˜É Щ“Ð/ÉЩ� Òÿ© Òÿ©�ÐÉ Ð©ÐÉ Ð ˜©‘Ð É � É€°Hh Òÿ`ÉA�É[� Éa�É{°)_` `ÉA�øÉ`°ò €`�K˜ŒL˜­ÿÿð Ü—îK˜ÐóîL˜LJ˜`H­A–)ЭA–)Ðh #˜Lz˜h 9˜Hh�ªœ­ªœÉ ð¢ Éÿ° ­ªœ ÒÿLÌÿÉÐ £˜�à©ÿ�ªœ`  »˜­A–)ðó¢ Éÿ© Òÿ © Ãÿ©¢ ºÿ© ½ÿLÀÿ)� ¤œ ª½ò˜¼ó˜`�µ�Œ¶�`�É�ŒÊ�`�³�Œ´�`ˆœ–œ®¤œ½ÿ˜É`­¥œÐ�±�`¢Ž²�èŽÅ�ŽÄ�èŽÆ�Lí™�Æ� ö˜Ð©�Æ�¢ŽÅ�­Æ�ÉÐ$®¤œ½™�²�޾�­³�¬´��¿�ŒÀ�­µ�¬¶��Á�ŒÂ�­²�ðyβ�­¤œÍ¾�Ðn­¿�ͳ�Ðf­À�Í´�Ð^­Á�͵�ÐV­Â�Ͷ�ÐNîÁ�ÐîÂ�­¤œ ª½ò˜¼ó˜�ª™Œ«™ ¢¹ÿÿ�Ç�ÈèàÐô­Á�ÍÇ�­Â�íÈ��©�Á��Â�î¿�Ð…O y©Ú /L  ¥KÐL(¦Q†E¢R¥R¨ð8åKð+�„K¤V„OIÿi „E¢KL? „QÉù ƒLQ¨¥QV m$[L KàRð R8IÿeE…Q¹õ…N¹õ…M¹õ…L° † ˜¦LÐ>¦M†L¦N†M¦Q†N„QiÉ Ðè©…K…O`eE…Q¥NeU…N¥MeT…M¥LeS…LLÑiQ&N&M&Lô8åK°ÏIÿi…K� æKð fLfMfNfQ`©ÿ…?`¥Kð¥OIÿ…O`¥Kð Q� ¨Ð Ó`¥RðeK°00 i€…Kð¥[…O`hh©…K…O`ÐLqJ €¨�¥ZeU…Z¥YeT…Y¥XeS…XfXfYfZfQ˜JÐÞ` A¥Kði° ¢†[ æKð`©ÿ…?` ¥Kð. ©…X…Y…Z¥Q %¥N %¥M %¥L *¥X…L¥Y…M¥Z…NL~` A©…[©¾  äL· ¥Kðn©8åK…K æKð[¢ý©¤SÄLÐ ¤TÄMФUÄN*� è•ZЩ@Ð,©(° U&T&S°ä0Ò਩åQ¥UåN…U¥TåM…T¥SåL…S˜Lñ …Q(L“©ÿ…?`©ÿ…>`¥KÐ…L…M…N¨`8é˜$O ª©ÿ…P ŒŠ¢KÉù ƒ„P`¨¥O)€FLL…L m„P`¥Kɘ° . „Q¥O„OI€*©˜…K¥N…9Ly`…:„;©Ú / Á©Ú / m ¥ ©Ú /Lm…:„;©Þ / Á ±:…<æ:Ðæ;¥:¤; m¥:i…:�æ:¤; ©Þ /Æ<Ðå`æD¦D½Y/É:�`É0�`8`¥F eF ¤DyY/8é0…F`�!Œ!àÐLš ¹ÿÿ™Y/ÈÊÐöŠ™Y/¢ •FÊû†D Ø �É+ðÉ-Тÿ†J Ø °H$GæH Ph) æL7!É.ð,ÉEÐ. Ø �É-ðÉ+ðÐ fI Ø ° ì Lh!$I©8åFL‡!fG$GP²¥F8åH…Fð £æFÐùL¡! PÆFÐù¥J ¥Kð¥OIÿ…O` © $O©-™Ë/…O„DÈ©0¦KÐLÎ"©à€ð° ©º  m©ú…H©¶  ¦ð©²  ¦ð PÆHÐî £æHÐÜ©®   . ¢¥Hi0 ɰiÿª©8é…F†HŠð¤D©.È™Ë/Šð©0È™Ë/„D ¢€¥Nyø…N¥My÷…M¥Lyö…Lè°å00áŠ�Iÿi i/ÈÈÈ„=¤DȪ)™Ë/ÆHЩ.È™Ë/„D¤=ŠIÿ)€ªÀв¤D¹Ë/ˆÉ0ðøÉ.ðÈ©+¦Fð-8©åFª©-™Í/©E™Ì/Š¢/8èé °ûi:™Ï/Š™Î/©™Ð/`™Ë/©™Ì/`©ê  ä©î  m©ò  ¦N¥L…N†L©…O¥K…Q©€…K ~©ê LÁ ³ðU0S¥QNMÐ¥L)Ð ¥KÉ�Щ…K…L`8¥Ké€H©€…K©Ú  ©Ê  ´©Â  ]©  … ©Î  h æ©Ò Lm©ÿ…?`©Ú / Á©Ö  m¥KɈ� $O:©…K…O` g ¥9i�ð)H©Â  ©Ò  m©Ú / ] å©  ¡ ©…[h `©ÿ…?`©Æ   A¥V…[©Þ  ä · A g ©…[ `©â  ]¥OH©®  ¥O0 ¥8Iÿ…8 å©â  h å©6 L… ¥OH å¥KHÉ��©Â  ´©K  … hÉ��©Æ  ]hLå` ±`# ‚ ±`ˆ‘\±`)?È‘\ˆ±`  ê { {LI$ ª½Œ$�Š$½�$�‹$ ‰$ {LI$LÿÿO%b%u%ˆ%¥%Þ%ï%ø%& &&&-&D&ê[&f&Ri&Bo&z&‹&”&�&¦&¯&¸&Ã&å& ' '%'.'7'@'F'R'h'p'x'}'– ‚'¡'®'º'N%N%$Å'¾ß'­–îø' (((+(e(�(Š(–(Ÿ(²(¾(Ê(Ö(ø()c)o){)ˆ)”)¡)µ)Ù)*****N*g*y*Ä·*é*++"+` q¥^¤_  † RL� q¥^¤_ ] † RL� q¥^¤_ m † RL� ð© Ê q¥^¤_ ´ † RL� ð ð) ¹Â‘^ˆø0 åð© L¸  #¥\¤] m i# † RL� HÉð©Lì©ÿLì HÉðôÐí HÉðëÐä HÉÐâðÛ HÉÐÙðÒ HÉÐÐðÉ î ±\Iÿ‘\ˆÐ÷L î ç ±\1^‘^ˆÐ÷ RL î ç ±\^‘^ˆÐ÷ RL© R LRhh` ‚Lø© R RLR ·Éð©Lì©ÿLì ·ÉðôÐí ·ÉðëÐä ·ÉÐâðÛ ·ÉÐÙðÒ ·ÉÐÐðÉ© R RLR ‚ { ¥`‘\È¥a‘\ˆ±`e`…`�æa©Lñ { ‚¥`¤aiH�Ș ‘\hˆ‘\±`ªÈ±`…a†`` 8é°ˆ…`„aLR ª Ð º L , aLR a ÎLR © ÀL” ©L” ª ð ‚Lº ` �`'Œa' ±^�ÿÿ RLR©�CL ©�CLÉ ©L–©L– ‚ { ±`…,ȱ`…-¥\¤]….„/ rL{¤i¦hЈʆn„o` q å xL� ª Ð º LÉ ¥tÉp�L$© ;æt8¥té�òÐú` Ð¥`i…`�æaLR ¾LR©�C¥`¤a�AŒBLz ©�CLÉ ©�CL ] ð iÉ ÐùL‹ ] ð(8­:¬;é�)(°ˆŒ*(­<Í)(­=í*(°© k LB(© k © k L‹   ±\ ª˜�ê/�ë/�0�0LR ±\)‘\` q g xL� ×" ‚Lx ÙH Iÿ ìhÐL®'` q Ç# xL� q À# xL� q $ xL� ‚ ø ²( R ¾( ‚ ð©L¸ BL’% q$O© L¸ #©®  m i# xL� Ô ±\É…°<ȱ\Ð7ˆ8±\ð'é‘\¥tÑ\� ð $ ±\ð© ;æt ±\ÅtÐñLR…t© ;LR©L¸ q i# xL� ‚©¨ ¬LB¥„¤„�ëŒìL×" q # xL� ‚¥ti LB Ä �®)Œ¯)­ÿÿ LB …„ð ±Ð©L¸ ±H Îh LB Ô©  K…„ ©‘±\È‘¥‘\ˆ¥‘\©ÿLñ©L2  ÜH Îh LB©L2©L2 ,­Ë/iH  K….„/ ‘\È¥/‘\©Ë /…,„-h  |©ÿLñ  ܪ i�È ! ÎLx Ô �t*Œu* ÿÿLB q¥KÐ`©â / Á i#©æ / Á©â / ä å i# 婿 / ©®  m xL� ±^8é‘^�¶*8±\éͶ*°©L¸ R ±\i�¶*±\ m¶*‘\` î ç ±\Q^‘^ˆ÷ RL { ² ª �0˜�0 {LR …l„mLR ejH˜ek ‘\ˆh‘\` 4 g ¢ÿš I$LFERROR - $WARNING - $ IN LINE $NULL STRING PASSED AS PARAMETER TO ASC FUNCTION$ERROR WHILE CLOSING A FILE$DISK READ ERROR - UNWRITTEN DATA IN RANDOM ACCESS$DISK WRITE ERROR$DIVISION BY ZERO$EOF FOR DISK FILE AND NO ACTION SPECIFIED$RECORD SIZE EXCEEDED FOR BLOCKED FILE$INVALID INPUT FROM CONSOLE$INVALID RECORD IN RANDOM ACCESS$ACCESSING AN UNOPENED FILE$ERROR WHILE CREATING FILE$FILE IDENTIFIER TOO LARGE OR ZERO$ATTEMPT TO RAISE A NEGATIVE NUMBER TO A POWER$NO INT FILE FOUND IN DIRECTORY$ATTEMPT TO READ PAST END OF DATA AREA$ERROR WHILE OPENING A FILE$INDEX IN ON STATEMENT OUT OF BOUNDS$ATTEMPT TO READ PAST END OF RECORD ON BLOCKED FILE$UNBLOCKED FILE USED WITH RANDOM ACCESS$ARRAY SUBSCRIPT OUT OF BOUNDS$STRING LENGTH EXCEEDS 255$SECOND PARAMETER OF MID IS NEGATIVE$ATTEMPT TO EVALUATE TANGENT OF PI OVER TWO$OUT OF MEMORY$ATTEMPT TO WRITE A QUOTE TO DISK$DISK DATA FIELD TOO LONG DURING READ$OVERFLOW IN ARITHMETIC OPERATION$ILLEGAL TAB ARGUMENT$ ±•�²•�½•`­³•i¨ŒÂ•ŠH±�Ã•È €’ Õ𠀒¨­Ã• Y�hª¬Â•Ș)ÐØ` ‡�ð n’­î”¬ï” Ò’L슮®•½‚•Iÿ-°•�°•` '–LQ’¢ e‘©Ð­Ý• *–Éðæ n’­ñ”¬ò” Ò’ �’É ðLìŠLi”­ô”¬õ” Ò’­®•iAL“©,Ä•±ŒÂ•`­–•H©�–•hÐ –`­–•Ð –)ÿð –ÉÐ –ÉÐL슩`�–•©ÿ`É ð É ðÉ ðÉ `�Û’ŒÜ’ ¹ÿÿÉ $ð ÈŒ¾• “¬¾•Ðí`,—• ,À•0H –h` Ã’°H­;– 4“©^ î’h @ ,“­:–L4“É Ð © ,“­˜•)Ðô`H �’h î’H,À•0 –hî˜•É °&Í9–ð!Θ•Í7–ÐΘ•0`É ð Í>–ðÍ?–Щ�˜•`© ,“© î’­••͘•ðí­9– 4“Lv“© ‘ŒŸ•­˜•�•• �’¬Ÿ•É ÐLf”ÉÐ^Àðë±H 8±é‘hΟ•É °@É Ð08nÀ•­˜•�Á• l“ s”­˜•H8­Á•í ˜•�Á•À• “”ÎÁ•Ðøh�˜•L–“­:– �”­;– �” “”L–“ÉÐ ­—•Iÿ�—•L–“ÉÐ l“­8– 4“L‡“ÉÐ l“ s”L–“È‘HŒŸ• ˜q‘h þ’¬Ÿ•±ÉÐ  ±ÉÐL슠±ˆÑ°L–“© L,“© ,“© L,“­Ÿ•�¿•©Hhο•Ð`¨È˜H± þ’L|”É �­7–H 4“© 4“hL4“É0�É:�8` £”�úÉA�õÉG`­ë‰¬ì‰i€�ë‰�ÈŒì‰`­ë‰¬ì‰�Û”ŒÜ”¢ ½ÿÿ�(è÷`LKŠLD•LU•Lú”L•L4•LÏ•ÿ - R/O$ - BAD SECTOR TO IGNORE -- TO ABORT$ PEM ERROR ON $ - INVALID DRIVE$å€@  @€? 9ILLEGAL CHARACTER IN FILE NAME$b+’+­+ß+ð+,+,Q,l,Œ,§,Á,ã,-0-V-q-•-È-ï- .'.K.v.„.¥.Ê.ë./P©I�©N�©T�© ¢ 0`© L¸© ¢Lîb©�b Z0ð©�(`¬b¹( ‘†æ†Ðæ‡` c0¬b¹(�a` ‰0 ‘† ‰0 ‘†`¥†i…†�æ‡` ‰0H ‰0ªh¨Š`¢©•èà‹Ðù©�b¢ �@©e 2 § 4 :0¢2膇8¥†é:�c¥‡é0�d ‰0�Y/É*ð0©…ˆæˆ ‰0¤ˆ™Y/É$Ðò©Y /¦ˆ !¥†¤‡ Á¥†i…†�Ëæ‡Lö0 ±0e†…p˜e‡…q8¥píc…h¥qíd…i8¥†íc…j¥‡íd…k ±0eh…f˜ei…g¥fÍ¥gí�©L¸ ±0…b„cb&cb&c¥bef…b¥ceg…c ‰0ÉÐL5+É3Ð ‰0 ‘pÉðçæpÐñæqL£1É€� x0 c0 x0L•1ÉÐ* x0¥†¤‡…‰„Ьb©™( x0 ‰0ð¯ x0 ±‰i‘‰Lá1 x0­aÉ6ð É7ðÉ^ðÉÐ) –0 ±†ªÈ±†¨Šejª˜ek¨ŠÐˆÊ˜ ‘†ˆŠ‘† ¥0L•1É.ðL•1 –0 ±† ªÈ±†*¨Š ª˜*¨Ši:ª˜i0 ‘†ˆŠ‘† ¥0L•1BASIC-E/65 INTERPRETER - VERSION 2.05-A$*s"sÒÎ*oɹÍÒÉÇÍÒÍŠO ÍÕÍÒ!v6>!v¾ÚQ*v&w 6`i+4Â6Ï)ÍA*Í:'þÿÊ“:'懇‡‡‡O!Ï) ~2vþåÊ�:væO!w 6Í,Ã]!v6>!v¾ÚÂ*v&w ~Ò»*vM Í!v4˜ÉãÍÒÍ8ÆAOÍ�:Í�èͱ*##N!ͽ"—* N#F*—ëÍ "™resses msize = 52 ;memory size in 1k blocks pages = 10 ;pages in sim wbtjmp = $100 ;warm boot entry pemjmp = $103 ;pem entry iostat = $106 ;io status byte dflbuf = $128 ;default buffer ;C64 KERNAL (kernel) entry points & assigned memeory lstx = $c5 ;current key pressed flash = $cc ;cursor flash enable (BLNSW in PRG) cursor = $cf ;cursor chaaracter (BLNON in PRG) shftst = $28d ;control, Commodore, shift keys (SHFLAG in PRG) KEY = $FF9F ;scan keyboard SETLFS = $FFBA ;set LA, FA, SA SETNAM = $FFBD ;set length & file name address OPEN = $FFC0 ;open logical file CLOSE = $FFC3 ;close logical file CHKIN = $FFC6 ;set channel in CKOUT = $FFC9 ;set channel out CLRCH = $FFCC ;restore default channel BASIN = $FFCF ;input from channel BSOUT = $FFD2 ;output to channel CLALL = $FFE7 ;close all files & channels ;pem constants on entry to write wrall = 0 ;write to allocated wrdir = 1 ;write to directory wrual = 2 ;write to unallocated ;module addresses memlng = msize*1024 ;memory length in bytes simlng = pages*256 ;sim length in bytes pemlng = 3072 ;pem length in bytes ccmlng = 2048 ;ccm length in bytes pem = memlng-simlng-pemlng ;pem start ccm = pem-ccmlng ;ccm start length = ccmlng+pemlng ;length less sim nsects = length/128 ;number sectors ;fixed parameters cr = $d ;carriage return lf = $a ;linefeed ;main program *= memlng-simlng ;start of sim ;jump vector used by pem sim jmp boot ;from cold start wboote jmp wboot ;from warm boot jmp const ;check for input jmp conin ;get input jmp conout ;send to terminal jmp list ;printer output nop ;punch output - dummy for now nop rts nop ;reader input - dummy for now nop rts jmp home ;home drive jmp seldsk ;select disk jmp seltrk ;set track jmp selsec ;set sector jmp setdma ;set buffer address jmp read ;read sector jmp write ;write sector lda #1 ;printer always ready rts ldx #128 ;clock entry rts ;translate record number ;input: ay = logical record number ;return: ay = logical record number if no translation or interleave ; physical sector number if translation nop ;translate - do not change logical # nop rts ;console definition block ;some do not fully implement the functions: ; clear to eol is a lf as recommended by SIG ; clear to eos is not implemented .byte 0 ;scratch .byte 8 ;backspace .byte 10 ;clear to end of line .byte 29 ;forward space .byte 1 ;normal video .byte 18 ;invert video .byte 25 ;lines per screen .byte 40 ;char per line .byte 12 ;formfeed .byte 19 ;home .byte 0 ;clear to end of screen ;I/O control byte ;as implemented there is no code in SIM to alter this but it is placed in a fixed location ;after CDB to allow for future changes by external or internal code ;bit 0 = ;bit 1 = ;bit 2 = printer type - 0 if 1515, 1 if 4022 ;bit 3 = ;bit 4 = ;bit 5 = ;bit 6 = ;bit 7 = iotype .byte 1 ;opening id message opnmsg .byte cr,lf,"C64 52K DOS/65 2.15 SIM 3.02",0 ;cold entry from loader boot îÌ•ÐîÍ•­Ø•¬Ù•…„ ©‘æÐæ­Ì•ÐÎÍ•ÎÌ•­Ì• Í•Ðã­Å•�Ì•­Æ•®È•JnÌ•ÊÐù�Í•îÌ•ÐîÍ•Ž´•޵•­´•¬µ• g�î´•Ð­Ì•ÐÎÍ•ÎÌ•­Ì• Í•ÐÜ €Ž Ý‘¢ "‘0¬³•±Éåðð¢ é‘LgŽ` –­Ó•¬Ô•L–­²•�µ•­±•Nµ•jNµ•j�»•�´•­µ•�¼•©�¶•¢ŽÎ•ަ•ާ•ލ•­´•ͦ•­µ•í§•­¶•í¨•�!­¦•mÑ•�¦•­§•mÒ•�§•�èÐÑîΕL¼ŽÊàÿÐÎΕŠmÓ•ª­Î•mÔ•¨Š –8­¦•íÑ•�¦•­§•íÒ•�§•8­´•í¦•ª­µ•í§•¨Š 3–L!–H„ FjˆÐúmØ•…¥mÙ•…h)ª½z•` 3�1`àð 3�Iÿ1‘` 3�‘`®®•½‚• °•�°•`© qˆú`®®•½‚•-°•`  ±�¹• ±�º•`®¹•芠 ‘­º• ‘` � �02© ³•¨±ª˜)¨Š‘˜ ³•¨È˜)Ðë  ­”•Ñð ‘©€�  ‘­½•` � �0 ‡�Р ±H˜ ³•¨hÑn’• ~�­½•` �© H Ý‘ €Žh�·•¢Ž¸• "‘07®·•¬¸•±À Ð�”•H˜ ³•¨hQ-ß•ðÐÔÉ?ð H˜ ³•¨hÑÐÅÊÐÏ­½•`®È•´•.µ•.¶•ÊÐô­Ç•-¹• ´•�´•`© ¢�·•η•Šm·•¨À ðÀÐ,’• ±H­·• ³•¨h‘η•Û ŒŽLB’ � ’¥H¥H­ë”¬ì”…„© �h…h…­½•0  ©‘ÈÀ! Ðù8n’• ~�­½•`Ž • ï�0*  ±i)ð‘ � ­ •Ð ¶�L‘ ´�©` ‘�©`ŠHÐ­Ö•ͱ•­×•í²•°hªLÝ‘­±•)�½• �³•ðhªLa‘ ŒŽ <’hª e‘­½•`,Ú•0úÊÐ |� Ç‘‘` |� Ç‘ÑðäLo�®È•­¹•JÊÐü�´•8©íÈ•ª  ±-Þ•J*ÊÐüm´•,Ä• i�“•¨±�´•È©,Ä•±�µ•`H­»•mÛ•…­¼•mÜ•…  h`©ÿ�L(COPYRIGHT (C) 2008 - RICHARD A. LEARY¢@©•ÊàÐù©… „8­¬é)€…˜é …Æ¥i…¥i … § ©€…¢ ©?ÝÐLJ ÊÐõ¢½ ÝÐÊõ0¢© ÝðLJ Êõ¢½• Êø¢½ �½ •)Êò  ÐLJ ! % ÐLX ÐLJ 1 ÐLX – É$ðeÉðaÉ;Ðñ » ðX… e … �æ » … » …Å¥å°L_ ¥ÅÐ¥Åð© ° æÐëæL ¥ e…�æ » ° Æ Ðö » » LÍ8¥é)ð© ° L9 ¥¤…„ Ì  - ÐLX ©   B ¥ ô ¥ ô ©  B ¥ ô ¥ ô ©)  B ¥ ô ¥ ô L¦  ÐLJ Éð©�(©ª†æ½()` ¾ – É00É:0 ÉA0ÉGi ****¢*&ÊÐú¥`LQ ) 0É:0iL> HJJJJ æ hLæ ©( ¢Ð<¢Ð¢Ð¢© LD ©  ¢Ð#¢Ð¢Ð ¢Ð¢Ð¢©  LD ¢ð¢Ð¢ Éÿ`©i  Lc ©•  Lc ©u  Lc ©‚  B L: INPUT ERROR$OUTPUT ERROR$BAD SEQUENCE ERROR$INVALID CHARACTER$©  …„`¦äÐ ¦äÐH Ì h ‘æÐæ` § ¥¤¢ ¥ÅÐ ¥ÅÐL§ ) ÉðLX ¥i€…�ææ Ðæ LÏ KIMCOM NEXT ADDRESS=$ BYTES READ=$ RECORDS WRITTEN=$R$BAD SEQUENCE ERROR$INVALID CHARACTER$©  …„`¦äÐ ¦äÐH Ì h ‘æÐæ` § ¥¤¢ ¥ÅÐ ¥ÅÐL§ ) ÉðLX ¥i€…�ææ Ð;first clear all files and channels jsr clall ;loader should do this but make sure ;now send a series of characters to screen to set it up lda #' ' ;set cursor sta cursor ;to space LDA #9 ;enable char set change JSR BSOUT ;output to channel LDA #14 ;switch to upper/lower case JSR BSOUT ;output to channel LDA #8 ;disable char set change JSR BSOUT ;output to channel LDA #147 ;clear & home JSR BSOUT ;output to channel LDA #CR ;return & do line feed JSR BSOUT ;output to channel ;this sets up key code LDA #$28 STA KYCHAR ;next section addresses C64 specific setup lda #opnmsg jsr outmsg ;send it ;set up jumps into dos/65 in page one setup ldx #0 ;clear index ;first clear key dba & other variables stx hstact ;host buffer inactive stx unacnt ;clear unalloc count setupl lda inttbl,x ;get byte sta $100,x ;insert at start inx cpx #6 bne setupl ;loop until done lda #dflbuf ;and©… … … … ©M …„…„©M …„…„ ©<  W ¢½� ½�, èà Ðï©� �, èàÐõ­- É Ð­5 É Ð ¢½ �, èà Ðõ a h ˆ ©Åðö©°  W Ê©¥  W L ~ ° æ Ðæ Ðæ `©€… ©©Í  W Lt ¿ �$ 0 ©ì  W Lt©Š  W ÊL`©…©  †¢  © '¢  ©è ¢  ©d ¢  ©  ¢  ¥ 0LR …„†¢ÿ8¥ å… ¥ å… ¥ å… è°ë¥ e… ¥ e… ¥ e… Šð8f$ 0 R `©   LM ©,  ¢L¢L¢ L¢L©   Ll ©,  ¢  ©d  W L` �  ¥¤ \ B Ð" $ �ì   ±…¥Å¥åæÐæ¥`¥¤…„Lš �  ¥¤ \ I Ð" 0 �ì   ±…¥Å¥å æÐæ¥`¥¤…„ LÛ ¥ÉM¥é`¥ÉM¥é`©M  …„`©M …„`¥i€…�æ`¥i€…�æ`File Comparison Routine Version 2.02-A$ One of the files does not exist!$ $ Files match - length is $ (decimal)$ Files are unequal at byte $ EOF on file 1 but not file 2$ EOF on file 2 but not file 1$exist!$ $ Files match - length is $ (decimal)$ Files are unequal at byte $ EOF on file 1 but not file 2$ EOF on file 2 but 1$0$2048$9$12$15$16$17$296$229$5$2$3$4$5$2$3$3$7$4$15$25$255$65$13$4$5$256$7$8$256$6$2$3$256$4$256$256$51$3$32$14$17$27$256$8$8$2$255$256$256$8$9$11$12$128$15$14$34$256$256$30$33$256$255$256$36$39$255$32$*Ø*€.€À.€À.€À.€À.€À.€.€. €. [ .[À!1KB .[À!2KB . [À!4KB . [À!8KB . [À!16KB € .[ .[À !..[À !..[À !..[À !..[À !.€ ÀÀ.[[(€ ÀY. What drive$;€ 1'°À AÀ H 7"Illegal drive$4€ À Q.À.[[(€ ÀY¶€À.PÀ.P.€.€.€À.PÀ.P.€À.€À[ €À[ €À[ €À.P€ÀÀ.P.7½€À.€À. PÀ.!P."€.6ðÀ.#B€.À 7‰Ý€À.$BÀÀÀ.%[[(ÀÀ[[(À.&[[(€ ÀYv€.6B.'€.À 7f€ÀÀ.(ÀPÀ7c€À.´62€À.ÀÀ7†€.€À.6ÜThere are $À#entries in the directory$4€À€.6ÖÀ.€.À 7WÀ[À!7æ6T€À.6À€.À 7TÀ[À!À[À!7QÀ[À!€À.À[À!À[À!À[À!À[À!À[À!À[À!6ò6Ãconsisting of $À#files$44€NAME EX RECORDSÀ$44€.6®À€.À 7〠À[À!À 7à.JÀ $.)JÀ[À!#.*JÀ[À!#46Ÿ4À.+[[(€!ÀY€".€#ÀPÀ.P.,.-B€.6(À#€.À 7t€$À!À0028 OPEØ�š•�à•Œ›•Œá•Žœ•à$°P½V•ð©ÿ�™• 댩�¡•­œ• mœ•ªè½xмyŠ�¤•Œ¥•­æ”H­å”H­š•¬›•l¤•��•Œž•­¡•ð  ‘­­•�š• �,™• 댩�™•¬ž•­�•`LìŠLÝŒL“L–L–L–L�’L!‹L,‹LÒ’L‡“L�’L-–L4�L�L±�Lì�L�L<‹L¤‹LD‹LÉ‹L³�L‚‹L4‹L0‹LûŒL%‹Lo�L8‹LäŠLèŠLüŠL‹L‹L3–�—•`­—•`,™• 댩�™•L– 0–�É•ŒÊ•ŽË•Š)€¨­É•`­Ë•)¨­Ê•`­n�¬o�`­`­Ø•¬Ù•`�`­®•`­¯•`­°•` �© L� � ‘�­¹•ͺ•�É€ð©`¢ ï�ÉÐô�¹• ƒ‘­´• µ•Щ` b� ®Ž <’  �©` � ’© �0© ‘© ¢ ‚�© �ì` � ’© �0¢ 鑬³•­U•‘ B’© �é` � ’ ‘�­¹•É€�©` ƒ‘©�Ý•­´• µ•ðL¬Œ©�Ý•­“•HÉð¨ˆ,Ä•ˆ±�´•È©,Ä•±�µ•­´•�©•�«•­µ•�ª•�¬•­«•ÍϕЬ¬•ÌЕðî«•Ð­©• ª•ðÐ ­©• ª•Шð0­©•ÐΪ•Ω•­©•¬ª• S�Ð ­©•¬ª•L…Œ­«•¬¬• S�Щ­«•¬¬•�´•Œµ• µ•Ðh©`­´• g�h¨­´•‘­µ•È,Ä•‘ b� ®Ž K’®¹•캕�莺•ÊàÐ  �¢ ï�ÉÐ ©ÿ�¹•  �©` �’ Ã’�H “h`¢µ¼à•�à•”Êó`¥¤…„L$–­š•Í®•ðì�®•LG� ±ð8é)�š•­®•�­•±�¡•˜‘ �`©�®•�¯•©( …„ ûŒ­®•É� n’­è”¬é” Ò’LìŠ –�n�Œo� o�ðã  ¹ÿÿ™Ï•ˆ÷­Õ•¨i�È•¹�•�Ç•­Ö•�Å•­×•JnÅ•JnÅ•�Æ•©�Ä•­Ð•ðˆ8nÄ•¹Š•�Þ•8©ùŠ•�ß•®®•½‚•-¯•Ð ½‚• ¯•�¯•LÐ�` -’­Ï•�Ì•­Ð•¢JnÌ•ÊÐù�Í•P€.6J..€.À 7q€$À$./À$.07n€"À".€$À$.16:6À"#À[À!$blocks allocated of $€%ÀPÀ.P.2À%.#4§€ €&.6Ò.3€&.À& 7ð€'ÀÀ&PRÀ' 7í€ À À'6€ À .€&.46.5€&.À& 70€'ÀÀ&PRÀ' 7-€ À À'6À[À!À €(À.6PÀ[À ! .À[À!À(À[À!.€).6zÀ(€).À) 7µÀ)À(7”À[À!À[À!.7À)À(7²À[À!À[À!À.8P6kÀÀ [[(À.9[[(€ ÀYÀ.:[[(€ÀY€À.;BÀÀÀ.<[[(À.=[[(ÀÀ[[(€ ÀYÀ.>[[(€ ÀY€À .?BÀ.@7OIllegal buffer address$4§ÀÀ[[(ÀÀ À.A[[(À.B[[(€ ÀYÀ.C[[(ÀY.D 7¦Directory read error!$4§€ À ¶€ À .SÀ aÀ z 7Ô€ À Q.ERÀÀ À.A[[(À.B[[(€ ÀYÀ.C[[(ÀY.D 7¦Directory read error!$4§€ À  high jsr setdma ;and set lda sekdsk ;get disk jmp ccm ;and go to ccm ;initialization table inttbl .byte $4c .word wboote .byte $4c .word pem ;warm boot-read dos/65 back except sim and then ; jump to ccm. wboot ldx #$ff ;set stack txs ;pointer cld ;set binary mode ;set up parameters for warm boot lda #nsects ;get number sectors sta count ;and set count lda #0 ;set zero sta wbtrk ;clear track jsr seldsk ;and select drive zero lda #1 sta wbsec ;first record lda #ccm sta wbdma sty wbdma+1 ;first dma address ;the following uses SIM deblocking rdblk lda wbtrk ;get track ldy wbtrk+1 jsr seltrk ;and set lda wbsec ;get sector ldy wbsec+1 jsr selsec ;and set lda wbdma ;get dma address ldy wbdma+1 jsr setdma ;and set jsr read ;then do read and #$ff ;test for error bne rderr ;if error handle it ;first see if more dec count ;drop record count beq aldon ;done if zero ;adjust parameters for next record ;first do dma address clc ;clear carry lda wbdma ;get buffer address adc #128 ;and raise it sta wbdma bcc nodmaw ;skip if no carry inc wbdma+1 ;bump high ;now do sector but assume records per track = 34 nodmaw inc wbsec ;dump sector lda wbsec ;get new low cmp #34 ;see if past last bne rdblk ;if not record OK & track unchanged ;we now must reset record and increase track lda #0 ;starting record =0 after track 0 sta wbsec ;save it inc wbtrk ;bump track (0 to 1) bne rdblk ;loop always aldon lda sekdsk ;set default drive sta hstdsk jmp setup ;go setup rderr jmp ($fffc) ;go to kernel ;warm boot variables wbtrk .word 0 ;track (0 logical - SIM will translate to C64) wbsec .word 1 ;record (0 = BOOT, 1 = first CCM) wbdma .word ccm ;address ;console status ;input: none ;return: a<>0 if character ready, a=0 if not const lda cstat ;test saved flag bne constx ;if there exit jsr la86 ;call c64 kernel routine lda shftst ;get control key status and #%00000010 ;check for Commodore key beq const0 ;not pressed lda toggle ;is this an upstroke bne const0 ;no, waiting to release lda kybdmd ;get caps mode flag eor #%00000001 ;toggle bit sta kybdmd ;and save lda #%00000001 ;set toggle const0 sta toggle lda kychar ;get scanned data cmp #%00111010 ;check for bad control data beq const1 ;is cmp #%00111101 ;check again beq const1 ;is cmp lastky ;compare with previous bne const2 ;if different, new key const1 lda #0 ;say no data consts sta cstat ;save whatever is in a constx rts const2 pha ;save a ldy #10 ;delay for keybounce constd ldx #50 const3 dex bne const3 ;do inner loop 50 times dey bne constd ;do outer loop 10 times jsr la86 ;call c64 console routine pla ;get old char back cmp kychar ;compare to new bne const1 ;still bouncing sta lastky ;save cmp #%01000000 ;if no key beq const1 ;then also say so lda #%11111111 ;say real key bne consts ;always ;console input - waits for character to be typed ;this routine should not display the character entered ;input: none ;return: character in a conin lda #0 ;turn on cursor sta flash conin1 jsr const ;check status and #%11111111 ;see if something there beq conin1 ;loop if nothing lda #0 ;clear cstat sta cstat conin2 lda kybdmd ;unshift = 0, caps =1 sta contmp ;save lda shftst ;get modifier status and #%00000001 ;is shift key down beq conin3 ;jump if not lda #%00000010 ;say shift = 2 sta contmp conin3 lda shftst ;Ð-¢Ð)¢Ð%¢Ð!¢Ð �†¢Ð¢Ð¢Ð¢Ð ¢Ð¢Ð¢L­ß‰ð8éÍÞ‰ð­Þ‰Lö… ¡‡©�Ù‰ �† ú…�æ‰` �†L† �† †�æ‰` ×… !†iAŽç‰Œè‰ Ã’°H­;– æ…h @ æ…­:– 慬艮ç‰`­Šˆ¬‹ˆ`­ß‰�ê‰`¢ŠH©�߉¬Ý‰ h‡Œå‰ð )Hȹ:‰É:ð hˆ­Þ‰�¹‰h�߉�¹‰È©�ä‰ u‡ðèÉ*Щ?�¹‰Ð�¹‰ÈÎä‰Ðæ u‡ðÈÐøè© �¹‰Îä‰Ðõ¹:‰H©�ä‰hÉ.Ð#È u‡ðèÉ*Щ?�¹‰Ð�¹‰ÈÎä‰Ðæ u‡ðÈÐøè© �¹‰Îä‰Ðõ©�ä‰è©�¹‰Îä‰ÐõŒÝ‰©�ä‰h¨¢ ȹ¹‰É?Ðîä‰ÊÐò­ä‰`¹:‰ðÉ ÐÈÐô`¹:‰ðÉ �ðÉ=ðÉ.ðÉ:ð É;ðÉ<ðÉ>`LÁ‚©( L%†©�¹‰­ß‰ð8éÍÞ‰ðLö…Œè‰ ×…¬è‰¹¥ˆð h†ÈÐõ`© �뉌ì‰`¢½¹‰¼É‰�ɉ˜�¹‰Êð`¢½É‰�¹‰Ê÷­ê‰�߉`© �ï‰ ›†­ß‰Ðg�ð‰�ñ‰¨¹º‰É$Щ�ï‰Èȹ¹‰É ðN £”� ­”°Aé¢ìï‰Ð8)H­ð‰�ò‰­ñ‰�ó‰®ï‰­ð‰mò‰�ð‰­ñ‰mó‰�ñ‰°ÊÐéhmð‰�ð‰�²îñ‰Ð­LÁ‚­Â‰É Ðö­ð‰¬ñ‰`L8‰L¬‚L‚L¹‰LÞ‚L¾ƒL[„L{„LZƒLø„L¼„L…ÿNO SPACECAN NOT CLOSEALL FILES (Y/N)?READ ERRORNOT FOUNDFILE EXISTSLOAD ERRORCAN NOT OPENWRITE ERRORDIR SAVE ERA TYPE REN GO LOAD  9B04 NODMAW 9705 NOOFF 9AA4 NOOVF 99D3 NOREAD 9A75 NOSHIF 9A0E NOUNSC COM4  get modifier status and #%00000100 ;is control key down beq conin4 ;jump if not lda #%00000011 ;control = 3 sta contmp conin4 lda lastky ;get key position asl a ;x2 asl a ;x4 clc ;now add offset adc contmp tax ;make index 0 to 255 lda keytbl,x ;get character cmp #128 ;see if function bcc conin7 ;jump if not ;may at later date implement use of function keys but ignore for now ;by just returning a space lda #' ' conin7 pha ;save char lda #%00000001 ;turn off flash sta flash lda #' ' ;send space jsr bsout lda #157 ;cursor left command jsr bsout ;bypass filter pla ;get char back rts ;c64 keyboard scan LA86 JSR KEY ;scan keyboard LDA LSTX ;get current key pressed STA KYCHAR ;save in register RTS ;console output of char in a conout pha ;save char lda iotype ;get config and #%00010000 ;if bit 4 set print as received bne cout5 pla ;get char back jsr swap ;swap upper & lower case ;start testing for special functions cmp #12 ;see if clear screen bne cout1 ;is not lda #147 ;is so get Commodore clear cmd bne coutdo ;and go send cout1 cmp #8 ;see if backspace bne cout2 ;is not lda #157 ;go left jsr bsout ;and send to screen lda #32 ;now send space jsr bsout lda #157 ;go left again bne coutdo ;and send cout2 cmp #lf ;see if linefeed bne cout3 ;is not lda #17 ;get Commodore linefeed bne coutdo ;and send it cout3 cmp #cr ;see if cr bne cout4 ;is not jsr coutdo ;send that lda #145 ;now up 1 line due to auto lf bne coutdo ;and send cout4 cmp #18 ;see if reverse on beq coutdo ;is so send cmp #1 ;see if normal video bne cout6 ;not so try next lda #146 ;get C64 normal bne coutdo ;and send it cout6 cmp #19 ;see if home beq coutdo ;if so send it cmp #29 ;see if forward space beq coutdo ;if so send it cmp #' ' ;see if other control char bcc coutx ;ignore if is cmp #128 ;see if not ASCII bcs coutx ;done if not ASCII pha ;save for the moment cout5 pla ;get character back coutdo jsr BSOUT ;output to channel coutx rts ;swap upper and lower case for C64 swap cmp #'A' ;see if < A bcc swapx ;done if is cmp #'Z'+1 ;see if upper case bcc swap1 ;is so handle cmp #'a' ;see if under lc a bcc swapx ;done if is cmp #'z'+1 ;see if lower case bcs swapx ;if not done swap4 and #%01011111 ;clear bit 5 swapx rts swap1 ora #%00100000 ;turn on bit 5 rts ;similar for printer swap2 cmp #'A' ;see if < A bcc swapx ;done if is cmp #'a'-1 ;see if < a bcs swap4 ;not so convert ora #%10000000 ;is so make > 128 rts ;print of message ;the call to outmsg passes address in ay, ;binary zero as the end. outmsg sta getmsg+1 ;address into sty getmsg+2 ;operand getmsg lda $ffff ;get the char beq n3 ;branch if done jsr conout ;print char lpnext inc getmsg+1 ;bump the pointer bne getmsg ;no carry so loop inc getmsg+2 ;bump high byte jmp getmsg ;go back for more n3 rts ;return past mess. ;send char in a to printer ;should be able to move the LA9F routine up to be in line list pha ;save char lda iotype ;get config and #%00000100 ;0 if 1515, 1 if 4022 bne list2 ;jump if no swap lda iotype ;get config back and #%00001000 ;see what kind of swap bne list1 ;4022 swap pla ;get char jsr swap ;regular swap jmp list21 ;and go send list1 pla ;get char back jsr swap2 ;do 4022 swap pha ;save char list2 pla ;get char back list21 sta data ;save LA9F LDA DATA ;get character CMP #LF ;see if line feed beq lac5 ;if is do nothing LAA7 LDX #4 ;else set channel out to 4 JSR CKOUT ;set channel out BCS LAB7 ;if error try to fix LDA DATA ;if OK get character again JSR BSOUT ;output to channel LAB4 JMP CLRCH ;restore default channel & exit LAB7 CMP #3 ;see if not opened BNE LAC0 ;some other error so exit JSR LAC6 ;try to open printer BCC LA9F ;successful so try again LAC0 LDA #$FF ;put error code STA DATA ;in data for Z80 LAC5 RTS ;open printer channel LAC6 LDY #7 ;SA =7 prints in upper & lower case JSR LADE ;close & open printer channel LDA IOTYPE ;get I/O type AND #$02 BEQ LAC5 ;if 1515 then done LDX #4 ;set LA as 4 JSR CKOUT ;set channel out LDA #CR ;send a CR JSR BSOUT ;outputØH ò…h ö…­=–JJJJ�9‰Ð7¢ÿšØ _†©> æ…­�ˆ¬‚ˆ ê… ®9‰ðä¹:‰Éa� É{°)_™:‰ÈÊÐ슙:‰�݉ š‡ !†�Þ‰ ›†Ðd­ß‰ð©Ð.©ª�䉠½‰ðÙ¹‰ÐèÈÐò轉Ðúèî䉭ä‰ÉÐß­ä‰ m䉪轌ˆ¼�ˆ�≌㉭…ˆH­„ˆHl≠*† ›†­º‰8é ߉ÐL‚ ×…¬å‰¹:‰ð É ð h†ÈÐñ©? æ…L‚ ›† ¡‡© ͺ‰ÐÍ‰Р©?  ™¹‰ˆÐú U†0V­î‰�í‰ ×… b†©: æ…­æ‰ )`¨È¢¹( h†Èèà ð à Ðð©. h†Lƒ î…Ð �† †�æ‰0Îí‰ð´ ä… ä…Lƒ` 4L¶‡ ›†ÐW ”† ¡‡ U†0O Ö‡¬Ý‰¹:‰É Ð< ›†Ð7­ß‰ðÍê‰ð 8éÍÞ‰Ð%­ê‰Ð ­ê‰�߉©�ɉ ¡‡ U† Ö‡ �†L† >Ð *†LÁ‚ 4L¶‡© �ô‰Œõ‰ û‡Ðz�é‰ é‰ðr ›†Ðm Ö‡ ”† û‡®º‰à ð �ô‰Œõ‰À�S é‡ ¡‡ † �† †0E @†0D­õ‰mé‰�鉭ô‰¬õ‰�ë‰Œì‰ Ì” �† †Ð'­ë‰¬ì‰i€�ÈðÌé‰ÐÜ �† þ…0`LÁ‚ Ð  UРbР L¶‡ ›†É Р ¶‡ à…H ×…h)_ÉYÐÑ ¡‡L † ›†Ð0 =†02 ×… O†ð 0"¢½(Éð h† î…Юç‰èë0Þ¢ `LÁ‚ )Р4L¶‡ ˇ ›†Ðì Ö‡ ”† û‡®º‰à ð χ é‡ =†0Ø­ë‰¬ì‰ %† O†Ð ¹”Lå„0¾Lš‡ û‡®º‰à ðLl…Lh…­º‰É Э߉ð 8é�Þ‰ ö…L°‚­Â‰É ðLÏ…¢½Ú‰�‰Ê÷ =†LÌ… ˇ %† O†Ð ¹”͇ˆ�̈ˆ�ë°̈ˆ�äðâ š‡ O†ðl0j© �Á…ŒÂ… *† ›†­ß‰�¹‰¢ �†­ß‰�ɉ ŒÙ‰¢ ½¹‰�Ê÷è¹:‰ðÉ ðÈÐô©�(¹:‰�)ðèÈî(Ðñ ×… š‡ ­Þ‰ ö…L‚ *†LÁ‚ JL¶‡© æ…© ТÐC© ¢Ð=¢ Ð9¢ Ð5¢ Ð1¢AüÿDOS/65 DISK       65 1A    ÿ‚DOS65           SYSTEM           START            START            START1           START2           START3          KK to channel LDY #0 ;set SA to 0 ;close printer and then open LADE LDA #4 ;logical file 4 JSR CLOSE ;close logical file LDA #4 ;now set LA to 4 LDX #4 ;and device FA to 4 JSR SETLFS ;set LA, FA, SA LDA #0 ;zero length name JSR SETNAM ;set length & file name address JMP OPEN ;open logical file ;select disk ;input: a = drive number (0 to 7) ;return: ay = address of dcb for drive ; 0 if drive not present seldsk and #7 ;three lsbs only sta sekdsk ;save for later asl a ;multiply by two tax ;make an undex lda dcbtbl,x ;get address ldy dcbtbl+1,x rts ;set sector number ;input: ay = physical record number ;return: none selsec sta seksec ;save low and high sty seksec+1 rts ;set buffer address ;input: ay = starting address of record ;return: none setdma sta dmaadr ;store low sty dmaadr+1 ;and high rts ;set track ;input: ay = track number ;return: none seltrk sta sektrk ;save number sty sektrk+1 rts ;table of dcb addresses dcbtbl .word dcba .word dcbb ;see if deblocking required for sekdsk ;returns number of dos/65 sectors per physical ;sector in a and ;returns z=1 if no deblocking reguired else z=0 tstdbl ldx sekdsk ;get desired disk ;see if deblocking required for disk x tstdbx lda spttbl,x ;get dos/65 sectors/host cmp #1 ;test for no deblock rts ;table containing number of dos/65 sectors ;per host physical sector. if entry is 1 ;then deblocking is skipped. spttbl .byte 2,2 ;table of records/block rbltbl .byte 8,8 ;home the selected disk ;input: none ;return: none home lda hstwrt ;check for pending write bne homed ;there is so skip sta hstact ;clear host active flag homed rts ;do nothing ;the read entry point takes the place of ;the previous sim definition for read. ;read the selected dos/65 sector ;input: none ;return: a=0 if read OK ; <> 0 if error read ldx #0 ;x <-- 0 stx unacnt ;clear unallocated count inx ;x <-- 1 stx readop ;say is read operation stx rsflag ;must read data inx ;x <-- wrual stx wrtype ;treat as unalloc jmp rwoper ;to perform the read ;The write entry point takes the place of ;the previous sim defintion for write. ;write the selected dos/65 sector ;input: a=0 if write to allocated block ; =1 if write to directory ; =2 if write to unallocated block write sta wrtype ;save param from pem jsr tstdbl ;see if one rec/sec bne usewrt ;if not use type passed lda #wrdir ;if is say directory sta wrtype ;to force write usewrt ldx #0 ;say is stx readop ;not a read operation lda wrtype ;get write type back cmp #wrual ;write unallocated? bne chkuna ;check for unalloc ;write to unallocated, set parameters ldx sekdsk ;get next disk number lda rbltbl,x ;get records/block sta unacnt stx unadsk ;unadsk <-- sekdsk lda sektrk ldy sektrk+1 sta unatrk ;unatrk <-- sectrk sty unatrk+1 lda seksec ldy seksec+1 sta unasec ;unasec <-- seksec sty unasec+1 ;check for write to unallocated sector chkuna lda unacnt ;any unalloc remain? beq alloc ;skip if not ;more unallocated records remain dec unacnt ;unacnt <-- unacnt-1 lda sekdsk cmp unadsk ;sekdsk = unadsk? bne alloc ;skip if not ;disks are the same lda unatrk ;sektrk = unatrk? cmp sektrk bne alloc ;no so skip lda unatrk+1 cmp sektrk+1 bne alloc ;skip if not ;tracks are the same lda unasec ;seksec = unasec? cmp seksec bne alloc ;no so skip lda unasec+1 cmp seksec+1 bne alloc ;skip if not ;match, move to next sector for future ref inc unasec ;unasec = unasec+1 bne nounsc inc unasec+1 ;calculate dos/65 sectors/track nounsc lda sekdsk ;get disk number asl a ;mult by two tax ;make an index lda dcbtbl,x ;get dcb start ldy dcbtbl+1,x sta getspt+1 ;set low operand sty getspt+2 ;then high operand ;point has address now get spt at byte 2,3 ldy #2 ;start at byte 2 ldx #0 ;start save in low getspt lda $ffff,y ;get value sta d65spt,x ;and save iny inx cpx #2 ;see if done bne getspt ;loop if not ;check for end of track lda unasec ;end of track? cmp d65spt ;count dos/65 sectors lda unasec+1 sbc d65spt+1 bcc noovf ;skip if no overflow ;overflow to next track lda #0 ;unasec <-- 0 sta unasec sta unasec+1 inc unatrk ;unatrk <-- unatrk+KKLDCOPYRIGHT (C) 2008 - RICHARD A. LEARYÉA�ÉI°)`©&  P¢ð+ÉÐ`¢Ð"¢Ð¢Ð¢ ТТТР¢Ð ¢Ð¢L Éÿ`…y„z ±yÉ$Ð` œ ÈÐó©�  PL;© !`©= !`©^ !` •L\© ! L �Ld8¥é…u¥é%…v¢FvfuÊÐùäuÐ` ñ¥¤ L • hðL†¥i€…�æÆuÐß© %…„`$~0"$}L?¦ àÐ ¦ à-ÐH ! h ‘ æ Ðæ `8¥ é…w¥ é)…x¢FxfwÊÐùäwÐ` ` ¥ ¤ L š hðL†¥ i€… �æ ÆwÐß© )… „ `) 0É:�i`HJJJJ } h i ¦àÐ ¦à)ÐH ²h ‘æÐæ`H†n„o$ ú¤o¦nh(`HJJJJ i œ h i Lœ HJJJJ i ?h i L?© œ © Lœ © ?© L?¥Im…K¥Ji…L¥Ki…K�æL`¤„¥…ИðÉÐ`¥ÐÆÆ¥Ð¥ðïÉðë©ÿ…H¥ …I¥ …J©….©…- è  ±IÑKÐÈÌÐôð�¬ȱIH±K‘Ih‘KˆóÈ„H¥K…I¥L…J è æ.Ðæ-¥-Å�Ã¥.Å�½$HŽ`èä(Ð`¥%ð`¥&Éÿðø8`¥?i…B¥@i…A8¥&åB…&¨¥%åA…%И0 8`ÉÿИ0÷`¥(0¦ ä(ð°½Ë-É ð†!8`è† Ðê` „#¦ ä(ð°½Ë-É ðÉ=ðÉ;ÐÀÐʆ"8`Àð÷`É'ÐÈÀРèæ#Ð̦ ä(ð°.½Ë-É'Ð ‡ † ° ½Ë-É'Ðòè† Ðà½Ë-É ð É)ð É,ðè† ÐÌ` ] �`½Ë-ÉA�É[�`8`½Ë-É0�É:�`8` ÿÈÌð Ä/° W °`½Ë-™o.è°æ© ™o.°ß©…%…&©…6©þ%…†=†< X�` +É-Ш ‡ �`„1†=©…2…3 X�`É<Ðæ2ÐÉ>Ðæ3 ‡ �`†= l �  L» É$РL­ É@РL­ É%РL­ ] �G 8éÍ�` { �LÆ p u¥+Ð¥*Ð¥&Ð¥%Ð¥1É+І=Ê ‡ ° X�L¦<†=`É*Ð ¥…5¥…4èÐ[É'ð` ‡ �`½Ë-É'Ð ‡ °%½Ë-É'Ð…5©…4 ‡ °2½Ë-É'Ð ‡ °&½Ë-É'Ц=`èÐ ‡ �`†= W °`„0  m°`¥2ð©…4ð ¥3ð¥4…5©…4¥1É+Ð:¥&e5…&¥%e4…%©*¨ ИÐLê ©…Lê ˜ð ©þ%…Lê ©…Lê É-ÐA¥&8å5…&¥%å4…%©*¨ Иð ©þ%…Lê ©…Lê „?©%E?ÐLê ©…Lê É*ÐN©…q…p ( @ŠH¢F4f5� ¥qe&…q¥pe%…p&&%ÊÐæhª¥q…&¥p…% Ð ©þ%…Lê ©… .Lê É/ð¦<†=`©…q…p ( @¥54Ц<†=`8¥&å5…&¥%å4…%�¯æqÐíæpÐéä(ð X°¼Ë-†ø¥i…¥i…Ø¥+Щ�-©%ð ²LL@¥ …¥ …©….©…-¸¥-Åð� `¥.Åð°÷ Q ±),Ë œ ÈÌÐî NP  zð ± ° ȱ ° Ô ¥m…�æ¥i…�ææ.Тæ-L©* SˆÐø`¢Š¨ ¶$ c©@%ð c   Ô ©õ  P Þ ¢ûš8`©…l©-…m¥E…¥F…¥CH©… Q¥ A¥ A QhÐH¥,ÐB X XL ªÉ�¢8éLù©HÊ0 ±l A QæÐæælÐéæmÐå¥,Ð ¦(0 X ü Ô æ,h𪩀%ЊLÄŠe…�æ$¥Cð …s¥) ð$`¥MÐ ¥E…O…k¥F…N…j¥EÅkð ©LY¥FÅjÐô ¦M¹-•PækÐæjÈè†MÆsÐàð`àÐä˜H ©h¨¥k…O¥j…NLy©…i…h¥MÐ`©; € ¥M ð t ¥Mi…M©…r¦rµM ð t ærÆMÐð¥h t ¥i t © € © L€ Hei…i�æhh`¢ÿÆ{èä{° ½. œ L`$0`©…  s X¦DÊ0 QL ©^ œ Ô ¥> ª½¶¼· sLÔ ææL° Q Q Q© æLœ © Lœ Ô Ô Ô LÔ ©¢ •Êû¢K�-Êú ´Êʆ(ÉЩ �.© �.¢ÿ…(¢†{Lƒø¥i…¥i…Ø Ç ° ¢ŠL. l � ‡ †'† °ê�ð Ç �ã½Ë-É;ðÜ å ° © ¦!L.¦!½Ë-É.ÐLGÉ*ÐLž¤#Ì� ð©  L.„/ { °© Ðð¥#ÉÐ ƒ�Lí¥)зæ)¦ ] °©ÐÑ­p.É Ð­o.ÉAðÉXð ÉYðÉSðÉPЩLý†$¢½o.HèìÐö¥#H¦"è† Ç �½Ë-É=ðG �¥4ÅÐ¥5Åð L2¥…4¥…5 ƒ¦!ä$ðLÊL­æ*æ †$ Ç °L!½Ë-É=ð©Lýæ* ‡ † �L! Ç ° L ž ¥60 Щ L€© L€¥*Éð*©%ð¦!©  ¶¢††L1¢Š¨ ¶¥%…¥&…L1h…#®Êh�o.Êù �¥4Å%Ð¥5Å&𠩦$L.¥%…4¥&…5 ƒL­¦!è©ö…©…©…/ { Ê ‡ °½Ë-É Ðô† ° ©LÚ¢ ¹o.ÑЈöŠ ª½Ø…½Ù…¥l¥i…�æÊÔ0É¥)ð ­�¯­>ÿ œ L­ Ð „+ Ç °L ž ¥6ð[]† ¦+ ¥&™-àÐ¥%È™-¥) ÐàÐ ¥%ð ¤+©¦!Lÿ¤+© ¶¦ ä(ð°½Ë-É,ð É ðLþL1 ‡ † Ç °¡L!©Ð½Ë-…€É'ðÉ"Ð ä!Ф+Àð© H  h¤+¦=Lÿ†  ¦ ‡ † �L#½Ë-ŀЦ ‡ † °Œ½Ë-Å€Ð…É �É�©™-ÈLU Ç °L­¦!©…/ { °Lj©…©…¢ Ls Ð&)ßLÖ)LÖ €Ð @Ð)¿LÖ Ð )ïLÖ Ð)û…  °L­½Ë-É,Ðöè† L‰©…:…9…;¨¥7�-¥8ÉРL¯¥"… æ Ç °  ©¦"L.½Ë-É;Р©LÚÉAÐ ä(ð¼Ì-À Ф8¹Ù0 e7�-L©LØÉ#Щ L[É(Щ…:æ! ‡ �L! ž ¥60\¥:É ð¥6ðL¥8Éð=© ¦=Lý½Ë-É'Ð/ ‡ � L#½Ë-É �É�©…&©…%©ö%… ‡ °½Ë-É ð© ¦= L.æ;©…9  �W½Ë-É)Ðæ:æ:¥7ÉLðL ‡ �L!½Ë-É,ðÐ ½Ë-É,Ð¥7ÉLЩLØ ‡ �L!½Ë-ÉXÐæ:LKÉYð© Lýæ:æ:Ð%¥7ÉLÐ¥:Р„9LäÉÐé ‡ °î¼Ë-À ðçг¥;ÐN©…9¥8ÉÐ¥…?¥…@ œ °© LÚ©…%¥:É�É ° Ž °©L½¥%Щ…9¥:i…:É �©LØ¥:i …:ɰ¨ˆ¹Ëe8¨¹Ú.¥;ð¥9ÉðLþÆ9¥:8é …:L”¥9ÉðLþæ9¥:i …:L¤e7 ™-¥;Ð0È¥&™-È¥9Éð¥%™KK-© %ð¤9È©LÚ¥9ÉÐ¥%Ðî¤9ÈL¯­- )ÉЈ© ¶¢ûš`© %…„ i�û`©  P¢©•èà�Ðù­É°©�¢½É?ð�!�=!�^!Êí0L†­É ð; )�!­É ð.ÉZÐ8f0 )�=!­É ðÉXÐ8f}0ÉZÐ8f~0 )�^! � Tð³ Ÿ$0 • `𤠕 T𜠚 \¥}~0 š `ðˆ š Tð€©ô…©o .m… �È„ ­¬8í… °ˆ„8¥ é… °Æ¢ÿš©Ñ  P 6©?  P©…………………M�(!�)!�hstbuf adc wmoved+2 sta wmoved+2 ;at this point wmove operand contains the address of the ;sector of interest in the hstbuf buffer. ;so now set the operands for the possible read move lda wmoved+1 sta rmove+1 lda wmoved+2 sta rmove+2 ;now set address of record in associated operands lda dmaadr sta wmove+1 sta rmoved+1 lda dmaadr+1 sta wmove+2 sta rmoved+2 ;at this point the pointers are all set for read or write ldy #127 ;length of move - 1 ldx readop ;which way? bne rmove ;skip if read ;write operation so move from dmaadr inx ;x <-- 1 stx hstwrt ;hstwrt <-- 1 wmove lda $ffff,y wmoved sta $ffff,y dey bpl wmove ;loop if more bmi endmve ;else done ;read operation so move to dmaadr rmove lda $ffff,y rmoved sta $ffff,y dey bpl rmove ;loop if more ;data has been moved to/from host buffer endmve lda wrtype ;write type cmp #wrdir ;to directory? bne nodir ;done if not ;clear host buffer for directory write lda erflag ;get error flag bne nodir ;done if errors sta hstwrt ;say buffer written jsr writeh nodir lda erflag rts ;writeh performs the physical write to ;the host disk. writeh jsr hcom ;setup params jsr la57 ;to kernal sta erflag ;save result rts ;set parameters for host (physical) read/write ;as coded this is limited to reading or writing to the c64 cp/m ;disk format for the 1541, i.e., ;1541 drive numbers are ; drive 0 --> device 8 ; drive 1 --> device 9 ;1541 track numbers go from 1 to 35 however 1541 track ; number 18 is reserved for the 1541 directory ; and can not be used by cp/m or dos/65. Net ; result is that dos/65 track must be increased by ; one and if track is 18 or more it is increased by one ; more to skip directory track ;1541 sector numbers go from 0 to 16 hcom lda hstdsk ;get disk number ;now calculate device number clc ;by adding "8" adc #8 ;to drive number sta device ;ignore high byte of track and sector for 1541 lda hsttrk sta phytrk inc phytrk ;bump track by one lda phytrk ;now check for 18 cmp #18 ;since that is reserved bcc nobump ;if < 18 do nothing inc phytrk ;else bump 18-->19, 19-->20 etc nobump lda hstsec ;then sector sta physec rts ;done ;following section contains core C64 I/O routines ;change drive by sensing new drive and then closing 15 & 2 ;and then reopening 15 & 2 with new device number chkdrv lda hstdsk ;get new drive number cmp lstdrv ;see if same as last beq chkdrx ;done if is sta lstdrv ;save new for next jsr lb97 chkdrx rts ;read sector ;returns a=0 if ok else a<>0 with flags set appropriately ;as currently implemented it should never return an error code LA3F jsr chkdrv ;check & change drive LDA #'1' ;"1" in "U1" JSR LAF2 ;set up USER 1 mode JSR LBDE ;set up read from LA 2 LDX #0 ;do full 256 bytes LA49 JSR BASIN ;input from channel STA HSTBUF,X ;& put in host buffer INX ;go to next BNE LA49 ;loop if more stx data ;set return jsr clrch ;restore default lda data ;get error code rts ;exit always ;do sector write but first initialize diskette LA54 JSR LB97 ;initialize diskette jmp la571 ;skip drive check ;write sector ;returns a=0 if ok else a<>0 with flags set aKKppropriately LA57 jsr chkdrv ;check and change drive la571 JSR LBF4 ;set up to write to command channel LDY #8 ;8 characters LA5C LDA LB80,X ;send block command JSR BSOUT ;output to channel INX DEY BNE LA5C JSR CLRCH ;restore default channel JSR LBCE ;read command results BNE LA54 ;error so initialize JSR CLRCH ;restore default channel JSR LBE9 ;set up write to channel 2 LDX #0 LA76 LDA HSTBUF,X ;get byte from buffer JSR BSOUT ;output to channel INX BNE LA76 ;loop until all 256 written JSR CLRCH ;restore default channel LDA #'2' ;"2" in "U2", block write ;set up user mode ;error return: a=$ff & z=0 else a=0 & z=1 ;returns: a LAF2 STA LB62+1 ;save "1" or "2" for mode LDA phytrk ;now get track number JSR LB89 ;convert to ASCII STX LB62+7 ;and store in string STA LB62+8 LDA physec ;once more for sector JSR LB89 ;convert to ASCII STX LB62+10 ;and store in string STA LB62+11 LDA #2 ;set DATA for 2 tries STA DATA LB1B JSR LBF4 ;set up command channel LDY #13 ;string is 13 characters LB20 LDA LB62,X ;get character and JSR BSOUT ;output to channel INX DEY BNE LB20 JSR CLRCH ;restore default channel JSR LBCE ;read error channel BEQ LB3D ;if no error say so & exit DEC DATA ;else drop counter BEQ LB45 ;if everything tested then error JSR LB97 ;else initialize diskette JMP LB1B ;and try again LB3D LDA #0 ;set flag for no error LB3F STA DATA ;in data jsr CLRCH ;restore default channel lda data ;get error code back rts ;exit LB45 LDA #$FF ;set flag for error BNE LB3F ;and always save ;text strings for disk operations LB62 .byte "U1:2 0 TT SS", CR LB6F .byte "#" ;random access LB80 .byte "B-P 2 0", CR LB88 .byte "I" ;initialize ;convert binary in A to ASCII in X (upper) and A (lower) ;this assumes maximum value of binary is 99 LB89 CLD LDX #'0' ;set upper to zero SEC LB8D SBC #10 ;A-10 to A BCC LB94 ;less than zero so done INX ;X+1 to X BCS LB8D ;and try again LB94 ADC #'0'+10 ;add 10 back & convert RTS ;Diskette initialization & set up for direct access ;error return: c=1 ;return: a = error code ;start by closing command channel LB97 LDA #15 ;logical file (LA) 15 JSR CLOSE ;close logical file ;now open command channel as logical file 15 LDA #15 ;logical file (LA) 15 LDX device ;device per hcom to (FA) LDY #15 ;secondary address (SA) 15 JSR SETLFS ;set LA, FA, SA ;now send initialize command to drive LDA #1 ;only one character LDX #LB88 JSR SETNAM ;set length & file name address ;now open JSR OPEN ;open logical file ;if logical file 2 is open close it LBB1 LDA #2 ;logical file (LA) = 2 JSR CLOSE ;close logical file ;now open logical file 2 LDA #2 ;logical file (LA) 2 LDX device ;device per hcom to (FA) LDY #2 ;secondary address (SA) 2 JSR SETLFS ;set LA, FA, SA LDA #1 ;single character LDX #LB6F JSR SETNAM ;set length & file name address JMP OPEN ;open logical file ;initialize and then set input to command channel LBCB JSR LB97 ;initialize diskette ;set input to command channel and check for errors LBCE LDX #15 ;logical address = 15 JSR CHKIN ;set channel in BCS LBCB ;if error try to initialize JSR BASIN ;input from channel CMP #'0' ;test error code "0" RTS ;close and open LA 2 and then LBDB JSR LBB1 ;set for random access ;set up read from channel 2 LBDE LDX #2 ;channel 2 JSR CHKIN ;set channel in BCS LBDB ;if error try to initialize RTS ;close and open LA 2 and then LBE6 JSR LBB1 ;set for random access ;set up write to channel 2 LBE9 LDX #2 ;channel 2 JSR CKOUT ;set channel out BCS LBE6 ;if error close and open RTS ;initialize diskette then set up for command channel write LBF1 JSR LB97 ;initialize disk - ignore errors ;set up for write to command channel ;error return: none ;return: x=0 LBF4 LDX #15 ;LA 15 for command channel JSR CKOUT ;set channel out BCS LBF1 ;if error initialize LDX #0 ;x = 0 to start transfer after RTS RTS ;disk control blocks ;both for C64 1541 ;drive a dcba .word 135 ;max block number .word 34 ;records per track .word 2 ;number system tracks .byte 0 ;block size = 1024 .word 63 ;max directoKKry number .word almpa ;address of map for a .byte 0 ;do checksums .word ckmpa ;checksum map ;drive b dcbb .word 135 ;max block number .word 34 ;records per track .word 2 ;number system tracks .byte 0 ;block size = 1024 .word 63 ;max directory number .word almpb ;address of map for a .byte 0 ;do checksums .word ckmpb ;checksum map ;data area sekdsk .byte 0 ;seek disk number hstwrt .byte 0 ;0=written,1=pending host write cstat .byte 0 ;character available flag toggle .byte 0 ;caps lock housekeeping lastky .byte $40 ;vector of last key pressed kybdmd .byte 0 ;caps lock flag data .byte 0 ;io data lstdrv .byte 8 ;last drive used - start as illegal ;keycode table ;comments for each entry show key name and then ASCII for four conditions ;normal, Commodore, shift, control keytbl .byte $7f,$7f,$7f,$7f ;DEL - DEL DEL DEL DEL .byte cr,cr,cr,cr ;CR - cntrl-M cntrl-M cntrl-M cntrl-M .byte $1c,$1c,$1d,$1d ;CRSR right - right, right, left, left .byte $86,$86,$87,$87 ;F7 - F7 F7 F8 F8 .byte $80,$80,$81,$81 ;F1 - Fl Fl F2 F2 .byte $82,$82,$83,$83 ;F3 - F3 F3 F4 F4 .byte $84,$84,$85,$85 ;F5 - F5 F5 F6 F6 .byte $1e,$1e,$1f,$1f ;CRSR down - down down up up .byte $33,$33,$23,$33 ;3 - 3 3 # 3 .byte $77,$57,$57,$17 ;W - w W W cntrl-W .byte $61,$41,$41,$01 ;A - a A A cntrl-A .byte $34,$34,$24,$34 ;4 - 4 4 $ 4 .byte $7a,$5a,$5a,$1a ;Z - z Z Z cntrl-Z .byte $73,$53,$53,$13 ;S - s S S cntrl-S .byte $65,$45,$45,$05 ;E - e E E cntrl-E .byte $00,$00,$00,$00 ;SHIFT - NUL NUL NUL NUL .byte $35,$35,$25,$35 ;5 - 5 5 % 5 .byte $72,$52,$52,$12 ;R - r R R cntrl-R .byte $64,$44,$44,$04 ;D - d D D cntrl-D .byte $36,$36,$26,$36 ;6 - 6 6 & 6 .byte $63,$43,$43,$03 ;C - c C C cntrl-C .byte $66,$46,$46,$06 ;F - f F F cntrl-F .byte $74,$54,$54,$14 ;T - t T T cntrl-T .byte $78,$58,$58,$18 ;X - x X X cntrl-X .byte $37,$37,$27,$37 ;7 - 7 7 ´ 7 .byte $79,$59,$59,$19 ;Y - y Y Y cntrl-Y .byte $67,$47,$47,$07 ;G - g G G cntrl-G .byte $38,$38,$28,$7B ;8 - 8 8( { .byte $62,$42,$42,$02 ;B - b B B cntrl-B .byte $68,$48,$48,$08 ;H - h H H cntrl-H .byte $75,$55,$55,$15 ;U - u U U cntrl-U .byte $76,$56,$56,$16 ;V - v V V cntrl-V .byte $39,$39,$29,$7D ;9 - 9 9 ) } .byte $69,$49,$49,$09 ;I - i I I cntrl-I .byte $6a,$4a,$4a,lf ;J - j J J cntrl-J .byte $30,$30,$30,$00 ;0 - 0 0 0 NUL .byte $6d,$4d,$4d,cr ;M - m M M CR .byte $6b,$4b,$4b,$0b ;K - k K K cntrl-K .byte $6f,$4f,$4f,$0f ;O - o O O cntrl-O .byte $6e,$4e,$4e,$0e ;N - n N N cntrl-N .byte $2b,$2b,$2b,$2b ;+ - + + + + .byte $70,$50,$50,$10 ;P - p P P cntrl-P .byte $6c,$4c,$4c,$0c ;L - l L L cntrl-L .byte $2d,$2d,$2d,$2d ;- - - - - - .byte $2e,$2e,$3e,$7d ;. - . . > } .byte $3a,$3a,$5b,$7b ;: - : : [ { .byte $40,$40,$40,$60 ;@ - @ @ @ Accent .byte $2c,$2c,$3c,$7b ;, - , , < { .byte $5c,$5c,$5c,$7c ;PF - PF PF PF | .byte $2a,$2a,$2a,$2a ;* - * * * * .byte $3b,$3b,$5d,$7d ; - ; ; ] } .byte $1b,$1b,$1b,$1b ;HOME - ESC ESC ESC ESC .byte $00,$00,$00,$00 ;SHIFT - NUL NUL NUL NUL .byte $3d,$3d,$3d,$3d ;= - = = = = .byte $5e,$5e,$5e,$7e ;PO - PO PO PO ~ .byte $2f,$2f,$3f,$5c ;/ - / / ? backslash .byte $31,$31,$21,$31 ;1 - 1 1 ! 1 .byte $5f,$5f,$5f,$5F ;PL - PL PL PL PL .byte $00,$00,$00,$00 ;CTRL - NUL NUL NUL NUL .byte $32,$32,$22,$32 ;2 - 2 2 " 2 .byte $20,$20,$20,$20 ;SP - SP SP SP SP .byte $00,$00,$00,$00 ;Commodore - NUL NUL NUL NUL .byte $71,$51,$51,$11 ;Q - q Q Q cntrl-Q .byte $03,$03,$03,$03 ;STOP - cntrl-C cntrl-C cntrl-C cntrl-C ;allocate the following data areas to unused ram space contmp ;temp in conin *= *+1 kychar ;keyboard character *= *+1 savsec ;save sector for warm boot *= *+1 count ;counter in warm boot *= *+1 temp ;save hstdsk for warm boot *= *+1 hstact ;host active flag *= *+1 unacnt ;unalloc rec cnt *= *+1 sektrk ;seek track number *= *+2 seksec ;seek sector number *= *+2 hstdsk ;host disk number *= *+1 hsttrk ;host track number *= *+2 hstsec ;host sector number *= *+2 sekhst ;seek shr secshf *= *+2 unadsk ;last unalloc disk *= *+1 unatrk ;last unalloc track *= *+2 unasec ;last unalloc sector *= *+2 erflag ;error reporting *= *+1 rsflag ;read sector flag *= *+1 readop ;1 if reKKad operation *= *+1 wrtype ;write operation type *= *+1 d65spt ;dos/65 records/track *= *+2 dmaadr ;record address *= *+2 device ;c64 iec bus device *= *+1 phytrk ;physical track *= *+2 physec ;physical sector *= *+2 ;allocation maps ;drive a almpa *= *+17 ;drive b almpb *= *+17 ;checksum maps ;drive a ckmpa *= *+16 ;drive b ckmpb *= *+16 ;deblocking buffer for dba hstbuf *= *+256 ;256 byte sectors .end  .byte $30,$30,$30,$00 ;0 - 0 0 0 NUL .byte $6d,$4d,$4d,cr ;M - m M M CR .byte $6b,$4b,$4b,$0b ;K - k K K cntrl-K .byte $6f,$4f,$4f,$0f ;O - o O O cntrl-O .byte $6e,$4e,$4e,$0e ;N - n N N cntrl-N .byte $2b,$2b,$2b,$2b ;+ - + + + + .byte $70,$5;C64BOOT ;128 byte record that is loaded by C64LOAD to pass addresses and ;record count for DOS/65 CCM, PEM, & SIM ;Version 2.11 ;released 27 March 2008 ;last revision: ; 6 april 2008 ; increased to 52K ;C64LOAD does not know anything about load address or ;amount to load except as provided by this record ; ;data that is used to derive other information ;CCM & PEM length are fixed for DOS/65 2.1 CCMLNG = 2048 ;length of CCM in bytes PEMLNG = 3072 ;length of PEM in bytes ;memory size assumes kernel rom & IO space are not used MEMSIZ = 53248 ;last useable RAM+1 ;SIM length depends on code included and will ;change as features are added or changed ;for C64 maximum SIM length is 3456 bytes given ;capacity of first two tracks on 1541 diskette ;Initial release is 10 pages long. SIMLNG = 2560 ;length of SIM in bytes ;following fields contain the data needed by C64LOAD to load DOS/65 ;start address for CCM START .word MEMSIZ-CCMLNG-PEMLNG-SIMLNG ;number of 128 byte records to load LENGTH .byte CCMLNG+PEMLNG+SIMLNG/128 ;cold boot entry point CBOOT .word MEMSIZ-SIMLNG ;rest of 128 byte record is ignored .end D to load DOS/65 ;start address for CCM START .word MEMSIZ-CCMLNG-PEMLNG-SIMLNG ;number of 128 byte records to load LENGTH . ;host active flag *= *+1 unacnt ;unalloc rec cnt *= *+1 sektrk ;seek track number *= *+2 seksec ;seek sector number *= *+2 hstdsk ;host disk number *= *+1 hsttrk ;host track number *= *+2 hstsec ;host sector number *= *+2 sekhst ;seek shr secshf *= *+2 unadsk ;last unalloc disk *= *+1 unatrk ;last unalloc track *= *+2 unasec ;last unalloc sector *= *+2 erflag ;error reporting *= *+1 rsflag ;read sector flag *= *+1 readop ;1 if read operation *= *+1 wrtype ;write operation type *= *+1 d65spt ;dos/65 records/track *= *+2 dmaadr ;record address *= *+2 device ;c64 iec bus device *= *+1 phytrk ;physical track *= *+2 physec ;physical sector *= *+2 ;C64LOAD ;C64 file that is loaded and executed to start DOS/65 ;Version 2.10 ;released 28 march 2008 ;miscellaneous definitions CR = $0D ;carriage return ;C64 KERNAL entry points SETLFS = $FFBA ;set LA, FA, SA SETNAM = $FFBD ;set length & file name address OPEN = $FFC0 ;open logical file CHKIN = $FFC6 ;set channel in CKOUT = $FFC9 ;set channel out CLRCH = $FFCC ;restore default channel BASIN = $FFCF ;input from channel BSOUT = $FFD2 ;output to channel CLALL = $FFE7 ;close all files & channels ;start of actual load ;This is in BASIC data area so it must be loaded as a BASIC ;file at $0800 that then jumps to $080F *= $80F SEI ;disable interrupts ;set up C64 memory by disabling BASIC ROM & Character ROM ;by writing to second 6510 I/O port LDA #%00110110 STA 1 ;close everything - including whatever BASIC did or user did JSR CLALL ;close all files & channels ;set up read from drive 8 ;first open command channel LDA #15 ;logical file number 15 LDX #8 ;device 8 LDY #15 ;secondary address 15 JSR SETLFS ;set LA, FA, SA LDA #0 ;zero length file name JSR SETNAM ;set length & file name address JSR OPEN ;open logical file ;now set up for random access for file 2 LDA #2 ;logical file number 2 LDX #8 ;device 8 LDY #2 ;secondary address 2 JSR SETLFS ;set LA, FA, SA LDA #1 ;name is one char long LDX #L8B5 JSR SETNAM ;set length & file name address JSR OPEN ;open logical file ;set up address and operation and set x=0 JSR SETUP ;fiKrst read 128 byte record containing data needed ;for rest of load process as well as first record of CCM BLOOP JSR BASIN ;input from channel STA START,X ;and save INX BNE BLOOP ;loop until one sector done ;at this point we know where and how much to load ;set up address and count for remaining but SEC ;back up 128 bytes LDA START ;set up store SBC #128 STA MSTORE+1 LDA START+1 SBC #0 STA MSTORE+2 ;set up pointer & counter for main read loop ;first increase records by one to reflect re-read of boot INC LENGTH ;now read and store rest of CCM, PEM, & SIM MAIN JSR SETUP ;setup & set x=0 MLOOP JSR BASIN ;input from channel MSTORE STA $FFFF,X ;and save INX BEQ ONESEC ;one sector done if x=0 ;x is either 1-127 or 128-255 ;see if 1-127 and if so loop BPL MLOOP ;loop until >=128 ;x is 128-255 CPX #128 ;see if record done BNE MLOOP ;if not loop until one record done DEC LENGTH ;drop length BEQ DONE ;done if zero BNE MLOOP ;else loop ;now see if done from record count decrement ONESEC DEC LENGTH BEQ DONE ;bump sector number ENDSEC INC SECTOR+1 ;bump sector number LDA SECTOR+1 CMP #'9'+1 ;see if rollover BNE NO10 LDA #'0' ;reset units STA SECTOR+1 LDA #'1' ;set tens STA SECTOR ;now check for track rollover NO10 LDA SECTOR+1 CMP #'7' BNE NOTRK LDA SECTOR CMP #'1' BNE NOTRK ;set for sector 0 of track 2 LDA #'0' STA SECTOR+1 LDA #' ' STA SECTOR LDA #'2' STA TRACK ;uses self modifying code NOTRK INC MSTORE+2 ;bump load high byte BNE MAIN ;should never be 0 so loop ;load is done - get ready to do cold boot entry DONE JMP (CBOOT) ;jump to SIM cold boot entry ;set up address and operation SETUP LDX #15 ;set 15 as active channel out JSR CKOUT ;set channel out LDX #0 LDY #12 ;name is 12 characters long OP1 LDA L8AA,X ;point to character in name JSR BSOUT ;output to channel INX DEY BNE OP1 ;loop until last character sent JSR CLRCH ;restore default channel LDX #2 ;set 2 as active channel in JSR CHKIN ;set channel in LDX #0 RTS ;data area ;start reading at track 1 and sector 0 L8AA .byte "U1:2 0 " TRACK .byte "1 " SECTOR .byte " 0",CR L8B5 .byte "#" ;file name for random access ;128 byte data area for BOOT record ;start address START *= *+2 ;number records LENGTH *= *+1 ;SIM cold boot entry CBOOT *= *+2 .end 0",CR L8B5 .byte "#" ;file name for random access ;128 byte data area for BOOT record ;start address START *= *+2 ;numberKKKKK