Import backup from 2003-08-12
This commit is contained in:
parent
1c3e9ebdc4
commit
4e4baeba63
@ -7,11 +7,18 @@
|
|||||||
%define BOOT_STAGE2_SEG 0x0B00 ;right after KERNEL_SEG
|
%define BOOT_STAGE2_SEG 0x0B00 ;right after KERNEL_SEG
|
||||||
%define BOOT_STAGE2_ADD 0xB000 ;address of stage2 to jump to, org at
|
%define BOOT_STAGE2_ADD 0xB000 ;address of stage2 to jump to, org at
|
||||||
%define BOOT_KERNEL_ADD 0x100000 ;final pmode kernel destination - physical
|
%define BOOT_KERNEL_ADD 0x100000 ;final pmode kernel destination - physical
|
||||||
|
%define BOOT_RD_ADD 0x200000 ;2mb for ram disk
|
||||||
|
|
||||||
%define BOOT_DATA_SEG 0x9000 ;data gathered by stage2 loader goes here
|
%define BOOT_DATA_SEG 0x9000 ;data gathered by stage2 loader goes here
|
||||||
|
|
||||||
%define BOOT_HASRD 0x0000 ;1
|
%define BOOT_HASRD 0x0000 ;1
|
||||||
|
%define BOOT_VESA 0x0002 ;2 - 0 for console, otherwise VESA mode
|
||||||
|
%define BOOT_VESA_OEM 0x0004 ;258 - null-terminated OEM identification string
|
||||||
|
%define BOOT_VESA_VBE 0x0106 ;512 - copy of VESA VBEInfoBlock
|
||||||
|
%define BOOT_ 0x0306
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
%define BOOT_RD_ADD 0x200000 ;2mb for ram disk
|
|
||||||
%define BOOT_DRIVE 0x7C24 ;1 - boot drive
|
%define BOOT_DRIVE 0x7C24 ;1 - boot drive
|
||||||
|
|
||||||
|
|
||||||
|
54
gdt.inc
Normal file
54
gdt.inc
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
|
||||||
|
|
||||||
|
gdtr:
|
||||||
|
dw gdt_end-gdt-1
|
||||||
|
dd GDT
|
||||||
|
gdt:
|
||||||
|
dd 0
|
||||||
|
dd 0
|
||||||
|
KERNEL_CODE equ $-gdt
|
||||||
|
dw 0xffff ;limit 15:0
|
||||||
|
dw 0x0000 ;base 15:0
|
||||||
|
db 0x00 ;base 23:16
|
||||||
|
db 0x9A ;access ([P][DPL][1][Executable][Direction/Conforming][Writable/Readable][A])
|
||||||
|
db 0xCF ;flags ([G][D/B][0][0]) / limit 19:16
|
||||||
|
db 0x00 ;base 31:24
|
||||||
|
KERNEL_DATA equ $-gdt
|
||||||
|
dw 0xffff ;limit 15:0
|
||||||
|
dw 0x0000 ;base 15:0
|
||||||
|
db 0x00 ;base 23:16
|
||||||
|
db 0x92 ;access ([P][DPL][1][Executable][Direction/Conforming][Writable/Readable][A])
|
||||||
|
db 0xCF ;flags ([G][D/B][0][0]) / limit 19:16
|
||||||
|
db 0x00 ;base 31:24
|
||||||
|
VESA_CODE equ $-gdt
|
||||||
|
dw 0xffff ;limit 15:0
|
||||||
|
dw 0x0000 ;base 15:0
|
||||||
|
db 0x00 ;base 23:16
|
||||||
|
db 0x9A ;access ([P][DPL][1][Executable][Direction/Conforming][Writable/Readable][A])
|
||||||
|
db 0x40 ;flags ([G][D/B][0][0]) / limit 19:16
|
||||||
|
db 0x00 ;base 31:24
|
||||||
|
VESA_DATA equ $-gdt
|
||||||
|
dw 0xffff ;limit 15:0
|
||||||
|
dw 0x0000 ;base 15:0
|
||||||
|
db 0x00 ;base 23:16
|
||||||
|
db 0x92 ;access ([P][DPL][1][Executable][Direction/Conforming][Writable/Readable][A])
|
||||||
|
db 0x40 ;flags ([G][D/B][0][0]) / limit 19:16
|
||||||
|
db 0x00 ;base 31:24
|
||||||
|
USER_CODE equ $-gdt
|
||||||
|
dw 0xffff ;limit 15:0
|
||||||
|
dw 0x0000 ;base 15:0
|
||||||
|
db 0x00 ;base 23:16
|
||||||
|
db 0xFA ;access ([P][DPL][1][Executable][Direction/Conforming][Writable/Readable][A])
|
||||||
|
db 0xCF ;flags ([G][D/B][0][0]) / limit 19:16
|
||||||
|
db 0x00 ;base 31:24
|
||||||
|
USER_DATA equ $-gdt
|
||||||
|
dw 0xffff ;limit 15:0
|
||||||
|
dw 0x0000 ;base 15:0
|
||||||
|
db 0x00 ;base 23:16
|
||||||
|
db 0xF2 ;access ([P][DPL][1][Executable][Direction/Conforming][Writable/Readable][A])
|
||||||
|
db 0xCF ;flags ([G][D/B][0][0]) / limit 19:16
|
||||||
|
db 0x00 ;base 31:24
|
||||||
|
gdt_end:
|
||||||
|
|
||||||
|
|
||||||
|
|
85
idt.inc
Normal file
85
idt.inc
Normal file
@ -0,0 +1,85 @@
|
|||||||
|
|
||||||
|
idt_entry:
|
||||||
|
dw 0 ;offset 15:0
|
||||||
|
dw KERNEL_CODE ;base 15:0
|
||||||
|
db 0 ;0
|
||||||
|
db 0x8E ;[P][DPL][0][TYPE]
|
||||||
|
dw 0 ;offset 31:16
|
||||||
|
|
||||||
|
%macro isr_label 1
|
||||||
|
isr_%1:
|
||||||
|
mov eax, %1
|
||||||
|
jmp isr_main
|
||||||
|
%endmacro
|
||||||
|
|
||||||
|
isr_label 0
|
||||||
|
isr_label 1
|
||||||
|
isr_label 2
|
||||||
|
isr_label 3
|
||||||
|
isr_label 4
|
||||||
|
isr_label 5
|
||||||
|
isr_label 6
|
||||||
|
isr_label 7
|
||||||
|
isr_label 8
|
||||||
|
isr_label 9
|
||||||
|
isr_label 10
|
||||||
|
isr_label 11
|
||||||
|
isr_label 12
|
||||||
|
isr_label 13
|
||||||
|
isr_label 14
|
||||||
|
isr_label 15
|
||||||
|
isr_label 16
|
||||||
|
isr_label 17
|
||||||
|
isr_label 18
|
||||||
|
isr_label 19
|
||||||
|
isr_label 20
|
||||||
|
isr_label 21
|
||||||
|
isr_label 22
|
||||||
|
isr_label 23
|
||||||
|
isr_label 24
|
||||||
|
isr_label 25
|
||||||
|
isr_label 26
|
||||||
|
isr_label 27
|
||||||
|
isr_label 28
|
||||||
|
isr_label 29
|
||||||
|
isr_label 30
|
||||||
|
isr_label 31
|
||||||
|
isr_label 32
|
||||||
|
isr_label 33
|
||||||
|
isr_label 34
|
||||||
|
isr_label 35
|
||||||
|
isr_label 36
|
||||||
|
isr_label 37
|
||||||
|
isr_label 38
|
||||||
|
isr_label 39
|
||||||
|
isr_label 40
|
||||||
|
isr_label 41
|
||||||
|
isr_label 42
|
||||||
|
isr_label 43
|
||||||
|
isr_label 44
|
||||||
|
isr_label 45
|
||||||
|
isr_label 46
|
||||||
|
isr_label 47
|
||||||
|
isr_label 48
|
||||||
|
isr_label 49
|
||||||
|
|
||||||
|
isr_main:
|
||||||
|
pusha
|
||||||
|
push ds
|
||||||
|
push es
|
||||||
|
|
||||||
|
push eax
|
||||||
|
|
||||||
|
call _isr
|
||||||
|
|
||||||
|
pop eax
|
||||||
|
|
||||||
|
pop es
|
||||||
|
pop ds
|
||||||
|
popa
|
||||||
|
|
||||||
|
iret
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
16
kernel.asm
16
kernel.asm
@ -1,10 +1,15 @@
|
|||||||
|
|
||||||
%include "bootdef.inc"
|
%include "bootdef.inc"
|
||||||
|
|
||||||
|
%define GDT 0x140000
|
||||||
|
%define IDT 0x150000
|
||||||
|
|
||||||
|
[global start]
|
||||||
|
extern _isr
|
||||||
|
|
||||||
bits 32
|
bits 32
|
||||||
|
|
||||||
org BOOT_KERNEL_ADD
|
start:
|
||||||
|
|
||||||
call cls
|
call cls
|
||||||
|
|
||||||
mov esi, msg
|
mov esi, msg
|
||||||
@ -44,3 +49,10 @@ cls_loop:
|
|||||||
msg:
|
msg:
|
||||||
db "This kernel is located at 0x100000! Aren't you glad?", 0
|
db "This kernel is located at 0x100000! Aren't you glad?", 0
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
%include "gdt.inc"
|
||||||
|
%include "idt.inc"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
22
link.ld
Normal file
22
link.ld
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
OUTPUT_FORMAT("binary")
|
||||||
|
ENTRY(start)
|
||||||
|
SECTIONS
|
||||||
|
{
|
||||||
|
.text 0x100000 : {
|
||||||
|
code = .; _code = .; __code = .;
|
||||||
|
*(.text)
|
||||||
|
. = ALIGN(4096);
|
||||||
|
}
|
||||||
|
.data : {
|
||||||
|
data = .; _data = .; __data = .;
|
||||||
|
*(.data)
|
||||||
|
. = ALIGN(4096);
|
||||||
|
}
|
||||||
|
.bss :
|
||||||
|
{
|
||||||
|
bss = .; _bss = .; __bss = .;
|
||||||
|
*(.bss)
|
||||||
|
. = ALIGN(4096);
|
||||||
|
}
|
||||||
|
end = .; _end = .; __end = .;
|
||||||
|
}
|
180
stage2.asm
180
stage2.asm
@ -148,7 +148,7 @@ got_rd:
|
|||||||
mov cx, 80
|
mov cx, 80
|
||||||
mov edi, 0xb8000+160*4
|
mov edi, 0xb8000+160*4
|
||||||
filler_loop:
|
filler_loop:
|
||||||
mov word [ds:edi], 0x0400+176
|
mov word [ds:edi], 0x0400+177
|
||||||
inc edi
|
inc edi
|
||||||
inc edi
|
inc edi
|
||||||
loop filler_loop
|
loop filler_loop
|
||||||
@ -190,18 +190,108 @@ copydisk_loop:
|
|||||||
pop cx
|
pop cx
|
||||||
loop read_cylinder
|
loop read_cylinder
|
||||||
|
|
||||||
no_rd:
|
;------------------------------------------------------
|
||||||
|
no_rd: ;done with ram disk, on to vesa info...
|
||||||
xor ax, ax
|
xor ax, ax
|
||||||
|
mov gs, ax
|
||||||
mov ds, ax
|
mov ds, ax
|
||||||
mov ax, 0xb800
|
mov ax, 0xb800
|
||||||
mov es, ax
|
mov es, ax
|
||||||
|
mov di, 160
|
||||||
|
mov cx, 2000-80
|
||||||
|
mov ax, 0x0700
|
||||||
|
cls_vesa_loop:
|
||||||
|
stosw
|
||||||
|
loop cls_vesa_loop
|
||||||
mov si, txt_vesa
|
mov si, txt_vesa
|
||||||
mov di, 160*5
|
mov di, 160*1
|
||||||
mov ah, 7
|
mov ah, 7
|
||||||
call puts
|
call puts
|
||||||
|
|
||||||
|
push di
|
||||||
|
mov ax, 0x0100
|
||||||
|
mov es, ax
|
||||||
|
xor di, di
|
||||||
|
mov dword [es:si], "2EBV"
|
||||||
|
mov ax, 0x4F00
|
||||||
|
|
||||||
|
int 0x10
|
||||||
|
pop di
|
||||||
|
cmp ax, 0x004F
|
||||||
|
jz vesa_good
|
||||||
|
mov si, txt_novesa
|
||||||
|
mov ax, 0xb800
|
||||||
|
mov es, ax
|
||||||
|
mov ah, 7
|
||||||
|
call puts
|
||||||
|
mov ax, BOOT_DATA_SEG
|
||||||
|
mov ds, ax
|
||||||
|
mov word [ds:BOOT_VESA], 0
|
||||||
|
jmp vesa_done
|
||||||
|
vesa_good:
|
||||||
|
mov ax, 0xb800
|
||||||
|
mov es, ax
|
||||||
|
mov ax, 0x0100
|
||||||
|
mov ds, ax
|
||||||
|
xor si, si
|
||||||
|
mov bx, [4]
|
||||||
|
mov al, bh
|
||||||
|
call puthex
|
||||||
|
mov al, '.'
|
||||||
|
stosb
|
||||||
|
mov al, 7
|
||||||
|
stosb
|
||||||
|
mov al, bl
|
||||||
|
call puthex
|
||||||
|
cmp bh, 2
|
||||||
|
jge vesa_good2
|
||||||
xor ax, ax
|
xor ax, ax
|
||||||
|
mov ds, ax
|
||||||
|
mov si, txt_vesaold
|
||||||
|
mov ah, 7
|
||||||
|
call puts
|
||||||
|
mov ax, BOOT_DATA_SEG
|
||||||
|
mov ds, ax
|
||||||
|
mov word [ds:BOOT_VESA], 0
|
||||||
|
jmp vesa_done
|
||||||
|
vesa_good2:
|
||||||
|
mov ebx, [6] ;something like 0x00000E60
|
||||||
|
mov edx, [14]
|
||||||
|
mov si, bx
|
||||||
|
shr ebx, 16
|
||||||
|
mov ds, bx ;ds:si points to null-terminated OEM identification string
|
||||||
|
mov ah, 2
|
||||||
|
push si
|
||||||
|
call puts
|
||||||
|
pop si
|
||||||
|
mov ax, BOOT_DATA_SEG
|
||||||
|
mov es, ax
|
||||||
|
mov di, BOOT_VESA_OEM
|
||||||
|
vesa_copyoem:
|
||||||
|
lodsb
|
||||||
|
stosb
|
||||||
|
or al, al
|
||||||
|
jnz vesa_copyoem
|
||||||
|
mov ax, 0x0100
|
||||||
|
mov ds, ax
|
||||||
|
xor si, si
|
||||||
|
mov di, BOOT_VESA_VBE
|
||||||
|
mov cx, 512
|
||||||
|
vesa_copyvbe:
|
||||||
|
lodsb
|
||||||
|
stosb
|
||||||
|
loop vesa_copyvbe
|
||||||
|
|
||||||
|
mov si, dx
|
||||||
|
shr edx, 16
|
||||||
|
mov ds, dx ;ds:si points to video mode list
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
;------------------------------------------------------
|
||||||
|
vesa_done:
|
||||||
|
|
||||||
|
xor ax, ax ;wait for keypress...
|
||||||
int 0x16
|
int 0x16
|
||||||
|
|
||||||
jmp go_pm
|
jmp go_pm
|
||||||
@ -217,11 +307,95 @@ puts:
|
|||||||
puts_done:
|
puts_done:
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
checkvesa:
|
||||||
|
cmp ax, 0x004F
|
||||||
|
jnz vesaerror
|
||||||
|
ret
|
||||||
|
vesaerror:
|
||||||
|
mov ax, 0xb800
|
||||||
|
mov es, ax
|
||||||
|
xor ax, ax
|
||||||
|
mov ds, ax
|
||||||
|
mov si, txt_vesaerror
|
||||||
|
mov di, 160*24
|
||||||
|
mov ah, 4
|
||||||
|
call puts
|
||||||
|
cli
|
||||||
|
hlt
|
||||||
|
|
||||||
|
;------------------------------------------------------
|
||||||
|
puthex:
|
||||||
|
;es:di points to video memory
|
||||||
|
;al holds hex value
|
||||||
|
|
||||||
|
push ax
|
||||||
|
mov ah, al
|
||||||
|
shr ax, 4
|
||||||
|
and al, 0x0F
|
||||||
|
add al, '0'
|
||||||
|
cmp al, '9'
|
||||||
|
jle puthex_goon1
|
||||||
|
add al, 'A'-'9'-1
|
||||||
|
puthex_goon1:
|
||||||
|
cmp al, '0'
|
||||||
|
jz puthex_skipzero
|
||||||
|
stosb
|
||||||
|
mov al, 7
|
||||||
|
stosb
|
||||||
|
puthex_skipzero:
|
||||||
|
pop ax
|
||||||
|
push ax
|
||||||
|
and al, 0x0F
|
||||||
|
add al, '0'
|
||||||
|
cmp al, '9'
|
||||||
|
jle puthex_goon2
|
||||||
|
add al, 'A'-'9'-1
|
||||||
|
puthex_goon2:
|
||||||
|
stosb
|
||||||
|
mov al, 7
|
||||||
|
stosb
|
||||||
|
pop ax
|
||||||
|
ret
|
||||||
|
|
||||||
|
puthex2:
|
||||||
|
;es:di points to video memory, always displays 2 characters!
|
||||||
|
;al holds hex value
|
||||||
|
|
||||||
|
push ax
|
||||||
|
mov ah, al
|
||||||
|
shr ax, 4
|
||||||
|
and al, 0x0F
|
||||||
|
add al, '0'
|
||||||
|
cmp al, '9'
|
||||||
|
jle puthex2_goon1
|
||||||
|
add al, 'A'-'9'-1
|
||||||
|
puthex2_goon1:
|
||||||
|
stosb
|
||||||
|
mov al, 7
|
||||||
|
stosb
|
||||||
|
pop ax
|
||||||
|
push ax
|
||||||
|
and al, 0x0F
|
||||||
|
add al, '0'
|
||||||
|
cmp al, '9'
|
||||||
|
jle puthex2_goon2
|
||||||
|
add al, 'A'-'9'-1
|
||||||
|
puthex2_goon2:
|
||||||
|
stosb
|
||||||
|
mov al, 7
|
||||||
|
stosb
|
||||||
|
pop ax
|
||||||
|
ret
|
||||||
|
|
||||||
|
;------------------------------------------------------
|
||||||
txt_welcome: db " Welcome to HOS v", VERSION, "! ", 0
|
txt_welcome: db " Welcome to HOS v", VERSION, "! ", 0
|
||||||
txt_rd1: db "1. Do not load an initial ram disk", 0
|
txt_rd1: db "1. Do not load an initial ram disk", 0
|
||||||
txt_rd2: db "2. Load initial ram disk from floppy", 0
|
txt_rd2: db "2. Load initial ram disk from floppy", 0
|
||||||
txt_input: db "Enter your selection: ", 0
|
txt_input: db "Enter your selection: ", 0
|
||||||
txt_vesa: db "VESA version: ", 0
|
txt_vesa: db "VESA version: ", 0
|
||||||
|
txt_vesaerror: db "VESA function call error! Halting system!", 0
|
||||||
|
txt_novesa: db "VESA not found. Starting in console mode...", 0
|
||||||
|
txt_vesaold: db "VESA version 2.0 required. Starting in console mode...", 0
|
||||||
|
|
||||||
;------------------------------------------------------
|
;------------------------------------------------------
|
||||||
getCHSfromCluster:
|
getCHSfromCluster:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user