Its provision of an MDA compatible high quality text mode in combination with a (for its time) high resolution graphics mode (as well as aggressive pricing) made the Hercules card extraordinarily popular in the early days of the PC. The existence of CGA emulation drivers/TSRs, which allowed Hercules users to run programs written for the CGA card's standard graphics modes (albeit only in monochrome, without actual colour), may also have been a contributing factor to its success, especially so because programming for the Hercules card's native graphics mode was somewhat hindered by the fact that there was neither any BIOS support nor standardization from IBM — after all, the HGC was a competing technology. Popular IBM PC programs at the time (such as Lotus 1-2-3 spreadsheet and Autocad computer-aided drafting) came with their own drivers to allow use of the Hercules graphics mode.
Long after its prime, the Hercules card continued to be popular for specialist applications, such as some debuggers and CAD programs, because it could be used to connect a secondary monitor alongside another (colour) graphic adapter. Certain software detected the HGC and used the monochrome display for extra data display while running the application on the other screen — for example a CAD work area would be displayed on the main (non-Hercules driven) screen and a list of drawing commands would be shown on the HGC driven monochrome screen.
Horizontal frequency 18.425 +/-0.500 kHz, Vertical frequency 50 Hz.
Its monochrome text mode could display 80×25 text characters and was MDA compatible. As such, it rendered characters in a box of 9×14 pixels, of which 7×11 made out the character itself (the other pixels being used for space between character columns and lines). This amounted to markedly clearer text display than the competing CGA adapter could offer. The total theoretical resolution of this text mode was 720×350 pixels. This number is arrived at through multiplying the character width of 9 pixels by the number of text columns possible on screen (80) as well as multiplying the character height of 14 pixels by the number of text lines (25). In the MDA compatible text mode, however, these pixels were not individually addressable. The Hercules card's single monochrome graphics mode simply made all pixels directly addressable. This translated to a resolution of not 720×350, but only 720×348 pixels (at 1 bit per pixel) because, for technical reasons, the screen height had to be a multiple of four.
The Hercules card supported two graphic pages, one at address B0000h and one at address B8000h. The second page could be enabled or disabled by software. When it was disabled, the addresses used by the card did not overlap with those used by color adapters such as CGA or VGA. This made dual screen operation possible simply through installation of a Hercules card next to, for instance, a VGA adapter.
Hercules also made a CGA-compatible card, the Hercules Color Card, which could coexist with a monochrome HGC and still allow both graphics pages to be used. It would detect when the second graphics page was selected and disable access to its own memory, which would otherwise have been at the same addresses.
address = (0xb0000) + (row * 160 ) + (column * 2)
In graphics mode, the lines are interleaved so it is a bit harder. There are 8 pixels per byte, 90 bytes per line. Consecutive lines on the screen are interleaved by 4 lines in memory, so in memory it looks like this:
Screen Line #0 starts at B000:0000
Screen Line #1 starts at B000:2000
Screen Line #2 starts at B000:4000
Screen Line #3 starts at B000:6000
Screen Line #4 starts at B000:005A ...
The memory address that contains a given pixel is given by:
mem = (0xb8000) + ((y&3)<<13)+(y>>2)*90+(x>>3)
This code would set the correct pixel in that byte:
or contents with (128>> (x& 7 ) )
CGA emulation on a Hercules card could be done almost entirely via hardware, or through software via "brute force" copying of data on a regular interrupt. Hardware emulation was normally something done by programmers of an application, such as a game, as a "quick and dirty" way to add Hercules support. Software emulation was performed by third-party utilities as a way to get graphics programs with only CGA support working on a Hercules.
Hardware emulation was achieved by enabling the second Hercules video page, which would appear at segment B800h just like CGA, and then making it the visible page. The Motorola 6845 would then be reprogrammed to display 80 "columns" of data (640 pixels) instead of the usual 90 (720). Data was then written just as it would on a real CGA (ie. the video display was updated by writing to segment B800h) with only minor changes due to the different memory interlacing structure. The advantage of this method was no loss of speed during the emulation: Data did not need to be significantly reformatted from the original CGA data while written, only interlaced differently. The disadvantage was that the image appeared vertically "squashed", as CGA data only used 200 lines of the 350 available.
Software emulation would copy from the CGA video memory location to the Hercules memory location. It would reformat the CGA data (320 or 640 x 200 pixels) to the higher resolution (720 x 348) Hercules. Because of the reformatting of data while copying to completely fill the 720x348 graphics space, and the speed penalty introduced via that method, this introduced an interlacing type of display artifact since the copying could not complete before the beginning of the next display cycle.