clean up and some document for serial init stuff
This commit is contained in:
parent
ba4403a177
commit
9b0e700d23
2 changed files with 140 additions and 131 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue