home *** CD-ROM | disk | FTP | other *** search
/ The Best of Mecomp Multimedia 2 / MECOMP-CD-II.iso / amiga / tools / libs / graphics3d / src / example / gen.h < prev    next >
Encoding:
Text File  |  1997-04-13  |  2.3 KB  |  91 lines

  1. /******************************
  2.  ** LIBRERIA FUNZIONI VARIE  **
  3.  ** by BIANCA HARD&SOFT 1994 **
  4.  ******************************/
  5. /************************************************
  6.  ** FUNZIONE PER DIVIDERE 2 INTERI A 32BIT     **
  7.  ************************************************
  8.  *** INPUT :                       **
  9.  ** dividendo - num. a 32 bit da dividere      **
  10.  ** divisore  - num. a 32 bit per cui dividere **
  11.  *** OUTPUT:                       **
  12.  ** risultato intero a 32 bit della divisione  **
  13.  ** dividendo/divisore                   **
  14.  *** NOTE :                       **
  15.  ** Ecquivale alla funzione di sistema Div()   **
  16.  ** dell'E con la differenza che funziona      **
  17.  ** anche in caso di risultati negativi        **
  18.  ************************************************/
  19. PROC div(dividendo:LONG ,divisore:LONG)
  20. DEF i1:LONG
  21. DEF i2:LONG
  22. DEF sgn:LONG
  23.  
  24. i1:=1
  25. i2:=1
  26. IF dividendo<NIL 
  27.     dividendo:=-dividendo
  28.     i1:=-1
  29. ENDIF
  30. IF divisore<NIL
  31.     divisore:=-divisore
  32.     i2:=-1
  33. ENDIF
  34.  
  35. sgn:=i1*i2
  36.  
  37. ENDPROC Mul(sgn,Div(dividendo,divisore))
  38.  
  39. /************************************************
  40.  ** FUNZIONE PER TRASFERIRE BLOCCHI DI MEMORIA **
  41.  ************************************************
  42.  *** INPUT :                                   **
  43.  ** source - puntatore a blocco di partenza.   **
  44.  ** dest   - puntatore a blocco d'arrivo.      **
  45.  ** lung   - n# bytes blocco da trasferire.    **
  46.  *** OUTPUT:                                   **
  47.  ** nessuno.                                   **
  48.  *** NOTE:                                     **
  49.  ** La routin supporta anche spostamenti di    **
  50.  ** aree parzialmente o totalmente sovrapposte.**
  51.  ** E' scritta in assembler per ragioni di     **
  52.  ** efficenza.                                 **
  53.  ************************************************/
  54. PROC cmem(source:PTR TO CHAR,dest:PTR TO CHAR,lung)
  55.  
  56.    MOVE.L   A1,-(A7)
  57.    MOVE.L   A2,-(A7)
  58. /** FATTO IN ASSEMBLER **/
  59.  
  60.    MOVE.L   source,A1
  61.    MOVE.L   dest,A2
  62.    MOVE.L   lung,D0
  63.    TST.L    D0
  64.    BEQ.B    fine
  65. /* test se origine maggiore di destinazione */
  66.    CMPA.L   dest,A1
  67.    BGT.B    maggiore
  68.  
  69. /** trasferimento per dest >= source **/
  70.    ADDA.L   lung,A1
  71.    ADDA.L   lung,A2
  72. loop1:
  73.    MOVE.B   -(A1),-(A2)
  74.    SUB.L    #1,D0
  75.    BNE.B    loop1
  76.    BRA.B    fine
  77.  
  78. /** trasferimento per dest < source **/
  79. maggiore:
  80.    MOVE.B   (A1)+,(A2)+
  81.    SUB.L    #1,D0
  82.    BNE.B    maggiore
  83.  
  84. fine:
  85.  
  86.    MOVE.L   (A7)+,A1
  87.    MOVE.L   (A7)+,A2
  88.  
  89. ENDPROC
  90.  
  91.