?login_element?

Subversion Repositories NedoOS

Rev

Blame | Last modification | View Log | Download

  1.  ifndef included_mul16
  2.  define included_mul16
  3.  
  4.  
  5. ;This was made by Runer112
  6. ;Tested by jacobly
  7. mul16:
  8. ;BC*DE --> DEHL
  9. ; ~544.887cc as calculated in jacobly's test
  10. ;min: 214cc  (DE = 1)
  11. ;max: 667cc
  12. ;avg: 544.4507883cc   however, deferring to jacobly's result as mine may have math issues ?
  13. ;177 bytes
  14.         ld      a,d
  15.         ld      d,0
  16.         ld      h,b
  17.         ld      l,c
  18.         add     a,a
  19.         jr      c,Mul_BC_DE_DEHL_Bit14
  20.         add     a,a
  21.         jr      c,Mul_BC_DE_DEHL_Bit13
  22.         add     a,a
  23.         jr      c,Mul_BC_DE_DEHL_Bit12
  24.         add     a,a
  25.         jr      c,Mul_BC_DE_DEHL_Bit11
  26.         add     a,a
  27.         jr      c,Mul_BC_DE_DEHL_Bit10
  28.         add     a,a
  29.         jr      c,Mul_BC_DE_DEHL_Bit9
  30.         add     a,a
  31.         jr      c,Mul_BC_DE_DEHL_Bit8
  32.         add     a,a
  33.         jr      c,Mul_BC_DE_DEHL_Bit7
  34.         ld      a,e
  35.         and     %11111110
  36.         add     a,a
  37.         jr      c,Mul_BC_DE_DEHL_Bit6
  38.         add     a,a
  39.         jr      c,Mul_BC_DE_DEHL_Bit5
  40.         add     a,a
  41.         jr      c,Mul_BC_DE_DEHL_Bit4
  42.         add     a,a
  43.         jr      c,Mul_BC_DE_DEHL_Bit3
  44.         add     a,a
  45.         jr      c,Mul_BC_DE_DEHL_Bit2
  46.         add     a,a
  47.         jr      c,Mul_BC_DE_DEHL_Bit1
  48.         add     a,a
  49.         jr      c,Mul_BC_DE_DEHL_Bit0
  50.         rr      e
  51.         ret     c
  52.         ld      h,d
  53.         ld      l,e
  54.         ret
  55.  
  56. Mul_BC_DE_DEHL_Bit14:
  57.         add     hl,hl
  58.         adc     a,a
  59.         jr      nc,Mul_BC_DE_DEHL_Bit13
  60.         add     hl,bc
  61.         adc     a,d
  62. Mul_BC_DE_DEHL_Bit13:
  63.         add     hl,hl
  64.         adc     a,a
  65.         jr      nc,Mul_BC_DE_DEHL_Bit12
  66.         add     hl,bc
  67.         adc     a,d
  68. Mul_BC_DE_DEHL_Bit12:
  69.         add     hl,hl
  70.         adc     a,a
  71.         jr      nc,Mul_BC_DE_DEHL_Bit11
  72.         add     hl,bc
  73.         adc     a,d
  74. Mul_BC_DE_DEHL_Bit11:
  75.         add     hl,hl
  76.         adc     a,a
  77.         jr      nc,Mul_BC_DE_DEHL_Bit10
  78.         add     hl,bc
  79.         adc     a,d
  80. Mul_BC_DE_DEHL_Bit10:
  81.         add     hl,hl
  82.         adc     a,a
  83.         jr      nc,Mul_BC_DE_DEHL_Bit9
  84.         add     hl,bc
  85.         adc     a,d
  86. Mul_BC_DE_DEHL_Bit9:
  87.         add     hl,hl
  88.         adc     a,a
  89.         jr      nc,Mul_BC_DE_DEHL_Bit8
  90.         add     hl,bc
  91.         adc     a,d
  92. Mul_BC_DE_DEHL_Bit8:
  93.         add     hl,hl
  94.         adc     a,a
  95.         jr      nc,Mul_BC_DE_DEHL_Bit7
  96.         add     hl,bc
  97.         adc     a,d
  98. Mul_BC_DE_DEHL_Bit7:
  99.         ld      d,a
  100.         ld      a,e
  101.         and     %11111110
  102.         add     hl,hl
  103.         adc     a,a
  104.         jr      nc,Mul_BC_DE_DEHL_Bit6
  105.         add     hl,bc
  106.         adc     a,0
  107. Mul_BC_DE_DEHL_Bit6:
  108.         add     hl,hl
  109.         adc     a,a
  110.         jr      nc,Mul_BC_DE_DEHL_Bit5
  111.         add     hl,bc
  112.         adc     a,0
  113. Mul_BC_DE_DEHL_Bit5:
  114.         add     hl,hl
  115.         adc     a,a
  116.         jr      nc,Mul_BC_DE_DEHL_Bit4
  117.         add     hl,bc
  118.         adc     a,0
  119. Mul_BC_DE_DEHL_Bit4:
  120.         add     hl,hl
  121.         adc     a,a
  122.         jr      nc,Mul_BC_DE_DEHL_Bit3
  123.         add     hl,bc
  124.         adc     a,0
  125. Mul_BC_DE_DEHL_Bit3:
  126.         add     hl,hl
  127.         adc     a,a
  128.         jr      nc,Mul_BC_DE_DEHL_Bit2
  129.         add     hl,bc
  130.         adc     a,0
  131. Mul_BC_DE_DEHL_Bit2:
  132.         add     hl,hl
  133.         adc     a,a
  134.         jr      nc,Mul_BC_DE_DEHL_Bit1
  135.         add     hl,bc
  136.         adc     a,0
  137. Mul_BC_DE_DEHL_Bit1:
  138.         add     hl,hl
  139.         adc     a,a
  140.         jr      nc,Mul_BC_DE_DEHL_Bit0
  141.         add     hl,bc
  142.         adc     a,0
  143. Mul_BC_DE_DEHL_Bit0:
  144.         add     hl,hl
  145.         adc     a,a
  146.         jr      c,Mul_BC_DE_DEHL_FunkyCarry
  147.         rr      e
  148.         ld      e,a
  149.         ret     nc
  150.         add     hl,bc
  151.         ret     nc
  152.         inc     e
  153.         ret     nz
  154.         inc     d
  155.         ret
  156.  
  157. Mul_BC_DE_DEHL_FunkyCarry:
  158.         inc     d
  159.         rr      e
  160.         ld      e,a
  161.         ret     nc
  162.         add     hl,bc
  163.         ret     nc
  164.         inc     e
  165.         ret
  166.  endif
  167.