rol.s 508 B

12345678910111213141516171819202122232425262728293031
  1. .define Rol
  2. .sect .text
  3. .sect .rom
  4. .sect .data
  5. .sect .bss
  6. .sect .text
  7. ! This subroutine rotates left an integer n times
  8. ! N is in register X.
  9. ! The result is returned in registerpair AX.
  10. Rol:
  11. txa
  12. bne 1f
  13. jmp Pop ! zero rotate return input
  14. 1: tay ! Y contains number of rotates
  15. jsr Pop
  16. stx Ytmp ! save lowbyte
  17. 2: clc
  18. rol Ytmp ! rotate lowbyte
  19. rol a ! rotate highbyte
  20. bcc 1f ! no carry
  21. inc Ytmp ! put carry in rightmost bit
  22. 1: dey
  23. bne 2b
  24. ldx Ytmp ! store lowbyte in X
  25. rts