|
|
1.1 root 1: //
2: // nono
3: // Copyright (C) 2020 nono project
4: // Licensed under nono-license.txt
5: //
6:
7: // TAS ポート
8:
9: #include "tas.h"
10:
11: std::unique_ptr<TASDevice> gTAS;
12:
13: // コンストラクタ
14: TASDevice::TASDevice()
15: {
16: logname = "tas";
17: devname = "TAS";
18: }
19:
20: // デストラクタ
21: TASDevice::~TASDevice()
22: {
23: }
24:
25: // XXX: RMW サイクルが発行される前提のレジスタなので、
26: // CPU / バス 側に RMW を実装しなければならない。
27:
28: uint64
29: TASDevice::Read(uint32 addr)
30: {
31: putlog(2, "TAS 読み込み 0x%02x", (uint8)tas);
32: return tas;
33: }
34:
35: uint64
36: TASDevice::Write(uint32 addr, uint32 data)
37: {
38: // bit7 のみ有効
39: // LUNA-I では B 接続なので、各バイトの bit7 に相当。
40: // LUNA88K では BFFF 接続なので bit31 に相当。
41: // 最上位ビット以外のビットは「不定」。
42: tas = data;
43: putlog(1, "TAS 書き込み 0x%02x", data);
44: return 0;
45: }
46:
47: #if 0
48: // RMW はこんな感じ?
49: uint64
50: TASDevice::ReadWrite(uint32 addr, uint32 data)
51: {
52: uint8 rv;
53: rv = tas.exchange(data);
54: putlog(1, "TAS RMW 0x%02 to 0x%02", rv, data);
55: return rv;
56: }
57: #endif
58:
59: uint64
60: TASDevice::Peek(uint32 addr)
61: {
62: return tas;
63: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.