?login_element?

Subversion Repositories NedoOS

Rev

Blame | Last modification | View Log | Download

  1. #ifndef included_sqr32
  2. #define included_sqr32
  3. #include "mul16.z80"
  4.  
  5. #define var_c xOP1   ;input
  6. #define var_y var_c+4 ;  used for sqrt32
  7. #define var_x xOP2   ;output
  8. #define var_b xOP2   ; 4 bytes, result gets copied to bottom anyways
  9. #define var_a xOP2   ;   2 bytes
  10. #define var_z0 xOP2+8;used in sqr32
  11. sqr32:
  12. ;avg: 2057.39cc
  13. ;HLDE --> var_z0
  14.   push hl
  15.   ld b,d
  16.   ld c,e
  17.   call mul16  ; -> DEHL
  18.   ld (var_z0),hl
  19.   ld (var_z0+2),de
  20.   pop de
  21.   push bc
  22.   ld b,d
  23.   ld c,e
  24.   call mul16
  25.   ld (var_z0+4),hl
  26.   ld (var_z0+6),de
  27.   pop de
  28.   call mul16
  29.   xor a
  30.   add hl,hl
  31.   rl e
  32.   rl d
  33.   rla
  34.   ld bc,(var_z0+2)
  35.   add hl,bc
  36.   ld (var_z0+2),hl
  37.   ex de,hl
  38.   ld bc,(var_z0+4)
  39.   adc hl,bc
  40.   ld (var_z0+4),hl
  41.   ld hl,var_z0+6
  42.   adc a,(hl)
  43.   ld (hl),a
  44.   ret nc
  45.   inc hl
  46.   inc (hl)
  47.   ret
  48. #undefine var_b xOP2   ; 4 bytes, result gets copied to bottom anyways
  49. #undefine var_a xOP2   ;   2 bytes
  50. #undefine var_c xOP2+8 ;input
  51. #undefine var_y var_c+4 ;  used for sqrt32
  52. #undefine var_z0 xOP2+16
  53. #endif
  54.