firm6600v5

Document Sample
firm6600v5 Powered By Docstoc
					Firmware van de DVX-6600 Yamada (MT1389DE based) ontleed.



Inleiding ..................................................................................................................................... 2
Structuur van de firmware .......................................................................................................... 2
8032 blok .................................................................................................................................... 3
   Versie blok ............................................................................................................................. 3
ARM blok ................................................................................................................................... 5
   ARM bootstrap code .............................................................................................................. 5
   Eerste ingepakte ARM blok ................................................................................................... 6
   Tweede ingepakte ARM blok ................................................................................................ 7
DSP blok ................................................................................................................................... 9
DATA index blok ..................................................................................................................... 12
   Data blok 1 - OSD blok ........................................................................................................ 13
     Header .............................................................................................................................. 13
     OSD blok 1 ....................................................................................................................... 13
     Een Graphic blok .............................................................................................................. 14
     Een FON blok................................................................................................................... 15
     Uitleg 2 kleuren font (=type 0) ......................................................................................... 16
     Uitleg 4 kleuren font (=type 1) ......................................................................................... 17
     OSD blok 2 ....................................................................................................................... 22
   Data blok 2 - MPEG blok ..................................................................................................... 24
     Header .............................................................................................................................. 24
     MPEG plaatje ................................................................................................................... 24
   Data blok 3 - Data blok ........................................................................................................ 25
   Data blok 4 - Sound blok...................................................................................................... 25
   Data blok 5 - Kodak blok ..................................................................................................... 25
Checksum ................................................................................................................................. 26
Display aan de voorkant van de speler ..................................................................................... 27
Map van de firmware file ......................................................................................................... 29
Hardware .................................................................................................................................. 30
Inleiding
Als basis is de firmware van de DVX-6600 van Yamada genomen, de ZDVX6600.BIN uit V5
firmware!!), die precies 1317860 bytes groot is.
Alle adressen en offsets zijn hexadecimaal. Een offset start met een + teken.
Voor het bekijken van de firmware gebruik ik UltraEdit omdat het de inhoud zowel in hex als
ascii weergeeft.

Voor de juistheid van dit stuk sta ik niet in, gebruik is voor eigen risico.
      augustus1957 (at) hotmail.com              (aka lisatv)
      November 2004


Structuur van de firmware
8032 blok
       Versie blok
ARM blok
DSP blok
Data blok
       OSD (On Screen Display) blok
       MPEG blok (bevat de achtergrond plaatjes van de OSD)
       Data blok
       Sound blok
       Kodak blok
CRC32 checksum

Je kan deze structuur zien m.b.v. MTKReMaker , die op het web te vinden is. Na het lezen
van dit stuk weet je voor een deel hoe MTKReMaker de firmware interpreteert!.

De belangrijkste ingang in de firmware is adres 200, daar starten de verwijzingen naar diverse
blokken.

200 – 202 Start van ARM blok
203 – 205 Start van Data blok
206 – 208 Start van ARM blok, idem als 200 – 202
209 – 20b Start adres in RAM van ARM coding
20c – 20e Start van DSP blok

00000200h: FC B2 04 AC 83 0D FC B2 04 B8 01 00 CC E0 09 00

Start ARM blok = 0004b2fc
Start Data blok = 000d83ac
Start DSP blok = 0009e0cc
8032 blok
De 8032 is een 8 bits processor, adresseert met 16 bits en kan 64KB op 1 moment adresseren.
D.m.v. bank switching kan die toegang krijgen tot andere 64KB blokken.

In dit blok zit tevens het versie blok.

Het 8032 blok loopt door tot waar het ARM blok begint (op 4b2fc, zie verderop in dit stuk).

Er zijn 5 8032 processor blokjes:
1       00000 t/m     0ffff               64KB
2       10000 t/m     1ffff               64KB
3       20000 t/m     2ffff               64KB
4       30000 t/m     3ffff               64KB
5       40000 t/m     4b2fb

Het begin van elk blok is identiek, bevat coding voor exception processing , bank switching
enzv.

Range/Bank     0               1                 2          3            4
0-1ff          equ             equ               equ        equ          equ
6 x 3 bytes    dif             dif(ff)           dif(ff)    dif(ff)      dif(ff)
11 bytes       equ             equ               equ        equ          equ
11 bytes       dif             dif               dif        dif          dif
-13f4          equ             equ               equ        equ          equ
-1991          dif             dif               dif        dif          dif
-26f0          equ             equ               equ        equ          equ
-eind          dif             dif               dif        dif          dif

Voor bankswitching, zie www.keil.com C51

Bestaat uit:
+0228 ?B_BANK0 t/m ?B_BANK7
+02E8 _SWITCHBANK
+02E9 ?B_SWITCHBANK_A
+02EF t/m +10E6 Transfer table (596 routines)

+2700 ?B_SWITCH0 t/m ?B_SWITCH7

Versie blok

Dit blok herken je aan de .BIN tekst en dan ga je een stukje terug.

+0 de versie
+4 sub versie
+8 8032 versie
+c FirmwareID
+d Firmwarefile
00042c79h: 05 00 03 05 0B 00 00 04 05 00 03 05 00 5A 44 56 ; .............ZDV
00042c89h: 58 36 36 30 30 2E 42 49 4E 00                   ; X6600.BIN.


Version        05.00.03.05
Sub-Ver        0B.00.00.04
8032           05.00.03.05
Firmwarefile   ZDVX6600.BIN
ARM blok
De ARM processor is een RISC processor met 2 instructiesets ( ARM & Thumb) en DSP
extentions. Little Endian in deze situatie.

Dit deel bestaat uit een Bootstrap blok gevolgd door 2 blokken die ingepakt zijn m.b.v. de
LZHUF methode.

Het bootstrap blok wijst naar ingepakte blokken 1 en 2.


ARM bootstrap code

+0 de ARM code, start met exception vectors
+20
+24
+28
+2c grootte van alle 3 de ARM blokken bij elkaar
+30 aantal ingepakte blokken
+34 offset naar eerste ingepakte blok
+38 offset naar tweede ingepakte blok
+3c allemaal nullen, einde tabel
+40 vervolg ARM code

0004b2fch:   0E   00   00   EA   0D   00   00   EA   0C   00   00   EA   0B   00   00   EA
0004b30ch:   0A   00   00   EA   00   00   A0   E1   08   00   00   EA   07   00   00   EA
0004b31ch:   B8   01   00   00   01   00   00   00   B8   3A   00   00   D0   2D   05   00
0004b32ch:   02   00   00   00   B8   3A   00   00   24   0B   02   00   00   00   00   00

4b2fc ARM code, start met exception vectors.
4b31c is een laad adres ??
4b320 aantal boot blokken is 1
4b324 size of boot blok is 3ab8
4b328 totale size ARM blokken is 52dd0
4b32c aantal ingepakte blokken is 2
4b330 offset eerste ingepakte blok is 3ab8 , begint dus op 4b2fc+3ab8=4edb4
4b334 offset tweede ingepakte blok is 20b24, begint dus op 4b2fc+20b24=6be20
4b338 nullen, einde tabel
4b33c vervolg ARM code
4edb4 Eerste ingepakte ARM blok
6be20 Tweede ingepakte ARM blok

Start ARM blok + totale size = 4b2fc+52dd0=9e0cc = het begin van het DSP processor blok.

Begint netjes op adres 0 met de 8 exception vectoren.
ROM:00000000                     B     loc_0_40
ROM:00000004                     B     loc_0_40
ROM:00000008                     B     loc_0_40
ROM:0000000C                     B     loc_0_40
ROM:00000010                      B   loc_0_40
ROM:00000014                      NOP
ROM:00000018                      B   loc_0_40
ROM:0000001C                      B   loc_0_40

