[Back to EGAVGA SWAG index] [Back to Main SWAG index] [Original]

    {OK...for awhile I've been saying I'm going to post my unit for changing
    characters...well today's the day.  This unit has one procedure called
    ProcessChar.  You pass ProcessChar the ordinal value of the character
    you wish to process (between 0 and 255), the data that holds your new
    character or where you want to load the existing character, and if you
    want to load it or save it.  There are also four constants that simulate
    a copyright symbol.  One is bigger than the other (that's the only
    difference).  You can replace characters with the copyright symbol so
    effectively you can have a legal C-in-a-circle in text mode!!  Although,
    I do not know if this is actually legal, so don't mark my words... }

    Unit ModChar;

          {                       Unit Name: ModChar                       }
          {                      Author: Rob Perelman                      }

    Interface

    Const LoadChar=False;
          SaveChar=True;

    Type CharPic=Array[1..16] of Byte;

    Const CRLeft: CharPic=(0,31,48,99,198,140,140,140,140,140,140,198,99,48,
            31,0);
          CRRight: CharPic=(0,248,12,198,99,1,1,1,1,1,33,99,198,12,248,0);
          BigCRLeft: CharPic=(31,48,96,195,134,140,140,140,140,140,140,134,
            195,96,48,31);
          BigCRRight: CharPic=(248,12,6,195,97,1,1,1,1,1,33,97,195,6,12,
            248);

      Procedure ProcessChar(CharNum: Byte; var Pic: CharPic; Which: Boolean);

    Implementation

    Uses Dos;

    Procedure ProcessChar(CharNum: Byte; var Pic: CharPic; Which: Boolean);
    Begin
      Inline($FA);
      PortW[$3C4]:=$0402;
      PortW[$3C4]:=$0704;
      PortW[$3CE]:=$0204;
      PortW[$3CE]:=$0005;
      PortW[$3CE]:=$0006;
      If Which then Move(Pic, Mem[$A000:CharNum*32], SizeOf(CharPic))
               Else Move(Mem[$A000:CharNum*32], Pic, SizeOf(CharPic));
      PortW[$3C4]:=$0302;
      PortW[$3C4]:=$0304;
      PortW[$3CE]:=$0004;
      PortW[$3CE]:=$1005;
      PortW[$3CE]:=$0E06;
      Inline($FB);
    End;

    End.

[Back to EGAVGA SWAG index] [Back to Main SWAG index] [Original]