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

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

Changes to Assembly Library:
Removed Memory_ExchangeSSBPwithESDI since it obviously corrupted stack.
CGA detection is now only done once when initializing Display Context.
Moved File Library defines to File.inc.

File size: 8.5 KB
RevLine 
[41]1; File name : Display.inc
2; Project name : AssemblyLibrary
3; Created date : 25.6.2010
[50]4; Last update : 9.10.2010
[41]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
[48]28 %elifidn %1, PrepareOffScreenBufferInESBXtoESDI
29 call DisplayContext_PrepareOffScreenBufferInESBXtoESDI
[41]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:
[48]41 .PrepareOffScreenBufferInESBXtoESDI:
[44]42 .InitializeDisplayContext resb 2
[41]43
[44]44 .SetCharacterPointerFromBXAX resb 2
[45]45 .SetCharOutputFunctionFromAXwithAttribFlagInBL resb 2
[44]46 .SetCharacterOutputParameterFromAX resb 2
47 .SetCharacterAttributeFromAL resb 2
48 .SetCursorShapeFromAX resb 2
49 .SetCursorCoordinatesFromAX resb 2
50 .SetNewPageFromAL resb 2
51 .SynchronizeDisplayContextToHardware resb 2
[41]52
[44]53 .GetCharacterPointerToBXAX resb 2
54 .GetSoftwareCoordinatesToAX resb 2
55 .GetColumnsToALandRowsToAH resb 2
[41]56
[44]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
[41]68endstruc
69
[44]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
[41]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
[44]107 .bFlags resb 1 ; Display context flags
[41]108endstruc
109
[44]110; Display context flags
111FLG_CONTEXT_ATTRIBUTES EQU (1<<0) ; Character output function uses attributes
[50]112FLG_CONTEXT_CGA EQU (1<<1) ; CGA detected so prevent CGA snow
[41]113
[44]114
[41]115; Text mode character attribute byte bits for CGA+ (color adapters)
116FLG_COLOR_FORE_BLUE EQU (1<<0)
117FLG_COLOR_FORE_GREEN EQU (1<<1)
118FLG_COLOR_FORE_RED EQU (1<<2)
119FLG_COLOR_FORE_INTENSITY EQU (1<<3)
120FLG_COLOR_FORE_FONT_B EQU (1<<3) ; Select font set B (if available, EGA+)
121FLG_COLOR_BACK_BLUE EQU (1<<4)
122FLG_COLOR_BACK_GREEN EQU (1<<5)
123FLG_COLOR_BACK_RED EQU (1<<6)
124FLG_COLOR_BACK_INTENSITY EQU (1<<7) ; Intensity when blinking is disabled
125FLG_COLOR_BLINK EQU (1<<7) ; Blinking color when enabled (enabled by default)
126
127; CGA colors
128%define COLOR_ATTRIBUTE(foreground, background) ( (foreground) | ((background)<<4) )
129COLOR_BLACK EQU 0
130COLOR_BLUE EQU 1
131COLOR_GREEN EQU 2
132COLOR_CYAN EQU 3
133COLOR_RED EQU 4
134COLOR_MAGENTA EQU 5
135COLOR_BROWN EQU 6
136COLOR_WHITE EQU 7 ; Last background color if blinking enabled
137COLOR_GRAY EQU 8
138COLOR_LIGHT_BLUE EQU 9
139COLOR_LIGHT_GREEN EQU 10
140COLOR_LIGHT_CYAN EQU 11
141COLOR_LIGHT_RED EQU 12
142COLOR_LIGHT_MAGENTA EQU 13
143COLOR_YELLOW EQU 14
144COLOR_BRIGHT_WHITE EQU 15
145
146
147; Text mode character attribute byte bits for MDA (monochrome adapters)
148; (attributes 00h, 08h, 80h, 88h, 70h, 78h, F0h and F8h are exceptions)
149FLG_MONO_UNDERLINE EQU (1<<1)
150FLG_MONO_INTENSITY EQU (1<<3)
151FLG_MONO_BLINK EQU (1<<7)
152
153; Text mode character attribute bytes for MDA/Hercules (monochrome adapters)
154; *Not displayed on some monitors
155MONO_HIDDEN EQU 00h ; Not displayed (same for 08h, 80h and 88h)
156MONO_UNDERLINE EQU 01h ; Underlined
157MONO_NORMAL EQU 07h ; Normal (white on black)
158MONO_BRIGHT_UNDERLINE EQU 09h ; High intensity, underlined
159MONO_BRIGHT EQU 0Fh ; High intensity
160MONO_REVERSE EQU 70h ; Reverse video (black on white)
161MONO_REVERSE_DARK EQU 78h ; (dark green on green)
162MONO_BLINK EQU 87h ; Blinking white on black*
163MONO_BRIGHT_BLINK EQU 8Fh ; Blinking high intensity*
164MONO_REVERSE_BLINK EQU 0F0h ; Blinking reverse video
165MONO_REVERSE_DARK_BLINK EQU 0F8h ; (blinking dark green on green)
166
167
168; Cursor position macro for DX register
169%define CURSOR_XY(x, y) ( (x) | ((y)<<8) )
170
171; Cursor shapes
172CURSOR_NORMAL EQU 0607h ; Two line cursor near or at the bottom of cell
173CURSOR_HIDDEN EQU 2000h
174
175
176; Display modes
177CGA_TEXT_MODE_BW40 EQU 0 ; Applications should use...
178CGA_TEXT_MODE_CO40 EQU 1
179CGA_TEXT_MODE_BW80 EQU 2 ; ..black, white and bright white attributes only
180CGA_TEXT_MODE_CO80 EQU 3
181MDA_TEXT_MODE EQU 7 ; Real monochrome attributes available
182
183
184; Display segments
185COLOR_TEXT_SEGMENT EQU 0B800h ; Text modes 0...3 (CGA+)
186MONO_TEXT_SEGMENT EQU 0B000h ; Text mode 7 (MDA, Hercules)
187
[48]188OFFSET_TO_CGA_STATUS_REGISTER EQU 6 ; Base port 3D4h + 6 = 3DAh
189CGA_STATUS_REGISTER EQU 3DAh
[41]190
[48]191
[41]192; Control characters for teletype output
193NULL EQU 00h
194SOH EQU 01h ; Start of heading
195STX EQU 02h ; Start of text
196BELL EQU 07h ; Bell
197BS EQU 08h ; Backspace
198TAB EQU 09h ; Horizontal TAB
199LF EQU 0Ah ; Line feed (newline)
200CR EQU 0Dh ; Carriage return
201ESC EQU 1Bh ; Escape
202
203; Non ASCII characters (code page 437)
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_HORIZONTAL EQU 196
215SINGLE_LEFT_HORIZONTAL_TO_VERTICAL EQU 180
216SINGLE_RIGHT_HORIZONTAL_TO_VERTICAL EQU 195
217ANGLE_QUOTE_LEFT EQU 174
218ANGLE_QUOTE_RIGHT EQU 175
[44]219BLOCK_MOSTLY_BACKGROUND EQU 176
220BLOCK_EVEN_BACKGROUND_AND_FOREGROUND EQU 177
221BLOCK_MOSTLY_FOREGROUND EQU 178
222BLOCK_FULL_FOREGROUND EQU 219
[41]223
224
[44]225; Background character for clearing screen
226%ifndef SCREEN_BACKGROUND_CHARACTER
227 %define SCREEN_BACKGROUND_CHARACTER BLOCK_MOSTLY_BACKGROUND
228%endif
229%ifndef SCREEN_BACKGROUND_ATTRIBUTE
230 %define SCREEN_BACKGROUND_ATTRIBUTE MONO_NORMAL
231%endif
232
[41]233%endif ; DISPLAY_INC
Note: See TracBrowser for help on using the repository browser.