EduBat wrote on 2026-05-26, 19:07:
Marco Pistella wrote on 2026-05-23, 10:05:
RC2
- Added Video BIOS dump to disk (S key in F10 screen)
It is may be interesting to note that the Video BIOS extracted by X-Vesa is the runtime one, after initialisation. In this case, some of the initialisation code is not present, but it may be interesting to get it to better understand the card. The specs go into a lot more detail about how it all works.
In my GTX650, the file extracted by X-Vesa has 58368 bytes, while the one I extracted "before initialisation" has 64512.
Just for completeness, let me add a bit more information regarding how I extracted the "before" BIOS I attached...
The answer is here:
https://envytools.readthedocs.io/en/latest/hw/io/prom.html
i.e. there is a copy of the Video BIOS in the MMIO configuration space.
To access it, you need to find out the address of this address space from the PCI configuration space and add the value of the PROM register depending on graphics card.
As an example, in my computer I have...
root [ ~ ]# lspci -vs1:0.0
01:00.0 VGA compatible controller: NVIDIA Corporation GK107 [GeForce GTX 650] (rev a1) (prog-if 00 [VGA controller])
Subsystem: Gigabyte Technology Co., Ltd Device 3553
Flags: bus master, fast devsel, latency 0, IRQ 25
Memory at fd000000 (32-bit, non-prefetchable) [siz=16M]
Memory at d0000000 (64-bit, prefetchable) [siz=256M]
Memory at ce000000 (64-bit, prefetchable) [siz=32M]
I/O ports at dc00 [siz=128]
Expansion ROM at 000c0000 [siz=128K]
...so the MMIO address is fd000000h. I then add the location of the PROM address which is 300000h giving out fd300000h.
I then convert this value to decimal and divide it by 4.
Now I can do use dd with the /dev/mem device.
root [ ~ ]# dd if=/dev/mem skip=1061945344 bs=4 count=16384 of=VVBIOS.BIN
16384+0 records in
16384+0 records out
65536 bytes (66 kB, 64 KiB) copied, 0.133868 s, 490 kB/s
Through trial and error I realised I really had to use block size 4 (32bits) on the command above, or else I would get some wrong bytes in the output.
(in order for dd to work like this, the kernel needs to be compiled with CONFIG_STRICT_DEVMEM not set)
(Hope this helps someone someday..)