--- nono/vm/vm_x68k.cpp 2026/04/29 17:04:32 1.1.1.1 +++ nono/vm/vm_x68k.cpp 2026/04/29 17:04:42 1.1.1.3 @@ -1,10 +1,14 @@ // // nono -// Copyright (C) 2020 isaki@NetBSD.org +// Copyright (C) 2020 nono project +// Licensed under nono-license.txt // #include "vm_x68k.h" +#include "bus.h" +#include "config.h" #include "human68k.h" +#include "mpu680x0.h" #include "renderer.h" #include "rp5c15.h" #include "scheduler.h" @@ -18,10 +22,26 @@ // コンストラクタ VM_X68030::VM_X68030() { + // 機種固有パラメータ + // MPU クロックの初期値は機種ごとに異なる。単位は MHz + gConfig->SetDefault("mpu-clock", 25); + // RAM 初期値は MAX にしておく + gConfig->SetDefault("ram-size", 12); + // SPC の入力クロック (5MHz = 200ns) + gConfig->Add("!spc-tCLF", 200); + + // この機種に不要なパラメータはここで削除する + // (機種が決まるより前に全機種の設定の和集合を用意してあるため) + gConfig->Delete("luna-dipsw1"); + gConfig->Delete("luna-dipsw2"); + gConfig->Delete("prom-image"); + // デバイス (順序に注意) - // Scheduler (と BusErrDevice) は親コンストラクタで作成済み。 + // BusErrDevice は親コンストラクタで作成済み。 + + gScheduler.reset(new Scheduler()); // required by * gMPU.reset(new MPU680x0Device(0xff0000)); - gRAM.reset(new RAMDevice()); // required by XIOSpace + gRAM.reset(new RAMDevice()); // required by XIOSpace xiospace.reset(new XIOSpaceDevice()); gKeyboard.reset(new X68030Keyboard()); @@ -39,7 +59,7 @@ VM_X68030::~VM_X68030() { } -// X68030 の電源ボタンを押します。 +// X68030 の電源ボタンを押す。 void VM_X68030::PowerButton() { @@ -64,10 +84,26 @@ VM_X68030::PowerButton() // コンストラクタ VM_RXZ::VM_RXZ() { + // 機種固有パラメータ + // MPU クロックの初期値は機種ごとに異なる。単位は MHz + gConfig->SetDefault("mpu-clock", 25); + // RAM 初期値は MAX にしておく + gConfig->SetDefault("ram-size", 12); + // SPC の入力クロック (5MHz = 200ns) + gConfig->Add("!spc-tCLF", 200); + + // この機種に不要なパラメータはここで削除する + // (機種が決まるより前に全機種の設定の和集合を用意してあるため) + gConfig->Delete("luna-dipsw1"); + gConfig->Delete("luna-dipsw2"); + gConfig->Delete("prom-image"); + // デバイス (順序に注意) - // Scheduler (と BusErrDevice) は親コンストラクタで作成済み。 + // BusErrDevice は親コンストラクタで作成済み。 + + gScheduler.reset(new Scheduler()); // required by * gMPU.reset(new MPU680x0Device(0)); - gRAM.reset(new RAMDevice()); // required by Human68k + gRAM.reset(new RAMDevice()); // required by Human68k gRTC.reset(new RP5C15Device()); human68k.reset(new Human68k()); }