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().