these symbols are in LGROUP and generaly cannot be addressed by DGROUP:offset
for Turbo C DGROUP offset overflow because symbols are too far to be addressed by DGROUP offset
- fix issue by renaming header file and symbols which consolidate with standard C time.h
- rename also date.h for consistency
- remove all hacks from make files and from sys.c
now can share new dtime.h with standard C time.h without any collision that any order of internal and standard C header path is possible
getbpb now returns 0 instead of S_DONE in case of an uninitialized
partition, copying the default BPB into the BPB.
The previous return of S_DONE in case of uninitialized partitions
resulted in rp->r_bpptr not getting set in bldbpb. This in
combination with indicating success resulted in garbage returned
via rp->r_bpptr.
The DPB values are now being set to the default BPB ones in media_check
ea951d8136/kernel/fatfs.c (L1728)
via call to bpb_to_dpb in case of an uninitialized partition.
This may have side effects. But because DF_NOACCESS is still set, I
think it is the right way to do it.
The commit also masks high bit of AL for INT25/26 containing the drive
number. Some programs may set the bit according to RBIL:
"examination of CPWIN386.CPL indicates that if this call fails with
error 0408h on an old-style (<32M) call, one should retry the
call with the high bit of the drive number in AL set"
Leaving the bit set may render the given drive number unusable.
It should do no harm to mask it to increase the chance of the operation
to succeed. Also, the AH should be set to zero, because drive is given
only in AL.
This changes the interface between reloc_call_int2f_handler
(int2f.asm) and int2F_12_handler( ) (inthndlr.c) so that
- int2F_12_handler( ) will not try to output values to its
caller by passing "back" input parameter values
- reloc_call_int2f_handler will switch to an internal
stack before calling int2F_12_handler( ), so that SS ==
DGROUP as expected by the latter.
This partly addresses https://github.com/FDOS/kernel/issues/11 .
(The call to syscall_MUX14( ) in int2f.asm seems to have
similar issues, and should probably also be updated.)
DOS provides the interrupt 2f/12xx functions for use by
filesystem redirectors in order that they do not need to access
structures and variables using undocumented methods. Interrupt
2f/1217 is a function used by a redirector to get the CDS entry
corresponding to a drive without iterating the CDS array found
via SYSVARS LOL.
FreeDOS currently validates the flags in CDS entry before
deciding whether to return the entry to the caller. This behaviour
prevents a redirector receiving the CDS entry corresponding to
an as yet unassigned drive so preventing any new drive mapping.
I've tested the following flavours of DOS and only FreeDOS
does this.
# DOS variants returning new CDS entries okay
DR-DOS
6.00-930319 7.00 7.01 7.02-971119 7.02-980123 7.03 8.00
MS-DOS
3.10 3.20 3.21 3.30-Nec 3.30 3.31 4.01 5.00 6.00 6.20 6.21 6.22
7.00 7.10
PC-DOS
3.00-Compaq 3.00 3.10-850307 3.10-850422 3.10-Compaq 3.20-851230
3.20-860221 3.30 3.31-Compaq 4.00 4.01 5.00 5.02 6.10 6.30 7.00
7.10 7.2K
# DOS variants that return error rather than new CDS entry
FR-DOS
1.00 1.10 1.20
This patch introduces an unvalidated version of get_cds() and calls
it only for the int2f/1217h call, other uses remain as before.
- Upon creation, initialize the PSP version field
to os_setver_minor / os_setver_major.
- When calling Function 30h, return the contents
of the current PSP's version field to the caller.