если событий станет > 64? зачем такой изврат? не знаю как это описать на сях, на асме для авра написал макросы где BITMAP - стартовый адрес битового поля, BITLONG - длина битового поля в байтах. соответственно размер битового поля = BITLONG * 8.
и несколько макросов операций с битами
...........................................................
.macro sbit // BIT (set BIT)
.if (BITLONG -1) >= @0
lds r16, (BITMAP + (@0 / 8))
sbr r16, ( 1 << (@0%8))
sts (BITMAP + (@0 / 8)), r16
.else
.error "End off BITMAP"
.endif
.endm
...........................................................
.macro cbit // BIT (clear BIT)
.if (BITLONG -1) >= @0
lds r16, (BITMAP + (@0 / 8))
cbr r16, ( 1 << (@0%8))
sts (BITMAP + (@0 / 8)), r16
.else
.error "End off BITMAP"
.endif
.endm
...........................................................
.macro sbbs // BIT (skipping the next command if BIT=1)
.if (BITLONG -1) >= @0
lds r16, (BITMAP + (@0 / 8))
sbrs r16, (@0%8)
.else
.error "End off BITMAP"
.endif
.endm
...........................................................
.macro jbc // BIT, ADR (if BIT=0 then PC=ADR)
.if (BITLONG -1) >= @0
lds r16, (BITMAP + (@0 / 8))
sbrs r16, (@0%8)
jmp @1
.else
.error "End off BITMAP"
.endif
.endm
.................................................................................