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

Last change on this file since 133 was 133, checked in by krille_n_@…, 13 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
Line 
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
24    %elifidn %1, PrepareOffScreenBufferInESBXwithLengthInCX
25        call    DisplayContext_PrepareOffScreenBufferInESBXwithLengthInCX
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:
37    .InitializeDisplayContext                       resb    2
38
39%ifndef EXCLUDE_FROM_XTIDE_UNIVERSAL_BIOS
40    .SetCharacterPointerFromBXAX                    resb    2
41%endif
42    .SetCharOutputFunctionFromAXwithAttribFlagInBL  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%ifndef EXCLUDE_FROM_XTIDE_UNIVERSAL_BIOS
51    .GetCharacterPointerToBXAX                      resb    2
52%endif
53    .GetSoftwareCoordinatesToAX                     resb    2
54    .GetColumnsToALandRowsToAH                      resb    2
55
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
66    .ClearScreenWithCharInALandAttrInAH             resb    2
67endstruc
68
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
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
106    .bFlags             resb    1   ; Display context flags
107endstruc
108
109; Display context flags
110FLG_CONTEXT_ATTRIBUTES      EQU     (1<<0)  ; Character output function uses attributes
111FLG_CONTEXT_CGA             EQU     (1<<1)  ; CGA detected so prevent CGA snow
112
113
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
187OFFSET_TO_CGA_STATUS_REGISTER   EQU     6   ; Base port 3D4h + 6 = 3DAh
188CGA_STATUS_REGISTER             EQU     3DAh
189
190
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)
203QUOTATION_MARK                              EQU     34
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
214SINGLE_VERTICAL                             EQU     179
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
220BLOCK_MOSTLY_BACKGROUND                     EQU     176
221BLOCK_EVEN_BACKGROUND_AND_FOREGROUND        EQU     177
222BLOCK_MOSTLY_FOREGROUND                     EQU     178
223BLOCK_FULL_FOREGROUND                       EQU     219
224ONE_HALF                                    EQU     171
225ONE_QUARTER                                 EQU     172
226
227
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
235%define SCREEN_BACKGROUND_CHARACTER_AND_ATTRIBUTE   (SCREEN_BACKGROUND_CHARACTER | (SCREEN_BACKGROUND_ATTRIBUTE<<8))
236%define DOS_BACKGROUND_CHARACTER_AND_ATTRIBUTE      (' ' | (MONO_NORMAL<<8))
237
238%endif ; DISPLAY_INC
Note: See TracBrowser for help on using the repository browser.