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

Tápegység javítás folytatása

Néhány napja megkaptam a tápegység nyomtatott huzalozású panelját. A panel szitafelirat nélkül készült, annak prototípus jellege miatt. A beültetés tápegység részenként történt, elsőként a digitális 5V+ tápfeszültséget előállító részt valamint a +5V monitor, +5V biztonsági, és +24V -os tápegységeket ültettem be.

A tápfeszültséget beállító alkatrész helyére olyan alkatrészt raktam, ami a várható értéknél kb 20-30%-al nagyobb értékű, így a bemérés során vele párhuzamosan kapcsolt ellenállások válogatásával pontosan be tudom állítani a kimeneti feszültséget. A bemérés során labor tápegységről áramlimit alkalmazásával táplálom a panelt. Ez azért szükséges, mert ha nem indul el valamelyik kapcsolóüzemű tápegység, ne pusztuljon el lehetőleg semmi.

Szóval ennyi bemelegítés után következzen a tápegység beindítása.

Összerakás közben.
Összerakás közben.

A tápegységet az eredeti alkatrészeivel raktam össze, a kapcsolóüzemű tápegység energiatároló eleme egy tekercs volt, amit 20uH induktivitásúnak mértem. Ez tapasztalatom szerint kevés és méréseim is azt mutatták, hogy névleges terhelésnél a táp csuklik, – és a buck diódán (SCH1) eső feszültség eltünése ebben megerősített – nagyobb tekercs kell vagy gyorsítani kell a működési frekvencián. A felélesztett áramkörben az ST3524 típusú integrált áramkör végzi a megmunkáló gép fő digitális tápellátását végző kapcsoló tranzisztor vezérlését. A kapcsolótranzisztort a belső készülékdoboz aljára csavaroztam fel szigetelten.

Kapcsoló darlington tranzisztor hűtése.
Kapcsoló darlington tranzisztor hűtése.

A működési frekvencia növelése az ST3524-es áramkör 6-os és 7-es lábához kapcsolódó alkatrészek időállandót meghatározó ellenállás és kondenzátor értékeinek változtatásával történik. A kapcsolóelem melegedését és kollektorán lévő jelalakot figyelve a működési frekvenciának a növelése nem vezethet eredményre. A ki és bekapcsolás ideje és veszteségei a mintához képest a működési frekvencia csökkentését indokolja. Egyszerűen mondva, a darlington tranzisztor nem bírta, muszáj volt csökkenteni a frekvenciát. A működési frekvencia kezdetben 75kHz volt, az energiatároló induktivitást így mindenképp növelni kellett.

Ahhoz, hogy beinduljon a tápegység, a korábban felvett kapcsolási rajzon az ST3524-es áramkör V- (invertáló bemenő feszültség) bemenetét a feszültséget beállító visszacsatoló ellenállással a kimenetre kell kötni, ez adja a szabályozás visszacsatolását. A tápegység tervezője ezt úgy gondolta, hogy a gép elektronikájáról hozza vissza mint referencia jelet, és a panel (rajzon piros nyíllal jelölt csatlakozópontján) innen veszi a visszacsatolást. Ez első pillanatra érthető szándék, hiszen a tápfeszültségnek nem a kimeneten, hanem a felhasználás helyén kell pontosnak lennie.

Main +5V táp kapcsolási rajz.
Main +5V táp kapcsolási rajz.

A felélesztés idejére ezt egy ideiglenes huzallal oldottam meg. Megfigyeltem, hogy amíg nem volt a huzal felrakva, a tápegység kimenetén a bemeneti feszültség volt mérhető, a kapcsolótranzisztor be volt kapcsolva. Szerencsére a labortápon az áramlimit megvédett a tönkremeneteltől. A kimenetet védő tirisztort az élesztéskor még nem ültettem be, csak a szupresszor (SCR1) diódát. Így szépen felélesztettem az áramkört, majd a bemeneti feszültséget növeltem, (miután meggyőződtem a kapcsolás működéséről) majd névleges értéken (38V) műterheléssel hatásfok ellenőrzést végeztem. Az eredeti alkatrészekkel szánalmas 67%-os hatásfokot mutatott a tápegység!

Névleges terhelés mellett a működési frekvenciát, a visszacsatoló ellenállást és a tároló induktivitást szisztematikus kísérletezéssel változtatva optimumot kerestem. A működési frekvenciát a kimenet zajossá válása és a hatásfok optimuma adta ami kb 47 kHz értékre adódott. A buck diódán eső 1.2 V sok volt, nagy veszteséget okozott, itt alkalmasabb típus választással 0.44 V értékre sikerült leszorítani a maradékfeszültséget.

A tekercs induktivitását menetek letekerésével csökkentettem. A képen az eredeti tekercs (fekete) a kiindulási tekercs és a már kész tekercs látható a legombolyított huzal társaságában.

A tekercsek (végső, eredeti, kiindulási) és a letekert huzal.
A tekercsek (végső, eredeti, kiindulási) és a letekert huzal.

A végső tekercset üvegszövet szalaggal szigeteltem és kiöntőgyantával impregnáltam amint véglegesítettem az értékét.

A mérésem szerint a beállítás után a tápegység hatásfoka 84,5% volt, ami már a mondás szerint “sok szódával, de elmegy”. Erre a gondolatra még visszatérek a végén.

A többi tápegység felélesztése nem okozott nehézséget, viszonylag gyorsan ment. A kész áramkört a forrasztási maradványoktól lemostam, majd megkezdtem a próbaüzemet.

A műterhelésnek mintegy 12 méter 1,5mm2 keresztmetszetű flexibilis vezetéket használtam, a kimenetre kapcsolva 12A áram folyt át rajta, jócskán melegedett is.

Próbaüzem előtt.
Próbaüzem előtt.

