Commit Graph

31 Commits

Author SHA1 Message Date
C. Masloch
ab3cac6d0c allow gcc build to succeed with -DWIN31SUPPORT 2024-02-03 20:59:11 -05:00
Kenneth J Davis
569337a7ef
fix bug# 98 (correct bad CONFIG value 19 with bad value 14, should be 6) and add support for additional CONFIG options Verbose and PartitionMode to sys CONFIG processing 2023-12-19 19:50:22 -05:00
Kenneth J Davis
4b0162c2a6
default to normal not quiet for initial messages 2023-12-18 18:31:20 -05:00
Kenneth J Davis
5880d36ba9
add ability to adjust verboseness of messages during booting 2023-12-08 18:08:11 -05:00
C. Masloch
3d1ba0d486 config: build master environment during FDCONFIG.SYS processing
lDebug wants to access the environment while executing
as a device driver. Instead of building it in a variable
then copying it to 68h:0 after FDCONFIG.SYS processing,
just build it there to begin with.
2023-07-03 07:37:00 -04:00
Kenneth J Davis
e1b22c7035
update comments
(from Geoff Chappell blog and RBIL)
2022-10-24 20:19:32 -04:00
C. Masloch
992a898076 kernel.asm, exeflat: new format with UPX entry at 006C0h
This format has several advantages:

* The CONFIG block need not be moved.

* The entire compressed image (depacker and payload) need
not be moved another time before the UPX depacker's own
operation.

* The CONFIG block always lives at 00602h, and the kernel
need not be aware whether it was compressed for detecting
which CONFIG block to use.

* Support for compressed images beyond 64 KiB for free.
(The assembly define TEST_FILL_INIT_TEXT can be passed in
NASMENV to test this support with 32 KiB of LFSR output.)

* A subsequent commit will shorten the stub to 64 bytes,
compared to the prior 32 + 45 = 77 bytes, with no loss
of features. (The packed payload is a bit shorter too.)

* The new stub also sets ds and es to the segment value
that would point to the DOS/EXE process's PSP. This is
apparently not used by the UPX depacker but could be in
a future or past version, or if another packer is used.
2022-05-30 17:37:26 -04:00
C. Masloch
d91c14723a kernel: optimise A20 check and enable/disable calls
Some assembly tricks:

* SMC instead of checking the XMS driver address
in the DOS DS stub,

* SMC so that the address goes right into a
`call far immediate` instruction,

* use `repe cmpsw` to compare multiple words (saves
space over the individual word compares),

* near calls to far functions use push cs to build
a far-call stack frame,

* segments 0 and FFFFh generated by segment arithmetic
instead of loading from memory,

* common case (A20 already enabled) made to be the case
where the conditional branch just falls through, which
may be slightly better.
2022-05-29 19:24:00 -04:00
C. Masloch
4377a257e0 kernel, main: read kernel command line into init segment buffer
The protocol for this extension is based on what lDebug
already does given the PROTOCOL=FREEDOS with the switch
CMDLINE=1 (which was originally defined for the lDOS and
RxDOS load protocols). Therefore the stack frame mirrors
that of the lDOS protocol.
2022-05-21 23:22:08 -04:00
C. Masloch
49733547f1 kernel, main: add debugger_present variable and skip ints 0, 1, 3, 6
Also adds a CheckDebugger byte to the CONFIG block and
support for reading and writing this setting in the
SYS CONFIG program. Default is 0 (no check assume absent).
2022-05-21 23:22:08 -04:00
C. Masloch
7ff6c06814 kernel: copy CONFIG block from UPX help data early in kernel.asm
Here we depend on the signal instruction that is patched
by exeflat to indicate whether we were compressed. This
replaces the prior check that detected the UPX help data
solely by checking the CONFIG signature at 05E2h.
2022-05-21 23:22:08 -04:00
Kenneth J Davis
9186e6c5ed initial windows 3 enhanced support based on unstable kernel branch 2021-08-19 11:46:10 -04:00
Kenneth J Davis
cd4709f09b ensure offset to critical patch tables doesn't change - from a921e21edc (add 0x315 mark) 2021-07-30 23:10:15 -04:00
Kenneth J Davis
edfb0db758 adjust padding to be same as in PC-DOS (90h/nop)
see 1dc244b09b
2021-07-22 23:32:22 -04:00
Kenneth J Davis
9d293d7815 since both refer to critical sections to patch and we have none, i.e. both empty lists, use same location for unused hard coded critical patch list and critical patch list passed to Win3 2021-07-22 23:12:56 -04:00
Kenneth J Davis
a193ba3116 from dosemu2/fdpp - zero out critical patch list
Personal NetWare Server really writes to these addresses, so
putting 0x0d0c the way DOS does, is not safe.

