--- 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:49 1.1.1.13 @@ -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); @@ -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);