source: xtideuniversalbios/trunk/Assembly_Library/Src/Menu/MenuLocation.asm @ 583

Last change on this file since 583 was 583, checked in by krille_n_@…, 9 years ago

Changes:

  • Changed BOOT_MENU_DEFAULT_TIMEOUT to reduce rounding error.
  • Minor optimizations and fixes, mostly to the menu library code.
File size: 4.6 KB
RevLine 
[41]1; Project name  :   Assembly Library
2; Description   :   Functions for calculation menu window dimensions.
3
[376]4;
[526]5; XTIDE Universal BIOS and Associated Tools
6; Copyright (C) 2009-2010 by Tomi Tilli, 2011-2013 by XTIDE Universal BIOS Team.
[376]7;
8; This program is free software; you can redistribute it and/or modify
9; it under the terms of the GNU General Public License as published by
10; the Free Software Foundation; either version 2 of the License, or
11; (at your option) any later version.
[526]12;
[376]13; This program is distributed in the hope that it will be useful,
14; but WITHOUT ANY WARRANTY; without even the implied warranty of
15; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
[526]16; GNU General Public License for more details.
[376]17; Visit http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
18;
19
[526]20
[41]21; Section containing code
22SECTION .text
23
24;--------------------------------------------------------------------
25; MenuLocation_GetTextCoordinatesToAXforItemInAX
26;   Parameters
27;       AX:     Item index
28;       SS:BP:  Ptr to MENU
29;   Returns:
30;       AL:     Column (X)
31;       AH:     Row (Y)
32;   Corrupts registers:
33;       Nothing
34;--------------------------------------------------------------------
[369]35ALIGN MENU_JUMP_ALIGN
[41]36MenuLocation_GetTextCoordinatesToAXforItemInAX:
37    sub     ax, [bp+MENU.wFirstVisibleItem]     ; Item to line
38    xchg    al, ah                              ; Line to AH, clear AL
39    add     ax, (MENU_TEXT_ROW_OFFSET<<8) | MENU_TEXT_COLUMN_OFFSET
[181]40    SKIP2B  f   ; cmp ax, <next instruction>
41    ; Fall to MenuLocation_GetItemBordersTopLeftCoordinatesToAX
[41]42
43;--------------------------------------------------------------------
[181]44; MenuLocation_GetItemBordersTopLeftCoordinatesToAX
45; MenuLocation_GetTitleTextTopLeftCoordinatesToAX
[41]46; MenuLocation_GetTitleBordersTopLeftCoordinatesToAX
[181]47; MenuLocation_GetInformationTextTopLeftCoordinatesToAX
[41]48; MenuLocation_GetBottomBordersTopLeftCoordinatesToAX
49;   Parameters
50;       SS:BP:  Ptr to MENU
51;   Returns:
52;       AL:     Column (X)
53;       AH:     Row (Y)
54;   Corrupts registers:
55;       Nothing
56;--------------------------------------------------------------------
[526]57%ifndef EXCLUDE_FROM_XTIDE_UNIVERSAL_BIOS
[181]58MenuLocation_GetItemBordersTopLeftCoordinatesToAX:
[489]59%endif
[181]60    xor     ax, ax
61    jmp     SHORT AddItemBordersTopLeftCoordinatesToAX
62
[369]63ALIGN MENU_JUMP_ALIGN
[181]64MenuLocation_GetTitleTextTopLeftCoordinatesToAX:
65    mov     ax, (MENU_TEXT_ROW_OFFSET<<8) | MENU_TEXT_COLUMN_OFFSET
66    SKIP2B  f   ; cmp ax, <next instruction>
[41]67MenuLocation_GetTitleBordersTopLeftCoordinatesToAX:
68    xor     ax, ax
69    jmp     SHORT MenuLocation_AddTitleBordersTopLeftCoordinatesToAX
70
[369]71ALIGN MENU_JUMP_ALIGN
[181]72MenuLocation_GetInformationTextTopLeftCoordinatesToAX:
73    mov     ax, (MENU_TEXT_ROW_OFFSET<<8) | MENU_TEXT_COLUMN_OFFSET
74    jmp     SHORT AddInformationBordersTopLeftCoordinatesToAX
[41]75
[369]76ALIGN MENU_JUMP_ALIGN
[41]77MenuLocation_GetBottomBordersTopLeftCoordinatesToAX:
78    xor     ax, ax
[104]79    ; Fall to .AddBottomBordersTopLeftCoordinatesToAX
[41]80
81;--------------------------------------------------------------------
[104]82; .AddBottomBordersTopLeftCoordinatesToAX
[41]83; AddInformationBordersTopLeftCoordinatesToAX
84; AddItemBordersTopLeftCoordinatesToAX
85; MenuLocation_AddTitleBordersTopLeftCoordinatesToAX
86;   Parameters
87;       AX:     Zero of offset
88;       SS:BP:  Ptr to MENU
89;   Returns:
90;       AL:     Column (X)
91;       AH:     Row (Y)
92;   Corrupts registers:
93;       Nothing
94;--------------------------------------------------------------------
[104]95.AddBottomBordersTopLeftCoordinatesToAX:
[41]96    stc                         ; Compensate for Information top border
97    adc     ah, [bp+MENUINIT.bInfoLines]
[369]98ALIGN MENU_JUMP_ALIGN
[41]99AddInformationBordersTopLeftCoordinatesToAX:
100    push    cx
101    call    MenuScrollbars_GetMaxVisibleItemsOnPageToCX
102    inc     cx                  ; Compensate for Items top border
103    add     ah, cl
104    pop     cx
[369]105ALIGN MENU_JUMP_ALIGN
[41]106AddItemBordersTopLeftCoordinatesToAX:
107    stc                         ; Compensate for Title top border
108    adc     ah, [bp+MENUINIT.bTitleLines]
[369]109ALIGN MENU_JUMP_ALIGN
[41]110MenuLocation_AddTitleBordersTopLeftCoordinatesToAX:
111    push    di
112    push    ax
113    CALL_DISPLAY_LIBRARY GetColumnsToALandRowsToAH
114    sub     al, [bp+MENUINIT.bWidth]
115    sub     ah, [bp+MENUINIT.bHeight]
116    shr     al, 1
117    shr     ah, 1
118    pop     di                  ; Old AX to DI
119    add     ax, di              ; Add old AX to menu top left coordinates
120    pop     di
121    ret
122
123
124;--------------------------------------------------------------------
125; MenuLocation_GetMaxTextLineLengthToAX
126;   Parameters
127;       SS:BP:  Ptr to MENU
128;   Returns:
129;       AX:     Maximum text line length in characters
130;   Corrupts registers:
131;       Nothing
132;--------------------------------------------------------------------
[369]133ALIGN MENU_JUMP_ALIGN
[41]134MenuLocation_GetMaxTextLineLengthToAX:
[583]135    mov     ax, -(MENU_HORIZONTAL_BORDER_LINES + MENU_TEXT_COLUMN_OFFSET) & 0FFh
136    add     al, [bp+MENUINIT.bWidth]
[41]137    ret
Note: See TracBrowser for help on using the repository browser.