Advertisement
Guest User

project in z80

a guest
Mar 7th, 2015
297
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. Project:
  2. ;hl is Z, de is Y, bc is X
  3. ;hl<32768, if hl is sup - return early
  4.     add hl, hl
  5. ; return if neg
  6.     ret c
  7.     ld  a, h
  8.     or  a
  9.     jr  z, _scale_up
  10. _scale_down_loop:
  11.     srl a
  12.     rr  l
  13.     sra d
  14.     rr  e
  15.     sra b
  16.     rr  c
  17.     or  a
  18.     jp  nz, _scale_down_loop
  19. _scale_up:
  20. ;l, e, c are significant
  21.     ld  a, l
  22.     or  a
  23.     ret z
  24.     cp  98
  25.     jp  z, _no_bissect
  26.     jr  nc, _scale_done
  27. _scale_up_loop:
  28.     sla e
  29.     sla c
  30.     add a, a
  31.     cp  98
  32.     jp  c, _scale_up_loop
  33. _scale_done:
  34.     rra
  35.     ld  l, a
  36. ; l = Z, e = X, c = Y
  37.     xor a
  38.     ld  h, a
  39.     ld  d, a
  40.     ld  b, a
  41. #macro  bissect_iter()
  42.     ld  a, l   
  43.     add a, h
  44.     srl a
  45.     cp  49
  46. ; calculate midpoint and classify
  47.     jr  nc, $+18
  48. ; store to h   
  49.     ld  h, a
  50.     ld  a, e
  51.     add a, d
  52.     inc a
  53.     sra a
  54.     ld  d, a
  55.     ld  a, c
  56.     add a, b
  57.     inc a
  58.     sra a
  59.     ld  b, a
  60.     jp  $+16
  61. ; store it to l
  62.     ld  l, a
  63.     ld  a, e
  64.     add a, d
  65.     inc a
  66.     sra a
  67.     ld  e, a
  68.     ld  a, c
  69.     add a, b
  70.     inc a
  71.     sra a
  72.     ld  c, a
  73. #endmacro
  74.  
  75. ; 6 iter to match precision
  76. bissect_iter()
  77. bissect_iter()
  78. bissect_iter()
  79. bissect_iter()
  80. bissect_iter()
  81. bissect_iter()
  82.  
  83. ; finish:
  84.  
  85.     ld  a, e
  86.     add a, d
  87.     inc a
  88.     sra a
  89.     add a, 48
  90. ; or whatever
  91.     ld  (gScreenX), a
  92.     ld  a, c
  93.     add a, b
  94.     inc a
  95.     sra a
  96.     ld  c, a
  97.     ld  a, 32
  98.     sub c
  99.     ld  (gScreenY), a
  100.     ret
  101. _no_bissect:
  102.     ld  a, e
  103.     add a, 48
  104.     ld  (gScreenX), a
  105.     ld  a, 32
  106.     sub c
  107.     ld  (gScreenY), a
  108.     ret
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement