Implement int 29h: Fast console output
This commit is contained in:
parent
c5088789f9
commit
40065266f3
@ -6,7 +6,11 @@
|
||||
|
||||
banner: db "rdos", 0xA, 0xD, '$'
|
||||
|
||||
; Alias for Int 21h,AH=0h
|
||||
int20h: xor ah, ah
|
||||
; allow extenders to get away with only hooking 21h
|
||||
jmp [cs:(0x21 * 4)]
|
||||
|
||||
int21h: ; inside of kernel, direction always goes up
|
||||
; the iret will restore it to the user value later
|
||||
cld
|
||||
@ -30,7 +34,7 @@ int21h: ; inside of kernel, direction always goes up
|
||||
pop bp
|
||||
pop ax
|
||||
; iret frame: IP CS FLAGS
|
||||
iret
|
||||
iret: iret
|
||||
|
||||
; Subfunction ptr
|
||||
; this is used as extra register in int21h
|
||||
@ -72,12 +76,10 @@ putc: push ax
|
||||
; DOS 1+ 9h - WRITE STRING TO STANDARD OUTPUT
|
||||
; IN ds:dx '$'-terminated string
|
||||
puts: push si
|
||||
mov ah, 0x0E
|
||||
xor bx, bx
|
||||
.loop: lodsb
|
||||
cmp al, '$'
|
||||
je .end
|
||||
int 0x10
|
||||
int 0x29
|
||||
jmp .loop
|
||||
.end: pop si
|
||||
ret
|
||||
@ -202,11 +204,19 @@ ldbpb: push ds
|
||||
pop ds
|
||||
ret
|
||||
|
||||
main: mov si, banner
|
||||
mov ah, 0x09
|
||||
int 0x21
|
||||
end: hlt
|
||||
jmp end
|
||||
; DOS 2+ - FAST CONSOLE OUTPUT
|
||||
; IN al character to print
|
||||
fputc: push ax
|
||||
push bx
|
||||
mov ah, 0x0E
|
||||
xor bx, bx
|
||||
int 0x10
|
||||
pop bx
|
||||
pop ax
|
||||
iret
|
||||
|
||||
main: hlt
|
||||
jmp main
|
||||
|
||||
init: cli
|
||||
xor ax, ax
|
||||
@ -220,14 +230,28 @@ init: cli
|
||||
mov cx, (init-$$)
|
||||
rep movsb
|
||||
|
||||
; Set boot drive as current drive
|
||||
call dnconv
|
||||
call select
|
||||
|
||||
; Set int 0x20 to 0x2F
|
||||
mov bx, ivects+0x7C00-$$
|
||||
mov cx, 0x10
|
||||
mov al, 0x20
|
||||
mov dx, int20h
|
||||
call setint
|
||||
mov al, 0x21
|
||||
mov dx, int21h
|
||||
.loop: mov dx, [bx]
|
||||
call setint
|
||||
inc al
|
||||
inc bx
|
||||
inc bx
|
||||
loop .loop
|
||||
|
||||
mov si, banner
|
||||
mov ah, 0x09
|
||||
int 0x21
|
||||
|
||||
jmp 0:main
|
||||
|
||||
ivects: dw int20h, int21h, iret, iret
|
||||
dw iret, iret, iret, iret
|
||||
dw iret, fputc, iret, iret
|
||||
dw iret, iret, iret, iret
|
||||
|
Loading…
Reference in New Issue
Block a user