A próbaüzem során a tápegység jól vizsgázott, beállítottam a két kerámia ellenálláson (mérősönt) eső feszültség figyelését végző TL331 komparátor áramkört is a túlterhelés elleni védelemre.

A készülékdoboz (belső doboz) 3mm vastag alumínium lemez volt, ez nagyon jó hűtőfelületet biztosított.

A sikeres próbaüzem után a beindításhoz szükséges feedback huzalt leszedtem, és átforasztottam a kábelcsatlakozást is.

A tápegység elkészült.
A tápegység elkészült.

A teljes összeszerelés után mielőtt elviszem a tápegységet beépíteni még egy próbát végeztem, ami rendkívül gyászos eredménnyel végződött:

A jól működő +5V-os táp “leült” és zérus feszültséget adott ki! Ellenállás méréssel a kimenetét zárlatosnak találtam. “A fene egye meg! ” mondtam, majd megkezdtem a hibakeresést, az alkatrészek kitermelését, a tápegység kidobozolását.

A szupresszor dióda zárlatos lett, és a kapcsoló darlington tranzisztor is tönkrement.

Mi is történt, mit csináltam rosszul? kérdeztem magamtól, és végiggondoltam mit csináltam. Ellenőriztem a forrasztásokat nem csináltam-e zárlatot, de nem. Gondolkodtam és szaporán emlegettem a tervező felmenőit, miközben rájöttem hogy a bajt csak a visszacsatoló vezeték (feedback) lekötése okozhatta. Már a próbaüzem során rájöttem, hogy ha nincs ez a vezeték, akkor a kapcsoló darlington tranzisztor bekapcsolva marad, és a kimenetre a bemeneti feszültség jut. Ami a szupresszor diódát persze átütötte és zárlatossá tette. Ezután a túláram végzett a darlingtonnal is.

Mit lehet tenni? Ekkor megvilágosodott bennem hogy a tervezői szándék – a visszacsatolás helyének áthelyezése a gép testébe – a csatlakozón keresztül vezetésével súlyos tervezési hibát okozott!

Ha ugyanis bekapcsolt állapotban a csatlakozó konnektor kihúzzák (például mérés miatt, de egy kis kontakthiba is ezzel jár) akkor a referencia jel eltűnik, és a visszacsatolás nélküli táp a korábban leírt módon kinyírja önmagát!

Mit lehetne tenni, hogy egyrészt megmaradjon a mintavétel a csatlakozón keresztül, de a megszakadás / megszakítás ne legyen ilyen gyászos kimenetű?

A megoldásom.
A megoldásom.

Azt találtam ki, hogy a vélhetően fél ohm alatti ellenállású visszacsatoló vezeték mellé még a panelen egy 2.7 ohmos “nyújtózkodó” ellenálláson keresztüli visszacsatolást alakítok ki a kimenetre de már a panelon.

Az új visszacsatolás.
Az új visszacsatolás.

Az ellenállás lábaira szigetelést húztam és azt a forrasztási oldal felől szereltem. Így ha kihúzzák a csatlakozót a tápegység az ellenálláson keresztül kap visszacsatolást, ha pedig üzemi helyzet van, akkor a panelról jövő visszacsatolás kisöntöli a beépített ellenállást, a szabályzás ha korlátozottabban is de érvényesülni tud.

Hát így készült el a prototípus tápegység, amit rövidesen beépítek.

Ha a próbaüzem során nem jelentkezik hiba, akkor a végleges tápegységben meghagyom a darlington kapcsolótranzisztort, ha a veszteség és a melegedés túl nagy lesz átalakítom MOS-FET es vezérlésűvé. Ebben a kérdésben még nem döntöttem, majd a tapasztalatok figyelembevételével a végső panel megalkotásakor fogok dönteni.

Most már értem, miért szerelte rá a korábban javító kolléga a 40A-es kínai tápot (nyilván ő is bekapcsolta otthon ahol nem volt bedugva a gépbe a táp 🙂 és nem egyszer tönkretette a darlingtont, miután kiherélte belőle) de nem jött rá a megoldásra.

Hát ezzel a tanulsággal zárom ezt a posztot, a befejező részben az üzemi tapasztalatokról és a végleges tápegységről fogok írni.

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

Tápegység javítás

Egy szép napon csörgött a telefonom és egy CNC gép tápegységének javítását rendelték meg tőlem. A meghibásodott gépet és tápegységet alaposan körbefényképeztem a kiszerelés előtt, hogy a kiindulási állapot megfelelően dokumentált legyen.

Tápegység kívülről
Tápegység kívülről

A képen látható a már kiépített tápegység, feliratokkal. Kívülről szépnek tűnik, na de hát az örök kérdés, hogy vajon mi van a dobozban?

Az első megdöbbenés a tápegység hátuljára láthatóan utólag felcsavarozott kínai tápegység megpillantásakor ért. Az előlapról leolvasott olvadóbetétek árama alapján az előző szerelő nem bízta a véletlenre a dolgot!

Az F3 jelölésű +5V digitális elektronika ellátására szolgáló tápegység 10A-es értékű olvadóbetéttel biztosított. A hátoldalra szerelt tápegység névleges terhelhetősége +5V-on 40A!

A hátoldalon egy kínai tápegység.
A hátoldalon egy kínai tápegység.

Jó vastag vezetékekkel kötötte be a szerelő, nehogy gond legyen!

Figyeljük meg, a tápegység ezen része kapcsolóüzemű volt, de abból a kapcsolóelemet kiműtötték. A műtét sikeres volt, a tápegység tovább élt, üzemelt a vezetékekhez (kék és fekete dupla vezeték) kapcsolt külső kínai tápról.

Tápegység kibontáskor
Tápegység kibontáskor

Figyelmesen megnézve a tápegységbe több 0.22R és 0.47R értékű fémréteg ellenállásokat láthatunk nyilvánvalóan utólag beépítve. Hmmm – húztam fel a szemöldökömet, szokatlan hogy egymás hegyén hátán utólag ráforrasztott ellenállásokat lát az ember egy gyári szerelésben. Mi jöhet ezután?