ROM:0000002C                  number       size of all ARM blocks
ROM:00000030                  number       numer of compressed ARM blocks
ROM:00000034                  address      first compressed ARM block
ROM:00000038                  address      second compressed ARM block
ROM:0000003C                  number       zeroes

Bevat strings zoals:
               DCB "Invalid Operation",0
               DCB "Divide By Zero",0
               DCB "Overflow",0
               DCB "Underflow",0
               DCB "Inexact Result",0
               DCB ": Heap memory corrupted",0
               DCB "Unknown signal",0
               DCB "Abnormal termination",0
               DCB "Arithmetic exception: ",0
               DCB "Illegal instruction",0
               DCB "Interrupt received",0
               DCB "Illegal address",0
               DCB "Termination request",0
               DCB "Stack overflow",0
               DCB "Redirect: can't open: ",0
               DCB "Out of heap memory",0
               DCB "User-defined signal 1",0
               DCB "User-defined signal 2",0
               DCB "Pure virtual fn called",0
               DCB "C++ library exception",0
               DCB "MT1369 RESET",0


Eerste ingepakte ARM blok

Na uitgepakt te zijn uiteraard.

Begint netjes op adres 0 met de 8 exception vectoren.

Bevat strings zoals:
               DCB "Abnormal termination",0
               DCB "Arithmetic exception: ",0
               DCB "Illegal instruction",0
               DCB "Interrupt received",0
               DCB "Illegal address",0
               DCB "Termination request",0
               DCB "Stack overflow",0
               DCB "Redirect: can't open: ",0
               DCB "Out of heap memory",0
               DCB "User-defined signal 1",0
               DCB "User-defined signal 2",0
               DCB "Pure virtual fn called",0
               DCB "C++ library exception",0

Tweede ingepakte ARM blok

Na uitgepakt te zijn uiteraard.

Bevat strings zoals:
FileTyp
               DCB "DVDVIDEO-VTSDVDVIDEO-VMG",0
               DCB "ENTRYVCD",0
               DCB "ENTRYSVD",0
       0       DCB "AC3",0
       1       DCB "MP3",0
       2       DCB "MP2",0
       3       DCB "MP1",0
       4       DCB "WAV",0
       5       DCB "JPG",0
       6       DCB "MLP",0
       7       DCB "WMA",0
       8       DCB "ASF",0
       9       DCB "MPG",0
       A       DCB "DAT",0
       B       DCB "VOB",0
       D       DCB "DSD",0
       9       DCB "MPE",0
       9       DCB "M1V",0
       9       DCB "M2V",0
       5       DCB "JPE",0
       C       DCB "AAC",0
       9       DCB "MPEG",0
       5       DCB "JPEG",0
       E       DCB "PMF",0
       F       DCB "CDA",0
       12      DCB "AVI",0
       12      DCB "VID",0
       12      DCB "DIVX",0
       13      DCB "QT",0
       13      DCB "MOV",0
       13      DCB "MP4",0
       14      DCB "M4V",0
       15      DCB "DST",0
       16      DCB "OGG",0
       16      DCB "OGM",0
       17      DCB "RA",0
       17      DCB "RM",0
       17      DCB "RAM",0
17   DCB "RMM",0
17   DCB "RMVB",0
DSP blok
DSP = Digital Signal Processor
+0    Header = Versie tekst, 32 bytes
+20 Body bevat
      Versie nummer, 4 bytes
      Offset tabel naar de DSP blokken
              Offset naar Start van het DSP blok, relatief aan Body, in eenheden van 4 bytes
              Lengte van het DSP blok, in eenheden van 4 bytes
      Het DSP blok zelf.

0009e0cch:   24   52   65   76   69   73   69   6F   6E   3A   3A   20   32   20   20   20 ; $Revision:: 2
0009e0dch:   20   20   20   20   20   20   20   20   20   20   20   20   20   20   20   24 ;                 $
0009e0ech:   03   03   01   27   B0   E8   00   00   78   00   00   00   00   40   00   00
0009e0fch:   78   40   00   00   A0   00   00   00   18   41   00   00   62   01   00   00
0009e10ch:   7A   42   00   00   0F   0A   00   00   89   4C   00   00   CD   00   00   00
0009e11ch:   56   4D   00   00   7E   01   00   00   D4   4E   00   00   23   04   00   00
0009e12ch:   F7   52   00   00   DA   1F   00   00   D1   72   00   00   2A   13   00   00
0009e13ch:   FB   85   00   00   00   00   00   00   FB   85   00   00   DF   08   00   00
0009e14ch:   DA   8E   00   00   00   00   00   00   DA   8E   00   00   E4   11   00   00
0009e15ch:   BE   A0   00   00   18   08   00   00   D6   A8   00   00   18   0A   00   00
0009e16ch:   EE   B2   00   00   4B   0A   00   00   39   BD   00   00   C2   09   00   00
0009e17ch:   FB   C6   00   00   00   00   00   00   FB   C6   00   00   EF   0A   00   00
0009e18ch:   EA   D1   00   00   20   0B   00   00   0A   DD   00   00   00   00   00   00
0009e19ch:   0A   DD   00   00   00   00   00   00   0A   DD   00   00   00   00   00   00
0009e1ach:   0A   DD   00   00   F6   05   00   00   00   E3   00   00   4A   01   00   00
0009e1bch:   4A   E4   00   00   7A   02   00   00   C4   E6   00   00   A3   00   00   00
0009e1cch:   67   E7   00   00   00   00   00   00   67   E7   00   00   00   00   00   00
0009e1dch:   67   E7   00   00   3F   01   00   00   A6   E8   00   00   03   00   00   00
0009e1ech:   A9   E8   00   00   03   00   00   00   AC   E8   00   00   00   00   00   00
0009e1fch:   AC   E8   00   00   00   00   00   00   AC   E8   00   00   04   00   00   00
0009e20ch:   B0   E8   00   00   00   00   00   00   B0   E8   00   00   00   00   00   00
0009e21ch:   B0   E8   00   00   00   00   00   00   B0   E8   00   00   00   00   00   00
0009e22ch:   B0   E8   00   00   00   00   00   00   B0   E8   00   00   00   00   00   00
0009e23ch:   B0   E8   00   00   00   00   00   00   B0   E8   00   00   00   00   00   00
0009e24ch:   B0   E8   00   00   00   00   00   00   B0   E8   00   00   00   00   00   00
0009e25ch:   B0   E8   00   00   00   00   00   00   B0   E8   00   00   00   00   00   00
0009e26ch:   B0   E8   00   00   00   00   00   00   B0   E8   00   00   00   00   00   00
0009e27ch:   B0   E8   00   00   00   00   00   00   00   00   00   00   00   00   00   00
0009e28ch:   00   00   00   00   00   00   00   00   00   00   00   00   00   00   00   00
0009e29ch:   00   00   00   00   00   00   00   00   00   00   00   00   00   00   00   00
0009e2ach:   00   00   00   00   00   00   00   00   00   00   00   00   00   00   00   00
0009e2bch:   00   00   00   00   00   00   00   00   00   00   00   00   00   00   00   00


Label
        +0 Versie tekst = Revision:: 2
