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

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

unix.superglobalmegacorp.com

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