123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- .define .inn
- .sect .text
- .sect .rom
- .sect .data
- .sect .bss
- .sect .text
- ! Any size bit test on set.
- ! Expects in de-reg: size of set (in bytes)
- ! Expects on stack: bit number
- ! set to be tested
- ! Yields in de-reg.: 0 if bit is reset or bit number out of range
- ! 1 if bit is set
- .inn: pop h
- shld .retadr
- mov h,b
- mov l,c
- shld .bcreg
- pop h
- xchg !hl = size, de = bit number
- mov a,d !test if bit number is negative
- ral
- jc 3f
- mov a,e
- ani 7
- mov b,a !save bits 0-2 of bit number in b-reg
- mvi c,3
- 1: xra a
- mov a,d !shift bit number right 3 times
- rar
- mov d,a
- mov a,e
- rar
- mov e,a
- dcr c
- jnz 1b
- mov a,l !test if bit number is small enough
- sub e
- mov a,h
- sbb d
- jc 3f
- xchg
- dad sp
- xchg
- ldax d !a-register = wanted byte
- 2: dcr b !dcr doesn't affect carry bit
- jm 4f
- rar
- jmp 2b
- 3: xra a !return 0 if bit number out of range
- 4: ani 1
- mov e,a
- mvi d,0
- dad sp
- sphl
- lhld .bcreg
- mov b,h
- mov c,l
- lhld .retadr
- pchl
|