Thread View: alt.msdos.programmer
3 messages
3 total messages
Started by dernis
Sun, 26 Jul 1992 13:42
text modes
Author: dernis
Date: Sun, 26 Jul 1992 13:42
Date: Sun, 26 Jul 1992 13:42
25 lines
1596 bytes
1596 bytes
Hi, I am wondering if someone can help me with what should be an easy problem, I think, but I can't find the answer. I am interested in using text modes 0-3 with an alternate character set. I just bought an MS-DOS book, by the Waite Group assuming that it would be good, because I really liked their C- Bible. And it has been good, regarding memory management, device drivers, graphic modes and other things, but it has said near nothing about text modes with color or altering the character set. For some reason I am under the impression that character 00h-7Fh are not alterable, but characters 80h-FFh are alterable. I don't know why I have this impression, I just do and it may be completely wrong. Could someone straighten me ought, and also explain how one would go about changing these, especially in C, but I would appreciate any solution. Also, how is color handled in the text modes. I was given the imprsesion that a text lines is 80 bytes. This does not leave room for color, or is this latched bit planes like the EGA? Please someone help, with either a BIOS solution or direct or both. Thanks in advance for your help. Mitch Dernis
Re: text modes
Author: Tim Link
Date: Sun, 26 Jul 1992 20:56
Date: Sun, 26 Jul 1992 20:56
636 lines
33796 bytes
33796 bytes
In article <1992Jul26.134202.12205@news.cs.brandeis.edu> dernis@binah.cc.brandeis.edu writes:
>
>I am interested in using text modes 0-3 with an alternate character
>set.
>
>For some reason I am under the impression that character 00h-7Fh are
>not alterable, but characters 80h-FFh are alterable.
>
>Also, how is color handled in the text modes.
>
>Mitch Dernis
Mitch...
The entire character set can be altered in the modes that you are interested
in (0-3). Graphics modes only allow the upper 128 characters to be altered
so you are not completely off base in your recollections.
Colors are handled by having an attribute byte following each character byte
in the display buffer. For each 80 character row on the screen, there are
actually 160 bytes used in the display buffer. The attribute bytes can control
blinking,backgrond color, intensity/font and foreground color. The attributes
work as follows:
+-+---+-+---+
Bit |7|654|3|210| Colors Normal Intense
+-+---+-+---+
| | | | 0 - Black Gray
| | | +---- Foreground Color 1 - Blue Light Blue
| | | 2 - Green Light Green
| | +------- Intensity/Font 3 - Cyan Light Cyan
| | 4 - Red Light Red
| +---------- BackGround Color 5 - Magenta Light Magenta
| 6 - Brown Yellow
+------------- Blinking 7 - White Intense White
Only 8 colors (normal) are available for the background. Sixteen colors are
available for the forground (8 normal & 8 intense). If an alternate font is
loaded the intensity bit controls which of the fonts a character is shown in.
By default the alternate font is also displayed as intense, but this can be
changed by loading the palette registers.
Rather than try to explain how to load the fonts I've written a short Turbo
Pascal 6 program to illustrate. It doesn't really do anything useful, but
hopefully, you can see what you have to do with it. I used BIOS calls to handle
the font loading/selecting and direct screen writes to actually display the
test data.
Hope this helps!
Here's the program ( There's a uuencoded ZIP file following this that has the
source, executables and several ".FNT" files. )
Program ScreenFont;
Uses
DOS,CRT;
Var
Regs : Registers;
Font : Array[ 0..8191 ] Of Byte; { Storage for font file }
FontNameA : String;
FontNameB : String;
{ ReadFont reads a font file into an array in preparation for loading
into the display adapter. Reading is rather slow as it is performed
byte by byte. No matter... it's only a demo. }
Procedure ReadFont( FName:String );
Var
FontFile : File Of Byte;
Index : Word;
Begin
Index := 0;
Assign( FontFile, FName );
Reset( FontFile );
Repeat
Read( FontFile, Font[Index] );
Index := Succ( Index );
Until EOF( FontFile );
Close( FontFile );
End;
{ The EGA adapter can store up to 4 fonts in it's memory at a time, the
VGA can store 8. (This demo only supports 4, regardless.) The memory
spaces for these fonts are refered to as blocks.
LoadFontArray makes a BIOS call that copies the font array to the
display adapter RAM in the specified block. It also reprograms the
adapter for 16 scan lines per row, because that's the size of the
font files I have. The lines/row can actually be anything between
8 and 16. (Some adapters have extensions for taller characters.)}
Procedure LoadFontArray( Block:Byte );
Begin
With Regs Do
Begin
AH := $11; { Function 0x11, Subfunction 0x00 - Load User Font }
AL := $00;
BH := 16; { Number of scan lines/row }
BL := Block; { Block number - 0-3 }
CX := 256; { Number of characters in character set }
DX := 0; { Starting character number }
ES := Seg( Font[0] ); { Segment of users font }
BP := Ofs( Font[0] ); { Offset of users font }
Intr( $10, Regs );
End;
End;
{ The EGA/VGA allows 2 fonts to be in use at the same time. The particular
font a character is displayed in, is determined by bit 3 of the attribute
byte (normally the intensity bit). This procedure determines which of the
4 supported font blocks will be used for each state of bit 3. Block "A"
will be used when bit3=0 and block "B" will be used when bit3=1. Note that
even though bit3 is used to select the font block, it still functions as
the intensity bit, meaning block "B" will be intensified. If this is
undesired, the palette can be modified to correct it. (See proc FixPalette)}
Procedure SelectFonts( A,B : Byte );
Var
BlockSpec:Byte;
Begin
BlockSpec := (A AND 3) OR ((B AND 3) SHL 2); {bits0-1 select font block A}
With Regs Do {bits2-3 select font block B}
Begin
AH := $11; {function 0x11, subfunction 0x03 - Set Block Specifier}
AL := $03;
BL := BlockSpec;
Intr( $10, Regs );
End;
End;
Procedure DisplayPattern( Offset:Word; FG, BG:Byte );
Var
Address : Word;
Attrib : Byte;
Data : Byte;
Begin
Attrib := (FG And $0F) OR ((BG AND $0F) SHL 4 );
For Data := 0 To 255 Do
Begin
Address := Offset + (Data * 2);
Mem[ $B800:Address ] := Data; { store the character }
Mem[ $B800:Address+1 ] := Attrib; { store the attribute }
End;
End;
{ DisplayTest uses direct writes to the display buffer to display all
characters of the 2 currently active fonts.}
Procedure DisplayTest;
Var
Data,Attrib:Byte;
Offset : Word;
Begin
DisplayPattern( 0, 2, 0 );
DisplayPattern( 800, 11, 0 );
DisplayPattern(1600, 4, 0 );
DisplayPattern(2400, 13, 0 );
End;
{ Adjusts the palette so that the upper 8 colors (normally intense) match
the lower 8 colors (normal intensity). This makes both fonts display
in normal intensity. }
Procedure FixPalette;
Begin
With Regs Do
Begin
AH := $10; { function 0x10, subfunction 0x00 - Set Palette Reg }
AL := 0;
BX := $0712; { makes upper 8 & lower 8 colors equal intensity }
Intr( $10, Regs );
End;
End;
Begin
ClrScr;
If ParamStr(1) <> '' Then
FontNameA := ParamStr(1)
Else
FontNameA := 'SCRIPT';
If ParamStr(2) <> '' Then
FontNameB := ParamStr(2)
Else
FontNameB := 'MEDIEVAL';
Writeln( 'Reading font files... Please wait.' );
ReadFont( FontNameA + '.FNT' );
LoadFontArray( 1 );
ReadFont( FontNameB + '.FNT' );
LoadFontArray( 2 );
ClrScr;
FixPalette;
SelectFonts( 1,2 );
DisplayTest;
GotoXY( 1,20 );
NormVideo;
Writeln( FontNameA );
HighVideo;
Writeln( FontNameB );
Write( 'Press <Enter>' );
Readln;
End.
---- BEGIN ----------------- Part 1/1 ----------------------
begin 644 scrnfont.zip
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
M/!+V6R2#;Q(B3K;&4`'0C@G#'48V>+R,.;)USNTK&B18\	VAF38OE&279N
MM,\A>G<.:<^4.7/FW-U\(T5`<3G?A&5M$2:?MS@>;]R@3B;<\W4TN?/X&N:+
M.(.IJ;_V\`R>(5HX[Z0;*`X7+UMWOT9CQ/%Z$,&N\N_ZM6O7KGM&L[1K[FN$
MK!.?"?,M@B>!1P*D\63E$Q3:X%/[8#X/$>P>9<#13;R-`?)^NNPR:8@&TIW7
M?M8MC6>T.<"CGE&BOUHWOS^2=\12]<I,W3VCYXNUR0,4#B$>[=<(H+!E[D#-
M"H=8';Q")`!'16A3Y`R:ENF7B>>#BSP5[(_)Z)EAMGS8F1X-#GBYE%X#>'2^
M@\^$WDT<_PNFX6`-;QNBNT$?WZAW>89A57N&<I_#.T2@*1A63E+F\33J:YBG
MY1GF:?D&XUDPQSU#))(]0RG,$3Q,&>CF%.H9)I'T[TR8/F'.`-E(MSLW^L7.
M_4XS^=%&W/^!?/DSXJDBFCV%(6W/,&]1SXBOY(DPW_(,\R_N^G,`E*CDO!*`
M)MY03R-.]6&]^+"7@FI?1F;6^S['T?%A#=G_!3L&3T;SV86_*7[>,^UPP\\F
M')$`DGP!YEG^!/,L3X9YEK^@=]SZ;B0RU4R.G;OW[]LS7R2V[J3OH^'"[.YL
M<',^%Q-">!A/1(A4#J:5L&=RX,`!*P4'/\81]K[;89CSAV?DS+///X@33W,>
M(0X1_$:;;&UN$"@PS=MDLTQ&)!(,\WQ55<$PSW>_$PS3$;%@[!F-[QD:WS/2
MIHU@;L^8$@KM[QGJ':Q]`^^H?]+&.[2_;W#O-3H*G7A&/84)&KBW((+_\`X5
M_+]W\/_>P<A8J&_[!_,._>$=\15YXR_HFS!_M`T%(/J&O/<UHFWRWC^X=]0W
M\8[Z)]Y172:^(8+[&LQ?J&CL">#>0GT9^X=Z,UR4L7]P3Z/:1'P1S!O`/(TR
MH5DPZBO$,PX?7C!,"^T/@F'0X8)A:"/*V,TG1+CZ?AQC/X$QB!^:'`.2J,9`
ML!'J.TDV0+<`%OX'!^]L/!:"TP04AP$TRNT^*N,X.(8`@N"86">D?AE[9LVY
MW2/$/;CM/GX(.*$E@"Q4$8>8L\_S:V#_&-[]J(2'\336R/283\&`;,)8Y*.:
M(**'ZM'$(*-:%/&,@L0W/!I(G#AV.#<<_#\?#C%*]`Z6C,:1)I@5%DP`#Q-,
M/M@39\^6QY-);&N41L9^AF+S:F2^!^%"%"P_`-!02P,$"@````8`JH+Z&'D`
M[9QT$0``(!@```P```!30U).1D].5"Y%6$4/`!(#)!4V)S@Y:GM,G6X?"08!
M$S3E]I;WFVH%";`A0)X`(P(\:O"H:=P#`0*9GJF`X3EL>X)A#S'L.(;]R+`S
M&?8PPYYFV/L,NZ!ACS3LEH;=U+![&_9VPWXRP+P->ZAA+S?L`I[V)\-.9=B_
M##N:8;\S[(Z&G=.PQQIV8,-^;=C+#;N^86>05%,U[!:&W<2PPQCV),,^9=C#
M#/N>80<T[)*&_=*P<QKV4,,^:]B*[`![#?NS8:<V[-F&?=RPHQMV><-^@<RN
M8MAA!AC.JU,#=#?LB@NF>A*OFK@\;L$!-?,5X'Q@=L@3]TO0X-7&O@'^MW@5
M]W^`4#7?/7!]3.")#?OU1SU@_Q:T2<UD$U@'3>."NO(E.;MFHP*F\<6^W`]\
M'"M`#^@?54#]8.($N/FBHAV(THCM%]23"('3-39-3E0P329FWU4X@:ZD[[CB
MQ@T6^5+$$XDKXK8P1,5&"8HV"O"X023/!PA_M%*`C+&/IH*DYGX4'88-$>IO
M(GSK0H"B`12]@#&SXHSF@]D+T'>2`V&2SQ7]=/"+H35OH%D7"D=L]-_8Z`'5
M__/:D(:""HV;@-(X`:7U@=).0>`Z7I_L:-\@>X?J"_XJCG)WUT\`.-(DQL
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
MXPC9RN,IQ#/<.WN&'SXL*"-NH#U\6%/8,TS)TW]-S>>)C_WG%=K]SHU^L7._
MT]!H-FB:^;]A9_Z,81%OL8AF;T$](]ZBGE%?L2?"?,LSS+^XZ\\!\<PJ][.5
M!;N?O_!ASS`9W8>]P8>]%,RI9<+$\U)\_FYW3Y/#&K+_"[9OFE]'=KYBS;XI
M?IZKTQLXFGQ)L</Y6=@7H)[EB3"_3WT9\2U_0>_U#M#;MXYIQH>/G[_]^;$O
MT@#Q,N3+W,[#A,>31,=352T..1S,$TRN#0[[<*C9MC";JD`/'#C`X>#@QYIE
M(]1NAUWUAV?DS+///XA3=C:`1$$DY$RSS,VP1"RP6'/1+9.,&<^=,PQ;554P
MA'3!$%MCP>#QXW.&$&;!TD<+5O/FD(F0B?M[AGH':\ZG!(\%@_,GOL&]6Q@)
M:-(?'+&G$+L`ZBWP&#]^>(?&D""QE8]X!S-&B'?4/\H=0I@]"?[LF2I#G_FQ
M$`.GY\"A,LF@@F+V<__@SWP)]M\[ZA_U3GA%?(,W\V9PW_)E<$:`8!"(+Z/^
M8=Z,D%&H?XBG44\1PNQQH?X(\4;4`B7!2#\3%"H:AP\O&/+A@V"(<\QKR+W.
M*&-GGQ#5ZNY'V*88S!14LH^OP"(#]J^Y-2*^`W'"X7S8U/!_F94Z>T9UFCQM
M0:-(K2W!^\400!`=!NNA_1\`)1\$BI>-\"FO*+B=SZ\Z'Z_1=[MW[W[G@4,D
M701IHFP_/,GC[AYJPH-YP1&02+`^W.?"/('&$(WZ,C'(*&8A!/),0.(;)@WH
MV$"1.K/^\^$0HD0)VR,AT`3'PH)Y1B6C'UR,@CE[MCS`Q'&I41H98QF*K:N1
M]1ZX!4;]>"+<#P`+4$L!`@L`"@````8```"A#`[B8]CE!@```!````H`````
M```````@`````````%-#4DE05"Y&3E102P$""P`*````!@``D#04'4Y'N9T&
M````$```"P```````````"`````-!P``04Y425%512Y&3E102P$""P`*````
M!@"J@OH8>0#MG'01```@&```#````````````"````#3#0``4T-23D9/3E0N
M15A%4$L!`@L`"@````8```"A#!BV7PY]!@```!````P````````````@````
M<1\``$U%1$E%5D%,+D9.5%!+`0(+``H````&`!H[B0WE-.3_W@4````0```*
M````````````(````!@F``!&55154D4N1DY44$L!`@L`"@````8``)`T%.1Z
MCT$;!@```!````H````````````@````'BP``$9215-.3RY&3E102P$""P`*
M````!@"J@OH8JO]VH,$'``"I$0``#``````````!`"````!A,@``4T-23D9/
M3E0N4$%34$L!`@L`"@````8``)`T%-.([)M5!@```!````D````````````@
M````3#H``%)/34%.+D9.5%!+`0(+``H````&````H0S@QQ1]'@8````0```,
M````````````(````,A```!#3TU0551%4BY&3E102P4&``````D`"0```@``
&$$<`````
`
end
---- END ------------------- CUT HERE ----------------------
Re: text modes
Author: Alan Mead
Date: Tue, 28 Jul 1992 14:20
Date: Tue, 28 Jul 1992 14:20
33 lines
1429 bytes
1429 bytes
linkt@GroupW.cns.vt.edu (Tim Link) writes: >In article <1992Jul26.134202.12205@news.cs.brandeis.edu> dernis@binah.cc.brandeis.edu writes: >> >>I am interested in using text modes 0-3 with an alternate character >>set. >> >Mitch... >[...] >Rather than try to explain how to load the fonts I've written a short Turbo >Hope this helps! >Program ScreenFont; >[...] Via private mail I also send much the same info as you did (my TP code was from the book _Stretching Turbo Pascal : Version 5.5_ by Ken Porter and Mike Floyd. So while I have code, I can't say I understand the process. Also, STP:v55 mentions looking at a book by Wilton but never gives a reference (I think Porter died, leaving an unfinished manuscript). So I, for one, would appreciate an explanation if you care to do so. Other video modes would also be interesting. just what can you do with the system fonts in DOS. Thanks. -alan mead
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads