source: xtideuniversalbios/tags/v2.0.0_beta_3/Assembly_Library/Src/Menu/MenuAttributes.asm@ 514

Last change on this file since 514 was 505, checked in by krille_n_@…, 11 years ago

Changes:

  • Reverted the changes to MenuEvents.inc done in r492 since they broke the F1 key function in XTIDECFG.
  • Added a tail-call optimized variant of the CALL_DISPLAY_LIBRARY macro (JMP_DISPLAY_LIBRARY).
  • Put a block size limit in AH1Eh_ChangeXTCFmodeBasedOnControlRegisterInAL. I think it's needed but if not, it's easy to remove.
  • Other optimizations and fixes.
File size: 4.4 KB
Line 
1; Project name : Assembly Library
2; Description : Finds suitable character attribute for
3; color, B/W and monochrome displays.
4
5;
6; XTIDE Universal BIOS and Associated Tools
7; Copyright (C) 2009-2010 by Tomi Tilli, 2011-2012 by XTIDE Universal BIOS Team.
8;
9; This program is free software; you can redistribute it and/or modify
10; it under the terms of the GNU General Public License as published by
11; the Free Software Foundation; either version 2 of the License, or
12; (at your option) any later version.
13;
14; This program is distributed in the hope that it will be useful,
15; but WITHOUT ANY WARRANTY; without even the implied warranty of
16; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17; GNU General Public License for more details.
18; Visit http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
19;
20
21
22; Struct containing border characters for different types of menu window lines
23struc ATTRIBUTE_CHARS
24 .cBordersAndBackground resb 1
25 .cShadow resb 1
26 .cTitle:
27 .cInformation resb 1
28 .cItem resb 1
29 .cHighlightedItem resb 1
30 .cHurryTimeout resb 1
31 .cNormalTimeout resb 1
32endstruc
33
34
35; Section containing code
36SECTION .text
37
38;--------------------------------------------------------------------
39; MenuAttribute_SetToDisplayContextFromTypeInSI
40; Parameters
41; SI: Attribute type (from ATTRIBUTE_CHARS)
42; Returns:
43; Nothing
44; Corrupts registers:
45; AX, SI, DI
46;--------------------------------------------------------------------
47ALIGN MENU_JUMP_ALIGN
48MenuAttribute_SetToDisplayContextFromTypeInSI:
49 call MenuAttribute_GetToAXfromTypeInSI
50 JMP_DISPLAY_LIBRARY SetCharacterAttributeFromAL
51
52
53;--------------------------------------------------------------------
54; MenuAttribute_GetToAXfromTypeInSI
55; Parameters
56; SI: Attribute type (from ATTRIBUTE_CHARS)
57; Returns:
58; AX: Wanted attribute
59; Corrupts registers:
60; SI
61;--------------------------------------------------------------------
62ALIGN MENU_JUMP_ALIGN
63MenuAttribute_GetToAXfromTypeInSI:
64 push ds
65
66 LOAD_BDA_SEGMENT_TO ds, ax, !
67 mov al, [VIDEO_BDA.bMode] ; Load BIOS display mode (0, 1, 2, 3 or 7)
68 cmp al, 7
69 je SHORT .LoadMonoAttribute
70 test al, 1 ; Even modes (0 and 2) are B/W
71 jnz SHORT .LoadColorAttribute
72
73.LoadBlackAndWhiteAttribute:
74 add si, .rgcBlackAndWhiteAttributes
75 jmp SHORT .LoadAttributeAndReturn
76
77ALIGN MENU_JUMP_ALIGN
78.LoadMonoAttribute:
79 add si, .rgcMonochromeAttributes
80 jmp SHORT .LoadAttributeAndReturn
81
82ALIGN MENU_JUMP_ALIGN
83.LoadColorAttribute:
84 add si, .rgcColorAttributes
85.LoadAttributeAndReturn:
86 cs lodsb ; Load from [CS:SI] to AL
87
88 pop ds
89 ret
90
91
92.rgcColorAttributes:
93istruc ATTRIBUTE_CHARS
94 at ATTRIBUTE_CHARS.cBordersAndBackground, db COLOR_ATTRIBUTE(COLOR_YELLOW, COLOR_BLUE)
95 at ATTRIBUTE_CHARS.cShadow, db COLOR_ATTRIBUTE(COLOR_GRAY, COLOR_BLACK)
96 at ATTRIBUTE_CHARS.cTitle, db COLOR_ATTRIBUTE(COLOR_BRIGHT_WHITE, COLOR_BLUE)
97 at ATTRIBUTE_CHARS.cItem, db COLOR_ATTRIBUTE(COLOR_WHITE, COLOR_BLUE)
98 at ATTRIBUTE_CHARS.cHighlightedItem, db COLOR_ATTRIBUTE(COLOR_BRIGHT_WHITE, COLOR_CYAN)
99 at ATTRIBUTE_CHARS.cHurryTimeout, db COLOR_ATTRIBUTE(COLOR_RED, COLOR_BLUE) | FLG_COLOR_BLINK
100 at ATTRIBUTE_CHARS.cNormalTimeout, db COLOR_ATTRIBUTE(COLOR_GREEN, COLOR_BLUE)
101iend
102
103.rgcBlackAndWhiteAttributes: ; Only COLOR_WHITE, COLOR_BRIGHT_WHITE and COLOR_BLACK should be used
104istruc ATTRIBUTE_CHARS
105 at ATTRIBUTE_CHARS.cBordersAndBackground, db COLOR_ATTRIBUTE(COLOR_BRIGHT_WHITE, COLOR_BLACK)
106 at ATTRIBUTE_CHARS.cShadow, db COLOR_ATTRIBUTE(COLOR_GRAY, COLOR_BLACK)
107 at ATTRIBUTE_CHARS.cTitle, db COLOR_ATTRIBUTE(COLOR_BRIGHT_WHITE, COLOR_BLACK)
108 at ATTRIBUTE_CHARS.cItem, db COLOR_ATTRIBUTE(COLOR_WHITE, COLOR_BLACK)
109 at ATTRIBUTE_CHARS.cHighlightedItem, db COLOR_ATTRIBUTE(COLOR_BRIGHT_WHITE, COLOR_WHITE)
110 at ATTRIBUTE_CHARS.cHurryTimeout, db COLOR_ATTRIBUTE(COLOR_BRIGHT_WHITE, COLOR_BLACK) | FLG_COLOR_BLINK
111 at ATTRIBUTE_CHARS.cNormalTimeout, db COLOR_ATTRIBUTE(COLOR_WHITE, COLOR_BLACK)
112iend
113
114.rgcMonochromeAttributes:
115istruc ATTRIBUTE_CHARS
116 at ATTRIBUTE_CHARS.cBordersAndBackground, db MONO_BRIGHT
117 at ATTRIBUTE_CHARS.cShadow, db MONO_REVERSE_DARK
118 at ATTRIBUTE_CHARS.cTitle, db MONO_BRIGHT
119 at ATTRIBUTE_CHARS.cItem, db MONO_NORMAL
120 at ATTRIBUTE_CHARS.cHighlightedItem, db MONO_REVERSE
121 at ATTRIBUTE_CHARS.cHurryTimeout, db MONO_BRIGHT_BLINK
122 at ATTRIBUTE_CHARS.cNormalTimeout, db MONO_NORMAL
123iend
Note: See TracBrowser for help on using the repository browser.