|
|
1.1 root 1: //
2: // nono
1.1.1.3 ! root 3: // Copyright (C) 2020 nono project
! 4: // Licensed under nono-license.txt
1.1 root 5: //
6:
7: #include "sysport.h"
1.1.1.3 ! root 8: #include "mfp.h"
1.1 root 9: #include "sram.h"
10:
11: SysportDevice::SysportDevice()
12: {
13: logname = "sysport";
14: devname = "Sysport";
15: devaddr = baseaddr;
16: devlen = 0x2000;
17: }
18:
19: SysportDevice::~SysportDevice()
20: {
21: }
22:
23: uint64
1.1.1.3 ! root 24: SysportDevice::Read(uint32 addr)
1.1 root 25: {
26: uint32 data;
27:
1.1.1.3 ! root 28: switch (addr) {
1.1 root 29: case SYSPORT::CONTRAST:
30: data = 0xf0 | sysport.contrast;
31: break;
32: case SYSPORT::SCOPE3D:
33: data = 0xff;
34: break;
35: case SYSPORT::IMAGEUNIT:
36: data = 0xff;
37: break;
38: case SYSPORT::KEY:
1.1.1.2 root 39: // キーボードは接続されてることにする
40: data = 0x08;
1.1 root 41: break;
42: case SYSPORT::WAIT:
43: data = 0xff;
44: break;
45: case SYSPORT::MPU:
46: data = 0xdc;
47: break;
48: case SYSPORT::SRAMWP:
49: data = 0xff;
50: break;
1.1.1.3 ! root 51: case SYSPORT::POWEROFF:
! 52: data = 0xff;
! 53: break;
! 54: default:
! 55: __unreachable();
1.1 root 56: }
57: putlog(1, "$%06X -> $%02x", addr, data);
58: return data;
59: }
60:
61: uint64
1.1.1.3 ! root 62: SysportDevice::Write(uint32 addr, uint32 data)
1.1 root 63: {
1.1.1.3 ! root 64: switch (addr) {
1.1 root 65: case SYSPORT::CONTRAST:
66: sysport.contrast = data & 15;
67: break;
68:
69: case SYSPORT::SCOPE3D:
70: case SYSPORT::IMAGEUNIT:
71: break;
72:
73: case SYSPORT::KEY:
1.1.1.3 ! root 74: data &= 0x0e;
! 75: // bit1,2
! 76: if ((data & 0x06)) {
! 77: putlog(0, "$E8E007 未サポート書き込み $%02x", data);
! 78: }
! 79: // bit3 KEY CTRL は MFP で管理する
! 80: gMFP->SetKeyCtrl(data & 0x08);
1.1 root 81: break;
82:
83: case SYSPORT::WAIT:
84: // 設定値で保持
85: sysport.rom_wait = data >> 4;
86: sysport.ram_wait = data;
87: break;
88:
89: case SYSPORT::MPU:
90: break;
91:
92: case SYSPORT::SRAMWP:
93: if (data == 0x31) {
94: gSRAM->write_enable(true);
95: } else {
96: gSRAM->write_enable(false);
97: }
98: break;
99:
100: case SYSPORT::POWEROFF:
101: putlog(0, "$E8E00F (POWEROFF) 未サポート書き込み %02x", data);
102: break;
1.1.1.3 ! root 103:
! 104: default:
! 105: __unreachable();
1.1 root 106: }
107: return 0;
108: }
109:
110: uint64
1.1.1.3 ! root 111: SysportDevice::Peek(uint32 addr)
1.1 root 112: {
113: uint32 data;
114:
1.1.1.3 ! root 115: switch (addr) {
1.1 root 116: case SYSPORT::CONTRAST:
117: data = 0xf0 | sysport.contrast;
118: break;
119: case SYSPORT::SCOPE3D:
120: data = 0xff;
121: break;
122: case SYSPORT::IMAGEUNIT:
123: data = 0xff;
124: break;
125: case SYSPORT::KEY:
126: data = 0xff;
127: break;
128: case SYSPORT::WAIT:
129: data = 0xff;
130: break;
131: case SYSPORT::MPU:
132: data = 0xdc;
133: break;
134: case SYSPORT::SRAMWP:
135: data = 0xff;
136: break;
1.1.1.3 ! root 137: case SYSPORT::POWEROFF:
1.1 root 138: data = 0xff;
139: break;
1.1.1.3 ! root 140: default:
! 141: __unreachable();
1.1 root 142: }
143: return data;
144: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.