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

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

unix.superglobalmegacorp.com

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