hos/rmmod/conio.inc

210 lines
2.4 KiB
PHP

; conio.inc
; real mode console input / output functions
; Author: Josh Holtrop
; Date: 01/04/05
; Modified: 01/04/05
con_getkey:
xor ax, ax
int 0x16
ret
con_move_cursor: ;con_move_cursor(word location)
push bp
mov bp, sp
push ax
mov ax, [bp + 4]
mov [cursor], ax
call con_write_cursor
pop ax
pop bp
ret
con_clear:
pusha
push es
push ds
mov ax, 0xB800
mov es, ax
mov di, 0
mov ax, 0x0720
mov cx, 2000
rep stosw
mov [cursor], word 0
call con_write_cursor
pop ds
pop es
popa
ret
con_putstring: ;con_putstring(char *str)
push bp
mov bp, sp
pusha
mov si, [bp + 4]
putstring_loop:
lodsb
or al, al
jz putstring_done
mov ah, 0x07
ccall con_putc, ax
jmp putstring_loop
putstring_done:
popa
pop bp
ret
con_putHex: ;con_putHex(word hexVal)
push bp
mov bp, sp
pusha
mov ax, [bp + 4]
mov cx, 12
mov dl, 0
con_putHex_loop:
push ax
shr ax, cl
and ax, 0xF
cmp ax, 0
jnz con_putHex_putc
cmp cx, 0
jz con_putHex_putc
cmp dl, 0
jz con_putHex_loop_done
con_putHex_putc:
add ax, '0'
cmp ax, '9'
jbe con_putHex_putc_goon
add ax, 'A'-'9'-1
con_putHex_putc_goon:
mov ah, 0x07
ccall con_putc, ax
mov dl, 1
con_putHex_loop_done:
pop ax
cmp cx, 0
jz con_putHex_done
sub cx, 4
jmp con_putHex_loop
con_putHex_done:
popa
pop bp
ret
con_putDec: ;con_putDec(word dec)
push bp
mov bp, sp
pusha
mov ax, [bp + 4]
mov cx, 10000
mov di, 0
con_putDec_loop:
xor dx, dx
div cx ;remainder in dx, quotient in ax
mov bx, ax
mov ax, dx ;new value is ax % mod
push ax
mov ax, bx
cmp ax, 0
jnz con_putDec_putc
cmp cx, 1
jz con_putDec_putc
cmp di, 0
jz con_putDec_loop_done
con_putDec_putc:
add ax, 0x0730
ccall con_putc, ax
mov di, 1
con_putDec_loop_done:
mov ax, cx
xor dx, dx
mov bx, 10
div bx
mov cx, ax
pop ax
cmp cx, 0
jnz con_putDec_loop
popa
pop bp
ret
con_putc: ;con_putc(char chr)
push bp
mov bp, sp
pusha
push es
mov ax, 0xB800
mov es, ax
mov di, [cursor]
mov ax, [bp + 4]
cmp al, 10
jz putc_return
stosw
jmp putc_update
putc_return:
mov ax, di
mov bl, 160
div bl ; quotient in al, remainder in ah
shr ax, 8
sub di, ax
add di, 160
putc_update:
mov [cursor], di
call con_write_cursor
pop es
popa
pop bp
ret
con_write_cursor:
pusha
mov ax, [cursor]
shr ax, 1
mov bl, al
mov dx, 0x03D4
mov al, 0x0E
out dx, al
inc dx
mov al, ah
out dx, al
dec dx
mov al, 0x0F
out dx, al
inc dx
mov al, bl
out dx, al
popa
ret
cursor: dw 0