|
|
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:
7: #include "vm_x68k.h"
1.1.1.2 root 8: #include "bus.h"
9: #include "config.h"
1.1 root 10: #include "human68k.h"
1.1.1.2 root 11: #include "mpu680x0.h"
1.1 root 12: #include "renderer.h"
13: #include "rp5c15.h"
14: #include "scheduler.h"
15: #include "x68kkbd.h"
16: #include "xiospace.h"
17:
18: //
19: // X68030 VM
20: //
21:
22: // コンストラクタ
23: VM_X68030::VM_X68030()
24: {
1.1.1.2 root 25: // 機種固有パラメータ
26: // MPU クロックの初期値は機種ごとに異なる。単位は MHz
27: gConfig->SetDefault("mpu-clock", 25);
28: // RAM 初期値は MAX にしておく
29: gConfig->SetDefault("ram-size", 12);
30: // SPC の入力クロック (5MHz = 200ns)
31: gConfig->Add("!spc-tCLF", 200);
32:
1.1.1.3 ! root 33: // この機種に不要なパラメータはここで削除する
! 34: // (機種が決まるより前に全機種の設定の和集合を用意してあるため)
! 35: gConfig->Delete("luna-dipsw1");
! 36: gConfig->Delete("luna-dipsw2");
! 37: gConfig->Delete("prom-image");
! 38:
1.1 root 39: // デバイス (順序に注意)
1.1.1.2 root 40: // BusErrDevice は親コンストラクタで作成済み。
41:
42: gScheduler.reset(new Scheduler()); // required by *
1.1 root 43: gMPU.reset(new MPU680x0Device(0xff0000));
1.1.1.2 root 44: gRAM.reset(new RAMDevice()); // required by XIOSpace
1.1 root 45: xiospace.reset(new XIOSpaceDevice());
46:
47: gKeyboard.reset(new X68030Keyboard());
48: gRenderer.reset(new X68030Renderer());
49:
50: // 割り当て
51: // 今は拡張メモリがないので、今は上位8ビット全領域がミラーになっている。
52: for (int i = 0; i < countof(::devtable); i++) {
53: ::devtable[i] = xiospace.get();
54: }
55: }
56:
57: // デストラクタ
58: VM_X68030::~VM_X68030()
59: {
60: }
61:
1.1.1.2 root 62: // X68030 の電源ボタンを押す。
1.1 root 63: void
64: VM_X68030::PowerButton()
65: {
66: // 電源 ボタン
67: // ON OFF->ON 電源オフ割り込みをネゲート?
68: // ON ON ->OFF 電源オフ割り込みをアサート?
69: // OFF OFF->ON 電源オン
70: // OFF ON ->OFF (通常はあり得ないはず)
71:
72: // ボタンの状態を更新して..
73: power_button = !power_button;
74:
75: // デバイスに指示
76: DevicePowerOn();
77: }
78:
79:
80: //
81: // RXZ .r .x .z human68k console emulator
82: //
83:
84: // コンストラクタ
85: VM_RXZ::VM_RXZ()
86: {
1.1.1.2 root 87: // 機種固有パラメータ
88: // MPU クロックの初期値は機種ごとに異なる。単位は MHz
89: gConfig->SetDefault("mpu-clock", 25);
90: // RAM 初期値は MAX にしておく
91: gConfig->SetDefault("ram-size", 12);
92: // SPC の入力クロック (5MHz = 200ns)
93: gConfig->Add("!spc-tCLF", 200);
94:
1.1.1.3 ! root 95: // この機種に不要なパラメータはここで削除する
! 96: // (機種が決まるより前に全機種の設定の和集合を用意してあるため)
! 97: gConfig->Delete("luna-dipsw1");
! 98: gConfig->Delete("luna-dipsw2");
! 99: gConfig->Delete("prom-image");
! 100:
1.1 root 101: // デバイス (順序に注意)
1.1.1.2 root 102: // BusErrDevice は親コンストラクタで作成済み。
103:
104: gScheduler.reset(new Scheduler()); // required by *
1.1 root 105: gMPU.reset(new MPU680x0Device(0));
1.1.1.2 root 106: gRAM.reset(new RAMDevice()); // required by Human68k
1.1 root 107: gRTC.reset(new RP5C15Device());
108: human68k.reset(new Human68k());
109: }
110:
111: // デストラクタ
112: VM_RXZ::~VM_RXZ()
113: {
114: }
115:
116: void
117: VM_RXZ::PowerButton()
118: {
119: // RXZ の電源ボタンは電源オンにしか使わない。
120: //
121: // 電源 ボタン
122: // ON PUSH (何も起きない)
123: // OFF PUSH 電源オン
124:
125: // デバイスに指示
126: DevicePowerOn();
127: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.