Jak fungují BNL soubory pro Albi tužku

Po Vánocích se na jednom hardwarovém fóru objevil dotaz, jak vlastně Albi tužka funguje. Jeden z prvních odkazů vedl sem, na článek Táty Geeka „Jak funguje Albi tužka“. Text rozebírá, co tužka obsahuje uvnitř, jakým způsobem jsou konstruované kódy a odkaz na německý projekt TipToiReveng, který rozebírá podobný, ale dostatečně jiný systém pera a knih. V české kotlině se nic nevyskytovalo, a nebylo zřejmé, jak hluboké úpravy německého projektu by byly potřeba, kdyby člověk chtěl vyrobit vlastní BNL soubor nebo úplně celou knihu.

Proč?

Přece proto! Jak je u šťourů obvyklé, tohle je dostatečný důvod k vrtání se v něčem zajímavém. Ačkoli v navazujících debatách bylo zřejmé, že německá a česká tužka používá jiné soubory, a tudíž nelze jejich nástroje přímo využít, naivně jsem usoudil, že bude třeba pár drobných úprav a bude to. Stephen King by teď napsal něco takového jako „a to bylo naposledy, kdy ho někdo spatřil živého“. Naštěstí, i když to nešlo zcela hladce, až tak daleko to nezašlo.

Hacking a cracking

Rozbít cizí formát, bývá různě složité a někdy prakticky nemožné. Stačí, aby někde byla použita asymetrická šifra a už se bez crackování vlastního firmware tužky nelze dostat dále. Proto před tím, než jsem se do něčeho pustil, jsem provedl důkladný průzkum terénu.

Existují ještě jiné BNL soubory?

Stáhl jsem si několik souborů BNL od Albi, ze kterých bylo na první pohled zřejmé, že neodpovídají německému TipToi. Proto jsem použil silné google-fu, abych pohledal jiné BNL soubory v cizině. A už tady jsem narazil. Systémů pro tyto pera je vícero, prakticky všechny jsou vyrobeny v Číně a Albi u nás dává dohromady český obsah – není to původní výrobek. V cizině je souborových formátů pro tato pera více. Například zmiňovaný německý GME, nalezl jsem AOG, pro německé pero Ting je ještě jiný formát apod.

Existuje nějaká jiná verze formátu BNL, například zde, zde, zde nebo zde. Ta se nám ale nehodí.

Albi vydává knihy na 7 trzích: CZ, SK, PL, RO, HU, SI a HR. Co se týče kompatibilních ne-Albi BNL souborů, našel jsem soubory ke stažení jen tady.

Firmware Albi tužky

Dál jsem si řekl, že se podívám na firmware. Z českých stránek zmizelo, na slovenských je, ale temné a špinavé hlubiny uloz.to vydaly dvě různé verze pro obě verze hardware, jak pro čipy Sonix SNP70032, tak pro SN95300FG. Další pak vytáhl Táta Geek z Archive.org.

starší firmware pro Albi tužku
Takto vypadala část webu Kouzelnéčtení.cz v roce 2015

Z popisu čipů plyne, že používají nějaké vlastní 16bitové DSP jádro zvané S9KE, pro které jsem nenalezl žádné nástroje – kromě tohoto experimentálního. Bohužel, zatím jsem nebyl úspěšný ve zjištění, co přesně firmware dělá – ačkoli je zřejmé, jak se natahuje do paměti a odkud startuje, vlastní chip obsahuje i 64KW ROM s kódem na obsluhu periferií. Sice existuje dokumentace, které funkce ROM obsahuje, i jaké jsou parametry, nejsou k dispozici hlavičkové soubory, které by dokázaly „spojit“ jednotlivé adresy ROM se jmény těch funkcí. Z analýzy je zřejmé, že jsou i mnohé nedokumentované runtime funkce pro vlastní běh programu. Takže jsem sice byl schopen rozluštit nějaké názvy uložených písní, rozřezat většinu firmware na mp3 soubory, ale nikam dál jsem nepokročil. Další podrobnosti jsou v dokumentaci firmware. Tento popis přikládám jako samostatný dokument pro zvídavé.

