Annotation of nono/vm/vm_x68k.cpp, revision 1.1.1.8

1.1       root        1: //
                      2: // nono
1.1.1.2   root        3: // Copyright (C) 2020 nono project
                      4: // Licensed under nono-license.txt
1.1       root        5: //
                      6: 
1.1.1.8 ! root        7: //
        !             8: // VM (X68030)
        !             9: //
        !            10: 
1.1       root       11: #include "vm_x68k.h"
1.1.1.2   root       12: #include "bus.h"
                     13: #include "config.h"
1.1.1.5   root       14: #include "dmac.h"
                     15: #include "fdc.h"
1.1       root       16: #include "human68k.h"
1.1.1.4   root       17: #include "interrupt.h"
1.1.1.7   root       18: #include "mainapp.h"
1.1.1.5   root       19: #include "mfp.h"
1.1.1.2   root       20: #include "mpu680x0.h"
1.1.1.8 ! root       21: #include "nmi.h"
1.1.1.5   root       22: #include "pedec.h"
                     23: #include "pluto.h"
                     24: #include "pio.h"
1.1.1.8 ! root       25: #include "power.h"
1.1       root       26: #include "renderer.h"
                     27: #include "rp5c15.h"
1.1.1.6   root       28: #include "romimg_x68k.h"
1.1       root       29: #include "scheduler.h"
1.1.1.5   root       30: #include "spc.h"
1.1       root       31: #include "x68kkbd.h"
                     32: #include "xiospace.h"
                     33: 
                     34: // コンストラクタ
                     35: VM_X68030::VM_X68030()
                     36: {
1.1.1.2   root       37:        // 機種固有パラメータ
                     38:        // MPU クロックの初期値は機種ごとに異なる。単位は MHz
                     39:        gConfig->SetDefault("mpu-clock", 25);
                     40:        // RAM 初期値は MAX にしておく
                     41:        gConfig->SetDefault("ram-size", 12);
                     42:        // SPC の入力クロック (5MHz = 200ns)
                     43:        gConfig->Add("!spc-tCLF", 200);
                     44: 
1.1.1.3   root       45:        // この機種に不要なパラメータはここで削除する
                     46:        // (機種が決まるより前に全機種の設定の和集合を用意してあるため)
                     47:        gConfig->Delete("luna-dipsw1");
                     48:        gConfig->Delete("luna-dipsw2");
                     49:        gConfig->Delete("prom-image");
1.1.1.8 ! root       50:        gConfig->Delete("rtc-epoch-year");
1.1.1.3   root       51: 
1.1       root       52:        // デバイス (順序に注意)
1.1.1.2   root       53:        // BusErrDevice は親コンストラクタで作成済み。
                     54: 
1.1.1.8 ! root       55:        NEWDV(MPU, new MPU680x0Device());
        !            56:        NEWDV(Interrupt, new X68030Interrupt());
        !            57:        NEWDV(RAM, new RAMDevice());                                    // required by XIOSpace
        !            58:        NEWDV(XIOSpace, new XIOSpaceDevice());
        !            59:        NEWDV(IPLROM0, new IPLROM0Device());
        !            60: 
        !            61:        NEWDV(NMI, new NMIDevice());
        !            62:        NEWDV(Keyboard, new X68030Keyboard());
        !            63:        NEWDV(Renderer, new X68030Renderer());
1.1       root       64: 
1.1.1.7   root       65:        if (gMainApp.human_mode) {
1.1.1.8 ! root       66:                NEWDV(Human68k, new Human68k());
1.1.1.7   root       67:        }
                     68: 
1.1       root       69:        // 割り当て
                     70:        // 今は拡張メモリがないので、今は上位8ビット全領域がミラーになっている。
                     71:        for (int i = 0; i < countof(::devtable); i++) {
1.1.1.8 ! root       72:                ::devtable[i] = gXIOSpace;
1.1       root       73:        }
                     74: }
                     75: 
                     76: // デストラクタ
                     77: VM_X68030::~VM_X68030()
                     78: {
                     79: }
                     80: 
1.1.1.2   root       81: // X68030 の電源ボタンを押す。
1.1       root       82: void
                     83: VM_X68030::PowerButton()
                     84: {
                     85:        // 電源       ボタン
                     86:        // ON   OFF->ON         電源オフ割り込みをネゲート?
                     87:        // ON   ON ->OFF        電源オフ割り込みをアサート?
                     88:        // OFF  OFF->ON         電源オン
                     89:        // OFF  ON ->OFF        (通常はあり得ないはず)
                     90: 
                     91:        // ボタンの状態を更新して..
                     92:        power_button = !power_button;
                     93: 
1.1.1.6   root       94:        // スケジューラに指示
1.1.1.8 ! root       95:        gPower->MakePowerOn();
1.1.1.6   root       96: }
                     97: 
                     98: // ブートページを切り替える。
                     99: void
                    100: VM_X68030::SwitchBootPage(Device *parent, bool isrom)
                    101: {
1.1.1.7   root      102:        if (gMainApp.human_mode) {
                    103:                // Human モードではブートページを RAM に見せる。
                    104:                // 今のところ。
                    105:                return;
                    106:        }
                    107: 
1.1.1.6   root      108:        // 共通処理
                    109:        inherited::SwitchBootPage(parent, isrom);
                    110: 
                    111:        // X68030 では XIOSpace が担当している
                    112:        gXIOSpace->SwitchBootPage(isrom);
1.1       root      113: }
                    114: 
1.1.1.5   root      115: // リセットについて
                    116: //
                    117: //           PWRRESET
                    118: // 電源オン ----------+--> VIPS
                    119: // (7505)             +--> VideoCtlr
                    120: //                    +--> OSCIAN2
                    121: //                    |
                    122: //                    |   +------+
                    123: //                    +-->|      |
                    124: // 本体      SWRESET      | YUKI | IPLRESET
                    125: // リセット ------------->|      |-----------> FPU
                    126: // スイッチ               +------+
                    127: //                         |
                    128: //                         ▽
                    129: //                   RESET |
                    130: //                         |<-> MPU (68030)
                    131: //                         +--> PPI
                    132: //                         +--> PEDEC
                    133: //                         +--> SPC
                    134: //                         +--> ADPCM
                    135: //                         +--> FDC
                    136: //                         +--> MFP
                    137: //                         |
                    138: //                         |      EXRESET
                    139: //                         +---|>-----------> 外部バス
                    140: //                         ▽
                    141: //                SYSRESET |
                    142: //                         |<-> SAKI  ---+
                    143: //                         |             | BEC0,BEC1
                    144: //                         +--> DMAC  <--+
                    145: //                         +--> CYNTHIA
                    146: // リセットされない?
                    147: // o CACHY
                    148: // o YM2151 (FM音源)
                    149: // o SCC
                    150: 
                    151: // MPU の RESET 命令によるリセット
                    152: void
                    153: VM_X68030::ResetByMPU()
                    154: {
1.1.1.8 ! root      155:        gDMAC->ResetHard(false);
        !           156:        gFDC->ResetHard(false);
        !           157:        gMFP->ResetHard(false);
        !           158:        gPEDEC->ResetHard(false);
        !           159:        gPluto->ResetHard(false);
        !           160:        gPPI->ResetHard(false);
        !           161:        gSPC->ResetHard(false);
1.1.1.5   root      162: }

unix.superglobalmegacorp.com

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