[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]