119 lines
1.5 KiB
NASM
119 lines
1.5 KiB
NASM
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 |