|
|
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.10 root 34: // RTC epoch は NetBSD/luna68k, OpenBSD/luna88k をデフォルトにしておく。
35: gConfig->SetDefault("rtc-epoch-year", 1970);
36:
1.1.1.5 root 37: // LUNA 共通だしここで作成しておく
1.1.1.13 root 38: NEWDV(Power, new LunaPowerDevice());
1.1.1.12 root 39: NEWDV(Dipsw, new LunaDipswDevice());
1.1.1.13 root 40: NEWDV(Keyboard, new LunaKeyboard());
41: NEWDV(LCD, new LCDDevice());
1.1.1.12 root 42: NEWDV(MPU64180, new MPU64180Device());
1.1.1.13 root 43: NEWDV(NMI, new NMIDevice());
44: NEWDV(Renderer, new LunaRenderer());
1.1.1.12 root 45: NEWDV(XPbus, new XPbusDevice());
1.1.1.5 root 46: }
47:
48: // デストラクタ
49: VM_LUNA::~VM_LUNA()
50: {
51: }
52:
53:
54: //
55: // LUNA-I
56: //
57:
1.1 root 58: // コンストラクタ
1.1.1.5 root 59: VM_LUNA1::VM_LUNA1()
1.1.1.13 root 60: : inherited("LUNA-I")
1.1 root 61: {
1.1.1.2 root 62: // 機種固有パラメータ
1.1.1.15! root 63: // MPU 種別。
! 64: gConfig->SetDefault("mpu-type", "68030");
1.1.1.2 root 65: // MPU クロックの初期値は機種ごとに異なる。単位は MHz
66: gConfig->SetDefault("mpu-clock", 20);
67: // RAM 初期値は MAX にしておく
68: gConfig->SetDefault("ram-size", 16);
69: // SPC の入力クロック (おそらく 6.144MHz = 163ns が入ってる)
70: gConfig->Add("!spc-tCLF", 163);
71: // LUNA-I のクロック割り込みは 60Hz
1.1.1.13 root 72: gConfig->Add("!sysclk-freq", 60);
1.1.1.2 root 73:
1.1.1.13 root 74: // デバイス
1.1.1.15! root 75: NEWDV(MPU, NewMPU680x0Device());
1.1.1.13 root 76: NEWDV(Mainbus, new Luna1Mainbus());
1.1.1.14 root 77: NEWDV(SSG, new SSGDevice());
78:
79: // バーストアクセスたぶんあり
1.1.1.15! root 80: auto mpu680x0 = GetMPU680x0Device(pMPU.get());
! 81: if (mpu680x0) {
! 82: mpu680x0->EnableBurstAccess(true);
! 83: }
1.1 root 84: }
85:
86: // デストラクタ
1.1.1.5 root 87: VM_LUNA1::~VM_LUNA1()
1.1 root 88: {
89: }
90:
1.1.1.10 root 91:
1.1 root 92: //
1.1.1.12 root 93: // LUNA-88K
1.1 root 94: //
95:
96: // コンストラクタ
97: VM_LUNA88K::VM_LUNA88K()
1.1.1.13 root 98: : inherited("LUNA-88K")
1.1 root 99: {
1.1.1.2 root 100: // 機種固有パラメータ
101: // MPU クロックの初期値は機種ごとに異なる。単位は MHz
102: gConfig->SetDefault("mpu-clock", 25);
103: // RAM 初期値は MAX にしておく
1.1.1.3 root 104: gConfig->SetDefault("ram-size", 64);
1.1.1.2 root 105: // SPC の入力クロック (XXX LUNA-I と同じ?)
106: gConfig->Add("!spc-tCLF", 163);
1.1.1.12 root 107: // LUNA-II, LUNA-88K, LUNA-88K2 のクロック割り込みは 100Hz らしい
1.1.1.13 root 108: gConfig->Add("!sysclk-freq", 100);
1.1.1.2 root 109:
1.1 root 110: // デバイス (順序に注意)
1.1.1.10 root 111: NEWDV(MPU, new MPU88xx0Device());
1.1.1.13 root 112: NEWDV(Mainbus, new Luna88kMainbus());
1.1.1.14 root 113:
114: // バーストアクセスあり (m88k では常に有効)
1.1 root 115: }
116:
117: // デストラクタ
118: VM_LUNA88K::~VM_LUNA88K()
119: {
120: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.