;RETBIT.MAC by ESKAY
;
z80
;
; Purpose:
; return or set bit at bit map address
; IX points to start of bit map
; DHL holds 24-bit address
; for PUTBIT, C holds bit
; Preserve all registers
;
       public  getbit,putbit
;
       cseg
;
getbit: xor     a
       jr      gpbit
;
putbit: ld      a,0ffh
gpbit:  ld      (getput),a
       push    bc
       push    de
       push    hl
       push    ix
       ld      a,l
       or      a
       ld      b,3
lp1:    rr      d
       rr      h
       rr      l
       djnz    lp1
       and     7
;
; HL = offet into bit map, a=bit number
;
       ex      de,hl
       add     ix,de
       ld      b,a             ;bit number into b
       inc     b               ;set up for pre-test
       ld      a,(getput)
       or      a
       jr      nz,putc
       ld      a,(ix+0)
       rlca
loop:   dec     b
       jr      z,done
       rlca
       jr      loop
;
done:   and     1
done1:  pop     ix
       pop     hl
       pop     de
       pop     bc
       ret
;
putc:   ld      a,b
       ld      b,8
.putl:  rlc     (ix+0)
       dec     a
       call    z,..srs
       djnz    ..putl
       jr      done1
;
.srs:   ld      a,c
       or      a
       ld      a,0ffh
       jr      z,..res
       set     0,(ix+0)
       ret
;
.res:   res     0,(ix+0)
       ret
;
getput: db      0
       end