|
|
1.1 root 1: //
2: // nono
1.1.1.4 root 3: // Copyright (C) 2020 nono project
4: // Licensed under nono-license.txt
1.1 root 5: //
6:
7: #include "sysclk.h"
1.1.1.6 root 8: #include "config.h"
9: #include "interrupt.h"
10:
11: std::unique_ptr<SysClkDevice> gSysClk;
1.1 root 12:
13: SysClkDevice::SysClkDevice()
14: {
15: logname = "sysclk";
16: devname = "SystemClock";
17: devaddr = 0x63000000;
18:
19: event.dev = this;
20: event.func = (DeviceCallback_t)&SysClkDevice::Callback;
21: event.code = 0;
1.1.1.2 root 22: event.SetName("System Clock");
1.1 root 23: }
24:
25: SysClkDevice::~SysClkDevice()
26: {
27: }
28:
29: bool
1.1.1.4 root 30: SysClkDevice::Init()
31: {
32: // クロックは機種ごとに異なる
33: const ConfigItem& item = gConfig->Find("!sysclk-period");
34: event.time = item.AsInt();
35: return true;
36: }
37:
38: bool
1.1 root 39: SysClkDevice::PowerOn()
40: {
41: // 電源オンですぐ起動
1.1.1.3 root 42: event.Start();
1.1 root 43: return true;
44: }
45:
46: uint64
1.1.1.7 ! root 47: SysClkDevice::Read(uint32 offset)
1.1 root 48: {
1.1.1.3 root 49: // 1 ポートしかない
50: return GetInt();
51: }
1.1 root 52:
1.1.1.3 root 53: uint64
1.1.1.7 ! root 54: SysClkDevice::Write(uint32 offset, uint32 data)
1.1.1.3 root 55: {
56: // 何か書き込まれたら、フラグをクリア
57: putlog(1, "システムクロック割り込みクリア");
1.1.1.6 root 58: sysint = false;
59: gInterrupt->NegateINT(this);
1.1.1.3 root 60: return 0;
1.1 root 61: }
62:
63: uint64
1.1.1.7 ! root 64: SysClkDevice::Peek(uint32 offset)
1.1 root 65: {
1.1.1.3 root 66: return GetInt();
67: }
68:
69: // 割り込み状態を取得(?)
70: uint8
71: SysClkDevice::GetInt() const
72: {
73: uint8 data = 0;
1.1 root 74:
1.1.1.3 root 75: if (sysint) {
76: data |= 0x80;
1.1 root 77: }
1.1.1.3 root 78: return data;
1.1 root 79: }
80:
81: // イベントハンドラ
82: void
1.1.1.5 root 83: SysClkDevice::Callback(Event& ev)
1.1 root 84: {
85: putlog(3, "システムクロック割り込み発生");
86: sysint = true;
1.1.1.6 root 87: gInterrupt->AssertINT(this);
1.1.1.5 root 88: ev.Start();
1.1 root 89: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.