duv4.s 900 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. .define Duv4
  2. .sect .text
  3. .sect .rom
  4. .sect .data
  5. .sect .bss
  6. .sect .text
  7. ! This subroutine performs an unsigned division on two fourbyte
  8. ! unsigned integers.
  9. ! For more details see dvi.s
  10. ! The only difference is that zeropage locations are twice as big.
  11. Duv4:
  12. 1: ldy #0
  13. sty ARTH+8
  14. sty ARTH+9
  15. sty ARTH+10
  16. sty ARTH+11
  17. ldy #33
  18. 4: lda ARTH+11
  19. cmp ARTH+3
  20. bcc 1f ! no sub
  21. bne 2f ! sub
  22. lda ARTH+10
  23. cmp ARTH+2
  24. bcc 1f
  25. bne 2f
  26. lda ARTH+9
  27. cmp ARTH+1
  28. bcc 1f
  29. bne 2f
  30. lda ARTH+8
  31. cmp ARTH
  32. bcc 1f
  33. 2: sec
  34. lda ARTH+8
  35. sbc ARTH
  36. sta ARTH+8
  37. lda ARTH+9
  38. sbc ARTH+1
  39. sta ARTH+9
  40. lda ARTH+10
  41. sbc ARTH+2
  42. sta ARTH+10
  43. lda ARTH+11
  44. sbc ARTH+3
  45. sta ARTH+11
  46. sec
  47. rol ARTH+4
  48. bne 3f
  49. 1: asl ARTH+4
  50. 3: rol ARTH+5
  51. rol ARTH+6
  52. rol ARTH+7
  53. rol ARTH+8
  54. rol ARTH+9
  55. rol ARTH+10
  56. rol ARTH+11
  57. dey
  58. bne 4b
  59. ldy UNSIGN
  60. beq 1f
  61. ldy SIGN
  62. beq 1f
  63. lda #0
  64. ldx #ARTH+4
  65. jsr Ngi4
  66. 1: rts