|
|
1.1 root 1: //
2: // nono
3: // Copyright (C) 2018 [email protected]
4: //
5:
6: #include "sysclk.h"
7: #include "mpu.h"
8:
9: SysClkDevice::SysClkDevice()
10: {
11: logname = "sysclk";
12: devname = "SystemClock";
13: devaddr = 0x63000000;
14:
15: event.dev = this;
16: event.func = (DeviceCallback_t)&SysClkDevice::Callback;
17: event.code = 0;
18: event.time = 16.666667_msec;
1.1.1.2 ! root 19: event.SetName("System Clock");
1.1 root 20: }
21:
22: SysClkDevice::~SysClkDevice()
23: {
24: }
25:
26: bool
27: SysClkDevice::PowerOn()
28: {
29: // 電源オンですぐ起動
30: gScheduler->AddEvent(&event);
31: return true;
32: }
33:
34: uint64
35: SysClkDevice::Read8(uint32 addr)
36: {
37: uint32 an = addr - devaddr;
38:
39: if (an == 0) {
40: uint8 data = 0;
41: if (sysint) {
42: data |= 0x80;
43: }
44: return data;
45: } else {
46: // それ以外のポートがどう見えるかとか未調査
47: return 0xff;
48: }
49: }
50:
51: uint64
52: SysClkDevice::Write8(uint32 addr, uint32 data)
53: {
54: uint32 an = addr - devaddr;
55:
56: if (an == 0) {
57: // 何か書き込まれたら、フラグをクリア
58: sysint = false;
59: putlog(1, "システムクロック割り込みクリア");
60: } else {
61: // それ以外 (特に +1, +2, +3) で何が起きるかは未調査
62: }
63: return 0;
64: }
65:
66: // イベントハンドラ
67: void
68: SysClkDevice::Callback(int arg)
69: {
70: putlog(3, "システムクロック割り込み発生");
71: sysint = true;
72: gMPU->Interrupt(5);
73: gScheduler->AddEvent(&event);
74: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.