2011. január 1., szombat

ELSŐ PARAMÉTERES EFFEKT!!!

Húúú, de rég írtam már erről, de persze volt más dolgom is...
Naszóval pontokba szedve a "mérföldköveket":
- http://www.qsl.net/iz7ath -nek hála olcsó alkatrészekből összetákolt eprom-programozóvla kiolvastam a teljes effektproci-kódot egy 27c512-es plcc otp eprom-ból.
- Megrajzoltam a dsp-board kapcsolási rajzát.
- kis módosításokkal és saját programmal megoldottam, hogy az eprom mellett az SST27SF512-es flash-t is írja a programozó (teljesen olyan, mint a sima eprom, de egyszerűen és gyorsan törölhető, valamivel gyorsabban írható is)
- a kapcsolási rajzból kiderül, hogy egy kicsit próbáltak trükközni: 2 adatvonalat megcseréltek (cryptographic rulz :D ) -- írtam egy pici progi-t, ami átfordítja ezeket
- ALL HAIL TO THE MIGHTY IDA!!!
(de most komolyan, az Interactive Disassembler nélkül szinte nincs értelme próbálkozni ilyen dolgokkal)
- hosszú idegőrlő munkával a vezérlő-proci (későbbiekben csak 80c32) jelentősebb szubrutinjait sikerült megérteni, paramétereket és működést leirkálni (elég jól dokumentált cpu, egyszerű infókat találni róla)
- a kódban talált sztring (.. BEHRINGER DPM5 FOR DJX SERIES 1.03 ..) alapján sikerült a kapcsolatot felvenni az egyik fejlesztővel, aki némi rábeszélés után volt olyan rendes, és eljuttatta nekem a DSP proci leírásának egy példányát (TMS57002) (mivel lehet, hogy problémát okozhat neki, inkább nem említem a nevét, de attól még határtalanul hálás vagyok neki ezért!)
/ némi használható kódot találtam eme DSP-hez még a MAME forráskódjában is - mamedev.org - (viszont a kód írójával sajnos nem sikerült kommunikálni)
/ezen kívül csak egy nagyon felületes pdf-et találtam még a prociról, semmi többet
- így a könyv segítségével sikerült kicsit értelmesebbre pofozni a MAME TSM disassembler-ét
- az eprom ugye egyszerre nem csak 1, hanem mind2 processzor kódját tartalmazza, amit a 80c32 felügyel, illetve tartja a kapcsolatot a külvilággal is (7seg kijelző, rot-enc, efx-start) valamint vezérli a DSP-t is
- miután kellőképp megértettem a 80c32 némely rutinját, már képes voltam különszedni a DSP kódokat (amik 2 részből állnak: egy program, ami max 256db 24bites word (+ előtte 2db 24bites config word), illetve szintén 256db, de 32bites koefficies-tartalom (gyakorlatilag változók, és "konstansok"...) )
- tervek és DSP kódok írása..
- 80c32 kód írása (felhasználva sok gyári szubrutint) M-IDE segítségével
>no ezt picit részletezem: az ide nem valami jó.. kegyetlenül akadozik a text-editor-ja (minél nagyobb a fájl, annál inkább) és gyakran dob hibaüzeneteket is; macerás, hogy a mnemonikokat csak nagybetűsen fogadja el; illetve a hex-értékeket is kell faragni (nem csak a betűvel kezdődőek elé kell 0-t írni), de mindezek ellenére legalább ingyenes, és teszi a dolgát, sőt a tartalmazott TS Controls Emulator 8051 Evaluation verziója a fapados szerkezete ellenére nagyon nagy segítség a hibakeresésben

Tehát minden készen áll(t), hogy megszülessen az első progi: persze, hogy nem ez volt az ami leginkább érdekelne, de kezdésnek a legegyszerűbb effektet kódoltam le - Trans - vagyis x ideig átengedi a zenét, majd x ideig nem.. és így tovább.
Egyedüli paramétere (először), csak az x (később persze még beleírtam, hogy lehessen "reset-elni" az időpontot). Ez alig pár sor TMS/DSP nyelven, nem probléma..
A probléma ott kezdődött, hogy a 80c32-nek is kellett kódot írni.. asm-ben ... és nem is keveset... Még nem sikerült minden részét megértenem, amiben biztos voltam/vagyok a DSP- ,és eeprom- (amiben a legutóbbi effekt kódja van) kezelést megvalósító rutinok. No de egy fontos dolog még kellene: _kapcsolat a külvilággal_.
Ezt ahogy sikerült kihámozni, az időzítő megszakításon keresztül történik. Viszont elég nehezen érthető a dolog, szal nincs teljesen kiókumlálva még, de pár próbálkozás után sikerült működésre bírni legalább a rot-enc-et és a led-kijelzőt.
Még a végén volt egy apróbb "móka", mivel a DSP már átengedte a zenét, de nem szakítgatta meg.
(lehetne kérdezni, miért a DSP dolga ez a megszaggatás, holott a 80c32 is képes egy mute vonalat kapcsolgatni (DSP/AD-DA codec)? A válasz pedig hogy a ez a cpu azon túl, hogy lassú (többnyire 12-24 clk/cmd vs. DSP 1 clk/1-2 cmd (kivéve feltételes ugrás, az 3)), mégcsak nem is lehet szépen időzíteni.. és különben is, arra van a DSP :P )
Miután azt a hibát is kiküszöböltem, most a kijelzőn hexában kirja 0-tól 255-ig azon értéket, ami alapján a hosszt végül kiszámolja: érték(0-255)*100+1 = x (vagyis a félperiódus)

Legvégül egy pici tunning: mivel a rot-enc tekerője elég nagy bumszli, a tengely csupaszon meg csúszik, és van rajta egy vályat, amibe meg lehet akadni, én egy tollkupakkal helyettesítettem. :)

Videó, leírás, és segédprogik hamarosan...

B.U.É.K. mindenkinek!

Nincsenek megjegyzések:

Megjegyzés küldése