summaryrefslogtreecommitdiff
path: root/io/model.h
blob: be16283e6aa7321cd17eb94642c3fbaba9643e8f (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#pragma once

#include <array>
#include <cstdint>
#include <istream>
#include <ostream>

#include "io/event.h"
#include "isa/isa.h"

struct iomodel {
    static constexpr unsigned int TT_OUTPUT_DELAY = 10;

    event_log log;
    std::uint64_t time = 0;
    bool interact(std::array<std::uint_fast32_t, NUM_CTLREGS> &ctlregs);
    bool done() {
        return log.lower_bound(time) == log.end();
    }

    std::uint64_t load_time = 0;
    void load_evt(std::istream &fh);

    std::ostream & write_evt(std::ostream &fh);
};