|
|
1.1 ! root 1: // ! 2: // nono ! 3: // Copyright (C) 2024 nono project ! 4: // Licensed under nono-license.txt ! 5: // ! 6: ! 7: // ! 8: // Goldfish TTY ! 9: // ! 10: ! 11: #pragma once ! 12: ! 13: #include "device.h" ! 14: #include "message.h" ! 15: #include <deque> ! 16: ! 17: class GFPICDevice; ! 18: class HostCOMDevice; ! 19: class MainbusDevice; ! 20: ! 21: class GFTTYDevice : public IODevice ! 22: { ! 23: using inherited = IODevice; ! 24: ! 25: static const uint32 PUT_CHAR = 0x00; ! 26: static const uint32 BYTES_READY = 0x04; ! 27: static const uint32 COMMAND = 0x08; ! 28: static const uint32 DATA_PTR = 0x10; ! 29: static const uint32 DATA_LEN = 0x14; ! 30: static const uint32 VERSION = 0x20; ! 31: ! 32: static const uint32 CMD_INT_DISABLE = 0x00; ! 33: static const uint32 CMD_INT_ENABLE = 0x01; ! 34: static const uint32 CMD_WRITE_BUFFER = 0x02; ! 35: static const uint32 CMD_READ_BUFFER = 0x03; ! 36: ! 37: public: ! 38: GFTTYDevice(); ! 39: ~GFTTYDevice() override; ! 40: ! 41: bool Create() override; ! 42: void SetLogLevel(int loglevel_) override; ! 43: bool Init() override; ! 44: void ResetHard(bool poweron) override; ! 45: ! 46: busdata Read32(uint32 addr) override; ! 47: busdata Write32(uint32 addr, uint32 data) override; ! 48: busdata Peek8(uint32 addr) override; ! 49: ! 50: private: ! 51: void Command(uint32); ! 52: void ChangeInterrupt(); ! 53: ! 54: // シリアルから1バイト受信のメッセージとイベントコールバック ! 55: void HostRxCallback(); ! 56: void RxMessage(MessageID, uint32); ! 57: ! 58: // 受信キュー ! 59: std::deque<uint8> rxq {}; ! 60: ! 61: uint32 dma_ptr {}; ! 62: uint32 dma_len {}; ! 63: bool intr_enable {}; ! 64: ! 65: std::unique_ptr<HostCOMDevice> hostcom /*{}*/; ! 66: ! 67: GFPICDevice *gfpic {}; ! 68: MainbusDevice *mainbus {}; ! 69: }; ! 70: ! 71: static inline GFTTYDevice *GetGFTTYDevice() { ! 72: return Object::GetObject<GFTTYDevice>(OBJ_GFTTY); ! 73: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.