summaryrefslogtreecommitdiff
path: root/sys/src/boot/pc/uart.s
blob: ac69b0addad13d1973a47749044a5f3b0bc5d21e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include "x16.h"

TEXT uartinit(SB), $0
	MOVL c+8(SP), AX
	MOVB $0x00, AH
	JMP _uartbios
	
TEXT uartputc(SB), $0
	MOVL c+8(SP), AX
	MOVB $0x01, AH
	JMP _uartbios

TEXT uartgetc(SB), $0
	MOVL p+4(SP), DX
	CALL rmode16(SB)
	STI
	MOVB $0x03, AH
	BIOSCALL(0x14)
	CALL16(pmode32(SB))
	ANDL $0x8100, AX
	MOVL $0x0100, BX
	CMPL BX, AX
	JE _uartread
	XORL AX, AX
	RET
_uartread:
	MOVB $0x02, AH
_uartbios:
	MOVL p+4(SP), DX
	CALL rmode16(SB)
	STI
	BIOSCALL(0x14)
	CALL16(pmode32(SB))
	ANDL $0xFF, AX
	RET