source: xtideuniversalbios/trunk/Assembly_Library/Src/Display/DisplayContext.asm@ 196

Last change on this file since 196 was 194, checked in by gregli@…, 13 years ago

ifdef'd out more unused code. Also added a tool for looking through the listing and the output of the precompiler to aid in finding dead code. Some changes in the files are to add annotations for the tool to avoid false positives.

File size: 9.7 KB
Line 
1; Project name : Assembly Library
2; Description : Functions for managing display context.
3
4; Section containing code
5SECTION .text
6
7;--------------------------------------------------------------------
8; DisplayContext_Initialize
9; Parameters:
10; DS: BDA segment (zero)
11; Returns:
12; Nothing
13; Corrupts registers:
14; AX, DX, DI
15;--------------------------------------------------------------------
16ALIGN JUMP_ALIGN
17DisplayContext_Initialize:
18 mov WORD [VIDEO_BDA.displayContext+DISPLAY_CONTEXT.fnCharOut], DEFAULT_CHARACTER_OUTPUT
19 mov WORD [VIDEO_BDA.displayContext+DISPLAY_CONTEXT.wCursorShape], CURSOR_NORMAL
20 mov BYTE [VIDEO_BDA.displayContext+DISPLAY_CONTEXT.bAttribute], SCREEN_BACKGROUND_ATTRIBUTE
21 ; Fall to .DetectAndSetDisplaySegment
22
23;--------------------------------------------------------------------
24; .DetectAndSetDisplaySegment
25; Parameters:
26; DS: BDA segment (zero)
27; Returns:
28; Nothing
29; Corrupts registers:
30; AX, DX
31;--------------------------------------------------------------------
32.DetectAndSetDisplaySegment:
33 mov ax, COLOR_TEXT_SEGMENT
34 cmp BYTE [VIDEO_BDA.bMode], MDA_TEXT_MODE
35 eCMOVE ah, MONO_TEXT_SEGMENT >> 8
36 mov [VIDEO_BDA.displayContext+DISPLAY_CONTEXT.fpCursorPosition+2], ax
37 ; Fall to .InitializeFlags
38
39;--------------------------------------------------------------------
40; .InitializeFlags
41; Parameters:
42; DS: BDA segment (zero)
43; Returns:
44; Nothing
45; Corrupts registers:
46; AX, DX
47;--------------------------------------------------------------------
48.InitializeFlags:
49 mov dl, FLG_CONTEXT_ATTRIBUTES
50 call CgaSnow_IsCgaPresent
51 jnc SHORT .DoNotSetCgaFlag
52 or dl, FLG_CONTEXT_CGA
53.DoNotSetCgaFlag:
54 mov [VIDEO_BDA.displayContext+DISPLAY_CONTEXT.bFlags], dl
55 ; Fall to .InitializeCursor
56
57;--------------------------------------------------------------------
58; .InitializeCursor
59; Parameters:
60; DS: BDA segment (zero)
61; Returns:
62; Nothing
63; Corrupts registers:
64; AX, DX
65;--------------------------------------------------------------------
66.InitializeCursor:
67 call DisplayCursor_GetHardwareCoordinatesToAX ; Coordinates before init
68 call DisplayCursor_SetCoordinatesFromAX ; Cursor to Display Context
69 ; Fall to DisplayContext_SynchronizeToHardware
70
71;--------------------------------------------------------------------
72; DisplayContext_SynchronizeToHardware
73; Parameters:
74; DS: BDA segment (zero)
75; Returns:
76; Nothing
77; Corrupts registers:
78; AX, DX
79;--------------------------------------------------------------------
80ALIGN JUMP_ALIGN
81DisplayContext_SynchronizeToHardware:
82 call DisplayPage_SynchronizeToHardware
83 call DisplayCursor_SynchronizeShapeToHardware
84 jmp DisplayCursor_SynchronizeCoordinatesToHardware
85
86
87;--------------------------------------------------------------------
88; DisplayContext_Push
89; Parameters:
90; Nothing
91; Returns:
92; Nothing
93; Corrupts registers:
94; AX, DI
95;--------------------------------------------------------------------
96ALIGN JUMP_ALIGN
97DisplayContext_Push:
98 mov di, ds ; Backup DS
99 LOAD_BDA_SEGMENT_TO ds, ax
100 pop ax ; Pop return address
101
102%ifndef CHECK_FOR_UNUSED_ENTRYPOINTS
103 %assign i 0
104 %rep DISPLAY_CONTEXT_size / 2
105 push WORD [VIDEO_BDA.displayContext + i]
106 %assign i i+2
107 %endrep
108%endif
109
110 mov ds, di ; Restore DS
111 jmp ax
112
113;--------------------------------------------------------------------
114; DisplayContext_Pop
115; Parameters:
116; Nothing
117; Returns:
118; Nothing
119; Corrupts registers:
120; AX, DI
121;--------------------------------------------------------------------
122ALIGN JUMP_ALIGN
123DisplayContext_Pop:
124 mov di, ds ; Backup DS
125 LOAD_BDA_SEGMENT_TO ds, ax
126 pop ax ; Pop return address
127
128%ifndef CHECK_FOR_UNUSED_ENTRYPOINTS
129 %assign i DISPLAY_CONTEXT_size-2
130 %rep DISPLAY_CONTEXT_size / 2
131 pop WORD [VIDEO_BDA.displayContext + i]
132 %assign i i-2
133 %endrep
134%endif
135
136 push ax ; Push return address
137 push dx
138 call DisplayContext_SynchronizeToHardware
139 pop dx
140 mov ds, di ; Restore DS
141 ret
142
143
144;--------------------------------------------------------------------
145; DisplayContext_PrepareOffScreenBufferInESBXwithLengthInCX
146; Parameters:
147; CX: Off screen buffer length in characters
148; ES:BX: Ptr to off screen buffer
149; Returns:
150; Nothing
151; Corrupts registers:
152; AX, DI
153;--------------------------------------------------------------------
154%ifndef EXCLUDE_FROM_XTIDE_UNIVERSAL_BIOS
155ALIGN JUMP_ALIGN
156DisplayContext_PrepareOffScreenBufferInESBXwithLengthInCX:
157 push ds
158
159 LOAD_BDA_SEGMENT_TO ds, di
160 xchg ax, bx
161 mov bx, es
162 call DisplayContext_SetCharacterPointerFromBXAX ; ES:DI now has the pointer
163
164 mov bl, ATTRIBUTES_NOT_USED
165 mov ax, BUFFER_OUTPUT_WITH_CHAR_ONLY
166 call DisplayContext_SetCharOutputFunctionFromAXwithAttribFlagInBL
167 mov [VIDEO_BDA.displayContext+DISPLAY_CONTEXT.wCharOutParam], cx
168
169 mov bx, di
170 pop ds
171 ret
172%endif
173
174
175;--------------------------------------------------------------------
176; DisplayContext_SetCharacterPointerFromBXAX
177; Parameters:
178; BX:AX: Ptr to destination for next character to output
179; DS: BDA segment (zero)
180; Returns:
181; ES:DI: Pointer that was in BX:AX
182; Corrupts registers:
183; AX
184;--------------------------------------------------------------------
185%ifndef EXCLUDE_FROM_XTIDE_UNIVERSAL_BIOS
186ALIGN JUMP_ALIGN
187DisplayContext_SetCharacterPointerFromBXAX:
188 mov [VIDEO_BDA.displayContext+DISPLAY_CONTEXT.fpCursorPosition], ax
189 mov [VIDEO_BDA.displayContext+DISPLAY_CONTEXT.fpCursorPosition+2], bx
190 xchg di, ax
191 mov es, bx
192 ret
193%endif
194
195
196;--------------------------------------------------------------------
197; DisplayContext_GetCharacterPointerToBXAX
198; Parameters:
199; DS: BDA segment (zero)
200; Returns:
201; BX:AX: Ptr to destination for next character to output
202; Corrupts registers:
203; Nothing
204;--------------------------------------------------------------------
205%ifndef EXCLUDE_FROM_XTIDE_UNIVERSAL_BIOS
206ALIGN JUMP_ALIGN
207DisplayContext_GetCharacterPointerToBXAX:
208 mov ax, [VIDEO_BDA.displayContext+DISPLAY_CONTEXT.fpCursorPosition]
209 mov bx, [VIDEO_BDA.displayContext+DISPLAY_CONTEXT.fpCursorPosition+2]
210 ret
211%endif
212
213
214;--------------------------------------------------------------------
215; DisplayContext_SetCharOutputFunctionFromAXwithAttribFlagInBL
216; Parameters:
217; AX: Offset to character output function
218; BL: Attribute Flag
219; DS: BDA segment (zero)
220; Returns:
221; Nothing
222; Corrupts registers:
223; BL
224;--------------------------------------------------------------------
225ALIGN JUMP_ALIGN
226DisplayContext_SetCharOutputFunctionFromAXwithAttribFlagInBL:
227 and bl, FLG_CONTEXT_ATTRIBUTES
228 and BYTE [VIDEO_BDA.displayContext+DISPLAY_CONTEXT.bFlags], ~FLG_CONTEXT_ATTRIBUTES
229 or [VIDEO_BDA.displayContext+DISPLAY_CONTEXT.bFlags], bl
230 mov [VIDEO_BDA.displayContext+DISPLAY_CONTEXT.fnCharOut], ax
231 ret
232
233
234;--------------------------------------------------------------------
235; DisplayContext_SetCharacterAttributeFromAL
236; Parameters:
237; AL: Character attribute
238; DS: BDA segment (zero)
239; Returns:
240; Nothing
241; Corrupts registers:
242; Nothing
243;--------------------------------------------------------------------
244ALIGN JUMP_ALIGN
245DisplayContext_SetCharacterAttributeFromAL:
246 mov [VIDEO_BDA.displayContext+DISPLAY_CONTEXT.bAttribute], al
247 ret
248
249
250;--------------------------------------------------------------------
251; DisplayContext_SetCharacterOutputParameterFromAX
252; Parameters:
253; AX: Parameter for Character Output function
254; DS: BDA segment (zero)
255; Returns:
256; Nothing
257; Corrupts registers:
258; Nothing
259;--------------------------------------------------------------------
260ALIGN JUMP_ALIGN
261DisplayContext_SetCharacterOutputParameterFromAX:
262 mov [VIDEO_BDA.displayContext+DISPLAY_CONTEXT.wCharOutParam], ax
263 ret
264
265
266;--------------------------------------------------------------------
267; DisplayContext_GetCharacterOutputParameterToDX
268; Parameters:
269; DS: BDA segment (zero)
270; Returns:
271; DX: User parameter for Character Output function
272; Corrupts registers:
273; Nothing
274;--------------------------------------------------------------------
275%ifndef EXCLUDE_FROM_XTIDE_UNIVERSAL_BIOS OR EXCLUDE_FROM_XTIDECFG ; This is currently unused (dead code)
276ALIGN JUMP_ALIGN
277DisplayContext_GetCharacterOutputParameterToDX:
278 mov dx, [VIDEO_BDA.displayContext+DISPLAY_CONTEXT.wCharOutParam]
279 ret
280%endif
281
282
283;--------------------------------------------------------------------
284; DisplayContext_GetCharacterOffsetToAXfromByteOffsetInAX
285; Parameters:
286; AX: Offset in bytes from some character to another
287; DS: BDA segment (zero)
288; Returns:
289; AX: Offset in characters from some character to another
290; Corrupts registers:
291; Nothing
292;--------------------------------------------------------------------
293%ifndef EXCLUDE_FROM_XTIDE_UNIVERSAL_BIOS
294ALIGN JUMP_ALIGN
295DisplayContext_GetCharacterOffsetToAXfromByteOffsetInAX:
296 test BYTE [VIDEO_BDA.displayContext+DISPLAY_CONTEXT.bFlags], FLG_CONTEXT_ATTRIBUTES
297 jz SHORT ReturnOffsetInAX
298 sar ax, 1 ; BYTE count to WORD count
299 ret
300%endif
301
302
303;--------------------------------------------------------------------
304; DisplayContext_GetByteOffsetToAXfromCharacterOffsetInAX
305; Parameters:
306; AX: Offset in characters from some character to another
307; DS: BDA segment (zero)
308; Returns:
309; AX: Offset in bytes from some character to another
310; Corrupts registers:
311; Nothing
312;--------------------------------------------------------------------
313%ifndef EXCLUDE_FROM_XTIDE_UNIVERSAL_BIOS
314ALIGN JUMP_ALIGN
315DisplayContext_GetByteOffsetToAXfromCharacterOffsetInAX:
316 test BYTE [VIDEO_BDA.displayContext+DISPLAY_CONTEXT.bFlags], FLG_CONTEXT_ATTRIBUTES
317 jz SHORT ReturnOffsetInAX
318 sal ax, 1 ; WORD count to BYTE count
319ALIGN JUMP_ALIGN, ret
320ReturnOffsetInAX:
321 ret
322%endif
Note: See TracBrowser for help on using the repository browser.