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

Last change on this file since 601 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
RevLine 
[41]1; Project name : Assembly Library
2; Description : Functions for bit handling.
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
[526]18;
[376]19
[41]20; Section containing code
21SECTION .text
22
23;--------------------------------------------------------------------
24; Bit_GetSetCountToCXfromDXAX
25; Parameters
[592]26; DX:AX: Source DWORD
[41]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
[592]60 mov cx, -1
[41]61ALIGN JUMP_ALIGN
[592]62.IncrementCX:
63 inc cx
64.ShiftLoop:
[41]65 shr ax, 1
[592]66 jc SHORT .IncrementCX
67 jnz SHORT .ShiftLoop
[41]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
[593]88%ifdef USE_NEC_V
89 eSET1 dx, cl ; SET1 ignores bits 7...4 in CL
90%else
[41]91 sub cl, 16
92 xchg ax, dx
93 call Bit_SetToAXfromIndexInCL
94 xchg dx, ax
95 add cl, 16
[593]96%endif
[41]97 ret
98
[592]99
[41]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:
[593]112%ifdef USE_NEC_V
113 eSET1 ax, cl
114%else
[41]115 push dx
116
117 mov dx, 1
118 shl dx, cl
119 or ax, dx
120
121 pop dx
[593]122%endif
[41]123 ret
[592]124
Note: See TracBrowser for help on using the repository browser.