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

1.1       root        1: //
                      2: // nono
1.1.1.4 ! root        3: // Copyright (C) 2020 nono project
        !             4: // Licensed under nono-license.txt
1.1       root        5: //
                      6: 
                      7: #include "sysclk.h"
1.1.1.4 ! root        8: #include "mainapp.h"
1.1       root        9: #include "mpu.h"
                     10: 
                     11: SysClkDevice::SysClkDevice()
                     12: {
                     13:        logname = "sysclk";
                     14:        devname = "SystemClock";
                     15:        devaddr = 0x63000000;
                     16: 
                     17:        event.dev = this;
                     18:        event.func = (DeviceCallback_t)&SysClkDevice::Callback;
                     19:        event.code = 0;
1.1.1.2   root       20:        event.SetName("System Clock");
1.1       root       21: }
                     22: 
                     23: SysClkDevice::~SysClkDevice()
                     24: {
                     25: }
                     26: 
                     27: bool
1.1.1.4 ! root       28: SysClkDevice::Init()
        !            29: {
        !            30:        // クロックは機種ごとに異なる
        !            31:        const ConfigItem& item = gConfig->Find("!sysclk-period");
        !            32:        event.time = item.AsInt();
        !            33:        return true;
        !            34: }
        !            35: 
        !            36: bool
1.1       root       37: SysClkDevice::PowerOn()
                     38: {
                     39:        // 電源オンですぐ起動
1.1.1.3   root       40:        event.Start();
1.1       root       41:        return true;
                     42: }
                     43: 
                     44: uint64
1.1.1.3   root       45: SysClkDevice::Read(uint32 addr)
1.1       root       46: {
1.1.1.3   root       47:        // 1 ポートしかない
                     48:        return GetInt();
                     49: }
1.1       root       50: 
1.1.1.3   root       51: uint64
                     52: SysClkDevice::Write(uint32 addr, uint32 data)
                     53: {
                     54:        // 何か書き込まれたら、フラグをクリア
                     55:        sysint = false;
                     56:        putlog(1, "システムクロック割り込みクリア");
                     57:        return 0;
1.1       root       58: }
                     59: 
                     60: uint64
1.1.1.3   root       61: SysClkDevice::Peek(uint32 addr)
1.1       root       62: {
1.1.1.3   root       63:        return GetInt();
                     64: }
                     65: 
                     66: // 割り込み状態を取得(?)
                     67: uint8
                     68: SysClkDevice::GetInt() const
                     69: {
                     70:        uint8 data = 0;
1.1       root       71: 
1.1.1.3   root       72:        if (sysint) {
                     73:                data |= 0x80;
1.1       root       74:        }
1.1.1.3   root       75:        return data;
1.1       root       76: }
                     77: 
                     78: // イベントハンドラ
                     79: void
                     80: SysClkDevice::Callback(int arg)
                     81: {
                     82:        putlog(3, "システムクロック割り込み発生");
                     83:        sysint = true;
1.1.1.4 ! root       84:        gMPU->Interrupt(this, 5);
1.1.1.3   root       85:        event.Start();
1.1       root       86: }

unix.superglobalmegacorp.com

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