Body
        +0 Versie nummer = 3.3.1.27
        +4 grootte van de body in woorden, e8b0 * 4 = 3a2c0 bytes = 238272 (decimaal) bytes
        +8 index van DSP blokken
               Blok 1 start op 9e0ec + (78 * 4) = 9e2cc
               Lengte blok 1 = 4000 * 4 = 10000 bytes
               Blok 2 start op 9e0ec + (4078 * 4) = ae2cc
               Lengte blok 2 = a0 * 4 = 280 bytes
               Enzv
               Er blijken dan 59 blokken te zijn, waarvan diverse een lengte van 0
Start adres   -> Blok nr,       grootte in (dec) bytes

  0x09E2CC    ->   Blok   01,   65536 bytes.
  0x0AE2CC    ->   Blok   02,   640 bytes.
  0x0AE54C    ->   Blok   03,   1416 bytes.
  0x0AEAD4    ->   Blok   04,   10300 bytes.
  0x0B1310    ->   Blok   05,   820 bytes.
  0x0B1644    ->   Blok   06,   1528 bytes.
  0x0B1C3C    ->   Blok   07,   4236 bytes.
  0x0B2CC8    ->   Blok   08,   32616 bytes.
  0x0BAC30    ->   Blok   09,   19624 bytes.
  0x0BF8D8    ->   Blok   10,   0 bytes.
  0x0BF8D8    ->   Blok   11,   9084 bytes.
  0x0C1C54    ->   Blok   12,   0 bytes.
  0x0C1C54    ->   Blok   13,   18320 bytes.
  0x0C63E4    ->   Blok   14,   8288 bytes.
  0x0C8444    ->   Blok   15,   10336 bytes.
  0x0CACA4    ->   Blok   16,   10540 bytes.
  0x0CD5D0    ->   Blok   17,   9992 bytes.
  0x0CFCD8    ->   Blok   18,   0 bytes.
  0x0CFCD8    ->   Blok   19,   11196 bytes.
  0x0D2894    ->   Blok   20,   11392 bytes.
  0x0D5514    ->   Blok   21,   0 bytes.
  0x0D5514    ->   Blok   22,   0 bytes.
  0x0D5514    ->   Blok   23,   0 bytes.
  0x0D5514    ->   Blok   24,   6104 bytes.
  0x0D6CEC    ->   Blok   25,   1320 bytes.
  0x0D7214    ->   Blok   26,   2536 bytes.
  0x0D7BFC    ->   Blok   27,   652 bytes.
  0x0D7E88    ->   Blok   28,   0 bytes.
  0x0D7E88    ->   Blok   29,   0 bytes.
  0x0D7E88    ->   Blok   30,   1276 bytes.
  0x0D8384    ->   Blok   31,   12 bytes.
  0x0D8390    ->   Blok   32,   12 bytes.
  0x0D839C    ->   Blok   33,   0 bytes.
  0x0D839C    ->   Blok   34,   0 bytes.
  0x0D839C    ->   Blok   35,   16 bytes.
  0x0D83AC    ->   Blok   36,   0 bytes.
  0x0D83AC    ->   Blok   37,   0 bytes.
  0x0D83AC    ->   Blok   38,   0 bytes.
  0x0D83AC    ->   Blok   39,   0 bytes.
  0x0D83AC    ->   Blok   40,   0 bytes.
  0x0D83AC    ->   Blok   41,   0 bytes.
  0x0D83AC    ->   Blok   42,   0 bytes.
  0x0D83AC    ->   Blok   43,   0 bytes.
  0x0D83AC    ->   Blok   44,   0 bytes.
  0x0D83AC    ->   Blok   45,   0 bytes.
  0x0D83AC    ->   Blok   46,   0 bytes.
  0x0D83AC    ->   Blok   47,   0 bytes.
  0x0D83AC    ->   Blok   48,   0 bytes.
  0x0D83AC    ->   Blok   49,   0 bytes.
  0x0D83AC    ->   Blok   50,   0 bytes.
  0x0D83AC    ->   Blok   51
  0x0D83AC    ->   Blok   52
  0x0D83AC    ->   Blok   53
  0x0D83AC    ->   Blok   54
  0x0D83AC    ->   Blok   55
  0x0D83AC    ->   Blok   56
  0x0D83AC    ->   Blok   57
  0x0D83AC    ->   Blok   58
  0x0D83AC    ->   Blok   59
In diverse DSP blokken staan LUT’s. LUT is Look Up Table, een term uit het DSP jargon.
Een DSP blok heeft een header (12 bytes) en daarbinnen liggen o.a. een aantal LUT’s.
Een LUT is een tabel met 32 bits waarden waarvan maar 24 bits in gebruik zijn. Dat zie je aan
het hex patroon xx xx xx 00 xx xx xx 00 xx xx xx 00 xx xx xx 00.
De waarden signed fixed point 24 bits getallen, liggend tussen -1 en ~1.
Bit 23 is het sign en bits 0 t/m 22 de fractie.
0.0=0x000000 0.25=0x200000 0.5=0x400000 ~1.0=0x7FFFFF
-1.0=0x800000 -0.5=0xC00000 -0.25=0xE00000 enzv

De onderstaande functies kun je in C b.v. omzetten naar hex (maal 2^23) en de bytes achterste
voren zetten (little endian).

Blokken 2,3,4,5,6 en 9 bestaan compleet uit LUT’s.

ae2cc blok 02
ae54c blok 03
aead4 blok 04
      aef60 Functie B
      aefd8 Functie A
b1310 blok 05
b1644 blok 06
bac30 blok 09
      baeb0 Functie A
      baec4 Functie B
      bb8d8 Functie C


Functie A     x=[0:4] f(x)= .5 * 2^((1-x)/2)

0000    0.70710678      005A827A      7A   82   5A   00
0001    0.50000000      00400000      00   00   40   00
0002    0.35355339      002D413D      3D   41   2D   00
0003    0.25000000      00200000      00   00   20   00
0004    0.17677670      0016A09E      9E   A0   16   00

Functie B     x=[0:4] f(x)= .5 * 2^((1-x)/4)

0000    0.59460356      004C1BF8      F8   1B   4C   00
0001    0.50000000      00400000      00   00   40   00
0002    0.42044821      0035D13F      3F   D1   35   00
0003    0.35355339      002D413D      3D   41   2D   00
0004    0.29730178      00260DFC      FC   0D   26   00

Functie C     x=[0:4095] f(x) = sin((PI/2)*(x/4096))

0000    0.00000000      00000000      00   00   00   00
0001    0.00038350      00000C91      91   0C   00   00
0002    0.00076699      00001922      22   19   00   00
0003    0.00115049      000025B3      B3   25   00   00
0004    0.00153398      00003244      44   32   00   00
DATA index blok
+0      aantal data blokken * 2

000d83ach: 0A 00 00 00      18 36 01 00   22 36 01 00   0F 59 00 00
000d83bch: 31 8F 01 00      44 00 00 00   75 8F 01 00   B9 07 00 00
000d83cch: 2E 97 01 00      DF 0E 00 00



Aantal data blokken = a / 2 = 5
Blok 1 Start op d83ac + a * 4 = d83d4
       Lengte = 13618 * 4 = 4d860 = 317536 decimaal
Blok 2 start op d83ac + 13622 * 4 = 125c34
       Lengte = 590f * 4 = 1643c = 91196 decimaal bytes
Blok 3 Start op d83ac + 18f31 * 4 = 13C070
       Lengte = 44 * 4 = 110 = 272 decimaal bytes
Blok 4 start op d83ac + 18f75 * 4 = 13C180
       Lengte = 7b9 * 4 = 1ee4 = 7908 decimaal bytes
Blok 5 start op d83ac + 1972e * 4 = 13e064
       Lengte = edf * 4 = 3b7c = 15228 decimaal bytes

