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

Last change on this file since 48 was 48, checked in by aitotat, 14 years ago

Changes to Assembly Library:
Added functions to clear Menu Title and Information areas.
Implemented automatic line change when writing Menu Title and Information areas.
CGA snow related functions have been moved to CgaSnow.asm.
Keyboard input functions no longer produce beep for backspace.

File size: 8.4 KB
Line 
1; File name     :   Display.inc
2; Project name  :   AssemblyLibrary
3; Created date  :   25.6.2010
4; Last update   :   6.10.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    %elifidn %1, PrepareOffScreenBufferInESBXtoESDI
29        call    DisplayContext_PrepareOffScreenBufferInESBXtoESDI
30    %else
31        mov     di, DISPLAY_LIB.%1
32        call    Display_FunctionFromDI
33    %endif
34%endmacro
35
36
37; Display library functions
38struc DISPLAY_LIB
39    .PushDisplayContext:
40    .PopDisplayContext:
41    .PrepareOffScreenBufferInESBXtoESDI:
42    .InitializeDisplayContext                       resb    2
43
44    .SetCharacterPointerFromBXAX                    resb    2
45    .SetCharOutputFunctionFromAXwithAttribFlagInBL  resb    2
46    .SetCharacterOutputParameterFromAX              resb    2
47    .SetCharacterAttributeFromAL                    resb    2
48    .SetCursorShapeFromAX                           resb    2
49    .SetCursorCoordinatesFromAX                     resb    2
50    .SetNewPageFromAL                               resb    2
51    .SynchronizeDisplayContextToHardware            resb    2
52
53    .GetCharacterPointerToBXAX                      resb    2
54    .GetSoftwareCoordinatesToAX                     resb    2
55    .GetColumnsToALandRowsToAH                      resb    2
56
57    .FormatNullTerminatedStringFromCSSI             resb    2
58    .PrintSignedWordFromAXWithBaseInBX              resb    2
59    .PrintWordFromAXwithBaseInBX                    resb    2
60    .PrintCharBufferFromBXSIwithLengthInCX          resb    2
61    .PrintNullTerminatedStringFromBXSI              resb    2
62    .PrintNullTerminatedStringFromCSSI              resb    2
63    .PrintRepeatedCharacterFromALwithCountInCX      resb    2
64    .PrintCharacterFromAL                           resb    2
65    .PrintNewlineCharacters                         resb    2
66    .ClearAreaWithHeightInAHandWidthInAL            resb    2
67    .ClearScreen                                    resb    2
68endstruc
69
70; Attribute flags for DISPLAY_LIB.SetCharacterOutputFunctionFromAXwithAttributeFlagInDL
71ATTRIBUTES_NOT_USED                         EQU     0
72ATTRIBUTES_ARE_USED                         EQU     FLG_CONTEXT_ATTRIBUTES
73
74; Character output functions for DISPLAY_LIB.SetCharacterOutputFunctionFromAXwithAttributeFlagInDL
75TELETYPE_OUTPUT_WITH_ATTRIBUTE              EQU     DisplayCharOut_TeletypeOutputWithAttribute
76TELETYPE_OUTPUT_WITHOUT_ATTRIBUTE           EQU     DisplayCharOut_TeletypeOutput
77TELETYPE_OUTPUT_USING_BIOS                  EQU     DisplayCharOut_BiosTeletypeOutput
78FAST_OUTPUT_WITH_ATTRIBUTE_ONLY             EQU     DisplayCharOut_Attribute
79FAST_OUTPUT_WITH_CHAR_ONLY                  EQU     DisplayCharOut_Character
80FAST_OUTPUT_WITH_CHAR_AND_ATTRIBUTE         EQU     DisplayCharOut_CharacterWithAttribute
81BUFFER_OUTPUT_WITH_CHAR_ONLY                EQU     DisplayCharOut_WriteCharacterToBuffer
82
83DEFAULT_CHARACTER_OUTPUT                    EQU     TELETYPE_OUTPUT_WITH_ATTRIBUTE
84
85
86struc VIDEO_BDA
87                        resb    449h
88    .bMode              resb    1       ; 0:449h, Video, Mode
89    .wColumns           resb    2       ; 0:44Ah, Video, Number of columns
90    .wBytesPerPage      resb    2       ; 0:44Ch, Video, Total number of bytes per page
91    .wPageOffset        resb    2       ; 0:44Eh, Video, Current page offset
92    .rgwCursors         resb    4       ; 0:450h, Video, Cursor position, pages 0...1
93    .displayContext     resb    12      ; Our own display context (normally cursors for pages 2...7)
94    .wCursorShape       resb    2       ; 0:460h, Video, Cursor shape
95    .bActivePage        resb    1       ; 0:462h, Video, Active display page
96    .wVideoPort         resb    2       ; 0:463h, Video, I/O Port number base
97    .bInternalModeReg   resb    1       ; 0:465h, Video, Internal mode register
98    .bColorPalette      resb    1       ; 0:466h, Video, Color palette
99endstruc
100
101struc DISPLAY_CONTEXT
102    .fpCursorPosition   resb    4   ; Far pointer to cursor position in video memory
103    .fnCharOut          resb    2   ; Function to draw character with
104    .wCharOutParam      resb    2   ; User parameter for custom character output function
105    .wCursorShape       resb    2   ; Current cursor shape
106    .bAttribute         resb    1   ; Selected character attribute
107    .bFlags             resb    1   ; Display context flags
108endstruc
109
110; Display context flags
111FLG_CONTEXT_ATTRIBUTES      EQU     (1<<0)  ; Character output function uses attributes
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)
203DOUBLE_TOP_RIGHT_CORNER                     EQU     187
204DOUBLE_TOP_LEFT_CORNER                      EQU     201
205DOUBLE_BOTTOM_RIGHT_CORNER                  EQU     188
206DOUBLE_BOTTOM_LEFT_CORNER                   EQU     200
207DOUBLE_VERTICAL                             EQU     186
208DOUBLE_HORIZONTAL                           EQU     205
209DOUBLE_VERTICAL_TO_RIGHT_SINGLE             EQU     199
210DOUBLE_VERTICAL_TO_LEFT_SINGLE              EQU     182
211DOUBLE_LEFT_HORIZONTAL_TO_SINGLE_VERTICAL   EQU     181
212DOUBLE_RIGHT_HORIZONTAL_TO_SINGLE_VERTICAL  EQU     198
213SINGLE_HORIZONTAL                           EQU     196
214SINGLE_LEFT_HORIZONTAL_TO_VERTICAL          EQU     180
215SINGLE_RIGHT_HORIZONTAL_TO_VERTICAL         EQU     195
216ANGLE_QUOTE_LEFT                            EQU     174
217ANGLE_QUOTE_RIGHT                           EQU     175
218BLOCK_MOSTLY_BACKGROUND                     EQU     176
219BLOCK_EVEN_BACKGROUND_AND_FOREGROUND        EQU     177
220BLOCK_MOSTLY_FOREGROUND                     EQU     178
221BLOCK_FULL_FOREGROUND                       EQU     219
222
223
224; Background character for clearing screen
225%ifndef SCREEN_BACKGROUND_CHARACTER
226    %define SCREEN_BACKGROUND_CHARACTER     BLOCK_MOSTLY_BACKGROUND
227%endif
228%ifndef SCREEN_BACKGROUND_ATTRIBUTE
229    %define SCREEN_BACKGROUND_ATTRIBUTE     MONO_NORMAL
230%endif
231
232%endif ; DISPLAY_INC
Note: See TracBrowser for help on using the repository browser.