clean up and some document for serial init stuff

This commit is contained in:
Li-Ta Lo 2000-12-06 06:44:07 +00:00
commit 9b0e700d23
2 changed files with 140 additions and 131 deletions

View file

@ -20,38 +20,37 @@
#define TTYS0_MSR (TTYS0+0x06)
#define TTYS0_SCR (TTYS0+0x07)
jmp serial0
jmp serial0
/* uses: ax, dx */
#define TTYS0_TX_AL \
mov %al, %ah ; \
9: mov $TTYS0_LSR, %dx ; \
inb %dx, %al ; \
test $0x20, %al ; \
je 9b ; \
mov $TTYS0_TBR, %dx ; \
mov %ah, %al ; \
outb %al, %dx
mov %al, %ah ; \
9: mov $TTYS0_LSR, %dx ; \
inb %dx, %al ; \
test $0x20, %al ; \
je 9b ; \
mov $TTYS0_TBR, %dx ; \
mov %ah, %al ; \
outb %al, %dx
/* uses: esp, ax, dx */
#define TTYS0_TX_CHAR(byte) \
mov byte, %al ; \
mov byte, %al ; \
CALLSP(ttys0_tx_al)
/* uses: esp, ax, dx */
#define TTYS0_TX_HEX8(byte) \
mov byte, %al ; \
mov byte, %al ; \
CALLSP(ttys0_tx_hex8)
/* uses: esp, eax, ebx, dx */
#define TTYS0_TX_HEX32(lword) \
mov lword, %eax ; \
mov lword, %eax ; \
CALLSP(ttys0_tx_hex32)
/* uses: esp, ebx, ax, dx */
#define TTYS0_TX_STRING(string) \
mov string, %ebx ; \
mov string, %ebx ; \
CALLSP(ttys0_tx_string)
/* uses: esp, ax, dx */
@ -61,132 +60,135 @@ ttys0_tx_al:
/* uses: esp, ax, dx */
ttys0_tx_hex8:
mov $TTYS0_SCR, %dx
outb %al, %dx
shr $4, %al
add $'0', %al
cmp $'9', %al
jle 9f
add $39, %al
mov $TTYS0_SCR, %dx
outb %al, %dx
shr $4, %al
add $'0', %al
cmp $'9', %al
jle 9f
add $39, %al
9:
TTYS0_TX_AL
mov $TTYS0_SCR, %dx
inb %dx, %al
and $0x0f, %al
add $'0', %al
cmp $'9', %al
jle 9f
add $39, %al
mov $TTYS0_SCR, %dx
inb %dx, %al
and $0x0f, %al
add $'0', %al
cmp $'9', %al
jle 9f
add $39, %al
9:
TTYS0_TX_AL
RETSP
/* uses: esp, ebx, eax, dx */
ttys0_tx_hex32:
mov %eax, %ebx
shr $28, %eax
add $'0', %al
cmp $'9', %al
jle 9f
add $39, %al
9:
TTYS0_TX_AL
mov %ebx, %eax
shr $24, %eax
and $0x0f, %al
add $'0', %al
cmp $'9', %al
jle 9f
add $39, %al
mov %eax, %ebx
shr $28, %eax
add $'0', %al
cmp $'9', %al
jle 9f
add $39, %al
9:
TTYS0_TX_AL
mov %ebx, %eax
shr $20, %eax
and $0x0f, %al
add $'0', %al
cmp $'9', %al
jle 9f
add $39, %al
mov %ebx, %eax
shr $24, %eax
and $0x0f, %al
add $'0', %al
cmp $'9', %al
jle 9f
add $39, %al
9:
TTYS0_TX_AL
mov %ebx, %eax
shr $16, %eax
and $0x0f, %al
add $'0', %al
cmp $'9', %al
jle 9f
add $39, %al
mov %ebx, %eax
shr $20, %eax
and $0x0f, %al
add $'0', %al
cmp $'9', %al
jle 9f
add $39, %al
9:
TTYS0_TX_AL
mov %ebx, %eax
shr $12, %eax
and $0x0f, %al
add $'0', %al
cmp $'9', %al
jle 9f
add $39, %al
mov %ebx, %eax
shr $16, %eax
and $0x0f, %al
add $'0', %al
cmp $'9', %al
jle 9f
add $39, %al
9:
TTYS0_TX_AL
mov %ebx, %eax
shr $8, %eax
and $0x0f, %al
add $'0', %al
cmp $'9', %al
jle 9f
add $39, %al
mov %ebx, %eax
shr $12, %eax
and $0x0f, %al
add $'0', %al
cmp $'9', %al
jle 9f
add $39, %al
9:
TTYS0_TX_AL
mov %ebx, %eax
shr $4, %eax
and $0x0f, %al
add $'0', %al
cmp $'9', %al
jle 9f
add $39, %al
mov %ebx, %eax
shr $8, %eax
and $0x0f, %al
add $'0', %al
cmp $'9', %al
jle 9f
add $39, %al
9:
TTYS0_TX_AL
mov %ebx, %eax
and $0x0f, %al
add $'0', %al
cmp $'9', %al
jle 9f
add $39, %al
mov %ebx, %eax
shr $4, %eax
and $0x0f, %al
add $'0', %al
cmp $'9', %al
jle 9f
add $39, %al
9:
TTYS0_TX_AL
mov %ebx, %eax
and $0x0f, %al
add $'0', %al
cmp $'9', %al
jle 9f
add $39, %al
9:
TTYS0_TX_AL
RETSP
/* Uses esp, ebx, ax, dx */
ttys0_tx_string:
mov (%ebx), %al
inc %ebx
cmp $0, %al
jne 9f
mov (%ebx), %al
inc %ebx
cmp $0, %al
jne 9f
RETSP
9: TTYS0_TX_AL
jmp ttys0_tx_string
9:
TTYS0_TX_AL
jmp ttys0_tx_string
serial0:
/* Set 115.2Kbps,8n1 */
/* Set 8bit, 1 stop bit, no parity, DLAB */
mov $TTYS0_LCR, %dx
mov $0x83, %al
out %al, %dx
mov $TTYS0_LCR, %dx
mov $0x83, %al
out %al, %dx
mov $TTYS0_DLL, %dx
mov $0x01, %al
out %al, %dx
mov $TTYS0_DLM, %dx
mov $0x00, %al
out %al, %dx
mov $TTYS0_LCR, %dx
mov $0x03, %al
out %al, %dx
/* set Baud Rate Divisor to 1 ==> 115200 Buad */
mov $TTYS0_DLL, %dx
mov $0x01, %al
out %al, %dx
mov $TTYS0_DLM, %dx
mov $0x00, %al
out %al, %dx
/* Disable DLAB */
mov $TTYS0_LCR, %dx
mov $0x03, %al
out %al, %dx