Na analyse van de inhoud van de data blokken blijkt:

Blok#          Bevat                start op
   1              OSD blok          D83D4
   2              MPEG blok         125C34
   3              Data blok         13C070
   4              Sound blok        137C180
   5              Kodak blok        13E064
Data blok 1 - OSD blok

Dit blok bevat een header en 2 OSD blokken, beide beginnende met de string MTKOSD

Eerst blok bevat de fonts (de characters maps enzv), het tweede blok de OSD teksten (die o.a.
setup menu’s vormen).


Header

000d83d4h: 58 D8 04 00 00 00 00 00 00 00 00 00 00 00 00 00

OSD blok 1

000d83e4h: 4D 54 4B 4F 53 44 20 30 2E 31 00 00 74 24 02 00 ; MTKOSD 0.1..t$..
000d83f4h: 46 4F 4E                                        ; FON


[mtkosd]=d83e4
+0 8 bytes ascii MTKOSD 0.1
+c offset naar verwijsblok op 22474
+10 3 bytes ascii FON

Verwijsblok op d83e4+22474=fa858

000fa858h: 06 00 00 00 10 00 00 00 1C 44 00 00 F8 FB 00 00
000fa868h: E0 52 01 00 8C 63 01 00 98 7B 01 00 31 00 00 00

000fa878h:   E0   B2   01   00   40   B4   01   00   98   B5   01   00   B8   B6   01   00
000fa888h:   84   B7   01   00   BC   B8   01   00   D0   B9   01   00   A4   BA   01   00
000fa898h:   3C   BB   01   00   8C   C2   01   00   BC   C5   01   00   2C   C7   01   00
000fa8a8h:   60   C8   01   00   94   C9   01   00   B8   CA   01   00   98   CB   01   00
000fa8b8h:   A0   CC   01   00   1C   CE   01   00   14   CF   01   00   A0   D0   01   00
000fa8c8h:   FC   D1   01   00   04   D3   01   00   04   D4   01   00   8E   D8   01   00
000fa8d8h:   2E   EC   01   00   4A   FE   01   00   AA   00   02   00   BA   04   02   00
000fa8e8h:   76   07   02   00   E6   0A   02   00   9A   0D   02   00   0E   10   02   00
000fa8f8h:   C2   10   02   00   76   11   02   00   EE   11   02   00   66   12   02   00
000fa908h:   22   14   02   00   DE   15   02   00   1E   17   02   00   5E   18   02   00
000fa918h:   DA   19   02   00   2A   1A   02   00   7A   1A   02   00   CA   1A   02   00
000fa928h:   1A   1B   02   00   EE   1D   02   00   9A   1F   02   00   5E   21   02   00
000fa938h:   CE   22   02   00


+0 = 6 is aantal FON blokken
+4 = 10 = offset, [mtkosd]+10= d83f4 -> wijst naar tekst FON
+8 = 441c = offset, [mtkosd]+441c= dc800 -> wijst naar tekst FON
+C = fbf8 = offset, [mtkosd]+fbf8= e7fdc -> wijst naar tekst FON
+10 = 152e0 = offset, [mtkosd]+152e0= ed6c4 -> wijst naar tekst FON
+14 = 1638c = offset, [mtkosd]+1638c= ee770 -> wijst naar tekst FON
+18 = 17b98 = offset, [mtkosd]+17b98= eff7c -> wijst naar tekst FON
+1C = 31 = 49 dec = aantal Graphic blokken

Offset   naam               pixels                         grootte
+20      Graphic 1          28*1E=40*30
+24      Graphic 2          28*1E=40*30
+28      Graphic 3          28*1E=40*30
+2C   Graphic 4    28*1E=40*30
+30   Graphic 5    28*1E=40*30
+34   Graphic 6    28*1E=40*30
+38   Graphic 7    28*1E=40*30
+3C   Graphic 8    28*1E=40*30
+40   Graphic 9    84*4A=132*74
+44   Graphic 10   E0*2C=224*44
+48   Graphic 11   28*1E=40*30
+4C   Graphic 12   28*1E=40*30
+50   Graphic 13   28*1E=40*30
+54   Graphic 14   28*1E=40*30
+58   Graphic 15   40*20=64*32
+5C   Graphic 16   40*20=64*32
+60   Graphic 17   60*20=96*32
+64   Graphic 18   44*20=68*32
+68   Graphic 19   60*20=96*32
+6C   Graphic 20   44*20=68*32
+70   Graphic 21   40*20=64*32
+74   Graphic 22   40*20=64*32
+78   Graphic 23   94*58=148*88
+7C   Graphic 24   84*5B=132*91
+80   Graphic 25   84*5B=132*91
+84   Graphic 26   38*38=56*56
+88   Graphic 27   38*38=56*56
+8C   Graphic 28   38*38=56*56
+90   Graphic 29   38*38=56*56
+94   Graphic 30   38*38=56*56
+98   Graphic 31   38*38=56*56
+9C   Graphic 32   18*39=24*57
+A0   Graphic 33   18*39=24*57
+A4   Graphic 34   28*12=40*18
+A8   Graphic 35   28*12=40*18
+AC   Graphic 36   38*2E=56*46
+B0   Graphic 37   38*2E=56*46
+B4   Graphic 38   3E*39=62*57
+B8   Graphic 39   3E*39=62*57
+BC   Graphic 40   40*39=64*57
+C0   Graphic 41   10*10=16*16    80 bytes
+C4   Graphic 42   10*10=16*16    80 bytes
+C8   Graphic 43   10*10=16*16    80 bytes
+CC   Graphic 44   10*10=16*16    80 bytes
+D0   Graphic 45   38*38=56*56    724 bytes
+D4   Graphic 46   28*1E=40*30    428 bytes
+D8   Graphic 47   28*1E=40*30    428 bytes
+DC   Graphic 48   28*1E=40*30    368 bytes
+E0   Graphic 49   28*1E=40*30


Een Graphic blok
Als voorbeeld neem ik Graphic 41: (begint op 219da + [mtkosd] = f9dbe)

000f9dbeh:    10   00   10       00   37   17   48   00   64    7A   51   00   00   90   00   00
000f9dceh:    78   00   78       00   00   01   00   01   00    01   00   01   00   01   00   01
000f9ddeh:    00   01   00       01   00   01   00   01   00    01   00   01   00   01   00   01
000f9deeh:    00   01   00       01   2C   00   29   00   27    00   26   00   25   00   24   00
000f9dfeh:    23   00   22       00   22   00   21   00   21    00   21   00   00   00   00   00

+0 2 bytes, breedte in pixels 0x10 = 16
+4 2 bytes, hoogte in pixels 0x10 = 16
+6 48 bytes, 3 x 16 kleuren, RR GG BB formaat, varieert van 00 00 00 t/m FF FF FF
Per byte: 4 bits kleur, 4 bits lengte, 00 = basis kleur rest van de rij
2c = 12 pixels kleur 2, 00 = rest       XXXXXXXXXXXX
29 = 9 pixels kleur 2, 00 = rest        XXXXXXXXX
27 = 7 pixels kleur 2, 00 = rest        XXXXXXX
26 = 6 pixels kleur 2, 00 = rest        XXXXXX
25 = 5 pixels kleur 2, 00 = rest        XXXXX
24 = 4 pixels kleur 2, 00 = rest        XXXX
23 = 3 pixels kleur 2, 00 = rest        XXX
22 = 2 pixels kleur 2, 00 = rest        XX
22 = 2 pixels kleur 2, 00 = rest        XX
21 = 1 pixel kleur 2, 00 = rest         X
21 = 1 pixel kleur 2, 00 = rest         X
21 = 1 pixel kleur 2, 00 = rest         X
00 = rest
00 = rest
00 = rest
00 = rest

