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