outdec.s 709 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. .define outdec
  2. .sect .text
  3. .sect .rom
  4. .sect .data
  5. .sect .bss
  6. .sect .text
  7. ! output contents of HL as a sequence
  8. ! of decimal digits
  9. outdec:
  10. push hl
  11. push de
  12. push bc
  13. push af
  14. ld de,table
  15. ld b,4
  16. 1: call convert
  17. or 0x30
  18. ld (iy+0),a
  19. inc iy
  20. djnz 1b
  21. ld a,l
  22. or 0x30
  23. ld (iy+0),a
  24. pop af
  25. pop bc
  26. pop de
  27. pop hl
  28. ret
  29. ! convert returns in a a count
  30. ! hl is decremented count times by (de)
  31. ! as a usefull side effect de is incremented
  32. ! by 2
  33. convert:
  34. push bc
  35. ld b,h
  36. ld c,l
  37. ex de,hl
  38. ld e,(hl)
  39. inc hl
  40. ld d,(hl)
  41. inc hl
  42. push hl ! save pointer to new value
  43. ld h,b
  44. ld l,c
  45. xor a
  46. 1: inc a
  47. sbc hl,de
  48. jr nc,1b
  49. add hl,de
  50. dec a
  51. pop de
  52. pop bc
  53. ret
  54. table:
  55. .data2 10000
  56. .data2 1000
  57. .data2 100
  58. .data2 10