Skip to content

Commit b93f14b

Browse files
committed
update pe32 image loader
1 parent 3e167ab commit b93f14b

File tree

16 files changed

+528
-235
lines changed

16 files changed

+528
-235
lines changed

.github/workflows/build-windows-mingw.yml

Lines changed: 0 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -300,64 +300,3 @@ jobs:
300300
301301
Send-Line "QUIT :bye"
302302
$reader.Dispose(); $writer.Dispose(); $stream.Dispose(); $client.Close()
303-
304-
# -----------------------------------
305-
# für Verwendung von Linux-Tools ...
306-
# -----------------------------------
307-
BootImageUSB: # interne ID (ohne Leerzeichen)
308-
name: Boot-USB Image # Anzeige-Name (mit Leerzeichen ok)
309-
runs-on: ubuntu-latest
310-
needs: BootISO_CD
311-
steps:
312-
- name: Create USB image on Linux
313-
uses: actions/checkout@v4
314-
315-
- name: Setup Linux Environment
316-
run: |
317-
sudo apt-get update
318-
sudo apt-get install -y syslinux-utils xorriso
319-
320-
- name: Download bootcd.iso artifact
321-
uses: actions/download-artifact@v4
322-
with:
323-
name: ${{ env.ARTIFACT_CD_NAME }}
324-
path: ${{ env.ISO_PATH }}
325-
326-
- name: Convert CD to USB iso image BIOS
327-
run: |
328-
rm -rf ./build/bin/bootusb_bios.img
329-
ls -la ./
330-
echo "iso dir"
331-
ls -la ./build/bin
332-
echo "iso file"
333-
ls -la ./build/bin/bootcd.iso/
334-
cp ./build/bin/bootcd.iso/bootcd.iso ./build/bin/bootusb_bios.img
335-
ls -la ./build/bin
336-
isohybrid ./build/bin/bootusb_bios.img
337-
338-
- name: Convert CD to USB iso image UEFI
339-
run: |
340-
rm -rf build/bin/bootusb_uefi.img
341-
ls -la
342-
cp build/bin/bootcd.iso build/bin/bootusb_uefi.img
343-
ls -la build/bin
344-
isohybrid --uefi build/bin/bootusb_uefi.img
345-
346-
- name: Convert CD to USB iso image GPT + EFI
347-
run: |
348-
rm -rf build/bin/bootusb_gpt.img
349-
ls -la
350-
cp build/bin/bootcd.iso build/bin/bootusb_gpt.img
351-
ls -la build/bin
352-
isohybrid --uefi --gpt build/bin/bootusb_gpt.img
353-
354-
- name: Upload packed outputs
355-
uses: actions/upload-artifact@v4
356-
with:
357-
name: ${{ env.ARTIFACT_USB_NAME }}
358-
path: |
359-
build/bin/bootcd.iso
360-
build/bin/bootusb_bios.img
361-
build/bin/bootusb_uefi.img
362-
build/bin/bootusb_gpt.img
363-

Makefile