Když to nešlo přes firmware v tužce, pustil jsem se do analýzy samotných souborů. Ze začátku jsem zkoumal jen stažené soubory, později jsem přidal i zkoušení upravených BNL souborů ve vypůjčené tužce.

Zjištění z analýzy BNL souborů

Tato zjištění zde budu publikovat postupně. Na základě analýzy jsem vytvořil popis formátu a napsal jednoduchý skript, který umí rozkrájet BNL soubor na prvočinitele. Ten jsem potřeboval vyzkoušet. Stáhl jsem tedy všechny BNL soubory a prohnal je tímto skriptem. V současné době se už mému popisu nevzpírají žádné soubory BNL, i když řada hodnot má neznámý význam a nedá se vyloučit, že systém toho zvládá více, než Albi používá.

Generátor BNL souborů

Na základě výstupu „disassembleru“ jsem napsal jednoduchý generátor. Ten ze vstupních souborů seskládá zpět BNL soubor, který lze nahrát do tužky.

Generátor OID kódů a jejich tisk

Při pokusu o tisk OID kódů pomocí nástrojů od TipToiReveng jsem zjistil dvě mrzutosti. Kontrolní součet v deváté tečce neodpovídá německému systému TipToi, ale systému Ting (horní bit je invertovaný). A pak jsem při „měření“ výtisků a scanů zjistil, že Albi kódy jsou větší. Německý kód má 1 mm včetně mezer, český 1,35 mm.

Albi OID kód a jeho rastr 1,35mm
Albi OID kód a jeho rastr 1,35mm
Albi OID kód, pokus o tisk na laserové tiskárně 600 dpi
Albi OID kód, pokus o tisk na laserové tiskárně 600 dpi

Generátor jsem upravil, ale s tiskem jsou potíže. Rozhodně to moje inkoustovka nedává vůbec, i když papírově má rozlišení podstatně vyšší, než požadovaných 1200dpi. Body jsou chlupaté a každý jinak velký.

Ani laserovka v místním copycentru ty tečky nevytiskla vůbec. Obsluha bohužel neovládala pokročilá nastavení, takže ani více pokusů nedokázalo body vytisknout. Tím myslím, že se jednalo o zásah ovladače, který úplně tečky vypustil z tisku. Nevylučuji tím možnost, že je někde v ovladači nastavení, přes které by tisk prošel. Bylo ale ověřeno na černobílé laserovce Samsung M2070, že generátor kódů funguje a tužka výtisky přečte.

Závěr a nedořešené otázky

Závěr je tedy mírně optimistický. Soubory lze rozkrájet, lze je zpátky složit, zvukové soubory jde nahradit a měla by jít tisknout vlastní kniha.

Nějaké nedořešené body ještě zbývají:

  • Německý systém, ač starší, vypadá, že obsahuje nějakou inteligenci. Je systém použitý v české tužce hloupý nebo Albi jen nevyužívá všechny jeho schopnosti, z důvodů obchodních či licenčních? Nebo mají firmware, který nic chytřejšího neumí (ale mohl by)?
  • Soubory s firmware mám k dispozici – obsahují stejné copyrighty firmy Chomptech, jako německé tužky. Většina firmware jsou jen MP3 soubory, většina z nich jsou neznámé čínské zvuky (neznámé pro mě, ale kdybyste měli čínské kamarády…), zbytek české systémové zvuky. Jak jsem psal výše, analýza kódu selhává na nedostupnosti informací o kódu v ROM – ten potřebuji, abych ověřil, že funkčnost, kterou používá Albi ve svých knihách, je jediná možná.
  • Ve firmware jsou české zvuky pro kalkulačku – jak se tato funkčnost z pera vyloudí?
  • Také jsou tam odkazy na souborové přípony TN2 a BMD. Ví někdo, co to je?
  • MP3 soubory jsou zašifrované, sice jsem to obešel, ale opravdu by mě zajímalo, jak je konstruován dekodér těch MP3 souborů, který jsem nahradil 512 bajtovou dešifrovací tabulkou. Když jsem se pokusil zaměnit šifrovací klíče při generování souborů, zjistil jsem, že to nelze. Po sérií pokusů bylo zjištěno, že musí platit jediná podmínka – bajt ze 4. bajtu hlavičky a bajt ze 0x140. bajtu hlavičky musí dát součet 0xF5. Nemám nejmenší ponětí proč. Tím pádem lze vygenerovat zcela nezašifrovaný soubor. Při dalších pokusech se ukázalo, že to není úplně pravda – v nezašifrovaném souboru funguje vše, kromě kvízů – na jejich rozpohybování je třeba aspoň jeden bit zašifrovat.

