Vom bootloader zum 16Bit Kernelteil
; Springe zu diesem Kernel
mov ax, 0x1000 ; Adresse des Programms
mov es, ax ; Segmentregister updaten
xor bx, bx ; bx auf 0 wegen ES:BX
; Jetzt die Anresse des Kernels in den Stack laden
push ax
mov ax, 0
push ax
retf ; und zum kernel springen
Anfang des 16Bit Kernelteils
[Bits 16]
;org 0x1000 ; Geht nicht (bochs startet neu)
jmp start
start:
mov ax, 0x1000 ; Segmentregister update
mov ds, ax
mov es, ax
;...
Ende des 16Bit Kernelteils
; Selector
mov ax, codesel
mov ds, ax
mov es, ax
mov fs, ax
mov gs, ax
mov ss, ax
mov esp, 0x1FFFFF ; Stack mit 2 MB
PM3:
jmp ende
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Ende ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
times 512-($-$$) db 0
ende:
Anfang des 32Bit Kernelteils (der 16Bit - Teil und der 32Bit - Teil sind mit MergeKernel.exe "verbunden"
[Bits 32]
jmp start ; Variablen überspringen
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Variablen ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
msg_REOS db 0x0C,'RedEagle Operating System',0
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Start ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
start:
Immer wenn ich irgendwas mit "org" mache restartet bochs (außer "org 0")