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

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

unix.superglobalmegacorp.com

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