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

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;
1.1.1.2 ! root       19:        event.SetName("System Clock");
1.1       root       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.