Boncolás előtt
Boncolás előtt

Kidobozolva a tápegységet már kezd eloszlani a javíthatóság utolsó reménye is. Hiányos, átalakított darabbal állok szembe, több helyen égésnyomokkal tarkított alaplemezen. Nézegetve a bal alsó sarokban lévő L200-as kapcsolóüzemű tápegység áramkör előtt szerel 0,25W-os eredeti 0R-os alkatrészt, láttam, hogy valaki elvágta az egyik lábát, majd visszaforrasztotta. Ekkor már kezdtem érteni, hogy itt komoly a baj.

A tápegység hátoldalát is lefényképeztem, ez a látvány tárult elém.

Boncolás előtt forrasztási oldal
Boncolás előtt forrasztási oldal

A fóliák felégtek, a furatgalvanizálások a korábbi cserék során kiszakadtak, az alkatrészek két oldalról voltak beforrasztva. Milyen szerencse, hogy nincsenek belső rétegek!

Ha elfelejted a bekötést, Írd fel!
Ha elfelejted a bekötést, Írd fel!

Aki előttem javította, biztos, ami biztos alapon még a panelra is karcolta egy tirisztor bekötését.

Összességében egy ilyen panel látványa után sokan feladják, mert a panel műszaki állapota már javítás után -ha egyáltalán elindul a javítás után- már nem nyújtja az elvárható üzembiztonságot.

Magam a boncolás és az újraépítés mellett döntöttem. Fel szeretném tárni a meghibásodásokhoz vezető mechanizmust, majd új alappanelt tervezek és gyártok, amit az eredeti panel helyére építek.

Ehhez először is minden információt ki kell nyerni a panel romjaiból: fel kell venni a pontos kapcsolási rajzot, a pozíciószámokkal és alkatrészek értékeivel, majd a kapcsolási rajzból nyomtatott huzalozású panelt tervezek. A tervezés során az alkatrészeket az elérhető -lehetőleg pontosan az eredetivel megegyező – méretben rakom fel ugyanarra a pozícióra.

Az alkatrészek pozícióit távolról teleobjektívvel készített nagyfelbontású kép alapján egy erre a feladatra kifejlesztett ingyenes szoftverrel végzem. A koordinátákat az alkatrész pozíciószámával együtt felírom, majd a nyák tervezéskor a pozícióra illesztem a felkért alkatrész modulját.

Poziciólista
Pozíciólista

A boncolás során az alkatrészek takarják sok esetben a saját pozíció feliratait, valamint a környező kapcsolódó alkatrészek a méréseket zavarják. Ezért egy oldalról kiforrasztom, és felemelem, így mérhető lesz önállóan.

Ez az eljárás az utólagos mérés és pozíció rekonstruálását nem lehetetleníti el, mert az alkatrész továbbra is egy lábbal a pozíciójában marad, így biztosan nem keveredik el, nem veszik el. Az újjáépítés során a bekötő kábel ereit sem lehet elcserélni, utólag is lehet ellenőrizni: egy esetleges elkötés következményei a tápegységhez kapcsolódó elektronika pusztulását okozhatja azonnal. Például a +24V és 5V csere és hasonló esetek. Így utólag minden ellenőrizhető és így lehet elsőre tutira menni.

Az 5V+ / 10A tápegység boncolása.
Az 5V+ / 10A tápegység boncolása.

A tápegység pufferkondenzátoraihoz hasonló kondenzátorokat (a SIEMENS gyártó különleges lábazását használta a panel) nem sikerült beszerezni, a hosszú lábú kondenzátorok hatékonyságát pedig a hosszú kivezetések csökkentik. Az új panelen már axiális, egy oldalon kivezetett kondenzátorokat alkalmazok. A kép bal alsó sarkában már látható az az alkatrész, ami az egész posztomat inspirálta. A bal szélső stabilizátor feletti harmadik alkatrész a negyed wattos 0 ohmos fémréteg ellenállás. De ne szaladjunk előre, először a teljes kapcsolási rajz felvétele folyik.

A nyák tervezése során az eredeti fóliamintázathoz igyekszem ragaszkodni: ez segíti a kapcsolási rajz – és az ebből generált netlista – utólagos ellenőrzését.

A boncolás során – hogy a takart rész láthatóbbá váljon – lecsavaroztam a hűtőbordát. És lássunk csodát, a jobb oldalról második TIP tranzisztor már ki volt törve a panelból, kiesett. Ezért nem volt +12V a panel kimenetein. A tranzisztort ugyan fogta a hűtőborda, de mindhárom lába törött volt!

Hűtőlemez leszerelés után.
Hűtőlemez leszerelés után.

A kapcsolási rajz felvétele és visszaellenőrzése hosszú folyamat volt, de sikerrel befejeztem. Ezután már gyerekjáték volt megfejteni a történteket.

Tápegység kapcsolási rajz
Tápegység kapcsolási rajz

A kapcsolási rajzból kiemeltem az elsőként bekapcsoló +5V (monitor) ellátást biztosító áramkört:

+5V monitor tápegység részlet.
+5V monitor tápegység részlet.

A képen látható egyszerű kapcsolóüzemű tápegység után több fokozatú védelmet láthatunk, ennek működése a következő:

Ha a tápegység megszalad, vagyis kimenetén a CRZ1C pozíciójú zener dióda feszültségénél nagyobb feszültség jelenik meg, a diódával sorba kapcsolt ellenálláson a dióda letörési áram feszültségesést hoz létre, és potenciálja megemelkedik. Ennek a pontnak a potenciálja amint meghaladja a SCR1C pozíciószámú tirisztor gyújtási feszültségét a tirisztor begyújt. Ha a tirisztor begyújt, rövidzárja a tápegység kimenetét, és az előtte sorba kapcsolt R1C pozíciójú negyedwattos fémréteg ellenálláson zárlati áram fog folyni.

