Annotation of nono/vm/vm_luna.cpp, revision 1.1.1.16

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.10  root        7: //
                      8: // VM (LUNA)
                      9: //
                     10: 
1.1       root       11: #include "vm_luna.h"
1.1.1.2   root       12: #include "config.h"
1.1.1.12  root       13: #include "dipsw.h"
1.1       root       14: #include "lcd.h"
                     15: #include "lunakbd.h"
1.1.1.13  root       16: #include "mainbus_luna.h"
1.1.1.12  root       17: #include "mpu64180.h"
1.1.1.2   root       18: #include "mpu680x0.h"
                     19: #include "mpu88xx0.h"
1.1.1.10  root       20: #include "nmi.h"
                     21: #include "power.h"
1.1       root       22: #include "renderer.h"
1.1.1.14  root       23: #include "ssg.h"
1.1.1.12  root       24: #include "xpbus.h"
1.1       root       25: 
1.1.1.5   root       26: //
                     27: // LUNA 共通部
                     28: //
                     29: 
                     30: // コンストラクタ
1.1.1.13  root       31: VM_LUNA::VM_LUNA(const char *name_)
                     32:        : inherited(name_)
1.1.1.5   root       33: {
1.1.1.16! root       34:        // 実時間に同期したほうが便利。
        !            35:        gConfig->SetDefault("clock-sync", "real");
        !            36: 
1.1.1.10  root       37:        // RTC epoch は NetBSD/luna68k, OpenBSD/luna88k をデフォルトにしておく。
                     38:        gConfig->SetDefault("rtc-epoch-year", 1970);
                     39: 
1.1.1.5   root       40:        // LUNA 共通だしここで作成しておく
1.1.1.13  root       41:        NEWDV(Power, new LunaPowerDevice());
1.1.1.12  root       42:        NEWDV(Dipsw, new LunaDipswDevice());
1.1.1.13  root       43:        NEWDV(Keyboard, new LunaKeyboard());
                     44:        NEWDV(LCD, new LCDDevice());
1.1.1.12  root       45:        NEWDV(MPU64180, new MPU64180Device());
1.1.1.13  root       46:        NEWDV(NMI, new NMIDevice());
                     47:        NEWDV(Renderer, new LunaRenderer());
1.1.1.12  root       48:        NEWDV(XPbus, new XPbusDevice());
1.1.1.5   root       49: }
                     50: 
                     51: // デストラクタ
                     52: VM_LUNA::~VM_LUNA()
                     53: {
                     54: }
                     55: 
                     56: 
                     57: //
                     58: // LUNA-I
                     59: //
                     60: 
1.1       root       61: // コンストラクタ
1.1.1.5   root       62: VM_LUNA1::VM_LUNA1()
1.1.1.13  root       63:        : inherited("LUNA-I")
1.1       root       64: {
1.1.1.2   root       65:        // 機種固有パラメータ
1.1.1.15  root       66:        // MPU 種別。
                     67:        gConfig->SetDefault("mpu-type", "68030");
1.1.1.2   root       68:        // MPU クロックの初期値は機種ごとに異なる。単位は MHz
                     69:        gConfig->SetDefault("mpu-clock", 20);
                     70:        // RAM 初期値は MAX にしておく
                     71:        gConfig->SetDefault("ram-size", 16);
                     72:        // SPC の入力クロック (おそらく 6.144MHz = 163ns が入ってる)
                     73:        gConfig->Add("!spc-tCLF", 163);
                     74:        // LUNA-I のクロック割り込みは 60Hz
1.1.1.13  root       75:        gConfig->Add("!sysclk-freq", 60);
1.1.1.2   root       76: 
1.1.1.13  root       77:        // デバイス
1.1.1.15  root       78:        NEWDV(MPU, NewMPU680x0Device());
1.1.1.13  root       79:        NEWDV(Mainbus, new Luna1Mainbus());
1.1.1.14  root       80:        NEWDV(SSG, new SSGDevice());
                     81: 
                     82:        // バーストアクセスたぶんあり
1.1.1.15  root       83:        auto mpu680x0 = GetMPU680x0Device(pMPU.get());
                     84:        if (mpu680x0) {
                     85:                mpu680x0->EnableBurstAccess(true);
                     86:        }
1.1       root       87: }
                     88: 
                     89: // デストラクタ
1.1.1.5   root       90: VM_LUNA1::~VM_LUNA1()
1.1       root       91: {
                     92: }
                     93: 
1.1.1.10  root       94: 
1.1       root       95: //
1.1.1.12  root       96: // LUNA-88K
1.1       root       97: //
                     98: 
                     99: // コンストラクタ
                    100: VM_LUNA88K::VM_LUNA88K()
1.1.1.13  root      101:        : inherited("LUNA-88K")
1.1       root      102: {
1.1.1.2   root      103:        // 機種固有パラメータ
                    104:        // MPU クロックの初期値は機種ごとに異なる。単位は MHz
                    105:        gConfig->SetDefault("mpu-clock", 25);
                    106:        // RAM 初期値は MAX にしておく
1.1.1.3   root      107:        gConfig->SetDefault("ram-size", 64);
1.1.1.2   root      108:        // SPC の入力クロック (XXX LUNA-I と同じ?)
                    109:        gConfig->Add("!spc-tCLF", 163);
1.1.1.12  root      110:        // LUNA-II, LUNA-88K, LUNA-88K2 のクロック割り込みは 100Hz らしい
1.1.1.13  root      111:        gConfig->Add("!sysclk-freq", 100);
1.1.1.2   root      112: 
1.1       root      113:        // デバイス (順序に注意)
1.1.1.10  root      114:        NEWDV(MPU, new MPU88xx0Device());
1.1.1.13  root      115:        NEWDV(Mainbus, new Luna88kMainbus());
1.1.1.14  root      116: 
                    117:        // バーストアクセスあり (m88k では常に有効)
1.1       root      118: }
                    119: 
                    120: // デストラクタ
                    121: VM_LUNA88K::~VM_LUNA88K()
                    122: {
                    123: }

unix.superglobalmegacorp.com

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