+\r
+;-----------------------------------------------------\r
+; shift accu right logical n bits\r
+\r
+srlan macro n\r
+ if n > 7 or n < 0\r
+ xor a\r
+ exitm\r
+ endif\r
+\r
+ if n > 4\r
+ rept 8-n\r
+ rlca\r
+ endm\r
+ and (1 << (8-n)) - 1\r
+ exitm\r
+ endif\r
+\r
+ if n > 2\r
+ rept n\r
+ rrca\r
+ endm\r
+ and (1 << (8-n)) - 1\r
+ exitm\r
+ endif\r
+\r
+ rept n\r
+ srl a\r
+ endm\r
+ endm\r
+\r
+;-----------------------------------------------------\r
+; convert bit mask to bit number\r
+\r
+m2b macro name,mask\r
+ local n\r
+ n defl mask\r
+ name defl 0\r
+ rept 8\r
+ n defl n/2\r
+ if n = 0\r
+ exitm\r
+ endif\r
+ name defl name+1\r
+ endm\r
+ endm\r
+\r
+ .list\r