{"id":1044,"date":"2009-10-17T16:00:38","date_gmt":"2009-10-17T23:00:38","guid":{"rendered":"https:\/\/www.reenigne.org\/blog\/?p=1044"},"modified":"2009-10-01T10:50:07","modified_gmt":"2009-10-01T17:50:07","slug":"cga-why-the-80-column-text-mode-requires-the-border-color-to-be-set","status":"publish","type":"post","link":"https:\/\/www.reenigne.org\/blog\/cga-why-the-80-column-text-mode-requires-the-border-color-to-be-set\/","title":{"rendered":"CGA: Why the 80-column text mode requires the border color to be set"},"content":{"rendered":"<p>The original IBM Color Graphics Adapter has a curious quirk &#8211; it won&#8217;t by default display colour on the composite output in 80-column text mode. By looking at the schematics, I&#8217;ve figured out why this is, and what the CGA&#8217;s designers could have done differently to avoid this bug. The following diagram illustrates the structure of the various horizontal and vertical sync pulses, overscan and visible areas in the CGA.<\/p>\n<p style=\"text-align: center;\"><img decoding=\"async\" class=\"centerwide\" src=\"http:\/\/www.reenigne.org\/misc\/cga_timings.gif\" alt=\"\" \/><\/p>\n<p>There are two horizontal sync pulses &#8211; there&#8217;s the one generated by the 6845 (the 160-pixel wide red\/grey\/yellow band in the diagram) and there&#8217;s the one output to the monitor (the 64-pixel wide grey band within it). The CGA takes the 6845&#8217;s hsync pulse and puts it through various flip flops to generate the output hsync pulse (delayed by 2 LCLKs and with a width of 4 LCLKs) and also the color burst pulse (in yellow, delayed by 7 LCLKs and with a width of 2 LCLKs).<\/p>\n<p>The 6845 can generate an hsync pulse anywhere from 1 to 16 clock ticks in width. The IBM&#8217;s BIOS sets it up at 10 ticks (as shown in the diagram). However, in 80-column text mode those ticks are only half as wide, so only extend 3\/4 of the way through the output hsync pulse. The 6845&#8217;s hsync pulse ends before the color burst pulse gets a chance to start, so it never happens and the display will show a monochrome image.<\/p>\n<p>By changing the overscan color to brown, one can create one&#8217;s own color burst signal at the right point in the signal, and this was the usual way of working around the problem (possibly the only way that works reliably)<\/p>\n<p>By changing the 6845&#8217;s pulse width to the maximum of 16, one could generate the first half of the color burst pulse (I think) and some monitors might recognize this as a color burst.<\/p>\n<p>If the CGA&#8217;s designers had started the output hsync pulse at the beginning of the 6845&#8217;s hsync pulse (or delayed by only 1 LCLK instead of 2) then using the maximum pulse width would have been sufficient to generate the correct color burst. I guess they were just trying to center the output hsync pulse and the color burst within the 6845 pulse, without thinking of the high-res case.<\/p>\n<p>The diagram also shows why interlaced mode doesn&#8217;t work on the CGA &#8211; the output vertical sync pulse is generated in a similar way to the output horizontal sync pulse, only it&#8217;s 3 lines instead of 4 LCLKs. It always starts at the beginning of an output hsync pulse, so a field can&#8217;t start halfway through a scanline.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>The original IBM Color Graphics Adapter has a curious quirk &#8211; it won&#8217;t by default display colour on the composite output in 80-column text mode. By looking at the schematics, I&#8217;ve figured out why this is, and what the CGA&#8217;s designers could have done differently to avoid this bug. The following diagram illustrates the structure [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[38],"tags":[],"class_list":["post-1044","post","type-post","status-publish","format-standard","hentry","category-emulation"],"_links":{"self":[{"href":"https:\/\/www.reenigne.org\/blog\/wp-json\/wp\/v2\/posts\/1044","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.reenigne.org\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.reenigne.org\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.reenigne.org\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.reenigne.org\/blog\/wp-json\/wp\/v2\/comments?post=1044"}],"version-history":[{"count":3,"href":"https:\/\/www.reenigne.org\/blog\/wp-json\/wp\/v2\/posts\/1044\/revisions"}],"predecessor-version":[{"id":1047,"href":"https:\/\/www.reenigne.org\/blog\/wp-json\/wp\/v2\/posts\/1044\/revisions\/1047"}],"wp:attachment":[{"href":"https:\/\/www.reenigne.org\/blog\/wp-json\/wp\/v2\/media?parent=1044"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.reenigne.org\/blog\/wp-json\/wp\/v2\/categories?post=1044"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.reenigne.org\/blog\/wp-json\/wp\/v2\/tags?post=1044"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}