Today a friend needed some computer help and he stopped by. The computer wouldn’t boot and it was given to him, so we just decided to install a fresh OS. It was running Win ME, which is old and broken so we installed Win XP which is the new hotness.
Anyway, we didn’t know what kind of video card it had. There were no markings on the card, Windows didn’t recognize it and for some reason it’s BIOS wasn’t showing a banner as it booted, so I couldn’t tell.
I tried a few things here and there I couldn’t figure it out. Suddenly, like some kind of thing that is cool I remembered my bit bangin’ SVGA programin’ days and I went into old skool mode.
I pulled up a command prompt, I ran debug.exe which is the command prompt debugger that has come with DOS and Windows since the dawn of time. I reached deep into the bowels of my memory and pulled c000:0000 from the bottom.I entered “d c000:000” and looked at the glorious video BIOS copyright string telling me the type of video card.
You see, a video card has a BIOS on it. It’s similar to the BIOS on the computer in that it performs basic functions the hardware needs to survive before the drivers can get loaded and take over. The BIOS in a video card automatically gets mapped into a PCs memory space at c000:0000 during boot up and historically the copyright string has always been right up there near the top. The D command in the DOS debugger dumps memory at the specified address in human readable form.
Was it worth this long ass story? Probably not, but man it felt good to actually touch the hardware again. Modern compilers have so removed the programmer from the hardware, which is admittedly probably a good thing, that most “senior” programmers now probably wouldn’t have a clue as to what I am talking about.
C:Temp>debug -d c000:000 C000:0000 55 AA 68 E9 36 06 00 00-00 00 00 00 00 00 00 00 U.h.6........... C000:0010 00 00 00 00 00 00 00 00-68 01 00 00 00 00 49 42 ........h.....IB C000:0020 4D 02 00 00 00 00 00 00-00 00 00 00 00 00 00 00 M............... C000:0030 20 37 36 31 32 39 35 35-32 30 00 00 00 00 00 00 761295520...... C000:0040 3F 3F 00 00 00 00 00 00-08 01 00 00 00 00 00 00 ??.............. C000:0050 32 30 30 33 2F 30 36 2F-30 36 20 31 35 3A 34 31 2003/06/06 15:41 C000:0060 00 00 A0 00 E9 DA 12 00-E9 CA 1E 00 00 00 00 00 ................ C000:0070 44 52 28 37 90 08 4B 17-19 7C 00 00 00 00 00 00 DR(7..K..|...... -d C000:0080 0D 0A 50 2F 4E 31 33 33-2D 50 43 31 39 30 30 2D ..P/N133-PC1900- C000:0090 32 39 0D 0A 00 28 43 29-20 31 39 38 38 2D 32 30 29...(C) 1988-20 C000:00A0 30 33 2C 20 41 54 49 20-54 65 63 68 6E 6F 6C 6F 03, ATI Technolo C000:00B0 67 69 65 73 20 49 6E 63-2E 20 42 4B 2D 41 4D 49 gies Inc. BK-AMI C000:00C0 20 56 45 52 30 30 38 2E-30 31 31 2E 30 30 36 2E VER008.011.006. C000:00D0 30 30 30 00 20 70 61 70-63 31 39 30 30 2E 32 39 000. papc1900.29 C000:00E0 20 76 36 31 31 20 00 56-33 35 30 41 47 50 20 44 v611 .V350AGP D C000:00F0 47 44 31 55 4E 00 00 4F-45 4D 20 56 52 2E 30 30 GD1UN..OEM VR.00 -q C:Temp>