|
|
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());
1.1.1.17 root 47: NEWDV(Renderer, new LunaVideoRenderer());
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: // LUNA-I のクロック割り込みは 60Hz
1.1.1.13 root 73: gConfig->Add("!sysclk-freq", 60);
1.1.1.2 root 74:
1.1.1.13 root 75: // デバイス
1.1.1.15 root 76: NEWDV(MPU, NewMPU680x0Device());
1.1.1.13 root 77: NEWDV(Mainbus, new Luna1Mainbus());
1.1.1.14 root 78: NEWDV(SSG, new SSGDevice());
79:
80: // バーストアクセスたぶんあり
1.1.1.15 root 81: auto mpu680x0 = GetMPU680x0Device(pMPU.get());
82: if (mpu680x0) {
83: mpu680x0->EnableBurstAccess(true);
84: }
1.1 root 85: }
86:
87: // デストラクタ
1.1.1.5 root 88: VM_LUNA1::~VM_LUNA1()
1.1 root 89: {
90: }
91:
1.1.1.10 root 92:
1.1 root 93: //
1.1.1.12 root 94: // LUNA-88K
1.1 root 95: //
96:
97: // コンストラクタ
98: VM_LUNA88K::VM_LUNA88K()
1.1.1.13 root 99: : inherited("LUNA-88K")
1.1 root 100: {
1.1.1.2 root 101: // 機種固有パラメータ
102: // MPU クロックの初期値は機種ごとに異なる。単位は MHz
103: gConfig->SetDefault("mpu-clock", 25);
104: // RAM 初期値は MAX にしておく
1.1.1.3 root 105: gConfig->SetDefault("ram-size", 64);
1.1.1.12 root 106: // LUNA-II, LUNA-88K, LUNA-88K2 のクロック割り込みは 100Hz らしい
1.1.1.13 root 107: gConfig->Add("!sysclk-freq", 100);
1.1.1.2 root 108:
1.1 root 109: // デバイス (順序に注意)
1.1.1.10 root 110: NEWDV(MPU, new MPU88xx0Device());
1.1.1.13 root 111: NEWDV(Mainbus, new Luna88kMainbus());
1.1.1.14 root 112:
113: // バーストアクセスあり (m88k では常に有効)
1.1 root 114: }
115:
116: // デストラクタ
117: VM_LUNA88K::~VM_LUNA88K()
118: {
119: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.