1 Commits
master ... whpx

59 changed files with 42 additions and 193 deletions

View File

@@ -60,10 +60,12 @@ 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

@@ -57,18 +57,16 @@ ExectOS is in very early development stage, thus its requirements have been not
design, it requires a modern EFI enabled hardware. It is not possible currently to boot ExectOS on a legacy BIOS.
# 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 |
| 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/xtdk | XT Software Development Kit headers |
| services | integral subsystems services source code |
| subsystems | environment subsystems source code |
| xtoskrnl | XTOS kernel source code |
| Directory | Description |
|-------------|----------------------------------------------------------|
| 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/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 +1 @@
add_subdirectory(bootdata)
add_subdirectory(bootsect)
add_subdirectory(xtldr)

View File

@@ -84,145 +84,14 @@ RealStart:
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 */
popal
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
jc DiskError
popal
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
/* Print message */
movw $msgUnavailable, %si
call Print
jmp Reboot
FsError:
/* Display FS error message and reboot */
movw $msgFsError, %si
call Print
jmp Reboot
/* Wait for key press and reboot */
xorw %ax, %ax
int $0x16
int $0x19
Print:
/* Simple routine to print messages */
@@ -236,40 +105,9 @@ 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"
msgUnavailable:
.ascii "XTLDR requires EFI-based system!\r\nPress any key to restart\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

@@ -45,14 +45,27 @@ if(QEMU_EMULATOR)
-boot menu=on -d int -no-reboot -no-shutdown -serial stdio
VERBATIM USES_TERMINAL)
# 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:whpx",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)
if(WIN32)
# This target starts up a QEMU+OVMF virtual machine using WHPX accelerator on Windows
add_custom_target(testkvm
DEPENDS install
COMMAND ${QEMU_COMMAND} -name "ExectOS-${ARCH}-WHPX" -machine accel=whpx,kernel-irqchip=off
-bios ${EXECTOS_SOURCE_DIR}/sdk/firmware/OVMF-pure-efi.fd
-hda fat:rw:${EXECTOS_BINARY_DIR}/output/binaries
-no-reboot -no-shutdown -serial stdio
COMMENT "Using WHPX acceleration on Windows"
VERBATIM USES_TERMINAL)
else()
# 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:whpx",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)
endif()
# This target starts up a QEMU+SEABIOS virtual machine using TCG accelerator
add_custom_target(testtcg

Binary file not shown.