Change kernel blob format to be option rom compatible
This commit is contained in:
parent
3b3fa349d4
commit
d8fe1b211c
4 changed files with 152 additions and 52 deletions
155
kernel/main.asm
155
kernel/main.asm
|
@ -1,36 +1,119 @@
|
|||
; assumptions about the starting envionment
|
||||
cpu 8086
|
||||
org 0x0000
|
||||
|
||||
_startup:
|
||||
mov ax, cs
|
||||
mov ss, ax
|
||||
mov sp, 0x0000
|
||||
; <0x0010 is BIOS segment when relocated to HMA
|
||||
; so we need a nop sled
|
||||
times (0x10 - ($-$$)) nop
|
||||
main:
|
||||
call intr_init
|
||||
|
||||
int 3
|
||||
|
||||
mov ah, 0x01
|
||||
int 0x21
|
||||
mov dl, al
|
||||
mov ah, 0x02
|
||||
int 0x21
|
||||
|
||||
sti
|
||||
.halt:
|
||||
hlt
|
||||
jmp .halt
|
||||
|
||||
%include "intr.asm"
|
||||
%include "debug.asm"
|
||||
%include "kprintf.asm"
|
||||
%include "dosapi.asm"
|
||||
|
||||
_reloc_end:
|
||||
|
||||
align 16
|
||||
heap:
|
||||
cpu 8086
|
||||
org 0x0000
|
||||
db 0x55, 0xAA, 0x00
|
||||
jmp optrom_init
|
||||
|
||||
times (0x1A - ($-$$)) db 0
|
||||
dw pnp
|
||||
|
||||
align 16
|
||||
pnp:
|
||||
db "$PnP"
|
||||
db 1 ; version 1
|
||||
db 2 ; 2 * 16 length
|
||||
dw 0 ; offset of next header
|
||||
db 0
|
||||
db 0 ; checksum (filled by fix-rom)
|
||||
dd 0 ; device identifier
|
||||
dw .vendor ; manufacturer string
|
||||
dw .product ; product name string
|
||||
db 0,0,0 ; device type string
|
||||
db 0x20 ; device indicator, bit for "read cacheable" set
|
||||
dw 0 ; boot connection vector
|
||||
dw 0 ; boot disconnect vector
|
||||
dw start ; bootstrap entry point
|
||||
dw 0 ; reserved
|
||||
dw 0
|
||||
.vendor:
|
||||
db "Nero", 0
|
||||
.product:
|
||||
db "2B", 0
|
||||
|
||||
align 16
|
||||
optrom_init:
|
||||
push di
|
||||
push es
|
||||
xor ax, ax
|
||||
mov es, ax
|
||||
mov di, 0x0060 ; vector (0x18 * 4 bytes)
|
||||
mov ax, start
|
||||
stosw
|
||||
mov ax, cs
|
||||
stosw
|
||||
pop es
|
||||
pop di
|
||||
retf
|
||||
|
||||
start:
|
||||
call intr_init
|
||||
|
||||
sti
|
||||
|
||||
mov si, 0x0000
|
||||
mov ds, si
|
||||
|
||||
.loop:
|
||||
push bx
|
||||
mov dx, 0x0000
|
||||
mov ah, 0x02
|
||||
mov bx, 0x0000
|
||||
int 0x10
|
||||
pop bx
|
||||
|
||||
call dump
|
||||
|
||||
mov ah, 0x01
|
||||
int 0x21
|
||||
|
||||
cmp al, 0x30
|
||||
jne .notup
|
||||
sub bx, 0x0100
|
||||
.notup:
|
||||
cmp al, 0x31
|
||||
jne .notdown
|
||||
add bx, 0x0100
|
||||
.notdown:
|
||||
jmp .loop
|
||||
|
||||
.halt:
|
||||
hlt
|
||||
jmp .halt
|
||||
|
||||
dump:
|
||||
mov si, bx
|
||||
mov cx, 0x10
|
||||
.nextline:
|
||||
mov ax, si
|
||||
call kprint16
|
||||
|
||||
mov al, 0x3A
|
||||
call kputc
|
||||
mov al, 0x20
|
||||
call kputc
|
||||
|
||||
push cx
|
||||
mov cx, 0x0020
|
||||
.bytes:
|
||||
lodsb
|
||||
call kprint8
|
||||
loop .bytes
|
||||
pop cx
|
||||
|
||||
mov al,0x20
|
||||
call kputc
|
||||
mov al,0x0A
|
||||
call kputc
|
||||
mov al,0x0D
|
||||
call kputc
|
||||
|
||||
loop .nextline
|
||||
ret
|
||||
|
||||
%include "intr.asm"
|
||||
%include "debug.asm"
|
||||
%include "kprintf.asm"
|
||||
%include "dosapi.asm"
|
||||
|
||||
_reloc_end:
|
||||
|
||||
align 512
|
Loading…
Add table
Add a link
Reference in a new issue