- "Alright guys let's do this" (c) leeroy jenkins
We have:
Hardware:
NXP MAC7116VAG50 - ARMv4T (ARM7TDMI) uC (1Mbyte)
Epson S2D13A05F00A1 - LCD controller, but i can't find any datasheet. Maybe need to send email to Epson to get it.
Spansion S29GL016A90TFIR2 - Flash (2Mbyte)
more at
https://mk4-wiki.denkdose.de/artikel/ip ... ardown_vfl
Software:
8M2T-14C026-CE (ROM)
8M2T-14C026-ED (flash)
All images stored in Flash in this format:
===================================
00 00 00 FF 01 00 00 00 - Header
...
... RLE-Encoded (with zero-pad)
...
XX XX - width
XX XX - Height
XX XX - width
00 00 - <probably> Height - but seems like always 00 00
30 XX XX XX - PTR to start of data frame
30 XX XX XX - PTR to start of image
00 00 56 38 - End of image (EOI)
===================================
So what is "RLE-Encoded (with zero-pad)" ?
its mean: if previous byte is zero, then current byte contains count of
repeats next byte
if previous byte is non-zero (and previous decoding done) then current
byte contains count of bytes to read.
First 2 RLE's we must treat as "count of repeats" (not yet full tested, but supposed to be true)
Notices:
1) <deprecated>
2) "End of image (EOI)" is not a marker! It is offset to the function that is used for data parsing.
3) At ROM, at 0x00005638 sits DisplayDraw function
4) ROM contains no functions for direct send commands to LCD
controller. PBL configures DMA and defines mem region (0x20217700) to use as framebuffer. But for 400*200*1 image we need 79KBytes of ROM - we need to investigate it.
5) All images stored as RGB8 picture, so we have only 256 colors, but
colortable is not standart. It have too many bits for blue. We can see
correct table at Display test (self-test of IPC). 0x00 offset in self-test at bottom of screen.
6) I created a table with an example of parsing an image located at 0x00000000:
https://docs.google.com/spreadsheets/d/ ... sp=sharing
7) initial function for bootlogo is at 0x000176F0, and there is no xrefs to it. I think that in the PBL there is some kind of RTOS (maybe QNX - i don't have a dump of region 0x00000000 - 0x00005000), which calls this function under certain conditions.
8) TODO: colortable. It is not a standart RGB8 [2:3:2]. it have an alpha channel. if byte is = 0xFF, it's not a black color - it means transparent pixel (skip byte printing)