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

Last change on this file since 101 was 101, checked in by aitotat, 13 years ago

Changes to Assembly Library:

  • Some minor size optimizations to Display Library.
File size: 3.4 KB
Line 
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
27    WAIT_RETRACE_IF_NECESSARY_THEN stosw
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
53    ; Output character with BIOS
54    push    bx
55    mov     ah, TELETYPE_OUTPUT
56    mov     bh, [VIDEO_BDA.bActivePage]
57    int     BIOS_VIDEO_INTERRUPT_10h
58    pop     bx
59
60    call    DisplayCursor_GetHardwareCoordinatesToAX
61    jmp     DisplayCursor_SetCoordinatesFromAX
62
63
64;--------------------------------------------------------------------
65; DisplayCharOut_Attribute
66; DisplayCharOut_Character
67; DisplayCharOut_CharacterWithAttribute
68;   Parameters:
69;       AL:     Character to output
70;       AH:     Attribute to output
71;       DS:     BDA segment (zero)
72;       ES:DI:  Ptr to video memory where to output
73;   Returns:
74;       DI:     Incremented for next character
75;   Corrupts registers:
76;       AX, DX
77;--------------------------------------------------------------------
78ALIGN JUMP_ALIGN
79DisplayCharOut_Attribute:
80    xchg    al, ah              ; Swap character and attribute
81    inc     di                  ; Skip character
82    WAIT_RETRACE_IF_NECESSARY_THEN stosb
83    ret
84
85ALIGN JUMP_ALIGN
86DisplayCharOut_Character:
87    WAIT_RETRACE_IF_NECESSARY_THEN stosb
88    inc     di                  ; Skip attribute
89    ret
90
91ALIGN JUMP_ALIGN
92DisplayCharOut_CharacterWithAttribute:
93    WAIT_RETRACE_IF_NECESSARY_THEN stosw
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
103;       DISPLAY_CONTEXT.wCharOutParam:  Characters left in buffer
104;   Returns:
105;       ES:DI:  Updated for next character
106;   Corrupts registers:
107;       AX, DX
108;--------------------------------------------------------------------
109ALIGN JUMP_ALIGN
110DisplayCharOut_WriteCharacterToBuffer:
111    cmp     WORD [VIDEO_BDA.displayContext+DISPLAY_CONTEXT.wCharOutParam], BYTE 0
112    je      SHORT .BufferFull
113    stosb
114    dec     WORD [VIDEO_BDA.displayContext+DISPLAY_CONTEXT.wCharOutParam]
115.BufferFull:
116    ret
Note: See TracBrowser for help on using the repository browser.