From 4501bbac8fd742b11b3a5ca704b13f010744b484 Mon Sep 17 00:00:00 2001 From: Dmitry Borisov Date: Wed, 22 Apr 2020 02:22:42 +0600 Subject: [PATCH] [KDCOM][NTOS:INBV][FREELDR] Decrease default baud rate for PC-98 target (#2601) According to PC-9801 Bible p. 50, divisor for PIT will become unsupported in some cases after having removed the fractional part. Replace 19200 value with 9600 which is supported by both 10 MHz and 8 MHz machines. --- boot/bootdata/floppy_pc98.ini | 2 +- boot/freeldr/freeldr/lib/comm/rs232.c | 4 ++++ boot/freeldr/freeldr/lib/debug.c | 7 ++++++- boot/freeldr/freeldr/ntldr/headless.c | 9 ++++++--- drivers/base/kdcom/kdcom.c | 17 ++++++++++++----- drivers/base/kdgdb/kdcom.c | 21 ++++++++++++++------- ntoskrnl/inbv/inbvport.c | 9 ++++++--- ntoskrnl/kd/i386/kdbg.c | 5 ++++- 8 files changed, 53 insertions(+), 21 deletions(-) diff --git a/boot/bootdata/floppy_pc98.ini b/boot/bootdata/floppy_pc98.ini index 0466754d765..a46489687e4 100644 --- a/boot/bootdata/floppy_pc98.ini +++ b/boot/bootdata/floppy_pc98.ini @@ -39,7 +39,7 @@ Options=/MININT [LiveCD_Debug] BootType=Windows2003 SystemPath=multi(0)disk(0)cdrom(0)\reactos -Options=/DEBUG /DEBUGPORT=COM1 /BAUDRATE=115200 /SOS /MININT +Options=/DEBUG /DEBUGPORT=COM1 /BAUDRATE=9600 /SOS /MININT [LiveCD_Screen] BootType=Windows2003 diff --git a/boot/freeldr/freeldr/lib/comm/rs232.c b/boot/freeldr/freeldr/lib/comm/rs232.c index 10d0b0bedb8..61309fcd39b 100644 --- a/boot/freeldr/freeldr/lib/comm/rs232.c +++ b/boot/freeldr/freeldr/lib/comm/rs232.c @@ -30,7 +30,11 @@ /* STATIC VARIABLES ***********************************************************/ +#if defined(SARCH_PC98) +#define DEFAULT_BAUD_RATE 9600 +#else #define DEFAULT_BAUD_RATE 19200 +#endif #if defined(_M_IX86) || defined(_M_AMD64) #if defined(SARCH_PC98) diff --git a/boot/freeldr/freeldr/lib/debug.c b/boot/freeldr/freeldr/lib/debug.c index 24c074ddc69..abc2545f7ea 100644 --- a/boot/freeldr/freeldr/lib/debug.c +++ b/boot/freeldr/freeldr/lib/debug.c @@ -43,8 +43,13 @@ static UCHAR DbgChannels[DBG_CHANNELS_COUNT]; ULONG DebugPort = RS232; /* Serial debug connection */ -ULONG ComPort = 0; // The COM port initializer chooses the first available port starting from COM4 down to COM1. +#if defined(SARCH_PC98) +ULONG BaudRate = 9600; +#else ULONG BaudRate = 115200; +#endif + +ULONG ComPort = 0; // The COM port initializer chooses the first available port starting from COM4 down to COM1. ULONG PortIrq = 0; // Not used at the moment. BOOLEAN DebugStartOfLine = TRUE; diff --git a/boot/freeldr/freeldr/ntldr/headless.c b/boot/freeldr/freeldr/ntldr/headless.c index 35af2e39daf..64fd04adb7b 100644 --- a/boot/freeldr/freeldr/ntldr/headless.c +++ b/boot/freeldr/freeldr/ntldr/headless.c @@ -67,10 +67,10 @@ WinLdrPortInitialize(IN ULONG BaudRate, IN BOOLEAN TerminalConnected, OUT PULONG PortId) { - /* Set default baud rate */ - if (BaudRate == 0) BaudRate = 19200; - #if defined(SARCH_PC98) + /* Set default baud rate */ + if (BaudRate == 0) BaudRate = 9600; + /* Check if port or address given */ if (PortNumber) { @@ -106,6 +106,9 @@ WinLdrPortInitialize(IN ULONG BaudRate, } } #else + /* Set default baud rate */ + if (BaudRate == 0) BaudRate = 19200; + /* Check if port or address given */ if (PortNumber) { diff --git a/drivers/base/kdcom/kdcom.c b/drivers/base/kdcom/kdcom.c index eb62aa4e551..c4cfa39e177 100644 --- a/drivers/base/kdcom/kdcom.c +++ b/drivers/base/kdcom/kdcom.c @@ -15,12 +15,19 @@ #include /* Serial debug connection */ +#if defined(SARCH_PC98) #define DEFAULT_DEBUG_PORT 2 /* COM2 */ -#define DEFAULT_DEBUG_COM1_IRQ 4 /* COM1 IRQ */ -#define DEFAULT_DEBUG_COM2_IRQ 3 /* COM2 IRQ */ -#define DEFAULT_DEBUG_BAUD_RATE 115200 /* 115200 Baud */ - -#define DEFAULT_BAUD_RATE 19200 +#define DEFAULT_DEBUG_COM1_IRQ 4 +#define DEFAULT_DEBUG_COM2_IRQ 5 +#define DEFAULT_DEBUG_BAUD_RATE 9600 +#define DEFAULT_BAUD_RATE 9600 +#else +#define DEFAULT_DEBUG_PORT 2 /* COM2 */ +#define DEFAULT_DEBUG_COM1_IRQ 4 +#define DEFAULT_DEBUG_COM2_IRQ 3 +#define DEFAULT_DEBUG_BAUD_RATE 115200 +#define DEFAULT_BAUD_RATE 19200 +#endif #if defined(_M_IX86) || defined(_M_AMD64) #if defined(SARCH_PC98) diff --git a/drivers/base/kdgdb/kdcom.c b/drivers/base/kdgdb/kdcom.c index af9ec39829c..18710247680 100644 --- a/drivers/base/kdgdb/kdcom.c +++ b/drivers/base/kdgdb/kdcom.c @@ -13,12 +13,19 @@ #include /* Serial debug connection */ +#if defined(SARCH_PC98) #define DEFAULT_DEBUG_PORT 2 /* COM2 */ -#define DEFAULT_DEBUG_COM1_IRQ 4 /* COM1 IRQ */ -#define DEFAULT_DEBUG_COM2_IRQ 3 /* COM2 IRQ */ -#define DEFAULT_DEBUG_BAUD_RATE 115200 /* 115200 Baud */ - -#define DEFAULT_BAUD_RATE 19200 +#define DEFAULT_DEBUG_COM1_IRQ 4 +#define DEFAULT_DEBUG_COM2_IRQ 5 +#define DEFAULT_DEBUG_BAUD_RATE 9600 +#define DEFAULT_BAUD_RATE 9600 +#else +#define DEFAULT_DEBUG_PORT 2 /* COM2 */ +#define DEFAULT_DEBUG_COM1_IRQ 4 +#define DEFAULT_DEBUG_COM2_IRQ 3 +#define DEFAULT_DEBUG_BAUD_RATE 115200 +#define DEFAULT_BAUD_RATE 19200 +#endif #if defined(_M_IX86) || defined(_M_AMD64) #if defined(SARCH_PC98) @@ -299,12 +306,12 @@ NTAPI KdpReceiveByte(_Out_ PUCHAR OutByte) { USHORT CpStatus; - + do { CpStatus = CpGetByte(&KdComPort, OutByte, TRUE, FALSE); } while (CpStatus == CP_GET_NODATA); - + /* Get the byte */ if (CpStatus == CP_GET_SUCCESS) { diff --git a/ntoskrnl/inbv/inbvport.c b/ntoskrnl/inbv/inbvport.c index 526383a4771..269c8f962be 100644 --- a/ntoskrnl/inbv/inbvport.c +++ b/ntoskrnl/inbv/inbvport.c @@ -79,10 +79,10 @@ InbvPortInitialize(IN ULONG BaudRate, /* Not yet supported */ ASSERT(IsMMIODevice == FALSE); - /* Set default baud rate */ - if (BaudRate == 0) BaudRate = 19200; - #if defined(SARCH_PC98) + /* Set default baud rate */ + if (BaudRate == 0) BaudRate = 9600; + /* Check if port or address given */ if (PortNumber) { @@ -118,6 +118,9 @@ InbvPortInitialize(IN ULONG BaudRate, } } #else + /* Set default baud rate */ + if (BaudRate == 0) BaudRate = 19200; + /* Check if port or address given */ if (PortNumber) { diff --git a/ntoskrnl/kd/i386/kdbg.c b/ntoskrnl/kd/i386/kdbg.c index 9277e019b2a..44bd7629e38 100644 --- a/ntoskrnl/kd/i386/kdbg.c +++ b/ntoskrnl/kd/i386/kdbg.c @@ -13,8 +13,11 @@ #define NDEBUG #include - +#if defined(SARCH_PC98) +#define DEFAULT_BAUD_RATE 9600 +#else #define DEFAULT_BAUD_RATE 19200 +#endif #if defined(_M_IX86) || defined(_M_AMD64) #if defined(SARCH_PC98)