Közeledik a születésnapom, ilyenkor mindig pakolgatok a műhelyemben. Közben sokat gondolkodtam, milyen poszt legyen a következő, talán kajás – túlélős? Esetleg utazós? Nem tudtam, és nekiláttam a rendcsinálásnak. A műhely sarkában kezembe került egy doboz, tartalma egy jól záródó műanyag szatyorba csomagolva. Kinyitottam és belepillantottam, bár a szatyrot megismertem azonnal. Emlékek árasztottak el, és már rögtön tudtam, hogy miről fog szólni ez a poszt. A zacskó tartalmát a borítóképen láthatják az érdeklődők, emlékeimet pedig a következőkben olvashatják.
Ez ismét egy retrográd vezetett túra az emlékeimben. A megnevezett emberek valódiak. Egyesek élnek, mások már abban a játékteremben játszanak Cherry Bonus3-as játékon, ahol nem kell fizetni a kulcsolásért. A posztban szereplő technika valós és működik. Csak tanulási, ismeretterjesztő céllal ismertetem. Gyártói kódot nem teszek közzé, bár ha valaki figyelmesen olvassa a posztot rájön, irreleváns. Az eljárás működésére jelenleg semmi garancia sincs, a gyártó régen megváltoztatta a bootstrap kódot.
Amikor először olvastam a Star Wars könyveket, még nagyon fiatal voltam, de megragadt bennem egy gondolat: Minden Jedi lovag maga készíti a fénykardját, igazi mester szerszámokkal. A poszt borítóképén látható – ezzel a hasonlattal élve – egy csillagromboló és a fénykardom.
Az általam csak „csillagrombolónak” nevezett eszközt a mesteremtől kaptam, (V barátom, köszönet érte) és még néhány posztomnak biztos szereplője lesz. A fénykardom viszont magam készítettem, de ez egy másik történet.
Szóval, úgy 1995 táján, túl az elő komolyabb nehézségeken, a sors a pénznyerő automaták világába sodort. Ekkor ismerkedtem meg Tutuval a cigánnyal. Igazi szarházi volt a szó minden értelmében, de ezt csak később értettem meg. Akkor amikor megismertem, jó üzleti ajánlattal állt elő.
„Lenne itt egy meló – de alig van rá pénz!” mondta, és vigyorgott ostobán.
„Mi lenne az?” kérdeztem közömbösen.
Elővett egy cédulát és arról olvasta fel:
„MC68705 microcontroller kiolvasás”, mondta – a „c” betűket hangsúlyosan megnyomva, hogy műveltebbnek tűnjön gondolom -vagyis inkább olvasta a céduláról – , és ahogy ránéztem csodálkoztam, hogy ezt képes volt kimondani.
Azt mondtam neki, hogy találjon erre más madarat, mert én drága leszek neki erre. Elköszöntem tőle, majd beszéltem V barátommal, hogy mi fán terem ez és hallott-e már róla. Akkor már neki is volt egy olyan készüléke, amiben ennek a kontrollernek a 40 lábú változata rejtette a titkot, szóval pont mint egy érett mérges pattanás, a feladat kész volt a megoldásra. Elhatároztuk, hogy hagyjuk egy hétig főni a levében a cigányt, – úgyse talál erre mást mert ez kemény diónak tűnik – aztán jól megkérjük az árát.
Közben elkezdtünk ismerkedni a mi munkánk tárgyával.
V barátom eprom égetőjének programozási listáját végignéztük és ekkor esett le először az állunk, mibe is készültünk belevágni a fejszénket: Ezt a típust az akkor nagyon korszerűnek számító égető NEM ismerte! Ennek fele sem tréfa gondoltuk, de ha már belefogtunk nem adjuk fel az első puskalövés előtt a csatát.
Először megszereztük a programozásról szóló információt: ez egy különleges példány, a benne lévő bootstrap kód egy külső epromból magára másolja a tartalmat és így nem lehet kiolvasni, mert igazából semmit sem ad ki. Jó kezdet – gondoltam.
Mesteremmel elhatároztuk, hogy az elején kezdjük: Először felpuhítjuk, aztán jöhet a filézés!
Megépítettük a programozó hardvert és elhatároztuk hogy kipiszkáljuk belőle ha lehet a bootloader kódját hátha előrébb leszünk vele.
A programot megírtuk, beégettük egy epromba és beprogramoztuk a kontrollerbe.
Ekkor került elő a „csillagromboló”. A portkártyát egy 286-os PC-be téve extra portokhoz jutottunk. Az első lépésben csak a mikrokontrollerből jövő adatokat gyűjtöttük és tároltuk el, hogy a bootloadert megszerezzük.
A bootloader kitöltése és megértése után nem sok lehetőséget láttunk a feltörésre: tényleg azt csinálta amit kell. Beégette a programot majd vissza ellenőrizte az eprom címbuszának pörgetésével és kész.
Másnap hívott a cigány, és elhatároztam, hogy belevágok, mert volt egy ötletünk V barátommal. (Igazából nem emlékszem, de szerintem egyszerre jutott eszünkbe a megoldás egy kis brainstorming közepette. Nem akarom elvenni senkitől sem a dicsőséget)
Akkori mértékkel mérve jókora munkadíjat kértünk a cigánytól, – hátha nem adja meg a megrendelője -de megadta, és a következő hétvégén már az asztalunkon volt a mikrokontroller, valamint egy üres példány, hogy abba égetve a tartalmat a megrendelőnek vissza tudjuk küldeni, hogy ellenőrizze. Anélkül, hogy ő maga ki tudná olvasni, legfeljebb plusz egy kontrollere lesz, előrébb nem jut vele.
Először is megértettük és megismertük a beégető algoritmust : A gyártó – Motorola – úgy tervezte a típus tárolóját, hogy ha ki van napoztatva akkor zérus bájtok olvashatóak ki belőle. És itt bökték el igazából a dolgot. Mint egy rendes epromnál is, ha ki van napoztatva az égetés során az 1-es értékű bitből lehet 0 értékűt programozni az égetéssel. A zérus értékű bitből pedig csak napoztatással lehet újra 1-es értékűt csinálni. Motoroláéknál ez éppen fordítva volt, és itt nyugszik a hiba gyökere is: vagyis ha egy bájtra zérus értéket akarok ráprogramozni, akkor az biztosan nem csinál kárt, mert ha a bit zérus volt akkor az is maradt, ha 1-es volt, akkor ott hibázott, de a tartalmat nem rontotta el.
Ezek után nekiálltunk és új programot készítettünk a „csillagrombolóba”. Átgondoltuk, hogy a program 1 MHz-es órajellel működik az égetés során, nosza, kicseréltük lassabra – az égetés lassabb lett, de gond nem keletkezett. A PC-re írt programot úgy kellett megírni, hogy semmilyen megszakítás ne vegyen el időt a pascal kód futásától. Erre szolgált az interrupt technika:
Az egész titok a 200 ms várakozás során bekövetkező első megszakításban történik.
Ahhoz, hogy megértsük, először a portkártyával kapcsolatos eljárásokat ismertetem:
Érdemes az utolsó függvényt megfigyelni: egy timeoutos várakozás egy bitre, és ha az visszajön akkor a visszaadott érték hamis lesz. Minden más esetben pedig igaz.
És akkor következzen a lényeg!
A send_data eljárás a portkártyán keresztül az eprom databitjeit helyettesítve nullákat küld a mikrokontrollernek, és a program vár egészen addig, amíg a VERIFY led (bit) nem billen, elkezdődik az ellenőrzés.
Mivel nulla biteket szimulál az epromból a portkártya így a benne lévő programot nem módosítja az ismételt égetés. Persze a tartalmat ezelőtt NEM napoztattuk ki, így a kiolvasni kívánt tartalmat a kis szerencsétlen MCU felül próbálta írni nullákkal, – ami nem okozott kárt. Hogy ez miért fontos, azt a vájt fülűek már tudják, de a többieknek elárulom:
Mert a programozás után jön az ellenőrzés!
Amint a mikrokontrollerből (PB.1 U1 pin 26) megjön a jel, – ezt figyeli a wait_pgm eljárás – kezdődik az ellenőrző ciklus! A portra az eprom nullás címe kerül (a pörgető számláló U3/10 láb) órajelét figyeli a wait_clk (az első a számláló reset miatt irreleváns) és teszteli a mikrokontrollert : ha nem jön a következő órajel a számláló továbbléptetéséhez az égetési hibát jelent, vagyis az ellenőrzésre elküldött bájt hibás volt. Lehet újrakezdeni az egészet!
Nos így lehet kipörgetni, kipróbálkozni a mikrokontroller tartalmát, ugyanis egy bájt legfeljebb 256 különféle értékű lehet, és ha szerencsénk van és jó értékkel próbálkozunk, akkor megjön a következő címet befetchelő órajel!
A szarvashiba a tervezők részéről itt lett elkövetve: csak belül meg kellett volna jegyezni hogy nem volt sikeres az ellenőrzés, és az eredményt csak a végén kiadni az egészről. Így gyakorlatilag lehetetlen lett volna visszajelzést kapni az egyedi próbálkozások sikeréről. De hát ez a lyuk benne volt, és a csillagromboló sem hibázta el, célbatalált.
Az igazsághoz hozzátartozik, hogy a program először hibás volt, egy bájtot még várt volna a kiolvasáshoz, így miután először jól lefutott, teljesen befagyott, reménytelenül resetelni kellett a PC-t. Bosszantó volt tudni, hogy ott a tartalom a befagyott PC-ben.
Ez azért volt különösen fájdalmas, mert 13 óra várakozást követelt egy pörgetés.
A program javítása és ismételt futtatása után előállt a hőn áhított tartalom. Beégettük még egy mikrokontrollerbe és átadtam a cigánynak.
Nemsokára fülig érő szájjal jött és hozta a megbeszélt összeget, mert nem volt más választása, nem tudott megkerülni minket.
Az égető készüléket elküldtük a megrendelőnek és igazából akkor tudtuk meg, hogy ez egy jósgép volt. Ki gondolta volna?!
Utólag megtudtam a cigány pont megszorozta kettővel a munkadíjunkat a megrendelő felé, de hát Ő már csak ilyen volt. Meg is érdemelte a sorsát, mert az ilyen fajta csak a bajt keresi egész életében.
Nagy élmény volt, és ezek után kértem és kaptam egy „csillagrombolót” a V mestertől. A fénykard készítése azonban egy másik, újabb történet! Kommentek, kérdések jöhetnek, holnap 51 éves leszek.