62 lines
889 B
ArmAsm
62 lines
889 B
ArmAsm
|
.define .inn
|
||
|
|
||
|
! 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
|
||
|
|