blob: 9e7c8b1e528b403539352b24d13e1386f69fe30f [file] [log] [blame]
//
// Copyright (c) 2021 Google LLC
//
// This file is licensed under the MIT License.
// Full license text is available in 'licenses/MIT.txt'.
//
using Antmicro.Renode.Core;
using Antmicro.Renode.Logging;
using Antmicro.Renode.Peripherals.Bus;
namespace Antmicro.Renode.Peripherals.CPU
{
public class SmcRiscV32_ControlBlock : IDoubleWordPeripheral, IKnownSize
{
public SmcRiscV32_ControlBlock(RiscV32 cpu)
{
this.cpu = cpu;
}
public void Reset() // IPeripheral
{
}
public uint ReadDoubleWord(long offset) // IDoubleWordPeripheral
{
return cpu.PC;
}
public void WriteDoubleWord(long offset, uint value) // IDoubleWordPeripheral
{
if (value == 0) {
this.Log(LogLevel.Noisy, "Stopping SMC");
cpu.PC = 0;
cpu.IsHalted = true;
}
else {
this.Log(LogLevel.Noisy, "Starting SMC at 0x{0:X8}", value);
cpu.PC = value;
cpu.IsHalted = false;
}
}
public long Size => 0x4;
private RiscV32 cpu;
}
}