|
|
1.1 root 1: //
2: // nono
1.1.1.3 root 3: // Copyright (C) 2020 nono project
4: // Licensed under nono-license.txt
1.1 root 5: //
6:
7: #pragma once
8:
9: #include "device.h"
1.1.1.7 root 10: #include "monitor.h"
1.1 root 11:
12: class LCDDevice : public Device
13: {
1.1.1.3 root 14: using inherited = Device;
1.1 root 15: public:
16: LCDDevice();
1.1.1.6 root 17: virtual ~LCDDevice() override;
1.1 root 18:
1.1.1.3 root 19: bool PowerOff() override;
1.1.1.5 root 20: void ResetHard() override;
1.1 root 21:
22: // リセット信号はない
23:
1.1.1.8 ! root 24: // R/~W を val にセットする。true=R、false=W
1.1 root 25: void SetRW(bool val);
26:
1.1.1.3 root 27: // RS を val にセットする。
1.1.1.8 ! root 28: // false=コマンド(W)/ステータス(R)レジスタ
! 29: // true=データレジスタ
! 30: void SetRS(bool val);
1.1 root 31:
1.1.1.3 root 32: // E を val にセットする。
1.1.1.8 ! root 33: void SetE(bool val);
1.1 root 34:
35: // E, RS, R/W 線の状態を取得する。
36: // PIO1 のポートC 読み込み用。
37: uint8 Get() const;
38:
1.1.1.3 root 39: // 読み込む。
1.1 root 40: uint8 Read();
41:
1.1.1.3 root 42: // 書き込む。
1.1 root 43: void Write(uint8 data);
44:
1.1.1.2 root 45: // PIO1 のポートA ピーク用
46: uint8 Peek() const;
47:
1.1.1.4 root 48: // バッファを取得 (内容表示用)
49: const uint8 *GetDDRAM() const { return ddram; }
50:
51: // フォントを取得
52: const uint8 *GetFont(int ch) const;
53:
1.1 root 54: private:
1.1.1.7 root 55: DECLARE_MONITOR_CALLBACK(MonitorUpdate);
56:
1.1.1.8 ! root 57: // 現在のアドレスでデータレジスタにラッチ
! 58: void LatchData();
! 59: // アドレスカウンタ設定
! 60: void SetAddr(int addr, bool is_cgram);
! 61: // アドレスカウンタを次へ進める
! 62: void NextAddr();
! 63:
! 64: // 信号線
1.1.1.5 root 65: bool en {}; // Enable
1.1.1.8 ! root 66: bool rw {}; // true=R false=W
! 67: bool rs {}; // レジスタセレクト true=Data false=Command/Status
1.1.1.5 root 68:
1.1.1.8 ! root 69: bool addr_inc {}; // アドレス・インクリメント true=inc false=dec
1.1.1.5 root 70: bool disp_char {}; // 文字表示をするか
1.1.1.4 root 71:
1.1.1.8 ! root 72: // データレジスタ
! 73: uint8 data_reg {};
! 74:
! 75: // アドレスカウンタ
! 76: int addr_counter {};
! 77: bool addr_is_cgram {}; // addr が CGRAM アドレスなら true
! 78:
! 79: uint8 ddram[0x80] {};
! 80: uint8 cgram[0x40] {};
1.1.1.4 root 81:
1.1.1.7 root 82: Monitor monitor { this };
83:
1.1.1.4 root 84: static const uint8 CGROM[12 * 16 * 8];
1.1 root 85: };
86:
1.1.1.2 root 87: extern std::unique_ptr<LCDDevice> gLCD;
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.