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

Last change on this file since 593 was 593, checked in by aitotat, 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.