Een FON blok

+0 ascii FON
+3 type font, 0 = 2 kleuren font, 1=4 kleuren font
Font type 0
       +7 2 bytes lang, aantal tekens in het font
       +9 aantal pixels, de breedte van een teken
       +a aantal pixels, de hoogte van een teken
Font type 1
       +7 2 bytes lang, aantal tekens in het font
       +a aantal pixels, de hoogte van een teken

000d83f4h:   46   4F   4E   01   DB   05   02   29   01   00   1E                        ;   FON
000dc800h:   46   4F   4E   01   63   07   02   77   01   00   1E                        ;   FON
000e7fdch:   46   4F   4E   01   13   04   02   01   01   28   20                        ;   FON
000ed6c4h:   46   4F   4E   01   9F   00   02   1D   00   00   1E                        ;   FON
000ee770h:   46   4F   4E   00   0A   00   01   80   00   10   18                        ;   FON
000eff7ch:   46   4F   4E   01   0F   05   02   00   01   00   1E                        ;   FON


Fon    aantal tekens        aantal kleuren size in pixels gebruik
1      297                  4              variabel x 30 MPEG4 ondertitels - Normal
2      375                  4              variabel x 30
3      257                  4              variabel x 32
4      29                   4              variabel x 30
5         128          2              16 x 24       bestandsnamen in browser op TV scherm
6         256          4              variabel x 30 MPEG4 ondertitels – Oost Europa


Uitleg 2 kleuren font (=type 0)

Als voorbeeld neem ik FON blok 5 uit de firmware. In de FON header staat al dat elk teken
16 bij 24 pixels is.
Bij 2 kleuren systeem, bit=0 is kleur 1, bit=1 is kleur 2, heb je per teken 16*24/8 = 48 bytes
nodig.
Laten we een uitroepteken ! opbouwen. ! is het 33ste teken in de ascii tabel.

De ! begint op adres eedab = 21 x 30 + ee770 + b ( 33 x 48 + [FON5] + 11 bytes van de
header).

000eedabh: 00 00 00 00 00 00 00 00 00 00 03 00 03 00 03 00
000eedbbh: 03 00 03 00 03 00 03 00 03 00 03 00 00 00 00 00
000eedcbh: 03 00 03 00 00 00 00 00 00 00 00 00 00 00 00 00

Zetten we dit in een overzicht van 24 regels bij 16 bits (=2 bytes).

00   00   00000000   00000000
00   00   00000000   00000000
00   00   00000000   00000000
00   00   00000000   00000000
00   00   00000000   00000000
03   00   00000011   00000000         XX
03   00   00000011   00000000         XX
03   00   00000011   00000000         XX
03   00   00000011   00000000         XX
03   00   00000011   00000000         XX
03   00   00000011   00000000         XX
03   00   00000011   00000000         XX
03   00   00000011   00000000         XX
03   00   00000011   00000000         XX
00   00   00000000   00000000
00   00   00000000   00000000
03   00   00000011   00000000         XX
03   00   00000011   00000000         XX
00   00   00000000   00000000
00   00   00000000   00000000
00   00   00000000   00000000
00   00   00000000   00000000
00   00   00000000   00000000
00   00   00000000   00000000

Laten we de i opbouwen. De i is het 105de teken in de ascii tabel.

De i begint op adres efb2b = 69 x 30 + ee770 + b ( 105 x 48 + [FON5] + 11 bytes van de
header).

000efb2bh: 00 00 00 00 00 00 00 00 03 00 03 00 00 00 00 00
000efb3bh: 03 00 03 00 03 00 03 00 03 00 03 00 03 00 03 00
000efb4bh: 03 00 03 00 00 00 00 00 00 00 00 00 00 00 00 00

Zetten we dit in een overzicht van 24 regels bij 16 bits (=2 bytes).
00   00   00000000      00000000
00   00   00000000      00000000
00   00   00000000      00000000
00   00   00000000      00000000
03   00   00000011      00000000                 XX
03   00   00000011      00000000                 XX
00   00   00000000      00000000
00   00   00000000      00000000
03   00   00000011      00000000                 XX
03   00   00000011      00000000                 XX
03   00   00000011      00000000                 XX
03   00   00000011      00000000                 XX
03   00   00000011      00000000                 XX
03   00   00000011      00000000                 XX
03   00   00000011      00000000                 XX
03   00   00000011      00000000                 XX
03   00   00000011      00000000                 XX
03   00   00000011      00000000                 XX
00   00   00000000      00000000
00   00   00000000      00000000
00   00   00000000      00000000
00   00   00000000      00000000
00   00   00000000      00000000
00   00   00000000      00000000




Uitleg 4 kleuren font (=type 1)

Er zijn 2 aspecten 1) hoe het teken te vinden en 2) hoe is dat teken dan gecodeerd.
In de uitleg gebruiken we FON blok 1 in de firmware.

Het vinden van een teken.

Het begint weer met de FON header van b (= 11) bytes lang.
000d83f4h: 46 4F 4E 01 DB 05 02 29 01 00 1E                                                   ; FON


Gevolgd door tabel met 1 byte per teken, welke het aantal pixels aangeeft in de breedte
(pixelbreedte tabel).
Teken 33 van de ascii tabel (uitroepteken) heeft een breedte van 8 pixels, zie adres d83ff plus
21 (=33 dec) = d8420.

000d83ffh:    08   10   10   10   10   10   10   10   10   10   10   10   10   10   10   10
000d840fh:    10   10   10   10   10   10   10   10   10   10   10   10   10   10   14   08
000d841fh:    10   08   0C   10   10   18   14   08   0C   0C   10   10   08   10   08   10
000d842fh:    10   10   10   10   10   10   10   10   10   10   08   08   10   10   10   10


De header van FON1 start op d83f4
Er begint een offset tabel op startFON + (( header-size + 3 + aantal tekens in font) & fffc)
Op d83f4 + ((b + 3 + 129) & FFFC) -> op d83f4 + (137 & fffc) = d83f4+134= d8528

Hier het begin van die offsettabel
000d8528h: 00 00 00 00 02 00 00 00 3E 00 00 00 7A 00 00 00
000d8538h: B6 00 00 00 F2 00 00 00 2E 01 00 00 6A 01 00 00
000d8548h:    A6   01   00   00   E2   01   00   00   1E   02   00   00   5A   02   00   00
000d8558h:    96   02   00   00   D2   02   00   00   0E   03   00   00   4A   03   00   00
000d8568h:    86   03   00   00   C2   03   00   00   FE   03   00   00   3A   04   00   00
000d8578h:    76   04   00   00   B2   04   00   00   EE   04   00   00   2A   05   00   00
000d8588h:    66   05   00   00   A2   05   00   00   DE   05   00   00   1A   06   00   00
000d8598h:    56   06   00   00   92   06   00   00   CE   06   00   00   D9   06   00   00
000d85a8h:    DB   06   00   00   DF   06   00   00   05   07   00   00   1A   07   00   00
000d85b8h:    53   07   00   00   97   07   00   00   ED   07   00   00   F8   07   00   00


Hierna komt de tekentabel.

