.z80 ext NBits,BitCnt,WB,InByte GetBits: ld hl,0 ; Ergebnis Register ld a,(NBits) ld c,a ; c:=NBits ld a,(BitCnt) cp c jr nc,ok ; BitCnt>=NBits ld b,a ; b:=BitCnt ld a,c ; a:=NBits sub b ; a:=NBits - BitCnt ld (NBits),a ld a,(WB) call shfl ; WB shl BitCnt push hl ; Zwischenergebnis call InByte ; Neues Byte in l ld a,(NBits) ld b,a ; b:=NBits ld a,8 sub b ; a:=8 - NBits ld (BitCnt),a ld a,l ; Neues Byte pop hl call shfl ; WB shl NBits ld (WB),a ret ok: ld b,c ; b:=NBits sub b ; a:=BitCnt - NBits ld (BitCnt),a ld a,(WB) call shfl ld (WB),a ret shfl: sla a ; MSB in carry rl l djnz shfl ret end GetBits