?login_element?

Subversion Repositories NedoOS

Rev

Blame | Last modification | View Log | Download

  1. ; Product      : Math routines
  2. ; Version      : 0.1
  3. ; Main code by : Arjan
  4.  
  5.  
  6.         ifndef MATH_ASM
  7.         define MATH_ASM
  8.                
  9.         MODULE  Math
  10.  
  11. ; Function: MultiplyDEA
  12. ; Purpose: Multiplies A with DE
  13. ; Parameters: A: multiplier
  14. ;            DE: multiplicant
  15. ; Result: HL: 16 bit result
  16. ; Modifies: all        
  17. MultiplyDEA:  
  18.                 LD      HL,0
  19. .loop: 
  20.                 SRL     A
  21.                 JR      Z,.end
  22.                 JR      NC,.skip
  23.                 ADD     HL,DE
  24. .skip:         
  25.                 SLA     E
  26.                 RL      D
  27.                 JR      .loop          
  28.                
  29. .end:          
  30.                 RET     NC
  31.                 ADD     HL,DE
  32.                 RET    
  33.                        
  34. ; Function: HLDivDE    
  35. ; Purpose: Divides HL by DE
  36. ; Result HL =
  37. ;        DE = Remainder
  38. ;                              
  39. HLDivDE:
  40.                 LD      B,D      
  41.                 LD      C,E
  42.                 LD      DE,0
  43.                 LD      A,16
  44. HLDivDE.0:
  45.                 ADD     HL,HL
  46.                 EX      DE,HL
  47.                 ADC     HL,HL
  48.                 INC     DE
  49.                 OR      A
  50.                 SBC     HL,BC
  51.                 JR      NC,HLDivDE.1
  52.                 ADD     HL,BC
  53.                 DEC     DE
  54. HLDivDE.1:
  55.                 EX      DE,HL
  56.                 DEC     A
  57.                 JR      NZ,HLDivDE.0
  58.                 RET            
  59.  
  60. ; Function: HLMulDE    
  61. ; Purpose: Multiplies HL with DE
  62. ; Result HL
  63. ; Modfies AF,BC,DE,HL
  64. HLMulDE:
  65.                 LD      B,16
  66.                 LD      C,D
  67.                 LD      A,E
  68.  
  69.                 EX      DE,HL
  70.                 LD      HL,0
  71. HLMulDE.0      
  72.                 SRL     C
  73.                 RRA    
  74.                 JR      NC,HLMulDE.1
  75.                 ADD     HL,DE
  76. HLMulDE.1
  77.                 SLA     E
  78.                 RL      D
  79.                 DJNZ    HLMulDE.0
  80.                 RET
  81.  
  82.  
  83. ; Function: BCMulDE32  
  84. ; Purpose:  Multiply 16-bit values (with 32-bit result)
  85. ; In: Multiply BC with DE
  86. ; Result BC:HL
  87. ; Modfies AF,BC,HL
  88.  
  89. BCMulDE32:
  90.                 LD A,C
  91.                 LD C,B
  92.                 LD HL,0
  93.                 LD B,16
  94. .Loop
  95.                 ADD HL,HL
  96.                 RLA
  97.                 RL    C
  98.                 JR    NC,.NoAdd
  99.                 ADD   HL,DE
  100.                 ADC   A,0
  101.                 JP    NC,.NoAdd
  102.                 INC   C
  103. .NoAdd
  104.                 DJNZ .Loop
  105.                 LD    B,C
  106.                 LD    C,A
  107.                 RET
  108.  
  109.  
  110. ; Function: MultiplyCDEA       
  111. ; Purpose: Multiplies A with CDE
  112. ; Parameters: A: multiplier
  113. ;            CDE: multiplicant
  114. ; Result: HL'HL: 32 bit result
  115. ; Modifies: all        
  116. MultiplyCDEA:  
  117.                 LD      HL,0
  118.                 LD      B,A
  119.                 LD      A,C
  120.                
  121.                 EXX    
  122.                 LD      HL,0
  123.                 LD      B,0
  124.                 LD      C,A
  125.                 EXX
  126.                
  127.                 LD      A,B
  128.                
  129. .loop: 
  130.                 SRL     A
  131.                 JR      Z,.end
  132.                 JR      NC,.skip
  133.                
  134.                 ADD     HL,DE
  135.                 EXX
  136.                 ADC     HL,BC
  137.                 EXX
  138. .skip:         
  139.                 SLA     E
  140.                 RL      D
  141.                 EXX
  142.                 RL      C
  143.                 RL      B
  144.                 EXX
  145.                
  146.                 JR      .loop          
  147.                
  148. .end:          
  149.                 RET     NC
  150.                
  151.                 ADD     HL,DE
  152.                 EXX    
  153.                 ADC     HL,BC
  154.                 EXX
  155.                
  156.                 RET    
  157.  
  158.  
  159. ;
  160. ;Multiply 8-bit value
  161. ;In:  Multiply H with E
  162. ;Out: HL = result
  163. ;
  164. MultiplyHE:
  165.                 LD D,0
  166.                 LD L,D
  167.                 LD B,8
  168. .loop:
  169.                 ADD HL,HL
  170.                 JR NC,.NoAdd
  171.                 ADD HL,DE
  172. .NoAdd:
  173.                 DJNZ .loop
  174.                 RET
  175.  
  176.  
  177. CPHLDE
  178. ; Compare HL with DE
  179. ; Modifies A
  180.                 LD      A,H
  181.                 CP      A,D
  182.                 RET     NZ
  183.                 LD      A,L
  184.                 CP      A,E
  185.                 RET
  186.                
  187.         ENDMODULE
  188.                
  189.         endif
  190.