set.s 465 B

12345678910111213141516171819202122232425262728293031
  1. .define .set
  2. .sect .text
  3. .sect .rom
  4. .sect .data
  5. .sect .bss
  6. .sect .text
  7. .set: ! d0 bitnumber
  8. ! d1 setsize in bytes
  9. move.l (sp)+,a0
  10. move.l d1, d2
  11. asr.l #2, d2
  12. sub.l #1, d2
  13. 1:
  14. clr.l -(sp)
  15. dbf d2, 1b
  16. move.l d0, d2
  17. asr.l #3, d2 ! offset .sect from sp in bytes
  18. eor.l #3, d2 ! longs are stored in high-to-low order
  19. cmp.l d1, d2
  20. blt 2f
  21. move.l a0, -(sp)
  22. move.l #ESET, -(sp) ! bitnumber too large
  23. jsr .trp
  24. rts
  25. 2:
  26. bset d0, 0(sp, d2.l)
  27. jmp (a0)
  28. .align 2