Ez a zárlati áram a tápegység bemeneti oldalán lévő váltakozó áramú részen a tápláló tekerccsel sorba kapcsolt olvadóbetétet kiolvasztja. Ha az olvadóbetét nem olvad ki, vagy lassan olvad ki az eredeti ellenállás elég.

Azt, hogy biztosan elégjen, a negyedwattos fémréteg kivitel biztosítja.

Ez a védelmi rendszer ha alkalmas olvadóbetétek vannak beépítve remekül működik. A védelem további eleme a kimenetre csatolt szupresszor dióda, ami a meghibásodás idejére szintén megakadályozza a túlfeszültség kártételét a tápenergiával ellátott áramkörökben.

Figyeljük meg, a korábbi képeken az L200-as áramkör környékén az elégő 0 ohmos ellenállás helyére nagyobb teljesítményű fémréteg ellenállással cserélte le a javító “szakember”. Sőt az egyik helyen két ellenállás is volt párhuzamosan kapcsolva.

Ezt az ellenállást már semmiképpen sem bírja a tirisztor elégetni, így megfutás esetén az L200-as áramkör és az olvadóbetét ég ki., eközben az egyenirányítókhoz vezető fóliák égnek fel (előző képen jól látható a “javítás” ezen eredménye.

Súlyosabb a helyzet, a beszerelt kínai tápegységnél, ahol a tirisztor begyújtása esetén már nem tud mit elégetni csak saját csatlakozásaihoz menő vezeték ég el. Szintén látható a hátoldalon a tirisztor lábainak csatlakozó fóliáin az égésnyom. A 40 A-es táp nem viccel.

Így, hogy a kiégő szerepben használt 0 ohmos negyedwattos alkatrészt kicserélték nagyobb teljesítményűre, gyakorlatilag az áramkör teljes jövőbeni pusztulását illetve ön elpusztítását készítette elő a “mester”.

A poszt rövidesen folytatódik, a nyomtatott áramkör beültetésével, bemérésével és próbáival fogom folytatni.

A panel gyártás alatt van, folytatás rövidesen…

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

A fénykardom.

Egy 65C02 processzor és kódoló logika ami “feltörhetetlen” kerámia tokban várta, hogy összemérjem vele az erőmet.

Eredeti FunWorld kártya. Forrás: https://team-europe.blogspot.com/2017/03/

Ebben a posztban egy igazi intellektuális kihívást szeretnék ismertetni, utalnék arra, hogy sokan sokféleképpen állnak a problémákhoz. Vannak akik izomból és vannak akik ésszel csinálják.

Történt úgy 1996 körül, hogy egy kedves megrendelőm beállított a fenti képen szereplő játékkártyával, ha jól emlékszem Omega-Card pókerprogram volt benne, és azt a feladatot adta, hogy egy taiwani kártyában szeretné ugyanezt a programot futtatni.

Azt a bizonyos taiwani kártyát már jól ismertem, akkori munkahelyemen is volt szerencsém a bele írt “jugó – magic” programot javítgatni benne, de hogy mindenki ráismerjen itt látható a képe:

Szóval, annyi volt tudható első blikkre a kártyákról, hogy hasonlóak. Először is, a kártyában lévő statikus RAM tartalmát kellett biztonságba helyezni, mert bizony a próbálkozások során -ha a RAM elveszti a tartalmát (“elfelejt”) akkor korántsem biztos, hogy újra lehet indítani a programot. Láttunk már telefonszámos, kódos megoldást is, így reflexből a RAM tartalom mentéssel kezdődik mindig a mutatvány.

Ez úgy történik, hogy egy akkut a RAM tetejére forraszt az ember a táp és a föld közé, majd a RAM CE lábát az akku táppal egy 3K3 ellenállással összeköti. Ezután már kivehető a foglalatából és egy EPROM égetővel szépen kinyerhető belőle a tartalom.

Ezután az EPROM-ok kiolvasása következett, de a program EPROM-ból semmilyen értelmes tartalom nem jött ki, masszív kódoló logika őrizte a titkot.

Az eredeti kártyából a kínaiba a kódolt processzort és az EPROM-okat, valamint a szín generáló PROM-ot és a rendszer GAL-t átrakva a próbáltam elindítani a programot, talán jó volt a megérzésem és van valami köze a kártyáknak egymáshoz.

Nagy örömömre a program beindult, de mivel a STAT-RAM tartalmát nem másoltam át, hibára futott. De ez akkor lényegtelen volt, ezzel a kísérlettel meggyőződtem arról, hogy a titok pusztán egy kerámia tokban rejtőzik. Láttam már korábbi próbálkozásokat, egy haverom kiköszörülte a tokot, de érdemben közelebb nem jutott a megoldáshoz. A borítóképhez kapcsolódó linken egy európai hacker csapat pontatlan bejegyzése látható akik ugyan ki bírták csiszolni a chipet, de tévednek. A leírásban Z80-ként valószínűsítik az eszköz processzorát, a valóságban azonban egy 65C02 processzor a megoldás.

A kezdeti örömöm és lelkesedésem néhány próbálkozás után kezdett megtorpanni: A memória végén található RESET, NMI, IRQ vektorok helyét a kódolt memóriában még lehetett azonosítani logikai analizátorral a RESET megjelenése utáni memória olvasásból, de aztán semmi. A processzor és a memória közé iktatott kódoló logika cím és adatfüggő módon elkódolta a program memória tartalmát.

Emlékeztetőül, egy 65C02 processzor memória modellje valahogy úgy néz ki, hogy:

  • 0xFFFE,0xFFFF – INT vektor
  • 0xFFFC,0xFFFD – NMI vektor
  • 0xFFFA,0xFFFB – RESET vektor
  • 0x0200 – 0xFFF9 – memory
  • 0x0100- 0x01FF – STACK RAM
  • 0x0000- 0x00ff – ZERO page, special indexing modes

A program GAL- jának méregetéséből kiderült még a következő memória felosztás:

  • 0x0000-0x07FF- STAT RAM
  • 0x0c00-0x0c0f- IO1
  • 0x0d00-0x0d0f- IO2
  • 0x0e00-0x0e0f- CGA ctrl
  • 0x0f00-0x0f0f- Sound ctrl
  • 0x4000-0x7fff- Extra ROM
  • 0x8000-0xffff- Program ROM

A memória modellből látható, hogy a perifériák és a RAM memóriák 0x1000 cím alatt találhatóak. Ez szöget ütött a fejembe, és megvizsgáltam a korábban kimentett SRAM tartalmat. Ebben a legnagyobb meglepetésemre értelmes BCD kódolt számokat (könyvelés adatai) és néhány olvasható szöveget vettem észre.

Ez azért különösen jelentős, mert rávilágít a védelmi kódolás hibájára: az alsó 0x1000 ig terjedő címtartományban nincs kódolás! (Hiszen, ha kétirányú lenne (R/W) a kódolás akkor a RAM területre írás is el lenne “obfuskálva”, és az IO chipek elérése sem lenne egyszerű, hiszen a kétirányú kódolás esetén a regiszterek helye és értéke a kódoló logika miatt változna. Így ez az architektúra nem lehet kétirányú, csak az EPROM területeket érinti, és azt is csak kiolvasáskor. A RAM a kétirányú használat miatt nem lehet kódolt.) Ennyi közbevetés után adódik a kérdés rögtön:

Hogyan lehetne ide kódot juttatni be, és hogyan lehetne rávenni a processzort, hogy azt végre is hajtsa? Hiszen a reset vektor a kódolt területen van!

Azért a RAM területre, mert ez a processzor von Neumann architektúrájú, vagyis a teljes address space-ben elhelyezhető a végrehajtható kód, és mint előbb bemutattam, a SRAM terület és ebben lévő veremtár nem védett a kódoló logika által.

Persze, rögtön bevillant a C64 korszakból az ISEPIC típusú “rögtöninduló”, ami egy olyan fájl volt tipikusan, ami a veremtárba töltődött, az elején kóddal, a végén 0x01 bájtok sorozatával. Ezek a bájtok egyformák, hogy a veremmutató páros vagy páratlan volta (a 16 bites cím alsó és felső bájtjának helye nem ismert a betöltődéskor), az SP regiszter valahová a végére mutat. A töltő rutin végén az RTS utasítás a felülírt veremből veszi elő a visszatérési címet, így elindítja a stack elején a programkódot.

Ekkor megterveztem a “fénykardom”: A statikus RAM lábkiosztásával az alaplaphoz kapcsolódó, de EPROM-ot is tartalmazó memória bővítés, ami egy kapcsoló átbillentésével a veremtárat és az utána következő egy lapot – átkapcsolja EPROM területre. Az átkapcsolást a PEEL végzi, az átkapcsoló függvény a sok bement miatt a 22V10 GAL-ban lett megírva.

Így juttat kódot a nem kódolt memóriarészbe és így el is tudja indítani. Észre kell venni, hogy ilyenkor nincs STACK memóriánk, így szubrutint hívni nem tudunk. (Lehet, csak nincs visszatérési cím.)

Innen már karikacsapásként ment a dolog, egy Royal-Card programból kiollózott IO chip inicializálással indított “rögtöninduló” kiportoló programmal a memória kiolvasható és a számláló kimeneteken keresztül kiadható a külvilágba, mert a processzor saját kódját tudja olvasni a logikáján keresztül.

A gyártott PCB hátsó oldala.

A megrendelés szoros határideje miatt még zöldítés sem készült a nyomtatott áramköri lemezre. Amint megvolt a nyák, gyorsan összeraktam, felélesztettem, majd megírtam a programot.

A kód elején található adat a veremtárat írja felül, és beindítja a 0x0202 címtől kezdődő kiportoló programot.

Nem bírtam kivárni azt, hogy számítógéppel printer portra kötve az érkező adatokat azonmód rögzítsem, hanem a kártyát összeraktam és remegő ujjakkal bekapcsoltam.

A játék beindult, minden rendben volt. A memória átkapcsoló vezetékére kötött kapcsolót átbillentettem, majd a számlálók vidám ciripelése tudatta, sikerült túljárjak a védelem eszén.

Körülbelül 7 óra elteltével a fénykardom programja kiszippantotta a tudást és azt a hozzá kapcsolódó számítógép rögzítette. A kapott tartalmat EPROMBA égettem, majd az eredeti kártyában lévő kódolt processzort egy originális 65C02 processzorra cserélve a beégetett nyitott eprom azonnal hibátlanul elindult.

Röviden ennyi a fénykardom története, egy igazi élmény volt a küzdelem!

Komment, észrevétel jöhet!

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.

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

Bepillantás a nyerőgép programozás rejtelmeibe.

Ez egy olyan poszt, melynek tartalmát a gyakorlati élet inspirálta. Szeretnék bepillantást nyújtani azoknak az embereknek, akiket valamilyen szinten megérintett ez a világ, hogy mivel is kerülnek szembe, amikor leülnek a nyerőgép elé. Viszonylag száraz, szakmai írás, melynek sorait a különféle játékprogramok megfejtése során szerzett információk támasztják alá. Éppen ezért ez a cikk számítástechnikai oldalról közelíti meg a témát. Szívesen venném pszichológus vagy más játékszenvedéllyel foglalkozó, humán oldalról közelítő szakember véleményét és kiegészítéseit.

A poszt célja ismeretterjesztés, és bepillantás a függőség világába egy másik nézőpontból. A közölt módszerek, algoritmusok bárki által szabadon implementálhatóak, azonban az eredményekért semmilyen felelősséget nem vállal a szerző.

Sokéves tapasztalat alapján néhány szakmai szempontba foglalva felsorolnám a nyerőgép programokkal kapcsolatos követelményeket, amik pályám során előfordultak.

  • Egyszerű játékterv
  • Egyértelmű ábrák, nyerő kombinációk
  • Gyors lefolyású legyen a játék.
  • Nagy nyeremény (főnyeremény) ígérete
  • Érdekes, izgalmas legyen a játék
  • Jövedelmező legyen a játék (legyen haszna a háznak)
  • Biztonságos legyen a játék megvalósítása.

Ebben a posztban leginkább a függőséget befolyásoló tényezőkkel szeretnék foglalkozni, amit leginkább a “játék érdekessége” pontba lehetne befoglalni. A téma tárgyalását közelítsük meg a bank (ház) oldaláról és induljunk ki onnan, hogy a játéknak profitot kell termelnie.

Ezt legegyszerűbben a játékterv alkalmas meghatározásával érhetjük el. Ilyen például a rulett játéknál a “0” mező szerepe. Másik lehetőség a szemléltetésre, hogy tekintsük az egyszerű dobókockás kockajátékot, mely ötszörös főnyereményt fizet, ha a játékos eltalálja előre az általa dobott számot.

Ebben az esetben annak a valószínűsége, hogy nyer 1/6 , mert hat szám közül egyforma eséllyel jöhet ki bármi, míg a nyereség ötszörös tét, így a ház haszna minden dobáson 1/6 tét.

A számítás visszafelé is működik, a biztos nyeréshez mindenképp mind a 6 számra kell fogadni (a dobókocka a hagyományos, hatoldalú) de csak egy szám nyer, és ez ötszörös tétet fizet.

Ez az egyszerű játékterv is elegendő a játékhoz, azonban ez a játék -gondolom nem árulok el nagy titkot – nem nagyon hozza lázba a játékosokat, mert előbb utóbb megunják. Másik részről, a játékterv átlátható, és eléggé mazochistának vagy függőnek kell lenni ahhoz, hogy ilyen játékba belekezdjen valaki.

És itt kezdődik a tudomány. Hogy mi az, amitől érdekessé, izgalmassá válik egy játékterv, és milyen eszközökkel lehet ezt az izgalmat felkelteni, fokozni, a játék sikerességének érdekében. És mivel lehet rávenni az embereket arra, hogy kifosszák magukat nagy valószínűséggel.

Induljunk el legegyszerűbb mechanikus félkarú rablóktól! Ezek az automaták nem csalnak – hiszen a szalagokra festett ábrák adott sorrendjét nem lehet befolyásolni, a tárcsák megállása egy mechanikus gép esetén véletlenszerűnek tekinthetjük.

A tárcsák vizsgálatát legegyszerűbben úgy lehet elvégezni, hogy sorra vesszük a lehetséges megállási pozíciókat és elvégezzük a játékterv szerinti kiértékelést. Az összes kifizetett nyereményt egységnyi tétre vonatkoztatva meg lehet határozni a játék visszafizetési arányát.

Ahhoz, hogy megértsük, miért sikeres az egyik félkarú és miért sikertelen a másik, amikor a visszafizetési arányuk hasonló, a tárcsákat további vizsgálatnak érdemes alávetni!

Vegyük észre, hogy két tényező azonnal adódik, amit érdemes megjegyezzünk:

  • A folyamatos nyerési élmény illúziója (pénzcsörgés)
  • A majdnem nyertem élmények gyakorisága.
  • A folytonos manuális ingerlés élménye (bedob – húz – bedob)

Nyilván a technika fejlődésével (és most itt ugorjunk a jelenbe a képernyőn folyó játékok világába) ezek a lehetőségek megváltoztak, kiszélesedtek.

Megmaradt a pénzcsörgés élménye, a manuális cselekvés gombnyomásra változott – és kiszélesedett például a duplázó játékoknál – két gomb közül kell választani. Ez nyilvánvaló de nézzük tovább a lehetőségeket!

A videós megvalósításában bár a szalagok kiosztását is lehetne változtatni képernyőnként, de ez az általam megismert programokban nem járt út. Tulajdonképpen a fejlesztés az eredeti és bevált szalagok leprogramozásával indultak. Az így kapott játék élménye nyilvánvalóan hasonlított a régi mechanikus játékhoz.

Az első lényeges eltérések a mechanikus implementációkhoz képest

  • A nem nyerő de izgalmas (majdnem nyerő) kombinációk gyakoriságának növekedése
  • Bónusz (ingyenes) játékok megjelenése
  • Bizonyos események, kombinációk gyakoriság eloszlásának eltérése a véletlenszerű (normális) eloszlástól.

Szóval akkor mit is csinálnak a mai nyerőgépek azért, hogy “belehulljanak” a játékosok a gépbe?

Elsőként említeném a játékosok által csak “nyerő széria” elnevezésű élménycsoportot. Ennek megvalósítása viszonylag egyszerű, több szalagkészlettel rendelkezik a program és alkalmasan megválasztott időnként (játékszám eltelte után ) vált a szalagok között. Így például érdekesebb sok apró nyeremény véletlenszerű kiadása után átvált a gép nagy nyereményekben gazdag de kis nyereményekben szegény szalagra. Mindkét szalag elméleti visszafizetési aránya ugyanaz lehet, azonban a változékonyság és a mégis érzékelhető szakaszosság új, függőséget gerjesztő élményt ad a játékosnak. Az ilyen ciklikusság továbbá adja a játékosok másik kedvenc élményét, amit “uralom, kiismertem a gépet” élménynek is neveznek.

Másik ilyen fogás, amivel a videó játék implementációk élnek, a nem nyerő de érdekes kombinációk gyakoriságának emelése. Ilyen lehet például az öt tárcsás gépen megfigyelhető gyakoriság eltérés a következő két kombináció közt:

A ténylegesen nyerő BBBBX (négy egyforma és valami) és a negyedik tárcsán lévő B figura egy pozícióval eltolt helyzete (alatta vagy felette) a várt kétszeres gyakoriság helyett 3-3.5 szeres gyakoriságot mutatott az elemzett esetben.

A harmadik ilyen trükk, a bónuszjátékok megjelenésével a játékosok mazochizmusát teszi próbára. Ha minden véletlen lenne, akkor két ingyenes bónuszjáték közt játszandó játékok számát vizsgálva annak normális eloszlásúnak kellene lennie valamilyen várható átlagos érték körül. A valóság azonban teljesen más.

Ez a bónuszjáték gyakoriság valahogy így néz ki a kísérletek alapján:

Bónuszjáték gyakoriság statisztika
A képen egy bónuszjátékot is adó nyerőgép bónuszjáték kiadási gyakorisága látható.

A vizsgálat módszertana az volt, hogy számoltam hány játékot kell játszani a következő bónuszjáték eléréséhez. Ezeket csoportokba helyeztem a bal szélső oszlopnak megfelelően, majd megszámoltam hány tagja van az egyes csoportoknak. Így készítettem gyakoriság sűrűségi hisztogramot.

Vegyük észre, hogy a két kísérletben két bónuszjáték közt a legrövidebb játékmennyiség 5 illetve 7 játék volt, a legtovább pedig a második kísérletben 711 játékot kellett várni! És a gyakoriság nem a véletlen műve, ezt semmiképp sem lehet normális eloszlásnak nevezni!

Szóval, ennyi után látható minden értelmes ember számára, hogy ez az ipar mennyire kifinomult eszközöket használ, és mennyire van belső gátlása, érzékenysége a felelős játékszervezésre, a játékszenvedéllyel megvert emberek megmentésére.

Elmondhatom, hogy a nyerőgép egy jól megkonstruált pszichológiai fegyver más pénzének legális elszedésére. A szerencsejáték ipar jelenlegi szabályzását tekintve mindenki beláthatja, hogy mindez a lehetőség kevés kivételezettek előtt állami segítséggel nyitva lévő piac. És az ilyen piaci szereplők mondvacsinált felelős játékszervezése csak humbug. (Mert a valóság egy a kaszinókban használatos játékprogramból készített statisztika szerinti.) Az ilyen mélységű vizsgálat (egyáltalán nem mély, csak nem nyilvánvaló) már messze túl van azon a határon, amivel ezek a piaci szereplők valaha is foglalkoztak, vagy egyáltalán megértenek.

Remélem izgalmas volt az írásom, különösen ajánlom mindenkinek akit valaha is megérintettek a félkarú rablók. Kommentek jöhetnek!

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

Az első küzdelem

Az ember soha sem felejti el az elsőt. Így van ez mindennel, és mindenkivel. Történt egy szép napon úgy 1986 év elején ha jól emlékszem, hogy beleestem egy számítógép játékba és a zenéjébe. Nem kis utánajárásba került míg sikerült bakelit lemezen a YUGOTON kiadásban megszerezni a lemezt, és még az iskolai műhelyben használatos kék kabátom hátára is felrajzoltam a lemezborítóról és a játékból ismerős ábrát.

Szóval egy szép napon V. barátomhoz mentem számítógépezni és büszkén mutatta nekem ezt a programot eredeti műsoros kazetta kiadásban. A játék már korábban megvolt DD (Dinamic Duo) feltörésben, azonban volt egy játék – a repülős bombázós fali képből nyíló -, amit megérintve az a törés szénné fagyott.

Ekkor V barátommal elhatároztuk, hogy majd mi megmutatjuk, és kipróbáljuk a karmainkat ezen a kazettán.

Ez egy retró poszt, vezetett élménytúra az emlékeimben. Minden itt olvasható dolog 1986 környékén történt, amikor ilyesmire még semmilyen szabály sem vonatkozott. Jelen poszt célja az élmények megélése, szemléltetés és oktatás. Semmi egyéb. A tartalmakat képeket emulátorból mentetem ki, de minden helyen elmondom hogy annó hogy és miként jártam el. Az élmény szempontjából mindegy.

Szóval volt ez a műsoros kazetta, aminek betöltését elkezdve villant egyet, majd lefeketedett és zenélni kezdett, és már ment is a játék.

Az első nehézséget a “rögtöninduló” okozta. Ezt a szót “rögtöninduló” mi alkottuk V barátommal az olyan programokra, amik anélkül elindultak hogy bármit is csináltunk volna. Az ilyesminek a leküzdése a belépő egy ilyen feladatra. Annó két választásunk volt, vagy a COPY190 nevű programmal, ami más címre tölti be kazettáról a fájlt, mint ahova eredetileg töltődött, majd lemezre menti, vagy egy TR-DISKUS nevű program használata, ami kazetta bufferrel együtt mentette a programot két részben lemezre. Mi biztonság kedvéért ez utóbbit választottuk, így eljutottunk a lemezen tárolt és DISKDOCTOR programmal átírható loader kódjáig.

A kazetta buffer tartalma a fejléc beolvasása után
A kazetta buffer tartalma a fejléc beolvasása után

A képen látható az eredeti kezdőcím, és a kazetta buffer tartalma. A töltés 0x0316-tól tart a képernyő közepéig körülbelül, nem emlékszem meddig. Ez már tartalmazza a “rögtöninduló” vektorokat, ezért azt átírhatóvá kell tenni. Ez csak lemezen működik, ezért az átírás ott történt.

a tartalom beindulás előtt, betöltődés után.
A memória tartalma a “rögtöninduló” rutin indítására szolgáló vektorok kiemelve.

A “rögtöninduló” kipukkasztása után alapos vizsgálatnak vetettük alá a bootloader kódját, azonban a töltőprogramon kívül semmit sem találtunk: minden a következőkben betöltött programokra mutatott, azok pedig még a kazettán csücsültek.

Azonban azonnal szemet szúrt egy utasítás:

A program elindítása a bootloaderben
Minden titok kútforrása, a betöltött program indítócíme.

Ezután ide olyan megállító kódot írtunk, aminek a futását jól látunk a képernyőn és itt megállíthatjuk a programot.

A boot folyamat vége
Ez állítja meg a programot a resethez.

Ezt a jelenben emulátorból így végeztem el, akkor a rendelkezésre álló néhány bájt helyre DISKDOCTOR programmal írtuk be.

Figyeljük meg a bootloader program elindulását, lemásolja először magát 0x0200-ra, majd a következő blokkot egy bájttal eltolva tölti le. Ez azért érdekes, mert első blikkre azt gondolná az ember, hogy csak a lapcím változik, így az abszolút címzésű JMP utasítás saját magára 0x03f5 lenne. Ez persze hibára fut.

az ellenállás utolsó próbálkozása…

Szerencsére akkor is rájöttem, rájöttünk erre és alkalmasan átírva elindítottuk a program betöltését lemezről. Ez telerondította a képernyőt, majd indításra várt. Akkor is, most is ügyelve a képernyő mozdítatlanságára el-sys-eltük a programot. Kép lefeketedik, majd indul a töltés és a zene.

Az átírt loader indítása.

Eközben már azon gondolkodtunk, hogy hogyan fogjuk kipiszkálni a memóriából a még be nem indult programot. De erre V barátomnak már megvolt a módszere : az EPYX Fastload klón kártyájának monitorával a veremtárba (0x0100) a ROM memóriákat lelövő kódot írtunk (x01:=0x34) majd lemásoltuk az illető 16k-s szeletet 0x4000 re. a másolás után reset, majd a terület kimentése. Így négy betöltésből megvolt a teljes program memória.

közel a program indítás
A felesleges feliratok színmemóriás elfedése után a feliratok helyeit is feltölti a loader!

A memóriákat visszatöltve és elindítva a program elindult ! HEURÉKA, azonban az első meglepetés itt ért minket: a program egész életében csak a loader állítja be a videó szeletet és a színmemóriát, így a sprite animáció helyett csak kuszaság mozgása látszódott. Az azonban már nagy örömre adott okot, hogy a színmemóriában látszódott a képváltások háttere.

Nosza lementettük a színmemóriát és az IO beállításokat, és összetömörítettük a programot 0x0400-tól 0xffff-ig. Az utolsó bájtok is fontosak voltak, mert ezek vektorálták a megszakító rendszert.

Egy feljavított TMC (The Mercenary Cracker) tömörítőt használtunk, de a széttömörítés előtt még visszaállítottuk a színmemóriát és az IO beállításoktat. A széttömörítés idejére 0xd011 regisztert letiltottuk, így a feltört program szépen indult be. (a TMC crunchert azért kellett feljavítani, mert csak 208 blokkig bírt tömöríteni nekünk azonban ez kevés volt)

És mi ebből a tanulság?

Soha sem értettem meg, hogy ha már ilyen jó bootloadert írt a csávó aki ezt elkövette, akkor miért nem:

  • töltötte felül a 0-ás, 0x0200, 0x0300 lapokat, vagyis saját magát például úgy, hogy memória átfordulással (0xffff után átfordul, körbetölti a memóriát, egy ilyen játékot láttam annó nem is bírtunk hozzányúlni , ez volt a “The Young Ones”, de ez már egy másik történet.)
  • miért nem törölte a veremtárat, hogy oda ne lehessen kódot írni.
  • egyáltalán, miért jött vissza szubrutinból ide elindulni, azaz, miért nem később betöltődő turbóval beolvashatatlanná tett kódból indult el?

De mint minden ilyesmi bőven elavult az ISEPIC és társai megjelenésével. Maradt az élmény.

FGTH - the starting picture
Minden kész! játék a memóriában, közvetlenül elindulás előtt. Ugró cím 0x60aa

Igazából olyan katartikus élmény volt látni a beinduló programot, barátommal megélni ezt a munkát, néha bosszankodva egy szalagos LOAD ERROR miatt, hogy mind a mai napig megmaradt bennem az élmény. Meghatározó része lett az életemnek, semmi nem adott akkora lökést, boldogságot mint a reccsenő jég szava. És jég azért volt bőven ezen a programon hát még az ezután következőkön!

Ja és a sikerélmény! A Dinamic Duó elkúrta, nekünk meg sikerült!

Kategóriák
Egyebek, gépház, házirend stb. Maga az iparos. Történetek a múltból és a jelenből. Munkával kapcsolatos észrevételek, kérések, kérdések, egyelőre egy halomba, minden ami idefér Utazás, szabadidő és mindenféle érdekes dolog. Véleményem a világ dolgairól

Helló Világ!

Annak írok, aki itt jár. Ha tetszik ha nem, ennek a honlapnak a gazdája én vagyok. Nekem kell felelősséget viselni a törvények szerint.


Szabályok:
Az egészséges, építő, jobbító kritikát szívesen fogadom.


A kérdésekre, kérésekre, szívesen válaszolok, de ez a saját munkám terhére nem mehet.


Aki türelmetlen vagy zaklat, kitiltom.


Aki tiszteletlen azt kitiltom.

A számomra elfogadhatatlan, üzleti és/vagy magánérdekeimet sértő hozzászólásokat törlöm.

Ha valaki linkel engem, viszonossági alapon én is linkelem őt. Ez természetes, kedvenceimet a kedvencek menüben találhatják.


Ennyi.