000d89d0h:    03   C1   01   C1   3E   53   E5   A2   FA   5A   72   67   A5   A7   26   7A
000d89e0h:    5A   7A   15   A7   A5   A7   A1   5A   7A   5A   7A   15   A7   A5   A7   A1
000d89f0h:    5A   7A   5A   7A   15   A7   A5   A7   A1   5A   7A   5A   7A   15   A7   A5
000d8a00h:    A7   26   7A   5A   72   67   A5   A2   FA   53   E5   3E   01   85   01   C1
000d8a10h:    3E   53   E5   A2   FA   5A   72   67   A5   A7   26   7A   5A   7A   15   A7
000d8a20h:    A5   A7   A1   5A   7A   5A   7A   15   A7   A5   A7   A1   5A   7A   5A   7A
000d8a30h:    15   A7   A5   A7   A1   5A   7A   5A   7A   15   A7   A5   A7   26   7A   5A
000d8a40h:    72   67   A5   A2   FA   53   E5   3E   01   85   01   C1   3E   53   E5   A2
000d8a50h:    FA   5A   72   67   A5   A7   26   7A   5A   7A   15   A7   A5   A7   A1   5A
enzv

Codering van een teken.

De tekens zijn ‘rle compressed’ gecodeerd, zie ook http://dvd.sourceforge.net/dvdinfo/spu.html

Er zijn daarin 4 formaten, afhankelijk van het aantal gelijkgekleurde pixels achter elkaar.

Aantal gelijke pixels aantal bits    formaat
   1–3                 4             nncc
   4 – 15              8             00nnnncc
  16 – 63              12            0000nnnnnncc
  64 – 255             16            000000nnnnnnnncc
Waarin n het aantal gelijke pixels achter elkaar is en cc de kleurkode (0 t/m 3).
Er is 1 uitzondering op het formaat: 00000000000000cc = alle pixels tot het einde van de
regel hebben kleur cc.

Het 33ste teken van de ascii tabel , het uitroepteken (als voorbeeld) start op d89d0 + 6df
(33ste offset in offset table) = d90af en gaat door tot d89d0 + 705 (34ste offset) = d90d5.

000d90afh: 0A 11 E5 1E 5A FA 5A FA 5A FA 5A FA 5A FA 5A FA
000d90bfh: 5A FA 5A FA 5A FA 5A FA 5A FA 51 E5 AF A5 AF A5
000d90cfh: AF A5 1E 51 E0 C5

Decodering:

Bytes   formaat binair                           pixels en kleuren
0a 1    0000 101000 01                           40 pixels kleur 1
1e      00 0111 10                               7 pixels kleur 2
5 1e    01 01 + 00 0111 10                       1 pixel kleur 1 + 7 pixels kleur 2
5a      0101 + 1010                              1 pixel kleur 1 + 2 pixels kleur 2
Fa      11 11 + 10 10                            3 pixels kleur 3 + 2 pixels kleur 2
5a      0101 + 1010                              1 pixel kleur 1 + 2 pixels kleur 2
Fa      11 11 + 10 10                            3 pixels kleur 3 + 2 pixels kleur 2
5a      0101 + 1010                              1 pixel kleur 1 + 2 pixels kleur 2
Fa      11 11 + 10 10                            3 pixels kleur 3 + 2 pixels kleur 2
5a      0101 + 1010                 1 pixel kleur 1 + 2 pixels kleur 2
Fa      11 11 + 10 10               3 pixels kleur 3 + 2 pixels kleur 2
5a      0101 + 1010                 1 pixel kleur 1 + 2 pixels kleur 2
Fa      11 11 + 10 10               3 pixels kleur 3 + 2 pixels kleur 2
5a      0101 + 1010                 1 pixel kleur 1 + 2 pixels kleur 2
Fa      11 11 + 10 10               3 pixels kleur 3 + 2 pixels kleur 2
5a      0101 + 1010                 1 pixel kleur 1 + 2 pixels kleur 2
Fa      11 11 + 10 10               3 pixels kleur 3 + 2 pixels kleur 2
5a      0101 + 1010                 1 pixel kleur 1 + 2 pixels kleur 2
Fa      11 11 + 10 10               3 pixels kleur 3 + 2 pixels kleur 2
5a      0101 + 1010                 1 pixel kleur 1 + 2 pixels kleur 2
Fa      11 11 + 10 10               3 pixels kleur 3 + 2 pixels kleur 2
5a      0101 + 1010                 1 pixel kleur 1 + 2 pixels kleur 2
Fa      11 11 + 10 10               3 pixels kleur 3 + 2 pixels kleur 2
5a      0101 + 1010                 1 pixel kleur 1 + 2 pixels kleur 2
Fa      11 11 + 10 10               3 pixels kleur 3 + 2 pixels kleur 2
51 e5   01 01 + 00 0111 10 + 0101   1 pixel kleur 1 + 7 pixels kleur 2 + 1 pixel kleur 1
Af      10 10 + 11 11               2 pixels kleur 2 + 3 pixels kleur 3
A5      10 10 + 01 01               2 pixels kleur 2 + 1 pixel kleur 1
Af      10 10 + 11 11               2 pixels kleur 2 + 3 pixels kleur 3
A5      10 10 + 01 01               2 pixels kleur 2 + 1 pixel kleur 1
Af      10 10 + 11 11               2 pixels kleur 2 + 3 pixels kleur 3
A5      10 10 + 01 01               2 pixels kleur 2 + 1 pixel kleur 1
1e      00 0111 10                  7 pixels kleur 2
51 e    01 01 + 00 0111 10          1 pixel kleur 1 + 7 pixels kleur 2
0 C5    00 00110001 01              49 pixels kleur 1

Totaal pixels 40+49+73+1+77=240 -> 8 bij 30. De 8 staat in de pixelbreedte tabel.

11111111
11111111
11111111
11111111
11111111
22222221
22222221
22333221             XXX
22333221             XXX
22333221             XXX
22333221             XXX
22333221             XXX
22333221             XXX
22333221             XXX
22333221             XXX
22333221             XXX
22333221             XXX
22333221             XXX
22222221
22333221             XXX
22333221             XXX
22333221              XXX
22222221
22222221
11111111
11111111
11111111
11111111
11111111
11111111

Goed kijken en je ziet hierboven een uitroepteken!! Kleur 1 kun je de achtergrondkleur
noemen.

Het 105de teken , de letter i (als 2de voorbeeld) start op d89d0 + 14f4 (105de offset in offset
table) = d9ec4 en gaat door tot d89d0 + 151a (106de offset) = d9eea.

Teken i heeft een breedte van 8 pixels, zie adres d83ff + 69 = d8468 in de breedte tabel.

000d9ec4h: 0A 11 E5 1E 5A FA 5A FA 5A FA 51 E5 AF A5 AF A5
000d9ed4h: AF A5 AF A5 AF A5 AF A5 AF A5 AF A5 AF A5 AF A5
000d9ee4h: AF A5 1E 51 E0 C5

