Old Skool

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>