registertimer.s 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. .xdef OSVRegisterTimer
  2. .text
  3. OSVRegisterTimer:
  4. moveq.l #2,%d1
  5. moveq.l #-1,%d2
  6. subq.w #1,%d0
  7. cmp.w %d1,%d0
  8. bcc.s .L__timer_rfai
  9. muls.w #12,%d0
  10. move.l 0x74,%a0
  11. cmpi.l #132133782,(%a0,-4)
  12. beq.s .L__timer_rins
  13. lea .L__timer_told(%pc),%a1
  14. move.l %a0,(%a1)
  15. lea .L__timer_rti5(%pc),%a0
  16. .L__timer_rins:
  17. lea -32(%a0,%d0.w),%a1
  18. cmp.l (%a1),%d2
  19. bne.s .L__timer_rfai
  20. move.l %d3,(%a1)+
  21. move.l %d3,(%a1)+
  22. move.l %d4,(%a1)
  23. lea.l 0x600001,%a1
  24. bclr.b %d1,(%a1)
  25. move.l %a0,0x74:w
  26. bset.b %d1,(%a1)
  27. moveq #1,%d0
  28. rts
  29. .L__timer_rfai:
  30. clr.w %d0
  31. rts
  32. .even
  33. .L__timer_ttab:
  34. .long -1,0,0,-1,0,0
  35. .L__timer_told:
  36. .long 0
  37. .long 132133782 /* magic */
  38. .even
  39. .L__timer_rti5:
  40. move.w #0x2700,%sr
  41. movem.l %d0-%d7/%a0-%a6,-(%sp)
  42. lea .L__timer_ttab(%pc),%a4
  43. moveq #1,%d4
  44. moveq #-1,%d3
  45. .L__timer_i5lp:
  46. cmp.l (%a4)+,%d3
  47. beq.s .L__timer_i5sk
  48. subq.l #1,(%a4)
  49. bne.s .L__timer_i5sk
  50. move.l -4(%a4),(%a4)
  51. move.l 4(%a4),%a0
  52. jsr (%a0)
  53. .L__timer_i5sk:
  54. addq.l #8,%a4
  55. dbra %d4,.L__timer_i5lp
  56. movem.l (%sp)+,%d0-%d7/%a0-%a6
  57. move.l .L__timer_told(%pc),-(%sp)
  58. rts