Annotation of nono/vm/vm.h, revision 1.1.1.1

1.1       root        1: //
                      2: // nono
                      3: // Copyright (C) 2017 [email protected]
                      4: //
                      5: 
                      6: #pragma once
                      7: 
                      8: #include "device.h"
                      9: #include "scsi.h"
                     10: 
                     11: class VM
                     12: {
                     13:  public:
                     14:        // VM 種別
                     15:        enum vmtype_t {
                     16:                TYPE_NONE = 0,
                     17:                TYPE_X68030,
                     18:                TYPE_LUNA,
                     19:                TYPE_RXZ,               // human68k .r .x .z console emulation
                     20:        };
                     21: 
                     22:  public:
                     23:        VM(vmtype_t);
                     24:        virtual ~VM();
                     25: 
                     26:        // 動的なコンストラクション
                     27:        bool Create();
                     28: 
                     29:        // 初期化
                     30:        bool Init();
                     31: 
                     32:        // 設定の適用
                     33:        bool Apply();
                     34: 
                     35:        // VM 種別を取得する。
                     36:        vmtype_t GetType() const { return vmtype; }
                     37: 
                     38:        // 電源ボタンを押す。
                     39:        // XXX この辺はもうちょっと検討したほうがいい
                     40:        virtual void PowerButton() = 0;
                     41: 
                     42:        // 電源ボタンの状態を取得する。
                     43:        // モーメンタリスイッチの場合は常に false。
                     44:        virtual bool IsPowerButton() const { return false; }
                     45: 
                     46:        // VM の全デバイスの電源をオフ
                     47:        bool DevicePowerOff();
                     48: 
                     49:        // VM 電源オフ時のコールバックを設定する。(GUI から呼ばれる)
                     50:        void SetPowerOffCallback(void (*callback)());
                     51: 
                     52:        // 外部リセットボタンを押す。
                     53:        void ResetButton() { ResetHard(); }
                     54: 
                     55:        // ハードウェアリセット
                     56:        void ResetHard();
                     57: 
                     58:        // MPU の RESET 命令によるリセット
                     59:        void ResetSoft();
                     60: 
                     61:  protected:
                     62:        // VM の全デバイスの電源をオン
                     63:        bool DevicePowerOn();
                     64: 
                     65:        vmtype_t vmtype {};
                     66:        BusErrDevice *buserr = NULL;
                     67:        void (*poweroff_callback)() = NULL;
                     68: };
                     69: 
                     70: class VM_X68030 : public VM
                     71: {
                     72:        typedef VM inherited;
                     73:  public:
                     74:        VM_X68030();
                     75:        virtual ~VM_X68030();
                     76: 
                     77:        // 電源ボタンを押す
                     78:        virtual void PowerButton();
                     79: 
                     80:        // 電源ボタンの状態を取得。オンなら true。
                     81:        bool IsPowerButton() const { return power_button; }
                     82: 
                     83:  private:
                     84:        // 電源ボタンの状態。オンなら true。
                     85:        bool power_button = false;
                     86: 
                     87:        // デバイス
                     88:        XIOSpaceDevice *xiospace = NULL;
                     89: };
                     90: 
                     91: class VM_LUNA : public VM
                     92: {
                     93:        typedef VM inherited;
                     94:  public:
                     95:        VM_LUNA();
                     96:        virtual ~VM_LUNA();
                     97: 
                     98:        // 電源ボタンを押す。
                     99:        virtual void PowerButton();
                    100: 
                    101:  private:
                    102:        // デバイスマップ用の識別子
                    103:        enum {
                    104:                NONE,
                    105:                BUSERR,
                    106:                RAM,
                    107:                PROM,
                    108:                MK48,
                    109:                PIO0,
                    110:                PIO1,
                    111:                SIO,
                    112:                TAS,
                    113:                SYSCLK,
                    114:                ZRAM,
                    115:                MROM,
                    116:                BITMAP,
                    117:                BT454,
                    118:                CRTC2,
                    119:                SCSI,
                    120:                LANCE,
                    121:        };
                    122: 
                    123:        CRTC2Device *crtc2 = NULL;
                    124:        MK48T02Device *mk48 = NULL;
                    125:        PIO0Device *pio0 = NULL;
                    126:        PIO1Device *pio1 = NULL;
                    127:        SysClkDevice *sysclk = NULL;
                    128:        MaskROMDevice *maskrom = NULL;
                    129:        NullDevice *nulldev = NULL;
                    130: 
                    131:        static const uint8 maptable[256];
                    132: };
                    133: 
                    134: class VM_RXZ : public VM
                    135: {
                    136:        typedef VM inherited;
                    137:  public:
                    138:        VM_RXZ(const char *file, const char *arg);
                    139:        virtual ~VM_RXZ();
                    140: 
                    141:        // 電源ボタンを押す。
                    142:        virtual void PowerButton();
                    143: 
                    144:  private:
                    145:        Human68k *human68k = NULL;
                    146: };
                    147: 
                    148: extern VM *gVM;

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.