0a 1    0000 101000 01                72 pixels kleur 1
1e      00 0111 10                    7 pixels kleur 2
5 1e    01 01 + 00 0111 10            1 pixel kleur 1 + 7 pixels kleur 2
5a      0101 + 1010                   1 pixel kleur 1 + 2 pixels kleur 2
Fa      11 11 + 10 10                 3 pixels kleur 3 + 2 pixels kleur 2
5a      0101 + 1010                   1 pixel kleur 1 + 2 pixels kleur 2
Fa      11 11 + 10 10                 3 pixels kleur 3 + 2 pixels kleur 2
5a      0101 + 1010                   1 pixel kleur 1 + 2 pixels kleur 2
Fa      11 11 + 10 10                 3 pixels kleur 3 + 2 pixels kleur 2
51 e5   01 01 + 00 0111 10 + 0101     1 pixel kleur 1 + 7 pixels kleur 2 + 1 pixel kleur 1
Af      10 10 + 11 11                 2 pixels kleur 2 + 3 pixels kleur 3
A5      10 10 + 01 01                 2 pixels kleur 2 + 1 pixel kleur 1
Af      10 10 + 11 11                 2 pixels kleur 2 + 3 pixels kleur 3
A5      10 10 + 01 01                 2 pixels kleur 2 + 1 pixel kleur 1
Af      10 10 + 11 11                 2 pixels kleur 2 + 3 pixels kleur 3
A5      10 10 + 01 01                 2 pixels kleur 2 + 1 pixel kleur 1
Af      10 10 + 11 11                 2 pixels kleur 2 + 3 pixels kleur 3
A5      10 10 + 01 01                 2 pixels kleur 2 + 1 pixel kleur 1
Af      10 10 + 11 11                 2 pixels kleur 2 + 3 pixels kleur 3
A5      10 10 + 01 01                 2 pixels kleur 2 + 1 pixel kleur 1
Af      10 10 + 11 11                 2 pixels kleur 2 + 3 pixels kleur 3
A5      10 10 + 01 01                 2 pixels kleur 2 + 1 pixel kleur 1
Af      10 10 + 11 11                 2 pixels kleur 2 + 3 pixels kleur 3
A5      10 10 + 01 01                 2 pixels kleur 2 + 1 pixel kleur 1
Af      10 10 + 11 11                 2 pixels kleur 2 + 3 pixels kleur 3
A5      10 10 + 01 01                 2 pixels kleur 2 + 1 pixel kleur 1
Af      10 10 + 11 11                 2 pixels kleur 2 + 3 pixels kleur 3
A5      10 10 + 01 01                 2 pixels kleur 2 + 1 pixel kleur 1
Af      10 10 + 11 11                 2 pixels kleur 2 + 3 pixels kleur 3
A5     10 10 + 01 01        2 pixels kleur 2 + 1 pixel kleur 1
Af     10 10 + 11 11        2 pixels kleur 2 + 3 pixels kleur 3
A5     10 10 + 01 01        2 pixels kleur 2 + 1 pixel kleur 1
1e     00 0111 10           7 pixels kleur 2
51 e   01 01 + 00 0111 10   1 pixel kleur 1 + 7 pixels kleur 2
0 C5   00 00110001 01       49 pixels kleur 1


11111111
11111111
11111111
11111111
11111111
11111111
11111111
22222221
22222221
22333221            XXX
22333221            XXX
22333221            XXX
22222221
22333221            XXX
22333221            XXX
22333221            XXX
22333221            XXX
22333221            XXX
22333221            XXX
22333221            XXX
22333221            XXX
22333221            XXX
22333221            XXX
22333221            XXX
22222221
11111111
11111111
11111111
11111111
11111111
11111111
OSD blok 2
000fa93ch: 4D 54 4B 4F 53 44 20 30 2E 31 00 00 94 B2 02 00 ; MTKOSD 0.1

[mtkosd]=fa93c
+0 8 bytes ascii MTKOSD 0.1
+a 4 bytes offset naar taal index blok, fa93c + 2b294 = 125bd0

Taal index blok

00125bd0h:    0B   00   00   00   10   00   00   00   F4   4B   00   00   74   7D   00   00
00125be0h:    6C   C0   00   00   E4   02   01   00   20   46   01   00   18   88   01   00
00125bf0h:    F0   B8   01   00   A8   FB   01   00   48   2A   02   00   20   84   02   00
00125c00h:    DC   10   00   00   C0   5C   00   00   40   8E   00   00   38   D1   00   00
00125c10h:    B0   13   01   00   EC   56   01   00   E4   98   01   00   BC   C9   01   00
00125c20h:    74   0C   02   00   14   3B   02   00   EC   94   02   00


+0 4 bytes, aantal OSD talen = b = 11 stuks
Voor elke OSD taal: 4 bytes offset naar taal index
Voor elke OSD taal: 4 bytes, offset naar de tekst items

Deze offsets zij t.o.v. het mtkosd blok (op fa93c)

Taal# Taal                             index                                        data
                             Offset              adres                offset                  adres
0      Engels                10                  fa94c                10dc                    fba18
1      ?                     4bf4                                     5c70
2      Frans                 7d74                                     8e40
3      Duits                 c06c                                     d138
4      Spaans                102e4                                    113b0
5      Italiaans             14620                                    156ec
6      Nederlands            18818                                    198e4
7      Portugees             1b8f0                                    1c9bc
8      Zweeds                1fba8                                    20c74
9      ?                     22a48                                    23b14
10     ?                     28420                                    294ec

Taal index:

Een OSD taal bestaat uit teksten, zg.n. tekst items.
Deze index heeft per taal een verwijzing naar weer een index die elk afzonderlijk tekst item
aanwijst.
+0 4 bytes, aantal tekst items in dit menu
Daarna , 4 bytes, offsets naar menu item, aantal staat in +0

Index tekst items taal 0 staat op fa94c: aantal tekst items is 0x432 is 1074 decimaal.

000fa94ch: 32 04 00 00 00 00 00 00 01 00 00 00 11 00 00 00
000fa95ch: 18 00 00 00 22 00 00 00 29 00 00 00 32 00 00 00
000fa96ch: 3C 00 00 00 47 00 00 00 51 00 00 00 58 00 00 00


