--- layout: page title: IBM EGA ROM permalink: /devices/pc/video/ibm/ega/ --- IBM EGA ROM --- To (re)build the JSON-encoded IBM EGA ROM with symbols, run the following command: filedump --file=archive/ibm-ega.rom --format=bytes --decimal The symbol information in the MAP file will be automatically converted and appended to the dump of the ROM file. The PCjs server's Dump API can be used as well: http://www.pcjs.org/api/v1/dump?file=http://archive.pcjs.org/devices/pc/video/ibm/ega/ibm-ega.rom&format=bytes&decimal=true ### Font Information As noted in [Video.onROMLoad()](/modules/pcjs/lib/video.js), the Video component needs to know where the card's font data is located: For EGA cards, in the absence of any parameters, we assume that we're receiving the original IBM EGA ROM, which stores its 8x14 font data at 0x2230 as one continuous sequence; the total size of the 8x14 font is 0xE00 bytes. At 0x3030, there is an "ALPHA SUPPLEMENT" table, which contains 15 bytes per row instead of 14, because each row is preceded by one byte containing the corresponding ASCII code; there are 20 entries in the supplemental table, for a total size of 0x12C bytes. Finally, at 0x3160, we have the 8x8 font data (also known as the thicker "double dot" CGA font); the total size of the 8x8 font is 0x800 bytes. No other font data is present in the EGA ROM; the thin 5x7 "single dot" CGA font is notably absent, which is fine, because we never loaded it for the MDA/CGA either. TODO: Determine how the supplemental table is used and whether we need to add some "run-time" font generation to support it (as opposed to "init-time" generation, which is all we do now). There's probably a similar need for user-defined fonts; for now, they're simply not supported. For reference, here are the first 0x80 bytes at offset 0x2230 from this ROM, which contain the font data for the first 9 8x14 characters: 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 0x00002230 ................ 0x7E,0x81,0xA5,0x81,0x81,0xBD,0x99,0x81,0x7E,0x00,0x00,0x00,0x00,0x00,0x7E,0xFF, // 0x00002240 ~.......~.....~. 0xDB,0xFF,0xFF,0xC3,0xE7,0xFF,0x7E,0x00,0x00,0x00,0x00,0x00,0x00,0x6C,0xFE,0xFE, // 0x00002250 ......~......l.. 0xFE,0xFE,0x7C,0x38,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x38,0x7C,0xFE,0x7C, // 0x00002260 ..|8........8|.| 0x38,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x3C,0x3C,0xE7,0xE7,0xE7,0x18,0x18, // 0x00002270 8............... 0x3C,0x00,0x00,0x00,0x00,0x00,0x18,0x3C,0x7E,0xFF,0xFF,0x7E,0x18,0x18,0x3C,0x00, // 0x00002280 ........~..~.... 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x3C,0x3C,0x18,0x00,0x00,0x00,0x00,0x00, // 0x00002290 ................ 0xFF,0xFF,0xFF,0xFF,0xFF,0xE7,0xC3,0xC3,0xE7,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00, // 0x000022A0 ................