Kategóriák
Maga az iparos. Történetek a múltból és a jelenből.

Az Igazság Szája beszél hozzád! Meg akarod ismerni a jövődet?

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.

mc68705 memory modell
mc68705 memory modell

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.

68705 programmer
68705 programmer schematic

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 bootloader megszerzése.
A bootloader megszerzése. Ennek a programnak a beégetésével kaptuk meg a bootloadert.

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:

A programunk fő ciklusa.
A programunk fő ciklusa.

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:

A hívott eljárások és a kipörgető fügvény
A hívott eljárások és a kipörgető fügvény

É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 titok nyitja, a kipörgető
A titok nyitja, a kipörgető

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.