|
|
1.1 root 1: //
2: // nono
1.1.1.3 root 3: // Copyright (C) 2020 nono project
4: // Licensed under nono-license.txt
1.1 root 5: //
6:
7: #pragma once
8:
9: #include "device.h"
1.1.1.2 root 10:
11: // VM 種別
12: enum vmtype_t {
13: VMTYPE_NONE = 0,
14: VMTYPE_X68030,
1.1.1.3 root 15: VMTYPE_LUNA1,
1.1.1.2 root 16: VMTYPE_LUNA88K,
17: };
1.1.1.3 root 18: // VM 種別 (ビットマスク表現)
19: enum vmf_t {
20: VMF_NONE = 0,
21: VMF_X68030 = (1 << VMTYPE_X68030),
22: VMF_LUNA1 = (1 << VMTYPE_LUNA1),
23: VMF_LUNA88K = (1 << VMTYPE_LUNA88K),
24:
25: VMF_LUNA = VMF_LUNA1 | VMF_LUNA88K,
1.1.1.8 ! root 26: VMF_M68K = VMF_X68030 | VMF_LUNA1,
1.1.1.3 root 27: VMF_M88K = VMF_LUNA88K,
28: VMF_ALL = 0xffffffff,
29: };
1.1 root 30:
31: class VM
32: {
33: public:
1.1.1.2 root 34: VM();
1.1 root 35: virtual ~VM();
36:
1.1.1.3 root 37: // 明示的な後始末
38: void Dispose();
39:
1.1 root 40: // 動的なコンストラクション
41: bool Create();
42:
43: // 初期化
1.1.1.6 root 44: virtual bool Init();
1.1 root 45:
46: // 設定の適用
47: bool Apply();
48:
1.1.1.7 root 49: // 電源ボタンを押す。(UI スレッドから呼ばれる)
1.1 root 50: virtual void PowerButton() = 0;
51:
52: // 電源ボタンの状態を取得する。
53: // モーメンタリスイッチの場合は常に false。
54: virtual bool IsPowerButton() const { return false; }
55:
1.1.1.8 ! root 56: // ブートページを ROM に切り替える
! 57: void SwitchBootPageToROM(Device *parent) { SwitchBootPage(parent, true); }
! 58: // ブートページを RAM に切り替える
! 59: void SwitchBootPageToRAM(Device *parent) { SwitchBootPage(parent, false); }
1.1 root 60:
1.1.1.7 root 61: // MPU の RESET 命令によるリセット (機種ごとに異なるため)
1.1.1.6 root 62: virtual void ResetByMPU() { }
1.1.1.8 ! root 63:
! 64: protected:
! 65: // ブートページを切り替える (内部用)
! 66: virtual void SwitchBootPage(Device *parent, bool isrom);
1.1 root 67: };
68:
1.1.1.2 root 69: extern std::unique_ptr<VM> gVM;
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.