|
|
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: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.