[comp.sys.ibm.pc.programmer] Accessing the Screen

Greg_d._Moore@mts.rpi.edu (Commander Krugannal) (03/25/90)

      Several people have asked about direct video access and
   several others have responded. I want to add to this though.
      If you want to access Hercules or Monochrome Adapter,
   the base offset it B0000.
      CGA/EGA/VGA are B8000. (Note that actually EGA/VGA are
   located at A0000 but the card does funky thing to keep you
   from normally accessing this area. Unless you are real sucidal
   or doing graphics stuff and REALLY know what you are doing,
   don't try it... :-)
      Code has already been given for accessing the first byte.
   But, keep in mind that each character on the screen takes two
   bytes in memory, the first is the character itself, and the
   second is the color (or attribute). So, you have to read as
   twice as many bytes as characters as you want. (or read every
   other one. It depends on the application. If you want to read
   a portion of the window so that you can save it and restore it,
   read every one so that you restore the correct color.)
      Someone mentioned that old CGA monitors produce "snow" when
   you directly access video memory. This is true (though I haven't
   found any new ones that don't either...). This can be taken care
   of in a simple manner. By checking when the screen retrace is
   done, you then disable it and all interrupts, do the memory
   i/o then renable it and all interrupts. I don't have the code
   with me to show you how to do it, but it is farily simple.
      If anyone wants routines to do this, let me know, I have some
   that are written in Turbo C that handle direct screen i/o. They
   allow you to capture portions of the screen, restore them, change
   the color without changing the text, and to write directly to the
   screen. E-Mail me...
 
   Greg_d._Moore@mts.rpi.edu