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