// #include jmp console0 #define __STR(X) #X #define STR(X) __STR(X) #undef STR /* uses: ax, dx */ #if defined(SERIAL_CONSOLE) #define __CONSOLE_INLINE_TX_AL TTYS0_TX_AL #else #define __CONSOLE_INLINE_TX_AL #endif /* uses: esp, ax, dx */ #define __CONSOLE_TX_CHAR(byte) \ mov byte, %al ; \ CALLSP(console_tx_al) /* uses: ax, dx */ #define __CONSOLE_INLINE_TX_CHAR(byte) \ mov byte, %al ; \ __CONSOLE_INLINE_TX_AL /* uses: esp, ax, edx */ #define __CONSOLE_TX_HEX8(byte) \ mov byte, %al ; \ CALLSP(console_tx_hex8) /* uses: byte, ax, dx */ #define __CONSOLE_INLINE_TX_HEX8(byte) \ movb byte, %dl ; \ shll $16, %edx ; \ shr $4, %al ; \ add $'0', %al ; \ cmp $'9', %al ; \ jle 9f ; \ add $39, %al ; \ 9: ; \ __CONSOLE_INLINE_TX_AL ; \ shrl $16, %edx ; \ movb %dl, %al ; \ and $0x0f, %al ; \ add $'0', %al ; \ cmp $'9', %al ; \ jle 9f ; \ add $39, %al ; \ 9: ; \ __CONSOLE_INLINE_TX_AL /* uses: esp, eax, ebx, dx */ #define __CONSOLE_TX_HEX32(lword) \ mov lword, %eax ; \ CALLSP(console_tx_hex32) /* uses: eax, lword, dx */ #define __CONSOLE_INLINE_TX_HEX32(lword) \ mov lword, %eax ; \ shr $28, %eax ; \ add $'0', %al ; \ cmp $'9', %al ; \ jle 9f ; \ add $39, %al ; \ 9: ; \ __CONSOLE_INLINE_TX_AL ; \ ; \ mov lword, %eax ; \ shr $24, %eax ; \ and $0x0f, %al ; \ add $'0', %al ; \ cmp $'9', %al ; \ jle 9f ; \ add $39, %al ; \ 9: ; \ __CONSOLE_INLINE_TX_AL ; \ ; \ mov lword, %eax ; \ shr $20, %eax ; \ and $0x0f, %al ; \ add $'0', %al ; \ cmp $'9', %al ; \ jle 9f ; \ add $39, %al ; \ 9: ; \ __CONSOLE_INLINE_TX_AL ; \ ; \ mov lword, %eax ; \ shr $16, %eax ; \ and $0x0f, %al ; \ add $'0', %al ; \ cmp $'9', %al ; \ jle 9f ; \ add $39, %al ; \ 9: ; \ __CONSOLE_INLINE_TX_AL ; \ ; \ mov lword, %eax ; \ shr $12, %eax ; \ and $0x0f, %al ; \ add $'0', %al ; \ cmp $'9', %al ; \ jle 9f ; \ add $39, %al ; \ 9: ; \ __CONSOLE_INLINE_TX_AL ; \ ; \ mov lword, %eax ; \ shr $8, %eax ; \ and $0x0f, %al ; \ add $'0', %al ; \ cmp $'9', %al ; \ jle 9f ; \ add $39, %al ; \ 9: ; \ __CONSOLE_INLINE_TX_AL ; \ ; \ mov lword, %eax ; \ shr $4, %eax ; \ and $0x0f, %al ; \ add $'0', %al ; \ cmp $'9', %al ; \ jle 9f ; \ add $39, %al ; \ 9: ; \ __CONSOLE_INLINE_TX_AL ; \ ; \ mov lword, %eax ; \ and $0x0f, %al ; \ add $'0', %al ; \ cmp $'9', %al ; \ jle 9f ; \ add $39, %al ; \ 9: ; \ __CONSOLE_INLINE_TX_AL /* uses: esp, ebx, ax, dx */ #define __CONSOLE_TX_STRING(string) \ mov string, %ebx ; \ CALLSP(console_tx_string) /* uses: ebx, ax, dx */ #define __CONSOLE_INLINE_TX_STRING(string) \ movl string, %ebx ; \ 10: movb (%ebx), %al ; \ incl %ebx ; \ testb %al, %al ; \ jz 11f ; \ __CONSOLE_INLINE_TX_AL ; \ jmp 10b ; \ 11: #define CONSOLE_EMERG_TX_CHAR(byte) __CONSOLE_TX_CHAR(byte) #define CONSOLE_EMERG_INLINE_TX_CHAR(byte) __CONSOLE_INLINE_TX_CHAR(byte) #define CONSOLE_EMERG_TX_HEX8(byte) __CONSOLE_TX_HEX8(byte) #define CONSOLE_EMERG_INLINE_TX_HEX8(byte) __CONSOLE_INLINE_TX_HEX8(byte) #define CONSOLE_EMERG_TX_HEX32(lword) __CONSOLE_TX_HEX32(lword) #define CONSOLE_EMERG_INLINE_TX_HEX32(lword) __CONSOLE_INLINE_TX_HEX32(lword) #define CONSOLE_EMERG_TX_STRING(string) __CONSOLE_TX_STRING(string) #define CONSOLE_EMERG_INLINE_TX_STRING(string) __CONSOLE_INLINE_TX_STRING(string) #define CONSOLE_ALERT_TX_CHAR(byte) __CONSOLE_TX_CHAR(byte) #define CONSOLE_ALERT_INLINE_TX_CHAR(byte) __CONSOLE_INLINE_TX_CHAR(byte) #define CONSOLE_ALERT_TX_HEX8(byte) __CONSOLE_TX_HEX8(byte) #define CONSOLE_ALERT_INLINE_TX_HEX8(byte) __CONSOLE_INLINE_TX_HEX8(byte) #define CONSOLE_ALERT_TX_HEX32(lword) __CONSOLE_TX_HEX32(lword) #define CONSOLE_ALERT_INLINE_TX_HEX32(lword) __CONSOLE_INLINE_TX_HEX32(lword) #define CONSOLE_ALERT_TX_STRING(string) __CONSOLE_TX_STRING(string) #define CONSOLE_ALERT_INLINE_TX_STRING(string) __CONSOLE_INLINE_TX_STRING(string) #define CONSOLE_CRIT_TX_CHAR(byte) __CONSOLE_TX_CHAR(byte) #define CONSOLE_CRIT_INLINE_TX_CHAR(byte) __CONSOLE_INLINE_TX_CHAR(byte) #define CONSOLE_CRIT_TX_HEX8(byte) __CONSOLE_TX_HEX8(byte) #define CONSOLE_CRIT_INLINE_TX_HEX8(byte) __CONSOLE_INLINE_TX_HEX8(byte) #define CONSOLE_CRIT_TX_HEX32(lword) __CONSOLE_TX_HEX32(lword) #define CONSOLE_CRIT_INLINE_TX_HEX32(lword) __CONSOLE_INLINE_TX_HEX32(lword) #define CONSOLE_CRIT_TX_STRING(string) __CONSOLE_TX_STRING(string) #define CONSOLE_CRIT_INLINE_TX_STRING(string) __CONSOLE_INLINE_TX_STRING(string) #define CONSOLE_ERR_TX_CHAR(byte) __CONSOLE_TX_CHAR(byte) #define CONSOLE_ERR_INLINE_TX_CHAR(byte) __CONSOLE_INLINE_TX_CHAR(byte) #define CONSOLE_ERR_TX_HEX8(byte) __CONSOLE_TX_HEX8(byte) #define CONSOLE_ERR_INLINE_TX_HEX8(byte) __CONSOLE_INLINE_TX_HEX8(byte) #define CONSOLE_ERR_TX_HEX32(lword) __CONSOLE_TX_HEX32(lword) #define CONSOLE_ERR_INLINE_TX_HEX32(lword) __CONSOLE_INLINE_TX_HEX32(lword) #define CONSOLE_ERR_TX_STRING(string) __CONSOLE_TX_STRING(string) #define CONSOLE_ERR_INLINE_TX_STRING(string) __CONSOLE_INLINE_TX_STRING(string) #define CONSOLE_WARNING_TX_CHAR(byte) __CONSOLE_TX_CHAR(byte) #define CONSOLE_WARNING_INLINE_TX_CHAR(byte) __CONSOLE_INLINE_TX_CHAR(byte) #define CONSOLE_WARNING_TX_HEX8(byte) __CONSOLE_TX_HEX8(byte) #define CONSOLE_WARNING_INLINE_TX_HEX8(byte) __CONSOLE_INLINE_TX_HEX8(byte) #define CONSOLE_WARNING_TX_HEX32(lword) __CONSOLE_TX_HEX32(lword) #define CONSOLE_WARNING_INLINE_TX_HEX32(lword) __CONSOLE_INLINE_TX_HEX32(lword) #define CONSOLE_WARNING_TX_STRING(string) __CONSOLE_TX_STRING(string) #define CONSOLE_WARNING_INLINE_TX_STRING(string) __CONSOLE_INLINE_TX_STRING(string) #define CONSOLE_NOTICE_TX_CHAR(byte) __CONSOLE_TX_CHAR(byte) #define CONSOLE_NOTICE_INLINE_TX_CHAR(byte) __CONSOLE_INLINE_TX_CHAR(byte) #define CONSOLE_NOTICE_TX_HEX8(byte) __CONSOLE_TX_HEX8(byte) #define CONSOLE_NOTICE_INLINE_TX_HEX8(byte) __CONSOLE_INLINE_TX_HEX8(byte) #define CONSOLE_NOTICE_TX_HEX32(lword) __CONSOLE_TX_HEX32(lword) #define CONSOLE_NOTICE_INLINE_TX_HEX32(lword) __CONSOLE_INLINE_TX_HEX32(lword) #define CONSOLE_NOTICE_TX_STRING(string) __CONSOLE_TX_STRING(string) #define CONSOLE_NOTICE_INLINE_TX_STRING(string) __CONSOLE_INLINE_TX_STRING(string) #define CONSOLE_INFO_TX_CHAR(byte) __CONSOLE_TX_CHAR(byte) #define CONSOLE_INFO_INLINE_TX_CHAR(byte) __CONSOLE_INLINE_TX_CHAR(byte) #define CONSOLE_INFO_TX_HEX8(byte) __CONSOLE_TX_HEX8(byte) #define CONSOLE_INFO_INLINE_TX_HEX8(byte) __CONSOLE_INLINE_TX_HEX8(byte) #define CONSOLE_INFO_TX_HEX32(lword) __CONSOLE_TX_HEX32(lword) #define CONSOLE_INFO_INLINE_TX_HEX32(lword) __CONSOLE_INLINE_TX_HEX32(lword) #define CONSOLE_INFO_TX_STRING(string) __CONSOLE_TX_STRING(string) #define CONSOLE_INFO_INLINE_TX_STRING(string) __CONSOLE_INLINE_TX_STRING(string) #define CONSOLE_DEBUG_TX_CHAR(byte) __CONSOLE_TX_CHAR(byte) #define CONSOLE_DEBUG_INLINE_TX_CHAR(byte) __CONSOLE_INLINE_TX_CHAR(byte) #define CONSOLE_DEBUG_TX_HEX8(byte) __CONSOLE_TX_HEX8(byte) #define CONSOLE_DEBUG_INLINE_TX_HEX8(byte) __CONSOLE_INLINE_TX_HEX8(byte) #define CONSOLE_DEBUG_TX_HEX32(lword) __CONSOLE_TX_HEX32(lword) #define CONSOLE_DEBUG_INLINE_TX_HEX32(lword) __CONSOLE_INLINE_TX_HEX32(lword) #define CONSOLE_DEBUG_TX_STRING(string) __CONSOLE_TX_STRING(string) #define CONSOLE_DEBUG_INLINE_TX_STRING(string) __CONSOLE_INLINE_TX_STRING(string) #define CONSOLE_SPEW_TX_CHAR(byte) __CONSOLE_TX_CHAR(byte) #define CONSOLE_SPEW_INLINE_TX_CHAR(byte) __CONSOLE_INLINE_TX_CHAR(byte) #define CONSOLE_SPEW_TX_HEX8(byte) __CONSOLE_TX_HEX8(byte) #define CONSOLE_SPEW_INLINE_TX_HEX8(byte) __CONSOLE_INLINE_TX_HEX8(byte) #define CONSOLE_SPEW_TX_HEX32(lword) __CONSOLE_TX_HEX32(lword) #define CONSOLE_SPEW_INLINE_TX_HEX32(lword) __CONSOLE_INLINE_TX_HEX32(lword) #define CONSOLE_SPEW_TX_STRING(string) __CONSOLE_TX_STRING(string) #define CONSOLE_SPEW_INLINE_TX_STRING(string) __CONSOLE_INLINE_TX_STRING(string) /* uses: esp, ax, dx */ console_tx_al: __CONSOLE_INLINE_TX_AL RETSP /* uses: esp, ax, edx */ console_tx_hex8: __CONSOLE_INLINE_TX_HEX8(%al) RETSP /* uses: esp, ebx, eax, dx */ console_tx_hex32: mov %eax, %ebx shr $28, %eax add $'0', %al cmp $'9', %al jle 9f add $39, %al 9: __CONSOLE_INLINE_TX_AL mov %ebx, %eax shr $24, %eax and $0x0f, %al add $'0', %al cmp $'9', %al jle 9f add $39, %al 9: __CONSOLE_INLINE_TX_AL mov %ebx, %eax shr $20, %eax and $0x0f, %al add $'0', %al cmp $'9', %al jle 9f add $39, %al 9: __CONSOLE_INLINE_TX_AL mov %ebx, %eax shr $16, %eax and $0x0f, %al add $'0', %al cmp $'9', %al jle 9f add $39, %al 9: __CONSOLE_INLINE_TX_AL mov %ebx, %eax shr $12, %eax and $0x0f, %al add $'0', %al cmp $'9', %al jle 9f add $39, %al 9: __CONSOLE_INLINE_TX_AL mov %ebx, %eax shr $8, %eax and $0x0f, %al add $'0', %al cmp $'9', %al jle 9f add $39, %al 9: __CONSOLE_INLINE_TX_AL mov %ebx, %eax shr $4, %eax and $0x0f, %al add $'0', %al cmp $'9', %al jle 9f add $39, %al 9: __CONSOLE_INLINE_TX_AL mov %ebx, %eax and $0x0f, %al add $'0', %al cmp $'9', %al jle 9f add $39, %al 9: __CONSOLE_INLINE_TX_AL RETSP /* Uses esp, ebx, ax, dx */ console_tx_string: mov (%ebx), %al inc %ebx cmp $0, %al jne 9f RETSP 9: __CONSOLE_INLINE_TX_AL jmp console_tx_string console0: