IMD 1.18: 11/10/2014 15:12:45 Software Dynmamics sd basic compiler asm for mdos 9/3/80 S/N 5d00 0000 0000 001f  ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿNEX CM°2SDASM CMÿÿOSOV0 SY\2ÿÿRGE CMü2QUICKIE LXÿÿS SAÿÿOS SY2IOMDOS MK”SDBCOM CM˜ÿÿOSOV6 SY˜2SDBRTP13MK¼QUICKIE BAtGENSDON0CFxÿÿBIN CMì2ÿÿOSOV1 SYl2IOMDOS4 SASDASM13 MK„SDBCOM13MKÿÿOSOV3 SY€2ÿÿL CMà2SNEW CMSDRUN CMÔÿÿPY CMÐ2ÿÿOSOV2 SYx2|½èu½ëÀΠ¦u—æ+XĦHYHY‹É×—¦wæv—׿z¦{67îxß–ÖÎHY &û›Ù— × Îÿ†Mæ§¡ç&œ &í†S6†è6~èm†?— ~èS†M ö€S10A4800BD2000132E481334 S11E48130C48071101190D00640D000143710A480734450A48075C3435444851 S105482E07314C S9  �}ÿO'0¦æÀ‚Îÿ¡&á'LŒÿ/&ñ0®431¯5¦X%;Á€$*÷IÎîÿZ0¦6¦æî2½Y06ç3ç3Ä„ï6;Æ!½þ~ÒþnWþn|@'€¿xÀ md~" ~,rn$~q¯~rB~r~u~u<~uœ~r¹~rû~sÓ~s±~rm~u~~vs~v|~v ~v…~v‹qzpNp~ðó9~wž~q{n&„oípoî† Œ†ŸB›C—C$|BžBÞ@ß@¦H%—aÞ`în—cÞbînÞ@ß@¦H%í—aÞ`în†›A—A$|@Þ@¦H%Ó—aÞ`înLERTIE 1978 MODULE RUN VERSIQN 2.0 ALL RIGHTS RESERVED"ø"ø"ø"ø"ø"ø"ø"ø"ø"ø"�"Ú# # "¹"|"¬#"&Ä&]&Ü((k(¬(ï)m)Ä)­#ö$$×#»#Þ$G$S$w$k$å$ö$ü%%%*S*^*e*W*Ï+,,o+Ö+«0ú/ã0/ú&´46&ç&ú&—'Ð5’5¿64µ5Ñ--À4H/4†.Ó4g%%% %&%,%2*p$_,â,Ö& /Ø:,929(887r#J6ð6l#4#>4à4­54§4ÿ&‹7D,‘,ˆ4#9*þ#%';&)&M"[4+Q+Š*ˆ5.5K'²%ë%Ô3‹3»%ð)'9¥8â#w+Ò3X h0îßdþ ;5Îß$ß‹ß�ß=ß*ß,ß0ß2ß6†!—`†"—bþ Oß^þ RßZ¶ Q@—]O—\—&—'—9½ 2Þd¦�'~,o~ jÞ@æîßMÞ@¦ß@ÞM§ßMZ&ïÞ@~ jÞ@½A%0¼ ='M†~ —Þ@î¦6¦6¦6¦6¦6¦60¼ =',~ •0îæ0oç~ hÞ@OÆÿ½A¼  ß@0¼ ='~  ÆŒÆ~,q0î111111¦6¦6¦6¦6¦6¦6~ hÞ@¦6O666660¼ ='Ì~ hÞ@æ¦76444O60¼ ='¶~ •0 Î;J½A%0¼ ='¤~ hÎ2 ïÎ, ê0¦*ˆ€§~ h0¦'%½EÄ0¦+½E„  ½C  0¦ª'½Cé 4O6~ h0¦'* Î;~"ݦª'†§oo~ h23—V×W0¦&½3­0¦&Ϋ½;¼½3­Î«½A%ÞVn½$5 �ÓÎ$-ßݽ<(~ hî½6&  ê0§ ç ~ Y0¦&½#• ¦'÷Î$-ßݽ@» Ô�= ½#•Î$-ßݽ>« Ãë©$ ë�$ ½#•Î$-ßݽ>¤ ªà¢%í§ ç ~ YÆŒÆ~,q0¦ª&¦ æ 9î11n�ì  ãä¤ Ó�à  ×êª Ç�Ô  Ëè¨ »0¦&Àcc~ h0¦&´¦*7Î;j½A%½>«0¦*F½EĽ;²½C  !23‰3‰3&]'0¦DfZ&ú§ ½(0 o o ~ hM&ö]'÷0¦hIZ&ú ß~ Y0¦&½3­½;²~ h�Q&†—?~ h?~ h�@&ï ô�:-é î�4/ã è�..Ý â�(,× Ü�^'Ñ Ö�X&Ë Ð�R-Å Ê�L/¿ Ä�F.¹ ¾�@,³ ¸23—X×Y0¦ª&'¦ ¡&¦  '$†ÿŒ†ŸBÆ ÛC×C$|BžBÞXMn½#•½;Þ ó23—X×Y½0ßG0î Œÿÿ&0îîßEœG'ÖFÐH–E’GFŠ—8* ÞE'® 8ÞG'"ßß0îßM0îŒÞI¦ßIÞM¡&‹ßMÞß ßß&é–8 „½ 8 ßB6_7–C6–B647~ h½ 5 ç½0ßB0î111111–BÖC½/O áÆ~,q½0ßB0îß‹–BÖCÛŒ™‹—�׎~ YÞ@î¦�o&æß‹OÛŒ™‹—�׎~ •Æ~,qÞ@æOÛA™@—@×A~ ‚Þ@æ7O6ÛA™@—B×CÆþ†ÿÛA™@76ÞBß@4O60¼ ='~ ‚Æ~,q†ÿ66ö @¶ ? †ÿ66¶ Kö L76O660¼ ='~ hÆ~,qÖUÐS7–T’R6–RÖS ÝÞ@†ÿ66¦æ76O660¼ ='Ö~ •Þ@î¦æ~#þ Koo¶ Mö N§çßT½0ßß'2þ K–ßÖàë©¡"&&á" §ç0îŒÞB¦ßBÞT§ßTÞß ßß&ë~ YÆ~,q½0ßG'l0î Œÿÿ&0îîßEÖF–EÐH’G%Nˉ—B×C0îßI0îßMÞMßOÞGßßÞIßIŒÞK¦ßKÞO¡&ßOÞß ßß&é0–IÖJà ¢§ ç ~ YÞB ßB&Ä_O0 íÆ ø½(0 Æ ~,q0î¡"ô&á"î§ç~ Y�^  UËÿ‰ÿ$O—B×C0î¦æÐC’B%>0§ç–BÖCë©§ç~ h�-  $Ëÿ‰ÿ0î¡"&á"0ë©§çO§†§~ hÆ ~,q23—V×W0¦'&Î;j½A%½>«0¦+½C 111111ÞVn23%õ' ñ111123ÞVn�à  º0§ ç �¸  ¯Ëÿ‰ÿ—B×C0î' 0ë©%›î¡"•&á"�0–BÖCë©§ç~ h†—8½(0  3XI%/×C—BXI%'Û8‰%!ÛC™B%0ë©%î¡"&á"0§ç~ hÆ ~,q†—8½(0  ð—B×C½(0  å0î6–B¡"Û&–C¡$Ó2î½6&  ÉÛC™B �Þ@î3ç2§2§2§2§2§]'*ßB½E„  !½A%½C 111111 23‰23&ÞBo§ç~ •0î 3ç2§2§2§2§2§]'%ßB½E„  ½A%½C ~ V23‰23&ÞBo§ç~ Y0¦'Æ~,q¦&÷¦î§~ V0îßI0îßM½0ßG0ßBî Œÿÿ&0îßBîßE–EÖFÐH’G%ÞGßßÞB–ßÖà§çÞß'–IÖJÐN’M$ÞM¦ßMÞI§ßIÞß ßß&ë~ V–IÖJÛà™ß—I×J–MÖNÛà™ß—M×NÞM ¦ßMÞI §ßIÞß ßß&ë Ζ?& Þ@î~ k–?&õ~ •_–?&S×?~ h½(0 Þ@î �$  ôÞBî~ k½(0  æ�  àÞ@¦æÞBî :Ëÿ‰ÿXI%ÛA™@%ˉ%Þ@¡" &á'"—B×C90î11nÞ@–@ÖAˉîß@ÞZ¼ T' ßZ§ç–=Ö>§ç~+ÖÆ~,q½(0 †ÿ—ß×àÞß'ÞZ¼ R'7ßZÞß ßß&ì þ RßZ~ hÞZ¼ R'¦æ—=×>¦æßZ—@×A~  Æ~,qÞ@îßBî½A%ξ½;¼ÞBî½;¼–@ÖA764444ξ½A%0¼ ='Þ B~ jÆ~,qξ½;¼0î ß@îî½;¼111111ξ½A%~ •0ßB�þ ;5~ •Þ@¦6¦6¶ <�CTHHHHH@ÞB9Þ@nÞ@ß@ îß=–&…P&œ$&4½8&qLINE6 945�Þdß@–&'…'½ Hš''M'õ…'Ö&Äï×& ½ Hš''M'?…€&>Ö&…@'È@×&…'Ê×&… '%½8&q BREAK ON LINE? 6HF} �Þdß@– &Û~ hÆŒÆO¾ ;—6×7Þ=ß0Þ‹ß�Þ*' ~ kÞ@îß*~ •–6Ö7Þ0½ EÞ6&Î,ª~ kÎ,·~ kq STOP6.,Äq ERROR6^4 AT LINE6j45�~ )0¦&1îæ~"±0¦&%¦&†F¡ "&†¡ " ¦& ¦î §~ VƌƌÆ~,q0¦ª'½#•0¦æÞ^Œ�u¼ O'¡&õá&ñ6œ^'¦§ õ6|\|]'H†ð›_—_%z^Þ^2§ç2§2§2§2§2§2§2§ 2§ 2§ 2§ 2§ 2§–@ÖAˉ§ç~ YƌƌƌÆ~,q6ßB†›C—C$|BÞB29z]z\†›_—_$|^Þ^9Þ@¦æÞ^Œ�ϼ O'¡&õá&ñ¦ßBîª&+ÞB¦æîë©%}§çÞB ⢠$î~ k�¨œ^&ú�¢~ • ^¦6¦6¦6¦6¦6¦6ßBî½A%Î-•ßݽ>«ÞBî½;¼ÞBî½A%ÞB¦6¦ 6¦ 6¦ 6¦ 6¦ 6½;Þ'.ÞB¦*ž £ÞB¦+– ›ÞB �ÞBî¦&¦6¦6O66½CéÞBî½;¼ÞB¦&�¦6¦6O66½CéÞB2§2§2§2§2§2§ÞB¦6¦ 6O66½CéÞB2§ 2§ 2§ 2§ 2§ 2§~.Þ@ß(þ KßRßBþ MßßÖQ& ½ Hš'—'+ ÖQ½ ÞB§ßB� ' Þß ßß&ÜÞB� ßT~,~,l–TÖUÐS’RÞR�0 )–Q'Æ~,qÎ/0~ k INPUT ERROR 6U�Þ(¾ ;~ kßR~ h—B×C23—V×W–BÖC½A¼ ] lßÖÞBßß½A¤� 'ù�:&[O—¾—¿—À½A¤�0-*�9.€0 �A-�F.€7Æ×ÀHHHHÆHy¿y¾%(Z&ô ÏÖÀ'Ö¿7Ö¾7444_7ÞÖ ¦�,' –VÖW769ÞVn†?_½ † _ Þ‹œ�'¦ÖQß‹½ Þ‹ î† Œ† ÖQ½  ~ h0îŒÿÿ&0îî9�ðßß'0îŒÞB¦ßBÖQ½ Þß ßß&í~ Y—�×�O—‚—ƒ—„—Ù—…—†—‡�W�$&|‚�N�-& |ƒ �-'÷Œ�>�#& –„L—„� #ñ�/�.&|Ù–„� "� �#& –…L—…›„� #ï�Ö‚Úƒ&6�-&|† «½C  10oo0ÖQ½ &1111~ hÆ<~,q†—D2ÖQ½ #zD&õ~ h0îŒÿÿ& 0î¦æ§çîßß'0îßBÖQ½ ÞB§ßBÞß ßß&í~ Y½0ßß'ö0îŒÞB¦ßBÖQ½ #Þß ßß&í~ Y—¾×¿ß«Î߳ά–«'ΫÆx´y³% h$–¿›´—´–¾™³—³%Z&㌭&Û–³Ö´90î11nÖ�7–€6–6–~60Xy€yy~Xy€yy~ ©§¦™€§¦™§¦™~§Xy€yXy€y«§¦™€§¦™§Xy€ëç–€©„§—~×î߀½CéÎ;z½A%½<(~ hÆ~,q0¦+ö& ¦ª'ë½3­½8&�0¦€@GÆp$Æç‰@§†—D½8*}l l l ;Š �zD&ç½8*}l}r l�~8½8&}r€}f_[}l%�–?'–l& ½8*}r� oÞdß@~88½8&€}f_[}l='”‡XB>y™4D>$y”w?˜9 5?ˆˆ’V?ƒ33a@ffg@ffff@PAAprAq‚�‚�–l&>Î8ßÝtpvq$½8* r�Þp'½8* r}r� Þ–f*½8*}l ; l �Þd~ j–f* O0§§§ íÆ~,qÞ@ßd23—@×A~  Æ~,q0¦+ö& ¦ª'î½3­0æ†@§OÀ@‚6666XIXI0§ç½Cé½8&}l ;¬'+8€ ;¬ l ; .8g  ;  ;Š Á–�8Axƒ1‡Áq˜‰ xAÁA—%1AQA#V'Á5™ ™ lA’U�Þd¦�Y' ½8* r.7u~80¦&½3­Îx½;¼Þ@ß@½A%Þ@¦'ß@Îx½A%0¼ ='½<(Þ@½A%½>« Ù~ kÆ~,q½8& ;Z.95½8&€ ; }f_ ;Z [ ;š [ ;š}l�–qG$ ½8* ; �½8*=4(y0¾Gˆ?hQ¿yi&&@E–@•Àpyc' f l ! ; �~8½8&€}f_ ;Z [ ;Š [ ;Š}l ;Z�–qG$ ½8* ;Z�½8* ;Z ?R†DEUÀˆvb7pA’!P x@ÁQ2aAE)3  ;  ;Š f l ; �~8½8&€}f_ ; (+:C ;.:P ;  ;Š ;¦}l¿F&˜@$8(AB‰AAT#yCA8ƒ&$ xAA–%hAQTuA8ƒ&$ l f�~8A Áÿ™™™™™ !$'™™™™™ $(26A’e %05@EAW–3$06BHT@P!(5BIVc<ef‡$2@HVdrA '6ETcr�AA@xS˜5@1b'v`0¦'ˆ€§923—Ð×Ñ2§2§2§2§2§2§ÞÐn¦+ 00æ+õ¦+'á&¦ ¡&¦ ¡&¦ ¡& ¦ ¡&¦  ' "†ÿŒ†Ä€ŸÔÆÛÕ×Õ$|Ô0îžÔMn23—Ò×ÓΫ½;¼Î¾½;¼†;—ÆÎ߳ߵ߷߹߻–«'V˜¾—±–¾'M„Ä€€—²Î½ßÈαzÉ ßÊŒ«'1¦'ñ—£³ÞÈÖÃ�%ÖÂ�!ÖÁ�ÖÀ�Ö¿�§†›É—ÉÞÊ ßÊŒ«&Ï~@j')�8›³׳$«§–³$‹—³ 9«§–³$‹—³ 9–³' «§†‰—³ 9ßÈפ–£„ðÄ—ÇÞÆ¦—¥–£Ö¤„Äð—ÇÞÆ¦_›¥$Æ×¥XXXXצDDDD›¥—¥–£Ö¤HHHHÄ—ÇÞÆ¦—§–£Ö¤„ðTTTT—ÇÞÆ–§›¦—¦¦™¥–¦ÞÈ9&†™�Ä×Ä �…›Ä6É—Ä3†™vÅ©§yÅ 9–´Ö³�%–µÖ´�–¶Öµ�–·Ö¶�–¸Ö·� –³&–¹Ö¸�~@j�i–£'a_×Ä\×ÅÖÃ�žÖÂ�šÖÁ�–ÖÀ�’Ö¿�Ž�ŽvÅ%3–£‹™—£–ë § –© § –Á© § –À©§–¿©§†©§$Í–£§†›É—ÉÞÈ9§9&Æÿ×£†™|£›¿$ø9Ñ¿'#†™—£9—©†ÿ—£†™†™�©TFvªTFvªTFvªTFvªÊ�|£›¿$ø—©‰–©$í–£HHHHJ—£†š�¿›©6‰™2yªIYyªIYyªIYyªIY|£›¿$ø—©‰–©$í9†€0¨§23—Ò×Ó0¦¨—±¦„Ä'*W3×¾3׿3×À3×Á3×Â3×Ã3׫M&]'Z3׬3×­3×®3ׯ3×° ?3L&×­3×®3ׯ3×°_ *L& ×®3ׯ3×°_ L& ׯ3×°_ .L&×°_2ׯ2×®2×­2׬–¾„€?—² l1ξ1111~A+1111~A=3×¾3J&×À3×Á3×Â3×Ã_ (J& ×Á3×Â3×Ã_ J&×Â3×Ã_ J&È×Ã_2×Â2×Á2×À2׿3׫3׬3×­3×®3ׯ3×°–«„€?—²–±+~@<Î߹߻߼ƙ†š�Û°—¸‰�›¯—·‰�Á›®—¶‰�À›­—µ‰�¿›¬—´%P‰—³%B†š�¸‹—¸‰�·‹—·‰�¶‹—¶‰�µ‹—µ‰�´‹—´%Y‰�³‹—³†€˜«Œ–«—± 0 G_–°›Ã—¸–¯™Â—·–®™Á—¶–­™À—µ–¬™¿—´–«—±$!É׳_β¦&\Œ¸&õÎ; ;†€˜«Œ–«—±Æγ¦'â–²�?.‹@'Þ+Üֱ§ Î;:½A%0–±„€ª§ÞÝn p23—Ò×Óξ½;¼Î³½;¼†;—ÆÎ߹߻߼–¾'Ș³—±–³'’„ÄL—²Î³ßÈ–¿o„ð&&ÆxÃyÂyÁyÀy¿x¸y·y¶yµy´y³Z&Ü~=z23—Ò×Ó¦6¦6¦6¦6¦6¦6ÞÒn�a�E �.&–Ø&L—Ø íHHHH§–Ø& |Ù*11~C90î11n�2� �.&ï–Ø&ëL—Ø íª§ Ð�0- �9.—Û€09—©23ˉ76–©9ßÈÞß' ßßÞÖ¦ßÖÞÈ9ÞÖO õ—ß×àO—ؗٗÛßÖßÎÎ߳ߵ߷�Î� 'ú�+'�-&†€—³�¼�0&—Û–Ø'ôzÙ+ï~C�.&—Ø äδÆ×ÚŒ�˜½AC  ��½Ar  zÚ&é��½AŠ ùÖÛ&~CÞÖßÎ_×Ûױײ×Ü�E&>½A¤�+'�-& †€—±½A¤ ½A¤½AŠ  Ö²X% X% Û²%X—²$ä†—Ü Þ–Û&ÞÎßÖ–´&—³ *–Ü&UÖ²'–±*P†ÿ�O—È×ÉÖÙOY‚GVÛÉ™È' �ÿ'M*/Î; =GV$†t´vµv¶v·v¸J&î\)Ë@) /Úڳ׳γ –³*Î;* Î;:23ˉŒ23—Î×ϽA%–ÎÖÏ76ÞÖ 9ÞÎ23ˉ7690¦„�F,i�@. O§§§§ RO—µ—¶—·—¸Ä¦DDDD�M  B¦„�C  8Z&æ0¦*†�¸—¸’·—·’¶—¶’µ—µ)–¸§–·§–¶§–µ§î1111n0î11n—³–¸H—¸—¼–·I—·—»–¶I—¶—º–µI—µ—¹%Ùx¸y·y¶yµ%Ëx¸y·y¶yµ%½–¸›³$›¼ Œ›¼—¸–·™»—·–¶™º—¶–µ™¹—µ%›923—Ò×ÓO—´—µ—¶—·—¸2—¹2—º2—»2—¼_–¹*�¼—¼’»—»’º—º’¹—¹Æ€×±Æ x¼y»yºy¹%Z&ïÎ;~A+x¼y»yºy¹–¸™¸—¸–·™·—·–¶™¶—¶–µ™µ—µ–´™´—´Z&Ζ´'Ö¸7Ö·7Ö¶7Öµ76†E @–µ'_7Ö¸7Ö·7Ö¶76†D ,–¶'_77Ö¸7Ö·76†C –·' _777Ö¸76†B –¸_77776†Aš±6ÞÒnßÖ23—Ò×Ó2—²†—£2DDDD‹0§„‹0§z£&èÆ+–²*Æ-ÞÖçÆ.çÆEç Æ+H+Æ-ç —²¦�0&z²† —£¦§z£&öç–²€€6*@—ªO—¥—¦Æxª–¦™¦—¦–¥™¥—¥Z&ìÞÖ–¥‹0§–¦DDDD‹0§„‹0§† —£ ¦ �0&Zz£&ó2]&O ÞÒnæ';Ħ&+¦&!¦&¦& Á@"!23ˉ769ÁA" ñÁB" ëÁC" åÁD" ßÁE"Û923—Ì×Í0æ×±ÄÁD"Á@"111111–±*Î; Î;½A%ÞÌn†E©0 æکשoJ&ô–±*å–©'áÎ;½A%½>« Ö Žqzήÿx În0ÿx Æ}Îx ?þx † §½ �ÆÎpoZ&úÎn0¦� 'ù¦� '� &õ ÿwóÿwûwñþwû¦ÿwû� '+�;'|wñ êþwû¦ÿwû� '�Z.€@/ÎpJ&ü†§ Þþwó¶wñ½uœÎn ÿwóþwó¦' ÿ  ½wé¦ æ ¡&á%§ç~tøŽqzήÿx În0ÿx Æ}Îx ?þx † §½ �ÆÎpoZ&úÎn0¦� 'ù¦� '� &õ ÿwóÿwûwñþwû¦ÿwû� '+�;'|wñ êþwû¦ÿwû� '�Z.€@/ÎpJ&ü†§ Þþwó¶wñ½uœÎn ÿwóþwó¦' ÿwó_½sÓ ï~u~ILLEGAL SWITCH Žqz†·À†·À½v În�† ƽr†·À¶ÀF$ú¶À„�'ƽsÓ åÆ½rB~u~FROMNOVA.SAOöüõÁ'ù9$öüõÄÁ'Á'Á'Á'Á' 9† 9†9†9†@9†€9½ví½w½w1þw÷?½wé&… & …@&~w°† † †0þw÷§†§o¦æË‰§çoo?½wéo)o*o+o(o'†§o¦æÀ‚§ç9½ví½w½w1þw÷?½wé& …@&~w²† Ÿ†3 ›½ví½w'¦… '½s½t㦄�&¦Š§?½wé?½wé9½ví½w'¦… ':½s½tãþwó¦&0¦+,æhYI+$þw÷§ç½t“þwóæTOþw÷ë ©§)ç*o%o(9~wÀ~w¼½ví½w'½sÂl%¦&&.¦(&#½s$#M'ø+� 'ò�'î�"�"æ�#9„§(j(† 9�† o%9½ví½w'o(½s¦&&½s$9�O9†§&9¦„�'!Å ' î)& ½t“% 9î)¦þw÷l*&l)½tÕ 9~wÀî)&Lþw÷îæþw÷Å'îÆ€? þw÷Oë©§ç ¦æË‰§ç?þw÷¦' � '� '¦~wݦ§)¦§*î)¦þw÷æ*á' l*&l)� &–o)o* 9½ví½w'� o%¶wñ½t96þw÷¦''Š€½to'29½ví½w'l%¶wñ� &æÅ 'l'æ'Á&†ÿo'½t9�È�"öo% òæÄÁ'(æÅ '8î)&6½t“2þw÷o+l+l*&l)î) §½tÕ9~wÀîæÅ'õ½ðÁ &† ½ð9þw÷î)& þw÷æç)æç*î)§þw÷æ)çæ*ç� ' àÁ'l*&l)9þw÷?½wéo)o*¦æÀ‚§ç9þw÷¦§)¦ §*o&¦„�& ¦ æ à¢+ ?þw÷¦'� &Al&l&lîÆ€O?þw÷ 9 9þw÷æ* â"æ)â!%þw÷æ+'6m&jj?~mJ2o+o)o*9~wÝÆ½vô½w1þw÷?½wé'†0þw÷§?½w馊§†ÿ§ § ?½wé9~w¸Æ½vô½w1þy‰ŒDK&/0¦î111Æ ½vô½w1þy‰¼yµ&¶y‹±y·&ÆÎuw?]&9y‹y·~w¶�?ƽví¦…&öwò½rBzwòöwò*é9ÿwó·wñÎyÙÿx†0§Æ† §Z&ú†L§†O§½wTÎyòÿyîÆ?'ÿyðþ ÿwþÎn$ÿ _ÎyÙ?þwþÿ ]'~w´~Hþwþ&þxÿwþ�7zwý'öxÁn"&Æ$ñx#þx§ÿx Þ|x'œ~w´Æ~wÖÆ½rBþwþnƽr¹�$HHHH6ƽr¹�$ 3ûx÷x911 É�9#�G% 9�0%ú€0 9�A%ò€7 9½ví½w'¦&9½ví½w'¦%9ÎÀ†9ÎÀ †91-19-7812:01 AMÆ ÎyÙÿwù½vô†§¶wùöwú§ç§ç þwùÆ?'ÿwù¶wùöwúÿwùþw÷§!ç"zwòöwò*ÈÎvê†_½q¯9#CN¿wõÁ"¿wõ·wñ÷wòÿwóXÎx ?'îÿw÷9~w¨¦…'o%o&o'o(o)o*o+9~wª¦…&9~wºþw÷†D§†K§ †S§†A§†0§ Æ ?'ÿxÆ?þwóÿx öwñ'MÁ‚"IÎn'ÿx Îx ?þx †;§† ·n&În&ÿxÎx?Å&#Å&Å€&9þw÷¦ æ §ç 9M*_þw÷? 9�$�"� ���������� � �����0æ11ÀFTO¾wõ~ Oˉÿ¾wõ~ þw÷¦&í9x!xMxyx¥xÑxýy)yUy�y­ ~md&ö*qÄÁ&Æõ*q&Îÿÿ¼*{'ú*q÷*qÎ*p½&&9ÿ&C?'Á'_? þ&C?'Á'_? 9Î*pÆêç½&æ'?& ?&Î*®? 9~%²Î*zÆ?'9ö*‡Å€'~%êĶ*b„' �'~%âÁ&ùö*4ÄÁ& ö*‡Ä¶*b„&ãö*7Å'9Î*{ÿ'Î*Áÿ'Î'Æ?þ*ƒÿ*Êö*z÷*ÍÎ*Á? Î' Æ? ö' ÁY'ÍÆ€?#½%û?¦�H&¦ �R&¶*5§¶*6§ ¦ Š@§ o9¦�U&ù¦ �D&ó¶*¤§¶*¥ ß+Ã#bNCWH V@D€M( ))DK0 SA' 'Ÿ( ))DK  ' 'Ÿ0 LO' 'ŸVERIFY IN PROGRESSXXXXXXXX.XX:X EXISTS. OVERWRITE? VERIFY FAILEDVERIFY FAILED AT LSN XXXX]'/l&lÿ+?þ+?¦„� #‹‹0m&jjî§þ+?� Z&Ýþ+?96†dfJ&ù29  ½+q ½+ƒ$ 0îîî† §0î11nÿ+Ëþ+Çoo†<§þ+Ë9ÿ+Ëþ+Ǧ†4§†<§ +Í+Φ+ +Î&÷z+Í&ò ¦%0îîîæÄÁ&„ þ+Ë9+Mä°„  åå;€ 0200O—$—%—&—#L—-† ·$ž·$´$j†0·$YÎ$ZÆ ?Þþÿ%ØÎ$Yÿ%ÚÎ%Ø?× _þ%ئ� '@�;&õ¦� '5�E& ʆ ·$ž ì�A& ʆ ·$ž·$´ Ü�L&Ê Ô�S&Ê Ì� 'ÈÆ ×!_¶$Y·$z„' \J'Æ~#)÷$Y– …'Æ ðÎÿ%ÆÎ$Åÿ%ÈÎ%Å?$Æ~#)Î$Åÿ%ÊÎ$Šÿ%ÌÎ%ÊÆ?Î$r½$%Æ Î$Y¦&¦ '~"¥Ö Å&÷Å&óÆ×" Æ×"? $~#–Ö"Î$Y?$~#–#'½#Å&ä–"J& –!…&¶$f… &Ò|&½#¦–!„&~"“½#õþ$dÿ%ÎÎ$«ÿ%ÐÆÎ%ν&·Oö$j—'×(Þ'ÿ%ÎÎ$³ÿ%ÐÆÎ%ν&·ö$Yþ$dÿ%ÆÎ%Eÿ%ÈÎ%Å?$Æ~#)Îÿ$­Î%Eß'¦+„|‹Î$­?Þ'ß'¦*íþ$­–%Ö$?)ß$þ$­ÿ%ÎÎ$°ÿ%ÐÆÎ%ν&·–!…&~"“¶%E*Î&"ÿ%ÊÎ$·ÿ%ÌÆ Î%Ê?~"“Î00ÿ$·Æ Î$¹?Î%Eß)¦æÄ—(×'Î'†?Þ'ÿ%ÎÎ$½ÿ%ÐÆÎ%ν&·Þ)¦„ü‹—('Þ'ÿ%ÎÎ$Áÿ%ÐÆÎ%ν&·Î$“½$%ö$“Á 'Î$“ö$Ä?Î$¸Æ½'›þ$·Œ57&Þ)¦+*†@Æ�?#Î&’½$% Þ)ß)¦æ+? $~#–~"Î$“½$%–"…'~#-~ ÿ_×+×,Æ Î$Z¦&z+ – …&†—+ |+Œ$b'¦&òÎ$b¦&z, – …&† |,Œ$d'¦&ò|#Î$Zÿ%ÊÎ%Üÿ%ÌÎ%ÊÆ ?~ ûÁ&Æ€†@?#Î&-½$% sÁ'Æ ? i–&'ä–!„',Þ$ÿ%ÎÎ&cÿ%ÐÆÎ%ν&øÞ$ÿ%ÎÎ&hÿ%ÐÆÎ%ν&·Î&F½$%–&—('Þ'ÿ%ÎÎ&Œÿ%ÐÆÎ%ν&øÞ'ÿ%ÎÎ&�ÿ%ÐÆÎ%ν&·Î&j½$%–!…'Ö-Z'½$>?Î$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åå|@|`|€ �‘ TITLE I/O�PACKAGE�FOR�MOTOROLA�MDOS�BY�SOFTWARE�DYNAMICS NAME IOMDOS * --�IRA�BAXTER EDITDATE EQU $0906 /80 * * 0906�FIX�"MDOS�FAILS�TO�EXTEND�FILE�PROPERLY"�BUG * OTHER�NOTES:�IF�YOU�HAVE�2�FILES�OPEN,�BOTH�OF�THE�SAME�NAME, * AND�YOU�EXTEND�ONE�OF�THEM,�WHETHER�THE�EXTENSION�WILL�BE�REMEMBERED * DEPENDS�ON�WHETHER�YOU�CLOSE�THE�EXTENDED�ONE�FIRST�OR�LAST...BEWARE * TO�TEST:  �=LOAD�SDRUN.CM;(SDRUN�FILEID) * WHAT�FOLLOWS�IS�LIFTED�FROM�THE�"MDOS"�MANUAL * ****�SYSTEM�EQUATE�FILE�****�FOR�MDOS * * MDOS�VERSION�2.01�--�SYSTEM�EQUATE�FILE�--�APRIL�29,1977 * * DEFINE�MULTI-SECTOR/SINGLE�SECTOR�I/O * MULTS EQU 0 0�=>�SINGLE�SECTOR,�1=>�MULTIPLE�SECTOR * SKIP2,�SKIP1,�SCALL,�UCALL,�SEQ�MACROS�INTENTIONALLY�LEFT�OUT * SCALL EQU $3F SYSTEM�CALL * * S�Y�S�T�E�MƒF�U�N�C�T�I�O�NƒD�E�F�I�N�I�T�I�O�N�S * * * SET�LOCATION�COUNTER�TO�0�FOR�THE�EQUATE�DEFINITIONS * :SAV SET * SAVE�OLD�LOCATION�COUNT ORG $0 * * * .RESRV RMB 1 .RESERVE�A�DEVICE .RELES RMB 1 .RELEASE�A�DEVICE .OPEN RMB 1 .OPEN�A�FILE .CLOSE RMB 1  .CLOSE�A�FILE .GETRC RMB 1 .READ�A�RECORD .PUTRC RMB 1 .WRITE�A�RECORD .REWND RMB 1 .POSITION�TO�BEGINNING�OF�FILE .GETLS RMB 1 .READ�LOGICAL�SECTOR .PUTLS RMB 1 .WRITE�LOGICAL�SECTOR .KEYIN RMB 1 .CONSOLE�INPUT .DSPLY RMB 1 .CONSOLE�OUTPUT�(TERM�W/�CR) .DSPLX RMB 1 .CONSOLE�OUTPUT�(TERM�W/�EOT) .DSPLZ RMB 1 .CONSOLE�OUTPUT�(TERM�W/�EOT,�NO�CR/LF�AT�END) .CKBRK RMB 1 .CHECK�CONSOLE�FOR�BREAK�KEY .DREAD RMB 1 .EROM�DISK�READ .DWRIT RMB 1 .EROM�DISK�WRITE .MOVE RMB 1 .MOVE�A�STRING .CMPAR RMB 1  .COMPARE�STRINGS .STCHB RMB 1 .STORE�BLANKS .STCHR RMB 1 .STORE�CHARACTERS .ALPHA RMB 1 .CHECK�ALPHABETIC�CHARACTER .NUMD RMB 1 .CHECK�DECIMAL�DIGIT .ADDAM RMB 1 .INCREMENT�MEMORY�(DOUBLE�BYTE)�BY�A .SUBAM RMB 1 .DECREMENT�MEMORY�(DOUBLE�BYTE)�BY�A .MMA RMB 1 .MULTIPLY�(SHIFT�LEFT)�MEMORY�BY�A�(COUNT) .DMA RMB 1 .DIVIDE�(SHIFT�RIGHT)�MEMORY�BY�A�(COUNT) .MDENT RMB 1 .ENTER�MDOS�WITHOUT�RELOADING .LOAD RMB 1 .LOAD�A�FILE�FROM�DISK .DIRSM RMB 1 .DIRECTORY�SEARCH�AND�MODIFY .PFNAM RMB 1 .PROCESS�FILE�NAME .ALUSM RMB 1 .ALLOCATE�USER�MEMORY .CHANG RMB 1 .CHANGE�NAME/ATTRIBUTES .MDERR RMB 1 .MDOS�ERROR�MESSAGE�HANDLER .ALLOC RMB 1 .ALLOCATE�DISK�SPACE .DEALC RMB 1 .RETURN�DISK�SPACE .EWORD RMB 1 .SET�ERROR�STATUS�WORD�FOR�CHAIN .TXBA RMB 1 .TRANSFER�X�TO�B,A .TBAX RMB 1 .TRANSFER�B,A�TO�X .XBAX RMB 1 .EXCHANGE�B,A�AND�X .ADBX RMB 1 .ADD�B�TO�X .ADAX RMB 1 .ADD�A�TO�X .ADBAX RMB 1 .ADD�B,A�TO�X .ADXBA RMB 1 .ADD�X�TO�B,A .SUBX RMB 1 .SUBTRACT�B�FROM�X .SUAX RMB 1 .SUBTRACT�A�FROM�X .SUBAX RMB 1 .SUBTRACT�B,A�FROM�X .SUXBA RMB 1 .SUBTRACT�X�FROM�B,A .CPBAX RMB 1 .COMPARE�B,A�TO�X .ASRX RMB 1 .SHIFT�X�RIGHT�(ARITHMETIC) .ASLX RMB 1 .SHIFT�X�LEFT�(ARITHMETIC/LOGICAL) .PSHX RMB 1 .PUSH�X�ON�STACK .PULX RMB 1 .PULL�X�FROM�STACK .PRINT RMB 1 .PRINT-TERMINATE�WITH�CR .PRINX RMB 1 .PRINT-TERMINATE�WITH�EOT .GETFD RMB 1 .READ�FDR .PUTFD RMB 1 .WRITE�FDR .PUTEF RMB 1 .WRITE�EOF .EREAD RMB 1 .DISK�READ�W/�ERR�RETN .EWRIT RMB 1 .DISK�WRITE�W/�ERR�RETN RMB 1 RMB 1 RMB 1 RMB 1 .BOOT RMB 1 .RELOAD�MDOS ORG :SAV RESTORE�LOACTION�COUNTER * * * A�S�C�I�IƒC�O�N�T�R�O�LƒC�H�A�R�A�C�T�E�R�S * NULL EQU 0 NULL SOH EQU 1 START�OF�HEADING STX EQU 2 START�OF�TEXT ETX EQU 3 END�OF�TEXT EOT EQU 4 END�OF�TEXT ENQ EQU 5 ENQUIRY�(WRU-�WHO�ARE�YOU) ACK EQU 6 ACKNOWLEDGE BEL EQU 7 BELL BS EQU 8 BACKSPACE HT EQU 9 HORIZONTAL�TAB LF EQU $A LINE�FEED VT EQU $B VERTICAL�TAB FF EQU $C FORM�FEED CR EQU $D CARRIAGE�RETURN SO EQU $E SHIFT�OUT SI EQU $F SHIFT�IN DLE EQU $10 DATA�LINK�ESCAPE DC1 EQU $11 DEVICE�CONROL�1 DC2 EQU $12 DEVICE�CONTROL�2 DC3 EQU $13 DEVICE�CONROL�3 DC4 EQU $14 DEVICE�CONTROL�4 NAK EQU $15  NEGATIVE�ACKNOWLEDGE SYN EQU $16 SYNCHRONOUS�IDLE ETB EQU $17 END�OF�TRANSMISSION�BLOCK CAN EQU $18 CANCEL EM EQU $19 END�OF�MEDIUM SUB EQU $1A SUBSTITUTE ESC EQU $1B ESCAPE FS EQU $1C FISLE�SEPERATOR GS EQU $1D GROUP�SEPERATOR RS EQU $1E RECORD�SEPERATOR US EQU $1F UNIT�SEPERATOR SPACE EQU $20 SPACE�(WORD�SEPERATOR) RUBOUT EQU $7F DELETE�(RUBOUT) * * S�P�E�C�I�A�LƒC�H�A�R�A�C�T�E�R„E�Q�U�A�T�E�S * SUFDLM EQU '. SUFFIX�DELIMITER OPTDLM EQU '; OPTIONS�DELIMITER DRVDLM EQU ': LOGICAL�DRIVER�DELIMITER DEVDLM EQU '# GENERIC�DEVICE�NAME�DELIMITER FAMDLM EQU '* FAMILY�NAME/SUFFIX�DELIMITER E$FATL EQU 1##7 FATAL�ERROR�BIT PAGE * * M�D�O�SƒS�E�C�T�O�R„E�Q�U�A�T�E�S * SC$DID EQU 0 DISK�ID�PHYSICAL�SECTOR�NUMBER SC$CAT EQU 1 CLUSTER�ALLOCATION�TABLE�PHYSICAL�SECTOR�NUMBER SC$LOK EQU 2 LOCKOUT�CLUSTER�TABLE�PHYSICAL�SECTOR�NUMBER SC$DIR EQU 3 DIRECTORY�START�PHYSICAL�SECTOR�NUMBER SC$DRE EQU $16 DIRECTORY�END�PHYSICAL�SECTOR�NUMBER SC$BB EQU $17 BOOT�BLOCK�PHYSICAL�SECTOR�NUMBER SC$DOS EQU $18 OPERATING�SYSTEM�PHYSICAL�SECTOR�NUMBER�(RIB�ADDRESS) SC$SIZ EQU 128 SECTOR�SIZE�IN�BYTES SC$TRK EQU $26 NUMBER�OF�SECTORS�/�TRACK SC$CLS EQU 4 NUMBER�OF�SECTORS�/�CLUSTER SC$MAX EQU 2000 MAXIMUM�NUMBER�OF�USABLE�SECTORS DFCLS$ EQU 32 DEFAULT�NUMBER�OF�CLUSTERS * * D�I�S�K„I�D„S�E�C�T�O�R„O�F�F�S�E�T�S * DID$ID EQU 0 OFFSET�TO�DISK�ID�(8�BYTES) DID$VN EQU 8 OFFSET�TO�VERSION�NUMBER�(2�BYTES) DID$RN EQU 10 OFFSET�TO�REVISION�NUMBER�(2�BYTES) DID$DT EQU 12 OFFSET�TO�DATE�(6�BYTES) DID$NM EQU 18 OFFSET�TO�USER�NAME�(20�BYTES) DID$RB EQU 38 OFFSET�TO�RIB�ADDRESS�(20�BYTES) * * D�I�R�E�C�T�O�R�Y„E�N�T�R�Y„O�F�F�S�E�T�S * DIR$NM EQU 0 OFFSET�TO�NAME�(8�BYTES) DIR$SX EQU 8 OFFSET�TO�SUFFIX�(2�BYTES) DIR$RB EQU 10 OFFSET�TO�RIB�ADDRESS DIR$AT EQU 12 OFFSET�TO�ATTRIBUTES�(2�BYTES) DIR$NU EQU 14 OFFSET�TO�NOT�USED�AREA�(2�BYTES) * * R�I�B„B�I�N�A�R�Y„F�I�L�E„O�F�F�S�E�T�S * RIB$LB EQU 117 NUMBER�OF�BYTES�IN�LAST�SECTOR RIB$SL EQU 118 NUMBER�OF�SECTORS�TO�LOAD RIB$LA EQU 120 MEMORY�LOAD�ADDRESS RIB$SA EQU 122 START�EXECUTION�ADDRESS PAGE * U�N�I�F�I�E�D„I�/�O„C�O�N�T�R�O�L„B�L�O�C�K * * O�F�F�S�E�T�S * IOCSTA EQU 0 ERROR�STATUS IOCDTT EQU 1 DATA�TRANSFER�TYPE IOCDBP EQU 2 DATA�BUFFER�POINTER IOCDBS EQU 4 DATA�BUFFER�START�ADDRESS IOCDBE EQU 6 DATA�BUFFER�END�ADDRESS IOCGDW EQU 8 GENERIC�DEVICE�TYPE/CONTROL�DESCRIPTOR�ADDRESS IOCLUN EQU 10 LOGICAL�UNIT�NUMBER IOCNAM EQU 11 FILE�NAME IOCMLS EQU 11 MAXIMUM�REFERENCED�LOGICAL�SECTOR�NUMBER IOCSDW EQU 13 CURRENT�SEGMENT�DESCRIPTOR�WORD IOCSLS EQU 15 1ST�LOGICAL�SECTOR�OF�CURRENT�SEGMENT IOCLSN EQU 17 CURRENT�LOGICAL�SECTOR�NUMBER IOCSUF EQU 19 FILE�NAME�SUFFIX IOCEOF EQU 19 LOGICAL�END�OF�FILE IOCRIB EQU 21 PHYSICAL�DISK�ADDRESS�OF�RIB IOCFDF EQU 23 FILE�DESCRIPTOR�FLAGS IOCDEN EQU 27 DIRECTORY�ENTRY�NUMBER IOCSBP EQU 29 SECTOR�BUFFER�POINTER/INITIAL�ALLOCATION IOCSBS EQU 31 SECTOR�BUFFER�START�ADDRESS IOCSBE EQU 33 SECTOR�BUFFER�END�ADDRESS IOCSBI EQU 35 SECTOR�BUFFER�INTERNAL�PTR IOCBLN EQU IOCSBI+2-IOCSTA IOCB�LENGTH * * U�N�I�F�I�E�D„I�/�O„E�R�R�O�R„S�T�A�T�U�S�E�S * :SAV SET * REMEMBER�THE�CURRENT�LOCATION�COUNTER ORG $0 RESET�IT�TO�ZEROT�TO�USE�THE�SEQ�MACKR * I$NOER RMB 1 NO�ERRORS,�NORMAL�RETURN I$NODV RMB 1 NO�SUCH�DEVICE I$RESV RMB 1 DEVICE�RESERVED�ALREADY I$NORV RMB 1  DEVICE�NOT�RESERVED I$NRDY RMB 1 DEVICE�NOT�READY I$IVDV RMB 1 INVALID�DEVICE I$DUPE RMB 1 DUPLICATE�FILE�NAME I$NONM RMB 1 FILE�NAME�NOT�FOUND I$CLOS RMB 1 FILE�NAME�NOT�OPEN/�OR�FILE�NOT�CLOSED I$EOF RMB 1 END�OF�FILE I$FTYPE RMB 1 INVALID�FILE�TYPE I$DTYP RMB 1 INVALID�DATA�TRANSFER�TYPE I$EOM RMB 1 END�OF�MEDIA I$BUFO RMB 1 BUFFER�OVERFLOW I$CKSM RMB 1 CHECKSUM�ERROR I$WRIT RMB 1 FILE�IS�WRITE�PROTECTED I$DELT RMB 1 FILE�IS�DELETE�PROTECTED I$RANG RMB 1 LOGICAL�SECTOR�NUMBER�OUT�OF�RANGE I$FSPC RMB 1 NO�DISK�FILE�SPACE�AVAILABLE I$DSPC RMB 1 NO�DIRECTORY�SPACE�AVAILABLE I$SSPC RMB 1 NO�SEGMENT�DESCRIPTOR�SPACE�AVAILABLE I$IDEN RMB 1 INVALID�DIR.�ENTRY�NO. I$RIB RMB 1 INVALID�RIB I$DEAL RMB 1 CAN'T�DEALLOCATE�ALL�SPACE I$RECL RMB 1 BINARY�RECORD�LENGTH�TOO�LARGE ORG :SAV RESTORE�THE�LOCATION�COUNTER PAGE * * M�D�O�S„I�N�T�E�R�N�A�L„V�A�R�I�A�B�L�E�S * * A�N�D„L�O�C�A�T�I�O�N„E�Q�U�A�T�E�S * MDOS$ EQU $100 START�OF�MDOS�ASECT CBUFL$ EQU 80 COMMAND�BUFFER�LENGTH CBUFF$ EQU MDOS$-CBUFL$-2 COMMAND�BUFFER�LOCATION CBUFP$ EQU CBUFF$+CBUFL$ COMMAND�BUFFER�SCAN�POINTER VERS$$ EQU MDOS$ VERSION�# REVS$$ EQU VERS$$+2 REVISION�# KYI$SV EQU REVS$$+2 SAVE�AREA�FOR�KEYIN$�VECTOR ENDOS$ EQU KYI$SV+2 END�OF�MDOS ENDUS$ EQU ENDOS$+2 END�OF�USER�PROGRAM�AREA ENDSY$ EQU ENDUS$+2 END�OF�SYSTEM�(MDOS)�RAN RIBBA$ EQU ENDSY$+4 RIB�BUFFER�ADDRESS ENDRV$ EQU RIBBA$+2 END�OF�MDOS�ROM�VARIABLES GDBA$ EQU ENDRV$+2 GENERIC�DEVICE�TABLE�ADDRESS SYERR$ EQU GDBA$+2 SYSTEM�ERROR�STATUS�WORD SWI$SV EQU SYERR$+2 SWI�VECTOR�SAVE�AREA SWI$UV EQU SWI$SV+2 SWI�USER�VECTOR IRQ$UV EQU SWI$UV+2 IRQ�USER�VECTOR IRQ$SV EQU IRQ$UV+2 IRQ�VECTOR�SAVE�AREA CHFLG$ EQU IRQ$SV+2 CHAIN�FUNCTION�FLAG�WORD SYIOCB EQU CHFLG$+2 CHAIN�FUNCTION�FLAG�WORD SYPOCB EQU SYIOCB+IOCBLN SYSTEM�PRINTER�IOCB SYEOCB EQU SYPOCB+IOCBLN ERR�MSG�FILE PAGE * * L�O�G�I�C�A�L„U�N�I�T„N�U�M�B�E�R‚--ƒB�I�T„D�E�F�I�N�I�T�I�O�N�S * LU$RES EQU %01000000 IOCB�RESERVED�FLAG * * I�O�C�D�T�T‚--‚B�I�TƒD�E�F�I�N�I�T�I�O�N�S * DT$OPP EQU %00000000 OPEN�UPDATE/INPUT DT$OPI EQU %00000001 OPEN�INPUT�MODE DT$OPO EQU %00000010 OPEN�OUTPUT�MODE DT$OPU EQU %00000011 OPEN�UPDATE�MODE DT$NFF EQU %00000100 NON-FILE�FORMAT�I/O�FLAG DT$TRU EQU %00001000 TRUNCATE�FLAG DT$CLS EQU %00010000 FILE�OPEN/CLOSE�FLAG DT$SIO EQU %00100000 SECTOR�I/O�FLAG DT$OUT EQU %01000000 OUTPUT�TRANSFER�TYPE DT$INP EQU %10000000 INPUT�TRANSFER�TYPE * * I�O�C�F�D�F‚--‚B�I�T„D�E�F�I�N�I�T�I�O�N�S * FD$FMU EQU %00000000 USER�DEFINED�FORMAT�(SECTOR�I/O�ONLY) FD$FMD EQU %00000001 DEFAULT�OBJECT�REC'D�FORMAT�(DEVICE�DEPENDENT) FD$FML EQU %00000010 BINARY�LOAD�FORMAT�--�ABSOLUTE�MEMORY�IMAGE FD$FMB EQU %00000011 BINARY�RECORD�FORMAT�--�RASM�OUTPUT,�RLOAD�INPUT FD$FMR EQU %00000100 BINARY�LOAD�FORMAT�--�RELOCATABLE�MEMORY�IMAGE FD$FMA EQU %00000101 ASCII�RECORD�FORMAT�--�INCLUDES�EXORCISOR�LOAD�FORMAT FD$FMC EQU %00000111 ASCII-CONVERTED-BINARY�RECORD�FORMAT FD$CMP EQU %00001000 SPACE�COMPRESSION�FLAG FD$CON EQU %00010000 CONTIGUOUS�ALLOCATION�FLAG FD$SYS EQU %00100000 SYSTEM�FILE�ATTRIBUTE FD$DEL EQU %01000000 DELETE�PROTECTION�ATTRIBUTE FD$WRT EQU %10000000 WRITE�PROTECTION�ATTRIBUTE * * U�N�I�F�I�E�D„I�/�O„C�O�N�T�R�O�L„D�E�S�C�R�I�P�T�O�R * * B�L�O�C�K„O�F�F�S�E�T�S * CDBIOC EQU 0 ADDRESS�OF�IOCB CDBSDA EQU 2 SOFTWARE�DRIVER�ADDRESS CDBHAD EQU 4 HARDWARE�  ADDRESS CDBDDF EQU 6 DEVICE�DESCRIPTOR�FLAGS CDBVDT EQU 7 VALID�DATA�TYPE CDBDDA EQU 8 DEVICE�DEPENDENT�AREA CDBWST EQU 10 WORKING�STORAGE * * C�D�B�D�D�F‚--‚B�I�T„D�E�F�I�N�I�T�I�O�N�S * DD$FMC EQU %00000001 ASCII-CONVERTED-BINARY�IS�DEFAULT�OBJECT�RECORD DD$LOG EQU %00000010 LOGICAL�SECTOR�I/O�FLAG DD$CNS EQU %00000100 CONSOLE�FLAG DD$RWD EQU %00001000 REWIND�FLAG DD$OCF EQU %00010000 OPEN/CLOSE�FLAG DD$INP EQU %00100000 INPUT�DEVICE�FLAG DD$OUT EQU %01000000 OUTPUT�DEVICE�FLAG DD$RES EQU %10000000 RESERVABLE�DEVICE�FLAG * * C�D�B�V�D�T‚--ƒB�I�TƒD�E�F�I�N�I�T�I�O�N�S * VD$BIN EQU %00000100 BINARY�OBJECT�FLAG VD$GDB EQU %00001000 TEMP�GDB�POINTER�FLAG VD$SDA EQU %00010000 TEMP�SDA�POINTER�FLAG VD$NFF EQU %10000000 NON-FILE�FORMAT�FLAG * * D�E�V�I�C�E„D�R�I�V�E�R„E�N�T�R�Y„O�F�F�S�E�T�S * DV$ON EQU 0 DEVICE�ON�OFFSET DV$OFF EQU 3 DEVICE�OFF�OFFSET DV$INT EQU 6 DEVICE�INITIALIZATION�OFFSET DV$TRM EQU 9 DEVICE�TERMINATION�OFFSET DV$IO EQU 12 DEVICE�CHARACTER�INPUT/OUTPUT�OFFSET PAGE * * D�I�S�K„E�R�O�M„E�Q�U�A�T�E�S * CURDRV EQU 0 CURRENT�DRIVE�NUMBER STRSCT EQU 1 STARTING�PHYSICAL�SECTOR�NUMBER NUMSCT EQU 3 NUMBER�OF�SECTORS�TO�OPERATE�UPON LSCTLN EQU 5 NUMBERR�OF�BYTES�TO�BE�READ�FROM�LAST�SECTOR CURADR EQU 6 MEMORY�ADDRESS�FOR�DISK�TRANSFER FDSTAT EQU 8 DISK�TRANSFER�STATUS SCTCNT EQU 11 SECTOR�COUNT�USED�IN�DETERMINING�ERRORS PGMDRV EQU $1D DRIVE�FROM�WHICH�LAST�PROGRAM�WAS�LOADED PGMPSN EQU $1E PHYSICAL�SECTOR�NUMBER�OF�RIB�OF�LAST�LOAD�PROGRAM * * E�R�O�M„E�N�T�R�Y„P�O�I�N�T�S * OSLOAD EQU $E800 BOOTSTRAP�THE�OPERATING�SYSTEM FDINIT EQU $E822 INITIALIZE�THE�DISK'S�PIA�AND�SSDA CHKERR EQU $E853 CHECK�AND�PRINT�ERROR�FROM�FDSTAT PRNTER EQU $E85A PRINT�ERROR�FROM�FDSTAT READSC EQU $E869 READ�SECTOR(S) READPS EQU $E868 READ�PARTIAL�SECTOR RDCRC EQU $E86F READ�AND�CHECK�FOR�CRC RWTEST EQU $E872 READ/WRITE�TEST RESTOR EQU $E875 MOVE�HEAD�TO�TRACK�0 SEEK EQU $E878 POSITION�HEAD�TO�TRACK�OF�"STRSCT" WRTEST EQU $E87B WRITE�TEST WRDDAM EQU $E87E WRITE�DELETED�DATA�MARK WRVERF EQU $E881 WRITE�AND�VERIFY�CRC WRITSC EQU $E884 WRITE�SECTOR(S) * * E�R�O�M„E�R�R�O�R„E�Q�U�A�T�E�S * ER$CRC EQU '1 DATA�CRC�ERROR ER$WRT EQU '2 WRITE�PROTECTED�DISK ER$RDY EQU '3 DISK�NOT�READY ER$MRK EQU '4 DELETED�DATA�MARK�ENCOUNTERED ER$TIM EQU '5 TIMEOUT ER$DAD EQU '6 INVALID�DISK�ADDRESS ER$SEK EQU '7 SEEK�ERROR ER$DMA EQU '8 DATA�ADDRESS�MARK�ERROR ER$ACR EQU '9 ADDRESS�MARK�CRC�ERROR * * M�I�S�C�E�L�L�A�N�E�O�U�S„E�R�O�M„E�Q�U�A�T�E�S * RETRY$ EQU 5 RETRY�COUNT�FOR�DISK�READ/WRITE�ERRORS * * L�I�N�E„P�R�I�N�T�E�R„E�R�O�M„E�Q�U�A�T�E�S * LPINIT EQU $EBC0 INIT�PRINTER�PIA LIST EQU $EBCC PRINT�CONTENTS�OF�'A' LDATA EQU $EBE4 PRINT�STRING,�CR/LF LDATA1 EQU $EBF2 PRINT�STRING,�NO�CR/LF * * E�X�B�U�GƒE�Q�U�A�T�E�S„F�O�R„M�D�O�S * INCHNP EQU $F015 INPUT�CHARACTER�(NO�PARITY) OUTCH EQU $F018 OUTPUT�ONE�CHARACTER PCRLF EQU $F021 PRINT�LF/CR PDATA EQU $F024 PRINT�STRING SBIT$ EQU $FCFD BIT�7�INDICATES�IRQ�OCCURRED�(IF�CLEARED) BRKPT$ EQU $FF1F MAID'S�BREAKPOINT�TABLE�(8�FDB'S) BKPIN$ EQU $FF4F EXBUG�BREAKPOINTS�IN�MEMORY�(FROM�CONTINUE�CMD) AECHO EQU $FF53 INPUT�CHARACTER�ECHO�FLAG�(0=>ECHO) IRQ$SVC EQU $FFF8 IRQ�VECTOR SWI$VC EQU $FFFA SWI�VECTOR NMI$VC EQU $FFFC NMI�VECTOR XSTAK$ EQU $FF8A EXBUG�STACK MAID$ EQU $F0F3 MAID�ENTRY�POINT XREG$P E QU $FF16 MAID�P-REG XREG$X EQU $FF18 MAID�X-REG XREG$A EQU $FF1A MAID�A-REG XREG$B EQU $FF1B MAID�B-REG XREG$C EQU $FF1C MAID�C-REG XREG$S EQU $FF1D MAID�S-REG BRKPE$ EQU $FF63 END�OF�MAID�BREAKPOINT�TABLE CNACI$ EQU $FCF4 CONSOLE�ACIA * * SPECIAL�MACRO�FOR�THE�CENTRONIX�PRINTERS�TO�PRINT�TITLES * *TITLE MACR * TTL \0 * ENDM PAGE SOFTWARE�DYNAMICS'�I/O�PACKAGE�FOR�MDOS�2.01 * * SUBROUTINE�DEFINITIONS�TAKEN�FROM�SD�COMPILER�BASIC�MANUAL * IFUND CODE CODE EQU $2000 DEFAULT�SD�SOFTWARE�ORIGIN�UNDER�MDOS FIN MDOSERRTAG EQU $FF00 ADDITIVE�TAG�TO�DIFFERENTIATE�SD�ERRS�FROM�MDOS�ERRS BUFFERSIZE EQU SC$SIZ SIZE�OF�SECTOR�IN�BYTES IFUND NCHANNELS NCHANNELS EQU 8 NUMBER�OF�I/O�CHANNELS�SUPPORTED FIN NSPCHANNELS EQU 2 #�OF�SPECIAL�PURPOSE�IOCBS�(FOR�RENAME�AND�DELETE) IOCBSP1N EQU NCHANNELS "CHANNEL"�NUMBER�OF�1ST�SPECIAL�PURPOSE�IOCB IOCBSP2N EQU IOCBSP1N+1 "CHANNEL"�NUMBER�OF�2ND�SPECIAL�PURPOSE�IOCB ESTIOPKSIZE EQU $B00 ESTIMATED�I/O�PACKAGE�SIZE EST:RUNST EQU $C0 ESTIMATED�SIZE�OF�RUNSTART�CODE OUCH EQU 25 ATTEMPT�TO�POKE�I/O�OR�RUNTIME�PACKAGE * * �I�O�C�B„E�X�T�E�N�S�I�O�N�SƒF�O�RƒI�/�OƒP�A�C�K�A�G�E * IOSDCOL EQU IOCBLN COLUMN�COUNTER�FOR�THIS�IOCB IOSDEOF EQU IOSDCOL+1 END�OF�FILE�HIT�FLAG IOSDWSPC EQU IOSDEOF+1 COMPRESSED�SPACE�WRITE�COUNTER IOSDRSPC EQU IOSDWSPC+1 COMPRESSED�SPACE�READ�COUNTER IOSDPTR EQU IOSDRSPC+1 POINTER�TO�NEXT�BUFFER�BYTE IOSDMF EQU IOSDPTR+2 "THIS�BUFFER�MODIFIED"�FLAG IOCBXSIZE EQU IOSDMF+1 SIZE�OF�EXTENDED�IOCB'S ****************************************************************************** SIZEIOPACK SET ESTIOPKSIZE+(NCHANNELS+NSPCHANNELS)*(IOCBXSIZE+2) SIZEIOPACK SET SIZEIOPACK+(NCHANNELS+NSPCHANNELS)*BUFFERSIZE SIZEIOPACK SET SIZEIOPACK+$10 FOR�"JMP�RUNSTART",�EXBUG�STACK�AT�END IFUND MEMSIZE MEMSIZE EQU 32 FIN K EQU 1024 =�#�BYTES�IN�"1K"�OF�MEMORY IOPKGBASE EQU MEMSIZE*K-SIZEIOPACK PAGE * IFUND VSDEPTH VSDEPTH EQU 50 VALUE�STACK�DEPTH FIN IFUND FNDEPTH FNDEPTH EQU 20 MAX�NUMBER�OF�NESTED�FOR-NEXT�LOOPS FIN IFUND GSBDEPTH GSBDEPTH EQU 10 GOSUB/RETURN�STACK�SIZE FIN IFUND CATSIZ CATSIZ EQU 132 MAX�SIZE�OF�CONCATENATED�STRINGS FIN STKESZ EQU 6 6�BYTES�PER�VALUE�(MACHINE�STACK�ENTRY FSTKESZ EQU 16 16�BYTES�PER�NEXTED�FOR-NEXT�LOOP GSTKESZ EQU 4 2�BYTE�ENTRIES�FOR�THE�GOSUB�STACK IFUND RTPVERSION RTPVERSION EQU $13 FIN PAGE ---�IO�PACKAGE�ENTRY�POINTS�--- ENTRYPOINT�EQU CODE PROGRAM�STARTUP�ENTRY�POINT IOERROR EQU ENTRYPOINT+3 ENTRY�POINT�IN�RTP�FOR�IO�ERROR�HANDLING ORG ENTRYPOINT+6 FDB IOPKGBASE JMP OPEN JMP CLOSE JMP CREATE JMP DELETE JMP RENAME JMP CHAIN JMP RASCII JMP RBIN JMP WASCII JMP WBIN JMP POSITION JMP EXIT JMP EOF JMP GETCOL JMP RESET JMP DATE JMP TIME FDB STACK FDB STACKM STACK�MAX FDB SWBLOCK JMP DEBUG DEBUG�ENTRY�POINT�(BASIC) DBGRET RTS DEBUG�RETURN�POINT JMP ERROR ERROR�PROCESSOR�ENTRY�POINT�(BASIC) JMP LINE ESCAPE�ENTRY�POINT�(BASIC) FDB CATBUF CATENATION�BUFFER�(BASIC) FDB CATSIZ CATINATION�BUFFER�MAX�SIZE�(BASIC) FDB FSTACK FOR-STACK�(BASIC) FCB FNDEPTH FOR-STACK�MAX�ENTRY�COUNT�(BASIC) FDB GOSUBSTK FDB GOSUBMAX DEBUG EQU MAID$ MDOS�DEBUGGER PAGE ---�RUNTIME�INITIALIZATION�ROUTINE�--- ORG IOPKGBASE-EST:RUNST ACTUAL:RUNST SET * * *�RUNSTART�-�START�HERE�FOR�RUNTIME�PACKAGE * THIS�CODE�READS�FILE�NAME�IN�COMMAND�BUFFER�INTO  * SETS�SWITCHES�(IF�ANY)�AND�THEN * CHAINS�TO�THE�PROGRAM�SPECIFIED. * *�INPUT�LINE�FORMAT: * * RUN�FILENAME[;[]] * RUNSTART EQU * ORG MEMSIZE*K-$10 PUT�JUMP�TO�HERE�AS�LAST�$10�BYTES�OF�MEMORY JMP RUNSTART ORG RUNSTART LDS #STACK WE�BETTER�USE�SOMETHING�REASONABLE LDX #CBUFF$ COPY�COMMAND�LINE�TO�CATBUF�FOR�SAFEKEEPING STX MOVEPACKET (FROM�ADDRESS) LDX #CATBUF+10 (TO�ADDRESS;�"10"�IS�FOR�"�#CN;"... STX MOVEPACKET+2 �THAT�IS�MOVED�INTO�CATBUF�BY�RESET) LDAB #CATSIZ+4-10-1 #�BYTES�TO�COPY LDX #MOVEPACKET DON'T�FORGET�THIS,�OR�THINGS�WILL�GO�TO�HELL SCALL,.MOVE MOVE�IT,�BUDDY! LDX MOVEPACKET+2 PLACE�TO�MOVE�NEXT�BYTE�TO LDAA #CR JUST�IN�CASE�WE�CHOPPED�THE�LINE�OFF STAA 0,X (JES'�DON'�TRUS�NOBODDA�NOHOW) JSR CODE WAKE�UP�THE�RUNTIME�PACKAGE... FCB RTPVERSION (VERSION�#)�JUST�IN�CASE�CHAIN�GETS�AN�ERROR FCB $81 (START�INLINE�EXECUTION) LDAB #26 GET�SIZE�OF�WS�BUFF�TO�CLEAR�IT LDX #SWBLOCK+4 GET�STARTING�ADDR SWCLR CLR 0,X CLEAR�ALL�SWITCHES INX DECB BNE SWCLR *�NOW,�GET�FILE�NAME LDX #CATBUF+10 POINTER�TO�COMMAND�BUFFER RUNSKIP LDAA 0,X SCAN�UNTIL�WE�HIT�"RUN"�COMMAND INX CMPA #SPACE BEQ RUNSKIP RUNSCAN EQU * LDAA 0,X SKIP�OVER�"RUN"�WORD INX CMPA #CR HIT�END�OF�LINE�? BEQ RUNPARSE B/�YES,�GO�CAUSE�AN�ERROR CMPA #SPACE FOUND�SPACE�THAT�TERMINATES�"RUN"�? BNE RUNSCAN B/�NO,�KEEP�LOOKING RUNPARSE DEX BACK�POINTER�UP�TO�CHARACTER�THAT�TERMINATED�SCAN STX STRING THIS�IS�WHERE�FILENAME�STARTS STX NAMEP SET�UP�FILENAME�SCAN�POINTER CLR COUNT =�LENGTH�OF�FILENAME NRUNC LDX NAMEP GET�NEXT�FILENAME�BYTE LDAA 0,X INX STX NAMEP CMPA #CR END�OF�LINE�? BEQ GOTNAME IF�SO,�GOT�NAME CMPA #'; SWITCHES�COMING�UP? BEQ GETSW IF�SO,�GET�THEM INC COUNT OF�FILE�NAME�LENGTH BRA NRUNC * GETSW LDX NAMEP GET�A�SWITCH�BYTE LDAA 0,X INX STX NAMEP CMPA #CR DONE? BEQ GOTNAME IF�SO,�CHAIN CMPA #'Z LEGAL�SWITCH? BGT SWERR IF�NOT,�ERROR SUBA #'A-1 BLE SWERR ERR�IFEST:RUNST ?RUNTIME�INITIALIZATION�ROUTINE�TOO�BIG�FOR�ESTIMATED�SIZE? FIN PAGE ---�EXTERNALLY�RECOGNIZED�SPACE�--- * * SET�THE�I/O�PACKAGE�ADDRESS * ORG IOPKGBASE FDB EDITDATE PUT�EDIT�DATE�AS�FIRST�BYTE * * THIS�IS�THE�CATENATION�BUFFER * CATBUF RMB CATSIZ+4 4�OVERHEAD�BYTES * * THIS�IS�THE�FOR-NEXT�STACK * RMB FNDEPTH*FSTKESZ FSTACK EQU *-1 POINTS�TO�THE�LAST�BYTE�OF�FOR-NEXT�STACK * * THIS�IS�THE�GOSUB�STACK * GOSUBMAX RMB GSBDEPTH*GSTKESZ GOSUBSTK RMB 1 FOR�THOSE�TEMPTED�TO�USE�'LDS�GOSUBSTK' * * THIS�IS�THE�SWITCH�BLOCK�STRING * FIRST�TWO�BYTES�ARE�MAX�LENGTH * NEXT�TWO�BYTES�ARE�CUR�LENGTH * SWBLOCK FDB 26 FDB 26 RMB 26 * * THIS�IS�THE�VALUE�STACK * RMB 25 SLOP�FOR�DEBUGGER�AND�INTERRUPTS STACKM RMB VSDEPTH*STKESZ STACK RMB 1 FOR�PEOPLE�WHO�USE�'LDS�STACK' * PAGE  ; * * LINE�--�CHECK�SYSTEM�CONSOLE�ACIA�FOR�LINE�CONTROL�FLAGS * LINE CLRA BE�OPTIMISTIC,�NOBODY�HIT�A�KEY LDAB CNACI$ GET�ACIA�STATUS BITB #%10000 BREAK�KEY�HIT�? BNE LINEABORT B/�YES,�DO�ABORT RORB DID�DATA�ARRIVE�? BCC LINERTS NO,�JUST�EXIT LDAB CNACI$+1 YES,�GET�THE�DATA ANDB #$7F TO�DUMP�PARITY CMPB #$2 ^B�? BEQ LINEB CMPB #$7 ^G�? BEQ LINEG CMPB #$13 ^S�? BEQ LINES CMPB #$14 ^T�? BEQ LINET CMPB #ESC BEQ LINEABORT LINERTS RTS LINEB LDAA #%100000 RTS LINEG LDAA #%1000 RTS LINES LDAA #%10000 RTS LINET LDAA #%1000000 RTS LINEABORT LDAA #%10000000 RTS PAGE * OPEN�--�X�IS�FILE�NAME * A�IS�LENGTH * B�IS�CHANNEL�# OPEN JSR FINDIOCB COMPUTE�POINTER�TO�IOCB�FOR�CHANNEL JSR CHECKCLOSED IT�BETTER�BE... JSR PARSENAME AND�COPY�INTO�THE�IOCB LDX IOCBPTR FOR�CHANNEL SCALL,.RESRV RESERVE�THE�DEVICE�SPECIFIED JSR CHECKIOCBSTATUS AND�BITCH�IF�SOMETHING�IS�WRONG! LDX IOCGDW,X GET�POINTER�TO�DEVICE�DRIVER LDAA CDBDDF,X GET�DEVICE�DESCRIPTOR�FLAGS BITA #DD$LOG LOGICAL�SECTOR�I/O�DEVICE�? BNE OPENUPDATE B/�YES,�OPEN�FOR�UPDATE BITA #DD$INP AN�INPUT�DEVICE�? BNE OPENINPUT B/�YES,�OK�TO�OPEN JMP ERR:CANTOPENFILE NO,�CAN'T�OPEN�A�NON-INPUT�DEVICE OPENINPUT EQU * LDAA #DT$NFF!DT$OPI!DT$CLS OPEN�DEVICE�FOR�INPUT�ONLY BRA OPEN1 AS�A�NON-FILE�INPUT�DEVICE OPENUPDATE EQU * LDAA #DT$SIO!DT$OPP!DT$CLS OPEN�DEVICE�IN�FILE�MODE,�FOR�UPDATE�IN�SECTOR�MODE OPEN1 LDX IOCBPTR RESTORE�POINTER�TO�I/O�CONTROL�BLOCK STAA IOCDTT,X SET�THE�TRANSFER/OPEN�TYPE LDAA #FD$FMA  SELECT�ASCII�RECORD�FORMAT STAA IOCFDF,X CLR IOCFDF+1,X OR�MDOS�WON'T�LIKE�ME,�EVEN�THOUGH�IT�DOESN'T�CARE LDAA IOCDBS,X SET�UP�"IOCDBE"�TO�DELIMIT�BUFFER LDAB IOCDBS+1,X ADDB #(BUFFERSIZE-1)&$FF (IOCDBE�POINTS�TO�LAST�BYTE�OF�BUFFER) ADCA #(BUFFERSIZE-1)/256 STAA IOCDBE,X STAB IOCDBE+1,X CLR IOCSBP,X USE�DEFAULT�ALLOCATION... CLR IOCSBP+1,X ON�NEWLY�CREATED�FILES SCALL,.OPEN TO�QUOTE,�"SESAME.." JSR CHECKIOCBSTATUS AND�BITCH�IF�WE�GOT�AN�ERROR CLR IOSDPTR,X FLAG�"NO�SECTOR�READ�IN�YET" CLR IOSDPTR+1,X CLR IOSDMF,X FLAG�"SECTOR�NOT�MODIFIED" CLR IOSDRSPC,X ZERO�THE�COMPRESSED�SPACE�READ�COUNT CLR IOSDWSPC,X ZERO�THE�COMPRESSED�SPACES�WRITTEN�COUNT LDAA #1 SET�#�SECTORS�TO�INITIALLY�ALLOCATE�IF�NEW�DISK�FILE STAA IOCSBP+1,X CLR IOCSBP,X LDAA IOCDBS,X NOW�SET�UP�IOCDBE... LDAB IOCDBS+1,X SO�IF�FILE�IS�IMMEDIATELY�CLOSED... SUBB #1 AND�IT�IS�AN�OUTPUT�DEVICE... SBCA #0 NO�DATA�IS�WRITTEN�OUT STAA IOCDBE,X (I.E.,�IOCDBE=IOCDBS-1) STAB IOCDBE+1,X LDAA IOCEOF,X SET�MAX�LOGICAL�SECTOR�TO�EOF LDAB IOCEOF+1,X TURKEY�MDOS�TRUNCATE�FLAG!! STAA IOCMLS,X STAB IOCMLS+1,X RTS OK,�LET'S�BOOGIE�OUT�OF�HERE! PAGE * * CREATE�--�X�IS�A�FILE�NAME * ‚A�IS�LENGTH�OF�NAME * ‚B�IS�CHANNEL�# * CREATE JSR FINDIOCB FOR�THIS�CHANNEL�NUMBER JSR CHECKCLOSED IT�BETTER�BE! JSR PARSENAME SELECT�DEFAULTS,�ETC. LDX IOCBPTR FOR�THIS�IOCB SCALL,.RESRV RESERVE�THE�DEVICE�DRIVER JSR CHECKIOCBSTATUS AND�BITCH�IF�SOMETHING�WENT�WRONG LDX IOCGDW,X LOOK�AT�DEVICE�DRIVER LDAA CDBDDF,X GET�DEVICE�DESCRIPTOR�FLAGS BITA #DD$LOG LOGICAL�SECTOR�I/O�DEVICE�? BNE CREATEUPDATE B/�YES BITA #DD$OUT OUTPUT�I/O�DEVICE�? BNE CREATEOUTPUT B/�YES JMP ERR:CANTCREATEFILE CREATEOUTPUT EQU * LDAA #DT$NFF!DT$OPO!DT$CLS OPEN�FOR�OUTPUT�ONLY   BRA CREATE1 GO�TRY�IT.. CREATEUPDATE EQU * LDAA #DT$SIO!DT$OPU!DT$CLS OPEN�FOR�UPDATE�ON�DISK CREATE1 EQU * BSR OPEN1 GO�OPEN�THE�FILE LDAA #$FF AND�SET�IOCMLS�TO�-1 STAA IOCMLS,X STAA IOCMLS+1,X RTS PAGE * * CLOSE�--�(B)�CONTAINS�CHANNEL�NUMBER * CLOSE JSR FINDIOCB FOR�DESIRED�CHANNEL JSR CHECKOPEN I�HOPE,�I�HOPE... LDAA IOCDTT,X GET�OPEN�MODE BITA #DT$SIO SECTOR�I/O�MODE�(I.E.,�DISK?) BEQ CLOSE1 B/�NO,�JUST�GO�CLOSE�THE�FILE JSR DUMPCOMPRESSEDSPACES GET�RID�OF�ANY�COMPRESSED�SPACES�WRITTEN�TO�FILE JSR DUMPSECTOR YES,�GET�RID�OF�SECTOR�IF�MODIFIED LDAA IOCDTT,X YES,�SET�"TRUNCATE"�FLAG ORAA #DT$TRU STAA IOCDTT,X THEN�CLOSE�FILE CLOSE1 SCALL,.CLOSE NOW�CLOSE�THE�FILE JSR CHECKIOCBSTATUS AND�BITCH�IF�A�PROBLEM�OCCURRED SCALL,.RELES RELEASE�THE�DEVICE�DRIVER JSR CHECKIOCBSTATUS YOU�GUESS.. RTS PAGE * * POSITION�--�(X)�POINTS�TO�4�BYTES�OF�POSITIONING�INFORMATION * (B)�SELECTS�CHANNEL�NUMBER * POSITION EQU * JSR FINDIOCB FOR�THIS�CHANNEL JSR CHECKOPEN IF�NOT,�DIE LDAA IOCDTT,X LOOK�AT�I/O�TRANSFER�TYPE BITA #DT$SIO DISK�I/O�? BEQ J1ERR:ILLDVOP B/�NO,�ILLEGAL�DEVICE�OPERATION JSR DUMPCOMPRESSEDSPACES IF�ANY�WERE�OUTPUT JSR DUMPSECTOR YES,�I�THINK�WE�CAN�DO�IT.. LDX STRING GET�POINTER�TO�DESIRED�BYTE�POSITION LDAA 0,X TOP�8�BITS�MUST�BE�ZERO! BNE J1ERR:POSITIONERR B/�CAN'T�POSITION�TO�THERE! LDAA 1,X COMPUTE�DESIRED�LOGICAL�SECTOR�# BMI J1ERR:POSITIONERR (MSB�WILL�BE�LOST,�BETTER�NOT�BE�ZERO!) LDAB 2,X ASL 3,X LEAVING�BYTE�DISPLACEMENT�DOUBLED ROLB (A,B):=DESIRED�LSN ROLA BMI J1ERR:POSITIONERR B/�>�32767�SECTORS�OF�128�BYTES!!? LDX IOCBPTR SET�UP�FOR�READ STAA IOCLSN,X STAB IOCLSN+1,X JSR READSECTOR GO�GET�THE�DESIRED�SECTOR LDX STRING GET�DISPLACEMENT�INTO�SECTOR LDAB 3,X LSRB TO�UNDO�THE�DOUBLE�WE�DID�PREVIOUSLY CLRA (A,B)=16�BIT�DISPLACEMENT�INTO�SECTOR LDX IOCBPTR GRAB�POINTER�TO�IOCB�AGAIN ADDB IOCSBS+1,X COMPUTE�POINTER�TO�BYTE ADCA IOCSBS,X STAA IOSDPTR,X UPDATE�SECTOR�SCAN�POINTER STAB IOSDPTR+1,X CLR IOSDCOL,X ZAP�THE�COLUMN�COUNTER CLR IOSDRSPC,X AND�THE�COMPRESSED�SPACE�READ�COUNT RTS AND�EXIT J1ERR:ILLDVOP EQU * JMP ERR:ILLDVOP J1ERR:POSITIONERR EQU * JMP ERR:POSITIONERR PAGE * RASCII�--�READ�ASCII�BYTE�FROM�FILE * B�CONTAINS�CHANNEL�NUMBER * RASCII JSR FINDIOCB HO�HUM... JSR CHECKOPEN CAN'T�READ�FROM�A�CLOSED�ONE,�YA�KNOW JSR DUMPCOMPRESSEDSPACES SIGH... INC IOSDCOL,X ASSUME�WE'LL�READ�A�PRINTING�CHARACTER LDAA IOSDEOF,X HIT�EOF�RECENTLY�? BNE RASCII5 B/�HIT�EOF�RECENTLY LDAA IOSDRSPC,X STILL�EXPANDING�A�COMPRESSED�SSPACE�? BNE RASCII3 B/�YES,�OUTPUT�ANOTHER�SPACE RASCII1 JSR RBYTE NO,�GET�NEXT�BYTE�FROM�FILE BCC RASCII4 B/�OOPS,�WE�HIT�EOF�AND�HURT�OUR�WIDDLE�NOSEY TSTA STRIP�NULLS BEQ RASCII1 **POOF** BMI RASCII2 (B/�COMPRESSED�SPACES�ENCOUNTERED) CMPA #LF STRIP�LF'S BEQ RASCII1 **POOF** CMPA #RUBOUT THESE�TOO,�GET�THE�HEAVE BEQ RASCII1 CMPA #DC4 AND�ALL�THE�DEVICE�CONTROLS BHI RASCIICK B/�NOT�A�DEVICE�CONTROL,�RETURN�IT CMPA #DC1-1 BHI RASCII1 B/�ITS�DC1,DC2,DC3�OR�DC4...�BYE! RASCIICK EQU * CMPA #SPACE-1 PRINTING�CHARACTER�? BLS RASCII6 NO,�ZAP�THE�COLUMN�COUNT�ON�WAY�OUT RTS RASCII2 ANDA #$7F MASK�OFF�THE�"COMPRESSED�SPACES"�FLAG STAA IOSDRSPC,X STORE�IN�IOCB RASCII3 DEC IOSDRS PC,X REMEMBER�NUMBER�OF�SPACES�EXPANDED�TO LDAA #$20 GET�A�SPACE�CODE�LIKE�A�GOOD�LITTLE�BOY RTS AND�GO�HOME RASCII4 BSR SETEOFHIT REMEMBER�THAT�WE�HIT�EOF RASCII5 LDAA #CR RETURN�THIS�WHEN�WE�HIT�EOF RASCII6 CLR IOSDCOL,X RESET�COLUMN�COUNT�TO�ZERO RTS PAGE * * RBIN�--‚READ�BINARY * (B)�CONTAINS�CHANNEL�NUMBER * RBIN JSR FINDIOCB OR�WE�CAN'T�DO�ANYTHING JSR CHECKOPEN CLR IOSDRSPC,X ZAP�THE�EXPANDED�SPACE�COUNTER JSR DUMPCOMPRESSEDSPACES IN�CASE�SOMEBODY�JUST�FINISHED�WRITING�THEM LDAA IOSDEOF,X EOF�HIT�ALREADY�? BNE RBIN1 B/�YES,�JUST�QUIT JSR RBYTE NO,�READ�A�BYTE�FROM�THE�FILE BCC RBIN1 B/�EOF�HIT,�NO�MORE�DATA�IN�FILE RTS RETURN�WITH�DATA�BYTE RBIN1 BSR SETEOFHIT REMEMBER�WHAHOPPEN CLRA RETURN�A�ZERO RTS * * SETEOF�--�REMEMBERS�THAT�EOF�GOT�HIT * SETEOFHIT EQU * LDAA #1 "TRUE" STAA IOSDEOF,X RTS PAGE * * RBYTE�--�READ�NEXT�BYTE�FROM�FILE�"IOCBPTR" * RETURNS�CARRY�CLEAR�IF�EOF�HIT * RESTURNS�CARRY�SET�IF�EOF�NOT�HIT,�AND * 8�BIT�BYTE�RETURNED�IN�(A) * PARITY�IS�NOT�STRIPPED�OR�TOUCHED * RETURNS�IOCBPTR�IN�(X) * RBYTE LDAA IOCDTT,X GET�TRANSFER�TYPE TAB (SAVE�IT) ANDA #3 MASK�TO�GET�OPEN�MODE CMPA #DT$OPO INPUT�TRANSFER�OK�? BEQ J2ERR:ILLDVOP OPENED�ONLY�FOR�OUTPUT�??? BITB #DT$SIO DISK�I/O�DEVICE�? BEQ RBYTED B/�NO,�DO�INPUT�FROM�DEVICE LDX IOSDPTR,X YES,�READ�FROM�DISK BNE RBYTE2 B/�SECTOR�ALREADY�READ�IN JSR READSECTOR READ�IN�THE�SECTOR BCS RBYTE1 B/�NO�ERROR RBYTEEOF EQU * CLC FLAG�"EOF�HIT" RTS AND�EXIT RBYTE1 LDX IOSDPTR,X GET�POINTER�TO�1ST�BYTE RBYTE2 LDAA 0,X GET�A�BYTE�FROM�THE�BUFFER LDX IOCBPTR NOW�UPDATE�THE�BUFFER�POINTER INC IOSDPTR+1,X BNE RBYTE3 INC IOSDPTR,X RBYTE3 JSR CHECKFORLASTBYTE WAS�THIS�LAST�BYTE�OF�BUFFER�? RBYTEOK SEC SAY�"WE�GOT�A�BYTE" RTS J2ERR:ILLDVOP EQU * JMP ERR:ILLDVOP PAGE RBYTED LDX IOSDPTR,X READ�BYTE�FROM�NON-DISK�DEVICE BNE RBYTE4 B/�ALREADY�READ�BUFFERFUL�FROM�DEVICE LDX IOCBPTR GET�POINTER�TO�IOCB LDX IOCGDW,X GET�POINTER�TO�DEVICE�DRIVER LDAB CDBDDF,X GET�DEVICE�DESCRIPTOR�BITS LDX IOCBPTR WE'LL�NEED�THIS�AGAIN BITB #DD$CNS THE�CONSOLE�DEVICE�? BEQ RBYTE8 B/�NO,�DO�UNIFIED�I/O LDX IOCDBS,X YES,�USE�.KEYIN�COMMAND�INSTEAD LDAB #BUFFERSIZE #�BYTES�TO�READ,�MAX SCALL,.KEYIN INPUT�A�LINE�FROM�CONSOLE�WITH�EDITING LDX IOCBPTR GET�IOCB�POINTER�AGAIN CLRA SET�UP�IOCDBE�AS�THOUGH�WE�DID�A�.GETRC ADDB IOCDBS+1,X (B)�=�#�BYTES�-1�IN�KEYIN�BUFFER ADCA IOCDBS,X (A,B)�NOW�POINT�TO��IN�KEYIN�BUFFER STAA IOCDBE,X STAB IOCDBE+1,X BRA RBYTE5 GO�SET�UP�BUFFER�SCAN�POINTERS RBYTE8 LDAA IOCDBS,X SET�UP�IOCDBE�=�POINTER�TO�LAST�BYTE�IN�BUFFER LDAB IOCDBS+1,X (THIS�PREVENTS�RUNNING�OFFF�END�OF�BUFFER) ADDB #(BUFFERSIZE-1)&$FF ADCA #(BUFFERSIZE-1)/256 STAA IOCDBE,X STAB IOCDBE+1,X SCALL,.GETRC NO,�READ�ASCII�BUFFERLOAD�FROM�DEVICE LDX IOCBPTR DID�.GETRC�SUCCEED�? LDAA IOCSTA,X BEQ RBYTE5 B/�YES,�GRAB�BUFFER�BYTE CMPA #I$BUFO IF�BUFFER�OVERFLOWED�... BEQ RBYTE5 YOU�JUST�LOSE�SOME�STUFF,�TOO�BAD! CMPA #I$EOF BEQ RBYTEEOF B/�HIT�EOF JMP MDOSERROR B/�OTHER�KIND�OF�ERROR RBYTE5 LDAA IOCDBS,X SET�UP�BUFFER�SCAN�POINTER STAA IOSDPTR,X MOTOROLA�SEZ�BUFFER�ALWAYS�HAS�CR�IN�IT! LDAA IOCDBS+1,X STAA IOSDPTR+1,X LDX IOSDPTR,X GET�BUFFER�SCAN�POINTER RBYTE4 LDAA 0,X FET CH�BUFFER�BYTE LDX IOCBPTR UPDATE�BUFFER�SCAN�POINTER IF BUFFERSIZE>/256 ?RBYTE�CHECK�ERROR? ELSE LDAB IOSDPTR+1,X HIT�END�OF�BUFFER�YET�? CMPB IOCDBE+1,X BEQ RBYTE7 B/�YES,�GO�FLAG�"BUFFER�IS�EMPTY" FIN INC IOSDPTR+1,X NOW�BUMP�BUFFER�SCAN�POINTER BNE RBYTE6 INC IOSDPTR,X RBYTE6 CMPA #CR END�OF�BUFFER�? BNE RBYTEOK B/�NOPE RBYTE7 CLR IOSDPTR,X YES,�ZERO�THE�SCAN�POINTER... CLR IOSDPTR+1,X TO�FLAG�"NEED�ANOTHER�BUFFERFUL�FROM�DEVICE" SEC FLAG�"GOT�DATA�BYTE" RTS AND�EXIT PAGE * WBIN�--�WRITE�BINARY�(A) * (B)�CONTAINS�CHANNEL�NUMBER * WBIN JSR FINDIOCB SHOULD�BE�OBVIOUS�BY�NOW JSR CHECKOPEN BSR DUMPCOMPRESSEDSPACES COPY�COMPRESSED�SPACE�TO�FILE CLR IOSDCOL,X ZAP�THE�COLUMN�COUNTER LDAA COUNT (THE�DATA�BYTE�TO�WRITE)  JSR WBYTE GO�WRITE�BYTE�TO�FILE RTS * * DUMPCOMPRESSEDSPACES‚--�COPIES�COMPRESSED�SPACES�TO�DISK�FILE * DUMPCOMPRESSEDSPACES EQU * PSHA SAVE�(A),�IT�MAY�BE�SOMEBODY'S�MOTHER LDX IOCBPTR JUST�TO�BE�SAFE LDAA IOSDWSPC,X ANY�COMPRESSED�SPACES�? BEQ DUMP1 B/�NO,�GET�OUT! ORAA #$80 TAG�AS�COMPRESSED�SPACE JSR WBYTE GET�RID�OF�IT�TO�THE�FILE CLR IOSDWSPC,X FORGET�THE�COMPRESSED�SPACE�FLAG DUMP1 PULA GET�SOMEBODY'S�MOTHER�BACK RTS AND�EXIT PAGE * * WASCII�--�WRITE�ASCII�(A) * (B)�CONTAINS�CHANNEL�NUMBER * WASCII JSR FINDIOCB JSR CHECKOPEN INC IOSDCOL,X ASSUME�A�PRINTING�CHARACTER,�BUMP�COL�COUNT LDAA COUNT (THE�DATA�BYTE�TO�WRITE) CMPA #SPACE A�BLANK�? BNE WASCII2 NO,�GO�WRITE�TO�FILE�IF�NOT�CR LDAB IOCDTT,X DISK�I/O�DEVICE�? BITB #DT$SIO ...? BEQ WASCII2 B/�NO,�DON'T�COMPRESS�SPACES INC IOSDWSPC,X YET�ANOTHER�SPACE�FOUND,�COMPRESS�IT LDAB IOSDWSPC,X GET�COMPRESSED�SPACE�COUNT CMPB #$7F HIT�MAX�COUNT�? BNE WASCII1 B/�NO LDAA #$FF YES,�WRITE�OUT�MAX�COMPRESSED�BLANK�CODE CLR IOSDWSPC,X RESET�THE�COMPRESSED�BLANKS�FLAG WASCII3 JSR WBYTE COPY�(A)�TO�FILE WASCII1 RTS ALL�DONE WASCII2 BSR DUMPCOMPRESSEDSPACES IN�CASE�THERE�ARE�ANY CMPA #SPACE-1 WAS�IT�REALLY�A�PRINTING�CHARACTER�? BHI WASCII3 YES,�LEAVE�COLUMN�COUNTER�BUMPED CLR IOSDCOL,X CONTROL�CHARACTER,�ZERO�THE�COLUMN�COUNT BRA WASCII3 AND�GO�OUTPUT�THE�CHARACTER�TO�THE�FILE PAGE * * WBYTE�--�WRITE�(A)�TO�FILE�"IOCBPTR" * (A)�COPIED�TO�FILE�AS�IS * WBYTE LDAB IOCDTT,X GET�OPEN�MODE  ANDB #3 (MASK�OFF�THE�OTHER�TRASH) CMPB #DT$OPI INPUT�ONLY�MODE�? BEQ WBCRTQ B/�CAN'T�DO�OUTPUT�TO�INPUT�ONLY�DEVICE! LDAB IOCDTT,X DISK�I/O�? BITB #DT$SIO ...? BEQ WBYTED NO,�GO�WRITE�BYTE�TO�DEVICE LDX IOSDPTR,X YES,�ARE�WE�FILLING�A�BUFFER�? BNE WBYTE1 B/�YES,�GO�INSERT�BYTE�INTO�BUFFER PSHA NO,�SAVE�THE�BYTE�TO�WRITE JSR READSECTOR READ�IN�NEXT�DISK�SECTOR�OF�FILE PULA GET�OUR�DATA�BYTE�BACK WBYTE1 LDX IOCBPTR CHECK�FOR�BUFFER�FULL CLR IOSDMF,X SET�THE�"BUFFER�MODIFIED"�FLAG INC IOSDMF,X INC IOSDPTR+1,X BUMP�THE�SECTOR�FILL�POINTER BNE WBYTE3 INC IOSDPTR,X WBYTE3 LDX IOSDPTR,X POKE�BYTE�INTO�SECTOR DEX (DUE�TO�PRE-INCREMENT�WE�JUST�DID) STAA 0,X STUFF�IT! JSR CHECKFORLASTBYTE SEE�IF�BUFFER�IS�FILLED RTS  AND�EXIT J3ERR:ILLDVOP EQU * JMP ERR:ILLDVOP PAGE WBCRTQ EQU * ILLEGAL�WRITE,�PERHAPS�TO�CONSOLE�? LDX IOCGDW,X GET�POINTER�TO�DEVICE�DRIVER LDAB CDBDDF,X GET�DEVICE�DESCRIPTOR�BITS BITB #DD$CNS OUTPUT�TO�CONSOLE�DEVICE�? BEQ J3ERR:ILLDVOP  B/�NOT�SYSTEM�CONSOLE,�TOO�BAD! STAA CONSOLECHAR YES,�SET�UP�1�BYTE�OUTPUT�STRING LDX #CONSOLECHAR AND�MAKE�MDOS�COPY�BYTE�TO�CONSOLE SCALL,.DSPLZ "WHICH�MAKES�IT�HIGHLY�.DSPLZED" RTS WBYTED LDX IOCBPTR WRITE�TO�DEVICE,�SOMEBODY�STEPPED�ON�THIS  LDX IOSDPTR,X WRITE�BYTE�TO�DEVICE�BUFFER BNE WBYTE4 B/�BUFFER�IS�BEING�FILLED WBYTE5 LDX IOCBPTR BUFFER�IS�EMPTY LDAB IOCDBS,X SET�UP�BUFFER�FILL�POINTER STAB IOSDPTR,X LDAB IOCDBS+1,X STAB IOSDPTR+1,X LDX IOSDPTR,X PUT�THE�BYTE�INTO�THE�BUFFER WBYTE4 STAA 0,X LDX IOCBPTR KEEP�IOCDBE�UP�TO�DATE LDAB IOSDPTR,X =�POINTER�TO�LAST�BYTE�PUT�INTO�BUFFER STAB IOCDBE,X LDAB IOSDPTR+1,X STAB IOCDBE+1,X CMPA #CR TIME�TO�DUMP�THE�BUFFER�? BEQ WBYTEW ITS�A�CR,�TIME�TO�DUMP�THE�BUFFER IF BUFFERSIZE>/256 ?WBYTE�TEST�ERROR? ELSE SUBB IOCDBS+1,X IS�BUFFER�FULL�? CMPB #BUFFERSIZE-1 (DOES�IOSDPTR=IOCDBS+BUFFERSIZE-1?) BEQ WBYTEW B/�YES,�DUMP�IT�***NOW*** FIN INC IOSDPTR+1,X NO,�BUMP�BUFFER�FILL�POINTER BNE WBYTEX INC IOSDPTR,X RTS  WBYTEW LDX IOCBPTR TO�BE�SAFE SCALL,.PUTRC PUT�THE�RECORD�TO�THE�DEVICE JSR CHECKIOCBSTATUS AND�BITCH�IF�A�PROBLEM�OCCURRED CLR IOSDPTR,X FLAG�"EMPTY�BUFFER" CLR IOSDPTR+1,X LDAA IOCDBS,X NOW�SET�UP�IOCDBE... LDAB IOCDBS+1,X SO�BUFFER�APPEARS�TO�BE�EMPTY SUBB #1 (I.E.,�IOCDBE=IOCDBS-1) SBCA #0 STAA IOCDBE,X STAB IOCDBE+1,X WBYTEX RTS PAGE * READSECTOR�--�READ�IN�SECTOR�SPECIFIED�BY�IOCLSN * RESETS�IOSDEOF;�SETS�IT�IF�I$EOF�ERROR�OCCURS * ALSO�SETS�UP�BUFFER�SCAN�POINTERS * IF�I$EOF�OCCURS,�ZEROS�THE�BUFFER�CONTENTS * READSECTOR EQU * LDX IOCBPTR GET�IOCB�POINTER LDAA IOCSBS,X SET�UP�BUFFER�SCAN�POINTER  STAA IOSDPTR,X LDAA IOCSBS+1,X STAA IOSDPTR+1,X CLR IOSDEOF,X ASSUME�NO�EOF�WILL�BE�HIT LDAA IOCMLS,X IS�IOCLSN�>�IOCMLS�? BMI READSECTOREOF B/�IOCMLS�=�-1 LDAB IOCMLS+1,X (�IS�THIS�THE�FIRST�TIME�THIS�SECTOR�HAS�BEEN�READ�?) SUBB IOCLSN+1,X (0>�IOCMLS-IOCLSN�?) SBCA IOCLSN,X BCS READSECTOREOF B/�YES,�ZERO�THE�SECTOR�INSTEAD�OF�USING�DISK�GARBAGE SCALL,.GETLS READ�IN�SECTOR�"IOCLSN" LDX IOCBPTR CHECK�TO�SEE�IF�READ�OFF�END�OF�FILE LDAA IOCSTA,X GET�STATUS�OF�READ BEQ READSECTOR1 B/�NO�ERRORS CMPA #I$EOF IS�LOGICAL�SECTOR�NUMBER�OUT�OF�RANGE�? BNE J1MDOSERROR B/�NOT�AN�ERROR�I�UNDERSTAND READSECTOREOF EQU * INC IOSDEOF,X WE�HIT�END�OF�FILE,�REMEMBER�THAT INC IOCLSN+1,X BUMP�THIS... BNE READSECTOR2 SO�IT�LOOKS�LIKE�WE�DID...  INC IOCLSN,X SUCCESSFUL�".GETLS" READSECTOR2 EQU * LDX IOCSBS,X YES,�ZERO�THE�BUFFER LDAB #BUFFERSIZE NUMBER�OF�BYTES�TO�ZERO CLRA WHAT�TO�STORE�INTO�BUFFER SCALL,.STCHR ZERO�THE�BUFFER�OUT LDX IOCBPTR BE�NICE�TO�WHOEVER�CALLED�US CLC TELL�HIM�WE�HIT�EOF RTS READSECTOR1 EQU * SEC SAY�"NO�EOF�HIT" RTS PAGE * CHECKFORLASTBYTE�--�CHECK�TO�SEE�IF�WE�JUST�FILLED�LAST�BYTE�OF�SECTOR * IF�SO,�WRITE�SECTOR�TO�DISK�IF�MODIFIED * OTHERWISE,�DO�NADA * CHECKFORLASTBYTE EQU * LDX IOCBPTR THIS�CAN�ONLY�HELP LDAB IOSDPTR+1,X (DOES�BUFFER�POINTER�POINT�TO�END�OF�BUFFER�?) SEC BECAUSE�END�OF�BUFFER�POINTER�POINTS�TO�LAST�BYTE SBCB IOCSBE+1,X COMPUTE�BUFFEREND�-�BUFFER�POINTER LDAB IOSDPTR,X SBCB IOCSBE,X BCS CHECKFORLASTRTS B/�NO,�GET�OUT! * * DUMPSECTOR�--�WRITE�SECTOR�BACK�TO�DISK�IF�MODIFIED * DOES�NOT�CHECK�FOR�COMPRESSED�BLANKS * DUMPSECTOR EQU * LDX  IOCBPTR NEVER�HURTS�TO�BE�SAFE LDAB IOSDMF,X WAS�THIS�SECTOR�MODIFIED�? BEQ DUMPSECTORXIT B/�NO,�GET�OUT PSHA JUST�TO�BE�NICE TST IOCLSN+1,X DECREMENT�LOGICAL�SECTOR�NUMBER BNE DUMPSECTOR1 (BECAUSE�WHEN�WE�GOT�THE�SECTOR...) DEC IOCLSN,X (.GETLS�BUMPED�THE�SECTOR�NUMBER) DUMPSECTOR1 EQU * DEC IOCLSN+1,X SCALL,.PUTLS WRITE�SECTOR�TO�DISK JSR CHECKIOCBSTATUS AND�BITCH�IF�A�PROBLEM�OCCURRED ************************************************************* *********�MDOS�2.0,3.0�BUG�FIX�******************************* LDAA IOCMLS,X UPDATE�IOCEOF�IF�IOCMLS�>�IOCEOF LDAB IOCMLS+1,X CMPA IOCEOF,X BNE *+4 CMPB IOCEOF+1,X BCS *+6 STAA IOCEOF,X STAB IOCEOF+1,X ************************************************************** PULA RESTORE�(A) CLR IOSDMF,X MARK�"SECTOR�NOT�MODIFIED" DUMPSECTORXIT EQU * CLR IOSDPTR,X FLAG�"NO�SECTOR�IN�BUFFER" CLR IOSDPTR+1,X CHECKFORLASTRTS EQU * RTS J1MDOSERROR EQU * JMP MDOSERROR PAGE * DELETE�--�(X)�POINTS�TO�NAME * (A)�IS�LENGTH * DELETE LDAB #IOCBSP1N SAVE�PARAMS�AND�GET... JSR FINDSPIOCB SPECIAL�PURPOSE�(RESERVED)�IOCB�ADDRESS JSR PARSENAME LDX IOCBPTR SCALL,.RESRV RESERVE,�OPEN,�TAG�"DELETE"�AND�CLOSE�FILE JSR CHECKIOCBSTATUS LDX IOCGDW,X GET�PTR�TO�DEVICE�DESCIPTOR�FLAGS LDAA CDBDDF,X LOGICAL�SECTOR�I/O�OK�? BITA #DD$LOG (IS�IT�A�DISK?) BEQ J1ERR:CANTDELETE NO,�CAN'T�DELETE�A�DEVICE LDAA #DT$SIO!DT$OPP!DT$CLS YES,�OPEN�FOR�OUTPUT�AS�SECTORED�DEVICE LDX IOCBPTR GET�POINTER�TO�IOCB�AGAIN STAA IOCDTT,X SCALL,.OPEN OPEN�THE�FILE JSR CHECKIOCBSTATUS LDAA IOCDTT,X ALL�IS�OK,�SET�"TRUNCATE"�FLAG ORAA #DT$TRU STAA IOCDTT,X LDAA #$FF SET�MAX�LOGICAL�SECTOR�=�-1 STAA IOCMLS,X (JUST�LIKE�MDOS�MANUAL�SEZ) STAA IOCMLS+1,X SCALL,.CLOSE CLOSE�(AND�DELETE)�THE�FILE JSR CHECKIOCBSTATUS RTS ALL�DONE. J1ERR:CANTDELETE EQU * JMP ERR:CANTDELETE PAGE * * RENAME�--�RENAME�FILE�(X,A)�TO�(TOS-1,TOS) * RENAME LDAB #IOCBSP1N USE�1ST�GENERAL�PURPOSE�IOCB JSR FINDSPIOCB CHEAP�TRICK JSR PARSENAME DON'T�CARE�IF�OPEN�OR�CLOSED LDX IOCGDW+IOCBSP1 RENAMING�A�FILE�ON�DISK�DEVICE�? CPX #'D*256+'K BNE J1ERR:CANTRENAME NO,�CAN'T�RENAME�A�PERIPHERAL TSX GET�NEW�NAME�PARAMETERS LDAA 0,X GET�NEW�FILE�NAME�LENGTH LDX 1,X AND�POINTER�TO�NAME INS POP�PARAMETERS�OFF�THE�STACK INS INS LDAB #IOCBSP2N GET�2ND�SP�IOCB�ADDRESS JSR FINDSPIOCB AND�SAVE�PARAMETERS JSR PARSENAME COLLECT�NEW�FILE�NAME LDX IOCGDW+IOCBSP1 CHECK�COMPATIBILITY�OF�FILE�ID'S CPX IOCGDW+IOCBSP2 RENAME�FILE�TO�SAME�DEVICE�? BNE J1ERR:CANTRENAME  DEVICES�DON'T�MATCH! LDAA IOCLUN+IOCBSP1 CHECK�LOGICAL�UNIT�NUMBER�MATCH CMPA IOCLUN+IOCBSP2 BNE J1ERR:CANTRENAME B/�LOGICAL�UNIT�#S�DON'T�MATCH LDAB #1 "CHANGE�NAME�ONLY"�(SEE�.CHANG�WRITEUP) LDX #RENAMEPACKET POINTER�TO�OLD�NAME,�NEW�NAME SCALL,.CHANG CHANGE�THE�FILE�NAMES TSTB CHECK�RESULTS BNE J1ERR:CANTRENAME SOMETHING�WENT�WRONG,�YOU�LOSE! RTS ALL�DONE! RENAMEPACKET EQU * FDB IOCLUN+IOCBSP1 RENAME�FROM... FDB IOCLUN+IOCBSP2 RENAME�TO... J1ERR:CANTRENAME EQU * JMP ERR:CANTRENAME PAGE * * EXIT$�--�CLOSE�ALL�THE�FILES�AND�QUIT * EXIT BSR EXITS CAUSE�CHAIN�DOES�THIS�TOO SCALL,.MDENT AND�"ENTER�MDOS" EXITS LDAB #NCHANNELS-1 GET�NUMBER�OF�CHANNELS�TO�CLOSE EXITL JSR FINDIOCB GET�IOCB�ADDRESS LDAA IOCDTT,X IS�THIS�CHA NNEL�OPEN�? BITA #DT$CLS (CHECK�"CLOSED"�BIT) BNE EXIT1 B/�CLOSED LDAB CHANNEL NOT�CLOSED,�GO�CLOSE�IT JSR CLOSE NEAT,�HUH�? EXIT1 DEC CHANNEL DOWN�COUNT�#�CHANNELS�PROCESSED LDAB CHANNEL BECAUSE�FINDIOCB�WANTS�IT�IN�(B) BPL EXITL B/�HAVEN'T�PROCESSED�ALL�THE�CHANNELS�YET RTS * PAGE ---�CHAIN�--- * * CHAIN�THE�MOTHER * CHAIN PSHA REMEMBER�THE�STRING�LENGTH STX STRING AND�THE�FILE�NAME LDAA STRING ON�THE�STACK LDAB STRING+1 PSHB PSHA BSR EXITS JSR RESET0 OPEN�CHANNEL�0�TO�THE�CONSOLE�AGAIN TSX RESTORE�FILE�NAME�AND�LENGTH LDX 0,X INS INS PULA LDAB #1 JSR OPEN LDX #0 STX LOADADDR * * HERE�WE�GO... * LOAD EQU * LDAB #1 GET�CH�# JSR EOF EOF? TSTA BNE LOADE ERR�IF�SO LDAB #1 LOAD�CH# JSR RASCII READ�A�CH CMPA #'S LOOK�FOR�A�LEADING�'S'�CODE BNE LOAD THIS�WASN'T�IT,�IGNORE�IT LDAB #1 JSR RASCII CMPA #'9 DONE? BEQ LOADX B/�YES CMPA #'1 DATA�BLOCK? BNE LOAD B/�NO,�IGNORE CLR CHECKSUM BSR LBYTE GET�BYTE�COUNT�+�2�(FOR�ADDRESS) SUBA #2 STAA LOOPCT SAVE�#�OF�BYTES�TO�READ BSR LBYTE GET�ADDRESS�HIGH�BYTE STAA LOADPTR BSR LBYTE STAA LOADPTR+1 LDX LOADADDR BNE LOAD1 LDX LOADPTR SAVE�ADDRESS�OF�FIRST�BYTE�(START�ADDRESS) STX LOADADDR LOAD1 BSR LBYTE GET�DATA�BYTE DEC LOOPCT ALL�DATA�BYTES�LOADED? BEQ LOADC YES,�GO�CHECK�CHECKSUM LDAB LOADPTR SEE�IF�HE'S�TRYING�TO�LOAD�OVER�US CMPB #IOPKGBASE/$100 COMPARE�HIGHER�BYTES BHI LOADPOKE ERROR�IF�POKING�THE�IO�PACKAGE BNE AOK IF�<�THEN�IT'S�OK,�ELSE�CHECK�LOWER�8�BITS LDAB #IOPKGBASE&$FF GET�LOWER�BITS CMPB LOADPTR+1 BLS LOADPOKE ERROR�IF�POKING *�HE'S�NOT�POKING�US AOK LDX LOADPTR STAA 0,X STORE�THE�BYTE INX STX LOADPTR BRA LOAD1 * LOADC INC CHECKSUM CHECK�SUM�OK? BEQ LOAD YES,�GO�LOOK�FOR�ANOTHER�RECORD LOADE JMP ERR:CANTLOADOVERLAY CHECKSUM�ERROR LOADPOKE LDAB #OUCH ILLEGAL�POKE JMP SDERB * LOADX EQU * LDAB #1 LOAD�CHANNEL�# JSR CLOSE CLOSE�THE�MOTHER LDX LOADADDR GET�LOAD�ADDRESS JMP 0,X GO,GO,GO * LBYTE LDAB #1 JSR RASCII GET�A�BYTE BSR ISDIG IS�IT�A�DIGIT? BCC LOADE2 ERROR ASLA ASLA ASLA ASLA PSHA LDAB #1 JSR RASCII BSR ISDIG THIS�BETTER�BE�A�DIGIT�TOO BCC LOADE2 PULB ABA TAB ADDB CHECKSUM STAB CHECKSUM RTS * LOADE2 INS WIND�BACK�STACK INS BRA LOADE * ISDIG CMPA #'9 BLS IS0TO9 CMPA #'G BCS ISATOF ISDNO CLC RTS * IS0TO9 CMPA #'0 BCS ISDNO SUBA #'0 SEC RTS ISATOF CMPA #'A BCS ISDNO SUBA #'A-10 SEC RTS PAGE * EOF�--�CHECK�FOR�EOF�ON�FILE * (B)�CONTAINS�CHANNEL�# * EOF JSR FINDIOCB JSR CHECKOPEN LDAA IOSDEOF,X RTS * * GETCOL$�--�GET�COLUMN�NUMBER�FOR�CURRENT�CHANNEL * GETCOL JSR FINDIOCB JSR CHECKOPEN LDAA IOSDCOL,X RTS * * DATE‚--‚RETURN�DESCRIPTOR�TO�ASCII�DATE�STRING * DATE LDX #DATE$ LDAA #DATEL RTS * * TIME�--‚RETURN�DESCRIPTOR�TO�ASCII�TIME�STRING * TIME LDX #TIME$ LDAA #TIMEL RTS * DATE$ EQU * IF EDITDATE/$1000#0 FCB '0+EDITDATE/$1000 FIN FCB '0+((EDITDATE/$100)&$F),'- FCB '0+((EDITDATE/$10)&$F),'0+((EDITDATE/$1)&$F) FCC '-78' DATEL EQU *-DATE$ TIME$ FCC "12:01�AM" TIMEL EQU *-TIME$ PAGE * * RESET$�--�RESET�ALL�I/O�CHANNELS�TO�CLOSED * OPEN�CONSOLE�ON�CHANNEL�0 * RESET LDAB #NCHANNELS+NSPCHANNELS-1 FOR�ALL�THE�CHANNELS LDX #BUFFERBASE SET�UP�TO�ALLOCATE�BUFFERS�TO‚IOCBS STX BUFFERP (FIRST�FEW�ARE�DUMMIES�THAT�ARE�NEVER�USED) RESETL JSR FINDSPIOCB FIND�IOCB�ADDR ESS LDAA #DT$CLS MARK�CHANNEL�AS�CLOSED STAA IOCDTT,X LDAA BUFFERP SET�UP�BUFFER�POINTERS LDAB BUFFERP+1 STAA IOCDBS,X  DATA�BUFFER�START STAB IOCDBS+1,X STAA IOCSBS,X SECTOR�BUFFER�START STAB IOCSBS+1,X LDX BUFFERP FIND�LAST�BYTE�OF�BUFFER LDAB #BUFFERSIZE-1 SCALL,.ADBX STX BUFFERP SAVE�POINTER�TO�LAST�BYTE�OF�BUFFER LDAA BUFFERP SET�UP�END�OF�BUFFER�POINTERS LDAB BUFFERP+1 INX COMPUTE�POINTER�TO�NEXT�BUFFER STX BUFFERP SAVE�FOR�NEXT�BUFFER�ALLOCATION LDX IOCBPTR NOW�STORE�END�OF�BUFFER�POINTERS�INTO�IOCB STAA IOCSBE,X SECTOR�BUFFER�END STAB IOCSBE+1,X DEC CHANNEL DOWN�COUNT�#�CHANNELS�TO�RESET LDAB CHANNEL SINCE�FINDIOCB�WANTS�IT�IN�(B) BPL RESETL B/�ANOTHER�TO�PROCESS RESET0 LDX #CONSOLENAME NOW�OPEN�CHANNEL�0 LDAA #CONSOLENAMELENGTH CLRB =�CHANNEL�# JSR OPEN RTS CONSOLENAME FCC "#CN" CONSOLENAMELENGTH EQU *-CONSOLENAME PAGE * * FINDIOCB�--�CONVERT�CHANNEL�#�IN�(B)�TO�IOCB�ADDRESS�IN�"IOCBPTR",�(X) * SAVE�(A),�(B),�(X)�IN�"COUNT",�"CHANNEL",�AND�"STRING" * ALSO�SAVES�STACK�FOR�ERROR�RECOVERY * FINDIOCB EQU * STS FLAMEOUT IN�CASE�WE�GET�ZAPPED�SOMEWHTERE CMPB #NCHANNELS-1 LEGAL�CHANNEL�NUMBER�? BHI J1ERR:ILLEGALCHANNEL WHAT�DO�YOU�THINK�? FINDSPIOCB EQU * ENTRY�POINT�FOR�RENAME�AND�DELETE STS FLAMEOUT JUST�IN�CASE STAA COUNT SAVE�PARAMETERS STAB CHANNEL STX STRING ASLB CONVERT�CHANNEL�#�TO�POINTER�TABLE�INDEX LDX #IOCBPTB ADD�TO�TABLE�BASE SCALL,.ADBX (ADD�B�TO�X) LDX 0,X GET�IOCB�POINTER STX IOCBPTR SAVE�SO�WE�CAN�FIND�IT�EASILY�LATER RTS DON'T�YOU�LIKE�SIMPLE�ROUTINES�? J1ERR:ILLEGALCHANNEL EQU * JMP ERR:ILLEGALCHANNEL PAGE * * CHECKCLOSED�--�CHECK�TO�SEE�IF�CHANNEL�IS�CLOSED * RESET�THE�EXTENDED�IOCB�VARIABLES * CHECKCLOSED EQU * LDAA IOCDTT,X IOCBPTR�BBETTER�BE�IN�(X) BITA #DT$CLS IS�IT�CLOSED�? BEQ J1ERR:CHANNELALREADYOPEN CLR IOSDCOL,X RESET�THE�COLUMN�COUNTER CLR IOSDEOF,X "NO�EOF�HIT" CLR IOSDWSPC,X NO�COMPRESSED�BLANKS�BEING�SAVED CLR IOSDRSPC,X NO�COMPRESSED�BLANKS�BEING�READ CLR IOSDPTR,X HAVEN'T�READ�RECORD�INTO�BUFFER CLR IOSDPTR+1,X HAVEN'T�STARTED�WRITING�INTO�BUFFER CLR IOSDMF,X BUFFER�HAS�NOT�BEEN�MODIFIED�RECENTLY RTS J1ERR:CHANNELALREADYOPEN EQU * JMP ERR:CHANNELALREADYOPEN * * CHECKOPEN�--�CHECK�TO�SEE�IF�CHANNEL�IS�OPEN * CHECKOPEN EQU * LDAA IOCDTT,X X�MUST�POINT�TO�IOCB BITA #DT$CLS BNE J1ERR:CHANNELNOTOPEN RTS J1ERR:CHANNELNOTOPEN EQU * JMP ERR:CHANNELNOTOPEN PAGE * PARSENAME�--�PARSES�FILE�NAME�PASSED�TO�I/O�PACKAGE * AND�PLANTS�IT�IN�THE�IOCB * DOES�ALL�THE�DEFAULTS * PARSENAME EQU * LDX IOCBPTR TO�BE�CERTAIN LDAA #'D SET�UP�THE�DEFAULTS STAA IOCGDW,X DEFAULT�TO�THE�"DK"�DEVICE LDAA #'K STAA IOCGDW+1,X LDAA #'S DEFAULT�FILE�EXTENSION�TO�"SA" STAA IOCSUF,X LDAA #'A STAA IOCSUF+1,X LDAA #'0 DEFAULT�THE�UNIT�NUMBER�TO�"0" STAA IOCLUN,X (ALSO�RESET�"RESERVED"�BIT) LDAB #IOCLUN SET�UP�POINTER�TO�IOCNAM SCALL,.ADBX STX PFNAMPACKET+2 PLACE�TO�COPY�THE�NAME�TO INX DON'T�ZAP�THE�DEFAULTED�LOGICAL�UNIT�# LDAB #DIR$SX-DIR$NM #�BYTES�TO�CONVERT�TO�BLANKS SCALL,.STCHB STORE�BLANKS,�PLEASE LDX STRING GET�POINTER�TO�SUPPLIED�NAME STX MOVEPACKET FOR�THE�DESIGNERS�OF�.PFNAM LDAB COUNT LENGTH�OF�NAME�TO�MOVE BEQ ERR:ILLEGALFILENAME B/�FILE�NAME�LENGTH�IS�ZERO IF CATSIZ-2<$FF FILE�NAME�IS�A LREADY�<=�$FF�BYTES CMPB #CATSIZ-2 NAME�TOO�LONG�? BHI ERR:ILLEGALFILENAME FIN LDX #CATBUF+1 LEAVING�ONE�BYTE�AT�FRONT�OF�CATBUF STX MOVEPACKET+2 SET�UP�TARGET�POINTER LDX #MOVEPACKET ALL�SET,�LET'S�ROLL! SCALL,.MOVE COPY�FILENAME�INTO�CATBUF  LDX MOVEPACKET+2 FORCE�A�FILE�NAME�TERMINATOR�AT�END�OF�NAME LDAA #'; .PFNAM�SINGULARLY�DISLIKES�THIS STAA 0,X LEAVE�IT�TO�TRIP�.PFNAM�UP LDAA #SPACE SET�UP�FIRST�BYTE�OF�CATBUF STAA CATBUF SO�.PFNAM�LIKES�IT LDX #CATBUF STX PFNAMPACKET SO�.PFNAM�KNOWS�WHERE�TO�LOOK LDX #PFNAMPACKET ALL�SET�AGAIN,�TURN�.PFNAM�LOOSE SCALL,.PFNAM BITB #%11 FAMILYNAME!FAMILYSUFFIX�(SEE�.PFNAM) BNE ERR:ILLEGALFILENAME BITB #%100 DEVICENAME�(SEE�.PFNAM)�? BNE PARSEDEVICE RATS,�HE�GAVE�US�A�DEVICE�NAME! BITB #%10000000 NULLNAME�(SEE�.PFNAME)�? BNE ERR:ILLEGALFILENAME RTS PARSEDEVICE EQU * LDX IOCBPTR DEVICE�NAME�FOUND  LDAA IOCNAM,X COPY�FROM�"NAME"�PART�OF�IOCB LDAB IOCNAM+1,X STAA IOCGDW,X TO�GENERIC�DEVICE�NAME�PART�OF�IOCB STAB IOCGDW+1,X RTS PAGE * ERROR$�--�PRINT�ERROR�MESSAGE�(A,B)�FOR�LINE�NUMBER�(X) * ERROR TSTA AN�MDOS�ERROR�CODE�? BPL ERRTS B/�MSB�=�0,�NO,�AN�SD�ERROR CLRB MAKE�.MDERR�INTERPRET�IOCB�STATUS LDX IOCBPTR IF�A�FILENAME�WAS�INVOLVED,�THIS�WILL�HELP SCALL,.MDERR MAKE�MDOS�PRINT�THE�CORRESPONDING�MESSAGE ERRTS RTS AND�GO�BACK�ANYWAY;�LET�PROCESSOR�DEAL�WITH�ERROR PAGE ERR:50 EQU *-(50*2)+2 ERR:ILLEGALCHANNEL EQU * BSR SDIOERROR ERR:CHANNELALREADYOPEN EQU * BSR SDIOERROR ERR:ILLEGALFILENAME EQU * BSR SDIOERROR ERR:FILENOTFOUND EQU * BSR SDIOERROR ERR:CANTOPENFILE EQU * BSR SDIOERROR ERR:CANTCREATEFILE EQU * BSR SDIOERROR ERR:CANTLOADOVERLAY EQU * BSR SDIOERROR ERR:CANTRENAME EQU * BSR SDIOERROR ERR:CANTDELETE EQU * BSR SDIOERROR ERR:CHANNELNOTOPEN EQU * BSR SDIOERROR ERR:POSITIONERR EQU * BSR SDIOERROR ERR:EOFHITONOUTPUT EQU * BSR SDIOERROR ERR:ILLDVOP EQU * BSR SDIOERROR ERR:INPUTBUFOVERFLOW EQU * BSR SDIOERROR ERR:DEVICEIOERROR EQU * BSR SDIOERROR ERR:DEVICENOTREADY EQU * BSR SDIOERROR ERR:DEVICEWRITEPROTECTED EQU * BSR SDIOERROR ERR:NOTENOUGHBUFFERS EQU * BSR SDIOERROR ERR:DEVICETIMEDOUT EQU * BSR SDIOERROR SDIOERROR EQU * TSX GET�RETURN�ADDRESS LDAB 1,X INS INS POP�OFF�STACK SUBB #ERR:50&$FF GENERATE�ACTUAL�ERROR�NUMBER LSRB CONVERT�WORD�DISPLACEMENT�TO�BYTE�DISPLACEMENT SDERB CLRA LIKE�SD�BASIC�MANUAL�SAYS LDS FLAMEOUT SO�WE�HAVE�SOMETHING�REASONABLE JMP IOERROR LET�PROGRAM�KNOW�WE�WIPED�OUT MDOSERROR EQU * ENTERED�WITH�(A)�=�MDOS�ERROR�CODE TAB SO�ITS�FORMAT�IS�SIMILAR�TO�BASIC�ERROR�CODE CLRA ADDB #MDOSERRTAG&$FF ADD�60,000�DECIMAL�TO�ERROR�NUMBER ADCA #MDOSERRTAG/256 LDS FLAMEOUT PUT�STACK�BACK�TO�REASONABLE�VALUE JMP IOERROR LET�USER�PROGRAM�KNOW�IT�CROAKED * * CHECKIOCBSTATUS�--�AND�BITCH�IF�ANY�ERROR * RETURNS�(X)�=�(IOCBPTR) * CHECKIOCBSTATUS EQU * LDX IOCBPTR LIKE�WE�PROMISED LDAA IOCSTA,X GET�IOCB�STATUS�BYTE BNE MDOSERROR ***�ERROR�THE�GUY�*** RTS PAGE * STORAGE�AREAS�FOR�I/O�PACKAGE COUNT RMB 1 SAVED�(A)�ON�ENTRY�TO�I/O�PACKAGE CHANNEL RMB 1 SAVED�(B)�ON�ENTRY�TO�I/O�PACKAGE STRING RMB 2 SAVED�(X)�ON�ENTRY�TO�I/O�PACKAGE FLAMEOUT RMB 2 SAVED�STACK�POINTER�FOR�ERROR�RECOVERY IOCBPTR RMB 2 POINTER�TO�IOCB�FOR�SPECIFIED�CHANNEL BUFFERP RMB 2 USED�BY�RESET NAMEP RMB 2  COMMAND�LINE�SCAN�FOR�RUNSTART LOOPCT RMB 1 COUNTER�FOR�CHAIN LOADADDR RMB 2 START�ADDRESS�OF�CHAIN'ED�PROGRAM CHECKSUM RMB 1 YOU�GUESS LOADPTR RMB 2 MEMORY�FILL�POINTER�(CHAIN) CONSOLECHAR FCB 0,$04 .DSPLZ�FORMAT�STRING�FOR�SINGLE�CHARACTER�OUTPUT PFNAMPACKET RMB 4 .PFNAM�PACKET�(SEE�MDOS�WRITEUP) MOVEPACKET RMB 4 .MOVE�PACKET�(SEE�MDOS�WRITEUP) ACTUALIOSIZE EQU *-IOPKGBASE ACTUAL�SIZE�OF�IO�PACKAGE IF�ESTIOPKSIZE\?2þ Œÿÿ' ÿ!“Î!‚?&?39~&bÖ&&lÎ Œ?'~%¶? $~%½Î ±ß † ¡'ä½&� 'r�S&õ½%ø�0'Ò�1'�9&_6Þ ß'ÆÎ'½&g%OÖ*×%À%G×&ÆÎ'½&g%;–)›%›*—%Þ) ß"2�9'1ÆÎ'½&g%–*—$›%—%Þ"ß"z&&�- 9Á '~&b 9Î"JÆ�~&:þ &Þ)ÿ –&&ê� ~%*Î"yƃ ãÆÎ'½&g%Ô–*C‘%&èß2Þ ß2Þ ß ¦Þ29�ò� 'ú9Æ Æ7ß/Îß+�ݽ&¤%Î+½&˜š,—,Z&ì�É—12–1Þ/]9?#? ¶ 'J'J' J'Î!‚?Î!‚?Î Œ?Î Œ??_? ×]'+ÿ&–ooþ&–î¦þ&–l&l1 ½&¤%½&˜ª§Z&ßþ&–96†hiJ&ù29�A% 6‹¹2%€ �0%6‹Æ2%„9676ÿ&Ó¶&Óö&Ô?%2329å?€8 0203Þþÿ%äÎ'ÿ%æÆ ÷'Î ÿ'Î%ä?'Å'~$©}&è&~$œ~!þ%äÿ&hÎ';ÿ&jÎ&h?*|&é}&è'ßþ&ë¶' ö&èÁ&-~$¼\÷&èÎSA†0Æ ñ'&ÿ'ñ'&·'Î'Æ?'Á'Æ ? ?}&é&~$¢|&ñ~!Å}&é'~!>ö&èÁ&öö'#ÄÁ'Á' Á'Á'~$Äö'#Ä÷&ê¶'#„·'¶'$·'þ'ÿ&ë¶'·'Î' O½%Yö'#ÄÁ&þ&`ÿ&í½%ÿ&ïþ&bÿ&ý Î%èæ+ Œ&\' ó¦Äþ'N?)ÿ'Nö&èZXÎ&l?'ö'çö''ç~ ö'#Äñ&ê'~$À}&é&/ÄÁ&�Î' O½%Yþ&`ö&í¶&î?/%ÿ&í½%ö&ï¶&ð?/$­ÿ&ï ¨}&ñ&Aö&êÄÁ'#Æ€õ'#'~$ËÎ&l&ø¶'ö''¡&á& }&ø'~$­|&ò |&øö&øñ&è-Ûþ%ä¦� 'h�;' ó¦ÿ%ä� 'X�W&|&ùþ%ä ê� '÷_½'ª% Á-~$´\¦ î]'ô ÿ%ä?+ÿ&hÎ&h½'y%ãþ&jö&ï¶&ð?/$~$¸?$þ&í?/%ô÷&ý·&þ ¯}&ñ&B}&ù&=}&ò&8Î'ÿ&hÎ'Vÿ&jÎ&hÆ?þ'ÿ'_ö'÷'bÎ'V? Î&hÆ? ö&hÁY'Æ€?#?Þþÿ%äÎ'ÿ&hÎ';ÿ&jÎ&hÆ ?&øþ'ÿ'Hö&êÄÁ&~#Î'1?'~$“?'}'N&}'O'ïÁ&ë'N'O æ}&ò'þ'Dÿ'BÎ'ÿ%æÎ%ä?|&øö&øñ&è,%½%x½%OÎ' ?'Á &?&?'Ü~$“Î'1?&ö Þ½$Ò?þ&ïö&í¶&î?-ÿ&h?$„&†€‹„ø·&üÎ&h†?þ&hÿ&úÿ'NÎ&hÿ'PÎ&çÿ'RÎ'1?'~$“?&ù6Æ÷' Î'ßþ'Fßþ&úßö';Ä×½è{$z' &öÖ2÷' Î#„ÿ' Î' Æ? ½$Ò?2½%xÎ' O½%Yþ&`ÿ&ÿþ&^ ÿ' Î' †?þ' ö&]?'ÿ'ö&ÿ¶'þ&í?.·' „·'_x' IY÷'B·'C½%®½%OÎ' ?'~$“þ'+ÿ')þ')¦ÿ')þ'N§ÿ'Nþ' ÿ''&þ'Nö'R¶'S?/$ Î'1?&Ƚ%®þ')ö'-¶'.?/$Á ¬Î'1?&¯Î' ?&¨?&¤|&øö&øñ&è,~#©Î'1O½%Yþ&íÿ&àþ&ýÿ&âö&ü÷&Ýþ&úÿ&ÞÎ'1†½%Y~#Æ? ½$Ò?Æ? ?ÆÎ' õÆ ñÆÎ' êÆ æÆ âÆ ÞÆ ÚÎ'Æ ÓÎ'Æ ÌÎ' ½$ôÆõ'2&Îÿÿ¼'<'ú'2÷'2Î'1½$ô9ÿ%?'Á'_? þ%?'Á'_? 9þ&öîv'. ÿ%MÎ%M†?þ&ö¦u'J»%N·%N$|%Mþ&öîxö%M¶%N?)%911~$Ä? $½$Ò?96æ¦÷&ô·&õ2æ îÿ&öÎ&óM&?9?9Î'ÿ%æÎSAÿ'Æ0÷'ÎDKÿ'Î%ä?' Æ ? ½$Ò?Î' ?'~$“?&ù9}'& ö'¶'΀?/$Î'1?'~$“}'C&z'Bz'Cþ'Pö'?'ÿ'N'9 1DK0 %è&g3DK0 SA%è&gXXXXXXXX.XX:X EXISTS. OVERWRITE? ]'+ÿ'¨ooþ'¨î¦þ'¨l&l½'ª%½'Ū§Z&ßþ'¨9�A% 6‹¹2%€ �0%6‹Æ2%„96†hiJ&ù29åå}DAd€¿xÀ ~!z~;Sn$~q¯~rI~r~u~u@~u ~r¸~rú~sÒ~s°~rl~u‚~vw~v€~v¤~v‰~v�qzpNp~ðó9~w¢~q{n&„oípoîCOPYRIGHT (C) 1976 TERRILL M. MOORE¾ ;½ 22 ½- ½-q�"½#–€'÷~,Z]'½"}–€&óÞ†'–y'½9-½5½9Î|½"=½;€–€'½"™Þ�ß(�+½2“½"L " "*!˜;!˜ !˜½2“½"L " ";!• !• ë–™…'½2“�i09!ô..!ô " " ½2œÞ(ß"9Æÿ�_½2“½"L " ";!’ !’Þ( ß$9½*ìÎz�Îß|9¦‹§¦‰§90î11¡' m&õnîn0î11¡-¡.înm&ìn�>�:�6�2�.�* �&@�"€������ �@�€0î116–v¥&ª—v–w¥&ª—w–x‹%—x– Š— 290î11¡'m&÷nm&ûn–y&5Þ†'+�3(�Þ† ߆.÷ ߆9½"•~#êÎÿÿ߆�(ñ½9-~5– Š@— ~5�)ín½3T&/½3c&*Þ8¦æÎ#u¡&á&Œ#•'†@š — î 9¬' ß 9*ÿ#›+#›+##›+b#›+K#¨+J#¨+Z#Ô)�#*,Z#Î#™|ƒ&н"•zƒ ‚–ƒ&ú–y-özy.ñÞ8îŒ+J& ½.7½9;Þ].|y~#0½"™~,Z–ƒ'zƒ É—yz„ ç~$Ž~$éÞ$ß&½3T&ôÁ,'ð†ÿ—TÖ`TÉþ&á% ÖdÀAT&×É×TÎ&x–a¡& –b¡&–c¡' #f åîßU–V.OÖT,!½3i½1)�&3½1&.ÎAOœ`'Lœ`& —T–V6½4Õ2½"èÿ&½3i–V˽0ì%BÞ$ß&–V,ܽ"¹O ÖÞ$ß&ÖT-ÎÎ'ë½3Å&SÞ8ß:¦…'6½4Õ2…'6½3i2…' |„&z„6½"•2…'ÆÚ × … 'Æ@Ú × Þ:î6­2…'…@&½1~5½4ÕÞ$ß(Z½2“½"L+%$-%$#%;½2œ½)@–]ÖWÅ&M'½8Í–^½8ͽ1)Ò~5½2œ½.(–]'é�ÿ&Ö^+á½"� ܽ.(–] Ò&9%P&& &'&=&–TDFFšUÖU—UÁ‡'%½%‹& –]' }^,C'½"�OšU½8ͽ1–^½8Í~5��h~&Þ&' ¦�#&½._99Þ&½15�&�:&O—]—^11–]'½"�† šU½8Í »Þ&ß(½1(н1)�&É�&ÅÞ&¦�,'ͽ. ÍÎXœ`&±~1 ˆ ”½.–W…&¡–]&�11†~%t–T- '†�OšU~%~½3i½%�½.†0šU½8Í–] Å–U½"è�Ï'½½%‹&¸O å–T ѽ.¦�,&½"…–W…'–R'Ö^–]Ђ’�À×^‚'- ½"¡†þ—^~%sC&óS],ö íABAADC‰ÿADD‹ÿAND„ÿASLHASRGBCC$BCS%BEQ'BGE,BGT.BHI"BIT…ÿBLE/BLS#BLT-BMI+BNE&BPL*BRA BSR�BVC(BVS)CBACLC CLICLROCLV CMP�ÿCOMCCPXŒDAADECJDES4DEX EORˆÿINCLINS1INXJMPNJSR�LDA†ÿLDSŽLDXÎLSRDNEG@NOPORAŠÿPSH6þPUL2þROLIRORFRTI;RTS9SBASBC‚ÿSEC SEISEV SK1�SK2ŒSTA‡ÿSTS�STXÏSUB€ÿSWI?TABTAPTBATPATSTMTSX0TXS5WAI>ÿ'í'ö)´BEQU'ÿ)¿BSET()ÊRMB()FCB().FDB(#)ŸBORG(,*‰BNAM(6*‰BNAME(@+~WITH(I,ZEND(S*©JPAGE(^*„JTITLE(i*� SPACE(r*� SPC({)äFCC(…)T LIST(Ž)PCC(—)ƒ PSR(¡)‹ PGEN(ª)‡ PCA(³)�&RPT(»*ÿ2DO(Å+K ELSE(Î+Z FIN(Ö+2IF(â+J ELSEIF(ì+b2CASE(÷+#2IFUND)*I TABS) ,ZMON)?OPT�+–]' C&–^-½"�–^½8ͽ1)æ9�–]½8Í–^½8ͽ1)ï9½1)|Z�&]^9~.(–™C… &䯖R'Þ7½.(3–W…&ˆÿ”…Þ]/—… 7½"¥ 2Æ ÚÆ ÖÆ@ ÒÆ ν.=&Þ],Î߆ ½.=&½1Þ]ß�½4Õ½9ž~9;½.(½1½4Ü ò½.=½1½4Þ ç½)@½.?½9–‚›^—‚–�™]—�½9ž ÍÎß]½0¯Á&½0¯Á'ù�,&HÞ&½15–],½"¥½2“½2“Á &Þ]/O ß]† ½8Í ò½2“„'ê� &½"± á7æÊ€ç½8Í3Þ] ß] ÝÞ&ß( ÁÎ>zß“Îÿ>y½.(–^Ö]' ½"¥Î7¡ß“9‹Þ“¡/ï§ß“Œ>ƒ'åo½1)ÕÎ>y ßÎ>¢ #Î>„† "½.=Þ].† –^Ö]'†ÿ‘S#I CÎ? †h� :ß4—]Þ&ß(½2“� '*�;&† Þ4æ'ÖR'_Þ4Š€§\ß4Ñ]' ½2“Þ4� &ëo9–S'Ö…Å'6½752J.ø9½.=–]-&–^�#½"¥ ½.=Þ].O—ƒL—y~9;]^½1)�&½1&½3À&¦…'Ú|^ Û½"… Ð}„'O—ƒJ—y9~"•–„'ùJ—„9½.=Þ]'·�µÞ]-á–^*½"¥ Ø—yƒ9½1)�&Á,'õ9�'½"… ëÎ+˽3Å&ó¦î­ Û6½1)�&Á5'|Z9½.(–]& 2—54–^Þ4§92~"¥+Í+Ö;%MCM+à;(þNMCM+è;%LN+ñ;(ïNLN+ù;% LF,;(ßNLF, ;%@DMP,;(¿NDMP,;%€EL,&;(NEL,.+£‘WI,6+£’DE,?;%LST,I;(÷NLST,Q;-DO;0þNDOÞ†-½"•–„'½"•–R'½5½9æ–…Š—…½<�½;5¾ ;½-ó½9ѽ-V~!ƒ|p�a½75½75Î7½8|Öx'%Á'&Á™&Î,ß½8|OÖx½8”Î,Õ½8|†½:7p~*ìÎ,Ó íÎ,é èNo Errors. At Least One Error. –™…€'uÖx'q½*ìÎ-H½8|½75Þt'aÖˆ7¦æ½8™†-½7Þt¦æîßt½8”Öˆ2‹ Á "† ½7Z.ø–ˆ‹ ‘‘#Å ÀError Lines: Æ Î?’ß4î'¦Š§ ôÞ4Z&ë9ÎpoŒ…&øÎÿÿ߆†PÖ™SÅ &Š—…Îß~ßzÎ7¡ß“Î>ßq9Î oŒ¤&øÎ>`oŒ@G&øþ  ß‹Î�ß4Î-ã¦ß6Þ4§ß4Þ6Œ-ó&íÎ?tß�½7©½:p9?á@E„B7¡?Ò?ÞÈ@GO—�—‚L—R–™„Η™~:Þ&ß('Z O—]—^—W~"…½1)|Z�'ì�Þ(9�'½1)|Z�'ó~"�½3i�ÈŒ�é–W…'âO—]—^—W½"¥L9Ÿ*O—W†6�`.ƒ.x.Á.°.Úž*O—]—^|Z~"�½4D–_„š3 W—W–^Ö]67�0.š.k.k|ZÆ×[0Ö[Äðá#8–™…&2Ö[7 ©�¤½1)�'Ê °½1)~"LÁQ'½"èAB$S&›Êp Ù–‚Ö� ­~.k¦½"L0 A/1B/AQ0R0$a/I!/k$/s"/{T0(S086/‹5/’2/ž3/¤1/˜4/ªq/ñr/ãs/øt/ý7/¶8/°:/¼9/Â~.k�P«é§ç111~.œ�@ â î�8m, TFl&úl-ö Ü.m'ÖHYj&äj ö�ªê Ä�¤ä ¼�¨è ´0¦æ9�;'¨L ¥�4'ù Ÿ�..ó ™�(-í “�",ç ��/á ‡�%Û ��"Õ ø� #Ï ò�$É ì0¦ ¦¢&„ûÄ_729O_0 â§ç~/=0¦æ ò†ÿ è_O0î0.åL â~.­Ö[Á&÷2—]3×^19�%�k–1Ö00 �� õ�–1Ö0Þ2'ï‹É é� –3Ö2 á†�O0îß,0îß.M'9Þ.&ß0ß2~"�Þ,ß0Îß2Æh1i0i3i2–3�/6–2’.%—22—3l1�1Z&á9Æ×0O_Þ.ß2ÎXIi3i2$Û-™,j0.ð—0×1Þ2' 9½2“½"bAZ0Êaz0È090ÍÎ0Ð~2õ‹àÆ9Æ9:$@%'() ;,.€ 0î11Xë7æÉ70î11în�$|Z�&Á,…9�ï'û~"…��&úÁ, '|Z 9–Z' –XÖYZ9ß(�ø½0¯½0ì1?2@1Á2¼2Ã2r2¢2¥2·2©2ÃO—XO—]—^�@'½"� .!7x^y]$½"�T&ò3›^—^� '冗X×YÞ(96�'2‘X'í 1½2œ½"© Þ7½0¯½"b091¼AZ1¹†ZÁ'3~2œ€7Œ€0_39Þ(ß4€0—^]½0¯Á&!€06–]Ö^XI76XIXI0ë‰ë©—]×^111 ؽ2œÁ&†—X×Y½0¯Á'õÁ'ñ–XÖYÁ' ½2œ½"©~1�Î2-½2õ)ïÞ4 ß(€7~1VHOQB€$@%€~1UÎ26½2õ(õÆÎ`§×`ß4½0¯Á'Á& Ö`Á'ï\Þ4 ㆽ2œ~1ƒÞ(¦� 'Š€§ß(„—^]~1�½"±O ò ÜÞ(¦ß( 9Þ( ß(9†Œ† è�è� 'ú� 'öß(† † Õ† ½2œ ô� - �_.Î3�%(† º],P† ²�²�30�m,ð½2œ]&ê ßæ¡)&ö90îë7Æé70æËç$lî119+¿-¾&Ü*¯#/!\ <>=€#a€6/T€R!"€!<:€S<8=4€2>7/9=3€1<4>3€5Þ$½15�&½1)�9Î'ë~3ÅÞ&½15 ½"�½1)�'ù�&òÁ,'îß&9Î[æOI©Z&ù„H‹’6†?‰60î119–ŒÖ‹Â67�œÒ›"11Î90î11ß‹9�ÃŒÞ8–`ß8î'#¡&öß8ß4ÎaŒÞ6æß6Þ4á&Ýß4J&íÞ8O9Þ89Ö`Ë7½3£&½"­þ4ÿ>uþ4ÿ>wÎ>r>t1 ,?ß43Î[ß6¦Þ4§ß4Þ6Z&ïÞ8–‹§–Œ§Þ‹ooß89½3À' †—_Îß]�Ÿ¦—_Чîß]…'½"‰…'½"‘9~3ó†�Oš_—_½3À' –R'ì½"µ 禅'<…'�>Þ8¦…&(…&Ö_Å&$Þ8îœ]'½"µÞ8¦„š_§–]§–^§9–_…&禄þЧ~"�Þ�ß]O—WOŒ†šW—_Þ"½15|Z½.»4ù4þ~"}Á,'ï9½4z é: –R'Y– Ö…„—p&Å'K– Î5g¥'å'>m&òÞ•½8|½8÷– …&† ½7Ö}–|½8™Î5½8|Þ�½8| –ˆ'½75– Š— …& p9@@Î5ìtvvw$ßBÎ7½8|ÞB½8|ßB½75ÞB á¦M.ú'Ù� Å–R'!–™…€'Îtß4Þ4î'ß4îœz&òÞ4îœ|&ê9ƽ3£'øß6oo–zÖ{§ç–|Ö}§çÞ4–6Ö7§ç9Illegal Label.Syntax Error.Illegal Argument.Undefined Symbol.Double Definition.Use of Doubly-defined Symbol.Nesting Error.End of Source File Encountered.Overflow.BRA/BSR Out of Range.Illegal Value.Illegal Digit.Out of Memory.Illegal String.Phase Error.Register Field Missing.ÿ *** 7�39M+� ']„� ' �.‹@6†^�2Œ† ÖR':„� '5֑ш#.ÖS& 6Ö’×S½8 2� -|ˆÖ™Å'6ƽ 2Öp' ÖšÅ'~:79ˆ�ÌzS9Ö‘ш#ð† �®–ˆ'èÞ“_¡'á"\m&ô]'Ö Þ%-5=Î>`ß4½ 5� † §ß4½ 8ŒÞ6æß6Þ4çß4J&ïo9½97�2Œ† ~7 MAL/6800 1.3: ; Page ; Form (–S� "†—S9–p6p–“6–”6Î8ß“Î7ß�R–��¤–‚� �¦Î>„�C�ŸÎ>¢�<½75Î>`�4Î7ö�/Ö–~�AÎ~½"=Î7þ�Ö{–z�0½7ÚÎ? �½75½752—”2—“2—p9¦&9ß@ÖA7Ö@7½70î11 è76_ 76Æ 0¦ç½906¦ç½97Æß@�0&¦'½7Þ@Z2&ï9½72Z&ù9Ö£&6�F2½9kÞ�ß�Þ¡�%§çoœ—'œ—'ß¡9½5£Þ•ß¡o9  ñ6�2DDDD„‹0�9/‹9Þ¡–��¿–‚�»† §—£ Ï– Š— � *S*9Þ¡–£&� Þ¡–]�“–^ �0î11¦ß6Þ¡§'ß¡Þ6 îÞ6nÞ�Œ?‘&�*ë§ç|Ÿß�90î11¦'�  ÷n½9�7Æ~::ÖR'/Ö™Å')6ÖŸÁ##�ÑS1L�ÚÎ?t¦�Óœ�&÷¦›ŸLC�Æ�´ �6Î?toŸß�–��”–‚��29Ö™Å'�°�’S9 9–\&ƽ ,—€Æ½ M'ñ� &֙Š&ç\9ÆÎ:~ &6� ' � ,6†^�2‹@�297Æß<½ 7ß<ƽ M'ø3Þ<90î11¦�ɦ&ùn_�Þ§'ú\� &ôo9½:P SOFTWARE DYNAMICS MAL/6800, Version 1.3 / 77E4 Ÿ*Î:¦ß‰½:PSource File=�^'çÆ½ Î:Ä߉½:PListing File=�?&†ý�F ƽ †�8Î:í߉½:PBinary File=�&†û� ƽ †�Î )߉9Þ�½:`Þ�Z9š™Œ”™—™9ššŒ”š—š9ƽ –™…'ƽ –™…'ƽ ½ )7½:PI/O Error #3O‹Z&ú½9½:"½:"½:P Þ‰ž*n4 Þ�ß –s&A–R&)ß6†>½:"½:`Z'-˽3£'&ß4Þq–4§–5§�<ßqoo9ß4Þqî' ß6�)Þ6ßq9zs½9õ� &½"/ ô½9õÞ §œ�'ß � &îo9Þ6¦ß6Þ4§ß4M&ï9–™C…B&½<”½<ž½75Þ]&ÎI~8|****Þ8¦�Þ8¦½9�× Ô5 6 7 Žqzήÿx În0ÿxÆ}Îx ?þx† §½ �ÆÎpoZ&úÎn0¦� 'ù¦� '� &õ ÿw÷ÿwÿwõþwÿ¦ÿwÿ� '+�;'|wõ êþwÿ¦ÿwÿ� '�Z.€@/ÎpJ&ü†§ Þþw÷¶wõ½u În ÿw÷þw÷¦' ÿw÷_½sÒ ï~u‚ILLEGAL SWITCH  8 OöüôÅ&)V$öüõÄÁ'Á'Á'Á'Á' 9† 9†9†9†@9†€9½vñ½w½w5þwû?½wí& … &~w´† †0þwû§†§o¦æË‰§çoo?½wío)o*o+o(o'†§o¦æÀ‚§ç¦æ§ ç 9½vñ½w½w5þwû?½wí& …@&~w¶† †3�“†ÿ§ § 9½vñ½w+¦… ' ½sÁ½tצЧ?½wí?½wí9½vñ½w+¦… ':½sÁ½t×þw÷¦&0¦+,æhYI+$þwû§ç½t�þw÷æTOþwûë ©§)ç*o%o(9~wÄ~wÀ½vñ½w+½sÁl%¦&&.¦(&#½s$#M'ø+� 'ò�'î�"�"æ�#9„§(j(† 9�† o%9½vñ½w+o(½sÁ¦&&½s$9�O9†§&9¦„�'!Å ' î)& ½t�% 9î)¦þwûl*&l)½tÉ 9~wÄî)&LþwûîæþwûÅ'îÆ€? þwûOë©§ç ¦æË‰§ç?þwû¦' � '� '¦~wᦧ)¦§*î)¦þwûæ*á' l*&l)� &–o)o* 9½vñ½w+� o%¶wõ½t96þwû¦''Š€½to'29½vñ½w+l%¶wõ� &æÅ 'l'æ'Á&†ÿo'½t9�È�"öo% òæÄÁ'(æÅ '3î)&6½t�2þwûo+l+l*&l)î) §½tÉ9~wÄîæÅ'õ·xÎx? 9þwûî)& þwûæç)æç*î)§þwûæ)çæ*ç� ' àÁ'l*&l)9þwû?½wío)o*¦æÀ‚§ç9þwû¦§)¦ §*o&¦ +æ à¢% ?þwû¦'� &Ql&l&lîÆ€O?þwû 9 9þwûæ* â"æ)â!%,þwûæ+'!6m&jj?½wí¦ æ ¡&á%§ç2o+o)o*9~wáÆ½vø½w5þwû?½wí'†0þwû§?½wí¦Š§†ÿ§ § ?½wí9~w¼Æ½vø½w5þy�ŒDK&/0¦î111Æ ½vø½w5þy�¼y¹&¶y�±y»&ÆÎu{?]&9y�y»~wº�?ƽvñ¦…&öwö½rIzwööwö*é96ÿw÷¶w÷öwø76�ؽvä0î112ƽq¯ÎÿxƽvwM&\ƽr¸�S&ïÆ½r¸�9'R�1&âx�S€·x�L·x�G·xþx&þxÿx�7zx'öxÁn"&Æ$ñx#þx§ÿx Þ|x'œ~w¸Æ~wÚÆ½rIþxnƽr¸�$HHHH6ƽr¸�$ 3ûx÷x911 É�9#�G% 9�0%ú€0 9�A%ò€7 9½vñ½w+¦&9½vñ½w+¦%9Îv•†9Îvœ†99-06-7812:01 AMÆ ÎyÝÿwý½vø†§¶wýöwþ§ç§ç þwýÆ?'ÿwý¶wýöwþÿwýþwû§!ç"zwööwö*ÈÎvî†_½q¯9#CN¿wùÁ"¿wù·wõ÷wöÿw÷XÎx?'îÿwû9~w¬¦…'o%o&o'o(o)o*o+9~w®¦…&9~w¾þwû†D§†K§ †S§†A§†0§ Æ ?'ÿx Æ?þw÷ÿx öwõ'MÁ‚"IÎn'ÿxÎx ?þx†;§† ·n&În&ÿx Îx ?Å&#Å&Å€&9þwû¦ æ §ç 9M*_þwû? 9�$�"� ���������� � �����0æ11ÀJTO¾wù~ Oˉÿ¾wù~ þwû¦&í9x%xQx}x©xÕyy-yYy…y±9 ~mdååå}uA•€¿xÀ ð~"~,‹n$~q¯~rI~r~u~u@~u ~r¸~rú~sÒ~s°~rl~u‚~vw~v€~v¤~v‰~v�qzpNp~ðó9~w¢~q{n&„oípoî† Œ†ŸF›G—G$|FžFÞDßD¦H%—eÞdîn—gÞfînÞDßD¦H%í—eÞdîn†›E—E$|DÞD¦H%Ó—eÞdînCOPYRIGHT (C) 1977 SOFTWARE DYNAMICS ALL RIGHTS RESERVED"ÿ"ÿ"ÿ"ÿ"ÿ"ÿ"ÿ"ÿ"ÿ"ÿ"”"á##"À"ƒ"³#)&Ë&d&ã((r(³(ö)t)Ë)´#ý$$Þ#Â#å$N$Z$~$r$ì$ý%% %%*Z*e*l*^*Ö+3,x+Ý+²1%0 0=0%&»4c&î'&ž'×5¿5ì624â5þ-9-è4u/;4³.û4”%%!%'%-%3%9*w$f- ,þ&0:Y9_9U8e7Ÿ#Q76™#;#E5 4Ú5A4Ô5,&’7q,¹,°4E#@+#,'B&0&T"b4?+X+‘*�5[5x'¹%ò%Û3¸3è%÷).9Ò9#~+Ù3… h,|00îßh¾ ;Îß$ß�ß‘ßAß*ß.ß2ß4ß8ß;ß,†!—d†"—fþ Oßbþ Rß^¶ Q@—aO—`—&—'—=½ 2Þh¦�'~,x~ jÞDæîßQÞD¦ßDÞQ§ßQZ&ïÞD~ jÞD½A%0¼ ='M†~ —ÞDî¦6¦6¦6¦6¦6¦60¼ =',~ •0îæ0oç~ hÞDOÆÿ½A¼  ßD0¼ ='~  ÆŒÆ~,Š0î111111¦6¦6¦6¦6¦6¦6~ hÞD¦6O666660¼ ='Ì~ hÞDæ¦76444O60¼ ='¶~ •0 Î;J½A%0¼ ='¤~ hÎ4 ïÎ. ê0¦*ˆ€§~ h0¦'%½EÄ0¦+½E„  ½C  0¦ª'½Cé 4O6~ h0¦'* Î;~"䦪'†§oo~ h23—Z×[0¦&½3Ú0¦&ί½;¼½3Úί½A%ÞZn½$< �ÓÎ$4ßá½<(~ hî½6S  ê0§ ç ~ Y0¦&½#œ ¦'÷Î$4ßá½@» Ô�=  ½#œÎ$4ßá½>« Ãë©$ ë�$ ½#œÎ$4ßá½>¤ ªà¢%í§ ç ~ YÆŒÆ~,Š0¦ª&¦ æ 9î11n�ì  ãä¤ Ó�à  ×êª Ç�Ô  Ëè¨ »0¦&Àcc~ h0¦&´¦*7Î;j½A%½>«0¦*F½EĽ;²½C  !23‰3‰3&]'0¦DfZ&ú§ ½(7 o o ~ hM&ö]'÷0¦hIZ&ú ß~ Y0¦&½3Ú½;²~ h�Q&†—C~ hC~ h�@&ï ô�:-é î�4/ã è�..Ý â�(,× Ü�^'Ñ Ö�X&Ë Ð�R-Å Ê�L/¿ Ä�F.¹ ¾�@,³ ¸23—\×]0¦ª&'¦ ¡&¦  '$†ÿŒ†ŸFÆ ÛG×G$|FžFÞ\Mn½#œ½;Þ ó23—\×]½0/ßK0î Œÿÿ&0îîßIœK'ÖJÐL–I’KFŠ—:* ÞI'® :ÞK'"ßã0îßQ0îŒÞM¦ßMÞQ¡&‹ßQÞã ßã&é–: „½ 8 ßF6_7–G6–F647~ h½ 5 ç½0/ßF0î111111–FÖG½/w áÆ~,н0/ßF0îß�–FÖGÛ�™�—‘×’~ YÞDî¦�o&æß�OÛ�™�—‘×’~ •Æ~,ŠÞDæOÛE™D—D×E~ ‚ÞDæ7O6ÛE™D—F×GÆþ†ÿÛE™D76ÞFßD4O60¼ ='~ ‚Æ~,Іÿ66ö @¶ ? †ÿ66¶ Kö L76O660¼ ='~ hÆ~,ŠÖYÐW7–X’V6–VÖW ÝÞD†ÿ66¦æ76O660¼ ='Ö~ •ÞDî¦æ~#þ Koo¶ Mö N§çßX½0/ßã'2þ K–ãÖäë©¡"&&á" §ç0îŒÞF¦ßFÞX§ßXÞã ßã&ë~ YÆ~,н0/ßK'l0î Œÿÿ&0îîßIÖJ–IÐL’K%Nˉ—F×G0îßM0îßQÞQßSÞKßãÞMß: MŒÞO¦ßOÞS¡&ßSÞã ßã&é0–MÖNà ¢§ ç ~ YÞF ßF&Ä_O0 íÆ ø½(7 Æ ~,Š0î¡"ô&á"î§ç~ Y�^  UËÿ‰ÿ$O—F×G0î¦æÐG’F%>0§ç–FÖGë©§ç~ h�-  $Ëÿ‰ÿ0î¡"&á"0ë©§çO§†§~ hÆ ~,Š23—Z×[0¦'&Î;j½A%½>«0¦+½C 111111ÞZn23%õ' ñ111123ÞZn�à  º0§ ç �¸  ¯Ëÿ‰ÿ—F×G0î' 0ë©%›î¡"•&á"�0–FÖGë©§ç~ h†—:½(7  3XI%/×G—FXI%'Û:‰%!ÛG™F%0ë©%î¡"&á"0§ç~ hÆ ~,І—:½(7  ð—F×G½(7  å0î6–F¡"Û&–G¡$Ó2î½6S  ÉÛG™F �ÞDî3ç2§2§2§2§2§]'*ßF½E„  !½A%½C 111111 23‰23&ÞFo§ç~ •0î 3ç2§2§2§2§2§]'%ßF½E„  ½A%½C ~ V23‰23&ÞFo§ç~ Y0¦'Æ~,Ц&÷¦î§~ V0îßM0îßQ½0/ßK0ßFî Œÿÿ&0îßFîßI–IÖJÐL’K%ÞKßãÞF–ãÖä§çÞã'–MÖNÐR’Q$ÞQ¦ßQÞM§ßMÞã ßã&ë~ V–MÖNÛä™ã—M×N–QÖRÛä™ã—Q×RÞQ ¦ßQÞM §ßMÞã ßã&ë ΖC& ÞDî~ k–C&õ~ •_–C&S×C~ h½(7 ÞDî �$  ôÞFî~ k½(7  æ�  àÞD¦æÞFî :Ëÿ‰ÿXI%ÛE™D%ˉ%ÞD¡" &á'"—F×G90î11nÞD–DÖEˉîßDÞ^¼ T' ß^§ç–AÖB§ç~+ÝÆ~,н(7 †ÿ—ã×äÞã'Þ^¼ R'7ß^Þã ßã&ì þ Rß^~ hÞ^¼ R'¦æ—A×B¦æß^—D×E~  Æ~,ŠÞDîßFî½A%ν;¼ÞFî½;¼–DÖE764444νA%0¼ ='ÞF~ jÆ~,ŠÎ½;¼0î ßDîî½;¼111111νA%~ •0ŸF�¾ ;~ •ÞD¦6¦6¶ <�GTHHHHH@~FÞDnÞDß;ßD îßA–&…P&œ$&4½8SqLINE6 =45�ÞhßD–&'…'½ Hš''M'õ…'Ö&Äï×& ½ Hš''M'?…€&>Ö&…@'È@×&…'Ê×&… '%½8Sq BREAK ON LINE? 6HF} �ÞhßD– &Û~ hÆŒÆ Æ Þ,,- &#O¾ ;—8×9ÞAß2Þ;ß,Þ�ß‘Þ*'ß;îßAÞ*~ kÞDîß*~ •–8Ö9Þ2½ EÞ8&Î,Ò~ kÎ,ß~ kq STOP6.,ìq ERROR6^4 AT LINE6j45�~ )0¦&1îæ~"¸0¦&%¦&†F¡ "&†¡ " ¦& ¦î §~ VƌƌÆ~,Š0¦ª'½#œ0¦æÞbŒ�u¼ O'¡&õá&ñ6œb'¦§ õ6|`|a'H†ð›c—c%zbÞb2§ç2§2§2§2§2§2§2§ 2§ 2§ 2§ 2§ 2§–DÖEˉ§ç~ YƌƌƌÆ~,Š6ßF†›G—G$|FÞF29zaz`†›c—c$|bÞb9ÞD¦æÞbŒ�ϼ O'¡&õá&ñ¦ßFîª&+ÞF¦æîë©%}§çÞF ⢠$î~ k�¨œb&ú�¢~ • ^¦6¦6¦6¦6¦6¦6ßFî½A%Î-½ßá½>«ÞFî½;¼ÞFî½A%ÞF¦6¦ 6¦ 6¦ 6¦ 6¦ 6½;Þ'.ÞF¦*ž £ÞF¦+– ›ÞF �ÞFî¦&¦6¦6O66½CéÞFî½;¼ÞF¦&�¦6¦6O66½CéÞF2§2§2§2§2§2§ÞF¦6¦ 6O66½CéÞF2§ 2§ 2§ 2§ 2§ 2§~.7ÞDß(þ KßVßFþ MßãÖU& ½ Hš'—'+ ÖU½ ÞF§ßF� ' Þã ßã&ÜÞF� ßX~,(~,u–XÖYÐW’VÞV�0 )–U'Æ~,ŠÎ/X~ k INPUT ERROR 6U�Þ(¾ ;~ kßV~ h—F×G23—Z×[–FÖG½A¼ ] lßÚÞFßã½A¤� 'ù�:&[O——׼A¤�0-*�9.€0 �A-�F.€7Æ×ÄHHHHÆHyÃyÂ%(Z&ô ÏÖÄ'ÖÃ7ÖÂ7444_7ÞÚ ¦�,' –ZÖ[769ÞZn†?_½ �~ hÞ�œ‘' ¦ß�ÖU½ î9�ë† Œ† ÖU½ ~ h0îŒÿÿ&0îî9�ðßã'0îŒÞF¦ßFÖU½ Þã ßã&í~ Y—“×”O—†—‡—ˆ—Ý—‰—Š—‹�W�$&|†�N�-& |‡ �-'÷Œ�>�#& –ˆL—ˆ� #ñ�/�.&|Ý–ˆ� "� �#& –‰L—‰›ˆ� #ï�Ö†Ú‡&6�-&|Š «½C  10oo0ÖU½ &1111~ hÆ<~,І—H2ÖU½ #zH&õ~ h0îŒÿÿ& 0î¦æ§çîßã'0îßFÖU½ ÞF§ßFÞã ßã&í~ Y½0/ßã'ö0îŒÞF¦ßFÖU½ #Þã ßã&í~ Y—Â×Ã߯Î߷ΰ–¯'ίÆx¸y·% h$–Û¸—¸–™·—·%Z&㌱&Û–·Ö¸90î11nÖ…7–„6–ƒ6–‚60Xy„yƒy‚Xy„yƒy‚ ©§¦™„§¦™ƒ§¦™‚§Xy„yƒXy„yƒ«§¦™„§¦™ƒ§Xy„ëç–„©„§—‚׃îß„½CéÎ;z½A%½<(~ hÆ~,Š0¦+ö& ¦ª'ë½3Ú½8S�0¦€@GÆp$Æç‰@§†—H½8W}p p p ;Š �zH&ç½8W}p}v p�~8;½8S}v€}j_[}p%�–C'–p& ½8W}v� oÞhßD~8e½8S€}j_[}p='”‡XB>y™4D>$y”w?˜9 5?ˆˆ’V?ƒ33a@ffg@ffff@PAApvAq‚�‚�–p&>Î8@ßáttvu$½8W v�Þt'½8W v}v� Þ–j*½8W}p ; p �Þh~ j–j* O0§§§ íÆ~,ŠÞDßh23—D×E~  Æ~,Š0¦+ö& ¦ª'î½3Ú0æ†@§OÀ@‚6666XIXI0§ç½Cé½8S}p ;¬'+8­ ;¬ p ; .8” ;  ;Š Á–�8Axƒ1‡Áq˜‰ |AÁA—%1AQA#V'Á5™ ™ pA’U�Þh¦�Y' ½8W v.7¢~8;0¦&½3ÚÎ|½;¼ÞDßD½A%ÞD¦'ßDÎ|½A%0¼ ='½<(ÞD½A%½>« Ù~ kÆ~,н8S ;Z.9b½8S€ ; }j_ ;Z [ ;š [ ;š}p�–uG$ ½8W ; �½8W=4(y0¾Gˆ?hQ¿yi&&@E–@•Àpyc' j p ! ; �~8;½8S€}j_ ;Z [ ;Š [ ;Š}p ;Z�–uG$ ½8W ;Z�½8W ;Z ?R†DEUÀˆvb7pA’!P |@ÁQ2aAE)3  ;  ;Š j p ; �~8;½8S€}j_ ; (+:p ;.:} ;  ;Š ;¦}p¿F&˜@$8(AB‰AAT#yCA8ƒ&$ |AA–%hAQTuA8ƒ&$ p j�~8;A Áÿ™™™™™ !$'™™™™™ $(26A’e %05@EAW–3$06BHT@P!(5BIVc<ef‡$2@HVdrA '6ETcr�AA@xS˜5@1b'v`0¦'ˆ€§923—Ô×Õ2§2§2§2§2§2§ÞÔn¦+ 00æ+õ¦+'á&¦ ¡&¦ ¡&¦ ¡& ¦ ¡&¦  ' "†ÿŒ†Ä€ŸØÆÛÙ×Ù$|Ø0îžØMn23—Ö××ί½;¼Î½;¼†;—ÊÎ߷߹߻߽߿–¯'V˜Â—µ–Â'M„Ä€€—¶ÎÁßÌεzÍ ßÎŒ¯'1¦'ñ—§·ÞÌÖÇ�%ÖÆ�!ÖÅ�ÖÄ�ÖÃ�§†›Í—ÍÞÎ ßÎŒ¯&Ï~@j')�8›·×·$«§–·$‹—· 9«§–·$‹—· 9–·' «§†‰—· 9ßÌר–§„ðÄ—ËÞʦ—©–§Ö¨„Äð—ËÞʦ_›©$ÆשXXXXתDDDD›©—©–§Ö¨HHHHÄ—ËÞʦ—«–§Ö¨„ðTTTT—ËÞÊ–«›ª—ª¦™©–ªÞÌ9&†™�È×È �…›È6É—È3†™vÉ©§yÉ 9–¸Ö·�%–¹Ö¸�–ºÖ¹�–»Öº�–¼Ö»� –·&–½Ö¼�~@j�i–§'a_×È\×ÉÖÇ�žÖÆ�šÖÅ�–ÖÄ�’ÖÃ�Ž�ŽvÉ%3–§‹™—§–Ç« § –Æ© § –Å© § –Ä©§–駆©§$Í–§§†›Í—ÍÞÌ9§9&Æÿ×§†™|§›Ã$ø9ÑÃ'#†™—§9—­†ÿ—§†™†™�­TFv®TFv®TFv®TFv®Ê�|§›Ã$ø—­‰–­$í–§HHHHJ—§†š�Û­6‰™2y®IYy®IYy®IYy®IY|§›Ã$ø—­‰–­$í9†€0¨§23—Ö××0¦¨—µ¦„Ä'*W3×Â3×Ã3×Ä3×Å3ׯ3×Ç3ׯM&]'Z3×°3×±3ײ3׳3×´ ?3L&×±3ײ3׳3×´_ *L& ײ3׳3×´_ L& ׳3×´_ .L&×´_2׳2ײ2×±2×°–„€?—¶ l1ÎÂ1111~A+1111~A=3×Â3J&×Ä3×Å3ׯ3×Ç_ (J& ×Å3ׯ3×Ç_ J&ׯ3×Ç_ J&È×Ç_2ׯ2×Å2×Ä2×Ã3ׯ3×°3×±3ײ3׳3×´–¯„€?—¶–µ+~@<Î߽߿ßÀÆ™†š�Ç›´—¼‰�Æ›³—»‰�Å›²—º‰�Ä›±—¹‰�Û°—¸%P‰—·%B†š�¼‹—¼‰�»‹—»‰�º‹—º‰�¹‹—¹‰�¸‹—¸%Y‰�·‹—·†€˜¯Œ–¯—µ 0 G_–´›Ç—¼–³™Æ—»–²™Å—º–±™Ä—¹–°™Ã—¸–¯—µ$!É×·_ζ¦&\Œ¼&õÎ; ;†€˜¯Œ–¯—µÆη¦'â–¶�?.‹@'Þ+Üֵ§ Î;:½A%0–µ„€ª§Þán p23—Ö××ν;¼Î·½;¼†;—ÊÎ߽߿ßÀ–Â'Ș·—µ–·'’„ÄL—¶Î·ßÌ–Ão„ð&&ÆxÇyÆyÅyÄyÃx¼y»yºy¹y¸y·Z&Ü~=z23—Ö×צ6¦6¦6¦6¦6¦6ÞÖn�a�E �.&–Ü&L—Ü íHHHH§–Ü& |Ý*11~C90î11n�2� �.&ï–Ü&ëL—< Ü íª§ Ð�0- �9.—߀09—­23ˉ76–­9ßÌÞã' ßãÞÚ¦ßÚÞÌ9ÞÚO õ—ã×äO—Ü—Ý—ßßÚßÒÎ߷߹߻�Î� 'ú�+'�-&†€—·�¼�0&—ß–Ü'ôzÝ+ï~C�.&—Ü äθÆ×ÞŒ�˜½AC  ��½Ar  zÞ&é��½AŠ ùÖß&~CÞÚßÒ_×ß×µ×¶×à�E&>½A¤�+'�-& †€—µ½A¤ ½A¤½AŠ  Ö¶X% X% Û¶%X—¶$䆗à Þ–ß&ÞÒßÚ–¸&—· *–à&UÖ¶'–µ*P†ÿ�O—Ì×ÍÖÝOY‚GVÛÍ™Ì' �ÿ'M*/Î; =GV$†t¸v¹vºv»v¼J&î\)Ë@) /Úڷ׷η –·*Î;* Î;:23ˉŒ23—Ò×Ó½A%–ÒÖÓ76ÞÚ 9ÞÒ23ˉ7690¦„�F,i�@. O§§§§ RO—¹—º—»—¼Ä¦DDDD�M  B¦„�C  8Z&æ0¦*†�¼—¼’»—»’º—º’¹—¹)–¼§–»§–º§–¹§î1111n0î11n—·–¼H—¼—À–»I—»—¿–ºI—º—¾–¹I—¹—½%Ùx¼y»yºy¹%Ëx¼y»yºy¹%½–¼›·$›À Œ›À—¼–»™¿—»–º™¾—º–¹™½—¹%›923—Ö××O—¸—¹—º—»—¼2—½2—¾2—¿2—À_–½*�À—À’¿—¿’¾—¾’½—½Æ€×µÆ xÀy¿y¾y½%Z&ïÎ;~A+xÀy¿y¾y½–¼™¼—¼–»™»—»–º™º—º–¹™¹—¹–¸™¸—¸Z&Ζ¸'Ö¼7Ö»7Öº7Ö¹76†E @–¹'_7Ö¼7Ö»7Öº76†D ,–º'_77Ö¼7Ö»76†C –»' _777Ö¼76†B –¼_77776†Ašµ6ÞÖnßÚ23—Ö××2—¶†—§2DDDD‹0§„‹0§z§&èÆ+–¶*Æ-ÞÚçÆ.çÆEç Æ+H+Æ-ç —¶¦�0&z¶† —§¦§z§&öç–¶€€6*@—®O—©—ªÆx®–ª™ª—ª–©™©—©Z&ìÞÚ–©‹0§–ªDDDD‹0§„‹0§† —§ ¦ �0&Zz§&ó2]&OÞÖnæ';Ħ&+¦&!¦&¦& Á@"!23ˉ769ÁA" ñÁB" ëÁC" åÁD" ßÁE"Û923—Ð×Ñ0æ×µÄÁD"Á@"111111–µ*Î; Î;½A%ÞÐn†E­0 æÚ­×­oJ&ô–µ*å–­'áÎ;½A%½>« ÖÞF9= > ? Žqzήÿx În0ÿxÆ}Îx ?þx† §½ �ÆÎpoZ&úÎn0¦� 'ù¦� '� &õ ÿw÷ÿwÿwõþwÿ¦ÿwÿ� '+�;'|wõ êþwÿ¦ÿwÿ� '�Z.€@/ÎpJ&ü†§ Þþw÷¶wõ½u În ÿw÷þw÷¦' ÿw÷_½sÒ ï~u‚ILLEGAL SWITCH  OöüôÅ&)V$öüõÄÁ'Á'Á'Á'Á' 9† 9†9†9†@9†€9½vñ½w½w5þwû?½wí& … &~w´† †0þwû§†§o¦æË‰§çoo?½wío)o*o+o(o'†§o¦æÀ‚§ç¦æ§ ç 9½vñ½w½w5þwû?½wí& …@&~w¶† †3�“†ÿ§ § 9½vñ½w+¦… ' ½sÁ½tצЧ?½wí?½wí9½vñ½w+¦… ':½sÁ½t×þw÷¦&0¦+,æhYI+$þwû§ç½t�þw÷æTOþwûë ©§)ç*o%o(9~wÄ~wÀ½vñ½w+½sÁl%¦&&.¦(&#½s$#M'ø+� 'ò�'î�"�"æ�#9„§(j(† 9�† o%9½vñ½w+o(½sÁ¦&&½s$9�O9†§&9¦„�'!Å ' î)& ½t�% 9î)¦þwûl*&l)½tÉ 9~wÄî)&LþwûîæþwûÅ'îÆ€? þwûOë©§ç ¦æË‰§ç?þwû¦' � '� '¦~wᦧ)¦§*î)¦þwûæ*á' l*&l)� &–o)o* 9½vñ½w+� o%¶wõ½t96þwû¦''Š€½to'29½vñ½w+l%¶wõ� &æÅ 'l'æ'Á&†ÿo'½t9�È�"öo% òæÄÁ'(æÅ '3î)&6½t�2þwûo+l+l*&l)î) §½tÉ9~wÄîæÅ'õ·xÎx? 9þwûî)& þwûæç)æç*î)§þwûæ)çæ*ç� ' àÁ'l*&l)9þwû?½wío)o*¦æÀ‚§ç9þwû¦§)¦ §*o&¦ +æ à¢% ?þwû¦'� &Ql&l&lîÆ€O?þwû 9 9þwûæ* â"æ)â!%,þwûæ+'!6m&jj?½wí¦ æ ¡&á%§ç2o+o)o*9~wáÆ½vø½w5þwû?½wí'†0þwû§?½wí¦Š§†ÿ§ § ?½wí9~w¼Æ½vø½w5þy�ŒDK&/0¦î111Æ ½vø½w5þy�¼y¹&¶y�±y»&ÆÎu{?]&9y�y»~@ wº�?ƽvñ¦…&öwö½rIzwööwö*é96ÿw÷¶w÷öwø76�ؽvä0î112ƽq¯ÎÿxƽvwM&\ƽr¸�S&ïÆ½r¸�9'R�1&âx�S€·x�L·x�G·xþx&þxÿx�7zx'öxÁn"&Æ$ñx#þx§ÿx Þ|x'œ~w¸Æ~wÚÆ½rIþxnƽr¸�$HHHH6ƽr¸�$ 3ûx÷x911 É�9#�G% 9�0%ú€0 9�A%ò€7 9½vñ½w+¦&9½vñ½w+¦%9Îv•†9Îvœ†99-06-7812:01 AMÆ ÎyÝÿwý½vø†§¶wýöwþ§ç§ç þwýÆ?'ÿwý¶wýöwþÿwýþwû§!ç"zwööwö*ÈÎvî†_½q¯9#CN¿wùÁ"¿wù·wõ÷wöÿw÷XÎx?'îÿwû9~w¬¦…'o%o&o'o(o)o*o+9~w®¦…&9~w¾þwû†D§†K§ †S§†A§†0§ Æ ?'ÿx Æ?þw÷ÿx öwõ'MÁ‚"IÎn'ÿxÎx ?þx†;§† ·n&În&ÿx Îx ?Å&#Å&Å€&9þwû¦ æ §ç 9M*_þwû? 9�$�"� ���������� � �����0æ11ÀJTO¾wù~ Oˉÿ¾wù~ þwû¦&í9x%xQx}x©xÕyy-yYy…y±~mdååå}¦AÆ€¿xÀ ~"!~&ìn$~q¯~rI~r~u~u@~u ~r¸~rú~sÒ~s°~rl~u‚~vw~v€~v¤~v‰~v�qzpNp~ðó9~w¢~q{n&„oípoî_~ $;"º"ß### #l#¡#Ü#�#ì#ô#þ$$$M$S$[$ A $¨"ü"Ô#*$°$Î% %B%q%y%#1#ã#ã#`%,#["«###¹ =—I×J~#<~ )Î'üßOQ_½ ÞO§ßO� '|Q*ìÎ'ü–Q9ÞKß:ß@F–2& B½%2½!÷�'½&Y'ó½!÷�&ù½"2 c½%H~"ü½&Y½!÷. ½!÷-~$Ž!÷Þ@ ß@zF†—2 :½%PŒÞ0½&0¤—2 +½%PŒÞ0½&0ª§ ½&0C¤§ ½%2Þ:ßK½"–3Ö476ß3Þ3œG'æÁ'"ß3XOËZ‰ —.×/Þ.în†~'9Þ3ßD–7—%ŸB н"–3Ö476ß3–5Ö676–76Îß57Ÿ.–.‘I"¬&–/‘J"¤†~%–2&P–7'HŸ.›/—/$|.ž.2—723—5×623—3×4Ÿ.¶ ;‘."&¶ <‘/"† ~'9~#<–2&Á~#<23—3×4~#<½"ß3~#<½"–2&ô~#<½"–2'ê~#<–2&冽 þ Þ3½! ½!½'D½%H–D'ÖEþ)½%9žB–%—7&~#<ƽ ƽ †½ þ~ )½&¿~#<Þ0½&¨~#<Þ5&Þ8ß8ß5Þ5'1½!÷‹0½&Ï–6½" –5½" ÆZ2„'ú\ 2„� -‹‹0½&ÏZ&ï~#<† ~'9† ½&Ï~#<† ½&Ï~#<½&Y½!÷. ½!÷-~"ü½!÷02¦~%„23—3×4–2&~#<–F½%’ß0–16–06Ÿ.¶ =ö >Ð/’.$ |7+½%H~"ü†½ þ~$½%2½!÷�'½&Y'ó½!÷�&ù½"~"ü½"~"Ô½%2~#<þ)–3Ö476 ß3~#<23—3×4Þ@ß:F9½!÷Ñ7/†~'9–7HŸ.›/—/$|.Þ.î9�ݽ&¨~#<–F6~#<–22& —F_›;—AÙ:×@~#<þ)ß,Þ,æ'=Z&×+ß)Þ:ß'Þ)ß)æÞ'á& ß'z+&ë hÞ,Ö-ë×-$|,Ö-Ë×-$Â|, ½Þ,L§ß)JÞ:ß'—+Þ'æß'Þ)ß)¼ '2¼ '-çz+&ㆼ '§O¼ '§¼ ' §¼ 'oÞ,9†~'9ß.–.Ö/뉗.×/½!÷Þ.„�/€ —+O Iz+*ú96Þ@Œ(û'¦�&†½ þ~$;ß@ .Þ: ß:Œ'û&†½ þ~$ÞK ßK†þ—+Î'ü¦§z+&ö½&Ü·(ú|F29æß.Z×+Þ.¦ß.�z+&ò9Þ3¦ß3�&9� ð}&'7ƽ 39ƽ ,M&Æ~ †9— ×!½ E†½ þÎß"ß#Þ –$‹—$–#‰—#–"‰—" &è–$½" –#½" –"½" Æ2„‹07½ V3Z&ó ½ þ�½!~ )Þ@+ ¦� ' ÷œ@' ¦ßM�QÞM ñÞ@Œ'ü' ß@ÆþÎ'ü¦§Z&ø½&Ü·(ú á¦ßM�9ÞM� ' �'Œ(û&ê½!z++† ½ V ô†^½ V½!96�#�_"|+½ V296�# �_" ð–+‹—+†<½ V26ß.½" Þ.Æ2„� -‹‹07½ V3Z&í†>½ V29  )/)kJŠSOFTWARE DYNAMICS BASIC VERSION 1.3-  )d )d.. )d.. )d.. )d )d )] )d&& )0 )v )l )�  )� )ŒAZ )«AZ ) 09 )– )«$$AZ )ÉAZ )¾09 )´ )É$$09 )á09 )á.. )áEE05 )õ09 )ô )û79 * 09 *09 *09 * * * *æ66 *æ04 *Q09 *L09 *G09 *F *K *P *å55 *Ã04 *v09 *q09 *p *u *Â55 *¬02 *�09 *Ž *«33 *¡05 *  *«49 *« *Â69 *¾09 *½ * *å69 *á09 *Ü09 *Û *à *å *ù.. *ùEE *ù09-- + +m09 +$09 + +$.. +# +0.. +009 +m09 +4 +mEE +h++ +U-- +U +h09 +h09 +_ +l09 +zAF +�09 +ˆAF +~'' +±'' +¦ +¦ +– +±'' +Õ"" +Õ"" +Ê +Ê +º +Õ""'' +ó'' +ó +ó +ó'' ,"" ,"" , , ,"" ,09 ,  ,M ,6  ,, ,MDD ,MII ,MMM09 ,P ,… ,f  ,\ ,…RR ,~EE ,~MM ,„!!09 ,ˆ ,µ ,ž  ,” ,µEE ,µNN ,µDD ,È  ,¿ ,Ì ,÷ ,Ú  ,Ð ,÷EE ,÷LL ,÷SS ,÷EE[(])!,O -5, .` -.` - * COMPILED BY 01/24/78 SOFTWARE DYNAMICS BASIC VERSION 1.3PROGRAM -ˆORIGIN : +o .` B JS$ -—JS$4800  JSR 8192J[$13:: SET 0!,O -Ç5, .` -¹DATA -üORIGIN : +o .` : EQU $!.A -õ .'!.A .GüJs*+2+:::JJc:: !.z .),‡   HJƒ, .K0ƒ .X,O .X5, ._.`   .y  .u  .u  .f,‡$ .¹.º .¦JHJ{3; .¥6m .¥.ç .²6m .².ç .¹.` )ã .æ .áDOUBLY DEFINED LINE NUMBER .å / .ÿ\ .û;´ / .íLET / 3l IF /;Ä WHILE /';Z GOTO /53ø PRINT /D8 FOR /Q4 NEXT /_4b GOSUB /n4r RETURN /~4– STOP /Œ4› INPUT /›7[ READ /©:J WRITE /¸:¼ RESTORE /É79 OPEN /×6Ø CREATE /ç6ë CLOSE /ö6þ DELETE 07 RENAME 07& ON 0"4  REM 0.! 055, CHAIN 0D58 CALL 0R5C POKE 0`6P DEBUG 0o6c ERROR 0~6h 3l0˜ 0—, 0“0˜ 0‰)­ 1” 0ÃDOUBLY DEFINED STRING VARIABLE 0Ç J$J.,ù 19)ã - / 1"J-*-1J{J{J-*-22û JJJ>4+/ 182J{J>4+ 1“/ 1“J-*-1JJJ{J-*-4J{J-*-22û JJJ>*-J/ )� 2ú 1ÁDOUBLY DEFINED NUMERIC VARIABLE 1Å J$,ù 2a)ã - 2%J.2JK::+7+6*J>8+6* 2`, 2`)ã - %J.4JK::+3+6*(+1)*(+1)J{+1J>4+6*(+1)*(+1) 2ù/ 2ë)ã 2ŠJ.6J{0J{0J{ 2æ*û 2¼G6Js:+GBJk''J[$DG~ 2æ: 2æ+o J.6J{0J{0J{$ / 2ï 2ùJ>6 3 3, 3 3 3+� 3Jk)ã 3'J[: 3:+o J[$FORMAT 3k+� I�J[J-*-1JkJJLEN( 3‰Fñ ) = ? IÅFñ 3ä,ù 3Ò? , 3¸? - = GlE G„ 3Ñ- 3Ñ= Gf? GŠ 3ã= 3ãE G„ CÏ 3÷= ? G~)ã 4 GüJsJELN 4JD… 4aG6JKGN= ? G~TO ? STEP 4M? 4\G<J{1 HzD… 4qH€JK)ã 4„HJsJPOP 4•? IqHHERROR 4ÑGOTO I\Js0 4Â0 4Ð)ã 4ÐJ ? 5+GOTO 4åHÈ 4öGOSUB 4öI° JsJ)ã JsJ, 5)ã JsJ 5 JJ54 5,,E 5BI@)� 5L)­ 5¨ 5V 5xALREADY DEFINED AS A VARIABLE 5| ( 5™5© , 5‘5© 5‡) 5� HJsCÏ 5ö+ 5é- 5é! 5éXOR 5é** 5é* 5é/ 5é& 5é^ 5é 5õG0B' Fo 6Bé 6 F†EkFÚ 6K,ù 6F? , 60? - Gl 6E- 6EGfBé 6D 6J ?? 6b, ? HÔI:IUDEF 6×)�  6€ 6™NAME ALREADY DEFINED 6ÖGüJsJJ( D… ) JK= ? I©JJ 7L 6ê, E I(7L 6ý, E I47L 7I., 77L I. 7E 7%I·EX 78, E I¾7L 7K, ? H\# 7Z? H>F† 7iI›H, 7‚7L 7v, 7‚I›Hæ 7�H˜7Ž 7¨7ö 7§, 7¢7Ž 7¦ Fñ 7õ,ù 7è? , 7Ò? - GlH8G„ 7ç- 7çGfHŒGŠ 7ôH8G„ CÏ 8HŒG~7L 8$, 89d 88= 8#H& I›9d 8;8= 8;H& ELSE 8ýFo 8_Bé 8V9/ 8^8þ 8úF† 8l8þ 8úTAB( 8�? ) ; Hž8= 8� 8úEk 8�8þ 8úFÚ 8í,ù 8ä? , 8Æ? - Gl8þ 8ã- 8ãGfGHB' 8Þ 9/ 8ì8þ 8ú? 8ú9/ 8ýH,, 9H†8= 9 9-; 9%8= 9$ 9-H& H , 9EH†8= 9D 9b; 9ZH28= 9Y 9bH& USING :I)ã 9€I†JsJ 9žF† 9�Hà 9žFñ 9žFR Hà , :2Fo 9¾Bé 9µH  9½H, :1F† 9ËH, :1Ek 9ØH, :1FÚ :$,ù :? , :? - GlH, :- :GfB' : H  :#H, :1? :1H  9Ÿ; :@J  :HH& 7L :f, :g , :b:g :XFñ :¬,ù :£? , :�?C  - GlHt :¢- :¢GfHnGŠ :«Ht CÏ :»HnG~7L :Ø, :Ù , :Ô:Ù :ÊEk :ãHhFÚ ;),ù ; ? , ; ? - GlHh ;- ;GfGHHb ;(Hh Fo ;CBé ;:Hb ;BHh F† ;NHh? ;YHbJJ$ ) =N? =N) =<B' =5>O =;>O =M>O =M>$ ) =øEk =bE$ >½ FÚ =¾,ù =°? , =�? - GlE$ >½ =¯- =¯GfGHB' =¨>O =®>O =½E$ =½>½ Fo =ÝBé =Ï>O =ÜE$ =Ü>½ F† =ìE$ >½ ? =÷>O NOT( > #? ) H’AND >@<Ð OR >;<� >? OR >L<� = >]? GÆ<> >m? GÌ<= >}? GØ>= >�? GÞ< >œ? GÒ> >«? GäG<J{0GÌ= >ËE H¤<> >ÛE Hª<= >ëE H¶>= >ûE HÂ< ? E H°> ?E H¼?m ?$?% + ?3?m G� ?h- ?D?m G– ?h! ?U?m G´ ?hXOR ?h?m HÎ ?%?¿ ?w?x ** ?‡?¿ Gº ?º* ?˜?¿ G¢ ?º/ ?©?¿ G¨ ?º& ?º?¿ G® ?x?Ø ?×^ ?Ó?¿ IN ?Å( ?æ? ) LEN( @G ) G`JKCOM( @? ) GÀATN( @-? ) HìSIN( @C? ) HòCOS( @Y? ) HøTAN( @o? ) IïLOG( @…? ) HþEXP( @›? ) ISQR( @±? ) IINT( @Ç? ) I ABS( @Ý? ) I"SGN( @ó? ) IöCOL( A ? ) IcVAL( AE ) IèPEEK( A6? ) HÚFIND( AYFñ FR , EX ) IRND AfIERR AsIELN A€IjPI AŒIx)Ë A˜G$)ã A¨G<J{- A·?Ø Gœ*û AÕGBJk''J[$D+× AìG<J[0JkF® A÷GHD: B+o G<J{$+ B&)ã G<J{+ B9?m G�?% - BL?m G–?% ! B_?m G´?% XOR Bt?m HÎ?% ** BŒ?¿ Gº?x ?% * B£?¿ G¢?x ?% / Bº?¿ G¨?x ?% & BÑ?¿ G®?x ?% ^ Bè?¿ IN?x ?% + BÿGH?m G�?% - CGH?m G–?% ! C-GH?m G´?% XOR CFGH?m HÎ?% ** CbGH?¿ Gº?x ?% * C}GH?¿ G¢?x ?% / C˜GH?¿ G¨?x ?% & C³GH?¿ G®?x ?% ^ CÎGH?¿ IN?x ?% )� D CÞDÝ D CêD÷ D CûG6JK DUNDEFINED VARIABLE )� D„ D*DÝ G0 Dƒ D:D÷ G0 Dƒ DKG*JK Dƒ Di( ? ) I¢Js DƒUNDEFINED VARIABLE )� DÜ D’ D¼NO SUBSCRIPTED VARIABLES ALLOWED HERE DÛ DÛUNDEFINED VARIABLE G6JK,ù ? - GrG6JK,ù ? , ? - GxEX E#E$ CAT E0E3 HDEX HJCAT EOEX HJ E?HPEkFÚ EfFR F†DATE$ E}IÌFR TIME$ E�IÓFR NUM$( E§? ) IÚNUMF$( EÇE , ? ) IáMID$( EîFñ , ? , ? ) GlLEFT$( FFñ , G<J{1? ) GlRIGHT$( F:Fñ , ? ) HVHEX$( FQ? ) Iý,ù Fl? , ? - Gl+× F…GZJ[1Jk+� F­GZJ[J-*-1JkJJSWITCHES$ FÀIG FÆFñ FÙ,ù ? - GfFñSWITCHES$ FðIGG GGTJK)­ G# G"UNDEFINED VARIABLE  0+ 10 11 12 13 14 16 17 18 19 20 21 22 23 24 D 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 126 128 130 132 133::: EQU * EQU ::I”JK::J[:: SET ::+Js:+ ORG  FCB  RMB  FCC  FDB  FDB  ENDE F Žqzήÿx În0ÿxÆ}Îx ?þx† §½ �ÆÎpoZ&úÎn0¦� 'ù¦� '� &õ ÿw÷ÿwÿwõþwÿ¦ÿwÿ� '+�;'|wõ êþwÿ¦ÿwÿ� '�Z.€@/ÎpJ&ü†§ Þþw÷¶wõ½u În ÿw÷þw÷¦' ÿw÷_½sÒ ï~u‚ILLEGAL SWITCH  G OöüôÅ&)V$öüõÄÁ'Á'Á'Á'Á' 9† 9†9†9†@9†€9½vñ½w½w5þwû?½wí& … &~w´† †0þwû§†§o¦æË‰§çoo?½wío)o*o+o(o'†§o¦æÀ‚§ç¦æ§ ç 9½vñ½w½w5þwû?½wí& …@&~w¶† †3�“†ÿ§ § 9½vñ½w+¦… ' ½sÁ½tצЧ?½wí?½wí9½vñ½w+¦… ':½sÁ½t×þw÷¦&0¦+,æhYI+$þwû§ç½t�þw÷æTOþwûë ©§)ç*o%o(9~wÄ~wÀ½vñ½w+½sÁl%¦&&.¦(&#½s$#M'ø+� 'ò�'î�"�"æ�#9„§(j(† 9�† o%9½vñ½w+o(½sÁ¦&&½s$9�O9†§&9¦„�'!Å ' î)& ½t�% 9î)¦þwûl*&l)½tÉ 9~wÄî)&LþwûîæþwûÅ'îÆ€? þwûOë©§ç ¦æË‰§ç?þwû¦' � '� '¦~wᦧ)¦§*î)¦þwûæ*á' l*&l)� &–o)o* 9½vñ½w+� o%¶wõ½t96þwû¦''Š€½to'29½vñ½w+l%¶wõ� &æÅ 'l'æ'Á&†ÿo'½t9�È�"öo% òæÄÁ'(æÅ '3î)&6½t�2þwûo+l+l*&l)î) §½tÉ9~wÄîæÅ'õ·xÎx? 9þwûî)& þwûæç)æç*î)§þwûæ)çæ*ç� ' àÁ'l*&l)9þwû?½wío)o*¦æÀ‚§ç9þwû¦§)¦ §*o&¦ +æ à¢% ?þwû¦'� &Ql&l&lîÆ€O?þwû 9 9þwûæ* â"æ)â!%,þwûæ+'!6m&jj?½wí¦ æ ¡&á%§ç2o+o)o*9~wáÆ½vø½w5þwû?½wí'†0þwû§?½wí¦Š§†ÿ§ § ?½wí9~w¼Æ½vø½w5þy�ŒDK&/0¦î111Æ ½vø½w5þy�¼y¹&¶y�±y»&ÆÎu{?]&9y�y»~wº�?ƽvñ¦…&öwö½rIzwööwö*é96ÿw÷¶w÷öwø76�ؽvä0î112ƽq¯ÎÿxƽvwM&\ƽr¸�S&ïÆ½r¸�9'R�1&âx�S€·x�L·x�G·xþx&þxÿx�7zx'öxÁn"&Æ$ñx#þx§ÿx Þ|x'œ~w¸Æ~wÚÆ½rIþxnƽr¸�$HHHH6ƽr¸�$ 3ûx÷x911 É�9#�G% 9�0%ú€0 9�A%ò€7 9½vñ½w+¦&9½vñ½w+¦%9Îv•†9Îvœ†99-06-7812:01 AMÆ ÎyÝÿwý½vø†§¶wýöwþ§ç§ç þwýÆ?'ÿwý¶wýöwþÿwýþwû§!ç"zwööwö*ÈÎvî†_½q¯9#CN¿wùÁ"¿wù·wõ÷wöÿw÷XÎx?'îÿwû9~w¬¦…'o%o&o'o(o)o*o+9~w®¦…&9~w¾þwû†D§†K§ †S§†A§†0§ Æ ?'ÿx Æ?þw÷ÿx öwõ'MÁ‚"IÎn'ÿxÎx ?þx†;§† ·n&În&ÿx Îx ?Å&#Å&Å€&9þwû¦ æ §ç 9M*_þwû? 9�$�"� ���������� � �����0æ11ÀJTO¾wù~ Oˉÿ¾wù~ þwû¦&í9x%xQx}x©xÕyy-yYy…y±H ~mdåååååååååååååååååI ååååååååååååååååååååååååååJ ååååååååååååååååååååååååååK ååååååååååååååååååååååååååL åååååååååååååååååååååååååå