1 Commits

Author SHA1 Message Date
534ad63ae8 Move font data to a source file 2025-10-05 10:56:00 +02:00
76 changed files with 4107 additions and 4531 deletions

View File

@@ -60,10 +60,11 @@ file(RELATIVE_PATH _PATH_PREFIX ${EXECTOS_BINARY_DIR} ${EXECTOS_SOURCE_DIR})
add_compiler_flags(-D__RELFILE__="&__FILE__[__FILE__[0] == '.' ? sizeof \\\"${_PATH_PREFIX}\\\" - 1 : sizeof XTOS_SOURCE_DIR]")
# Set the virtual disk image size (in MiB)
set_disk_image_size(48)
set_disk_image_size(32)
# Build all subprojects
add_subdirectory(boot)
add_subdirectory(bootdata)
add_subdirectory(drivers)
add_subdirectory(sdk)
add_subdirectory(xtldr)
add_subdirectory(xtoskrnl)

View File

@@ -9,7 +9,8 @@ porting drivers, fixing bugs, writing tests, creating documentation, or helping
love the help.
## Wish List
If you are looking for a way to contribute, but you are not sure where to start, check our list of
If you are looking for a way to contribute, but you are not sure where to start, check our [IDEAS](IDEAS.md) and
[KNOWN ISSUES](KNOWN_ISSUES.md) pages for suggestions. We try to keep them up to date. You can also check a list of
[open issues](https://git.codingworkshop.eu.org/xt-sys/exectos/issues). If you find interesting task and you are serious
about tackling one, feel free to contact us. We will be able to provide a more detailed information and suggestions
towards getting started.

9
IDEAS.md Normal file
View File

@@ -0,0 +1,9 @@
## ExectOS Ideas
This is a list of ideas that migh but not must be realized.
### XTOSKRNL
- [ ] Implement mechanism for detecting CPU features and checking hardware requirements. If CPU does not meet
requirements, it should cause a kernel panic before any non-supported instruction is being used.
- [ ] Finish framebuffer and terminal implementation. Initialization code is already prepared as well as routines for
clearing the screen and drawing single points. Terminal should be instantiable (should be able to create many
terminals and switch between them) and work on top of FB. It should define ANSI colors and scrollback buffer.

6
KNOWN_ISSUES.md Normal file
View File

@@ -0,0 +1,6 @@
## ExectOS Known Issues
This is a list of well known bugs that exists in all master branch builds.
### XTLDR
- [ ] EFI Runtime Services are not mapped properly into higher half. They are mapped itself, but all pointers inside
that structure point to some physical address that is unavailable after paging is enabled.

View File

@@ -58,17 +58,15 @@ design, it requires a modern EFI enabled hardware. It is not possible currently
# Source structure
| Directory | Description |
|------------------|--------------------------------------------------------------|
| boot/bootdata | default configuration and data needed to boot XTOS |
| boot/bootsect | boot sector code (MBR & VBR) initializing the boot process |
| boot/xtldr | XTOS boot loader source code |
|-------------|----------------------------------------------------------|
| bootdata | default configuration and data needed to boot XTOS |
| drivers | XT native drivers source code |
| sdk/cmake | host toolchain configuration and build-related functions |
| sdk/firmware | firmware enabling XTOS to boot on virtual machines |
| sdk/cmake | Host toolchain configuration and build-related functions |
| sdk/xtdk | XT Software Development Kit headers |
| services | integral subsystems services source code |
| subsystems | environment subsystems source code |
| xtoskrnl | XTOS kernel source code |
| xtldr | XTOS boot loader source code |
# Build
XTOS can only be built using [XTchain](https://git.codingworkshop.eu.org/xt-sys/xtchain), a dedicated toolchain designed

View File

@@ -1,3 +0,0 @@
add_subdirectory(bootdata)
add_subdirectory(bootsect)
add_subdirectory(xtldr)

View File

@@ -1,6 +0,0 @@
# XT Boot Sector
PROJECT(BOOTSECT)
# Compile boot sectors
compile_bootsector(mbrboot ${BOOTSECT_SOURCE_DIR}/mbrboot.S 0x7C00 Start)
compile_bootsector(espboot ${BOOTSECT_SOURCE_DIR}/espboot.S 0x7C00 Start)

View File

@@ -1,276 +0,0 @@
/**
* PROJECT: ExectOS
* COPYRIGHT: See COPYING.md in the top level directory
* FILE: boot/bootsect/espboot.S
* DESCRIPTION: XT Boot Loader ESP boot code (FAT32)
* DEVELOPERS: Aiken Harris <harraiken91@gmail.com>
*/
.text
.code16
.global Start
Start:
/* Jump to the real start to omit the BPB (BIOS Parameter Block) */
jmp RealStart
nop
/* BIOS Parameter Block */
OsName:
.ascii "XTOS "
OsVersion:
.ascii "1.0"
BytesPerSector:
.word 512
SectorsPerCluster:
.byte 2
ReservedSectors:
.word 8
FatCopies:
.byte 1
RootDirEntries:
.word 1024
TotalSectors:
.word 0
MediaType:
.byte 0xF8
SectorsPerFat:
.word 0
SectorsPerTrack:
.word 17
NumberOfHeads:
.word 0
HiddenSectors:
.long 0
TotalBigSectors:
.long 0x200000
BigSectorsPerFat:
.long 0x1FE0
ExtendedFlags:
.word 0
FsVersion:
.word 0
RootDirStartCluster:
.long 0
FSInfoSector:
.word 0
BackupBootSector:
.word 6
Reserved:
.fill 12, 1, 0
DriveNumber:
.byte 0x80
CurrentHead:
.byte 0
Signature:
.byte 0x29
SerialNumber:
.long 0
VolumeLabel:
.ascii "NO NAME "
FileSystem:
.ascii "FAT32 "
RealStart:
/* Set segments and stack */
cli
cld
xorw %ax, %ax
movw %ax, %ds
movw %ax, %es
movw %ax, %ss
movw $0x7C00, %bp
leaw -16(%bp), %sp
sti
/* Get drive number */
cmpb $0xFF, DriveNumber - Start(%bp)
jne GetDriveParameters
movb %dl, DriveNumber - Start(%bp)
GetDriveParameters:
/* Get drive parameters from the BIOS */
movb DriveNumber - Start(%bp), %dl
movb $0x08, %ah
movb $0x00, %al
int $0x13
jnc GetDriveSize
movw $0xFFFF, %cx
movb %cl, %dh
GetDriveSize:
/* Get drive size from the BIOS */
movzbl %dh, %eax
incw %ax
movzbl %cl, %edx
andb $0x3F, %dl
mulw %dx
xchgb %cl, %ch
shrb $0x06, %ch
incw %cx
movzwl %cx, %ecx
mull %ecx
movl %eax, %edi
VerifyBiosParameterBlock:
/* Verify the FAT32 BPB */
cmpw $0x00, SectorsPerFat - Start(%bp)
jne FsError
cmpw $0x00, FsVersion - Start(%bp)
ja FsError
ReadExtraCode:
/* Read second VBR sector with extra boot code */
movl HiddenSectors - Start(%bp), %eax
addl $0x02, %eax
movw $0x01, %cx
xorw %bx, %bx
movw %bx, %es
movw $0x7E00, %bx
call ReadSectors
jmp StartSectors
ReadSectors:
/* Check for extended BIOS functions and use it only if available */
pushw %es
pushal
movb $0x41, %ah
movw $0x55AA, %bx
movb DriveNumber - Start(%bp), %dl
int $0x13
jc ReadCHS
cmpw $0xAA55, %bx
jne ReadCHS
testb $0x01, %cl
jz ReadCHS
/* Verify drive size and determine whether to use CHS or LBA */
cmpl %edi, %eax
jnb ReadLBA
ReadCHS:
/* Read sectors using CHS */
pushw %cx
pushal
xorl %edx, %edx
movzwl SectorsPerTrack - Start(%bp), %ecx
divl %ecx
incb %dl
movb %dl, %cl
movl %eax, %edx
shrl $0x10, %edx
divw NumberOfHeads - Start(%bp)
movb %dl, %dh
movb DriveNumber - Start(%bp), %dl
movb %al, %ch
rorb $0x01, %ah
rorb $0x01, %ah
orb %ah, %cl
movw $0x0201, %ax
int $0x13
popal
popw %cx
jc DiskError
incl %eax
movw %es, %dx
addw $0x20, %dx
movw %dx, %es
loop ReadCHS
popw %es
ret
ReadLBA:
/* Prepare DAP packet and read sectors using LBA */
popal
pushw %cx
pushal
pushw $0x00
pushw $0x00
pushl %eax
pushw %es
pushw %bx
pushw %cx
pushw $0x10
movw %sp, %si
movb DriveNumber - Start(%bp), %dl
movb $0x42, %ah
int $0x13
jc DiskError
addw $0x10, %sp
popal
popw %si
pushw %bx
movzwl %si, %ebx
addl %ebx, %eax
shll $0x05, %ebx
movw %es, %dx
addw %bx, %dx
movw %dx, %es
popw %bx
subw %si, %cx
jnz ReadLBA
popw %es
ret
DiskError:
/* Display disk error message and reboot */
movw $msgDiskError, %si
call Print
jmp Reboot
FsError:
/* Display FS error message and reboot */
movw $msgFsError, %si
call Print
jmp Reboot
Print:
/* Simple routine to print messages */
lodsb
orb %al, %al
jz DonePrint
movb $0x0E, %ah
movw $0x07, %bx
int $0x10
jmp Print
DonePrint:
retw
Reboot:
/* Display a message, wait for a key press and reboot */
movw $msgAnyKey, %si
call Print
xorw %ax, %ax
int $0x16
int $0x19
msgAnyKey:
.ascii "Press any key to restart\r\n"
msgDiskError:
.ascii "Disk error\r\n"
msgFsError:
.ascii "File system error\r\n"
/* Fill the rest of the VBR with zeros and add VBR signature at the end */
.fill (510 - (. - Start)), 1, 0
.word 0xAA55
StartSectors:
/* Print message */
movw $msgUnavailable, %si
call Print
/* Wait for key press and reboot */
xorw %ax, %ax
int $0x16
int $0x19
msgUnavailable:
.ascii "XTLDR requires EFI-based system!\r\nPress any key to restart\r\n"
/* Fill the rest of the extra VBR with zeros */
.fill (1024 - (. - Start)), 1, 0

View File

@@ -1,153 +0,0 @@
/**
* PROJECT: ExectOS
* COPYRIGHT: See COPYING.md in the top level directory
* FILE: boot/bootsect/amd64/mbrboot.S
* DESCRIPTION: XT Boot Loader MBR boot code
* DEVELOPERS: Rafal Kupiec <belliash@codingworkshop.eu.org>
*/
.text
.code16
.global Start
Start:
/* Set segments and stack */
cli
cld
xorw %ax, %ax
movw %ax, %ds
movw %ax, %es
movw %ax, %ss
movw $0x7C00, %bp
leaw -16(%bp), %sp
sti
/* Relocate MBR to 1FE0:7C00 */
movw $0x1FE0, %ax
movw %ax, %es
movw %bp, %si
movw %bp, %di
movw $256, %cx
rep movsw
/* Jump to the relocated MBR code */
jmp $0x1FE0, $RealStart
RealStart:
/* Set segments */
movw %ax, %ds
movw %ax, %es
movw %ax, %ss
/* Print welcome message */
leaw msgXtosBoot, %si
call Print
/* Get BIOS boot drive and partition table offset */
lea 0x1BE(%bp), %si
movb %dl, .BootDrive
xorw %cx, %cx
FindActivePartition:
/* Look for active partition */
movb (%si), %al
cmpb $0x80, %al
je PartitionFound
addw $16, %si
incw %cx
cmpw $4, %cx
jne FindActivePartition
jmp PartitionNotFound
PartitionFound:
/* Save LBA start */
movl 8(%si), %eax
movl %eax, .LbaStart
/* Prepare Disk Address Packet (DAP) */
lea .Dap, %si
movb $0x10, 0(%si)
movb $0x00, 1(%si)
movw $1, 2(%si)
movw $0x7C00, 4(%si)
movw $0x0000, 6(%si)
movl .LbaStart, %eax
movl %eax, 8(%si)
/* Read Volume Boot Record (VBR) */
movb $0x42, %ah
movb .BootDrive, %dl
int $0x13
jc VbrReadFail
/* Verify VBR signature */
cmpw $0xAA55, (0x7C00 + 0x01FE)
jne InvalidSignature
/* Jump to the VBR code */
jmp $0x0000, $0x7C00
InvalidSignature:
/* Invalid signature error */
leaw msgInvalidSignature, %si
call Print
jmp HaltSystem
PartitionNotFound:
/* Active partition not found error */
leaw msgPartitionNotFound, %si
call Print
jmp HaltSystem
VbrReadFail:
/* VBR read failed error */
leaw msgVbrReadFail, %si
call Print
jmp HaltSystem
HaltSystem:
/* Disable interrupts and stop the CPU */
cli
hlt
jmp HaltSystem
Print:
/* Simple routine to print messages */
lodsb
orb %al, %al
jz DonePrint
movb $0x0E, %ah
movw $0x07, %bx
int $0x10
jmp Print
DonePrint:
retw
.BootDrive:
/* Storage for the boot drive number */
.byte 0
.Dap:
/* Storage for the Disk Address Packet (DAP) */
.fill 16, 1, 0
.LbaStart:
/* Storage for the LBA start */
.long 0
msgInvalidSignature:
.asciz "Invalid partition signature!"
msgPartitionNotFound:
.asciz "Bootable partition not found!"
msgVbrReadFail:
.asciz "VBR read failed!"
msgXtosBoot:
.asciz "Starting XTOS boot loader...\r\n"
/* Fill the rest of the MBR with zeros and add MBR signature at the end */
.fill (510 - (. - Start)), 1, 0
.word 0xAA55

View File

@@ -4,41 +4,48 @@
# DESCRIPTION: Project configuration script for preparing the build environment
# DEVELOPERS: Aiken Harris <harraiken91@gmail.com>
# Check XTchain
if (-not $env:XTCVER) {
Write-Error "XTChain not detected or corrupted!"
Write-Host "XTChain not detected or corrupted!"
exit 1
}
# Set target architecture defaulting to amd64
$ARCH = if ($env:TARGET) { $env:TARGET } else { "amd64" }
# Set target build type defaulting to Debug
$env:BUILD_TYPE = if ($env:BUILD_TYPE -in @("Debug", "Release")) { $env:BUILD_TYPE } else { "Debug" }
# Set variables
$EXECTOS_SOURCE_DIR = $PSScriptRoot
$EXECTOS_BINARY_DIR = Join-Path $EXECTOS_SOURCE_DIR "build-$ARCH-$($env:BUILD_TYPE.ToLower())"
# Create build directory
if (-not (Test-Path $EXECTOS_BINARY_DIR)) {
Write-Host "Creating build directory: $EXECTOS_BINARY_DIR"
New-Item -ItemType Directory -Path $EXECTOS_BINARY_DIR -Force | Out-Null
# Set target architecture
if ($env:TARGET) {
$ARCH = $env:TARGET
} else {
$ARCH = "amd64"
}
Set-Location $EXECTOS_BINARY_DIR
# Set target build type
if (-not $env:BUILD_TYPE) {
$env:BUILD_TYPE = "DEBUG"
}
# Set variables
$EXECTOS_SOURCE_DIR = (Get-Location).Path
$EXECTOS_BINARY_DIR = "build-$($ARCH)-$($env:BUILD_TYPE.ToLower())"
# Create directories if needed
if ($EXECTOS_SOURCE_DIR -eq (Get-Location).Path) {
Write-Host "Creating directories in $EXECTOS_BINARY_DIR"
New-Item -ItemType Directory -Path $EXECTOS_BINARY_DIR -Force | Out-Null
Set-Location -Path $EXECTOS_BINARY_DIR
}
# Delete old cache
Remove-Item "CMakeCache.txt", "host-tools/CMakeCache.txt" -ErrorAction SilentlyContinue
Remove-Item -Path "CMakeCache.txt" -ErrorAction SilentlyContinue
Remove-Item -Path "host-tools/CMakeCache.txt" -ErrorAction SilentlyContinue
# Configure project using CMake
& cmake -G Ninja "-DARCH:STRING=$ARCH" "-DBUILD_TYPE:STRING=$($env:BUILD_TYPE)" $EXECTOS_SOURCE_DIR
& cmake -G Ninja -DARCH:STRING=$($ARCH) -DBUILD_TYPE:STRING=$($env:BUILD_TYPE) $EXECTOS_SOURCE_DIR
# Check if configuration succeeded
if ($LASTEXITCODE -ne 0) {
Write-Error "Configure script failed."
Write-Host "Configure script failed."
exit 1
} else {
"$($ARCH)" | Out-File -Encoding ASCII -NoNewline build.arch
Write-Host "Configure script completed. Enter '$EXECTOS_BINARY_DIR' directory and execute 'xbuild' to build ExectOS."
}
$ARCH | Out-File -Encoding ASCII -NoNewline "build.arch"
Write-Host "Configure completed. Run 'xbuild' to build ExectOS."

View File

@@ -8,79 +8,41 @@ endif()
# This target creates a disk image
add_custom_target(diskimg
DEPENDS install
COMMAND diskimg -c ${EXECTOS_BINARY_DIR}/output/binaries -f 32 -o ${EXECTOS_BINARY_DIR}/output/disk.img -s ${PROJECT_DISK_IMAGE_SIZE}
-m ${EXECTOS_BINARY_DIR}/boot/bootsect/mbrboot.bin -v ${EXECTOS_BINARY_DIR}/boot/bootsect/espboot.bin
COMMAND sh -c "dd if=/dev/zero of=${EXECTOS_BINARY_DIR}/output/disk.img bs=512 count=${PROJECT_DISK_IMAGE_BLOCKS} 2>/dev/null 1>/dev/null"
COMMAND parted ${EXECTOS_BINARY_DIR}/output/disk.img -s -a minimal mklabel gpt
COMMAND parted ${EXECTOS_BINARY_DIR}/output/disk.img -s -a minimal mkpart EFI FAT32 2048s ${PROJECT_PART_IMAGE_BLOCKS}s
COMMAND parted ${EXECTOS_BINARY_DIR}/output/disk.img -s -a minimal toggle 1 boot
COMMAND sh -c "dd if=/dev/zero of=${EXECTOS_BINARY_DIR}/output/part.img bs=512 count=${PROJECT_PART_IMAGE_BLOCKS} 2>/dev/null 1>/dev/null"
COMMAND mformat -i ${EXECTOS_BINARY_DIR}/output/part.img -h32 -t32 -n64 -L32
COMMAND sh -c "mcopy -s -i ${EXECTOS_BINARY_DIR}/output/part.img ${EXECTOS_BINARY_DIR}/output/binaries/* ::"
COMMAND sh -c "dd if=${EXECTOS_BINARY_DIR}/output/part.img of=${EXECTOS_BINARY_DIR}/output/disk.img bs=512 count=${PROJECT_PART_IMAGE_BLOCKS} seek=2048 conv=notrunc 2>/dev/null 1>/dev/null"
COMMAND rm ${EXECTOS_BINARY_DIR}/output/part.img
VERBATIM)
find_program(BOCHS_EMULATOR bochs)
if(BOCHS_EMULATOR)
# This target starts up a BOCHS+BIOS virtual machine
# This target starts up a BOCHS+OVMF virtual machine
add_custom_target(bochsvm
DEPENDS diskimg
COMMAND bochs -f ../sdk/firmware/bochsrc_${ARCH}.cfg -q -unlock
VERBATIM USES_TERMINAL)
endif()
find_program(QEMU_EMULATOR ${QEMU_COMMAND})
if(QEMU_EMULATOR)
if(CMAKE_HOST_LINUX)
# This target starts up a QEMU+OVMF virtual machine using KVM accelerator
add_custom_target(testefikvm
add_custom_target(testkvm
DEPENDS install
COMMAND ${QEMU_COMMAND} -name "ExectOS-${ARCH}-EFI-KVM" -machine type=q35,kernel_irqchip=on,accel=kvm,mem-merge=off,vmport=off -enable-kvm -cpu host,-hypervisor,+topoext
COMMAND ${QEMU_COMMAND} -name "ExectOS-${ARCH}-KVM" -machine type=q35,kernel_irqchip=on,accel=kvm,mem-merge=off,vmport=off -enable-kvm -cpu host,-hypervisor,+topoext
-smp 2,sockets=1,cores=1,threads=2 -m 4G -overcommit mem-lock=off -rtc clock=host,base=localtime,driftfix=none
-bios ${EXECTOS_SOURCE_DIR}/sdk/firmware/ovmf_${ARCH}.fd
-drive file=${EXECTOS_SOURCE_DIR}/sdk/firmware/ovmf_code_${ARCH}.fd,if=pflash,format=raw,unit=0,readonly=on
-drive file=${EXECTOS_SOURCE_DIR}/sdk/firmware/ovmf_vars_${ARCH}.fd,if=pflash,format=raw,unit=1
-hda fat:rw:${EXECTOS_BINARY_DIR}/output/binaries
-boot menu=on -d int -M smm=off -no-reboot -no-shutdown -serial stdio
VERBATIM USES_TERMINAL)
elseif(CMAKE_HOST_WIN32)
# This target starts up a QEMU+OVMF virtual machine using WHPX accelerator
add_custom_target(testefiwhpx
DEPENDS install
COMMAND ${QEMU_COMMAND} -name "ExectOS-${ARCH}-EFI-WHPX" -machine type=q35,kernel_irqchip=off,accel=whpx,mem-merge=off,vmport=off
-m 4G -overcommit mem-lock=off -rtc clock=host,base=localtime,driftfix=none
-bios ${EXECTOS_SOURCE_DIR}/sdk/firmware/ovmf_${ARCH}.fd
-hda fat:rw:${EXECTOS_BINARY_DIR}/output/binaries
-boot menu=on -d int -M smm=off -no-reboot -no-shutdown -serial stdio
VERBATIM USES_TERMINAL)
endif()
# This target starts up a QEMU+OVMF virtual machine using TCG accelerator
add_custom_target(testefitcg
DEPENDS install
COMMAND ${QEMU_COMMAND} -name "ExectOS-${ARCH}-EFI-TCG" -machine type=q35,accel=tcg -cpu max,-hypervisor
-smp 2,sockets=1,cores=1,threads=2 -m 4G -overcommit mem-lock=off -rtc clock=host,base=localtime,driftfix=none
-bios ${EXECTOS_SOURCE_DIR}/sdk/firmware/ovmf_${ARCH}.fd
-hda fat:rw:${EXECTOS_BINARY_DIR}/output/binaries
-boot menu=on -d int -no-reboot -no-shutdown -serial stdio
VERBATIM USES_TERMINAL)
if(CMAKE_HOST_LINUX)
# This target starts up a QEMU+SEABIOS virtual machine using KVM accelerator
add_custom_target(testkvm
DEPENDS diskimg
COMMAND ${QEMU_COMMAND} -name "ExectOS-${ARCH}-BIOS-KVM" -machine type=q35,kernel_irqchip=on,accel=kvm,mem-merge=off,vmport=off -enable-kvm -cpu host,-hypervisor,+topoext
-smp 2,sockets=1,cores=1,threads=2 -m 4G -overcommit mem-lock=off -rtc clock=host,base=localtime,driftfix=none
-hda ${EXECTOS_BINARY_DIR}/output/disk.img
-boot menu=on -d int -no-reboot -no-shutdown -serial stdio
VERBATIM USES_TERMINAL)
elseif(CMAKE_HOST_WIN32)
# This target starts up a QEMU+SEABIOS virtual machine using WHPX accelerator
add_custom_target(testwhpx
DEPENDS diskimg
COMMAND ${QEMU_COMMAND} -name "ExectOS-${ARCH}-BIOS-WHPX" -machine type=q35,kernel_irqchip=off,accel=whpx,mem-merge=off,vmport=off
-m 4G -overcommit mem-lock=off -rtc clock=host,base=localtime,driftfix=none
-hda ${EXECTOS_BINARY_DIR}/output/disk.img
-boot menu=on -d int -no-reboot -no-shutdown -serial stdio
VERBATIM USES_TERMINAL)
endif()
# This target starts up a QEMU+SEABIOS virtual machine using TCG accelerator
add_custom_target(testtcg
DEPENDS diskimg
COMMAND ${QEMU_COMMAND} -name "ExectOS-${ARCH}-BIOS-TCG" -machine type=q35,accel=tcg -cpu max,-hypervisor
DEPENDS install
COMMAND ${QEMU_COMMAND} -name "ExectOS-${ARCH}-TCG" -machine type=q35,accel=tcg -cpu max,-hypervisor
-smp 2,sockets=1,cores=1,threads=2 -m 4G -overcommit mem-lock=off -rtc clock=host,base=localtime,driftfix=none
-hda ${EXECTOS_BINARY_DIR}/output/disk.img
-boot menu=on -d int -no-reboot -no-shutdown -serial stdio
-drive file=${EXECTOS_SOURCE_DIR}/sdk/firmware/ovmf_code_${ARCH}.fd,if=pflash,format=raw,unit=0,readonly=on
-drive file=${EXECTOS_SOURCE_DIR}/sdk/firmware/ovmf_vars_${ARCH}.fd,if=pflash,format=raw,unit=1
-hda fat:rw:${EXECTOS_BINARY_DIR}/output/binaries
-boot menu=on -d int -M smm=off -no-reboot -no-shutdown -serial stdio
VERBATIM USES_TERMINAL)
endif()

View File

@@ -69,7 +69,6 @@ function(compile_bootsector NAME SOURCE BASEADDR ENTRYPOINT)
COMMAND ${CMAKE_ASM_COMPILER}
/nologo
--target=i386-none-elf
-I${CMAKE_CURRENT_SOURCE_DIR}
/Fo${CMAKE_CURRENT_BINARY_DIR}/${OBJECT_NAME}
-c -- ${SOURCE}
COMMAND ${CMAKE_ASM_LINKER}
@@ -88,13 +87,18 @@ function(compile_bootsector NAME SOURCE BASEADDR ENTRYPOINT)
)
endfunction()
# This function sets the the qemu disk image size (in MiB)
function(set_disk_image_size SIZE)
MATH(EXPR DISK_BLOCKS ${SIZE}*1024*1024/512)
MATH(EXPR PART_BLOCKS ${DISK_BLOCKS}-2048)
set(PROJECT_DISK_IMAGE_SIZE ${SIZE} CACHE INTERNAL "PROJECT_DISK_IMAGE_SIZE")
set(PROJECT_DISK_IMAGE_BLOCKS ${DISK_BLOCKS} CACHE INTERNAL "PROJECT_DISK_IMAGE_BLOCKS")
set(PROJECT_PART_IMAGE_BLOCKS ${PART_BLOCKS} CACHE INTERNAL "PROJECT_PART_IMAGE_BLOCKS")
# This function sets a property for specified module
function(set_module_property MODULE PROPERTY FLAGS)
if(NOT ${ARGC} EQUAL 3)
message(FATAL_ERROR "Invalid number of arguments passwd to add_module_property() function")
endif()
get_target_property(VAL ${MODULE} ${PROPERTY})
if(VAL)
set(VAL "${VAL} ${FLAGS}")
else()
set(VAL "${FLAGS}")
endif()
set_property(TARGET ${MODULE} PROPERTY ${PROPERTY} ${VAL})
endfunction()
# This function installs specified directory recursively under destination directory
@@ -113,20 +117,6 @@ function(set_install_target TARGET DESTINATION)
install(TARGETS ${TARGET} DESTINATION ${EXECTOS_BINARY_DIR}/output/binaries/${DESTINATION})
endfunction()
# This function sets a property for specified module
function(set_module_property MODULE PROPERTY FLAGS)
if(NOT ${ARGC} EQUAL 3)
message(FATAL_ERROR "Invalid number of arguments passwd to add_module_property() function")
endif()
get_target_property(VAL ${MODULE} ${PROPERTY})
if(VAL)
set(VAL "${VAL} ${FLAGS}")
else()
set(VAL "${FLAGS}")
endif()
set_property(TARGET ${MODULE} PROPERTY ${PROPERTY} ${VAL})
endfunction()
function(set_sdk_target FILENAME DESTINATION)
install(DIRECTORY ${FILENAME} DESTINATION ${EXECTOS_BINARY_DIR}/output/sdk/${DESTINATION})
endfunction()
@@ -140,3 +130,11 @@ function(set_specfile SPECFILE EXPORTNAME)
add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${FILENAME}.def ${CMAKE_CURRENT_BINARY_DIR}/${FILENAME}.c
COMMAND ${CMAKE_SPEC_COMPILER} -a=${ARCH} -n=${EXPORTNAME} -d=${CMAKE_CURRENT_BINARY_DIR}/${FILENAME}.def -s=${CMAKE_CURRENT_BINARY_DIR}/${FILENAME}.c ${CMAKE_CURRENT_SOURCE_DIR}/${SPECFILE})
endfunction()
# This function sets the the qemu disk image size (in MiB)
function(set_disk_image_size SIZE)
MATH(EXPR DISK_BLOCKS ${SIZE}*1024*1024/512)
MATH(EXPR PART_BLOCKS ${DISK_BLOCKS}-2048)
set(PROJECT_DISK_IMAGE_BLOCKS ${DISK_BLOCKS} CACHE INTERNAL "PROJECT_DISK_IMAGE_BLOCKS")
set(PROJECT_PART_IMAGE_BLOCKS ${PART_BLOCKS} CACHE INTERNAL "PROJECT_PART_IMAGE_BLOCKS")
endfunction()

View File

@@ -3,9 +3,9 @@ plugin_ctrl: usb_xhci=false, serial=true, e1000=false, extfpuirq=true, parallel=
config_interface: textconfig
display_library: x
memory: host=64, guest=64
romimage: file="../sdk/firmware/rombios.bin", address=0x00000000, options=none
romimage: file="../sdk/firmware/ovmf_pure_amd64.fd", address=0x00000000, options=none
vgaromimage: file="../sdk/firmware/vgabios.bin"
boot: disk
boot: floppy
floppy_bootsig_check: disabled=0
floppya: type=1_44
# no floppyb
@@ -27,7 +27,11 @@ optramimage3: file=none
optramimage4: file=none
pci: enabled=1, chipset=i440fx, slot1=cirrus, slot2=none, slot3=none, slot4=none, slot5=none
vga: extension=cirrus, update_freq=5, realtime=1, ddc=builtin
cpu: count=1:1:1, ips=400000000, quantum=16, model=corei7_sandy_bridge_2600k, reset_on_triple_fault=0, cpuid_limit_winnt=0, ignore_bad_msrs=1, mwait_is_nop=0
cpu: count=1:1:1, ips=400000000, quantum=16, model=bx_generic, reset_on_triple_fault=0, cpuid_limit_winnt=0, ignore_bad_msrs=1, mwait_is_nop=0
cpuid: level=6, stepping=3, model=3, family=6, vendor_string="GenuineIntel", brand_string=" Intel(R) Pentium(R) 4 CPU "
cpuid: mmx=true, apic=xapic, simd=sse4_2, sse4a=false, misaligned_sse=false, sep=true
cpuid: movbe=false, adx=false, aes=false, sha=false, xsave=false, xsaveopt=false, x86_64=true
cpuid: 1g_pages=false, pcid=false, fsgsbase=false, smep=false, smap=false, mwait=true
print_timestamps: enabled=0
port_e9_hack: enabled=0
private_colormap: enabled=0

View File

@@ -3,9 +3,9 @@ plugin_ctrl: usb_xhci=false, serial=true, e1000=false, extfpuirq=true, parallel=
config_interface: textconfig
display_library: x
memory: host=64, guest=64
romimage: file="../sdk/firmware/rombios.bin", address=0x00000000, options=none
romimage: file="../sdk/firmware/ovmf_pure_i686.fd", address=0x00000000, options=none
vgaromimage: file="../sdk/firmware/vgabios.bin"
boot: disk
boot: floppy
floppy_bootsig_check: disabled=0
floppya: type=1_44
# no floppyb
@@ -27,7 +27,11 @@ optramimage3: file=none
optramimage4: file=none
pci: enabled=1, chipset=i440fx, slot1=cirrus, slot2=none, slot3=none, slot4=none, slot5=none
vga: extension=cirrus, update_freq=5, realtime=1, ddc=builtin
cpu: count=1:1:1, ips=400000000, quantum=16, model=corei7_sandy_bridge_2600k, reset_on_triple_fault=0, cpuid_limit_winnt=0, ignore_bad_msrs=1, mwait_is_nop=0
cpu: count=1:1:1, ips=400000000, quantum=16, model=bx_generic, reset_on_triple_fault=0, cpuid_limit_winnt=0, ignore_bad_msrs=1, mwait_is_nop=0
cpuid: level=6, stepping=3, model=3, family=6, vendor_string="GenuineIntel", brand_string=" Intel(R) Pentium(R) 4 CPU "
cpuid: mmx=true, apic=xapic, simd=sse4_2, sse4a=false, misaligned_sse=false, sep=true
cpuid: movbe=false, adx=false, aes=false, sha=false, xsave=false, xsaveopt=false, x86_64=true
cpuid: 1g_pages=false, pcid=false, fsgsbase=false, smep=false, smap=false, mwait=true
print_timestamps: enabled=0
port_e9_hack: enabled=0
private_colormap: enabled=0

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load Diff

View File

@@ -622,7 +622,7 @@ Configuration::ParseConfigFile(IN CONST PCHAR RawConfig,
SectionName = InputData;
/* Find end of the section name */
while(*InputData != ']' && *InputData != '\0' && *InputData != '\r' && *InputData != '\n')
while(*InputData != ']' && *InputData != '\0' && *InputData != '\n')
{
/* Advance to the next character */
InputData++;
@@ -672,7 +672,7 @@ Configuration::ParseConfigFile(IN CONST PCHAR RawConfig,
Key = InputData;
/* Find end of the key */
while(*InputData != '=' && *InputData != '\0' && *InputData != '\r' && *InputData != '\n')
while(*InputData != '=' && *InputData != '\0' && *InputData != '\n')
{
/* Advance to the next character */
InputData++;
@@ -700,7 +700,7 @@ Configuration::ParseConfigFile(IN CONST PCHAR RawConfig,
Value = InputData;
/* Find end of the value */
while(*InputData != '\0' && *InputData != '\r' && *InputData != '\n')
while(*InputData != '\0' && *InputData != '\n')
{
/* Advance to the next character */
InputData++;

View File

@@ -414,6 +414,7 @@ Xtos::InitializeLoaderBlock(IN PXTBL_PAGE_MAPPING PageMap,
{
PKERNEL_INITIALIZATION_BLOCK LoaderBlock;
EFI_PHYSICAL_ADDRESS Address;
// PVOID RuntimeServices;
EFI_STATUS Status;
UINT BlockPages;
UINT ParametersSize;
@@ -444,10 +445,20 @@ Xtos::InitializeLoaderBlock(IN PXTBL_PAGE_MAPPING PageMap,
/* Set LoaderInformation block properties */
LoaderBlock->LoaderInformation.DbgPrint = (PVOID)XtLdrProtocol->Debug.Print;
/* Attempt to find virtual address of the EFI Runtime Services */
// Status = XtLdrProtocol->GetVirtualAddress(MemoryMappings, &EfiSystemTable->RuntimeServices->Hdr, &RuntimeServices);
// if(Status == STATUS_EFI_SUCCESS)
// {
/* Set FirmwareInformation block properties */
LoaderBlock->FirmwareInformation.FirmwareType = SystemFirmwareEfi;
// LoaderBlock->FirmwareInformation.EfiFirmware.EfiVersion = EfiSystemTable->Hdr.Revision;
LoaderBlock->FirmwareInformation.EfiFirmware.EfiVersion = 0; //EfiSystemTable->Hdr.Revision;
LoaderBlock->FirmwareInformation.EfiFirmware.EfiRuntimeServices = NULLPTR;
// }
// else
// {
// /* Set invalid firmware type to indicate that kernel cannot rely on FirmwareInformation block */
// LoaderBlock->FirmwareInformation.FirmwareType = SystemFirmwareInvalid;
// }
/* Copy parameters to kernel initialization block */
LoaderBlock->KernelParameters = (PWCHAR)((UINT_PTR)*VirtualAddress + sizeof(KERNEL_INITIALIZATION_BLOCK));
@@ -652,7 +663,7 @@ Xtos::RunBootSequence(IN PEFI_FILE_HANDLE BootDir,
/* Add kernel image memory mapping */
Status = XtLdrProtocol->Memory.MapVirtualMemory(&PageMap, ImageContext->VirtualAddress,
ImageContext->PhysicalAddress, ImageContext->ImagePages,
LoaderSystemCode);
LoaderExceptionBlock); // 0 is LoaderExceptionBlock?! Should be LoaderSystemCode?
if(Status != STATUS_EFI_SUCCESS)
{
return Status;

3960
xtoskrnl/hl/fbdevfont.cc Normal file

File diff suppressed because it is too large Load Diff