Lines changed: 34 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -168,10 +168,10 @@ OBJCOPY := $(GCC_DIR)/$(CROSS)objcopy$(EXT)
168168
# LICENSE in the root directory of this reporsitory.
169169
# -----------------------------------------------------------------------------
170170
#.PHONY: confirm
171-
all: confirm clean setup $(BIN_DIR)/bootcd.iso
171+
all: confirm clean setup shell32 $(BIN_DIR)/bootcd.iso
172172
setup:
173173
$(MKDIR) -p $(BUI_DIR) $(BUI_DIR)/bin $(BUI_DIR)/bin/content $(BUI_DIR)/hex
174-
$(MKDIR) -p $(BIN_DIR)/content/img
174+
$(MKDIR) -p $(BIN_DIR)/content/img $(BUI_DIR)/obj $(BUI_DIR)/obj/pe
175175
$(COPY) $(IMG_DIR)/*.bmp $(BIN_DIR)/content/img
176176
( cd $(SRC_DIR)/fntres ;\
177177
$(SRC_DIR)/fntres/build.sh ;\
@@ -240,6 +240,8 @@ CFLAGS_C := -m32 -O1 -ffreestanding -Wall -Wextra \
240240
-nostdlib \
241241
-nostartfiles \
242242
-fno-stack-protector \
243+
-fno-unwind-tables \
244+
-fno-asynchronous-unwind-tables \
243245
-fno-builtin \
244246
-fno-pic \
245247
-mno-ms-bitfields \
@@ -262,7 +264,7 @@ CFLAGS_CC:= -std=c++20 $(CFLAGS_C) \
262264
-fno-threadsafe-statics
263265

264266
LDFLAGS := -nostdlib -T $(COR_DIR)/kernel.ld -Map $(BIN_DIR)/kernel.map
265-
LDSHFLGS := -nostdlib -T $(U32_DIR)/shell32/shell.ld -Map $(BIN_DIR)/shell.map
267+
LDSHFLGS := -nostdlib -T $(U32_DIR)/shell32/shell32.ld -Map $(BIN_DIR)/shell32.map
266268

267269
ASMFLAGS := -f win32 -O2 -DDOS_MODE=32
268270
ISOGUI ?= 0
@@ -385,6 +387,7 @@ OBJS := $(OBJ_DIR)/coff/ckernel.o \
385387
$(OBJ_DIR)/coff/kheap.o \
386388
\
387389
$(OBJ_DIR)/coff/elf_loader.o \
390+
$(OBJ_DIR)/coff/pe_loader.o \
388391
\
389392
$(RUN_CPO) \
390393
$(OBJ_DIR)/coff/kstl.o \
@@ -396,7 +399,7 @@ OBJS := $(OBJ_DIR)/coff/ckernel.o \
396399
# *.o bject files for linkage stage of the shell ...
397400
# -----------------------------------------------------------------------------
398401
SHOBJS := \
399-
$(OBJ_DIR)/elf/shell.o
402+
$(OBJ_DIR)/coff/shell32.o
400403

401404
ISO_FILES := /boot2.bin /kernel.bin
402405
LBA := $(COR_DIR)/lba.inc
@@ -458,13 +461,15 @@ define MOD-LBA
458461
done \
459462
)
460463
@echo "VBE_INFO_ADDR equ 0x0A00" >> $(LBA)
464+
461465
$(AS) -DLBA_FILE=\"$(COR_DIR)/lba.inc\" -f bin $(COR_DIR)/boot/boot1.asm -o $(BIN_DIR)/content/boot1.bin
462466
$(AS) -DLBA_FILE=\"$(COR_DIR)/lba.inc\" -f bin $(COR_DIR)/boot/boot2.asm -o $(BIN_DIR)/content/boot2.bin
463-
@cd $(BIN_DIR)/content && \
467+
464468
$(XORRISO) -as mkisofs -o $(BIN_DIR)/bootcd.iso \
465-
-b boot1.bin \
466-
-no-emul-boot \
467-
-boot-load-size 4 .
469+
-b boot1.bin \
470+
-no-emul-boot \
471+
-boot-load-size 4 \
472+
-V "BOOTCD" $(BIN_DIR)/content
468473
cd ..
469474
@echo "DONE"
470475
endef
@@ -499,8 +504,15 @@ endef
499504
$(eval $(call compile_rule,$(COR_DIR)))
500505
$(eval $(call compile_rule,$(COR_DIR)/fs/iso9660))
501506
$(eval $(call compile_rule,$(COR_DIR)/video))
507+
508+
# -----------------------------------------------------------------------------
509+
# compile rule for program loaders ...
510+
# -----------------------------------------------------------------------------
502511
$(eval $(call compile_rule,$(COR_DIR)/loader/elf))
512+
$(eval $(call compile_rule,$(COR_DIR)/loader/pe))
513+
503514
$(eval $(call compile_rule,$(SRC_DIR)/fntres))
515+
$(eval $(call compile_rule,$(SRC_DIR)/user32/shell32))
504516

505517
DEPS := $(patsubst $(OBJ_DIR)/coff/%.o,$(DEP_DIR)/coff/%.d,$(OBJS))
506518
-include $(DEPS)
@@ -532,19 +544,13 @@ $(BIN)/INITRD.EXE: $(OBJ)/make_initrd.o
532544
$(GCC) -m32 -mconsole -O2 -Wall -Wextra -o $@ $<
533545
$(STRIP) $@
534546
# -----------------------------------------------------------------------------
535-
#
536-
# -----------------------------------------------------------------------------
537-
$(OBJ_DIR)/elf/%.o: $(SRC_DIR)/user32/shell32/%.c
538-
$(GCC) $(CFLAGS_C) -c $< -o $@
539-
$(OBJ_DIR)/elf/%.o: $(SRC_DIR)/user32/shell32/%.cc
540-
$(CPP) $(CFLAGS_CC) -c $< -o $@
541-
$(OBJ_DIR)/elf/shell.bin: \
542-
$(OBJ_DIR)/elf/user32.o \
543-
$(SRC_DIR)/user32/shell32/shell.ld
544-
$(LD) $(LDSHFLGS) -o $(OBJ_DIR)/elf/shell.bin $(SHOBJS)
545-
$(BIN)/shell.elf: $(OBJ_DIR)/elf/shell.bin
546-
$(OBJCOPY) -O binary $(OBJ)/shell.bin $(BIN)/shell.exe
547-
shell: $(BIN)/shell.elf
547+
# ELF shell32 application
548+
# -----------------------------------------------------------------------------
549+
$(BIN_DIR)/content/shell32.exe: $(SHOBJS) \
550+
$(SRC_DIR)/user32/shell32/shell32.ld
551+
$(GCC) -m32 -mconsole $(CFLAGS_C) -o $(BIN_DIR)/content/shell32.exe $(SHOBJS)
552+
shell32: $(BIN_DIR)/content/shell32.exe
553+
strip $(BIN_DIR)/content/shell32.exe
548554
echo "dodo"
549555

550556
$(BIN_DIR)/bootcd.iso: \
@@ -558,6 +564,7 @@ $(BIN_DIR)/bootcd.iso: \
558564
$(COR_DIR)/create_iso.sh ;\
559565
)
560566
$(MOD-LBA)
567+
$(shell32)
561568

562569
$(OBJ_DIR)/coff/int86_switch.bin: $(COR_DIR)/int86_switch.asm
563570
$(AS) -f bin -o $(OBJ_DIR)/coff/int86_switch.bin $(COR_DIR)/int86_switch.asm
@@ -583,9 +590,9 @@ clean:
583590
# optional/bonus: QEMU boot for bootCD.iso ...
584591
# -----------------------------------------------------------------------------
585592
bootcd:
586-
/mingw64/bin/qemu-system-x86_64.exe \
587-
-drive file=$(BIN_DIR)/bootcd.iso,if=none,media=cdrom,id=cdrom0 \
588-
-machine q35,i8042=on \
589-
-device ich9-ahci,id=ahci0 \
590-
-device ide-cd,drive=cdrom0,bus=ahci0.0 \
591-
-boot d -m 512M
593+
/mingw64/bin/qemu-system-i386.exe \
594+
-drive file=$(BIN_DIR)/bootcd.iso,if=none,media=cdrom,id=cdrom0 \
595+
-machine q35,i8042=on \
596+
-device ich9-ahci,id=ahci0 \
597+
-device ide-cd,drive=cdrom0,bus=ahci0.0 \
598+
-boot d -m 512M

0 commit comments

Comments
 (0)