See dosemu2/dosemu2#428
see 94bd3eb4b5
2021-07-22 23:02:18 -04:00
Ricardo Hanke
7496c685ea Implement version table support for int21/ah=4b, subfunctions 0 and 1 2021-03-10 22:21:19 -05:00
Tee-Kiah Chia
0114ab3be4 int2f: fix call interface around int2F_12_handler( )
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.)
2019-12-09 06:23:12 -05:00
Bart Oldeman
1bb9496c48 ia16-elf-gcc: eliminate _EnableA20 and _DisableA20 wrappers. 2018-07-12 12:14:47 -04:00
Bart Oldeman
25071a8df2 ia16-elf-gcc: eliminate wrapper for init_call_p_0 and make it "noreturn". 2018-07-12 11:47:41 -04:00
Tee-Kiah Chia
49d1939ed7 ia16-elf-gcc: remove need for far function wrappers 2018-07-08 18:10:18 +08:00
Bart Oldeman
89d97b18de Fix ASMCFUNC (FAR) functions for ia16-elf-gcc.
We need to use make the functions vararg (,...) to make them cdecl.
For FAR functions we need wrappers.
2018-01-11 17:50:31 -05:00
Bart Oldeman
9b5b2e7d60 Create init varieties for unsigned long helper functions.
An INITPATCH is used to make sure the correct symbols are used.
The GCC kernel now shows the copyright string and boots a little further.
2018-01-11 17:50:31 -05:00
Bart Oldeman
97003a8aca Introduce popargs and arg macros to distinguish PASCAL/STDCALL conventions.
GCC has -mrtd but the args are pushed in reverse versus PASCAL. So asm
routines have to use macros to obtain the stack arguments.
For the complex call_nls assembly, revert the arguments in C using a
preprocessor macro.
2018-01-11 17:50:31 -05:00
Bart Oldeman
71a7d0d264 ia16-elf-gcc: provide GNU LD linker script and symbols to link kernel.
The resulting kernel and sys.com do not work yet (kernel prints 123 only).
Some functions in sys.com are placeholders.
2018-01-11 17:50:31 -05:00
Bart Oldeman
7bf4b77233 ia16-elf-gcc port: compile all asm files with -f elf.
Because ia16-elf-gcc and the GNU linker do not understand OMF we
need to use ELF everywhere.
This also means we cannot use "wrt", "seg" and "call/jmp far".
Most wrt's are superfluous, and seg and call/jmp far can be
replaced by explicit ?GROUP references (to be defined in the
linker script).
2018-01-11 17:50:31 -05:00
lpproj
cab8092ad6 Fix memory break in NUL device 2016-02-06 13:43:34 +09:00
KJD
618e682a3b From Evelyn, CPU unsupported message missing loading error msg address (pop si) 2016-01-15 22:34:38 -05:00
Kenneth J. Davis
f3bc7e882a display error for unsupported CPU from C. Masloch 2012-10-15 12:41:25 -04:00
KJD
a260927440 Tell version info without booting kernel 2012-10-15 06:41:07 -04:00
KJD
c431157156 FreeDOS kernel current - 2041+svn1709 2012-10-14 20:08:06 -04:00