Addendum to commit 9e64fa837d (PR #8510)
CORE-16216, CORE-17977
pcmem.c: Surround more PC-specific routines in `!SARCH_XBOX || !SARCH_PC98`,
so that they aren't compiled for XBOX or PC98.
pcat.cmake: Inform that pcmem.c is used by pc98mem.c
CORE-16216
Addendum to commit 9e64fa837d (PR #8510)
Fixes GCC complaint when compiling for XBOX (or PC98)
```
boot/freeldr/freeldr/arch/i386/pc/machpc.c:1123:1: error: 'DetectKeyboardController' defined but not used [-Werror=unused-function]
DetectKeyboardController(PCONFIGURATION_COMPONENT_DATA BusKey)
^~~~~~~~~~~~~~~~~~~~~~~~
```
Partial revert of 9decadee83.
It introduced a typo in the assembler code that broke the build.
Also, "Press any key" text fits into 512 bootsector space on both GCC/MSVC.
CORE-19882 CORE-17977
CORE-11954, CORE-16216
Here only moving and adjusting existing code has been done.
In the future, this code will be expanded to support other bits-per-pixel
formats and pixel bitmasks, available in UEFI platforms, and be used to
handle bios-based PC VESA framebuffer.
CORE-16216
machpc.c:
- Surround more PC-specific routines in `#if !defined(SARCH_XBOX)`,
so that they aren't compiled for XBOX.
- In particular since commit 246f2d29db (PR #8418), the PC-specific
`DiskGetConfigType()` was compiled at the same time as the XBOX one.
This is now fixed.
machxbox.c
- Add a dummy `ChainLoadBiosBootSectorCode()` to make freeldr exports working.
xboxdisk.c
- Minimal Disk I/O error support routines.
- Add a dummy `DiskResetController()`, invoked in pchw.c
- Add a dummy `DiskStopFloppyMotor()`, needed for entry.S/linux.S
miscboot.c
- Still compile `LoadAndBootSector()` (avoids lots of changes elsewhere),
but display an error message if it's run, and directly return with an error.
pcat.cmake
- Remove unnecessary dependencies on pcdisk.c and pcvesa.c
This allows FreeLoader to know which initial video mode it has been
started with (e.g. if chainloaded from another bootloader that has
set the display to something different from 80x25 text mode), and,
either update its internal state and use the video mode if supported,
or, fall back to a known supported video mode (80x25 text).
Cache the type when initializing the video, instead of invoking every time
`PcVideoDetectVideoCard()`. Indeed, the video card is not going to change
magically at runtime by the user :D
It contains the symbols & macros used for the embedded VGA font.
- Adjust users to use `const UCHAR*` instead of `PUCHAR` pointer;
- pc98video.c: Capture the current `FontPtr[Line]` into an `UCHAR`,
so as to safely modify it.
- `PcVideoDetectVideoCard()`: Fix the call to Int 10h AX=1A00h.
A 23-year old regression from commit 425bbb1543 (r3782), introduced
by a copy-pasta error when converting video code from ASM to C.
- `PcVideoSetMode80x50_80x43()`: Fix setting the 80x50 VGA text-mode,
which _is_ based on the 80x25 text-mode BIOS 0x03, see e.g.
c2f2b01b74/arch/x86/boot/video-vga.c
A 18-year old regression from commit 1b3e649577 (r25751), where the
correct mode 0x03 was replaced by a VGA graphics mode 0x12, whereas
the intent in this commit was to only switch to mode 0x12 only in
`PcVideoPrepareForReactOS()` -- this was because at that time, bootvid
and hal didn't support changing the video mode to what they needed.
This has been fixed since.
CORE-14603
The differentiation between a regular file loaded as a RamDisk and a
storage device volume, is done by invoking `ArcGetFileInformation()`
and looking at the `Information.Type` value.
CORE-14603
- Each filesystem exposes a `*GetVolumeSize()` routine that returns the
volume size it claims it reports (this is based on data from FAT/NTFS
BIOS Parameter Blocks, or EXTn/BTRFS superblocks, similarly to what
their NT filesystem drivers do).
- Given a device ID corresponding to a mountable drive, a top-level
`FsGetVolumeSize()` routine attempts to mount the corresponding filesystem.
This may fail if the device is not a drive, or if the filesystem is
not recognized. If it succeeds, then the per-filesytem `*GetVolumeSize()`
is invoked and the corresponding volume size is returned.
Ensure using the correct data segment in the lgdt/lidt invocation.
Also simplify the MASM/ML vs. gas syntax by using `lXdtPrefix`.
Fixes x86 MSVC FreeLoader boot following commit 9decadee83.
This device is present in some PC-98 models without C-bus slots
and has a SubClass ID of 0x80 (other bridge) instead of 0x01 (ISA bridge),
thus a critical device database entry is required.
00:06.0 Bridge [0680]: NEC Corporation Star Alpha 2 [1033:002c] (rev 01)
Subsystem: Unknown [0000:0000]
Flags: bus master, medium devsel, latency 0
Addendum to commit 84fabd819d.
CORE-17977
CORE-8872
This is useful in the context of e.g. 3rd-party testers who want to
quickly add/remove/modify any file in a ReactOS ISO image and remastering
it without the need of our whole build environment.
remaster.cmd: Batch script.
remaster.sh : Almost-POSIX-compatible shell script version.
[SDK][WDFLDR] Add kmdf loader driver
[SDK][WDF] Add kmdf drver init static library
[SDK][WDF] Modify kmdf driver for working with wdfldr driver
[SDK][CDROM] Cdrom driver dynamically linking with kmdf
[SDK][WDF] Add kmdfdriver module type
[SDK][WDF][USBDEX][NTOSKRNL_VISTA] Fully enable KMDF
[KMDF][WDFLDR][WDF01000] Fix Windows 10 Compatibility WDFLDR and WDF01000
[WDF01000] NO_KERNEL_LIST_ENTRY_CHECKS for wdf01000 3rd party code
This PR is an accumulation of three peoples work, with the goal of the trying to get WDF to work like it should.
This has been tested in combination with some extra NT6+ ntoskrnl against multiple drivers.
---------
Co-authored-by: Max Korostil <mrmks04@yandex.ru>
Co-authored-by: Victor Perevertkin <victor.perevertkin@reactos.org>
Co-authored-by: Adam Słaboń <asaillen@protonmail.com>
Co-authored-by: Hermès BÉLUSCA - MAÏTO <hermes.belusca-maito@reactos.org>
CORE-9023
Add support for all the supported filesystems: FAT/FATX, NTFS,
ISO, EXT, BTRFS, as well as for files loaded via PXE.
arc.h:
- Add `FILEATTRIBUTES` enumeration;
- Remove non-existing `CreateReadOnly` and `SupersedeReadOnly`
`OPENMODE` values; add missing `CreateReadWrite`.
Suppose the list of devices contains, for example listed in this order:
`multi(0)disk(0)rdisk(0)partition(1)`,
followed by:
`multi(0)disk(0)rdisk(0)`,
then if someone attempts to open `multi(0)disk(0)rdisk(0)`, the code
would erroneously open `multi(0)disk(0)rdisk(0)partition(1)` instead.
Device name lookup now verifies that the device name being tested has
the same length as the one being opened.
Noticed by user "Xen", see:
https://reactos.org/forum/viewtopic.php?p=144840#p144840
> Wrong name comparison in ArcOpen (can open "device()partition()"
> instead of "device()" that was really requested)
CORE-9023
And more accurately detect and report disks:
using `InquiryBuffer.DeviceType`, differentiate between "rigid" disks,
floppy disks, and CD-ROM drives.
CORE-9023
Some of this determination is platform-specific (e.g. BIOS-based PC vs.
NEC PC-98 vs. Xbox), and is done in a per-platform `DiskGetConfigType()`
routine.
This routine is then invoked by `hwdisk.c!DiskOpen()` and `PcInitializeBootDevices()`.
CORE-9023
The purpose of this file is to contain all the known `_S_IF*` flags
and `_S_IS*` macros, some of which are used by the FreeLoader *nix-based
file-systems.
CORE-9023
Do the seek to the beginning only once before starting the loop,
but avoid doing it for each chunk read: we base ourselves on the
fact that read operations automatically advance the internal read
pointer (per the specs).
CORE-14603 CORE-9023
The RamDisk path specified with `/RDPATH=` can be a path to a block
device, like a disk partition, or the current boot disk (a ReactOS
specific feature added in commit 9b70d4380c), instead of being only
a file (as with Windows' NTLDR).
In this case, the `StartingAddress` and `EndingAddress` returned by
`ArcGetFileInformation()` are, per the specs, the start and end
positions of the partition as byte offsets from the start of the disk.
Therefore, the size of the partition is `== EndingAddress - StartingAddress`.
+ Add diagnostic traces in `RamDiskLoadVirtualFile()` and `RamDiskInitialize()`.
Co-authored-by: Hermès Bélusca-Maïto <hermes.belusca-maito@reactos.org>
Croatian and Slovenian share the same keyboard layout file.
- Add the Slovenian keyboard layout to the registry.
- Modify the keyboard layout file description accordingly.
CORE-16194
- Add the Colemak keyboard layout. It is not done yet. Some deadkey translations are still missing.
- Add missing strings for the German Extended (E1) keyboard layout.
CORE-4463
- Move BIOS-specific `EXTENDED_GEOMETRY` structure to pcdisk.c
- Zero out the transfer buffer for INT 13h, function 48h before
invocation. This ensures that any random data is removed and
that some broken BIOSes behave better.
- Use a more suitable type for the pointer to the transfer buffer,
so that we can use more human-manageable member names in TRACEs
instead of magic buffer offsets.
Which is also an addendum to commit b3f11cfb38 (r17484).
The Enhanced Disk Drive Specification tells us that if the (far) pointer
to the Device Parameter Table Extension is set to FFFF:FFFF, the pointer
is invalid.
However there are some BIOSes, incl UEFI ones when running in Legacy
mode (e.g. GIGABYTE UEFI DualBIOS), that set this pointer to 0000:0000
instead, which is also an invalid value.
- Disable "Log Off" from the Start Menu and the C-A-D Security dialog;
- Disable the "Lock Workstation" and "Change Password" buttons in the
Security dialog.
These are only "UI"-usability features to prevent the user from
logging off when running the LiveCD. (Logging off from the SYSTEM
account, and changing its password, don't make much sense.)
CORE-11397