Een tekst item (hier als voorbeeld text item #1 in data van taal 0):
Staat op fba18 (data taal 0) + 11 (tweede offset in index taal 0) = fba29.

000fba29h: 04 04 00 4F 70 65 6E                                     ; ...Open

Elke string wordt voorafgegaan door 3 bytes.
+0 = lengte van de string
+1 = lengte van ???
+2 = meestal 0, heeft met het font te maken
Op +3 staat de string zelf
Data blok 2 - MPEG blok

Bevat 1 of meerdere MPEG achtergrond plaatjes, eigenlijk stilstaande video frames.

Header

Begint met een header, op 125c34, zie ook Data Index blok.
Op plus 0 staat het aantal, 3 stuks.

00125c34h: 03 00 00 00 18 00 00 00 00 00 00 00 D2 E5 00 00
00125c44h: 4D 21 01 00 24 64 01 00


MPEGnr        start adres
  1               18 + 125c34 = 125c4c
  2               18 + 125c34 + e5d2 = 13421e
  3               18 + 125c34 + 1214d = 137d99


MPEG plaatje

Indeling van mpeg plaatje, zie ook http://dvd.sourceforge.net/dvdinfo/mpeghdrs.html, daar
staan meer details.

Sequence header MPEG
+0    00 00 01 b3
+4    size horizontal en vertikaal
+7    aspect ratio en frame rate

User data
+0     00 00 01 b2

Sequence end
+0    00 00 01 b7

Het eerste mpeg plaatje start op 125c4c, te herkennen aan:
Sequence header
+0     00 00 01 b3
+4     2d0 240 size is 720 bij 576
+7     23 is 4:3 aspect en 25 frames/sec
Enzv

Sequence end staat op 13421b
+0    00 00 01 b7

Het tweede mpeg plaatje start op 13421e, te herkennen aan
Sequence header
+0     00 00 01 b3
+4     2d0 1e0 size is 720 bij 480
Enzv
Derde plaatje start op 137d99, 720 bij 480

Wat wel apart is; MPEG plaatjes 1, 2 en 3 liggen aansluitend in blok 2, de 4de ligt in blok 5.




Data blok 3 - Data blok

???


Data blok 4 - Sound blok

Begint met een header.

+0 aantal sub-blokken = 4
+4 header size ( 2c = c + aantal sub-blokken * 8)
Per sub-blok
       +0     soort inhoud, 00 00 00 00 = mp3
       +4     offset, start sub-blok = start sound blok + headersize + offset

0013c180h: 04 00 00 00 2C 00 00 00 00 00 00 00 00 00 00 00
0013c190h: 2F 09 00 00 00 00 00 00 CC 18 00 00 00 00 00 00
0013c1a0h: 9D 1E 00 00 01 00 00 00 B7 1E 00 00


               soort                 lengte
Blok   1       00 00 00 00           2F 09 00 00 = 2351 decimaal
       2       00 00 00 00           CC 18 00 00 = 6348 - 2351 = 3997 decimaal
       3       00 00 00 00           9D 1E 00 00 = 7837 – 6348 = 1489
       4       01 00 00 00           B7 1E 00 00 = 7863 – 7837 = 26 decimaal

Sub-blok       Start                                Inhoud
1              13c180 + 2c + 0 =13c1ac              mp3
2              13c180 + 2c +92f = 13cadb            mp3
3              13c180 + 2c + 18cc =13da78           mp3
4              13c180 + 2c + 1e9d = 13e049          onbekend

Data blok 5 - Kodak blok

Dit blok heeft géén header, bevat alleen het MPEG plaatje:
Zie’ Data blok 2 – MPEG blok’ voor indeling van een MPEG plaatje.
Dit plaatje start op 13e064, en is 720 bij 480 pixels.


Checksum
De laatste 4 bytes in het bestand, dit is de crc32 checksum.
De bestandsgrootte is altijd een veelvoud van 4.
Display aan de voorkant van de speler
Op het display van de speler zelf, aan de voorkant rechts, komen zo nu en dan korte teksten te
staan, zoals ‘OPEN’ en ‘CLOSE’. Dit noem ik voor de eenvoud de ODD, de On Device
Display.

Dat is een zogenaamd 7 segments display, met plaats voor 7 posities.


              a

        f           b

              g

        e           c

              d

Met deze 7 segmenten kun je tekens maken.
0 = segment is uit, 1 = segment is aan.
1 teken is 1 byte groot, bit patroon = 0gfedcba

Bits          Hex       Teken    Teken#     Bits           Hex    Teken    Teken#
00111111      3f        0        00         00000110       06     1        01
01011011      5b        2        02         01001111       4f     3        03
01100110      66        4        04         01101101       6d     5        05
01111101      7d        6        06         00000111       07     7        07
01111111      7f        8        08         01101111       6f     9        09
00000000      00        spatie   0a         01110111       77     A        0b
01111100      7c        b        0c         00111001       39     C        0d
01011000      58        c        0e         01011110       5e     d        0f
01111001      79        E        10         01110001       71     F        11
01101111      6f        g        12         01110110       76     H        13
00110000      30        I        14         00011111       1f     J        15
00111000      38        L        16         00110111       37     n        17
00111111      3f        O        18         01110011       73     P        19
01100111      67        q        1a         01010000       50     r        1b
01101101      6d        S        1c         01111000       78     t        1d
00111110      3e        U        1e         01100110       66     4        1f
01101110      6e        y        20         00001000       08     _        21
10110110      b6        ||       22         10001100       86      |       23
00000000      00        spatie   24         00000000       00     spatie   24
01011100      5c        blokje   25

Hier komt de tabel met Hex teken code’s , index is het teken#.
00042aa7h: 3F 06 5B 4F 66 6D 7D 07 7F 6F 00 77 7C 39 58 5E
00042ab7h: 79 71 6F 76 30 1F 38 37 3F 73 67 50 6D 78 3E 66
00042ac7h: 6E 08 B6 86 00 00 5C
Hier nog een tabel met tekstjes voor op de VFD:

00042a05h:   24   1C   1D   18   19   24   13   18   16   0F   01   0A   24   19   16   0B
00042a15h:   20   01   0A   01   0A   24   1B   18   18   1D   27   14   1D   16   10   0A
00042a25h:   0A   1D   06   17   18   0F   14   1C   0D   06   1E   17   0F   14   1C   0D
00042a35h:   24   18   19   10   17   27   16   18   1C   10   0A   0A   0D   33   1F   0E
00042a45h:   0F   24   1C   1F   0E   0F   24   16   18   0B   0F   33   18   11   11   01
00042a55h:   0A   24   15   10   19   12   24   19   21   0E   0F   33   10   1B   1B   33
00042a65h:   1E   19   12   18   0F   12   10   1C   1D   0A   0A   14   23   19   0C   0E
00042a75h:   01   0A   00


Adres             Teken#’s                      Tekst

42a06             1C 1D 18 19                   StOP
42a0c             13 18 16 0F                   HOLd
42a12             19 16 0B 20                   PLAy
42a1b             1B 18 18 1D                   rOOt
42a20             14 1D 16 10                   ItLE
42a28             17 18 0F 14 1C 0D             nOdISC
42a2f             1E 17 0F 14 1C 0D             UndISC
42a36             18 19 10 17                   OPEn
42a3b             16 18 1C 10                   LOSE
42a43             1F 0E 0F                      4cd
42a47             1C 1F 0E 0F                   S4cd
42a4c             16 18 0B 0F                   LOAd
42a51             18 11 11                      OFF
42a57             15 10 19 12                   JEPg
42a5c             19 21 0E 0F                   P_cd
42a61             10 1B 1B                      Err
42a65             1E 19 12                      UPg
Map van de firmware file
Start    Inhoud                           Lengte
Hex                              Hex               Decimaal

000000   Pagina 0 8032 code      10000             65536
010000   Pagina 1                10000             65536
020000   Pagina 2                10000             65536
030000   Pagina 3                10000             65536
040000   Pagina 4                b2fc              45820
04b2fc   ARM Bootstrap           3ab8              15032
04edb4   ARM Compressed blok 1   1d06c             118892
06be20   ARM Compressed blok 2   322ac             205484
09e0cc   DSP label               20                32
09e0ec   DSP header + blokken    3a2c0             238272
0d83ac   Data index              28                40
0d83d4   OSD index               10                16
0d83e4   OSD 1                   22558             140632
0fa93c   OSD 2                   2b2f8             176888
125c34   MPEG index              18                24
125c4c   MPEG 1                  e5d2              58834
13421e   MPEG 2                  3b7b              15227
137d99   MPEG 3                  42d7              17111
13c070   Data ??? blok           110               272
13c180   Sound index             2c                44
13c1ac   Sound 1 ( MP3 )         92f               2351
13cadb   Sound 2 ( MP3 )         f9d               3997
13da78   Sound 3 ( MP3 )         5d1               1489
13e049   Sound ???               1a                26
13e063   slack byte              1                 1
13e064   Kodak blok              3b7b              15227
141bdf   slack byte              1                 1
141be0   Checksum                4                 4
                                 =====             ======
                                 141be4            1317860
Hardware
Mediatek MT1389DE     bevat ARM processor
                      1) ARM instructies (32 bits) met DSP extensies
                      2) Thumb instructies (16 bits)

ISSI42S16400A 7T      64 MegaBit SDRAM = 8 MB
X0963100D 0327

AT5665H               DVD/CD motor driver
T3B12B

MBM 29LV160T-90PFTN   16 MegaBit CMOS Flash Memory van
0335                  Fujistu
                      identiek aan AM29LVxxx van AMD

PT6311                Vacuum Fluorescent Display (VFD) Controller
                      = Segment Display and Key scanner

				
DOCUMENT INFO
Shared By:
Categories:
Tags:
Stats:
views:5
posted:12/31/2011
language:
pages:30