--- nono/vm/lcd.cpp 2026/04/29 17:05:10 1.1.1.9 +++ nono/vm/lcd.cpp 2026/04/29 17:05:29 1.1.1.12 @@ -11,12 +11,9 @@ #include "lcd.h" #include "uimessage.h" -// グローバル参照用 -LCDDevice *gLCD; - // コンストラクタ LCDDevice::LCDDevice() - : inherited("LCD") + : inherited(OBJ_LCD) { monitor.func = ToMonitorCallback(&LCDDevice::MonitorUpdate); monitor.SetSize(67, 3); @@ -26,7 +23,6 @@ LCDDevice::LCDDevice() // デストラクタ LCDDevice::~LCDDevice() { - gLCD = NULL; } // リセット @@ -63,14 +59,14 @@ void LCDDevice::SetRS(bool val) { rs = val; - putlog(2, "RS = %d", rs); + putlog(2, "RS = %u", rs); } void LCDDevice::SetE(bool val) { en = val; - putlog(2, "E = %d", en); + putlog(2, "E = %u", en); } // E, RS, R/W 線の状態を取得する (PIO1 のポートC 読み込み用) @@ -96,7 +92,7 @@ LCDDevice::LatchData() // アドレスカウンタを設定 void -LCDDevice::SetAddr(int addr, bool is_cgram) +LCDDevice::SetAddr(uint addr, bool is_cgram) { // アドレスカウンタをセットするとデータレジスタにラッチされる addr_counter = addr; @@ -184,20 +180,20 @@ LCDDevice::Write(uint8 data) if ((data & 0x80)) { SetAddr(data & 0x7f, false); - putlog(1, "DDRAM アドレスセット $%02x", addr_counter); + putlog(1, "DDRAM Address <- $%02x", addr_counter); } else if ((data & 0x40)) { SetAddr(data & 0x3f, true); - putlog(1, "CGRAM アドレスセット $%02x", addr_counter); + putlog(1, "CGRAM Address <- $%02x", addr_counter); } else if ((data & 0x20)) { // ファンクション・セット // 0x38 (8ビットバス、2行表示、8ライン/行)モードのみサポート if (data != 0x38) { - putlog(0, "コマンド書き込み $%02x ファンクションセット(未実装)", - data); + putlog(0, "Write Command $%02x Function Set (NOT IMPLEMENTED)", data); } } else if ((data & 0x10)) { // カーソル移動 - putlog(0, "コマンド書き込み $%02x カーソル移動(未実装)", data); + putlog(0, "Write Command $%02x Move Cursor (NOT IMPLEMENTED)", + data); } else if ((data & 0x08)) { // 表示ON/OFF // 文字表示 ON/OFF のみサポート @@ -220,18 +216,18 @@ LCDDevice::Write(uint8 data) } else { // $00 が書き込まれるんだけど、データシートにはないんだよね。 // 無視していいかな。 - putlog(2, "未定義書き込み $%02x", data); + putlog(2, "Write undefined $%02x", data); } } else { // データ書き込み if (addr_is_cgram) { // cgram は 5 bit 有効で左詰めで格納 cgram[addr_counter] = data << 3; - putlog(1, "CGRAM データ書き込み $%02x <- $%02x", + putlog(1, "CGRAM Data $%02x <- $%02x", addr_counter, data); } else { ddram[addr_counter] = data; - putlog(1, "DDRAM データ書き込み X=%d Y=%d <- $%02x", + putlog(1, "DDRAM Data X=%2u Y=%u <- $%02x", addr_counter % 0x40, addr_counter / 0x40, data); } NextAddr(); @@ -270,7 +266,7 @@ LCDDevice::MonitorUpdate(Monitor *, Text // 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f |0123456789abcdef| screen.Clear(); - screen.Print(0, 0, "RW=%c RS=%d E=%d", rw ? 'R' : 'W', rs, en); + screen.Print(0, 0, "RW=%c RS=%u E=%u", rw ? 'R' : 'W', rs, en); for (int y = 0; y < 2; y++) { memcpy(buf, &ddram[y * 0x40], 16); @@ -330,7 +326,7 @@ LCDDevice::MonitorUpdate(Monitor *, Text // に呼び出すこと。また CGRAM 領域のように動的に変化する場合もあるため // 呼び出し側でこの読み出し値をキャッシュしないこと。 const uint8 * -LCDDevice::GetFont(int ch) const +LCDDevice::GetFont(uint ch) const { // CGRAM 部分 if (ch < 0x10) {