Add 01h and 02h for DOSAPI
This commit is contained in:
parent
4b9d6da85c
commit
0094ee6b95
19
kernel/dosapi.asm
Normal file
19
kernel/dosapi.asm
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
|
||||||
|
isr_dosmain:
|
||||||
|
cmp ah, 0x01
|
||||||
|
je isr_getc_echo
|
||||||
|
cmp ah, 0x02
|
||||||
|
je isr_putc
|
||||||
|
iret
|
||||||
|
|
||||||
|
isr_getc_echo:
|
||||||
|
mov ah, 0x00
|
||||||
|
int 0x16
|
||||||
|
cmp al, 0x00
|
||||||
|
je isr_getc_echo
|
||||||
|
iret
|
||||||
|
|
||||||
|
isr_putc:
|
||||||
|
mov al, dl
|
||||||
|
call kputc
|
||||||
|
iret
|
@ -1,22 +1,39 @@
|
|||||||
; Data table for interrupts
|
; Data table for interrupts
|
||||||
; cs:word for service routine
|
; cs:word for service routine
|
||||||
intr_table:
|
intr_table0:
|
||||||
dw iret ; 0 Divide by Zero
|
dw iret ; 00 Divide by Zero
|
||||||
dw iret ; 1 Single Step
|
dw iret ; 01 Single Step
|
||||||
dw iret ; 2 Parity error routine (NMI)
|
dw iret ; 02 Parity error routine (NMI)
|
||||||
dw debug_reg_ir ; 3 Break
|
dw debug_reg_ir ; 03 Break
|
||||||
dw iret ; 4 Overflow
|
dw iret ; 04 Overflow
|
||||||
dw iret ; 5 Print Screen
|
dw iret ; 05 Print Screen
|
||||||
dw iret ; 6 Mouse button control
|
dw iret ; 06 Mouse button control
|
||||||
dw iret ; 7 Reserved
|
dw isr_dosmain ; 07 Reserved
|
||||||
dw irq0 ; 8 System Clock interrupt
|
dw irq0 ; 08 System Clock interrupt
|
||||||
dw irq1 ; 9 Keyboard interrupt
|
dw irq1 ; 09 Keyboard interrupt
|
||||||
dw irq2 ; 10 RTC interrupt
|
dw irq2 ; 0a RTC interrupt
|
||||||
dw irq3 ; 11 COMMS
|
dw irq3 ; 0b COMMS
|
||||||
dw irq4 ; 12 COMMS
|
dw irq4 ; 0c COMMS
|
||||||
dw irq5 ; 13 Hard Disk
|
dw irq5 ; 0d Hard Disk
|
||||||
dw irq6 ; 14 Floppy Disk interrupt routine
|
dw irq6 ; 0e Floppy Disk interrupt routine
|
||||||
dw irq7 ; 15 Printer interrupt
|
dw irq7 ; 0f Printer interrupt
|
||||||
|
intr_table2:
|
||||||
|
dw iret ; 20
|
||||||
|
dw isr_dosmain ; 21
|
||||||
|
dw iret ; 22
|
||||||
|
dw iret ; 23
|
||||||
|
dw iret ; 24
|
||||||
|
dw iret ; 25
|
||||||
|
dw iret ; 26
|
||||||
|
dw iret ; 27
|
||||||
|
dw iret ; 28
|
||||||
|
dw iret ; 29
|
||||||
|
dw iret ; 2a
|
||||||
|
dw iret ; 2b
|
||||||
|
dw iret ; 2c
|
||||||
|
dw iret ; 2d
|
||||||
|
dw iret ; 2e
|
||||||
|
dw iret ; 2f
|
||||||
|
|
||||||
; LSB is IRQ0, MSB is IRQ16
|
; LSB is IRQ0, MSB is IRQ16
|
||||||
; A IRQ will set their bit to 1, so userspace may poll it via wait_irq
|
; A IRQ will set their bit to 1, so userspace may poll it via wait_irq
|
||||||
@ -34,17 +51,26 @@ intr_init:
|
|||||||
mov di, 0x0100 ; write to offset of int 0x40 address
|
mov di, 0x0100 ; write to offset of int 0x40 address
|
||||||
mov cx, 0x0020 ; 0x10 vectors, segment:offset each
|
mov cx, 0x0020 ; 0x10 vectors, segment:offset each
|
||||||
repe movsw
|
repe movsw
|
||||||
; now setup our own handlers
|
; now setup our own handlers (0x0n)
|
||||||
mov ax, cs
|
mov ax, cs
|
||||||
mov ds, ax ; read from local segment
|
mov ds, ax ; read from local segment
|
||||||
mov si, intr_table ; read from intr_table
|
mov si, intr_table0 ; read from intr_table
|
||||||
mov di, 0x0000 ; write to start of IVT table
|
mov di, 0x0000 ; write to start of IVT table
|
||||||
mov cx, 0x0010 ; 0x10 vectors, one offset each
|
mov cx, 0x0010 ; 0x10 vectors, one offset each
|
||||||
.loop:
|
.loop0:
|
||||||
movsw ; read offset, write offset
|
movsw ; read offset; write offset
|
||||||
mov ax,cs
|
mov ax,cs
|
||||||
stosw ; write segment
|
stosw ; write segment
|
||||||
loop .loop
|
loop .loop0
|
||||||
|
; second vector block (0x2n)
|
||||||
|
mov si, intr_table2 ; read from intr_table
|
||||||
|
mov di, 0x0080 ; write to int 20h vector and above
|
||||||
|
mov cx, 0x0010 ; 0x10 vectors, one offset each
|
||||||
|
.loop2:
|
||||||
|
movsw ; read offset; write offset
|
||||||
|
mov ax,cs
|
||||||
|
stosw ; write segment
|
||||||
|
loop .loop2
|
||||||
pop es
|
pop es
|
||||||
pop ds
|
pop ds
|
||||||
ret
|
ret
|
||||||
@ -57,11 +83,6 @@ irq0:
|
|||||||
irq1:
|
irq1:
|
||||||
int 0x49
|
int 0x49
|
||||||
or byte [intr_flip], 0x02
|
or byte [intr_flip], 0x02
|
||||||
push ax
|
|
||||||
mov ax, [intr_flip]
|
|
||||||
call kprint8
|
|
||||||
mov word [intr_flip], 0x0000
|
|
||||||
pop ax
|
|
||||||
jmp irqret
|
jmp irqret
|
||||||
|
|
||||||
irq2:
|
irq2:
|
||||||
|
@ -14,15 +14,21 @@ main:
|
|||||||
|
|
||||||
int 3
|
int 3
|
||||||
|
|
||||||
|
mov ah, 0x01
|
||||||
|
int 0x21
|
||||||
|
mov dl, al
|
||||||
|
mov ah, 0x02
|
||||||
|
int 0x21
|
||||||
|
|
||||||
sti
|
sti
|
||||||
.halt:
|
.halt:
|
||||||
hlt
|
hlt
|
||||||
jmp .halt
|
jmp .halt
|
||||||
|
|
||||||
%include "heap.asm"
|
|
||||||
%include "intr.asm"
|
%include "intr.asm"
|
||||||
%include "debug.asm"
|
%include "debug.asm"
|
||||||
%include "kprintf.asm"
|
%include "kprintf.asm"
|
||||||
|
%include "dosapi.asm"
|
||||||
|
|
||||||
_reloc_end:
|
_reloc_end:
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user