View file

@ -6,47 +6,54 @@
/* to do: move this to a common include file! */
#define WRITESIOBYTE(register, value) movw register, %dx ;\
movb value, %al ;\
outb %al, %dx; OUTIT(%al, $0x80)
movb value, %al ;\
outb %al, %dx;\
OUTIT(%al, $0x80)
#define WRITESIOWORD(register, value) movw register, %dx ;\
movw value, %ax ;\
outw %ax, %dx; OUTIT(%al, $0x80)
movw value, %ax ;\
outw %ax, %dx;\
OUTIT(%al, $0x80)
/* turn on PnP */
/* turn on PnP */
OUT2E($0x87)
OUT2E($1)
OUT2E($0x55)
OUT2E($0x55)
/* select com1 */
/* select com1 */
OUT2E($7)
OUT2F($1)
/* set the enable in reg. 0x30 */
/* set the enable in reg. 0x30 */
OUT2E($0x30)
OUT2F($1)
/* set the proper control bits for clock etc. in register 0x24 */
/* set the proper control bits for clock etc. in register 0x24 */
OUT2E($0x24)
/* NOTE: this also turns on all the proper bits for FLASH.
* they're combined in here.
*/
/* NOTE: this also turns on all the proper bits for FLASH.
* they're combined in here.
*/
OUT2F($0xfd)
/* turn off PnP */
/* turn off PnP */
OUT2E($2)
OUT2F($2)
/* all done that nonsense -- from here on it's standard pc80 */
// set up register to set baud rate.
/* all done that nonsense -- from here on it's standard pc80 */
/* Enable DLAB to set baud rate. */
WRITESIOBYTE($0x3fb, $0x80)
// Set 115 kb
// I don't think this thing can run at that rate.
// WRITESIOWORD($0x3f8, $1)
// Set 38.4 kb
WRITESIOWORD($0x3f8, $3)
// now set no parity, one stop, 8 bits
WRITESIOBYTE($0x3fb, $3)
// now turn on RTS, DRT
WRITESIOBYTE($0x3fc, $3)
// Enable interrupts
WRITESIOBYTE($0x3f9, $0xf)
// should be done. Dump a char for fun.
WRITESIOBYTE($0x3f8, $48)
/* Set Buad Rate Divisor = 1==> 115 kb */
WRITESIOWORD($0x3f8, $0x01)
/* now set no parity, one stop, 8 bits, disable DLAB */
WRITESIOBYTE($0x3fb, $0x03)
/* now turn on RTS, DTR */
WRITESIOBYTE($0x3fc, $0x03)
/* Enable interrupts */
WRITESIOBYTE($0x3f9, $0x0f)
/* should be done. Dump a char for fun. */
WRITESIOBYTE($0x3f8, $0x30)