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

Last change on this file since 133 was 133, checked in by krille_n_@…, 14 years ago

Size optimizations in various files in the Assembly Library. Also a very small change to a string in XTIDE_Universal_BIOS_Configurator_v2/Src/Strings.asm

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