source: xtideuniversalbios/trunk/Assembly_Library/Src/Menu/MenuCharOut.asm @ 104

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

Changes to Assembly Library:

  • Some more optimizations.
  • Moved macros.inc from XTIDE Universal BIOS to Assembly Library.
File size: 2.3 KB
RevLine 
[41]1; Project name  :   Assembly Library
2; Description   :   Character out function for printing withing menu window.
3
4; Section containing code
5SECTION .text
6
7;--------------------------------------------------------------------
[52]8; MenuCharOut_MenuTeletypeOutputWithAutomaticLineChange
9; MenuCharOut_MenuTeletypeOutput
[41]10;   Parameters:
11;       AL:     Character to output
12;       AH:     Attribute to output
13;       DS:     BDA segment (zero)
14;       ES:DI:  Ptr to video memory where to output
[52]15;       [DISPLAY_CONTEXT.wCharOutParam]:
16;               Low byte  = First column offset (after CR)
17;               High byte = Last column offset (when using automatic line change)
[41]18;   Returns:
19;       DI:     Incremented for next character
20;   Corrupts registers:
21;       AX, DX
22;--------------------------------------------------------------------
23ALIGN JUMP_ALIGN
[52]24MenuCharOut_MenuTeletypeOutputWithAutomaticLineChange:
25    call    CharOutLineSplitter_IsCursorAtTheEndOfTextLine
26    jnc     SHORT MenuCharOut_MenuTeletypeOutput
27    cmp     al, ' '
28    jb      SHORT ReturnSinceNoNeedToStartLineWithControlCharacter
29    call    CharOutLineSplitter_MovePartialWordToNewTextLine
[48]30    ; Fall to MenuCharOut_MenuTextTeletypeOutputWithAttribute
31
32ALIGN JUMP_ALIGN
[52]33MenuCharOut_MenuTeletypeOutput:
34    cmp     al, CR
35    je      SHORT PrintCRandAdjustOffsetForStartOfLine
[41]36    jmp     DisplayCharOut_TeletypeOutputWithAttribute
37
[48]38
39;--------------------------------------------------------------------
[52]40; MenuCharOut_PrintLFCRandAdjustOffsetForStartOfLine
41; PrintCRandAdjustOffsetForStartOfLine
[48]42;   Parameters:
43;       DS:     BDA segment (zero)
44;       ES:DI:  Ptr to cursor location
[52]45;       [DISPLAY_CONTEXT.wCharOutParam]:
46;               Low byte  = First column offset (after CR)
47;               High byte = Last column offset (when using automatic line change)
[48]48;   Returns:
49;       ES:DI:  Ptr to beginning of new line
50;   Corrupts registers:
51;       AX, DX
52;--------------------------------------------------------------------
53ALIGN JUMP_ALIGN
[52]54MenuCharOut_PrintLFCRandAdjustOffsetForStartOfLine:
[48]55    mov     al, LF
56    call    DisplayCharOut_BiosTeletypeOutput
[52]57    ; Fall to PrintCRandAdjustOffsetForStartOfLine
[48]58
59ALIGN JUMP_ALIGN
[52]60PrintCRandAdjustOffsetForStartOfLine:
61    mov     al, CR
[48]62    call    DisplayCharOut_BiosTeletypeOutput
[52]63    eMOVZX  ax, BYTE [VIDEO_BDA.displayContext+DISPLAY_CONTEXT.wCharOutParam]
64    add     di, ax
65ReturnSinceNoNeedToStartLineWithControlCharacter:
[41]66    ret
Note: See TracBrowser for help on using the repository browser.