Annotation of nono/vm/sysclk.cpp, revision 1.1

1.1     ! root        1: //
        !             2: // nono
        !             3: // Copyright (C) 2018 [email protected]
        !             4: //
        !             5: 
        !             6: #include "sysclk.h"
        !             7: #include "mpu.h"
        !             8: 
        !             9: SysClkDevice::SysClkDevice()
        !            10: {
        !            11:        logname = "sysclk";
        !            12:        devname = "SystemClock";
        !            13:        devaddr = 0x63000000;
        !            14: 
        !            15:        event.dev = this;
        !            16:        event.func = (DeviceCallback_t)&SysClkDevice::Callback;
        !            17:        event.code = 0;
        !            18:        event.time = 16.666667_msec;
        !            19:        event.name = "System Clock";
        !            20: }
        !            21: 
        !            22: SysClkDevice::~SysClkDevice()
        !            23: {
        !            24: }
        !            25: 
        !            26: bool
        !            27: SysClkDevice::PowerOn()
        !            28: {
        !            29:        // 電源オンですぐ起動
        !            30:        gScheduler->AddEvent(&event);
        !            31:        return true;
        !            32: }
        !            33: 
        !            34: uint64
        !            35: SysClkDevice::Read8(uint32 addr)
        !            36: {
        !            37:        uint32 an = addr - devaddr;
        !            38: 
        !            39:        if (an == 0) {
        !            40:                uint8 data = 0;
        !            41:                if (sysint) {
        !            42:                        data |= 0x80;
        !            43:                }
        !            44:                return data;
        !            45:        } else {
        !            46:                // それ以外のポートがどう見えるかとか未調査
        !            47:                return 0xff;
        !            48:        }
        !            49: }
        !            50: 
        !            51: uint64
        !            52: SysClkDevice::Write8(uint32 addr, uint32 data)
        !            53: {
        !            54:        uint32 an = addr - devaddr;
        !            55: 
        !            56:        if (an == 0) {
        !            57:                // 何か書き込まれたら、フラグをクリア
        !            58:                sysint = false;
        !            59:                putlog(1, "システムクロック割り込みクリア");
        !            60:        } else {
        !            61:                // それ以外 (特に +1, +2, +3) で何が起きるかは未調査
        !            62:        }
        !            63:        return 0;
        !            64: }
        !            65: 
        !            66: // イベントハンドラ
        !            67: void
        !            68: SysClkDevice::Callback(int arg)
        !            69: {
        !            70:        putlog(3, "システムクロック割り込み発生");
        !            71:        sysint = true;
        !            72:        gMPU->Interrupt(5);
        !            73:        gScheduler->AddEvent(&event);
        !            74: }

unix.superglobalmegacorp.com

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