eeu abc Alphabet and Languages - krcenov/RNS510-Map-Viewer GitHub Wiki
eeu.abc โ Alphabet / Supported-Language Table
Status: โ Cracked ยท 897 bytes ยท NOT_COMPRESSED
The smallest file on the disc, and its name describes its content exactly. Validated at full scale โ zero leftover bytes across the entire 803-byte body.
Layout
94-byte header, then:
uint16 LE text_len -- byte length (not codepoint count) of the UTF-8
character-repertoire string that follows
bytes chars -- text_len bytes of UTF-8
... 86 fixed 7-byte language-table records, back-to-back, no
trailer
Character repertoire
text_len (199) bytes of UTF-8 decode cleanly to 125 codepoints:
space, basic punctuation, digits 0-9, plain uppercase Latin A-Z, every
accented/extended Latin uppercase letter used by a European language on
this disc, the full uppercase Cyrillic alphabet, and a trailing NUL
terminator.
This is exactly the uppercase glyph set every place/road name on this
disc already uses (eeu.rd,
eeu.cty, etc. all store names in uppercase)
โ plausibly backing the firmware's on-screen spelling keyboard
(AESpellerType) and/or TTS input validation.
Language table โ cracked
The remaining 602 body bytes parse as exactly 86 fixed 7-byte records:
bytes[3] lang_code -- 3-letter code, mostly real ISO 639-2/B
uint8 flag_a
uint8 index -- a plain ascending 1..86 counter (record N's
own position โ not a cross-reference)
uint8 flag_b
uint8 index -- always equal to the first index byte
52 distinct language codes, mostly real ISO 639-2/B abbreviations:
bul (Bulgarian), cze (Czech), dan (Danish), dut (Dutch), eng
(English), fin (Finnish), fre (French), ger (German), gre
(Greek), hun (Hungarian), ice (Icelandic), ita (Italian), pol
(Polish), por (Portuguese), rum (Romanian), rus (Russian), spa
(Spanish), swe (Swedish), tur (Turkish), ukr (Ukrainian), wel
(Welsh), arm (Armenian), aze (Azerbaijani), baq (Basque), bel
(Belarusian), mne (Montenegrin), plus und โ ISO 639-2's own real
"Undetermined" code. A handful of non-standard-looking codes also appear
(aaa, bet, grt, mat, rst, sct, ukt) โ not identified against
any standard list, possibly disc/vendor-specific extensions.
(flag_a, flag_b) โ CONFIRMED, a much later session, via real embedded data
Exactly 3 distinct pairs occur in the whole file โ no other combination appears:
| Pair | Count | Notes |
|---|---|---|
(2, 2) |
42 | Most common โ the default most languages get; also a real "plain name" slot (confirmed via eng) |
(4, 8) |
23 | CONFIRMED: phonetic/pronunciation-transcription slot |
(1, 5) |
21 | Also a real "plain name" slot (confirmed via bul/tur/gre) |
32 of the 52 languages get more than one record (up to all 3 pairs โ e.g.
pol and scr each get all three); the other 20 get exactly one.
Found via mp0's own embedded district-name table:
some entries near the Bulgaria/Turkey and Bulgaria/Greece border tiles
pair a plain name with a syllable-broken PHONETIC transcription using
the next language-table index up, joined by $ โ e.g.
80^UZUNHACI$81^u|zun|ha|"dZ1 and, cleanest of all,
24^BULGARIA$25^bVl|"ge@|rI|@ (a real, correct IPA-ish rendering of
the actual ENGLISH pronunciation of "Bulgaria") and 24^TURKEY$25^"t3|ki.
Cross-referencing the index pairs used against this table directly:
tur=(80,81)=(1,5)+(4,8)eng=(24,25)=(2,2)+(4,8)gre=(38,39)=(1,5)+(4,8)
(4, 8) is now CONFIRMED, directly and repeatedly, as the
per-language phonetic/pronunciation-transcription slot โ not a guess
anymore. (1, 5) and (2, 2) both serve as "plain display name" slots
(confirmed via real entries using each, e.g. 24^SOFIA AIRPORT CENTER
at eng's (2,2) index); which of the two a given language gets isn't
yet explained.
Reader code
research/abc_reader.py โ read_abc().