69 lines
1.1 KiB
NASM
69 lines
1.1 KiB
NASM
|
cpu 8086
|
||
|
org 0x0000
|
||
|
|
||
|
db 0x55, 0xAA
|
||
|
db 0x00
|
||
|
jmp near init
|
||
|
|
||
|
times (0x18 - ($-$$)) db 0
|
||
|
dw 0
|
||
|
dw pnp
|
||
|
|
||
|
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 0 ; manufacturer string
|
||
|
dw name ; 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 boot ; bootstrap entry point
|
||
|
dw 0 ; reserved
|
||
|
|
||
|
; zero for setting sreg without using reg
|
||
|
zero: dw 0
|
||
|
|
||
|
name: db "rdos", 0
|
||
|
|
||
|
init: push ds
|
||
|
|
||
|
; DS := 0
|
||
|
mov ds, [cs:zero]
|
||
|
; set entry points vectors
|
||
|
mov word [0x19*4], boot
|
||
|
mov word [0x19*4+2], cs
|
||
|
|
||
|
pop ds
|
||
|
retf
|
||
|
|
||
|
; entry point on boot, preempting disks
|
||
|
; this also doubles as entry point for reboot
|
||
|
boot: xor ax, ax
|
||
|
mov ss, ax
|
||
|
mov sp, stack
|
||
|
|
||
|
int 3
|
||
|
|
||
|
hlt: hlt
|
||
|
jmp hlt
|
||
|
|
||
|
%include "kernel/intr.asm"
|
||
|
|
||
|
align 512
|
||
|
|
||
|
absolute 0x400
|
||
|
resb (0x501 - ($-$$))
|
||
|
|
||
|
; copy of the first 32 interrupt vectors
|
||
|
ivt2: resd 0x20
|
||
|
|
||
|
; 8kb stack
|
||
|
alignb 2
|
||
|
resw 0x2000
|
||
|
stack:
|