; getbit.s
%pragma once
bits 16

; Getbit :: bitmap *seg:addr -> int16 bitno -> bool value
Getbit:
    enter 0,0

    push bx
    push cx
    push dx
    push si
    chseg(es,[bp+4])

    mov si,[bp+6]   ; si=bitmap addr
    mov ax,[bp+8]   ; ax=bitno

    xor dx,dx
    mov bx,0x0008
    div bx          ; ax=byte no
                    ; dx=bit pos
    add si,ax
    xor cx,cx
    mov byte cl,es:[si]
                    ; cl=byte val
    mov ax,0x0001
    xchg cx,dx      ; cl=bit pos, dl=byte val
    shl al,cl       ; al=mask
    test al,dl      ; zf=bit val
    jz .zero
    mov ax,0x0001
    jmp .end

 .zero:
    xor ax,ax
 .end:
    sret(es)
    pop si
    pop dx
    pop cx
    pop bx

    clc
    leave
    ret