4 názory na “Jak fungují BNL soubory pro Albi tužku”

  1. Strojový a lehce upravený překlad tabulky textu v první části firmware (v souboru „albituzka_firmware.pdf“):

    0 Tanec č. 11 – Chopin
    1 Píseň jara
    2 Šepoty podzimu
    3 Sněhová vločka Drift
    4 Klavírní sonáta (Passion)
    5 Klavírní sonáta č. 4
    6 Lisztova serenáda
    7 Lodní píseň – Čajkovskij
    8 Kus na rozloučenou
    9 Variace na malou hvězdu
    10 Maďarský tanec č. 5
    11 Sonáta měsíčního svitu
    12 Dítě jde spát
    13 Dream of Love (klavírní verze)
    14 Balada pro štěňata – Chopin
    15 Pochod G dur – Schubert
    16 Preludium Dešťová kapka dur D
    17 Klavírní sonáta č. 15
    18 Klavírní koncert č. 1
    19 Improvizační fantazie
    20 Kánon D dur
    21 Na památku lásky – Richard Clayderman
    22 Impromptu
    23 Toccata – Bach
    24 Symfonie zděšení
    25 Šavlový tanec
    26 Dívčí modlitba
    27 Rondo pro housle dur
    28 Suita F dur pro vodní hudbu
    29 Klavírní koncert č. 1
    30 Předehra Carmen – Bizet
    31 Meditace
    32 Květinová balada
    33 Hudební večerní tanec
    34 Bell Tune
    35 Klavírní sonáta č. 4
    36 Koncert pro mandolínu
    37 Symfonie č. 40, kapitola 1
    38 Recitál pro dívku z Aletownu
    39 Variace na pstruha
    40 Zpěvný pochod
    41 Usměvavá polka
    42 Valčík č. 2
    43 Koncert č. 2 pro příčnou flétnu
    44 Kozácký lidový tanec
    45 Mozartova serenáda
    46 Adagio E dur pro housle
    47 Symfonie č. 9 e moll
    48 Serenáda D dur
    49 Love Song
    50 Aleluja
    51 Koncert A dur pro jeden jazýček
    52 Suita č. 2
    53 Symfonie č. 1 – Čakovskij
    54 Gavotta
    55 Předehra
    56 Klarinetový koncert
    57 Tanec kuřat
    58 Balada pro štěňata – Chopin
    59 Symfonie č. 101
    60 Symfonie v polích
    61 Čínský tanec
    62 Pochod Ges dur – Schubert
    63 Destiny
    64 Preludium dešťových kapek ve velkém D
    65 Maďarský tanec z Labutího baletu
    66 Klavírní koncert č. 20
    67 Klavírní sonáta č. 15
    68 Braniborský koncert G dur
    69 Houslový koncert č. 5 – Mozart
    70 Adriana u vody
    71 Tanec malé labutě – Čajkovskij
    72 Vzpomínky na dětství
    73 Turecký pochod
    74 Óda na Pannu Marii
    75 Chopinova serenáda
    76 Romantika 6
    77 Sen o lásce
    78 Dudilova serenáda
    79 Eine Kleine Nachtmusik – Haydn
    80 Impromptu Fantasia
    81 Andělská serenáda
    82 Humor
    83 Moonlight (remixovaná verze)
    84 Pièce de résistance – Pièce de résistance
    85 Serenáda pro smyčce Kapitola 1
    86 Toselliho serenáda
    87 Serenáda pro smyčce G dur
    88 Serenáda pro smyčce Kapitola 4 5
    89 Memorial
    90 Sonáta měsíčního svitu
    91 Chvála Boha přírody
    92 Ukolébavka – Mozart
    93 Koncert lásky
    94 Jaro
    95 Fantasia
    96 Když mne stará matka zpívat učívala
    97 Menuet G dur
    98 Jaro čtvrté třídy 1. část
    99 Španělská serenáda – Bizet
    100 Serenáda pro smyčce ve druhé větě
    101 Brahmsova serenáda
    102 Scény z dětství
    103 Dítě usíná
    104 Menuet
    105 Měsíční svit – Debussy
    106 Pro Alici
    107 Radost z lásky
    108 Krásná flétna
    109 Šepoty podzimu
    110 Dérigueurova serenáda
    111 Óda na radost
    112 Labutí jezero
    113 Modrá láska
    114 Modrý Dunaj
    115 Šípková Růženka

    1. Dík, dokument jsem zaktualizoval – těch názvů je tam okolo 3500, ale jsem si téměř jist, že firmware ony skladby neobsahuje. Podle krátké analýzy to vypadá, že OIDy 54001-57674 by mohly ty písně nějak vyvolávat, ale pravděpodobně si pro ně pero sáhne na nějaký soubor s pětimístným číslem a příponou .tn2. Nic jsem k tomu nikde nenašel, ani ty soubory.

  2. Pár detailů k OID kódům:

    – nejstarší varianta OID_Code_V1.0 se už pravděpodobně nikde v nových zařízeních nepoužívá (rozteč ~0,5 mm x ~0.42 mm, maximální rozsah kódů 0 – 4096). Dekodér SN9P700.

    – zmiňovaný „německý“ je nejspíš varianta OID_Code_V1.5 (rozteč 1 mm, maximální rozsah kódů 0 – 15000). Datové soubory jsou většinou s příponou GME. Paradoxně to není upgrade, ale jde o downgrade typu V2.0, low-cost dekodér SN9P601xx uveden někdy kolem roku 2008.

    – Albi používá verzi OID_Code_V2.0 (rozteč dle datasheetu 1.3 mm, maximální rozsah kódů 0 – 65535, lze rozšířit až na 262144). Datové soubory jsou s příponou BNL. Dekodér SN9P701x uveden kolem roku 2006, novější (low-cost) typ SN9P620xx pak kolem 2010 (náhrada bez potřeby změny zapojení plošného spoje).

    – existuje i verze OID_Code_V3.0, přesnější detaily neznám, ale datové soubory s příponou AOG by měly být k nim.

    Jelikož je u starší verze Albi tužky použit dekodér SN9P700, tak předpokládám, že do ní nejdou nahrát novější knížky používající OID_V2.0. Pokud ano, tak je pravděpodobně dekódovací program v té již „neveřejné“ aktualizaci firmware.

    1. Albi používá jistě konzistentně OID 2.0. Použité čipy jsou SNP70032 a SN95302, tj. nejsou to samostatné dekodéry, ale SoC. Ve firmware není nikde žádná konverzní tabulka OID kódů, ty získává SoC už přímo z dekodéru.
      Upozornění: Zde je pojem firmware zamlžen – firmware je to, co dodává Albi jako vlastní „program pro tužku“. V čipech samotných je zabudováno 64KB ROM s kódem, tento není veřejně dokumentovaný, ani nikde přístupný (dle mojich zjištění)

Diskuze

Vaše e-mailová adresa nebude zveřejněna.

Scroll to Top