cpu 8086 org 0x0000 db 0x55, 0xAA optrom_length: db 0x00 jmp optrom_init ; reserved area times (0x1A - ($-$$)) db 0 dw pnp align 16 pnp: db "$PnP" .version: db 1 ; version 1 .length: db 2 ; 2 * 16 length dw 0 ; offset of next header db 0 .checksum: db 0 ; checksum (filled by fix-rom) dd 0 ; device identifier dw str_vendor ; manufacturer string dw str_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 str_vendor: db "Nero", 0 str_product: db "Nero DOS ", 60, 234, 62, 0 optrom_init: push cs pop es mov di, isr_debug mov ax, 0x1 call intr_register mov ax, 0x3 call intr_register mov di, start mov ax, 0x18 call intr_register retf announce: push ds push cs push cs pop ds mov ax, str_product push ax call printf db "%S (CS=%Xh)", 0x0A, 0x0D, 0x00 add sp, 4 pop ds ret start: xor ax, ax mov ds, ax mov es, ax mov ss, ax mov sp, 0x800 mov di, sp call announce call drvtab_create push cs pop es mov di, isr_dos_main mov ax, 0x21 call intr_register .loop: mov ah, 0x01 int 0x21 jmp .loop cli .halt: hlt jmp .halt isr_dos_main: cmp ah, 0x01 je isr_getc cmp ah, 0x02 je isr_putc isr_error: push bp mov bp, sp ; set carry flag or WORD [SS:BP+6], 1 pop bp isr_return: iret %include "intr.asm" %include "drvtab.asm" %include "chario.asm" %include "printf.inc" %include "print.asm" %include "debug.asm" align 512