--- nono/vm/romemu_luna.cpp 2026/04/29 17:04:39 1.1.1.3 +++ nono/vm/romemu_luna.cpp 2026/04/29 17:04:47 1.1.1.6 @@ -43,6 +43,9 @@ enum { // コンストラクタ LunaPROMEmuDevice::LunaPROMEmuDevice() { + logname = "prom"; + devname = "PROM"; + // LUNA-I の ROM の特定アドレスを読み出す人がいるので、 // サイズは実 ROM と同じにしておく必要がある。 devlen = 128 * 1024; @@ -73,8 +76,8 @@ LunaPROMEmuDevice::Init() ms.Write16(0x660c); // bne _go ; 起動先あればGO //_prompt: ms.Write32(0x4e722500); // stop #0x2500 ; キー入力を待つ - ms.Write16(0x2039); // move.l (ROMIO_KEYIN),d0 - ms.Write32(ROMIO_KEYIN); // ; キー入力処理 + ms.Write16(0x2039); // move.l (ROMIO_ENTRY),d0 + ms.Write32(ROMIO_ENTRY); // ; キー入力処理 ms.Write16(0x67f4); // beq _prompt ; 起動先なければループ //_go: ms.Write16(0x2040); // move.l d0,a0 ; ジャンプ先を a0 にセット @@ -83,8 +86,10 @@ LunaPROMEmuDevice::Init() ms.Write16(0x4ed0); // jmp (a0) ; ジャンプ // Lv6 (SIO) 割り込みハンドラ - // キーボード割り込みが上がったら STOP 命令から戻ってくるだけでいい + // キーボード割り込みが上がったら KEYIN をコールする ms.SetPtr(&romdata[0x600]); + ms.Write16(0x4ab9); // tst.l (ROMIO_KEYIN) + ms.Write32(ROMIO_KEYIN); // ; キー入力処理 ms.Write16(0x4e73); // rte // MAC アドレス @@ -148,6 +153,9 @@ LunaPROMEmuDevice::Read32(uint32 addr) case ROMIO_CLOSE - baseaddr: return ROM_Close(); + case ROMIO_ENTRY - baseaddr: + return entrypoint; + default: break; } @@ -210,10 +218,15 @@ LunaPROMEmuDevice::ROM_Init() ms.Write32(planemask); // 初期パレット - gBT454->Write8(0, 14 << 4); // select palette - gBT454->Write8(1, 15 << 4); // R=15 - gBT454->Write8(1, 15 << 4); // G=15 - gBT454->Write8(1, 15 << 4); // B=15 + // 偶数番は白(R/G/B=15/15/15)、奇数番は黒(0/0/0)。 + uint8 val = 0xf0; + gBT454->Write8(0, 0); // select palette + for (int i = 0; i < 16; i++) { + gBT454->Write8(1, val); // R + gBT454->Write8(1, val); // G + gBT454->Write8(1, val); // B + val ^= 0xf0; + } // SCSI // BDID の書き込みによってホストデバイスがバスにアタッチされる構造なので。 @@ -251,7 +264,7 @@ LunaPROMEmuDevice::ROM_Init() return 0; } - // 実際の画面更新は EmuConsoleUpdate() を呼ぶことで行われるので、 + // 実際の画面更新は ConsoleUpdate() を呼ぶことで行われるので、 // タイトルを Print してはいるが、エラーなくブートプログラムに制御を // 渡せた場合にはそれすら表示せずにゲストに処理を移す。 // 意図して或いは意図せずプロンプトに降りる場合だけ Update が起きて