|
|
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.