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

Last change on this file since 390 was 390, checked in by aitotat@…, 10 years ago

Changes to Assembly Library:

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