listing.disasm 354 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080308130823083308430853086308730883089309030913092309330943095309630973098309931003101310231033104310531063107310831093110311131123113311431153116311731183119312031213122312331243125312631273128312931303131313231333134313531363137313831393140314131423143314431453146314731483149315031513152315331543155315631573158315931603161316231633164316531663167316831693170317131723173317431753176317731783179318031813182318331843185318631873188318931903191319231933194319531963197319831993200320132023203320432053206320732083209321032113212321332143215321632173218321932203221322232233224322532263227322832293230323132323233323432353236323732383239324032413242324332443245324632473248324932503251325232533254325532563257325832593260326132623263326432653266326732683269327032713272327332743275327632773278327932803281328232833284328532863287328832893290329132923293329432953296329732983299330033013302330333043305330633073308330933103311331233133314331533163317331833193320332133223323332433253326332733283329333033313332333333343335333633373338333933403341334233433344334533463347334833493350335133523353335433553356335733583359336033613362336333643365336633673368336933703371337233733374337533763377337833793380338133823383338433853386338733883389339033913392339333943395339633973398339934003401340234033404340534063407340834093410341134123413341434153416341734183419342034213422342334243425342634273428342934303431343234333434343534363437343834393440344134423443344434453446344734483449345034513452345334543455345634573458345934603461346234633464346534663467346834693470347134723473347434753476347734783479348034813482348334843485348634873488348934903491349234933494349534963497349834993500350135023503350435053506350735083509351035113512351335143515351635173518351935203521352235233524352535263527352835293530353135323533353435353536353735383539354035413542354335443545354635473548354935503551355235533554355535563557355835593560356135623563356435653566356735683569357035713572357335743575357635773578357935803581358235833584358535863587358835893590359135923593359435953596359735983599360036013602360336043605360636073608360936103611361236133614361536163617361836193620362136223623362436253626362736283629363036313632363336343635363636373638363936403641364236433644364536463647364836493650365136523653365436553656365736583659366036613662366336643665366636673668366936703671367236733674367536763677367836793680368136823683368436853686368736883689369036913692369336943695369636973698369937003701370237033704370537063707370837093710371137123713371437153716371737183719372037213722372337243725372637273728372937303731373237333734373537363737373837393740374137423743374437453746374737483749375037513752375337543755375637573758375937603761376237633764376537663767376837693770377137723773377437753776377737783779378037813782378337843785378637873788378937903791379237933794379537963797379837993800380138023803380438053806380738083809381038113812381338143815381638173818381938203821382238233824382538263827382838293830383138323833383438353836383738383839384038413842384338443845384638473848384938503851385238533854385538563857385838593860386138623863386438653866386738683869387038713872387338743875387638773878387938803881388238833884388538863887388838893890389138923893389438953896389738983899390039013902390339043905390639073908390939103911391239133914391539163917391839193920392139223923392439253926392739283929393039313932393339343935393639373938393939403941394239433944394539463947394839493950395139523953395439553956395739583959396039613962396339643965396639673968396939703971397239733974397539763977397839793980398139823983398439853986398739883989399039913992399339943995399639973998399940004001400240034004400540064007400840094010401140124013401440154016401740184019402040214022402340244025402640274028402940304031403240334034403540364037403840394040404140424043404440454046404740484049405040514052405340544055405640574058405940604061406240634064406540664067406840694070407140724073407440754076407740784079408040814082408340844085408640874088408940904091409240934094409540964097409840994100410141024103410441054106410741084109411041114112411341144115411641174118411941204121412241234124412541264127412841294130413141324133413441354136413741384139414041414142414341444145414641474148414941504151415241534154415541564157415841594160416141624163416441654166416741684169417041714172417341744175417641774178417941804181418241834184418541864187418841894190419141924193419441954196419741984199420042014202420342044205420642074208420942104211421242134214421542164217421842194220422142224223422442254226422742284229423042314232423342344235423642374238423942404241424242434244424542464247424842494250425142524253425442554256425742584259426042614262426342644265426642674268426942704271427242734274427542764277427842794280428142824283428442854286428742884289429042914292429342944295429642974298429943004301430243034304430543064307430843094310431143124313431443154316431743184319432043214322432343244325432643274328432943304331433243334334433543364337433843394340434143424343434443454346434743484349435043514352435343544355435643574358435943604361436243634364436543664367436843694370437143724373437443754376437743784379438043814382438343844385438643874388438943904391439243934394439543964397439843994400440144024403440444054406440744084409441044114412441344144415441644174418441944204421442244234424442544264427442844294430443144324433443444354436443744384439444044414442444344444445444644474448444944504451445244534454445544564457445844594460446144624463446444654466446744684469447044714472447344744475447644774478447944804481448244834484448544864487448844894490449144924493449444954496449744984499450045014502450345044505450645074508450945104511451245134514451545164517451845194520452145224523452445254526452745284529453045314532453345344535453645374538453945404541454245434544454545464547454845494550455145524553455445554556455745584559456045614562456345644565456645674568456945704571457245734574457545764577457845794580458145824583458445854586458745884589459045914592459345944595459645974598459946004601460246034604460546064607460846094610461146124613461446154616461746184619462046214622462346244625462646274628462946304631463246334634463546364637463846394640464146424643464446454646464746484649465046514652465346544655465646574658465946604661466246634664466546664667466846694670467146724673467446754676467746784679468046814682468346844685468646874688468946904691469246934694469546964697469846994700470147024703470447054706470747084709471047114712471347144715471647174718471947204721472247234724472547264727472847294730473147324733473447354736473747384739474047414742474347444745474647474748474947504751475247534754475547564757475847594760476147624763476447654766476747684769477047714772477347744775477647774778477947804781478247834784478547864787478847894790479147924793479447954796479747984799480048014802480348044805480648074808480948104811481248134814481548164817481848194820482148224823482448254826482748284829483048314832483348344835483648374838483948404841484248434844484548464847484848494850485148524853485448554856485748584859486048614862486348644865486648674868486948704871487248734874487548764877487848794880488148824883488448854886488748884889489048914892489348944895489648974898489949004901490249034904490549064907490849094910491149124913491449154916491749184919492049214922492349244925492649274928492949304931493249334934493549364937493849394940494149424943494449454946494749484949495049514952495349544955495649574958495949604961496249634964496549664967496849694970497149724973497449754976497749784979498049814982498349844985498649874988498949904991499249934994499549964997499849995000500150025003500450055006500750085009501050115012501350145015501650175018501950205021502250235024502550265027502850295030503150325033503450355036503750385039504050415042504350445045504650475048504950505051505250535054505550565057505850595060506150625063506450655066506750685069507050715072507350745075507650775078507950805081508250835084508550865087508850895090509150925093509450955096509750985099510051015102510351045105510651075108510951105111511251135114511551165117511851195120512151225123512451255126512751285129513051315132513351345135513651375138513951405141514251435144514551465147514851495150515151525153515451555156515751585159516051615162516351645165516651675168516951705171517251735174517551765177517851795180518151825183518451855186518751885189519051915192519351945195519651975198519952005201520252035204520552065207520852095210521152125213521452155216521752185219522052215222522352245225522652275228522952305231523252335234523552365237523852395240524152425243524452455246524752485249525052515252525352545255525652575258525952605261526252635264526552665267526852695270527152725273527452755276527752785279528052815282528352845285528652875288528952905291529252935294529552965297529852995300530153025303530453055306530753085309531053115312531353145315531653175318531953205321532253235324532553265327532853295330533153325333533453355336533753385339534053415342534353445345534653475348534953505351535253535354535553565357535853595360536153625363536453655366536753685369537053715372537353745375537653775378537953805381538253835384538553865387538853895390539153925393539453955396539753985399540054015402540354045405540654075408540954105411541254135414541554165417541854195420542154225423542454255426542754285429543054315432543354345435543654375438543954405441544254435444544554465447544854495450545154525453545454555456545754585459546054615462546354645465546654675468546954705471547254735474547554765477547854795480548154825483548454855486548754885489549054915492549354945495549654975498549955005501550255035504550555065507550855095510551155125513551455155516551755185519552055215522552355245525552655275528552955305531553255335534553555365537553855395540554155425543554455455546554755485549555055515552555355545555555655575558555955605561556255635564556555665567556855695570557155725573557455755576557755785579558055815582558355845585558655875588558955905591559255935594559555965597559855995600560156025603560456055606560756085609561056115612561356145615561656175618561956205621562256235624562556265627562856295630563156325633563456355636563756385639564056415642564356445645564656475648564956505651565256535654565556565657565856595660566156625663566456655666566756685669567056715672567356745675567656775678567956805681568256835684568556865687568856895690569156925693569456955696569756985699570057015702570357045705570657075708570957105711571257135714571557165717571857195720572157225723572457255726572757285729573057315732573357345735573657375738573957405741574257435744574557465747574857495750575157525753575457555756575757585759576057615762576357645765576657675768576957705771577257735774577557765777577857795780578157825783578457855786578757885789579057915792579357945795579657975798579958005801580258035804580558065807580858095810581158125813581458155816581758185819582058215822582358245825582658275828582958305831583258335834583558365837583858395840584158425843584458455846584758485849585058515852585358545855585658575858585958605861586258635864586558665867586858695870587158725873587458755876587758785879588058815882588358845885588658875888588958905891589258935894589558965897589858995900590159025903590459055906590759085909591059115912591359145915591659175918591959205921592259235924592559265927592859295930593159325933593459355936593759385939594059415942594359445945594659475948594959505951595259535954595559565957595859595960596159625963596459655966596759685969597059715972597359745975597659775978597959805981598259835984598559865987598859895990599159925993599459955996599759985999600060016002600360046005600660076008600960106011601260136014601560166017601860196020602160226023602460256026602760286029603060316032603360346035603660376038603960406041604260436044604560466047604860496050605160526053605460556056605760586059606060616062606360646065606660676068606960706071607260736074607560766077607860796080608160826083608460856086608760886089609060916092609360946095609660976098609961006101610261036104610561066107610861096110611161126113611461156116611761186119612061216122612361246125612661276128612961306131613261336134613561366137613861396140614161426143614461456146614761486149615061516152615361546155615661576158615961606161616261636164616561666167616861696170617161726173617461756176617761786179618061816182618361846185618661876188618961906191619261936194619561966197619861996200620162026203620462056206620762086209621062116212621362146215621662176218621962206221622262236224622562266227622862296230623162326233623462356236623762386239624062416242624362446245624662476248624962506251625262536254625562566257625862596260626162626263626462656266626762686269627062716272627362746275627662776278627962806281628262836284628562866287628862896290629162926293629462956296629762986299630063016302630363046305630663076308630963106311631263136314631563166317631863196320632163226323632463256326632763286329633063316332633363346335633663376338633963406341634263436344634563466347634863496350635163526353635463556356635763586359636063616362636363646365636663676368636963706371637263736374637563766377637863796380638163826383638463856386638763886389639063916392639363946395639663976398639964006401640264036404640564066407640864096410641164126413641464156416641764186419642064216422642364246425642664276428642964306431643264336434643564366437643864396440644164426443644464456446644764486449645064516452645364546455645664576458645964606461646264636464646564666467646864696470647164726473647464756476647764786479648064816482648364846485648664876488648964906491649264936494649564966497649864996500650165026503650465056506650765086509651065116512651365146515651665176518651965206521652265236524652565266527652865296530653165326533653465356536653765386539654065416542654365446545654665476548654965506551655265536554655565566557655865596560656165626563656465656566656765686569657065716572657365746575657665776578657965806581658265836584658565866587658865896590659165926593659465956596659765986599660066016602660366046605660666076608660966106611661266136614661566166617661866196620662166226623662466256626662766286629663066316632663366346635663666376638663966406641664266436644664566466647664866496650665166526653665466556656665766586659666066616662666366646665666666676668666966706671667266736674667566766677667866796680668166826683668466856686668766886689669066916692669366946695669666976698669967006701670267036704670567066707670867096710671167126713671467156716671767186719672067216722672367246725672667276728672967306731673267336734673567366737673867396740674167426743674467456746674767486749675067516752675367546755675667576758675967606761676267636764676567666767676867696770677167726773677467756776677767786779678067816782678367846785678667876788678967906791679267936794679567966797679867996800680168026803680468056806680768086809681068116812681368146815681668176818681968206821682268236824682568266827682868296830683168326833683468356836683768386839684068416842684368446845684668476848684968506851685268536854685568566857685868596860686168626863686468656866686768686869687068716872687368746875687668776878687968806881688268836884688568866887688868896890689168926893689468956896689768986899690069016902690369046905690669076908690969106911691269136914691569166917691869196920692169226923692469256926692769286929693069316932693369346935693669376938693969406941694269436944694569466947694869496950695169526953695469556956695769586959696069616962696369646965696669676968696969706971697269736974697569766977697869796980698169826983698469856986698769886989699069916992699369946995699669976998699970007001700270037004700570067007700870097010701170127013701470157016701770187019702070217022702370247025702670277028702970307031703270337034703570367037703870397040704170427043704470457046704770487049705070517052705370547055705670577058705970607061706270637064706570667067706870697070707170727073707470757076707770787079708070817082708370847085708670877088708970907091709270937094709570967097709870997100710171027103710471057106710771087109711071117112711371147115711671177118711971207121712271237124712571267127712871297130713171327133713471357136713771387139714071417142714371447145714671477148714971507151715271537154715571567157715871597160716171627163716471657166716771687169717071717172717371747175717671777178717971807181718271837184718571867187718871897190719171927193719471957196719771987199720072017202720372047205720672077208720972107211721272137214721572167217721872197220722172227223722472257226722772287229723072317232723372347235723672377238723972407241724272437244724572467247724872497250725172527253725472557256725772587259726072617262726372647265726672677268726972707271727272737274727572767277727872797280728172827283728472857286728772887289729072917292729372947295729672977298729973007301730273037304730573067307730873097310731173127313731473157316731773187319732073217322732373247325732673277328732973307331733273337334733573367337733873397340734173427343734473457346734773487349735073517352735373547355735673577358735973607361736273637364736573667367736873697370737173727373737473757376737773787379738073817382738373847385738673877388738973907391739273937394739573967397739873997400740174027403740474057406740774087409741074117412741374147415741674177418741974207421742274237424742574267427742874297430743174327433743474357436743774387439744074417442744374447445744674477448744974507451745274537454745574567457745874597460746174627463746474657466746774687469747074717472747374747475747674777478747974807481748274837484748574867487748874897490749174927493749474957496749774987499750075017502750375047505750675077508750975107511751275137514751575167517751875197520752175227523752475257526752775287529753075317532753375347535753675377538753975407541754275437544754575467547754875497550755175527553755475557556755775587559756075617562756375647565756675677568756975707571757275737574757575767577757875797580758175827583758475857586758775887589759075917592759375947595759675977598759976007601760276037604760576067607760876097610761176127613761476157616761776187619762076217622762376247625762676277628762976307631763276337634763576367637763876397640764176427643764476457646764776487649765076517652765376547655765676577658765976607661766276637664766576667667766876697670767176727673767476757676767776787679768076817682768376847685768676877688768976907691769276937694769576967697769876997700770177027703770477057706770777087709771077117712771377147715771677177718771977207721772277237724772577267727772877297730773177327733773477357736773777387739774077417742774377447745774677477748774977507751775277537754775577567757775877597760776177627763776477657766776777687769777077717772777377747775777677777778777977807781778277837784778577867787778877897790779177927793779477957796779777987799780078017802780378047805780678077808780978107811781278137814781578167817781878197820782178227823782478257826782778287829783078317832783378347835783678377838783978407841784278437844784578467847784878497850785178527853785478557856785778587859786078617862786378647865786678677868786978707871787278737874787578767877787878797880788178827883788478857886788778887889789078917892789378947895789678977898789979007901790279037904790579067907790879097910791179127913791479157916791779187919792079217922792379247925792679277928792979307931793279337934793579367937793879397940794179427943794479457946794779487949795079517952795379547955795679577958795979607961796279637964796579667967796879697970797179727973797479757976797779787979798079817982798379847985798679877988798979907991799279937994799579967997799879998000800180028003800480058006800780088009801080118012801380148015801680178018801980208021802280238024802580268027802880298030803180328033803480358036803780388039804080418042804380448045804680478048804980508051805280538054805580568057805880598060806180628063806480658066806780688069807080718072807380748075807680778078807980808081808280838084808580868087808880898090809180928093809480958096809780988099810081018102810381048105810681078108810981108111811281138114811581168117811881198120812181228123812481258126812781288129813081318132813381348135813681378138813981408141814281438144814581468147814881498150815181528153815481558156815781588159816081618162816381648165816681678168816981708171817281738174817581768177817881798180818181828183818481858186818781888189819081918192819381948195819681978198819982008201820282038204820582068207820882098210821182128213821482158216821782188219822082218222822382248225822682278228822982308231823282338234823582368237823882398240824182428243824482458246824782488249825082518252825382548255825682578258825982608261826282638264826582668267826882698270827182728273827482758276827782788279828082818282828382848285828682878288828982908291829282938294829582968297829882998300830183028303830483058306830783088309831083118312831383148315831683178318831983208321832283238324832583268327832883298330833183328333833483358336833783388339834083418342834383448345834683478348834983508351835283538354835583568357835883598360836183628363836483658366836783688369837083718372837383748375837683778378837983808381838283838384838583868387838883898390839183928393839483958396839783988399840084018402840384048405840684078408840984108411841284138414841584168417841884198420842184228423842484258426842784288429843084318432843384348435843684378438843984408441844284438444844584468447844884498450845184528453845484558456845784588459846084618462846384648465846684678468846984708471847284738474847584768477847884798480848184828483848484858486848784888489849084918492849384948495849684978498849985008501850285038504850585068507850885098510851185128513851485158516851785188519852085218522852385248525852685278528852985308531853285338534853585368537853885398540854185428543854485458546854785488549855085518552855385548555855685578558855985608561856285638564856585668567856885698570857185728573857485758576857785788579858085818582858385848585858685878588858985908591859285938594859585968597859885998600860186028603860486058606860786088609861086118612861386148615861686178618861986208621862286238624862586268627862886298630863186328633863486358636863786388639864086418642864386448645864686478648864986508651865286538654865586568657865886598660866186628663866486658666866786688669867086718672867386748675867686778678867986808681868286838684868586868687868886898690869186928693869486958696869786988699870087018702870387048705870687078708870987108711871287138714871587168717871887198720872187228723872487258726872787288729873087318732873387348735873687378738873987408741874287438744874587468747874887498750875187528753875487558756875787588759876087618762876387648765876687678768876987708771877287738774877587768777877887798780878187828783878487858786878787888789879087918792879387948795879687978798879988008801880288038804880588068807880888098810881188128813881488158816881788188819882088218822882388248825882688278828882988308831883288338834883588368837883888398840884188428843884488458846884788488849885088518852885388548855885688578858885988608861886288638864886588668867886888698870887188728873887488758876887788788879888088818882888388848885888688878888888988908891889288938894889588968897889888998900890189028903890489058906890789088909891089118912891389148915891689178918891989208921892289238924892589268927892889298930893189328933893489358936893789388939894089418942894389448945894689478948894989508951895289538954895589568957895889598960896189628963896489658966896789688969897089718972897389748975897689778978897989808981898289838984898589868987898889898990899189928993899489958996899789988999900090019002900390049005900690079008900990109011901290139014901590169017901890199020902190229023902490259026902790289029903090319032903390349035903690379038903990409041904290439044904590469047904890499050905190529053905490559056905790589059906090619062906390649065906690679068906990709071907290739074907590769077907890799080908190829083908490859086908790889089909090919092909390949095909690979098909991009101910291039104910591069107910891099110911191129113911491159116911791189119912091219122912391249125912691279128912991309131913291339134913591369137913891399140914191429143914491459146914791489149915091519152915391549155915691579158915991609161916291639164916591669167916891699170917191729173917491759176917791789179918091819182918391849185918691879188918991909191919291939194919591969197919891999200920192029203920492059206920792089209921092119212921392149215921692179218921992209221922292239224922592269227922892299230923192329233923492359236923792389239924092419242924392449245924692479248924992509251925292539254925592569257925892599260926192629263926492659266926792689269927092719272927392749275927692779278927992809281928292839284928592869287928892899290929192929293929492959296929792989299930093019302930393049305930693079308930993109311931293139314931593169317931893199320932193229323932493259326932793289329933093319332933393349335933693379338933993409341934293439344934593469347934893499350935193529353935493559356935793589359936093619362936393649365936693679368936993709371937293739374937593769377937893799380938193829383938493859386938793889389939093919392939393949395939693979398939994009401940294039404940594069407940894099410941194129413941494159416941794189419942094219422942394249425942694279428942994309431943294339434943594369437943894399440944194429443944494459446944794489449945094519452945394549455945694579458945994609461946294639464946594669467946894699470947194729473947494759476947794789479948094819482948394849485948694879488948994909491949294939494949594969497949894999500950195029503950495059506950795089509951095119512951395149515951695179518951995209521952295239524952595269527952895299530953195329533953495359536953795389539954095419542954395449545954695479548954995509551955295539554955595569557955895599560956195629563956495659566956795689569957095719572957395749575957695779578957995809581958295839584958595869587958895899590959195929593959495959596959795989599960096019602960396049605960696079608960996109611961296139614961596169617961896199620962196229623962496259626962796289629963096319632963396349635963696379638963996409641964296439644964596469647964896499650965196529653965496559656965796589659966096619662966396649665966696679668966996709671967296739674967596769677967896799680968196829683968496859686968796889689969096919692969396949695969696979698969997009701970297039704970597069707970897099710971197129713971497159716971797189719972097219722972397249725972697279728972997309731973297339734973597369737973897399740974197429743974497459746974797489749975097519752975397549755975697579758975997609761976297639764976597669767976897699770977197729773977497759776977797789779978097819782978397849785978697879788978997909791979297939794979597969797979897999800980198029803980498059806980798089809981098119812981398149815981698179818981998209821982298239824982598269827982898299830983198329833983498359836983798389839984098419842984398449845984698479848984998509851985298539854985598569857985898599860986198629863986498659866986798689869987098719872987398749875987698779878987998809881988298839884988598869887988898899890989198929893989498959896989798989899990099019902990399049905990699079908990999109911991299139914991599169917991899199920992199229923992499259926992799289929993099319932993399349935993699379938993999409941994299439944994599469947994899499950995199529953995499559956995799589959996099619962996399649965996699679968996999709971997299739974997599769977997899799980998199829983998499859986998799889989999099919992999399949995999699979998999910000100011000210003100041000510006100071000810009100101001110012100131001410015100161001710018100191002010021100221002310024100251002610027100281002910030100311003210033100341003510036100371003810039100401004110042100431004410045100461004710048100491005010051100521005310054100551005610057100581005910060100611006210063100641006510066100671006810069100701007110072100731007410075100761007710078100791008010081100821008310084100851008610087100881008910090100911009210093100941009510096100971009810099101001010110102101031010410105101061010710108101091011010111101121011310114101151011610117101181011910120101211012210123101241012510126101271012810129101301013110132101331013410135101361013710138101391014010141101421014310144101451014610147101481014910150101511015210153101541015510156101571015810159101601016110162101631016410165101661016710168101691017010171101721017310174101751017610177101781017910180101811018210183101841018510186101871018810189101901019110192101931019410195101961019710198101991020010201102021020310204102051020610207102081020910210102111021210213102141021510216102171021810219102201022110222102231022410225102261022710228102291023010231102321023310234102351023610237102381023910240102411024210243102441024510246102471024810249102501025110252102531025410255102561025710258102591026010261102621026310264102651026610267102681026910270102711027210273102741027510276102771027810279102801028110282102831028410285102861028710288102891029010291102921029310294102951029610297102981029910300103011030210303103041030510306103071030810309103101031110312103131031410315103161031710318103191032010321103221032310324103251032610327103281032910330103311033210333103341033510336103371033810339103401034110342103431034410345103461034710348103491035010351103521035310354103551035610357103581035910360103611036210363103641036510366103671036810369103701037110372103731037410375103761037710378103791038010381103821038310384103851038610387103881038910390103911039210393103941039510396103971039810399104001040110402104031040410405104061040710408104091041010411104121041310414104151041610417104181041910420104211042210423104241042510426104271042810429104301043110432104331043410435104361043710438104391044010441104421044310444104451044610447104481044910450104511045210453104541045510456104571045810459104601046110462104631046410465104661046710468104691047010471104721047310474104751047610477104781047910480104811048210483104841048510486104871048810489104901049110492104931049410495104961049710498104991050010501105021050310504105051050610507105081050910510105111051210513105141051510516105171051810519105201052110522105231052410525105261052710528105291053010531105321053310534105351053610537105381053910540105411054210543105441054510546105471054810549105501055110552105531055410555105561055710558105591056010561105621056310564105651056610567105681056910570105711057210573105741057510576105771057810579105801058110582105831058410585105861058710588105891059010591105921059310594105951059610597105981059910600106011060210603106041060510606106071060810609106101061110612106131061410615106161061710618106191062010621106221062310624106251062610627106281062910630106311063210633106341063510636106371063810639106401064110642106431064410645106461064710648106491065010651106521065310654106551065610657106581065910660106611066210663106641066510666106671066810669106701067110672106731067410675106761067710678106791068010681106821068310684
  1. Disassembly Listing for FraiseMaster1.2.2
  2. Generated From:
  3. --- C:/MCC18/v3_39/src/traditional/stdclib/vfprintf.c -------------------------------------------------
  4. 2F1C ECCA CALL 0x3994, 0
  5. 2F1E F01C NOP
  6. 3994 CFD9 MOVFF FSR2L, POSTINC1
  7. 3996 FFE6 NOP
  8. 3998 CFDA MOVFF FSR2H, POSTINC1
  9. 399A FFE6 NOP
  10. 399C CFE1 MOVFF FSR1L, FSR2L
  11. 399E FFD9 NOP
  12. 39A0 CFE2 MOVFF FSR1H, FSR2H
  13. 39A2 FFDA NOP
  14. 39A4 0012 RETURN 0
  15. 2F20 0EFB MOVLW 0xFB
  16. 2F22 CFDB MOVFF PLUSW2, PRODL
  17. 2F24 FFF3 NOP
  18. 2F26 06DB DECF PLUSW2, F, ACCESS
  19. 2F28 50F3 MOVF PRODL, W, ACCESS
  20. 2F2A 0900 IORLW 0x0
  21. 2F2C E00A BZ 0x2F42
  22. 2F2E EC18 CALL 0x3A30, 0
  23. 2F30 F01D NOP
  24. 2F32 0EFA MOVLW 0xFA
  25. 2F34 EC83 CALL 0x3B06, 0
  26. 2F36 F01D NOP
  27. 2F38 E1F3 BNZ 0x2F20
  28. 2F3A 1C15 COMF digit_cnt, W, ACCESS
  29. 2F3C E1F1 BNZ 0x2F20
  30. 2F3E 0E01 MOVLW 0x1
  31. 2F40 D001 BRA 0x2F44
  32. 2F42 0E00 MOVLW 0x0
  33. 2F44 EFF9 GOTO 0x39F2
  34. 2F46 F01C NOP
  35. 39F2 52E5 MOVF POSTDEC1, F, ACCESS
  36. 39F4 CFE5 MOVFF POSTDEC1, FSR2H
  37. 39F6 FFDA NOP
  38. 39F8 CFE7 MOVFF INDF1, FSR2L
  39. 39FA FFD9 NOP
  40. 39FC 0012 RETURN 0
  41. 2F48 ECCA CALL 0x3994, 0
  42. 2F4A F01C NOP
  43. 2F4C 0E3B MOVLW 0x3B
  44. 2F4E 24E1 ADDWF FSR1L, W, ACCESS
  45. 2F50 E302 BNC 0x2F56
  46. 2F52 68E1 SETF FSR1L, ACCESS
  47. 2F54 52E6 MOVF POSTINC1, F, ACCESS
  48. 2F56 6EE1 MOVWF FSR1L, ACCESS
  49. 2F58 0E01 MOVLW 0x1
  50. 2F5A 6ADB CLRF PLUSW2, ACCESS
  51. 2F5C 0E02 MOVLW 0x2
  52. 2F5E 6ADB CLRF PLUSW2, ACCESS
  53. 2F60 0EF9 MOVLW 0xF9
  54. 2F62 CFDB MOVFF PLUSW2, TBLPTRL
  55. 2F64 FFF6 NOP
  56. 2F66 0EFA MOVLW 0xFA
  57. 2F68 CFDB MOVFF PLUSW2, TBLPTRH
  58. 2F6A FFF7 NOP
  59. 2F6C 0EFB MOVLW 0xFB
  60. 2F6E CFDB MOVFF PLUSW2, TBLPTRU
  61. 2F70 FFF8 NOP
  62. 2F72 0008 TBLRD*
  63. 2F74 50F5 MOVF TABLAT, W, ACCESS
  64. 2F76 6EDF MOVWF INDF2, ACCESS
  65. 2F78 50DF MOVF INDF2, W, ACCESS
  66. 2F7A E102 BNZ 0x2F80
  67. 2F7C EF1D GOTO 0x383A
  68. 2F7E F01C NOP
  69. 3834 D979 RCALL __pa_45
  70. 3836 EFB9 GOTO 0x2F72
  71. 3838 F017 NOP
  72. 3B28 50D9 MOVF FSR2L, W, ACCESS
  73. 3B2A 0FF9 ADDLW 0xF9
  74. 3B2C 6EE9 MOVWF FSR0L, ACCESS
  75. 3B2E 0EFF MOVLW 0xFF
  76. 3B30 EF2D GOTO 0x3A5A
  77. 3B32 F01D NOP
  78. 2F80 0E25 MOVLW 0x25
  79. 2F82 5CDF SUBWF INDF2, W, ACCESS
  80. 2F84 E002 BZ 0x2F8A
  81. 2F86 EF10 GOTO 0x3820
  82. 2F88 F01C NOP
  83. 2F8A 0E03 MOVLW 0x3
  84. 2F8C 6ADB CLRF PLUSW2, ACCESS
  85. 2F8E 0E04 MOVLW 0x4
  86. 2F90 6ADB CLRF PLUSW2, ACCESS
  87. 2F92 0E05 MOVLW 0x5
  88. 2F94 6ADB CLRF PLUSW2, ACCESS
  89. 2F96 0E06 MOVLW 0x6
  90. 2F98 6ADB CLRF PLUSW2, ACCESS
  91. 2F9A 0E07 MOVLW 0x7
  92. 2F9C 6ADB CLRF PLUSW2, ACCESS
  93. 2F9E EC32 CALL 0x3864, 0
  94. 2FA0 F01C NOP
  95. 2FA2 0E2D MOVLW 0x2D
  96. 2FA4 5CDF SUBWF INDF2, W, ACCESS
  97. 2FA6 E00C BZ 0x2FC0
  98. 2FA8 0E2B MOVLW 0x2B
  99. 2FAA 5CDF SUBWF INDF2, W, ACCESS
  100. 2FAC E009 BZ 0x2FC0
  101. 2FAE 0E20 MOVLW 0x20
  102. 2FB0 5CDF SUBWF INDF2, W, ACCESS
  103. 2FB2 E006 BZ 0x2FC0
  104. 2FB4 0E23 MOVLW 0x23
  105. 2FF2 D7D5 BRA 0x2F9E
  106. 2FB6 5CDF SUBWF INDF2, W, ACCESS
  107. 2FB8 E003 BZ 0x2FC0
  108. 2FBA 0E30 MOVLW 0x30
  109. 2FBC 5CDF SUBWF INDF2, W, ACCESS
  110. 2FBE E11A BNZ 0x2FF4
  111. 2FC0 50DF MOVF INDF2, W, ACCESS
  112. 2FC2 0A30 XORLW 0x30
  113. 2FC4 E014 BZ 0x2FEE
  114. 2FC6 0A13 XORLW 0x13
  115. 2FC8 E00F BZ 0x2FE8
  116. 2FCA 0A03 XORLW 0x3
  117. 2FCC E00A BZ 0x2FE2
  118. 2FCE 0A0B XORLW 0xB
  119. 2FD0 E005 BZ 0x2FDC
  120. 2FD2 0A06 XORLW 0x6
  121. 2FD4 E1E4 BNZ 0x2F9E
  122. 2FD6 0E03 MOVLW 0x3
  123. 2FD8 80DB BSF PLUSW2, 0, ACCESS
  124. 2FDA D7E1 BRA 0x2F9E
  125. 2FDC 0E03 MOVLW 0x3
  126. 2FDE 82DB BSF PLUSW2, 1, ACCESS
  127. 2FE0 D7DE BRA 0x2F9E
  128. 2FE2 0E03 MOVLW 0x3
  129. 2FE4 84DB BSF PLUSW2, 2, ACCESS
  130. 2FE6 D7DB BRA 0x2F9E
  131. 2FE8 0E03 MOVLW 0x3
  132. 2FEA 86DB BSF PLUSW2, 3, ACCESS
  133. 2FEC D7D8 BRA 0x2F9E
  134. 2FEE 0E03 MOVLW 0x3
  135. 2FF0 88DB BSF PLUSW2, 4, ACCESS
  136. 2FF4 0E2A MOVLW 0x2A
  137. 2FF6 5CDF SUBWF INDF2, W, ACCESS
  138. 2FF8 E11B BNZ 0x3030
  139. 2FFA EC2E CALL 0x385C, 0
  140. 2FFC F01C NOP
  141. 2FFE EC7C CALL 0x38F8, 0
  142. 3000 F01C NOP
  143. 38F8 0E13 MOVLW 0x13
  144. 38FA CFEE MOVFF POSTINC0, PLUSW2
  145. 38FC FFDB NOP
  146. 38FE 0E14 MOVLW 0x14
  147. 3900 CFED MOVFF POSTDEC0, PLUSW2
  148. 3902 FFDB NOP
  149. 3002 E010 BZ 0x3024
  150. 3904 0E13 MOVLW 0x13
  151. 3906 CFDB MOVFF PLUSW2, __tmp_0
  152. 3908 F014 NOP
  153. 390A 0E14 MOVLW 0x14
  154. 390C CFDB MOVFF PLUSW2, digit_cnt
  155. 390E F015 NOP
  156. 3910 0100 MOVLB 0x0
  157. 3912 0E80 MOVLW 0x80
  158. 3914 1415 ANDWF digit_cnt, W, ACCESS
  159. 3916 0012 RETURN 0
  160. 3004 0E03 MOVLW 0x3
  161. 3006 80DB BSF PLUSW2, 0, ACCESS
  162. 3008 6806 SETF pUEP, ACCESS
  163. 300A 6807 SETF size, ACCESS
  164. 300C 0E13 MOVLW 0x13
  165. 300E CFDB MOVFF PLUSW2, 0xB
  166. 3010 F00B NOP
  167. 3012 0E14 MOVLW 0x14
  168. 3014 CFDB MOVFF PLUSW2, 0xC
  169. 3016 F00C NOP
  170. 3018 EC6E CALL 0x4ADC, 0
  171. 301A F025 NOP
  172. 301C 0E04 MOVLW 0x4
  173. 301E C004 MOVFF i, PLUSW2
  174. 3020 FFDB NOP
  175. 3022 D003 BRA 0x302A
  176. 3024 0E13 MOVLW 0x13
  177. 3026 EC65 CALL 0x38CA, 0
  178. 3028 F01C NOP
  179. 302A EC32 CALL 0x3864, 0
  180. 302C F01C NOP
  181. 302E D00B BRA 0x3046
  182. 3030 0E09 MOVLW 0x9
  183. 3032 6ADB CLRF PLUSW2, ACCESS
  184. 3034 ECD3 CALL 0x39A6, 0
  185. 3036 F01C NOP
  186. 3038 E003 BZ 0x3040
  187. 303E D7FA BRA 0x3034
  188. 39A6 CFDF MOVFF INDF2, POSTINC1
  189. 39A8 FFE6 NOP
  190. 39AA 6AE6 CLRF POSTINC1, ACCESS
  191. 39AC ECBF CALL 0x4B7E, 0
  192. 39AE F025 NOP
  193. 39B0 52E5 MOVF POSTDEC1, F, ACCESS
  194. 39B2 52E5 MOVF POSTDEC1, F, ACCESS
  195. 39B4 50F3 MOVF PRODL, W, ACCESS
  196. 39B6 0012 RETURN 0
  197. 303A EC47 CALL 0x3A8E, 0
  198. 303C F01D NOP
  199. 3A8E 0E09 MOVLW 0x9
  200. 3A90 50DB MOVF PLUSW2, W, ACCESS
  201. 3A92 0D0A MULLW 0xA
  202. 3A94 50F3 MOVF PRODL, W, ACCESS
  203. 3A96 24DF ADDWF INDF2, W, ACCESS
  204. 3A98 0FD0 ADDLW 0xD0
  205. 3A9A 6EE7 MOVWF INDF1, ACCESS
  206. 3A9C 0E09 MOVLW 0x9
  207. 3A9E CFE7 MOVFF INDF1, PLUSW2
  208. 3AA0 FFDB NOP
  209. 3AA2 EF32 GOTO 0x3864
  210. 3AA4 F01C NOP
  211. 3040 0E09 MOVLW 0x9
  212. 3042 EC65 CALL 0x38CA, 0
  213. 3044 F01C NOP
  214. 3046 0E03 MOVLW 0x3
  215. 3048 B0DB BTFSC PLUSW2, 0, ACCESS
  216. 304A 98DB BCF PLUSW2, 4, ACCESS
  217. 304C 0E2E MOVLW 0x2E
  218. 304E 5CDF SUBWF INDF2, W, ACCESS
  219. 3050 E11B BNZ 0x3088
  220. 3052 EC32 CALL 0x3864, 0
  221. 3054 F01C NOP
  222. 3056 0E2A MOVLW 0x2A
  223. 3058 5CDF SUBWF INDF2, W, ACCESS
  224. 305A E10B BNZ 0x3072
  225. 305C EC2E CALL 0x385C, 0
  226. 305E F01C NOP
  227. 3060 EC7C CALL 0x38F8, 0
  228. 3062 F01C NOP
  229. 385C D929 RCALL __pa_34
  230. 385E 0E02 MOVLW 0x2
  231. 3860 EF1F GOTO 0x3A3E
  232. 3862 F01D NOP
  233. 3A3E 5E14 SUBWF __tmp_0, F, ACCESS
  234. 3A40 0E00 MOVLW 0x0
  235. 3A42 5A15 SUBWFB digit_cnt, F, ACCESS
  236. 3A44 0EF7 MOVLW 0xF7
  237. 3A46 C014 MOVFF __tmp_0, PLUSW2
  238. 3A48 FFDB NOP
  239. 3A4A 0EF8 MOVLW 0xF8
  240. 3A4C C015 MOVFF digit_cnt, PLUSW2
  241. 3A4E FFDB NOP
  242. 3A50 C014 MOVFF __tmp_0, FSR0L
  243. 3A52 FFE9 NOP
  244. 3A54 C015 MOVFF digit_cnt, FSR0H
  245. 3A56 FFEA NOP
  246. 3A58 0012 RETURN 0
  247. 3AB0 0EF7 MOVLW 0xF7
  248. 3AB2 CFDB MOVFF PLUSW2, __tmp_0
  249. 3AB4 F014 NOP
  250. 3AB6 0EF8 MOVLW 0xF8
  251. 3AB8 CFDB MOVFF PLUSW2, digit_cnt
  252. 3ABA F015 NOP
  253. 3ABC 0012 RETURN 0
  254. 3064 E103 BNZ 0x306C
  255. 3066 0E13 MOVLW 0x13
  256. 3068 ECB7 CALL 0x396E, 0
  257. 306A F01C NOP
  258. 396E 50DB MOVF PLUSW2, W, ACCESS
  259. 3970 D8CE RCALL __pa_42
  260. 3B0E 6EE7 MOVWF INDF1, ACCESS
  261. 3B10 0E05 MOVLW 0x5
  262. 3B12 CFE7 MOVFF INDF1, PLUSW2
  263. 3B14 FFDB NOP
  264. 3B16 0012 RETURN 0
  265. 3972 0E01 MOVLW 0x1
  266. 3974 6EF3 MOVWF PRODL, ACCESS
  267. 3976 0E06 MOVLW 0x6
  268. 3978 CFF3 MOVFF PRODL, PLUSW2
  269. 397A FFDB NOP
  270. 397C 0012 RETURN 0
  271. 306C EC32 CALL 0x3864, 0
  272. 306E F01C NOP
  273. 3070 D00B BRA 0x3088
  274. 3072 0E09 MOVLW 0x9
  275. 3074 6ADB CLRF PLUSW2, ACCESS
  276. 3076 ECD3 CALL 0x39A6, 0
  277. 3078 F01C NOP
  278. 307A E003 BZ 0x3082
  279. 3080 D7FA BRA 0x3076
  280. 307C EC47 CALL 0x3A8E, 0
  281. 307E F01D NOP
  282. 3082 0E09 MOVLW 0x9
  283. 3084 ECB7 CALL 0x396E, 0
  284. 3086 F01C NOP
  285. 3088 0E68 MOVLW 0x68
  286. 308A 5CDF SUBWF INDF2, W, ACCESS
  287. 308C E107 BNZ 0x309C
  288. 308E EC32 CALL 0x3864, 0
  289. 3090 F01C NOP
  290. 3092 0E68 MOVLW 0x68
  291. 3094 5CDF SUBWF INDF2, W, ACCESS
  292. 3096 E11D BNZ 0x30D2
  293. 3098 0E03 MOVLW 0x3
  294. 309A D018 BRA 0x30CC
  295. 309C 0E74 MOVLW 0x74
  296. 309E 5CDF SUBWF INDF2, W, ACCESS
  297. 30A0 E017 BZ 0x30D0
  298. 30A2 0E7A MOVLW 0x7A
  299. 30A4 5CDF SUBWF INDF2, W, ACCESS
  300. 30A6 E014 BZ 0x30D0
  301. 30A8 0E48 MOVLW 0x48
  302. 30AA 5CDF SUBWF INDF2, W, ACCESS
  303. 30AC E006 BZ 0x30BA
  304. 30AE 0E54 MOVLW 0x54
  305. 30B0 5CDF SUBWF INDF2, W, ACCESS
  306. 30B2 E003 BZ 0x30BA
  307. 30B4 0E5A MOVLW 0x5A
  308. 30B6 5CDF SUBWF INDF2, W, ACCESS
  309. 30B8 E102 BNZ 0x30BE
  310. 30BA 0E02 MOVLW 0x2
  311. 30BC D007 BRA 0x30CC
  312. 30BE 0E6C MOVLW 0x6C
  313. 30C0 5CDF SUBWF INDF2, W, ACCESS
  314. 30C2 E003 BZ 0x30CA
  315. 30C4 0E6A MOVLW 0x6A
  316. 30C6 5CDF SUBWF INDF2, W, ACCESS
  317. 30C8 E104 BNZ 0x30D2
  318. 30CA 0E01 MOVLW 0x1
  319. 30CC EC0A CALL 0x3A14, 0
  320. 30CE F01D NOP
  321. 30D0 DBC9 RCALL __pa_1
  322. 3864 D961 RCALL __pa_45
  323. 3866 0008 TBLRD*
  324. 3868 50F5 MOVF TABLAT, W, ACCESS
  325. 386A 6EDF MOVWF INDF2, ACCESS
  326. 386C 0012 RETURN 0
  327. 3A5A 20DA ADDWFC FSR2H, W, ACCESS
  328. 3A5C 6EEA MOVWF FSR0H, ACCESS
  329. 3A5E 2AEF INCF INDF0, F, ACCESS
  330. 3A60 CFEE MOVFF POSTINC0, TBLPTRL
  331. 3A62 FFF6 NOP
  332. 3A64 0E00 MOVLW 0x0
  333. 3A66 22EF ADDWFC INDF0, F, ACCESS
  334. 3A68 CFEE MOVFF POSTINC0, TBLPTRH
  335. 3A6A FFF7 NOP
  336. 3A6C 22EF ADDWFC INDF0, F, ACCESS
  337. 3A6E CFEE MOVFF POSTINC0, TBLPTRU
  338. 3A70 FFF8 NOP
  339. 3A72 0012 RETURN 0
  340. 30D2 50DF MOVF INDF2, W, ACCESS
  341. 30D4 0A6E XORLW 0x6E
  342. 30D6 E101 BNZ 0x30DA
  343. 30D8 D37F BRA 0x37D8
  344. 30DA 0A1E XORLW 0x1E
  345. 30DC E101 BNZ 0x30E0
  346. 30DE D192 BRA 0x3404
  347. 30E0 0A20 XORLW 0x20
  348. 30E2 E101 BNZ 0x30E6
  349. 30E4 D18F BRA 0x3404
  350. 30E6 0A3F XORLW 0x3F
  351. 30E8 E101 BNZ 0x30EC
  352. 30EA D149 BRA 0x337E
  353. 30EC 0A1A XORLW 0x1A
  354. 30EE E101 BNZ 0x30F2
  355. 30F0 D146 BRA 0x337E
  356. 30F2 0A0D XORLW 0xD
  357. 30F4 E101 BNZ 0x30F8
  358. 30F6 D143 BRA 0x337E
  359. 30F8 0A20 XORLW 0x20
  360. 30FA E101 BNZ 0x30FE
  361. 30FC D140 BRA 0x337E
  362. 30FE 0A3A XORLW 0x3A
  363. 3100 E101 BNZ 0x3104
  364. 3102 D13D BRA 0x337E
  365. 3104 0A20 XORLW 0x20
  366. 3106 E101 BNZ 0x310A
  367. 3108 D13A BRA 0x337E
  368. 310A 0A26 XORLW 0x26
  369. 310C E101 BNZ 0x3110
  370. 310E D135 BRA 0x337A
  371. 3110 0A0D XORLW 0xD
  372. 3112 E101 BNZ 0x3116
  373. 3114 D132 BRA 0x337A
  374. 3116 0A1A XORLW 0x1A
  375. 3118 E101 BNZ 0x311C
  376. 311A D0D9 BRA 0x32CE
  377. 311C 0A20 XORLW 0x20
  378. 311E E04A BZ 0x31B4
  379. 3120 0A30 XORLW 0x30
  380. 3122 E01F BZ 0x3162
  381. 3124 0A46 XORLW 0x46
  382. 3126 E00E BZ 0x3144
  383. 3128 0A25 XORLW 0x25
  384. 312A E001 BZ 0x312E
  385. 312C D383 BRA 0x3834
  386. 312E 50D9 MOVF FSR2L, W, ACCESS
  387. 3130 0FF9 ADDLW 0xF9
  388. 3132 6EE9 MOVWF FSR0L, ACCESS
  389. 3134 0EFF MOVLW 0xFF
  390. 3136 20DA ADDWFC FSR2H, W, ACCESS
  391. 3138 6EEA MOVWF FSR0H, ACCESS
  392. 313A 0E01 MOVLW 0x1
  393. 313C 5EEE SUBWF POSTINC0, F, ACCESS
  394. 313E 0E00 MOVLW 0x0
  395. 3140 5AEE SUBWFB POSTINC0, F, ACCESS
  396. 3142 5AEE SUBWFB POSTINC0, F, ACCESS
  397. 3144 EC18 CALL 0x3A30, 0
  398. 3146 F01D NOP
  399. 3148 0E25 MOVLW 0x25
  400. 314A 6EE6 MOVWF POSTINC1, ACCESS
  401. 314C DB95 RCALL __pa_3
  402. 314E E103 BNZ 0x3156
  403. 3150 1C15 COMF digit_cnt, W, ACCESS
  404. 3152 E101 BNZ 0x3156
  405. 3154 D369 BRA 0x3828
  406. 3156 EC14 CALL 0x3A28, 0
  407. 3158 F01D NOP
  408. 315A E201 BC 0x315E
  409. 315C D36B BRA 0x3834
  410. 315E 2ADB INCF PLUSW2, F, ACCESS
  411. 3160 D369 BRA 0x3834
  412. 3162 0E08 MOVLW 0x8
  413. 3164 6ADB CLRF PLUSW2, ACCESS
  414. 3166 0E04 MOVLW 0x4
  415. 3168 50DB MOVF PLUSW2, W, ACCESS
  416. 316A 0801 SUBLW 0x1
  417. 316C E206 BC 0x317A
  418. 316E 0E04 MOVLW 0x4
  419. 3170 04DB DECF PLUSW2, W, ACCESS
  420. 3172 ECDC CALL 0x39B8, 0
  421. 3174 F01C NOP
  422. 3176 50DB MOVF PLUSW2, W, ACCESS
  423. 3178 DB8B RCALL __pa_4
  424. 317A 0E08 MOVLW 0x8
  425. 317C 50DB MOVF PLUSW2, W, ACCESS
  426. 317E E009 BZ 0x3192
  427. 3180 0E03 MOVLW 0x3
  428. 3182 50DB MOVF PLUSW2, W, ACCESS
  429. 3184 0B01 ANDLW 0x1
  430. 3186 E105 BNZ 0x3192
  431. 3188 DB72 RCALL __pa_2
  432. 318A E001 BZ 0x318E
  433. 318C D34D BRA 0x3828
  434. 318E 0E08 MOVLW 0x8
  435. 3190 6ADB CLRF PLUSW2, ACCESS
  436. 3192 DB64 RCALL __pa_0
  437. 3194 CFEF MOVFF INDF0, INDF2
  438. 3196 FFDF NOP
  439. 3198 EC8C CALL 0x3B18, 0
  440. 319A F01D NOP
  441. 319C E103 BNZ 0x31A4
  442. 319E 1C15 COMF digit_cnt, W, ACCESS
  443. 31A0 E101 BNZ 0x31A4
  444. 31A2 D342 BRA 0x3828
  445. 31A4 EC14 CALL 0x3A28, 0
  446. 31A6 F01D NOP
  447. 31A8 E301 BNC 0x31AC
  448. 31AA 2ADB INCF PLUSW2, F, ACCESS
  449. 31AC DB60 RCALL __pa_2
  450. 31AE E101 BNZ 0x31B2
  451. 31B0 D341 BRA 0x3834
  452. 31B2 D33A BRA 0x3828
  453. 31B4 0E07 MOVLW 0x7
  454. 31B6 50DB MOVF PLUSW2, W, ACCESS
  455. 31B8 0802 SUBLW 0x2
  456. 31BA E10F BNZ 0x31DA
  457. 31BC EC58 CALL 0x3AB0, 0
  458. 31BE F01D NOP
  459. 31C0 0E03 MOVLW 0x3
  460. 31C2 EC1F CALL 0x3A3E, 0
  461. 31C4 F01D NOP
  462. 31C6 0E0E MOVLW 0xE
  463. 31C8 CFEE MOVFF POSTINC0, PLUSW2
  464. 31CA FFDB NOP
  465. 31CC 0E0F MOVLW 0xF
  466. 31CE CFEE MOVFF POSTINC0, PLUSW2
  467. 31D0 FFDB NOP
  468. 31D2 0E10 MOVLW 0x10
  469. 31D4 CFEE MOVFF POSTINC0, PLUSW2
  470. 31D6 FFDB NOP
  471. 31D8 D020 BRA 0x321A
  472. 31DA 0EF7 MOVLW 0xF7
  473. 31DC CFDB MOVFF PLUSW2, sign_char
  474. 31DE F017 NOP
  475. 31E0 0EF8 MOVLW 0xF8
  476. 31E2 CFDB MOVFF PLUSW2, buf
  477. 31E4 F018 NOP
  478. 31E6 0E02 MOVLW 0x2
  479. 31E8 5E17 SUBWF sign_char, F, ACCESS
  480. 31EA 0E00 MOVLW 0x0
  481. 31EC 5A18 SUBWFB buf, F, ACCESS
  482. 31EE 0EF7 MOVLW 0xF7
  483. 31F0 C017 MOVFF sign_char, PLUSW2
  484. 31F2 FFDB NOP
  485. 31F4 0EF8 MOVLW 0xF8
  486. 31F6 C018 MOVFF buf, PLUSW2
  487. 31F8 FFDB NOP
  488. 31FA C017 MOVFF sign_char, FSR0L
  489. 31FC FFE9 NOP
  490. 31FE C018 MOVFF buf, FSR0H
  491. 3200 FFEA NOP
  492. 3202 EC0F CALL 0x3A1E, 0
  493. 3204 F01D NOP
  494. 3206 6A16 CLRF prefix_cnt, ACCESS
  495. 3208 0E0E MOVLW 0xE
  496. 320A C014 MOVFF __tmp_0, PLUSW2
  497. 320C FFDB NOP
  498. 320E 0E0F MOVLW 0xF
  499. 3210 C015 MOVFF digit_cnt, PLUSW2
  500. 3212 FFDB NOP
  501. 3214 0E10 MOVLW 0x10
  502. 3216 C016 MOVFF prefix_cnt, PLUSW2
  503. 3218 FFDB NOP
  504. 321A 0E0E MOVLW 0xE
  505. 321C CFDB MOVFF PLUSW2, POSTINC1
  506. 321E FFE6 NOP
  507. 3220 0E0F MOVLW 0xF
  508. 3222 CFDB MOVFF PLUSW2, POSTINC1
  509. 3224 FFE6 NOP
  510. 3226 0E10 MOVLW 0x10
  511. 3228 CFDB MOVFF PLUSW2, POSTINC1
  512. 322A FFE6 NOP
  513. 322C EC9B CALL 0x4736, 0
  514. 322E F023 NOP
  515. 3230 52E5 MOVF POSTDEC1, F, ACCESS
  516. 3232 52E5 MOVF POSTDEC1, F, ACCESS
  517. 3234 52E5 MOVF POSTDEC1, F, ACCESS
  518. 3236 0E13 MOVLW 0x13
  519. 3238 C005 MOVFF precision, PLUSW2
  520. 323A FFDB NOP
  521. 323C 0E14 MOVLW 0x14
  522. 323E C006 MOVFF pUEP, PLUSW2
  523. 3240 FFDB NOP
  524. 3242 0E06 MOVLW 0x6
  525. 3244 50DB MOVF PLUSW2, W, ACCESS
  526. 3246 E005 BZ 0x3252
  527. 3248 0E13 MOVLW 0x13
  528. 324A EC53 CALL 0x3AA6, 0
  529. 324C F01D NOP
  530. 324E E201 BC 0x3252
  531. 3250 DB6A RCALL __pa_11
  532. 3926 0E05 MOVLW 0x5
  533. 3928 50DB MOVF PLUSW2, W, ACCESS
  534. 392A 6EE6 MOVWF POSTINC1, ACCESS
  535. 392C 50D9 MOVF FSR2L, W, ACCESS
  536. 392E 0F13 ADDLW 0x13
  537. 3930 D901 RCALL __pa_46
  538. 3932 52E5 MOVF POSTDEC1, F, ACCESS
  539. 3934 50E7 MOVF INDF1, W, ACCESS
  540. 3936 6EEE MOVWF POSTINC0, ACCESS
  541. 3938 6AED CLRF POSTDEC0, ACCESS
  542. 393A 0012 RETURN 0
  543. 3252 EC77 CALL 0x3AEE, 0
  544. 3254 F01D NOP
  545. 3256 E202 BC 0x325C
  546. 3AEE 0E13 MOVLW 0x13
  547. 3AF0 50DB MOVF PLUSW2, W, ACCESS
  548. 3AF2 6EF3 MOVWF PRODL, ACCESS
  549. 3AF4 0E04 MOVLW 0x4
  550. 3AF6 EF60 GOTO 0x38C0
  551. 3AF8 F01C NOP
  552. 3258 0E13 MOVLW 0x13
  553. 325A DB37 RCALL __pa_7
  554. 325C EC3A CALL 0x3A74, 0
  555. 325E F01D NOP
  556. 3A74 0E04 MOVLW 0x4
  557. 3A76 CFDB MOVFF PLUSW2, POSTINC1
  558. 3A78 FFE6 NOP
  559. 3A7A 0E13 MOVLW 0x13
  560. 3A7C 50DB MOVF PLUSW2, W, ACCESS
  561. 3A7E 52E5 MOVF POSTDEC1, F, ACCESS
  562. 3A80 5CE7 SUBWF INDF1, W, ACCESS
  563. 3A82 DF9A RCALL __pa_18
  564. 3A84 50DB MOVF PLUSW2, W, ACCESS
  565. 3A86 DF04 RCALL __pa_4
  566. 3260 E006 BZ 0x326E
  567. 3262 0E04 MOVLW 0x4
  568. 3264 EC53 CALL 0x3AA6, 0
  569. 3266 F01D NOP
  570. 3268 E202 BC 0x326E
  571. 3A88 0E06 MOVLW 0x6
  572. 3A8A 50DB MOVF PLUSW2, W, ACCESS
  573. 3A8C 0012 RETURN 0
  574. 326A 0E05 MOVLW 0x5
  575. 326C DB2E RCALL __pa_7
  576. 326E 0E03 MOVLW 0x3
  577. 3270 B0DB BTFSC PLUSW2, 0, ACCESS
  578. 3272 D005 BRA 0x327E
  579. 3274 DAFC RCALL __pa_2
  580. 3276 E001 BZ 0x327A
  581. 3278 D2D7 BRA 0x3828
  582. 327A 0E08 MOVLW 0x8
  583. 327C 6ADB CLRF PLUSW2, ACCESS
  584. 327E 0E09 MOVLW 0x9
  585. 3280 6ADB CLRF PLUSW2, ACCESS
  586. 3282 0E0E MOVLW 0xE
  587. 3284 CFDB MOVFF PLUSW2, TBLPTRL
  588. 3286 FFF6 NOP
  589. 3288 0E0F MOVLW 0xF
  590. 328A CFDB MOVFF PLUSW2, TBLPTRH
  591. 328C FFF7 NOP
  592. 328E 0E10 MOVLW 0x10
  593. 3290 CFDB MOVFF PLUSW2, TBLPTRU
  594. 3292 FFF8 NOP
  595. 3294 0008 TBLRD*
  596. 3296 50F5 MOVF TABLAT, W, ACCESS
  597. 3298 6EDF MOVWF INDF2, ACCESS
  598. 329A 50DF MOVF INDF2, W, ACCESS
  599. 329C E014 BZ 0x32C6
  600. 329E EC7D CALL 0x3AFA, 0
  601. 32A0 F01D NOP
  602. 32A2 E211 BC 0x32C6
  603. 32BA 50D9 MOVF FSR2L, W, ACCESS
  604. 32BC 0F0E ADDLW 0xE
  605. 32BE 6EE9 MOVWF FSR0L, ACCESS
  606. 32C0 0E00 MOVLW 0x0
  607. 32C2 DBCB RCALL __pa_30
  608. 32C4 D7E7 BRA 0x3294
  609. 3AFA 0E04 MOVLW 0x4
  610. 3AFC 50DB MOVF PLUSW2, W, ACCESS
  611. 3AFE 6EF3 MOVWF PRODL, ACCESS
  612. 3B00 0E09 MOVLW 0x9
  613. 3B02 EF60 GOTO 0x38C0
  614. 3B04 F01C NOP
  615. 32A4 EC8C CALL 0x3B18, 0
  616. 32A6 F01D NOP
  617. 32A8 E103 BNZ 0x32B0
  618. 32AA 1C15 COMF digit_cnt, W, ACCESS
  619. 32AC E101 BNZ 0x32B0
  620. 32AE D2BC BRA 0x3828
  621. 32B0 DBBB RCALL __pa_27
  622. 32B2 E301 BNC 0x32B6
  623. 32B4 2ADB INCF PLUSW2, F, ACCESS
  624. 32B6 0E09 MOVLW 0x9
  625. 32B8 2ADB INCF PLUSW2, F, ACCESS
  626. 32C6 DAD3 RCALL __pa_2
  627. 32C8 E101 BNZ 0x32CC
  628. 32CA D2B4 BRA 0x3834
  629. 32CC D2AD BRA 0x3828
  630. 32CE DAC6 RCALL __pa_0
  631. 32D0 0E11 MOVLW 0x11
  632. 32D2 CFEE MOVFF POSTINC0, PLUSW2
  633. 32D4 FFDB NOP
  634. 32D6 0E12 MOVLW 0x12
  635. 32D8 CFED MOVFF POSTDEC0, PLUSW2
  636. 32DA FFDB NOP
  637. 32DC 0E11 MOVLW 0x11
  638. 32DE CFDB MOVFF PLUSW2, POSTINC1
  639. 32E0 FFE6 NOP
  640. 32E2 0E12 MOVLW 0x12
  641. 32E4 CFDB MOVFF PLUSW2, POSTINC1
  642. 32E6 FFE6 NOP
  643. 32E8 EC8D CALL 0x471A, 0
  644. 32EA F023 NOP
  645. 32EC 52E5 MOVF POSTDEC1, F, ACCESS
  646. 32EE 52E5 MOVF POSTDEC1, F, ACCESS
  647. 32F0 0E13 MOVLW 0x13
  648. 32F2 CFF3 MOVFF PRODL, PLUSW2
  649. 32F4 FFDB NOP
  650. 32F6 0E14 MOVLW 0x14
  651. 32F8 CFF4 MOVFF PRODH, PLUSW2
  652. 32FA FFDB NOP
  653. 32FC 0E06 MOVLW 0x6
  654. 32FE 50DB MOVF PLUSW2, W, ACCESS
  655. 3300 E004 BZ 0x330A
  656. 3302 0E13 MOVLW 0x13
  657. 3304 DBD0 RCALL __pa_33
  658. 3306 E201 BC 0x330A
  659. 3308 DB0E RCALL __pa_11
  660. 330A EC77 CALL 0x3AEE, 0
  661. 330C F01D NOP
  662. 330E E202 BC 0x3314
  663. 3310 0E13 MOVLW 0x13
  664. 3312 DADB RCALL __pa_7
  665. 3314 DBAF RCALL __pa_31
  666. 39B8 6EE7 MOVWF INDF1, ACCESS
  667. 39BA 0E08 MOVLW 0x8
  668. 39BC CFE7 MOVFF INDF1, PLUSW2
  669. 39BE FFDB NOP
  670. 39C0 0012 RETURN 0
  671. 3316 E005 BZ 0x3322
  672. 3318 0E04 MOVLW 0x4
  673. 331A DBC5 RCALL __pa_33
  674. 331C E202 BC 0x3322
  675. 3AA6 50DB MOVF PLUSW2, W, ACCESS
  676. 3AA8 6EF3 MOVWF PRODL, ACCESS
  677. 3AAA 0E05 MOVLW 0x5
  678. 3AAC EF60 GOTO 0x38C0
  679. 3AAE F01C NOP
  680. 331E 0E05 MOVLW 0x5
  681. 3320 DAD4 RCALL __pa_7
  682. 38CA 50DB MOVF PLUSW2, W, ACCESS
  683. 38CC 6EE7 MOVWF INDF1, ACCESS
  684. 38CE 0E04 MOVLW 0x4
  685. 38D0 CFE7 MOVFF INDF1, PLUSW2
  686. 38D2 FFDB NOP
  687. 38D4 0012 RETURN 0
  688. 3322 0E03 MOVLW 0x3
  689. 3324 B0DB BTFSC PLUSW2, 0, ACCESS
  690. 3326 D005 BRA 0x3332
  691. 3328 DAA2 RCALL __pa_2
  692. 332A E001 BZ 0x332E
  693. 332C D27D BRA 0x3828
  694. 332E 0E08 MOVLW 0x8
  695. 3330 6ADB CLRF PLUSW2, ACCESS
  696. 3332 0E09 MOVLW 0x9
  697. 3334 6ADB CLRF PLUSW2, ACCESS
  698. 3336 0E11 MOVLW 0x11
  699. 3338 CFDB MOVFF PLUSW2, FSR0L
  700. 333A FFE9 NOP
  701. 333C 0E12 MOVLW 0x12
  702. 333E CFDB MOVFF PLUSW2, FSR0H
  703. 3340 FFEA NOP
  704. 3342 CFEF MOVFF INDF0, INDF2
  705. 3344 FFDF NOP
  706. 3346 50DF MOVF INDF2, W, ACCESS
  707. 3348 E014 BZ 0x3372
  708. 334A DBD7 RCALL __pa_40
  709. 334C E212 BC 0x3372
  710. 3362 0E11 MOVLW 0x11
  711. 3364 2ADB INCF PLUSW2, F, ACCESS
  712. 3366 CFDB MOVFF PLUSW2, FSR0L
  713. 3368 FFE9 NOP
  714. 336A 0E12 MOVLW 0x12
  715. 336C E3E8 BNC 0x333E
  716. 336E 2ADB INCF PLUSW2, F, ACCESS
  717. 3370 D7E6 BRA 0x333E
  718. 334E DBE4 RCALL __pa_43
  719. 3350 E103 BNZ 0x3358
  720. 3352 1C15 COMF digit_cnt, W, ACCESS
  721. 3354 E101 BNZ 0x3358
  722. 3356 D268 BRA 0x3828
  723. 3358 DB67 RCALL __pa_27
  724. 335A E301 BNC 0x335E
  725. 335C 2ADB INCF PLUSW2, F, ACCESS
  726. 335E 0E09 MOVLW 0x9
  727. 3360 2ADB INCF PLUSW2, F, ACCESS
  728. 3372 DA7D RCALL __pa_2
  729. 3374 E101 BNZ 0x3378
  730. 3376 D25E BRA 0x3834
  731. 3378 D257 BRA 0x3828
  732. 337A 0E03 MOVLW 0x3
  733. 337C 8EDB BSF PLUSW2, 7, ACCESS
  734. 337E 0E07 MOVLW 0x7
  735. 3380 04DB DECF PLUSW2, W, ACCESS
  736. 3382 E110 BNZ 0x33A4
  737. 3384 DB95 RCALL __pa_34
  738. 3386 0E04 MOVLW 0x4
  739. 3388 DB5A RCALL __pa_29
  740. 338A 0E0A MOVLW 0xA
  741. 338C CFEE MOVFF POSTINC0, PLUSW2
  742. 338E FFDB NOP
  743. 3390 0E0B MOVLW 0xB
  744. 3392 CFEE MOVFF POSTINC0, PLUSW2
  745. 3394 FFDB NOP
  746. 3396 0E0C MOVLW 0xC
  747. 3398 CFEE MOVFF POSTINC0, PLUSW2
  748. 339A FFDB NOP
  749. 339C 0E0D MOVLW 0xD
  750. 339E CFEE MOVFF POSTINC0, PLUSW2
  751. 33A0 FFDB NOP
  752. 33A2 D06C BRA 0x347C
  753. 33A4 0E07 MOVLW 0x7
  754. 33A6 50DB MOVF PLUSW2, W, ACCESS
  755. 33A8 0803 SUBLW 0x3
  756. 33AA E12C BNZ 0x3404
  757. 33AC 0E03 MOVLW 0x3
  758. 33AE AEDB BTFSS PLUSW2, 7, ACCESS
  759. 33B0 D00D BRA 0x33CC
  760. 33B2 DAB2 RCALL __pa_10
  761. 33B4 0E02 MOVLW 0x2
  762. 33B6 DA76 RCALL __pa_5
  763. 33B8 CFEF MOVFF INDF0, __tmp_0
  764. 33BA F014 NOP
  765. 33BC 6A15 CLRF digit_cnt, ACCESS
  766. 33BE 6A16 CLRF prefix_cnt, ACCESS
  767. 33C0 6A17 CLRF sign_char, ACCESS
  768. 33C2 AE14 BTFSS __tmp_0, 7, ACCESS
  769. 33C4 D039 BRA 0x3438
  770. 33C6 6815 SETF digit_cnt, ACCESS
  771. 33C8 6816 SETF prefix_cnt, ACCESS
  772. 33CA D035 BRA 0x3436
  773. 33CC 0EF7 MOVLW 0xF7
  774. 33CE CFDB MOVFF PLUSW2, digit_cnt
  775. 33D0 F015 NOP
  776. 33D2 0EF8 MOVLW 0xF8
  777. 33D4 CFDB MOVFF PLUSW2, prefix_cnt
  778. 33D6 F016 NOP
  779. 33D8 0E02 MOVLW 0x2
  780. 33DA 5E15 SUBWF digit_cnt, F, ACCESS
  781. 33DC 0E00 MOVLW 0x0
  782. 33DE 5A16 SUBWFB prefix_cnt, F, ACCESS
  783. 33E0 0EF7 MOVLW 0xF7
  784. 33E2 C015 MOVFF digit_cnt, PLUSW2
  785. 33E4 FFDB NOP
  786. 33E6 0EF8 MOVLW 0xF8
  787. 33E8 C016 MOVFF prefix_cnt, PLUSW2
  788. 33EA FFDB NOP
  789. 33EC C015 MOVFF digit_cnt, FSR0L
  790. 33EE FFE9 NOP
  791. 33F0 C016 MOVFF prefix_cnt, FSR0H
  792. 33F2 FFEA NOP
  793. 33F4 CFEF MOVFF INDF0, __tmp_0
  794. 33F6 F014 NOP
  795. 33F8 0E0A MOVLW 0xA
  796. 33FA C014 MOVFF __tmp_0, PLUSW2
  797. 33FC FFDB NOP
  798. 33FE 0E0B MOVLW 0xB
  799. 3400 6ADB CLRF PLUSW2, ACCESS
  800. 3402 D038 BRA 0x3474
  801. 3404 0E07 MOVLW 0x7
  802. 3406 50DB MOVF PLUSW2, W, ACCESS
  803. 3408 0802 SUBLW 0x2
  804. 340A E109 BNZ 0x341E
  805. 340C 0E03 MOVLW 0x3
  806. 340E AEDB BTFSS PLUSW2, 7, ACCESS
  807. 3410 D004 BRA 0x341A
  808. 3412 DB59 RCALL __pa_36
  809. 3414 AE16 BTFSS prefix_cnt, 7, ACCESS
  810. 3416 D010 BRA 0x3438
  811. 39C2 CFEE MOVFF POSTINC0, __tmp_0
  812. 39C4 F014 NOP
  813. 39C6 CFEE MOVFF POSTINC0, digit_cnt
  814. 39C8 F015 NOP
  815. 39CA CFEF MOVFF INDF0, prefix_cnt
  816. 39CC F016 NOP
  817. 39CE 6A17 CLRF sign_char, ACCESS
  818. 39D0 0012 RETURN 0
  819. 3AC6 DF28 RCALL __pa_10
  820. 3AC8 0E03 MOVLW 0x3
  821. 3ACA DEEC RCALL __pa_5
  822. 3ACC EFE1 GOTO 0x39C2
  823. 3ACE F01C NOP
  824. 3418 D00E BRA 0x3436
  825. 341A DB55 RCALL __pa_36
  826. 341C D00D BRA 0x3438
  827. 341E 0E03 MOVLW 0x3
  828. 3420 AEDB BTFSS PLUSW2, 7, ACCESS
  829. 3422 D012 BRA 0x3448
  830. 3424 DA79 RCALL __pa_10
  831. 3426 0E02 MOVLW 0x2
  832. 3428 DA3D RCALL __pa_5
  833. 342A DAF9 RCALL __pa_26
  834. 342C 6A16 CLRF prefix_cnt, ACCESS
  835. 342E 6A17 CLRF sign_char, ACCESS
  836. 3430 AE15 BTFSS digit_cnt, 7, ACCESS
  837. 3432 D002 BRA 0x3438
  838. 3434 6816 SETF prefix_cnt, ACCESS
  839. 3436 6817 SETF sign_char, ACCESS
  840. 3438 DAE2 RCALL __pa_23
  841. 343A 0E0C MOVLW 0xC
  842. 343C C016 MOVFF prefix_cnt, PLUSW2
  843. 343E FFDB NOP
  844. 3440 0E0D MOVLW 0xD
  845. 3442 C017 MOVFF sign_char, PLUSW2
  846. 3444 FFDB NOP
  847. 38A4 5E18 SUBWF buf, F, ACCESS
  848. 38A6 0E00 MOVLW 0x0
  849. 38A8 5A19 SUBWFB 0x19, F, ACCESS
  850. 38AA 0EF7 MOVLW 0xF7
  851. 38AC C018 MOVFF buf, PLUSW2
  852. 38AE FFDB NOP
  853. 38B0 0EF8 MOVLW 0xF8
  854. 38B2 C019 MOVFF 0x19, PLUSW2
  855. 38B4 FFDB NOP
  856. 38B6 C018 MOVFF buf, FSR0L
  857. 38B8 FFE9 NOP
  858. 38BA C019 MOVFF 0x19, FSR0H
  859. 38BC FFEA NOP
  860. 38BE 0012 RETURN 0
  861. 3918 0EF7 MOVLW 0xF7
  862. 391A CFDB MOVFF PLUSW2, buf
  863. 391C F018 NOP
  864. 391E 0EF8 MOVLW 0xF8
  865. 3920 CFDB MOVFF PLUSW2, 0x19
  866. 3922 F019 NOP
  867. 3924 0012 RETURN 0
  868. 39FE 0E0A MOVLW 0xA
  869. 3A00 C014 MOVFF __tmp_0, PLUSW2
  870. 3A02 FFDB NOP
  871. 3A04 0E0B MOVLW 0xB
  872. 3A06 C015 MOVFF digit_cnt, PLUSW2
  873. 3A08 FFDB NOP
  874. 3A0A 0012 RETURN 0
  875. 3A1E CFEE MOVFF POSTINC0, __tmp_0
  876. 3A20 F014 NOP
  877. 3A22 CFEF MOVFF INDF0, digit_cnt
  878. 3A24 F015 NOP
  879. 3A26 0012 RETURN 0
  880. 3446 D01A BRA 0x347C
  881. 3448 0EF7 MOVLW 0xF7
  882. 344A CFDB MOVFF PLUSW2, prefix_cnt
  883. 344C F016 NOP
  884. 344E 0EF8 MOVLW 0xF8
  885. 3450 CFDB MOVFF PLUSW2, sign_char
  886. 3452 F017 NOP
  887. 3454 0E02 MOVLW 0x2
  888. 3456 5E16 SUBWF prefix_cnt, F, ACCESS
  889. 3458 0E00 MOVLW 0x0
  890. 345A 5A17 SUBWFB sign_char, F, ACCESS
  891. 345C 0EF7 MOVLW 0xF7
  892. 345E C016 MOVFF prefix_cnt, PLUSW2
  893. 3460 FFDB NOP
  894. 3462 0EF8 MOVLW 0xF8
  895. 3464 C017 MOVFF sign_char, PLUSW2
  896. 3466 FFDB NOP
  897. 3468 C016 MOVFF prefix_cnt, FSR0L
  898. 346A FFE9 NOP
  899. 346C C017 MOVFF sign_char, FSR0H
  900. 346E FFEA NOP
  901. 3470 DAD6 RCALL __pa_26
  902. 3472 DAC5 RCALL __pa_23
  903. 3474 0E0C MOVLW 0xC
  904. 3476 6ADB CLRF PLUSW2, ACCESS
  905. 3478 0E0D MOVLW 0xD
  906. 347A 6ADB CLRF PLUSW2, ACCESS
  907. 347C 0E06 MOVLW 0x6
  908. 347E 50DB MOVF PLUSW2, W, ACCESS
  909. 3480 E105 BNZ 0x348C
  910. 3482 0E01 MOVLW 0x1
  911. 3484 6EF3 MOVWF PRODL, ACCESS
  912. 3486 0E05 MOVLW 0x5
  913. 3488 CFF3 MOVFF PRODL, PLUSW2
  914. 348A FFDB NOP
  915. 348C 0E15 MOVLW 0x15
  916. 348E 6ADB CLRF PLUSW2, ACCESS
  917. 3490 0E16 MOVLW 0x16
  918. 3492 6ADB CLRF PLUSW2, ACCESS
  919. 3494 50D9 MOVF FSR2L, W, ACCESS
  920. 3496 0F37 ADDLW 0x37
  921. 3498 6E14 MOVWF __tmp_0, ACCESS
  922. 349A 0E00 MOVLW 0x0
  923. 349C 20DA ADDWFC FSR2H, W, ACCESS
  924. 349E 6E15 MOVWF digit_cnt, ACCESS
  925. 34A0 0E39 MOVLW 0x39
  926. 34A2 C014 MOVFF __tmp_0, PLUSW2
  927. 34A4 FFDB NOP
  928. 34A6 0E3A MOVLW 0x3A
  929. 34A8 C015 MOVFF digit_cnt, PLUSW2
  930. 34AA FFDB NOP
  931. 34AC 0E38 MOVLW 0x38
  932. 34AE 6ADB CLRF PLUSW2, ACCESS
  933. 34B0 0E08 MOVLW 0x8
  934. 34B2 6ADB CLRF PLUSW2, ACCESS
  935. 34B4 0E0A MOVLW 0xA
  936. 34B6 DAAE RCALL __pa_25
  937. 34B8 50DF MOVF INDF2, W, ACCESS
  938. 34BA 0A78 XORLW 0x78
  939. 34BC E012 BZ 0x34E2
  940. 34BE 0A20 XORLW 0x20
  941. 34C0 E010 BZ 0x34E2
  942. 34C2 0A28 XORLW 0x28
  943. 34C4 E00C BZ 0x34DE
  944. 34C6 0A20 XORLW 0x20
  945. 34C8 E00A BZ 0x34DE
  946. 34CA 0A3F XORLW 0x3F
  947. 34CC E006 BZ 0x34DA
  948. 34CE 0A0D XORLW 0xD
  949. 34D0 E002 BZ 0x34D6
  950. 34D2 0A20 XORLW 0x20
  951. 34D4 E108 BNZ 0x34E6
  952. 34D6 0E02 MOVLW 0x2
  953. 34D8 D005 BRA 0x34E4
  954. 34DA 0E08 MOVLW 0x8
  955. 34DC D003 BRA 0x34E4
  956. 34DE 0E08 MOVLW 0x8
  957. 34E0 26DF ADDWF INDF2, F, ACCESS
  958. 34E2 0E10 MOVLW 0x10
  959. 34E4 DA97 RCALL __pa_25
  960. 3A14 6EF3 MOVWF PRODL, ACCESS
  961. 3A16 0E07 MOVLW 0x7
  962. 3A18 CFF3 MOVFF PRODL, PLUSW2
  963. 3A1A FFDB NOP
  964. 3A1C 0012 RETURN 0
  965. 34E6 0E03 MOVLW 0x3
  966. 34E8 BEDB BTFSC PLUSW2, 7, ACCESS
  967. 34EA D002 BRA 0x34F0
  968. 34EC 92DB BCF PLUSW2, 1, ACCESS
  969. 34EE 94DB BCF PLUSW2, 2, ACCESS
  970. 34F0 50DB MOVF PLUSW2, W, ACCESS
  971. 34F2 0B80 ANDLW 0x80
  972. 34F4 E024 BZ 0x353E
  973. 34F6 DA8A RCALL __pa_24
  974. 34F8 90D8 BCF STATUS, 0, ACCESS
  975. 34FA 0E03 MOVLW 0x3
  976. 34FC 50EB MOVF PLUSW0, W, ACCESS
  977. 34FE 0A00 XORLW 0x0
  978. 3500 E608 BN 0x3512
  979. 3502 0E00 MOVLW 0x0
  980. 3504 5CEE SUBWF POSTINC0, W, ACCESS
  981. 3506 0E00 MOVLW 0x0
  982. 3508 58EE SUBWFB POSTINC0, W, ACCESS
  983. 350A 0E00 MOVLW 0x0
  984. 350C 58EE SUBWFB POSTINC0, W, ACCESS
  985. 350E 0E00 MOVLW 0x0
  986. 3510 58EE SUBWFB POSTINC0, W, ACCESS
  987. 3512 E215 BC 0x353E
  988. 3A0C 50D9 MOVF FSR2L, W, ACCESS
  989. 3A0E 0F0A ADDLW 0xA
  990. 3A10 EF9A GOTO 0x3B34
  991. 3A12 F01D NOP
  992. 3B34 6EE9 MOVWF FSR0L, ACCESS
  993. 3B36 0E00 MOVLW 0x0
  994. 3B38 20DA ADDWFC FSR2H, W, ACCESS
  995. 3B3A 6EEA MOVWF FSR0H, ACCESS
  996. 3B3C 0012 RETURN 0
  997. 3514 DA13 RCALL __pa_12
  998. 3516 6809 SETF cval, ACCESS
  999. 3518 680A SETF larg, ACCESS
  1000. 351A 680B SETF 0xB, ACCESS
  1001. 351C 680C SETF 0xC, ACCESS
  1002. 351E EC36 CALL 0x4A6C, 0
  1003. 3520 F025 NOP
  1004. 3522 0E0A MOVLW 0xA
  1005. 3524 C000 MOVFF i, PLUSW2
  1006. 3526 FFDB NOP
  1007. 3528 0E0B MOVLW 0xB
  1008. 352A C001 MOVFF c, PLUSW2
  1009. 352C FFDB NOP
  1010. 352E 0E0C MOVLW 0xC
  1011. 3530 C002 MOVFF c2, PLUSW2
  1012. 3532 FFDB NOP
  1013. 3534 0E0D MOVLW 0xD
  1014. 3536 C003 MOVFF n, PLUSW2
  1015. 3538 FFDB NOP
  1016. 393C 0E0A MOVLW 0xA
  1017. 393E CFDB MOVFF PLUSW2, i
  1018. 3940 F004 NOP
  1019. 3942 0E0B MOVLW 0xB
  1020. 3944 CFDB MOVFF PLUSW2, precision
  1021. 3946 F005 NOP
  1022. 3948 0E0C MOVLW 0xC
  1023. 394A CFDB MOVFF PLUSW2, pUEP
  1024. 394C F006 NOP
  1025. 394E 0E0D MOVLW 0xD
  1026. 3950 CFDB MOVFF PLUSW2, size
  1027. 3952 F007 NOP
  1028. 3954 0012 RETURN 0
  1029. 353A 0E2D MOVLW 0x2D
  1030. 353C D008 BRA 0x354E
  1031. 353E 0E03 MOVLW 0x3
  1032. 3540 A2DB BTFSS PLUSW2, 1, ACCESS
  1033. 3542 D002 BRA 0x3548
  1034. 3544 0E2B MOVLW 0x2B
  1035. 3546 D003 BRA 0x354E
  1036. 3548 A4DB BTFSS PLUSW2, 2, ACCESS
  1037. 354A D008 BRA 0x355C
  1038. 354C 0E20 MOVLW 0x20
  1039. 354E 6EF3 MOVWF PRODL, ACCESS
  1040. 3550 0E17 MOVLW 0x17
  1041. 3552 CFF3 MOVFF PRODL, PLUSW2
  1042. 3554 FFDB NOP
  1043. 3556 0E15 MOVLW 0x15
  1044. 3558 2ADB INCF PLUSW2, F, ACCESS
  1045. 355A D002 BRA 0x3560
  1046. 355C 0E17 MOVLW 0x17
  1047. 355E 6ADB CLRF PLUSW2, ACCESS
  1048. 3560 0E05 MOVLW 0x5
  1049. 3562 50DB MOVF PLUSW2, W, ACCESS
  1050. 3564 E103 BNZ 0x356C
  1051. 3566 D9B7 RCALL __pa_8
  1052. 3568 E101 BNZ 0x356C
  1053. 356A D089 BRA 0x367E
  1054. 38D6 0E0A MOVLW 0xA
  1055. 38D8 CFDB MOVFF PLUSW2, __tmp_0
  1056. 38DA F014 NOP
  1057. 38DC 0E0B MOVLW 0xB
  1058. 38DE CFDB MOVFF PLUSW2, digit_cnt
  1059. 38E0 F015 NOP
  1060. 38E2 0E0C MOVLW 0xC
  1061. 38E4 CFDB MOVFF PLUSW2, prefix_cnt
  1062. 38E6 F016 NOP
  1063. 38E8 0E0D MOVLW 0xD
  1064. 38EA CFDB MOVFF PLUSW2, sign_char
  1065. 38EC F017 NOP
  1066. 38EE 5014 MOVF __tmp_0, W, ACCESS
  1067. 38F0 1015 IORWF digit_cnt, W, ACCESS
  1068. 38F2 1016 IORWF prefix_cnt, W, ACCESS
  1069. 38F4 1017 IORWF sign_char, W, ACCESS
  1070. 38F6 0012 RETURN 0
  1071. 356C 0EFA MOVLW 0xFA
  1072. 356E 6E14 MOVWF __tmp_0, ACCESS
  1073. 3570 0E4B MOVLW 0x4B
  1074. 3572 6E15 MOVWF digit_cnt, ACCESS
  1075. 3574 0E00 MOVLW 0x0
  1076. 3576 6E16 MOVWF prefix_cnt, ACCESS
  1077. 3578 0E07 MOVLW 0x7
  1078. 357A CFDB MOVFF PLUSW2, sign_char
  1079. 357C F017 NOP
  1080. 357E 6A18 CLRF buf, ACCESS
  1081. 3580 6A19 CLRF 0x19, ACCESS
  1082. 3582 6A1A CLRF 0x1A, ACCESS
  1083. 3584 C017 MOVFF sign_char, cval
  1084. 3586 F009 NOP
  1085. 3588 C018 MOVFF buf, larg
  1086. 358A F00A NOP
  1087. 358C C019 MOVFF 0x19, 0xB
  1088. 358E F00B NOP
  1089. 3590 C01A MOVFF 0x1A, 0xC
  1090. 3592 F00C NOP
  1091. 3594 D9D3 RCALL __pa_12
  1092. 3596 EC9B CALL 0x4B36, 0
  1093. 3598 F025 NOP
  1094. 359A 5014 MOVF __tmp_0, W, ACCESS
  1095. 359C 2400 ADDWF i, W, ACCESS
  1096. 359E 6EF3 MOVWF PRODL, ACCESS
  1097. 35A0 5015 MOVF digit_cnt, W, ACCESS
  1098. 35A2 2001 ADDWFC c, W, ACCESS
  1099. 35A4 6EF4 MOVWF PRODH, ACCESS
  1100. 35A6 5016 MOVF prefix_cnt, W, ACCESS
  1101. 35A8 2002 ADDWFC c2, W, ACCESS
  1102. 35AA 6EF8 MOVWF TBLPTRU, ACCESS
  1103. 35AC CFF4 MOVFF PRODH, TBLPTRH
  1104. 35AE FFF7 NOP
  1105. 35B0 CFF3 MOVFF PRODL, TBLPTRL
  1106. 35B2 FFF6 NOP
  1107. 35B4 0008 TBLRD*
  1108. 35B6 0E09 MOVLW 0x9
  1109. 35B8 CFF5 MOVFF TABLAT, PLUSW2
  1110. 35BA FFDB NOP
  1111. 35BC 0E58 MOVLW 0x58
  1112. 35BE 5CDF SUBWF INDF2, W, ACCESS
  1113. 35C0 E10F BNZ 0x35E0
  1114. 35C2 0E61 MOVLW 0x61
  1115. 35C4 6EF3 MOVWF PRODL, ACCESS
  1116. 35C6 0E09 MOVLW 0x9
  1117. 35C8 D97B RCALL __pa_6
  1118. 35CA E30A BNC 0x35E0
  1119. 38C0 CFDB MOVFF PLUSW2, PRODH
  1120. 38C2 FFF4 NOP
  1121. 38C4 50F3 MOVF PRODL, W, ACCESS
  1122. 38C6 5CF4 SUBWF PRODH, W, ACCESS
  1123. 38C8 0012 RETURN 0
  1124. 35CC 0E20 MOVLW 0x20
  1125. 35CE 6E14 MOVWF __tmp_0, ACCESS
  1126. 35D0 0E09 MOVLW 0x9
  1127. 35D2 CFDB MOVFF PLUSW2, INDF1
  1128. 35D4 FFE7 NOP
  1129. 35D6 5014 MOVF __tmp_0, W, ACCESS
  1130. 35D8 5EE7 SUBWF INDF1, F, ACCESS
  1131. 35DA 0E09 MOVLW 0x9
  1132. 35DC CFE7 MOVFF INDF1, PLUSW2
  1133. 35DE FFDB NOP
  1134. 35E0 0E07 MOVLW 0x7
  1135. 35E2 CFDB MOVFF PLUSW2, __tmp_0
  1136. 35E4 F014 NOP
  1137. 35E6 6A15 CLRF digit_cnt, ACCESS
  1138. 35E8 6A16 CLRF prefix_cnt, ACCESS
  1139. 35EA 6A17 CLRF sign_char, ACCESS
  1140. 35EC DA0F RCALL __pa_24
  1141. 35EE C014 MOVFF __tmp_0, cval
  1142. 35F0 F009 NOP
  1143. 35F2 C015 MOVFF digit_cnt, larg
  1144. 35F4 F00A NOP
  1145. 35F6 C016 MOVFF prefix_cnt, 0xB
  1146. 35F8 F00B NOP
  1147. 35FA C017 MOVFF sign_char, 0xC
  1148. 35FC F00C NOP
  1149. 35FE CFEE MOVFF POSTINC0, i
  1150. 3600 F004 NOP
  1151. 3602 CFEE MOVFF POSTINC0, precision
  1152. 3604 F005 NOP
  1153. 3606 CFEE MOVFF POSTINC0, pUEP
  1154. 3608 F006 NOP
  1155. 360A CFEF MOVFF INDF0, size
  1156. 360C F007 NOP
  1157. 360E EC9B CALL 0x4B36, 0
  1158. 3610 F025 NOP
  1159. 3612 C007 MOVFF size, POSTDEC0
  1160. 3614 FFED NOP
  1161. 3616 C006 MOVFF pUEP, POSTDEC0
  1162. 3618 FFED NOP
  1163. 361A C005 MOVFF precision, POSTDEC0
  1164. 361C FFED NOP
  1165. 361E C004 MOVFF i, INDF0
  1166. 3620 FFEF NOP
  1167. 3622 0E39 MOVLW 0x39
  1168. 3624 CFDB MOVFF PLUSW2, FSR0L
  1169. 3626 FFE9 NOP
  1170. 3628 06DB DECF PLUSW2, F, ACCESS
  1171. 362A 0E3A MOVLW 0x3A
  1172. 362C CFDB MOVFF PLUSW2, FSR0H
  1173. 362E FFEA NOP
  1174. 3630 E201 BC 0x3634
  1175. 3632 06DB DECF PLUSW2, F, ACCESS
  1176. 3634 0E09 MOVLW 0x9
  1177. 3636 CFDB MOVFF PLUSW2, INDF0
  1178. 3638 FFEF NOP
  1179. 363A 0E15 MOVLW 0x15
  1180. 363C 2ADB INCF PLUSW2, F, ACCESS
  1181. 363E D94B RCALL __pa_8
  1182. 3640 E195 BNZ 0x356C
  1183. 3642 0E03 MOVLW 0x3
  1184. 3644 A6DB BTFSS PLUSW2, 3, ACCESS
  1185. 3646 D01D BRA 0x3682
  1186. 3648 0E6F MOVLW 0x6F
  1187. 364A 5CDF SUBWF INDF2, W, ACCESS
  1188. 364C E106 BNZ 0x365A
  1189. 364E D9C1 RCALL __pa_20
  1190. 3650 E318 BNC 0x3682
  1191. 39D2 0E05 MOVLW 0x5
  1192. 39D4 CFDB MOVFF PLUSW2, __tmp_0
  1193. 39D6 F014 NOP
  1194. 39D8 0E15 MOVLW 0x15
  1195. 39DA 50DB MOVF PLUSW2, W, ACCESS
  1196. 39DC 80D8 BSF STATUS, 0, ACCESS
  1197. 39DE 5414 SUBFWB __tmp_0, W, ACCESS
  1198. 39E0 0012 RETURN 0
  1199. 3652 0E15 MOVLW 0x15
  1200. 3654 28DB INCF PLUSW2, W, ACCESS
  1201. 3656 DA5B RCALL __pa_42
  1202. 3658 D014 BRA 0x3682
  1203. 365A 0E78 MOVLW 0x78
  1204. 365C 5CDF SUBWF INDF2, W, ACCESS
  1205. 365E E009 BZ 0x3672
  1206. 3660 0E58 MOVLW 0x58
  1207. 3662 5CDF SUBWF INDF2, W, ACCESS
  1208. 3664 E006 BZ 0x3672
  1209. 3666 0E62 MOVLW 0x62
  1210. 3668 5CDF SUBWF INDF2, W, ACCESS
  1211. 366A E003 BZ 0x3672
  1212. 366C 0E42 MOVLW 0x42
  1213. 366E 5CDF SUBWF INDF2, W, ACCESS
  1214. 3670 E108 BNZ 0x3682
  1215. 3672 0E02 MOVLW 0x2
  1216. 3674 6EF3 MOVWF PRODL, ACCESS
  1217. 3676 0E16 MOVLW 0x16
  1218. 3678 CFF3 MOVFF PRODL, PLUSW2
  1219. 367A FFDB NOP
  1220. 367C D002 BRA 0x3682
  1221. 367E 0E15 MOVLW 0x15
  1222. 3680 6ADB CLRF PLUSW2, ACCESS
  1223. 3682 0E03 MOVLW 0x3
  1224. 3684 50DB MOVF PLUSW2, W, ACCESS
  1225. 3686 0B10 ANDLW 0x10
  1226. 368A 0E04 MOVLW 0x4
  1227. 368C CFDB MOVFF PLUSW2, __tmp_0
  1228. 368E F014 NOP
  1229. 3690 0E05 MOVLW 0x5
  1230. 3692 50DB MOVF PLUSW2, W, ACCESS
  1231. 3694 80D8 BSF STATUS, 0, ACCESS
  1232. 3696 5414 SUBFWB __tmp_0, W, ACCESS
  1233. 3688 E00E BZ 0x36A6
  1234. 3698 E206 BC 0x36A6
  1235. 369A 0E06 MOVLW 0x6
  1236. 369C 50DB MOVF PLUSW2, W, ACCESS
  1237. 369E E103 BNZ 0x36A6
  1238. 36A0 0E04 MOVLW 0x4
  1239. 36A2 50DB MOVF PLUSW2, W, ACCESS
  1240. 36A4 DA34 RCALL __pa_42
  1241. 36A6 D995 RCALL __pa_20
  1242. 36A8 E20A BC 0x36BE
  1243. 36AA 0E05 MOVLW 0x5
  1244. 36AC CFDB MOVFF PLUSW2, INDF1
  1245. 36AE FFE7 NOP
  1246. 36B0 0E15 MOVLW 0x15
  1247. 36B2 50DB MOVF PLUSW2, W, ACCESS
  1248. 36B4 5EE7 SUBWF INDF1, F, ACCESS
  1249. 36B6 0E05 MOVLW 0x5
  1250. 36B8 CFE7 MOVFF INDF1, PLUSW2
  1251. 36BA FFDB NOP
  1252. 36BC D002 BRA 0x36C2
  1253. 36BE 0E05 MOVLW 0x5
  1254. 36C0 6ADB CLRF PLUSW2, ACCESS
  1255. 36C2 0E04 MOVLW 0x4
  1256. 36C4 CFDB MOVFF PLUSW2, __tmp_0
  1257. 36C6 F014 NOP
  1258. 36C8 0E16 MOVLW 0x16
  1259. 36CA D945 RCALL __pa_13
  1260. 36CC 80D8 BSF STATUS, 0, ACCESS
  1261. 36CE 5414 SUBFWB __tmp_0, W, ACCESS
  1262. 36D0 E214 BC 0x36FA
  1263. 3956 CFDB MOVFF PLUSW2, POSTINC1
  1264. 3958 FFE6 NOP
  1265. 395A 0E15 MOVLW 0x15
  1266. 395C CFDB MOVFF PLUSW2, POSTINC1
  1267. 395E FFE6 NOP
  1268. 3960 0E05 MOVLW 0x5
  1269. 3962 50DB MOVF PLUSW2, W, ACCESS
  1270. 3964 52E5 MOVF POSTDEC1, F, ACCESS
  1271. 3966 24E7 ADDWF INDF1, W, ACCESS
  1272. 3968 52E5 MOVF POSTDEC1, F, ACCESS
  1273. 396A 24E7 ADDWF INDF1, W, ACCESS
  1274. 396C 0012 RETURN 0
  1275. 36D2 0E16 MOVLW 0x16
  1276. 36D4 CFDB MOVFF PLUSW2, POSTINC1
  1277. 36D6 FFE6 NOP
  1278. 36D8 0E15 MOVLW 0x15
  1279. 36DA CFDB MOVFF PLUSW2, POSTINC1
  1280. 36DC FFE6 NOP
  1281. 36DE 0E04 MOVLW 0x4
  1282. 36E0 CFDB MOVFF PLUSW2, POSTINC1
  1283. 36E2 FFE6 NOP
  1284. 36E4 0E05 MOVLW 0x5
  1285. 36E6 50DB MOVF PLUSW2, W, ACCESS
  1286. 36E8 52E5 MOVF POSTDEC1, F, ACCESS
  1287. 36EA 5CE7 SUBWF INDF1, W, ACCESS
  1288. 36EC 52E5 MOVF POSTDEC1, F, ACCESS
  1289. 36EE 80D8 BSF STATUS, 0, ACCESS
  1290. 36F0 54E7 SUBFWB INDF1, W, ACCESS
  1291. 36F2 52E5 MOVF POSTDEC1, F, ACCESS
  1292. 36F4 80D8 BSF STATUS, 0, ACCESS
  1293. 36F6 54E7 SUBFWB INDF1, W, ACCESS
  1294. 36F8 D95F RCALL __pa_18
  1295. 36FA 0E03 MOVLW 0x3
  1296. 36FC 50DB MOVF PLUSW2, W, ACCESS
  1297. 36FE 0B01 ANDLW 0x1
  1298. 3700 E10B BNZ 0x3718
  1299. 3702 0E08 MOVLW 0x8
  1300. 3704 50DB MOVF PLUSW2, W, ACCESS
  1301. 3706 E008 BZ 0x3718
  1302. 3708 D8B2 RCALL __pa_2
  1303. 370A E001 BZ 0x370E
  1304. 370C D08D BRA 0x3828
  1305. 370E 0E08 MOVLW 0x8
  1306. 3710 50DB MOVF PLUSW2, W, ACCESS
  1307. 3712 D8BE RCALL __pa_4
  1308. 3714 0E08 MOVLW 0x8
  1309. 3716 6ADB CLRF PLUSW2, ACCESS
  1310. 3718 0E17 MOVLW 0x17
  1311. 371A 50DB MOVF PLUSW2, W, ACCESS
  1312. 371C E007 BZ 0x372C
  1313. 371E D988 RCALL __pa_28
  1314. 3720 0E17 MOVLW 0x17
  1315. 3722 D9F1 RCALL __pa_41
  1316. 3724 E103 BNZ 0x372C
  1317. 3726 1C15 COMF digit_cnt, W, ACCESS
  1318. 3728 E101 BNZ 0x372C
  1319. 372A D07E BRA 0x3828
  1320. 372C 0E16 MOVLW 0x16
  1321. 372E 50DB MOVF PLUSW2, W, ACCESS
  1322. 3730 E016 BZ 0x375E
  1323. 3732 D97E RCALL __pa_28
  1324. 3734 0E30 MOVLW 0x30
  1325. 3736 6EE6 MOVWF POSTINC1, ACCESS
  1326. 3738 D89F RCALL __pa_3
  1327. 373A E102 BNZ 0x3740
  1328. 373C 1C15 COMF digit_cnt, W, ACCESS
  1329. 373E E074 BZ 0x3828
  1330. 3740 D977 RCALL __pa_28
  1331. 3742 CFDF MOVFF INDF2, POSTINC1
  1332. 3744 FFE6 NOP
  1333. 3746 ECF4 CALL 0x49E8, 0
  1334. 3748 F024 NOP
  1335. 374A 52E5 MOVF POSTDEC1, F, ACCESS
  1336. 374C 52E5 MOVF POSTDEC1, F, ACCESS
  1337. 374E 52E5 MOVF POSTDEC1, F, ACCESS
  1338. 3750 CFF4 MOVFF PRODH, digit_cnt
  1339. 3752 F015 NOP
  1340. 3754 0100 MOVLB 0x0
  1341. 3756 1CF3 COMF PRODL, W, ACCESS
  1342. 3758 E102 BNZ 0x375E
  1343. 375A 1C15 COMF digit_cnt, W, ACCESS
  1344. 375C E065 BZ 0x3828
  1345. 375E 0E05 MOVLW 0x5
  1346. 3760 CFDB MOVFF PLUSW2, __tmp_0
  1347. 3762 F014 NOP
  1348. 3764 0E16 MOVLW 0x16
  1349. 3766 50DB MOVF PLUSW2, W, ACCESS
  1350. 3768 80D8 BSF STATUS, 0, ACCESS
  1351. 376A 5414 SUBFWB __tmp_0, W, ACCESS
  1352. 376C E209 BC 0x3780
  1353. 376E 0E05 MOVLW 0x5
  1354. 3770 CFDB MOVFF PLUSW2, INDF1
  1355. 3772 FFE7 NOP
  1356. 3774 0E16 MOVLW 0x16
  1357. 3776 50DB MOVF PLUSW2, W, ACCESS
  1358. 3778 5EE7 SUBWF INDF1, F, ACCESS
  1359. 377A 0E05 MOVLW 0x5
  1360. 377C CFE7 MOVFF INDF1, PLUSW2
  1361. 377E FFDB NOP
  1362. 3780 0E30 MOVLW 0x30
  1363. 3782 6EE6 MOVWF POSTINC1, ACCESS
  1364. 3784 0E05 MOVLW 0x5
  1365. 3786 D9CB RCALL __pa_44
  1366. 3788 E14F BNZ 0x3828
  1367. 3AD0 EC8E CALL 0x2F1C, 0
  1368. 3AD2 F017 NOP
  1369. 3AD4 52E5 MOVF POSTDEC1, F, ACCESS
  1370. 3AD6 52E5 MOVF POSTDEC1, F, ACCESS
  1371. 3AD8 52E5 MOVF POSTDEC1, F, ACCESS
  1372. 3ADA 52E5 MOVF POSTDEC1, F, ACCESS
  1373. 3ADC 0900 IORLW 0x0
  1374. 3ADE 0012 RETURN 0
  1375. 3B1E CFDB MOVFF PLUSW2, POSTINC1
  1376. 3B20 FFE6 NOP
  1377. 3B22 DF86 RCALL __pa_28
  1378. 3B24 EF68 GOTO 0x3AD0
  1379. 3B26 F01D NOP
  1380. 378A 0E39 MOVLW 0x39
  1381. 378C 2ADB INCF PLUSW2, F, ACCESS
  1382. 378E CFDB MOVFF PLUSW2, FSR0L
  1383. 3790 FFE9 NOP
  1384. 3792 0E3A MOVLW 0x3A
  1385. 3794 E301 BNC 0x3798
  1386. 3796 2ADB INCF PLUSW2, F, ACCESS
  1387. 3798 CFDB MOVFF PLUSW2, FSR0H
  1388. 379A FFEA NOP
  1389. 379C 0E09 MOVLW 0x9
  1390. 379E CFEF MOVFF INDF0, PLUSW2
  1391. 37A0 FFDB NOP
  1392. 37A2 50DB MOVF PLUSW2, W, ACCESS
  1393. 37A4 E00E BZ 0x37C2
  1394. 37B2 0E39 MOVLW 0x39
  1395. 37B4 2ADB INCF PLUSW2, F, ACCESS
  1396. 37B6 CFDB MOVFF PLUSW2, FSR0L
  1397. 37B8 FFE9 NOP
  1398. 37BA 0E3A MOVLW 0x3A
  1399. 37BC E3ED BNC 0x3798
  1400. 37BE 2ADB INCF PLUSW2, F, ACCESS
  1401. 37C0 D7EB BRA 0x3798
  1402. 37A6 D944 RCALL __pa_28
  1403. 37A8 0E09 MOVLW 0x9
  1404. 37AA D9AD RCALL __pa_41
  1405. 37AC E102 BNZ 0x37B2
  1406. 37AE 1C15 COMF digit_cnt, W, ACCESS
  1407. 37B0 E03B BZ 0x3828
  1408. 3B06 CFDB MOVFF PLUSW2, POSTINC1
  1409. 3B08 FFE6 NOP
  1410. 3B0A EF3C GOTO 0x3878
  1411. 3B0C F01C NOP
  1412. 37C2 D855 RCALL __pa_2
  1413. 37C4 E131 BNZ 0x3828
  1414. 386E 0E20 MOVLW 0x20
  1415. 3870 6EE6 MOVWF POSTINC1, ACCESS
  1416. 3872 0E08 MOVLW 0x8
  1417. 3874 EF8F GOTO 0x3B1E
  1418. 3876 F01D NOP
  1419. 3A30 0EFC MOVLW 0xFC
  1420. 3A32 CFDB MOVFF PLUSW2, POSTINC1
  1421. 3A34 FFE6 NOP
  1422. 3A36 0EFD MOVLW 0xFD
  1423. 3A38 CFDB MOVFF PLUSW2, POSTINC1
  1424. 3A3A FFE6 NOP
  1425. 3A3C 0012 RETURN 0
  1426. 37C6 0E16 MOVLW 0x16
  1427. 37C8 CFDB MOVFF PLUSW2, POSTINC1
  1428. 37CA FFE6 NOP
  1429. 37CC 0E08 MOVLW 0x8
  1430. 37CE D8C3 RCALL __pa_13
  1431. 37D0 52E5 MOVF POSTDEC1, F, ACCESS
  1432. 37D2 24E7 ADDWF INDF1, W, ACCESS
  1433. 37D4 D85D RCALL __pa_4
  1434. 3890 6E14 MOVWF __tmp_0, ACCESS
  1435. 3892 6A15 CLRF digit_cnt, ACCESS
  1436. 3894 50D9 MOVF FSR2L, W, ACCESS
  1437. 3896 0F01 ADDLW 0x1
  1438. 3898 D94D RCALL __pa_46
  1439. 389A 5014 MOVF __tmp_0, W, ACCESS
  1440. 389C 26EE ADDWF POSTINC0, F, ACCESS
  1441. 389E 5015 MOVF digit_cnt, W, ACCESS
  1442. 38A0 22ED ADDWFC POSTDEC0, F, ACCESS
  1443. 38A2 0012 RETURN 0
  1444. 37D6 D02E BRA 0x3834
  1445. 37D8 0E07 MOVLW 0x7
  1446. 37DA 50DB MOVF PLUSW2, W, ACCESS
  1447. 37DC 0A03 XORLW 0x3
  1448. 37DE E01C BZ 0x3818
  1449. 37E0 0A01 XORLW 0x1
  1450. 37E2 E014 BZ 0x380C
  1451. 37E4 0A03 XORLW 0x3
  1452. 37E6 E007 BZ 0x37F6
  1453. 37F6 D8F5 RCALL __pa_21
  1454. 37F8 6A19 CLRF 0x19, ACCESS
  1455. 37FA AE17 BTFSS sign_char, 7, ACCESS
  1456. 37FC D002 BRA 0x3802
  1457. 37FE 6818 SETF buf, ACCESS
  1458. 3800 6819 SETF 0x19, ACCESS
  1459. 3802 D82C RCALL __pa_0
  1460. 3804 D8BC RCALL __pa_15
  1461. 3806 C019 MOVFF 0x19, POSTINC0
  1462. 3808 FFEE NOP
  1463. 397E 50EE MOVF POSTINC0, W, ACCESS
  1464. 3980 CFEF MOVFF INDF0, FSR0H
  1465. 3982 FFEA NOP
  1466. 3984 6EE9 MOVWF FSR0L, ACCESS
  1467. 3986 C016 MOVFF prefix_cnt, POSTINC0
  1468. 3988 FFEE NOP
  1469. 398A C017 MOVFF sign_char, POSTINC0
  1470. 398C FFEE NOP
  1471. 398E C018 MOVFF buf, POSTINC0
  1472. 3990 FFEE NOP
  1473. 3992 0012 RETURN 0
  1474. 39E2 0E01 MOVLW 0x1
  1475. 39E4 CFDB MOVFF PLUSW2, prefix_cnt
  1476. 39E6 F016 NOP
  1477. 39E8 0E02 MOVLW 0x2
  1478. 39EA CFDB MOVFF PLUSW2, sign_char
  1479. 39EC F017 NOP
  1480. 39EE 6A18 CLRF buf, ACCESS
  1481. 39F0 0012 RETURN 0
  1482. 380A D014 BRA 0x3834
  1483. 380C D8EA RCALL __pa_21
  1484. 380E BE17 BTFSC sign_char, 7, ACCESS
  1485. 3810 6818 SETF buf, ACCESS
  1486. 3812 D824 RCALL __pa_0
  1487. 3814 D8B4 RCALL __pa_15
  1488. 3816 D00E BRA 0x3834
  1489. 3818 D963 RCALL __pa_38
  1490. 381A CFDB MOVFF PLUSW2, INDF0
  1491. 381C FFEF NOP
  1492. 381E D00A BRA 0x3834
  1493. 37E8 D97B RCALL __pa_38
  1494. 37EA CFDB MOVFF PLUSW2, POSTINC0
  1495. 37EC FFEE NOP
  1496. 37EE 0E02 MOVLW 0x2
  1497. 37F0 CFDB MOVFF PLUSW2, POSTDEC0
  1498. 37F2 FFED NOP
  1499. 3AE0 DEBD RCALL __pa_0
  1500. 3AE2 50EE MOVF POSTINC0, W, ACCESS
  1501. 3AE4 CFEF MOVFF INDF0, FSR0H
  1502. 3AE6 FFEA NOP
  1503. 3AE8 6EE9 MOVWF FSR0L, ACCESS
  1504. 3AEA 0E01 MOVLW 0x1
  1505. 3AEC 0012 RETURN 0
  1506. 37F4 D01F BRA 0x3834
  1507. 3820 D97B RCALL __pa_43
  1508. 3822 E105 BNZ 0x382E
  1509. 3824 1C15 COMF digit_cnt, W, ACCESS
  1510. 3826 E103 BNZ 0x382E
  1511. 3878 ECF4 CALL 0x49E8, 0
  1512. 387A F024 NOP
  1513. 387C 52E5 MOVF POSTDEC1, F, ACCESS
  1514. 387E 52E5 MOVF POSTDEC1, F, ACCESS
  1515. 3880 52E5 MOVF POSTDEC1, F, ACCESS
  1516. 3882 CFF3 MOVFF PRODL, __tmp_0
  1517. 3884 F014 NOP
  1518. 3886 CFF4 MOVFF PRODH, digit_cnt
  1519. 3888 F015 NOP
  1520. 388A 0100 MOVLB 0x0
  1521. 388C 1CF3 COMF PRODL, W, ACCESS
  1522. 388E 0012 RETURN 0
  1523. 3ABE CFDF MOVFF INDF2, POSTINC1
  1524. 3AC0 FFE6 NOP
  1525. 3AC2 EF3C GOTO 0x3878
  1526. 3AC4 F01C NOP
  1527. 3B18 DF8B RCALL __pa_28
  1528. 3B1A EF5F GOTO 0x3ABE
  1529. 3B1C F01D NOP
  1530. 3828 68F3 SETF PRODL, ACCESS
  1531. 382A 68F4 SETF PRODH, ACCESS
  1532. 382C D010 BRA 0x384E
  1533. 382E D8FC RCALL __pa_27
  1534. 3830 E301 BNC 0x3834
  1535. 3832 2ADB INCF PLUSW2, F, ACCESS
  1536. 3A28 0E01 MOVLW 0x1
  1537. 3A2A 2ADB INCF PLUSW2, F, ACCESS
  1538. 3A2C 0E02 MOVLW 0x2
  1539. 3A2E 0012 RETURN 0
  1540. 383A 0E01 MOVLW 0x1
  1541. 383C CFDB MOVFF PLUSW2, __tmp_0
  1542. 383E F014 NOP
  1543. 3840 0E02 MOVLW 0x2
  1544. 3842 CFDB MOVFF PLUSW2, digit_cnt
  1545. 3844 F015 NOP
  1546. 3846 C014 MOVFF __tmp_0, PRODL
  1547. 3848 FFF3 NOP
  1548. 384A C015 MOVFF digit_cnt, PRODH
  1549. 384C FFF4 NOP
  1550. 384E 0E3B MOVLW 0x3B
  1551. 3850 5CE1 SUBWF FSR1L, W, ACCESS
  1552. 3852 E202 BC 0x3858
  1553. 3854 6AE1 CLRF FSR1L, ACCESS
  1554. 3856 52E5 MOVF POSTDEC1, F, ACCESS
  1555. 3858 6EE1 MOVWF FSR1L, ACCESS
  1556. 385A D0CB BRA __pa_22
  1557. --- C:/MCC18/v3_39/src/traditional/stdclib/strlen.asm -------------------------------------------------
  1558. 471A 0EFE MOVLW 0xFE
  1559. 471C CFE3 MOVFF PLUSW1, FSR0L
  1560. 471E FFE9 NOP
  1561. 4720 0EFF MOVLW 0xFF
  1562. 4722 CFE3 MOVFF PLUSW1, FSR0H
  1563. 4724 FFEA NOP
  1564. 4726 6AF3 CLRF PRODL, ACCESS
  1565. 4728 6AF4 CLRF PRODH, ACCESS
  1566. 472A 52EE MOVF POSTINC0, F, ACCESS
  1567. 472C E003 BZ jEnd
  1568. 472E 4AF3 INFSNZ PRODL, F, ACCESS
  1569. 4730 2AF4 INCF PRODH, F, ACCESS
  1570. 4732 D7FB BRA jLoop
  1571. 4734 0012 RETURN 0
  1572. --- C:/MCC18/v3_39/src/traditional/stdclib/slenpgm.asm ------------------------------------------------
  1573. 4736 0EFF MOVLW 0xFF
  1574. 4738 CFE3 MOVFF PLUSW1, TBLPTRU
  1575. 473A FFF8 NOP
  1576. 473C 52E5 MOVF POSTDEC1, F, ACCESS
  1577. 473E 0EFF MOVLW 0xFF
  1578. 4740 CFE3 MOVFF PLUSW1, TBLPTRH
  1579. 4742 FFF7 NOP
  1580. 4744 52E5 MOVF POSTDEC1, F, ACCESS
  1581. 4746 0EFF MOVLW 0xFF
  1582. 4748 CFE3 MOVFF PLUSW1, TBLPTRL
  1583. 474A FFF6 NOP
  1584. 474C 52E5 MOVF POSTDEC1, F, ACCESS
  1585. 474E 6AE6 CLRF POSTINC1, ACCESS
  1586. 4750 6AE6 CLRF POSTINC1, ACCESS
  1587. 4752 6AE6 CLRF POSTINC1, ACCESS
  1588. 4754 0009 TBLRD*+
  1589. 4756 52F5 MOVF TABLAT, F, ACCESS
  1590. 4758 E009 BZ jEnd
  1591. 475A 0EFD MOVLW 0xFD
  1592. 475C 2AE3 INCF PLUSW1, F, ACCESS
  1593. 475E E105 BNZ _2jEnd
  1594. 4760 0EFE MOVLW 0xFE
  1595. 4762 2AE3 INCF PLUSW1, F, ACCESS
  1596. 4764 E102 BNZ _2jEnd
  1597. 4766 0EFF MOVLW 0xFF
  1598. 4768 2AE3 INCF PLUSW1, F, ACCESS
  1599. 476A D7F4 BRA jLoop
  1600. 476C 0EFD MOVLW 0xFD
  1601. 476E CFE3 MOVFF PLUSW1, precision
  1602. 4770 F005 NOP
  1603. 4772 0EFE MOVLW 0xFE
  1604. 4774 CFE3 MOVFF PLUSW1, pUEP
  1605. 4776 F006 NOP
  1606. 4778 0EFF MOVLW 0xFF
  1607. 477A CFE3 MOVFF PLUSW1, size
  1608. 477C F007 NOP
  1609. 477E 0012 RETURN 0
  1610. --- C:/MCC18/v3_39/src/traditional/stdclib/putc.c -----------------------------------------------------
  1611. 49E8 CFD9 MOVFF FSR2L, POSTINC1
  1612. 49EA FFE6 NOP
  1613. 49EC CFDA MOVFF FSR2H, POSTINC1
  1614. 49EE FFE6 NOP
  1615. 49F0 CFE1 MOVFF FSR1L, FSR2L
  1616. 49F2 FFD9 NOP
  1617. 49F4 CFE2 MOVFF FSR1H, FSR2H
  1618. 49F6 FFDA NOP
  1619. 49F8 0EFB MOVLW 0xFB
  1620. 49FA CFDB MOVFF PLUSW2, __tmp_0
  1621. 49FC F014 NOP
  1622. 49FE 0EFC MOVLW 0xFC
  1623. 4A00 CFDB MOVFF PLUSW2, digit_cnt
  1624. 4A02 F015 NOP
  1625. 4A04 0100 MOVLB 0x0
  1626. 4A06 0E80 MOVLW 0x80
  1627. 4A08 1415 ANDWF digit_cnt, W, ACCESS
  1628. 4A0A E11A BNZ 0x4A40
  1629. 4A0C 0EFB MOVLW 0xFB
  1630. 4A0E CFDB MOVFF PLUSW2, FSR0L
  1631. 4A10 FFE9 NOP
  1632. 4A12 0EFC MOVLW 0xFC
  1633. 4A14 CFDB MOVFF PLUSW2, FSR0H
  1634. 4A16 FFEA NOP
  1635. 4A18 CFEE MOVFF POSTINC0, PRODL
  1636. 4A1A FFF3 NOP
  1637. 4A1C CFED MOVFF POSTDEC0, PRODH
  1638. 4A1E FFF4 NOP
  1639. 4A20 2AEE INCF POSTINC0, F, ACCESS
  1640. 4A22 0E00 MOVLW 0x0
  1641. 4A24 22EF ADDWFC INDF0, F, ACCESS
  1642. 4A26 CFF3 MOVFF PRODL, FSR0L
  1643. 4A28 FFE9 NOP
  1644. 4A2A CFF4 MOVFF PRODH, FSR0H
  1645. 4A2C FFEA NOP
  1646. 4A2E 0EFD MOVLW 0xFD
  1647. 4A30 CFDB MOVFF PLUSW2, INDF0
  1648. 4A32 FFEF NOP
  1649. 4A34 50EF MOVF INDF0, W, ACCESS
  1650. 4A36 6A15 CLRF digit_cnt, ACCESS
  1651. 4A38 6EF3 MOVWF PRODL, ACCESS
  1652. 4A3A C015 MOVFF digit_cnt, PRODH
  1653. 4A3C FFF4 NOP
  1654. 4A3E D010 BRA 0x4A60
  1655. 4A40 0EFB MOVLW 0xFB
  1656. 4A42 50DB MOVF PLUSW2, W, ACCESS
  1657. 4A44 08FE SUBLW 0xFE
  1658. 4A46 E106 BNZ 0x4A54
  1659. 4A48 0EFD MOVLW 0xFD
  1660. 4A4A CFDB MOVFF PLUSW2, POSTINC1
  1661. 4A4C FFE6 NOP
  1662. 4A4E ECEF CALL 0x4BDE, 0
  1663. 4A50 F025 NOP
  1664. 4A52 D005 BRA 0x4A5E
  1665. 4A54 0EFD MOVLW 0xFD
  1666. 4A56 CFDB MOVFF PLUSW2, POSTINC1
  1667. 4A58 FFE6 NOP
  1668. 4A5A ECEF CALL 0x43DE, 0
  1669. 4A5C F021 NOP
  1670. 4A5E 52E5 MOVF POSTDEC1, F, ACCESS
  1671. 4A60 52E5 MOVF POSTDEC1, F, ACCESS
  1672. 4A62 CFE5 MOVFF POSTDEC1, FSR2H
  1673. 4A64 FFDA NOP
  1674. 4A66 CFE7 MOVFF INDF1, FSR2L
  1675. 4A68 FFD9 NOP
  1676. 4A6A 0012 RETURN 0
  1677. --- C:/MCC18/v3_39/src/traditional/stdclib/printf.c ---------------------------------------------------
  1678. 48C6 CFD9 MOVFF FSR2L, POSTINC1
  1679. 48C8 FFE6 NOP
  1680. 48CA CFDA MOVFF FSR2H, POSTINC1
  1681. 48CC FFE6 NOP
  1682. 48CE CFE1 MOVFF FSR1L, FSR2L
  1683. 48D0 FFD9 NOP
  1684. 48D2 CFE2 MOVFF FSR1H, FSR2H
  1685. 48D4 FFDA NOP
  1686. 48D6 52E6 MOVF POSTINC1, F, ACCESS
  1687. 48D8 52E6 MOVF POSTINC1, F, ACCESS
  1688. 48DA 52E6 MOVF POSTINC1, F, ACCESS
  1689. 48DC 52E6 MOVF POSTINC1, F, ACCESS
  1690. 48DE 50D9 MOVF FSR2L, W, ACCESS
  1691. 48E0 0FFB ADDLW 0xFB
  1692. 48E2 6E14 MOVWF __tmp_0, ACCESS
  1693. 48E4 0EFF MOVLW 0xFF
  1694. 48E6 20DA ADDWFC FSR2H, W, ACCESS
  1695. 48E8 6E15 MOVWF digit_cnt, ACCESS
  1696. 48EA C014 MOVFF __tmp_0, POSTINC2
  1697. 48EC FFDE NOP
  1698. 48EE 6EDD MOVWF POSTDEC2, ACCESS
  1699. 48F0 CFDE MOVFF POSTINC2, POSTINC1
  1700. 48F2 FFE6 NOP
  1701. 48F4 CFDD MOVFF POSTDEC2, POSTINC1
  1702. 48F6 FFE6 NOP
  1703. 48F8 0EFB MOVLW 0xFB
  1704. 48FA CFDB MOVFF PLUSW2, POSTINC1
  1705. 48FC FFE6 NOP
  1706. 48FE 0EFC MOVLW 0xFC
  1707. 4900 CFDB MOVFF PLUSW2, POSTINC1
  1708. 4902 FFE6 NOP
  1709. 4904 0EFD MOVLW 0xFD
  1710. 4906 CFDB MOVFF PLUSW2, POSTINC1
  1711. 4908 FFE6 NOP
  1712. 490A C1FB MOVFF stdout, POSTINC1
  1713. 490C FFE6 NOP
  1714. 490E C1FC MOVFF 0x1FC, POSTINC1
  1715. 4910 FFE6 NOP
  1716. 4912 ECA4 CALL 0x2F48, 0
  1717. 4914 F017 NOP
  1718. 4916 6E14 MOVWF __tmp_0, ACCESS
  1719. 4918 0E07 MOVLW 0x7
  1720. 491A 5CE1 SUBWF FSR1L, W, ACCESS
  1721. 491C E202 BC 0x4922
  1722. 491E 6AE1 CLRF FSR1L, ACCESS
  1723. 4920 52E5 MOVF POSTDEC1, F, ACCESS
  1724. 4922 6EE1 MOVWF FSR1L, ACCESS
  1725. 4924 5014 MOVF __tmp_0, W, ACCESS
  1726. 4926 0E02 MOVLW 0x2
  1727. 4928 CFF3 MOVFF PRODL, PLUSW2
  1728. 492A FFDB NOP
  1729. 492C 0E03 MOVLW 0x3
  1730. 492E CFF4 MOVFF PRODH, PLUSW2
  1731. 4930 FFDB NOP
  1732. 4932 0E02 MOVLW 0x2
  1733. 4934 CFDB MOVFF PLUSW2, __tmp_0
  1734. 4936 F014 NOP
  1735. 4938 0E03 MOVLW 0x3
  1736. 493A CFDB MOVFF PLUSW2, digit_cnt
  1737. 493C F015 NOP
  1738. 493E C014 MOVFF __tmp_0, PRODL
  1739. 4940 FFF3 NOP
  1740. 4942 C015 MOVFF digit_cnt, PRODH
  1741. 4944 FFF4 NOP
  1742. 4946 0E04 MOVLW 0x4
  1743. 4948 5CE1 SUBWF FSR1L, W, ACCESS
  1744. 494A E202 BC 0x4950
  1745. 494C 6AE1 CLRF FSR1L, ACCESS
  1746. 494E 52E5 MOVF POSTDEC1, F, ACCESS
  1747. 4950 6EE1 MOVWF FSR1L, ACCESS
  1748. 4952 52E5 MOVF POSTDEC1, F, ACCESS
  1749. 4954 CFE5 MOVFF POSTDEC1, FSR2H
  1750. 4956 FFDA NOP
  1751. 4958 CFE7 MOVFF INDF1, FSR2L
  1752. 495A FFD9 NOP
  1753. 495C 0012 RETURN 0
  1754. --- C:/MCC18/v3_39/src/traditional/stdclib/memcpy.asm -------------------------------------------------
  1755. 46C4 CFD9 MOVFF FSR2L, POSTINC1
  1756. 46C6 FFE6 NOP
  1757. 46C8 CFDA MOVFF FSR2H, POSTINC1
  1758. 46CA FFE6 NOP
  1759. 46CC 0EFA MOVLW 0xFA
  1760. 46CE CFE3 MOVFF PLUSW1, FSR2L
  1761. 46D0 FFD9 NOP
  1762. 46D2 0EFB MOVLW 0xFB
  1763. 46D4 CFE3 MOVFF PLUSW1, FSR2H
  1764. 46D6 FFDA NOP
  1765. 46D8 0EFC MOVLW 0xFC
  1766. 46DA CFE3 MOVFF PLUSW1, FSR0L
  1767. 46DC FFE9 NOP
  1768. 46DE 0EFD MOVLW 0xFD
  1769. 46E0 CFE3 MOVFF PLUSW1, FSR0H
  1770. 46E2 FFEA NOP
  1771. 46E4 CFE9 MOVFF FSR0L, PRODL
  1772. 46E6 FFF3 NOP
  1773. 46E8 CFEA MOVFF FSR0H, PRODH
  1774. 46EA FFF4 NOP
  1775. 46EC 0EF8 MOVLW 0xF8
  1776. 46EE 50E3 MOVF PLUSW1, W, ACCESS
  1777. 46F0 E103 BNZ _4jContinue
  1778. 46F2 0EF9 MOVLW 0xF9
  1779. 46F4 50E3 MOVF PLUSW1, W, ACCESS
  1780. 46F6 E008 BZ jEnd
  1781. 46F8 0EF8 MOVLW 0xF8
  1782. 46FA 06E3 DECF PLUSW1, F, ACCESS
  1783. 46FC E202 BC _5jEnd
  1784. 46FE 0EF9 MOVLW 0xF9
  1785. 4700 06E3 DECF PLUSW1, F, ACCESS
  1786. 4702 CFDE MOVFF POSTINC2, POSTINC0
  1787. 4704 FFEE NOP
  1788. 4706 D7F2 BRA jLoop
  1789. 4708 0EFF MOVLW 0xFF
  1790. 470A CFE3 MOVFF PLUSW1, FSR2H
  1791. 470C FFDA NOP
  1792. 470E 52E5 MOVF POSTDEC1, F, ACCESS
  1793. 4710 0EFF MOVLW 0xFF
  1794. 4712 CFE3 MOVFF PLUSW1, FSR2L
  1795. 4714 FFD9 NOP
  1796. 4716 52E5 MOVF POSTDEC1, F, ACCESS
  1797. 4718 0012 RETURN 0
  1798. --- C:/MCC18/v3_39/src/traditional/stdclib/isdigit.asm ------------------------------------------------
  1799. 4B7E 6AF3 CLRF PRODL, ACCESS
  1800. 4B80 6AF4 CLRF PRODH, ACCESS
  1801. 4B82 0EFF MOVLW 0xFF
  1802. 4B84 24E1 ADDWF FSR1L, W, ACCESS
  1803. 4B86 6EE9 MOVWF FSR0L, ACCESS
  1804. 4B88 0EFF MOVLW 0xFF
  1805. 4B8A 20E2 ADDWFC FSR1H, W, ACCESS
  1806. 4B8C 6EEA MOVWF FSR0H, ACCESS
  1807. 4B8E 66ED TSTFSZ POSTDEC0, ACCESS
  1808. 4B90 D007 BRA jNoMatch
  1809. 4B92 0E2F MOVLW 0x2F
  1810. 4B94 64EF CPFSGT INDF0, ACCESS
  1811. 4B96 D004 BRA jNoMatch
  1812. 4B98 0E3A MOVLW 0x3A
  1813. 4B9A 60EF CPFSLT INDF0, ACCESS
  1814. 4B9C D001 BRA jNoMatch
  1815. 4B9E 2AF3 INCF PRODL, F, ACCESS
  1816. 4BA0 0012 RETURN 0
  1817. --- C:/MCC18/v3_39/src/traditional/stdclib/__init.c ---------------------------------------------------
  1818. 4C0C 0012 RETURN 0
  1819. --- C:/MCC18/v3_39/src/traditional/startup/c018i.c ----------------------------------------------------
  1820. 0000 EFE1 GOTO 0x4BC2
  1821. 0002 F025 NOP
  1822. 0004 0012 RETURN 0
  1823. 4BC2 EE13 LFSR 1, 0x300
  1824. 4BC4 F000 NOP
  1825. 4BC6 EE23 LFSR 2, 0x300
  1826. 4BC8 F000 NOP
  1827. 4BCA 6AF8 CLRF TBLPTRU, ACCESS
  1828. 4BCC 9C0F BCF 0xF, 6, ACCESS
  1829. 4BCE EC14 CALL 0x4828, 0
  1830. 4BD0 F024 NOP
  1831. 4BD2 EC06 CALL 0x4C0C, 0
  1832. 4BD4 F026 NOP
  1833. 4BD6 EC03 CALL 0x4406, 0
  1834. 4BD8 F022 NOP
  1835. 4BDA D7FB BRA 0x4BD2
  1836. 4BDC 0012 RETURN 0
  1837. 4828 0E2A MOVLW 0x2A
  1838. 482A 6EF6 MOVWF TBLPTRL, ACCESS
  1839. 482C 0E08 MOVLW 0x8
  1840. 482E 6EF7 MOVWF TBLPTRH, ACCESS
  1841. 4830 0E00 MOVLW 0x0
  1842. 4832 6EF8 MOVWF TBLPTRU, ACCESS
  1843. 4834 0100 MOVLB 0x0
  1844. 4836 0009 TBLRD*+
  1845. 4838 50F5 MOVF TABLAT, W, ACCESS
  1846. 483A 6FDE MOVWF curr_entry, BANKED
  1847. 483C 0009 TBLRD*+
  1848. 483E 50F5 MOVF TABLAT, W, ACCESS
  1849. 4840 6FDF MOVWF 0xDF, BANKED
  1850. 4842 E103 BNZ 0x484A
  1851. 4844 67DE TSTFSZ curr_entry, BANKED
  1852. 4846 D001 BRA 0x484A
  1853. 4848 D03D BRA 0x48C4
  1854. 484A 0009 TBLRD*+
  1855. 484C 50F5 MOVF TABLAT, W, ACCESS
  1856. 484E 6FD9 MOVWF prom, BANKED
  1857. 4850 0009 TBLRD*+
  1858. 4852 50F5 MOVF TABLAT, W, ACCESS
  1859. 4854 6FDA MOVWF 0xDA, BANKED
  1860. 4856 0009 TBLRD*+
  1861. 4858 50F5 MOVF TABLAT, W, ACCESS
  1862. 485A 6FDB MOVWF 0xDB, BANKED
  1863. 485C 0009 TBLRD*+
  1864. 485E 0009 TBLRD*+
  1865. 4860 50F5 MOVF TABLAT, W, ACCESS
  1866. 4862 6EE9 MOVWF FSR0L, ACCESS
  1867. 4864 0009 TBLRD*+
  1868. 4866 50F5 MOVF TABLAT, W, ACCESS
  1869. 4868 6EEA MOVWF FSR0H, ACCESS
  1870. 486A 0009 TBLRD*+
  1871. 486C 0009 TBLRD*+
  1872. 486E 0009 TBLRD*+
  1873. 4870 50F5 MOVF TABLAT, W, ACCESS
  1874. 4872 6FDC MOVWF curr_byte, BANKED
  1875. 4874 0009 TBLRD*+
  1876. 4876 50F5 MOVF TABLAT, W, ACCESS
  1877. 4878 6FDD MOVWF 0xDD, BANKED
  1878. 487A 0009 TBLRD*+
  1879. 487C 0009 TBLRD*+
  1880. 487E CFF6 MOVFF TBLPTRL, data_ptr
  1881. 4880 F0E0 NOP
  1882. 4882 CFF7 MOVFF TBLPTRH, 0xE1
  1883. 4884 F0E1 NOP
  1884. 4886 CFF8 MOVFF TBLPTRU, 0xE2
  1885. 4888 F0E2 NOP
  1886. 488A C0D9 MOVFF prom, TBLPTRL
  1887. 488C FFF6 NOP
  1888. 488E C0DA MOVFF 0xDA, TBLPTRH
  1889. 4890 FFF7 NOP
  1890. 4892 C0DB MOVFF 0xDB, TBLPTRU
  1891. 4894 FFF8 NOP
  1892. 4896 0100 MOVLB 0x0
  1893. 4898 53DC MOVF curr_byte, F, BANKED
  1894. 489A E102 BNZ 0x48A0
  1895. 489C 53DD MOVF 0xDD, F, BANKED
  1896. 489E E007 BZ 0x48AE
  1897. 48A0 0009 TBLRD*+
  1898. 48A2 50F5 MOVF TABLAT, W, ACCESS
  1899. 48A4 6EEE MOVWF POSTINC0, ACCESS
  1900. 48A6 07DC DECF curr_byte, F, BANKED
  1901. 48A8 E2F8 BC 0x489A
  1902. 48AA 07DD DECF 0xDD, F, BANKED
  1903. 48AC D7F9 BRA 0x48A0
  1904. 48AE C0E0 MOVFF data_ptr, TBLPTRL
  1905. 48B0 FFF6 NOP
  1906. 48B2 C0E1 MOVFF 0xE1, TBLPTRH
  1907. 48B4 FFF7 NOP
  1908. 48B6 C0E2 MOVFF 0xE2, TBLPTRU
  1909. 48B8 FFF8 NOP
  1910. 48BA 0100 MOVLB 0x0
  1911. 48BC 07DE DECF curr_entry, F, BANKED
  1912. 48BE 0E00 MOVLW 0x0
  1913. 48C0 5BDF SUBWFB 0xDF, F, BANKED
  1914. 48C2 D7BF BRA 0x4842
  1915. 48C4 0012 RETURN 0
  1916. --- C:/MCC18/v3_39/src/traditional/proc/p18F2550.asm --------------------------------------------------
  1917. 4BA2 0E00 MOVLW 0x0
  1918. 4BA4 6EF3 MOVWF PRODL, ACCESS
  1919. 4BA6 EE00 LFSR 0, 0x0
  1920. 4BA8 F000 NOP
  1921. 4BAA 0E08 MOVLW 0x8
  1922. 4BAC D801 RCALL zero_block
  1923. 4BAE 0012 RETURN 0
  1924. 4BB0 60EA CPFSLT FSR0H, ACCESS
  1925. 4BB2 D002 BRA compare_l
  1926. 4BB4 6AEE CLRF POSTINC0, ACCESS
  1927. 4BB6 D7FC BRA zero_block
  1928. 4BB8 50F3 MOVF PRODL, W, ACCESS
  1929. 4BBA 60E9 CPFSLT FSR0L, ACCESS
  1930. 4BBC 0012 RETURN 0
  1931. 4BBE 6AEE CLRF POSTINC0, ACCESS
  1932. 4BC0 D7FC BRA loop_l
  1933. --- C:/MCC18/v3_39/src/traditional/math/fxm3232.c -----------------------------------------------------
  1934. 4A6C 5004 MOVF i, W, ACCESS
  1935. 4A6E 0209 MULWF cval, ACCESS
  1936. 4A70 CFF3 MOVFF PRODL, i
  1937. 4A72 F000 NOP
  1938. 4A74 CFF4 MOVFF PRODH, c
  1939. 4A76 F001 NOP
  1940. 4A78 020A MULWF larg, ACCESS
  1941. 4A7A 50F3 MOVF PRODL, W, ACCESS
  1942. 4A7C 2601 ADDWF c, F, ACCESS
  1943. 4A7E 0E00 MOVLW 0x0
  1944. 4A80 20F4 ADDWFC PRODH, W, ACCESS
  1945. 4A82 6E02 MOVWF c2, ACCESS
  1946. 4A84 5004 MOVF i, W, ACCESS
  1947. 4A86 020B MULWF 0xB, ACCESS
  1948. 4A88 50F3 MOVF PRODL, W, ACCESS
  1949. 4A8A 2602 ADDWF c2, F, ACCESS
  1950. 4A8C 0E00 MOVLW 0x0
  1951. 4A8E 20F4 ADDWFC PRODH, W, ACCESS
  1952. 4A90 6E03 MOVWF n, ACCESS
  1953. 4A92 5004 MOVF i, W, ACCESS
  1954. 4A94 020C MULWF 0xC, ACCESS
  1955. 4A96 50F3 MOVF PRODL, W, ACCESS
  1956. 4A98 2603 ADDWF n, F, ACCESS
  1957. 4A9A 5005 MOVF precision, W, ACCESS
  1958. 4A9C 0209 MULWF cval, ACCESS
  1959. 4A9E 50F3 MOVF PRODL, W, ACCESS
  1960. 4AA0 2601 ADDWF c, F, ACCESS
  1961. 4AA2 50F4 MOVF PRODH, W, ACCESS
  1962. 4AA4 2202 ADDWFC c2, F, ACCESS
  1963. 4AA6 0E00 MOVLW 0x0
  1964. 4AA8 2203 ADDWFC n, F, ACCESS
  1965. 4AAA 5005 MOVF precision, W, ACCESS
  1966. 4AAC 020A MULWF larg, ACCESS
  1967. 4AAE 50F3 MOVF PRODL, W, ACCESS
  1968. 4AB0 2602 ADDWF c2, F, ACCESS
  1969. 4AB2 50F4 MOVF PRODH, W, ACCESS
  1970. 4AB4 2203 ADDWFC n, F, ACCESS
  1971. 4AB6 5005 MOVF precision, W, ACCESS
  1972. 4AB8 020B MULWF 0xB, ACCESS
  1973. 4ABA 50F3 MOVF PRODL, W, ACCESS
  1974. 4ABC 2603 ADDWF n, F, ACCESS
  1975. 4ABE 5006 MOVF pUEP, W, ACCESS
  1976. 4AC0 0209 MULWF cval, ACCESS
  1977. 4AC2 50F3 MOVF PRODL, W, ACCESS
  1978. 4AC4 2602 ADDWF c2, F, ACCESS
  1979. 4AC6 50F4 MOVF PRODH, W, ACCESS
  1980. 4AC8 2203 ADDWFC n, F, ACCESS
  1981. 4ACA 5006 MOVF pUEP, W, ACCESS
  1982. 4ACC 020A MULWF larg, ACCESS
  1983. 4ACE 50F3 MOVF PRODL, W, ACCESS
  1984. 4AD0 2603 ADDWF n, F, ACCESS
  1985. 4AD2 5007 MOVF size, W, ACCESS
  1986. 4AD4 0209 MULWF cval, ACCESS
  1987. 4AD6 50F3 MOVF PRODL, W, ACCESS
  1988. 4AD8 2603 ADDWF n, F, ACCESS
  1989. 4ADA 0012 RETURN 0
  1990. --- C:/MCC18/v3_39/src/traditional/math/fxm1616s.asm --------------------------------------------------
  1991. 4ADC C007 MOVFF size, n
  1992. 4ADE F013 NOP
  1993. 4AE0 C006 MOVFF pUEP, 0x12
  1994. 4AE2 F012 NOP
  1995. 4AE4 5006 MOVF pUEP, W, ACCESS
  1996. 4AE6 020B MULWF 0xB, ACCESS
  1997. 4AE8 CFF4 MOVFF PRODH, precision
  1998. 4AEA F005 NOP
  1999. 4AEC CFF3 MOVFF PRODL, i
  2000. 4AEE F004 NOP
  2001. 4AF0 5007 MOVF size, W, ACCESS
  2002. 4AF2 020C MULWF 0xC, ACCESS
  2003. 4AF4 CFF4 MOVFF PRODH, size
  2004. 4AF6 F007 NOP
  2005. 4AF8 CFF3 MOVFF PRODL, pUEP
  2006. 4AFA F006 NOP
  2007. 4AFC 020B MULWF 0xB, ACCESS
  2008. 4AFE 50F3 MOVF PRODL, W, ACCESS
  2009. 4B00 2605 ADDWF precision, F, ACCESS
  2010. 4B02 50F4 MOVF PRODH, W, ACCESS
  2011. 4B04 2206 ADDWFC pUEP, F, ACCESS
  2012. 4B06 6AE8 CLRF WREG, ACCESS
  2013. 4B08 2207 ADDWFC size, F, ACCESS
  2014. 4B0A 5012 MOVF 0x12, W, ACCESS
  2015. 4B0C 020C MULWF 0xC, ACCESS
  2016. 4B0E 50F3 MOVF PRODL, W, ACCESS
  2017. 4B10 2605 ADDWF precision, F, ACCESS
  2018. 4B12 50F4 MOVF PRODH, W, ACCESS
  2019. 4B14 2206 ADDWFC pUEP, F, ACCESS
  2020. 4B16 6AE8 CLRF WREG, ACCESS
  2021. 4B18 2207 ADDWFC size, F, ACCESS
  2022. 4B1A AE0C BTFSS 0xC, 7, ACCESS
  2023. 4B1C EF94 GOTO 0x4B28
  2024. 4B1E F025 NOP
  2025. 4B20 5012 MOVF 0x12, W, ACCESS
  2026. 4B22 5E06 SUBWF pUEP, F, ACCESS
  2027. 4B24 5013 MOVF n, W, ACCESS
  2028. 4B26 5A07 SUBWFB size, F, ACCESS
  2029. 4B28 AE13 BTFSS n, 7, ACCESS
  2030. 4B2A 0C00 RETLW 0x0
  2031. 4B2C 500B MOVF 0xB, W, ACCESS
  2032. 4B2E 5E06 SUBWF pUEP, F, ACCESS
  2033. 4B30 500C MOVF 0xC, W, ACCESS
  2034. 4B32 5A07 SUBWFB size, F, ACCESS
  2035. 4B34 0C00 RETLW 0x0
  2036. --- C:/MCC18/v3_39/src/traditional/math/fxd3232u.c ----------------------------------------------------
  2037. 4B36 6A03 CLRF n, ACCESS
  2038. 4B38 6A02 CLRF c2, ACCESS
  2039. 4B3A 6A01 CLRF c, ACCESS
  2040. 4B3C 6A00 CLRF i, ACCESS
  2041. 4B3E 0E20 MOVLW 0x20
  2042. 4B40 6EE7 MOVWF INDF1, ACCESS
  2043. 4B42 90D8 BCF STATUS, 0, ACCESS
  2044. 4B44 3604 RLCF i, F, ACCESS
  2045. 4B46 3605 RLCF precision, F, ACCESS
  2046. 4B48 3606 RLCF pUEP, F, ACCESS
  2047. 4B4A 3607 RLCF size, F, ACCESS
  2048. 4B4C 3600 RLCF i, F, ACCESS
  2049. 4B4E 3601 RLCF c, F, ACCESS
  2050. 4B50 3602 RLCF c2, F, ACCESS
  2051. 4B52 3603 RLCF n, F, ACCESS
  2052. 4B54 5009 MOVF cval, W, ACCESS
  2053. 4B56 5C00 SUBWF i, W, ACCESS
  2054. 4B58 500A MOVF larg, W, ACCESS
  2055. 4B5A 5801 SUBWFB c, W, ACCESS
  2056. 4B5C 500B MOVF 0xB, W, ACCESS
  2057. 4B5E 5802 SUBWFB c2, W, ACCESS
  2058. 4B60 500C MOVF 0xC, W, ACCESS
  2059. 4B62 5803 SUBWFB n, W, ACCESS
  2060. 4B64 E309 BNC 0x4B78
  2061. 4B66 5009 MOVF cval, W, ACCESS
  2062. 4B68 5E00 SUBWF i, F, ACCESS
  2063. 4B6A 500A MOVF larg, W, ACCESS
  2064. 4B6C 5A01 SUBWFB c, F, ACCESS
  2065. 4B6E 500B MOVF 0xB, W, ACCESS
  2066. 4B70 5A02 SUBWFB c2, F, ACCESS
  2067. 4B72 500C MOVF 0xC, W, ACCESS
  2068. 4B74 5A03 SUBWFB n, F, ACCESS
  2069. 4B76 2A04 INCF i, F, ACCESS
  2070. 4B78 2EE7 DECFSZ INDF1, F, ACCESS
  2071. 4B7A D7E4 BRA 0x4B44
  2072. 4B7C 0012 RETURN 0
  2073. --- C:/MCC18/v3_39/src/pmc_common/USART/uopen.c -------------------------------------------------------
  2074. 495E CFD9 MOVFF FSR2L, POSTINC1
  2075. 4960 FFE6 NOP
  2076. 4962 CFDA MOVFF FSR2H, POSTINC1
  2077. 4964 FFE6 NOP
  2078. 4966 CFE1 MOVFF FSR1L, FSR2L
  2079. 4968 FFD9 NOP
  2080. 496A CFE2 MOVFF FSR1H, FSR2H
  2081. 496C FFDA NOP
  2082. 496E 6AAC CLRF TXSTA, ACCESS
  2083. 4970 6AAB CLRF RCSTA, ACCESS
  2084. 4972 0EFD MOVLW 0xFD
  2085. 4974 B0DB BTFSC PLUSW2, 0, ACCESS
  2086. 4976 88AC BSF TXSTA, 4, ACCESS
  2087. 4978 A2DB BTFSS PLUSW2, 1, ACCESS
  2088. 497A D002 BRA 0x4980
  2089. 497C 8CAC BSF TXSTA, 6, ACCESS
  2090. 497E 8CAB BSF RCSTA, 6, ACCESS
  2091. 4980 B4DB BTFSC PLUSW2, 2, ACCESS
  2092. 4982 8EAC BSF TXSTA, 7, ACCESS
  2093. 4984 A6DB BTFSS PLUSW2, 3, ACCESS
  2094. 4986 D002 BRA 0x498C
  2095. 4988 88AB BSF RCSTA, 4, ACCESS
  2096. 498A D001 BRA 0x498E
  2097. 498C 8AAB BSF RCSTA, 5, ACCESS
  2098. 498E B8DB BTFSC PLUSW2, 4, ACCESS
  2099. 4990 84AC BSF TXSTA, 2, ACCESS
  2100. 4992 989E BCF PIR1, 4, ACCESS
  2101. 4994 BADB BTFSC PLUSW2, 5, ACCESS
  2102. 4996 86AB BSF RCSTA, 3, ACCESS
  2103. 4998 ACDB BTFSS PLUSW2, 6, ACCESS
  2104. 499A D002 BRA 0x49A0
  2105. 499C 8A9D BSF PIE1, 5, ACCESS
  2106. 499E D001 BRA 0x49A2
  2107. 49A0 9A9D BCF PIE1, 5, ACCESS
  2108. 49A2 9A9E BCF PIR1, 5, ACCESS
  2109. 49A4 AEDB BTFSS PLUSW2, 7, ACCESS
  2110. 49A6 D002 BRA 0x49AC
  2111. 49A8 889D BSF PIE1, 4, ACCESS
  2112. 49AA D001 BRA 0x49AE
  2113. 49AC 989D BCF PIE1, 4, ACCESS
  2114. 49AE 0EFB MOVLW 0xFB
  2115. 49B0 50DB MOVF PLUSW2, W, ACCESS
  2116. 49B2 6EAF MOVWF SPBRG, ACCESS
  2117. 49B4 0EFB MOVLW 0xFB
  2118. 49B6 0EFC MOVLW 0xFC
  2119. 49B8 CFDB MOVFF PLUSW2, digit_cnt
  2120. 49BA F015 NOP
  2121. 49BC C015 MOVFF digit_cnt, __tmp_0
  2122. 49BE F014 NOP
  2123. 49C0 6A15 CLRF digit_cnt, ACCESS
  2124. 49C2 5014 MOVF __tmp_0, W, ACCESS
  2125. 49C4 6EB0 MOVWF SPBRGH, ACCESS
  2126. 49C6 8AAC BSF TXSTA, 5, ACCESS
  2127. 49C8 8EAB BSF RCSTA, 7, ACCESS
  2128. 49CA 9C94 BCF TRISC, 6, ACCESS
  2129. 49CC 8E94 BSF TRISC, 7, ACCESS
  2130. 49CE 50AC MOVF TXSTA, W, ACCESS
  2131. 49D0 0B10 ANDLW 0x10
  2132. 49D2 E004 BZ 0x49DC
  2133. 49D4 50AC MOVF TXSTA, W, ACCESS
  2134. 49D6 0B80 ANDLW 0x80
  2135. 49D8 E101 BNZ 0x49DC
  2136. 49DA 8C94 BSF TRISC, 6, ACCESS
  2137. 49DC 52E5 MOVF POSTDEC1, F, ACCESS
  2138. 49DE CFE5 MOVFF POSTDEC1, FSR2H
  2139. 49E0 FFDA NOP
  2140. 49E2 CFE7 MOVFF INDF1, FSR2L
  2141. 49E4 FFD9 NOP
  2142. 49E6 0012 RETURN 0
  2143. --- C:/MCC18/v3_39/src/pmc_common/USART/_usartpc.asm --------------------------------------------------
  2144. 4BDE 0EFF MOVLW 0xFF
  2145. 4BE0 50E3 MOVF PLUSW1, W, ACCESS
  2146. 4BE2 BAAC BTFSC TXSTA, 5, ACCESS
  2147. 4BE4 D004 BRA loop
  2148. 4BE6 6AAF CLRF SPBRG, ACCESS
  2149. 4BE8 8EAB BSF RCSTA, 7, ACCESS
  2150. 4BEA 8AAC BSF TXSTA, 5, ACCESS
  2151. 4BEC 9C94 BCF TRISC, 6, ACCESS
  2152. 4BEE A2AC BTFSS TXSTA, 1, ACCESS
  2153. 4BF0 D7FE BRA loop
  2154. 4BF2 6EAD MOVWF TXREG, ACCESS
  2155. 4BF4 6EF3 MOVWF PRODL, ACCESS
  2156. 4BF6 6AF4 CLRF PRODH, ACCESS
  2157. 4BF8 0012 RETURN 0
  2158. --- /home/antoine/Documents/Pic/DP_USB/USB_stack/dp_usb/usb_stack.c -----------------------------------
  2159. 1: /*
  2160. 2: This work is licensed under the Creative Commons Attribution 3.0 Unported License.
  2161. 3: To view a copy of this license, visit http://creativecommons.org/licenses/by/3.0/
  2162. 4: or send a letter to
  2163. 5: Creative Commons,
  2164. 6: 171 Second Street,
  2165. 7: Suite 300,
  2166. 8: San Francisco,
  2167. 9: California,
  2168. 10: 94105,
  2169. 11: USA.
  2170. 12:
  2171. 13: Influence and inspiration taken from http://pe.ece.olin.edu/ece/projects.html
  2172. 14: */
  2173. 15:
  2174. 16: // JTR v0.2a Jan 26th 2012
  2175. 17:
  2176. 18:
  2177. 19: #include "../dp_usb/usb_stack_globals.h" // USB stack only defines Not function related.
  2178. 20:
  2179. 21: #if USB_EP0_BUFFER_SIZE == 8u
  2180. 22: #elif USB_EP0_BUFFER_SIZE == 16u
  2181. 23: #elif USB_EP0_BUFFER_SIZE == 32u
  2182. 24: #elif USB_EP0_BUFFER_SIZE == 64u
  2183. 25: #else
  2184. 26: #error "USB_EP0_BUFFER_SIZE needs to be 8, 16, 32 or 64 bytes"
  2185. 27: #endif
  2186. 28:
  2187. 29:
  2188. 30: ROMPTR const BYTE *usb_device_descriptor;
  2189. 31: ROMPTR const BYTE *usb_config_descriptor;
  2190. 32: ROMPTR const BYTE *usb_string_descriptor;
  2191. 33: int usb_num_string_descriptors;
  2192. 34:
  2193. 35: usb_handler_t sof_handler;
  2194. 36: usb_handler_t class_setup_handler, vendor_setup_handler;
  2195. 37:
  2196. 38:
  2197. 39: usb_ep_t endpoints[MAX_CHIP_EP]; // JTR change. MAX_CHIP_EP is the number of hardware endpoints on the silicon. See picusb.h
  2198. 40:
  2199. 41: /* Allocate buffers for buffer description table and the actual buffers */
  2200. 42: // CvD: linkscript puts it in the right memory location
  2201. 43:
  2202. 44:
  2203. 45: // JTR comments. This below goes part way to ridding us of the need for a linker script (PIC18).
  2204. 46: // It floats the EP0 buffers to occupy space immediately behind the buffer descriptors.
  2205. 47: // However there are problems. It only works for the EP0 buffers because they are the only
  2206. 48: // buffers defined in this block. It is not possible to do arithmatic within a #pragma
  2207. 49: // therefore there seems to be no way to cause EPs in other blocks to float.
  2208. 50: // All the buffers would need to be defined here and this would break the universal nature
  2209. 51: // of this module. As such efforts to create a custom linker script free stack have been
  2210. 52: // put on hold for now but can be revisited at any stage.
  2211. 53: // Please see http://dangerousprototypes.com/forum/viewtopic.php?f=39&t=1651&start=120#p17401
  2212. 54:
  2213. 55: #if defined(PIC_18F)
  2214. 56: #pragma udata usb_bdt
  2215. 57: BDentry usb_bdt[2 + 2 * MAX_EPNUM_USED]; // JTR changed index from 32 to variable
  2216. 58: #pragma udata usb_data
  2217. 59: //* Only claim buffer for ep 0 */
  2218. 60: #if USB_PP_BUF_MODE == 0
  2219. 61: BYTE usb_ep0_out_buf[USB_EP0_BUFFER_SIZE];
  2220. 62: BYTE usb_ep0_in_buf[USB_EP0_BUFFER_SIZE];
  2221. 63: #else
  2222. 64: #error "Ping pong buffer not implemented yet!"
  2223. 65: #endif
  2224. 66:
  2225. 67: #elif defined(PIC_24F)
  2226. 68: #pragma udata usb_bdt
  2227. 69: BDentry usb_bdt[2 + 2 * MAX_EPNUM_USED] __attribute__((aligned(512))); // JTR changed index from 32 to variable TODO: Dynamic allocation reflecting number of used endpoints. (How to do counting in preprocessor?)
  2228. 70: #if USB_PP_BUF_MODE == 0
  2229. 71: BYTE usb_ep0_out_buf[USB_EP0_BUFFER_SIZE];
  2230. 72: BYTE usb_ep0_in_buf[USB_EP0_BUFFER_SIZE];
  2231. 73: #else
  2232. 74: #error "Ping pong buffer not implemented yet!"
  2233. 75: #endif
  2234. 76: #endif
  2235. 77:
  2236. 78: #pragma udata
  2237. 79: unsigned int usb_device_status;
  2238. 80: unsigned int usb_current_cfg;
  2239. 81: volatile BYTE usb_device_state;
  2240. 82: BYTE usb_addr_pending;
  2241. 83: BYTE trn_status; // Global since it is needed everywere
  2242. 84: BDentry *EP0_Outbdp, *EP0_Inbdp; // Dito
  2243. 85: BYTE IsSuspended = 0;
  2244. 86: ROMPTR const BYTE *usb_rom_ptr;
  2245. 87: size_t usb_rom_len;
  2246. 88: volatile BYTE usbrequesterrorflag;
  2247. 89:
  2248. 90: void usb_init(ROMPTR const BYTE *device_descriptor,
  2249. 1D2E CFD9 MOVFF FSR2L, POSTINC1
  2250. 1D30 FFE6 NOP
  2251. 1D32 CFE1 MOVFF FSR1L, FSR2L
  2252. 1D34 FFD9 NOP
  2253. 91: ROMPTR const BYTE *config_descriptor,
  2254. 92: ROMPTR const BYTE *string_descriptor,
  2255. 93: int num_string_descriptors) {
  2256. 94:
  2257. 95: usb_device_descriptor = device_descriptor;
  2258. 1D36 0EFC MOVLW 0xFC
  2259. 1D38 CFDB MOVFF PLUSW2, usb_device_descriptor
  2260. 1D3A F060 NOP
  2261. 1D3C 0EFD MOVLW 0xFD
  2262. 1D3E CFDB MOVFF PLUSW2, 0x61
  2263. 1D40 F061 NOP
  2264. 1D42 0EFE MOVLW 0xFE
  2265. 1D44 CFDB MOVFF PLUSW2, 0x62
  2266. 1D46 F062 NOP
  2267. 96: usb_config_descriptor = config_descriptor;
  2268. 1D48 0EF9 MOVLW 0xF9
  2269. 1D4A CFDB MOVFF PLUSW2, usb_config_descriptor
  2270. 1D4C F063 NOP
  2271. 1D4E 0EFA MOVLW 0xFA
  2272. 1D50 CFDB MOVFF PLUSW2, 0x64
  2273. 1D52 F064 NOP
  2274. 1D54 0EFB MOVLW 0xFB
  2275. 1D56 CFDB MOVFF PLUSW2, 0x65
  2276. 1D58 F065 NOP
  2277. 97: usb_string_descriptor = string_descriptor;
  2278. 1D5A 0EF6 MOVLW 0xF6
  2279. 1D5C CFDB MOVFF PLUSW2, usb_string_descriptor
  2280. 1D5E F066 NOP
  2281. 1D60 0EF7 MOVLW 0xF7
  2282. 1D62 CFDB MOVFF PLUSW2, 0x67
  2283. 1D64 F067 NOP
  2284. 1D66 0EF8 MOVLW 0xF8
  2285. 1D68 CFDB MOVFF PLUSW2, 0x68
  2286. 1D6A F068 NOP
  2287. 98: usb_num_string_descriptors = num_string_descriptors;
  2288. 1D6C 0EF4 MOVLW 0xF4
  2289. 1D6E CFDB MOVFF PLUSW2, usb_num_string_descriptors
  2290. 1D70 F069 NOP
  2291. 1D72 0EF5 MOVLW 0xF5
  2292. 1D74 CFDB MOVFF PLUSW2, 0x6A
  2293. 1D76 F06A NOP
  2294. 99: sof_handler = NULL;
  2295. 1D78 0100 MOVLB 0x0
  2296. 1D7A 6B6B CLRF sof_handler, BANKED
  2297. 1D7C 6B6C CLRF 0x6C, BANKED
  2298. 100: class_setup_handler = NULL;
  2299. 1D7E 0100 MOVLB 0x0
  2300. 1D80 6B6D CLRF class_setup_handler, BANKED
  2301. 1D82 6B6E CLRF 0x6E, BANKED
  2302. 101: vendor_setup_handler = NULL;
  2303. 1D84 0100 MOVLB 0x0
  2304. 1D86 6B6F CLRF vendor_setup_handler, BANKED
  2305. 1D88 6B70 CLRF 0x70, BANKED
  2306. 102: usb_unset_in_handler(0);
  2307. 1D8A 0E00 MOVLW 0x0
  2308. 1D8C 6EE6 MOVWF POSTINC1, ACCESS
  2309. 1D8E 6AE6 CLRF POSTINC1, ACCESS
  2310. 1D90 0E00 MOVLW 0x0
  2311. 1D92 6EE6 MOVWF POSTINC1, ACCESS
  2312. 1D94 6AE6 CLRF POSTINC1, ACCESS
  2313. 1D96 EC58 CALL 0x2CB0, 0
  2314. 1D98 F016 NOP
  2315. 1D9A 52E5 MOVF POSTDEC1, F, ACCESS
  2316. 1D9C 52E5 MOVF POSTDEC1, F, ACCESS
  2317. 1D9E 52E5 MOVF POSTDEC1, F, ACCESS
  2318. 1DA0 52E5 MOVF POSTDEC1, F, ACCESS
  2319. 103: usb_unset_out_handler(0);
  2320. 1DA2 0E00 MOVLW 0x0
  2321. 1DA4 6EE6 MOVWF POSTINC1, ACCESS
  2322. 1DA6 6AE6 CLRF POSTINC1, ACCESS
  2323. 1DA8 0E00 MOVLW 0x0
  2324. 1DAA 6EE6 MOVWF POSTINC1, ACCESS
  2325. 1DAC 6AE6 CLRF POSTINC1, ACCESS
  2326. 1DAE EC76 CALL 0x2CEC, 0
  2327. 1DB0 F016 NOP
  2328. 1DB2 52E5 MOVF POSTDEC1, F, ACCESS
  2329. 1DB4 52E5 MOVF POSTDEC1, F, ACCESS
  2330. 1DB6 52E5 MOVF POSTDEC1, F, ACCESS
  2331. 1DB8 52E5 MOVF POSTDEC1, F, ACCESS
  2332. 104: ClearUSBtoDefault();
  2333. 1DBA D821 RCALL ClearUSBtoDefault
  2334. 105: ConfigureUsbHardware();
  2335. 1DBC 0E14 MOVLW 0x14
  2336. 1DBE 6E6F MOVWF UCFG, ACCESS
  2337. 106: EnablePacketTransfer();
  2338. 1DC0 986D BCF UCON, 4, ACCESS
  2339. 107: }
  2340. 1DC2 52E5 MOVF POSTDEC1, F, ACCESS
  2341. 1DC4 CFE7 MOVFF INDF1, FSR2L
  2342. 1DC6 FFD9 NOP
  2343. 1DC8 0012 RETURN 0
  2344. 108:
  2345. 109: void usb_start(void) {
  2346. 110: EnableUsb(); // Enable USB-hardware
  2347. 1DCA 866D BSF UCON, 3, ACCESS
  2348. 111: usb_device_state = ATTACHED_STATE;
  2349. 1DCC 0100 MOVLB 0x0
  2350. 1DCE 0E01 MOVLW 0x1
  2351. 1DD0 6FB5 MOVWF usb_device_state, BANKED
  2352. 112: while (SingleEndedZeroIsSet()); // Busywait for initial power-up
  2353. 1DD2 BA6D BTFSC UCON, 5, ACCESS
  2354. 1DD4 D7FE BRA 0x1DD2
  2355. 113: usb_device_state = DEFAULT_STATE; //JTR2
  2356. 1DD6 0100 MOVLB 0x0
  2357. 1DD8 0E04 MOVLW 0x4
  2358. 1DDA 6FB5 MOVWF usb_device_state, BANKED
  2359. 114: }
  2360. 1DDC 0012 RETURN 0
  2361. 115:
  2362. 116: void usb_handle_error(void) {
  2363. 117: /* No errorhandler for now, just clear offending flag*/
  2364. 118: ClearAllUsbErrorInterruptFlags();
  2365. 1DDE 6A6A CLRF UEIR, ACCESS
  2366. 119: }
  2367. 1DE0 0012 RETURN 0
  2368. 120:
  2369. 121: void usb_handle_reset(void) {
  2370. 122: do {
  2371. 123: ClearUsbInterruptFlag(USB_TRN); // JTR corrected Must poll TRN Flag and clear, then wait 6 cycles. for next flag set.
  2372. 1DE2 9668 BCF UIR, 3, ACCESS
  2373. 124: usb_current_cfg = 0;
  2374. 1DE4 0100 MOVLB 0x0
  2375. 1DE6 6BB3 CLRF usb_current_cfg, BANKED
  2376. 1DE8 6BB4 CLRF 0xB4, BANKED
  2377. 125: usb_device_state = DEFAULT_STATE; // This BLOCK creates the requied 6 cycle delay for TRNF to reassert.
  2378. 1DEA 0100 MOVLB 0x0
  2379. 1DEC 0E04 MOVLW 0x4
  2380. 1DEE 6FB5 MOVWF usb_device_state, BANKED
  2381. 126: usb_addr_pending = 0x00;
  2382. 1DF0 0100 MOVLB 0x0
  2383. 1DF2 6BB6 CLRF usb_addr_pending, BANKED
  2384. 127: } while (USB_TRANSACTION_FLAG);
  2385. 1DF4 B668 BTFSC UIR, 3, ACCESS
  2386. 1DF6 D7F5 BRA usb_handle_reset
  2387. 128:
  2388. 129: ClearUSBtoDefault();
  2389. 1DF8 D802 RCALL ClearUSBtoDefault
  2390. 130: EnablePacketTransfer();
  2391. 1DFA 986D BCF UCON, 4, ACCESS
  2392. 131: }
  2393. 1DFC 0012 RETURN 0
  2394. 132:
  2395. 133: void ClearUSBtoDefault(void) {
  2396. 1DFE CFD9 MOVFF FSR2L, POSTINC1
  2397. 1E00 FFE6 NOP
  2398. 1E02 CFE1 MOVFF FSR1L, FSR2L
  2399. 1E04 FFD9 NOP
  2400. 1E06 0E02 MOVLW 0x2
  2401. 1E08 26E1 ADDWF FSR1L, F, ACCESS
  2402. 134: int i;
  2403. 135: sof_handler = NULL;
  2404. 1E0A 0100 MOVLB 0x0
  2405. 1E0C 6B6B CLRF sof_handler, BANKED
  2406. 1E0E 6B6C CLRF 0x6C, BANKED
  2407. 136: class_setup_handler = NULL;
  2408. 1E10 0100 MOVLB 0x0
  2409. 1E12 6B6D CLRF class_setup_handler, BANKED
  2410. 1E14 6B6E CLRF 0x6E, BANKED
  2411. 137: vendor_setup_handler = NULL;
  2412. 1E16 0100 MOVLB 0x0
  2413. 1E18 6B6F CLRF vendor_setup_handler, BANKED
  2414. 1E1A 6B70 CLRF 0x70, BANKED
  2415. 138:
  2416. 139: SetUsbAddress(0); // After reset we don't have an address
  2417. 1E1C 6A6E CLRF UADDR, ACCESS
  2418. 140: ResetPPbuffers();
  2419. 1E1E 8C6D BSF UCON, 6, ACCESS
  2420. 1E20 9C6D BCF UCON, 6, ACCESS
  2421. 141: ClearAllUsbErrorInterruptFlags();
  2422. 1E22 6A6A CLRF UEIR, ACCESS
  2423. 142:
  2424. 143: for (i = 0; i < MAX_CHIP_EP; i++) {
  2425. 1E24 6ADE CLRF POSTINC2, ACCESS
  2426. 1E26 6ADD CLRF POSTDEC2, ACCESS
  2427. 1E28 CFDE MOVFF POSTINC2, __tmp_0
  2428. 1E2A F014 NOP
  2429. 1E2C CFDD MOVFF POSTDEC2, digit_cnt
  2430. 1E2E F015 NOP
  2431. 1E30 90D8 BCF STATUS, 0, ACCESS
  2432. 1E32 5015 MOVF digit_cnt, W, ACCESS
  2433. 1E34 E604 BN 0x1E3E
  2434. 1E36 0E10 MOVLW 0x10
  2435. 1E38 5C14 SUBWF __tmp_0, W, ACCESS
  2436. 1E3A 0E00 MOVLW 0x0
  2437. 1E3C 5815 SUBWFB digit_cnt, W, ACCESS
  2438. 1E3E E232 BC 0x1EA4
  2439. 1E9A 2ADF INCF INDF2, F, ACCESS
  2440. 1E9C 0E01 MOVLW 0x1
  2441. 1E9E E301 BNC 0x1EA2
  2442. 1EA0 2ADB INCF PLUSW2, F, ACCESS
  2443. 1EA2 D7C2 BRA 0x1E28
  2444. 144: endpoints[i].out_handler = NULL;
  2445. 1E40 CFDE MOVFF POSTINC2, FSR0L
  2446. 1E42 FFE9 NOP
  2447. 1E44 CFDD MOVFF POSTDEC2, FSR0H
  2448. 1E46 FFEA NOP
  2449. 1E48 90D8 BCF STATUS, 0, ACCESS
  2450. 1E4A 36E9 RLCF FSR0L, F, ACCESS
  2451. 1E4C 36EA RLCF FSR0H, F, ACCESS
  2452. 1E4E 90D8 BCF STATUS, 0, ACCESS
  2453. 1E50 36E9 RLCF FSR0L, F, ACCESS
  2454. 1E52 36EA RLCF FSR0H, F, ACCESS
  2455. 1E54 0E71 MOVLW 0x71
  2456. 1E56 26E9 ADDWF FSR0L, F, ACCESS
  2457. 1E58 0E00 MOVLW 0x0
  2458. 1E5A 22EA ADDWFC FSR0H, F, ACCESS
  2459. 1E5C 0E02 MOVLW 0x2
  2460. 1E5E 26E9 ADDWF FSR0L, F, ACCESS
  2461. 1E60 0E00 MOVLW 0x0
  2462. 1E62 22EA ADDWFC FSR0H, F, ACCESS
  2463. 1E64 6AEE CLRF POSTINC0, ACCESS
  2464. 1E66 6AED CLRF POSTDEC0, ACCESS
  2465. 145: endpoints[i].in_handler = NULL;
  2466. 1E68 CFDE MOVFF POSTINC2, FSR0L
  2467. 1E6A FFE9 NOP
  2468. 1E6C CFDD MOVFF POSTDEC2, FSR0H
  2469. 1E6E FFEA NOP
  2470. 1E70 90D8 BCF STATUS, 0, ACCESS
  2471. 1E72 36E9 RLCF FSR0L, F, ACCESS
  2472. 1E74 36EA RLCF FSR0H, F, ACCESS
  2473. 1E76 90D8 BCF STATUS, 0, ACCESS
  2474. 1E78 36E9 RLCF FSR0L, F, ACCESS
  2475. 1E7A 36EA RLCF FSR0H, F, ACCESS
  2476. 1E7C 0E71 MOVLW 0x71
  2477. 1E7E 26E9 ADDWF FSR0L, F, ACCESS
  2478. 1E80 0E00 MOVLW 0x0
  2479. 1E82 22EA ADDWFC FSR0H, F, ACCESS
  2480. 1E84 6AEE CLRF POSTINC0, ACCESS
  2481. 1E86 6AED CLRF POSTDEC0, ACCESS
  2482. 146: USB_UEP[i] = 0;
  2483. 1E88 CFDE MOVFF POSTINC2, FSR0L
  2484. 1E8A FFE9 NOP
  2485. 1E8C CFDD MOVFF POSTDEC2, FSR0H
  2486. 1E8E FFEA NOP
  2487. 1E90 0E70 MOVLW 0x70
  2488. 1E92 26E9 ADDWF FSR0L, F, ACCESS
  2489. 1E94 0E0F MOVLW 0xF
  2490. 1E96 22EA ADDWFC FSR0H, F, ACCESS
  2491. 1E98 6AEF CLRF INDF0, ACCESS
  2492. 147: }
  2493. 148:
  2494. 149: for (i = 0; i < (2 + 2 * MAX_EPNUM_USED); i++) {
  2495. 1EA4 6ADE CLRF POSTINC2, ACCESS
  2496. 1EA6 6ADD CLRF POSTDEC2, ACCESS
  2497. 1EA8 CFDE MOVFF POSTINC2, __tmp_0
  2498. 1EAA F014 NOP
  2499. 1EAC CFDD MOVFF POSTDEC2, digit_cnt
  2500. 1EAE F015 NOP
  2501. 1EB0 90D8 BCF STATUS, 0, ACCESS
  2502. 1EB2 5015 MOVF digit_cnt, W, ACCESS
  2503. 1EB4 E604 BN 0x1EBE
  2504. 1EB6 0E06 MOVLW 0x6
  2505. 1EB8 5C14 SUBWF __tmp_0, W, ACCESS
  2506. 1EBA 0E00 MOVLW 0x0
  2507. 1EBC 5815 SUBWFB digit_cnt, W, ACCESS
  2508. 1EBE E214 BC 0x1EE8
  2509. 1EDE 2ADF INCF INDF2, F, ACCESS
  2510. 1EE0 0E01 MOVLW 0x1
  2511. 1EE2 E301 BNC 0x1EE6
  2512. 1EE4 2ADB INCF PLUSW2, F, ACCESS
  2513. 1EE6 D7E0 BRA 0x1EA8
  2514. 150: usb_bdt[i].BDSTAT = 0;
  2515. 1EC0 CFDE MOVFF POSTINC2, FSR0L
  2516. 1EC2 FFE9 NOP
  2517. 1EC4 CFDD MOVFF POSTDEC2, FSR0H
  2518. 1EC6 FFEA NOP
  2519. 1EC8 90D8 BCF STATUS, 0, ACCESS
  2520. 1ECA 36E9 RLCF FSR0L, F, ACCESS
  2521. 1ECC 36EA RLCF FSR0H, F, ACCESS
  2522. 1ECE 90D8 BCF STATUS, 0, ACCESS
  2523. 1ED0 36E9 RLCF FSR0L, F, ACCESS
  2524. 1ED2 36EA RLCF FSR0H, F, ACCESS
  2525. 1ED4 0E00 MOVLW 0x0
  2526. 1ED6 26E9 ADDWF FSR0L, F, ACCESS
  2527. 1ED8 0E04 MOVLW 0x4
  2528. 1EDA 22EA ADDWFC FSR0H, F, ACCESS
  2529. 1EDC 6AEF CLRF INDF0, ACCESS
  2530. 151: }
  2531. 152:
  2532. 153: USB_UEP0 = USB_EP_CONTROL; // Configure Only ep0 At this point.
  2533. 1EE8 0E16 MOVLW 0x16
  2534. 1EEA 6E70 MOVWF UEP0, ACCESS
  2535. 154: //usbrequesterrorflag = 0;
  2536. 155:
  2537. 156: #ifdef USB_SELF_POWERED
  2538. 157:
  2539. 158: // JTR TODO this isn't actually 100% correct. "usb_device_status" is a runtime variable
  2540. 159: // In the case of a bus powered device it will always be 0x000 but in the case of
  2541. 160: // self powered with bus powered option it becames variable to the current powered
  2542. 161: // State. This is a minor thing and for now but it may need to be addressed if there is
  2543. 162: // any hardware that is dual powered.
  2544. 163:
  2545. 164: usb_device_status = 0x0001;
  2546. 165: #else
  2547. 166: usb_device_status = 0x0000;
  2548. 1EEC 0100 MOVLB 0x0
  2549. 1EEE 6BB1 CLRF usb_device_status, BANKED
  2550. 1EF0 6BB2 CLRF 0xB2, BANKED
  2551. 167: #endif
  2552. 168: usb_device_state = DETACHED_STATE; // JTR added flag byte for enumeration state
  2553. 1EF2 0100 MOVLB 0x0
  2554. 1EF4 6BB5 CLRF usb_device_state, BANKED
  2555. 169: usb_current_cfg = 0; // JTR formally usb_configured
  2556. 1EF6 0100 MOVLB 0x0
  2557. 1EF8 6BB3 CLRF usb_current_cfg, BANKED
  2558. 1EFA 6BB4 CLRF 0xB4, BANKED
  2559. 170: usb_addr_pending = 0x00;
  2560. 1EFC 0100 MOVLB 0x0
  2561. 1EFE 6BB6 CLRF usb_addr_pending, BANKED
  2562. 171:
  2563. 172: #if USB_PP_BUF_MODE == NO_PINGPONG
  2564. 173: usb_bdt[USB_CALC_BD(0, USB_DIR_OUT, USB_PP_EVEN)].BDCNT = USB_EP0_BUFFER_SIZE; // JTR endpoints[0].buffer_size; same thing done more obviously
  2565. 1F00 0104 MOVLB 0x4
  2566. 1F02 0E08 MOVLW 0x8
  2567. 1F04 6F01 MOVWF c, BANKED
  2568. 174: usb_bdt[USB_CALC_BD(0, USB_DIR_OUT, USB_PP_EVEN)].BDADDR = usb_ep0_out_buf; //endpoints[0].out_buffer;
  2569. 1F06 0104 MOVLB 0x4
  2570. 1F08 0E8A MOVLW 0x8A
  2571. 1F0A 6F02 MOVWF c2, BANKED
  2572. 1F0C 0E04 MOVLW 0x4
  2573. 1F0E 6F03 MOVWF n, BANKED
  2574. 175: usb_bdt[USB_CALC_BD(0, USB_DIR_OUT, USB_PP_EVEN)].BDSTAT = UOWN + DTSEN;
  2575. 1F10 0104 MOVLB 0x4
  2576. 1F12 0E88 MOVLW 0x88
  2577. 1F14 6F00 MOVWF i, BANKED
  2578. 176: usb_bdt[USB_CALC_BD(0, USB_DIR_IN, USB_PP_EVEN)].BDCNT = 0;
  2579. 1F16 0104 MOVLB 0x4
  2580. 1F18 6B05 CLRF precision, BANKED
  2581. 177: usb_bdt[USB_CALC_BD(0, USB_DIR_IN, USB_PP_EVEN)].BDADDR = usb_ep0_in_buf; //endpoints[0].in_buffer;
  2582. 1F1A 0104 MOVLB 0x4
  2583. 1F1C 0E92 MOVLW 0x92
  2584. 1F1E 6F06 MOVWF pUEP, BANKED
  2585. 1F20 0E04 MOVLW 0x4
  2586. 1F22 6F07 MOVWF size, BANKED
  2587. 178: usb_bdt[USB_CALC_BD(0, USB_DIR_IN, USB_PP_EVEN)].BDSTAT = DTS + DTSEN; // Set DTS => First packet inverts, ie. is Data0
  2588. 1F24 0104 MOVLB 0x4
  2589. 1F26 0E48 MOVLW 0x48
  2590. 1F28 6F04 MOVWF i, BANKED
  2591. 179: #else
  2592. 180: #error "Invalid PING_PONG mode"
  2593. 181: #endif
  2594. 182: }
  2595. 1F2A 0E02 MOVLW 0x2
  2596. 1F2C 5CE1 SUBWF FSR1L, W, ACCESS
  2597. 1F2E E202 BC 0x1F34
  2598. 1F30 6AE1 CLRF FSR1L, ACCESS
  2599. 1F32 52E5 MOVF POSTDEC1, F, ACCESS
  2600. 1F34 6EE1 MOVWF FSR1L, ACCESS
  2601. 1F36 52E5 MOVF POSTDEC1, F, ACCESS
  2602. 1F38 CFE7 MOVFF INDF1, FSR2L
  2603. 1F3A FFD9 NOP
  2604. 1F3C 0012 RETURN 0
  2605. 183:
  2606. 184: void usb_handler(void) {
  2607. 185:
  2608. 186: if (USB_IDLE_FLAG) {
  2609. 1F3E A868 BTFSS UIR, 4, ACCESS
  2610. 1F40 D003 BRA 0x1F48
  2611. 187: /* Idle - suspend */
  2612. 188: USBSuspend(); // // Must be defined in user code.
  2613. 1F42 ECCE CALL 0x459C, 0
  2614. 1F44 F022 NOP
  2615. 189: ClearUsbInterruptFlag(USB_IDLE);
  2616. 1F46 9868 BCF UIR, 4, ACCESS
  2617. 190: }
  2618. 191:
  2619. 192: if (USB_RESET_FLAG) {
  2620. 1F48 A068 BTFSS UIR, 0, ACCESS
  2621. 1F4A D002 BRA 0x1F50
  2622. 193: usb_handle_reset();
  2623. 1F4C DF4A RCALL usb_handle_reset
  2624. 194: ClearUsbInterruptFlag(USB_URST);
  2625. 1F4E 9068 BCF UIR, 0, ACCESS
  2626. 195: }
  2627. 196: if (USB_ERROR_FLAG) {
  2628. 1F50 A268 BTFSS UIR, 1, ACCESS
  2629. 1F52 D002 BRA 0x1F58
  2630. 197: // usb_handle_error();
  2631. 198: ClearAllUsbErrorInterruptFlags();
  2632. 1F54 6A6A CLRF UEIR, ACCESS
  2633. 199: ClearUsbInterruptFlag(USB_UERR);
  2634. 1F56 9268 BCF UIR, 1, ACCESS
  2635. 200: }
  2636. 201: if (USB_STALL_FLAG) {
  2637. 1F58 BA68 BTFSC UIR, 5, ACCESS
  2638. 202: ClearUsbInterruptFlag(USB_STALL);
  2639. 1F5A 9A68 BCF UIR, 5, ACCESS
  2640. 203: }
  2641. 204: if (USB_SOF_FLAG) {
  2642. 1F5C AC68 BTFSS UIR, 6, ACCESS
  2643. 1F5E D00C BRA 0x1F78
  2644. 205: /* Start-of-frame */
  2645. 206: if (sof_handler) sof_handler();
  2646. 1F60 0100 MOVLB 0x0
  2647. 1F62 516B MOVF sof_handler, W, BANKED
  2648. 1F64 116C IORWF 0x6C, W, BANKED
  2649. 1F66 E007 BZ 0x1F76
  2650. 1F68 D005 BRA 0x1F74
  2651. 1F6A C06C MOVFF 0x6C, PCLATH
  2652. 1F6C FFFA NOP
  2653. 1F6E 0100 MOVLB 0x0
  2654. 1F70 516B MOVF sof_handler, W, BANKED
  2655. 1F72 6EF9 MOVWF PCL, ACCESS
  2656. 1F74 DFFA RCALL 0x1F6A
  2657. 207: ClearUsbInterruptFlag(USB_SOF);
  2658. 1F76 9C68 BCF UIR, 6, ACCESS
  2659. 208: }
  2660. 209:
  2661. 210: if (USB_TRANSACTION_FLAG) {
  2662. 1F78 A668 BTFSS UIR, 3, ACCESS
  2663. 1F7A D009 BRA 0x1F8E
  2664. 211: if (!USB_STAT2EP(GetUsbTransaction()))
  2665. 1F7C 506C MOVF USTAT, W, ACCESS
  2666. 1F7E 40E8 RRNCF WREG, W, ACCESS
  2667. 1F80 40E8 RRNCF WREG, W, ACCESS
  2668. 1F82 40E8 RRNCF WREG, W, ACCESS
  2669. 1F84 0B1F ANDLW 0x1F
  2670. 1F86 0B0F ANDLW 0xF
  2671. 1F88 E101 BNZ 0x1F8C
  2672. 212: usb_handle_transaction(); // Only handle EP0 transactions.
  2673. 1F8A D802 RCALL usb_handle_transaction
  2674. 213: ClearUsbInterruptFlag(USB_TRN); // JTR Missing! This is why Ian was only getting one interrupt??
  2675. 1F8C 9668 BCF UIR, 3, ACCESS
  2676. 214: } // Side effect: advance USTAT Fifo
  2677. 215: }
  2678. 1F8E 0012 RETURN 0
  2679. 216:
  2680. 217: void usb_handle_transaction(void) {
  2681. 218:
  2682. 219: usbrequesterrorflag = 0;
  2683. 1F90 0100 MOVLB 0x0
  2684. 1F92 6BC1 CLRF usbrequesterrorflag, BANKED
  2685. 220:
  2686. 221: trn_status = GetUsbTransaction();
  2687. 1F94 CF6C MOVFF USTAT, trn_status
  2688. 1F96 F0B7 NOP
  2689. 222: EP0_Outbdp = &usb_bdt[USB_USTAT2BD(trn_status)];
  2690. 1F98 0100 MOVLB 0x0
  2691. 1F9A 51B7 MOVF trn_status, W, BANKED
  2692. 1F9C 0BFC ANDLW 0xFC
  2693. 1F9E 42E8 RRNCF WREG, F, ACCESS
  2694. 1FA0 42E8 RRNCF WREG, F, ACCESS
  2695. 1FA2 0D04 MULLW 0x4
  2696. 1FA4 CFF3 MOVFF PRODL, EP0_Outbdp
  2697. 1FA6 F0B8 NOP
  2698. 1FA8 CFF4 MOVFF PRODH, 0xB9
  2699. 1FAA F0B9 NOP
  2700. 1FAC 0E00 MOVLW 0x0
  2701. 1FAE 0100 MOVLB 0x0
  2702. 1FB0 27B8 ADDWF EP0_Outbdp, F, BANKED
  2703. 1FB2 0E04 MOVLW 0x4
  2704. 1FB4 0100 MOVLB 0x0
  2705. 1FB6 23B9 ADDWFC 0xB9, F, BANKED
  2706. 223: EP0_Inbdp = &usb_bdt[USB_USTAT2BD(trn_status | DIRBIT)]; // All replies in IN direction
  2707. 1FB8 0E04 MOVLW 0x4
  2708. 1FBA 0100 MOVLB 0x0
  2709. 1FBC 11B7 IORWF trn_status, W, BANKED
  2710. 1FBE 0BFC ANDLW 0xFC
  2711. 1FC0 42E8 RRNCF WREG, F, ACCESS
  2712. 1FC2 42E8 RRNCF WREG, F, ACCESS
  2713. 1FC4 0D04 MULLW 0x4
  2714. 1FC6 CFF3 MOVFF PRODL, EP0_Inbdp
  2715. 1FC8 F0BA NOP
  2716. 1FCA CFF4 MOVFF PRODH, 0xBB
  2717. 1FCC F0BB NOP
  2718. 1FCE 0E00 MOVLW 0x0
  2719. 1FD0 0100 MOVLB 0x0
  2720. 1FD2 27BA ADDWF EP0_Inbdp, F, BANKED
  2721. 1FD4 0E04 MOVLW 0x4
  2722. 1FD6 0100 MOVLB 0x0
  2723. 1FD8 23BB ADDWFC 0xBB, F, BANKED
  2724. 224:
  2725. 225: switch (EP0_Outbdp->BDSTAT & USB_TOKEN_Mask) {
  2726. 1FDA C0B8 MOVFF EP0_Outbdp, FSR0L
  2727. 1FDC FFE9 NOP
  2728. 1FDE C0B9 MOVFF 0xB9, FSR0H
  2729. 1FE0 FFEA NOP
  2730. 1FE2 50EF MOVF INDF0, W, ACCESS
  2731. 1FE4 0B3C ANDLW 0x3C
  2732. 1FE6 0A24 XORLW 0x24
  2733. 1FE8 E00A BZ 0x1FFE
  2734. 1FEA 0A20 XORLW 0x20
  2735. 1FEC E005 BZ 0x1FF8
  2736. 1FEE 0A30 XORLW 0x30
  2737. 1FF0 E001 BZ 0x1FF4
  2738. 1FF2 D008 BRA 0x2004
  2739. 226: case USB_TOKEN_SETUP:
  2740. 227: usb_handle_setup();
  2741. 1FF4 D808 RCALL usb_handle_setup
  2742. 228: break;
  2743. 1FF6 D006 BRA 0x2004
  2744. 229: case USB_TOKEN_OUT:
  2745. 230: usb_handle_out();
  2746. 1FF8 ECF8 CALL 0x2BF0, 0
  2747. 1FFA F015 NOP
  2748. 231: break;
  2749. 1FFC D003 BRA 0x2004
  2750. 232: case USB_TOKEN_IN:
  2751. 233: usb_handle_in();
  2752. 1FFE ECCA CALL 0x2B94, 0
  2753. 2000 F015 NOP
  2754. 234: break;
  2755. 2002 D000 BRA 0x2004
  2756. 235: //default:
  2757. 236: /* Default case of unknown TOKEN - discard */
  2758. 237: }
  2759. 238: }
  2760. 2004 0012 RETURN 0
  2761. 239:
  2762. 240: void usb_handle_setup(void) {
  2763. 241:
  2764. 242: EP0_Inbdp->BDSTAT = DTSEN; // Reclaim reply buffer
  2765. 2006 C0BA MOVFF EP0_Inbdp, FSR0L
  2766. 2008 FFE9 NOP
  2767. 200A C0BB MOVFF 0xBB, FSR0H
  2768. 200C FFEA NOP
  2769. 200E 0E08 MOVLW 0x8
  2770. 2010 6EEF MOVWF INDF0, ACCESS
  2771. 243:
  2772. 244: EnablePacketTransfer(); // JTR this is placed here to overcome a errate issue with early PIC18 USB pics.
  2773. 2012 986D BCF UCON, 4, ACCESS
  2774. 245:
  2775. 246: switch (EP0_Outbdp->BDADDR[USB_bmRequestType] & USB_bmRequestType_TypeMask) {
  2776. 2014 C0B8 MOVFF EP0_Outbdp, FSR0L
  2777. 2016 FFE9 NOP
  2778. 2018 C0B9 MOVFF 0xB9, FSR0H
  2779. 201A FFEA NOP
  2780. 201C 0E02 MOVLW 0x2
  2781. 201E 26E9 ADDWF FSR0L, F, ACCESS
  2782. 2020 0E00 MOVLW 0x0
  2783. 2022 22EA ADDWFC FSR0H, F, ACCESS
  2784. 2024 50EE MOVF POSTINC0, W, ACCESS
  2785. 2026 CFEF MOVFF INDF0, FSR0H
  2786. 2028 FFEA NOP
  2787. 202A 6EE9 MOVWF FSR0L, ACCESS
  2788. 202C 50EF MOVF INDF0, W, ACCESS
  2789. 202E 0B60 ANDLW 0x60
  2790. 2030 0A40 XORLW 0x40
  2791. 2032 E042 BZ 0x20B8
  2792. 2034 0A60 XORLW 0x60
  2793. 2036 E034 BZ 0x20A0
  2794. 2038 0A20 XORLW 0x20
  2795. 203A E001 BZ 0x203E
  2796. 203C D049 BRA 0x20D0
  2797. 247: case USB_bmRequestType_Standard:
  2798. 248: switch (EP0_Outbdp->BDADDR[USB_bmRequestType] & USB_bmRequestType_RecipientMask) {
  2799. 203E C0B8 MOVFF EP0_Outbdp, FSR0L
  2800. 2040 FFE9 NOP
  2801. 2042 C0B9 MOVFF 0xB9, FSR0H
  2802. 2044 FFEA NOP
  2803. 2046 0E02 MOVLW 0x2
  2804. 2048 26E9 ADDWF FSR0L, F, ACCESS
  2805. 204A 0E00 MOVLW 0x0
  2806. 204C 22EA ADDWFC FSR0H, F, ACCESS
  2807. 204E 50EE MOVF POSTINC0, W, ACCESS
  2808. 2050 CFEF MOVFF INDF0, FSR0H
  2809. 2052 FFEA NOP
  2810. 2054 6EE9 MOVWF FSR0L, ACCESS
  2811. 2056 50EF MOVF INDF0, W, ACCESS
  2812. 2058 0B03 ANDLW 0x3
  2813. 205A 0A02 XORLW 0x2
  2814. 205C E015 BZ 0x2088
  2815. 205E 0A03 XORLW 0x3
  2816. 2060 E00B BZ 0x2078
  2817. 2062 0A01 XORLW 0x1
  2818. 2064 E001 BZ 0x2068
  2819. 2066 D019 BRA 0x209A
  2820. 249: case USB_bmRequestType_Device:
  2821. 250: usb_handle_StandardDeviceRequest(EP0_Outbdp);
  2822. 2068 C0B8 MOVFF EP0_Outbdp, POSTINC1
  2823. 206A FFE6 NOP
  2824. 206C C0B9 MOVFF 0xB9, POSTINC1
  2825. 206E FFE6 NOP
  2826. 2070 D87C RCALL usb_handle_StandardDeviceRequest
  2827. 2072 52E5 MOVF POSTDEC1, F, ACCESS
  2828. 2074 52E5 MOVF POSTDEC1, F, ACCESS
  2829. 251: break;
  2830. 2076 D013 BRA 0x209E
  2831. 252: case USB_bmRequestType_Interface:
  2832. 253: usb_handle_StandardInterfaceRequest(EP0_Outbdp);
  2833. 2078 C0B8 MOVFF EP0_Outbdp, POSTINC1
  2834. 207A FFE6 NOP
  2835. 207C C0B9 MOVFF 0xB9, POSTINC1
  2836. 207E FFE6 NOP
  2837. 2080 DB94 RCALL usb_handle_StandardInterfaceRequest
  2838. 2082 52E5 MOVF POSTDEC1, F, ACCESS
  2839. 2084 52E5 MOVF POSTDEC1, F, ACCESS
  2840. 254: break;
  2841. 2086 D00B BRA 0x209E
  2842. 255: case USB_bmRequestType_Endpoint:
  2843. 256: usb_handle_StandardEndpointRequest(EP0_Outbdp);
  2844. 2088 C0B8 MOVFF EP0_Outbdp, POSTINC1
  2845. 208A FFE6 NOP
  2846. 208C C0B9 MOVFF 0xB9, POSTINC1
  2847. 208E FFE6 NOP
  2848. 2090 EC72 CALL 0x28E4, 0
  2849. 2092 F014 NOP
  2850. 2094 52E5 MOVF POSTDEC1, F, ACCESS
  2851. 2096 52E5 MOVF POSTDEC1, F, ACCESS
  2852. 257: break;
  2853. 2098 D002 BRA 0x209E
  2854. 258: default:
  2855. 259: usb_RequestError();
  2856. 209A ECB8 CALL 0x2D70, 0
  2857. 209C F016 NOP
  2858. 260: }
  2859. 261: break;
  2860. 209E D01A BRA 0x20D4
  2861. 262: case USB_bmRequestType_Class:
  2862. 263: if (class_setup_handler) class_setup_handler();
  2863. 20A0 0100 MOVLB 0x0
  2864. 20A2 516D MOVF class_setup_handler, W, BANKED
  2865. 20A4 116E IORWF 0x6E, W, BANKED
  2866. 20A6 E007 BZ 0x20B6
  2867. 20A8 D005 BRA 0x20B4
  2868. 20AA C06E MOVFF 0x6E, PCLATH
  2869. 20AC FFFA NOP
  2870. 20AE 0100 MOVLB 0x0
  2871. 20B0 516D MOVF class_setup_handler, W, BANKED
  2872. 20B2 6EF9 MOVWF PCL, ACCESS
  2873. 20B4 DFFA RCALL 0x20AA
  2874. 264: break;
  2875. 20B6 D00E BRA 0x20D4
  2876. 265: case USB_bmRequestType_Vendor:
  2877. 266: //ROBOTS FIX: http://dangerousprototypes.com/forum/viewtopic.php?f=39&t=3849&view=unread#unread
  2878. 267: // did call class_setup_handler();
  2879. 268: if (vendor_setup_handler) vendor_setup_handler();
  2880. 20B8 0100 MOVLB 0x0
  2881. 20BA 516F MOVF vendor_setup_handler, W, BANKED
  2882. 20BC 1170 IORWF 0x70, W, BANKED
  2883. 20BE E007 BZ 0x20CE
  2884. 20C0 D005 BRA 0x20CC
  2885. 20C2 C070 MOVFF 0x70, PCLATH
  2886. 20C4 FFFA NOP
  2887. 20C6 0100 MOVLB 0x0
  2888. 20C8 516F MOVF vendor_setup_handler, W, BANKED
  2889. 20CA 6EF9 MOVWF PCL, ACCESS
  2890. 20CC DFFA RCALL 0x20C2
  2891. 269: break;
  2892. 20CE D002 BRA 0x20D4
  2893. 270: default:
  2894. 271: usb_RequestError();
  2895. 20D0 ECB8 CALL 0x2D70, 0
  2896. 20D2 F016 NOP
  2897. 272: }
  2898. 273: /* Prepare endpoint for new reception */
  2899. 274:
  2900. 275: EP0_Outbdp->BDCNT = USB_EP0_BUFFER_SIZE; // Size of EP0, should always be ep0?
  2901. 20D4 C0B8 MOVFF EP0_Outbdp, FSR0L
  2902. 20D6 FFE9 NOP
  2903. 20D8 C0B9 MOVFF 0xB9, FSR0H
  2904. 20DA FFEA NOP
  2905. 20DC 52EE MOVF POSTINC0, F, ACCESS
  2906. 20DE 0E08 MOVLW 0x8
  2907. 20E0 6EEF MOVWF INDF0, ACCESS
  2908. 276:
  2909. 277: // JTR, is the next OUT transfer to be a setup packet (DAT0) or a DATA packet (DAT1)?
  2910. 278: // note that this is not an entirely robust way of doing things. See the microchip stack for
  2911. 279: // further comments and a better system as this does not account for errors and retries
  2912. 280: // and it results in the SIE not accepting the final out ZLP status packet for IN transfers
  2913. 281: // with a data stage. However it works but it is not anything to be proud of...
  2914. 282:
  2915. 283: EP0_Outbdp->BDSTAT = (!(EP0_Outbdp->BDADDR[USB_bmRequestType] & USB_bmRequestType_PhaseMask) &&
  2916. 20E2 C0B8 MOVFF EP0_Outbdp, FSR0L
  2917. 20E4 FFE9 NOP
  2918. 20E6 C0B9 MOVFF 0xB9, FSR0H
  2919. 20E8 FFEA NOP
  2920. 20EA 0E02 MOVLW 0x2
  2921. 20EC 26E9 ADDWF FSR0L, F, ACCESS
  2922. 20EE 0E00 MOVLW 0x0
  2923. 20F0 22EA ADDWFC FSR0H, F, ACCESS
  2924. 20F2 50EE MOVF POSTINC0, W, ACCESS
  2925. 20F4 CFEF MOVFF INDF0, FSR0H
  2926. 20F6 FFEA NOP
  2927. 20F8 6EE9 MOVWF FSR0L, ACCESS
  2928. 20FA 50EF MOVF INDF0, W, ACCESS
  2929. 20FC 0B80 ANDLW 0x80
  2930. 215A C0B8 MOVFF EP0_Outbdp, FSR0L
  2931. 215C FFE9 NOP
  2932. 215E C0B9 MOVFF 0xB9, FSR0H
  2933. 2160 FFEA NOP
  2934. 284: (EP0_Outbdp->BDADDR[USB_wLength] || EP0_Outbdp->BDADDR[USB_wLengthHigh])) ? UOWN + DTS + DTSEN : UOWN + DTSEN;
  2935. 20FE E124 BNZ 0x2148
  2936. 2100 C0B8 MOVFF EP0_Outbdp, FSR0L
  2937. 2102 FFE9 NOP
  2938. 2104 C0B9 MOVFF 0xB9, FSR0H
  2939. 2106 FFEA NOP
  2940. 2108 0E02 MOVLW 0x2
  2941. 210A 26E9 ADDWF FSR0L, F, ACCESS
  2942. 210C 0E00 MOVLW 0x0
  2943. 210E 22EA ADDWFC FSR0H, F, ACCESS
  2944. 2110 50EE MOVF POSTINC0, W, ACCESS
  2945. 2112 CFEF MOVFF INDF0, FSR0H
  2946. 2114 FFEA NOP
  2947. 2116 6EE9 MOVWF FSR0L, ACCESS
  2948. 2118 0E06 MOVLW 0x6
  2949. 211A 26E9 ADDWF FSR0L, F, ACCESS
  2950. 211C 0E00 MOVLW 0x0
  2951. 211E 22EA ADDWFC FSR0H, F, ACCESS
  2952. 2120 50EF MOVF INDF0, W, ACCESS
  2953. 2122 E114 BNZ 0x214C
  2954. 2124 C0B8 MOVFF EP0_Outbdp, FSR0L
  2955. 2126 FFE9 NOP
  2956. 2128 C0B9 MOVFF 0xB9, FSR0H
  2957. 212A FFEA NOP
  2958. 212C 0E02 MOVLW 0x2
  2959. 212E 26E9 ADDWF FSR0L, F, ACCESS
  2960. 2130 0E00 MOVLW 0x0
  2961. 2132 22EA ADDWFC FSR0H, F, ACCESS
  2962. 2134 50EE MOVF POSTINC0, W, ACCESS
  2963. 2136 CFEF MOVFF INDF0, FSR0H
  2964. 2138 FFEA NOP
  2965. 213A 6EE9 MOVWF FSR0L, ACCESS
  2966. 213C 0E07 MOVLW 0x7
  2967. 213E 26E9 ADDWF FSR0L, F, ACCESS
  2968. 2140 0E00 MOVLW 0x0
  2969. 2142 22EA ADDWFC FSR0H, F, ACCESS
  2970. 2144 50EF MOVF INDF0, W, ACCESS
  2971. 2146 E102 BNZ 0x214C
  2972. 2148 0E00 MOVLW 0x0
  2973. 214A D001 BRA 0x214E
  2974. 214C 0E01 MOVLW 0x1
  2975. 214E 0900 IORLW 0x0
  2976. 2150 E002 BZ 0x2156
  2977. 2152 0EC8 MOVLW 0xC8
  2978. 2154 D001 BRA 0x2158
  2979. 2156 0E88 MOVLW 0x88
  2980. 2158 6EE6 MOVWF POSTINC1, ACCESS
  2981. 2162 52E5 MOVF POSTDEC1, F, ACCESS
  2982. 2164 50E7 MOVF INDF1, W, ACCESS
  2983. 2166 6EEF MOVWF INDF0, ACCESS
  2984. 285: }
  2985. 2168 0012 RETURN 0
  2986. 286:
  2987. 287: void usb_handle_StandardDeviceRequest(BDentry *bdp) {
  2988. 216A CFD9 MOVFF FSR2L, POSTINC1
  2989. 216C FFE6 NOP
  2990. 216E CFE1 MOVFF FSR1L, FSR2L
  2991. 2170 FFD9 NOP
  2992. 2172 0E04 MOVLW 0x4
  2993. 2174 26E1 ADDWF FSR1L, F, ACCESS
  2994. 288: BYTE *packet = bdp->BDADDR;
  2995. 2176 0EFD MOVLW 0xFD
  2996. 2178 CFDB MOVFF PLUSW2, FSR0L
  2997. 217A FFE9 NOP
  2998. 217C 0EFE MOVLW 0xFE
  2999. 217E CFDB MOVFF PLUSW2, FSR0H
  3000. 2180 FFEA NOP
  3001. 2182 0E02 MOVLW 0x2
  3002. 2184 26E9 ADDWF FSR0L, F, ACCESS
  3003. 2186 0E00 MOVLW 0x0
  3004. 2188 22EA ADDWFC FSR0H, F, ACCESS
  3005. 218A CFEE MOVFF POSTINC0, POSTINC2
  3006. 218C FFDE NOP
  3007. 218E CFED MOVFF POSTDEC0, POSTDEC2
  3008. 2190 FFDD NOP
  3009. 289: int i;
  3010. 290:
  3011. 291: switch (packet[USB_bRequest]) {
  3012. 2192 CFDE MOVFF POSTINC2, FSR0L
  3013. 2194 FFE9 NOP
  3014. 2196 CFDD MOVFF POSTDEC2, FSR0H
  3015. 2198 FFEA NOP
  3016. 219A 0E01 MOVLW 0x1
  3017. 219C 26E9 ADDWF FSR0L, F, ACCESS
  3018. 219E 0E00 MOVLW 0x0
  3019. 21A0 22EA ADDWFC FSR0H, F, ACCESS
  3020. 21A2 50EF MOVF INDF0, W, ACCESS
  3021. 21A4 0A07 XORLW 0x7
  3022. 21A6 E101 BNZ 0x21AA
  3023. 21A8 D2F5 BRA 0x2794
  3024. 21AA 0A0E XORLW 0xE
  3025. 21AC E101 BNZ 0x21B0
  3026. 21AE D2C3 BRA 0x2736
  3027. 21B0 0A01 XORLW 0x1
  3028. 21B2 E101 BNZ 0x21B6
  3029. 21B4 D2AB BRA 0x270C
  3030. 21B6 0A0E XORLW 0xE
  3031. 21B8 E101 BNZ 0x21BC
  3032. 21BA D09F BRA 0x22FA
  3033. 21BC 0A03 XORLW 0x3
  3034. 21BE E064 BZ 0x2288
  3035. 21C0 0A06 XORLW 0x6
  3036. 21C2 E04B BZ 0x225A
  3037. 21C4 0A02 XORLW 0x2
  3038. 21C6 E032 BZ 0x222C
  3039. 21C8 0A01 XORLW 0x1
  3040. 21CA E001 BZ 0x21CE
  3041. 21CC D2E3 BRA 0x2794
  3042. 292: case USB_REQUEST_GET_STATUS:
  3043. 293: EP0_Inbdp->BDADDR[0] = usb_device_status & 0xFF;
  3044. 21CE 0100 MOVLB 0x0
  3045. 21D0 51B1 MOVF usb_device_status, W, BANKED
  3046. 21D2 6EE6 MOVWF POSTINC1, ACCESS
  3047. 21D4 C0BA MOVFF EP0_Inbdp, FSR0L
  3048. 21D6 FFE9 NOP
  3049. 21D8 C0BB MOVFF 0xBB, FSR0H
  3050. 21DA FFEA NOP
  3051. 21DC 0E02 MOVLW 0x2
  3052. 21DE 26E9 ADDWF FSR0L, F, ACCESS
  3053. 21E0 0E00 MOVLW 0x0
  3054. 21E2 22EA ADDWFC FSR0H, F, ACCESS
  3055. 21E4 50EE MOVF POSTINC0, W, ACCESS
  3056. 21E6 CFEF MOVFF INDF0, FSR0H
  3057. 21E8 FFEA NOP
  3058. 21EA 6EE9 MOVWF FSR0L, ACCESS
  3059. 21EC 52E5 MOVF POSTDEC1, F, ACCESS
  3060. 21EE 50E7 MOVF INDF1, W, ACCESS
  3061. 21F0 6EEF MOVWF INDF0, ACCESS
  3062. 294: EP0_Inbdp->BDADDR[1] = usb_device_status >> 8;
  3063. 21F2 C0B2 MOVFF 0xB2, __tmp_0
  3064. 21F4 F014 NOP
  3065. 21F6 6A15 CLRF digit_cnt, ACCESS
  3066. 21F8 C0BA MOVFF EP0_Inbdp, FSR0L
  3067. 21FA FFE9 NOP
  3068. 21FC C0BB MOVFF 0xBB, FSR0H
  3069. 21FE FFEA NOP
  3070. 2200 0E02 MOVLW 0x2
  3071. 2202 26E9 ADDWF FSR0L, F, ACCESS
  3072. 2204 0E00 MOVLW 0x0
  3073. 2206 22EA ADDWFC FSR0H, F, ACCESS
  3074. 2208 50EE MOVF POSTINC0, W, ACCESS
  3075. 220A CFEF MOVFF INDF0, FSR0H
  3076. 220C FFEA NOP
  3077. 220E 6EE9 MOVWF FSR0L, ACCESS
  3078. 2210 0E01 MOVLW 0x1
  3079. 2212 26E9 ADDWF FSR0L, F, ACCESS
  3080. 2214 0E00 MOVLW 0x0
  3081. 2216 22EA ADDWFC FSR0H, F, ACCESS
  3082. 2218 C014 MOVFF __tmp_0, INDF0
  3083. 221A FFEF NOP
  3084. 295: usb_ack_dat1(2);
  3085. 221C 0E02 MOVLW 0x2
  3086. 221E 6EE6 MOVWF POSTINC1, ACCESS
  3087. 2220 6AE6 CLRF POSTINC1, ACCESS
  3088. 2222 EC98 CALL 0x2D30, 0
  3089. 2224 F016 NOP
  3090. 2226 52E5 MOVF POSTDEC1, F, ACCESS
  3091. 2228 52E5 MOVF POSTDEC1, F, ACCESS
  3092. 296: break;
  3093. 222A D2B5 BRA 0x2796
  3094. 297: case USB_REQUEST_CLEAR_FEATURE:
  3095. 298: if (0x01u == packet[USB_wValue]) { // TODO: Remove magic (REMOTE_WAKEUP_FEATURE)
  3096. 222C CFDE MOVFF POSTINC2, FSR0L
  3097. 222E FFE9 NOP
  3098. 2230 CFDD MOVFF POSTDEC2, FSR0H
  3099. 2232 FFEA NOP
  3100. 2234 0E02 MOVLW 0x2
  3101. 2236 26E9 ADDWF FSR0L, F, ACCESS
  3102. 2238 0E00 MOVLW 0x0
  3103. 223A 22EA ADDWFC FSR0H, F, ACCESS
  3104. 223C 04EF DECF INDF0, W, ACCESS
  3105. 223E E10A BNZ 0x2254
  3106. 299: usb_device_status &= ~0x0002;
  3107. 2240 0100 MOVLB 0x0
  3108. 2242 93B1 BCF usb_device_status, 1, BANKED
  3109. 300: usb_ack_dat1(0);
  3110. 2244 0E00 MOVLW 0x0
  3111. 2246 6EE6 MOVWF POSTINC1, ACCESS
  3112. 2248 6AE6 CLRF POSTINC1, ACCESS
  3113. 224A EC98 CALL 0x2D30, 0
  3114. 224C F016 NOP
  3115. 224E 52E5 MOVF POSTDEC1, F, ACCESS
  3116. 2250 52E5 MOVF POSTDEC1, F, ACCESS
  3117. 301: } else
  3118. 2252 D002 BRA 0x2258
  3119. 302: usb_RequestError();
  3120. 2254 ECB8 CALL 0x2D70, 0
  3121. 2256 F016 NOP
  3122. 303: break;
  3123. 2258 D29E BRA 0x2796
  3124. 304: case USB_REQUEST_SET_FEATURE:
  3125. 305: if (0x01u == packet[USB_wValue]) { // TODO: Remove magic (REMOTE_WAKEUP_FEATURE)
  3126. 225A CFDE MOVFF POSTINC2, FSR0L
  3127. 225C FFE9 NOP
  3128. 225E CFDD MOVFF POSTDEC2, FSR0H
  3129. 2260 FFEA NOP
  3130. 2262 0E02 MOVLW 0x2
  3131. 2264 26E9 ADDWF FSR0L, F, ACCESS
  3132. 2266 0E00 MOVLW 0x0
  3133. 2268 22EA ADDWFC FSR0H, F, ACCESS
  3134. 226A 04EF DECF INDF0, W, ACCESS
  3135. 226C E10A BNZ 0x2282
  3136. 306: usb_device_status |= 0x0002;
  3137. 226E 0100 MOVLB 0x0
  3138. 2270 83B1 BSF usb_device_status, 1, BANKED
  3139. 307: usb_ack_dat1(0);
  3140. 2272 0E00 MOVLW 0x0
  3141. 2274 6EE6 MOVWF POSTINC1, ACCESS
  3142. 2276 6AE6 CLRF POSTINC1, ACCESS
  3143. 2278 EC98 CALL 0x2D30, 0
  3144. 227A F016 NOP
  3145. 227C 52E5 MOVF POSTDEC1, F, ACCESS
  3146. 227E 52E5 MOVF POSTDEC1, F, ACCESS
  3147. 308: } else
  3148. 2280 D002 BRA 0x2286
  3149. 309: usb_RequestError();
  3150. 2282 ECB8 CALL 0x2D70, 0
  3151. 2284 F016 NOP
  3152. 310: break;
  3153. 2286 D287 BRA 0x2796
  3154. 311: case USB_REQUEST_SET_ADDRESS:
  3155. 312: if (0x00u == packet[USB_wValueHigh] && 0x7Fu >= packet[USB_wValue]) {
  3156. 2288 CFDE MOVFF POSTINC2, FSR0L
  3157. 228A FFE9 NOP
  3158. 228C CFDD MOVFF POSTDEC2, FSR0H
  3159. 228E FFEA NOP
  3160. 2290 0E03 MOVLW 0x3
  3161. 2292 26E9 ADDWF FSR0L, F, ACCESS
  3162. 2294 0E00 MOVLW 0x0
  3163. 2296 22EA ADDWFC FSR0H, F, ACCESS
  3164. 2298 50EF MOVF INDF0, W, ACCESS
  3165. 229A E12C BNZ 0x22F4
  3166. 229C 0E7F MOVLW 0x7F
  3167. 229E 6E14 MOVWF __tmp_0, ACCESS
  3168. 22A0 CFDE MOVFF POSTINC2, FSR0L
  3169. 22A2 FFE9 NOP
  3170. 22A4 CFDD MOVFF POSTDEC2, FSR0H
  3171. 22A6 FFEA NOP
  3172. 22A8 0E02 MOVLW 0x2
  3173. 22AA 26E9 ADDWF FSR0L, F, ACCESS
  3174. 22AC 0E00 MOVLW 0x0
  3175. 22AE 22EA ADDWFC FSR0H, F, ACCESS
  3176. 22B0 50EF MOVF INDF0, W, ACCESS
  3177. 22B2 5C14 SUBWF __tmp_0, W, ACCESS
  3178. 22B4 E31F BNC 0x22F4
  3179. 313: usb_addr_pending = packet[USB_wValue];
  3180. 22B6 CFDE MOVFF POSTINC2, FSR0L
  3181. 22B8 FFE9 NOP
  3182. 22BA CFDD MOVFF POSTDEC2, FSR0H
  3183. 22BC FFEA NOP
  3184. 22BE 0E02 MOVLW 0x2
  3185. 22C0 26E9 ADDWF FSR0L, F, ACCESS
  3186. 22C2 0E00 MOVLW 0x0
  3187. 22C4 22EA ADDWFC FSR0H, F, ACCESS
  3188. 22C6 CFEF MOVFF INDF0, usb_addr_pending
  3189. 22C8 F0B6 NOP
  3190. 314: usb_set_in_handler(0, usb_set_address);
  3191. 22CA 0E84 MOVLW 0x84
  3192. 22CC 6EE6 MOVWF POSTINC1, ACCESS
  3193. 22CE 0E2D MOVLW 0x2D
  3194. 22D0 6EE6 MOVWF POSTINC1, ACCESS
  3195. 22D2 0E00 MOVLW 0x0
  3196. 22D4 6EE6 MOVWF POSTINC1, ACCESS
  3197. 22D6 6AE6 CLRF POSTINC1, ACCESS
  3198. 22D8 EC58 CALL 0x2CB0, 0
  3199. 22DA F016 NOP
  3200. 22DC 52E5 MOVF POSTDEC1, F, ACCESS
  3201. 22DE 52E5 MOVF POSTDEC1, F, ACCESS
  3202. 22E0 52E5 MOVF POSTDEC1, F, ACCESS
  3203. 22E2 52E5 MOVF POSTDEC1, F, ACCESS
  3204. 315: usb_ack_dat1(0);
  3205. 22E4 0E00 MOVLW 0x0
  3206. 22E6 6EE6 MOVWF POSTINC1, ACCESS
  3207. 22E8 6AE6 CLRF POSTINC1, ACCESS
  3208. 22EA EC98 CALL 0x2D30, 0
  3209. 22EC F016 NOP
  3210. 22EE 52E5 MOVF POSTDEC1, F, ACCESS
  3211. 22F0 52E5 MOVF POSTDEC1, F, ACCESS
  3212. 316: } else
  3213. 22F2 D002 BRA 0x22F8
  3214. 317: usb_RequestError();
  3215. 22F4 ECB8 CALL 0x2D70, 0
  3216. 22F6 F016 NOP
  3217. 318: break;
  3218. 22F8 D24E BRA 0x2796
  3219. 319:
  3220. 320:
  3221. 321: case USB_REQUEST_GET_DESCRIPTOR:
  3222. 322: switch (packet[USB_bDescriptorType]) {
  3223. 22FA CFDE MOVFF POSTINC2, FSR0L
  3224. 22FC FFE9 NOP
  3225. 22FE CFDD MOVFF POSTDEC2, FSR0H
  3226. 2300 FFEA NOP
  3227. 2302 0E03 MOVLW 0x3
  3228. 2304 26E9 ADDWF FSR0L, F, ACCESS
  3229. 2306 0E00 MOVLW 0x0
  3230. 2308 22EA ADDWFC FSR0H, F, ACCESS
  3231. 230A 50EF MOVF INDF0, W, ACCESS
  3232. 230C 0A04 XORLW 0x4
  3233. 230E E101 BNZ 0x2312
  3234. 2310 D1E7 BRA 0x26E0
  3235. 2312 0A01 XORLW 0x1
  3236. 2314 E101 BNZ 0x2318
  3237. 2316 D1E4 BRA 0x26E0
  3238. 2318 0A06 XORLW 0x6
  3239. 231A E101 BNZ 0x231E
  3240. 231C D14F BRA 0x25BC
  3241. 231E 0A01 XORLW 0x1
  3242. 2320 E03F BZ 0x23A0
  3243. 2322 0A03 XORLW 0x3
  3244. 2324 E001 BZ 0x2328
  3245. 2326 D1DC BRA 0x26E0
  3246. 323: case USB_DEVICE_DESCRIPTOR_TYPE: // There is only every one in pratice.
  3247. 324: usb_rom_ptr = usb_device_descriptor;
  3248. 2328 C060 MOVFF usb_device_descriptor, usb_rom_ptr
  3249. 232A F0BC NOP
  3250. 232C C061 MOVFF 0x61, 0xBD
  3251. 232E F0BD NOP
  3252. 2330 C062 MOVFF 0x62, 0xBE
  3253. 2332 F0BE NOP
  3254. 325: usb_rom_len = usb_device_descriptor[0]; // Get BYTE length from descriptor always at byte [0]
  3255. 2334 C060 MOVFF usb_device_descriptor, TBLPTRL
  3256. 2336 FFF6 NOP
  3257. 2338 C061 MOVFF 0x61, TBLPTRH
  3258. 233A FFF7 NOP
  3259. 233C C062 MOVFF 0x62, TBLPTRU
  3260. 233E FFF8 NOP
  3261. 2340 0008 TBLRD*
  3262. 2342 50F5 MOVF TABLAT, W, ACCESS
  3263. 2344 0100 MOVLB 0x0
  3264. 2346 6FBF MOVWF usb_rom_len, BANKED
  3265. 2348 6BC0 CLRF 0xC0, BANKED
  3266. 326: if ((0 == packet[USB_wLengthHigh] && packet[USB_wLength] < usb_rom_ptr[0]))
  3267. 234A CFDE MOVFF POSTINC2, FSR0L
  3268. 234C FFE9 NOP
  3269. 234E CFDD MOVFF POSTDEC2, FSR0H
  3270. 2350 FFEA NOP
  3271. 2352 0E07 MOVLW 0x7
  3272. 2354 26E9 ADDWF FSR0L, F, ACCESS
  3273. 2356 0E00 MOVLW 0x0
  3274. 2358 22EA ADDWFC FSR0H, F, ACCESS
  3275. 235A 50EF MOVF INDF0, W, ACCESS
  3276. 235C E120 BNZ 0x239E
  3277. 235E CFDE MOVFF POSTINC2, FSR0L
  3278. 2360 FFE9 NOP
  3279. 2362 CFDD MOVFF POSTDEC2, FSR0H
  3280. 2364 FFEA NOP
  3281. 2366 0E06 MOVLW 0x6
  3282. 2368 26E9 ADDWF FSR0L, F, ACCESS
  3283. 236A 0E00 MOVLW 0x0
  3284. 236C 22EA ADDWFC FSR0H, F, ACCESS
  3285. 236E CFEF MOVFF INDF0, __tmp_0
  3286. 2370 F014 NOP
  3287. 2372 C0BC MOVFF usb_rom_ptr, TBLPTRL
  3288. 2374 FFF6 NOP
  3289. 2376 C0BD MOVFF 0xBD, TBLPTRH
  3290. 2378 FFF7 NOP
  3291. 237A C0BE MOVFF 0xBE, TBLPTRU
  3292. 237C FFF8 NOP
  3293. 237E 0008 TBLRD*
  3294. 2380 50F5 MOVF TABLAT, W, ACCESS
  3295. 2382 5C14 SUBWF __tmp_0, W, ACCESS
  3296. 2384 E20C BC 0x239E
  3297. 327: usb_rom_len = packet[USB_wLength]; // If the HOST asked for LESS then must adjust count to the smaller number
  3298. 2386 CFDE MOVFF POSTINC2, FSR0L
  3299. 2388 FFE9 NOP
  3300. 238A CFDD MOVFF POSTDEC2, FSR0H
  3301. 238C FFEA NOP
  3302. 238E 0E06 MOVLW 0x6
  3303. 2390 26E9 ADDWF FSR0L, F, ACCESS
  3304. 2392 0E00 MOVLW 0x0
  3305. 2394 22EA ADDWFC FSR0H, F, ACCESS
  3306. 2396 50EF MOVF INDF0, W, ACCESS
  3307. 2398 0100 MOVLB 0x0
  3308. 239A 6FBF MOVWF usb_rom_len, BANKED
  3309. 239C 6BC0 CLRF 0xC0, BANKED
  3310. 328: break;
  3311. 239E D1A3 BRA 0x26E6
  3312. 329:
  3313. 330: case USB_CONFIGURATION_DESCRIPTOR_TYPE:
  3314. 331: if (packet[USB_bDescriptorIndex] >= usb_device_descriptor[17]) {
  3315. 23A0 CFDE MOVFF POSTINC2, FSR0L
  3316. 23A2 FFE9 NOP
  3317. 23A4 CFDD MOVFF POSTDEC2, FSR0H
  3318. 23A6 FFEA NOP
  3319. 23A8 0E02 MOVLW 0x2
  3320. 23AA 26E9 ADDWF FSR0L, F, ACCESS
  3321. 23AC 0E00 MOVLW 0x0
  3322. 23AE 22EA ADDWFC FSR0H, F, ACCESS
  3323. 23B0 CFEF MOVFF INDF0, __tmp_0
  3324. 23B2 F014 NOP
  3325. 23B4 C060 MOVFF usb_device_descriptor, TBLPTRL
  3326. 23B6 FFF6 NOP
  3327. 23B8 C061 MOVFF 0x61, TBLPTRH
  3328. 23BA FFF7 NOP
  3329. 23BC C062 MOVFF 0x62, TBLPTRU
  3330. 23BE FFF8 NOP
  3331. 23C0 0E11 MOVLW 0x11
  3332. 23C2 26F6 ADDWF TBLPTRL, F, ACCESS
  3333. 23C4 0E00 MOVLW 0x0
  3334. 23C6 22F7 ADDWFC TBLPTRH, F, ACCESS
  3335. 23C8 0E00 MOVLW 0x0
  3336. 23CA 22F8 ADDWFC TBLPTRU, F, ACCESS
  3337. 23CC 0008 TBLRD*
  3338. 23CE 50F5 MOVF TABLAT, W, ACCESS
  3339. 23D0 5C14 SUBWF __tmp_0, W, ACCESS
  3340. 23D2 E304 BNC 0x23DC
  3341. 332: flag_usb_RequestError();
  3342. 23D4 0100 MOVLB 0x0
  3343. 23D6 0E01 MOVLW 0x1
  3344. 23D8 6FC1 MOVWF usbrequesterrorflag, BANKED
  3345. 333: break;
  3346. 23DA D185 BRA 0x26E6
  3347. 334: }
  3348. 335:
  3349. 336: usb_rom_ptr = usb_config_descriptor;
  3350. 23DC C063 MOVFF usb_config_descriptor, usb_rom_ptr
  3351. 23DE F0BC NOP
  3352. 23E0 C064 MOVFF 0x64, 0xBD
  3353. 23E2 F0BD NOP
  3354. 23E4 C065 MOVFF 0x65, 0xBE
  3355. 23E6 F0BE NOP
  3356. 337: usb_rom_len = usb_rom_ptr[2] + usb_rom_ptr[3] * 256; // Get WORD length from descriptor always at bytes 2&3 (Low-High)
  3357. 23E8 C0BC MOVFF usb_rom_ptr, TBLPTRL
  3358. 23EA FFF6 NOP
  3359. 23EC C0BD MOVFF 0xBD, TBLPTRH
  3360. 23EE FFF7 NOP
  3361. 23F0 C0BE MOVFF 0xBE, TBLPTRU
  3362. 23F2 FFF8 NOP
  3363. 23F4 0E03 MOVLW 0x3
  3364. 23F6 26F6 ADDWF TBLPTRL, F, ACCESS
  3365. 23F8 0E00 MOVLW 0x0
  3366. 23FA 22F7 ADDWFC TBLPTRH, F, ACCESS
  3367. 23FC 0E00 MOVLW 0x0
  3368. 23FE 22F8 ADDWFC TBLPTRU, F, ACCESS
  3369. 2400 0008 TBLRD*
  3370. 2402 50F5 MOVF TABLAT, W, ACCESS
  3371. 2404 6E14 MOVWF __tmp_0, ACCESS
  3372. 2406 6A15 CLRF digit_cnt, ACCESS
  3373. 2408 C014 MOVFF __tmp_0, digit_cnt
  3374. 240A F015 NOP
  3375. 240C 6A14 CLRF __tmp_0, ACCESS
  3376. 240E C0BC MOVFF usb_rom_ptr, TBLPTRL
  3377. 2410 FFF6 NOP
  3378. 2412 C0BD MOVFF 0xBD, TBLPTRH
  3379. 2414 FFF7 NOP
  3380. 2416 C0BE MOVFF 0xBE, TBLPTRU
  3381. 2418 FFF8 NOP
  3382. 241A 0E02 MOVLW 0x2
  3383. 241C 26F6 ADDWF TBLPTRL, F, ACCESS
  3384. 241E 0E00 MOVLW 0x0
  3385. 2420 22F7 ADDWFC TBLPTRH, F, ACCESS
  3386. 2422 0E00 MOVLW 0x0
  3387. 2424 22F8 ADDWFC TBLPTRU, F, ACCESS
  3388. 2426 0008 TBLRD*
  3389. 2428 50F5 MOVF TABLAT, W, ACCESS
  3390. 242A 0100 MOVLB 0x0
  3391. 242C 2414 ADDWF __tmp_0, W, ACCESS
  3392. 242E 6FBF MOVWF usb_rom_len, BANKED
  3393. 2430 0E00 MOVLW 0x0
  3394. 2432 2015 ADDWFC digit_cnt, W, ACCESS
  3395. 2434 6FC0 MOVWF 0xC0, BANKED
  3396. 338: for (i = 0; i < packet[USB_bDescriptorIndex]; i++) { // Implicit linked list traversal until requested configuration
  3397. 2436 0E02 MOVLW 0x2
  3398. 2438 6ADB CLRF PLUSW2, ACCESS
  3399. 243A 0E03 MOVLW 0x3
  3400. 243C 6ADB CLRF PLUSW2, ACCESS
  3401. 243E 0E02 MOVLW 0x2
  3402. 2440 CFDB MOVFF PLUSW2, __tmp_0
  3403. 2442 F014 NOP
  3404. 2444 0E03 MOVLW 0x3
  3405. 2446 CFDB MOVFF PLUSW2, digit_cnt
  3406. 2448 F015 NOP
  3407. 244A CFDE MOVFF POSTINC2, FSR0L
  3408. 244C FFE9 NOP
  3409. 244E CFDD MOVFF POSTDEC2, FSR0H
  3410. 2450 FFEA NOP
  3411. 2452 0E02 MOVLW 0x2
  3412. 2454 26E9 ADDWF FSR0L, F, ACCESS
  3413. 2456 0E00 MOVLW 0x0
  3414. 2458 22EA ADDWFC FSR0H, F, ACCESS
  3415. 245A 50EF MOVF INDF0, W, ACCESS
  3416. 245C 0100 MOVLB 0x0
  3417. 245E AE15 BTFSS digit_cnt, 7, ACCESS
  3418. 2460 D002 BRA 0x2466
  3419. 2462 90D8 BCF STATUS, 0, ACCESS
  3420. 2464 D003 BRA 0x246C
  3421. 2466 5C14 SUBWF __tmp_0, W, ACCESS
  3422. 2468 0E00 MOVLW 0x0
  3423. 246A 5815 SUBWFB digit_cnt, W, ACCESS
  3424. 246C E23B BC 0x24E4
  3425. 24D8 0E02 MOVLW 0x2
  3426. 24DA 2ADB INCF PLUSW2, F, ACCESS
  3427. 24DC 0E03 MOVLW 0x3
  3428. 24DE E301 BNC 0x24E2
  3429. 24E0 2ADB INCF PLUSW2, F, ACCESS
  3430. 24E2 D7AD BRA 0x243E
  3431. 339: usb_rom_ptr += usb_rom_len;
  3432. 246E C0BF MOVFF usb_rom_len, __tmp_0
  3433. 2470 F014 NOP
  3434. 2472 C0C0 MOVFF 0xC0, digit_cnt
  3435. 2474 F015 NOP
  3436. 2476 6A16 CLRF prefix_cnt, ACCESS
  3437. 2478 5014 MOVF __tmp_0, W, ACCESS
  3438. 247A 0100 MOVLB 0x0
  3439. 247C 27BC ADDWF usb_rom_ptr, F, BANKED
  3440. 247E 5015 MOVF digit_cnt, W, ACCESS
  3441. 2480 0100 MOVLB 0x0
  3442. 2482 23BD ADDWFC 0xBD, F, BANKED
  3443. 2484 5016 MOVF prefix_cnt, W, ACCESS
  3444. 2486 0100 MOVLB 0x0
  3445. 2488 23BE ADDWFC 0xBE, F, BANKED
  3446. 340: usb_rom_len = usb_rom_ptr[2] + usb_rom_ptr[3] * 256; // Get (next) WORD length from descriptor always at bytes 2&3 (Low-High)
  3447. 248A C0BC MOVFF usb_rom_ptr, TBLPTRL
  3448. 248C FFF6 NOP
  3449. 248E C0BD MOVFF 0xBD, TBLPTRH
  3450. 2490 FFF7 NOP
  3451. 2492 C0BE MOVFF 0xBE, TBLPTRU
  3452. 2494 FFF8 NOP
  3453. 2496 0E03 MOVLW 0x3
  3454. 2498 26F6 ADDWF TBLPTRL, F, ACCESS
  3455. 249A 0E00 MOVLW 0x0
  3456. 249C 22F7 ADDWFC TBLPTRH, F, ACCESS
  3457. 249E 0E00 MOVLW 0x0
  3458. 24A0 22F8 ADDWFC TBLPTRU, F, ACCESS
  3459. 24A2 0008 TBLRD*
  3460. 24A4 50F5 MOVF TABLAT, W, ACCESS
  3461. 24A6 6E14 MOVWF __tmp_0, ACCESS
  3462. 24A8 6A15 CLRF digit_cnt, ACCESS
  3463. 24AA C014 MOVFF __tmp_0, digit_cnt
  3464. 24AC F015 NOP
  3465. 24AE 6A14 CLRF __tmp_0, ACCESS
  3466. 24B0 C0BC MOVFF usb_rom_ptr, TBLPTRL
  3467. 24B2 FFF6 NOP
  3468. 24B4 C0BD MOVFF 0xBD, TBLPTRH
  3469. 24B6 FFF7 NOP
  3470. 24B8 C0BE MOVFF 0xBE, TBLPTRU
  3471. 24BA FFF8 NOP
  3472. 24BC 0E02 MOVLW 0x2
  3473. 24BE 26F6 ADDWF TBLPTRL, F, ACCESS
  3474. 24C0 0E00 MOVLW 0x0
  3475. 24C2 22F7 ADDWFC TBLPTRH, F, ACCESS
  3476. 24C4 0E00 MOVLW 0x0
  3477. 24C6 22F8 ADDWFC TBLPTRU, F, ACCESS
  3478. 24C8 0008 TBLRD*
  3479. 24CA 50F5 MOVF TABLAT, W, ACCESS
  3480. 24CC 0100 MOVLB 0x0
  3481. 24CE 2414 ADDWF __tmp_0, W, ACCESS
  3482. 24D0 6FBF MOVWF usb_rom_len, BANKED
  3483. 24D2 0E00 MOVLW 0x0
  3484. 24D4 2015 ADDWFC digit_cnt, W, ACCESS
  3485. 24D6 6FC0 MOVWF 0xC0, BANKED
  3486. 341: }
  3487. 342: if ((packet[USB_wLengthHigh] < usb_rom_ptr[3]) ||
  3488. 24E4 CFDE MOVFF POSTINC2, FSR0L
  3489. 24E6 FFE9 NOP
  3490. 24E8 CFDD MOVFF POSTDEC2, FSR0H
  3491. 24EA FFEA NOP
  3492. 24EC 0E07 MOVLW 0x7
  3493. 24EE 26E9 ADDWF FSR0L, F, ACCESS
  3494. 24F0 0E00 MOVLW 0x0
  3495. 24F2 22EA ADDWFC FSR0H, F, ACCESS
  3496. 24F4 CFEF MOVFF INDF0, __tmp_0
  3497. 24F6 F014 NOP
  3498. 24F8 C0BC MOVFF usb_rom_ptr, TBLPTRL
  3499. 24FA FFF6 NOP
  3500. 24FC C0BD MOVFF 0xBD, TBLPTRH
  3501. 24FE FFF7 NOP
  3502. 2500 C0BE MOVFF 0xBE, TBLPTRU
  3503. 2502 FFF8 NOP
  3504. 2504 0E03 MOVLW 0x3
  3505. 2506 26F6 ADDWF TBLPTRL, F, ACCESS
  3506. 2508 0E00 MOVLW 0x0
  3507. 250A 22F7 ADDWFC TBLPTRH, F, ACCESS
  3508. 250C 0E00 MOVLW 0x0
  3509. 250E 22F8 ADDWFC TBLPTRU, F, ACCESS
  3510. 2510 0008 TBLRD*
  3511. 2512 50F5 MOVF TABLAT, W, ACCESS
  3512. 2514 5C14 SUBWF __tmp_0, W, ACCESS
  3513. 343: (packet[USB_wLengthHigh] == usb_rom_ptr[3] && packet[USB_wLength] < usb_rom_ptr[2]))
  3514. 2516 E334 BNC 0x2580
  3515. 2518 CFDE MOVFF POSTINC2, FSR0L
  3516. 251A FFE9 NOP
  3517. 251C CFDD MOVFF POSTDEC2, FSR0H
  3518. 251E FFEA NOP
  3519. 2520 0E07 MOVLW 0x7
  3520. 2522 26E9 ADDWF FSR0L, F, ACCESS
  3521. 2524 0E00 MOVLW 0x0
  3522. 2526 22EA ADDWFC FSR0H, F, ACCESS
  3523. 2528 CFEF MOVFF INDF0, digit_cnt
  3524. 252A F015 NOP
  3525. 252C C0BC MOVFF usb_rom_ptr, TBLPTRL
  3526. 252E FFF6 NOP
  3527. 2530 C0BD MOVFF 0xBD, TBLPTRH
  3528. 2532 FFF7 NOP
  3529. 2534 C0BE MOVFF 0xBE, TBLPTRU
  3530. 2536 FFF8 NOP
  3531. 2538 0E03 MOVLW 0x3
  3532. 253A 26F6 ADDWF TBLPTRL, F, ACCESS
  3533. 253C 0E00 MOVLW 0x0
  3534. 253E 22F7 ADDWFC TBLPTRH, F, ACCESS
  3535. 2540 0E00 MOVLW 0x0
  3536. 2542 22F8 ADDWFC TBLPTRU, F, ACCESS
  3537. 2544 0008 TBLRD*
  3538. 2546 50F5 MOVF TABLAT, W, ACCESS
  3539. 2548 5C15 SUBWF digit_cnt, W, ACCESS
  3540. 254A E137 BNZ 0x25BA
  3541. 254C CFDE MOVFF POSTINC2, FSR0L
  3542. 254E FFE9 NOP
  3543. 2550 CFDD MOVFF POSTDEC2, FSR0H
  3544. 2552 FFEA NOP
  3545. 2554 0E06 MOVLW 0x6
  3546. 2556 26E9 ADDWF FSR0L, F, ACCESS
  3547. 2558 0E00 MOVLW 0x0
  3548. 255A 22EA ADDWFC FSR0H, F, ACCESS
  3549. 255C CFEF MOVFF INDF0, prefix_cnt
  3550. 255E F016 NOP
  3551. 2560 C0BC MOVFF usb_rom_ptr, TBLPTRL
  3552. 2562 FFF6 NOP
  3553. 2564 C0BD MOVFF 0xBD, TBLPTRH
  3554. 2566 FFF7 NOP
  3555. 2568 C0BE MOVFF 0xBE, TBLPTRU
  3556. 256A FFF8 NOP
  3557. 256C 0E02 MOVLW 0x2
  3558. 256E 26F6 ADDWF TBLPTRL, F, ACCESS
  3559. 2570 0E00 MOVLW 0x0
  3560. 2572 22F7 ADDWFC TBLPTRH, F, ACCESS
  3561. 2574 0E00 MOVLW 0x0
  3562. 2576 22F8 ADDWFC TBLPTRU, F, ACCESS
  3563. 2578 0008 TBLRD*
  3564. 257A 50F5 MOVF TABLAT, W, ACCESS
  3565. 257C 5C16 SUBWF prefix_cnt, W, ACCESS
  3566. 257E E21D BC 0x25BA
  3567. 344: usb_rom_len = packet[USB_wLength] + packet[USB_wLengthHigh] * 256; // If the HOST asked for LESS then must adjust count to the smaller number
  3568. 2580 CFDE MOVFF POSTINC2, FSR0L
  3569. 2582 FFE9 NOP
  3570. 2584 CFDD MOVFF POSTDEC2, FSR0H
  3571. 2586 FFEA NOP
  3572. 2588 0E07 MOVLW 0x7
  3573. 258A 26E9 ADDWF FSR0L, F, ACCESS
  3574. 258C 0E00 MOVLW 0x0
  3575. 258E 22EA ADDWFC FSR0H, F, ACCESS
  3576. 2590 50EF MOVF INDF0, W, ACCESS
  3577. 2592 6E14 MOVWF __tmp_0, ACCESS
  3578. 2594 6A15 CLRF digit_cnt, ACCESS
  3579. 2596 C014 MOVFF __tmp_0, digit_cnt
  3580. 2598 F015 NOP
  3581. 259A 6A14 CLRF __tmp_0, ACCESS
  3582. 259C CFDE MOVFF POSTINC2, FSR0L
  3583. 259E FFE9 NOP
  3584. 25A0 CFDD MOVFF POSTDEC2, FSR0H
  3585. 25A2 FFEA NOP
  3586. 25A4 0E06 MOVLW 0x6
  3587. 25A6 26E9 ADDWF FSR0L, F, ACCESS
  3588. 25A8 0E00 MOVLW 0x0
  3589. 25AA 22EA ADDWFC FSR0H, F, ACCESS
  3590. 25AC 50EF MOVF INDF0, W, ACCESS
  3591. 25AE 0100 MOVLB 0x0
  3592. 25B0 2414 ADDWF __tmp_0, W, ACCESS
  3593. 25B2 6FBF MOVWF usb_rom_len, BANKED
  3594. 25B4 0E00 MOVLW 0x0
  3595. 25B6 2015 ADDWFC digit_cnt, W, ACCESS
  3596. 25B8 6FC0 MOVWF 0xC0, BANKED
  3597. 345: break;
  3598. 25BA D095 BRA 0x26E6
  3599. 346: case USB_STRING_DESCRIPTOR_TYPE:
  3600. 347: // TODO: Handle language request. For now return standard language.
  3601. 348: if (packet[USB_bDescriptorIndex] >= usb_num_string_descriptors) {
  3602. 25BC CFDE MOVFF POSTINC2, FSR0L
  3603. 25BE FFE9 NOP
  3604. 25C0 CFDD MOVFF POSTDEC2, FSR0H
  3605. 25C2 FFEA NOP
  3606. 25C4 0E02 MOVLW 0x2
  3607. 25C6 26E9 ADDWF FSR0L, F, ACCESS
  3608. 25C8 0E00 MOVLW 0x0
  3609. 25CA 22EA ADDWFC FSR0H, F, ACCESS
  3610. 25CC 50EF MOVF INDF0, W, ACCESS
  3611. 25CE 6E14 MOVWF __tmp_0, ACCESS
  3612. 25D0 6A15 CLRF digit_cnt, ACCESS
  3613. 25D2 0100 MOVLB 0x0
  3614. 25D4 5015 MOVF digit_cnt, W, ACCESS
  3615. 25D6 196A XORWF 0x6A, W, BANKED
  3616. 25D8 AEE8 BTFSS WREG, 7, ACCESS
  3617. 25DA D002 BRA 0x25E0
  3618. 25DC 356A RLCF 0x6A, W, BANKED
  3619. 25DE D004 BRA 0x25E8
  3620. 25E0 5169 MOVF usb_num_string_descriptors, W, BANKED
  3621. 25E2 5C14 SUBWF __tmp_0, W, ACCESS
  3622. 25E4 516A MOVF 0x6A, W, BANKED
  3623. 25E6 5815 SUBWFB digit_cnt, W, ACCESS
  3624. 25E8 E304 BNC 0x25F2
  3625. 349: flag_usb_RequestError();
  3626. 25EA 0100 MOVLB 0x0
  3627. 25EC 0E01 MOVLW 0x1
  3628. 25EE 6FC1 MOVWF usbrequesterrorflag, BANKED
  3629. 350: break;
  3630. 25F0 D07A BRA 0x26E6
  3631. 351: }
  3632. 352: usb_rom_ptr = usb_string_descriptor;
  3633. 25F2 C066 MOVFF usb_string_descriptor, usb_rom_ptr
  3634. 25F4 F0BC NOP
  3635. 25F6 C067 MOVFF 0x67, 0xBD
  3636. 25F8 F0BD NOP
  3637. 25FA C068 MOVFF 0x68, 0xBE
  3638. 25FC F0BE NOP
  3639. 353: usb_rom_len = usb_rom_ptr[0]; // Get BYTE length from descriptor always at byte [0]
  3640. 25FE C0BC MOVFF usb_rom_ptr, TBLPTRL
  3641. 2600 FFF6 NOP
  3642. 2602 C0BD MOVFF 0xBD, TBLPTRH
  3643. 2604 FFF7 NOP
  3644. 2606 C0BE MOVFF 0xBE, TBLPTRU
  3645. 2608 FFF8 NOP
  3646. 260A 0008 TBLRD*
  3647. 260C 50F5 MOVF TABLAT, W, ACCESS
  3648. 260E 0100 MOVLB 0x0
  3649. 2610 6FBF MOVWF usb_rom_len, BANKED
  3650. 2612 6BC0 CLRF 0xC0, BANKED
  3651. 354: for (i = 0; i < packet[USB_bDescriptorIndex]; i++) { // Implicit linked list traversal until requested configuration
  3652. 2614 0E02 MOVLW 0x2
  3653. 2616 6ADB CLRF PLUSW2, ACCESS
  3654. 2618 0E03 MOVLW 0x3
  3655. 261A 6ADB CLRF PLUSW2, ACCESS
  3656. 261C 0E02 MOVLW 0x2
  3657. 261E CFDB MOVFF PLUSW2, __tmp_0
  3658. 2620 F014 NOP
  3659. 2622 0E03 MOVLW 0x3
  3660. 2624 CFDB MOVFF PLUSW2, digit_cnt
  3661. 2626 F015 NOP
  3662. 2628 CFDE MOVFF POSTINC2, FSR0L
  3663. 262A FFE9 NOP
  3664. 262C CFDD MOVFF POSTDEC2, FSR0H
  3665. 262E FFEA NOP
  3666. 2630 0E02 MOVLW 0x2
  3667. 2632 26E9 ADDWF FSR0L, F, ACCESS
  3668. 2634 0E00 MOVLW 0x0
  3669. 2636 22EA ADDWFC FSR0H, F, ACCESS
  3670. 2638 50EF MOVF INDF0, W, ACCESS
  3671. 263A 0100 MOVLB 0x0
  3672. 263C AE15 BTFSS digit_cnt, 7, ACCESS
  3673. 263E D002 BRA 0x2644
  3674. 2640 90D8 BCF STATUS, 0, ACCESS
  3675. 2642 D003 BRA 0x264A
  3676. 2644 5C14 SUBWF __tmp_0, W, ACCESS
  3677. 2646 0E00 MOVLW 0x0
  3678. 2648 5815 SUBWFB digit_cnt, W, ACCESS
  3679. 264A E21F BC 0x268A
  3680. 267E 0E02 MOVLW 0x2
  3681. 2680 2ADB INCF PLUSW2, F, ACCESS
  3682. 2682 0E03 MOVLW 0x3
  3683. 2684 E301 BNC 0x2688
  3684. 2686 2ADB INCF PLUSW2, F, ACCESS
  3685. 2688 D7C9 BRA 0x261C
  3686. 355: usb_rom_ptr += usb_rom_len;
  3687. 264C C0BF MOVFF usb_rom_len, __tmp_0
  3688. 264E F014 NOP
  3689. 2650 C0C0 MOVFF 0xC0, digit_cnt
  3690. 2652 F015 NOP
  3691. 2654 6A16 CLRF prefix_cnt, ACCESS
  3692. 2656 5014 MOVF __tmp_0, W, ACCESS
  3693. 2658 0100 MOVLB 0x0
  3694. 265A 27BC ADDWF usb_rom_ptr, F, BANKED
  3695. 265C 5015 MOVF digit_cnt, W, ACCESS
  3696. 265E 0100 MOVLB 0x0
  3697. 2660 23BD ADDWFC 0xBD, F, BANKED
  3698. 2662 5016 MOVF prefix_cnt, W, ACCESS
  3699. 2664 0100 MOVLB 0x0
  3700. 2666 23BE ADDWFC 0xBE, F, BANKED
  3701. 356: usb_rom_len = usb_rom_ptr[0];
  3702. 2668 C0BC MOVFF usb_rom_ptr, TBLPTRL
  3703. 266A FFF6 NOP
  3704. 266C C0BD MOVFF 0xBD, TBLPTRH
  3705. 266E FFF7 NOP
  3706. 2670 C0BE MOVFF 0xBE, TBLPTRU
  3707. 2672 FFF8 NOP
  3708. 2674 0008 TBLRD*
  3709. 2676 50F5 MOVF TABLAT, W, ACCESS
  3710. 2678 0100 MOVLB 0x0
  3711. 267A 6FBF MOVWF usb_rom_len, BANKED
  3712. 267C 6BC0 CLRF 0xC0, BANKED
  3713. 357: }
  3714. 358: if ((0 == packet[USB_wLengthHigh] && packet[USB_wLength] < usb_rom_ptr[0]))
  3715. 268A CFDE MOVFF POSTINC2, FSR0L
  3716. 268C FFE9 NOP
  3717. 268E CFDD MOVFF POSTDEC2, FSR0H
  3718. 2690 FFEA NOP
  3719. 2692 0E07 MOVLW 0x7
  3720. 2694 26E9 ADDWF FSR0L, F, ACCESS
  3721. 2696 0E00 MOVLW 0x0
  3722. 2698 22EA ADDWFC FSR0H, F, ACCESS
  3723. 269A 50EF MOVF INDF0, W, ACCESS
  3724. 269C E120 BNZ 0x26DE
  3725. 269E CFDE MOVFF POSTINC2, FSR0L
  3726. 26A0 FFE9 NOP
  3727. 26A2 CFDD MOVFF POSTDEC2, FSR0H
  3728. 26A4 FFEA NOP
  3729. 26A6 0E06 MOVLW 0x6
  3730. 26A8 26E9 ADDWF FSR0L, F, ACCESS
  3731. 26AA 0E00 MOVLW 0x0
  3732. 26AC 22EA ADDWFC FSR0H, F, ACCESS
  3733. 26AE CFEF MOVFF INDF0, __tmp_0
  3734. 26B0 F014 NOP
  3735. 26B2 C0BC MOVFF usb_rom_ptr, TBLPTRL
  3736. 26B4 FFF6 NOP
  3737. 26B6 C0BD MOVFF 0xBD, TBLPTRH
  3738. 26B8 FFF7 NOP
  3739. 26BA C0BE MOVFF 0xBE, TBLPTRU
  3740. 26BC FFF8 NOP
  3741. 26BE 0008 TBLRD*
  3742. 26C0 50F5 MOVF TABLAT, W, ACCESS
  3743. 26C2 5C14 SUBWF __tmp_0, W, ACCESS
  3744. 26C4 E20C BC 0x26DE
  3745. 359: usb_rom_len = packet[USB_wLength];
  3746. 26C6 CFDE MOVFF POSTINC2, FSR0L
  3747. 26C8 FFE9 NOP
  3748. 26CA CFDD MOVFF POSTDEC2, FSR0H
  3749. 26CC FFEA NOP
  3750. 26CE 0E06 MOVLW 0x6
  3751. 26D0 26E9 ADDWF FSR0L, F, ACCESS
  3752. 26D2 0E00 MOVLW 0x0
  3753. 26D4 22EA ADDWFC FSR0H, F, ACCESS
  3754. 26D6 50EF MOVF INDF0, W, ACCESS
  3755. 26D8 0100 MOVLB 0x0
  3756. 26DA 6FBF MOVWF usb_rom_len, BANKED
  3757. 26DC 6BC0 CLRF 0xC0, BANKED
  3758. 360: break;
  3759. 26DE D003 BRA 0x26E6
  3760. 361: case USB_INTERFACE_DESCRIPTOR_TYPE:
  3761. 362: case USB_ENDPOINT_DESCRIPTOR_TYPE:
  3762. 363: default:
  3763. 364: flag_usb_RequestError();
  3764. 26E0 0100 MOVLB 0x0
  3765. 26E2 0E01 MOVLW 0x1
  3766. 26E4 6FC1 MOVWF usbrequesterrorflag, BANKED
  3767. 365: }
  3768. 366: if (0 == usbrequesterrorflag) {
  3769. 26E6 0100 MOVLB 0x0
  3770. 26E8 51C1 MOVF usbrequesterrorflag, W, BANKED
  3771. 26EA E10E BNZ 0x2708
  3772. 367: usb_send_rom(); // Send first part of packet right away, the rest is handled by the EP0 IN handler.
  3773. 26EC DB65 RCALL usb_send_rom
  3774. 368: usb_set_in_handler(0, usb_send_rom);
  3775. 26EE 0EB8 MOVLW 0xB8
  3776. 26F0 6EE6 MOVWF POSTINC1, ACCESS
  3777. 26F2 0E2D MOVLW 0x2D
  3778. 26F4 6EE6 MOVWF POSTINC1, ACCESS
  3779. 26F6 0E00 MOVLW 0x0
  3780. 26F8 6EE6 MOVWF POSTINC1, ACCESS
  3781. 26FA 6AE6 CLRF POSTINC1, ACCESS
  3782. 26FC DAD9 RCALL usb_set_in_handler
  3783. 26FE 52E5 MOVF POSTDEC1, F, ACCESS
  3784. 2700 52E5 MOVF POSTDEC1, F, ACCESS
  3785. 2702 52E5 MOVF POSTDEC1, F, ACCESS
  3786. 2704 52E5 MOVF POSTDEC1, F, ACCESS
  3787. 369: } else {
  3788. 2706 D001 BRA 0x270A
  3789. 370: usb_RequestError();
  3790. 2708 DB33 RCALL usb_RequestError
  3791. 371: }
  3792. 372:
  3793. 373: break;
  3794. 270A D045 BRA 0x2796
  3795. 374: case USB_REQUEST_GET_CONFIGURATION:
  3796. 375: EP0_Inbdp->BDADDR[0] = usb_current_cfg;
  3797. 270C C0BA MOVFF EP0_Inbdp, FSR0L
  3798. 270E FFE9 NOP
  3799. 2710 C0BB MOVFF 0xBB, FSR0H
  3800. 2712 FFEA NOP
  3801. 2714 0E02 MOVLW 0x2
  3802. 2716 26E9 ADDWF FSR0L, F, ACCESS
  3803. 2718 0E00 MOVLW 0x0
  3804. 271A 22EA ADDWFC FSR0H, F, ACCESS
  3805. 271C 50EE MOVF POSTINC0, W, ACCESS
  3806. 271E CFEF MOVFF INDF0, FSR0H
  3807. 2720 FFEA NOP
  3808. 2722 6EE9 MOVWF FSR0L, ACCESS
  3809. 2724 C0B3 MOVFF usb_current_cfg, INDF0
  3810. 2726 FFEF NOP
  3811. 376: usb_ack_dat1(1);
  3812. 2728 0E01 MOVLW 0x1
  3813. 272A 6EE6 MOVWF POSTINC1, ACCESS
  3814. 272C 6AE6 CLRF POSTINC1, ACCESS
  3815. 272E DB00 RCALL usb_ack_dat1
  3816. 2730 52E5 MOVF POSTDEC1, F, ACCESS
  3817. 2732 52E5 MOVF POSTDEC1, F, ACCESS
  3818. 377: break;
  3819. 2734 D030 BRA 0x2796
  3820. 378:
  3821. 379: case USB_REQUEST_SET_CONFIGURATION:
  3822. 380: if (USB_NUM_CONFIGURATIONS >= packet[USB_wValue]) {
  3823. 2736 0E01 MOVLW 0x1
  3824. 2738 6E14 MOVWF __tmp_0, ACCESS
  3825. 273A CFDE MOVFF POSTINC2, FSR0L
  3826. 273C FFE9 NOP
  3827. 273E CFDD MOVFF POSTDEC2, FSR0H
  3828. 2740 FFEA NOP
  3829. 2742 0E02 MOVLW 0x2
  3830. 2744 26E9 ADDWF FSR0L, F, ACCESS
  3831. 2746 0E00 MOVLW 0x0
  3832. 2748 22EA ADDWFC FSR0H, F, ACCESS
  3833. 274A 50EF MOVF INDF0, W, ACCESS
  3834. 274C 5C14 SUBWF __tmp_0, W, ACCESS
  3835. 274E E320 BNC 0x2790
  3836. 381: // TODO: Support multiple configurations
  3837. 382: /* Configure endpoints (USB_UEPn - registers) */
  3838. 383: usb_current_cfg = packet[USB_wValue];
  3839. 2750 CFDE MOVFF POSTINC2, FSR0L
  3840. 2752 FFE9 NOP
  3841. 2754 CFDD MOVFF POSTDEC2, FSR0H
  3842. 2756 FFEA NOP
  3843. 2758 0E02 MOVLW 0x2
  3844. 275A 26E9 ADDWF FSR0L, F, ACCESS
  3845. 275C 0E00 MOVLW 0x0
  3846. 275E 22EA ADDWFC FSR0H, F, ACCESS
  3847. 2760 50EF MOVF INDF0, W, ACCESS
  3848. 2762 0100 MOVLB 0x0
  3849. 2764 6FB3 MOVWF usb_current_cfg, BANKED
  3850. 2766 6BB4 CLRF 0xB4, BANKED
  3851. 384: if (usb_current_cfg != 0) {
  3852. 2768 0100 MOVLB 0x0
  3853. 276A 51B3 MOVF usb_current_cfg, W, BANKED
  3854. 276C 11B4 IORWF 0xB4, W, BANKED
  3855. 276E E006 BZ 0x277C
  3856. 385:
  3857. 386: // JTR user_configured_init major addition. This is a CALLBACK to the USER when the device is enumerated.
  3858. 387: // This is when we setup non EP0 endpoints.
  3859. 388: // TODO: This really could be a function pointer
  3860. 389:
  3861. 390: usb_device_state = CONFIGURED_STATE;
  3862. 2770 0100 MOVLB 0x0
  3863. 2772 0E20 MOVLW 0x20
  3864. 2774 6FB5 MOVWF usb_device_state, BANKED
  3865. 391: user_configured_init();
  3866. 2776 ECBA CALL 0x3B74, 0
  3867. 2778 F01D NOP
  3868. 392: } else {
  3869. 277A D003 BRA 0x2782
  3870. 393: usb_device_state = ADDRESS_STATE;
  3871. 277C 0100 MOVLB 0x0
  3872. 277E 0E10 MOVLW 0x10
  3873. 2780 6FB5 MOVWF usb_device_state, BANKED
  3874. 394: }
  3875. 395:
  3876. 396: usb_ack_dat1(0);
  3877. 2782 0E00 MOVLW 0x0
  3878. 2784 6EE6 MOVWF POSTINC1, ACCESS
  3879. 2786 6AE6 CLRF POSTINC1, ACCESS
  3880. 2788 DAD3 RCALL usb_ack_dat1
  3881. 278A 52E5 MOVF POSTDEC1, F, ACCESS
  3882. 278C 52E5 MOVF POSTDEC1, F, ACCESS
  3883. 397:
  3884. 398: } else
  3885. 278E D001 BRA 0x2792
  3886. 399: usb_RequestError();
  3887. 2790 DAEF RCALL usb_RequestError
  3888. 400: break;
  3889. 2792 D001 BRA 0x2796
  3890. 401:
  3891. 402: case USB_REQUEST_SET_DESCRIPTOR:
  3892. 403: default:
  3893. 404: usb_RequestError();
  3894. 2794 DAED RCALL usb_RequestError
  3895. 405: }
  3896. 406: }
  3897. 2796 0E04 MOVLW 0x4
  3898. 2798 5CE1 SUBWF FSR1L, W, ACCESS
  3899. 279A E202 BC 0x27A0
  3900. 279C 6AE1 CLRF FSR1L, ACCESS
  3901. 279E 52E5 MOVF POSTDEC1, F, ACCESS
  3902. 27A0 6EE1 MOVWF FSR1L, ACCESS
  3903. 27A2 52E5 MOVF POSTDEC1, F, ACCESS
  3904. 27A4 CFE7 MOVFF INDF1, FSR2L
  3905. 27A6 FFD9 NOP
  3906. 27A8 0012 RETURN 0
  3907. 407:
  3908. 408: void usb_handle_StandardInterfaceRequest(BDentry *bdp) {
  3909. 27AA CFD9 MOVFF FSR2L, POSTINC1
  3910. 27AC FFE6 NOP
  3911. 27AE CFE1 MOVFF FSR1L, FSR2L
  3912. 27B0 FFD9 NOP
  3913. 27B2 0E02 MOVLW 0x2
  3914. 27B4 26E1 ADDWF FSR1L, F, ACCESS
  3915. 409: BYTE *packet = bdp->BDADDR;
  3916. 27B6 0EFD MOVLW 0xFD
  3917. 27B8 CFDB MOVFF PLUSW2, FSR0L
  3918. 27BA FFE9 NOP
  3919. 27BC 0EFE MOVLW 0xFE
  3920. 27BE CFDB MOVFF PLUSW2, FSR0H
  3921. 27C0 FFEA NOP
  3922. 27C2 0E02 MOVLW 0x2
  3923. 27C4 26E9 ADDWF FSR0L, F, ACCESS
  3924. 27C6 0E00 MOVLW 0x0
  3925. 27C8 22EA ADDWFC FSR0H, F, ACCESS
  3926. 27CA CFEE MOVFF POSTINC0, POSTINC2
  3927. 27CC FFDE NOP
  3928. 27CE CFED MOVFF POSTDEC0, POSTDEC2
  3929. 27D0 FFDD NOP
  3930. 410:
  3931. 411: switch (packet[USB_bRequest]) {
  3932. 27D2 CFDE MOVFF POSTINC2, FSR0L
  3933. 27D4 FFE9 NOP
  3934. 27D6 CFDD MOVFF POSTDEC2, FSR0H
  3935. 27D8 FFEA NOP
  3936. 27DA 0E01 MOVLW 0x1
  3937. 27DC 26E9 ADDWF FSR0L, F, ACCESS
  3938. 27DE 0E00 MOVLW 0x0
  3939. 27E0 22EA ADDWFC FSR0H, F, ACCESS
  3940. 27E2 50EF MOVF INDF0, W, ACCESS
  3941. 27E4 0A01 XORLW 0x1
  3942. 27E6 E073 BZ 0x28CE
  3943. 27E8 0A02 XORLW 0x2
  3944. 27EA E071 BZ 0x28CE
  3945. 27EC 0A08 XORLW 0x8
  3946. 27EE E04E BZ 0x288C
  3947. 27F0 0A01 XORLW 0x1
  3948. 27F2 E028 BZ 0x2844
  3949. 27F4 0A0A XORLW 0xA
  3950. 27F6 E001 BZ 0x27FA
  3951. 27F8 D06A BRA 0x28CE
  3952. 412: case USB_REQUEST_GET_STATUS:
  3953. 413: EP0_Inbdp->BDADDR[0] = 0x00;
  3954. 27FA C0BA MOVFF EP0_Inbdp, FSR0L
  3955. 27FC FFE9 NOP
  3956. 27FE C0BB MOVFF 0xBB, FSR0H
  3957. 2800 FFEA NOP
  3958. 2802 0E02 MOVLW 0x2
  3959. 2804 26E9 ADDWF FSR0L, F, ACCESS
  3960. 2806 0E00 MOVLW 0x0
  3961. 2808 22EA ADDWFC FSR0H, F, ACCESS
  3962. 280A 50EE MOVF POSTINC0, W, ACCESS
  3963. 280C CFEF MOVFF INDF0, FSR0H
  3964. 280E FFEA NOP
  3965. 2810 6EE9 MOVWF FSR0L, ACCESS
  3966. 2812 6AEF CLRF INDF0, ACCESS
  3967. 414: EP0_Inbdp->BDADDR[1] = 0x00;
  3968. 2814 C0BA MOVFF EP0_Inbdp, FSR0L
  3969. 2816 FFE9 NOP
  3970. 2818 C0BB MOVFF 0xBB, FSR0H
  3971. 281A FFEA NOP
  3972. 281C 0E02 MOVLW 0x2
  3973. 281E 26E9 ADDWF FSR0L, F, ACCESS
  3974. 2820 0E00 MOVLW 0x0
  3975. 2822 22EA ADDWFC FSR0H, F, ACCESS
  3976. 2824 50EE MOVF POSTINC0, W, ACCESS
  3977. 2826 CFEF MOVFF INDF0, FSR0H
  3978. 2828 FFEA NOP
  3979. 282A 6EE9 MOVWF FSR0L, ACCESS
  3980. 282C 0E01 MOVLW 0x1
  3981. 282E 26E9 ADDWF FSR0L, F, ACCESS
  3982. 2830 0E00 MOVLW 0x0
  3983. 2832 22EA ADDWFC FSR0H, F, ACCESS
  3984. 2834 6AEF CLRF INDF0, ACCESS
  3985. 415: usb_ack_dat1(2);
  3986. 2836 0E02 MOVLW 0x2
  3987. 2838 6EE6 MOVWF POSTINC1, ACCESS
  3988. 283A 6AE6 CLRF POSTINC1, ACCESS
  3989. 283C DA79 RCALL usb_ack_dat1
  3990. 283E 52E5 MOVF POSTDEC1, F, ACCESS
  3991. 2840 52E5 MOVF POSTDEC1, F, ACCESS
  3992. 416: break;
  3993. 2842 D046 BRA 0x28D0
  3994. 417: case USB_REQUEST_GET_INTERFACE:
  3995. 418: if (USB_NUM_INTERFACES > packet[USB_bInterface]) {
  3996. 2844 0E02 MOVLW 0x2
  3997. 2846 6E14 MOVWF __tmp_0, ACCESS
  3998. 2848 CFDE MOVFF POSTINC2, FSR0L
  3999. 284A FFE9 NOP
  4000. 284C CFDD MOVFF POSTDEC2, FSR0H
  4001. 284E FFEA NOP
  4002. 2850 0E04 MOVLW 0x4
  4003. 2852 26E9 ADDWF FSR0L, F, ACCESS
  4004. 2854 0E00 MOVLW 0x0
  4005. 2856 22EA ADDWFC FSR0H, F, ACCESS
  4006. 2858 50EF MOVF INDF0, W, ACCESS
  4007. 285A 80D8 BSF STATUS, 0, ACCESS
  4008. 285C 5414 SUBFWB __tmp_0, W, ACCESS
  4009. 285E E214 BC 0x2888
  4010. 419: // TODO: Implement alternative interfaces, or move responsibility to class/vendor functions.
  4011. 420: EP0_Inbdp->BDADDR[0] = 0;
  4012. 2860 C0BA MOVFF EP0_Inbdp, FSR0L
  4013. 2862 FFE9 NOP
  4014. 2864 C0BB MOVFF 0xBB, FSR0H
  4015. 2866 FFEA NOP
  4016. 2868 0E02 MOVLW 0x2
  4017. 286A 26E9 ADDWF FSR0L, F, ACCESS
  4018. 286C 0E00 MOVLW 0x0
  4019. 286E 22EA ADDWFC FSR0H, F, ACCESS
  4020. 2870 50EE MOVF POSTINC0, W, ACCESS
  4021. 2872 CFEF MOVFF INDF0, FSR0H
  4022. 2874 FFEA NOP
  4023. 2876 6EE9 MOVWF FSR0L, ACCESS
  4024. 2878 6AEF CLRF INDF0, ACCESS
  4025. 421: usb_ack_dat1(1);
  4026. 287A 0E01 MOVLW 0x1
  4027. 287C 6EE6 MOVWF POSTINC1, ACCESS
  4028. 287E 6AE6 CLRF POSTINC1, ACCESS
  4029. 2880 DA57 RCALL usb_ack_dat1
  4030. 2882 52E5 MOVF POSTDEC1, F, ACCESS
  4031. 2884 52E5 MOVF POSTDEC1, F, ACCESS
  4032. 422: } else
  4033. 2886 D001 BRA 0x288A
  4034. 423: usb_RequestError();
  4035. 2888 DA73 RCALL usb_RequestError
  4036. 424: break;
  4037. 288A D022 BRA 0x28D0
  4038. 425: case USB_REQUEST_SET_INTERFACE:
  4039. 426: if (USB_NUM_INTERFACES > packet[USB_bInterface] && 0u == packet[USB_wValue]) {
  4040. 288C 0E02 MOVLW 0x2
  4041. 288E 6E14 MOVWF __tmp_0, ACCESS
  4042. 2890 CFDE MOVFF POSTINC2, FSR0L
  4043. 2892 FFE9 NOP
  4044. 2894 CFDD MOVFF POSTDEC2, FSR0H
  4045. 2896 FFEA NOP
  4046. 2898 0E04 MOVLW 0x4
  4047. 289A 26E9 ADDWF FSR0L, F, ACCESS
  4048. 289C 0E00 MOVLW 0x0
  4049. 289E 22EA ADDWFC FSR0H, F, ACCESS
  4050. 28A0 50EF MOVF INDF0, W, ACCESS
  4051. 28A2 80D8 BSF STATUS, 0, ACCESS
  4052. 28A4 5414 SUBFWB __tmp_0, W, ACCESS
  4053. 28A6 E211 BC 0x28CA
  4054. 28A8 CFDE MOVFF POSTINC2, FSR0L
  4055. 28AA FFE9 NOP
  4056. 28AC CFDD MOVFF POSTDEC2, FSR0H
  4057. 28AE FFEA NOP
  4058. 28B0 0E02 MOVLW 0x2
  4059. 28B2 26E9 ADDWF FSR0L, F, ACCESS
  4060. 28B4 0E00 MOVLW 0x0
  4061. 28B6 22EA ADDWFC FSR0H, F, ACCESS
  4062. 28B8 50EF MOVF INDF0, W, ACCESS
  4063. 28BA E107 BNZ 0x28CA
  4064. 427: // TODO: Implement alternative interfaces...
  4065. 428: usb_ack_dat1(0);
  4066. 28BC 0E00 MOVLW 0x0
  4067. 28BE 6EE6 MOVWF POSTINC1, ACCESS
  4068. 28C0 6AE6 CLRF POSTINC1, ACCESS
  4069. 28C2 DA36 RCALL usb_ack_dat1
  4070. 28C4 52E5 MOVF POSTDEC1, F, ACCESS
  4071. 28C6 52E5 MOVF POSTDEC1, F, ACCESS
  4072. 429: } else
  4073. 28C8 D001 BRA 0x28CC
  4074. 430: usb_RequestError();
  4075. 28CA DA52 RCALL usb_RequestError
  4076. 431: break;
  4077. 28CC D001 BRA 0x28D0
  4078. 432: case USB_REQUEST_CLEAR_FEATURE: // JTR N/A for interface
  4079. 433: case USB_REQUEST_SET_FEATURE: // This is correct and finished code.
  4080. 434: default:
  4081. 435: usb_RequestError();
  4082. 28CE DA50 RCALL usb_RequestError
  4083. 436: }
  4084. 437: }
  4085. 28D0 0E02 MOVLW 0x2
  4086. 28D2 5CE1 SUBWF FSR1L, W, ACCESS
  4087. 28D4 E202 BC 0x28DA
  4088. 28D6 6AE1 CLRF FSR1L, ACCESS
  4089. 28D8 52E5 MOVF POSTDEC1, F, ACCESS
  4090. 28DA 6EE1 MOVWF FSR1L, ACCESS
  4091. 28DC 52E5 MOVF POSTDEC1, F, ACCESS
  4092. 28DE CFE7 MOVFF INDF1, FSR2L
  4093. 28E0 FFD9 NOP
  4094. 28E2 0012 RETURN 0
  4095. 438:
  4096. 439: void usb_handle_StandardEndpointRequest(BDentry *bdp) {
  4097. 28E4 CFD9 MOVFF FSR2L, POSTINC1
  4098. 28E6 FFE6 NOP
  4099. 28E8 CFE1 MOVFF FSR1L, FSR2L
  4100. 28EA FFD9 NOP
  4101. 28EC 0E08 MOVLW 0x8
  4102. 28EE 26E1 ADDWF FSR1L, F, ACCESS
  4103. 440: BYTE *packet;
  4104. 441: BYTE epnum;
  4105. 442: BYTE dir;
  4106. 443: BDentry *epbd;
  4107. 444: usb_uep_t *pUEP;
  4108. 445:
  4109. 446: packet = bdp->BDADDR;
  4110. 28F0 0EFD MOVLW 0xFD
  4111. 28F2 CFDB MOVFF PLUSW2, FSR0L
  4112. 28F4 FFE9 NOP
  4113. 28F6 0EFE MOVLW 0xFE
  4114. 28F8 CFDB MOVFF PLUSW2, FSR0H
  4115. 28FA FFEA NOP
  4116. 28FC 0E02 MOVLW 0x2
  4117. 28FE 26E9 ADDWF FSR0L, F, ACCESS
  4118. 2900 0E00 MOVLW 0x0
  4119. 2902 22EA ADDWFC FSR0H, F, ACCESS
  4120. 2904 CFEE MOVFF POSTINC0, POSTINC2
  4121. 2906 FFDE NOP
  4122. 2908 CFED MOVFF POSTDEC0, POSTDEC2
  4123. 290A FFDD NOP
  4124. 447:
  4125. 448: switch (packet[USB_bRequest]) {
  4126. 290C CFDE MOVFF POSTINC2, FSR0L
  4127. 290E FFE9 NOP
  4128. 2910 CFDD MOVFF POSTDEC2, FSR0H
  4129. 2912 FFEA NOP
  4130. 2914 0E01 MOVLW 0x1
  4131. 2916 26E9 ADDWF FSR0L, F, ACCESS
  4132. 2918 0E00 MOVLW 0x0
  4133. 291A 22EA ADDWFC FSR0H, F, ACCESS
  4134. 291C 50EF MOVF INDF0, W, ACCESS
  4135. 291E 0A0C XORLW 0xC
  4136. 2920 E101 BNZ 0x2924
  4137. 2922 D12D BRA 0x2B7E
  4138. 2924 0A0F XORLW 0xF
  4139. 2926 E101 BNZ 0x292A
  4140. 2928 D0E8 BRA 0x2AFA
  4141. 292A 0A02 XORLW 0x2
  4142. 292C E073 BZ 0x2A14
  4143. 292E 0A01 XORLW 0x1
  4144. 2930 E001 BZ 0x2934
  4145. 2932 D125 BRA 0x2B7E
  4146. 449: case USB_REQUEST_GET_STATUS:
  4147. 450: EP0_Inbdp->BDADDR[0] = 0x00; // Assume no stall
  4148. 2934 C0BA MOVFF EP0_Inbdp, FSR0L
  4149. 2936 FFE9 NOP
  4150. 2938 C0BB MOVFF 0xBB, FSR0H
  4151. 293A FFEA NOP
  4152. 293C 0E02 MOVLW 0x2
  4153. 293E 26E9 ADDWF FSR0L, F, ACCESS
  4154. 2940 0E00 MOVLW 0x0
  4155. 2942 22EA ADDWFC FSR0H, F, ACCESS
  4156. 2944 50EE MOVF POSTINC0, W, ACCESS
  4157. 2946 CFEF MOVFF INDF0, FSR0H
  4158. 2948 FFEA NOP
  4159. 294A 6EE9 MOVWF FSR0L, ACCESS
  4160. 294C 6AEF CLRF INDF0, ACCESS
  4161. 451: EP0_Inbdp->BDADDR[1] = 0x00; // Same for stall or not
  4162. 294E C0BA MOVFF EP0_Inbdp, FSR0L
  4163. 2950 FFE9 NOP
  4164. 2952 C0BB MOVFF 0xBB, FSR0H
  4165. 2954 FFEA NOP
  4166. 2956 0E02 MOVLW 0x2
  4167. 2958 26E9 ADDWF FSR0L, F, ACCESS
  4168. 295A 0E00 MOVLW 0x0
  4169. 295C 22EA ADDWFC FSR0H, F, ACCESS
  4170. 295E 50EE MOVF POSTINC0, W, ACCESS
  4171. 2960 CFEF MOVFF INDF0, FSR0H
  4172. 2962 FFEA NOP
  4173. 2964 6EE9 MOVWF FSR0L, ACCESS
  4174. 2966 0E01 MOVLW 0x1
  4175. 2968 26E9 ADDWF FSR0L, F, ACCESS
  4176. 296A 0E00 MOVLW 0x0
  4177. 296C 22EA ADDWFC FSR0H, F, ACCESS
  4178. 296E 6AEF CLRF INDF0, ACCESS
  4179. 452: epnum = packet[USB_wIndex] & 0x0F;
  4180. 2970 CFDE MOVFF POSTINC2, FSR0L
  4181. 2972 FFE9 NOP
  4182. 2974 CFDD MOVFF POSTDEC2, FSR0H
  4183. 2976 FFEA NOP
  4184. 2978 0E04 MOVLW 0x4
  4185. 297A 26E9 ADDWF FSR0L, F, ACCESS
  4186. 297C 0E00 MOVLW 0x0
  4187. 297E 22EA ADDWFC FSR0H, F, ACCESS
  4188. 2980 50EF MOVF INDF0, W, ACCESS
  4189. 2982 0B0F ANDLW 0xF
  4190. 2984 6EE7 MOVWF INDF1, ACCESS
  4191. 2986 0E02 MOVLW 0x2
  4192. 2988 CFE7 MOVFF INDF1, PLUSW2
  4193. 298A FFDB NOP
  4194. 453: dir = packet[USB_wIndex] >> 7;
  4195. 298C CFDE MOVFF POSTINC2, FSR0L
  4196. 298E FFE9 NOP
  4197. 2990 CFDD MOVFF POSTDEC2, FSR0H
  4198. 2992 FFEA NOP
  4199. 2994 0E04 MOVLW 0x4
  4200. 2996 26E9 ADDWF FSR0L, F, ACCESS
  4201. 2998 0E00 MOVLW 0x0
  4202. 299A 22EA ADDWFC FSR0H, F, ACCESS
  4203. 299C 50EF MOVF INDF0, W, ACCESS
  4204. 299E 44E8 RLNCF WREG, W, ACCESS
  4205. 29A0 0B01 ANDLW 0x1
  4206. 29A2 6EE7 MOVWF INDF1, ACCESS
  4207. 29A4 0E03 MOVLW 0x3
  4208. 29A6 CFE7 MOVFF INDF1, PLUSW2
  4209. 29A8 FFDB NOP
  4210. 454: epbd = &usb_bdt[USB_CALC_BD(epnum, dir, USB_PP_EVEN)];
  4211. 29AA 0E03 MOVLW 0x3
  4212. 29AC CFDB MOVFF PLUSW2, POSTINC1
  4213. 29AE FFE6 NOP
  4214. 29B0 0E02 MOVLW 0x2
  4215. 29B2 50DB MOVF PLUSW2, W, ACCESS
  4216. 29B4 24E8 ADDWF WREG, W, ACCESS
  4217. 29B6 52E5 MOVF POSTDEC1, F, ACCESS
  4218. 29B8 24E7 ADDWF INDF1, W, ACCESS
  4219. 29BA 0D04 MULLW 0x4
  4220. 29BC CFF3 MOVFF PRODL, __tmp_0
  4221. 29BE F014 NOP
  4222. 29C0 CFF4 MOVFF PRODH, digit_cnt
  4223. 29C2 F015 NOP
  4224. 29C4 0E00 MOVLW 0x0
  4225. 29C6 2614 ADDWF __tmp_0, F, ACCESS
  4226. 29C8 0E04 MOVLW 0x4
  4227. 29CA 2215 ADDWFC digit_cnt, F, ACCESS
  4228. 29CC 0E04 MOVLW 0x4
  4229. 29CE C014 MOVFF __tmp_0, PLUSW2
  4230. 29D0 FFDB NOP
  4231. 29D2 0E05 MOVLW 0x5
  4232. 29D4 C015 MOVFF digit_cnt, PLUSW2
  4233. 29D6 FFDB NOP
  4234. 455: if (epbd->BDSTAT &= ~BSTALL)
  4235. 29D8 0E04 MOVLW 0x4
  4236. 29DA CFDB MOVFF PLUSW2, FSR0L
  4237. 29DC FFE9 NOP
  4238. 29DE 0E05 MOVLW 0x5
  4239. 29E0 CFDB MOVFF PLUSW2, FSR0H
  4240. 29E2 FFEA NOP
  4241. 29E4 94EF BCF INDF0, 2, ACCESS
  4242. 29E6 50EF MOVF INDF0, W, ACCESS
  4243. 29E8 E00E BZ 0x2A06
  4244. 456: EP0_Inbdp->BDADDR[0] = 0x01; // EVEN BD is stall flag set?
  4245. 29EA C0BA MOVFF EP0_Inbdp, FSR0L
  4246. 29EC FFE9 NOP
  4247. 29EE C0BB MOVFF 0xBB, FSR0H
  4248. 29F0 FFEA NOP
  4249. 29F2 0E02 MOVLW 0x2
  4250. 29F4 26E9 ADDWF FSR0L, F, ACCESS
  4251. 29F6 0E00 MOVLW 0x0
  4252. 29F8 22EA ADDWFC FSR0H, F, ACCESS
  4253. 29FA 50EE MOVF POSTINC0, W, ACCESS
  4254. 29FC CFEF MOVFF INDF0, FSR0H
  4255. 29FE FFEA NOP
  4256. 2A00 6EE9 MOVWF FSR0L, ACCESS
  4257. 2A02 0E01 MOVLW 0x1
  4258. 2A04 6EEF MOVWF INDF0, ACCESS
  4259. 457: //epbd = &usb_bdt[USB_CALC_BD(epnum, dir, USB_PP_ODD)];
  4260. 458: //if (epbd->BDSTAT &= ~BSTALL)
  4261. 459: // rbdp->BDADDR[0] = 0x01; // ODD BD is stall flag set?
  4262. 460: usb_ack_dat1(2);
  4263. 2A06 0E02 MOVLW 0x2
  4264. 2A08 6EE6 MOVWF POSTINC1, ACCESS
  4265. 2A0A 6AE6 CLRF POSTINC1, ACCESS
  4266. 2A0C D991 RCALL usb_ack_dat1
  4267. 2A0E 52E5 MOVF POSTDEC1, F, ACCESS
  4268. 2A10 52E5 MOVF POSTDEC1, F, ACCESS
  4269. 461: break;
  4270. 2A12 D0B6 BRA 0x2B80
  4271. 462:
  4272. 463: case USB_REQUEST_CLEAR_FEATURE:
  4273. 464: // As this is really is an application event and there
  4274. 465: // should be a call back and protocol for handling the
  4275. 466: // possible lost of a data packet.
  4276. 467: // TODO: ping-ping support.
  4277. 468:
  4278. 469: epnum = packet[USB_wIndex] & 0x0F; // JTR Added V0.2 after microchip stuff up with their documentation.
  4279. 2A14 CFDE MOVFF POSTINC2, FSR0L
  4280. 2A16 FFE9 NOP
  4281. 2A18 CFDD MOVFF POSTDEC2, FSR0H
  4282. 2A1A FFEA NOP
  4283. 2A1C 0E04 MOVLW 0x4
  4284. 2A1E 26E9 ADDWF FSR0L, F, ACCESS
  4285. 2A20 0E00 MOVLW 0x0
  4286. 2A22 22EA ADDWFC FSR0H, F, ACCESS
  4287. 2A24 50EF MOVF INDF0, W, ACCESS
  4288. 2A26 0B0F ANDLW 0xF
  4289. 2A28 6EE7 MOVWF INDF1, ACCESS
  4290. 2A2A 0E02 MOVLW 0x2
  4291. 2A2C CFE7 MOVFF INDF1, PLUSW2
  4292. 2A2E FFDB NOP
  4293. 470: pUEP = USB_UEP;
  4294. 2A30 50D9 MOVF FSR2L, W, ACCESS
  4295. 2A32 0F06 ADDLW 0x6
  4296. 2A34 6EE9 MOVWF FSR0L, ACCESS
  4297. 2A36 CFDA MOVFF FSR2H, FSR0H
  4298. 2A38 FFEA NOP
  4299. 2A3A 0E70 MOVLW 0x70
  4300. 2A3C 6EEE MOVWF POSTINC0, ACCESS
  4301. 2A3E 0E0F MOVLW 0xF
  4302. 2A40 6EED MOVWF POSTDEC0, ACCESS
  4303. 471: pUEP += epnum;
  4304. 2A42 0E02 MOVLW 0x2
  4305. 2A44 50DB MOVF PLUSW2, W, ACCESS
  4306. 2A46 6E14 MOVWF __tmp_0, ACCESS
  4307. 2A48 6A15 CLRF digit_cnt, ACCESS
  4308. 2A4A 50D9 MOVF FSR2L, W, ACCESS
  4309. 2A4C 0F06 ADDLW 0x6
  4310. 2A4E 6EE9 MOVWF FSR0L, ACCESS
  4311. 2A50 CFDA MOVFF FSR2H, FSR0H
  4312. 2A52 FFEA NOP
  4313. 2A54 5014 MOVF __tmp_0, W, ACCESS
  4314. 2A56 26EE ADDWF POSTINC0, F, ACCESS
  4315. 2A58 5015 MOVF digit_cnt, W, ACCESS
  4316. 2A5A 22ED ADDWFC POSTDEC0, F, ACCESS
  4317. 472: *pUEP &= ~USB_UEP_EPSTALL;
  4318. 2A5C 0E06 MOVLW 0x6
  4319. 2A5E CFDB MOVFF PLUSW2, FSR0L
  4320. 2A60 FFE9 NOP
  4321. 2A62 0E07 MOVLW 0x7
  4322. 2A64 CFDB MOVFF PLUSW2, FSR0H
  4323. 2A66 FFEA NOP
  4324. 2A68 90EF BCF INDF0, 0, ACCESS
  4325. 473:
  4326. 474: dir = packet[USB_wIndex] >> 7;
  4327. 2A6A CFDE MOVFF POSTINC2, FSR0L
  4328. 2A6C FFE9 NOP
  4329. 2A6E CFDD MOVFF POSTDEC2, FSR0H
  4330. 2A70 FFEA NOP
  4331. 2A72 0E04 MOVLW 0x4
  4332. 2A74 26E9 ADDWF FSR0L, F, ACCESS
  4333. 2A76 0E00 MOVLW 0x0
  4334. 2A78 22EA ADDWFC FSR0H, F, ACCESS
  4335. 2A7A 50EF MOVF INDF0, W, ACCESS
  4336. 2A7C 44E8 RLNCF WREG, W, ACCESS
  4337. 2A7E 0B01 ANDLW 0x1
  4338. 2A80 6EE7 MOVWF INDF1, ACCESS
  4339. 2A82 0E03 MOVLW 0x3
  4340. 2A84 CFE7 MOVFF INDF1, PLUSW2
  4341. 2A86 FFDB NOP
  4342. 475: epbd = &usb_bdt[USB_CALC_BD(epnum, dir, USB_PP_EVEN)];
  4343. 2A88 0E03 MOVLW 0x3
  4344. 2A8A CFDB MOVFF PLUSW2, POSTINC1
  4345. 2A8C FFE6 NOP
  4346. 2A8E 0E02 MOVLW 0x2
  4347. 2A90 50DB MOVF PLUSW2, W, ACCESS
  4348. 2A92 24E8 ADDWF WREG, W, ACCESS
  4349. 2A94 52E5 MOVF POSTDEC1, F, ACCESS
  4350. 2A96 24E7 ADDWF INDF1, W, ACCESS
  4351. 2A98 0D04 MULLW 0x4
  4352. 2A9A CFF3 MOVFF PRODL, __tmp_0
  4353. 2A9C F014 NOP
  4354. 2A9E CFF4 MOVFF PRODH, digit_cnt
  4355. 2AA0 F015 NOP
  4356. 2AA2 0E00 MOVLW 0x0
  4357. 2AA4 2614 ADDWF __tmp_0, F, ACCESS
  4358. 2AA6 0E04 MOVLW 0x4
  4359. 2AA8 2215 ADDWFC digit_cnt, F, ACCESS
  4360. 2AAA 0E04 MOVLW 0x4
  4361. 2AAC C014 MOVFF __tmp_0, PLUSW2
  4362. 2AAE FFDB NOP
  4363. 2AB0 0E05 MOVLW 0x5
  4364. 2AB2 C015 MOVFF digit_cnt, PLUSW2
  4365. 2AB4 FFDB NOP
  4366. 476: epbd->BDSTAT &= ~BSTALL;
  4367. 2AB6 0E04 MOVLW 0x4
  4368. 2AB8 CFDB MOVFF PLUSW2, FSR0L
  4369. 2ABA FFE9 NOP
  4370. 2ABC 0E05 MOVLW 0x5
  4371. 2ABE CFDB MOVFF PLUSW2, FSR0H
  4372. 2AC0 FFEA NOP
  4373. 2AC2 94EF BCF INDF0, 2, ACCESS
  4374. 477: if (dir) epbd->BDSTAT |= DTS; // JTR added IN EP set DTS as it will be toggled to zero next transfer
  4375. 2AC4 0E03 MOVLW 0x3
  4376. 2AC6 50DB MOVF PLUSW2, W, ACCESS
  4377. 2AC8 E007 BZ 0x2AD8
  4378. 2ACA 0E04 MOVLW 0x4
  4379. 2ACC CFDB MOVFF PLUSW2, FSR0L
  4380. 2ACE FFE9 NOP
  4381. 2AD0 0E05 MOVLW 0x5
  4382. 2AD2 CFDB MOVFF PLUSW2, FSR0H
  4383. 2AD4 FFEA NOP
  4384. 2AD6 8CEF BSF INDF0, 6, ACCESS
  4385. 478: if (0 == dir) epbd->BDSTAT &= ~DTS; // JTR added
  4386. 2AD8 0E03 MOVLW 0x3
  4387. 2ADA 50DB MOVF PLUSW2, W, ACCESS
  4388. 2ADC E107 BNZ 0x2AEC
  4389. 2ADE 0E04 MOVLW 0x4
  4390. 2AE0 CFDB MOVFF PLUSW2, FSR0L
  4391. 2AE2 FFE9 NOP
  4392. 2AE4 0E05 MOVLW 0x5
  4393. 2AE6 CFDB MOVFF PLUSW2, FSR0H
  4394. 2AE8 FFEA NOP
  4395. 2AEA 9CEF BCF INDF0, 6, ACCESS
  4396. 479:
  4397. 480: // JTR this pointless ATM. If ping-pong is enabled then you need to track PPBI
  4398. 481: // and set up ODD and EVEN BDs in respect to this. See complicated system in
  4399. 482: // microchip stack >= 2.8
  4400. 483:
  4401. 484: // epbd = &usb_bdt[USB_CALC_BD(epnum, dir, USB_PP_ODD)];
  4402. 485: // epbd->BDSTAT &= ~BSTALL;
  4403. 486: // if (dir) epbd->BDSTAT |= DTS; // JTR added
  4404. 487: // if (0 == dir) epbd->BDSTAT &= ~DTS; // JTR added
  4405. 488:
  4406. 489:
  4407. 490: usb_ack_dat1(0);
  4408. 2AEC 0E00 MOVLW 0x0
  4409. 2AEE 6EE6 MOVWF POSTINC1, ACCESS
  4410. 2AF0 6AE6 CLRF POSTINC1, ACCESS
  4411. 2AF2 D91E RCALL usb_ack_dat1
  4412. 2AF4 52E5 MOVF POSTDEC1, F, ACCESS
  4413. 2AF6 52E5 MOVF POSTDEC1, F, ACCESS
  4414. 491: break;
  4415. 2AF8 D043 BRA 0x2B80
  4416. 492:
  4417. 493:
  4418. 494: case USB_REQUEST_SET_FEATURE:
  4419. 495: epnum = packet[USB_wIndex] & 0x0F;
  4420. 2AFA CFDE MOVFF POSTINC2, FSR0L
  4421. 2AFC FFE9 NOP
  4422. 2AFE CFDD MOVFF POSTDEC2, FSR0H
  4423. 2B00 FFEA NOP
  4424. 2B02 0E04 MOVLW 0x4
  4425. 2B04 26E9 ADDWF FSR0L, F, ACCESS
  4426. 2B06 0E00 MOVLW 0x0
  4427. 2B08 22EA ADDWFC FSR0H, F, ACCESS
  4428. 2B0A 50EF MOVF INDF0, W, ACCESS
  4429. 2B0C 0B0F ANDLW 0xF
  4430. 2B0E 6EE7 MOVWF INDF1, ACCESS
  4431. 2B10 0E02 MOVLW 0x2
  4432. 2B12 CFE7 MOVFF INDF1, PLUSW2
  4433. 2B14 FFDB NOP
  4434. 496: dir = packet[USB_wIndex] >> 7;
  4435. 2B16 CFDE MOVFF POSTINC2, FSR0L
  4436. 2B18 FFE9 NOP
  4437. 2B1A CFDD MOVFF POSTDEC2, FSR0H
  4438. 2B1C FFEA NOP
  4439. 2B1E 0E04 MOVLW 0x4
  4440. 2B20 26E9 ADDWF FSR0L, F, ACCESS
  4441. 2B22 0E00 MOVLW 0x0
  4442. 2B24 22EA ADDWFC FSR0H, F, ACCESS
  4443. 2B26 50EF MOVF INDF0, W, ACCESS
  4444. 2B28 44E8 RLNCF WREG, W, ACCESS
  4445. 2B2A 0B01 ANDLW 0x1
  4446. 2B2C 6EE7 MOVWF INDF1, ACCESS
  4447. 2B2E 0E03 MOVLW 0x3
  4448. 2B30 CFE7 MOVFF INDF1, PLUSW2
  4449. 2B32 FFDB NOP
  4450. 497: epbd = &usb_bdt[USB_CALC_BD(epnum, dir, USB_PP_EVEN)];
  4451. 2B34 0E03 MOVLW 0x3
  4452. 2B36 CFDB MOVFF PLUSW2, POSTINC1
  4453. 2B38 FFE6 NOP
  4454. 2B3A 0E02 MOVLW 0x2
  4455. 2B3C 50DB MOVF PLUSW2, W, ACCESS
  4456. 2B3E 24E8 ADDWF WREG, W, ACCESS
  4457. 2B40 52E5 MOVF POSTDEC1, F, ACCESS
  4458. 2B42 24E7 ADDWF INDF1, W, ACCESS
  4459. 2B44 0D04 MULLW 0x4
  4460. 2B46 CFF3 MOVFF PRODL, __tmp_0
  4461. 2B48 F014 NOP
  4462. 2B4A CFF4 MOVFF PRODH, digit_cnt
  4463. 2B4C F015 NOP
  4464. 2B4E 0E00 MOVLW 0x0
  4465. 2B50 2614 ADDWF __tmp_0, F, ACCESS
  4466. 2B52 0E04 MOVLW 0x4
  4467. 2B54 2215 ADDWFC digit_cnt, F, ACCESS
  4468. 2B56 0E04 MOVLW 0x4
  4469. 2B58 C014 MOVFF __tmp_0, PLUSW2
  4470. 2B5A FFDB NOP
  4471. 2B5C 0E05 MOVLW 0x5
  4472. 2B5E C015 MOVFF digit_cnt, PLUSW2
  4473. 2B60 FFDB NOP
  4474. 498: epbd->BDSTAT |= BSTALL;
  4475. 2B62 0E04 MOVLW 0x4
  4476. 2B64 CFDB MOVFF PLUSW2, FSR0L
  4477. 2B66 FFE9 NOP
  4478. 2B68 0E05 MOVLW 0x5
  4479. 2B6A CFDB MOVFF PLUSW2, FSR0H
  4480. 2B6C FFEA NOP
  4481. 2B6E 84EF BSF INDF0, 2, ACCESS
  4482. 499: //epbd = &usb_bdt[USB_CALC_BD(epnum, dir, USB_PP_ODD)];
  4483. 500: //epbd->BDSTAT |= BSTALL;
  4484. 501: usb_ack_dat1(0);
  4485. 2B70 0E00 MOVLW 0x0
  4486. 2B72 6EE6 MOVWF POSTINC1, ACCESS
  4487. 2B74 6AE6 CLRF POSTINC1, ACCESS
  4488. 2B76 D8DC RCALL usb_ack_dat1
  4489. 2B78 52E5 MOVF POSTDEC1, F, ACCESS
  4490. 2B7A 52E5 MOVF POSTDEC1, F, ACCESS
  4491. 502: break;
  4492. 2B7C D001 BRA 0x2B80
  4493. 503: case USB_REQUEST_SYNCH_FRAME:
  4494. 504: default:
  4495. 505: usb_RequestError();
  4496. 2B7E D8F8 RCALL usb_RequestError
  4497. 506: }
  4498. 507: }
  4499. 2B80 0E08 MOVLW 0x8
  4500. 2B82 5CE1 SUBWF FSR1L, W, ACCESS
  4501. 2B84 E202 BC 0x2B8A
  4502. 2B86 6AE1 CLRF FSR1L, ACCESS
  4503. 2B88 52E5 MOVF POSTDEC1, F, ACCESS
  4504. 2B8A 6EE1 MOVWF FSR1L, ACCESS
  4505. 2B8C 52E5 MOVF POSTDEC1, F, ACCESS
  4506. 2B8E CFE7 MOVFF INDF1, FSR2L
  4507. 2B90 FFD9 NOP
  4508. 2B92 0012 RETURN 0
  4509. 508:
  4510. 509: void usb_handle_in(void) {
  4511. 510: if (endpoints[USB_STAT2EP(trn_status)].in_handler) {
  4512. 2B94 0100 MOVLB 0x0
  4513. 2B96 51B7 MOVF trn_status, W, BANKED
  4514. 2B98 40E8 RRNCF WREG, W, ACCESS
  4515. 2B9A 40E8 RRNCF WREG, W, ACCESS
  4516. 2B9C 40E8 RRNCF WREG, W, ACCESS
  4517. 2B9E 0B1F ANDLW 0x1F
  4518. 2BA0 0B0F ANDLW 0xF
  4519. 2BA2 0D04 MULLW 0x4
  4520. 2BA4 CFF3 MOVFF PRODL, FSR0L
  4521. 2BA6 FFE9 NOP
  4522. 2BA8 CFF4 MOVFF PRODH, FSR0H
  4523. 2BAA FFEA NOP
  4524. 2BAC 0E71 MOVLW 0x71
  4525. 2BAE 26E9 ADDWF FSR0L, F, ACCESS
  4526. 2BB0 0E00 MOVLW 0x0
  4527. 2BB2 22EA ADDWFC FSR0H, F, ACCESS
  4528. 2BB4 50EE MOVF POSTINC0, W, ACCESS
  4529. 2BB6 10ED IORWF POSTDEC0, W, ACCESS
  4530. 2BB8 E01A BZ 0x2BEE
  4531. 511: endpoints[USB_STAT2EP(trn_status)].in_handler();
  4532. 2BBA 0100 MOVLB 0x0
  4533. 2BBC 51B7 MOVF trn_status, W, BANKED
  4534. 2BBE 40E8 RRNCF WREG, W, ACCESS
  4535. 2BC0 40E8 RRNCF WREG, W, ACCESS
  4536. 2BC2 40E8 RRNCF WREG, W, ACCESS
  4537. 2BC4 0B1F ANDLW 0x1F
  4538. 2BC6 0B0F ANDLW 0xF
  4539. 2BC8 0D04 MULLW 0x4
  4540. 2BCA CFF3 MOVFF PRODL, FSR0L
  4541. 2BCC FFE9 NOP
  4542. 2BCE CFF4 MOVFF PRODH, FSR0H
  4543. 2BD0 FFEA NOP
  4544. 2BD2 0E71 MOVLW 0x71
  4545. 2BD4 26E9 ADDWF FSR0L, F, ACCESS
  4546. 2BD6 0E00 MOVLW 0x0
  4547. 2BD8 22EA ADDWFC FSR0H, F, ACCESS
  4548. 2BDA CFEE MOVFF POSTINC0, __tmp_0
  4549. 2BDC F014 NOP
  4550. 2BDE CFEF MOVFF INDF0, digit_cnt
  4551. 2BE0 F015 NOP
  4552. 2BE2 D004 BRA 0x2BEC
  4553. 2BE4 C015 MOVFF digit_cnt, PCLATH
  4554. 2BE6 FFFA NOP
  4555. 2BE8 5014 MOVF __tmp_0, W, ACCESS
  4556. 2BEA 6EF9 MOVWF PCL, ACCESS
  4557. 2BEC DFFB RCALL 0x2BE4
  4558. 512: }
  4559. 513: }
  4560. 2BEE 0012 RETURN 0
  4561. 514:
  4562. 515: void usb_handle_out(void) {
  4563. 516: if (endpoints[USB_STAT2EP(trn_status)].out_handler) {
  4564. 2BF0 0100 MOVLB 0x0
  4565. 2BF2 51B7 MOVF trn_status, W, BANKED
  4566. 2BF4 40E8 RRNCF WREG, W, ACCESS
  4567. 2BF6 40E8 RRNCF WREG, W, ACCESS
  4568. 2BF8 40E8 RRNCF WREG, W, ACCESS
  4569. 2BFA 0B1F ANDLW 0x1F
  4570. 2BFC 0B0F ANDLW 0xF
  4571. 2BFE 0D04 MULLW 0x4
  4572. 2C00 CFF3 MOVFF PRODL, FSR0L
  4573. 2C02 FFE9 NOP
  4574. 2C04 CFF4 MOVFF PRODH, FSR0H
  4575. 2C06 FFEA NOP
  4576. 2C08 0E71 MOVLW 0x71
  4577. 2C0A 26E9 ADDWF FSR0L, F, ACCESS
  4578. 2C0C 0E00 MOVLW 0x0
  4579. 2C0E 22EA ADDWFC FSR0H, F, ACCESS
  4580. 2C10 0E02 MOVLW 0x2
  4581. 2C12 26E9 ADDWF FSR0L, F, ACCESS
  4582. 2C14 0E00 MOVLW 0x0
  4583. 2C16 22EA ADDWFC FSR0H, F, ACCESS
  4584. 2C18 50EE MOVF POSTINC0, W, ACCESS
  4585. 2C1A 10ED IORWF POSTDEC0, W, ACCESS
  4586. 2C1C E01E BZ 0x2C5A
  4587. 517: endpoints[USB_STAT2EP(trn_status)].out_handler();
  4588. 2C1E 0100 MOVLB 0x0
  4589. 2C20 51B7 MOVF trn_status, W, BANKED
  4590. 2C22 40E8 RRNCF WREG, W, ACCESS
  4591. 2C24 40E8 RRNCF WREG, W, ACCESS
  4592. 2C26 40E8 RRNCF WREG, W, ACCESS
  4593. 2C28 0B1F ANDLW 0x1F
  4594. 2C2A 0B0F ANDLW 0xF
  4595. 2C2C 0D04 MULLW 0x4
  4596. 2C2E CFF3 MOVFF PRODL, FSR0L
  4597. 2C30 FFE9 NOP
  4598. 2C32 CFF4 MOVFF PRODH, FSR0H
  4599. 2C34 FFEA NOP
  4600. 2C36 0E71 MOVLW 0x71
  4601. 2C38 26E9 ADDWF FSR0L, F, ACCESS
  4602. 2C3A 0E00 MOVLW 0x0
  4603. 2C3C 22EA ADDWFC FSR0H, F, ACCESS
  4604. 2C3E 0E02 MOVLW 0x2
  4605. 2C40 26E9 ADDWF FSR0L, F, ACCESS
  4606. 2C42 0E00 MOVLW 0x0
  4607. 2C44 22EA ADDWFC FSR0H, F, ACCESS
  4608. 2C46 CFEE MOVFF POSTINC0, __tmp_0
  4609. 2C48 F014 NOP
  4610. 2C4A CFEF MOVFF INDF0, digit_cnt
  4611. 2C4C F015 NOP
  4612. 2C4E D004 BRA 0x2C58
  4613. 2C50 C015 MOVFF digit_cnt, PCLATH
  4614. 2C52 FFFA NOP
  4615. 2C54 5014 MOVF __tmp_0, W, ACCESS
  4616. 2C56 6EF9 MOVWF PCL, ACCESS
  4617. 2C58 DFFB RCALL 0x2C50
  4618. 518: }
  4619. 519: }
  4620. 2C5A 0012 RETURN 0
  4621. 520:
  4622. 521: void usb_register_sof_handler(usb_handler_t handler) {
  4623. 2C5C CFD9 MOVFF FSR2L, POSTINC1
  4624. 2C5E FFE6 NOP
  4625. 2C60 CFE1 MOVFF FSR1L, FSR2L
  4626. 2C62 FFD9 NOP
  4627. 522: sof_handler = handler;
  4628. 2C64 0EFD MOVLW 0xFD
  4629. 2C66 CFDB MOVFF PLUSW2, sof_handler
  4630. 2C68 F06B NOP
  4631. 2C6A 0EFE MOVLW 0xFE
  4632. 2C6C CFDB MOVFF PLUSW2, 0x6C
  4633. 2C6E F06C NOP
  4634. 523: }
  4635. 2C70 52E5 MOVF POSTDEC1, F, ACCESS
  4636. 2C72 CFE7 MOVFF INDF1, FSR2L
  4637. 2C74 FFD9 NOP
  4638. 2C76 0012 RETURN 0
  4639. 524:
  4640. 525: void usb_register_class_setup_handler(usb_handler_t handler) {
  4641. 2C78 CFD9 MOVFF FSR2L, POSTINC1
  4642. 2C7A FFE6 NOP
  4643. 2C7C CFE1 MOVFF FSR1L, FSR2L
  4644. 2C7E FFD9 NOP
  4645. 526: class_setup_handler = handler;
  4646. 2C80 0EFD MOVLW 0xFD
  4647. 2C82 CFDB MOVFF PLUSW2, class_setup_handler
  4648. 2C84 F06D NOP
  4649. 2C86 0EFE MOVLW 0xFE
  4650. 2C88 CFDB MOVFF PLUSW2, 0x6E
  4651. 2C8A F06E NOP
  4652. 527: }
  4653. 2C8C 52E5 MOVF POSTDEC1, F, ACCESS
  4654. 2C8E CFE7 MOVFF INDF1, FSR2L
  4655. 2C90 FFD9 NOP
  4656. 2C92 0012 RETURN 0
  4657. 528:
  4658. 529: void usb_register_vendor_setup_handler(usb_handler_t handler) {
  4659. 2C94 CFD9 MOVFF FSR2L, POSTINC1
  4660. 2C96 FFE6 NOP
  4661. 2C98 CFE1 MOVFF FSR1L, FSR2L
  4662. 2C9A FFD9 NOP
  4663. 530: vendor_setup_handler = handler;
  4664. 2C9C 0EFD MOVLW 0xFD
  4665. 2C9E CFDB MOVFF PLUSW2, vendor_setup_handler
  4666. 2CA0 F06F NOP
  4667. 2CA2 0EFE MOVLW 0xFE
  4668. 2CA4 CFDB MOVFF PLUSW2, 0x70
  4669. 2CA6 F070 NOP
  4670. 531: }
  4671. 2CA8 52E5 MOVF POSTDEC1, F, ACCESS
  4672. 2CAA CFE7 MOVFF INDF1, FSR2L
  4673. 2CAC FFD9 NOP
  4674. 2CAE 0012 RETURN 0
  4675. 532:
  4676. 533: void usb_set_in_handler(int ep, usb_handler_t in_handler) {
  4677. 2CB0 CFD9 MOVFF FSR2L, POSTINC1
  4678. 2CB2 FFE6 NOP
  4679. 2CB4 CFE1 MOVFF FSR1L, FSR2L
  4680. 2CB6 FFD9 NOP
  4681. 534: endpoints[ep].in_handler = in_handler;
  4682. 2CB8 0EFD MOVLW 0xFD
  4683. 2CBA CFDB MOVFF PLUSW2, FSR0L
  4684. 2CBC FFE9 NOP
  4685. 2CBE 0EFE MOVLW 0xFE
  4686. 2CC0 CFDB MOVFF PLUSW2, FSR0H
  4687. 2CC2 FFEA NOP
  4688. 2CC4 90D8 BCF STATUS, 0, ACCESS
  4689. 2CC6 36E9 RLCF FSR0L, F, ACCESS
  4690. 2CC8 36EA RLCF FSR0H, F, ACCESS
  4691. 2CCA 90D8 BCF STATUS, 0, ACCESS
  4692. 2CCC 36E9 RLCF FSR0L, F, ACCESS
  4693. 2CCE 36EA RLCF FSR0H, F, ACCESS
  4694. 2CD0 0E71 MOVLW 0x71
  4695. 2CD2 26E9 ADDWF FSR0L, F, ACCESS
  4696. 2CD4 0E00 MOVLW 0x0
  4697. 2CD6 22EA ADDWFC FSR0H, F, ACCESS
  4698. 2CD8 0EFB MOVLW 0xFB
  4699. 2CDA CFDB MOVFF PLUSW2, POSTINC0
  4700. 2CDC FFEE NOP
  4701. 2CDE 0EFC MOVLW 0xFC
  4702. 2CE0 CFDB MOVFF PLUSW2, POSTDEC0
  4703. 2CE2 FFED NOP
  4704. 535: }
  4705. 2CE4 52E5 MOVF POSTDEC1, F, ACCESS
  4706. 2CE6 CFE7 MOVFF INDF1, FSR2L
  4707. 2CE8 FFD9 NOP
  4708. 2CEA 0012 RETURN 0
  4709. 536:
  4710. 537: void usb_set_out_handler(int ep, usb_handler_t out_handler) {
  4711. 2CEC CFD9 MOVFF FSR2L, POSTINC1
  4712. 2CEE FFE6 NOP
  4713. 2CF0 CFE1 MOVFF FSR1L, FSR2L
  4714. 2CF2 FFD9 NOP
  4715. 538: endpoints[ep].out_handler = out_handler;
  4716. 2CF4 0EFD MOVLW 0xFD
  4717. 2CF6 CFDB MOVFF PLUSW2, FSR0L
  4718. 2CF8 FFE9 NOP
  4719. 2CFA 0EFE MOVLW 0xFE
  4720. 2CFC CFDB MOVFF PLUSW2, FSR0H
  4721. 2CFE FFEA NOP
  4722. 2D00 90D8 BCF STATUS, 0, ACCESS
  4723. 2D02 36E9 RLCF FSR0L, F, ACCESS
  4724. 2D04 36EA RLCF FSR0H, F, ACCESS
  4725. 2D06 90D8 BCF STATUS, 0, ACCESS
  4726. 2D08 36E9 RLCF FSR0L, F, ACCESS
  4727. 2D0A 36EA RLCF FSR0H, F, ACCESS
  4728. 2D0C 0E71 MOVLW 0x71
  4729. 2D0E 26E9 ADDWF FSR0L, F, ACCESS
  4730. 2D10 0E00 MOVLW 0x0
  4731. 2D12 22EA ADDWFC FSR0H, F, ACCESS
  4732. 2D14 0E02 MOVLW 0x2
  4733. 2D16 26E9 ADDWF FSR0L, F, ACCESS
  4734. 2D18 0E00 MOVLW 0x0
  4735. 2D1A 22EA ADDWFC FSR0H, F, ACCESS
  4736. 2D1C 0EFB MOVLW 0xFB
  4737. 2D1E CFDB MOVFF PLUSW2, POSTINC0
  4738. 2D20 FFEE NOP
  4739. 2D22 0EFC MOVLW 0xFC
  4740. 2D24 CFDB MOVFF PLUSW2, POSTDEC0
  4741. 2D26 FFED NOP
  4742. 539: }
  4743. 2D28 52E5 MOVF POSTDEC1, F, ACCESS
  4744. 2D2A CFE7 MOVFF INDF1, FSR2L
  4745. 2D2C FFD9 NOP
  4746. 2D2E 0012 RETURN 0
  4747. 540:
  4748. 541: // JTR New added helper function use extensively by the standard and class
  4749. 542: // request handlers. All status IN packets are DAT1 as is the first DATA packet
  4750. 543: // of a IN transfer. Currently with this CDC stack the only IN DATA transfers
  4751. 544: // that are > 8 bytes is the descriptor transfer and these are transfered in
  4752. 545: // usb_send_rom()
  4753. 546:
  4754. 547: void usb_ack_dat1(int bdcnt) {
  4755. 2D30 CFD9 MOVFF FSR2L, POSTINC1
  4756. 2D32 FFE6 NOP
  4757. 2D34 CFE1 MOVFF FSR1L, FSR2L
  4758. 2D36 FFD9 NOP
  4759. 548: EP0_Inbdp->BDCNT = (bdcnt & 0xFF);
  4760. 2D38 0EFF MOVLW 0xFF
  4761. 2D3A 6EE7 MOVWF INDF1, ACCESS
  4762. 2D3C 0EFD MOVLW 0xFD
  4763. 2D3E CFDB MOVFF PLUSW2, __tmp_0
  4764. 2D40 F014 NOP
  4765. 2D42 0EFE MOVLW 0xFE
  4766. 2D44 CFDB MOVFF PLUSW2, digit_cnt
  4767. 2D46 F015 NOP
  4768. 2D48 50E7 MOVF INDF1, W, ACCESS
  4769. 2D4A 1614 ANDWF __tmp_0, F, ACCESS
  4770. 2D4C 6A15 CLRF digit_cnt, ACCESS
  4771. 2D4E C0BA MOVFF EP0_Inbdp, FSR0L
  4772. 2D50 FFE9 NOP
  4773. 2D52 C0BB MOVFF 0xBB, FSR0H
  4774. 2D54 FFEA NOP
  4775. 2D56 52EE MOVF POSTINC0, F, ACCESS
  4776. 2D58 C014 MOVFF __tmp_0, INDF0
  4777. 2D5A FFEF NOP
  4778. 549: EP0_Inbdp->BDSTAT = (DTS | UOWN | DTSEN); // | ((bdcnt & 0x300) >> 8));
  4779. 2D5C C0BA MOVFF EP0_Inbdp, FSR0L
  4780. 2D5E FFE9 NOP
  4781. 2D60 C0BB MOVFF 0xBB, FSR0H
  4782. 2D62 FFEA NOP
  4783. 2D64 0EC8 MOVLW 0xC8
  4784. 2D66 6EEF MOVWF INDF0, ACCESS
  4785. 550: }
  4786. 2D68 52E5 MOVF POSTDEC1, F, ACCESS
  4787. 2D6A CFE7 MOVFF INDF1, FSR2L
  4788. 2D6C FFD9 NOP
  4789. 2D6E 0012 RETURN 0
  4790. 551:
  4791. 552: void usb_RequestError(void) {
  4792. 553:
  4793. 554: usb_bdt[USB_CALC_BD(0, USB_DIR_OUT, USB_PP_EVEN)].BDCNT = USB_EP0_BUFFER_SIZE;
  4794. 2D70 0104 MOVLB 0x4
  4795. 2D72 0E08 MOVLW 0x8
  4796. 2D74 6F01 MOVWF c, BANKED
  4797. 555: //usb_bdt[USB_CALC_BD(0, USB_DIR_OUT, USB_PP_ODD)].BDCNT = USB_EP0_BUFFER_SIZE;
  4798. 556:
  4799. 557: usb_bdt[USB_CALC_BD(0, USB_DIR_IN, USB_PP_EVEN)].BDSTAT = UOWN + BSTALL;
  4800. 2D76 0104 MOVLB 0x4
  4801. 2D78 0E84 MOVLW 0x84
  4802. 2D7A 6F04 MOVWF i, BANKED
  4803. 558: usb_bdt[USB_CALC_BD(0, USB_DIR_OUT, USB_PP_EVEN)].BDSTAT = UOWN + BSTALL;
  4804. 2D7C 0104 MOVLB 0x4
  4805. 2D7E 0E84 MOVLW 0x84
  4806. 2D80 6F00 MOVWF i, BANKED
  4807. 559: //usb_bdt[USB_CALC_BD(0, USB_DIR_IN, USB_PP_ODD)].BDSTAT = UOWN + BSTALL;
  4808. 560: //usb_bdt[USB_CALC_BD(0, USB_DIR_OUT, USB_PP_ODD)].BDSTAT = UOWN + BSTALL;
  4809. 561:
  4810. 562: // JTR TODO: Should also kill the IN and OUT handlers?
  4811. 563:
  4812. 564: }
  4813. 2D82 0012 RETURN 0
  4814. 565:
  4815. 566: void usb_set_address(void) {
  4816. 567: if (0x00u == usb_addr_pending) {
  4817. 2D84 0100 MOVLB 0x0
  4818. 2D86 51B6 MOVF usb_addr_pending, W, BANKED
  4819. 2D88 E104 BNZ 0x2D92
  4820. 568: usb_device_state = DEFAULT_STATE;
  4821. 2D8A 0100 MOVLB 0x0
  4822. 2D8C 0E04 MOVLW 0x4
  4823. 2D8E 6FB5 MOVWF usb_device_state, BANKED
  4824. 569: } else {
  4825. 2D90 D003 BRA 0x2D98
  4826. 570: usb_device_state = ADDRESS_STATE;
  4827. 2D92 0100 MOVLB 0x0
  4828. 2D94 0E10 MOVLW 0x10
  4829. 2D96 6FB5 MOVWF usb_device_state, BANKED
  4830. 571: }
  4831. 572: SetUsbAddress(usb_addr_pending);
  4832. 2D98 C0B6 MOVFF usb_addr_pending, UADDR
  4833. 2D9A FF6E NOP
  4834. 573: usb_addr_pending = 0xFF;
  4835. 2D9C 0100 MOVLB 0x0
  4836. 2D9E 69B6 SETF usb_addr_pending, BANKED
  4837. 574: usb_unset_in_handler(0); // Unregister handler
  4838. 2DA0 0E00 MOVLW 0x0
  4839. 2DA2 6EE6 MOVWF POSTINC1, ACCESS
  4840. 2DA4 6AE6 CLRF POSTINC1, ACCESS
  4841. 2DA6 0E00 MOVLW 0x0
  4842. 2DA8 6EE6 MOVWF POSTINC1, ACCESS
  4843. 2DAA 6AE6 CLRF POSTINC1, ACCESS
  4844. 2DAC DF81 RCALL usb_set_in_handler
  4845. 2DAE 52E5 MOVF POSTDEC1, F, ACCESS
  4846. 2DB0 52E5 MOVF POSTDEC1, F, ACCESS
  4847. 2DB2 52E5 MOVF POSTDEC1, F, ACCESS
  4848. 2DB4 52E5 MOVF POSTDEC1, F, ACCESS
  4849. 575: }
  4850. 2DB6 0012 RETURN 0
  4851. 576:
  4852. 577: void usb_send_rom(void) {
  4853. 2DB8 CFD9 MOVFF FSR2L, POSTINC1
  4854. 2DBA FFE6 NOP
  4855. 2DBC CFE1 MOVFF FSR1L, FSR2L
  4856. 2DBE FFD9 NOP
  4857. 2DC0 0E04 MOVLW 0x4
  4858. 2DC2 26E1 ADDWF FSR1L, F, ACCESS
  4859. 578:
  4860. 579: unsigned int i;
  4861. 580: size_t packet_len;
  4862. 581: if (usb_rom_len) {
  4863. 2DC4 0100 MOVLB 0x0
  4864. 2DC6 51BF MOVF usb_rom_len, W, BANKED
  4865. 2DC8 11C0 IORWF 0xC0, W, BANKED
  4866. 2DCA E05A BZ 0x2E80
  4867. 582: packet_len = (usb_rom_len < USB_EP0_BUFFER_SIZE) ? usb_rom_len : USB_EP0_BUFFER_SIZE; // JTR changed from MAX_BUFFER_SIZE
  4868. 2DCC 0100 MOVLB 0x0
  4869. 2DCE 0E08 MOVLW 0x8
  4870. 2DD0 5DBF SUBWF usb_rom_len, W, BANKED
  4871. 2DD2 0E00 MOVLW 0x0
  4872. 2DD4 59C0 SUBWFB 0xC0, W, BANKED
  4873. 2DD6 E205 BC 0x2DE2
  4874. 2DD8 C0BF MOVFF usb_rom_len, __tmp_0
  4875. 2DDA F014 NOP
  4876. 2DDC C0C0 MOVFF 0xC0, digit_cnt
  4877. 2DDE F015 NOP
  4878. 2DE0 D003 BRA 0x2DE8
  4879. 2DE2 0E08 MOVLW 0x8
  4880. 2DE4 6E14 MOVWF __tmp_0, ACCESS
  4881. 2DE6 6A15 CLRF digit_cnt, ACCESS
  4882. 2DE8 0E02 MOVLW 0x2
  4883. 2DEA C014 MOVFF __tmp_0, PLUSW2
  4884. 2DEC FFDB NOP
  4885. 2DEE 0E03 MOVLW 0x3
  4886. 2DF0 C015 MOVFF digit_cnt, PLUSW2
  4887. 2DF2 FFDB NOP
  4888. 583:
  4889. 584: for (i = 0; i < packet_len; i++) {
  4890. 2DF4 6ADE CLRF POSTINC2, ACCESS
  4891. 2DF6 6ADD CLRF POSTDEC2, ACCESS
  4892. 2DF8 CFDE MOVFF POSTINC2, __tmp_0
  4893. 2DFA F014 NOP
  4894. 2DFC CFDD MOVFF POSTDEC2, digit_cnt
  4895. 2DFE F015 NOP
  4896. 2E00 0E02 MOVLW 0x2
  4897. 2E02 CFDB MOVFF PLUSW2, prefix_cnt
  4898. 2E04 F016 NOP
  4899. 2E06 0E03 MOVLW 0x3
  4900. 2E08 CFDB MOVFF PLUSW2, sign_char
  4901. 2E0A F017 NOP
  4902. 2E0C 5016 MOVF prefix_cnt, W, ACCESS
  4903. 2E0E 5C14 SUBWF __tmp_0, W, ACCESS
  4904. 2E10 5017 MOVF sign_char, W, ACCESS
  4905. 2E12 5815 SUBWFB digit_cnt, W, ACCESS
  4906. 2E14 E234 BC 0x2E7E
  4907. 2E74 2ADF INCF INDF2, F, ACCESS
  4908. 2E76 0E01 MOVLW 0x1
  4909. 2E78 E301 BNC 0x2E7C
  4910. 2E7A 2ADB INCF PLUSW2, F, ACCESS
  4911. 2E7C D7BD BRA 0x2DF8
  4912. 585: EP0_Inbdp->BDADDR[i] = usb_rom_ptr[i];
  4913. 2E16 CFDE MOVFF POSTINC2, prefix_cnt
  4914. 2E18 F016 NOP
  4915. 2E1A CFDD MOVFF POSTDEC2, sign_char
  4916. 2E1C F017 NOP
  4917. 2E1E 6A18 CLRF buf, ACCESS
  4918. 2E20 0100 MOVLB 0x0
  4919. 2E22 51BC MOVF usb_rom_ptr, W, BANKED
  4920. 2E24 2416 ADDWF prefix_cnt, W, ACCESS
  4921. 2E26 6EF3 MOVWF PRODL, ACCESS
  4922. 2E28 0100 MOVLB 0x0
  4923. 2E2A 51BD MOVF 0xBD, W, BANKED
  4924. 2E2C 2017 ADDWFC sign_char, W, ACCESS
  4925. 2E2E 6EF4 MOVWF PRODH, ACCESS
  4926. 2E30 0100 MOVLB 0x0
  4927. 2E32 51BE MOVF 0xBE, W, BANKED
  4928. 2E34 2018 ADDWFC buf, W, ACCESS
  4929. 2E36 6EF8 MOVWF TBLPTRU, ACCESS
  4930. 2E38 CFF4 MOVFF PRODH, TBLPTRH
  4931. 2E3A FFF7 NOP
  4932. 2E3C CFF3 MOVFF PRODL, TBLPTRL
  4933. 2E3E FFF6 NOP
  4934. 2E40 0008 TBLRD*
  4935. 2E42 50F5 MOVF TABLAT, W, ACCESS
  4936. 2E44 6EE6 MOVWF POSTINC1, ACCESS
  4937. 2E46 CFDE MOVFF POSTINC2, __tmp_0
  4938. 2E48 F014 NOP
  4939. 2E4A CFDD MOVFF POSTDEC2, digit_cnt
  4940. 2E4C F015 NOP
  4941. 2E4E C0BA MOVFF EP0_Inbdp, FSR0L
  4942. 2E50 FFE9 NOP
  4943. 2E52 C0BB MOVFF 0xBB, FSR0H
  4944. 2E54 FFEA NOP
  4945. 2E56 0E02 MOVLW 0x2
  4946. 2E58 26E9 ADDWF FSR0L, F, ACCESS
  4947. 2E5A 0E00 MOVLW 0x0
  4948. 2E5C 22EA ADDWFC FSR0H, F, ACCESS
  4949. 2E5E 5014 MOVF __tmp_0, W, ACCESS
  4950. 2E60 24EE ADDWF POSTINC0, W, ACCESS
  4951. 2E62 6EE7 MOVWF INDF1, ACCESS
  4952. 2E64 5015 MOVF digit_cnt, W, ACCESS
  4953. 2E66 20EE ADDWFC POSTINC0, W, ACCESS
  4954. 2E68 6EEA MOVWF FSR0H, ACCESS
  4955. 2E6A CFE7 MOVFF INDF1, FSR0L
  4956. 2E6C FFE9 NOP
  4957. 2E6E 52E5 MOVF POSTDEC1, F, ACCESS
  4958. 2E70 50E7 MOVF INDF1, W, ACCESS
  4959. 2E72 6EEF MOVWF INDF0, ACCESS
  4960. 586: }
  4961. 587: } else {
  4962. 2E7E D00F BRA 0x2E9E
  4963. 588: packet_len = 0;
  4964. 2E80 0E02 MOVLW 0x2
  4965. 2E82 6ADB CLRF PLUSW2, ACCESS
  4966. 2E84 0E03 MOVLW 0x3
  4967. 2E86 6ADB CLRF PLUSW2, ACCESS
  4968. 589: usb_unset_in_handler(0);
  4969. 2E88 0E00 MOVLW 0x0
  4970. 2E8A 6EE6 MOVWF POSTINC1, ACCESS
  4971. 2E8C 6AE6 CLRF POSTINC1, ACCESS
  4972. 2E8E 0E00 MOVLW 0x0
  4973. 2E90 6EE6 MOVWF POSTINC1, ACCESS
  4974. 2E92 6AE6 CLRF POSTINC1, ACCESS
  4975. 2E94 DF0D RCALL usb_set_in_handler
  4976. 2E96 52E5 MOVF POSTDEC1, F, ACCESS
  4977. 2E98 52E5 MOVF POSTDEC1, F, ACCESS
  4978. 2E9A 52E5 MOVF POSTDEC1, F, ACCESS
  4979. 2E9C 52E5 MOVF POSTDEC1, F, ACCESS
  4980. 590: }
  4981. 591:
  4982. 592: EP0_Inbdp->BDCNT = (BYTE) packet_len;
  4983. 2E9E C0BA MOVFF EP0_Inbdp, FSR0L
  4984. 2EA0 FFE9 NOP
  4985. 2EA2 C0BB MOVFF 0xBB, FSR0H
  4986. 2EA4 FFEA NOP
  4987. 2EA6 52EE MOVF POSTINC0, F, ACCESS
  4988. 2EA8 0E02 MOVLW 0x2
  4989. 2EAA CFDB MOVFF PLUSW2, INDF0
  4990. 2EAC FFEF NOP
  4991. 593: EP0_Inbdp->BDSTAT = ((EP0_Inbdp->BDSTAT ^ DTS) & DTS) | UOWN | DTSEN; // Packet length always less then 256 on endpoint 0
  4992. 2EAE C0BA MOVFF EP0_Inbdp, FSR0L
  4993. 2EB0 FFE9 NOP
  4994. 2EB2 C0BB MOVFF 0xBB, FSR0H
  4995. 2EB4 FFEA NOP
  4996. 2EB6 50EF MOVF INDF0, W, ACCESS
  4997. 2EB8 0A40 XORLW 0x40
  4998. 2EBA 0B40 ANDLW 0x40
  4999. 2EBC 0980 IORLW 0x80
  5000. 2EBE 0908 IORLW 0x8
  5001. 2EC0 6EE6 MOVWF POSTINC1, ACCESS
  5002. 2EC2 C0BA MOVFF EP0_Inbdp, FSR0L
  5003. 2EC4 FFE9 NOP
  5004. 2EC6 C0BB MOVFF 0xBB, FSR0H
  5005. 2EC8 FFEA NOP
  5006. 2ECA 52E5 MOVF POSTDEC1, F, ACCESS
  5007. 2ECC 50E7 MOVF INDF1, W, ACCESS
  5008. 2ECE 6EEF MOVWF INDF0, ACCESS
  5009. 594:
  5010. 595: usb_rom_ptr += packet_len;
  5011. 2ED0 0E02 MOVLW 0x2
  5012. 2ED2 CFDB MOVFF PLUSW2, __tmp_0
  5013. 2ED4 F014 NOP
  5014. 2ED6 0E03 MOVLW 0x3
  5015. 2ED8 CFDB MOVFF PLUSW2, digit_cnt
  5016. 2EDA F015 NOP
  5017. 2EDC 6A16 CLRF prefix_cnt, ACCESS
  5018. 2EDE 5014 MOVF __tmp_0, W, ACCESS
  5019. 2EE0 0100 MOVLB 0x0
  5020. 2EE2 27BC ADDWF usb_rom_ptr, F, BANKED
  5021. 2EE4 5015 MOVF digit_cnt, W, ACCESS
  5022. 2EE6 0100 MOVLB 0x0
  5023. 2EE8 23BD ADDWFC 0xBD, F, BANKED
  5024. 2EEA 5016 MOVF prefix_cnt, W, ACCESS
  5025. 2EEC 0100 MOVLB 0x0
  5026. 2EEE 23BE ADDWFC 0xBE, F, BANKED
  5027. 596: usb_rom_len -= packet_len;
  5028. 2EF0 0E02 MOVLW 0x2
  5029. 2EF2 CFDB MOVFF PLUSW2, pUEP
  5030. 2EF4 F006 NOP
  5031. 2EF6 0E03 MOVLW 0x3
  5032. 2EF8 CFDB MOVFF PLUSW2, size
  5033. 2EFA F007 NOP
  5034. 2EFC 5006 MOVF pUEP, W, ACCESS
  5035. 2EFE 0100 MOVLB 0x0
  5036. 2F00 5FBF SUBWF usb_rom_len, F, BANKED
  5037. 2F02 5007 MOVF size, W, ACCESS
  5038. 2F04 0100 MOVLB 0x0
  5039. 2F06 5BC0 SUBWFB 0xC0, F, BANKED
  5040. 597: }
  5041. 2F08 0E04 MOVLW 0x4
  5042. 2F0A 5CE1 SUBWF FSR1L, W, ACCESS
  5043. 2F0C E202 BC 0x2F12
  5044. 2F0E 6AE1 CLRF FSR1L, ACCESS
  5045. 2F10 52E5 MOVF POSTDEC1, F, ACCESS
  5046. 2F12 6EE1 MOVWF FSR1L, ACCESS
  5047. 2F14 52E5 MOVF POSTDEC1, F, ACCESS
  5048. 2F16 CFE7 MOVFF INDF1, FSR2L
  5049. 2F18 FFD9 NOP
  5050. 2F1A 0012 RETURN 0
  5051. 598:
  5052. --- /home/antoine/Documents/Pic/DP_USB/USB_stack/dp_usb/cdc.c -----------------------------------------
  5053. 1: /*
  5054. 2: This work is licensed under the Creative Commons Attribution 3.0 Unported License.
  5055. 3: To view a copy of this license, visit http://creativecommons.org/licenses/by/3.0/
  5056. 4: or send a letter to
  5057. 5: Creative Commons,
  5058. 6: 171 Second Street,
  5059. 7: Suite 300,
  5060. 8: San Francisco,
  5061. 9: California,
  5062. 10: 94105,
  5063. 11: USA.
  5064. 12: */
  5065. 13:
  5066. 14: // JTR V0.1a
  5067. 15: // JTR v0.1b
  5068. 16: // JTR v0.1c // tidy up added code line code handler to set the SPBRG based on line coding.
  5069. 17: // JTR V0.2a // 26th Jan 2012
  5070. 18:
  5071. 19: #include "usb_stack_globals.h" // USB stack only defines Not function related.
  5072. 20:
  5073. 21: #include <string.h>
  5074. 22:
  5075. 23: enum stopbits {
  5076. 24: one = 0, oneandahalf = 1, two = 2
  5077. 25: };
  5078. 26:
  5079. 27: enum parity {
  5080. 28: none = 0, odd = 1, even = 2, mark = 3, space = 4
  5081. 29: };
  5082. 30: const char parity_str[] = {'N', 'O', 'E', 'M', 'S'};
  5083. 31:
  5084. 32: struct cdc_LineCodeing {
  5085. 33: unsigned long int dwDTERate;
  5086. 34: enum stopbits bCharFormat;
  5087. 35: enum parity bParityType;
  5088. 36: BYTE bDataBits;
  5089. 37: } linecodeing;
  5090. 38:
  5091. 39:
  5092. 40: #pragma udata usb_data
  5093. 41: BYTE cdc_acm_in_buffer[CDC_NOTICE_BUFFER_SIZE]; //JTR NEWLY defined NOTICE BUFFER SIZE and increased from 8 to 10 bytes in usb_config.h
  5094. 42:
  5095. 43: #pragma udata usb_data3
  5096. 44: BYTE cdc_In_bufferA[CDC_BUFFER_SIZE];
  5097. 45: BYTE cdc_In_bufferB[CDC_BUFFER_SIZE];
  5098. 46: BYTE cdc_Out_bufferA[CDC_BUFFER_SIZE];
  5099. 47: BYTE cdc_Out_bufferB[CDC_BUFFER_SIZE];
  5100. 48:
  5101. 49: #pragma udata
  5102. 50:
  5103. 51: struct _cdc_ControlLineState cls;
  5104. 52: BYTE cdc_In_len; // total cdc In length
  5105. 53: volatile BYTE cdc_Out_len; // total cdc out length
  5106. 54: BYTE IsInBufferA;
  5107. 55: BYTE IsOutBufferA;
  5108. 56: BYTE *InPtr;
  5109. 57: BYTE *OutPtr;
  5110. 58: BYTE LineStateUpdated = 0;
  5111. 59: BYTE cdc_timeout_count = 0;
  5112. 60: BYTE ZLPpending = 0;
  5113. 61: BYTE lock = 0;
  5114. 62:
  5115. 63: BDentry *CDC_Outbdp, *CDC_Inbdp;
  5116. 64: BYTE CDCFunctionError;
  5117. 65:
  5118. 66: volatile BYTE cdc_trf_state; // JTR don't see that it is really volatile in current context may be in future.
  5119. 67:
  5120. 68: void initCDC(void) {
  5121. 69:
  5122. 70: // JTR The function usb_init() is now called from main.c prior to anything else belonging to the CDC CLASS
  5123. 71: // If we have multiple functions we want the USB initialization to be in only one consistant place.
  5124. 72: // The sort of things we would do in InitCDC would be to setup I/O pins and the HARDWARE UART so it
  5125. 73: // is not transmitting junk between a RESET and the device being enumerated. Hardware CTS/RTS
  5126. 74: // would also be setup here if being used.
  5127. 75:
  5128. 76: linecodeing.dwDTERate = 115200;
  5129. 3B3E 0100 MOVLB 0x0
  5130. 3B40 6BC2 CLRF linecodeing, BANKED
  5131. 3B42 0EC2 MOVLW 0xC2
  5132. 3B44 6FC3 MOVWF 0xC3, BANKED
  5133. 3B46 0E01 MOVLW 0x1
  5134. 3B48 6FC4 MOVWF 0xC4, BANKED
  5135. 3B4A 6BC5 CLRF 0xC5, BANKED
  5136. 77: linecodeing.bCharFormat = one;
  5137. 3B4C 0100 MOVLB 0x0
  5138. 3B4E 6BC6 CLRF 0xC6, BANKED
  5139. 78: linecodeing.bParityType = none;
  5140. 3B50 0100 MOVLB 0x0
  5141. 3B52 6BC7 CLRF 0xC7, BANKED
  5142. 79: linecodeing.bDataBits = 8;
  5143. 3B54 0100 MOVLB 0x0
  5144. 3B56 0E08 MOVLW 0x8
  5145. 3B58 6FC8 MOVWF 0xC8, BANKED
  5146. 80: cls.DTR = 0;
  5147. 3B5A 0100 MOVLB 0x0
  5148. 3B5C 91C9 BCF cls, 0, BANKED
  5149. 81: cls.RTS = 0;
  5150. 3B5E 0100 MOVLB 0x0
  5151. 3B60 93C9 BCF cls, 1, BANKED
  5152. 82: usb_register_class_setup_handler(cdc_setup);
  5153. 3B62 0E88 MOVLW 0x88
  5154. 3B64 6EE6 MOVWF POSTINC1, ACCESS
  5155. 3B66 0E3C MOVLW 0x3C
  5156. 3B68 6EE6 MOVWF POSTINC1, ACCESS
  5157. 3B6A EC3C CALL 0x2C78, 0
  5158. 3B6C F016 NOP
  5159. 3B6E 52E5 MOVF POSTDEC1, F, ACCESS
  5160. 3B70 52E5 MOVF POSTDEC1, F, ACCESS
  5161. 83: }
  5162. 3B72 0012 RETURN 0
  5163. 84:
  5164. 85: void user_configured_init(void) {
  5165. 86: // JTR NEW FUNCTION
  5166. 87: // After the device is enumerated and configured then we set up non EP0 endpoints.
  5167. 88: // We only enable the endpoints we are using, not all of them.
  5168. 89: // Prior to this they are held in a disarmed state.
  5169. 90:
  5170. 91: // This function belongs to the current USB function and IS NOT generic. This is CLASS specific
  5171. 92: // and will vary from implementation to implementation.
  5172. 93:
  5173. 94: usb_unset_in_handler(1);
  5174. 3B74 0E00 MOVLW 0x0
  5175. 3B76 6EE6 MOVWF POSTINC1, ACCESS
  5176. 3B78 6AE6 CLRF POSTINC1, ACCESS
  5177. 3B7A 0E01 MOVLW 0x1
  5178. 3B7C 6EE6 MOVWF POSTINC1, ACCESS
  5179. 3B7E 6AE6 CLRF POSTINC1, ACCESS
  5180. 3B80 EC58 CALL 0x2CB0, 0
  5181. 3B82 F016 NOP
  5182. 3B84 52E5 MOVF POSTDEC1, F, ACCESS
  5183. 3B86 52E5 MOVF POSTDEC1, F, ACCESS
  5184. 3B88 52E5 MOVF POSTDEC1, F, ACCESS
  5185. 3B8A 52E5 MOVF POSTDEC1, F, ACCESS
  5186. 95: usb_unset_in_handler(2);
  5187. 3B8C 0E00 MOVLW 0x0
  5188. 3B8E 6EE6 MOVWF POSTINC1, ACCESS
  5189. 3B90 6AE6 CLRF POSTINC1, ACCESS
  5190. 3B92 0E02 MOVLW 0x2
  5191. 3B94 6EE6 MOVWF POSTINC1, ACCESS
  5192. 3B96 6AE6 CLRF POSTINC1, ACCESS
  5193. 3B98 EC58 CALL 0x2CB0, 0
  5194. 3B9A F016 NOP
  5195. 3B9C 52E5 MOVF POSTDEC1, F, ACCESS
  5196. 3B9E 52E5 MOVF POSTDEC1, F, ACCESS
  5197. 3BA0 52E5 MOVF POSTDEC1, F, ACCESS
  5198. 3BA2 52E5 MOVF POSTDEC1, F, ACCESS
  5199. 96: usb_unset_out_handler(2);
  5200. 3BA4 0E00 MOVLW 0x0
  5201. 3BA6 6EE6 MOVWF POSTINC1, ACCESS
  5202. 3BA8 6AE6 CLRF POSTINC1, ACCESS
  5203. 3BAA 0E02 MOVLW 0x2
  5204. 3BAC 6EE6 MOVWF POSTINC1, ACCESS
  5205. 3BAE 6AE6 CLRF POSTINC1, ACCESS
  5206. 3BB0 EC76 CALL 0x2CEC, 0
  5207. 3BB2 F016 NOP
  5208. 3BB4 52E5 MOVF POSTDEC1, F, ACCESS
  5209. 3BB6 52E5 MOVF POSTDEC1, F, ACCESS
  5210. 3BB8 52E5 MOVF POSTDEC1, F, ACCESS
  5211. 3BBA 52E5 MOVF POSTDEC1, F, ACCESS
  5212. 97:
  5213. 98: USB_UEP1 = USB_EP_IN;
  5214. 3BBC 0E1A MOVLW 0x1A
  5215. 3BBE 6E71 MOVWF UEP1, ACCESS
  5216. 99: USB_UEP2 = USB_EP_INOUT;
  5217. 3BC0 0E1E MOVLW 0x1E
  5218. 3BC2 6E72 MOVWF UEP2, ACCESS
  5219. 100:
  5220. 101: /* Configure buffer descriptors */
  5221. 102: #if USB_PP_BUF_MODE == 0
  5222. 103: // JTR Setup CDC LINE_NOTICE EP (Interrupt IN)
  5223. 104: usb_bdt[USB_CALC_BD(1, USB_DIR_IN, USB_PP_EVEN)].BDCNT = 0;
  5224. 3BC4 0104 MOVLB 0x4
  5225. 3BC6 6B0D CLRF 0xD, BANKED
  5226. 105: usb_bdt[USB_CALC_BD(1, USB_DIR_IN, USB_PP_EVEN)].BDADDR = cdc_acm_in_buffer;
  5227. 3BC8 0104 MOVLB 0x4
  5228. 3BCA 0E80 MOVLW 0x80
  5229. 3BCC 6F0E MOVWF romstring, BANKED
  5230. 3BCE 0E04 MOVLW 0x4
  5231. 3BD0 6F0F MOVWF 0xF, BANKED
  5232. 106: usb_bdt[USB_CALC_BD(1, USB_DIR_IN, USB_PP_EVEN)].BDSTAT = DTS + DTSEN; // Set DTS => First packet inverts, ie. is Data0
  5233. 3BD2 0104 MOVLB 0x4
  5234. 3BD4 0E48 MOVLW 0x48
  5235. 3BD6 6F0C MOVWF 0xC, BANKED
  5236. 107: #else
  5237. 108: // TODO: Implement Ping-Pong buffering setup.
  5238. 109: #error "PP Mode not implemented yet"
  5239. 110: #endif
  5240. 111:
  5241. 112: usb_register_class_setup_handler(cdc_setup);
  5242. 3BD8 0E88 MOVLW 0x88
  5243. 3BDA 6EE6 MOVWF POSTINC1, ACCESS
  5244. 3BDC 0E3C MOVLW 0x3C
  5245. 3BDE 6EE6 MOVWF POSTINC1, ACCESS
  5246. 3BE0 EC3C CALL 0x2C78, 0
  5247. 3BE2 F016 NOP
  5248. 3BE4 52E5 MOVF POSTDEC1, F, ACCESS
  5249. 3BE6 52E5 MOVF POSTDEC1, F, ACCESS
  5250. 113: cdc_trf_state = 0;
  5251. 3BE8 0100 MOVLB 0x0
  5252. 3BEA 6BD8 CLRF cdc_trf_state, BANKED
  5253. 114: CDC_Outbdp = &usb_bdt[USB_CALC_BD(2, USB_DIR_OUT, USB_PP_EVEN)];
  5254. 3BEC 0100 MOVLB 0x0
  5255. 3BEE 0E10 MOVLW 0x10
  5256. 3BF0 6FD3 MOVWF CDC_Outbdp, BANKED
  5257. 3BF2 0E04 MOVLW 0x4
  5258. 3BF4 6FD4 MOVWF 0xD4, BANKED
  5259. 115: CDC_Inbdp = &usb_bdt[USB_CALC_BD(2, USB_DIR_IN, USB_PP_EVEN)];
  5260. 3BF6 0100 MOVLB 0x0
  5261. 3BF8 0E14 MOVLW 0x14
  5262. 3BFA 6FD5 MOVWF CDC_Inbdp, BANKED
  5263. 3BFC 0E04 MOVLW 0x4
  5264. 3BFE 6FD6 MOVWF 0xD6, BANKED
  5265. 116:
  5266. 117: IsInBufferA = 0xFF;
  5267. 3C00 0100 MOVLB 0x0
  5268. 3C02 69CD SETF IsInBufferA, BANKED
  5269. 118: InPtr = cdc_In_bufferA;
  5270. 3C04 0100 MOVLB 0x0
  5271. 3C06 0E80 MOVLW 0x80
  5272. 3C08 6FCF MOVWF InPtr, BANKED
  5273. 3C0A 0E05 MOVLW 0x5
  5274. 3C0C 6FD0 MOVWF 0xD0, BANKED
  5275. 119: cdc_In_len = 0;
  5276. 3C0E 0100 MOVLB 0x0
  5277. 3C10 6BCB CLRF cdc_In_len, BANKED
  5278. 120: CDC_Inbdp->BDADDR = &cdc_In_bufferA[0];
  5279. 3C12 C0D5 MOVFF CDC_Inbdp, FSR0L
  5280. 3C14 FFE9 NOP
  5281. 3C16 C0D6 MOVFF 0xD6, FSR0H
  5282. 3C18 FFEA NOP
  5283. 3C1A 0E02 MOVLW 0x2
  5284. 3C1C 26E9 ADDWF FSR0L, F, ACCESS
  5285. 3C1E 0E00 MOVLW 0x0
  5286. 3C20 22EA ADDWFC FSR0H, F, ACCESS
  5287. 3C22 0E80 MOVLW 0x80
  5288. 3C24 6EEE MOVWF POSTINC0, ACCESS
  5289. 3C26 0E05 MOVLW 0x5
  5290. 3C28 6EED MOVWF POSTDEC0, ACCESS
  5291. 121: CDC_Inbdp->BDCNT = 0;
  5292. 3C2A C0D5 MOVFF CDC_Inbdp, FSR0L
  5293. 3C2C FFE9 NOP
  5294. 3C2E C0D6 MOVFF 0xD6, FSR0H
  5295. 3C30 FFEA NOP
  5296. 3C32 52EE MOVF POSTINC0, F, ACCESS
  5297. 3C34 6AEF CLRF INDF0, ACCESS
  5298. 122: CDC_Inbdp->BDSTAT = DTS + DTSEN;
  5299. 3C36 C0D5 MOVFF CDC_Inbdp, FSR0L
  5300. 3C38 FFE9 NOP
  5301. 3C3A C0D6 MOVFF 0xD6, FSR0H
  5302. 3C3C FFEA NOP
  5303. 3C3E 0E48 MOVLW 0x48
  5304. 3C40 6EEF MOVWF INDF0, ACCESS
  5305. 123:
  5306. 124: cdc_Out_len = 0;
  5307. 3C42 0100 MOVLB 0x0
  5308. 3C44 6BCC CLRF cdc_Out_len, BANKED
  5309. 125: IsOutBufferA = 0xFF;
  5310. 3C46 0100 MOVLB 0x0
  5311. 3C48 69CE SETF IsOutBufferA, BANKED
  5312. 126: OutPtr = cdc_Out_bufferA;
  5313. 3C4A 0100 MOVLB 0x0
  5314. 3C4C 0E00 MOVLW 0x0
  5315. 3C4E 6FD1 MOVWF OutPtr, BANKED
  5316. 3C50 0E06 MOVLW 0x6
  5317. 3C52 6FD2 MOVWF 0xD2, BANKED
  5318. 127: CDC_Outbdp->BDCNT = CDC_BUFFER_SIZE;
  5319. 3C54 C0D3 MOVFF CDC_Outbdp, FSR0L
  5320. 3C56 FFE9 NOP
  5321. 3C58 C0D4 MOVFF 0xD4, FSR0H
  5322. 3C5A FFEA NOP
  5323. 3C5C 52EE MOVF POSTINC0, F, ACCESS
  5324. 3C5E 0E40 MOVLW 0x40
  5325. 3C60 6EEF MOVWF INDF0, ACCESS
  5326. 128: CDC_Outbdp->BDADDR = &cdc_Out_bufferA[0];
  5327. 3C62 C0D3 MOVFF CDC_Outbdp, FSR0L
  5328. 3C64 FFE9 NOP
  5329. 3C66 C0D4 MOVFF 0xD4, FSR0H
  5330. 3C68 FFEA NOP
  5331. 3C6A 0E02 MOVLW 0x2
  5332. 3C6C 26E9 ADDWF FSR0L, F, ACCESS
  5333. 3C6E 0E00 MOVLW 0x0
  5334. 3C70 22EA ADDWFC FSR0H, F, ACCESS
  5335. 3C72 0E00 MOVLW 0x0
  5336. 3C74 6EEE MOVWF POSTINC0, ACCESS
  5337. 3C76 0E06 MOVLW 0x6
  5338. 3C78 6EED MOVWF POSTDEC0, ACCESS
  5339. 129: CDC_Outbdp->BDSTAT = UOWN + DTSEN;
  5340. 3C7A C0D3 MOVFF CDC_Outbdp, FSR0L
  5341. 3C7C FFE9 NOP
  5342. 3C7E C0D4 MOVFF 0xD4, FSR0H
  5343. 3C80 FFEA NOP
  5344. 3C82 0E88 MOVLW 0x88
  5345. 3C84 6EEF MOVWF INDF0, ACCESS
  5346. 130: }
  5347. 3C86 0012 RETURN 0
  5348. 131:
  5349. 132: void cdc_setup(void) {
  5350. 3C88 CFD9 MOVFF FSR2L, POSTINC1
  5351. 3C8A FFE6 NOP
  5352. 3C8C CFE1 MOVFF FSR1L, FSR2L
  5353. 3C8E FFD9 NOP
  5354. 3C90 0E04 MOVLW 0x4
  5355. 3C92 26E1 ADDWF FSR1L, F, ACCESS
  5356. 133: BYTE *packet;
  5357. 134: size_t reply_len;
  5358. 135: packet = EP0_Outbdp->BDADDR;
  5359. 3C94 C0B8 MOVFF EP0_Outbdp, FSR0L
  5360. 3C96 FFE9 NOP
  5361. 3C98 C0B9 MOVFF 0xB9, FSR0H
  5362. 3C9A FFEA NOP
  5363. 3C9C 0E02 MOVLW 0x2
  5364. 3C9E 26E9 ADDWF FSR0L, F, ACCESS
  5365. 3CA0 0E00 MOVLW 0x0
  5366. 3CA2 22EA ADDWFC FSR0H, F, ACCESS
  5367. 3CA4 CFEE MOVFF POSTINC0, POSTINC2
  5368. 3CA6 FFDE NOP
  5369. 3CA8 CFED MOVFF POSTDEC0, POSTDEC2
  5370. 3CAA FFDD NOP
  5371. 136:
  5372. 137: switch (packet[USB_bmRequestType] & (USB_bmRequestType_TypeMask | USB_bmRequestType_RecipientMask)) {
  5373. 3CAC CFDE MOVFF POSTINC2, FSR0L
  5374. 3CAE FFE9 NOP
  5375. 3CB0 CFDD MOVFF POSTDEC2, FSR0H
  5376. 3CB2 FFEA NOP
  5377. 3CB4 50EF MOVF INDF0, W, ACCESS
  5378. 3CB6 0B63 ANDLW 0x63
  5379. 3CB8 0A21 XORLW 0x21
  5380. 3CBA E001 BZ 0x3CBE
  5381. 3CBC D0BB BRA 0x3E34
  5382. 138: case (USB_bmRequestType_Class | USB_bmRequestType_Interface):
  5383. 139: switch (packet[USB_bRequest]) {
  5384. 3CBE CFDE MOVFF POSTINC2, FSR0L
  5385. 3CC0 FFE9 NOP
  5386. 3CC2 CFDD MOVFF POSTDEC2, FSR0H
  5387. 3CC4 FFEA NOP
  5388. 3CC6 0E01 MOVLW 0x1
  5389. 3CC8 26E9 ADDWF FSR0L, F, ACCESS
  5390. 3CCA 0E00 MOVLW 0x0
  5391. 3CCC 22EA ADDWFC FSR0H, F, ACCESS
  5392. 3CCE 50EF MOVF INDF0, W, ACCESS
  5393. 3CD0 0A23 XORLW 0x23
  5394. 3CD2 E101 BNZ 0x3CD6
  5395. 3CD4 D0AC BRA 0x3E2E
  5396. 3CD6 0A01 XORLW 0x1
  5397. 3CD8 E101 BNZ 0x3CDC
  5398. 3CDA D085 BRA 0x3DE6
  5399. 3CDC 0A03 XORLW 0x3
  5400. 3CDE E02E BZ 0x3D3C
  5401. 3CE0 0A01 XORLW 0x1
  5402. 3CE2 E01E BZ 0x3D20
  5403. 3CE4 0A22 XORLW 0x22
  5404. 3CE6 E019 BZ 0x3D1A
  5405. 3CE8 0A01 XORLW 0x1
  5406. 3CEA E017 BZ 0x3D1A
  5407. 3CEC 0A07 XORLW 0x7
  5408. 3CEE E015 BZ 0x3D1A
  5409. 3CF0 0A05 XORLW 0x5
  5410. 3CF2 E00B BZ 0x3D0A
  5411. 3CF4 0A01 XORLW 0x1
  5412. 3CF6 E001 BZ 0x3CFA
  5413. 3CF8 D09A BRA 0x3E2E
  5414. 140:
  5415. 141: //JTR This is just a dummy, nothing defined to do for CDC ACM
  5416. 142: case CDC_SEND_ENCAPSULATED_COMMAND:
  5417. 143: usb_ack_dat1(0);
  5418. 3CFA 0E00 MOVLW 0x0
  5419. 3CFC 6EE6 MOVWF POSTINC1, ACCESS
  5420. 3CFE 6AE6 CLRF POSTINC1, ACCESS
  5421. 3D00 EC98 CALL 0x2D30, 0
  5422. 3D02 F016 NOP
  5423. 3D04 52E5 MOVF POSTDEC1, F, ACCESS
  5424. 3D06 52E5 MOVF POSTDEC1, F, ACCESS
  5425. 144: break;
  5426. 3D08 D094 BRA 0x3E32
  5427. 145:
  5428. 146: //JTR This is just a dummy, nothing defined to do for CDC ACM
  5429. 147: case CDC_GET_ENCAPSULATED_RESPONSE:
  5430. 148: //usb_ack_zero(rbdp);
  5431. 149: usb_ack_dat1(0);
  5432. 3D0A 0E00 MOVLW 0x0
  5433. 3D0C 6EE6 MOVWF POSTINC1, ACCESS
  5434. 3D0E 6AE6 CLRF POSTINC1, ACCESS
  5435. 3D10 EC98 CALL 0x2D30, 0
  5436. 3D12 F016 NOP
  5437. 3D14 52E5 MOVF POSTDEC1, F, ACCESS
  5438. 3D16 52E5 MOVF POSTDEC1, F, ACCESS
  5439. 150: break;
  5440. 3D18 D08C BRA 0x3E32
  5441. 151:
  5442. 152: case CDC_SET_COMM_FEATURE: // Optional
  5443. 153: case CDC_GET_COMM_FEATURE: // Optional
  5444. 154: case CDC_CLEAR_COMM_FEATURE: // Optional
  5445. 155: usb_RequestError(); // Not advertised in ACM functional descriptor
  5446. 3D1A ECB8 CALL 0x2D70, 0
  5447. 3D1C F016 NOP
  5448. 156: break;
  5449. 3D1E D089 BRA 0x3E32
  5450. 157:
  5451. 158: case CDC_SET_LINE_CODING: // Optional, strongly recomended
  5452. 159: usb_set_out_handler(0, cdc_set_line_coding_data); // Register out handler function
  5453. 3D20 0E66 MOVLW 0x66
  5454. 3D22 6EE6 MOVWF POSTINC1, ACCESS
  5455. 3D24 0E3E MOVLW 0x3E
  5456. 3D26 6EE6 MOVWF POSTINC1, ACCESS
  5457. 3D28 0E00 MOVLW 0x0
  5458. 3D2A 6EE6 MOVWF POSTINC1, ACCESS
  5459. 3D2C 6AE6 CLRF POSTINC1, ACCESS
  5460. 3D2E EC76 CALL 0x2CEC, 0
  5461. 3D30 F016 NOP
  5462. 3D32 52E5 MOVF POSTDEC1, F, ACCESS
  5463. 3D34 52E5 MOVF POSTDEC1, F, ACCESS
  5464. 3D36 52E5 MOVF POSTDEC1, F, ACCESS
  5465. 3D38 52E5 MOVF POSTDEC1, F, ACCESS
  5466. 160: break;
  5467. 3D3A D07B BRA 0x3E32
  5468. 161:
  5469. 162: case CDC_GET_LINE_CODING: // Optional, strongly recomended
  5470. 163: // JTR reply length (7) is always going to be less than minimum EP0 size (8)
  5471. 164:
  5472. 165: reply_len = *((unsigned int *) &packet[USB_wLength]);
  5473. 3D3C CFDE MOVFF POSTINC2, FSR0L
  5474. 3D3E FFE9 NOP
  5475. 3D40 CFDD MOVFF POSTDEC2, FSR0H
  5476. 3D42 FFEA NOP
  5477. 3D44 0E06 MOVLW 0x6
  5478. 3D46 26E9 ADDWF FSR0L, F, ACCESS
  5479. 3D48 0E00 MOVLW 0x0
  5480. 3D4A 22EA ADDWFC FSR0H, F, ACCESS
  5481. 3D4C 0E02 MOVLW 0x2
  5482. 3D4E CFEE MOVFF POSTINC0, PLUSW2
  5483. 3D50 FFDB NOP
  5484. 3D52 0E03 MOVLW 0x3
  5485. 3D54 CFED MOVFF POSTDEC0, PLUSW2
  5486. 3D56 FFDB NOP
  5487. 166: if (sizeof (struct cdc_LineCodeing) < reply_len) {
  5488. 3D58 0E02 MOVLW 0x2
  5489. 3D5A CFDB MOVFF PLUSW2, __tmp_0
  5490. 3D5C F014 NOP
  5491. 3D5E 0E03 MOVLW 0x3
  5492. 3D60 CFDB MOVFF PLUSW2, digit_cnt
  5493. 3D62 F015 NOP
  5494. 3D64 0E07 MOVLW 0x7
  5495. 3D66 80D8 BSF STATUS, 0, ACCESS
  5496. 3D68 5414 SUBFWB __tmp_0, W, ACCESS
  5497. 3D6A 0E00 MOVLW 0x0
  5498. 3D6C 5415 SUBFWB digit_cnt, W, ACCESS
  5499. 3D6E E207 BC 0x3D7E
  5500. 167: reply_len = sizeof (struct cdc_LineCodeing);
  5501. 3D70 0E07 MOVLW 0x7
  5502. 3D72 6EF3 MOVWF PRODL, ACCESS
  5503. 3D74 0E02 MOVLW 0x2
  5504. 3D76 CFF3 MOVFF PRODL, PLUSW2
  5505. 3D78 FFDB NOP
  5506. 3D7A 0E03 MOVLW 0x3
  5507. 3D7C 6ADB CLRF PLUSW2, ACCESS
  5508. 168: }
  5509. 169: memcpy(EP0_Inbdp->BDADDR, (const void *) &linecodeing, reply_len);
  5510. 3D7E 0E02 MOVLW 0x2
  5511. 3D80 CFDB MOVFF PLUSW2, POSTINC1
  5512. 3D82 FFE6 NOP
  5513. 3D84 0E03 MOVLW 0x3
  5514. 3D86 CFDB MOVFF PLUSW2, POSTINC1
  5515. 3D88 FFE6 NOP
  5516. 3D8A 0EC2 MOVLW 0xC2
  5517. 3D8C 6EE6 MOVWF POSTINC1, ACCESS
  5518. 3D8E 0E00 MOVLW 0x0
  5519. 3D90 6EE6 MOVWF POSTINC1, ACCESS
  5520. 3D92 C0BA MOVFF EP0_Inbdp, FSR0L
  5521. 3D94 FFE9 NOP
  5522. 3D96 C0BB MOVFF 0xBB, FSR0H
  5523. 3D98 FFEA NOP
  5524. 3D9A 0E02 MOVLW 0x2
  5525. 3D9C 26E9 ADDWF FSR0L, F, ACCESS
  5526. 3D9E 0E00 MOVLW 0x0
  5527. 3DA0 22EA ADDWFC FSR0H, F, ACCESS
  5528. 3DA2 CFEE MOVFF POSTINC0, POSTINC1
  5529. 3DA4 FFE6 NOP
  5530. 3DA6 CFEF MOVFF INDF0, POSTINC1
  5531. 3DA8 FFE6 NOP
  5532. 3DAA EC62 CALL 0x46C4, 0
  5533. 3DAC F023 NOP
  5534. 3DAE 6E14 MOVWF __tmp_0, ACCESS
  5535. 3DB0 0E06 MOVLW 0x6
  5536. 3DB2 5EE1 SUBWF FSR1L, F, ACCESS
  5537. 3DB4 5014 MOVF __tmp_0, W, ACCESS
  5538. 170: usb_ack_dat1(reply_len); // JTR common addition for STD and CLASS ACK
  5539. 3DB6 0E02 MOVLW 0x2
  5540. 3DB8 CFDB MOVFF PLUSW2, POSTINC1
  5541. 3DBA FFE6 NOP
  5542. 3DBC 0E03 MOVLW 0x3
  5543. 3DBE CFDB MOVFF PLUSW2, POSTINC1
  5544. 3DC0 FFE6 NOP
  5545. 3DC2 EC98 CALL 0x2D30, 0
  5546. 3DC4 F016 NOP
  5547. 3DC6 52E5 MOVF POSTDEC1, F, ACCESS
  5548. 3DC8 52E5 MOVF POSTDEC1, F, ACCESS
  5549. 171: usb_set_in_handler(0, cdc_get_line_coding);
  5550. 3DCA 0E4C MOVLW 0x4C
  5551. 3DCC 6EE6 MOVWF POSTINC1, ACCESS
  5552. 3DCE 0E3E MOVLW 0x3E
  5553. 3DD0 6EE6 MOVWF POSTINC1, ACCESS
  5554. 3DD2 0E00 MOVLW 0x0
  5555. 3DD4 6EE6 MOVWF POSTINC1, ACCESS
  5556. 3DD6 6AE6 CLRF POSTINC1, ACCESS
  5557. 3DD8 EC58 CALL 0x2CB0, 0
  5558. 3DDA F016 NOP
  5559. 3DDC 52E5 MOVF POSTDEC1, F, ACCESS
  5560. 3DDE 52E5 MOVF POSTDEC1, F, ACCESS
  5561. 3DE0 52E5 MOVF POSTDEC1, F, ACCESS
  5562. 3DE2 52E5 MOVF POSTDEC1, F, ACCESS
  5563. 172: break;
  5564. 3DE4 D026 BRA 0x3E32
  5565. 173:
  5566. 174: case CDC_SET_CONTROL_LINE_STATE: // Optional
  5567. 175: cls = *((struct _cdc_ControlLineState *) &packet[USB_wValue]);
  5568. 3DE6 CFDE MOVFF POSTINC2, FSR0L
  5569. 3DE8 FFE9 NOP
  5570. 3DEA CFDD MOVFF POSTDEC2, FSR0H
  5571. 3DEC FFEA NOP
  5572. 3DEE 0E02 MOVLW 0x2
  5573. 3DF0 26E9 ADDWF FSR0L, F, ACCESS
  5574. 3DF2 0E00 MOVLW 0x0
  5575. 3DF4 22EA ADDWFC FSR0H, F, ACCESS
  5576. 3DF6 CFEE MOVFF POSTINC0, cls
  5577. 3DF8 F0C9 NOP
  5578. 3DFA CFED MOVFF POSTDEC0, 0xCA
  5579. 3DFC F0CA NOP
  5580. 176: usb_set_in_handler(0, cdc_set_control_line_state_status); // JTR why bother?
  5581. 3DFE 0E00 MOVLW 0x0
  5582. 3E00 6EE6 MOVWF POSTINC1, ACCESS
  5583. 3E02 0E40 MOVLW 0x40
  5584. 3E04 6EE6 MOVWF POSTINC1, ACCESS
  5585. 3E06 0E00 MOVLW 0x0
  5586. 3E08 6EE6 MOVWF POSTINC1, ACCESS
  5587. 3E0A 6AE6 CLRF POSTINC1, ACCESS
  5588. 3E0C EC58 CALL 0x2CB0, 0
  5589. 3E0E F016 NOP
  5590. 3E10 52E5 MOVF POSTDEC1, F, ACCESS
  5591. 3E12 52E5 MOVF POSTDEC1, F, ACCESS
  5592. 3E14 52E5 MOVF POSTDEC1, F, ACCESS
  5593. 3E16 52E5 MOVF POSTDEC1, F, ACCESS
  5594. 177: usb_ack_dat1(0); // JTR common addition for STD and CLASS ACK
  5595. 3E18 0E00 MOVLW 0x0
  5596. 3E1A 6EE6 MOVWF POSTINC1, ACCESS
  5597. 3E1C 6AE6 CLRF POSTINC1, ACCESS
  5598. 3E1E EC98 CALL 0x2D30, 0
  5599. 3E20 F016 NOP
  5600. 3E22 52E5 MOVF POSTDEC1, F, ACCESS
  5601. 3E24 52E5 MOVF POSTDEC1, F, ACCESS
  5602. 178: LineStateUpdated = 1;
  5603. 3E26 0100 MOVLB 0x0
  5604. 3E28 0E01 MOVLW 0x1
  5605. 3E2A 6FE8 MOVWF LineStateUpdated, BANKED
  5606. 179: break;
  5607. 3E2C D002 BRA 0x3E32
  5608. 180:
  5609. 181: case CDC_SEND_BREAK: // Optional
  5610. 182: default:
  5611. 183: usb_RequestError();
  5612. 3E2E ECB8 CALL 0x2D70, 0
  5613. 3E30 F016 NOP
  5614. 184: }
  5615. 185: break;
  5616. 3E32 D002 BRA 0x3E38
  5617. 186: default:
  5618. 187: usb_RequestError();
  5619. 3E34 ECB8 CALL 0x2D70, 0
  5620. 3E36 F016 NOP
  5621. 188: }
  5622. 189: }
  5623. 3E38 0E04 MOVLW 0x4
  5624. 3E3A 5CE1 SUBWF FSR1L, W, ACCESS
  5625. 3E3C E202 BC 0x3E42
  5626. 3E3E 6AE1 CLRF FSR1L, ACCESS
  5627. 3E40 52E5 MOVF POSTDEC1, F, ACCESS
  5628. 3E42 6EE1 MOVWF FSR1L, ACCESS
  5629. 3E44 52E5 MOVF POSTDEC1, F, ACCESS
  5630. 3E46 CFE7 MOVFF INDF1, FSR2L
  5631. 3E48 FFD9 NOP
  5632. 3E4A 0012 RETURN 0
  5633. 190:
  5634. 191: void cdc_get_line_coding(void) {
  5635. 192: usb_unset_in_handler(0); // Unregister IN handler;
  5636. 3E4C 0E00 MOVLW 0x0
  5637. 3E4E 6EE6 MOVWF POSTINC1, ACCESS
  5638. 3E50 6AE6 CLRF POSTINC1, ACCESS
  5639. 3E52 0E00 MOVLW 0x0
  5640. 3E54 6EE6 MOVWF POSTINC1, ACCESS
  5641. 3E56 6AE6 CLRF POSTINC1, ACCESS
  5642. 3E58 EC58 CALL 0x2CB0, 0
  5643. 3E5A F016 NOP
  5644. 3E5C 52E5 MOVF POSTDEC1, F, ACCESS
  5645. 3E5E 52E5 MOVF POSTDEC1, F, ACCESS
  5646. 3E60 52E5 MOVF POSTDEC1, F, ACCESS
  5647. 3E62 52E5 MOVF POSTDEC1, F, ACCESS
  5648. 193: }
  5649. 3E64 0012 RETURN 0
  5650. 194:
  5651. 195: void cdc_set_line_coding_data(void) { // JTR handling an OUT token In the CDC stack this is the only function that handles an OUT data stage.
  5652. 3E66 CFD9 MOVFF FSR2L, POSTINC1
  5653. 3E68 FFE6 NOP
  5654. 3E6A CFE1 MOVFF FSR1L, FSR2L
  5655. 3E6C FFD9 NOP
  5656. 3E6E 0E08 MOVLW 0x8
  5657. 3E70 26E1 ADDWF FSR1L, F, ACCESS
  5658. 196: unsigned long dwBaud, dwBaudrem;
  5659. 197:
  5660. 198: memcpy(&linecodeing, (const void *) EP0_Outbdp->BDADDR, sizeof (struct cdc_LineCodeing));
  5661. 3E72 0E07 MOVLW 0x7
  5662. 3E74 6EE6 MOVWF POSTINC1, ACCESS
  5663. 3E76 6AE6 CLRF POSTINC1, ACCESS
  5664. 3E78 C0B8 MOVFF EP0_Outbdp, FSR0L
  5665. 3E7A FFE9 NOP
  5666. 3E7C C0B9 MOVFF 0xB9, FSR0H
  5667. 3E7E FFEA NOP
  5668. 3E80 0E02 MOVLW 0x2
  5669. 3E82 26E9 ADDWF FSR0L, F, ACCESS
  5670. 3E84 0E00 MOVLW 0x0
  5671. 3E86 22EA ADDWFC FSR0H, F, ACCESS
  5672. 3E88 CFEE MOVFF POSTINC0, POSTINC1
  5673. 3E8A FFE6 NOP
  5674. 3E8C CFEF MOVFF INDF0, POSTINC1
  5675. 3E8E FFE6 NOP
  5676. 3E90 0EC2 MOVLW 0xC2
  5677. 3E92 6EE6 MOVWF POSTINC1, ACCESS
  5678. 3E94 0E00 MOVLW 0x0
  5679. 3E96 6EE6 MOVWF POSTINC1, ACCESS
  5680. 3E98 EC62 CALL 0x46C4, 0
  5681. 3E9A F023 NOP
  5682. 3E9C 6E14 MOVWF __tmp_0, ACCESS
  5683. 3E9E 0E06 MOVLW 0x6
  5684. 3EA0 5EE1 SUBWF FSR1L, F, ACCESS
  5685. 3EA2 5014 MOVF __tmp_0, W, ACCESS
  5686. 199:
  5687. 200: dwBaud = BAUDCLOCK_FREQ / linecodeing.dwDTERate;
  5688. 3EA4 6A14 CLRF __tmp_0, ACCESS
  5689. 3EA6 0E1B MOVLW 0x1B
  5690. 3EA8 6E15 MOVWF digit_cnt, ACCESS
  5691. 3EAA 0EB7 MOVLW 0xB7
  5692. 3EAC 6E16 MOVWF prefix_cnt, ACCESS
  5693. 3EAE 6A17 CLRF sign_char, ACCESS
  5694. 3EB0 C014 MOVFF __tmp_0, i
  5695. 3EB2 F004 NOP
  5696. 3EB4 C015 MOVFF digit_cnt, precision
  5697. 3EB6 F005 NOP
  5698. 3EB8 C016 MOVFF prefix_cnt, pUEP
  5699. 3EBA F006 NOP
  5700. 3EBC C017 MOVFF sign_char, size
  5701. 3EBE F007 NOP
  5702. 3EC0 C0C2 MOVFF linecodeing, cval
  5703. 3EC2 F009 NOP
  5704. 3EC4 C0C3 MOVFF 0xC3, larg
  5705. 3EC6 F00A NOP
  5706. 3EC8 C0C4 MOVFF 0xC4, 0xB
  5707. 3ECA F00B NOP
  5708. 3ECC C0C5 MOVFF 0xC5, 0xC
  5709. 3ECE F00C NOP
  5710. 3ED0 EC9B CALL 0x4B36, 0
  5711. 3ED2 F025 NOP
  5712. 3ED4 C004 MOVFF i, POSTINC2
  5713. 3ED6 FFDE NOP
  5714. 3ED8 C005 MOVFF precision, POSTINC2
  5715. 3EDA FFDE NOP
  5716. 3EDC C006 MOVFF pUEP, POSTINC2
  5717. 3EDE FFDE NOP
  5718. 3EE0 C007 MOVFF size, POSTDEC2
  5719. 3EE2 FFDD NOP
  5720. 3EE4 52DD MOVF POSTDEC2, F, ACCESS
  5721. 3EE6 52DD MOVF POSTDEC2, F, ACCESS
  5722. 201: dwBaudrem = BAUDCLOCK_FREQ % linecodeing.dwDTERate;
  5723. 3EE8 C0C2 MOVFF linecodeing, cval
  5724. 3EEA F009 NOP
  5725. 3EEC C0C3 MOVFF 0xC3, larg
  5726. 3EEE F00A NOP
  5727. 3EF0 C0C4 MOVFF 0xC4, 0xB
  5728. 3EF2 F00B NOP
  5729. 3EF4 C0C5 MOVFF 0xC5, 0xC
  5730. 3EF6 F00C NOP
  5731. 3EF8 6A04 CLRF i, ACCESS
  5732. 3EFA 0E1B MOVLW 0x1B
  5733. 3EFC 6E05 MOVWF precision, ACCESS
  5734. 3EFE 0EB7 MOVLW 0xB7
  5735. 3F00 6E06 MOVWF pUEP, ACCESS
  5736. 3F02 6A07 CLRF size, ACCESS
  5737. 3F04 EC9B CALL 0x4B36, 0
  5738. 3F06 F025 NOP
  5739. 3F08 0E04 MOVLW 0x4
  5740. 3F0A C000 MOVFF i, PLUSW2
  5741. 3F0C FFDB NOP
  5742. 3F0E 0E05 MOVLW 0x5
  5743. 3F10 C001 MOVFF c, PLUSW2
  5744. 3F12 FFDB NOP
  5745. 3F14 0E06 MOVLW 0x6
  5746. 3F16 C002 MOVFF c2, PLUSW2
  5747. 3F18 FFDB NOP
  5748. 3F1A 0E07 MOVLW 0x7
  5749. 3F1C C003 MOVFF n, PLUSW2
  5750. 3F1E FFDB NOP
  5751. 202: if (linecodeing.dwDTERate > (dwBaudrem << 1))
  5752. 3F20 0E04 MOVLW 0x4
  5753. 3F22 CFDB MOVFF PLUSW2, __tmp_0
  5754. 3F24 F014 NOP
  5755. 3F26 0E05 MOVLW 0x5
  5756. 3F28 CFDB MOVFF PLUSW2, digit_cnt
  5757. 3F2A F015 NOP
  5758. 3F2C 0E06 MOVLW 0x6
  5759. 3F2E CFDB MOVFF PLUSW2, prefix_cnt
  5760. 3F30 F016 NOP
  5761. 3F32 0E07 MOVLW 0x7
  5762. 3F34 CFDB MOVFF PLUSW2, sign_char
  5763. 3F36 F017 NOP
  5764. 3F38 0E01 MOVLW 0x1
  5765. 3F3A 0B1F ANDLW 0x1F
  5766. 3F3C E007 BZ 0x3F4C
  5767. 3F3E 90D8 BCF STATUS, 0, ACCESS
  5768. 3F40 3614 RLCF __tmp_0, F, ACCESS
  5769. 3F42 3615 RLCF digit_cnt, F, ACCESS
  5770. 3F44 3616 RLCF prefix_cnt, F, ACCESS
  5771. 3F46 3617 RLCF sign_char, F, ACCESS
  5772. 3F48 06E8 DECF WREG, F, ACCESS
  5773. 3F4A E1F9 BNZ 0x3F3E
  5774. 3F4C 0100 MOVLB 0x0
  5775. 3F4E 51C2 MOVF linecodeing, W, BANKED
  5776. 3F50 5C14 SUBWF __tmp_0, W, ACCESS
  5777. 3F52 0100 MOVLB 0x0
  5778. 3F54 51C3 MOVF 0xC3, W, BANKED
  5779. 3F56 5815 SUBWFB digit_cnt, W, ACCESS
  5780. 3F58 0100 MOVLB 0x0
  5781. 3F5A 51C4 MOVF 0xC4, W, BANKED
  5782. 3F5C 5816 SUBWFB prefix_cnt, W, ACCESS
  5783. 3F5E 0100 MOVLB 0x0
  5784. 3F60 51C5 MOVF 0xC5, W, BANKED
  5785. 3F62 5817 SUBWFB sign_char, W, ACCESS
  5786. 3F64 E209 BC 0x3F78
  5787. 203: dwBaud--;
  5788. 3F66 CFD9 MOVFF FSR2L, FSR0L
  5789. 3F68 FFE9 NOP
  5790. 3F6A CFDA MOVFF FSR2H, FSR0H
  5791. 3F6C FFEA NOP
  5792. 3F6E 06EE DECF POSTINC0, F, ACCESS
  5793. 3F70 0E00 MOVLW 0x0
  5794. 3F72 5AEE SUBWFB POSTINC0, F, ACCESS
  5795. 3F74 5AEE SUBWFB POSTINC0, F, ACCESS
  5796. 3F76 5AEE SUBWFB POSTINC0, F, ACCESS
  5797. 204:
  5798. 205: UART_BAUD_setup(dwBaud);
  5799. 206:
  5800. 207: usb_unset_out_handler(0); // Unregister OUT handler; JTR serious bug fix in macro!
  5801. 3F78 0E00 MOVLW 0x0
  5802. 3F7A 6EE6 MOVWF POSTINC1, ACCESS
  5803. 3F7C 6AE6 CLRF POSTINC1, ACCESS
  5804. 3F7E 0E00 MOVLW 0x0
  5805. 3F80 6EE6 MOVWF POSTINC1, ACCESS
  5806. 3F82 6AE6 CLRF POSTINC1, ACCESS
  5807. 3F84 EC76 CALL 0x2CEC, 0
  5808. 3F86 F016 NOP
  5809. 3F88 52E5 MOVF POSTDEC1, F, ACCESS
  5810. 3F8A 52E5 MOVF POSTDEC1, F, ACCESS
  5811. 3F8C 52E5 MOVF POSTDEC1, F, ACCESS
  5812. 3F8E 52E5 MOVF POSTDEC1, F, ACCESS
  5813. 208: usb_set_in_handler(0, cdc_set_line_coding_status); // JTR why bother?
  5814. 3F90 0EE6 MOVLW 0xE6
  5815. 3F92 6EE6 MOVWF POSTINC1, ACCESS
  5816. 3F94 0E3F MOVLW 0x3F
  5817. 3F96 6EE6 MOVWF POSTINC1, ACCESS
  5818. 3F98 0E00 MOVLW 0x0
  5819. 3F9A 6EE6 MOVWF POSTINC1, ACCESS
  5820. 3F9C 6AE6 CLRF POSTINC1, ACCESS
  5821. 3F9E EC58 CALL 0x2CB0, 0
  5822. 3FA0 F016 NOP
  5823. 3FA2 52E5 MOVF POSTDEC1, F, ACCESS
  5824. 3FA4 52E5 MOVF POSTDEC1, F, ACCESS
  5825. 3FA6 52E5 MOVF POSTDEC1, F, ACCESS
  5826. 3FA8 52E5 MOVF POSTDEC1, F, ACCESS
  5827. 209: usb_ack_dat1(0); // JTR common addition for STD and CLASS ACK
  5828. 3FAA 0E00 MOVLW 0x0
  5829. 3FAC 6EE6 MOVWF POSTINC1, ACCESS
  5830. 3FAE 6AE6 CLRF POSTINC1, ACCESS
  5831. 3FB0 EC98 CALL 0x2D30, 0
  5832. 3FB2 F016 NOP
  5833. 3FB4 52E5 MOVF POSTDEC1, F, ACCESS
  5834. 3FB6 52E5 MOVF POSTDEC1, F, ACCESS
  5835. 210:
  5836. 211: // JTR This part of the USB-CDC stack is worth highlighting
  5837. 212: // This is the only place that we have an OUT DATA packet on
  5838. 213: // EP0. At this point it has been completed. This stack unlike
  5839. 214: // the microchip stack does not have a common IN or OUT data
  5840. 215: // packet complete tail and therefore it is the responsibility
  5841. 216: // of each section to ensure that EP0 is set-up correctly for
  5842. 217: // the next setup packet.
  5843. 218:
  5844. 219:
  5845. 220: // Force EP0 OUT to the DAT0 state
  5846. 221: // after we have all our data packets.
  5847. 222: EP0_Outbdp->BDCNT = USB_EP0_BUFFER_SIZE;
  5848. 3FB8 C0B8 MOVFF EP0_Outbdp, FSR0L
  5849. 3FBA FFE9 NOP
  5850. 3FBC C0B9 MOVFF 0xB9, FSR0H
  5851. 3FBE FFEA NOP
  5852. 3FC0 52EE MOVF POSTINC0, F, ACCESS
  5853. 3FC2 0E08 MOVLW 0x8
  5854. 3FC4 6EEF MOVWF INDF0, ACCESS
  5855. 223: EP0_Outbdp->BDSTAT = UOWN | DTSEN;
  5856. 3FC6 C0B8 MOVFF EP0_Outbdp, FSR0L
  5857. 3FC8 FFE9 NOP
  5858. 3FCA C0B9 MOVFF 0xB9, FSR0H
  5859. 3FCC FFEA NOP
  5860. 3FCE 0E88 MOVLW 0x88
  5861. 3FD0 6EEF MOVWF INDF0, ACCESS
  5862. 224: }
  5863. 3FD2 0E08 MOVLW 0x8
  5864. 3FD4 5CE1 SUBWF FSR1L, W, ACCESS
  5865. 3FD6 E202 BC 0x3FDC
  5866. 3FD8 6AE1 CLRF FSR1L, ACCESS
  5867. 3FDA 52E5 MOVF POSTDEC1, F, ACCESS
  5868. 3FDC 6EE1 MOVWF FSR1L, ACCESS
  5869. 3FDE 52E5 MOVF POSTDEC1, F, ACCESS
  5870. 3FE0 CFE7 MOVFF INDF1, FSR2L
  5871. 3FE2 FFD9 NOP
  5872. 3FE4 0012 RETURN 0
  5873. 225:
  5874. 226: void cdc_set_line_coding_status(void) {
  5875. 227: usb_unset_in_handler(0);
  5876. 3FE6 0E00 MOVLW 0x0
  5877. 3FE8 6EE6 MOVWF POSTINC1, ACCESS
  5878. 3FEA 6AE6 CLRF POSTINC1, ACCESS
  5879. 3FEC 0E00 MOVLW 0x0
  5880. 3FEE 6EE6 MOVWF POSTINC1, ACCESS
  5881. 3FF0 6AE6 CLRF POSTINC1, ACCESS
  5882. 3FF2 EC58 CALL 0x2CB0, 0
  5883. 3FF4 F016 NOP
  5884. 3FF6 52E5 MOVF POSTDEC1, F, ACCESS
  5885. 3FF8 52E5 MOVF POSTDEC1, F, ACCESS
  5886. 3FFA 52E5 MOVF POSTDEC1, F, ACCESS
  5887. 3FFC 52E5 MOVF POSTDEC1, F, ACCESS
  5888. 228: }
  5889. 3FFE 0012 RETURN 0
  5890. 229:
  5891. 230: void cdc_set_control_line_state_status(void) {
  5892. 231: usb_unset_in_handler(0);
  5893. 4000 0E00 MOVLW 0x0
  5894. 4002 6EE6 MOVWF POSTINC1, ACCESS
  5895. 4004 6AE6 CLRF POSTINC1, ACCESS
  5896. 4006 0E00 MOVLW 0x0
  5897. 4008 6EE6 MOVWF POSTINC1, ACCESS
  5898. 400A 6AE6 CLRF POSTINC1, ACCESS
  5899. 400C EC58 CALL 0x2CB0, 0
  5900. 400E F016 NOP
  5901. 4010 52E5 MOVF POSTDEC1, F, ACCESS
  5902. 4012 52E5 MOVF POSTDEC1, F, ACCESS
  5903. 4014 52E5 MOVF POSTDEC1, F, ACCESS
  5904. 4016 52E5 MOVF POSTDEC1, F, ACCESS
  5905. 232: }
  5906. 4018 0012 RETURN 0
  5907. 233:
  5908. 234: /*****************************************************************************/
  5909. 235: void WaitOutReady() // JTR2 added reduced overhead
  5910. 236: {
  5911. 237: while ((CDC_Outbdp->BDSTAT & UOWN));
  5912. 401A C0D3 MOVFF CDC_Outbdp, FSR0L
  5913. 401C FFE9 NOP
  5914. 401E C0D4 MOVFF 0xD4, FSR0H
  5915. 4020 FFEA NOP
  5916. 4022 50EF MOVF INDF0, W, ACCESS
  5917. 4024 0B80 ANDLW 0x80
  5918. 4026 E001 BZ 0x402A
  5919. 4028 D7F8 BRA WaitOutReady
  5920. 238: }
  5921. 402A 0012 RETURN 0
  5922. 239:
  5923. 240: /******************************************************************************/
  5924. 241:
  5925. 242: void WaitInReady() // JTR2 added reduced overhead
  5926. 243: {
  5927. 244: while ((CDC_Inbdp->BDSTAT & UOWN));
  5928. 402C C0D5 MOVFF CDC_Inbdp, FSR0L
  5929. 402E FFE9 NOP
  5930. 4030 C0D6 MOVFF 0xD6, FSR0H
  5931. 4032 FFEA NOP
  5932. 4034 50EF MOVF INDF0, W, ACCESS
  5933. 4036 0B80 ANDLW 0x80
  5934. 4038 E001 BZ 0x403C
  5935. 403A D7F8 BRA WaitInReady
  5936. 245: }//end WaitInReady
  5937. 403C 0012 RETURN 0
  5938. 246:
  5939. 247: /******************************************************************************/
  5940. 248: BYTE getOutReady(void) {
  5941. 249:
  5942. 250: return !(CDC_Outbdp->BDSTAT & UOWN); // Do we have a packet from host?
  5943. 403E C0D3 MOVFF CDC_Outbdp, FSR0L
  5944. 4040 FFE9 NOP
  5945. 4042 C0D4 MOVFF 0xD4, FSR0H
  5946. 4044 FFEA NOP
  5947. 4046 50EF MOVF INDF0, W, ACCESS
  5948. 4048 0B80 ANDLW 0x80
  5949. 404A E002 BZ 0x4050
  5950. 404C 0E00 MOVLW 0x0
  5951. 404E D001 BRA 0x4052
  5952. 4050 0E01 MOVLW 0x1
  5953. 4052 D000 BRA 0x4054
  5954. 251: }
  5955. 4054 0012 RETURN 0
  5956. 252:
  5957. 253: /******************************************************************************/
  5958. 254: BYTE getInReady(void) {
  5959. 255:
  5960. 256: return !(CDC_Inbdp->BDSTAT & UOWN); // Is the CDC In buffer ready?
  5961. 4056 C0D5 MOVFF CDC_Inbdp, FSR0L
  5962. 4058 FFE9 NOP
  5963. 405A C0D6 MOVFF 0xD6, FSR0H
  5964. 405C FFEA NOP
  5965. 405E 50EF MOVF INDF0, W, ACCESS
  5966. 4060 0B80 ANDLW 0x80
  5967. 4062 E002 BZ 0x4068
  5968. 4064 0E00 MOVLW 0x0
  5969. 4066 D001 BRA 0x406A
  5970. 4068 0E01 MOVLW 0x1
  5971. 406A D000 BRA 0x406C
  5972. 257: }
  5973. 406C 0012 RETURN 0
  5974. 258:
  5975. 259: /******************************************************************************/
  5976. 260: BYTE getda_cdc(void) {
  5977. 261:
  5978. 262: CDCFunctionError = 0;
  5979. 406E 0100 MOVLB 0x0
  5980. 4070 6BD7 CLRF CDCFunctionError, BANKED
  5981. 263:
  5982. 264: WaitOutReady();
  5983. 4072 DFD3 RCALL WaitOutReady
  5984. 265:
  5985. 266: if ((IsOutBufferA & 1)) {
  5986. 4074 0100 MOVLB 0x0
  5987. 4076 A1CE BTFSS IsOutBufferA, 0, BANKED
  5988. 4078 D012 BRA 0x409E
  5989. 267: OutPtr = &cdc_Out_bufferA[0];
  5990. 407A 0100 MOVLB 0x0
  5991. 407C 0E00 MOVLW 0x0
  5992. 407E 6FD1 MOVWF OutPtr, BANKED
  5993. 4080 0E06 MOVLW 0x6
  5994. 4082 6FD2 MOVWF 0xD2, BANKED
  5995. 268: CDC_Outbdp->BDADDR = &cdc_Out_bufferB[0];
  5996. 4084 C0D3 MOVFF CDC_Outbdp, FSR0L
  5997. 4086 FFE9 NOP
  5998. 4088 C0D4 MOVFF 0xD4, FSR0H
  5999. 408A FFEA NOP
  6000. 408C 0E02 MOVLW 0x2
  6001. 408E 26E9 ADDWF FSR0L, F, ACCESS
  6002. 4090 0E00 MOVLW 0x0
  6003. 4092 22EA ADDWFC FSR0H, F, ACCESS
  6004. 4094 0E40 MOVLW 0x40
  6005. 4096 6EEE MOVWF POSTINC0, ACCESS
  6006. 4098 0E06 MOVLW 0x6
  6007. 409A 6EED MOVWF POSTDEC0, ACCESS
  6008. 269: } else {
  6009. 409C D011 BRA 0x40C0
  6010. 270: OutPtr = &cdc_Out_bufferB[0];
  6011. 409E 0100 MOVLB 0x0
  6012. 40A0 0E40 MOVLW 0x40
  6013. 40A2 6FD1 MOVWF OutPtr, BANKED
  6014. 40A4 0E06 MOVLW 0x6
  6015. 40A6 6FD2 MOVWF 0xD2, BANKED
  6016. 271: CDC_Outbdp->BDADDR = &cdc_Out_bufferA[0];
  6017. 40A8 C0D3 MOVFF CDC_Outbdp, FSR0L
  6018. 40AA FFE9 NOP
  6019. 40AC C0D4 MOVFF 0xD4, FSR0H
  6020. 40AE FFEA NOP
  6021. 40B0 0E02 MOVLW 0x2
  6022. 40B2 26E9 ADDWF FSR0L, F, ACCESS
  6023. 40B4 0E00 MOVLW 0x0
  6024. 40B6 22EA ADDWFC FSR0H, F, ACCESS
  6025. 40B8 0E00 MOVLW 0x0
  6026. 40BA 6EEE MOVWF POSTINC0, ACCESS
  6027. 40BC 0E06 MOVLW 0x6
  6028. 40BE 6EED MOVWF POSTDEC0, ACCESS
  6029. 272: }
  6030. 273: IsOutBufferA ^= 0xFF;
  6031. 40C0 0100 MOVLB 0x0
  6032. 40C2 1FCE COMF IsOutBufferA, F, BANKED
  6033. 274: cdc_Out_len = CDC_Outbdp->BDCNT;
  6034. 40C4 C0D3 MOVFF CDC_Outbdp, FSR0L
  6035. 40C6 FFE9 NOP
  6036. 40C8 C0D4 MOVFF 0xD4, FSR0H
  6037. 40CA FFEA NOP
  6038. 40CC 52EE MOVF POSTINC0, F, ACCESS
  6039. 40CE CFEF MOVFF INDF0, cdc_Out_len
  6040. 40D0 F0CC NOP
  6041. 275: CDC_Outbdp->BDCNT = CDC_BUFFER_SIZE;
  6042. 40D2 C0D3 MOVFF CDC_Outbdp, FSR0L
  6043. 40D4 FFE9 NOP
  6044. 40D6 C0D4 MOVFF 0xD4, FSR0H
  6045. 40D8 FFEA NOP
  6046. 40DA 52EE MOVF POSTINC0, F, ACCESS
  6047. 40DC 0E40 MOVLW 0x40
  6048. 40DE 6EEF MOVWF INDF0, ACCESS
  6049. 276: CDC_Outbdp->BDSTAT = ((CDC_Outbdp->BDSTAT ^ DTS) & DTS) | UOWN | DTSEN;
  6050. 40E0 C0D3 MOVFF CDC_Outbdp, FSR0L
  6051. 40E2 FFE9 NOP
  6052. 40E4 C0D4 MOVFF 0xD4, FSR0H
  6053. 40E6 FFEA NOP
  6054. 40E8 50EF MOVF INDF0, W, ACCESS
  6055. 40EA 0A40 XORLW 0x40
  6056. 40EC 0B40 ANDLW 0x40
  6057. 40EE 0980 IORLW 0x80
  6058. 40F0 0908 IORLW 0x8
  6059. 40F2 6EE6 MOVWF POSTINC1, ACCESS
  6060. 40F4 C0D3 MOVFF CDC_Outbdp, FSR0L
  6061. 40F6 FFE9 NOP
  6062. 40F8 C0D4 MOVFF 0xD4, FSR0H
  6063. 40FA FFEA NOP
  6064. 40FC 52E5 MOVF POSTDEC1, F, ACCESS
  6065. 40FE 50E7 MOVF INDF1, W, ACCESS
  6066. 4100 6EEF MOVWF INDF0, ACCESS
  6067. 277: #ifndef USB_INTERRUPTS
  6068. 278: usb_handler();
  6069. 279: #endif
  6070. 280: return cdc_Out_len;
  6071. 4102 0100 MOVLB 0x0
  6072. 4104 51CC MOVF cdc_Out_len, W, BANKED
  6073. 4106 D000 BRA 0x4108
  6074. 281: }//end getCDC_Out_ArmNext
  6075. 4108 0012 RETURN 0
  6076. 282:
  6077. 283: BYTE putda_cdc(BYTE count) {
  6078. 410A CFD9 MOVFF FSR2L, POSTINC1
  6079. 410C FFE6 NOP
  6080. 410E CFE1 MOVFF FSR1L, FSR2L
  6081. 4110 FFD9 NOP
  6082. 284:
  6083. 285: // CDCFunctionError = 0;
  6084. 286: // WaitInReady();
  6085. 287: while ((CDC_Inbdp->BDSTAT & UOWN));
  6086. 4112 C0D5 MOVFF CDC_Inbdp, FSR0L
  6087. 4114 FFE9 NOP
  6088. 4116 C0D6 MOVFF 0xD6, FSR0H
  6089. 4118 FFEA NOP
  6090. 411A 50EF MOVF INDF0, W, ACCESS
  6091. 411C 0B80 ANDLW 0x80
  6092. 411E E001 BZ 0x4122
  6093. 4120 D7F8 BRA 0x4112
  6094. 288: if (IsInBufferA) {
  6095. 4122 0100 MOVLB 0x0
  6096. 4124 51CD MOVF IsInBufferA, W, BANKED
  6097. 4126 E012 BZ 0x414C
  6098. 289: CDC_Inbdp->BDADDR = cdc_In_bufferA;
  6099. 4128 C0D5 MOVFF CDC_Inbdp, FSR0L
  6100. 412A FFE9 NOP
  6101. 412C C0D6 MOVFF 0xD6, FSR0H
  6102. 412E FFEA NOP
  6103. 4130 0E02 MOVLW 0x2
  6104. 4132 26E9 ADDWF FSR0L, F, ACCESS
  6105. 4134 0E00 MOVLW 0x0
  6106. 4136 22EA ADDWFC FSR0H, F, ACCESS
  6107. 4138 0E80 MOVLW 0x80
  6108. 413A 6EEE MOVWF POSTINC0, ACCESS
  6109. 413C 0E05 MOVLW 0x5
  6110. 413E 6EED MOVWF POSTDEC0, ACCESS
  6111. 290: InPtr = cdc_In_bufferB;
  6112. 4140 0100 MOVLB 0x0
  6113. 4142 0EC0 MOVLW 0xC0
  6114. 4144 6FCF MOVWF InPtr, BANKED
  6115. 4146 0E05 MOVLW 0x5
  6116. 4148 6FD0 MOVWF 0xD0, BANKED
  6117. 291: } else {
  6118. 414A D011 BRA 0x416E
  6119. 292: CDC_Inbdp->BDADDR = cdc_In_bufferB;
  6120. 414C C0D5 MOVFF CDC_Inbdp, FSR0L
  6121. 414E FFE9 NOP
  6122. 4150 C0D6 MOVFF 0xD6, FSR0H
  6123. 4152 FFEA NOP
  6124. 4154 0E02 MOVLW 0x2
  6125. 4156 26E9 ADDWF FSR0L, F, ACCESS
  6126. 4158 0E00 MOVLW 0x0
  6127. 415A 22EA ADDWFC FSR0H, F, ACCESS
  6128. 415C 0EC0 MOVLW 0xC0
  6129. 415E 6EEE MOVWF POSTINC0, ACCESS
  6130. 4160 0E05 MOVLW 0x5
  6131. 4162 6EED MOVWF POSTDEC0, ACCESS
  6132. 293: InPtr = cdc_In_bufferA;
  6133. 4164 0100 MOVLB 0x0
  6134. 4166 0E80 MOVLW 0x80
  6135. 4168 6FCF MOVWF InPtr, BANKED
  6136. 416A 0E05 MOVLW 0x5
  6137. 416C 6FD0 MOVWF 0xD0, BANKED
  6138. 294: }
  6139. 295: CDC_Inbdp->BDCNT = count;
  6140. 416E C0D5 MOVFF CDC_Inbdp, FSR0L
  6141. 4170 FFE9 NOP
  6142. 4172 C0D6 MOVFF 0xD6, FSR0H
  6143. 4174 FFEA NOP
  6144. 4176 52EE MOVF POSTINC0, F, ACCESS
  6145. 4178 0EFE MOVLW 0xFE
  6146. 417A CFDB MOVFF PLUSW2, INDF0
  6147. 417C FFEF NOP
  6148. 296: CDC_Inbdp->BDSTAT = ((CDC_Inbdp->BDSTAT ^ DTS) & DTS) | UOWN | DTSEN;
  6149. 417E C0D5 MOVFF CDC_Inbdp, FSR0L
  6150. 4180 FFE9 NOP
  6151. 4182 C0D6 MOVFF 0xD6, FSR0H
  6152. 4184 FFEA NOP
  6153. 4186 50EF MOVF INDF0, W, ACCESS
  6154. 4188 0A40 XORLW 0x40
  6155. 418A 0B40 ANDLW 0x40
  6156. 418C 0980 IORLW 0x80
  6157. 418E 0908 IORLW 0x8
  6158. 4190 6EE6 MOVWF POSTINC1, ACCESS
  6159. 4192 C0D5 MOVFF CDC_Inbdp, FSR0L
  6160. 4194 FFE9 NOP
  6161. 4196 C0D6 MOVFF 0xD6, FSR0H
  6162. 4198 FFEA NOP
  6163. 419A 52E5 MOVF POSTDEC1, F, ACCESS
  6164. 419C 50E7 MOVF INDF1, W, ACCESS
  6165. 419E 6EEF MOVWF INDF0, ACCESS
  6166. 297: IsInBufferA ^= 0xFF;
  6167. 41A0 0100 MOVLB 0x0
  6168. 41A2 1FCD COMF IsInBufferA, F, BANKED
  6169. 298: #ifndef USB_INTERRUPTS
  6170. 299: usb_handler();
  6171. 300: #endif
  6172. 301: return 0; //CDCFunctionError;
  6173. 41A4 0E00 MOVLW 0x0
  6174. 41A6 D000 BRA 0x41A8
  6175. 302: }
  6176. 41A8 52E5 MOVF POSTDEC1, F, ACCESS
  6177. 41AA CFE7 MOVFF INDF1, FSR2L
  6178. 41AC FFD9 NOP
  6179. 41AE 0012 RETURN 0
  6180. 303:
  6181. 304: void SendZLP(void) {
  6182. 305: putda_cdc(0);
  6183. 41B0 6AE6 CLRF POSTINC1, ACCESS
  6184. 41B2 DFAB RCALL putda_cdc
  6185. 41B4 52E5 MOVF POSTDEC1, F, ACCESS
  6186. 306: }
  6187. 41B6 0012 RETURN 0
  6188. 307:
  6189. 308: /******************************************************************************/
  6190. 309: void CDC_Flush_In_Now(void) {
  6191. 310: if (cdc_In_len > 0) {
  6192. 41B8 0100 MOVLB 0x0
  6193. 41BA 51CB MOVF cdc_In_len, W, BANKED
  6194. 41BC 0800 SUBLW 0x0
  6195. 41BE E216 BC 0x41EC
  6196. 311: while (!getInReady());
  6197. 41C0 DF4A RCALL getInReady
  6198. 41C2 0900 IORLW 0x0
  6199. 41C4 E101 BNZ 0x41C8
  6200. 41C6 D7FC BRA 0x41C0
  6201. 312: putda_cdc(cdc_In_len);
  6202. 41C8 C0CB MOVFF cdc_In_len, POSTINC1
  6203. 41CA FFE6 NOP
  6204. 41CC DF9E RCALL putda_cdc
  6205. 41CE 52E5 MOVF POSTDEC1, F, ACCESS
  6206. 313: if (cdc_In_len == CDC_BUFFER_SIZE) {
  6207. 41D0 0E40 MOVLW 0x40
  6208. 41D2 0100 MOVLB 0x0
  6209. 41D4 5DCB SUBWF cdc_In_len, W, BANKED
  6210. 41D6 E104 BNZ 0x41E0
  6211. 314: ZLPpending = 1;
  6212. 41D8 0100 MOVLB 0x0
  6213. 41DA 0E01 MOVLW 0x1
  6214. 41DC 6FEA MOVWF ZLPpending, BANKED
  6215. 315: } else {
  6216. 41DE D002 BRA 0x41E4
  6217. 316: ZLPpending = 0;
  6218. 41E0 0100 MOVLB 0x0
  6219. 41E2 6BEA CLRF ZLPpending, BANKED
  6220. 317: }
  6221. 318: cdc_In_len = 0;
  6222. 41E4 0100 MOVLB 0x0
  6223. 41E6 6BCB CLRF cdc_In_len, BANKED
  6224. 319: cdc_timeout_count = 0;
  6225. 41E8 0100 MOVLB 0x0
  6226. 41EA 6BE9 CLRF cdc_timeout_count, BANKED
  6227. 320: }
  6228. 321: }
  6229. 41EC 0012 RETURN 0
  6230. 322:
  6231. 323: /******************************************************************************/
  6232. 324: void CDCFlushOnTimeout(void) {
  6233. 325:
  6234. 326: if (cdc_timeout_count >= CDC_FLUSH_MS) { // For timeout value see: cdc_config.h -> [hardware] -> CDC_FLUSH_MS
  6235. 41EE 0E04 MOVLW 0x4
  6236. 41F0 0100 MOVLB 0x0
  6237. 41F2 5DE9 SUBWF cdc_timeout_count, W, BANKED
  6238. 41F4 E328 BNC 0x4246
  6239. 327:
  6240. 328: if (cdc_In_len > 0) {
  6241. 41F6 0100 MOVLB 0x0
  6242. 41F8 51CB MOVF cdc_In_len, W, BANKED
  6243. 41FA 0800 SUBLW 0x0
  6244. 41FC E219 BC 0x4230
  6245. 329: if ((lock == 0) && getInReady()) {
  6246. 41FE 0100 MOVLB 0x0
  6247. 4200 51EB MOVF lock, W, BANKED
  6248. 4202 E115 BNZ 0x422E
  6249. 4204 DF28 RCALL getInReady
  6250. 4206 0900 IORLW 0x0
  6251. 4208 E012 BZ 0x422E
  6252. 330: putda_cdc(cdc_In_len);
  6253. 420A C0CB MOVFF cdc_In_len, POSTINC1
  6254. 420C FFE6 NOP
  6255. 420E DF7D RCALL putda_cdc
  6256. 4210 52E5 MOVF POSTDEC1, F, ACCESS
  6257. 331: if (cdc_In_len == CDC_BUFFER_SIZE) {
  6258. 4212 0E40 MOVLW 0x40
  6259. 4214 0100 MOVLB 0x0
  6260. 4216 5DCB SUBWF cdc_In_len, W, BANKED
  6261. 4218 E104 BNZ 0x4222
  6262. 332: ZLPpending = 1;
  6263. 421A 0100 MOVLB 0x0
  6264. 421C 0E01 MOVLW 0x1
  6265. 421E 6FEA MOVWF ZLPpending, BANKED
  6266. 333: } else {
  6267. 4220 D002 BRA 0x4226
  6268. 334: ZLPpending = 0;
  6269. 4222 0100 MOVLB 0x0
  6270. 4224 6BEA CLRF ZLPpending, BANKED
  6271. 335: }
  6272. 336: cdc_In_len = 0;
  6273. 4226 0100 MOVLB 0x0
  6274. 4228 6BCB CLRF cdc_In_len, BANKED
  6275. 337: cdc_timeout_count = 0;
  6276. 422A 0100 MOVLB 0x0
  6277. 422C 6BE9 CLRF cdc_timeout_count, BANKED
  6278. 338: }
  6279. 339: } else if (ZLPpending) {
  6280. 422E D00A BRA 0x4244
  6281. 4230 0100 MOVLB 0x0
  6282. 4232 51EA MOVF ZLPpending, W, BANKED
  6283. 4234 E007 BZ 0x4244
  6284. 340: putda_cdc(0);
  6285. 4236 6AE6 CLRF POSTINC1, ACCESS
  6286. 4238 DF68 RCALL putda_cdc
  6287. 423A 52E5 MOVF POSTDEC1, F, ACCESS
  6288. 341: ZLPpending = 0;
  6289. 423C 0100 MOVLB 0x0
  6290. 423E 6BEA CLRF ZLPpending, BANKED
  6291. 342: cdc_timeout_count = 0;
  6292. 4240 0100 MOVLB 0x0
  6293. 4242 6BE9 CLRF cdc_timeout_count, BANKED
  6294. 343: }
  6295. 344: } else {
  6296. 4244 D002 BRA 0x424A
  6297. 345: cdc_timeout_count++;
  6298. 4246 0100 MOVLB 0x0
  6299. 4248 2BE9 INCF cdc_timeout_count, F, BANKED
  6300. 346: }
  6301. 347: }
  6302. 424A 0012 RETURN 0
  6303. 348:
  6304. 349: /******************************************************************************/
  6305. 350: void putc_cdc(BYTE c) {
  6306. 424C CFD9 MOVFF FSR2L, POSTINC1
  6307. 424E FFE6 NOP
  6308. 4250 CFE1 MOVFF FSR1L, FSR2L
  6309. 4252 FFD9 NOP
  6310. 351: lock = 1; // Stops CDCFlushOnTimeout() from sending per chance it is on interrupts.
  6311. 4254 0100 MOVLB 0x0
  6312. 4256 0E01 MOVLW 0x1
  6313. 4258 6FEB MOVWF lock, BANKED
  6314. 352: *InPtr = c;
  6315. 425A 0EFE MOVLW 0xFE
  6316. 425C 50DB MOVF PLUSW2, W, ACCESS
  6317. 425E C0CF MOVFF InPtr, FSR0L
  6318. 4260 FFE9 NOP
  6319. 4262 C0D0 MOVFF 0xD0, FSR0H
  6320. 4264 FFEA NOP
  6321. 4266 6EEF MOVWF INDF0, ACCESS
  6322. 353: InPtr++;
  6323. 4268 0100 MOVLB 0x0
  6324. 426A 2BCF INCF InPtr, F, BANKED
  6325. 426C 0E00 MOVLW 0x0
  6326. 426E 23D0 ADDWFC 0xD0, F, BANKED
  6327. 354: cdc_In_len++;
  6328. 4270 0100 MOVLB 0x0
  6329. 4272 2BCB INCF cdc_In_len, F, BANKED
  6330. 355: ZLPpending = 0;
  6331. 4274 0100 MOVLB 0x0
  6332. 4276 6BEA CLRF ZLPpending, BANKED
  6333. 356: if (cdc_In_len == CDC_BUFFER_SIZE) {
  6334. 4278 0E40 MOVLW 0x40
  6335. 427A 0100 MOVLB 0x0
  6336. 427C 5DCB SUBWF cdc_In_len, W, BANKED
  6337. 427E E109 BNZ 0x4292
  6338. 357: putda_cdc(cdc_In_len); // This will stall tranfers if both buffers are full then return when a buffer is available.
  6339. 4280 C0CB MOVFF cdc_In_len, POSTINC1
  6340. 4282 FFE6 NOP
  6341. 4284 DF42 RCALL putda_cdc
  6342. 4286 52E5 MOVF POSTDEC1, F, ACCESS
  6343. 358: cdc_In_len = 0;
  6344. 4288 0100 MOVLB 0x0
  6345. 428A 6BCB CLRF cdc_In_len, BANKED
  6346. 359: ZLPpending = 1; // timeout handled in the SOF handler below.
  6347. 428C 0100 MOVLB 0x0
  6348. 428E 0E01 MOVLW 0x1
  6349. 4290 6FEA MOVWF ZLPpending, BANKED
  6350. 360: }
  6351. 361: lock = 0;
  6352. 4292 0100 MOVLB 0x0
  6353. 4294 6BEB CLRF lock, BANKED
  6354. 362: cdc_timeout_count = 0; //setup timer to throw data if the buffer doesn't fill
  6355. 4296 0100 MOVLB 0x0
  6356. 4298 6BE9 CLRF cdc_timeout_count, BANKED
  6357. 363: }
  6358. 429A 52E5 MOVF POSTDEC1, F, ACCESS
  6359. 429C CFE7 MOVFF INDF1, FSR2L
  6360. 429E FFD9 NOP
  6361. 42A0 0012 RETURN 0
  6362. 364:
  6363. 365: /******************************************************************************/
  6364. 366: // Waits for a byte to be available and returns that byte as a
  6365. 367: // function return value. The byte is removed from the CDC OUT queue.
  6366. 368: // No return count is required as this function always returns one byte.
  6367. 369:
  6368. 370: BYTE getc_cdc(void) { // Must be used only in double buffer mode.
  6369. 42A2 CFD9 MOVFF FSR2L, POSTINC1
  6370. 42A4 FFE6 NOP
  6371. 42A6 CFE1 MOVFF FSR1L, FSR2L
  6372. 42A8 FFD9 NOP
  6373. 42AA 52E6 MOVF POSTINC1, F, ACCESS
  6374. 371: BYTE c = 0;
  6375. 42AC 6ADF CLRF INDF2, ACCESS
  6376. 372:
  6377. 373: if (cdc_Out_len == 0) {
  6378. 42AE 0100 MOVLB 0x0
  6379. 42B0 51CC MOVF cdc_Out_len, W, BANKED
  6380. 42B2 E106 BNZ 0x42C0
  6381. 374: do {
  6382. 375: cdc_Out_len = getda_cdc();
  6383. 42B4 DEDC RCALL getda_cdc
  6384. 42B6 0100 MOVLB 0x0
  6385. 42B8 6FCC MOVWF cdc_Out_len, BANKED
  6386. 376: } while (cdc_Out_len == 0); // Skip any ZLP
  6387. 42BA 0100 MOVLB 0x0
  6388. 42BC 51CC MOVF cdc_Out_len, W, BANKED
  6389. 42BE E0FA BZ 0x42B4
  6390. 377: }
  6391. 378: c = *OutPtr;
  6392. 42C0 C0D1 MOVFF OutPtr, FSR0L
  6393. 42C2 FFE9 NOP
  6394. 42C4 C0D2 MOVFF 0xD2, FSR0H
  6395. 42C6 FFEA NOP
  6396. 42C8 CFEF MOVFF INDF0, INDF2
  6397. 42CA FFDF NOP
  6398. 379: OutPtr++;
  6399. 42CC 0100 MOVLB 0x0
  6400. 42CE 2BD1 INCF OutPtr, F, BANKED
  6401. 42D0 0E00 MOVLW 0x0
  6402. 42D2 23D2 ADDWFC 0xD2, F, BANKED
  6403. 380: cdc_Out_len--;
  6404. 42D4 0100 MOVLB 0x0
  6405. 42D6 07CC DECF cdc_Out_len, F, BANKED
  6406. 381: return c;
  6407. 42D8 50DF MOVF INDF2, W, ACCESS
  6408. 42DA D000 BRA 0x42DC
  6409. 382: }
  6410. 42DC 52E5 MOVF POSTDEC1, F, ACCESS
  6411. 42DE 52E5 MOVF POSTDEC1, F, ACCESS
  6412. 42E0 CFE7 MOVFF INDF1, FSR2L
  6413. 42E2 FFD9 NOP
  6414. 42E4 0012 RETURN 0
  6415. 383:
  6416. 384: /******************************************************************************/
  6417. 385: // Checks to see if there is a byte available in the CDC buffer.
  6418. 386: // If so, it returns that byte at the dereferenced pointer *C
  6419. 387: // and the function returns a count of 1. The byte is effectively
  6420. 388: // removed from the queue.
  6421. 389: // IF no byte is available function returns immediately with a count of zero.
  6422. 390:
  6423. 391: BYTE poll_getc_cdc(BYTE * c) { // Must be used only in double buffer mode.
  6424. 42E6 CFD9 MOVFF FSR2L, POSTINC1
  6425. 42E8 FFE6 NOP
  6426. 42EA CFE1 MOVFF FSR1L, FSR2L
  6427. 42EC FFD9 NOP
  6428. 392:
  6429. 393: if (cdc_Out_len) { // Do we have a byte waiting?
  6430. 42EE 0100 MOVLB 0x0
  6431. 42F0 51CC MOVF cdc_Out_len, W, BANKED
  6432. 42F2 E017 BZ 0x4322
  6433. 394: *c = *OutPtr; // pass it on and adjust OutPtr and count
  6434. 42F4 C0D1 MOVFF OutPtr, FSR0L
  6435. 42F6 FFE9 NOP
  6436. 42F8 C0D2 MOVFF 0xD2, FSR0H
  6437. 42FA FFEA NOP
  6438. 42FC 50EF MOVF INDF0, W, ACCESS
  6439. 42FE 6EE6 MOVWF POSTINC1, ACCESS
  6440. 4300 0EFD MOVLW 0xFD
  6441. 4302 CFDB MOVFF PLUSW2, FSR0L
  6442. 4304 FFE9 NOP
  6443. 4306 0EFE MOVLW 0xFE
  6444. 4308 CFDB MOVFF PLUSW2, FSR0H
  6445. 430A FFEA NOP
  6446. 430C 52E5 MOVF POSTDEC1, F, ACCESS
  6447. 430E 50E7 MOVF INDF1, W, ACCESS
  6448. 4310 6EEF MOVWF INDF0, ACCESS
  6449. 395: OutPtr++;
  6450. 4312 0100 MOVLB 0x0
  6451. 4314 2BD1 INCF OutPtr, F, BANKED
  6452. 4316 0E00 MOVLW 0x0
  6453. 4318 23D2 ADDWFC 0xD2, F, BANKED
  6454. 396: cdc_Out_len--;
  6455. 431A 0100 MOVLB 0x0
  6456. 431C 07CC DECF cdc_Out_len, F, BANKED
  6457. 397: return 1; // Return byte count, always one.
  6458. 431E 0E01 MOVLW 0x1
  6459. 4320 D022 BRA 0x4366
  6460. 398: }
  6461. 399: if (getOutReady()) { // No byte in queue check for new arrivals.
  6462. 4322 DE8D RCALL getOutReady
  6463. 4324 0900 IORLW 0x0
  6464. 4326 E01D BZ 0x4362
  6465. 400: cdc_Out_len = getda_cdc();
  6466. 4328 DEA2 RCALL getda_cdc
  6467. 432A 0100 MOVLB 0x0
  6468. 432C 6FCC MOVWF cdc_Out_len, BANKED
  6469. 401: if (cdc_Out_len) {
  6470. 432E 0100 MOVLB 0x0
  6471. 4330 51CC MOVF cdc_Out_len, W, BANKED
  6472. 4332 E017 BZ 0x4362
  6473. 402: *c = *OutPtr;
  6474. 4334 C0D1 MOVFF OutPtr, FSR0L
  6475. 4336 FFE9 NOP
  6476. 4338 C0D2 MOVFF 0xD2, FSR0H
  6477. 433A FFEA NOP
  6478. 433C 50EF MOVF INDF0, W, ACCESS
  6479. 433E 6EE6 MOVWF POSTINC1, ACCESS
  6480. 4340 0EFD MOVLW 0xFD
  6481. 4342 CFDB MOVFF PLUSW2, FSR0L
  6482. 4344 FFE9 NOP
  6483. 4346 0EFE MOVLW 0xFE
  6484. 4348 CFDB MOVFF PLUSW2, FSR0H
  6485. 434A FFEA NOP
  6486. 434C 52E5 MOVF POSTDEC1, F, ACCESS
  6487. 434E 50E7 MOVF INDF1, W, ACCESS
  6488. 4350 6EEF MOVWF INDF0, ACCESS
  6489. 403: OutPtr++;
  6490. 4352 0100 MOVLB 0x0
  6491. 4354 2BD1 INCF OutPtr, F, BANKED
  6492. 4356 0E00 MOVLW 0x0
  6493. 4358 23D2 ADDWFC 0xD2, F, BANKED
  6494. 404: cdc_Out_len--;
  6495. 435A 0100 MOVLB 0x0
  6496. 435C 07CC DECF cdc_Out_len, F, BANKED
  6497. 405: return 1;
  6498. 435E 0E01 MOVLW 0x1
  6499. 4360 D002 BRA 0x4366
  6500. 406: }
  6501. 407: }
  6502. 408: return 0;
  6503. 4362 0E00 MOVLW 0x0
  6504. 4364 D000 BRA 0x4366
  6505. 409: }
  6506. 4366 52E5 MOVF POSTDEC1, F, ACCESS
  6507. 4368 CFE7 MOVFF INDF1, FSR2L
  6508. 436A FFD9 NOP
  6509. 436C 0012 RETURN 0
  6510. 410:
  6511. 411: /******************************************************************************/
  6512. 412: // Checks (PEEKS) to see if there is a byte available in the CDC buffer.
  6513. 413: // If so, it returns that byte at the dereferenced pointer *C
  6514. 414: // and the function returns a count of 1. The byte however is NOT
  6515. 415: // removed from the queue and can still be read with the poll_getc_cdc()
  6516. 416: // and getc_cdc() functions that will remove it from the queue.
  6517. 417: // IF no byte is available function returns immediately with a count of zero.
  6518. 418:
  6519. 419: BYTE peek_getc_cdc(BYTE * c) { // Must be used only in double buffer mode.
  6520. 436E CFD9 MOVFF FSR2L, POSTINC1
  6521. 4370 FFE6 NOP
  6522. 4372 CFE1 MOVFF FSR1L, FSR2L
  6523. 4374 FFD9 NOP
  6524. 420:
  6525. 421: if (cdc_Out_len) {
  6526. 4376 0100 MOVLB 0x0
  6527. 4378 51CC MOVF cdc_Out_len, W, BANKED
  6528. 437A E011 BZ 0x439E
  6529. 422: *c = *OutPtr;
  6530. 437C C0D1 MOVFF OutPtr, FSR0L
  6531. 437E FFE9 NOP
  6532. 4380 C0D2 MOVFF 0xD2, FSR0H
  6533. 4382 FFEA NOP
  6534. 4384 50EF MOVF INDF0, W, ACCESS
  6535. 4386 6EE6 MOVWF POSTINC1, ACCESS
  6536. 4388 0EFD MOVLW 0xFD
  6537. 438A CFDB MOVFF PLUSW2, FSR0L
  6538. 438C FFE9 NOP
  6539. 438E 0EFE MOVLW 0xFE
  6540. 4390 CFDB MOVFF PLUSW2, FSR0H
  6541. 4392 FFEA NOP
  6542. 4394 52E5 MOVF POSTDEC1, F, ACCESS
  6543. 4396 50E7 MOVF INDF1, W, ACCESS
  6544. 4398 6EEF MOVWF INDF0, ACCESS
  6545. 423: return 1;
  6546. 439A 0E01 MOVLW 0x1
  6547. 439C D01C BRA 0x43D6
  6548. 424: }
  6549. 425: if (getOutReady()) {
  6550. 439E DE4F RCALL getOutReady
  6551. 43A0 0900 IORLW 0x0
  6552. 43A2 E017 BZ 0x43D2
  6553. 426: cdc_Out_len = getda_cdc();
  6554. 43A4 DE64 RCALL getda_cdc
  6555. 43A6 0100 MOVLB 0x0
  6556. 43A8 6FCC MOVWF cdc_Out_len, BANKED
  6557. 427: if (cdc_Out_len) {
  6558. 43AA 0100 MOVLB 0x0
  6559. 43AC 51CC MOVF cdc_Out_len, W, BANKED
  6560. 43AE E011 BZ 0x43D2
  6561. 428: *c = *OutPtr;
  6562. 43B0 C0D1 MOVFF OutPtr, FSR0L
  6563. 43B2 FFE9 NOP
  6564. 43B4 C0D2 MOVFF 0xD2, FSR0H
  6565. 43B6 FFEA NOP
  6566. 43B8 50EF MOVF INDF0, W, ACCESS
  6567. 43BA 6EE6 MOVWF POSTINC1, ACCESS
  6568. 43BC 0EFD MOVLW 0xFD
  6569. 43BE CFDB MOVFF PLUSW2, FSR0L
  6570. 43C0 FFE9 NOP
  6571. 43C2 0EFE MOVLW 0xFE
  6572. 43C4 CFDB MOVFF PLUSW2, FSR0H
  6573. 43C6 FFEA NOP
  6574. 43C8 52E5 MOVF POSTDEC1, F, ACCESS
  6575. 43CA 50E7 MOVF INDF1, W, ACCESS
  6576. 43CC 6EEF MOVWF INDF0, ACCESS
  6577. 429: return 1;
  6578. 43CE 0E01 MOVLW 0x1
  6579. 43D0 D002 BRA 0x43D6
  6580. 430: }
  6581. 431: }
  6582. 432: return 0;
  6583. 43D2 0E00 MOVLW 0x0
  6584. 43D4 D000 BRA 0x43D6
  6585. 433: }
  6586. 43D6 52E5 MOVF POSTDEC1, F, ACCESS
  6587. 43D8 CFE7 MOVFF INDF1, FSR2L
  6588. 43DA FFD9 NOP
  6589. 43DC 0012 RETURN 0
  6590. 434:
  6591. --- /home/antoine/Documents/Pic/DP_USB/USB_stack/FraiseMaster1.2.2/main.c -----------------------------
  6592. 1: // Open source PIC USB stack echo demo
  6593. 2: // USB stack by JTR and Honken
  6594. 3: // CC-BY
  6595. 4: //
  6596. 5: // USB driver files should be in '..\dp_usb\'
  6597. 6: // Enter a USB VID and PID in prj_usb_config.h
  6598. 7:
  6599. 8: //USB stack
  6600. 9: #include "../dp_usb/usb_stack_globals.h" // USB stack only defines Not function related.
  6601. 10: #include "descriptors.h" // JTR Only included in main.c
  6602. 11: //#include "configwords.h" // JTR only included in main.c
  6603. 12: #include "fraisemaster.h"
  6604. 13: #include "stdio.h"
  6605. 14:
  6606. 15: // PIC18F Move reset vectors for bootloader compatibility
  6607. 16: #ifdef __18CXX
  6608. 17: #define REMAPPED_RESET_VECTOR_ADDRESS 0x800
  6609. 18: #define REMAPPED_HIGH_INTERRUPT_VECTOR_ADDRESS 0x808
  6610. 19: #define REMAPPED_LOW_INTERRUPT_VECTOR_ADDRESS 0x818
  6611. 20: #endif
  6612. 21:
  6613. 22: void SetupBoard(void);
  6614. 23: void InterruptHandlerHigh();
  6615. 24: void InterruptHandlerLow();
  6616. 25: void USBSuspend(void);
  6617. 26:
  6618. 27: int _user_putc(char c)
  6619. 43DE CFD9 MOVFF FSR2L, POSTINC1
  6620. 43E0 FFE6 NOP
  6621. 43E2 CFE1 MOVFF FSR1L, FSR2L
  6622. 43E4 FFD9 NOP
  6623. 28: {
  6624. 29: putc_cdc(c);
  6625. 43E6 0EFE MOVLW 0xFE
  6626. 43E8 CFDB MOVFF PLUSW2, POSTINC1
  6627. 43EA FFE6 NOP
  6628. 43EC EC26 CALL 0x424C, 0
  6629. 43EE F021 NOP
  6630. 43F0 52E5 MOVF POSTDEC1, F, ACCESS
  6631. 30: }
  6632. 43F2 52E5 MOVF POSTDEC1, F, ACCESS
  6633. 43F4 CFE7 MOVFF INDF1, FSR2L
  6634. 43F6 FFD9 NOP
  6635. 43F8 0012 RETURN 0
  6636. 31:
  6637. 32: #pragma udata
  6638. 33: extern BYTE usb_device_state;
  6639. 34:
  6640. 35: //BYTE LineFromUsb[96];
  6641. 36: //BYTE LineFromUsbLen=0;
  6642. 37: //#pragma udata accessram
  6643. 38: volatile BYTE SofFlag;
  6644. 39:
  6645. 40: #pragma code
  6646. 41:
  6647. 42: void SOFHandler(void)
  6648. 43: {
  6649. 44: //static BYTE il;
  6650. 45:
  6651. 46: //if(il++==200) { il=0; mLED_2_Toggle(); }
  6652. 47: SofFlag=1;
  6653. 43FA 0101 MOVLB 0x1
  6654. 43FC 0E01 MOVLW 0x1
  6655. 43FE 6FFE MOVWF 0xFE, BANKED
  6656. 48: CDCFlushOnTimeout();
  6657. 4400 ECF7 CALL 0x41EE, 0
  6658. 4402 F020 NOP
  6659. 49: }
  6660. 4404 0012 RETURN 0
  6661. 50:
  6662. 51:
  6663. 52: #ifdef PIC_18F
  6664. 53: void main(void)
  6665. 4406 CFD9 MOVFF FSR2L, POSTINC1
  6666. 4408 FFE6 NOP
  6667. 440A CFE1 MOVFF FSR1L, FSR2L
  6668. 440C FFD9 NOP
  6669. 440E 0E05 MOVLW 0x5
  6670. 4410 26E1 ADDWF FSR1L, F, ACCESS
  6671. 54: #else
  6672. 55: int main(void)
  6673. 56: #endif
  6674. 57: {
  6675. 58: BYTE RecvdByte;
  6676. 59: long int jj;
  6677. 60:
  6678. 61: stdout = _H_USER; // Use our own special output function for STDOUT
  6679. 4412 0101 MOVLB 0x1
  6680. 4414 69FB SETF 0xFB, BANKED
  6681. 4416 69FC SETF 0xFC, BANKED
  6682. 62:
  6683. 63: initCDC(); // setup the CDC state machine
  6684. 4418 EC9F CALL 0x3B3E, 0
  6685. 441A F01D NOP
  6686. 64: SetupBoard(); //setup the hardware, customize for your hardware
  6687. 441C D8B9 RCALL SetupBoard
  6688. 65: usb_init(cdc_device_descriptor, cdc_config_descriptor, cdc_str_descs, USB_NUM_STRINGS); // initialize USB. TODO: Remove magic with macro
  6689. 441E 0E04 MOVLW 0x4
  6690. 4420 6EE6 MOVWF POSTINC1, ACCESS
  6691. 4422 6AE6 CLRF POSTINC1, ACCESS
  6692. 4424 0ED5 MOVLW 0xD5
  6693. 4426 6EE6 MOVWF POSTINC1, ACCESS
  6694. 4428 0E47 MOVLW 0x47
  6695. 442A 6EE6 MOVWF POSTINC1, ACCESS
  6696. 442C 0E00 MOVLW 0x0
  6697. 442E 6EE6 MOVWF POSTINC1, ACCESS
  6698. 4430 0E92 MOVLW 0x92
  6699. 4432 6EE6 MOVWF POSTINC1, ACCESS
  6700. 4434 0E47 MOVLW 0x47
  6701. 4436 6EE6 MOVWF POSTINC1, ACCESS
  6702. 4438 0E00 MOVLW 0x0
  6703. 443A 6EE6 MOVWF POSTINC1, ACCESS
  6704. 443C 0E80 MOVLW 0x80
  6705. 443E 6EE6 MOVWF POSTINC1, ACCESS
  6706. 4440 0E47 MOVLW 0x47
  6707. 4442 6EE6 MOVWF POSTINC1, ACCESS
  6708. 4444 0E00 MOVLW 0x0
  6709. 4446 6EE6 MOVWF POSTINC1, ACCESS
  6710. 4448 EC97 CALL 0x1D2E, 0
  6711. 444A F00E NOP
  6712. 444C 6E14 MOVWF __tmp_0, ACCESS
  6713. 444E 0E0B MOVLW 0xB
  6714. 4450 5EE1 SUBWF FSR1L, F, ACCESS
  6715. 4452 5014 MOVF __tmp_0, W, ACCESS
  6716. 66: usb_start(); //start the USB peripheral
  6717. 4454 ECE5 CALL 0x1DCA, 0
  6718. 4456 F00E NOP
  6719. 67:
  6720. 68:
  6721. 69:
  6722. 70: // PIC18 INTERRUPTS
  6723. 71: // It is the users resposibility to set up high, low or legacy mode
  6724. 72: // interrupt operation. The following macros for high and low interrupt
  6725. 73: // setup have been removed:
  6726. 74:
  6727. 75: #define EnableUsbHighPriInterrupt() do { RCONbits.IPEN = 1; IPR2bits.USBIP = 1; INTCONbits.GIEH = 1;} while(0) // JTR new
  6728. 76: #define EnableUsbLowPriInterrupt() do { RCONbits.IPEN = 1; IPR2bits.USBIP = 0; INTCONbits.GIEL = 1;} while(0) // JTR new
  6729. 77:
  6730. 78: // By default, the interrupt mode will be LEGACY (ISR Vector 0x08)
  6731. 79: // (Same as high priority vector wise but the operation (latency) is
  6732. 80: // not the same. Consult the data sheet for details.)
  6733. 81:
  6734. 82: // If a priority mode is enabled then this affects ALL other interrupt
  6735. 83: // sources therefore it does not belong to the usb stack to be
  6736. 84: // doing this. It is a global, user application choice.
  6737. 85:
  6738. 86: #if defined USB_INTERRUPTS // See the prj_usb_config.h file.
  6739. 87: EnableUsbPerifInterrupts(USB_TRN + USB_SOF + USB_UERR + USB_URST);
  6740. 4458 0E4B MOVLW 0x4B
  6741. 445A 1269 IORWF UIE, F, ACCESS
  6742. 88: #if defined __18CXX //turn on interrupts for PIC18
  6743. 89: //EnableUsbHighPriInterrupt();
  6744. 90: EnableUsbLowPriInterrupt();
  6745. 445C 8ED0 BSF RCON, 7, ACCESS
  6746. 445E 9AA2 BCF IPR2, 5, ACCESS
  6747. 4460 8CF2 BSF INTCON, 6, ACCESS
  6748. 91: INTCONbits.PEIE = 1;
  6749. 4462 8CF2 BSF INTCON, 6, ACCESS
  6750. 92: INTCONbits.GIE = 1;
  6751. 4464 8EF2 BSF INTCON, 7, ACCESS
  6752. 93: #endif
  6753. 94: EnableUsbGlobalInterrupt(); // Only enables global USB interrupt. Chip interrupts must be enabled by the user (PIC18)
  6754. 4466 8AA0 BSF PIE2, 5, ACCESS
  6755. 95: #endif
  6756. 96:
  6757. 97:
  6758. 98: // Wait for USB to connect
  6759. 99: do {
  6760. 100: #ifndef USB_INTERRUPTS
  6761. 101: usb_handler();
  6762. 102: #endif
  6763. 103: } while (usb_device_state < CONFIGURED_STATE);
  6764. 4468 0E20 MOVLW 0x20
  6765. 446A 0100 MOVLB 0x0
  6766. 446C 5DB5 SUBWF usb_device_state, W, BANKED
  6767. 446E E3FC BNC 0x4468
  6768. 104:
  6769. 105: usb_register_sof_handler(SOFHandler); // Register our CDC timeout handler after device configured
  6770. 4470 0EFA MOVLW 0xFA
  6771. 4472 6EE6 MOVWF POSTINC1, ACCESS
  6772. 4474 0E43 MOVLW 0x43
  6773. 4476 6EE6 MOVWF POSTINC1, ACCESS
  6774. 4478 EC2E CALL 0x2C5C, 0
  6775. 447A F016 NOP
  6776. 447C 52E5 MOVF POSTDEC1, F, ACCESS
  6777. 447E 52E5 MOVF POSTDEC1, F, ACCESS
  6778. 106: //usb_register_sof_handler(CDCFlushOnTimeout); // Register our CDC timeout handler after device configured
  6779. 107:
  6780. 108: FraiseInit();
  6781. 4480 EC34 CALL 0x868, 0
  6782. 4482 F004 NOP
  6783. 109:
  6784. 110: // Main echo loop
  6785. 111: do {
  6786. 112:
  6787. 113: // If USB_INTERRUPT is not defined each loop should have at least one additional call to the usb handler to allow for control transfers.
  6788. 114: #ifndef USB_INTERRUPTS
  6789. 115: usb_handler();
  6790. 116: #endif
  6791. 117:
  6792. 118: // Receive and send method 1
  6793. 119: // The CDC module will call usb_handler each time a BULK CDC packet is sent or received.
  6794. 120: // If there is a byte ready will return with the number of bytes available and received byte in RecvdByte
  6795. 121: /*if (poll_getc_cdc(&RecvdByte))
  6796. 122: putc_cdc(RecvdByte); */
  6797. 123:
  6798. 124: if(!FrGotLineFromUsb) {
  6799. 4484 0101 MOVLB 0x1
  6800. 4486 5141 MOVF 0x41, W, BANKED
  6801. 4488 E126 BNZ 0x44D6
  6802. 125: while(poll_getc_cdc(&RecvdByte)) {
  6803. 448A CFD9 MOVFF FSR2L, POSTINC1
  6804. 448C FFE6 NOP
  6805. 448E CFDA MOVFF FSR2H, POSTINC1
  6806. 4490 FFE6 NOP
  6807. 4492 EC73 CALL 0x42E6, 0
  6808. 4494 F021 NOP
  6809. 4496 52E5 MOVF POSTDEC1, F, ACCESS
  6810. 4498 52E5 MOVF POSTDEC1, F, ACCESS
  6811. 449A 0900 IORLW 0x0
  6812. 449C E01C BZ 0x44D6
  6813. 44D4 D7DA BRA 0x448A
  6814. 126: if(RecvdByte=='\n') {
  6815. 449E 0E0A MOVLW 0xA
  6816. 44A0 5CDF SUBWF INDF2, W, ACCESS
  6817. 44A2 E105 BNZ 0x44AE
  6818. 127: FrGotLineFromUsb=1;
  6819. 44A4 0101 MOVLB 0x1
  6820. 44A6 0E01 MOVLW 0x1
  6821. 44A8 6F41 MOVWF 0x41, BANKED
  6822. 128: //printf((const far rom char*)"rcvd line !\n");
  6823. 129: break;
  6824. 44AA D015 BRA 0x44D6
  6825. 130: }
  6826. 131: else if(LineFromUsbLen<(sizeof(LineFromUsb)-1))
  6827. 44AC D013 BRA 0x44D4
  6828. 44AE 0101 MOVLB 0x1
  6829. 44B0 5140 MOVF 0x40, W, BANKED
  6830. 44B2 6E14 MOVWF __tmp_0, ACCESS
  6831. 44B4 6A15 CLRF digit_cnt, ACCESS
  6832. 44B6 0E3F MOVLW 0x3F
  6833. 44B8 5C14 SUBWF __tmp_0, W, ACCESS
  6834. 44BA 0E00 MOVLW 0x0
  6835. 44BC 5815 SUBWFB digit_cnt, W, ACCESS
  6836. 44BE E20A BC 0x44D4
  6837. 132: LineFromUsb[LineFromUsbLen++]=RecvdByte;
  6838. 44C0 0101 MOVLB 0x1
  6839. 44C2 5140 MOVF 0x40, W, BANKED
  6840. 44C4 2B40 INCF 0x40, F, BANKED
  6841. 44C6 6AEA CLRF FSR0H, ACCESS
  6842. 44C8 0F00 ADDLW 0x0
  6843. 44CA 6EE9 MOVWF FSR0L, ACCESS
  6844. 44CC 0E01 MOVLW 0x1
  6845. 44CE 22EA ADDWFC FSR0H, F, ACCESS
  6846. 44D0 CFDF MOVFF INDF2, INDF0
  6847. 44D2 FFEF NOP
  6848. 133: }
  6849. 134: }
  6850. 135:
  6851. 136: if(SofFlag==1) { FraiseSOF(); SofFlag=0; }
  6852. 44D6 0101 MOVLB 0x1
  6853. 44D8 05FE DECF 0xFE, W, BANKED
  6854. 44DA E104 BNZ 0x44E4
  6855. 44DC EC84 CALL 0x1D08, 0
  6856. 44DE F00E NOP
  6857. 44E0 0101 MOVLB 0x1
  6858. 44E2 6BFE CLRF 0xFE, BANKED
  6859. 137:
  6860. 138: FraiseService();
  6861. 44E4 ECBC CALL 0x1B78, 0
  6862. 44E6 F00D NOP
  6863. 139:
  6864. 140:
  6865. 141: if(!UserSW) { //goto booloader... doesn't work well... bouhou !
  6866. 44E8 B482 BTFSC PORTC, 2, ACCESS
  6867. 44EA D047 BRA 0x457A
  6868. 142: INTCONbits.GIEH=0;
  6869. 44EC 9EF2 BCF INTCON, 7, ACCESS
  6870. 143: INTCONbits.GIEL=0;
  6871. 44EE 9CF2 BCF INTCON, 6, ACCESS
  6872. 144: //SuspendUsb();
  6873. 145: //UCONbits.USBEN = 0;
  6874. 146: UCFGbits.UPUEN=0;
  6875. 44F0 986F BCF UCFG, 4, ACCESS
  6876. 147: UCFGbits.UTRDIS=1;
  6877. 44F2 866F BSF UCFG, 3, ACCESS
  6878. 148: mLED_2_On();
  6879. 44F4 828B BSF LATC, 1, ACCESS
  6880. 149: while(jj++<600000) ;
  6881. 44F6 50D9 MOVF FSR2L, W, ACCESS
  6882. 44F8 0F01 ADDLW 0x1
  6883. 44FA 6EE9 MOVWF FSR0L, ACCESS
  6884. 44FC CFDA MOVFF FSR2H, FSR0H
  6885. 44FE FFEA NOP
  6886. 4500 CFEF MOVFF INDF0, __tmp_0
  6887. 4502 F014 NOP
  6888. 4504 2AEE INCF POSTINC0, F, ACCESS
  6889. 4506 0E00 MOVLW 0x0
  6890. 4508 CFEF MOVFF INDF0, digit_cnt
  6891. 450A F015 NOP
  6892. 450C 22EE ADDWFC POSTINC0, F, ACCESS
  6893. 450E CFEF MOVFF INDF0, prefix_cnt
  6894. 4510 F016 NOP
  6895. 4512 22EE ADDWFC POSTINC0, F, ACCESS
  6896. 4514 CFEF MOVFF INDF0, sign_char
  6897. 4516 F017 NOP
  6898. 4518 22EF ADDWFC INDF0, F, ACCESS
  6899. 451A 90D8 BCF STATUS, 0, ACCESS
  6900. 451C 5017 MOVF sign_char, W, ACCESS
  6901. 451E 0A00 XORLW 0x0
  6902. 4520 E608 BN 0x4532
  6903. 4522 0EC0 MOVLW 0xC0
  6904. 4524 5C14 SUBWF __tmp_0, W, ACCESS
  6905. 4526 0E27 MOVLW 0x27
  6906. 4528 5815 SUBWFB digit_cnt, W, ACCESS
  6907. 452A 0E09 MOVLW 0x9
  6908. 452C 5816 SUBWFB prefix_cnt, W, ACCESS
  6909. 452E 0E00 MOVLW 0x0
  6910. 4530 5817 SUBWFB sign_char, W, ACCESS
  6911. 4532 E201 BC 0x4536
  6912. 4534 D7E0 BRA 0x44F6
  6913. 150: mLED_2_Off();
  6914. 4536 928B BCF LATC, 1, ACCESS
  6915. 151: while(jj++<600000) ;
  6916. 4538 50D9 MOVF FSR2L, W, ACCESS
  6917. 453A 0F01 ADDLW 0x1
  6918. 453C 6EE9 MOVWF FSR0L, ACCESS
  6919. 453E CFDA MOVFF FSR2H, FSR0H
  6920. 4540 FFEA NOP
  6921. 4542 CFEF MOVFF INDF0, __tmp_0
  6922. 4544 F014 NOP
  6923. 4546 2AEE INCF POSTINC0, F, ACCESS
  6924. 4548 0E00 MOVLW 0x0
  6925. 454A CFEF MOVFF INDF0, digit_cnt
  6926. 454C F015 NOP
  6927. 454E 22EE ADDWFC POSTINC0, F, ACCESS
  6928. 4550 CFEF MOVFF INDF0, prefix_cnt
  6929. 4552 F016 NOP
  6930. 4554 22EE ADDWFC POSTINC0, F, ACCESS
  6931. 4556 CFEF MOVFF INDF0, sign_char
  6932. 4558 F017 NOP
  6933. 455A 22EF ADDWFC INDF0, F, ACCESS
  6934. 455C 90D8 BCF STATUS, 0, ACCESS
  6935. 455E 5017 MOVF sign_char, W, ACCESS
  6936. 4560 0A00 XORLW 0x0
  6937. 4562 E608 BN 0x4574
  6938. 4564 0EC0 MOVLW 0xC0
  6939. 4566 5C14 SUBWF __tmp_0, W, ACCESS
  6940. 4568 0E27 MOVLW 0x27
  6941. 456A 5815 SUBWFB digit_cnt, W, ACCESS
  6942. 456C 0E09 MOVLW 0x9
  6943. 456E 5816 SUBWFB prefix_cnt, W, ACCESS
  6944. 4570 0E00 MOVLW 0x0
  6945. 4572 5817 SUBWFB sign_char, W, ACCESS
  6946. 4574 E201 BC 0x4578
  6947. 4576 D7E0 BRA 0x4538
  6948. 152: Reset();
  6949. 4578 00FF RESET
  6950. 153: }
  6951. 154: // Receive and send method 2
  6952. 155: // Same as poll_getc_cdc except that byte is NOT removed from queue.
  6953. 156: // This function will wait for a byte and return and remove it from the queue when it arrives.
  6954. 157: /*if (peek_getc_cdc(&RecvdByte)) {
  6955. 158: RecvdByte = getc_cdc();
  6956. 159: putc_cdc(RecvdByte+1);
  6957. 160: }*/
  6958. 161:
  6959. 162: // Receive and send method 3
  6960. 163: // If there is a byte ready will return with the number of bytes available and received byte in RecvdByte
  6961. 164: // use CDC_Flush_In_Now(); when it has to be sent immediately and not wait for a timeout condition.
  6962. 165: /* if (poll_getc_cdc(&RecvdByte)) {
  6963. 166: putc_cdc(RecvdByte+1); //
  6964. 167: CDC_Flush_In_Now();
  6965. 168: }*/
  6966. 169: } while (1);
  6967. 457A D784 BRA 0x4484
  6968. 170:
  6969. 171: } //end main
  6970. 457C 0E05 MOVLW 0x5
  6971. 457E 5CE1 SUBWF FSR1L, W, ACCESS
  6972. 4580 E202 BC 0x4586
  6973. 4582 6AE1 CLRF FSR1L, ACCESS
  6974. 4584 52E5 MOVF POSTDEC1, F, ACCESS
  6975. 4586 6EE1 MOVWF FSR1L, ACCESS
  6976. 4588 52E5 MOVF POSTDEC1, F, ACCESS
  6977. 458A CFE7 MOVFF INDF1, FSR2L
  6978. 458C FFD9 NOP
  6979. 458E 0012 RETURN 0
  6980. 172:
  6981. 173: //board hardware setup
  6982. 174: //add your hardware here
  6983. 175: void SetupBoard(void) {
  6984. 176:
  6985. 177: #if defined (PIEDUSB)
  6986. 178: //disable some defaults
  6987. 179: ADCON1 |= 0b1111; //all pins digital
  6988. 4590 0E0F MOVLW 0xF
  6989. 4592 12C1 IORWF ADCON1, F, ACCESS
  6990. 180: CVRCON = 0b00000000;
  6991. 4594 6AB5 CLRF CVRCON, ACCESS
  6992. 181: LATC = 0x00;
  6993. 4596 6A8B CLRF LATC, ACCESS
  6994. 182: TRISC = 0xFF;
  6995. 4598 6894 SETF TRISC, ACCESS
  6996. 183: #endif
  6997. 184:
  6998. 185: }
  6999. 459A 0012 RETURN 0
  7000. 186:
  7001. 187: // USB suspend not yet enabled
  7002. 188: void USBSuspend(void) {}
  7003. 459C 0012 RETURN 0
  7004. 189:
  7005. 190: //interrupt routines for PIC 18 and PIC24
  7006. 191: #if defined(USB_INTERRUPTS)
  7007. 192:
  7008. 193: //PIC 24F type USB interrupts
  7009. 194: #if defined(__PIC24FJ64GB106__) || defined(__PIC24FJ128GB106__) || defined(__PIC24FJ192GB106__) || defined(__PIC24FJ256GB106__) || defined(__PIC24FJ64GB108__) || defined(__PIC24FJ128GB108__) || defined(__PIC24FJ192GB108__) || defined(__PIC24FJ256GB108__) || defined(__PIC24FJ64GB110__) || defined(__PIC24FJ128GB110__) || defined(__PIC24FJ192GB110__) || defined(__PIC24FJ256GB110__)
  7010. 195: #pragma interrupt _USB1Interrupt
  7011. 196: void __attribute__((interrupt, auto_psv)) _USB1Interrupt() {
  7012. 197: //USB interrupt
  7013. 198: //IRQ enable IEC5bits.USB1IE
  7014. 199: //IRQ flag IFS5bits.USB1IF
  7015. 200: //IRQ priority IPC21<10:8>
  7016. 201: usb_handler();
  7017. 202: ClearGlobalUsbInterruptFlag();
  7018. 203: }
  7019. 204: #elif defined (__18CXX) //PIC18F style interrupts with remapping for bootloader
  7020. 205: // Interrupt remap chain
  7021. 206: //
  7022. 207: //This function directs the interrupt to
  7023. 208: // the proper function depending on the mode
  7024. 209: // set in the mode variable.
  7025. 210: //USB stack on low priority interrupts,
  7026. 211: #pragma interruptlow InterruptHandlerLow nosave= PROD, PCLATH, PCLATU, TBLPTR, TBLPTRU, TABLAT, section (".tmpdata"), section("MATH_DATA")
  7027. 212: void InterruptHandlerLow(void) {
  7028. 459E CFD8 MOVFF STATUS, PREINC1
  7029. 45A0 FFE4 NOP
  7030. 45A2 CFE0 MOVFF BSR, PREINC1
  7031. 45A4 FFE4 NOP
  7032. 45A6 6EE4 MOVWF PREINC1, ACCESS
  7033. 45A8 CFDA MOVFF FSR2H, PREINC1
  7034. 45AA FFE4 NOP
  7035. 45AC CFE2 MOVFF FSR1H, FSR2H
  7036. 45AE FFDA NOP
  7037. 45B0 CFE9 MOVFF FSR0L, PREINC1
  7038. 45B2 FFE4 NOP
  7039. 45B4 CFEA MOVFF FSR0H, PREINC1
  7040. 45B6 FFE4 NOP
  7041. 45B8 52E6 MOVF POSTINC1, F, ACCESS
  7042. 213: usb_handler();
  7043. 45BA EC9F CALL 0x1F3E, 0
  7044. 45BC F00F NOP
  7045. 214: ClearGlobalUsbInterruptFlag();
  7046. 45BE 9AA1 BCF PIR2, 5, ACCESS
  7047. 215: //FraiseISR();
  7048. 216: }
  7049. 45C0 52E5 MOVF POSTDEC1, F, ACCESS
  7050. 45C2 CFE5 MOVFF POSTDEC1, FSR0H
  7051. 45C4 FFEA NOP
  7052. 45C6 CFE5 MOVFF POSTDEC1, FSR0L
  7053. 45C8 FFE9 NOP
  7054. 45CA CFE5 MOVFF POSTDEC1, FSR2H
  7055. 45CC FFDA NOP
  7056. 45CE 50E5 MOVF POSTDEC1, W, ACCESS
  7057. 45D0 CFE5 MOVFF POSTDEC1, BSR
  7058. 45D2 FFE0 NOP
  7059. 45D4 CFE5 MOVFF POSTDEC1, STATUS
  7060. 45D6 FFD8 NOP
  7061. 45D8 0010 RETFIE 0
  7062. 217:
  7063. 218: #pragma interrupt InterruptHandlerHigh nosave= PROD, PCLATH, PCLATU, TBLPTR, TBLPTRU, TABLAT, section (".tmpdata"), section("MATH_DATA")
  7064. 219: void InterruptHandlerHigh(void) { //Also legacy mode interrupt.
  7065. 45DA CFDA MOVFF FSR2H, PREINC1
  7066. 45DC FFE4 NOP
  7067. 45DE CFE2 MOVFF FSR1H, FSR2H
  7068. 45E0 FFDA NOP
  7069. 45E2 CFE9 MOVFF FSR0L, PREINC1
  7070. 45E4 FFE4 NOP
  7071. 45E6 CFEA MOVFF FSR0H, PREINC1
  7072. 45E8 FFE4 NOP
  7073. 45EA 52E6 MOVF POSTINC1, F, ACCESS
  7074. 220: //usb_handler();
  7075. 221: //ClearGlobalUsbInterruptFlag();
  7076. 222: FraiseISR();
  7077. 45EC EC73 CALL 0x18E6, 0
  7078. 45EE F00C NOP
  7079. 223: }
  7080. 45F0 52E5 MOVF POSTDEC1, F, ACCESS
  7081. 45F2 CFE5 MOVFF POSTDEC1, FSR0H
  7082. 45F4 FFEA NOP
  7083. 45F6 CFE5 MOVFF POSTDEC1, FSR0L
  7084. 45F8 FFE9 NOP
  7085. 45FA CFE5 MOVFF POSTDEC1, FSR2H
  7086. 45FC FFDA NOP
  7087. 45FE 0011 RETFIE 1
  7088. 224:
  7089. 225: //these statements remap the vector to our function
  7090. 226: //When the interrupt fires the PIC checks here for directions
  7091. 227: #pragma code REMAPPED_HIGH_INTERRUPT_VECTOR = REMAPPED_HIGH_INTERRUPT_VECTOR_ADDRESS
  7092. 228:
  7093. 229: void Remapped_High_ISR(void) {
  7094. 230: _asm goto InterruptHandlerHigh _endasm
  7095. 0808 EFED GOTO 0x45DA
  7096. 080A F022 NOP
  7097. 231: }
  7098. 080C 0012 RETURN 0
  7099. 232:
  7100. 233: #pragma code REMAPPED_LOW_INTERRUPT_VECTOR = REMAPPED_LOW_INTERRUPT_VECTOR_ADDRESS
  7101. 234:
  7102. 235: void Remapped_Low_ISR(void) {
  7103. 236: _asm goto InterruptHandlerLow _endasm
  7104. 0818 EFCF GOTO 0x459E
  7105. 081A F022 NOP
  7106. 237: }
  7107. 081C 0012 RETURN 0
  7108. 238:
  7109. 239: //relocate the reset vector
  7110. 240: extern void _startup(void);
  7111. 241: #pragma code REMAPPED_RESET_VECTOR = REMAPPED_RESET_VECTOR_ADDRESS
  7112. 242:
  7113. 243: void _reset(void) {
  7114. 244: _asm goto _startup _endasm
  7115. 0800 EFE1 GOTO 0x4BC2
  7116. 0802 F025 NOP
  7117. 245: }
  7118. 0804 0012 RETURN 0
  7119. 246: //set the initial vectors so this works without the bootloader too.
  7120. 247: #if 0
  7121. 248: #pragma code HIGH_INTERRUPT_VECTOR = 0x08
  7122. 249:
  7123. 250: void High_ISR(void) {
  7124. 251: _asm goto REMAPPED_HIGH_INTERRUPT_VECTOR_ADDRESS _endasm
  7125. 252: }
  7126. 253: #pragma code LOW_INTERRUPT_VECTOR = 0x18
  7127. 254:
  7128. 255: void Low_ISR(void) {
  7129. 256: _asm goto REMAPPED_LOW_INTERRUPT_VECTOR_ADDRESS _endasm
  7130. 257: }
  7131. 258: #endif
  7132. 259:
  7133. 260: #endif //defined (__18CXX)
  7134. 261: #endif //defined(USB_INTERRUPTS)
  7135. 262:
  7136. 263: #pragma code
  7137. 264:
  7138. 265:
  7139. --- /home/antoine/Documents/Pic/DP_USB/USB_stack/FraiseMaster1.2.2/fraisemaster.c ---------------------
  7140. 1: /*********************************************************************
  7141. 2: *
  7142. 3: * Fraise master firmware v2.1
  7143. 4: *
  7144. 5: *********************************************************************
  7145. 6:
  7146. 7: This program is free software; you can redistribute it and/or modify
  7147. 8: it under the terms of the GNU General Public License as published by
  7148. 9: the Free Software Foundation; either version 2 of the License, or
  7149. 10: (at your option) any later version.
  7150. 11:
  7151. 12: This program is distributed in the hope that it will be useful,
  7152. 13: but WITHOUT ANY WARRANTY; without even the implied warranty of
  7153. 14: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  7154. 15: GNU General Public License for more details.
  7155. 16:
  7156. 17: You should have received a copy of the GNU General Public License
  7157. 18: along with this program; if not, write to the Free Software Foundation,
  7158. 19: Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
  7159. 20:
  7160. 21: *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  7161. 22: * Copyright (c) Antoine Rousseau 2009-2011
  7162. 23: ********************************************************************/
  7163. 24:
  7164. 25: #ifdef SDCC
  7165. 26: #include <pic18f2550.h>
  7166. 27: #else
  7167. 28: #include <p18cxxx.h>
  7168. 29: #endif
  7169. 30: #include <usart.h>
  7170. 31: #include <stdio.h>
  7171. 32: #include <ctype.h>
  7172. 33: #ifndef SDCC
  7173. 34: #include <delays.h>
  7174. 35: #endif
  7175. 36: //#include "system/typedefs.h"
  7176. 37: //#include "system/usb/usb.h"
  7177. 38: //#include "io_cfg.h" // I/O pin mapping
  7178. 39: #include "prj_usb_config.h"
  7179. 40: #include "fraisemaster.h"
  7180. 41:
  7181. 42: //#pragma udata
  7182. 43:
  7183. 44: extern int _user_putc(char c);
  7184. 45: typedef const rom far char *STRING;
  7185. 46: typedef unsigned char BYTE;
  7186. 47:
  7187. 48: #define VERSION_STRING (STRING)"UsbFraise2.1 Version 2 (DP_USB open source stack)\n"
  7188. 49:
  7189. 50: BYTE LineFromUsb[LINE_FROM_USB_MAXLEN];
  7190. 51: BYTE LineFromUsbLen;
  7191. 52: BYTE FrGotLineFromUsb;
  7192. 53:
  7193. 54: extern void putc_cdc(BYTE c);
  7194. 55: #define putchar putc_cdc
  7195. 56:
  7196. 57: extern union USART USART_Status;
  7197. 58:
  7198. 59: //---------- FrTX : Host to Master -------------------------------------------
  7199. 60: /*unsigned char FrTXbuf[256]; //Fraise TX ring buffer; don't change size of this table : hardcoded in asm..
  7200. 61: unsigned char FrTXin=0,FrTXout=0; //Pointers to Fraise TX buffer
  7201. 62: unsigned char FrTXfree=255;
  7202. 63: #define FrTXempty (FrTXin==FrTXout)*/
  7203. 64:
  7204. 65: //---------- FrTXPacket : Master to Device(s) -------------------------------------------
  7205. 66: unsigned char FrTXpacket[64]; //Fraise TX packet buffer
  7206. 67: unsigned char FrTXpacket_i;
  7207. 68: unsigned char FrTXpacket_len;
  7208. 69: unsigned char FrTXchksum;
  7209. 70: unsigned char FrTXtries; //number of tries to send the TX packet
  7210. 71:
  7211. 72: //---------- FrRX : Device to Master -------------------------------------------
  7212. 73: unsigned char FrRXbuf[64]; //Fraise RX buffer:32 bytes
  7213. 74: unsigned char FrRXin;
  7214. 75: unsigned char FrRXout;
  7215. 76: //#define FrRXfull (FrRXin!=0)
  7216. 77: unsigned char FrRXchksum;
  7217. 78: unsigned char PollDelay;
  7218. 79: volatile unsigned char PollCount;
  7219. 80: //---------- FraiseStatus bits -------------------------------------------
  7220. 81: union {
  7221. 82: unsigned char VAL;
  7222. 83: struct {
  7223. 84: unsigned RXFULL :1; // a RX packet has been received
  7224. 85: unsigned RXCHAR :1; // the RX packet is char (do not convert to hexa string)
  7225. 86: // unsigned TXFULL :1; // the TX packet buffer is ready to be sent
  7226. 87: unsigned TXCHAR :1; // the TX packet was char (was not converted from hexa string)
  7227. 88: unsigned TX_NEEDACK :1; // the TX packet needs an acknowledge
  7228. 89: unsigned FBLDON :1;
  7229. 90: unsigned OERR :1;
  7230. 91: unsigned FERR :1;
  7231. 92: };
  7232. 93: } FraiseStatus;
  7233. 94:
  7234. 95: unsigned char i,c,c2; // general counter and tmp
  7235. 96: unsigned char t1,t2,t3; // general asm tmp
  7236. 97: unsigned int p;
  7237. 98: //---------- finite state machine FraiseState ----------------------------
  7238. 99: typedef enum {
  7239. 100: fIDLE
  7240. 101: ,fWAITACK
  7241. 102: ,fOUT
  7242. 103: ,fIN
  7243. 104: ,fBLOUT
  7244. 105: ,fBLIN
  7245. 106: } tFraiseState;
  7246. 107: tFraiseState FraiseState;
  7247. 108:
  7248. 109: //---------- FraiseMessage from interrupt routine -------------------------
  7249. 110: typedef enum {
  7250. 111: fmessNONE
  7251. 112: ,fmessFOUND // polled device has been found
  7252. 113: ,fmessLOST // polled device has been lost
  7253. 114: ,fmessCHKSUM // checksum error on a packet from polled device
  7254. 115: ,fmessNACK // destination device refused packet (packet error | buffer full)
  7255. 116: ,fmessTOUT // destination device didn't acknowledge packet (timeout)
  7256. 117: } tFraiseMessage;
  7257. 118: tFraiseMessage FraiseMessage;
  7258. 119:
  7259. 120:
  7260. 121: //---------- Devices State tables ----------------------------------------
  7261. 122: unsigned char _PolledChild; // id of the polled child
  7262. 123: unsigned char _bit_PolledChild; // 1<<PolledChild%8
  7263. 124: unsigned char MaxPolledChild; // maximum id of the polled child
  7264. 125: unsigned char Children[16]; // 16*8=128 bits: bit(Children[i],j)=child[i*8+j] is polled
  7265. 126: unsigned char ChildrenOK[16]; // 16*8=128 bits: bit(Children[i],j)=child[i*8+j] is present
  7266. 127: unsigned char AckChild; //child which must send a ACK now
  7267. 128: #define incPolledChild() { _PolledChild++ ; if(_PolledChild>MaxPolledChild) {_PolledChild=1;_bit_PolledChild =2;} else _bit_PolledChild = ((_bit_PolledChild << 1) | (_bit_PolledChild >> 7)); }
  7268. 129: //#define clearPolledChild() { _PolledChild=0 ; _bit_PolledChild=1 ; }
  7269. 130: #define PolledChild() _PolledChild
  7270. 131:
  7271. 132: #define bitset(var,bitno) ((var) |= (1 << (bitno)))
  7272. 133: #define bitclr(var,bitno) ((var) &= ~(1 << (bitno)))
  7273. 134: #define bittst(var,bitno) ((var) & (1 << (bitno)))
  7274. 135:
  7275. 136: /*const unsigned char _bits_table[8]={1,2,4,8,32,64,128};
  7276. 137: #define bitset(var,bitno) ((var) |= _bits_table[bitno])
  7277. 138: #define bitclr(var,bitno) ((var) &= ~_bits_table[bitno])
  7278. 139: #define bittst(var,bitno) (var& _bits_table[bitno])*/
  7279. 140:
  7280. 141: #define SET_CHILD(num) bitset(Children[(num)>>3],((num)&7))
  7281. 142: #define CLR_CHILD(num) bitclr(Children[(num)>>3],((num)&7))
  7282. 143: #define TST_CHILD(num) bittst(Children[(num)>>3],((num)&7))
  7283. 144:
  7284. 145: #define SET_CHILDOK(num) bitset(ChildrenOK[(num)>>3],((num)&7))
  7285. 146: #define CLR_CHILDOK(num) bitclr(ChildrenOK[(num)>>3],((num)&7))
  7286. 147: #define TST_CHILDOK(num) bittst(ChildrenOK[(num)>>3],((num)&7))
  7287. 148:
  7288. 149: #define SET_POLLEDCHILD() ( Children[_PolledChild>>3]|= _bit_PolledChild )
  7289. 150: #define CLR_POLLEDCHILD() ( Children[_PolledChild>>3]&= ~_bit_PolledChild )
  7290. 151: #define TST_POLLEDCHILD() ( Children[_PolledChild>>3]& _bit_PolledChild )
  7291. 152:
  7292. 153: #define SET_POLLEDCHILDOK() ( ChildrenOK[_PolledChild>>3]|= _bit_PolledChild )
  7293. 154: #define CLR_POLLEDCHILDOK() ( ChildrenOK[_PolledChild>>3]&= ~_bit_PolledChild )
  7294. 155: #define TST_POLLEDCHILDOK() ( ChildrenOK[_PolledChild>>3]& _bit_PolledChild )
  7295. 156:
  7296. 157:
  7297. 158: //------------- other globals -----------------------------------------
  7298. 159: //unsigned short nexttime; //timer
  7299. 160: //unsigned short time;
  7300. 161: //extern unsigned char g_TX_buf_free; //free space in "printf" buffer...
  7301. 162:
  7302. 163: //-------------- byte to HEX string -----------------------------------
  7303. 164: #define HI_CHAR(N) ( ((N)>>4)<10?((N)>>4)+'0':((N)>>4)-10+'A' )
  7304. 165: #define LO_CHAR(N) ( ((N)&15)<10?((N)&15)+'0':((N)&15)-10+'A' )
  7305. 166:
  7306. 167:
  7307. 168: //---------------serial macros ---------------------------------------
  7308. 169: void Serial_Init_Receiver(void)
  7309. 170: {
  7310. 171: while(TXSTAbits.TRMT==0);
  7311. 0850 A2AC BTFSS TXSTA, 1, ACCESS
  7312. 0852 D7FE BRA Serial_Init_Receiver
  7313. 172: WREG=RCREG;
  7314. 0854 50AE MOVF RCREG, W, ACCESS
  7315. 0856 6EE8 MOVWF WREG, ACCESS
  7316. 173: WREG=RCREG;
  7317. 0858 50AE MOVF RCREG, W, ACCESS
  7318. 085A 6EE8 MOVWF WREG, ACCESS
  7319. 174: RCSTAbits.CREN=0;
  7320. 085C 98AB BCF RCSTA, 4, ACCESS
  7321. 175: RCSTAbits.CREN=1;
  7322. 085E 88AB BSF RCSTA, 4, ACCESS
  7323. 176: PIE1bits.RCIE=1;
  7324. 0860 8A9D BSF PIE1, 5, ACCESS
  7325. 177: PIE1bits.TXIE=0;
  7326. 0862 989D BCF PIE1, 4, ACCESS
  7327. 178: mSerDrv_Off();
  7328. 0864 808B BSF LATC, 0, ACCESS
  7329. 179: }
  7330. 0866 0012 RETURN 0
  7331. 180:
  7332. 181: #define Serial_Init_Driver() {\
  7333. 182: mSerDrv_On(); \
  7334. 183: PIE1bits.RCIE=0; \
  7335. 184: }
  7336. 185:
  7337. 186: #define Serial_Init_None() {\
  7338. 187: mSerDrv_Off(); \
  7339. 188: PIE1bits.RCIE=0; \
  7340. 189: PIE1bits.TXIE=0; \
  7341. 190: }
  7342. 191:
  7343. 192: //#define Serial_Is_Driver() mSerDrv_isOn()
  7344. 193: #define Serial_Is_Receiver() (PIE1bits.RCIE)
  7345. 194: //---------------------------------------------------------------------
  7346. 195:
  7347. 196: void FraiseInit(void)
  7348. 197: {
  7349. 198: /*FrTXin=0;
  7350. 199: FrTXout=0;
  7351. 200: FrTXfree=255;*/
  7352. 201: FrGotLineFromUsb=0;
  7353. 0868 0101 MOVLB 0x1
  7354. 086A 6B41 CLRF 0x41, BANKED
  7355. 202: LineFromUsbLen=0;
  7356. 086C 0101 MOVLB 0x1
  7357. 086E 6B40 CLRF 0x40, BANKED
  7358. 203:
  7359. 204: FraiseStatus.VAL=0;
  7360. 0870 0101 MOVLB 0x1
  7361. 0872 6BCB CLRF cdc_In_len, BANKED
  7362. 205: FraiseState=fIDLE;
  7363. 0874 0101 MOVLB 0x1
  7364. 0876 6BD4 CLRF 0xD4, BANKED
  7365. 206: FraiseMessage=fmessNONE;
  7366. 0878 0101 MOVLB 0x1
  7367. 087A 6BD5 CLRF CDC_Inbdp, BANKED
  7368. 207: FrRXin=0;
  7369. 087C 0101 MOVLB 0x1
  7370. 087E 6BC6 CLRF 0xC6, BANKED
  7371. 208: FrRXout=0;
  7372. 0880 0101 MOVLB 0x1
  7373. 0882 6BC7 CLRF 0xC7, BANKED
  7374. 209: PollDelay=0;
  7375. 0884 0101 MOVLB 0x1
  7376. 0886 6BC9 CLRF cls, BANKED
  7377. 210: //OpenUSART(USART_TX_INT_OFF & USART_RX_INT_OFF & USART_ASYNCH_MODE & USART_EIGHT_BIT & USART_CONT_RX & USART_BRGH_HIGH, 103); // 48 MHz/4/115200 = 104
  7378. 211: BAUDCON = 0x08; // BRG16 = 1
  7379. 0888 0E08 MOVLW 0x8
  7380. 088A 6EB8 MOVWF BAUDCON, ACCESS
  7381. 212: OpenUSART(USART_TX_INT_OFF & USART_RX_INT_OFF & USART_ASYNCH_MODE & USART_NINE_BIT & USART_CONT_RX & USART_BRGH_HIGH & USART_ADDEN_OFF, 47); // 48 MHz/4/250000 = 48
  7382. 088C 0E2F MOVLW 0x2F
  7383. 088E 6EE6 MOVWF POSTINC1, ACCESS
  7384. 0890 6AE6 CLRF POSTINC1, ACCESS
  7385. 0892 0E1E MOVLW 0x1E
  7386. 0894 6EE6 MOVWF POSTINC1, ACCESS
  7387. 0896 ECAF CALL 0x495E, 0
  7388. 0898 F024 NOP
  7389. 089A 52E5 MOVF POSTDEC1, F, ACCESS
  7390. 089C 52E5 MOVF POSTDEC1, F, ACCESS
  7391. 089E 52E5 MOVF POSTDEC1, F, ACCESS
  7392. 213: USART_Status.TX_NINE=1;
  7393. 08A0 0101 MOVLB 0x1
  7394. 08A2 83FD BSF 0xFD, 1, BANKED
  7395. 214:
  7396. 215: // Initialize Timer2
  7397. 216: // The prescaler will be at 16
  7398. 217: T2CONbits.T2CKPS1 = 1;
  7399. 08A4 82CA BSF T2CON, 1, ACCESS
  7400. 218: T2CONbits.T2CKPS0 = 1;
  7401. 08A6 80CA BSF T2CON, 0, ACCESS
  7402. 219: // We want no TMR2 post scaler
  7403. 220: T2CONbits.T2OUTPS3 = 0;
  7404. 08A8 9CCA BCF T2CON, 6, ACCESS
  7405. 221: T2CONbits.T2OUTPS2 = 0;
  7406. 08AA 9ACA BCF T2CON, 5, ACCESS
  7407. 222: T2CONbits.T2OUTPS1 = 0;
  7408. 08AC 98CA BCF T2CON, 4, ACCESS
  7409. 223: T2CONbits.T2OUTPS0 = 0;
  7410. 08AE 96CA BCF T2CON, 3, ACCESS
  7411. 224: // Set our reload value
  7412. 225: //PR2 = kPR2_RELOAD;
  7413. 226: PR2 = 255;
  7414. 08B0 68CB SETF PR2, ACCESS
  7415. 227: T2CONbits.TMR2ON = 1;
  7416. 08B2 84CA BSF T2CON, 2, ACCESS
  7417. 228:
  7418. 229: // Initalize switchs and leds
  7419. 230: mInitAllLEDs();
  7420. 08B4 0EFC MOVLW 0xFC
  7421. 08B6 168B ANDWF LATC, F, ACCESS
  7422. 08B8 0EFC MOVLW 0xFC
  7423. 08BA 1694 ANDWF TRISC, F, ACCESS
  7424. 231: mInitSwitch();
  7425. 08BC 8494 BSF TRISC, 2, ACCESS
  7426. 232:
  7427. 233: mInitSerDrv();
  7428. 08BE 9094 BCF TRISC, 0, ACCESS
  7429. 234: //Serial_Init_Receiver();
  7430. 235: Serial_Init_Driver();
  7431. 08C0 908B BCF LATC, 0, ACCESS
  7432. 08C2 9A9D BCF PIE1, 5, ACCESS
  7433. 236: for(i=0;i<16;i++) {
  7434. 08C4 0101 MOVLB 0x1
  7435. 08C6 6BCC CLRF cdc_Out_len, BANKED
  7436. 08C8 0E10 MOVLW 0x10
  7437. 08CA 0101 MOVLB 0x1
  7438. 08CC 5DCC SUBWF cdc_Out_len, W, BANKED
  7439. 08CE E213 BC 0x8F6
  7440. 08F0 0101 MOVLB 0x1
  7441. 08F2 2BCC INCF cdc_Out_len, F, BANKED
  7442. 08F4 D7E9 BRA 0x8C8
  7443. 237: Children[i]=0;
  7444. 08D0 0101 MOVLB 0x1
  7445. 08D2 51CC MOVF cdc_Out_len, W, BANKED
  7446. 08D4 6AEA CLRF FSR0H, ACCESS
  7447. 08D6 0FD9 ADDLW 0xD9
  7448. 08D8 6EE9 MOVWF FSR0L, ACCESS
  7449. 08DA 0E01 MOVLW 0x1
  7450. 08DC 22EA ADDWFC FSR0H, F, ACCESS
  7451. 08DE 6AEF CLRF INDF0, ACCESS
  7452. 238: ChildrenOK[i]=0;
  7453. 08E0 0101 MOVLB 0x1
  7454. 08E2 51CC MOVF cdc_Out_len, W, BANKED
  7455. 08E4 6AEA CLRF FSR0H, ACCESS
  7456. 08E6 0FE9 ADDLW 0xE9
  7457. 08E8 6EE9 MOVWF FSR0L, ACCESS
  7458. 08EA 0E01 MOVLW 0x1
  7459. 08EC 22EA ADDWFC FSR0H, F, ACCESS
  7460. 08EE 6AEF CLRF INDF0, ACCESS
  7461. 239: }
  7462. 240: MaxPolledChild=4;
  7463. 08F6 0101 MOVLB 0x1
  7464. 08F8 0E04 MOVLW 0x4
  7465. 08FA 6FD8 MOVWF cdc_trf_state, BANKED
  7466. 241: _PolledChild=1;_bit_PolledChild =2;
  7467. 08FC 0101 MOVLB 0x1
  7468. 08FE 0E01 MOVLW 0x1
  7469. 0900 6FD6 MOVWF 0xD6, BANKED
  7470. 0902 0101 MOVLB 0x1
  7471. 0904 0E02 MOVLW 0x2
  7472. 0906 6FD7 MOVWF CDCFunctionError, BANKED
  7473. 242:
  7474. 243: // Set interrupt priorities
  7475. 244: PIE1bits.TMR2IE = 0;
  7476. 0908 929D BCF PIE1, 1, ACCESS
  7477. 245: IPR1bits.TMR2IP = 1;
  7478. 090A 829F BSF IPR1, 1, ACCESS
  7479. 246: IPR1bits.TXIP = 1;
  7480. 090C 889F BSF IPR1, 4, ACCESS
  7481. 247: IPR1bits.RCIP = 1;
  7482. 090E 8A9F BSF IPR1, 5, ACCESS
  7483. 248:
  7484. 249: INTCONbits.GIEH = 1;
  7485. 0910 8EF2 BSF INTCON, 7, ACCESS
  7486. 250: }
  7487. 0912 0012 RETURN 0
  7488. 251:
  7489. 252: /*-----------------------------------------------------------------------------------*/
  7490. 253: /* Send received fraise packet to usb. */
  7491. 254: /*-----------------------------------------------------------------------------------*/
  7492. 255:
  7493. 256: void FrSendtoUsb(void)
  7494. 0914 CFD9 MOVFF FSR2L, POSTINC1
  7495. 0916 FFE6 NOP
  7496. 0918 CFE1 MOVFF FSR1L, FSR2L
  7497. 091A FFD9 NOP
  7498. 091C 0E03 MOVLW 0x3
  7499. 091E 26E1 ADDWF FSR1L, F, ACCESS
  7500. 257: {
  7501. 258: unsigned char i=0,c,c2;
  7502. 0920 6ADF CLRF INDF2, ACCESS
  7503. 259:
  7504. 260: if(!FraiseStatus.RXFULL) return;
  7505. 0922 0101 MOVLB 0x1
  7506. 0924 A1CB BTFSS cdc_In_len, 0, BANKED
  7507. 0926 D0AE BRA 0xA84
  7508. 261:
  7509. 262: c=FrRXbuf[i++]; //discard len byte
  7510. 0928 50DF MOVF INDF2, W, ACCESS
  7511. 092A 2ADF INCF INDF2, F, ACCESS
  7512. 092C 6AEA CLRF FSR0H, ACCESS
  7513. 092E 0F86 ADDLW 0x86
  7514. 0930 6EE9 MOVWF FSR0L, ACCESS
  7515. 0932 0E01 MOVLW 0x1
  7516. 0934 22EA ADDWFC FSR0H, F, ACCESS
  7517. 0936 0E01 MOVLW 0x1
  7518. 0938 CFEF MOVFF INDF0, PLUSW2
  7519. 093A FFDB NOP
  7520. 263:
  7521. 264: // send hex string of PolledChild+128*packet_is_char
  7522. 265: c2=(PolledChild()>>4)+'0'; if(c2>'9') c2+='A'-'9'-1;
  7523. 093C 0101 MOVLB 0x1
  7524. 093E 39D6 SWAPF 0xD6, W, BANKED
  7525. 0940 0B0F ANDLW 0xF
  7526. 0942 0F30 ADDLW 0x30
  7527. 0944 6EE7 MOVWF INDF1, ACCESS
  7528. 0946 0E02 MOVLW 0x2
  7529. 0948 CFE7 MOVFF INDF1, PLUSW2
  7530. 094A FFDB NOP
  7531. 094C 0E02 MOVLW 0x2
  7532. 094E 50DB MOVF PLUSW2, W, ACCESS
  7533. 0950 0839 SUBLW 0x39
  7534. 0952 E20A BC 0x968
  7535. 0954 0E07 MOVLW 0x7
  7536. 0956 6E14 MOVWF __tmp_0, ACCESS
  7537. 0958 0E02 MOVLW 0x2
  7538. 095A CFDB MOVFF PLUSW2, INDF1
  7539. 095C FFE7 NOP
  7540. 095E 5014 MOVF __tmp_0, W, ACCESS
  7541. 0960 26E7 ADDWF INDF1, F, ACCESS
  7542. 0962 0E02 MOVLW 0x2
  7543. 0964 CFE7 MOVFF INDF1, PLUSW2
  7544. 0966 FFDB NOP
  7545. 266: if(FraiseStatus.RXCHAR) c2|=8;
  7546. 0968 0101 MOVLB 0x1
  7547. 096A A3CB BTFSS cdc_In_len, 1, BANKED
  7548. 096C D002 BRA 0x972
  7549. 096E 0E02 MOVLW 0x2
  7550. 0970 86DB BSF PLUSW2, 3, ACCESS
  7551. 267: putchar(c2);
  7552. 0972 0E02 MOVLW 0x2
  7553. 0974 CFDB MOVFF PLUSW2, POSTINC1
  7554. 0976 FFE6 NOP
  7555. 0978 EC26 CALL 0x424C, 0
  7556. 097A F021 NOP
  7557. 097C 52E5 MOVF POSTDEC1, F, ACCESS
  7558. 268:
  7559. 269: c2=(PolledChild()&15)+'0'; if(c2>'9') c2+='A'-'9'-1;
  7560. 097E 0E0F MOVLW 0xF
  7561. 0980 0101 MOVLB 0x1
  7562. 0982 15D6 ANDWF 0xD6, W, BANKED
  7563. 0984 0F30 ADDLW 0x30
  7564. 0986 6EE7 MOVWF INDF1, ACCESS
  7565. 0988 0E02 MOVLW 0x2
  7566. 098A CFE7 MOVFF INDF1, PLUSW2
  7567. 098C FFDB NOP
  7568. 098E 0E02 MOVLW 0x2
  7569. 0990 50DB MOVF PLUSW2, W, ACCESS
  7570. 0992 0839 SUBLW 0x39
  7571. 0994 E20A BC 0x9AA
  7572. 0996 0E07 MOVLW 0x7
  7573. 0998 6E14 MOVWF __tmp_0, ACCESS
  7574. 099A 0E02 MOVLW 0x2
  7575. 099C CFDB MOVFF PLUSW2, INDF1
  7576. 099E FFE7 NOP
  7577. 09A0 5014 MOVF __tmp_0, W, ACCESS
  7578. 09A2 26E7 ADDWF INDF1, F, ACCESS
  7579. 09A4 0E02 MOVLW 0x2
  7580. 09A6 CFE7 MOVFF INDF1, PLUSW2
  7581. 09A8 FFDB NOP
  7582. 270: putchar(c2);
  7583. 09AA 0E02 MOVLW 0x2
  7584. 09AC CFDB MOVFF PLUSW2, POSTINC1
  7585. 09AE FFE6 NOP
  7586. 09B0 EC26 CALL 0x424C, 0
  7587. 09B2 F021 NOP
  7588. 09B4 52E5 MOVF POSTDEC1, F, ACCESS
  7589. 271:
  7590. 272: if(FraiseStatus.RXCHAR)
  7591. 09B6 0101 MOVLB 0x1
  7592. 09B8 A3CB BTFSS cdc_In_len, 1, BANKED
  7593. 09BA D012 BRA 0x9E0
  7594. 273: while(i<FrRXin) putchar(FrRXbuf[i++]);
  7595. 09BC 0101 MOVLB 0x1
  7596. 09BE 51C6 MOVF 0xC6, W, BANKED
  7597. 09C0 5CDF SUBWF INDF2, W, ACCESS
  7598. 09C2 E20D BC 0x9DE
  7599. 09C4 50DF MOVF INDF2, W, ACCESS
  7600. 09C6 2ADF INCF INDF2, F, ACCESS
  7601. 09C8 6AEA CLRF FSR0H, ACCESS
  7602. 09CA 0F86 ADDLW 0x86
  7603. 09CC 6EE9 MOVWF FSR0L, ACCESS
  7604. 09CE 0E01 MOVLW 0x1
  7605. 09D0 22EA ADDWFC FSR0H, F, ACCESS
  7606. 09D2 50EF MOVF INDF0, W, ACCESS
  7607. 09D4 6EE6 MOVWF POSTINC1, ACCESS
  7608. 09D6 EC26 CALL 0x424C, 0
  7609. 09D8 F021 NOP
  7610. 09DA 52E5 MOVF POSTDEC1, F, ACCESS
  7611. 09DC D7EF BRA 0x9BC
  7612. 274: else
  7613. 09DE D047 BRA 0xA6E
  7614. 275: while(i<FrRXin) {
  7615. 09E0 0101 MOVLB 0x1
  7616. 09E2 51C6 MOVF 0xC6, W, BANKED
  7617. 09E4 5CDF SUBWF INDF2, W, ACCESS
  7618. 09E6 E243 BC 0xA6E
  7619. 0A6C D7B9 BRA 0x9E0
  7620. 276: c=FrRXbuf[i++];
  7621. 09E8 50DF MOVF INDF2, W, ACCESS
  7622. 09EA 2ADF INCF INDF2, F, ACCESS
  7623. 09EC 6AEA CLRF FSR0H, ACCESS
  7624. 09EE 0F86 ADDLW 0x86
  7625. 09F0 6EE9 MOVWF FSR0L, ACCESS
  7626. 09F2 0E01 MOVLW 0x1
  7627. 09F4 22EA ADDWFC FSR0H, F, ACCESS
  7628. 09F6 0E01 MOVLW 0x1
  7629. 09F8 CFEF MOVFF INDF0, PLUSW2
  7630. 09FA FFDB NOP
  7631. 277: c2=(c>>4)+'0'; if(c2>'9') c2+='A'-'9'-1;
  7632. 09FC 0E01 MOVLW 0x1
  7633. 09FE 38DB SWAPF PLUSW2, W, ACCESS
  7634. 0A00 0B0F ANDLW 0xF
  7635. 0A02 0F30 ADDLW 0x30
  7636. 0A04 6EE7 MOVWF INDF1, ACCESS
  7637. 0A06 0E02 MOVLW 0x2
  7638. 0A08 CFE7 MOVFF INDF1, PLUSW2
  7639. 0A0A FFDB NOP
  7640. 0A0C 0E02 MOVLW 0x2
  7641. 0A0E 50DB MOVF PLUSW2, W, ACCESS
  7642. 0A10 0839 SUBLW 0x39
  7643. 0A12 E20A BC 0xA28
  7644. 0A14 0E07 MOVLW 0x7
  7645. 0A16 6E14 MOVWF __tmp_0, ACCESS
  7646. 0A18 0E02 MOVLW 0x2
  7647. 0A1A CFDB MOVFF PLUSW2, INDF1
  7648. 0A1C FFE7 NOP
  7649. 0A1E 5014 MOVF __tmp_0, W, ACCESS
  7650. 0A20 26E7 ADDWF INDF1, F, ACCESS
  7651. 0A22 0E02 MOVLW 0x2
  7652. 0A24 CFE7 MOVFF INDF1, PLUSW2
  7653. 0A26 FFDB NOP
  7654. 278: putchar(c2);
  7655. 0A28 0E02 MOVLW 0x2
  7656. 0A2A CFDB MOVFF PLUSW2, POSTINC1
  7657. 0A2C FFE6 NOP
  7658. 0A2E EC26 CALL 0x424C, 0
  7659. 0A30 F021 NOP
  7660. 0A32 52E5 MOVF POSTDEC1, F, ACCESS
  7661. 279: c2=(c&15)+'0'; if(c2>'9') c2+='A'-'9'-1;
  7662. 0A34 0E01 MOVLW 0x1
  7663. 0A36 50DB MOVF PLUSW2, W, ACCESS
  7664. 0A38 0B0F ANDLW 0xF
  7665. 0A3A 0F30 ADDLW 0x30
  7666. 0A3C 6EE7 MOVWF INDF1, ACCESS
  7667. 0A3E 0E02 MOVLW 0x2
  7668. 0A40 CFE7 MOVFF INDF1, PLUSW2
  7669. 0A42 FFDB NOP
  7670. 0A44 0E02 MOVLW 0x2
  7671. 0A46 50DB MOVF PLUSW2, W, ACCESS
  7672. 0A48 0839 SUBLW 0x39
  7673. 0A4A E20A BC 0xA60
  7674. 0A4C 0E07 MOVLW 0x7
  7675. 0A4E 6E14 MOVWF __tmp_0, ACCESS
  7676. 0A50 0E02 MOVLW 0x2
  7677. 0A52 CFDB MOVFF PLUSW2, INDF1
  7678. 0A54 FFE7 NOP
  7679. 0A56 5014 MOVF __tmp_0, W, ACCESS
  7680. 0A58 26E7 ADDWF INDF1, F, ACCESS
  7681. 0A5A 0E02 MOVLW 0x2
  7682. 0A5C CFE7 MOVFF INDF1, PLUSW2
  7683. 0A5E FFDB NOP
  7684. 280: putchar(c2);
  7685. 0A60 0E02 MOVLW 0x2
  7686. 0A62 CFDB MOVFF PLUSW2, POSTINC1
  7687. 0A64 FFE6 NOP
  7688. 0A66 EC26 CALL 0x424C, 0
  7689. 0A68 F021 NOP
  7690. 0A6A 52E5 MOVF POSTDEC1, F, ACCESS
  7691. 281: }
  7692. 282:
  7693. 283: putchar('\n');
  7694. 0A6E 0E0A MOVLW 0xA
  7695. 0A70 6EE6 MOVWF POSTINC1, ACCESS
  7696. 0A72 EC26 CALL 0x424C, 0
  7697. 0A74 F021 NOP
  7698. 0A76 52E5 MOVF POSTDEC1, F, ACCESS
  7699. 284: FrRXout=FrRXin=0;
  7700. 0A78 0101 MOVLB 0x1
  7701. 0A7A 6BC6 CLRF 0xC6, BANKED
  7702. 0A7C C1C6 MOVFF FrRXin, FrRXout
  7703. 0A7E F1C7 NOP
  7704. 285: FraiseStatus.RXFULL=0;
  7705. 0A80 0101 MOVLB 0x1
  7706. 0A82 91CB BCF cdc_In_len, 0, BANKED
  7707. 286: }
  7708. 0A84 0E03 MOVLW 0x3
  7709. 0A86 5CE1 SUBWF FSR1L, W, ACCESS
  7710. 0A88 E202 BC 0xA8E
  7711. 0A8A 6AE1 CLRF FSR1L, ACCESS
  7712. 0A8C 52E5 MOVF POSTDEC1, F, ACCESS
  7713. 0A8E 6EE1 MOVWF FSR1L, ACCESS
  7714. 0A90 52E5 MOVF POSTDEC1, F, ACCESS
  7715. 0A92 CFE7 MOVFF INDF1, FSR2L
  7716. 0A94 FFD9 NOP
  7717. 0A96 0012 RETURN 0
  7718. 287: /*-----------------------------------------------------------------------------------*/
  7719. 288: /* Send fraise ISR message to usb. */
  7720. 289: /*-----------------------------------------------------------------------------------*/
  7721. 290: void FrSendMessagetoUsb(void)
  7722. 291: {
  7723. 292: /* fmessNONE
  7724. 293: ,fmessFOUND // polled device has been found
  7725. 294: ,fmessLOST // polled device has been lost
  7726. 295: ,fmessCHKSUM // checksum error on a packet from polled device
  7727. 296: ,fmessNACK // destination device didn't acknowledge packet (packet error | buffer full)
  7728. 297: ,fmessTOUT // destination device didn't acknowledge packet (timeout)
  7729. 298: */
  7730. 299: if(FraiseStatus.OERR) { FraiseStatus.OERR=0;printf((STRING)"OERR !!\n");}
  7731. 0A98 0101 MOVLB 0x1
  7732. 0A9A ABCB BTFSS cdc_In_len, 5, BANKED
  7733. 0A9C D012 BRA 0xAC2
  7734. 0A9E 0101 MOVLB 0x1
  7735. 0AA0 9BCB BCF cdc_In_len, 5, BANKED
  7736. 0AA2 0EBA MOVLW 0xBA
  7737. 0AA4 6E14 MOVWF __tmp_0, ACCESS
  7738. 0AA6 0E46 MOVLW 0x46
  7739. 0AA8 6E15 MOVWF digit_cnt, ACCESS
  7740. 0AAA 6A16 CLRF prefix_cnt, ACCESS
  7741. 0AAC C014 MOVFF __tmp_0, POSTINC1
  7742. 0AAE FFE6 NOP
  7743. 0AB0 C015 MOVFF digit_cnt, POSTINC1
  7744. 0AB2 FFE6 NOP
  7745. 0AB4 C016 MOVFF prefix_cnt, POSTINC1
  7746. 0AB6 FFE6 NOP
  7747. 0AB8 EC63 CALL 0x48C6, 0
  7748. 0ABA F024 NOP
  7749. 0ABC 52E5 MOVF POSTDEC1, F, ACCESS
  7750. 0ABE 52E5 MOVF POSTDEC1, F, ACCESS
  7751. 0AC0 52E5 MOVF POSTDEC1, F, ACCESS
  7752. 300: if(FraiseStatus.FERR) { FraiseStatus.FERR=0;printf((STRING)"FERR !!\n");}
  7753. 0AC2 0101 MOVLB 0x1
  7754. 0AC4 ADCB BTFSS cdc_In_len, 6, BANKED
  7755. 0AC6 D012 BRA 0xAEC
  7756. 0AC8 0101 MOVLB 0x1
  7757. 0ACA 9DCB BCF cdc_In_len, 6, BANKED
  7758. 0ACC 0EB1 MOVLW 0xB1
  7759. 0ACE 6E14 MOVWF __tmp_0, ACCESS
  7760. 0AD0 0E46 MOVLW 0x46
  7761. 0AD2 6E15 MOVWF digit_cnt, ACCESS
  7762. 0AD4 6A16 CLRF prefix_cnt, ACCESS
  7763. 0AD6 C014 MOVFF __tmp_0, POSTINC1
  7764. 0AD8 FFE6 NOP
  7765. 0ADA C015 MOVFF digit_cnt, POSTINC1
  7766. 0ADC FFE6 NOP
  7767. 0ADE C016 MOVFF prefix_cnt, POSTINC1
  7768. 0AE0 FFE6 NOP
  7769. 0AE2 EC63 CALL 0x48C6, 0
  7770. 0AE4 F024 NOP
  7771. 0AE6 52E5 MOVF POSTDEC1, F, ACCESS
  7772. 0AE8 52E5 MOVF POSTDEC1, F, ACCESS
  7773. 0AEA 52E5 MOVF POSTDEC1, F, ACCESS
  7774. 301:
  7775. 302: if(FraiseMessage==fmessNONE) return;
  7776. 0AEC 0101 MOVLB 0x1
  7777. 0AEE 51D5 MOVF CDC_Inbdp, W, BANKED
  7778. 0AF0 E101 BNZ 0xAF4
  7779. 0AF2 D1B4 BRA 0xE5C
  7780. 303: switch(FraiseMessage) {
  7781. 0AF4 0101 MOVLB 0x1
  7782. 0AF6 51D5 MOVF CDC_Inbdp, W, BANKED
  7783. 0AF8 0A05 XORLW 0x5
  7784. 0AFA E101 BNZ 0xAFE
  7785. 0AFC D16E BRA 0xDDA
  7786. 0AFE 0A01 XORLW 0x1
  7787. 0B00 E101 BNZ 0xB04
  7788. 0B02 D12C BRA 0xD5C
  7789. 0B04 0A07 XORLW 0x7
  7790. 0B06 E101 BNZ 0xB0A
  7791. 0B08 D0EA BRA 0xCDE
  7792. 0B0A 0A01 XORLW 0x1
  7793. 0B0C E075 BZ 0xBF8
  7794. 0B0E 0A03 XORLW 0x3
  7795. 0B10 E001 BZ 0xB14
  7796. 0B12 D1A2 BRA 0xE58
  7797. 304: case fmessFOUND : // print "sCdd"
  7798. 305: if(!TST_CHILDOK(AckChild)){
  7799. 0B14 0E07 MOVLW 0x7
  7800. 0B16 0101 MOVLB 0x1
  7801. 0B18 15F9 ANDWF 0xF9, W, BANKED
  7802. 0B1A 6E15 MOVWF digit_cnt, ACCESS
  7803. 0B1C 0E01 MOVLW 0x1
  7804. 0B1E 5215 MOVF digit_cnt, F, ACCESS
  7805. 0B20 E004 BZ 0xB2A
  7806. 0B22 46E8 RLNCF WREG, F, ACCESS
  7807. 0B24 0BFE ANDLW 0xFE
  7808. 0B26 0615 DECF digit_cnt, F, ACCESS
  7809. 0B28 E1FC BNZ 0xB22
  7810. 0B2A 6E14 MOVWF __tmp_0, ACCESS
  7811. 0B2C 0101 MOVLB 0x1
  7812. 0B2E 51F9 MOVF 0xF9, W, BANKED
  7813. 0B30 40E8 RRNCF WREG, W, ACCESS
  7814. 0B32 40E8 RRNCF WREG, W, ACCESS
  7815. 0B34 40E8 RRNCF WREG, W, ACCESS
  7816. 0B36 0B1F ANDLW 0x1F
  7817. 0B38 6AEA CLRF FSR0H, ACCESS
  7818. 0B3A 0FE9 ADDLW 0xE9
  7819. 0B3C 6EE9 MOVWF FSR0L, ACCESS
  7820. 0B3E 0E01 MOVLW 0x1
  7821. 0B40 22EA ADDWFC FSR0H, F, ACCESS
  7822. 0B42 50EF MOVF INDF0, W, ACCESS
  7823. 0B44 1414 ANDWF __tmp_0, W, ACCESS
  7824. 0B46 E157 BNZ 0xBF6
  7825. 306: SET_CHILDOK(AckChild);
  7826. 0B48 0E07 MOVLW 0x7
  7827. 0B4A 0101 MOVLB 0x1
  7828. 0B4C 15F9 ANDWF 0xF9, W, BANKED
  7829. 0B4E 6E15 MOVWF digit_cnt, ACCESS
  7830. 0B50 0E01 MOVLW 0x1
  7831. 0B52 5215 MOVF digit_cnt, F, ACCESS
  7832. 0B54 E004 BZ 0xB5E
  7833. 0B56 46E8 RLNCF WREG, F, ACCESS
  7834. 0B58 0BFE ANDLW 0xFE
  7835. 0B5A 0615 DECF digit_cnt, F, ACCESS
  7836. 0B5C E1FC BNZ 0xB56
  7837. 0B5E 6E14 MOVWF __tmp_0, ACCESS
  7838. 0B60 0101 MOVLB 0x1
  7839. 0B62 51F9 MOVF 0xF9, W, BANKED
  7840. 0B64 40E8 RRNCF WREG, W, ACCESS
  7841. 0B66 40E8 RRNCF WREG, W, ACCESS
  7842. 0B68 40E8 RRNCF WREG, W, ACCESS
  7843. 0B6A 0B1F ANDLW 0x1F
  7844. 0B6C 6AEA CLRF FSR0H, ACCESS
  7845. 0B6E 0FE9 ADDLW 0xE9
  7846. 0B70 6EE9 MOVWF FSR0L, ACCESS
  7847. 0B72 0E01 MOVLW 0x1
  7848. 0B74 22EA ADDWFC FSR0H, F, ACCESS
  7849. 0B76 5014 MOVF __tmp_0, W, ACCESS
  7850. 0B78 12EF IORWF INDF0, F, ACCESS
  7851. 307: putchar('\n');
  7852. 0B7A 0E0A MOVLW 0xA
  7853. 0B7C 6EE6 MOVWF POSTINC1, ACCESS
  7854. 0B7E EC26 CALL 0x424C, 0
  7855. 0B80 F021 NOP
  7856. 0B82 52E5 MOVF POSTDEC1, F, ACCESS
  7857. 308: putchar('s');
  7858. 0B84 0E73 MOVLW 0x73
  7859. 0B86 6EE6 MOVWF POSTINC1, ACCESS
  7860. 0B88 EC26 CALL 0x424C, 0
  7861. 0B8A F021 NOP
  7862. 0B8C 52E5 MOVF POSTDEC1, F, ACCESS
  7863. 309: putchar('C');
  7864. 0B8E 0E43 MOVLW 0x43
  7865. 0B90 6EE6 MOVWF POSTINC1, ACCESS
  7866. 0B92 EC26 CALL 0x424C, 0
  7867. 0B94 F021 NOP
  7868. 0B96 52E5 MOVF POSTDEC1, F, ACCESS
  7869. 310: putchar(HI_CHAR(AckChild));
  7870. 0B98 0101 MOVLB 0x1
  7871. 0B9A 39F9 SWAPF 0xF9, W, BANKED
  7872. 0B9C 0B0F ANDLW 0xF
  7873. 0B9E 6E14 MOVWF __tmp_0, ACCESS
  7874. 0BA0 0E0A MOVLW 0xA
  7875. 0BA2 5C14 SUBWF __tmp_0, W, ACCESS
  7876. 0BA4 E205 BC 0xBB0
  7877. 0BA6 0101 MOVLB 0x1
  7878. 0BA8 39F9 SWAPF 0xF9, W, BANKED
  7879. 0BAA 0B0F ANDLW 0xF
  7880. 0BAC 0F30 ADDLW 0x30
  7881. 0BAE D005 BRA 0xBBA
  7882. 0BB0 0101 MOVLB 0x1
  7883. 0BB2 39F9 SWAPF 0xF9, W, BANKED
  7884. 0BB4 0B0F ANDLW 0xF
  7885. 0BB6 0FF6 ADDLW 0xF6
  7886. 0BB8 0F41 ADDLW 0x41
  7887. 0BBA 6EE6 MOVWF POSTINC1, ACCESS
  7888. 0BBC EC26 CALL 0x424C, 0
  7889. 0BBE F021 NOP
  7890. 0BC0 52E5 MOVF POSTDEC1, F, ACCESS
  7891. 311: putchar(LO_CHAR(AckChild));
  7892. 0BC2 0E0F MOVLW 0xF
  7893. 0BC4 0101 MOVLB 0x1
  7894. 0BC6 15F9 ANDWF 0xF9, W, BANKED
  7895. 0BC8 6E14 MOVWF __tmp_0, ACCESS
  7896. 0BCA 0E0A MOVLW 0xA
  7897. 0BCC 5C14 SUBWF __tmp_0, W, ACCESS
  7898. 0BCE E205 BC 0xBDA
  7899. 0BD0 0E0F MOVLW 0xF
  7900. 0BD2 0101 MOVLB 0x1
  7901. 0BD4 15F9 ANDWF 0xF9, W, BANKED
  7902. 0BD6 0F30 ADDLW 0x30
  7903. 0BD8 D005 BRA 0xBE4
  7904. 0BDA 0E0F MOVLW 0xF
  7905. 0BDC 0101 MOVLB 0x1
  7906. 0BDE 15F9 ANDWF 0xF9, W, BANKED
  7907. 0BE0 0FF6 ADDLW 0xF6
  7908. 0BE2 0F41 ADDLW 0x41
  7909. 0BE4 6EE6 MOVWF POSTINC1, ACCESS
  7910. 0BE6 EC26 CALL 0x424C, 0
  7911. 0BE8 F021 NOP
  7912. 0BEA 52E5 MOVF POSTDEC1, F, ACCESS
  7913. 312: putchar('\n');
  7914. 0BEC 0E0A MOVLW 0xA
  7915. 0BEE 6EE6 MOVWF POSTINC1, ACCESS
  7916. 0BF0 EC26 CALL 0x424C, 0
  7917. 0BF2 F021 NOP
  7918. 0BF4 52E5 MOVF POSTDEC1, F, ACCESS
  7919. 313: }
  7920. 314: break;
  7921. 0BF6 D130 BRA 0xE58
  7922. 315: case fmessLOST : // print "scdd"
  7923. 316: if(TST_CHILDOK(AckChild)){
  7924. 0BF8 0E07 MOVLW 0x7
  7925. 0BFA 0101 MOVLB 0x1
  7926. 0BFC 15F9 ANDWF 0xF9, W, BANKED
  7927. 0BFE 6E15 MOVWF digit_cnt, ACCESS
  7928. 0C00 0E01 MOVLW 0x1
  7929. 0C02 5215 MOVF digit_cnt, F, ACCESS
  7930. 0C04 E004 BZ 0xC0E
  7931. 0C06 46E8 RLNCF WREG, F, ACCESS
  7932. 0C08 0BFE ANDLW 0xFE
  7933. 0C0A 0615 DECF digit_cnt, F, ACCESS
  7934. 0C0C E1FC BNZ 0xC06
  7935. 0C0E 6E14 MOVWF __tmp_0, ACCESS
  7936. 0C10 0101 MOVLB 0x1
  7937. 0C12 51F9 MOVF 0xF9, W, BANKED
  7938. 0C14 40E8 RRNCF WREG, W, ACCESS
  7939. 0C16 40E8 RRNCF WREG, W, ACCESS
  7940. 0C18 40E8 RRNCF WREG, W, ACCESS
  7941. 0C1A 0B1F ANDLW 0x1F
  7942. 0C1C 6AEA CLRF FSR0H, ACCESS
  7943. 0C1E 0FE9 ADDLW 0xE9
  7944. 0C20 6EE9 MOVWF FSR0L, ACCESS
  7945. 0C22 0E01 MOVLW 0x1
  7946. 0C24 22EA ADDWFC FSR0H, F, ACCESS
  7947. 0C26 50EF MOVF INDF0, W, ACCESS
  7948. 0C28 1414 ANDWF __tmp_0, W, ACCESS
  7949. 0C2A E058 BZ 0xCDC
  7950. 317: CLR_CHILDOK(AckChild);
  7951. 0C2C 0E07 MOVLW 0x7
  7952. 0C2E 0101 MOVLB 0x1
  7953. 0C30 15F9 ANDWF 0xF9, W, BANKED
  7954. 0C32 6E15 MOVWF digit_cnt, ACCESS
  7955. 0C34 0E01 MOVLW 0x1
  7956. 0C36 5215 MOVF digit_cnt, F, ACCESS
  7957. 0C38 E004 BZ 0xC42
  7958. 0C3A 46E8 RLNCF WREG, F, ACCESS
  7959. 0C3C 0BFE ANDLW 0xFE
  7960. 0C3E 0615 DECF digit_cnt, F, ACCESS
  7961. 0C40 E1FC BNZ 0xC3A
  7962. 0C42 1CE8 COMF WREG, W, ACCESS
  7963. 0C44 6E14 MOVWF __tmp_0, ACCESS
  7964. 0C46 0101 MOVLB 0x1
  7965. 0C48 51F9 MOVF 0xF9, W, BANKED
  7966. 0C4A 40E8 RRNCF WREG, W, ACCESS
  7967. 0C4C 40E8 RRNCF WREG, W, ACCESS
  7968. 0C4E 40E8 RRNCF WREG, W, ACCESS
  7969. 0C50 0B1F ANDLW 0x1F
  7970. 0C52 6AEA CLRF FSR0H, ACCESS
  7971. 0C54 0FE9 ADDLW 0xE9
  7972. 0C56 6EE9 MOVWF FSR0L, ACCESS
  7973. 0C58 0E01 MOVLW 0x1
  7974. 0C5A 22EA ADDWFC FSR0H, F, ACCESS
  7975. 0C5C 5014 MOVF __tmp_0, W, ACCESS
  7976. 0C5E 16EF ANDWF INDF0, F, ACCESS
  7977. 318: putchar('\n');
  7978. 0C60 0E0A MOVLW 0xA
  7979. 0C62 6EE6 MOVWF POSTINC1, ACCESS
  7980. 0C64 EC26 CALL 0x424C, 0
  7981. 0C66 F021 NOP
  7982. 0C68 52E5 MOVF POSTDEC1, F, ACCESS
  7983. 319: putchar('s');
  7984. 0C6A 0E73 MOVLW 0x73
  7985. 0C6C 6EE6 MOVWF POSTINC1, ACCESS
  7986. 0C6E EC26 CALL 0x424C, 0
  7987. 0C70 F021 NOP
  7988. 0C72 52E5 MOVF POSTDEC1, F, ACCESS
  7989. 320: putchar('c');
  7990. 0C74 0E63 MOVLW 0x63
  7991. 0C76 6EE6 MOVWF POSTINC1, ACCESS
  7992. 0C78 EC26 CALL 0x424C, 0
  7993. 0C7A F021 NOP
  7994. 0C7C 52E5 MOVF POSTDEC1, F, ACCESS
  7995. 321: putchar(HI_CHAR(AckChild));
  7996. 0C7E 0101 MOVLB 0x1
  7997. 0C80 39F9 SWAPF 0xF9, W, BANKED
  7998. 0C82 0B0F ANDLW 0xF
  7999. 0C84 6E14 MOVWF __tmp_0, ACCESS
  8000. 0C86 0E0A MOVLW 0xA
  8001. 0C88 5C14 SUBWF __tmp_0, W, ACCESS
  8002. 0C8A E205 BC 0xC96
  8003. 0C8C 0101 MOVLB 0x1
  8004. 0C8E 39F9 SWAPF 0xF9, W, BANKED
  8005. 0C90 0B0F ANDLW 0xF
  8006. 0C92 0F30 ADDLW 0x30
  8007. 0C94 D005 BRA 0xCA0
  8008. 0C96 0101 MOVLB 0x1
  8009. 0C98 39F9 SWAPF 0xF9, W, BANKED
  8010. 0C9A 0B0F ANDLW 0xF
  8011. 0C9C 0FF6 ADDLW 0xF6
  8012. 0C9E 0F41 ADDLW 0x41
  8013. 0CA0 6EE6 MOVWF POSTINC1, ACCESS
  8014. 0CA2 EC26 CALL 0x424C, 0
  8015. 0CA4 F021 NOP
  8016. 0CA6 52E5 MOVF POSTDEC1, F, ACCESS
  8017. 322: putchar(LO_CHAR(AckChild));
  8018. 0CA8 0E0F MOVLW 0xF
  8019. 0CAA 0101 MOVLB 0x1
  8020. 0CAC 15F9 ANDWF 0xF9, W, BANKED
  8021. 0CAE 6E14 MOVWF __tmp_0, ACCESS
  8022. 0CB0 0E0A MOVLW 0xA
  8023. 0CB2 5C14 SUBWF __tmp_0, W, ACCESS
  8024. 0CB4 E205 BC 0xCC0
  8025. 0CB6 0E0F MOVLW 0xF
  8026. 0CB8 0101 MOVLB 0x1
  8027. 0CBA 15F9 ANDWF 0xF9, W, BANKED
  8028. 0CBC 0F30 ADDLW 0x30
  8029. 0CBE D005 BRA 0xCCA
  8030. 0CC0 0E0F MOVLW 0xF
  8031. 0CC2 0101 MOVLB 0x1
  8032. 0CC4 15F9 ANDWF 0xF9, W, BANKED
  8033. 0CC6 0FF6 ADDLW 0xF6
  8034. 0CC8 0F41 ADDLW 0x41
  8035. 0CCA 6EE6 MOVWF POSTINC1, ACCESS
  8036. 0CCC EC26 CALL 0x424C, 0
  8037. 0CCE F021 NOP
  8038. 0CD0 52E5 MOVF POSTDEC1, F, ACCESS
  8039. 323: putchar('\n');
  8040. 0CD2 0E0A MOVLW 0xA
  8041. 0CD4 6EE6 MOVWF POSTINC1, ACCESS
  8042. 0CD6 EC26 CALL 0x424C, 0
  8043. 0CD8 F021 NOP
  8044. 0CDA 52E5 MOVF POSTDEC1, F, ACCESS
  8045. 324: }
  8046. 325: break;
  8047. 0CDC D0BD BRA 0xE58
  8048. 326: case fmessCHKSUM : // print "sxdd"
  8049. 327: putchar('\n');
  8050. 0CDE 0E0A MOVLW 0xA
  8051. 0CE0 6EE6 MOVWF POSTINC1, ACCESS
  8052. 0CE2 EC26 CALL 0x424C, 0
  8053. 0CE4 F021 NOP
  8054. 0CE6 52E5 MOVF POSTDEC1, F, ACCESS
  8055. 328: putchar('s');
  8056. 0CE8 0E73 MOVLW 0x73
  8057. 0CEA 6EE6 MOVWF POSTINC1, ACCESS
  8058. 0CEC EC26 CALL 0x424C, 0
  8059. 0CEE F021 NOP
  8060. 0CF0 52E5 MOVF POSTDEC1, F, ACCESS
  8061. 329: putchar('x');
  8062. 0CF2 0E78 MOVLW 0x78
  8063. 0CF4 6EE6 MOVWF POSTINC1, ACCESS
  8064. 0CF6 EC26 CALL 0x424C, 0
  8065. 0CF8 F021 NOP
  8066. 0CFA 52E5 MOVF POSTDEC1, F, ACCESS
  8067. 330: putchar(HI_CHAR(AckChild));
  8068. 0CFC 0101 MOVLB 0x1
  8069. 0CFE 39F9 SWAPF 0xF9, W, BANKED
  8070. 0D00 0B0F ANDLW 0xF
  8071. 0D02 6E14 MOVWF __tmp_0, ACCESS
  8072. 0D04 0E0A MOVLW 0xA
  8073. 0D06 5C14 SUBWF __tmp_0, W, ACCESS
  8074. 0D08 E205 BC 0xD14
  8075. 0D0A 0101 MOVLB 0x1
  8076. 0D0C 39F9 SWAPF 0xF9, W, BANKED
  8077. 0D0E 0B0F ANDLW 0xF
  8078. 0D10 0F30 ADDLW 0x30
  8079. 0D12 D005 BRA 0xD1E
  8080. 0D14 0101 MOVLB 0x1
  8081. 0D16 39F9 SWAPF 0xF9, W, BANKED
  8082. 0D18 0B0F ANDLW 0xF
  8083. 0D1A 0FF6 ADDLW 0xF6
  8084. 0D1C 0F41 ADDLW 0x41
  8085. 0D1E 6EE6 MOVWF POSTINC1, ACCESS
  8086. 0D20 EC26 CALL 0x424C, 0
  8087. 0D22 F021 NOP
  8088. 0D24 52E5 MOVF POSTDEC1, F, ACCESS
  8089. 331: putchar(LO_CHAR(AckChild));
  8090. 0D26 0E0F MOVLW 0xF
  8091. 0D28 0101 MOVLB 0x1
  8092. 0D2A 15F9 ANDWF 0xF9, W, BANKED
  8093. 0D2C 6E14 MOVWF __tmp_0, ACCESS
  8094. 0D2E 0E0A MOVLW 0xA
  8095. 0D30 5C14 SUBWF __tmp_0, W, ACCESS
  8096. 0D32 E205 BC 0xD3E
  8097. 0D34 0E0F MOVLW 0xF
  8098. 0D36 0101 MOVLB 0x1
  8099. 0D38 15F9 ANDWF 0xF9, W, BANKED
  8100. 0D3A 0F30 ADDLW 0x30
  8101. 0D3C D005 BRA 0xD48
  8102. 0D3E 0E0F MOVLW 0xF
  8103. 0D40 0101 MOVLB 0x1
  8104. 0D42 15F9 ANDWF 0xF9, W, BANKED
  8105. 0D44 0FF6 ADDLW 0xF6
  8106. 0D46 0F41 ADDLW 0x41
  8107. 0D48 6EE6 MOVWF POSTINC1, ACCESS
  8108. 0D4A EC26 CALL 0x424C, 0
  8109. 0D4C F021 NOP
  8110. 0D4E 52E5 MOVF POSTDEC1, F, ACCESS
  8111. 332: putchar('\n');
  8112. 0D50 0E0A MOVLW 0xA
  8113. 0D52 6EE6 MOVWF POSTINC1, ACCESS
  8114. 0D54 EC26 CALL 0x424C, 0
  8115. 0D56 F021 NOP
  8116. 0D58 52E5 MOVF POSTDEC1, F, ACCESS
  8117. 333: break;
  8118. 0D5A D07E BRA 0xE58
  8119. 334: case fmessNACK :// print "sndd"
  8120. 335: putchar('\n');
  8121. 0D5C 0E0A MOVLW 0xA
  8122. 0D5E 6EE6 MOVWF POSTINC1, ACCESS
  8123. 0D60 EC26 CALL 0x424C, 0
  8124. 0D62 F021 NOP
  8125. 0D64 52E5 MOVF POSTDEC1, F, ACCESS
  8126. 336: putchar('s');
  8127. 0D66 0E73 MOVLW 0x73
  8128. 0D68 6EE6 MOVWF POSTINC1, ACCESS
  8129. 0D6A EC26 CALL 0x424C, 0
  8130. 0D6C F021 NOP
  8131. 0D6E 52E5 MOVF POSTDEC1, F, ACCESS
  8132. 337: putchar('a');
  8133. 0D70 0E61 MOVLW 0x61
  8134. 0D72 6EE6 MOVWF POSTINC1, ACCESS
  8135. 0D74 EC26 CALL 0x424C, 0
  8136. 0D76 F021 NOP
  8137. 0D78 52E5 MOVF POSTDEC1, F, ACCESS
  8138. 338: putchar(HI_CHAR(AckChild));
  8139. 0D7A 0101 MOVLB 0x1
  8140. 0D7C 39F9 SWAPF 0xF9, W, BANKED
  8141. 0D7E 0B0F ANDLW 0xF
  8142. 0D80 6E14 MOVWF __tmp_0, ACCESS
  8143. 0D82 0E0A MOVLW 0xA
  8144. 0D84 5C14 SUBWF __tmp_0, W, ACCESS
  8145. 0D86 E205 BC 0xD92
  8146. 0D88 0101 MOVLB 0x1
  8147. 0D8A 39F9 SWAPF 0xF9, W, BANKED
  8148. 0D8C 0B0F ANDLW 0xF
  8149. 0D8E 0F30 ADDLW 0x30
  8150. 0D90 D005 BRA 0xD9C
  8151. 0D92 0101 MOVLB 0x1
  8152. 0D94 39F9 SWAPF 0xF9, W, BANKED
  8153. 0D96 0B0F ANDLW 0xF
  8154. 0D98 0FF6 ADDLW 0xF6
  8155. 0D9A 0F41 ADDLW 0x41
  8156. 0D9C 6EE6 MOVWF POSTINC1, ACCESS
  8157. 0D9E EC26 CALL 0x424C, 0
  8158. 0DA0 F021 NOP
  8159. 0DA2 52E5 MOVF POSTDEC1, F, ACCESS
  8160. 339: putchar(LO_CHAR(AckChild));
  8161. 0DA4 0E0F MOVLW 0xF
  8162. 0DA6 0101 MOVLB 0x1
  8163. 0DA8 15F9 ANDWF 0xF9, W, BANKED
  8164. 0DAA 6E14 MOVWF __tmp_0, ACCESS
  8165. 0DAC 0E0A MOVLW 0xA
  8166. 0DAE 5C14 SUBWF __tmp_0, W, ACCESS
  8167. 0DB0 E205 BC 0xDBC
  8168. 0DB2 0E0F MOVLW 0xF
  8169. 0DB4 0101 MOVLB 0x1
  8170. 0DB6 15F9 ANDWF 0xF9, W, BANKED
  8171. 0DB8 0F30 ADDLW 0x30
  8172. 0DBA D005 BRA 0xDC6
  8173. 0DBC 0E0F MOVLW 0xF
  8174. 0DBE 0101 MOVLB 0x1
  8175. 0DC0 15F9 ANDWF 0xF9, W, BANKED
  8176. 0DC2 0FF6 ADDLW 0xF6
  8177. 0DC4 0F41 ADDLW 0x41
  8178. 0DC6 6EE6 MOVWF POSTINC1, ACCESS
  8179. 0DC8 EC26 CALL 0x424C, 0
  8180. 0DCA F021 NOP
  8181. 0DCC 52E5 MOVF POSTDEC1, F, ACCESS
  8182. 340: putchar('\n');
  8183. 0DCE 0E0A MOVLW 0xA
  8184. 0DD0 6EE6 MOVWF POSTINC1, ACCESS
  8185. 0DD2 EC26 CALL 0x424C, 0
  8186. 0DD4 F021 NOP
  8187. 0DD6 52E5 MOVF POSTDEC1, F, ACCESS
  8188. 341: break;
  8189. 0DD8 D03F BRA 0xE58
  8190. 342: case fmessTOUT :// print "sTdd"
  8191. 343: putchar('\n');
  8192. 0DDA 0E0A MOVLW 0xA
  8193. 0DDC 6EE6 MOVWF POSTINC1, ACCESS
  8194. 0DDE EC26 CALL 0x424C, 0
  8195. 0DE0 F021 NOP
  8196. 0DE2 52E5 MOVF POSTDEC1, F, ACCESS
  8197. 344: putchar('s');
  8198. 0DE4 0E73 MOVLW 0x73
  8199. 0DE6 6EE6 MOVWF POSTINC1, ACCESS
  8200. 0DE8 EC26 CALL 0x424C, 0
  8201. 0DEA F021 NOP
  8202. 0DEC 52E5 MOVF POSTDEC1, F, ACCESS
  8203. 345: putchar('T');
  8204. 0DEE 0E54 MOVLW 0x54
  8205. 0DF0 6EE6 MOVWF POSTINC1, ACCESS
  8206. 0DF2 EC26 CALL 0x424C, 0
  8207. 0DF4 F021 NOP
  8208. 0DF6 52E5 MOVF POSTDEC1, F, ACCESS
  8209. 346: putchar(HI_CHAR(AckChild));
  8210. 0DF8 0101 MOVLB 0x1
  8211. 0DFA 39F9 SWAPF 0xF9, W, BANKED
  8212. 0DFC 0B0F ANDLW 0xF
  8213. 0DFE 6E14 MOVWF __tmp_0, ACCESS
  8214. 0E00 0E0A MOVLW 0xA
  8215. 0E02 5C14 SUBWF __tmp_0, W, ACCESS
  8216. 0E04 E205 BC 0xE10
  8217. 0E06 0101 MOVLB 0x1
  8218. 0E08 39F9 SWAPF 0xF9, W, BANKED
  8219. 0E0A 0B0F ANDLW 0xF
  8220. 0E0C 0F30 ADDLW 0x30
  8221. 0E0E D005 BRA 0xE1A
  8222. 0E10 0101 MOVLB 0x1
  8223. 0E12 39F9 SWAPF 0xF9, W, BANKED
  8224. 0E14 0B0F ANDLW 0xF
  8225. 0E16 0FF6 ADDLW 0xF6
  8226. 0E18 0F41 ADDLW 0x41
  8227. 0E1A 6EE6 MOVWF POSTINC1, ACCESS
  8228. 0E1C EC26 CALL 0x424C, 0
  8229. 0E1E F021 NOP
  8230. 0E20 52E5 MOVF POSTDEC1, F, ACCESS
  8231. 347: putchar(LO_CHAR(AckChild));
  8232. 0E22 0E0F MOVLW 0xF
  8233. 0E24 0101 MOVLB 0x1
  8234. 0E26 15F9 ANDWF 0xF9, W, BANKED
  8235. 0E28 6E14 MOVWF __tmp_0, ACCESS
  8236. 0E2A 0E0A MOVLW 0xA
  8237. 0E2C 5C14 SUBWF __tmp_0, W, ACCESS
  8238. 0E2E E205 BC 0xE3A
  8239. 0E30 0E0F MOVLW 0xF
  8240. 0E32 0101 MOVLB 0x1
  8241. 0E34 15F9 ANDWF 0xF9, W, BANKED
  8242. 0E36 0F30 ADDLW 0x30
  8243. 0E38 D005 BRA 0xE44
  8244. 0E3A 0E0F MOVLW 0xF
  8245. 0E3C 0101 MOVLB 0x1
  8246. 0E3E 15F9 ANDWF 0xF9, W, BANKED
  8247. 0E40 0FF6 ADDLW 0xF6
  8248. 0E42 0F41 ADDLW 0x41
  8249. 0E44 6EE6 MOVWF POSTINC1, ACCESS
  8250. 0E46 EC26 CALL 0x424C, 0
  8251. 0E48 F021 NOP
  8252. 0E4A 52E5 MOVF POSTDEC1, F, ACCESS
  8253. 348: putchar('\n');
  8254. 0E4C 0E0A MOVLW 0xA
  8255. 0E4E 6EE6 MOVWF POSTINC1, ACCESS
  8256. 0E50 EC26 CALL 0x424C, 0
  8257. 0E52 F021 NOP
  8258. 0E54 52E5 MOVF POSTDEC1, F, ACCESS
  8259. 349: break;
  8260. 0E56 D000 BRA 0xE58
  8261. 350: }
  8262. 351: FraiseMessage=fmessNONE;
  8263. 0E58 0101 MOVLB 0x1
  8264. 0E5A 6BD5 CLRF CDC_Inbdp, BANKED
  8265. 352: }
  8266. 0E5C 0012 RETURN 0
  8267. 353:
  8268. 354: /*-----------------------------------------------------------------------------------*/
  8269. 355: /* Analyse packet from usb, build a packet to send to fraise if applicable. */
  8270. 356: /*-----------------------------------------------------------------------------------*/
  8271. 357:
  8272. 358: #define FrTXPacketInit(b) { FrTXpacket_i=1 ; FrTXchksum=FrTXpacket[0]=(b);}
  8273. 359: #define FrTXPacketData(b) { FrTXchksum+=FrTXpacket[FrTXpacket_i]=(b);FrTXpacket_i++;}
  8274. 360: #define FrTXPacketClose() { FrTXpacket[FrTXpacket_i]=-(char)FrTXchksum; FrTXpacket_len=FrTXpacket_i+1; }
  8275. 361:
  8276. 362: #define FrTXPacketLaunch() \
  8277. 363: { \
  8278. 364: Serial_Init_Driver(); \
  8279. 365: TXSTAbits.TX9D=1; \
  8280. 366: TXREG=AckChild=FrTXpacket[0]; \
  8281. 367: TXSTAbits.TX9D=0; \
  8282. 368: FrTXpacket_i=1; \
  8283. 369: FraiseState=fOUT; \
  8284. 370: PIE1bits.TXIE=1; \
  8285. 371: }
  8286. 372:
  8287. 373: #define FrTXPacketLaunchBl() \
  8288. 374: { \
  8289. 375: Serial_Init_Driver(); \
  8290. 376: TXREG=FrTXpacket[0]; \
  8291. 377: FrTXpacket_i=1; \
  8292. 378: FraiseState=fBLOUT; \
  8293. 379: PIE1bits.TXIE=1; \
  8294. 380: }
  8295. 381:
  8296. 382:
  8297. 383: void FrGetLineFromUsb(void)
  8298. 0E5E CFD9 MOVFF FSR2L, POSTINC1
  8299. 0E60 FFE6 NOP
  8300. 0E62 CFE1 MOVFF FSR1L, FSR2L
  8301. 0E64 FFD9 NOP
  8302. 0E66 0E05 MOVLW 0x5
  8303. 0E68 26E1 ADDWF FSR1L, F, ACCESS
  8304. 384: {
  8305. 385: #define GETNEXTCHAR() LineFromUsb[i++]
  8306. 386: #define PEEKNEXTCHAR() LineFromUsb[i]
  8307. 387: #define SKIPNEXTCHAR() i++
  8308. 388: #define LINE_HAS_CHAR() (i<LineFromUsbLen)
  8309. 389:
  8310. 390: unsigned char len,c,c2,n;//,txout_end;
  8311. 391: unsigned char i;
  8312. 392:
  8313. 393: if(!FrGotLineFromUsb) goto discard;
  8314. 0E6A 0101 MOVLB 0x1
  8315. 0E6C 5141 MOVF 0x41, W, BANKED
  8316. 0E6E E102 BNZ 0xE74
  8317. 0E70 EF64 GOTO 0x18C8
  8318. 0E72 F00C NOP
  8319. 394:
  8320. 395: //printf((const far rom char*)"FrGetLineFromUsb()\n");
  8321. 396: //while(TXSTAbits.TRMT==0); //wait end of serial transmit
  8322. 397:
  8323. 398: FraiseStatus.TX_NEEDACK=0;
  8324. 0E74 0101 MOVLB 0x1
  8325. 0E76 97CB BCF cdc_In_len, 3, BANKED
  8326. 399: FraiseStatus.TXCHAR=0;
  8327. 0E78 0101 MOVLB 0x1
  8328. 0E7A 95CB BCF cdc_In_len, 2, BANKED
  8329. 400:
  8330. 401: len=LineFromUsbLen;
  8331. 0E7C C140 MOVFF LineFromUsbLen, INDF2
  8332. 0E7E FFDF NOP
  8333. 402: i=0;
  8334. 0E80 0E04 MOVLW 0x4
  8335. 0E82 6ADB CLRF PLUSW2, ACCESS
  8336. 403:
  8337. 404: c=GETNEXTCHAR(); //1st byte = command (or hi nibble of address)
  8338. 0E84 0E04 MOVLW 0x4
  8339. 0E86 CFDB MOVFF PLUSW2, PRODL
  8340. 0E88 FFF3 NOP
  8341. 0E8A 2ADB INCF PLUSW2, F, ACCESS
  8342. 0E8C 50F3 MOVF PRODL, W, ACCESS
  8343. 0E8E 6AEA CLRF FSR0H, ACCESS
  8344. 0E90 0F00 ADDLW 0x0
  8345. 0E92 6EE9 MOVWF FSR0L, ACCESS
  8346. 0E94 0E01 MOVLW 0x1
  8347. 0E96 22EA ADDWFC FSR0H, F, ACCESS
  8348. 0E98 0E01 MOVLW 0x1
  8349. 0E9A CFEF MOVFF INDF0, PLUSW2
  8350. 0E9C FFDB NOP
  8351. 405:
  8352. 406: //printf((const far rom char*)"parsing ; 1st char : %c\n",c);
  8353. 407: if(c=='#') {
  8354. 0E9E 0E01 MOVLW 0x1
  8355. 0EA0 50DB MOVF PLUSW2, W, ACCESS
  8356. 0EA2 0823 SUBLW 0x23
  8357. 0EA4 E001 BZ 0xEA8
  8358. 0EA6 D303 BRA 0x14AE
  8359. 408: //printf((const far rom char*)"system command...\n");
  8360. 409: //****************** system command , begining by '#': **********************
  8361. 410: if(len<2) goto discard;
  8362. 0EA8 0E02 MOVLW 0x2
  8363. 0EAA 5CDF SUBWF INDF2, W, ACCESS
  8364. 0EAC E202 BC 0xEB2
  8365. 0EAE EF64 GOTO 0x18C8
  8366. 0EB0 F00C NOP
  8367. 411: c=GETNEXTCHAR(); //what is the command ?
  8368. 0EB2 0E04 MOVLW 0x4
  8369. 0EB4 CFDB MOVFF PLUSW2, PRODL
  8370. 0EB6 FFF3 NOP
  8371. 0EB8 2ADB INCF PLUSW2, F, ACCESS
  8372. 0EBA 50F3 MOVF PRODL, W, ACCESS
  8373. 0EBC 6AEA CLRF FSR0H, ACCESS
  8374. 0EBE 0F00 ADDLW 0x0
  8375. 0EC0 6EE9 MOVWF FSR0L, ACCESS
  8376. 0EC2 0E01 MOVLW 0x1
  8377. 0EC4 22EA ADDWFC FSR0H, F, ACCESS
  8378. 0EC6 0E01 MOVLW 0x1
  8379. 0EC8 CFEF MOVFF INDF0, PLUSW2
  8380. 0ECA FFDB NOP
  8381. 412: //printf((const far rom char*)"2nd char : %c\n",c);
  8382. 413: if(c=='S'){ // start device pulling
  8383. 0ECC 0E01 MOVLW 0x1
  8384. 0ECE 50DB MOVF PLUSW2, W, ACCESS
  8385. 0ED0 0853 SUBLW 0x53
  8386. 0ED2 E001 BZ 0xED6
  8387. 0ED4 D0B1 BRA 0x1038
  8388. 414: if(len!=4) goto discard; //incorrect packet...
  8389. 0ED6 0E04 MOVLW 0x4
  8390. 0ED8 5CDF SUBWF INDF2, W, ACCESS
  8391. 0EDA E002 BZ 0xEE0
  8392. 0EDC EF64 GOTO 0x18C8
  8393. 0EDE F00C NOP
  8394. 415: c=GETNEXTCHAR();
  8395. 0EE0 0E04 MOVLW 0x4
  8396. 0EE2 CFDB MOVFF PLUSW2, PRODL
  8397. 0EE4 FFF3 NOP
  8398. 0EE6 2ADB INCF PLUSW2, F, ACCESS
  8399. 0EE8 50F3 MOVF PRODL, W, ACCESS
  8400. 0EEA 6AEA CLRF FSR0H, ACCESS
  8401. 0EEC 0F00 ADDLW 0x0
  8402. 0EEE 6EE9 MOVWF FSR0L, ACCESS
  8403. 0EF0 0E01 MOVLW 0x1
  8404. 0EF2 22EA ADDWFC FSR0H, F, ACCESS
  8405. 0EF4 0E01 MOVLW 0x1
  8406. 0EF6 CFEF MOVFF INDF0, PLUSW2
  8407. 0EF8 FFDB NOP
  8408. 416: c-='0';if (c>9) c-='A'-'9'-1;
  8409. 0EFA 0E30 MOVLW 0x30
  8410. 0EFC 6E14 MOVWF __tmp_0, ACCESS
  8411. 0EFE 0E01 MOVLW 0x1
  8412. 0F00 CFDB MOVFF PLUSW2, INDF1
  8413. 0F02 FFE7 NOP
  8414. 0F04 5014 MOVF __tmp_0, W, ACCESS
  8415. 0F06 5EE7 SUBWF INDF1, F, ACCESS
  8416. 0F08 0E01 MOVLW 0x1
  8417. 0F0A CFE7 MOVFF INDF1, PLUSW2
  8418. 0F0C FFDB NOP
  8419. 0F0E 0E01 MOVLW 0x1
  8420. 0F10 50DB MOVF PLUSW2, W, ACCESS
  8421. 0F12 0809 SUBLW 0x9
  8422. 0F14 E20A BC 0xF2A
  8423. 0F16 0E07 MOVLW 0x7
  8424. 0F18 6E14 MOVWF __tmp_0, ACCESS
  8425. 0F1A 0E01 MOVLW 0x1
  8426. 0F1C CFDB MOVFF PLUSW2, INDF1
  8427. 0F1E FFE7 NOP
  8428. 0F20 5014 MOVF __tmp_0, W, ACCESS
  8429. 0F22 5EE7 SUBWF INDF1, F, ACCESS
  8430. 0F24 0E01 MOVLW 0x1
  8431. 0F26 CFE7 MOVFF INDF1, PLUSW2
  8432. 0F28 FFDB NOP
  8433. 417: c2=GETNEXTCHAR();
  8434. 0F2A 0E04 MOVLW 0x4
  8435. 0F2C CFDB MOVFF PLUSW2, PRODL
  8436. 0F2E FFF3 NOP
  8437. 0F30 2ADB INCF PLUSW2, F, ACCESS
  8438. 0F32 50F3 MOVF PRODL, W, ACCESS
  8439. 0F34 6AEA CLRF FSR0H, ACCESS
  8440. 0F36 0F00 ADDLW 0x0
  8441. 0F38 6EE9 MOVWF FSR0L, ACCESS
  8442. 0F3A 0E01 MOVLW 0x1
  8443. 0F3C 22EA ADDWFC FSR0H, F, ACCESS
  8444. 0F3E 0E02 MOVLW 0x2
  8445. 0F40 CFEF MOVFF INDF0, PLUSW2
  8446. 0F42 FFDB NOP
  8447. 418: c2-='0';if (c2>9) c2-='A'-'9'-1;
  8448. 0F44 0E30 MOVLW 0x30
  8449. 0F46 6E14 MOVWF __tmp_0, ACCESS
  8450. 0F48 0E02 MOVLW 0x2
  8451. 0F4A CFDB MOVFF PLUSW2, INDF1
  8452. 0F4C FFE7 NOP
  8453. 0F4E 5014 MOVF __tmp_0, W, ACCESS
  8454. 0F50 5EE7 SUBWF INDF1, F, ACCESS
  8455. 0F52 0E02 MOVLW 0x2
  8456. 0F54 CFE7 MOVFF INDF1, PLUSW2
  8457. 0F56 FFDB NOP
  8458. 0F58 0E02 MOVLW 0x2
  8459. 0F5A 50DB MOVF PLUSW2, W, ACCESS
  8460. 0F5C 0809 SUBLW 0x9
  8461. 0F5E E20A BC 0xF74
  8462. 0F60 0E07 MOVLW 0x7
  8463. 0F62 6E14 MOVWF __tmp_0, ACCESS
  8464. 0F64 0E02 MOVLW 0x2
  8465. 0F66 CFDB MOVFF PLUSW2, INDF1
  8466. 0F68 FFE7 NOP
  8467. 0F6A 5014 MOVF __tmp_0, W, ACCESS
  8468. 0F6C 5EE7 SUBWF INDF1, F, ACCESS
  8469. 0F6E 0E02 MOVLW 0x2
  8470. 0F70 CFE7 MOVFF INDF1, PLUSW2
  8471. 0F72 FFDB NOP
  8472. 419: if((c>15)||(c2>15)) goto discard; //invalid packet
  8473. 0F74 0E01 MOVLW 0x1
  8474. 0F76 50DB MOVF PLUSW2, W, ACCESS
  8475. 0F78 080F SUBLW 0xF
  8476. 0F7A E304 BNC 0xF84
  8477. 0F7C 0E02 MOVLW 0x2
  8478. 0F7E 50DB MOVF PLUSW2, W, ACCESS
  8479. 0F80 080F SUBLW 0xF
  8480. 0F82 E202 BC 0xF88
  8481. 0F84 EF64 GOTO 0x18C8
  8482. 0F86 F00C NOP
  8483. 420: n=c2+(c<<4);
  8484. 0F88 0E02 MOVLW 0x2
  8485. 0F8A CFDB MOVFF PLUSW2, POSTINC1
  8486. 0F8C FFE6 NOP
  8487. 0F8E 0E01 MOVLW 0x1
  8488. 0F90 38DB SWAPF PLUSW2, W, ACCESS
  8489. 0F92 0BF0 ANDLW 0xF0
  8490. 0F94 52E5 MOVF POSTDEC1, F, ACCESS
  8491. 0F96 24E7 ADDWF INDF1, W, ACCESS
  8492. 0F98 6EE7 MOVWF INDF1, ACCESS
  8493. 0F9A 0E03 MOVLW 0x3
  8494. 0F9C CFE7 MOVFF INDF1, PLUSW2
  8495. 0F9E FFDB NOP
  8496. 421: if((n>0)&&(n<128)) {
  8497. 0FA0 0E03 MOVLW 0x3
  8498. 0FA2 50DB MOVF PLUSW2, W, ACCESS
  8499. 0FA4 0800 SUBLW 0x0
  8500. 0FA6 E245 BC 0x1032
  8501. 0FA8 0E03 MOVLW 0x3
  8502. 0FAA 50DB MOVF PLUSW2, W, ACCESS
  8503. 0FAC 6E14 MOVWF __tmp_0, ACCESS
  8504. 0FAE 6A15 CLRF digit_cnt, ACCESS
  8505. 0FB0 90D8 BCF STATUS, 0, ACCESS
  8506. 0FB2 5015 MOVF digit_cnt, W, ACCESS
  8507. 0FB4 E604 BN 0xFBE
  8508. 0FB6 0E80 MOVLW 0x80
  8509. 0FB8 5C14 SUBWF __tmp_0, W, ACCESS
  8510. 0FBA 0E00 MOVLW 0x0
  8511. 0FBC 5815 SUBWFB digit_cnt, W, ACCESS
  8512. 0FBE E239 BC 0x1032
  8513. 422: SET_CHILD(n);
  8514. 0FC0 0E03 MOVLW 0x3
  8515. 0FC2 50DB MOVF PLUSW2, W, ACCESS
  8516. 0FC4 0B07 ANDLW 0x7
  8517. 0FC6 6E15 MOVWF digit_cnt, ACCESS
  8518. 0FC8 0E01 MOVLW 0x1
  8519. 0FCA 5215 MOVF digit_cnt, F, ACCESS
  8520. 0FCC E004 BZ 0xFD6
  8521. 0FCE 46E8 RLNCF WREG, F, ACCESS
  8522. 0FD0 0BFE ANDLW 0xFE
  8523. 0FD2 0615 DECF digit_cnt, F, ACCESS
  8524. 0FD4 E1FC BNZ 0xFCE
  8525. 0FD6 6E14 MOVWF __tmp_0, ACCESS
  8526. 0FD8 0E03 MOVLW 0x3
  8527. 0FDA 40DB RRNCF PLUSW2, W, ACCESS
  8528. 0FDC 40E8 RRNCF WREG, W, ACCESS
  8529. 0FDE 40E8 RRNCF WREG, W, ACCESS
  8530. 0FE0 0B1F ANDLW 0x1F
  8531. 0FE2 6AEA CLRF FSR0H, ACCESS
  8532. 0FE4 0FD9 ADDLW 0xD9
  8533. 0FE6 6EE9 MOVWF FSR0L, ACCESS
  8534. 0FE8 0E01 MOVLW 0x1
  8535. 0FEA 22EA ADDWFC FSR0H, F, ACCESS
  8536. 0FEC 5014 MOVF __tmp_0, W, ACCESS
  8537. 0FEE 12EF IORWF INDF0, F, ACCESS
  8538. 423: CLR_CHILDOK(n);
  8539. 0FF0 0E03 MOVLW 0x3
  8540. 0FF2 50DB MOVF PLUSW2, W, ACCESS
  8541. 0FF4 0B07 ANDLW 0x7
  8542. 0FF6 6E15 MOVWF digit_cnt, ACCESS
  8543. 0FF8 0E01 MOVLW 0x1
  8544. 0FFA 5215 MOVF digit_cnt, F, ACCESS
  8545. 0FFC E004 BZ 0x1006
  8546. 0FFE 46E8 RLNCF WREG, F, ACCESS
  8547. 1000 0BFE ANDLW 0xFE
  8548. 1002 0615 DECF digit_cnt, F, ACCESS
  8549. 1004 E1FC BNZ 0xFFE
  8550. 1006 1CE8 COMF WREG, W, ACCESS
  8551. 1008 6E14 MOVWF __tmp_0, ACCESS
  8552. 100A 0E03 MOVLW 0x3
  8553. 100C 40DB RRNCF PLUSW2, W, ACCESS
  8554. 100E 40E8 RRNCF WREG, W, ACCESS
  8555. 1010 40E8 RRNCF WREG, W, ACCESS
  8556. 1012 0B1F ANDLW 0x1F
  8557. 1014 6AEA CLRF FSR0H, ACCESS
  8558. 1016 0FE9 ADDLW 0xE9
  8559. 1018 6EE9 MOVWF FSR0L, ACCESS
  8560. 101A 0E01 MOVLW 0x1
  8561. 101C 22EA ADDWFC FSR0H, F, ACCESS
  8562. 101E 5014 MOVF __tmp_0, W, ACCESS
  8563. 1020 16EF ANDWF INDF0, F, ACCESS
  8564. 424: if(MaxPolledChild<n) MaxPolledChild=n;
  8565. 1022 0E03 MOVLW 0x3
  8566. 1024 50DB MOVF PLUSW2, W, ACCESS
  8567. 1026 0101 MOVLB 0x1
  8568. 1028 5DD8 SUBWF cdc_trf_state, W, BANKED
  8569. 102A E203 BC 0x1032
  8570. 102C 0E03 MOVLW 0x3
  8571. 102E CFDB MOVFF PLUSW2, MaxPolledChild
  8572. 1030 F1D8 NOP
  8573. 425: }
  8574. 426: goto discard;
  8575. 1032 EF64 GOTO 0x18C8
  8576. 1034 F00C NOP
  8577. 427: }
  8578. 428: else if(c=='C'){ // stop device pulling
  8579. 1036 D239 BRA 0x14AA
  8580. 1038 0E01 MOVLW 0x1
  8581. 103A 50DB MOVF PLUSW2, W, ACCESS
  8582. 103C 0843 SUBLW 0x43
  8583. 103E E001 BZ 0x1042
  8584. 1040 D0A8 BRA 0x1192
  8585. 429: if(len!=4) goto discard; //incorrect packet...
  8586. 1042 0E04 MOVLW 0x4
  8587. 1044 5CDF SUBWF INDF2, W, ACCESS
  8588. 1046 E002 BZ 0x104C
  8589. 1048 EF64 GOTO 0x18C8
  8590. 104A F00C NOP
  8591. 430: c=GETNEXTCHAR();
  8592. 104C 0E04 MOVLW 0x4
  8593. 104E CFDB MOVFF PLUSW2, PRODL
  8594. 1050 FFF3 NOP
  8595. 1052 2ADB INCF PLUSW2, F, ACCESS
  8596. 1054 50F3 MOVF PRODL, W, ACCESS
  8597. 1056 6AEA CLRF FSR0H, ACCESS
  8598. 1058 0F00 ADDLW 0x0
  8599. 105A 6EE9 MOVWF FSR0L, ACCESS
  8600. 105C 0E01 MOVLW 0x1
  8601. 105E 22EA ADDWFC FSR0H, F, ACCESS
  8602. 1060 0E01 MOVLW 0x1
  8603. 1062 CFEF MOVFF INDF0, PLUSW2
  8604. 1064 FFDB NOP
  8605. 431: c-='0';if (c>9) c-='A'-'9'-1;
  8606. 1066 0E30 MOVLW 0x30
  8607. 1068 6E14 MOVWF __tmp_0, ACCESS
  8608. 106A 0E01 MOVLW 0x1
  8609. 106C CFDB MOVFF PLUSW2, INDF1
  8610. 106E FFE7 NOP
  8611. 1070 5014 MOVF __tmp_0, W, ACCESS
  8612. 1072 5EE7 SUBWF INDF1, F, ACCESS
  8613. 1074 0E01 MOVLW 0x1
  8614. 1076 CFE7 MOVFF INDF1, PLUSW2
  8615. 1078 FFDB NOP
  8616. 107A 0E01 MOVLW 0x1
  8617. 107C 50DB MOVF PLUSW2, W, ACCESS
  8618. 107E 0809 SUBLW 0x9
  8619. 1080 E20A BC 0x1096
  8620. 1082 0E07 MOVLW 0x7
  8621. 1084 6E14 MOVWF __tmp_0, ACCESS
  8622. 1086 0E01 MOVLW 0x1
  8623. 1088 CFDB MOVFF PLUSW2, INDF1
  8624. 108A FFE7 NOP
  8625. 108C 5014 MOVF __tmp_0, W, ACCESS
  8626. 108E 5EE7 SUBWF INDF1, F, ACCESS
  8627. 1090 0E01 MOVLW 0x1
  8628. 1092 CFE7 MOVFF INDF1, PLUSW2
  8629. 1094 FFDB NOP
  8630. 432: c2=GETNEXTCHAR();
  8631. 1096 0E04 MOVLW 0x4
  8632. 1098 CFDB MOVFF PLUSW2, PRODL
  8633. 109A FFF3 NOP
  8634. 109C 2ADB INCF PLUSW2, F, ACCESS
  8635. 109E 50F3 MOVF PRODL, W, ACCESS
  8636. 10A0 6AEA CLRF FSR0H, ACCESS
  8637. 10A2 0F00 ADDLW 0x0
  8638. 10A4 6EE9 MOVWF FSR0L, ACCESS
  8639. 10A6 0E01 MOVLW 0x1
  8640. 10A8 22EA ADDWFC FSR0H, F, ACCESS
  8641. 10AA 0E02 MOVLW 0x2
  8642. 10AC CFEF MOVFF INDF0, PLUSW2
  8643. 10AE FFDB NOP
  8644. 433: c2-='0';if (c2>9) c2-='A'-'9'-1;
  8645. 10B0 0E30 MOVLW 0x30
  8646. 10B2 6E14 MOVWF __tmp_0, ACCESS
  8647. 10B4 0E02 MOVLW 0x2
  8648. 10B6 CFDB MOVFF PLUSW2, INDF1
  8649. 10B8 FFE7 NOP
  8650. 10BA 5014 MOVF __tmp_0, W, ACCESS
  8651. 10BC 5EE7 SUBWF INDF1, F, ACCESS
  8652. 10BE 0E02 MOVLW 0x2
  8653. 10C0 CFE7 MOVFF INDF1, PLUSW2
  8654. 10C2 FFDB NOP
  8655. 10C4 0E02 MOVLW 0x2
  8656. 10C6 50DB MOVF PLUSW2, W, ACCESS
  8657. 10C8 0809 SUBLW 0x9
  8658. 10CA E20A BC 0x10E0
  8659. 10CC 0E07 MOVLW 0x7
  8660. 10CE 6E14 MOVWF __tmp_0, ACCESS
  8661. 10D0 0E02 MOVLW 0x2
  8662. 10D2 CFDB MOVFF PLUSW2, INDF1
  8663. 10D4 FFE7 NOP
  8664. 10D6 5014 MOVF __tmp_0, W, ACCESS
  8665. 10D8 5EE7 SUBWF INDF1, F, ACCESS
  8666. 10DA 0E02 MOVLW 0x2
  8667. 10DC CFE7 MOVFF INDF1, PLUSW2
  8668. 10DE FFDB NOP
  8669. 434: if((c>15)||(c2>15)) goto discard; //invalid packet
  8670. 10E0 0E01 MOVLW 0x1
  8671. 10E2 50DB MOVF PLUSW2, W, ACCESS
  8672. 10E4 080F SUBLW 0xF
  8673. 10E6 E304 BNC 0x10F0
  8674. 10E8 0E02 MOVLW 0x2
  8675. 10EA 50DB MOVF PLUSW2, W, ACCESS
  8676. 10EC 080F SUBLW 0xF
  8677. 10EE E201 BC 0x10F2
  8678. 10F0 D3EB BRA 0x18C8
  8679. 435: n=c2+(c<<4);
  8680. 10F2 0E02 MOVLW 0x2
  8681. 10F4 CFDB MOVFF PLUSW2, POSTINC1
  8682. 10F6 FFE6 NOP
  8683. 10F8 0E01 MOVLW 0x1
  8684. 10FA 38DB SWAPF PLUSW2, W, ACCESS
  8685. 10FC 0BF0 ANDLW 0xF0
  8686. 10FE 52E5 MOVF POSTDEC1, F, ACCESS
  8687. 1100 24E7 ADDWF INDF1, W, ACCESS
  8688. 1102 6EE7 MOVWF INDF1, ACCESS
  8689. 1104 0E03 MOVLW 0x3
  8690. 1106 CFE7 MOVFF INDF1, PLUSW2
  8691. 1108 FFDB NOP
  8692. 436: if((n>0)&&(n<128)) {
  8693. 110A 0E03 MOVLW 0x3
  8694. 110C 50DB MOVF PLUSW2, W, ACCESS
  8695. 110E 0800 SUBLW 0x0
  8696. 1110 E23E BC 0x118E
  8697. 1112 0E03 MOVLW 0x3
  8698. 1114 50DB MOVF PLUSW2, W, ACCESS
  8699. 1116 6E14 MOVWF __tmp_0, ACCESS
  8700. 1118 6A15 CLRF digit_cnt, ACCESS
  8701. 111A 90D8 BCF STATUS, 0, ACCESS
  8702. 111C 5015 MOVF digit_cnt, W, ACCESS
  8703. 111E E604 BN 0x1128
  8704. 1120 0E80 MOVLW 0x80
  8705. 1122 5C14 SUBWF __tmp_0, W, ACCESS
  8706. 1124 0E00 MOVLW 0x0
  8707. 1126 5815 SUBWFB digit_cnt, W, ACCESS
  8708. 1128 E232 BC 0x118E
  8709. 437: CLR_CHILDOK(n);
  8710. 112A 0E03 MOVLW 0x3
  8711. 112C 50DB MOVF PLUSW2, W, ACCESS
  8712. 112E 0B07 ANDLW 0x7
  8713. 1130 6E15 MOVWF digit_cnt, ACCESS
  8714. 1132 0E01 MOVLW 0x1
  8715. 1134 5215 MOVF digit_cnt, F, ACCESS
  8716. 1136 E004 BZ 0x1140
  8717. 1138 46E8 RLNCF WREG, F, ACCESS
  8718. 113A 0BFE ANDLW 0xFE
  8719. 113C 0615 DECF digit_cnt, F, ACCESS
  8720. 113E E1FC BNZ 0x1138
  8721. 1140 1CE8 COMF WREG, W, ACCESS
  8722. 1142 6E14 MOVWF __tmp_0, ACCESS
  8723. 1144 0E03 MOVLW 0x3
  8724. 1146 40DB RRNCF PLUSW2, W, ACCESS
  8725. 1148 40E8 RRNCF WREG, W, ACCESS
  8726. 114A 40E8 RRNCF WREG, W, ACCESS
  8727. 114C 0B1F ANDLW 0x1F
  8728. 114E 6AEA CLRF FSR0H, ACCESS
  8729. 1150 0FE9 ADDLW 0xE9
  8730. 1152 6EE9 MOVWF FSR0L, ACCESS
  8731. 1154 0E01 MOVLW 0x1
  8732. 1156 22EA ADDWFC FSR0H, F, ACCESS
  8733. 1158 5014 MOVF __tmp_0, W, ACCESS
  8734. 115A 16EF ANDWF INDF0, F, ACCESS
  8735. 438: CLR_CHILD(n);
  8736. 115C 0E03 MOVLW 0x3
  8737. 115E 50DB MOVF PLUSW2, W, ACCESS
  8738. 1160 0B07 ANDLW 0x7
  8739. 1162 6E15 MOVWF digit_cnt, ACCESS
  8740. 1164 0E01 MOVLW 0x1
  8741. 1166 5215 MOVF digit_cnt, F, ACCESS
  8742. 1168 E004 BZ 0x1172
  8743. 116A 46E8 RLNCF WREG, F, ACCESS
  8744. 116C 0BFE ANDLW 0xFE
  8745. 116E 0615 DECF digit_cnt, F, ACCESS
  8746. 1170 E1FC BNZ 0x116A
  8747. 1172 1CE8 COMF WREG, W, ACCESS
  8748. 1174 6E14 MOVWF __tmp_0, ACCESS
  8749. 1176 0E03 MOVLW 0x3
  8750. 1178 40DB RRNCF PLUSW2, W, ACCESS
  8751. 117A 40E8 RRNCF WREG, W, ACCESS
  8752. 117C 40E8 RRNCF WREG, W, ACCESS
  8753. 117E 0B1F ANDLW 0x1F
  8754. 1180 6AEA CLRF FSR0H, ACCESS
  8755. 1182 0FD9 ADDLW 0xD9
  8756. 1184 6EE9 MOVWF FSR0L, ACCESS
  8757. 1186 0E01 MOVLW 0x1
  8758. 1188 22EA ADDWFC FSR0H, F, ACCESS
  8759. 118A 5014 MOVF __tmp_0, W, ACCESS
  8760. 118C 16EF ANDWF INDF0, F, ACCESS
  8761. 439: }
  8762. 440: goto discard;
  8763. 118E D39C BRA 0x18C8
  8764. 441: }
  8765. 442: else if(c=='i'){
  8766. 1190 D18C BRA 0x14AA
  8767. 1192 0E01 MOVLW 0x1
  8768. 1194 50DB MOVF PLUSW2, W, ACCESS
  8769. 1196 0869 SUBLW 0x69
  8770. 1198 E114 BNZ 0x11C2
  8771. 443: printf((STRING)"s fraise init...\n");
  8772. 119A 0E9F MOVLW 0x9F
  8773. 119C 6E14 MOVWF __tmp_0, ACCESS
  8774. 119E 0E46 MOVLW 0x46
  8775. 11A0 6E15 MOVWF digit_cnt, ACCESS
  8776. 11A2 6A16 CLRF prefix_cnt, ACCESS
  8777. 11A4 C014 MOVFF __tmp_0, POSTINC1
  8778. 11A6 FFE6 NOP
  8779. 11A8 C015 MOVFF digit_cnt, POSTINC1
  8780. 11AA FFE6 NOP
  8781. 11AC C016 MOVFF prefix_cnt, POSTINC1
  8782. 11AE FFE6 NOP
  8783. 11B0 EC63 CALL 0x48C6, 0
  8784. 11B2 F024 NOP
  8785. 11B4 52E5 MOVF POSTDEC1, F, ACCESS
  8786. 11B6 52E5 MOVF POSTDEC1, F, ACCESS
  8787. 11B8 52E5 MOVF POSTDEC1, F, ACCESS
  8788. 444: FraiseInit();
  8789. 11BA EC34 CALL 0x868, 0
  8790. 11BC F004 NOP
  8791. 445: goto discard;
  8792. 11BE D384 BRA 0x18C8
  8793. 446: }
  8794. 447: else if(c=='L'){ //get log
  8795. 11C0 D174 BRA 0x14AA
  8796. 11C2 0E01 MOVLW 0x1
  8797. 11C4 50DB MOVF PLUSW2, W, ACCESS
  8798. 11C6 084C SUBLW 0x4C
  8799. 11C8 E001 BZ 0x11CC
  8800. 11CA D0A2 BRA 0x1310
  8801. 448: printf((STRING)"\ns fraise log :\n");
  8802. 11CC 0E8E MOVLW 0x8E
  8803. 11CE 6E14 MOVWF __tmp_0, ACCESS
  8804. 11D0 0E46 MOVLW 0x46
  8805. 11D2 6E15 MOVWF digit_cnt, ACCESS
  8806. 11D4 6A16 CLRF prefix_cnt, ACCESS
  8807. 11D6 C014 MOVFF __tmp_0, POSTINC1
  8808. 11D8 FFE6 NOP
  8809. 11DA C015 MOVFF digit_cnt, POSTINC1
  8810. 11DC FFE6 NOP
  8811. 11DE C016 MOVFF prefix_cnt, POSTINC1
  8812. 11E0 FFE6 NOP
  8813. 11E2 EC63 CALL 0x48C6, 0
  8814. 11E4 F024 NOP
  8815. 11E6 52E5 MOVF POSTDEC1, F, ACCESS
  8816. 11E8 52E5 MOVF POSTDEC1, F, ACCESS
  8817. 11EA 52E5 MOVF POSTDEC1, F, ACCESS
  8818. 449: c2=0;
  8819. 11EC 0E02 MOVLW 0x2
  8820. 11EE 6ADB CLRF PLUSW2, ACCESS
  8821. 450: printf((STRING)"FraiseState : %d ; FraiseStatus: %d\n",FraiseState,FraiseStatus);
  8822. 11F0 C1CB MOVFF FraiseStatus, POSTINC1
  8823. 11F2 FFE6 NOP
  8824. 11F4 C1D4 MOVFF FraiseState, __tmp_0
  8825. 11F6 F014 NOP
  8826. 11F8 6A15 CLRF digit_cnt, ACCESS
  8827. 11FA BE14 BTFSC __tmp_0, 7, ACCESS
  8828. 11FC 6815 SETF digit_cnt, ACCESS
  8829. 11FE C014 MOVFF __tmp_0, POSTINC1
  8830. 1200 FFE6 NOP
  8831. 1202 C015 MOVFF digit_cnt, POSTINC1
  8832. 1204 FFE6 NOP
  8833. 1206 0E69 MOVLW 0x69
  8834. 1208 6E16 MOVWF prefix_cnt, ACCESS
  8835. 120A 0E46 MOVLW 0x46
  8836. 120C 6E17 MOVWF sign_char, ACCESS
  8837. 120E 6A18 CLRF buf, ACCESS
  8838. 1210 C016 MOVFF prefix_cnt, POSTINC1
  8839. 1212 FFE6 NOP
  8840. 1214 C017 MOVFF sign_char, POSTINC1
  8841. 1216 FFE6 NOP
  8842. 1218 C018 MOVFF buf, POSTINC1
  8843. 121A FFE6 NOP
  8844. 121C EC63 CALL 0x48C6, 0
  8845. 121E F024 NOP
  8846. 1220 6E19 MOVWF 0x19, ACCESS
  8847. 1222 0E06 MOVLW 0x6
  8848. 1224 5EE1 SUBWF FSR1L, F, ACCESS
  8849. 1226 5019 MOVF 0x19, W, ACCESS
  8850. 451: for(n=1;n<=MaxPolledChild;n++){
  8851. 1228 0E01 MOVLW 0x1
  8852. 122A 6EF3 MOVWF PRODL, ACCESS
  8853. 122C 0E03 MOVLW 0x3
  8854. 122E CFF3 MOVFF PRODL, PLUSW2
  8855. 1230 FFDB NOP
  8856. 1232 0E03 MOVLW 0x3
  8857. 1234 CFDB MOVFF PLUSW2, __tmp_0
  8858. 1236 F014 NOP
  8859. 1238 0101 MOVLB 0x1
  8860. 123A 51D8 MOVF cdc_trf_state, W, BANKED
  8861. 123C 80D8 BSF STATUS, 0, ACCESS
  8862. 123E 5414 SUBFWB __tmp_0, W, ACCESS
  8863. 1240 E360 BNC 0x1302
  8864. 12FC 0E03 MOVLW 0x3
  8865. 12FE 2ADB INCF PLUSW2, F, ACCESS
  8866. 1300 D798 BRA 0x1232
  8867. 452: if (TST_CHILD(n)){
  8868. 1242 0E03 MOVLW 0x3
  8869. 1244 50DB MOVF PLUSW2, W, ACCESS
  8870. 1246 0B07 ANDLW 0x7
  8871. 1248 6E15 MOVWF digit_cnt, ACCESS
  8872. 124A 0E01 MOVLW 0x1
  8873. 124C 5215 MOVF digit_cnt, F, ACCESS
  8874. 124E E004 BZ 0x1258
  8875. 1250 46E8 RLNCF WREG, F, ACCESS
  8876. 1252 0BFE ANDLW 0xFE
  8877. 1254 0615 DECF digit_cnt, F, ACCESS
  8878. 1256 E1FC BNZ 0x1250
  8879. 1258 6E14 MOVWF __tmp_0, ACCESS
  8880. 125A 0E03 MOVLW 0x3
  8881. 125C 40DB RRNCF PLUSW2, W, ACCESS
  8882. 125E 40E8 RRNCF WREG, W, ACCESS
  8883. 1260 40E8 RRNCF WREG, W, ACCESS
  8884. 1262 0B1F ANDLW 0x1F
  8885. 1264 6AEA CLRF FSR0H, ACCESS
  8886. 1266 0FD9 ADDLW 0xD9
  8887. 1268 6EE9 MOVWF FSR0L, ACCESS
  8888. 126A 0E01 MOVLW 0x1
  8889. 126C 22EA ADDWFC FSR0H, F, ACCESS
  8890. 126E 50EF MOVF INDF0, W, ACCESS
  8891. 1270 1414 ANDWF __tmp_0, W, ACCESS
  8892. 1272 E044 BZ 0x12FC
  8893. 453: printf((STRING)"%d:%d ",n,TST_CHILDOK(n)!=0);
  8894. 1274 0E03 MOVLW 0x3
  8895. 1276 50DB MOVF PLUSW2, W, ACCESS
  8896. 1278 0B07 ANDLW 0x7
  8897. 127A 6E17 MOVWF sign_char, ACCESS
  8898. 127C 0E01 MOVLW 0x1
  8899. 127E 5217 MOVF sign_char, F, ACCESS
  8900. 1280 E004 BZ 0x128A
  8901. 1282 46E8 RLNCF WREG, F, ACCESS
  8902. 1284 0BFE ANDLW 0xFE
  8903. 1286 0617 DECF sign_char, F, ACCESS
  8904. 1288 E1FC BNZ 0x1282
  8905. 128A 6E16 MOVWF prefix_cnt, ACCESS
  8906. 128C 0E03 MOVLW 0x3
  8907. 128E 40DB RRNCF PLUSW2, W, ACCESS
  8908. 1290 40E8 RRNCF WREG, W, ACCESS
  8909. 1292 40E8 RRNCF WREG, W, ACCESS
  8910. 1294 0B1F ANDLW 0x1F
  8911. 1296 6AEA CLRF FSR0H, ACCESS
  8912. 1298 0FE9 ADDLW 0xE9
  8913. 129A 6EE9 MOVWF FSR0L, ACCESS
  8914. 129C 0E01 MOVLW 0x1
  8915. 129E 22EA ADDWFC FSR0H, F, ACCESS
  8916. 12A0 50EF MOVF INDF0, W, ACCESS
  8917. 12A2 1416 ANDWF prefix_cnt, W, ACCESS
  8918. 12A4 E102 BNZ 0x12AA
  8919. 12A6 0E00 MOVLW 0x0
  8920. 12A8 D001 BRA 0x12AC
  8921. 12AA 0E01 MOVLW 0x1
  8922. 12AC 6E14 MOVWF __tmp_0, ACCESS
  8923. 12AE 6A15 CLRF digit_cnt, ACCESS
  8924. 12B0 BE14 BTFSC __tmp_0, 7, ACCESS
  8925. 12B2 6815 SETF digit_cnt, ACCESS
  8926. 12B4 C014 MOVFF __tmp_0, POSTINC1
  8927. 12B6 FFE6 NOP
  8928. 12B8 C015 MOVFF digit_cnt, POSTINC1
  8929. 12BA FFE6 NOP
  8930. 12BC 0E03 MOVLW 0x3
  8931. 12BE CFDB MOVFF PLUSW2, POSTINC1
  8932. 12C0 FFE6 NOP
  8933. 12C2 6AE6 CLRF POSTINC1, ACCESS
  8934. 12C4 0E62 MOVLW 0x62
  8935. 12C6 6E18 MOVWF buf, ACCESS
  8936. 12C8 0E46 MOVLW 0x46
  8937. 12CA 6E19 MOVWF 0x19, ACCESS
  8938. 12CC 6A1A CLRF 0x1A, ACCESS
  8939. 12CE C018 MOVFF buf, POSTINC1
  8940. 12D0 FFE6 NOP
  8941. 12D2 C019 MOVFF 0x19, POSTINC1
  8942. 12D4 FFE6 NOP
  8943. 12D6 C01A MOVFF 0x1A, POSTINC1
  8944. 12D8 FFE6 NOP
  8945. 12DA EC63 CALL 0x48C6, 0
  8946. 12DC F024 NOP
  8947. 12DE 6E1B MOVWF 0x1B, ACCESS
  8948. 12E0 0E07 MOVLW 0x7
  8949. 12E2 5EE1 SUBWF FSR1L, F, ACCESS
  8950. 12E4 501B MOVF 0x1B, W, ACCESS
  8951. 454: if((++c2)%16==0) putchar('\n');
  8952. 12E6 0E02 MOVLW 0x2
  8953. 12E8 2ADB INCF PLUSW2, F, ACCESS
  8954. 12EA 0E02 MOVLW 0x2
  8955. 12EC 50DB MOVF PLUSW2, W, ACCESS
  8956. 12EE 0B0F ANDLW 0xF
  8957. 12F0 E105 BNZ 0x12FC
  8958. 12F2 0E0A MOVLW 0xA
  8959. 12F4 6EE6 MOVWF POSTINC1, ACCESS
  8960. 12F6 EC26 CALL 0x424C, 0
  8961. 12F8 F021 NOP
  8962. 12FA 52E5 MOVF POSTDEC1, F, ACCESS
  8963. 455: }
  8964. 456: }
  8965. 457: putchar('\n');
  8966. 1302 0E0A MOVLW 0xA
  8967. 1304 6EE6 MOVWF POSTINC1, ACCESS
  8968. 1306 EC26 CALL 0x424C, 0
  8969. 1308 F021 NOP
  8970. 130A 52E5 MOVF POSTDEC1, F, ACCESS
  8971. 458: goto discard; //return;
  8972. 130C D2DD BRA 0x18C8
  8973. 459: }
  8974. 460: else if(c=='F'){ //quit bootloader mode
  8975. 130E D0CD BRA 0x14AA
  8976. 1310 0E01 MOVLW 0x1
  8977. 1312 50DB MOVF PLUSW2, W, ACCESS
  8978. 1314 0846 SUBLW 0x46
  8979. 1316 E118 BNZ 0x1348
  8980. 461: //INTCONbits.GIEL = 0;
  8981. 462: FraiseStatus.FBLDON=0;
  8982. 1318 0101 MOVLB 0x1
  8983. 131A 99CB BCF cdc_In_len, 4, BANKED
  8984. 463: FraiseState=fIDLE;
  8985. 131C 0101 MOVLB 0x1
  8986. 131E 6BD4 CLRF 0xD4, BANKED
  8987. 464: Serial_Init_Driver();
  8988. 1320 908B BCF LATC, 0, ACCESS
  8989. 1322 9A9D BCF PIE1, 5, ACCESS
  8990. 465: printf((STRING)"Quit bootloader mode.\n");
  8991. 1324 0E4B MOVLW 0x4B
  8992. 1326 6E14 MOVWF __tmp_0, ACCESS
  8993. 1328 0E46 MOVLW 0x46
  8994. 132A 6E15 MOVWF digit_cnt, ACCESS
  8995. 132C 6A16 CLRF prefix_cnt, ACCESS
  8996. 132E C014 MOVFF __tmp_0, POSTINC1
  8997. 1330 FFE6 NOP
  8998. 1332 C015 MOVFF digit_cnt, POSTINC1
  8999. 1334 FFE6 NOP
  9000. 1336 C016 MOVFF prefix_cnt, POSTINC1
  9001. 1338 FFE6 NOP
  9002. 133A EC63 CALL 0x48C6, 0
  9003. 133C F024 NOP
  9004. 133E 52E5 MOVF POSTDEC1, F, ACCESS
  9005. 1340 52E5 MOVF POSTDEC1, F, ACCESS
  9006. 1342 52E5 MOVF POSTDEC1, F, ACCESS
  9007. 466: goto discard; //return;
  9008. 1344 D2C1 BRA 0x18C8
  9009. 467: }
  9010. 468: else if(c=='V'){ //get version string
  9011. 1346 D0B1 BRA 0x14AA
  9012. 1348 0E01 MOVLW 0x1
  9013. 134A 50DB MOVF PLUSW2, W, ACCESS
  9014. 134C 0856 SUBLW 0x56
  9015. 134E E112 BNZ 0x1374
  9016. 469: printf(VERSION_STRING);
  9017. 1350 0E18 MOVLW 0x18
  9018. 1352 6E14 MOVWF __tmp_0, ACCESS
  9019. 1354 0E46 MOVLW 0x46
  9020. 1356 6E15 MOVWF digit_cnt, ACCESS
  9021. 1358 6A16 CLRF prefix_cnt, ACCESS
  9022. 135A C014 MOVFF __tmp_0, POSTINC1
  9023. 135C FFE6 NOP
  9024. 135E C015 MOVFF digit_cnt, POSTINC1
  9025. 1360 FFE6 NOP
  9026. 1362 C016 MOVFF prefix_cnt, POSTINC1
  9027. 1364 FFE6 NOP
  9028. 1366 EC63 CALL 0x48C6, 0
  9029. 1368 F024 NOP
  9030. 136A 52E5 MOVF POSTDEC1, F, ACCESS
  9031. 136C 52E5 MOVF POSTDEC1, F, ACCESS
  9032. 136E 52E5 MOVF POSTDEC1, F, ACCESS
  9033. 470: goto discard; //return;
  9034. 1370 D2AB BRA 0x18C8
  9035. 471: }
  9036. 472: else if(c=='R') { //read id
  9037. 1372 D09B BRA 0x14AA
  9038. 1374 0E01 MOVLW 0x1
  9039. 1376 50DB MOVF PLUSW2, W, ACCESS
  9040. 1378 0852 SUBLW 0x52
  9041. 137A E101 BNZ 0x137E
  9042. 473: }
  9043. 474: else if(c=='W') { //write id
  9044. 137C D096 BRA 0x14AA
  9045. 137E 0E01 MOVLW 0x1
  9046. 1380 50DB MOVF PLUSW2, W, ACCESS
  9047. 1382 0857 SUBLW 0x57
  9048. 1384 E101 BNZ 0x1388
  9049. 475: }
  9050. 476: else if(c=='E') { //echo
  9051. 1386 D091 BRA 0x14AA
  9052. 1388 0E01 MOVLW 0x1
  9053. 138A 50DB MOVF PLUSW2, W, ACCESS
  9054. 138C 0845 SUBLW 0x45
  9055. 138E E123 BNZ 0x13D6
  9056. 477: while(LINE_HAS_CHAR()) {
  9057. 1390 0101 MOVLB 0x1
  9058. 1392 5140 MOVF 0x40, W, BANKED
  9059. 1394 6EF3 MOVWF PRODL, ACCESS
  9060. 1396 0E04 MOVLW 0x4
  9061. 1398 CFDB MOVFF PLUSW2, PRODH
  9062. 139A FFF4 NOP
  9063. 139C 50F3 MOVF PRODL, W, ACCESS
  9064. 139E 5CF4 SUBWF PRODH, W, ACCESS
  9065. 13A0 E214 BC 0x13CA
  9066. 13C8 D7E3 BRA 0x1390
  9067. 478: c=GETNEXTCHAR();
  9068. 13A2 0E04 MOVLW 0x4
  9069. 13A4 CFDB MOVFF PLUSW2, PRODL
  9070. 13A6 FFF3 NOP
  9071. 13A8 2ADB INCF PLUSW2, F, ACCESS
  9072. 13AA 50F3 MOVF PRODL, W, ACCESS
  9073. 13AC 6AEA CLRF FSR0H, ACCESS
  9074. 13AE 0F00 ADDLW 0x0
  9075. 13B0 6EE9 MOVWF FSR0L, ACCESS
  9076. 13B2 0E01 MOVLW 0x1
  9077. 13B4 22EA ADDWFC FSR0H, F, ACCESS
  9078. 13B6 0E01 MOVLW 0x1
  9079. 13B8 CFEF MOVFF INDF0, PLUSW2
  9080. 13BA FFDB NOP
  9081. 479: putchar(c);
  9082. 13BC 0E01 MOVLW 0x1
  9083. 13BE CFDB MOVFF PLUSW2, POSTINC1
  9084. 13C0 FFE6 NOP
  9085. 13C2 EC26 CALL 0x424C, 0
  9086. 13C4 F021 NOP
  9087. 13C6 52E5 MOVF POSTDEC1, F, ACCESS
  9088. 480: }
  9089. 481: putchar('\n');
  9090. 13CA 0E0A MOVLW 0xA
  9091. 13CC 6EE6 MOVWF POSTINC1, ACCESS
  9092. 13CE EC26 CALL 0x424C, 0
  9093. 13D0 F021 NOP
  9094. 13D2 52E5 MOVF POSTDEC1, F, ACCESS
  9095. 482: }
  9096. 483: else if(c=='D') { //delay between each device polling (ms)
  9097. 13D4 D06A BRA 0x14AA
  9098. 13D6 0E01 MOVLW 0x1
  9099. 13D8 50DB MOVF PLUSW2, W, ACCESS
  9100. 13DA 0844 SUBLW 0x44
  9101. 13DC E166 BNZ 0x14AA
  9102. 484: if(len!=4) goto discard; //incorrect packet...
  9103. 13DE 0E04 MOVLW 0x4
  9104. 13E0 5CDF SUBWF INDF2, W, ACCESS
  9105. 13E2 E001 BZ 0x13E6
  9106. 13E4 D271 BRA 0x18C8
  9107. 485: c=GETNEXTCHAR();
  9108. 13E6 0E04 MOVLW 0x4
  9109. 13E8 CFDB MOVFF PLUSW2, PRODL
  9110. 13EA FFF3 NOP
  9111. 13EC 2ADB INCF PLUSW2, F, ACCESS
  9112. 13EE 50F3 MOVF PRODL, W, ACCESS
  9113. 13F0 6AEA CLRF FSR0H, ACCESS
  9114. 13F2 0F00 ADDLW 0x0
  9115. 13F4 6EE9 MOVWF FSR0L, ACCESS
  9116. 13F6 0E01 MOVLW 0x1
  9117. 13F8 22EA ADDWFC FSR0H, F, ACCESS
  9118. 13FA 0E01 MOVLW 0x1
  9119. 13FC CFEF MOVFF INDF0, PLUSW2
  9120. 13FE FFDB NOP
  9121. 486: c-='0';if (c>9) c-='A'-'9'-1;
  9122. 1400 0E30 MOVLW 0x30
  9123. 1402 6E14 MOVWF __tmp_0, ACCESS
  9124. 1404 0E01 MOVLW 0x1
  9125. 1406 CFDB MOVFF PLUSW2, INDF1
  9126. 1408 FFE7 NOP
  9127. 140A 5014 MOVF __tmp_0, W, ACCESS
  9128. 140C 5EE7 SUBWF INDF1, F, ACCESS
  9129. 140E 0E01 MOVLW 0x1
  9130. 1410 CFE7 MOVFF INDF1, PLUSW2
  9131. 1412 FFDB NOP
  9132. 1414 0E01 MOVLW 0x1
  9133. 1416 50DB MOVF PLUSW2, W, ACCESS
  9134. 1418 0809 SUBLW 0x9
  9135. 141A E20A BC 0x1430
  9136. 141C 0E07 MOVLW 0x7
  9137. 141E 6E14 MOVWF __tmp_0, ACCESS
  9138. 1420 0E01 MOVLW 0x1
  9139. 1422 CFDB MOVFF PLUSW2, INDF1
  9140. 1424 FFE7 NOP
  9141. 1426 5014 MOVF __tmp_0, W, ACCESS
  9142. 1428 5EE7 SUBWF INDF1, F, ACCESS
  9143. 142A 0E01 MOVLW 0x1
  9144. 142C CFE7 MOVFF INDF1, PLUSW2
  9145. 142E FFDB NOP
  9146. 487: c2=GETNEXTCHAR();
  9147. 1430 0E04 MOVLW 0x4
  9148. 1432 CFDB MOVFF PLUSW2, PRODL
  9149. 1434 FFF3 NOP
  9150. 1436 2ADB INCF PLUSW2, F, ACCESS
  9151. 1438 50F3 MOVF PRODL, W, ACCESS
  9152. 143A 6AEA CLRF FSR0H, ACCESS
  9153. 143C 0F00 ADDLW 0x0
  9154. 143E 6EE9 MOVWF FSR0L, ACCESS
  9155. 1440 0E01 MOVLW 0x1
  9156. 1442 22EA ADDWFC FSR0H, F, ACCESS
  9157. 1444 0E02 MOVLW 0x2
  9158. 1446 CFEF MOVFF INDF0, PLUSW2
  9159. 1448 FFDB NOP
  9160. 488: c2-='0';if (c2>9) c2-='A'-'9'-1;
  9161. 144A 0E30 MOVLW 0x30
  9162. 144C 6E14 MOVWF __tmp_0, ACCESS
  9163. 144E 0E02 MOVLW 0x2
  9164. 1450 CFDB MOVFF PLUSW2, INDF1
  9165. 1452 FFE7 NOP
  9166. 1454 5014 MOVF __tmp_0, W, ACCESS
  9167. 1456 5EE7 SUBWF INDF1, F, ACCESS
  9168. 1458 0E02 MOVLW 0x2
  9169. 145A CFE7 MOVFF INDF1, PLUSW2
  9170. 145C FFDB NOP
  9171. 145E 0E02 MOVLW 0x2
  9172. 1460 50DB MOVF PLUSW2, W, ACCESS
  9173. 1462 0809 SUBLW 0x9
  9174. 1464 E20A BC 0x147A
  9175. 1466 0E07 MOVLW 0x7
  9176. 1468 6E14 MOVWF __tmp_0, ACCESS
  9177. 146A 0E02 MOVLW 0x2
  9178. 146C CFDB MOVFF PLUSW2, INDF1
  9179. 146E FFE7 NOP
  9180. 1470 5014 MOVF __tmp_0, W, ACCESS
  9181. 1472 5EE7 SUBWF INDF1, F, ACCESS
  9182. 1474 0E02 MOVLW 0x2
  9183. 1476 CFE7 MOVFF INDF1, PLUSW2
  9184. 1478 FFDB NOP
  9185. 489: if((c>15)||(c2>15)) goto discard; //invalid packet
  9186. 147A 0E01 MOVLW 0x1
  9187. 147C 50DB MOVF PLUSW2, W, ACCESS
  9188. 147E 080F SUBLW 0xF
  9189. 1480 E304 BNC 0x148A
  9190. 1482 0E02 MOVLW 0x2
  9191. 1484 50DB MOVF PLUSW2, W, ACCESS
  9192. 1486 080F SUBLW 0xF
  9193. 1488 E201 BC 0x148C
  9194. 148A D21E BRA 0x18C8
  9195. 490: n=c2+(c<<4);
  9196. 148C 0E02 MOVLW 0x2
  9197. 148E CFDB MOVFF PLUSW2, POSTINC1
  9198. 1490 FFE6 NOP
  9199. 1492 0E01 MOVLW 0x1
  9200. 1494 38DB SWAPF PLUSW2, W, ACCESS
  9201. 1496 0BF0 ANDLW 0xF0
  9202. 1498 52E5 MOVF POSTDEC1, F, ACCESS
  9203. 149A 24E7 ADDWF INDF1, W, ACCESS
  9204. 149C 6EE7 MOVWF INDF1, ACCESS
  9205. 149E 0E03 MOVLW 0x3
  9206. 14A0 CFE7 MOVFF INDF1, PLUSW2
  9207. 14A2 FFDB NOP
  9208. 491: PollDelay=n;
  9209. 14A4 0E03 MOVLW 0x3
  9210. 14A6 CFDB MOVFF PLUSW2, PollDelay
  9211. 14A8 F1C9 NOP
  9212. 492: }
  9213. 493: goto discard; //unknown system command ; discard packet.
  9214. 14AA D20E BRA 0x18C8
  9215. 494: }
  9216. 495: else if(c=='!') {
  9217. 14AC D057 BRA 0x155C
  9218. 14AE 0E01 MOVLW 0x1
  9219. 14B0 50DB MOVF PLUSW2, W, ACCESS
  9220. 14B2 0821 SUBLW 0x21
  9221. 14B4 E153 BNZ 0x155C
  9222. 496: //****************** broadcast tx , begining by '!': *****************
  9223. 497: len-=1; // discard '!' byte
  9224. 14B6 06DF DECF INDF2, F, ACCESS
  9225. 498: if(len<1) goto discard;
  9226. 14B8 0E01 MOVLW 0x1
  9227. 14BA 5CDF SUBWF INDF2, W, ACCESS
  9228. 14BC E201 BC 0x14C0
  9229. 14BE D204 BRA 0x18C8
  9230. 499: FrTXPacketInit(0);
  9231. 14C0 0101 MOVLB 0x1
  9232. 14C2 0E01 MOVLW 0x1
  9233. 14C4 6F82 MOVWF 0x82, BANKED
  9234. 14C6 0101 MOVLB 0x1
  9235. 14C8 6B42 CLRF 0x42, BANKED
  9236. 14CA C142 MOVFF FrTXpacket, FrTXchksum
  9237. 14CC F184 NOP
  9238. 500:
  9239. 501: c=PEEKNEXTCHAR(); //what is the command ?
  9240. 14CE 0E04 MOVLW 0x4
  9241. 14D0 50DB MOVF PLUSW2, W, ACCESS
  9242. 14D2 6AEA CLRF FSR0H, ACCESS
  9243. 14D4 0F00 ADDLW 0x0
  9244. 14D6 6EE9 MOVWF FSR0L, ACCESS
  9245. 14D8 0E01 MOVLW 0x1
  9246. 14DA 22EA ADDWFC FSR0H, F, ACCESS
  9247. 14DC 0E01 MOVLW 0x1
  9248. 14DE CFEF MOVFF INDF0, PLUSW2
  9249. 14E0 FFDB NOP
  9250. 502:
  9251. 503: if(c=='B'||c=='I'||c=='N'||c=='R'||c=='P'||c=='F'){
  9252. 14E2 0E01 MOVLW 0x1
  9253. 14E4 50DB MOVF PLUSW2, W, ACCESS
  9254. 14E6 0842 SUBLW 0x42
  9255. 14E8 E014 BZ 0x1512
  9256. 14EA 0E01 MOVLW 0x1
  9257. 14EC 50DB MOVF PLUSW2, W, ACCESS
  9258. 14EE 0849 SUBLW 0x49
  9259. 14F0 E010 BZ 0x1512
  9260. 14F2 0E01 MOVLW 0x1
  9261. 14F4 50DB MOVF PLUSW2, W, ACCESS
  9262. 14F6 084E SUBLW 0x4E
  9263. 14F8 E00C BZ 0x1512
  9264. 14FA 0E01 MOVLW 0x1
  9265. 14FC 50DB MOVF PLUSW2, W, ACCESS
  9266. 14FE 0852 SUBLW 0x52
  9267. 1500 E008 BZ 0x1512
  9268. 1502 0E01 MOVLW 0x1
  9269. 1504 50DB MOVF PLUSW2, W, ACCESS
  9270. 1506 0850 SUBLW 0x50
  9271. 1508 E004 BZ 0x1512
  9272. 150A 0E01 MOVLW 0x1
  9273. 150C 50DB MOVF PLUSW2, W, ACCESS
  9274. 150E 0846 SUBLW 0x46
  9275. 1510 E11C BNZ 0x154A
  9276. 504: FraiseStatus.TXCHAR=1;
  9277. 1512 0101 MOVLB 0x1
  9278. 1514 85CB BSF cdc_In_len, 2, BANKED
  9279. 505:
  9280. 506: if(c=='F') {
  9281. 1516 0E01 MOVLW 0x1
  9282. 1518 50DB MOVF PLUSW2, W, ACCESS
  9283. 151A 0846 SUBLW 0x46
  9284. 151C E113 BNZ 0x1544
  9285. 507: FraiseStatus.FBLDON=1;
  9286. 151E 0101 MOVLB 0x1
  9287. 1520 89CB BSF cdc_In_len, 4, BANKED
  9288. 508: printf((STRING)"Enter bootloader mode.\n");
  9289. 1522 0E00 MOVLW 0x0
  9290. 1524 6E14 MOVWF __tmp_0, ACCESS
  9291. 1526 0E46 MOVLW 0x46
  9292. 1528 6E15 MOVWF digit_cnt, ACCESS
  9293. 152A 6A16 CLRF prefix_cnt, ACCESS
  9294. 152C C014 MOVFF __tmp_0, POSTINC1
  9295. 152E FFE6 NOP
  9296. 1530 C015 MOVFF digit_cnt, POSTINC1
  9297. 1532 FFE6 NOP
  9298. 1534 C016 MOVFF prefix_cnt, POSTINC1
  9299. 1536 FFE6 NOP
  9300. 1538 EC63 CALL 0x48C6, 0
  9301. 153A F024 NOP
  9302. 153C 52E5 MOVF POSTDEC1, F, ACCESS
  9303. 153E 52E5 MOVF POSTDEC1, F, ACCESS
  9304. 1540 52E5 MOVF POSTDEC1, F, ACCESS
  9305. 509: }
  9306. 510: else FraiseStatus.FBLDON=0;
  9307. 1542 D002 BRA 0x1548
  9308. 1544 0101 MOVLB 0x1
  9309. 1546 99CB BCF cdc_In_len, 4, BANKED
  9310. 511:
  9311. 512: goto fill_packet;
  9312. 1548 D0DC BRA 0x1702
  9313. 513: }
  9314. 514: if(c=='b'){
  9315. 154A 0E01 MOVLW 0x1
  9316. 154C 50DB MOVF PLUSW2, W, ACCESS
  9317. 154E 0862 SUBLW 0x62
  9318. 1550 E104 BNZ 0x155A
  9319. 515: SKIPNEXTCHAR(); len-=1; // discard 'b' byte
  9320. 1552 0E04 MOVLW 0x4
  9321. 1554 2ADB INCF PLUSW2, F, ACCESS
  9322. 1556 06DF DECF INDF2, F, ACCESS
  9323. 516: goto fill_packet;
  9324. 1558 D0D4 BRA 0x1702
  9325. 517: }
  9326. 518:
  9327. 519: goto discard;
  9328. 155A D1B6 BRA 0x18C8
  9329. 520: }
  9330. 521:
  9331. 522: if(FraiseStatus.FBLDON) {
  9332. 155C 0101 MOVLB 0x1
  9333. 155E A9CB BTFSS cdc_In_len, 4, BANKED
  9334. 1560 D05C BRA 0x161A
  9335. 523: //putchar('\n');
  9336. 524: //printf((STRING)"bl tx\n");
  9337. 525: FrTXPacketInit(len+1);
  9338. 1562 0101 MOVLB 0x1
  9339. 1564 0E01 MOVLW 0x1
  9340. 1566 6F82 MOVWF 0x82, BANKED
  9341. 1568 28DF INCF INDF2, W, ACCESS
  9342. 156A 0101 MOVLB 0x1
  9343. 156C 6F42 MOVWF 0x42, BANKED
  9344. 156E 0101 MOVLB 0x1
  9345. 1570 6F84 MOVWF 0x84, BANKED
  9346. 526: FrTXPacketData(c);
  9347. 1572 0101 MOVLB 0x1
  9348. 1574 5182 MOVF 0x82, W, BANKED
  9349. 1576 6AEA CLRF FSR0H, ACCESS
  9350. 1578 0F42 ADDLW 0x42
  9351. 157A 6EE9 MOVWF FSR0L, ACCESS
  9352. 157C 0E01 MOVLW 0x1
  9353. 157E 22EA ADDWFC FSR0H, F, ACCESS
  9354. 1580 0E01 MOVLW 0x1
  9355. 1582 CFDB MOVFF PLUSW2, INDF0
  9356. 1584 FFEF NOP
  9357. 1586 50EF MOVF INDF0, W, ACCESS
  9358. 1588 0101 MOVLB 0x1
  9359. 158A 2784 ADDWF 0x84, F, BANKED
  9360. 158C 0101 MOVLB 0x1
  9361. 158E 2B82 INCF 0x82, F, BANKED
  9362. 527:
  9363. 528: while(LINE_HAS_CHAR()) FrTXPacketData(GETNEXTCHAR());
  9364. 1590 0101 MOVLB 0x1
  9365. 1592 5140 MOVF 0x40, W, BANKED
  9366. 1594 6EF3 MOVWF PRODL, ACCESS
  9367. 1596 0E04 MOVLW 0x4
  9368. 1598 CFDB MOVFF PLUSW2, PRODH
  9369. 159A FFF4 NOP
  9370. 159C 50F3 MOVF PRODL, W, ACCESS
  9371. 159E 5CF4 SUBWF PRODH, W, ACCESS
  9372. 15A0 E21B BC 0x15D8
  9373. 15A2 0E04 MOVLW 0x4
  9374. 15A4 CFDB MOVFF PLUSW2, PRODL
  9375. 15A6 FFF3 NOP
  9376. 15A8 2ADB INCF PLUSW2, F, ACCESS
  9377. 15AA 50F3 MOVF PRODL, W, ACCESS
  9378. 15AC 6AEA CLRF FSR0H, ACCESS
  9379. 15AE 0F00 ADDLW 0x0
  9380. 15B0 6EE9 MOVWF FSR0L, ACCESS
  9381. 15B2 0E01 MOVLW 0x1
  9382. 15B4 22EA ADDWFC FSR0H, F, ACCESS
  9383. 15B6 50EF MOVF INDF0, W, ACCESS
  9384. 15B8 6EE6 MOVWF POSTINC1, ACCESS
  9385. 15BA 0101 MOVLB 0x1
  9386. 15BC 5182 MOVF 0x82, W, BANKED
  9387. 15BE 6AEA CLRF FSR0H, ACCESS
  9388. 15C0 0F42 ADDLW 0x42
  9389. 15C2 6EE9 MOVWF FSR0L, ACCESS
  9390. 15C4 0E01 MOVLW 0x1
  9391. 15C6 22EA ADDWFC FSR0H, F, ACCESS
  9392. 15C8 52E5 MOVF POSTDEC1, F, ACCESS
  9393. 15CA 50E7 MOVF INDF1, W, ACCESS
  9394. 15CC 6EEF MOVWF INDF0, ACCESS
  9395. 15CE 0101 MOVLB 0x1
  9396. 15D0 2784 ADDWF 0x84, F, BANKED
  9397. 15D2 0101 MOVLB 0x1
  9398. 15D4 2B82 INCF 0x82, F, BANKED
  9399. 15D6 D7DC BRA 0x1590
  9400. 529: FrTXPacketClose();
  9401. 15D8 0EFF MOVLW 0xFF
  9402. 15DA 0101 MOVLB 0x1
  9403. 15DC 0384 MULWF 0x84, BANKED
  9404. 15DE 50F3 MOVF PRODL, W, ACCESS
  9405. 15E0 6EE6 MOVWF POSTINC1, ACCESS
  9406. 15E2 0101 MOVLB 0x1
  9407. 15E4 5182 MOVF 0x82, W, BANKED
  9408. 15E6 6AEA CLRF FSR0H, ACCESS
  9409. 15E8 0F42 ADDLW 0x42
  9410. 15EA 6EE9 MOVWF FSR0L, ACCESS
  9411. 15EC 0E01 MOVLW 0x1
  9412. 15EE 22EA ADDWFC FSR0H, F, ACCESS
  9413. 15F0 52E5 MOVF POSTDEC1, F, ACCESS
  9414. 15F2 50E7 MOVF INDF1, W, ACCESS
  9415. 15F4 6EEF MOVWF INDF0, ACCESS
  9416. 15F6 0101 MOVLB 0x1
  9417. 15F8 2982 INCF 0x82, W, BANKED
  9418. 15FA 0101 MOVLB 0x1
  9419. 15FC 6F83 MOVWF 0x83, BANKED
  9420. 530: FrTXtries=0;
  9421. 15FE 0101 MOVLB 0x1
  9422. 1600 6B85 CLRF 0x85, BANKED
  9423. 531: FrTXPacketLaunchBl();
  9424. 1602 908B BCF LATC, 0, ACCESS
  9425. 1604 9A9D BCF PIE1, 5, ACCESS
  9426. 1606 C142 MOVFF FrTXpacket, TXREG
  9427. 1608 FFAD NOP
  9428. 160A 0101 MOVLB 0x1
  9429. 160C 0E01 MOVLW 0x1
  9430. 160E 6F82 MOVWF 0x82, BANKED
  9431. 1610 0101 MOVLB 0x1
  9432. 1612 0E04 MOVLW 0x4
  9433. 1614 6FD4 MOVWF 0xD4, BANKED
  9434. 1616 889D BSF PIE1, 4, ACCESS
  9435. 532: goto discard;
  9436. 1618 D157 BRA 0x18C8
  9437. 533: }
  9438. 534: //else
  9439. 535: //****************** normal master to device tx:
  9440. 536: //the 2 first bytes must be device id + 128 if it is a char packet:
  9441. 537: if(len<3) goto discard;
  9442. 161A 0E03 MOVLW 0x3
  9443. 161C 5CDF SUBWF INDF2, W, ACCESS
  9444. 161E E201 BC 0x1622
  9445. 1620 D153 BRA 0x18C8
  9446. 538:
  9447. 539: //c=GETNEXTCHAR();
  9448. 540: c-='0';if (c>9) c-='A'-'9'-1;
  9449. 1622 0E30 MOVLW 0x30
  9450. 1624 6E14 MOVWF __tmp_0, ACCESS
  9451. 1626 0E01 MOVLW 0x1
  9452. 1628 CFDB MOVFF PLUSW2, INDF1
  9453. 162A FFE7 NOP
  9454. 162C 5014 MOVF __tmp_0, W, ACCESS
  9455. 162E 5EE7 SUBWF INDF1, F, ACCESS
  9456. 1630 0E01 MOVLW 0x1
  9457. 1632 CFE7 MOVFF INDF1, PLUSW2
  9458. 1634 FFDB NOP
  9459. 1636 0E01 MOVLW 0x1
  9460. 1638 50DB MOVF PLUSW2, W, ACCESS
  9461. 163A 0809 SUBLW 0x9
  9462. 163C E20A BC 0x1652
  9463. 163E 0E07 MOVLW 0x7
  9464. 1640 6E14 MOVWF __tmp_0, ACCESS
  9465. 1642 0E01 MOVLW 0x1
  9466. 1644 CFDB MOVFF PLUSW2, INDF1
  9467. 1646 FFE7 NOP
  9468. 1648 5014 MOVF __tmp_0, W, ACCESS
  9469. 164A 5EE7 SUBWF INDF1, F, ACCESS
  9470. 164C 0E01 MOVLW 0x1
  9471. 164E CFE7 MOVFF INDF1, PLUSW2
  9472. 1650 FFDB NOP
  9473. 541:
  9474. 542: c2=GETNEXTCHAR();
  9475. 1652 0E04 MOVLW 0x4
  9476. 1654 CFDB MOVFF PLUSW2, PRODL
  9477. 1656 FFF3 NOP
  9478. 1658 2ADB INCF PLUSW2, F, ACCESS
  9479. 165A 50F3 MOVF PRODL, W, ACCESS
  9480. 165C 6AEA CLRF FSR0H, ACCESS
  9481. 165E 0F00 ADDLW 0x0
  9482. 1660 6EE9 MOVWF FSR0L, ACCESS
  9483. 1662 0E01 MOVLW 0x1
  9484. 1664 22EA ADDWFC FSR0H, F, ACCESS
  9485. 1666 0E02 MOVLW 0x2
  9486. 1668 CFEF MOVFF INDF0, PLUSW2
  9487. 166A FFDB NOP
  9488. 543: //if (c2=='\n') return; //incomplete packet...
  9489. 544:
  9490. 545: c2-='0';if (c2>9) c2-='A'-'9'-1;
  9491. 166C 0E30 MOVLW 0x30
  9492. 166E 6E14 MOVWF __tmp_0, ACCESS
  9493. 1670 0E02 MOVLW 0x2
  9494. 1672 CFDB MOVFF PLUSW2, INDF1
  9495. 1674 FFE7 NOP
  9496. 1676 5014 MOVF __tmp_0, W, ACCESS
  9497. 1678 5EE7 SUBWF INDF1, F, ACCESS
  9498. 167A 0E02 MOVLW 0x2
  9499. 167C CFE7 MOVFF INDF1, PLUSW2
  9500. 167E FFDB NOP
  9501. 1680 0E02 MOVLW 0x2
  9502. 1682 50DB MOVF PLUSW2, W, ACCESS
  9503. 1684 0809 SUBLW 0x9
  9504. 1686 E20A BC 0x169C
  9505. 1688 0E07 MOVLW 0x7
  9506. 168A 6E14 MOVWF __tmp_0, ACCESS
  9507. 168C 0E02 MOVLW 0x2
  9508. 168E CFDB MOVFF PLUSW2, INDF1
  9509. 1690 FFE7 NOP
  9510. 1692 5014 MOVF __tmp_0, W, ACCESS
  9511. 1694 5EE7 SUBWF INDF1, F, ACCESS
  9512. 1696 0E02 MOVLW 0x2
  9513. 1698 CFE7 MOVFF INDF1, PLUSW2
  9514. 169A FFDB NOP
  9515. 546: if((c>15)||(c2>15)) goto discard; //invalid id
  9516. 169C 0E01 MOVLW 0x1
  9517. 169E 50DB MOVF PLUSW2, W, ACCESS
  9518. 16A0 080F SUBLW 0xF
  9519. 16A2 E304 BNC 0x16AC
  9520. 16A4 0E02 MOVLW 0x2
  9521. 16A6 50DB MOVF PLUSW2, W, ACCESS
  9522. 16A8 080F SUBLW 0xF
  9523. 16AA E201 BC 0x16AE
  9524. 16AC D10D BRA 0x18C8
  9525. 547: n=c2+(c<<4);
  9526. 16AE 0E02 MOVLW 0x2
  9527. 16B0 CFDB MOVFF PLUSW2, POSTINC1
  9528. 16B2 FFE6 NOP
  9529. 16B4 0E01 MOVLW 0x1
  9530. 16B6 38DB SWAPF PLUSW2, W, ACCESS
  9531. 16B8 0BF0 ANDLW 0xF0
  9532. 16BA 52E5 MOVF POSTDEC1, F, ACCESS
  9533. 16BC 24E7 ADDWF INDF1, W, ACCESS
  9534. 16BE 6EE7 MOVWF INDF1, ACCESS
  9535. 16C0 0E03 MOVLW 0x3
  9536. 16C2 CFE7 MOVFF INDF1, PLUSW2
  9537. 16C4 FFDB NOP
  9538. 548:
  9539. 549: if(n&128) FraiseStatus.TXCHAR=1;
  9540. 16C6 0E03 MOVLW 0x3
  9541. 16C8 50DB MOVF PLUSW2, W, ACCESS
  9542. 16CA 6E14 MOVWF __tmp_0, ACCESS
  9543. 16CC 6A15 CLRF digit_cnt, ACCESS
  9544. 16CE 5014 MOVF __tmp_0, W, ACCESS
  9545. 16D0 0B80 ANDLW 0x80
  9546. 16D2 E003 BZ 0x16DA
  9547. 16D4 0101 MOVLB 0x1
  9548. 16D6 85CB BSF cdc_In_len, 2, BANKED
  9549. 550: else FraiseStatus.TXCHAR=0;
  9550. 16D8 D002 BRA 0x16DE
  9551. 16DA 0101 MOVLB 0x1
  9552. 16DC 95CB BCF cdc_In_len, 2, BANKED
  9553. 551:
  9554. 552: n&=127;
  9555. 16DE 0E03 MOVLW 0x3
  9556. 16E0 9EDB BCF PLUSW2, 7, ACCESS
  9557. 553: if (n==0) goto discard;
  9558. 16E2 0E03 MOVLW 0x3
  9559. 16E4 50DB MOVF PLUSW2, W, ACCESS
  9560. 16E6 E101 BNZ 0x16EA
  9561. 16E8 D0EF BRA 0x18C8
  9562. 554: FrTXPacketInit(n);
  9563. 16EA 0101 MOVLB 0x1
  9564. 16EC 0E01 MOVLW 0x1
  9565. 16EE 6F82 MOVWF 0x82, BANKED
  9566. 16F0 0E03 MOVLW 0x3
  9567. 16F2 CFDB MOVFF PLUSW2, FrTXpacket
  9568. 16F4 F142 NOP
  9569. 16F6 C142 MOVFF FrTXpacket, FrTXchksum
  9570. 16F8 F184 NOP
  9571. 555: //printf((STRING)"tx to dev %d\n",n);
  9572. 556:
  9573. 557: len-=2; //remove the two id bytes
  9574. 16FA 0E02 MOVLW 0x2
  9575. 16FC 5EDF SUBWF INDF2, F, ACCESS
  9576. 558: FraiseStatus.TX_NEEDACK=1;
  9577. 16FE 0101 MOVLB 0x1
  9578. 1700 87CB BSF cdc_In_len, 3, BANKED
  9579. 559:
  9580. 560:
  9581. 561: fill_packet:
  9582. 562: if(FraiseStatus.TXCHAR) len|=128;
  9583. 1702 0101 MOVLB 0x1
  9584. 1704 A5CB BTFSS cdc_In_len, 2, BANKED
  9585. 1706 D002 BRA 0x170C
  9586. 1708 8EDF BSF INDF2, 7, ACCESS
  9587. 563: else len>>=1; //if not TXCHAR, data len in serial stream will be half than at text input (e.g two text bytes "00" -> one null byte )
  9588. 170A D002 BRA 0x1710
  9589. 170C 90DF BCF INDF2, 0, ACCESS
  9590. 170E 42DF RRNCF INDF2, F, ACCESS
  9591. 564: FrTXPacketData(len);
  9592. 1710 0101 MOVLB 0x1
  9593. 1712 5182 MOVF 0x82, W, BANKED
  9594. 1714 6AEA CLRF FSR0H, ACCESS
  9595. 1716 0F42 ADDLW 0x42
  9596. 1718 6EE9 MOVWF FSR0L, ACCESS
  9597. 171A 0E01 MOVLW 0x1
  9598. 171C 22EA ADDWFC FSR0H, F, ACCESS
  9599. 171E CFDF MOVFF INDF2, INDF0
  9600. 1720 FFEF NOP
  9601. 1722 50EF MOVF INDF0, W, ACCESS
  9602. 1724 0101 MOVLB 0x1
  9603. 1726 2784 ADDWF 0x84, F, BANKED
  9604. 1728 0101 MOVLB 0x1
  9605. 172A 2B82 INCF 0x82, F, BANKED
  9606. 565:
  9607. 566: if(FraiseStatus.TXCHAR) {
  9608. 172C 0101 MOVLB 0x1
  9609. 172E A5CB BTFSS cdc_In_len, 2, BANKED
  9610. 1730 D025 BRA 0x177C
  9611. 567: while(LINE_HAS_CHAR()) FrTXPacketData(GETNEXTCHAR());
  9612. 1732 0101 MOVLB 0x1
  9613. 1734 5140 MOVF 0x40, W, BANKED
  9614. 1736 6EF3 MOVWF PRODL, ACCESS
  9615. 1738 0E04 MOVLW 0x4
  9616. 173A CFDB MOVFF PLUSW2, PRODH
  9617. 173C FFF4 NOP
  9618. 173E 50F3 MOVF PRODL, W, ACCESS
  9619. 1740 5CF4 SUBWF PRODH, W, ACCESS
  9620. 1742 E21B BC 0x177A
  9621. 1744 0E04 MOVLW 0x4
  9622. 1746 CFDB MOVFF PLUSW2, PRODL
  9623. 1748 FFF3 NOP
  9624. 174A 2ADB INCF PLUSW2, F, ACCESS
  9625. 174C 50F3 MOVF PRODL, W, ACCESS
  9626. 174E 6AEA CLRF FSR0H, ACCESS
  9627. 1750 0F00 ADDLW 0x0
  9628. 1752 6EE9 MOVWF FSR0L, ACCESS
  9629. 1754 0E01 MOVLW 0x1
  9630. 1756 22EA ADDWFC FSR0H, F, ACCESS
  9631. 1758 50EF MOVF INDF0, W, ACCESS
  9632. 175A 6EE6 MOVWF POSTINC1, ACCESS
  9633. 175C 0101 MOVLB 0x1
  9634. 175E 5182 MOVF 0x82, W, BANKED
  9635. 1760 6AEA CLRF FSR0H, ACCESS
  9636. 1762 0F42 ADDLW 0x42
  9637. 1764 6EE9 MOVWF FSR0L, ACCESS
  9638. 1766 0E01 MOVLW 0x1
  9639. 1768 22EA ADDWFC FSR0H, F, ACCESS
  9640. 176A 52E5 MOVF POSTDEC1, F, ACCESS
  9641. 176C 50E7 MOVF INDF1, W, ACCESS
  9642. 176E 6EEF MOVWF INDF0, ACCESS
  9643. 1770 0101 MOVLB 0x1
  9644. 1772 2784 ADDWF 0x84, F, BANKED
  9645. 1774 0101 MOVLB 0x1
  9646. 1776 2B82 INCF 0x82, F, BANKED
  9647. 1778 D7DC BRA 0x1732
  9648. 568: }
  9649. 569: else while(LINE_HAS_CHAR()) {
  9650. 177A D082 BRA 0x1880
  9651. 177C 0101 MOVLB 0x1
  9652. 177E 5140 MOVF 0x40, W, BANKED
  9653. 1780 6EF3 MOVWF PRODL, ACCESS
  9654. 1782 0E04 MOVLW 0x4
  9655. 1784 CFDB MOVFF PLUSW2, PRODH
  9656. 1786 FFF4 NOP
  9657. 1788 50F3 MOVF PRODL, W, ACCESS
  9658. 178A 5CF4 SUBWF PRODH, W, ACCESS
  9659. 178C E301 BNC 0x1790
  9660. 178E D078 BRA 0x1880
  9661. 187E D77E BRA 0x177C
  9662. 570: c=GETNEXTCHAR();
  9663. 1790 0E04 MOVLW 0x4
  9664. 1792 CFDB MOVFF PLUSW2, PRODL
  9665. 1794 FFF3 NOP
  9666. 1796 2ADB INCF PLUSW2, F, ACCESS
  9667. 1798 50F3 MOVF PRODL, W, ACCESS
  9668. 179A 6AEA CLRF FSR0H, ACCESS
  9669. 179C 0F00 ADDLW 0x0
  9670. 179E 6EE9 MOVWF FSR0L, ACCESS
  9671. 17A0 0E01 MOVLW 0x1
  9672. 17A2 22EA ADDWFC FSR0H, F, ACCESS
  9673. 17A4 0E01 MOVLW 0x1
  9674. 17A6 CFEF MOVFF INDF0, PLUSW2
  9675. 17A8 FFDB NOP
  9676. 571: c-='0';if (c>9) c-='A'-'9'-1;
  9677. 17AA 0E30 MOVLW 0x30
  9678. 17AC 6E14 MOVWF __tmp_0, ACCESS
  9679. 17AE 0E01 MOVLW 0x1
  9680. 17B0 CFDB MOVFF PLUSW2, INDF1
  9681. 17B2 FFE7 NOP
  9682. 17B4 5014 MOVF __tmp_0, W, ACCESS
  9683. 17B6 5EE7 SUBWF INDF1, F, ACCESS
  9684. 17B8 0E01 MOVLW 0x1
  9685. 17BA CFE7 MOVFF INDF1, PLUSW2
  9686. 17BC FFDB NOP
  9687. 17BE 0E01 MOVLW 0x1
  9688. 17C0 50DB MOVF PLUSW2, W, ACCESS
  9689. 17C2 0809 SUBLW 0x9
  9690. 17C4 E20A BC 0x17DA
  9691. 17C6 0E07 MOVLW 0x7
  9692. 17C8 6E14 MOVWF __tmp_0, ACCESS
  9693. 17CA 0E01 MOVLW 0x1
  9694. 17CC CFDB MOVFF PLUSW2, INDF1
  9695. 17CE FFE7 NOP
  9696. 17D0 5014 MOVF __tmp_0, W, ACCESS
  9697. 17D2 5EE7 SUBWF INDF1, F, ACCESS
  9698. 17D4 0E01 MOVLW 0x1
  9699. 17D6 CFE7 MOVFF INDF1, PLUSW2
  9700. 17D8 FFDB NOP
  9701. 572: if(!LINE_HAS_CHAR()) goto discard; //incomplete...
  9702. 17DA 0101 MOVLB 0x1
  9703. 17DC 5140 MOVF 0x40, W, BANKED
  9704. 17DE 6EF3 MOVWF PRODL, ACCESS
  9705. 17E0 0E04 MOVLW 0x4
  9706. 17E2 CFDB MOVFF PLUSW2, PRODH
  9707. 17E4 FFF4 NOP
  9708. 17E6 50F3 MOVF PRODL, W, ACCESS
  9709. 17E8 5CF4 SUBWF PRODH, W, ACCESS
  9710. 17EA E301 BNC 0x17EE
  9711. 17EC D06D BRA 0x18C8
  9712. 573: c2=GETNEXTCHAR();
  9713. 17EE 0E04 MOVLW 0x4
  9714. 17F0 CFDB MOVFF PLUSW2, PRODL
  9715. 17F2 FFF3 NOP
  9716. 17F4 2ADB INCF PLUSW2, F, ACCESS
  9717. 17F6 50F3 MOVF PRODL, W, ACCESS
  9718. 17F8 6AEA CLRF FSR0H, ACCESS
  9719. 17FA 0F00 ADDLW 0x0
  9720. 17FC 6EE9 MOVWF FSR0L, ACCESS
  9721. 17FE 0E01 MOVLW 0x1
  9722. 1800 22EA ADDWFC FSR0H, F, ACCESS
  9723. 1802 0E02 MOVLW 0x2
  9724. 1804 CFEF MOVFF INDF0, PLUSW2
  9725. 1806 FFDB NOP
  9726. 574: c2-='0';if (c2>9) c2-='A'-'9'-1;
  9727. 1808 0E30 MOVLW 0x30
  9728. 180A 6E14 MOVWF __tmp_0, ACCESS
  9729. 180C 0E02 MOVLW 0x2
  9730. 180E CFDB MOVFF PLUSW2, INDF1
  9731. 1810 FFE7 NOP
  9732. 1812 5014 MOVF __tmp_0, W, ACCESS
  9733. 1814 5EE7 SUBWF INDF1, F, ACCESS
  9734. 1816 0E02 MOVLW 0x2
  9735. 1818 CFE7 MOVFF INDF1, PLUSW2
  9736. 181A FFDB NOP
  9737. 181C 0E02 MOVLW 0x2
  9738. 181E 50DB MOVF PLUSW2, W, ACCESS
  9739. 1820 0809 SUBLW 0x9
  9740. 1822 E20A BC 0x1838
  9741. 1824 0E07 MOVLW 0x7
  9742. 1826 6E14 MOVWF __tmp_0, ACCESS
  9743. 1828 0E02 MOVLW 0x2
  9744. 182A CFDB MOVFF PLUSW2, INDF1
  9745. 182C FFE7 NOP
  9746. 182E 5014 MOVF __tmp_0, W, ACCESS
  9747. 1830 5EE7 SUBWF INDF1, F, ACCESS
  9748. 1832 0E02 MOVLW 0x2
  9749. 1834 CFE7 MOVFF INDF1, PLUSW2
  9750. 1836 FFDB NOP
  9751. 575: if((c>15)||(c2>15)) goto discard; //invalid hex string
  9752. 1838 0E01 MOVLW 0x1
  9753. 183A 50DB MOVF PLUSW2, W, ACCESS
  9754. 183C 080F SUBLW 0xF
  9755. 183E E304 BNC 0x1848
  9756. 1840 0E02 MOVLW 0x2
  9757. 1842 50DB MOVF PLUSW2, W, ACCESS
  9758. 1844 080F SUBLW 0xF
  9759. 1846 E201 BC 0x184A
  9760. 1848 D03F BRA 0x18C8
  9761. 576: c2+=(c<<4);
  9762. 184A 0E01 MOVLW 0x1
  9763. 184C 50DB MOVF PLUSW2, W, ACCESS
  9764. 184E 0D10 MULLW 0x10
  9765. 1850 0E02 MOVLW 0x2
  9766. 1852 CFDB MOVFF PLUSW2, INDF1
  9767. 1854 FFE7 NOP
  9768. 1856 50F3 MOVF PRODL, W, ACCESS
  9769. 1858 26E7 ADDWF INDF1, F, ACCESS
  9770. 185A 0E02 MOVLW 0x2
  9771. 185C CFE7 MOVFF INDF1, PLUSW2
  9772. 185E FFDB NOP
  9773. 577: FrTXPacketData(c2);
  9774. 1860 0101 MOVLB 0x1
  9775. 1862 5182 MOVF 0x82, W, BANKED
  9776. 1864 6AEA CLRF FSR0H, ACCESS
  9777. 1866 0F42 ADDLW 0x42
  9778. 1868 6EE9 MOVWF FSR0L, ACCESS
  9779. 186A 0E01 MOVLW 0x1
  9780. 186C 22EA ADDWFC FSR0H, F, ACCESS
  9781. 186E 0E02 MOVLW 0x2
  9782. 1870 CFDB MOVFF PLUSW2, INDF0
  9783. 1872 FFEF NOP
  9784. 1874 50EF MOVF INDF0, W, ACCESS
  9785. 1876 0101 MOVLB 0x1
  9786. 1878 2784 ADDWF 0x84, F, BANKED
  9787. 187A 0101 MOVLB 0x1
  9788. 187C 2B82 INCF 0x82, F, BANKED
  9789. 578: }
  9790. 579: FrTXPacketClose();
  9791. 1880 0EFF MOVLW 0xFF
  9792. 1882 0101 MOVLB 0x1
  9793. 1884 0384 MULWF 0x84, BANKED
  9794. 1886 50F3 MOVF PRODL, W, ACCESS
  9795. 1888 6EE6 MOVWF POSTINC1, ACCESS
  9796. 188A 0101 MOVLB 0x1
  9797. 188C 5182 MOVF 0x82, W, BANKED
  9798. 188E 6AEA CLRF FSR0H, ACCESS
  9799. 1890 0F42 ADDLW 0x42
  9800. 1892 6EE9 MOVWF FSR0L, ACCESS
  9801. 1894 0E01 MOVLW 0x1
  9802. 1896 22EA ADDWFC FSR0H, F, ACCESS
  9803. 1898 52E5 MOVF POSTDEC1, F, ACCESS
  9804. 189A 50E7 MOVF INDF1, W, ACCESS
  9805. 189C 6EEF MOVWF INDF0, ACCESS
  9806. 189E 0101 MOVLB 0x1
  9807. 18A0 2982 INCF 0x82, W, BANKED
  9808. 18A2 0101 MOVLB 0x1
  9809. 18A4 6F83 MOVWF 0x83, BANKED
  9810. 580: FrTXtries=0;
  9811. 18A6 0101 MOVLB 0x1
  9812. 18A8 6B85 CLRF 0x85, BANKED
  9813. 581: FrTXPacketLaunch();
  9814. 18AA 908B BCF LATC, 0, ACCESS
  9815. 18AC 9A9D BCF PIE1, 5, ACCESS
  9816. 18AE 80AC BSF TXSTA, 0, ACCESS
  9817. 18B0 C142 MOVFF FrTXpacket, AckChild
  9818. 18B2 F1F9 NOP
  9819. 18B4 C142 MOVFF FrTXpacket, TXREG
  9820. 18B6 FFAD NOP
  9821. 18B8 90AC BCF TXSTA, 0, ACCESS
  9822. 18BA 0101 MOVLB 0x1
  9823. 18BC 0E01 MOVLW 0x1
  9824. 18BE 6F82 MOVWF 0x82, BANKED
  9825. 18C0 0101 MOVLB 0x1
  9826. 18C2 0E02 MOVLW 0x2
  9827. 18C4 6FD4 MOVWF 0xD4, BANKED
  9828. 18C6 889D BSF PIE1, 4, ACCESS
  9829. 582:
  9830. 583: discard:
  9831. 584: LineFromUsbLen=0;
  9832. 18C8 0101 MOVLB 0x1
  9833. 18CA 6B40 CLRF 0x40, BANKED
  9834. 585: FrGotLineFromUsb=0;
  9835. 18CC 0101 MOVLB 0x1
  9836. 18CE 6B41 CLRF 0x41, BANKED
  9837. 586: return;
  9838. 18D0 D000 BRA 0x18D2
  9839. 587: }
  9840. 18D2 0E05 MOVLW 0x5
  9841. 18D4 5CE1 SUBWF FSR1L, W, ACCESS
  9842. 18D6 E202 BC 0x18DC
  9843. 18D8 6AE1 CLRF FSR1L, ACCESS
  9844. 18DA 52E5 MOVF POSTDEC1, F, ACCESS
  9845. 18DC 6EE1 MOVWF FSR1L, ACCESS
  9846. 18DE 52E5 MOVF POSTDEC1, F, ACCESS
  9847. 18E0 CFE7 MOVFF INDF1, FSR2L
  9848. 18E2 FFD9 NOP
  9849. 18E4 0012 RETURN 0
  9850. 588:
  9851. 589: //------------- time constants and macros --------------------------------------
  9852. 590: //#define T_1SERBYTE (256-((40*12)/16)) // For 40us TMR2 tick , 10*4us
  9853. 591: #define T_2SERBYTES (256UL-((61UL*12UL)/16UL)) // For 80us TMR2 tick , 20*4us, 15us before
  9854. 592: #define T_1ms (256UL-((600UL*12UL/3UL)/16UL)) // postscaler=3
  9855. 593: #define InitTimer1ms() { PIE1bits.TMR2IE=0;T2CON=31;/*post=3*/TMR2=T_1ms;PIR1bits.TMR2IF=0; }
  9856. 594: #define ResetTimer1ms() { TMR2=T_1ms;PIR1bits.TMR2IF=0;}
  9857. 595: #define InitTimer(time) { PIE1bits.TMR2IE=0;T2CON=7;/*no post*/TMR2=time;PIR1bits.TMR2IF=0;PIE1bits.TMR2IE=1; }
  9858. 596: #define TimerOut() (PIR1bits.TMR2IF)
  9859. 597: #define StopTimer() {T2CON=3;PIE1bits.TMR2IE=0;/*stop tmr2*/PIR1bits.TMR2IF=0;}
  9860. 598:
  9861. 599: /*#ifndef SDCC
  9862. 600: #pragma interruptlow low_ISR
  9863. 601: #endif
  9864. 602: void low_ISR(void)
  9865. 603: #ifdef SDCC
  9866. 604: shadowregs interrupt 2
  9867. 605: #endif*/
  9868. 606:
  9869. 607: void FraiseISR()
  9870. 18E6 CFD9 MOVFF FSR2L, POSTINC1
  9871. 18E8 FFE6 NOP
  9872. 18EA CFE1 MOVFF FSR1L, FSR2L
  9873. 18EC FFD9 NOP
  9874. 18EE 52E6 MOVF POSTINC1, F, ACCESS
  9875. 608: {
  9876. 609: unsigned char c;
  9877. 610:
  9878. 611: //if(PIR1bits.RCIF) mLED_2_On();
  9879. 612:
  9880. 613: if(RCSTAbits.OERR) FraiseStatus.OERR=1;
  9881. 18F0 A2AB BTFSS RCSTA, 1, ACCESS
  9882. 18F2 D002 BRA 0x18F8
  9883. 18F4 0101 MOVLB 0x1
  9884. 18F6 8BCB BSF cdc_In_len, 5, BANKED
  9885. 614: if(RCSTAbits.FERR) FraiseStatus.FERR=1;
  9886. 18F8 A4AB BTFSS RCSTA, 2, ACCESS
  9887. 18FA D002 BRA 0x1900
  9888. 18FC 0101 MOVLB 0x1
  9889. 18FE 8DCB BSF cdc_In_len, 6, BANKED
  9890. 615:
  9891. 616: if(FraiseState==fWAITACK)
  9892. 1900 0101 MOVLB 0x1
  9893. 1902 05D4 DECF 0xD4, W, BANKED
  9894. 1904 E139 BNZ 0x1978
  9895. 617: {
  9896. 618: if (!Serial_Is_Receiver()) {
  9897. 1906 BA9D BTFSC PIE1, 5, ACCESS
  9898. 1908 D00B BRA 0x1920
  9899. 619: if (TimerOut()) {
  9900. 190A A29E BTFSS PIR1, 1, ACCESS
  9901. 190C D008 BRA 0x191E
  9902. 620: Serial_Init_Receiver();
  9903. 190E EC28 CALL 0x850, 0
  9904. 1910 F004 NOP
  9905. 621: InitTimer1ms();
  9906. 1912 929D BCF PIE1, 1, ACCESS
  9907. 1914 0E1F MOVLW 0x1F
  9908. 1916 6ECA MOVWF T2CON, ACCESS
  9909. 1918 0E6A MOVLW 0x6A
  9910. 191A 6ECC MOVWF TMR2, ACCESS
  9911. 191C 929E BCF PIR1, 1, ACCESS
  9912. 622: }
  9913. 623: return;
  9914. 191E D127 BRA 0x1B6E
  9915. 624: }
  9916. 625: if(PIR1bits.RCIF) {
  9917. 1920 AA9E BTFSS PIR1, 5, ACCESS
  9918. 1922 D028 BRA 0x1974
  9919. 626: StopTimer();
  9920. 1924 0E03 MOVLW 0x3
  9921. 1926 6ECA MOVWF T2CON, ACCESS
  9922. 1928 929D BCF PIE1, 1, ACCESS
  9923. 192A 929E BCF PIR1, 1, ACCESS
  9924. 627: c=RCREG;
  9925. 192C 50AE MOVF RCREG, W, ACCESS
  9926. 192E 6EDF MOVWF INDF2, ACCESS
  9927. 628: Serial_Init_None();
  9928. 1930 808B BSF LATC, 0, ACCESS
  9929. 1932 9A9D BCF PIE1, 5, ACCESS
  9930. 1934 989D BCF PIE1, 4, ACCESS
  9931. 629: if(c!=0) {//nACK
  9932. 1936 50DF MOVF INDF2, W, ACCESS
  9933. 1938 E01A BZ 0x196E
  9934. 630: if(++FrTXtries<3) {
  9935. 193A 0101 MOVLB 0x1
  9936. 193C 2B85 INCF 0x85, F, BANKED
  9937. 193E 0E03 MOVLW 0x3
  9938. 1940 0101 MOVLB 0x1
  9939. 1942 5D85 SUBWF 0x85, W, BANKED
  9940. 1944 E211 BC 0x1968
  9941. 631: FrTXPacketLaunch(); // resend packet maximum 3 times
  9942. 1946 908B BCF LATC, 0, ACCESS
  9943. 1948 9A9D BCF PIE1, 5, ACCESS
  9944. 194A 80AC BSF TXSTA, 0, ACCESS
  9945. 194C C142 MOVFF FrTXpacket, AckChild
  9946. 194E F1F9 NOP
  9947. 1950 C142 MOVFF FrTXpacket, TXREG
  9948. 1952 FFAD NOP
  9949. 1954 90AC BCF TXSTA, 0, ACCESS
  9950. 1956 0101 MOVLB 0x1
  9951. 1958 0E01 MOVLW 0x1
  9952. 195A 6F82 MOVWF 0x82, BANKED
  9953. 195C 0101 MOVLB 0x1
  9954. 195E 0E02 MOVLW 0x2
  9955. 1960 6FD4 MOVWF 0xD4, BANKED
  9956. 1962 889D BSF PIE1, 4, ACCESS
  9957. 632: return;
  9958. 1964 D104 BRA 0x1B6E
  9959. 633: }
  9960. 634: else {//printf("sS%c%c\n",HI_CHAR(PolledChild()),LO_CHAR(PolledChild()));
  9961. 1966 D003 BRA 0x196E
  9962. 635: FraiseMessage=fmessNACK;
  9963. 1968 0101 MOVLB 0x1
  9964. 196A 0E04 MOVLW 0x4
  9965. 196C 6FD5 MOVWF CDC_Inbdp, BANKED
  9966. 636: }
  9967. 637: }
  9968. 638: FraiseState=fIDLE;
  9969. 196E 0101 MOVLB 0x1
  9970. 1970 6BD4 CLRF 0xD4, BANKED
  9971. 639: return;
  9972. 1972 D0FD BRA 0x1B6E
  9973. 640: }
  9974. 641: return;
  9975. 1974 D0FC BRA 0x1B6E
  9976. 642: }//endif(FraiseState==fWAITACK)
  9977. 643: else if(FraiseState==fIN)
  9978. 1976 D0FB BRA 0x1B6E
  9979. 1978 0E03 MOVLW 0x3
  9980. 197A 0101 MOVLB 0x1
  9981. 197C 5DD4 SUBWF 0xD4, W, BANKED
  9982. 197E E16A BNZ 0x1A54
  9983. 644: {
  9984. 645: if (!Serial_Is_Receiver()) {
  9985. 1980 BA9D BTFSC PIE1, 5, ACCESS
  9986. 1982 D00B BRA 0x199A
  9987. 646: if (TimerOut()) {
  9988. 1984 A29E BTFSS PIR1, 1, ACCESS
  9989. 1986 D008 BRA 0x1998
  9990. 647: Serial_Init_Receiver();
  9991. 1988 EC28 CALL 0x850, 0
  9992. 198A F004 NOP
  9993. 648: InitTimer1ms();
  9994. 198C 929D BCF PIE1, 1, ACCESS
  9995. 198E 0E1F MOVLW 0x1F
  9996. 1990 6ECA MOVWF T2CON, ACCESS
  9997. 1992 0E6A MOVLW 0x6A
  9998. 1994 6ECC MOVWF TMR2, ACCESS
  9999. 1996 929E BCF PIR1, 1, ACCESS
  10000. 649: }
  10001. 650: //mLED_2_Off();
  10002. 651: return;
  10003. 1998 D0EA BRA 0x1B6E
  10004. 652: }
  10005. 653: if(PIR1bits.RCIF) {
  10006. 199A AA9E BTFSS PIR1, 5, ACCESS
  10007. 199C D059 BRA 0x1A50
  10008. 654: c=RCREG;
  10009. 199E 50AE MOVF RCREG, W, ACCESS
  10010. 19A0 6EDF MOVWF INDF2, ACCESS
  10011. 655: FrRXbuf[FrRXin]=c;
  10012. 19A2 0101 MOVLB 0x1
  10013. 19A4 51C6 MOVF 0xC6, W, BANKED
  10014. 19A6 6AEA CLRF FSR0H, ACCESS
  10015. 19A8 0F86 ADDLW 0x86
  10016. 19AA 6EE9 MOVWF FSR0L, ACCESS
  10017. 19AC 0E01 MOVLW 0x1
  10018. 19AE 22EA ADDWFC FSR0H, F, ACCESS
  10019. 19B0 CFDF MOVFF INDF2, INDF0
  10020. 19B2 FFEF NOP
  10021. 656: FrRXin++;
  10022. 19B4 0101 MOVLB 0x1
  10023. 19B6 2BC6 INCF 0xC6, F, BANKED
  10024. 657: ResetTimer1ms();
  10025. 19B8 0E6A MOVLW 0x6A
  10026. 19BA 6ECC MOVWF TMR2, ACCESS
  10027. 19BC 929E BCF PIR1, 1, ACCESS
  10028. 658: if(FrRXin==1) { //first byte
  10029. 19BE 0101 MOVLB 0x1
  10030. 19C0 05C6 DECF 0xC6, W, BANKED
  10031. 19C2 E122 BNZ 0x1A08
  10032. 659: FrRXchksum=0;
  10033. 19C4 0101 MOVLB 0x1
  10034. 19C6 6BC8 CLRF 0xC8, BANKED
  10035. 660: FrRXout=(c&63); //get length
  10036. 19C8 0E3F MOVLW 0x3F
  10037. 19CA 14DF ANDWF INDF2, W, ACCESS
  10038. 19CC 0101 MOVLB 0x1
  10039. 19CE 6FC7 MOVWF 0xC7, BANKED
  10040. 661: FrRXout++;
  10041. 19D0 0101 MOVLB 0x1
  10042. 19D2 2BC7 INCF 0xC7, F, BANKED
  10043. 662: if(c==0){ //device answered : nothing to say
  10044. 19D4 50DF MOVF INDF2, W, ACCESS
  10045. 19D6 E10D BNZ 0x19F2
  10046. 663: StopTimer();
  10047. 19D8 0E03 MOVLW 0x3
  10048. 19DA 6ECA MOVWF T2CON, ACCESS
  10049. 19DC 929D BCF PIE1, 1, ACCESS
  10050. 19DE 929E BCF PIR1, 1, ACCESS
  10051. 664: Serial_Init_None();
  10052. 19E0 808B BSF LATC, 0, ACCESS
  10053. 19E2 9A9D BCF PIE1, 5, ACCESS
  10054. 19E4 989D BCF PIE1, 4, ACCESS
  10055. 665: FraiseState=fIDLE;
  10056. 19E6 0101 MOVLB 0x1
  10057. 19E8 6BD4 CLRF 0xD4, BANKED
  10058. 666: //if(!TST_POLLEDCHILDOK()){
  10059. 667: //printf("\nsC%c%c\n",HI_CHAR(PolledChild()),LO_CHAR(PolledChild()));
  10060. 668: FraiseMessage=fmessFOUND;
  10061. 19EA 0101 MOVLB 0x1
  10062. 19EC 0E01 MOVLW 0x1
  10063. 19EE 6FD5 MOVWF CDC_Inbdp, BANKED
  10064. 669: //SET_POLLEDCHILDOK();
  10065. 670: //}
  10066. 671: } else {
  10067. 19F0 D00B BRA 0x1A08
  10068. 672: if(c&128) FraiseStatus.RXCHAR=1;
  10069. 19F2 50DF MOVF INDF2, W, ACCESS
  10070. 19F4 6E14 MOVWF __tmp_0, ACCESS
  10071. 19F6 6A15 CLRF digit_cnt, ACCESS
  10072. 19F8 5014 MOVF __tmp_0, W, ACCESS
  10073. 19FA 0B80 ANDLW 0x80
  10074. 19FC E003 BZ 0x1A04
  10075. 19FE 0101 MOVLB 0x1
  10076. 1A00 83CB BSF cdc_In_len, 1, BANKED
  10077. 673: else FraiseStatus.RXCHAR=0;
  10078. 1A02 D002 BRA 0x1A08
  10079. 1A04 0101 MOVLB 0x1
  10080. 1A06 93CB BCF cdc_In_len, 1, BANKED
  10081. 674: //printf("in len=%d ",FrRXout-1);
  10082. 675: }
  10083. 676: }
  10084. 677: //else
  10085. 678: FrRXchksum+=c;
  10086. 1A08 50DF MOVF INDF2, W, ACCESS
  10087. 1A0A 0101 MOVLB 0x1
  10088. 1A0C 27C8 ADDWF 0xC8, F, BANKED
  10089. 679:
  10090. 680: if(FrRXin>FrRXout){ //end of packet
  10091. 1A0E 0101 MOVLB 0x1
  10092. 1A10 51C7 MOVF 0xC7, W, BANKED
  10093. 1A12 0101 MOVLB 0x1
  10094. 1A14 80D8 BSF STATUS, 0, ACCESS
  10095. 1A16 55C6 SUBFWB 0xC6, W, BANKED
  10096. 1A18 E21A BC 0x1A4E
  10097. 681: StopTimer();
  10098. 1A1A 0E03 MOVLW 0x3
  10099. 1A1C 6ECA MOVWF T2CON, ACCESS
  10100. 1A1E 929D BCF PIE1, 1, ACCESS
  10101. 1A20 929E BCF PIR1, 1, ACCESS
  10102. 682: Serial_Init_None();
  10103. 1A22 808B BSF LATC, 0, ACCESS
  10104. 1A24 9A9D BCF PIE1, 5, ACCESS
  10105. 1A26 989D BCF PIE1, 4, ACCESS
  10106. 683: FraiseState=fIDLE;
  10107. 1A28 0101 MOVLB 0x1
  10108. 1A2A 6BD4 CLRF 0xD4, BANKED
  10109. 684: if(!FrRXchksum) { //checksum ok
  10110. 1A2C 0101 MOVLB 0x1
  10111. 1A2E 51C8 MOVF 0xC8, W, BANKED
  10112. 1A30 E109 BNZ 0x1A44
  10113. 685: //printf(" ok\n");
  10114. 686: FrRXin--; //discard checksum
  10115. 1A32 0101 MOVLB 0x1
  10116. 1A34 07C6 DECF 0xC6, F, BANKED
  10117. 687: FraiseStatus.RXFULL=1;
  10118. 1A36 0101 MOVLB 0x1
  10119. 1A38 81CB BSF cdc_In_len, 0, BANKED
  10120. 688: //FrRXout=0;
  10121. 689: //if(!TST_POLLEDCHILDOK()){
  10122. 690: //printf("\nsC%c%c\n",HI_CHAR(PolledChild()),LO_CHAR(PolledChild()));
  10123. 691: FraiseMessage=fmessFOUND;
  10124. 1A3A 0101 MOVLB 0x1
  10125. 1A3C 0E01 MOVLW 0x1
  10126. 1A3E 6FD5 MOVWF CDC_Inbdp, BANKED
  10127. 692: //SET_POLLEDCHILDOK();
  10128. 693: //}
  10129. 694: TXREG=0; //ACK
  10130. 1A40 6AAD CLRF TXREG, ACCESS
  10131. 695: } else {//checksum error
  10132. 1A42 D005 BRA 0x1A4E
  10133. 696: //printf("\nsRxCsErr\n");
  10134. 697: FraiseMessage=fmessCHKSUM;
  10135. 1A44 0101 MOVLB 0x1
  10136. 1A46 0E03 MOVLW 0x3
  10137. 1A48 6FD5 MOVWF CDC_Inbdp, BANKED
  10138. 698: TXREG=1; //NACK
  10139. 1A4A 0E01 MOVLW 0x1
  10140. 1A4C 6EAD MOVWF TXREG, ACCESS
  10141. 699: }
  10142. 700: }//end of if end of packet
  10143. 701: return;
  10144. 1A4E D08F BRA 0x1B6E
  10145. 702: } //endif(PIR1bits.RCIF)
  10146. 703:
  10147. 704: return;
  10148. 1A50 D08E BRA 0x1B6E
  10149. 705: }//endif (FraiseState==fIn)
  10150. 706: else if(FraiseState==fOUT) //if we are sending a packet to a child:
  10151. 1A52 D08D BRA 0x1B6E
  10152. 1A54 0E02 MOVLW 0x2
  10153. 1A56 0101 MOVLB 0x1
  10154. 1A58 5DD4 SUBWF 0xD4, W, BANKED
  10155. 1A5A E134 BNZ 0x1AC4
  10156. 707: {
  10157. 708: StopTimer();
  10158. 1A5C 0E03 MOVLW 0x3
  10159. 1A5E 6ECA MOVWF T2CON, ACCESS
  10160. 1A60 929D BCF PIE1, 1, ACCESS
  10161. 1A62 929E BCF PIR1, 1, ACCESS
  10162. 709: if(PIR1bits.TXIF==0) return;
  10163. 1A64 A89E BTFSS PIR1, 4, ACCESS
  10164. 1A66 D083 BRA 0x1B6E
  10165. 710: TXREG=FrTXpacket[FrTXpacket_i++]; // send next byte
  10166. 1A68 0101 MOVLB 0x1
  10167. 1A6A 5182 MOVF 0x82, W, BANKED
  10168. 1A6C 2B82 INCF 0x82, F, BANKED
  10169. 1A6E 6AEA CLRF FSR0H, ACCESS
  10170. 1A70 0F42 ADDLW 0x42
  10171. 1A72 6EE9 MOVWF FSR0L, ACCESS
  10172. 1A74 0E01 MOVLW 0x1
  10173. 1A76 22EA ADDWFC FSR0H, F, ACCESS
  10174. 1A78 50EF MOVF INDF0, W, ACCESS
  10175. 1A7A 6EAD MOVWF TXREG, ACCESS
  10176. 711: if(FrTXpacket_i==FrTXpacket_len) { //if end of the packet:
  10177. 1A7C 0101 MOVLB 0x1
  10178. 1A7E 5183 MOVF 0x83, W, BANKED
  10179. 1A80 0101 MOVLB 0x1
  10180. 1A82 5D82 SUBWF 0x82, W, BANKED
  10181. 1A84 E11D BNZ 0x1AC0
  10182. 712: PIE1bits.TXIE=0;
  10183. 1A86 989D BCF PIE1, 4, ACCESS
  10184. 713: if(FraiseStatus.TX_NEEDACK){
  10185. 1A88 0101 MOVLB 0x1
  10186. 1A8A A7CB BTFSS cdc_In_len, 3, BANKED
  10187. 1A8C D00B BRA 0x1AA4
  10188. 714: InitTimer(T_2SERBYTES); //2 bytes wait inside of hardware serial tx buffer
  10189. 1A8E 929D BCF PIE1, 1, ACCESS
  10190. 1A90 0E07 MOVLW 0x7
  10191. 1A92 6ECA MOVWF T2CON, ACCESS
  10192. 1A94 0ED3 MOVLW 0xD3
  10193. 1A96 6ECC MOVWF TMR2, ACCESS
  10194. 1A98 929E BCF PIR1, 1, ACCESS
  10195. 1A9A 829D BSF PIE1, 1, ACCESS
  10196. 715: //InitTMR0(TMR0_1ms);
  10197. 716: FraiseState=fWAITACK; // goto to WAITACK state.
  10198. 1A9C 0101 MOVLB 0x1
  10199. 1A9E 0E01 MOVLW 0x1
  10200. 1AA0 6FD4 MOVWF 0xD4, BANKED
  10201. 717: }
  10202. 718: else {
  10203. 1AA2 D00E BRA 0x1AC0
  10204. 719: if(FraiseStatus.FBLDON) {
  10205. 1AA4 0101 MOVLB 0x1
  10206. 1AA6 A9CB BTFSS cdc_In_len, 4, BANKED
  10207. 1AA8 D006 BRA 0x1AB6
  10208. 720: Serial_Init_Receiver();
  10209. 1AAA EC28 CALL 0x850, 0
  10210. 1AAC F004 NOP
  10211. 721: FraiseState=fBLIN;
  10212. 1AAE 0101 MOVLB 0x1
  10213. 1AB0 0E05 MOVLW 0x5
  10214. 1AB2 6FD4 MOVWF 0xD4, BANKED
  10215. 722: }
  10216. 723: else {
  10217. 1AB4 D005 BRA 0x1AC0
  10218. 724: FraiseState=fIDLE; // return to IDLE state.
  10219. 1AB6 0101 MOVLB 0x1
  10220. 1AB8 6BD4 CLRF 0xD4, BANKED
  10221. 725: Serial_Init_None();
  10222. 1ABA 808B BSF LATC, 0, ACCESS
  10223. 1ABC 9A9D BCF PIE1, 5, ACCESS
  10224. 1ABE 989D BCF PIE1, 4, ACCESS
  10225. 726: }
  10226. 727: }
  10227. 728: }
  10228. 729: return;
  10229. 1AC0 D056 BRA 0x1B6E
  10230. 730: }
  10231. 731: else if(FraiseState==fBLOUT) //if we are sending a bootloader packet :
  10232. 1AC2 D055 BRA 0x1B6E
  10233. 1AC4 0E04 MOVLW 0x4
  10234. 1AC6 0101 MOVLB 0x1
  10235. 1AC8 5DD4 SUBWF 0xD4, W, BANKED
  10236. 1ACA E126 BNZ 0x1B18
  10237. 732: {
  10238. 733: StopTimer();
  10239. 1ACC 0E03 MOVLW 0x3
  10240. 1ACE 6ECA MOVWF T2CON, ACCESS
  10241. 1AD0 929D BCF PIE1, 1, ACCESS
  10242. 1AD2 929E BCF PIR1, 1, ACCESS
  10243. 734: if(PIR1bits.TXIF==0) return;
  10244. 1AD4 A89E BTFSS PIR1, 4, ACCESS
  10245. 1AD6 D04B BRA 0x1B6E
  10246. 735: TXREG=FrTXpacket[FrTXpacket_i++]; // send next byte
  10247. 1AD8 0101 MOVLB 0x1
  10248. 1ADA 5182 MOVF 0x82, W, BANKED
  10249. 1ADC 2B82 INCF 0x82, F, BANKED
  10250. 1ADE 6AEA CLRF FSR0H, ACCESS
  10251. 1AE0 0F42 ADDLW 0x42
  10252. 1AE2 6EE9 MOVWF FSR0L, ACCESS
  10253. 1AE4 0E01 MOVLW 0x1
  10254. 1AE6 22EA ADDWFC FSR0H, F, ACCESS
  10255. 1AE8 50EF MOVF INDF0, W, ACCESS
  10256. 1AEA 6EAD MOVWF TXREG, ACCESS
  10257. 736: if(FrTXpacket_i==FrTXpacket_len) { //if end of the packet:
  10258. 1AEC 0101 MOVLB 0x1
  10259. 1AEE 5183 MOVF 0x83, W, BANKED
  10260. 1AF0 0101 MOVLB 0x1
  10261. 1AF2 5D82 SUBWF 0x82, W, BANKED
  10262. 1AF4 E10F BNZ 0x1B14
  10263. 737: PIE1bits.TXIE=0;
  10264. 1AF6 989D BCF PIE1, 4, ACCESS
  10265. 738: InitTimer(T_2SERBYTES); //2 bytes wait inside of hardware serial tx buffer
  10266. 1AF8 929D BCF PIE1, 1, ACCESS
  10267. 1AFA 0E07 MOVLW 0x7
  10268. 1AFC 6ECA MOVWF T2CON, ACCESS
  10269. 1AFE 0ED3 MOVLW 0xD3
  10270. 1B00 6ECC MOVWF TMR2, ACCESS
  10271. 1B02 929E BCF PIR1, 1, ACCESS
  10272. 1B04 829D BSF PIE1, 1, ACCESS
  10273. 739: FraiseState=fBLIN; // goto to BLIN state.
  10274. 1B06 0101 MOVLB 0x1
  10275. 1B08 0E05 MOVLW 0x5
  10276. 1B0A 6FD4 MOVWF 0xD4, BANKED
  10277. 740: FrRXin=FrRXout=0;
  10278. 1B0C 0101 MOVLB 0x1
  10279. 1B0E 6BC7 CLRF 0xC7, BANKED
  10280. 1B10 C1C7 MOVFF FrRXout, FrRXin
  10281. 1B12 F1C6 NOP
  10282. 741: }
  10283. 742: return;
  10284. 1B14 D02C BRA 0x1B6E
  10285. 743: } //endif(FraiseState==fBLOUT)
  10286. 744: else if(FraiseState==fBLIN)
  10287. 1B16 D02B BRA 0x1B6E
  10288. 1B18 0E05 MOVLW 0x5
  10289. 1B1A 0101 MOVLB 0x1
  10290. 1B1C 5DD4 SUBWF 0xD4, W, BANKED
  10291. 1B1E E11D BNZ 0x1B5A
  10292. 745: {
  10293. 746: if (!Serial_Is_Receiver()) {
  10294. 1B20 BA9D BTFSC PIE1, 5, ACCESS
  10295. 1B22 D009 BRA 0x1B36
  10296. 747: if (TimerOut()) {
  10297. 1B24 A29E BTFSS PIR1, 1, ACCESS
  10298. 1B26 D006 BRA 0x1B34
  10299. 748: Serial_Init_Receiver();
  10300. 1B28 EC28 CALL 0x850, 0
  10301. 1B2A F004 NOP
  10302. 749: StopTimer();
  10303. 1B2C 0E03 MOVLW 0x3
  10304. 1B2E 6ECA MOVWF T2CON, ACCESS
  10305. 1B30 929D BCF PIE1, 1, ACCESS
  10306. 1B32 929E BCF PIR1, 1, ACCESS
  10307. 750: }
  10308. 751: return;
  10309. 1B34 D01C BRA 0x1B6E
  10310. 752: }
  10311. 753: if(PIR1bits.RCIF) {
  10312. 1B36 AA9E BTFSS PIR1, 5, ACCESS
  10313. 1B38 D00E BRA 0x1B56
  10314. 754: //StopTimer();
  10315. 755: c=RCREG;
  10316. 1B3A 50AE MOVF RCREG, W, ACCESS
  10317. 1B3C 6EDF MOVWF INDF2, ACCESS
  10318. 756: FrRXbuf[FrRXin]=c;
  10319. 1B3E 0101 MOVLB 0x1
  10320. 1B40 51C6 MOVF 0xC6, W, BANKED
  10321. 1B42 6AEA CLRF FSR0H, ACCESS
  10322. 1B44 0F86 ADDLW 0x86
  10323. 1B46 6EE9 MOVWF FSR0L, ACCESS
  10324. 1B48 0E01 MOVLW 0x1
  10325. 1B4A 22EA ADDWFC FSR0H, F, ACCESS
  10326. 1B4C CFDF MOVFF INDF2, INDF0
  10327. 1B4E FFEF NOP
  10328. 757: FrRXin++;
  10329. 1B50 0101 MOVLB 0x1
  10330. 1B52 2BC6 INCF 0xC6, F, BANKED
  10331. 758: return;
  10332. 1B54 D00C BRA 0x1B6E
  10333. 759: }
  10334. 760: return;
  10335. 1B56 D00B BRA 0x1B6E
  10336. 761: } //endif(FraiseState==fBLIN)
  10337. 762: else if(FraiseState==fIDLE) //should't happen... clear interrupt flags:
  10338. 1B58 D00A BRA 0x1B6E
  10339. 1B5A 0101 MOVLB 0x1
  10340. 1B5C 51D4 MOVF 0xD4, W, BANKED
  10341. 1B5E E107 BNZ 0x1B6E
  10342. 763: {
  10343. 764: StopTimer();
  10344. 1B60 0E03 MOVLW 0x3
  10345. 1B62 6ECA MOVWF T2CON, ACCESS
  10346. 1B64 929D BCF PIE1, 1, ACCESS
  10347. 1B66 929E BCF PIR1, 1, ACCESS
  10348. 765: //PIE1bits.TMR2IE=0;
  10349. 766: PIE1bits.TXIE=0;
  10350. 1B68 989D BCF PIE1, 4, ACCESS
  10351. 767: PIE1bits.RCIE=0;
  10352. 1B6A 9A9D BCF PIE1, 5, ACCESS
  10353. 768: return;
  10354. 1B6C D000 BRA 0x1B6E
  10355. 769: }
  10356. 770:
  10357. 771: } //end of LowISR
  10358. 1B6E 52E5 MOVF POSTDEC1, F, ACCESS
  10359. 1B70 52E5 MOVF POSTDEC1, F, ACCESS
  10360. 1B72 CFE7 MOVFF INDF1, FSR2L
  10361. 1B74 FFD9 NOP
  10362. 1B76 0012 RETURN 0
  10363. 772:
  10364. 773: void FraiseService(void)
  10365. 774: {
  10366. 775: //unsigned char c;
  10367. 776: //static char TXNtries=0; //number of tries to send the TX packet
  10368. 777:
  10369. 778: //if(FrGotLineFromUsb&&(FraiseState==fIDLE)) FrGetLineFromUsb();
  10370. 779: //goto _fin;
  10371. 780: //FraiseState=fIDLE;
  10372. 781: /*if(fIDLE==FraiseState) {
  10373. 782: mLED_2_On();
  10374. 783: if(FrGotLineFromUsb) {
  10375. 784: FrGetLineFromUsb(); //
  10376. 785: goto _fin;
  10377. 786: }
  10378. 787: } else { mLED_2_Off(); }*/
  10379. 788:
  10380. 789: FrSendMessagetoUsb();
  10381. 1B78 EC4C CALL 0xA98, 0
  10382. 1B7A F005 NOP
  10383. 790:
  10384. 791: if(FraiseState==fBLIN) {
  10385. 1B7C 0E05 MOVLW 0x5
  10386. 1B7E 0101 MOVLB 0x1
  10387. 1B80 5DD4 SUBWF 0xD4, W, BANKED
  10388. 1B82 E119 BNZ 0x1BB6
  10389. 792: while(FrRXin!=FrRXout) putchar(FrRXbuf[FrRXout++]);
  10390. 1B84 0101 MOVLB 0x1
  10391. 1B86 51C7 MOVF 0xC7, W, BANKED
  10392. 1B88 0101 MOVLB 0x1
  10393. 1B8A 5DC6 SUBWF 0xC6, W, BANKED
  10394. 1B8C E00E BZ 0x1BAA
  10395. 1B8E 0101 MOVLB 0x1
  10396. 1B90 51C7 MOVF 0xC7, W, BANKED
  10397. 1B92 2BC7 INCF 0xC7, F, BANKED
  10398. 1B94 6AEA CLRF FSR0H, ACCESS
  10399. 1B96 0F86 ADDLW 0x86
  10400. 1B98 6EE9 MOVWF FSR0L, ACCESS
  10401. 1B9A 0E01 MOVLW 0x1
  10402. 1B9C 22EA ADDWFC FSR0H, F, ACCESS
  10403. 1B9E 50EF MOVF INDF0, W, ACCESS
  10404. 1BA0 6EE6 MOVWF POSTINC1, ACCESS
  10405. 1BA2 EC26 CALL 0x424C, 0
  10406. 1BA4 F021 NOP
  10407. 1BA6 52E5 MOVF POSTDEC1, F, ACCESS
  10408. 1BA8 D7ED BRA 0x1B84
  10409. 793: if(FrGotLineFromUsb) FrGetLineFromUsb();
  10410. 1BAA 0101 MOVLB 0x1
  10411. 1BAC 5141 MOVF 0x41, W, BANKED
  10412. 1BAE E002 BZ 0x1BB4
  10413. 1BB0 EC2F CALL 0xE5E, 0
  10414. 1BB2 F007 NOP
  10415. 794:
  10416. 795: goto _fin;
  10417. 1BB4 D0A5 BRA 0x1D00
  10418. 796: }
  10419. 797:
  10420. 798: INTCONbits.GIEH = 0;
  10421. 1BB6 9EF2 BCF INTCON, 7, ACCESS
  10422. 799:
  10423. 800: if(FraiseState==fIDLE) {
  10424. 1BB8 0101 MOVLB 0x1
  10425. 1BBA 51D4 MOVF 0xD4, W, BANKED
  10426. 1BBC E15F BNZ 0x1C7C
  10427. 801: StopTimer();
  10428. 1BBE 0E03 MOVLW 0x3
  10429. 1BC0 6ECA MOVWF T2CON, ACCESS
  10430. 1BC2 929D BCF PIE1, 1, ACCESS
  10431. 1BC4 929E BCF PIR1, 1, ACCESS
  10432. 802:
  10433. 803: if(FrGotLineFromUsb) {
  10434. 1BC6 0101 MOVLB 0x1
  10435. 1BC8 5141 MOVF 0x41, W, BANKED
  10436. 1BCA E003 BZ 0x1BD2
  10437. 804: FrGetLineFromUsb();
  10438. 1BCC EC2F CALL 0xE5E, 0
  10439. 1BCE F007 NOP
  10440. 805: goto _fin;
  10441. 1BD0 D097 BRA 0x1D00
  10442. 806: }
  10443. 807: //goto _fin;
  10444. 808: if(!FraiseStatus.RXFULL){
  10445. 1BD2 0101 MOVLB 0x1
  10446. 1BD4 B1CB BTFSC cdc_In_len, 0, BANKED
  10447. 1BD6 D051 BRA 0x1C7A
  10448. 809: if(PollCount>=PollDelay) {
  10449. 1BD8 0101 MOVLB 0x1
  10450. 1BDA 51C9 MOVF cls, W, BANKED
  10451. 1BDC 0101 MOVLB 0x1
  10452. 1BDE 5DCA SUBWF 0xCA, W, BANKED
  10453. 1BE0 E34C BNC 0x1C7A
  10454. 810: PollCount=0;
  10455. 1BE2 0101 MOVLB 0x1
  10456. 1BE4 6BCA CLRF 0xCA, BANKED
  10457. 811: //while(TXSTAbits.TRMT==0);
  10458. 812: incPolledChild();
  10459. 1BE6 0101 MOVLB 0x1
  10460. 1BE8 2BD6 INCF 0xD6, F, BANKED
  10461. 1BEA 0101 MOVLB 0x1
  10462. 1BEC 51D8 MOVF cdc_trf_state, W, BANKED
  10463. 1BEE 0101 MOVLB 0x1
  10464. 1BF0 80D8 BSF STATUS, 0, ACCESS
  10465. 1BF2 55D6 SUBFWB 0xD6, W, BANKED
  10466. 1BF4 E207 BC 0x1C04
  10467. 1BF6 0101 MOVLB 0x1
  10468. 1BF8 0E01 MOVLW 0x1
  10469. 1BFA 6FD6 MOVWF 0xD6, BANKED
  10470. 1BFC 0101 MOVLB 0x1
  10471. 1BFE 0E02 MOVLW 0x2
  10472. 1C00 6FD7 MOVWF CDCFunctionError, BANKED
  10473. 1C02 D00A BRA 0x1C18
  10474. 1C04 0101 MOVLB 0x1
  10475. 1C06 45D7 RLNCF CDCFunctionError, W, BANKED
  10476. 1C08 0B01 ANDLW 0x1
  10477. 1C0A 6E14 MOVWF __tmp_0, ACCESS
  10478. 1C0C 0101 MOVLB 0x1
  10479. 1C0E 51D7 MOVF CDCFunctionError, W, BANKED
  10480. 1C10 24E8 ADDWF WREG, W, ACCESS
  10481. 1C12 1014 IORWF __tmp_0, W, ACCESS
  10482. 1C14 0101 MOVLB 0x1
  10483. 1C16 6FD7 MOVWF CDCFunctionError, BANKED
  10484. 813: if(TST_POLLEDCHILD())
  10485. 1C18 0101 MOVLB 0x1
  10486. 1C1A 51D6 MOVF 0xD6, W, BANKED
  10487. 1C1C 40E8 RRNCF WREG, W, ACCESS
  10488. 1C1E 40E8 RRNCF WREG, W, ACCESS
  10489. 1C20 40E8 RRNCF WREG, W, ACCESS
  10490. 1C22 0B1F ANDLW 0x1F
  10491. 1C24 6AEA CLRF FSR0H, ACCESS
  10492. 1C26 0FD9 ADDLW 0xD9
  10493. 1C28 6EE9 MOVWF FSR0L, ACCESS
  10494. 1C2A 0E01 MOVLW 0x1
  10495. 1C2C 22EA ADDWFC FSR0H, F, ACCESS
  10496. 1C2E 50EF MOVF INDF0, W, ACCESS
  10497. 1C30 0101 MOVLB 0x1
  10498. 1C32 15D7 ANDWF CDCFunctionError, W, BANKED
  10499. 1C34 E022 BZ 0x1C7A
  10500. 814: {
  10501. 815: //PIE1bits.TXIE=0;
  10502. 816: FrRXchksum=FrRXin=FrRXout=0;
  10503. 1C36 0101 MOVLB 0x1
  10504. 1C38 6BC7 CLRF 0xC7, BANKED
  10505. 1C3A C1C7 MOVFF FrRXout, FrRXin
  10506. 1C3C F1C6 NOP
  10507. 1C3E C1C7 MOVFF FrRXout, FrRXchksum
  10508. 1C40 F1C8 NOP
  10509. 817: TXSTAbits.TX9D=1;
  10510. 1C42 80AC BSF TXSTA, 0, ACCESS
  10511. 818:
  10512. 819: Serial_Init_Driver();
  10513. 1C44 908B BCF LATC, 0, ACCESS
  10514. 1C46 9A9D BCF PIE1, 5, ACCESS
  10515. 820: FrSendMessagetoUsb();
  10516. 1C48 EC4C CALL 0xA98, 0
  10517. 1C4A F005 NOP
  10518. 821: INTCONbits.GIEL=0;
  10519. 1C4C 9CF2 BCF INTCON, 6, ACCESS
  10520. 822: AckChild=PolledChild();
  10521. 1C4E C1D6 MOVFF _PolledChild, AckChild
  10522. 1C50 F1F9 NOP
  10523. 823: TXREG=(PolledChild()|128);
  10524. 1C52 0E80 MOVLW 0x80
  10525. 1C54 0101 MOVLB 0x1
  10526. 1C56 11D6 IORWF 0xD6, W, BANKED
  10527. 1C58 6EAD MOVWF TXREG, ACCESS
  10528. 824: TXSTAbits.TX9D=0;
  10529. 1C5A 90AC BCF TXSTA, 0, ACCESS
  10530. 825: TXREG=(PolledChild()|128);
  10531. 1C5C 0E80 MOVLW 0x80
  10532. 1C5E 0101 MOVLB 0x1
  10533. 1C60 11D6 IORWF 0xD6, W, BANKED
  10534. 1C62 6EAD MOVWF TXREG, ACCESS
  10535. 826: InitTimer(T_2SERBYTES);
  10536. 1C64 929D BCF PIE1, 1, ACCESS
  10537. 1C66 0E07 MOVLW 0x7
  10538. 1C68 6ECA MOVWF T2CON, ACCESS
  10539. 1C6A 0ED3 MOVLW 0xD3
  10540. 1C6C 6ECC MOVWF TMR2, ACCESS
  10541. 1C6E 929E BCF PIR1, 1, ACCESS
  10542. 1C70 829D BSF PIE1, 1, ACCESS
  10543. 827: FraiseState=fIN;
  10544. 1C72 0101 MOVLB 0x1
  10545. 1C74 0E03 MOVLW 0x3
  10546. 1C76 6FD4 MOVWF 0xD4, BANKED
  10547. 828: INTCONbits.GIEL=1;
  10548. 1C78 8CF2 BSF INTCON, 6, ACCESS
  10549. 829: }
  10550. 830: }
  10551. 831: }
  10552. 832: } else if(FraiseState==fWAITACK) {
  10553. 1C7A D042 BRA 0x1D00
  10554. 1C7C 0101 MOVLB 0x1
  10555. 1C7E 05D4 DECF 0xD4, W, BANKED
  10556. 1C80 E129 BNZ 0x1CD4
  10557. 833: if((Serial_Is_Receiver()) && TimerOut() ){ //didn't rcved ACK before Timeout
  10558. 1C82 509D MOVF PIE1, W, ACCESS
  10559. 1C84 0B20 ANDLW 0x20
  10560. 1C86 E025 BZ 0x1CD2
  10561. 1C88 509E MOVF PIR1, W, ACCESS
  10562. 1C8A 0B02 ANDLW 0x2
  10563. 1C8C E022 BZ 0x1CD2
  10564. 834: StopTimer();
  10565. 1C8E 0E03 MOVLW 0x3
  10566. 1C90 6ECA MOVWF T2CON, ACCESS
  10567. 1C92 929D BCF PIE1, 1, ACCESS
  10568. 1C94 929E BCF PIR1, 1, ACCESS
  10569. 835: Serial_Init_None();
  10570. 1C96 808B BSF LATC, 0, ACCESS
  10571. 1C98 9A9D BCF PIE1, 5, ACCESS
  10572. 1C9A 989D BCF PIE1, 4, ACCESS
  10573. 836: if(++FrTXtries<3) { FrTXPacketLaunch(); }// resend packet maximum 3 times
  10574. 1C9C 0101 MOVLB 0x1
  10575. 1C9E 2B85 INCF 0x85, F, BANKED
  10576. 1CA0 0E03 MOVLW 0x3
  10577. 1CA2 0101 MOVLB 0x1
  10578. 1CA4 5D85 SUBWF 0x85, W, BANKED
  10579. 1CA6 E210 BC 0x1CC8
  10580. 1CA8 908B BCF LATC, 0, ACCESS
  10581. 1CAA 9A9D BCF PIE1, 5, ACCESS
  10582. 1CAC 80AC BSF TXSTA, 0, ACCESS
  10583. 1CAE C142 MOVFF FrTXpacket, AckChild
  10584. 1CB0 F1F9 NOP
  10585. 1CB2 C142 MOVFF FrTXpacket, TXREG
  10586. 1CB4 FFAD NOP
  10587. 1CB6 90AC BCF TXSTA, 0, ACCESS
  10588. 1CB8 0101 MOVLB 0x1
  10589. 1CBA 0E01 MOVLW 0x1
  10590. 1CBC 6F82 MOVWF 0x82, BANKED
  10591. 1CBE 0101 MOVLB 0x1
  10592. 1CC0 0E02 MOVLW 0x2
  10593. 1CC2 6FD4 MOVWF 0xD4, BANKED
  10594. 1CC4 889D BSF PIE1, 4, ACCESS
  10595. 837: else
  10596. 1CC6 D005 BRA 0x1CD2
  10597. 838: {
  10598. 839: //printf((STRING)"sT%c%c\n",HI_CHAR(AckChild),LO_CHAR(AckChild));
  10599. 840: FraiseMessage=fmessTOUT;
  10600. 1CC8 0101 MOVLB 0x1
  10601. 1CCA 0E05 MOVLW 0x5
  10602. 1CCC 6FD5 MOVWF CDC_Inbdp, BANKED
  10603. 841: FraiseState=fIDLE;
  10604. 1CCE 0101 MOVLB 0x1
  10605. 1CD0 6BD4 CLRF 0xD4, BANKED
  10606. 842: }
  10607. 843: }
  10608. 844: } else if(FraiseState==fIN){
  10609. 1CD2 D016 BRA 0x1D00
  10610. 1CD4 0E03 MOVLW 0x3
  10611. 1CD6 0101 MOVLB 0x1
  10612. 1CD8 5DD4 SUBWF 0xD4, W, BANKED
  10613. 1CDA E112 BNZ 0x1D00
  10614. 845: if( (Serial_Is_Receiver()) && TimerOut() ){ //Timeout
  10615. 1CDC 509D MOVF PIE1, W, ACCESS
  10616. 1CDE 0B20 ANDLW 0x20
  10617. 1CE0 E00F BZ 0x1D00
  10618. 1CE2 509E MOVF PIR1, W, ACCESS
  10619. 1CE4 0B02 ANDLW 0x2
  10620. 1CE6 E00C BZ 0x1D00
  10621. 846: StopTimer();
  10622. 1CE8 0E03 MOVLW 0x3
  10623. 1CEA 6ECA MOVWF T2CON, ACCESS
  10624. 1CEC 929D BCF PIE1, 1, ACCESS
  10625. 1CEE 929E BCF PIR1, 1, ACCESS
  10626. 847: /*if(TST_POLLEDCHILDOK()){
  10627. 848: printf((STRING)"\nsc%c%c\n",HI_CHAR(PolledChild()),LO_CHAR(PolledChild()));
  10628. 849: CLR_POLLEDCHILDOK();
  10629. 850: }*/
  10630. 851: FraiseMessage=fmessLOST;
  10631. 1CF0 0101 MOVLB 0x1
  10632. 1CF2 0E02 MOVLW 0x2
  10633. 1CF4 6FD5 MOVWF CDC_Inbdp, BANKED
  10634. 852: //printf("fIN timeout!\n");
  10635. 853: Serial_Init_None();
  10636. 1CF6 808B BSF LATC, 0, ACCESS
  10637. 1CF8 9A9D BCF PIE1, 5, ACCESS
  10638. 1CFA 989D BCF PIE1, 4, ACCESS
  10639. 854: FraiseState=fIDLE;
  10640. 1CFC 0101 MOVLB 0x1
  10641. 1CFE 6BD4 CLRF 0xD4, BANKED
  10642. 855: }
  10643. 856: }
  10644. 857:
  10645. 858: _fin :
  10646. 859: INTCONbits.GIEH = 1;
  10647. 1D00 8EF2 BSF INTCON, 7, ACCESS
  10648. 860:
  10649. 861: FrSendtoUsb();
  10650. 1D02 EC8A CALL 0x914, 0
  10651. 1D04 F004 NOP
  10652. 862: }
  10653. 1D06 0012 RETURN 0
  10654. 863:
  10655. 864: void FraiseSOF(void)
  10656. 865: {
  10657. 866: static BYTE il;
  10658. 867:
  10659. 868: if((il++)==200) { il=0; mLED_2_Toggle(); }
  10660. 1D08 0101 MOVLB 0x1
  10661. 1D0A 51FA MOVF 0xFA, W, BANKED
  10662. 1D0C 2BFA INCF 0xFA, F, BANKED
  10663. 1D0E 6E14 MOVWF __tmp_0, ACCESS
  10664. 1D10 6A15 CLRF digit_cnt, ACCESS
  10665. 1D12 0EC8 MOVLW 0xC8
  10666. 1D14 1814 XORWF __tmp_0, W, ACCESS
  10667. 1D16 E101 BNZ 0x1D1A
  10668. 1D18 5015 MOVF digit_cnt, W, ACCESS
  10669. 1D1A E103 BNZ 0x1D22
  10670. 1D1C 0101 MOVLB 0x1
  10671. 1D1E 6BFA CLRF 0xFA, BANKED
  10672. 1D20 728B BTG LATC, 1, ACCESS
  10673. 869:
  10674. 870: if(++PollCount==0) PollCount=255;
  10675. 1D22 0101 MOVLB 0x1
  10676. 1D24 2BCA INCF 0xCA, F, BANKED
  10677. 1D26 E102 BNZ 0x1D2C
  10678. 1D28 0101 MOVLB 0x1
  10679. 1D2A 69CA SETF 0xCA, BANKED
  10680. 871: }
  10681. 1D2C 0012 RETURN 0
  10682. 872: