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

Last change on this file since 43 was 41, checked in by Tomi Tilli, 14 years ago

Initial commit for Assembly Library.

File size: 7.4 KB
Line 
1; File name : Display.inc
2; Project name : AssemblyLibrary
3; Created date : 25.6.2010
4; Last update : 15.9.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 %else
29 mov di, DISPLAY_LIB.%1
30 call Display_FunctionFromDI
31 %endif
32%endmacro
33
34
35; Display library functions
36struc DISPLAY_LIB
37 .PushDisplayContext:
38 .PopDisplayContext:
39 .InitializeDisplayContext resb 2
40
41 .SetCharacterPointerFromBXAX resb 2
42 .SetCharacterOutputFunctionFromAX 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 .GetCharacterPointerToBXAX resb 2
51 .GetSoftwareCoordinatesToAX resb 2
52 .GetColumnsToALandRowsToAH resb 2
53
54 .FormatNullTerminatedStringFromCSSI resb 2
55 .PrintSignedDecimalIntegerFromAX resb 2
56 .PrintWordFromAXwithBaseInBX resb 2
57 .PrintCharBufferFromBXSIwithLengthInCX resb 2
58 .PrintNullTerminatedStringFromBXSI resb 2
59 .PrintNullTerminatedStringFromCSSI resb 2
60 .PrintRepeatedCharacterFromALwithCountInCX resb 2
61 .PrintCharacterFromAL resb 2
62 .PrintNewlineCharacters resb 2
63 .ClearAreaWithHeightInAHandWidthInAL resb 2
64 .ClearScreen resb 2
65endstruc
66
67; Character output functions for DISPLAY_LIB.SetCharacterOutputFunctionFromAX
68TELETYPE_OUTPUT_WITH_ATTRIBUTE EQU DisplayCharOut_TeletypeOutputWithAttribute
69TELETYPE_OUTPUT_WITHOUT_ATTRIBUTE EQU DisplayCharOut_TeletypeOutput
70TELETYPE_OUTPUT_USING_BIOS EQU DisplayCharOut_BiosTeletypeOutput
71FAST_OUTPUT_WITH_ATTRIBUTE_ONLY EQU DisplayCharOut_Attribute
72FAST_OUTPUT_WITH_CHAR_ONLY EQU DisplayCharOut_Character
73FAST_OUTPUT_WITH_CHAR_AND_ATTRIBUTE EQU DisplayCharOut_CharacterWithAttribute
74BUFFER_OUTPUT_WITH_CHAR_ONLY EQU DisplayCharOut_WriteCharacterToBuffer
75
76DEFAULT_CHARACTER_OUTPUT EQU TELETYPE_OUTPUT_WITH_ATTRIBUTE
77
78
79struc VIDEO_BDA
80 resb 449h
81 .bMode resb 1 ; 0:449h, Video, Mode
82 .wColumns resb 2 ; 0:44Ah, Video, Number of columns
83 .wBytesPerPage resb 2 ; 0:44Ch, Video, Total number of bytes per page
84 .wPageOffset resb 2 ; 0:44Eh, Video, Current page offset
85 .rgwCursors resb 4 ; 0:450h, Video, Cursor position, pages 0...1
86 .displayContext resb 12 ; Our own display context (normally cursors for pages 2...7)
87 .wCursorShape resb 2 ; 0:460h, Video, Cursor shape
88 .bActivePage resb 1 ; 0:462h, Video, Active display page
89 .wVideoPort resb 2 ; 0:463h, Video, I/O Port number base
90 .bInternalModeReg resb 1 ; 0:465h, Video, Internal mode register
91 .bColorPalette resb 1 ; 0:466h, Video, Color palette
92endstruc
93
94struc DISPLAY_CONTEXT
95 .fpCursorPosition resb 4 ; Far pointer to cursor position in video memory
96 .fnCharOut resb 2 ; Function to draw character with
97 .wCharOutParam resb 2 ; User parameter for custom character output function
98 .wCursorShape resb 2 ; Current cursor shape
99 .bAttribute resb 1 ; Selected character attribute
100 resb 1
101endstruc
102
103
104; Text mode character attribute byte bits for CGA+ (color adapters)
105FLG_COLOR_FORE_BLUE EQU (1<<0)
106FLG_COLOR_FORE_GREEN EQU (1<<1)
107FLG_COLOR_FORE_RED EQU (1<<2)
108FLG_COLOR_FORE_INTENSITY EQU (1<<3)
109FLG_COLOR_FORE_FONT_B EQU (1<<3) ; Select font set B (if available, EGA+)
110FLG_COLOR_BACK_BLUE EQU (1<<4)
111FLG_COLOR_BACK_GREEN EQU (1<<5)
112FLG_COLOR_BACK_RED EQU (1<<6)
113FLG_COLOR_BACK_INTENSITY EQU (1<<7) ; Intensity when blinking is disabled
114FLG_COLOR_BLINK EQU (1<<7) ; Blinking color when enabled (enabled by default)
115
116; CGA colors
117%define COLOR_ATTRIBUTE(foreground, background) ( (foreground) | ((background)<<4) )
118COLOR_BLACK EQU 0
119COLOR_BLUE EQU 1
120COLOR_GREEN EQU 2
121COLOR_CYAN EQU 3
122COLOR_RED EQU 4
123COLOR_MAGENTA EQU 5
124COLOR_BROWN EQU 6
125COLOR_WHITE EQU 7 ; Last background color if blinking enabled
126COLOR_GRAY EQU 8
127COLOR_LIGHT_BLUE EQU 9
128COLOR_LIGHT_GREEN EQU 10
129COLOR_LIGHT_CYAN EQU 11
130COLOR_LIGHT_RED EQU 12
131COLOR_LIGHT_MAGENTA EQU 13
132COLOR_YELLOW EQU 14
133COLOR_BRIGHT_WHITE EQU 15
134
135
136; Text mode character attribute byte bits for MDA (monochrome adapters)
137; (attributes 00h, 08h, 80h, 88h, 70h, 78h, F0h and F8h are exceptions)
138FLG_MONO_UNDERLINE EQU (1<<1)
139FLG_MONO_INTENSITY EQU (1<<3)
140FLG_MONO_BLINK EQU (1<<7)
141
142; Text mode character attribute bytes for MDA/Hercules (monochrome adapters)
143; *Not displayed on some monitors
144MONO_HIDDEN EQU 00h ; Not displayed (same for 08h, 80h and 88h)
145MONO_UNDERLINE EQU 01h ; Underlined
146MONO_NORMAL EQU 07h ; Normal (white on black)
147MONO_BRIGHT_UNDERLINE EQU 09h ; High intensity, underlined
148MONO_BRIGHT EQU 0Fh ; High intensity
149MONO_REVERSE EQU 70h ; Reverse video (black on white)
150MONO_REVERSE_DARK EQU 78h ; (dark green on green)
151MONO_BLINK EQU 87h ; Blinking white on black*
152MONO_BRIGHT_BLINK EQU 8Fh ; Blinking high intensity*
153MONO_REVERSE_BLINK EQU 0F0h ; Blinking reverse video
154MONO_REVERSE_DARK_BLINK EQU 0F8h ; (blinking dark green on green)
155
156
157; Cursor position macro for DX register
158%define CURSOR_XY(x, y) ( (x) | ((y)<<8) )
159
160; Cursor shapes
161CURSOR_NORMAL EQU 0607h ; Two line cursor near or at the bottom of cell
162CURSOR_HIDDEN EQU 2000h
163
164
165; Display modes
166CGA_TEXT_MODE_BW40 EQU 0 ; Applications should use...
167CGA_TEXT_MODE_CO40 EQU 1
168CGA_TEXT_MODE_BW80 EQU 2 ; ..black, white and bright white attributes only
169CGA_TEXT_MODE_CO80 EQU 3
170MDA_TEXT_MODE EQU 7 ; Real monochrome attributes available
171
172
173; Display segments
174COLOR_TEXT_SEGMENT EQU 0B800h ; Text modes 0...3 (CGA+)
175MONO_TEXT_SEGMENT EQU 0B000h ; Text mode 7 (MDA, Hercules)
176
177
178; Control characters for teletype output
179NULL EQU 00h
180SOH EQU 01h ; Start of heading
181STX EQU 02h ; Start of text
182BELL EQU 07h ; Bell
183BS EQU 08h ; Backspace
184TAB EQU 09h ; Horizontal TAB
185LF EQU 0Ah ; Line feed (newline)
186CR EQU 0Dh ; Carriage return
187ESC EQU 1Bh ; Escape
188
189; Non ASCII characters (code page 437)
190DOUBLE_TOP_RIGHT_CORNER EQU 187
191DOUBLE_TOP_LEFT_CORNER EQU 201
192DOUBLE_BOTTOM_RIGHT_CORNER EQU 188
193DOUBLE_BOTTOM_LEFT_CORNER EQU 200
194DOUBLE_VERTICAL EQU 186
195DOUBLE_HORIZONTAL EQU 205
196DOUBLE_VERTICAL_TO_RIGHT_SINGLE EQU 199
197DOUBLE_VERTICAL_TO_LEFT_SINGLE EQU 182
198DOUBLE_LEFT_HORIZONTAL_TO_SINGLE_VERTICAL EQU 181
199DOUBLE_RIGHT_HORIZONTAL_TO_SINGLE_VERTICAL EQU 198
200SINGLE_HORIZONTAL EQU 196
201SINGLE_LEFT_HORIZONTAL_TO_VERTICAL EQU 180
202SINGLE_RIGHT_HORIZONTAL_TO_VERTICAL EQU 195
203ANGLE_QUOTE_LEFT EQU 174
204ANGLE_QUOTE_RIGHT EQU 175
205
206
207%endif ; DISPLAY_INC
Note: See TracBrowser for help on using the repository browser.