New version DRDOS 7.01.7 & 7.01.8 (Announce)
> > I made some changes to the latest EDR-DOS sources maintained by ecm:
> >
> > - fixed bug in DRDOS.SYS div32 function, leading to division errors on
> > partitions with more than 66535 FAT sectors. There is also a div32
> function
> > in DRBIO.SYS present, but it did not contain the bug.
>
> https://github.com/SvarDOS/edrdos/commit/167fe71ec058f80b7da47f11f2a34fc66938ad57
>
> div16:
> mov ax,12[bp]
> mov dx,14[bp]
>
> Surely you can xor dx, dx
here if you already checked that
> word [bp + 14]
is zero?
>
> More to the point if the divisor high word is zero, a two-step division of
> two 32/16=16 divisions can be done on a 32-bit dividend (with 32-bit
> quotient) which would be faster than the full 32-bit division (that fully
> supports 32-bit divisors in addition to dividends/quotients).
>
> The division functions in DRBIO both do not offer the fast path for smaller
> numbers:
>
> https://github.com/SvarDOS/edrdos/blob/f6584d40d6dda553e63f7682ad672536f53ae6ff/drbio/disk.asm#L3286
>
> https://github.com/SvarDOS/edrdos/blob/f6584d40d6d...e63f7682ad672536f53ae6ff/drbio/bdosldr.a86#L772
Yes, by re-arranging a little bit, the unconditional jump can also be eliminated, like so:
div32: ; 32-bit division
;--------
; On Entry:
; 32-bit dividend & divisor on stack
; space for 32-bit quotient & remainder reserved on stack
; SP-16
; On Exit:
; 32-bit quotient & remainder on stack
; SP-16
; Modified registers:
; AX,CX,DX,BP
mov bp,sp ; base address of temporary variables
add bp,2
cmp word ptr 10[bp],0 ; if divisor high => 32bit div
jne div32_full
cmp word ptr 14[bp],0 ; if dividend high => 32bit div
jne div32_full
div16: mov ax,12[bp] ; AX=low 16 bits of dividend
xor dx,dx
div word ptr 8[bp]
xor cx,cx
mov [bp],dx
mov 2[bp],cx ; clear high part of remainder
mov 4[bp],ax
mov 6[bp],cx ; and quotient result
ret
div32_full:
...
I first thought that the xor cx,cx can be eliminated too, by clearing the result after the xor dx,dx. But the xor cx,cx leaves the flags in a defined state, which the div does not. So I think it is safer to leave this xor cx,cx in.
Complete thread:
- New version DRDOS 7.01.7 & 7.01.8 - CandyMan, 21.07.2023, 15:40 (Announce)
- New version DRDOS 7.01.7 & 7.01.8 - glennmcc, 21.07.2023, 20:13
- New version DRDOS 7.01.7 & 7.01.8 - nico7550, 21.07.2023, 20:27
- New version DRDOS 7.01.7 & 7.01.8 - fritz.mueller, 21.07.2023, 20:29
- New version DRDOS 7.01.7 & 7.01.8 - glennmcc, 21.07.2023, 20:34
- New version DRDOS 7.01.7 & 7.01.8 - CandyMan, 21.07.2023, 22:18
- New version DRDOS 7.01.7 & 7.01.8 - nico7550, 21.07.2023, 22:45
- New version DRDOS 7.01.7 & 7.01.8 - nico7550, 22.07.2023, 09:40
- New version DRDOS 7.01.7 & 7.01.8 - CandyMan, 22.07.2023, 23:06
- New version DRDOS 7.01.7 & 7.01.8 - nico7550, 22.07.2023, 09:40
- New version DRDOS 7.01.7 & 7.01.8 - nico7550, 21.07.2023, 22:45
- New version DRDOS 7.01.7 & 7.01.8 - fritz.mueller, 21.07.2023, 20:29
- New version DRDOS 7.01.7 & 7.01.8 - Guti, 24.07.2023, 11:08
- New version DRDOS 7.01.7 & 7.01.8 - CandyMan, 25.07.2023, 15:04
- New version DRDOS 7.01.7 & 7.01.8 - nico7550, 26.07.2023, 15:19
- New version DRDOS 7.01.7 & 7.01.8 - Guti, 30.07.2023, 11:12
- New version DRDOS 7.01.7 & 7.01.8 - nico7550, 26.07.2023, 15:19
- New version DRDOS 7.01.7 & 7.01.8 - DieTotenByte, 30.07.2023, 01:09
- New version DRDOS 7.01.7 & 7.01.8 - CandyMan, 30.07.2023, 10:55
- New version DRDOS 7.01.7 & 7.01.8 - CandyMan, 03.08.2023, 21:46
- New version DRDOS 7.01.7 & 7.01.8 - CandyMan, 10.08.2023, 11:09
- New version DRDOS 7.01.7 & 7.01.8 - ecm, 10.08.2023, 15:52
- New version DRDOS 7.01.7 & 7.01.8 - CandyMan, 10.08.2023, 19:21
- New version DRDOS 7.01.7 & 7.01.8 - CandyMan, 11.08.2023, 10:47
- EDR-DOS bugs on int 21h functions 7142h and 71A6h - ecm, 12.08.2023, 21:13
- EDR-DOS bugs on int 21h functions 7142h and 71A6h - CandyMan, 13.08.2023, 11:16
- EDR-DOS bugs on int 21h functions 7142h and 71A6h - ecm, 13.08.2023, 13:59
- EDR-DOS bugs on int 21h functions 7142h and 71A6h - ecm, 13.08.2023, 14:39
- EDR-DOS bugs on int 21h functions 7142h and 71A6h - CandyMan, 13.08.2023, 19:23
- EDR-DOS bugs on int 21h functions 7142h and 71A6h - ecm, 13.08.2023, 21:41
- EDR-DOS bugs on int 21h functions 7142h and 71A6h - CandyMan, 13.08.2023, 22:41
- EDR-DOS bugs on int 21h functions 7142h and 71A6h - ecm, 13.08.2023, 23:18
- EDR-DOS bugs on int 21h functions 7142h and 71A6h - CandyMan, 13.08.2023, 23:51
- EDR-DOS development - ecm, 14.08.2023, 07:18
- EDR-DOS development - CandyMan, 14.08.2023, 09:43
- EDR-DOS development - ecm, 15.08.2023, 20:49
- EDR-DOS development - ecm, 15.08.2023, 20:51
- EDR-DOS development - ecm, 19.08.2023, 19:56
- EDR-DOS development - ecm, 15.08.2023, 20:49
- EDR-DOS development - CandyMan, 14.08.2023, 14:35
- EDR-DOS development - bretjohn, 14.08.2023, 21:12
- EDR-DOS development - CandyMan, 15.08.2023, 11:49
- EDR-DOS development - bretjohn, 14.08.2023, 21:12
- EDR-DOS development - CandyMan, 14.08.2023, 09:43
- EDR-DOS development - ecm, 15.08.2023, 20:46
- EDR-DOS development - CandyMan, 15.08.2023, 22:29
- EDR-DOS development - ecm, 16.08.2023, 10:06
- EDR-DOS development - CandyMan, 16.08.2023, 12:54
- EDR-DOS development - ecm, 16.08.2023, 18:19
- EDR-DOS development - CandyMan, 16.08.2023, 18:55
- EDR-DOS development - ecm, 16.08.2023, 18:19
- EDR-DOS development - CandyMan, 16.08.2023, 12:54
- EDR-DOS development - ecm, 16.08.2023, 10:06
- EDR-DOS development - CandyMan, 15.08.2023, 22:29
- EDR-DOS development - ecm, 20.08.2023, 01:35
- EDR-DOS development - CandyMan, 21.08.2023, 00:27
- EDR-DOS development - ecm, 21.08.2023, 22:54
- EDR-DOS development - ecm, 29.08.2023, 17:49
- EDR-DOS development - ecm, 29.08.2023, 18:26
- EDR-DOS development - ecm, 29.08.2023, 18:32
- EDR-DOS development - ecm, 29.08.2023, 18:49
- EDR-DOS development - ecm, 29.08.2023, 18:32
- EDR-DOS development - Rugxulo, 29.08.2023, 23:28
- EDR-DOS development - ecm, 30.08.2023, 09:47
- EDR-DOS development - ecm, 29.08.2023, 18:26
- EDR-DOS development - roytam, 29.12.2023, 15:33
- EDR-DOS development - CandyMan, 21.08.2023, 00:27
- EDR-DOS development - ecm, 14.08.2023, 07:18
- EDR-DOS bugs on int 21h functions 7142h and 71A6h - CandyMan, 13.08.2023, 23:51
- EDR-DOS bugs on int 21h functions 7142h and 71A6h - ecm, 13.08.2023, 23:18
- EDR-DOS repository - Ro2003, 10.10.2023, 16:24
- EDR-DOS repository - ecm, 12.10.2023, 19:04
- EDR-DOS repository - Ro2003, 13.10.2023, 08:23
- EDR-DOS repository - nico7550, 13.10.2023, 15:53
- EDR-DOS repository - Single-file kernel load - ecm, 13.10.2023, 18:16
- EDR-DOS repository - Single-file kernel load - ecm, 13.10.2023, 18:23
- EDR-DOS repository - Ro2003, 13.10.2023, 08:23
- EDR-DOS repository - ecm, 12.10.2023, 19:04
- EDR-DOS version number - Ro2003, 10.10.2023, 16:32
- EDR-DOS version number - ecm, 12.10.2023, 19:08
- EDR-DOS bugs on int 21h functions 7142h and 71A6h - CandyMan, 13.08.2023, 22:41
- EDR-DOS bugs on int 21h functions 7142h and 71A6h - ecm, 13.08.2023, 21:41
- EDR-DOS bugs on int 21h functions 7142h and 71A6h - ecm, 13.08.2023, 13:59
- EDR-DOS bugs on int 21h functions 7142h and 71A6h - CandyMan, 13.08.2023, 11:16
- EDR-DOS bugs on int 21h functions 7142h and 71A6h - ecm, 12.08.2023, 21:13
- New version DRDOS 7.01.7 & 7.01.8 - ecm, 10.08.2023, 15:52
- New version DRDOS 7.01.7 & 7.01.8 - glennmcc, 13.08.2023, 22:19
- What ever happened to Udo ? - glennmcc, 29.08.2023, 23:04
- New version DRDOS 7.01.7 & 7.01.8 - Ro2003, 10.10.2023, 16:10
- New version DRDOS 7.01.7 & 7.01.8 - glennmcc, 10.10.2023, 21:35
- New version DRDOS 7.01.7 & 7.01.8 - boeckmann, 12.12.2023, 17:04
- New version DRDOS 7.01.7 & 7.01.8 - ecm, 12.12.2023, 18:47
- New version DRDOS 7.01.7 & 7.01.8 - boeckmann, 12.12.2023, 21:15
- New version DRDOS 7.01.7 & 7.01.8 - boeckmann, 12.12.2023, 21:27
- New version DRDOS 7.01.7 & 7.01.8 - CandyMan, 13.12.2023, 16:58
- New version DRDOS 7.01.7 & 7.01.8 - boeckmann, 14.12.2023, 18:00
- New version DRDOS 7.01.7 & 7.01.8 - ecm, 14.12.2023, 20:58
- New version DRDOS 7.01.7 & 7.01.8 - boeckmann, 16.12.2023, 21:52
- New version DRDOS 7.01.7 & 7.01.8 - ecm, 30.12.2023, 14:27
- New version DRDOS 7.01.7 & 7.01.8 - boeckmann, 01.01.2024, 13:57
- New version DRDOS 7.01.7 & 7.01.8 - ecm, 30.12.2023, 14:27
- New version DRDOS 7.01.7 & 7.01.8 - boeckmann, 16.12.2023, 21:52
- New version DRDOS 7.01.7 & 7.01.8 - ecm, 14.12.2023, 20:58
- New version DRDOS 7.01.7 & 7.01.8 - boeckmann, 14.12.2023, 18:00
- New version DRDOS 7.01.7 & 7.01.8 - CandyMan, 13.12.2023, 16:58
- New version DRDOS 7.01.7 & 7.01.8 - boeckmann, 12.12.2023, 21:27
- New version DRDOS 7.01.7 & 7.01.8 - boeckmann, 12.12.2023, 21:15
- New version DRDOS 7.01.7 & 7.01.8 - ecm, 12.12.2023, 18:47