--- nono/vm/romemu_luna1.cpp 2026/04/29 17:05:41 1.1.1.12 +++ nono/vm/romemu_luna1.cpp 2026/04/29 17:05:59 1.1.1.14 @@ -43,11 +43,15 @@ // 4100'0010.L メモリサイズ // *4100'00b8.L プレーンマスク格納先アドレス (実 ROM は RAM をさしている) // 4100'00bc.L プレーンマスク +// *4100'00d4.L 'x' コマンドの引数バッファアドレス // // 4100'0400 リセットハンドラ +// 4100'0500 Lv5 (Sysclk) 割り込みハンドラ // 4100'0600 Lv6 (SIO) 割り込みハンドラ // 4100'0700 Lv7 (NMI) 割り込みハンドラ // 4100'0800 デフォルトハンドラ +// 4100'0900 サブルーチン +// 4100'1000.B[64] 'x' コマンドの引数バッファ(ダミー) // // *4101'ffd8〜 "ENADDR",0,0 // *4101'ffe0〜 MACアドレス(文字列形式、英大文字、区切りなし) @@ -101,6 +105,8 @@ Luna1PROMEmuDevice::Init() roms.SetOffset(0xb8); roms.Write4(0x410000bc); // +b8: プレーンマスク格納先 // +bc: 値は ROM_Init() でセット + roms.SetOffset(0xd4); + roms.Write4(0x41001000); // +d4: 'x' コマンドの引数(実際はRAM) // リセット時に実行する命令 roms.SetOffset(0x400); @@ -134,11 +140,11 @@ Luna1PROMEmuDevice::Init() roms.Write4(ROMIO_CLKCNT); roms.Write2(0x4e73); // rte - // Lv6 (SIO) 割り込みハンドラ - // キーボード割り込みが上がったら KEYIN をコールする + // Lv6 (SIO) 割り込みハンドラ。 + // この中でコマンドなどを処理する。 roms.SetOffset(0x600); - roms.Write2(0x4ab9); // tst.l (ROMIO_KEYIN) - roms.Write4(ROMIO_KEYIN); // ; キー入力処理 + roms.Write2(0x4ab9); // tst.l (ROMIO_SIOINTR) + roms.Write4(ROMIO_SIOINTR); // ; キー入力処理 roms.Write2(0x4e73); // rte // NMI のハンドラ @@ -197,7 +203,7 @@ Luna1PROMEmuDevice::ROM_InitMD() // プレーン数(1,4,8)をプレーンマスク(0x01, 0x0f, 0xff)に int nplane = bt45x->GetPlaneCount(); - int planemask = (1 << nplane) - 1; + int planemask = (1U << nplane) - 1; // プレーンマスク。実際は RAM に書き込まれるがとりあえず roms.SetOffset(0xbc); roms.Write4(planemask);