fputchar.s 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. | Warning: This routine has the attribute __ATTR_TIOS_CALLBACK__!
  2. .data
  3. .xdef fputchar
  4. .even
  5. fputchar:
  6. link.w %a6,#-20
  7. movem.l %d3-%d7/%a2-%a5,-(%sp)
  8. clr.w %d0
  9. move.b (%a6,9),%d6
  10. move.l 0xC8,%a5
  11. move.l (%a5,1592),%a0
  12. jsr (%a0)
  13. move.w %d0,%d4
  14. lsl.w #1,%d4
  15. addq.w #6,%d4
  16. move.l (%a5,188),%a3
  17. pea (%a6,-18)
  18. move.l (%a5,1664),%a0
  19. jsr (%a0)
  20. move.w (%a6,-8),%d5
  21. move.w (%a6,-6),%d3
  22. move.w %d6,-(%sp)
  23. move.l (%a5,1600),%a0
  24. jsr (%a0)
  25. move.w %d0,%d7
  26. cmp.b #10,%d6
  27. jbeq .L__fputchar_1
  28. move.w %d5,%d0
  29. add.w %d7,%d0
  30. clr.w %d1
  31. move.b (%a3,2),%d1
  32. cmp.w %d0,%d1
  33. jbge .L__fputchar_2
  34. .L__fputchar_1:
  35. clr.w %d5
  36. add.w %d4,%d3
  37. .L__fputchar_2:
  38. move.w %d3,%d0
  39. add.w %d4,%d0
  40. clr.w %d1
  41. move.b (%a3,3),%d1
  42. cmp.w %d0,%d1
  43. jbge .L__fputchar_3
  44. clr.w (%sp)
  45. move.w %d4,-(%sp)
  46. move.l %a3,-(%sp)
  47. move.l %a3,-(%sp)
  48. move.l (%a5,1580),%a0
  49. jsr (%a0)
  50. sub.w %d4,%d3
  51. .L__fputchar_3:
  52. move.w #4,(%sp)
  53. move.w %d6,-(%sp)
  54. move.w %d3,-(%sp)
  55. move.w %d5,-(%sp)
  56. cmp.b #10,%d6
  57. jbeq .L__fputchar_4
  58. move.l (%a5,1680),%a0
  59. jsr (%a0)
  60. add.w %d7,(%sp)
  61. .L__fputchar_4:
  62. move.l (%a5,1652),%a0
  63. jsr (%a0)
  64. move.w %d6,%d0
  65. movm.l -56(%a6),%d3-%d7/%a2-%a5
  66. unlk %a6
  67. rts