fputchar.s 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. | Warning: This routine has the attribute __ATTR_TIOS_CALLBACK__!
  2. .xdef fputchar
  3. .text
  4. fputchar:
  5. link.w %a6,#-20
  6. movem.l %d3-%d7/%a2-%a5,-(%sp)
  7. clr.w %d6
  8. move.b (%a6,9),%d6
  9. move.l 0xC8,%a5
  10. move.l (%a5,1592),%a0 /* FontGetSys */
  11. jsr (%a0)
  12. ext.w %d0 /* Yes, I know we technically shouldn't sign-extend an
  13. unsigned char, but it is always positive anyway. */
  14. move.w %d0,%d4
  15. lsl.w #1,%d4
  16. addq.w #6,%d4
  17. move.l (%a5,188),%a3 /* ScrRect */
  18. pea (%a6,-18)
  19. move.l (%a5,1664),%a0 /* SaveScrState */
  20. jsr (%a0)
  21. move.w (%a6,-8),%d5
  22. move.w (%a6,-6),%d3
  23. move.w %d6,-(%sp)
  24. move.l (%a5,1600),%a0 /* FontCharWidth */
  25. jsr (%a0)
  26. move.w %d0,%d7
  27. cmp.b #10,%d6
  28. jbeq .L__fputchar_1
  29. move.w %d5,%d0
  30. add.w %d7,%d0
  31. clr.w %d1
  32. move.b (%a3,2),%d1
  33. cmp.w %d0,%d1
  34. jbge .L__fputchar_2
  35. .L__fputchar_1:
  36. clr.w %d5
  37. add.w %d4,%d3
  38. .L__fputchar_2:
  39. move.w %d3,%d0
  40. add.w %d4,%d0
  41. clr.w %d1
  42. move.b (%a3,3),%d1
  43. cmp.w %d0,%d1
  44. jbge .L__fputchar_3
  45. clr.w (%sp)
  46. move.w %d4,-(%sp)
  47. move.l %a3,-(%sp)
  48. move.l %a3,-(%sp)
  49. move.l (%a5,1580),%a0 /* ScrRectScroll */
  50. jsr (%a0)
  51. sub.w %d4,%d3
  52. .L__fputchar_3:
  53. move.w #4,(%sp)
  54. move.w %d6,-(%sp)
  55. move.w %d3,-(%sp)
  56. move.w %d5,-(%sp)
  57. cmp.b #10,%d6
  58. jbeq .L__fputchar_4
  59. move.l (%a5,1680),%a0 /* DrawChar */
  60. jsr (%a0)
  61. add.w %d7,(%sp)
  62. .L__fputchar_4:
  63. move.l (%a5,1652),%a0 /* MoveTo */
  64. jsr (%a0)
  65. move.w %d6,%d0
  66. movm.l -56(%a6),%d3-%d7/%a2-%a5
  67. unlk %a6
  68. rts