Got another RAM dump and this makes sense, those are buffers I drawn into myself (dump starts from 0x40000000):
kitor@kitor-pc:Desktop$ xxd -e -s 0x0000FB1C -l 0x0C RAM.BIN #bmp_vram_info
0000fb1c: 412ff900 414ff400 414ff400 ../A..OA..OA #vram1, vram2, back_vram
kitor@kitor-pc:Desktop$ xxd -e -s 0x002ff900 -l 0x2C RAM.BIN #MARV for 2ff900
002ff900: 5652414d 41100100 00000000 11060200 MARV...A........
002ff910: 00000400 000002aa 412ff91c 4d454d50 ........../APMEM
002ff920: 00000010 00000000 41100000 ...........A
kitor@kitor-pc:Desktop$ xxd -e -s 0x004ff400 -l 0x2C RAM.BIN #MARV for 4ff400
004ff400: 5652414d 412ffc00 00000000 11060200 MARV../A........
004ff410: 00000400 000002aa 414ff41c 4d454d50 ..........OAPMEM
004ff420: 00000010 00000000 412ffadc ........../A
So the problem seems to be somewhere deeper, as LV hangs (and ML throws exception) directly on bmp_vram_raw() call
[e] I don't understand something:
uart_printf("bmp_vram_info %p \n", bmp_vram_info);
uart_printf("bmp_vram_info[0] %p \n", bmp_vram_info[0]);
uart_printf("vram1 %p \n", bmp_vram_info[0].vram1);
uart_printf("vram2 %p \n", bmp_vram_info[0].vram2);
uart_printf("back_vram %p \n", bmp_vram_info[0].back_vram);
uart_printf("bmp_marv, should match above %p \n", bmp_marv());
bmp_vram_info 0xfb1c
bmp_vram_info[0] 0x1
vram1 0x1
vram2 0x4fc0278
back_vram 0x41100000
bmp_marv, should match above 0x1