source: xtideuniversalbios/trunk/Assembly_Library/Src/Util/Bit.asm@ 594

Last change on this file since 594 was 593, checked in by Tomi Tilli, 6 years ago

Flashing now works again.
Hack to get Windows 95 to work properly (MODULE_WIN95_CMOS_HACK included for 386 builds by default).
Edited makefile to produce large 386 build.
Fixed recovery time for QDI Vision VLB-IDE controllers.
No more warnings with Nasm 2.13.xx and later.
File dialog now properly restores default drive when file selection is cancelled.

File size: 2.9 KB
Line 
1; Project name : Assembly Library
2; Description : Functions for bit handling.
3
4;
5; XTIDE Universal BIOS and Associated Tools
6; Copyright (C) 2009-2010 by Tomi Tilli, 2011-2013 by XTIDE Universal BIOS Team.
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.
12;
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
16; GNU General Public License for more details.
17; Visit http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
18;
19
20; Section containing code
21SECTION .text
22
23;--------------------------------------------------------------------
24; Bit_GetSetCountToCXfromDXAX
25; Parameters
26; DX:AX: Source DWORD
27; Returns:
28; CX: Number of bits set in DX:AX
29; Corrupts registers:
30; Nothing
31;--------------------------------------------------------------------
32ALIGN JUMP_ALIGN
33Bit_GetSetCountToCXfromDXAX:
34 push bx
35
36 call Bit_GetSetCountToCXfromAX
37 mov bx, cx
38 xchg ax, dx
39 call Bit_GetSetCountToCXfromAX
40 xchg ax, dx
41 add cx, bx
42
43 pop bx
44 ret
45
46
47;--------------------------------------------------------------------
48; Bit_GetSetCountToCXfromAX
49; Parameters
50; AX: Source WORD
51; Returns:
52; CX: Number of bits set in AX
53; Corrupts registers:
54; Nothing
55;--------------------------------------------------------------------
56ALIGN JUMP_ALIGN
57Bit_GetSetCountToCXfromAX:
58 push ax
59
60 mov cx, -1
61ALIGN JUMP_ALIGN
62.IncrementCX:
63 inc cx
64.ShiftLoop:
65 shr ax, 1
66 jc SHORT .IncrementCX
67 jnz SHORT .ShiftLoop
68
69 pop ax
70 ret
71
72
73;--------------------------------------------------------------------
74; Bit_SetToDXAXfromIndexInCL
75; Parameters:
76; CL: Index of bit to set (0...31)
77; DX:AX: Destination DWORD with flag to be set
78; Returns:
79; DX:AX: DWORD with wanted bit set
80; Corrupts registers:
81; Nothing
82;--------------------------------------------------------------------
83ALIGN JUMP_ALIGN
84Bit_SetToDXAXfromIndexInCL:
85 cmp cl, 16
86 jb SHORT Bit_SetToAXfromIndexInCL
87
88%ifdef USE_NEC_V
89 eSET1 dx, cl ; SET1 ignores bits 7...4 in CL
90%else
91 sub cl, 16
92 xchg ax, dx
93 call Bit_SetToAXfromIndexInCL
94 xchg dx, ax
95 add cl, 16
96%endif
97 ret
98
99
100;--------------------------------------------------------------------
101; Bit_SetToAXfromIndexInCL
102; Parameters:
103; CL: Index of bit to set (0...15)
104; AX: Destination WORD with flag to be set
105; Returns:
106; AX: WORD with wanted bit set
107; Corrupts registers:
108; Nothing
109;--------------------------------------------------------------------
110ALIGN JUMP_ALIGN
111Bit_SetToAXfromIndexInCL:
112%ifdef USE_NEC_V
113 eSET1 ax, cl
114%else
115 push dx
116
117 mov dx, 1
118 shl dx, cl
119 or ax, dx
120
121 pop dx
122%endif
123 ret
124
Note: See TracBrowser for help on using the repository browser.