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

{MR> How can I change say char 255 (A blank) into anything I want?

I don't know exactly how to do it, but here's a little program that'll
help you get started with this.}


PROGRAM CHANGE_CHARACTER_SET;
USES CRT;

TYPE
  CharSet = Array[0..255] of Array[1..8] of Byte;
            {255 characters} {8 bytes per character  }
            {of which each } {each bit in each byte  }
            {uses 8 bytes  } {specifies if something }
                             {must be outputted to   }
                             {screen, eg. a 255 is   }
                             {********, a dot in each}
                             {position, a 253 is     }
                             {****** *, a dot in each}
                             {position, except the   }
                             {second last.           }
                       


VAR
  It  : CharSet ABSOLUTE $C396:$0; {set up an array of the character}
                                   {set, $C396:$0, being the position}
                                   {in memory for this}
  It2 : CharSet;  {set up a second array of the character set so that}
                  {you can restore them on exiting of your program}
  LP, Lp2, Lp3 : BYTE;   {Some variables for looping}


BEGIN
CLRSCR;
IT2:=IT;  {Store the set into a backup array}

{This is where you would do your character manipulation}
{I've tried it out, by changing the memory, but it doesn't}
{seem to work, I think you have to run it on an interrupt}
{bases, ie. Play around with your interrupt vectors, if you}
{manage to figure it out, please tell me how you did it}
{The programming that follows is just a simple example to}
{show you how the character set information is stored, what}
{it does, is it outputs on screen what the character looks like}
{kind of like 64*64 instead of 8*8 text mode}


FOR LP3:=0 TO 255 DO                               {This part of the}
  BEGIN                                            {program outputs the}
    FOR LP:=1 TO 8 DO                              {characters onto the}
      BEGIN                                        {screen, eg, a 1 }
        FOR LP2:=7 DOWNTO 0 DO                     {would look something}
          IF (IT[LP3][LP] SHR LP2) AND $1=1 THEN   {like this:}
             MEM[$B800:(LP-1)*160+(7-LP2)*2]:=219  {  ***   Not exactly,}
                                            ELSE   { * **   But close}
             MEM[$B800:(LP-1)*160+(7-LP2)*2]:=0;   {   **   enough.}
        WRITELN;                                   {   **   }
      END;                                         {   **   }
    READLN;                                        {   **   }
    CLRSCR;                                        {   **   }
  END;                                             {********}

{Once you're finished with the program, or when people wish to exit, I 
suggest that you reset the character set to the original set, that's why
I made IT2 equal IT, so that you have a backup of the old set, just use 
the following to restore it}

IT:=IT2;
END.

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