|
|
1.1 root 1: //
2: // nono
3: // Copyright (C) 2024 nono project
4: // Licensed under nono-license.txt
5: //
6:
7: //
8: // Goldfish (Qemu) RTC+Timer (の RTC のほう)
9: //
10:
11: #pragma once
12:
13: #include "rtc.h"
14:
15: class TextScreen;
16:
17: // GFRTC/GFTimer 共通
18: class GFRTC
19: {
20: public:
21: static const uint TIME_LOW = 0x00;
22: static const uint TIME_HIGH = 0x04;
23: static const uint ALARM_LOW = 0x08;
24: static const uint ALARM_HIGH = 0x0c;
25: static const uint INTR_STATUS = 0x10;
26: static const uint ALARM_CLEAR = 0x14;
27: static const uint ALARM_STATUS = 0x18;
28: static const uint INTR_CLEAR = 0x1c;
29: };
30:
31: class GFRTCDevice : public RTCDevice
32: {
33: using inherited = RTCDevice;
34:
35: public:
36: GFRTCDevice();
37: ~GFRTCDevice() override;
38:
39: bool Init() override;
40: void ResetHard(bool poweron) override;
41:
42: busdata Read32(uint32 addr) override;
43: busdata Write32(uint32 addr, uint32 data) override;
44: busdata Peek8(uint32 addr) override;
45:
46: // モニタの下請け。(GFTimer から呼ばれる)
47: int MonitorUpdateRTC(TextScreen&, int y) const;
48:
49: private:
50: void Tick1Hz() override;
51:
52: time_t MkTime() const;
53:
54: uint GetSec() const override { return sec; }
55: uint GetMin() const override { return min; }
56: uint GetHour() const override { return hour; }
57: uint GetWday() const override;
58: uint GetMday() const override { return day; }
59: uint GetMon() const override { return mon; }
60: uint GetYear() const override { return year; }
61: uint GetLeap() const override { return year % 4; }
62:
63: void SetSec(uint v) override { sec = v; }
64: void SetMin(uint v) override { min = v; }
65: void SetHour(uint v) override { hour = v; }
66: void SetWday(uint v) override { }
67: void SetMday(uint v) override { day = v; }
68: void SetMon(uint v) override { mon = v; }
69: void SetYear(uint v) override { year = v; }
70: void SetLeap(uint v) override { }
71:
72: // 現在時刻
73: uint year; // 西暦 (ゲタなし)
74: uint mon; // 月 (1-12)
75: uint day;
76: uint hour;
77: uint min;
78: uint sec;
79:
80: // TIME レジスタラッチ
81: uint64 time_nsec {};
82: };
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.