|
1234567891011121314151617181920212223242526272829303132333435363738394041424344 |
- ; 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
|