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

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: }

unix.superglobalmegacorp.com

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