kU-BAMDUA TK1pŽCPMDIR FL3 [ƒ<MTAB FL3eIá»NSWP COM®\"rNSWPHINTTXT (Ü PROUSARTFL32ðòµRESOURCECOM"O¹ïRESOURCEDOCqÌóREZ80 COM=5üREZ80 DOCr­‡WS33 DOCtï«ôWS33MSG PATc\§ZAP35 COMiRú­ZDT COM»8º ÿ -BAMDUA.TK1 Thió  speciaì  librarù volumå ió Georgå  Borys§  "Hackeró  ¦ � Patchers¢   disk®   Iô  containó  informativå  articleó  oî   thå � directorù structurå oæ CPÍ disks¬ ho÷ tï prograí thå 8251Á  USARÔ � chip¬  thå layouô oæ thå MTA tablå iî thå BIOS¬ anä hintó   oî � usinç  thå  NSWÐ  program® WS33.DOà containó  thå  actuaì  patcè � addresseó  foò WordStaò Ver® 3.3® Alsï containeä oî thió  disë � ió  á copù oæ thå latesô versioî oæ NSWÐ (Vers® 2.07)¬ á  versioî � oæ  thå SuperZað prograí (ZAP35.COM)¬ á versioî oæ DDÔ thaô  useó � Z8°  mnemonicó  anä  twï  disassemblers®   RESOURCE.COÍ  ió  Warä � Christenson'ó  808° disassembleò anä REZ80.COÍ ió á versioî  thaô � useó Z8° TDÌ mnemonics® Bå surå tï reaä thå .DOà files!¡  Ralpè W® Mathisen Dept. of History Univ. of S. Carolina Columbia, S.C.29208 INSIDE THE CP/M DIRECTORY Iî thå October/Novembeò 198µ issuå oæ MOR“ É � discusseä á methoä oæ modifyinç thå dDaså IÉ directorù � iî ordeò tï retrievå datá whicè otherwiså woulä bå � lost® Á similaò methoä alsï caî bå useä foò thå CP/Í � directory¬ whicè ió founä oî everù disë whicè haó CP/Í � fileó oæ anù kinä oî it® Althougè CP/Í useró arå � usuallù unawarå oæ thå functioninç oæ thå directory¬ � itó importancå cannoô bå overemphasized® Onlù bù meanó � oæ thå informatioî ió thió directorù caî CP/Í accesó � thå resô oæ thå datá oî thå disk® Iæ anythinç werå tï � happeî tï thå directory¬ oò iæ iô werå tï havå � incorrecô informatioî iî iô somå oò alì oæ thå files¬ � oò theiò data¬ oî thå disë coulä becomå inaccessible® � Therå arå severaì wayó iî whicè thió kinä oæ disasteò � coulä happen® Sometimeó thå directorù caî bå � accidentalù overwritten¬ perhapó bù á disë drivå � malfunctioî oò bù accidentallù writinç oî thå disë witè � á non-Morro÷ computeò (I'vå haä botè happen)® Or¬ aî � abnormaì terminatioî iî thå midsô oæ á disë writå � operatioî caî prevenô thå directorù froí beinç properlù � updated¬ anä thå datá maù noô bå easù tï recreate¬ � especiallù iæ iô haó jusô beeî reaä iî oveò á modem¬ oò � just entered at the keyboard. Iô ió possiblå tï recoveò froí thió kind oæ error¬ � however¬ bù writinç directlù tï thå directory® Buô iæ � anù changeó arå goinç tï bå madå iî thå CP/Í disë � directory¬ iô ió firsô necessarù tï kno÷ ho÷ iô ió � organized® Unfortunately¬ thå CP/Í 2.² Operatinç � Systeí Useò Referencå Manual“ whicè comeó bundleä witè � thå Morro÷ systeí ió nï helð here® Iô discusseó thå � function“ oæ thå directorù (pp.89-12° iî mù version)¬ � buô iô doeó noô discusó ho÷ thå informatioî iî thå � directorù ió actuallù organized® Á littlå biô oæ � investigation¬ however¬ answers this question. Iô no÷ mighô bå stresseä thaô anù alterationó iî � thå directorù requirå thå uså oæ á utilitù (sucè aó DU-� 77© whicè wilì allo÷ thå useò tï accesó specifiã � groups¬ tracks¬ anä sectoró oî thå disk¬ anä botè tï � reaä froí anä writå upoî them® Becauså thå useò haó � completå controì oveò exactlù whaô bytå valueó arå � written¬ anä exactlù wherå theù arå written¬ thió kinä � oæ utilitù ió noô aó dangerouó aó iô maù sound! Thå µ 1/´ incè single-sideä doublå densitù floppù �Šdiskó contaiî 200Ë byteó oî 4° trackó (numbereä ° � througè 39)¬ oò 5Ë byteó peò track® Thå physicaì � trackó arå divideä intï µ 1024-bytå physicaì "sofô � sectors.¢ Oî mù computer¬ á Morro÷ MÄ ² (ROÍ revisioî � 2.3A)¬ thå firsô twï trackó (0-1© arå reserveä foò thå � CP/Í systemº CP/Í wilì noô normallù writå datá there® � Thå CP/Í system¬ however¬ accesseó thå disë bù logicaì � "sectors¢ anä "groups,¢ ratheò thaî bù physicaì trackó � anä sectors® Iô divideó thå disë intï logicaì � "sectors¢ oæ 12¸ byteó eacè (thå lengtè oæ thå standarä � CP/Í "record")¬ anä logicaì "groups¢ oæ 1¶ logicaì � recordó (thereforå eacè "group¢ containó 12¸ Ø 1¶ ½ � 204¸ oò 2Ë bytes)® Thå 3¸ user-accessiblå physicaì � tracks¬ therefore¬ arå divideä uð intï 9´ logicaì � groupó (188Ë bytes)¬ whicè begiî witè grouð 00¬ whicè � itselæ beginó aô thå beginninç oæ tracë ² (thaô is¬ aô � tracë 2¬ sectoò 1)® Thió explainó whù thå useò cannoô � uså CP/Í tï accesó trackó 0-1¬ foò theù arå "hidden¢ � belo÷ grouð 00® Whicè bringó uó tï thå directoryº iô ió locateä aô � thå beginninç oæ grouð 00¬ thaô ió aô thå beginninç oæ � tracë ² (beaò iî minä thaô thå numberinç oæ thå trackó � anä groupó beginó witè "0,¢ whereaó thaô oæ thå sectoró � beginó witè "1")® Groupó 0° anä 0± arå reserveä foò � thå directory» thå datá beginó witè grouð 0² (physicaì � tracë 2¬ logicaì sectoò 33)® Becauså therå ió nï � obviouó correlatioî betweeî thå logicaì groupó anä thå � physicaì trackó (groupó anä trackó overlap¬ thaô is¬ � somå groupó liå oî twï contiguouó tracks)¬ anä becauså � CP/Í workó witè thå groups¬ thå followinç discussioî � wilì bå writteî froí thå poinô oæ vie÷ oæ thå "groups,¢ � anä thå 128-bytå logicaì sectoró containeä withiî them. Notå too¬ thaô alì referenceó tï "sectors¢ refeò tï thå � 128-byte logical sectors¬ noô tï thå 1024-bytå physicaì � soft sectors. Thå besô waù tï learî tï worë witè thå CP/Í � directorù ió tï bå ablå tï looë righô aô it¬ buô � failinç that¬ thió ió ho÷ thå individuaì entrieó iî thå � ÃP/Í directorù arå seô uð (thió ió ho÷ thå firsô entrù � mighô appeaò wheî printeä bù DU-77): 00 NN NN NN NN NN NN NN NN EE EE EE LL LL LL LL GG GG GG GG GG GG GG GG GG GG GG GG GG GG GG GG Thå firsô bytå iî thå entrù (bytå 00¬ valuå 00© haó thå � valuå 00È iæ thå filå ió active¬ thå valuå E5È iæ thå � filå haó beeî deleted® Thió explainó ho÷ á filå caî bå � "undeleted¢ (presuminç iô haó noô yeô beeî writteî � over)º jusô changå thå Eµ bacë tï á 00® Thå byteó listeä aó "NN¢ (byteó 0± througè 08© � includå thå heø valueó oæ thå namå oæ thå filå (8-�Šcharacteò maximum)¬ anä thå "TT¢ byteó (3-characteò � maximum© contaiî thå heø valueó oæ thå filå extension® � Blankó arå representeä bù heø blankó (20H)¬ anä therå � ió nï perioä betweeî thå namå anä thå extension® � Knowinç thió alsï caî bå useful® Foò CP/Í wilì allo÷ � somå kindó oæ softwarå tï creatå á filå witè lower-caså � letteró iî thå name¬ buô iô wilì noô allo÷ sucè á filå � tï bå accesseä bù á CP/Í routine¬ sucè aó PIÐ oò eveî � REN® Iô caî bå verù frustratinç tï discoveò thaô onå � haó inadvertentlù createä á valuablå filå witè lower-� caså letteró iî thå name¬ anä theî noô bå ablå tï � accesó it® TÏ correcô thå error¬ alì onå neeä dï ió tï � writå thå namå iî uppeò caså directlù tï thå CP/Í � directory. Thå "LL¢ valueó givå thå numbeò oæ CP/Í recordó � (thaô is¬ thå numbeò oæ 128-bytå logicaì sectors© iî � thå file¬ anä arå calculateä aó followsº Thå firsô "LL¢ � (presumablù iî hex¬ buô I'vå neveò haä á filå largå � enougè tï finä out© ió multiplieä bù 128¬ anä ió addeä � tï thå numbeò (giveî iî hex© iî thå fourtè "LL.¢ � Presumably¬ thå seconä anä thirä "LL"ó arå useä foò � verù largå files¬ buô undeò ordinarù circumstanceó � theiò valuå remainó 00H® Thå totaì numbeò oæ byteó oæ � disë storagå useä foò thå filå caî thereforå bå calculateä � by multiplying the sum of the "LL" values by 128. Thå "GG¢ valueó arå thå mosô important¬ foò theù � telì CP/Í whicè groupó thå datá iî anù filå arå storeä � in® Now¬ foò á newly-writteî filå oî á freshly- � formatteä disk¬ thå "GG¢ valueó shoulä reaä 0² 0³ 0´ 0µ � 0¶ anä sï oî (unuseä "GG"ó reaä 00)® Notå thaô everù � grouð thaô containó datá foò thió filå musô bå citeä iî � thå directory¬ anä theså groupó musô bå listeä iî thå � ordeò iî whicè theiò datá appear® Thå groupó neeä not¬ � however¬ bå allocateä bù CP/Í iî sequential¬ oò eveî � ascending¬ order® Thió explainó ho÷ CP/Í caî "find¢ � alì thå partó oæ á file¬ eveî wheî iô ió scattereä alì � oveò thå disk® Iô alsï explainó ho÷ CP/Í knowó whicè � groupó arå availablå foò datá storageº alì oæ thoså � groupó not“ listeä aó containinç datá foò aî activå � file® Notå thaô eacè directorù entrù containó 3² bytes¬ � witè 1¶ oæ theí useä foò thå grouð numbers» iæ á filå � requireó morå thaî 1¶ groups¬ CP/Í merelù writeó � anotheò entrù iî thå directorù foò thió fileº thió � explainó thå "EXT¢ entrù wheî onå doeó á "DIR"¬ foò thå � numbeò herå ió thå numbeò oæ entrieó iî thå directorù � (noô thaô onå eveò haó mucè uså foò it!)® Notå alsï � thaô wheî CP/Í writeó aî additionaì entrù foò á file¬ � onlù thå valueó oæ "LL¢ iî thå final“ entrù arå valid» � thoså iî earlieò entrieó merelù reflecô thå numbeò oæ � CP/M recordó iî thoså entries® Š Thió explanatioî alsï indicateó whù á numbeò oæ � smalì fileó caî eaô uð lotó oæ disë space¬ foò thå � smallesô uniô thaô CP/Í caî allocatå ió onå grouð (2K)¬ � sï á filå oæ eveî onå linå wilì uså uð 2Ë oæ storagå � (dï á DIÒ oæ á disë witè severaì fileó oæ varyinç � lengthº eveî thå smallesô wilì havå 2K¬ anä alì thå � numberó wilì bå even¬ foò CP/Í arriveó aô thå amounô � simplù bù multiplyinç thå numbeò oæ groupó useä foò � storagå bù two). Armeä witè thió knowledge¬ thå adventurouó useò � no÷ caî attacë á mangleä directory® Thå filå namå anä � extensioî caî bå writteî iî easilù enough¬ anä � calculationó wilì yielä thå nunbeò oæ CP/Í records¬ � whicè alsï caî bå entereä (thougè É havå noô founä á � neeä foò greaô accuracù here)® Thå tougè parô caî bå � iî insertinç thå "GG¢ values® Foò COÍ files¬ thió caî � onlù bå donå iæ onå caî reasonablù assumå thaô thå filå � waó storeä iî sequential¬ ascendinç groups® Foò ASCIÉ datá fileó thå tasë ió relativelù � easier® Simplù uså thå DU-7· (oò whatever© searcè � commanä ("=¢ iî DU-77© tï finä thå locatioî oæ thå � beginninç oæ thå fileº notå dowî thå grouð numbeò (iô � wilì bå xx.0°--herå thå sectoò numberó begiî witè � "00"!--¬ foò alì fileó starô aô thå beginninç oæ á � group)¬ anä enteò iô intï thå firsô bytå iî thå second“ � linå oæ thå directorù (aó above)® Theî hopå thaô thå � nexô grouð containó thå nexô sectioî oæ youò datá file» � iæ so¬ enteò thå grouð numbeò iî thå samå way® Iæ not¬ � iô wilì bå necessarù tï pagå bacë tï thå lasô sectoò oæ � thå previouó grouð tï seå wherå thå filå leaveó off¬ � anä theî uså thå searcè commanä tï finä thå nexô part® � Continuå iî thió manneò untiì alì thå groupó containinç � datá foò thió filå havå beeî entereä intï thå � directory® Anä dï not“ forgeô tï writå youò completeä � directorù ontï thå diskº yoõ wilì bå verù frustrateä iæ � yoõ do® Thió procedurå neeä noô bå donå foò everù filå � oî thå disk¬ onlù foò thå mosô importanô ones. Thió methoä alsï caî bå useä foò thoså rarå � occasionó wheî CP/Í recordó datá oî thå wronç � group/trackº tï correcô this¬ onå neeä onlù enteò thå � valuå oæ thå correcô grouð iî thå appropriatå locatioî � iî thå directory® Thió caî bå especiallù usefuì foò � largå fileó wheî thå erroò occuró neaò thå beginninç oæ � thå file. Therå ió alsï anotheò uså foò thió methoä whicè � thå morå adventuresomå readeró mighô wisè tï tryº � rewritinç á directorù oî CP/Í diskó writteî bù non-� Morro÷ computeró (includinç CP/Í 86)¬ buô whicè cannoô � bå reaä usinç IBM.COM¬ OSB.COM¬ oò XER.COM® Firsô oæ � all¬ trù thå DIÒ commanä usinç theså variouó formats® � Iæ yoõ geô á reaä error¬ forgeô it® Buô iæ iô comeó �Šbacë simplù "NOÔ FOUND¢ wheî yoõ kno÷ there'ó somethinç � ouô there¬ you'rå iî business® No÷ trù thå STAÔ *.ª � command® Thió mighô aô leasô lisô thå nameó oæ thå � fileó ouô there® Thå nexô thinç tï dï ió tï � experimentº witè thå disë iî questioî iî thå Bº drive¬ � executå DU-7· (oò whatever© iî thå Aº drivå anä looë � arounä youò disk® Yoõ maù finä (aó É have© thaô thå � directorù waó jusô writteî iî thå wronç place¬ oò thaô � thå wronç numberó werå inserteä foò thå "GG¢ values® � Trù movinç thå directorù around¬ anä everù sï ofteî trù � thå DIÒ commanä again® Whï knows¬ yoõ mighô geô lucky® � Anä iî á pinch¬ yoõ caî alwayó copù thå entirå disk¬ oò � aô leasô relevanô parts¬ sectoò bù sectoò tï á Morro÷ � formatteä disk¬ foò whicè yoõ alsï wilì havå tï creatå � youò owî directorù entry® But¬ again¬ yoõ mighô noô � wanô tï trù thió unlesó yoõ havå nï otheò waù oæ eveò � beinç ablå tï reaä thå foreigî disë undeò itó propeò � format.*** MTAB.TEC *** by Clarence Heier via SBBS mid-March 1986 Also¬  É wilì includå á generaì discussioî oî MTAB®  Perhapó yoõ � coulä  distributå  anä geô feedbacë oî this®  Iæ  suitablå  - gï �Šahead and publish. Thanks, Clarence MTAB.DOC MTAB ANALYSIS Clarence Heier 637 Boston Drive Davenport, IA 52806 Recently¬   É   havå  fieldeä  severaì  questionó  regardinç  thå � modificatioî oæ thå operatinç systeí wheî changinç drives® Therå � havå  beeî  severaì  verù gooä articleó writteî  oî  thå  variouó � conversionó  buô  nonå  describinç  thå  concepô  oæ  MTAB®  Thió � synapsió  ió intendeä tï bå quitå generaì buô dealó  specificallù � witè  aî MD-³ systeí BIOÓ REÖ 3.1¬  ROÍ 2.³ anä thå  MD-²  systeí � BIOÓ REÖ 2.1¬  ROÍ 2.3®  Bå awarå thaô therå arå manù variationó � ouô  therå anä youró maù oò maù noô bå similar®  Iô ió  expecteä � thaô  verù littlå oæ thió informatioî ió oæ valuå tï Harä Disë MÄ � owners. Drivå specificationó arå supplieä tï thå BIOÓ iî á sectioî calleä � MTAB® MTA musô bå modifieä iæ yoõ changå tï á differenô typå oæ � drivå (i.e®  quaä density© oò iæ yoõ wisè tï quieô youò driveó oò � make other modifications. MTA containó onå ¹ bytå entrù foò eacè logicaì drive® Thå byteó � of each entry are defined as follows: Byte 0 DSKDEF0: Bit 0-2 Motor control bit Bit 3-4 Double sided mode: 00=Even tracks on side 0, Odd tracks on side 1. 01=1st 40 (or 80) tracks on side 0, remaining tracks on side 1. 10=Both sides are treated as a single track with twice as many sectors. Bit 5 Double sided drive if = 1. Bit 6 Sectors start a 0 if = 1. Biô · Foreigî drivå formaô iæ ½ 1. Drive A B C C E MD-3 Hex 21   22 21 21 21 MD-3 Bin 00100001 00100010 00100001 00100001 00100001 MD-2 Hex 01 02 01 01 01 MD-2 Bin 00000001 00000010 00000001 00000001 00000001 Thå  significanô  biô herå ió thå thirä onå froí  thå  left®  Iô � indicateó  thaô  yoõ  havå  á doublå sideä  drive®  Iæ  yoõ  arå � changinç youò MD-± oò MD-² tï doublå sideä driveó thió valuå musô � bå  changeä tï á 1®  Usuallù thió wilì changå thå heø valueó  iî � eacè oæ thå driveó froí á ° tï á ² (i.e® 0± becomeó 21). NOTEº  Therå  ió  somå descrepancù betweeî  thå  filå  CBIOS.MAà � supplieä  witè thå MÄ serieó anä thå waù theså byteó arå actuallù � configureä iî thå operatinç system®  Thå MD-² systeí É lookeä  aô �Šhaä  thå 2nä biô (thirä froí right© seô tï ± foò driveó à anä  D® � Logiã woulä makå thió á 0¬ thå samå aó drivå Á anä E® Byte 1 DSKDEF1: Bit 0-1 Physical drive address. Bit 2 Double sided media if = 1. Bit 3-4 Sector size: 00=128 01=256 10=512 11=1024. Bit 5 Tracks: 0=40; 1=80. Bit 6 Density: 0=single; 1=double. Bit 7 Virtual drive: 1=virtual. Drive A B C C E MD-3 Hex DC 5D DC DC DC MD-3 Bin 11011100 01011101 11011100 11011100 11011100 MD-2 Hex D8 59 D8 D8 D8 MD-2 Bin 11011000 01011000 11011000 11011000 11011000 Biô  ²  ió  significanô iæ changinç froí singlå sideä  driveó  tï � doublå  sideä  ones®  Biô µ ió significanô iæ changinç  tï  quaä � densitù drives®  Bitó ° anä ± arå significanô wheî addinç driveó � to your system. Byte 2 Motor on wait time in increments of 4 ms. Drive A B C C E MD-3 Dec 125 125 125 125 125 MD-3 Hex 7D 7D 7D 7D 7D MD-2 Dec 88 88 88 88 88 MD-² Heø 5¸ 5¸ 5¸ 5¸ 58 Usuallù wilì noô havå tï bå changed®  Motoò wilì staù oî 50° ms® � beforå  turninç  ofæ oî aî MD-³ anä 35² mó oî aî MD-2®  É  don'ô � understand why there should be a difference. Byte 3 Head settle time (after seek) in increments of 4 ms. Drive A B C C E MD-3 Hex 04 04 04 04 04 MD-2 Hex 05 05 05 05 05 Currentlù  seô foò 1¶ mó settlå timå foò aî MD-³ anä 2° mó foò aî � MD-2®  Controlleä bù thå driveó specifications® Teaã 55B'ó havå � a 15 ms settling time. Other DSDD drives are similar. Byte 4-5 The two parameter bytes for the FDC specify command: Byte 4 = SRT/HUT Byte 5 = HLT/ND ND must be 1. Byte 4: Drive A B C C E MD-3 Hex BF BF BF BF BF MD-2 Hex 6F 6F 6F 6F 6F ŠThå  mosô significanô nibblå (thå  oæ thå MD-³ anä thå ¶ oæ  thå � MD-² ió thå steð ratå oæ eacè drive®  Thå tablå belo÷  determineó � steð rate: F = 2 ms B = 10 ms 7 = 18 ms 3 = 26 ms E = 4 ms A = 12 ms 6 = 20 ms 2 = 28 ms D = 6 ms 9 = 14 ms 5 = 22 ms 1 = 30 ms C = 8 ms 8 = 16 ms 4 = 24 ms 0 = 32 ms Mosô  DÓ  driveó iî aî MD-³ shoulä operatå witè á steð ratå oæ  ¶ � ms®  Thió  wilì makå thå driveó fasteò anä quieteò thaî  before® � MD-2'ó  generallù uså Shugarô SA200'ó anä theù operatå aô 2°  ms® � Dï noô changå thió witè aî MD-2®  Teaã 55B'ó havå á steð ratå oæ � 6 ms minimum. Byte 5: Drive A B C C E Decimal 3 3 3 3 3 Hex value 03 03 03 03 03 Binary 00000011 00000011 00000011 00000011 00000011 MD-3 and MD-2 values the same. Byte 6 EOT byte for FDC read or write commands. Drive A B C C E Decimal 5 5 5 5 5 Hex value 05 05 05 05 05 Binary 00000101 00000101 00000101 00000101 00000101 MD-3 and MD-2 values the same. Byte 7 GPL byte for FDC read or write commands. Drive A B C C E Decimal 28 28 28 28 28 Hex value 1C 1C 1C 1C 1C Binary 00011100 00011100 00011100 00011100 00011100 Byte 8 Current track. Drive A B C C E Hex value FF FF FF FF FF Binary 11111111 11111111 11111111 11111111 11111111 MD-3 and MD-2 values the same. Á  recað  oæ  thå MTA tablå valueó appearó below®  Iæ  yoõ  arå � modifyinç  youò systeí tï DÓ driveó follo÷ thå MD-³  table®  Thå � onlù  bytå yoõ maù wanô tï changå ió Bytå µ iî increaså thå  steð � ratå oæ youò driveó anä thuó quieô theí down®  IMPORTANTº Otheò � changeó arå necessarù tï geô á workinç Doublå Sideä System® Thió � only deals with MTAB. MD-2 ORIGINAL MD-3 ORIGINAL A B C D E A B C D E Byte 1 01 02 01 01 01 21 22 21 21 21 Byte 2 D8 59 D8 D8 D8         DC 5D DC DC DC Byte 3 58 58 58 58 58         7D 7D 7D 7D 7D Byte 4 05 05 05 05 05         04 04 04 04 04 ŠByte 5 6F 6F 6F 6F 6F         BF BF BF BF BF Byte 6 03 03 03 03 03         03 03 03 03 03 Byte 7 05 05 05 05 05         05 05 05 05 05 Byte 8 1C 1C 1C 1C 1C         1C 1C 1C 1C 1C Byte 9 FF FF FF FF FF         FF FF FF FF FF Tï  finä  wherå  MTA  ió  locateä  oî  youò  systeí  follo÷  thå � instructions below. indicates hitting the RETURN key.     Format and Sysgen a scratch disk.     Transfeò DDT.COÍ anä SYSGEN.COÍ ontï thió disk® Nothinç elså �     shoulä bå oî thió disk.     Boot the system with this disk. When you get to the A> enter     the following command: SYSGEN     Sysgeî  wilì sigî oî anä wilì asë foò sourcå drivå - enteò  Á �     .     Sysgen will then ask for the destination drive - just enter a     . (No destination.)     Savå  youò  sysgeî  imagå  (iô ió  currentlù  iî  memory©  bù �     entering SAVE 48 CPM64.COM     Enter DDT by typing DDT CPM64.COM.     DDÔ  wilì  sigî  on®  Enteò  S2344®  Thå  systeí  wilì �     respondº  234´ HH®  Recorä thå valueó oæ HH anä enteò ® �     Thå  nexô responså wilì bå 234µ F7®  Enteò á .?!ÿÿ" .".ÍÜ!€^#6#6!�ÃM ÍͼÍrÍ@Drive :.ÆAÍQ:.<Â>*ÍQ>?à =õ_Í_ño&ÍS¯2º.Í@:!».åÍ]Í@ !ÿÿ" .#"+."-.Íw!‡=º.ÍŠ}´+Êh#" .Í!ÍeÍ2*.+" .åÍøá#͈".!"."/."1.1‡=:.2:.Íd* .#}´Â»Í@ No files.ÍÖþXÊäþLÊ'þSʪÀÍ9*.͈ÍdÍÖG!€å!5~·È¸#Êß##ÃÒ^#VÕÉ:._Í:._Í_1ÉåÍÙ*-.ÍÍ@K in á#ÍÍ@ files. *+.ÍÍ@K free.É u uB’XäSªDšTÈUðVÀPµEkL'CÛMÕ Aü RcF…WÏY%?�QŒ *.#".ë* .Í,Ò€!".Í9À*.|µ+".€Í9* .".ÀÍ@ Which drive? Í@:û!þAÚ€þQÒ€õ Í:.GñÖA2.ÅõÍ9ÍrÍwÍ9*+.ÍÍ@K remaining on drive ñÆAÍQ>:ÍQÍ9Áx2.ÍrÀÍ@ Which flags (1-4,R,S,A)? Í@!o. 6#ÂL!ú!~·Ê€#">.*>.ëÍÒë#">.·ÊŠ!�o. ¾Ê„#ÂwÃ_>€Ã_>ÃÖ 1234zzzzRSAÍ@ Delete file? ÍÖþY€*.;À͈åÍáå]¯2\ Í`åÕá6Í`ÿÍ__áÕ^Í_:eæ€Ê!Í@ R/O. Delete? ÍÖþYÊÑáÉ:eæ2e\Í\ÍÑÍ_* .ë*.{•ozœg))))åÁáåÑx±ÊV~# x±ÂL* .+" .ë*.Í,ØÈ+".ÉÍ@ Erase Tagged or Untagged files (T/U)? ÍÖþTʤþU€þT>ʬ¯2 .Í@ Do you wish to be prompted (Y/N/A)? ÍÖþÊ€þAÊ€þNÊõþY>¯Ãö¯24.!å".͈åÍ4~æG: .¸áÂfåÍ@ Deleting ---> áÍ:4.·ÊWÍ@ Delete (Y/N/A)? ÍÖþAÊzþYÂfÍæʃáå;áÃhá#ë* .#}´Êz+Í,ëÒü!".À!".Ü ~6þÊ©#Íìå*1."1.áë*/."/.*/.ÍÍ@K (*1.ÍÍ@K).ÉÍÚ*.͈Í4ÍŒÃuÍ@ Tagged files = ÉÍÚ*.͈ÍÍ©ÃuÍ4~6þÀå#Íìå*1.Í~"1.áë*/.Í~"/.áÉÍ@ New drive/user/mask? Í@!ú!~·Ê€#">.åÍÒ:\·Â`:.<=2.:;.þÿáÂy#~þ*>ÿÊy:.2.:]þ ‘!]^ 6?Í`!\º. Í`Í9Í9Ãäå¯2.~·Ê¸þV#ª2.áÉÍ@ Illegal drive code.ÀÍ¥:.2;.:.29.~þ0Úºþ:ÚþAÚºþQÒºÖA29.#~þ:È·Èþ*Ê:þ0Øþ:ÐÖ'G#~þ:Ê3·Ê3þ0Ú3þ6Ò3Ö0€þÐ2;.ÉxÖ 2;.É>ÿ2;.Éù! Í!ú!å^#6#pá#~·ÈÍiwÃVÍ@ Copy to drive/user? Í@!ú!~·Ê€å ÍÍrá#ÍÖ:D.·À::.G:;.þÿʧ¸À:9.G:.¸ÀÍ@ Can't copy to same drive and user.À*.͈å¯2H.I. Í`~2:.Í@ Copy to (filespec)? Í@!ú!~·Ê€#">.ÍÒ*>.Í¥:]þ Â> !I.] ~æ#Â4 :\=29.!I.]ÍNÂT Í™!]I. 怶w#Â\ !\n. Í`:.G:9.¸Ê…  ÍÍráÍû ÀÍ@ Squeeze, Unsqueeze or Reverse (S,U,R)? ÍÖ2.þSÊÐ þUÊÐ þR€>ÃÖ ¯2D.õÍ9:.2:.ñþÊì Ía!å͈åÍ4~þ+Fრåx2:.:D.·ÂO :.G:9.¸ÂO ::.G:;.¸ÂO Í@ Skipping, same drive & user --> áÍà :D.þÊs þÊŠ Í@ Copying --> Þ Í@ SQ/USQ --> Þ Í@ Setting --> áåÍÍ@ to :D.þÂ) !o. ~·Äê #» !w. ~·Ì  ~·Ä #ÂØ Ãe åÕÅë~åÅÍQÁá#Âð ÁÑáÉåÕÅÃï 1 2 3 4 R/W R/O SYS ARC :9.ÆAÍQ:;.þÿÂ< ::.o&þ ÚG Í>:ÍQ:.·Êe Í@ with CRC.áå:D.þÊz þÊ´ ÍÃ} Íz áÍ6ÍæÊœ á#ë* .Í,ëÒï Í9ñ Í@ --- Aborted ---ÀåH.¯ Í`~õÕá6Í`ñ2:.Íd!I.o. ~æw¶w#ÂÛ H.Í!I.Ñ Í`Ã} !å͈åÍ4~þÂ3 Í@ Retagging --> áåÍ> ÍQáÍ4ÍŒåáá#ë* .Í,ëÒÿ ÀÍ"·ÀõÕåÍ@(áå~#·Êa åÍQáÃS Í@)áÑñÉ~þ åÅÄQÁá#Âj É".Í͵ ë*."".*.Âó ëvÿÍ,­ *.:.þUÊ$ þRÊ$ Ãó *.:.þRʽ þUÊó !ñ0Í‚#·*.Âó Í0!H.n. 6Í`!w.~æþ Âê 6Q#6Q#6QÍ@(!o.Íj å>.ÍQáÍj Í@)Ís*.Í!H.͘'ÍëÍ}Í0É!ñ0ÍD ·ÊC Í@ Not a SQ file.É">.ë"B.:;.õÍÂñ2;.!\n.6 Í`Ís!åÍÜ"áÂ| _åÍÎáÃh ë*B.Í,õÍëÍ}Í0ñÈÍ@ ERROR - Checksum error in file ÉÍnÀõÍngño¿É͵ ÈÍ@ Premature EOF on file... aborted.Àá·ÉåÍ0áÃÍÃ*:9.G:.¸Â::.G:;.þÿȸÈÍ!H.n. Í`¯2n.!"@.ÍsÍd*."5.:.·Â–åëÍH.Íá·Âl€"5.ë*7.Í,ëܺÃCͺÍ}Í0Í É¯|g}oÂ{É)))))))É,Ã*.åë*7.Í~ÍyÑå|·Â±}þ€Ú³.€&åÕ],ÍÑÕÍH.Í·ÂðÑá͇"5.ëá€ÿ |æ€Âê|µÂ¥ͺÖõåÍ�áñþÿÊ€Ñl&͇"5.ÑáÃl:.·ÈÍ@ Verifying --> ÍR!z.{.6Í`n.Í<ÂYÍ@ Can't open file!À€Í*@." .!"@.n.Í·Â…!€ÍÃmÍm* .ë*@.Í,Ê­Í@CRC verify error!ÀÍ@file ok.É*5.ë*.Í,ÈÍÍR*.:.·ÂåëÍn.Íá·ÂY€ë*5.ëÍ,ÂÕÍd*."5.É*.åë*5.Í~ÍyÑåÕ|·Â}þ€Ú .€],ÍÑÕÍn.Í·ÂVÑáë@ ë€ÿ |æ€ÂP|µÂÍ�ÃøÍ�Í@ Destination disk full.Í0ÍWÀ}“o|šgÉÍ@ Find what? Í@!û!">.ÍÂ!]~þ Ê€ ~þ µ6?#­Í@ !ÿÿÍ/€".ÀÍ@ Tag what? Í@!û!">.ÍÂ!]~þ Ê€Í@ !ÿÿÍ/€åÍ@ Tagging --> áå͈åÍ> ÍQáÍ4ÍŒáÃý#ë* .Í,ÚJëå͈]ÍNáÈÃ/>·É ë~þ?Ê\æ¾À#ÂQÉ*.͈ ~2:.Í@ New name, or *? Í@!û!">.!låÍÕá#~þ Ê€ þ?Êö#¡:;.þÿ¶::.w*.͈Íùþ.ÂÍ ÍÍr*.å* .#" .ÍeÍ2*.+" .ëá".Í,Ú€!".Àå:.29.\¯2\ Í`¯ÂÍd:eæ€Ê9:eæ2e:uæ2u\Í:;.þÿ_::.ÂF_Í_!mI. Í`¯2H.ÍùH.*.ÍŠ}´Ê’Í@ Destination file exists! ÍÍrÀ:;.þÿÊ¢G::.¸ÂÊ::._Í_ÿÍ_õ\Íñ_Í_¯Ñõ!m Í`ñ¿É::._Í_!\H. Í`Íù¯2H.>?2T.*.H.ÍŠ}´Ê½" .ÍùH.ÍÍR!mI. Í`ÍùH.Í!å)))))ë*. åT.Í`H.Í<ÊpáT.Í`:V.æ2V.H.Í* .+" .}´á# >.ýÍ@ Directory full.ÀåÕ€ÍÑÕÍ<Ñá¨!ÉÕÅå=‡‡‡‡‡!€…oÑ Í`Õ*7.Í,ÒÞÍ@ OUT OF MEMORY?ÃÑÕáÁÑÕÅåÍ<áÁѨi`ÉÍ@ Old name? Í@!û!">.!”.ÍÕ:•.þ Ê€:;.2 .Í@ New name? Í@!û!">.!n.ÍÕ:o.þ Ê€Í9!å͈å•.ÍÅ¢Í@ Renaming --> áåÍáå ~2:.Í@ to áåÍò!mÍáÍùG:´°2´åáá#ë* .Í,ëÒRÍ9>þ.ÂÍ ÍÍrÃÍ~þåÊïå Fá: .þÿÊܸÀþ?ÊèG>¦¸À# ÂÜɯ/Éo.m> õþ?Â~æ#ñ=Âú:;.þÿÂ::.Éå:.ÆAÍQáå n&}þ Ú5 ÅÍ>:ÍQÁyþÊJ> ÍQáͧå>.ÍQáͧÉÑáÕåÃJå*.#ÍÍ@. áÍ#~õ#å> ÍQáÍìÍÍ@K :ñ· Ê¢þ*Ê¢#yÍQÉÅå~ÍQáÁ#§ÉÍ9>2=.ÃÍ9¯2=.<23.Í@Press ^X to abort, L to advance a line, cr to advance a page. >2<.*.͈ÍÍ vÿÍ,!nÂD*."".!ñ0ÍD ·ÂDÍ9!Ü"ÃLå*."".á"bÍòþÊÃþÊÃþÊÉÍnÂÃþÊÃæþÂu>-_þ ‚:3.<23.:<.OÍ:=.·ÂO:3.G:¸ÂOÍÞþLʹþlʹþÊÃþÊï23.ÃO:3.=23.ÃOÍ0ÀÍÞÃO Í·ÈÍÃiÍò·ÊÞÉÍÏþÈÍiþXÉÿÃ!T.U.6Ã`H.¯2H. Í`~õÍùñ2:.Íd*.""." .H.Í<ÀÍ@ Can't open file!ÀÿÍ__É:9._Í:;._ Ã:._Í::.Ã^*."&."$."(.ÍRÍ"n.ÕÍ<ÊÂÑÕÍ:w.æ€Ê»:w.æ2w.Í"ÑÕÍÑÕÍ!w.åE.Í`á6$#6$#6$ÑÕæ ÂÛÍ"ÑÕÍÍ"ÑÍ<ÀÍ@ Destination disk directory full.À!z.{.6Í`ÉÍdH.Í<ÀÍ@ Can't close file!ÀÍRn.ÕÍÍ"ÑÍÉÍRn.Í<Ê=ÉÍmÍ"!n.~.Í`!E.‡.Í`n.Í<Ê=!E.w.Í`:Q.æ€G:w.°2w.:y.æ2y.n.ÍÉ*(.ë*$.GÍ,xÊãw#"$.ÉõÍëñÃÎ*$.ë*&.Í,ÈåÍRá:.·Â,åëÍn.Í·ÂYá€ë*$.ëÍ,Ú*&."$.É*&.åë*$.Í~}æõÍyñÊC#|·ÂN}þ€ÚP.€],ÍÑÍn.Í·ÂVÍ�Ã%* .ë*".Í,Ê‚~#"".¿ÉÍd*.""." . :.·ÂÌÅëÍH.ÍÁ·Â¼* .€" .—Ãn*".ë* .Í,Ân¯=É ,Í*".ëÍH.Í·ÂøÍ�*"." .ÃnõåÍ�áñþÿÊ€l&͇ë*"." .ü* .åÁ!‡=‡=ÉÍ~þÒVåõ#Å Í`Áñ~õ#¯#~ñ#~áÕ Ñ x±Â$ÉÅ>åÂ[ÁÃI* .".+|µÈ*.|µÈ¯|g}o".´Â„#".ë* .+}“o|šg".!".*.".*.ë*.".ÍæÊÒÚÒÍ*.ë*.}“o|šg".úÒµÊÒá*.#".ë*.Í,ÚoÛ*.͈".å*.͈".Ñ ~æOæ¹À#Âü¾À# É*.ë*.Fwx#  É|ºÀ}»É!".".#".* ." .ÍÊQÍŸÌh*.".#".* .+" .|µÂEÉ*.͈ë*.Í`*.#".É*.͈".å*.͈".Ñ ¾À#•É*.~þåÊ×å Fá». xþÒ×:.þÿÊĸÀþ?ÊÐG>¦¸À# ÂÄÉ·É!"-.* .#}´ÈåÁ!”=åÕÅÍìë*-."-.ÁÑá x±ÂîÉå'Í,ÚÃ?èÍ,Ú$Ã?dÍ,Ú2Ã?}þ Ú=Ã?y’ÊRÚRõ> ÍQñ=ÂGáõÅÕåöÿÿÿ Ú] ë|µÄS{Æ0ÍQáÑÁñÉ Í}þ0ÒÁ*ç0#åÁå*à0~å.Ò˜g x±Ê©|-“á#Ã�áá}“o|šg:*.·Ê½)=õ"+.É€Í:._.Í*€:‚G·xG|g}o ÂÛý^ë)))))ë#~å&o))))Ñõæ…oÒ$ñæàÊ#åÑ:*.·ÈþÊZþÊKþÊ<}æÈÕ>ð¥oÑÉ}æÈÕ}æøoÑÉ}æÈ}æüoÕÑÉ}æÈ#É~#Â`ÉþaØþ{Ðæ_É:._Í<Ê€Íâ0Í`:ä0Ö2*.Í"à0É‘ÍL ÍL* .ÍøÍ9ÍÚÍ©Í9É‘ÃL*>.ëÍÒ!\¯w=ÃL!\å*>.ëÍÒá:.Æ OñÖ0�Oþ:Ê7·Ê7Ñ:.ÿÃLxþÒ,yþÿÊHþÒ,ñpy2;.Í·Êr#þ*Âb6?ÃdwÂQÍ·ÊyÃh#6 Ârþ.¢Í·Ê¢#þ*Â’6?ÔwÂ�Í·Ê©Ø#6 ¢#6«ë">.É·Èþ Èþ=Èþ_Èþ.Èþ:Èþ;Èþ<Èþ>É·Èþ ÀÃÒ!à.ë!yŬg)Ò÷>¬g>!­oÂëÁër$s%# ÂáÉ:.·È~Í#Í, ÉÅåÕ*@.ëªO!à. ~«W$^ë"@.ÑáÁÉ ÉÍ@ Éá~·#åÈÍQÃ@ Ã_æ€{ÊdõÍlñÍdÍrÉæ_Ã!Ãu! ~#·ÈGåÅ~ÍdÁá#ÂzÉ))))‡=É NSWEEP - Version 2.07 07/17/1984 (c) Dave Rand, 1983, 1984 Edmonton, Alberta $ A - Retag files : Q - Squeeze/Unsqueeze tagged files B - Back one file : R - Rename file(s) C - Copy file : S - Check remaining space D - Delete file : T - Tag file for mass E - Erase T/U files : U - Untag file F - Find file : V - View file L - Log new disk/user : W - Wildcard tag of files M - Mass file copy : Y - Set file status P - Print file : ? - Display this help X - Exit to CP/M : cr, sp - Forward one file $"x#"z#!9"�"Íc#vÿÍ]#>À¯2t#2w#Íc#"~#*x#åÍnáõÍ�"Gñp#ÂŒ"·Â<"Íc#"€#Í]#Úc">·Éë*z#ë"|#|µÊ“"ÕÍc#Ñës#r#åÍc#ëás#r#ë*|#+Ãh"1>·É*x#ë*~#ë¯ÉþaØþ{Ðæ_ÉUSQ section (C) 1983, 1984 by Dave Rand (403) 484-4114!9"�":w#·Êó"=2w#:v#¿ÉÍ#þ�Â#Í#·Â#>�¿É==2w#:v#¿É2v#¿É:u#O:t#·Â.#ÕÍnÂŒ"ÑO>=2t#yO*z#Ò=###^#Vzæ€Ê#y2u#zþþ>ÊZ#{/¿Éá·É|ºÀ}»ÉÍnÂŒ"õÍnÂŒ"gñoÉ>ÿ2è+"B,!9"‚,1‚,*B,}æüo>Í�+"é+">,"@,Í&+¯2î+ÍW+ÂÃ#>Ã�'vÿͨ+ÂÑ#>Ã�'}2í+åÍ+á|Ãä#Íc+Ê?$!í+¾Ê$#45Ê6$õ~6þÒ $G+~õÍ+ñÂý#ñÃ6$õ>�Í+ñ<Í+ñÃ6$þ�Ê6$#4~þÿÂÞ#å>�Í+á~6Í+:í+2í+Í+ÃÞ#:î+·ÊQ$õ>�Í+ñ<Í+*>,^#V#N#z³±Âl$#ÂV$>Ã�'~å*@,w#s#r#q#"û+á>2ï+#^#V#N#~#2<,{²±Êó$åÅ:ï+G*@,#åÍ®+Ú¶$á####Ÿ$y2=,ÃÒ$*û+y2=,ÁÅ }‘O|˜GÕT]+Í×+Ñá+Á:<,w#s#r#:=,w*û+####"û+:ï+<2ï+á„$:ï+!‚*·Ê%45 %¾Â%¾Ò%#Â%!�*p¯27,28,Íl*¯g2î+2ú+ý<ÿ27,29,à '>ÿ29,! ,,Í»+ÚÒ&¯29,!,:5,Í�+::,Nw:6,/<þÿÊ 'G:;,‘þÒ '4x26,Ãó&!$,,ÍÌ+!,:5,Í�+~2:,:6,†ú¨&w:9,·Ê#%! ,,ÍÌ+Ã#%>ÿ26,:�*!5,4¾Ò!'>ÿ28,Ã#%~!,Í�+~2;,ÃÞ&! ,Í„,¯2è+*ø+))>Í�+ ,",!",!,Í’+ë~öwë6å#¯w#w#wáÍ’+ëÍ„,!ÿ+Í„,*ÿ+ë* ,ͨ+>Ò�'¯*‚,ù* ,É:è+·Ê¡'¯É"D,!9"‚,1‚,!vÿÍþ(*ý+Íþ(ë!Í¡+"ý+*D,#~þ ÊØ'Í)#ÂÊ'>.Í)xÍ�+~þ Êñ'Í)#Âã'¯Í)*ø+Íþ())ë*é+~Í)#z³Â(¯2ì+2î+>2ë+Íc+Ãv(Íc+Ê(!í+¾ÊY(#45Êv(õ~6þÒJ(G+~õÍÅ(ñÂ=(ñÃv(õ>�ÍÎ(ñ<ÍÎ(ñÃv(þ�Êv(#4~þÿÂ(å>�ÍÎ(á~6ÍÎ(:í+2í+ÍÅ(Ã(:î+·Ê‘(õ>�ÍÎ(ñ<ÍÎ(>ÿÍ�+###ÍÓ(:ë+þʰ(G:ì+¨(Í)>ÿ2è+*ý+|µ>ÂÀ(¯*‚,ùÉþ�ÂÎ(ÍÎ(¯ÅÍ�+ÁÅF#^#V:ë+O{_zW:ì+ Âñ(Í)¯2ì+ÂÝ(y2ë+ÁÉ}Í)|ÅÕåÍÎáÑÁÉõÅ:8,·ÊI):ô+*ø+ë*ö+G:ú+Os#r#}æÂ0) z·Ê:)»Ê`)Â%)"ö+ë"ø+y2ú+!í+4~þÒ`)¯2î+!ô+~‡wÁñÉÁñá:�*=GÂp)>ò�':8,·Â~):7,·Â¤&!�*p:8,·Ê#%¯28,27,Ã#%õÍ�+:í+w#å*ò++2,,¯Í×+!"," ,,!,Íe- ,!,Í’+:í+!$,Í�+4!ô+5:8,·Âç)áñÉ*ö+6ÿ:ú+O}æÊú)7zW{_~þÚ*A+~+õ}æÊ* ñ·Â*~¸Êó)Ã*ás#r*ö+ñ/w#6ÿ#"ö+}æÀ!ú+4É>ÿÍ�+###å!I*ãÍ—)*ö+>þ+w+Éë,Õ¯ÍÌ+áã+ä,ÖÚø*Ãï*xÉ!ã+4À#4À#4À#4Éþ�Â+Í+¯Íú*o&))ë*>,4À#4À#4ɯGO*>,w#w#w#q# Â,+!ã+w#w#w#w#!ã+ÿ+ÍÌ+!"ý+ÉÍc+ÈoåÍc+ágÉÍnÊk+¿Éõ*ý+Í�+"ý+ñ!ÿ+4À#4À#4É*>,GÍ�+xÍ�+x…oÐ$ÉåÕ·Ž#•+ÑáÉ}“o|šgÉ|ºÀ}»É##~¹À+~ºÀ+~»ÉH ë +¾À ÂÁ+¾Éx±È ~#ÃÌ+x±È ~+Ã×+ÿy·Èx·ÈX+·õG]T~w+”,kbñ Â�,Éx·ÊG-"L-ë"N-Hi&)))#"T-!W-^-A¯w#ÂÃ,!W-"P-!^-"R-*N-A¯¶#ÂÜ,·ÊC-·A*L-~w#Âë,!T-5Âÿ,#5úG-*P-A~w#Â-Åy2V-*R-DM*P-ë*N-·ž#:V-=2V-Â-Á?Òç,*P-ë*R-"P-ë"R-Ãç,7ÃH-·*P-Éx·ÈH ë"Í-!Ï- "Ë-i`)))#"É-A!Ï-6#„-·A*Ë-+~wÂ�-kbA+~w›-Òº-Õ*Í-ë!Ï-A·Žw#°-Ñ!É-5ÂŒ-#45È5ÃŒ-..@comment[from Eugene KUG Newsletter, Sept., Nov., & Dec. 1985 issues] HINTS ON NSWEEP FROM THE HORSE'S MOUTH by Doug Sears I have written about Micro Cornucopia's SOG (Semi-Official Gettogether) before in this publication. During some strenuous excavations in the dark corner of my computer room, I rediscovered my SOG notes in a pile of ancient manuscripts, and now I can tell you about one of the highlights of the SOG, Dave Rand talking about his program NSWEEP. Dave is working on the Definicon 32-bit board for a living (see Micro C #25 and August and September BYTE), but continues to improve NSWEEP in his spare time. You should all have v 2.07; there is a v 2.08 out, an unauthorized update by an unknown person, which should be avoided because it sometimes destroys files. Dave is working on v 2.09, using a smaller, faster SQueeze algorithm, and since that will save about 4K of space, he may add some features, possibly a bidirectional View or a left margin for the Print file command. Dave had some useful comments on how to use NSWEEP. I won't say anything about whether features are "undocumented" or not, because people (me included, of course) sometimes miss perfectly well documented things. 1. To move a file to a different user number, just rename it, and include the user number in the file spec. For example, B0:NSWEEP.COM R B14:NSWEEP.COM . You can also do this with the wildcard rename. I guess you can throw MOVE.COM away now (I dumped SQ and USQ long ago, and use NSWEEP instead). 2. The little-known "Y" command. To understand this command, you need first to know about the mysterious "eighth bit," also known as "bit 7" (counting from 0 to 7), the "high bit," or the "parity bit." Up to now, standard ASCII has been a seven-bit code, leaving the eighth bit of a byte free for other uses (there is a new eight-bit ASCII, but that's the subject of a different article and irrelevant here). In particular, the inner workings of CP/M ignore the eighth bit of each letter you give it in a file name, and then proceed to use some of those eighth bits for marking special files. You will usually not see these high bits, even on '84 model Kaypros which show letters with the high bit set as graphics characters, because directory listing programs also ignore the high bit. If you do "STAT *.*" you'll be shown if there are any Read-Only (R/O) or System (SYS) files. A file which has the eighth bit set on the first letter of its extension is a R/O file. The second letter marks a SYS file, and the third letter marks a file for programs that make backup copies of all files that have been changed (this is the Archive bit). So there you have the "RSA" you see when you try to use NSWEEP's Y command: R for read-only, S for system, A for Archive. Y also lets you change the high bit of the first four characters of the file name, called 1, 2, 3, and 4 in NSWEEP's terminology. High bits in characters 5, 6, 7, and 8 have very special meanings in TurboDos, so they aren't used, in the name of compatibility. Here's a summary for that famous hypothetical file FILENAME.EXT. FILENAME.EXT ------------ 1234____.RSA NSWEEP can display the marked characters in inverse video, underlined, or whatever your screen can display, and NEWSWEEP.COM included in ONKUG vol. 1 no. 9 is already set up for newer Kaypros, the ones with graphics. Unfortunately, '83-model Kaypros show extra "0" characters instead of highlighting with that setup. To simulate highlighting on '83-model Kaypros, you can make the lead-in and lead-out strings be appropriate printable characters, such as "<" and ">". This disturbs the alignment of columns, but it's better than nothing. The lead-in string is at location 104H (length of 0 to 6 at 104H, string starts at 104H). The lead-out string is at 10BH (same format: length plus up to six characters). I recommend SUPERZAP as the easiest program to use for making simple patches like that. Now that you know something about high bits, we can finally get to NSWEEP's Y command. The only trick you need to know is that it only works on tagged files (just like the Q command). So all you do is tag the appropriate file, type "Y", and specify which positions you want to change (any or all of 1, 2, 3, 4, R, S, or A, separated by commas or not). Any bits not specified will be reset back to zero, so if you specify something other than 1-4 or RSA, say some random letter like "k", then all bits will be reset. Some obvious applications come to mind. Sometimes I get Read-Only files from other people, and this saves me from having to hunt up a disk with STAT on it. Conversely, you can set your precious files to R/O to keep yourself from accidentally erasing them. People with hard disks especially might want to look into the programs that use the Archive bit for selective back-ups. You could use one of the other bits just to mark a group of files. for making simple patches like that. Now that you know something about hi**** prou-ad1.023 **** Thió  ió  thå reviseä version¬  receiveä earlù  Januarù � '86. BIOº  Greç  Havengá ió á recenô graduatå froí  Michigaî � Technologicaì University¬ anä holdó á bachelor'ó degreå � iî  Computeò  Science®   Hå  liveó  iî  Granä   Rapids¬ � Michigan¬  anä  ió aî associatå oæ Meijers¬  Inc®  Wheî � he'ó noô gettinç á greeî taî froí á terminal¬ hå enjoyó � restoring classic cars, cooking, and playing guitar. Programming the 8251A USART Chip by Gregory A. Havenga [Now¬  whù woulä yoõ eveò wanô tï prograí thå USARÔ oæ � youò  Morrow¿  Iæ  yoõ  eveò havå reasoî  tï  calì  á � mainframå (large¬ central© computer¬ youò simplå modeí � prograí  jusô  won'ô do®  Mosô modeí programó  assumå � thaô  you'lì  bå  communicatinç  witè  micrï  bulletiî � boardó  whicè  requirå  "8-bit¬   onå  stoð  bit¬   nï � parity"--aî agreemenô oî ho÷ tï geô byteó  across®  Á � mainframå maù requirå somethinç likå "7-bit¬ twï stoð � bits¬  odä parity.¢ You'ä neeä tï geô á modeí prograí � thaô  wilì givå yoõ thå necessarù optionó foò  change¬ � or“  handlå  thå  probleí yourselæ bù doinç  whaô  thió � articlå wilì teacè you® --Ed.] Thió articlå shoulä helð thoså useró whï wisè  tï � kno÷  á  littlå  morå abouô thå internaì  workingó  oæ � theiò Morrows®  Becauså iô ió writteî foò thå generaì � user¬  noô  jusô uó technoids¬  morå thaî á fe÷  termó � havå tï bå defined®  Thió haó thå wondrouó effecô  oæ � takinç uð mucè space¡ Thå firsô sectioî wilì describå � whaô  thå 8251Á USARÔ chið ió anä definå thå termó onå � needó tï kno÷ iî ordeò tï uså it®  Thå seconä sectioî � actuallù  getó  dowî  tï brasó  tackó  bù  introducinç � programminç examples. Parô 1º EXPLORINÇ THÅ 8251Á USART Essentially¬  thå  8251Á ió á chið thaô  convertó � "paralleì data¢ froí youò computer'ó microprocessoò tï � "seriaì data¢ anä vicå versa® Thå letteró USARÔ stanä � forº         Universaì        Synchronous/Asynchronouó � Receiver/Transmitter®  Thå 8251Á chið ió useä iî  thå � MD1¬  MD2¬  anä MD3» iî harddisë MD's¬ differenô chipó � arå used® Beforå wå caî actuallù geô tï thå subjecô oæ � programminç  thå chip¬  wå neeä tï understanä whaô  iô � does¬  anä whù iô doeó it®  Also¬ wå neeä tï definå á � fe÷  terms¬   thå  mosô  importanô  beinç  seriaì  anä �Šparalleì formó oæ datá transmission. Parallel and Serial Data Transmission � Iî  paralleì transmission¬  eacè bytå oæ datá  ió � transmitteä  alì  eighô bitó aô  once¬  througè  eighô � separatå wires¬ whilå iî seriaì transmission¬ thå datá � ió senô ouô througè onå wire¬  onå biô aô á time®  Iæ � youò computeò haó á Centronicó porô ouô thå bacë oæ iô � (usuallù  useä foò youò printer)¬  yoõ wilì noticå (iî � mosô cases© thaô thå cablå connectinç thå computeò anä � thå  printeò ió flaô anä wide®  Thió ió  becauså  thå � transmissioî formaô ió paralleì anä thereforå requireó � (aô least© eighô wireó tï carrù eacè bytå oæ datá froí � thå computeò tï thå printer® (There'ó á loô morå thaî � eighô  wireó iî thaô cable¬  buô á discussioî oæ  whaô � thå otheò oneó arå ió á gooä topiã foò anotheò articlå � Anyonå ouô therå carå tï takå á staâ aô it?). � Manù  computeró  uså paralleì  datá  transmissioî � internally¬ anä seriaì datá transmissioî wheî theù arå � sendinç  tï  oò  receivinç  froí  externaì  equipment® � That'ó  wherå thå 8251Á comeó in®  Iô functionó aó  á � kinä  oæ  "switchbox¢ iî convertinç seriaì  datá  intï � paralleì  datá foò youò computeò anä vicå versa®  Seå � thå illustratioî belo÷ foò á typicaì uså oæ USARTs. Practical Uses of Parallel and Serial Modes Whù uså paralleì oveò seriaì datá transmissioî oò � vicå versa¿  Á fe÷ importanô reasonó (therå arå more© � arå 1© speed»  2© thå distancå thaô thå signaló caî bå � transmitteä    reliablù   withouô   needinç    outsidå � amplification»  anä  3© simplificatioî oæ  thå  cableó � needeä tï connecô computeró tï deviceó likå modemó anä � printers. Aó  foò speed¬  paralleì ió generallù fasteò thaî � seriaì  datá  transmission®  Thå reasoî foò  thaô  ió � simple®  Thinë  oæ paralleì transmissioî  aó  beinç � likå á largå supermarkeô checkout® Manù peoplå caî gï � ouô  througè  separatå  laneó alì aô  thå  samå  time® � Thinë  oæ  seriaì transmissioî likå á grouð oæ  peoplå � standinç  iî  linå alì waitinç theiò  owî  turn®  Thå � purposå oæ thå USARÔ ió tï converô á strinç oæ  seriaì � bitó  intï  á grouð oæ paralleì transmitteä  bitó  anä � vicå versa. Thå   distancå  thaô  datá  caî  bå   transmitteä � reliablù  thougè á regulaò non-amplifieä cablå dependó � upoî  thå  strengtè  oæ  thå  voltageó  used®   Seriaì � transmissionó arå strongeò thaî paralleì becauså  theù � arå designeä tï coveò lonç distances¬ whereaó paralleì � signals¬  designeä tï bå useä withiî thå computer¬ arå � comparativelù weak®  Sï wheî yoõ uså paralleì signaló �Štï transmiô oveò lonç cables¬  yoõ maù havå á problem® � Thå  signaló  caî  looså mucè oæ  theiò  strengtè  anä � becomå  susceptiblå tï thå introductioî oæ noiså  intï � thå transmission. Thå  cableó useä tï transmiô seriaì datá  usuallù � neeä  onlù  threå wiresº  onå tï transmiô datá iî  onå � direction¬  onå  tï  transmiô  datá  iî  thå  oppositå � direction¬  anä onå foò "handshaking.¢ Iî á  paralleì � cable¬  therå  havå tï bå aô leasô eighô wireó foò onå � waù transmission®  Sï foò twï waù datá  transmission¬ � wå neeä aô leasô eighô morå wires¬  pluó alì thå wireó � necessarù foò handshaking¬ etc® Thió ió whù thå cablå � ió  sï widå anä flat®  Besideó that¬  ribboî cablå ió � morå  expensivå thaî mosô cablå useä foò  seriaì  datá � transmission. Ho÷  doeó  alì  thió relatå tï ouò  lowlù  littlå � USARÔ  oî boarä thå Morrow¿  Well¬  thå sweeô  littlå � 8251Á  chið  caî  handlå almosô  anù  forí  oæ  seriaì � transmissioî  oæ  data--becauså  iô  ió  programmable¡ � Now¬  É  kno÷ therå arå á fe÷ grumbleó ouô therå  froí � peoplå  whï  seå  nothinç buô hassleó witè  havinç  tï � prograí  somethinç elså (afteò all¬  jusô  programminç � thå computeò itselæ ió difficulô enough!)® Buô really¬ � thió thinç ió á snap¡ However¬  readinç Intel'ó documentatioî oî iô  ió � nï fun¡  É spenô threå dayó tryinç tï understanä whaô � theù  werå talkinç about¡  Thå chið ió designeä tï bå � verù  flexible¬   buô  mù  experiencå  haó  beeî  thaô � flexibilitù  breedó confusion¡  Giveî  teî  differenô � wayó  tï  dï  something¬  teî  differenô  peoplå  wilì � implemenô thå solutioî iî teî differenô ways¡  Iî ouò � case¬  Mr®  Morro÷ anä cre÷ havå simplifieä thingó foò � us¬   anä   wå   wilì  concerî  ourselveó   witè   thå � implementatioî  useä  foò  thå Morro÷  Micrï  Decisioî � only. Accessing The 8251 USART Ho÷  doeó thå microprocessoò iî youò Morro÷  talë � tï thå chip¿ Iô doeó iô bù meanó oæ "porô addresses.¢ � Wheî iô wantó tï senä oò receivå á bytå tï oò froí thå � USARÔ chið associateä witè thå printer/modeí connectoò � oæ á floppy-systeí Morrow¬  iô useó thå porô addresseó � 25´  anä 255--$FÅ anä $FÆ iî hex®  Usinç  theså  porô � addresseó iî conjunctioî witè thå USARÔ ió thå waù foò � thå  microprocessoò  tï  geô througè  tï  thå  outsidå � world. Porô  locatioî  25µ ió whaô ió termeä  thå  USARÔ � Command/Statuó port®  Wå caî checë thå currenô statuó � oæ  thå porô bù readinç thå valuå aô thå port¬  oò seô � iô bù sendinç á valuå tï thå port. Š Porô locatioî 25´ ió thå USARÔ Input/Outpuô port® � Thió  ió  wherå informatioî ió actuallù  senô  tï  anä � receiveä froí thå USART. Accessinç theså portó ió donå iî á numbeò oæ wayó � dependinç upoî whaô languagå ió used® Iî Assembly¬ (É � know¬  "yuck¡  Assemblù  language!¢  saù alì yoõ  non-� hackeró  ouô there!)¬  therå arå twï commandó useä  tï � communicatå  witè  ports--OUÔ anä IN®  Aó  yoõ  mighô � guess¬  OUÔ sendó somethinç ouô througè thå port¬  anä � IÎ receiveó somethinç iî througè thå port®  Iî  Turbï � Pascal¬  yoõ havå á porô array®  (Blesó Phillipå Kahî � foò thió littlå gem¡ Iæ yoõ don'ô alreadù havå it¬ geô � it¡  É  don'ô uså BASIà anymore!© Tï senä  somethinç � ouô tï thå port¬ merelù makå aî assignmenô tï thå porô � array®  Tï  receivå  somethinç  froí  thå  port¬  seô � somethinç equaì tï thå port® Herå ió aî example: port[255] := ready_for_transmission; û Thió putó á numeriã valuå storeä iî thå variablå � "ready_for_transmission¢ ouô tï thå porô } while ( port[255] and 4 ) <> 4 do û waiô foò porô tï havå thå biô thirä froí thå � right to be set to one } Otheò  languageó  shoulä  havå  similaò  commands®  Iî � MBASIà anä Nevadá FORTRAN¬  foò example¬  thå commandó � arå  INÐ anä OUT¬  witè INÐ beinç á functioî returninç � thå valuå aô thå port¬  anä OUÔ beinç á subroutinå (oò � statemenô iî BASIà terminology© thaô setó thå porô  tï � á  particulaò  value®  É wilì uså Pascaì  terminologù � froí no÷ oî becauså iô ió thå closesô tï plaiî Englisè � anä  ió  easù tï converô tï  otheò  languages®  (Also¬ � Pascaì allowó må tï sho÷ structureä exampleó whicè  ió � importanô tï me¬ beinç á computeò sciencå major!© Communicating with the 8251A Oî tï thå beeæ oæ thå subject® Thå procedurå foò � communicatinç witè thå chið ió outlineä below. 1® We geô thå chip'ó attentioî, lettinç iô kno÷ � we want to program it. 2® We assemble aî instructioî worä containinç � thå bitó seô thaô wilì seô thå chið uð tï � transmit in the manner we want it to. 3® We check anä set thå portó tï thå chip. � Let'ó   begiî  bù  tryinç  tï  geô  thå   USART'ó � attentioî  bù  resettinç it®  Thió ió accomplisheä  bù � sendinç thå thå USARÔ Command/Statuó porô (255©  threå �Šzeros¬ followeä bù onå $4° hex® Here'ó aî example: port[255Ý :½ $00» û Telló porô thaô we'rå } � port[255] := $00; { getting ready to reset it } port[255Ý :½ $00» port[255] := $40; { Internal Reset Command } Important Terms No÷ thaô thå chið haó ouò attention¬  we'rå readù � tï  telì  iô  whaô tï do®  Thå waù wå dï thió  ió  bù � settinç thå bitó iî á bytå registeò iî thå USARÔ  thaô � correspondó  witè  thå waù wå wanô tï  transmiô  data® � Therå  arå á fe÷ termó tï becomå familiaò witè herå sï � wå wilì kno÷ whaô wå arå actuallù tellinç thå chið  tï � do® Herå arå thå terms: Bauä Rate“--Thå speeä aô whicè wå transmiô data® �        Aô 30° baud¬ wå transmiô abouô 3° characteró peò �        second.      Characteò Length--Thå lengtè oæ thå datá �        (iî bits© thaô wå wanô tï transmit® Iî �        mosô applications¬ thió wilì bå · oò ¸ bits¬ �        dependinç oî thå receivinç device'ó �        requirements® Foò communicationó prograí �        applications¬ thió wilì bå whateveò thå hosô �        computeò requires® Mù experiencå haó beeî thaô �        thå Sperrù mainframå thaô É havå accesó tï �        requireó · datá bits¬ whilå mosô bulletiî boardó �        requirå ¸ datá bitó peò character.      Parity--Á forí oæ erroò checking® Sometimes¬ iî �        thå courså oæ transmission¬ á biô oò twï (oò �        more¬ iæ thå transmissioî ió reallù bad!© maù �        geô switcheä froí beinç á ± tï á 0¬ oò vice-�        versa® Paritù checkinç ió donå bù addinç uð alì �        thå bitó withiî eacè transmitteä bytå aó iæ theù �        werå littlå numbers® Now¬ supposå thaô wå arå �        usinç eveî paritù (therå ió even¬ odä anä nï �        parity)® Iæ alì thå bitó adä uð tï aî eveî �        number¬ theî thå paritù biô ió seô tï 0® Iæ thå �        bitó adä uð tï aî odä number¬ thå biô ió seô tï �        1¬ makinç thå totaì aî eveî number® Iî odä �        parity¬ aó yoõ mighô guess¬ thå oppositå �        occurs--thå paritù biô ió seô tï makå thå totaì �        oæ alì thå bitó withiî thå bytå aî odä number® �        Usinç nï parity¬ thå paritù biô ió stilì therå �        buô ió merelù ignored® (Thå paritù biô ió addeä �        to the left side.) Herå arå somå examples: 1. Eighô datá bits¬ Eveî paritù:         10010100 - parity bit set to 1 Š This is what gets sent: 100101001 2. Seven data bits, Odd parity:         1110100 - parity bit set to 1 This is what gets sent:         11101001     Stoð Bits--Á biô oæ informatioî senô alonç foò �        synchronizatioî purposes® Iæ yoõ looë aô thå �        completå signaì thaô ió useä tï transmiô onå �        completå bytå oæ information¬ yoõ wilì noticå �        thaô therå arå twï morå bitó addeä tï datá anä �        paritù bits® Theså arå thå starô biô anä thå �        stoð bit® Theiò functioî ió tï ensurå thaô thå �        receivinç enä knowó whicè oæ thå ¸ datá bitó ió �        which® Thaô ió calleä synchronization® Thå �        wholå traiî oæ bitó seriallù transmitteä startó �        witè á starô bit¬ followeä bù · oò ¸ datá bits¬ �        followeä bù á paritù bit¬ followeä bù á stoð �        bit® Iô lookó likå this:        --------------------------------------------         ILLUSTRATION        --------------------------------------------        Thå starô biô ió alwayó "1¢ anä thå stoð biô ió �        alwayó "0¢. Thaô ió á cluå tï thå circuitrù �        iî á USARÔ wherå thå (variable© datá anä paritù �        bitó begiî anä end® Alì thå bitó arå equallù �        lonç iî timå wheî transmitteä aó "uð anä down¢ �        electricaì signals¬ excepô thå stoð bit¡ Iô ió �        thå onlù biô thaô caî havå á lengtè equaì tï 1.° �        timeó oò 1.µ timeó oò 2.° timeó thå lengtè oæ �        eacè oæ thå otheò bits® Thå settinç oæ thå �        lengtè oæ thå stoð biô agaiî dependó oî thå �        requirementó oæ thå remotå equipmenô yoõ wanô tï �        communicatå with. Necessary Description Conventions Thå  chip'ó  datá transmission/receptioî modå  ió � programmeä  bù sendinç á worä containinç thå bitó  seô � tï controì baud-ratå factor¬  characteò length¬ paritù � characteristics¬ anä numbeò oæ stoð bits® Wå musô no÷ � establisè  á conventioî foò naminç thå bitó iî á  bytå � iî ordeò tï avoiä (create?© confusion®  Wå wilì refeò �Štï thå lefô mosô biô oæ aî eighô biô bytå aó beinç thå � seventè bit¬  anä aó thå highesô biô oæ thå byte® Thå � right-mosô biô wilì bå referreä tï aó thå  zeroth¬  oò � lowesô   bit®   Thió  notatioî  ió  useä  becauså  iô � representó   exactlù   whaô   eacè   biô    representó � numerically® Thå lowesô biô representó 2^0¬ oò twï tï � thå zerotè power® Bù  mathematicaì  convention¬  anù numbeò tï  thå � zerotè poweò ió 1® Thå firsô biô representó 2^± (twï � tï   thå  firsô  power)®   Again¬   bù   mathematicaì � convention¬  anù  numbeò tï thå firsô power¬  ió  jusô � thaô number¬  iî ouò case¬  2^± equaló 2® Thå seventè � biô  representó 2^· (twï tï thå seventè poweò ©  whicè � ió 12¸ tï uó peoplå witè 1° fingeró anä 1° toes® Thió � 2^¿ notatioî ió ho÷ ouò computeò countó aó eacè biô ió � eitheò á ± oò á zero® Thinë oæ thå computeò aó havinç � onlù   onå  finger--oò  thumâ  iæ  youò  computeò   ió � particularlù clumsy¡ (Checë ouô á booë describinç ho÷ � computeró  arå  seô uð anä ho÷ theù worë  iæ  yoõ  arå � interesteä  iî  ho÷  binarù arithmetiã  ió  performed® � It'ó  kinä oæ interestinç tï kno÷ jusô ho÷  dumâ  youò � computeò  is®  Iô  putó yoõ anä youò computeò iî  thå � propeò perspective--YOÕ arå thå boss!) Command Instructions Ok now, what bits mean what? Consider our command instruction (one byte). *-------------------------------* | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | *-------------------------------* Bitó  ·  anä  ¶ controì thå numbeò  oæ  stoð  bits® � (We'lì geô tï thå bitó markeä "X¢ aó wå gï along.) *-------------------------------* | 0 | 1 | X | X | X | X | X | X | *-------------------------------* 1 Stop bit *-------------------------------* | 1 | 0 | X | X | X | X | X | X | *-------------------------------* 1.5 Stop bits *-------------------------------* | 1 | 1 | X | X | X | X | X | X | *-------------------------------* 2 Stop bits Bit 5 Sets either Even or Odd parity. Š *-------------------------------* | X | X | 0 | X | X | X | X | X | *-------------------------------* Odd Parity *-------------------------------* | X | X | 1 | X | X | X | X | X | *-------------------------------* Even Parity Biô ´ Enableó parity® Foò eveî oò odä parity¬ this bit must be set to one. For none, zero. *-------------------------------* | X | X | X | 0 | X | X | X | X | *-------------------------------* No Parity *-------------------------------* | X | X | X | 1 | X | X | X | X | *-------------------------------* Parity Bits 3 and 2 control character length. *-------------------------------* | X | X | X | X | 0 | 0 | X | X | *-------------------------------* Character Length 5 bits *-------------------------------* | X | X | X | X | 0 | 1 | X | X | *-------------------------------* Character Length 6 bits *-------------------------------* | X | X | X | X | 1 | 0 | X | X | *-------------------------------* Character Length 7 bits *-------------------------------* | X | X | X | X | 1 | 1 | X | X | *-------------------------------* Character Length 8 bits Bits 1 and 0 control the baud rate factor. *-------------------------------* | X | X | X | X | X | X | 0 | 0 | *-------------------------------* Synchronouó Modå foò IBÍ - typå data formats Š *-------------------------------* | X | X | X | X | X | X | 0 | 1 | *-------------------------------* Clock rate * 1 *-------------------------------* | X | X | X | X | X | X | 1 | 0 | *-------------------------------* Clock rate * 16 .pa Š *-------------------------------* | X | X | X | X | X | X | 1 | 1 | *-------------------------------* Clock rate * 64 Foò thå Morro÷ MD3¬  Rev® 2¬ thå bauä ratå factoò � shoulä bå seô tï thå Clocë ratå ª 1¶ setting® Settinç � thå  bauä  ratå  shoulä bå donå  witè  thå  bauä  ratå � generator® Thå documentatioî oæ ho÷ tï dï thió caî bå � founä  iî  twï differenô placeó thaô É kno÷  of®  Thå � firsô  ió  righô iî thå firsô issuå  of-- yoõ  guesseä � it--MOÒ  (Vol®  1¬  #1¬  Apriì 1984¬  p®  16© iî  Davå � Block'ó Ñ ¦ Á column® Thå otheò placå tï finä thió ió � anotheò   Davå   Blocë   creation/publication¬   Micrï � Decisioî Questionó anä Answeró (availablå froí Morrow¬ � Inc.) PART 2: PROGRAMMING EXAMPLES Aô lasô wå caî looë aô somå programminç  exampleó � thaô  sho÷ actuaì softwarå manipulatioî oæ thå  8251A® � Thå  followinç ió writteî iî Turbï Pascal¬  buô É havå � trieä  tï uså meaningfuì variablå nameó anä  hopefullù � cleaò  logiã  sï  thaô iô shouldn'ô bå  toï  harä  foò � someonå  tï  translatå  thió  froí  Turbï  tï  anotheò � language® Yoõ caî seô uð thå chið tï transmiô datá iî � thå  followinç  format®   Thå  bauä  ratå  haó   beeî � specifieä bù runninç thå prograí SETUP® Thå followinç � specificatioî ió foò · datá bits¬  eveî parity¬  anä ± � stoð bit®  Thå modå instructioî worä shoulä looë likå � thió wheî wå geô done: *-------------------------------* | 0 | 1 | 1 | 1 | 1 | 0 | 1 | 0 | *-------------------------------* .pa Š This is affected by the following code: program set_it_up; var baudrate, stopbits, parity, wordlength : integer; {************************************************* * * * p r o c e d u r e i n i t i a l i z e * * * *************************************************} procedure initialize_USART_mode( baudrate, stopbits, parity, wordlength : integer ); (Thå  codå  iî  thió procedurå ió parô  oæ  á  prograí � copyrighteä  bù  myself¬  buô  thå  methodó  useä  arå � commoî anä maù bå useä bù anyone® However¬ iô woulä � bå  greatlù  appreciateä iæ crediô werå giveî  tï  thå � author®  Somå codinç stylå haó beeî sacrificeä tï fiô � thå MOÒ 5° columî requirement® Thanx¬ Greç Havenga) const USART_command_status = 255; var program_word : byte; { this is where we will store the Mode Instruction } begin { procedure*initialize_USART_mode } { set all bits in the instruction word to zero } program_word := 0; { set baud rate factor to Clock * 16 } program_word := 2; { Set first bit in byte to 1 } if wordlength in [ 5, 6, 7, 8 ] then begin case wordlength of Š 5º û dï nothinç - leavå botè bitó ² anä ³ � at zero } ; 6: program_word := program_word or 4; { set bit 2 equal to 1 } 7: program_word := program_word or 8; { set bit 3 equal to 1 } 8: program_word := program_word or 12 { set bits 2 and 3 equal to 1 } end { case } end else begin writeln( 'Bad wordlength, 7 bits assumed ' ); program_word := program_word or 8 end; { if } if parity in [ 0, 1, 2 ] then begin case parity of 0: { none - leave bits 4 and 5 equal to 0 }; 1: { odd } program_word := program_word or 16; { Set bit 4 equal to one } 2: { even } program_word := program_word or 48 { Set bits 4 and 5 equal to one } end end else begin writeln( 'Bad Parity, even assumed ' ); program_word := program_word or 48 end; { if } if stopbits in [ 0, 1, 2 ] then begin case stopbits of 0: { 1 } program_word := program_word or 64; { Set bit 6 equal to 1 } 1: { 1.5 } program_word := program_word or 128; { Set bit 7 equal to 1 } 2: { 2 } program_word := program_word or 192 { Set bits 6 and 7 equal to 1 } Š end end else begin writeln( 'Bad Stopbit selection, 1 assumed ' ); program_word := program_word or 64 end; { if } û prograí Uarô } portÛ USART_command_status Ý :½ program_word» end; { procedure initialize_USART_mode } begin { main*program } baudrate = 300; stopbits = 1; parity = 1; wordlength = 7; initialize_USART_mode( baudrate, stopbits, parity, wordlength ); end. Well¬  thaô  concludeó thå prograí thaô describeó � ho÷ tï seô thå USARÔ communicationó mode®  No÷ wå  caî � movå oî tï actuallù communicatinç usinç thå USART® Wå � neeä tï kno÷ ho÷ tï dï fouò things: 1® Checë thå statuó oæ thå Command/Statuó � port® Thió donå bù usinç thå followinç �        code or some equivalent.         variable := port[255];        Wå  caî perforí logicaì ANÄ anä OÒ operationó oî �        thå bitó usinç thå followinç logic:         bit_two_set : boolean; { true/false }         .         .         .         bit_two_set := ( port[255] and 4 ) = 4;        bit_two_seô wilì havå thå valuå truå iæ biô �        twï oæ thå command/statuó porô ió set¬ �Š       false otherwise. 2. Seô bitó iî thå command/statuó port® Jusô �        follo÷ thå samå logiã aó giveî foò settinç �        bitó foò thå modå instruction® Seå prograí �        above for details. 3. Receivå datá froí USARÔ I/Ï port® Thió ió �        donå iî thå followinç manner® Wå wanô tï �        waiô foò thå command/statuó porô tï telì uó �        thaô iô haó á bytå foò us® Aô thió point¬ �        wå retrievå the byte from the I/O port.        û enable_for_reaä haó thå correcô bitó seô �         to ready the I/O port for a read }        port[255] := enable_for_read;         { wait for data }        while (port[255] and 2) <> 2 do         port[255] := enable_for_read; { retrieve data from port number 254 }        byte_of_data := port[254]; 4. Senä   datá   ouô  thå  I/Ï   port®   Thió   ió �        accomplisheä  bù logiã similaò tï #³ abovå  witè �        thå followinç code.        { set value of byte to be sent }        byte_of_data := ord( 'A' );        û waiô foò porô tï bå readù foò �         transmission of byte }        while (port[255] and 4) <> 4 do         { wait };        û enablå USARÔ I/Ï porô foò transmissioî oæ �         bytå bù settinç thå appropriatå bitó iî �         the Command/Status port }        port[255] := enable_for_write;        { send byte out port }        port[254] := byte_of_data; Interpreting the Status of the Port Belo÷ arå descriptionó oæ whaô happenó wheî � á particulaò biô ió seô iî thå Command/Statuó � porô bù writinç á bytå tï it. Š BIT DESCRIPTION --- -------------------------------------- · Enteò Hunô Modå - Useä foò synchronouó � communication only. 6   Internaì Reset“ - Bå careful¬ thió ió whaô �         wå uså foò resettinç thå chip» onlù dï �         thió wheî yoõ wanô tï reseô thå chið iî �         ordeò tï seô thå chip'ó communicatioî �         mode. µ Requesô tï senä - Setó thå RTÓ piî oî thå � chið tï zero® Useä tï controì thå RTÓ piî � oæ thå seriaì porô tï zerï. Foò aî actuaì � DB2µ piî number¬ consulô youò owneró � manuaì, Appendiø D. ´ Erroò Reseô - Makå surå thió biô ió seô � wheî yoõ wanô tï seô bitó · and/oò 2® Haó � thå effecô oæ resettinç erroò flags® Morå � on the error flags in the next section. 3 Senä Breaë Character“ - Seô thió biô tï �         forcå thå signaì oî thå TxÄ piî oæ thå �         chið low® Uså á zerï iî thió positioî foò �         normaì operation. 2 Receivå Enable“ - Seô thió biô wheî yoõ �         wanô tï bå ablå tï receivå á bytå froí �         porô 254® Don'ô forgeô tï seô biô ´ alonç �         witè thió onå oò iô won'ô work. 1 Datá Terminaì Readù - Settinç thió biô �         forceó thå DTRbaò piî oæ thå chið tï zero® �         Correspondó tï á piî oî thå DB2µ �         connector. Seå Appendiø Ä oæ youò owner'ó �         manual for an actual connector pin number. 0 Transmiô Enablå - Seô thió biô wheî yoõ �         wanô tï transmiô á characteò througè porô �         254. Thå followinç tablå explainó thå meaninç oæ eacè � biô oæ thå bytå reaä froí thå Command/Statuó port. BIT DESCRIPTION --- -------------------------------------- 7 Datá Seô Readù - Wheî thió biô ió set¬ iô �         indicateó thaô thå DSÒ piî oæ thå chið ió �         aô á zerï (low© level® Thå DSÒ piî ió �         connecteä tï thå DB2µ connectoò oî thå �Š        back of the machine. 6 SYNDET/BRKDEÔ - Useä foò synchronouó �         communication only. 5      Framinç Erroò - Thió flaç ió seô iæ á �         valiä stoð biô ió noô detecteä aô thå enä �         oæ everù character® Tï reseô it¬ uså thå �         Erroò Reseô biô wheî sendinç thå nexô �         instructioî tï thå Command/Statuó (255© �         port. 4 Overruî Erroò - Thió flaç ió seô wheî thå �         nexô bytå arriveó froí thå seriaì porô �         beforå thå lasô onå ió reaä froí it® Iæ �         yoõ geô thió one¬ youò otheò logiã ió toï �         slo÷ tï keeð uð witè thå datá ratå cominç �         intï thå port® Decreaså bauä rate¬ oò �         optimizå youò code® Reseô witè Erroò �         Reset as above. 3 Paritù Erroò - Thió flaç ió seô iæ á �         paritù erroò ió detecteä aó peò thå �         discussion of parity appearing above.         Reset with Error Reset as above. 2 TxÅ - Thió biô ió seô iæ thå I/Ï porô ió �         freå - readù tï accepô thå nexô bytå foò �         output. 1 RxRDÙ - Thió biô ió seô iæ therå ió á �         byte at the I/O port ready to be read. 0 TxRDY - Thió biô ió seô iæ thå I/Ï porô ió �         freå - readù tï accepô thå nexô bytå foò �         output. Review Sï  let'ó  recap®  Thå procedurå foò  usinç  thå � USARÔ ió aó followsº  First¬  dï á masteò reset»  geô � thå   chið  readù  tï  accepô  á  communicationó  modå � instructioî  - creatå  thå  instruction¬  settinç  thå � appropriatå  bits®  Senä thaô tï  thå  Command/Statuó � port®  Theî  checë  thå statuó oæ thå  Command/Statuó � porô  tï seå iæ yoõ caî transmiô oò neeä tï receivå  á � byte®  Seô thå Command/Statuó Porô tï thå appropriatå � value¬   settinç  bitó  tï  allo÷  eitheò  readinç  oò � writing¬  dependinç oî whicè functioî yoõ wisè tï  do® � Theî  eitheò senä á bytå tï oò receivå á bytå froí thå � I/Ï  port®   Continuå  tï  monitor¬   theî  seô   thå � Command/Statuó  porô sendinç oò receivinç byteó  untiì � yoõ arå througè usinç thå porô foò datá transfer. .pa Š That'ó  abouô  alì therå ió tï workinç  witè  thå � 8251A®  Iô  reallù doeó havå somå gooä featureó (eveî � thougè  É  heaò  Zilog'ó SIÏ anä PIÏ  chipó  arå  eveî � nicer®  Anù  MD1± owneró ouô therå witè  somå  insidå � scoop?)®  Iæ anyonå spotó anù erroró iî thió article¬ � pleaså  writå  tï må sï thaô É caî makå surå thaô  thå � materiaì  presenteä herå ió valiä  anä  correct®  (Iæ � therå arå significanô corrections¬  É wilì submiô theí � tï MOR.© É hopå thaô thió articlå caî helð yoõ becomå � morå  familiaò  witè  thå internaì  workingó  oæ  youò � computeò  tï  makå  iô  eveî morå  enjoyablå  tï  use® � Shoulä  anù questionó ariså concerninç  thió  article¬ � senä á Self-Addresseä Stampeä Envelope¬ anä É wilì trù � tï answeò youò questionó aó sooî aó besô É can®  Havå � á Gooä One¬ anä á gooä tomMorrow! Gregory A. Havenga 1212 Jasper Ave. Houghton, Michigan 49931 (906) 482 - 1421ÃÙÃí<== 103H IS RESTART ADDR RESOURCE by Ward Christensen (AS OF 03/03/81) (C) Copyright 1981 Type H for help, -H to delete help $"Permission for non-commercial use and distribution of object code granted"1(# ÍÍp ÍÖÍx¯24262!1(ͬÍ!N~þ ʸþ=Ê•þ-Êíþ.ÊNþ;ʹþ/ÊþAÊôþBÊþCÊ•þDʽþEÊ»þFÊ� þHÊÄþIÊ8þKÊÏþLÊ þMÊóþNÊÙþOÊ þPʪþQÊvþRÊD þSÊç þUÊþXÊtþZÊ þ?Êã ÍS? Ãí:Oþ Ú‹2©ÍSC/R = L command Ãí2O:©2NÃ:·Â,ÍS++Help has been deleted++ Ãí:OþHÂd:·ÊH!ÿ6I#")wG#w# <w#¯2*D}!&"/“OxšGwx±Ê># Ã1"##6ÃËÍS++Already deleted++ Ãí!NÍ*"ÃíÍSY/N purge all symbols & CTL?ÍÍÖ:NþYÊêþNÊíÃt!O~þ Ê‹ÍTþ ÊÀþ,‹#Õå>24ÍZ ORG áÑzÍ%{Íü>HÍâÍÖÕÍTþ ‹Á*##~·Êí++~‘#~˜Ú +~“#~šÚdåÅ#Få#~+þAÚp#~þ+Êpþ-ÊpÂáF>24#~ÍâÂ.ÍZ EQU Áá~·õÄ%+ñ~ÂTÍ%ÃWÍü>HÍâÍÖ¯24##~Í #ͬÃðáÁáÃd>26Nþ Êí!O~#þ ‡ÃCongratulations, you found the patch area!*åë*"Ñ!O~þ ÊþSÊœþ=Êþ,ÊîÍå*"áþ Êþ Êýþ,‹#ÕÍë"Ñ*å"*Ñ"þ ‹*ͬåÍó Í áåÍ~Íü#}æÌ}æÌ}æÂ.Íàá~þ ÚTþÚV>.Íâ#}æÊhæÌÃIÍàÍÖ":•:œÒÃí#Í#ë"ëþ,Êâþ Êâþ ÊíË!P~þ.´ÍÍDÒ·*F÷*^#V#~·ÊíëÍ ëF#~Íâ#ÂÇÍÖͬ÷:7î27ÂëÍSNo ÍSaddresses will print as comments Ãí*Í ÍÖÃí!O~þ ÊÍþ ‹ë"Ãí!O~þ Ê‹Íþ ÊSþ,ÊSþ ‹Õ#Íþ ‹Á*##~·Êí+~¸+ÚÂw~¹Ú~ƒw#~Šw+##~#…oÒa$Ãa:5·Â/2\2h!O:Pþ Ê‹þ:³:OÖ@2\##]ÍÍ~þ*ÊÇÍÍÉ"Ç~þ Êê#þ.ÊêÂÍ~þ Èþ.#ÈÃß> ÂêÉ>2;¯2<Ã>2<¯2;ï2<2;¯24:22 !O~þ Ê[þ,ÊOþ ÊOþ=ÊqÍë"ëþ Ê[þ ÊOþ,‹#Íë" ¯2 ͬ: ·Êo:=úíÃ}* :•: œÒí:;·ÊÇ*ë*:NþMž>A2Nê~ÍîÚÇ#ž~Íî#Òª+Íó ëÕ*ë>BÍ«Ñ>IÍ«*|µÊ*ëÍÚ##F>24Í�¯°Êþ#~þ\Â÷ÍÖÃáÍâÂéÍÖ*ëÍ–+Ú###~29þIÊgþEÊ õ#^#VÕ*ëÍQá"Dë¯24ñþSÊ”þHÊïþBÊïþWÊÄÍâÍS: INVALID CTL ENTRY Ãí͵¯24Ã[#Í{·Ê‹22~#þ,Ê8þ Ê8þ ÊíËÕ:/o: /g#>24ÍZDS |Í%}Íü>HÍâÍÖá"Ã[>24ÍZDW *ë*^#VÍÎ*##"Ã[ÍÖÃ[¯2:<24ÍZDB *ë*:9þH~Ê þ Ú6 þ Ú þÚr þ Ú6 Í%>HÍâ::Æ2:Ã; ö0Íâ#ë*#"ë:D»ÂS :EºÊÝ *ëÍ–Òé::Æ2:þÒé>,ÍâÃþ>'Íâ::<2:~Íâ~þ'Ìâ#ë*#"ë:D»Â  :EºÊØ å*ëÍ–áÒØ ::<2:þ&ÒÐ þÚÅ +~#þ ÊØ ~þ ÚÐ þÚ >'ÍâÃE >'ÍâÍÖÃ[ÍSSYMTBL=*Í *Í ÍÖÍSPC =*Í ÍÖÍSOFFSET=*Í ÍÖ*|µÊG ÍSCOMNTS=*Í *Í ÍÖÍSCTLTBL=*Í ~#¦##<ÂX +++Í ÍÖÍp ÃíÍS Memory open to *+Í ÃÖ!O~þ ÊÅ Íë"*"ëþ ÊÅ þ ʵ þ,‹#Íþ ‹*"*ëͬ*~#"»ÂÉ ~ºÂÉ Íó +Í ÍÖ:/<_ÿÃ5:/_:/WÉÍQ>24ÍZEND ¯24:5·Êí>ͲÍp¯25ÍS++ASM FILE CLOSED++ ÃíÍŒ:5·Â/"ÍÂe >2!.͇Ãn .Í‘ *Í„ "##6:!·Êã +͇Ãq1͇(ÍÂ ÍØ*:¼Ò5 åëÍ\Í·Âô á€:ºÂ« ÕÍS++TRUNCATED TO AVOID BDOS OVERLAY++ áÍ Íó Í ÍÖ€ÍÃí+Í Ãq1Í‹͉*Í„ "6ÿ#6ÿÃã ÍS++NO, THAT WOULD OVERLAY THE DISASSEMBLER BECAUSE OFFSET IS TOO SMALL: ÃÍØÍþÈþ ʇ þ ʇ þ ʇ ÍÀ s#r#å#Íþ ʺ þ ʺ w#ç ãpáÇ þ ÈþÊfþ:ÚÒ ÖÖ0ë))))…oëÍþÊfÃà ͌"ÍÂþ .͇>2!.ÍÂr *ÍO^#V#~#G·Ê6 ÍV > Ͳ~Ͳ# > Ͳ> Ͳà >ͲÍp:!·Êí:eþDÊí+͇Ã/zÍìͲzÍðͲ{ÍìͲ{Íðò+ÍÊ/1ÍÊ%Í‹>25¯24ÍOÍS++WRITING .ASM ENABLED Use Lfrom,to (or QLfrom,to for quiet) to list to disk Use Z command or E control to close the file++ Ãí͉*##6*à ÍS++NO FILE ACCESSES PERMITTED UNTIL .ASM CLOSED ÃíÍS++UNEXPECTED EOF Ãí!eâ!ew# ÂŒÉ!O~þ ʸþ/ÊÇþ-ÊþPÊ@Íþ ʲþ Ê¿þ,‹#~ͽÃíÍÐÍÚÃí*ë(Í–ÈÂÖÍS++None to change, I went back 40 ÃíÍåÕÍÐ^#V#~Õõ++ÍÚñáÑëÍ«á~þ Êíþ,‹#Íë"> 2Oà !P~þ Ê‹Íë">ëþ,‹#Íþ,‹#"Bë"@*B~õ#~þ,‹#ë*>ëñåͽáÍå*>">á~#þ,Êjþ ‹*@ë*>}“|šÒíͬÃgåÕõÍ–+Ú¸###ñѾáÈ2=Í–Ú :=ÍùÊZþK‹ÍÚÃG ë!ë~#¦+<Êõw#ÂêÃà+++ÉþIÈþWÈþBÈþSÈþEÈþHÉ:=þKÊ‹Íù‹Õå*~#¦##<Â###ë*|/g}/o+++Ú^!ýÿÁ+~{¹Â@z¸Â@`iÑs#r#:=wÉ##wÉÍS++CTL TBL FULL: INVOKING "/" TO COMPRESS IT++ Ã*~#¦+<7È#z¾+ØÂ¬{¾ÈØ###ÙÍ–û*ͬ^#V#z£<ÂËÃG ÕåÍ–Úä~Íâ#ÂÓ>:ÍâÍÖáÑÍÍëÍ >,Íâë~ÍâÍÖ#û*~#¦<Êí#~þIÊþWÊ#Ãë!ýÿ¾ëÂë#åÍÚáÃÍO*^#V#z£<ÊYÍV >,Ͳ~Ͳ> Ͳ> Ͳ#Ã5>ͲÍp:!·Êí1͇ÃÍØ*Íþʪþ,Êžþ:ÚŽÖÖ0ë))))…oëÍÃ}s#r#Íw#Ãw6ÿ#6ÿ:!·ÊG Ë ͉!O~þ;ÂÆ#~þ Ê9Í#þ Ê3þ Êßþ,‹åÍÚñÍdáå~þ Êí*s#r#Ñå#wþ Âü#"6ÿ#6ÿápÃí*~#¦+<7È#z¾+Â){¾È##~Í #ÃÍÃ<*ͬ^#V#z£<ÊíëÍ ë>;ÍâF#~ÍâÂTÍÖ#Ã<~#¦<È+ÕT]##~Í #~#O 24*ëÍ–ÚšHå~þ+Ê™þ-Ê™# ÂdáÍ4>:Íâ:7·Ê“ÍŠÍŠÍ�*Í ÍÖÚá¯24ÍÍ*Í >24ÍŠáÑÉÍQ*ë*" å*#"á~G!P~·Êœ O#~¹ÂÔ#~2=#~þ.ÄâÂé*:=æþÚþ Ò#þÚ #"_!å* ÉÃBÃEÃNÃWÃ`ÃlþÃ%ÃTÃZÃ`ÃtÃÖÍŠÍÃÖÍŠÍÃÖÍŠÍÙÃÖÍŠÍÍ…ÃoÍŠ* #" * ~þ Ú¢þ[Ò¢:=æþÚ¢þÒ¢~ÍÅ>'ÍâÍŠÍ�~þ Ú³Í%>HÍâÃÖÆ0ÍâÃÖÃÖÍŠ* ~ÍÙÍ…Í”ÕÍ–Òä:<·ÊôÑÕÍæÃôÍ4:7·ÊÍŠÍ�Ñz³>0Ê z·ÊÍ%{Íü>HÍâÃÖÑÃÖ{þ Ú Í%ÃÆ0à ÍŠ:;·ÊË:=æàÊËÍ”ÚJÚO>IͽÃË>WÃD>BÃDÍ«Ã%Í«ÃÖÍŠ* ~æö0ÍâÃÖÍŠ* ~ÍÍ…~ÃH>,Ãâ> Ãâ>;Ãâ* #^#VÉÍZDB >2=Ãv* ~æ!>Í ~Íâ#~þ.ÄâÉõ>'Íâñþ'ÂâõÍâñÃâ* ~æþÂ~æÏþÁÊþþÅÊþ>SÍâ>PÃâÍZPSWÉ* ~Ã* ~!NæÍ ~Ãâ…oÐ$Éþ Úüõ>0ÍâñÃü~Íâ#Â4ÉNZZ.NCC.POPEP.M.BCDEHLMAÿÎACI.øˆADC.ø€ADD.ÿÆADI.ø ANA.ÿæANI.ÇÄ(C...ÿÍ'CALLÿ/CMA.ÿ?CMC.ø¸CMP.ÿþCPI.ÿ'DAA.Ï DAD.ÇDCR.Ï DCX.ÿóDI..ÿûEI..ÿvHLT.ÿÛIN..ÇINR.ÏINX.ÇÂ(J...ÿÃ'JMP.ÿ:GLDA.ï LDAXÿ*‡LHLDÏLXI.À@ MOV.ÇMVI.ÿNOP.ø°ORA.ÿöORI.ÿÓOUT.ÿéPCHLÏÁPOP.ÏÅPUSHÇÀ R...ÿRAL.ÿRAR.ÿÉRET.ÿRRC.ÿRLC.ÇÇ RST.ø˜SBB.ÿÞSBI.ÿ"‡SHLDÿùSPHLÿ2GSTA.ïSTAXÿ7STC.ø�SUB.ÿÖSUI.ÿëXCHGø¨XRA.ÿîXRI.ÿãXTHL!L6L#zÍß{Íß!LÍDÚs#rÉåÕÅ*T]xÆ…o|Îg"##6++DM*F{½Â,z¼Ê3 Ã"ÁÑs#r#pÑ#wÂ;ÉÕå*ÑÕ##å~#·ÊŒ¸Úx‚OÍ¢ÊqÚŒá~#…oÒI$ÃIá++ÑÑ·ÉOÍ¢ÒeÃŒH͢ʌÒeá++"FáÑ7É*~#»Â¤~ºÊ³#~·7È#…oÒ™$Ù#~#G·À7É!OÍ~þ ÊÌþ,‹#~þ+Êæþ.‹ÕÍÑÍšÍùÃí! "”"–>�2™ÍxÊVÍ–ÚôÕÍ7ÑÊôë!O~#þ+ +6.#ÍH“ÍH!O~Íâ#~þ Â&ÍÖûHT]þ+Èþ-È Â:·Éþ ÊQw#ÂHÉÍS++NO SYM WITHIN 129 BYTES Ãí!—~ö02*~ÆOÅ++åë!œÍÖáÆOÍÖœÁÍÖÓw# ÂÖÉõÍìw#ñÍðw#Éæþ ÚùÆÆ0ÉõÍìÍâñÍðÃâ|Íü}Íü> Ãâ~Í0ÈÕÍ9Áë ëÃþ+Èþ-Èþ Èþ,Èþ É~#þ+Ê9þ-ÊF+õÍTñÀz/W{/_É~þ#Ê´þ.ʸþ$ÊÐþ@ÊÐ~Í*Èþ0Ú‹þ:Ú‡þAÚ‹þGÒ‹ÖÖ0ë))))…oë#Ãl~Í*Èþ0Ú‹þ:Ò‹åbk)))Ö0…_|ÎWá#Õ>2ͯ2ÕÍDÚ‹^#VáÉë*ë#~Éå!"H¯2|\Íá<ÀÍS++FILE NOT FOUND Ãíå*H|þÂ$ÅÕ\Í·ÑÁ!€Â+~#"HáÉþÚIÍS++UNEXPECTED EOF Ãí>wÃ$å\Í\Í<Ê‹¯2|!€"HáÉ\ͷœ\Í<ÀÍS++CLOSE ERROR ÃíÍS++WRITE ERROR Ãíå*Hw,"HáÀÅÕå\ͷœ!€"HáÑÁÉ> Íâ> Ãâ>*ÅÕå_Õ:6·ÌÑ:5!4¦{IJ{þ  : ·Ê !5áÑÁÉÍàL>N Í!M^#6 !M#~þ ÊÖþ,ÊHþaÚ,þ{Ò,æ_wÃ,:Oþ;Â,ÃÖ¯2426ã~Íâ~þ Ìn#~·Â[#ãÉÅÕåͬáÑÁÉ*"##6> 2O*+6I#6ÿ#6ÿ*|µÈ"6ÿ#6ÿɾÀ# ¢ÉÅÕå Í·ÊêÍþÊÈÍÖÃíÍS ABORT Y/N Íæ_þYÊÍÖÃíáÑÁÉþ Èþ Èþ È·Èþ Øþ?É€/)/ ???ASMCOMCTLSYMDOCaÚ,þ{Ò,æ_wÃ,:Oþ;Â,ÃÖ¯2426ã~Íâ~þ Ìn#~·Â[#ãÉÅÕåͬáÑÁÉ*"##6> 2O*+6I#6ÿ#6ÿ*|µÈ"6ÿ#6ÿɾÀ# ¢ÉÅÕå Í·ÊêÍþÊÈÍÖÃíÍS ABORT Y/N Íæ_þYÊÍÖÃíáÑÁÉþ Èþ Èþ È·Èþ Øþ?É€/)/ ???ASMCOMC#~þ ÊbG!e~·Êí#þ Â7~¸Â7~Íâ~#þ ÂG~þ ÊG¸ÊGÍÖÃíÍS Use ^S to stop/start help, C/R to quit A symbol is always preceeded by a ".": .BDOS A hex number has no "H": 5C All numbers default to hex. Use "#" for decimal numbers: #99 Use "$" or "@" for curr P.C.: L$-20 Arithmetic may combine any of above, with "+" and "-": L.FOO-#20 bracketed operands ([,addr]) are optional carriage return means same as L Use =x to change it to another 1-letter command -H Delete help function (pick up about 2K bytes) -nn Back P.C. up nn =x Change C/R to mean "x" ? Show statistics . Sort symbol table / Slash redundant I/W from ctl ; Dump comments table ;addr,\comment\ Put in comment ;addr, Delete comment ;;addr,\comment\ Enter lower case comment A[addr][,addr] Attempt to find DB/DW/INSTR B[addr][,addr] Build dflt syms C Dump ctl table Caddr Dump ctl from addr Caddr,type Add ctl entry (B,W,S,E,H,I) Caddr,K Kill ctl entry C/ Del most recent ctl C-n[,addr] Back up most recent ctl by n optionally, Laddr CPloaddr,hiaddr,type,length[,type,length...] Enter a pattern of control entries D[addr][,addr] Dump memory D=nn Change default dump size DS[.symbol] Dump symbol table Eaddr,.symbol Enter/replace symbol into table Eaddr,+ Enter sym as nearest lower + offset Faddr[,startaddr] Find 1st occurrence of addr F, Find next occurrence H Help with commands See also "-H" Hx Help with command "x" Iaddr,offset Increment every symbol from addr on, by "offset" K.symbol Kill symbol entry L[addr][,addr] List (Disassemble) L=nn Change default # lines in list M[addr][,addr] Make a DB then list (Disassemble) N No address comments toggle O Show current offset Oaddr Set offset for disassembly Ploaddr,hiaddr Prolog: ORG loaddr, EQU's for all syms now betw. lo - hi Q any command Quiet mode (no console out) Rname.type Read .COM, .DOC, .CTL, OR .SYM file Set offset before reading a .COM Set "Uaddr" before reading a .DOC Rname.* Read name.SYM, name.CTL, name.DOC Sname.type Save .ASM, .DOC, .CTL, OR .SYM file When saving .ASM, use "Lfrom,to" to list to disk, then "Z" to close the file. Sname.* Save name.SYM, name.CTL, name.DOC Uaddr Use addr for base of comments table X Purge all symbols and control Z Close .ASM file Ãí RESOURCE A disassembler for 8080 programs by Ward Christensen CP/M U.G. 1/80 Suggestions? Call me eve's at (312) 849-6279 ---------------- RESOURCE commands are inconsistent at best. - RESOURCE is a kludge based on years of disassembler experience and hacking, and was never "planned" - just coded sitting at a tube, and modified over 2 years before being contributed to the CP/M UG. For example, to kill a symbol: k.label but to kill a control value: caddr,k and to kill a comment: ;addr, but RESOURCE does the job like no other I have seen. ---------------- N-O-T-E: Pardon the editorial, but I feel hardware without good software is useless to 99% of us. Most good software has to be paid for. I strongly support the legitimate purchase of licensed software. I do not regularly use any programs which I have not purchased. (Yes, I do occasionally "try" one, but then buy it if I plan on using it). I have been asked by software businesses to NOT distribute RESOURCE - because of it's ability to produce good .asm source quickly. But, there are so many disassemblers out, why not a good, conversational one? Please use it in the spirit in which it was contributed: to enlarge your understanding of the micro- computer world around you, and to allow you to customize programs which you legitimately own, for your own use. "Semper non rippus offus" ---- NOTE: any command taking a hex address (Dnnnn, etc) may take a value in the form .label but arithmetic may not be performed. (i.e. d.start is ok, but d.start+8 not) ---------------- Overall structure of RESOURCE: It is a .COM file, which runs at 100H. It goes thru 1700 or so, then the stack. At 1800 is a 512 entry table for control commands. Each is 3 bytes long, and controls the format of the re-sourced list, i.e. is it DB, DS, DW, instructions, etc. At 1E00 is the start of the symbol table. It has no defined length as such. If it is not used, it occupies only 2 bytes. If you want to re-source something which is in memory, such as a PROM, a program previously loaded in high memory, "CP/M itself", or whatever, you can just do so. However, typically you want to disassemble a program which runs at 100H, which is were RESOURCE runs. Bob Van Valzah would have solved that by making resource relocatable and moving itself up under BDOS. I wasn't that industrious. Instead, RESOURCE uses the concept of an "invisible" OFFSET. After all, what do you care where it is as long as it LOOKS like it's at 100h? So, you set an offset. O2F00 sets it to 2F00 Hex. Reading a .COM file (RFOO.COM) causes it to come into 3000 on. If you say D100 or L100 it dumps or lists what LOOKS like your program. Internally, RESOURCE is adding the offset to the D and L addresses. What should you set the offset to? Well, that depends upon how many symbols you will use. O1F00 will load the program at 2000, thus allowing only 1E00-1FFF for symbols, i.e. 512 bytes or about 50-60 labels. If you didn't leave enough space, then used B to build a default symbol table, the table could run into and clobber your .com file! (easy recovery, however: just change the offset to being higher, and read in the .COM file again) Each entry takes 3 bytes + the symbol length, and if you like 7 byte labels like I do, that means 10 bytes/label. An offset of 2F00 should be adequate. If you want to put comments into the disassembled program, you will have to designate an area to Use for the comments. The U command (e.g. U4000) specifies what area is to be used. Before issuing the O (offset) command, do: L5 7 which will show the JMP to BDOS, which is the highest memory you may use. (Note if you have, for example, an empty 4K memory board in high memory, you can Use THAT for comments). Let's take an example: You have an 8K file, FOO.COM which you want to disassemble. It will have about 300 labels. 300 x 10 is 3000, or call it 4K (what's a K unless your tight). The symbol table starts at 1E00. 4K more is 2E00. Let's load the .COM at 2E00, so since it normally starts at 100H, the offset is 2D00. O2D00 is the command. We then RFOO.COM to read it in. It says 4E00 2100 which means it came into actual memory to 4E00, but 2100 if we are talking with respect to loading at 100. Thus, we could set our comments table up after the .COM program - say at 5000: U5000 The ? command shows the memory utilization for control, symbol, and comments entries. (no, I never put in anything to keep track of the .COM - you'll just have to do that yourself). If you ever want to dump real memory, you'll have to reset the offset to 0: O0 but then set it back. If you are not sure what it is, typing O will tell the current offset. Hoo, boy! Hope this kludge of documentation is enough to get you going - hmmm, better give you some of the gotcha's I've discovered... ---- WATCH FOR ---- * Symbols overflowing into the .COM. (Use ? command to see how full symbol table is) * Control entries overflowing into .SYM (altho I can't believe anyone will have a program with more than 512 control entries!!!) * Comments overflowing into BDOS (ug!!) * Using an offset which is not in free memory and overlaying BDOS or whatever. * The B(uild) command gobbling up too much when building a DB: "B" will take a DB 'GOBBELDY GOOK' followed by LXI H,FOO and take the LXI as a '!' (21H) so you'll have to manually stick a new "I" control entry in at the address of the LXI. You might also delete the incorrect "I" entry which RESOURCE stuck in (typically at the second byte of the LXI) * Trying to dump real memory without setting the offset back to 0. (then forgetting to set it back to its proper value) * Forgetting how big the .COM file you are disassembling was. * Using RESOURCE to rip off software (yes, I know, you heard that before, but only 3 in 100 needed to be told, and 2 in 100 needs to be told again, and 1 in 100 doesn't give a rat's fuzzy behind anyway!!) * Forgetting to take checkpoints when disassembling large files. You may even want to rotate the names under which things are saved: STEMP1.SYM STEMP1.CTL STEMP1.DOC * Missing a label: Suppose you have a control entry for a DW, resulting in: DFLT: ;172C DW 100H but somewhere in the program, the following exists: LDA 172DH Even if you did a B and have a label L172D, it won't show up since it's in the middle of a DW. Instead, do this: K.l172d kill the old label e172d,.dflt+1 put in the new label as a displacement off the beginning. * improperly disassembling DW's (see previous item). You might be tempted to make DFLT a DB so that DFLT: ;172C DB 0 L172D: ;172D DB 1 Note that while this disassembles and reassembles properly, it is not "as correct" as the technique used in the previous item. * Having the "B" command overlay your "E" control entry. What? Well, "B"uild is pretty dumb. If he finds 8 DB type characters in a row, he fires off a DB from then on until he runs out of those characters. Suppose your program was 200 long (ended at 3FF), and you had zeroed (aha! Nice DB candidates) memory there (there meaning at your offset address + whatever). Then you QB100,400 and viola!! RESOURCE overlaid your "E" control with a "B". ---------------- RESOURCE is relatively complete. (well, actually, the phrase "rampant featureitis" has been "mentioned"). ...But there's always another day, and another K... SO... Here's my "wish list" ..it might save you telling me YOU think such-and-such would be nice... * Targets of LHLD, SHLD should automatically be flagged as type DW in the control table. Ditto LDA and STA as DB or as second half of DW. Ditto targets of LXI as DB (?). * E5C,.FCB followed by E6C,.FCB+ should automatically calculate the appropriate displacement, and put it in the symbol table. * The comments facility should be enhanced to allow total SUBSTITUTION of entire line(s) of the code, i.e. at address such-and-such, replace the next 3 bytes with the following arbitrary line. This would help those "how do I explain what was being done" cases such as: LXI H,BUFFER AND 0FF00H * Add the ability to, in one instruction, rename a default (LXXXX) label to a meaningful name. ---------------- RESOURCE types an "*" prompt when it is loaded. You may then enter any of the following commands. Each command is a single letter followed by operands. Commas are shown as the delimiter, but a space will also work. ---------------- ---------------- ; Put comments into the program. (must execute 'u' command first, to assign area for comments to be placed) ;addr,comment enter a comment ;addr lists existing comment ; lists entire comments table ;addr, deletes existing comment note that '\' is treated as a new line, i.e. \test\ will be formatted: ; ;TEST ; ---------------- Attempt to find DB's while listing the program. - This command works just like 'L', but attempts to find DB's of 8 chars or longer. (see 'L' command for operand formats) ---------------- Build default sym tbl (LXXXX) labels for each - 2 byte operand encountered. Note 'B' is identical to 'L' except labels are built. (see 'L' command for operand formats) ---------------- Control table usage: - c dump ctl tbl cnnnn dump from starting cnnnn,x define format from nnnn to next entry. values of x: B = DB (attempts ASCII printable, 0DH, 0AH, 0) W = DW (attempts label) S = DW to next ctl entry I = instructions K = kill this ctl entry E = end of disassembly NOTE every control entry causes a "control break" (NO, RESOURCE was NOT written in RPG) which means a new line will be started. Thus if you have a string in memory which disassembles as: DB 'Invalid operand',0DH DB 0AH You might want to change it putting the 0DH,0AH together on the second line - just enter a "B" control entry for the address of the 0DH. The same technique could be used to make DB 'TYPESAVEDIR ERA REN ' appear as DB 'TYPE' DB 'SAVE' DB 'DIR ' DB 'ERA ' DB 'REN ' ---------------- dump: - dxxxx Dumps 80H from xxxx on daaaa,bbbb Dumps from aaaa thru bbbb d,bbbb Continues, thru bbbb d Continues, 80H more NOTE 80H is the default dump length. If you have a larger display, you can change the default via: d=nn nn is the HEX new default. For example, a 24 line tube could display 100H: d=100 or.. d=100,200 Defaults to 100, dumps 200-2ff ---------------- enter symbol: - ennnn,.symbol symbol may be of any length, and contain any char A-Z or 0-9, or "+" or "-". This allows: E5D,.FCB+1. Note the "+" is not checked, i.e. E5D,.FCB+2 would be wrong (assuming FCB is at 5C) but would be allowed to be entered. Note if you enter two symbols for the same address, whichever one is first alphabetically will show up on the disassembled listing. If you have a label which has the wrong address, you need not explicitly kill the old one before entering the new. A label which is spelled exactly the same as an existing one will replace the existing one even if the addresses are different. ---------------- Find occurrence of address or label. Note this function - runs until interrupted (press any key). fnnnn,ssss find address nnnn in memory. Start the search at ssss. Runs forever. Press any key to stop. f continue previous find command fnnnn find nnnn starting at address you last stopped at in the f command ---------------- kill symbol from table - k.symbol ---------------- list (disassemble). This command is used to list the - file, or to list it to disk after enabling the .ASM file save via 'SFILENAME.ASM' command l lists 10 lines from prev pc lssss,eeee lists from ssss to eeee l,eeee lists from current pc to eeee lssss lists 10 lines at ssss Note that if you have a control 'e' entry, then the list will stop when that address is found. This allows you to 'lstart,ffff'. The 10 line default may be changed via: L=nn where nn is a HEX line count, e.g. L=14 set to 20 lines/screen You can change the default and list, e.g. L=9,100 Dflt to 9 lines, list at 100. NOTE when using L to list the .ASM program to disk, you should either list the entire program at once using: Lssss,eeee or, you can list small pieces at a time. As long as you list again without specifying a starting address, (L or L,nnnn) then the output file will continue uninterrupted. You may do dump commands, and others, without affecting what is being written to disk. ---------------- offset for disassembly - o print current offset onnnn establish new offset (note the offset is always added to any address specified in an a, b, d, or l command. to dump real memory, the offset must be reset to 0 (O0) before the dump.) ---------------- prolog generation - this routine generates an - ORG instruction, and equates for any label outside of a given low-hi address pair. (the start and end addresses of your program). e.g. if disassembling from 100 to 3ff, it will generate 'fcb equ 5ch' if FCB is in the symbol table. In typical use, you would 'sfilename.asm' then use the P command to write the prolog, then the L command to write the program itself. Pstart addr,end addr quiet command: any command which is preceeded by a q - will be done 'quietly'. For example, to save a .asm program, you could just do: ql100,3ff or ql100,ffff if you have set the 'e' control in the control table. Another use is to build a default symbol table by taking a pass thru the program: QB100,xxxx ---------------- read .com, .ctl, .sym, or .doc file - rfilename.com reads in at offset+100h rfilename.ctl loads the ctl table rfilename.sym loads the sym file rfilename.doc loads the comments table (note 'u' command must have been issued) ---------------- save .asm, .ctl, .sym, or .doc file - sfilename.asm use 'l' command to write, z to end sfilename.CTL saves the CTL table stablename.sym saves the sym file sfilename.doc saves the comments table ---------------- use area of memory for comments table - unnnn such as ud000 if you had an open board at 0d000h ---------------- purge sym tbl and CTL tbl x - ---------------- close .asm file (note that a preferred way to close the .asm file is to have specified a control entry for the end address (e.g. c1ff,e)) z - -------------------------------------------- -------------------------------------------- Here is a sample of the RESOURCE usage. Given: a COM file (lets say test.com) which runs at 100 (as any good COM file should), and goes thru 2FF. lines preceeded with ---> are typed by you. ---> RESOURCE ---> o2200 set the offset to 2200, which means the program will read into 2200 + 100 = 2300. ---> rtest.com reads the com file into memory. system says: 2500 0300 which is the actual hi load addr, (2500) and the original hi load addr (300) REMEMBER this address (300) because you might want to put a "E" (end of assembly) control entry there. <<<>>> that all 'L' (disassembly list) and 'D' (dump) commands work with the offset added. Thus, you should learn to forget that the disassembler is in memory, and think of it as if your program were actually at 100. D100 will dump your program. also note: if the program being "RESOURCEd" will have a fairly large symbol table, then you will have to set the offset higher: o2f00 or some such. (the ? command will show symbol table usage: if your symbol table is nearing the .com file, then just set a new offset (higher) and re-load the .com) if you want to dump r-e-a-l memory, you would have to reset the offset to 0: o0 (but don't forget to reset it to 1f00 before continuing with your program.) If you are disassembling something which is in memory at it's correct address (such as looking at ccp) then don't set the offset. It defaults to 0 when dis is first loaded. ---> l100 list your program - lists "about" 10 lines. ---> d100 do a dump of your program. NOTE that typically here are the steps to disassembling a program which has just been read into memory: Use the dump command to find the ASCII DB areas. Note that the 'a' command may be used to automatically find the db's, but you must then check them to insure that they don't extend too far. All printable characters, 0dh, 0ah, and 00h are considered candidates for ascii db's. At least 8 characters in a row must be found to make sure that long sequences of mov instructions won't be taken as db's. Use the cnnnn,k command to kill erronious entries put in the control table by the a command, but then immediately put in the right address, such as via cnnnn,i if you wanted to scan the program for ascii db's yourself, use the 'c' (control) command to set the beginning and end of ascii areas. For example, a program which starts out: 0100 jmp start 0103 db 'copyright .....' 0117 start ..... would show up in the dump as: 0100 c3170144 4f50xxxx xxxxxxxx xxxxxxxx *...copyr ight....* 0110 xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx *xxxxxxxx ........* thus you would want to instruct the disassembler to switch to db mode at 103, and back to instruction mode at 117, thus: c103,b c117,i Continue doing this, bracketing every ascii db which is in the middle of instructions, by a b control instruction and an i control instruction. Note that multiple db's in a row need not have separate cnnnn,b instructions, but that these do cause a 'line break', i.e. if you have a table of ascii commands, for example: 02e5 db 'load' 02e9 db 'save' the disassembler would disassemble these as: 02e4 db 'loadsave' you could put in an additional control entry: c2e9,b, which would cause the disassembler to generate: 02e4 db 'load' 02e8 db 'save' which is much more readable and realistic. Note that before generating each byte of a db, a symbol table lookup is done to determine if there is a label at that location, and if so, a new line is started. Thus if 'loadlit' and 'savelit' were in the symbol table, as the labels on the 'load' and 'save' above, no separate 'b' control instruction would be required as the label would cause the break. <<<>>> that at this time the automatic label checking is n-o-t done for ds instructions. Make sure that each ds instrucion references only up to the next label. This means that multiple ds's in a row must each be explicitly entered into the control table. Presence of a label is not sufficient. ---- steps, continued: After building the control entries with cnnnn,b and cnnnn,i put in a control entry cnnnn,e which defines the address of the end of your program. The l command will then automatically stop there, and in addition, if you are in 'save xxx.asm' mode, the output .asm file will be closed. If you do mot define a control 'e' entry, then you will have to use the break facility to stop the l command (don't use control-c as that will re-boot cp/m). If you were writing an .asm file, you would have to user the z command to close the file. Next, you would list your program to determine how it looks. when you recognize a routine by it's function, insert a label. For example, if you saw that location 7ef was a character out routine (type) then enter a label into the symbol table: E7EF,.TYPE NOTE that all symbols start with a '.', so as to be dis- tinguished from hex data. NOTE that if you want the disassembler to make default labels for you, use b (for build labels) instead of l (for list program). The b commands causes lnnnn default labels to be inserted in the symbol table for every 2 byte operand encountered (LXI, SHLD, JMP, etc). It will undoubtedly make some you don't want, such as L0000. You will have to: K.L0000 kill label L0000 from the table. When you encounter data reference instructions, try to determine what type of area the instruction points to. Typically,, LXI instructions may point to a work area which should be defined as a DS, or to an ASCII string, in which case we will have already made it a 'b' control instruction. Operands of LHLD and SHLD instructions should be made DW instructions. For example if you encounter LHLD 0534H, then issue a control instruction: C534,W NOTE that whatever mode you are last in will remain in effect. Therefore if 534,w is the last entry in the control table, all data from there on will be taken to be DW's. Suppose that you determine that address 7cf is a 128 byte buffer for disk I/O. You want it to disassemble to: DKBUF ;07CF DS 80H You do this as follows: C7CF,S to start the DS C84F,B to define it's end, and E7CF,.DKBUF to put the symbol in the table. Continue, iteratively using the 'l' command and the 'c' and 'e' commands until you have the listing in a nice format. You will then probably want to save the control symbol, and comments tables. Or, you could have been saving them at checkpoint times (so if you make a major mistake you could go back to a previous one). To save a control file: sfilename.CTL (any filename, may include a: or b:) To save a symbol file: sfilename.sym To save a comments file: sfilename.doc (not ".com" of course) NOTE that the filetypes must be used as shown, but that any legal filename (or disk:filename such as b:xxxx.CTL) may be used. You could now control-c to return to CP/M, and come back later to resume your disassembly: RESOURCE o2200 rtemp.com rtemp.sym rtemp.ctl uxxxx (such as u4000) rtemp.doc This will take you back exactly where you left off. If you want to save a .asm file out to disk, do the following: Make sure that there is a control entry defining the end of the program (such as c200,e) or else you will have to specify the ending address and manually type a z command to close the file. sfilename.asm A message will indicate that the file is opened. Any subsequent a, b, or l command will have whatever is listed written to disk. Encountering a 'e' control, or typing a z command will then close the .asm file. The listing may be interrupted, and continued. Since the l command types only 10 lines, use laddr,ffff to list thru the end of the assembly. If this is the 'final' save of the .asm file, you will probably want to put an 'org' at the beginning of the output file, as well as generate equ instructions for any references outside of the program. For example, a typical cp/m program will have references to: bdos at 5 fcb at 5ch tbuff at 80h the 'p' (for prologue) command generates the org, then scans the symbol table and generates equates: BDOS EQU 05H FCB EQU 05CH (etc.) If you have a "e" control entry in your file, you can list as follows: laddr,ffff - the listing will continue until the "e" control entry is found additional commands: if you entered a label in the symbol table but now want to get rid of it: k.symbol note to rename a symbol, such as when you had a system- assigned lnnnn label but now want to make it meaningful: k.l0334 e334,.type you could even: e.l0334,.type k.l0334 but that takes more typing. here are some more commands: ? prints statistics on symbol and control table usage, etc. c prints the entire control table cnnnn prints the control table starting at address nnnn ds dumps the symbol table. Interrupt it by typing any key. ds.symbol starts dumping at the specified symbol, or the nearest symbol. thus "ds.f" starts the dump at the first label starting with the letter 'f'. ....have fun, and let me know of any problems or suggested improvements ------------------------ RESOURCE "Quick" command summary Any address may be replaced by .symbol i.e. D.START ;addr,comment Enter a comment ;addr Lists existing comment ; Lists entire comments table ;addr, Deletes existing comment A(see "L" for operands) Attempt to find DB's B(see "L" for operands) Build default sym tbl (Lxxxx) C Dump ctl tbl Cnnnn Dump ctl starting at nnnn Cnnnn,x Define format from nnnn (B,E,I,S,W) Dxxxx Dumps 80H from xxxx on Daaaa,bbbb Dumps from aaaa thru bbbb D,bbbb Dump thru bbbb D Dump 80H more D=nn nn= Hex dump size default. Ds Dumps the symbol table. Ds.symbol Sym dump starting at .symbol Ennnn,.symbol Enter symbol into table Fnnnn,ssss Find address nnnn starting at ssss F Continue previous find command Fnnnn Find nnnn K.symbol Kill symbol from symbol table L Lists 10 lines from prev pc Lssss,eeee Lists from ssss to eeee L,eeee Lists from current pc to eeee Lssss Lists 10 lines at ssss L=nn nn is hex list default # of lines O Print current offset Onnnn Establish new offset Pstart addr,end addr Generate program prolog Q Before any command suppresses console output: QB100,200 Rfilename.COM Reads in at offset+100h Rfilename.CTL Loads the ctl table Rfilename.SYM Loads the sym file Rfilename.DOC Loads the comments table (note Sfilename.ASM Save .ASM file. Write w/L, Z to end Sfilename.CTL Saves the CTL table Sfilename.SYM Saves the sym file Sfilename.DOS Saves the comments table Unnnn Use nnnn for comments table X Purge all symbols and control Z Write eof to .ASM file ( ? Prints statistics (sym, ctl, comments) ÍBRESOURCE by Ward Christensen (AS OF 01/08/80) $Copyright 1980Ñ Í!9"ý1ýÍw Memory open to *+ÍÊÍ Í ÍŒ¯2E2G1ýÍE!V~þ Êwþ;Ê2 þAÊÇþBÊÓþCÊ{ þDÊ,þEÊþFÊþKÊ3þLÊÛþOÊTþPÊ+þQÊëþRÊÎþSÊ, þUÊwþXÊøþZʉþ?Ê“¯2E2GÍw? ÃwÍwY/N purge all symbols & CTL?ÍE:VþYÊtþNÊwÃø!W~þ ÊçÍ×þ ÊAþ,Âç#Õå>2EÍ~ .LOC áÑzÍ�{ͼ>HÍÍ ÕÍ×þ ÂçÁ!"##~·Êw++~‘#~˜ÚŒ+~“#~šÚÙåÅ#Få#~+þAÚå#~þ+Êåþ-Êå™áF>2E#~ͰÍ~ = Áá~·Ä�+~ͼ>HÍÍ ¯2E##~Í‹#Í¿ÃráÁáÃÙ>2GV!W~#þ ÂöÄCongratulations, you found the patch area!*åë*1"Ñ!W~þ Ê‹þSÊ þ=Êîþ,Ê]Í×å*1"áþ Êvþ Êlþ,Âç#ÕÍ×ë"Ñ*å"*Ñ"þ Âç*Í¿åÍ|ÍÊáåÍÒ~ͼ#}æÌÒ}æÌÒ}æÂ�Íá~þ ÚÃþÚÅ>.Í#}æÊ׿ÌÒøÍÍ ":•:œÒŽÃw#Í×#ë"1ëþ,ÊQþ ÊQþ ÊwÃç!X~þ.Â#Ír͘Ò&*KÃ&!"^#V#~·ÊwëÍÊëF#~Í#Â6Í Í¿Ã&*ÍÊÍ Ãw!W~þ ÊHÍ×þ Âçë"Ãw:F·Â+ 2\2h!W:Xþ Êçþ:“:WÖ@2\##]͡͡É~þ ʾ#þ.ʾ¡~þ Èþ.#Èó> ¾É>2O¯2PÃâ>2PÃâ¯2P2O¯2E:32425!W~þ Ê*þ,Êþ Êþ=Ê(Í×ë"#ëþ Ê*þ Êþ,Âç#Í×ë"%¯25Í¿:5·Ê>:4=úwÃL*%:#•:$œÒw:O·Ê†*#ë*~ÍþÚ†#Â]~Íþ#Òi+Í|ëÕ*#ë>BÍž Ñ>IÍž *)|µÊÀ*#ë͇ ÚÀ##F>2EÍú¯°Ê½#~þ\¶Í ÛÍ¨Í *#ëÍQ +ÚÎ###~þIÊþEʉõ#^#VÕ*#ëÍ´á"Hë¯2EñþSÊHþBÊ©þWÊ{ÍÍw: INVALID CTL ENTRY Ãwͯ2EÃ*#Í×{·Êç23~#þ,Êþ Êþ ÊwÃçÕ:#/o:$/g#>2EÍ~.BLKB |Í�}ͼ>HÍÍ á"#Ã*>2EÍ~.WORD *#ë*^#VÍn*###"#Ã*Í Ã*¯2J<2EÍ~.BYTE *#ë*~þ Úæþ ÚÓþÚ"Í�>HÍ:JÆ2JÃëö0Í#ë*##"#ë:H»Â:IºÊ�*#ëÍêÒ£:JÆ2JþÒ£>,Íû>'Í:J<2J~Í~þ'Ì#ë*##"#ë:H»ÂP:IºÊˆå*#ëÍêáÒˆ:J<2Jþ#Ò€þÚu+~#þ ʈ~þ Ú€þÚ/>'ÍÃõ>'ÍÍ Ã*ÍwSYMTBL=!"ÍÊ*!ÍÊÍ ÍwPC =*#ÍÊÍ ÍwOFFSET=*ÍÊÍ *)|µÊ÷ÍwCOMNTS=*)ÍÊ*+ÍÊÍ ÍwCTLTBL=!ÍÊ~#¦##<Â+++ÍÊÍ Ãw!W~þ ÊSÍ×ë"/*"-ëþ ÊSþ ÊCþ,Âç#Í×þ Âç*"-*/ëÍ¿*-~#"-»ÂW~ºÂWåÕÍ|+ÍÊÑáÍÒÃW:/_: /WÉÍ´>2EÍ~.END ¯2E:F·Êw>Íæͧ¯2FÍw++ASM FILE CLOSED++ ÃwÍl:F·Â+ !e?͵Âö!"ÍÉ "!##6Ó!e9͵ÂG Í*|þÚz åëÍ\Í·Â/ á€Ã áÍÊÍ|ÍÊÍ €ÍÃw!e<͵ÂX Ãñ !eB͵ÂçÍû *)ÍÉ "+6ÿ#6ÿÓÍw++NO, THAT WOULD OVERLAY THE DISASSEMBLER BECAUSE OFFSET IS TOO SMALL: ÃHÍÍ>þÈþ ÊÌ þ ÊÌ þ ÊÌ Í s#r#å#Í>þ Êÿ þ Êÿ w#Ãì ãpáÃÌ þ ÈþÊb þ:Ú ÖÖ0ë))))…oëÍ>þÊb à Íl:F·Â+ !e?͵š !"͆^#V#~#G·Ês Í~ > Íæ~Íæ#Â] > Íæ> ÍæÃJ >ÍæͧÃwzͬÍæzͰÍæ{ͬÍæ{ͰÃæ!e<͵ʼ !eB͵Ê !e6͵Âç>2F¯2E͆Íw++WRITING .ASM ENABLED USE Z COMMAND OR E CONTROL TO CLOSE FILE++ ÃwÍû *+##6*)ÃG Íw++NO FILE ACCESSES PERMITTED UNTIL .ASM CLOSED ÃwÍw++UNEXPECTED EOF Ãw!W~þ Ês Í×þ Êm þ Ê– þ,Âç#~Ͱ ÃwåÕõÍQ +Ú« ###ñѾáÈ2QÍQ Úû :QþIÊM þWÊM þBÊM þSÊM þEÊM þKÂçë!ë~#¦+<Êõ w#Âê Ãà +++Ã÷:QþKÊçþEÊ þBÊ þWÊ þIÊ þSÂçÕå!~#¦##<Â! ###ë!ýÿÁ+~{¹Â3 z¸Â3 `iÑs#r#:QwÉ##wÉ!~#¦+<7È#z¾+ØÂg {¾ÈØ###ÃT ÍQ Ãv !Í¿^#V#z£<† Ã÷ÕåÍêÚŸ ~Í#ÂŽ >:ÍÍ áÑÍÒÍÒëÍÊ>,Íë~ÍÍ #Ãv ͆!^#V#z£<Êæ Í~ >,Íæ~Íæ> Íæ> Íæ#à>ÍæͧÃwÍ!Í>þÊ* þ,Ê þ:Ú ÖÖ0ë))))…oëÍ>Ãý s#r#Í>w#Ã÷ 6ÿ#6ÿÃ÷Íû !W~þ Ê« Í×#þ Ê¥ þ ÊQ þ,Âçå͇ Úc ÍÖ áå~þ Êw*+s#r#Ñå#wþ Ân #"+6ÿ#6ÿápÃw*)~#¦+<7È#z¾+› {¾È##~Í‹#Ê ͇ î *)Í¿^#V#z£<ÊwëÍÊë>;ÍF#~ÍÂÆ Í #î ~#¦<È+ÕT]##~Í‹#~#O 2E*#ëÍêÚöHå~þ+Êõþ-Êõ# ÂÇáÍŸ>:ÍÍõÍõÍú*#ÍÊÍ Ãöá¯2EÍÒÍÒ*#ÍÊ>2EÍõáÑÉÍ´¯2*#ë*"'ë#"#ëF!º~·Êÿ O#~¹Â0#~2Q#~þÂS:·ÃUþ.ÄÂE*#:Qæ?þÚxþ Òx#þÚu#"#_!–å*'ÉÍŒÃ-å*##"#áÉÃÛÃÞÃçÃðÃùÃÃZúÃÀÃÆÃÌÃàÃÃöÃÃÃ<ÃTÃaÃrÃ~Ã�Üà ÍõÍvà ÍõÍlà ÍõÍ?à ÍõÍlÍðÃÍõ*'#:·Ê#"'*'~þ ÚAþ[ÒA:QþÚAþÒA~Í+>'ÍÍõÍú~þ ÚRÍ�>HÍà Æ0Íà Íõ*'~Í?Íð*'#^#VÕÍêÒ„:P·Ê�ÑÕÍ:Ã�ÍŸÍõÍúÑz³>0Ê£z·Ê©Í�{ͼ>HÍà {þ ÚµÍ�áÆ0ãÍõÃgÍúÍà Íõ*'~æö0Íà Íõ*'~ÍlÍð~ÃáM|Ãg#"'F!Æ>XÃ>Y2#~þËÂ(͌͌#~2#F"'!ËÆõ"'ÍŒ#~2ñG!]ÆÍõ#~ÍŒ*#_ºòOëÃn~æåÍáÃ<Íõ~æö0ÍÃêÍõ:Íà Íõ:ÍÍðÃgÍõÍlÍðÍvà Íõ~Ãá:·>MÊ#~å:g·ò¿>-Í|/<þdÚÍÞdg>1Í|.Ö úØ,ÃÏÆ g>0…Í|Æ0áÍ!ß>,Ã> Ã>;ÃÍ~.BYTE >2QÃ*'~æ!©Í‹~Í#~þ.ÄÉõ>'Íñþ'ÂõÍñÃ*'~æþÂz~æÏþÁÊdþÅÊd>SÍ>PÃÍ~PSWÉ*'~Ãz*'~!¹æÍ‹~þMʣÅoÐ$Éþ Ú¼õ>0Íñü~Í#ŸÉNZZ.NCC.POPEP.M.BCDEHLMAÿË .....ÿí .....ÿÝ.....ÿý.....ÿÎACI..øˆADC..ø€ADD..ÿÆADI..ø ANA..ÿæANI..ÇÄC....ÿÍCALL.ÿ/CMA..ÿ?CMC..ø¸CMP..ÿþCPI..ÿDAA..Ï DAD..ÇDCR..Ï DCX..ÿóDI...ÿDJNZ.ÿûEI...ÿ@EXAF.ÿÙ@EXX..ÿvHLT..ÿÛIN...ÇINR..ÏINX..ÇÂJ....ÿÃJMP..ÿJMPR.ç JR...ÿ:LDA..ï LDAX.ÿ*LHLD.ÏLXI..À@ MOV..ÇMVI..ÿNOP..ø°ORA..ÿöORI..ÿÓOUT..ÿéPCHL.ÏÁPOP..ÏÅPUSH.ÇÀ R....ÿRAL..ÿRAR..ÿÉRET..ÿRRC..ÿRLC..ÇÇ RST..ø˜SBB..ÿÞSBI..ÿ"SHLD.ÿùSPHL.ÿ2STA..ïSTAX.ÿ7STC..ø�SUB..ÿÖSUI..ÿëXCHG.ø¨XRA..ÿîXRI..ÿãXTHL.À@BIT..À€RES..ÀÀSET..øRLCR.øRRCR.øRALR.øRARR.ø SLAR.ø(SRAR.ø8SRLR.ÿCSBCD.ÿSSDED.ÿsSSPD.ÿKLBCD.ÿ[LDED.ÿOSTAR.ÿ_LDAR.ÿGSTAI.ÿWLDAI.ÿ{LSPD.ÿDNEG..ÿERETN.ÿMRETI.ÿFIM0..ÿVIM1..ÿ^IM2..ÿ LDI..ÿ°LDIR.ÿ¨LDD..ÿ¸LDDR.ÿ¡CCI..ÿ±CCIR.ÿ©CCD..ÿ¹CCDR.ÿ¢INI..ÿ²INIR.ÿªIND..ÿºINDR.ÿ£OUTI.ÿ³OUTIRÿ«OUTD.ÿ»OUTDRÏBDSBC.ÏJDADC.ÿgRRD..ÿoRLD..Ç@INP..ÇAOUTP.ÏBDSBC.ÏJDADC.ÿ)DAD.Ï DAD.ÿáPOP..ÿåPUSH.ÿ"SID.ÿ*LID.ÿ#INX..ÿ+DCX..ÇF MOV..ÿ†ADD..ÿŽADC..ÿ–SUB..ÿžSBB..ÿ¦ANA..ÿ®XRA..ÿ¶ORA..ÿ¾CMP..øpMOV..ÿ4INR..ÿ5DCR..ÿ6MVI..ÿ!LXI..ÿùSPI.ÿãXTI.ÿéPCI.NNMMDDYY?????!T6L#zÍŸ{ÍŸ!T͘ÚWs#rÉåÕÅ*!T]xÆ…o|Îg"!##6++DM*K{½Â€z¼Ê‡ ÃvÁÑs#r#pÑ#wÂ�ÉÕå!"ÑÕ##å~#·Êà¸ÚÌÂÖO͵ÊÅÚàá~#…oÒ�$Ã�á++ÑÑ·ÉO͵Ò¹ÃàH͵ÊàÒ¹á++"KáÑ7É!"~#»Âø~ºÊ#~·7È#…oÒí$Ãí#~#G·À7É!WÍ×~þ Ê þ,Âç#~þ.ÂçÕÍrÑÍMÃwÉ!W~þ.ÂçÍr͘ÚçDM##~…o|Îg#ë*!{½Â_z¼ÊfÃU`i"!##6Ãw#å~#þ+Êvþ-Êvþ0Ú—þ:ÚvþAÚ—þ[ÚvÊç+ëáÉõͬw#ñͰw#Éæþ Ú¹ÆÆ0ÉõͬÍñͰÃ|ͼ}ͼ> Ã~þ.Êÿ~þ0Øþ:ÚñþAØþGÐÖÖ0ë))))…oë#ÃàÍrÕ͘Úç^#Vá~Éå!"M¯2|\Íá<ÀÍw++FILE NOT FOUND Ãwå*M|þÂ[ÅÕ\Í·ÑÁ!€Âb~#"MáÉþÚ€Íw++UNEXPECTED EOF Ãw>wÃ[å\Í\Í<Êç¯2|!€"MáÉ\Í·ÂÓ\Í<ÀÍw++CLOSE ERROR ÃwÍw++WRITE ERROR å*Mw,"MáÀÅÕå\Í·ÂÓ!€"MáÑÁÉ> Í> Ã>*ÅÕå_Õ:G·ÌÑ:F!E¦{Äæ{þ ÂA:5·ÊA!45áÑÁÉÍT>N Í!U^#6 !U#~þ Ê þaÚ`þ{Ò`æ_wÃ`¯2E2Gã~Í#~·Â#ãɯ2"!""!> 2W!ÿÿ">I2ÿ*)|µÈ"+6ÿ#6ÿɾÀ# µÉÅÕå Í·ÊúÍþÊÛÍ ÃwÍw ABORT Y/N Íæ_þYÊÃwáÑÁÉþ Èþ È·Èþ Øþ?ÉÑ Í*ý()€"ÿ ASMCOMCTLSYMDOC REZ80.COM is a Z-80 version of Ward Christensen's RESOURCE.COM. It uses TDL mnemonics. The operation of the program is the same as the original RESOURCE. END  CUSTOMIZATION OF WORDSTAR 3.3 ---------------------------------------------------------------------- Update 04/23/84 by Guy Gamble 74375,257 CPM SIG Compuserve Added about five new labels and verified Milton's with the set of labels found at the end of WS.INS file. This file contains a listing of all the known (to date) labels and patch addresses that I have been able to verify. If you know of any not listed here, please contact the following person so that this list can be updated for the benefit of all. Author: MILTON HICKS 222 Pacific Avenue Long Beach, CA 90802 Evenings: (213) 924-6429 or MicroNet [70250,467] ---------------------------------------------------------------------- LABEL ADDR DESCRIPTION SETTINGS PATVER 010C PATCH VERSION 0D MSGVER 010E MESSEGE VERSION WSVER 0110 WORDSTAR VERSION 1B COPRIT 0112 COPYRIGHT NOTICE SIGNON 014E WORDSTAR SIGN ON MESSAGE 0179 SERIAL NUMBER IDTEX 018A TERMINAL ID TEXT PIDTEX 01AE PRINTER ID TEXT PROTTX 01D2 PRINTER PROTOCOL TEXT PDRVTX 01F6 PORT DRIVER TEXT 0218 WRAPF 021B* WFLAGS 021B* ABSVAR 021B* 00 JUSTF 021C 00 VTABF 021D 00 SHYPF 021E 00 HYPF 021F 00 SHOWCF 0220* 00 SHOWDF 0220* SHOWHF 0220* SHOWMF 0221 00 PAGON 0222 00 PAGDIS 0223 00 LSPACE 0224 00 MOVETY 0225 00 DISDIR 0226 00 INPORT 0227 00 AUPAV 0228 00 MSGLEN 0229 00 INSTLD 022A 00 PCLAS 022B 00 SAVEND 022C 00 022D 00 PTEXTS 022E 00 022F 00 POVSTB 0230 00 0231 00 HITE 0232 SCREEN HEIGHT IN LINES (24) 18 WID 0233 SCREEN WIDTH IN COLUMNS (80) 50 CLEAD1 0234 CURSOR POS LEAD-IN 00 00 00 00 00 00 00 00 00 CLEAD2 023D CURSOR POS BETWEEN COL/LINE 00 00 00 00 00 CTRAIL 0242 CURSOR POS TRAIL 00 00 00 00 00 CB4LFG 0247 CURSOR POS #0 FOR COL FIRST 00 LINOFF 0248 CURSOR POS LINE OFFSET 00 COLOFF 0249 CURSOR POS COLUMN OFFSET 00 ASCUR 024A CURSOR POS #0 FOR BINARY 00 UCRPOS 024B CURSOR POS JUMP TO OWN CURSOR POS 00 00 00 00 00 ERAEOL 0250 ERASE TO END OF LINE ## 00 00 00 00 00 00 LINDEL 0257 DELETE LINE ## 00 00 00 00 00 00 LININS 025E INSERT LINE (CR) ## 00 00 00 00 00 00 00 00 IVON 0267 TURN ON HIGHLIGHTING ## 00 00 00 00 00 00 IVOFF 026E TURN OFF HIGHLIGHTING ## 00 00 00 00 00 00 TRMINI 0275 TERMINAL INITIALIZATION STRING ## 00 00 00 00 00 00 00 00 TRMUNI 027E TERMINAL TERMINATION STRING ## 00 00 00 00 00 00 00 00 INISUB 0287 SPECIAL INIT STRING FOR CUSTOM 00 00 xx UNISUB 028A SPECIAL TERM STRING FOR CUSTOM CUR POS 00 00 xx USELST 028D USE LAST COLUMN/ROW DISPLAY FLAG 00 DELCUS 028E DELAY AFTER CURSOR SET 00 DELMIS 028F DELAY AFTER OTHER FUNCTIONS 00 MEMAPV 0290 MEMORY-MAPPED DISPLAY TERMINAL 00 MEMADR 0291 ADDRESS OF FIRST CHAR, MEMORY-MAPPED 00 00 HIBIV 0293 INVERSE VIDEO BY HI ORDER BIT 00 HIBCUR 0294 DISPLAY CURSOR, MEMORY-MAPPED 00 CRBLIV 0295 FF TO BLINK CURSOR, MEMORY-MAPPED 00 ZAFCIN 0296 FIX FOR BACKSPACE ON DELETE 00 00 RUBFXF 0297 FIX FOR BACKSPACE ON DELETE 00 RFIXER 0299 FIX FOR BACKSPACE ON DELETE 00 UCNSTA 029A OPTIONAL USER CONSOLE CHAR READY 00 00 00 UCONI 029D OPTIONAL USER CONSOLE INPUT 00 00 00 UCONO 02A0 OPTIONAL USER CONSOLE OUTPUT 00 00 00 SWIN 02A3 OPTIONAL ROUTINE BEFORE DMA 00 00 00 TO VIDEO BOARD 00 00 00 SWOUT 02A9 OPTIONAL ROUTINE AFTER DMA 00 00 00 TO VIDEO BOARD 00 00 00 DEL1 02AF SHORT DELAY - CURSOR BLINK 03 DEL2 02B0 MEDIUM-SHORT DELAY - CURSOR BLINK 09 DEL3 02B1 MEDIUM-LONG DELAY - TO PREFIX MENUS 19 DEL4 02B2 LONG DELAY - TIME FOR NOTE DISPLAYS 40 DEL5 02B3 DELAY UNTIL SCREEN REDISPLAY 09 TRSCRS 02B4 FOR TRS-80 ONLY 00 TRSCIF 02B5 FOR TRS-80 ONLY 00 HETHBS 02B6 FOR LIFEBOAT CP/M FOR HEATH-89 00 APLFLG 02B7 FOR APPLE ONLY 00 MPMFLG 02B8 MP/M FLAG 00 DEFDSK 02B9 LOOK FOR WSOVLY1.OVR AFTER DEFAULT 01 SCRLSZ 02BA # OF COLUMNS FOR HORIZONTAL SCROLL 14 MORPAT 02CB USER PATCHED CURSOR POS ROUTINE 00 | | | PBGMEM 034B TOP END ADDRESS OF WORDSTAR 00 00 ITHELP 034D INITIAL HELP LEVEL 02 NITHLF 034E =0 FOR MAXIMUM HELP MESSAGE FF ITITOG 034F INSERT: =0, OFF; =FF, ON FF ITDSDR 0350 NO-FILE DIRECTORY =0, OFF; =FF, ON FF INITPF| 0351 LINE HEIGHT, 1/48'S 08 | PAPER LENGTH IN LINES (66) 42 | PAPER LENGTH IN 1/48'S 02,10 | LINE HEIGHT AGAIN 08 | MARGIN AT TOP IN LINES 03 | MARGIN AT TOP IN 1/48'S 00,18 | LINE HEIGHT AGAIN 08 | HEADING MARGIN IN LINES 02 | HEADING MARGIN IN 1/48'S 00,10 | LINE HEIGHT AGAIN 08 | BOTTOM MARGIN IN LINES 08 | BOTTOM MARGIN IN 1/48'S 00,40 | LINE HEIGHT AGAIN 08 | FOOTING MARGIN IN LINES 02 | FOOTING MARGIN IN 1/48'S 00,10 | LINE HEIGHT AGAIN 08 | =0 FOR STANDARD CHAR WIDTH 00 | STD CHAR WIDTH IN 1/120'S 0C | ALT CHAR WIDTH IN 1/120'S 0A | PAGE OFFSET IN CHARS 08 INITLM 036A INITIAL LEFT MARGIN LESS 1 00 INITRM 036B INITIAL RHT MARGIN LESS 1 UP TO WID-4 40 INITSR 036C INITIAL SUB/SUPER-SCRIPT ROLL IN 1/48'S 03 INITWF| 036D WORD WRAP FLAG, OFF=0; ON=FF FF | JUSTIFY FLAG, OFF=0; ON=FF FF | VARIABLE TABS FLAG, OFF=0; ON=FF FF | SOFT HYPHEN FLAG, OFF=0; ON=FF 00 | HYPEN-HELP FLAG, OFF=0; ON=FF FF | PRINT CONTROL CHARS FLAG, OFF=0; ON=FF FF | RULER LINE DISPLAY, OFF=0; ON=FF FF | PAGE BREAK DETERMINATION, OFF=0; ON=F FF | PAGE BREAK DISPLAY, OFF=0; ON=FF FF | LINE SPACING 01 | 0=BLOCK, FF=COLUMN MODE 00 NONDOC 0378 DIRECT ENTRY 0=DOC, FF=NON-DOC EDIT 00 DOTSON 0379 FF=ENABLE, 0=DISABLE DOT COMMANDS 00 DECCHR 037A DECIMAL POINT CHARACTER 2E DOTCHR 037B CHAR TO BEGIN 'DOT' COMMANDS 2E BLNCHR 0386 NON-BREAK SPACE CHAR (^O) 0F CMTCHR 0387 00 ENDEXP 0388 00 RVELIM 0389 DELIMITER FOR DATA VALUES 2C RVQUOT 038A DELIMITER FOR ENCLOSED VALUES 22 038B 00 TXBACK 038C 00 038D 00 VARCH1 038E DELIMITER THAT INTRODUCES VARIABLES 26 VARCH2 038F DELIMITER THAT TERIMATES VARIABLE 26 VAROPC 0390 CHARACTER AFTER NAME B4 OPTION LETTERS 2F 0391 OPTION LETTER FOR OMIT LINE IF VBL NULL 4F 0392 00 0393 00 0394 00 0395 00 COMPOP 0396 00 LOGICP 03B7 00 HZONE 03C9 HYPHENATION CRITERION 00 00 00 00 00 VOWTAB 03CE TABLE OF VOWELS 00 00 00 00 00 NONCON 03D3 TABLE OF NON-CONSONANT LETTERS 00 00 00 00 00 00 00 00 00 00 BOFCHR 03DD BEGINNING OF FILE FLAG 3A CONCHR 03DE FILE LINE CONTINUATION FLAG 2B EOFCHR 03DF END OF FILE FLAG 2E FDTCHR 03E0 MERGE-PRINT COMMAND FLAG 4D HARDCR 03E1 HARD CR FLAG 3C LFCHR 03E2 LINE ENDS IN LF W/O CR FLAG 4A OVPCHR 03E3 OVERPRINT LINE FLAG 2D PAGCHR 03E4 END OF PAGE FLAG 50 SOFTCR 03E5 SOFT CR FLAG 20 03E6 00 SOFHYC 03E7 CHARACTER USED FOR SOFT HYPHENS AD PAGFIL 03E8 CHARACTER USED FOR PAGE BREAKS 2D MARKS | 03E9 CHARACTER USED FOR START OF BLOCKS 42 | CHARACTER USED FOR END OF BLOCKS 4B | 00 | 00 | 00 | CHARACTER USED FOR USER MARKS 00 00 00 | 00 00 00 | 00 00 00 | 00 PODBLK| 03F8 DISK FILE OUTPUT DEFAULT, 0=NO, FF=YES 00 | USE FORM FEEDS, 0=NO, FF=YES 00 | SUPPRESS PAGE FORMATTING, 0=NO, FF=YES 00 | PAUSE BETWEEN PAGES, 0=NO, FF=YES 00 NOUFF 03FC #0 FOR SUPPRESS FORM FEED QUESTION 00 ITPOPN 03FD PRINT PAGE NUMBERS, 0=ON, FF=OFF 00 ITMIJ 03FE MICROJUSTIFY SWITCH, FF=ON, 0=OFF FF ITBIP 03FF BI-DIRECTIONAL PRINT, FF=ON, 0=OFF FF FNWSCM 0400 NAME OF WORDSTAR PROGRAM WS.COM DSKTNA 040C NAME OF MESSAGE FILE WSMSGS.OVR FNOVLY 0418 NAME OF OVERLAY FILE WSOVLY1.OVR FNMRGP 0424 NAME OF MERGE-PRINT OVERLAY MAILMRGE.OVR AUTOBS 0430 AUTO BACK-SPACE TABLE 00 00 00 00 00 00 00 00 00 00 00 00 BSCHR 043B AUTO BACK-SPACE CHARACTER 00 NOFTAB 043C 00 VTAB 0489 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0499 SET HELP LEVELS ^JH 00 00 xx xx 049D MOVE CURSOR LEFT ^S 00 00 xx xx 04A1 BACKSPACE ^H 00 00 xx xx 04A5 MOVE CURSOR RIGHT ^D 00 00 xx xx 04A9 MOVE CURSOR LEFT WORD ^A 00 00 xx xx 04AD MOVE CURSOR RIGHT WORD ^F 00 00 xx xx 04B1 MOVE CURSOR DOWN ^X 00 00 xx xx 04B5 MOVE CURSOR UP ^E 00 00 xx xx 04B9 MOVE CURSOR TO LEFT MARGIN ^QS 00 00 xx xx 04BD MOVE CURSOR TO END OF LINE ^QD 00 00 xx xx 04C1 CURSOR TO BOTTOM OF SCREEN ^QX 00 00 xx xx 04C5 CURSOR HOME ^QE 00 00 xx xx 04C9 CURSOR BLOCK-BEGINNING ^KB 00 00 xx xx 04CD CURSOR BLOCK-END ^KK 00 00 xx xx 04D1 CURSOR POSITION - ^QP 00 00 xx BEFORE PREVIOUS COMMAND xx 04D5 CURSOR TO SOURCE, etc. ^QV 00 00 xx xx 04D9 CURSOR TO MARKER 0 ^Q0 00 00 xx xx 04DD " " " 1 ^Q1 00 00 xx xx 04E1 " " " 2 ^Q2 00 00 xx xx 04E5 " " " 3 ^Q3 00 00 xx xx 04E9 " " " 4 ^Q4 00 00 xx xx 04ED " " " 5 ^Q5 00 00 xx xx 04F1 " " " 6 ^Q6 00 00 xx xx 04F5 " " " 7 ^Q7 00 00 xx xx 04F9 " " " 8 ^Q8 00 00 xx xx 04FD " " " 9 ^Q9 00 00 xx xx 0501 MOVE TO TOP OF FILE ^QR 00 00 xx xx 0505 MOVE TO BOTTOM OF FILE ^QC 00 00 xx xx 0509 FIND ^QF 00 00 xx xx 050D FIND & REPLACE ^QA 00 00 xx xx 0511 SET LEFT MARGIN ^QL 00 00 xx xx 0515 SCROLL DOWN CONTINUOUSLY ^QW 00 00 xx xx 0519 SCROLL UP CONTINUOUSLY ^QZ 00 00 xx xx 051D DELETE TO BEGINNING OF LINE ^Q 00 00 xx xx 0521 (SAME AS ^Q ) ^Q_ 00 00 xx xx 0525 ERASE TO END OF LINE ^QY 00 00 xx xx 0529 REPEAT NEXT COMMAND ^QQ 00 00 xx xx 052D REPEAT FIND & REPLACE ^L 00 00 xx xx 0531 MOVE SCREEN UP ONE LINE ^Z 00 00 xx xx 0535 MOVE SCREEN DOWN ONE LINE ^W 00 00 xx xx 0539 SCROLL DOWN SCREENFUL ^R 00 00 xx xx 053D SCROLL UP SCREENFUL ^C 00 00 xx xx 0541 DELETE CHARACTER LEFT 00 00 xx xx 0545 SAME AS ^_ 00 00 xx xx 0549 DELETE CHARACTER RIGHT ^G 00 00 xx xx 054D DELETE LINE ^Y 00 00 xx xx 0551 ERASE WORD TO RIGHT ^T 00 00 xx xx 0555 INSERT MODE ON/OFF ^V 00 00 xx xx 0559 REFORMAT TO END OF PARAGRAPH ^B 00 00 xx xx 055D INSERT LINE ^N 00 00 xx xx 0561 TAB 00 00 xx xx 0565 CARRIAGE RETURN 00 00 xx xx 0569 PRINT COMMAND PREFIX ^P 00 00 xx xx 056D HIDE/DISPLAY MARKED BLOCK ^KH 00 00 xx xx 0571 MARK/HIDE BLOCK BEGINNING ^KB 00 00 xx xx 0575 MARK BLOCK END ^KK 00 00 xx xx 0579 SET/HIDE MARKER 0 ^K0 00 00 xx xx 057D " " 1 ^K1 00 00 xx xx 0581 " " 2 ^K2 00 00 xx xx 0585 " " 3 ^K3 00 00 xx xx 0589 " " 4 ^K4 00 00 xx xx 058D " " 5 ^K5 00 00 xx xx 0591 " " 6 ^K6 00 00 xx xx 0595 " " 7 ^K7 00 00 xx xx 0599 " " 8 ^K8 00 00 xx xx 059D " " 9 ^K9 00 00 xx xx 05A1 MOVE BLOCK ^KV 00 00 xx xx 05A5 COPY BLOCK ^KC 00 00 xx xx 05A9 DELETE BLOCK ^KY 00 00 xx xx 05AD COLUMN MODE ON/OFF ^KN 00 00 xx xx 05B1 ^KZ 00 00 xx xx 05B5 INTERRUPT COMMAND IN PROGRESS ^U 00 00 xx xx 05B9 DONE-SAVE-EXIT ^KX 00 00 xx xx 05BD DONE-SAVE-RETURN TO MENU ^KD 00 00 xx xx 05C1 SAVE-CONTINUE EDIT ^KS 00 00 xx xx 05C5 ABANDON EDIT-RETURN TO MENU ^KQ 00 00 xx xx 05C9 INSERT/READ FILE INTO TEXT ^KR 00 00 xx xx 05CD WRITE BLOCK TO ANOTHER FILE ^KW 00 00 xx xx 05D1 DELETE FILE ^KJ 00 00 xx xx 05D5 DIRECTORY ON/OFF ^KF 00 00 xx xx 05D9 PRINT FILE ^KP 00 00 xx xx 05DD CHANGED LOGGED DISK ^KL 00 00 xx xx 05E1 COPY FILE ^KO 00 00 xx xx 05E5 RENAME FILE ^KE 00 00 xx xx 05E9 LEFT MARGIN SET ^OL 00 00 xx xx 05ED RIGHT MARGIN SET ^OR 00 00 xx xx 05F1 TAB SET ^OI 00 00 xx xx 05F5 TAB CLEAR ^ON 00 00 xx xx 05F9 SET MARGIN/TABS FROM FILE LINE ^OF 00 00 xx xx 05FD WORD WRAP ON/OFF ^OW 00 00 xx xx 0601 JUSTIFICATION ON/OFF ^OJ 00 00 xx xx 0605 VARIABLE TABBING ON/OFF ^OV 00 00 xx xx 0609 DOT COMMAND DISPLAY ON/OFF ^OD 00 00 xx xx 060D RULER DISPLAY ON/OFF ^OT 00 00 xx xx 0611 PAGE BREAK DISPLAY ON/OFF ^OP 00 00 xx xx 0615 SOFT HYPHEN ENTRY ON/OFF ^OE 00 00 xx xx 0619 HYPHEN HELP ON/OFF ^OH 00 00 xx xx 061D PARAGRAPH TAB ^OG 00 00 xx xx 0621 MARGIN RELEASE ^OX 00 00 xx xx 0625 CENTER LINE ^OC 00 00 xx xx 0629 LINE SPACE SETTING ^OS 00 00 xx xx 062D PRINT DIRECTIVES ^JD 00 00 xx xx 0631 EXPLAIN STATUS LINE ^JS 00 00 xx xx 0635 EXPLAIN FLAGS ^JF 00 00 xx xx 0639 EXPLAIN PLACE MARKERS ^JP 00 00 xx xx 063D EXPLAIN PARAGRAPH REFORM ^JB 00 00 xx xx 0641 EXPLAIN TABS AND MARGINS ^JM 00 00 xx xx 0645 COMMAND INDEX ^JI 00 00 xx xx 0649 EXPLAIN MOVING TEXT ^JV 00 00 xx xx 064B EXPLAIN RULER LINE ^JR 00 00 xx xx 0651 ^JA 00 00 xx xx XTAB 0655 00 USER4 FPTAB 067A 00 CLCHR 0691 00 CRCHR 0692 00 LITCHR 0693 00 DIRCH 0694 00 00 00 STPCHR 0697 00 ERELCH 0698 00 POSMTH 0699 CHARACTERISTIC OF PRINTER 00 BLDSTR 069A NUMBER OF STRIKES FOR BOLDFACE 00 DBLSTR 069B NUMBER OF STRIKES FOR DOUBLE-STRIKE 00 PSCRLF 069C STRING TO ADVANCE TO NEXT LINE ## 00 00 00 00 00 00 00 00 00 00 PSCR 06A7 STRING TO RETURN CARRIAGE TO SOL ## 00 00 00 00 00 00 PSHALF 06AE AND HALF LINE-FEED 00 00 00 00 00 00 00 PBACKS 06B5 PRINT BACKSPACE 00 00 00 00 00 00 PALT 06BB SET ALTERNATE CHARACTER WIDTH ^PA 00 00 00 00 00 PSTD 06C0 RESET STANDARD CHARACTER WIDTH ^PN 00 00 00 00 00 ROLUP 06C5 ROLL CARRIAGE UP PARTIAL LINE ^PT 00 00 00 00 00 ROLDOW 06CA ROLL CARRIAGE DOWN PARTIAL LINE ^PV 00 00 00 00 00 USR1 06CF USER FUNCTION #1 ^PQ 00 00 00 00 00 USR2 06D4 USER FUNCTION #2 ^PW 00 00 00 00 00 USR3 06D9 USER FUNCTION #3 ^PE 00 00 00 00 00 USR4 06DE USER FUNCTION #4 ^PR 00 00 00 00 00 RIBBON 06E3 CHANGE TO ALTERNATE COLOR RIBBON ^PY 00 00 00 00 00 RIBOFF 06E8 CHANGE TO BLACK RIBBON ^PN 00 00 00 00 00 PSINIT 06ED STRING TO INITIALIZE PRINTER 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 PSFINI 06FE STRING TO TERMINATE PRINTING 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 SOCHR 070F CHARACTER FOR STRIKEOUT 2D ULCHR 0710 CHARACTER FOR UNDERLINING 5F PRINIT 0711 CUSTOM PRINTER INIT STRING 00 00 00 PRFINI 0714 CUSTOM PRINTER TERM STRING 00 00 00 CSWTCH 0717 WHERE TO SEND OUTPUT 01 00 00 HAVBSY 0718 00 LIBSY 0719 BUSY TEST ENTRY 00 00 00 LISEND 071C OUTPUT CHARACTER 00 00 00 00 00 00 00 00 LISINP 0724 INPUT CHARACTER 00 00 00 POBSY 0727 PORT DRIVER STATUS ENTRY 00 POSTAT 0728 OUTPUT STATUS PORT # 00 00 00 POMASK 072B WHICH BIT IS OF INTEREST 00 00 POOM 072D FOR PRINTER READY 00 00 00 00 00 POSEND 0732 PORT DRIVER SEND CHAR ENTRY 00 POOP 0733 OUTPUT DATA PORT 00 00 00 POINP 0736 PORT DRIVER INPUT CHAR ENTRY 00 PISTAT 0737 INPUT STATUS PORT 00 00 00 POINSK 073A WHICH BIT IS OF INTEREST 00 00 POIM 073C FOR INPUT CHAR READY 00 00 00 00 POIP 0740 INPUT DATA PORT 00 00 00 00 PUBSY 0744 ENTRY POINT CSWTCH = 2 00 00 00 PUSEND 0747 PRINT CHARACTER 00 00 00 PUINP 074A INPUT CHARACTER 00 00 00 ACBSY 074D BUSY TEST ENTRY 00 00 00 ACSEND 0750 SEND A CHARACTER 00 00 00 00 00 00 00 00 00 ACINP 0759 INPUT A CHARACTER CSWTCH = 4 00 00 00 00 00 00 00 00 ACFIN 0763 EXIT ROUTINE 00 ACSTA1 076F RESET IOBYTE 00 00 00 ACSTAR 076C ENTRY ROUTINE 00 00 00 00 00 CONFIE 0774 SET IOBYTE 00 00 00 00 PROTCL 0778 SET PRINTER PROTOCAL TYPE 00 EAKBSZ 0779 ETX/ACK MESSAGE LENGTH 00 USER5 DVMILE 077A VERTICAL MOTION INDEX LEADIN STRING 00 00 00 00 00 00 00 00 00 DVMITR 077F 00 DVMMIN 0784 MAXIMUM DVMILE (FOR 0) 00 00 DVMRNG 0786 MINIMUM DVMILE 00 00 DHMILE 0788 HORIZONTAL MOTION INDEX LEADIN STRING 00 00 00 00 00 DHMIFG 078D 00 DHMIN 078E MAXIMUM DHMILE 00 00 DHRNG 0790 MINIMUM DHMILE 00 00 DFWD 0792 SET FORWARD PRINT 00 00 00 00 DBAK 0797 SET BACKWARD PRINT 00 00 00 00 00 DSP 079C FORWARD SPACE 00 00 00 00 00 DBS 07A1 BACKWARD SPACE 00 00 00 00 00 DLF 07A6 LINE FEED VMI 00 00 00 00 00 DRLF 07AB REVERSE LINE FEED 00 00 00 00 00 DPHSPC 07B0 PRINT PHANTOM SPACE 00 00 00 00 DPHRUB 07B4 PRINT PHANTOM RUBOUT 00 00 00 00 DNPROS 07B8 SUPPRESS PROPOR SPACING 0=ON, FF=OFF 00 DMJWB 07B9 ALTER MICROJUST. ALGORITHM 0=NO, FF=ALT 00 PSTAB 07BA PROPORTIONAL SPACING TABLE 00.... .... 083A END OF USER AREA ----------------------------------------------------------------- For users desiring to incorporate PROPORTIONAL SPACING into WS for their precision printers, an instruction manual is available for $20.00 from: Writing Consultants 11 Creek Bend Drive, Suite 144 Fairport, New York 14450 1-800-227-3800 ext. 7018 (toll free) ----------------------------------------------------------------- **** THE END FOR NOW **** WS33MSG.PAT 04/23/84 Wordstar 3.3 (Osborne Executive) This patch will bypass the time consuming signon messeges that come up when Wordstar is started. Put a working copy of WS.COM in drive B. A>SID B:WS.COM <----Read the WS.COM SID VERS 3.0 NEXT MSZE PC END 4600 4600 0100 D7FF #A3CF1 <----You type in these lines 3CF1 JMP 3D27 #W B:WS.COM,0100,45FF This overwrites the old file #G0 Exit to CPM I think this patch will work on any WordStar version 3.3 that came with the Osborne Executive. I found this saves about 30 sec when you boot WS. -Guy Gamble- FOG or 74375,257 CPM SIG Ãr SUPERZAP 3 for CP/M 2.2 and CP/M 3.1 W.M.Davidson H.J.Sheldrake *T()= ~  �Ñ2SUPERZAP version 3.5VIDÿNCTION $RT ;In???????????DSK:V JR VMSET $RTN VMNDrive Track Sector Empty and CP/1 W.M.DavidsoÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍINIT*.ù Í>/•|0<2­· *>0í°!ÖÍÝ*’"ì€"«¯2î!"Ñ"ÓÍ2Ë2Í:\·(=2Í!€#~·(þ (÷#~þ: #+áÍ2% Í¿' Í«'!]~þ ( ~þ?(#øÍµ'!]ÍÝ:ÍÍ^# :ËÍ^#!O"ÑMAIN:Õ!iÍ4' nÍJ'íÍ)(:Ë_Í ÍÃ** Invalid Disk SpecifiedXFDPzƒ„ •ENDR¯2ÕÉFDMD*C"Î>ÿ2'2ëÍK:�·(Í«'Ã:ë·(*¯2ëÍ>(!cÍÒ(!E:¨·(!TÍà(!’Íà(ÍÁ>ÍL(Íù&:'·( Í|!€Í¤!¯2'!Íà(Íó'!Í4'(Í(êÍJ':ÕþF à\ÍÉCOM Select Function ===> $Enter Hex Sector 5File Offset 5Load AddressN Next sectorP Previous sectorT Top of fileE Last sector of file6Z Exit from Superzap6L Exit to file listC Change SectorS Select Sector6X Scratchpad operationsA Find ASCII stringH Find HEX sequence File-Name Access $Current-Sector d:filename.typ R/s Scratchpad :- Find : NOT FOUND  - HIT FOR START @NEXT (Y/N) ? KEY INPUT INTERRUPT... ) 7 - NPTEZLCSXAH,K™¬É'«'pÈNÒr NXFSÕ*±#"±Íã%õ >ÿ2'Í(ñÑÉPRFS*±|µ Í(+"±Íã% >ÿ2'ÃkÍ(ÉFSCH:½·(Í(Í :Y ·(Í&Íã%>ÿ2ë2'ÉFRFS!"±Íã%>ÿ2'ÉLSFS\#Í*}+"±Íã%>ÿ2'ÉSFSN!Íò(*±"¹!0Íà(!"±Í|!Íà(Íó'!I#Í4' ë*±Íï&"±0þ *¹"±$þ !²¯íg+ígþ Íã%(Í(¯2¯Í(:¯þ (þ(Ãà!gÍà(>ÿ2'ÉFSPMÍ>(!ÐÍÒ(!FÍà(:ÍÆAÍþ'>:Íþ'!~Í)!Í)*±Íp)!WÍà(ÍÆͦ—ÍJ'>ÿ2ë2'É¡OFSPXÉSPCI!Íà(Íó'!hÍ4'(Í(êÉDSPI:î· !Í)J= (!ÿÍ):ñÆAÍþ'!Í)*òÍp)!Í)*ïÍp):ñÆAÍþ'>:Íþ'!òÍ)!Í)*ïÍp)ÉFXSP:î· Í(!:½·(Í(íKìÍØ%Í&€ÍØ%ÍOÍã%ÉFLSP!€í[ì€í°:Í2ñ!~ò í°*±"ï>2îÉDFSI!üÍà(*±Íp)!ÿÍà(*±¯Ë<Ë2¸:¨·(#"¶ÍO"ÉÍà(Íó'!hÍ4'(Í(êÉDSPI:î· !Í->FASC>ÿ2œ"Íú ÍâÉFIND:Ñ·Êq ¯2Æ!€€"¾íCÀ"ÂíCÂÕÍAÑ·Ê !ÓÍò(>ÍL(!ãÍà(Ã\ >ÿ2È*¾íKÀ:Ñ2É©í±âO "¾íCÀÍí (u ún ¾ µ#ñ( Í ÂD Ãé"¾íCÀÍí Ân y2Èú 2Çy2È*¾"ÂíKÀíCÄ>ÿ2ÆÍ ÂD !€€:Ǿ Íí (#õ:È·Êéͼ ¯2Æ*ÂíKÄÃ* íKÀ:È· !€"¾€íCÀ:Æ·( íKÄͼ ¯2ÆÅÍÐ Á!€·íB}· >€=2³Í`"*À%%%"À%Ͱ%Í�)!ËÍ$)Í›)!ÓÍà(Íó'þYõÍ`"*À%%%"À%Ͱ%Í(Í(ñÂq :È·Â Í Ê !ÓÍò(>ÍL(!¯Íà(:ÕþF(ÍÐ !¼Íà(Íó'þT Í™>ÿ2ë2'ÉGTNXT:ÕþF‘ Í,õÍ|ñ%ÍI*ií[k}´ öÿ*_"i¯õÍW&ÍÍØñÉGOBAK:ÕþFÊKÍgÍW&ÉSHSEC:ÕþF(ÍÍØÍ|!€Í¤!ÉDCCTå!É5áÉASINÍ� Í;ÍÓ'þ (9þ ¯2©Ã@ !A Í4' E ÍJ'Ûþ ( þ 0Í(ÎÍP :Ö!Ñ4¾Âý Í(É £ÌÏPASTRõ*Ô:ÑÍ_'ñwõ:œ"·(ñÍþ'ñÍ_)ÉFHEX¯2œ"Í© ÍâÉSSTR¯2Ñ2©>ÍL(!£Íà(*­"Ò>2Ö!©"ÔÉHXINÍ� ¯2ÊÍ` !XÍ$)Í` Íó'!I#Í4' <:ÊÍw 2ÊÍP !Ñ4Íó'!I#Í4' E:ÊÍw 2Ê!Ñ5Í` ÍP :Ö!ѾÊ[ 4ì :¯þ (QþÊW þ :ѷʬ =2Ñì Í(ì :¯þ !Ñ5 '4$þ(þ ¯!Êíg~·Â× !Ñ5ì Í(Ã× ¯2ÑÉHXSCÅõ*Ò:ÑG‡€„gÍa(ñÁÉHXADëo&Íï&}ÉDRMD*"Î>ÿ2:::·(Í>(!Ï ÍÒ(Íî#¯2:Íù&:ÉÍÍó'!â Í4'(Í(çò ÍJ':ÕþD Ã� É ^H Cursor left^L Cursor right^K Cursor up^J Cursor downP Previous directory pageN Next directory pageU Change user number6Z Exit from Superzap6C Change disk6S Select track/sector6M Set directory selectionE Edit fileT Type file EZCSMPNTU ‹ù¥ÀÛ4É'â¿'I?ds|ù ** No records in file** File not foundeDIRP:Ê·(Ö 2ʯ2ÉÍù&!ÍX%Íî#Í(ÉDIRN:ÊÆ !ƾ02ʯ2ÉÍù&!ÍX%Íî#Í(ÉFBS:ÊG!Æ:É=æ2É(€¾0ñÉFUP:ÊG!Æ:ÉÖæ2É(€¾0ðÉFDN:ÊG!Æ:ÉÆæ2É(€¾0ðÉFNL:ÊG!Æ:ÉÆæ2É(€!ƾ0íÉFFS:ÊG!Æ:É<æ2É(€¾0ñÉ2/!"æÍ_'F!6":/æÍ_'fhÍa(É STFLÍ?͵'ÉCFCB:Æ· Í(!("Ñ:ÉG:Ê€&oí[«Íï&] í°¯2hÉTYPEÍ?ÍK:�·Â.¯2³2·2µ<2¶2´Íï*å"ç"é>ÿ2u2v:v·(^¯2v2¶2xÍ>(!4ÍÒ(!Íà(!|Í)!ïÍà(*¶Íp)!÷Íà(*±Íp)!Íà(*´Íp)Í!Íà(*±Íp)!Íà(*}Íp)!Íà(Íó'!\Í4'(Í(êeÍJ':u·(Ã¥>ÿ2:É N Next pageR Return after Paging2L Exit to file listP Previous pageT Top of file2Z Exit from SuperzapF Forward pagingB Backward pagingEnter Selection ==>Page  Sectors ,-ÿ2vÉTYPR*çí[é¯íR(ë¯íRÍÜ>ÿ2vÉTYPL¯2uÉTYPBí[ç*å¯íR(ë¯íRÍÜ>ÿ2v·ÉTYPT*åÍÜ>ÿ2vÉTYPZÍÉ'¯2uÉTYPGÍ»! Íà(¯2w2´2µ:w·Âª:¨·:°(Í!:®·Âª:w·ÂªÍïçþ > Í!:´æ ôÞþ (!�¾(!‘¾(!޾(+!�¾(%(:®· :³!€Í_'~þ õÍEñÌï> Í!ÍEÍ!:®· ÍïÃ*¶Ím"¶ÉRÍQPGE*éí[ç¯íR !°í[éí°íSéÉLPGE"ç°í°Íã%ÉTGET:®· $!³~4!€Í_'~2°:³þ€ *±#"±¯2³Íã%:°ÉTPUTG:´þO ÍE:w· :¶· xÍ9)!´4ÉTYNL¯2´*´"}Ím"´!µ4>¾ >ÿ2w:¶· > Íþ'> Íþ'ÉFTYPÍHÍA· K!ïÍà(*¶Íp)!÷Íà(*±Íp)!Íà(*´Íp)̓Í!Íà(*±Íp)!Íà(*}Íp):®·(²Í¢Í1ÉBTYPÍHÍA· I!Íà(*±Íp)!Íà(*´Íp)ÍË()!ïÍà(*¶Íp)!÷Íà(*±Íp)!Íà(*´Íp)Í´ÍìÍ1ÉPGENDÍ(¯2¶2x=2u2vÉPAGIN>ÿ2x2¶: =<ÍL(úÍ�)!8Íà(Í›)ÉBCDU>…'o>Œ'gÉCHUN!¸Íò(>ÿ2:!¸Íà(Íó'þÈÖ08 þ 8 Öþ8Í(É_ ÍÍÍ^#¯2ÉÉ Enter user number or press ESC ===>CHDD! Íò(>ÿ2:! Íà(Íó'þ(ÖAÍ^# Í(¯2ÉÉ Enter Drive Name or press ESC ===>** No Files on DriveSAFNÍ>(!âÍÒ(>ÿ2:!× í°Í/¯2Ï2Ð2Ñ*•"Ò>2Ö!×"ÔÍ;Íó'þ (+þ('!¤Í4' ­ÍJ'!ÇÍ4'( þ Ú°ÍXÍ(Ëþ( !×ÍÝÍr$¯2ÉÉ:;<>[]press ESC ===>CHDD ^H Cursor Left^L Cursor Right^G Delete Character^V Insert On/Off6^I Edit Name/Type6ESC Use Current SelectionEdit File Name ===>%<= File Type ===> <= Insert  .*£ÌÏò óÁAFNP:з ÍóÉAFND*Ô:ÑOÍ_'T]#:Ö‘=(Oí°> Í/ÉAFNS> 2 ÍÉAFNQ>?2 ÍÉAFNF*Ô:ÑGÍ_':Ö�G: w#üÍ/Í ÉDAFN!•Íà(!×~Íþ'#ù!˜Íà(!ß~Íþ'#ùÉPAFNõ:Ï·(Í�*Ô:ÑÍ_'ñwÍþ':Ï·(Í/ÍÌÉAFNM*Ô:Ö=Í_'T]+:ÑO:Ö‘=(Oí¸ÉAFNL:Ñ·(=Í :Ö=G=*ÔÍ_'> ¾ +úx2ÑÉAFNR*Ô:ÑÍ_'~þ Í :Ö!Ñ4¾ÂíÍ ÉAFNI:Ï/2Ï!›·(Íà(Íò(ÉAFNT¯2Ñ:Ð/2з >*•×>*˜ß2Ö"ÒíSÔÉAFNC*Ò:Ñ„gÍa(ÉTFLE¯2�\Í< !("Ñ>ÿ2�Ã�!"±"»]Ík%:\Æ@2|Íã%( !"Ñ>ÿ2�ÉPSMD* "Î>ÿ22ëÍ>":·Êǯ2:ÍOÍVÍS!"k*_"i:ë·(¯2ëÍ>(!¹ÍÒ(!"Íà(ÍÁÍÄÍù&!Íà(Íó'!HÍ4'(Í(êWÍJ':ÕþP ãÉ:"@íS>íC<2;á;¯íRG}Ö(ùx:2ÍÉC*Ò:Ñ„gÍa(ÉTFLE¯2�\Í< !("Ñ>ÿ2�Ã�!"±"» Enter Hex Track Enter Hex Sector *Enter Hex Block =Enter Drive IDN Next sectorP Previous sectorI Next trackO Previous trackT Select trackS Select sectorB Select blockD Select drive6Z Exit from Superzap6L Exit to file list6X Scratchpad operations6C Change sectorA Find ASCII stringH Find HEX sequence Current-Track Current-Sector *Current-Block =Current-Drive 6Scratchpad :-   / 3 CNCPSITOZLBDXAHIêg}+¾É'wÑ…ƒÒr PTOD:ÍÍ^#Í«'ÉCHPD!¨Íà(!EÍà(:ÍÆAÍþ'Íó'þ(þ ( ÖAÍ^# Í(Ûþ(>ÿ2!Íà(ÉPRDDÍW&!€Í¤!ÍÍØÉDPSI!3Íà(*iÍp)!9Íà(*kÍp)!?Íà(*mÍp)!EÍà(:ÍÆAÍþ'ÉUBLKí[iíKRÍj'í[kí[g·íR0ëíKe͉'*W·íR0íSmÉNXPS*k#"kí[R·íR8 !"kÍÉPRPS*k|µ ;*R+"kÉSPSN!Íò(*k" !ƒÍà(!"kÍÍØ!<Íà(Íó'!I#Í4' ë*kÍï&"k=þ * "k1þ !l¯íg+íg"þ ·*kí[RíR8 Í(* "k¯2¯Í(:¯þ (þ(Õ!êÍà(ÉÉUFRTR*i#"ií[c·íR8!"iÉSPTN!Íò(*i"¸!qÍà(!"iÍÍØ!6Íà(Íó'!I#Í4' ë*iÍï&"i=þ *¸"i1þ !j¯íg+íg"þ ·*ií[cíR8 Í(*¸"i¯2¯Í(:¯þ (þ(ÃC!ØÍà(ÉþBWTR*i|µ *c+"iÉSPBL!Íò(*m"}!–Íà(!"mÍØ!BÍà(Íó'!I#Í4' ë*mÍï&"m_þ *}"mSþ !n¯íg+ígDþ =·í[m*WíRòDÍ(*}"m¯2¯í[míKeÍj'í[gëíKR͉'íSi"kÍ(:¯þ (þ(Ãé!ýÍà(ÉígPSPMÍ>(!ÐÍÒ(!FÍà(!ÿÍ):ÍÆAÍþ'!Í)*iÍp)!Í)*kÍp)!WÍà(ÍÆͦlÍJ'>ÿ2ëÉESC Return to sector displayC Copy current sector to scratchpadE Exchange current sector with scratchpad Current :- Scratchpad :- CEvž{PSPXÉPXSP:î· Í(íKìÍØ%ÍÇ&€ÍØ%ÍžÉPLSP!€í[ì€í°:Í2ñ*i"ò*k"ï>2îÉDSPDÍÁ:î·( Í>"*ìͤ!ÉLSEL í°ÉPSCHÍ :Y ·(ÍÇ&>ÿ2ëÉSCCH! ÍX%!Z ÍÒ(>2Y 2œ"2X 2�"¯2³Í`"Ͱ%ÍÓ'þ ÒA !ë Í4'(Í(ô ÍJ':œ"·(ÍÊ"Íü":X · ÇÉ^H Cursor left(^L Cursor right^K Cursor up(^J Cursor down^I Change Side(CR New Line^Q Cancel changes(^Z Save Changes !)!:!I!X!y!�!š!LEFT:�"· :³=æ2³:œ"· :�"/2�"ÉTOGL:œ"/2œ">2�"ÉDOWN:³Ææ2³ÉUPWD:³Öæ2³ÉRGHT:œ"· :�"/2�":�"· :³<æ2³ÉNWLN>2�":³Ææp2³ÉCHND>ÿ2X 2Y ÉQUIT>ÿ2X ÉWRBFë¯2³ÕÕ¯2Á%Ík"Ͱ%ÍO":¸Æ2¸Í¢"Ͱ%ÑÍ_)Í(!³4>¦ Í(>¦ ç~ÖwͶ"!Á%5Ͱ%>|Íþ'ÑÍ9)!³4>¦ ò>|Íþ'~æ©!É #&),0369?@ABCDEFGHIJKLMN(ð yæðO> ±wõͶ"Ͱ%ñÍ9)ÍX!É0123456789ABCDEFCHDR2é#OÍV|µ :ÍOÍV¯Ãè#å Í!ÿÿ"é&"ç&áBí°*L:­·(*NRí°í[RíK_Íj'å"g:U_íSeíKWÍj'Ñí[RëíKR͉'íSc:é#2Í<2\2Ír$>ÿ·É)DLST!Z$Íà(:ÍÆA2|Ík%!|Í)í[Ä:Ê&oÍï&"À¯2Ç:ÊG:Æ�!Ǿ(/~Í:�Íþ'Í(í[ÀÍk%!~Í)*À"À!Ç4> ¾(ÃÉ Directory list - RDIR¯2Æ2É2Ê*«"À"Ä+"ÂÍþÿ(9!€Í_'"¾ÍÖ$*Â"ÂÍþÿ(!€Í_'"¾Íè$ÍÖ$à*Â#"åÉí[À*¾#í°!Æ4É*Äí[Âë·íRú %Õ*¾# Í2%Ñú %!Ãë$íSÀ*Â#·íRDM*Âå"ÂÑx±Ê-%ëí¸ÉCPST¯2S%y°(ÅæG~æ�2S%Á # è:S%·É CLRA|EÍL(<ú!"ÓÉFMTN!~æw#ø6.#æ€2½æw#ø:½·>W(>O2�¯2¨!‡Í2% >ÿ2¨Éåõ:À%o:Á%gÍa(ñáÉIOADDRí[Ý%ÍÉDMASETíCÝ%É€RDFSů2*}"»*±"}ÍÈ%\!Í2®·( *»"±"}ÁÉWRFSÍÈ%\"ÍÉPHYS3:­·õ( :a<=(Ë8Ë)÷ñÉSECPNT*k:b¥!¢)€È =ûPSRDÍÈ%íKiÍYíKkÍ%&Å(*ç&íB íKé&*iíB ÁÍA&í[Ý%í°ÉÁíCç&*i"é&í[BÍkDMÍ\:­·(¢)Í_Íbõ:­·( ÍÈ%ÍA&í[Ý%í°ñÉPSWR:­·(ÍA&ë*Ý%í°¢)Í_ÍeõÍÈ%ñÉÿÿÿÿH16D))))ÉERRP*Ó|µ(å!ÎÍà(áÍ)!"Ó*Ñ|µ(å!ÎÍà(á"ÓÍ)Í(!"ÑÉMTCHÅN#Åí±á ·íB+¿ÁÉEXVA)ÍT'éLDHLõ~#foñÉAAHLÕ_ÑÉMULT>!·ëíjëÒ|' Ò|'=Ê„')Ãp'ÉDIVD>!)ë)ëÒ–'#·íBòŸ' =ʦ'ÃŽ'ÉSETD>D2ÕÉSETF>F2ÕÉSETP>P2ÕÉSETX>X2ÕÉCHRIåÕÅÍD2¯ÁÑáÉFOLDþa8þ{0æ_ÉCHRFÍÓ'Íä'ÉCHROÅÕåõ_ÍñáÑÁÉALRMõ>Íþ'ñÉSPCOõ> Íþ'ñÉCLRSõå!PÍ$)!"ÓáñÉDHDRÍ)(!”Íà(ÉCLRLõå&oÍa(!XÍ$)áñÉCURSõå!pÍ$)áå:ˆ·õÍŒ(!xÍ$)ñ=áÍŒ(!€Í$)ñÉCOORD(:‰…:Š„_:‹· Í®(É{Íþ'ÉDECOUTåÕÅëöÿÿÿ 8üíBë|µÄ®(>0ƒÍþ'ÁÑáÉDPNLF#ÅÍà(ÁùÉDFLDåÍT'Ía(á##Í)ÉCFLDåÍT'Ía(á##Í)ÉCSTR~·(Í(#ö#ÉSTRO~·(Íþ'#ö#ÉSTRLÅF#(~åÍþ'áôÁÉASCOåõËõõÄ�)ñæ!Œ¾0þ 0>.Íþ'ñÄ›)ñáÉHEXOõÍ)ñÍ)ÉHEXWõ|Í_)}Í_)ñÉHEXCæÆ�'Î@'Íþ'ÉVMINV!` VMNORM!hÍ$)É1Å:=�WÕ!~# x±ÂÑÁåb{æÂ,ã~#ão}oÒ5„ x±Â!Ñ.éÃú Ë,õyÍ$ñÉÍÔÈþ ÉÍKþ Ê<ÍÊ!È 6 # Â)!È wÍKÍÈ# Ê<Ã5ÍKByÉÅÍEÁÂ<Éæ8Éæ0ɾÈ# Âd Éë*È ë{¾Â~#z ¾È +++ Âr É:Ì þ Â<>H2ÞåÈ ~þ@̸¾Â¬#™ÑÉáüÿ ÂŽA Éã#ã2ÞþHÈþXÈþYÉÅÍ:È þ[Êá!® ÍmÂ<yÁÉ!Ý~·Â<4:Í þ]Â<:É ÍÁÂ<Í~:Ë Íà‡‡‡‡G:Ì Íà°G:Ê ò$þ-Â<xþ€Â<>-þ-xÂ,/<2ð>ÁÉÅÍ!À ͆Â< yÁÉÍ3þÊ<ÉÍ3þÊ<þÀ=Éõ:ÞþHÂ<áÉ:ÞþHÀÃ<Ígõ:ÞþHÄ~ñÉþX>Ýʺ>ýú*É "È :Ë þ Â<!ž ÍmÂ<yÃWÍŠõÍEñÉ!Ý6ÿ>í!>Ë*åw#"åÉ/_ÿ~ÉÍÃúÍKþ Êdþ.ÊdÍ!Ý6Íô!Ý56À>ú!ºåw!† ͆¬yÆ›Ú`Æ ÚfÆÚoÆÚŽ<ÊŸÆÚ®ÆÚ³<ʾÆÚÌÆÚÝ<ÊÆÚÆÚ(ÆÚ2ÆÚFÆÚSÆÚ\ÆÚpÆÃ|!|ÃÃ!†ÍÊÃN!ŒÍÊÍE*åy•oxœg |·Â<}Ö€É!’ÍÃͺÍEͺxÉÍÇ@ÍWGÍǰ±É€Ã¤ÆOÍÇÍW±ÉͶͺÍèÃN‡7�‡GÍ3þÒ<áÃþ‡<þÚæÆÍ÷æÏþ Ì\=áÀå×GÍFÍsÍ]°ÃºÍ öÇÉÍNþÒ<ÃWÁÊÅÍOÍsÍ]±É<OÍ Ã7ÍWGÍÇõ͸Íèñ°±ÉOͰyÍWöCÔö@OͰöÍWöBGͰÍFÍ\Í]°É!®ÍÃõͰñÉO!� ÍÃëÍpGyþÊ•þÐÔÍFþ¦:Þ¸Â<> áÃþ:È þJ¼ͧöÂÃÆþCÂÍͧöÄͺyÚþRÂ<ÍŠöÀÉ*âÕë*à{•zœÚdÑ~#"àÉåÕþÂþ:ß·Â >o&)  NÑáÃ>[Í$Í/Í$ÍØ·+ò$-/<ÍÍ„]Ã:߯HÐþ%>XÈ>YÉy‡‡O ~þ@Ì/Í$#ÂDÃ"zæ8ÉÍÍU‡O!� ~Í$#~Í$Í"Ã"ÍUæþ‹SÍPÃþÂîÍ/Ã$Íž*àÍ·Ãq!9"ç2ä·!ÄåÈ!ÿÿ"â<À<2ä*àÃÝ!ÄåͨÂd!ä~·ÊÚ5ÊdÍ–¯2ßÍØW!iÍdÊ ÍdÊ ÍdÊÍdÊ÷æÀÊ|þ@Êâþ€ÊozþËÊSþíʇæßþÝÊÜæÊwÖÊrÖÊjÖÊÐ!’zÍËÍUþ‹!À ÃBÍØWþ@!fÚræ!‚Í>ÍÖÃî!ÂÍUÍ>Ãñ*à+"à+VÃ2ÍØWæÇÖ@!>ÊÙ=!BÊÙ=ÊÂ=ʶz!’Íd!ÂÊ=Ã{ÍU!FÍ>Ãý!wå!6zæÃ@!šÍBÍUÃ�z2ßÍØWþvÊ{æÇþFÊâþ†ÊozæøþpÊâzæÏþ ÊXzÖ4ÊÖ=ÊÐ=ʾzæ÷þ"Êaæõþ!Ê‘zæûþáÊ>z!¾þãÊBæïþéz!¶ÊÊþåÂ{*à#~æþÂ{~!ØåÃV!ÂÍBÃw!®ÍÉÃýCÍ\ÃýJÃlRÃ\zæÖʵÖÊÖ=ÊÐ=ʾ!žzæ=Ê©þÚ£ÖÍ>ÃwÍBÍwÍÃý!®ÍÉÃw!¶ÍBÍUÍîÍÃ!¾ÃÙ!ºÍBÍUÃî!âÍBÍUÍîÍzæÃî!âÍ=ÍØõÍØWñ_ö! Í=ÍØÄ!: Ã=!úÍ=ÍØÍ+÷_ŸWÉ!Ä ÍBzÄÍž?Í*çù!9"çÍ–"åÍÍÐ*å"àÃO*çùÉ'/7?vÉÙãéëóùûÆÎÓÖÛÞæîöþ (08"*2:ÃÍDEFGMOVW^_go ¡¢£¨©ª«°±²³¸¹º»SI@DLI@DPCI@SPI@XTI@DAD@OTDRINDRCCDRLDDROTIRINIRCCIRLDIROUTDIND CCD LDD OUTIINI CCI LDI RLD RRD LDARIM2 LDAIIM1 STARRETISTAIIM0 RETNNEG DSBBDADCINP OUTPSBCDLBCDSDEDLDEDSHLDLHLDSSPDLSPDRLCRRRCRRALRRARRSLARSRARSLLRSRLRBIT RES SET POP PUSHRST LXI INX DAD DCX STAXLDAXMVI INR DCR ADD ADC SUB SBB ANA XRA ORA CMP MOV CALLJMP LDA STA LHLDSHLDJRC JRNCJRZ JRNZJMPRDJNZCPI ORI XRI ANI SBI IN SUI OUT ACI ADI EI SPHLDI XCHGPCHLXTHLEXX RET HLT CMC STC CMA DAA RAR RAL RRC EXAFRLC NOP ãùé*"NZZ NCC POPEP M B C D E H L M A B D @ SP PSW DB ZDT VERS 2.0.00 - CPU IS 8080Z-80ã"ÈãÃ*"ø !ò "!"ÍL¯2Í!"à"Û" 1Nå! åÂ( 3"Ë!"H!Î Í 7ŸêE !í Í !\$ ÍÈ :]þ !Ät 15!_ åÍž>-Í$ÍÍKþ ÈÖAÚþÒ_!Ž ^#Vëéâ  á• ± > e ò Å Äa «õöÛ 7A~#·ÈÍ$àåÕů2#2D$Íò ÁÑáÉÍA=ÂÍ"àÃHÍAÊ Í"à=Ê Í"â=Â> âÍAÊ1 ÍÚ! "Ûæ=Ê1 Í=ÂÃ< *Û}æðo¿ë͘*ÛåÍ·Í"Í‚ÍÎÚY }æÂG "ÛáÍ"~Í¿#ÍÎØ}æÂ` Ã= ÍAþÂÍåDMÍ#}‘O|˜GÍëáÉ{‘z˜ÉÍr 7Ÿâ¦ s# x±Â� ÉsT]x±È í°ÉÍžÍAÍåÍåÍDMÑáóÊí ÚÐ "Læ=Êí Í =Êâ YPÍ >Ã28!"97Ÿê 14ñíGýáÝáñÙÁÑáÙ1BÑÁñáù*L" *JÃõ!Í~4·Ê2 #~#»~#Â2 ºÂ2 ~#s#r#w>ÿñÉÍAþÂÍåÍÑå͞ͷÍ"ᯕo>œg÷Íó¯2D2$ÍK !%þ:ʾ w# ÊÍKþ.Ê� þ Âw Ê™ 6 #Ã� þ.± ÍKþ ʱ w# Êà Ê» 6 #ñ 6É+~æÃl Ír 7ŸâØ ~# x±ÂÍ Éí°ÉÍr ¾Äì # x±ÂÞ É͘Íò Í·Í"~Í„ëÃ"!-~þHÀ#~þEÀ#~þXÉë* }“|šëÉÍ Ð" É>M•>œØå>•>œáÐÍ !@ Í Ã*** ATTEMPT TO OVERLAY ZDT *** ÍóÍA!Êt =ÂÍåÍÌ þÿÊÍ Ê© á€Í# åÍO$Íò á·Â€Í È ÍÑþÊÖ:© WáåÍö _Íö õÍö ÁO {·ÂÕ `i"LáÃÕÍ# ÑÍö Íö w#Âß Íö õÍ ñÂé ÅÍÝõÍÝÁ°G‚WxÁÉÍL Ãò Í !*Í * Í·Í"*L÷ NEXT PC ÍD!"ÅÍAÊhÍDM=ÊhÍ=Êl=ÂåÍ"ÅáÃl* +ÅåÍ ÑáÊ‚NÍŽ#ÍÎÒvÉå ÍÎáyÒ“{•<ÈÕ_P͇:ÍŽ{ÍiåÕë*ÅÑÍdá¯Íi~#Íi²¯’ÍiÑÂÍe ¯2Ç$ÕÍò ÑÕÍò ÑÃò ÍDÍAÊøÍ"LÃø:Ç<ÈÍ Â"͇:ÍŽ¯WÍi*LÍd>Íi¯’Íi͇!Ç~6ÿ·Ê<_!Eq#ò3ÍU$Ãò :Ç·ðÃ!EëÃò $Íò ·ÈÍ<!kÍ Ã*** DISK WRITE ERROR! ***  ÍŽ ÅÕå!Ç^4!Eqò§¯2ÇÍUáÑÁÉÍA=ÂÍ͞ͷÍ"~Í„>-Í$Í1þ Êíþ Èþ+ʵ#ÍÔÊéåÍòëásþ È#þ> Í$øö¯2ÊÍA!Ê=ÂÍ}´Ê+"ËÍáÃxþ'Â%yÆ O> þ Â, ~¹Â6#~+¸È####~·Â,<ÉÍKþ Êáþ'Ê OÍKG!$ÍÊ|!RÍÊ|7Ÿê!IÍÊ|![ÍÂåÍžͱÍ"ÍÍA·ÁÈ=ÂÍ þW OÒ¼}æþ´Â}ŸõzÍwy/¦Gñ¡°wÉëÿ!N ÂÍz·ÂsÉs#rÉåÕÅ:#æÊñ_!E~þÊ!#4·Ã$Íò ·Â2#ÃÜ7ÁÑáÉÍž>?Í$Ã_  ëÍò !í"éÉ> åÕÅ_Íò ÁÑáÉÅÕåÍò áÑÁæþÀÇþÈþaØæ_Éå!ì~·> Êb5*é~#"éÍBáÉ|Íi}õ‚WñõÍvñæÆ�'Î@'OÃŽ~#õÍ�ñæÆ�'Î:'Ã$ͨÂ_ > Í$> Ã$ÅÕå Íò æáÑÁÉë|Í„}ÄþÒÉþ Ò$>.Ã$z”À{•Éþ Èþ,Èþ ÉÍÑÖ0þ ØÆùþ ÚþØÃ!Íà))))µoÍ1ÍÔÂõÉë^#V#ëÉÍKÍÍ6þ ÉÍKÍÔÈÍàë))))µoëÍKÃ!s#r#å!Ô4áÉÍK!Ô6þ ÊiÍÔÂV6€#ÍÊiÍÊiÍÂÔþ�Ê·É·!FÊ�!:¯? ƒO¦ÉÊ›Íw> Ê$zÃ$õzÍ$>=Í$ñÍwÆÿ>�Ã$V#^#~#NþÚ‹õÍ"zÍ${þ Ä$>=Í$ÿ!N ñ~Ê„#fo÷!$Í7Ÿ!Iä!RÍÍ"*L"à>ÿÍ¢*L"àÉ7Ÿè![Ížåͱá####~·ÂÉC Z M E I A ùB öD ôH üX êY èS úP þc z m e i a íb îd ðh òIVç!"ËÉó"Já+"Lõ!9ñ1JåõÅÕ7ŸêµÙåÕÅÙõÝåýåíWõ15*L~þÿõå!Í~6·Ê×=G#^#V#~xÃÆáñÊû#"Lë!ø N#FÍ� ÚûÍ„*Èë>‚·7ÃÆ û*Ë|µÊ+"ËͨÂ:Ê·ÄáÍ5ÚÆ Í„>*Í$*L"àÍ·*J"ÛÃ_ *LF#åxþvʱ!åÚJ‡ØÈáxþÊæÏþÊæÇÊ®þÊxæçþ"ÊéÍCáåFxæ÷þEÊ8æÇþCÊ!åxæäþ ÈæÄþ@ÈxþDÈþFÈþGÈþOÈþVÈþWÈþ^Èþ_ÈþgÈþoÈá·Ã!ÍCáåFxþËÊþvʱþéÊ&þ!ÊæûþáÊxæ÷þ"Êþ#ÊxþùÊþãÊæÏþ ÊæÇþ†ÊþFÊxþ6Êæþþ4ÊæøþpÊñ##~æþÊñ#ã+~þÝ*8Êû*6Ãû#ãßÍCÃ7ŸàáñÐáxþÃÊ™þÍÊ¥þÉÊŸþéÊøþÙÊæ7þÊæÊ ÖÊáÖÊØÖÊ=ÊêxþíÊmþËÊ=æßþÝʵéÍ¿ÂÍÑÃÍ¿ÂÃÍCá~#åÍ+ëÍÇÃäÁá^#V#åÅ:ø »À:ù ºÉ*H^#VÉÍ¿Êà Í¿ÌÑà xþÿʱæ8_Ã*JëÍÇÜÍCÑÕÃÍÑÁÅ>ÃÑ>Ñ>ÑÕ><7áÉÿ ÿ$@„���ID ‚„ �@$!$ˆI$�@B@„BA"I!!"D @ ! !  „!„BB„!$’I @’HB �$�ˆ�$‰$!$B"@D ’ $$A" �ˆH! ’AB@HHB’@„!$’@‘’$„H‘„„„„! B„‰ $’I$B@H‘ $’H�$‘ �" @D $’BBˆ� „’I$’I$’I$‚II$’I I$’$‚ ’@’HIH„�‚UUUUUU@�$$’I$II$‚D�"I ‘HH D@Iˆ@@HH „ˆD€ BHB �!ˆ  "I A‚I‘ HB�„ˆ"A"$@@I$’@A �Hˆ‘ „D€B„AB!$ ’I$!! ! @�’ I !I$BB HH"B$‚@€„D’HI$‘ $  D @�„‰ !!$€€BA@$!"„A’I$�I$�@$�B!€€ˆ! ’I$$� € B @I "$‰$$’I�€ B H „!BA€$I @!B!D�I$�B$’A"HH