; 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