Skip to content

Commit

Permalink
serial ports
Browse files Browse the repository at this point in the history
  • Loading branch information
AsertCreator committed Dec 28, 2022
1 parent bb84670 commit a888e52
Show file tree
Hide file tree
Showing 5 changed files with 125 additions and 168 deletions.
8 changes: 4 additions & 4 deletions source/Cosmos.HAL2/BlockDevice/IDE.cs
Original file line number Diff line number Diff line change
Expand Up @@ -29,13 +29,13 @@ internal static void InitDriver()
{
if (xDevice != null)
{
Console.WriteLine("ATA Primary Master");
Console.WriteLine("Initializing ATA Primary Master...");
Initialize(Ata.ControllerIdEnum.Primary, Ata.BusPositionEnum.Master);
Console.WriteLine("ATA Primary Slave");
Console.WriteLine("Initializing ATA Primary Slave...");
Initialize(Ata.ControllerIdEnum.Primary, Ata.BusPositionEnum.Slave);
Console.WriteLine("ATA Secondary Master");
Console.WriteLine("Initializing ATA Secondary Master...");
Initialize(Ata.ControllerIdEnum.Secondary, Ata.BusPositionEnum.Master);
Console.WriteLine("ATA Secondary Slave");
Console.WriteLine("Initializing ATA Secondary Slave...");
Initialize(Ata.ControllerIdEnum.Secondary, Ata.BusPositionEnum.Slave);
}

Expand Down
55 changes: 0 additions & 55 deletions source/Cosmos.HAL2/Debug/Serial.cs

This file was deleted.

108 changes: 0 additions & 108 deletions source/Cosmos.HAL2/DebugTextScreen.cs

This file was deleted.

2 changes: 1 addition & 1 deletion source/Cosmos.HAL2/Global.cs
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@ static public void Init(TextScreenBase textScreen, bool InitScrollWheel, bool In
mDebugger.Send("Network Driver disabled in User Kernel");
}
Console.WriteLine("Enabling Serial Output on COM1");
Debug.Serial.Enable();
SerialPort.Enable();
mDebugger.Send("Done initializing Cosmos.HAL.Global");

}
Expand Down
120 changes: 120 additions & 0 deletions source/Cosmos.HAL2/SerialPort.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,120 @@
using System;
using Cosmos.Core;
namespace Cosmos.HAL
{
/// <summary>
/// Provides mehods for interacting with serial ports
/// </summary>
public static class SerialPort
{
// com1 is used by qemu by default
/// <summary>
/// IO port for COM1 port
/// </summary>
public const ushort COM1 = 0x3f8;
/// <summary>
/// IO port for COM2 port
/// </summary>
public const ushort COM2 = 0x2F8;
/// <summary>
/// IO port for COM3 port
/// </summary>
public const ushort COM3 = 0x3f8;
/// <summary>
/// IO port for COM4 port
/// </summary>
public const ushort COM4 = 0x3f8;
/// <summary>
/// IO port for COM5 port
/// </summary>
public const ushort COM5 = 0x3f8;
/// <summary>
/// IO port for COM6 port
/// </summary>
public const ushort COM6 = 0x3f8;
/// <summary>
/// IO port for COM7 port
/// </summary>
public const ushort COM7 = 0x3f8;
/// <summary>
/// IO port for COM8 port
/// </summary>
public const ushort COM8 = 0x3f8;

/// <summary>
/// Enables certain COM port
/// </summary>
/// <param name="aPort">COM port</param>
public static void Enable(ushort aPort)
{
IOPort.Write8((ushort)(aPort + 1), 0x00);
IOPort.Write8((ushort)(aPort + 3), 0x80);
IOPort.Write8(aPort, 0x03);
IOPort.Write8((ushort)(aPort + 1), 0x00);
IOPort.Write8((ushort)(aPort + 3), 0x03);
IOPort.Write8((ushort)(aPort + 2), 0xC7);
IOPort.Write8((ushort)(aPort + 4), 0x0B);
}

/// <summary>
/// Reads byte (ASCII character) from COM port
/// </summary>
/// <param name="aPort">COM port</param>
/// <returns>ASCII character as byte</returns>
public static byte Receive(ushort aPort)
{
while ((IOPort.Read8((ushort)(aPort + 5)) & 1) == 0) { };
return IOPort.Read8(aPort);
}

/// <summary>
/// Reads byte (ASCII character) from COM1 port
/// </summary>
/// <returns></returns>
public static byte Receive()
{
return Receive(COM1);
}

/// <summary>
/// Sends character to COM port
/// </summary>
/// <param name="aText">Character to send</param>
/// <param name="aPort">COM port</param>
public static void Send(char aText, ushort aPort)
{
while ((IOPort.Read8((ushort)(aPort + 5)) & 0x20) == 0) { };
IOPort.Write8(aPort, (byte)aText);
}

/// <summary>
/// Sends character to COM1 port
/// </summary>
/// <param name="aText">Character to send</param>
public static void Send(char aText)
{
Send(aText, COM1);
}

/// <summary>
/// Sends string to COM port
/// </summary>
/// <param name="aText">String to send</param>
/// <param name="aPort">COM port</param>
public static void SendString(string aText, ushort aPort)
{
for (int i = 0; i < aText.Length; ++i)
{
Send(aText[i], aPort);
}
}
/// <summary>
/// Sends string to COM1 port
/// </summary>
/// <param name="aText">String to send</param>
public static void SendString(string aText)
{
SendString(aText, COM1);
}
}
}

0 comments on commit a888e52

Please sign in to comment.