home *** CD-ROM | disk | FTP | other *** search
/ Go64! / Go64_1999-12_1999_CSW_Side_A.d64 / usrmod.asm < prev    next >
Assembly Source File  |  2023-02-26  |  1KB  |  59 lines

  1. ; Modulo function using USR()
  2. ; Copyright 1992,1999 Peter Karlsson
  3. ; For Go64!/Commodore World magazine
  4.  
  5.          *= 49152
  6.  
  7. ; BASIC ROM entry points used
  8.  
  9. usrvec   = $0311
  10. mov2f57  = $bbca
  11. mov2f5c  = $bbc7
  12. frmnum   = $ad8a
  13. fdivmem  = $bb0f
  14. int      = $bccc
  15. fmultmem = $ba28
  16. fsubmem  = $b850
  17. tmp1     = $57
  18. tmp2     = $5c
  19.  
  20. ; Setup the USR vector
  21.          lda #<modulo
  22.          ldx #>modulo
  23.          sta usrvec
  24.          stx usrvec+1
  25.          rts
  26.  
  27. ; Entry point for the USR function
  28. modulo   ; Move numerator (FAC1) to TMP1
  29.          jsr mov2f57
  30.  
  31.          ; Retrieve denominator and
  32.          ; move from FAC1 to TMP2
  33.          jsr frmnum
  34.          jsr mov2f5c
  35.  
  36.          ; Calculate FAC1=FAC1/TMP1
  37.          ;           retval=x/y
  38.          lda #<tmp1
  39.          ldy #>tmp1
  40.          jsr fdivmem
  41.  
  42.          ; Calculate FAC1=INT(FAC1)
  43.          ;           retval=int(x/y)
  44.          jsr int
  45.  
  46.          ; Calculate FAC1=FAC1*TMP2
  47.          ;           retval=int(x/y)*y
  48.          lda #<tmp2
  49.          ldy #>tmp2
  50.          jsr fmultmem
  51.  
  52.          ; Calculate FAC1=TMP1-FAC1
  53.          ;           retval=x-int(x/y)*y
  54.          ;                 =mod(x,y)
  55.          lda #<tmp1
  56.          lda #>tmp1
  57.          jmp fsubmem
  58.  
  59.