home *** CD-ROM | disk | FTP | other *** search
- ; Routines to set, test and reset a bit within a byte
- ;
- ; Declarations are as follows:
- ;
- ; type byte = 0..255;
- ;
- ; procedure bset( var x: byte; y: byte ); external;
- ; procedure reset( var x: byte; y: byte ); external;
- ; function test( x: byte; y: byte ): boolean; external;
- ;
- ; If these routines are passed an integer instead of a byte (reference
- ; parameters only) these routines will set/reset the low order byte.
- ;
- entry bset,reset,test
-
- bset: pop d ; get return address
- pop b ; get variable size & bit to set
- pop h ; get variable address
- dcr b ; check for var of size 1
- cnz sizpatch ; otherwise fix the pointer
- xra a ; clear acc
- stc ; set carry
- mov b,c ; counter (0..7) to b
- inr b ; increment counter ( now between 1 & 8 )
- setloop:adc a ; shift left 1 bit
- djnz setloop ; now A has the bit in the correct position
- ora m ; set the new bit
- mov m,a ; return to the var
- xchg ; hl <- return address
- xra a ; clear acc
- pchl ; return
-
- reset: pop d ; get return address
- pop b ; get variable size & bit to reset
- pop h ; get variable address
- dcr b ; check for var of size 1
- cnz sizpatch ; otherwise fix the pointer
- xra a ; clear acc
- stc ; set carry
- mov b,c ; counter (0..7) to b
- inr b ; increment counter ( now between 1 & 8 )
- rstloop:adc a ; shift left 1 bit
- djnz rstloop ; now A has the bit in the correct position
- cma ; complement accumulator
- ana m ; set the new bit
- mov m,a ; return to the var
- xchg ; hl <- return address
- xra a ; clear acc
- pchl ; return
-
- test: pop h ; get return address
- pop d ; get variable and bit to test
- xra a ; clear acc
- stc ; set carry
- mov b,e
- inr b ; increment counter ( now between 1 & 8 )
- tstloop:adc a ; shift left 1 bit
- djnz tstloop ; now A has the bit in the correct position
- ana d ; set the new bit
- jrz testdone ; test is done if we have a zero
- xra a ; clear acc
- stc ; and set carry to indicate true
- testdone:
- pchl ; return
-
-
-
- sizpatch:
- dcx h ; point to the low byte of a two byte number
- ret ; and return.
-
- end
-