Before rewrite

This commit is contained in:
Morten Delenk 2016-07-30 12:11:04 +02:00
parent c6e06dad14
commit f7c4944566
No known key found for this signature in database
GPG key ID: 3F818D0F65DCB490
11 changed files with 67 additions and 24 deletions

View file

@ -1,7 +1,9 @@
all: mbrcode.bin core.img all: mbrcode.bin core.img
cat mbrcode.bin core.img > disk.img
mbrcode.bin: stage1.S mbrcode.bin: stage1.S
nasm -f bin -o $@ $^ nasm -f bin -o $@ $^
core.img: stage2/start.S core.img:
nasm -f bin -o $@ $^ $(MAKE) -C stage2
mv stage2/core.img .
.PHONY: core.img

BIN
boot/x86/core.img Executable file

Binary file not shown.

BIN
boot/x86/d.img Normal file

Binary file not shown.

BIN
boot/x86/disk.img Normal file

Binary file not shown.

BIN
boot/x86/mbrcode.bin Normal file

Binary file not shown.

12
boot/x86/stage2/Makefile Normal file
View file

@ -0,0 +1,12 @@
CC=/opt/bin/i686-mtgos-gcc
LD=/opt/bin/i686-mtgos-ld
CFLAGS16=-m16
ASFLAGS=-f elf
core.img: start.o init.o
$(LD) -T stage2.ld -o core.img start.o init.o
%.o: %.c
$(CC) $(CFLAGS16) -o $@ $^
%.o: %.S
nasm $(ASFLAGS) -o $@ $^

13
boot/x86/stage2/init.c Normal file
View file

@ -0,0 +1,13 @@
void putstring(short);
void main() {
putstring((short)"Hello, C!\r\n");
putstring((short)"Goodbye, C!\r\n");
putstring((short)"Hello, C!\r\n");
putstring((short)"Goodbye, C!\r\n");
putstring((short)"Hello, C!\r\n");
putstring((short)"Goodbye, C!\r\n");
putstring((short)"Hello, C!\r\n");
putstring((short)"Goodbye, C!\r\n");
putstring((short)"Hello, C!\r\n");
putstring((short)"Goodbye, C!\r\n");
}

BIN
boot/x86/stage2/init.o Normal file

Binary file not shown.

18
boot/x86/stage2/stage2.ld Normal file
View file

@ -0,0 +1,18 @@
OUTPUT_FORMAT(binary);
SECTIONS {
. = 0x0;
.init_text :{
*(.init_text);
}
.text : {
*(.text);
}
.data : {
*(.data);
*(.rodata);
}
.bss : {
*(.bss);
*(.end);
}
}

View file

@ -1,5 +1,5 @@
org 0x0000
bits 16 bits 16
section .init_text
start: start:
mov ax, 0x1000 ; update segment registers mov ax, 0x1000 ; update segment registers
mov ds, ax mov ds, ax
@ -13,27 +13,10 @@ start:
mov si, unrealstart mov si, unrealstart
call putstr call putstr
cli cli
push ds
lgdt [gdtinfo]
mov eax, cr0
or al, 1
mov cr0, eax ;Activate pmode
bits 32
jmp $+2 ;Pls don't crash 386/486
mov bx, 0x08
mov ds, bx
and al, 0xFE
mov cr0, eax ; Turn off pmode
bits 16
pop ds
sti
mov ax, 0
mov fs, ax
mov bx, 0x0f01
mov eax, 0x0B8000
mov word [fs:eax], bx
mov si, smiley mov si, smiley
call putstr call putstr
extern main
call main
jmp $ jmp $
bootmsg db "Loaded MTGosloader. Checking for any open A20 gates...",13,10,0 bootmsg db "Loaded MTGosloader. Checking for any open A20 gates...",13,10,0
a20open db "It seems that A20 is already activated... Weird",13,10,0 a20open db "It seems that A20 is already activated... Weird",13,10,0
@ -45,6 +28,19 @@ a20success db "Successfully opened the A20 gate!",13,10,0
unrealstart db "Trying to init unreal mode",13,10,0 unrealstart db "Trying to init unreal mode",13,10,0
smiley db "Do you see a smiley in the top-left corner?",13,10,0 smiley db "Do you see a smiley in the top-left corner?",13,10,0
bootdrv db 0 bootdrv db 0
global putstring
putstring:
push bp
mov bp, sp
push si
push bx
mov si, [bp+4]
call putstr
pop bx
pop si
pop bp
ret
putstr: putstr:
lodsb lodsb
or al, al or al, al
@ -193,6 +189,8 @@ gdtinfo:
dd gdt ;start of table dd gdt ;start of table
gdt dd 0,0 ; entry 0 is always unused gdt dd 0,0 ; entry 0 is always unused
flatcode db 0xff, 0xff, 0, 0, 0, 10011010b, 10001111b, 0
flatdesc db 0xff, 0xff, 0, 0, 0, 10010010b, 11001111b, 0 flatdesc db 0xff, 0xff, 0, 0, 0, 10010010b, 11001111b, 0
gdt_end: gdt_end:
times 5120-($-$$) hlt section .end
times 512 hlt

BIN
boot/x86/stage2/start.o Normal file

Binary file not shown.