BUSMASTER--attachingIBM-PCorMultibusperipheralstoan1108withExtendedProcessorOption(CPE)Initiallyreleased:25Sept1984MichaelHerringEdited:22Oct1984IBMPC-orMultibus-compatibleperipheraldevices(notbothatonce!)canbeattachedtoan1108whichhastheExtendedProcessorOption(CPE),usingXerox'sBusMasterinterfaceoption.ThisdocumentdescribesthefunctionalityoftheBusMasterhardware,andtheBUSMASTERsoftwarepackageforcontrollingit.Itisdividedintosections:thisintroductorysectionsingle-bytetransfers-theBUSfunctionsmicrocodedblocktransfers-theBUSBLTfunctionsdma-overviewofdirectmemoryaccessdma-detaileddiscussionofthedmaprocessdma-registermodeloftheBusMasterdmacontrollerdma-theBUSDMAfunctionsdma-summaryofsimpleusedma-technicalnotes(ThisdocumentandtheaccompanyingBUSMASTERsoftwarepackagearesomewhatpreliminary:WhiletheyhavebeenusedwithIBMPC-compatibleperipherals,theMultibusalternativehasnotbeenfullyintegratedatthiswriting.ThussomechangescanbeexpectedbeforetheBusMasterinterfaceoptionisreleased.Inparticular,moreobscuredetailsmaychange,themoretechnicaldocumentationmaybecomemoreexact,thedocumentationwillbecomelessPCoriented,and(perhapsmostimportantly)well-packageddiagnosticsoftwarewillbeincluded.Alsohopefullyglobalinitializationwillbebetterunderstoodandbetterpackaged,andtheproblemofaccessingnonexistentmemoryontheexternalbuswillbeproperlyaddressed.NoteinparticularthatmuchofthisdocumentationiswrittenasthoughonlyIBMPCperipheralsweresupported,whichisfalse.IBMPC,IPBPC-XT,Intel8237-5A,andDataTranslationDT2801areproprietarynames.)AdditionalhardwareisrequiredbetweentheBusMasterandtheperipheraldevices:anIBMPCorPC-XTexpansionchassistomounttheperipherals'controllercardsin,andinsomecasesaPCmemorycard,mountedintheexpansionchassis.TheBusMasterconnectsthePCexpansionchassis(the"externalbus")totheBusExtenderhigh-speedparallelportofthe1108.TheBUSMASTERlibrarypackagemakesuseoftheBUSEXTENDERlibrarypackage.Intermsofthehardwareenvironment,PCperipheralsfitintothisaugmented1108systeminjustthesamewaytheywouldintoanIBMPC.MostprogrammingoftheperipheralsisdoneinjustthesamewayitwouldbedoneinBASIConanIBMPC:"peeksandpokes"--thatis,explicitlyprogrammedtransfersofindividualbytesfromandtoindividuali/oandmemoryaddresses.Therearetworestrictionsaffectingmoreadvancedi/oprogrammingtechniques:1)Interrupts:Interruptsarenotasyetsupported.Moreprecisely,whilethehardwaredoessupportinterrupts,exactlyasonanIBMPC,the1108microcodedoesnotasyetsupportinterrupts.2)Directmemoryaccess:PCperipheralscannotperformdirectmemoryaccess(dma)totheinternalmemoryofthe1108.However,theperipheralcanperformdmato/fromPCmemorymountedinthePCexpansionchassis,andthe1108cansimultaneouslyaccessthatmemory,eitherwithpeeks&pokesorwithmicrocodedhigh-speedblocktransferinstructions.Ourexperienceisthatexamplei/oprogramsinBASIC,notinvolvinginterruptsordma,canbetranslatedimmediatelytoInterlisp-Dwithoutsubtlety.Wehavealsoimplementedseveralapplicationsthatusedmatechniques,withtwodifferentperipheraldevices,theDataTranslationDT2801Analog&DigitalI/OSystemandaTecmar-like640x400x4-bitcolorboard.Oneofourapplicationshasthedataacquisitionboardsamplingacousticdataat êq?€`½ îïp ÿ êq?€`½îïî êïg_p î ôïagqþî€ïagrÛïagîûîî'î.þî1”î:Ò îFÖîIMîIMïagî"Âï_>î%´î+wî0Tî:îDÞîDÞï_>î"Âï]@î)èî/Lï]@s7ï]@î/Rï]@î ôï[¨î úï[¨î ôïZt¸î úïZî1¤ïXîu¦î5zî:jî;ìî>†îAïXîî1¤ïW¸î5åî9¹ïW¸î1¤ïV-î5zî6üî9î;‹ïV-t¸ïV-î;‘ïV-î ôïT¢î úïT¢îêïSîBîYîøîŽî¼ î#™ î)þî.–î1Uî4aî5Ìî9Õî<2î=õîC>îD¾îF�îI™îI™ïSî ôïQœî ÑîîIîAî-î"­î'î*}î/Lî5éî;]î?ŠïQœîêïPîÔîîÄîõ î'Ãî)Nî+î2î8Lî:Õî=îFîFïPî ôïN–î<îMî\ îî•îíî 7î!uî&8î(àî-öïN–îêïMîðïMîàïK�îR îî"ïK�îàïJ î�îüî Íî"þî& î+™ïJ îàïHŠ î î®î$ î$Þî'î,ãî2\ïHŠîàïGîÌî�î<îÇî"xî'µî+AïGîàïE„îÌî�î¢ î"ðî${î&¬î)˜î-éïE„îàïDîÌî�îKî Sî!Þî$î*¬î-˜ î3QïDîàïB~îÌî�îÎî jî%ãïB~îàï@ûîÌî�îjîõî#)î%ï@ûîàï?xîÌî�î1î Nï?xîêï=õîðï=õîêïâîA)îCoîF�îI¨îI¨ï:ïî ôï9l î9î¤îîîîFî”îøî$ôî'Qî)î.Ÿî2¾î4ïî;ŒîAîE(îFfîFfï9lî ôï7éîgî¿îa î»îî î$"î&øî+Èî-ùî1]î6ñ î@ îBöîGÛîGÛï7éî ôï6fî Xî î; îjîåî#Êî&1î(Wî-ëî0tî5éî9 î@Ï îI…îI…ï6fî ôï4ã î7îîúî½î‡îßî"Þî(Ôî,Å î4nî6éî8¬îéîA îGøîGøï1Ýî ôï0Zî  î´î‘îÏîÕï0Zîêï.×îîîî÷îî$®î'7î*e î1mî6‰î8¯ î?£îD6ï.×îêï-Tîðï-Tîêï+Ñ îŽîfî¤î"î'@î)qî0î2—î4È î;-î@>î@–îBYîEpîG–îI,îI,ï+Ñî ôï*Nî�îÅîî�îÅî ö î(7 î.Bî1§î3î6î7ˆî:ìî>0î?-îASîF�îIÉîIÉï*Nî ôï(Ëî”îîEî‰î+îƒî!,î'Éî-2î/cî1‰î7Íî<î>ÂîDƒîHîI”îI”ï(Ëî ôï'Hî % î îÔî‹î"Uî#àî&î).ï'Hîêï%Åî“î«îêî#ûî(î*Kî+Öî. î9î=PîBfï%Åîêï$Bîðï$Bîêï"¿îŒî(î³îäî¼ î%ïî( î.þî0Ÿî3Gî5¹î<™î?±îCýîE}îGïîJ îJ ï"¿î ôï!<î CîíîÎîËîsî6îMî Êî!"î${ î,Úî.eî0– î7î8½î<î=€î?òîB#îErîHîIDîIDï!<î ôï¹î ñî´î÷îwîîÛîžîµî"Tî&ªî)3î-žî.èî1‡î3 î8Ð î@ÂîF!îG¬îG¬ï¹î ôï6 îAî¦îÞîgîç î!4î#Xî%áî+ î1Xî1°î5‚î7¨î:% î@ìîF`îIÄîIÄï6î ôï³î×îû îZ î!)ï³îêï0vîk î¬ï0tï0îî\ î—î½î"î#„î%Ÿ î,;î,“î0# î5ùî9}î;®îA†îD‡îIaîIaï0î ôïš îeîÑîRî*îíîî‚î!³î$Ëî+Eî.Fî0Œî2 î4(î9 î? ïšîêïvîkî^îSîRïtïîªîÐ î&¹î+î0+î3Üî9î<÷î@ÕîBUîD†îIjîIjïî ôï�î1î¼îíî\î´î¸îé î%Nî'«î,Òî/¾î4Îî6ôî<1îAÑîCQîE‚îG¨îG¨ï�î ôïþî8îÛîdî•î­î î ïþvïþ î'‘ïþtïþî'éî+Çî.fî3ûî7·î:¢î>Hî?²îCmîEîGîîGîïþî ôïh î4 îýî‹î f î'•ïhîêïåîðïåîêïbîž îFî„î#î!kî#�î)qî*ñî/Õî2î7ï î>î?žîBâîE?îGîGïbî ôïß î î°î0 î î$çî)çïßîêï \îGî_îü îî#z î*Úî-yî/Àî2¬ î9¬î<—î?îDˆîDˆï \î ôï Ù îYîIîzî¨ î!°î&Ìî+bî,Ìî1+î3Éî8Wî:àî;Ý îCHîCHï Ùî ôï V î‹î×îõîMî"î­î! î(iî*°î,áî/· î6rî:9î?ãîDèîG¾îI)îI)ï V  êq?€`½ò210KHz,whilethe1108processesthedata(includingFFTs)andgraphstheresults,continuouslyinrealtime.Thisapplicationusesquitesophisticateddmatechniques:thedataacquisitionboarddmascontinuouslyintoacircularbufferinmemoryintheexpansionchassis,whiletheprograminthe1108continuouslyreads&processesdatafromthecircularbuffer.Thisispossiblebecause(1)thePC'sdmacontroller(whichisfunctionallyduplicatedintheBusMaster)canbeprogrammedtowrapdmaaroundacircularbuffercontinuouslywithoutsoftwareintervention,(2)thedmapointerscanbereadbythesoftwareprogram,and(3)datatransferfromthePCmemorytothe1108doesnotinterferewithdmafromtheperipheraldevice.Thisdmatechniquetookonlyacoupleofdaystodesign&implementusingtheBUSMASTERsoftware.OurinterfacefunctionsfortheDataTranslationboardareavailableastheLISPLibraryPackagePCDAC;itisoneexampleofhowtousetheBUSMASTERpackage.Single-bytetransfersto/fromtheexternalbus--theBUSfunctionsNotethatwheneveryoupower-uporBUS.RESET,youthenhavetocallBUSDMA.INITatleastonce,toinitializethememoryrefreshapparatus,beforethememoryontheexternalbuscanbeexpectedtoholddata.(BUS.RESET)--actslikeapower-up:resetstheBusMasterandassertstheResetsignalontheexternalbus,therebycausingeverydevicetheretoresetitselfasatpower-up.BUSDMA.INITwillthenhavetobecalledagainifthedmacontrollerormemoryrefreshapparatusisneeded.(BUS.INPUTi/oaddress)=>8bitvalue--inputabytefromanexternal-busi/oaddress,returningitasasmallnonnegativeinteger.(BUS.OUTPUTi/oaddress8bitvalue)--outputabyte(theleastsignificant8bitsoftheintegerargument)toanexternal-busi/oaddress(BUS.READmemoryaddress)=>8bitvalue--readabytefromexternal-busmemory,returningitasasmallnonnegativeinteger.(BUS.READHLmemaddrhimemaddrlo)=>8bitvalue--readabytefromexternal-busmemory,returningitasasmallnonnegativeinteger.memaddrloisthelesssignificant16bitsofthememoryaddress;memaddrhiisthemoresignificantbitsoftheaddress.(BUS.WRITEmemoryaddress8bitvalue)--writeabyte(theleastsignificant8bitsoftheintegerargument)toexternal-busmemory(BUS.WRITEHLmemaddrhimemaddrlo8bitvalue)--writeabyte(theleastsignificant8bitsoftheintegerargument)toexternal-busmemory.memaddrloisthelesssignificant16bitsofthememoryaddress;memaddrhiisthemoresignificantbitsoftheaddress.Microcodedblocktranfersto/fromtheexternalbus--theBUSBLTfunctionsThesefunctionstransferdatabetweenanarrayinInterlisp-Dvirtualmemoryandaconsecutiveregioninthememoryontheexternalbus.NotethatBUSDMA.INIThastobecalledatleastonce,toinitializethememoryrefreshapparatus,beforethememoryontheexternalbuscanbeexpectedtoholddata.(BUSBLT.BYTESarraystartingindexbusaddressnelementstoexternalmemory?)--transfereverybyteofnelementselementsofthearrayinInterlisp-Dmemory,startingwiththestartingindex'thelement,toorfromconsecutivebyteaddressesontheexternalbus,startingatbusaddress.arraymustbeanarrayofeitherBYTEs,WORDs(=SMALLPOSPs),orFIXPs.IfthearrayisofWORDsorFIXPsthenthemoresignificantbyteofeachInterlisp-Dwordistransferredtotheloweraddressontheexternalbus.îI)ï Vî êïføt¸î ôïh„s7î Ëïh„î ôïbt¸îÛî_î�î¨îtî¥î"{ î(Ôî,Ûî/dî3¥î5Öî:M îB1îC±îF9îI†îIÞîIÞïbî ôï`~î Þ îºî…îÞ î!Îî$º î+Ûî,3î.dî1: î7õî;¼î?, îGîI¸îJµîJµï`~î ôï^ûî·î¶î6îsîóî$î#hî( î+�î-Àî3î4žî6Ïî9ç îAËîE;îF¥îF¥ï^ûî ôï]xîÀî–îÎîÿîÂî!î$î%@î*Oî/@î1:î3kî6mî9Y î?dîCºîDøîDøï]xî ôï[õ îT îÚîZî‹ î"¡î$þî&Á î.³î03î3wî6cî:ðî;íî@°îD¯îD¯ï[õî ôïZr îØî±îù î#Óî%Íî'þî*êî0î2bî4%î7î8ßî;î@XîFîH—îJ‘îJ‘ïZrî ôïXïî Êî¥îÝîî4îqîñî""î%:î(;î*�î/ßî2Êî5¶î8îî; îA„îEïîFGîI1îI1ïXïî ôïWlî àîîøîâîßîî©î" î$ î(?î)©î0[î3Õî6î?îDkïWlîêïUéîžîîÝîìî!î$K î+Sî/î1@î6Èî8Iî:zî=ÓîB–îG²îG²ïUéî ôïTfîµî î5îsîðî8îÃî˜î î"_î$�î-¨î2¾ïTfîêïRãîðïRãî ôïQ”s7î úïQ”î ôïPwÉ î>îÆî¾î!^î'‹î*Rî+Ãî.cî2Aî8ÂïPîêïN‰s7îðïN‰îêïLýt¸î1îÐîÔî\î#_î$õ î-Fî/Îî2Åî5Ýî7]î9¸ îC»îE&îHîHïLýî ôïKzî cîã î<îmîªî  î&~î*�î,Îî2 î3ãî6î;%î=�î?êîA­îG8îH¸îH¸ïKzî ôïI÷î ôîÏïI÷îêïHtîðïHtî ôïF²î mïF²xÉïF²î™ïF²t¸ïF²îjî´î=î¸îµî"1î"‰î&%î(Vî.óî1|î5œî7Íî;iî?$î@üîC-îH>îH>ïF²îàïE î îpî )î#¯î'Ãî+î,�î/µî2áî4bî5Íî<'î< îF‚îHýîHýïE îàïC�î×îïîoî2î øî$rî%¥î'Öî* î0Íî2cî7 î< îBîCZîGøïC�î ôïBî úïBî ôï@Xî mï@XxÉï@Xî�ï@Xt¸ï@Xîèî@î@ï@Xvï@X î8ï@Xtï@Xî îqîqï@Xvï@Xî"¤ï@Xtï@Xî"üî$Fî'Àî(½î+žî.Öî0™ î83î:Wî?iîE@îFhîGéîHæîHæï@Xîàï>ÂîN îÑî#Bï>Âî ôï=?î úï=?î ôï;}xÉ îdï;}t¸ï;}î¼îîï;}vï;} î ï;}tï;}îdî¼î¼ï;}vï;}î!ïï;}tï;}î"Àî$ î(Jî)Gî,(î.Òî1È î8,î94î;¦î=1î?bîCÎîJ@îJ@ï;}îàï9çî`î# î½î áî%Iï9çî ôï8dî úï8dî ôï6¢xÉî-ï6¢t¸ï6¢î…îÝîÝï6¢vï6¢ î°ï6¢tï6¢î�îéîéï6¢vï6¢î%ï6¢tï6¢î%tî&¾î)ªî*§î-ˆî0À î8Zî=ïîCÆîDîîFoîGlîGlï6¢îàï5 îN îÑî#Bï5 î ôï3‰î úï3‰î ôï1ÇxÉ î›ï1Çt¸ï1ÇîóîKîKï1Çvï1Çîîqî#Ûï1Çtï1Çî$¬î'î'ï1Çvï1Çî,Gï1Çtï1Çî,Ÿî-éî0Õî1Òî4³î7ë î?…îEîEï1Çîàï01î·îßî`î]î Ë î(Nî-î-iî-iï01vï01î3Óï01tï01î4+î5iî7šî: î@eîBîD�îFîHKîHKï01îàï.›îîPîPï.›vï.›î$Æï.›tï.›î%î&\î(�î+ñ î2Uî4Çî6Rî8ƒî=Bï.›î ôï-î úï-î ôï+CxÉ îóï+Ct¸ï+CîKî£î£ï+Cvï+C îÎî&î#Yï+Ctï+Cî$*î%tî(Âî)¿î, î/Jî2@ î8¤î9¬î<î=©î?ÚîDFîJ¸îJ¸ï+Cîàï)­î` îúî!åï)­î ôï(*î úï(*î ôï&hxÉ îaï&ht¸ï&hî¹îîï&hvï&hîßî7î$ùî%Qî*„ï&htï&hî+Uî,Ÿî/íî0êî3Ëî6uî9k î?Ïî@×îCIîDÔîGîGï&hîàï$ÒîLî¾î > î'Øî-lî-Äî-Äï$Òvï$Òî4.ï$Òtï$Òî4†î5Äî7õî:\ î@ÀîBxîDêîFuîH¦îH¦ï$Òîàï#<îîPîPï#àî?Ý îFýîFýïî ôï™îî‡î¸îõîÍîþî î"|ï™îêïî1îÐ îÓî!î"šî$]î(#î)Žî,„î/óî1s î6Ìî8ýî>:îB§ îIîIïî ôï“îîDî�îYîŠî›î!î#`î%#î*®î,.î/.î2 ï“îêïîðïî ôïNî mïNxÉïN î×ïNt¸ïNî/î‡î‡ïNvïNîìîD î#2î#Š î*î*`î0lî0Äî;ËïNtïNî<œî=æîBÁîFGîI(îJ³îJ³ïNîàï¸vî”ï¸tï¸îìîvî!î#2î#2ï¸vï¸î&?ï¸tï¸î&—î( î.õî4Šî9Cî<.î>_î>_ï¸vï¸ îEõï¸tï¸îGÙîGÙï¸îàï"î>î¾îTîŒ î&¬î)�î/pî1Hî3yî8Šî;Jî@îAnîAnï"vï" îG”ï"tï"îHCîH›îH›ï"îàïŒvîíïŒtïŒîEî~îAîî!^î"éî&¥î+’î1î37 î=Lî>âîCXîC°îEîG6îJ�îJ�ïŒîàï öîî©îî³î!Òî$Éî&úî*^ î0Âî3£î5.î80 î?îBgîC¥ îJoîJoï öîàï sî`î‘î+îåî!½î#îî(ÿî+lï s a êq?€`½Þ3(BUSBLT.RIGHTBYTESarraystartingindexbusaddressnelementstoexternalmemory?)--transferthelesssignificantbyteofeachwordofnelementselementsofthearrayinInterlisp-Dmemory,startingwiththestartingindex'thelement,toorfromconsecutivebyteaddressesontheexternalbus,startingatbusaddress.arraymustbeanarrayofeitherWORDs(=SMALLPOSPs)orFIXPs.(NotethatarraycannotbeofBYTEs.)OntransferstoInterlisp-Dvirtualmemory,themoresignificantbyteofeachwordiszeroed.(BUSBLT.NYBBLESarraystartingindexbusaddressnelements)--transferevery4-bitnybbleofnelementselementsofthearrayinInterlisp-Dmemory,startingwiththestartingindex'thelement,toconsecutivebyteaddressesontheexternalbus,startingatbusaddress.Each4-bitnybbleofInterlisp-Dvirtualmemorycorrespondstoabyteintheexternalbusmemory:theInterlisp-Dnybbleisright-alignedintheexternal-busbyte,withtheleft4bitsoftheexternal-busbyteunspecified.ThebyteresultingfromthemoresignificantnybbleofeachInterlisp-Dwordistransferredtothelowerbyteaddressontheexternalbus.arraymustbeanarrayofeitherBYTEs,WORDs(=SMALLPOSPs)orFIXPs.NOTEthatonlythetransferfromInterlisp-Dmemorytoexternal-busmemoryisimplementedatthiswriting.AreadformofBUSBLT.NYBBLESisexpectedtobeaddedlater.AlsoBUSBLT.SWAPBYTES,whichwilldifferfromBUSBLT.BYTESonlyinthatthemoresignificantbyteofthe1108wordwillcorrespondtothehigheraddressontheexternalbus.Dma--overviewofdirectmemoryaccessontheexternalbusTheBusMasterincludes,inadditiontopeekandpokeapparatus,a3-channelDMAcontrollerandmemoryrefreshcircuitry.MemoryrefreshcircuitryisnecessaryfordynamicRAM(suchasthatusedinthePC)tokeepitsdata.AsintheIBMPC,theBusMaster'smemoryrefreshcircuitryisintegratedwithitsdmacontrollerandtimer,andusesthefourthdmachannel#0.Memoryrefreshisinitiatedduringtheglobalinitializationofthedmacontroller.TheseoperationswouldbedoneautomaticallyonanIBMPC.Directmemoryaccess(dma)referstoaprocesswherebyani/odevicecantransferdatatoorfrommainmemorywithoutdirectinterventionbythecentralprocessor.Thatis,althoughthecentralprocessormusthelpinsettingupthedmaoperationandintidyingupafterit,manybytesofdatacanbetransferredinasingledmaoperationwithoutthecentralprocessorhavingtobeinvolvedaseachbyteistransferred.Thisinvolveshavingdedicatedhardware(inthiscasetheBusMaster'sdmacontroller)withmemory-addressandtransfer-countregistersandcontrolcircuitry.Typicallyasingledmaoperationtransfersapredeterminednumberofbytesofdatafromthei/odevicetosequentialaddressesinmainmemory,orsimilarlywiththedatagoingfrommemorytothei/odevice.Thedmacircuitryhastoallowfortheoperationtoterminateprematurely;theBusMasterallowstheoperationtobeterminatedprematurelyeitherbytheprogramorbythei/odevice(thoughnotalli/odevicesaresmartenough).TheBusMasterwillalsoallowdmatotakeplacetoorfroma"circularbuffer"inmemory.Thisisreferredtointhisdocumentbythenot-obviously-appropriatename"AutoinitializationMode".Thenamecomesfromthefactthat,inAutoinitializationMode,thedmacontrollerdoesnotterminatethedmaoperationwhenthetransfercountrunsout,butratherre-initializestheaddressandcounterregisterstotheirinitialvalues,thus"wrappingaround"the"circularbuffer".InthiscasetheBusMasterwillletthedmagoonforever:thei/odeviceortheprogramhastoterminateit.Thedirectmemoryaccessdiscussedheretakesplaceentirelyontheexternalbus.Thereisnodirectmemoryaccesspossiblebetweeni/odevicesontheexternalbusandthe1108'smemory.Asimilareffectcanbegotbyusingdmabetweenthei/odeviceandthememoryontheexternalbus,togetherwithblocktransfersbetweentheexternalbusmemoryandthe1108'smemory(discussedintheirownsectionabove).AsontheIBMPC,thedmacontrolleranditssupporthardwareareactuallycontrolledviapeeksandpokes.However,theBUSMASTERpackageincludesasetofBUSDMAfunctionsthatimplementaî+lï sî êïføt¸îI“ïh„s7îJjïh„î ôïbt¸î úïbî ôï`?î mï`?xÉï`?î…ï`?t¸ï`?îÝî5î5ï`?vï`?î šî ò î(àî)8 î/¶î0î6î6rîAyï`?tï`?îBJîC”îHoîJ îJ ï`?îàï^©îG î«îŒî!î$î'rî(ýî(ýï^©vï^©î.±ï^©tï^©î/ î4“î6î8Oî8Oï^©vï^©î;\ï^©tï^©î;´î=4 îDîI§îI§ï^©îàï]î™î„îµîµï]vï] î%Kï]tï]î'/î,�î. î/£î2Û î9ûî<ÜîB¿îD—îFÈîFÈï]îàï[}îñî±î jî!Õî!Õï[}vï[} î'ûï[}tï[}î(ªî)î)ï[}vï[}î,ï[}tï[}î,gî/ î1cî3&î6€î8 î;ÇîA;îClîClï[}îàïYç î�î3î#©î$î'Áî*`î*`ïYçvïYçî-mïYçtïYçî-Åî2î3Óî5^î:Ãî;î=KîBªîD*îD*ïYçîàïXQ î¾îçî$|î&­î* î0uî3Vî4áî7ãî;<î_î>_ïSvvïSv îEõïSvtïSvîGÙîGÙïSvîàïQàî>î¾ î!Þî$¿î*¢î,zî.«î3¼î6|î;5î< î< ïQàvïQà îBÆïQàtïQàîCuîCÍîGîJ'îJ'ïQàîàïPJîAîÌ î ªî$Óî* î1}î2ýî3úî6Ûî8[î:Œî?�îBîG»îHîJDîJDïPJîàïNÇ î¾îî ] î(Bî)Âî+ó î3�î6Æî9±î;âî>(î?0îA¢îC-îE^îE^ïNÇîàïMD îzî[ î%Çî&î(Èî+©î1î4Tî6…î9é î@MîD®îF9îI;îI;ïMDîàïKÁ î¾îîU î&î'Ÿî)Ðî-jî0Kî5î6Ýî9î>î@ÞîA6îA6ïKÁvïKÁîDCïKÁtïKÁîD›îGÔîI—îI—ïKÁîàïJ+î£îýîˆîDî#1î(¥î*Ö î4“î6)î:Ÿî:÷î?OîAîîDØîG îG ïJ+îàïH¨î»îó î"Ñî(î)Ž î1(î6eî7£ î?ÀîA+îC�îH#ïH¨î ôïG%î úïG%îêïE¢îIî5îmîø î$ªî%èî+sî,óî.¶î2ªî5÷î6Oî9NîHNîHNïE¢î ôïDî ÑîLîçî î!Éî$³î&3î(Òî+î.g î4Ëî7¬î97î;hî>€îAÙîDTîDTïDî ôïBœ îÝî]îŽî­îgî?î!pî&�î(îïBœîêïAîðïAîêï?–îðï?–î ôï>wÉî Äî5î¥îqîÞî!åî&Éî(òî+’î1¿î4#ï>îêïŸîA>îB¾îEàîGŒîJ¹îKîKï6$î ôï4¡î ×î WîˆîŸîîN îÇî$î(qî-­î.ë î50î8î9Çî<³ îB¾îEGîIîIï4¡î ôï3î }îHîyî‚înî^î î uî%Þî*Kî+‰î0¹î4ùî7*î; îBÄîDOîF€îIlîIlï3î ôï1› îVî®î€ îúî÷î ºî#ý î,9î.î/Ôî2ëî5ï1›îêï0îðï0îêï.•îóî0îîìî#“î%î&î*³î0î1Õî3ùî8 î:jî?EîBîC›îE1îHiîHiï.•î ôï-î BîîXî î"‹î$Yî&Šî*à î1î1pî4‡î6î;¦î=×îB-îHîHï-î ôï+�î -îî˜îÍî±îâîÎî"Äî%Mî&Íî+Cî-'î04î1´î5Pî8µî:@î=î?sîA6 îHîI€îJ}îJ}ï+�î ôï* î ¯î›î‘îjî›î!ñî'Òî,î-�î/`î4Çî6Hî9Jî<+î=i îDŠîDâîGÌîGÌï* î ôï(‰îîdîgî?î!8î#ªî&jî(› î0î3 î9„îGîCÛîD3îGîH[îH[ïôî ôïqîî†îîxî²î€î±î.dî1õî=CîBîBtîEîH®îH®ïqî ôïîî òî*î[îÙîÐîPî$îî)î+Iî.5 î4@î7Aî9‡î?îA°îDœîJ’îJ’ïîî ôïkî zî«î†î,îî¶î î#æ î+eî-–î2Pî4Ùî9¨î>Úî@ZîCqîG*îG*ïkî ôïèîJî î²îïî î$“î)™î)ñî+“î.î0Åî2öî9“î<î=Ûî@ îBøîDºîF’îF’ïèî ôïeîúî+îOîcîùî*î ˆî"Ïî$Oî*Gî+tïeîêïâîðïâîêï_î“îDî�î_î$6î'"î*pî-Ôî2¢î4zî6«î;¼î>{î>ÓîB¥îCãîE»îIlîIlï_î ôïÜî1îîî\î€î$î%ðî(!î-2î/šî2#î4Tî8Hî=Üî>4î?“îCçîGƒîIàîIàïÜî ôïYî ·î çîµî/îîYîŠî®î#Âî&Kî(|î-¹î/‘î1Âî6Óî9“î>ÅîA°îE>îJ�îJ�ïYî ôïÖî2îcîtîÜîî ¢î"Óî&Çî, î2Tî3Ôî6ëî9Àî>+îB{ïÖîêï Sîðï Sîêï ÐîÍî¥îÖîíîkîœîˆ î%“î(î)Èî.¢î4zî6 î;„ îAÑîCàîG†îJîJï Ðî ôï Mîî^îbî“î«î$¼î)íî*êî,Ùî.dî5î:Ëî=jîDîEîEï Mÿ- êq?€`½ 4higher-levelviewofthedmacontroller.ThisviewofthedmacontrollerisbasicallyasimplifiedversionofthatinthespecificationsfortheIntel8237-5A,onwhichthesystemisbased.Dma--detaileddiscussionofthedmaprocessTypicaldmaoperationsusingtheBusMasterarequiteeasytoprogram--youareonlydealingwithonei/odeviceandinonlyoneway.Evenplanningtheuseofoneparticulari/odeviceisnottoobadifyou'renotgoingtobeexotic.Unfortunately,i/odevicesdifferinmajor&minorways,theBusMasterisdesignedtofitwellwithmostofthem,andthisdiscussionhastoenableyoutoplantheuseof(almost)anyi/odevicein(almost)anywayreasonable.Sopleasebetolerant.MyhopeisthatafteryoureadthroughtotheSummarysectionbelow,youshouldhaveatmostafewquestions,whichcanlikelybeansweredbyskimmingaround.(Ifyouareplanningexoticthings,youmayneedtoreadthespecificationsforthetheIntel8237-5Admacontrollerchip,onwhichtheBusmasterisbased,andtheTechnicalNotessectionbelow.)ThedmacontrollerandmemoryrefreshcircuitryhavetobeinitializedbeforeanydmacantakeplaceandbeforethememoryinthePCexpansionchassiscanholddatareliably.ThisisdonewiththeBUSDMA.INITfunction(thoughundersomecircumstancesyoumayalsoneedtheBUS.RESETfunctiondiscussedabove).BUSDMA.INITcanbecalledagainatanytime,withthesideeffectofdisabling(masking)allthreedmachannels.Thedmacontrollerhasthreeseparatedmachannels,numbered1to3.(Thereisactuallyalsoafourthchannel,numbered0,dedicatedtothememoryrefreshapparatus.)Eachi/odevicethatdoesdmahastoknoworbetolditsdmachannelnumber,asdoesthesoftwarecontrollingthedevice.Usuallyadevice'sinterfacecardhasswitchesorjumperswhichdeterminewhichdmachannelitwilluse.Onlyonedevicecanbeusinganyonedmachannelatatime.Thustherecanbeatmostthreei/odevicesdoingdmaatanytime.Thethreedmachannelsarecontrolledseparately.Wethinkintermsofdma"operations".A"singledmaoperation"is:theprogramgetsthei/odeviceanditschannelsetupfortheoperation;manybytesaretransferredoneatatimeattheinstigationofthei/odevicebutunderthecontrolofthechannel;thetransferisterminatedsomehowbyeitherthechannel,thei/odevice,and/ortheprogram;finallytheprogramtidiesupthei/odevice&thechannel.Also,duringthetimewhenindividualbytesarebeingtransferredbythei/odeviceandthechannel,theprogrammightintervenetotemporarily"suspend"andthen"resume"thedmaoperation.Itisimportanttonoticethatthedmacontrolleritselfdoesnotactuallydistinguishbetween"suspended"and"terminated":iftheprogramresumestheoperationthenitwas"suspended";ifitsetsupanewoperationthentheoldonewas"terminated"!Thesetupofthei/odevicedependsonthedevice.Settingupthedmachannelbasicallyinvolvessettingupaddress,transfer-count,andmoderegisters.Itwouldbeprematuretodiscussthesetupfurtherhere,aswehavenotyetmotivatedtheissues.Ratherwewilldiscusseverythingelse,includingthefunctionofthechannel'sregisters,thendiscusssetupagainintheSummarysection.Duringtheextended"dmaoperation",individualbytetransfersarerequestedbythei/odeviceinvolved.Ifmorethanonedevicerequestsdmaatthesametime,thedmacontrollerservicesthelower-numberedchannelfirst.Thedirectionofthetransfer(toorfrommemory)hastohavebeensetupthesameinboththei/odeviceandthedmachannel.Thememoryaddressto/fromwhichthetransferwilltakeplaceisdeterminedentirelybythedmachannel.Normallyitusessuccessivelyincreasingbyteaddressesinmemory,butitispossibletousesuccessivelydecreasingaddresses,andin"AutoinitializationMode",thechannelwillwraptheaddressesaroundacircularbuffer(wrappingineitherdirection).Forexactlyhowaddressesaregenerated,seethediscussionofthepage,current-address,andbase-addressregistersbelowintheRegisterModelsection.Dmaonaparticularchannelcanbesuspendedandresumedby"masking"and"unmasking"thechannel.Amaskedchannelrefusestohonoranydmatransferrequests.Ifthereisadmatransferrequeststillpendingwhenthechannelbecomesunmasked,thechannelwillservicetherequestthen.Obviously,datacanbelostbykeepingthedmachannelmaskedtoolongwhileitsi/odeviceisrequestingtransfers.Itremainstodiscusshowadmaoperationisterminated.Thisispotentiallyrathercomplicated.îEï Mî êïføt¸î ôïh„s7î Ëïh„î ôïbt¸ îJîVîáîîþ î!`î$Jî'Vî(áî+î-þ î4 î5Gî:£î;  îA×îFnîGùîJ˜îJ˜ïbî ôï`~î tî ¥ îÖîåîî-î"Íî$¥î(‚î*³î.ÿî0=î3ôï`~îêï^ûîðï^ûîêï]xîðï]xî ôï[üwÉî Äî5î î¯î{î!î$tî)­ï[üîêïZBt¸îðïZBîêïX¿î¡î� îî �î"²î)Oî+uî.Îî1¤î3$î8‚î9ÌîzîAdîFîHñîHñïX¿î ôïW<î qî•î©î2î²îœîîîrî"Ëî(Tî*…î,Ìî.Wî0Ô î6Öî8úî=î>Lî@’îBÌîEUîFˆîJ‘îJ‘ïW<î ôïU¹î :îÔîTîî?î— î ¦î"Êî'bî*ýî,}î0Cî1­î5”î9î;KîAèîC&îH°îJ0îJ0ïU¹î ôïT6î •îSî>îkîöî¨î1î£ î$ñî'8î(¸î,íî/uî0õî3àî6î8Xî9ãî? îA|îC îG´îI4îI4ïT6î ôïR³îî�î7 î*î‚îZî!Mî#î(Kî(£î+î.Cî/�î2 î5-î7µî:¡î?§îA'îCXîIgîIgïR³î ôïQ0î_î“îîeî}îèî!î"î$… î*¾î.›î0øî4…î6Hî< î=îîDîHôîILîILïQ0î ôïO­î ÂîJîpîùîÊî î ’î#hî&–î(î+î-3 î5dî7sî9¤î;Õî>ìîD4îG îG ïO­î ôïN* îÿî7îîìîî!Žî"Ìî&Öî)_î+�î1œî5gî9Òî>~î>Öî?.î?4ïN*îêïL§îðïL§îêïK$î“î îŠîî"Pî&½î+ùî/î0‘î2T î8sî<’î?îAñîDNîGîJ|îJ|ïK$î ôïI¡î }îœîÍî îŠî»îáî$%î(pî*Íî-Íî0£î5¼î6î8þî:<î=î@jîB›îB›ïI¡î ôïH î÷î>î9î" î%p î-ñî0yî3Oî5ìî9î;KîCDîH‹îH‹ïHî ôïF›îËîmîÅ îÈî!%î"èî&®î*(î+“î.î1Tî4?î6pî9î<µî>@îCéîJîJïF›î ôïEî µîîûîtïEîêïC•î“î îŠîÑî +î%Sî(?î. î4rî5zî6úî8Yî8±î<üî>:îCîE»îF¸îJÁîJÁïC•î ôïBî<î£îîî†î ·î%ôî*a î1@î1˜î4Ûî6ÿî;î=²î@³îCŸîEæîGfîGfïBî ôï@�î ƒîîÜî„î0îî î"`î#áî&âî)î.[ î5î7Fî;±î< î@âîAßîFÏîFÏï@�î ôï? îhîIî�îÂîXî tî$Qî*¡î.~î1jî6Zî7‚î9ýî<›î<¡ï? îêï=‰î,î©î½îîÝî Wî"Êî%Gî(3î-#î.Žî/‹î2Øî30î6~î9Øî<5î=øî?cîB�îEêîHîHï=‰î ôï<îŒî<î(î“îîSî«îTî"®î%šî+î-4 î3� î9Àï<îêï:ƒîGîµî5îÑî\îH î&yî&Ñî(0î,›î/‡ î6-î7äî:î?sîBîDCîFgîJ{îJ{ï:ƒî ôï9î }î)îîîìîûî, î!›î%7î(œî* î1Œî4 î5tî6qî9gî:Òî= îC|îEîG8îI\îI\ï9î ôï7}îîZî-î^îÞîiîšî$î&4î+î,M î3 î8ìî:ºî>vî@§îEïîH îJDîJDï7}î ôï5úî`î×îîßîñî!"î&€î)ùî+Ýî.î02î4Fî5°î7áî=(î=€î@×îEîGHîJ>îJ>ï5úî ôï4wî z îÇî,îRîí î#·î%…î'¶î)Úî-îî0wî2¨î7ðî:!î?îCFîIîJ�îJ�ï4wî ôï2ô î)î¦î/î&î#î%Pî(< î.‰î.áî0+î1iî7—î9î<þî?�îAÎîDºîDºï2ôî ôï1q îÿî+î,îrîV î$î)P î18î3Á î”î@ÅîBéîFýîFýï%Yî ôï#Öî²î î_îÃîºî7îKî#sî&_î'Êî)ûî-Jî0˜î2Éî5µ î;Àî@šîBËîBËï#Öî ôï"S îîîî^îî$šî&%î(Vî-1î/*î0Àî3øî9®î;õî=uî@�îC»îEªîGŽîI¿îI¿ï"Sî ôï Ðî CîÃîÏîî$î8îÁîòî!Þî&Óï ÐîêïMî“îÐîŠî šî$wî&¨î+ƒî-þî0Èî4,î5j î<€îANîCîEMîH9îH9ïMî ôïÊî;î“î�îµî€ î Ì î'î)ñî/Ôî1Tî6éî9;î:cî;¡î@°îB0îDwîDwïÊî ôïG î@ îÇ îî ‹î" î-Yî23î4dî9Tî;Ïî?îADîG'îG'ïGî ôïÄî�î~îAî@î›î î#× î*:î*’î-î1zî4Oî:2îaîC<îGàîJPîJPï¸î ôï5îî¡îÒîÂî+î%Þî(î,ÿî/zî3Ðî6î:¥î=óî>K îDûîGÑîJ.îJ.ï5î ôï²î ·îîëîåîîîòî#Áî%ûî(åî,iî.î09î4Mî5‹ î< îA½îAÃï²îêï/îðï/îêï¬î4î/î¯îîðîíî!Ùî'Ïî) î0"î0zî3dî4¢ î;<î? îFèîFîï¬5 êq?€`½·5Dmatransferswillceaseundereitherofthreeconditions:thei/odeviceceasestorequestdmatransfers;thedmachannelmasksitselfbecauseitstransfercounterrunsout;orthedmachannelismaskedbytheprogram.Ineithercase,thedmachannelitselfdoesnotdistinguishbetween"suspended"and"terminated".Iwilltrytosaywhatitdoesdo:Atanygivenpoint,admachannelisaskingitself"AmImasked?".Ifso,that'sall.Butifitisnotmasked,itthenasks"AmIreceivingarequestforadmatransfer?".Ifnot,that'sall.Butifitisreceivingarequestforadmatransfer,thenitgetsthetransferdone,andthenincrementsordecrementsitscurrent-addressregister,anddecrementsitscurrent-transfer-countregister.Ifitscurrent-transfer-countregisterdoesnotgotozero,thenthat'sall.Butifitscurrent-transfer-countregisterdoesgotozero,thenthechannelassertstheexternal-bussignalnamedTC,andalsosetsits"TCbit"inthedmacontroller'sstatusregister.(TheTCsignalisalsoreferredtoasEOP,andisavailableforthei/odevicetosenseifitwants.)Thechannelthenasksitself"AmIinAutoinitializationMode?".IfitisnotinAutoinitializationmode,thenitmasksitself;ifitisinAutoinitializationmode,thenitreinitializesitscurrent-addressandcurrent-transfer-countregistersfromthecorrespondingbaseregisters,butdoesnotmaskitself.Inanycase,thedmachanneldoesnot"terminatethedmaoperation"really:itmaymaskitself,anditmayemittheTCsignalandsetitsTCbit,andtheprogramorthei/odevicemayactonthesethings.Butallthechannelcaresaboutthis,untilitisactedonbytheprogram,isthatifitmaskeditself,thenitstaysmaskeduntiltheprogramunmasksit(possiblyafterchangingitsotherregisters!).Thei/odevicemightceasetorequestdmatransfersforanyofseveralreasons,including:ithasitsowntransfercountregister,whichhasrunout;ithasdetectedanerrorconditionandchosentostoptransfer;ithasdetectedtheTCsignalfromitsdmachannelontheexternalbus;ithasdetectedsomeotherterminationcondition;orithasbeendisabledbytheprogram.Anyparticulari/odevicemaywellnotsupportallthesechoices.Thedmachannelcannottelldirectlythatthedevicehasceasedrequestingdmatransfers;itsimplyrespondstothemif&astheyarise.Typicallytheprogramdeterminesthatthei/odeviceconsidersthedmaoperationdone.Theprogrammightmaskthechanneltemporarily,forsomekindofhousekeepingreason,oritmaydosoaspartofterminatingthedmaoperation.Itcanhaveanysortofreasonfordoingthis.Thedmachanneldoesnotcare:iftheprogramchoosestoresetsomeofthechannel'sparameterswhileitismasked,that'sfine;otherwisewhenthechannelbecomesunmasked,itwillkeeponfromwhereitwas.Changingadmachannel'sparameterswhileitisunmaskedisriskyandtobeavoided.Directmemoryaccess--registermodeloftheBusMasterdmacontrollerInourmodelofthedmacontroller,therearenoglobalregisters,andeachchannelhasasetofsevenregisters:Pageregister--Suppliesthemoresignificantbitsoftheexternal-busmemoryaddressesgeneratedbythechannel.Thecontentsofthisregisteraresimplyconcatenatedontotheleftofthecontentsofthecurrent-addressregisterwhenanaddressisgenerated.Unfortunately,incrementingordecrementingachannel'scurrent-addressregisterdoesnotaffectitspageregisters.(Thisimpliesthatanydmaoperationmusttakeplaceentirelywithinone(64KB-aligned)64KBpage,sincethecurrent-addressregistersare16bitswide.Further,admabufferthatseemstooverlapa64KB-pageboundarywillreallywraparoundwithinthe64KB-pageitstartsin.Thepageregistersaresetupbytheprogram,butcannotbereadbyit.Current-addressregister--Holdsthelesssignificantbitsoftheexternal-busmemoryaddressesgeneratedbythechannel,thatis,the16-bitaddress-within-page.Thechannelgeneratesaddressesbyconcatenatingitspageregisterontotheleftofitscurrent-addressregister.îFîï¬î êïføt¸îI“ïh„s7îJjïh„îêïbt¸î.î�îîmî!@î$üî&‡î)á î0Èî1 î3Qî5uî9‰î=rî>òîC–îF‚îF‚ïbî ôï`~ îÌîýîéîÙîÁî íî%Þî'Šî,eî14î4 î6ßî8uî:¦î=’îB‚îCÀîH�îJ]îJ]ï`~î ôï^ûî %îˆï^ûîêï]xîðï]xîêï[õîŒîHî`î‘î}î!mî$™î'šî)à î0œî5Ú î=Âî@K îHÀîIîIôîIôï[õî ôïZrî oîiîéîîHîpîqîpïZrîêïXïî·î*î¯îuîrî^î#Nî$Œî(Ÿî+Ëî/î/ßî6Cî6›î7ðî9Þî=Yî?ïXïîêïWlî\î�î·îõî;îbîŠî �î#@î&xî'Tî,þî-ûî2Ÿî4®î5«î8— î?î?_î@´îCRîFÍîH“ïWlîêïUéî\î�î·îõîŸîœî @î"Oî#Lî&8î+kî.bî/Šî2)î4Zî95î<Ðî?YîBP îIîJ¯îJ¯ïUéî ôïTf îî¬î î!&î#¯ î*»î,gî9Ãî>Èî? î@uîB!îB!ïTfî ôïRãîPîþîÿî!Eî#î$‡î'³î*ªî.%î/ëïRãîêïQ`î\î�î;î!—î&Eî)Fî+î,ˆî/´î2«î4Üî9Ìî=ìî@ îG·îG·ïQ`î ôïOÝî ¯îî™î"î¿î2îÞî Éî#gî$çî'î* î0ëî4’î9—î<¹î>ôîB¯îCíîFŠîFŠïOÝî ôïNZîî†îî€î îGîÏî Þî#î%3î)Gî*Çî.7î/jî0’î5î5lî8î=î?üîB»îEçîIîIûîIûïNZî ôïL×î tîîyîÑî&îNîŒî!Òî#Rî-ðî1îî4åî6 î9õî=šî=òî?%î@MîA‹îC îC ïL×î ôïKTî’î�î‡î¯ î#µî%aî.Õî1^î>ºîCìîG$îIUîIUïKTî ôïIÑ îµî¡ î+î}î ~î"Äî&(î)«î)±ïIÑîêïHNîŒîÿîîHî4î $î#%î%k î,î.Dî10 î7Öî;éî=î?çîCKîFÏîIXîJ€îJ€ïHNî ôïFËî ÊîÀîñî,îçîpî_î î Fî"Œî%î'Fî,¤î.:î0kî2�î6£î9yî;~î=Vî@°îDïîEGîG¹îIzîIzïFËî ôïEHî %îîYî îÔîêîî Pî#Àî%˜î'fî)—î/Mî0‹î3*î4]î5…î:Tî=Øî@ÏîA÷îEîIéîIéïEHî ôïCÅî î;î™î î5î Èî#Õî)€î+,î.› î5î5ïCÅîêïBBîðïBBîêï@¿î“î·îËî’î÷î wî%î(î-fî/uî1èî3sî7Ôî<Ú îC3îC‹îD³îFúîH¦îH¦ï@¿î ôï?<î Éî¤îJîPî-î tî"Üî%›î&Ãî) î.Sî0î3Yî9Cî;Ìî@-îA­îDwîIËîIËï?<î ôï=¹î î cî¬îÝîîÓî î·î"£î'“î)kî+œî0­î3Žî4¶î6ýî»îC•îEVîH°îH°ï<6î ôï:³îâî:îãîÏî¿î î 9î$üî'›î)Ìî-àî0'î4R î:Îî=º îC’îDºîHùîHùï:³î ôï90î‰î îcî–îî�îbîÅîî$æî'î,u î3Iî5èî8î:=î>QîDîFMîI9îI9ï90î ôï7­îêî2ï7­îêï6*îðï6*îêï4§î“îñî¸îî Mî%= î,Êî.Ùî2=î5=î6È î?1îC³îEIîFqîIGîIGï4§î ôï3$î Ìî bîãî˜î# îNîîk î%¸î&î'Zî)·î,Ïî/Bî1Êî3Uî7î9Žî=>î@î@_îCîEôîEôï3$î ôï1¡îäîåî+îdî¼îïî î ~î%Wî&×î)ïî-Sî.Þî1î6Û î=°îA4îB\îCšîHÁîHÁï1¡î ôï0î oî†î}îî4î!$î&�î-@î.hî0ãî4î5Ýî9î<þî>&î@ûîASîGaîH^îH^ï0î ôï.›î àî¬ î�îî-îkî%Æî'î*0î,¹î.9î/üî4ûï.›îêï-îðï-îêï+•îðï+•î ôï*wÉîØîßîÃî4î�î!Sî%õî'Áî*aî2’î5ë î<Öï*îêï(_t¸îðï(_îêï&ÜîŒîèîðî{î¬î˜ î#ûî'Uî){î+Sî/D î4Îî7Wî:Yî?IîA�îB�îD|îFîI£îI£ï&Üî ôï%Y îMï%Yîêï#Öîðï#Öî ôï"fvî , îeï"fîêï ÐtîGîxîÜ î @î"²î$=î&n î.î3Eî9(î?BîAîCAîHˆîHàîHàï Ðî ôïMî �îÚîeî×î…î«î ê î(òî+òî.#î0iî1ôî4%î9bî:íî=îF’îF’ïMî ôïÊî¢î(îëî¥îã î ïÊîêïG îù î î!¬ î* î+ î0Õî:Iî>÷îAøîD>îGÚîI†îI†ïGî ôïÄî î•îíîPîæî…îøî"äî(Úî,î.Ýî2Aî7î;"î=Ÿ îGîGïÄî ôïAî ±î!îdî•î î%;î'aî)î+‹î/î/\î4™î5–î8‚î<�î? îBóîDsîI+îJ(îJ(ïAî ôï¾îêîíîhîî Fî$Óî(æî+î2 î35î6šî8ï¾îêï;î“î«îÝîîòîÖî!¤î#Õî)‹î+Ýî0(î1ëî4×î6¥î7Òï;îêï¸îðï¸î ôïHvîƒ î¼ïHîêï²tîÇîøî_ îÃî 5î!Àî#ñ î+‹î0Èî6«î<Åî>“î@ÄîF îH«îJAîJAï²î ôï/î %îìîjîÂîkî$[î*3î0î1ä î:Yî<î?îCËîFËîHüîHüï/î ôï¬î :î Åîqîåî˜ï¬ÿ � êq?€`½í6Aftereachbytetransfer,thechannelincrementsordecrementsthecurrent-addressregisterbyone.Thedirectiondependsonabitinthechannel'smoderegister.Unfortunately,thisincrementordecrementdoesnotaffectthepageregister(asdiscussedabove).Thecurrent-addressregisterissetupbytheprogram,incrementedordecrementedbythechannel,and,in"AutoinitializationMode",reloadedbythechannelfromitsbase-addressregisterwhenitscurrent-transfer-countregisterrunsdown.Thecurrent-addressregistercanbereadbytheprogram,sothattheprogramcankeepitsaccesstotheexternal-busmemorysynchronizeedwithdmaontheexternalbus.Base-addressregister--InAutoinitializationMode,holdsthestartingaddressofthecircularbuffer.Thatis,inAutoinitializationMode,whenachannel'scurrent-transfer-countregisterrunsdown,thechannelreinitializesitscurrent-addressregisterfromitsbase-addressregister.Thebase-addressregisterisloadedautomaticallywhenevertheprogramsetsupthecurrent-addressregister.ThereisnoBUSDMAfunctionforreadingthebase-addressregister.Current-transfer-countregister--Controlsthelengthofthedmaoperation(or,inAutoinitializationMode,thelengthofthecircularbuffer).Thatis,aftereachdatatransfer,thechanneldecrementsitscurrent-transfer-countregister,andifitgoestozero,thenaTCsignalisassertedtotheexternalbusandthechannelismasked(ifnotAutoinitializationMode)orthecurrentaddress&transfer-countregistersarereinitializedfromthebaseones(ifAutoinitializationMode).Notethatthecurrent-transfer-countregistercontainsthenumberofbytetransfersremainingtobedone,asanunsigned16-bitnumber.Notealsothatwhileacurrent-transfer-countregistervalueofzero,viewedasafteradmatransfer,means"done",thesamezerovalueviewedasbeforeadmatransfer,means64K.Thusthemaximumtransfer(orcircularbuffersize)is64Kbytes.(Youmayalsoneedtoknowthatthehardwareregisterkeepsitsvaluesonelessthatwhatwe'vedescribedhere,modulo64K.TheBUSDMAfunctionsmaintainthetranslation.)Thecurrent-transfer-countregisterissetupbytheprogram,decrementedbythechannel,and,inAutoinitializationMode,reloadedbythechannelfromitsbase-transfer-countregisterwhenitrunsdown.Thecurrent-transfer-countregistercanbereadbytheprogram,sothattheprogramcansynchronizeitsexternal-busmemoryaccesseswiththeexternal-busdma.Base-transfer-countregister--InAutoinitializationMode,holdstheinitialvalueofthecurrent-transfer-countregister.Thatis,inAutoinitializationMode,whenachannel'scurrent-transfer-countregisterrunsdown,thechannelreinitializesitfromitsbase-transfer-countregister.Thebase-transfer-countregisterisloadedautomaticallywhenevertheprogramsetsupthecurrent-transfer-countregister.ThereisnoBUSDMAfunctionforreadingthebase-transfer-countregister.Moderegister--Containssomecontrolbits.Themoderegisterissetupbytheprogram,butcannotbereadbyit.writememory?--determineswhetherdmatransfersarefromthei/odevicetomemory,orviceversa.autoinit?--governsAutoinitializationMode.Iffalse,thecurrent-transfer-countregistershouldbesetupwiththelengthofthetransfer,andwhenitrunsdownthechannelmasksitself.Iftrue,thecurrent-transfer-countregistershouldbesetupwiththelengthofthecircularbufferinexternal-busmemory,and,whenitrunsdown,thechannelreloadsthecurrent-addressandcurrent-transfer-countregistersfromthebase-addressandbase-transfer-countregisters,thuswrappingaroundthecircularbuffer.decaddr?--determineswhetherthecurrent-addressregisteristobeincrementedordecrementedaftereachbytetransferred.Maskbit--Whileachannel'smaskbitisset(thechannelissaidtobe"masked"),dmaonthechannelissuspendedinthatthechannelwillignorerequestsfordmatransfersfromthei/odevice.Notethatifani/odevicerequestsadmatransferwhileitschannelismasked,andisstillassertingthatrequestwhenthechannelbecomesunmasked,thechannelwillservicetherequestatthattime.Thusdatacanbelostwhileachannelismaskedonlyifthechanneliskeptmaskedforasignificanttimerelativetothespeedofthei/odevice.î˜ï¬î êïføt¸î ôïh„s7î Ëïh„îêïbt¸îYî[î<îoî î$� î+Yî,ï î3ûî6,î? îDNîFîHðîIHîIHïbî ôï`~î �î0înîFîCî1î±îâî%®î)Tî.Yî.± î7Àî:2î@wîB îH•îH•ï`~î ôï^ûî õî;î×îî îÎîÈî$Ÿî(ïï^ûîêï]xî“îîµî óî"âî$Æî&”î(Åî.{ î6+î7Á î?´îA‚îC³îHûîHûï]xî ôï[õî ÕîUî£î}î#ðî%¾î'ïî,ßî0î1à î9Šî>8îA¾îCjîCjï[õî ôïZrîPîþîêî"Üî#4î%Ýî/Qî3ÿî6\î8î; î<Ùî? îDÀîFVîHõîHõïZrî ôïXïî %îƒîàîî®îŒî î = î'×î- î5Õî8Àî;¬î=„î?µîDÆîG3ïXïîêïWlîðïWlî ôïUüv î» îôïUüîêïTftîŒî*îTî"Øî% î)Âî.|î0î28î6ûî;Qî>hî?þîA~îA~ïTfî ôïRãî’î¼îBî?î# î0gî5î8î;ôî>%îC îJîJïRãî ôïQ`î  îîÂîúî¦ î&mî+ ïQ`îêïOÝî“ îZîîFî#� î+Ìî1Ðî4î9_î;Òî=¶î?çîI[îI[ïOÝî ôïNZîùîQî#îaî9îÕî"î$+î(ïî+ î2çî7šïNZîêïL×îðïL×î ôïKgvîj î£ïKgîêïIÑtîQî‚î‹îîGî!3î')î)�î+î5®î9Øî< î@îA�îCÎîH‘îH‘ïIÑî ôïHNîÃîî2îÈîÕî×î­î!àî$î) î0 î1¹î?îDîFLïHNvïHNîF¤îGtïHNtïHNîGÌîHôîHôïHNî ôïF¸î ßî_î‹î‹ïF¸vïF¸îïF¸tïF¸îfîcîžîYî—î!žî#î%Oî*`î,Èî,ÈïF¸vïF¸î.æïF¸tïF¸î/>î1oî6_î7�îî@^î@^ïF¸î ôïE"î’îÝîsî¤î!=î%÷î'a î0î55î7[ î>£îAÛîD îFøîIùîIùïE"î ôïCŸî  î>îŽïCŸîêïBî1îÐîî$]î) î.<î0mî5iî6ôî9Õî?4îEƒîGîHÆîHÆïBî ôï@™î �îîÓî~îEî˜îðî#7î%Ôî(sî+÷î,ôî:Pî>þîBxîDîG/îG/ï@™î ôï?îkî”ï?vï?îìî—ï?tï?îïîìîØî î î%î'Lî*›î-oî0éî5`î6áî6áï?vï?î:gï?tï?î:¿î;¼î>¨îCÛîGðîGðï?î ôï=€î "î zîÈîùîIî$î 3î$öî(õî+êî-(î/ÿî3iï=€îêï;ýîBîîµîãîcîòî"‘î$Âî*šî/Hî2îî4šî8˜î;î=|î@îCIîFðîFðï;ýî ôï:zîìî0îîAî™îBî$Þî*©î02î2c î9qï:zîêï8÷î“îïî#�î$Ûî&Êî(®î*|î,­î2c î:Vî<$î>UîC�îF~îGþîGþï8÷î ôï7tî’î¼î/îýî".î'î*Vî,î7±î<_î?åîA îCùîGëîHCîHCï7tî ôï5ñî �îùî§î!î"Çî%³î'�î)²î/hî0þî3�î5Îî;,î=‰ îDßîF‹îF‹ï5ñî ôï4n îŽîËîÒî½î î î(ˆî+yï4nîêï2ëîðï2ëî ôï1{vî¢ îÛï1{îêï/åtîŒî*îTî"Øî% î(Âî,<î-Çî/øî=TîBYîEpîGîH†îH†ï/åî ôï.bî’î¼îBî?î# î0gî5î8î;ôî>%îC îJîJï.bî ôï,ßî îTîî¯î bï,ßîêï+\î“îBî!ðî#.î'x î/´î5¸î7éî=Gî?ºîAžîCÏîCÏï+\î ôï)ÙîPîUî­î î!½î#•î*1î/xî1‡î6Kî8|îD+îHÞï)Ùîêï(Vîðï(Vî ôï&ævî ™ îÒï&æîêï%Ptî~îâîbî+îƒî",î%Òî*€î+¾î-­î/‘î1_î3�î9Fî;˜î?ãîA¦îD’îF`îG�ï%Pîêï#Ív î\ï#Ítï#ÍîBîŒ î`î$}î'iî,Èî.îî2&î4Wî6{î:�î<îA¤îC:îEãîIBï#Íîêï"7vîfï"7tï"7îLî–î{î%î)Bî)šî*ïî.Hî0yî=ÕîBƒîFÍîH�îJîJï"7î ôï ¡î ØîÃîôîýîˆî¹îìî uî#ûî%#î(î+ªî-Ûî2Ëî6³î:6î:Žî;ãî>ðîA!îA!ï ¡î ôïîPîþî Hî" î#úî%Þî(Éî*úî/î0Žî2¿î7‚î;�î= îD›îJ0îJ0ïî ôï›î Õî[îƒîoîbî“îƒî$î&@î/´î2=î?™îDËîHîJ4îJ4ï›î ôï î»îDîó î%}î(Sî.5î2Âî4óî9¶î=ºïîêï•vîbï•tï•îHî’ îfî!ƒî#´î-(î1Öî3î4”î6W î>î?� îG�îJ�îJ�ï•î ôïÿî öî× î¦ïÿîêï|îðï|î ôï vî ™îï îêïvtîÑîÎîšîþîìî *î"î$Ãî)³î*ñî-šî/î0Ý î7Ýî:Éî<¡î>ÒîCÂîEîEïvî ôïóî|îüî›îÌî¼î7î"Jî'rî)�î,mî1Ìî5î75î9Yî=rïóîêïpî1îÐîîÆîêîþî#&î$#î'î+êî/nî1î6 î7Hîøî@6îB¦îHîJ¹îJ¹ïpî ôïíî˜îîOî?î¨î%[î'Œî,|î.÷î3Mî5~î:"î;�î>,îAyîAÑîEîGõîJRîJRïíî ôïjî ·îî¡îžîŽîÌî›î …î!¸î#éî(Ùî*î-î1Ñî3àî4Ý î;Aî>7îBäîDdîF•îJGîJGïjî ôï çî î °îÔîíï çÿ¶ êq?€`½Ò7Allchannels'maskbitsaresetwhenthedmacontrolleris(re)initialized,includingatpower-up.Theycanbesetorclearedbytheprogram.Achannelsetsitsmaskbitwhenthecurrent-transfer-counterrunsdown,exceptinAutoinitializationMode.Theprogramcannotreadthemaskbits.TCbit--Whetherthechannel'scurrent-transfer-countregisterhasrundownsincethelasttimeeitherthedmacontrollerwas(re)initialized,includingatpower-uporBUSDMA.READTCBITwasexplicitlyusedtoresetthisbit.Directmemoryaccess--theBUSDMAfunctionsSeetheRegisterModelsectionaboveforexplanationsoftheargumentsofthesefunctionsandoftheregistersreferredtobythem.Thesefunctionsdonotchecktheirargumentsexceptasspecificallynoted.(BUSDMA.INIT)--(re)initializethedmacontrollerandmemoryrefreshcircuitry.Maskschannels1,2and3,andclearstheirTCbits.(BUSDMA.SETMODEchannelwritememory?autoinit?decaddr?)--setthemoderegisterforthechannel.(BUSDMA.SETPAGEchannelhighbitsofaddress)--writetothepageregisterforthechannel.Checksthatchannelisintherange1-3.(BUSDMA.SETADDRESSchannellow16bitsofaddress)--writetoboththebase¤taddressregistersforthechannel.Thechannelmustbemaskedwhenthisfunctioniscalled--thisisthecaller'sresponsibility.(BUSDMA.READADDRESSchannel)=>low16bitsofaddress--readthecurrentaddressregisterforthechannel.Thechannelmustbemaskedwhenthisfunctioniscalled--thisisthecaller'sresponsibility.(BUSDMA.SETCOUNTERchannelnbytes)--writetoboththebase¤ttransfer-countregistersforthechannel.Checksthatnbytesisintherange1-65536.Thechannelmustbemaskedwhenthisfunctioniscalled--thisisthecaller'sresponsibility.(BUSDMA.READCOUNTERchannel)=>nbytes--readthecurrenttransfer-countregisterforthechannel.Notethatthevalue65536isreturnedas(thefunctionallyindistinguishablevalue)zero.Thechannelmustbemaskedwhenthisfunctioniscalled--thisisthecaller'sresponsibility.(BUSDMA.MASKchannel)--setthemaskbitforthechannel,disablingdmaonthechannel.(BUSDMA.UNMASKchannel)--clearthemaskbitforthechannel,enablingdmaonthechannel.(BUSDMA.READTCBITchannelclearthebit?)=>thechannel'sTCbit,asTorNIL.Alsoclearsthebitifrequested.Directmemoryaccess--summaryofsimpleuseGenerallyeachchannelcanbedealtwithseparately.Planning--îíï çî êïføt¸îI“ïh„s7îJjïh„îêïbt¸î îÙî=î¯îÕî Äî$Jî&{î)g î/rî0°î9Bî?"î@�îFçîG?îJ˜îJ˜ïbî ôï`~î Qîîî™î&îôî%îÚî 2î!‘î&�î(ôî* î.î/òî3xî5©îD.îGîGï`~î ôï^ûî çîî‡î%î"Nî"¦î%Oî*­î.øî1äî4î7yî9ðï^ûîêï]xîðï]xî ôï\vî /î¨ï\îêïZrtîjî›îgî)Ãî.qî0¸î3 î6»î9þî€îAvîAvïZrvïZrîD»ïZrtïZrîEîGDîJ0îJ0ïZrî ôïXÜ îÿî}îî ïî"Zî(]î(]ïXÜvïXÜî)‘ïXÜtïXÜî)éî9"î;  îASîD`îEàîHøîHøïXÜî ôïWFî fîYïWFîêïUÃîðïUÃîêïT@îðïT@î ôïRÄwÉîØîßîÃî4îÔî%Æî,GïRÄîêïQ t¸îðïQ îêïO‡îRîƒîµîéî!Tî%&î'5 î.îî0yî2ªî9'î:²î> îC×îF`îGëîJîJïO‡î ôïNî&î8î¸î†îåïNîêïL�î¼î‡î_î¥î Vî#mî)êî. î/‹ î6\î:ïL�îêïJþîðïJþî ôïI<î mïI±îCJîHîHï:œîàï9îî!îRî"™î"ñî%šî*Šî-Ãî/†î4Uî7Ûî:Mî?”î@ÒîD˜îEâîHTîI’îI’ï9îàï7ƒîîqî"±ï7ƒî ôï6î úï6î ôï4>î mï4>xÉï4>îÅîÅï4>t¸ï4>î î ï4>vï4>î$›ï4>tï4>î%lî'Ôî3Tî4žî7Šî9»î>TîCîG¼îIËîIËï4>îàï2¨îîXî°îYî#Iî&‚î(Eî-î0šî3 î8Sî9‘î=Wî>¡îAîBQîD‚îHâîHâï2¨îàï1%î ï1%î ôï/¢î úï/¢î ôï-àî mï-àxÉï-àîqîqï-àt¸ï-àîÉîÉï-àvï-àî#Ÿî#÷î'—ï-àtï-àî(hî)²î-î.€î1Œî3½î6©î8î<¬ îENîJ€îJ€ï-àîàï,Jîïî îgî¿îî"¯î%Nî%Nï,Jvï,Jî(îï,Jtï,Jî)Fî*„î,î.5î1Ñî7î7qî:î? îBCîDîHÕîHÕï,Jîàï*´îfîØîî ]î$#î%mî'ßî)î+Nî/®î7îï*´î ôï)1î úï)1î ôï'oî mï'oxÉï'oîÖï'ot¸ï'oî .î †î †ï'ovï'oî%ï'otï'oî%Õî(=î(=ï'ovï'oî+Ýï'otï'oî,5î-î0kî2œî75 î?×îD…îF”îHÅîHÅï'oîàï%Ùî'îîÆîeî!–î%î(Øî*î/€î1î3« î; îEaîITîITï%Ùîàï$Vî îcî îüî"5î#øî(Çî,Mî,¥î/î4^î5œî9bî:¬î=î>\î@�îDíîDíï$Vîàï"Óî ï"Óî ôï!Pî úï!Pî ôïŽî mïŽxÉïŽ îyïŽt¸ïŽîÑîÑïŽvïŽî)î§ïŽtïŽîxîÂî ±î"âî&Fî(4î*Cî,tî1¼î7eî:Qî<)î>ZîCOïŽî ôïøî úïøî ôï6î mï6xÉï6 î,ï6t¸ï6î„îÜîÜï6vï6îZï6tï6î +î!uî$—î&Èî*,î,î.)î0Zî5¢î; î=öî?ÎîAÿîFôï6î ôï î úï î ôïÞî mïÞxÉïÞîOïÞt¸ïÞî§îÿîÿïÞvïÞî!Õî"- î(=ïÞtïÞî)œî,î.5î4î6<î8‚î:î;Aî<×î@î@jîCiîGîI@îI@ïÞîàïHîÎî îïHî ôïÅî úïÅîêïBîðïBî ôïÆwÉîØîßîÃî4î!óî#¿î(¢î*ùïÆîêï t¸îðï îêï‰îîî îgî!*î$bî'M î-Œï‰îêïîðïî ôï –v î0ï –ÿ; êq?€`½‹8Determinewhatchannelthedevicewilluse.Determinewhatconditionswillterminatethedmaoperations,andhowthedevice,theprogram,andthedmacontrollerwillfindoutaboutthem.Determinewherethebuffer(s)willbe,totheextentthattheyarenotdynamicallyallocated.Ifyouareusingcircularbuffering,orotherexoticstuff,you'llknowitbythispoint.Globalinitialization--CallBUS.RESETwheneveryouwanttosimulateapower-down,power-upcyclefortheBusMaster,theexpansionchassis,andthedevicesontheexpansionchassisbus.CallBUSDMA.INIT.Thishastobedoneatleastoncebeforedoingdmaontheexternalbusorexpectingthememoryontheexternalbustokeepdata.Itcanbecalledredundantly,buthasthesideeffectofmaskingchannels1-3.Sincethereisnowaytoreadthemaskbits,ifyouhavemultiple,logicallyindependenti/odevicesusingdmaonthesystem,youwillhavetocoordinateBUSDMAinitializationinyourownsoftware.Thismaybefixedlater.Admaoperation--Ifthechannelisnotmasked(whichitisafterBUSDMA.INIT),callBUSDMA.MASK.ThencallBUSDMA.SETMODE,BUSDMA.SETPAGE,BUSDMA.SETADDRESS,andBUSDMA.SETCOUNTERinanyorder.(Ifyourmodesettingsorpagenumberforthechannelareconstant,youdon'thavetosetthemeachtime,thoughit'scheap.)Whilethechannelismaskedisasafetimetosetupthei/odevice.NowcallBUSDMA.UNMASK,then,whenready,startthei/odevice.(Itcouldbestartedwhilethechannelismaskedifdatawouldn'tbelost,butthiswayalwaysworks.)Thedmaoperationisnowhopefully"inprogress".Youwillneedtotestthingsduringthistime,especiallysincewedon'thaveinterrupts.IfyouaregoingtouseBUSDMA.READADDRESSorBUSDMA.READCOUNTER,orotherwiseneedtosuspenddmaonthechanneltemporarilyforsomereason,callBUSDMA.MASKtosuspend,thencallBUSDMA.UNMASKtoresume.TostopthedmachannelcallBUSDMA.MASK.Directmemoryaccess--technicalnotes(1)Thecurrent-andbase-transfer-countregistersarekeptinthehardwareasthenumberoftransfersremaininglessone,andthechannelchecksaftereachbytetransferforthecurrent-transfer-counthavingbeendecrementedfromzeroto-1.BUSDMA.SETCOUNTERandBUSDMA.READCOUNTERperformthetranslationtothemodeldescribedabove.(2)Thei/oaddressesofthedevicesdescribedhereinarethesameasontheIBMPC.TheycanbediscoveredbyinspectingtheInterlisp-DsourcecodeinthisBUSMASTERlibrarypackage.(3)ThemainpointofthissectionistotelltechnicallyadvancedreadershowtheBUSDMAmodelofthedmaprocessrelatestotheTruthabouttheBusMasterandtheIntel8237-5Admacontrollerchip.ThisforthosewhohavereadthespecificationsfortheIntel8237-5AdmacontrollerchiporlookedattheBusMasterorIBMPCschematics.Asidebenefit,perhaps,istogivehintsforthosewhoarethinkingaboutusinganexoticdevicethroughtheBusMaster.Thissectionisnotintendedtobeintelligibletoacasualreader.BusMasterfunctionalitythatishiddenbytheBUSDMAfunctions--theInterruptandInterruptMaskbits,ParityError,andingeneralalltheBusMasterstatusandcontrolregisterbits(exceptResetviaBUS.RESET).Notethatinterruptsfromtheexternal-busi/odevicestothe1108aresupportedbyBusMaster,butthe1108microcodewillatpresentblowupifpresentedwithsuchaninterrupt.SeealsoTechnicalNote(1)above.Intel8237-5AfunctionalitythatdoesnotapplyinthehardwarecontextoftheBusMaster--Channel0isdedicatedtomemoryrefresh.Andthereforeblockmemory-to-memorytransferandblockmemoryinitializationareimpossible.I/odevicescannotasserttheTCsignaltothedmacontroller.Commandregister:thetimingvariationsmayormaynotbephysicallypossible,Idon'tknow;DREQ&DACKsenseareofcoursefixed.Moderegister:"cascade"modeisofcoursenotpossible.Notethatthepageregistersarenotonthe8237-5A.î0ï –î êïg v¸î ôïh„s7î Ëïh„îêïbt¸î’îÀî°îáî#õî&pî)î)fî0î3< î9ªî<%îBîDNîG:îG:ïbî ôï`~ îÆîOî$îUîÁîòî$¨î'1î)bî,N î2Yî4Ôî7“î9Ùî=ŠîA;îA“îH;îH;ï`~î ôï^ûî Ýîîƒîþîî™îÊî!¾î$]î'>î)dî+ª î3! î8¹ï^ûîêï]xî?îÇîíîgî* î#Yî$ïî(^î,/î/‰î3-î6¼î7äî9²î<$î?—ï]xîêï[õîðï[õî ôïZ…vîîeïZ…îêïXïtî¨î¡î¥î"-î%[î&Ûî,"î- î51î;4î>wî@†îB· îI¬îI¬ïXïî ôïWlî %îiî î•îÆî ^î"6î$gî*«î.öî1cïWlîêïUéî¨ îîZîDî!‹î# î$Îî(î)|î,rî/‰î3¨î7Xî:Dî<î>MîC^îEÆîG\îG\ïUéî ôïTfîìîîZî2îcî tî"Üî$\î'~î*«î+î,Mî.ªî0mî43 î<î>aî@¨îBÙîE‚îIîJ©îJ©ïTfî ôïRãî0î¤î,î„î îcî¡î!yî$#î%£î(�î*Àî.$î0îî2!î4©î7Áî=_îB˜ îJSîJSïRãî ôïQ`î î°î*îîîîîÃî"Kî$Æî'Þî)^ î/îî6Š î>3î?³îB¿îE”îE”ïQ`î ôïOÝî“îëîÕî«înî¼î·ïOÝîêïNZîðïNZî ôïLêvî Iî î{ïLêîêïKTtî?îpî`îžîäî³î$ î%1î&oî)| î4Pî6« îB6îBŽîEýîHXîHXïKTî ôïIÑî<î&î6šî9#îIËîIËïIÑî ôïHNî tî çîÃîîéîõî›îTî êî$î(þî+ î->î2.î4Tî9éîGîB`ïFËîêïEHîîv î"Bî%‘î)î- î/ìî2î4Aî8¬î9î:Çî>aî@$îDpîGôîJ%îJ%ïEHî ôïCÅîäî"îñî$îúîƒî Fî#î%Vî'Èî*rî.§î2öïCÅîêïBBî“îîuî³îˆî$~î&® î,òî-Jî0)î2¤î5Òî7Rî9¯î=—îA×îDIîG—îG—ïBBî ôï@¿ îõî8î2î–î® î"î"vî"Îî$#î&«î(Ñî,kî-ëî02îAõîC‹îC‹ï@¿î ôï?<îuî î$î'0î(°î-Íî0¹î2‘î4Âî9² î@çîBöîFZîFZï?<î ôï=¹îvîÑ îî…î"úî%ñî(L î5Àî7@î;Þï=¹îêï<6îâî¬îÝîÉî¹î  î+Mï<6îêï:³îðï:³îêï90îðï90î ôï7´wÉîØîßîÃî4î!ÿî%Çï7´îêï5út¸îðï5úîêï4wîäî�îŸî(î� î'/î,aî.‡î1rî2òî5#î:ûî<|î>­îC©îE4îJ“îJ“ï4wî ôï2ôîCîCï2ôvï2ôîŸî§ï2ôtï2ôîWîàîîî#6î&Cî)Eî,&î1î3î5AîB�îFèîJîJï2ôî ôï1^ îçîçï1^vï1^îžï1^tï1^îöîÊîJî"îzî,"î.«î@ÔîEûîH,îH,ï1^î ôï/È î„îî5î=î5î" ï/Èîêï.Eîðï.Eîêï,Âîäî�î±î”îîPî#èî)àî-ôî0î2Kî5šî7î8óî;$î>;î@¸îAîDiîFÆîH‰îH‰ï,Âî ôï+? î�î^ î­îÞ î!¼î%Ûî(òî*rî,äî5üî:;î?Qï+?îêï)¼îðï)¼îêï(9îäî�îÛîIîÔîFî"±î#ïî%oî'ž î.Dî4'î8Àî;•î=ÆîDbîHjîIõîIõï(9î ôï&¶î %îî´îÓîSî„î@î"ñî%"î+¿î.Hî0yî3�î8Øî;Ä îAÏîEîE^îHHîJWîJWï&¶î ôï%3î cî8îPî<îm î žî"­î$Þî'õî-=î0) î64î9î:ªî>ýî@hîB™îI6îI6ï%3î ôï#°î Šî¡îÇ î»îîrîî êî&>î'|î(üî+»î.óî1î4qî7Fî9lî>²îBcîEÝîG îG ï#°î ôï"-î ÅîÙîßî î²ï"-îêï ªîÔî?î}îÃîMî Íî"� î)(î*¨î+¥î/�î3§ï ªîêï'îðï'îêï¤î‡ îUîôî!2î%©î'wî)¨î0D î7î7Yî9Šî?AîAÊîG�îG�ï¤î ôï!î „îNî îüî…îî ¨î"iî$šî+7î.Þî1gî5çî:•î=îA îE<îGKîGKï!î ôïž îkïžîêïî1îÐ îéî!î R î'ìî*î.¨î0(î2Yî5qî7—î=Üî?ª îFŸîHñîHñïî ôï˜î %î=î·î2î�îAî!xî#\î$�î*žî-‰î0‹î2N î7èï˜îêïîRîïîûîBî<î#ïîêï’îðï’îêïîîI îî!¶î$·î&ýî*˜î,î.Iî4!î8Äî:Oî<€ îDîDgîIºîJÂîJÂïî ôïŒî 2î5îµîòî¶îîùî%¯î)=î5yî:Tî<Ýî@kîE¨îE¨ïŒî ôï î�îà î´î îRî!êî&5î)Ñî,î.=î1øî3xî5©î8• î>÷î?OîEáîEáï î ôï†îîLîu î�îWîíî"Ãî% î&Ì î,ùî2`î3<î6 î:¨î?î@ˆîE!îH‘îJ·îJ·ï†î ôï î îžîCî›îmî”î"¹î&_î'�î)(î-Gî/�î4¡ï îêï €î1îÐîîîKî!qî#·î%�î'Àî- ï €  êq?€`½µ9Intel8237-5AfunctionalitythatishiddenbecauseitiseitherimpossibleintheBusMasterhardwarecontextoronlyusefulwithveryexotichardware(Idon'tknowwhich)--Moderegister:"block"mode,"demand"mode.Commandregister:rotatingpriority.Intel8237-5AfunctionalitythatishiddeninBUSDMAbecauseitwasjudgednotusefulincontext--Read&writetherequestbits,readtemporaryregister,clearmaskregister,readbase-addressregister,readbase-transfer-countregister.Commandregisterbits:disablecontroller.Moderegisterbits:the"verify"transfertype.Intel8237-5AfunctionalitythatispartiallyhiddeninBUSDMA--MasterclearisimbeddedinBUSDMA.INIT.Read&clearstatusregisterTCbitsispresented,somewhatmodified,inBUSDMA.READTCBIT.ClearbyteselectflipflopishiddeninthefourfunctionsBUSDMA.READ/SETADDRESS/COUNTER.î- ï €î êïføt¸îI“ïh„s7îJjïh„îêïbt¸îðïbîêï`~îîI îî!¶î"ôî'kî,\î-„î.Âî2~ î9î:˜î<ÉîCfîI>îI>ï`~î ôï^ûî—î-îîÿîêîËî œî&tî'Éî+-î.¼î4î4\î8.î=UîBCîFAîFAï^ûî ôï]xîqînîÆîXî î%nî*5ï]xîêï[õîðï[õîêïZrîîI îî!¶î"ôî'kî(ëî/‡î4xî5 î8î<î>ÅîB­îD-îIÂîJîJïZrî ôïXïî dîÎîîMîñî»î§î%î*î-@î0¤î5ªî8– î@]îEcîHOîHOïXïî ôïWlî£î¨îî!’î&@î)+î-¡ î4î4[î8-î<Ûî?ÆîA÷îGîGïWlî ôïUéîÏîµïUéîêïTfîðïTfîêïRãîîI îî!¶î"ôî($î,›î.î5©î6î:nî=�î>ÎîEîF“îF“ïRãî ôïQ` îNî¦îî€î¢î Iî$÷î'2î)¤î*â î1Iî7ƒî=„î?î?ïQ`î ôïOÝî„îÜîaî Bî#Òî(ˆî)Æî.=î/½î1îî4Ãî:ŽîA�îI.îI.ïOÝî ôïNZîáïNZîêïL×îðïL×ÿï êq?€`½wé TIMESROMAN é TIMESROMAN é TIMESROMAN é HELVETICAé TIMESROMAN ~GACHA é HELVETICAé HELVETICA~GACHA æ pH)­9JGÒV V`¿nqoj/t rÿÿ�Ùêÿÿÿÿÿÿ){ERIS}LIBRARY>BUSMASTER.TEDIT;2JELLINEK 1-Dec-84 16:00:54