mirror of
https://github.com/hsoft/collapseos.git
synced 2024-11-20 11:48:06 +11:00
45 lines
705 B
NASM
45 lines
705 B
NASM
; Borrowed from Tasty Basic by Dimitri Theulings (GPL).
|
|
; Divide HL by DE, placing the result in BC and the remainder in HL.
|
|
divide:
|
|
push hl ; --> lvl 1
|
|
ld l, h ; divide h by de
|
|
ld h, 0
|
|
call .dv1
|
|
ld b, c ; save result in b
|
|
ld a, l ; (remainder + l) / de
|
|
pop hl ; <-- lvl 1
|
|
ld h, a
|
|
.dv1:
|
|
ld c, 0xff ; result in c
|
|
.dv2:
|
|
inc c ; dumb routine
|
|
call .subde ; divide using subtract and count
|
|
jr nc, .dv2
|
|
add hl, de
|
|
ret
|
|
.subde:
|
|
ld a, l
|
|
sub e ; subtract de from hl
|
|
ld l, a
|
|
ld a, h
|
|
sbc a, d
|
|
ld h, a
|
|
ret
|
|
|
|
; DE * BC -> DE (high) and HL (low)
|
|
multDEBC:
|
|
ld hl, 0
|
|
ld a, 0x10
|
|
.loop:
|
|
add hl, hl
|
|
rl e
|
|
rl d
|
|
jr nc, .noinc
|
|
add hl, bc
|
|
jr nc, .noinc
|
|
inc de
|
|
.noinc:
|
|
dec a
|
|
jr nz, .loop
|
|
ret
|