IMD 1.18: 6/10/2017 21:33:45 MS-DOS Operating System TDD Version 2.0 - Disk 1 Series #86 Copyright 1979-1983 by Seattle Computer Products, Inc.  ú3ÀŽØŽÀŽÐ¼ü¿¹³°ÐæxÔ Ô Ô Ô €ûv °Xè0€ëëñŠÃæzº{W°ˆæxëªä|ÐÀìrø_è$œuÇ�Ç€þÃâ¿ê@æxÔ ä|¨€uúäxÃú3ÀŽØŽÀŽÐ¼ü¿¹³°Ðæþÿÿ@`€   À àðÿ@`€ Àà! #@%`'€) +À-à/1 3@5`7€9ðÿ;À=à?A C@E`G€I KÀMàOQ S@U`W€ÿ¯[À]à_a c@e`g€i kÀmàoq s@u`w€y {À}à� ƒ@…`‡€‰ ‹À�à� ‘ “@ •` —ðÿ™  ›À �à Ÿ ¡ £@ ¥` §€ ©  «À ­à ¯ ± ÿO µ` ·ðÿÿÿÿÿÿÿÿï ÿ Á Ã@ Å` ÇðÿÉ  ËÀ Íà Ï Ñ Ó@ Õ` ×€ Ù  ÛÀ Ýà ßá ã@åðÿç€é ëÀíàïðÿñ ó@õ`÷€ù ûÀýàÿ!Aa� ¡ Á á!Aa�¡Áá!!#A%a'�)¡ÿÏ-á/1!3A5a7�9ñÿ;Á=ñÿ?ñÿA!CAEñÿG�I¡KÁMáOQ!SAÿuƒ~Øt ƒ}uÇF΋~ƃþÿÿ@`€   À àðÿ@`€ Àà! #@%`'€) +À-à/1 3@5`7€9ðÿ;À=à?A C@E`G€I KÀMàOQ S@U`W€ÿ¯[À]à_a c@e`g€i kÀmàoq s@u`w€y {À}à� ƒ@…`‡€‰ ‹À�à� ‘ “@ •` —ðÿ™  ›À �à Ÿ ¡ £@ ¥` §€ ©  «À ­à ¯ ± ÿO µ` ·ðÿÿÿÿÿÿÿÿï ÿ Á Ã@ Å` ÇðÿÉ  ËÀ Íà Ï Ñ Ó@ Õ` ×€ Ù  ÛÀ Ýà ßá ã@åðÿç€é ëÀíàïðÿñ ó@õ`÷€ù ûÀýàÿ!Aa� ¡ Á á!Aa�¡Áá!!#A%a'�)¡ÿÏ-á/1!3A5a7�9ñÿ;Á=ñÿ?ñÿA!CAEñÿG�I¡KÁMáOQ!SAÿuƒ~Øt ƒ}uÇF΋~ƃIO SYS'ËŠ„ MSDOS SYS'½vPCOMMAND COM $¹o:x<MSDOS_201 ©FLIB EXE ’Y€}CREF EXE %˜6FUNKEY EXE iyn³“ CONFIG SYS e‰„¸IOSEG &Wc¹MAKIOSYSBAT -[ŒºlLINKIO BAT Y[Œ»ÏPUTIO BAT |ˆ„¼tHDISK DEV N‰„½IODEF ASM \Š„¿2FDISK ASM »~uÈ':IO ASM *vwæINIT ASM ¨r‹ð tCONIO ASM ‘`g+—AUXIO ASM ›TX:PRNIO ASM –TX>�TIME ASM ô`g@$ HDISK ASM ÀfoF1åååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååå ååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååéMÿÿÿ@€]hCON *@€]nAUX <@€]tPRN N@€]zCLOCK ÿÿ@ ]€.‰Y.Œ[ËV¾MëV¾ëV¾àë V¾–ëV¾×ëPQRWUS.ÅYŠGŠg ‹O‹W—ŠG2äðð< w%—Äÿ.ÅY‰G)O[]_ZYX^Ë3É´ôð´�Ã>”Ò°ÏÊÊÃÃÿÿÿ€DÒÀÐHˆ&ì´‹ð†¤ äu:ëu Päx$ X´u?´ŠôèF»í׊ì€â й´ŠÂæ|°ÄèÜPä{X$˜t öÔ€òâèŠàëp�€âˆì æÅYˆg´ø�Êà†ë:Ät äyæ{°èžŠÄÃöì¾÷t¾ÅY‰wŒO3É´ÃèIr!QèîYrþÆâõ´Ãè6rQèYrþÆâõ´Êë·²ÿˆ—ˆ¾õþ¬„àtùŠÂÐà´�Ã@€ ˆ&ìŠØ·èwÿ ì$ ‡íæ|Šà’²öÆt ²öì@u²öò’þÆŠŸï�Ãñ‹óŠÂ†æy:Ât'·<ÿuèÎrŠÂæ{°èÛ$˜txþÏuèŠà¨€ùu´ÊÞöÄt ŠÄæ|€ûv*öì@t€ë€ûw ŠÄ @æ|ë€ûvþ°Xè”.þ¶ŠÞŠÃæzÃè¾ÿ³ Rº{°€úæx‹ïëªä|Ðàìrøûèp$œt ‹ýŠøþËuߊçùZ°Ðæx° þÈuüÃè…ÿ³ ‡÷Rº{° úæx‹îä|Ðà¬îrøûNè4$üt ‹õŠøþËuàŠçùZ‡÷ë¾³° è$˜t x °XèþËuìùÃæxPÔ Xä|¨€uúäxð¾óÅYˆG éXþÊÊÊÒÅ Ê㊊mPV° æòäö$<t<t<uèm.‹6èv.;6t .ˆ.‰6^XϰèCëöé/ýè tøÄ>Y&ˆE éýVú‹6;6tè;¬ öû^ÃèªâúéüüèßÿtûVú‹6è‰6û^Ãèéáüú.Ç .Ç ûÃF�þmr¾ à  ä÷$téTüéVüûPQRWèL_ZYXÏ‹÷&¬Qè>Yâ÷é2üÕœAÂBÆCÊDÎH½JÒKÕf½mÞsØuÛ¿˜ÿ%<uÇ÷ÃPä÷$túXæöǘÕÃP°èéÿëè<[uô»œÆ1‰šÇ˜ Ã<;uÿšÃ<0r<9wW‹>šˆ_ÃP°è²ÿ°[è­ÿ묿«ƒÇ€=tè:uôG‹¾¤¹²Š<t9¨€t-<ñu œë$�<òu �ë�<þt1<ÿuŠœ€ù1s±1€é0CëɈFCþÂëÁ¾¤ŠòŠèHÿFþÎuöþÉuíÃ�=Þt°é3ÿ»œ€?7t°qé7ÿ°pé2ÿYñòAÿBÿCÿDÿELjkþÊÊÊÒÊÏÊÊøÊä$téÉúéËú‹÷&¬èâùéºúPä$túXæÃÊÊÊÒY1Ên}}tèt élý ”ö•�uä$t 䢔ƕ�ÃévúèªâúéhúèÔÿtûÆ•�ÃèöÿéVúä$tÜéMú‹÷&¬èâùéAúPä$túXæÃÊÊÊÒªÏÊÊíí°§æõ°àæõ°æõè’è‘äôŠàäô†Äè~«‹Á«‹Â«é÷ùèŠÌäôŠàÐìÐìÐìÐì$Õ ŠàŠÁÃ&‹° æõ’æôŠÄæô°Dæõè °Cæõ&‹M&‹Uè°Cæõè °'æõè(é¨ù3ɋѰ è° ‹ÑæõŠÂèŠÆÔ ÐäÐäÐäÐä ÄæôÃP°æõXÃ3íŽÕ¼úÇFdcŒNfûdž¤yŒŽ¦¹¾¾¬ææâù¬æ¬æ¾Ä¹ü¬æõ¬æô¬æôâõ¸½ŽØŒÈ£Ç Œ Ç µÆ Æ ê½·wN7ó„88ëc�P}}4}ü3ö‹þ.‹ƒùu¹3ÛAtŽÙŠöЈ:öЈtí.‰ŒÈŽØ¸ÃÑèÑèÑèÑè+ÈŽÁ¹µÑé󥸱PË.¡ŽØ.¡ ŽÀ3ö‹þ¹(ó¥.Å6 .‹úŒÈŽÐ¼Ùû6ÿ6Œ6‰>šg@ûüŒËƒëŽÃ3ö‹þ¹€ó¥´PÍ!º»¸$%Í!6Š ÒtþÊ´Í!è… ˜‹È3Û´>Í!»´>Í!Câùº×°´=ùÍ!sè÷ëP»´>Í!X‹Ø´EÍ!´EÍ!ºà°è3ºé°è+¾‹þ±ÿþÁ¬ª ÀuøO° ªˆºþ»5ŒOŒOŒO 3À´KùÍ!º è›ëþ»ÿÿ´HÍ!´HÍ!£M£I¸7Í!ˆºò¸=ùÍ!ré©èî ,v;˜‹G‹IÅ>Å}‰‰UÄ>G&Çÿÿ&‰E³(öã‹ÈG¸Gø3Àóªè©þt/Ä>GÅ‹G&‰‹G&‰E‰ŒG&ÇEÿ‹_ƒÃGëÈèq‹I¡MŽÀ+Ø´JÍ!ŒÀHŽÀ&ÇúFèç鈋Ø3É3Ò¸BÍ!£C3Ò¸BÍ!ŒÊ¡C±Óè+ЃêŽÚŽÂ3Ò6‹C´?ùÍ!œP´>Í!X�r;Èt ºòèzéÿè;èrõŠàè€üBu è(t"¢ë€üCtë�‹©€t©t&‰U &Œ]©t&‰U&Œ] é¡. \ Àu .ÇG¸ÿÿ鱘‹ÈŠô&ŠU&E.Åa.Ä.&Än&ƒ~ÿt&Änëó.¡G&‰F.¡I&‰F.Ä.G.ƒG^&ÇFÿÿ&ÆFÿ‹7CC&‰V´SÍ!&‹F.Ä>&;Ev ^ºmèéÔþR.Å&‰V&Œ^ZBþÆâ†.Ä>&‹M&‹U.Å6&‰u&Œ]‹.£‰ ‰T^@téØþéŽþ€üFu èŠtó¢ëî€üWuŠÐ¸7ˆÍ!élþ€üAuC3ö‰6EÃèOÿr< u÷èFÿÃQV3ö¬ùÍ!^ZY[XÃèsºÎèÃ3À´DÍ!ö€uô´>Í!ëè´=ùÍ!ÃÄX[YZ^_]P´Í!XÏ\DEV\NUL\DEV\CON\DEV\AUX\DEV\PRN\CONFIG.SYS\COMMAND.COMBUFFERSBBREAKCSHELLSDEVICEDFILESFSWITCHARWAVAILDEVA Unrecognized command in CONFIG.SYS $ Sector size too large in file $ Bad or missing $Command Interpreterë0‹^Š*ŽýþІýþ´‰Æ�pІùþ´‰Ç�»ÿµüò¤‹^Š*†ýþ†ùþ�¶ÿ‹~�}ŠŽùþµüò¤Š†ùþ‹^ˆ‰ì]ÊU‹ì�ìdžþþ‹^ Š´‹Žþþ;Ès]‰Î�PRÿv+ÁPš¦a ‰†üþƒ¾üþÿu‹^ Š´+†þþ‰†üþ‹^ ‹¶þþ�p�¾ÿ‹Žüþüò¤‹†üþˆ†ÿ†þþ@‰†þþ�†ÿPÿ^딉ì]ÊU‹ìÆ’ ÿ]ËU‹ìÇl ]ËU‹ìÆŽ ÿ]ËU‹ìÆ‘ ÿ]ËU‹ìÆ– ÿ]ËU‹ìÆ8 ÿ]ËU‹ìƒì‹¼ �GP°:PŠ´Pš¦a ‰Fþƒ~þÿtx‹¼ ŠþÈ´9Fþti‹¼ Š´‰FüÇd ˆÿFþ‹Fþ;FüsQ‰Æ‹¼ Š@,0ˆFûÿFþ<r< v¸¿ë'�>d ™w�>d ™°ÿt@P€~û°ÿw@Y"ÁÐØs¸ØPš5g Ǿ ÿ‰ì]Ë¡d ¹ ÷áŠNûµÁ£d ë�U‹ìƒ~t ¸úP¸°Pš³š ]ÊU‹ì‹^�P°P¸ÿPš¦a ]ÊU‹ìÿ6< ‹^�PSšg Pš$Ô Pšg ]ÊU‹ìÿ6< ÿvšªÔ Pšg ]ÊU‹ìÿ6< ‹^�GPŠ´Pš$Ô Pšg ]ÊU‹ìŠF<v3<€°ÿr@P‹F‹N1Ò÷ñƒø°ÿu@Z ÂÐØs‹F1Ò÷ñPQŠFþÈPèÃÿ€~v4‹F1Ò÷v‰Vƒú sƒF0ë ‹FƒÀAƒè ‰Fÿ6< ÿvšªÔ Pšg ]ÂU‹ìÿv¸Pÿvèuÿ]ÊU‹ìÿv¸ P°ÿPèaÿ]ÊU‹ì¸Pšrg ]ËU‹ìQÿ^ ÿ6: �FÿPšáÔ £B ƒ>B tš ú ŠFÿ‰ì]ËU‹ìƒìƒ~vPÿ6: ÿv�FüP�FúPš2Ô £B ƒ>B tš ú ÿvš: ‰ßÄvü‹NúŽFøüò¤Y‹FúF)^ )F몉ì]ÊU‹ìƒìƒ~v1ÿ6: ÿv�FüP�FúPš2Ô £B ƒ>B tš ú ‹Fú)^ )Fëɉì]ÊU‹ìQ�FþP¸Pšrg ‹Fþ‰ì]ËU‹ìƒì¸Pÿ6t šú ˆFùšg ‰Fþ¡^ H‰Fü=v ¸Pš š ¸RPÿvüšrg Š^ù·Š‡QˆFø¢Š <tŠ� öÑ´‰ÃЇ X:„ °ÿw@"ÁÐØs Ɖ ƈ é�Š^ø·Ñã‹Fþ‡B£L Š^ø·Š‡ X¢‰ ‹Fü£n  ‚ ¢ˆ  � öÐÐØs[€>ˆ ¢uT¡n R£\ �>n v1¡< ‰FúÇ< ¸Pš€š ÿ6L 𦀠ƒ~út‹Fú£< ÇFúëÛ‹>n �…R—‰Á°üòª‰ì]ËU‹ìÇ< ]ÃU‹ìQ 4 ÐØs ÿ6> š¥Ô ‰Fþ€>ƒ tš8g  � ÐØs ÿ6< š¥Ô ‰Fþš‡ ð ‰ì]ËU‹ìQ � ÐØs ÿ6< š¥Ô ‰Fþèœÿÿvš5g ‰ì]ÂU‹ìQÿb €>ƒ t š8g ƃ ÿvš5g ‰ì]ÊU‹ìƒì 3 ÐØsZ¸2Pš5g š/š ÿ6: �FüPšnÔ ‰Fú¸?Pš5g ÿvþ°ÿPšg ÿvü°Pšg ¸FPš5g  ‚ ´P°Pšg š8g  � ÐØs ÿ6< š¥Ô ‰Fúÿvš2 ‰ì]ÂU‹ìƒì°Pÿ6F °Pš$ð ‰Fþ‹^þ‹G ‰Fú‹^þ€t°Pÿ7°Pš$ð ‰Fþëå‹Fþ‰Fü‰Ã�GPšrg ƒ~út-°(PšYg °Pÿvú°Pš$ð ‰Fü‹^ü�GPšrg °)PšYg ‰ì]ËU‹ìÿvèœþÿvèåþ]ÊU‹ìQQƒ~t¸Uë¸gPè{þ¸P‹^ÄPÿwš$Ô ‰Fþš8g Æ3 ÿvè¤þ‰ì]ÊU‹ì¸|PèEþ¸ŸPš5g ÿv°ÿPšg š8g ÿvèuþ]ÊU‹ìƒì Æ3 ÿ¡@ ‰Fì‹Fìƒøuéé£F ±QP°´Pš$ð ‰Fþ‹^þ‹G‰Fì‹G‰Fòƒøÿ°ÿu@ˆFä‹G‰Fð‹G ‰Fî‹^þ€t‹£H ±QP°Pš$ð ‰Fþëá‹Fþ£R ÇFú¡0 ;Fòu ŠFäöÐÐØré¡0 ;FòtŠFäÐØs ÿ6: š¥Ô ‰Fú‹R �GPŠG´P¸ : ÿtéÑ‹R €:uŠG,AëšÌ߈Få¡< ‰FæÇ< ¸¨Pš5g ‹R �GPšrg š8g ŠFå:5 °ÿt@Pƒ~æ°ÿu@Y"ÁPƒ~æ°ÿu@Y"ÁŠ ,öÑPQšÌß8Få°ÿt@Y"ÁY ÁPÿvåš6>öÐY ÁÐØs š8g š 2 ¸ºPš5g ¸P�"<P¸PšRœ‰Fú€>"< uÚš8g ‹Fæ£< éÿ‹Fðƒøt"± Óà‰Fè‹Fð±Óè‰Fêÿ6: ÄFèPš[Ô ‰Fúÿ^‹Fò£0 ŠFäöÐÐØsÿ6: š¥Ô ‰Fúƒøtÿvúš š é þƒ~òÿt 2 öÐÐØs ÿ6: š¥Ô ‰FúÆ3 ‰ì]ÊU‹ì‹^ ƒt7ŠFÐØsš8g ‹^�GPšrg ¸ÖPš5g ° PšYg ‹^ ‹G£F š/š ]Ê U‹ìƒì Ç< ¸ÖPš5g š ¶ ÇFþ‹Fþ=þw ‰Ã±ˆ� XÑ㵉�B‰�D‰Ãˆ�VƒFþs؃>< tG ’ ÐØs ¸îPš5g ƒ>l u ¸þPš5g ƒ>d t¸ Pš5g ÿ6d š$g ¸!Pš5g š8g Ç0 ÿÿ¸ú ŽÀ�£Pš6š šÓ} ƈ š5ë š®Æ� ÇFþƒ~þ?w‹^þÑãLJFLJšFƒFþsãÇ0 ÿÿ¸AŽÀ�ÈPš6š  Œ ÐØsF 8 ÐØs?¡< ‰FôÇ< ¸(Pš5g ¸FPš5g ¸P�"<P¸PšRœ‰Fþš8g ‹Fô£< ¸y ŽÀ�P° Pšã( ¡< ‰Fô “ ÐØs5Ç< ¸_Pš5g �aP°Pšã( š8g ƒ~ôt ‹Fô£< ÇFôëу>b thè¤ùƒ~ôtÑ.b ¸{Pš5g ƒ>b u¸…븉Pš5g ÿ6b š$g ¸ŽPš5g ƒ>b t°sPšYg ¸•Pš5g  � ÐØs ÿ6< š¥Ô ‰Fþšš š 2 ‰ì]ËU‹ìƒì‹~ �}�6¹ü‹Ñãó¦tø+ÑJ‰Vúƒúÿu ¸ÈPš5g é¬ÿv °P°ÿPš( ‰Fþ ” öÐÐØsL‹^þ€t4‹^þ€uƒÿt‹G;Fu‹G;Ftj°P‹^þÿ7°Pš$ð ‰FþëÃÿ6V °Pšÿ( ‰Fþ‹^þÇG ‹F‰G‹F‰G¡6 ‰Fü¡T £6 ƒ>@ u£@ ë°Pÿvü°ÿPš$ð ‰Fþ¡6 ‹^þ‰G‰ì]ÊU‹ìQÆ’ ÿÆ9 ÿ‰ì]ËU‹ìÆ’ ÿÆ9 ÿ]ËU‹ìÆ’ ]ËU‹ìÆ’ ]ËU‹ì�ì‹^€?t�Pša ‹^€:u€?u ŠG¢ 麚ÌßAˆ†ÿƆÿ:Ɔÿ�†ÿP¸ÿPš $ �†ÿP‹^�Pš $  3 ÐØs€> t  ˆ†ÿ€Žÿ€Š†ÿˆ†ýþƆÿZ�†ÿP°P°Pš( ‰†þþƒ¾þþuEƒ> r ¸¢P¸`Pš³š �†ÿP°P°ÿPš( ‰†þþ‹ Ñã¡V ‰‡Ä Іýþ‹ ˆ‡ÿ ‰ì]ÊU‹ìQ‹^Š‹^:u8‹^ŠˆFÿ€~ÿt.ŠFÿþȈFÿ´‰Æ‹^ŠH‹^:Htà — ÐØs Š@2Á< tаë°ÿ‰ì]ÊU‹ìQQ‹^ŠˆFÿˆFþ€~ÿv#ŠFÿþȈFÿŠFþ±ÒÈŠNÿµ‰Î‹^ŠH€É 2ÁëÔŠFþ´‰ì]ÂU‹ìQQ¡€ H%þ‰Fþ¡€ F;Fþv‹Fþ£€ ¡€ ‰FüF£€ ± Óèƒør ¸P¸€Pš³š °Pÿvü°ÿPš$ð £¾‹Fü‰ì]ÂU‹ìƒì°Pÿv°Pš$ð ‰Fþ ~,ˆFúŠ^·Š‡´Pèuÿ£T ¡¾‰FüÆFûŠ^·Š‡þÈ8FûwŠFû´‰Æ‹^üÆþFûuÞŠF‹^üˆG‹vþ‹D‰¡T ‰DÿvúšÝð ‹Fü‰ì]ÊU‹ìQ‹F £V ±QP°Pš$ð £R ‹R ‹G£T Æ” °ÐØsN°Pÿ6T °Pš$ð ‰Fþ‹^þŠG:Fu‰Øë-‹^þ‹£T €uËŠFöÐÐØs¸ëÆ” ÿÿ6V ÿvšÿ( ‰ì]ÊU‹ìQQÿv èMþ‰Fü‹^üÑ㋇‚ £V Æ” ƒ>V upŠFöÐÐØrbÆ” ÿ‹^ ŠþÀ´PèYþ£V ¡¾£R ‹^üÑã‹�‚ ‰Ã‰ÆG¡V ‰G‹v Š þÁ�µüò¤‹^üÑã¡V ‰‡‚ €~t Pÿvšÿ( ëH¸ëC°éx>DEVÿÿÿÿ€/ÿ$,.€| ‡ NUL ÿÿÿÿÿÿÿ£ȦȥȥȥÿÿÿÿU.‹&ª.ެó¤ü&‰á‹6ú&Œü&ŒŠ 2í&ŒD&ÆDÿƒÆ^âòƒî^&ÇDÿÿ‹>®&Œ&‰> &ÇEÿ&ÆE&Çÿÿ&ÇEÿÿBÆ—ÿè³P.¡•&£•&Æ—H&£øŽØÆZÇ&+ã÷ØH£X¿ °ª¿úË  MS-DOS version 2.00 Copyright 1981,82,83 Microsoft Corp. $´ë(€üøréÈ€üW�v°ÏXX.�ÕœúP.ÿ6Õ€ù$�wèŠáèÜ.Œ8.‰6ŒËŽÛþ-¡Õ£"¡×£ XP‰&Ռ׎•‰&.Œ0ŒËŽÓ¼àû2ÿˆ>0Æ1ÆÕŠÜÑãü ät€ü v €üQt€üPu €>.u¼ ëÆ.Æ/ÿ¼€ö2ÿtPèò"Xÿ6˜.ÿ·ª‹6Ž8Ãú.þ-.‹&Õ.Ž×‹ìˆF.¡".£Õ.¡ .£×èÏ.�~X[YZ^_].ÿ6~Ã.�~UWVRQSPëê.Å6ÕÃa33¯3Ì3Ò3ð  æ3õ34Ç5Ñ5¯ â ¢'(‹ì˜&(&0&z('ZÝ ‡ z|ZZ’ Z@&H&" ` ² Î P&X&— “%°%Ð%á%äs ¬�2” ë ¢ "æ Ű = ` Ÿ9H8%9::g:i9Í:;j;�:·:O} ƒ ßÈ Ó<š<2ÀÃu .‰‘.Œ“Ï.ƒ>‘ÿué&þ.ÿ.‘²ŠÂè=°ÿrèš&‹V J&ŠFþÀ&‹NƒÅèÿ‰L‰T‰lŒDË…‹ƒ¡‡èèþ‰\‰L‰à Àt°éËR_¾ç­‹Èó¥3ÀÃ6 ÛÃ$6¢Ûà Àu è²þ6 2ˆDÃþÈu €â6ˆ2ðÿÃè—þÇD-ŒTÃè‹þÇDúŒTÊÂè—¸ÿÿr$èó3Ò»&‹N IQèãuBCâ÷[&ŠFþÀ2ä&‹NèOþ‰L‰\‰T‰Ã2À6Æ>6Š&>6£<è/þŽ\3ÀŽÀ¾ ¿ˆ¥¥¥¥¥¥é#è ²rR äx¡+þÂ&‰E¡à&‰E¡â&‰E¡&‰E‹óÄ>߸ÿ:Ñu «þÀ«« µª ßþÀª ÒtŽ%¹ó¥2Àøÿÿ&‰EÃè9$‹úrï‹EÄm Àxå‹]RP6‰.à6Œâèý XÇÿÿè5 èÔ _élÿèl °ÿrƒÇ!&‹Mí Éu¹€3ÒFFŽ%‹D÷ñP­÷ñ ÒZt@uB«‹Âª°ƒù@s&ˆ%Ãèb‰E!ˆU#ƒ}@sˆu$Ã6‹ß6‹áè$ý‰\‰LÃ6‰ß6ŒáòŠÂè%rè„èý‰lŒD2ÀðÿðÿèfÇ5ÿÿÇ3ÿÿè߯E€}ÿtÇEÿèöèãuéÃ6 *Ã6  :Ðs6ˆ*ÊÂ<ÿu:6Ä>Õ3Ûè­rí´èïu è &€M@2ÀÃ&€e¿è�3ÛèŒrð´èÎtï2äèÇÃS»èvröD€tVÅtöD^tÍ)ëèø[ÃèTrúPëèK´è�töX´èˆøÃ.¬<$tùè¥(ëõÃ.‰(.Œ*ËS.Ä(&�O[Ëèv!Vèü�DÃè&Äèùû‰\ŒDÃè&‰&Œ_Ã3ێÊØÑãÑãÃ6Æ—ÿŽÂ.ö—ÿt.Ž•ëèÂûŽ\3ö‹þ¹€ó¥.ö—ÿt63Û¹è5-rWèë,r&þ_&Š&ŠCââÿ6•[S&�Œ•ŽÛ.Æ—¡3Ɏَ¾ˆ¿ ¹ó¥&£+Â=ÿv¸ÿ» +رÓàŽÚ£‰ÇÍ ÆšÇPÍ!ÆRËÃ.‰•Ãèû.ÿ6•�DÃèûÿt�øë 2äèûÿt�ù‰œ�DÃé°é«è‰+rõ‹ò.Œ÷.Çõ¸°.ÇÒåèh°r×uØÅ>#+÷Vÿuÿ63À£èrQè]Ä>#&ÆEƒÇ¸. «‹èe¸..«Zè]Ä.àZ2Àè_‹Å>#^÷‰3Ò‰T‰TÆE&ŠFèßéOÿZZÄ.à2Àè/Å>#^÷ƒîÆåèÕÿ°é9ÿèÙ*rZR‹òèmrOuM¡‹Ø&‡^ À^t¾‹ýƒÇ‹×.€>åtFF‹Î.€>ætFAë+ Ût)3Û&€=tGCëö°/.:åu°\ªCëXX°éÕþCƒû@Ã3Û¬ Àtf<.tè-ƒû@rï&ŠEÿè!uO2Àª&ÇFÿÿëά Àt?<.uÑè#¬ Àt3ëÇWªè»ÿs€<t ¬èÖ uïªèªÿsXÃ_ÃOK;útùP&ŠEÿè¼ XtîOKëíOªéUþé¥èü)rø‹òè’rñu!‹> ÿt&‹NƒùÿuèhèBù‹TŽ\ëÓXX°é(þ;ùu°ëõÅ>#+ßSÿu¿©°?¹ óª2Àªèù貎%‹ó­=. uăÆ­=..u»Ç+è’Æµèüs¦Ä.à‹è´Z2Àè¥Å>#[߯åéNþ°ë‘ ÀuŠåëþÈuˆåÃþÈuŠæë þÈuˆæÃ°ÿÃè�ø‰TËýƒÇ­«‹Ð¬þȪþÀ2ä¨uþÄÐèëöŠÄªŠØ¥¬ªŠø­«±ÓêH‹Ê3Ò÷ñ‹ÈGG¥¬&ˆF­ªöç&F«Á&‰F &+F ÷ØŠËÓè@&‰F &ÇFÃú.Œ×.‰&Õ¼€6þ-ûèõrè­ tùú6þ-6‹&Õ6Ž×ûËú.Œ×.‰&Õ¼€6þ-ûè¼rÍè˜ ëÅ6¡øè$sÃ9uÇ€>ZtêèëãŒØ@ŽÀ&€>Mt &€>ZtùÃøÃ€>ZtøèÙÿró&ƒ>uë&‹A&Šˆë×3ÀP6¡øèµÿrƒ>t€>Zt è™ÿsëX°é-üè5÷[‰\°ëòè ÿrê‹Z;Êv‹ÑR;ÙwÎt%ŒØÃ@ŽÀ‰+ËI&‰³M†&ˆ&Ç6¡•£ŒØ@[éÎûŒÀHè=ÿr &Çëì° ëŸŒÀHè(ÿs뇎Øè5ÿr÷‹Q;ÙvœéyÿèŠö6Œa6Ç_£6Çc6££öD€ué€è{ö3Û‰Tˆ^»Q¹ ät¹þÌt¹þÌtR¹ þÌtK¹´†ˆQˆ.SŠÌèÌ6‹>T÷Ç€tŠáèX<t…6€&Uý€ýu ^¢£Š&UöÔ€äèóõ6¡£ô‡ë¶ ät&þÌtþÌtÃÿt!ÿt#è�D#�D!Ãè#èÿè¨èPÃèè»QèšY Éè?6 £ué°Ã6�Iè³õ6ÿ6ß6ÿ6á‹a‰á‹_‰ß‹cÇD‹Öè4ë6�I6�á6�ßè_õ6ÿ&IÅt‹D6£M6ŒO6ÿM‹D6£M6ÿMÃVWQöµu ¾÷D€tVƒÆ ¿©¹ó§^tÅ4ƒþÿuãùY_^Ã6ŒóŠ|€ÏÀ€çß6‰6ñëåÄ.ú$?: õr &:Ft&Änëô‰.àŒâÃWQP±°¿7ªXªPŠÁª3À«ƒÇX†àª†ÄP‹Ã«ŒØ«YX«’«‘‡Ñ_»7ÃWQP±6ÛëÆ¡=ÿÿuvƒ>uùË  Ûtè�¹èÕrì‹ Òu èðÇ+ÿÿë�>ør‰‹Ó2Ûè|&ŠNþÁ2íQ°ÿè4&‹NÄ>#WƒÇ3ÀÑéó«sª_þÀ&ˆEYBâØ¡+@øÃ¹¸ 󫪋6õ°ªƒÇ ‹D«‹D«‹Â«3À««Ãè™rúRè_ÃèŒrúèŸþrèXÃè߀>µuè*莎%Š' ät36:&Ót,öG t6þ'‹ó¿©¹ ó¦t/&€}ÿ?tõÄ.àè‚sÄëM‹+;s‰:&Ótà‰ùë1Š,Š&µöÅt öÄtÈ2äë€üt¿ƒÆèltöÒÿt°Ä.à&Šfá+£+±Óà3ÒÑàÑÒ&‹^€ãà÷ó‹ÚSèi[‹#ƒÂÚ&Vá+;t%@ƒÃ ;ÚrŠÛþÃ:är‹�ûøsƒûrë§ùã+øÃˆÛ£+Å>#‹UBèJ3Ûë¥&‹^ Ût�ûør8�vèòs&&ÇF3À£¢ÛH£&‹F &‹V+¢ä‰á&‰Fà ÛtÔ‰&ŠFþÀ¢äèÿ ‰>‹Ó2ÛˆÛ肉ÃP螊ÑY6ˆµ‹Èsu Òu°ùÃ2Àùë:t,°6öµu íxQ6Ž%Šo öÅuè-Yt°ëÑ2À°ë °6öµtÁøÃPœ€>©.u�°ë�Ä>õW‹Áèü ÀXt°ùÃÄ>õGVŽ%‹ó¹ ó¤^<w ÀøÃùÃ3À6£å6Ƶ¬ètCŠà¬<:teNNV6€>ætè¤sHè6 ÕP6ÆÕè±þX6¢Õ^é´2Àè›r±èø øÃVèíÿ^6þæ€<t@Vè@s^é‚XXè±þÀÃ6þåŠÄ ,`VPè=Xsàè²ÿ^râ¬èrt»NVë‰ècþ2Àÿ3É6Šó¦t Nè&:EÿtòùìèEuø¿©¹ èñ<.tè3t ÀtªâíùÃÁ° óªèyûÃèþVèîŠÈ€É€_;÷uéŠVŠ€>ætèMûr Àut^^èýþÀÃWQè�üY_rpÅ>#öG tU6€>Õt‹×ŒØ_€=tPW‹úŽØ‹+ß+÷SPVQÿu‹ÚèÂýZ2Àè)Y^X[‹>#÷ß_Š ÀtG‹÷èuédÿN2ÉùÃ_Š Àt‹÷ùÃþÀÃ^Š‹÷ ÀùÃÄ.à3À£+¢'H££ÃP6 µöÐ"Å$XÃWVS»è8!ƒÇŠ1Å62&‰u&Œ]&ˆ]3Ûè!ƒÇŠ0Å6,&‰u&Œ]&ˆ]Æ0Æ1[^_ÃWVSÆ0Æ13Ûèß ƒÇ&Š]ˆ0&Åu6‰6,6Œ.6Å6õŠ\Åt&ˆ]&‰u&Œ]»è§ ƒÇ&Š]ˆ1&Åu6‰626Œ46Å6õŠ\Åt&ˆ]&‰u&Œ]é{ÿè Ûxè/ÃÄ>ßöÃ@töÃt92À骋ß3Ò3Àèú6Å6õètù‹×´†6‹>:÷Ç€t èþ‹ú<t׋ú6>Iëvöà uÇöÃt韌ÀŽØ‹ß3Ò‹ÂQ¹è¾ùY6Å6õÅtè7è)ùW´†6‹>:÷Ç€tè±_6ÇI<tÝ2Àë_6ƒ>Iu6ŽGŠ6ÿE6Ç:G<t< à²O묪< uÆ < àóu3öè¿ èKþ‰6܉>ùu Ä>õ&€e¿è:Ãèþ‹6Ü öuÁ€>€tÇ€ÿQWºèa_Y¾€<u °ªO° èj3öë©èã Ûxeè<&‰E&‰UèXÃè-þ‹óQ¬<tè>âöX+ÁèÈýë)3Àèòø6Å6õè.ø‹×´‡6‹>:÷Ç€t 踋Ú<tÛ¡IÄ>õ3Ò&÷u‹ÈèñÀË@3ÀãéŠÃÅß‹û3Ò¨ u±¨u�¨ug‹Â€?tZQ¹è’øY6Å6õÅtèØèÊ÷W´‡6‹>:÷Ç€tèR_6ÇI<tÝë _6ƒ>ItB6ÿEG6ŽG€=t 6Ç:â¶‹Âékÿ‹ÑëöWè?r‹÷ƒÆ_Ã68 røþÈy6 *6¢ßÊäöñˆ&ÛŠÈ2í‹Ô€Ö‹‰ãè*‡ß�ûøsâó‰‹×ŠÜè§2À´èf Ëù&ŠN&ŠF2äŠìRQP‹Ïè XYtÐâñZ‹Ïèt˜6ÆÞè”<tîÃZÃQ&Šf&ŠFSèV÷ë"�èté6ÆÞèn<tîÃQ&Šf&ŠFSèe÷ŒÙ>Åvè¡öŽÙ[6‹I_+Ï÷Ù6¡:©€ÃPŠþÈ6¢ßŠE‹u öu¾€‰u6Œ÷‰>õ Ày2ÀèÂöXs 3ÉÆÜ[Ãþ@r2ö‰ÿ£û‰ý‹߉ùÆÜÆÝ‹Ú÷æ£R‹Ã÷æ[ÃÒu^£‹Ð¡&‹^;ÓsN÷ó£ ‰ ‹Ð&"F¢Û‹Á&ŠNÓê‰÷æ‹È߃Òt¡ß÷ØuH3Ò÷ö£ÿ÷æÆÜ‹ÈãÄ>õ&Š]ÃÆÜ3ÉÄ>õ[á ‹Ù Àt&+F÷Ø+ØsÃ3Û£‹Ã3Ò&÷v£‰ uÐ=uË&‹F£‰Ã&‹E&‹]+ru Àt;Ás‹ÈÄ.àè›ÿ‹èl Ét é±é°éʼn‰ƒ>t賃>táèr߯ÝŠÛ‹‹è7WPSŽáRQèþ[ZÚ&ŠFèhÆE:EuA9Ur<9]s7€}t.XPWR+U÷Ú‹÷‹ø‹Â&‹N÷áøƒÆÑé6Žáó¥s¤Z_&ŠFèGè4u±YY[ã�ûøs ²ÿë‚¡ Àt£èr Ç èÄ6õ¡ù‹ø+ß3Ò&‹L÷ñ;ÿt"ÆÜ ÒtÆÜ+ÊŽá“3ÀÑésªó«“@‹È‹þ&öEÿx¡&�eð& E¡&‰E¡û‹ýãIÁƒÒAÀã?&ˆ]Ä.àèGþ¡‹ãxÁƒÒ&÷v‹Ø ÒuH&ŠNÓèPRÄ>õ&‹E&‹U&÷v‹È Òt@£ 3À££!X+Ùr_t8‹Ê“&÷f+ÁƒÚÃÒë+‹ÈèßãèIs3ÉÆÜ¡û‹ýÄ>õÃë]�é +Âv!3Ò£‰!ƒ>tƒ>t ÿÇX‹èn‰‰+Ât ã Q‹ÈèíXr£‹È‹BItèn‰‰ƒ>t‹èÌ¡ Àte èÆÝŠÛ‹‹èWPRS&ŠF‹ÙÚèUÆE:Eu9Ur 9]sÇEÿècèPuà[Z6ŽáèãûY[ã ²ÿë¶éÿ¡ Àt£è•Ç èJÄ>õ¡‹! Àu Ét&E&M‹ÿé7þ‹È Êt;-ƒÚ&÷v&ŠNÓè‹Èèuãèr£Ä>õ¡&‰E¡&‰E3Ééþºÿè„ ëá3ÛÄ>õ&‰]&‡]&�eð ÛtÇècëÂ&;^ wè‚‹=sQ±ÓïYù�çÿÃP´€¿ÿèÓ XÃèb‹5s Q±ÓâY�æë�æð ò‰56Å6#ÆD6€>çtÑPSQ¡éŽ%ƒÆˆ$P‹ë¾2ÀèèÅ>#ÆEƒÇO&~XˆY[XÃÆçPSQR‹ÃÑèÃ3Ò&‹N÷ñ&FIPRQ‹Ð2À¾è¦Å6#�|YXZø;Áu)Šþç¢é‰ëB2À¾è~Å6#�|Š¢ê¿éZY[‹ÃÑèXÃ�çÿ´ ßèù  ßècñ°&Šf£7Æ9Ç:&ŠF¢D»7&Åvè×ð‹>:÷Ç€u¹2ä&†f ß &ExtÃþÄÅ> ;EtôÅ=ƒÿÿuôèÆE:EuÇEÿè6è#uê&Å~÷E u»èsþÅ>#ë U6Å> è˜]ƒÇ6ŒG‰>E°&Šf£7Æ9Ç:&ŠF¢D&ÿv&ÿv»7^è,ð‹>:÷Ç€u1&ŠFÅ6I:D tèþì6Å>E&ŠF&Šf‰Eú¸ÿÿ&…FuÃ&‰FÃéÚþ¹‹ú€=ÿuƒÇ‹E!‹U#ÃÄ>õ&‹]�ãÿ&‹U Ût+ÊsÊ3Ò&‹]ãè©ý�ÿøs‡ßBâòÃAJËŠÛè èãÆÝ‹6ù‹þ‹ù‰>ùÄ>#ƒÇ> øèÊÿŒÃŽáŽÛ‡þÑés¤ó¥6Å>#�]+óèý&;vrèOá @£ ; °w2ÀèŠÿŽáÑés¤ó¥6Å#ÆG�w+þ‹÷‹ûè»&;vrè ÃöÝÿt% ÛþÀ&:Fv‹�ûøsè×ü‰>ÿ°¢ÛøÃùÃRS&ŠFþÀŠà*‹ѹè²üÈ€Õ;Ês-ŠÄC;ûtíK‰+ÑR‹Á&÷f‹6ùÆ£ùXZ+Ú[è‹ÞÃ+Ê*áþ̈&Û‹ÊëÍQ&ŠNJJÓâ Ó&V YËú€=ÿuƒÇ¹ŠE ‹U ÐàÑêÐØŠâŠÖ¶ÃS3Ûè7ü‰>ï[RQS‹Ã‹ÓC&;^ ~+=+[ºÿè{X+ÁZèbBÂ&ŠV¶B÷â‹È+ûw3ÉùÃèöût H~Æ“èíût“뽇ڋÂèü‹Øâ°ºÿèýû[YZèÑûè‡ß ÿuÎÄ>õ�ãÿ&‰]&�eð& ]ÃSRW3Û‹ïèÉû_Z[Ã3Òèšûtø‹Çè¹û=ø‹ØríÃèˆû�ÿøsö‹ßëó6Å> P3ÀˆEÅ=ƒÿÿuö6Å> XÃÿÿtú€}uôÅ=ëñÃÄ5è‹þÃëWè¶âÄ ƒùÿtMŒÅ6Å6 èzu 6‰ 6‰.ëVÅ4èetXXëó^‰ ‰lVÅ4ƒþÿtXXëó^‰<ŒD&Çÿÿ&ÇEÿÿèKâÃè[â6Å6 6‰> 6Œ&‰5&Œ]VÅ4ètXXëó^ÇÿÿÇDÿÿëÇ;÷uÆQRŒÙŒÂ;ÊZYÃ3ö£í&ŠFÅ>3ƒÿÿt ;Uu:Euëo6Å> ;Uu:EuëIÅ=ƒÿÿuí6Å> VRUè›]Z^6öíÿu�]¹VWR ötè=õëèYõZ_^‰U‰m ŒE2ä&ŠF‰E¸ öt&ŠF&Šf‰E èÔþ6Œ%6Œ5‰>#‰>3ÃÅ> ´ÿ8et&:àt:Eu€}tPÿuèX2ä6:/u°ÿ‰EXÅ=ƒÿÿuÎøÿ‡E<ÿtõ ätñ6:/têÄm �]‹U‹M ŠÅ2íŠåWQP¹SRèÓôZ[XYÐâî_Ãè‹¡%‹#èá‰\¼‰D6 )ðÿ�é¼rƒùww öt Òt €þ wèßÃèNèÌà‰T‰L2Àðÿ€ýsø€ù#6öµu öG të6ÆÔÆEˆ'‹ Ût &;^ wèüèEìèçës¾èZ ÔÃé‰èrøƒÆ¿¶ècríèzërè äx侩¿Ã¹ 󤿩¾¶¹ ¬#&ÆE¾Ã¿©¹ ó¤èZës¡éÍèʰÿÃèìêrøVP2À äx ßŽ%@ª3ÀƒÇ ª°€«­‹Ð¥¥‹Dø«‹Dö«X^ŠÄ @ªx'‹Â«P3À«XªŠÄ6Š&Q±Òä Ī6¡±ÓàYŠÄª3ÀÃÅñ«&Œëó‹ú€=ÿuƒÇöEÀu\è rZR‹ò‹\±ÓëSèö÷[èÛëèyê_r>Å#€Lñ &‹M‰ &‹U‰T&‹U‰T&‹U‰Tþ&‹U‰TüÆGÄ.à&ŠFè¨ü2ÀðÿÃè°r)¿©¹ °?ò®t6ÆÒÿRè êÄ.àsèOérè«êë9ZëÍZYRQëäuò äxvÅ>#‹ ‹uã&;N w+ßSV‹Ùè¯úZ2Àè û[#öµt€>'u¹Ž%‹û¾©¹¤ó¥ µª±3Àó«èõ ’«’«3ÀW«««‹6#&ÆDÄ.à&ŠFPSèóû[X^Šàø_éqþ6€>-tÃQSV3ÉÆiÆg‰j»gÅ6èÉç6÷ju.6 t<u(6Æi6Æg6ˆt6‰jA6‰yè™ç^[Yëo2À^[YÃ<tI<tE<tAÜ6€>1t 6€>.uÍ(�ÃS3Ûèæï[rö´è'ætÛ<uÊ2äèæë 6öÚÃèÇÿ´è ætöS3Ûè»ï[rË2äèüå<tÞ<tÚ<uÛ°è� è¢ €>0tè—ìú‹&ÕŽ×èZÜ.Æ-.Æ..‰&:Í#.£×œX.;&:u.¡×é@Û.ƒ.:.;&:t ¸L.ÆÖÿëåP�.�×sØëê¾x*èëâ Divide overflow ÆiÆgÇj»g‰6uÇyÅ6èvæ.Çu£.ÇyÃ6Œ§6‰.¥V�çÿŒÝèW^×�çÿƒÿu P&ŠF6¢/X+ÁÐR&÷fZØ2ä&;VrþÄ&;Vr þÄ&;V rþÄÐä6 &Þ&ŠF6Œ§6‰.¥&ÄvŒÅ6€>.uM6‰&Ùú6þ.6þ-6Ž×&‹&ÕÍ$&‰&Õ&Œ×ŒÄŽÔ6‹&Ù6þ-6Æ.û6Ä.¥<t 6Æ/ÿÃ2Àëì€>0tèëÆ>Ž•°"èß6Œ§6‰¥6‹•ŽÛ¡Y;Ãt";ÙuP6€>>tè㹋ÙQKèQ Yâö6�•°ÿè9ùúÆ-Æ/ÿŽ•Ž0‹&.èƒÚXXX ¸òP.ÿ6§.ÿ6¥ûÏ6Æ×2Ò¨u&ÆG¹¨“° tù3Éóª±öÃtù3É󪑫«ƒïöÃt èsètuFèjèIv€<:uF,@v6: v²ÿªFONG¹è€<.uF¹è ŠÂÃùNÃèv÷Nè r#u 6ö×ÿt< uãëI<*u°?óªªtÍ<+tÉ<=tÅ<;tÁ<,t½< t¹< Ã%.uÆ.ÿ¡.=MZt=ZMté}¡.±Óà+!.£.ö.t)Ä>ÿ-&‹£5.&‹E£.ëx°ë° P6‹.èèÙ XéIÜP»ÿÿèíßXƒûrØ;ÃwÔ€>.u#.rÇ;ÃwÃ+#.%.r;Ãv‹Ã‹Ø‰.è´ßr¦£.€>.t .+.-£.£5.‹!.R±ÓâX± Óè‹È‹.2Àè ‹.�ûr»à).S±Óã‹Ë‹.Ž5.3ÒQèeèC èhY;È[u 5.ƒ>.uÁ‹.¡'.Á£.¡).£.Ä-.£ .ŒÀÁ£ .3É‹1.‹.3Àè‘ séüþ‹.Rº.¹6‹.èèá èZrß¹¿.6‹6.ƒúué¸&ÅŒØÆŽØ‹Æ‰ƒÇJâãëºé«þ6ö.t 6Å6ÿ-­6£5.ë0»ÿÿèœÞ Ûtß6‰.Sè�Þ[6£.6£5.ƒë�ûs‹Ã±Óàë¸ÿÿP6‹.3É‹Ñ3Àèè 6‹.Y6Ž5.3ÒQècèA èf^;Æt‹6ö.u"6¡5.-6£ .6Ç .N6‰6.6£.ŽØÇ6‹.è&èïè)6ö.téKÚ6‹.¾6¡. ÀtHŽØ‰6¡.HŽØ‰R6Æ—ÿè\ÙZ6ÿ6.&�,6‹6.ò&‰66Å6ÿ-VÅt¹ Q¿\Šó¤3À««Y^VÅt ¿lŠ<󤫫^Åt¹€‹ùó¤þÉ6:> vŠùë2ÿ6: vŠÙë2ÛèÌÔÿtÿtÿtÿt&� &� 3ÀŽØ�ˆ�Š6Ç߀6Ž•6Œá6ö.t&6Å6.6Ä>ÿ-&Œ]NN‰&‰u6Å .&Œ]&‰EéVÙ6Å6 .ú6Æ-6Ž..‹&.ûVŽÂŽÚ‹ÃËS»è [ÃS.‹•è[ÃP.¡. ÀtHŽØ‰.¡. ÀtHŽØ‰XÃP6Æ>6Ž•ƒúsº‹ÚSè+Ý[rŒØãXë$¸1ƒÂ±ÓêéÇÒ2ä6†&Ö ä6Æ>t6Æ>èÄÓ6ÿ6•�Dé~ÕZSVTWUEJDPQRR<4>5º5º5Ó4¦5À4E5x5K5n5P5Â5èÐPèXÊÂ< rC<t6þØV6þÞ6€&ÞuPèƒöXèîÖ^6öÚÿtÏSV»èXær öD€t»ë}Ãë}< t <t&< uº6 Ø øöØQŠÈµã° è™ÿâùYÃ6ÆØëšë‹6þØë‘< só< tïP°^èvÿX @èpÿÃèö»èõårôëèíõ´è2Ütö2äè+ÜÃS»ëS»ŠÂPèåõXVètÖ^[ÃVèÖõtû2äèÜ^Ëò¬<$tøèÿëöŒÐŽÀ‹ò2í­ ÀtæŠÜŠý:Ãv€8 tŠÝŠÐJ6 Ø6¢ÙV¿š6ˆ.èŠýŠõè®ÿ< uè§ÿ<tù6:ë2t8<t+<t'< t@< t`<tb:òsªþÆè2ÿ6€>èuÌ:ûsÈFþÇëÃëX°èžþëºèaÿ± W¿ì2ò®_Ñá‹éÿ¦ù2ªè„þ_ˆuÿþƌŌێÎݾšŠÎó¤Ã° èiþ° édþèóÿé|ÿ°\èYþ^èçÿ6 Ùè©þéMÿ ötèR&Š< s< tèG6€>èu ÿtþÏNéBÿWOýŠÎ° S³ã®v &€} t þËâò6*Ù*ÞË€áü[_tÃèâûë¼þÎO°èêý° èåý°éàý6 ë2éÿŠË*Ïëè4ë±6Æè:òt:ût ¬ªè5þþÇþÆâçéÎþ:ûtùþÇFéÄþèñùéºþèaþŠË*ÏtItW‹þGò®_uöÑË*ÏÃ]é–þ°@èsý_Wèîþ^ŠÞé ÿ6öèézþ°é—þè÷ó°tÓ ÿÃPR3ÛèÕãr´èÚZXŠà<t<t<t <t< t°ÃúéòÏQè ÐáÐáÑáÑáÑáÐî ΋ѡ$±ÒàÑàY #ÃVS»�¹3Ò‹Âè}ÛÅ6èïÚ[^¡�‹Ÿ‹¡;'tB=6«s=£'VQR3Ò¹µ÷ñÑàÑàÑà‹È¾}è#Ñés�ÂÈè$±¾…èˆ$Bˆ#è’ZY^ô¬;Ðr+ÐAëöˆ%öÁ°uþÀ¢†ÃèðÿŠÆ»„×:°ÿrtèÝÿ‰#ÑéÑ鸵‹Ú÷áŠ%€á¾}‹ÐÑáèRŠÏ¾…IèIŠËIÑ’£'VSP»�¹3Ò‹ÂSè¬ÚÅ6èÚ[èÒÚ��Å6è Ú[^¡'3Ò¹@@÷ñˆ)2Àôãû¬ÐâûÃPQV‹ò¹ÿ‹ Àt)€ü:u€|t¬ Àt6þƒÿÿt&+E|&Ä=ëð&ES»(öã[øøëùXÃPè?r÷&Š<ÿtð2äèÃÿëêSQ6Äþ3öƒûÿt¿&‹O&€9tƒÇ(Fâô&ÄëãùëûøY[Ãûs Ž•‹ûƒÇøÃùÃ6Æ4<v° éBÓ6Œ&‰$¢(èGÿs°ëæŒ+‰>)èŽÿrï‰6-‰>/Œ1Å$è ÿsëØŽ%ˆ&3öÄ€u$&ŠG ¨t°ëå¨uø¨t€>4u €>(uæë¹ V‹ó‹>/Ž1Šg &ˆeƒÇó¤^Ä>/ƒÇŠ&3è±îÄ>/&þ ( &ˆE3À&‰E$&‰E&@&‰EÄ>)¡-&ˆƒï‹ÇéjÒè ÿs°éhÒ&Š<ÿtô&Æÿ2äè‡þréþ �UöEÀuÿuèÒó[6ˆµè¾î<ÿu°ëÇë¹è-þsëõt 6Å>#öG t°ëíÆåÆE­‹Ø�ãÿtèíé&ŠFèëëÈèšýs°ë×RÇÒÿåŒ÷Çõ¸‹òŠÁ€áˆ4èkÚZ Àt<t°ḛ̈éoþ6Œ76‰96�56ÄßS6ÿ65è*6‰ß6Œá6Ž76‹9Ã6�56�ß6�á6ÿ65ÃQR±ÓêŒÙÊŽÙZ�âYÃè¢ÿè;r &€}u°èÄÿëˆèýëèNÌ‹D6‹;‰Lè®ÿé(ÑèuÿèrÜ&€}tÓèßëëØ‰;èoý°‹;�UÃèýrWèWý^r&þŠGˆƒî‹Æëµ°ë›°ëú‡ÙSQègþY[èqý‡Ùsΰëè<r°ëöèýrëöE€t3À3ÒëþÈ|þÈ|’‡ÑEU뒇щE$‰U&è›Ë‰T‰ë�’‡ÑE$U&ëå<v°ë°r‹Ù�ãØÿt°ëðëüQPèaüZYrõ6Ä># Òt&€g Ø&O &ÆE°ÿèÂéë²3É&ŠO è?ˉLëðŒÞ<wNRè}üZs°ë´<s2<&ŠEt öt° ëꨀtS&ˆUëÍ2䨀t&Ä}&ŠeèøÊ‹Ð‰Tëæ&öE€t.&Ä}ëIþÈþÈ<v(´,t´þÈuPèÕÝXrèÔŠà°ÿuþÀëɰ룰ëúQRPVŠÃèÇÝrè&ä&Ä~ø^XZYrã&÷E@t×þÈþÈtÆS ëÆS¸£Q3À£T¢^‰c‰_‰6a‹÷»QèàÔ6¡cë—SVè?Í<ÿuXXX°ëŽ_�D[‰\&ƒ~ÿu SW6ƵèM×_[‹õŽÃƒ|uÆDƒÆ¹@¬ª Ààúë³<r°ë¼èLûs°ëó Àu&‹M&‹UèèɉL‰TëÔ&‰M&‰U&€e¿ëï6‰=6Œ?6‰>A6ŒCè¯úsë½t*6Ž%ÿwÿwÿwÿwÿwÿw 6ÿ6ß6Å6AèÅ×XrƒÄ °ëÎ6:ßtƒÄ °ëð6Å6AXP6ÇÒÿå6Œ÷6Çõ¸èîÖrÌ6Å6#XˆG �G�G�G�G�GÆD6Å6=èj×6Å6#ÆåÆD°ÿèšçé Îè´ùst°ëš‹òQ6þÕ6ÇÒåè7×Y6ˆµs°ëà6Ž%Šo èëØt 6ÿ6+6‹é 6Ä>ß6 µª6 ßª¹ S¾©ó¤6¡+«6¡à«6¡â«6¡«ŠG ª‹G«‹G«‹G«‹G«^¹¬ª< àúuOñ€< t°.ª¹¬ª< àúuO2ÀªéZÍ6Å6ß‹ÖBVèçî^s°éPÍ‹D Äl Àxñ‹\Š6ˆµP6‰.à6Œâè¢ÕXÇÿÿèÚÔèyÔé-ÿúü.‰ã.‰&ª.Œ¬¼0AŒÈŽÐ6Œ6‰6èèVƒÆ ¿ °ªþȪ2Àªª¹ó¥±° óªƒÇ °Ãª^‹Æ«ŒØ«€L6‰66ŒÅ4èªöDtõ6‰66Œ½2AÅ4ƒþÿthè�÷D€uï6ŠD2íˆL 6Š 2ö6 V6ÅI‹7CC&ˆV&ˆvSQRèçÎ&‹F6; v6£ ZY[ŒØ^&‰v&Œ^VþÆþŽ؃Å^âÃ^ë‘‹ý‹. ¸{>£®Å£ú‹Ð�ê{>‹êï�í·U¿2AƒÇŠ 2í^«ƒÇ\â÷ƒï^¸ÿÿ«ƒÅ±ÓíŒÊÕ»‹ãŒÍ‰ãŽÅ&Œw3ÀŽØŽÀ¿‚‹ÅÆÀêÇÁž£ÃÇp*£¹ó«Ç€‰Ç„�Lj‰ŠÇŒ�Ç��Ç”{ǘ´Çœ¹2Ç �¹ 3À¿¨ó«¸š±ÓèŒßøG‰>•UR¡ã‹×èéÊ¿3À«ª°ÿ¹óªŒ¾EèÊZ]Y¾2A‹>ú+Ï;þvIùñAýŽÅé(Â6Æ76Æ86Æ96Ç:SP»7è}ÐX[à  ém º=t=tº˜=t ºŽ= tº�èëŒÉŽÑ¼€Í!rδMÍ!.£eéÎûŒÈŽØ´ Í!÷,ÿÿté�3íÆpÆp ƒ>ltÇlÿÿ€>duéÜù˺è謀>ktƒ>luºîè˜ëþºè�€>ku ¡%.£¸LÍ!Çlލ ´IÍ!‹#´PÍ!¡e€>du3ÀÆdÿ..�.�!X¿€¹@ó¥´QÍ!.‰#´PŒËÍ!.Çl�.Æd.€>dt=»ÿÿ´HÍ!¸.±Óè ;ØséKÿ´HÍ!r÷.Æd.£¨ Ø.‰`¸.±Óè+Ø.‰\ŒÈŽÐ¼€ŽØè}3í¸ÿÿ‡n=ÿÿt´.Í!ƒ>lÿué"ÿèZè@;btÆ+èãè/;btèëò¸7Í!ˆª €ú/uÆ« \Æ+¾¤ ¿H+Ž\ü¹ó¥¡`£ÿ.ZèËP3ÀXÃèË3Û‹h‹:Êt´>Í!ˆC:ît´>Í!ˆ.ƒÃ¹´>Í!CâùÃSP´QÍ!ŽÛ¡.£) Šà£X[Ãèé$ÿSP´QÍ!¡)ŽÛ£X[úµé4þº& ^è‚ÿuïè׺6€>^uº>èǺKèÁ¸ Í!ÃEº2¸=Í!s=uº  Øéôýè½ÿë勨ºp3ɸBÍ!r¹-Ž\º´?Í!œP´>Í!X�r;ÁtºèŒÿ뱎\¾¹¯(üÑé3Ò­Ðâûú‹¸"%Í!º½¸#%Í!ºŸ¸$%Í!Ãèÿºjè3¸ Í!$_'Ñ狽à‡ú螺”è˜ö€t º¨´ Í!뺞肀>+tèzþéqþºòèo¸ Í!èd ´ltÇlÿÿƒ>'tƒ>'uÆpƒ>ltÇlÿÿŠÄ‹×èþϺ è ºžè°ë뺦PSRV‹ò¬P$<0r<9w,0˜Ñà»úØ‹èßÿëŠÐ´Í!X¨€tØ^Z[XÃ#,8<KO[ks~ˆ¦»,ÃÏÕÚáæìWrite protecôBad uniôNot readùBad command DatáBad call formaôSeeëNon-DOS disëSector not founäNo papeòWrite faulôRead faulôDisëreadwrit e5writinç drive A Š device $ COMMANÄ allocation  file rror Cannot emorù batcèInserôAbort, Retry, Ignore? 0File3table bad¬0Invalid1.COM091.COM disk in drive A default drivå0and strike any key when ready°0Terminate8 job (Y/N)? EXEC failure°E5in EXE4°Program too big to fit in m7°0Bad or missing Command Interpreteò0No free4handleó0M73eµ06load1, system halteä06start1, exiting°2or4name°,ÿÿÿ_:/%PIPE1.$$$_:/%PIPE2.$$$õ  €\lU-/§LPATH=\BINCOMSPEC=\COMMAND.COM¼€¸ ±ÓèŒÉÁ£¨ ¡Œ® Œ² Œ¦ £`º.±Óê+£\¡, Àtþë ¸Ð ±ÓèŒÚ£ ŽÀ¸7Í!ˆª €ú/uÆú\�€>u&Æ\ \´:¢^@<@t"ý€>u¿£¾¡¹�ó¤&£ü£¢<èEø¾€¬ŠÈ2íãC¾�¬< t< t:ª u4Iã)¬ Í!ë4�2ö€Ê¸DÍ!‹Ó[[Q¹3Û´>Í!Câù‹Ú´EÍ!´EÍ!´EÍ!´>Í!Yã]éXÿƸР±ÓèŒÚ£ ŽÀÆDÿ ^Y‹>¬I< t < tªãëñVQ¾ú¹&ŠEÿè{uFI󤋸=Í!r ‹Ø´>Í!Y^ã-éùþº<´ Í!¾ú‹>¹ó¤ëäéáþþk€>ÿuÆâë€>kt'´PŒÛŽÃÍ!¿ ¸‹«ŒØ«¸½«ŒØ«ŒºZ¸.%Í!¡£%Œ¡£hŒ Œ Œ! ¿2‹6€>ŒØŽÀt¾ WèÖ‹÷_s ‹6�ÆÐ ¬ª Àuú»Ã ±Óë´JÍ!€>u» ´HÍ!Ž £ ŽÀ3ö‹þ¹ ó¤èïõè;ö‰bƒ>luº(´ Í!€>u_»´HÍ!rF£,ŽÀ3ÿ€>u ´Í!A¢¾¹ó¥¸ÿÿ± 󫺸=Í!r‹Ø´>Í!ëŽ,´IÍ!Ç,¸ £¡\£ÿé ô€>ª /tlÿué9üŒÈŽÐ¼.ŽÀ6ŽJ+û6ư)€6Æ3*€ ít 6DZ) ë€>jt º¶*´;Í!€>q t €>p uèãÆdÆjŒÈŽØ+L+º÷â  Òt¸ÿÿ£g+ŽJ+ögÿtèTrèú ´Í!6¢Z+ögÿtè=rè~ öp ÿté öpÿtéÆ ÆH ÆG ÷,ÿÿtéƒ>lt¾ÿÿ‡6l¿5*3ɬªA< uùIˆ4*é3º°)´ Í!а)2íƒÁ¾°)¿3*ó¤éVW¿„+0ªèº ª< t <%uô&ÆEÿ=¾„+èà ‹÷_s¾„+¬ Àt< t <=tªëð°%ª^< téœèw <%t< ué˜,0r¢< wž˜‹ðÑæWŽ,3É‹Á‹ùIò®þ&‹5_ƒþÿtf¬< taªëøº'$6ÿT+t#Ž,´IÍ!Ç,ÆpÆp º$è-éþè%¸ Í!éþè{rÁ¿5*è÷ <:uèð < uùèé ÷,ÿÿuçéêýèÛ <%uéZÿª< uñ�ï6*‹Ç&¢4*è è1ögÿt º5*èÔè[è!té3¾5*¿ƒ+¸)Í!<t<ÿuéÔ鄊¢f+° ¹ Gò®° *Á¢ƒ+¿�3ÉV¬ª< àúöш€^èq£]+¿\¸)Í!¢[+¬:N+t < tèŸ uðNèO£_+¿l¸)Í!¢\+è>£a+ _+£c+€< t Fè+ c+ëñ ƒ+Šf+ Òté‹þÈuOŽJ+ƒ>lÿtéªýé"ý“Ã3Ûè= :N+uó�Ë€Fè/ < tçFèŸ ¿8¹�ò®u ¸Óà ØëÓëÑVBAPWºk%é²¾²(µ¿ƒ+Š ã2ó¦Ÿñž¬¢X+­uì‹Ð€>X+t  [+ \+<ÿtÍèùÿÒéŒüé…üþÊþÈt÷ÆY+Šf+ˆƒ+èä °?¿Œ+ªªªºÿ+´Í!èˆ ‹÷¿ù*Æ´ºƒ+Í! À´uC�>,COu€> ,Mu€Y+éÇ�>,EXu€> ,Eu€Y+ëÆ�>,BAu¾€> ,Tu·€Y+ë°öY+tÇ,EXÆ ,Eé†öY+tÇ,BAÆ ,Tºÿ+´Í! Àtè·é¹鮺¶*´;Í!ŽJ+Æj¿ù*‹ÖŽ ¬ Àt2Ûª Àt <;t¬ëôé‡&ÆEÿ;NŠ\ÿOSVR‹ò2Ò€|:uŠ€ê@ˆƒ+Wèå _sº1'èˆZ^[†\ÿ´;Í!ˆ\ÿ6ŽJ+þjr˜éøþŽL+´IÍ!ûÿÿ´HÍ!´HÍ!&£¨ £L+‹ØŒÈ+ú÷â Òt¸ÿÿ£g+Ãè�ŽJ+&Æp&Æp &÷,ÿÿuè®ÿ»´HÍ!&£,è«ÿ&Ž,Šÿ+3ÿèT 3À‹ÈIò®O O+&:Eÿtª¾,è_ ¸ÿÿ‹ß¹ ó«è¡¾5*¿# ¹ èó< t#ã &Ž,&‰?CC¬èåtª< t ëó° ªãÙIëÖ2Àª3À£.£0ƒ>lÿuÇlðÿéjúèN€=tŠEÿè¦t O+ªë  ÿ+@ª°:ª¾,èÜ èªŽL+´IÍ!ŽJ+&þd&Æj¿\‹÷¹Ró¥ºù*» ¸Kÿ.P+ºe$èé úƒ>lt�>lÿïðŽJ+¢jÃ÷n+ÿÿuº—$ëÓ m+:l+tèx‹6n+3ÿ脺S%èä´6Š\Í!=ÿÿtÊ÷á÷ã‹ú‹ðèfº]%éÆRºõ ´AÍ!º ´AÍ!3À£p ÆgZús'뺚'èÚÿéoÿŽJ+þq ´Í!A¢ »õ ˆ‹Ó3É´<Í!rÕ‹Ø´>Í!º ´<Í!rƋش>Í!èËÆg‹6r ƒ>lÿuÇlðë#Æg‹6r ¬<|uw‹ ¸=Í!rŒ‹Ø°ÿ†G¢¿5*3É€< uépÿ€<|tø¬ª< t8A<|uõ&ÆEÿ I6ˆ4*N‰6r ‹ Q3ɸ<Í!Yr¸‹Ø°ÿ†G¢‡ ‰ ë 6ˆ4*N‰6r èWéøúèýþ�>lðuÇlÿÿ镸ŽJ+3ɾ5*‹þ¬< t<"u÷þÅëó‹÷¬<"uþÍt ˆGþÁ¬<"uöþÍ<>u2€<>u¬&þG è™< u &ÇH ëhW¿H ¬< tDèˆt?:N+t9ªëí<p t¿t &‰>r ¾5*謪< uúˆ4*&€>p À>N+/tX,té ¾\¿ÿ+‹×¹ ó¤´Í!º 'PèÑèÕèPX Àu ö,€té¸ü´ÆUÿÆ[�r&t°?¿]¹ óª‹6Z,¿\¸)Í!´ºUÍ!PèTXëºUÍ!þÀuéoüé¡ÿn+¾,èÒöN,uì¾,ötºL&èYëèæ¡, Àtv¿p+P¸ «X‹Ð±Óè$·èi °-ªŠÂ$è_ °-ªŠÆÐèP%,3À‹Ø‹è¹ ÑæÑוèO•“èJ“âî¿p+¹’è'“è •è 3Àªºp+é5 PŠÔèZŠòÐêÐêÐêÐêèŠÖ€ât±þÍ"Í€Ê0*ъªÃÀ'†ÄÀ'†Äú,(¾€¬ Àtè< tè!ýs €>X,tº‹&é«úé è ýs €>X,tëé‹6R,¿lèä¸)Í!€>m º,(t´º\Í!PèlXº€$þÀuékúþ�è¸< ué™è¸=Í!º—$râ‹ØŽL+3Ò6‹g+´?Í!‹Èã=S»´@Í![r ;ÁtäI;Át)»¸DÍ!ö€uéo ŽJ+€>jt º¶*´;Í!2ÀèúÃ.ƒ0Sº_6‹v-´?¹Í![‹Èr ã _<u(Ž,´IÍ!Ç,è7 ° �>lðÿuÇlÿÿÆgìètúNÃ< t<=t <,t<;t< þ�èßÿ€>\t FF‹ÞèÑÿ;Þu < tºk%éoùèþ¿U¸ÿÿª3À««ª°ªG¹ °?óªºÿ+´Í!ºU´Í!Pºf&èj  \@<@u Z+Aèœ X Àt º}&èN éÐýºx&èE ¾,¹ ¿p+‹×ó¤¸ «3Àªé3 è°ýèéªýºV&è ¿p+´0Í!P2ä± öñ±Òà ĹŠÐèÚý°.ªXŠÄ2ä± öñ±Òà ĹŠÐèÀý3Àªºp+éå èér&€=u ḛ̀:è ë8&ŠG Àt0<$tèû ëï&ŠG»k( ÀtƒÃèE:t€?uñëÓWÿW_  ëÈúe(é‹ °=ë°ë °>ë°<ë°|é´ ¾€¬2ä£P,‰6R,Æ\,ÆX,‹6R,‹P,‹Öã;QVè/õ£T,[+ÞYË‹Öã)I¬èdúuþX,Y+ù‡ùÀ< t ¬è7è?<=uðþ€¬ Àtè¬ü< ÃŽJ+&Ž 3ÿè &€=u÷ð=ë2À¹ò®ÃÍ!ºP'è�ë)�2ö€Ê¸DÍ!S¹3Û´>Í!Câù[´EÍ!´EÍ!´EÍ!´>Í!ŽJ+¡£h¸ÐP˾i(¬ŠÈ2í´¬ŠÐÍ!âùá]+ c+º¨%u5¾�èJû< tF­=: uéÿè üö\,u´;Í!sWé$úèu´9Í!sIºŸ&éÄôº,(ëø¾�è û< tñ¡]+ c+º¨%uâèaüö\,ÃèÞÿu´:Í!sº¼&é�ôº‰%觸 Í!è2ùÿ¶*ŠÂ@<@uZ+þÀªŠ&O+°:«‹÷´GÍ!rù¬< tªâø¬< tŠà°.ª†Äª±¬< tªâø2ÀªÃÆp�>lÿuÇlÿÿé-î€>÷ÿtOºÿ+´Í!ºø´€>÷t´Æ÷Í! Àu¿¾ÿ+¿r&‰>õ¬@<@t &€>qt´:«èuÿ&ÆEÿ ‹õ€?t‰‹ó¬< uû‹Ö¾š¿5*3ɬ<%uŠ&ô:$uFV‹ó¬< tAªë÷^ëãªA< uÝI6ˆ4*‰õögÿt&ÆEÿ$º5*è—&ÆEÿ é¶ïé¶ïŽJ+º‚'�>lÿuÇlÿÿéFó¾�3ÉŽJ+¿r2À&¢q&†p ÀuË&‰>õ&Æ÷ÿèqù­<%um&ˆ&ôèdù< t$­=INt=inuVèRù¬<(uNèJù<)uŽJ+é·þ¬< tB<)tª<*t¿š¬ª< uú&þp&ƒ>lÿu&Çlÿ&€>÷u¿ø¾r€|:uþq¸)Í!ÃXºs'é^òÆY+¾�è§ø< të‹î¿–(µ‹õŠ Gã3ëu¬&Š%G:Ät€Ì :ÄâîŸù‹GGžuÛ¬< tºèwøuÑèjøÿãöY+ë¸V3ɬ< t¡è_øtAëó<=t< t‘¬ëõ¬<=u‰è?ø< t‚_ó¦t€|ÿ t¼¬< t·è0øuö°ÿë¬è&øuí2Àë¿ÿ+¸)Í!´‹×Í!öY+ÿtöÐ Àtéµëè÷÷‹Î�é�(€Š€ˆ4*¿5*ó¤° ªéÜí· 2Û¬< t¤èÖ÷t ,0†ÃöçÆÃëêŽJ+Š&e2À:ãs¦þÈ뢎J+¡,©ÿÿt3ŽÀŽØ3É‹Á‹ùIò®‹÷FF¹ ó¥ƒ=ÿt‹5Çÿÿ6ŽJ+¬< uû€<t&‰5ÃŽJ+÷,ÿÿtó3Ò‰.‰0è~¿]¹ ° ò®uAƒé ÷Ù6‰ÿ+èèö<:t!èáö< uèÚö<:t÷,ÿÿuêè=ºa'éÀð¿]6‹ÿ+Qè·öY &:uë, &:uÐGâèè ö< wÆ< tè•ö< uùèŽö.‹v-´>Í!ÃŽ,3Ò¸=Í!r6£v-‹Ø‹.‹0¸BÍ!Ëڊ,@ùÌȎÀŽØÇ� Æ3*€Ç4* èè™˾�è�ö< t9»-/è ëC�W¿p+´*Í!˜‹ðÑæð�Ƽ%‹Ù¹ó¤° ª‹Ã‹Ê²döò†Ä’³-éºà%èèÇÿºñ%»-/è°t6r5¬:Ãt:Çu,èÕr'¹l€< t °döä‹ÈèÂrŠÄ´Ȭ< u ´+Í! ÀuúÑ%èËë¶¾�èëõ< t»::ètë�´,Í!³:騺&è§èîÿ3ɺ$&»::è?tfr3‹Ê3Ò¬< t":Ãu&³.è^rŠô¬< t:ÃuèNrŠÔ¬< u´-Í! Àt1º&è\ë¶èI´ º3*Í!èÒó¾5*€< tèrŠô¬:Ãt€û:uN²Ã:ÇùuúèŠÔÃèrïŠàè rÕ Šà Ê,0rù< õrôFÃW¿p+ŠÅ·è)ŠÃªŠÁè!ŠÃªŠÆè€û:u°.ªŠÂè 3Àªºp+èÖ_ÃÔ †Ä 00<0u*Ç·«Ã’Pè�X’ÃRPSQ.ŽJ+€>p uè è*Y[XZÀ> tº ¸=Í!º—$r ‹Ø°ÿ†G¢ÃéHî€>H t6€>G tºH ¸=Í!r 3Ò3ɋظBÍ!ëºH 3É´<Í!ºÝ$rȋذÿ†G¢æuü€|ÿtöëõRQSP»p+ˆ‹Ó»‹Ë´@Í!X[YZÃPS°$»ëP° ëP°$ëP3ÀS»QW‹ú¹ÿÿò®÷ÙII´@Í!r ;Áu_Y[XÃ.ŽJ+º¨$€>p tÆp ºš'éŒí¹ ¾]¬ÿéÅñŽJ+Šgº(ë(éíèW¸3r u²Í!Ã2ÒÍ!Ê€ Éuá2ÀÍ!ŠÚºò'èÿºí' Ûuºç'éùþè"¸.r uÍ!ÃþÈÍ!Ê€ Éu®´TÍ!ŠØºü'ë˾]¬ µ,ÿt ‹6h-‰6¶,Ƶ,ÿ3í‹6h-³+¿-èöÇ€t#öÇuðèìè5ò¿ƒ+¸)Í!»C,¾„+‹>º,èŠé‹è¸3À¢e+£i+¢f+‹6¶,‰6h-èÀté‹éP3À£c+¢\+¢q-¢m-¢p-£n+¢n-¢[+¢µ,£-£],£½,£B,£ÿ+£¿+H¢k+¢´,¢X,¾�³+3í¿-èˆrGöÇ€tÆq-öÇt .a+ .c+ëÝöÇ€uþ\+V¡x-¾-+Æ¿],Ç£Z,ˆY,Aó¤ˆ>\,Ça+^믠q-¢[+ÐàÐà¢j-º,( \+ Àt<véfë½  X,<u  Z+A´:ÆF¿],«Ça+ÆFÆFè�€~u€>^,:u€N¿_,ÆFèu‹~€=uº‹&€}þ:uªÆF€NèYº¨%¡c+=€t”©t´TÍ!ŽJ+2ä£n¸.Í!3í¾�³+¿-è’öÇuõ .a+÷Åu €>[+tÆp-V¡x-¾-+Æ¿½,Ç£º,ˆ¹,Aó¤ˆ>¼,^‹Åè è©çèè]é›è‹6n+3ÿèHïºA%è¨üéˆä€>[+u[º½,è�üèﺗ$é¯V¡x-¾-+Æ¿½,Ç£º,ˆ¹,Aó¤ˆ>¼,^‹ÅèÇèPçèÁ€>[+u 3À¢e+£i+¢f+‰6h-¿¶*½¸,èž‹6º,À>q-uë€3í‹6h-³+¿-è»öÇ€tëöÇuðè�ÿ¿\¸)Í!¡½,€ü:t°@,@¢\´舜è¼ï�téTÿ2À†k+ Àt ¹ ¿B,¾ÿ+ó¤2À¢l-‹>º,¾,èOõ€>[+uö¼,t º½,èÆûèCîèQ€>[+u è rÆe+€>[+t èÆöµ,ÿtéìüè uÆf+ë¦éDÿ´ö¼,u äÃP´ºÿ+Í!Xº\Í! ÀÃÆY+º½,¸=Í!rð‹Ø‰-¸WÍ!‰r-‰t-¸DÍ!€â€ˆ-t €>m-tºÀ'éM‹-‹g+‹i++Êuè@€>o-ue‹g+ŽL+´?Í!rU‹ÈãQ€>-u€>p-t‹Ñ‹>i+°ŽL+ò®uþY+A+Ñ‹Êi+‰i+;g+r èë€>o-uë�€>-t€>Y+t�‹-´>Í!À>f+uø a+èòt6‹i+;g+u è¢tùÃ3ÛŽL+Çÿi+Æl- n-2äi+r=tcèvuÔ€>n-tW‹±,‹t-‹r-€>j-t1´,Í!ÐáÐáÑáÑáÑáÐî ÎQ´*Í!�鼆éÑáÐæÐæÐæÐæÐæ€Õ ÖŠõY¸WÍ!´>Í!ÿn+þf+øÃ‹±,èæÿº],´AÍ!Çn+ëè [+PèX:[+ÃÆo-€>e+té€è<èu€>-u€>[+ºó$t[Æl-¸=€>l-u´<3ɺ],Í!ºÝ$r>£±,Æe+‹Ø¸DÍ!ˆ³,ö€t2 a+$ u  p- m-tz ¨t¸D2ö€Ê ˆ³,Í!ë ëuÆp-€j-€>l-uè‚u€>-uº%è2ùÇi+þo-˱,3ɇi+ãóþn-€>l-uU3ÒŽL+´@Í!º¨$r+ÈtÓö³,€tö³, u €>j-u?It<ºK(èÝøþf+€>e+t‹±,´>Í!º],´AÍ!Æe+éü3҇ѸBÍ!€>Y+t´@Í!Ã$ zP$¢m-X$¢p-j- p- ÀÀ>X,ÿu ¿¶*½X,èÒè6ì2À†´, Àué‹6Z,¿¿+¸)Í!¡],€ü:t°@Šp-,@¢¿+ \,Š&¼,% Àt:Äu€>q-tþµ,2Àë4"ÄÐè q-¢[+ÐàÐà¢j-€>m-u$¢p- Éu Àt‹i+ã°3ÿŽL+ò®uO‰>i+»,€>[+t»C,¾À+‹>Z,¹¬Í!ö€uAöFt;‹V€þ:t²@€ê@èÉð‹ÕƒÂŠ~€ç€ÿu‹v€|þ:uÆFëÆFNë^€ÿuÆFô;Í!r&è!å‹ú3À‹ÈIò®O O+ÆF:EÿtªÆF€Nè<ÃÆFŠ~öÇtóÆF‹v€<t €<.t€|þ:tÆFN2Û†´;Í!†rèÇäÃéþé‰~€F ¸?.¹óª†Äª†Ä±óª2ÀªÃQP¾½,¿],ŠZ+Šé€|:u­,AŠÈ€}:uŠGG,AŠè:éu è[öt‹Dÿ‹MÿP"ÁXu<.u äë€ù.u íXYÃ3À£x-¢{-¢|-ŠøœW3ɬèŒêu< tö< tò†|- Àtêéêèäí:Ãu€Ï€ëÛ< uéÐ:N+uéÑ€<:uèþ¬èú‰>x-Æz-é…‰>x-Æz-è4æuP Z+Aè×°:èÒX‰>x-Æz-<.u þ{-Æz-ÿ{-t´°?*&z-rR†áã †á葆áâ÷†áèÚåu€ÏöÇu<‰>x-ÿx-Æz-ÿÆ{-èi¬è*íè·ét(< t$:N+t:Ãt<:u†ÆDÿ ëº(é;ãé‡è2ÿN_�ùÃNë.€Ï�Í€èxéF< tçè#èåìWQ¿8¹ò®u¸Óà èY_°ª_�øÃªAþz-à Batch file missing $ Insert disk with batch file and press any key when ready $Bad command or file name $Duplicate file name or File not found $Insufficient disk space $Out of environment space $File creation error $File cannot be copied onto itself $Content of destination lost before copy $ File(s) copied $ File(s) $ bytes free $Invalid drive specification $Strike a key when ready . . . $Invalid parameter $SunMonTueWedThuFriSat Invalid date$Current date is $ Enter new date: $ Invalid time$Current time is $ Enter new time: $Are you sure (Y/N)? $ $MS-DOS Version $ Volume in drive $ is $ has no label$Invalid directory $Unable to create directory $Invalid path, not directory, or directory not empty $Must specify ON or OFF $ Directory of $No Path $PATH=PROMPT=Invalid drive in search path $Invalid device $Label not found $Syntax error $ FOR cannot be nested $Intermediate file error during pipe $Cannot do binary reads from a device $off $on $BREAK is $VERIFY is $ECHO is $Invalid path or file name $Invalid number of parameters $Error writing to device $ DÕTkP/NVü G£L§B«_¦ $dEŸH •Q›NOTá ERRORLEVELoEXIST1DIRã RENAMEM RENM ERASE& DEL& TYPE‹ REMCOPYâPAUSEfDATEÂTIMEXVERó VOLd CDíCHDIRíMD MKDIR RDURMDIRUBREAKóVERIFY(SET«PROMPT–PATH<EXITeCTTY€ECHOºGOTOÝSHIFT�IF—FOR¯CLSÛM×_[‹õåååMZá?^`ÿÿ¿è­â⓱¹ÎÖÞí#1=HS\jo‡�¡©ÂÏâ(Z}¨ºÇÌÑÖ%-2@NSfty~ 6.6H6V6^6f6›6Ì6ß666L6c6l6�6¡6ª6Ò6636F6]6�6’6³6Ý6p6}6·6Ö6ë666<6F6K6T6[6p6Ÿ6§6¶6Î6Ö6î66(696K6n6�6�6™6°6Ã6Ð6ò6þ666jâ—e—w—‘—¯—½——ç—ý———$—M—b—x—‰———¨—Ë—Ñ—Ü—í——¥—Ø——‡—’—¯—×+—I—ˆ—Ø—2—E—[—n—¶—Ö—¶â†‘²¾ÌÝæHªÇZhzóˆà5Ój•£·Å†¾þ%3FO]4�’�¶�Ë���D�T�i� �)�f�v�‹�l�Ð�á�@ÞFÞ^Þ€ÞúÞcÞ‚Þ›Þ§ÞäÞðÞÿÞÞ!Þ2ÞSÞyÞ“Þ¦ÞÀÞÓÞòÞ ÞkÞ„Þ¤Þ¼ÞÏÞãÞùÞÞ/Þ;Þ\ÞvÞ…Þ–Þ¢Þ³ÞÙÞôÞÞÞ4ÞFÞYÞnÞ*â.â«5Ã5é5I5b5{5÷5e5x5˜5µ5#5%565Z5�5›5³5×5ï5555M5u5…5�5•5Ò555�$�0�{ œ Å Ö Ý ™ V [ØjØÅØØØØòØØ¹ØË؈Ø^ØpØÆØ(ØSØåØ÷ØFØÉØ�ؽ]]<]Y]u]Œ]£]º]Ì]â]þ]],]C]ú,ÜyyEyÑyóyøywy$y6y?yHyUy2y>yCyiÇøÇ2Ç:ÇCÇPÇ Licensed Material - Program Property of Microsoft Inc.âú.޼¸8‹ìûš ZšÈÇø¸ Pš-Þš5ÄPèñšÙ öÐÐØs š;—š Þƒ>–uƒ>˜tš‚ÄP°Pš„—š š �ûôU‹ì ÐØs ÿ6øšèØ£Çø]ËU‹ì ÐØs ÿ6øšèØ£š¼�]ËU‹ì ÐØs ÿ6øšèØ£š‚ÿvš-Þ]ÊU‹ìÿvš-Þ]ÊU‹ìƒì ÐØsq¸Pš-Þÿ6ð°Pš{�£‹�GPšgÞÿ6ö�FúPš5؉Fþ¸Pš-Þÿvü°Pš‹Þÿvú°Pš‹Þ¸Pš-Þ ´P°Pš‹ÞšnÞ ÐØs ÿ6øšè؉FþšnÞÿvš�‰ì]ÂU‹ì¸+Pš½ÿvš-ÞÿvèBÿ]ÊU‹ì¸9Pÿvš—]ÊU‹ìQš;�°¢¢š¢¢š—Ç Ç ÿÿÇò‰ì]ËU‹ì‹^ €uƒt¸ZPš-Þ‹^�GPšgÞ¸oPš-Þ]Ê U‹ìƒì Æ ÿÆÿ¡ò£ôƒ>ôuéÜÿ6ô°´Pš{�‰Fþ‹^þ‹G£ô‹^þ€t‹£ðP°Pš{�‰Fþëä‹Fþ£ú�öQ‰Ã�OQŠG´P¸P¸Pší ‰Fúƒ~út%¸ˆPš½‹ú�GPšgÞšnÞš š �Æ  ÐØs œöÐÐØsÆÿdžÿ^  ÐØs ¡ £ Æ ÿ6öšè؉Fúƒ~útÿvúšµéÿƉì]ÂU‹ìQš‰Þ´‰Fþ‹Fþ%€ƒøt‹Vþ�â±ÓâRš‰Þ´YÁ‰Fþ‹Fþ‰ì]ÃU‹ìƒìš‰ÞˆFö€~öušøÞ‰Føš‰ÞˆF÷šøÞ‰Fþè˜ÿˆFõè’ÿˆFôèŒÿˆF÷ŠFö±ÒèˆFó‹ KÑãÿ· °P°ÿPš—‰Fü‹^ü‹FþG‰ì]ËU‹ì�ì èOÿˆ†ùþèHÿˆ†÷þ€¾÷þu šøÞˆ†ùþƒ> wéàš‰Þˆ†ÿ€¾ÿt(ƆøþІÿþÈ8†øþwš‰ÞŠŽøþµ‰Îˆ‚ÿþ†øþuÝšøÞ‰†þþèæþˆ†ùþІÿ´;v£ ÷ ÐØs”�†ÿP°P°ÿPš’—‰†üþ öÐÐØsS�†ÿPšgÞ¸³Pš-Þ‹žüþ‹G‰†úþ¡ H‰G‹žúþÑãÿ· °Pš{�‰†üþ‹žüþ�GPšgÞ¸ÎPš-Þë ¡ H‹žüþ‰Géÿ‰ì]ËU‹ìƒìÿ6ú�FøPš5؉Fþ‹Fø%ÿƒøuÇFüë‹Fø%ÿ¹+ȉNüƒ~üv=ÿ6úŠ®µ‹Fü1Ò÷ñB‰Ó�‡®P¸P𕨉Fþƒ~þt ¸îPÿvþš—ÿNüë½ÿ6ú�FøPš5؉Fþ‹Fø%ÿƒøt ¸#Pšµ‹Fú±Óà‹Vø± Óê‰ì]ËU‹ì�ì�> ôr ¸P¸Pš—š‰Þˆ†ÿ€¾ÿt(ƆùþІÿþÈ8†ùþwš‰ÞŠŽùþµ‰Îˆ‚ÿþ†ùþuÝ öÐÐØré€ÿ6ð°Pš{�£ú‹>ú�}‹úŠOµ°.QWùOýãò®tI‰Žüþ_Y°:ùOãò®tI‰Žúþƒ¾üþÿu ŠG´‰†üþ‹†üþ+†úþHˆ†ÿ‹6ú�t¶úþƒÆŠŽÿ�¾ÿµüò¤Š†ÿ´;v£�†ÿP°P°ÿPš’—‰†þþÿ6¶šÉ� ÐØr颋žþþŠGÐØsÿ–닞þþƒt ›ÐØs�†ÿP¸PšW5‹žþþƒu* öЊOöÑ"ÁÐØsšÀ6‹žþþ‰Gÿ6�†ÿPšðÞ‹žþþƒt!ÿw°´Pš{�£ú‹ú�GPšÞÿ˜‹žþþÆG‹žþþÇGëG‹žþþƒt#¸7Pš-Þ�†ÿPšgÞšnÞ¸OPš-ÞëšÀ6‹žþþ‰Gÿ6�†ÿPšðÞ‹ Ñã¡þ‰‡ ÿ ‰ì]ËU‹ìƒì °ˆFõÆFöÿ¢ö ¢÷ š‰Þ¢šøÞ£ €>�uš­6é9€>ˆu �öÐÐØsvš‰Þ¢š‰Þ¢€>�u\ÿ6ú�FüPš5؈F÷ÄFü‰FøŒFú¡†)Füƒ^þÿNüƒ^þÿ6úÄFüPš«ØˆF÷ÿ6ú°€Pš/؈F÷ÿ6úÄFøPš«ØˆF÷é©€>˜uš?6ë!€>‚t€>€°ÿt@"FöÐØs ÆFöšs6é�€>Šu^ÿ6 š¾Þ ö ÐØsšÀÞ ÷ ÐØsšÙÞŠFõöÐÐØrlÿ6ö�FüPš5؈F÷‹Fü%ÿƒøt š‰ÞˆF÷ÿFüëèš8ÞÆFöÿë0€>ñt1€>ðuÆFõÿ¡ HPš¾Þƒ> tšÞš‰ÞˆF÷é‘þšÞ‰ì]ËU‹ìQÇø¸PšC—£øÇFþ�~þÿw‹^þÑãLJø ƒFþsè‰ì]ËU‹ìƒì¡ P¡¹1Ò÷ñYÁƒÀ%H¹%1Ò÷ñPšý—£¡‰Fú¸PšC—£‹ÆG%ƒ~úv¸PšC—‰Fô‹ÆG%ÿNúëáÄhP°Pš„—ÄhP°Pš„—šÀ6‰Fö‹Fö± Óà‰Fü‹Fö±Óè‰Fþÿ6úÄFüP𫨉Fòÿ6ú�’P¸P𕨉Fòƒ~òtÿvòš%ÞšÀ6‰Føÿ6ú�FîPš5؉Fò�FîÿƒVð�fîþÇFêÇFìÿ6úÄFêP𫨉Fòÿ6ú�FîP¸P𕨉Fòÿ6ú�P¸P𕨉Fòƒ~òtÿvòš%Þÿ6úÄFîP𫨉Fòƒ~òtÿvòš%Þ¡‰Fô¡‰Fúƒ~úv=ÿ6úÿvô°´Pš{�Pš QS¸P𕨉Fòƒ~òtÿvòš%Þ�FôÿNú뽉ì]ËU‹ìQ�~ƒv ¸åPšµÆFÿŠ^ÿ·Š‡q´9FvþFÿëëŠ^ÿ·Š‡q´‰ì]ÊU‹ì�ì‹^ ƒÿtl‹^�G‰†üþ‰ÃŠþÁµ‰Æ�¾þþüò¤‹^ €u‰^þІþþ´‰ÆÆ‚ÿþ!þ†þþë#‹^ ƒÿt'‹^ ‹_Ñãÿ· °P°Pš—‰Fþ‹^þ‹G‰†îþƒøué�†þþP�†úþP�†øþP�†öþP�†ôþPšÓ—ІþþþÀþÀ±Òè´‰†òþ‹†úþ± ÓàP°ÿPš{�‰†ðþƆëþ€¾ëþ%s$‹žðþ‹¶öþ€8té�¸+†òþŠO%µ;ÈrÆG%ÿ‹†øþ†úþ‰†úþ;r¥¡)†úþ뜋žðþŠG%‹¶öþˆ‹žðþŠG%´Ñà�Á‰†ìþŠŽþþþÁµ‰Ç�¶þþüò¤Š†þþ´†ìþ@ ‰Ç¹�¶îþüò¤‹žðþŠG%´†òþˆG%ëþ†ëþ‹†ôþ†öþ‰†öþƒø%rƒ®öþ%é?ÿ‰ì]Ê U‹ìƒì‹^ŠˆFó�‰Nö´ȉNô¸‰Fþ‰Fú‰Fü‰Fø€~óvT‹^öŠ ˆFò‹^ôŠ€É ˆNñ‹Fþ±ÓÀŠVò¶3‰Fþ‹FúÓÀŠ^ñ·3ÉFú‹FüÓÈ3ÉFü‹FøÓÈ3‰FøþNóÿFöÿNô릋Fþ1Ò÷6‹^ ‰‹Fü¹%1Ò÷ñ‹^‰‹Fú1Ò÷6‹^ ‰‹Fø1Ò÷ñ‹^‰‹^ ƒ?uÇ‹^ƒ?uljì]Ê U‹ìQ‹^ Š‹^:u8‹^ ŠˆFÿ€~ÿt.ŠFÿþȈFÿ´‰Æ‹^ ŠH‹^:HtàŠFÐØs Š@2Á< tаë°ÿ‰ì]ÊU‹ìQQ‹^ŠˆFÿˆFþ€~ÿv#ŠFÿþȈFÿŠFþ±ÒÈŠNÿµ‰Î‹^ŠH€É 2ÁëÔŠFþ´‰ì]ÂU‹ìQQ¡øH%þ‰Fþ¡øF;Fþv‹Fþ£ø¡ø‰Fü‹Fø°ÿr@ÐØs ¸•P¸Pš—ÿvü°ÿPš{�£‹Fü‰ì]ÊU‹ìƒìÿv°ÿPš{�‰FþŠ^·Š‡l´PšC—£ü¡‰FüÆFûŠ^·Š‡lþÈ8FûwŠFû´‰Æ‹^üÆþFûuÞŠF‹^üˆG‹^þ‹G‹^ü‰¡ü‹^þ‰G‹Fü‰ì]ÊU‹ìQ‹F £þP°Pš{�£ú‹ú‹G£üÆÿ6ü°Pš{�‰Fþ‹^þŠG:Fu‰Øë/‹^þ‹£ü€uÔŠFöÐÐØs¸ëÆÿÿ6þÿvš —ë‰ì]ÊU‹ìQQÿv èbþ‰Fü‹^üÑ㋇ø £þƃ>þt逊FöÐÐØrrÆÿ‹^ ŠþÀ´PšC—£þ¡£ú‹^üÑã‹�ø ‰Ã‰‹úÆG¡þ‹ú‰G‹^ ŠþÁ‹>ú�}µ‰Þüò¤‹^üÑã¡þ‰‡ø €~t Pÿvš —ëH¸ëCÿ6þ°Pš{�£úÿv ‹ú�GP°ÿPš«—ÐØsÿ6þÿvÿvš—ë ‹ú‹£þé3ÿ‰ì]ÊU‹ìƒìÇFþ�~þÿvé‹‹^þÑ㋇ø ‰Føƒ~øtpÿvø°´Pš{�‰FúÆFñÿ‹^ú‹‰Fô‹G‰Föÿvö°Pš{�‰Fü‹^ü‹‰FòŠF:Gt<uÿvúÿvüÿvøÿvöŠFñ´Pÿ^‹^ü€t ÆFñ‹Fòë´‹Fô뇃Fþrékÿ‰ì]ÊU‹ì]ËU‹ì�ìš ÐØs¡ƒÀë ¡ƒÀˆ†gÿІgÿ´9s´£ÇFúÇFî‹Fú;Fré3 ÐØsƆhÿëƆhÿ‹vúÑæÑæ‹^ĉFðŒFò ÐØsp‹Fò;Fîth‰FîšnÞÿvò°Pš{�‰Fþ‹^þ�G‰Füÿ6ø‰Ã�OQŠ´P𕨉Fô¸¸Pš-Þÿvò°P°Pš—‰Fø‹^øÿw°Pš‹Þ¸ÂPš-Þ° �¾iÿ‹üòª‹Іgÿ´+ÈŠ†hÿ´;Ávé ‹Fú;Fréþ‹vúÑæÑæ‹^ĉFðŒFò ÐØs ‹Fî;FòtéÚÿvð°Pš{�‰Fþ‹^þ�G‰Fü‰ÃŠˆNí�wІhÿ´‰Ç�»iÿµüò¤ öÐÐØs|ІhÿF틊Ví¶+ÊA´‰Ç�»iÿ°.üòªÿvð°P°Pš—‰Fø‹^øƒÿtB‹_Ñãÿ· °Pš{�‰Fþ‹^þ�G‰Fü‰ÃŠˆNí‹6Іhÿ´ð�G�ºjÿµ‰Æüò¤ë‹6Іhÿ´ðÆ‚iÿ*Іgÿ†hÿÿFúéÞþІhÿ<°ÿw@ŠŽhÿþɵ‰ÎP€ºiÿ °ÿt@Z"ÂÐØsˆŽhÿëÓÿ6ø�†iÿPІhÿ´P𕨉Fôƒ~ôušnÞƒ~ôt ¸ÏPÿvôš—éÂý‰ì]ÊU‹ìƒìHÇFþ‹FH‰FüÆF¹‹Fü+Fþƒør饃~þu ƒ~üté–‹Fþ@‰Fö‹Fö;FüwaH‰Fô‹vöÑæÑæ‹^ĉFêŒFì‹vôÑæÑæ‹^ÄPÄFêPšuÐØs‹vôÑæÑæ‹^ĉ@Œ@ÿNôëÍ‹vôÑæÑæÄFê‹^‰@Œ@ÿFöë—€~¹ué>ŠF¹þȈF¹´Ñà‰Æ‹JÒ‰Nþ‹Bº‰FüéMÿ‹FüFþÑè‰FòÑàÑà‰Æ‹^ĉFêŒFì‹Fþ‰Fú‹Fü‰FøÑàÑà‰ÆÄPÄFêPšuÐØs<‹vüÑæÑæ‹~òÑçÑç‹^ĉŒA‹vüÑæÑæÄFê‹^‰Œ@‹vòÑæÑæ‹^ĉFêŒFìÄFêP‹vþÑæÑæ‹^ÄPšuÐØsS‹vþÑæÑæ‹~òÑçÑç‹^ĉŒA‹vþÑæÑæÄFê‹^‰Œ@‹vòÑæÑæ‹^ĉFêŒFì‹vüÑæÑæÄQŽFìPšuÐØs<‹vüÑæÑæ‹~òÑçÑç‹^ĉŒA‹vüÑæÑæÄFê‹^‰Œ@‹vòÑæÑæ‹^ĉFêŒFì‹vøÑæÑæ‹^ĉFîŒFð‹Fú;Føw~ÑàÑà‹vøÑæÑæ‰Ç‹^ĉŒ@‹vúÑæÑæÄFî‹^‰Œ@ÿNø‹vøÑæÑæ‹^ÄPÄFêPšuÐØrá‹vøÑæÑæ‹^ĉFîŒFðÿFúÄFêP‹vúÑæÑæ‹^ÄPšuÐØré|ÿëÜ‹Fø+Fþ‹Nü+Nú;ÁsŠF¹´Ñà‰Æ‹Nú‰JÒ‹Fü‰Bº‹Fø‰FüëŠF¹´Ñà‰Æ‹Nþ‰JÒ‹Fø‰Bº‹Fú‰FþŠF¹þÀˆF¹< r ¸q'Pšµé,ý‰ì]ÊU‹ìƒìÆFóŠFóöÐ"ÐØs"ÿv °Pš{�‰Fþÿv°Pš{�‰FüÆFóëÿv °Pš{�‰Fþÿv°Pš{�‰Fü‹^þ�G‰Fú‹^ü�O‰Nø‰ËЉÆ8vˆVôë‹^úŠˆFôÆFõŠFõ:Fôs,´‰Æ‹^úŠH€É ˆN÷‹^øŠ@ ˆFö:ÈwŠF÷:För8þFõëÌ‹^úŠ‹^ø:v°ÿë%‹^úŠ‹^ø:r ÐØsŠFóöÐÐØsÆFóÿé!ÿ°‰ì]ÊU‹ìQ‹^ ƒÿt`�>r ¸èP¸Pš—¡±Óà‰Fþ‰Ã‹N ‰‹^ ‹_Ñ㋇ ‹^þ‰G‹^þÿw°P°Pš—‰F ‹^ ŠGöÐÐØsÿ‰ì]Ê U‹ì�ìÇ�†ð£ÆÄ´P°Pš„—ƒ>tX öÐÐØrO�†ðPÿ6š…¸Pš-Þ�†ðPÿ6šÆÿ�†ðPÿ6š…¸Pš-Þ�†ðPÿ6š‰ì]ËU‹ìQQ‹F±ÒÀˆFü<uÆFü‹FˆàFü´‰Fþ�~þr�nþ‹^þЇ¸ˆFý<ÿuŠFÐØs‰Øë$¸ÿÿëŠ^ý·Ñ㋇";Fu‹Fþë ŠFü´Fþë·‰ì]ÂU‹ìƒì°ÿ�>¸¹üòªÆFû �þÈ8Fûw,Š^û·Ñ㋇"‰FüƒøÿtP°ÿPèQÿ‰FþŠFû‹^þˆ‡¸þFûuʉì]ÃU‹ìŠ^·Æ‡ÿ]ÊU‹ìQQÆFýÿÆFü �þÈŠNü:Èw/µÑá‰Ëƒ¿"ÿu ŠFü¢¶ëŠ^ü·Š‡¹:FýwˆFýˆ¶þFüuÅŠ¶·Š‡ÐØsSšN�ж·ÑãLJ"ÿÿè0ÿ ¶‰ì]ÃU‹ìƒì ·ÐØsrÆ·ÇFö¸± Óà‰FôDz�‰FúŒ^üÇFøP¸PÄFôPš( ‰Fòƒ~òu� PÄFúPÿvø¸P¸Pší ‰Fòƒ~òt ¸Pÿvòš—Š^·Ñ㋇"‰Fþ;²r=¡²ƒÀ£²± Óà‰Fô¡²±Óè‰Föÿ6 ÄFôPš‡Ø‰Fòƒ~òt ¸"Pÿvòš—‹Fþ± Óà‰Fô‹Fþ±Óè‰Föÿ6 Š^·Ñãÿ·êš QS¸PÄFôP𡨉Fòƒ~òt ¸;Pÿvòš—Š^·Æ‡‰ì]ÊU‹ìƒì‹F%ÿ‰Fø‹F± Óè‰Fúж·Ñã9‡"uŠFÐØrézж·élÿvú°PèFý‰Füƒ~üÿt ‹^üЇ¸¢¶ëjèþ¢¶ÿvú°ÿPè"ý‰Fü ¶‹^üˆ‡¸´Ñà‰Ã‹Nú‰�";´v ¸çPšµë0‹Fú;´u)ÆFÿж·Ñãÿ·êš Q‰ß¸¹üò«‹Fú@£´ëN‹Fú± Óà‰Fô‹Fú±Óè‰Föÿ6 ж·Ñãÿ·êš QS¸PÄFôPš€Ø‰Fòƒ~òt ¸QPÿvòš— ‚þÀ¢‚<utÆFñÿÆFð �þÈŠNð:Èw#µÑá‰Ëƒ¿"ÿtŠ^𷊇¹:FñsˆFñþFðuÑÆFð �þÈŠNð:Èw-µÑá‰Ëƒ¿"ÿtŠ^𷊇¹*Fñˆ‡¹:‚rþÀ¢‚þFðuÇ ‚ж·ˆ‡¹ŠFÐØsƇÿж·Ñã‹Fø‡ê‰ì]ÊU‹ìƒì Æ�ÇFþÀ8€>�dsNŠ�·ÑãLJ"ÿÿ¸P�FøPšt‰Füƒ~üu)Š�·Æ‡Ƈ¹Ñã‹Fþ‰‡êþ�=ÿýw�Fþë«°¢‚¢¶´£´£²Æ·ÿè¿û‰ì]ËU‹ìQ ·öÐÐØsÿ6 šª ‰Fþƒ~þtÿvþ𵯷ÿ‰ì]ËU‹ì‹~�=°¹ÿü‹Ñãò®uø+ÑJ‰Ð]ÊU‹ìQÿ6ø‹^�PSš ÞP𕨣Œ‰ì]ÊU‹ìÿ6øÿvš/Ø£Œ]ÊU‹ìQQÿ6ø‹^�GPŠ´P𕨣Œ‰ì]ÊU‹ìƒìÆFø€~vEŠFøþȈFø‹F%ˆFù±Ón€~ù sŠFù0ëŠFùA, ŠNøµ‰ÎˆBúƒ~u€~wþNëµÿ6øŠFø´‰Æ�JúQ±*ȵQ𕨣Œ‰ì]ÊU‹ìƒì ÇF÷ ÇFù ÆFö€~öv4ŠFöþȈFö‹F¹ 1Ò÷ñ‰Fþ÷á‹N+ȃÁ0ŠFö´‰ÆˆJ÷‹Fþ‰FƒøuÆÿ6ø�F÷P¸P𕨣Œ‰ì]ÊU‹ìÿ6ø�fP¸P𕨣Œ]ËU‹ìQÿ ƒ>†uš8Þƒ>†ušÞ‹„ŠˆFÿÿ„ÿ†‰ì]ËU‹ì‹F) ‹F;†w )†„롆)Fš8Þƒ>†uÛšÞëÔ]ÊU‹ìQš‰ÞˆFþš‰ÞˆFÿ‹Fþ‰ì]ËU‹ì¸hP¸Pš—]ËU‹ì¸ˆPÿvš—]ÊU‹ìQÿ6ö¸P�ˆP�†Pš5Ø£Œ¡†£Ž¡ˆ£„¡Œƒøtƒøt ¹®QPš— ö ÐØs&ÿ6üĈPÿ6†š•Ø£Œƒ>Œt ÿ6Œš%Þ ÷ ÐØs&ÿ6úĈPÿ6†š•Ø£Œƒ>Œt ÿ6Œš%Þ‰ì]ËU‹ìƒìƒ>†t,ÿ6ú�FüPš5؉Fú¡†)Füƒ^þÿ6úÄFüP𫨉FúÆ÷ ‰ì]ËU‹ì�ì‹^ŠþÁ�7�¾ÿµüò¤‹^Š´‰Ç�»ÿ¹¾Æüò¤Š†ÿˆ†ÿ´P�ŽÿQP�ÊPš( ‰†þþYƒ¾þþt ¸ËPÿ¶þþš—�üP�†ÿPІÿ´P¸�P¸Pší ‰†þþƒ¾þþt ¸èPÿ¶þþš—ÿ6üĈPÿ6Žš•؉†þþƒ¾þþt ÿ¶þþš%ÞÆö ÿ‰ì]ÊU‹ìƒì šÀ6‰Fú‹Fú± Óà‰Fô‹Fú±Óè‰Föÿ6úÄFôP𫨉Fþƒ~þtÿvþš%Þÿ6úÿvš/؉Fþ‹^Š´‰Føÿ6ú�FøP¸P𕨉Fþÿ6ú‹^�PŠþÀ´P𕨉Fþÿ6ú°Pš/؉Fþÿ6ú¡„@Pš QS¡†HP𕨉Fþƒ~þtÿvþš%ÞÆ÷ ÿ‰ì]ÊU‹ìƒìƒ>†t,ÿ6ü�FüPš5؉Fú¡†)Füƒ^þÿ6üÄFüPš‡Ø‰FúÆö ÿ6üšè؉Fúƒ~út ¸Pÿvúš—‰ì]ËU‹ì�ìÿ6ú�†úþPš5Ø£Œÿ6úĆúþPš‡Ø£Œƒ>Œt ÿ6Œš%ÞÆš œÐØr ÿ6úšèØ£Œ‰ì]ËU‹ìQQ‹²Š�µ°:ü‹Ñãò®uø+ÑJ‰VþƒúÿtVBŠ´;ÐtMÿFþÇ‹²Š´9Fþs0‹vþŠ@ˆFý<0r*<9w&¡¹ ÷áŠNýµÁƒè0£=„w ÿFþëÃ>@sÇ´ÿ‰ì]ËU‹ìÆ�]ËU‹ìQQÿv°P°ÿPš’—‰Fþ öÐÐØsÿ6þ°Pš —‰Fþ¡ô‰Fü¡ü£ôƒ>òu£òëÿvü°ÿPš{�‰Fþ¡ô‹^þ‰G‰ì]ÂU‹ìŠF<-t <+t<*t< u°ÿë°]ÂU‹ì�ì Æ± °¢¢œÆÿ¢šÆ�ÿ¸žP¸PšyÇøƆ÷üý�†÷üP¸QPšnyÆ›ÿ€¾øüu ¸`P¸Pš—ŠŽøü�¾ùüµ°&ü‹Ñãò®uø+ÑJ‰–úýƒúÿtBˆ–øüdžúýІøü´9†úý°ÿr@P‹¶úýƒÆÿ²÷üè4ÿöÐY"ÁÐØsÿ†úýëÓ‹†úýˆ†þý�¶ùü�¾ÿý‰Áüò¤�†þýPšÇІþý´‰†úý�¾ÿý‰Á°.ü‹Ñãò®uø+ÑJ‰–øýƒúÿu‹†úý‰†øý�¾ÿý¾øý¹¾|üò¤‹†øýƒÀˆ†þý�FþP�†ÿýPІþý´P¸žP¸Pší ‰†üýƒ¾üýuÿvþšè؉†üý�†þýPèþë3Æœÿ¸P¸€PšW5Æ�†ÿýPІþý´P� Pš( ‰†üýƆõü+ƆöüÿІøü´9†úýu€>¯,°ÿu@P€>¯;°ÿu@Y"ÁÐØréwІøü´9†úýuk‹¶úýF€º÷ü&t ІöüöÐÐØr"Ɔ÷üý�†÷üP¸¡Pšny€¾øüué8 ªÐØsé.ŠŽøü�¾ùüµ°&ü‹Ñãò®uø+ÑJ‰–úýƒúÿtBˆ–øüdžúýƆöü‹¶úýƒÆÿ²÷üèƒýÐØs‹¶úýƒÆ€º÷ü tŠ‚÷üˆ†õüÿ†úýdžøý‹†øý†úýŠŽøüµ;Á°ÿ r@P‹¶úýƒÆ¶øýÿ²÷üè7ýöÐY"ÁÐØs‹¶úýƒÆ¶øýŠ‚÷ü‹¶øýˆ‚ÿþÿ†øý벋†øý†úýŠŽøüµ;Áu‹¶úýF¶øý€º÷ü&u‹†øýH닆øýˆ†þþ�†þþPšÇ€¾õü+u �†þþPš45ë"€¾õü-u �†þþPèh뀾õü*u �†þþPšä5‹†øý†úýé‰þƆ÷üý ªöÐÐØs�†÷üP¸®Pšny€¾øütl ªöÐÐØsc�†øüPšÇ�†ùüPІøü´P�ºPš( ‰†üý�øP�†ùüPІøü´P¸žP¸Pší ‰†üýƒ¾üýt ¸»Pÿ¶üýš—Æÿ öÐÐØsT�úP�†ÿýPІþý´P¸žP¸Pší ‰†üýƒ¾üýt ¸ÖPÿ¶üýš—Æšÿÿ6ú�òP¸P𕨉†üý‰ì]ËU‹ìƒìV¡ø‰FúÇøƒ~tÿvšgÞÆFªN�FªPÿvšny€~¬Nu š š �ë€~«t€~¬YuÄ‹Fú£ø‰ì]ÊU‹ìQ‹^€?t!ÿ–Æ�P°P°ÿPš’—‰Fþ‹^þÆGÿ‰ì]ÂU‹ìQQ‹^€?t=ÿ˜�P°P°ÿPš’—‰Fþ¡þ‰Fü‹^�P°P°ÿPš’—‰Fþ‹Fü‹^þ‰GƉì]ÊU‹ìQ‹^Š<tD�´‰Á°.ü‹Ñãò®uø+ÑJ‰Vþƒúÿu�Š´ø¹¾õò¤‹^€‹^�PèúƉì]ÊU‹ìšcØÄ¶&ÿ_]ËU‹ìš �]ÊU‹ìš �]ÊU‹ìQQ‹^ Æ‹~ �}° ¹ üòªÄ~°:ŠNµü‹Ñãò®uø+ÑJ‰VþƒúÿtÿFþÄ^&Š,AþÀ‹^ ˆëÇFþÇFüƒ~ü°ÿr@‹VþŠNµP;Ѱÿr@Y"Á‰ÖÄ^P&€8.°ÿu@Y"ÁÐØs&Š‹^ ‹vüˆ@ÿFüÿFþ뺊F´9Fþ°ÿr@Ä^‹vþP&€8.°ÿu@Y"ÁÐØsÿFþë׊F´9FþsLÄ^‹vþ&€8.u@ÿFþÇFüƒ~ü°ÿr@ŠNµP9Nþ°ÿr@Y"ÁÐØsÄ^‹vþ&Š‹^ ‹vüˆ@ ÿFüÿFþëȉì]ÂU‹ìƒìÆFû€~ûwŠFû±2öá‰ÃЇÄöÐÐØr þFûuâ¸ÿëOŠFû±2öá‰Ã�‡ž‰FþPÄF Pÿv è•þ‹^þ�Pš©]´‰Füƒ~üu‹^þÆG%‹^þÆG&ÿÿvþšè؉Fü‹Fü‰ì]Ê U‹ìQƒ~tƒ~ÿu¸ë(ÿvšè؉Fþƒ~þuÿvš QSš’]´‰Fþ‹Fþ‰ì]ÊU‹ìƒìÆFó€~ówŠFó±2öá‰ÃЇÄöÐÐØr þFóuâ¸ÿéiŠFó±2öá‰Ã�‡ž‰FöŒ^ø‰Ã�PÄF Pÿv èÆýÄ~ö�}�6ú¹ü‹Ñãó¦tø+ÑJƒúÿu Ä^&Çë&Ä~ö�}�6þ¹ü‹Ñãó¦tø+ÑJƒúÿu Ä^&ÇÿÿéðÄ^öSšd]´‰FôÄ~ö�}�6¹ü‹Ñãó¦tø+ÑJƒúÿtÄ~ö�}�6¹‹Ñãó¦tø+ÑJƒúÿYu Ä^ö&ÆG'ëÄ^ö&ÆG'ÿƒ~ôt‹Fô鉋FÄ^ö&‰G*¸‰Fü‰Fú‹FÄ^ö&‰G(Ä^ö&ÆG%Ä^ö&ÆG&ÿÄ^ö&ÇG,ÇFôÿÄ^ö&ŠG'ÐØs�P‹^�PÿvÄFúPš€Ø‰Fôƒ~ôtƒ~ôt‹~�=°‹NüòªÄ^ö�Ä^&‰¸‰ì]ÊU‹ìƒìÇFþ‹^ŠG%ÐØs_‹G,ÿ%þ‰FüƒøuÇFü‹^‹G.± Óè‰Fú‹^‹G.±Óà‰Føÿv‹^öÿw(š QSÿvüÄFøP𡨉Fþ‹^ÇG,‹^ÆG%‹Fþ‰ì]ÂU‹ìQƒ~ tNƒ~ ÿtHÿv èmÿ´‰Fþƒ~þt‹Fþë5ƒFƒV�f€ÿÿv ÄFP𫨉Fþ‹^ �P¸Pš2]´‰Fþ¸‰ì]ÊU‹ìQƒ~tƒ~ÿt ‹^ŠG&öÐÐØs¸ë&ÿvèûþ´‰Fþ‹^�Pš{]´ Fþ‹^ÆG&‹Fþ‰ì]ÊU‹ìƒ~ t;ƒ~ ÿt5‹^ ‹G.± ÓèÄ^&‰G‹^ ‹G.±ÓàÄ^&‰‹^ ‹G0Ä^&Ä^&ƒW¸]ÊU‹ìƒìƒ~ÿtƒ~u¸éË‹F%ÿ‹^‰G0‹F%þ±Óè‹V± Óâ‰Fú‹^‰G.‹F±Óè‹^‰G#‹F Óè‰Fü‹F ±ÓèF�f ƒ~üvvÄF PšÐ]‹Fú‹^‰G!ÇFøÿ¸ÿ;Füv‹Fü‰Fø‹^�Pÿvøš]´‰Fþƒ>Êt5ƒ~þu ‹Fü‰FøÇFþƒ~øv¢‹Fú@‰Fúƒøu‹^ÿG#ÿNüƒFÿNøëÜ‹Fþ‰ì]Ê U‹ìƒì‹^‹G0;G*ucSèŒý´‰Fþƒ~þt‹FþëR‹^‹G*±ÓèG.‰FøÓà‰Fú‹Fø± Óè‰Fü‹FP‰Ãÿw(š QS‹^öÿw*ÄFúPš€Ø‰Fþ‹Fþƒøtƒøu¸‰ì]ÂU‹ìQQƒ~ tƒ~ ÿu¸ë3ÿv ègÿ‰Fþƒ~þt‹Fþë‹^ ‹G(‰Fü‹w0‰ÃŠÄ^&ˆ‹^ ÿG0¸‰ì]ÊU‹ìQƒ~tƒ~ÿu¸ë[ÿvèÿ‰Fþƒ~þt‹FþëG‹^‹G*+G0Ä^&‰Ä^‹F&9v&‰‹^‹G(G0Pš QÄv &‰Z&‰TÄ^&‹‹^G0¸‰ì]Ê U‹ìƒì ƒ~ tƒ~ ÿt}‹^ ‹G.± PÓè‰FúZ±Óâ‰Vü9Frd9F°ÿt@P9V°ÿr@Y"ÁÐØrL‹Fü‹^ G*‰Fü‹FúƒЉFú9Fw29F°ÿt@‹NP;Nü°ÿs@Y"ÁÐØr‹^ ‹G.±Óà‰Fü‹N+ȉO0ë\ÿv èÈû´‰Fþƒ~þt‹FþëI‹F P‰Ãÿw(š QS‹^ôÿw*ÄFPš€Ø‰Fþ‹^ ‹G(‰Föƒ~þtƒ~þt‹O*‰Ç�=°üòª¸‰ì]ÊU‹ìƒìƒ~ÿu¸ëƒ~uÿvÄF Pÿv š•Ø鼋F%þ±Óè‹V± Óâ‰Fú‹F%ÿ‹^‰G0‹Fú‹^‰G.‹F±Óè‹^‰G#‹F Óè‰Fü‹F ±ÓèF�f ƒ~üvdÄF PšÐ]‹Fú‹^‰G!ÇFøÿ¸ÿ;Füv‹Fü‰Fø‹^�Pÿvøš2]´‰Fþƒ~þu$ƒ~øv´‹Fú@‰Fúƒøu‹^ÿG#ÿNüƒFÿNøëÜ‹Fþ‰ì]Ê U‹ìƒì ‹^‹G0;G*té…Sèeú´‰Fþƒ~þt‹Fþët‹^‹G*±ÓèG.‰FôÓà‰Fö‹Fô± Óè‰Fø‹^ŠG'ÐØs Sÿw(š QS‹^òÿw*ÄFöPš€Ø‰FþëÇFþÿ‹^‹G(‰Fúƒ~þtƒ~þt‹O*‰Ç�=°üòª¸‰ì]ÂU‹ìQQƒ~ÿtRƒ~u ÿvš]ëBÿvè=ÿ‰Fþƒ~þt‹Fþë1‹^‹G(‰Fü‹w0‰ÃŠNˆ‹^ÿG0‹^‹G0;G, v‰G,‹^ÆG%ÿ¸‰ì]ÊU‹ìƒìƒ~ ÿu鶃~ u)ÇFþ‹Fþ;Fré ¹Q‰ÆÄ^&ÿ0š/؉FüÿFþëÜ‹^ ‹G(‰FøÇFþƒ~vsÿv è þ‰Füƒ~üt‹Füëb‹^ ‹G*+G0‰Fú;Fv‹F‰FúÄ^‹vþ�0‹~ ‹}0‹^ø�9‹Núüò¤‹^ ÆG%ÿ‹^ ‹FúG0‹^ ‹G0;G,v‰G,‹FúFþ)F뇸‰ì]ÊU‹ìƒìÇFþ‹Fþƒøw"¹2÷á‰ÃŠ—ÄÐÚs �‡žPšè؉FúƒFþsÖ‰ì]Ë‹Ü6‹_ÊU‹ì�ìdžþþ‹^ Š´‹Žþþ;Ès_+Á‰Î�x‰ÁŠFü‹Ñãò®uø+ÑJ‰–üþƒúÿu Š´+Ɖ†üþ‹^ ‹¶þþ�p�¾ÿ‹Žüþüò¤‹†üþˆ†ÿ†þþ@‰†þþ�†ÿPÿ^ë’‰ì]ÊU‹ìŒºƒºŒÀŒÄ¾&‹‰¼‰Æ‰È]ËU‹ì°P°Pš%q]ËU‹ìQ°Pÿvš%qˆFÿ‰ì]ÊU‹ìQ° PÄFP°Pš qˆFÿ‰ì]ÊU‹ìQ° PÄFP°Pš qˆFÿ‰ì]ÊU‹ì°PÄFP°Pš q]ÊU‹ì°PÄFP°Pš q]ÊU‹ì°PÄFP°Pš q]ÊU‹ì°PÄFP°Pš q]ÊU‹ì°P°Pš%q]ËU‹ìQ°PÄFP°Pš qˆFÿ‰ì]ÊU‹ì°!PÄFP°Pš q]ÊU‹ì°"PÄFP°Pš q]ÊU‹ì°'PÄFPÿvš q]ÊU‹ì°(PÄFPÿvš q]ÊU‹ìQRŠf ÅV‹NÍ!Z‰ÊY]ÊU‹ìŠfŠVÍ!]ÊU‹ì¡˜±Óèš�&˜¡šÄ¶&;Gs,ĘÄ^&‰Z&‰W‹F ˜¡˜±ÓèšÄ¶&;Gr¸ÿë¸]ÊU‹ìQ‹F£¤‹F£¦Æ¯,Ķ&ÄG£œŒž‰Ã&Š´‰Fþ‹Fþƒø°ÿw@‹vþNÄœP&€x °ÿt@Y"ÁÐØs‰vþëÖ‹FþÄœ&ˆÇFþÄœ&Š´9Fþ°ÿr@‹vþP&€x °ÿt@Y"ÁÐØsÿFþëÕÄœ°&8u ¢¨&ˆGëÆ¨ÿ°¢­¢ª¢«‰ì]ÊU‹ìQ ©ÐØs ÿ6¢šè؉Fþ‰ì]ËU‹ìŠF¯ °ÿt@Z"ÂP€>° °ÿt@P8¯°ÿt@Z"ÂZ Â"FøÐØs ÆFøˆ°éÐþ€~ù;uÆ«ÿƒ~üu €~ù;uƪÿ‰ì]ÊU‹ì�ì‹^Š�µ°/ü‹Ñãò®uø+ÑJ‰–þþƒúÿt;е+ÊI‰Ö�p�¾ÿò¤‹^Š´+†þþHˆ†ÿ‹†þþˆ�†ÿP�qP°/PšR‰ì]ÊU‹ìƒì ÇFþÿ‹^Š�µ°:ü‹Ñãò®uø+ÑJ‰VúƒúÿuŠ´‰Fú‹^Š´‰Fø‹FúˆÇFü‹^üÑヿ"t%ÿ·"ÿvè‰ÐØs�~þÿt¸Rë‹Fü‰FþÿFüëÏ�~þÿu ¸fPš-Þë/‹Fø‹^ˆ‹F£²Ç´‹^þÑãÑãć(‰FôŒFöÿ^ôƒ>´t'¸}Pš-ÞÿvšgÞ¸ƒPš-Þ¸‡P¸Pš—‰ì]ÊU‹ìQ‹^€?t6‹^Š‹^:w&‹^Š‹v�t�µü‹Ñãó¦tø+ÑJ‰Vþƒúÿt°ë°ÿ‰ì]‡6úInput File: pos: Record Type: Fatal Error: An internal error has occured. Fatal Error: Module is not in the library Fatal Error: Cannot open input file  ZJM is previously defined in old definition is ignored. Library disk is full.Too many object modules already exists. Replace?Duplicate module name: File is being ignored. ;—  %)+/5;=CGIOSYaegkmqƒñýSymbol table capacity exceededf (Length H bytes) Listing file write errorToo many PUBLIC symbols VM.TMPCannot open VM.TMPAllocate error on VM.TmpWrite error on VM.TmpRead error on VM.Tmp Invalid object module/library Write error on library/extract file Input file read error .OBJCannot create extract  file Cannot open extract file Close error on extract file 0E�55REMOVELIBRARYRECORDS WIDTHOFLINELibrary File: No library file specified .LIBLibrary does not exist. Create?Operations: List file: Cannot create list file. Cannot write library file ðý.OBJCON NUL LPT1 AUX Cannot nest response files. "" Cannot open response file. Ambiguous switch: Unrecognized switch: "" Invalid switch. Microsoft Library Manager V1.02 (C) Copyright 1981 by Microsoft Inc. (  À8â ½€  åMZ›œ@ÿÿ ½k"ù$)‚¬Ç/v«äP®»Èáæëødù .Åÿkxš©Îßèü &?HQV_|·§°à‰Ž“˜�¢úŒŒRŒZŒnŒuŒzŒ—ŒœŒ…¯Š¯�¯©¯Á¯ü¯ŽИТЬжÐóó óóó ôRô_ôtô†ô‹ôšôáôõô!ôcôsôÓôèôüôô>ôYôaôÊôìôýôVô�ô8ô\ôŠô’ô¼ôôgEL5L…LìL¡LÈLELtL�L©LJLWLzLÜL�LÏL;LlLwL LT L£ Lñ Lt L« L L. o ‹ �   à6j6­6D6h6†6˜6ª6À6ú6)6;6@6�6è³ ºRºþýRš ô»þS3ÛS‹V2öRšÙôšú �fö]Êè‚ �~ô¾þ¹üó¥ÇFúƒ~t¹ ‹F3Ò÷ñƒÂ0‹~úˆSó‹F3Ò÷ñ‰F‹VúJ‰VúuÔºR�VôRšjô�fü]Âè) ÇFò‹~þ‹2ö;Vò|‹vú‹2ö;Vò|~ò‹vò:uÿFòë׋~þ‹2ö;Vò}‹~ú‹2ö;Vò}ÆFôëÆFôë4‹~ú‹2ö;Vò}ÆFôë"‹~ò~ú‹2ö‹~ò~þ‹ 2í;Ñ}ÆFôëÆFô‹Fô�fö]Âè“ ‹Öù‰Vú‹Vú‰VüÆFøƒ~útaöFøu[‹Vú‰Vüÿ6zùÿ6xù‹úÄ]Sè/ÿˆFö‹Vö2ö‹Úë%‹Vú‰Vü‹ú‹ ‰Núë&ÆFøë ‹Vú‰Vü‹ú‹M‰NúëƒëÑã.ÿ§—hw}뙃~úuhº RšAŒ‰Fú‹~úÇ‹~úÇEºRšAŒ£Øù‹>ØùÇ‹>ØùÇE‹~ú‹Øù‰U‹~úÄxù‰]ŒE€~öu ‹vü‹Vú‰ë ‹~ü‹Vú‰U‹~ú‹E£Øù‹>Øùƒ}t‹E£ØùëîºRšAŒ‹>Øù‰E‹>Øù‹E£Øù‹>ØùÇE‹>Øù‹tù‰€>vùu ‹tù÷Ú‹>Øù‰�fþ]ÃèGšô�fü]Ëè7öWúu-öVútÇFúº2úRºR»ÚùŒÚŽÂSšÀLÿFúÆFüëÆFü‹Fü�fþ]Ãèñƒ>|ù|Z¡|ù£Ôù‹ÔùBB�âþÿRšAŒ£Òù‹|ù‰Vúƒ~ú|ÇFü‹~ü‹•}ù>Òùˆ‹VüB‰VüJ;Vúuæ‹>Òù‹|ùˆÆÐùÇ|ù�fþ]Ãè…ƒ>|ù|X¡|ù£zù‹zùBB�âþÿRšAŒ£xù‹>xù‹|ùˆ‹|ù‰Vúƒ~ú|ÇFü‹~ü‹•}ù>xùˆ‹VüB‰VüJ;Vúuæè“ýÇ|ù�fþ]ÃèÿæùºRºþRšjôºRºþRšjôºRºþRšjôöÐùt‹>Òù‹2öRG‹×Wšóšôšôº1Rº þRšjô»RþS3ÛSÿ6æùšÙôšôšôÇäù�fþ]Ãè•Çèùšôÿäù¡äù;àùvèYÿ�fþ]Ãèoƒ~uéj‹~ÿuèèÿ¡Öù;FuéN‹~‹}‹U:Úùtè¥ÿë öÎùtè™ÿÆÎù‹~‹}‹E¢Úù‹2ä£rù¡rù£èù‰Fúƒ~ú|'ÇpùºR‹~‹UpùRšjô¡pù@£pùH;Fúuß‹rù‰Vøƒ~ø }?‹Fø£pù¹¡pù™÷ù#ÒuºRºVþRšjôë ºRºXþRšjôÿèù¡pù@£pù= uÇ‹~‹}‹E£Øùƒ>Øùué}‹>Øù‹£pù‹E£Øù‹âùƒÂø;èùwÆÎùèÅþÇèù ºRºZþRšjôºRº^þRšjô‹pù#Òy÷ÚRèªúƒ>pù}ºRº`þRšjôë ºRºbþRšjôƒèùéyÿèiþ‹~ÿ5è‡þ�fü]ÂèïšÅôº2úRºPRºRš|ôº|RšAŒ£®üÿ6®üºPRºRš|ôºî ùRºúRºêùRšr6º2úR‹îù2öR»ïùŒÚŽÂSšÏLÿ6®ü‹ú2öR»úŒÚŽÂSšÏLº2úRš"ôÿ6®üš›ôš4º RšAŒ£Öù‹>ÖùÇ‹>ÖùÇEºRšAŒ£Øù‹>Öù‹Øù‰U‹>ØùÇE‹>ØùÇ‹>ÖùÇE‹>Öù‹UBB�âþÿRšAŒ‹>Öù‰E‹>Öù‹}ÆÆÐùÇâùPÇàù8Çäù'ÇæùÇ|ùÇtùÆÚùè‚û‹Úù2öƒú¹tA#ÈÑéré~‹ÚëXèüÆvùëmè üÆvùëcèüÿtùëZèøûëUè‡ûëP¡~ù2ä£àù¡ù2ä£âùÇ|ùë8ƒ>|ùP}ÿ|ù‹>|ù‹Úùˆ•}ùëƒûâƒë|ÝÑã.ÿ§€!V+49>égÿè›ûÆÚùÿ6Öùè¥üº2úRš€Lÿ6®üš€L�fü]Ë[2ä.ŠC<€r$Šà.ŠC.‹CCU‹ì+ér;.ÚüwSšnЋåéèÿã¸óŽØŒâüº`øÑê¹€+ÊÑêÑêÑêBл&‹/‹Ú�Â;Õ~‹Õ�êýŽØ¾þÿŽÂ‹þó¥ŽÚúŽÒ¼`ùû‰&Øü+í‰.Êü‰.Àü‰.Äü‰.Æü‰.Èü+ÚÑãÑãÑãÑã‰Òü‰ÔüǃÉÖü�À‰ÚüšÁ š!¯šÅš5¯šp¯š² Çàüÿ.àü^_ZXŠà‹ÜüWVUÍ!‰Üü‰Þü]ËU‹ìƒÅ�ìÇôüÇúü‹VB�âþÿ‰V¡Öü;Ôüwé§‹>Ôü‹£øü‹Öü+Ôü;øüwÇFøéê‹øü�âu¡øü£öüÇôüëdƒ>ôüt¡øüöü@£öü¡ôü£Ôüë ¡øüÿÿ£öü¡öü;Fs¡Ôü£ôüë1‹ÔüBB‰Vø‹V‹>Ôü‰‹FFø£Ôü¡öü;Fv +Fÿÿ‹>Ôü‰ën¡öüÔü@@£Ôü¡Öü;ÔüuOƒ>úüuÇFøëKƒ>ôütÿ6ôüš¦¡Öü£Ôüƒ>úüu ‹VBBRš%¦¡Öü;Ôüu¡Òü£ÔüÿúüÇôüºÑêséëþ‹Fø�fú]ÊU‹ìƒÅ�ìºRšÐÿvšŒ‰Føƒ~øsƒ~øuš˜¯ëš°¯š-ЋFø�fú]ÊU‹ìƒÅ�ìºRšÐš-Ð�fü]ËU‹ìƒÅ�ì‹F£Öü¡Öü€£Úü�fú]ÊU‹ìƒÅ�ì �^öŒÚŽÂ‰^öŒFø‹Vö+Öü�€þ‰Vô�~s �~ôrÇF‹V;Vôs ‹Öü‰NöƒÂÿÄ^ö&‰‹VÖü¡Öü€£Úü�fú]ÊU‹ìƒÅ�ì�fü]Ëèà ÆFò‹Fò�fô]Êè¯Äý3Ò&ˆ�fü]Ëè›Äý&‹2öƒús"ƒ>Þùr Äýº&ˆƒ>Üùr Äýº&ˆ�fü]Ëè`�fü]ËèU ‹~‹‹~þ:¹uAˆNööFöt:‹~‹2ö‰Vòƒ~òr*ÇFô‹~ô~‹‹~ô~þ:tÆFöë ‹VôB‰VôJ;VòuÛ‹Fö�fø]Êèò ‹~‹‹~þ:¹sAˆNö‹~þ‹2ö‰VòöFöt ‹~‹2ö‰Vò‹Vò‰Vðƒ~ðr?ÇFô‹~ô~‹‹~ô~þ:t‹~ô~‹‹~ô~þ:¹sAˆNöë ‹VôB‰VôJ;VðuÆ‹Fö�fø]ÊèjÄýº&ˆ‹~þ‹2öRG‹×Wš ôšú š•�fø]Êè8ºRºšþRšf¯�fü]Ëè ºRºªþRšf¯�fü]Ëè�fü]Ë[2ä.ŠC<€r$Šà.ŠC.‹CCU‹ì+ér;.ÚüwSšnЋåéèÿãU]ƒ>Êüu!‹Ü‹_÷ÛÝ�F£Êü‹Gþ£Ìü‹‹_£Îü‰ÐüÊU]�F;ÊürÇÊüËU‹ìŒØŽÀ‹v ‹~‹NüÑéó¥s¤]ÊU‹ìŒØŽÀ‹v ‹~‹NñNùOýó¤]ÊU‹ìŒØŽÀ‹~ ‹N‹FŠàüÑéó«sª]ÊU‹ì‹FŽØ‹v ‹F ŽÀ‹~‹NüÑéó¥s¤]Ê U‹ì‹F F‹n‰F¸r@]ÊU‹ì‹F ÷f‹n‰F¸r@]ÊU‹ì‹F F‹n‰F¸p�~€t@]ÊU‹ì‹F ÷n‹n‰F¸p�~€t@]ÊU‹ì‹^¸ð‡@%]ÊU‹ì‹^Ç]Ê;>Òür;>Öüs ‹Eþ;Èv‹ÈAÑéŒØŽÀüó¥ËXƒ>Êüu[X‰&Êü‰.Ìü£Îü‰Ðü‹&ØüšóXX[PSêóXX[PSêóXX[PSêóXX[PSêóU‹ì‹v ÑîÑîÑî;vwv‹N €áþÁŠ,Òå¸r3À]ÊU‹ì‹^‹Ó‹‹^‹~ ‹v‹n ŽÆ&ŠFE< t<t ŽÇ&ˆCâé3Àë �2ä‹Ú‹+щ]Ê êjôê<ôê€L갯꘯èØÿv‹^þŒÚŽÂSš �fø]Ê躋~‹U2ö#Òta‹~‹U2öƒÂdRÿ6®üºRšºRºÊþRš ôÿvºR�^ëŒÚŽÂSšeLˆFê‹Vê2öR�VëRš ôšú Ä4ýº&ˆš•�fú]Êè@‹~‹U‹~ˆU‹~ÆE!‹~ÆE$‹~ÇE‹~ÇE‹~ÇEÿvš;L‹~‹U‹~ˆUÿvš)ô�fú]Êèå ‹~ÇEÿvÿvþ‹VüB‹ÚŒÙŽÁSšÀL‹~‹U"‹~üˆ‹~‹U"‹~‰U‹~‹U$Ñêr)‹~‹U2ö#ÒuÿvºR�^õŒÚŽÂSšÀL‹~ÿEëÍÿvš)ô�fö]Êèg ‹~ÇE‹~ÆE‹~ÇE‹~ÆE‹~ÆE‹~ÆE‹~‹Vþ‰U ‹~ÆE‹~Æ‹~‹VüˆU ÿvš E�fö]ÊèÿvšÁ L‹~ÇEÿvº Ršü L�fú]ÊèÞÇ2ýƒ>®üt ÿ6®üšÜô�fü]Ëè½ ÿvÿvþ‹^üŒÚŽÂSš L‹Vþ‹~U‹~‹U ÑêrÿvšÜôÿvš)ô�fö]Êèy ƒ>®üu黋V‰Vðƒ~ðsé¬ÇFôÆFò‹~ô~þ‹UÿˆVö€~ö u¹¡2ý3Ò÷ñ¡2ý+ÂÁ£2ýëÿ2ý¡2ý;âùr šmÆFò€~ö u€>0ý uÿ6®üºRºÐþRš&ôÿ6®üºR�VöRš&ôöFòt€~ö ºuB2ö’º÷ê2ý@£2ý‹Fö¢0ý‹VôB‰VôJ;VðtéYÿ�fø]Ê觃>2útÿ62úÿvÿvþš&ô�fø]Êè„‹VˆVøƒ>²ütÿ6²üºR�VøRš&ô�fú]ÊèY¹ ‹Fþ3Ò÷ñ‰Fø‹Fþ3Ò÷ñ‰Vþƒ~øt ÿvÿvøèÔÿ‹~ÿEô‹Vþƒ Â0‹~�Mì‹v‹tôñˆ�fú]Âè  ÇFôUÿvüèŸÿ‹VôˆVì‹N#Ét‹Vþ#ÒtQ‹Vì2öR�VíR‹Nþ#ÉtÿVþë‹^ÿ�fö]ÊèÁ‹~‹UÑêsÿvš€L‹~ÆE%‹~ÆE‹~ÆE‹~ÆEÿvš£ô‹~‹UÑês$‹~‹U Ñêrÿv‹~ÿu ‹~‹]ŒÚŽÂSšÀLÿvš)ô�fú]ÊèH‹~ÆE%‹~ÆE‹~ÆEÿvš£ô�fú]ÊèÆ0ý Ç2ý�fü]Ëè�fü]Ë[2ä.ŠC<€r$Šà.ŠC.‹CCU‹ì+ér;.ÚüwSšnЋåéèÿãè0‹V�Âz‹~‰U‹~ÆEs‹~ÆE&�fú]Êè�fü]Ë[2ä.ŠC<€r$Šà.ŠC.‹CCU‹ì+ér;.ÚüwSšnЋåéèÿãU‹ìƒÅ�ìºR‹VƒÂvRš®‹~‹U?Ñês&º"R‹VƒÂLRš®2ä#Àt‹~‹Vþ‰U‹~ÆE‹~ÆE?‹~‹U2ö Ò¹uAˆNö‹Fö�fø]ÊU‹ìƒÅ�ìÿvºðRšLÑèr飋~ÇE@‹~�}mÿÿu ‹~ÇEmë‹~ÿEm‹~�}mÿÿu‹~ÇEñ‹~ÆEëf‹~‹UÑêr ‹~€}uSº!R‹VƒÂLRš®2䣈ýƒ>ˆýu‹~€}t‹~‹U\�âÿ‹~‰UBƒ>ˆýºtBƒ>ˆý¹tA#Ê‹~ˆM%‹~‹U2ö Ò¹uA‹~‹E‹~#E%4#ÁˆFø‹Fø�fú]ÊU‹ìƒÅ�ì‹~‹UÑêr1‹~€}u(‹~‹U Ñês‹~€}<tÿvºR»îþŒÚŽÂSš L‹~‹U2ö#Òté•‹~€}<té‰ÿvºèRšL‹~‹UÑêrs‹~€}uj‹~‹U\‹~U@�Âþ‹~‰Um‹~‹E^£Šý‹~‹U\‹~;UmsƒŠýÿ‹~‹ŠýˆUoŠÖ2ö‹~ˆUp‹~ÆEZ‹~ÆE[ÇÜüº(R‹VƒÂLRš®�fú]ÊU‹ìƒÅ�ìÇFø‹~€}<uºR‹VƒÂLRš®‹Fø�fú]ÊU‹ìƒÅ�ìÿvš^L‹~€}<uºR‹VƒÂLRš®‹~‹U2ö‰Vø‹Fø�fú]ÊU‹ìƒÅ �ì‹~ÇE"‹~‹U%‹~ Ur‹~ˆU%‹~ÆEr‹~‹U%Ñêrƒ~þuÇFòéX‹~‹U Ñêré�‹~ÆE$‹~‹U";VþréC‹~‹UB‹~;U@wT‹~€}<u8º R‹VƒÂtRš®ºRº Rš®‹~‹}u�çÿ~ÆEv ‹~ÇE@ëÿvšqLÑèr‹~ÆEv‹~‹Fþ+E"£�ý‹~‹v‹TB+U@;�ýs‹~‹v‹DB+E@£�ý‹~‹U@ƒÂvV‹ÚŒÙŽÁS‹~‹U"Ä^úÚSº�ýRšãТŽý‹�ý‹~U"‹~‹M@€>Žý¸t@2äÁ‹~‰E@€>Žý u‹~ÆE$‹~€}<u ‹~‹UB‹~‰U@ë;€>Žýu1‹~‹U‹~U" Ò¹uA‹~ˆM%‹~‹E%4‹~ˆEr‹~ÆE$ëé¯þ‹~‹U$Ñês8‹~€}<u/‹~‹U@‹~;UBuÿvšqL‹~‹}@~‹Uv2öƒú u‹~ÿE@飋~‹U";Vþré•‹~‹UB‹~;U@wÿvšqLÑèr‹~ÆE%‹~ÇE"ëj‹~‹Fþ+E"£�ý‹~‹v‹TB+U@;�ýs‹~‹v‹DB+E@£�ý‹~‹U@ƒÂvV‹ÚŒÙŽÁS‹~‹U"Ä^úÚSÿ6�ýš–Ћ�ý‹~U"‹~U@é]ÿ‹~‹U2ö‰Vò‹Fò�fô]ÊU‹ìƒÅ �ì‹~‹U&2ö;Vþs ‹~‹U&2ö‰Vþ‹Vþ‰Vðƒ~ðr,Ç’ý¡’ýF—‹’ýƒÂÿÄ^úÚ‹U&&ˆ¡’ý@£’ýH;FðuÚ‹Vþ‰Vò‹Fò�fô]ÊU‹ìƒÅ �ì‹VþƒÂÿÄ^úÚ&‹2íƒù u ƒ~þrƒFþÿë߃~þºrB‹~ˆUs‹~‹UsÑês ‹~ÆE&ë ‹~‹VþˆU&‹~‹U&2ö‰Vòƒ~òrOÇ”ý‹”ýƒÂÿÄ^úÚ&‹¡”ýF—ˆM&Ä^úÚ&‹2íQºRºXýRš¸ÐÑèr‹~ÆEs¡”ý@£”ýH;Fòu·�fô]ÊU‹ìƒÅ�ì‹~ÆEÖ‹~ÿEô‹~‹=‹U&2ö‹~;Uô|R‹v‹4uô€|&.tD‹v‹4uô€|&:t6‹v‹TÖ2öB‹vˆTÖ‹v‹4uô‹T&‹~�MÖ‹v‹tÖ�æÿñˆ‹~ÿEô뜋~‹=‹U&2ö‹~;Uô|‹v‹4uô‹T&‹~ˆUðë‹~ÆEð�fü]ÂU‹ìƒÅ�ì*ÇFø‹~‹UsÑês‹~ÇEï‹~ÆE錋VƒÂLRº$R3ÒRšxЋ~ÆEtÇFôUèÿ‹~ÆE<€~ð:ºtBˆVööFöu\‹VÖ2ö‰VÔƒ~Ôr(ǘý‹>˜ý€{Öar ‹SÖ2öƒÂàˆSÖ¡˜ý@£˜ýH;FÔuÞ‹VÖ2öƒúu€~×Ar‹V×2öƒÂÀ‹~ˆULÆFöUèŽþ‹VÖ2ö#Òtƒú |‹~ÇEí‹~ÆEéÓÇ–ý‹VÖ2ö;–ý|‹>–ý‹SÖ~ˆULë ¡–ýF—ÆEL ¡–ý@£–ý= uÏ€~Öré3Ç–ý‹VÖ2ö;–ý|#‹>–ý€{Ö`s‹SÖˆSëë‹>–ý‹SÖ2öƒÂàˆSëë‹>–ýÆCë ¡–ý@£–ý=u¾¹�~ì¾òþüó¦ºuBÑêr¹�~ì¾öþüó¦ºtBÑêr9‹~‹U Ñês‹~ÆE=‹~ÆE>ë‹~ÆE=‹~ÆE>‹~ÆE‹~ÆE<邹�~ì¾úþüó¦ºtBÑêr‹~ÆE=‹~ÆE>‹~ÆE‹~ÆE<ëL¹�~ì¾þþüó¦ºuBÑêr¹�~ì¾ÿüó¦ºtBÑêr‹~ÆE=‹~ÆE>‹~ÆE‹~ÆE<€~ð.u"Uèñü‹VÖ2öƒú|‹~ÇEê‹~ÆEé:ëÆFÖÇ–ý‹VÖ2ö;–ý|‹>–ý‹SÖ~ˆUTë ¡–ýF—ÆET ¡–ý@£–ý=uÏ‹~€}<uq‹~‹UÑêr ‹~€}tºR‹VƒÂLRš®2ä=rG‹~‹UÑês‹~ÇEì‹~ÆE é®ë)ºR‹VƒÂLRš®2ä=r‹~ÇEë‹~ÆE郋~ÆEZ‹~ÆE[‹~€}u‹~€}<t‹~ÇEó‹~ÆE‹~ÆE?‹~ÇEmÿÿ‹~ÆE$‹~‹E4‹~ˆE%‹~ÇEB‹~ÆEr‹~ÆE‹~ÆE!‹~ÇE@‹~‹U2ö‰Vø‹Fø�fú]ÊU‹ìƒÅ�ì‹~€}téš‹~‹U Ñêré�»ÿŒÚŽÂ‰šýŒœý‹Vþ2ö‹Úë/ÇžýëFÇ žýë>Çžý» ÿŒÚŽÂ‰šýŒœýë'Çžýëƒû1wóƒë+rîÑã.ÿ§w 7 ^ ^ ^ ^ ? G ‹~‹U2ö#Òuÿvÿ6žýÿ6œýÿ6šýš L‹~ÆE$‹~‹U2ö‰Vö‹Fö�fø]ÊU‹ìƒÅ�ì‹~‹U Ñês#‹~€}tÿvºR»ÿŒÚŽÂSš L‰FøëÇFø‹~ÆE$‹Fø�fú]ÊU‹ìƒÅ �ì‹~ÆE$‹~‹Vþ‰U"‹~€}<tU‹~‹U>2ö�úÿuéåë?‹Vþ‰Vðƒ~ðr3Ç ý‹~‹U>2öR‹ ýƒÂÿÄ^úÚ&‹2íQ𮡠ý@£ ýH;FðuÓé–Ç ý¡ ý;Fþré…‹~‹UB‹~;U@wÿvšqLÑèrëi‹Fþ+ ý£¢ý‹~‹v‹TB+U@;¢ýs‹~‹v‹DB+E@£¢ýÄ^ú ýS‹~‹U@ƒÂvV‹ÚŒÙŽÁSÿ6¢ýš–Ћ~ÆE?‹¢ý‹~U@ ýépÿ‹~‹U2ö‰Vò‹Fò�fô]ÊU‹ìƒÅ�ì�fü]ËU‹ìƒÅ �ì‹VƒÂÿ‰VôÇ´ýºRÄ^ü´ý&‹2öR𮡴ý@£´ýH;FôuÝ�fö]ÊU‹ìƒÅ �ìˆ�~�s ‹Vˆ–rÿëƆrÿ€º R�–rÿRš®�žtÿŒÚŽÂSÿvþÿvü‹–sÿ2öRš–кR» ÿŒÚŽÂSš ‹–sÿ2ö‰Vô‹Fô�fö]ÊU‹ìƒÅ�ì�fü]ËU‹ìƒÅ�ì¿Xý¾$ÿ¹üó¥¿xý¾Dÿ¹ü󥿀ý¾Lÿ¹üó¥�fü]ËU‹ìƒÅ�ìºRº Rš®ºRº Rš®�fü]ËU‹ìƒÅ�ì�fü]Ëë �H‰‰Òüˌ˃ÃŒØ+Ø»±Óã¡Òü+ÃßËèZ‹~‹•0ÿ2ö‹~;•.ÿ¹rA‹v�´0ÿµ.ÿ‹:Vþ¸u@#ÁˆFøöFøt‹~ÿ….ÿ‹Fø�fú]Âè ‹~�•0ÿ‹v‹´.ÿò‹ˆVú€~úar ‹Vú2öƒÂàˆVú‹Fú�fü]ÂèÖ ÿvº RèlÿÑèsëðÿvº/Rè\ÿÑèréž‹~‹•0ÿ2ö‹~;•.ÿsé�ÿvèˆÿ2äÀÿPºR‹~ÿuüš¸ÐÑèsbÿvèiÿ2äÀÿ‹~‰…"ÿ‹~ÿ….ÿ‹~�U²‹v‹´"ÿ‹ÎÑîÑîÑî‹Æò‰Vú‹2ö‰Vø‘‰Nö¹3Ò÷ñ‹ú‹�bÿ2í Nø‹~ú~öˆ ÿvèEÿë‹~ƒ….ÿÿ�fü]Âè  ÿvüÿvþº RšxÐÆFô‹Vþ‰Vðƒ~ðrbÇFò‹~‹•0ÿ2ö‹~;•.ÿr ‹v�´0ÿµ.ÿ‹2öRºRÿvúš¸ÐÑèrë)ëÿvè˜þ‹~ò~üˆEÿÆFô‹~ÿ….ÿ‹VòB‰VòJ;Vðu£‹Fô�fö]Âèyÿvè—þ‹~‹•$ÿÑês‹v�~â�tè¹üó¥ë�~â¾jÿ¹üó¥‹~‹•0ÿ2ö‹~;•.ÿré�ÿvþ‹^üŒÚŽÂSš ÇFì‹~ì€{á tºR�Váú‹ßŒÚŽÂSš ‹VìB‰Vìƒú uÕºR»rÿŒÚŽÂSš ºR�^ôŒÚŽÂSš ºR»vÿŒÚŽÂSš º€R‹~��1ÿŒÚŽÂSšD ‹~ˆ…0ÿ‹~Ç….ÿ‹~øÆE .‹~‹•0ÿ2ö‹~;•.ÿvW‹v�´1ÿµ.ÿ€<:uGÿvºR‹~�•(ÿRºàýRèFþÑès-‹~‹•(ÿ‹~øˆ‹~øÆE:‹~ÿ….ÿ‹v�~â�tè¹üó¥ë ‹~ø‹zÿ‰ÿvºR‹VøBBRºÐýRèøýˆFîÿvº:Rè›üÑès‹~øÄ|ÿ‰] ŒE ‹vøÆD ëBÿvº.RèwüÑès(ÿvºR‹VøƒÂ RºÐýRè®ý‹v�~â�tè¹üó¥ë ‹~øÄ^ô‰] ŒE öFîu‹~øGG�vâ¹üó¥ÿvè§ü‹~úÆ‹Vø‰VêÇFì‹~ì~ê‹‹Ê2öƒú t‹~ú‹2öB‹~úˆ‹~ú‹˜—~úˆ ‹VìB‰VìƒúuÊ‹Fî�fð]Âè,¹‹~þ¾€ÿüó¦ºuB¹‹~þ¾ˆÿüó¦¹uA ʈNø‹Fø�fú]Âèï ÚÄ�ÿ‰^²ŒF´Ç†*ÿ€‹âü‰–,ÿÄž*ÿ&‹2öB‰– ÿdž"ÿÄž*ÿž"ÿ&‹‹¾"ÿˆ“0ÿ‹–"ÿB‰–"ÿJ;– ÿuÝdž.ÿƆ$ÿ�~è¾”ÿ¹üó¥UºRºœÿRÿv�VæRÿ6®ÿÿ6¬ÿèíüÑèréèUº,RèýúUºRº°ÿRÿvþ�VÆRÿ6Âÿÿ6ÀÿèÃüUèbûUº;RèÖúUèVû¹�~ؾÄÿüó¦ºuBÑêr ‹Vµ2ö�ʈVµ¹�~ȾÌÿüó¦ºuBÑêr ‹Vµ2ö�ʈVµ¹�~¸¾Ôÿüó¦ºuBÑêr ‹Vµ2ö�ʈVµU�VÈRèŒþÑès ‹Vµ2ö�ʈVµU�V¸RètþÑès ‹Vµ2ö�ʈVµ‹–0ÿ2ö;–.ÿs Ä^²‹~ü‰ŒEëhºR»ÜÿŒÚŽÂSš ‹–0ÿ2ö+–.ÿB‰–"ÿƒ¾"ÿrÿ¶"ÿ�–0ÿ–.ÿ‹ÚŒÙŽÁSš ºR»ìÿŒÚŽÂSš šú dž.ÿºÑêsé{þ�fö]Êè�fü]Ë[2ä.ŠC<€r$Šà.ŠC.‹CCU‹ì+ér;.ÚüwSšnЋåéèÿãWB CREF86.MSF  WB HEAH.PAS WB MISHM.PAS WB MIS1.MSF PWB M86IO.MSF PWB NEWUQQ.MSF WB FILUXM.PAS WB CONUXM.PAS WB FILBM.PAS _ÄÿÊÿÿÿëÿÿÿþÿÿCREF86 Fatal I/O Error: ô 0  Symbol Cross Reference (# is definition) Cref-jô . # HEAHQQ MISHQQ ASMSTB *Out Of Memory**Internal Error*M86IO in: NEWUXM FILUQQ USERCON LINELPT1PRN  CONUXM _ÆÿêÿÿÿëÿÿüUSER USER PARSE €@ NUL .]: : CON USER Cref filename [CRFList filename [REFNUL NUL NUL Line invalid: '', start again.MZ“ ÿÿ;ÈóH å H\_‡³â 6W�¨Îì  FUNCTION KEY MENU ( 0) End program $< > ( 1) Put a CTRL-Z in the template $< > ( 2) Copy one character from template $< > ( 3) Skip over one character in template $< > ( 4) Copy up to specified character $< > ( 5) Skip up to specified character $< > ( 6) Copy rest of template $< > ( 7) Kill line with no change in template (Ctrl-X) $< > ( 8) Re-edit line $< > ( 9) Backspace (same as Ctrl-H) $< > (10) Toggle insert mode $< > (11) Toggle insert mode $< > (12) Represent escape character $ ^ |_ 2nd char present escape char --> hexadecimal $ÿMSDOS SYS MSDOS.SYS not found$ Unsuccessful Read$ Select menu item number $ Press function key to $>>$ Aw C'mon! Re-enter (0-12)$ Continue ? (Y/N)$ Input escape character differs from that on the MSDOS system file$ Re-enter function key$ $ Save on disk? (Y/N)$¸ŽØŒx´;ºÍ!ºz´Í!"Àt º¦´ Í!é¸ë2£¢3À£¤@£�´ºÍ!¹´'º�Í!"Àt º¼´ Í!éØè`Š.è~è'ºÐ´ Í!ºq´ Í!è¾"Ûy º´ Í!ëâu ëj�ƒëÑãºë´ Í!‹—ƒÂ ´ Í!º´ Í!´Í!ŠèÍ!ŠÈ:.tè¸"Àu ºz´ Í!ëLj.€ù |€ù~w ‹·ˆLëÆD ÆD*ÑëƒÃˆ�éjÿŠˆèº•´ Í!´Í!$ß÷“ÔŽ�‹††¤¤Üÿÿ.‰/.Œ1ËV¾ PQRWUS.Å/ŠGŠg ‹O‹W—ŠG2äðð< w%—Äÿ.Å/‰G)O[]_ZYX^Ë3É´ôð´�ÃÅ/ÆGëéÆ*ëÆ*3ö‹., .ŽÞ‰lPˆDRæTŒÀÑàÑÖÑàÑÖÑàÑÖÑàÑÖÇ£#–¢%ƒ>&ÿuè™R¾’3Ò÷öBˆ)¾3Ò÷öˆ(Ðâ ÐâöÒ€âœ=r€Ê€=s€Ê@ˆ"‹Ð‡&+аs÷Ú°¢‰ Z´èyu�#€%B )þÀ< ¢)àáãë�´Ã<vþÌuÔÇ&ÿÿ< r°»t×´�à    Ç'¸‡)³è#uÇ'Ç ÿÆè Ç&ˆ&*ó Q3ÉÆ+æU + ÀáùuþËuóYÇ <ÿþêÅ/ÆG ‰wŒOéžþê`<ŒÈ‹Ø±ÓàÓÀã,.Å/ÇG÷ŒO¾è븨Îì  FUNCTION KEY MENU ( 0) End program $< > ( 1) Put a CTRL-Z in the tempååå; Basic I/O System definition - INCLUDEd in each module ; Assumes a CPU Support card at F0 hex for character I/O ; Select whether console input is interrupt-driven or polled. INTINP EQU 1 QSIZE EQU 100 ; Input queue size. ; Select whether the auxiliary port is the Support Card parallel port ; or the second channel of a Multiport Serial card addressed at 10H. PARALLELAUX EQU 0 SERIALAUX EQU 1 ; Select whether the printer is connected to the Support card parallel ; output port (standard) or the first channel of a Multiport Serial card ; addressed at 10H. PARALLELPRN EQU 0 SERIALPRN EQU 1 ; If the Multiport Serial was chosen for either the auxiliary or the ; printer, select the baud rate here, using a hex value from this table: ;  ; 50 0 150 4 1800 8 4800 C ; 75 1 300 5 2000 9 7200 D ; 110 2 600 6 2400 A 9600 E ; 134.5 3 1200 7 3600 B 19200 F PRNBAUD EQU 0EH ; 9600 baud AUXBAUD EQU 0EH ; 9600 baud ; Disk options for MS-DOS 2.0 selected here ;************************************************************ ; If you have a hard disk select it here. If you want the driver ; to be installable (installed at boot time) then select INSTALL ; also. IMI EQU 0 SCRIBE EQU 1 HARD EQU IMI OR SCRIBE INSTALL EQU 1 ;************************************************************ ; Select disk controller here. SCP EQU 0 TARBELL EQU 1 ;Select only LARGE below ; Select disk configuration: LARGE EQU 1 ; Two large drives. COMBIN EQU 0 ; Two 8-inch and one 5-inch. SMALL EQU 0 ; Three 5-inch drives. MAXLARGE EQU 2 ;Number of 8" when LARGE is selected MAXSMALL EQU 3 ;Number of 5" when SMALL is selected MAXLARGECOMB EQU 2 ;Number of 8" when COMBIN is selected MAXSMALLCOMB EQU 1 ;Number of 5" when COMBIN is selected LARGDRV EQU LARGE OR COMBIN SMALLDRV EQU SMALL OR COMBIN LDRVMAX EQU MAXLARGE*LARGE+MAXLARGECOMB*COMBIN ; # of 8" drives SDRVMAX EQU MAXSMALL*SMALL+MAXSMALLCOMB*COMBIN ; # of 5" drives HDRVMAX EQU HARD ; # of hard disk drives ;************************************************************ ; If your disk drives support DISKCHANGE signal and 2 SIDED signal and ; you have a SCP disk controller, then select these options here. ; MS-DOS will use these signals to automatically select single or ; double sided drives. These are ignored for PerSci drives. DISKCHG EQU 0 TWOSIDE EQU 0 ;************************************************************* ; Select double-sided operation of 8-inch disks in double-density mode.   ; Select this option only if TWOSIDE is not used (or PERSCI is set). LARGEDS EQU 1 ;************************************************************ ; Select whether FORMAT defaults to single- or double-sided for 5" disks. ; (This can always be overridden with the /1 or /2 switches.) SMALLDS EQU 1 ;*********************************************************** ; If 8-inch drives are PerSci, select here: PERSCI EQU 0 ;************************************************************ ; Use table below to select head step speed. Step times for 5" drives ; are double that shown in the table. Times for Fast Seek mode (using ; PerSci drives) is very small - 200-400 microseconds. ; ; Step value 1771 1793 ; ; 0 6ms 3ms ; 1 6ms 6ms ; 2  10ms 10ms ; 3 20ms 15ms STPSPD EQU 0 ;************************************************************ SIDECHK EQU TWOSIDE AND (PERSCI-1) AND SCP AND LARGDRV DSKCHG EQU DISKCHG AND (PERSCI-1) AND SCP AND LARGDRV BIOSSEG EQU 40H ; I/O system segment. BASE EQU 0F0H SIOBASE EQU 10H STAT EQU BASE+7 DATA EQU BASE+6 DAV EQU 2 TBMT EQU 1 SERIAL EQU SERIALPRN+SERIALAUX STCDATA EQU BASE+4 ; Ports for 9513 Timer chip. STCCOM EQU BASE+5 IF SERIALAUX AUXSTAT EQU SIOBASE+3 AUXDATA EQU SIOBASE+2 ENDIF IF PARALLELAUX AUXSTAT EQU BASE+13 AUXDATA EQU BASE+12 ENDIF IF SERIALPRN PRNSTAT EQU SIOBASE+1 PRNDATA EQU SIOBASE+0 ENDIF IF PARALLELPRN PRNSTAT EQU BASE+13 PRNDATA EQU BASE+12 ENDIF ;define offsets for IO data packet IODAT STRUC CMDLEN DB ? ;LENGTH OF THIS COMMAND UNIT DB ? ;SUB UNIT SPECIFIER CMD DB ? ;COMMAND CODE STATUS DW ? ;STATUS DD 2 DUP (?) MEDIA DB ? ;MEDIA DESCRIPTOR TRANS DD ? ;TRANSFER ADDRESS COUNT DW ? ;COUNT OF BLOCKS OR CHARACTERS START DW ? ;FIRST BLOCK TO TRANSFER IODAT ENDS ;ÊürÇÊüËU‹ìŒØŽÀ‹v ‹~‹NüÑéó¥s¤]ÊU‹ìŒØŽÀ‹v ‹~‹NñNùOýó¤]ÊU‹ìŒØŽÀ‹åPAGE 60,132 ; Floppy disk I/O System for MS-DOS version 2.00 and later INCLUDE IODEF.ASM IO GROUP CODE CODE SEGMENT BYTE PUBLIC 'IOSYS' ASSUME CS:IO,DS:IO EXTRN EXIT:NEAR, CMDERR:NEAR, BUS$EXIT:NEAR, PTRSAV:DWORD EXTRN ERR$EXIT:NEAR  EXTRN SELECT:BYTE IF LARGDRV PUBLIC LDSKTBL LDSKTBL: DW LDSK$INIT DW LMEDIA$CHK DW GET$BPB DW CMDERR DW LDSK$READ DW BUS$EXIT DW EXIT DW EXIT DW LDSK$WRIT DW LDSK$WRIT ENDIF IF SMALLDRV PUBLIC SDSKTBL SDSKTBL: DW SDSK$INIT DW SMEDIA$CHK DW GET$BPB DW CMDERR DW SDSK$READ DW BUS$EXIT DW EXIT DW EXIT DW SDSK$WRIT DW SDSK$WRIT ENDIF ; ************ 1793-type controller disk I/O ***************** READCOM EQU 80H WRITECOM EQU 0A0H IF SCP SMALLBIT EQU 10H BACKBIT EQU 04H DDENBIT EQU 08H DONEBIT EQU 01H DISK EQU 0E0H ENDIF IF TARBELL BACKBIT EQU 40H DDENBIT EQU 08H DONEBIT EQU 80H DISK EQU 78H DLYTIM EQU 10 ; 24 usec delay after force interrupt ENDIF CURDRV DB -1 ; SIDE has media byte ; Bit 7=1 for 5", 0 for 8" drives ; Bit 6=1 for two-side, 0 for one-side drives ; DDENBIT set for double density, reset for single density SIDE DB 0 ; Explanation of tables below. ; DRVTAB is a table of bytes which are sent to the d  isk controller as drive- ; select bytes to choose which physical drive is selected for each disk I/O ; driver. Always select side 0 in the drive-select byte if ; a side-select bit is available. Exactly which bits in the drive-select byte ; do what depends on which disk controller is used. ; TRKTAB is a table of bytes used to store which track the read/write ; head of each drive is on. Each physical drive should have its own ; entry in TRKTAB. ; TRKPT is a table of bytes which indicates which TRKTAB entry each ; disk I/O driver should use. Drives such as PerSci 277s which use ; the same head positioner for more than one drive should share entrys ; in TRKTAB. .SALL BYTELST MACRO INITVAL,COUNT,INC,DUPCNT LOCAL X X = INITVAL REPT COUNT DB DUPCNT DUP(X) X = X+INC ENDM ENDM DRVTAB LABEL BYTE IF SCP BYTELST 0,LDRVMAX,1,1 BYTELST 10H,SDRVMAX,1,1 ENDIF IF TARBELL BYTELST 0,LDRVMAX,10H,1 ENDIF TRKPT LABEL BYTE IF PERSCI BYTELST 0,LDRVMAX/2,1,2 BYTELST LDRVMAX/2,SDRVMAX,1,1 TRKTAB DB (LDRVMAX/2+SDRVMAX) DUP (-1) ELSE BYTELST 0,LDRVMAX+SDRVMAX,1,1 TRKTAB DB (LDRVMAX+SDRVMAX) DUP (-1) ENDIF IF LARGDRV LINITTAB LABEL WORD IF LARGEDS OR SIDECHK DW LDRVMAX DUP(LDSDRIVE) ELSE DW LDRVMAX DUP(LSSDRIVE) ENDIF ENDIF IF SMALLDRV SINITTAB LABEL WORD DW SDRVMAX DUP(SDSDRIVE) ENDIF IF SMALLDRV SSSDRIVE: ; This is the IBM Personal Computer DW 512 ; disk format. DB 1 DW 1 DB 2 DW 64 DW 320 DB 80H+DDENBIT DW 1 DW 512 SDSDRIVE: ; The IBM PC format for double sided disks DW 512 DB 2 DW 1 DB 2 DW 112 ; # of directory entries DW 640 DB 0C0H+DDENBIT ; Media DW 1 ; Sectors for 1 fat DW 512 ; Reserve space ENDIF IF LARGDRV LSDRIVE: ; Single density / single sided DW 128 ;SECTOR SIZE DB 4 ;SECTORS/ALLOC UNIT DW 1 ;NUMBER OF RESERVED SECTORS DB 2 ;NUMBER OF FATS DW 68 ;NUMBER OF DIRECTORY ENTRIES DW 77*26 ;TOTAL NUMBER OF SECTORS DB 0 ;MEDIA BYTE DW 6 ;SECTORS FOR ONE FAT IF SIDECHK OR LARGEDS LDSDRIVE: ; Double density / double sided DW 1024 DB 1 DW 1 DB 2 DW 192 DW 77*8*2 DB 40H+DDENBIT ; Media byte DW 2 ENDIF IF SIDECHK OR (LARGEDS-1) LSSDRIVE: ; Double density / single sided DW 1024 DB 1 DW 1 DB 2 DW 96 DW 77*8 DB DDENBIT ; Media byte DW 1 ENDIF ENDIF ;********************************************************* ; Disk change function. ; On entry: ; AL = disk unit number. ; AH = media byte ; On exit: ; AX = status (done or error code) ; [TRANS] set as follows: ; = -1 (FF hex) if disk is changed. ; = 0 if don't know. ; = 1 if not changed. ; [SIDE] has media byte for GETBPB call SMEDIA$CHK: IF COMBIN ADD AL,LDRVMAX ; Convert unit # ENDIF LMEDIA$CHK: MOV [SIDE],AH MOV AH,0 MOV SI,AX XCHG [SELECT+SI],AH ; Has drive been selected before? OR AH,AH JNZ DENCHECK ; If no, go check density ; First try head load test. If head is loaded on the drive we want, ; then disk must not have been changed. CMP AL,[CURDRV] ; Same drive? JNZ CHGCHK ; Try disk change signal if not PUSH AX ; Save unit number IF SCP IN AL,DISK+4 ; Head load byte for SCP controller ELSE IN AL,DISK ; Head load byte for Tarbell ENDIF !  AND AL,20H ; Look at head load bit POP AX MOV AH,1 ; AH = 1, disk not changed. JNZ MEDIA$EXIT CHGCHK: ; Now look at disk change bit if enabled and not a 5" drive. IF SMALLDRV MOV AH,0 ; Not sure if disk changed TEST [SIDE],80H JNZ MEDIA$EXIT ; If small drive, don't use disk change signal ENDIF IF DSKCHG CALL CHKNEW MOV DL,AL MOV BX,OFFSET IO:DRVTAB XLAT ; Get drive select byte OUT DISK+4,AL IN AL,DISK+1 ; Get current track number OUT DISK+3,AL ; Make it the track to seek to MOV AL,18H ; Seek and load head CALL DCOM CHKLOOP: IN AL,DISK ; Read type I status TEST AL,20H ; Check head load bit JZ CHKLOOP ; Wait until head-load time out TEST AL,80H ; Is disk ready? 1= not ready JNZ NOTRDY IN AL,DISK+4 ; Bit 7=1 if disk not changed TEST AL,80H MOV AH,1 JNZ MEDIA$EXIT MOV AL,DL ; Restore unit number ENDIF MOV AH,0 ; Disk may not have been changed ; Perform density check on 8" drive ; AH has current disk changed status, either 0 or -1 DENCHECK: IF LARGDRV IF COMBIN TEST [SIDE],80H JNZ MEDIA$EXIT ; If small drive, don't need density check ENDIF MOV DH,AH CALL CHKNEW ; Unload head if selecting new drive. MOV BX,OFFSET IO:DRVTAB XLAT ; Get drive select byte  MOV DL,[SIDE] AND DL,[DDENBIT] OR DL,AL MOV CX,4 ; Try each density twice MOV AH,0 ; Disk may not have been changed CHKDENS: MOV AL,DL OUT DISK+4,AL ; Select disk MOV AL,0C4H ; READ ADDRESS command CALL DCOM PUSH AX IN AL,DISK+3 ; Eat last byte to reset DRQ POP AX AND AL,98H JZ HAVDENS ; Jump if no error in reading address. NOT AH XOR DL,DDENBIT ; Try other density LOOP CHKDENS MOV AH,AL JMP ERROR HAVDENS: AND DL,DDENBIT IF SIDECHK IN AL,DISK+4 AND AL,40H ; Get side bit (1=two sided) OR DL,AL ENDIF MOV [SIDE],DL OR AH,DH ENDIF ;IF LARGDRV MEDIA$EXIT: LDS BX,[PTRSAV] MOV BYTE PTR DS:[BX.TRANS],AH MOV AH,1 ;No error RET NOTRDY: MOV AX,8102H ;Return NOT READY error RET CHKNEW: MOV AH,AL ; Save disk drive number in AH. XCHG AL,[CURDRV] ; Make new drive current, AL = previous CMP AL,AH ; Changing drives? JZ RET3 ; Changing drives, unload head so the head load delay one-shot ; will fire again. Do it by seeking to same track the H bit reset. IN AL,DISK+1 ; Get current track number OUT DISK+3,AL ; Make it the track to seek to MOV AL,10H ; Seek and unload head CALL DCOM MOV AL,AH ; Restore current drive number RET3: RET GET$BPB: ; This is the equivalant of the old MAPDEV routine in MS-DOS 1.25. ; Using the media byte and/or FAT ID byte ,set the proper DPT for ; the driver. IF COMBIN TEST [SIDE],80H ; Is it 5" drive ? JZ GET8INCH ENDIF IF SMALLDRV MOV SI,OFFSET IO:SDSDRIVE MOV AL,ES:[DI] ; Get FAT ID byte TEST AL,1 ; Is it double sided? JNZ SETBPB MOV SI,OFFSET IO:SSSDRIVE JMP SHORT SETBPB  ENDIF IF LARGDRV GET8INCH: TEST [SIDE],DDENBIT ; 0=single density, 1=double density MOV SI,OFFSET IO:LSDRIVE JZ SETBPB IF SIDECHK OR LARGEDS MOV SI,OFFSET IO:LDSDRIVE ENDIF IF SIDECHK TEST [SIDE],40H JNZ SETBPB ENDIF IF SIDECHK OR LARGEDS-1 MOV SI,OFFSET IO:LSSDRIVE ENDIF ENDIF ;IF LARGDRV SETBPB: LDS BX,[PTRSAV] SETBPBPT: MOV [BX." COUNT],SI MOV [BX.COUNT+2],CS XOR CX,CX ; Don't change count field MOV AH,1 ;No error RET ; Disk read function. ; ; On entry: ; AL = Disk I/O driver number ; AH = Media byte ; ES:DI = Disk transfer address ; CX = Number of sectors to transfer ; DX = Logical record number of transfer ; On exit: ; CX = number of sectors transferred. ; AH = 1 if success, 81H if fail ; AL = disk error code ; 0 = write protect error ; 2 = not ready error ; 4 = CRC error ; 6 = seek error ; 8 = sector not found ; 10 = write fault ; 12 = "data error" (any other error) SDSK$READ: IF COMBIN ADD AL,LDRVMAX ENDIF LDSK$READ: CALL SEEK ; Position head JC ERROR RDLP: PUSH CX CALL READSECT ;Perform sector read POP CX JC ERROR INC DH ;Next sector number LOOP RDLP ;Read each sector requested MOV AH,1 ;No error RET ; Disk write function.  ; Registers same on entry and exit as read above. SDSK$WRIT: IF COMBIN ADD AL,LDRVMAX ENDIF LDSK$WRIT: CALL SEEK  ;Position head JC ERROR WRTLP: PUSH CX CALL WRITESECT ; Perform sector write POP CX JC ERROR INC DH ; Bump sector counter LOOP WRTLP ; Write CX sectors MOV AH,1 ; No error RET ERROR: MOV BL,[CURDRV] MOV BH,0 MOV DL,-1 MOV [BX+SELECT],DL MOV [SI],DL ; Indicate we don't know where head is. MOV SI,OFFSET IO:ERRTAB GETCOD: INC DL ; Increment to next error code. LODSB TEST AH,AL ; See if error code matches disk status. JZ GETCOD ; Try another if not. MOV AL,DL ; Now we've got the code. SHL AL,1 ; Multiply by two. MOV AH,81H ; Return error code RET ERRTAB DB 40H ; Write protect error DB 80H ; Not ready error DB 8 ; CRC error DB 2 ; Seek error DB 10H ; Sector not found DB 20H ; Write fault DB 7 ; Data error ; Function: ; Seeks to proper track. ; On entry: ; Same as for disk read or write above. ; On exit: ; AH = Drive select byte ; DL = Track number ; DH = Sector number ; DI = Disk transfer address in ES ; SI = pointer to drive's track counter in DS ; CX unchanged (number of sectors) SEEK: MOV [SIDE],AH MOV BL,AL MOV BH,0 CALL CHKNEW MOV AL,[SIDE] AND AL,DDENBIT OR AL,[DRVTAB+BX] ;Get drive select byte OUT DISK+4,AL ;Select drive MOV AH,AL ; Save drive-select byte in AH. XCHG AX,DX ; AX = logical sector number. MOV DL,26 ; 26 sectors/track unless changed below TEST DH,DDENBIT ; Check for double-density. JZ HAVSECT MOV DL,16 TEST [SIDE],40H JNZ HAVSECT ; Disk is double-sided MOV DL,8 ; Disk is single sided HAVSECT: DIV DL ; AL = track, AH = sector. XCHG AX,DX ; AH has drive-select byte, DX = track & sector. INC DH ; Sectors start at one, not zero. MOV BL,[BX+TRKPT] ; Get this drive's displacement into track table. ADD BX,OFFSET IO:TRKTAB ; BX now points to track counter for this drive. MOV SI,BX MOV AL,DL ; Move new track number into AL. XCHG AL,[SI] ; Xchange current track with desired track OUT DISK+1,AL ; Inform controller chip of current track CMP AL,DL ; See if we're at the right track. JZ RET4 MOV BH,2 ; Seek retry count CMP AL,-1 ; Head position known? JNZ NOHOME  ; If not, home head TRYSK: CALL HOME JC SEEKERR NOHOME: MOV AL,DL ; AL = new track number. OUT DISK+3,AL MOV AL,# 1CH+STPSPD ; Seek command. CALL MOVHEAD AND AL,98H ; Accept not ready, seek, & CRC error bits. JZ RET4 JS SEEKERR ; No retries if not ready DEC BH JNZ TRYSK SEEKERR: MOV AH,AL ; Put status in AH. TEST AL,80H ; See if it was a Not Ready error. STC JNZ RET4 ; Status is OK for Not Ready error. MOV AH,2 ; Everything else is seek error. RET4: RET SETUP: MOV BL,DH ; Move sector number to BL to play with TEST AH,DDENBIT ; Check for double density. JZ CHECK26 ; Not DD. MOV AL,AH ; Select front side of disk. OUT DISK+4,AL CMP BL,8 ; See if legal DD sector number. JBE PUTSEC ; Jump if ok. TEST [SIDE],40H ; Get media byte to see if double sided JZ STEP ; Must step SUB BL,8 ; Find true sector for back side. CMP BL,8 ; See if ok now. JA STEP ; Have to step if still too big. MOV AL,AH ; Move drive select byte into AL. OR AL,BACKBIT ; Select back side. OUT DISK+4,AL JMP SHORT PUTSEC CHECK26: CMP BL,26 ; See if legal large SD/SS sector. JBE PUTSEC ; Jump if ok. STEP: INC DL ; Increment track number. MOV AL,58H ; Step in with update. CALL DCOM INC BYTE PTR CS:[SI] ; Increment the track pointer. MOV DH,1 ; After step, do first sector. MOV BL,DH ; Fix temporary sector number also. PUTSEC: MOV AL,BL ; Output sector number to controller. OUT DISK+2,AL RET5: RET READSECT: CALL SETUP MOV BL,10 PUSH DX MOV DX,DISK+3 RDAGN: MOV AL,READCOM CLI OUT DISK,AL MOV BP,DI JMP SHORT RLOOPENTRY RLOOP: STOSB RLOOPENTRY: IF SCP IN AL,DISK+5 SHR AL,1 IN AL,DX JNC RLOOP ENDIF IF TARBELL IN AL,DISK+4 SHL AL,1 IN AL,DX JC RLOOP ENDIF STI ; Interrupts OK now CALL GETSTAT AND AL,9CH JZ RDPOP MOV DI,BP MOV BH,AL ; Save error status for report DEC BL JNZ RDAGN MOV AH,BH ; Put error status in AH. STC RDPOP: POP DX IF TARBELL FORCINT:  MOV AL,0D0H ; Tarbell controllers need this force interrupt OUT DISK,AL ; so that Type I status is always available MOV AL,DLYTIM ; at the 1793 status port so we can find out INTDLY: ; if the head is loaded. SCP controllers have DEC AL ; head load status available at the DISK+4 JNZ INTDLY ; status port. ENDIF RET WRITESECT: CALL SETUP MOV BL,10 XCHG SI,DI PUSH ES POP DS ;DS must have transfer segment ASSUME DS:NOTHING PUSH DX MOV DX,DISK+3 WRTAGN: MOV AL,WRITECOM CLI OUT DISK,AL MOV BP,SI WRLOOP: IF SCP IN AL,DISK+5 SHR AL,1 LODSB OUT DX,AL JNC WRLOOP ENDIF  IF TARBELL IN AL,DISK+4 SHL AL,1 LODSB OUT DX,AL JC WRLOOP ENDIF STI DEC SI CALL GETSTAT AND AL,0FCH JZ WRPOP MOV SI,BP MOV BH,AL DEC BL JNZ WRTAGN MOV AH,BH ; Error status to AH. STC WRPOP: POP DX PUSH CS POP DS ;Restore local DS ASSUME DS:IO XCHG SI,DI IF TARBELL JMP FORCINT ELSE RET ENDIF HOME: MOV BL,3 TRYHOM: MOV AL,0CH+STPSPD CALL DCOM AND AL,98H JZ RET6 JS HOMERR ; No retries if not ready MOV AL,58H+STPSPD ; Step in with update CALL DCOM DEC BL JNZ TRYHOM HOMERR: STC RET6: RET MOVHEAD: DCOM: OUT DISK,AL PUSH AX AAM ; Delay 10 microseconds POP AX GETSTAT: IN AL,DISK+4 TEST AL,DONEBIT IF SCP JZ GETSTAT ENDIF IF TARBELL JNZ GE$ TSTAT ENDIF IN AL,DISK RET IF LARGDRV LDSK$INIT: MOV AL,LDRVMAX MOV SI,OFFSET IO:LINITTAB ENDIF SETDRV: LDS BX,[PTRSAV] MOV [BX.MEDIA],AL JMP SETBPBPT IF SMALLDRV SDSK$INIT: MOV AL,SDRVMAX MOV SI,OFFSET IO:SINITTAB JMP SETDRV ENDIF CODE ENDS END €~ý u˜Æ¬ÿëF ¨ÐØsBÄœ&Š´9 r°¢¨&ˆÄœ&ˆG° é§Äœ‹6 &Š@ˆFýÿ < s< u”éƒÄååå; I/O System for MS-DOS version 2.00 and later. Revised 12-22-82. ; Contains data packets and init code only BIOSIZ EQU 8*400H ;Size of BIOS in bytes BIOSIZS EQU BIOSIZ/10H ;Size of BIOS in Paragraphs MAXBUF EQU 10 ; # of buffers for files MAXFIL EQU 10 ; # of files to be opened at one time INCLUDE IODEF.ASM PUBLIC PTRSAV,EXIT,BUS$EXIT,CMDERR,ERR$EXIT PUBLIC RE_INIT PUBLIC SELECT EXTRN SYSINIT:FAR EXTRN CURRENT_DOS_LOCATION:WORD EXTRN FINAL_DOS_LOCATION:WORD EXTRN DEVICE_LIST:DWORD EXTRN MEMORY_SIZE:WORD EXTRN DEFAULT_DRIVE:BYTE EXTRN BUFFERS:BYTE,FILES:BYTE EXTRN CONTBL:WORD,AUXTBL:WORD,TIMTBL:WORD,PRNTBL:WORD IF LARGDRV EXTRN LDSKTBL:WORD ENDIF IF SMALLDRV EXTRN SDSKTBL:WORD ELSE SDSKDEV EQU HDSKDEV ENDIF  IF HARD AND (INSTALL-1) EXTRN HDSKTBL:WORD ELSE HDSKDEV EQU -1 ENDIF IO GROUP CODE,INITSEG,LASTSEG CODE SEGMENT BYTE PUBLIC 'IOSYS' ASSUME CS:IO,DS:IO ORG 0 ZERO: JMP INIT SELECT DB (LDRVMAX+SDRVMAX+HARD) DUP (-1) ; ************ DEVICE HEADERS ***************************************** DEVSTART LABEL WORD CONDEV: ;Header for device CON DW AUXDEV,BIOSSEG ;Link to next device DW 8013H ;Attributes - console input, output device DW STRATEGY ;Interrupt service (Used in future versions) DW CON$IN ;Entry point DB "CON " ;Device name AUXDEV: ;Header for device AUX DW PRNDEV,BIOSSEG DW 8000H DW STRATEGY DW AUX$IN DB "AUX " PRNDEV: ;Header for device PRN DW TIMDEV,BIOSSEG DW 8000H DW STRATEGY DW PRN$IN DB "PRN " TIMDEV: ;Header for clock device DW DSKDEV,BIOSSEG DW 8008H DW STRATEGY DW TIM$IN DB "CLOCK " DSKDEV: ;Header for floppy disk device IF LARGDRV DW SDSKDEV,BIOSSEG DW 2000H DW STRATEGY DW LDSK$IN DB ? ENDIF IF SMALLDRV SDSKDEV: DW HDSKDEV,BIOSSEG DW 0 ; IBM compatable DW STRATEGY DW SDSK$IN DB ? ENDIF IF HARD AND (INSTALL-1) HDSKDEV: ;Header for 5.25 hard disk device DW -1,BIOSSEG DW 2000H DW STRATEGY DW HDSK$IN DB ? ENDIF ;************************************************************************ PTRSAV DD 0 STRATEGY PROC FAR MOV WORD PTR CS:[PTRSAV],BX MOV WORD PTR CS:[PTRSAV+2],ES RE_INIT: RET STRATEGY ENDP ;******************************************************** CON$IN: PUSH SI MOV SI,OFFSET IO:CONTBL JMP SHORT ENTRY AUX$IN: PUSH SI MOV SI,OFFSET IO:AUXTBL JMP SHORT ENTRY PRN$IN: PUSH SI MOV SI,OFFSET IO:PRNTBL JMP SHORT ENTRY TIM$IN: PUSH SI MOV SI,% OFFSET IO:TIMTBL JMP SHORT ENTRY IF LARGDRV LDSK$IN: PUSH SI MOV SI,OFFSET IO:LDSKTBL JMP SHORT ENTRY ENDIF IF SMALLDRV SDSK$IN: PUSH SI MOV SI,OFFSET IO:SDSKTBL JMP SHORT ENTRY ENDIF IF HARD AND (INSTALL-1) HDSK$IN: PUSH SI MOV SI,OFFSET IO:HDSKTBL JMP SHORT ENTRY ENDIF DISPATCH PROC FAR ENTRY: PUSH AX PUSH CX PUSH DX PUSH DI PUSH BP PUSH DS PUSH ES PUSH BX LDS BX,CS:[PTRSAV] ;GET POINTER TO I/O PACKET MOV AL,[BX.UNIT] ;AL = UNIT CODE MOV AH,[BX.MEDIA] ;AH = MEDIA DESCRIP MOV CX,[BX.COUNT] ;CX = COUNT MOV DX,[BX.START] ;DX = START SECTOR XCHG DI,AX MOV AL,[BX.CMD] XOR AH,AH ADD SI,AX ADD SI,AX CMP AL,11 JA CMDERR XCHG AX,DI LES DI,[BX.TRANS] PUSH CS POP DS  CALL [SI] ;GO DO COMMAND LDS BX,CS:[PTRSAV] MOV [BX.STATUS],AX ;MARK OPERATION COMPLETE SUB [BX.COUNT],CX ;Subtract amount transfered POP BX POP ES POP DS POP BP POP DI POP DX POP CX POP AX POP SI RET ;RESTORE REGS AND RETURN DISPATCH ENDP ; Standard return types used by all functions EXIT: XOR CX,CX ;Transfer complete MOV AH,00000001B ;All done RET BUS$EXIT: ;DEVICE BUSY EXIT MOV AH,00000011B RET CMDERR: MOV AL,3 ;UNKNOWN COMMAND ERROR ERR$EXIT: MOV AH,10000001B ;MARK ERROR RETURN RET CODE ENDS ;*********************************************** ; INIT CODE INITSEG SEGMENT PARA PUBLIC 'IOSYS' ASSUME CS:IO,DS:IO INIT: XOR BP,BP ; Set up stack just below I/O system.  MOV SS,BP MOV SP,BIOSSEG*16 PUSH CS POP DS ;Fall into init code of other modules INITSEG ENDS LASTSEG SEGMENT BYTE PUBLIC 'IOSYS' ASSUME CS:IO, DS:SEG SYSINIT ;Fall into this segment from init code of other modules MOV AX,SEG SYSINIT MOV DS,AX MOV AX,CS ADD AX,BIOSIZS MOV [CURRENT_DOS_LOCATION],AX MOV WORD PTR [DEVICE_LIST],OFFSET IO:DEVSTART MOV WORD PTR [DEVICE_LIST+2],CS MOV [FINAL_DOS_LOCATION],INITSEG MOV [FILES],MAXFIL MOV [BUFFERS],MAXBUF JMP SYSINIT LASTSEG ENDS END ÷n‹n‰F¸p�~€t@]ÊU‹ì‹^¸ð‡@%]ÊU‹ì‹^Ç]Ê;>Òür;>Öüs ‹Eþ;Èv‹ÈAÑéŒØŽÀüó¥ËXƒ>Êüu[X‰&Êü‰.ÌüåååPAGE 60,80 ; ; SCP's OEM disk initialization module to link with ; Microsoft's FORMAT.OBJ and FORMES.OBJ disk formatting program. ; Use this for MS-DOS 2.0 disks. ; Revised 3-11-83. ; INCLUDE IODEF.ASM BOOTER EQU 200H ; "B" command puts boot sector here. SEGBIOS SEGMENT AT BIOSSEG BIOS LABEL FAR SEGBIOS ENDS CODE SEGMENT BYTE PUBLIC 'CODE' ASSUME CS:CODE,DS:CODE,ES:CODE PUBLIC FATID,STARTSECTOR,SWITCHLIST,FREESPACE,FATSPACE,HARDFLAG PUBLIC INIT,DISKFORMAT,BADSECTOR,WRTFAT,DONE EXTRN SWITCHMAP:WORD,DRIVE:BYTE ; ; ******************************************************************* ; IF SCP DISK EQU 0E0H DONEBIT EQU 01H SMALLBIT EQU 10H BACKBIT EQU 04H DDENBIT EQU 08H ENDIF &  IF TARBELL DISK EQU 78H DONEBIT EQU 80H BACKBIT EQU 40H DDENBIT EQU 08H ENDIF GET_DPB EQU 50  GET_CDPB EQU 81 RETRY EQU 3 ONE_BIT EQU 40H TWO_BIT EQU 20H C_BIT EQU 10H ; This must be up here instead of near D_BIT EQU 08H ; SWITCHLIST because the assembler O_BIT EQU 04H ; Can't handle the forward references V_BIT EQU 02H S_BIT EQU 01H INIT: IF SMALLDRV CALL DRIVESELECT TEST AL,SMALLBIT ; See if small drive JZ INIT3 OR [SWITCHMAP],D_BIT ; Force double-density on 5.25 ; drives because controller can't ; handle single-density well. INIT3: ENDIF IF (SIDECHK-1)*(LARGEDS OR SMALLDS) OR [SWITCHMAP],TWO_BIT ; Force double sided if set ENDIF TEST [SWITCHMAP],ONE_BIT JZ INIT4 AND [SWITCHMAP],NOT TWO_BIT ; Turn off 2 sided line INIT4: TEST [SWITCHMAP],TWO_BIT ; Is it double sided JZ INIT1 OR [SIDE],0FFH ; Set flag INIT1: OR [SWITCHMAP],V_BIT ; Always ask for volume ID IF HARD  MOV AL,[DRIVE] CMP AL,LDRVMAX+SDRVMAX ; Is it hard disk ? JB INIT2 ; Exit MOV HARDFLAG,0FFH ; Set flag ENDIF  INIT2: CLC ; No errors. RET DISKFORMAT: MOV BL,[DRIVE] MOV BH,0 PUSH DS MOV AX,BIOSSEG MOV DS,AX  MOV BYTE PTR [BX+3],-1 ; Flag disk as unknown POP DS IF HARD CMP HARDFLAG,0FFH ; Is it a hard disk ? JNZ FT1 JMP HDFORMAT ; Format the hard disk FT1: ENDIF TEST [SWITCHMAP],C_BIT JNZ CHKDENS MOV DX,OFFSET FRMT_MSG CALL MESSAGE JMP KNOW_DENSITY1 ; ; If we are just clearing the disk, it is not necessary for the operator ; to specify the correct density. Therefore, look at the disk to figure ; out what it really is. ; CHKDENS: MOV CX,4 ; Try each density twice CHK: CALL DRIVESELECT ; Select drive. OUT DISK+4,AL ; Select disk MOV AL,0C4H ; READ ADDRESS command CALL DCOM AND AL,98H IN AL,DISK+3 ; Eat last byte to reset DRQ JZ CHK1 ; Jump if no error in reading address. XOR BYTE PTR [SWITCHMAP],D_BIT ; Try other density LOOP CHK MOV DX,OFFSET READ_ERROR ; Error message. JMP ERROR CHK1: IF SIDECHK CALL DRIVESELECT AND AL,SMALLBIT JNZ CHK2 ; Make sure it is not a small drive TEST SWITCHMAP,D_BIT JZ CHK2 ; Make sure it is not single density IN AL,DISK+4 AND AL,40H ; Get side bit OR [SIDE],AL ; Set it ENDIF CHK2: ; Force a disk read to get proper DPB MOV CX,RETRY CHK3: PUSH CX MOV DL,DRIVE INC DL MOV AH,GET_DPB INT 21H ; Media check PUSH CS POP DS MOV AL,DRIVE MOV CX,1 MOV DX,1 MOV BX,OFFSET PATTERN ; Temp buffer INT 25H ; Direct read POP DX POP CX JNC CHK4 LOOP CHK3 ; Read until good CHK4: JMP BOOTRET KNOW_DENSITY1: CALL HEADUNLOAD ; So I/O system thinks disk may be changed. KNOW_DENSITY2: CALL DRIVESELECT ; Select drive. OUT DISK+4,AL ; Select disk IF SIDECHK AND AL,SMALLBIT ; Make sure it is not a small drive JNZ KNOW_DENSITY3 MOV AL,0C4H ; READ ADDRESS command CALL DCOM ; Just read disk, don't care if error IN AL,DISK+4 AND AL,40H ; Get side bit OR [SIDE],AL ; Set it KNOW_DENSITY3: ENDIF MOV WORD PTR [TKCNT],0 MOV BYTE PTR [TKCNT+2],0 CALL TABLE ; SI points to table of info for disk format. MOV AL,[SI+10] ; G' et FATID byte for this format. MOV [FATID],AL MOV AX,[SI+11] ; Get STARTSECTOR for this format. MOV [STARTSECTOR],AX DOIT: MOV BX,OFFSET PATTERN MOV DX,[SI+6] ; DX points to index pattern. CALL MAKE ; Make pattern for index mark and one sector MOV CL,[SI] ; Get sector count for this sector. DEC CL ; Repeat sector pattern for remaining sectors. MAKSEC:  MOV DX,[SI+8] ; DX points to sector pattern. CALL MAKE DEC CL JNZ MAKSEC CALL MAKE ; Fill out rest of track.  ; Put in sequential sector numbers. ; MOV AL,1 ; Start with sector number 1 MOV CL,AL ; Add one to each succeeding sector number MOV BX,[SI+2] ; Get offset from beginning of pattern to first INC BX ; track number. Increment to side, INC BX ; then sector. ADD BX,OFFSET PATTERN ; Compute actual memory address. CALL PUTSEC CALL RESTORE  ; Move the head to track 0. JZ TRACK0 ; Jump if no problem with restoring. MOV DX,OFFSET SEEK_ERROR ; Error message.  JMP ERROR TRACK0: XOR DL,DL ; Start with track 0. TRACKLOOP: PUSH BX MOV BX,OFFSET TRK_MSG CALL INCTRK POP BX  MOV AL,DL ; Get track number. MOV BX,[SI+2] ; Address of first track number in pattern. ADD BX,OFFSET PATTERN MOV CL,0 CALL PUTSEC ; Put track number in each sector. CALL DRIVESELECT ; Get drive-select byte. OUT DISK+4,AL ; Select side. SUB DH,DH ; Start with side 0. SIDELOOP: MOV AL,DH ; Get side number. MOV BX,[SI+2] ; Get offset from beginning of pattern to first INC BX ; track number. Increment to side. ADD BX,OFFSET PATTERN ; Compute actual memory address. MOV CL,0 CALL PUTSEC ; Put side byte in each sector ; ; Write a track. ; CALL TRACK JNC CHECK_SIDE ; Jump if no error. MOV DX,OFFSET WRITE_ERROR ; Error message. JMP ERROR CHECK_SIDE: TEST [SIDE],0FFH ; Check two sided bit JZ NEXTRACK CALL DRIVESELECT ; Get drive-select byte. TEST AL,DDENBIT ; See if double-density. JZ NEXTRACK ; Jump if not (single-density always SS). CHKS1: INC DH ; Next side. CMP DH,2 ; See if too big. JAE NEXTRACK ; Finished this track, on to the next. OR AL,BACKBIT ; Select back side. OUT DISK+4,AL JMP SHORT SIDELOOP ; Do the back side. NEXTRACK: INC DL ; Next track. CMP DL,[SI+1] ; See if done. JAE FINIS MOV AL,58H+STPSPD ; Step in with update, no verify. CALL DCOM TEST AL,098H ; Check for errors, Not Ready, JZ TRACKLOOP ; Seek Error, CRC Error. MOV DX,OFFSET SEEK_ERROR JMP ERROR FINIS: MOV DX,10 CALL CONOUT CALL RESTORE ; Move the head back. MOV DX,OFFSET SEEK_ERROR ; Error message in case of error. JZ F2 JMP ERROR F2: CALL HEADUNLOAD ; Make the I/O system think the disk is changed F3: JMP BOOT_SECTOR ; Set SI to point to a table of data for the selected disk format. ; ; [SI+0] = number of sectors/track ; [SI+1] = number of tracks (or cylindars) on disk. ; [SI+2] = number of bytes from beginning of format pattern track number is. ; [SI+4] = number of bytes in pattern for each sector. ; [SI+6] = address of pattern for index address mark. ; [SI+8] = address of pattern for each sector. ; [SI+10] = FATID byte for this format. ; [SI+11] = STARTSECTOR for(  this format. ; [SI+13] = number of sectors boot sector should load. ; [SI+15] = number of bytes/sector. ; TABLE: TEST HARDFLAG,0FFH MOV AH,6 JNZ DENSITYOK IF SCP AND (SMALL OR COMBIN) SUB AH,AH ; Zero out bit pattern for indexing. CALL DRIVESELECT ; Get drive-select byte. AND AL,SMALLBIT ; See if small disk. JNZ SIZEOK ; Jump if small. ENDIF  TEST [SWITCHMAP],D_BIT MOV AH,3 JZ DENSITYOK ; It is single density MOV AH,4 TEST [SIDE],0FFH ; Is it double/sided? JZ DENSITYOK MOV AH,5 ; Set to double/sided JMP DENSITYOK SIZEOK: TEST [SWITCHMAP],D_BIT MOV AH,0 ; Turn on bit 0 if single-density. JZ DENSITYOK ; Jump if single-density. MOV AH,1 TEST [SIDE],0FFH ; Is it double sided?  JZ DENSITYOK MOV AH,2 ; Set to double sided DENSITYOK: MOV AL,AH ; Computed number to AL. MOV AH,17 ; And multiply by number of bytes in table. MUL AH ; AX = AL*AH. ADD AX,OFFSET DATATABLE ; Add the address of the table. MOV SI,AX RET DRIVESELECT: MOV AL,[DRIVE] ; Get drive-select byte for drive [DRIVE]. PUSH BX MOV BX,OFFSET DRVTAB XLAT TEST [SWITCHMAP],D_BIT ; See if double-density. JZ SPUTNIK ; Jump if not. OR AL,DDENBIT ; Turn on double-density. SPUTNIK: POP BX RET PUTSEC: PUSH DX MOV CH,[SI] ; CH = number of sectors. MOV DX,[SI+4] ; DX = number of bytes in sector pattern. SEC: MOV [BX],AL ; Poke number in sector ID. ADD BX,DX ADD AL,CL ; Increment sector, side, or track number. DEC CH JNZ SEC POP DX RET MAKE: PUSH SI MOV SI,DX MAKELOOP: CLD ; a.k.a. "UP" LODSB ; Get byte count. OR AL,AL ; Return if zero. JZ MAKERETURN MOV CH,AL ; Count to CH. LODSB ; Get byte for pattern. PUTPAT: MOV [BX],AL ; Put byte in pattern. INC BX DEC CH JNZ PUTPAT JMP SHORT MAKELOOP MAKERETURN: MOV DX,SI POP SI RET ; ; Subroutine to restore head to track 0. ; On return, Z flag set if errors. ; RESTORE: MOV AL,08H+STPSPD ; Restore without verify CALL DCOM TEST AL,098H ; Check for errors, Not Ready, RESTORE_RETURN: ; Seek Error, CRC Error. RET TRACK: MOV DI,SI ; Save SI (pointer to DATATABLE). MOV SI,OFFSET PATTERN MOV BP,DX ; Save DX. MOV DX,DISK+3 ; Disk controller data port. MOV AL,0F4H ; Write Track command.  CLI ; Interrupts off. OUT DISK,AL WRTLP: IF SCP IN AL,DISK+5 ; Wait for DRQ or INTRQ. SHR AL,1 LODSB ; Get a byte of the pattern. OUT DX,AL ; Send to controller. JNC WRTLP ENDIF IF TARBELL IN AL,DISK+4 ; Wait for DRQ or INTRQ. SHL AL,1 LODSB ; Get a byte of the pattern. OUT DX,AL ; Send to controller. JC WRTLP  ENDIF STI ; Interrupts back on. MOV DX,BP ; Restore DX. MOV SI,DI ; Restore SI. CALL WAIT ; Wait till status ready. AND AL,0E4H ; Accept "not ready", "write protect", "write JZ WRITERET ; fault", & "lost data" errors. STC ; Set CY flag if error. WRITERET: RET DCOM: OUT DISK,AL AAM ; 10 Microsecond delay. WAIT: IN AL,DISK+4 TEST AL,DONEBIT IF SCP JZ WAIT ENDIF IF TARBELL JNZ WAIT ENDIF IN AL,DISK )  ; Get status from disk. RET HEADUNLOAD: IN AL,DISK+1 ; Read current track. OUT DISK+3,AL ; Make it the track to seek to. MOV AL,10H ; Seek with head unloaded. CALL DCOM RET ; ; Transfer the boot sector to the disk. ; BOOT_SECTOR: TEST [SWITCHMAP],C_BIT JZ SECTOR1 JMP BOOTRET SECTOR1: TEST SWITCHMAP,D_BIT JZ POKE_SINGLE TEST [SIDE],0FFH ; Read 2 sided bit JZ POKE_SINGLE ; Do single sided boot POKE_DOUBLE: MOV AX,[SI+13] ; Poke number of sectors to load into boot. MOV WORD PTR [B2POKE_SECTOR+1],AX MOV AL,[SI+11] ; Poke STARTSECTOR into boot sector. INC AL ; First sector on a track is 1, not 0. MOV BYTE PTR [B2POKE_FIRSECT+1],AL MOV AL,[SI] ; Poke sectors/track two places into boot. MOV BYTE PTR [B2POKE_HALFSECT_1+1],AL MOV BYTE PTR [B2POKE_HALFSECT_2+1],AL SAL AL,1 ; Compute number of sectors/"cylinder". MOV BYTE PTR [B2POKE_MAXSECT_1+2],AL MOV BYTE PTR [B2POKE_MAXSECT_2+2],AL CALL DRIVESELECT ; Get drive-select byte. IF SCP AND AL,0FCH ; Force drive 0 ENDIF IF TARBELL AND AL,0CFH ENDIF MOV BYTE PTR [B2POKE_DRIVESELECT+1],AL MOV AX,[SI+15] ; Poke sector size into boot sector. MOV WORD PTR [B2POKE_SECSIZE+2],AX MOV BX,OFFSET BOOT2SIDED JMP SHORT WRITE_BOOT POKE_SINGLE: MOV AX,[SI+13] ; Poke number of sectors to load into boot. MOV WORD PTR [B1POKE_SECTOR+1],AX MOV AL,[SI+11] ; Poke STARTSECTOR into boot sector. INC AL ; First sector on a track is 1, not 0. MOV BYTE PTR [B1POKE_FIRSECT+1],AL MOV AL,[SI] ; Poke sectors/track two places into boot. MOV BYTE PTR [B1POKE_MAXSECT_1+2],AL MOV BYTE PTR [B1POKE_MAXSECT_2+2],AL MOV AX,[SI+15] ; Poke sector size into boot sector. MOV WORD PTR [B1POKE_SECSIZE+2],AX MOV BX,OFFSET BOOT1SIDED WRITE_BOOT: CALL HEADUNLOAD MOV CX,RETRY WRT1: PUSH CX  MOV AL,[DRIVE] ; Which drive to write the boot to. PUSH BX PUSH AX MOV AH,GET_DPB MOV DL,AL INC DL INT 21H  ; Force a media check. Set density PUSH CS POP DS POP AX POP BX MOV CX,1 ; One sector. MOV DX,0 ; Write sector number 0. INT 38 ; Call I/O system to write boot sector. POP DX POP CX JNC WTRET LOOP WRT1 MOV DX,OFFSET BOOT_ERROR ; Error message in case it didn't work. JMP MESSAGE WTRET: IF SCP AND (SMALL OR COMBIN) CALL TABLE CALL DRIVESELECT AND AL,SMALLBIT ; Is it small drive JZ WTRET1 MOV BX,OFFSET SMALLDATA MOV AL,[SI+10] MOV [BX],AL ; Put fatid  MOV CX,1 MOV DX,1 MOV AL,[DRIVE] INT 38 ; Write Fatid byte POP DX ; Restore flags WTRET1: ENDIF BOOTRET: ; Calculate the number of sectors and buffer size here for bad sector ; checking. Initialize the memory parameters. TEST HARDFLAG,0FFH JNZ BOOT0 CALL RESTORE BOOT0: CALL TABLE MOV AL,[SI] CBW MOV CX,[SI+1] ; # of tracks on disk TEST HARDFLAG,0FFH ; Hard disk has 2 bytes for this parameter JNZ BOOT2 MOV CH,0 BOOT2: MUL CX ; Calculate # of sectors on disk  MOV [SCCNT],AX ; Save MOV AX,[SI+15] ; Sector size MOV [SECSZ],AX MOV [SCTN],30 ; Start with 30 sectors to try BOOT1: MOV AX,[SECSZ] MOV CL,[SCTN] ; #of sectors to read MOV CH,0 MUL CX ; Test for maximum reads CMP AX,4096 ; Don't make b* uffer any bigger JBE BOOTRET1 DEC [SCTN] JMP BOOT1 ; Keep calculating until 4k or smaller BOOTRET1: MOV [SCTN],CL ; This is the number of sectors to read MOV DL,[DRIVE] INC DL MOV AH,50 INT 21H ; Get DPB MOV AL,[BX+0FH]  ; Get size of fat in sectors MOV AH,[BX+8] ; Get number of fats MOV DX,[BX+6] ; First sector of fat MOV BX,[BX+0BH] ; First sector of data PUSH CS POP DS MOV [STARTSECTOR],BX MOV [STRT],BX MOV CX,[SCCNT] SUB CX,BX MOV [SCCNT],CX ; Calculate true remaining sectors MOV  [FATCNT],AH MOV [FATSTART],DX XOR AH,AH MOV [FATSIZE],AX TEST [SWITCHMAP],C_BIT JZ BOOTEXIT MOV CX,RETRY RET2: PUSH CX MOV CX,1 MOV DX,0 MOV BX,OFFSET PATTERN MOV AL,[DRIVE] INT 25H POP DX POP CX JNC BOOTEXIT LOOP RET2 BOOTEXIT: MOV DX,OFFSET BDSCT_MSG CALL MESSAGE CLC RET SMALLDATA: DB 0 DB 0FFH DB 0FFH ERROR: CALL HEADUNLOAD MESSAGE: MOV AH,9 ; Function 9, print string. INT 33 STC RET  INCTRK: PUSH DX PUSH AX PUSH SI MOV DX,BX CALL MESSAGE MOV SI,OFFSET CODE:TKCNT INC WORD PTR [SI] MOV AX,[SI] INC SI INC SI CMP AL,10 JB C2 ADD AH,1 C2: AAM CMP AH,10 JB C1 MOV AX,0 MOV SI,OFFSET CODE:TKCNT MOV [SI],AX INC SI INC SI INC BYTE PTR [SI] C1: CMP BYTE PTR [SI],0 ;Is 100's unit clear ? JZ C3 ; If so,don't print PUSH AX MOV DL,[SI] ADD DL,30H CALL CONOUT POP AX C3: ADD AL,30H ADD AH,30H PUSH AX MOV DL,AH CALL CONOUT POP AX  MOV DL,AL PUSH AX CALL CONOUT POP AX MOV DL,13 CALL CONOUT POP SI POP AX POP DX RET CONOUT: MOV AH,2 INT 21H RET ;------------------------------------------------------------ IF HARD ;Initialize Winchester disk using Morrow HDC-DMA controller IF SCRIBE NHEADS EQU 4 ; Number of heads NSECT EQU 8 ; Number of sectors per track NTRACKS EQU 480 ; Number of cylinders LCTRK EQU 0 ; First track of low write current PRECOMP EQU 0 ; First track to set precomp bit ENDIF IF IMI NHEADS EQU 6 ; Number of heads NSECT EQU 8 ; Number of sectors per track NTRACKS EQU 306 ; Number of cylinders LCTRK EQU 0 ; First track of low write current PRECOMP EQU 256 ; First track to set precomp bit ENDIF ;Controller parameters RESET EQU 54H STRTHDC EQU 55H STATBYT EQU 12 NEXTAD EQU 13 HDFORMAT: MOV DL,10 CALL CONOUT MOV DL,13 CALL CONOUT MOV DX,OFFSET HDISK_MSG CALL MESSAGE MOV AH,1 INT 21H ; Console input CMP AL,'Y' ; Accept a yes only JZ HFMT2 JMP HDFORMAT HFMT2: MOV DL,10 CALL CONOUT MOV DL,13 CALL CONOUT TEST [SWITCHMAP],C_BIT JZ BEGIN JMP BOOTRET BEGIN: MOV DX,OFFSET FRMT_MSG CALL MESSAGE MOV WORD PTR [TKCNT],0 MOV BYTE PTR [TKCNT+2],0 OUT RESET,AL ;Reset the HDC XOR AX,AX MOV ES,AX MOV DI,50H ;First pointer is at 0:50H MOV DX,OFFSET CODE:LOADCONS CALL SETADDR ;Set initial pointer to LOADCONS PUSH DS POP ES MOV DX,OFFSET CODE:HRESTORE MOV DI,OFFSET CODE:LOADCONS+NEXTAD CALL SETADDR ;Set chain pointer to RESTORE MOV SI,OFFSET CODE:LOAD+ CONS+STATBYT CALL DOCOM ;Execute LOADCONS MOV DX,OFFSET CODE:FORMAT MOV DI,OFFSET CODE:HRESTORE+NEXTAD CALL SETADDR ;Set chain pointer to FORMAT MOV DI,OFFSET CODE:FORMAT+NEXTAD CALL SETADDR ;Set FORMAT to loop to itself MOV SI,OFFSET CODE:HRESTORE+STATBYT CALL DOCOM ;Execute RESTORE MOV DX,OFFSET CODE:FORMATDATA MOV DI,OFFSET CODE:FORMATDMA CALL SETADDR NEWCYL: MOV BL,0 ;Initial head number FORMATLOOP: MOV CX,NSECT MOV SI,OFFSET CODE:FORMATDATA+2;Point to head field SETHEAD: MOV [SI],BL ADD SI,4 LOOP SETHEAD MOV AL,BL SHL AL,1 SHL AL,1 NOT AL AND AL,1CH CMP [FORMATDATA],PRECOMP ; Precomp track? JB STHD1 OR AL,80H ;Turn it on STHD1: CMP [FORMATDATA],LCTRK ;Are we at low current track? JAE LOWCUR OR AL,40H ;If not, turn off low write current LOWCUR: MOV BYTE PTR [HEADSEL],AL MOV SI,OFFSET CODE:FORMAT+STATBYT CALL DOCOM ;Format the track MOV [FORMAT+1],0 ;Zero step count (if any) INC BL CMP BL,NHEADS ;Completed the cylinder? JNZ FORMATLOOP MOV [FORMAT+1],1 ;Step in to next track MOV SI,OFFSET CODE:FORMATDATA MOV AX,[SI] ;Get current track number INC AX MOV CX,NSECT SETTRK: MOV [SI],AX ADD SI,4 LOOP SETTRK PUSH AX PUSH DX PUSH BX MOV BX,OFFSET TRK_MSG CALL INCTRK POP BX POP DX POP AX CMP AX,NTRACKS ;All done? JNZ NEWCYL MOV DL,10 MOV AH,2 INT 21H ; Output a linefeed JMP BOOTRET DOCOM: MOV BYTE PTR [SI],0 ;Zero status byte OUT STRTHDC,AL ;Start up HDC HWAIT: TEST BYTE PTR [SI],-1 ;Loop until completion JZ HWAIT  RET SETADDR: MOV AX,DS ;Get current segment XOR CX,CX SHL AX,1 ;Convert to 20-bit number RCL CX,1 SHL AX,1 RCL CX,1 SHL AX,1 RCL CX,1 SHL AX,1 RCL CX,1 ADD AX,DX ;Add in offset STOSW XCHG AX,CX ADC AL,0 ;Ripple the carry STOSB RET LOADCONS: DB 0 DW 0 DB 0DCH DB 0,0,0 DB 0,1EH,0,7 ;Set up slow stepping DB 4 ;Load constants DB 0 ;status DB 0,0,0 ;Next address HRESTORE: DB 10H ;Step out DW 0FFFH ;Maximum number of cylinders DB 0DCH DB 0,0,0 DB 0,0,0,0 DB 6 ;No-op DB 0 ;status  DB 0,0,0 ;Next address FORMAT: DB 0 ;Step in DW 0 HEADSEL: DB 0DCH FORMATDMA: DB 0,0,0 ;DMA address (filled in later) DB 24 ;Gap 3 DB -NSECT-1 ;Complement of number of sectors DB 0F8H ;Sector Size code (1024 bytes) DB 0 ;Fill byte DB 3 ;Format opcode DB 0 ;Status DB 0,0,0 ;Next address FORMATDATA: ;CYL, cyl-H, head, sector for nine sectors DB 0,0,0,1 DB 0,0,0,2 DB 0,0,0,3 DB 0,0,0,4 DB 0,0,0,5 DB 0,0,0,6  DB 0,0,0,7 DB 0,0,0,8 DB 0,0,0,9 ENDIF ;---------------------------------------------------------- BADSECTOR: MOV AL,DRIVE MOV CL,[SCTN] MOV CH,0 MOV DX,[STRT] CMP [SCCNT],0 JZ BDRET MOV BX,OFFSET PATTERN ; Set up read buffer PUSH CX PUSH DX INT 25H ; Read sectors POP BP POP DX POP CX JC BDRPT ; Report bad sector MOV AL,SCTN CBW ADD [STRT],AX ; Increment sector start SUB [SCCNT],AX MOV CX,[SCCNT] MOV AL,SCTN CBW CMP AX,CX ; Test fo, r last few sectors JB BADSECTOR MOV SCTN,CL ; Reset sector count to final sectors JMP BADSECTOR BDRPT: MOV BX,[STRT]  MOV AL,[SCTN] CBW SUB AX,CX ; Find out how sectors were read ADD BX,AX ; Set up first bad sector INC AX ADD [STRT],AX SUB [SCCNT],AX MOV AX,1 CLC RET BDRET: CALL HEADUNLOAD MOV AX,0 CLC RET ;------------------------------------------------------------------ WRTFAT: MOV AL,[FATCNT] MOV [CURCNT],AL ;SET UP FAT COUNT MOV AX,[FATSTART] MOV [CNT],AX FATLOOP: MOV AL,DRIVE CBW MOV CX,[FATSIZE] MOV DX,[CNT] MOV BX,[FATSPACE] INT 26H POP AX JC GORET MOV CX,[FATSIZE] ADD [CNT],CX DEC BYTE PTR [CURCNT] JNZ FATLOOP CLC  ;Good return GORET: CALL HEADUNLOAD RET DONE: CALL HEADUNLOAD CLC ; No errors. RET DATATABLE: DB 16 ; Number of sectors/track 5.25-inch SD/SS. DB 40 ; Number of tracks/disk 5.25-inch SD/SS format. DW 11 ; Beginning of pattern to first ID mark. DW 186 ; Number of bytes/sector in pattern. DW OFFSET SSINDEX ; Address of index pattern 5.25-inch SD/SS. DW OFFSET SSSECTOR ; Address of sector pattern 5.25-inch SD/SS. DB 0FEH ; FATID byte for 5.25-inch SD/SS format. DW 1+4+4+17 ; STARTSECTOR for 5.25-inch SD/SS format. DW 256 ; Number of sectors boot sector should load. DW 128 ; Bytes/sector. DB 8 ; 5.25-inch DD/SS format. DB 40 DW 162 DW 652 DW OFFSET SDINDEX DW OFFSET SDSECTOR DB 0FEH DW 1+1+1+4 DW 64 DW 512 DB 8 ; 5.25-inch DD/DS format. DB 40 DW 162 DW 652 DW OFFSET SDINDEX DW OFFSET SDSECTOR DB 0FFH DW 1+1+1+7 DW 64 DW 512 DB 26 ; 8-inch SD/SS format. DB 77 DW 80 DW 186 DW OFFSET LSINDEX DW OFFSET LSSECTOR DB 0FEH DW 1+6+6+17 DW 256 DW 128 DB 8 ; 8-inch DD/SS format. DB 77 DW 162 DW 1138 DW OFFSET LDINDEX DW OFFSET LDSECTOR DB 0FFH DW 1+1+1+3 DW 32 DW 1024 DB 8 ; 8-inch DD/DS format. DB 77 DW 162 DW 1138 DW OFFSET LDINDEX DW OFFSET LDSECTOR DB 0FEH DW 1+2+2+6 DW 32 DW 1024  IF HARD DB NSECT ; Hard disk format DW NTRACKS DB ? DW ? DW ? DW ? DB 0FFH DW ? DW ? DW 1024 ENDIF LDINDEX: ; Pattern for 8-inch double-density. DB 80,4EH DB 12,0 DB 3,0F6H DB 1,0FCH DB 50,4EH LDSECTOR: DB 12,0 DB 3,0F5H DB 1,0FEH DB 3,0 ; Track, side, and sector DB 1,3 ; Sector size=1024 DB 1,0F7H DB 22,4EH DB 12,0 DB 3,0F5H DB 1,0FBH DB 255,0E5H DB 255,0E5H DB 255,0E5H DB 255,0E5H DB 4,0E5H DB 1,0F7H DB 54,4EH DB 0 DB 255,4EH DB 255,4EH DB 255,4EH DB 0 LSINDEX: ; Pattern for 8-inch single-density. DB 40,-1 DB 6,0 DB 1,0FCH DB 26,-1 LSSECTOR: DB 6,0 DB 1,0FEH DB 4,0 DB 1,0F7H DB 11,-1 DB 6,0 DB 1,0FBH DB 128,0E5H DB 1,0F7H DB 27,-1 DB 0 DB 255,-1 DB 255,-1 DB 0 SDINDEX: ; Pattern for 5.25-inch double-density. DB 80,4EH DB 12,0 DB 3,0F6H DB 1,0FCH DB 50,4EH SDSECTOR: DB 12,0 DB 3,0F5H DB 1,0FEH DB 3,0 ; Track, side, and sector. DB 1,2 ; Sector size = - 512. DB 1,0F7H DB 22,4EH DB 12,0 DB 3,0F5H DB 1,0FBH DB 255,0E5H DB 255,0E5H DB 2,0E5H DB 1,0F7H DB 80,4EH  DB 0 DB 255,4EH DB 255,4EH DB 255,4EH DB 255,4EH DB 255,4EH DB 255,4EH DB 0 SSINDEX: ; Pattern for 5.25-inch single-density. DB 4,-1 ; No index mark. SSSECTOR: DB 6,0 DB 1,0FEH DB 4,0 DB 1,0F7H DB 11,-1 DB 6,0 DB 1,0FBH DB 128,0E5H DB 1,0F7H DB 27,-1 DB 0 DB 255,0 DB 255,0 DB 255,0 DB 255,0 DB 0 .SALL BYTELST MACRO INITVAL,COUNT,INC LOCAL X X = INITVAL REPT COUNT DB X X = X+INC ENDM ENDM DRVTAB LABEL BYTE IF SCP BYTELST 0,LDRVMAX,1 BYTELST 10H,SDRVMAX,1 ENDIF IF TARBELL BYTELST 0,LDRVMAX,10H ENDIF ; Error messages. ; READ_ERROR DB "Read Error - can't determine density",13,10,'$' SEEK_ERROR DB 'Seek Error - disk not ready',13,10,'$' WRITE_ERROR DB 'Write Error - not ready, write protect, ' DB 'write fault, or lost data',13,10,'$' BOOT_ERROR DB 'Error writing boot sector',13,10,'$' FRMT_MSG DB 'Formatting',13,10,'$' TRK_MSG DB 'Cylinder : $' BDSCT_MSG DB 'Testing for bad sectors',13,10,'$' HDISK_MSG DB 'Are you sure you want to format this hard disk ? $' FATSIZE DW ? FATSTART DW ? CNT DW ? STARTSECTOR DW ?  SPC DB ? ;SECTORS PER CLUSTER FATCNT DB ? ;NUMBER OF FATS ON THIS DRIVE CURCNT DB ? DSKSIZE DW ? ;NUMBER OF SECTORS ON THE DRIVE STRT DW 0 ;CURRENT TEST SECTOR SCCNT DW 0 ; # of sectors on disk SCTN DB 0 ; # of sectors to read SECSZ DW 0 ; Sector size SIDE DB 0 TKCNT DW 0 DB 0 SWITCHLIST DB 7,'12CDOVS' FATID DB 0 FIRSTFLAG DB 1 HARDFLAG DB 0 FATSPACE DW BUFFER FREESPACE DW FREE ; ; Boot sectors, one for single-sided boot, a second for double-sided boot. ; Both have various variables such as STARTSECTOR and number of sectors to ; load poked in before the boot sector is written to the disk. The boot ; sectors should be ORGed at 200 hex, but since all jumps and calls are ; reletive, it doesn't matter that it is ORGed at a random location. ; BOOT1SIDED: CLI ; Interrupts off. XOR AX,AX MOV DS,AX MOV ES,AX MOV SS,AX MOV SP,BOOTER ; For debugging purposes. CLD ; a.k.a. "UP" MOV DI,BIOSSEG*16 B1POKE_SECTOR: MOV CX,0 ; CX = number of sectors/track. B1POKE_FIRSECT: MOV BL,0 ; BL = first sector to load. B1SECT: MOV AL,0D0H ; Force Interrupt command. OUT DISK,AL ; To force Type I status AAM ; Give force interrupt time. AAM AAM AAM B1SEEKLP: B1POKE_MAXSECT_1: CMP BL,0  ; Compare with number of sectors/track. JBE B1NOSTEP MOV AL,58H ; Step in with update. CALL B1DCOM B1POKE_MAXSECT_2: SUB BL,0 ; Subtract number of sectors/track. JMP SHORT B1SEEKLP B1NOSTEP: MOV AL,BL ; Get sector number. OUT DISK+2,AL ; Output sector number to disk controller. MOV DX,DISK+3 ; Disk controller data port. PUSH DI MOV AL,88H ; Read Sector command. OUT DISK,AL JMP SHORT B1READ B1READLOOP: STOSB ; Put in memory. B1READ: IF TARBELL IN AL,DISK+4 ROL AL,1 IN AL,DX ; Read data from disk controller chip. JC B1READLOOP ENDIF IF SCP IN AL,DISK+5 ; Input from auto-wait port. ROR AL,1 IN AL,DX ; Read data from disk controller chip. JNC B1READLOOP ENDIF POP DI CALL B1STAT AND AL,9CH.  JNZ B1SECT B1POKE_SECSIZE: ADD DI,128 ; Add sector size to load next sector. INC BL LOOP B1SECT JMP BIOS B1DCOM: OUT DISK,AL AAM B1STAT: IN AL,DISK+4 TEST AL,DONEBIT IF TARBELL JNZ B1STAT ENDIF IF SCP JZ B1STAT ENDIF IN AL,DISK RET BOOT2SIDED: CLI ; Interrupts off. XOR AX,AX MOV DS,AX MOV ES,AX MOV SS,AX MOV SP,BOOTER ; For debugging purposes. CLD ; a.k.a. "UP" MOV DI,BIOSSEG*16 B2POKE_SECTOR: MOV CX,0 ; CX = number of sectors/track.  B2POKE_FIRSECT: MOV BL,0 ; BL = first sector to load. B2SECT: MOV AL,0D0H ; Force Interrupt command. OUT DISK,AL ; To force Type I status AAM ; Give force interrupt time. AAM AAM AAM B2SEEKLP: B2POKE_MAXSECT_1: CMP BL,0 ; Compare with number of sectors/track. JBE B2NOSTEP MOV AL,58H ; Step in with update. CALL B2DCOM B2POKE_MAXSECT_2: SUB BL,0 ; Subtract number of sectors/track. JMP SHORT B2SEEKLP B2NOSTEP: MOV AL,BL ; Get sector number. MOV AH,0 ; Assume side 0. B2POKE_HALFSECT_1: CMP AL,0 ; Find out which sector and side to use. JBE B2SIDE B2POKE_HALFSECT_2: SUB AL,0 ; Compute sector number for back side. MOV AH,BACKBIT ; Side 1 bit. B2SIDE: OUT DISK+2,AL ; Output sector number to disk controller. MOV AL,AH ; Get side-select byte. B2POKE_DRIVESELECT: OR AL,0 ; Add the rest of the drive-select bits. OUT DISK+4,AL ; And send the mess out. MOV DX,DISK+3 ; Disk controller data port. PUSH DI MOV AL,88H ; Read Sector command. OUT DISK,AL JMP SHORT B2READ B2READLOOP: STOSB ; Put in memory. B2READ: IF TARBELL IN AL,DISK+4 ; Input from auto-wait port. ROL AL,1 IN AL,DX ; Read data from disk controller chip. JC B2READLOOP ENDIF IF SCP IN AL,DISK+5 ; Input from auto-wait port. ROR AL,1 IN AL,DX ; Read data from disk controller chip. JNC B2READLOOP ENDIF POP DI CALL B2STAT AND AL,9CH JNZ B2SECT B2POKE_SECSIZE: ADD DI,128 ; Add sector size to load next sector. INC BL LOOP B2SECT JMP BIOS B2DCOM: OUT DISK,AL AAM B2STAT: IN AL,DISK+4 TEST AL,DONEBIT IF TARBELL JNZ B2STAT ENDIF IF SCP JZ B2STAT ENDIF IN AL,DISK RET PATTERN LABEL BYTE BUFFER EQU PATTERN+12*1024 FREE EQU BUFFER+6*1024 CODE ENDS END } Q `5ï }0}ÿ €€ ¸°€ååå;Console I/O for MS-DOS 2.0 INCLUDE IODEF.ASM IO GROUP CODE,INITSEG INITSEG SEGMENT BYTE PUBLIC 'IOSYS' ASSUME CS:IO, DS:IO IF INTINP ; SS and BP are zero CLI ; Set up keyboard interrupt vector. MOV WORD PTR [BP+64H],OFFSET IO:KBINT MOV [BP+66H],CS STI ELSE MOV AL,0FFH OUT BASE+3,AL ; Mask all interrupts ENDIF ;Set up vector 29H for fast console output MOV WORD PTR [BP+0A4H],OFFSET IO:CON$INT MOV [BP+0A6H],CS INITSEG ENDS CODE SEGMENT BYTE PUBLIC 'IOSY/ S' ASSUME CS:IO, DS:IO PUBLIC CONTBL,RDNDEXIT EXTRN EXIT:NEAR, CMDERR:NEAR, BUS$EXIT:NEAR, PTRSAV:DWORD ; Command table CONTBL: DW EXIT ; Init DW EXIT DW EXIT DW CMDERR DW CON$READ DW CON$RDND DW EXIT DW CON$FLSH DW CON$WRIT DW CON$WRIT DW CON$WRST ; Console keyboard interrupt handler. KBINT PROC FAR PUSH AX PUSH SI MOV AL,20H ;End of Interrupt command OUT BASE+2,AL ;Send to slave IN AL,DATA ;Get the character AND AL,7FH CMP AL,"C"-"@" JZ FLSH CMP AL,"S"-"@" JZ FLSH CMP AL,"F"-"@" JNZ SAVKY FLSH: CALL FLUSH ; Call I/O system keyboard buffer flush. SAVKY:  MOV SI,CS:[REAR] ;Pointer to rear of queue CALL INCQ CMP SI,CS:[FRONT] ;Any room in queue? JZ QFULL MOV CS:[SI],AL ;Put character in queue MOV CS:[REAR],SI ;Save pointer LEAVINT: POP SI POP AX IRET KBINT ENDP QFULL: MOV AL,7 ; BELL character. CALL OUTCHR ; Call I/O system console output function. JMP SHORT LEAVINT BUSEXIT:JMP BUS$EXIT CON$RDND: CALL CSTATUS JZ BUSEXIT RDNDEXIT: LES DI,[PTRSAV] MOV ES:[DI.MEDIA],AL JMP EXIT CSTATUS: IF INTINP-1 IN AL,STAT AND AL,DAV JZ REPEAT PUSHF ;Look like an INT CALL KBINT REPEAT: ENDIF PUSH SI CLI ; Disable interrupts while checking queue. MOV SI,[FRONT] CMP SI,[REAR] ; Anything in queue? JZ NOCHR ; Jump if nothing in queue. CALL INCQ  LODSB ;Get character (if there is one) OR SI,SI NOCHR: STI POP SI RET CON$READ: CALL INP STOSB LOOP CON$READ JMP EXIT INP: CALL CSTATUS ; Get I/O system console input status. JZ INP PUSH SI CLI ; Disable interrupts while changing queue pointers. MOV SI,[FRONT] CALL INCQ ; Permanently remove char from queue MOV [FRONT],SI STI POP SI RET CON$FLSH: CALL FLUSH JMP EXIT FLUSH: CLI MOV CS:[REAR],OFFSET IO:QUEUE MOV CS:[FRONT],OFFSET IO:QUEUE STI RET INCQ: INC SI CMP SI,OFFSET IO:ENDQ ;Exceeded length of queue? JB RET1 MOV SI,OFFSET IO:QUEUE RET1: RET FRONT DW OFFSET IO:QUEUE REAR DW OFFSET IO:QUEUE QUEUE DB QSIZE DUP(?) ENDQ LABEL BYTE ; ************ Console Output ************ CON$WRST: IN AL,STAT AND AL,TBMT JZ BUS$EXITV JMP EXIT BUS$EXITV: JMP BUS$EXIT CON$INT: STI ;INTS back on PUSH AX PUSH CX PUSH DX PUSH DI PUSH DS PUSH CS POP DS CALL CONOUT POP DS POP DI POP DX POP CX  POP AX IRET CON$WRIT: MOV SI,DI CONOUTLP: LODS BYTE PTR ES:[SI] PUSH CX CALL CONOUT POP CX LOOP CONOUTLP JMP EXIT ESC EQU 1BH STATE DW ST1 PRMPNT DW PARMS PARMS DB 0,0,0,0,0,0,0 LASTPRM DB 0 BUFF DB 0,0,0,0,0,0,0,0,0,0 ; Cursor control table CMDTABL DB 'A' ;Cursor up DW CUU DB 'B' ;Cursor down DW CUD DB 'C' ;Cursor forward DW CUF DB 'D' ;Cursor backward DW CUB DB 'H' ;Cursor position DW CUP DB 'J' ;Erase display DW ED DB 'K' ;Erase line DW EL DB 'f' ;Cursor position DW CUP DB 'm' ;Exit/Enter reverse video mode DW SGR DB 's' ;Save cursor position DW PSCP DB 'u' ;Set cursor to saved position DW PRCP DB 00 CONOUT: MOV DI,OFFSET IO:STATE JMP WORD PTR [DI] ;JUMP TO THE CURRENT ANSI STATE ST1: CMP AL,ESC JNZ OUTCHR MOV WORD PTR [DI],OFFSET IO:ST2 RET OUTCHR: PUSH AX OUTLP: I0 N AL,STAT AND AL,TBMT JZ OUTLP POP AX OUT DATA,AL MOV [STATE],OFFSET IO:ST1 RET SENDESC: PUSH AX MOV AL,ESC  CALL OUTCHR JMP OUTLP ST2: CMP AL,'[' JNZ SENDESC MOV BX,OFFSET IO:PARMS MOV [BX],BYTE PTR 31H MOV WORD PTR [PRMPNT],BX MOV IO:[STATE],OFFSET IO:ST3 RET ST3: CMP AL,';' JNZ ST3A INC WORD PTR [PRMPNT] RET ST3A: CMP AL,'0' JB ST3B CMP AL,'9' JA ST3B PUSH DI MOV DI,[PRMPNT] MOV [DI],AL POP DI RET ST4: PUSH AX MOV AL,ESC CALL OUTCHR  MOV AL,'[' CALL OUTCHR JMP OUTLP ST3B: MOV DI,OFFSET IO:CMDTABL-3 ST3C: ADD DI,3 CMP BYTE PTR [DI],0 JZ ST4 ;Output characters in buffer CMP AL,[DI] JNZ ST3C INC DI ;Point to translate characters MOV BX,WORD PTR [DI] MOV SI,OFFSET IO:BUFF ;Set up temp buffer MOV CX,1 ;Set counter to at least 1 time MOV DL,0 ;Set # of characters TLOOP: MOV AL,[BX] ;Fetch xlate char CMP AL,0 JZ TEXIT ;End of characters TEST AL,80H ;Test for special character JZ NEXTCHR CMP AL,0F1H ;Is it 1st parm JNZ SCHR MOV AL,IO:[PARMS] ;Fetch it JMP NEXTCHR SCHR: CMP AL,0F2H ;Is it 2nd parm JNZ TCHR MOV AL,IO:[PARMS+1] JMP NEXTCHR TCHR: CMP AL,0FEH ;Use special driver ? JZ TDRIV CMP AL,0FFH ;Is it count char  JNZ NEXTCHR MOV CL,IO:[PARMS] CMP CL,31H JAE TCHR1 MOV CL,31H TCHR1: SUB CL,30H INC BX JMP TLOOP NEXTCHR: MOV [SI],AL ;Put to buffer INC SI ;Temp buffer INC BX ;Xlate table INC DL ;# of char in BUFF JMP TLOOP ;Get next character TEXIT: ;All charcters are fetched MOV SI,OFFSET IO:BUFF MOV DH,DL ;Save # of char TEXITL: MOV AL,[SI] CALL OUTCHR INC SI DEC DH JNZ TEXITL ;Output until empty DEC CL ;Do CX count JNZ TEXIT RET TDRIV: ;User defined driver for SGR CMP WORD PTR [DI],OFFSET IO:SGR JZ DRIVOUT MOV AL,0 ;Dummy char JMP OUTCHR DRIVOUT: MOV BX,OFFSET IO:PARMS CMP BYTE PTR [BX],37H ;Is it enter mode JZ SGRN MOV AL,'q' ;Heath exit video mode JMP SENDESC SGRN: MOV AL,'p' JMP SENDESC ;Heath enter video mode ; ; Cursor controls translation table. This table below contains that ; actual ASCII code sequences used by your terminal to perform basic ; cursor control commands. MS-DOS 2.0 normally expects to see ANSI ; standard sequences for these commands, however this table is set ; up so that the user can re-define the ASCII codes for his specific ; terminal. The table has some specifiers that will tell the code ; to use certain parameters that are passed, such as row or column ; number, or the number of moves. ; ; Specifer action ; 0F1H Use parameter #1 here (the row or line #) ; 0F2H Use parameter #2 here (the column #) ; 0FEH Use special driver routine (User defined) ; 0FFH Use parameter #1 as a count ; 00H end of code ; ESC Outputs the 'esc' character HEATH: CUP: DB ESC ;Cursor position  DB 'Y' DB 0F1H DB 0F2H DB 0 CUU: DB ESC ;Cursor up DB 'A' DB 0FFH DB 0 CUD: DB ESC ;Cursor down DB 'B' DB 0FFH DB 0 CUF: DB ESC ;Cursor forward DB 'C' DB 0FFH DB 0 CUB: DB ESC ;Cursor backward DB 'D' DB 0FFH DB 0 ED: DB ESC ;Erase display DB 'E' DB 0 EL: DB ESC ;Erase line DB 'L' DB 0 PSCP: DB ESC ;Save cursor posit1 ion DB 'j' DB 0 PRCP: DB ESC ;Set cursor to saved position DB 'k' DB 0 SGR: DB 0FEH ;User defined driver DB 0  CODE ENDS END ýRšãТŽý‹�ý‹~U"‹~‹M@€>Žý¸t@2äÁ‹~‰E@€>Žý u‹~ÆE$‹~€}<u ‹~‹UB‹~‰U@ë;€>Žýu1‹~‹U‹~U"åå; Auxiliary I/O for MS-DOS 2.0 INCLUDE IODEF.ASM IO GROUP CODE,INITSEG,LASTSEG INITSEG SEGMENT BYTE PUBLIC 'IOSYS' ASSUME CS:IO, DS:IO IF SERIAL MOV CX,4 MOV SI,OFFSET IO:SERTAB SERINIT: LODSB OUT SIOBASE+1,AL OUT SIOBASE+3,AL LOOP SERINIT LODSB ;Baud rate for channel 0 OUT SIOBASE+8,AL LODSB ;Baud rate for channel 1 OUT SIOBASE+9,AL ENDIF INITSEG ENDS LASTSEG SEGMENT BYTE PUBLIC 'IOSYS' IF SERIAL SERTAB DB 0B7H, 77H, 4EH, 37H, PRNBAUD, AUXBAUD ENDIF LASTSEG ENDS CODE SEGMENT BYTE PUBLIC 'IOSYS' ASSUME CS:IO, DS:IO PUBLIC AUXTBL EXTRN EXIT:NEAR, CMDERR:NEAR, BUS$EXIT:NEAR, RDNDEXIT:NEAR AUXTBL: DW EXIT DW EXIT DW EXIT DW CMDERR DW AUX$READ DW AUX$RDND DW EXIT DW AUX$FLSH DW AUX$WRIT DW AUX$WRIT DW AUX$WRST AUX$RDND: CALL AUXISTAT JZ BUS$EXITJ JMP RDNDEXIT AUXISTAT: MOV AL,[AUXCHAR] TEST [AUXBST],1 JNZ RET2 IN AL,AUXSTAT AND AL,DAV JZ RET2 IN AL,AUXDATA MOV [AUXCHAR],AL MOV [AUXBST],1 RET2: RET BUS$EXITJ:JMP BUS$EXIT AUX$READ: CALL AUXIN STOSB LOOP AUX$READ JMP EXIT AUXIN: CALL AUXISTAT  JZ AUXIN AUXFLUSH: MOV [AUXBST],0 RET AUX$FLSH: CALL AUXFLUSH JMP EXIT AUX$WRST: IN AL,AUXSTAT AND AL,TBMT  JZ BUS$EXITJ JMP EXIT AUX$WRIT: MOV SI,DI AUXOUTLP: LODS BYTE PTR ES:[SI] CALL AUXOUT LOOP AUXOUTLP JMP EXIT  AUXOUT: PUSH AX AUXLP: IN AL,AUXSTAT AND AL,TBMT JZ AUXLP POP AX OUT AUXDATA,AL RET AUXCHAR DB 0 AUXBST DB 0 CODE ENDS END SEXIT RDNDEXIT: LES DI,[PTRSAV] MOV ES:[DI.MEDIA],AL JMP EXIT CSTATUS: IF INTINP-1 IN AL,Sååå; Printer I/O for MS-DOS 2.0 INCLUDE IODEF.ASM IO GROUP CODE CODE SEGMENT BYTE PUBLIC 'IOSYS' ASSUME CS:IO, DS:IO  PUBLIC PRNTBL EXTRN EXIT:NEAR, CMDERR:NEAR, BUS$EXIT:NEAR PRNTBL: DW EXIT ;INIT DW EXIT DW EXIT DW CMDERR DW EXIT DW BUS$EXIT DW EXIT DW EXIT DW PRN$WRIT DW PRN$WRIT DW PRN$STAT DW EXIT PRN$STAT: IN AL,PRNSTAT AND AL,TBMT JZ BUS$EXITJ JMP EXIT BUS$EXITJ: JMP BUS$EXIT PRN$WRIT: MOV SI,DI PRNOUTLP: LODS BYTE PTR ES:[SI] CALL PRINT LOOP PRNOUTLP JMP EXIT PRINT: PUSH AX PRINLP: IN AL,PRNSTAT AND AL,TBMT JZ PRINLP POP AX OUT PRNDATA,AL RET CODE ENDS END  AUXTBL: DW EXIT DW EXIT DW EXIT DW CMDERR DW AUX$READ DW AUX$RDND DW EXIT DW AU2 åå; Time & date for MS-DOS 2.0 PAGE 60,132 INCLUDE IODEF.ASM IO GROUP CODE,INITSEG,LASTSEG INITSEG SEGMENT BYTE PUBLIC 'IOSYS' ASSUME CS:IO, DS:IO ; Initialize time-of-day clock. MOV SI,OFFSET IO:STCTAB MOV CX,4 ;Initialize 4 registers CLD INITSTC: LODSB OUT STCCOM,AL ;Select register to initialize LODSB OUT STCDATA,AL LODSB OUT STCDATA,AL LOOP INITSTC INITSEG ENDS LASTSEG SEGMENT BYTE PUBLIC 'IOSYS' STCTAB DB 17H ;Select master mode register DW 84F3H ;Enable time-of-day DB 1 ;Counter 1 mode register DW 0138H DB 2 DW 0038H DB 3 DW 0008H ;Set counter 3 to count days LASTSEG ENDS CODE SEGMENT BYTE PUBLIC 'IOSYS' ASSUME CS:IO, DS:IO PUBLIC TIMTBL EXTRN EXIT:NEAR, CMDERR:NEAR, BUS$EXIT:NEAR TIMTBL: DW EXIT DW EXIT DW EXIT DW CMDERR DW TIM$READ DW BUS$EXIT DW EXIT DW EXIT DW TIM$WRIT DW TIM$WRIT TIM$READ: MOV AL,0A7H ;Save counters 1,2,3 OUT STCCOM,AL MOV AL,0E0H ;Enable data pointer sequencing OUT STCCOM,AL MOV AL,19H ;Select hold 1 / hold cycle OUT STCCOM,AL CALL STCTIME ;Get seconds & 1/100's XCHG AX,DX  CALL STCTIME ;Get hours & minutes XCHG AX,CX IN AL,STCDATA MOV AH,AL IN AL,STCDATA XCHG AL,AH ;Count of days CALL POINTSTAT STOSW MOV AX,CX STOSW MOV AX,DX STOSW JMP EXIT STCTIME: CALL STCBYTE MOV CL,AH STCBYTE: IN AL,STCDATA MOV AH,AL SHR AH,1 SHR AH,1 SHR AH,1 SHR AH,1 AND AL,0FH ;Unpack BCD digits AAD ;Convert to binary MOV AH,AL MOV AL,CL RET TIM$WRIT: MOV DX,ES:[DI] ;Put date in DX MOV AL,0BH ;Select Counter 3 load register OUT STCCOM,AL XCHG AX,DX OUT STCDATA,AL MOV AL,AH OUT STCDATA,AL MOV AL,44H ;Load counter 3 OUT STCCOM,AL CALL LOAD0 ;Put 0 into load registers to condition timer MOV AL,43H ;Load counters 1 & 2 OUT STCCOM,AL MOV CX,ES:[DI+2] MOV DX,ES:[DI+4] CALL LOAD MOV AL,43H OUT STCCOM,AL ;Load counters 1&2 CALL LOAD0 MOV AL,27H ;Arm counters 1,2,3 OUT STCCOM,AL CALL POINTSTAT JMP EXIT LOAD0: XOR CX,CX MOV DX,CX LOAD: MOV AL,09 ;Counter 1 load register CALL OUTDX MOV AL,0AH ;Counter 2 load register MOV DX,CX OUTDX: OUT STCCOM,AL ;Select a load register MOV AL,DL CALL OUTBCD MOV AL,DH OUTBCD: AAM ;Convert binary to unpacked BCD SHL AH,1 SHL AH,1 SHL AH,1 SHL AH,1 OR AL,AH ;Packed BCD OUT STCDATA,AL RET POINTSTAT: PUSH AX MOV AL,1FH ;Point to status register OUT STCCOM,AL ; so power-off glitches won't hurt  POP AX RET CODE ENDS END FSET IO:QUEUE QUEUE DB QSIZE DUP(?) ENDQ LABEL BYTE ; ************ Console Output ***ååå3 ; Hard disk I/O for MS-DOS 2.0 PAGE 60,132 INCLUDE IODEF.ASM IO GROUP CODE CODE SEGMENT BYTE PUBLIC 'IOSYS' ASSUME CS:IO, DS:IO ;---------------------------------------- IF INSTALL HDSKDEV: ;Header for hard disk DD -1 DW 2000H DW STRATEGY DW HDSK$IN DB ? ELSE PUBLIC HDSKTBL EXTRN EXIT:NEAR, CMDERR:NEAR, BUS$EXIT:NEAR, PTRSAV:DWORD ENDIF ;----------------------------------------- HDSKTBL: DW HDSK$INIT DW HARDCHG DW GET$HBPB DW CMDERR DW HARDREAD DW BUS$EXIT DW EXIT DW EXIT DW HARDWRITE DW HARDWRITE ;************************************************************* DIRENT EQU 96 ALLOCSIZ EQU 4 FATSIZ EQU 6 IF IMI NHEADS EQU 6 ; Number of heads NSECT EQU 8 ; Number of sectors per track NTRACKS EQU 306 ; Number of cylinders LOWCURTRK EQU 0 ; First track of low write current PRECOMTRK EQU 256 ; First track to set precomp bit ENDIF IF SCRIBE NHEADS EQU 4 ; Number of heads NSECT EQU 8 ; Number of sectors per track NTRACKS EQU 480 ; Number of cylinders LOWCURTRK EQU 0 ; First track of low write current PRECOMTRK EQU 0 ; First track to set precomp bit ENDIF RESETHDC EQU 54H STARTHDC EQU 55H HARDRDOP EQU 0 HARDWROP EQU 1 RETRY EQU 3 ; # of times to try disk command TIMEOUT EQU 10 ; 0.2 sec/loop--set 2 seconds for 10 MHZ CPU HDCPARAM: HDIR DB 0 ; Direction HSTEP DW 1 ; Amount to step HDRIVE DB 0DCH ; Drive/head select DMAAD DW 0 ; DMA address DMAHI DB 0 ARG1: HCYL DW -1 ; Current cylinder HHEAD DB 0 ; Current head HSECT DB 0 ; Current sector OPCODE DB 0 ; Read/write code HSTAT DB 0 ; Return status IF INSTALL NEXTAD DW HDCPARAM ELSE NEXTAD DW HDCPARAM+10H*BIOSSEG ENDIF NEXTADHI DB 0 ;--------------------------------------------- IF INSTALL PTRSAV DD 0 STRATP PROC FAR STRATEGY: MOV WORD PTR CS:[PTRSAV],BX MOV WORD PTR CS:[PTRSAV+2],ES RET STRATP ENDP HDSK$IN: PUSH SI MOV SI,OFFSET IO:HDSKTBL DISPATCH PROC FAR ENTRY: PUSH AX PUSH CX PUSH DX PUSH DI PUSH BP PUSH DS PUSH ES PUSH BX LDS BX,CS:[PTRSAV] ;GET POINTER TO I/O PACKET  MOV AL,[BX.UNIT] ;AL = UNIT CODE MOV AH,[BX.MEDIA] ;AH = MEDIA DESCRIP MOV CX,[BX.COUNT] ;CX = COUNT MOV DX,[BX.START] ;DX = START SECTOR XCHG DI,AX MOV AL,[BX.CMD] XOR AH,AH ADD SI,AX ADD SI,AX CMP AL,11 JA CMDERR XCHG AX,DI LES DI,[BX.TRANS] PUSH CS POP DS CALL [SI] ;GO DO COMMAND LDS BX,CS:[PTRSAV] MOV [BX.STATUS],AX ;MARK OPERATION COMPLETE SUB [BX.COUNT],CX ;Subtract amount transfered POP BX POP ES POP DS POP BP POP DI POP DX POP CX POP AX  POP SI RET ;RESTORE REGS AND RETURN DISPATCH ENDP ; Standard return types EXIT: XOR CX,CX ;Transfer complete  MOV AH,00000001B ;All done RET BUS$EXIT: ;DEVICE BUSY EXIT MOV AH,00000011B RET CMDERR: MOV AL,3 ;UNKNOWN COMMAND ERROR MOV AH,10000001B ;MARK ERROR RETURN RET ENDIF ;--------------------------------------- HARDCHG: LDS BX,[PTRSAV] MOV BYTE PTR [BX.TRANS],1 ;Disk not changed JMP EXIT HARDREAD: MOV OPCODE,HARDRDOP JMP SHORT HARDIO  HARDWRITE: MOV OPCODE,HARDWROP HARDIO: PUSH DS XOR SI,SI MOV BP,[NEXTAD] MOV AL,[NEXTADHI] MOV DS,SI MOV WORD4  PTR [SI+50H],BP MOV BYTE PTR [SI+52H],AL OUT RESETHDC,AL ; Reset hard disk controller POP DS MOV AX,ES SHL AX,1 RCL SI,1 SHL AX,1 RCL SI,1 SHL AX,1 RCL SI,1 SHL AX,1 RCL SI,1 ADD AX,DI MOV DMAAD,AX XCHG AX,SI ADC AL,0 MOV DMAHI,AL CMP HCYL,-1 ; Is current track invalid? JNZ COMPPOS CALL RESTORE ; Home disk head COMPPOS: PUSH DX MOV SI,NSECT ; Sector/track on hard disk XCHG AX,DX XOR DX,DX DIV SI ; AX=track, DX=sector INC DX ; Sector numbers start with 1 MOV HSECT,DL MOV SI,NHEADS XOR DX,DX DIV SI ; AX=cylinder, DX=head MOV HHEAD,DL SHL DL,1 SHL DL,1 NOT DL  AND DL,9CH CMP AX,PRECOMTRK JB SAVHEAD1 OR DL,80H ; Turn on precomp SAVHEAD1: CMP AX,LOWCURTRK ; Need low write current? JAE SAVHEAD OR DL,40H ; Turn off low write current SAVHEAD: MOV HDRIVE,DL ; Drive/head select byte MOV DX,AX XCHG HCYL,AX ; Set current cyl, get previous SUB DX,AX ; Amount to move MOV AL,0 ; Assume movement IN JAE HAVSTEP NEG DX ; Get absolute value MOV AL,10H ; Set movement OUT HAVSTEP: MOV HDIR,AL MOV HSTEP,DX POP DX ; BX,CX,DX have orignal command parameters ; All set for hard disk operation! HARDREADWRITE: MOV AH,RETRY ; Retry count HCOM: CALL HDCCOM  JNZ NOTNEXT ; If not successful, don't bump to next sector ADD DMAAD,1024 ADC DMAHI,0 INC DX MOV AL,HSECT INC AL CMP AL,NSECT+1 ; Stay on this track? MOV HSECT,AL LOOPNZ HARDREADWRITE JCXZ OKRET JMP COMPPOS ; Re-compute everything  OKRET: MOV AH,1 ;No error RET NOTNEXT: CMP AL,1 ; Is drive not ready? JBE HARDERR ; Don't retry if not ready or time out DEC AH JNZ HCOM ; Hard disk error on hard disk. AL has the error code. Convert disk ; error code to MSDOS 2.0 error code HARDERR: MOV HCYL,-1 ; Force restore next time CMP AL,10 ; Is it a reasonable error code? JB NEXT1 MOV AL,0 ; General disk failure NEXT1: MOV BX,OFFSET IO:ERRTAB ; Set DOS error table XLAT MOV AH,81H ; ERROR RET ; CX = number of sectors to go ERRTAB: DB 12 ; General failure DB 2 ; Drive not ready DB 12 DB 12 DB 8 ; Sector not found DB 8 ; Data not found DB 12 ; Data overrun DB 4 ; Data CRC error DB 10 ; Write fault DB 4 ; Header CRC error ;Restore head on hard disk. RESTORE: MOV ARG1+1,30 ; 3 ms step time, no head settle delay MOV AX,7+100H*4 ; 1024 byte sector, LOAD CONSTANTS command XCHG AX,ARG1+3 ; Previous opcode in AH MOV BL,1 CALL QUICKCOM ; Execute command JNZ EXITREST ; Abort if controller failure MOV ARG1+1,0 ; Set to fast step (after restore) MOV HSTEP,0FFFH ; Maximum number of steps  MOV HDIR,10H ; Step out CALL HDCCOM ; Restore and set fast seek MOV HCYL,0 ; Now on track zero EXITREST: MOV OPCODE,AH RET HDCCOM: MOV BL,TIMEOUT QUICKCOM: PUSH CX XOR CX,CX MOV HSTAT,0 OUT STARTHDC,AL HWAIT: MOV AL,HSTAT OR AL,AL LOOPZ HWAIT ; Try for 2 seconds JNZ HRET DEC BL JNZ HWAIT HRET: POP CX MOV HSTEP,0 CMP AL,-1 RET GET$HBPB: ; Set up BPB for Hard disk controller. Real simple isn't it? MOV SI,OFFSET IO:HARDDRIVE ; Hard disk Parm table SETBPB: LDS BX,[PTRSAV] MOV [BX.MEDIA],1 ;One hard disk MOV [BX.COUNT],SI MOV [BX.COUNT+2],CS JMP EXIT ; ***********5 **************************************************************** HINITTAB: DW HARDDRIVE HARDDRIVE: DW 1024 ; Sector size DB ALLOCSIZ ; Allocation unit DW 1 ; Reserved sectors DB 2 DW DIRENT ; Directory entries DW NSECT*NHEADS*NTRACKS DB 1 ; Media descriptor DW FATSIZ ; Number of sectors for 1 Fat BREAK LABEL BYTE ; Break address ;************************************************************** ; Code below this point is thrown away for installable versions HDSK$INIT:  IF INSTALL MOV AX,CS MOV BX,AX MOV CL,4 SHL AX,CL ROL BX,CL AND BL,0FH ADD [NEXTAD],AX ADC [NEXTADHI],BL LDS BX,[PTRSAV] MOV WORD PTR [BX.TRANS],OFFSET IO:BREAK MOV WORD PTR [BX.TRANS+2],CS PUSH CS POP DS ENDIF MOV SI,OFFSET IO:HINITTAB JMP SETBPB CODE ENDS END 8‹~€}<u/‹~‹U@‹~;UBuÿvšqL‹~‹}@~‹Uv2öƒú u‹~ÿE@飋~‹U";Vþré•‹~‹Uååååååååååååååååååå6 åååååååååååååååååååååååååå7 åååååååååååååååååååååååååå8 åååååååååååååååååååååååååå9 åååååååååååååååååååååååååå: åååååååååååååååååååååååååå; åååååååååååååååååååååååååå< åååååååååååååååååååååååååå= åååååååååååååååååååååååååå> åååååååååååååååååååååååååå? åååååååååååååååååååååååååå@ ååååååååååååååååååååååååååA ååååååååååååååååååååååååååB ååååååååååååååååååååååååååC ååååååååååååååååååååååååååD ååååååååååååååååååååååååååE ååååååååååååååååååååååååååF ååååååååååååååååååååååååååG ååååååååååååååååååååååååååH ååååååååååååååååååååååååååI ååååååååååååååååååååååååååJ ååååååååååååååååååååååååååK ååååååååååååååååååååååååååL åååååååååååååååååååååååååå