Annotation of nono/vm/sysport.cpp, revision 1.1.1.6

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.1.4   root        9: #include "ram.h"
                     10: #include "romimg_x68k.h"
1.1       root       11: #include "sram.h"
                     12: 
1.1.1.5   root       13: std::unique_ptr<SysportDevice> gSysport;
                     14: 
1.1       root       15: SysportDevice::SysportDevice()
                     16: {
                     17:        logname = "sysport";
                     18:        devname = "Sysport";
                     19:        devaddr = baseaddr;
                     20:        devlen  = 0x2000;
                     21: }
                     22: 
                     23: SysportDevice::~SysportDevice()
                     24: {
                     25: }
                     26: 
1.1.1.4   root       27: void
                     28: SysportDevice::ResetHard()
                     29: {
1.1.1.6 ! root       30:        sysport.contrast = 0;   // XXX 未調査
1.1.1.4   root       31:        sysport.ram_wait = 0;
                     32:        sysport.rom_wait = 0;
1.1.1.6 ! root       33:        sysport.key_ctrl = false;
1.1.1.4   root       34: }
                     35: 
1.1       root       36: uint64
1.1.1.5   root       37: SysportDevice::Read(uint32 offset)
1.1       root       38: {
                     39:        uint32 data;
                     40: 
1.1.1.5   root       41:        switch (offset) {
1.1       root       42:         case SYSPORT::CONTRAST:
                     43:                data = 0xf0 | sysport.contrast;
                     44:                break;
                     45:         case SYSPORT::SCOPE3D:
                     46:                data = 0xff;
                     47:                break;
                     48:         case SYSPORT::IMAGEUNIT:
                     49:                data = 0xff;
                     50:                break;
                     51:         case SYSPORT::KEY:
1.1.1.2   root       52:                // キーボードは接続されてることにする
                     53:                data = 0x08;
1.1       root       54:                break;
                     55:         case SYSPORT::WAIT:
                     56:                data = 0xff;
                     57:                break;
                     58:         case SYSPORT::MPU:
                     59:                data = 0xdc;
                     60:                break;
                     61:         case SYSPORT::SRAMWP:
                     62:                data = 0xff;
                     63:                break;
1.1.1.3   root       64:         case SYSPORT::POWEROFF:
                     65:                data = 0xff;
                     66:                break;
                     67:         default:
                     68:                __unreachable();
1.1       root       69:        }
1.1.1.5   root       70:        putlog(1, "$%06X -> $%02x", gMPU->GetPaddr(), data);
1.1       root       71:        return data;
                     72: }
                     73: 
                     74: uint64
1.1.1.5   root       75: SysportDevice::Write(uint32 offset, uint32 data)
1.1       root       76: {
1.1.1.5   root       77:        switch (offset) {
1.1       root       78:         case SYSPORT::CONTRAST:
                     79:                sysport.contrast = data & 15;
                     80:                break;
                     81: 
                     82:         case SYSPORT::SCOPE3D:
                     83:         case SYSPORT::IMAGEUNIT:
                     84:                break;
                     85: 
                     86:         case SYSPORT::KEY:
1.1.1.3   root       87:                data &= 0x0e;
                     88:                // bit1,2
                     89:                if ((data & 0x06)) {
                     90:                        putlog(0, "$E8E007 未サポート書き込み $%02x", data);
                     91:                }
1.1.1.6 ! root       92:                sysport.key_ctrl = (data & 0x08);
1.1       root       93:                break;
                     94: 
                     95:         case SYSPORT::WAIT:
1.1.1.4   root       96:         {
1.1       root       97:                // 設定値で保持
                     98:                sysport.rom_wait = data >> 4;
                     99:                sysport.ram_wait = data;
1.1.1.4   root      100: 
                    101:                // ROM に指示。常に設定値 + 2 でよい
                    102:                gIPLROM1->SetWait(sysport.rom_wait + 2);
                    103:                gIPLROM2->SetWait(sysport.rom_wait + 2);
                    104:                gCGROM->SetWait(sysport.rom_wait + 2);
                    105:                // RAM に指示。InsideOut p.124
                    106:                int wait = sysport.ram_wait;
                    107:                if (wait > 0)
                    108:                        wait += 2;
                    109:                gRAM->SetWait(wait);
1.1       root      110:                break;
1.1.1.4   root      111:         }
1.1       root      112: 
                    113:         case SYSPORT::MPU:
                    114:                break;
                    115: 
                    116:         case SYSPORT::SRAMWP:
                    117:                if (data == 0x31) {
                    118:                        gSRAM->write_enable(true);
                    119:                } else {
                    120:                        gSRAM->write_enable(false);
                    121:                }
                    122:                break;
                    123: 
                    124:         case SYSPORT::POWEROFF:
1.1.1.5   root      125:                putlog(0, "$e8e00f (POWEROFF) 未サポート書き込み %02x", data);
1.1       root      126:                break;
1.1.1.3   root      127: 
                    128:         default:
                    129:                __unreachable();
1.1       root      130:        }
                    131:        return 0;
                    132: }
                    133: 
                    134: uint64
1.1.1.5   root      135: SysportDevice::Peek(uint32 offset)
1.1       root      136: {
                    137:        uint32 data;
                    138: 
1.1.1.5   root      139:        switch (offset) {
1.1       root      140:         case SYSPORT::CONTRAST:
                    141:                data = 0xf0 | sysport.contrast;
                    142:                break;
                    143:         case SYSPORT::SCOPE3D:
                    144:                data = 0xff;
                    145:                break;
                    146:         case SYSPORT::IMAGEUNIT:
                    147:                data = 0xff;
                    148:                break;
                    149:         case SYSPORT::KEY:
                    150:                data = 0xff;
                    151:                break;
                    152:         case SYSPORT::WAIT:
                    153:                data = 0xff;
                    154:                break;
                    155:         case SYSPORT::MPU:
                    156:                data = 0xdc;
                    157:                break;
                    158:         case SYSPORT::SRAMWP:
                    159:                data = 0xff;
                    160:                break;
1.1.1.3   root      161:         case SYSPORT::POWEROFF:
1.1       root      162:                data = 0xff;
                    163:                break;
1.1.1.3   root      164:         default:
                    165:                __unreachable();
1.1       root      166:        }
                    167:        return data;
                    168: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.