source: xtideuniversalbios/trunk/Assembly_Library/Src/Display/DisplayCharOut.asm@ 234

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

Changes to Assembly Library:

  • Some minor size optimizations to Display Library.
File size: 3.4 KB
RevLine 
[41]1; Project name : Assembly Library
2; Description : Functions for outputting characters to video memory.
3; These functions are meant to be called by Display_CharacterFromAL
4; and Display_RepeatCharacterFromAL using function pointer
5; stored in DISPLAY_CONTEXT.
6
7; Section containing code
8SECTION .text
9
10;--------------------------------------------------------------------
11; DisplayCharOut_TeletypeOutputWithAttribute
12; DisplayCharOut_TeletypeOutput
13; Parameters:
14; AL: Character to output
15; AH: Attribute to output
16; DS: BDA segment (zero)
17; ES:DI: Ptr to video memory where to output
18; Returns:
19; DI: Incremented for next character
20; Corrupts registers:
21; AX, DX
22;--------------------------------------------------------------------
23ALIGN JUMP_ALIGN
24DisplayCharOut_TeletypeOutputWithAttribute:
25 cmp al, ' ' ; Printable character?
26 jb SHORT DisplayCharOut_BiosTeletypeOutput
[42]27 WAIT_RETRACE_IF_NECESSARY_THEN stosw
[41]28 ret
29
30ALIGN JUMP_ALIGN
31DisplayCharOut_TeletypeOutput:
32 cmp al, ' ' ; Printable character?
33 jae SHORT DisplayCharOut_Character
34 ; Fall to DisplayCharOut_BiosTeletypeOutput
35
36;--------------------------------------------------------------------
37; DisplayCharOut_BiosTeletypeOutput
38; Parameters:
39; AL: Control character
40; DS: BDA segment (zero)
41; ES:DI: Ptr to video memory where to output
42; Returns:
43; DI: Incremented for next character
44; Corrupts registers:
45; AX, DX
46;--------------------------------------------------------------------
47ALIGN JUMP_ALIGN
48DisplayCharOut_BiosTeletypeOutput:
49 push ax
50 call DisplayCursor_SynchronizeCoordinatesToHardware
51 pop ax
52
[101]53 ; Output character with BIOS
[41]54 push bx
55 mov ah, TELETYPE_OUTPUT
56 mov bh, [VIDEO_BDA.bActivePage]
57 int BIOS_VIDEO_INTERRUPT_10h
58 pop bx
59
[101]60 call DisplayCursor_GetHardwareCoordinatesToAX
61 jmp DisplayCursor_SetCoordinatesFromAX
[41]62
[101]63
[41]64;--------------------------------------------------------------------
65; DisplayCharOut_Attribute
66; DisplayCharOut_Character
67; DisplayCharOut_CharacterWithAttribute
68; Parameters:
69; AL: Character to output
70; AH: Attribute to output
[42]71; DS: BDA segment (zero)
[41]72; ES:DI: Ptr to video memory where to output
73; Returns:
74; DI: Incremented for next character
75; Corrupts registers:
[42]76; AX, DX
[41]77;--------------------------------------------------------------------
78ALIGN JUMP_ALIGN
79DisplayCharOut_Attribute:
80 xchg al, ah ; Swap character and attribute
81 inc di ; Skip character
[42]82 WAIT_RETRACE_IF_NECESSARY_THEN stosb
[41]83 ret
84
85ALIGN JUMP_ALIGN
86DisplayCharOut_Character:
[42]87 WAIT_RETRACE_IF_NECESSARY_THEN stosb
[41]88 inc di ; Skip attribute
89 ret
90
91ALIGN JUMP_ALIGN
92DisplayCharOut_CharacterWithAttribute:
[42]93 WAIT_RETRACE_IF_NECESSARY_THEN stosw
[41]94 ret
95
96
97;--------------------------------------------------------------------
98; DisplayCharOut_WriteCharacterToBuffer
99; Parameters:
100; AL: Character to output
101; DS: BDA segment (zero)
102; ES:DI: Ptr to destination string buffer
[55]103; DISPLAY_CONTEXT.wCharOutParam: Characters left in buffer
[41]104; Returns:
105; ES:DI: Updated for next character
106; Corrupts registers:
107; AX, DX
108;--------------------------------------------------------------------
109ALIGN JUMP_ALIGN
110DisplayCharOut_WriteCharacterToBuffer:
[55]111 cmp WORD [VIDEO_BDA.displayContext+DISPLAY_CONTEXT.wCharOutParam], BYTE 0
112 je SHORT .BufferFull
[41]113 stosb
[55]114 dec WORD [VIDEO_BDA.displayContext+DISPLAY_CONTEXT.wCharOutParam]
[41]115.BufferFull:
116 ret
Note: See TracBrowser for help on using the repository browser.