source: xtideuniversalbios/trunk/Assembly_Library/Inc/Display.inc@ 44

Last change on this file since 44 was 44, checked in by Tomi Tilli, 15 years ago

Spaces can now be generated before format specifier when printing formatted string.
Background character and attribute can now be easily specified before compiling.

File size: 8.2 KB
Line 
1; File name : Display.inc
2; Project name : AssemblyLibrary
3; Created date : 25.6.2010
4; Last update : 27.9.2010
5; Author : Tomi Tilli
6; Description : Defines for display library.
7%ifndef DISPLAY_INC
8%define DISPLAY_INC
9
10;--------------------------------------------------------------------
11; Display Library users need to use this macro since it will provide
12; compatibility with future library versions.
13;
14; CALL_DISPLAY_LIBRARY
15; Parameters:
16; %1: Function to call (functionName from DISPLAY_LIB)
17; Registers: Depends on function to call
18; Returns:
19; Depends on function to call
20; Corrupts registers:
21; AX (unless used as a return register), DI
22;--------------------------------------------------------------------
23%macro CALL_DISPLAY_LIBRARY 1
24 %ifidn %1, PushDisplayContext
25 call DisplayContext_Push
26 %elifidn %1, PopDisplayContext
27 call DisplayContext_Pop
28 %else
29 mov di, DISPLAY_LIB.%1
30 call Display_FunctionFromDI
31 %endif
32%endmacro
33
34
35; Display library functions
36struc DISPLAY_LIB
37 .PushDisplayContext:
38 .PopDisplayContext:
39 .InitializeDisplayContext resb 2
40
41 .SetCharacterPointerFromBXAX resb 2
42 .SetCharOutputFunctionFromAXwithAttribFlagInDL resb 2
43 .SetCharacterOutputParameterFromAX resb 2
44 .SetCharacterAttributeFromAL resb 2
45 .SetCursorShapeFromAX resb 2
46 .SetCursorCoordinatesFromAX resb 2
47 .SetNewPageFromAL resb 2
48 .SynchronizeDisplayContextToHardware resb 2
49
50 .GetCharacterPointerToBXAX resb 2
51 .GetSoftwareCoordinatesToAX resb 2
52 .GetColumnsToALandRowsToAH resb 2
53
54 .FormatNullTerminatedStringFromCSSI resb 2
55 .PrintSignedWordFromAXWithBaseInBX resb 2
56 .PrintWordFromAXwithBaseInBX resb 2
57 .PrintCharBufferFromBXSIwithLengthInCX resb 2
58 .PrintNullTerminatedStringFromBXSI resb 2
59 .PrintNullTerminatedStringFromCSSI resb 2
60 .PrintRepeatedCharacterFromALwithCountInCX resb 2
61 .PrintCharacterFromAL resb 2
62 .PrintNewlineCharacters resb 2
63 .ClearAreaWithHeightInAHandWidthInAL resb 2
64 .ClearScreen resb 2
65endstruc
66
67; Attribute flags for DISPLAY_LIB.SetCharacterOutputFunctionFromAXwithAttributeFlagInDL
68ATTRIBUTES_NOT_USED EQU 0
69ATTRIBUTES_ARE_USED EQU FLG_CONTEXT_ATTRIBUTES
70
71; Character output functions for DISPLAY_LIB.SetCharacterOutputFunctionFromAXwithAttributeFlagInDL
72TELETYPE_OUTPUT_WITH_ATTRIBUTE EQU DisplayCharOut_TeletypeOutputWithAttribute
73TELETYPE_OUTPUT_WITHOUT_ATTRIBUTE EQU DisplayCharOut_TeletypeOutput
74TELETYPE_OUTPUT_USING_BIOS EQU DisplayCharOut_BiosTeletypeOutput
75FAST_OUTPUT_WITH_ATTRIBUTE_ONLY EQU DisplayCharOut_Attribute
76FAST_OUTPUT_WITH_CHAR_ONLY EQU DisplayCharOut_Character
77FAST_OUTPUT_WITH_CHAR_AND_ATTRIBUTE EQU DisplayCharOut_CharacterWithAttribute
78BUFFER_OUTPUT_WITH_CHAR_ONLY EQU DisplayCharOut_WriteCharacterToBuffer
79
80DEFAULT_CHARACTER_OUTPUT EQU TELETYPE_OUTPUT_WITH_ATTRIBUTE
81
82
83struc VIDEO_BDA
84 resb 449h
85 .bMode resb 1 ; 0:449h, Video, Mode
86 .wColumns resb 2 ; 0:44Ah, Video, Number of columns
87 .wBytesPerPage resb 2 ; 0:44Ch, Video, Total number of bytes per page
88 .wPageOffset resb 2 ; 0:44Eh, Video, Current page offset
89 .rgwCursors resb 4 ; 0:450h, Video, Cursor position, pages 0...1
90 .displayContext resb 12 ; Our own display context (normally cursors for pages 2...7)
91 .wCursorShape resb 2 ; 0:460h, Video, Cursor shape
92 .bActivePage resb 1 ; 0:462h, Video, Active display page
93 .wVideoPort resb 2 ; 0:463h, Video, I/O Port number base
94 .bInternalModeReg resb 1 ; 0:465h, Video, Internal mode register
95 .bColorPalette resb 1 ; 0:466h, Video, Color palette
96endstruc
97
98struc DISPLAY_CONTEXT
99 .fpCursorPosition resb 4 ; Far pointer to cursor position in video memory
100 .fnCharOut resb 2 ; Function to draw character with
101 .wCharOutParam resb 2 ; User parameter for custom character output function
102 .wCursorShape resb 2 ; Current cursor shape
103 .bAttribute resb 1 ; Selected character attribute
104 .bFlags resb 1 ; Display context flags
105endstruc
106
107; Display context flags
108FLG_CONTEXT_ATTRIBUTES EQU (1<<0) ; Character output function uses attributes
109
110
111; Text mode character attribute byte bits for CGA+ (color adapters)
112FLG_COLOR_FORE_BLUE EQU (1<<0)
113FLG_COLOR_FORE_GREEN EQU (1<<1)
114FLG_COLOR_FORE_RED EQU (1<<2)
115FLG_COLOR_FORE_INTENSITY EQU (1<<3)
116FLG_COLOR_FORE_FONT_B EQU (1<<3) ; Select font set B (if available, EGA+)
117FLG_COLOR_BACK_BLUE EQU (1<<4)
118FLG_COLOR_BACK_GREEN EQU (1<<5)
119FLG_COLOR_BACK_RED EQU (1<<6)
120FLG_COLOR_BACK_INTENSITY EQU (1<<7) ; Intensity when blinking is disabled
121FLG_COLOR_BLINK EQU (1<<7) ; Blinking color when enabled (enabled by default)
122
123; CGA colors
124%define COLOR_ATTRIBUTE(foreground, background) ( (foreground) | ((background)<<4) )
125COLOR_BLACK EQU 0
126COLOR_BLUE EQU 1
127COLOR_GREEN EQU 2
128COLOR_CYAN EQU 3
129COLOR_RED EQU 4
130COLOR_MAGENTA EQU 5
131COLOR_BROWN EQU 6
132COLOR_WHITE EQU 7 ; Last background color if blinking enabled
133COLOR_GRAY EQU 8
134COLOR_LIGHT_BLUE EQU 9
135COLOR_LIGHT_GREEN EQU 10
136COLOR_LIGHT_CYAN EQU 11
137COLOR_LIGHT_RED EQU 12
138COLOR_LIGHT_MAGENTA EQU 13
139COLOR_YELLOW EQU 14
140COLOR_BRIGHT_WHITE EQU 15
141
142
143; Text mode character attribute byte bits for MDA (monochrome adapters)
144; (attributes 00h, 08h, 80h, 88h, 70h, 78h, F0h and F8h are exceptions)
145FLG_MONO_UNDERLINE EQU (1<<1)
146FLG_MONO_INTENSITY EQU (1<<3)
147FLG_MONO_BLINK EQU (1<<7)
148
149; Text mode character attribute bytes for MDA/Hercules (monochrome adapters)
150; *Not displayed on some monitors
151MONO_HIDDEN EQU 00h ; Not displayed (same for 08h, 80h and 88h)
152MONO_UNDERLINE EQU 01h ; Underlined
153MONO_NORMAL EQU 07h ; Normal (white on black)
154MONO_BRIGHT_UNDERLINE EQU 09h ; High intensity, underlined
155MONO_BRIGHT EQU 0Fh ; High intensity
156MONO_REVERSE EQU 70h ; Reverse video (black on white)
157MONO_REVERSE_DARK EQU 78h ; (dark green on green)
158MONO_BLINK EQU 87h ; Blinking white on black*
159MONO_BRIGHT_BLINK EQU 8Fh ; Blinking high intensity*
160MONO_REVERSE_BLINK EQU 0F0h ; Blinking reverse video
161MONO_REVERSE_DARK_BLINK EQU 0F8h ; (blinking dark green on green)
162
163
164; Cursor position macro for DX register
165%define CURSOR_XY(x, y) ( (x) | ((y)<<8) )
166
167; Cursor shapes
168CURSOR_NORMAL EQU 0607h ; Two line cursor near or at the bottom of cell
169CURSOR_HIDDEN EQU 2000h
170
171
172; Display modes
173CGA_TEXT_MODE_BW40 EQU 0 ; Applications should use...
174CGA_TEXT_MODE_CO40 EQU 1
175CGA_TEXT_MODE_BW80 EQU 2 ; ..black, white and bright white attributes only
176CGA_TEXT_MODE_CO80 EQU 3
177MDA_TEXT_MODE EQU 7 ; Real monochrome attributes available
178
179
180; Display segments
181COLOR_TEXT_SEGMENT EQU 0B800h ; Text modes 0...3 (CGA+)
182MONO_TEXT_SEGMENT EQU 0B000h ; Text mode 7 (MDA, Hercules)
183
184
185; Control characters for teletype output
186NULL EQU 00h
187SOH EQU 01h ; Start of heading
188STX EQU 02h ; Start of text
189BELL EQU 07h ; Bell
190BS EQU 08h ; Backspace
191TAB EQU 09h ; Horizontal TAB
192LF EQU 0Ah ; Line feed (newline)
193CR EQU 0Dh ; Carriage return
194ESC EQU 1Bh ; Escape
195
196; Non ASCII characters (code page 437)
197DOUBLE_TOP_RIGHT_CORNER EQU 187
198DOUBLE_TOP_LEFT_CORNER EQU 201
199DOUBLE_BOTTOM_RIGHT_CORNER EQU 188
200DOUBLE_BOTTOM_LEFT_CORNER EQU 200
201DOUBLE_VERTICAL EQU 186
202DOUBLE_HORIZONTAL EQU 205
203DOUBLE_VERTICAL_TO_RIGHT_SINGLE EQU 199
204DOUBLE_VERTICAL_TO_LEFT_SINGLE EQU 182
205DOUBLE_LEFT_HORIZONTAL_TO_SINGLE_VERTICAL EQU 181
206DOUBLE_RIGHT_HORIZONTAL_TO_SINGLE_VERTICAL EQU 198
207SINGLE_HORIZONTAL EQU 196
208SINGLE_LEFT_HORIZONTAL_TO_VERTICAL EQU 180
209SINGLE_RIGHT_HORIZONTAL_TO_VERTICAL EQU 195
210ANGLE_QUOTE_LEFT EQU 174
211ANGLE_QUOTE_RIGHT EQU 175
212BLOCK_MOSTLY_BACKGROUND EQU 176
213BLOCK_EVEN_BACKGROUND_AND_FOREGROUND EQU 177
214BLOCK_MOSTLY_FOREGROUND EQU 178
215BLOCK_FULL_FOREGROUND EQU 219
216
217
218; Background character for clearing screen
219%ifndef SCREEN_BACKGROUND_CHARACTER
220 %define SCREEN_BACKGROUND_CHARACTER BLOCK_MOSTLY_BACKGROUND
221%endif
222%ifndef SCREEN_BACKGROUND_ATTRIBUTE
223 %define SCREEN_BACKGROUND_ATTRIBUTE MONO_NORMAL
224%endif
225
226%endif ; DISPLAY_INC
Note: See TracBrowser for help on using the repository browser.