Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Project:
- ;hl is Z, de is Y, bc is X
- ;hl<32768, if hl is sup - return early
- add hl, hl
- ; return if neg
- ret c
- ld a, h
- or a
- jr z, _scale_up
- _scale_down_loop:
- srl a
- rr l
- sra d
- rr e
- sra b
- rr c
- or a
- jp nz, _scale_down_loop
- _scale_up:
- ;l, e, c are significant
- ld a, l
- or a
- ret z
- cp 98
- jp z, _no_bissect
- jr nc, _scale_done
- _scale_up_loop:
- sla e
- sla c
- add a, a
- cp 98
- jp c, _scale_up_loop
- _scale_done:
- rra
- ld l, a
- ; l = Z, e = X, c = Y
- xor a
- ld h, a
- ld d, a
- ld b, a
- #macro bissect_iter()
- ld a, l
- add a, h
- srl a
- cp 49
- ; calculate midpoint and classify
- jr nc, $+18
- ; store to h
- ld h, a
- ld a, e
- add a, d
- inc a
- sra a
- ld d, a
- ld a, c
- add a, b
- inc a
- sra a
- ld b, a
- jp $+16
- ; store it to l
- ld l, a
- ld a, e
- add a, d
- inc a
- sra a
- ld e, a
- ld a, c
- add a, b
- inc a
- sra a
- ld c, a
- #endmacro
- ; 6 iter to match precision
- bissect_iter()
- bissect_iter()
- bissect_iter()
- bissect_iter()
- bissect_iter()
- bissect_iter()
- ; finish:
- ld a, e
- add a, d
- inc a
- sra a
- add a, 48
- ; or whatever
- ld (gScreenX), a
- ld a, c
- add a, b
- inc a
- sra a
- ld c, a
- ld a, 32
- sub c
- ld (gScreenY), a
- ret
- _no_bissect:
- ld a, e
- add a, 48
- ld (gScreenX), a
- ld a, 32
- sub c
- ld (gScreenY), a
- ret
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement